diff --git a/com.actionsoft.apps.coe.pal/db/6.3/db2.sql b/com.actionsoft.apps.coe.pal/db/6.3/db2.sql new file mode 100644 index 00000000..a4324abb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.3/db2.sql @@ -0,0 +1,88 @@ +CREATE TABLE APP_ACT_COE_PAL_UPFILE(ID CHAR(36) NOT NULL ,PALREPOSITORYID CHAR(36),SHAPEID NVARCHAR(64),FILETYPE CHAR(1),FILENAME NVARCHAR(128),DOWNLOAD SMALLINT ,CREATEUSER NVARCHAR(36),CREATETIME TIMESTAMP ,CONSTRAINT APP_ACT_COE_PAL_UPFILE_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_FILE(ID NVARCHAR(64) NOT NULL ,PALREPOSITORYID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_FILE_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_SYSTEMNAME(ID CHAR(36) NOT NULL ,SYSTEMNAME NVARCHAR(36),ISDEFAULT SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_SYSTEMNAME_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_TEAM_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PERMTYPE SMALLINT ,RESOURCEID NVARCHAR(128),CONSTRAINT APP_ACT_COE_TEAM_PERM_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),USERID NVARCHAR(36),ACTIONTYPE NVARCHAR(64),EXTENDAPPS NVARCHAR(225),CONSTRAINT APP_ACT_COE_TEAMMEMBER_PERM_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_USERGRP(ID CHAR(36) NOT NULL ,WSID CHAR(36),GROUPCODE NVARCHAR(36),CATEGORY NVARCHAR(64),GROUPNAME NVARCHAR(128),GROUPDESC NVARCHAR(255),CREATEUSER NVARCHAR(36),CREATEDATE TIMESTAMP ,CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_PERM(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),PERMTYPE SMALLINT ,RESOURCEID NVARCHAR(128),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PERM_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_ROLE(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),ROLEID NVARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_ROLE_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_COMMENT(ID CHAR(36) NOT NULL ,PID CHAR(36),STREAMID CHAR(36),WSID CHAR(36),TARGETTYPE SMALLINT ,TARGETID CHAR(36),TEAMID CHAR(36),USERID NVARCHAR(36),USERCOMMENT NVARCHAR(1000),COMMENTDATE TIMESTAMP ,INFOTYPE SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_COMMENT_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH(ID CHAR(36) NOT NULL ,PROCESSINSTID NVARCHAR(36),WSID CHAR(36),USERID NVARCHAR(36),AUDITORID NVARCHAR(36),PUBLISHDATE TIMESTAMP ,PUBLISHDESC NVARCHAR(1000),PUBLISHN NUMERIC(6),PUBLISHC NUMERIC(6),PUBLISHS NUMERIC(6),TEAMID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_LIST(ID CHAR(36) NOT NULL ,PID CHAR(36),PALREPOSITORYID CHAR(36),ACTIONTYPE CHAR(1),PUBLISHDESC NVARCHAR(255),TASKID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_LIST_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_OUTPUT_TASK(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PROFILEID NVARCHAR(36),TASKNAME NVARCHAR(64),USERID NVARCHAR(36),CREATETIME TIMESTAMP ,BEGINTIME TIMESTAMP ,ENDTIME TIMESTAMP ,TASKSTATE SMALLINT ,THREADID NVARCHAR(128),LANG NVARCHAR(32),ISDISPLAY VARCHAR(2),CONSTRAINT APP_ACT_COE_PAL_OUTPUT_TASK_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PROP(PROPERTYKEY NVARCHAR(128) NOT NULL ,PROPERTYVALUE CLOB ,CONSTRAINT APP_ACT_COE_PROPERTY_PK PRIMARY KEY (PROPERTYKEY)); + +CREATE TABLE APP_ACT_COE_USER(ID CHAR(36) NOT NULL ,USERID NVARCHAR(36),ISADMIN SMALLINT ,CONSTRAINT APP_ACT_COE_USER_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_WORKSPACE(ID CHAR(36) NOT NULL ,WSNAME NVARCHAR(255),WSDM NVARCHAR(255),WSADMIN NVARCHAR(255),WSDESC NVARCHAR(255),WSSTATE SMALLINT ,WSORGTYPE SMALLINT ,WSTCTYPE SMALLINT ,WSBGURL NVARCHAR(255),WSORDERINDEX SMALLINT ,WSVER SMALLINT ,WSVERSIONUUID CHAR(36),ISUSE SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_WORKSPACE_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_REPOSITORY(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLRID CHAR(36),PLNO NVARCHAR(36),PLNAME NVARCHAR(128),PLLEVEL SMALLINT ,PLPARENTID NVARCHAR(36),PLORDERINDEX SMALLINT ,PLISBOTTOMLEVEL SMALLINT ,PLDESC NVARCHAR(2000),PLRD NVARCHAR(36),PLRP NVARCHAR(36),PM NVARCHAR(36),PLINPUT NVARCHAR(255),PLOUTPUT NVARCHAR(255),PLEXECTYPE SMALLINT ,PLSYSTEMNAME NVARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL NVARCHAR(255),PLCOLOR NVARCHAR(36),PLCATEGORY NVARCHAR(36),PLMETHODID NVARCHAR(36),PLVER SMALLINT ,PLVERSIONID CHAR(36),ISUSE SMALLINT ,ISPUBLISH SMALLINT ,ISSYSTEMFILE SMALLINT ,FILEPATH NVARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE TIMESTAMP ,MODIFYDATE TIMESTAMP ,PLDUTYDEPT NVARCHAR(36),PLDUTYPERSON NVARCHAR(128),LOCKUSER NVARCHAR(225),PUBLISHDATE TIMESTAMP ,CHANGEDATE TIMESTAMP ,STOPDATE TIMESTAMP ,ISSTOP SMALLINT ,ISAPPROVAL SMALLINT ,EXT1 NVARCHAR(64),EXT2 NVARCHAR(128),EXT3 NVARCHAR(255),EXT4 NVARCHAR(255),CONSTRAINT APP_ACT_COE_PAL_REPOSITORY_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_COPY(ID NVARCHAR(64) NOT NULL ,SHAPEGROUPTID NVARCHAR(64),SHAPENAME NVARCHAR(128),SHAPECATEGORYNAME NVARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE NVARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_COPY_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_PASTE(ID NVARCHAR(64) NOT NULL ,SHAPEGROUPTID NVARCHAR(64),SHAPENAME NVARCHAR(128),SHAPECATEGORYNAME NVARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE NVARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_PASTE_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_RLAT(ID CHAR(36) NOT NULL ,FILEID NVARCHAR(64),SHAPEID NVARCHAR(64),SHAPETEXT NVARCHAR(128),ATTRID NVARCHAR(64),RELATIONFILEID NVARCHAR(64),RELATIONSHAPEID NVARCHAR(64),RELATIONSHAPETEXT NVARCHAR(128),CONSTRAINT APP_ACT_COE_PAL_SHAPE_RT_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_REPO_R(ID CHAR(36) NOT NULL ,REMOVEID CHAR(36),WSID CHAR(36),PLRID CHAR(36),PLNO NVARCHAR(36),PLNAME NVARCHAR(128),PLLEVEL SMALLINT ,PLPARENTID NVARCHAR(36),PLORDERINDEX SMALLINT ,PLISBOTTOMLEVEL SMALLINT ,PLDESC NVARCHAR(2000),PLRD NVARCHAR(36),PLRP NVARCHAR(36),PM NVARCHAR(36),PLINPUT NVARCHAR(255),PLOUTPUT NVARCHAR(255),PLEXECTYPE SMALLINT ,PLSYSTEMNAME NVARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL NVARCHAR(255),PLCOLOR NVARCHAR(36),PLCATEGORY NVARCHAR(36),PLMETHODID NVARCHAR(36),PLVER SMALLINT ,PLVERSIONID CHAR(36),ISUSE SMALLINT ,ISPUBLISH SMALLINT ,ISSYSTEMFILE SMALLINT ,FILEPATH NVARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE TIMESTAMP ,MODIFYDATE TIMESTAMP ,PLDUTYDEPT NVARCHAR(36),PLDUTYPERSON NVARCHAR(128),ISSTOP SMALLINT ,ISAPPROVAL SMALLINT ,EXT1 NVARCHAR(64),EXT2 NVARCHAR(128),EXT3 NVARCHAR(255),EXT4 NVARCHAR(255),CONSTRAINT AWS_PAL_REPOSITORY_R_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_REPO_R_INFO(ID CHAR(36) NOT NULL ,REMOVEUSER NVARCHAR(36),REMOVETIME TIMESTAMP ,WSID NVARCHAR(36),RESOURCEID NVARCHAR(36),REMOVETYPE SMALLINT ,CONSTRAINT AWS_PAL_REPOSITORY_R_INFO_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_BACKUP(ID CHAR(36) NOT NULL ,WSID CHAR(36),BACKUPTIME TIMESTAMP ,USERID NVARCHAR(36),REMARK NVARCHAR(255),STATE SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_BACKUP_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_PROP(ID CHAR(36) NOT NULL ,PLID CHAR(36),PROPERTYID NVARCHAR(100),PROPERTYNAME NVARCHAR(100),PROPERTYVALUE NVARCHAR(2000),ORDERINDEX SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_PROPERTY_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_CONFIG(ID CHAR(36) NOT NULL ,WSID CHAR(36),METHODID NVARCHAR(36),SHAPEID NVARCHAR(100),ATTRIBUTE NVARCHAR(255),ORDERINDEX SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_SHAPE_CONFIG_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID NVARCHAR(100),ATTRNAME NVARCHAR(100),ATTRVALUE NVARCHAR(2000),CATEGORY NVARCHAR(36),METHODID NVARCHAR(36),TYPE NVARCHAR(36),ISDELETE NVARCHAR(10),ORDERINDEX SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_ATTRIBUTE_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID NVARCHAR(100),ATTRNAME NVARCHAR(100),ATTRVALUE NVARCHAR(2000),CATEGORY NVARCHAR(36),METHODID NVARCHAR(36),TYPE NVARCHAR(36),SHAPENAME NVARCHAR(64),ORDERINDEX SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_SHAPE_ATTRIBUTE_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_SPCL_PROP(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLID CHAR(36),TYPE CHAR(100),VALUETEXT NVARCHAR(2000),CONSTRAINT APP_ACT_COE_PAL_SPECIAL_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_CORRELATE(PLID CHAR(36) NOT NULL ,WSID CHAR(36),PLAWSVERSIONID CHAR(36),PLAWSID CHAR(36),PLVERSIONID NVARCHAR(36),CORRELATETYPE SMALLINT ,ISCORRELATE SMALLINT ,EXT1 NVARCHAR(64),EXT2 NVARCHAR(128),EXT3 NVARCHAR(255),EXT4 NVARCHAR(255),CONSTRAINT APP_ACT_COE_PAL_CORRELATE_PK PRIMARY KEY (PLID)); + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_COM(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),SORT NUMERIC(16),CONSTRAINT APP_ACT_COE_PAL_COMMON_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM_EXT(ID CHAR(36) NOT NULL ,BINDID CHAR(36),RESOURCEID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_EXTEND_PK PRIMARY KEY (ID)); + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_FREQ(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),COUNT NUMERIC(16),CONSTRAINT APP_ACT_COE_PAL_FREQUENCY_PK PRIMARY KEY (ID)); + +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_IND1 ON APP_ACT_COE_PAL_PUBLISH (PUBLISHDATE); +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_L_I ON APP_ACT_COE_PAL_PUBLISH_LIST (PID); +CREATE UNIQUE INDEX APP_ACT_COE_PAL_USERGRP_UK ON APP_ACT_COE_PAL_USERGRP(WSID,GROUPCODE); +CREATE UNIQUE INDEX APP_ACT_COE_PAL_USERGRP_P_UK ON APP_ACT_COE_PAL_USERGRP_PERM(GROUPID,PERMTYPE,RESOURCEID); +CREATE UNIQUE INDEX APP_ACT_COE_PAL_USERGRP_R_UK ON APP_ACT_COE_PAL_USERGRP_ROLE (GROUPID,ROLEID); +CREATE UNIQUE INDEX APP_ACT_COE_TEAM_PERM_UK ON APP_ACT_COE_TEAM_PERM (TEAMID,WSID,PERMTYPE,RESOURCEID); +CREATE UNIQUE INDEX APP_ACT_COE_TEAMMBR_PERM_UK ON APP_ACT_COE_TEAMMBR_PERM (TEAMID,USERID); +CREATE INDEX APP_ACT_COE_PAL_COMMENT_IND1 ON APP_ACT_COE_PAL_COMMENT (TARGETID,COMMENTDATE); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('e0583f9a-2f6e-49fe-b4e8-4b9a5f3c257a','AWS BPM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('0df9d8b1-b082-4e3f-aadb-45fd76b82aeb','SAP ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('cfbcec4a-b0ed-4e43-9866-bcda72d69eab','Oracle ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('2a5faee5-0c12-4e29-b32e-aab42552ff6d','Oracle Siebel CRM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('16f37ce8-dc62-4ffb-b6ca-fc248b51ff73','Oracle JDE ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('275e402a-a2c6-4d57-83a1-3f0da50539e4','Oracle PeopleSoft',0); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('CoE_Test','false'); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('InitStep','6'); + +INSERT INTO APP_ACT_COE_USER(ID,USERID,ISADMIN) VALUES('9e23d27b-26a2-4ec5-839b-d9fe4c1eb9e3','admin',1); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.3/dm.sql b/com.actionsoft.apps.coe.pal/db/6.3/dm.sql new file mode 100644 index 00000000..8f027e49 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.3/dm.sql @@ -0,0 +1,88 @@ +CREATE TABLE APP_ACT_COE_PAL_UPFILE(ID CHAR(36) NOT NULL ,PALREPOSITORYID CHAR(36),SHAPEID VARCHAR2(128),FILETYPE CHAR(1),FILENAME VARCHAR2(256),DOWNLOAD NUMBER(1),CREATEUSER VARCHAR2(72),CREATETIME DATETIME ,CONSTRAINT APP_ACT_COE_PAL_UPFILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_FILE(ID VARCHAR2(128) NOT NULL ,PALREPOSITORYID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_FILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SYSTEMNAME(ID CHAR(36) NOT NULL ,SYSTEMNAME VARCHAR2(72),ISDEFAULT NUMBER(1),CONSTRAINT APP_ACT_COE_PAL_SYSTEMNAME_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAM_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PERMTYPE NUMBER(2),RESOURCEID VARCHAR2(256),CONSTRAINT APP_ACT_COE_TEAM_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),USERID VARCHAR2(72),ACTIONTYPE VARCHAR2(128),EXTENDAPPS VARCHAR2(450),CONSTRAINT APP_ACT_COE_TEAMMEMBER_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP(ID CHAR(36) NOT NULL ,WSID CHAR(36),GROUPCODE VARCHAR2(72),CATEGORY VARCHAR2(128),GROUPNAME VARCHAR2(256),GROUPDESC VARCHAR2(510),CREATEUSER VARCHAR2(72),CREATEDATE DATETIME ,CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_PERM(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),PERMTYPE NUMBER(2),RESOURCEID VARCHAR2(256),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_ROLE(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),ROLEID VARCHAR2(72),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_ROLE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_COMMENT(ID CHAR(36) NOT NULL ,PID CHAR(36),STREAMID CHAR(36),WSID CHAR(36),TARGETTYPE NUMBER(1),TARGETID CHAR(36),TEAMID CHAR(36),USERID VARCHAR2(72),USERCOMMENT VARCHAR2(2000),COMMENTDATE DATETIME ,INFOTYPE NUMBER(1),CONSTRAINT APP_ACT_COE_PAL_COMMENT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH(ID CHAR(36) NOT NULL ,PROCESSINSTID VARCHAR2(72),WSID CHAR(36),USERID VARCHAR2(72),AUDITORID VARCHAR2(72),PUBLISHDATE DATETIME ,PUBLISHDESC VARCHAR2(2000),PUBLISHN NUMBER(6),PUBLISHC NUMBER(6),PUBLISHS NUMBER(6),TEAMID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_LIST(ID CHAR(36) NOT NULL ,PID CHAR(36),PALREPOSITORYID CHAR(36),ACTIONTYPE CHAR(1),PUBLISHDESC VARCHAR2(510),TASKID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_LIST_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_OUTPUT_TASK(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PROFILEID VARCHAR2(72),TASKNAME VARCHAR2(128),USERID VARCHAR2(72),CREATETIME DATETIME ,BEGINTIME DATETIME ,ENDTIME DATETIME ,TASKSTATE NUMBER(1),THREADID VARCHAR2(256),LANG VARCHAR2(64),ISDISPLAY VARCHAR2(4),CONSTRAINT APP_ACT_COE_PAL_OUTPUT_TASK_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PROP(PROPERTYKEY VARCHAR2(256) NOT NULL ,PROPERTYVALUE CLOB ,CONSTRAINT APP_ACT_COE_PROPERTY_PK PRIMARY KEY (PROPERTYKEY)) ; + +CREATE TABLE APP_ACT_COE_USER(ID CHAR(36) NOT NULL ,USERID VARCHAR2(72),ISADMIN NUMBER(1),CONSTRAINT APP_ACT_COE_USER_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_WORKSPACE(ID CHAR(36) NOT NULL ,WSNAME VARCHAR2(510),WSDM VARCHAR2(510),WSADMIN VARCHAR2(510),WSDESC VARCHAR2(510),WSSTATE NUMBER(1),WSORGTYPE NUMBER(1),WSTCTYPE NUMBER(1),WSBGURL VARCHAR2(510),WSORDERINDEX NUMBER(3),WSVER NUMBER(3),WSVERSIONUUID CHAR(36),ISUSE NUMBER(1),CONSTRAINT APP_ACT_COE_PAL_WORKSPACE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPOSITORY(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR2(72),PLNAME VARCHAR2(256),PLLEVEL NUMBER(2),PLPARENTID VARCHAR2(72),PLORDERINDEX NUMBER(3),PLISBOTTOMLEVEL NUMBER(1),PLDESC VARCHAR2(4000),PLRD VARCHAR2(72),PLRP VARCHAR2(72),PM VARCHAR2(72),PLINPUT VARCHAR2(510),PLOUTPUT VARCHAR2(510),PLEXECTYPE NUMBER(1),PLSYSTEMNAME VARCHAR2(72),PLAWSPID CHAR(36),PLDIAGRAMURL VARCHAR2(510),PLCOLOR VARCHAR2(72),PLCATEGORY VARCHAR2(72),PLMETHODID VARCHAR2(72),PLVER NUMBER(3),PLVERSIONID CHAR(36),ISUSE NUMBER(1),ISPUBLISH NUMBER(1),ISSYSTEMFILE NUMBER(1),FILEPATH VARCHAR2(510),HISTORYMAXVERSION NUMBER(6),VIEWCOUNT NUMBER(12),CREATEUSER VARCHAR2(72),MODIFYUSER VARCHAR2(72),CREATEDATE DATETIME ,MODIFYDATE DATETIME ,PLDUTYDEPT VARCHAR2(72),PLDUTYPERSON VARCHAR2(256),LOCKUSER VARCHAR2(450),PUBLISHDATE DATETIME ,CHANGEDATE DATETIME ,STOPDATE DATETIME ,ISSTOP NUMBER(1),ISAPPROVAL NUMBER(1),EXT1 VARCHAR2(128),EXT2 VARCHAR2(256),EXT3 VARCHAR2(510),EXT4 VARCHAR2(510),CONSTRAINT APP_ACT_COE_PAL_REPOSITORY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_COPY(ID VARCHAR2(128) NOT NULL ,SHAPEGROUPTID VARCHAR2(128),SHAPENAME VARCHAR2(256),SHAPECATEGORYNAME VARCHAR2(128),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR2(72),CONSTRAINT APP_ACT_COE_PAL_SHAPE_COPY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_PASTE(ID VARCHAR2(128) NOT NULL ,SHAPEGROUPTID VARCHAR2(128),SHAPENAME VARCHAR2(256),SHAPECATEGORYNAME VARCHAR2(128),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR2(72),CONSTRAINT APP_ACT_COE_PAL_SHAPE_PASTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_RLAT(ID CHAR(36) NOT NULL ,FILEID VARCHAR2(128),SHAPEID VARCHAR2(128),SHAPETEXT VARCHAR2(256),ATTRID VARCHAR2(128),RELATIONFILEID VARCHAR2(128),RELATIONSHAPEID VARCHAR2(128),RELATIONSHAPETEXT VARCHAR2(256),CONSTRAINT APP_ACT_COE_PAL_SHAPE_RT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R(ID CHAR(36) NOT NULL ,REMOVEID CHAR(36),WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR2(72),PLNAME VARCHAR2(256),PLLEVEL NUMBER(2),PLPARENTID VARCHAR2(72),PLORDERINDEX NUMBER(3),PLISBOTTOMLEVEL NUMBER(1),PLDESC VARCHAR2(4000),PLRD VARCHAR2(72),PLRP VARCHAR2(72),PM VARCHAR2(72),PLINPUT VARCHAR2(510),PLOUTPUT VARCHAR2(510),PLEXECTYPE NUMBER(1),PLSYSTEMNAME VARCHAR2(72),PLAWSPID CHAR(36),PLDIAGRAMURL VARCHAR2(510),PLCOLOR VARCHAR2(72),PLCATEGORY VARCHAR2(72),PLMETHODID VARCHAR2(72),PLVER NUMBER(3),PLVERSIONID CHAR(36),ISUSE NUMBER(1),ISPUBLISH NUMBER(1),ISSYSTEMFILE NUMBER(1),FILEPATH VARCHAR2(510),HISTORYMAXVERSION NUMBER(6),VIEWCOUNT NUMBER(12),CREATEUSER VARCHAR2(72),MODIFYUSER VARCHAR2(72),CREATEDATE DATETIME ,MODIFYDATE DATETIME ,PLDUTYDEPT VARCHAR2(72),PLDUTYPERSON VARCHAR2(256),ISSTOP NUMBER(1),ISAPPROVAL NUMBER(1),EXT1 VARCHAR2(128),EXT2 VARCHAR2(256),EXT3 VARCHAR2(510),EXT4 VARCHAR2(510),CONSTRAINT AWS_PAL_REPOSITORY_R_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R_INFO(ID CHAR(36) NOT NULL ,REMOVEUSER VARCHAR2(72),REMOVETIME DATETIME ,WSID VARCHAR2(72),RESOURCEID VARCHAR2(72),REMOVETYPE NUMBER(1),CONSTRAINT AWS_PAL_REPOSITORY_R_INFO_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_BACKUP(ID CHAR(36) NOT NULL ,WSID CHAR(36),BACKUPTIME DATETIME ,USERID VARCHAR2(72),REMARK VARCHAR2(510),STATE NUMBER(1),CONSTRAINT APP_ACT_COE_PAL_BACKUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PROP(ID CHAR(36) NOT NULL ,PLID CHAR(36),PROPERTYID VARCHAR2(200),PROPERTYNAME VARCHAR2(200),PROPERTYVALUE VARCHAR2(4000),ORDERINDEX NUMBER(3),CONSTRAINT APP_ACT_COE_PAL_PROPERTY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_CONFIG(ID CHAR(36) NOT NULL ,WSID CHAR(36),METHODID VARCHAR2(72),SHAPEID VARCHAR2(200),ATTRIBUTE VARCHAR2(510),ORDERINDEX NUMBER(3),CONSTRAINT APP_ACT_COE_PAL_SHAPE_CONFIG_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR2(200),ATTRNAME VARCHAR2(200),ATTRVALUE VARCHAR2(4000),CATEGORY VARCHAR2(72),METHODID VARCHAR2(72),TYPE VARCHAR2(72),ISDELETE VARCHAR2(20),ORDERINDEX NUMBER(3),CONSTRAINT APP_ACT_COE_PAL_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR2(200),ATTRNAME VARCHAR2(200),ATTRVALUE VARCHAR2(4000),CATEGORY VARCHAR2(72),METHODID VARCHAR2(72),TYPE VARCHAR2(72),SHAPENAME VARCHAR2(128),ORDERINDEX NUMBER(3),CONSTRAINT APP_ACT_COE_PAL_SHAPE_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SPCL_PROP(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLID CHAR(36),TYPE CHAR(100),VALUETEXT VARCHAR2(4000),CONSTRAINT APP_ACT_COE_PAL_SPECIAL_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_CORRELATE(PLID CHAR(36) NOT NULL ,WSID CHAR(36),PLAWSVERSIONID CHAR(36),PLAWSID CHAR(36),PLVERSIONID VARCHAR2(72),CORRELATETYPE NUMBER(1),ISCORRELATE NUMBER(1),EXT1 VARCHAR2(128),EXT2 VARCHAR2(256),EXT3 VARCHAR2(510),EXT4 VARCHAR2(510),CONSTRAINT APP_ACT_COE_PAL_CORRELATE_PK PRIMARY KEY (PLID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_COM(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),SORT NUMBER(16),CONSTRAINT APP_ACT_COE_PAL_COMMON_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM_EXT(ID CHAR(36) NOT NULL ,BINDID CHAR(36),RESOURCEID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_EXTEND_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_FREQ(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),COUNT NUMBER(16),CONSTRAINT APP_ACT_COE_PAL_FREQUENCY_PK PRIMARY KEY (ID)) ; + +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_IND1 ON APP_ACT_COE_PAL_PUBLISH (PUBLISHDATE); +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_L_I ON APP_ACT_COE_PAL_PUBLISH_LIST (PID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_UK UNIQUE (WSID,GROUPCODE); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_PERM ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_P_UK UNIQUE (GROUPID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_ROLE ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_R_UK UNIQUE (GROUPID,ROLEID); +ALTER TABLE APP_ACT_COE_TEAM_PERM ADD CONSTRAINT APP_ACT_COE_TEAM_PERM_UK UNIQUE (TEAMID,WSID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_TEAMMBR_PERM ADD CONSTRAINT APP_ACT_COE_TEAMMBR_PERM_UK UNIQUE (TEAMID,USERID); +CREATE INDEX APP_ACT_COE_PAL_COMMENT_IND1 ON APP_ACT_COE_PAL_COMMENT (TARGETID,COMMENTDATE); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('e0583f9a-2f6e-49fe-b4e8-4b9a5f3c257a','AWS BPM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('0df9d8b1-b082-4e3f-aadb-45fd76b82aeb','SAP ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('cfbcec4a-b0ed-4e43-9866-bcda72d69eab','Oracle ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('2a5faee5-0c12-4e29-b32e-aab42552ff6d','Oracle Siebel CRM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('16f37ce8-dc62-4ffb-b6ca-fc248b51ff73','Oracle JDE ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('275e402a-a2c6-4d57-83a1-3f0da50539e4','Oracle PeopleSoft',0); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('CoE_Test','false'); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('InitStep','6'); + +INSERT INTO APP_ACT_COE_USER(ID,USERID,ISADMIN) VALUES('9e23d27b-26a2-4ec5-839b-d9fe4c1eb9e3','admin',1); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.3/informix.sql b/com.actionsoft.apps.coe.pal/db/6.3/informix.sql new file mode 100644 index 00000000..a0c24395 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.3/informix.sql @@ -0,0 +1,88 @@ +CREATE TABLE APP_ACT_COE_PAL_UPFILE(ID CHAR(36) NOT NULL ,PALREPOSITORYID CHAR(36),SHAPEID VARCHAR(64),FILETYPE CHAR(1),FILENAME VARCHAR(128),DOWNLOAD SMALLINT ,CREATEUSER VARCHAR(36),CREATETIME DATETIME YEAR TO SECOND , PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_FILE(ID VARCHAR(64) NOT NULL ,PALREPOSITORYID CHAR(36), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SYSTEMNAME(ID CHAR(36) NOT NULL ,SYSTEMNAME VARCHAR(36),ISDEFAULT SMALLINT , PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAM_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PERMTYPE SMALLINT ,RESOURCEID VARCHAR(128), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),USERID VARCHAR(36),ACTIONTYPE VARCHAR(64),EXTENDAPPS VARCHAR(225), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP(ID CHAR(36) NOT NULL ,WSID CHAR(36),GROUPCODE VARCHAR(36),CATEGORY VARCHAR(64),GROUPNAME VARCHAR(128),GROUPDESC LVARCHAR(510),CREATEUSER VARCHAR(36),CREATEDATE DATETIME YEAR TO SECOND , PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_PERM(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),PERMTYPE SMALLINT ,RESOURCEID VARCHAR(128), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_ROLE(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),ROLEID VARCHAR(36), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_COMMENT(ID CHAR(36) NOT NULL ,PID CHAR(36),STREAMID CHAR(36),WSID CHAR(36),TARGETTYPE SMALLINT ,TARGETID CHAR(36),TEAMID CHAR(36),USERID VARCHAR(36),USERCOMMENT LVARCHAR(2000),COMMENTDATE DATETIME YEAR TO SECOND ,INFOTYPE SMALLINT , PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH(ID CHAR(36) NOT NULL ,PROCESSINSTID VARCHAR(36),WSID CHAR(36),USERID VARCHAR(36),AUDITORID VARCHAR(36),PUBLISHDATE DATETIME YEAR TO SECOND ,PUBLISHDESC LVARCHAR(2000),PUBLISHN DECIMAL(6,0),PUBLISHC DECIMAL(6,0),PUBLISHS DECIMAL(6,0),TEAMID CHAR(36), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_LIST(ID CHAR(36) NOT NULL ,PID CHAR(36),PALREPOSITORYID CHAR(36),ACTIONTYPE CHAR(1),PUBLISHDESC LVARCHAR(510),TASKID CHAR(36), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_OUTPUT_TASK(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PROFILEID VARCHAR(36),TASKNAME VARCHAR(64),USERID VARCHAR(36),CREATETIME DATETIME YEAR TO SECOND ,BEGINTIME DATETIME YEAR TO SECOND ,ENDTIME DATETIME YEAR TO SECOND ,TASKSTATE SMALLINT ,THREADID VARCHAR(128),LANG VARCHAR(32),ISDISPLAY VARCHAR(2), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PROP(PROPERTYKEY VARCHAR(128) NOT NULL ,PROPERTYVALUE LVARCHAR(4000) , PRIMARY KEY (PROPERTYKEY)) ; + +CREATE TABLE APP_ACT_COE_USER(ID CHAR(36) NOT NULL ,USERID VARCHAR(36),ISADMIN SMALLINT , PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_WORKSPACE(ID CHAR(36) NOT NULL ,WSNAME LVARCHAR(510),WSDM LVARCHAR(510),WSADMIN LVARCHAR(510),WSDESC LVARCHAR(510),WSSTATE SMALLINT ,WSORGTYPE SMALLINT ,WSTCTYPE SMALLINT ,WSBGURL LVARCHAR(510),WSORDERINDEX SMALLINT ,WSVER SMALLINT ,WSVERSIONUUID CHAR(36),ISUSE SMALLINT , PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPOSITORY(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL SMALLINT ,PLPARENTID VARCHAR(36),PLORDERINDEX SMALLINT ,PLISBOTTOMLEVEL SMALLINT ,PLDESC LVARCHAR(4000),PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT LVARCHAR(510),PLOUTPUT LVARCHAR(510),PLEXECTYPE SMALLINT ,PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL LVARCHAR(510),PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER SMALLINT ,PLVERSIONID CHAR(36),ISUSE SMALLINT ,ISPUBLISH SMALLINT ,ISSYSTEMFILE SMALLINT ,FILEPATH LVARCHAR(510),HISTORYMAXVERSION DECIMAL(6,0),VIEWCOUNT DECIMAL(12,0),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME YEAR TO SECOND ,MODIFYDATE DATETIME YEAR TO SECOND ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),LOCKUSER VARCHAR(225),PUBLISHDATE DATETIME YEAR TO SECOND ,CHANGEDATE DATETIME YEAR TO SECOND ,STOPDATE DATETIME YEAR TO SECOND ,ISSTOP SMALLINT ,ISAPPROVAL SMALLINT ,EXT1 VARCHAR(64),EXT2 VARCHAR(128),EXT3 LVARCHAR(510),EXT4 LVARCHAR(510), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_COPY(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_PASTE(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_RLAT(ID CHAR(36) NOT NULL ,FILEID VARCHAR(64),SHAPEID VARCHAR(64),SHAPETEXT VARCHAR(128),ATTRID VARCHAR(64),RELATIONFILEID VARCHAR(64),RELATIONSHAPEID VARCHAR(64),RELATIONSHAPETEXT VARCHAR(128), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R(ID CHAR(36) NOT NULL ,REMOVEID CHAR(36),WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL SMALLINT ,PLPARENTID VARCHAR(36),PLORDERINDEX SMALLINT ,PLISBOTTOMLEVEL SMALLINT ,PLDESC LVARCHAR(4000),PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT LVARCHAR(510),PLOUTPUT LVARCHAR(510),PLEXECTYPE SMALLINT ,PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL LVARCHAR(510),PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER SMALLINT ,PLVERSIONID CHAR(36),ISUSE SMALLINT ,ISPUBLISH SMALLINT ,ISSYSTEMFILE SMALLINT ,FILEPATH LVARCHAR(510),HISTORYMAXVERSION DECIMAL(6,0),VIEWCOUNT DECIMAL(12,0),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME YEAR TO SECOND ,MODIFYDATE DATETIME YEAR TO SECOND ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),ISSTOP SMALLINT ,ISAPPROVAL SMALLINT ,EXT1 VARCHAR(64),EXT2 VARCHAR(128),EXT3 LVARCHAR(510),EXT4 LVARCHAR(510), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R_INFO(ID CHAR(36) NOT NULL ,REMOVEUSER VARCHAR(36),REMOVETIME DATETIME YEAR TO SECOND ,WSID VARCHAR(36),RESOURCEID VARCHAR(36),REMOVETYPE SMALLINT , PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_BACKUP(ID CHAR(36) NOT NULL ,WSID CHAR(36),BACKUPTIME DATETIME YEAR TO SECOND ,USERID VARCHAR(36),REMARK LVARCHAR(510),STATE SMALLINT , PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PROP(ID CHAR(36) NOT NULL ,PLID CHAR(36),PROPERTYID VARCHAR(100),PROPERTYNAME VARCHAR(100),PROPERTYVALUE LVARCHAR(4000),ORDERINDEX SMALLINT , PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_CONFIG(ID CHAR(36) NOT NULL ,WSID CHAR(36),METHODID VARCHAR(36),SHAPEID VARCHAR(100),ATTRIBUTE LVARCHAR(510),ORDERINDEX SMALLINT , PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE LVARCHAR(4000),CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),ISDELETE VARCHAR(10),ORDERINDEX SMALLINT , PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE LVARCHAR(4000),CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),SHAPENAME VARCHAR(64),ORDERINDEX SMALLINT , PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SPCL_PROP(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLID CHAR(36),TYPE CHAR(100),VALUETEXT LVARCHAR(4000), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_CORRELATE(PLID CHAR(36) NOT NULL ,WSID CHAR(36),PLAWSVERSIONID CHAR(36),PLAWSID CHAR(36),PLVERSIONID VARCHAR(36),CORRELATETYPE SMALLINT ,ISCORRELATE SMALLINT ,EXT1 VARCHAR(64),EXT2 VARCHAR(128),EXT3 LVARCHAR(510),EXT4 LVARCHAR(510), PRIMARY KEY (PLID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_COM(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),SORT DECIMAL(16,0), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM_EXT(ID CHAR(36) NOT NULL ,BINDID CHAR(36),RESOURCEID CHAR(36), PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_FREQ(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),COUNT DECIMAL(16,0), PRIMARY KEY (ID)) ; + +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_IND1 ON APP_ACT_COE_PAL_PUBLISH (PUBLISHDATE); +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_L_I ON APP_ACT_COE_PAL_PUBLISH_LIST (PID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_UK UNIQUE (WSID,GROUPCODE); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_PERM ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_P_UK UNIQUE (GROUPID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_ROLE ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_R_UK UNIQUE (GROUPID,ROLEID); +ALTER TABLE APP_ACT_COE_TEAM_PERM ADD CONSTRAINT APP_ACT_COE_TEAM_PERM_UK UNIQUE (TEAMID,WSID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_TEAMMBR_PERM ADD CONSTRAINT APP_ACT_COE_TEAMMBR_PERM_UK UNIQUE (TEAMID,USERID); +CREATE INDEX APP_ACT_COE_PAL_COMMENT_IND1 ON APP_ACT_COE_PAL_COMMENT (TARGETID,COMMENTDATE); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('e0583f9a-2f6e-49fe-b4e8-4b9a5f3c257a','AWS BPM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('0df9d8b1-b082-4e3f-aadb-45fd76b82aeb','SAP ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('cfbcec4a-b0ed-4e43-9866-bcda72d69eab','Oracle ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('2a5faee5-0c12-4e29-b32e-aab42552ff6d','Oracle Siebel CRM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('16f37ce8-dc62-4ffb-b6ca-fc248b51ff73','Oracle JDE ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('275e402a-a2c6-4d57-83a1-3f0da50539e4','Oracle PeopleSoft',0); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('CoE_Test','false'); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('InitStep','6'); + +INSERT INTO APP_ACT_COE_USER(ID,USERID,ISADMIN) VALUES('9e23d27b-26a2-4ec5-839b-d9fe4c1eb9e3','admin',1); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.3/mysql.sql b/com.actionsoft.apps.coe.pal/db/6.3/mysql.sql new file mode 100644 index 00000000..80b0da6f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.3/mysql.sql @@ -0,0 +1,88 @@ +CREATE TABLE APP_ACT_COE_PAL_UPFILE(ID CHAR(36) NOT NULL ,PALREPOSITORYID CHAR(36),SHAPEID VARCHAR(64),FILETYPE CHAR(1),FILENAME VARCHAR(128),DOWNLOAD SMALLINT(1),CREATEUSER VARCHAR(36),CREATETIME DATETIME ,CONSTRAINT APP_ACT_COE_PAL_UPFILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_FILE(ID VARCHAR(64) NOT NULL ,PALREPOSITORYID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_FILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SYSTEMNAME(ID CHAR(36) NOT NULL ,SYSTEMNAME VARCHAR(36),ISDEFAULT SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_SYSTEMNAME_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAM_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PERMTYPE SMALLINT(2),RESOURCEID VARCHAR(128),CONSTRAINT APP_ACT_COE_TEAM_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),USERID VARCHAR(36),ACTIONTYPE VARCHAR(64),EXTENDAPPS VARCHAR(225),CONSTRAINT APP_ACT_COE_TEAMMBR_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP(ID CHAR(36) NOT NULL ,WSID CHAR(36),GROUPCODE VARCHAR(36),CATEGORY VARCHAR(64),GROUPNAME VARCHAR(128),GROUPDESC VARCHAR(255),CREATEUSER VARCHAR(36),CREATEDATE DATETIME ,CONSTRAINT APP_ACT_COE_PAL_USERGRP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_PERM(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),PERMTYPE SMALLINT(2),RESOURCEID VARCHAR(128),CONSTRAINT APP_ACT_COE_PAL_USERGRP_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_ROLE(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),ROLEID VARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_USERGRP_ROLE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_COMMENT(ID CHAR(36) NOT NULL ,PID CHAR(36),STREAMID CHAR(36),WSID CHAR(36),TARGETTYPE SMALLINT(1),TARGETID CHAR(36),TEAMID CHAR(36),USERID VARCHAR(36),USERCOMMENT TEXT ,COMMENTDATE DATETIME ,INFOTYPE SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_COMMENT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH(ID CHAR(36) NOT NULL ,PROCESSINSTID VARCHAR(36),WSID CHAR(36),USERID VARCHAR(36),AUDITORID VARCHAR(36),PUBLISHDATE DATETIME ,PUBLISHDESC TEXT ,PUBLISHN NUMERIC(6),PUBLISHC NUMERIC(6),PUBLISHS NUMERIC(6),TEAMID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_LIST(ID CHAR(36) NOT NULL ,PID CHAR(36),PALREPOSITORYID CHAR(36),ACTIONTYPE CHAR(1),PUBLISHDESC VARCHAR(255),TASKID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_LIST_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_OUTPUT_TASK(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PROFILEID VARCHAR(36),TASKNAME VARCHAR(64),USERID VARCHAR(36),CREATETIME DATETIME ,BEGINTIME DATETIME ,ENDTIME DATETIME ,TASKSTATE SMALLINT(1),THREADID VARCHAR(128),LANG VARCHAR(32),ISDISPLAY VARCHAR(2),CONSTRAINT APP_ACT_COE_PAL_OUTPUT_TASK_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PROP(PROPERTYKEY VARCHAR(128) NOT NULL ,PROPERTYVALUE TEXT ,CONSTRAINT APP_ACT_COE_PROP_PK PRIMARY KEY (PROPERTYKEY)) ; + +CREATE TABLE APP_ACT_COE_USER(ID CHAR(36) NOT NULL ,USERID VARCHAR(36),ISADMIN SMALLINT(1),CONSTRAINT APP_ACT_COE_USER_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_WORKSPACE(ID CHAR(36) NOT NULL ,WSNAME VARCHAR(255),WSDM VARCHAR(255),WSADMIN VARCHAR(255),WSDESC VARCHAR(255),WSSTATE SMALLINT(1),WSORGTYPE SMALLINT(1),WSTCTYPE SMALLINT(1),WSBGURL VARCHAR(255),WSORDERINDEX SMALLINT(3),WSVER SMALLINT(3),WSVERSIONUUID CHAR(36),ISUSE SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_WORKSPACE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPOSITORY(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL SMALLINT(2),PLPARENTID VARCHAR(36),PLORDERINDEX SMALLINT(3),PLISBOTTOMLEVEL SMALLINT(1),PLDESC TEXT ,PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT VARCHAR(255),PLOUTPUT VARCHAR(255),PLEXECTYPE SMALLINT(1),PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL VARCHAR(255),PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER SMALLINT(3),PLVERSIONID CHAR(36),ISUSE SMALLINT(1),ISPUBLISH SMALLINT(1),ISSYSTEMFILE SMALLINT(1),FILEPATH VARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME ,MODIFYDATE DATETIME ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),LOCKUSER VARCHAR(225),PUBLISHDATE DATETIME ,CHANGEDATE DATETIME ,STOPDATE DATETIME ,ISSTOP SMALLINT(1),ISAPPROVAL SMALLINT(1),EXT1 VARCHAR(64),EXT2 VARCHAR(128),EXT3 VARCHAR(255),EXT4 VARCHAR(255),CONSTRAINT APP_ACT_COE_PAL_REPOSITORY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_COPY(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_COPY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_PASTE(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_PASTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_RLAT(ID CHAR(36) NOT NULL ,FILEID VARCHAR(64),SHAPEID VARCHAR(64),SHAPETEXT VARCHAR(128),ATTRID VARCHAR(64),RELATIONFILEID VARCHAR(64),RELATIONSHAPEID VARCHAR(64),RELATIONSHAPETEXT VARCHAR(128),CONSTRAINT APP_ACT_COE_PAL_SHAPE_RT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R(ID CHAR(36) NOT NULL ,REMOVEID CHAR(36),WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL SMALLINT(2),PLPARENTID VARCHAR(36),PLORDERINDEX SMALLINT(3),PLISBOTTOMLEVEL SMALLINT(1),PLDESC TEXT ,PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT VARCHAR(255),PLOUTPUT VARCHAR(255),PLEXECTYPE SMALLINT(1),PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL VARCHAR(255),PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER SMALLINT(3),PLVERSIONID CHAR(36),ISUSE SMALLINT(1),ISPUBLISH SMALLINT(1),ISSYSTEMFILE SMALLINT(1),FILEPATH VARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME ,MODIFYDATE DATETIME ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),ISSTOP SMALLINT(1),ISAPPROVAL SMALLINT(1),EXT1 VARCHAR(64),EXT2 VARCHAR(128),EXT3 VARCHAR(255),EXT4 VARCHAR(255),CONSTRAINT AWS_PAL_REPOSITORY_R_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R_INFO(ID CHAR(36) NOT NULL ,REMOVEUSER VARCHAR(36),REMOVETIME DATETIME ,WSID VARCHAR(36),RESOURCEID VARCHAR(36),REMOVETYPE SMALLINT(1),CONSTRAINT AWS_PAL_REPOSITORY_R_INFO_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_BACKUP(ID CHAR(36) NOT NULL ,WSID CHAR(36),BACKUPTIME DATETIME ,USERID VARCHAR(36),REMARK VARCHAR(255),STATE SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_BACKUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PROP(ID CHAR(36) NOT NULL ,PLID CHAR(36),PROPERTYID VARCHAR(100),PROPERTYNAME VARCHAR(100),PROPERTYVALUE TEXT ,ORDERINDEX SMALLINT(3),CONSTRAINT APP_ACT_COE_PAL_PROPERTY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_CONFIG(ID CHAR(36) NOT NULL ,WSID CHAR(36),METHODID VARCHAR(36),SHAPEID VARCHAR(100),ATTRIBUTE VARCHAR(255),ORDERINDEX SMALLINT(3),CONSTRAINT APP_ACT_COE_PAL_SHAPE_CONFIG_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE TEXT ,CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),ISDELETE VARCHAR(10),ORDERINDEX SMALLINT(3),CONSTRAINT APP_ACT_COE_PAL_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE TEXT ,CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),SHAPENAME VARCHAR(64),ORDERINDEX SMALLINT(3),CONSTRAINT APP_ACT_COE_PAL_SHAPE_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SPCL_PROP(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLID CHAR(36),TYPE CHAR(100),VALUETEXT TEXT ,CONSTRAINT APP_ACT_COE_PAL_SPECIAL_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_CORRELATE(PLID CHAR(36) NOT NULL ,WSID CHAR(36),PLAWSVERSIONID CHAR(36),PLAWSID CHAR(36),PLVERSIONID VARCHAR(36),CORRELATETYPE SMALLINT(1),ISCORRELATE SMALLINT(1),EXT1 VARCHAR(64),EXT2 VARCHAR(128),EXT3 VARCHAR(255),EXT4 VARCHAR(255),CONSTRAINT APP_ACT_COE_PAL_CORRELATE_PK PRIMARY KEY (PLID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_COM(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),SORT NUMERIC(16),CONSTRAINT APP_ACT_COE_PAL_COMMON_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM_EXT(ID CHAR(36) NOT NULL ,BINDID CHAR(36),RESOURCEID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_EXTEND_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_FREQ(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),COUNT NUMERIC(16),CONSTRAINT APP_ACT_COE_PAL_FREQUENCY_PK PRIMARY KEY (ID)) ; + +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_IND1 ON APP_ACT_COE_PAL_PUBLISH (PUBLISHDATE); +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_L_I ON APP_ACT_COE_PAL_PUBLISH_LIST (PID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_UK UNIQUE (WSID,GROUPCODE); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_PERM ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_P_UK UNIQUE (GROUPID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_ROLE ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_R_UK UNIQUE (GROUPID,ROLEID); +ALTER TABLE APP_ACT_COE_TEAM_PERM ADD CONSTRAINT APP_ACT_COE_TEAM_PERM_UK UNIQUE (TEAMID,WSID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_TEAMMBR_PERM ADD CONSTRAINT APP_ACT_COE_TEAMMBR_PERM_UK UNIQUE (TEAMID,USERID); +CREATE INDEX APP_ACT_COE_PAL_COMMENT_IND1 ON APP_ACT_COE_PAL_COMMENT (TARGETID,COMMENTDATE); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('e0583f9a-2f6e-49fe-b4e8-4b9a5f3c257a','AWS BPM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('0df9d8b1-b082-4e3f-aadb-45fd76b82aeb','SAP ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('cfbcec4a-b0ed-4e43-9866-bcda72d69eab','Oracle ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('2a5faee5-0c12-4e29-b32e-aab42552ff6d','Oracle Siebel CRM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('16f37ce8-dc62-4ffb-b6ca-fc248b51ff73','Oracle JDE ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('275e402a-a2c6-4d57-83a1-3f0da50539e4','Oracle PeopleSoft',0); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('CoE_Test','false'); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('InitStep','6'); + +INSERT INTO APP_ACT_COE_USER(ID,USERID,ISADMIN) VALUES('9e23d27b-26a2-4ec5-839b-d9fe4c1eb9e3','admin',1); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.3/oracle.sql b/com.actionsoft.apps.coe.pal/db/6.3/oracle.sql new file mode 100644 index 00000000..c45acebf --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.3/oracle.sql @@ -0,0 +1,88 @@ +CREATE TABLE APP_ACT_COE_PAL_UPFILE(ID CHAR(36) NOT NULL ,PALREPOSITORYID CHAR(36),SHAPEID NVARCHAR2(64),FILETYPE CHAR(1),FILENAME NVARCHAR2(128),DOWNLOAD NUMBER(1),CREATEUSER NVARCHAR2(36),CREATETIME DATE ,CONSTRAINT APP_ACT_COE_PAL_UPFILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_FILE(ID NVARCHAR2(64) NOT NULL ,PALREPOSITORYID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_FILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SYSTEMNAME(ID CHAR(36) NOT NULL ,SYSTEMNAME NVARCHAR2(36),ISDEFAULT NUMBER(1),CONSTRAINT APP_ACT_COE_PAL_SYSTEMNAME_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAM_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PERMTYPE NUMBER(2),RESOURCEID NVARCHAR2(128),CONSTRAINT APP_ACT_COE_TEAM_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),USERID NVARCHAR2(36),ACTIONTYPE NVARCHAR2(64),EXTENDAPPS NVARCHAR2(225),CONSTRAINT APP_ACT_COE_TEAMMEMBER_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP(ID CHAR(36) NOT NULL ,WSID CHAR(36),GROUPCODE NVARCHAR2(36),CATEGORY NVARCHAR2(64),GROUPNAME NVARCHAR2(128),GROUPDESC NVARCHAR2(255),CREATEUSER NVARCHAR2(36),CREATEDATE DATE ,CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_PERM(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),PERMTYPE NUMBER(2),RESOURCEID NVARCHAR2(128),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_P_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_ROLE(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),ROLEID NVARCHAR2(36),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_R_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_COMMENT(ID CHAR(36) NOT NULL ,PID CHAR(36),STREAMID CHAR(36),WSID CHAR(36),TARGETTYPE NUMBER(1),TARGETID CHAR(36),TEAMID CHAR(36),USERID NVARCHAR2(36),USERCOMMENT NVARCHAR2(1000),COMMENTDATE DATE ,INFOTYPE NUMBER(1),CONSTRAINT APP_ACT_COE_PAL_COMMENT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH(ID CHAR(36) NOT NULL ,PROCESSINSTID NVARCHAR2(36),WSID CHAR(36),USERID NVARCHAR2(36),AUDITORID NVARCHAR2(36),PUBLISHDATE DATE ,PUBLISHDESC NVARCHAR2(1000),PUBLISHN NUMBER(6),PUBLISHC NUMBER(6),PUBLISHS NUMBER(6),TEAMID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_LIST(ID CHAR(36) NOT NULL ,PID CHAR(36),PALREPOSITORYID CHAR(36),ACTIONTYPE CHAR(1),PUBLISHDESC NVARCHAR2(255),TASKID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_L_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_OUTPUT_TASK(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PROFILEID NVARCHAR2(36),TASKNAME NVARCHAR2(64),USERID NVARCHAR2(36),CREATETIME DATE ,BEGINTIME DATE ,ENDTIME DATE ,TASKSTATE NUMBER(1),THREADID NVARCHAR2(128),LANG NVARCHAR2(32),ISDISPLAY VARCHAR2(2),CONSTRAINT APP_ACT_COE_PAL_OUTPUT_TASK_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PROP(PROPERTYKEY NVARCHAR2(128) NOT NULL ,PROPERTYVALUE CLOB ,CONSTRAINT APP_ACT_COE_PROPERTY_PK PRIMARY KEY (PROPERTYKEY)) ; + +CREATE TABLE APP_ACT_COE_USER(ID CHAR(36) NOT NULL ,USERID NVARCHAR2(36),ISADMIN NUMBER(1),CONSTRAINT APP_ACT_COE_USER_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_WORKSPACE(ID CHAR(36) NOT NULL ,WSNAME NVARCHAR2(255),WSDM NVARCHAR2(255),WSADMIN NVARCHAR2(255),WSDESC NVARCHAR2(255),WSSTATE NUMBER(1),WSORGTYPE NUMBER(1),WSTCTYPE NUMBER(1),WSBGURL NVARCHAR2(255),WSORDERINDEX NUMBER(3),WSVER NUMBER(3),WSVERSIONUUID CHAR(36),ISUSE NUMBER(1),CONSTRAINT APP_ACT_COE_PAL_WORKSPACE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPOSITORY(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLRID CHAR(36),PLNO NVARCHAR2(36),PLNAME NVARCHAR2(128),PLLEVEL NUMBER(2),PLPARENTID NVARCHAR2(36),PLORDERINDEX NUMBER(3),PLISBOTTOMLEVEL NUMBER(1),PLDESC NVARCHAR2(2000),PLRD NVARCHAR2(36),PLRP NVARCHAR2(36),PM NVARCHAR2(36),PLINPUT NVARCHAR2(255),PLOUTPUT NVARCHAR2(255),PLEXECTYPE NUMBER(1),PLSYSTEMNAME NVARCHAR2(36),PLAWSPID CHAR(36),PLDIAGRAMURL NVARCHAR2(255),PLCOLOR NVARCHAR2(36),PLCATEGORY NVARCHAR2(36),PLMETHODID NVARCHAR2(36),PLVER NUMBER(3),PLVERSIONID CHAR(36),ISUSE NUMBER(1),ISPUBLISH NUMBER(1),ISSYSTEMFILE NUMBER(1),FILEPATH NVARCHAR2(255),HISTORYMAXVERSION NUMBER(6),VIEWCOUNT NUMBER(12),CREATEUSER VARCHAR2(36),MODIFYUSER VARCHAR2(36),CREATEDATE DATE ,MODIFYDATE DATE ,PLDUTYDEPT NVARCHAR2(36),PLDUTYPERSON NVARCHAR2(128),LOCKUSER NVARCHAR2(225),PUBLISHDATE DATE ,CHANGEDATE DATE ,STOPDATE DATE ,ISSTOP NUMBER(1),ISAPPROVAL NUMBER(1),EXT1 NVARCHAR2(64),EXT2 NVARCHAR2(128),EXT3 NVARCHAR2(255),EXT4 NVARCHAR2(255),CONSTRAINT APP_ACT_COE_PAL_REPOSITORY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_COPY(ID NVARCHAR2(64) NOT NULL ,SHAPEGROUPTID NVARCHAR2(64),SHAPENAME NVARCHAR2(128),SHAPECATEGORYNAME NVARCHAR2(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE NVARCHAR2(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_COPY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_PASTE(ID NVARCHAR2(64) NOT NULL ,SHAPEGROUPTID NVARCHAR2(64),SHAPENAME NVARCHAR2(128),SHAPECATEGORYNAME NVARCHAR2(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE NVARCHAR2(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_PASTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_RLAT(ID CHAR(36) NOT NULL ,FILEID NVARCHAR2(64),SHAPEID NVARCHAR2(64),SHAPETEXT NVARCHAR2(128),ATTRID NVARCHAR2(64),RELATIONFILEID NVARCHAR2(64),RELATIONSHAPEID NVARCHAR2(64),RELATIONSHAPETEXT NVARCHAR2(128),CONSTRAINT APP_ACT_COE_PAL_SHAPE_RT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R(ID CHAR(36) NOT NULL ,REMOVEID CHAR(36),WSID CHAR(36),PLRID CHAR(36),PLNO NVARCHAR2(36),PLNAME NVARCHAR2(128),PLLEVEL NUMBER(2),PLPARENTID NVARCHAR2(36),PLORDERINDEX NUMBER(3),PLISBOTTOMLEVEL NUMBER(1),PLDESC NVARCHAR2(2000),PLRD NVARCHAR2(36),PLRP NVARCHAR2(36),PM NVARCHAR2(36),PLINPUT NVARCHAR2(255),PLOUTPUT NVARCHAR2(255),PLEXECTYPE NUMBER(1),PLSYSTEMNAME NVARCHAR2(36),PLAWSPID CHAR(36),PLDIAGRAMURL NVARCHAR2(255),PLCOLOR NVARCHAR2(36),PLCATEGORY NVARCHAR2(36),PLMETHODID NVARCHAR2(36),PLVER NUMBER(3),PLVERSIONID CHAR(36),ISUSE NUMBER(1),ISPUBLISH NUMBER(1),ISSYSTEMFILE NUMBER(1),FILEPATH NVARCHAR2(255),HISTORYMAXVERSION NUMBER(6),VIEWCOUNT NUMBER(12),CREATEUSER VARCHAR2(36),MODIFYUSER VARCHAR2(36),CREATEDATE DATE ,MODIFYDATE DATE ,PLDUTYDEPT NVARCHAR2(36),PLDUTYPERSON NVARCHAR2(128),ISSTOP NUMBER(1),ISAPPROVAL NUMBER(1),EXT1 NVARCHAR2(64),EXT2 NVARCHAR2(128),EXT3 NVARCHAR2(255),EXT4 NVARCHAR2(255),CONSTRAINT AWS_PAL_REPOSITORY_R_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R_INFO(ID CHAR(36) NOT NULL ,REMOVEUSER NVARCHAR2(36),REMOVETIME DATE ,WSID NVARCHAR2(36),RESOURCEID NVARCHAR2(36),REMOVETYPE NUMBER(1),CONSTRAINT AWS_PAL_REPOSITORY_R_INFO_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_BACKUP(ID CHAR(36) NOT NULL ,WSID CHAR(36),BACKUPTIME DATE ,USERID NVARCHAR2(36),REMARK NVARCHAR2(255),STATE NUMBER(1),CONSTRAINT APP_ACT_COE_PAL_BACKUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PROP(ID CHAR(36) NOT NULL ,PLID CHAR(36),PROPERTYID NVARCHAR2(100),PROPERTYNAME NVARCHAR2(100),PROPERTYVALUE NVARCHAR2(2000),ORDERINDEX NUMBER(3),CONSTRAINT APP_ACT_COE_PAL_PROPERTY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_CONFIG(ID CHAR(36) NOT NULL ,WSID CHAR(36),METHODID NVARCHAR2(36),SHAPEID NVARCHAR2(100),ATTRIBUTE NVARCHAR2(255),ORDERINDEX NUMBER(3),CONSTRAINT APP_ACT_COE_PAL_SHAPE_C_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID NVARCHAR2(100),ATTRNAME NVARCHAR2(100),ATTRVALUE NVARCHAR2(2000),CATEGORY NVARCHAR2(36),METHODID NVARCHAR2(36),TYPE NVARCHAR2(36),ISDELETE NVARCHAR2(10),ORDERINDEX NUMBER(3),CONSTRAINT APP_ACT_COE_PAL_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID NVARCHAR2(100),ATTRNAME NVARCHAR2(100),ATTRVALUE NVARCHAR2(2000),CATEGORY NVARCHAR2(36),METHODID NVARCHAR2(36),TYPE NVARCHAR2(36),SHAPENAME NVARCHAR2(64),ORDERINDEX NUMBER(3),CONSTRAINT APP_ACT_COE_PAL_SHAPE_ATTR_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SPCL_PROP(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLID CHAR(36),TYPE CHAR(100),VALUETEXT NVARCHAR2(2000),CONSTRAINT APP_ACT_COE_PAL_SPECIAL_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_CORRELATE(PLID CHAR(36) NOT NULL ,WSID CHAR(36),PLAWSVERSIONID CHAR(36),PLAWSID CHAR(36),PLVERSIONID NVARCHAR2(36),CORRELATETYPE NUMBER(1),ISCORRELATE NUMBER(1),EXT1 NVARCHAR2(64),EXT2 NVARCHAR2(128),EXT3 NVARCHAR2(255),EXT4 NVARCHAR2(255),CONSTRAINT APP_ACT_COE_PAL_CORRELATE_PK PRIMARY KEY (PLID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_COM(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),SORT NUMBER(16),CONSTRAINT APP_ACT_COE_PAL_COMMON_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM_EXT(ID CHAR(36) NOT NULL ,BINDID CHAR(36),RESOURCEID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_EXTEND_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_FREQ(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),COUNT NUMBER(16),CONSTRAINT APP_ACT_COE_PAL_FREQUENCY_PK PRIMARY KEY (ID)) ; + +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_IND1 ON APP_ACT_COE_PAL_PUBLISH (PUBLISHDATE); +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_L_I ON APP_ACT_COE_PAL_PUBLISH_LIST (PID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_UK UNIQUE (WSID,GROUPCODE); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_PERM ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_P_UK UNIQUE (GROUPID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_ROLE ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_R_UK UNIQUE (GROUPID,ROLEID); +ALTER TABLE APP_ACT_COE_TEAM_PERM ADD CONSTRAINT APP_ACT_COE_TEAM_PERM_UK UNIQUE (TEAMID,WSID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_TEAMMBR_PERM ADD CONSTRAINT APP_ACT_COE_TEAMMBR_PERM_UK UNIQUE (TEAMID,USERID); +CREATE INDEX APP_ACT_COE_PAL_COMMENT_IND1 ON APP_ACT_COE_PAL_COMMENT (TARGETID,COMMENTDATE); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('e0583f9a-2f6e-49fe-b4e8-4b9a5f3c257a','AWS BPM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('0df9d8b1-b082-4e3f-aadb-45fd76b82aeb','SAP ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('cfbcec4a-b0ed-4e43-9866-bcda72d69eab','Oracle ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('2a5faee5-0c12-4e29-b32e-aab42552ff6d','Oracle Siebel CRM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('16f37ce8-dc62-4ffb-b6ca-fc248b51ff73','Oracle JDE ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('275e402a-a2c6-4d57-83a1-3f0da50539e4','Oracle PeopleSoft',0); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('CoE_Test','false'); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('InitStep','6'); + +INSERT INTO APP_ACT_COE_USER(ID,USERID,ISADMIN) VALUES('9e23d27b-26a2-4ec5-839b-d9fe4c1eb9e3','admin',1); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.3/oscar.sql b/com.actionsoft.apps.coe.pal/db/6.3/oscar.sql new file mode 100644 index 00000000..cbbefbdd --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.3/oscar.sql @@ -0,0 +1,88 @@ +create table APP_ACT_COE_PAL_UPFILE(ID CHAR(36) NOT NULL ,PALREPOSITORYID CHAR(36),SHAPEID VARCHAR(64),FILETYPE CHAR(1),FILENAME VARCHAR(128),DOWNLOAD DECIMAL(1),CREATEUSER VARCHAR(36),CREATETIME DATE ,CONSTRAINT PRIMARYAWS_COE_PAL_UPFILE1 PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SHAPE_FILE(ID VARCHAR(64) NOT NULL ,PALREPOSITORYID CHAR(36),CONSTRAINT PRIMARYAWS_COE_PAL_SHAPE_FILE1 PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SYSTEMNAME(ID CHAR(36) NOT NULL ,SYSTEMNAME VARCHAR(36),ISDEFAULT DECIMAL(1),CONSTRAINT AWS_AWS_COE_PAL_AWSTEMNAME_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_TEAM_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PERMTYPE DECIMAL(2),RESOURCEID VARCHAR(128),CONSTRAINT PRIMARYAWS_COE_TEAM_PERM1 PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_TEAMMBR_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),USERID VARCHAR(36),ACTIONTYPE VARCHAR(64),EXTENDAPPS VARCHAR(225),CONSTRAINT PRIMARYAWS_COE_TEAMMEMBER_PERM PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_USERGRP(ID CHAR(36) NOT NULL ,WSID CHAR(36),GROUPCODE VARCHAR(36),CATEGORY VARCHAR(64),GROUPNAME VARCHAR(128),GROUPDESC TEXT ,CREATEUSER VARCHAR(36),CREATEDATE DATE ,CONSTRAINT PRIMARYAWS_COE_PAL_USERGROUP1 PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_USERGRP_PERM(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),PERMTYPE DECIMAL(2),RESOURCEID VARCHAR(128),CONSTRAINT PRIMARYAWS_COE_PAL_USERGROUP_P PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_USERGRP_ROLE(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),ROLEID VARCHAR(36),CONSTRAINT PRIMARYAWS_COE_PAL_USERGROUP_R PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_COMMENT(ID CHAR(36) NOT NULL ,PID CHAR(36),STREAMID CHAR(36),WSID CHAR(36),TARGETTYPE DECIMAL(1),TARGETID CHAR(36),TEAMID CHAR(36),USERID VARCHAR(36),USERCOMMENT TEXT ,COMMENTDATE DATE ,INFOTYPE DECIMAL(1),CONSTRAINT PRIMARYAWS_COE_PAL_COMMENT1 PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_PUBLISH(ID CHAR(36) NOT NULL ,PROCESSINSTID VARCHAR(36),WSID CHAR(36),USERID VARCHAR(36),AUDITORID VARCHAR(36),PUBLISHDATE DATE ,PUBLISHDESC TEXT ,PUBLISHN DECIMAL(6),PUBLISHC DECIMAL(6),PUBLISHS DECIMAL(6),TEAMID CHAR(36),CONSTRAINT PRIMARYAWS_COE_PAL_PUBLISH1 PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_PUBLISH_LIST(ID CHAR(36) NOT NULL ,PID CHAR(36),PALREPOSITORYID CHAR(36),ACTIONTYPE CHAR(1),PUBLISHDESC TEXT ,TASKID CHAR(36),CONSTRAINT PRIMARYAWS_COE_PAL_PUBLISH_LIS PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_OUTPUT_TASK(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PROFILEID VARCHAR(36),TASKNAME VARCHAR(64),USERID VARCHAR(36),CREATETIME DATE ,BEGINTIME DATE ,ENDTIME DATE ,TASKSTATE DECIMAL(1),THREADID VARCHAR(128),LANG VARCHAR(32),ISDISPLAY VARCHAR(4),CONSTRAINT PRIMARYAWS_COE_PAL_OUTPUT_TASK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PROP(PROPERTYKEY VARCHAR(128) NOT NULL ,PROPERTYVALUE CLOB ,CONSTRAINT AWS_AWS_COE_PROPERTY_PK PRIMARY KEY (PROPERTYKEY)) ; + +create table APP_ACT_COE_USER(ID CHAR(36) NOT NULL ,USERID VARCHAR(36),ISADMIN DECIMAL(1),CONSTRAINT AWS_AWS_COE_USER_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_WORKSPACE(ID CHAR(36) NOT NULL ,WSNAME TEXT ,WSDM TEXT ,WSADMIN TEXT ,WSDESC TEXT ,WSSTATE DECIMAL(1),WSORGTYPE DECIMAL(1),WSTCTYPE DECIMAL(1),WSBGURL TEXT ,WSORDERINDEX DECIMAL(3),WSVER DECIMAL(3),WSVERSIONUUID CHAR(36),ISUSE DECIMAL(1),CONSTRAINT AWS_AWS_COE_PAL_WORKSPACE_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_REPOSITORY(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL DECIMAL(2),PLPARENTID VARCHAR(36),PLORDERINDEX DECIMAL(3),PLISBOTTOMLEVEL DECIMAL(1),PLDESC TEXT ,PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT TEXT ,PLOUTPUT TEXT ,PLEXECTYPE DECIMAL(1),PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL TEXT ,PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER DECIMAL(3),PLVERSIONID CHAR(36),ISUSE DECIMAL(1),ISPUBLISH DECIMAL(1),ISSYSTEMFILE DECIMAL(1),FILEPATH TEXT ,HISTORYMAXVERSION DECIMAL(6),VIEWCOUNT DECIMAL(12),CREATEUSER VARCHAR(72),MODIFYUSER VARCHAR(72),CREATEDATE DATE ,MODIFYDATE DATE ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),LOCKUSER VARCHAR(225),PUBLISHDATE DATE ,CHANGEDATE DATE ,STOPDATE DATE ,ISSTOP DECIMAL(1),ISAPPROVAL DECIMAL(1),EXT1 VARCHAR(64),EXT2 VARCHAR(128),EXT3 TEXT ,EXT4 TEXT ,CONSTRAINT AWS_AWS_COE_PAL_REPOSITORY_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SHAPE_COPY(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36),CONSTRAINT AWS_AWS_COE_PAL_SHAPE_COPY_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SHAPE_PASTE(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36),CONSTRAINT AWS_AWS_COE_PAL_SHAPE_PASTE_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SHAPE_RLAT(ID CHAR(36) NOT NULL ,FILEID VARCHAR(64),SHAPEID VARCHAR(64),SHAPETEXT VARCHAR(128),ATTRID VARCHAR(64),RELATIONFILEID VARCHAR(64),RELATIONSHAPEID VARCHAR(64),RELATIONSHAPETEXT VARCHAR(128),CONSTRAINT PRIMARYAWS_COE_PAL_SHAPE_RELAT PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_REPO_R(ID CHAR(36) NOT NULL ,REMOVEID CHAR(36),WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL DECIMAL(2),PLPARENTID VARCHAR(36),PLORDERINDEX DECIMAL(3),PLISBOTTOMLEVEL DECIMAL(1),PLDESC TEXT ,PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT TEXT ,PLOUTPUT TEXT ,PLEXECTYPE DECIMAL(1),PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL TEXT ,PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER DECIMAL(3),PLVERSIONID CHAR(36),ISUSE DECIMAL(1),ISPUBLISH DECIMAL(1),ISSYSTEMFILE DECIMAL(1),FILEPATH TEXT ,HISTORYMAXVERSION DECIMAL(6),VIEWCOUNT DECIMAL(12),CREATEUSER VARCHAR(72),MODIFYUSER VARCHAR(72),CREATEDATE DATE ,MODIFYDATE DATE ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),ISSTOP DECIMAL(1),ISAPPROVAL DECIMAL(1),EXT1 VARCHAR(64),EXT2 VARCHAR(128),EXT3 TEXT ,EXT4 TEXT ,CONSTRAINT AWS_PAL_REPOSITORY_R_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_REPO_R_INFO(ID CHAR(36) NOT NULL ,REMOVEUSER VARCHAR(36),REMOVETIME DATE ,WSID VARCHAR(36),RESOURCEID VARCHAR(36),REMOVETYPE DECIMAL(1),CONSTRAINT AWS_PAL_REPOSITORY_R_INFO_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_BACKUP(ID CHAR(36) NOT NULL ,WSID CHAR(36),BACKUPTIME DATE ,USERID VARCHAR(36),REMARK TEXT ,STATE DECIMAL(1),CONSTRAINT AWS_AWS_COE_PAL_BACKUP_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_PROP(ID CHAR(36) NOT NULL ,PLID CHAR(36),PROPERTYID VARCHAR(100),PROPERTYNAME VARCHAR(100),PROPERTYVALUE TEXT ,ORDERINDEX DECIMAL(3),CONSTRAINT AWS_COE_PAL_PROPERTY_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SHAPE_CONFIG(ID CHAR(36) NOT NULL ,WSID CHAR(36),METHODID VARCHAR(36),SHAPEID VARCHAR(100),ATTRIBUTE TEXT ,ORDERINDEX DECIMAL(3),CONSTRAINT AWS_COE_PAL_SHAPE_CONFIG_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE TEXT ,CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),ISDELETE VARCHAR(10),ORDERINDEX DECIMAL(3),CONSTRAINT AWS_COE_PAL_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SHAPE_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE TEXT ,CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),SHAPENAME VARCHAR(64),ORDERINDEX DECIMAL(3),CONSTRAINT AWS_COE_PAL_SHAPE_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SPCL_PROP(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLID CHAR(36),TYPE CHAR(100),VALUETEXT TEXT ,CONSTRAINT AWS_COE_PAL_SPECIAL_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_CORRELATE(PLID CHAR(36) NOT NULL ,WSID CHAR(36),PLAWSVERSIONID CHAR(36),PLAWSID CHAR(36),PLVERSIONID VARCHAR(36),CORRELATETYPE DECIMAL(1),ISCORRELATE DECIMAL(1),EXT1 VARCHAR(64),EXT2 VARCHAR(128),EXT3 TEXT ,EXT4 TEXT ,CONSTRAINT AWS_COE_PAL_CORRELATE_PK PRIMARY KEY (PLID)) ; + +create table APP_ACT_COE_PAL_PUBLISH_COM(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),SORT DECIMAL(16),CONSTRAINT AWS_COE_PAL_COMMON_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_TEAMMBR_PERM_EXT(ID CHAR(36) NOT NULL ,BINDID CHAR(36),RESOURCEID CHAR(36),CONSTRAINT AWS_COE_PAL_EXTEND_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_PUBLISH_FREQ(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),COUNT DECIMAL(16),CONSTRAINT AWS_COE_PAL_FREQUENCY_PK PRIMARY KEY (ID)) ; + +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_IND1 ON APP_ACT_COE_PAL_PUBLISH (PUBLISHDATE); +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_L_I ON APP_ACT_COE_PAL_PUBLISH_LIST (PID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_UK UNIQUE (WSID,GROUPCODE); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_PERM ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_P_UK UNIQUE (GROUPID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_ROLE ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_R_UK UNIQUE (GROUPID,ROLEID); +ALTER TABLE APP_ACT_COE_TEAM_PERM ADD CONSTRAINT APP_ACT_COE_TEAM_PERM_UK UNIQUE (TEAMID,WSID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_TEAMMBR_PERM ADD CONSTRAINT APP_ACT_COE_TEAMMBR_PERM_UK UNIQUE (TEAMID,USERID); +CREATE INDEX APP_ACT_COE_PAL_COMMENT_IND1 ON APP_ACT_COE_PAL_COMMENT (TARGETID,COMMENTDATE); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('e0583f9a-2f6e-49fe-b4e8-4b9a5f3c257a','AWS BPM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('0df9d8b1-b082-4e3f-aadb-45fd76b82aeb','SAP ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('cfbcec4a-b0ed-4e43-9866-bcda72d69eab','Oracle ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('2a5faee5-0c12-4e29-b32e-aab42552ff6d','Oracle Siebel CRM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('16f37ce8-dc62-4ffb-b6ca-fc248b51ff73','Oracle JDE ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('275e402a-a2c6-4d57-83a1-3f0da50539e4','Oracle PeopleSoft',0); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('CoE_Test','false'); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('InitStep','6'); + +INSERT INTO APP_ACT_COE_USER(ID,USERID,ISADMIN) VALUES('9e23d27b-26a2-4ec5-839b-d9fe4c1eb9e3','admin',1); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.3/polardb.sql b/com.actionsoft.apps.coe.pal/db/6.3/polardb.sql new file mode 100644 index 00000000..7bbebc87 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.3/polardb.sql @@ -0,0 +1,86 @@ +CREATE TABLE APP_ACT_COE_PAL_UPFILE(ID CHAR(36) NOT NULL ,PALREPOSITORYID CHAR(36),SHAPEID VARCHAR(64),FILETYPE CHAR(1),FILENAME VARCHAR(128),DOWNLOAD SMALLINT(1),CREATEUSER VARCHAR(36),CREATETIME DATETIME ,CONSTRAINT APP_ACT_COE_PAL_UPFILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_FILE(ID VARCHAR(64) NOT NULL ,PALREPOSITORYID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_FILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SYSTEMNAME(ID CHAR(36) NOT NULL ,SYSTEMNAME VARCHAR(36),ISDEFAULT SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_SYSTEMNAME_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAM_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PERMTYPE SMALLINT(2),RESOURCEID VARCHAR(128),CONSTRAINT APP_ACT_COE_TEAM_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),USERID VARCHAR(36),ACTIONTYPE VARCHAR(64),EXTENDAPPS VARCHAR(225),CONSTRAINT APP_ACT_COE_TEAMMEMBER_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP(ID CHAR(36) NOT NULL ,WSID CHAR(36),GROUPCODE VARCHAR(36),CATEGORY VARCHAR(64),GROUPNAME VARCHAR(128),GROUPDESC VARCHAR(255),CREATEUSER VARCHAR(36),CREATEDATE DATETIME ,CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_PERM(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),PERMTYPE SMALLINT(2),RESOURCEID VARCHAR(128),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_ROLE(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),ROLEID VARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_ROLE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_COMMENT(ID CHAR(36) NOT NULL ,PID CHAR(36),STREAMID CHAR(36),WSID CHAR(36),TARGETTYPE SMALLINT(1),TARGETID CHAR(36),TEAMID CHAR(36),USERID VARCHAR(36),USERCOMMENT TEXT ,COMMENTDATE DATETIME ,INFOTYPE SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_COMMENT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH(ID CHAR(36) NOT NULL ,PROCESSINSTID VARCHAR(36),WSID CHAR(36),USERID VARCHAR(36),AUDITORID VARCHAR(36),PUBLISHDATE DATETIME ,PUBLISHDESC TEXT ,PUBLISHN NUMERIC(6),PUBLISHC NUMERIC(6),PUBLISHS NUMERIC(6),TEAMID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_LIST(ID CHAR(36) NOT NULL ,PID CHAR(36),PALREPOSITORYID CHAR(36),ACTIONTYPE CHAR(1),PUBLISHDESC VARCHAR(255),TASKID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_LIST_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_OUTPUT_TASK(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PROFILEID VARCHAR(36),TASKNAME VARCHAR(64),USERID VARCHAR(36),CREATETIME DATETIME ,BEGINTIME DATETIME ,ENDTIME DATETIME ,TASKSTATE SMALLINT(1),THREADID VARCHAR(128),LANG VARCHAR(32),ISDISPLAY VARCHAR(2),CONSTRAINT APP_ACT_COE_PAL_OUTPUT_TASK_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PROP(PROPERTYKEY VARCHAR(128) NOT NULL ,PROPERTYVALUE TEXT ,CONSTRAINT APP_ACT_COE_PROPERTY_PK PRIMARY KEY (PROPERTYKEY)) ; + +CREATE TABLE APP_ACT_COE_USER(ID CHAR(36) NOT NULL ,USERID VARCHAR(36),ISADMIN SMALLINT(1),CONSTRAINT APP_ACT_COE_USER_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_WORKSPACE(ID CHAR(36) NOT NULL ,WSNAME VARCHAR(255),WSDM VARCHAR(255),WSADMIN VARCHAR(255),WSDESC VARCHAR(255),WSSTATE SMALLINT(1),WSORGTYPE SMALLINT(1),WSTCTYPE SMALLINT(1),WSBGURL VARCHAR(255),WSORDERINDEX SMALLINT(3),WSVER SMALLINT(3),WSVERSIONUUID CHAR(36),ISUSE SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_WORKSPACE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPOSITORY(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL SMALLINT(2),PLPARENTID VARCHAR(36),PLORDERINDEX SMALLINT(3),PLISBOTTOMLEVEL SMALLINT(1),PLDESC TEXT ,PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT VARCHAR(255),PLOUTPUT VARCHAR(255),PLEXECTYPE SMALLINT(1),PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL VARCHAR(255),PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER SMALLINT(3),PLVERSIONID CHAR(36),ISUSE SMALLINT(1),ISPUBLISH SMALLINT(1),ISSYSTEMFILE SMALLINT(1),FILEPATH VARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME ,MODIFYDATE DATETIME ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),LOCKUSER VARCHAR(225),PUBLISHDATE DATETIME ,CHANGEDATE DATETIME ,STOPDATE DATETIME ,CONSTRAINT APP_ACT_COE_PAL_REPOSITORY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_COPY(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_COPY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_PASTE(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_PASTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_RLAT(ID CHAR(36) NOT NULL ,FILEID VARCHAR(64),SHAPEID VARCHAR(64),SHAPETEXT VARCHAR(128),ATTRID VARCHAR(64),RELATIONFILEID VARCHAR(64),RELATIONSHAPEID VARCHAR(64),RELATIONSHAPETEXT VARCHAR(128),CONSTRAINT APP_ACT_COE_PAL_SHAPE_RT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R(ID CHAR(36) NOT NULL ,REMOVEID CHAR(36),WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL SMALLINT(2),PLPARENTID VARCHAR(36),PLORDERINDEX SMALLINT(3),PLISBOTTOMLEVEL SMALLINT(1),PLDESC TEXT ,PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT VARCHAR(255),PLOUTPUT VARCHAR(255),PLEXECTYPE SMALLINT(1),PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL VARCHAR(255),PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER SMALLINT(3),PLVERSIONID CHAR(36),ISUSE SMALLINT(1),ISPUBLISH SMALLINT(1),ISSYSTEMFILE SMALLINT(1),FILEPATH VARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME ,MODIFYDATE DATETIME ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),CONSTRAINT AWS_PAL_REPOSITORY_R_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R_INFO(ID CHAR(36) NOT NULL ,REMOVEUSER VARCHAR(36),REMOVETIME DATETIME ,WSID VARCHAR(36),RESOURCEID VARCHAR(36),REMOVETYPE SMALLINT(1),CONSTRAINT AWS_PAL_REPOSITORY_R_INFO_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_BACKUP(ID CHAR(36) NOT NULL ,WSID CHAR(36),BACKUPTIME DATETIME ,USERID VARCHAR(36),REMARK VARCHAR(255),STATE SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_BACKUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PROP(ID CHAR(36) NOT NULL ,PLID CHAR(36),PROPERTYID VARCHAR(100),PROPERTYNAME VARCHAR(100),PROPERTYVALUE TEXT ,ORDERINDEX SMALLINT(3),CONSTRAINT APP_ACT_COE_PAL_PROPERTY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE TEXT ,CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),ISDELETE VARCHAR(10),CONSTRAINT APP_ACT_COE_PAL_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE TEXT ,CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),SHAPENAME VARCHAR(64),CONSTRAINT APP_ACT_COE_PAL_SHAPE_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SPCL_PROP(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLID CHAR(36),TYPE CHAR(100),VALUETEXT TEXT ,CONSTRAINT APP_ACT_COE_PAL_SPECIAL_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_CORRELATE(PLID CHAR(36) NOT NULL ,WSID CHAR(36),PLAWSVERSIONID CHAR(36),PLAWSID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_CORRELATE_PK PRIMARY KEY (PLID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_COM(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),SORT NUMERIC(16),CONSTRAINT APP_ACT_COE_PAL_COMMON_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM_EXT(ID CHAR(36) NOT NULL ,BINDID CHAR(36),RESOURCEID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_EXTEND_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_FREQ(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),COUNT NUMERIC(16),CONSTRAINT APP_ACT_COE_PAL_FREQUENCY_PK PRIMARY KEY (ID)) ; + +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_IND1 ON APP_ACT_COE_PAL_PUBLISH (PUBLISHDATE); +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_L_I ON APP_ACT_COE_PAL_PUBLISH_LIST (PID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_UK UNIQUE (WSID,GROUPCODE); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_PERM ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_P_UK UNIQUE (GROUPID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_ROLE ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_R_UK UNIQUE (GROUPID,ROLEID); +ALTER TABLE APP_ACT_COE_TEAM_PERM ADD CONSTRAINT APP_ACT_COE_TEAM_PERM_UK UNIQUE (TEAMID,WSID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_TEAMMBR_PERM ADD CONSTRAINT APP_ACT_COE_TEAMMBR_PERM_UK UNIQUE (TEAMID,USERID); +CREATE INDEX APP_ACT_COE_PAL_COMMENT_IND1 ON APP_ACT_COE_PAL_COMMENT (TARGETID,COMMENTDATE); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('e0583f9a-2f6e-49fe-b4e8-4b9a5f3c257a','AWS BPM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('0df9d8b1-b082-4e3f-aadb-45fd76b82aeb','SAP ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('cfbcec4a-b0ed-4e43-9866-bcda72d69eab','Oracle ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('2a5faee5-0c12-4e29-b32e-aab42552ff6d','Oracle Siebel CRM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('16f37ce8-dc62-4ffb-b6ca-fc248b51ff73','Oracle JDE ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('275e402a-a2c6-4d57-83a1-3f0da50539e4','Oracle PeopleSoft',0); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('CoE_Test','false'); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('InitStep','6'); + +INSERT INTO APP_ACT_COE_USER(ID,USERID,ISADMIN) VALUES('9e23d27b-26a2-4ec5-839b-d9fe4c1eb9e3','admin',1); diff --git a/com.actionsoft.apps.coe.pal/db/6.3/postgresql.sql b/com.actionsoft.apps.coe.pal/db/6.3/postgresql.sql new file mode 100644 index 00000000..f094cfd4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.3/postgresql.sql @@ -0,0 +1,88 @@ +create table APP_ACT_COE_PAL_UPFILE(ID CHAR(36) NOT NULL ,PALREPOSITORYID CHAR(36),SHAPEID VARCHAR(64),FILETYPE CHAR(1),FILENAME VARCHAR(128),DOWNLOAD DECIMAL(1),CREATEUSER VARCHAR(36),CREATETIME TIMESTAMP ,CONSTRAINT PRIMARYAWS_COE_PAL_UPFILE1 PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SHAPE_FILE(ID VARCHAR(64) NOT NULL ,PALREPOSITORYID CHAR(36),CONSTRAINT PRIMARYAWS_COE_PAL_SHAPE_FILE1 PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SYSTEMNAME(ID CHAR(36) NOT NULL ,SYSTEMNAME VARCHAR(36),ISDEFAULT DECIMAL(1),CONSTRAINT AWS_AWS_COE_PAL_AWSTEMNAME_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_TEAM_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PERMTYPE DECIMAL(2),RESOURCEID VARCHAR(128),CONSTRAINT PRIMARYAWS_COE_TEAM_PERM1 PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_TEAMMBR_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),USERID VARCHAR(36),ACTIONTYPE VARCHAR(64),EXTENDAPPS VARCHAR(225),CONSTRAINT PRIMARYAWS_COE_TEAMMEMBER_PERM PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_USERGRP(ID CHAR(36) NOT NULL ,WSID CHAR(36),GROUPCODE VARCHAR(36),CATEGORY VARCHAR(64),GROUPNAME VARCHAR(128),GROUPDESC TEXT ,CREATEUSER VARCHAR(36),CREATEDATE TIMESTAMP ,CONSTRAINT PRIMARYAWS_COE_PAL_USERGROUP1 PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_USERGRP_PERM(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),PERMTYPE DECIMAL(2),RESOURCEID VARCHAR(128),CONSTRAINT PRIMARYAWS_COE_PAL_USERGROUP_P PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_USERGRP_ROLE(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),ROLEID VARCHAR(36),CONSTRAINT PRIMARYAWS_COE_PAL_USERGROUP_R PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_COMMENT(ID CHAR(36) NOT NULL ,PID CHAR(36),STREAMID CHAR(36),WSID CHAR(36),TARGETTYPE DECIMAL(1),TARGETID CHAR(36),TEAMID CHAR(36),USERID VARCHAR(36),USERCOMMENT TEXT ,COMMENTDATE TIMESTAMP ,INFOTYPE DECIMAL(1),CONSTRAINT PRIMARYAWS_COE_PAL_COMMENT1 PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_PUBLISH(ID CHAR(36) NOT NULL ,PROCESSINSTID VARCHAR(36),WSID CHAR(36),USERID VARCHAR(36),AUDITORID VARCHAR(36),PUBLISHDATE TIMESTAMP ,PUBLISHDESC TEXT ,PUBLISHN DECIMAL(6),PUBLISHC DECIMAL(6),PUBLISHS DECIMAL(6),TEAMID CHAR(36),CONSTRAINT PRIMARYAWS_COE_PAL_PUBLISH1 PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_PUBLISH_LIST(ID CHAR(36) NOT NULL ,PID CHAR(36),PALREPOSITORYID CHAR(36),ACTIONTYPE CHAR(1),PUBLISHDESC TEXT ,TASKID CHAR(36),CONSTRAINT PRIMARYAWS_COE_PAL_PUBLISH_LIS PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_OUTPUT_TASK(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PROFILEID VARCHAR(36),TASKNAME VARCHAR(64),USERID VARCHAR(36),CREATETIME TIMESTAMP ,BEGINTIME TIMESTAMP ,ENDTIME TIMESTAMP ,TASKSTATE DECIMAL(1),THREADID VARCHAR(128),LANG VARCHAR(32),ISDISPLAY VARCHAR(4),CONSTRAINT PRIMARYAWS_COE_PAL_OUTPUT_TASK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PROP(PROPERTYKEY VARCHAR(128) NOT NULL ,PROPERTYVALUE TEXT ,CONSTRAINT AWS_AWS_COE_PROPERTY_PK PRIMARY KEY (PROPERTYKEY)) ; + +create table APP_ACT_COE_USER(ID CHAR(36) NOT NULL ,USERID VARCHAR(36),ISADMIN DECIMAL(1),CONSTRAINT AWS_AWS_COE_USER_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_WORKSPACE(ID CHAR(36) NOT NULL ,WSNAME TEXT ,WSDM TEXT ,WSADMIN TEXT ,WSDESC TEXT ,WSSTATE DECIMAL(1),WSORGTYPE DECIMAL(1),WSTCTYPE DECIMAL(1),WSBGURL TEXT ,WSORDERINDEX DECIMAL(3),WSVER DECIMAL(3),WSVERSIONUUID CHAR(36),ISUSE DECIMAL(1),CONSTRAINT AWS_AWS_COE_PAL_WORKSPACE_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_REPOSITORY(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL DECIMAL(2),PLPARENTID VARCHAR(36),PLORDERINDEX DECIMAL(3),PLISBOTTOMLEVEL DECIMAL(1),PLDESC TEXT ,PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT TEXT ,PLOUTPUT TEXT ,PLEXECTYPE DECIMAL(1),PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL TEXT ,PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER DECIMAL(3),PLVERSIONID CHAR(36),ISUSE DECIMAL(1),ISPUBLISH DECIMAL(1),ISSYSTEMFILE DECIMAL(1),FILEPATH TEXT ,HISTORYMAXVERSION DECIMAL(6),VIEWCOUNT DECIMAL(12),CREATEUSER VARCHAR(72),MODIFYUSER VARCHAR(72),CREATEDATE TIMESTAMP ,MODIFYDATE TIMESTAMP ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),LOCKUSER VARCHAR(225),PUBLISHDATE TIMESTAMP ,CHANGEDATE TIMESTAMP ,STOPDATE TIMESTAMP ,ISSTOP DECIMAL(1),ISAPPROVAL DECIMAL(1),EXT1 VARCHAR(64),EXT2 VARCHAR(128),EXT3 TEXT ,EXT4 TEXT ,CONSTRAINT AWS_AWS_COE_PAL_REPOSITORY_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SHAPE_COPY(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36),CONSTRAINT AWS_AWS_COE_PAL_SHAPE_COPY_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SHAPE_PASTE(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36),CONSTRAINT AWS_AWS_COE_PAL_SHAPE_PASTE_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SHAPE_RLAT(ID CHAR(36) NOT NULL ,FILEID VARCHAR(64),SHAPEID VARCHAR(64),SHAPETEXT VARCHAR(128),ATTRID VARCHAR(64),RELATIONFILEID VARCHAR(64),RELATIONSHAPEID VARCHAR(64),RELATIONSHAPETEXT VARCHAR(128),CONSTRAINT PRIMARYAWS_COE_PAL_SHAPE_RELAT PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_REPO_R(ID CHAR(36) NOT NULL ,REMOVEID CHAR(36),WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL DECIMAL(2),PLPARENTID VARCHAR(36),PLORDERINDEX DECIMAL(3),PLISBOTTOMLEVEL DECIMAL(1),PLDESC TEXT ,PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT TEXT ,PLOUTPUT TEXT ,PLEXECTYPE DECIMAL(1),PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL TEXT ,PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER DECIMAL(3),PLVERSIONID CHAR(36),ISUSE DECIMAL(1),ISPUBLISH DECIMAL(1),ISSYSTEMFILE DECIMAL(1),FILEPATH TEXT ,HISTORYMAXVERSION DECIMAL(6),VIEWCOUNT DECIMAL(12),CREATEUSER VARCHAR(72),MODIFYUSER VARCHAR(72),CREATEDATE TIMESTAMP ,MODIFYDATE TIMESTAMP ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),ISSTOP DECIMAL(1),ISAPPROVAL DECIMAL(1),EXT1 VARCHAR(64),EXT2 VARCHAR(128),EXT3 TEXT ,EXT4 TEXT ,CONSTRAINT AWS_PAL_REPOSITORY_R_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_REPO_R_INFO(ID CHAR(36) NOT NULL ,REMOVEUSER VARCHAR(36),REMOVETIME TIMESTAMP ,WSID VARCHAR(36),RESOURCEID VARCHAR(36),REMOVETYPE DECIMAL(1),CONSTRAINT AWS_PAL_REPOSITORY_R_INFO_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_BACKUP(ID CHAR(36) NOT NULL ,WSID CHAR(36),BACKUPTIME TIMESTAMP ,USERID VARCHAR(36),REMARK TEXT ,STATE DECIMAL(1),CONSTRAINT AWS_AWS_COE_PAL_BACKUP_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_PROP(ID CHAR(36) NOT NULL ,PLID CHAR(36),PROPERTYID VARCHAR(100),PROPERTYNAME VARCHAR(100),PROPERTYVALUE TEXT ,ORDERINDEX DECIMAL(3),CONSTRAINT AWS_COE_PAL_PROPERTY_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SHAPE_CONFIG(ID CHAR(36) NOT NULL ,WSID CHAR(36),METHODID VARCHAR(36),SHAPEID VARCHAR(100),ATTRIBUTE TEXT ,ORDERINDEX DECIMAL(3),CONSTRAINT AWS_COE_PAL_SHAPE_CONFIG_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE TEXT ,CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),ISDELETE VARCHAR(10),ORDERINDEX DECIMAL(3),CONSTRAINT AWS_COE_PAL_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SHAPE_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE TEXT ,CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),SHAPENAME VARCHAR(64),ORDERINDEX DECIMAL(3),CONSTRAINT AWS_COE_PAL_SHAPE_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_SPCL_PROP(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLID CHAR(36),TYPE CHAR(100),VALUETEXT TEXT ,CONSTRAINT AWS_COE_PAL_SPECIAL_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_CORRELATE(PLID CHAR(36) NOT NULL ,WSID CHAR(36),PLAWSVERSIONID CHAR(36),PLAWSID CHAR(36),PLVERSIONID VARCHAR(36),CORRELATETYPE DECIMAL(1),ISCORRELATE DECIMAL(1),EXT1 VARCHAR(64),EXT2 VARCHAR(128),EXT3 TEXT ,EXT4 TEXT ,CONSTRAINT AWS_COE_PAL_CORRELATE_PK PRIMARY KEY (PLID)) ; + +create table APP_ACT_COE_PAL_PUBLISH_COM(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),SORT DECIMAL(16),CONSTRAINT AWS_COE_PAL_COMMON_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_TEAMMBR_PERM_EXT(ID CHAR(36) NOT NULL ,BINDID CHAR(36),RESOURCEID CHAR(36),CONSTRAINT AWS_COE_PAL_EXTEND_PK PRIMARY KEY (ID)) ; + +create table APP_ACT_COE_PAL_PUBLISH_FREQ(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),COUNT DECIMAL(16),CONSTRAINT AWS_COE_PAL_FREQUENCY_PK PRIMARY KEY (ID)) ; + +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_IND1 ON APP_ACT_COE_PAL_PUBLISH (PUBLISHDATE); +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_L_I ON APP_ACT_COE_PAL_PUBLISH_LIST (PID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_UK UNIQUE (WSID,GROUPCODE); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_PERM ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_P_UK UNIQUE (GROUPID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_ROLE ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_R_UK UNIQUE (GROUPID,ROLEID); +ALTER TABLE APP_ACT_COE_TEAM_PERM ADD CONSTRAINT APP_ACT_COE_TEAM_PERM_UK UNIQUE (TEAMID,WSID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_TEAMMBR_PERM ADD CONSTRAINT APP_ACT_COE_TEAMMBR_PERM_UK UNIQUE (TEAMID,USERID); +CREATE INDEX APP_ACT_COE_PAL_COMMENT_IND1 ON APP_ACT_COE_PAL_COMMENT (TARGETID,COMMENTDATE); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('e0583f9a-2f6e-49fe-b4e8-4b9a5f3c257a','AWS BPM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('0df9d8b1-b082-4e3f-aadb-45fd76b82aeb','SAP ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('cfbcec4a-b0ed-4e43-9866-bcda72d69eab','Oracle ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('2a5faee5-0c12-4e29-b32e-aab42552ff6d','Oracle Siebel CRM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('16f37ce8-dc62-4ffb-b6ca-fc248b51ff73','Oracle JDE ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('275e402a-a2c6-4d57-83a1-3f0da50539e4','Oracle PeopleSoft',0); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('CoE_Test','false'); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('InitStep','6'); + +INSERT INTO APP_ACT_COE_USER(ID,USERID,ISADMIN) VALUES('9e23d27b-26a2-4ec5-839b-d9fe4c1eb9e3','admin',1); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.3/sqlserver.sql b/com.actionsoft.apps.coe.pal/db/6.3/sqlserver.sql new file mode 100644 index 00000000..f8fff0d3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.3/sqlserver.sql @@ -0,0 +1,88 @@ +CREATE TABLE APP_ACT_COE_PAL_UPFILE(ID CHAR(36) NOT NULL ,PALREPOSITORYID CHAR(36),SHAPEID NVARCHAR(64),FILETYPE CHAR(1),FILENAME NVARCHAR(128),DOWNLOAD SMALLINT ,CREATEUSER NVARCHAR(36),CREATETIME DATETIME ,CONSTRAINT APP_ACT_COE_PAL_UPFILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_FILE(ID NVARCHAR(64) NOT NULL ,PALREPOSITORYID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_FILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SYSTEMNAME(ID CHAR(36) NOT NULL ,SYSTEMNAME NVARCHAR(36),ISDEFAULT SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_SYSTEMNAME_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAM_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PERMTYPE SMALLINT ,RESOURCEID NVARCHAR(128),CONSTRAINT APP_ACT_COE_TEAM_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),USERID NVARCHAR(36),ACTIONTYPE NVARCHAR(64),EXTENDAPPS NVARCHAR(225),CONSTRAINT APP_ACT_COE_TEAMMEMBER_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP(ID CHAR(36) NOT NULL ,WSID CHAR(36),GROUPCODE NVARCHAR(36),CATEGORY NVARCHAR(64),GROUPNAME NVARCHAR(128),GROUPDESC NVARCHAR(255),CREATEUSER NVARCHAR(36),CREATEDATE DATETIME ,CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_PERM(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),PERMTYPE SMALLINT ,RESOURCEID NVARCHAR(128),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_ROLE(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),ROLEID NVARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_ROLE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_COMMENT(ID CHAR(36) NOT NULL ,PID CHAR(36),STREAMID CHAR(36),WSID CHAR(36),TARGETTYPE SMALLINT ,TARGETID CHAR(36),TEAMID CHAR(36),USERID NVARCHAR(36),USERCOMMENT NVARCHAR(1000),COMMENTDATE DATETIME ,INFOTYPE SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_COMMENT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH(ID CHAR(36) NOT NULL ,PROCESSINSTID NVARCHAR(36),WSID CHAR(36),USERID NVARCHAR(36),AUDITORID NVARCHAR(36),PUBLISHDATE DATETIME ,PUBLISHDESC NVARCHAR(1000),PUBLISHN NUMERIC(6),PUBLISHC NUMERIC(6),PUBLISHS NUMERIC(6),TEAMID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_LIST(ID CHAR(36) NOT NULL ,PID CHAR(36),PALREPOSITORYID CHAR(36),ACTIONTYPE CHAR(1),PUBLISHDESC NVARCHAR(255),TASKID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_LIST_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_OUTPUT_TASK(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PROFILEID NVARCHAR(36),TASKNAME NVARCHAR(64),USERID NVARCHAR(36),CREATETIME DATETIME ,BEGINTIME DATETIME ,ENDTIME DATETIME ,TASKSTATE SMALLINT ,THREADID NVARCHAR(128),LANG NVARCHAR(32),ISDISPLAY VARCHAR(2),CONSTRAINT APP_ACT_COE_PAL_OUTPUT_TASK_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PROP(PROPERTYKEY NVARCHAR(128) NOT NULL ,PROPERTYVALUE TEXT ,CONSTRAINT APP_ACT_COE_PROPERTY_PK PRIMARY KEY (PROPERTYKEY)) ; + +CREATE TABLE APP_ACT_COE_USER(ID CHAR(36) NOT NULL ,USERID NVARCHAR(36),ISADMIN SMALLINT ,CONSTRAINT APP_ACT_COE_USER_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_WORKSPACE(ID CHAR(36) NOT NULL ,WSNAME NVARCHAR(255),WSDM NVARCHAR(255),WSADMIN NVARCHAR(255),WSDESC NVARCHAR(255),WSSTATE SMALLINT ,WSORGTYPE SMALLINT ,WSTCTYPE SMALLINT ,WSBGURL NVARCHAR(255),WSORDERINDEX SMALLINT ,WSVER SMALLINT ,WSVERSIONUUID CHAR(36),ISUSE SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_WORKSPACE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPOSITORY(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLRID CHAR(36),PLNO NVARCHAR(36),PLNAME NVARCHAR(128),PLLEVEL SMALLINT ,PLPARENTID NVARCHAR(36),PLORDERINDEX SMALLINT ,PLISBOTTOMLEVEL SMALLINT ,PLDESC NVARCHAR(2000),PLRD NVARCHAR(36),PLRP NVARCHAR(36),PM NVARCHAR(36),PLINPUT NVARCHAR(255),PLOUTPUT NVARCHAR(255),PLEXECTYPE SMALLINT ,PLSYSTEMNAME NVARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL NVARCHAR(255),PLCOLOR NVARCHAR(36),PLCATEGORY NVARCHAR(36),PLMETHODID NVARCHAR(36),PLVER SMALLINT ,PLVERSIONID CHAR(36),ISUSE SMALLINT ,ISPUBLISH SMALLINT ,ISSYSTEMFILE SMALLINT ,FILEPATH NVARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME ,MODIFYDATE DATETIME ,PLDUTYDEPT NVARCHAR(36),PLDUTYPERSON NVARCHAR(128),LOCKUSER NVARCHAR(225),PUBLISHDATE DATETIME ,CHANGEDATE DATETIME ,STOPDATE DATETIME ,ISSTOP SMALLINT ,ISAPPROVAL SMALLINT ,EXT1 NVARCHAR(64),EXT2 NVARCHAR(128),EXT3 NVARCHAR(255),EXT4 NVARCHAR(255),CONSTRAINT APP_ACT_COE_PAL_REPOSITORY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_COPY(ID NVARCHAR(64) NOT NULL ,SHAPEGROUPTID NVARCHAR(64),SHAPENAME NVARCHAR(128),SHAPECATEGORYNAME NVARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE NVARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_COPY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_PASTE(ID NVARCHAR(64) NOT NULL ,SHAPEGROUPTID NVARCHAR(64),SHAPENAME NVARCHAR(128),SHAPECATEGORYNAME NVARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE NVARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_PASTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_RLAT(ID CHAR(36) NOT NULL ,FILEID NVARCHAR(64),SHAPEID NVARCHAR(64),SHAPETEXT NVARCHAR(128),ATTRID NVARCHAR(64),RELATIONFILEID NVARCHAR(64),RELATIONSHAPEID NVARCHAR(64),RELATIONSHAPETEXT NVARCHAR(128),CONSTRAINT APP_ACT_COE_PAL_SHAPE_RT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R(ID CHAR(36) NOT NULL ,REMOVEID CHAR(36),WSID CHAR(36),PLRID CHAR(36),PLNO NVARCHAR(36),PLNAME NVARCHAR(128),PLLEVEL SMALLINT ,PLPARENTID NVARCHAR(36),PLORDERINDEX SMALLINT ,PLISBOTTOMLEVEL SMALLINT ,PLDESC NVARCHAR(2000),PLRD NVARCHAR(36),PLRP NVARCHAR(36),PM NVARCHAR(36),PLINPUT NVARCHAR(255),PLOUTPUT NVARCHAR(255),PLEXECTYPE SMALLINT ,PLSYSTEMNAME NVARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL NVARCHAR(255),PLCOLOR NVARCHAR(36),PLCATEGORY NVARCHAR(36),PLMETHODID NVARCHAR(36),PLVER SMALLINT ,PLVERSIONID CHAR(36),ISUSE SMALLINT ,ISPUBLISH SMALLINT ,ISSYSTEMFILE SMALLINT ,FILEPATH NVARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME ,MODIFYDATE DATETIME ,PLDUTYDEPT NVARCHAR(36),PLDUTYPERSON NVARCHAR(128),ISSTOP SMALLINT ,ISAPPROVAL SMALLINT ,EXT1 NVARCHAR(64),EXT2 NVARCHAR(128),EXT3 NVARCHAR(255),EXT4 NVARCHAR(255),CONSTRAINT AWS_PAL_REPOSITORY_R_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R_INFO(ID CHAR(36) NOT NULL ,REMOVEUSER NVARCHAR(36),REMOVETIME DATETIME ,WSID NVARCHAR(36),RESOURCEID NVARCHAR(36),REMOVETYPE SMALLINT ,CONSTRAINT AWS_PAL_REPOSITORY_R_INFO_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_BACKUP(ID CHAR(36) NOT NULL ,WSID CHAR(36),BACKUPTIME DATETIME ,USERID NVARCHAR(36),REMARK NVARCHAR(255),STATE SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_BACKUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PROP(ID CHAR(36) NOT NULL ,PLID CHAR(36),PROPERTYID NVARCHAR(100),PROPERTYNAME NVARCHAR(100),PROPERTYVALUE NVARCHAR(2000),ORDERINDEX SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_PROPERTY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_CONFIG(ID CHAR(36) NOT NULL ,WSID CHAR(36),METHODID NVARCHAR(36),SHAPEID NVARCHAR(100),ATTRIBUTE NVARCHAR(255),ORDERINDEX SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_SHAPE_CONFIG_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID NVARCHAR(100),ATTRNAME NVARCHAR(100),ATTRVALUE NVARCHAR(2000),CATEGORY NVARCHAR(36),METHODID NVARCHAR(36),TYPE NVARCHAR(36),ISDELETE NVARCHAR(10),ORDERINDEX SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID NVARCHAR(100),ATTRNAME NVARCHAR(100),ATTRVALUE NVARCHAR(2000),CATEGORY NVARCHAR(36),METHODID NVARCHAR(36),TYPE NVARCHAR(36),SHAPENAME NVARCHAR(64),ORDERINDEX SMALLINT ,CONSTRAINT APP_ACT_COE_PAL_SHAPE_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SPCL_PROP(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLID CHAR(36),TYPE CHAR(100),VALUETEXT NVARCHAR(2000),CONSTRAINT APP_ACT_COE_PAL_SPECIAL_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_CORRELATE(PLID CHAR(36) NOT NULL ,WSID CHAR(36),PLAWSVERSIONID CHAR(36),PLAWSID CHAR(36),PLVERSIONID NVARCHAR(36),CORRELATETYPE SMALLINT ,ISCORRELATE SMALLINT ,EXT1 NVARCHAR(64),EXT2 NVARCHAR(128),EXT3 NVARCHAR(255),EXT4 NVARCHAR(255),CONSTRAINT APP_ACT_COE_PAL_CORRELATE_PK PRIMARY KEY (PLID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_COM(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),SORT NUMERIC(16),CONSTRAINT APP_ACT_COE_PAL_COMMON_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM_EXT(ID CHAR(36) NOT NULL ,BINDID CHAR(36),RESOURCEID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_EXTEND_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_FREQ(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),COUNT NUMERIC(16),CONSTRAINT APP_ACT_COE_PAL_FREQUENCY_PK PRIMARY KEY (ID)) ; + +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_IND1 ON APP_ACT_COE_PAL_PUBLISH (PUBLISHDATE); +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_L_I ON APP_ACT_COE_PAL_PUBLISH_LIST (PID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_UK UNIQUE (WSID,GROUPCODE); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_PERM ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_P_UK UNIQUE (GROUPID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_ROLE ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_R_UK UNIQUE (GROUPID,ROLEID); +ALTER TABLE APP_ACT_COE_TEAM_PERM ADD CONSTRAINT APP_ACT_COE_TEAM_PERM_UK UNIQUE (TEAMID,WSID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_TEAMMBR_PERM ADD CONSTRAINT APP_ACT_COE_TEAMMBR_PERM_UK UNIQUE (TEAMID,USERID); +CREATE INDEX APP_ACT_COE_PAL_COMMENT_IND1 ON APP_ACT_COE_PAL_COMMENT (TARGETID,COMMENTDATE); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('e0583f9a-2f6e-49fe-b4e8-4b9a5f3c257a','AWS BPM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('0df9d8b1-b082-4e3f-aadb-45fd76b82aeb','SAP ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('cfbcec4a-b0ed-4e43-9866-bcda72d69eab','Oracle ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('2a5faee5-0c12-4e29-b32e-aab42552ff6d','Oracle Siebel CRM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('16f37ce8-dc62-4ffb-b6ca-fc248b51ff73','Oracle JDE ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('275e402a-a2c6-4d57-83a1-3f0da50539e4','Oracle PeopleSoft',0); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('CoE_Test','false'); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('InitStep','6'); + +INSERT INTO APP_ACT_COE_USER(ID,USERID,ISADMIN) VALUES('9e23d27b-26a2-4ec5-839b-d9fe4c1eb9e3','admin',1); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.3/sybase.sql b/com.actionsoft.apps.coe.pal/db/6.3/sybase.sql new file mode 100644 index 00000000..8536a3a9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.3/sybase.sql @@ -0,0 +1,88 @@ +CREATE TABLE APP_ACT_COE_PAL_UPFILE(ID CHAR(36) NOT NULL ,PALREPOSITORYID CHAR(36) NULL ,SHAPEID NVARCHAR(64) NULL ,FILETYPE CHAR(1) NULL ,FILENAME NVARCHAR(128) NULL ,DOWNLOAD SMALLINT NULL ,CREATEUSER NVARCHAR(36) NULL ,CREATETIME DATETIME NULL ,CONSTRAINT APP_ACT_COE_PAL_UPFILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_FILE(ID NVARCHAR(64) NOT NULL ,PALREPOSITORYID CHAR(36) NULL ,CONSTRAINT APP_ACT_COE_PAL_SHAPE_FILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SYSTEMNAME(ID CHAR(36) NOT NULL ,SYSTEMNAME NVARCHAR(36) NULL ,ISDEFAULT SMALLINT NULL ,CONSTRAINT APP_ACT_COE_PAL_SYSTEMNAME_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAM_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36) NULL ,WSID CHAR(36) NULL ,PERMTYPE SMALLINT NULL ,RESOURCEID NVARCHAR(128) NULL ,CONSTRAINT APP_ACT_COE_TEAM_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36) NULL ,USERID NVARCHAR(36) NULL ,ACTIONTYPE NVARCHAR(64) NULL ,EXTENDAPPS NVARCHAR(225) NULL ,CONSTRAINT APP_ACT_COE_TEAMMEMBER_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP(ID CHAR(36) NOT NULL ,WSID CHAR(36) NULL ,GROUPCODE NVARCHAR(36) NULL ,CATEGORY NVARCHAR(64) NULL ,GROUPNAME NVARCHAR(128) NULL ,GROUPDESC NVARCHAR(255) NULL ,CREATEUSER NVARCHAR(36) NULL ,CREATEDATE DATETIME NULL ,CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_PERM(ID CHAR(36) NOT NULL ,GROUPID CHAR(36) NULL ,PERMTYPE SMALLINT NULL ,RESOURCEID NVARCHAR(128) NULL ,CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_ROLE(ID CHAR(36) NOT NULL ,GROUPID CHAR(36) NULL ,ROLEID NVARCHAR(36) NULL ,CONSTRAINT APP_ACT_COE_PAL_USERGROUP_ROLE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_COMMENT(ID CHAR(36) NOT NULL ,PID CHAR(36) NULL ,STREAMID CHAR(36) NULL ,WSID CHAR(36) NULL ,TARGETTYPE SMALLINT NULL ,TARGETID CHAR(36) NULL ,TEAMID CHAR(36) NULL ,USERID NVARCHAR(36) NULL ,USERCOMMENT NVARCHAR(1000) NULL ,COMMENTDATE DATETIME NULL ,INFOTYPE SMALLINT NULL ,CONSTRAINT APP_ACT_COE_PAL_COMMENT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH(ID CHAR(36) NOT NULL ,PROCESSINSTID NVARCHAR(36) NULL ,WSID CHAR(36) NULL ,USERID NVARCHAR(36) NULL ,AUDITORID NVARCHAR(36) NULL ,PUBLISHDATE DATETIME NULL ,PUBLISHDESC NVARCHAR(1000) NULL ,PUBLISHN NUMERIC(6) NULL ,PUBLISHC NUMERIC(6) NULL ,PUBLISHS NUMERIC(6) NULL ,TEAMID CHAR(36) NULL ,CONSTRAINT APP_ACT_COE_PAL_PUBLISH_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_LIST(ID CHAR(36) NOT NULL ,PID CHAR(36) NULL ,PALREPOSITORYID CHAR(36) NULL ,ACTIONTYPE CHAR(1) NULL ,PUBLISHDESC NVARCHAR(255) NULL ,TASKID CHAR(36) NULL ,CONSTRAINT APP_ACT_COE_PAL_PUBLISH_LIST_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_OUTPUT_TASK(ID CHAR(36) NOT NULL ,TEAMID CHAR(36) NULL ,WSID CHAR(36) NULL ,PROFILEID NVARCHAR(36) NULL ,TASKNAME NVARCHAR(64) NULL ,USERID NVARCHAR(36) NULL ,CREATETIME DATETIME NULL ,BEGINTIME DATETIME NULL ,ENDTIME DATETIME NULL ,TASKSTATE SMALLINT NULL ,THREADID NVARCHAR(128) NULL ,LANG NVARCHAR(32) NULL ,ISDISPLAY VARCHAR(2) NULL ,CONSTRAINT APP_ACT_COE_PAL_OUTPUT_TASK_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PROP(PROPERTYKEY NVARCHAR(128) NOT NULL ,PROPERTYVALUE TEXT NULL ,CONSTRAINT APP_ACT_COE_PROPERTY_PK PRIMARY KEY (PROPERTYKEY)) ; + +CREATE TABLE APP_ACT_COE_USER(ID CHAR(36) NOT NULL ,USERID NVARCHAR(36) NULL ,ISADMIN SMALLINT NULL ,CONSTRAINT APP_ACT_COE_USER_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_WORKSPACE(ID CHAR(36) NOT NULL ,WSNAME NVARCHAR(255) NULL ,WSDM NVARCHAR(255) NULL ,WSADMIN NVARCHAR(255) NULL ,WSDESC NVARCHAR(255) NULL ,WSSTATE SMALLINT NULL ,WSORGTYPE SMALLINT NULL ,WSTCTYPE SMALLINT NULL ,WSBGURL NVARCHAR(255) NULL ,WSORDERINDEX SMALLINT NULL ,WSVER SMALLINT NULL ,WSVERSIONUUID CHAR(36) NULL ,ISUSE SMALLINT NULL ,CONSTRAINT APP_ACT_COE_PAL_WORKSPACE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPOSITORY(ID CHAR(36) NOT NULL ,WSID CHAR(36) NULL ,PLRID CHAR(36) NULL ,PLNO NVARCHAR(36) NULL ,PLNAME NVARCHAR(128) NULL ,PLLEVEL SMALLINT NULL ,PLPARENTID NVARCHAR(36) NULL ,PLORDERINDEX SMALLINT NULL ,PLISBOTTOMLEVEL SMALLINT NULL ,PLDESC NVARCHAR(2000) NULL ,PLRD NVARCHAR(36) NULL ,PLRP NVARCHAR(36) NULL ,PM NVARCHAR(36) NULL ,PLINPUT NVARCHAR(255) NULL ,PLOUTPUT NVARCHAR(255) NULL ,PLEXECTYPE SMALLINT NULL ,PLSYSTEMNAME NVARCHAR(36) NULL ,PLAWSPID CHAR(36) NULL ,PLDIAGRAMURL NVARCHAR(255) NULL ,PLCOLOR NVARCHAR(36) NULL ,PLCATEGORY NVARCHAR(36) NULL ,PLMETHODID NVARCHAR(36) NULL ,PLVER SMALLINT NULL ,PLVERSIONID CHAR(36) NULL ,ISUSE SMALLINT NULL ,ISPUBLISH SMALLINT NULL ,ISSYSTEMFILE SMALLINT NULL ,FILEPATH NVARCHAR(255) NULL ,HISTORYMAXVERSION NUMERIC(6) NULL ,VIEWCOUNT NUMERIC(12) NULL ,CREATEUSER VARCHAR(36) NULL ,MODIFYUSER VARCHAR(36) NULL ,CREATEDATE DATETIME NULL ,MODIFYDATE DATETIME NULL ,PLDUTYDEPT NVARCHAR(36) NULL ,PLDUTYPERSON NVARCHAR(128) NULL ,LOCKUSER NVARCHAR(225) NULL ,PUBLISHDATE DATETIME NULL ,CHANGEDATE DATETIME NULL ,STOPDATE DATETIME NULL ,ISSTOP SMALLINT NULL ,ISAPPROVAL SMALLINT NULL ,EXT1 NVARCHAR(64) NULL ,EXT2 NVARCHAR(128) NULL ,EXT3 NVARCHAR(255) NULL ,EXT4 NVARCHAR(255) NULL ,CONSTRAINT APP_ACT_COE_PAL_REPOSITORY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_COPY(ID NVARCHAR(64) NOT NULL ,SHAPEGROUPTID NVARCHAR(64) NULL ,SHAPENAME NVARCHAR(128) NULL ,SHAPECATEGORYNAME NVARCHAR(64) NULL ,PALREPOSITORYID CHAR(36) NULL ,ISDELETE CHAR(1) NULL ,SHAPETYPE NVARCHAR(36) NULL ,CONSTRAINT APP_ACT_COE_PAL_SHAPE_COPY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_PASTE(ID NVARCHAR(64) NOT NULL ,SHAPEGROUPTID NVARCHAR(64) NULL ,SHAPENAME NVARCHAR(128) NULL ,SHAPECATEGORYNAME NVARCHAR(64) NULL ,PALREPOSITORYID CHAR(36) NULL ,ISDELETE CHAR(1) NULL ,SHAPETYPE NVARCHAR(36) NULL ,CONSTRAINT APP_ACT_COE_PAL_SHAPE_PASTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_RLAT(ID CHAR(36) NOT NULL ,FILEID NVARCHAR(64) NULL ,SHAPEID NVARCHAR(64) NULL ,SHAPETEXT NVARCHAR(128) NULL ,ATTRID NVARCHAR(64) NULL ,RELATIONFILEID NVARCHAR(64) NULL ,RELATIONSHAPEID NVARCHAR(64) NULL ,RELATIONSHAPETEXT NVARCHAR(128) NULL ,CONSTRAINT APP_ACT_COE_PAL_SHAPE_RT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R(ID CHAR(36) NOT NULL ,REMOVEID CHAR(36) NULL ,WSID CHAR(36) NULL ,PLRID CHAR(36) NULL ,PLNO NVARCHAR(36) NULL ,PLNAME NVARCHAR(128) NULL ,PLLEVEL SMALLINT NULL ,PLPARENTID NVARCHAR(36) NULL ,PLORDERINDEX SMALLINT NULL ,PLISBOTTOMLEVEL SMALLINT NULL ,PLDESC NVARCHAR(2000) NULL ,PLRD NVARCHAR(36) NULL ,PLRP NVARCHAR(36) NULL ,PM NVARCHAR(36) NULL ,PLINPUT NVARCHAR(255) NULL ,PLOUTPUT NVARCHAR(255) NULL ,PLEXECTYPE SMALLINT NULL ,PLSYSTEMNAME NVARCHAR(36) NULL ,PLAWSPID CHAR(36) NULL ,PLDIAGRAMURL NVARCHAR(255) NULL ,PLCOLOR NVARCHAR(36) NULL ,PLCATEGORY NVARCHAR(36) NULL ,PLMETHODID NVARCHAR(36) NULL ,PLVER SMALLINT NULL ,PLVERSIONID CHAR(36) NULL ,ISUSE SMALLINT NULL ,ISPUBLISH SMALLINT NULL ,ISSYSTEMFILE SMALLINT NULL ,FILEPATH NVARCHAR(255) NULL ,HISTORYMAXVERSION NUMERIC(6) NULL ,VIEWCOUNT NUMERIC(12) NULL ,CREATEUSER VARCHAR(36) NULL ,MODIFYUSER VARCHAR(36) NULL ,CREATEDATE DATETIME NULL ,MODIFYDATE DATETIME NULL ,PLDUTYDEPT NVARCHAR(36) NULL ,PLDUTYPERSON NVARCHAR(128) NULL ,ISSTOP SMALLINT NULL ,ISAPPROVAL SMALLINT NULL ,EXT1 NVARCHAR(64) NULL ,EXT2 NVARCHAR(128) NULL ,EXT3 NVARCHAR(255) NULL ,EXT4 NVARCHAR(255) NULL ,CONSTRAINT AWS_PAL_REPOSITORY_R_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R_INFO(ID CHAR(36) NOT NULL ,REMOVEUSER NVARCHAR(36) NULL ,REMOVETIME DATETIME NULL ,WSID NVARCHAR(36) NULL ,RESOURCEID NVARCHAR(36) NULL ,REMOVETYPE SMALLINT NULL ,CONSTRAINT AWS_PAL_REPOSITORY_R_INFO_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_BACKUP(ID CHAR(36) NOT NULL ,WSID CHAR(36) NULL ,BACKUPTIME DATETIME NULL ,USERID NVARCHAR(36) NULL ,REMARK NVARCHAR(255) NULL ,STATE SMALLINT NULL ,CONSTRAINT APP_ACT_COE_PAL_BACKUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PROP(ID CHAR(36) NOT NULL ,PLID CHAR(36) NULL ,PROPERTYID NVARCHAR(100) NULL ,PROPERTYNAME NVARCHAR(100) NULL ,PROPERTYVALUE NVARCHAR(2000) NULL ,ORDERINDEX SMALLINT NULL ,CONSTRAINT APP_ACT_COE_PAL_PROPERTY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_CONFIG(ID CHAR(36) NOT NULL ,WSID CHAR(36) NULL ,METHODID NVARCHAR(36) NULL ,SHAPEID NVARCHAR(100) NULL ,ATTRIBUTE NVARCHAR(255) NULL ,ORDERINDEX SMALLINT NULL ,CONSTRAINT APP_ACT_COE_PAL_SHAPE_CONFIG_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36) NULL ,ATTRID NVARCHAR(100) NULL ,ATTRNAME NVARCHAR(100) NULL ,ATTRVALUE NVARCHAR(2000) NULL ,CATEGORY NVARCHAR(36) NULL ,METHODID NVARCHAR(36) NULL ,TYPE NVARCHAR(36) NULL ,ISDELETE NVARCHAR(10) NULL ,ORDERINDEX SMALLINT NULL ,CONSTRAINT APP_ACT_COE_PAL_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36) NULL ,ATTRID NVARCHAR(100) NULL ,ATTRNAME NVARCHAR(100) NULL ,ATTRVALUE NVARCHAR(2000) NULL ,CATEGORY NVARCHAR(36) NULL ,METHODID NVARCHAR(36) NULL ,TYPE NVARCHAR(36) NULL ,SHAPENAME NVARCHAR(64) NULL ,ORDERINDEX SMALLINT NULL ,CONSTRAINT APP_ACT_COE_PAL_SHAPE_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SPCL_PROP(ID CHAR(36) NOT NULL ,WSID CHAR(36) NULL ,PLID CHAR(36) NULL ,TYPE CHAR(100) NULL ,VALUETEXT NVARCHAR(2000) NULL ,CONSTRAINT APP_ACT_COE_PAL_SPECIAL_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_CORRELATE(PLID CHAR(36) NOT NULL ,WSID CHAR(36) NULL ,PLAWSVERSIONID CHAR(36) NULL ,PLAWSID CHAR(36) NULL ,PLVERSIONID NVARCHAR(36) NULL ,CORRELATETYPE SMALLINT NULL ,ISCORRELATE SMALLINT NULL ,EXT1 NVARCHAR(64) NULL ,EXT2 NVARCHAR(128) NULL ,EXT3 NVARCHAR(255) NULL ,EXT4 NVARCHAR(255) NULL ,CONSTRAINT APP_ACT_COE_PAL_CORRELATE_PK PRIMARY KEY (PLID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_COM(ID CHAR(36) NOT NULL ,WSID CHAR(36) NULL ,PLVERSIONID CHAR(36) NULL ,SORT NUMERIC(16) NULL ,CONSTRAINT APP_ACT_COE_PAL_COMMON_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM_EXT(ID CHAR(36) NOT NULL ,BINDID CHAR(36) NULL ,RESOURCEID CHAR(36) NULL ,CONSTRAINT APP_ACT_COE_PAL_EXTEND_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_FREQ(ID CHAR(36) NOT NULL ,WSID CHAR(36) NULL ,PLVERSIONID CHAR(36) NULL ,COUNT NUMERIC(16) NULL ,CONSTRAINT APP_ACT_COE_PAL_FREQUENCY_PK PRIMARY KEY (ID)) ; + +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_IND1 ON APP_ACT_COE_PAL_PUBLISH (PUBLISHDATE); +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_L_I ON APP_ACT_COE_PAL_PUBLISH_LIST (PID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_UK UNIQUE (WSID,GROUPCODE); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_PERM ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_P_UK UNIQUE (GROUPID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_ROLE ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_R_UK UNIQUE (GROUPID,ROLEID); +ALTER TABLE APP_ACT_COE_TEAM_PERM ADD CONSTRAINT APP_ACT_COE_TEAM_PERM_UK UNIQUE (TEAMID,WSID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_TEAMMBR_PERM ADD CONSTRAINT APP_ACT_COE_TEAMMBR_PERM_UK UNIQUE (TEAMID,USERID); +CREATE INDEX APP_ACT_COE_PAL_COMMENT_IND1 ON APP_ACT_COE_PAL_COMMENT (TARGETID,COMMENTDATE); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('e0583f9a-2f6e-49fe-b4e8-4b9a5f3c257a','AWS BPM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('0df9d8b1-b082-4e3f-aadb-45fd76b82aeb','SAP ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('cfbcec4a-b0ed-4e43-9866-bcda72d69eab','Oracle ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('2a5faee5-0c12-4e29-b32e-aab42552ff6d','Oracle Siebel CRM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('16f37ce8-dc62-4ffb-b6ca-fc248b51ff73','Oracle JDE ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('275e402a-a2c6-4d57-83a1-3f0da50539e4','Oracle PeopleSoft',0); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('CoE_Test','false'); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('InitStep','6'); + +INSERT INTO APP_ACT_COE_USER(ID,USERID,ISADMIN) VALUES('9e23d27b-26a2-4ec5-839b-d9fe4c1eb9e3','admin',1); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.3/tdsql.sql b/com.actionsoft.apps.coe.pal/db/6.3/tdsql.sql new file mode 100644 index 00000000..7bbebc87 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.3/tdsql.sql @@ -0,0 +1,86 @@ +CREATE TABLE APP_ACT_COE_PAL_UPFILE(ID CHAR(36) NOT NULL ,PALREPOSITORYID CHAR(36),SHAPEID VARCHAR(64),FILETYPE CHAR(1),FILENAME VARCHAR(128),DOWNLOAD SMALLINT(1),CREATEUSER VARCHAR(36),CREATETIME DATETIME ,CONSTRAINT APP_ACT_COE_PAL_UPFILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_FILE(ID VARCHAR(64) NOT NULL ,PALREPOSITORYID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_FILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SYSTEMNAME(ID CHAR(36) NOT NULL ,SYSTEMNAME VARCHAR(36),ISDEFAULT SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_SYSTEMNAME_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAM_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PERMTYPE SMALLINT(2),RESOURCEID VARCHAR(128),CONSTRAINT APP_ACT_COE_TEAM_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),USERID VARCHAR(36),ACTIONTYPE VARCHAR(64),EXTENDAPPS VARCHAR(225),CONSTRAINT APP_ACT_COE_TEAMMEMBER_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP(ID CHAR(36) NOT NULL ,WSID CHAR(36),GROUPCODE VARCHAR(36),CATEGORY VARCHAR(64),GROUPNAME VARCHAR(128),GROUPDESC VARCHAR(255),CREATEUSER VARCHAR(36),CREATEDATE DATETIME ,CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_PERM(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),PERMTYPE SMALLINT(2),RESOURCEID VARCHAR(128),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_ROLE(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),ROLEID VARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_ROLE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_COMMENT(ID CHAR(36) NOT NULL ,PID CHAR(36),STREAMID CHAR(36),WSID CHAR(36),TARGETTYPE SMALLINT(1),TARGETID CHAR(36),TEAMID CHAR(36),USERID VARCHAR(36),USERCOMMENT TEXT ,COMMENTDATE DATETIME ,INFOTYPE SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_COMMENT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH(ID CHAR(36) NOT NULL ,PROCESSINSTID VARCHAR(36),WSID CHAR(36),USERID VARCHAR(36),AUDITORID VARCHAR(36),PUBLISHDATE DATETIME ,PUBLISHDESC TEXT ,PUBLISHN NUMERIC(6),PUBLISHC NUMERIC(6),PUBLISHS NUMERIC(6),TEAMID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_LIST(ID CHAR(36) NOT NULL ,PID CHAR(36),PALREPOSITORYID CHAR(36),ACTIONTYPE CHAR(1),PUBLISHDESC VARCHAR(255),TASKID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_LIST_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_OUTPUT_TASK(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PROFILEID VARCHAR(36),TASKNAME VARCHAR(64),USERID VARCHAR(36),CREATETIME DATETIME ,BEGINTIME DATETIME ,ENDTIME DATETIME ,TASKSTATE SMALLINT(1),THREADID VARCHAR(128),LANG VARCHAR(32),ISDISPLAY VARCHAR(2),CONSTRAINT APP_ACT_COE_PAL_OUTPUT_TASK_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PROP(PROPERTYKEY VARCHAR(128) NOT NULL ,PROPERTYVALUE TEXT ,CONSTRAINT APP_ACT_COE_PROPERTY_PK PRIMARY KEY (PROPERTYKEY)) ; + +CREATE TABLE APP_ACT_COE_USER(ID CHAR(36) NOT NULL ,USERID VARCHAR(36),ISADMIN SMALLINT(1),CONSTRAINT APP_ACT_COE_USER_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_WORKSPACE(ID CHAR(36) NOT NULL ,WSNAME VARCHAR(255),WSDM VARCHAR(255),WSADMIN VARCHAR(255),WSDESC VARCHAR(255),WSSTATE SMALLINT(1),WSORGTYPE SMALLINT(1),WSTCTYPE SMALLINT(1),WSBGURL VARCHAR(255),WSORDERINDEX SMALLINT(3),WSVER SMALLINT(3),WSVERSIONUUID CHAR(36),ISUSE SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_WORKSPACE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPOSITORY(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL SMALLINT(2),PLPARENTID VARCHAR(36),PLORDERINDEX SMALLINT(3),PLISBOTTOMLEVEL SMALLINT(1),PLDESC TEXT ,PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT VARCHAR(255),PLOUTPUT VARCHAR(255),PLEXECTYPE SMALLINT(1),PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL VARCHAR(255),PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER SMALLINT(3),PLVERSIONID CHAR(36),ISUSE SMALLINT(1),ISPUBLISH SMALLINT(1),ISSYSTEMFILE SMALLINT(1),FILEPATH VARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME ,MODIFYDATE DATETIME ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),LOCKUSER VARCHAR(225),PUBLISHDATE DATETIME ,CHANGEDATE DATETIME ,STOPDATE DATETIME ,CONSTRAINT APP_ACT_COE_PAL_REPOSITORY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_COPY(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_COPY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_PASTE(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_PASTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_RLAT(ID CHAR(36) NOT NULL ,FILEID VARCHAR(64),SHAPEID VARCHAR(64),SHAPETEXT VARCHAR(128),ATTRID VARCHAR(64),RELATIONFILEID VARCHAR(64),RELATIONSHAPEID VARCHAR(64),RELATIONSHAPETEXT VARCHAR(128),CONSTRAINT APP_ACT_COE_PAL_SHAPE_RT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R(ID CHAR(36) NOT NULL ,REMOVEID CHAR(36),WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL SMALLINT(2),PLPARENTID VARCHAR(36),PLORDERINDEX SMALLINT(3),PLISBOTTOMLEVEL SMALLINT(1),PLDESC TEXT ,PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT VARCHAR(255),PLOUTPUT VARCHAR(255),PLEXECTYPE SMALLINT(1),PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL VARCHAR(255),PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER SMALLINT(3),PLVERSIONID CHAR(36),ISUSE SMALLINT(1),ISPUBLISH SMALLINT(1),ISSYSTEMFILE SMALLINT(1),FILEPATH VARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME ,MODIFYDATE DATETIME ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),CONSTRAINT AWS_PAL_REPOSITORY_R_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R_INFO(ID CHAR(36) NOT NULL ,REMOVEUSER VARCHAR(36),REMOVETIME DATETIME ,WSID VARCHAR(36),RESOURCEID VARCHAR(36),REMOVETYPE SMALLINT(1),CONSTRAINT AWS_PAL_REPOSITORY_R_INFO_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_BACKUP(ID CHAR(36) NOT NULL ,WSID CHAR(36),BACKUPTIME DATETIME ,USERID VARCHAR(36),REMARK VARCHAR(255),STATE SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_BACKUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PROP(ID CHAR(36) NOT NULL ,PLID CHAR(36),PROPERTYID VARCHAR(100),PROPERTYNAME VARCHAR(100),PROPERTYVALUE TEXT ,ORDERINDEX SMALLINT(3),CONSTRAINT APP_ACT_COE_PAL_PROPERTY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE TEXT ,CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),ISDELETE VARCHAR(10),CONSTRAINT APP_ACT_COE_PAL_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE TEXT ,CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),SHAPENAME VARCHAR(64),CONSTRAINT APP_ACT_COE_PAL_SHAPE_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SPCL_PROP(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLID CHAR(36),TYPE CHAR(100),VALUETEXT TEXT ,CONSTRAINT APP_ACT_COE_PAL_SPECIAL_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_CORRELATE(PLID CHAR(36) NOT NULL ,WSID CHAR(36),PLAWSVERSIONID CHAR(36),PLAWSID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_CORRELATE_PK PRIMARY KEY (PLID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_COM(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),SORT NUMERIC(16),CONSTRAINT APP_ACT_COE_PAL_COMMON_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM_EXT(ID CHAR(36) NOT NULL ,BINDID CHAR(36),RESOURCEID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_EXTEND_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_FREQ(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),COUNT NUMERIC(16),CONSTRAINT APP_ACT_COE_PAL_FREQUENCY_PK PRIMARY KEY (ID)) ; + +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_IND1 ON APP_ACT_COE_PAL_PUBLISH (PUBLISHDATE); +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_L_I ON APP_ACT_COE_PAL_PUBLISH_LIST (PID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_UK UNIQUE (WSID,GROUPCODE); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_PERM ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_P_UK UNIQUE (GROUPID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_ROLE ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_R_UK UNIQUE (GROUPID,ROLEID); +ALTER TABLE APP_ACT_COE_TEAM_PERM ADD CONSTRAINT APP_ACT_COE_TEAM_PERM_UK UNIQUE (TEAMID,WSID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_TEAMMBR_PERM ADD CONSTRAINT APP_ACT_COE_TEAMMBR_PERM_UK UNIQUE (TEAMID,USERID); +CREATE INDEX APP_ACT_COE_PAL_COMMENT_IND1 ON APP_ACT_COE_PAL_COMMENT (TARGETID,COMMENTDATE); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('e0583f9a-2f6e-49fe-b4e8-4b9a5f3c257a','AWS BPM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('0df9d8b1-b082-4e3f-aadb-45fd76b82aeb','SAP ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('cfbcec4a-b0ed-4e43-9866-bcda72d69eab','Oracle ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('2a5faee5-0c12-4e29-b32e-aab42552ff6d','Oracle Siebel CRM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('16f37ce8-dc62-4ffb-b6ca-fc248b51ff73','Oracle JDE ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('275e402a-a2c6-4d57-83a1-3f0da50539e4','Oracle PeopleSoft',0); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('CoE_Test','false'); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('InitStep','6'); + +INSERT INTO APP_ACT_COE_USER(ID,USERID,ISADMIN) VALUES('9e23d27b-26a2-4ec5-839b-d9fe4c1eb9e3','admin',1); diff --git a/com.actionsoft.apps.coe.pal/db/6.3/tdsql_shard_id.sql b/com.actionsoft.apps.coe.pal/db/6.3/tdsql_shard_id.sql new file mode 100644 index 00000000..aa1490d9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.3/tdsql_shard_id.sql @@ -0,0 +1,86 @@ +CREATE TABLE APP_ACT_COE_PAL_UPFILE(ID CHAR(36) NOT NULL ,PALREPOSITORYID CHAR(36),SHAPEID VARCHAR(64),FILETYPE CHAR(1),FILENAME VARCHAR(128),DOWNLOAD SMALLINT(1),CREATEUSER VARCHAR(36),CREATETIME DATETIME ,CONSTRAINT APP_ACT_COE_PAL_UPFILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_FILE(ID VARCHAR(64) NOT NULL ,PALREPOSITORYID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_FILE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SYSTEMNAME(ID CHAR(36) NOT NULL ,SYSTEMNAME VARCHAR(36),ISDEFAULT SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_SYSTEMNAME_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAM_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PERMTYPE SMALLINT(2),RESOURCEID VARCHAR(128),CONSTRAINT APP_ACT_COE_TEAM_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),USERID VARCHAR(36),ACTIONTYPE VARCHAR(64),EXTENDAPPS VARCHAR(225),CONSTRAINT APP_ACT_COE_TEAMMEMBER_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP(ID CHAR(36) NOT NULL ,WSID CHAR(36),GROUPCODE VARCHAR(36),CATEGORY VARCHAR(64),GROUPNAME VARCHAR(128),GROUPDESC VARCHAR(255),CREATEUSER VARCHAR(36),CREATEDATE DATETIME ,CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_PERM(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),PERMTYPE SMALLINT(2),RESOURCEID VARCHAR(128),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_PERM_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_USERGRP_ROLE(ID CHAR(36) NOT NULL ,GROUPID CHAR(36),ROLEID VARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_USERGROUP_ROLE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_COMMENT(ID CHAR(36) NOT NULL ,PID CHAR(36),STREAMID CHAR(36),WSID CHAR(36),TARGETTYPE SMALLINT(1),TARGETID CHAR(36),TEAMID CHAR(36),USERID VARCHAR(36),USERCOMMENT TEXT ,COMMENTDATE DATETIME ,INFOTYPE SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_COMMENT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH(ID CHAR(36) NOT NULL ,PROCESSINSTID VARCHAR(36),WSID CHAR(36),USERID VARCHAR(36),AUDITORID VARCHAR(36),PUBLISHDATE DATETIME ,PUBLISHDESC TEXT ,PUBLISHN NUMERIC(6),PUBLISHC NUMERIC(6),PUBLISHS NUMERIC(6),TEAMID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_LIST(ID CHAR(36) NOT NULL ,PID CHAR(36),PALREPOSITORYID CHAR(36),ACTIONTYPE CHAR(1),PUBLISHDESC VARCHAR(255),TASKID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_PUBLISH_LIST_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_OUTPUT_TASK(ID CHAR(36) NOT NULL ,TEAMID CHAR(36),WSID CHAR(36),PROFILEID VARCHAR(36),TASKNAME VARCHAR(64),USERID VARCHAR(36),CREATETIME DATETIME ,BEGINTIME DATETIME ,ENDTIME DATETIME ,TASKSTATE SMALLINT(1),THREADID VARCHAR(128),LANG VARCHAR(32),ISDISPLAY VARCHAR(2),CONSTRAINT APP_ACT_COE_PAL_OUTPUT_TASK_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PROP(PROPERTYKEY VARCHAR(128) NOT NULL ,PROPERTYVALUE TEXT ,CONSTRAINT APP_ACT_COE_PROPERTY_PK PRIMARY KEY (PROPERTYKEY)) ; + +CREATE TABLE APP_ACT_COE_USER(ID CHAR(36) NOT NULL ,USERID VARCHAR(36),ISADMIN SMALLINT(1),CONSTRAINT APP_ACT_COE_USER_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_WORKSPACE(ID CHAR(36) NOT NULL ,WSNAME VARCHAR(255),WSDM VARCHAR(255),WSADMIN VARCHAR(255),WSDESC VARCHAR(255),WSSTATE SMALLINT(1),WSORGTYPE SMALLINT(1),WSTCTYPE SMALLINT(1),WSBGURL VARCHAR(255),WSORDERINDEX SMALLINT(3),WSVER SMALLINT(3),WSVERSIONUUID CHAR(36),ISUSE SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_WORKSPACE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPOSITORY(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL SMALLINT(2),PLPARENTID VARCHAR(36),PLORDERINDEX SMALLINT(3),PLISBOTTOMLEVEL SMALLINT(1),PLDESC TEXT ,PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT VARCHAR(255),PLOUTPUT VARCHAR(255),PLEXECTYPE SMALLINT(1),PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL VARCHAR(255),PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER SMALLINT(3),PLVERSIONID CHAR(36),ISUSE SMALLINT(1),ISPUBLISH SMALLINT(1),ISSYSTEMFILE SMALLINT(1),FILEPATH VARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME ,MODIFYDATE DATETIME ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),LOCKUSER VARCHAR(225),PUBLISHDATE DATETIME ,CHANGEDATE DATETIME ,STOPDATE DATETIME ,CONSTRAINT APP_ACT_COE_PAL_REPOSITORY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_COPY(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_COPY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_PASTE(ID VARCHAR(64) NOT NULL ,SHAPEGROUPTID VARCHAR(64),SHAPENAME VARCHAR(128),SHAPECATEGORYNAME VARCHAR(64),PALREPOSITORYID CHAR(36),ISDELETE CHAR(1),SHAPETYPE VARCHAR(36),CONSTRAINT APP_ACT_COE_PAL_SHAPE_PASTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_RLAT(ID CHAR(36) NOT NULL ,FILEID VARCHAR(64),SHAPEID VARCHAR(64),SHAPETEXT VARCHAR(128),ATTRID VARCHAR(64),RELATIONFILEID VARCHAR(64),RELATIONSHAPEID VARCHAR(64),RELATIONSHAPETEXT VARCHAR(128),CONSTRAINT APP_ACT_COE_PAL_SHAPE_RT_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R(ID CHAR(36) NOT NULL ,REMOVEID CHAR(36),WSID CHAR(36),PLRID CHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL SMALLINT(2),PLPARENTID VARCHAR(36),PLORDERINDEX SMALLINT(3),PLISBOTTOMLEVEL SMALLINT(1),PLDESC TEXT ,PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT VARCHAR(255),PLOUTPUT VARCHAR(255),PLEXECTYPE SMALLINT(1),PLSYSTEMNAME VARCHAR(36),PLAWSPID CHAR(36),PLDIAGRAMURL VARCHAR(255),PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER SMALLINT(3),PLVERSIONID CHAR(36),ISUSE SMALLINT(1),ISPUBLISH SMALLINT(1),ISSYSTEMFILE SMALLINT(1),FILEPATH VARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME ,MODIFYDATE DATETIME ,PLDUTYDEPT VARCHAR(36),PLDUTYPERSON VARCHAR(128),CONSTRAINT AWS_PAL_REPOSITORY_R_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_REPO_R_INFO(ID CHAR(36) NOT NULL ,REMOVEUSER VARCHAR(36),REMOVETIME DATETIME ,WSID VARCHAR(36),RESOURCEID VARCHAR(36),REMOVETYPE SMALLINT(1),CONSTRAINT AWS_PAL_REPOSITORY_R_INFO_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_BACKUP(ID CHAR(36) NOT NULL ,WSID CHAR(36),BACKUPTIME DATETIME ,USERID VARCHAR(36),REMARK VARCHAR(255),STATE SMALLINT(1),CONSTRAINT APP_ACT_COE_PAL_BACKUP_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PROP(ID CHAR(36) NOT NULL ,PLID CHAR(36),PROPERTYID VARCHAR(100),PROPERTYNAME VARCHAR(100),PROPERTYVALUE TEXT ,ORDERINDEX SMALLINT(3),CONSTRAINT APP_ACT_COE_PAL_PROPERTY_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE TEXT ,CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),ISDELETE VARCHAR(10),CONSTRAINT APP_ACT_COE_PAL_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SHAPE_ATTR(ID CHAR(36) NOT NULL ,WSID CHAR(36),ATTRID VARCHAR(100),ATTRNAME VARCHAR(100),ATTRVALUE TEXT ,CATEGORY VARCHAR(36),METHODID VARCHAR(36),TYPE VARCHAR(36),SHAPENAME VARCHAR(64),CONSTRAINT APP_ACT_COE_PAL_SHAPE_ATTRIBUTE_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_SPCL_PROP(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLID CHAR(36),TYPE CHAR(100),VALUETEXT TEXT ,CONSTRAINT APP_ACT_COE_PAL_SPECIAL_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_CORRELATE(PLID CHAR(36) NOT NULL ,WSID CHAR(36),PLAWSVERSIONID CHAR(36),PLAWSID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_CORRELATE_PK PRIMARY KEY (PLID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_COM(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),SORT NUMERIC(16),CONSTRAINT APP_ACT_COE_PAL_COMMON_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_TEAMMBR_PERM_EXT(ID CHAR(36) NOT NULL ,BINDID CHAR(36),RESOURCEID CHAR(36),CONSTRAINT APP_ACT_COE_PAL_EXTEND_PK PRIMARY KEY (ID)) ; + +CREATE TABLE APP_ACT_COE_PAL_PUBLISH_FREQ(ID CHAR(36) NOT NULL ,WSID CHAR(36),PLVERSIONID CHAR(36),COUNT NUMERIC(16),CONSTRAINT APP_ACT_COE_PAL_FREQUENCY_PK PRIMARY KEY (ID)) ; + +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_IND1 ON APP_ACT_COE_PAL_PUBLISH (PUBLISHDATE); +CREATE INDEX APP_ACT_COE_PAL_PUBLISH_L_I ON APP_ACT_COE_PAL_PUBLISH_LIST (PID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_UK UNIQUE (WSID,GROUPCODE); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_PERM ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_P_UK UNIQUE (GROUPID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_PAL_USERGRP_ROLE ADD CONSTRAINT APP_ACT_COE_PAL_USERGRP_R_UK UNIQUE (GROUPID,ROLEID); +ALTER TABLE APP_ACT_COE_TEAM_PERM ADD CONSTRAINT APP_ACT_COE_TEAM_PERM_UK UNIQUE (TEAMID,WSID,PERMTYPE,RESOURCEID); +ALTER TABLE APP_ACT_COE_TEAMMBR_PERM ADD CONSTRAINT APP_ACT_COE_TEAMMBR_PERM_UK UNIQUE (TEAMID,USERID); +CREATE INDEX APP_ACT_COE_PAL_COMMENT_IND1 ON APP_ACT_COE_PAL_COMMENT (TARGETID,COMMENTDATE); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('e0583f9a-2f6e-49fe-b4e8-4b9a5f3c257a','AWS BPM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('0df9d8b1-b082-4e3f-aadb-45fd76b82aeb','SAP ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('cfbcec4a-b0ed-4e43-9866-bcda72d69eab','Oracle ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('2a5faee5-0c12-4e29-b32e-aab42552ff6d','Oracle Siebel CRM',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('16f37ce8-dc62-4ffb-b6ca-fc248b51ff73','Oracle JDE ERP',0); + +INSERT INTO APP_ACT_COE_PAL_SYSTEMNAME(ID,SYSTEMNAME,ISDEFAULT) VALUES('275e402a-a2c6-4d57-83a1-3f0da50539e4','Oracle PeopleSoft',0); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('CoE_Test','false'); + +INSERT INTO APP_ACT_COE_PROP(PROPERTYKEY,PROPERTYVALUE) VALUES('InitStep','6'); + +INSERT INTO APP_ACT_COE_USER(ID,USERID,ISADMIN) VALUES('9e23d27b-26a2-4ec5-839b-d9fe4c1eb9e3','admin',1); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.4/db2.sql b/com.actionsoft.apps.coe.pal/db/6.4/db2.sql new file mode 100644 index 00000000..9336e03e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.4/db2.sql @@ -0,0 +1,5 @@ +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM(ID CHAR(36) NOT NULL,WSID VARCHAR(36), CATEGORY VARCHAR(64), TEAMNAME VARCHAR(36), TEAMLOGO VARCHAR(255), TEAMDESC VARCHAR(255), TEAMSTATUS SMALLINT, CREATEUSER VARCHAR(36), CREATETIME TIMESTAMP, UPDATEUSER VARCHAR(36), UPDATETIME TIMESTAMP, CONSTRAINT APP_ACT_COOP_TEAM_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL,PALVERSIONIDN VARCHAR(36), CONSTRAINT APP_ACT_COOP_T_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLENAMEN VARCHAR(36), ROLEDESCN VARCHAR(255), ROLETYPE SMALLINT, APPPERMN VARCHAR(500), ACTIONPERMN VARCHAR(36), DATAPERMN VARCHAR(36), CREATEUSERN VARCHAR(36), CREATETIME TIMESTAMP, UPDATEUSERN VARCHAR(36), UPDATETIME TIMESTAMP, CONSTRAINT APP_ACT_COOP_ROLE_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL,PALVERSIONIDN VARCHAR(36), CONSTRAINT APP_ACT_COOP_R_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_MEMBER(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, USERID VARCHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL, CREATEUSERN VARCHAR(36), CREATETIME TIMESTAMP, UPDATEUSERN VARCHAR(36), UPDATETIME TIMESTAMP, CONSTRAINT APP_ACT_COOP_M_PK PRIMARY KEY (ID)); diff --git a/com.actionsoft.apps.coe.pal/db/6.4/dm.sql b/com.actionsoft.apps.coe.pal/db/6.4/dm.sql new file mode 100644 index 00000000..6b17d26e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.4/dm.sql @@ -0,0 +1,5 @@ +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM(ID CHAR(36) NOT NULL,WSID NVARCHAR2(36), CATEGORY NVARCHAR2(64), TEAMNAME NVARCHAR2(36), TEAMLOGO NVARCHAR2(255), TEAMDESC NVARCHAR2(255), TEAMSTATUS NUMBER(1), CREATEUSER NVARCHAR2(36), CREATETIME DATE, UPDATEUSER NVARCHAR2(36), UPDATETIME DATE, CONSTRAINT APP_ACT_COOP_TEAM_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL,PALVERSIONID NVARCHAR2(36), CONSTRAINT APP_ACT_COOP_T_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLENAME NVARCHAR2(36), ROLEDESC NVARCHAR2(255), ROLETYPE NUMBER(1), APPPERM NVARCHAR2(500), ACTIONPERM NVARCHAR2(36), DATAPERM NVARCHAR2(36), CREATEUSER NVARCHAR2(36), CREATETIME DATE, UPDATEUSER NVARCHAR2(36), UPDATETIME DATE, CONSTRAINT APP_ACT_COOP_ROLE_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL,PALVERSIONID NVARCHAR2(36), CONSTRAINT APP_ACT_COOP_R_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_MEMBER(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, USERID NVARCHAR2(36) NOT NULL, ROLEID CHAR(36) NOT NULL, CREATEUSER NVARCHAR2(36), CREATETIME DATE, UPDATEUSER NVARCHAR2(36), UPDATETIME DATE, CONSTRAINT APP_ACT_COOP_M_PK PRIMARY KEY (ID)); diff --git a/com.actionsoft.apps.coe.pal/db/6.4/informix.sql b/com.actionsoft.apps.coe.pal/db/6.4/informix.sql new file mode 100644 index 00000000..6b17d26e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.4/informix.sql @@ -0,0 +1,5 @@ +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM(ID CHAR(36) NOT NULL,WSID NVARCHAR2(36), CATEGORY NVARCHAR2(64), TEAMNAME NVARCHAR2(36), TEAMLOGO NVARCHAR2(255), TEAMDESC NVARCHAR2(255), TEAMSTATUS NUMBER(1), CREATEUSER NVARCHAR2(36), CREATETIME DATE, UPDATEUSER NVARCHAR2(36), UPDATETIME DATE, CONSTRAINT APP_ACT_COOP_TEAM_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL,PALVERSIONID NVARCHAR2(36), CONSTRAINT APP_ACT_COOP_T_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLENAME NVARCHAR2(36), ROLEDESC NVARCHAR2(255), ROLETYPE NUMBER(1), APPPERM NVARCHAR2(500), ACTIONPERM NVARCHAR2(36), DATAPERM NVARCHAR2(36), CREATEUSER NVARCHAR2(36), CREATETIME DATE, UPDATEUSER NVARCHAR2(36), UPDATETIME DATE, CONSTRAINT APP_ACT_COOP_ROLE_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL,PALVERSIONID NVARCHAR2(36), CONSTRAINT APP_ACT_COOP_R_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_MEMBER(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, USERID NVARCHAR2(36) NOT NULL, ROLEID CHAR(36) NOT NULL, CREATEUSER NVARCHAR2(36), CREATETIME DATE, UPDATEUSER NVARCHAR2(36), UPDATETIME DATE, CONSTRAINT APP_ACT_COOP_M_PK PRIMARY KEY (ID)); diff --git a/com.actionsoft.apps.coe.pal/db/6.4/mysql.sql b/com.actionsoft.apps.coe.pal/db/6.4/mysql.sql new file mode 100644 index 00000000..08a2b6c2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.4/mysql.sql @@ -0,0 +1,5 @@ +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM(ID CHAR(36) NOT NULL,WSID VARCHAR(36), CATEGORY VARCHAR(64), TEAMNAME VARCHAR(36), TEAMLOGO VARCHAR(255), TEAMDESC VARCHAR(255), TEAMSTATUS SMALLINT(1), CREATEUSER VARCHAR(36), CREATETIME DATETIME, UPDATEUSER VARCHAR(36), UPDATETIME DATETIME, CONSTRAINT APP_ACT_COOP_TEAM_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL,PALVERSIONID VARCHAR(36), CONSTRAINT APP_ACT_COOP_T_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLENAME VARCHAR(36), ROLEDESC VARCHAR(255), ROLETYPE SMALLINT(1), APPPERM VARCHAR(500), ACTIONPERM VARCHAR(36), DATAPERM VARCHAR(36), CREATEUSER VARCHAR(36), CREATETIME DATETIME, UPDATEUSER VARCHAR(36), UPDATETIME DATETIME, CONSTRAINT APP_ACT_COOP_ROLE_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL,PALVERSIONID VARCHAR(36), CONSTRAINT APP_ACT_COOP_R_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_MEMBER(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, USERID VARCHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL, CREATEUSER VARCHAR(36), CREATETIME DATETIME, UPDATEUSER VARCHAR(36), UPDATETIME DATETIME, CONSTRAINT APP_ACT_COOP_M_PK PRIMARY KEY (ID)); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.4/oracle.sql b/com.actionsoft.apps.coe.pal/db/6.4/oracle.sql new file mode 100644 index 00000000..6b17d26e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.4/oracle.sql @@ -0,0 +1,5 @@ +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM(ID CHAR(36) NOT NULL,WSID NVARCHAR2(36), CATEGORY NVARCHAR2(64), TEAMNAME NVARCHAR2(36), TEAMLOGO NVARCHAR2(255), TEAMDESC NVARCHAR2(255), TEAMSTATUS NUMBER(1), CREATEUSER NVARCHAR2(36), CREATETIME DATE, UPDATEUSER NVARCHAR2(36), UPDATETIME DATE, CONSTRAINT APP_ACT_COOP_TEAM_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL,PALVERSIONID NVARCHAR2(36), CONSTRAINT APP_ACT_COOP_T_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLENAME NVARCHAR2(36), ROLEDESC NVARCHAR2(255), ROLETYPE NUMBER(1), APPPERM NVARCHAR2(500), ACTIONPERM NVARCHAR2(36), DATAPERM NVARCHAR2(36), CREATEUSER NVARCHAR2(36), CREATETIME DATE, UPDATEUSER NVARCHAR2(36), UPDATETIME DATE, CONSTRAINT APP_ACT_COOP_ROLE_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL,PALVERSIONID NVARCHAR2(36), CONSTRAINT APP_ACT_COOP_R_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_MEMBER(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, USERID NVARCHAR2(36) NOT NULL, ROLEID CHAR(36) NOT NULL, CREATEUSER NVARCHAR2(36), CREATETIME DATE, UPDATEUSER NVARCHAR2(36), UPDATETIME DATE, CONSTRAINT APP_ACT_COOP_M_PK PRIMARY KEY (ID)); diff --git a/com.actionsoft.apps.coe.pal/db/6.4/oscar.sql b/com.actionsoft.apps.coe.pal/db/6.4/oscar.sql new file mode 100644 index 00000000..6b17d26e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.4/oscar.sql @@ -0,0 +1,5 @@ +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM(ID CHAR(36) NOT NULL,WSID NVARCHAR2(36), CATEGORY NVARCHAR2(64), TEAMNAME NVARCHAR2(36), TEAMLOGO NVARCHAR2(255), TEAMDESC NVARCHAR2(255), TEAMSTATUS NUMBER(1), CREATEUSER NVARCHAR2(36), CREATETIME DATE, UPDATEUSER NVARCHAR2(36), UPDATETIME DATE, CONSTRAINT APP_ACT_COOP_TEAM_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL,PALVERSIONID NVARCHAR2(36), CONSTRAINT APP_ACT_COOP_T_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLENAME NVARCHAR2(36), ROLEDESC NVARCHAR2(255), ROLETYPE NUMBER(1), APPPERM NVARCHAR2(500), ACTIONPERM NVARCHAR2(36), DATAPERM NVARCHAR2(36), CREATEUSER NVARCHAR2(36), CREATETIME DATE, UPDATEUSER NVARCHAR2(36), UPDATETIME DATE, CONSTRAINT APP_ACT_COOP_ROLE_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL,PALVERSIONID NVARCHAR2(36), CONSTRAINT APP_ACT_COOP_R_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_MEMBER(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, USERID NVARCHAR2(36) NOT NULL, ROLEID CHAR(36) NOT NULL, CREATEUSER NVARCHAR2(36), CREATETIME DATE, UPDATEUSER NVARCHAR2(36), UPDATETIME DATE, CONSTRAINT APP_ACT_COOP_M_PK PRIMARY KEY (ID)); diff --git a/com.actionsoft.apps.coe.pal/db/6.4/postgresql.sql b/com.actionsoft.apps.coe.pal/db/6.4/postgresql.sql new file mode 100644 index 00000000..21486a30 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.4/postgresql.sql @@ -0,0 +1,5 @@ +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM(ID CHAR(36) NOT NULL,WSID VARCHAR(36), CATEGORY VARCHAR(64), TEAMNAME VARCHAR(36), TEAMLOGO VARCHAR(255), TEAMDESC VARCHAR(255), TEAMSTATUS DECIMAL(1), CREATEUSER VARCHAR(36), CREATETIME TIMESTAMP, UPDATEUSER VARCHAR(36), UPTIMESTAMP TIMESTAMP, CONSTRAINT APP_ACT_COOP_TEAM_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL,PALVERSIONID VARCHAR(36), CONSTRAINT APP_ACT_COOP_T_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLENAME VARCHAR(36), ROLEDESC VARCHAR(255), ROLETYPE DECIMAL(1), APPPERM VARCHAR(500), ACTIONPERM VARCHAR(36), DATAPERM VARCHAR(36), CREATEUSER VARCHAR(36), CREATETIME TIMESTAMP, UPDATEUSER VARCHAR(36), UPTIMESTAMP TIMESTAMP, CONSTRAINT APP_ACT_COOP_ROLE_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL,PALVERSIONID VARCHAR(36), CONSTRAINT APP_ACT_COOP_R_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_MEMBER(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, USERID VARCHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL, CREATEUSER VARCHAR(36), CREATETIME TIMESTAMP, UPDATEUSER VARCHAR(36), UPTIMESTAMP TIMESTAMP, CONSTRAINT APP_ACT_COOP_M_PK PRIMARY KEY (ID)); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.4/sqlserver.sql b/com.actionsoft.apps.coe.pal/db/6.4/sqlserver.sql new file mode 100644 index 00000000..bb9514a6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.4/sqlserver.sql @@ -0,0 +1,5 @@ +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM(ID CHAR(36) NOT NULL,WSID NVARCHAR(36), CATEGORY NVARCHAR(64), TEAMNAME NVARCHAR(36), TEAMLOGO NVARCHAR(255), TEAMDESC NVARCHAR(255), TEAMSTATUS SMALLINT, CREATEUSER NVARCHAR(36), CREATETIME DATETIME, UPDATEUSER NVARCHAR(36), UPDATETIME DATETIME, CONSTRAINT APP_ACT_COOP_TEAM_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL,PALVERSIONID NVARCHAR(36), CONSTRAINT APP_ACT_COOP_T_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLENAME NVARCHAR(36), ROLEDESC NVARCHAR(255), ROLETYPE SMALLINT, APPPERM NVARCHAR(500), ACTIONPERM NVARCHAR(36), DATAPERM NVARCHAR(36), CREATEUSER NVARCHAR(36), CREATETIME DATETIME, UPDATEUSER NVARCHAR(36), UPDATETIME DATETIME, CONSTRAINT APP_ACT_COOP_ROLE_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL,PALVERSIONID NVARCHAR(36), CONSTRAINT APP_ACT_COOP_R_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_MEMBER(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, USERID NVARCHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL, CREATEUSER NVARCHAR(36), CREATETIME DATETIME, UPDATEUSER NVARCHAR(36), UPDATETIME DATETIME, CONSTRAINT APP_ACT_COOP_M_PK PRIMARY KEY (ID)); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.4/sybase.sql b/com.actionsoft.apps.coe.pal/db/6.4/sybase.sql new file mode 100644 index 00000000..f976c06d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.4/sybase.sql @@ -0,0 +1,5 @@ +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM(ID CHAR(36) NOT NULL,WSID VARCHAR(36), CATEGORY VARCHAR(64), TEAMNAME VARCHAR(36), TEAMLOGO VARCHAR(255), TEAMDESC VARCHAR(255), TEAMSTATUS SMALLINT, CREATEUSER VARCHAR(36), CREATETIME DATETIME, UPDATEUSER VARCHAR(36), UPDATETIME DATETIME, CONSTRAINT APP_ACT_COOP_TEAM_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_TEAM_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL,PALVERSIONIDN VARCHAR(36), CONSTRAINT APP_ACT_COOP_T_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLENAMEN VARCHAR(36), ROLEDESCN VARCHAR(255), ROLETYPE SMALLINT, APPPERMN VARCHAR(500), ACTIONPERMN VARCHAR(36), DATAPERMN VARCHAR(36), CREATEUSERN VARCHAR(36), CREATETIME DATETIME, UPDATEUSERN VARCHAR(36), UPDATETIME DATETIME, CONSTRAINT APP_ACT_COOP_ROLE_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_ROLE_PERM(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL,PALVERSIONIDN VARCHAR(36), CONSTRAINT APP_ACT_COOP_R_P_PK PRIMARY KEY (ID)); +CREATE TABLE APP_ACT_COE_PAL_COOP_MEMBER(ID CHAR(36) NOT NULL,TEAMID CHAR(36) NOT NULL, USERID VARCHAR(36) NOT NULL, ROLEID CHAR(36) NOT NULL, CREATEUSERN VARCHAR(36), CREATETIME DATETIME, UPDATEUSERN VARCHAR(36), UPDATETIME DATETIME, CONSTRAINT APP_ACT_COOP_M_PK PRIMARY KEY (ID)); diff --git a/com.actionsoft.apps.coe.pal/db/6.5/db2.sql b/com.actionsoft.apps.coe.pal/db/6.5/db2.sql new file mode 100644 index 00000000..f5e01643 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.5/db2.sql @@ -0,0 +1,3 @@ +ALTER TABLE APP_ACT_COE_PAL_UPFILE ADD COLUMN SECURITYLEVEL SMALLINT NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPO_R ADD COLUMN SECURITYLEVEL SMALLINT NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPOSITORY ADD COLUMN SECURITYLEVEL SMALLINT NOT NULL DEFAULT -1; \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.5/dm.sql b/com.actionsoft.apps.coe.pal/db/6.5/dm.sql new file mode 100644 index 00000000..56519ca3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.5/dm.sql @@ -0,0 +1,3 @@ +ALTER TABLE APP_ACT_COE_PAL_UPFILE ADD COLUMN SECURITYLEVEL NUMBER(1) NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPO_R ADD COLUMN SECURITYLEVEL NUMBER(1) NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPOSITORY ADD COLUMN SECURITYLEVEL NUMBER(1) NOT NULL DEFAULT -1; \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.5/informix.sql b/com.actionsoft.apps.coe.pal/db/6.5/informix.sql new file mode 100644 index 00000000..f5e01643 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.5/informix.sql @@ -0,0 +1,3 @@ +ALTER TABLE APP_ACT_COE_PAL_UPFILE ADD COLUMN SECURITYLEVEL SMALLINT NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPO_R ADD COLUMN SECURITYLEVEL SMALLINT NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPOSITORY ADD COLUMN SECURITYLEVEL SMALLINT NOT NULL DEFAULT -1; \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.5/mysql.sql b/com.actionsoft.apps.coe.pal/db/6.5/mysql.sql new file mode 100644 index 00000000..7cb0e9eb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.5/mysql.sql @@ -0,0 +1,3 @@ +ALTER TABLE APP_ACT_COE_PAL_UPFILE ADD COLUMN SECURITYLEVEL SMALLINT(1) NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPO_R ADD COLUMN SECURITYLEVEL SMALLINT(1) NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPOSITORY ADD COLUMN SECURITYLEVEL SMALLINT(1) NOT NULL DEFAULT -1; \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.5/oracle.sql b/com.actionsoft.apps.coe.pal/db/6.5/oracle.sql new file mode 100644 index 00000000..0e305ed4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.5/oracle.sql @@ -0,0 +1,3 @@ +ALTER TABLE APP_ACT_COE_PAL_UPFILE ADD (SECURITYLEVEL NUMBER(1) DEFAULT -1 NOT NULL); +ALTER TABLE APP_ACT_COE_PAL_REPO_R ADD (SECURITYLEVEL NUMBER(1) DEFAULT -1 NOT NULL); +ALTER TABLE APP_ACT_COE_PAL_REPOSITORY ADD (SECURITYLEVEL NUMBER(1) DEFAULT -1 NOT NULL); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.5/oscar.sql b/com.actionsoft.apps.coe.pal/db/6.5/oscar.sql new file mode 100644 index 00000000..e503ec34 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.5/oscar.sql @@ -0,0 +1,3 @@ +ALTER TABLE APP_ACT_COE_PAL_UPFILE ADD COLUMN SECURITYLEVEL DECIMAL(1) NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPO_R ADD COLUMN SECURITYLEVEL DECIMAL(1) NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPOSITORY ADD COLUMN SECURITYLEVEL DECIMAL(1) NOT NULL DEFAULT -1; \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.5/postgresql.sql b/com.actionsoft.apps.coe.pal/db/6.5/postgresql.sql new file mode 100644 index 00000000..e503ec34 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.5/postgresql.sql @@ -0,0 +1,3 @@ +ALTER TABLE APP_ACT_COE_PAL_UPFILE ADD COLUMN SECURITYLEVEL DECIMAL(1) NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPO_R ADD COLUMN SECURITYLEVEL DECIMAL(1) NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPOSITORY ADD COLUMN SECURITYLEVEL DECIMAL(1) NOT NULL DEFAULT -1; \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.5/sqlserver.sql b/com.actionsoft.apps.coe.pal/db/6.5/sqlserver.sql new file mode 100644 index 00000000..f1c17eea --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.5/sqlserver.sql @@ -0,0 +1,3 @@ +ALTER TABLE APP_ACT_COE_PAL_UPFILE ADD SECURITYLEVEL SMALLINT NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPO_R ADD SECURITYLEVEL SMALLINT NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPOSITORY ADD SECURITYLEVEL SMALLINT NOT NULL DEFAULT -1; \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.5/sybase.sql b/com.actionsoft.apps.coe.pal/db/6.5/sybase.sql new file mode 100644 index 00000000..7cb0e9eb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.5/sybase.sql @@ -0,0 +1,3 @@ +ALTER TABLE APP_ACT_COE_PAL_UPFILE ADD COLUMN SECURITYLEVEL SMALLINT(1) NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPO_R ADD COLUMN SECURITYLEVEL SMALLINT(1) NOT NULL DEFAULT -1; +ALTER TABLE APP_ACT_COE_PAL_REPOSITORY ADD COLUMN SECURITYLEVEL SMALLINT(1) NOT NULL DEFAULT -1; \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/db/6.6/mysql.sql b/com.actionsoft.apps.coe.pal/db/6.6/mysql.sql new file mode 100644 index 00000000..b2c27545 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/db/6.6/mysql.sql @@ -0,0 +1 @@ +ALTER TABLE APP_ACT_COE_PAL_REPOSITORY modify PLVER DECIMAL(6,3) \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/i18n/resource.xml b/com.actionsoft.apps.coe.pal/i18n/resource.xml new file mode 100644 index 00000000..f30ca956 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/i18n/resource.xml @@ -0,0 +1,3490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Complete + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 注意:重新统计的结果,只会在第二天才会看到。]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/lib/com.actionsoft.apps.coe.pal.jar b/com.actionsoft.apps.coe.pal/lib/com.actionsoft.apps.coe.pal.jar new file mode 100644 index 00000000..d9b0ad64 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/lib/com.actionsoft.apps.coe.pal.jar differ diff --git a/com.actionsoft.apps.coe.pal/manifest.xml b/com.actionsoft.apps.coe.pal/manifest.xml new file mode 100644 index 00000000..eaee7746 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/manifest.xml @@ -0,0 +1,89 @@ + + + + CoE PAL流程资产库 + 6.5 + 6 + 北京炎黄盈动科技发展有限责任公司 + + false + 2013-08-01 + +
AWS PAL主要优势 + +-简单易用,符合办公室人员使用习惯 +-将流程视为企业资产,覆盖流程全生命周期的工具和管理方法 +-开放的建模方法,内置一组出厂专家配置,开箱即用 +-预置一组专家KPI和BI分析模型,对由AWS BPMS系统执行的流程提供监控、分析 +-持续获得更多CoE App扩展,跟进最新流程管理思想,实现流程与各种管理方法的集成 + +AWS PAL(Process Assets Library)专家梳理方法 + +-流程模型:process.evc、process.bpmn2 +-组织模型:org.normal(组织图) +-数据模型:data.form(表单图) +-产品模型:product.normal(产品/服务图) +-控制模型:control.policy(制度图) +-系统模型:itSystem.normal(系统图) + +** 特别说明 + +-使用BPMN2流程模型梳理的流程,可以直接在AWS BPMS中执行 + ]]>
+ 2013-08-01 15:08:08 + com.actionsoft.apps.coe.pal.plugin.InstallListener + com.actionsoft.apps.coe.pal.plugin.Plugins + com.actionsoft.apps.coe.pal.plugin.StartListener + com.actionsoft.apps.coe.pal.plugin.StopListener + + + true + + + + + + + + true + true + _bpm.platform + + 0 + 0 + false + address + + -1 + 1 + false + false + true + 1 + true + PAL + true + all + false + + false + true + duty_r + false + true + + true + true + true + + false + close + + + + {"default":{"code":"","color":"#FFB718"},"process.businessLevel":{"code":"","color":"#FFB718"},"process.businessArea":{"code":"","color":"#FFB718"},"process.processGroup":{"code":"","color":"#FFB718"},"control.kpi":{"code":"","color":"#ff9421"},"control.policy":{"code":"","color":"#009b52"},"control.risk":{"code":"&#xe73e","color":"#dc4f39"},"data.form":{"code":"","color":"#009b52"},"itsystem.normal":{"code":"","color":"#4E7FF9"},"org.normal":{"code":"","color":"#ff9421"},"process.bpmn2":{"code":"","color":"#4E7FF9"},"process.evc":{"code":"","color":"#4E7FF9"}} +
diff --git a/com.actionsoft.apps.coe.pal/method/basic.tpl b/com.actionsoft.apps.coe.pal/method/basic.tpl new file mode 100644 index 00000000..2dd47a05 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/basic.tpl @@ -0,0 +1,2216 @@ +Schema.addCategory({ + name: "basic", + text: "基础图形", + dataAttributes: [{ + name: "序号", + type: "number", + value: "", + category: "default" + }, + { + name: "名称", + type: "string", + value: "", + category: "default" + }, + { + name: "所有者", + type: "string", + value: "", + category: "default" + }, + { + name: "连接", + type: "link", + value: "", + category: "default" + }, + { + name: "便笺", + type: "string", + value: "", + category: "default" + }] +}); +Schema.addShape({ + name: "text", + title: "文本", + category: "basic", + attribute: { + linkable: false + }, + props: { + w: 160, + h: 40 + }, + anchors: [], + textBlock: { + x: 0, + y: 0, + w: "w", + h: "h" + }, + path: [{ + lineStyle: { + lineWidth: 0 + }, + fillStyle: { + type: "none" + }, + actions: { + ref: "rectangle" + } + }], + drawIcon: function(b, c) { + var a = 0; + var d = -10; + c = c + 20; + return [{ + lineStyle: { + lineWidth: 2 + }, + fillStyle: { + type: "solid", + color: "50, 50, 50" + }, + actions: [{ + action: "move", + x: a, + y: d + }, + { + action: "line", + x: b, + y: d + }, + { + action: "line", + x: b, + y: d + c * 0.2 + }, + { + action: "line", + x: b * 0.9, + y: d + c * 0.12 + }, + { + action: "line", + x: b * 0.55, + y: d + c * 0.12 + }, + { + action: "line", + x: b * 0.55, + y: d + c * 0.85 + }, + { + action: "line", + x: b * 0.63, + y: d + c + }, + { + action: "line", + x: b * 0.37, + y: d + c + }, + { + action: "line", + x: b * 0.45, + y: d + c * 0.85 + }, + { + action: "line", + x: b * 0.45, + y: d + c * 0.12 + }, + { + action: "line", + x: b * 0.1, + y: d + c * 0.12 + }, + { + action: "line", + x: 0, + y: d + c * 0.2 + }, + { + action: "close" + }] + }] + } +}); +Schema.addShape({ + name: "note", + title: "备注", + category: "basic", + attribute: { + linkable: false + }, + props: { + w: 80, + h: 100 + }, + anchors: [], + textBlock: { + x: "w*0.1", + y: "h*0.1", + w: "w*0.8", + h: "h*0.8" + }, + fillStyle: { + color: "255, 255, 170" + }, + path: [{ + actions: [{ + action: "move", + x: "0", + y: "0" + }, + { + action: "line", + x: "w-16", + y: "0" + }, + { + action: "line", + x: "w", + y: "16" + }, + { + action: "line", + x: "w", + y: "h" + }, + { + action: "line", + x: "0", + y: "h" + }, + { + action: "line", + x: "0", + y: "0" + }, + { + action: "close" + }] + }, + { + fillStyle: { + type: "solid", + color: "r-50,g-50,b-50" + }, + actions: [{ + action: "move", + x: "w-16", + y: "0" + }, + { + action: "line", + x: "w-16", + y: "16" + }, + { + action: "line", + x: "w", + y: "16" + }, + { + action: "close" + }] + }, + { + fillStyle: { + type: "none" + }, + actions: [{ + action: "move", + x: "0", + y: "0" + }, + { + action: "line", + x: "w-16", + y: "0" + }, + { + action: "line", + x: "w", + y: "16" + }, + { + action: "line", + x: "w", + y: "h" + }, + { + action: "line", + x: "0", + y: "h" + }, + { + action: "line", + x: "0", + y: "0" + }, + { + action: "close" + }] + }], + drawIcon: function(a, b) { + return [{ + actions: [{ + action: "move", + x: 0, + y: 0 + }, + { + action: "line", + x: a * 0.6, + y: 0 + }, + { + action: "line", + x: a, + y: b * 0.24 + }, + { + action: "line", + x: a, + y: b + }, + { + action: "line", + x: 0, + y: b + }, + { + action: "line", + x: 0, + y: 0 + }, + { + action: "close" + }] + }, + { + fillStyle: { + type: "none" + }, + actions: [{ + action: "move", + x: a * 0.6, + y: 0.07 + }, + { + action: "line", + x: a * 0.6, + y: b * 0.24 + }, + { + action: "line", + x: a * 0.93, + y: b * 0.24 + }] + }] + } +}); +Schema.addShape({ + name: "image", + title: "Image", + attribute: { + linkable: false, + visible: false + }, + category: "basic", + textBlock: {}, + props: { + w: 98, + h: 72 + }, + path: [{ + actions: { + ref: "rectangle" + } + }] +}); +Schema.addShape({ + name: "round", + title: "圆形", + category: "basic", + props: { + w: 70, + h: 70 + }, + path: [{ + actions: { + ref: "round" + } + }] +}); +Schema.addShape({ + name: "rectangle", + title: "矩形", + category: "basic", + props: { + w: 100, + h: 70 + }, + path: [{ + actions: { + ref: "rectangle" + } + }] +}); +Schema.addShape({ + name: "roundRectangle", + title: "圆角矩形", + category: "basic", + props: { + w: 100, + h: 70 + }, + path: [{ + actions: { + ref: "roundRectangle" + } + }] +}); +Schema.addShape({ + name: "triangle", + title: "三角形", + category: "basic", + props: { + w: 80, + h: 70 + }, + textBlock: { + x: "10", + y: "h*0.25", + w: "w-20", + h: "h*0.75" + }, + anchors: [{ + x: "w/2", + y: "0" + }, + { + x: "w/2", + y: "h" + }, + { + x: "w*0.25", + y: "h/2" + }, + { + x: "w*0.75", + y: "h/2" + }], + path: [{ + actions: [{ + action: "move", + x: "w/2", + y: "0" + }, + { + action: "line", + x: "w", + y: "h" + }, + { + action: "line", + x: "0", + y: "h" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "polygon", + title: "五边形", + category: "basic", + props: { + w: 74, + h: 70 + }, + textBlock: { + x: "10", + y: "h*0.15", + w: "w-20", + h: "h*0.85" + }, + anchors: [{ + x: "w/2", + y: "0" + }, + { + x: "w/2", + y: "h" + }, + { + x: "0", + y: "h*0.39" + }, + { + x: "w", + y: "h*0.39" + }], + path: [{ + actions: [{ + action: "move", + x: "w/2", + y: "0" + }, + { + action: "line", + x: "0", + y: "h*0.39" + }, + { + action: "line", + x: "w*0.18", + y: "h" + }, + { + action: "line", + x: "w*0.82", + y: "h" + }, + { + action: "line", + x: "w", + y: "h*0.39" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "hexagon", + title: "六边形", + category: "basic", + props: { + w: 84, + h: 70 + }, + path: [{ + actions: [{ + action: "move", + x: "Math.min(w,h)*0.21", + y: "0" + }, + { + action: "line", + x: "w-Math.min(w,h)*0.21", + y: "0" + }, + { + action: "line", + x: "w", + y: "h * 0.5" + }, + { + action: "line", + x: "w-Math.min(w,h)*0.21", + y: "h" + }, + { + action: "line", + x: "Math.min(w,h)*0.21", + y: "h" + }, + { + action: "line", + x: "0", + y: "h * 0.5" + }, + { + action: "line", + x: "Math.min(w,h)*0.21", + y: "0" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "octagon", + title: "八边形", + category: "basic", + props: { + w: 70, + h: 70 + }, + textBlock: { + x: "10", + y: "10", + w: "w-20", + h: "h-20" + }, + path: [{ + actions: [{ + action: "move", + x: "Math.min(w,h)*0.29", + y: "0" + }, + { + action: "line", + x: "w-Math.min(w,h)*0.29", + y: "0" + }, + { + action: "line", + x: "w", + y: "h*0.29" + }, + { + action: "line", + x: "w", + y: "h*0.71" + }, + { + action: "line", + x: "w-Math.min(w,h)*0.29", + y: "h" + }, + { + action: "line", + x: "Math.min(w,h)*0.29", + y: "h" + }, + { + action: "line", + x: "0", + y: "h*0.71" + }, + { + action: "line", + x: "0", + y: "h*0.29" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "pentagon", + title: "五角星", + category: "basic", + props: { + w: 70, + h: 70 + }, + textBlock: { + x: "w*0.15", + y: "h*0.20", + w: "w*0.70", + h: "h*0.65" + }, + anchors: [{ + x: "w*0.5", + y: "0" + }, + { + x: "0", + y: "h*0.38" + }, + { + x: "w*0.5", + y: "h*0.76" + }, + { + x: "w", + y: "h*0.38" + }], + path: [{ + actions: [{ + action: "move", + x: "w*0.62", + y: "h*0.38" + }, + { + action: "line", + x: "w*0.5", + y: "0" + }, + { + action: "line", + x: "w*0.38", + y: "h*0.38" + }, + { + action: "line", + x: "0", + y: "h*0.38" + }, + { + action: "line", + x: "w*0.3", + y: "h*0.62" + }, + { + action: "line", + x: "w*0.18", + y: "h" + }, + { + action: "line", + x: "w*0.5", + y: "h*0.76" + }, + { + action: "line", + x: "w*0.82", + y: "h" + }, + { + action: "line", + x: "w*0.7", + y: "h*0.62" + }, + { + action: "line", + x: "w", + y: "h*0.38" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "cross", + title: "十字形", + category: "basic", + props: { + w: 70, + h: 70 + }, + textBlock: { + x: "0", + y: "h*0.5-Math.min(w,h)/8", + w: "w", + h: "Math.min(w,h)*2/8" + }, + path: [{ + actions: [{ + action: "move", + x: "w*0.5-Math.min(w,h)/8", + y: "0" + }, + { + action: "line", + x: "w*0.5+Math.min(w,h)/8", + y: "0" + }, + { + action: "line", + x: "w*0.5+Math.min(w,h)/8", + y: "h*0.5-Math.min(w,h)/8" + }, + { + action: "line", + x: "w", + y: "h*0.5-Math.min(w,h)/8" + }, + { + action: "line", + x: "w", + y: "h*0.5+Math.min(w,h)/8" + }, + { + action: "line", + x: "w*0.5+Math.min(w,h)/8", + y: "h*0.5+Math.min(w,h)/8" + }, + { + action: "line", + x: "w*0.5+Math.min(w,h)/8", + y: "h" + }, + { + action: "line", + x: "w*0.5-Math.min(w,h)/8", + y: "h" + }, + { + action: "line", + x: "w*0.5-Math.min(w,h)/8", + y: "h*0.5+Math.min(w,h)/8" + }, + { + action: "line", + x: "0", + y: "h*0.5+Math.min(w,h)/8" + }, + { + action: "line", + x: "0", + y: "h*0.5-Math.min(w,h)/8" + }, + { + action: "line", + x: "w*0.5-Math.min(w,h)/8", + y: "h*0.5-Math.min(w,h)/8" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "cloud", + title: "云", + category: "basic", + props: { + w: 90, + h: 70 + }, + textBlock: { + x: "w*0.17", + y: "h*0.09", + w: "w*0.71", + h: "h*0.8" + }, + anchors: [{ + x: "0", + y: "h*0.5" + }, + { + x: "w*0.19", + y: "h*0.9" + }, + { + x: "w*0.57", + y: "h" + }, + { + x: "w*0.962", + y: "h*0.8" + }, + { + x: "w*0.9543", + y: "h*0.23" + }, + { + x: "w*0.6", + y: "h*0.01" + }, + { + x: "w*0.17", + y: "h*0.09" + }], + path: [{ + actions: [{ + action: "move", + x: "0.12*w", + y: "0.7*h" + }, + { + action: "curve", + x1: "-0.1*w", + y1: "0.5*h", + x2: "0.04*w", + y2: "0.35*h", + x: "0.09*w", + y: "0.3*h" + }, + { + action: "curve", + x1: "0.07*w", + y1: "0.05*h", + x2: "0.32*w", + y2: "0.0*h", + x: "0.42*w", + y: "0.1*h" + }, + { + action: "curve", + x1: "0.50*w", + y1: "-0.05*h", + x2: "0.75*w", + y2: "0.0*h", + x: "0.75*w", + y: "0.15*h" + }, + { + action: "curve", + x1: "0.95*w", + y1: "0.1*h", + x2: "1.03*w", + y2: "0.3*h", + x: "0.95*w", + y: "0.55*h" + }, + { + action: "curve", + x1: "1.02*w", + y1: "0.75*h", + x2: "0.95*w", + y2: "1.0*h", + x: "0.72*w", + y: "0.9*h" + }, + { + action: "curve", + x1: "0.67*w", + y1: "1.03*h", + x2: "0.47*w", + y2: "1.03*h", + x: "0.42*w", + y: "0.9*h" + }, + { + action: "curve", + x1: "0.32*w", + y1: "1.0*h", + x2: "0.12*w", + y2: "0.95*h", + x: "0.12*w", + y: "0.7*h" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "braces", + title: "大括号", + category: "basic", + attribute: { + linkable: false + }, + props: { + w: 200, + h: 140 + }, + fillStyle: { + type: "none" + }, + textBlock: { + x: "w*0.1", + y: "0", + w: "w*0.8", + h: "h" + }, + anchors: [{ + x: "w", + y: "h*0.5" + }, + { + x: "0", + y: "h*0.5" + }], + path: [{ + fillStyle: { + type: "none" + }, + actions: [{ + action: "move", + x: "Math.min(w*0.2,18)", + y: "0" + }, + { + action: "quadraticCurve", + x1: "Math.min(w*0.1,9)", + y1: "0", + x: "Math.min(w*0.1,9)", + y: "Math.min(h*0.1,9)" + }, + { + action: "line", + x: "Math.min(w*0.1,9)", + y: "h*0.5-Math.min(h*0.1,9)" + }, + { + action: "quadraticCurve", + x1: "Math.min(w*0.1,9)", + y1: "h*0.5", + x: "0", + y: "h*0.5" + }, + { + action: "quadraticCurve", + x1: "Math.min(w*0.1,9)", + y1: "h*0.5", + x: "Math.min(w*0.1,9)", + y: "h*0.5+Math.min(h*0.1,9)" + }, + { + action: "line", + x: "Math.min(w*0.1,9)", + y: "h-Math.min(h*0.1,9)" + }, + { + action: "quadraticCurve", + x1: "Math.min(w*0.1,9)", + y1: "h", + x: "Math.min(w*0.2,18)", + y: "h" + }] + }, + { + fillStyle: { + type: "none" + }, + actions: [{ + action: "move", + x: "w-Math.min(w*0.2,18)", + y: "h" + }, + { + action: "quadraticCurve", + x1: "w-Math.min(w*0.1,9)", + y1: "h", + x: "w-Math.min(w*0.1,9)", + y: "h-Math.min(h*0.1,9)" + }, + { + action: "line", + x: "w-Math.min(w*0.1,9)", + y: "h*0.5+Math.min(h*0.1,9)" + }, + { + action: "quadraticCurve", + x1: "w-Math.min(w*0.1,9)", + y1: "h*0.5", + x: "w", + y: "h*0.5" + }, + { + action: "quadraticCurve", + x1: "w-Math.min(w*0.1,9)", + y1: "h*0.5", + x: "w-Math.min(w*0.1,9)", + y: "h*0.5-Math.min(h*0.1,9)" + }, + { + action: "line", + x: "w-Math.min(w*0.1,9)", + y: "Math.min(h*0.1,9)" + }, + { + action: "quadraticCurve", + x1: "w-Math.min(w*0.1,9)", + y1: "0", + x: "w-Math.min(w*0.2,18)", + y: "0" + }] + }, + { + lineStyle: { + lineWidth: 0 + }, + fillStyle: { + type: "none" + }, + actions: { + ref: "rectangle" + } + }] +}); +Schema.addShape({ + name: "parentheses", + title: "中括号", + category: "basic", + attribute: { + linkable: false + }, + props: { + w: 200, + h: 140 + }, + fillStyle: { + type: "none" + }, + anchors: [{ + x: "w", + y: "h*0.5" + }, + { + x: "0", + y: "h*0.5" + }], + textBlock: { + x: "w*.1", + y: "0", + w: "w*0.8", + h: "h" + }, + path: [{ + actions: [{ + action: "move", + x: "w*0.1", + y: "0" + }, + { + action: "line", + x: "0", + y: "h*0.1" + }, + { + action: "line", + x: "0", + y: "h*0.9" + }, + { + action: "line", + x: "w*0.1", + y: "h" + }, + { + action: "move", + x: "w-w*0.1", + y: "h" + }, + { + action: "line", + x: "w", + y: "h*0.9" + }, + { + action: "line", + x: "w", + y: "h*0.1" + }, + { + action: "line", + x: "w-w*0.1", + y: "0" + }] + }, + { + lineStyle: { + lineWidth: 0 + }, + fillStyle: { + type: "none" + }, + actions: { + ref: "rectangle" + } + }] +}); +Schema.addShape({ + name: "rightBrace", + title: "备注", + category: "basic", + attribute: { + linkable: false + }, + props: { + w: 100, + h: 140 + }, + fontStyle: { + textAlign: "left" + }, + fillStyle: { + type: "none" + }, + textBlock: { + x: "27", + y: "0", + w: "w-27", + h: "h" + }, + anchors: [], + path: [{ + actions: [{ + action: "move", + x: "0", + y: "h" + }, + { + action: "quadraticCurve", + x1: "Math.min(w*0.1,9)", + y1: "h", + x: "Math.min(w*0.1,9)", + y: "h-Math.min(h*0.1,9)" + }, + { + action: "line", + x: "Math.min(w*0.1,9)", + y: "h*0.5+Math.min(h*0.1,9)" + }, + { + action: "quadraticCurve", + x1: "Math.min(w*0.1,9)", + y1: "h*0.5", + x: "22", + y: "h*0.5" + }, + { + action: "quadraticCurve", + x1: "Math.min(w*0.1,9)", + y1: "h*0.5", + x: "Math.min(w*0.1,9)", + y: "h*0.5-Math.min(h*0.1,9)" + }, + { + action: "line", + x: "Math.min(w*0.1,9)", + y: "Math.min(h*0.1,9)" + }, + { + action: "quadraticCurve", + x1: "Math.min(w*0.1,9)", + y1: "0", + x: "0", + y: "0" + }] + }, + { + lineStyle: { + lineWidth: 0 + }, + fillStyle: { + type: "none" + }, + actions: { + ref: "rectangle" + } + }], + drawIcon: function(b, c) { + var a = 10; + return [{ + actions: [{ + action: "move", + x: a + 0, + y: c + }, + { + action: "quadraticCurve", + x1: a + Math.min(b * 0.1, 9), + y1: c, + x: a + Math.min(b * 0.1, 9), + y: c - Math.min(c * 0.1, 9) + }, + { + action: "line", + x: a + Math.min(b * 0.1, 9), + y: c * 0.5 + Math.min(c * 0.1, 9) + }, + { + action: "quadraticCurve", + x1: a + Math.min(b * 0.1, 9), + y1: c * 0.5, + x: a + b * 0.2, + y: c * 0.5 + }, + { + action: "quadraticCurve", + x1: a + Math.min(b * 0.1, 9), + y1: c * 0.5, + x: a + Math.min(b * 0.1, 9), + y: c * 0.5 - Math.min(c * 0.1, 9) + }, + { + action: "line", + x: a + Math.min(b * 0.1, 9), + y: Math.min(c * 0.1, 9) + }, + { + action: "quadraticCurve", + x1: a + Math.min(b * 0.1, 9), + y1: 0, + x: a + 0, + y: 0 + }] + }] + } +}); +Schema.addShape({ + name: "leftBrace", + title: "备注", + category: "basic", + attribute: { + linkable: false + }, + props: { + w: 100, + h: 140 + }, + fontStyle: { + textAlign: "right" + }, + fillStyle: { + type: "none" + }, + textBlock: { + x: "0", + y: "0", + w: "w-27", + h: "h" + }, + anchors: [], + path: [{ + actions: [{ + action: "move", + x: "w", + y: "0" + }, + { + action: "quadraticCurve", + x1: "w-Math.min(w*0.1,9)", + y1: "0", + x: "w-Math.min(w*0.1,9)", + y: "Math.min(h*0.1,9)" + }, + { + action: "line", + x: "w-Math.min(w*0.1,9)", + y: "h*0.5-Math.min(h*0.1,9)" + }, + { + action: "quadraticCurve", + x1: "w-Math.min(w*0.1,9)", + y1: "h*0.5", + x: "w-22", + y: "h*0.5" + }, + { + action: "quadraticCurve", + x1: "w-Math.min(w*0.1,9)", + y1: "h*0.5", + x: "w-Math.min(w*0.1,9)", + y: "h*0.5+Math.min(h*0.1,9)" + }, + { + action: "line", + x: "w-Math.min(w*0.1,9)", + y: "h-Math.min(h*0.1,9)" + }, + { + action: "quadraticCurve", + x1: "w-Math.min(w*0.1,9)", + y1: "h", + x: "w", + y: "h" + }] + }, + { + lineStyle: { + lineWidth: 0 + }, + fillStyle: { + type: "none" + }, + actions: { + ref: "rectangle" + } + }], + drawIcon: function(b, c) { + var a = 12; + return [{ + actions: [{ + action: "move", + x: b - a, + y: 0 + }, + { + action: "quadraticCurve", + x1: b - Math.min(b * 0.1, 9) - a, + y1: 0, + x: b - Math.min(b * 0.1, 9) - a, + y: Math.min(c * 0.1, 9) + }, + { + action: "line", + x: b - Math.min(b * 0.1, 9) - a, + y: c * 0.5 - Math.min(c * 0.1, 9) + }, + { + action: "quadraticCurve", + x1: b - Math.min(b * 0.1, 9) - a, + y1: c * 0.5, + x: b - b * 0.2 - a, + y: c * 0.5 + }, + { + action: "quadraticCurve", + x1: b - Math.min(b * 0.1, 9) - a, + y1: c * 0.5, + x: b - Math.min(b * 0.1, 9) - a, + y: c * 0.5 + Math.min(c * 0.1, 9) + }, + { + action: "line", + x: b - Math.min(b * 0.1, 9) - a, + y: c - Math.min(c * 0.1, 9) + }, + { + action: "quadraticCurve", + x1: b - Math.min(b * 0.1, 9) - a, + y1: c, + x: b - a, + y: c + }] + }] + } +}); +Schema.addShape({ + name: "apqc", + title: "APQC", + category: "basic", + props: { + w: 200, + h: 150 + }, + path: [{ + actions: [{ + action: "move", + x: "0", + y: "h/8" + }, + { + action: "quadraticCurve", + x1: "w*0.5", + y1: "-h/8", + x: "w", + y: "h/8" + }, + { + action: "line", + x: "w", + y: "h" + }, + { + action: "line", + x: "0", + y: "h" + }, + { + action: "line", + x: "0", + y: "h/8" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "teardrop", + title: "水滴", + category: "basic", + props: { + w: 70, + h: 70 + }, + path: [{ + actions: [{ + action: "move", + x: "w", + y: "0" + }, + { + action: "line", + x: "w", + y: "h/2" + }, + { + action: "curve", + x1: "w", + y1: "h+h/6", + x2: "0", + y2: "h+h/6", + x: "0", + y: "h*0.5" + }, + { + action: "quadraticCurve", + x1: "0", + y1: "0", + x: "w/2", + y: "0" + }, + { + action: "line", + x: "w/2", + y: "0" + }, + { + action: "line", + x: "w", + y: "0" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "singleLeftArrow", + title: "左箭头", + category: "basic", + props: { + w: 90, + h: 60 + }, + anchors: [{ + x: "w", + y: "h*0.5" + }, + { + x: "0", + y: "h*0.5" + }], + textBlock: { + x: "0", + y: "h*0.33", + w: "w", + h: "h*0.34" + }, + path: [{ + actions: [{ + action: "move", + x: "0", + y: "h/2" + }, + { + action: "line", + x: "Math.min(0.5*h,0.45*w)", + y: "0" + }, + { + action: "line", + x: "Math.min(0.5*h,0.45*w)", + y: "h*0.33" + }, + { + action: "line", + x: "w", + y: "h*0.33" + }, + { + action: "line", + x: "w", + y: "h*0.67" + }, + { + action: "line", + x: "Math.min(0.5*h,0.45*w)", + y: "h*0.67" + }, + { + action: "line", + x: "Math.min(0.5*h,0.45*w)", + y: "h" + }, + { + action: "line", + x: "0", + y: "h/2" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "singleRightArrow", + title: "右箭头", + category: "basic", + props: { + w: 90, + h: 60 + }, + anchors: [{ + x: "w", + y: "h*0.5" + }, + { + x: "0", + y: "h*0.5" + }], + textBlock: { + x: "0", + y: "h*0.33", + w: "w", + h: "h*0.34" + }, + path: [{ + actions: [{ + action: "move", + x: "0", + y: "h*0.33" + }, + { + action: "line", + x: "w-Math.min(h*0.5,w*0.45)", + y: "h*0.33" + }, + { + action: "line", + x: "w-Math.min(h*0.5,w*0.45)", + y: "0" + }, + { + action: "line", + x: "w", + y: "h*0.5" + }, + { + action: "line", + x: "w-Math.min(h*0.5,w*0.45)", + y: "h" + }, + { + action: "line", + x: "w-Math.min(h*0.5,w*0.45)", + y: "h*0.67" + }, + { + action: "line", + x: "0", + y: "h*0.67" + }, + { + action: "line", + x: "0", + y: "h*0.33" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "doubleHorizontalArrow", + title: "左右箭头", + category: "basic", + props: { + w: 90, + h: 60 + }, + anchors: [{ + x: "w", + y: "h*0.5" + }, + { + x: "0", + y: "h*0.5" + }], + textBlock: { + x: "0", + y: "h*0.33", + w: "w", + h: "h*0.34" + }, + path: [{ + actions: [{ + action: "move", + x: "0", + y: "h*0.5" + }, + { + action: "line", + x: "Math.min(h*0.5,w*0.45)", + y: "0" + }, + { + action: "line", + x: "Math.min(h*0.5,w*0.45)", + y: "h*0.33" + }, + { + action: "line", + x: "w-Math.min(h*0.5,w*0.45)", + y: "h*0.33" + }, + { + action: "line", + x: "w-Math.min(h*0.5,w*0.45)", + y: "0" + }, + { + action: "line", + x: "w", + y: "h*0.5" + }, + { + action: "line", + x: "w-Math.min(h*0.5,w*0.45)", + y: "h" + }, + { + action: "line", + x: "w-Math.min(h*0.5,w*0.45)", + y: "h*0.67" + }, + { + action: "line", + x: "Math.min(h*0.5,w*0.45)", + y: "h*0.67" + }, + { + action: "line", + x: "Math.min(h*0.5,w*0.45)", + y: "h" + }, + { + action: "line", + x: "0", + y: "h*0.5" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "singleUpArrow", + title: "上箭头", + category: "basic", + props: { + w: 60, + h: 90 + }, + anchors: [{ + x: "w*0.5", + y: "0" + }, + { + x: "w*0.5", + y: "h" + }], + textBlock: { + x: "-w*0.2", + y: "h*0.43", + w: "w*1.4", + h: "h*0.24" + }, + path: [{ + actions: [{ + action: "move", + x: "w*0.5", + y: "0" + }, + { + action: "line", + x: "w", + y: "Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w*0.67", + y: "Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w*0.67", + y: "h" + }, + { + action: "line", + x: "w*0.33", + y: "h" + }, + { + action: "line", + x: "w*0.33", + y: "Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "0", + y: "Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w*0.5", + y: "0" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "singleDownArrow", + title: "下箭头", + category: "basic", + props: { + w: 60, + h: 90 + }, + anchors: [{ + x: "w*0.5", + y: "0" + }, + { + x: "w*0.5", + y: "h" + }], + textBlock: { + x: "-w*0.2", + y: "h*0.33", + w: "w*1.4", + h: "h*0.24" + }, + path: [{ + actions: [{ + action: "move", + x: "w*0.33", + y: "0" + }, + { + action: "line", + x: "w*0.67", + y: "0" + }, + { + action: "line", + x: "w*0.67", + y: "h-Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w", + y: "h-Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w*0.5", + y: "h" + }, + { + action: "line", + x: "0", + y: "h-Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w*0.33", + y: "h-Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w*0.33", + y: "0" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "doubleVerticalArrow", + title: "上下箭头", + category: "basic", + props: { + w: 60, + h: 90 + }, + anchors: [{ + x: "w*0.5", + y: "0" + }, + { + x: "w*0.5", + y: "h" + }], + textBlock: { + x: "-w*0.2", + y: "h*0.38", + w: "w*1.4", + h: "h*0.24" + }, + path: [{ + actions: [{ + action: "move", + x: "w*0.5", + y: "0" + }, + { + action: "line", + x: "w", + y: "Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w*0.67", + y: "Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w*0.67", + y: "h-Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w", + y: "h-Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w*0.5", + y: "h" + }, + { + action: "line", + x: "0", + y: "h-Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w*0.33", + y: "h-Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w*0.33", + y: "Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "0", + y: "Math.min(w*0.5,h*0.45)" + }, + { + action: "line", + x: "w*0.5", + y: "0" + }, + { + action: "close" + }] + }] +}); +Schema.addShape({ + name: "backArrow", + title: "左返回箭头", + category: "basic", + props: { + w: 70, + h: 70 + }, + anchors: [{ + x: "w-Math.min(w*0.12,20)", + y: "h*0.5" + }, + { + x: "0", + y: "h*0.5" + }], + textBlock: { + x: "0", + y: "0", + w: "w-10", + h: "h" + }, + path: [{ + actions: [{ + action: "move", + x: "0", + y: "Math.min(Math.min(w,h)*0.4,80)" + }, + { + action: "quadraticCurve", + x1: "0", + y1: "0", + x: "Math.min(Math.min(w,h)*0.4,80)", + y: "0" + }, + { + action: "line", + x: "w-Math.min(w*0.12,20)-Math.min(Math.min(w,h)*0.4,80)", + y: "0" + }, + { + action: "quadraticCurve", + x1: "w-Math.min(w*0.12,20)", + y1: "0", + x: "w-Math.min(w*0.12,20)", + y: "Math.min(Math.min(w,h)*0.4,80)" + }, + { + action: "line", + x: "w-Math.min(w*0.12,20)", + y: "h-h*0.1-Math.min(h*0.1,50)" + }, + { + action: "line", + x: "w", + y: "h-h*0.1-Math.min(h*0.1,50)" + }, + { + action: "line", + x: "w-Math.min(w*0.12,20)-Math.min(Math.min(h,w)*0.25,50)/2", + y: "h" + }, + { + action: "line", + x: "w-Math.min(w*0.12,20)*2 - Math.min(Math.min(h,w)*0.25,50)", + y: "h-h*0.1-Math.min(h*0.1,50)" + }, + { + action: "line", + x: "w-Math.min(w*0.12,20) - Math.min(Math.min(h,w)*0.25,50)", + y: "h-h*0.1-Math.min(h*0.1,50)" + }, + { + action: "line", + x: "w-Math.min(w*0.12,20) - Math.min(Math.min(h,w)*0.25,50)", + y: "Math.min(Math.min(h,w)*0.4,80)" + }, + { + action: "quadraticCurve", + x1: "w-Math.min(w*0.12,20)-Math.min(Math.min(h,w)*0.25,50)", + y1: "Math.min(Math.min(h,w)*0.25,50)", + x: "w-Math.min(w*0.12,20)-Math.min(Math.min(h,w)*0.25,50)-Math.min(w*0.15,30)", + y: "Math.min(Math.min(h,w)*0.25,50)" + }, + { + action: "line", + x: "Math.min(Math.min(h,w)*0.25,50)+Math.min(w*0.15,30)", + y: "Math.min(Math.min(h,w)*0.25,50)" + }, + { + action: "quadraticCurve", + x1: "Math.min(Math.min(h,w)*0.25,50)", + y1: "Math.min(Math.min(h,w)*0.25,50)", + x: "Math.min(Math.min(h,w)*0.25,50)", + y: "Math.min(Math.min(h,w)*0.4,80)" + }, + { + action: "line", + x: "Math.min(Math.min(h,w)*0.25,50)", + y: "h" + }, + { + action: "line", + x: "0", + y: "h" + }, + { + action: "line", + x: "0", + y: "Math.min(Math.min(h,w)*0.4,80)" + }, + { + action: "close" + }] + }, + { + lineStyle: { + lineWidth: 0 + }, + fillStyle: { + type: "none" + }, + actions: { + ref: "rectangle" + } + }] +}); +Schema.addShape({ + name: "rightBackArrow", + title: "右返回箭头", + category: "basic", + props: { + w: 70, + h: 70 + }, + anchors: [{ + x: "Math.min(w*0.12,20)", + y: "h*0.5" + }, + { + x: "w", + y: "h*0.5" + }], + textBlock: { + x: "10", + y: "0", + w: "w-10", + h: "h" + }, + path: [{ + actions: [{ + action: "move", + x: "w", + y: "Math.min(Math.min(w,h)*0.4,80)" + }, + { + action: "quadraticCurve", + x1: "w", + y1: "0", + x: "w-Math.min(Math.min(w,h)*0.4,80)", + y: "0" + }, + { + action: "line", + x: "Math.min(w*0.12,20)+Math.min(Math.min(w,h)*0.4,80)", + y: "0" + }, + { + action: "quadraticCurve", + x1: "Math.min(w*0.12,20)", + y1: "0", + x: "Math.min(w*0.12,20)", + y: "Math.min(Math.min(w,h)*0.4,80)" + }, + { + action: "line", + x: "Math.min(w*0.12,20)", + y: "h-h*0.1-Math.min(h*0.1,50)" + }, + { + action: "line", + x: "0", + y: "h-h*0.1-Math.min(h*0.1,50)" + }, + { + action: "line", + x: "Math.min(w*0.12,20)+Math.min(Math.min(h,w)*0.25,50)/2", + y: "h" + }, + { + action: "line", + x: "Math.min(Math.min(h,w)*0.25,50)+Math.min(w*0.12,20)*2", + y: "h-h*0.1-Math.min(h*0.1,50)" + }, + { + action: "line", + x: "Math.min(Math.min(h,w)*0.25,50)+Math.min(w*0.12,20)", + y: "h-h*0.1-Math.min(h*0.1,50)" + }, + { + action: "line", + x: "Math.min(Math.min(h,w)*0.25,50)+Math.min(w*0.12,20)", + y: "Math.min(Math.min(h,w)*0.4,80)" + }, + { + action: "quadraticCurve", + x1: "Math.min(Math.min(h,w)*0.25,50)+Math.min(w*0.12,20)", + y1: "Math.min(Math.min(h,w)*0.25,50)", + x: "Math.min(Math.min(h,w)*0.25,50)+Math.min(w*0.12,20)+Math.min(w*0.15,30)", + y: "Math.min(Math.min(h,w)*0.25,50)" + }, + { + action: "line", + x: "w-Math.min(Math.min(h,w)*0.25,50)-Math.min(w*0.15,30)", + y: "Math.min(Math.min(h,w)*0.25,50)" + }, + { + action: "quadraticCurve", + x1: "w-Math.min(Math.min(h,w)*0.25,50)", + y1: "Math.min(Math.min(h,w)*0.25,50)", + x: "w-Math.min(Math.min(h,w)*0.25,50)", + y: "Math.min(Math.min(h,w)*0.4,80)" + }, + { + action: "line", + x: "w-Math.min(Math.min(h,w)*0.25,50)", + y: "h" + }, + { + action: "line", + x: "w", + y: "h" + }, + { + action: "line", + x: "w", + y: "Math.min(Math.min(h,w)*0.4,80)" + }, + { + action: "close" + }] + }, + { + lineStyle: { + lineWidth: 0 + }, + fillStyle: { + type: "none" + }, + actions: { + ref: "rectangle" + } + }] +}); +Schema.addShape({ + name: "corner", + title: "拐角", + category: "basic", + props: { + w: 70, + h: 70 + }, + anchors: [{ + x: "w*0.5", + y: "0" + }, + { + x: "w*0.5", + y: "0" + }, + { + x: "0", + y: "h*0.5" + }, + { + x: "0", + y: "h*0.5" + }], + path: [{ + actions: [{ + action: "move", + x: "0", + y: "0" + }, + { + action: "line", + x: "w", + y: "0" + }, + { + action: "line", + x: "w-Math.min(w/6,30)", + y: "Math.min(h/6,30)" + }, + { + action: "line", + x: "Math.min(w/6,30)", + y: "Math.min(h/6,30)" + }, + { + action: "line", + x: "Math.min(w/6,30)", + y: "h-Math.min(h/6,30)" + }, + { + action: "line", + x: "0", + y: "h" + }, + { + action: "line", + x: "0", + y: "0" + }, + { + action: "close" + }] + }, + { + lineStyle: { + lineWidth: 0 + }, + fillStyle: { + type: "none" + }, + actions: { + ref: "rectangle" + } + }] +}); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/control.framework/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/control.framework/diagram.attribute.xml new file mode 100644 index 00000000..4a601e7e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.framework/diagram.attribute.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/control.framework/diagram.import.xml b/com.actionsoft.apps.coe.pal/method/control.framework/diagram.import.xml new file mode 100644 index 00000000..91aa354d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.framework/diagram.import.xml @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/control.framework/diagram.linker.xml b/com.actionsoft.apps.coe.pal/method/control.framework/diagram.linker.xml new file mode 100644 index 00000000..621983bf --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.framework/diagram.linker.xml @@ -0,0 +1,23 @@ + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/control.framework/diagram.schema.tpl b/com.actionsoft.apps.coe.pal/method/control.framework/diagram.schema.tpl new file mode 100644 index 00000000..7af629bc --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.framework/diagram.schema.tpl @@ -0,0 +1,5 @@ +Schema.addCategory({name:"control_framework", text:"架构KPI图", dataAttributes:[]}); +/*Risk 菱形*/ +Schema.addShape({name:"kpi", title:"架构KPI图",text:"架构KPI图", category:"control_framework", props:{w:110, h:50},lineStyle:{lineColor:"128,201,144"}, fillStyle:{type: "gradient",gradientType: "linear",beginColor: "242,255,245",endColor: "224,255,231",angle: Math.PI*0.5}, textBlock:{x:"10", y:"10", w:"w-20", h:"h-20"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, path:[ + {actions:{ref:"rectangle"}} +]}); diff --git a/com.actionsoft.apps.coe.pal/method/control.framework/fragment/abc.tpl b/com.actionsoft.apps.coe.pal/method/control.framework/fragment/abc.tpl new file mode 100644 index 00000000..e69de29b diff --git a/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.attribute.custom.xml b/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.attribute.custom.xml new file mode 100644 index 00000000..ba127237 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.attribute.custom.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.attribute.xml new file mode 100644 index 00000000..4a601e7e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.attribute.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.import.xml b/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.import.xml new file mode 100644 index 00000000..91aa354d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.import.xml @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.linker.xml b/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.linker.xml new file mode 100644 index 00000000..621983bf --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.linker.xml @@ -0,0 +1,23 @@ + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.schema.tpl b/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.schema.tpl new file mode 100644 index 00000000..de6afcfb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.kpi/diagram.schema.tpl @@ -0,0 +1,5 @@ +Schema.addCategory({name:"control_kpi", text:"流程KPI图", dataAttributes:[]}); +/*Risk 菱形*/ +Schema.addShape({name:"kpi", title:"流程KPI",text:"流程KPI", category:"control_kpi", props:{w:110, h:50},lineStyle:{lineColor:"128,201,144"}, fillStyle:{type: "gradient",gradientType: "linear",beginColor: "242,255,245",endColor: "224,255,231",angle: Math.PI*0.5}, textBlock:{x:"10", y:"10", w:"w-20", h:"h-20"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, path:[ + {actions:{ref:"rectangle"}} +]}); diff --git a/com.actionsoft.apps.coe.pal/method/control.kpi/fragment/abc.tpl b/com.actionsoft.apps.coe.pal/method/control.kpi/fragment/abc.tpl new file mode 100644 index 00000000..8b671488 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.kpi/fragment/abc.tpl @@ -0,0 +1,3 @@ + diff --git a/com.actionsoft.apps.coe.pal/method/control.policy/diagram.attribute.custom.xml b/com.actionsoft.apps.coe.pal/method/control.policy/diagram.attribute.custom.xml new file mode 100644 index 00000000..c4740c7b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.policy/diagram.attribute.custom.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/control.policy/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/control.policy/diagram.attribute.xml new file mode 100644 index 00000000..c5a09bc4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.policy/diagram.attribute.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/control.policy/diagram.import.xml b/com.actionsoft.apps.coe.pal/method/control.policy/diagram.import.xml new file mode 100644 index 00000000..80d95940 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.policy/diagram.import.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/control.policy/diagram.linker.xml b/com.actionsoft.apps.coe.pal/method/control.policy/diagram.linker.xml new file mode 100644 index 00000000..696f0dd3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.policy/diagram.linker.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/control.policy/diagram.schema.tpl b/com.actionsoft.apps.coe.pal/method/control.policy/diagram.schema.tpl new file mode 100644 index 00000000..04c4f01d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.policy/diagram.schema.tpl @@ -0,0 +1,97 @@ +/** + * Policy + */ + +Schema.addCategory({ + name: "control_policy", + text: "制度图", + dataAttributes: [] +}); +/* Regulation*/ +Schema.addShape({name:"regulation", title:"制度",text:"制度", category:"control_policy",lineStyle:{lineWidth: 1}, props:{w:100, h:70}, anchors:[ + {x:"w*0.5", y:"0"}, + {x:"w", y:"h*0.5"}, + {x:"w*0.5", y:"h-Math.min(h/8,w/12)"}, + {x:"0", y:"h*0.5"} +], textBlock:{x:"0", y:"0", w:"w", h:"h*0.9"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, path:[ + {actions:[ + {action:"move", x:"0", y:"h-Math.min(h/8,w/12)"}, + {action:"line", x:"0", y:"0"}, + {action:"line", x:"w", y:"0"}, + {action:"line", x:"w", y:"h-Math.min(h/8,w/12)"}, + {action:"quadraticCurve", x1:"w*0.75", y1:"h-3*Math.min(h/8,w/12)", x:"w*0.5", y:"h-Math.min(h/8,w/12)"}, + {action:"quadraticCurve", x1:"w*0.25", y1:"h+Math.min(h/8,w/12)", x:"0", y:"h-Math.min(h/8,w/12)"}, + {action:"close"} + ]}, + {actions:[ + {action:"move",x:"w", y:"h*0.4"}, + {action:"line",x:"w*0.76",y:"h-2*Math.min(h/8,w/12)"} + ]}, + {lineStyle:{lineStyle:"none"}, fillStyle:{type:"none"}, actions:[ + {action:"move", x:"0", y:"h-Math.min(h/8,w/12)"}, + {action:"line", x:"0", y:"0"}, + {action:"line", x:"w", y:"0"}, + {action:"line", x:"w", y:"h-Math.min(h/8,w/12)"}, + {action:"quadraticCurve", x1:"w*0.75", y1:"h-3*Math.min(h/8,w/12)", x:"w*0.5", y:"h-Math.min(h/8,w/12)"}, + {action:"quadraticCurve", x1:"w*0.25", y1:"h+Math.min(h/8,w/12)", x:"0", y:"h-Math.min(h/8,w/12)"}, + {action:"close"} + ]} +]}); + + +/***Input/Output*/Schema.addShape({name:"I/O_L4", title:"操作指导", text:"操作指导", category:"control_policy", props:{w:100, h:70}, path:[ + {actions:[ + {action:"move", x:"0", y:"h*0.5"}, + {action:"line", x:"Math.min(h/2,w/6)", y:"0"}, + {action:"line", x:"w-Math.min(h/2,w/6)", y:"0"}, + {action:"line", x:"w", y:"h/2"}, + {action:"line", x:"w-Math.min(h/2,w/6)", y:"h"}, + {action:"line", x:"Math.min(h/2,w/6)", y:"h"}, + {action:"line", x:"0", y:"h/2"}, + {action:"close"} + ]} + ]}); + + +/*Item*/ +/***Schema.addShape({name:"item", title:"条款",text:"条款", category:"control_policy", lineStyle:{lineWidth: 1},props:{w:100, h:47}, textBlock:{x:"w*0.1", y:"2", w:"(w-Math.min(h/2,w/6))*0.8", h:"h-2"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, anchors:[ + {x:"w*0.5", y:"0"}, + {x:"w-Math.min(h/2,w/6)", y:"h*0.5"}, + {x:"w*0.5", y:"h"}, + {x:"0", y:"h*0.5"} +],path:[ + {actions:[ + {action:"move", x:"0", y:"0"}, + {action:"line", x:"w", y:"0"}, + {action:"line", x:"w-Math.min(h/2,w/6)", y:"h*0.5"}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:"0", y:"h"}, + {action:"line", x:"0", y:"0"}, + {action:"close"} + ]} +]});*/ + + +/***胶囊型:Terminator*/Schema.addShape({name:"item", title:"条款", text:"条款", category:"control_policy",lineStyle:{lineWidth: 1}, + props:{w:220, h:50},textBlock:{x:"Math.min(w,h)/3", y:"2", w:"w-(Math.min(w,h)/3)*2", h:"h-2"}, path:[ + {actions:[ + {action:"move", x:"Math.min(w,h)/3+5", y:"0"}, + {action:"line", x:"w-Math.min(w,h)/3-5", y:"0"}, + {action:"curve", x1:"w+Math.min(w,h)/3/3", y1:"0", x2:"w+Math.min(w,h)/3/3", y2:"h", x:"w-Math.min(w,h)/3-5", y:"h"}, + {action:"line", x:"Math.min(w,h)/3+5", y:"h"}, + {action:"curve", x1:"-Math.min(w,h)/3/3", y1:"h", x2:"-Math.min(w,h)/3/3", y2:"0", x:"Math.min(w,h)/3+5", y:"0"}, + {action:"close"} + ]} + + + + + + + + + + + + +]}); diff --git a/com.actionsoft.apps.coe.pal/method/control.policy/fragment/abc.tpl b/com.actionsoft.apps.coe.pal/method/control.policy/fragment/abc.tpl new file mode 100644 index 00000000..8b671488 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.policy/fragment/abc.tpl @@ -0,0 +1,3 @@ + diff --git a/com.actionsoft.apps.coe.pal/method/control.risk/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/control.risk/diagram.attribute.xml new file mode 100644 index 00000000..c670563f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.risk/diagram.attribute.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/control.risk/diagram.import.xml b/com.actionsoft.apps.coe.pal/method/control.risk/diagram.import.xml new file mode 100644 index 00000000..80d95940 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.risk/diagram.import.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/control.risk/diagram.linker.xml b/com.actionsoft.apps.coe.pal/method/control.risk/diagram.linker.xml new file mode 100644 index 00000000..2398aebf --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.risk/diagram.linker.xml @@ -0,0 +1,23 @@ + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/control.risk/diagram.schema.tpl b/com.actionsoft.apps.coe.pal/method/control.risk/diagram.schema.tpl new file mode 100644 index 00000000..7a52e1b2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.risk/diagram.schema.tpl @@ -0,0 +1,42 @@ +Schema.addCategory({name:"control_risk", text:"风险控制图", dataAttributes:[]}); +/*Risk 菱形*/ +/***Schema.addShape({name:"risk", title:"风险",text:"风险", category:"control_risk", props:{w:80, h:80}, fillStyle:{type:"solid", color:"255,153,153"}, textBlock:{x:"10", y:"10", w:"w-20", h:"h-20"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, path:[ + {actions:[ + {action:"move", x:"0", y:"h*0.5"}, + {action:"line", x:"w*0.5", y:"0"}, + {action:"line", x:"w", y:"h*0.5"}, + {action:"line", x:"w*0.5", y:"h"}, + {action:"line", x:"0", y:"h*0.5"}, + {action:"close"} + ]} +]});*/ + +/***下三角锥型:risk*/Schema.addShape({name:"risk", title:"风险", text:"风险", category:"control_risk", props:{w:70, h:60},lineStyle:{lineColor:"255,192,192"},fillStyle:{type: "gradient",gradientType: "linear",beginColor: "255,244,244",endColor: "255,229,229",angle: Math.PI*0.5}, textBlock:{x:"0", y:"0", w:"w", h:"h-Math.min(h,w)/3"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, path:[ + {actions:[ + {action:"move", x:"0", y:"0"}, + {action:"line", x:"w", y:"0"}, + {action:"line", x:"w", y:"h-Math.min(h,w)/3"}, + {action:"line", x:"w*0.5", y:"h"}, + {action:"line", x:"0", y:"h-Math.min(h,w)/3"}, + {action:"line", x:"0", y:"0"}, + {action:"close"} + ]} +]}); + +/*Control 绿色三角形*/ +Schema.addShape({name:"control", title:"控制",text:"控制", category:"control_risk", props:{w:80, h:70},lineStyle:{lineColor:"128,201,144"}, fillStyle:{type: "gradient",gradientType: "linear",beginColor: "242,255,245",endColor: "224,255,231",angle: Math.PI*0.5}, textBlock:{x:"10", y:"h*0.25", w:"w-20", h:"h*0.75"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, + anchors:[ + {x:"w/2", y:"0"}, + {x:"w/2", y:"h"}, + {x:"w*0.25", y:"h/2"}, + {x:"w*0.75", y:"h/2"} + ],path:[ + {actions:[ + {action:"move", x:"w/2", y:"0"}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:"0", y:"h"}, + {action:"close"} + ]} + ]}); + + diff --git a/com.actionsoft.apps.coe.pal/method/control.risk/fragment/abc.tpl b/com.actionsoft.apps.coe.pal/method/control.risk/fragment/abc.tpl new file mode 100644 index 00000000..8b671488 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/control.risk/fragment/abc.tpl @@ -0,0 +1,3 @@ + diff --git a/com.actionsoft.apps.coe.pal/method/data.form/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/data.form/diagram.attribute.xml new file mode 100644 index 00000000..bdd7d127 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/data.form/diagram.attribute.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/data.form/diagram.import.xml b/com.actionsoft.apps.coe.pal/method/data.form/diagram.import.xml new file mode 100644 index 00000000..fd8e8038 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/data.form/diagram.import.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/data.form/diagram.linker.xml b/com.actionsoft.apps.coe.pal/method/data.form/diagram.linker.xml new file mode 100644 index 00000000..f77b4be3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/data.form/diagram.linker.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/data.form/diagram.schema.tpl b/com.actionsoft.apps.coe.pal/method/data.form/diagram.schema.tpl new file mode 100644 index 00000000..ba2ecb47 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/data.form/diagram.schema.tpl @@ -0,0 +1,68 @@ +/** + * Data shapes + */ + +Schema.addCategory({ + name: "data_form", + text: "表单图", + dataAttributes: [] +}); +/* Form*/ +Schema.addShape({name:"form", title:"表单",text:"表单", category:"data_form", props:{w:100, h:70}, + anchors:[ + {x:"w*0.5", y:"0"}, + {x:"w", y:"h*0.5"}, + {x:"w*0.5", y:"h-Math.min(Math.min(w,h)/8,w/12)"}, + {x:"0", y:"h*0.5"} + ], textBlock:{x:"0", y:"0", w:"w", h:"h*0.9"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, path:[ + {actions:[ + {action:"move", x:"0", y:"h-Math.min(Math.min(w,h)/8,w/12)"}, + {action:"line", x:"0", y:"0"}, + {action:"line", x:"w", y:"0"}, + {action:"line", x:"w", y:"h-Math.min(Math.min(w,h)/8,w/12)"}, + {action:"quadraticCurve", x1:"w*0.75", y1:"h-3*Math.min(Math.min(w,h)/8,w/12)", x:"w*0.5", y:"h-Math.min(Math.min(w,h)/8,w/12)"}, + {action:"quadraticCurve", x1:"w*0.25", y1:"h+Math.min(Math.min(w,h)/8,w/12)", x:"0", y:"h-Math.min(Math.min(w,h)/8,w/12)"}, + {action:"close"} + ]} +]}); + +/*Forms*/ +Schema.addShape({name:"forms", title:"多个表单", text:"多个表单", category:"data_form", props:{w:100, h:70}, textBlock:{x:"0", y:"h*0.2", w:"w*0.8", h:"h*0.8"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, + anchors:[ + {x:"w*0.5", y:"h-h/8"}, + {x:"0", y:"h*0.5"}, + {x:"w*0.5", y:"0"}, + {x:"w", y:"h*0.5"} + ], path:[{actions:[ + {action:"move", x:"0", y:"h*0.2"}, + {action:"line", x:"w*0.1", y:"h*0.2"}, + {action:"line", x:"w*0.1", y:"h*0.1"}, + {action:"line", x:"w*0.2", y:"h*0.1"}, + {action:"line", x:"w*0.2", y:"0"}, + {action:"line", x:"w", y:"0"}, + {action:"line", x:"w", y:"h*0.7"}, + {action:"line", x:"w*0.9", y:"h*0.7"}, + {action:"line", x:"w*0.9", y:"h*0.8"}, + {action:"line", x:"w*0.8", y:"h*0.8"}, + {action:"line", x:"w*0.8", y:"h*0.9"}, + {action:"quadraticCurve", x1:"w*0.75*0.8", y1:"h*0.8", x:"w*0.8*0.5", y:"h*0.9"}, + {action:"quadraticCurve", x1:"w*0.25*0.8", y1:"h", x:"0", y:"h*0.9"}, + {action:"line", x:"0", y:"h*0.2"}, + {action:"move", x:"0", y:"h*0.2"}, + {action:"line", x:"w*0.8", y:"h*0.2"}, + {action:"line", x:"w*0.8", y:"h*0.9"}, + {action:"quadraticCurve", x1:"w*0.75*0.8", y1:"h*0.8", x:"w*0.8*0.5", y:"h*0.9"}, + {action:"quadraticCurve", x1:"w*0.25*0.8", y1:"h", x:"0", y:"h*0.9"}, + {action:"line", x:"0", y:"h*0.2"}, + {action:"move", x:"w*0.1", y:"h*0.2"}, + {action:"line", x:"w*0.1", y:"h*0.1"}, + {action:"line", x:"w*0.9", y:"h*0.1"}, + {action:"line", x:"w*0.9", y:"h*0.8"}, + {action:"line", x:"w*0.8", y:"h*0.8"}, + {action:"line", x:"w*0.8", y:"h*0.2"} + ]} +]}); + + + + diff --git a/com.actionsoft.apps.coe.pal/method/data.form/fragment/abc.tpl b/com.actionsoft.apps.coe.pal/method/data.form/fragment/abc.tpl new file mode 100644 index 00000000..8b671488 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/data.form/fragment/abc.tpl @@ -0,0 +1,3 @@ + diff --git a/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.attribute.custom.xml b/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.attribute.custom.xml new file mode 100644 index 00000000..76d34d12 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.attribute.custom.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.attribute.xml new file mode 100644 index 00000000..f75b7b3f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.attribute.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.import.xml b/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.import.xml new file mode 100644 index 00000000..80d95940 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.import.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.linker.xml b/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.linker.xml new file mode 100644 index 00000000..df9b85a7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.linker.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.schema.tpl b/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.schema.tpl new file mode 100644 index 00000000..8d098e02 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/itsystem.normal/diagram.schema.tpl @@ -0,0 +1,146 @@ +/** + * ITSystem shapes + */ + +Schema.addCategory({ + name: "itsystem_normal", + text: "IT系统图", + dataAttributes: [] +}); +/* Database Server*/ +Schema.addShape({name:"database", title:"数据库服务",text:"数据库服务", category:"itsystem_normal", props:{w:100, h:70},textBlock:{x:"w*0.15", y:"0", w:"w*0.7", h:"h"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"},path:[ + {actions:[ + {action:"move", x:"0", y:"h*0.14"}, + {action:"curve", x1:"0", y1:"-h*0.04", x2:"w", y2:"-h*0.04", x:"w", y:"h*0.14"}, + {action:"line", x:"w", y:"h*0.86"}, + {action:"curve", x1:"w", y1:"h*1.04", x2:"0", y2:"h*1.04", x:"0", y:"h*0.86"}, + {action:"line", x:"0", y:"h*0.14"}, + {action:"close"} + ]}, + {actions:[ + {action:"move", x:"w", y:"h*0.14"}, + {action:"curve", x1:"w", y1:"h*0.3", x2:"0", y2:"h*0.3", x:"0", y:"h*0.14"}, + {action:"curve", x1:"0", y1:"-h*0.04", x2:"w", y2:"-h*0.04", x:"w", y:"h*0.14"}, + {action:"close"} + ]}, + {fillStyle:{type:"none"}, lineStyle:{lineWidth:0}, actions:[ + {action:"move", x:"0", y:"h*0.1"}, + {action:"quadraticCurve", x1:"w*0.5", y1:"-h*0.1", x:"w", y:"h*0.1"}, + {action:"line", x:"w", y:"h*0.9"}, + {action:"quadraticCurve", x1:"w*0.5", y1:"h*1.1", x:"0", y:"h*0.9"}, + {action:"line", x:"0", y:"h*0.1"}, + {action:"close"} + ]} +]}); +/*App System 两个中空矩形*/ +Schema.addShape({name:"appSystem", title:"应用系统", text:"应用系统", category:"itsystem_normal", props:{w:100, h:70}, path:[ + {lineStyle:{lineStyle:"solid", lineColor:"120,120,120"}, actions:[ + {action:"move", x:"0", y:"0"}, + {action:"line", x:"w", y:"0"}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:"0", y:"h"}, + {action:"close"} + ]}, + {fillStyle:{type:"none"}, actions:[ + {action:"move", x:"Math.min(w*(1/20),h*(1/15))", y:"Math.min(w*(1/20),h*(1/15))"}, + {action:"line", x:"Math.max(w*(19/20),w-Math.min(w*(1/20),h*(1/15)))", y:"Math.min(h*(1/15),w-w*(19/20))"}, + {action:"line", x:"Math.max(w*(19/20),w-Math.min(w*(1/20),h*(1/15)))", y:"Math.max(h*(14/15),h-Math.min(h*(1/15),w*(1/20)))"}, + {action:"line", x:"Math.min(w*(1/20),h-h*(14/15))", y:"Math.max(h*(14/15),h-Math.min(h*(1/15),w*(1/20)))"}, + {action:"close"} + ]}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:[ + {action:"move", x:"0", y:"0"}, + {action:"line", x:"w", y:"0"}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:"0", y:"h"}, + {action:"close"} + ]} +], drawIcon:function (a, b) { + return[ + {lineStyle:{lineStyle:"solid", lineColor:"120,120,120"}, actions:[ + {action:"move", x:0, y:0}, + {action:"line", x:a, y:0}, + {action:"line", x:a, y:b}, + {action:"line", x:0, y:b}, + {action:"close"} + ]}, + {actions:[ + {action:"move", x:a > 36 ? Math.min(a*(1/20),b*(1/15)) : a * (1 / 9), y:b > 36 ? Math.min(a*(1/20),b*(1/15)) : b * (1 / 7)}, + {action:"line", x:a > 36 ? Math.max(a*(19/20),a-Math.min(a*(1/20),b*(1/15))) : a * (8 / 9), y:b > 36 ? Math.min(b*(1/15),a-a*(19/20)) : b * (1 / 7)}, + {action:"line", x:a > 36 ? Math.max(a*(19/20),a-Math.min(a*(1/20),b*(1/15))) : a * (8 / 9), y:b > 36 ? Math.max(b*(14/15),b-Math.min(b*(1/15),a*(1/20))) : b * (6 / 7)}, + {action:"line", x:a > 36 ? Math.min(a*(1/20),b-b*(14/15)) : a * (1 / 9), y:b > 36 ? Math.max(b*(14/15),b-Math.min(b*(1/15),a*(1/20))) : b * (6 / 7)}, + {action:"close"} + ]} + ] +}}); + +/*App System 两个矩形,内矩形为full*/ +Schema.addShape({name:"device", title:"IT设备", text:"IT设备", category:"itsystem_normal", props:{w:100, h:70},path:[ + {lineStyle:{lineStyle:"solid", lineColor:"120,120,120"}, actions:[ + {action:"move", x:"0", y:"0"}, + {action:"line", x:"w", y:"0"}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:"0", y:"h"}, + {action:"close"} + ]}, + {fillStyle:{type:"solid", color:"200,200,200"}, actions:[ + {action:"move", x:"Math.min(w*(1/20),h*(1/15))", y:"Math.min(w*(1/20),h*(1/15))"}, + {action:"line", x:"Math.max(w*(19/20),w-Math.min(w*(1/20),h*(1/15)))", y:"Math.min(h*(1/15),w-w*(19/20))"}, + {action:"line", x:"Math.max(w*(19/20),w-Math.min(w*(1/20),h*(1/15)))", y:"Math.max(h*(14/15),h-Math.min(h*(1/15),w*(1/20)))"}, + {action:"line", x:"Math.min(w*(1/20),h-h*(14/15))", y:"Math.max(h*(14/15),h-Math.min(h*(1/15),w*(1/20)))"}, + {action:"close"} + ]}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:[ + {action:"move", x:"0", y:"0"}, + {action:"line", x:"w", y:"0"}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:"0", y:"h"}, + {action:"close"} + ]} +], drawIcon:function (a, b) { + return[ + {lineStyle:{lineStyle:"solid", lineColor:"120,120,120"}, actions:[ + {action:"move", x:0, y:0}, + {action:"line", x:a, y:0}, + {action:"line", x:a, y:b}, + {action:"line", x:0, y:b}, + {action:"close"} + ]}, + {fillStyle:{type:"solid", color:"120,120,120"},actions:[ + {action:"move", x:a > 36 ? Math.min(a*(1/20),b*(1/15)) : a * (1 / 9), y:b > 36 ? Math.min(a*(1/20),b*(1/15)) : b * (1 / 7)}, + {action:"line", x:a > 36 ? Math.max(a*(19/20),a-Math.min(a*(1/20),b*(1/15))) : a * (8 / 9), y:b > 36 ? Math.min(b*(1/15),a-a*(19/20)) : b * (1 / 7)}, + {action:"line", x:a > 36 ? Math.max(a*(19/20),a-Math.min(a*(1/20),b*(1/15))) : a * (8 / 9), y:b > 36 ? Math.max(b*(14/15),b-Math.min(b*(1/15),a*(1/20))) : b * (6 / 7)}, + {action:"line", x:a > 36 ? Math.min(a*(1/20),b-b*(14/15)) : a * (1 / 9), y:b > 36 ? Math.max(b*(14/15),b-Math.min(b*(1/15),a*(1/20))) : b * (6 / 7)}, + {action:"close"} + ]} + ] +}}); +/*云服务*/ +Schema.addShape({name:"cloudServer", title:"云服务",text:"云服务", category:"itsystem_normal", props:{w:100, h:60}, textBlock:{x:"w*0.17", y:"h*0.2", w:"w*0.65", h:"h*0.75"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, + anchors:[ + {x:"0",y:"0.735*h"}, + {x:"0.5*w",y:"0.05*h"}, + {x:"w",y:"0.75*h"}, + {x:"w*0.5", y:"h"} + ], path:[ + {lineStyle:{lineStyle:"solid", lineWidth:4},actions:[ + {action:"move", x:"0.17*w", y:"h"}, + {action:"curve", x1:"-0.05*w", y1:"h", x2:"-0.05*w", y2:"0.47*h", x:"0.17*w", y:"0.47*h"}, + {action:"curve", x1:"0.13*w", y1:"0.28*h", x2:"0.29*w", y2:"0.156*h", x:"0.346*w", y:"0.344*h"}, + {action:"curve", x1:"0.39*w", y1:"-0.1*h", x2:"0.85*w", y2:"-0.1*h", x:"0.8*w", y:"0.5*h"}, + {action:"curve", x1:"1.05*w", y1:"0.5*h", x2:"1.05*w", y2:"h", x:"0.8*w", y:"h"}, + {action:"close"} + ]} + ], drawIcon:function (a, b) { + return[ + {lineStyle:{lineStyle:"solid", lineWidth:a > 36 ? 4 : 2.5},actions:[ + {action:"move", x:0.17*a, y:b}, + {action:"curve", x1:-0.05*a, y1:b, x2:-0.05*a, y2:0.47*b, x:0.17*a, y:0.47*b}, + {action:"curve", x1:0.13*a, y1:0.28*b, x2:0.29*a, y2:0.156*b, x:0.346*a, y:0.344*b}, + {action:"curve", x1:0.39*a, y1:-0.1*b, x2:0.85*a, y2:-0.1*b, x:0.8*a, y:0.5*b}, + {action:"curve", x1:1.05*a, y1:0.5*b, x2:1.05*a, y2:b, x:0.8*a, y:b}, + {action:"close"} + ]} + ] + }}); + diff --git a/com.actionsoft.apps.coe.pal/method/itsystem.normal/fragment/abc.tpl b/com.actionsoft.apps.coe.pal/method/itsystem.normal/fragment/abc.tpl new file mode 100644 index 00000000..8b671488 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/itsystem.normal/fragment/abc.tpl @@ -0,0 +1,3 @@ + diff --git a/com.actionsoft.apps.coe.pal/method/org.normal/diagram.attribute.custom.xml b/com.actionsoft.apps.coe.pal/method/org.normal/diagram.attribute.custom.xml new file mode 100644 index 00000000..9e9be1a4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/org.normal/diagram.attribute.custom.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/org.normal/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/org.normal/diagram.attribute.xml new file mode 100644 index 00000000..af2495ff --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/org.normal/diagram.attribute.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/org.normal/diagram.import.xml b/com.actionsoft.apps.coe.pal/method/org.normal/diagram.import.xml new file mode 100644 index 00000000..e8090e86 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/org.normal/diagram.import.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/org.normal/diagram.linker.xml b/com.actionsoft.apps.coe.pal/method/org.normal/diagram.linker.xml new file mode 100644 index 00000000..67401da3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/org.normal/diagram.linker.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/org.normal/diagram.schema.tpl b/com.actionsoft.apps.coe.pal/method/org.normal/diagram.schema.tpl new file mode 100644 index 00000000..a3638ef3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/org.normal/diagram.schema.tpl @@ -0,0 +1,165 @@ +/** + * Organization shapes + */ + +Schema.addCategory({ + name: "org_normal", + text: "ORG 组织结构图", + dataAttributes: [ + {name: "No.", type:"number", value:"", category: "default"}, + {name: "Name", type:"string", value:"", category: "default"}, + {name: "Owner", type:"string", value:"", category: "default"}, + {name: "Link", type:"link", value:"", category: "default"}, + {name: "Memo", type:"string", value:"", category: "default"}, + {name: "Cost", type:"number", value:"", category: "default"}, + {name: "Time", type:"number", value:"", category: "default"}, + {name: "Manner", type:"list", value:"", category: "default"}, + {name: "Department", type:"string", value:"", category: "default"}, + {name: "Input", type:"string", value:"", category: "default"}, + {name: "Output", type:"string", value:"", category: "default"}, + {name: "Risk", type:"string", value:"", category: "default"}, + {name: "Remarks", type:"string", value:"", category: "default"} + ] +}); + +/** + * Organization + */ +/**Schema.addShape({ + name:"organization", + title:"组织", + text:"组织", + category:"org_normal", + props:{w: 120,h: 70}, + lineStyle:{lineWidth: 2, lineColor: "220,87,18"}, + fillStyle:{ + type: "gradient", + gradientType: "linear", + beginColor: "245,236,186", + endColor: "244,208,0", + angle: Math.PI*0.5 + }, + textBlock:{x: "w*0.15", y: "h*0.19", w: "w*0.8", h: "h*0.62"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, + path:[ + { + actions: [ + {action: "move", x: "0", y: "h*0.5"}, + {action: "curve", x1: "0", y1: "-h/6", x2: "w", y2: "-h/6", x: "w", y: "h*0.5"}, + {action: "curve", x1: "w", y1: "h+h/6", x2: "0", y2: "h+h/6", x: "0", y: "h*0.5"}, + {action: "move", x: "w*0.15", y: "h*0.13"}, + {action: "line", x: "w*0.15", y: "h*0.87"} + ] + } + ] +});*/ + +/** + * Position + */ +Schema.addShape({ + name:"position", + title:"岗位", + text:"岗位", + category:"org_normal", + props:{w: 110,h: 50}, + lineStyle:{lineWidth: 2, lineColor: "255,213,172"}, + fillStyle:{ + type: "gradient", + gradientType: "linear", + beginColor: "255,244,233", + endColor: "255,231,207", + angle: Math.PI*0.5 + }, + textBlock:{x: "w*0.14", y: "0", w: "w*0.86", h: "h"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, + path:[ + {actions: {ref: "rectangle"}}, + {actions: [{action: "move", x: "w/6", y: "0"},{action: "line", x: "w/6", y: "h"}]}, + { + lineStyle: {lineWidth: 0}, + fillStyle: {type: "none"}, + actions: {ref: "rectangle"} + } + ] +}); + +/** + * Role + */ +Schema.addShape({ + name:"role", + title:"角色", + text:"角色", + category:"org_normal", + props:{w: 110,h: 50}, + lineStyle:{lineWidth: 2, lineColor: "255,213,172"}, + fillStyle:{ + type: "gradient", + gradientType: "linear", + beginColor: "255,244,233", + endColor: "255,231,207", + angle: Math.PI*0.5 + }, + textBlock:{x: "w*0.14", y: "0", w: "w*0.86", h: "h"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, + path:[ + {actions: {ref: "rectangle"}}, + {lineStyle:{lineStyle:"dashed"},actions: [{action: "move", x: "w/6", y: "0"},{action: "line", x: "w/6", y: "h"}]}, + {lineStyle: {lineWidth: 0},fillStyle: {type: "none"},actions: {ref: "rectangle"} + } + ],drawIcon:function(w, h){ + if (w < 36) { + return [ + {lineStyle:{lineStyle:"solid", lineWidth:2}, actions:[ + {action:"move", x:0, y:0}, + {action:"line", x:w, y:0}, + {action:"line", x:w, y:h}, + {action:"line", x:0, y:h}, + {action:"close"} + ]}, + {actions:[ + {action:"move", x:w / 6, y:"0"}, + {action:"line", x:w / 6, y:"4"}, + {action:"move", x:w / 6, y:"6"}, + {action:"line", x:w / 6, y:"10"}, + {action:"move", x:w / 6, y:"12"}, + {action:"line", x:w / 6, y:"16"} + ]}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"rectangle"} + } + ] + } else { + return [ + {lineStyle:{lineStyle:"solid", lineWidth:2}, actions:[ + {action:"move", x:0, y:0}, + {action:"line", x:w, y:0}, + {action:"line", x:w, y:h}, + {action:"line", x:0, y:h}, + {action:"close"} + ]}, + {lineStyle:{lineStyle:"dashed"},actions: [{action: "move", x: w/6, y: "0"},{action: "line", x: w/6, y: h}]}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"rectangle"} + } + ] + } + } +}); + +/** + * Employee + */ +Schema.addShape({ + name:"employee", + title:"组织", + text:"组织", + category:"org_normal", + props:{w: 110,h: 50}, + lineStyle:{lineWidth: 2, lineColor: "255,213,172"}, + fillStyle:{ + type: "gradient", + gradientType: "linear", + beginColor: "255,244,233", + endColor: "255,231,207", + angle: Math.PI*0.5 + }, + textBlock:{x: "0", y: "0", w: "w", h: "h"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, + path:[{actions: {ref: "rectangle"}}] +}); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/org.normal/fragment/abc.tpl b/com.actionsoft.apps.coe.pal/method/org.normal/fragment/abc.tpl new file mode 100644 index 00000000..8b671488 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/org.normal/fragment/abc.tpl @@ -0,0 +1,3 @@ + diff --git a/com.actionsoft.apps.coe.pal/method/org.role/diagram.attribute.custom.xml b/com.actionsoft.apps.coe.pal/method/org.role/diagram.attribute.custom.xml new file mode 100644 index 00000000..665160d3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/org.role/diagram.attribute.custom.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/org.role/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/org.role/diagram.attribute.xml new file mode 100644 index 00000000..4a601e7e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/org.role/diagram.attribute.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/org.role/diagram.import.xml b/com.actionsoft.apps.coe.pal/method/org.role/diagram.import.xml new file mode 100644 index 00000000..f8cd15ba --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/org.role/diagram.import.xml @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/org.role/diagram.linker.xml b/com.actionsoft.apps.coe.pal/method/org.role/diagram.linker.xml new file mode 100644 index 00000000..621983bf --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/org.role/diagram.linker.xml @@ -0,0 +1,23 @@ + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/org.role/diagram.schema.tpl b/com.actionsoft.apps.coe.pal/method/org.role/diagram.schema.tpl new file mode 100644 index 00000000..31f4c1b9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/org.role/diagram.schema.tpl @@ -0,0 +1,5 @@ +Schema.addCategory({name:"org_role", text:"角色图", dataAttributes:[]}); +/*Risk 菱形*/ +Schema.addShape({name:"role", title:"角色",text:"角色", category:"org_role", props:{w:110, h:50},lineStyle:{lineColor:"128,201,144"}, fillStyle:{type: "gradient",gradientType: "linear",beginColor: "242,255,245",endColor: "224,255,231",angle: Math.PI*0.5}, textBlock:{x:"10", y:"10", w:"w-20", h:"h-20"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, path:[ + {actions:{ref:"rectangle"}} +]}); diff --git a/com.actionsoft.apps.coe.pal/method/org.role/fragment/abc.tpl b/com.actionsoft.apps.coe.pal/method/org.role/fragment/abc.tpl new file mode 100644 index 00000000..8b671488 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/org.role/fragment/abc.tpl @@ -0,0 +1,3 @@ + diff --git a/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.attribute.custom.xml b/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.attribute.custom.xml new file mode 100644 index 00000000..e67f9c95 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.attribute.custom.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.attribute.xml new file mode 100644 index 00000000..3c2970be --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.attribute.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.import.xml b/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.import.xml new file mode 100644 index 00000000..d8eb7051 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.import.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.linker.xml b/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.linker.xml new file mode 100644 index 00000000..1d61b3df --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.linker.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.schema.tpl b/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.schema.tpl new file mode 100644 index 00000000..f823eb5f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.bpmn2/diagram.schema.tpl @@ -0,0 +1,1431 @@ +Schema.addCategory({name:"process_bpmn2", text:"BPMN流程图", dataAttributes:[ + {name:"Name", type:"string", value:"", category:"default"}, + {name:"documentation", type:"string", value:"", category:"default"}, + {name:"AWSProperties", type:"string", value:"", category:"default"}, +]}); +Schema.addGlobalCommand("inneround", [ + {action:"move", x:"3", y:"h*0.5"}, + {action:"curve", x1:"3", y1:"-h/6+4", x2:"w-3", y2:"-h/6+4", x:"w-3", y:"h*0.5"}, + {action:"curve", x1:"w-3", y1:"h+h/6-4", x2:"3", y2:"h+h/6-4", x:"3", y:"h*0.5"} +]); +Schema.addGlobalCommand("message0", [ + {action:"move", x:"w*0.5-w*0.3", y:"h*0.5-h*0.2"}, + {action:"line", x:"w*0.5+w*0.3", y:"h*0.5-h*0.2"}, + {action:"line", x:"w*0.5+w*0.3", y:"h*0.5+h*0.2"}, + {action:"line", x:"w*0.5-w*0.3", y:"h*0.5+h*0.2"}, + {action:"line", x:"w*0.5-w*0.3", y:"h*0.5-h*0.2"}, + {action:"close"}, + {action:"move", x:"w*0.5", y:"h*0.5"}, + {action:"line", x:"w*0.5+w*0.3", y:"h*0.5-h*0.2"}, + {action:"move", x:"w*0.5", y:"h*0.5"}, + {action:"line", x:"w*0.5-w*0.3", y:"h*0.5-h*0.2"} +]); +Schema.addGlobalCommand("timer0", [ + {action:"move", x:"w*0.5", y:"h*0.5"}, + {action:"move", x:"w*0.5-w*0.3", y:"h*0.5"}, + {action:"curve", x1:"w*0.5-w*0.3", y1:"h*0.5-h*0.6*2/3", x2:"w*0.5+w*0.3", y2:"h*0.5-h*0.6*2/3", x:"w*0.5+w*0.3", y:"h*0.5"}, + {action:"curve", x1:"w*0.5+w*0.3", y1:"h*0.5+h*0.6*2/3", x2:"w*0.5-w*0.3", y2:"h*0.5+h*0.6*2/3", x:"w*0.5-w*0.3", y:"h*0.5"}, + {action:"close"} +]); +Schema.addGlobalCommand("timer0_needle", [ + {action:"move", x:"w*0.5+w*0.15", y:"h*0.5"}, + {action:"line", x:"w*0.5", y:"h*0.5"}, + {action:"line", x:"w*0.5+w*0.25*Math.cos(Math.PI/12*5)", y:"h*0.5-h*0.25*Math.sin(Math.PI/12*5)"}, + {action:"line", x:"w*0.5", y:"h*0.5"} +]); +Schema.addGlobalCommand("timer0_num", [ + {action:"move", x:"w*0.5+w*0.3*Math.cos(0)", y:"h*0.5+h*0.3*Math.sin(0)"}, + {action:"line", x:"w*0.5+w*0.25*Math.cos(0)", y:"h*0.5+h*0.25*Math.sin(0)"}, + {action:"move", x:"w*0.5+w*0.3*Math.cos(Math.PI/6)", y:"h*0.5+h*0.3*Math.sin(Math.PI/6)"}, + {action:"line", x:"w*0.5+w*0.25*Math.cos(Math.PI/6)", y:"h*0.5+h*0.25*Math.sin(Math.PI/6)"}, + {action:"move", x:"w*0.5+w*0.3*Math.cos(Math.PI/6*2)", y:"h*0.5+h*0.3*Math.sin(Math.PI/6*2)"}, + {action:"line", x:"w*0.5+w*0.25*Math.cos(Math.PI/6*2)", y:"h*0.5+h*0.25*Math.sin(Math.PI/6*2)"}, + {action:"move", x:"w*0.5+w*0.3*Math.cos(Math.PI/6*3)", y:"h*0.5+h*0.3*Math.sin(Math.PI/6*3)"}, + {action:"line", x:"w*0.5+w*0.25*Math.cos(Math.PI/6*3)", y:"h*0.5+h*0.25*Math.sin(Math.PI/6*3)"}, + {action:"move", x:"w*0.5+w*0.3*Math.cos(Math.PI/6*4)", y:"h*0.5+h*0.3*Math.sin(Math.PI/6*4)"}, + {action:"line", x:"w*0.5+w*0.25*Math.cos(Math.PI/6*4)", y:"h*0.5+h*0.25*Math.sin(Math.PI/6*4)"}, + {action:"move", x:"w*0.5+w*0.3*Math.cos(Math.PI/6*5)", y:"h*0.5+h*0.3*Math.sin(Math.PI/6*5)"}, + {action:"line", x:"w*0.5+w*0.25*Math.cos(Math.PI/6*5)", y:"h*0.5+h*0.25*Math.sin(Math.PI/6*5)"}, + {action:"move", x:"w*0.5+w*0.3*Math.cos(Math.PI/6*6)", y:"h*0.5+h*0.3*Math.sin(Math.PI/6*6)"}, + {action:"line", x:"w*0.5+w*0.25*Math.cos(Math.PI/6*6)", y:"h*0.5+h*0.25*Math.sin(Math.PI/6*6)"}, + {action:"move", x:"w*0.5+w*0.3*Math.cos(Math.PI/6*7)", y:"h*0.5+h*0.3*Math.sin(Math.PI/6*7)"}, + {action:"line", x:"w*0.5+w*0.25*Math.cos(Math.PI/6*7)", y:"h*0.5+h*0.25*Math.sin(Math.PI/6*7)"}, + {action:"move", x:"w*0.5+w*0.3*Math.cos(Math.PI/6*8)", y:"h*0.5+h*0.3*Math.sin(Math.PI/6*8)"}, + {action:"line", x:"w*0.5+w*0.25*Math.cos(Math.PI/6*8)", y:"h*0.5+h*0.25*Math.sin(Math.PI/6*8)"}, + {action:"move", x:"w*0.5+w*0.3*Math.cos(Math.PI/6*9)", y:"h*0.5+h*0.3*Math.sin(Math.PI/6*9)"}, + {action:"line", x:"w*0.5+w*0.25*Math.cos(Math.PI/6*9)", y:"h*0.5+h*0.25*Math.sin(Math.PI/6*9)"}, + {action:"move", x:"w*0.5+w*0.3*Math.cos(Math.PI/6*10)", y:"h*0.5+h*0.3*Math.sin(Math.PI/6*10)"}, + {action:"line", x:"w*0.5+w*0.25*Math.cos(Math.PI/6*10)", y:"h*0.5+h*0.25*Math.sin(Math.PI/6*10)"}, + {action:"move", x:"w*0.5+w*0.3*Math.cos(Math.PI/6*11)", y:"h*0.5+h*0.3*Math.sin(Math.PI/6*11)"}, + {action:"line", x:"w*0.5+w*0.25*Math.cos(Math.PI/6*11)", y:"h*0.5+h*0.25*Math.sin(Math.PI/6*11)"} +]); +Schema.addGlobalCommand("conditional0", [ + {action:"move", x:"w*0.5", y:"h*0.5"}, + {action:"move", x:"w*0.5-w*0.25", y:"h*0.5-h*0.25"}, + {action:"line", x:"w*0.5+w*0.25", y:"h*0.5-h*0.25"}, + {action:"line", x:"w*0.5+w*0.25", y:"h*0.5+h*0.25"}, + {action:"line", x:"w*0.5-w*0.25", y:"h*0.5+h*0.25"}, + {action:"line", x:"w*0.5-w*0.25", y:"h*0.5-h*0.25"}, + {action:"close"}, + {action:"move", x:"w*0.5-w*0.2", y:"h*0.5-h*0.05"}, + {action:"line", x:"w*0.5+w*0.2", y:"h*0.5-h*0.05"}, + {action:"move", x:"w*0.5-w*0.2", y:"h*0.5-h*0.16"}, + {action:"line", x:"w*0.5+w*0.2", y:"h*0.5-h*0.16"}, + {action:"move", x:"w*0.5-w*0.2", y:"h*0.5+h*0.05"}, + {action:"line", x:"w*0.5+w*0.2", y:"h*0.5+h*0.05"}, + {action:"move", x:"w*0.5-w*0.2", y:"h*0.5+h*0.16"}, + {action:"line", x:"w*0.5+w*0.2", y:"h*0.5+h*0.16"} +]); +Schema.addGlobalCommand("escalation0", [ + {action:"move", x:"w*0.5", y:"h*0.5"}, + {action:"line", x:"w*0.5+w*0.2", y:"h*0.5+h*0.25"}, + {action:"line", x:"w*0.5", y:"h*0.5-h*0.25"}, + {action:"line", x:"w*0.5-w*0.2", y:"h*0.5+h*0.25"}, + {action:"line", x:"w*0.5", y:"h*0.5"}, + {action:"close"} +]); +Schema.addGlobalCommand("signal0", [ + {action:"move", x:"w*0.5", y:"h*0.5-h*0.32"}, + {action:"line", x:"w*0.5+w*0.28", y:"h*0.5+h*0.15"}, + {action:"line", x:"w*0.5-w*0.28", y:"h*0.5+h*0.15"}, + {action:"line", x:"w*0.5", y:"h*0.5-h*0.32"}, + {action:"close"} +]); +Schema.addGlobalCommand("compensation0", [ + {action:"move", x:"w*0.5", y:"h*0.5"}, + {action:"line", x:"w*0.5+w*0.25", y:"h*0.5-h*0.2"}, + {action:"line", x:"w*0.5+w*0.25", y:"h*0.5+h*0.2"}, + {action:"line", x:"w*0.5", y:"h*0.5"}, + {action:"close"}, + {action:"move", x:"w*0.5-w*0.25", y:"h*0.5"}, + {action:"line", x:"w*0.5", y:"h*0.5-h*0.2"}, + {action:"line", x:"w*0.5", y:"h*0.5+h*0.2"}, + {action:"line", x:"w*0.5-w*0.25", y:"h*0.5"}, + {action:"close"} +]); +Schema.addGlobalCommand("error0", [ + {action:"move", x:"w*0.5", y:"h*0.5"}, + {action:"move", x:"w*0.5+w*0.1", y:"h*0.5"}, + {action:"line", x:"w*0.5+w*0.28", y:"h*0.5-h*0.2"}, + {action:"line", x:"w*0.5+w*0.1", y:"h*0.5+h*0.2"}, + {action:"line", x:"w*0.5-w*0.1", y:"h*0.5"}, + {action:"line", x:"w*0.5-w*0.28", y:"h*0.5+h*0.2"}, + {action:"line", x:"w*0.5-w*0.1", y:"h*0.5-h*0.2"}, + {action:"line", x:"w*0.5+w*0.1", y:"h*0.5"}, + {action:"close"} +]); +Schema.addGlobalCommand("multiple0", [ + {action:"move", x:"w*0.5", y:"h*0.5-h*0.28"}, + {action:"line", x:"w*0.5+w*0.28", y:"h*0.5-h*0.08"}, + {action:"line", x:"w*0.5+w*0.17", y:"h*0.5+h*0.25"}, + {action:"line", x:"w*0.5-w*0.17", y:"h*0.5+h*0.25"}, + {action:"line", x:"w*0.5-w*0.28", y:"h*0.5-h*0.08"}, + {action:"line", x:"w*0.5", y:"h*0.5-h*0.28"}, + {action:"close"} +]); +Schema.addGlobalCommand("parallel0", [ + {action:"move", x:"w*0.5+w*0.07", y:"h*0.5-h*0.07"}, + {action:"line", x:"w*0.5+w*0.27", y:"h*0.5-h*0.07"}, + {action:"line", x:"w*0.5+w*0.27", y:"h*0.5+h*0.07"}, + {action:"line", x:"w*0.5+w*0.07", y:"h*0.5+h*0.07"}, + {action:"line", x:"w*0.5+w*0.07", y:"h*0.5+h*0.27"}, + {action:"line", x:"w*0.5-w*0.07", y:"h*0.5+h*0.27"}, + {action:"line", x:"w*0.5-w*0.07", y:"h*0.5+h*0.07"}, + {action:"line", x:"w*0.5-w*0.27", y:"h*0.5+h*0.07"}, + {action:"line", x:"w*0.5-w*0.27", y:"h*0.5-h*0.07"}, + {action:"line", x:"w*0.5-w*0.07", y:"h*0.5-h*0.07"}, + {action:"line", x:"w*0.5-w*0.07", y:"h*0.5-h*0.27"}, + {action:"line", x:"w*0.5+w*0.07", y:"h*0.5-h*0.27"}, + {action:"line", x:"w*0.5+w*0.07", y:"h*0.5-h*0.07"}, + {action:"close"} +]); +Schema.addGlobalCommand("gateway0", [ + {action:"move", x:"0", y:"h*0.5"}, + {action:"line", x:"w*0.5", y:"0"}, + {action:"line", x:"w", y:"h*0.5"}, + {action:"line", x:"w*0.5", y:"h"}, + {action:"line", x:"0", y:"h*0.5"}, + {action:"close"} +]); +Schema.addGlobalCommand("link3", [ + {action:"move", x:"w*0.5", y:"h*0.5"}, + {action:"move", x:"w*0.5-w*0.26", y:"h*0.5-h*0.08"}, + {action:"line", x:"w*0.5+w*0.16", y:"h*0.5-h*0.08"}, + {action:"line", x:"w*0.5+w*0.16", y:"h*0.5-h*0.18"}, + {action:"line", x:"w*0.5+w*0.26", y:"h*0.5"}, + {action:"line", x:"w*0.5+w*0.16", y:"h*0.5+h*0.18"}, + {action:"line", x:"w*0.5+w*0.16", y:"h*0.5+h*0.08"}, + {action:"line", x:"w*0.5-w*0.26", y:"h*0.5+h*0.08"}, + {action:"close"} +]); +Schema.addGlobalCommand("cancel3", [ + {action:"move", x:"w*0.5", y:"h*0.5"}, + {action:"move", x:"w*0.5", y:"h*0.5-h*0.1"}, + {action:"line", x:"w*0.5+w*0.16", y:"h*0.5-h*0.25"}, + {action:"line", x:"w*0.5+w*0.25", y:"h*0.5-h*0.16"}, + {action:"line", x:"w*0.5+w*0.1", y:"h*0.5"}, + {action:"line", x:"w*0.5+w*0.25", y:"h*0.5+h*0.16"}, + {action:"line", x:"w*0.5+w*0.16", y:"h*0.5+h*0.25"}, + {action:"line", x:"w*0.5", y:"h*0.5+h*0.1"}, + {action:"line", x:"w*0.5-w*0.16", y:"h*0.5+h*0.25"}, + {action:"line", x:"w*0.5-w*0.25", y:"h*0.5+h*0.16"}, + {action:"line", x:"w*0.5-w*0.1", y:"h*0.5"}, + {action:"line", x:"w*0.5-w*0.25", y:"h*0.5-h*0.16"}, + {action:"line", x:"w*0.5-w*0.16", y:"h*0.5-h*0.25"}, + {action:"line", x:"w*0.5", y:"h*0.5-h*0.1"}, + {action:"close"} +]); +Schema.addGlobalCommand("message4", [ + {action:"move", x:"w*0.5", y:"h*0.5"}, + {action:"move", x:"w*0.5-w*0.3", y:"h*0.5-h*0.2"}, + {action:"line", x:"w*0.5+w*0.3", y:"h*0.5-h*0.2"}, + {action:"line", x:"w*0.5+w*0.3", y:"h*0.5+h*0.2"}, + {action:"line", x:"w*0.5-w*0.3", y:"h*0.5+h*0.2"}, + {action:"line", x:"w*0.5-w*0.3", y:"h*0.5-h*0.2"}, + {action:"close"} +]); +Schema.addGlobalCommand("message4_0", [ + {action:"move", x:"w*0.5-w*0.3", y:"h*0.5-h*0.2"}, + {action:"line", x:"w*0.5", y:"h*0.5"}, + {action:"line", x:"w*0.5+w*0.3", y:"h*0.5-h*0.2"}, + {action:"line", x:"w*0.5", y:"h*0.5"}, + {action:"close"} +]); +Schema.addGlobalCommand("g_round", [ + {action:"move", x:"w*0.5 - w*0.25", y:"h*0.5"}, + {action:"curve", x1:"w*0.5 - w*0.25", y1:"h*0.5 - h*2/3*0.5", x2:"w*0.5 + w*0.25", y2:"h*0.5 - h*2/3*0.5", x:"w*0.5 + w*0.25", y:"h*0.5"}, + {action:"curve", x1:"w*0.5 + w*0.25", y1:"h*0.5 + h*2/3*0.5", x2:"w*0.5 - w*0.25", y2:"h*0.5 + h*2/3*0.5", x:"w*0.5 - w*0.25", y:"h*0.5"}, + {action:"close"} +]); +Schema.addGlobalCommand("manual_task", [ + {action:"move", x:"100*0.15- 100*0.08", y:"60*0.2"}, + {action:"line", x:"100*0.15- 100*0.04", y:"60*0.2"}, + {action:"line", x:"100*0.15+ 100*0.01", y:"60*0.13"}, + {action:"line", x:"100*0.15+ 100*0.04", y:"60*0.13"}, + {action:"line", x:"100*0.15 + 100*0.04", y:"60*0.17"}, + {action:"line", x:"100*0.15+ 100*0.01", y:"60*0.17"}, + {action:"line", x:"100*0.15+ 100*0.1", y:"60*0.17"}, + {action:"line", x:"100*0.15+ 100*0.1", y:"60*0.21"}, + {action:"line", x:"100*0.15+ 100*0.01", y:"60*0.21"}, + {action:"line", x:"100*0.15+ 100*0.06", y:"60*0.21"}, + {action:"line", x:"100*0.15+ 100*0.06", y:"60*0.25"}, + {action:"line", x:"100*0.15+ 100*0.01", y:"60*0.25"}, + {action:"line", x:"100*0.15+ 100*0.06", y:"60*0.25"}, + {action:"line", x:"100*0.15+ 100*0.06", y:"60*0.29"}, + {action:"line", x:"100*0.15+ 100*0.06", y:"60*0.29"}, + {action:"line", x:"100*0.15+ 100*0.04", y:"60*0.29"}, + {action:"line", x:"100*0.15+ 100*0.04", y:"60*0.33"}, + {action:"line", x:"100*0.15- 100*0.04", y:"60*0.33"}, + {action:"line", x:"100*0.15- 100*0.08", y:"60*0.28"}, + {action:"line", x:"100*0.15- 100*0.08", y:"60*0.2"}, + {action:"close"} +]); +Schema.addGlobalCommand("receive_task", [ + {action:"move", x:"100*0.15+ 100*0.08", y:"60*0.24- 60*0.1"}, + {action:"line", x:"100*0.15- 100*0.08", y:"60*0.24- 60*0.1"}, + {action:"line", x:"100*0.15 - 100*0.08", y:"60*0.24 + 60*0.08"}, + {action:"line", x:"100*0.15+ 100*0.08", y:"60*0.24 + 60*0.08"}, + {action:"line", x:"100*0.15+ 100*0.08", y:"60*0.24- 60*0.1"}, + {action:"close"}, + {action:"line", x:"100*0.15 - 0", y:"60*0.24- 60*0.01"}, + {action:"line", x:"100*0.15 - 100*0.08", y:"60*0.24- 60*0.1"}, + {action:"line", x:"100*0.15 - 0", y:"60*0.24- 60*0.01"}, + {action:"close"} +]); +Schema.addGlobalCommand("receive_task_dark", [ + {action:"move", x:"100*0.15+ 100*0.08", y:"60*0.24- 60*0.1"}, + {action:"line", x:"100*0.15- 100*0.08", y:"60*0.24- 60*0.1"}, + {action:"line", x:"100*0.15 - 100*0.08", y:"60*0.24 + 60*0.08"}, + {action:"line", x:"100*0.15+ 100*0.08", y:"60*0.24 + 60*0.08"}, + {action:"line", x:"100*0.15+ 100*0.08", y:"60*0.24- 60*0.1"}, + {action:"close"}, + {action:"line", x:"100*0.15 - 0", y:"60*0.24- 60*0.01"}, + {action:"line", x:"100*0.15 - 100*0.08", y:"60*0.24- 60*0.1"}, + {action:"line", x:"100*0.15 - 0", y:"60*0.24- 60*0.01"}, + {action:"close"} +]); +Schema.addGlobalCommand("service_task", [ + {action:"move", x:"100*0.09 -100*0.26 *0.16", y:"60*0.14 + 60/5*8 *0.16 *0.16"}, + {action:"line", x:"100*0.09 -100*0.28 *0.16", y:"60*0.14 + 60/5*8 *0.11 *0.16"}, + {action:"line", x:"100*0.09 - 100*0.26 *0.16", y:"60*0.14 + 60/5*8 *0.05 *0.16"}, + {action:"line", x:"100*0.09 -100*0.17 *0.16", y:"60*0.14 + 60/5*8 *0.05 *0.16"}, + {action:"line", x:"100*0.09 -100*0.12 *0.16", y:"60*0.14 -60/5*8 *0.02 *0.16"}, + {action:"line", x:"100*0.09 -100*0.21 *0.16", y:"60*0.14 -60/5*8 *0.13 *0.16"}, + {action:"line", x:"100*0.09 -100*0.18 *0.16", y:"60*0.14 -60/5*8 *0.17 *0.16"}, + {action:"line", x:"100*0.09 -100*0.13 *0.16", y:"60*0.14 -60/5*8 *0.19 *0.16"}, + {action:"line", x:"100*0.09 -100*0.05 *0.16", y:"60*0.14 -60/5*8 *0.11 *0.16"}, + {action:"line", x:"100*0.09 +100*0.03 *0.16", y:"60*0.14 -60/5*8 *0.15 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.04 *0.16", y:"60*0.14 -60/5*8 *0.25 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.10 *0.16", y:"60*0.14 -60/5*8 *0.27 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.15 *0.16", y:"60*0.14 -60/5*8 *0.25 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.15 *0.16", y:"60*0.14 -60/5*8 *0.15 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.23 *0.16", y:"60*0.14 -60/5*8 *0.12 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.30 *0.16", y:"60*0.14 -60/5*8 *0.19 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.35 *0.16", y:"60*0.14 -60/5*8 *0.16 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.38 *0.16", y:"60*0.14 -60/5*8 *0.12 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.32 *0.16", y:"60*0.14 -60/5*8 *0.05 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.37 *0.16", y:"60*0.14 + 60/5*8 *0.05 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.46 *0.16", y:"60*0.14 + 60/5*8 *0.05 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.48 *0.16", y:"60*0.14 + 60/5*8 *0.10 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.46 *0.16", y:"60*0.14 + 60/5*8 *0.16 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.37 *0.16", y:"60*0.14 + 60/5*8 *0.16 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.33 *0.16", y:"60*0.14 + 60/5*8 *0.25 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.38 *0.16", y:"60*0.14 + 60/5*8 *0.31 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.36 *0.16", y:"60*0.14 + 60/5*8 *0.37 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.29 *0.16", y:"60*0.14 + 60/5*8 *0.39 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.25 *0.16", y:"60*0.14 + 60/5*8 *0.35 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.16 *0.16", y:"60*0.14 + 60/5*8 *0.37 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.16 *0.16", y:"60*0.14 + 60/5*8 *0.46 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.10 *0.16", y:"60*0.14 + 60/5*8 *0.48 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.04 *0.16", y:"60*0.14 + 60/5*8 *0.46 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.04 *0.16", y:"60*0.14 + 60/5*8 *0.37 *0.16"}, + {action:"line", x:"100*0.09 -100*0.04 *0.16", y:"60*0.14 + 60/5*8 *0.33 *0.16"}, + {action:"line", x:"100*0.09 -100*0.12 *0.16", y:"60*0.14 + 60/5*8 *0.38 *0.16"}, + {action:"line", x:"100*0.09 -100*0.18 *0.16", y:"60*0.14 + 60/5*8 *0.37 *0.16"}, + {action:"line", x:"100*0.09 -100*0.21 *0.16", y:"60*0.14 + 60/5*8 *0.33 *0.16"}, + {action:"line", x:"100*0.09 -100*0.14 *0.16", y:"60*0.14 + 60/5*8 *0.25 *0.16"}, + {action:"line", x:"100*0.09 -100*0.16 *0.16", y:"60*0.14 + 60/5*8 *0.16 *0.16"}, + {action:"line", x:"100*0.09 -100*0.26 *0.16", y:"60*0.14 + 60/5*8 *0.16 *0.16"}, + {action:"close"}, + {action:"move", x:"100*0.09 -100*0.01 *0.16", y:"60*0.14 + 60/5*8 *0.01 *0.16"}, + {action:"line", x:"100*0.09 +100*0.01 *0.16", y:"60*0.14 - 60*0.01 /5*8 *0.16"}, + {action:"line", x:"100*0.09 +100*0.04 *0.16", y:"60*0.14 + 60*0.01 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.08 *0.16", y:"60*0.14 + 60*0.01 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.08 *0.16", y:"60*0.14 - 60*0.03 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.12 *0.16", y:"60*0.14 - 60*0.03 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.12 *0.16", y:"60*0.14 - 60*0.0 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.15 *0.16", y:"60*0.14 + 60*0.02 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.18 *0.16", y:"60*0.14 -60*0.01 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.22 *0.16", y:"60*0.14 + 60*0.01 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.18 *0.16", y:"60*0.14 + 60*0.04 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.20 *0.16", y:"60*0.14 + 60*0.08 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.25 *0.16", y:"60*0.14 + 60*0.08 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.25 *0.16", y:"60*0.14 + 60*0.12 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.20 *0.16", y:"60*0.14 + 60*0.12 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.18 *0.16", y:"60*0.14 + 60*0.16 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.21 *0.16", y:"60*0.14 + 60*0.19 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.18 *0.16", y:"60*0.14 + 60*0.22 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.15 *0.16", y:"60*0.14 + 60*0.19 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.12 *0.16", y:"60*0.14 + 60*0.21 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.12 *0.16", y:"60*0.14 + 60*0.25 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.08 *0.16", y:"60*0.14 + 60*0.26 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.08 *0.16", y:"60*0.14 + 60*0.21 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.05 *0.16", y:"60*0.14 + 60*0.18 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.01 *0.16", y:"60*0.14 + 60*0.22 /5*8 *0.16"}, + {action:"line", x:"100*0.09 - 100*0.02 *0.16", y:"60*0.14 + 60*0.19 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.0 *0.16", y:"60*0.14 + 60*0.16 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.0 *0.16", y:"60*0.14 + 60*0.12 /5*8 *0.16"}, + {action:"line", x:"100*0.09 -100*0.04 *0.16", y:"60*0.14 + 60*0.12 /5*8 *0.16"}, + {action:"line", x:"100*0.09 -100*0.04 *0.16", y:"60*0.14 + 60*0.08 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0. *0.16", y:"60*0.14 + 60*0.08 /5*8 *0.16"}, + {action:"line", x:"100*0.09 + 100*0.01 *0.16", y:"60*0.14 + 60*0.05 /5*8 *0.16"}, + {action:"line", x:"100*0.09 -100*0.01 *0.16", y:"60*0.14 + 60*0.01 /5*8 *0.16"}, + {action:"close"}, + {action:"move", x:"100*0.15 -100*0.26 *0.16", y:"60*0.24 + 60/5*8 *0.16 *0.16"}, + {action:"line", x:"100*0.15 -100*0.28 *0.16", y:"60*0.24 + 60/5*8 *0.11 *0.16"}, + {action:"line", x:"100*0.15 -100*0.26 *0.16", y:"60*0.24 + 60/5*8 *0.05 *0.16"}, + {action:"line", x:"100*0.15 -100*0.17 *0.16", y:"60*0.24 + 60/5*8 *0.05 *0.16"}, + {action:"line", x:"100*0.15 -100*0.12 *0.16", y:"60*0.24 -60/5*8 *0.02 *0.16"}, + {action:"line", x:"100*0.15 -100*0.21 *0.16", y:"60*0.24 -60/5*8 *0.13 *0.16"}, + {action:"line", x:"100*0.15 -100*0.18 *0.16", y:"60*0.24 -60/5*8 *0.17 *0.16"}, + {action:"line", x:"100*0.15 -100*0.13 *0.16", y:"60*0.24 -60/5*8 *0.19 *0.16"}, + {action:"line", x:"100*0.15 -100*0.05 *0.16", y:"60*0.24 -60/5*8 *0.11 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.03 *0.16", y:"60*0.24 -60/5*8 *0.15 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.04 *0.16", y:"60*0.24 -60/5*8 *0.25 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.10 *0.16", y:"60*0.24 -60/5*8 *0.27 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.15 *0.16", y:"60*0.24 -60/5*8 *0.25 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.15 *0.16", y:"60*0.24 -60/5*8 *0.15 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.23 *0.16", y:"60*0.24 -60/5*8 *0.12 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.30 *0.16", y:"60*0.24 -60/5*8 *0.19 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.35 *0.16", y:"60*0.24 -60/5*8 *0.16 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.38 *0.16", y:"60*0.24 -60/5*8 *0.12 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.32 *0.16", y:"60*0.24 -60/5*8 *0.05 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.37 *0.16", y:"60*0.24 +60/5*8 *0.05 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.46 *0.16", y:"60*0.24 +60/5*8 *0.05 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.48 *0.16", y:"60*0.24 +60/5*8 *0.10 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.46 *0.16", y:"60*0.24 +60/5*8 *0.16 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.37 *0.16", y:"60*0.24 +60/5*8 *0.16 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.33 *0.16", y:"60*0.24 +60/5*8 *0.25 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.38 *0.16", y:"60*0.24 +60/5*8 *0.31 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.36 *0.16", y:"60*0.24 +60/5*8 *0.37 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.29 *0.16", y:"60*0.24 +60/5*8 *0.39 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.25 *0.16", y:"60*0.24 +60/5*8 *0.35 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.16 *0.16", y:"60*0.24 +60/5*8 *0.37 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.16 *0.16", y:"60*0.24 +60/5*8 *0.46 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.10 *0.16", y:"60*0.24 +60/5*8 *0.48 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.04 *0.16", y:"60*0.24 +60/5*8 *0.46 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.04 *0.16", y:"60*0.24 +60/5*8 *0.37 *0.16"}, + {action:"line", x:"100*0.15 -100*0.04 *0.16", y:"60*0.24 +60/5*8 *0.33 *0.16"}, + {action:"line", x:"100*0.15 -100*0.12 *0.16", y:"60*0.24 +60/5*8 *0.38 *0.16"}, + {action:"line", x:"100*0.15 -100*0.18 *0.16", y:"60*0.24 +60/5*8 *0.37 *0.16"}, + {action:"line", x:"100*0.15 -100*0.21 *0.16", y:"60*0.24 +60/5*8 *0.33 *0.16"}, + {action:"line", x:"100*0.15 -100*0.14 *0.16", y:"60*0.24 +60/5*8 *0.25 *0.16"}, + {action:"line", x:"100*0.15 -100*0.16 *0.16", y:"60*0.24 +60/5*8 *0.16 *0.16"}, + {action:"line", x:"100*0.15 -100*0.26 *0.16", y:"60*0.24 +60/5*8 *0.16 *0.16"}, + {action:"close"}, + {action:"move", x:"100*0.15 -100*0.01 *0.16", y:"60*0.24 +60/5*8 *0.01 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.01 *0.16", y:"60*0.24 - 60*0.01 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.04 *0.16", y:"60*0.24 + 60*0.01 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.08 *0.16", y:"60*0.24 + 60*0.01 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.08 *0.16", y:"60*0.24 - 60*0.03 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.12 *0.16", y:"60*0.24 - 60*0.03 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.12 *0.16", y:"60*0.24 - 60*0.0 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.15 *0.16", y:"60*0.24 + 60*0.02 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.18 *0.16", y:"60*0.24 -60*0.01 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.22 *0.16", y:"60*0.24 + 60*0.01 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.18 *0.16", y:"60*0.24 + 60*0.04 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.20 *0.16", y:"60*0.24 + 60*0.08 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.25 *0.16", y:"60*0.24 + 60*0.08 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.25 *0.16", y:"60*0.24 + 60*0.12 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.20 *0.16", y:"60*0.24 + 60*0.12 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.18 *0.16", y:"60*0.24 + 60*0.16 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.21 *0.16", y:"60*0.24 + 60*0.19 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.18 *0.16", y:"60*0.24 + 60*0.22 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.15 *0.16", y:"60*0.24 + 60*0.19 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.12 *0.16", y:"60*0.24 + 60*0.21 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.12 *0.16", y:"60*0.24 + 60*0.25 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.08 *0.16", y:"60*0.24 + 60*0.26 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.08 *0.16", y:"60*0.24 + 60*0.21 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.05 *0.16", y:"60*0.24 + 60*0.18 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.01 *0.16", y:"60*0.24 + 60*0.22 /5*8 *0.16"}, + {action:"line", x:"100*0.15 - 100*0.02 *0.16", y:"60*0.24 + 60*0.19 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.0 *0.16", y:"60*0.24 + 60*0.16 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.0 *0.16", y:"60*0.24 + 60*0.12 /5*8 *0.16"}, + {action:"line", x:"100*0.15 -100*0.04 *0.16", y:"60*0.24 + 60*0.12 /5*8 *0.16"}, + {action:"line", x:"100*0.15 -100*0.04 *0.16", y:"60*0.24 + 60*0.08 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0 *0.16", y:"60*0.24 + 60*0.08 /5*8 *0.16"}, + {action:"line", x:"100*0.15 + 100*0.01 *0.16", y:"60*0.24 + 60*0.05 /5*8 *0.16"}, + {action:"line", x:"100*0.15 -100*0.01 *0.16", y:"60*0.24 + 60*0.01 /5*8 *0.16"}, + {action:"close"} +]); +Schema.addGlobalCommand("script_task", [ + {action:"move", x:"100*0.15- 100*0.05", y:"60*0.24- 60*0.1"}, + {action:"line", x:"100*0.15 + 100*0.05", y:"60*0.24 - 60*0.1"}, + {action:"curve", x1:"100*0.15 + 100*0.02", y1:"60*0.24 - 60*0.1", x2:"100*0.15 + 100*0.02", y2:"60*0.24", x:"100*0.15 + 100*0.04", y:"60*0.24"}, + {action:"curve", x1:"100*0.15 + 100*0.06", y1:"60*0.24", x2:"100*0.15 + 100*0.06", y2:"60*0.24 + 60*0.1", x:"100*0.15 + 100*0.03", y:"60*0.24 + 60*0.1"}, + {action:"line", x:"100*0.15 - 100*0.08", y:"60*0.24 + 60*0.1"}, + {action:"curve", x1:"100*0.15 - 100*0.05", y1:"60*0.24 + 60*0.1", x2:"100*0.15 - 100*0.05", y2:"60*0.24", x:"100*0.15 - 100*0.07", y:"60*0.24"}, + {action:"curve", x1:"100*0.15 - 100*0.09", y1:"60*0.24", x2:"100*0.15 - 100*0.09", y2:"60*0.24 - 60*0.1", x:"100*0.15 - 100*0.05", y:"60*0.24 - 60*0.1"}, + {action:"close"}, + {action:"move", x:"100*0.15 - 100*0.08", y:"60*0.24 - 60*0.05"}, + {action:"line", x:"100*0.15 + 100*0.025", y:"60*0.24 - 60*0.05"}, + {action:"move", x:"100*0.15 - 100*0.07", y:"60*0.24 - 0"}, + {action:"line", x:"100*0.15 + 100*0.04", y:"60*0.24 - 0"}, + {action:"move", x:"100*0.15 - 100*0.055", y:"60*0.24 + 60*0.06"}, + {action:"line", x:"100*0.15 + 100*0.05", y:"60*0.24 + 60*0.06"} +]); +Schema.addGlobalCommand("business_rule", [ + {action:"move", x:"100*0.15- 100*0.08", y:"60*0.24- 60*0.1"}, + {action:"line", x:"100*0.15 + 100*0.08", y:"60*0.24- 60*0.1"}, + {action:"line", x:"100*0.15 + 100*0.08", y:"60*0.24 + 60*0.1"}, + {action:"line", x:"100*0.15 - 100*0.08", y:"60*0.24 + 60*0.1"}, + {action:"close"}, + {action:"move", x:"100*0.15 - 100*0.08", y:"60*0.24 - 60*0.05"}, + {action:"line", x:"100*0.15 + 100*0.08", y:"60*0.24 - 60*0.05"}, + {action:"move", x:"100*0.15 - 100*0.08", y:"60*0.24 + 60*0.0"}, + {action:"line", x:"100*0.15 + 100*0.08", y:"60*0.24 + 60*0.0"}, + {action:"move", x:"100*0.15 - 100*0.08", y:"60*0.24 + 60*0.05"}, + {action:"line", x:"100*0.15 + 100*0.08", y:"60*0.24 + 60*0.05"}, + {action:"move", x:"100*0.15 - 100*0.04", y:"60*0.24 - 60*0.1"}, + {action:"line", x:"100*0.15 - 100*0.04", y:"60*0.24 + 60*0.1"} +]); +Schema.addGlobalCommand("user_task", [ + {action:"move", x:"100*0.05+ 100/11*2*0.5-100/11*2*0.2", y:"60*0.1+ 60/55*16*0.3"}, + {action:"curve", x1:"100*0.05+ 100/11*2*0.30", y1:"60*0.1+ 60/55*16*0.3 - 60/55*16*0.4*2/3", x2:"100*0.05+ 100/11*2*0.5+100/11*2*0.2", y2:"60*0.1+ 60/55*16*0.3 - 60/55*16*0.4*2/3", x:"100*0.05+ 100/11*2*0.5+100/11*2*0.2", y:"60*0.1+ 60/55*16*0.3"}, + {action:"line", x:"100*0.05+ 100/11*2*0.5-100/11*2*0.2", y:"60*0.1+ 60/55*16*0.3"}, + {action:"close"}, + {action:"move", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.1", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.1", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.68"}, + {action:"quadraticCurve", x1:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.1", y1:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45"}, + {action:"quadraticCurve", x1:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.95", y1:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.95", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.68"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.95", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.77", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.77", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.77"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.77", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.23", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.23", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.77"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.23", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.05", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"}, + {action:"close"}, + {action:"move", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.38", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.42"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.40"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.32", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.35"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.32", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.27"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.43", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.27"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.46", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.24"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.68", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.24"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.68", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.35"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.40"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.62", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.42"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58"}, + {action:"line", x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35", y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45"}, + {action:"close"} +]); +Schema.addGlobalCommand("inner_roundRectangle", [ + {action:"move", x:"w * 0 +3", y:"h * 0 + h/30 +3"}, + {action:"quadraticCurve", x1:"w * 0 +3 +1", y1:"h * 0 +3 +1", x:"w * 0 + h/30 +3", y:"h * 0 +3"}, + {action:"line", x:"w * 1 - h/30 -3", y:"h * 0 +3"}, + {action:"quadraticCurve", x1:"w * 1 -3", y1:"h * 0+3", x:"w * 1 -3", y:"h * 0 + h/30 +3"}, + {action:"line", x:"w * 1 -3", y:"h * 1 - h/30-3"}, + {action:"quadraticCurve", x1:"w * 1 -3", y1:"h * 1 -3", x:"w * 1 - h/30-3", y:"h * 1 -3"}, + {action:"line", x:"w * 0 + h/30 +3", y:"h * 1 -3"}, + {action:"quadraticCurve", x1:"w * 0+3", y1:"h * 1-3", x:"w * 0 +3", y:"h * 1 - h/30 -3"}, + {action:"line", x:"w * 0 + 3", y:"h * 0 + h/30+3"}, + {action:"close"} +]); +Schema.addGlobalCommand("exclusive_gateway", [ + {action:"move", x:"w*0.5", y:"h*0.5"}, + {action:"move", x:"w*0.5 - w*0.5*0.4 + w*0.02", y:"h*0.5 - h*0.5*0.4 - h*0.02"}, + {action:"line", x:"w*0.5 + w*0.5*0.4 + w*0.02", y:"h*0.5 + h*0.5*0.4 - h*0.02"}, + {action:"line", x:"w*0.5 + w*0.5*0.4 - w*0.02", y:"h*0.5 + h*0.5*0.4 + h*0.02"}, + {action:"line", x:"w*0.5 - w*0.5*0.4 - w*0.02", y:"h*0.5 - h*0.5*0.4 + h*0.02"}, + {action:"close"}, + {action:"move", x:"w*0.5 + w*0.5*0.4 - w*0.02", y:"h*0.5 - h*0.5*0.4 - h*0.02"}, + {action:"line", x:"w*0.5 - w*0.5*0.4 - w*0.02", y:"h*0.5 + h*0.5*0.4 - h*0.02"}, + {action:"line", x:"w*0.5 - w*0.5*0.4 + w*0.02", y:"h*0.5 + h*0.5*0.4 + h*0.02"}, + {action:"line", x:"w*0.5 + w*0.5*0.4 + w*0.02", y:"h*0.5 - h*0.5*0.4 + h*0.02"}, + {action:"line", x:"w*0.5 + w*0.5*0.4 - w*0.02", y:"h*0.5 - h*0.5*0.4 - h*0.02"}, + {action:"close"} +]); +Schema.addGlobalCommand("complex_gateway0", [ + {action:"move", x:"w*0.5 - Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02", y:"h*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02", y:"h*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.03"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02", y:"h*0.5 + Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02", y:"h*0.5 - Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02"}, + {action:"close"} +]); +Schema.addGlobalCommand("complex_gateway1", [ + {action:"move", x:"w*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02", y:"h*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02", y:"h*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02", y:"h*0.5 + Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02", y:"h*0.5 - Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02", y:"h*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02"}, + {action:"close"} +]); +Schema.addGlobalCommand("complex_gateway2", [ + {action:"move", x:"w*0.5 - Math.min(w,h)*0.027", y:"h*0.5 - Math.min(w,h)*0.5*0.4"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.027", y:"h*0.5 + Math.min(w,h)*0.5*0.4"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.027", y:"h*0.5 + Math.min(w,h)*0.5*0.4"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.027", y:"h*0.5 - Math.min(w,h)*0.5*0.4"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.027", y:"h*0.5 - Math.min(w,h)*0.5*0.4"}, + {action:"close"} +]); +Schema.addGlobalCommand("complex_gateway3", [ + {action:"move", x:"w*0.5 - Math.min(w,h)*0.5*0.4", y:"h*0.5 - Math.min(w,h)*0.027"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.5*0.4", y:"h*0.5 + Math.min(w,h)*0.027"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.5*0.4", y:"h*0.5 + Math.min(w,h)*0.027"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.5*0.4", y:"h*0.5 - Math.min(w,h)*0.027"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.5*0.4", y:"h*0.5 - Math.min(w,h)*0.027"}, + {action:"close"} +]); +Schema.addGlobalCommand("event_based_gateway", [ + {action:"move", x:"w*0.5 - w*0.5/55*32", y:"h*0.5"}, + {action:"curve", x1:"w*0.5 - w*0.5/55*32", y1:"h*0.5 - h/55*32*2/3", x2:"w*0.5 + w*0.5/55*32", y2:"h*0.5 - h/55*32*2/3", x:"w*0.5 + w*0.5/55*32", y:"h*0.5"}, + {action:"curve", x1:"w*0.5 + w*0.5/55*32", y1:"h*0.5 + h/55*32*2/3", x2:"w*0.5 - w*0.5/55*32", y2:"h*0.5 + h/55*32*2/3", x:"w*0.5 - w*0.5/55*32", y:"h*0.5"}, + {action:"close"}, + {action:"move", x:"w*0.5 - w*0.4/55*32", y:"h*0.5"}, + {action:"curve", x1:"w*0.5 - w*0.4/55*32", y1:"h*0.5 - h/55*32*2/3*0.8", x2:"w*0.5+w*0.4/55*32", y2:"h*0.5 - h/55*32*2/3*0.8", x:"w*0.5 + w*0.4/55*32", y:"h*0.5"}, + {action:"curve", x1:"w*0.5 + w*0.4/55*32", y1:"h*0.5 + h/55*32*2/3*0.8", x2:"w*0.5 - w*0.4/55*32", y2:"h*0.5 + h/55*32*2/3*0.8", x:"w*0.5 - w*0.4/55*32", y:"h*0.5"}, + {action:"close"}, + {action:"move", x:"w*0.5", y:"h*0.5 - h/55*32*0.28"}, + {action:"line", x:"w*0.5+ w/55*32*0.28", y:"h*0.5- h/55*32*0.08"}, + {action:"line", x:"w*0.5+ w/55*32*0.17", y:"h*0.5+h/55*32*0.25"}, + {action:"line", x:"w*0.5- w/55*32*0.17", y:"h*0.5+ h/55*32*0.25"}, + {action:"line", x:"w*0.5- w/55*32*0.28", y:"h*0.5-h/55*32*0.08"}, + {action:"line", x:"w*0.5", y:"h*0.5-h/55*32*0.28"}, + {action:"close"} +]); +Schema.addGlobalCommand("event_based_start_gateway", [ + {action:"move", x:"w*0.5 - w*0.5/55*32", y:"h*0.5"}, + {action:"curve", x1:"w*0.5 - w*0.5/55*32", y1:"h*0.5 - h/55*32*2/3", x2:"w*0.5 + w*0.5/55*32", y2:"h*0.5 - h/55*32*2/3", x:"w*0.5 + w*0.5/55*32", y:"h*0.5"}, + {action:"curve", x1:"w*0.5 + w*0.5/55*32", y1:"h*0.5 + h/55*32*2/3", x2:"w*0.5 - w*0.5/55*32", y2:"h*0.5 + h/55*32*2/3", x:"w*0.5 - w*0.5/55*32", y:"h*0.5"}, + {action:"close"}, + {action:"move", x:"w*0.5", y:"h*0.5 - h/55*32*0.28"}, + {action:"line", x:"w*0.5+ w/55*32*0.28", y:"h*0.5- h/55*32*0.08"}, + {action:"line", x:"w*0.5+ w/55*32*0.17", y:"h*0.5+h/55*32*0.25"}, + {action:"line", x:"w*0.5- w/55*32*0.17", y:"h*0.5+ h/55*32*0.25"}, + {action:"line", x:"w*0.5- w/55*32*0.28", y:"h*0.5-h/55*32*0.08"}, + {action:"line", x:"w*0.5", y:"h*0.5-h/55*32*0.28"}, + {action:"close"} +]); +Schema.addGlobalCommand("parallel_gateway", [ + {action:"move", x:"w*0.5 - Math.min(w,h)*0.04", y:"h*0.5 - h*0.5*0.5"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.04", y:"h*0.5 + h*0.5*0.5"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.04", y:"h*0.5 + h*0.5*0.5"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.04", y:"h*0.5 - h*0.5*0.5"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.04", y:"h*0.5 - h*0.5*0.5"}, + {action:"close"}, + {action:"move", x:"w*0.5 - w*0.5*0.5", y:"h*0.5 - Math.min(w,h)*0.04"}, + {action:"line", x:"w*0.5 - w*0.5*0.5", y:"h*0.5 + Math.min(w,h)*0.04"}, + {action:"line", x:"w*0.5 + w*0.5*0.5", y:"h*0.5 + Math.min(w,h)*0.04"}, + {action:"line", x:"w*0.5 + w*0.5*0.5", y:"h*0.5 - Math.min(w,h)*0.04"}, + {action:"line", x:"w*0.5 - w*0.5*0.5", y:"h*0.5 - Math.min(w,h)*0.04"}, + {action:"close"} +]); +Schema.addGlobalCommand("parallel_eventbased_gateway", [ + {action:"move", x:"w*0.5 - Math.min(w,h)*0.027", y:"h*0.5 - Math.min(w,h)*0.5*0.4"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.027", y:"h*0.5 - Math.min(w,h)*0.02"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.5*0.4", y:"h*0.5 - Math.min(w,h)*0.027"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.5*0.4", y:"h*0.5 + Math.min(w,h)*0.027"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.027", y:"h*0.5 + Math.min(w,h)*0.027"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.027", y:"h*0.5 + Math.min(w,h)*0.5*0.4"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.027", y:"h*0.5 + Math.min(w,h)*0.5*0.4"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.027", y:"h*0.5 + Math.min(w,h)*0.027"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.5*0.4", y:"h*0.5 + Math.min(w,h)*0.027"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.5*0.4", y:"h*0.5 - Math.min(w,h)*0.027"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.027", y:"h*0.5 - Math.min(w,h)*0.027"}, + {action:"line", x:"w*0.5 + Math.min(w,h)*0.027", y:"h*0.5 - Math.min(w,h)*0.5*0.4"}, + {action:"line", x:"w*0.5 - Math.min(w,h)*0.027", y:"h*0.5 - Math.min(w,h)*0.5*0.4"}, + {action:"close"} +]); +Schema.addGlobalCommand("data_in_object", [ + {action:"move", x:"w/3/4", y:"h/4/3+3"}, + {action:"line", x:"w/3/4*3.5", y:"h/4/3+3"}, + {action:"line", x:"w/3/4*3.5", y:"h/4/3-h/4/5+3"}, + {action:"line", x:"w/3/4*5", y:"h/4/2+3"}, + {action:"line", x:"w/3/4*3.5", y:"h/4/2+h/4/2-h/4/3+h/4/5+3"}, + {action:"line", x:"w/3/4*3.5", y:"h/4/2+h/4/2-h/4/3+3"}, + {action:"line", x:"w/3/4", y:"h/4/2+h/4/2-h/4/3+3"}, + {action:"line", x:"w/3/4", y:"h/4/3+3"}, + {action:"close"} +]); +Schema.addGlobalCommand("choreography_task", [ + {action:"move", x:"0", y:"6"}, + {action:"quadraticCurve", x1:"0", y1:"0", x:"6", y:"0"}, + {action:"line", x:"w-6", y:"0"}, + {action:"quadraticCurve", x1:"w", y1:"0", x:"w", y:"6"}, + {action:"line", x:"w", y:"h-6"}, + {action:"quadraticCurve", x1:"w", y1:"h", x:"w-6", y:"h"}, + {action:"line", x:"6", y:"h"}, + {action:"quadraticCurve", x1:"0", y1:"h", x:"0", y:"h-6"}, + {action:"line", x:"0", y:"6"}, + {action:"close"} +]); +Schema.addShape({name:"startEvent", title:startEventText, text:startEventText, category:"process_bpmn2", groupName:"startEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"}, textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, lineStyle:{lineColor:startEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:startEventFillStyleBeginColor, endColor:startEventFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"userTask", title:userTaskText, text:userTaskText, category:"process_bpmn2", groupName:"task", dataAttributes:[ + {name:"loopCharacteristics", type:"list", value:"", category:"default", listItems:["", "StandardLoopCharacteristics", "MultipleLoopCharacteristics"]}, + {name:"isSequantial", type:"boolean", value:"true", category:"default"}, + {name:"isForCompensation", type:"boolean", value:"false", category:"default"}, + {name:"renderings", type:"string", value:"", category:"default"}, + {name:"implementation", type:"string", value:"", category:"default"}, + {name:"resources", type:"string", value:"", category:"default"}, + {name:"ioSpecification", type:"string", value:"", category:"default"}, + {name:"dataInputAssociations", type:"string", value:"", category:"default"}, + {name:"dataOutputAssociations", type:"string", value:"", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:100, h:70}, lineStyle:{lineColor:userTaskLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:userTaskFillStyleBeginColor, endColor:userTaskFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"roundRectangle"}}, + {lineStyle:{lineWidth:1, lineColor:userTaskLineColor, lineStyle:"solid"}, fillStyle:{type:"solid", color:"255,255,255"}, actions:{ref:"user_task"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"roundRectangle"}} +]}); +Schema.addShape({name:"exclusiveGateway", title:exclusiveGatewayText, text:exclusiveGatewayText, category:"process_bpmn2", groupName:"bpmnGateway", dataAttributes:[ + {name:"gatewayDirection", type:"list", value:"", category:"default", listItems:["Unspecified,Converging,Diverging,Mixed"]}, + {name:"default", type:"string", value:"", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:50, h:50}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, lineStyle:{lineColor:gatewayLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:gatewayFillStyleBeginColor, endColor:gatewayFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"gateway0"}}, + {lineStyle:{lineWidth:0, lineStyle:"solid"}, fillStyle:{type:"solid", color:gatewayLineColor}, actions:[ + {action:"move", x:"w*0.5 + w*0.5*0.4 - w*0.02", y:"h*0.5 - h*0.5*0.4 - h*0.02"}, + {action:"line", x:"w*0.5 - w*0.5*0.4 - w*0.02", y:"h*0.5 + h*0.5*0.4 - h*0.02"}, + {action:"line", x:"w*0.5 - w*0.5*0.4 + w*0.02", y:"h*0.5 + h*0.5*0.4 + h*0.02"}, + {action:"line", x:"w*0.5 + w*0.5*0.4 + w*0.02", y:"h*0.5 - h*0.5*0.4 + h*0.02"}, + {action:"line", x:"w*0.5 + w*0.5*0.4 - w*0.02", y:"h*0.5 - h*0.5*0.4 - h*0.02"}, + {action:"close"} + ]}, + {lineStyle:{lineWidth:0, lineStyle:"solid"}, fillStyle:{type:"solid", color:gatewayLineColor}, actions:[ + {action:"move", x:"w*0.5", y:"h*0.5"}, + {action:"move", x:"w*0.5 - w*0.5*0.4 + w*0.02", y:"h*0.5 - h*0.5*0.4 - h*0.02"}, + {action:"line", x:"w*0.5 + w*0.5*0.4 + w*0.02", y:"h*0.5 + h*0.5*0.4 - h*0.02"}, + {action:"line", x:"w*0.5 + w*0.5*0.4 - w*0.02", y:"h*0.5 + h*0.5*0.4 + h*0.02"}, + {action:"line", x:"w*0.5 - w*0.5*0.4 - w*0.02", y:"h*0.5 - h*0.5*0.4 + h*0.02"}, + {action:"close"} + ]}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"gateway0"}} +]}); +Schema.addShape({name:"messageStartEvent", title:messageStartEventText, text:messageStartEventText, category:"process_bpmn2", groupName:"startEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, lineStyle:{lineColor:startEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:startEventFillStyleBeginColor, endColor:startEventFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineStyle:"solid", lineColor:startEventLineColor}, fillStyle:{type:"solid", color:startEventContentColor}, actions:{ref:"message0"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"timerStartEvent", title:timerStartEventText, text:timerStartEventText, category:"process_bpmn2", groupName:"startEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, lineStyle:{lineColor:startEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:startEventFillStyleBeginColor, endColor:startEventFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineStyle:"solid", lineColor:startEventLineColor}, fillStyle:{type:"solid", color:startEventContentColor}, actions:{ref:"timer0"}}, + {lineStyle:{lineWidth:1, lineStyle:"solid"}, actions:{ref:"timer0_needle"}}, + {lineStyle:{lineStyle:"solid"}, actions:{ref:"timer0_num"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"signalStartEvent", title:signalStartEventText, text:signalStartEventText, category:"process_bpmn2", groupName:"startEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, lineStyle:{lineColor:startEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:startEventFillStyleBeginColor, endColor:startEventFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineStyle:"solid", lineColor:startEventLineColor}, fillStyle:{type:"solid", color:startEventContentColor}, actions:{ref:"signal0"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +function drawChoreographyIcon(a, d, c) { + var f = [ + {actions:[ + {action:"move", x:0, y:4}, + {action:"quadraticCurve", x1:0, y1:0, x:4, y:0}, + {action:"line", x:a - 4, y:0}, + {action:"quadraticCurve", x1:a, y1:0, x:a, y:4}, + {action:"line", x:a, y:d - 4}, + {action:"quadraticCurve", x1:a, y1:d, x:a - 4, y:d}, + {action:"line", x:4, y:d}, + {action:"quadraticCurve", x1:0, y1:d, x:0, y:d - 4}, + {action:"line", x:0, y:4}, + {action:"close"} + ]}, + {actions:[ + {action:"move", x:0, y:4}, + {action:"quadraticCurve", x1:0, y1:0, x:4, y:0}, + {action:"line", x:a - 4, y:0}, + {action:"quadraticCurve", x1:a, y1:0, x:a, y:4}, + {action:"line", x:a, y:5}, + {action:"line", x:0, y:5}, + {action:"line", x:0, y:4}, + {action:"close"} + ]}, + {fillStyle:{color:"194,194,194"}, actions:[ + {action:"move", x:0, y:d - 5}, + {action:"line", x:a, y:d - 5}, + {action:"line", x:a, y:d - 4}, + {action:"quadraticCurve", x1:a, y1:d, x:a - 4, y:d}, + {action:"line", x:4, y:d}, + {action:"quadraticCurve", x1:0, y1:d, x:0, y:d - 4}, + {action:"close"} + ]} + ]; + if (c) { + for (var b = 0; b < f.length; b++) { + var e = f[b]; + e.lineStyle = {lineWidth:3} + } + } + return f +} +function createParticipant(b) { + var e = "participantA"; + var a = "participantB"; + if (b.name == "callChoreographyGlobal" || b.name == "callChoreography") { + e = "callParticipantA"; + a = "callParticipantB" + } + var d = Model.create(e, b.props.x, b.props.y); + d.props.w = b.props.w; + d.props.zindex = b.props.zindex + 0.5; + d.parent = b.id; + Designer.painter.renderShape(d); + var c = Model.create(a, b.props.x, b.props.y); + c.props.w = b.props.w; + c.props.y = b.props.y + b.props.h - c.props.h; + c.props.zindex = b.props.zindex + 0.5; + c.parent = b.id; + Designer.painter.renderShape(c); + b.children = [d.id, c.id]; + Model.addMulti([d, c]) +} +Schema.addShape({name:"participantA", title:"Participant", text:"Participant", category:"process_bpmn2", dataAttributes:[ + {name:"participantMultiplicity", type:"string", value:"", category:"default"}, + {name:"maximum", type:"string", value:"1", category:"default"}, + {name:"participantBandKind", type:"string", value:"top_initiating", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], attribute:{linkable:false, rotatable:false, visible:false}, props:{w:150, h:25}, resizeDir:[], anchors:[], textBlock:{x:5, y:0, w:"w-10", h:"h"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, path:[ + {actions:[ + {action:"move", x:0, y:6}, + {action:"quadraticCurve", x1:0, y1:0, x:6, y:0}, + {action:"line", x:"w-6", y:0}, + {action:"quadraticCurve", x1:"w", y1:0, x:"w", y:6}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:0, y:"h"}, + {action:"line", x:0, y:6}, + {action:"close"} + ]} +]}); +Schema.addShape({name:"participantB", title:"Participant", text:"Participant", category:"process_bpmn2", dataAttributes:[ + {name:"participantMultiplicity", type:"string", value:"set", category:"default"}, + {name:"maximum", type:"string", value:"1", category:"default"}, + {name:"participantBandKind", type:"string", value:"bottom_non_initiating", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], attribute:{linkable:false, rotatable:false, visible:false}, props:{w:150, h:25}, resizeDir:[], anchors:[], textBlock:{x:5, y:0, w:"w-10", h:"h"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, fillStyle:{color:"194,194,194"}, path:[ + {actions:[ + {action:"move", x:0, y:0}, + {action:"line", x:"w", y:0}, + {action:"line", x:"w", y:"h-6"}, + {action:"quadraticCurve", x1:"w", y1:"h", x:"w-6", y:"h"}, + {action:"line", x:6, y:"h"}, + {action:"quadraticCurve", x1:0, y1:"h", x:0, y:"h-6"}, + {action:"close"} + ]} +]}); +Schema.addShape({name:"callParticipantA", title:"Participant", text:"Participant", category:"process_bpmn2", dataAttributes:[ + {name:"participantMultiplicity", type:"string", value:"", category:"default"}, + {name:"maximum", type:"string", value:"1", category:"default"}, + {name:"participantBandKind", type:"string", value:"top_initiating", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], attribute:{linkable:false, rotatable:false, visible:false}, props:{w:150, h:25}, resizeDir:[], anchors:[], textBlock:{x:5, y:0, w:"w-10", h:"h"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, path:[ + {lineStyle:{lineWidth:"lineWidth+ 2"}, actions:[ + {action:"move", x:0, y:6}, + {action:"quadraticCurve", x1:0, y1:0, x:6, y:0}, + {action:"line", x:"w-6", y:0}, + {action:"quadraticCurve", x1:"w", y1:0, x:"w", y:6}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:0, y:"h"}, + {action:"line", x:0, y:6}, + {action:"close"} + ]} +]}); +Schema.addShape({name:"callParticipantB", title:"Participant", text:"Participant", category:"process_bpmn2", dataAttributes:[ + {name:"participantMultiplicity", type:"string", value:"set", category:"default"}, + {name:"maximum", type:"string", value:"1", category:"default"}, + {name:"participantBandKind", type:"string", value:"bottom_non_initiating", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], attribute:{linkable:false, rotatable:false, visible:false}, props:{w:150, h:25}, resizeDir:[], anchors:[], textBlock:{x:5, y:0, w:"w-10", h:"h"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, fillStyle:{color:"194,194,194"}, path:[ + {lineStyle:{lineWidth:"lineWidth+ 2"}, actions:[ + {action:"move", x:0, y:0}, + {action:"line", x:"w", y:0}, + {action:"line", x:"w", y:"h-6"}, + {action:"quadraticCurve", x1:"w", y1:"h", x:"w-6", y:"h"}, + {action:"line", x:6, y:"h"}, + {action:"quadraticCurve", x1:0, y1:"h", x:0, y:"h-6"}, + {action:"close"} + ]} +]}); +Schema.addShape({name:"timerIntermediateCatchEvent", title:timerIntermediateCatchEventText, text:timerIntermediateCatchEventText, category:"process_bpmn2", groupName:"intermediateEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, lineStyle:{lineColor:intermediateCatchEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:intermediateCatchEventFillStyleBeginColor, endColor:intermediateCatchEventFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineStyle:"solid", lineColor:intermediateCatchEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:intermediateCatchEventFillStyleBeginColor, endColor:intermediateCatchEventFillStyleBndColor, angle:0}, actions:{ref:"inneround"}}, + {lineStyle:{lineStyle:"solid", lineColor:intermediateCatchEventLineColor}, fillStyle:{type:"solid", color:intermediateCatchEventContentColor, }, actions:{ref:"timer0"}}, + {lineStyle:{lineWidth:1, lineStyle:"solid"}, actions:{ref:"timer0_needle"}}, + {lineStyle:{lineWidth:2, lineStyle:"solid"}, actions:{ref:"timer0_num"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"messageIntermediateCatchEvent", title:messageIntermediateCatchEventText, text:messageIntermediateCatchEventText, category:"process_bpmn2", groupName:"intermediateEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, lineStyle:{lineColor:intermediateCatchEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:intermediateCatchEventFillStyleBeginColor, endColor:intermediateCatchEventFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineStyle:"solid", lineColor:intermediateCatchEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:intermediateCatchEventFillStyleBeginColor, endColor:intermediateCatchEventFillStyleBndColor, angle:0}, actions:{ref:"inneround"}}, + {lineStyle:{lineStyle:"solid", lineColor:intermediateCatchEventLineColor}, fillStyle:{type:"solid", color:intermediateCatchEventContentColor, }, actions:{ref:"message0"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"signalIntermediateCatchEvent", title:signalIntermediateCatchEventText, text:signalIntermediateCatchEventText, category:"process_bpmn2", groupName:"intermediateEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"}, textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, lineStyle:{lineColor:intermediateCatchEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:intermediateCatchEventFillStyleBeginColor, endColor:intermediateCatchEventFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineStyle:"solid", lineColor:intermediateCatchEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:intermediateCatchEventFillStyleBeginColor, endColor:intermediateCatchEventFillStyleBndColor, angle:0}, actions:{ref:"inneround"}}, + {lineStyle:{lineStyle:"solid", lineColor:intermediateCatchEventLineColor}, fillStyle:{type:"solid", color:intermediateCatchEventContentColor, }, actions:{ref:"signal0"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"messageIntermediateThrowingEvent", title:messageIntermediateThrowingEventText, text:messageIntermediateThrowingEventText, category:"process_bpmn2", groupName:"intermediateEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, lineStyle:{lineColor:intermediateThrowingEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:intermediateThrowingEventFillStyleBeginColor, endColor:intermediateThrowingEventFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineStyle:"solid", lineColor:intermediateThrowingEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:intermediateThrowingEventFillStyleBeginColor, endColor:intermediateThrowingEventFillStyleBndColor, angle:0}, actions:{ref:"inneround"}}, + {lineStyle:{lineWidth:1, lineColor:intermediateThrowingEventFillStyleBeginColor, lineStyle:"solid"}, fillStyle:{type:"solid", color:"50,50,50"}, actions:{ref:"message4"}}, + {lineStyle:{lineWidth:1, lineColor:intermediateThrowingEventFillStyleBeginColor, lineStyle:"solid"}, fillStyle:{type:"solid", color:"50,50,50"}, actions:{ref:"message4_0"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"signalIntermediateThrowingEvent", title:signalIntermediateThrowingEventText, text:signalIntermediateThrowingEventText, category:"process_bpmn2", groupName:"intermediateEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, lineStyle:{lineColor:intermediateThrowingEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:intermediateThrowingEventFillStyleBeginColor, endColor:intermediateThrowingEventFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineStyle:"solid", lineColor:intermediateThrowingEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:intermediateThrowingEventFillStyleBeginColor, endColor:intermediateThrowingEventFillStyleBndColor, angle:0}, actions:{ref:"inneround"}}, + {lineStyle:{lineWidth:0, lineStyle:"solid"}, fillStyle:{type:"solid", color:"50,50,50"}, actions:{ref:"signal0"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"messageBoundaryInterrputingEvent", title:messageBoundaryInterrputingEventText, text:messageBoundaryInterrputingEventText, category:"process_bpmn2", groupName:"boundaryEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, lineStyle:{lineColor:boundaryEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:boundaryEventFillStyleBeginColor, endColor:boundaryEventFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineStyle:"solid", lineColor:boundaryEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:boundaryEventFillStyleBeginColor, endColor:boundaryEventFillStyleBndColor, angle:0}, actions:{ref:"inneround"}}, + {lineStyle:{lineStyle:"solid"}, fillStyle:{type:"solid", color:boundaryEventContentColor}, actions:{ref:"message0"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"signalBoundaryInterrputingEvent", title:signalBoundaryInterrputingEventText, text:signalBoundaryInterrputingEventText, category:"process_bpmn2", groupName:"boundaryEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, lineStyle:{lineColor:boundaryEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:boundaryEventFillStyleBeginColor, endColor:boundaryEventFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineStyle:"solid", lineColor:boundaryEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:boundaryEventFillStyleBeginColor, endColor:boundaryEventFillStyleBndColor, angle:0}, actions:{ref:"inneround"}}, + {lineStyle:{lineStyle:"solid"}, fillStyle:{type:"solid", color:boundaryEventContentColor}, actions:{ref:"signal0"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"compensationBoundaryInterrputingEvent", title:compensationBoundaryInterrputingEventText, text:compensationBoundaryInterrputingEventText, category:"process_bpmn2", groupName:"boundaryEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, lineStyle:{lineColor:boundaryEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:boundaryEventFillStyleBeginColor, endColor:boundaryEventFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineStyle:"solid", lineColor:boundaryEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:boundaryEventFillStyleBeginColor, endColor:boundaryEventFillStyleBndColor, angle:0}, actions:{ref:"inneround"}}, + {lineStyle:{lineStyle:"solid"}, fillStyle:{type:"solid", color:boundaryEventContentColor}, actions:{ref:"compensation0"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"errorBoundaryInterrputingEvent", title:errorBoundaryInterrputingEventText, text:errorBoundaryInterrputingEventText, category:"process_bpmn2", groupName:"boundaryEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"}, textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, lineStyle:{lineColor:boundaryEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:boundaryEventFillStyleBeginColor, endColor:boundaryEventFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineStyle:"solid", lineColor:boundaryEventLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:boundaryEventFillStyleBeginColor, endColor:boundaryEventFillStyleBndColor, angle:0}, actions:{ref:"inneround"}}, + {lineStyle:{lineStyle:"solid"}, fillStyle:{type:"solid", color:boundaryEventContentColor}, actions:{ref:"error0"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"endEvent", title:endEventText, text:endEventText, category:"process_bpmn2", groupName:"endEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:endEventFillStyleBeginColor, endColor:endEventFillStyleBndColor, angle:0}, lineStyle:{lineColor:endEventLineColor}, path:[ + {lineStyle:{lineWidth:"lineWidth + 2", lineStyle:"solid"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"terminateEndEvent", title:terminateEndEventText, text:terminateEndEventText, category:"process_bpmn2", groupName:"endEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:endEventFillStyleBeginColor, endColor:endEventFillStyleBndColor, angle:0}, lineStyle:{lineColor:endEventLineColor, }, path:[ + {lineStyle:{lineWidth:"lineWidth + 2", lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineWidth:0, lineStyle:"solid"}, fillStyle:{type:"solid", color:"50,50,50"}, actions:{ref:"g_round"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"messageEndEvent", title:messageEndEventText, text:messageEndEventText, category:"process_bpmn2", groupName:"endEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:endEventFillStyleBeginColor, endColor:endEventFillStyleBndColor, angle:0}, lineStyle:{lineColor:endEventLineColor, }, path:[ + {lineStyle:{lineWidth:"lineWidth + 2", lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineWidth:1, lineColor:endEventFillStyleBndColor, lineStyle:"solid"}, fillStyle:{type:"solid", color:"50,50,50"}, actions:{ref:"message4"}}, + {lineStyle:{lineWidth:1, lineColor:endEventFillStyleBeginColor, lineStyle:"solid"}, fillStyle:{type:"solid", color:"50,50,50"}, actions:{ref:"message4_0"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"signalEndEvent", title:signalEndEventText, text:signalEndEventText, category:"process_bpmn2", groupName:"endEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:endEventFillStyleBeginColor, endColor:endEventFillStyleBndColor, angle:0}, lineStyle:{lineColor:endEventLineColor, }, path:[ + {lineStyle:{lineWidth:"lineWidth + 2", lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineWidth:0, lineStyle:"solid"}, fillStyle:{type:"solid", color:"50,50,50"}, actions:{ref:"signal0"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"errorEndEvent", title:errorEndEventText, text:errorEndEventText, category:"process_bpmn2", groupName:"endEvent", props:{w:40, h:40}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:endEventFillStyleBeginColor, endColor:endEventFillStyleBndColor, angle:0}, lineStyle:{lineColor:endEventLineColor, }, path:[ + {lineStyle:{lineWidth:"lineWidth + 2", lineStyle:"solid"}, actions:{ref:"round"}}, + {lineStyle:{lineWidth:0, lineStyle:"solid"}, fillStyle:{type:"solid", color:"50,50,50"}, actions:{ref:"cancel3"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +Schema.addShape({name:"serviceTask", title:serviceTaskText, text:serviceTaskText, category:"process_bpmn2", groupName:"task", dataAttributes:[ + {name:"loopCharacteristics", type:"list", value:"", category:"default", listItems:["", "StandardLoopCharacteristics", "MultipleLoopCharacteristics"]}, + {name:"isSequantial", type:"boolean", value:"true", category:"default"}, + {name:"isForCompensation", type:"boolean", value:"false", category:"default"}, + {name:"implementation", type:"string", value:"", category:"default"}, + {name:"operationRef", type:"string", value:"", category:"default"}, + {name:"ioSpecification", type:"string", value:"", category:"default"}, + {name:"dataInputAssociations", type:"string", value:"", category:"default"}, + {name:"dataOutputAssociations", type:"string", value:"", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:100, h:70}, lineStyle:{lineColor:servicesTaskLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:servicesTaskFillStyleBeginColor, endColor:servicesTaskFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"roundRectangle"}}, + {lineStyle:{lineWidth:1, lineColor:servicesTaskLineColor, lineStyle:"solid"}, fillStyle:{type:"solid"}, actions:{ref:"service_task"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"roundRectangle"}} +]}); +Schema.addShape({name:"manualTask", title:manualTaskText, text:manualTaskText, category:"process_bpmn2", groupName:"task", dataAttributes:[ + {name:"loopCharacteristics", type:"list", value:"", category:"default", listItems:["", "StandardLoopCharacteristics", "MultipleLoopCharacteristics"]}, + {name:"isSequantial", type:"boolean", value:"true", category:"default"}, + {name:"isForCompensation", type:"boolean", value:"false", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:100, h:70}, lineStyle:{lineColor:taskLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:taskFillStyleBeginColor, endColor:taskFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"roundRectangle"}}, + {lineStyle:{lineWidth:1, lineColor:taskLineColor, lineStyle:"solid"}, fillStyle:{type:"solid", color:"255,255,255"}, actions:{ref:"manual_task"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"roundRectangle"}} +]}); +Schema.addShape({name:"receiveTask", title:receiveTaskText, text:receiveTaskText, category:"process_bpmn2", groupName:"task", dataAttributes:[ + {name:"loopCharacteristics", type:"list", value:"", category:"default", listItems:["", "StandardLoopCharacteristics", "MultipleLoopCharacteristics"]}, + {name:"isSequantial", type:"boolean", value:"true", category:"default"}, + {name:"isForCompensation", type:"boolean", value:"false", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:100, h:70}, lineStyle:{lineColor:taskLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:taskFillStyleBeginColor, endColor:taskFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"roundRectangle"}}, + {lineStyle:{lineWidth:1, lineColor:taskLineColor, lineStyle:"solid"}, fillStyle:{type:"solid", color:"255,255,255"}, actions:{ref:"receive_task"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"roundRectangle"}} +]}); +Schema.addShape({name:"sendTask", title:sendTaskText, text:sendTaskText, category:"process_bpmn2", groupName:"task", dataAttributes:[ + {name:"loopCharacteristics", type:"list", value:"", category:"default", listItems:["", "StandardLoopCharacteristics", "MultipleLoopCharacteristics"]}, + {name:"isSequantial", type:"boolean", value:"true", category:"default"}, + {name:"isForCompensation", type:"boolean", value:"false", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:100, h:70}, lineStyle:{lineColor:taskLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:taskFillStyleBeginColor, endColor:taskFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"roundRectangle"}}, + {lineStyle:{lineWidth:1, lineColor:taskFillStyleBeginColor, lineStyle:"solid"}, fillStyle:{type:"solid", color:"50,50,50", }, actions:{ref:"receive_task_dark"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"roundRectangle"}} +]}); +Schema.addShape({name:"scriptTask", title:scriptTaskText, text:scriptTaskText, category:"process_bpmn2", groupName:"task", dataAttributes:[ + {name:"loopCharacteristics", type:"list", value:"", category:"default", listItems:["", "StandardLoopCharacteristics", "MultipleLoopCharacteristics"]}, + {name:"isSequantial", type:"boolean", value:"true", category:"default"}, + {name:"isForCompensation", type:"boolean", value:"false", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:100, h:70}, lineStyle:{lineColor:taskLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:taskFillStyleBeginColor, endColor:taskFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"roundRectangle"}}, + {lineStyle:{lineWidth:1, lineColor:taskLineColor, lineStyle:"solid"}, fillStyle:{type:"solid"}, actions:{ref:"script_task"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"roundRectangle"}} +]}); +Schema.addShape({name:"businessRuleTask", title:businessRuleTaskText, text:businessRuleTaskText, category:"process_bpmn2", groupName:"task", dataAttributes:[ + {name:"loopCharacteristics", type:"list", value:"", category:"default", listItems:["", "StandardLoopCharacteristics", "MultipleLoopCharacteristics"]}, + {name:"isSequantial", type:"boolean", value:"true", category:"default"}, + {name:"isForCompensation", type:"boolean", value:"false", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:100, h:70}, lineStyle:{lineColor:taskLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:taskFillStyleBeginColor, endColor:taskFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"roundRectangle"}}, + {lineStyle:{lineWidth:1, lineColor:taskLineColor, lineStyle:"solid"}, fillStyle:{type:"solid"}, actions:{ref:"business_rule"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"roundRectangle"}} +]}); +Schema.addShape({name:"callActivityCallingProcess", title:callActivityCallingProcessText, text:callActivityCallingProcessText, category:"process_bpmn2", groupName:"", dataAttributes:[ + {name:"loopCharacteristics", type:"list", value:"", category:"default", listItems:["", "StandardLoopCharacteristics", "MultipleLoopCharacteristics"]}, + {name:"isSequantial", type:"boolean", value:"true", category:"default"}, + {name:"isForCompensation", type:"boolean", value:"false", category:"default"}, + {name:"renderings", type:"string", value:"", category:"default"}, + {name:"implementation", type:"string", value:"", category:"default"}, + {name:"resources", type:"string", value:"", category:"default"}, + {name:"ioSpecification", type:"string", value:"", category:"default"}, + {name:"dataInputAssociations", type:"string", value:"", category:"default"}, + {name:"dataOutputAssociations", type:"string", value:"", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], attribute:{container:true,rotatable:false,visible:true,editable:true,linkable:true,markers:["expand"],markerOffset:5}, props:{w:100, h:70}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:"201,201,252", endColor:"160,160,211", angle:0}, path:[ + {lineStyle:{lineWidth:"lineWidth + 2", lineStyle:"solid"}, actions:{ref:"roundRectangle"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"roundRectangle"}} +]}); +Schema.addShape({name:"transaction", title:transactionText, text:transactionText, category:"process_bpmn2", groupName:"", attribute:{container:true}, dataAttributes:[ + {name:"startQuantity", type:"number", value:"1", category:"default"}, + {name:"completionQuantity", type:"number", value:"1", category:"default"}, + {name:"default", type:"string", value:"", category:"default"}, + {name:"ioSpecification", type:"string", value:"", category:"default"}, + {name:"dataInputAssociations", type:"string", value:"", category:"default"}, + {name:"dataOutputAssociations", type:"string", value:"", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:200, h:140}, path:[ + {fillStyle:{type:"none"}, lineStyle:{lineStyle:"solid"}, actions:{ref:"roundRectangle"}}, + {fillStyle:{type:"none"}, lineStyle:{lineStyle:"solid"}, actions:{ref:"inner_roundRectangle"}} +]}); +Schema.addShape({name:"inclusiveGateway", title:inclusiveGatewayText, text:inclusiveGatewayText, category:"process_bpmn2", groupName:"bpmnGateway", dataAttributes:[ + {name:"gatewayDirection", type:"list", value:"", category:"default", listItems:["Unspecified,Converging,Diverging,Mixed"]}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:50, h:50}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, lineStyle:{lineColor:gatewayLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:gatewayFillStyleBeginColor, endColor:gatewayFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"gateway0"}}, + {lineStyle:{lineStyle:"solid", lineColor:gatewayLineColor}, fillStyle:{type:"solid", color:gatewayContentColor}, actions:{ref:"g_round"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"gateway0"}} +]}); +Schema.addShape({name:"complexGateway", title:complexGatewayText, text:complexGatewayText, category:"process_bpmn2", groupName:"bpmnGateway", dataAttributes:[ + {name:"gatewayDirection", type:"list", value:"", category:"default", listItems:["Unspecified,Converging,Diverging,Mixed"]}, + {name:"sequeneceFlow", type:"string", value:"", category:"default"}, + {name:"activationCondition", type:"string", value:"", category:"default"}, + {name:"activationCount", type:"number", value:"", category:"default"}, + {name:"waitingForStart", type:"boolean", value:"true", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:50, h:50}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, lineStyle:{lineColor:gatewayLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:gatewayFillStyleBeginColor, endColor:gatewayFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"gateway0"}}, + {lineStyle:{lineWidth:0, lineStyle:"solid"}, fillStyle:{type:"solid", color:gatewayLineColor}, actions:{ref:"complex_gateway0"}}, + {lineStyle:{lineWidth:0, lineStyle:"solid"}, fillStyle:{type:"solid", color:gatewayLineColor}, actions:{ref:"complex_gateway1"}}, + {lineStyle:{lineWidth:0, lineStyle:"solid"}, fillStyle:{type:"solid", color:gatewayLineColor}, actions:{ref:"complex_gateway2"}}, + {lineStyle:{lineWidth:0, lineStyle:"solid"}, fillStyle:{type:"solid", color:gatewayLineColor}, actions:{ref:"complex_gateway3"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"gateway0"}} +]}); +Schema.addShape({name:"eventBasedGateway", title:eventBasedGatewayText, text:eventBasedGatewayText, category:"process_bpmn2", groupName:"bpmnGateway", dataAttributes:[ + {name:"gatewayDirection", type:"list", value:"", category:"default", listItems:["Unspecified,Converging,Diverging,Mixed"]}, + {name:"instantiate", type:"boolean", value:"false", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:50, h:50}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, lineStyle:{lineColor:gatewayLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:gatewayFillStyleBeginColor, endColor:gatewayFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"gateway0"}}, + {lineStyle:{lineStyle:"solid", lineColor:gatewayLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:gatewayFillStyleBeginColor, endColor:gatewayFillStyleBndColor, angle:0}, actions:{ref:"event_based_gateway"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"gateway0"}} +]}); +Schema.addShape({name:"parallelGateway", title:parallelGatewayText, text:parallelGatewayText, category:"process_bpmn2", groupName:"bpmnGateway", dataAttributes:[ + {name:"gatewayDirection", type:"list", value:"", category:"default", listItems:["Unspecified,Converging,Diverging,Mixed"]}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:50, h:50}, textBlock:{x:"w/2-60", y:"h", w:"120", h:"30"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, lineStyle:{lineColor:gatewayLineColor}, fillStyle:{type:"gradient", color:"255,255,255", gradientType:"linear", beginColor:gatewayFillStyleBeginColor, endColor:gatewayFillStyleBndColor, angle:0}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"gateway0"}}, + {lineStyle:{lineWidth:0, lineStyle:"solid"}, fillStyle:{type:"solid", color:gatewayLineColor}, actions:{ref:"parallel_gateway"}}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"gateway0"}} +]}); +Schema.addShape({name:"group", title:groupText, text:groupText, category:"process_bpmn2", attribute:{container:true,editable:true}, props:{w:200, h:140}, textBlock:{x:"10", y:"0", w:"w-20", h:"h"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, fontStyle:{textAlign:"top", vAlign:"left"}, path:[ + {lineStyle:{lineWidth:2, lineStyle:"dashed"}, fillStyle:{type:"none"}, actions:{ref:"roundRectangle"}} +]}); +Schema.addShape({name:"textAnnotation", title:textAnnotationText, text:textAnnotationText, category:"process_bpmn2", dataAttributes:[ + {name:"text", type:"string", value:"", category:"default"}, + {name:"default", type:"string", value:"", category:"default",linksArray:[],attributesContent:"",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],shapeDesc:"",shapeGroupId:"",upFilesArray :[],isCopy:"",relevanceShapes :[]} +], props:{w:100, h:70}, anchors:[ + {x:"0", y:"h*0.5"}, + {x:"0", y:"h*0.5"}, + {x:"0", y:"h*0.5"}, + {x:"0", y:"h*0.5"} +], path:[ + {fillStyle:{type:"none"}, lineStyle:{lineWidth:0}, actions:{ref:"rectangle"}}, + {fillStyle:{type:"none"}, lineStyle:{lineStyle:"solid"}, actions:[ + {action:"move", x:"w/6", y:"0"}, + {action:"line", x:"0", y:"0"}, + {action:"line", x:"0", y:"h"}, + {action:"line", x:"w/6", y:"h"} + ]}, + {fillStyle:{type:"none"}, lineStyle:{lineWidth:0}, actions:{ref:"rectangle"}} +]}); +Schema.addCategory({name:"lane", text:"泳池/泳道"}); +function getPool(a, d) { + for (var b = Model.orderList.length - 1; b >= 0; b--) { + var e = Model.orderList[b].id; + var c = Model.getShapeById(e); + if (c.name == d) { + if (Utils.rectCross(c.props, a.props)) { + return c + } + } + } + return null +} +function getVerticalPoolWidth(c) { + var a = 0; + for (var b = 0; b < c.children.length; b++) { + var d = c.children[b]; + var e = Model.getShapeById(d); + if (e.name != "horizontalSeparator") { + a += e.props.w + } + } + return a +} +function getHorizontalPoolHeight(c) { + var a = 0; + for (var b = 0; b < c.children.length; b++) { + var d = c.children[b]; + var e = Model.getShapeById(d); + if (e.name != "horizontalSeparator") { + a += e.props.w + } + } + return a +} +function getChild(c, a) { + for (var b = 0; b < c.children.length; b++) { + var d = c.children[b]; + var e = Model.getShapeById(d); + if (e.name == a) { + return e + } + } + return null +} +Schema.addShape({name:"verticalPool", title:verticalPoolText, text:verticalPoolText, category:"lane", attribute:{rotatable:false, linkable:false, container:true}, children:[], props:{w:250, h:540}, fontStyle:{size:16}, textBlock:{x:10, y:0, w:"w-20", h:40},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, anchors:[], resizeDir:["l", "b", "r"], path:[ + {fillStyle:{type:"none"}, lineStyle:{lineStyle:"solid"}, actions:{ref:"rectangle"}}, + {lineStyle:{lineStyle:"solid"}, fillStyle:{type:"none"}, actions:[ + {action:"move", x:0, y:0}, + {action:"line", x:"w", y:0}, + {action:"line", x:"w", y:40}, + {action:"line", x:0, y:40}, + {action:"close"} + ]} +], drawIcon:function (b, c) { + b += 8; + var a = -4; + return[ + {fillStyle:{type:"none"}, actions:[ + {action:"move", x:a, y:0}, + {action:"line", x:b, y:0}, + {action:"line", x:b, y:c}, + {action:"line", x:a, y:c}, + {action:"close"} + ]}, + {actions:[ + {action:"move", x:a, y:0}, + {action:"line", x:b, y:0}, + {action:"line", x:b, y:4}, + {action:"line", x:a, y:4}, + {action:"close"} + ]}, + {actions:[ + {action:"move", x:(a + b) / 2, y:4}, + {action:"line", x:(a + b) / 2, y:c} + ]} + ] +}}); +Schema.addShape({name:"verticalLane", title:verticalLaneText, text:verticalLaneText, category:"lane", attribute:{container:true, rotatable:false, linkable:false}, props:{w:250, h:500}, textBlock:{x:10, y:0, w:"w-20", h:30},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, anchors:[], resizeDir:["l", "b", "r"], path:[ + {fillStyle:{type:"none"}, lineStyle:{lineStyle:"solid"}, actions:{ref:"rectangle"}}, + {lineStyle:{lineStyle:"solid"}, fillStyle:{type:"none"}, actions:[ + {action:"move", x:0, y:0}, + {action:"line", x:"w", y:0}, + {action:"line", x:"w", y:30}, + {action:"line", x:0, y:30}, + {action:"close"} + ]} +], drawIcon:function (a, b) { + return[ + {fillStyle:{type:"none"}, lineStyle:{lineStyle:"solid"}, actions:[ + {action:"move", x:0, y:0}, + {action:"line", x:a, y:0}, + {action:"line", x:a, y:b}, + {action:"line", x:0, y:b}, + {action:"close"} + ]}, + {lineStyle:{lineStyle:"solid"}, actions:[ + {action:"move", x:0, y:0}, + {action:"line", x:a, y:0}, + {action:"line", x:a, y:4}, + {action:"line", x:0, y:4}, + {action:"close"} + ]} + ] +}, onCreated:function () { + Utils.unselect(); + var d = getPool(this, "verticalPool"); + if (d == null) { + d = Model.create("verticalPool", this.props.x, this.props.y - 40); + d.children = [this.id]; + Model.add(d) + } else { + if (!d.children) { + d.children = [] + } + var f = [d]; + var a = d.props.x; + var tmpW = this.props.w; + var c = 0; + var b = 0; + var tmp = -1; + //根据props.y来排序 + function compare(prop) { + return function(a, b) { + var aa = Model.getShapeById(a); + var bb = Model.getShapeById(b); + var value1 = aa.props[prop]; + var value2 = bb.props[prop]; + return value1 - value2; + } + } + d.children.sort(compare('x')); + for (var c = 0; c < d.children.length; c++) { + var e = d.children[c]; + var g = Model.getShapeById(e); + if (g.name == "verticalLane") { + if (Utils.rectCross(g.props, this.props)) { + tmp = c + 1; + break; + } + } + } + for (var m = 0; tmp > 0 && m < tmp; m++) { + var e = d.children[m]; + var g = Model.getShapeById(e); + if (g.name == "verticalLane") { + a += g.props.w; + c++ + } else { + if (g.name == "verticalSeparatorBar") { + a += g.props.w; + b++ + } + } + } + /*for (var d = 0; d < e.children.length; d++) { + var f = e.children[d]; + var h = Model.getShapeById(f); + if (h.name == "verticalLane") { + a += h.props.w; + c++ + } else { + if (h.name == "verticalSeparatorBar") { + a += h.props.w; + b++ + } + } + }*/ + this.props.x = a; + this.props.y = d.props.y + 40; + this.props.h = d.props.h - 40; + if (c == 0) { + if (b == 0) { + this.props.w = d.props.w + } else { + this.props.w = d.props.w - 20 + } + } + Designer.painter.renderShape(this); + f.push(this); + var rightLanes = []; + for (var c = tmp; tmp > 0 && c < d.children.length; c++) { + var e = d.children[c]; + var g = Model.getShapeById(e); + rightLanes.push(g); + } + + var containedShapes = Utils.getContainedShapes(rightLanes); + var containedLinkers = Utils.getOutlinkers(containedShapes); + containedShapes = containedShapes.concat(containedLinkers); + for (var i = 0; i < containedShapes.length; i++) { + var shape = Model.getShapeById(containedShapes[i].id); + Designer.painter.renderShape(shape); + f.push(shape); + } + Designer.op.moveShape(containedShapes, { + x : tmpW * Designer.config.scale, + y : 0 + }); + Designer.op.hideTip(); + + for (var c = tmp; tmp > 0 && c < d.children.length; c++) { + var e = d.children[c]; + var g = Model.getShapeById(e); + g.props.x = g.props.x + tmpW; + Designer.painter.renderShape(g); + f.push(g); + } + if (d.children.length > 0) { + d.props.w = d.props.w + tmpW; + } + //e.props.w = this.props.x + this.props.w - e.props.x; + for (var c = 0; c < d.children.length; c++) { + var e = d.children[c]; + var h = Model.getShapeById(e); + if (h.name == "horizontalSeparator") { + h.props.w = d.props.w; + Designer.painter.renderShape(h); + f.push(h) + } + } + d.children.push(this.id); + Model.updateMulti(f); + } + Designer.painter.renderShape(d); + this.parent = d.id +}}); +Schema.addShape({name:"verticalSeparatorBar", title:"Vertical SeparatorBar", text:"", category:"lane", attribute:{rotatable:false, linkable:false, visible:false, editable:false}, props:{w:20, h:500}, anchors:[], resizeDir:[], path:[ + {lineStyle:{lineStyle:"solid"}, actions:{ref:"rectangle"}} +]}); +Schema.addShape({name:"horizontalPool", title:horizontalPoolText, text:horizontalPoolText, category:"lane", attribute:{rotatable:false, linkable:false, container:true}, children:[], props:{w:640, h:200}, fontStyle:{size:16, orientation:"horizontal"}, textBlock:{x:0, y:10, w:40, h:"h-20"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, anchors:[], resizeDir:["t", "r", "b"], path:[ + {fillStyle:{type:"none"}, lineStyle:{lineStyle:"solid"}, actions:{ref:"rectangle"}}, + {lineStyle:{lineStyle:"solid"}, fillStyle:{type:"none"}, actions:[ + {action:"move", x:0, y:0}, + {action:"line", x:40, y:0}, + {action:"line", x:40, y:"h"}, + {action:"line", x:0, y:"h"}, + {action:"close"} + ]} +], drawIcon:function (a, b) { + b += 8; + var c = -4; + return[ + {fillStyle:{type:"none"}, actions:[ + {action:"move", x:0, y:c}, + {action:"line", x:a, y:c}, + {action:"line", x:a, y:b}, + {action:"line", x:0, y:b}, + {action:"close"} + ]}, + {actions:[ + {action:"move", x:0, y:c}, + {action:"line", x:4, y:c}, + {action:"line", x:4, y:b}, + {action:"line", x:0, y:b}, + {action:"close"} + ]}, + {actions:[ + {action:"move", x:4, y:(c + b) / 2}, + {action:"line", x:a, y:(c + b) / 2} + ]} + ] +}}); +Schema.addShape({name:"horizontalLane", title:horizontalLaneText, text:horizontalLaneText, category:"lane", attribute:{container:true, rotatable:false, linkable:false}, props:{w:600, h:200}, fontStyle:{orientation:"horizontal"}, textBlock:{x:0, y:10, w:30, h:"h-20"},textBlockFinal:{x:5, y:0, w:"w-10", h:"h"}, anchors:[], resizeDir:["t", "b", "r"], path:[ + {fillStyle:{type:"none"}, lineStyle:{lineStyle:"solid"}, actions:{ref:"rectangle"}}, + {lineStyle:{lineStyle:"solid"}, fillStyle:{type:"none"}, actions:[ + {action:"move", x:0, y:0}, + {action:"line", x:30, y:0}, + {action:"line", x:30, y:"h"}, + {action:"line", x:0, y:"h"}, + {action:"close"} + ]} +], drawIcon:function (a, b) { + b += 3; + return[ + {fillStyle:{type:"none"}, lineStyle:{lineStyle:"solid"}, actions:[ + {action:"move", x:0, y:-1}, + {action:"line", x:a, y:-1}, + {action:"line", x:a, y:b}, + {action:"line", x:0, y:b}, + {action:"close"} + ]}, + {lineStyle:{lineStyle:"solid"}, actions:[ + {action:"move", x:0, y:-1}, + {action:"line", x:4, y:-1}, + {action:"line", x:4, y:b}, + {action:"line", x:0, y:b}, + {action:"close"} + ]} + ] +}, onCreated:function () { + Utils.unselect(); + var d = getPool(this, "horizontalPool"); + if (d == null) { + d = Model.create("horizontalPool", this.props.x - 40, this.props.y); + d.children = [this.id]; + Model.add(d) + } else { + if (!d.children) { + d.children = [] + } + var f = [d]; + var h = d.props.y; + var tmpH = this.props.h; + var b = 0; + var a = 0; + var tmp = -1; + //根据props.y来排序 + function compare(prop) { + return function(a, b) { + var aa = Model.getShapeById(a); + var bb = Model.getShapeById(b); + var value1 = aa.props[prop]; + var value2 = bb.props[prop]; + return value1 - value2; + } + } + d.children.sort(compare('y')); + for (var c = 0; c < d.children.length; c++) { + var e = d.children[c]; + var g = Model.getShapeById(e); + if (g.name == "horizontalLane") { + if (Utils.rectCross(g.props, this.props)) { + tmp = c + 1; + break; + } + } + } + for (var c = 0; tmp > 0 && c < tmp; c++) { + var e = d.children[c]; + var g = Model.getShapeById(e); + if (g.name == "horizontalLane") { + h += g.props.h; + b++ + } else { + if (g.name == "horizontalSeparatorBar") { + h += g.props.h; + a++ + } + } + } + this.props.y = h; + this.props.x = d.props.x + 40; + this.props.w = d.props.w - 40; + if (b == 0) { + if (a == 0) { + this.props.h = d.props.h + } else { + this.props.h = d.props.h - 20 + } + } + Designer.painter.renderShape(this); + f.push(this); + var bottomLanes = []; + for (var c = tmp; tmp > 0 && c < d.children.length; c++) { + var e = d.children[c]; + var g = Model.getShapeById(e); + bottomLanes.push(g); + } + var containedShapes = Utils.getContainedShapes(bottomLanes); + var containedLinkers = Utils.getOutlinkers(containedShapes); + containedShapes = containedShapes.concat(containedLinkers); + for (var i = 0; i < containedShapes.length; i++) { + var shape = Model.getShapeById(containedShapes[i].id); + Designer.painter.renderShape(shape); + f.push(shape); + } + Designer.op.moveShape(containedShapes, { + x : 0, + y : tmpH * Designer.config.scale + }); + Designer.op.hideTip(); + + for (var c = tmp; tmp > 0 && c < d.children.length; c++) { + var e = d.children[c]; + var g = Model.getShapeById(e); + g.props.y = g.props.y + tmpH; + Designer.painter.renderShape(g); + f.push(g); + } + if (d.children.length > 0) { + d.props.h = d.props.h + tmpH; + } + //d.props.h = this.props.y + this.props.h - d.props.y; + for (var c = 0; c < d.children.length; c++) { + var e = d.children[c]; + var g = Model.getShapeById(e); + if (g.name == "verticalSeparator") { + g.props.h = d.props.h; + Designer.painter.renderShape(g); + f.push(g) + } + } + d.children.push(this.id); + Model.updateMulti(f); + } + Designer.painter.renderShape(d); + this.parent = d.id +}}); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/process.bpmn2/fragment/abc.tpl b/com.actionsoft.apps.coe.pal/method/process.bpmn2/fragment/abc.tpl new file mode 100644 index 00000000..8b671488 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.bpmn2/fragment/abc.tpl @@ -0,0 +1,3 @@ + diff --git a/com.actionsoft.apps.coe.pal/method/process.businessArea/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/process.businessArea/diagram.attribute.xml new file mode 100644 index 00000000..244f4308 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.businessArea/diagram.attribute.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/process.businessLevel/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/process.businessLevel/diagram.attribute.xml new file mode 100644 index 00000000..5030207d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.businessLevel/diagram.attribute.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/process.evc/diagram.attribute.custom.xml b/com.actionsoft.apps.coe.pal/method/process.evc/diagram.attribute.custom.xml new file mode 100644 index 00000000..4bc4bdb9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.evc/diagram.attribute.custom.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/process.evc/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/process.evc/diagram.attribute.xml new file mode 100644 index 00000000..0b4259f0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.evc/diagram.attribute.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/process.evc/diagram.import.xml b/com.actionsoft.apps.coe.pal/method/process.evc/diagram.import.xml new file mode 100644 index 00000000..834c3b51 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.evc/diagram.import.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/process.evc/diagram.linker.xml b/com.actionsoft.apps.coe.pal/method/process.evc/diagram.linker.xml new file mode 100644 index 00000000..c50c93c2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.evc/diagram.linker.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/process.evc/diagram.schema.tpl b/com.actionsoft.apps.coe.pal/method/process.evc/diagram.schema.tpl new file mode 100644 index 00000000..5f03333a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.evc/diagram.schema.tpl @@ -0,0 +1,100 @@ +Schema.addCategory({name:"process_evc", text:"EVC 企业价值链", dataAttributes:[ + {name:"No.", type:"number", value:"", category:"default"}, + {name:"Name", type:"string", value:"", category:"default"}, + {name:"Owner", type:"string", value:"", category:"default"}, + {name:"Link", type:"link", value:"", category:"default"}, + {name:"Memo", type:"string", value:"", category:"default"}, + {name:"Cost", type:"number", value:"", category:"default"}, + {name:"Time", type:"number", value:"", category:"default"}, + {name:"Manner", type:"list", value:"", category:"default"}, + {name:"Department", type:"string", value:"", category:"default"}, + {name:"Input", type:"string", value:"", category:"default"}, + {name:"Output", type:"string", value:"", category:"default"}, + {name:"Risk", type:"string", value:"", category:"default"}, + {name:"Remarks", type:"string", value:"", category:"default"} +]}); +/***ValueChain1*/Schema.addShape({name:"valueChain1", title:"价值链", text:"价值链", category:"process_evc", props:{w:110, h:50},fontStyle:{color:"255,255,255"},lineStyle:{lineWidth:0}, textBlock:{x:"Math.min(h/2,w/6)", y:"0", w:"w-Math.min(h/2,w/6)*2", h:"h"}, textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, anchors:[ + {x:"w*0.5", y:"0"}, + {x:"w", y:"h*0.5"}, + {x:"w*0.5", y:"h"}, + {x:"Math.min(h/2,w/6)", y:"h*0.5"} +], fillStyle:{color:"165,179,189"},path:[ + {actions:[ + {action:"move", x:"Math.min(h/2,w/6)", y:"h*0.5"}, + {action:"line", x:"0", y:"0"}, + {action:"line", x:"w-Math.min(h/2,w/6)", y:"0"}, + {action:"line", x:"w", y:"h*0.5"}, + {action:"line", x:"w-Math.min(h/2,w/6)", y:"h"}, + {action:"line", x:"0", y:"h"}, + {action:"line", x:"Math.min(h/2,w/6)", y:"h*0.5"}, + {action:"close"} + ]} +]}); +/***ValueChain2*/Schema.addShape({name:"valueChain2", title:"价值链2", text:"价值链", category:"process_evc", props:{w:110, h:50},fontStyle:{color:"255,255,255"},lineStyle:{lineWidth:0}, textBlock:{x:"Math.min(h/2,w/6)", y:"0", w:"w-Math.min(h/2,w/6)*2", h:"h"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, anchors:[ + {x:"w*0.5", y:"0"}, + {x:"w-Math.min(h/2,w/6)", y:"h*0.5"}, + {x:"w*0.5", y:"h"}, + {x:"0", y:"h*0.5"} +], fillStyle:{color:"165,179,189"},path:[ + {actions:[ + {action:"move", x:"0", y:"h*0.5"}, + {action:"line", x:"Math.min(h/2,w/6)", y:"0"}, + {action:"line", x:"w", y:"0"}, + {action:"line", x:"w-Math.min(h/2,w/6)", y:"h*0.5"}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:"Math.min(h/2,w/6)", y:"h"}, + {action:"line", x:"0", y:"h*0.5"}, + {action:"close"} + ]} +]}); +/***ValueChain3*/Schema.addShape({name:"valueChain3", title:"价值链3", text:"价值链", category:"process_evc", props:{w:110, h:50},fontStyle:{color:"255,255,255"},lineStyle:{lineWidth:0},fillStyle:{color:"165,179,189"}, path:[ + {actions:[ + {action:"move", x:"0", y:"0"}, + {action:"line", x:"w-Math.min(h/2,w/6)", y:"0"}, + {action:"line", x:"w", y:"h*0.5"}, + {action:"line", x:"w-Math.min(h/2,w/6)", y:"h"}, + {action:"line", x:"0", y:"h"}, + {action:"line", x:"0", y:"0"}, + {action:"close"} + ]} +]}); +/***ValueChain4*/Schema.addShape({name:"valueChain4", title:"价值链4", text:"价值链", category:"process_evc", props:{w:110, h:50},fontStyle:{color:"255,255,255"},lineStyle:{lineWidth:0}, fillStyle:{color:"165,179,189"},path:[ + {actions:[ + {action:"move", x:"0", y:"h*0.5"}, + {action:"line", x:"Math.min(h/2,w/6)", y:"0"}, + {action:"line", x:"w", y:"0"}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:"Math.min(h/2,w/6)", y:"h"}, + {action:"line", x:"0", y:"h*0.5"}, + {action:"close"} + ]} +]}); +/***ValueChain5*/Schema.addShape({name:"valueChain5", title:"价值链5", text:"价值链", category:"process_evc", props:{w:150, h:70}, textBlock:{x:"0", y:"Math.min(h/2,w/6)", w:"w", h:"h-Math.min(h/2,w/6)"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, path:[ + {actions:[ + {action:"move", x:"w*0.5", y:"0"}, + {action:"line", x:"w", y:"Math.min(h/2,w/6)"}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:"0", y:"h"}, + {action:"line", x:"0", y:"Math.min(h/2,w/6)"}, + {action:"line", x:"w*0.5", y:"0"}, + {action:"close"} + ]} +]}); +/***ValueChain6*/Schema.addShape({name:"valueChain6", title:"价值链6", text:"价值链", category:"process_evc", props:{w:150, h:70}, textBlock:{x:"0", y:"0", w:"w", h:"h-Math.min(h/2,w/6)"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, path:[ + {actions:[ + {action:"move", x:"0", y:"0"}, + {action:"line", x:"w", y:"0"}, + {action:"line", x:"w", y:"h-Math.min(h/2,w/6)"}, + {action:"line", x:"w*0.5", y:"h"}, + {action:"line", x:"0", y:"h-Math.min(h/2,w/6)"}, + {action:"line", x:"0", y:"0"}, + {action:"close"} + ]} +]}); +/***Input/Output*/Schema.addShape({name:"I/O_L3", title:"L3", text:"L3", category:"process_evc", props:{w:110, h:50}, path:[ + {actions:{ref:"rectangle"}} +]}); + +/***Input/Output*/Schema.addShape({name:"I/O_L1", title:"L1", text:"L1", category:"process_evc", props:{w:110, h:50},fontStyle:{color:"255,255,255"},lineStyle:{lineWidth:0},fillStyle:{color:"0,142,207"}, path:[ + {actions:{ref:"rectangle"}} +]}); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/process.evc/fragment/abc.tpl b/com.actionsoft.apps.coe.pal/method/process.evc/fragment/abc.tpl new file mode 100644 index 00000000..8b671488 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.evc/fragment/abc.tpl @@ -0,0 +1,3 @@ + diff --git a/com.actionsoft.apps.coe.pal/method/process.processGroup/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/process.processGroup/diagram.attribute.xml new file mode 100644 index 00000000..bb85a5f8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/process.processGroup/diagram.attribute.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/method/product.normal/diagram.attribute.xml b/com.actionsoft.apps.coe.pal/method/product.normal/diagram.attribute.xml new file mode 100644 index 00000000..edc77e9b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/product.normal/diagram.attribute.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/product.normal/diagram.import.xml b/com.actionsoft.apps.coe.pal/method/product.normal/diagram.import.xml new file mode 100644 index 00000000..b23f1a20 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/product.normal/diagram.import.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/product.normal/diagram.linker.xml b/com.actionsoft.apps.coe.pal/method/product.normal/diagram.linker.xml new file mode 100644 index 00000000..9e3f7925 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/product.normal/diagram.linker.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/method/product.normal/diagram.schema.tpl b/com.actionsoft.apps.coe.pal/method/product.normal/diagram.schema.tpl new file mode 100644 index 00000000..57951a9e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/product.normal/diagram.schema.tpl @@ -0,0 +1,152 @@ +Schema.addCategory({name:"product_normal", text:"产品/服务图", dataAttributes:[]}); +/*Production 上三角矩形,中间为实线*/ +Schema.addShape({name:"product", title:"产品",text:"产品", category:"product_normal", props:{w:120, h:70}, textBlock:{x:"0", y:"Math.min(h/2,w/6)", w:"w", h:"h*0.75-Math.min(h/2,w/6)"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, path:[ + {actions:[ + {action:"move", x:"w*0.5", y:"0"}, + {action:"line", x:"w", y:"Math.min(h/2,w/6)"}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:"0", y:"h"}, + {action:"line", x:"0", y:"Math.min(h/2,w/6)"}, + {action:"line", x:"w*0.5", y:"0"}, + {action:"close"} + ]}, + {actions:[ + {action:"move", x:"0", y:"h*0.75"}, + {action:"line", x:"w", y:"h*0.75"} + ]}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:[ + {action:"move", x:"w*0.5", y:"0"}, + {action:"line", x:"w", y:"Math.min(h/2,w/6)"}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:"0", y:"h"}, + {action:"line", x:"0", y:"Math.min(h/2,w/6)"}, + {action:"line", x:"w*0.5", y:"0"}, + {action:"close"} + ]} +]}); +/*Production 上三角矩形,中间为虚线*/ +Schema.addShape({name:"service", title:"服务",text:"服务", category:"product_normal", props:{w:120, h:70}, textBlock:{x:"0", y:"Math.min(h/2,w/6)", w:"w", h:"h*0.75-Math.min(h/2,w/6)"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, path:[ + {actions:[ + {action:"move", x:"w*0.5", y:"0"}, + {action:"line", x:"w", y:"Math.min(h/2,w/6)"}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:"0", y:"h"}, + {action:"line", x:"0", y:"Math.min(h/2,w/6)"}, + {action:"line", x:"w*0.5", y:"0"}, + {action:"close"} + ]}, + {lineStyle:{lineStyle:"dashed"}, actions:[ + {action:"move", x:"0", y:"h*0.75"}, + {action:"line", x:"w", y:"h*0.75"} + ]}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:[ + {action:"move", x:"w*0.5", y:"0"}, + {action:"line", x:"w", y:"Math.min(h/2,w/6)"}, + {action:"line", x:"w", y:"h"}, + {action:"line", x:"0", y:"h"}, + {action:"line", x:"0", y:"Math.min(h/2,w/6)"}, + {action:"line", x:"w*0.5", y:"0"}, + {action:"close"} + ]} +], + drawIcon: function(w, h) { + if (w < 36) { + return [ + {actions:[ + {action:"move", x:w*0.5, y:0}, + {action:"line", x:w, y:Math.min(h/2,w/6)}, + {action:"line", x:w, y:h}, + {action:"line", x:0, y:h}, + {action:"line", x:0, y:Math.min(h/2,w/6)}, + {action:"line", x:w*0.5, y:0}, + {action:"close"} + ]}, + {lineStyle:{lineStyle:"solid"}, actions:[ + {action:"move", x:0, y:h*0.75}, + {action:"line", x:4, y:h*0.75}, + {action:"move", x:6, y:h*0.75}, + {action:"line", x:10, y:h*0.75}, + {action:"move", x:12, y:h*0.75}, + {action:"line", x:16, y:h*0.75}, + {action:"move", x:18, y:h*0.75}, + {action:"line", x:22, y:h*0.75}, + {action:"move", x:24, y:h*0.75}, + {action:"line", x:26, y:h*0.75} + ]}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:[ + {action:"move", x:w*0.5, y:0}, + {action:"line", x:w, y:Math.min(h/2,w/6)}, + {action:"line", x:w, y:h}, + {action:"line", x:0, y:h}, + {action:"line", x:0, y:Math.min(h/2,w/6)}, + {action:"line", x:w*0.5, y:0}, + {action:"close"} + ]} + ] + } else { + return [ + {actions:[ + {action:"move", x:w*0.5, y:0}, + {action:"line", x:w, y:Math.min(h/2,w/6)}, + {action:"line", x:w, y:h}, + {action:"line", x:0, y:h}, + {action:"line", x:0, y:Math.min(h/2,w/6)}, + {action:"line", x:w*0.5, y:0}, + {action:"close"} + ]}, + {lineStyle:{lineStyle:"dashed"}, actions:[ + {action:"move", x:0, y:h*0.75}, + {action:"line", x:w, y:h*0.75} + ]}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:[ + {action:"move", x:w*0.5, y:0}, + {action:"line", x:w, y:Math.min(h/2,w/6)}, + {action:"line", x:w, y:h}, + {action:"line", x:0, y:h}, + {action:"line", x:0, y:Math.min(h/2,w/6)}, + {action:"line", x:w*0.5, y:0}, + {action:"close"} + ]} + ] + } + } +}); +/*Target 三个圆形*/ +Schema.addShape({name:"target", title:"目标",text:"目标", category:"product_normal", props:{w:70, h:70}, textBlock:{x:"-20", y:"h", w:"w+40", h:"30"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, path:[ + {lineStyle:{lineStyle:"solid"}, actions:[ + {action:"move", x:"0", y:"h/2"}, + {action:"curve", x1:"0", y1:"-h/6", x2:"w", y2:"-h/6", x:"w", y:"h/2"}, + {action:"curve", x1:"w", y1:"h+h/6", x2:"0", y2:"h+h/6", x:"0", y:"h/2"}, + {action:"close"} + ]}, + {lineStyle:{lineStyle:"solid"}, actions:[ + {action:"move", x:"w/6", y:"h/2"}, + {action:"curve", x1:"w/6", y1:"-(h*2/3)/6+h/6", x2:"w*5/6", y2:"-(h*2/3)/6+h/6", x:"w*5/6", y:"h/2"}, + {action:"curve", x1:"w*5/6", y1:"(h*2/3)+(h*2/3)/6+h/6", x2:"w/6", y2:"(h*2/3)+(h*2/3)/6+h/6", x:"w/6", y:"h/2"}, + {action:"close"} + ]}, + {lineStyle:{lineStyle:"solid"}, actions:[ + {action:"move", x:"w/3", y:"h/2"}, + {action:"curve", x1:"w/3", y1:"-(h/3)/6+h/3", x2:"w*2/3", y2:"-(h/3)/6+h/3", x:"w*2/3", y:"h/2"}, + {action:"curve", x1:"w*2/3", y1:"h/3+(h/3)/6+h/3", x2:"w/3", y2:"h/3+(h/3)/6+h/3", x:"w/3", y:"h/2"}, + {action:"close"} + ]}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"round"}} +]}); +/*Consumer 小人*/ +Schema.addShape({name:"consumer", title:"消费者",text:"消费者", category:"product_normal", props:{w:70, h:100}, textBlock:{x:"-20", y:"h", w:"w+40", h:"30"},textBlockFinal:{x:"w/2-60", y:"h", w:"120", h:"30"}, path:[ + {actions:[ + {action:"move", x:"w*(4/12)", y:"h*(1/8)"}, + {action:"curve", x1:"w*(4/12)", y1:"-h*(2/8)*(1/6)", x2:"w*(8/12)", y2:"-h*(2/8)*(1/6)", x:"w*(8/12)", y:"h*(1/8)"}, + {action:"curve", x1:"w*(8/12)", y1:"h*(2/8)*1/6+h*(2/8)", x2:"w*(4/12)", y2:"h*(2/8)*1/6+h*(2/8)", x:"w*(4/12)", y:"h*(1/8)"}, + {action:"move", x:"w*(6/12)", y:"h*(2/8)"}, + {action:"line", x:"w*(6/12)", y:"h*(6/8)"}, + {action:"move", x:"w*(6/12)", y:"h*(6/8)"}, + {action:"line", x:"w*(1/12)", y:"h"}, + {action:"move", x:"w*(6/12)", y:"h*(6/8)"}, + {action:"line", x:"w*(11/12)", y:"h"}, + {action:"move", x:"0", y:"h*(4/8)"}, + {action:"line", x:"w", y:"h*(4/8)"} + ]}, + {lineStyle:{lineWidth:0}, fillStyle:{type:"none"}, actions:{ref:"rectangle"}} +]}); diff --git a/com.actionsoft.apps.coe.pal/method/product.normal/fragment/abc.tpl b/com.actionsoft.apps.coe.pal/method/product.normal/fragment/abc.tpl new file mode 100644 index 00000000..8b671488 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/method/product.normal/fragment/abc.tpl @@ -0,0 +1,3 @@ + diff --git a/com.actionsoft.apps.coe.pal/method/shape.map.tpl b/com.actionsoft.apps.coe.pal/method/shape.map.tpl new file mode 100644 index 00000000..e69de29b diff --git a/com.actionsoft.apps.coe.pal/repository/job/_7a1883b9-4d6d-4d98-bd01-2405a50fe4f2/7a1883b9-4d6d-4d98-bd01-2405a50fe4f2.xml b/com.actionsoft.apps.coe.pal/repository/job/_7a1883b9-4d6d-4d98-bd01-2405a50fe4f2/7a1883b9-4d6d-4d98-bd01-2405a50fe4f2.xml new file mode 100644 index 00000000..66529110 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/repository/job/_7a1883b9-4d6d-4d98-bd01-2405a50fe4f2/7a1883b9-4d6d-4d98-bd01-2405a50fe4f2.xml @@ -0,0 +1,23 @@ + + + 7a1883b9-4d6d-4d98-bd01-2405a50fe4f2 + admin + 2018-09-13 15:03:49 + + 2018-09-27 13:56:00 + DgQSSyFmOqrf7WQa6WFesZuTOnzFe+zevZg0BYW55MuhMOtUylRD92QW2MZY8fzu+hJQOuMhorAx5qr7F4iYvqXdjFB04HCdUNpBMj09lcfmaGtFNwhpz7xUV4N75kkJ + false + 流程资产库定时创建模型图片和缩略图 + DEFAULT + 定时对有内容修改的模型进行图片和缩略图更新 + false + false + com.actionsoft.apps.coe.pal.pal.repository.designer.job.SaveImageJob + 2018-09-13T15:03:49+08:00 + 6:300:-1 + + + false + 未分类 + false + diff --git a/com.actionsoft.apps.coe.pal/repository/job/_b8cc6b10-63cf-4ec1-81e7-efa29e96c5b4/b8cc6b10-63cf-4ec1-81e7-efa29e96c5b4.xml b/com.actionsoft.apps.coe.pal/repository/job/_b8cc6b10-63cf-4ec1-81e7-efa29e96c5b4/b8cc6b10-63cf-4ec1-81e7-efa29e96c5b4.xml new file mode 100644 index 00000000..d2cb22cb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/repository/job/_b8cc6b10-63cf-4ec1-81e7-efa29e96c5b4/b8cc6b10-63cf-4ec1-81e7-efa29e96c5b4.xml @@ -0,0 +1,26 @@ + + + b8cc6b10-63cf-4ec1-81e7-efa29e96c5b4 + admin + 2020-09-29 17:13:14 + + 2020-09-29 18:15:04 + tGOmxiTgjT/77UoYpSlq8Vc+hHPRoJWHdZexXc7zEpYuMNdhvSICeJnlc/RzRHGr570G0lHuVGv3RKy8x4EYxolzK509fp66aZljmO/ixvW8Cp8oJqVyW4bmoyjErNOX + false + 流程资产库定时清理回收站数据 + DEFAULT + 定时清理已放入回收站超过三十天的模型数据,清理即彻底删除,不可找回,每天执行 + false + false + com.actionsoft.apps.coe.pal.pal.repository.job.RemoveRecycleJob + 2020-09-29T17:13:14+08:00 + 0:0:0 + + + false + 未分类 + false + + + + diff --git a/com.actionsoft.apps.coe.pal/resource/import/org/ORG model import template.xls b/com.actionsoft.apps.coe.pal/resource/import/org/ORG model import template.xls new file mode 100644 index 00000000..678cc504 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/resource/import/org/ORG model import template.xls differ diff --git a/com.actionsoft.apps.coe.pal/resource/readme.txt b/com.actionsoft.apps.coe.pal/resource/readme.txt new file mode 100644 index 00000000..b3fae242 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/resource/readme.txt @@ -0,0 +1,2 @@ +resource目录存在应用所需要的一些模板等固定文件 +例如导入组织的xls模板 \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoECommonController.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoECommonController.java new file mode 100644 index 00000000..10d0540c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoECommonController.java @@ -0,0 +1,448 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentLinkedQueue; + +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.coe.pal.pal.manage.publish.web.PublishManageWeb; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessLevelWeb; +import com.actionsoft.bpms.commons.cluster.loadbalancer.ClusterAPI; +import com.actionsoft.bpms.commons.cluster.loadbalancer.listener.NodeListener; +import com.actionsoft.bpms.commons.htmlframework.AlertWindow; +import com.actionsoft.bpms.commons.login.BPMClientPortalController; +import com.actionsoft.bpms.commons.login.constant.LoginConst; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.commons.portal.SystemController; +import com.actionsoft.bpms.commons.security.basic.PermAPIManager; +import com.actionsoft.bpms.commons.security.logging.model.Level; +import com.actionsoft.bpms.commons.session.SessionImpl; +import com.actionsoft.bpms.commons.session.cache.SessionCache; +import com.actionsoft.bpms.commons.session.model.SessionModel; +import com.actionsoft.bpms.org.web.CompanyWeb; +import com.actionsoft.bpms.server.*; +import com.actionsoft.bpms.server.bind.annotation.Controller; +import com.actionsoft.bpms.server.bind.annotation.Mapping; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.install.CoeSuitInstall; +import com.actionsoft.apps.coe.pal.install.util.InitUtil; +import com.actionsoft.apps.coe.pal.install.web.CoEInitWeb; +import com.actionsoft.apps.coe.pal.portal.web.CoEPortalSkins; +import com.actionsoft.apps.coe.pal.portal.web.NavigationWeb; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; +import com.actionsoft.apps.coe.pal.team.user.web.UserWeb; +import com.actionsoft.apps.coe.pal.util.Table2Excel; +import com.actionsoft.exception.AWSForbiddenException; +import com.actionsoft.exception.AWSQuotaException; +import com.actionsoft.sdk.local.SDK; + +@Controller +public class CoECommonController { + + @Mapping("com.actionsoft.apps.coe.pal_user_login_from_other") + public String loginCoeFromOther(UserContext me) { + // String sid = new SSOUtil().registerClientSessionNoPassword(me.getUID(), me.getLanguage(), me.getClientIP(), me.getDeviceType()); + SessionModel sessionModel = new SessionImpl().registerSession(LoginConst.SYSTEM_COE, me.getUID(), me.getClientIP(), me.getLanguage(), me.getDeviceType(), true, null); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("sid", sessionModel.getSessionId()); + return ro.toString(); + } + + // @Mapping("COE_USER_LOGIN") + @Mapping("com.actionsoft.apps.coe.pal_user_login") + public String loginCoE(String userid, String pwd, String clientIp, String lang, RequestParams request) { + if (!SDK.getAppAPI().isActive(CoEConstant.APP_ID)) { + String msg = "该应用已暂停,登录被拒绝"; + throw new AWSForbiddenException(msg); + } + + // init extend params + Map params = new HashMap(); + Map webReq = request.asMap(); + if (!webReq.containsKey("pwdEncode")) { + webReq.put("pwdEncode", "RSA"); + } + for (String key : webReq.keySet()) { + if (key.equalsIgnoreCase("userid") || key.equalsIgnoreCase("pwd") || key.equalsIgnoreCase("sid") || key.equalsIgnoreCase("lang") || key.equalsIgnoreCase("deviceType") || key.equalsIgnoreCase("cmd")) { + // + } else { + params.put(key, webReq.get(key)); + } + } + + if (!Quota.isCoE()) { + SDK.getLogAPI().auditClient("COE登录", userid, "Login", "", "许可未授权该功能", clientIp, Level.ERROR); + throw new AWSQuotaException("许可未授权该功能"); + } + + UserWeb userWeb = new UserWeb(); + ResponseObject ro; + if (!userWeb.validateIsAccessCOE(userid)) { + ro = ResponseObject.newErrResponse("未授权的登录请求,访问被拒绝"); + SDK.getLogAPI().auditClient("COE登录", userid, "Login", "", "未授权的登录请求,访问被拒绝", clientIp, Level.ERROR); + return ro.toString(); + } else { + ro = BPMClientPortalController.getInstance().validateIdentity(LoginConst.SYSTEM_COE, userid, pwd, lang, clientIp, "pc", false, params); + } + + // 注释 by sunlh 使用平台返回的提示语 +// if (!ro.isOk()) { +// int i = (Integer) ro.get("status"); +// if (i == LoginConst.LOGIN_STATUS_ERR1 || i == LoginConst.LOGIN_STATUS_ERR6) { +// ro.msg("用户或密码错误"); +// } +// } + + ResponseObject r = ResponseObject.newOkResponse(); + if (!ro.isOk()) { + r.err(ro.getMsg()); + ro = r; + } + return ro.toString(); + } + + // @Mapping("COE_USER_HOME") + @Mapping("com.actionsoft.apps.coe.pal_user_home_page") + public String homeCoE(UserContext user, String bip, RequestParams request, String mainType) { + CoEPortalSkins skins = new CoEPortalSkins(); + try { + return skins.getVueHomePage(user, mainType); + } catch (Exception e) { + return AlertWindow.getErrorMessagePage("发生错误", e.getMessage()); + } + } + + // @Mapping("COE_USER_LOGOUT") + @Mapping("com.actionsoft.apps.coe.pal_user_logout") + public String logoutClient(UserContext me) { + return new CoEPortalSkins().getLogoutPage(me); + } + + /** + * 用户管理-查询PAL用户 + * @param me + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_user_data_query") + public String queryCoePalUserData(UserContext me) { + UserWeb web = new UserWeb(me); + return web.queryCoePalUserData(); + } + + /** + * 用户管理-批量变更用户角色 + * @param me + * @param userIds + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_user_role_change") + public String changeCoePalUserRole(UserContext me, String userIds) { + UserWeb web = new UserWeb(me); + return web.changeCoePalUserRole(userIds); + } + + /** + * 用户管理-批量删除PAL用户 + * @param me + * @param userIds + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_user_remove") + public String removeCoePalUser(UserContext me, String userIds) { + UserWeb web = new UserWeb(me); + return web.removeCoePalUser(userIds); + } + + /** + * 用户管理-批量设置/保存PAL用户 + * @param me + * @param managerUsers + * @param generalUsers + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_user_save") + public String saveCoePalUser(UserContext me, String managerUsers, String generalUsers) { + UserWeb web = new UserWeb(me); + return web.saveCoePalUser(managerUsers, generalUsers); + } + + // 普通用户的组织管理 + // @Mapping("COE_AVERAGE_USER_ORG") + @Mapping("com.actionsoft.apps.coe.pal_average_user_org") + public String CoEAverageUserOrg(UserContext me) { + // 检查是否有访问模块的权限 + if (!PermAPIManager.getInstance().havingModelPermission(me.getUID(), "obj_2daac0a24d7d47cd933e580aa142c8bd")) { + CoEOpLogAPI.auditErrorOp(me, CoEOpLogConst.MODULE_CATEGORY_BPM_ORG, CoEOpLogConst.OP_ACCESS, CoEOpLogConst.INFO_BPM_ORG_ACCESS_DENIED); + throw new AWSForbiddenException("访问组织服务的权限不足,访问被拒绝"); + } + // 提权 + SessionModel session = SessionCache.getModel(me.getSessionId()); + if(session==null) { //获取不到session时 + //String s_sql = "SELECT * FROM SYS_SESSION WHERE SESSIONID = ?"; + //RowMap s_map = DBSql.getMap(s_sql, new Object[] { me.getSessionId() }); + } else { + session.setSessionScope(LoginConst.SYSTEM_ADMIN_CONSOLE); + } + ClusterAPI.sendClusterOp("type", NodeListener.TYPE_SID_SCOPE, "sid", me.getSessionId()); + CoEOpLogAPI.auditOkOp(me, CoEOpLogConst.MODULE_CATEGORY_BPM_ORG, CoEOpLogConst.OP_ACCESS, CoEOpLogConst.INFO_BPM_ORG_ACCESS); + return new CompanyWeb(me).getOrganizationPortal(me); + } + + // 获取组织人员数据 + // @Mapping("COE_LANGUAGE_USER__GRID_GETPERSONJSON") + @Mapping("com.actionsoft.apps.coe.pal_languageuser_grid_person_data_query") + public String CoELanguageUserGridGetPersonJson(UserContext me, String opentype, String parentid, String parame) { + if (opentype == null) { + opentype = ""; + } + if (parentid == null) { + parentid = "0"; + } + if (parame == null) { + parame = "0"; + } + UserWeb web = new UserWeb(me); + return web.getPersons(opentype, parentid, parame); + } + + // @Mapping("COE_TEAM_BPA_DESIGN_STEP_RULE_ALLRULES") + @Mapping("com.actionsoft.apps.coe.pal_team_bpa_design_step_rule_all_rules") + public String CoETeamBPADesignStepRuleAllRules(UserContext me, String workFlowId, String workFlowStepId, String typeId) { + // WFFlexDesignStepRuleWeb web = new WFFlexDesignStepRuleWeb(me); + // if ("0".equals(typeId)) { + // ProjectWeb web2 = new ProjectWeb(me); + // return + // web2.getWFSystemRuleTreeDesignPage(Integer.parseInt(workFlowId), + // Integer.parseInt(workFlowStepId)); + // } else { + // return web.getAllRules2JSON(Integer.parseInt(workFlowId), + // Integer.parseInt(workFlowStepId)); + // } + return "未实现,请修改"; + } + + // 打开Step1页面 + // @Mapping("COE_INSTALL_STEP1") + @Mapping("com.actionsoft.apps.coe.pal_install_step1_page") + public String CoEInstallSystemInitStep1(UserContext me, RequestParams params) { + CoEInitWeb initWeb = new CoEInitWeb(me); + int step = params.getInt("initStep", 0); + return initWeb.getStep1Html(step); + } + + // 打开Step1页面 + // @Mapping("COE_INSTALL_STEP2") + @Mapping("com.actionsoft.apps.coe.pal_install_step2_page") + public String CoEInstallSystemInitStep2(UserContext me) { + CoEInitWeb initWeb = new CoEInitWeb(me); + return initWeb.getStep2Html(); + } + + // 初始化Step1 + // @Mapping("COE_INSTALL_SYSTEM_INIT_STEP1_START") + @Mapping("com.actionsoft.apps.coe.pal_install_system_init_step1_start") + public String CoEInstallSystemInitStep1Start(UserContext me) { + CoeSuitInstall c = new CoeSuitInstall(); + c.sid = me.getUID(); + new Thread(c).start(); + return ResponseObject.newOkResponse("cmd:step1_start").toString(); + } + + // 获得初始化数据1 + // @Mapping("COE_INSTALL_SYSTEM_INIT_GETINFO_STEP1") + @Mapping("com.actionsoft.apps.coe.pal_install_system_init_step1_info_query") + public String CoEInstallSystemInitGetInfoStep1(UserContext me) { + StringBuffer sb = new StringBuffer(); + try { + ConcurrentLinkedQueue linkedList = InitUtil.link1; + if (linkedList != null) { + int size = linkedList.size(); + for (int i = 0; i < size; i++) { + sb.append(linkedList.remove()); + } + } + } catch (Exception e) { + } + return sb.toString(); + } + + // 获得初始化BI维度表结构数据 + // @Mapping("COE_INSTALL_SYSTEM_INIT_GETINFO_STEP3") + @Mapping("com.actionsoft.apps.coe.pal_install_system_init_step3_info_query") + public String CoEInstallSystemInitGetInfoStep3(UserContext me) { + StringBuffer sb = new StringBuffer(); + try { + ConcurrentLinkedQueue linkedList = InitUtil.link3; + if (linkedList != null) { + int size = linkedList.size(); + for (int i = 0; i < size; i++) { + sb.append(linkedList.remove()); + } + } + } catch (Exception e) { + } + return sb.toString(); + } + + // 获得CoEBI表结构 + // @Mapping("COE_INSTALL_SYSTEM_INIT_GETCOEBI") + @Mapping("com.actionsoft.apps.coe.pal_install_system_init_coebi_query") + public String CoEInstallSystemInitgetCoEBI(UserContext me) { + // 初始化CCBI连接 + InitUtil.installCCBI(); + CoEInitWeb c = new CoEInitWeb(me); + return c.getCoE_structure_table(); + } + + // 获得最新的bi配置数据 + // @Mapping("COE_INSTALL_SYSTEM_INIT_GETBIDATA") + @Mapping("com.actionsoft.apps.coe.pal_install_system_init_bi_data_query") + public String CoEInstallSystemInitgetBIData(UserContext me) { + CoEInitWeb c = new CoEInitWeb(me); + return c.getSys_cc_profileJson(CoePropertyUtil.getPropertyValue("CoeDBConnection")); + } + + // COEBI连接配置保存操作 + // @Mapping("COE_INSTALL_SYSTEM_INIT_BIDATAUPDATE") + @Mapping("com.actionsoft.apps.coe.pal_install_system_init_bi_data_update") + public String CoEInstallSystemInitBIDataUpdate(UserContext me, String uuid, String name, String logenable, String profile) { + CoEInitWeb c = new CoEInitWeb(me); + return c.updateBIData(uuid, name, logenable, profile); + } + + // Step2 下一步操作 + // @Mapping("COE_INSTALL_SYSTEM_INIT_STEP2_END") + @Mapping("com.actionsoft.apps.coe.pal_install_system_init_step2_end") + public String CoEInstallSystemInitStep2End(UserContext me) { + if (CoePropertyUtil.getPropertyValue("InitStep").equals("1")) { + CoePropertyUtil.createProperty("InitStep", "2"); + } + return ""; + } + + // 进入初始化界面 + // @Mapping("COE_INSTALL_TO_INITSYSTEM") + @Mapping("com.actionsoft.apps.coe.pal_install_to_init_system_page") + public String CoEInstallToInitSystem(UserContext me) { + NavigationWeb web = new NavigationWeb(me); + if (me.getUID().equals("admin")) { + return web.getInitHtml(CoePropertyUtil.getPropertyValue("InitStep")); + } else { + return web.getInitAlertHtml(""); + } + } + + // 检察服务器是否正在执行job + // @Mapping("COE_CHECK_EXCUTEJOB") + @Mapping("com.actionsoft.apps.coe.pal_excutejob_check") + public String CoECheckExcuteJob(UserContext me) { + return CoePropertyUtil.getPropertyValue("excuteJob"); + } + + // ====================升级功能开始======================= + // @Mapping("COE_ADMIN_CHECK_PLATFORM_VERSION") + @Mapping("com.actionsoft.apps.coe.pal_admin_platform_version_check") + public String checkPlatformVersion(UserContext me, Boolean isPreviewPatch) { + return new SystemController().checkPlatformVersion(me, isPreviewPatch); + } + + // @Mapping("COE_ADMIN_DOWNLOAD_PLATFORM_VERSION") + @Mapping("com.actionsoft.apps.coe.pal_admin_platform_version_download") + public String downloadPlatformVersion(UserContext me, String versionid, String filesize, String url, String md5digest, String isdegrade, String releasetype) { + return new SystemController().downloadPlatformVersion(me, versionid, filesize, url, md5digest, isdegrade, releasetype); + } + + // @Mapping("COE_ADMIN_CANCEL_DOWNLOAD_PLATFORM_VERSION") + @Mapping("com.actionsoft.apps.coe.pal_admin_platform_version_cancel") + public String cancelDownloadPlatformVersion(UserContext me, String versionid) { + return new SystemController().cancelDownloadPlatformVersion(me, versionid); + } + + // @Mapping("COE_ADMIN_CHANGE_UPGRADE_STATE") + @Mapping("com.actionsoft.apps.coe.pal_admin_upgrade_sataus_change") + public String installUpgradeState(UserContext me, String op, String plandate, String state, String versionid) { + return new SystemController().installUpgradeState(me, op, plandate, state, versionid); + } + // ====================升级功能结束======================= + + /** + * html中的table导出excel的公共方法 + * @param me + * @param titles table的表头内容 + * @param content table中的内容 + * @param appId + * @return + * @author zhangming + */ + // @Mapping("COE_TABLE_EXPORT_EXCEL") + @Mapping("com.actionsoft.apps.coe.pal_table_excel_export") + public String exportExcel(UserContext me, String titles, String content, String appId) { + return Table2Excel.exportExcel(me, titles, content, appId); + } + + /** + * 搜索用户 + * @param me + * @param name + * @return + */ + // @Mapping("COE_TEAM_USER_SEARCH") + @Mapping("com.actionsoft.apps.coe.pal_teamuser_search") + public String searchUser(UserContext me, String name) { + UserWeb web = new UserWeb(me); + return web.searchUser(name); + } + + /** + * 查询导航栏初始化数据 + * vue + */ + @Mapping("com.actionsoft.apps.coe.pal_nav_header_data") + public String getPalNavHeaderData(UserContext uc, String mainType){ + NavigationWeb web = new NavigationWeb(uc); + return web.getPalNavHeaderData(mainType); + } + + /** + * 获取用户相关权限 + * @param uc + * @param wsId + * @param teamId + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_user_perm_query") + public String getUserPerm(UserContext uc, String wsId, String teamId) { + NavigationWeb web = new NavigationWeb(uc); + return web.getUserPerm(wsId, teamId); + } + + /** + * 记录各模块的访问日志 + * @param me + * @param moduleCategory + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_access_log_save") + public String saveAccessLog(UserContext me, String moduleCategory) { + NavigationWeb web = new NavigationWeb(me); + return web.saveAccessLog(moduleCategory); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoEPALController.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoEPALController.java new file mode 100644 index 00000000..e039bf47 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoEPALController.java @@ -0,0 +1,3184 @@ +package com.actionsoft.apps.coe.pal; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.bpms.bpmn.modeler.ProcessBPMNDesignerController; +import com.actionsoft.bpms.commons.htmlframework.AlertWindow; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.login.constant.LoginConst; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.commons.session.SessionImpl; +import com.actionsoft.bpms.form.engine.FormEngine; +import com.actionsoft.bpms.server.RequestParams; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.bind.annotation.Controller; +import com.actionsoft.bpms.server.bind.annotation.Mapping; +import com.actionsoft.bpms.server.bind.annotation.Param; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.apps.coe.pal.pal.backup.web.CoEPALBackupWeb; +import com.actionsoft.apps.coe.pal.pal.home.web.PalHomeWeb; +import com.actionsoft.apps.coe.pal.pal.manage.method.PalManageWeb; +import com.actionsoft.apps.coe.pal.pal.output.OutPutReportWeb; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.web.CoeRealtimeWeb; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.manager.DesignerRelationShapeCacheManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.web.DesignerRelationShapeWeb; +import com.actionsoft.apps.coe.pal.pal.repository.designer.web.CoeDesignerWeb; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.web.UpfileWeb; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessLevelWeb; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessListWeb; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.enums.WsOrgTypeEnum; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.pal.ws.web.CoeWorkSpaceWeb; +import com.actionsoft.apps.coe.pal.teamwork.web.ProcessPublishWeb; +import com.actionsoft.apps.coe.pal.teamwork.web.TeamWorkManagerWeb; +import com.actionsoft.exception.ExceptionUtil; +import com.actionsoft.i18n.I18nRes; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * PAL相关的CMD处理 + * + * @author zhouxuan + */ +@Controller +public class CoEPALController { + + // @Mapping("COE_PAL_MAIN") + @Mapping("com.actionsoft.apps.coe.pal_main_page") + public String COEPALMAIN(UserContext me, String wsuuid) { + Map macroLibraries = new HashMap(); + CoeWorkSpaceModel model = (CoeWorkSpaceModel) CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstance(wsuuid); + macroLibraries.put("sid", me.getSessionId()); + macroLibraries.put("wsuuid", wsuuid); + // 资产库去掉了版本号,已不做多版本 + macroLibraries.put("wsName", model.getWsName() /* + " " + VersionUtil.getVerStr (model.getWsVer()) */); + macroLibraries.put("desc", model.getWsDesc()); + macroLibraries.put("orgTypeName", WsOrgTypeEnum.getObject(model.getWsOrgType()).get("orgTypeName")); + macroLibraries.put("orgTypeImg", WsOrgTypeEnum.getObject(model.getWsOrgType()).get("orgTypeImg")); + int tcType = model.getWsTctype(); + if (tcType == 0) { + macroLibraries.put("tcType", "二分法"); + } else if (tcType == 1) { + macroLibraries.put("tcType", "三分法"); + } else { + macroLibraries.put("tcType", "自定义"); + } + CoeWorkSpaceWeb web = new CoeWorkSpaceWeb(me); + boolean b = web.getAccessHome(wsuuid); + macroLibraries.put("visitAccess", "style=\"display:none\""); + if (b) { + macroLibraries.put("visitAccess", ""); + } + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.main.html", macroLibraries); + } + + // @Mapping("COE_PAL_HOME") + @Mapping("com.actionsoft.apps.coe.pal_home_page") + public String COEPALHOME(UserContext me, String wsid) { + PalHomeWeb homeWeb = new PalHomeWeb(me); + return homeWeb.getHomeHtml(wsid); + } + + // @Mapping("COE_PAL_APP") + @Mapping("com.actionsoft.apps.coe.pal_app_page") + public String toCoEPALApp(UserContext me, String wsId, String teamId, String clazzName) { + PalHomeWeb homeWeb = new PalHomeWeb(me); + return homeWeb.toAppHome(wsId, teamId, clazzName); + } + + // 流程库 + // @Mapping("COE_PAL_PL") + @Mapping("com.actionsoft.apps.coe.pal_pl_page") + public String COEPALPAL(UserContext me, String wsuuid) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.getCoeRepositoryHtml(wsuuid); + } + + // 流程库搜索页面 + // @Mapping("COE_PAL_PL_SEARCH_PAGE") + @Mapping("com.actionsoft.apps.coe.pal_pl_search_page") + public String coePalPlSearchPage(UserContext me, String wsId, String plId, String palPath) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.toCoePalPlSearch(wsId, plId, palPath); + } + + // 流程库搜索 + // @Mapping("COE_PAL_PL_SEARCH") + @Mapping("com.actionsoft.apps.coe.pal_pl_search") + public String coePalPlSearch(UserContext me, String wsId, String plId, String fileType, String fileName, String shapeType, String shapeName, String attributes) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.coePalPlSearch(wsId, plId, fileType, fileName, shapeType, shapeName, attributes); + } + + // 流程库搜索-导出 + // @Mapping("COE_PAL_PL_SEARCH_EXPORT") + @Mapping("com.actionsoft.apps.coe.pal_pl_search_export") + public String coePalPlSearchExport(UserContext me, String exportData, String exportAttributes) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.coePalPlSearchExport(exportData, exportAttributes); + } + + // 流程库搜索-导入 + // @Mapping("COE_PAL_PL_SEARCH_IMPORT") + @Mapping("com.actionsoft.apps.coe.pal_pl_search_import") + public String coePalPlSearchImportPage(UserContext me, String wsId, String fileName, String category) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.coePalPlSearchImport(wsId, fileName, category); + } + + //流程库-流程导出数据的处理 + // @Mapping("COE_PAL_PL_EXPORT_HANDLE") + @Mapping("com.actionsoft.apps.coe.pal_pl_export_handle") + public String coePalPlExportHandle(UserContext me, String repositoryIds) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.coePalPlExport(me, repositoryIds); + } + + //流程库-已经生成的流程导出文件进行下载 + // @Mapping("COE_PAL_PL_EXPORT") + @Mapping("com.actionsoft.apps.coe.pal_pl_export") + public String coePalPlExport(UserContext me, String exportTitle, int exportCount, String dcId) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.getCoePalPlExport(me, exportTitle, exportCount, dcId); + } + + //流程库-打开流程导入页面 + // @Mapping("COE_PAL_PL_IMPORT_OPEN") + @Mapping("com.actionsoft.apps.coe.pal_pl_import_page") + public String coePalPlImportOpen(UserContext me) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.openCoePalPlImport(); + } + + //流程库-处理流程导入 + // @Mapping("COE_PAL_PL_IMPORT") + @Mapping("com.actionsoft.apps.coe.pal_pl_import") + public String coePalPlImport(UserContext me, String fileList, String wsId, String teamId, String plCategory, String parentId) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.handleCoePalPlImport(fileList, wsId, parentId, plCategory, teamId); + } + + //流程库-流程导入成功后的清单页 + // @Mapping("COE_PAL_PL_IMPORT_RESULT") + @Mapping("com.actionsoft.apps.coe.pal_pl_import_result") + public String coePalPlImportResult(UserContext me, String data) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.openCoePalPlImportResult(data); + } + + //流程库-流程导入成功的日志报告导出 + // @Mapping("COE_PAL_PL_IMPORT_RESULT_EXPORT") + @Mapping("com.actionsoft.apps.coe.pal_pl_import_result_export") + public String CoePalPlImportResultExport(UserContext me, String fileName) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.exportCoePalPlImportResult(fileName); + } + + //流程对比 + // @Mapping("COE_PAL_PL_VERSION_COMPARE") + @Mapping("com.actionsoft.apps.coe.pal_pl_version_compare") + public String coePalPlVersionCompare(UserContext me, String firstId, String secondId) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.getCoePalPlVersionCompare(firstId, secondId); + } + + /** + * 建模方法->查询所有建模方法 + * @param me + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_data_query") + public String coePalPlManageMethodData(UserContext me) { + PalManageWeb web = new PalManageWeb(me); + return web.getManageMethodData(); + } + + /** + * 建模方法->查询特定建模方法的形状定义数据 + * @param me + * @param methodId + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_shape_definition_data_query") + public String coePalPlManageMainContent(UserContext me, String methodId) { + PalManageWeb web = new PalManageWeb(me); + return web.getManageMethodShapeDefinitionData(methodId); + } + + /** + * 建模方法->设置更多特性->获取形状属性设置 + * @param me + * @param wsId + * @param methodId + * @param shapeName + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_shape_more_attr_config_query") + public String coePalPlManageShapeMoreAttrConfig(UserContext me ,String wsId, String methodId, String shapeName) { + PalManageWeb web = new PalManageWeb(me); + return web.getManageShapeMoreAttrConfigData(wsId, methodId, shapeName); + } + + /** + * 建模方法->设置更多特性->获取文件属性设置 + * @param me + * @param wsId + * @param methodId + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_file_more_attr_config_query") + public String coePalPlManageFileMoreAttrConfig(UserContext me, String wsId, String methodId) { + PalManageWeb web = new PalManageWeb(me); + return web.getManageFileMoreAttrConfigData(wsId, methodId); + } + + /** + * 建模方法->设置更多特性-保存文件/形状属性(原更多特性)设置 + * @param me + * @param wsId + * @param methodId + * @param type "file","shape" + * @param shapeName + * @param attrData 更多特性属性内容 + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_more_attr_config_save") + public String coePalPlManageMoreAttrConfigSave(UserContext me, String wsId, String methodId, String type, String shapeName, String attrData) { + PalManageWeb web = new PalManageWeb(me); + return web.saveCoePalPlManageMoreAttrConfig(wsId, methodId, type, shapeName, attrData); + } + + /** + * 建模方法->连线关系 + * @param me + * @param methodId + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_link_data_query") + public String coePalManageMethodLink(UserContext me, String methodId) { + PalManageWeb web = new PalManageWeb(me); + return web.getManageMethodLinkData(methodId); + } + + /** + * 建模方法->数据特性->特性树 + * @param me + * @param wsId + * @param methodId + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_attr_tree_data_query") + public String coePalManageMethodAttrTree(UserContext me, String wsId, String methodId) { + PalManageWeb web = new PalManageWeb(me); + return web.getManageMethodAttrTreeData(wsId, methodId); + } + + /** + * 建模方法->数据特性->表格数据 + * @param me + * @param wsId + * @param methodId + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_attr_table_data_query") + public String coePalManageMethodAttrTable(UserContext me, String wsId, String methodId, String type) { + PalManageWeb web = new PalManageWeb(me); + return web.getManageMethodAttrTableData(wsId, methodId, type); + } + + /** + * 建模方法->数据特性->获取指定建模方法所有形状 + * @param me + * @param methodId + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_attr_shape_option_query") + public String coePalPlManageMainAttrMessage(UserContext me, String methodId) { + PalManageWeb web = new PalManageWeb(me); + return web.getCoePalPlManageMainAttrMessage(methodId); + } + + /** + * 建模方法->数据特性->新增、修改属性到xml保存 + * @param me + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_attr_add_or_update_save") + public String coePalPlManageMainAttrSave(UserContext me, String methodId, boolean isCreate, String key, String title, String type, String ref, String value, boolean readonly, String groupPath, boolean isValid, String scope, boolean bpmFileShow, boolean bpmShapeShow,String desc,boolean isRequired) { + PalManageWeb web = new PalManageWeb(me); + if ("relation".equals(type) || "awsorg".equals(type)) {// 关联类型限定只读 + readonly = true; + } + return web.saveCoePalPlManageAttr(methodId, isCreate, key, title, type, ref, value, readonly, groupPath, isValid, scope, bpmFileShow, bpmShapeShow,desc,isRequired); + } + + /** + * 建模方法->数据特性->更新xml文件的只读和有效 + * @param me + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_attr_readonly_and_valid_update") + public String coePalPlManageMainAttrReadonlyValidSave(UserContext me, String methodId, String key, boolean readonly, boolean isValid,boolean isRequired) { + PalManageWeb web = new PalManageWeb(me); + return web.saveCoePalPlManageMainAttrReadonlyValid(methodId, key, readonly, isValid,isRequired); + } + + /** + * 建模方法->数据特性-更新xml文件的是否在bpm审批时显示通配 + * @param me + * @param methodId + * @param key + * @param bpmShow + * @param type + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_attr_bpm_show_update") + public String coePalPlManageMainAttrBpmShowSave(UserContext me, String methodId, String key, boolean bpmShow, String type) { + PalManageWeb web = new PalManageWeb(me); + return web.saveCoePalPlManageMainAttrBpmShowSave(methodId, key, bpmShow, type); + } + + /** + * 建模方法->数据特性->删除xml文件指定属性 + * @param me + * @param methodId + * @param attrId + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_attr_remove") + public String removePalPlManageMethodAttr(UserContext me, String methodId, String attrId) { + PalManageWeb web = new PalManageWeb(me); + return web.removePalPlManageMethodAttr(methodId, attrId); + } + + /** + * 建模方法->数据特性->更新文件属性和形状属性的属性名称 + * @param me + * @param wsId + * @param methodId + * @param type file、shape + * @param attrId + * @param newTitle + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_attr_file_and_shape_update") + public String coePalPlManageMainFileAndShapeAttrUpdate(UserContext me, String wsId, String methodId, String type, String attrId, String newTitle, int orderIndex) { + PalManageWeb web = new PalManageWeb(me); + return web.updateCoePalPlManageMainFileAndShapeAttr(wsId, methodId, type, attrId, newTitle, orderIndex); + } + + /** + * 建模方法->数据特性->更新文件属性和形状属性的属性排序 + * @param me + * @param wsId + * @param methodId + * @param type file shape + * @param attrs + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_method_attr_file_and_shape_sort_update") + public String coePalPlManageMainFileAndShapeAttrSortUpdate(UserContext me, String wsId, String methodId, String type, String attrs) { + PalManageWeb web = new PalManageWeb(me); + return web.coePalPlManageMainFileAndShapeAttrSortUpdate(wsId, methodId, type, attrs); + } + + //建模方法->建模对象->形状配置->查询形状的配置信息 + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_shape_config_query") + public String coePalPlManageShapeConfigQuery(UserContext me, String wsId, String methodId, String shapeId) { + PalManageWeb web = new PalManageWeb(me); + return web.getCoePalPlManageShapeConfigByShapeId(wsId, methodId, shapeId); + } + + //建模方法->建模对象->形状配置->查询形状的属性树 + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_shape_config_attr_tree_query") + public String coePalPlManageShapeConfigAttrTreeQuery(UserContext me, String wsId, String methodId, String shapeId) { + PalManageWeb web = new PalManageWeb(me); + return web.getCoePalPlManageShapeAttrTreeData(wsId, methodId, shapeId); + } + + //建模方法->建模对象->形状配置->保存形状的配置信息 + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_shape_config_save") + public String coePalPlManageShapeConfigSave(UserContext me, String wsId, String methodId, String shapeId, String data) { + PalManageWeb fileWeb = new PalManageWeb(me); + return fileWeb.saveCoePalPlManageShapeConfig(wsId, methodId, shapeId, data); + } + + // 流程级别首页 + // @Mapping("COE_PAL_PL_RESPOSITORY_PORTAL") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_portal_page") + public String COEPALPLFilePortal(UserContext me, String ruuid, String wsid, String type) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.getPortalHtml(ruuid, wsid, type); + } + + // 流程级别mark BPN + // @Mapping("COE_PAL_PL_RESPOSITORY_MARK") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_mark") + public String COEPALPLFileMark(UserContext me, String uuid) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.mark(uuid); + + } + + // 取消流程级别mark BPN + // @Mapping("COE_PAL_PL_RESPOSITORY_RMARK") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_rmark") + public String COEPALPLFileRMark(UserContext me, String uuid) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.rmark(uuid); + } + + // 取消AWS流程关联 + // @Mapping("COE_PAL_PL_RESPOSITORY_CANCELCORRELATE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_cancelcorrelate") + public String COEPALPLCancelCorrelate(UserContext me, String uuid) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.COEPALPLCancelCorrelate(uuid); + } + + // 分级-版本 + // @Mapping("COE_PAL_PL_RESPOSITORY_VERSION") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_version") + public String COEPALPLFileVersion(UserContext me, String uuid, String appId, String processVersionId) { + CoeProcessLevelWeb fileWeb = new CoeProcessLevelWeb(me); + return fileWeb.versionHtml(uuid, appId, processVersionId); + } + + // pal关联流程源文件在aws端被删除的处理 + // @Mapping("COE_PAL_PL_RESPOSITORY_CORRELATERESOURCE_CHECK") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_correlateresource_check") + public String COEPALPLCorrelateresourceCheck(UserContext me, String uuid) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.correlateResourceCheck(uuid); + } + + // coe设计器页面 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer") + public String COEPALPLFileDesigner(UserContext me, String uuid, int openType, String teamId, String perms, String filePerms, String openAppType) { + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.getDesignerHtml(uuid, openType, teamId, perms, filePerms, openAppType); + } + + // coe设计器页面-只读 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_VIEWER") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_viewer") + public String COEPALPLFileDesignerViewer(UserContext me, String uuid, int openType, String teamId, String perms, String filePerms, String openAppType, String dockDisplay) { + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.getDesignerHtml(uuid, openType, null, true, teamId, perms, filePerms, openAppType, dockDisplay); + } + + // coe设计器页面-只读(无session) + // @Mapping(value = "COE_PAL_PL_RESPOSITORY_DESIGNER_VIEWER_NOSESSION",session = false, noSessionEvaluate = "无", noSessionReason = "外来人员访问考试") + @Mapping(value = "com.actionsoft.apps.coe.pal_pl_repository_designer_viewer_nosession",session = false, noSessionEvaluate = "无", noSessionReason = "外来人员访问考试") + public String COEPALPLFileDesignerViewer(String uid, String uuid, String processDefId) { + return PALRepositoryQueryAPIManager.getInstance().openDesignerRepositoryViewer(uid, uuid, processDefId); + } + + // coe设计器页面-链接-权限判断 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_VIEWER_LINK_PERM") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_viewer_link_perm") + public String getPalLinkPerm(UserContext me, String uuids, String modelType, String filePerms) { + TeamWorkManagerWeb web = new TeamWorkManagerWeb(me); + return web.getPalLinkPerm(uuids, modelType, filePerms); + } + + // 流程相关发布信息 + // @Mapping("COE_PAL_PL_RESPOSITORY_COMMENTLIST") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_commentlist") + public String getPALCommentListByRepositoryId(UserContext me, String repositoryId, String openAppType) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + return web.getPALCommentList(repositoryId, openAppType); + } + + // 流程相关发布信息 + // @Mapping("COE_PAL_PL_RESPOSITORY_COMMENT_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_comment_save") + public String savePALComment(UserContext me, String comment, String wsId, String teamId, String repositoryId, String pId, String openAppType) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + return web.savePALComment(comment, wsId, teamId, repositoryId, pId, openAppType); + } + + // coe设计器-打印 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_PRINT") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_print") + public String COEPALPrint(UserContext me, String id) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + return web.toPalRepositoryPrint(id); + } + + // coe设计器页面 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_OPEN_SHAPE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_open_shape_page") + public String COEPALPLFileDesignerOpen(UserContext me, String uuid, int openType, String shapeId, String perms, String filePerms) { + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.getDesignerHtml(uuid, openType, shapeId, perms, filePerms, "1"); + + } + + // coe设计器 更新文件title + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_UPDATATITLE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_updatetitle") + public String COEPALPLFileDesignerUpdateTitle(UserContext me, RequestParams params) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + String uuid = params.get("uuid"); + String title = params.get("title", ""); + // 添加到事件列表 + CoeRealtimeWeb realtimeWeb = new CoeRealtimeWeb(me); + Map paramsMap = new HashMap(); + paramsMap.put("uuid", uuid); + paramsMap.put("action", "changeTitle"); + paramsMap.put("clientId", ""); + paramsMap.put("messages", "{\"action\": \"changeTitle\", \"title\": \"" + title + "\", \"clientId\": \"\"}"); + paramsMap.put("title", title); + paramsMap.put("sid", me.getSessionId()); + realtimeWeb.addRealtimeEvents(paramsMap); + return we.updatePLName(uuid, title); + } + + // coe设计器模板 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_TEMPLATE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_template") + public String COEPALPLFileDesignerTemplate(UserContext me, String uuid) { + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.getDesignerTemplateHtml(uuid); + + } + + // coe设计器消息(保存、修改、删除) + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_SHAPE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_shape") + public String COEPALPLFileDesignerShape(UserContext me, String uuid, String methodId, String categories, String wsId) { + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.getShape(uuid, methodId, categories, wsId); + + } + + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_MESSAGE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_message") + public String COEPALPLFileDesignerMessage(UserContext me, RequestParams params) { + String action = params.get("action"); + String type = params.get("type"); + String uuid = params.get("uuid"); + int ver = params.getInt("ver"); + String messages = params.get("messages"); + String teamId = params.get("teamId"); + String lockUser = params.get("lockUser"); + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + if (!action.equals("changeTitle")) { + CoeRealtimeWeb realtimeWeb = new CoeRealtimeWeb(me); + Map paramsMap = new HashMap(); + paramsMap.put("action", action); + paramsMap.put("messages", messages); + paramsMap.put("clientId", params.get("clientId")); + paramsMap.put("uuid", params.get("uuid")); + paramsMap.put("sid", me.getSessionId()); + realtimeWeb.addRealtimeEvents(paramsMap); + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + JSONArray jsonArr = JSONArray.parseArray(messages); + DesignerRelationShapeCacheManager event = DesignerRelationShapeCacheManager.getInstance(); + event.setFlag(false); + if (jsonArr.size() == 1) { + JSONObject jsonObj = jsonArr.getJSONObject(0); + if ("update".equals(jsonObj.getString("action"))) { + relationShapeWeb.updateShapesName(jsonObj.getJSONObject("content"), uuid); + relationShapeWeb.updateShapes(jsonObj.getJSONObject("content"), uuid); + } else { + event.setFlag(false); + } + } + for (Object obj : jsonArr) { + JSONObject jsonObj = (JSONObject) obj; + if ("remove".equals(jsonObj.getString("action"))) { + relationShapeWeb.removeShapes(jsonObj.getJSONArray("content"), uuid); + break; + } + if ("create".equals(jsonObj.getString("action"))) { + relationShapeWeb.recoverRemoveShapes(jsonObj.getJSONArray("content")); + relationShapeWeb.updateEventMap(jsonObj.getJSONArray("content"), uuid); + break; + } + + } + } + String msg = ""; + if ("command".equals(action)) { + String str = designerWeb.designerMessage(type, uuid, ver, messages, teamId, lockUser); + msg = str; + } else { + msg = ""; + } + ResponseObject ro = ResponseObject.newOkResponse(msg); + return ro.toString(); + } + + // 根据aws流程ID获取关联到pal资产库的流程ID + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_PL_ID") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_pl_id") + public String COEPALPLID(UserContext me, String newDefId) { + CoeDesignerWeb we = new CoeDesignerWeb(me); + return we.getPLIdByAWSId(newDefId); + } + + // coe设计器BPMN保存 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_save") + public String COEPALPLFileDesignerSave(UserContext me, RequestParams params) { + String appId = params.get("appId", AppsConst.SYS_APP_PLATFORM); + String uuid = params.get("ruuid"); + int ver = params.getInt("ver", 0); + String processDefId = params.get("processDefId", ""); + String op = params.get("op"); + String define = params.get("define"); + String drawMessage = params.get("messages", ""); + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.definitionOfBpmnSave(uuid, ver, appId, processDefId, op, define, drawMessage); + } + + // coe设计器BPMN校验 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_BPMN_VALIDATE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_bpmn_validate") + public String COEPALPLFileDesignerBPMNValidate(UserContext me, RequestParams params) { + String appId = params.get("appId", AppsConst.SYS_APP_PLATFORM); + String processDefId = params.get("processDefId", ""); + String define = params.get("define"); + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.bpmnValidate(appId, processDefId, define); + } + + // coe设计器历史版本 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_HISTORY_VERSION_JSON_DATA") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_history_version_json_data") + public String COEPALPLFileDesignerHistoryVersionJsonData(UserContext me, RequestParams params) { + String type = params.get("type"); + String appId = params.get("appId", AppsConst.SYS_APP_PLATFORM); + String uuid = params.get("chartId"); + String processDefId = params.get("processDefId", ""); + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.historyVersions(type, appId, uuid, processDefId); + } + + // 流程的select类型属性的option + // @Mapping("COE_PAL_PL_ATTRIBUTE_OPTION") + @Mapping("com.actionsoft.apps.coe.pal_pl_attribute_option") + public String getAttributeSelectOptions(UserContext me, String category) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + return web.getAttributeSelectOptions(category); + } + + // 预览图片 + // @Mapping("COE_PAL_PL_RESPOSITORY_DF") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_df") + public String COEPALPLRESPOSITORYDF(UserContext me, String uuid) { + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.getPNGUrl(uuid); + } + + // @Mapping("COE_PAL_PL_RESPOSITORY_DOWNLOAD_PNG") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_download_png") + public String COEPALPLRESPOSITORYDownloadPng(UserContext me, String uuid, String type) { + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.getPNGDownloadUrl(uuid, type); + } + + // coe设计器单个历史版本 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_HISTORY_DEFINE_JSON_DATA") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_history_define_json_data") + public String COEPALPLFileDesignerHistoryDefineJsonData(UserContext me, RequestParams params) { + String type = params.get("type"); + String uuid = params.get("chartId"); + String appId = params.get("appId"); + String processDefId = params.get("processDefId", ""); + int ver = params.getInt("ver"); + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.getDefine(type, appId, uuid, processDefId, ver); + } + + // coe设计器恢复历史版本 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_HISTORY_RESTORE_VERSION") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_history_restore_version") + public String COEPALPLFileDesignerHistoryRestoreVersion(UserContext me, RequestParams params) { + String type = params.get("type"); + String appId = params.get("appId"); + String uuid = params.get("chartId"); + String processDefId = params.get("processDefId"); + int ver = params.getInt("ver"); + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.restoreHistoryVersion(type, appId, uuid, processDefId, ver); + } + + // coe设计器--多人协作,保存修改信息 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_ADD_REALTIMEEVENTS") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_add_realtimeevents") + public String COEPALPLAddRealtimeEvents(UserContext me, RequestParams params) { + CoeRealtimeWeb realtimeWeb = new CoeRealtimeWeb(me); + Map paramsMap = new HashMap(); + paramsMap.put("action", params.get("action")); + paramsMap.put("messages", params.get("messages")); + paramsMap.put("clientId", params.get("clientId")); + paramsMap.put("uuid", params.get("uuid")); + paramsMap.put("sid", me.getSessionId()); + realtimeWeb.addRealtimeEvents(paramsMap); + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + JSONArray jsonArr = JSONArray.parseArray(params.get("messages")); + DesignerRelationShapeCacheManager event = DesignerRelationShapeCacheManager.getInstance(); + event.setFlag(false); + if (jsonArr.size() == 1) { + JSONObject jsonObj = jsonArr.getJSONObject(0); + if ("update".equals(jsonObj.getString("action"))) { + relationShapeWeb.updateShapes(jsonObj.getJSONObject("content"), params.get("uuid")); + } else { + event.setFlag(false); + } + } + + for (Object obj : jsonArr) { + JSONObject jsonObj = (JSONObject) obj; + if ("remove".equals(jsonObj.getString("action"))) { + relationShapeWeb.removeShapes(jsonObj.getJSONArray("content"), params.get("uuid")); + break; + } + if ("create".equals(jsonObj.getString("action"))) { + relationShapeWeb.recoverRemoveShapes(jsonObj.getJSONArray("content")); + break; + } + + } + return ResponseObject.newOkResponse().toString(); + } + + // 自定义Schema保存 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_SCHEMA_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_schema_save") + public String COEPALPLCustomSchemaSave(UserContext me, String schema, String methodId, String category) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + + return web.saveCOEPALPLCustomSchema(schema, methodId, category); + } + + // 自定义Schema保存 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_SCHEMA_REMOVE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_schema_remove") + public String COEPALPLCustomSchemaRemove(UserContext me, String schemaName, String methodId) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + return web.removeCOEPALPLCustomSchema(schemaName, methodId); + } + + // 流程资产首页 + // @Mapping("COE_PAL_WS_PORTAL") + @Mapping("com.actionsoft.apps.coe.pal_ws_portal") + public String coePALWSPortal(UserContext me) { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.getCoeWorkSpaceHtml(); + } + + // 流程资产数据 + // @Mapping("COE_PAL_WS_DATA") + @Mapping("com.actionsoft.apps.coe.pal_ws_data") + public String coePALWSData(UserContext me, String start, String pageSize) { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.getCoeWorkSpaceGridData(); + } + + // 流程资产预览 + // @Mapping("COE_PAL_WS_PREVIEW") + @Mapping("com.actionsoft.apps.coe.pal_ws_preview") + public String coePALWSPREVIEW(UserContext me, String wsId) { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.getCoeWorkSpacePreview(wsId); + } + + // 流程资产 添加 + // @Mapping("COE_PAL_WS_CREATE") + @Mapping("com.actionsoft.apps.coe.pal_ws_create") + public String coePALWSCreate(UserContext me, String id) { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.createOrUpdateWorkspace(id); + } + + // 流程资产 导入外资产库 + // @Mapping("COE_PAL_WS_IMPORT") + @Mapping("com.actionsoft.apps.coe.pal_ws_import") + public String coePALWSImport(UserContext me) { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.importWorkspace(); + } + + // 查询资产库树结构 + // @Mapping("COE_PAL_WS_TREE_DATA_JSON") + @Mapping("com.actionsoft.apps.coe.pal_ws_tree_data_json") + public String getRepositoryTreeData(UserContext me, String wsId, String pid) { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.getRepositoryTreeData(wsId, pid); + } + + // 流程资产 查询是否已经存在资产库 + // @Mapping("COE_PAL_WS_IS_EXIST") + @Mapping("com.actionsoft.apps.coe.pal_ws_is_exist") + public String coePALWSIsExist(UserContext me, String wsFileName, String source) { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.workspaceIsExist(wsFileName, source); + } + + /** + * 查询服务器中待导入的资产库文件 + * @param me + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_ws_remote_import_query") + public String getPALWSRemoteImportData(UserContext me) { + CoeWorkSpaceWeb web = new CoeWorkSpaceWeb(me); + return web.getPALWSRemoteImportData(); + } + + // 流程资产 保存 + // @Mapping("COE_PAL_WS_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_ws_save") + public String coePALWSSave(UserContext me, String id, String state, String tctype, String orderIndex, String wsOrgType, String wsName, String wsDm, String wsAdmin, String wsDsc, String wsBgUrl) { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.saveCoeWorkspace(id, wsName, wsDm, wsAdmin, wsDsc, Integer.parseInt(state), Integer.parseInt(tctype), wsBgUrl, Integer.parseInt(orderIndex), Integer.parseInt(wsOrgType)); + } + + // 流程资产 保存导入的资产库 + // @Mapping("COE_PAL_WS_SAVE_IMPORT") + @Mapping("com.actionsoft.apps.coe.pal_ws_save_import") + public String coePALWSSaveImport(UserContext me, String wsFileName, String replaceChoice, String source) throws Exception { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.saveImportCoeWorkspace(wsFileName, replaceChoice, source); + } + + // 流程资产 选择用户 + // @Mapping("COE_PAL_WS_USERLIST") + @Mapping("com.actionsoft.apps.coe.pal_ws_userlist") + public String coePALWSUserList(UserContext me, String users, String removeUserIds) { + CoeWorkSpaceWeb web = new CoeWorkSpaceWeb(me); + return web.toPALWSUserList(users, removeUserIds); + } + + // 停用启用流程资产 + // @Mapping("COE_PAL_WS_STOPOROPEN") + @Mapping("com.actionsoft.apps.coe.pal_ws_stoporopen") + public String coePALWSStopOrOpen(UserContext me, String id, String state) { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.stopCoeWorkspace(id, Integer.parseInt(state)); + } + + // 删除流程资产 + // @Mapping("COE_PAL_WS_REMOVE") + @Mapping("com.actionsoft.apps.coe.pal_ws_remove") + public String coePALWSRemove(UserContext me, String id, String versionId) { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.removeCoeWorkspace(id, versionId); + } + + // 导出流程资产 + // @Mapping("COE_PAL_WS_EXP") + @Mapping("com.actionsoft.apps.coe.pal_ws_exp") + public String coePALWSExp(UserContext me, String id, String clientType) { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.expCoeWorkSpace(id, clientType); + } + + // 导入流程资产 + // @Mapping("COE_PAL_WS_IMP") + @Mapping("com.actionsoft.apps.coe.pal_ws_imp") + public String coePALWSImp(UserContext me, String name) { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.impCoeWorkSpace(name); + } + + /** + * 流程版本管理显示页面 + * + * @param versionId + * @return + */ + // @Mapping("COE_PAL_WS_VERSION_MANAGE") + @Mapping("com.actionsoft.apps.coe.pal_ws_version_manage_page") + public String coePALProcessVersion(UserContext me, String versionId, String wsUsedUUID) { + CoeWorkSpaceWeb po = new CoeWorkSpaceWeb(me); + return po.getCoeWorkSpaceVersionHtml(versionId, wsUsedUUID); + } + + // @Mapping("COE_PAL_WS_VERSION_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_ws_version_save") + public String coePALProcessVersion(UserContext me, String wsuuid, String maxVersionNo, String wsVersionId, String wsUsedUUID) { + CoeWorkSpaceWeb po = new CoeWorkSpaceWeb(me); + return po.getCoeWorkSpaceVersionSaveHtml(wsuuid, maxVersionNo, wsVersionId, wsUsedUUID); + } + + // @Mapping("COE_PAL_WS_VERSION_USED") + @Mapping("com.actionsoft.apps.coe.pal_ws_version_used") + public String coePALProcessVersionUsed(UserContext me, String wsUsedUUID, String wsSelectVersionId) { + CoeWorkSpaceWeb po = new CoeWorkSpaceWeb(me); + return po.getCoeWorkSpaceVersionUsedHtml(wsUsedUUID, wsSelectVersionId); + } + + // 版本的删除 + // @Mapping("COE_PAL_WS_VERSION_DEL") + @Mapping("com.actionsoft.apps.coe.pal_ws_version_del") + public String coePALProcessVersionDel(UserContext me, String wsUUID, String versionId) { + CoeWorkSpaceWeb po = new CoeWorkSpaceWeb(me); + return po.getCoeWorkSpaceVersionDel(wsUUID, versionId); + } + + // 流程资产关联BPM + // @Mapping("COE_PAL_PROCESSLEVEL_CORRELATE") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_correlate") + public String coePALWSCorrelate(UserContext me) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.correlateWorkspace(); + } + + // 获取流程资产关联的初始数据 + // @Mapping("COE_PAL_PROCESSLEVEL_CORRELATE_DATA_JSON") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_correlate_data_json") + public String coePALWSCorrelateData(UserContext me) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.getCoePALWSCorrelateData(); + } + + // 查询AWS未关联流程树 + // @Mapping("COE_PAL_PROCESSLEVEL_NOCORRELATE_TREE_DATA_JSON") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_nocorrelate_tree_data_json") + public String getAwsNoCorrelateTree(UserContext me, String appId, String pid, String requestType, String param) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.getAwsCorrelateTree(appId, pid, requestType, param, "noCorrelate"); + } + + // 查询AWS已关联流程树 + // @Mapping("COE_PAL_PROCESSLEVEL_CORRELATED_TREE_DATA_JSON") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_correlated_tree_data_json") + public String getAwsCorrelatedTree(UserContext me, String appId, String pid, String requestType, String param) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.getAwsCorrelateTree(appId, pid, requestType, param, "correlated"); + } + + // 新建关联时快速搜索 + // @Mapping("COE_PAL_PROCESSLEVEL_CORRELATE_SEARCH") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_correlate_search") + public String getCorrelateSearch(UserContext me, String query, String type, String limit, String currentPage) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.getCorrelateSearchDataToJson(query, type, Integer.parseInt(limit), Integer.parseInt(currentPage)); + } + + // PAL关联AWS流程保存 + // @Mapping("COE_PAL_PROCESSLEVEL_CORRELATE_CREATE_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_correlate_create_save") + public String coePALProcessLevelCorrelateCreateSave(UserContext me, String wsId, String currentCorrelation) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.coePALProcessLevelCorrelateCreateSave(wsId, currentCorrelation); + } + + // 跳转到流程分级首页 + // @Mapping("COE_PAL_PROCESSLEVEL_PORTAL") + // @Mapping("com.actionsoft.apps.coe.pal_processlevel_portal_page") + // public String coePALProcessLevelPortal(UserContext me, String wsId, + // String type) { + // CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + // return we.getCoeProcessLevelHtml(wsId, type); + // } + + // 跳转到流程分级tree + // @Mapping("COE_PAL_PROCESSLEVEL_TREE") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_tree") + public String coePALProcessLevelTree(UserContext me, String wsId) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.getCoeProcessLevelTree(wsId); + } + + // 流程分级 新建级次 + // @Mapping("COE_PAL_PROCESSLEVEL_CREAT") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_create") + public String coePALProcessLevelCreat(UserContext me, String wsid, String pid, String id, String type, String editable) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.createOrUpdateCoeProcessLevel(wsid, pid, id, type, editable); + } + + // 流程分级 新建级次ajax数据 + // @Mapping("COE_PAL_PROCESSLEVEL_CREATE_AJAX") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_create_ajax") + public String coePALProcessLevelCreateAjax(UserContext me, String wsid, String pid, String id, String type) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.coePALProcessLevelCreateAjax(wsid, pid, id, type); + } + + // 复制库文件 + // @Mapping("COE_PAL_PROCESSLEVEL_COPE") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_copy") + public String coePALPROCESSLEVELCOPE(UserContext me, String sourceUUID, String targetUUID, String copyType) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.copyFile(PALRepositoryCache.getCache().get(sourceUUID).getWsId(), null, sourceUUID, targetUUID, copyType); + } + + // 根据空间类型得到树json + // @Mapping("COE_PAL_PROCESSLEVEL_TREEJSON") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_treejson") + public String coePALProcessLevelTreeJson(UserContext me, String wsid, String pid) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.getTreeJson(wsid, pid); + } + + // 上传附件-protal页面 + // @Mapping("COE_PAL_PROCESSLEVEL_UPFILE_PORTAL") + @Deprecated + @Mapping("com.actionsoft.apps.coe.pal_processlevel_upfile_portal_page") + public String coePALProcessLevelUPFILEPORTAL(UserContext me, RequestParams params) { + String pl_uuid = params.get("pl_uuid"); + String shape_uuid = params.get("shape_uuid"); + String type = params.get("type"); + UpfileWeb web = new UpfileWeb(me); + return web.upFilePortalHtml(pl_uuid, shape_uuid, type); + } + + // 上传附件-load + // @Mapping("COE_PAL_PROCESSLEVEL_UPFILE_LOAD") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_upfile_load") + public String coePALProcessLevelUPFILELOAD(UserContext me, RequestParams params) { + String pl_uuid = params.get("pl_uuid"); + String shape_uuid = params.get("shape_uuid"); + String type = params.get("type"); + String uuids = params.get("uuids"); + String wsId = params.get("wsId"); + String teamId = params.get("teamId"); + UpfileWeb web = new UpfileWeb(me); + return web.loadUpFiles(pl_uuid, shape_uuid, type, uuids, wsId, teamId); + } + + /** + * 三员管理下加载用户权限下所有密级文件,包含未标密 + * @param me + * @param params + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_upfile_load_all") + public String coePALProcessLevelUPFILELOADALL(UserContext me, RequestParams params) { + String pl_uuid = params.get("pl_uuid"); + String shape_uuid = params.get("shape_uuid"); + String type = params.get("type"); + String uuids = params.get("uuids"); + String wsId = params.get("wsId"); + String teamId = params.get("teamId"); + UpfileWeb web = new UpfileWeb(me); + return web.loadUpFilesAll(pl_uuid, shape_uuid, type, uuids, wsId, teamId); + } + + /** + * 更新附件密级 + * @param me + * @param uuid + * @param securityLevel + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_upfile_security_level_update") + public String coePALProcessLevelUPFILESecurityLevelUpdate(UserContext me,String uuid,String securityLevel){ + UpfileWeb web = new UpfileWeb(me); + return web.updateUpFileSecurityLevel(uuid,securityLevel); + } + + /** + * 获取流程树中第一个附件未标密文件在树中路径 + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_upfile_unmark_path") + public String coePALProcessLevelUPFILEUnmarkPathGet(UserContext me,String wsId,String teamId){ + + return PALRepositoryQueryAPIManager.getInstance().getUnmarkPath(me,wsId,teamId); + } + + // 上传附件-load + // @Mapping("COE_PAL_PROCESSLEVEL_RELATION_UPFILE_LOAD") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_relation_upfile_load") + public String coePALProcessLevelRelationUPFILELOAD(UserContext me, RequestParams params) { + String pl_uuid = params.get("pl_uuid"); + String shape_uuid = params.get("shape_uuid"); + String type = params.get("type"); + UpfileWeb web = new UpfileWeb(me); + return web.loadRelationUpfiles(pl_uuid, shape_uuid, type); + } + + // 上传附件-add file + // @Mapping("COE_PAL_PROCESSLEVEL_UPFILE_ADD") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_upfile_add") + public String coePALProcessLevelUPFILEADD(UserContext me, RequestParams params) { + String pl_uuid = params.get("pl_uuid"); + String shape_uuid = params.get("shape_uuid"); + String type = params.get("type"); + String download = params.get("download"); + String fileName = params.get("fileName"); + String securityLevel = params.get("securityLevel"); + UpfileWeb web = new UpfileWeb(me); + return web.addUpFile(pl_uuid, shape_uuid, type, download, fileName,securityLevel); + } + + // 上传附件2(设计器内部批量上传改版)-add file + @Mapping("com.actionsoft.apps.coe.pal_processlevel_upfile_add2") + public String coePALProcessLevelUPFILEADD2(UserContext me, RequestParams params) { + String pl_uuid = params.get("pl_uuid"); + String shape_uuid = params.get("shape_uuid"); + String type = params.get("type"); + String download = params.get("download"); + String files = params.get("files"); + return new UpfileWeb(me).addUpFile2(pl_uuid, shape_uuid, type, download, files); + } + + // 附件-删除附件 + // @Mapping("COE_PAL_PROCESSLEVEL_UPFILE_DEL") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_upfile_del") + public String coePALProcessLevelUPFILEDEL(UserContext me, RequestParams params) { + String uuid = params.get("uuid"); + UpfileWeb web = new UpfileWeb(me); + return web.delete(uuid); + } + + // 附件-在线预览 + // @Mapping("COE_PAL_PROCESSLEVEL_UPFILE_READ") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_upfile_read") + public String coePALProcessLevelUPFILERead(UserContext me, RequestParams params) { + UpfileWeb web = new UpfileWeb(me); + String uuid = params.get("uuid"); + return web.readFile(uuid); + } + + // 文件属性的单个 值 修改 + // @Mapping("COE_PAL_PROCESSLEVEL_MORE_ATTR_CONTENT_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_more_attr_content_save") + public String coePALProcessLevelMoreAttrContentSave(UserContext me, String uuid, String josnKey, String josnContent) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.moreAttrContentSave(uuid, josnKey, josnContent); + } + + // 文件属性的固定属性 值 修改 + @Mapping("com.actionsoft.apps.coe.pal_processlevel_default_attr_content_save") + public String coePALProcessLevelDefaultAttrContentSave(UserContext me, String uuid, String josnKey, String josnContent) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.defaultAttrContentSave(uuid, josnKey, josnContent); + } + + // 删除该节点下及其子节点的所有数据 + // @Mapping("COE_PAL_PROCESSLEVEL_TREEREMOVE") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_tree_remove") + public String coePALProcessLevelTreeRemove(UserContext me, String wsid, String pid) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.removeTreeNode(pid, wsid); + } + + // 获取该节点下是否有子节点 + // @Mapping("COE_PAL_PROCESSLEVEL_ISTREECHILDREN") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_istreechildren") + public String coePALProcessLevelIsTreeChildren(UserContext me, String wsid, String pid) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.getChildrenStr(pid, wsid); + } + + // 同级设置orderindex + // @Mapping("COE_PAL_PROCESSLEVEL_SETPLORDERINDEX") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_setploaderindex") + public String coePALProcessLevelSetPlOrderIndex(UserContext me, String orderIndexs) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.setPlOrderIndex(orderIndexs); + } + + // 跨级设置pid + // @Mapping("COE_PAL_PROCESSLEVEL_SETPLPID") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_setplid") + public String coePALProcessLevelSetPlPid(UserContext me, String pids) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.setPlPids(pids); + } + + // 拖拽修改pal的pid或orderIndex + // @Mapping("COE_PAL_UPDATE_INDEX_OR_PID") + @Mapping("com.actionsoft.apps.coe.pal_update_index_or_pid") + public String updatePalIndexOrPid(UserContext me, String sourceId, String targetId, String type, String position) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.updatePalIndexOrPid(sourceId, targetId, type, position); + } + + // 流程分级统计 + // @Mapping("COE_PL_COUNT") + @Mapping("com.actionsoft.apps.coe.pal_pl_count") + public String coePLCount(UserContext me, String wsId, String condition) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.getPLStatistics(wsId, condition); + } + + // 跳转到流程清单首页 + // @Mapping("COE_PAL_PROCESSLEVEL_LIST_PORTAL") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_list_portal_page") + public String coePALProcessLevelListPortal(UserContext me, String wsId, String condition) { + CoeProcessListWeb we = new CoeProcessListWeb(me); + return we.getCoeProcessListHtml(wsId, condition); + } + + // 跳转到流程清单Datagrid + // @Mapping("COE_PAL_PROCESSLEVEL_GRIDDATA") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_griddata") + public String coePALProcessLevelGridData(UserContext me, String start, String pageSize, String wsId, String conditions) { + CoeProcessListWeb we = new CoeProcessListWeb(me); + if (wsId.equals("")) { + wsId = "0"; + } + return we.getCoeProcessListGridData(Integer.parseInt(start), Integer.parseInt(pageSize), wsId, conditions); + } + + // 设置流程图 + // @Mapping("COE_PAL_PROCESSLEVEL_FLOWCHART") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_flowchart_page") + public String coePALProcessLevelFlowChart(UserContext me, String id, String type) { + CoeProcessListWeb we = new CoeProcessListWeb(me); + return we.flowChartHtml(id, type); + } + + // 保存流程图 + // @Mapping("COE_PAL_PROCESSLEVEL_SAVEFLOWCHART") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_flowchart_save") + public String coePALProcessLevelSaveFlowChart(UserContext me, String id, String plDiagramUrl) { + CoeProcessListWeb we = new CoeProcessListWeb(me); + return we.saveflowChart(id, plDiagramUrl); + } + + // 标记颜色 + // @Mapping("COE_PAL_PROCESSLEVEL_SIGN") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_sign") + public String coePALProcessLevelSign(UserContext me, String id) { + CoeProcessListWeb we = new CoeProcessListWeb(me); + return we.signColorHtml(id); + } + + // 保存标记颜色 + // @Mapping("COE_PAL_PROCESSLEVEL_SAVESIGN") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_sign_save") + public String coePALProcessLevelSaveSign(UserContext me, String id, String plColor) { + CoeProcessListWeb we = new CoeProcessListWeb(me); + return we.saveSignColor(id, plColor); + } + + // 向上 + // @Mapping("COE_PAL_PROCESSLEVEL_UP") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_up") + public String coePALProcessLevelUp(UserContext me, String id, String orderIndex, String upId, String upOrderIndex) { + CoeProcessListWeb we = new CoeProcessListWeb(me); + return we.uP(id, Integer.parseInt(orderIndex), upId, Integer.parseInt(upOrderIndex)); + } + + // 导出excel + // @Mapping("COE_PAL_PROCESSLEVEL_EXPEXCEL") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_expexcel") + public String coePALProcessLevelExpExcel(UserContext me, String wsId, String conditions) { + CoeProcessListWeb we = new CoeProcessListWeb(me); + return we.expExcel(wsId, conditions); + } + + // 新版新建 + // @Mapping("COE_PAL_PROCESSLEVEL_CREATE_V2") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_create_v2") + public String coePALProcessLevelCreateV2(UserContext me, String wsid, String id) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.createProcessLevel(wsid, id); + } + + // 新版新建-模板内容 + // @Mapping("COE_PAL_PROCESSLEVEL_CREATE_TEMPLATE") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_create_template") + public String coePALProcessLevelCreateTemplate(UserContext me, String methodId) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.getTemplateByMethodId(methodId); + } + + // 资产库 模糊搜索 + // @Mapping("COE_PAL_PROCESSLEVEL_QUERY") + @Deprecated + @Mapping("com.actionsoft.apps.coe.pal_processlevel_query") + public String coePALPROCESSLEVELQUERY(UserContext me, String autoContent, String wsid) { + CoeProcessLevelWeb we = new CoeProcessLevelWeb(me); + return we.getPLInfoByName(autoContent, wsid); + } + + // 资产库模型查询 + @Mapping("com.actionsoft.apps.coe.pal_processlevel_basic_query") + public String coePalProcessLevelBasicQuery(UserContext me, String wsId, String teamId, String name, String timeStamp) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.basicQueryCoeProcessLevelByName(wsId, teamId, name, timeStamp); + } + + // 资产库模糊查询-高级查询-查询主信息 + @Mapping("com.actionsoft.apps.coe.pal_processlevel_condition_main_query") + public String coePalProcessLevelConditionMainQuery(UserContext me, String wsId, String teamId) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.conditionQueryCoeProcessLevelMainData(wsId, teamId); + } + + // 资产库模糊查询-高级查询-查询符合的数据 + @Mapping("com.actionsoft.apps.coe.pal_processlevel_condition_data_query") + public String coePalProcessLevelConditionDataQuery(UserContext me, String wsId, String teamId, String type, String method, String createUser, String updateDate, String key, String timeStamp) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.conditionQueryCoeProcessLevelData(wsId, teamId, type, method, createUser, updateDate, key, timeStamp); + } + + // 资产库 模糊搜索 检查是否存在库文件 + // @Mapping("COE_PAL_PROCESSLEVEL_QUERY_CHECK") + @Deprecated + @Mapping("com.actionsoft.apps.coe.pal_processlevel_query_check") + public String coePALPROCESSLEVELQUERYCHECK(UserContext me, String uuid) { + PALRepositoryModel coeProcessLevelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + return coeProcessLevelModel != null ? uuid : ""; + } + + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_LINK_TREE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_link_tree") + public String COEPALPLFileDesignerLinkTree(UserContext me, String wsid, String teamId, String palId) { + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.getDesignerLinkTree(wsid, teamId, palId); + } + + // 自定义文件链接文件的搜索功能 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_LINK_TREE_SEARCH") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_link_tree_search") + public String COEPALPLFileDesignerLinkTreeSearchByName(UserContext me, String seachName, String wsid) { + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.getDesignerLinkTreeSearchByName(seachName, wsid); + } + + // @Mapping("COE_PAL_PL_USING_PL_ID") + @Mapping("com.actionsoft.apps.coe.pal_pl_using_plid_query") + public String COEPALPLUsingPlId(UserContext me, String uuid) { + CoeProcessLevelWeb coeProcessLevelWeb = new CoeProcessLevelWeb(me); + return coeProcessLevelWeb.getUsingPlId(uuid); + } + + // 多人协作监听 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_REALTIME_LISTEN") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_realtime_listen") + public String COEPALPLRespositoryDesignerRealtimeListen(UserContext me, String clientId, String userId, String name, String subject, String listenTime) { + CoeRealtimeWeb coeRealtimeWeb = new CoeRealtimeWeb(me); + return coeRealtimeWeb.listen(clientId, userId, name, subject, listenTime); + } + + // 复制操作时缓存数据 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SHAPE_COPY") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_copy") + public String COEPALPLRespositoryDesignerRelationShapeCopy(UserContext me, RequestParams params) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + String userId = params.get("userId"); + String clientId = params.get("clientId"); + String type = params.get("type"); + String subject = params.get("subject"); + String ver = params.get("ver"); + String shapeId = params.get("shapeId"); + String messageJson = params.get("messageJson"); + String shapeGroupId = params.get("shapeGroupId"); + return relationShapeWeb.respositoryDesignerRelationShapeCopy(userId, clientId, subject, type, ver, shapeId, messageJson, shapeGroupId); + } + + // 粘贴时从缓存中获取数据 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SHAPE_PASTE_AJAX") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_paste_ajax") + public String COEPALPLRespositoryDesignerRelationShapePasteAjax(UserContext me, String userId, String clientId, String subject, String action, String type, String ver) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + return relationShapeWeb.respositoryDesignerRelationShapePasteAjax(userId, clientId, subject, action, type, ver); + } + + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_REALTIME_LEAVE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_realtime_leave") + public String COEPALPLRespositoryDesignerRealtimeLeave(UserContext me, String userId, String uuid) { + CoeRealtimeWeb coeRealtimeWeb = new CoeRealtimeWeb(me); + Map params = new HashMap(); + params.put("action", "leave"); + params.put("uuid", uuid); + params.put("sid", me.getSessionId()); + params.put("userId", userId); + params.put("messages", "{\"action\": \"leave\", \"userId\": \"" + userId + "\", \"name\":\"" + me.getUserName() + "\"}"); + coeRealtimeWeb.addRealtimeEvents(params); + //return ""; + CoeDesignerWeb web = new CoeDesignerWeb(me);//释放用户锁 + return web.releaseCheckoutRight(uuid); + } + + // 复制操作时缓存数据 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SHAPE_PASTE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_paste") + public String COEPALPLRespositoryDesignerRelationShapePaste(UserContext me, RequestParams params) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + String subject = params.get("subject"); + String messageJson = params.get("messageJson"); + return relationShapeWeb.pasteToDatabse(subject, messageJson); + } + + /*// 出现复制监听 + @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_LISTEN") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_realtion_listen") + public String COEPALPLRespositoryDesignerRelationListen(UserContext me, String clientId, String userId, String name, String subject, String listenTime) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + return relationShapeWeb.listen(clientId, userId, name, subject, listenTime); + } + + // 出现复制统计 + @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SHAPE_COUNT") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_count") + public String COEPALPLRespositoryDesignerRelationShapeCount(UserContext me, String shapeGroupId, String shapeId, String isCopy) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + return relationShapeWeb.designerRelationShapeCount(shapeGroupId, shapeId, isCopy); + }*/ + + // 形状关联 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_SHAPES_TREE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_tree") + public String COEPALPLRespositoryDesignerRelevanceShapesTree(UserContext me, String wsId, String modelId, String ref, String shapeId, String attrId, String relationShapeIds, String relationFileIds, String ruuid) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + return relationShapeWeb.designerRelevanceShapes(wsId, modelId, ref, shapeId, attrId, relationShapeIds, relationFileIds, ruuid); + } + + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_SHAPES_TREE_NODE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_tree_node") + public String COEPALRepositoryDesignerRelevanceShapesTreeDate(UserContext me, String wsId, String pid) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.getTreeJson(wsId, pid); + } + + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_PROCESS_MODELS_TREE_NODE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_process_models_tree_node") + public String COEPALRepositoryDesignerRelevanceProcessModelsTreeDate(UserContext me, String wsId, String pid, String methodScope) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.getProcessModelsTreeJson(wsId, pid, methodScope); + } + + /** + * 数据属性模型的快速搜索 + * @param me + * @param wsId + * @param category + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_SHAPES_TREE_QUERY") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_tree_query") + public String COEPALRespositoryDesignerRelevanceShapesTreeQuery(UserContext me, String wsId, String category, String autoContent) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.getShapesTreeDataJson(wsId, category, autoContent); + } + + // 形状关联 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_SHAPES_INFO") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_info") + public String COEPALPLRespositoryDesignerRelevanceShapesInfo(UserContext me, String uuid, String shapeId, String attrId) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + return relationShapeWeb.designerRelevanceShapesInfo(uuid, shapeId, attrId); + } + + // 流程模型关联 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_PROCESS_MODELS_INFO") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_process_models_info") + public String COEPALPLRespositoryDesignerRelevanceProcessModelsInfo(UserContext me, String uuid, String wsId) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + return relationShapeWeb.designerRelevanceProcessModelsInfo(uuid, wsId); + } + + // 自定义复制操作时缓存数据 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SHAPE_CUSTOM_COPY") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_custom_copy") + public String COEPALPLRespositoryDesignerRelationShapeCuntomCopy(UserContext me, RequestParams params) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + String userId = params.get("userId"); + String clientId = params.get("clientId"); + String type = params.get("type"); + String subject = params.get("subject"); + String ver = params.get("ver"); + String shapeId = params.get("shapeId"); + String messageJson = params.get("messageJson"); + String shapeGroupId = params.get("shapeGroupId"); + return relationShapeWeb.respositoryDesignerRelationShapeCustomCopy(userId, clientId, subject, type, ver, shapeId, messageJson, shapeGroupId); + } + + // 自定义复制 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SHAPE_CUSTOM_PASTE_AJAX") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_custom_paste_ajax") + public String COEPALPLRespositoryDesignerRelationShapeCustomPasteAjax(UserContext me, String userId, String clientId, String subject, String action, String type, String ver) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + return relationShapeWeb.respositoryDesignerRelationShapeCustomPasteAjax(userId, clientId, subject, action, type, ver); + } + + // @Mapping("COE_PAL_PL_REPOSITORY_CUSTOM_PASTE_SHAPE_RELATION_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_custom_paste_shape_relation_save") + public String COEPALPLRepositoryCustomPasteShapeRelationSave(UserContext me, String shapeMap, String relationShape, String pasteRelation) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.pasteRelationSave(shapeMap, relationShape, pasteRelation); + } + + /** + * 图形粘贴对附件的粘贴 + * @param me + * @param shapeMap + * @return + */ + // @Mapping("COE_PAL_PL_REPOSITORY_CUSTOM_PASTE_SHAPE_FILE_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_custom_paste_shape_file_save") + public String COEPALPLRepositoryCustomPasteShapeFileSave(UserContext me, String shapeMap) { + UpfileWeb web = new UpfileWeb(me); + return web.pasteShapeFile(shapeMap, me.getUID()); + } + + // 使用什么样的副本进行粘贴 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SHAPE_USED_PASTE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_used_paste") + public String COEPALPLRespositoryDesignerRelationShapeUsedPaste(UserContext me, String userId) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + return relationShapeWeb.respositoryDesignerRelationShapeUsed(userId) + ""; + } + + // 形状关联信息的存储 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SHAPE_RELEVANCE_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_save") + public String COEPALPLRespositoryDesignerRelationShapeRelevanceSave(UserContext me, RequestParams params) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + String relationShapes = params.get("relationShapes"); + String shapeId = params.get("shapeId"); + String fileUUID = params.get("fileUUID"); + String shapeGroupId = params.get("shapeGroupId"); + String attrId = params.get("attrId"); + String ref = params.get("ref"); + return relationShapeWeb.respositoryDesignerRelationShapeRelevanceSave(relationShapes, shapeId, fileUUID, shapeGroupId, attrId, ref); + } + + // 关联形状的展示 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SHAPE_RELEVANCE_SHOW") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_show") + public String COEPALPLRespositoryDesignerRelationShapeRelevanceShow(UserContext me, RequestParams params) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + String shapeId = params.get("shapeId"); + String fileId = params.get("fileId"); + return relationShapeWeb.respositoryDesignerRelationShapeRelevanceShow(shapeId, fileId); + } + + // 图形更多属性中,如果删除了一些属性,需要修改关联表中的关联 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SHAPE_RELEVANCE_CHECK") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_check") + public String COEPALPLRepositoryDesignerRelationShapeRelevanceCheck(UserContext me, String fileId, String shapeId, String attrIds) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + return relationShapeWeb.relationCheck(fileId, shapeId, attrIds); + } + + // 查询要删除的图形是否被关联 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SEARCH") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_search") + public String COEPALRepositoryDesignerRelationSearch(UserContext me, String fileId, String shapeIds) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.relationSearch(fileId, shapeIds); + } + + // 属性关联的形状显示 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SHAPE_RELEVANCE_NAME") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_name") + public String COEPALPLRespositoryDesignerRelationShapeRelevancName(UserContext me, RequestParams params) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + String fileId = params.get("fileId"); + String shapeId = params.get("shapeId"); + String shapeName = params.get("shapeName"); + String shapeCategory = params.get("shapeCategory"); + return relationShapeWeb.respositoryDesignerRelationShapeRelevanceName(fileId, shapeId, shapeName, shapeCategory); + } + + // 关联的删除 + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SHAPE_RELEVANCE_REMOVE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_remove") + public String COEPALPLRespositoryDesignerRelationShapeRelevancRemove(UserContext me, RequestParams params) { + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(me); + String attrId = params.get("uuid"); + String fileId = params.get("fileId"); + String shapeId = params.get("shapeId"); + return relationShapeWeb.removeRelationByAttrId(fileId, shapeId, attrId); + } + + // 报告生成器首页 + // @Mapping("COE_PAL_OUTPUTREPORT_HOME") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_home") + public String COEPALOutPutReportHome(UserContext me, String wsid) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + return outPutReport.outPutReportHome(wsid, ""); + } + + // 报告生成器首页 + // @Mapping("COE_PAL_OUTPUTREPORT_HOME_DATA") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_home_data") + public String COEPALOutPutReportHomeData(UserContext me, RequestParams params) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + int start = params.getInt("start"); + int end = params.getInt("end"); + String wsid = params.get("wsid"); + String teamId = params.get("teamId"); + String data = params.get("data"); + return outPutReport.getTaskData(start, end, wsid, teamId, data); + } + + // 报告生成器首页 + + // @Mapping("COE_PAL_OUTPUTREPORT_JSON_DATA") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_json_data") + public String COEPALOutPutReportJsonData(UserContext me, String language, String templateOperate) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + return outPutReport.jsonData(language, templateOperate); + } + + // @Mapping("COE_PAL_OUTPUTREPORT_PAL_FILE_JSON_DATA") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_pal_file_json_data") + public String COEPALOutPutReportPALFileJsonData(UserContext me, String methodType, String wsid, String pid, String versionType, String teamId) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + return outPutReport.PALFileJsonData(methodType, wsid, pid, versionType, teamId); + } + + // @Mapping("COE_PAL_OUTPUTREPORT_PAL_FILE_JSON_DATA_ROOT") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_pal_file_json_data_root") + public String COEPALOutPutReportPALFileJsonDataRoot(UserContext me, String methodType, String wsid, String versionType, String teamId, String targetMethodType) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + return outPutReport.PALFileJsonDataRoot(methodType, wsid, versionType, teamId, targetMethodType); + } + + // @Mapping("COE_PAL_OUTPUTREPORT_PAL_FILE_JSON_DATA_ROOT_TREE_DATA") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_pal_file_json_data_root_tree_data") + public String COEPALOutPutReportPALFileJsonDataRootTreeData(UserContext me, String methodType, String wsid, String versionType, String teamId) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + return outPutReport.PALFileJsonDataRootTreeData(methodType, wsid, versionType, teamId); + } + + // @Mapping("COE_PAL_OUTPUTREPORT_PAL_FILE_RELATION_JSON_DATA_ROOT") + @Mapping("com.actionsoft.apps.coe.pal_file_relation_json_data_root") + public String COEPALOutPutReportPALFileRelationJsonDataRoot(UserContext me, String methodType, String wsid, String versionType, String teamId) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + return outPutReport.PALFileRelationJsonDataRoot(methodType, wsid, versionType, teamId); + } + + // @Mapping("COE_PAL_OUTPUTREPORT_PAL_FILE_RELATION_JSON_DATA") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_pal_file_relation_json_data") + public String COEPALOutPutReportPALFileRelationJsonData(UserContext me, String methodType, String wsid, String pid, String versionType, String teamId) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + return outPutReport.PALFileRelationJsonData(methodType, pid, wsid, versionType, teamId); + } + + // 获得流程文件中某个类型的所有图形元素 + // @Mapping("COE_PAL_OUTPUTREPORT_PAL_FILE_SHAPES") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_pal_file_shapes") + public String getRepositoryShapes(UserContext me, String uuid, String type) { + OutPutReportWeb web = new OutPutReportWeb(me); + return web.getRepositoryShapes(uuid, type); + } + + /** + * 报告保存 + * + * @param me + * @param params + * @return + */ + // @Mapping("COE_PAL_OUTPUTREPORT_COMPLETE") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_complete") + public String COEPALOutPutReportSave(UserContext me, RequestParams params) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + String lang = params.get("lang"); + String taskName = params.get("taskName"); + String userId = params.get("userId"); + String wsId = params.get("wsId"); + String teamId = params.get("teamId"); + String profileId = params.get("profileId"); + String isExecute = params.get("isExecute"); + String config = params.get("config"); + String targetFileId = params.get("targetFileId"); + String targetShape = params.get("targetShape"); + String relationFileId = params.get("relationFileId"); + String isModify = params.get("isModify"); + String taskId = params.get("taskId"); + return outPutReport.reportSave(lang, taskName, userId, teamId, profileId, wsId, isExecute, config, targetFileId, targetShape, relationFileId, isModify, taskId); + } + + /** + * 报告删除 + * + * @param me + * @param params + * @return + */ + // @Mapping("COE_PAL_OUTPUTREPORT_DELETE") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_delete") + public String COEPALOutPutReportDelete(UserContext me, RequestParams params) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + String wsid = params.get("wsid"); + String id = params.get("id"); + String profileId = params.get("profileId"); + String teamId = params.get("teamId"); + return outPutReport.reportDelete(id, wsid, profileId, teamId); + } + + /** + * 报告统计 + * + * @param me + * @param params + * @return + */ + // @Mapping("COE_PAL_OUTPUTREPORT_HOME_DATA_COUNT") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_home_data_count") + public String COEPALOutPutReportCount(UserContext me, RequestParams params) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + String wsid = params.get("wsid"); + String teamId = params.get("teamId"); + String data = params.get("data"); + return outPutReport.reportCount(teamId, wsid, data); + } + + /** + * 报告执行 + * + * @param me + * @param params + * @return + */ + // @Mapping("COE_PAL_OUTPUTREPORT_EXECUTE") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_execute") + public String COEPALOutPutReportExecute(UserContext me, RequestParams params) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + String wsid = params.get("wsid"); + String id = params.get("id"); + String profileId = params.get("profileId"); + return outPutReport.reportExecute(id, wsid, profileId); + } + + /** + * 报告修改 + * + * @param me + * @param params + * @return + */ + // @Mapping("COE_PAL_OUTPUTREPORT_MODIRY") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_modify") + public String COEPALOutPutReportModify(UserContext me, RequestParams params) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + String id = params.get("id"); + return outPutReport.reportModify(id); + } + + /** + * 单个报告的刷新 + * + * @param me + * @param params + * @return + */ + // @Mapping("COE_PAL_OUTPUTREPORT_EXECUTE_REFRESH") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_execute_refresh") + public String COEPALOutPutReportExecuteRefresh(UserContext me, RequestParams params) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + String id = params.get("id"); + String teamId = params.get("teamId"); + return outPutReport.refreshRowData(id, teamId); + } + + /** + * 下载模版 + * @param me + * @param appId 模版所属应用 + * @param templates 模版路径名称 + * @return + */ + // @Mapping("COE_PAL_OUTPUTREPORT_TEMPLATES_DOWNLOAD") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_templates_download") + public String downloadOutPutReportTemplates(UserContext me, String appId, String templates) { + OutPutReportWeb web = new OutPutReportWeb(me); + return web.downloadOutPutReportTemplates(appId, templates); + } + + /** + * 上传模版 + * @param me + * @param appId 模版所属应用 + * @param param 模版在dc中的路径参数 + * @return + */ + // @Mapping("COE_PAL_OUTPUTREPORT_TEMPLATES_UPLOAD") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_templates_upload") + public String uploadOutPutReportTemplates(UserContext me, String appId, String profileId, String param) { + OutPutReportWeb web = new OutPutReportWeb(me); + return web.uploadOutPutReportTemplates(appId, profileId, param); + } + + // @Mapping("COE_PAL_PUBLISHER_ADD_HOME") + @Mapping("com.actionsoft.apps.coe.pal_publisher_add_home") + public String COEPALPublisherData(UserContext me, String wsid, String teamId) { + ProcessPublishWeb web = new ProcessPublishWeb(me); + return web.PALPublisherData(wsid, teamId); + } + + // @Mapping("COE_PAL_PUBLISHER_STOP_HOME") + @Mapping("com.actionsoft.apps.coe.pal_publisher_stop_home") + public String COEPALPublisherStopDataHome(UserContext me, String wsid, String teamId) { + ProcessPublishWeb web = new ProcessPublishWeb(me); + return web.PALPublisherData(wsid, teamId); + } + + // @Mapping("COE_PAL_PUBLISHER_CHANGE_HOME") + @Mapping("com.actionsoft.apps.coe.pal_publisher_change_home") + public String COEPALPublisherChangeDataHome(UserContext me, String wsid, String teamId) { + ProcessPublishWeb web = new ProcessPublishWeb(me); + return web.PALPublisherData(wsid, teamId); + } + + /** + * 新发布流程申请 + * @param me + * @param processInstId + * @param taskInstId + * @param openState + * @param currentPage + * @param formItemDefId + * @param formData + * @return + */ + // @Mapping("COE_PAL_PUBLISH_ADD_SAVE_DATA") + @Mapping("com.actionsoft.apps.coe.pal_publish_add_save_data") + public String COEPALPublishAddSaveData(UserContext me, String processInstId, String taskInstId, int openState, int currentPage, String formItemDefId, String formData) { + JSONArray jsonArr = JSONArray.parseArray(formData); + FormEngine web = new FormEngine(me, processInstId, taskInstId, openState, currentPage); + for (int i = 0; i < jsonArr.size(); i++) { + JSONObject json = jsonArr.getJSONObject(i); + if (json.getString("id").length() < 16) { + continue; + } + JSONObject jsonData = new JSONObject(); + jsonData.put("PUBLISHDESC", ""); + jsonData.put("PUBLISTHTYPE", json.getString("fileType")); + jsonData.put("PUBLISHFILENAME", json.getString("name")); + jsonData.put("PUBLISHVERSION", json.getString("fileVersion")); + jsonData.put("PUBLISHFILEID", json.getString("id")); + formData = jsonData.toString(); + boolean isCreate = true; + String rowBoId = UUIDGener.getUUID(); + web.saveCommonGridRowData(web.getContext(), formItemDefId, rowBoId, formData, isCreate, "", "", "", false); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.msg(I18nRes.findValue(AppsConst.SYS_APP_PORTAL, "保存成功")); + return ro.toString(); + } + + /** + * 新发布流程申请 + * @param me + * @param processInstId + * @param taskInstId + * @param openState + * @param currentPage + * @param formItemDefId + * @param formData + * @return + */ + // @Mapping("COE_PAL_PUBLISH_STOP_SAVE_DATA") + @Mapping("com.actionsoft.apps.coe.pal_publish_stop_save_data") + public String COEPALPublishStopSaveData(UserContext me, String processInstId, String taskInstId, int openState, int currentPage, String formItemDefId, String formData) { + JSONArray jsonArr = JSONArray.parseArray(formData); + FormEngine web = new FormEngine(me, processInstId, taskInstId, openState, currentPage); + for (int i = 0; i < jsonArr.size(); i++) { + JSONObject json = jsonArr.getJSONObject(i); + if (json.getString("id").length() < 16) { + continue; + } + JSONObject jsonData = new JSONObject(); + jsonData.put("STOPDESC", ""); + jsonData.put("STOPTYPE", json.getString("fileType")); + jsonData.put("STOPFILENAME", json.getString("name")); + jsonData.put("STOPVERSION", json.getString("fileVersion")); + jsonData.put("STOPFILEID", json.getString("id")); + formData = jsonData.toString(); + boolean isCreate = true; + String rowBoId = UUIDGener.getUUID(); + web.saveCommonGridRowData(web.getContext(), formItemDefId, rowBoId, formData, isCreate, "", "", "", false); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.msg(I18nRes.findValue(AppsConst.SYS_APP_PORTAL, "保存成功")); + return ro.toString(); + } + + /** + * 新发布流程申请 + * @param me + * @param processInstId + * @param taskInstId + * @param openState + * @param currentPage + * @param formItemDefId + * @param formData + * @return + */ + // @Mapping("COE_PAL_PUBLISH_CHANGE_SAVE_DATA") + @Mapping("com.actionsoft.apps.coe.pal_publish_change_save_data") + public String COEPALPublishChangeSaveData(UserContext me, String processInstId, String taskInstId, int openState, int currentPage, String formItemDefId, String formData) { + JSONArray jsonArr = JSONArray.parseArray(formData); + FormEngine web = new FormEngine(me, processInstId, taskInstId, openState, currentPage); + for (int i = 0; i < jsonArr.size(); i++) { + JSONObject json = jsonArr.getJSONObject(i); + if (json.getString("id").length() < 16) { + continue; + } + JSONObject jsonData = new JSONObject(); + jsonData.put("CHANGEDDESC", ""); + jsonData.put("CHANGETYPE", json.getString("fileType")); + jsonData.put("CHANGEFILENAME", json.getString("name")); + jsonData.put("CHANGEDVERSION", json.getString("fileVersion")); + jsonData.put("CHANGEFILEID", json.getString("id")); + formData = jsonData.toString(); + boolean isCreate = true; + String rowBoId = UUIDGener.getUUID(); + web.saveCommonGridRowData(web.getContext(), formItemDefId, rowBoId, formData, isCreate, "", "", "", false); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.msg(I18nRes.findValue(AppsConst.SYS_APP_PORTAL, "保存成功")); + return ro.toString(); + } + + /** + * 新增发布子表单数据 + * + * @param me + * @param processInstId + * @return + */ + // @Mapping("COE_PAL_PUBLISH_ADD_SHOW_DATA") + @Mapping("com.actionsoft.apps.coe.pal_publish_add_show_data") + public String COEPALPublishAddShowData(UserContext me, String processInstId) { + ProcessPublishWeb web = new ProcessPublishWeb(me); + return web.getPublishAddData(processInstId); + } + + /** + * 停用发布子表单数据 + * + * @param me + * @param processInstId + * @return + */ + // @Mapping("COE_PAL_PUBLISH_STOP_SHOW_DATA") + @Mapping("com.actionsoft.apps.coe.pal_publish_stop_show_data") + public String COEPALPublishStopShowData(UserContext me, String processInstId) { + ProcessPublishWeb web = new ProcessPublishWeb(me); + return web.getPublishStopData(processInstId); + } + + /** + * 修改发布子表单数据 + * + * @param me + * @param processInstId + * @return + */ + // @Mapping("COE_PAL_PUBLISH_CHANGE_SHOW_DATA") + @Mapping("com.actionsoft.apps.coe.pal_publish_change_show_data") + public String COEPALPublishChangeShowData(UserContext me, String processInstId) { + ProcessPublishWeb web = new ProcessPublishWeb(me); + return web.getPublishChangeData(processInstId); + } + + /** + * 获取资产库文件发布历史 + * + * @param me + * @param repositoryId + * @param wsId + * @return + * @author zhangming + */ + // @Mapping("COE_PAL_PUBLISH_HISTORY_OF_REPOSITORY") + @Mapping("com.actionsoft.apps.coe.pal_publish_history_of_repository") + public String COEPALPublishHistoryOfRepository(UserContext me, String repositoryId, String wsId) { + ProcessPublishWeb web = new ProcessPublishWeb(me); + return web.getPublishHistoryList(repositoryId, wsId); + } + + /** + * 资产库备份首页 + * + * @param me + * @param wsId + * @return + * @author zhangming + */ + // @Mapping("COE_PAL_BACKUP_HOME") + @Mapping("com.actionsoft.apps.coe.pal_backup_home") + public String CoEPALBackupHome(UserContext me, String wsId) { + CoEPALBackupWeb web = new CoEPALBackupWeb(me); + return web.getHomePage(wsId); + } + + /** + * 资产库备份首页-数据 + * + * @param me + * @param wsId + * @return + * @author zhangming + */ + // @Mapping("COE_PAL_BACKUP_DATA") + @Mapping("com.actionsoft.apps.coe.pal_backup_data") + public String CoEPALBackupData(UserContext me, String wsId) { + CoEPALBackupWeb web = new CoEPALBackupWeb(me); + return web.getBackupData(wsId); + } + + /** + * 资产库备份-新增 + * + * @param me + * @param wsId + * @param remark + * @return + * @author zhangming + */ + // @Mapping("COE_PAL_BACKUP_ADD") + @Mapping("com.actionsoft.apps.coe.pal_backup_add") + public String CoEPALBackupAdd(UserContext me, String wsId, String remark) { + CoEPALBackupWeb web = new CoEPALBackupWeb(me); + return web.saveBackup(wsId, remark); + } + + /** + * 资产库备份-删除 + * + * @param me + * @param wsId + * @param id + * @return + * @author zhangming + */ + // @Mapping("COE_PAL_BACKUP_DELETE") + @Mapping("com.actionsoft.apps.coe.pal_backup_delete") + public String CoEPALBackupDelete(UserContext me, String wsId, String id) { + CoEPALBackupWeb web = new CoEPALBackupWeb(me); + return web.deleteBackup(wsId, id); + } + + /** + * 资产库备份-恢复 + * + * @param me + * @param wsId + * @param id + * @return + * @author zhangming + */ + // @Mapping("COE_PAL_BACKUP_RECOVER") + @Mapping("com.actionsoft.apps.coe.pal_backup_recover") + public String CoEPALBackupRecover(UserContext me, String wsId, String id) { + CoEPALBackupWeb web = new CoEPALBackupWeb(me); + return web.recoverBackup(wsId, id); + } + + /** + * 资产库备份-获取状态 + * + * @param me + * @param wsId + * @param id + * @return + * @author zhangming + */ + // @Mapping("COE_PAL_BACKUP_STATE") + @Mapping("com.actionsoft.apps.coe.pal_backup_state") + public String CoEPALBackupState(UserContext me, String wsId, String id) { + CoEPALBackupWeb web = new CoEPALBackupWeb(me); + return web.getBackupState(wsId, id); + } + + /** + * 资产库备份-导出备份数据 + * + * @param me + * @param wsId + * @param id + * @return + * @throws Exception + * + */ + // @Mapping("COE_PAL_BACKUP_EXPORT") + @Mapping("com.actionsoft.apps.coe.pal_backup_export") + public String CoEPALBackupExport(UserContext me, String wsId, String id) throws Exception { + CoEPALBackupWeb web = new CoEPALBackupWeb(me); + return web.getBackupExport(wsId, id); + } + + /** + * 资产库备份-导出备份数据-进度查询 + * + * @param me + * @param wsId + * @param id + * @return + * @throws Exception + */ + // @Mapping("COE_PAL_BACKUP_EXPORT_PROGRESS") + @Mapping("com.actionsoft.apps.coe.pal_backup_export_progress") + public String CoEPALBackupExportProgress(UserContext me, String wsId, String id) throws Exception { + CoEPALBackupWeb web = new CoEPALBackupWeb(me); + return web.getBackupExportProgress(wsId, id); + } + + /** + * 资产库备份-导出备份数据-下载地址 + * + * @param me + * @param wsId + * @param id + * @return + * @throws Exception + */ + // @Mapping("COE_PAL_BACKUP_EXPORT_DOWNLOAD") + @Mapping("com.actionsoft.apps.coe.pal_backup_export_download") + public String CoEPALBackupExportDownload(UserContext me, String wsId, String id) throws Exception { + CoEPALBackupWeb web = new CoEPALBackupWeb(me); + return web.getBackupExportDownload(wsId, id); + } + + /** + * 资产库备份-修改 + * + * @param me + * @param id + * @param remark + * @return + * @author zhangming + */ + // @Mapping("COE_PAL_BACKUP_UPDATE") + @Mapping("com.actionsoft.apps.coe.pal_backup_update") + public String CoEPALBackupUpdate(UserContext me, String id, String remark) { + CoEPALBackupWeb web = new CoEPALBackupWeb(me); + return web.updateBackup(id, remark); + } + + /** + * 导入org模型 + * + * @param me + * @param wsId + * @param parentId + * @param fileName + * @return + * @author zhangming + */ + // @Mapping("COE_PAL_REPOSITORY_IMPORT_ORG") + @Mapping("com.actionsoft.apps.coe.pal_repository_import_org") + public String CoEPALRepositoryImportOrg(UserContext me, String wsId, String teamId, String parentId, String fileName) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.importOrgModel(wsId, parentId, fileName, teamId); + } + + /** + * 导入org模型的excel下载模板 + * + * @param me + * @param category + * @return + * @author zhangming + */ + // @Mapping("COE_PAL_REPOSITORY_IMPORT_ORG_TEMPLATE") + @Mapping("com.actionsoft.apps.coe.pal_repository_import_org_template") + public String CoEPALRepositoryTemplateOrgUrl(UserContext me, String category) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.getImportTemplateUrl(category); + } + + /** + * 部门流程根节点 + * + * @param me + * @param wsId + * @param categorys + * @return + */ + // @Mapping("COE_PAL_REPOSITORY_GET_PAL_TREEDATA_BY_DEPT") + @Mapping("com.actionsoft.apps.coe.pal_repository_get_pal_treedata_by_dept") + public String getCoEPALRepositoryTreeDataByDept(UserContext me, String wsId, String categorys) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.getCoEPALRepositoryTreeDataByDept(wsId, categorys); + } + + /** + * 流程根节点 + * + * @param me + * @param wsId + * @param categorys + * @return + */ + // @Mapping("COE_PAL_REPOSITORY_GET_PAL_TREEDATA") + @Mapping("com.actionsoft.apps.coe.pal_repository_get_pal_treedata") + public String getCoEPALRepositoryTreeData(UserContext me, String wsId, String categorys) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.getCoEPALRepositoryTreeData(wsId, categorys); + } + + /** + * 查询流程的链接 + * @param me + * @param wsId + * @param plId + * @return + */ + // @Mapping("COE_PAL_LINK_OF_REPOSITORY") + @Mapping("com.actionsoft.apps.coe.pal_link_of_repository") + public String getPALLinkOfRepository(UserContext me, String wsId, String plId) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.getPALLinkOfRepository(wsId, plId); + } + + /** + * 全量保存流程文件 + * + * @param me + * @param uuid + * @param define + * @return + */ + // @Mapping("COE_PAL_REPOSITORY_PROCESS_DEFINE_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_repository_process_define_save") + public String saveProcessDefine(UserContext me, String uuid, String define, String teamId, String messages) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + + String ro = ""; + try { + ro = web.saveProcessDefine(me, uuid, define, teamId, messages); + } catch (IOException e) { + e.printStackTrace(); + return ResponseObject.newErrResponse(ExceptionUtil.getMessage(e)).toString(); + } + return ro; + } + + /** + * 检查流程的锁定信息 + * + * @param me + * @param uuid + * @return + */ + // @Mapping("COE_PAL_REPOSITORY_PROCESS_DEFINE_GET_LOCK_INFO") + @Mapping("com.actionsoft.apps.coe.pal_repository_process_define_get_lock_info") + public String getCheckoutInfo(UserContext me, String uuid) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + return web.getCheckoutInfo(uuid); + } + + /** + * 强制获取流程编辑权 + * + * @param me + * @param uuid + * @return + */ + // @Mapping("COE_PAL_REPOSITORY_PROCESS_DEFINE_EDIT_GETLOCK") + @Mapping("com.actionsoft.apps.coe.pal_repository_process_define_edit_getlock") + public String setCheckoutRight(UserContext me, String uuid) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + return web.setCheckoutRight(uuid); + } + + /** + * 释放流程编辑权 + * + * @param me + * @param uuid + * @return + */ + // @Mapping("COE_PAL_REPOSITORY_PROCESS_DEFINE_EDIT_RELEASELOCK") + @Mapping("com.actionsoft.apps.coe.pal_repository_process_define_edit_releaselock") + public String releaseCheckoutRight(UserContext me, String uuid) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + return web.releaseCheckoutRight(uuid); + } + + /** + * 删除流程节点文本或删除节点,修改关联表中的数据 + * + * @param me + * @param uuid + * @param shapeId + * @param shapeText + * @param type + * @return + */ + // @Mapping("COE_PAL_REPOSITORY_DESIGNER_SHAPE_UPDATE_TEXT_OR_DELETE") + @Mapping("com.actionsoft.apps.coe.pal_repository_designer_shape_update_text_or_delete") + public String updateShapeTextOrDeleteShape(UserContext me, String uuid, String shapeId, String shapeText, int type) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + return web.updateShapeTextOrDeleteShape(uuid, shapeId, shapeText, type); + } + + /** + * shape同名符号提示 + * @param me + * @param uuid + * @param shapeId + * @param shapeText + * @return + */ + // @Mapping("COE_PAL_REPOSITORY_DESIGNER_SHAPE_SAME_TEXT_CHECK") + @Mapping("com.actionsoft.apps.coe.pal_repository_designer_shape_same_text_check") + public String getShapeSameTexts(UserContext me, String uuid, String shapeId, String shapeText) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + return web.getShapeSameTexts(uuid, shapeId, shapeText); + } + + /** + * 节点属性是deptAddress,获取关联的部门名称 + * @param me + * @param deptIds + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_RELATION_SHAP_DEPT_NAME") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_deptname_query") + public String repositoryDesignerRelationShapDeptName(UserContext me, String deptIds) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + return web.getRelationShapDeptName(deptIds); + } + + /** + * 导出流程 + * @param me + * @param wsId + * @param uuid + * @return + * @throws Exception + */ + // @Mapping("COE_PAL_PL_REPOSITORY_PROCESSLEVEL_EXPORT_REPOSITORY") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_processlevel_repository_export") + public String exportRepository(UserContext me, String wsId, String uuid) throws Exception { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.exportRepository(wsId, uuid); + } + + /** + * 导入流程 + * @param me + * @param wsId + * @param uuid + * @return + * @throws Exception + */ + // @Mapping("COE_PAL_PL_REPOSITORY_PROCESSLEVEL_IMPORT_REPOSITORY") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_processlevel_repository_import") + public String importRepository(UserContext me, String wsId, String uuid, String fileName) throws Exception { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.importRepository(wsId, uuid, fileName); + } + + /* + * 锁定 解锁当前流程模型 其他人员只能读,不可修改 + * @param uuid 流程模型唯一标识 + * @param optype 操作 lockpro 锁定 unlockpro 解锁 + * */ + // @Mapping("COE_PAL_PL_RESPOSITORY_LOCK_UNLUCK_PROCESS") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_lock_or_unlock_process") + public String COEPALlockOrUnlockProcess(UserContext me, String uuid, String optype) { + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.lockOrUnlockProcess(uuid, optype); + } + + /** + * 判断当前流程模型是否已经上锁 上锁人员 + * @param me + * @param uuid + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_CHECK_PROCESS_LOCK_STATE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_process_lock_state_check") + public String checkProcessLockState(UserContext me, String uuid) { + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.checkProcessLockState(uuid); + } + + /** + * 根据流程源文件校验节点关联属性是否存在有关联节点id但是数据库无该关联信息的情况 + * 根据流程源文件反向插入关联数据到APP_ACT_COE_PAL_SHAPE_RLAT + * @param wsId + * @return + */ + // @Mapping("COE_PAL_WS_CHECK_SHAPE_RELATION_INTEGRITY") + @Mapping("com.actionsoft.apps.coe.pal_ws_shape_relation_integrity_check") + public String COEPALCheckShapeRelationIntegrity(UserContext me, String wsId) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.checkAndRepairShapeRelation(wsId); + } + + /** + * 关联关系DB数据恢复 + * @param lossData 需要恢复的数据 + */ + // @Mapping("COE_PAL_WS_SHAPE_RELATION_RESTORE") + @Mapping("com.actionsoft.apps.coe.pal_ws_shape_relation_restore") + public String COEPALShapeRelationRestore(UserContext me, String lossData) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.shapeRelationRestore(lossData); + } + + /** + * 特殊文件属性(列表形式属性)保存 + * @return + */ + // @Mapping("COE_PAL_PROCESSLEVEL_SPECIAL_ATTRIBUTE_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_special_attribute_save") + public String COEPALPROCESSLEVELSpecialAttributeSave(UserContext me, String wsId, String id, String plId, String type, String opType, String value) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.SpecialAttributeSave(wsId, id, plId, type, opType, value); + } + + /** + * 特殊文件属性(列表形式属性)删除 + * @return + */ + // @Mapping("COE_PAL_PROCESSLEVEL_SPECIAL_ATTRIBUTE_DELETE") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_special_attribute_delete") + public String COEPALPROCESSLEVELSpecialAttributeDelete(UserContext me, String id) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.SpecialAttributeSaveDelete(id); + } + + /** + * 检测是否可以导出流程手册 + * @param me + * @param fileId + * @return + */ + // @Mapping("COE_PAL_OUTPUTREPORT_OUTPUT_PROCESS_CHECK") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_output_process_check") + public String COEPALOUTPUTREPORTOutputProcessCheck (UserContext me, String fileId) { + OutPutReportWeb web = new OutPutReportWeb(me); + return web.checkOutputProcess(fileId); + } + + // @Mapping("COE_PAL_OUTPUTREPORT_OUTPUT_PROCESS_CREATE") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_output_process_create") + public String COEPALOUTPUTREPORTOutputProcessCreate (UserContext me, String wsId, String teamId, String fileId) { + return PALRepositoryQueryAPIManager.getInstance().createOutputReportPr(wsId, me.getUID(), teamId, fileId); + } + + /** + * 流程手册预览 + * @param me + * @param taskId + * @return + */ + // @Mapping("COE_PAL_OUTPUTREPORT_OUTPUT_PROCESS_PREVIEW") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_output_process_preview") + public String COEPALOUTPUTREPORTOutputProcessPreview(UserContext me, String taskId) { + return PALRepositoryQueryAPIManager.getInstance().outputReportPreview(me, taskId); + } + + /** + * 查询导出组织模型等结构 + * 简单查询 + * @param me + * @param ruuid + * @param wsId + * @return + */ + // @Mapping(value="COE_PAL_PL_RESPOSITORY_EXPORT_ORG_DATA") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_export_org_data") + public String COEPALRESPOSITORYExportOrgData(UserContext me, String ruuid, String wsId) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.exportOrgData(wsId, ruuid); + } + + /** + * 制度表单等工具栏中上传附件删除 + * @param ruuid + * @param fileName + * @return + */ + // @Mapping(value="COE_PAL_PROCESSLEVEL_SHAPE_UPFILE_DEL") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_shape_upfile_del") + public String COEPALPROCESSLEVELShapeUpfileDel(UserContext me, String appId, String repositoryName, String groupValue, String ruuid, String fileName) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.delShapeUpfile(appId, repositoryName, groupValue, ruuid, fileName); + } + + /** + * 制度表单等工具栏中上传附件保存并生成相应活动节点 + * @param ruuid + * @param fileNames + * @return + */ + // @Mapping(value="COE_PAL_PROCESSLEVEL_SHAPE_UPFILE_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_shape_upfile_save") + public String COEPALPROCESSLEVELShapeUpfileSave(UserContext me, String appId, String repositoryName, String groupValue, String ruuid, String fileNames, String type) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.saveShapeUpfile(appId, repositoryName, groupValue, ruuid, fileNames, type); + } + + /** + * 创建模型图片和缩略图 + * @param uuid + * @return + */ + // @Mapping(value="COE_PAL_PL_RESPOSITORY_SAVEIMAGE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_image_save") + public String COEPALPLRESPOSITORYSaveImage(UserContext me, String uuid) { + PALRepositoryQueryAPIManager.getInstance().saveImage(uuid, true, true); + return ResponseObject.newOkResponse().toString(); + } + + /** + * 获取打开一个流程所需要的参数 + * 应用于流程树结构双击打开流程设计器 + * @param me + * @param wsId + * @param uuid + * @return + */ + // @Mapping(value="COE_PAL_PROCESSLEVEL_DESIGNER_DATA") + @Mapping("com.actionsoft.apps.coe.pal_processlevel_designer_data_query") + public String COEPALPROCESSLEVELDesignerData(UserContext me, String wsId, String uuid) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + String result = web.getPortalParam(uuid, wsId); + return result; + } + + /** + * 新版门户流程只读页面打开前校验 + * @param me + * @param uuid + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_VIEWER_PORTAL_LINK_PERM") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_viewer_portal_link_perm_check") + public String COEPALRESPOSITORYDesignerViewerPortalLinkPerm(UserContext me, String uuid) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + return web.getDesignerViewerPortalLinkPerm(uuid); + } + + /** + * 新版门户打开 + * @param me + * @param uuid + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_VIEWER_PORTAL_OPEN") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_viewer_portal_open_page") + public String COEPALRESPOSITORYDesignerViewerPortalOpen(UserContext me, String uuid) { + return PALRepositoryQueryAPIManager.getInstance().getPublishPortalHtml(me, uuid, null); + } + + /** + * 保存节点的地址簿属性内容到关联表 + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_ADDRESS_SHAPE_DATA_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_address_shape_data_save") + public String COEPALRESPOSITORYDesignerAddressShapeDataSave(UserContext me, String data) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.saveAddressShapeData(data); + } + + /** + * 获取关联的地址簿id + * @param me + * @param objIds + * @param shapeId + * @param uuid + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_ADDRESS_SHAPE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_address_shape_query") + public String COEPALRESPOSITORYDesignerAddressShape(UserContext me, String objIds, String shapeId, String uuid) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.getAddressShape(objIds, shapeId, uuid); + } + + /** + * 获取关联的地址簿名称 + * 只读情况下显示 + * @param me + * @param objIds + * @param shapeId + * @param uuid + * @param type + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_ADDRESS_NAMES_SHAPE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_address_names_shape_query") + public String COEPALRESPOSITORYDesignerAddressShape(UserContext me, String objIds, String shapeId, String uuid, String type) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.getAddressNames(objIds, shapeId, uuid, type); + } + + /** + * 获取aws平台的组织机构/岗位角色树 + * @param me + * @param wsId + * @param fileId + * @param shapeId + * @param attrId + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_AWS_ORG") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_aws_org_page") + public String COEPALRESPOSITORYDesignerAwsOrg(UserContext me, String wsId, String fileId, String shapeId, String attrId, String ref) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.getAwsOrgPortal(wsId, fileId, shapeId, attrId, ref); + } + + /** + * 获取aws平台树结构 + * @param me + * @param pid + * @param uuid + * @param type + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_SHAPES_AWS_ORG_TREE_NODE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_aws_org_tree_node_query") + public String COEPALRESPOSITORYDesignerAwsOrgTreeNode(UserContext me, String pid, String uuid, String type, String scope, boolean multiple) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.getAwsOrgTreeData(pid, uuid, type, scope, multiple); + // return web.getPermAwsOrgTreeData(pid, uuid, type, scope, multiple); + } + + /** + * 获取子节点 + * @param me + * @param uuid + * @param type + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_SHAPES_AWS_ORG_TREE_NODE_CHILD_DATE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_aws_org_tree_node_child_query") + public String COEPALRESPOSITORYDesignerAwsOrgTreeNodeChildData(UserContext me, String uuid, String type) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.getAwsOrgTreeNodeChildData(uuid, type); + } + + /** + * 模糊查询 + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_SHAPES_AWS_ORG_TREE_QUERY") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_aws_org_tree_query") + public String COEPALRESPOSITORYDesignerAwsOrgTreeQuery(UserContext me, String autoContent, String wsId, String ref) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.queryAwsOrgTree(autoContent, wsId, ref); + } + + /** + * 保存aws平台组织关联关系 + * @param me + * @param relationAwsOrg + * @param shapeId + * @param fileId + * @param shapeGroupId + * @param attrId + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_AWS_ORG_RELEVANCE_SAVE") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_aws_org_relevance_save") + public String COEPALRESPOSITORYDesignerAwsOrgRelevanceSave(UserContext me, String relationAwsOrg, String shapeId, String fileId, String shapeGroupId, String attrId, String shapeText) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.saveAwsOrgRelevance(relationAwsOrg, shapeId, fileId, shapeGroupId, attrId, shapeText); + } + + /** + * 查询aws平台组织名称 + * @param me + * @param fileId + * @param shapeId + * @return + */ + // @Mapping("COE_PAL_PL_RESPOSITORY_DESIGNER_AWS_ORG_RELEVANCE_NAME") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_aws_org_relevance_name_query") + public String COEPALRESPOSITORYDesignerAwsOrgRelevanceName(UserContext me, String fileId, String shapeId, String shapeName, String shapeCategory) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(me); + return web.getAwsOrgRelevanceName(fileId, shapeId, shapeName, shapeCategory); + } + + /** + * 报告生成器 + * raci、岗位手册关联awsorg相关 + * @param me + * @param wsid + * @param teamId + * @param methodType + * @param targetMethodType + * @return + */ + // @Mapping("COE_PAL_OUTPUTREPORT_PAL_AWS_ORG_PAGE") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_pal_aws_org_page") + public String COEPALOutputreportAwsOrgPage(UserContext me, String wsid, String teamId, String methodType, String targetMethodType, String type) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + return outPutReport.getOutputreportAwsOrgPage(wsid, teamId, methodType, targetMethodType, type); + } + + /** + * 报告生成器 + * raci树结构(aws org) + * @param me + * @param wsid + * @param teamId + * @param methodType + * @return + */ + // @Mapping("COE_PAL_OUTPUTREPORT_PAL_AWS_ORG_PAGE_TREE_DATA") + @Mapping("com.actionsoft.apps.coe.pal_outputreport_pal_aws_org_tree_data_query") + public String COEPALOutputreportAwsOrgTreeData(UserContext me, String wsid, String teamId, String methodType, String type) { + OutPutReportWeb outPutReport = new OutPutReportWeb(me); + return outPutReport.getOutputreportAwsOrgTreeData(wsid, teamId, methodType, type); + } + + /** + * 删除流程中的节点时记录日志 + * 查看designer.extend.core.js文件 + * @param me + * @param uuid + * @param delnode + * @param delnum + * @return + */ + // @Mapping("COE_PAL_REPOSITORY_DESIGNER_SHAPE_DELETE_LOG_RECORD_NOOP") + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_shape_log_record_noop_delete") + public String COEPALRepositoryDesignerDeleteLog(UserContext me, String uuid, String delnode, String delnum) { + CoeProcessLevelWeb processWeb = new CoeProcessLevelWeb(me); + return processWeb.COEPALRepositoryDesignerDeleteLog(uuid, delnode, delnum); + } + + //======******======******====== COE 和 CONSOLE 互调的命令 begin ======******======******======// + /** + * 调用平台流程属性形状属性 + * @param me + * @param params + * @return + */ + // @Mapping("COE_M_PROCESS_DESIGNER_PROPERTIES_PAGE") + @Mapping("com.actionsoft.apps.coe.pal_m_process_designer_properties_page") + public String processDesignerPropertiesPage(UserContext me, RequestParams params) { + ProcessBPMNDesignerController controller = new ProcessBPMNDesignerController(); + try { + // PAL调用平台,重新创建session + String sid = new SessionImpl().registerSession(LoginConst.SYSTEM_ADMIN_CONSOLE, me.getUID(), me.getClientIP(), me.getLanguage(), me.getDeviceType(), false, null).getSessionId(); + return controller.getPropertiesPage(UserContext.fromSessionId(sid), params); + } catch (Exception e) { + return AlertWindow.getErrorMessagePage("发生错误", e.getMessage()); + } + } + + /** + * 平台与PAL是否存在共享状态 + * @param me + * @param processDefId + * @return + */ + // @Mapping("COE_PAL_PROCESS_DESIGNER_MANAGE_FACTORY_JUDGECORRELATE") + @Mapping("com.actionsoft.apps.coe.pal_process_designer_manage_factory_judge_correlate") + public String manageFactorJudgeCorrelateBpms(UserContext me, String processDefId) { + CoeDesignerWeb web = new CoeDesignerWeb(me); + return web.manageFactorJudgeCorrelateBpms(processDefId); + } + + //======******======******====== COE 和 CONSOLE 互调的命令 begin ======******======******======// + + /** + * 新建、更新资产库查询数据 + * @param me + * @param wsId 资产库id,可为空 + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_ws_update_data_query") + public String getUpdateWorkspaceDataById(UserContext me, String wsId) { + CoeWorkSpaceWeb web = new CoeWorkSpaceWeb(me); + return web.getUpdateWorkspaceDataById(wsId); + } + + /** + * 更新/保存资产库 + * @param me + * @param wsId 为空则新建,不为空则更新 + * @param name 名称 + * @param desc 描述 + * @param type 类型 + * @param admin 管理员 + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_ws_update_save") + public String saveWorkspace(UserContext me, String wsId, String name, String desc, String type, String admin) { + CoeWorkSpaceWeb web = new CoeWorkSpaceWeb(me); + return web.saveWorkspace(wsId, name, desc, Integer.parseInt(type), admin); + } + + /** + * 管理中心 获取管理中心App + * @param me + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_app_data") + public String getPalPlManageApp(UserContext me) { + PalManageWeb fileWeb = new PalManageWeb(me); + return fileWeb.getPalPlManageApp(); + } + + /** + * 获取资产库管理数据 + * @param me + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_ws_manage_data") + public String getPalPlWsManageData(UserContext me) { + CoeWorkSpaceWeb we = new CoeWorkSpaceWeb(me); + return we.getCoeWorkSpaceManageData(); + } + + @Mapping("com.actionsoft.apps.coe.pal_ws_backup_data_query") + public String getPalPlWsBackupData(UserContext me, String wsId) { + CoEPALBackupWeb web = new CoEPALBackupWeb(me); + return web.getPalPlWsBackupData(wsId); + } + + /** + * 加载流程树 + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_tree_data") + public String getPalProcesslevelTreeData(UserContext me, String wsId, String teamId, String pid) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.getPalProcesslevelTreeData(wsId, teamId, pid); + } + + /** + * 查询新建文件类型 + * @param me + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_create_method_list") + public String getPalProcessLevelCreateMethodList(UserContext me, String category, String methodId) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.getPalProcessLevelCreateMethodList(category, methodId); + } + + /** + * 保存/修改新建文件夹、层级 + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_folder_create_save") + public String saveCreatePalProcessLevelFolder(UserContext me, String wsId, String teamId, String method, String id, String parentId, String name, String desc) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.saveCreatePalProcessLevelFolder(wsId, teamId, method, id, parentId, name, desc); + } + + /** + * 创建空白模型 + * @param me + * @param wsId + * @param teamId + * @param category + * @param method + * @param parentId + * @param container 模板 + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_repository_create_save") + public String saveCreatePalProcessLevelRepository(UserContext me, String wsId, String teamId, String category, String method, String parentId, String container,Integer securityLevel) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.saveCreatePalProcessLevelRepository(wsId, teamId, category, method, parentId, container,securityLevel); + } + + /** + * 获取最近编辑的文件和收藏的文件 + * @param me + * @param wsId + * @param teamId + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_recent_and_favorite_data_query") + public String getRecentAndFavoriteRepository(UserContext me, String wsId, String teamId) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.getRecentAndFavoriteRepository(wsId, teamId); + } + + /** + * 收藏文件模型 + * @param me + * @param wsId + * @param teamId + * @param versionId + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_favorite_save") + public String savePalProcessLevelFavoriteData(UserContext me, String wsId, String teamId, String versionId) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.savePalProcessLevelFavoriteData(wsId, teamId, versionId); + } + + /** + * 取消收藏 + * @param me + * @param wsId + * @param teamId + * @param versionId + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_favorite_cancel") + public String cancelPalProcessLevelFavorite(UserContext me, String wsId, String teamId, String versionId) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.cancelPalProcessLevelFavorite(wsId, teamId, versionId); + } + + /** + * 查询子文件 + * @param me + * @param wsId + * @param teamId + * @param id + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_repository_child_data_query") + public String getPalProcessLevelRepositoryChildData(UserContext me, String wsId, String teamId, String id) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.getPalProcessLevelRepositoryChildData(wsId, teamId, id); + } + + /** + * Repository 树形子列表元素orderIndex调整 + * 不允许跨级排序 + * @param me + * @param wsId 所属资产库ID + * @param currentId 待调整位置uuid + * @param originId 插入位置的uuid + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_repository_order_index_update") + public String updatePalProcessLevelRepositoryOrderIndex(UserContext me,String wsId,String currentId,String originId){ + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.updatePalProcessLevelRepositoryOrderIndex(wsId, currentId, originId); + } + + + /** + * 获取模型文件详情 + * @param me + * @param wsId + * @param teamId + * @param id + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_repository_detail_data_query") + public String getPalProcessLevelRepositoryDetailData(UserContext me, String wsId, String teamId, String id) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.getPalProcessLevelRepositoryDetailData(wsId, teamId, id); + } + + /** + * 批量移动文件 + * @param uc + * @param sourceData + * @param targetData + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_move_save") + public String movePalProcessLevelRepository(UserContext uc, String sourceData, String targetData) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(uc); + return web.movePalProcessLevelRepository(sourceData, targetData); + } + + /** + * 复制文件 + * @param uc + * @param wsId + * @param teamId + * @param sourceIds + * @param targetId + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_copy_save") + public String copyPalProcessLevelRepository(UserContext uc, String wsId, String teamId, String sourceIds, String targetId) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(uc); + return web.copyPalProcessLevelRepository(wsId, teamId, sourceIds, targetId); + } + + /** + * 删除 + * @param uc + * @param wsId + * @param teamId + * @param repositoryIds + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_remove") + public String removePalRepositoryLevel(UserContext uc, String wsId, String teamId, String repositoryIds) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(uc); + return web.removePalRepositoryLevel(wsId, teamId, repositoryIds); + } + + /** + * 设计器-查询版本数据 + * @param uc + * @param wsId + * @param teamId + * @param id + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager_data") + public String getPalProcessLevelVersionData(UserContext uc, String wsId, String teamId, String id) { + CoeDesignerWeb web = new CoeDesignerWeb(uc); + return web.getPalProcessLevelVersionData(wsId, teamId, id); + } + + /** + * 设计器-创建新版本 + * @param uc + * @param wsId + * @param teamId + * @param id + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager_create") + public String createPalDesignerNewVersion(UserContext uc, String wsId, String teamId, String id,@Param(defaultValue = "true") boolean isLargeIteration) { + CoeDesignerWeb web = new CoeDesignerWeb(uc); + return web.createPalDesignerNewVersion(wsId, teamId, id,isLargeIteration); + } + + /** + * 设计器-删除某版本文件(放入回收站) + * @param uc + * @param wsId + * @param teamId + * @param id + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager_delete") + public String deletePalDesignerVersion(UserContext uc, String wsId, String teamId, String id) { + CoeDesignerWeb web = new CoeDesignerWeb(uc); + return web.deletePalDesignerVersion(wsId, teamId, id); + } + + /** + * 设计器-切换版本状态为使用中 + * @param uc + * @param wsId + * @param teamId + * @param id + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager_use") + public String changePalDesignerVersionUse(UserContext uc, String wsId, String teamId, String id) { + CoeDesignerWeb web = new CoeDesignerWeb(uc); + return web.changePalDesignerVersionUse(wsId, teamId, id); + } + + /** + * 查询文件属性 + * @param uc + * @param wsId + * @param teamId + * @param id + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_processlevel_property_data_query") + public String getPalProcessLevelPropertyData(UserContext uc, String wsId, String teamId, String id) { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(uc); + return web.getPalProcessLevelPropertyData(wsId, teamId, id); + } + + //管理->形状定义->形状配置->查询的dialog + // @Mapping("COE_PAL_PL_MANAGE_SHAPE_CONFIG_QUERY_DIALOG") + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_shape_config_dialog_page") + public String coePalPlManageShapeConfigQueryDialog(UserContext me, String wsId, String type, String shapeId, String category, String defaultCategory, String commonShapeConfig, String specialShapeConfig, String attributesJsonArray, String relationData, String shapeKey) { + PalManageWeb fileWeb = new PalManageWeb(me); + return fileWeb.openCoePalPlManageShapeConfigQueryDialog(wsId, type, shapeId, category, defaultCategory, commonShapeConfig, specialShapeConfig, attributesJsonArray, relationData, shapeKey); + } + + //管理->形状定义->形状配置->更新的dialog + // @Mapping("COE_PAL_PL_MANAGE_SHAPE_CONFIG_UPDATE_DIALOG") + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_shape_config_update_dialog_page") + public String coePalPlManageShapeConfigUpdateDialog(UserContext me, String wsId, String shapeId, String category, String defaultCategory, String horVerArray, String type, String horizontal, String verity, String showType, String textContent, String key, String attrName, String isShowAttrName, String iconContent) { + PalManageWeb fileWeb = new PalManageWeb(me); + return fileWeb.openCoePalPlManageShapeConfigUpdateDialog(wsId, shapeId, category, defaultCategory, horVerArray, type, horizontal, verity, showType, textContent, key, attrName, isShowAttrName, iconContent); + } + + //管理->形状定义->形状配置->获取更新dialog中的下拉框的值 + // @Mapping("COE_PAL_PL_MANAGE_SHAPE_CONFIG_UPDATE_SELECT_CONTENT") + @Mapping("com.actionsoft.apps.coe.pal_pl_manage_shape_config_update_select_content") + public String coePalPlManageShapeConfigUpdateSelectContent(UserContext me) { + PalManageWeb fileWeb = new PalManageWeb(me); + return fileWeb.openCoePalPlManageShapeConfigUpdateSelectContent(); + } + + // 流程的数据属性 + // @Mapping("COE_PAL_PL_MORE_ATTRIBUTE") + @Mapping("com.actionsoft.apps.coe.pal_pl_more_attribute") + public String COEPALPLMoreAttribute(UserContext me, String type, String wsId, String uuid, String processDefId, String shapeName, String category, String defaultCategory) { + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.getMoreAttritbute(me, type, wsId, uuid, type, shapeName, category, defaultCategory); + } + + /** + * 单个更新流程文件三员管理密级 + * @param me + * @param uuid 文件id + * @param securityLevel + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_file_security_level_update") + public String updatePalProcessFileSecurityLevel(UserContext me,String uuid,Integer securityLevel){ + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.updateRepositorySecurityLevel(uuid,securityLevel); + } + + /** + * 批量更新流程文件三员管理密级 + * @param me + * @param fileList + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_file_security_level_batch_update") + public String updatePalProcessFileSecurityLevel(UserContext me,String fileList){ + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.batchUpdateRepositorySecurityLevel(fileList); + } + + /** + * 获取流程文件未标密数量 + * @param me + * @param wsId + * @param teamId + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_file_unmark_num_query") + public String getPalProcessFileUnmarkNum(UserContext me,String wsId,String teamId){ + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.getUnmarkFileNum(wsId,teamId); + } + + /** + * 校验用户是否有访问文件的权限 + * @param me + * @param uuid + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_file_permission_query") + public String checkPalProcessFilePermission(UserContext me,String uuid){ + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.checkFilePemission(uuid).toString(); + } + + /** + * 批量校验文件的密级权限 + * @param me + * @param uuids + * @param isSub 是否进行下属列表密级权限校验 + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_pl_file_permission_batch_query") + public String checkPalProcessFilePermissionBathch(UserContext me,String uuids,boolean isSub){ + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.checkFilePermissionBatch(uuids,isSub).toString(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoEPALRecycleController.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoEPALRecycleController.java new file mode 100644 index 00000000..03d14e96 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoEPALRecycleController.java @@ -0,0 +1,68 @@ +package com.actionsoft.apps.coe.pal; + +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.bind.annotation.Controller; +import com.actionsoft.bpms.server.bind.annotation.Mapping; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessRecycleWeb; + +@Controller +public class CoEPALRecycleController { + + /** + * 查询回收站数据总条数 + * @param me + * @param wsId + * @param teamId + * @param searchInput + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_recycle_header_query") + public String CoePALRecycleHeader(UserContext me, String wsId, String teamId, String searchInput) { + CoeProcessRecycleWeb web = new CoeProcessRecycleWeb(me); + return web.queryDataTotalCount(wsId, teamId, searchInput); + } + + /** + * 查询回收站数据 + * @param me + * @param currentPage 当前页数 + * @param pageStep 每页条数 + * @param wsId 资产库Id + * @param teamId 小组Id + * @param searchInput 查询条件 + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_recycle_data_query") + public String CoePALRecycleData(UserContext me, int currentPage, int pageStep, String wsId, String teamId, String searchInput) { + CoeProcessRecycleWeb web = new CoeProcessRecycleWeb(me); + return web.getRecycleData(currentPage, pageStep, wsId, teamId, searchInput); + } + + /** + * 删除回收站 + * @param me + * @param removeIds + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_recycle_delete") + public String CoePALRecycleDelete(UserContext me, String removeIds) { + CoeProcessRecycleWeb web = new CoeProcessRecycleWeb(me); + return web.deleteResource(removeIds); + } + + //清空回收站 + // @Mapping("COE_PAL_RECYCLE_DELETE_ALL") + @Mapping("com.actionsoft.apps.coe.pal_recycle_all_delete") + public String CoePALRecycleDeleteAll(UserContext me) { + CoeProcessRecycleWeb web = new CoeProcessRecycleWeb(me); + return web.deleteAllResource(); + } + + // 恢复回收站 + // @Mapping("COE_PAL_RECYCLE_RESTORE") + @Mapping("com.actionsoft.apps.coe.pal_recycle_restore") + public String CoePALRecycleRestore(UserContext me, String removeIds) { + CoeProcessRecycleWeb web = new CoeProcessRecycleWeb(me); + return web.restoreRecycleModel(removeIds); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoESocialController.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoESocialController.java new file mode 100644 index 00000000..241ff3f7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoESocialController.java @@ -0,0 +1,46 @@ +package com.actionsoft.apps.coe.pal; + +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.bind.annotation.Controller; +import com.actionsoft.bpms.server.bind.annotation.Mapping; +import com.actionsoft.apps.coe.pal.console.web.ConsoleWeb; +import com.actionsoft.apps.coe.pal.portal.web.NavigationWeb; + +import com.alibaba.fastjson.JSONObject; + +@Controller +public class CoESocialController { + + // 控制台 + // @Mapping("COE_CONSOLE") + @Mapping("com.actionsoft.apps.coe.pal_console") + public String coeConsole(UserContext me, String condition) { + ConsoleWeb web = new ConsoleWeb(me); + return web.getConsole(condition); + } + + // 控制台--系统参数 + // @Mapping("COE_CONSOLE_PARAMS") + @Mapping("com.actionsoft.apps.coe.pal_console_params") + public String coeConsoleParams(UserContext me, String condition) { + NavigationWeb web = new NavigationWeb(me); + return web.getNavMain(condition); + } + + // @Mapping("COE_CONSOLE_CHANNEL_EDIT") + @Mapping("com.actionsoft.apps.coe.pal_console_channel_edit") + public String coeConsoleChannelEdit(UserContext me, String channelUUID, String condition) { + NavigationWeb web = new NavigationWeb(me); + condition = condition == null || condition.trim().length() == 0 ? "{'coePortal':'default'}" : condition; + JSONObject json = JSONObject.parseObject(condition); + return web.editChannel(json, channelUUID); + } + + // @Mapping("COE_CONSOLE_NAV_SYSTEM") + @Mapping("com.actionsoft.apps.coe.pal_console_nav_system") + public String coeConsoleNavSystem(UserContext me, String condition) { + NavigationWeb web = new NavigationWeb(me); + return web.getNavChannel(condition); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoeComponentsController.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoeComponentsController.java new file mode 100644 index 00000000..5572b9cb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/CoeComponentsController.java @@ -0,0 +1,104 @@ +package com.actionsoft.apps.coe.pal; + +import com.actionsoft.apps.coe.pal.components.web.BPMOrgTreeWeb; +import com.actionsoft.apps.coe.pal.components.web.PALRepositoryTreeWeb; +import com.actionsoft.bpms.org.dao.User; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.bind.annotation.Controller; +import com.actionsoft.bpms.server.bind.annotation.Mapping; + +/** + * @Description vue组件 + * @Created by sunlh + * @Date 2020-09-03 + */ +@Controller +public class CoeComponentsController { + + /** + * pal模型文件树组件 + * @param uc + * @param wsId + * @param teamId + * @param pid + * @param categorys + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_repository_tree_component_subjson") + public String getPalRepositoryTreeData(UserContext uc, String wsId, String teamId, String pid, String categorys) { + PALRepositoryTreeWeb web = new PALRepositoryTreeWeb(uc); + return web.getPalRepositoryTreeData(wsId, teamId, pid, categorys); + } + + /** + * 查询流程树 + * @param uc + * @param wsId + * @param teamId + * @param rootId + * @param categorys + * @param name + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_repository_tree_component_search") + public String searchPalRepositoryTreeData(UserContext uc, String wsId, String teamId, String rootId, String categorys, String name) { + PALRepositoryTreeWeb web = new PALRepositoryTreeWeb(uc); + return web.searchPalRepositoryTreeData(wsId, teamId, rootId, categorys, name); + } + + /** + * 根据模型文件Id查询形状列表 + * @param uc + * @param id + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_repository_tree_component_shapejson") + public String getPalRepositoryShapeListById(UserContext uc, String id) { + PALRepositoryTreeWeb web = new PALRepositoryTreeWeb(uc); + return web.getShapeListById(id); + } + + /** + * 根据versionIds查询模型文件 + * @param uc + * @param versionIds + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_repository_tree_component_file_query") + public String getPalRepositoryDataByVersionIds(UserContext uc, String versionIds) { + PALRepositoryTreeWeb web = new PALRepositoryTreeWeb(uc); + return web.getPalRepositoryDataByVersionIds(versionIds); + } + + /** + * 根据文件和形状id获取相关信息 + * @param uc + * @param fileIds + * @param shapeIds + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_repository_tree_component_file_shape_query") + public String getPalRepositoryShapeDataByShapeIds(UserContext uc, String fileIds, String shapeIds) { + PALRepositoryTreeWeb web = new PALRepositoryTreeWeb(uc); + return web.getPalRepositoryShapeDataByShapeIds(fileIds, shapeIds); + } + + /********************BPM Org组件************************/ + /** + * 获取bpm组织架构子节点 + * @param uc + * @param addressType + * @param pid + * @param parentType + * @param highSecurityFilter 地址簿过滤三员用户类型 三员开启模式并且地址簿类型包含用户user时有效,系统管理员sysAdmin、安全保密员secAdmin、安全审计员auditor,逗号分割 + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_bpm_org_address_component_subjson") + public String getBpmOrgAddressTreeData(UserContext uc, String addressType, String pid, String parentType, String highSecurityFilter) { + BPMOrgTreeWeb web = new BPMOrgTreeWeb(uc); + return web.getBpmOrgAddressTreeData(addressType, pid, parentType, highSecurityFilter); + } + + /********************BPM Org组件 end************************/ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/TeamworkController.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/TeamworkController.java new file mode 100644 index 00000000..c1c62de4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/TeamworkController.java @@ -0,0 +1,142 @@ +package com.actionsoft.apps.coe.pal; + +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessLevelWeb; +import com.actionsoft.bpms.org.dao.User; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.bind.annotation.Controller; +import com.actionsoft.bpms.server.bind.annotation.Mapping; +import com.actionsoft.apps.coe.pal.pal.manage.publish.web.PublishManageWeb; +import com.actionsoft.apps.coe.pal.teamwork.web.TeamWorkManagerWeb; + +/** + * PAL小组Controller + */ +@Controller +public class TeamworkController { + + //流程发布->用户组列表 + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_list") + public String getPublishList(UserContext me) { + PublishManageWeb web = new PublishManageWeb(me); + return web.getPublishList(); + } + + // 用户组新建/更新时获取必要数据 + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_create_data_query") + public String getPublishGroupCreateData(UserContext uc, String id) { + PublishManageWeb web = new PublishManageWeb(uc); + return web.getPublishGroupCreateData(id); + } + + // 查询bpm平台角色 + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_role_tree_data_query") + public String getPublishGroupRoleTreeData(UserContext uc, String pid) { + PublishManageWeb web = new PublishManageWeb(uc); + return web.getPublishGroupRoleTreeData(pid); + } + + // 获取所有子节点的verisonId + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_repository_data_query") + public String getPublishGroupAllRepositoryByPid(UserContext uc, String wsId, String pid) { + PublishManageWeb web = new PublishManageWeb(uc); + return web.getPublishGroupAllRepositoryVersionIdByPid(wsId, pid); + } + + //流程发布->保存小组 + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_create_save") + public String savePublishGroup(UserContext me, String id, String wsId, String groupCode, String category, + String groupName, String groupDesc, String resourceIds, String roleIds) { + PublishManageWeb web = new PublishManageWeb(me); + return web.savePublishGroup(id, wsId, groupCode, category, groupName, groupDesc, resourceIds, roleIds); + } + + //流程发布->删除小组 + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_delete") + public String deletePublishGroup(UserContext me, String id) { + PublishManageWeb web = new PublishManageWeb(me); + return web.deletePublishGroup(id); + } + + // 门户设置-常用流程-查询数据 + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_common_list") + public String getPublishGroupCommonList(UserContext me) { + PublishManageWeb web = new PublishManageWeb(me); + return web.getPublishGroupCommonList(); + } + + // 门户设置-常用流程-新增-查询必要数据 + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_common_create_data_query") + public String getPublishGroupCommonCreateData(UserContext me) { + PublishManageWeb web = new PublishManageWeb(me); + return web.getCommonCreateData(); + } + + //门户设置-常用流程-常用流程保存 + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_common_create_save") + public String savePublishCommonCreate(UserContext me, String wsId, String resourceIds) { + PublishManageWeb web = new PublishManageWeb(me); + return web.savePublishCommonCreate(wsId,resourceIds); + } + + /** + * 门户设置-常用流程-变更保存 + * @param me + * @param resourceIds + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_common_update_save") + public String updatePublishCommonData(UserContext me, String resourceIds) { + PublishManageWeb web = new PublishManageWeb(me); + return web.updatePublishCommonData(resourceIds); + } + + /** + * 门户设置-常用流程-删除 + * @param uc + * @param ids + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_common_data_delete") + public String deletePublishGroupCommon(UserContext uc, String ids) { + PublishManageWeb web = new PublishManageWeb(uc); + return web.deletePublishGroupCommon(ids); + } + + /** + * 门户设置-主题风格数据查询 + * @param me + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_theme_data_query") + public String queryPublishGroupThemeData(UserContext me) { + PublishManageWeb web = new PublishManageWeb(me); + return web.queryPublishGroupThemeData(); + } + + /** + * 门户设置-主题风格数据保存 + * @param me + * @param type logo banner + * @param fileName + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_theme_data_save") + public String savePublishGroupThemeData(UserContext me, String type, String fileName) { + PublishManageWeb web = new PublishManageWeb(me); + return web.savePublishGroupThemeData(type, fileName); + } + + /** + * 门户设置-主题风格图片删除 + * @param me + * @param type + * @param fileName + * @return + */ + @Mapping("com.actionsoft.apps.coe.pal_publish_publishgroup_theme_data_remove") + public String removePublishGroupThemeData(UserContext me, String type, String fileName) { + PublishManageWeb web = new PublishManageWeb(me); + return web.removePublishGroupThemeData(type, fileName); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/AslpUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/AslpUtil.java new file mode 100644 index 00000000..0dda4738 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/AslpUtil.java @@ -0,0 +1,39 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; + +import java.util.List; +import java.util.Map; + +/** + * @Description 通用的aslp方法 + * @Created by sunlh + * @Date 2020-04-10 + */ +public class AslpUtil { + + /** + * 校验aslp参数是否为空 + * @param params + * @return + */ + public static ResponseObject isParamsEmpty(Map params) { + if (params == null) { + return ResponseObject.newErrResponse().err("不接受参数为空的调用!"); + } + return ResponseObject.newOkResponse(); + } + + /** + * 判断list是否为空 + * @param list + * @return + */ + public static boolean isEmpty(List list) { + return list == null || list.size() == 0; + } + + public static String errMsg() { + return "出现错误"; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/DiagramAPI/QueryFileElements.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/DiagramAPI/QueryFileElements.java new file mode 100644 index 00000000..f75a0e25 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/DiagramAPI/QueryFileElements.java @@ -0,0 +1,34 @@ +package com.actionsoft.apps.coe.pal.aslp.DiagramAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.output.OutputDataAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; + +import java.util.List; +import java.util.Map; + +/** + * @Description 获得流程文件中的节点列表(不包含linker元素) + * @Created by sunlh + * @Date 2020-06-19 + */ +public class QueryFileElements implements ASLP { + @Override + @Meta(parameter = {"name:'repositoryId',required:true,allowEmpty:false,desc:'模型文件ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("repositoryId")) { + return ResponseObject.newErrResponse().err("repositoryId参数不允许为空!"); + } + String repositoryId = params.get("repositoryId").toString(); + List> result = OutputDataAPIManager.getFileElements(repositoryId); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", result); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/DiagramAPI/QueryRelationInfoByRelationShapeId.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/DiagramAPI/QueryRelationInfoByRelationShapeId.java new file mode 100644 index 00000000..ab4fabea --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/DiagramAPI/QueryRelationInfoByRelationShapeId.java @@ -0,0 +1,49 @@ +package com.actionsoft.apps.coe.pal.aslp.DiagramAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.output.OutputDataAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description 获得文件中某个图形作为被动关联的关联信息(图形A的属性信息为图形B,则A为主动关联,B为被动关联) + * @Created by sunlh + * @Date 2020-06-19 + */ +public class QueryRelationInfoByRelationShapeId implements ASLP { + @Override + @Meta(parameter = {"name:'relationFileId',required:true,allowEmpty:false,desc:'被动关联文件ID'","name:'relationShapeId',required:true,allowEmpty:false,desc:'被动关联图形Id'","name:'fileIds',required:false,allowEmpty:true,desc:'主动关联文件Id(字段为空,获取所有被动关联信息;多个主动关联文件,用逗号隔开)'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("relationFileId")) { + return ResponseObject.newErrResponse().err("relationFileId参数不允许为空!"); + } + String relationFileId = params.get("relationFileId").toString(); + if (UtilString.isEmpty(relationFileId)) { + return ResponseObject.newErrResponse().err("relationFileId参数不允许为空!"); + } + + if (!params.containsKey("relationShapeId")) { + return ResponseObject.newErrResponse().err("relationShapeId参数不允许为空!"); + } + String relationShapeId = params.get("relationShapeId").toString(); + if (UtilString.isEmpty(relationShapeId)) { + return ResponseObject.newErrResponse().err("relationShapeId参数不允许为空!"); + } + String fileIds = params.get("fileIds").toString(); + List list = OutputDataAPIManager.getRelationInfoByRelationShapeId(relationFileId, relationShapeId, fileIds); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/DiagramAPI/QueryRelationInfoByShapeId.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/DiagramAPI/QueryRelationInfoByShapeId.java new file mode 100644 index 00000000..d3521c62 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/DiagramAPI/QueryRelationInfoByShapeId.java @@ -0,0 +1,49 @@ +package com.actionsoft.apps.coe.pal.aslp.DiagramAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.output.OutputDataAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description 获得文件中某个图形作为主动关联的关联信息(图形A的属性信息为图形B,则A为主动关联,B为被动关联) + * @Created by sunlh + * @Date 2020-06-19 + */ +public class QueryRelationInfoByShapeId implements ASLP { + @Override + @Meta(parameter = {"name:'fileId',required:true,allowEmpty:false,desc:'文件ID'","name:'shapeId',required:true,allowEmpty:false,desc:'主动关联图形Id'","name:'relationFileIds',required:false,allowEmpty:true,desc:'被动关联文件ID(该字段为空,获取所有主动关联信息;多个被动关联文件,用逗号隔开'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("fileId")) { + return ResponseObject.newErrResponse().err("fileId参数不允许为空!"); + } + String fileId = params.get("fileId").toString(); + if (UtilString.isEmpty(fileId)) { + return ResponseObject.newErrResponse().err("fileId参数不允许为空!"); + } + + if (!params.containsKey("shapeId")) { + return ResponseObject.newErrResponse().err("shapeId参数不允许为空!"); + } + String shapeId = params.get("shapeId").toString(); + if (UtilString.isEmpty(shapeId)) { + return ResponseObject.newErrResponse().err("shapeId参数不允许为空!"); + } + String relationFileIds = params.get("relationFileIds").toString(); + List list = OutputDataAPIManager.getRelationInfoByShapeId(fileId, shapeId, relationFileIds); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/DiagramAPI/QueryShapeList.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/DiagramAPI/QueryShapeList.java new file mode 100644 index 00000000..3f317037 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/DiagramAPI/QueryShapeList.java @@ -0,0 +1,39 @@ +package com.actionsoft.apps.coe.pal.aslp.DiagramAPI; + +import com.actionsoft.apps.coe.pal.pal.repository.designer.CoeDesignerShapeAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description 查询所有的图形的集合 + * @Created by sunlh + * @Date 2020-06-19 + */ +public class QueryShapeList implements ASLP { + @Override + @Meta(parameter = {"name:'shapeId',required:false,allowEmpty:true,desc:'形状ID'","name:'shapeName',required:false,allowEmpty:true,desc:'形状名称'","name:'shapeType',required:false,allowEmpty:true,desc:'形状类型'","name:'shapeDesc',required:false,allowEmpty:true,desc:'形状描述'","name:'fileId',required:false,allowEmpty:true,desc:'模型Id'"}) + public ResponseObject call(Map params) { + Map map = new HashMap<>(); + if (params != null) { + for (Map.Entry entry : params.entrySet()) { + String key = entry.getKey(); + if (("shapeId".equals(key) || "shapeName".equals(key) || "shapeType".equals(key) || "shapeDesc".equals(key) || "fileId".equals(key)) + && !UtilString.isEmpty(entry.getValue())) { + map.put(entry.getKey(), entry.getValue().toString()); + } + } + } + List list = CoeDesignerShapeAPIManager.getInstance().getShapeList(map); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/MethodAPI/QueryMethodById.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/MethodAPI/QueryMethodById.java new file mode 100644 index 00000000..34d2690c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/MethodAPI/QueryMethodById.java @@ -0,0 +1,39 @@ +package com.actionsoft.apps.coe.pal.aslp.MethodAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.method.PALMethodManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +/** + * @Description 根据methodId获取PALMethodModel对象 + * @Created by sunlh + * @Date 2020-06-19 + */ +public class QueryMethodById implements ASLP { + @Override + @Meta(parameter = {"name:'methodId',required:true,allowEmpty:false,desc:'资产库大类下的小类,如process.bpmn2、org.normal等'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("methodId")) { + return ResponseObject.newErrResponse().err("methodId参数不允许为空!"); + } + String methodId = params.get("methodId").toString(); + if (UtilString.isEmpty(methodId)) { + return ResponseObject.newErrResponse().err("methodId参数不允许为空!"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + Object result = JSON.toJSON(PALMethodManager.getInstance().getPALMethodModelById(methodId)); + ro.put("result", result == null ? new JSONObject() : result); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/MethodAPI/QueryMethodListByMethod.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/MethodAPI/QueryMethodListByMethod.java new file mode 100644 index 00000000..82e2ea60 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/MethodAPI/QueryMethodListByMethod.java @@ -0,0 +1,41 @@ +package com.actionsoft.apps.coe.pal.aslp.MethodAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.method.PALMethodManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; + +import java.util.Map; + +/** + * @Description 获取建模方法定义集合 + * @Created by sunlh + * @Date 2020-06-19 + */ +public class QueryMethodListByMethod implements ASLP { + @Override + @Meta(parameter = {"name:'method',required:false,allowEmpty:true,desc:'资产库大类,如process、org等,为空则获取所有'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + String method = null; + if (params.containsKey("method") && !UtilString.isEmpty(params.get("method"))) { + String tempId = params.get("method").toString(); + method = tempId; + } + ResponseObject ro = ResponseObject.newOkResponse(); + if (!UtilString.isEmpty(method)) { + Object result = JSON.toJSON(PALMethodManager.getInstance().getPALMethodModelListByMethod(method)); + ro.put("result", result == null ? new JSONArray() : result); + } else { + ro.put("result", PALMethodManager.getInstance().list()); + } + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/OpenRepositoryPortalHtml.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/OpenRepositoryPortalHtml.java new file mode 100644 index 00000000..2c65338b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/OpenRepositoryPortalHtml.java @@ -0,0 +1,51 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.UtilString; + +import java.util.Map; + +/** + * @Description 打开模型页面 + * @Created by sunlh + * @Date 2020-04-23 + */ +public class OpenRepositoryPortalHtml implements ASLP { + @Override + @Meta(parameter = {"name:'sid',required:true,allowEmpty:false,desc:'sessionId'","name:'palId',required:true,allowEmpty:false,desc:'PAL端模型ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("sid")) { + return ResponseObject.newErrResponse().err("sid参数不允许为空!"); + } + String sid = params.get("sid").toString(); + if (UtilString.isEmpty(sid)) { + return ResponseObject.newErrResponse().err("sid参数不允许为空!"); + } + UserContext uc = UserContext.fromSessionId(sid); + if (uc == null) { + return ResponseObject.newErrResponse().err("sid参数无效!"); + } + if (!params.containsKey("palId")) { + return ResponseObject.newErrResponse().err("palId参数不允许为空!"); + } + String palId = params.get("palId").toString(); + if (UtilString.isEmpty(palId)) { + return ResponseObject.newErrResponse().err("palId参数不允许为空!"); + } + if (PALRepositoryCache.getCache().get(palId) == null) { + return ResponseObject.newErrResponse("模型不存在"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data", PALRepositoryQueryAPIManager.getInstance().getPublishPortalHtml(uc, palId, null, false)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingPALMethodPermissionByTeam.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingPALMethodPermissionByTeam.java new file mode 100644 index 00000000..d216095d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingPALMethodPermissionByTeam.java @@ -0,0 +1,51 @@ +package com.actionsoft.apps.coe.pal.aslp.PermAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.teamwork.TeamPermAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; + +import java.util.Map; + +/** + * @Description 该小组是否有访问指定资产库某类建模方法下资源的权限,如是否可以访问'组织'类文件 + * @Created by sunlh + * @Date 2020-06-19 + */ +public class HavingPALMethodPermissionByTeam implements ASLP { + @Override + @Meta(parameter = {"name:'teamId',required:true,allowEmpty:false,desc:'小组ID'","name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'methodCategory',required:true,allowEmpty:false,desc:'建模方法大类,如process'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("teamId")) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + String teamId = params.get("teamId").toString(); + if (UtilString.isEmpty(teamId)) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("methodCategory")) { + return ResponseObject.newErrResponse().err("methodCategory参数不允许为空!"); + } + String methodCategory = params.get("methodCategory").toString(); + if (UtilString.isEmpty(methodCategory)) { + return ResponseObject.newErrResponse().err("methodCategory参数不允许为空!"); + } + boolean result = TeamPermAPIManager.getInstance().havingPALMethodPermission(teamId, wsId, methodCategory); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", result); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingPALRepositoryPermissionByTeam.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingPALRepositoryPermissionByTeam.java new file mode 100644 index 00000000..c3e0c30f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingPALRepositoryPermissionByTeam.java @@ -0,0 +1,51 @@ +package com.actionsoft.apps.coe.pal.aslp.PermAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.teamwork.TeamPermAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; + +import java.util.Map; + +/** + * @Description 该小组是否有访问资产库指定文件的访问权限 + * @Created by sunlh + * @Date 2020-06-19 + */ +public class HavingPALRepositoryPermissionByTeam implements ASLP { + @Override + @Meta(parameter = {"name:'teamId',required:true,allowEmpty:false,desc:'小组ID'","name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'repositoryId',required:true,allowEmpty:false,desc:'资产库文件版本ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("teamId")) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + String teamId = params.get("teamId").toString(); + if (UtilString.isEmpty(teamId)) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("repositoryId")) { + return ResponseObject.newErrResponse().err("repositoryId参数不允许为空!"); + } + String repositoryId = params.get("repositoryId").toString(); + if (UtilString.isEmpty(repositoryId)) { + return ResponseObject.newErrResponse().err("repositoryId参数不允许为空!"); + } + boolean result = TeamPermAPIManager.getInstance().havingPALRepositoryPermission(teamId, wsId, repositoryId); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", result); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingReadPALRepositoryPermissionByGroupCode.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingReadPALRepositoryPermissionByGroupCode.java new file mode 100644 index 00000000..9ddc8e75 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingReadPALRepositoryPermissionByGroupCode.java @@ -0,0 +1,53 @@ +package com.actionsoft.apps.coe.pal.aslp.PermAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.manage.publish.PublishAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description 指定的用户组是否有浏览某资产库文件的权限。适用于未开启与AWS平台角色集成,通过给定用户组代码确定浏览权限 + * @Created by sunlh + * @Date 2020-06-19 + */ +public class HavingReadPALRepositoryPermissionByGroupCode implements ASLP { + @Override + @Meta(parameter = {"name:'groupCode',required:true,allowEmpty:false,desc:'用户组代码'","name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'repositoryId',required:true,allowEmpty:false,desc:'资产库文件版本Id'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("groupCode")) { + return ResponseObject.newErrResponse().err("groupCode参数不允许为空!"); + } + String groupCode = params.get("groupCode").toString(); + if (UtilString.isEmpty(groupCode)) { + return ResponseObject.newErrResponse().err("groupCode参数不允许为空!"); + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("repositoryId")) { + return ResponseObject.newErrResponse().err("repositoryId参数不允许为空!"); + } + String repositoryId = params.get("repositoryId").toString(); + if (UtilString.isEmpty(repositoryId)) { + return ResponseObject.newErrResponse().err("repositoryId参数不允许为空!"); + } + boolean result = PublishAPIManager.getInstance().havingReadPALRepositoryPermissionByGroupCode(groupCode, wsId, repositoryId); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", result); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingReadPALRepositoryPermissionByGroupCodeList.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingReadPALRepositoryPermissionByGroupCodeList.java new file mode 100644 index 00000000..12bb25d1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingReadPALRepositoryPermissionByGroupCodeList.java @@ -0,0 +1,63 @@ +package com.actionsoft.apps.coe.pal.aslp.PermAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.manage.publish.PublishAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description 指定的用户组集合是否有浏览某资产库文件的权限。适用于未开启与AWS平台角色集成,通过给定用户组代码确定浏览权限 + * @Created by sunlh + * @Date 2020-06-19 + */ +public class HavingReadPALRepositoryPermissionByGroupCodeList implements ASLP { + @Override + @Meta(parameter = {"name:'groupCodes',required:true,allowEmpty:false,desc:'用户组代码的集合,多个则英文逗号分隔'","name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'repositoryId',required:true,allowEmpty:false,desc:'资产库文件版本Id'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("groupCodes")) { + return ResponseObject.newErrResponse().err("groupCodes参数不允许为空!"); + } + String groupCodes = params.get("groupCodes").toString(); + if (UtilString.isEmpty(groupCodes)) { + return ResponseObject.newErrResponse().err("groupCodes参数不允许为空!"); + } + String [] ids = groupCodes.split(","); + List list = new ArrayList<>(); + for (String id : ids) { + if (!UtilString.isEmpty(id)) { + list.add(id); + } + } + if (list.size() == 0) { + return ResponseObject.newErrResponse().err("groupCodes参数不允许为空!"); + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("repositoryId")) { + return ResponseObject.newErrResponse().err("repositoryId参数不允许为空!"); + } + String repositoryId = params.get("repositoryId").toString(); + if (UtilString.isEmpty(repositoryId)) { + return ResponseObject.newErrResponse().err("repositoryId参数不允许为空!"); + } + boolean result = PublishAPIManager.getInstance().havingReadPALRepositoryPermissionByGroupCode(list, wsId, repositoryId); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", result); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingReadPALRepositoryPermissionByRoleId.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingReadPALRepositoryPermissionByRoleId.java new file mode 100644 index 00000000..7e518cc3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingReadPALRepositoryPermissionByRoleId.java @@ -0,0 +1,50 @@ +package com.actionsoft.apps.coe.pal.aslp.PermAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.manage.publish.PublishAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; + +import java.util.Map; + +/** + * @Description 指定的AWS角色是否有浏览某资产库文件的权限。适用于开启与AWS平台角色集成,直接判断AWS某角色是否具备浏览权限 + * @Created by sunlh + * @Date 2020-04-16 + */ +public class HavingReadPALRepositoryPermissionByRoleId implements ASLP { + @Override + @Meta(parameter = {"name:'roleId',required:true,allowEmpty:false,desc:'角色ID'","name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'palId',required:true,allowEmpty:false,desc:'PAL模型ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("roleId")) { + return ResponseObject.newErrResponse().err("roleId参数不允许为空!"); + } + String roleId = params.get("roleId").toString(); + if (UtilString.isEmpty(roleId)) { + return ResponseObject.newErrResponse().err("roleId参数不允许为空!"); + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("palId")) { + return ResponseObject.newErrResponse().err("palId参数不允许为空!"); + } + String palId = params.get("palId").toString(); + if (UtilString.isEmpty(palId)) { + return ResponseObject.newErrResponse().err("palId参数不允许为空!"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", PublishAPIManager.getInstance().havingReadPALRepositoryPermissionByRoleId(roleId, wsId, palId)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingReadPALRepositoryPermissionByUserId.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingReadPALRepositoryPermissionByUserId.java new file mode 100644 index 00000000..188150cf --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/HavingReadPALRepositoryPermissionByUserId.java @@ -0,0 +1,56 @@ +package com.actionsoft.apps.coe.pal.aslp.PermAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.manage.publish.PublishAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.org.cache.UserCache; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.util.UtilString; + +import java.util.Map; + +/** + * @Description 指定的AWS账户是否有浏览某资产库文件的权限。适用于开启与AWS平台角色集成,直接判断AWS某角色是否具备浏览权限 + * @Created by sunlh + * @Date 2020-04-16 + */ +public class HavingReadPALRepositoryPermissionByUserId implements ASLP { + @Override + @Meta(parameter = {"name:'userId',required:true,allowEmpty:false,desc:'用户ID'","name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'palId',required:true,allowEmpty:false,desc:'PAL模型ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("userId")) { + return ResponseObject.newErrResponse().err("userId参数不允许为空!"); + } + String userId = params.get("userId").toString(); + if (UtilString.isEmpty(userId)) { + return ResponseObject.newErrResponse().err("userId参数不允许为空!"); + } + UserModel userModel = UserCache.getModel(userId); + if (userModel == null) { + return ResponseObject.newErrResponse("用户不存在"); + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("palId")) { + return ResponseObject.newErrResponse().err("palId参数不允许为空!"); + } + String palId = params.get("palId").toString(); + if (UtilString.isEmpty(palId)) { + return ResponseObject.newErrResponse().err("palId参数不允许为空!"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", PublishAPIManager.getInstance().havingReadPALRepositoryPermissionByUserId(userId, wsId, palId)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/QueryTeamMemberAction.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/QueryTeamMemberAction.java new file mode 100644 index 00000000..ae6eab13 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/QueryTeamMemberAction.java @@ -0,0 +1,53 @@ +package com.actionsoft.apps.coe.pal.aslp.PermAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.teamwork.TeamPermAPIManager; +import com.actionsoft.apps.coe.pal.teamwork.dao.TeamMemberPerm; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamMemberPermModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +/** + * @Description 获得小组指定成员操作权限 + * @Created by sunlh + * @Date 2020-04-16 + */ +public class QueryTeamMemberAction implements ASLP { + @Override + @Meta(parameter = {"name:'teamId',required:true,allowEmpty:false,desc:'小组ID'", "name:'userId',required:true,allowEmpty:false,desc:'用户ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("teamId")) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + String teamId = params.get("teamId").toString(); + if (UtilString.isEmpty(teamId)) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + if (!params.containsKey("userId")) { + return ResponseObject.newErrResponse().err("userId参数不允许为空!"); + } + String userId = params.get("userId").toString(); + if (UtilString.isEmpty(userId)) { + return ResponseObject.newErrResponse().err("userId参数不允许为空!"); + } + JSON json = new JSONObject(); + TeamMemberPermModel model = TeamPermAPIManager.getInstance().getTeamMemberAction(teamId, userId); + if (model != null) { + json = (JSON)JSON.toJSON(model); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", json); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/QueryTeamMemberActions.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/QueryTeamMemberActions.java new file mode 100644 index 00000000..f02591ef --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/QueryTeamMemberActions.java @@ -0,0 +1,45 @@ +package com.actionsoft.apps.coe.pal.aslp.PermAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.teamwork.TeamPermAPIManager; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamMemberPermModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import java.util.Iterator; +import java.util.Map; + +/** + * @Description 获得小组全部成员的操作权限集合 + * @Created by sunlh + * @Date 2020-04-16 + */ +public class QueryTeamMemberActions implements ASLP { + @Override + @Meta(parameter = {"name:'teamId',required:true,allowEmpty:false,desc:'小组ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("teamId")) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + String teamId = params.get("teamId").toString(); + if (UtilString.isEmpty(teamId)) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + JSON json = new JSONObject(); + Iterator data = TeamPermAPIManager.getInstance().getTeamMemberActions(teamId); + if (data.hasNext()) { + json = (JSON)JSON.toJSON(data); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", json); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/RemoveAllPerms.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/RemoveAllPerms.java new file mode 100644 index 00000000..a0e54586 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/RemoveAllPerms.java @@ -0,0 +1,26 @@ +package com.actionsoft.apps.coe.pal.aslp.PermAPI; + +import com.actionsoft.apps.coe.pal.teamwork.TeamPermAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.exception.AWSDataAccessException; + +import java.util.Map; + +/** + * @Description 卸载流程团队App时,删除所有权限配置 + * @Created by sunlh + * @Date 2020-04-16 + */ +public class RemoveAllPerms implements ASLP { + @Override + public ResponseObject call(Map params) { + try { + TeamPermAPIManager.getInstance().removeAllPerms(); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + return ResponseObject.newErrResponse(e + ""); + } + return ResponseObject.newOkResponse(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/RemovePermsByTeam.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/RemovePermsByTeam.java new file mode 100644 index 00000000..830a0683 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PermAPI/RemovePermsByTeam.java @@ -0,0 +1,43 @@ +package com.actionsoft.apps.coe.pal.aslp.PermAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.teamwork.TeamPermAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.exception.AWSAPIException; +import com.actionsoft.exception.AWSDataAccessException; + +import java.util.Map; + +/** + * @Description 当流程团队小组被删除时,删除小组相关的配置资源和成员权限 + * @Created by sunlh + * @Date 2020-04-16 + */ +public class RemovePermsByTeam implements ASLP { + + @Override + @Meta(parameter = {"name:'teamId',required:true,allowEmpty:false,desc:'小组ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("teamId")) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + String teamId = params.get("teamId").toString(); + if (UtilString.isEmpty(teamId)) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + try { + TeamPermAPIManager.getInstance().removePermsByTeam(teamId); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + return ResponseObject.newErrResponse(e + ""); + } + return ResponseObject.newOkResponse(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PublishAPI/PublishPALRepository.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PublishAPI/PublishPALRepository.java new file mode 100644 index 00000000..be49ac98 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/PublishAPI/PublishPALRepository.java @@ -0,0 +1,84 @@ +package com.actionsoft.apps.coe.pal.aslp.PublishAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.manage.publish.PublishAPIManager; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishHistoryModel; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishListHistoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description 发布指定范围内的流程,该API可以被外部流程调用,完成发布动作 + * @Created by sunlh + * @Date 2020-06-19 + */ +public class PublishPALRepository implements ASLP { + @Override + @Meta(parameter = {"name:'publishInfo',required:true,allowEmpty:false,desc:'发布描述信息,JSONObject格式,包括id、processInstId、wsId、userId、auditorId、publishDate、publishDesc、teamId、publishNew、publishChange、publishStop'","name:'publishList',required:true,allowEmpty:false,desc:'发布清单,JSONArray格式,包括id、palRepositoryId、actionType、publishDesc、taskId、publishDate'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("publishInfo")) { + return ResponseObject.newErrResponse().err("publishInfo参数不允许为空!"); + } + String publishInfo = params.get("publishInfo").toString(); + if (UtilString.isEmpty(publishInfo)) { + return ResponseObject.newErrResponse().err("publishInfo参数不允许为空!"); + } + if (!params.containsKey("publishList")) { + return ResponseObject.newErrResponse().err("publishList参数不允许为空!"); + } + String publishList = params.get("publishList").toString(); + if (UtilString.isEmpty(publishList)) { + return ResponseObject.newErrResponse().err("publishList参数不允许为空!"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + try { + // 发布描述信息 + JSONObject publishObj = JSONObject.parseObject(publishInfo); + PublishHistoryModel historyModel = new PublishHistoryModel(); + historyModel.setId(publishObj.getString("id")); + historyModel.setProcessInstId(publishObj.getString("processInstId")); + historyModel.setWsId(publishObj.getString("wsId")); + historyModel.setUserId(publishObj.getString("userId")); + historyModel.setAuditorId(publishObj.getString("auditorId")); + historyModel.setPublishDate(publishObj.getTimestamp("publishDate")); + historyModel.setPublishDesc(publishObj.getString("publishDesc")); + historyModel.setTeamId(publishObj.getString("teamId")); + historyModel.setPublishNew(publishObj.getInteger("publishNew")); + historyModel.setPublishChange(publishObj.getInteger("publishChange")); + historyModel.setPublishStop(publishObj.getInteger("publishStop")); + // 发布清单 + JSONArray publishArr = JSONArray.parseArray(publishList); + List list = new ArrayList<>(); + for (int i = 0; i < publishArr.size(); i++) { + JSONObject object = publishArr.getJSONObject(i); + PublishListHistoryModel model = new PublishListHistoryModel(); + model.setId(object.getString("id")); + model.setPalRepositoryId(object.getString("palRepositoryId")); + model.setActionType(object.getString("actionType")); + model.setPublishDesc(object.getString("publishDesc")); + model.setTaskId(object.getString("taskId")); + model.setPublishDate(object.getTimestamp("publishDate")); + list.add(model); + } + String publishId = PublishAPIManager.getInstance().publishPALRepository(historyModel, list); + ro.put("result", publishId); + return ro; + } catch (Exception e) { + e.printStackTrace(); + return ResponseObject.newErrResponse(e + ""); + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryBpmGroupNameIsModify.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryBpmGroupNameIsModify.java new file mode 100644 index 00000000..a8e20fee --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryBpmGroupNameIsModify.java @@ -0,0 +1,48 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description BPM端业务建模组名称是否可修改、删除 + * @Created by sunlh + * @Date 2020-04-13 + */ +public class QueryBpmGroupNameIsModify implements ASLP { + @Override + @Meta(parameter = {"name:'processVerIds',required:true,allowEmpty:false,desc:'BPM端流程版本ID字符串,多个则英文逗号分隔'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("processVerIds")) { + return ResponseObject.newErrResponse().err("processVerIds参数不允许为空!"); + } + String processVerIds = params.get("processVerIds").toString(); + if (UtilString.isEmpty(processVerIds)) { + return ResponseObject.newErrResponse().err("processVerIds参数不允许为空!"); + } + String [] ids = processVerIds.split(","); + List list = new ArrayList<>(); + for (String id : ids) { + if (!UtilString.isEmpty(id)) { + list.add(id); + } + } + if (list.size() == 0) { + return ResponseObject.newErrResponse().err("processVerIds参数不允许为空!"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data", PALRepositoryQueryAPIManager.getInstance().BpmUpdateGroup(list)); + ro.put("desc", "data为true:可以修改/删除 false:锁定结构,不可以修改/删除"); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryBpmProcessIsLockStructure.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryBpmProcessIsLockStructure.java new file mode 100644 index 00000000..c613c9b2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryBpmProcessIsLockStructure.java @@ -0,0 +1,37 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; + +import java.util.Map; + +/** + * @Description 是否锁定BPM端流程结构,不允许在BPM端进行流程的编辑设计(但是可以配置属性参数) + * @Created by sunlh + * @Date 2020-04-13 + */ +public class QueryBpmProcessIsLockStructure implements ASLP { + + @Override + @Meta(parameter = {"name:'processDefId',required:true,allowEmpty:false,desc:'BPM端流程ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("processDefId")) { + return ResponseObject.newErrResponse().err("processDefId参数不允许为空!"); + } + String processDefId = params.get("processDefId").toString(); + if (UtilString.isEmpty(processDefId)) { + return ResponseObject.newErrResponse().err("processDefId参数不允许为空!"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data", PALRepositoryQueryAPIManager.getInstance().isLockStructure(processDefId)); + ro.put("desc", "data为true则锁定BPM端流程结构,为false则不进行锁定"); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryBpmProcessIsShow.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryBpmProcessIsShow.java new file mode 100644 index 00000000..2b0b0fbe --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryBpmProcessIsShow.java @@ -0,0 +1,36 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; + +import java.util.Map; + +/** + * @Description 查询pal端管控bpm流程时BPM端是否可显示 + * @Created by sunlh + * @Date 2020-04-13 + */ +public class QueryBpmProcessIsShow implements ASLP { + @Override + @Meta(parameter = {"name:'processDefId',required:true,allowEmpty:false,desc:'BPM端流程ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("processDefId")) { + return ResponseObject.newErrResponse().err("processDefId参数不允许为空!"); + } + String processDefId = params.get("processDefId").toString(); + if (UtilString.isEmpty(processDefId)) { + return ResponseObject.newErrResponse().err("processDefId参数不允许为空!"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data", PALRepositoryQueryAPIManager.getInstance().isShowBpmProcess(processDefId)); + ro.put("desc", "data为true:显示流程 false:隐藏不显示流程"); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryIsActiveWorkSpace.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryIsActiveWorkSpace.java new file mode 100644 index 00000000..4c328663 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryIsActiveWorkSpace.java @@ -0,0 +1,35 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import java.util.Map; + +/** + * @Description 查询资产库是否启用中 + * @Created by sunlh + * @Date 2020-04-16 + */ +public class QueryIsActiveWorkSpace implements ASLP { + @Override + @Meta(parameter = {"name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + // 查询资产库 + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data", PALRepositoryQueryAPIManager.getInstance().isActiveWorkSpace(wsId)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryNotAssingedRepositoryList.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryNotAssingedRepositoryList.java new file mode 100644 index 00000000..e21d6744 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryNotAssingedRepositoryList.java @@ -0,0 +1,40 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; + +import java.util.List; +import java.util.Map; + +/** + * @Description 获取PAL推送到BPMS但是尚未分配的流程 + * @Created by sunlh + * @Date 2020-04-13 + */ +public class QueryNotAssingedRepositoryList implements ASLP { + @Override + @Meta(parameter = {"name:'palVerId',required:false,allowEmpty:true,desc:'PAL流程版本ID,若为空或无该参数,则获取全部未分配流程'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + String palVerId = null; + if (params.containsKey("palVerId") && params.get("palVerId") != null) { + String tempId = (String)params.get("palVerId"); + if (!UtilString.isEmpty(tempId)) { + palVerId = tempId; + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray result = PALRepositoryQueryAPIManager.getInstance().getCoePalNoDistributionJSONByVersionId(palVerId); + ro.put("data", result); + ro.put("desc", "data为JSONArray类型"); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryRepositoryByAwsId.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryRepositoryByAwsId.java new file mode 100644 index 00000000..0efd35f4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryRepositoryByAwsId.java @@ -0,0 +1,61 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.CoeProcessLevelCorrelateModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +//import sun.tools.jconsole.inspector.Utils; + +import javax.rmi.CORBA.Util; +import java.util.Map; + +/** + * @Description 根据BPM端流程查询与PAL有关系的流程 + * @Created by sunlh + * @Date 2020-04-13 + */ +public class QueryRepositoryByAwsId implements ASLP { + @Override + @Meta(parameter = {"name:'processDefId',required:true,allowEmpty:false,desc:'BPM端流程ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("processDefId")) { + return ResponseObject.newErrResponse().err("processDefId参数不允许为空!"); + } + String processDefId = params.get("processDefId").toString(); + if (UtilString.isEmpty(processDefId)) { + return ResponseObject.newErrResponse().err("processDefId参数不允许为空!"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data", new JSONObject()); + ro.put("correlateData", new JSONObject()); + ro.put("desc", "data:PAL流程信息,correlateData:PAL关联表信息"); + try { + CoeProcessLevelCorrelateModel corrModel = CoeProcessLevelUtil.queryCorrelateModelyPlAwsId(processDefId); + if (corrModel != null) { + String palId = corrModel.getPlId(); + if (!UtilString.isEmpty(palId)) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(palId); + if (model != null) { + ro.put("data", (JSON)JSON.toJSON(model)); + ro.put("correlateData", (JSON)JSON.toJSON(corrModel)); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + return ResponseObject.newErrResponse(AslpUtil.errMsg() + e); + } + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryRepositoryById.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryRepositoryById.java new file mode 100644 index 00000000..db67901f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryRepositoryById.java @@ -0,0 +1,52 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +/** + * @Description 查询PAL流程 + * @Created by sunlh + * @Date 2020-04-13 + */ +public class QueryRepositoryById implements ASLP { + + + @Override + @Meta(parameter = {"name:'palId',required:true,allowEmpty:false,desc:'PAL模型ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("palId")) { + return ResponseObject.newErrResponse().err("palId参数不允许为空!"); + } + + String palId = params.get("palId").toString(); + if (UtilString.isEmpty(palId)) { + return ResponseObject.newErrResponse().err("palId参数不允许为空!"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data", new JSONObject()); + ro.put("desc", "data:PAL流程信息"); + try { + PALRepositoryModel model = PALRepositoryCache.getCache().get(palId); + if (model != null) { + ro.put("data", JSON.toJSON(model)); + } + } catch (Exception e) { + e.printStackTrace(); + return ResponseObject.newErrResponse(AslpUtil.errMsg() + e); + } + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryRepositoryImage.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryRepositoryImage.java new file mode 100644 index 00000000..127cdadc --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryRepositoryImage.java @@ -0,0 +1,101 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; +import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition; +import com.actionsoft.bpms.bpmn.modeler.io.BPMNIO; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.Base64; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.bpms.util.UtilString; + +import java.io.UnsupportedEncodingException; +import java.util.Map; + +/** + * @Description 获取PAL模型图片 + * @Created by sunlh + * @Date 2020-04-13 + */ +public class QueryRepositoryImage implements ASLP { + @Override + @Meta(parameter = {"name:'palId',required:false,allowEmpty:true,desc:'PAL模型ID'", "name:'bigImage',required:false,allowEmpty:true,desc:'是否生成大图(正常图片大小),true/false,默认true,若不需要大图,请设置为false,可提高查询速度'", "name:'smallImage',required:false,allowEmpty:true,desc:'是否生成缩略图,true/false,默认true,若不需要小图,请设置为false,可提高查询速度'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("palId")) { + return ResponseObject.newErrResponse().err("palId参数不允许为空!"); + } + String palId = params.get("palId").toString(); + if (UtilString.isEmpty(palId)) { + return ResponseObject.newErrResponse().err("palId参数不允许为空!"); + } + PALRepositoryModel model = PALRepositoryCache.getCache().get(palId); + if (model == null) { + return ResponseObject.newErrResponse().err("模型未找到!"); + } + boolean bigImage = !params.containsKey("bigImage") ? true : (boolean)params.get("bigImage"); + boolean smallImage = !params.containsKey("smallImage") ? true : (boolean)params.get("smallImage"); + String bigImagePhoto = ""; + String smallImagePhoto = ""; + // 创建图片 + try { + if (PALRepositoryQueryAPIManager.getInstance().isCorrelateBpms(palId, true)) { + String processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(palId, true); + if (bigImage) { + // 创建并获取图片 + bigImagePhoto = "data:image/png;base64," + BPMNIO.getBPMNImage(ProcessDefCache.getInstance().getModel(processDefId).getAppId(), processDefId); + } + if (smallImage) { + // 创建图片 + BPMNIO.generateBPMNImageThumbnail(ProcessDefCache.getInstance().getModel(processDefId).getAppId(), processDefId); + smallImagePhoto = "data:image/png;base64," + BPMNIO.getBPMNImageThumbnail(ProcessDefCache.getInstance().getModel(processDefId).getAppId(), processDefId); + } + } else { + // 创建图片 + PALRepositoryQueryAPIManager.getInstance().saveImage(palId, bigImage, smallImage); + if (bigImage) { + String path = model.getFilePath(); + if (!UtilString.isEmpty(path)) { + UtilFile utilFile = new UtilFile(path + "/" + model.getId() + ".png"); + if (utilFile.exists()) { + byte[] base64Bytes = Base64.encode(utilFile.readBytes()); + try { + bigImagePhoto = "data:image/png;base64," + new String(base64Bytes, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + } + if (smallImage) { + String path = model.getFilePath(); + if (!UtilString.isEmpty(path)) { + UtilFile utilFile = new UtilFile(path + "/" + model.getId() + ".small.png"); + if (utilFile.exists()) { + byte[] base64Bytes = Base64.encode(utilFile.readBytes()); + try { + smallImagePhoto = "data:image/png;base64," + new String(base64Bytes, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + return ResponseObject.newErrResponse("获取图片错误" + e); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("bigImage", bigImagePhoto); + ro.put("smallImage", smallImagePhoto); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryRepositoryListByVersionid.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryRepositoryListByVersionid.java new file mode 100644 index 00000000..48a42fcf --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryRepositoryListByVersionid.java @@ -0,0 +1,47 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +/** + * @Description 根据PAL流程版本id获取流程模型集合 + * @Created by sunlh + * @Date 2020-04-13 + */ +public class QueryRepositoryListByVersionid implements ASLP { + @Override + @Meta(parameter = {"name:'palVerId',required:true,allowEmpty:false,desc:'PAL流程版本ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("palVerId")) { + return ResponseObject.newErrResponse().err("palVerId参数不允许为空!"); + } + + String palVerId = params.get("palVerId").toString(); + if (UtilString.isEmpty(palVerId)) { + return ResponseObject.newErrResponse().err("palVerId参数不允许为空!"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data", new JSONObject()); + ro.put("desc", "data:PAL流程信息集合"); + try { + ro.put("data", JSONArray.parseArray(JSON.toJSONString(PALRepositoryCache.getCache().getByVersionId(palVerId)))); + } catch (Exception e) { + e.printStackTrace(); + return ResponseObject.newErrResponse(AslpUtil.errMsg() + e); + } + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryShowBpmProcesseList.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryShowBpmProcesseList.java new file mode 100644 index 00000000..cbf7d8ba --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryShowBpmProcesseList.java @@ -0,0 +1,39 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description BPM端流程是否可显示/隐藏 + * @Created by sunlh + * @Date 2020-04-13 + */ +public class QueryShowBpmProcesseList implements ASLP { + @Override + @Meta(parameter = {"name:'processVerId',required:true,allowEmpty:false,desc:'BPM端流程版本ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("processVerId")) { + return ResponseObject.newErrResponse().err("processVerId参数不允许为空!"); + } + String processVerId = params.get("processVerId").toString(); + if (UtilString.isEmpty(processVerId)) { + return ResponseObject.newErrResponse().err("processVerId参数不允许为空!"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + List list = PALRepositoryQueryAPIManager.getInstance().getShowBpmProcessList(processVerId); + ro.put("data", JSON.toJSON(list)); + ro.put("desc", "data为null:该流程/流程版本与PAL无关联关系,依照平台机制处 不为null,JSON[xxx,xxx]:xxx为所有可以显示的流程,且其所有显示流程锁定结构,若size为0, 代表该流程版本下所有流程 显示(及特殊情况出现)"); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryWorkspaceById.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryWorkspaceById.java new file mode 100644 index 00000000..f9412ad2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryWorkspaceById.java @@ -0,0 +1,48 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +/** + * @Description 查询资产库 + * @Created by sunlh + * @Date 2020-04-10 + */ +public class QueryWorkspaceById implements ASLP { + + @Override + @Meta(parameter = {"name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + // 查询资产库 + CoeWorkSpaceModel model = new CoeWorkSpace().getInstance(wsId); + ResponseObject ro = ResponseObject.newOkResponse(); + int size = 0; + JSON data = new JSONObject(); + if (model != null) { + size = 1; + data = (JSON) JSON.toJSON(model); + } + ro.put("size", size); + ro.put("data", data); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryWorkspaceList.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryWorkspaceList.java new file mode 100644 index 00000000..fd9c549f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/QueryWorkspaceList.java @@ -0,0 +1,104 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.*; + +/** + * @Description 查询资产库列表 + * @Created by sunlh + * @Date 2020-04-10 + */ +public class QueryWorkspaceList implements ASLP { + @Override + @Meta(parameter = {"name:'name',required:false,allowEmpty:true,desc:'资产库名称'","name:'nameMatchRule',required:false,allowEmpty:true,desc:'资产库名称匹配方式,like:模糊匹配,equals:完全匹配,无此参数或者为空则默认like'","name:'managerUser',required:false,allowEmpty:true,desc:'资产库管理员,用户登录账号,多个则英文逗号分隔'", "name:'status',required:false,allowEmpty:true,desc:'资产库状态范围,stop:停用状态,active:启动状态,无此参数或者为空则查询全部'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + String name = params.containsKey("name") ? params.get("name").toString() : null; + String nameMatchRule = null; + if (params.containsKey("nameMatchRule")) { + nameMatchRule = (String)params.get("nameMatchRule"); + if (!UtilString.isEmpty(nameMatchRule)) { + if (!"like".equals(nameMatchRule) && !"equals".equals(nameMatchRule)) { + return ResponseObject.newErrResponse().err("nameMatchRule参数值错误,值必须是'like'或'equals'!"); + } + } + } + int status = -1; + if (params.containsKey("status")) { + String tmp = params.get("status").toString(); + if (!"stop".equals(tmp) && !"active".equals(tmp)) { + return ResponseObject.newErrResponse().err("status参数值错误,值必须是'stop'或'active'!"); + } + if ("stop".equals(tmp)) status = 1; + if ("active".equals(tmp)) status = 0; + } + + Set managerList = new HashSet<>(); + if (params.containsKey("managerUser")) { + String managerUser = params.get("managerUser").toString(); + if (!UtilString.isEmpty(managerUser)) { + String [] tmpArr = managerUser.split(","); + for (String userId : tmpArr) { + if (!UtilString.isEmpty(userId)) { + managerList.add(userId); + } + } + } + } + // 获取所有资产库 + List list = new CoeWorkSpace().getInstanceAll(); + int size = 0; + List result = new ArrayList<>(); + if (!AslpUtil.isEmpty(list)) { + for (CoeWorkSpaceModel model : list) { + // 校验名称 + if (!UtilString.isEmpty(name)) { + if ("equals".equals(nameMatchRule)) { + if (!name.equals(model.getWsName())) { + continue; + } + } else { + if (!model.getWsName().contains(name)) { + continue; + } + } + } + // 校验管理员 + if (managerList.size() > 0) { + String admins = model.getWsAdmin(); + List adminList = Arrays.asList(admins.split(",")); + boolean temp = true; + for (String userId : managerList) { + if (!adminList.contains(userId)) { + temp = false; + break; + } + } + if (!temp) { + continue; + } + } + // 校验状态 + if (status != -1) { + if (model.getWsState() != status) continue; + } + result.add(model); + size++; + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("size", size); + ro.put("data", JSON.toJSON(result)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryAllPALRepositoryModelsByPid.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryAllPALRepositoryModelsByPid.java new file mode 100644 index 00000000..158b46b9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryAllPALRepositoryModelsByPid.java @@ -0,0 +1,58 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.*; + +/** + * @Description 获取某个流程的所有子流程 + * @Created by sunlh + * @Date 2020-06-22 + */ +public class QueryAllPALRepositoryModelsByPid implements ASLP { + @Override + @Meta(parameter = {"name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'pid',required:true,allowEmpty:false,desc:'父节点ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("pid")) { + return ResponseObject.newErrResponse().err("pid参数不允许为空!"); + } + String pid = params.get("pid").toString(); + if (UtilString.isEmpty(pid)) { + return ResponseObject.newErrResponse().err("pid参数不允许为空!"); + } + List list = new ArrayList<>(); + PALRepositoryQueryAPIManager.getInstance().getAllPalRepositoryModelsByPid(wsId, pid, list); + // 去重 + Set ids = new HashSet<>(); + List temp = new ArrayList<>(); + for (PALRepositoryModel model : list) { + if (!ids.contains(model.getId())) { + temp.add(model); + ids.add(model.getId()); + } + } + list = temp; + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryAllPublishedPALRepositoryModelsByPid.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryAllPublishedPALRepositoryModelsByPid.java new file mode 100644 index 00000000..a0f7eb16 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryAllPublishedPALRepositoryModelsByPid.java @@ -0,0 +1,57 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.*; + +/** + * @Description 获取流程资产库下所有已发布的子流程 + * @Created by sunlh + * @Date 2020-06-22 + */ +public class QueryAllPublishedPALRepositoryModelsByPid implements ASLP { + @Override + @Meta(parameter = {"name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'pid',required:true,allowEmpty:false,desc:'父节点ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("pid")) { + return ResponseObject.newErrResponse().err("pid参数不允许为空!"); + } + String pid = params.get("pid").toString(); + if (UtilString.isEmpty(pid)) { + return ResponseObject.newErrResponse().err("pid参数不允许为空!"); + } + List list = new ArrayList<>(); + PALRepositoryQueryAPIManager.getInstance().getAllPublishedPalRepositoryModelsByPid(wsId, pid, list); + // 去重 + Set ids = new HashSet<>(); + List temp = new ArrayList<>(); + for (PALRepositoryModel model : list) { + if (!ids.contains(model.getId())) { + temp.add(model); + ids.add(model.getId()); + } + } + list = temp; + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryAllUsedPALRepositoryModelsByPid.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryAllUsedPALRepositoryModelsByPid.java new file mode 100644 index 00000000..0d72ff18 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryAllUsedPALRepositoryModelsByPid.java @@ -0,0 +1,58 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.manage.method.PalManageWeb; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.*; + +/** + * @Description 获取流程资产库下所有使用中的子流程 + * @Created by sunlh + * @Date 2020-06-22 + */ +public class QueryAllUsedPALRepositoryModelsByPid implements ASLP { + @Override + @Meta(parameter = {"name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'pid',required:true,allowEmpty:false,desc:'父节点ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("pid")) { + return ResponseObject.newErrResponse().err("pid参数不允许为空!"); + } + String pid = params.get("pid").toString(); + if (UtilString.isEmpty(pid)) { + return ResponseObject.newErrResponse().err("pid参数不允许为空!"); + } + List list = new ArrayList<>(); + PALRepositoryQueryAPIManager.getInstance().getAllUsedPalRepositoryModelsByPid(wsId, pid, list); + // 去重 + Set ids = new HashSet<>(); + List temp = new ArrayList<>(); + for (PALRepositoryModel model : list) { + if (!ids.contains(model.getId())) { + temp.add(model); + ids.add(model.getId()); + } + } + list = temp; + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByName.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByName.java new file mode 100644 index 00000000..16c2bc2b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByName.java @@ -0,0 +1,48 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description 根据名称获取资产库文件 + * @Created by sunlh + * @Date 2020-06-22 + */ +public class QueryPALRepositoryModelsByName implements ASLP { + @Override + @Meta(parameter = {"name:'name',required:true,allowEmpty:false,desc:'名称'","name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'methodId',required:false,allowEmpty:true,desc:'建模方法标识,可为空'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("name")) { + return ResponseObject.newErrResponse().err("name参数不允许为空!"); + } + String name = params.get("name").toString(); + if (UtilString.isEmpty(name)) { + return ResponseObject.newErrResponse().err("name参数不允许为空!"); + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String methodId = params.get("methodId").toString(); + List list = PALRepositoryQueryAPIManager.getInstance().getCoeProcessLevelByName(name, wsId, methodId); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByPid.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByPid.java new file mode 100644 index 00000000..a95c55b9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByPid.java @@ -0,0 +1,47 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description 获取某个流程的子流程,只获取第一级子流程 + * @Created by sunlh + * @Date 2020-06-22 + */ +public class QueryPALRepositoryModelsByPid implements ASLP { + @Override + @Meta(parameter = {"name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'pid',required:true,allowEmpty:false,desc:'父节点ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("pid")) { + return ResponseObject.newErrResponse().err("pid参数不允许为空!"); + } + String pid = params.get("pid").toString(); + if (UtilString.isEmpty(pid)) { + return ResponseObject.newErrResponse().err("pid参数不允许为空!"); + } + List list = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByPid(wsId, pid); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByTeamId.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByTeamId.java new file mode 100644 index 00000000..66ae4aa7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByTeamId.java @@ -0,0 +1,61 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.cooperation.model.CoeCooperationTeamModel; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description 获取小组可访问的资产库文件 + * @Created by sunlh + * @Date 2020-06-22 + */ +public class QueryPALRepositoryModelsByTeamId implements ASLP { + @Override + @Meta(parameter = {"name:'teamId',required:true,allowEmpty:false,desc:'小组ID'","name:'userId',required:true,allowEmpty:false,desc:'用户Id'","name:'isUsed',required:false,allowEmpty:true,desc:'是否限定查询设计中的流程'","name:'isPublished',required:false,allowEmpty:true,desc:'是否限定查询已发布的流程'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("teamId")) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + String teamId = params.get("teamId").toString(); + if (UtilString.isEmpty(teamId)) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + if (!params.containsKey("userId")) { + return ResponseObject.newErrResponse().err("userId参数不允许为空!"); + } + String userId = params.get("userId").toString(); + if (UtilString.isEmpty(userId)) { + return ResponseObject.newErrResponse().err("userId参数不允许为空!"); + } + boolean isUsed = false; + if (params.containsKey("isUsed")) { + isUsed = (boolean)params.get("isUsed"); + } + boolean isPublished = false; + if (params.containsKey("isPublished")) { + isPublished = (boolean)params.get("isPublished"); + } + CoeCooperationTeamModel team = CoeCooperationAPIManager.getInstance().queryCooperationTeamById(teamId); + if (team == null) { + return ResponseObject.newErrResponse().err("小组不存在!"); + } + List list = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByTeamId(team.getWsId(), teamId, userId, isUsed, isPublished); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByTeamIdAndMethodId.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByTeamIdAndMethodId.java new file mode 100644 index 00000000..fae27d0d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByTeamIdAndMethodId.java @@ -0,0 +1,61 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description 获取流程节点 + * @Created by sunlh + * @Date 2020-06-22 + */ +public class QueryPALRepositoryModelsByTeamIdAndMethodId implements ASLP { + @Override + @Meta(parameter = {"name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'teamId',required:true,allowEmpty:false,desc:'小组ID'","name:'userId',required:true,allowEmpty:false,desc:'用户ID'","name:'category',required:true,allowEmpty:false,desc:'建模方法大类'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("teamId")) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + String teamId = params.get("teamId").toString(); + if (UtilString.isEmpty(teamId)) { + return ResponseObject.newErrResponse().err("teamId参数不允许为空!"); + } + if (!params.containsKey("userId")) { + return ResponseObject.newErrResponse().err("userId参数不允许为空!"); + } + String userId = params.get("userId").toString(); + if (UtilString.isEmpty(userId)) { + return ResponseObject.newErrResponse().err("userId参数不允许为空!"); + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("category")) { + return ResponseObject.newErrResponse().err("category参数不允许为空!"); + } + String category = params.get("category").toString(); + if (UtilString.isEmpty(category)) { + return ResponseObject.newErrResponse().err("category参数不允许为空!"); + } + List list = PALRepositoryQueryAPIManager.getInstance().getAccessPalModel(wsId, teamId, userId, category); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByWsId.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByWsId.java new file mode 100644 index 00000000..f8e97730 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByWsId.java @@ -0,0 +1,40 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description 获取某个资产库文件 + * @Created by sunlh + * @Date 2020-06-22 + */ +public class QueryPALRepositoryModelsByWsId implements ASLP { + @Override + @Meta(parameter = {"name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + List list = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByWsId(wsId); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByWsIdAndMethodId.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByWsIdAndMethodId.java new file mode 100644 index 00000000..6035b654 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPALRepositoryModelsByWsIdAndMethodId.java @@ -0,0 +1,47 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description 获取流程资产库下的流程 + * @Created by sunlh + * @Date 2020-06-22 + */ +public class QueryPALRepositoryModelsByWsIdAndMethodId implements ASLP { + @Override + @Meta(parameter = {"name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'methodId',required:true,allowEmpty:false,desc:'建模方法标识或建模方法大类'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("methodId")) { + return ResponseObject.newErrResponse().err("methodId参数不允许为空!"); + } + String methodId = params.get("methodId").toString(); + if (UtilString.isEmpty(methodId)) { + return ResponseObject.newErrResponse().err("methodId参数不允许为空!"); + } + List list = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByWsIdAndMethodId(wsId, methodId); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPublishedPALRepositoryModelsByPid.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPublishedPALRepositoryModelsByPid.java new file mode 100644 index 00000000..54a7afb4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPublishedPALRepositoryModelsByPid.java @@ -0,0 +1,47 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description 获取流程资产库下已发布的子流程,只获取第一级子流程 + * @Created by sunlh + * @Date 2020-06-22 + */ +public class QueryPublishedPALRepositoryModelsByPid implements ASLP { + @Override + @Meta(parameter = {"name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'pid',required:true,allowEmpty:false,desc:'父节点ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("pid")) { + return ResponseObject.newErrResponse().err("pid参数不允许为空!"); + } + String pid = params.get("pid").toString(); + if (UtilString.isEmpty(pid)) { + return ResponseObject.newErrResponse().err("pid参数不允许为空!"); + } + List list = PALRepositoryQueryAPIManager.getInstance().getPublishedPalRepositoryModelsByPid(wsId, pid); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPublishedPALRepositoryModelsByWsId.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPublishedPALRepositoryModelsByWsId.java new file mode 100644 index 00000000..90df486a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryPublishedPALRepositoryModelsByWsId.java @@ -0,0 +1,47 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description 获取流程资产库下所有已发布的流程 + * @Created by sunlh + * @Date 2020-06-22 + */ +public class QueryPublishedPALRepositoryModelsByWsId implements ASLP { + @Override + @Meta(parameter = {"name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'methodId',required:true,allowEmpty:false,desc:'建模方法标识或建模方法大类'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("methodId")) { + return ResponseObject.newErrResponse().err("methodId参数不允许为空!"); + } + String methodId = params.get("methodId").toString(); + if (UtilString.isEmpty(methodId)) { + return ResponseObject.newErrResponse().err("methodId参数不允许为空!"); + } + List list = PALRepositoryQueryAPIManager.getInstance().getPublishedPalRepositoryModelsByWsId(wsId, methodId); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryRepositoryList.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryRepositoryList.java new file mode 100644 index 00000000..e7d2b4bc --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryRepositoryList.java @@ -0,0 +1,64 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description 符合条件的模型结果集 + * @Created by sunlh + * @Date 2020-06-19 + */ +public class QueryRepositoryList implements ASLP { + @Override + @Meta(parameter = {"name:'sortType',required:false,allowEmpty:true,desc:'排序方式,参考SDK PALRepositoryQueryAPI的asc或desc方法'","name:'orderByField',required:false,allowEmpty:true,desc:'排序字段,参考SDK PALRepositoryQueryAPI的orderByxxx方法'","name:'wsId',required:false,allowEmpty:true,desc:'资产库ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } +// if (!params.containsKey("sortType")) { +// return ResponseObject.newErrResponse().err("sortType参数不允许为空!"); +// } + boolean sortType = false; + if (params.containsKey("sortType") && params.get("sortType") != null) { + sortType = Boolean.getBoolean((String)params.get("sortType")); + } +// if (UtilString.isEmpty(sortType)) { +// return ResponseObject.newErrResponse().err("sortType参数不允许为空!"); +// } + String orderByField = ""; + if (params.containsKey("orderByField") && params.get("orderByField") != null) { + orderByField = params.get("orderByField").toString(); + } +// if (!params.containsKey("orderByField")) { +// return ResponseObject.newErrResponse().err("orderByField参数不允许为空!"); +// } +// if (UtilString.isEmpty(orderByField)) { +// return ResponseObject.newErrResponse().err("orderByField参数不允许为空!"); +// } + String wsId = ""; + if (params.containsKey("wsId") && params.get("wsId") != null) { + wsId = params.get("wsId").toString(); + } +// if (!params.containsKey("wsId")) { +// return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); +// } +// String wsId = params.get("wsId").toString(); +// if (UtilString.isEmpty(wsId)) { +// return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); +// } + List list = PALRepositoryQueryAPIManager.getInstance().list(sortType, orderByField, wsId, params); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryUsedPALRepositoryModelsByPid.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryUsedPALRepositoryModelsByPid.java new file mode 100644 index 00000000..4510cca6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryUsedPALRepositoryModelsByPid.java @@ -0,0 +1,47 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description 获取流程资产库下使用中的子流程,只获取第一级正在使用中的子流程 + * @Created by sunlh + * @Date 2020-06-22 + */ +public class QueryUsedPALRepositoryModelsByPid implements ASLP { + @Override + @Meta(parameter = {"name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'pid',required:true,allowEmpty:false,desc:'父节点ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("pid")) { + return ResponseObject.newErrResponse().err("pid参数不允许为空!"); + } + String pid = params.get("pid").toString(); + if (UtilString.isEmpty(pid)) { + return ResponseObject.newErrResponse().err("pid参数不允许为空!"); + } + List list = PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryModelsByPid(wsId, pid); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryUsedPALRepositoryModelsByWsId.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryUsedPALRepositoryModelsByWsId.java new file mode 100644 index 00000000..50785ef9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/RepositoryAPI/QueryUsedPALRepositoryModelsByWsId.java @@ -0,0 +1,47 @@ +package com.actionsoft.apps.coe.pal.aslp.RepositoryAPI; + +import com.actionsoft.apps.coe.pal.aslp.AslpUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSON; + +import java.util.List; +import java.util.Map; + +/** + * @Description 获取流程资产库下使用中的流程 + * @Created by sunlh + * @Date 2020-06-22 + */ +public class QueryUsedPALRepositoryModelsByWsId implements ASLP { + @Override + @Meta(parameter = {"name:'wsId',required:true,allowEmpty:false,desc:'资产库ID'","name:'methodId',required:true,allowEmpty:false,desc:'建模方法标识或建模方法大类'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + if (!params.containsKey("wsId")) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + String wsId = params.get("wsId").toString(); + if (UtilString.isEmpty(wsId)) { + return ResponseObject.newErrResponse().err("wsId参数不允许为空!"); + } + if (!params.containsKey("methodId")) { + return ResponseObject.newErrResponse().err("methodId参数不允许为空!"); + } + String methodId = params.get("methodId").toString(); + if (UtilString.isEmpty(methodId)) { + return ResponseObject.newErrResponse().err("methodId参数不允许为空!"); + } + List list = PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryModelsByWsId(wsId, methodId); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", JSON.toJSON(list)); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/SaveAssignRepository.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/SaveAssignRepository.java new file mode 100644 index 00000000..2e0b3f5a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/aslp/SaveAssignRepository.java @@ -0,0 +1,61 @@ +package com.actionsoft.apps.coe.pal.aslp; + +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +/** + * @Description 对未分配的bpmn流程进行分配保存 + * @Created by sunlh + * @Date 2020-04-13 + */ +public class SaveAssignRepository implements ASLP { + + @Override + @Meta(parameter = {"name:'palId',required:true,allowEmpty:false,desc:'PAL端流程ID'", "name:'processDefId',required:true,allowEmpty:false,desc:'BPM端流程ID'","name:'processDefVersionId',required:true,allowEmpty:false,desc:'BPM端流程版本ID'"}) + public ResponseObject call(Map params) { + ResponseObject checkParams = AslpUtil.isParamsEmpty(params); + if (checkParams.isErr()) { + return checkParams; + } + + if (!params.containsKey("palId")) { + return ResponseObject.newErrResponse().err("palId参数不允许为空!"); + } + String palId = params.get("palId").toString(); + if (UtilString.isEmpty(palId)) { + return ResponseObject.newErrResponse().err("palId参数不允许为空!"); + } + + if (!params.containsKey("processDefId")) { + return ResponseObject.newErrResponse().err("processDefId参数不允许为空!"); + } + String processDefId = params.get("processDefId").toString(); + if (UtilString.isEmpty(processDefId)) { + return ResponseObject.newErrResponse().err("processDefId参数不允许为空!"); + } + + if (!params.containsKey("processDefVersionId")) { + return ResponseObject.newErrResponse().err("processDefVersionId参数不允许为空!"); + } + String processDefVersionId = params.get("processDefVersionId").toString(); + if (UtilString.isEmpty(processDefVersionId)) { + return ResponseObject.newErrResponse().err("processDefVersionId参数不允许为空!"); + } + JSONObject object = new JSONObject(); + object.put("plId", palId); + object.put("processDefId", processDefId); + object.put("processDefVersionId", processDefVersionId); + int result = PALRepositoryQueryAPIManager.getInstance().coePalNoDistributionInsert(object); + + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("count", result); + ro.put("desc", "count为保存完成后影响条数"); + return ro; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/components/web/BPMOrgTreeWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/components/web/BPMOrgTreeWeb.java new file mode 100644 index 00000000..3f471e1f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/components/web/BPMOrgTreeWeb.java @@ -0,0 +1,362 @@ +package com.actionsoft.apps.coe.pal.components.web; + +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.web.DesignerRelationShapeWeb; +import com.actionsoft.apps.coe.pal.util.BpmOrgUtil; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.org.cache.DepartmentCache; +import com.actionsoft.bpms.org.cache.RoleCache; +import com.actionsoft.bpms.org.model.CompanyModel; +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.org.model.RoleModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.UtilSerialize; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import java.util.*; + +/** + * @Description BPM组织结构组件,后期通过地址簿代替 + * @Created by sunlh + * @Date 2020-10-13 + */ +public class BPMOrgTreeWeb extends ActionWeb { + private UserContext _uc; + + public BPMOrgTreeWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + /** + * 获取组织架构数据 + * @param addressType department user role + * @param pid + * @param parentType department role + * @param highSecurityFilter + * @return + */ + public String getBpmOrgAddressTreeData(String addressType, String pid, String parentType, String highSecurityFilter) { + JSONArray result = new JSONArray(); + // 获取子节点 + Set set = new HashSet<>(Arrays.asList(addressType.split(","))); + if (UtilString.isEmpty(pid)) { + // 获取根节点 + if (set.contains("department") || set.contains("user")) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(_uc); + List companyIds = new ArrayList<>(); + // 获取顶级单位数据 + List companyModels = SDK.getORGAPI().getCompanys(); + for (CompanyModel company : companyModels) { + if (!company.isClosed() && company.isValid()) { + // 当前人所属单位,可访问 + CompanyModel currUserCompany = SDK.getORGAPI().getCompanyByUser(_uc.getUID()); + if (currUserCompany != null && currUserCompany.getId().equals(company.getId())) { + companyIds.add(company.getId()); + } else if (web.hasAC(_uc.getUID(), company.getId(), "platform.companyAdmin")) { + companyIds.add(company.getId()); + } + } + } + for (String companyId : companyIds) { + CompanyModel model = SDK.getORGAPI().getCompanyById(companyId); + JSONObject obj = new JSONObject(); + obj.put("id", model.getId()); + obj.put("name", model.getNameI18N()); + obj.put("type", "company"); + JSONObject icon = new JSONObject(); + icon.put("icon", BpmOrgUtil.COMPANY_ICON_CODE); + icon.put("color", BpmOrgUtil.COMPANY_ICON_COLOR); + obj.put("icon", icon); + result.add(obj); + } + } + if (set.contains("position")) { + // 获取岗位根目录 + JSONObject obj = new JSONObject(); + obj.put("id", "positionRoot"); + obj.put("name", "岗位"); + obj.put("type", "positionRoot"); + JSONObject icon = new JSONObject(); + icon.put("icon", BpmOrgUtil.POSITION_ROOT_ICON_CODE); + icon.put("color", BpmOrgUtil.POSITION_ROOT_ICON_COLOR); + obj.put("icon", icon); + result.add(obj); + } + if (set.contains("role")) { + // 获取角色根目录 + JSONObject obj = new JSONObject(); + obj.put("id", "roleRoot"); + obj.put("name", "角色"); + obj.put("type", "roleRoot"); + JSONObject icon = new JSONObject(); + icon.put("icon", BpmOrgUtil.ROLE_ROOT_ICON_CODE); + icon.put("color", BpmOrgUtil.ROLE_ROOT_ICON_COLOR); + obj.put("icon", icon); + result.add(obj); + } + } else { + if ("company".equals(parentType)) {// 父节点是单位 + // 获取一级子部门,type为department + result = getDepartmentByCompany(pid); + } else if ("department".equals(parentType)) { + // 获取部门/用户,type为department + result = getDepartmentAndUserByParent(pid, set.contains("user") ? true : false, highSecurityFilter); + } else if ("roleRoot".equals(parentType)) {// 父节点是角色root节点 + // 获取角色组,type为roleGroup + result = getRoleGroupData(); + } else if ("roleGroup".equals(parentType)) { + // 获取角色,type为role + result = getRoleByGroupId(pid); + } else if ("positionRoot".equals(parentType)) {// 父节点是岗位root节点 + // 获取岗位组,type为positionGroup + result = getPositionGroupData(); + } else if ("positionGroup".equals(parentType)) { + // 获取岗位,type为position + result = getPostionByGroupId(pid); + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(result); + return ro.toString(); + } + + /** + * 获取岗位 + * @param pid 岗位组名称 + * @return + */ + public JSONArray getPostionByGroupId(String pid) { + JSONArray data = new JSONArray(); + List roleList = SDK.getORGAPI().getRolesByCategory(pid); + if (!isEmpty(roleList)) { + for (RoleModel model : roleList) { + if (model != null && model.getRoleType() == 1) { + JSONObject obj = new JSONObject(); + obj.put("id", model.getId()); + obj.put("pid", pid); + obj.put("name", model.getName()); + obj.put("type", "position"); + JSONObject icon = new JSONObject(); + icon.put("icon", BpmOrgUtil.POSITION_ICON_CODE); + icon.put("color", BpmOrgUtil.POSITION_ICON_COLOR); + obj.put("icon", icon); + obj.put("leaf", true); + data.add(obj); + } + } + } + return data; + } + + /** + * 获取角色 + * @param pid 角色组名称 + * @return + */ + public JSONArray getRoleByGroupId(String pid) { + JSONArray data = new JSONArray(); + List roleList = SDK.getORGAPI().getRolesByCategory(pid); + if (!isEmpty(roleList)) { + for (RoleModel model : roleList) { + if (model != null && model.getRoleType() == 0) { + JSONObject obj = new JSONObject(); + obj.put("id", model.getId()); + obj.put("pid", pid); + obj.put("name", model.getName()); + obj.put("type", "role"); + JSONObject icon = new JSONObject(); + icon.put("icon", BpmOrgUtil.ROLE_ICON_CODE); + icon.put("color", BpmOrgUtil.ROLE_ICON_COLOR); + obj.put("icon", icon); + obj.put("leaf", true); + data.add(obj); + } + } + } + return data; + } + + /** + * 获取岗位分组 + * @return + */ + public JSONArray getPositionGroupData() { + JSONArray data = new JSONArray(); + String[] positionGroupList = RoleCache.getCategoryNames(); + if (positionGroupList != null && positionGroupList.length > 0) { + for (String name : positionGroupList) { + if (!UtilString.isEmpty(name)) { + // 判断是否包含角色 + List roleList = SDK.getORGAPI().getRolesByCategory(name); + boolean hasPosition = false; + if (!isEmpty(roleList)) { + for (RoleModel model : roleList) { + if (model != null && model.getRoleType() == 1) { + hasPosition = true; + } + } + } + if (hasPosition) { + JSONObject obj = new JSONObject(); + obj.put("id", name); + obj.put("pid", "positionRoot"); + obj.put("name", name); + obj.put("type", "positionGroup"); + JSONObject icon = new JSONObject(); + icon.put("icon", BpmOrgUtil.POSITION_GROUP_ICON_CODE); + icon.put("color", BpmOrgUtil.POSITION_GROUP_ICON_COLOR); + obj.put("icon", icon); + data.add(obj); + } + } + } + } + return data; + } + + /** + * 获取角色分组 + * @return + */ + public JSONArray getRoleGroupData() { + JSONArray data = new JSONArray(); + String[] roleGroupList = RoleCache.getCategoryNames(); + if (roleGroupList != null && roleGroupList.length > 0) { + for (String name : roleGroupList) { + if (!UtilString.isEmpty(name)) { + // 判断是否包含角色 + List roleList = SDK.getORGAPI().getRolesByCategory(name); + boolean hasRole = false; + if (!isEmpty(roleList)) { + for (RoleModel model : roleList) { + if (model != null && model.getRoleType() == 0) { + hasRole = true; + } + } + } + if (hasRole) { + JSONObject obj = new JSONObject(); + obj.put("id", name); + obj.put("pid", "roleRoot"); + obj.put("name", name); + obj.put("type", "roleGroup"); + JSONObject icon = new JSONObject(); + icon.put("icon", BpmOrgUtil.ROLE_GROUP_ICON_CODE); + icon.put("color", BpmOrgUtil.ROLE_GROUP_ICON_COLOR); + obj.put("icon", icon); + data.add(obj); + } + } + } + } + return data; + } + + /** + * 获取部门下的部门和人员 + * @param pid + * @param highSecurityFilter + * @return + */ + public JSONArray getDepartmentAndUserByParent(String pid, boolean containUser, String highSecurityFilter) { + JSONArray data = new JSONArray(); + // 部门 + List subDepartmentList = SDK.getORGAPI().getSubDepartments(pid); + if (!isEmpty(subDepartmentList)) { + for (DepartmentModel model : subDepartmentList) { + if (model == null || model.isClosed()) { + continue; + } + JSONObject obj = new JSONObject(); + obj.put("id", model.getId()); + obj.put("pid", pid); + obj.put("name", model.getNameI18N()); + obj.put("type", "department"); + JSONObject icon = new JSONObject(); + icon.put("icon", BpmOrgUtil.DEPARTMENT_ICON_CODE); + icon.put("color", BpmOrgUtil.DEPARTMENT_ICON_COLOR); + obj.put("icon", icon); + data.add(obj); + } + } + // 人员 + if (containUser) { + List userlist = SDK.getORGAPI().getUsersByDepartment(pid); + if (!isEmpty(userlist)) { + for (UserModel model : userlist) { + if (model == null || model.isClosed()) { + continue; + } + // 三员用户过滤器 + if (HighSecurityUtil.isON()) { + if (highSecurityFilter.contains("sysAdmin") && HighSecurityUtil.isSysAdminUser(model.getUID())) { + continue; + } + if (highSecurityFilter.contains("secAdmin") && HighSecurityUtil.isSecAdminUser(model.getUID())) { + continue; + } + if (highSecurityFilter.contains("auditor") && HighSecurityUtil.isAuditorUser(model.getUID())) { + continue; + } + } + JSONObject obj = new JSONObject(); + obj.put("id", model.getUID()); + obj.put("pid", pid); + obj.put("name", model.getUserName()); + obj.put("type", "user"); + JSONObject icon = new JSONObject(); + icon.put("icon", BpmOrgUtil.NORMAL_USER_ICON_CODE); + if (model.isManager()) { + icon.put("color", BpmOrgUtil.MANAGER_USER_ICON_COLOR); + } else { + icon.put("color", BpmOrgUtil.NORMAL_USER_ICON_COLOR); + } + obj.put("icon", icon); + obj.put("leaf", true); + data.add(obj); + } + } + } + return data; + } + + /** + * 获取单位下第一级部门 + * @param companyId + * @return + */ + private JSONArray getDepartmentByCompany(String companyId) { + JSONArray data = new JSONArray(); + List departmentList = DepartmentCache.getListOfCompany(companyId); + if (!isEmpty(departmentList)) { + for (DepartmentModel model : departmentList) { + if (model != null && model.isClosed()) { + continue; + } + if (model != null && model.getParentDepartmentId().equals("0")) { + JSONObject obj = new JSONObject(); + obj.put("id", model.getId()); + obj.put("pid", companyId); + obj.put("name", model.getNameI18N()); + obj.put("type", "department"); + JSONObject icon = new JSONObject(); + icon.put("icon", BpmOrgUtil.DEPARTMENT_ICON_CODE); + icon.put("color", BpmOrgUtil.DEPARTMENT_ICON_COLOR); + obj.put("icon", icon); + data.add(obj); + } + } + } + return data; + } + + private boolean isEmpty(List list) { + return (list == null || list.size() == 0); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/components/web/PALRepositoryTreeWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/components/web/PALRepositoryTreeWeb.java new file mode 100644 index 00000000..9e5dae3a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/components/web/PALRepositoryTreeWeb.java @@ -0,0 +1,315 @@ +package com.actionsoft.apps.coe.pal.components.web; + +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil; +import com.actionsoft.apps.coe.pal.util.StringHandleUtil; +import com.actionsoft.apps.coe.pal.util.UtilMapSort; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.i18n.I18nRes; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; + +import javax.rmi.CORBA.Util; +import java.util.*; + +/** + * @Description PAL流程树、关联组件 + * @Created by sunlh + * @Date 2020-09-03 + */ +public class PALRepositoryTreeWeb extends ActionWeb { + private UserContext _uc; + + public PALRepositoryTreeWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + /** + * 获取流程子节点 + * @param wsId + * @param teamId + * @param pid + * @return + */ + public String getPalRepositoryTreeData(String wsId, String teamId, String pid, String categorys) { + ResponseObject ro = ResponseObject.newOkResponse(); + if (UtilString.isEmpty(pid)) { + // 返回根节点数据 + ro.setData(PALRepositoryQueryAPIManager.getInstance().getPalRepositoryTreeRoot(_uc, wsId, categorys, teamId)); + return ro.toString(); + } + ro.setData(PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryTreeDataByPidNew(_uc, wsId, teamId, pid)); + return ro.toString(); + } + + /** + * 查询流程树 + * @param wsId + * @param teamId + * @param rootId + * @param categorys + * @param name + * @return + */ + public String searchPalRepositoryTreeData(String wsId, String teamId, String rootId, String categorys, String name) { + ResponseObject ro = ResponseObject.newOkResponse(); + // 获取模型列表 + List list = new ArrayList<>(); + if (!UtilString.isEmpty(rootId)) { + Set idSet = new HashSet<>(); + PALRepositoryCache.getAllChildrenModelsByPid(wsId, rootId, list, idSet); + } else { + Iterator iterator = PALRepositoryCache.getByWsId(wsId); + while (iterator.hasNext()) { + list.add(iterator.next()); + } + } + // 获取使用中且名称符合的,过滤掉大部分数据 + List tempList = new ArrayList<>(); + for (PALRepositoryModel model : list) { + if (model.isUse() && model.getName().toUpperCase().contains(name.toUpperCase())) { + tempList.add(model); + } + } + list = tempList; + // 过滤大分类 + if (!UtilString.isEmpty(categorys)) { + List tempList2 = new ArrayList<>(); + for (PALRepositoryModel model : list) { + if (categorys.contains(model.getMethodCategory())) { + tempList2.add(model); + } + } + list = tempList2; + } + // 过滤小组 + Set versionIds = CoeProcessLevelUtil.getPermRepositoryVersionIds(wsId, teamId, _uc.getUID(), null, null); + if (!UtilString.isEmpty(teamId)) { + List tempList3 = new ArrayList<>(); + for (PALRepositoryModel model : list) { + if (versionIds.contains(model.getVersionId())) { + tempList3.add(model); + } + } + list = tempList3; + } + List result = new ArrayList<>(); + for (PALRepositoryModel model : list) { + List names = new ArrayList<>(); + List path = new ArrayList<>(); + JSONArray repositoryPathData = CoeProcessLevelUtil.getRepositoryPath(model.getId()); + // 前面大类不显示,根据小组进行级别处理 + for (int i = 0; i < repositoryPathData.size(); i++) { + JSONObject currObj = repositoryPathData.getJSONObject(i); +// if (currObj.getString("id").length() < 36) { +// continue; +// } + PALRepositoryModel currModel = PALRepositoryCache.getCache().get(currObj.getString("id")); + if (currModel != null && versionIds.contains(currModel.getVersionId())) { + names.add(currModel.getName()); + path.add(currModel.getVersionId()); + } else if (currObj.getString("id").length() < 36) { + path.add(currObj.getString("id")); + } + } + JSONObject object = new JSONObject(); + object.put("pathName", StringUtils.join(names, ">")); + object.put("path", StringUtils.join(path, ",")); + object.put("id", model.getId()); + object.put("versionId", model.getVersionId()); + object.put("name", model.getName()); + result.add(object); + } + // 按照名称排序,构造返回内容 + Collections.sort(result, new Comparator() { + @Override + public int compare(JSONObject o1, JSONObject o2) { + return o2.getString("name").compareToIgnoreCase(o1.getString("name")); + } + }); + ro.setData(result); + return ro.toString(); + } + + /** + * 获取节点列表 + * @param id + * @return + */ + public String getShapeListById(String id) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryModel model = PALRepositoryCache.getCache().get(id); + List> list = CoeDesignerUtil.getShapeMessageJson(id); + if (list != null && list.size() > 0) { + for (Map map : list) { + map.put("category", I18nRes.findValue(super.getContext().getLanguage(), (String) map.get("category"))); + map.put("fileId", model.getId()); + map.put("fileName", model.getName()); + map.put("versionId", model.getVersionId()); + } + UtilMapSort mapSort = new UtilMapSort(); + mapSort.sort(list, "text", "string", null); + for (Map map : list) { + map.put("text", StringHandleUtil.replaceSpecialChart(map.get("text").toString())); + map.put("name", StringHandleUtil.replaceSpecialChart(map.get("name").toString())); + } + ro.put("list", list); + } else { + ro.put("list", new JSONArray()); + } + return ro.toString(); + } + + /** + * 根据versionIds查询模型文件 + * @param versionIds + * @return + */ + public String getPalRepositoryDataByVersionIds(String versionIds) { + ResponseObject ro = ResponseObject.newOkResponse(); + if (UtilString.isEmpty(versionIds)) { + return ro.toString(); + } + String[] versionIdArr = versionIds.split(","); + JSONArray result = new JSONArray(); + for (int i = 0; i < versionIdArr.length; i++) { + String versionId = versionIdArr[i]; + if (!UtilString.isEmpty(versionId)) { + List list = PALRepositoryCache.getByVersionId(versionId); + if (list != null && list.size() > 0) { + for (PALRepositoryModel model : list) { + if (model.isUse()) { + JSONObject obj = new JSONObject(); + obj.put("id", model.getVersionId()); + obj.put("currId", model.getId()); + obj.put("name", model.getName()); + obj.put("versionId", model.getVersionId()); + result.add(obj); + } + } + } + } + } + ro.setData(result); + return ro.toString(); + } + + /** + * 根据文件和形状id获取相关信息 + * @param fileIds + * @param shapeIds + * @return + */ + public String getPalRepositoryShapeDataByShapeIds(String fileIds, String shapeIds) { + ResponseObject ro = ResponseObject.newOkResponse(); + if (UtilString.isEmpty(fileIds)) { + return ro.toString(); + } + String[] fileIdArr = fileIds.split(","); + String[] shapeIdArr = shapeIds.split(","); + if (fileIdArr.length != shapeIdArr.length) { + return ro.toString(); + } + Map>> map = new HashMap<>(); + Map dataMap = new LinkedHashMap<>(); + Map shapes = new HashMap<>(); + for (int i = 0; i < fileIdArr.length; i++) { + String fileId = fileIdArr[i]; + String shapeId = shapeIdArr[i]; + if (UtilString.isNotEmpty(fileId)) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(fileId); + if (model != null) { + if (dataMap.containsKey(model.getId())) { + JSONObject obj = dataMap.get(model.getId()); + if (StringUtils.isEmpty(shapeId) || " ".equals(shapeId)){ + continue; + } + JSONArray children = obj.getJSONArray("children"); + List> list = null; + if (map.containsKey(model.getId())) { + list = map.get(model.getId()); + } else { + list = CoeDesignerUtil.getShapeMessageJson(model.getId()); + map.put(model.getId(), list); + } + if (list != null && list.size() > 0) { + for (Map shapeMap : list) { + if (shapeId.equals(shapeMap.get("id").toString())) { + JSONObject childObj = new JSONObject(); + childObj.put("shapeId", shapeId); + childObj.put("name", shapeMap.get("name").toString()); + children.add(childObj); + obj.put("children", children); + dataMap.put(model.getId(), obj); + + JSONObject shape = new JSONObject(); + shape.put("id", shapeId); + shape.put("name", shapeMap.get("name").toString()); + shape.put("fileId", model.getId()); + shape.put("fileName", model.getName()); + shape.put("versionId", model.getVersionId()); + shapes.put(shapeId, shape); + break; + } + } + } + } else { + JSONObject obj = new JSONObject(); + obj.put("id", model.getId()); + obj.put("name", model.getName()); + obj.put("versionId", model.getVersionId()); + if (StringUtils.isEmpty(shapeId) || " ".equals(shapeId)){ + obj.put("children", new JSONArray()); + dataMap.put(model.getId(), obj); + continue; + } + JSONArray children = new JSONArray(); + List> list = null; + if (map.containsKey(model.getId())) { + list = map.get(model.getId()); + } else { + list = CoeDesignerUtil.getShapeMessageJson(model.getId()); + map.put(model.getId(), list); + } + if (list != null && list.size() > 0) { + for (Map shapeMap : list) { + if (shapeId.equals(shapeMap.get("id").toString())) { + JSONObject childObj = new JSONObject(); + childObj.put("shapeId", shapeId); + childObj.put("name", shapeMap.get("name").toString()); + children.add(childObj); + obj.put("children", children); + dataMap.put(model.getId(), obj); + + JSONObject shape = new JSONObject(); + shape.put("id", shapeId); + shape.put("name", shapeMap.get("name").toString()); + shape.put("fileId", model.getId()); + shape.put("fileName", model.getName()); + shape.put("versionId", model.getVersionId()); + shapes.put(shapeId, shape); + break; + } + } + } + } + } + } + } + JSONArray result = new JSONArray(); + for(Map.Entry entry : dataMap.entrySet()) { + result.add(entry.getValue()); + } + ro.put("data", result); + ro.put("shapes", shapes); + return ro.toString(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/console/web/ConsoleWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/console/web/ConsoleWeb.java new file mode 100644 index 00000000..8416c362 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/console/web/ConsoleWeb.java @@ -0,0 +1,66 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.console.web; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.server.Quota; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.team.user.model.CoeUserModel; +import com.actionsoft.sdk.local.SDK; +import com.actionsoft.sdk.local.api.AppAPI; + +public class ConsoleWeb extends ActionWeb { + + private static final long serialVersionUID = -5233880576306054899L; + + private UserContext _uc; + + public ConsoleWeb(UserContext uc) { + super(uc); + this._uc = uc; + } + + public String getConsole(String condition) { + Map macroLibraries = new HashMap(); + macroLibraries.put("coePortal", "default"); + // macroLibraries.put("navMain", new NavigationWeb(_uc).getNavMain(condition)); + macroLibraries.put("sid", super.getContext().getSessionId()); + List records = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getCoeUserMainRecodes(0, 0); + if (Quota.getMaxCoEBPAUser() > records.size()) { + macroLibraries.put("isBPA", ""); + } else { + macroLibraries.put("isBPA", "style='display:none'"); + } + + if (_uc.getUID().equals("admin")) { + macroLibraries.put("isAdmin", ""); + } else { + macroLibraries.put("isAdmin", "display: none;"); + } + + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "console.home.htm", macroLibraries); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/constant/CoEConstant.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/constant/CoEConstant.java new file mode 100644 index 00000000..daeff33f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/constant/CoEConstant.java @@ -0,0 +1,36 @@ +package com.actionsoft.apps.coe.pal.constant; + +import java.util.Timer; + +public class CoEConstant { + + public static final String APP_ID = "com.actionsoft.apps.coe.pal"; //App name + + /** + * DC下资产库文件根目录 + */ + public static final String REPOSITORY_ROOT_DIR = "workspace"; + + public static final String PROPERTY_CUSTOM_DEFINE_SCHEMA = "CUSTOM_DEFINE_SCHEMA"; //属性-是否允许用户自定义,0:不允许;1:允许 + public static final String PROPERTY_DEFAULT_WSID = "DEFAULT_WSID"; //属性-默认的流程资产库Id + public static final String PROPERTY_PLDEPT_LAYER = "PLDEPT_LAYER"; //属性-流程责任部门组织级别 + public static final String PROPERTY_RELATION_TYPE = "RELATION_TYPE"; //属性-责任人和责任部门关联方式 + public static final String PROPERTY_SYS_AUTOSAVE = "SYS_AUTOSAVE"; //属性-流程自动保存 + + public static Timer timer1 = new Timer(); //用于清理设计器协作的同步消息 + public static final Timer timer2 = new Timer(); //用于清理设计器出现复制的同步消息 + + // 收藏模型文件标识 + public static final String COMMON_REPOSITORY_VERSIONID = "commonRepositoryVersionId"; + + public static final String APP_PROCESSLINK_ID = "com.actionsoft.apps.coe.pal.processlink";// 串联分析应用id + + public static final String APP_OUTPUT_ID = "com.actionsoft.apps.coe.pal.output";// 报告生成器应用id + + public static final String APP_OUTPUT_PR_ID = "com.actionsoft.apps.coe.pal.output.pr";// 流程手册应用id + + public static final String APP_ONLINE_DOC_ID = "com.actionsoft.apps.addons.onlinedoc";// 预览应用id + + public static final String APP_BATCH_ID = "com.actionsoft.apps.coe.pal.batch";// 流程批处理id + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/CoeCooperationAPIManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/CoeCooperationAPIManager.java new file mode 100644 index 00000000..096a38aa --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/CoeCooperationAPIManager.java @@ -0,0 +1,738 @@ +package com.actionsoft.apps.coe.pal.cooperation; + + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.cooperation.constant.CoeCooperationConst; +import com.actionsoft.apps.coe.pal.cooperation.dao.*; +import com.actionsoft.apps.coe.pal.cooperation.model.*; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUser; +import com.actionsoft.apps.coe.pal.team.user.model.CoeUserModel; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.DispatcherRequest; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.sdk.local.SDK; +import com.actionsoft.sdk.local.api.AppAPI; +import com.alibaba.fastjson.JSONArray; + +import javax.servlet.RequestDispatcher; +import java.sql.Timestamp; +import java.util.*; + +/** + * @Created by sunlh + * @Date 2020-12-01 + */ +public class CoeCooperationAPIManager { + + private static CoeCooperationAPIManager instance = new CoeCooperationAPIManager(); + + private CoeCooperationAPIManager() { + } + + public static CoeCooperationAPIManager getInstance() { + return instance; + } + + /** + * 是否安装并启动PAL小组应用 + * @return + */ + public boolean isInstall() { + return SDK.getAppAPI().isActive("com.actionsoft.apps.coe.pal.cooperation"); + } + + /** + * 删除PAL用户中不存在但是小组成员中存在的用户 + * 应用场景,PAL用户管理 + * @return + */ + public void syncCooperationMemberFromPal() { + CoeCooperationMemberDao memberDao = new CoeCooperationMemberDao(); + List memberModels = memberDao.getAllUserList(); + Set coopUserIds = new HashSet<>(); + for (CoeCooperationMemberModel memberModel : memberModels) { + coopUserIds.add(memberModel.getUserId()); + } + if (!coopUserIds.isEmpty()) { + List coeUserModels = new CoeUser().getCoeUsers(); + Set userIds = new HashSet<>(); + for (CoeUserModel user : coeUserModels) { + userIds.add(user.getUserId()); + } + for (String userId : coopUserIds) { + if (!userIds.contains(userId)) { + memberDao.remove(userId); + SDK.getLogAPI().consoleInfo("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "][删除]同步PAL用户,同步PAL用户至PAL小组成员,删除在PAL小组中存在但是不在PAL用户中存在的成员[" + userId + "]"); + } + } + } + } + + /** + * 获取小组信息,不区分是否启用中 + * @param teamId + * @return + */ + public CoeCooperationTeamModel queryCooperationTeamById(String teamId) { + CoeCooperationTeamDao dao = new CoeCooperationTeamDao(); + return dao.getInstance(teamId); + } + + /** + * 获取小组信息 + * @param teamId + * @param isRun 小组是否要求启用中 true启用中,false不限制 + * @return + */ + public CoeCooperationTeamModel queryCooperationTeamById(String teamId, boolean isRun) { + CoeCooperationTeamModel model = new CoeCooperationTeamDao().getInstance(teamId); + if (model != null && isRun) { + return CoeCooperationConst.TEAM_STATUS_RUN == model.getTeamStatus() ? model : null; + } + return model; + } + + /** + * 获取所有协作小组分类 + * @return + */ + public List queryCooperationCategoryList() { + CoeCooperationTeamDao dao = new CoeCooperationTeamDao(); + return dao.getCategoryList(); + } + + /** + * 获取小组的所有用户 + * @param teamId + * @return + */ + public List queryCooperationTeamMemberList(String teamId) { + CoeCooperationMemberDao dao = new CoeCooperationMemberDao(); + return dao.queryUserListByTeam(teamId); + } + + /** + * 获取小组的管理员用户 + * @param teamId + * @return + */ + public List queryCooperationAdminUsers(String teamId) { + CoeCooperationMemberDao dao = new CoeCooperationMemberDao(); + return dao.getCooperationAdminUsers(teamId, "0"); + } + + /** + * 指定用户是否是小组的管理员 + * @param teamId 小组ID + * @param userId 用户Id + * @return + */ + public boolean isTeamManager(String teamId, String userId) { + CoeCooperationMemberDao dao = new CoeCooperationMemberDao(); + List list = dao.getCooperationAdminUsers(teamId, "0"); + return list != null && list.contains(userId); + } + + /** + * 获取小组的模型访问权限数据 + * @param teamId + * @return + */ + public List queryCooperationTeamPermVerIds(String teamId) { + CoeCooperationTeamPermDao dao = new CoeCooperationTeamPermDao(); + return dao.getCooperationTeamPermVerIds(teamId); + } + + /** + * 查询小组的管理角色 + * @param teamId + * @return + */ + public CoeCooperationRoleModel queryCooperationManageRole(String teamId) { + List list = queryCooperationRoleByType(teamId, CoeCooperationConst.ROLE_TYPE_MANAGER); + if (list.size() > 0) { + return list.get(0); + } + return null; + } + + /** + * 查询小组的某类角色 + * @param teamId + * @param roleType + * @see CoeCooperationConst#ROLE_TYPE_MANAGER 管理员角色 + * @see CoeCooperationConst#ROLE_TYPE_DESIGNER 设计人员角色 + * @see CoeCooperationConst#ROLE_TYPE_VISITOR 浏览人员角色 + * @see CoeCooperationConst#ROLE_TYPE_CUSTOM 自定义角色合集 + * @return + */ + public List queryCooperationRoleByType(String teamId, int roleType) { + CoeCooperationRoleDao dao = new CoeCooperationRoleDao(); + return dao.getCooperationRoleByType(teamId, roleType); + } + + /** + * 创建默认角色(管理员、设计人员、浏览人员) + * 多用于创建小组阶段 + * @param teamId + * @return + */ + public boolean createCooperationDefaultRole(String teamId, String userId) { + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + // 全部数据权限、全部操作权限、全部应用权限、小组信息权限 + CoeCooperationRoleModel role1 = new CoeCooperationRoleModel(UUIDGener.getUUID(), teamId, "管理员", "拥有小组的管理权限,可以对小组信息和小组成员进行管理。", CoeCooperationConst.ROLE_TYPE_MANAGER, CoeCooperationConst.PERM_ALL, CoeCooperationConst.ACTION_WRITE + "," + CoeCooperationConst.ACTION_DELETE + "," + CoeCooperationConst.ACTION_VERSION, CoeCooperationConst.PERM_ALL, userId, nowTime, userId, nowTime); + // 全部数据权限、全部操作权限、全部应用权限 + CoeCooperationRoleModel role2 = new CoeCooperationRoleModel(UUIDGener.getUUID(), teamId, "设计成员", "拥有小组所有数据和功能权限,可以对小组内的资产进行管理。", CoeCooperationConst.ROLE_TYPE_DESIGNER, CoeCooperationConst.PERM_ALL, CoeCooperationConst.ACTION_WRITE + "," + CoeCooperationConst.ACTION_DELETE + "," + CoeCooperationConst.ACTION_VERSION, CoeCooperationConst.PERM_ALL, userId, nowTime, userId, nowTime); + // 全部数据权限、无操作权限、无流程梳理以外应用权限 + CoeCooperationRoleModel role3 = new CoeCooperationRoleModel(UUIDGener.getUUID(), teamId, "浏览成员", "拥有小组内所有数据的浏览权限", CoeCooperationConst.ROLE_TYPE_VISITOR, "", "", CoeCooperationConst.PERM_ALL, userId, nowTime, userId, nowTime); + List list = new ArrayList<>(); + list.add(role1); + list.add(role2); + list.add(role3); + return new CoeCooperationRoleDao().batchInsert(list); + } + + /** + * 批量创建小组角色 + * @param list + * @return + */ + public boolean createCooperationRoles(List list) { + return new CoeCooperationRoleDao().batchInsert(list); + } + + /** + * 创建小组角色 + * @param model + * @return + */ + public boolean createCooperationRole(CoeCooperationRoleModel model) { + int r = new CoeCooperationRoleDao().insert(model); + return r == 1; + } + + /** + * 修改小组角色 + * @param model + * @return + */ + public boolean updateCooperationRole(CoeCooperationRoleModel model) { + int r = new CoeCooperationRoleDao().update(model); + return r > 0; + } + + /** + * 创建小组 + * @param model + * @return + */ + public boolean createCooperationTeam(CoeCooperationTeamModel model) { + if (model == null) { + return false; + } + int r = new CoeCooperationTeamDao().insert(model); + if (r > 0) { + return true; + } + return false; + } + + /** + * 更新小组信息 + * @param teamId + * @param teamName + * @param category + * @param teamDesc + * @param teamLogo + * @param wsId + * @param updateUserId + * @return + */ + public Boolean updateCooperationTeam(String teamId, String teamName, String category, String teamDesc, String teamLogo, String wsId, String updateUserId) { + CoeCooperationTeamDao dao = new CoeCooperationTeamDao(); + return dao.updateCooperationTeam(teamId, teamName, category, teamDesc, teamLogo, wsId, updateUserId); + } + + /** + * 更新小组状态 + * @param teamId + * @param status 0启用/1停用 + * @see CoeCooperationConst#TEAM_STATUS_RUN + * @see CoeCooperationConst#TEAM_STATUS_STOP + * @return + */ + public Boolean updateCooperationTeamStatus(String teamId, int status) { + CoeCooperationTeamDao dao = new CoeCooperationTeamDao(); + if (status != CoeCooperationConst.TEAM_STATUS_STOP && status != CoeCooperationConst.TEAM_STATUS_RUN) { + return false; + } + return dao.updateCooperationTeamStatus(teamId, status); + } + + /** + * 创建小组成员 + * @param list + * @return + */ + public boolean createCooperationMemebers(List list) { + return new CoeCooperationMemberDao().batchInsert(list); + } + + /** + * 查询指定用户加入的小组,安装创建时间排序 + * @param userId 用户id + * @param isOnlyRunTeam 是否只包含启用中的小组,true:只获取启用小组,false:获取加入的启用和停用小组小组 + * @param isOnlyRunWorkspace 是否只包含启用中的资产库,true:只获取小组对应的启用资产库,false:不限制资产库状态 + * @return + */ + public List queryJoindTeamList(String userId, boolean isOnlyRunTeam, boolean isOnlyRunWorkspace) { + List result = new ArrayList<>(); + CoeCooperationMemberDao memberDao = new CoeCooperationMemberDao(); + List teamIdList = memberDao.queryTeamListByUser(userId); + if (teamIdList.size() > 0) { + for (String teamId : teamIdList) { + CoeCooperationTeamModel teamModel = queryCooperationTeamById(teamId); + if (teamModel != null) { + if (isOnlyRunTeam && CoeCooperationConst.TEAM_STATUS_STOP == teamModel.getTeamStatus()) { + continue; + } + if (isOnlyRunWorkspace && !PALRepositoryQueryAPIManager.getInstance().isActiveWorkSpace(teamModel.getWsId())) { + continue; + } + result.add(teamModel); + } + } + } + // 创建时间排序 + result.sort((t1, t2) -> t1.getCreateTime().compareTo(t2.getCreateTime())); + return result; + } + + /** + * 删除小组下的特定类别的角色下的所有成员 + * @param teamId + * @param roleType + * @see CoeCooperationConst#ROLE_TYPE_MANAGER 管理员角色 + * @see CoeCooperationConst#ROLE_TYPE_DESIGNER 设计人员角色 + * @see CoeCooperationConst#ROLE_TYPE_VISITOR 浏览人员角色 + * @see CoeCooperationConst#ROLE_TYPE_CUSTOM 自定义角色合集 + * @return + */ + public void removeCooperationMemebers(String teamId, int roleType) { + CoeCooperationRoleModel role = queryCooperationRoleByType(teamId, roleType).get(0); + new CoeCooperationMemberDao().remove(teamId, role.getId()); + } + + /** + * 删除某个具体角色下的所有成员 + * @param teamId + * @param roleId + */ + public void removeCooperationMemebers(String teamId, String roleId) { + new CoeCooperationMemberDao().remove(teamId, roleId); + } + + /** + * 删除某个小组下的指定用户 + * @param teamId + * @param userId + */ + public void removeCooperationMemeber(String teamId, String userId) { + new CoeCooperationMemberDao().removeUserByTeam(teamId, userId); + } + + /** + * 创建小组的模型数据权限 + * @param list + * @return + */ + public boolean createCooperationTeamPerms(List list) { + return new CoeCooperationTeamPermDao().batchInsert(list); + } + + /** + * 删除小组的模型数据权限配置 + * @param teamId + */ + public void removeCooperationTeamPerms(String teamId) { + new CoeCooperationTeamPermDao().removeByTeam(teamId); + } + + /** + * 根据资产库删除所有相关小组信息 + * @param wsId + */ + public void removeAllCooperationByWsId(String wsId) { + List list = new CoeCooperationTeamDao().getListByWsId(wsId); + for (CoeCooperationTeamModel team : list) { + removeAllCooperationByTeamId(team.getId()); + } + } + + /** + * 根据小组删除所有小组信息 + * @param teamId + */ + public void removeAllCooperationByTeamId(String teamId) { + new CoeCooperationRolePermDao().removeByTeam(teamId); + new CoeCooperationRoleDao().removeByTeam(teamId); + new CoeCooperationMemberDao().removeByTeam(teamId); + new CoeCooperationTeamPermDao().removeByTeam(teamId); + new CoeCooperationTeamDao().removeByTeam(teamId); + } + + /** + * 卸载PAL小组时删除所有数据 + */ + public void removeAllCooperation() { + new CoeCooperationRolePermDao().removeAll(); + new CoeCooperationRoleDao().removeAll(); + new CoeCooperationMemberDao().removeAll(); + new CoeCooperationTeamPermDao().removeAll(); + new CoeCooperationTeamDao().removeAll(); + } + + /** + * 获取个人权限下的模型数据集合 + * 数据集合中有可能会包含回收站中尚未彻底删除的权限数据 + * @param teamId + * @param userId + * @return versionIds 小组数据权限范围之内该角色(当前用户所属角色)下的数据权限交集 + */ + public List queryCooperationRoleDataPermByTeamUser(String teamId, String userId) { + return queryCooperationRoleDataPermByTeamUser(teamId, userId, false); + } + + /** + * 获取个人权限下的模型数据集合 + * @param teamId 小组id + * @param userId 用户id + * @param isValidPermData 是否只获取有效的流程 true:只获取流程表中有的数据 false:直接获取权限数据,可能会包含在回收站但是未彻底删除的数据 + * @return versionIds 小组数据权限范围之内该角色(当前用户所属角色)下的数据权限交集 + */ + public List queryCooperationRoleDataPermByTeamUser(String teamId, String userId, boolean isValidPermData) { + // 判断用户是否在小组中 + CoeCooperationMemberModel memberModel = new CoeCooperationMemberDao().getModelByTeamUser(teamId, userId); + if (memberModel != null) { + // 小组数据权限范围+该角色(当前用户所属角色)下的数据权限交集 + List teamPermVerList = queryCooperationTeamPermVerIds(teamId); + String roleId = memberModel.getRoleId(); + CoeCooperationRoleModel roleModel = new CoeCooperationRoleDao().getInstance(roleId); + if (CoeCooperationConst.PERM_ALL.equals(roleModel.getDataPerm())) { // 全部权限 + return teamPermVerList; + } else { + // 部分权限 + List rolePermList = new CoeCooperationRolePermDao().getRolePermListByRole(teamId, roleId); + // 获取交集 + List result = new ArrayList<>(); + if (rolePermList.size() > 0) { + for (String teamPermVer : teamPermVerList) { + if (rolePermList.contains(teamPermVer)) { + if (isValidPermData) {// 是否增加该流程是否在流程表的校验 + List verModels = PALRepositoryCache.getByVersionId(teamPermVer); + if (verModels != null && verModels.size() > 0) { + result.add(teamPermVer); + } + } else { + result.add(teamPermVer); + } + } + } + } + return result; + } + } + return new ArrayList<>(); + } + + /** + * 将模型文件加入PAL小组权限 + * @param uc + * @param teamId 小组id + * @param palVersionId 流程模型版本id + * @param addToTeamPerm 是否将权限加入小组数据权限中 + * @param addToRolePerm 是否将权限加入当前小组的该用户 + * @return + */ + public boolean addRepositoryToTeamAndRolePerm(UserContext uc, String teamId, String palVersionId, boolean addToTeamPerm, boolean addToRolePerm) { + String userId = uc.getUID(); + if (addToTeamPerm) { + // 获取现有数据权限,判断是否已存在 + List teamPermList = queryCooperationTeamPermVerIds(teamId); + if (!teamPermList.contains(palVersionId)) { + // 添加 + CoeCooperationTeamPermModel teamPerm = new CoeCooperationTeamPermModel(UUIDGener.getUUID(), teamId, palVersionId); + new CoeCooperationTeamPermDao().insert(teamPerm); + } + } + if (addToRolePerm) { + CoeCooperationMemberModel memberModel = new CoeCooperationMemberDao().getModelByTeamUser(teamId, userId); + String roleId = memberModel.getRoleId(); + CoeCooperationRoleModel roleModel = new CoeCooperationRoleDao().getInstance(roleId); + // 判断是否设定的默认全部权限 + if (!CoeCooperationConst.PERM_ALL.equals(roleModel.getDataPerm())) { + // 获取现有角色数据权限,判断是否已存在 + List rolePermList = new CoeCooperationRolePermDao().getRolePermListByRole(teamId, roleId); + if (!rolePermList.contains(palVersionId)) { + // 添加 + CoeCooperationRolePermModel rolePerm = new CoeCooperationRolePermModel(UUIDGener.getUUID(), teamId, roleId, palVersionId); + new CoeCooperationRolePermDao().insert(rolePerm); + } + } + } + return true; + } + + /** + * 查询用户在指定小组中的角色 + * @param teamId + * @param userId + * @return + */ + public CoeCooperationRoleModel queryCooperationRoleByUser(String teamId, String userId) { + return new CoeCooperationRoleDao().getCooperationRoleByUser(teamId, userId); + } + + /** + * 查询小组下的所有角色 + * 按照管理员/设计人员/浏览人员+剩余角色创建时间倒序排序 + * @param teamId + * @return + */ + public List queryCooperationRoleList(String teamId) { + List list = new CoeCooperationRoleDao().getCooperationRoleByTeam(teamId); + list.sort((r1, r2) -> { + int index = r1.getRoleType() - r2.getRoleType(); + if (index != 0) { + return index; + } + return r1.getCreateTime().compareTo(r2.getCreateTime()); + }); + return list; + } + + /** + * 更新用户的角色 + * @param teamId 小组Id + * @param userId 用户Id + * @param roleId 要更新的角色Id + * @param updateUser 更新人 + */ + public boolean updateCooperationUserRole(String teamId, String userId, String roleId, String updateUser) { + CoeCooperationMemberDao dao = new CoeCooperationMemberDao(); + return dao.updateCooperationUserRole(teamId, userId, roleId, updateUser); + } + + /** + * 获取角色下的模型数据权限 + * @param teamId + * @param roleId + * @return List palVersionId + */ + public List queryCooperationRoleDataPerms(String teamId, String roleId) { + return new CoeCooperationRolePermDao().getRolePermListByRole(teamId, roleId); + } + + /** + * 创建小组下角色的模型数据权限 + * @param list + * @return + */ + public boolean createCooperationRolePerms(List list) { + return new CoeCooperationRolePermDao().batchInsert(list); + } + + /** + * 删除小组下的角色信息 + * @param teamId + * @param roleId + */ + public void removeCooperationRole(String teamId, String roleId) { + removeCooperationRolePerms(teamId, roleId); + new CoeCooperationRoleDao().remove(teamId, roleId); + } + + /** + * 删除小组角色的模型数据权限配置 + * @param teamId + * @param roleId + */ + public void removeCooperationRolePerms(String teamId, String roleId) { + new CoeCooperationRolePermDao().removeByRole(teamId, roleId); + } + + + /** + * 获取小组成员的操作权限 + * @param teamId + * @param userId + * @param ro havingWritePerm、havingRemovePerm、havingVersionManagePerm 返回true false + */ + public void queryCooperationMemberActionPerm(String teamId, String userId, ResponseObject ro) { + // 权限获取 + boolean havingWritePerm = true; + boolean havingRemovePerm = true; + boolean havingVersionManagePerm = true; + int validUserPermDataCount = 0;// 当前小组成员有效(流程表中存在)的数据权限数量 + if (!UtilString.isEmpty(teamId) && isInstall()) { + CoeCooperationRoleModel role = queryCooperationRoleByUser(teamId, userId); + if (role != null) { + if (role.getActionPerm() == null) { + role.setActionPerm(""); + }; + havingWritePerm = role.getActionPerm().contains(CoeCooperationConst.ACTION_WRITE);// 新增、修改权限 + havingRemovePerm = role.getActionPerm().contains(CoeCooperationConst.ACTION_DELETE);// 删除权限 + havingVersionManagePerm = role.getActionPerm().contains(CoeCooperationConst.ACTION_VERSION);// 版本管理权限 + } + } + ro.put("havingWritePerm", havingWritePerm);// 新增、修改权限 + ro.put("havingRemovePerm", havingRemovePerm);// 删除权限 + ro.put("havingVersionManagePerm", havingVersionManagePerm);// 版本管理权限 + List permDataVerIdList = queryCooperationRoleDataPermByTeamUser(teamId, userId, true); + validUserPermDataCount = permDataVerIdList != null ? permDataVerIdList.size() : 0; + ro.put("validUserPermDataCount", validUserPermDataCount); + } + + /** + * 判断小组成员是否有某类操作权限 + * @param teamId + * @param userId + * @param actionType + * @see CoeCooperationConst#ACTION_WRITE + * @see CoeCooperationConst#ACTION_DELETE + * @see CoeCooperationConst#ACTION_VERSION + * @return + */ + private boolean compareRoleActionPerm(String teamId, String userId, String actionType) { + // 查询角色 + CoeCooperationRoleModel role = queryCooperationRoleByUser(teamId, userId); + if (role != null && role.getActionPerm() != null) { + return role.getActionPerm().contains(actionType); + } + return false; + } + + /** + * 小组成员是否有新增、修改的操作权限 + * @param teamId + * @param userId + * @return + */ + public boolean havingWritePerm(String teamId, String userId) { + return compareRoleActionPerm(teamId, userId, CoeCooperationConst.ACTION_WRITE); + } + + /** + * 小组成员是否有删除的操作权限 + * @param teamId + * @param userId + * @return + */ + public boolean havingRemovePerm(String teamId, String userId) { + return compareRoleActionPerm(teamId, userId, CoeCooperationConst.ACTION_DELETE); + } + + /** + * 小组成员是否有版本管理操作权限 + * @param teamId + * @param userId + * @return + */ + public boolean havingVersionManagePerm(String teamId, String userId) { + return compareRoleActionPerm(teamId, userId, CoeCooperationConst.ACTION_VERSION); + } + + /** + * 查询小组成员的应用权限 + * @param teamId + * @param userId + * @return + */ + public Set queryAppPerm(String teamId, String userId) { + CoeCooperationRoleModel role = queryCooperationRoleByUser(teamId, userId); + if (role != null) { + String appPerm = role.getAppPerm(); + if (appPerm == null) { + appPerm = ""; + } + if ("all".equals(appPerm)) { + // 获取所有的PAL小组扩展应用 + // 调用App + String sourceAppId = CoEConstant.APP_ID; + // aslp服务地址 + String aslp = "aslp://com.actionsoft.apps.coe.pal.cooperation/listApps"; + // 参数定义列表 + Map params = new HashMap(); + AppAPI appAPI = SDK.getAppAPI(); + //列出已注册的流程团队扩展App + ResponseObject ro = appAPI.callASLP(appAPI.getAppContext(sourceAppId), aslp, params); + if (ro.isOk()) { + JSONArray appArr = (JSONArray)((Map)ro.getData()).get("apps"); + Set result = new HashSet<>(); + for (int i = 0; i < appArr.size(); i++) { + result.add(appArr.getJSONObject(i).getString("id")); + } + return result; + } else { + SDK.getLogAPI().consoleWarn(ro.toString()); + } + } else { + return new HashSet<>(Arrays.asList(appPerm.split(","))); + } + } + return new HashSet<>(); + } + + /** + * 删除小组指定数据权限和小组角色指定数据权限 + * 用于彻底删除指定流程,例如回收站删除 + * @param palVerId pal模型versionId + */ + public void removeCooperationDataPerm(String palVerId) { + new CoeCooperationRolePermDao().removeByPalVersionId(palVerId); + new CoeCooperationTeamPermDao().removeByPalVersionId(palVerId); + } + + /** + * 根据文件id判断是否有小组和资产库访问权限 + * @param uuid + * @return + */ + public boolean hasRepositoryPermision(String uuid){ + PALRepositoryModel plModel = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + if (null == plModel){ + return false; + } + //资产库信息 + String wsId = plModel.getWsId(); + CoeWorkSpaceModel workSpaceModel = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getAllModel(wsId); + String uid = DispatcherRequest.getUserContext().getUID(); + if (null != workSpaceModel && workSpaceModel.getIsUse()==1 && workSpaceModel.getWsAdmin().contains(uid)){ + //资产库管理员权限 + return true; + }else { + //小组权限 + List teamModels = this.queryJoindTeamList(uid, true, true); + for (CoeCooperationTeamModel teamModel: teamModels){ + String teamId = teamModel.getId(); + List list = this.queryCooperationRoleDataPermByTeamUser(teamId, uid); + if (list.contains(plModel.getVersionId())){ + return true; + } + } + } + return false; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/constant/CoeCooperationConst.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/constant/CoeCooperationConst.java new file mode 100644 index 00000000..abdcf7c3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/constant/CoeCooperationConst.java @@ -0,0 +1,64 @@ +package com.actionsoft.apps.coe.pal.cooperation.constant; + +/** + * @Created by sunlh + * @Date 2020-12-01 + */ +public class CoeCooperationConst { + + /** + * 小组应用ID + */ + public final static String COOPERATION_ID = "com.actionsoft.apps.coe.pal.cooperation"; + + /** + * 小组状态:启动 + */ + public final static int TEAM_STATUS_RUN = 0; + + /** + * 小组状态:停用 + */ + public final static int TEAM_STATUS_STOP = 1; + + /** + * 角色:管理员 + */ + public final static int ROLE_TYPE_MANAGER = 0; + + /** + * 角色:设计人员 + */ + public final static int ROLE_TYPE_DESIGNER = 1; + + /** + * 角色:浏览人员 + */ + public final static int ROLE_TYPE_VISITOR = 2; + + /** + * 角色:自定义角色类型 + */ + public final static int ROLE_TYPE_CUSTOM = 3; + + /** + * 角色权限:应用全部权限、数据全部权限,操作权限没有全部 + */ + public final static String PERM_ALL = "all"; + + /** + * 角色操作权限:修改、新建 + */ + public static final String ACTION_WRITE = "w"; + + /** + * 角色操作权限:删除 + */ + public static final String ACTION_DELETE = "d"; + + /** + * 角色操作权限:版本管理 + */ + public static final String ACTION_VERSION = "v"; + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationMemberDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationMemberDao.java new file mode 100644 index 00000000..0b6cf3d3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationMemberDao.java @@ -0,0 +1,294 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao; + +import com.actionsoft.apps.coe.pal.cooperation.model.CoeCooperationMemberModel; +import com.actionsoft.apps.coe.pal.cooperation.model.CoeCooperationRoleModel; +import com.actionsoft.bpms.commons.database.RowMap; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.exception.AWSDataAccessException; + +import java.sql.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description 小组成员 + * @Created by sunlh + * @Date 2020-12-01 + */ +public class CoeCooperationMemberDao extends DaoObject { + + public CoeCooperationMemberDao() { + + } + + @Override + public int insert(CoeCooperationMemberModel model) throws AWSDataAccessException { + return 0; + } + + @Override + public int update(CoeCooperationMemberModel model) throws AWSDataAccessException { + return 0; + } + + @Override + public String entityName() { + return CoeCooperationMemberModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + /** + * 获取小组的用户 + * @param teamId + * @param roleType "0":管理员,"1":设计人员,"2":浏览人员,"3":自定义角色 + * @return + */ + public List getCooperationAdminUsers(String teamId, String roleType) { + String sql = "SELECT m.USERID FROM " + entityName() + " m, " + CoeCooperationRoleModel.DATABASE_ENTITY+ " r, ORGUSER o WHERE m.TEAMID = ? AND m.TEAMID = r.TEAMID AND m.ROLEID = r.ID AND r.ROLETYPE = ? AND o.USERID = m.USERID AND o.CLOSED = '0' ORDER BY o.USERNAME"; + try { + return DBSql.query(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }, new Object[]{teamId, roleType}); + } catch (AWSDataAccessException e) { + e.printStackTrace(System.err); + } + + return new ArrayList(); + } + + /** + * 批量插入 + * @param list + * @return + */ + public boolean batchInsert(List list) throws AWSDataAccessException{ + if (list == null || list.size() == 0) { + return false; + } + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + StringBuilder sql = new StringBuilder("INSERT INTO ").append(CoeCooperationMemberModel.DATABASE_ENTITY) + .append("(") + .append(CoeCooperationMemberModel.ID).append(",") + .append(CoeCooperationMemberModel.TEAMID).append(",") + .append(CoeCooperationMemberModel.USERID).append(",") + .append(CoeCooperationMemberModel.ROLEID).append(",") + .append(CoeCooperationMemberModel.CREATEUSER).append(",") + .append(CoeCooperationMemberModel.CREATETIME).append(",") + .append(CoeCooperationMemberModel.UPDATEUSER).append(",") + .append(CoeCooperationMemberModel.UPDATETIME).append(")") + .append(" VALUES (?,?,?,?,?,?,?,?)"); + prest = conn.prepareStatement(sql.toString(), ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (CoeCooperationMemberModel model : list) { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + if (model.getCreateTime() == null) { + model.setCreateTime(nowTime); + } + if (model.getUpdateTime() == null) { + model.setUpdateTime(nowTime); + } + prest.setString(1, model.getId()); + prest.setString(2, model.getTeamId()); + prest.setString(3, model.getUserId()); + prest.setString(4, model.getRoleId()); + prest.setString(5, model.getCreateUser()); + prest.setTimestamp(6, model.getCreateTime()); + prest.setString(7, model.getUpdateUser()); + prest.setTimestamp(8, model.getUpdateTime()); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, prest, null); + } + return false; + } + + /** + * 获取所有小组成员数据 + * @return + */ + public List getAllUserList() { + String sql = "SELECT * FROM " + entityName(); + return DBSql.query(sql, rowMapper()); + } + + /** + * 获取小组的管理员列表 + * @param teamId + * @return + */ + public List getManageUserList(String teamId) { + String sql = "SELECT member.* FROM " + entityName() + " member, " + CoeCooperationRoleModel.DATABASE_ENTITY + " role " + + "WHERE member.TEAMID = ? AND member.TEAMID = role.TEAMID AND member.ROLEID = role.ID AND role.ROLETYPE = 0"; + return DBSql.query(sql, rowMapper(), new Object[]{teamId}); + } + + /** + * 获取指定小组下的指定用户,若当前用户不在小组中,返回null + * @param teamId + * @param userId + * @return + */ + public CoeCooperationMemberModel getModelByTeamUser(String teamId, String userId) { + String sql = "SELECT * FROM " + entityName() + " WHERE "+ CoeCooperationMemberModel.TEAMID +" = ? AND " + CoeCooperationMemberModel.USERID + " = ?"; + return DBSql.getObject(sql, rowMapper(), new Object[]{teamId, userId}); + } + + /** + * 获取指定小组下的指定角色的用户 + * @param teamId + * @param roleId + * @return + */ + public List getModelByTeamRole(String teamId, String roleId) { + String sql = "SELECT * FROM " + entityName() + " WHERE "+ CoeCooperationMemberModel.TEAMID +" = ? AND " + CoeCooperationMemberModel.ROLEID + " = ?"; + return DBSql.query(sql, rowMapper(), new Object[]{teamId, roleId}); + } + + /** + * 删除小组下的指定角色用户 + * @param teamId + * @param roleId + * @return + */ + public void remove(String teamId, String roleId) throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName() + + " WHERE " + CoeCooperationMemberModel.TEAMID + "=? " + + "AND " + CoeCooperationMemberModel.ROLEID + "=?"; + DBSql.update(sql, new Object[]{teamId, roleId}); + } + + /** + * 删除指定用户(所有小组) + * @param userId + * @return + */ + public void remove(String userId) throws AWSDataAccessException { + String sql = "DELETE FROM " + entityName() + + " WHERE " + CoeCooperationMemberModel.USERID + "=?"; + DBSql.update(sql, new Object[]{userId}); + } + + /** + * 删除小组下的指定用户 + * @param teamId + * @param userId + * @return + */ + public void removeUserByTeam(String teamId, String userId) throws AWSDataAccessException { + String sql = "DELETE FROM " + entityName() + + " WHERE " + CoeCooperationMemberModel.TEAMID + "=? " + + "AND " + CoeCooperationMemberModel.USERID + "=?"; + DBSql.update(sql, new Object[]{teamId, userId}); + } + + /** + * 查询用户加入的小组列表(不考虑小组状态) + * @param userId + * @return + */ + public List queryTeamListByUser(String userId) { + String sql = "SELECT distinct " + CoeCooperationMemberModel.TEAMID + " FROM " + entityName() + " WHERE " + CoeCooperationMemberModel.USERID + "=?"; + try { + return DBSql.query(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }, new Object[]{userId}); + } catch (AWSDataAccessException e) { + e.printStackTrace(System.err); + } + return new ArrayList(); + } + + /** + * 根据小组查询所有成员 + * @param teamId + * @return + */ + public List queryUserListByTeam(String teamId) { + String sql = "SELECT * FROM " + CoeCooperationMemberModel.DATABASE_ENTITY + " WHERE " + CoeCooperationMemberModel.TEAMID + " = ? ORDER BY " + CoeCooperationMemberModel.CREATETIME; + return DBSql.query(sql, rowMapper(), new Object[]{teamId}); + } + + /** + * 根据小组删除相关数据 + * @param teamId + */ + public void removeByTeam(String teamId) throws AWSDataAccessException { + String sql = "DELETE FROM " + entityName() + + " WHERE " + CoeCooperationMemberModel.TEAMID + "=?"; + DBSql.update(sql, new Object[]{teamId}); + } + + /** + * 更新用户的角色 + * @param teamId + * @param userId + * @param roleId + */ + public boolean updateCooperationUserRole(String teamId, String userId, String roleId, String updateUser) throws AWSDataAccessException { + String updateSql = "UPDATE "+ entityName() + + " SET "+ CoeCooperationMemberModel.ROLEID +"=?," + CoeCooperationMemberModel.UPDATETIME + "=?," + CoeCooperationMemberModel.UPDATEUSER + "=? " + + "WHERE "+ CoeCooperationMemberModel.TEAMID +"=? AND " + CoeCooperationMemberModel.USERID + "=?"; + int r = DBSql.update(updateSql, new Object[] {roleId, new Timestamp(System.currentTimeMillis()), updateUser, teamId, userId}); + return r > 0 ? true : false; + } + + /** + * 删除所有 + */ + public void removeAll() throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName(); + DBSql.update(sql); + } + + private class Mapper implements RowMapper { + public CoeCooperationMemberModel mapRow(ResultSet rset, int rowNum) throws SQLException { + CoeCooperationMemberModel model = new CoeCooperationMemberModel(); + try { + model.setId(rset.getString(CoeCooperationMemberModel.ID)); + model.setTeamId(rset.getString(CoeCooperationMemberModel.TEAMID)); + model.setUserId(rset.getString(CoeCooperationMemberModel.USERID)); + model.setRoleId(rset.getString(CoeCooperationMemberModel.ROLEID)); + model.setCreateUser(rset.getString(CoeCooperationMemberModel.CREATEUSER)); + model.setCreateTime(rset.getTimestamp(CoeCooperationMemberModel.CREATETIME)); + model.setUpdateUser(rset.getString(CoeCooperationMemberModel.UPDATEUSER)); + model.setUpdateTime(rset.getTimestamp(CoeCooperationMemberModel.UPDATETIME)); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationRoleDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationRoleDao.java new file mode 100644 index 00000000..1cba8cca --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationRoleDao.java @@ -0,0 +1,249 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao; + +import com.actionsoft.apps.coe.pal.cooperation.constant.CoeCooperationConst; +import com.actionsoft.apps.coe.pal.cooperation.model.CoeCooperationMemberModel; +import com.actionsoft.apps.coe.pal.cooperation.model.CoeCooperationRoleModel; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.exception.AWSDataAccessException; + +import java.sql.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description TODO + * @Created by sunlh + * @Date 2020-12-01 + */ +public class CoeCooperationRoleDao extends DaoObject { + + public CoeCooperationRoleDao() { + + } + + @Override + public int insert(CoeCooperationRoleModel model) throws AWSDataAccessException { + if (model == null) { + return 0; + } + Connection conn = DBSql.open(); + int r = 0; + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + Map paraMap = new HashMap(); + paraMap.put(CoeCooperationRoleModel.ID, model.getId()); + paraMap.put(CoeCooperationRoleModel.TEAMID, model.getTeamId()); + paraMap.put(CoeCooperationRoleModel.ROLENAME, model.getRoleName()); + paraMap.put(CoeCooperationRoleModel.ROLEDESC, model.getRoleDesc()); + paraMap.put(CoeCooperationRoleModel.ROLETYPE, model.getRoleType()); + paraMap.put(CoeCooperationRoleModel.APPPERM, model.getAppPerm()); + paraMap.put(CoeCooperationRoleModel.ACTIONPERM, model.getActionPerm()); + paraMap.put(CoeCooperationRoleModel.DATAPERM, model.getDataPerm()); + paraMap.put(CoeCooperationRoleModel.CREATEUSER, model.getCreateUser()); + paraMap.put(CoeCooperationRoleModel.CREATETIME, model.getCreateTime()); + paraMap.put(CoeCooperationRoleModel.UPDATEUSER, model.getUpdateUser()); + paraMap.put(CoeCooperationRoleModel.UPDATETIME, model.getUpdateTime()); + String sql = DBSql.getInsertStatement(entityName(), paraMap); + r = DBSql.update(conn, sql, paraMap); + DBSql.close(conn); + return r; + } + + @Override + public int update(CoeCooperationRoleModel model) throws AWSDataAccessException { + String updateSql = "UPDATE "+ entityName() + + " SET "+ CoeCooperationRoleModel.ROLENAME +"=?, " + + CoeCooperationRoleModel.ROLEDESC +"=?, " + + CoeCooperationRoleModel.ROLETYPE +"=?, " + + CoeCooperationRoleModel.APPPERM +"=?, " + + CoeCooperationRoleModel.ACTIONPERM +"=?, " + + CoeCooperationRoleModel.DATAPERM +"=?, " + + CoeCooperationRoleModel.UPDATETIME +"=?, " + + CoeCooperationRoleModel.UPDATEUSER +"=? " + + "WHERE "+ CoeCooperationRoleModel.ID +"=? "; + return DBSql.update(updateSql, new Object[] { model.getRoleName(), model.getRoleDesc(), model.getRoleType(), model.getAppPerm(), model.getActionPerm(), model.getDataPerm(), model.getUpdateTime(), model.getUpdateUser(), model.getId()}); + } + + @Override + public String entityName() { + return CoeCooperationRoleModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + /** + * 获取小组信息 + * @params teamId + * @return + */ + public CoeCooperationRoleModel getInstance(String roleId) { + String sql = "SELECT * FROM " + entityName() + " WHERE ID = ?"; + return DBSql.getObject(sql, rowMapper(), new Object[]{roleId}); + } + + /** + * 批量插入 + * @param list + * @return + */ + public boolean batchInsert(List list) throws AWSDataAccessException { + if (list == null || list.size() == 0) { + return false; + } + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + StringBuilder sql = new StringBuilder("INSERT INTO ").append(CoeCooperationRoleModel.DATABASE_ENTITY) + .append("(") + .append(CoeCooperationRoleModel.ID).append(",") + .append(CoeCooperationRoleModel.TEAMID).append(",") + .append(CoeCooperationRoleModel.ROLENAME).append(",") + .append(CoeCooperationRoleModel.ROLEDESC).append(",") + .append(CoeCooperationRoleModel.ROLETYPE).append(",") + .append(CoeCooperationRoleModel.APPPERM).append(",") + .append(CoeCooperationRoleModel.ACTIONPERM).append(",") + .append(CoeCooperationRoleModel.DATAPERM).append(",") + .append(CoeCooperationRoleModel.CREATEUSER).append(",") + .append(CoeCooperationRoleModel.CREATETIME).append(",") + .append(CoeCooperationRoleModel.UPDATEUSER).append(",") + .append(CoeCooperationRoleModel.UPDATETIME).append(")") + .append(" VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"); + prest = conn.prepareStatement(sql.toString(), ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (CoeCooperationRoleModel model : list) { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + if (model.getCreateTime() == null) { + model.setCreateTime(nowTime); + } + if (model.getUpdateTime() == null) { + model.setUpdateTime(nowTime); + } + prest.setString(1, model.getId()); + prest.setString(2, model.getTeamId()); + prest.setString(3, model.getRoleName()); + prest.setString(4, model.getRoleDesc()); + prest.setInt(5, model.getRoleType()); + prest.setString(6, model.getAppPerm()); + prest.setString(7, model.getActionPerm()); + prest.setString(8, model.getDataPerm()); + prest.setString(9, model.getCreateUser()); + prest.setTimestamp(10, model.getCreateTime()); + prest.setString(11, model.getUpdateUser()); + prest.setTimestamp(12, model.getUpdateTime()); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, prest, null); + } + return false; + } + + /** + * 根据小组和角色类型查询角色 + * @param teamId + * @param roleType + * @see CoeCooperationConst#ROLE_TYPE_MANAGER + * @see CoeCooperationConst#ROLE_TYPE_DESIGNER + * @see CoeCooperationConst#ROLE_TYPE_VISITOR + * @see CoeCooperationConst#ROLE_TYPE_CUSTOM + * @return + */ + public List getCooperationRoleByType(String teamId, int roleType) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + CoeCooperationRoleModel.TEAMID + " =? AND "+ CoeCooperationRoleModel.ROLETYPE +" =?"; + return DBSql.query(sql, rowMapper(), new Object[]{teamId, roleType}); + } + + /** + * 根据小组查询角色 + * @param teamId + * @return + */ + public List getCooperationRoleByTeam(String teamId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + CoeCooperationRoleModel.TEAMID + " =?"; + return DBSql.query(sql, rowMapper(), new Object[]{teamId}); + } + + /** + * 查询用户在某小组的角色 + * @param teamId + * @param userId + * @return + */ + public CoeCooperationRoleModel getCooperationRoleByUser(String teamId, String userId) { + String sql = "SELECT r.* FROM " + entityName() + " r, " + CoeCooperationMemberModel.DATABASE_ENTITY + " m WHERE r." + CoeCooperationRoleModel.TEAMID + " =? AND r."+ CoeCooperationRoleModel.TEAMID +" = m." + CoeCooperationMemberModel.TEAMID + " AND r." + CoeCooperationRoleModel.ID + "= m." + CoeCooperationMemberModel.ROLEID + " AND m." + CoeCooperationMemberModel.USERID + "=?"; + return DBSql.getObject(sql, rowMapper(), new Object[]{teamId, userId}); + } + + /** + * 根据小组删除相关数据 + * @param teamId + */ + public void removeByTeam(String teamId) throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName() + + " WHERE " + CoeCooperationRoleModel.TEAMID + "=?"; + DBSql.update(sql, new Object[]{teamId}); + } + + /** + * 删除小组下的角色 + * @param teamId + */ + public void remove(String teamId, String roleId) throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName() + + " WHERE " + CoeCooperationRoleModel.TEAMID + "=? AND " + CoeCooperationRoleModel.ID + "=?"; + DBSql.update(sql, new Object[]{teamId, roleId}); + } + + /** + * 删除所有 + */ + public void removeAll() throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName(); + DBSql.update(sql); + } + + private class Mapper implements RowMapper { + public CoeCooperationRoleModel mapRow(ResultSet rset, int rowNum) throws SQLException { + CoeCooperationRoleModel model = new CoeCooperationRoleModel(); + try { + model.setId(rset.getString(CoeCooperationRoleModel.ID)); + model.setTeamId(rset.getString(CoeCooperationRoleModel.TEAMID)); + model.setRoleName(rset.getString(CoeCooperationRoleModel.ROLENAME)); + model.setRoleDesc(rset.getString(CoeCooperationRoleModel.ROLEDESC)); + model.setRoleType(rset.getInt(CoeCooperationRoleModel.ROLETYPE)); + model.setAppPerm(rset.getString(CoeCooperationRoleModel.APPPERM)); + model.setActionPerm(rset.getString(CoeCooperationRoleModel.ACTIONPERM)); + model.setDataPerm(rset.getString(CoeCooperationRoleModel.DATAPERM)); + model.setCreateUser(rset.getString(CoeCooperationRoleModel.CREATEUSER)); + model.setCreateTime(rset.getTimestamp(CoeCooperationRoleModel.CREATETIME)); + model.setUpdateUser(rset.getString(CoeCooperationRoleModel.UPDATEUSER)); + model.setUpdateTime(rset.getTimestamp(CoeCooperationRoleModel.UPDATETIME)); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationRolePermDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationRolePermDao.java new file mode 100644 index 00000000..9e9d651b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationRolePermDao.java @@ -0,0 +1,184 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao; + +import com.actionsoft.apps.coe.pal.cooperation.model.CoeCooperationRoleModel; +import com.actionsoft.apps.coe.pal.cooperation.model.CoeCooperationRolePermModel; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.exception.AWSDataAccessException; + +import java.sql.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description TODO + * @Created by sunlh + * @Date 2020-12-01 + */ +public class CoeCooperationRolePermDao extends DaoObject { + + public CoeCooperationRolePermDao() { + + } + + @Override + public int insert(CoeCooperationRolePermModel model) throws AWSDataAccessException { + if (model == null) { + return 0; + } + Connection conn = DBSql.open(); + int r = 0; + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + Map paraMap = new HashMap(); + paraMap.put(CoeCooperationRolePermModel.ID, model.getId()); + paraMap.put(CoeCooperationRolePermModel.TEAMID, model.getTeamId()); + paraMap.put(CoeCooperationRolePermModel.ROLEID, model.getRoleId()); + paraMap.put(CoeCooperationRolePermModel.PALVERSIONID, model.getPalVersionId()); + String sql = DBSql.getInsertStatement(entityName(), paraMap); + r = DBSql.update(conn, sql, paraMap); + DBSql.close(conn); + return r; + } + + @Override + public int update(CoeCooperationRolePermModel coeCooperationRolePermModel) throws AWSDataAccessException { + return 0; + } + + @Override + public String entityName() { + return CoeCooperationRolePermModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + /** + * 获取指定角色下的数据权限 + * @param teamId + * @param roleId + * @return + */ + public List getRolePermListByRole(String teamId, String roleId) { + String sql = "SELECT "+ CoeCooperationRolePermModel.PALVERSIONID +" FROM " + entityName() + " WHERE " + CoeCooperationRolePermModel.TEAMID + " =? AND "+ CoeCooperationRolePermModel.ROLEID +" =?"; + try { + return DBSql.query(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }, new Object[]{teamId, roleId}); + } catch (AWSDataAccessException e) { + e.printStackTrace(System.err); + } + return new ArrayList(); + } + + /** + * 根据小组删除相关数据 + * @param teamId + */ + public void removeByTeam(String teamId) throws AWSDataAccessException { + String sql = "DELETE FROM " + entityName() + " WHERE " + CoeCooperationRolePermModel.TEAMID + "=?"; + DBSql.update(sql, new Object[]{teamId}); + } + + /** + * 根据小组角色的模型数据权限相关数据 + * @param palVerId + */ + public void removeByPalVersionId(String palVerId) throws AWSDataAccessException { + String sql = "DELETE FROM " + entityName() + " WHERE " + CoeCooperationRolePermModel.PALVERSIONID + "=?"; + DBSql.update(sql, new Object[]{palVerId}); + } + + /** + * 根据小组和角色删除相关数据 + * @param teamId + * @param roleId + */ + public void removeByRole(String teamId, String roleId) throws AWSDataAccessException { + String sql = "DELETE FROM " + entityName() + + " WHERE " + CoeCooperationRolePermModel.TEAMID + "=? AND " + CoeCooperationRolePermModel.ROLEID + "=?"; + DBSql.update(sql, new Object[]{teamId, roleId}); + } + + /** + * 批量插入 + * @param list + * @return + */ + public boolean batchInsert(List list) throws AWSDataAccessException { + if (list == null || list.size() == 0) { + return false; + } + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + StringBuilder sql = new StringBuilder("INSERT INTO ").append(CoeCooperationRolePermModel.DATABASE_ENTITY) + .append("(") + .append(CoeCooperationRolePermModel.ID).append(",") + .append(CoeCooperationRolePermModel.TEAMID).append(",") + .append(CoeCooperationRolePermModel.ROLEID).append(",") + .append(CoeCooperationRolePermModel.PALVERSIONID).append(")") + .append(" VALUES (?,?,?,?)"); + prest = conn.prepareStatement(sql.toString(), ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (CoeCooperationRolePermModel model : list) { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + prest.setString(1, model.getId()); + prest.setString(2, model.getTeamId()); + prest.setString(3, model.getRoleId()); + prest.setString(4, model.getPalVersionId()); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, prest, null); + } + return false; + } + + /** + * 删除所有 + */ + public void removeAll() throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName(); + DBSql.update(sql); + } + + private class Mapper implements RowMapper { + public CoeCooperationRolePermModel mapRow(ResultSet rset, int rowNum) throws SQLException { + CoeCooperationRolePermModel model = new CoeCooperationRolePermModel(); + try { + model.setId(rset.getString(CoeCooperationRolePermModel.ID)); + model.setTeamId(rset.getString(CoeCooperationRolePermModel.TEAMID)); + model.setRoleId(rset.getString(CoeCooperationRolePermModel.ROLEID)); + model.setPalVersionId(rset.getString(CoeCooperationRolePermModel.PALVERSIONID)); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationTeamDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationTeamDao.java new file mode 100644 index 00000000..83ee76b0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationTeamDao.java @@ -0,0 +1,207 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao; + +import com.actionsoft.apps.coe.pal.cooperation.model.CoeCooperationMemberModel; +import com.actionsoft.apps.coe.pal.cooperation.model.CoeCooperationTeamModel; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.exception.AWSDataAccessException; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description 小组 + * @Created by sunlh + * @Date 2020-12-01 + */ +public class CoeCooperationTeamDao extends DaoObject { + + public CoeCooperationTeamDao() { + + } + + @Override + public int insert(CoeCooperationTeamModel model) throws AWSDataAccessException { + if (model == null) { + return 0; + } + Connection conn = DBSql.open(); + int r = 0; + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + if (UtilString.isEmpty(model.getTeamLogo())) { + model.setTeamLogo("{\"code\":\"\",\"color\":\"#009688\"}"); + } + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + if (model.getCreateTime() == null) { + model.setCreateTime(nowTime); + } + if (model.getUpdateTime() == null) { + model.setUpdateTime(nowTime); + } + Map paraMap = new HashMap(); + paraMap.put(CoeCooperationTeamModel.ID, model.getId()); + paraMap.put(CoeCooperationTeamModel.TEAMNAME, model.getTeamName()); + paraMap.put(CoeCooperationTeamModel.TEAMDESC, model.getTeamDesc()); + paraMap.put(CoeCooperationTeamModel.TEAMLOGO, model.getTeamLogo()); + paraMap.put(CoeCooperationTeamModel.TEAMSTATUS, model.getTeamStatus()); + paraMap.put(CoeCooperationTeamModel.CATEGORY, model.getCategory()); + paraMap.put(CoeCooperationTeamModel.WSID, model.getWsId()); + paraMap.put(CoeCooperationTeamModel.CREATEUSER, model.getCreateUser()); + paraMap.put(CoeCooperationTeamModel.CREATETIME, model.getCreateTime()); + paraMap.put(CoeCooperationTeamModel.UPDATEUSER, model.getUpdateUser()); + paraMap.put(CoeCooperationTeamModel.UPDATETIME, model.getUpdateTime()); + String sql = DBSql.getInsertStatement(entityName(), paraMap); + r = DBSql.update(conn, sql, paraMap); + DBSql.close(conn); + return r; + } + + @Override + public int update(CoeCooperationTeamModel coeCooperationTeamModel) throws AWSDataAccessException { + return 0; + } + + @Override + public String entityName() { + return CoeCooperationTeamModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + /** + * 获取小组信息 + * @params teamId + * @return + */ + public CoeCooperationTeamModel getInstance(String teamId) { + String sql = "SELECT * FROM " + entityName() + " WHERE ID = ?"; + return DBSql.getObject(sql, rowMapper(), new Object[]{teamId}); + } + + /** + * 获取所有小组分类 + * + * @return + */ + public List getCategoryList() { + String sql = "SELECT CATEGORY FROM " + entityName() + " GROUP BY CATEGORY"; + try { + return DBSql.query(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }); + } catch (AWSDataAccessException e) { + e.printStackTrace(System.err); + } + + return new ArrayList(); + } + + /** + * 根据资产库id获取小组列表 + * @param wsId + * @return + */ + public List getListByWsId(String wsId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + CoeCooperationTeamModel.WSID + " = ?"; + return DBSql.query(sql, rowMapper(), new Object[]{wsId}); + } + + /** + * 更新小组信息 + * @param teamName 名称 + * @param category 分类 + * @param teamDesc 描述 + * @param teamLogo icon + * @param wsId 资产库 + * @param updateUserId 更新人 + * @return + */ + public Boolean updateCooperationTeam(String teamId, String teamName, String category, String teamDesc, String teamLogo, String wsId, String updateUserId) throws AWSDataAccessException { + if (UtilString.isEmpty(teamId) || UtilString.isEmpty(category) || UtilString.isEmpty(wsId) || UtilString.isEmpty(updateUserId)) { + return false; + } + String updateSql = "UPDATE "+ entityName() + + " SET "+ CoeCooperationTeamModel.TEAMNAME +"=?, " + + CoeCooperationTeamModel.CATEGORY +"=?, " + + CoeCooperationTeamModel.TEAMDESC +"=?, " + + CoeCooperationTeamModel.TEAMLOGO +"=?, " + + CoeCooperationTeamModel.WSID +"=?, " + + CoeCooperationTeamModel.UPDATETIME +"=?, " + + CoeCooperationTeamModel.UPDATEUSER +"=? " + + "WHERE "+ CoeCooperationTeamModel.ID +"=? "; + int r = DBSql.update(updateSql, new Object[] { teamName, category, teamDesc, teamLogo, wsId, new Timestamp(System.currentTimeMillis()), updateUserId, teamId}); + return r > 0 ? true : false; + } + + /** + * 根据小组删除相关数据 + * @param teamId + */ + public void removeByTeam(String teamId) throws AWSDataAccessException { + String sql = "DELETE FROM " + entityName() + + " WHERE " + CoeCooperationTeamModel.ID + "=?"; + DBSql.update(sql, new Object[]{teamId}); + } + + /** + * 更新小组状态 + * @param teamId + * @param status + * @return + */ + public Boolean updateCooperationTeamStatus(String teamId, int status) throws AWSDataAccessException { + String updateSql = "UPDATE "+ entityName() + + " SET "+ CoeCooperationTeamModel.TEAMSTATUS +"=? " + + "WHERE "+ CoeCooperationTeamModel.ID +"=? "; + int r = DBSql.update(updateSql, new Object[] {status, teamId}); + return r > 0 ? true : false; + } + + /** + * 删除所有 + */ + public void removeAll() throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName(); + DBSql.update(sql); + } + + private class Mapper implements RowMapper { + public CoeCooperationTeamModel mapRow(ResultSet rset, int rowNum) throws SQLException { + CoeCooperationTeamModel model = new CoeCooperationTeamModel(); + try { + model.setId(rset.getString(CoeCooperationTeamModel.ID)); + model.setWsId(rset.getString(CoeCooperationTeamModel.WSID)); + model.setCategory(rset.getString(CoeCooperationTeamModel.CATEGORY)); + model.setTeamName(rset.getString(CoeCooperationTeamModel.TEAMNAME)); + model.setTeamLogo(rset.getString(CoeCooperationTeamModel.TEAMLOGO)); + model.setTeamDesc(rset.getString(CoeCooperationTeamModel.TEAMDESC)); + model.setTeamStatus(rset.getInt(CoeCooperationTeamModel.TEAMSTATUS)); + model.setCreateUser(rset.getString(CoeCooperationTeamModel.CREATEUSER)); + model.setCreateTime(rset.getTimestamp(CoeCooperationTeamModel.CREATETIME)); + model.setUpdateUser(rset.getString(CoeCooperationTeamModel.UPDATEUSER)); + model.setUpdateTime(rset.getTimestamp(CoeCooperationTeamModel.UPDATETIME)); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationTeamPermDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationTeamPermDao.java new file mode 100644 index 00000000..68c7f510 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/CoeCooperationTeamPermDao.java @@ -0,0 +1,171 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao; + +import com.actionsoft.apps.coe.pal.cooperation.model.CoeCooperationTeamPermModel; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.exception.AWSDataAccessException; + +import java.sql.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description TODO + * @Created by sunlh + * @Date 2020-12-01 + */ +public class CoeCooperationTeamPermDao extends DaoObject { + + public CoeCooperationTeamPermDao() { + + } + + @Override + public int insert(CoeCooperationTeamPermModel model) throws AWSDataAccessException { + if (model == null) { + return 0; + } + Connection conn = DBSql.open(); + int r = 0; + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + Map paraMap = new HashMap(); + paraMap.put(CoeCooperationTeamPermModel.ID, model.getId()); + paraMap.put(CoeCooperationTeamPermModel.TEAMID, model.getTeamId()); + paraMap.put(CoeCooperationTeamPermModel.PALVERSIONID, model.getPalVersionId()); + String sql = DBSql.getInsertStatement(entityName(), paraMap); + r = DBSql.update(conn, sql, paraMap); + DBSql.close(conn); + return r; + } + + @Override + public int update(CoeCooperationTeamPermModel coeCooperationTeamPermModel) throws AWSDataAccessException { + return 0; + } + + @Override + public String entityName() { + return CoeCooperationTeamPermModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + /** + * 获取小组的模型数据访问权限配置 + * @param teamId + * @return + */ + public List getCooperationTeamPermVerIds(String teamId) { + String sql = "SELECT " + CoeCooperationTeamPermModel.PALVERSIONID + " from " + entityName() + " WHERE "+ CoeCooperationTeamPermModel.TEAMID +"=?"; + try { + return DBSql.query(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }, new Object[]{teamId}); + } catch (AWSDataAccessException e) { + e.printStackTrace(System.err); + } + + return new ArrayList(); + } + + /** + * 批量插入 + * @param list + * @return + */ + public boolean batchInsert(List list) throws AWSDataAccessException { + if (list == null || list.size() == 0) { + return false; + } + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + StringBuilder sql = new StringBuilder("INSERT INTO ").append(CoeCooperationTeamPermModel.DATABASE_ENTITY) + .append("(") + .append(CoeCooperationTeamPermModel.ID).append(",") + .append(CoeCooperationTeamPermModel.TEAMID).append(",") + .append(CoeCooperationTeamPermModel.PALVERSIONID).append(")") + .append(" VALUES (?,?,?)"); + prest = conn.prepareStatement(sql.toString(), ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (CoeCooperationTeamPermModel model : list) { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + prest.setString(1, model.getId()); + prest.setString(2, model.getTeamId()); + prest.setString(3, model.getPalVersionId()); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, prest, null); + } + return false; + } + + /** + * 删除小组的模型数据权限配置 + * @param teamId + */ + public void removeByTeam(String teamId) throws AWSDataAccessException { + String sql = "DELETE FROM " + entityName() + + " WHERE " + CoeCooperationTeamPermModel.TEAMID + "=?"; + DBSql.update(sql, new Object[]{teamId}); + } + + /** + * 删除小组的模型数据权限配置 + * @param palVerId + */ + public void removeByPalVersionId(String palVerId) throws AWSDataAccessException { + String sql = "DELETE FROM " + entityName() + + " WHERE " + CoeCooperationTeamPermModel.PALVERSIONID + "=?"; + DBSql.update(sql, new Object[]{palVerId}); + } + + /** + * 删除所有 + */ + public void removeAll() throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName(); + DBSql.update(sql); + } + + private class Mapper implements RowMapper { + public CoeCooperationTeamPermModel mapRow(ResultSet rset, int rowNum) throws SQLException { + CoeCooperationTeamPermModel model = new CoeCooperationTeamPermModel(); + try { + model.setId(rset.getString(CoeCooperationTeamPermModel.ID)); + model.setTeamId(rset.getString(CoeCooperationTeamPermModel.TEAMID)); + model.setPalVersionId(rset.getString(CoeCooperationTeamPermModel.PALVERSIONID)); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationMemberAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationMemberAdapter.java new file mode 100644 index 00000000..6ff13ef0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationMemberAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.db2; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationMemberDao; + +public class CoeCooperationMemberAdapter extends CoeCooperationMemberDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationRoleAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationRoleAdapter.java new file mode 100644 index 00000000..83626e0f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationRoleAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.db2; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRoleDao; + +public class CoeCooperationRoleAdapter extends CoeCooperationRoleDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationRolePermAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationRolePermAdapter.java new file mode 100644 index 00000000..5ecb7d92 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationRolePermAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.db2; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRolePermDao; + +public class CoeCooperationRolePermAdapter extends CoeCooperationRolePermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationTeamAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationTeamAdapter.java new file mode 100644 index 00000000..2972538c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationTeamAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.db2; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamDao; + +public class CoeCooperationTeamAdapter extends CoeCooperationTeamDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationTeamPermDaoAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationTeamPermDaoAdapter.java new file mode 100644 index 00000000..c82d92dc --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/db2/CoeCooperationTeamPermDaoAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.db2; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamPermDao; + +public class CoeCooperationTeamPermDaoAdapter extends CoeCooperationTeamPermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationMemberAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationMemberAdapter.java new file mode 100644 index 00000000..07bd1f1b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationMemberAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.informix; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationMemberDao; + +public class CoeCooperationMemberAdapter extends CoeCooperationMemberDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationRoleAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationRoleAdapter.java new file mode 100644 index 00000000..f28faaab --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationRoleAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.informix; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRoleDao; + +public class CoeCooperationRoleAdapter extends CoeCooperationRoleDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationRolePermAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationRolePermAdapter.java new file mode 100644 index 00000000..99140209 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationRolePermAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.informix; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRolePermDao; + +public class CoeCooperationRolePermAdapter extends CoeCooperationRolePermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationTeamAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationTeamAdapter.java new file mode 100644 index 00000000..6c10925f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationTeamAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.informix; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamDao; + +public class CoeCooperationTeamAdapter extends CoeCooperationTeamDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationTeamPermDaoAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationTeamPermDaoAdapter.java new file mode 100644 index 00000000..ca008490 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/informix/CoeCooperationTeamPermDaoAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.informix; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamPermDao; + +public class CoeCooperationTeamPermDaoAdapter extends CoeCooperationTeamPermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationMemberAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationMemberAdapter.java new file mode 100644 index 00000000..0302489e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationMemberAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.mysql; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationMemberDao; + +public class CoeCooperationMemberAdapter extends CoeCooperationMemberDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationRoleAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationRoleAdapter.java new file mode 100644 index 00000000..c820a178 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationRoleAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.mysql; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRoleDao; + +public class CoeCooperationRoleAdapter extends CoeCooperationRoleDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationRolePermAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationRolePermAdapter.java new file mode 100644 index 00000000..b48be8f0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationRolePermAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.mysql; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRolePermDao; + +public class CoeCooperationRolePermAdapter extends CoeCooperationRolePermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationTeamAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationTeamAdapter.java new file mode 100644 index 00000000..43f0b0e9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationTeamAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.mysql; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamDao; + +public class CoeCooperationTeamAdapter extends CoeCooperationTeamDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationTeamPermDaoAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationTeamPermDaoAdapter.java new file mode 100644 index 00000000..f4dbacfd --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/mysql/CoeCooperationTeamPermDaoAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.mysql; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamPermDao; + +public class CoeCooperationTeamPermDaoAdapter extends CoeCooperationTeamPermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationMemberAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationMemberAdapter.java new file mode 100644 index 00000000..81f3f3b9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationMemberAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.oracle; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationMemberDao; + +public class CoeCooperationMemberAdapter extends CoeCooperationMemberDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationRoleAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationRoleAdapter.java new file mode 100644 index 00000000..45a056be --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationRoleAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.oracle; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRoleDao; + +public class CoeCooperationRoleAdapter extends CoeCooperationRoleDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationRolePermAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationRolePermAdapter.java new file mode 100644 index 00000000..d73ac66f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationRolePermAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.oracle; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRolePermDao; + +public class CoeCooperationRolePermAdapter extends CoeCooperationRolePermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationTeamAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationTeamAdapter.java new file mode 100644 index 00000000..852d0326 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationTeamAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.oracle; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamDao; + +public class CoeCooperationTeamAdapter extends CoeCooperationTeamDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationTeamPermDaoAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationTeamPermDaoAdapter.java new file mode 100644 index 00000000..79fa429e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oracle/CoeCooperationTeamPermDaoAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.oracle; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamPermDao; + +public class CoeCooperationTeamPermDaoAdapter extends CoeCooperationTeamPermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationMemberAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationMemberAdapter.java new file mode 100644 index 00000000..a9741cec --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationMemberAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.oscar; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationMemberDao; + +public class CoeCooperationMemberAdapter extends CoeCooperationMemberDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationRoleAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationRoleAdapter.java new file mode 100644 index 00000000..bcd6997a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationRoleAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.oscar; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRoleDao; + +public class CoeCooperationRoleAdapter extends CoeCooperationRoleDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationRolePermAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationRolePermAdapter.java new file mode 100644 index 00000000..36108113 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationRolePermAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.oscar; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRolePermDao; + +public class CoeCooperationRolePermAdapter extends CoeCooperationRolePermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationTeamAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationTeamAdapter.java new file mode 100644 index 00000000..43c761ab --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationTeamAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.oscar; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamDao; + +public class CoeCooperationTeamAdapter extends CoeCooperationTeamDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationTeamPermDaoAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationTeamPermDaoAdapter.java new file mode 100644 index 00000000..f3cc21ad --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/oscar/CoeCooperationTeamPermDaoAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.oscar; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamPermDao; + +public class CoeCooperationTeamPermDaoAdapter extends CoeCooperationTeamPermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationMemberAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationMemberAdapter.java new file mode 100644 index 00000000..90266bd9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationMemberAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.postgresql; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationMemberDao; + +public class CoeCooperationMemberAdapter extends CoeCooperationMemberDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationRoleAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationRoleAdapter.java new file mode 100644 index 00000000..4da1700c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationRoleAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.postgresql; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRoleDao; + +public class CoeCooperationRoleAdapter extends CoeCooperationRoleDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationRolePermAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationRolePermAdapter.java new file mode 100644 index 00000000..1bc6a362 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationRolePermAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.postgresql; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRolePermDao; + +public class CoeCooperationRolePermAdapter extends CoeCooperationRolePermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationTeamAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationTeamAdapter.java new file mode 100644 index 00000000..8a97435b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationTeamAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.postgresql; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamDao; + +public class CoeCooperationTeamAdapter extends CoeCooperationTeamDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationTeamPermDaoAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationTeamPermDaoAdapter.java new file mode 100644 index 00000000..78fad083 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/postgresql/CoeCooperationTeamPermDaoAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.postgresql; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamPermDao; + +public class CoeCooperationTeamPermDaoAdapter extends CoeCooperationTeamPermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationMemberAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationMemberAdapter.java new file mode 100644 index 00000000..044d2cb7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationMemberAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.sqlserver; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationMemberDao; + +public class CoeCooperationMemberAdapter extends CoeCooperationMemberDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationRoleAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationRoleAdapter.java new file mode 100644 index 00000000..a7a8cf3d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationRoleAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.sqlserver; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRoleDao; + +public class CoeCooperationRoleAdapter extends CoeCooperationRoleDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationRolePermAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationRolePermAdapter.java new file mode 100644 index 00000000..4af88d8b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationRolePermAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.sqlserver; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRolePermDao; + +public class CoeCooperationRolePermAdapter extends CoeCooperationRolePermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationTeamAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationTeamAdapter.java new file mode 100644 index 00000000..6509bfd1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationTeamAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.sqlserver; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamDao; + +public class CoeCooperationTeamAdapter extends CoeCooperationTeamDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationTeamPermDaoAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationTeamPermDaoAdapter.java new file mode 100644 index 00000000..edc271fb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sqlserver/CoeCooperationTeamPermDaoAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.sqlserver; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamPermDao; + +public class CoeCooperationTeamPermDaoAdapter extends CoeCooperationTeamPermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationMemberAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationMemberAdapter.java new file mode 100644 index 00000000..ab697110 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationMemberAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.sybase; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationMemberDao; + +public class CoeCooperationMemberAdapter extends CoeCooperationMemberDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationRoleAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationRoleAdapter.java new file mode 100644 index 00000000..27d722a9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationRoleAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.sybase; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRoleDao; + +public class CoeCooperationRoleAdapter extends CoeCooperationRoleDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationRolePermAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationRolePermAdapter.java new file mode 100644 index 00000000..67e3a590 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationRolePermAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.sybase; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationRolePermDao; + +public class CoeCooperationRolePermAdapter extends CoeCooperationRolePermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationTeamAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationTeamAdapter.java new file mode 100644 index 00000000..7de2c868 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationTeamAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.sybase; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamDao; + +public class CoeCooperationTeamAdapter extends CoeCooperationTeamDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationTeamPermDaoAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationTeamPermDaoAdapter.java new file mode 100644 index 00000000..8c60cbfe --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/dao/sybase/CoeCooperationTeamPermDaoAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.cooperation.dao.sybase; + +import com.actionsoft.apps.coe.pal.cooperation.dao.CoeCooperationTeamPermDao; + +public class CoeCooperationTeamPermDaoAdapter extends CoeCooperationTeamPermDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationMemberModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationMemberModel.java new file mode 100644 index 00000000..b6cc468d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationMemberModel.java @@ -0,0 +1,118 @@ +package com.actionsoft.apps.coe.pal.cooperation.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +import java.sql.Timestamp; +import java.util.Objects; + +/** + * @Description 协作小组成员 + * @Created by sunlh + * @Date 2020-12-01 + */ +public final class CoeCooperationMemberModel extends ModelBean { + private static final long serialVersionUID = 1L; + + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_COOP_MEMBER"; + public static final String ID = "ID"; + public static final String TEAMID = "TEAMID"; + public static final String USERID = "USERID"; + public static final String ROLEID = "ROLEID"; + public static final String CREATEUSER = "CREATEUSER"; + public static final String CREATETIME = "CREATETIME"; + public static final String UPDATEUSER = "UPDATEUSER"; + public static final String UPDATETIME = "UPDATETIME"; + + + private String id; + private String teamId; + private String userId; + private String roleId; + private String createUser; + private Timestamp createTime; + private String updateUser; + private Timestamp updateTime; + + public CoeCooperationMemberModel() { + } + + public CoeCooperationMemberModel(String id, String teamId, String userId, String roleId, String createUser, Timestamp createTime, String updateUser, Timestamp updateTime) { + this.id = id; + this.teamId = teamId; + this.userId = userId; + this.roleId = roleId; + this.createUser = createUser; + this.createTime = createTime; + this.updateUser = updateUser; + this.updateTime = updateTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTeamId() { + return null2Blank(teamId); + } + + public void setTeamId(String teamId) { + this.teamId = teamId; + } + + public String getUserId() { + return null2Blank(userId); + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getRoleId() { + return null2Blank(roleId); + } + + public void setRoleId(String roleId) { + this.roleId = roleId; + } + + public String getCreateUser() { + return null2Blank(createUser); + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public Timestamp getCreateTime() { + return createTime; + } + + public void setCreateTime(Timestamp createTime) { + this.createTime = createTime; + } + + public String getUpdateUser() { + return null2Blank(updateUser); + } + + public void setUpdateUser(String updateUser) { + this.updateUser = updateUser; + } + + public Timestamp getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Timestamp updateTime) { + this.updateTime = updateTime; + } + + private String null2Blank(String str) { + return str == null ? "" : str; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationRoleModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationRoleModel.java new file mode 100644 index 00000000..4c8d622d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationRoleModel.java @@ -0,0 +1,160 @@ +package com.actionsoft.apps.coe.pal.cooperation.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +import java.sql.Timestamp; + +/** + * @Description 小组角色 + * @Created by sunlh + * @Date 2020-12-01 + */ +public final class CoeCooperationRoleModel extends ModelBean { + + private static final long serialVersionUID = 1L; + + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_COOP_ROLE"; + public static final String ID = "ID";// roleId + public static final String TEAMID = "TEAMID"; + public static final String ROLENAME = "ROLENAME"; + public static final String ROLEDESC = "ROLEDESC"; + public static final String ROLETYPE = "ROLETYPE";// "0":管理员,"1":设计人员,"2":浏览人员,"3":自定义角色 + public static final String APPPERM = "APPPERM";// 应用权限 + public static final String ACTIONPERM = "ACTIONPERM";// 操作权限,新建/修改,删除,版本管理等 + public static final String DATAPERM = "DATAPERM";// 模型数据权限标识,值为all则拥有全部模型权限,非all(空或其它值)则查询RolePerm表进行权限查询 + public static final String CREATEUSER = "CREATEUSER"; + public static final String CREATETIME = "CREATETIME"; + public static final String UPDATEUSER = "UPDATEUSER"; + public static final String UPDATETIME = "UPDATETIME"; + + private String id; + private String teamId; + private String roleName; + private String roleDesc; + private int roleType; + private String appPerm; + private String actionPerm; + private String dataPerm; + private String createUser; + private Timestamp createTime; + private String updateUser; + private Timestamp updateTime; + + public CoeCooperationRoleModel() { + } + + public CoeCooperationRoleModel(String id, String teamId, String roleName, String roleDesc, int roleType, String appPerm, String actionPerm, String dataPerm, String createUser, Timestamp createTime, String updateUser, Timestamp updateTime) { + this.id = id; + this.teamId = teamId; + this.roleName = roleName; + this.roleDesc = roleDesc; + this.roleType = roleType; + this.appPerm = appPerm; + this.actionPerm = actionPerm; + this.dataPerm = dataPerm; + this.createUser = createUser; + this.createTime = createTime; + this.updateUser = updateUser; + this.updateTime = updateTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTeamId() { + return null2Blank(teamId); + } + + public void setTeamId(String teamId) { + this.teamId = teamId; + } + + public String getRoleName() { + return null2Blank(roleName); + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } + + public String getRoleDesc() { + return null2Blank(roleDesc); + } + + public void setRoleDesc(String roleDesc) { + this.roleDesc = roleDesc; + } + + public int getRoleType() { + return roleType; + } + + public void setRoleType(int roleType) { + this.roleType = roleType; + } + + public String getAppPerm() { + return null2Blank(appPerm); + } + + public void setAppPerm(String appPerm) { + this.appPerm = appPerm; + } + + public String getActionPerm() { + return null2Blank(actionPerm); + } + + public void setActionPerm(String actionPerm) { + this.actionPerm = actionPerm; + } + + public String getDataPerm() { + return null2Blank(dataPerm); + } + + public void setDataPerm(String dataPerm) { + this.dataPerm = dataPerm; + } + + public String getCreateUser() { + return null2Blank(createUser); + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public Timestamp getCreateTime() { + return createTime; + } + + public void setCreateTime(Timestamp createTime) { + this.createTime = createTime; + } + + public String getUpdateUser() { + return null2Blank(updateUser); + } + + public void setUpdateUser(String updateUser) { + this.updateUser = updateUser; + } + + public Timestamp getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Timestamp updateTime) { + this.updateTime = updateTime; + } + + private String null2Blank(String str) { + return str == null ? "" : str; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationRolePermModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationRolePermModel.java new file mode 100644 index 00000000..146cb1a9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationRolePermModel.java @@ -0,0 +1,66 @@ +package com.actionsoft.apps.coe.pal.cooperation.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +/** + * @Description 小组角色数据权限 + * @Created by sunlh + * @Date 2020-12-01 + */ +public final class CoeCooperationRolePermModel extends ModelBean { + + private static final long serialVersionUID = 1L; + + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_COOP_ROLE_PERM"; + public static final String ID = "ID"; + public static final String TEAMID = "TEAMID"; + public static final String ROLEID = "ROLEID"; + public static final String PALVERSIONID = "PALVERSIONID"; + + private String id; + private String teamId; + private String roleId; + private String palVersionId; + + public CoeCooperationRolePermModel() { + } + + public CoeCooperationRolePermModel(String id, String teamId, String roleId, String palVersionId) { + this.id = id; + this.teamId = teamId; + this.roleId = roleId; + this.palVersionId = palVersionId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTeamId() { + return teamId; + } + + public void setTeamId(String teamId) { + this.teamId = teamId; + } + + public String getRoleId() { + return roleId; + } + + public void setRoleId(String roleId) { + this.roleId = roleId; + } + + public String getPalVersionId() { + return palVersionId; + } + + public void setPalVersionId(String palVersionId) { + this.palVersionId = palVersionId; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationTeamModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationTeamModel.java new file mode 100644 index 00000000..b8f78e5d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationTeamModel.java @@ -0,0 +1,150 @@ +package com.actionsoft.apps.coe.pal.cooperation.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +import java.sql.Timestamp; + +/** + * @Description 小组 + * @Created by sunlh + * @Date 2020-12-01 + */ +public final class CoeCooperationTeamModel extends ModelBean { + + private static final long serialVersionUID = 1L; + + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_COOP_TEAM"; + + public static final String ID = "ID"; + public static final String WSID = "WSID"; + public static final String CATEGORY = "CATEGORY"; + public static final String TEAMNAME = "TEAMNAME"; + public static final String TEAMLOGO = "TEAMLOGO"; + public static final String TEAMDESC = "TEAMDESC"; + public static final String TEAMSTATUS = "TEAMSTATUS"; + public static final String CREATEUSER = "CREATEUSER"; + public static final String CREATETIME = "CREATETIME"; + public static final String UPDATEUSER = "UPDATEUSER"; + public static final String UPDATETIME = "UPDATETIME"; + + private String id; + private String wsId; + private String category; + private String teamName; + private String teamLogo; + private String teamDesc; + private int teamStatus; + private String createUser; + private Timestamp createTime; + private String updateUser; + private Timestamp updateTime; + + public CoeCooperationTeamModel() { + } + + public CoeCooperationTeamModel(String id, String wsId, String category, String teamName, String teamLogo, String teamDesc, int teamStatus, String createUser, Timestamp createTime, String updateUser, Timestamp updateTime) { + this.id = id; + this.wsId = wsId; + this.category = category; + this.teamName = teamName; + this.teamLogo = teamLogo; + this.teamDesc = teamDesc; + this.teamStatus = teamStatus; + this.createUser = createUser; + this.createTime = createTime; + this.updateUser = updateUser; + this.updateTime = updateTime; + } + + public String getId() { + return null2Blank(id); + } + + public void setId(String id) { + this.id = id; + } + + public String getWsId() { + return null2Blank(wsId); + } + + public void setWsId(String wsId) { + this.wsId = wsId; + } + + public String getCategory() { + return null2Blank(category); + } + + public void setCategory(String category) { + this.category = category; + } + + public String getTeamName() { + return null2Blank(teamName); + } + + public void setTeamName(String teamName) { + this.teamName = teamName; + } + + public String getTeamLogo() { + return null2Blank(teamLogo); + } + + public void setTeamLogo(String teamLogo) { + this.teamLogo = teamLogo; + } + + public String getTeamDesc() { + return null2Blank(teamDesc); + } + + public void setTeamDesc(String teamDesc) { + this.teamDesc = teamDesc; + } + + public int getTeamStatus() { + return teamStatus; + } + + public void setTeamStatus(int teamStatus) { + this.teamStatus = teamStatus; + } + + public String getCreateUser() { + return null2Blank(createUser); + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public Timestamp getCreateTime() { + return createTime; + } + + public void setCreateTime(Timestamp createTime) { + this.createTime = createTime; + } + + public String getUpdateUser() { + return null2Blank(updateUser); + } + + public void setUpdateUser(String updateUser) { + this.updateUser = updateUser; + } + + public Timestamp getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Timestamp updateTime) { + this.updateTime = updateTime; + } + + private String null2Blank(String str) { + return str == null ? "" : str; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationTeamPermModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationTeamPermModel.java new file mode 100644 index 00000000..6343ea79 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/cooperation/model/CoeCooperationTeamPermModel.java @@ -0,0 +1,55 @@ +package com.actionsoft.apps.coe.pal.cooperation.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +/** + * @Description 小组数据权限 + * @Created by sunlh + * @Date 2020-12-01 + */ +public final class CoeCooperationTeamPermModel extends ModelBean { + + private static final long serialVersionUID = 1L; + + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_COOP_TEAM_PERM"; + public static final String ID = "ID"; + public static final String TEAMID = "TEAMID"; + public static final String PALVERSIONID = "PALVERSIONID"; + + private String id; + private String teamId; + private String palVersionId; + + public CoeCooperationTeamPermModel() { + } + + public CoeCooperationTeamPermModel(String id, String teamId, String palVersionId) { + this.id = id; + this.teamId = teamId; + this.palVersionId = palVersionId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTeamId() { + return teamId; + } + + public void setTeamId(String teamId) { + this.teamId = teamId; + } + + public String getPalVersionId() { + return palVersionId; + } + + public void setPalVersionId(String palVersionId) { + this.palVersionId = palVersionId; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/CoeSuitInstall.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/CoeSuitInstall.java new file mode 100644 index 00000000..7c0b4fbd --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/CoeSuitInstall.java @@ -0,0 +1,210 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.install; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PushbackInputStream; +import java.io.Reader; +import java.util.HashMap; +import java.util.Map; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.lifecycle.api.AppsAPIManager; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.apps.coe.pal.install.util.InitUtil; +import com.actionsoft.apps.coe.pal.plugin.Plugins; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; +import com.actionsoft.sdk.local.SDK; + +public class CoeSuitInstall implements Runnable { + public String sid = null; + + public void run() { + try { + startStep1(sid); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { + try { + SDK.getPlatformAPI().getAWSEngine().startup(null); + startStep1(null); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 第一步初始化 + * + * @param sid + * @throws Exception + */ + public static void startStep1(String sid) throws Exception { + // InitUtil.printInfo1("COE初始化安装[开始]"); + // 删除表 + //dropTable(); + // 初始化CoE TeamWork表结构 + installTable(); + // 初始化CCBI连接 + //InitUtil.installCCBI(); + // 标示第一步初始化结束 + CoePropertyUtil.createProperty("InitStep", "1"); + CoePropertyUtil.createProperty("CoE_Test", "false"); + // 只购买了CoE TeamWork + // if (!LICENSE.isBPA()) { + // CoePropertyUtil.createProperty("InitStep", "6"); + // } + // // 购买了CC 没购买BPA + // if (LICENSE.isBPA() && !LICENSE.isCC()) { + // CoePropertyUtil.createProperty("InitStep", "6"); + // } + CoePropertyUtil.createProperty("InitStep", "6"); + + InitUtil.printInfo1("COE初始化安装[结束]"); + } + + private static void installTable() { + Map sqlmap = coeIniDB(); + if (sqlmap != null) { + createSequenceKey("SYS_COE_COMPONENTS", 813408); + createSequenceKey("SYS_COE_COMPONENTS_PARAM", 136); + createSequenceKey("SYS_COE_KPI_MEATADATA", 3455); + createSequenceKey("SYS_COE_KPI_MEATADATA_MAP", 2016); + String sql = null; + int count = sqlmap.size(); + for (Integer i = 0; i < count; i++) { + try { + sql = sqlmap.get(i).trim(); + if (sql != null && sql.length() > 0) { + DBSql.update(sql); + InitUtil.printInfo1(sql); + } + } catch (Exception e) { + InitUtil.printInfo1("初始化表结构部分失败,原因:" + e.getMessage() + "执行的SQL:" + sql); + if (!sql.contains("alter")) { + e.printStackTrace(); + } + } + } + } + } + + private static void dropTable() { + Map sqlmap = coeDropDB(); + if (sqlmap != null) { + String sql = null; + int count = sqlmap.size(); + for (Integer i = 0; i < count; i++) { + try { + sql = sqlmap.get(i).trim(); + if (sql != null && sql.length() > 0) { + DBSql.update(sql); + InitUtil.printInfo1(sql); + } + } catch (Exception e) { + } + } + } + } + + private static Map coeDropDB() { + Map sqlmap = null; + try { + sqlmap = dbPrepairAction(AppsAPIManager.getInstance().getAppContext(CoEConstant.APP_ID).getPath() + "db/1.0/coe_drop_table.sql"); + } catch (IOException e) { + return null; + } + return sqlmap; + } + + private static Map dbPrepairAction(String path) throws IOException { + Map sqlList = new HashMap(); + StringBuffer sql = new StringBuffer(); + java.io.InputStream in = null; + try { + in = new FileInputStream(path); + PushbackInputStream pbstream = new PushbackInputStream(in); + Reader fr = new InputStreamReader(pbstream, "gb2312"); + BufferedReader br = new BufferedReader(fr); + String Line = br.readLine(); + int i = 0; + for (; Line != null; Line = br.readLine()) { + if (Line.indexOf("prompt") == -1) + sql.append(Line); + if (Line.lastIndexOf(";") != -1) { + sqlList.put(new Integer(i), sql.toString().substring(0, sql.toString().length() - 1)); + sql.delete(0, sql.length()); + i++; + } + } + + br.close(); + fr.close(); + } catch (Exception e) { + System.out.println("\u6587\u4EF6\u8BFB\u5199\u5931\u8D25\uFF1A" + e.getMessage()); + e.printStackTrace(); + } + return sqlList; + } + + private static Map coeIniDB() { + Map sqlmap = new HashMap(); + String basePath = AppsAPIManager.getInstance().getAppContext(CoEConstant.APP_ID).getPath(); + try { + if (AWSServerConf.isOracle()) { + sqlmap = dbPrepairAction(basePath + "db/1.0/coe_oracle.sql"); + } else if (AWSServerConf.isSQLServer()) { + sqlmap = dbPrepairAction(basePath + "db/1.0/coe_sqlserver.sql"); + } else if (AWSServerConf.isMySQL()) { + sqlmap = dbPrepairAction(basePath + "db/1.0/coe_mysql.sql"); + } else if (AWSServerConf.isDB2()) { + sqlmap = dbPrepairAction(basePath + "db/1.0/coe_db2.sql"); + } else { + sqlmap = dbPrepairAction(basePath + "db/1.0/coe_sybase.sql"); + } + } catch (IOException e) { + return null; + } + return sqlmap; + } + + private static void createSequenceKey(String sequencename, int SequenceValue) { + try { + // 判断是否已经有了 + int count = DBSql.getInt("select count(*)as c from SYS_SEQUENCE where SequenceName='" + sequencename + "'", "c"); + if (count == 0) { + String sql = "insert into SYS_SEQUENCE(SequenceName,SequenceValue,CACHESTEP)values('" + sequencename + "'," + SequenceValue + ",1)"; + DBSql.update(sql); + } else { + String sql = "update SYS_SEQUENCE set SequenceValue=" + SequenceValue + " where SequenceName='" + sequencename + "'"; + DBSql.update(sql); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/CoeIni.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/CoeIni.java new file mode 100644 index 00000000..90c4c7e3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/CoeIni.java @@ -0,0 +1,215 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.install.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +import com.actionsoft.bpms.cc.Adapter; +import com.actionsoft.bpms.cc.Adapter.DB; +import com.actionsoft.bpms.cc.CCConst; +import com.actionsoft.bpms.cc.cache.CCCache; +import com.actionsoft.bpms.cc.model.CCModel; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; + +/** + * 初始化dao + * + * @author zhouxuan + * + */ +public class CoeIni extends DaoObject { + + /** + * 查看表数据条数 + * @deprecated 目前未使用,会引发sql注入问题 + * @param tableName + * @return + */ + public int getCoe_analysis_count(String tableName) { + /* + java.sql.PreparedStatement ps = null; + java.sql.Connection con = null; + ResultSet rs = null; + try { + // 1.打开连接 + DB db = Adapter.DB.binding(CoePropertyUtil.getPropertyValue("CoeDBConnection")); + con = db.open(); + // 2.获取语句对象 + ps = con.prepareStatement("SELECT count(*) from " + tableName); + // 3.赋值: + // 4.执行更新(向数据库发送指令) + rs = ps.executeQuery(); + if (rs.next()) { + return rs.getInt(1); + } else { + return 0; + } + } catch (SQLException e) { + e.printStackTrace(); + } catch (CCException e) { + e.printStackTrace(); + } finally { + // 5.关闭连接 + DBSql.close(con, ps, rs); + } + */ + return 0; + } + + /** + * 获得analysis_kpi 用于显示表结构 + * + * @return map集合 + */ + public Map getCoe_analysis_kpi(String tableName) { + Map map = new HashMap(); + java.sql.PreparedStatement ps = null; + java.sql.Connection con = null; + ResultSet rs = null; + try { + // 1.打开连接 + con = DBSql.open(); + // 2.获取语句对象 + ps = con.prepareStatement("SELECT COLUMN_NAME,KPI_NAME from SYS_COE_ANALYSIS_KPI where TABLE_NAME=?"); + // 3.赋值: + ps.setString(1, tableName); + // 4.执行更新(向数据库发送指令) + rs = ps.executeQuery(); + while (rs.next()) { + map.put(rs.getString(1), rs.getString(2)); + } + } catch (SQLException e) { + e.printStackTrace(); + } finally { + DBSql.close(con, ps, rs); + } + + return map; + } + + /** + * 获得analysis_dimension 用于显示表结构 + * + * @return map集合 + * @throws SQLException + * @throws CCException + */ + public Map getCoe_analysis_dimension() throws SQLException { + Map map = new HashMap(); + java.sql.PreparedStatement ps = null; + java.sql.Connection con = null; + ResultSet rs = null; + try { + // 1.打开连接 + con = DBSql.open(); + // 2.获取语句对象 + ps = con.prepareStatement("SELECT TABLE_NAME,DIMENSION_NAME from SYS_COE_ANALYSIS_DIMENSION"); + // 3.赋值: + // 4.执行更新(向数据库发送指令) + rs = ps.executeQuery(); + while (rs.next()) { + map.put(rs.getString(1), rs.getString(2)); + } + } catch (SQLException e) { + throw e; + } finally { + DBSql.close(con, ps, rs); + } + + return map; + } + + /** + * 判断coe是否初始化 + * + * @return 0 未初始化 大于等于1 已经初始化 + */ + public int isInit() { + // 1.打开连接 + java.sql.Connection con = DBSql.open(); + java.sql.PreparedStatement ps = null; + ResultSet rs = null; + try { + + // 2.获取语句对象 + ps = con.prepareStatement("SELECT count(*) from APP_ACT_COE_PROP"); + // 4.执行更新(向数据库发送指令) + rs = ps.executeQuery(); + if (rs.next()) { + return rs.getInt(1); + } else { + return 0; + } + } catch (SQLException e) { + // 判断表是否存在,为了兼容数据库就 查询一张表,看是否存在,抛异常就说明表不存在。 + // 我这样更改吧,如果异常就不记录错误日志。 + // 我这样更改吧,如果异常就不记录错误日志。 + // 如果有更好的办法,可以修改 + } finally { + DBSql.close(con, ps, rs); + } + return 0; + } + + public String getCoeDBConnection(String biName) { + Map> list = CCCache.getInstance().getList(); + for (Map applist : list.values()) { + for (CCModel ccModel : applist.values()) { + if (ccModel.getName().equals(biName) && ccModel.getType().equals(CCConst.TYPE_JDBC) && ccModel.getCreateUser().equals("admin")) { + return ccModel.getId(); + } + } + } + return null; + } + + public int create(PlatformMetaModelBean arg0) throws SQLException { + return 0; + } + + public PlatformMetaModelBean record2Model(ResultSet arg0) { + return null; + } + + @Override + public int update(PlatformMetaModelBean arg0) { + return 0; + } + + @Override + public int insert(PlatformMetaModelBean daoObj) { + return 0; + } + + @Override + public String entityName() { + return null; + } + + @Override + public RowMapper rowMapper() { + return null; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/CoeIniDaoFactory.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/CoeIniDaoFactory.java new file mode 100644 index 00000000..c5bc1845 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/CoeIniDaoFactory.java @@ -0,0 +1,36 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.install.dao; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.bpms.commons.database.DaoFactory; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.ClassReflect; +import com.actionsoft.exception.AWSException; + +public class CoeIniDaoFactory extends DaoFactory { + public static final String DAO_CLASSPATH = "com.actionsoft.apps.coe.pal.install.dao"; + public static CoeIni createCoeIni() { + try { + Class c = ClassReflect.forName(DAO_CLASSPATH + "." + AWSServerConf.getDatabaseProvider() + ".CoeIniAdapter", CoEConstant.APP_ID); + return (CoeIni) create(c); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + throw new AWSException(e); + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/db2/CoeIniAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/db2/CoeIniAdapter.java new file mode 100644 index 00000000..e60fc66a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/db2/CoeIniAdapter.java @@ -0,0 +1,24 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.install.dao.db2; + +import com.actionsoft.apps.coe.pal.install.dao.CoeIni; + + +public class CoeIniAdapter extends CoeIni{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/informix/CoeIniAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/informix/CoeIniAdapter.java new file mode 100644 index 00000000..5b73c71b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/informix/CoeIniAdapter.java @@ -0,0 +1,24 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.install.dao.informix; + +import com.actionsoft.apps.coe.pal.install.dao.CoeIni; + + +public class CoeIniAdapter extends CoeIni{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/mysql/CoeIniAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/mysql/CoeIniAdapter.java new file mode 100644 index 00000000..b4586e89 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/mysql/CoeIniAdapter.java @@ -0,0 +1,24 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.install.dao.mysql; + +import com.actionsoft.apps.coe.pal.install.dao.CoeIni; + + +public class CoeIniAdapter extends CoeIni{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/oracle/CoeIniAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/oracle/CoeIniAdapter.java new file mode 100644 index 00000000..2820b4d5 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/oracle/CoeIniAdapter.java @@ -0,0 +1,24 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.install.dao.oracle; + +import com.actionsoft.apps.coe.pal.install.dao.CoeIni; + + +public class CoeIniAdapter extends CoeIni{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/oscar/CoeIniAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/oscar/CoeIniAdapter.java new file mode 100644 index 00000000..bf42c4c1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/oscar/CoeIniAdapter.java @@ -0,0 +1,24 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.install.dao.oscar; + +import com.actionsoft.apps.coe.pal.install.dao.CoeIni; + + +public class CoeIniAdapter extends CoeIni{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/postgresql/CoeIniAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/postgresql/CoeIniAdapter.java new file mode 100644 index 00000000..f5b6d9c4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/postgresql/CoeIniAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.install.dao.postgresql; + +import com.actionsoft.apps.coe.pal.install.dao.CoeIni; + +public class CoeIniAdapter extends CoeIni{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/sqlserver/CoeIniAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/sqlserver/CoeIniAdapter.java new file mode 100644 index 00000000..6fc8d795 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/sqlserver/CoeIniAdapter.java @@ -0,0 +1,24 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.install.dao.sqlserver; + +import com.actionsoft.apps.coe.pal.install.dao.CoeIni; + + +public class CoeIniAdapter extends CoeIni{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/sybase/CoeIniAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/sybase/CoeIniAdapter.java new file mode 100644 index 00000000..9ded563a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/dao/sybase/CoeIniAdapter.java @@ -0,0 +1,24 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.install.dao.sybase; + +import com.actionsoft.apps.coe.pal.install.dao.CoeIni; + + +public class CoeIniAdapter extends CoeIni{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/model/Sys_cc_profile.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/model/Sys_cc_profile.java new file mode 100644 index 00000000..c5143554 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/model/Sys_cc_profile.java @@ -0,0 +1,92 @@ +package com.actionsoft.apps.coe.pal.install.model; + +import java.util.Date; + +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; + + +public final class Sys_cc_profile extends PlatformMetaModelBean{ + + public static final String FIELD_ID = "ID"; + public static final String FIELD_NAME = "NAME"; + public static final String FIELD_PTYPE = "PTYPE"; + public static final String FIELD_UPDATEDATE = "UPDATEDATE"; + public static final String FIELD_CREATEDATE = "CREATEDATE"; + public static final String FIELD_PROFILE = "PROFILE"; + public static final String FIELD_UUID = "UUID"; + public static final String FIELD_UPDATEUSER = "UPDATEUSER"; + public static final String FIELD_CREATEUSER = "CREATEUSER"; + public static final String FIELD_LOGENABLE = "LOGENABLE"; + + private long id=0; + private String name=""; + private String ptype=""; + private Date updatedate; + private Date createdate; + private String profile=""; + private String uuid=""; + private String updateuser=""; + private String createuser=""; + private String logenable=""; + public long getId() { + return id; + } + public void setId(long id) { + this.id = id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getPtype() { + return ptype; + } + public void setPtype(String ptype) { + this.ptype = ptype; + } + public Date getUpdatedate() { + return updatedate; + } + public void setUpdatedate(Date updatedate) { + this.updatedate = updatedate; + } + public Date getCreatedate() { + return createdate; + } + public void setCreatedate(Date createdate) { + this.createdate = createdate; + } + public String getProfile() { + return profile; + } + public void setProfile(String profile) { + this.profile = profile; + } + public String getUuid() { + return uuid; + } + public void setUuid(String uuid) { + this.uuid = uuid; + } + public String getUpdateuser() { + return updateuser; + } + public void setUpdateuser(String updateuser) { + this.updateuser = updateuser; + } + public String getCreateuser() { + return createuser; + } + public void setCreateuser(String createuser) { + this.createuser = createuser; + } + public String getLogenable() { + return logenable; + } + public void setLogenable(String logenable) { + this.logenable = logenable; + } + +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/util/InitUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/util/InitUtil.java new file mode 100644 index 00000000..c2cd46f3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/util/InitUtil.java @@ -0,0 +1,84 @@ +package com.actionsoft.apps.coe.pal.install.util; + +import java.util.concurrent.ConcurrentLinkedQueue; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.bpms.cc.CCConst; +import com.actionsoft.bpms.cc.web.CCWeb; +import com.actionsoft.bpms.server.Quota; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.apps.coe.pal.install.dao.CoeIniDaoFactory; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; + +/** + * 缓存着执行的结果 + * + * @author zhouxuan + * + */ +public final class InitUtil { + // 安装CoE本地物理表 数据缓存 + public static final ConcurrentLinkedQueue link1 = new ConcurrentLinkedQueue(); + // 初始化BI维度表结构 数据缓存 + public static ConcurrentLinkedQueue link3 = new ConcurrentLinkedQueue(); + // 初始化化历史数据 + // public static ConcurrentLinkedQueue link4=new + // ConcurrentLinkedQueue(); + + public static int addSqDataCount = 0; + private final static int dataCount = 500;// 模拟5000个模型就进行采集 + public final static int pageDataCount = 100;// 线程每次查询的数据量 + public static String errorInfo = ""; + + public static void printInfo1(String info) { + if (!info.equals(".")) { + // System.out.println(info); + } + link1.add(info + "\r\n"); + } + + public static void printInfo3(String info) { + if (!info.equals(".")) { + // System.out.println(info); + } + if (link3.size() > 5000) { + link3 = new ConcurrentLinkedQueue(); + } + link3.add(info); + } + + public static void printInfo4(String info) { + // System.out.println(Thread.currentThread().getName()+info); + if (!info.equals(".")) { + // System.out.println(info); + } + } + + public static void installCCBI() { + if (Quota.isCCService()) {// 购买了CC + try { + if (CoePropertyUtil.getPropertyValue("CoeDBConnection") == null) { + // 使用存在的CoeBI库 + String biName = "CoE6BI"; + String coeDBjUUId = CoeIniDaoFactory.createCoeIni().getCoeDBConnection(biName); + if (coeDBjUUId == null) { + String profile = "{\"user\":\"" + AWSServerConf.getDatabaseUsername() + "\",\"password\":\"" + AWSServerConf.getDatabasePassword() + "\",\"driver\":\"" + AWSServerConf.getDatabaseDriver() + "\",\"url\":\"" + AWSServerConf.getDatabaseUrl() + "\",\"poolInit\":\"" + Runtime.getRuntime().availableProcessors() * 10 + "\",\"poolMax\":\"" + Runtime.getRuntime().availableProcessors() * 25 + "\",\"group\":\"\",\"diyData\":[]}"; + String coeDB = new CCWeb(UserContext.fromUID("admin")).saveCC("", CCConst.TYPE_JDBC, biName, false, profile, CoEConstant.APP_ID, null, "", "", true); + coeDBjUUId = coeDB.substring(coeDB.indexOf("uuid:'") + 6, coeDB.indexOf("'}")); + } + CoePropertyUtil.createProperty("CoeDBConnection", coeDBjUUId); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public synchronized static int getNextStartPage(String key) { + int startPage = Integer.parseInt(CoePropertyUtil.getPropertyValue(key)) + 1; + CoePropertyUtil.createProperty(key, String.valueOf(startPage)); + return startPage; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/web/CoEInitWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/web/CoEInitWeb.java new file mode 100644 index 00000000..ccec30a0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/install/web/CoEInitWeb.java @@ -0,0 +1,158 @@ +package com.actionsoft.apps.coe.pal.install.web; + +import java.sql.SQLException; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.bpms.cc.cache.CCCache; +import com.actionsoft.bpms.cc.dao.CCDaoFactory; +import com.actionsoft.bpms.cc.model.CCModel; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.UtilDate; +import com.actionsoft.apps.coe.pal.install.dao.CoeIni; +import com.actionsoft.apps.coe.pal.install.dao.CoeIniDaoFactory; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; +import com.actionsoft.apps.coe.pal.team.user.web.UserWeb; +import com.actionsoft.i18n.I18nRes; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +/** + * 初始化web + * + * @author zhouxuan + * + */ +public class CoEInitWeb extends ActionWeb { + private UserContext _uc; + + public CoEInitWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + /** + * 获得bi表结构 + * + * @return WEBUI + * @throws CCException + */ + public String getCoE_structure_table() { + StringBuffer sb = new StringBuffer(); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + CoeIni coeIni = CoeIniDaoFactory.createCoeIni(); + Map coe_analysis_dimension = null; + try { + coe_analysis_dimension = coeIni.getCoe_analysis_dimension(); + sb.append(""); + sb.append(""); + } catch (SQLException e1) { + e1.printStackTrace(); + sb.append(I18nRes.findValue(CoEConstant.APP_ID, "连接异常") + ":" + e1.getMessage()); + sb.append(""); + sb.append(""); + } + Map coe_analysis_kpi = null; + Iterator kpiIt = null; + Map.Entry e = null; + if (coe_analysis_dimension != null) { + Iterator it = coe_analysis_dimension.entrySet().iterator(); + String tableName = null; + while (it.hasNext()) { + e = (Map.Entry) it.next(); + tableName = e.getKey().toString(); + sb.append(""); + sb.append(""); + coe_analysis_kpi = coeIni.getCoe_analysis_kpi(tableName); + kpiIt = coe_analysis_kpi.entrySet().iterator(); + sb.append(""); + sb.append(""); + sb.append(""); + } + } + sb.append("
" + I18nRes.findValue(CoEConstant.APP_ID, "表名") + "" + I18nRes.findValue(CoEConstant.APP_ID, "字段名") + "" + I18nRes.findValue(CoEConstant.APP_ID, "数据量") + "
").append(tableName).append("(").append(I18nRes.findValue(CoEConstant.APP_ID, e.getValue().toString())).append(")"); + while (kpiIt.hasNext()) { + e = (Map.Entry) kpiIt.next(); + sb.append(e.getKey()).append("(").append(I18nRes.findValue(CoEConstant.APP_ID, e.getValue().toString())).append(")
"); + } + sb.append(" 
").append(coeIni.getCoe_analysis_count(tableName)).append(I18nRes.findValue(CoEConstant.APP_ID, "条") + "
"); + sb.append(""); + sb.append(""); + return sb.toString(); + } + + /** + * 获取BI配置信息 + * + * @param uuid + * @return WEBUI + */ + public String getSys_cc_profileJson(String uuid) { + + CCModel model = CCCache.getInstance().getModel(uuid); + HashMap map = new HashMap(); + map.put(model.FIELD_ID, model.getId()); + map.put(model.FIELD_NAME, model.getName()); + map.put(model.FIELD_PROPERTIES, model.getProperties()); + map.put(model.FIELD_LOG, model.isLog() == true ? "1" : "0"); + JSONObject j = JSONObject.parseObject(JSON.toJSONString(map)); + return j.toString(); + } + + /** + * 更新操作 + * + * @param uuid + * @param name + * @param logenable + * @param profile + * @return WEBUI + */ + public String updateBIData(String uuid, String name, String logenable, String profile) { + // 当前正在使用的UUID + String cuuid = CoePropertyUtil.getPropertyValue("CoeDBConnection"); + if (!cuuid.equals(uuid)) { + return I18nRes.findValue(CoEConstant.APP_ID, "您当前的数据不是最新数据,请点击更新数据按钮,再进行操作"); + } + CCModel model = CCCache.getInstance().getModel(cuuid); + model.setName(name); + model.setLog(logenable.equals("1") ? true : false); + model.setProperties(profile); + model.setUpdateTime(UtilDate.datetimeFormat(new Date())); + CCDaoFactory.createCC().store(model); + return I18nRes.findValue(CoEConstant.APP_ID, "保存成功"); + } + + public String getStep1Html(int step) { + String initStep = null; + UserWeb userWeb = new UserWeb(); + boolean bb = userWeb.isExistTable(); + if (bb) { + initStep = CoePropertyUtil.getPropertyValue("InitStep"); + } + if (initStep == null) { + initStep = "0"; + } + + Map macroLibraries = new HashMap(); + macroLibraries.put("sid", _uc.getSessionId()); + macroLibraries.put("initStep", initStep); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "install.step1.html", macroLibraries); + } + + public String getStep2Html() { + Map macroLibraries = new HashMap(); + macroLibraries.put("sid", _uc.getSessionId()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "install.step2.html", macroLibraries); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/log/CoEOpLogAPI.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/log/CoEOpLogAPI.java new file mode 100644 index 00000000..f319a7b9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/log/CoEOpLogAPI.java @@ -0,0 +1,62 @@ +package com.actionsoft.apps.coe.pal.log; + +import com.actionsoft.bpms.commons.log.auditing.constant.AuditConst; +import com.actionsoft.bpms.commons.security.logging.model.Level; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.sdk.local.SDK; + +/** + * PAL操作日志API + */ +public class CoEOpLogAPI { + + /** + * 记录一条用户操作成功审计日志 + * @param uc + * @param moduleCategory 业务模块 + * @param op 操作 + * @param info 信息 + * @see CoEOpLogConst + */ + public static void auditOkOp(UserContext uc, String moduleCategory, String op, String info) { + auditOp(uc, moduleCategory, op, info, Level.INFO); + } + + /** + * 记录一条用户操作告警审计日志 + * @param uc + * @param moduleCategory 业务模块 + * @param op 操作 + * @param info 信息 + * @see CoEOpLogConst + */ + public static void auditWarnOp(UserContext uc, String moduleCategory, String op, String info) { + auditOp(uc, moduleCategory, op, info, Level.WARN); + } + + /** + * 记录一条用户操作错误审计日志 + * @param uc + * @param moduleCategory 业务模块 + * @param op 操作 + * @param info 信息 + * @see CoEOpLogConst + */ + public static void auditErrorOp(UserContext uc, String moduleCategory, String op, String info) { + auditOp(uc, moduleCategory, op, info, Level.ERROR); + } + + /** + * 记录一条用户操作日志 + * @param uc + * @param moduleCategory 业务模块 + * @param op 操作类型 + * @param info 信息 + * @param level 级别 + * @see CoEOpLogConst + */ + public static void auditOp(UserContext uc, String moduleCategory, String op, String info, Level level) { + SDK.getLogAPI().audit(AuditConst.CHANNEL_CLIENT, AuditConst.CATALOG_PROCESS, uc.getUID(), op, moduleCategory, info, uc.getClientIP(), level); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/log/CoEOpLogConst.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/log/CoEOpLogConst.java new file mode 100644 index 00000000..52a0853f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/log/CoEOpLogConst.java @@ -0,0 +1,158 @@ +package com.actionsoft.apps.coe.pal.log; + + +import com.actionsoft.bpms.commons.log.auditing.constant.AuditConst; + +/** + * PAL操作日志 + */ +public class CoEOpLogConst extends AuditConst { + + public static final String OP_CREATE = "create"; + public static final String OP_UPDATE = "update"; + public static final String OP_DELETE = "delete"; + public static final String OP_RESTORE = "恢复"; + + /*******业务功能模块分类及日志信息**********/ + // PAL小组 + public static final String MODULE_CATEGORY_COOPERATION = "PAL小组管理"; + + public static final String INFO_COOPERATION_ACCESS = "访问PAL小组"; + public static final String INFO_COOPERATION_ACCESS_MANAGE = "访问PAL小组管理模块";// 管理中心-小组管理 + public static final String INFO_COOPERATION_CREATE = "新建PAL小组"; + public static final String INFO_COOPERATION_UPDATE = "更新PAL小组"; + public static final String INFO_COOPERATION_SORT_UPDATE = "更新PAL小组排序"; + public static final String INFO_COOPERATION_DELETE = "删除PAL小组"; + + // PAL建模管理 + public static final String MODULE_CATEGORY_METHOD = "PAL应用中心"; + + public static final String INFO_METHOD_ACCESS = "访问建模管理模块"; + public static final String INFO_METHOD_CREATE = "新建数据特性"; + public static final String INFO_METHOD_ATTR_FILE_CONF_UPDATE = "更新建模管理文件属性配置"; + public static final String INFO_METHOD_ATTR_SHAPE_CONF_UPDATE = "更新建模管理形状属性配置"; + public static final String INFO_METHOD_ATTR_DATA_UPDATE = "更新数据特性"; + public static final String INFO_METHOD_ATTR_DATA_DELETE = "删除数据特性"; + + // PAL关联管理 + public static final String MODULE_CATEGORY_MAPPINGMANAGEMENT = "PAL关联管理"; + + public static final String INFO_MAPPINGMANAGEMENT_CORRELATED_ACCESS = "访问关联管理-已关联流程模块"; + public static final String INFO_MAPPINGMANAGEMENT_PAL_NOT_CORRELATED_ACCESS = "访问关联管理-PAL未关联流程模块"; + public static final String INFO_MAPPINGMANAGEMENT_BPM_NOT_CORRELATED_ACCESS = "访问关联管理-BPM未关联流程模块"; + public static final String INFO_MAPPINGMANAGEMENT_CREATE = "新建PAL与BPM的关联关系"; + public static final String INFO_MAPPINGMANAGEMENT_DELETE = "删除PAL与BPM的关联关系"; + + + // PAL门户设置 + public static final String MODULE_CATEGORY_PORTAL = "PAL门户设置"; + + public static final String INFO_PORTAL_THEME_STYLE_ACCESS = "访问门户设置-主题风格模块"; + public static final String INFO_PORTAL_COMMON_REPOSITORY_ACCESS = "访问门户设置-常用流程模块"; + public static final String INFO_PORTAL_USER_GROUP_ACCESS = "访问门户设置-浏览用户模块"; + public static final String INFO_PORTAL_THEME_STYLE_LOGO_CREATE = "新建主题风格模块logo"; + public static final String INFO_PORTAL_THEME_STYLE_BANNER_CREATE = "新建主题风格模块轮播图"; + public static final String INFO_PORTAL_COMMON_REPOSITORY_CREATE = "新建常用流程"; + public static final String INFO_PORTAL_USER_GROUP_CREATE = "新建浏览用户"; + public static final String INFO_PORTAL_COMMON_REPOSITORY_UPDATE = "更新常用流程"; + public static final String INFO_PORTAL_USER_GROUP_UPDATE = "更新浏览用户"; + public static final String INFO_PORTAL_THEME_STYLE_LOGO_DELETE = "删除主题风格模块logo"; + public static final String INFO_PORTAL_THEME_STYLE_BANNER_DELETE = "删除主题风格模块轮播图"; + public static final String INFO_PORTAL_COMMON_REPOSITORY_DELETE = "删除常用流程"; + public static final String INFO_PORTAL_USER_GROUP_DELETE = "删除浏览用户"; + + // PAL资产库管理 + public static final String MODULE_CATEGORY_WORKSPACE = "PAL资产库管理"; + + public static final String INFO_WORKSPACE_ACCESS = "访问资产库"; + public static final String INFO_WORKSPACE_MANAGE_ACCESS = "访问资产库管理模块"; + public static final String INFO_WORKSPACE_CREATE = "新建资产库"; + public static final String INFO_WORKSPACE_IMPORT_CREATE = "导入资产库"; + public static final String INFO_WORKSPACE_UPDATE = "更新资产库"; + public static final String INFO_WORKSPACE_STOP_UPDATE = "停用资产库"; + public static final String INFO_WORKSPACE_RUN_UPDATE = "启用资产库"; + public static final String INFO_WORKSPACE_DELETE = "删除资产库"; + + // PAL数据备份管理 + public static final String MODULE_CATEGORY_BACKUP = "PAL应用中心"; + + public static final String INFO_BACKUP_ACCESS = "访问数据备份模块"; + public static final String INFO_BACKUP_CREATE = "新建资产库备份"; + public static final String INFO_BACKUP_UPDATE = "更新资产库备份"; + public static final String INFO_BACKUP_DOWNLOAD = "下载资产库备份"; + public static final String INFO_BACKUP_RESTORE = "恢复资产库备份"; + public static final String INFO_BACKUP_DELETE = "删除资产库备份"; + + // PAL模型管理 + public static final String MODULE_CATEGORY_REPOSITORY = "PAL模型管理"; + + public static final String INFO_REPOSITORY_ACCESS = "访问模型"; + public static final String INFO_REPOSITORY_FILE_ACCESS = "访问模型文件附件"; + public static final String INFO_REPOSITORY_SHAPE_FILE_ACCESS = "访问模型形状附件"; + public static final String INFO_REPOSITORY_CREATE = "新建模型"; + public static final String INFO_REPOSITORY_NEW_VERSION_CREATE = "新建模型新版本"; + public static final String INFO_REPOSITORY_COPY_CREATE = "新建模型文件副本"; + public static final String INFO_REPOSITORY_IMPORT_CREATE = "导入模型"; + public static final String INFO_REPOSITORY_LINK_CREATE = "新建模型链接"; + public static final String INFO_REPOSITORY_UPDATE = "更新模型";// 通用的更新日志 + public static final String INFO_REPOSITORY_MOVE_UPDATE = "更新模型位置";// 移动模型 + public static final String INFO_REPOSITORY_NAME_UPDATE = "更新模型名称"; + public static final String INFO_REPOSITORY_ATTR_UPDATE = "更新模型文件属性"; + public static final String INFO_REPOSITORY_SHAPE_ATTR_UPDATE = "更新模型形状属性"; + public static final String INFO_REPOSITORY_SORT_UPDATE = "更新模型文件排序"; + public static final String INFO_REPOSITORY_DESIGNER_UPDATE = "更新模型结构"; + public static final String INFO_REPOSITORY_LINK_UPDATE = "更新模型链接"; + public static final String INFO_REPOSITORY_LINK_DELETE = "删除模型链接"; + public static final String INFO_REPOSITORY_DELETE = "删除模型文件"; + public static final String INFO_REPOSITORY_VERSION_DELETE = "删除模型文件版本"; + public static final String INFO_REPOSITORY_FILE_DELETE = "删除模型附件"; + public static final String INFO_REPOSITORY_SHAPE_FILE_DELETE = "删除模型形状附件"; + public static final String INFO_REPOSITORY_FILE_UPLOAD = "上传模型附件"; + public static final String INFO_REPOSITORY_SHAPE_FILE_UPLOAD = "上传模型形状附件"; + public static final String INFO_REPOSITORY_DOWNLOAD = "下载模型文件"; + public static final String INFO_REPOSITORY_FILE_DOWNLOAD = "下载模型附件"; + public static final String INFO_REPOSITORY_SHAPE_FILE_DOWNLOAD = "下载模型形状附件"; + public static final String INFO_REPOSITORY_PNG_DOWNLOAD = "下载模型图片"; + + // PAL用户管理 + public static final String MODULE_CATEGORY_USER = "PAL用户管理"; + + public static final String INFO_USER_ACCESS = "访问组织管理-PAL用户模块"; + public static final String INFO_USER_CREATE = "新建用户"; + public static final String INFO_USER_UPDATE = "更新用户"; + public static final String INFO_USER_DELETE = "删除用户"; + + // PAL用户管理 + public static final String MODULE_CATEGORY_BPM_ORG = "PAL用户管理"; + + public static final String INFO_BPM_ORG_ACCESS = "访问组织管理-BPM平台组织架构模块"; + public static final String INFO_BPM_ORG_ACCESS_DENIED = "访问组织管理-BPM平台组织架构访模块权限不足,访问被拒绝"; + + // PAL应用中心 + public static final String MODULE_CATEGORY_APPCENTER = "PAL应用中心"; + + // 应用中心应用的前后缀,例如访问流程清单应用模块 + public static final String INFO_APPCENTER_ACCESS_PREFIX = "访问";// 应用中心具体应用的信息前缀 + public static final String INFO_APPCENTER_ACCESS_SUFFIX = "应用模块";// 应用中心具体应用的信息后缀 + + + // PAL回收站 + public static final String MODULE_CATEGORY_RECYCLE = "PAL应用中心"; + + public static final String INFO_RECYCLE_ACCESS = "访问回收站模块"; + public static final String INFO_RECYCLE_DELETE = "删除回收站数据"; + public static final String INFO_RECYCLE_RESTORE = "恢复回收站数据"; + + // PAL报告生成器 + public static final String INFO_OUTPUT_ACCESS = "访问报告手册文档"; + public static final String INFO_OUTPUT_CREATE = "新建报告手册文档"; + public static final String INFO_OUTPUT_UPDATE = "更新报告手册文档"; + public static final String INFO_OUTPUT_DELETE = "删除报告手册文档"; + public static final String INFO_OUTPUT_DOWNLOAD = "下载报告手册文档"; + public static final String INFO_OUTPUT_DOWNLOAD_LOG = "下载报告手册文档日志"; + + + + + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/backup/dao/CoEPALBackup.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/backup/dao/CoEPALBackup.java new file mode 100644 index 00000000..28f0add6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/backup/dao/CoEPALBackup.java @@ -0,0 +1,202 @@ +package com.actionsoft.apps.coe.pal.pal.backup.dao; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.backup.model.CoEPALBackupModel; +import com.actionsoft.exception.AWSDataAccessException; + +/** + * backup相关数据库操作类 + * + * @author zhangming + * @date 2015-8-4 + * @version 6.1 + * @description + */ +public class CoEPALBackup extends DaoObject { + + @Override + public int insert(CoEPALBackupModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + String sql = "INSERT INTO " + entityName() + "(ID,WSID,BACKUPTIME,USERID,REMARK,STATE)VALUES(:ID,:WSID,:BACKUPTIME,:USERID,:REMARK,:STATE)"; + Map paraMap = new HashMap<>(); + paraMap.put("ID", model.getId()); + paraMap.put("WSID", model.getWsId()); + paraMap.put("BACKUPTIME", new Timestamp(System.currentTimeMillis())); + paraMap.put("USERID", model.getUserId()); + paraMap.put("REMARK", model.getRemark()); + paraMap.put("STATE", 0); + return DBSql.update(sql, paraMap); + } + + @Override + public int update(CoEPALBackupModel model) throws AWSDataAccessException { + String sql = "UPDATE " + entityName() + " SET remark=?, state=? where id=?"; + return DBSql.update(sql, new Object[] { model.getRemark(), model.getState(), model.getId() }); + } + + @Override + public String entityName() { + return "APP_ACT_COE_PAL_BACKUP"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public CoEPALBackupModel mapRow(ResultSet rset, int rowNum) throws SQLException { + CoEPALBackupModel model = new CoEPALBackupModel(); + try { + model.setId(rset.getString("ID")); + model.setWsId(rset.getString("WSID")); + model.setBackupTime(rset.getTimestamp("BACKUPTIME")); + model.setUserId(rset.getString("USERID")); + model.setRemark(rset.getString("REMARK")); + model.setState(rset.getInt("STATE")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + + } + + /** + * 根据资产库Id查询备份列表 + * + * @param wsId + * @return + * @author zhangming + */ + public List getBackupListByWsId(String wsId) { + checkTable(); + StringBuilder sql = new StringBuilder("select * from ").append(entityName()); + if (wsId != null && !"".equals(wsId)) { + sql.append(" where wsid=?").append(" order by BACKUPTIME desc"); + return DBSql.query(sql.toString(), new Mapper(), new Object[] { wsId }); + } else { + sql.append(" order by BACKUPTIME desc"); + return DBSql.query(sql.toString(), new Mapper()); + } + } + + /** + * 根据资产库id和备份状态查询备份列表 + * @param wsId + * @param state + * @return + * @author tanj + */ + public List getBackupListByWsIdAndState(String wsId, int state) { + checkTable(); + StringBuilder sql = new StringBuilder("select * from ").append(entityName()); + if (wsId != null && !"".equals(wsId)) { + sql.append(" where wsid=?").append(" and state=? ").append(" order by BACKUPTIME desc"); + return DBSql.query(sql.toString(), new Mapper(), new Object[] { wsId, state }); + } else { + sql.append(" where state=? ").append(" order by BACKUPTIME desc"); + return DBSql.query(sql.toString(), new Mapper(), new Object[] { state }); + } + } + + /** + * 获取某次备份信息 + * + * @param id + * @return + * @author zhangming + */ + public CoEPALBackupModel getBackupModel(String id) { + StringBuilder sql = new StringBuilder("select * from ").append(entityName()).append(" where id=?"); + List list = DBSql.query(sql.toString(), new Mapper(), new Object[] { id }); + if (list != null && list.size() > 0) { + return list.get(0); + } else { + return null; + } + } + + public boolean delete(String id) { + StringBuilder sql = new StringBuilder("delete from ").append(entityName()).append(" where id=?"); + int r = DBSql.update(sql.toString(), new Object[] { id }); + if (r > 0) { + return true; + } else { + return false; + } + } + + /** + * 检查表是否存在,如果不存在,则创建表 + * + * @return + * @author zhangming + */ + private boolean checkTable() { + boolean flag = true; + if (!isExistTable()) { + String sql = ""; + if (AWSServerConf.isOracle()) { + sql = "CREATE TABLE APP_ACT_COE_PAL_BACKUP (ID CHAR(36) NOT NULL, WSID CHAR(36), BACKUPTIME DATE, USERID CHAR(36), REMARK NVARCHAR2(255), STATE NUMBER(1), PRIMARY KEY (ID))"; + } else if (AWSServerConf.isSQLServer()) { + sql = "CREATE TABLE APP_ACT_COE_PAL_BACKUP (ID NVARCHAR(36) NOT NULL, WSID NVARCHAR(36), BACKUPTIME DATETIME, USERID NVARCHAR(36), REMARK NVARCHAR(255), STATE SMALLINT, PRIMARY KEY (ID))"; + } else if (AWSServerConf.isMySQL()) { + sql = "CREATE TABLE APP_ACT_COE_PAL_BACKUP (ID VARCHAR(36) NOT NULL, WSID VARCHAR(36), BACKUPTIME DATETIME, USERID VARCHAR(36), REMARK VARCHAR(255), STATE INT(1), PRIMARY KEY (ID))"; + } else if (AWSServerConf.isDB2()) { + sql = "CREATE TABLE APP_ACT_COE_PAL_BACKUP (ID NVARCHAR(36) NOT NULL, WSID NVARCHAR(36), BACKUPTIME TIMESTAMP, USERID NVARCHAR(36), REMARK NVARCHAR(255), STATE SMALLINT, PRIMARY KEY (ID))"; + } else if (AWSServerConf.isPostgreSQL()) { + sql = "CREATE TABLE APP_ACT_COE_PAL_BACKUP (ID CHAR(36) NOT NULL, WSID CHAR(36), BACKUPTIME TIMESTAMP, USERID CHAR(36), REMARK VARCHAR(255), STATE SMALLINT, PRIMARY KEY (ID))"; + } else { + sql = "CREATE TABLE APP_ACT_COE_PAL_BACKUP (ID NVARCHAR(36) NOT NULL, WSID NVARCHAR(36), BACKUPTIME DATETIME, USERID NVARCHAR(36), REMARK NVARCHAR(255), STATE SMALLINT, PRIMARY KEY (ID))"; + } + DBSql.update(sql); + } + + return flag; + } + + private boolean isExistTable() { + return true; +// Connection conn = DBSql.open(); +// DatabaseMetaData dbmd = null; +// ResultSet rs = null; +// try { +// dbmd = conn.getMetaData(); +// if (AWSServerConf.isOracle()){ +// rs = dbmd.getTables(null, AWSServerConf.getDatabaseUsername().toUpperCase(), entityName(), new String[] { "TABLE" }); +// } else if (AWSServerConf.isPostgreSQL()) { +// rs = dbmd.getTables(null, null, entityName().toLowerCase(), new String[] { "TABLE" }); +// } else { +// rs = dbmd.getTables(null, null, entityName(), new String[] { "TABLE" }); +// } +// while (rs.next()) { +// String tableName = rs.getString("TABLE_NAME"); +// if (tableName.toLowerCase().contains(entityName().toLowerCase())) { +// return true; +// } +// } +// } catch (Exception ex) { +// ex.printStackTrace(); +// } finally { +// DBSql.close(conn, null, rs); +// } +// return false; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/backup/extend/CoEPALBackupProcessor.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/backup/extend/CoEPALBackupProcessor.java new file mode 100644 index 00000000..9d9a7ded --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/backup/extend/CoEPALBackupProcessor.java @@ -0,0 +1,987 @@ +package com.actionsoft.apps.coe.pal.pal.backup.extend; +import java.util.Map; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.sql.Timestamp; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.pal.ws.constant.CoeWsConstant; +import com.actionsoft.apps.lifecycle.api.AppsAPIManager; +import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.dc.DCProfileManager; +import com.actionsoft.bpms.server.fs.dc.DCUtil; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.backup.dao.CoEPALBackup; +import com.actionsoft.apps.coe.pal.pal.backup.model.CoEPALBackupModel; +import com.actionsoft.apps.coe.pal.pal.repository.cache.*; +import com.actionsoft.apps.coe.pal.pal.repository.dao.*; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.PALDesignerFileCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.dao.DesignerShapeRelationDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeCopyModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapePasteModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.*; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.constant.CoeFileConstant; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.dao.UpFileDao; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.model.UpfileModel; +import com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessRecycleWeb; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; +import com.actionsoft.exception.AWSException; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; + +public class CoEPALBackupProcessor { + public static final String COE_BACKUP = "backup"; + public static final int OVERLEN_BACKUP = 2048; //系统导出限制大小。单位:兆 + + /** + * 数据备份 + * + * @param session + * @param wsId 资产库Id + * @param id 数据备份Id + * @return + * @author zhangming + */ + public boolean backupData(UserContext session, String wsId, String id) { + boolean flag = true; + + List list = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getAllCoeProcessLevelByWsId(wsId); // 资产库中所有模型 + if (list == null || list.size() <= 0) { + return false; + } + CoEPALBackup backupDao = new CoEPALBackup(); + CoEPALBackupModel backupModel = backupDao.getBackupModel(id); + PALRepository repositoryDao = new PALRepository(); + PALRepositoryPropertyDao repositoryPropertyDao = new PALRepositoryPropertyDao(); + DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); + CoeProcessLevelCorrelateDao correlateDao = new CoeProcessLevelCorrelateDao(); + UpFileDao upfileDao = new UpFileDao(); + PALRepositorySpecialPropertyDao specialPropertyDao = new PALRepositorySpecialPropertyDao(); + //文件属性配置,节点属性配置,形状配置的dao + PALRepositoryShapeConfigDao shapeConfigDao = new PALRepositoryShapeConfigDao(); + PALRepositoryAttributeDao fileAttrDao = new PALRepositoryAttributeDao(); + PALRepositoryShapeAttributeDao shapeAttrDao = new PALRepositoryShapeAttributeDao(); + JSONArray palRepositoryJsonArray = new JSONArray(); + for (PALRepositoryModel repository : list) { + String repositoryId = repository.getId(); + String repositoryPlrId = repository.getPlRid(); + JSONObject object = new JSONObject(); + object.put("id", repository.getId()); + object.put("wsId", repository.getWsId()); + object.put("plRid", repository.getPlRid()); + object.put("No", repository.getNo()); + object.put("name", repository.getName()); + object.put("level", repository.getLevel()); + object.put("parentId", repository.getParentId()); + object.put("orderIndex", repository.getOrderIndex()); + object.put("isBottomLevel", repository.isBottomLevel()); + object.put("desc", repository.getDesc()); + object.put("ownerDept", repository.getOwnerDept()); + object.put("ownerUser", repository.getOwnerUser()); + object.put("milestone", repository.getMilestone()); + object.put("input", repository.getInput()); + object.put("output", repository.getOutput()); + object.put("execType", repository.getExecType()); + object.put("systemName", repository.getSystemName()); + object.put("AWSProcessId", repository.getAWSProcessId()); + object.put("diagramUrl", repository.getDiagramUrl()); + object.put("color", repository.getColor()); + object.put("methodCategory", repository.getMethodCategory()); + object.put("methodId", repository.getMethodId()); + object.put("version", repository.getVersion()); + object.put("versionId", repository.getVersionId()); + object.put("isUse", repository.isUse()); + object.put("isPublish", repository.isPublish()); + object.put("isStop", repository.isStop()); + object.put("isApproval", repository.isApproval()); + object.put("isSystemFile", repository.isSystemFile()); + object.put("filePath", repository.getFilePath()); + object.put("historyMaxVersion", repository.getHistoryMaxVersion()); + object.put("viewCount", repository.getViewCount()); + object.put("createUser", repository.getCreateUser()); + object.put("modifyUser", repository.getModifyUser()); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + object.put("createDate", repository.getCreateDate() == null ? "" : df.format(repository.getCreateDate())); + object.put("modifyDate", repository.getModifyDate() == null ? "" : df.format(repository.getModifyDate())); + object.put("plDutyDept", repository.getDutyDept()); + object.put("plDutyUser", repository.getDutyUser()); + object.put("ext1", repository.getExt1()); + object.put("ext2", repository.getExt2()); + object.put("ext3", repository.getExt3()); + object.put("ext4", repository.getExt4()); + //文件密级 + object.put("securityLevel",repository.getSecurityLevel()); + + List shapeCopyList = repositoryDao.getShapeCopyModelsByRepositoryId(repositoryId); // APP_ACT_COE_PAL_SHAPE_COPY表中的数据 + object.put("shapeCopyList", shapeCopyList2JSONArray(shapeCopyList)); + List shapePasteList = repositoryDao.getShapePasteModelsByRepositoryId(repositoryId); // APP_ACT_COE_PAL_SHAPE_PASTE表中的数据 + object.put("shapePasteList", shapePasteList2JSONArray(shapePasteList)); + List shapeRelationList = relationDao.getModelListByFileId(repositoryId); // APP_ACT_COE_PAL_SHAPE_RLAT表中的数据 + object.put("shapeRelationList", shapeRelationList2JSONArray(shapeRelationList)); + List upfileList = upfileDao.searchByRepositoryId(repositoryId); // APP_ACT_COE_PAL_UPFILE表中的数据 + object.put("upfileList", upfileList2JSONArray(upfileList)); + List repositoryPropertyList = repositoryPropertyDao.getPropertysByPlid(repositoryId, null); // APP_ACT_COE_PAL_PROP 流程模型属性 + object.put("repositoryPropertyList", repositoryPropertyList2JSONArray(repositoryPropertyList)); + Map property = CoePropertyUtil.getPropertysValue(" PROPERTYKEY='" + repositoryId + "_attr' OR PROPERTYKEY='mark_" + repositoryPlrId + "' OR PROPERTYKEY='link_" + repositoryPlrId + "' OR PROPERTYKEY='link_app_" + repositoryPlrId + "' OR PROPERTYKEY='use_" + repositoryPlrId + "' "); // APP_ACT_COE_PROP表中模型属性 + object.put("propertyList", property == null || property.size() == 0 ? new JSONObject() : property2JSONObject(property)); + List correlateList = correlateDao.getModelListByRepositoryId(repositoryId);// APP_ACT_COE_PAL_CORRELATE表中的数据 + object.put("correlateList", correlate2JSONArray(correlateList)); + List specialPropertyList = specialPropertyDao.getSpecialPropertysByPlid(wsId, repositoryId);// APP_ACT_COE_PAL_SPCL_PROP表中的数据 + object.put("specialPropertyList", specialProperty2JSONArray(specialPropertyList)); + palRepositoryJsonArray.add(object); + } + //保存文件属性配置,节点属性配置,形状规则配置 + List fileAttrList = fileAttrDao.getFileAttributeByWsId(wsId); + List shapeAttrList = shapeAttrDao.getShapeAttributeByWsId(wsId); + List shapeConfigList = shapeConfigDao.queryShapeConfigByWsId(wsId); + JSONObject configJson = new JSONObject(); + configJson.put("fileAttribute", JSON.toJSONString(fileAttrList)); + configJson.put("shapeAttribute", JSON.toJSONString(shapeAttrList)); + configJson.put("shapeConfig", JSON.toJSONString(shapeConfigList)); + + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, COE_BACKUP); + DCContext dc = new DCContext(session, dcProfile, CoEConstant.APP_ID, wsId, id); + UtilFile fileDir = new UtilFile(dc.getPath()); + UtilFile repositoryFile = new UtilFile(dc.getPath() + "/" + "repository.json"); + UtilFile configFile = new UtilFile(dc.getPath() + "/" + "config.json"); + + try { + if (!fileDir.exists()) { + fileDir.mkdirs(); + } + if (!repositoryFile.exists()) { + repositoryFile.createNewFile(); + } + if (!configFile.exists()) { + configFile.createNewFile(); + } + repositoryFile.writeUTF8(palRepositoryJsonArray.toString()); + configFile.writeUTF8(configJson.toString()); + + // 复制流程文件 + String sourcePath = CoeWsConstant.getWorkspaceRootPath(wsId); + UtilFile repositoryFileSourceDir = new UtilFile(sourcePath); + UtilFile repositoryFileTargetDir = new UtilFile(dc.getPath() + "/" + wsId); + if (repositoryFileSourceDir.exists() && repositoryFileSourceDir.isDirectory()) { + UtilFile.copyDir(repositoryFileSourceDir, repositoryFileTargetDir); + } + // 复制出现复制图形文件 + String shapeMapSourcePath = CoeDesignerConstant.SHAPE_MAP_FILE; + UtilFile shapeMapSourceFile = new UtilFile(shapeMapSourcePath); + UtilFile shapeMapTargetFile = new UtilFile(dc.getPath() + "/" + "shape.map.tpl"); + if (shapeMapSourceFile.exists()) { + UtilFile.copyFile(shapeMapSourceFile, shapeMapTargetFile); + } + + // 复制所有的附件 + UtilFile targetDir = new UtilFile(dc.getPath() + File.separator + "upfile" + File.separator + "file"); + if (!targetDir.exists()) { + targetDir.mkdirs(); + } + UtilFile shapeTargetDir = new UtilFile(dc.getPath() + File.separator + "upfile"); + DCPluginProfile fileProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + if (fileProfile != null) { + for (PALRepositoryModel model : list) { + String repoositoryId = model.getId(); + // 复制节点附件 + DCContext fileDcContext = new DCContext(session, fileProfile, repoositoryId, ""); + UtilFile file = new UtilFile(fileDcContext.getPath().replaceAll(File.separator + File.separator, File.separator)); + if (file.exists()) { + UtilFile tempfile = new UtilFile(shapeTargetDir.getPath() + File.separator + repoositoryId); + if (tempfile.exists()) { + tempfile.mkdirs(); + } + UtilFile.copyDir(file, tempfile); + } + // 复制文件附件 + DCContext shapeDcContext = new DCContext(session, fileProfile, "file", repoositoryId); + UtilFile modelFile = new UtilFile(shapeDcContext.getPath()); + if (modelFile.exists()) { + UtilFile tempFile = new UtilFile(targetDir.getPath() + File.separator + repoositoryId); + if (tempFile.exists()) { + tempFile.mkdirs(); + } + UtilFile.copyDir(modelFile, tempFile); + } + } + } + } catch (IOException e) { + e.printStackTrace(); + backupModel.setState(2); + backupDao.update(backupModel); + return false; + } catch (Exception e) { + e.printStackTrace(); + backupModel.setState(2); + backupDao.update(backupModel); + return false; + } + + backupModel.setState(1); + backupDao.update(backupModel); + return flag; + } + + /** + * 删除备份文件 + * + * @param session + * @param wsId 资产库Id + * @param id 数据备份Id + * @return + * @author zhangming + */ + public boolean deleteBackup(UserContext session, String wsId, String id) { + boolean flag = true; + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, COE_BACKUP); + DCContext dc = new DCContext(session, dcProfile, CoEConstant.APP_ID, wsId, id); + UtilFile repositoryDir = new UtilFile(dc.getPath()); + if (repositoryDir.exists() && repositoryDir.isDirectory()) { + flag = !UtilFile.removeFile(repositoryDir); + } + return flag; + } + + /** + * 还原备份的版本 + * + * @param session + * @param wsId 资产库Id + * @param id 数据备份Id + * @return + * @author zhangming + * @throws Exception + */ + public boolean recoverBackup(UserContext session, String wsId, String id) throws Exception { + boolean flag = true; + CoEPALBackup backupDao = new CoEPALBackup(); + CoEPALBackupModel backupModel = backupDao.getBackupModel(id); + backupModel.setState(3); // 备份记录的状态设置为“还原中” + backupDao.update(backupModel); + + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, COE_BACKUP); + DCContext dc = new DCContext(session, dcProfile, CoEConstant.APP_ID, wsId, id); + UtilFile repositoryDir = new UtilFile(dc.getPath()); + if (!repositoryDir.exists() || !repositoryDir.isDirectory()) { + return false; + } + UtilFile repositoryFile = new UtilFile(dc.getPath() + File.separator + "repository.json"); + if (!repositoryFile.exists()) { + return false; + } + //判断config.json是否存在 + boolean mark = true; + UtilFile configFile = new UtilFile(dc.getPath() + File.separator + "config.json"); + if (!configFile.exists()) { + mark = false; + } + // 数据对象 + JSONArray repositoryArray = JSONArray.parseArray(repositoryFile.readStrUTF8()); + List repositoryList = new ArrayList(); + List shapeCopyList = new ArrayList(); + List shapePasteList = new ArrayList(); + List shapeRelationList = new ArrayList(); + List correlateList = new ArrayList(); + List upfileList = new ArrayList(); + List specialPropertyList = new ArrayList<>(); + List repositoryPropertyList = new ArrayList(); + Map propertyMap = new HashMap(); + for (int i = 0; i < repositoryArray.size(); i++) { + JSONObject object = repositoryArray.getJSONObject(i); + PALRepositoryModelImpl repository = new PALRepositoryModelImpl(); + repository.setId(object.getString("id")); + repository.setWsId(object.getString("wsId")); + repository.setPlRid(object.getString("plRid")); + repository.setNo(object.getString("No")); + repository.setName(object.getString("name")); + repository.setLevel(object.getInteger("level")); + repository.setParentId(object.getString("parentId")); + repository.setOrderIndex(object.getInteger("orderIndex")); + repository.setBottomLevel(object.getInteger("isBottomLevel")); + repository.setDesc(object.containsKey("desc") ? object.getString("desc") : ""); + repository.setOwnerDept(object.getString("ownerDept")); + repository.setOwnerUser(object.getString("ownerUser")); + repository.setMilestone(object.getString("milestone")); + repository.setInput(object.containsKey("input") ? object.getString("input") : ""); + repository.setOutput(object.containsKey("output") ? object.getString("output") : ""); + repository.setExecType(object.getInteger("execType")); + repository.setSystemName(object.getString("systemName")); + repository.setAWSProcessId(object.getString("AWSProcessId")); + repository.setDiagramUrl(object.getString("diagramUrl")); + repository.setColor(object.getString("color")); + repository.setMethodCategory(object.getString("methodCategory")); + repository.setMethodId(object.getString("methodId")); + repository.setVersion(object.getInteger("version")); + repository.setVersionId(object.getString("versionId")); + repository.setUse(object.getBoolean("isUse")); + repository.setPublish(object.getBoolean("isPublish")); + repository.setStop(object.containsKey("isStop") ? object.getBoolean("isStop") : false); + repository.setApproval(object.containsKey("isApproval") ? object.getBoolean("isApproval") : false); + repository.setSystemFile(object.getBoolean("isSystemFile")); + repository.setFilePath(object.containsKey("filePath") ? CoeProcessLevelUtil.replaceRepositoryFilePath(object.getString("filePath")) : ""); + repository.setHistoryMaxVersion(object.getString("historyMaxVersion")); + repository.setViewCount(object.getLong("viewCount")); + repository.setCreateUser(object.getString("createUser")); + repository.setModifyUser(object.getString("modifyUser")); + repository.setCreateDate(object.getString("createDate").equals("") ? null : Timestamp.valueOf(object.getString("createDate"))); + repository.setModifyDate(object.getString("modifyDate").equals("") ? null : Timestamp.valueOf(object.getString("modifyDate"))); + repository.setDutyDept(object.getString("plDutyDept")); + repository.setDutyUser(object.getString("plDutyUser")); + // 扩展字段 + repository.setExt1(object.getString("ext1")); + repository.setExt2(object.getString("ext2")); + repository.setExt3(object.getString("ext3")); + repository.setExt4(object.getString("ext4")); + //密级 + repository.setSecurityLevel(object.getInteger("securityLevel")); + + repositoryList.add(repository); + shapeCopyList.addAll(JSONArray2ShapeCopyList(object.getJSONArray("shapeCopyList"))); + shapePasteList.addAll(JSONArray2ShapePasteList(object.getJSONArray("shapePasteList"))); + shapeRelationList.addAll(JSONArray2ShapeRelationList(object.getJSONArray("shapeRelationList"))); + correlateList.addAll(JSONArray2correlate(object.getJSONArray("correlateList"))); + specialPropertyList.addAll(JSONArray2specialProperty(object.getJSONArray("specialPropertyList"))); + upfileList.addAll(JSONArray2UpfileList(object.getJSONArray("upfileList"))); + repositoryPropertyList.addAll(JSONArray2RepositoryPropertyList(object.getJSONArray("repositoryPropertyList"))); + propertyMap.putAll(jsonObject2Property(object.getJSONObject("propertyList"))); + } + + List fileAttrList = Lists.newArrayList(); + List shapeAttrList = Lists.newArrayList(); + List shapeConfigList = Lists.newArrayList(); + if (mark) { + JSONObject configJson = JSON.parseObject(configFile.readStrUTF8()); + fileAttrList = JSON.parseArray(configJson.getString("fileAttribute"), PALRepositoryAttributeModel.class); + shapeAttrList = JSON.parseArray(configJson.getString("shapeAttribute"), PALRepositoryShapeAttributeModel.class); + shapeConfigList = JSON.parseArray(configJson.getString("shapeConfig"), PALRepositoryShapeConfigModel.class); + } + + // 对之前对文件附件和节点附件进行删除,再插入新数据 + List list = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getAllCoeProcessLevelByWsId(wsId); // 资产库中所有模型 + DCPluginProfile fileProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + if (fileProfile != null) { + for (PALRepositoryModel model : list) { + // 删除相关文件附件 + DCContext fileDc = new DCContext(session, fileProfile, CoEConstant.APP_ID, "file", model.getId()); + if (fileDc != null) { + UtilFile file = new UtilFile(fileDc.getPath()); + if (file.exists()) { + UtilFile.removeFile(file); + } + } + // 删除相关节点附件 + DCContext shapeDc = new DCContext(session, fileProfile, CoEConstant.APP_ID, model.getId(), ""); + if (shapeDc != null) { + UtilFile shapeFile = new UtilFile(shapeDc.getPath().substring(0, shapeDc.getPath().length() - 1));// replaceAll(File.separator + File.separator, File.separator)); + UtilFile.removeFile(shapeFile); + } + } + File bakFile = new UtilFile(dc.getPath() + File.separator + "upfile"); + if (bakFile.exists() && bakFile.isDirectory()) { + File [] files = bakFile.listFiles(); + DCContext fileDc = new DCContext(session, fileProfile, CoEConstant.APP_ID, "", ""); + String path = fileDc.getPath().substring(0, fileDc.getPath().length() - 2);// .replaceAll(File.separator + File.separator +File.separator, File.separator); + if (files != null) { + for (File file : files) { + UtilFile fileTemp = new UtilFile(file.getPath()); + File [] subFile = file.listFiles(); + if ("file".equals(file.getName())) {// 文件附件恢复 + // 上面没有删除掉但是备份和当前都存在的删除 + for (File file2 : subFile) { + DCContext fileDc2 = new DCContext(session, fileProfile, CoEConstant.APP_ID, "file", file2.getName()); + UtilFile file1 = new UtilFile(fileDc2.getPath()); + if (file1.exists()) { + UtilFile.removeFile(file1); + } + } + // 恢复 + UtilFile targetFile = new UtilFile(path + File.separator + "file"); + if (!targetFile.exists()) { + targetFile.mkdir(); + } + UtilFile.copyDir(fileTemp, targetFile); + } else {// 节点附件恢复 + // 恢复 + UtilFile targetFile = new UtilFile(path + File.separator + file.getName()); + if (!targetFile.exists()) { + targetFile.mkdir(); + } else {// 上面没有删除掉但是备份和当前都存在的删除 + UtilFile.removeFile(targetFile); + } + UtilFile.copyDir(fileTemp, targetFile); + } + } + } + } + } + + // 删除数据库中之前的数据,再插入新数据 + PALRepository repositoryDao = new PALRepository(); + DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); + PALRepositoryPropertyDao repositoryPropertyDao = new PALRepositoryPropertyDao(); + UpFileDao upfileDao = new UpFileDao(); + CoeProcessLevelCorrelateDao correlateDao = new CoeProcessLevelCorrelateDao(); + PALRepositorySpecialPropertyDao specialPropertyDao = new PALRepositorySpecialPropertyDao(); + PALRepositoryRemove removeDao = new PALRepositoryRemove(); + //文件属性配置,节点属性配置,形状配置的dao + PALRepositoryShapeConfigDao shapeConfigDao = new PALRepositoryShapeConfigDao(); + PALRepositoryAttributeDao fileAttrDao = new PALRepositoryAttributeDao(); + PALRepositoryShapeAttributeDao shapeAttrDao = new PALRepositoryShapeAttributeDao(); + CoeProcessRecycleWeb web = new CoeProcessRecycleWeb(session); + // 清空回收站中与该资产库有关的流程 + + // 删除回收站中存在的流程 + List rList = removeDao.getModelsByWsId(wsId); + StringBuffer sb = new StringBuffer(); + for (PALRepositoryRemoveModel rModel : rList) { + sb.append("'" + rModel.getRemoveId() + "',"); + } + if (sb.length() > 0) { + web.deleteResource(sb.substring(0, sb.length() - 1)); + } + // 删除当前数据 + repositoryDao.deleteRepositorysByWsId(wsId); + if (mark) { + repositoryDao.deleteFileShapeAttrByWsId(wsId); + } + // 插入新数据 + if (repositoryList != null && repositoryList.size() > 0) { + repositoryDao.batchInsert(repositoryList); + } + if (shapeCopyList != null && shapeCopyList.size() > 0) { + repositoryDao.createShape(shapeCopyList); + } + if (shapePasteList != null && shapePasteList.size() > 0) { + repositoryDao.pasteToDatabse(shapePasteList); + } + if (shapeRelationList != null && shapeRelationList.size() > 0) { + relationDao.barchInsert(shapeRelationList); + } + if (upfileList != null && upfileList.size() > 0) { + upfileDao.batchInsert(upfileList); + } + if (correlateList != null && correlateList.size() > 0) { + correlateDao.batchInsert(correlateList); + } + if (specialPropertyList != null && specialPropertyList.size() > 0) { + specialPropertyDao.batchInsert(specialPropertyList); + } + if (repositoryPropertyList != null && repositoryPropertyList.size() > 0) { + repositoryPropertyDao.batchInsert(repositoryPropertyList); + } + if (propertyMap != null && propertyMap.size() > 0) { + CoePropertyUtil.batchInsert(propertyMap); + } + if (fileAttrList != null && fileAttrList.size() > 0 && mark) { + fileAttrDao.batchInsert(fileAttrList); + } + if (shapeAttrList != null && shapeAttrList.size() > 0 && mark) { + shapeAttrDao.batchInsert(shapeAttrList); + } + if (shapeConfigList != null && shapeConfigList.size() > 0 && mark) { + shapeConfigDao.batchInsert(shapeConfigList); + } + + UtilFile repositoryFileSourceDir = new UtilFile(dc.getPath() + "/" + wsId); + + String targetPath = CoeWsConstant.getWorkspaceRootPath(wsId); + + UtilFile repositoryFileTargetDir = new UtilFile(targetPath); + UtilFile.removeFile(repositoryFileTargetDir); // 删除资产库中的数据 + // 将备份信息拷贝到资产库中 + if (repositoryFileSourceDir.exists() && repositoryFileSourceDir.isDirectory()) { + UtilFile.copyDir(repositoryFileSourceDir, repositoryFileTargetDir); + } + // 复制出现复制图形文件 + String shapeMapTargetPath = CoeDesignerConstant.SHAPE_MAP_FILE; + UtilFile shapeMapTargetFile = new UtilFile(shapeMapTargetPath); + UtilFile shapeMapSourceFile = new UtilFile(dc.getPath() + "/" + "shape.map.tpl"); + if (shapeMapSourceFile.exists()) { + UtilFile.copyFile(shapeMapSourceFile, shapeMapTargetFile); + } + + // 更新缓存 + PALRepositoryCache.getCache().reload(); + PALRepositoryPropertyCache.getCache().reload(); + DesignerShapeRelationCache.getCache().reload(); + PALDesignerFileCache.getCache().reload(); + CoeProcessLevelCorrelateCache.getCache().reload(); + if (mark) { + PALRepositoryAttributeCache.getCache().reload(); + PALRepositoryShapeAttributeCache.getCache().reload(); + PALRepositoryShapeConfigCache.getCache().reload(); + } + + // 更新PAL与BPMS的关联数据-数据迁移 + CoeProcessLevelUtil.updateCorrelateData(); + // 删除失效的关联/推送关系 + delInvalidCorrelateData(wsId); + // 更新关联表数据存储格式 + CoeProcessLevelUtil.correctFileRelationPropData(wsId); + backupModel.setState(4); + backupDao.update(backupModel); // 备份记录的状态设置为“恢复成功” + + return flag; + } + + /** + * 删除无效的流程关联/推送关联数据 + * 说明: + * AWS平台流程删除或者不同环境导入资产库会导致pal端关联/推送的关系数据失效 + * + */ + public void delInvalidCorrelateData(String wsId) { + List list = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getAllCoeProcessLevelByWsId(wsId); + if (list != null) { + for (PALRepositoryModel plModel : list) { + if ("process.bpmn2".equals(plModel.getMethodId())) { + CoeProcessLevelUtil.deleteInvalidCorrelate(plModel.getId()); + } + } + } + } + + /** + * 导出备份数据-生成bak + * + * @param session + * @param wsId + * @param id + * @return + * @author tanj + * @throws Exception + */ + public String exportBackup(UserContext session, final String wsId, final String id) throws Exception { + try { + //tmp/Normal/Normal为系统下载目录 tmp/exp/repository为bak文件过大时手工获取目录 tmp/Normal/Process为临时目录用于判断压缩文件是否完成 + DCContext dcContext = null; + //dcContext = DCUtil.createTempFileContext(CoEConstant.APP_ID, "", "", "bak"); + dcContext = DCUtil.createTempFileContext(CoEConstant.APP_ID, "", "Process", "bak"); // .正在压缩过程中的文件,待压缩完毕后转移到tmp/Normal/Normal文件夹下 + dcContext.setFileName(wsId + ".bak"); //名称:wsid_时间戳.bak + final File ff = new File(dcContext.getFilePath()); + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, COE_BACKUP); + DCContext dc = new DCContext(session, dcProfile, CoEConstant.APP_ID, wsId, id); + CoeWorkSpace cws = new CoeWorkSpace(); + CoeWorkSpaceModel model = cws.getAllModel(wsId); + JSONObject json = new JSONObject(); + json.put("wsId", wsId); + json.put("wsName", model.getWsName()); + json.put("wsAdmin", model.getWsAdmin()); + json.put("wsDm", model.getWsDm()); + json.put("wsDesc", model.getWsDesc()); + json.put("wsState", model.getWsState()); + json.put("wsOrgType", model.getWsOrgType().getIndex()); + json.put("wsTctype", model.getWsTctype()); + json.put("wsBgUrl", model.getWsBgUrl()); + json.put("wsOrderIndex", model.getWsOrderindex()); + json.put("wsVer", model.getWsVer()); + json.put("wsVersionUuid", model.getWsVersionUuid()); + json.put("isUse", model.getIsUse()); + json.put("upgradeDefaultAttr", false);// 导入资产库时是否进行资产库默认属性自动转换为自定义属性,true或无该属性-升级,false不升级 + FileOutputStream out = new FileOutputStream(dc.getPath() + "/wsMessage.txt"); + out.write(json.toString().getBytes("UTF-8")); + out.flush(); + out.close(); + final UtilFile repositoryDir = new UtilFile(dc.getPath()); + // .tmp/Normal/Normal + DCContext dcContext_finish = DCUtil.createTempFileContext(CoEConstant.APP_ID, "", "", "bak"); + dcContext_finish.setFileName(wsId + ".bak"); + final File ff_finish = new File(dcContext_finish.getFilePath()); + dcContext_finish.setSession(session); + if (repositoryDir.exists() && repositoryDir.isDirectory()) { + // .删除此资产库以前的备份 + UtilFile.removeFile(ff_finish); + new Thread(new Runnable() { + @Override + public void run() { + try { + // .生成此资产库新的备份 + UtilFile.zipCompress(repositoryDir.getPath(), ff); + long ffSize = ff.length() / 1024 /1024; //文件大小,单位:兆 + if(ffSize > OVERLEN_BACKUP - 10) { //超过限制大小 OVERLEN_BACKUP + DCContext dcContext_overlen = DCUtil.createTempFileContext(CoEConstant.APP_ID, "exp", "repository", "bak"); + dcContext_overlen.setFileName(wsId + ".bak"); //名称:wsid_id.bak + File ff_overlen = new File(dcContext_overlen.getFilePath()); + // .复制tmp/exp/repository的备份文件到tmp/exp/repository下,用于手工从服务器取文件 + UtilFile.copyFile(ff, ff_overlen); + } + // .转移tmp/exp/repository的备份文件到tmp/Normal/Normal下 + UtilFile.moveFile(ff, ff_finish); + UtilFile txtFile = new UtilFile(dc.getPath() + "/wsMessage.txt"); + if (txtFile.isFile() && txtFile.exists()) { + txtFile.delete(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + } catch (Exception e) { + throw new AWSException("导出错误,请联系系统管理员 msg:" + e.getMessage()); + } + return "等待完成bak"; + } + + /** + * 导出备份数据-进度查询 + * @param session + * @param wsId + * @param id + * @return 是否可下载状态 + * @throws Exception + */ + public String exportBackupProgress(UserContext session, String wsId, String id) throws Exception { + // .tmp/Normal/Normal + DCContext dcContext_finish = DCUtil.createTempFileContext(CoEConstant.APP_ID, "", "", "bak"); + dcContext_finish.setFileName(wsId + ".bak"); + dcContext_finish.setSession(session); + File ff_finish = new File(dcContext_finish.getFilePath()); + // .tmp/Normal/Process + DCContext dcContext = DCUtil.createTempFileContext(CoEConstant.APP_ID, "", "Process", "bak"); + dcContext.setFileName(wsId + ".bak"); //名称:wsid_时间戳.bak + File ff = new File(dcContext.getFilePath()); + + if(ff_finish.exists() && !ff.exists()) { + if(ff_finish.length() / 1024 /1024 > OVERLEN_BACKUP) { //超过限制大小OVERLEN_BACKUP + return "byhand"; //bak文件生成完成,手工下载 + } else { + return "finish"; //bak文件生成完成,系统可下载 + } + } else { + return "notfinish"; //bak文件正在生成中 + } + } + + /** + * 导出备份数据-下载地址 + * @param session + * @param wsId + * @param id + * @return 下载地址 + * @throws Exception + */ + public String exportBackupDownload(UserContext session, String wsId, String id) throws Exception { + // .tmp/Normal/Normal + DCContext dcContext_finish = DCUtil.createTempFileContext(CoEConstant.APP_ID, "", "", "bak"); + dcContext_finish.setFileName(wsId + ".bak"); + //File ff_finish = new File(dcContext_finish.getFilePath()); + dcContext_finish.setSession(session); + return dcContext_finish.getDownloadURL(); + } + + private JSONArray shapeCopyList2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (DesignerShapeCopyModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("shapeGroupId", model.getShapeGroupId()); + object.put("shapeName", model.getShapeName()); + object.put("shapeCategoryName", model.getShapecategoryName()); + object.put("repositoryId", model.getPalRepositoryId()); + object.put("isDelete", model.getIsDelete()); + object.put("shapeType", model.getShapeType()); + array.add(object); + } + } + + return array; + } + + private List JSONArray2ShapeCopyList(JSONArray array) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + DesignerShapeCopyModel model = new DesignerShapeCopyModel(); + model.setId(object.getString("id")); + model.setShapeGroupId(object.getString("shapeGroupId")); + model.setShapeName(object.getString("shapeName")); + model.setShapecategoryName(object.getString("shapeCategoryName")); + model.setPalRepositoryId(object.getString("repositoryId")); + model.setIsDelete(object.getString("isDelete")); + model.setShapeType(object.getString("shapeType")); + list.add(model); + } + } + return list; + } + + private JSONArray shapePasteList2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (DesignerShapePasteModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("shapeGroupId", model.getShapeGroupId()); + object.put("shapeName", model.getShapeName()); + object.put("shapeCategoryName", model.getShapecategoryName()); + object.put("repositoryId", model.getPalRepositoryId()); + object.put("isDelete", model.getIsDelete()); + object.put("shapeType", model.getShapeType()); + array.add(object); + } + } + + return array; + } + + private List JSONArray2ShapePasteList(JSONArray array) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + DesignerShapePasteModel model = new DesignerShapePasteModel(); + model.setId(object.getString("id")); + if (object.containsKey("shapeGroupId")) { + model.setShapeGroupId(object.getString("shapeGroupId")); + } + model.setShapeName(object.getString("shapeName")); + model.setShapecategoryName(object.getString("shapeCategoryName")); + model.setPalRepositoryId(object.getString("repositoryId")); + model.setIsDelete(object.getString("isDelete")); + model.setShapeType(object.getString("shapeType")); + list.add(model); + } + } + return list; + } + + private JSONArray shapeRelationList2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (DesignerShapeRelationModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("fileId", model.getFileId()); + object.put("shapeId", model.getShapeId()); + object.put("shapeText", model.getShapeText()); + object.put("relationFileId", model.getRelationFileId()); + object.put("relationShapeId", model.getRelationShapeId()); + object.put("relationShapeText", model.getRelationShapeText()); + object.put("attrId", model.getAttrId()); + array.add(object); + } + } + + return array; + } + + private List JSONArray2ShapeRelationList(JSONArray array) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + DesignerShapeRelationModel model = new DesignerShapeRelationModel(); + model.setId(object.getString("id")); + model.setFileId(object.getString("fileId")); + model.setShapeId(object.getString("shapeId")); + model.setShapeText(object.getString("shapeText")); + model.setRelationFileId(object.getString("relationFileId")); + model.setRelationShapeId(object.getString("relationShapeId")); + model.setRelationShapeText(object.getString("relationShapeText")); + model.setAttrId(object.getString("attrId")); + list.add(model); + } + } + return list; + } + + private JSONArray upfileList2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (UpfileModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getUuid()); + object.put("repositoryId", model.getPl_uuid()); + object.put("shapeId", model.getShape_uuid()); + object.put("fileName", model.getFileName()); + object.put("fileType", model.getType()); + Timestamp createTime = model.getCreateTime(); + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + object.put("createTime", sdf.format(createTime)); + object.put("createUser", model.getCreateUser()); + object.put("download", model.getDownload()); + object.put("securityLevel",model.getSecurityLevel()); + array.add(object); + } + } + + return array; + } + + private List JSONArray2UpfileList(JSONArray array) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + UpfileModel model = new UpfileModel(); + model.setUuid(object.getString("id")); + model.setPl_uuid(object.getString("repositoryId")); + model.setShape_uuid(object.getString("shapeId")); + model.setFileName(object.getString("fileName")); + model.setType(object.getString("fileType")); + model.setCreateTime(Timestamp.valueOf(object.getString("createTime"))); + model.setCreateUser(object.getString("createUser")); + model.setDownload(object.getInteger("download") == null ? 0 : object.getInteger("download")); + model.setSecurityLevel(object.getInteger("securityLevel")); + list.add(model); + } + } + return list; + } + + private JSONArray repositoryPropertyList2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (PALRepositoryPropertyModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("plId", model.getPlId()); + object.put("propertyId", model.getPropertyId()); + object.put("propertyName", model.getPropertyName()); + object.put("propertyValue", model.getPropertyValue()); + object.put("orderIndex", model.getOrderIndex()); + array.add(object); + } + } + return array; + } + + private List JSONArray2RepositoryPropertyList(JSONArray array) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + PALRepositoryPropertyModel model = new PALRepositoryPropertyModel(); + model.setId(object.getString("id")); + model.setPlId(object.getString("plId")); + model.setPropertyId(object.getString("propertyId")); + model.setPropertyName(object.getString("propertyName")); + model.setPropertyValue(object.getString("propertyValue")); + model.setOrderIndex(Integer.parseInt(object.getString("orderIndex"))); + list.add(model); + } + } + return list; + } + + private JSONArray specialProperty2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (PALRepositorySpecialPropertyModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("wsId", model.getWsId()); + object.put("plId", model.getPlId()); + object.put("type", model.getType()); + object.put("valueText", model.getValueText()); + array.add(object); + } + } + return array; + } + + private List JSONArray2specialProperty(JSONArray array) { + List list = new ArrayList<>(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + PALRepositorySpecialPropertyModel model = new PALRepositorySpecialPropertyModel(); + model.setId(object.getString("id")); + model.setPlId(object.getString("plId")); + model.setWsId(object.getString("wsId")); + model.setType(object.getString("type")); + if (object.get("valueText") != null) {// 兼容旧字段备份文件 + model.setValueText(object.getString("valueText")); + } else { + model.setValueText(object.getString("value")); + } + list.add(model); + } + } + return list; + } + + private JSONArray correlate2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (CoeProcessLevelCorrelateModel model : list) { + JSONObject object = new JSONObject(); + object.put("wsId", model.getWsId()); + object.put("plId", model.getPlId()); + object.put("plAwsVersionid", model.getPlAwsVersionid()); + object.put("plAwsId", model.getPlAwsId()); + object.put("plVersionId", model.getPlVersionId()); + object.put("correlateType", model.getCorrelateType()); + object.put("isCorrelate", model.isCorrelate()); + array.add(object); + } + } + return array; + } + + private List JSONArray2correlate(JSONArray array) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + CoeProcessLevelCorrelateModel model = new CoeProcessLevelCorrelateModel(); + model.setWsId(object.getString("wsId")); + model.setPlId(object.getString("plId")); + model.setPlAwsVersionid(object.getString("plAwsVersionid")); + model.setPlAwsId(object.getString("plAwsId")); + if (!UtilString.isEmpty(object.getString("plVersionId"))) { + model.setPlVersionId(object.getString("plVersionId")); + model.setCorrelateType(object.getIntValue("correlateType")); + model.setCorrelate(object.getBooleanValue("isCorrelate")); + } + list.add(model); + } + } + return list; + } + + private JSONObject property2JSONObject(Map map) { + JSONObject property = new JSONObject(); + if (map != null && map.size() > 0) { + for (Map.Entry entry : map.entrySet()) { + property.put(entry.getKey(), entry.getValue()); + } + } + return property; + } + + private Map jsonObject2Property(JSONObject property) { + Map map = new HashMap(); + Iterator it = property.keySet().iterator(); + while (it.hasNext()) { + String key = it.next(); + map.put(key, property.getString(key)); + } + return map; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/backup/model/CoEPALBackupModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/backup/model/CoEPALBackupModel.java new file mode 100644 index 00000000..f44c4c8d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/backup/model/CoEPALBackupModel.java @@ -0,0 +1,62 @@ +package com.actionsoft.apps.coe.pal.pal.backup.model; + +import java.sql.Timestamp; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +/** + * 资产库文件备份 + * + * @author zhangming + * @date 2015-8-3 + * @version 6.1 + * @description + */ +public class CoEPALBackupModel extends ModelBean { + + private static final long serialVersionUID = 1L; + + private String id; //key + private String wsId; //备份的资产库Id + private Timestamp backupTime; //备份时间 + private String userId; //备份用户 + private String remark; //备注 + private int state; //备份状态:0:正在备份; 1:备份成功; 2:备份失败; 3:正在恢复; 4:恢复成功; 5:恢复失败 + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getWsId() { + return wsId; + } + public void setWsId(String wsId) { + this.wsId = wsId; + } + public Timestamp getBackupTime() { + return backupTime; + } + public void setBackupTime(Timestamp backupTime) { + this.backupTime = backupTime; + } + public String getUserId() { + return userId; + } + public void setUserId(String userId) { + this.userId = userId; + } + public String getRemark() { + return remark; + } + public void setRemark(String remark) { + this.remark = remark; + } + public int getState() { + return state; + } + public void setState(int state) { + this.state = state; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/backup/web/CoEPALBackupWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/backup/web/CoEPALBackupWeb.java new file mode 100644 index 00000000..4220316c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/backup/web/CoEPALBackupWeb.java @@ -0,0 +1,320 @@ +package com.actionsoft.apps.coe.pal.pal.backup.web; + +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.util.UtilDate; +import com.actionsoft.bpms.util.UtilString; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.apps.coe.pal.pal.backup.dao.CoEPALBackup; +import com.actionsoft.apps.coe.pal.pal.backup.extend.CoEPALBackupProcessor; +import com.actionsoft.apps.coe.pal.pal.backup.model.CoEPALBackupModel; +import com.actionsoft.apps.coe.pal.util.StringHandleUtil; +import com.actionsoft.sdk.local.SDK; + +/** + * 资产库备份 web类 + * + * @author zhangming + * @date 2015-8-4 + * @version 6.1 + * @description + */ +public class CoEPALBackupWeb extends ActionWeb { + private UserContext _uc; + + public CoEPALBackupWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + /** + * 备份页面首页 + * + * @param wsId + * @return + * @author zhangming + */ + public String getHomePage(String wsId) { + Map macroLibraries = new HashMap(); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("wsId", wsId); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.backup.home.html", macroLibraries); + } + + /** + * 获取备份数据 + * + * @param wsId + * @return + * @author zhangming + */ + public String getBackupData(String wsId) { + ResponseObject ro = ResponseObject.newOkResponse(); + CoEPALBackup dao = new CoEPALBackup(); + List list = dao.getBackupListByWsId(wsId); + JSONArray data = new JSONArray(); + if (list != null && list.size() > 0) { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (CoEPALBackupModel model : list) { + JSONObject object = JSONObject.parseObject(model.toJson()); + object.put("backupTime", df.format(model.getBackupTime())); + object.put("userName", model.getUserId() == null ? "" : SDK.getORGAPI().getUserAliasNames(model.getUserId())); + object.put("remark", StringHandleUtil.replaceSpecialChart(model.getRemark())); + data.add(object); + } + } + ro.setData(data.toString()); + return ro.toString(); + } + + /** + * 新增一个备份 + * + * @param wsId + * @return + * @author zhangming + */ + public String saveBackup(final String wsId, String remark) { + ResponseObject ro = ResponseObject.newOkResponse(); + //保存历史记录 + CoEPALBackupModel model = new CoEPALBackupModel(); + final String id = UUIDGener.getUUID(); + model.setId(id); + model.setWsId(wsId); + model.setRemark(remark); + model.setUserId(_uc.getUID()); + CoEPALBackup dao = new CoEPALBackup(); + int r = dao.insert(model); + //开始备份 + if (r > 0) { + // 备份数据 + new Thread(new Runnable() { + @Override + public void run() { + CoEPALBackupProcessor manager = new CoEPALBackupProcessor(); + manager.backupData(_uc, wsId, id); + } + }).start(); + } else { + ro.err(); + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_BACKUP, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_BACKUP_CREATE); + } + return ro.toString(); + } + + /** + * 删除备份记录 + * + * @param wsId + * @param id + * @return + * @author zhangming + */ + public String deleteBackup(String wsId, String id) { + ResponseObject ro = ResponseObject.newOkResponse(); + CoEPALBackupProcessor manager = new CoEPALBackupProcessor(); + boolean flag = manager.deleteBackup(_uc, wsId, id); + if (!flag) { + ro.err("删除失败"); + } else { + CoEPALBackup dao = new CoEPALBackup(); + dao.delete(id); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_BACKUP, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_BACKUP_DELETE); + } + } + return ro.toString(); + } + + /** + * 恢复备份记录 + * + * @param wsId + * @param id + * @return + * @author zhangming + */ + public String recoverBackup(final String wsId, final String id) { + ResponseObject ro = ResponseObject.newOkResponse(); + CoEPALBackup backupDao = new CoEPALBackup(); + CoEPALBackupModel backupModel = backupDao.getBackupModel(id); + backupModel.setState(3); //备份记录的状态设置为“正在恢复” + backupDao.update(backupModel); + + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(1000); + } catch (InterruptedException e1) { + e1.printStackTrace(); + } + CoEPALBackupProcessor manager = new CoEPALBackupProcessor(); + try { + manager.recoverBackup(_uc, wsId, id); + } catch (Exception e) { + e.printStackTrace(); + CoEPALBackup backupDao = new CoEPALBackup(); + CoEPALBackupModel backupModel = backupDao.getBackupModel(id); + backupModel.setState(5); //备份记录的状态设置为“恢复失败” + backupDao.update(backupModel); + } + } + }).start(); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_BACKUP, CoEOpLogConst.OP_RESTORE, CoEOpLogConst.INFO_BACKUP_RESTORE); + } + return ro.toString(); + } + /** + * 导出备份记录-生成bak + * @param wsId + * @param id + * @return + * @author tanj + * @throws Exception + */ + public String getBackupExport(String wsId, String id) throws Exception { + ResponseObject ro = ResponseObject.newOkResponse(); + String url = ""; + CoEPALBackupProcessor manager = new CoEPALBackupProcessor(); + url = manager.exportBackup(_uc, wsId, id); + ro.put("downloadUrl", url); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_BACKUP, CoEOpLogConst.OP_DOWNLOAD, CoEOpLogConst.INFO_BACKUP_DOWNLOAD); + } + return ro.toString(); + } + + /** + * 导出备份记录-进度查询 + * @param wsId + * @param id + * @return + * @throws Exception + */ + public String getBackupExportProgress(String wsId, String id) throws Exception { + ResponseObject ro = ResponseObject.newOkResponse(); + String progress = ""; + CoEPALBackupProcessor manager = new CoEPALBackupProcessor(); + progress = manager.exportBackupProgress(_uc, wsId, id); + ro.put("progress", progress); + return ro.toString(); + } + + /** + * 导出备份记录-下载地址 + * @param wsId + * @param id + * @return + * @throws Exception + */ + public String getBackupExportDownload(String wsId, String id) throws Exception { + ResponseObject ro = ResponseObject.newOkResponse(); + String url = ""; + CoEPALBackupProcessor manager = new CoEPALBackupProcessor(); + url = manager.exportBackupDownload(_uc, wsId, id); + ro.put("downloadUrl", url); + return ro.toString(); + } + + + /** + * 获取备份状态 + * + * @param wsId + * @return + * @author zhangming + */ + public String getBackupState(String wsId, String id) { + ResponseObject ro = ResponseObject.newOkResponse(); + CoEPALBackup dao = new CoEPALBackup(); + CoEPALBackupModel model = dao.getBackupModel(id); + ro.put("state", model.getState()); + return ro.toString(); + } + + /** + * 修改备份的备注 + * + * @param id + * @param remark + * @return + * @author zhangming + */ + public String updateBackup(String id, String remark) { + ResponseObject ro = ResponseObject.newOkResponse("修改成功"); + + CoEPALBackup dao = new CoEPALBackup(); + CoEPALBackupModel model = dao.getBackupModel(id); + if (model != null) { + model.setRemark(remark); + dao.update(model); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_BACKUP, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_BACKUP_UPDATE); + } + } else { + ro = ResponseObject.newErrResponse("修改失败"); + return ro.toString(); + } + + return ro.toString(); + } + + /** + * 查询备份文件 + * @param wsId + * @return + */ + public String getPalPlWsBackupData(String wsId) { + ResponseObject ro = ResponseObject.newOkResponse(); + CoEPALBackup dao = new CoEPALBackup(); + List list = dao.getBackupListByWsId(wsId); + JSONArray data = new JSONArray(); + if (list != null && list.size() > 0) { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (CoEPALBackupModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("time", UtilDate.datetimeFormat(model.getBackupTime())); + String user = ""; + if (!UtilString.isEmpty(model.getUserId())) { + UserModel userModel = SDK.getORGAPI().getUser(model.getUserId()); + if (userModel == null) { + user = model.getUserId(); + } else { + user = SDK.getORGAPI().getUserNames(model.getUserId()); + } + } + object.put("user", user); + object.put("remark", model.getRemark().replace("\"", """)); + object.put("state", model.getState()); + data.add(object); + } + } + ro.setData(data.toString()); + return ro.toString(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/comment/constant/PALCommentConst.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/comment/constant/PALCommentConst.java new file mode 100644 index 00000000..883ed74f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/comment/constant/PALCommentConst.java @@ -0,0 +1,25 @@ +package com.actionsoft.apps.coe.pal.pal.comment.constant; + +/** + * 评论留言常量定义 + * + * + */ +public interface PALCommentConst { + + /** + * 来自内部讨论,发布门户不可见 + */ + public static int INFO_TYPE_PRIVATE = 0; + + /** + * 来自发布门户或与之互动,均可见 + */ + public static int INFO_TYPE_PUBLIC = 1; + + /** + * 评论对象是资产库文件Id + */ + public static int TARGET_TYPE_FILE = 0; + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/comment/dao/PALComment.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/comment/dao/PALComment.java new file mode 100644 index 00000000..7ce91711 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/comment/dao/PALComment.java @@ -0,0 +1,140 @@ +package com.actionsoft.apps.coe.pal.pal.comment.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.comment.model.PALCommentModel; +import com.actionsoft.exception.AWSDataAccessException; + +/** + * 资产库文件评论 + * + */ +public final class PALComment extends DaoObject { + + public PALComment() { + } + + @Override + public int insert(PALCommentModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) + model.setId(UUIDGener.getUUID()); + String sql = "INSERT INTO " + entityName() + "(ID,PID,STREAMID,WSID,TARGETTYPE,TARGETID,TEAMID,USERID,USERCOMMENT,COMMENTDATE,INFOTYPE)VALUES(:ID,:PID,:STREAMID,:WSID,:TARGETTYPE,:TARGETID,:TEAMID,:USERID,:USERCOMMENT,:COMMENTDATE,:INFOTYPE)"; + Map paraMap = new HashMap<>(); + paraMap.put("ID", model.getId()); + paraMap.put("PID", model.getPId()); + paraMap.put("STREAMID", model.getStreamId()); + paraMap.put("WSID", model.getWsId()); + paraMap.put("TARGETTYPE", model.getTargetType()); + paraMap.put("TARGETID", model.getTargetId()); + paraMap.put("TEAMID", model.getTeamId()); + paraMap.put("USERID", model.getUserId()); + paraMap.put("USERCOMMENT", model.getUserComment()); + paraMap.put("COMMENTDATE", new Timestamp(System.currentTimeMillis())); + paraMap.put("INFOTYPE", model.getInfoType()); + return DBSql.update(sql, paraMap); + } + + /** + * 当文件被删除时,删除相关评论信息 + * + * @param respostoryId 资源库文件Id + * @throws AWSDataAccessException + */ + public void deleteByRespostoryId(String respostoryId) throws AWSDataAccessException { + DBSql.update("DELETE FROM " + entityName() + " WHERE TARGETTYPE=0 AND TARGETID=? ", new Object[] { respostoryId }); + } + + /** + * 当资产库被删除时,删除相关评论信息 + * + * @param wsId 资产库Id + * @throws AWSDataAccessException + */ + public void deleteByWorkspaceId(String wsId) throws AWSDataAccessException { + DBSql.update("DELETE FROM " + entityName() + " WHERE WSID=? ", new Object[] { wsId }); + } + + @Override + public int update(PALCommentModel model) throws AWSDataAccessException { + return -1; + } + + @Override + public String entityName() { + return "APP_ACT_COE_PAL_COMMENT"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public PALCommentModel mapRow(ResultSet rset, int rowNum) throws SQLException { + PALCommentModel model = new PALCommentModel(); + try { + model.setId(rset.getString("ID")); + model.setPId(rset.getString("PID")); + model.setStreamId(rset.getString("STREAMID")); + model.setWsId(rset.getString("WSID")); + model.setTargetType(rset.getInt("TARGETTYPE")); + model.setTargetId(rset.getString("TARGETID")); + model.setTeamId(rset.getString("TEAMID")); + model.setUserId(rset.getString("USERID")); + model.setUserComment(rset.getString("USERCOMMENT")); + model.setCommentDate(rset.getTimestamp("COMMENTDATE")); + model.setInfoType(rset.getInt("INFOTYPE")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + + } + + /** + * 获取流程文件的信息 + * + * @param targetId + * @param pid + * @return + */ + public List getCommentList(String targetId, String pid, String openAppType) { + StringBuilder sql = new StringBuilder("select * from " + entityName() + " where TARGETTYPE = 0 and TARGETID = ?"); + if (openAppType != null && !"".equals(openAppType) && !"0".equals(openAppType)) { + sql.append(" and INFOTYPE = ").append(openAppType); + } + if (pid != null && !"".equals(pid) && !"-1".equals(pid)) { + sql.append(" and PID = ? order by COMMENTDATE desc"); + return DBSql.query(sql.toString(), new Mapper(), new Object[] { targetId, pid }); + } else if ("-1".equals(pid)) { + sql.append(" and (PID ='' or PID IS NULL) order by COMMENTDATE desc"); + return DBSql.query(sql.toString(), new Mapper(), new Object[] { targetId }); + } else { + sql.append(" order by COMMENTDATE desc"); + return DBSql.query(sql.toString(), new Mapper(), new Object[] { targetId }); + } + } + + /** + * 根据streanId获取对应的commentModel + * + * @param streamId + * @return + * @author zhangming + */ + public PALCommentModel getCommentByStreamId(String streamId) { + String sql = "select * from " + entityName() + " where STREAMID=? and (PID='' or PID IS NULL)"; + return DBSql.getObject(sql, new Mapper(), new Object[]{ streamId }); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/comment/model/PALCommentModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/comment/model/PALCommentModel.java new file mode 100644 index 00000000..d8e852bd --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/comment/model/PALCommentModel.java @@ -0,0 +1,179 @@ +package com.actionsoft.apps.coe.pal.pal.comment.model; + +import java.sql.Timestamp; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; +import com.actionsoft.apps.coe.pal.pal.comment.constant.PALCommentConst; + +/** + * 资产库文件评论 + * + * @author jack + * + */ +public class PALCommentModel extends ModelBean { + private static final long serialVersionUID = 1L; + private String id; + private String pId; + private String streamId; + private String wsId; + private int targetType; + private String targetId; + private String teamId; + private String userId; + private String userComment; + private Timestamp commentDate; + private int infoType; + + /** + * 评论Id,一个定长36位字符串 + * + * @return + */ + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + /** + * 父贴Id,空串表示主评论 + * + * @return + */ + public String getPId() { + if (pId == null) { + pId = ""; + } + return pId; + } + + public void setPId(String pId) { + this.pId = pId; + } + + /** + * 如果启用工作网络,该评论对应的社交流信息Id + * + * @return + */ + public String getStreamId() { + if (streamId == null) + streamId = ""; + return streamId; + } + + public void setStreamId(String streamId) { + this.streamId = streamId; + } + + /** + * 资产库Id + * + * @return + */ + public String getWsId() { + return wsId; + } + + public void setWsId(String wsId) { + this.wsId = wsId; + } + + /** + * 评论对象类型 + * + * @return + * @see PALCommentConst#TARGET_TYPE_FILE 评论对象是资产库文件Id + */ + public int getTargetType() { + return targetType; + } + + public void setTargetType(int targetType) { + this.targetType = targetType; + } + + /** + * 评论对象Id,如果targetType=0,此处为资产库文件Id + * + * @return + */ + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + /** + * 如果评论来自工作网络的流程团队,此处为小组Id + * + * @return + */ + public String getTeamId() { + return teamId; + } + + public void setTeamId(String teamId) { + this.teamId = teamId; + } + + /** + * 一个合法的AWS账户 + * + * @return + */ + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + /** + * 评论内容 + * + * @return + */ + public String getUserComment() { + return userComment; + } + + public void setUserComment(String userComment) { + this.userComment = userComment; + } + + /** + * 评论日期 + * + * @return + */ + public Timestamp getCommentDate() { + return commentDate; + } + + public void setCommentDate(Timestamp commentDate) { + this.commentDate = commentDate; + } + + /** + * 信息类型 + * + * @return + * @see PALCommentConst#INFO_TYPE_PRIVATE 来自内部讨论,发布门户不可见 + * @see PALCommentConst#INFO_TYPE_PUBLIC 来自发布门户或与之互动,均可见 + */ + public int getInfoType() { + return infoType; + } + + public void setInfoType(int infoType) { + this.infoType = infoType; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/expression/GetDWConditionExpression.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/expression/GetDWConditionExpression.java new file mode 100644 index 00000000..d963cd35 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/expression/GetDWConditionExpression.java @@ -0,0 +1,23 @@ +package com.actionsoft.apps.coe.pal.pal.expression; + +import com.actionsoft.bpms.commons.at.AbstExpression; +import com.actionsoft.bpms.commons.at.ExpressionContext; +import com.actionsoft.exception.AWSExpressionException; + +public class GetDWConditionExpression extends AbstExpression{ + + public GetDWConditionExpression(ExpressionContext atContext, + String expressionValue) { + super(atContext, expressionValue); + } + + @Override + public String execute(String expression) throws AWSExpressionException { + String result = ""; + String fieldName = getParameter(expression, 1); + String fieldValue = getParameter(expression, 2); + result = "[{tp:'TEXT',cp:'=',fd:'"+ fieldName +"',cv:'" + fieldValue + "'}]"; + return result; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/home/aslp/RegisterExtendsApp.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/home/aslp/RegisterExtendsApp.java new file mode 100644 index 00000000..e465ff73 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/home/aslp/RegisterExtendsApp.java @@ -0,0 +1,38 @@ +package com.actionsoft.apps.coe.pal.pal.home.aslp; + +import com.actionsoft.apps.coe.pal.pal.home.extend.ExtendsAppManager; +import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppManager; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; + +import java.util.Map; + +/** + * 为PAL资产库应用扩展App,通过该ASLP即可完成注册。推荐注册位置放在该App的启动后事件 + * @author sunlh + * @date 2020-04-07 + * + */ +public class RegisterExtendsApp implements ASLP { + + @Override + public ResponseObject call(Map params) { + if (params == null) { + return ResponseObject.newErrResponse().err("不接受参数为空的调用!"); + } + if (!params.containsKey("mainClass")) { + return ResponseObject.newErrResponse().err("mainClass参数不允许为空!"); + } + String mainClass = params.get("mainClass").toString(); + if (UtilString.isEmpty(mainClass)) { + return ResponseObject.newErrResponse().err("mainClass参数不允许为空!"); + } + AppContext app = (AppContext) params.get("caller"); + String title = params.get("title").toString(); + String desc = params.get("desc").toString(); + ExtendsAppManager.register(mainClass, app, title, desc); + return ResponseObject.newOkResponse(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/home/extend/ExtendsAppManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/home/extend/ExtendsAppManager.java new file mode 100644 index 00000000..8331aa3c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/home/extend/ExtendsAppManager.java @@ -0,0 +1,125 @@ +package com.actionsoft.apps.coe.pal.pal.home.extend; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.ClassReflect; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.exception.AWSForbiddenException; +import com.actionsoft.exception.AWSIllegalArgumentException; +import com.actionsoft.sdk.local.SDK; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +/** + * 注册和管理PAL流程资产库的一些扩展应用 + * @author sunlh + * @date 2020-04-07 + * + */ +public class ExtendsAppManager { + + private static List _list = new ArrayList<>(); + + /** + * 注册PAL关联应用 + * @param appContext + * @param title + * @param desc + */ + public static void register(String mainClass, AppContext appContext, String title, String desc) { + ExtendsAppProfile profile = createProfile(mainClass, appContext, title, desc); + boolean isUpdate = false; + int i = 0; + for (i = 0; i < _list.size(); i++) { + ExtendsAppProfile p = _list.get(i); + if (p.getAppContext().getId().equals(profile.getAppContext().getId())) { + isUpdate = true; + SDK.getAppAPI().info(SDK.getAppAPI().getAppContext(CoEConstant.APP_ID), "扩展应用App[" + profile.getAppContext().getNameI18N() + "]重新被注册"); + break; + } + } + if (!isUpdate) { + _list.add(profile); + SDK.getAppAPI().info(SDK.getAppAPI().getAppContext(CoEConstant.APP_ID), "扩展应用App[" + profile.getAppContext().getNameI18N() + "]注册成功"); + } else { + _list.remove(i); + _list.add(profile); + } + } + + /** + * 根据id获得profile注册信息 + * @param mainClass 注册profile时的class + * @return 如果没有找到返回null + */ + public static ExtendsAppProfile getProfile(String mainClass) { + for (ExtendsAppProfile p : _list) { + if (p.getMainClass().equals(mainClass)) { + return p; + } + } + return null; + } + + /** + * 创建profile + * @param mainClass + * @param appContext + * @return + */ + private static ExtendsAppProfile createProfile(String mainClass, AppContext appContext, String title, String desc) { + ExtendsAppProfile profile = new ExtendsAppProfile(); + profile.setAppContext(appContext); + profile.setMainClass(mainClass); + profile.setTitle(title); + profile.setDesc(desc); + return profile; + } + + /** + * 运行应用mainPage方法 + */ + public static String getMainPage(String className, UserContext userContext, String wsId, String teamId) { + if (UtilString.isEmpty(className)) { + throw new AWSIllegalArgumentException("PAL应用扩展实现类", AWSIllegalArgumentException.EMPT); + } + ExtendsAppProfile profile = getProfile(className); + if (!SDK.getAppAPI().isActive(profile.getAppContext().getId())) { + throw new AWSForbiddenException("应用[" + profile.getAppContext().getName() + "]已停止,PAL应用扩展[" + profile.getAppContext().getName() + "]暂不可用"); + } + Constructor cons = null; + try { + cons = ClassReflect.getConstructor(profile.getMainClass(), null, profile.getAppContext()); + } catch (Exception e) { + e.printStackTrace(); + SDK.getAppAPI().err(profile.getAppContext(), profile.getMainClass() + "--" + e.toString()); + } + if (cons != null) { + // 获得该接口实现类 + try { + Class mainClass = profile.getAppContext().getBindClassLoader().loadClass(profile.getMainClass()); + Object obj = cons.newInstance(); + Method execute = mainClass.getMethod("mainPage", new Class[]{UserContext.class, String.class, String.class}); + return execute.invoke(obj, new Object[] {userContext, wsId, teamId}).toString(); + } catch (Exception e) { + e.printStackTrace(); + SDK.getAppAPI().err(profile.getAppContext(), profile.getMainClass() + "--" + e.toString()); + } + } + return SDK.getPortalAPI().getMessagePageOfError("提示", "应用不可用"); + } + + public static List getList() { + List list = new ArrayList<>(); + for (ExtendsAppProfile p : _list) { + if (SDK.getAppAPI().isActive(p.getAppContext().getId())) { + list.add(p); + } + } + return list; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/home/extend/ExtendsAppProfile.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/home/extend/ExtendsAppProfile.java new file mode 100644 index 00000000..73d5ff31 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/home/extend/ExtendsAppProfile.java @@ -0,0 +1,52 @@ +package com.actionsoft.apps.coe.pal.pal.home.extend; + +import com.actionsoft.apps.resource.AppContext; + +/** + * PAL流程资产库扩展应用描述 + * @author sunlh + * @date 2020-04-07 + * + */ +public class ExtendsAppProfile { + private String title; + private String desc; + private String mainClass; + private AppContext appContext;// 应用 + + public ExtendsAppProfile() { + + }; + + public String getMainClass() { + return mainClass; + } + + public void setMainClass(String mainClass) { + this.mainClass = mainClass; + } + + public void setAppContext(AppContext appContext) { + this.appContext = appContext; + } + + public AppContext getAppContext() { + return appContext; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/home/web/PalHomeWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/home/web/PalHomeWeb.java new file mode 100644 index 00000000..b84bd990 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/home/web/PalHomeWeb.java @@ -0,0 +1,68 @@ +package com.actionsoft.apps.coe.pal.pal.home.web; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.home.extend.ExtendsAppManager; +import com.actionsoft.apps.coe.pal.pal.home.extend.ExtendsAppProfile; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.apps.coe.pal.pal.repository.cache.CoeProcessLevelNoCache; +import com.actionsoft.sdk.local.SDK; + +/** + * 资产库首页web + * + * @author zhouxuan + */ +public class PalHomeWeb extends ActionWeb { + private UserContext _uc; + + public PalHomeWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + /** + * 获得资产库首页 + */ + public String getHomeHtml(String wsid) { + StringBuffer sb = new StringBuffer(); + StringBuffer smallSb = new StringBuffer(); + List list = ExtendsAppManager.getList(); + + for (ExtendsAppProfile profile : list) { + AppContext appContext = profile.getAppContext(); + if (SDK.getAppAPI().isActive(appContext.getId())) { + sb.append("
  • " + appContext.getName() + "
  • "); + smallSb.append("
  • "); + } + } + + Map macroLibraries = new HashMap(); + macroLibraries.put("html", sb.toString()); + macroLibraries.put("smallHtml", smallSb.toString()); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("wsid", wsid); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.home.htm", macroLibraries); + } + + static {// 流程分级加载缓存数据 + CoeProcessLevelNoCache.getInstance().reload(); + } + + /** + * 跳转到app首页 + * + * @param wsId + * @param clazzName + * @return + */ + public String toAppHome(String wsId, String teamId, String clazzName) { + return ExtendsAppManager.getMainPage(clazzName, _uc, wsId, teamId); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/method/PalManageWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/method/PalManageWeb.java new file mode 100644 index 00000000..c5e106e3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/method/PalManageWeb.java @@ -0,0 +1,1410 @@ +package com.actionsoft.apps.coe.pal.pal.manage.method; + +import java.io.File; +import java.sql.SQLException; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.coe.pal.pal.manage.util.PalManageUtil; +import com.actionsoft.apps.coe.pal.pal.method.PALMethodManager; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryAttributeCache; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryShapeAttributeCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.*; +import com.actionsoft.apps.coe.pal.pal.repository.model.*; +import com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.method.constant.PALMethodConst; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryShapeConfigCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.CoeDesignerShapeAPIManager; +import com.actionsoft.apps.coe.pal.system.util.XMLUtil; +import com.actionsoft.exception.AWSException; +import com.actionsoft.sdk.local.api.AppAPI; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; + +import com.actionsoft.bpms.bpmn.modeler.constant.BPMNConstant; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeGroupModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodLinkerModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.i18n.I18nRes; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSONObject; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.lang.StringUtils; +import org.dom4j.Document; +import org.dom4j.Element; + +/** + * 资产库->管理web层 + * + * @author 作者: wangyh + * @version 创建时间:2014-3-11 + * + */ +public class PalManageWeb extends ActionWeb { + private UserContext _uc; + + public UserContext get_uc() { + return _uc; + } + + public void set_uc(UserContext _uc) { + this._uc = _uc; + } + + public PalManageWeb(UserContext _uc) { + super(_uc); + this._uc = _uc; + } + + /** + * 获取schema中的json + * + * @author wangyh + * @version 创建时间:2014-3-11 下午1:55:13 + * @param schema + * @return + */ + private List getSchemaToJson(String schema) { + List list = new ArrayList(); + String par = "Schema.addShape\\((.*?)\\);"; + Pattern pattern = Pattern.compile(par, Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(schema); + while (matcher.find()) { + list.add(matcher.group(1)); + } + return list; + } + + private String replaceTextEPC(String schema) { + return schema.replace("Math.PI*0.5", "\"\""); + } + + /** + * 将js中的定义的变量改成常量 + * + * @author wangyh + * @version 创建时间:2014-3-11 下午1:59:26 + * @param schema + * @return + */ + private String replaceText(String schema) { + return schema.replace("startEventText", "\"" + BPMNConstant.BPMN_TYPE_START_EVENT_TITLE + "\"").replace("verticalPoolText", "\"" + BPMNConstant.BPMN_TYPE_VERTICAL_POOL_TITLE + "\"").replace("userTaskText", "\"" + BPMNConstant.BPMN_TYPE_USER_TASK_TITLE + "\"").replace("exclusiveGatewayText", "\"" + BPMNConstant.BPMN_TYPE_EXCLUSIVE_GATEWAY_TITLE + "\"").replace("horizontalPoolText", "\"" + BPMNConstant.BPMN_TYPE_POOL_TITLE + "\"").replace("timerStartEventText", "\"" + BPMNConstant.AWS_ELEMENT_START_EVENT_TIMER_EVENT_DEFINITION_TITLE + "\"") + .replace("signalStartEventText", "\"" + BPMNConstant.AWS_ELEMENT_START_EVENT_SIGNAL_EVENT_DEFINITION_TITLE + "\"").replace("horizontalLaneText", "\"" + BPMNConstant.BPMN_TYPE_LANE_TITLE + "\"").replace("timerIntermediateCatchEventText", "\"" + BPMNConstant.AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_TIMER_EVENT_DEFINITION_TITLE + "\"").replace("messageBoundaryInterrputingEventText", "\"" + BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_MESSAGE_EVENT_DEFINITION_TITLE + "\"").replace("endEventText", "\"" + BPMNConstant.BPMN_TYPE_END_EVENT_TITLE + "\"") + .replace("callActivityCallingProcessText", "\"" + BPMNConstant.BPMN_TYPE_CALL_ACTIVITY_CALLING_PROCESS_TITLE + "\"").replace("transactionText", "\"" + BPMNConstant.BPMN_TYPE_TRANSACTION_TITLE + "\"").replace("groupText", "\"" + BPMNConstant.BPMN_TYPE_GROUP_TITLE + "\"").replace("textAnnotationText", "\"" + BPMNConstant.BPMN_TYPE_TEXT_ANNOTATION_TITLE + "\"").replace("messageStartEventText", "\"" + BPMNConstant.AWS_ELEMENT_START_EVENT_MESSAGE_EVENT_DEFINITION_TITLE + "\"") + .replace("messageIntermediateCatchEventText", "\"" + BPMNConstant.AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_MESSAGE_EVENT_DEFINITION_TITLE + "\"").replace("signalIntermediateCatchEventText", "\"" + BPMNConstant.AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_SIGNAL_EVENT_DEFINITION_TITLE + "\"").replace("messageIntermediateThrowingEventText", "\"" + BPMNConstant.AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_MESSAGE_EVENT_DEFINITION_TITLE + "\"") + .replace("signalIntermediateThrowingEventText", "\"" + BPMNConstant.AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_SIGNAL_EVENT_DEFINITION_TITLE + "\"").replace("signalBoundaryInterrputingEventText", "\"边界信号事件\"").replace("compensationBoundaryInterrputingEventText", "\"" + BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_COMPENSATE_EVENT_DEFINITION_TITLE + "\"").replace("errorBoundaryInterrputingEventText", "\"" + BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_ERROR_EVENT_DEFINITION_TITLE + "\"") + .replace("terminateEndEventText", "\"" + BPMNConstant.AWS_ELEMENT_END_EVENT_TERMINATE_EVENT_DEFINITION_TITLE + "\"").replace("messageEndEventText", "\"" + BPMNConstant.AWS_ELEMENT_END_EVENT_MESSAGE_EVENT_DEFINITION_TITLE + "\"").replace("signalEndEventText", "\"" + BPMNConstant.AWS_ELEMENT_END_EVENT_SIGNAL_EVENT_DEFINITION_TITLE + "\"").replace("errorEndEventText", "\"" + BPMNConstant.AWS_ELEMENT_END_EVENT_ERROR_EVENT_DEFINITION_TITLE + "\"").replace("serviceTaskText", "\"" + BPMNConstant.BPMN_TYPE_SERVICE_TASK_TITLE + "\"") + .replace("manualTaskText", "\"" + BPMNConstant.BPMN_TYPE_MANUAL_TASK_TITLE + "\"").replace("receiveTaskText", "\"" + BPMNConstant.BPMN_TYPE_RECEIVE_TASK_TITLE + "\"").replace("sendTaskText", "\"" + BPMNConstant.BPMN_TYPE_SEND_TASK_TITLE + "\"").replace("scriptTaskText", "\"" + BPMNConstant.BPMN_TYPE_SCRIPT_TASK_TITLE + "\"").replace("businessRuleTaskText", "\"" + BPMNConstant.BPMN_TYPE_BUSINESSRULE_TASK_TITLE + "\"").replace("inclusiveGatewayText", "\"" + BPMNConstant.BPMN_TYPE_INCLUSIVE_GATEWAY_TITLE + "\"") + .replace("complexGatewayText", "\"" + BPMNConstant.BPMN_TYPE_COMPLEX_GATEWAY_TITLE + "\"").replace("eventBasedGatewayText", "\"" + BPMNConstant.BPMN_TYPE_EVENTBASED_GATEWAY_TITLE + "\"").replace("parallelGatewayText", "\"" + BPMNConstant.BPMN_TYPE_PARALLEL_GATEWAY_TITLE + "\"").replace("verticalLaneText", "\"" + BPMNConstant.BPMN_TYPE_VERTICAL_LANE_TITLE + "\"").replace("userTaskLineColor", "\"\"").replace("userTaskFillStyleBeginColor", "\"\"").replace("userTaskFillStyleBndColor", "\"\"").replace("userTaskContentColor", "\"\"") + .replace("servicesTaskLineColor", "\"\"").replace("servicesTaskFillStyleBeginColor", "\"\"").replace("servicesTaskFillStyleBndColor", "\"\"").replace("servicesTaskContentColor", "\"\"").replace("taskLineColor", "\"\"").replace("taskFillStyleBeginColor", "\"\"").replace("taskFillStyleBndColor", "\"\"").replace("taskContentColor", "\"\"").replace("gatewayLineColor", "\"\"").replace("gatewayFillStyleBeginColor", "\"\"").replace("gatewayFillStyleBndColor", "\"\"").replace("gatewayContentColor", "\"\"").replace("endEventLineColor", "\"\"") + .replace("endEventFillStyleBeginColor", "\"\"").replace("endEventFillStyleBndColor", "\"\"").replace("endEventContentColor", "\"\"").replace("startEventFillStyleBndColor", "\"\"").replace("startEventContentColor", "\"\"").replace("startEventLineColor", "\"\"").replace("startEventFillStyleBeginColor", "\"\"").replace("boundaryEventLineColor", "\"\"").replace("boundaryEventFillStyleBeginColor", "\"\"").replace("boundaryEventFillStyleBndColor", "\"\"").replace("boundaryEventContentColor", "\"\"").replace("intermediateCatchEventLineColor", "\"\"") + .replace("intermediateCatchEventFillStyleBeginColor", "\"\"").replace("intermediateCatchEventFillStyleBndColor", "\"\"").replace("intermediateCatchEventContentColor", "\"\"").replace("intermediateCatchEventLineColor", "\"\"").replace("intermediateCatchEventFillStyleBndColor", "\"\"").replace("intermediateCatchEventContentColor", "\"\"").replace("intermediateThrowingEventLineColor", "\"\"").replace("intermediateThrowingEventFillStyleBeginColor", "\"\"").replace("intermediateThrowingEventFillStyleBndColor", "\"\"") + .replace("intermediateThrowingEventContentColor", "\"\"").replace("intermediateCatchEventFillStyleBeginColor", "\"\""); + } + + /** + * 得到属性部分信息 + * + * @param methodId + * @return + */ + public String getCoePalPlManageMainAttrMessage(String methodId) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALMethodModel model = PALMethodCache.getPALMethodModelById(methodId); + List group = model.getGroup(); + //类型 + JSONArray typeOpts = new JSONArray(); + LinkedHashMap map = (LinkedHashMap) PalManageUtil.getMethodAttrTypeMap(); + for (Map.Entry entry : map.entrySet()) { + JSONObject type = new JSONObject(); + type.put("label", entry.getValue()); + type.put("value", entry.getKey()); + typeOpts.add(type); + } + ro.put("typeOpts", typeOpts); + + // relation关联时的关联范围 + JSONArray relationScopeOpts = new JSONArray(); + LinkedHashMap categoryAndMehtodMap = (LinkedHashMap) PalManageUtil.getMethodAttrRelationMethodGategoryAndMethodMap(); + for (Map.Entry entry : categoryAndMehtodMap.entrySet()) { + JSONObject type = new JSONObject(); + type.put("label", entry.getValue()); + type.put("value", entry.getKey()); + relationScopeOpts.add(type); + } + ro.put("relationMethodScopeOpts", relationScopeOpts); + // relation关联时的关联类型 + JSONArray relationTypeOpts = new JSONArray(); + LinkedHashMap relationTypeMap = (LinkedHashMap) PalManageUtil.getMethodAttrRelationTypeMap(); + for (Map.Entry entry : relationTypeMap.entrySet()) { + JSONObject type = new JSONObject(); + type.put("label", entry.getValue()); + type.put("value", entry.getKey()); + relationTypeOpts.add(type); + } + ro.put("relationTypeOpts", relationTypeOpts); + + // awsorg关联bpm组织架构时关联类型 + JSONArray awsorgScopeOpts = new JSONArray(); + LinkedHashMap awsorgScopeMap = (LinkedHashMap) PalManageUtil.getMethodAttrAwsorgTypeMap(); + for (Map.Entry entry : awsorgScopeMap.entrySet()) { + JSONObject type = new JSONObject(); + type.put("label", entry.getValue()); + type.put("value", entry.getKey()); + awsorgScopeOpts.add(type); + } + ro.put("awsorgScopeOpts", awsorgScopeOpts); + + + //组别 + JSONArray groupOpts = new JSONArray(); + for (PALMethodAttributeGroupModel groupModel : group) { + JSONObject obj = new JSONObject(); + obj.put("label", groupModel.getDesc()); + obj.put("value", groupModel.getName()); + groupOpts.add(obj); + } + ro.put("groupOpts", groupOpts); + //图形 + JSONArray shapeOpts = new JSONArray(); + Map shapes = Maps.newHashMap(); + String schema = model.getSchema(); + String customSchema = model.getCustomSchema(); + getShapesBySchema(methodId, schema, shapes); + getShapesBySchema(methodId, customSchema, shapes); + for (Map.Entry entry : shapes.entrySet()) { + JSONObject obj = new JSONObject(); + obj.put("label", entry.getValue()); + obj.put("value", entry.getKey()); + shapeOpts.add(obj); + } + ro.put("shapeOpts", shapeOpts); + return ro.toString(); + } + + public void getShapesBySchema(String methodId, String schema, Map shapes) { + if (StringUtils.isEmpty(schema)) { + return; + } + String tempSchema = ShapeUtil.replaceBlank(schema); + if (methodId.contains("bpmn2")) + tempSchema = replaceText(tempSchema); + if (methodId.contains("epc") || methodId.contains("org")) + tempSchema = replaceTextEPC(tempSchema); + List list = getSchemaToJson(tempSchema); + for (int i = 0; i < list.size(); i++) { + String s = list.get(i); + String name; + String title; + if (s.contains("name:\"")) { + s = s.substring(s.indexOf("name:\"")); + name = s.substring(s.indexOf("name:\"") + 6, s.indexOf("\",")); + } else { + s = s.substring(s.indexOf("\"name\":")); + name = s.substring(s.indexOf("\"name\":") + 8, s.indexOf("\",")); + } + if (s.contains("title:\"")) { + s = s.substring(s.indexOf("title:\"")); + title = s.substring(s.indexOf("title:\"") + 7, s.indexOf("\",")); + } else { + s = s.substring(s.indexOf("\"title\":")); + title = s.substring(s.indexOf("\"title\":") + 9, s.indexOf("\",")); + } + if ("Participant".equals(title) || "VerticalSeparatorBar".equals(title) || "verticalSeparatorBar".equals(name) || "horizontalSeparatorBar".equals(name)) { + continue; + } + shapes.put(name, title); + } + } + + /** + * 处理属性作用范围为title + * + * @param methodId + * @param scope + * @return + */ + public String handleAttrScope(String methodId, String scope) { + PALMethodModel model = PALMethodCache.getPALMethodModelById(methodId); + //图形 + Map shapes = Maps.newHashMap(); + String schema = model.getSchema(); + String tempSchema = ShapeUtil.replaceBlank(schema); + if (methodId.contains("bpmn2")) + tempSchema = replaceText(tempSchema); + if (methodId.contains("epc") || methodId.contains("org")) + tempSchema = replaceTextEPC(tempSchema); + List list = getSchemaToJson(tempSchema); + for (int i = 0; i < list.size(); i++) { + String s = list.get(i); + String name; + String title; + if (s.contains("name:\"")) { + s = s.substring(s.indexOf("name:\"")); + name = s.substring(s.indexOf("name:\"") + 6, s.indexOf("\",")); + } else { + s = s.substring(s.indexOf("name:")); + name = s.substring(s.indexOf("name:") + 5, s.indexOf("\",")); + } + if (s.contains("title:\"")) { + s = s.substring(s.indexOf("title:\"")); + title = s.substring(s.indexOf("title:\"") + 7, s.indexOf("\",")); + } else { + s = s.substring(s.indexOf("title:")); + title = s.substring(s.indexOf("title:") + 6, s.indexOf(",")); + } + shapes.put(name, title); + } + //将scope转变为图形title连接字符串 + List scopeStr = Lists.newArrayList(); + if ("%".equals(scope)) { + return "文件"; + } + if (scope.contains("%")) { + scopeStr.add("文件"); + } + if (scope.contains("*")) { + scopeStr.add("所有图形"); + return Joiner.on(",").join(scopeStr); + } + String[] scopeArray = scope.split(","); + Set keys = shapes.keySet(); + for (int i = 0; i < scopeArray.length; i++) { + for (String key : keys) { + if (key.equals(scopeArray[i])) { + scopeStr.add(shapes.get(key)); + break; + } + } + } + return Joiner.on(",").join(scopeStr); + } + + /** + * 查询形状的配置信息 + * + * @param wsId + * @param methodId + * @param shapeId + * @return + */ + public String getCoePalPlManageShapeConfigByShapeId(String wsId, String methodId, String shapeId) { + //从缓存中取数据 + List list = PALRepositoryShapeConfigCache.getShapeConfigListByShapeId(wsId, methodId, shapeId); + //orderBy orderIndex 调整顺序 + list.sort(Comparator.comparing(PALRepositoryShapeConfigModel::getOrderIndex)); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(list); + return ro.toString(); + } + + /** + * 保存形状的配置信息 + * + * @param wsId + * @param methodId + * @param shapeId + * @param dataArray + * @return + */ + public String saveCoePalPlManageShapeConfig(String wsId, String methodId, String shapeId, String dataArray) { + //采用批量添加(之前需要先删除当前shapeId的所有配置信息) + //处理数据 + List configLists = Lists.newArrayList(); + JSONArray configArray = JSON.parseArray(dataArray); + for (int i = 0; i < configArray.size(); i++) { + JSONObject configObj = configArray.getJSONObject(i); + String attribute = JSON.toJSONString(configObj); + PALRepositoryShapeConfigModel model = new PALRepositoryShapeConfigModel(); + model.setId(UUIDGener.getUUID()); + model.setWsId(wsId); + model.setMethodId(methodId); + model.setShapeId(shapeId); + model.setAttribute(attribute); + model.setOrderIndex(i + 1); + configLists.add(model); + } + //保存数据 + PALRepositoryShapeConfigDao dao = new PALRepositoryShapeConfigDao(); + try { + dao.updateShapeConfigByShapeId(wsId, methodId, shapeId, configLists); + } catch (SQLException e) { + return ResponseObject.newErrResponse("保存数据处理异常!").toString(); + } + return ResponseObject.newOkResponse().toString(); + } + + /** + * 管理中心 获取管理中心中左侧数据项 + * @return + */ + public String getPalPlManageApp() { + ResponseObject ro = ResponseObject.newOkResponse(); + // 获取管理中心相关app的状态 + // PAL小组,流程发布,关联管理 + AppAPI appApi = SDK.getAppAPI(); + // 流程发布应用是否启动 + boolean isPublishActive = appApi.isActive("com.actionsoft.apps.coe.pal.publisher"); + ro.put("isPublishActive", isPublishActive); + // pal小组是否启动 + boolean isCooperationActive = appApi.isActive("com.actionsoft.apps.coe.pal.cooperation"); + ro.put("isCooperationActive", isCooperationActive); + // 关联管理是否启动 + boolean isMappingmanageActive = appApi.isActive("com.actionsoft.apps.coe.pal.mappingmanagement"); + ro.put("isMappingmanageActive", isMappingmanageActive); + return ro.toString(); + } + + /** + * 建模方法->查询所有建模方法 + * @return + */ + public String getManageMethodData() { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray result = new JSONArray(); + List palMethodCategoryList = PALMethodCache.getPALMethodList(true); + for (String category : palMethodCategoryList) { + JSONObject categoryObj = new JSONObject(); + categoryObj.put("id", category); + categoryObj.put("name", I18nRes.findValue(CoEConstant.APP_ID, category)); + categoryObj.put("type", "group"); + result.add(categoryObj); + List list = PALMethodCache.getPALMethodModelListByMethod(category); + for (PALMethodModel model : list) { + if (SDK.getAppAPI().isActive(model.getApp())) { + JSONObject methodObj = new JSONObject(); + methodObj.put("id", model.getId()); + methodObj.put("name", I18nRes.findValue(CoEConstant.APP_ID, model.getId())); + methodObj.put("type", model.getId()); + result.add(methodObj); + } + } + } + ro.setData(result); + return ro.toString(); + } + + /** + * 建模方法->查询特定建模方法的形状定义数据 + * @param methodId + * @return + */ + public String getManageMethodShapeDefinitionData(String methodId) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALMethodModel model = PALMethodCache.getPALMethodModelById(methodId); + String schema = model.getSchema(); + String tempSchema = ShapeUtil.replaceBlank(schema); + if (methodId.contains("bpmn2")) + tempSchema = replaceText(tempSchema); + if (methodId.contains("epc") || methodId.contains("org")) + tempSchema = replaceTextEPC(tempSchema); + List list = getSchemaToJson(tempSchema); + String type = I18nRes.findValue(CoEConstant.APP_ID, methodId.split("\\.")[0]); + JSONArray data = new JSONArray(); + for (int i = 0; i < list.size(); i++) { + String s = list.get(i); + String name = ""; + String title = ""; + if (s.contains("name:\"")) { + s = s.substring(s.indexOf("name:\""), s.length()); + name = s.substring(s.indexOf("name:\"") + 6, s.indexOf("\",")); + } else { + s = s.substring(s.indexOf("name:"), s.length()); + name = s.substring(s.indexOf("name:") + 5, s.indexOf("\",")); + } + + if (s.contains("title:\"")) { + s = s.substring(s.indexOf("title:\""), s.length()); + title = s.substring(s.indexOf("title:\"") + 7, s.indexOf("\",")); + } else { + s = s.substring(s.indexOf("title:"), s.length()); + title = s.substring(s.indexOf("title:") + 6, s.indexOf(",")); + } + if ("Participant".equals(title) || "VerticalSeparatorBar".equals(title) || "verticalSeparatorBar".equals(name) || "horizontalSeparatorBar".equals(name)) { + continue; + } + String icon = "../apps/" + CoEConstant.APP_ID + "/img/method/" + methodId + "/shape/" + name.replace("/", "") + ".png"; + String modelName = I18nRes.findValue(CoEConstant.APP_ID, methodId); + + JSONObject obj = new JSONObject(); + obj.put("icon", icon); + obj.put("name", title); + obj.put("id", name); + obj.put("modelName", modelName); + obj.put("modelId", methodId); + obj.put("type", type); + obj.put("showShapeConfig", !name.equals("horizontalSeparator") && !name.equals("verticalSeparator")); + data.add(obj); + } + ro.put("data", data); + ro.put("icon", PALMethodManager.getInstance().getPALMethodIconById(methodId)); + return ro.toString(); + } + + /** + * 建模方法->设置更多特性->获取形状属性设置 + * @param wsId + * @param methodId + * @param shapeName + * @return + */ + public String getManageShapeMoreAttrConfigData(String wsId, String methodId, String shapeName) { + // 获取所有匹配的属性 + List list = CoeDesignerShapeAPIManager.getInstance().getValidAttributeModels(wsId, methodId, shapeName, methodId); + JSONArray result = new JSONArray(); + for (PALMethodAttributeModel attr : list) { + JSONObject obj = new JSONObject(); + obj.put("id", attr.getKey()); + obj.put("name", attr.getNewTitle()); + obj.put("sort", attr.getSort()); + obj.put("isUse", attr.getUse()); + result.add(obj); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(result); + return ro.toString(); + } + + /** + * 建模方法->设置更多特性->获取文件属性设置 + * @param wsId + * @param methodId + * @return + */ + public String getManageFileMoreAttrConfigData(String wsId, String methodId) { + ResponseObject ro = ResponseObject.newOkResponse(); + // 获取所有匹配的扩展属性 + List list = PALRepositoryAPIManager.getInstance().getValidAttributeModels(wsId, methodId); + JSONArray moreAttr = new JSONArray(); + for (PALMethodAttributeModel attr : list) { + JSONObject obj = new JSONObject(); + obj.put("id", attr.getKey()); + obj.put("name", attr.getNewTitle()); + obj.put("sort", attr.getSort()); + obj.put("isUse", attr.getUse()); + moreAttr.add(obj); + } + ro.put("moreAttr", moreAttr); + return ro.toString(); + } + + /** + * 建模方法->设置更多特性-保存文件/形状属性(原更多特性)设置 + * @param wsId + * @param methodId + * @param type "file","shape" + * @param shapeName + * @param attrData 更多特性属性内容 + * @return + */ + public String saveCoePalPlManageMoreAttrConfig(String wsId, String methodId, String type, String shapeName, String attrData) { + JSONArray data = JSONArray.parseArray(attrData); + // 获取最新设置的属性 + JSONObject attrObj = new JSONObject(); + for (int i = 0; i < data.size(); i++) { + JSONObject obj = data.getJSONObject(i); + if (obj.getBooleanValue("isUse")) { + attrObj.put(obj.getString("id"), obj); + } + } + if ("file".equals(type)) {// 文件属性变更 + // 获取现有属性配置 + List list = PALRepositoryAttributeCache.getAttributeByMethodId(wsId, methodId); + Map existAttrMap = new HashMap<>(); + for (PALRepositoryAttributeModel model : list) { + existAttrMap.put(model.getAttrId(), model); + } + // 查找被删除的 + Set removeAttrIds = new HashSet<>();// 待删除(状态变更)的db attrId + Set keys = existAttrMap.keySet(); + for (String existAttrId : keys) { + if (!attrObj.containsKey(existAttrId)) { + removeAttrIds.add(existAttrId); + } + } + // 查找新增的 + Set addAttrIds = new HashSet<>(); + Set keys2 = attrObj.keySet(); + for (String newAttrId : keys2) { + if (!existAttrMap.containsKey(newAttrId)) { + addAttrIds.add(newAttrId); + } else if ("1".equals(existAttrMap.get(newAttrId).getIsDelete())){ + addAttrIds.add(newAttrId); + } + } + if (removeAttrIds.size() == 0 && addAttrIds.size() == 0) { + return ResponseObject.newOkResponse("未做任何调整").toString(); + } + PALRepositoryAttributeDao dao = new PALRepositoryAttributeDao(); + // 需要删除的更改为删除状态 + if (removeAttrIds.size() > 0) { + for (String attrId : removeAttrIds) { + dao.updateDeleteStatus(wsId, attrId, methodId, "1"); + } + } + // 保存需要增加的 + if (addAttrIds.size() > 0) { + PALMethodModel model = PALMethodCache.getPALMethodModelById(methodId); + List attributeModels = model.getAttributes(); + Map attributeModelMap = new HashMap<>(); + for (PALMethodAttributeModel methodAttrModel : attributeModels) { + attributeModelMap.put(methodAttrModel.getKey(), methodAttrModel); + } + for (String attrId : addAttrIds) { + if (existAttrMap.containsKey(attrId)) { + dao.updateDeleteStatus(wsId, attrId, methodId, "0"); + } else { + PALMethodAttributeModel attrModel = attributeModelMap.get(attrId);// 配置信息 + PALRepositoryAttributeModel newModel = new PALRepositoryAttributeModel(); + + newModel.setId(UUIDGener.getUUID()); + newModel.setWsId(wsId); + newModel.setCategory(methodId.substring(0, methodId.indexOf("."))); + newModel.setMethodId(methodId); + newModel.setAttrId(attrId); + newModel.setAttrName(attrObj.getJSONObject(attrId).getString("name")); + String value = attrModel.getValue(); + if ("relation".equals(attrModel.getType())) { + String demoStr = "{\"relationShapeId\":\"\",\"shapeId\":\"\",\"attrId\":\"itsystem\",\"shapeText\":\"\",\"relationFileId\":\"\",\"relationShapeText\":\"\",\"groupPath\":\"itsystem_normal\",\"fileId\":\"\"}"; + value = demoStr.replace("itsystem_normal", attrModel.getGroupPath()).replace("itsystem", attrId); + } + newModel.setAttrValue(value); + newModel.setType(attrModel.getType()); + newModel.setIsDelete("0"); + newModel.setOrderIndex(attrObj.getJSONObject(attrId).getInteger("sort")); + dao.insert(newModel); + } + } + } + // 更新所有模型的文件属性 + List palList = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByWsIdAndMethodId(wsId, methodId); + if (palList != null && palList.size() > 0) { + List attrConfigs = PALRepositoryAttributeCache.getAttributeByMethodId(wsId, methodId); + for (PALRepositoryModel plModel : palList) { + PALRepositoryAPIManager.getInstance().updateRepositoryProperty(plModel.getId(), methodId, attrConfigs); + } + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_METHOD, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_METHOD_ATTR_FILE_CONF_UPDATE); + } + + } else if ("shape".equals(type) && UtilString.isNotEmpty(shapeName)) {// 形状属性变更 + // 获取现有属性配置 + List list = PALRepositoryShapeAttributeCache.getAttributeListByShapeName(wsId, methodId, shapeName); + Map existAttrMap = new HashMap<>(); + for (PALRepositoryShapeAttributeModel model : list) { + existAttrMap.put(model.getAttrId(), model); + } + // 查找被删除的 + Set removeIds = new HashSet<>();// 待删除的db Id + Set keys = existAttrMap.keySet(); + for (String existAttrId : keys) { + if (!attrObj.containsKey(existAttrId)) { + removeIds.add(existAttrMap.get(existAttrId).getId()); + } + } + // 查找新增的 + Set addAttrIds = new HashSet<>(); + Set keys2 = attrObj.keySet(); + for (String newAttrId : keys2) { + if (!existAttrMap.containsKey(newAttrId)) { + addAttrIds.add(newAttrId); + } + } + if (removeIds.size() == 0 && addAttrIds.size() == 0) { + return ResponseObject.newOkResponse("未做任何调整").toString(); + } + PALRepositoryShapeAttributeDao dao = new PALRepositoryShapeAttributeDao(); + // 删除需要删除的 + if (removeIds.size() > 0) { + for (String id : removeIds) { + dao.deleteShapeAttribute(id); + } + } + // 保存需要增加的 + if (addAttrIds.size() > 0) { + PALMethodModel model = PALMethodCache.getPALMethodModelById(methodId); + List attributeModels = model.getAttributes(); + Map attributeModelMap = new HashMap<>(); + for (PALMethodAttributeModel methodAttrModel : attributeModels) { + attributeModelMap.put(methodAttrModel.getKey(), methodAttrModel); + } + for (String attrId : addAttrIds) { + PALMethodAttributeModel attrModel = attributeModelMap.get(attrId);// 配置信息 + PALRepositoryShapeAttributeModel newModel = new PALRepositoryShapeAttributeModel(); + newModel.setId(UUIDGener.getUUID()); + newModel.setWsId(wsId); + newModel.setCategory(methodId.substring(0, methodId.indexOf("."))); + newModel.setMethodId(methodId); + newModel.setAttrId(attrId); + newModel.setAttrName(attrObj.getJSONObject(attrId).getString("name")); + newModel.setAttrValue(attrModel.getValue()); + newModel.setType(attrModel.getType()); + newModel.setShapeName(shapeName); + int sort = attrObj.getJSONObject(attrId).getInteger("sort"); + if (sort == 0) {// sort为0,尝试获取其他形状设置的该属性的排序 + List otherShapeAttrs = PALRepositoryShapeAttributeCache.getAttributeModelByAttrId(wsId, methodId, attrId); + if (otherShapeAttrs != null && otherShapeAttrs.size() > 0) { + sort = otherShapeAttrs.get(0).getOrderIndex(); + } + } + newModel.setOrderIndex(sort); + dao.insert(newModel); + } + } + // 更新所有模型文件的形状属性 + List palList = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByWsIdAndMethodId(wsId, methodId); + if (palList != null && palList.size() > 0) { + List shapeAttrConfigs = PALRepositoryShapeAttributeCache.getAttributeListByShapeName(wsId, methodId, shapeName); + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(methodId); + List attributes = palMethodModel.getAttributes(); + Map> attributeXmlMap = new HashMap>(); + if (attributes != null) { + for (PALMethodAttributeModel attributeModel : attributes) { + Map map1 = new HashMap(); + map1.put("id", attributeModel.getKey()); + map1.put("name", attributeModel.getTitle()); + map1.put("key", attributeModel.getKey()); + map1.put("value", attributeModel.getValue()); + map1.put("type", attributeModel.getType()); + map1.put("ref", attributeModel.getRef()); + map1.put("readonly", attributeModel.getReadonly()); + map1.put("groupPath", attributeModel.getGroupPath()); + map1.put("scope", attributeModel.getScope()); + map1.put("desc", attributeModel.getDesc()==null ? "": attributeModel.getDesc()); + map1.put("isRequired",attributeModel.getIsRequired()); + attributeXmlMap.put(attributeModel.getKey(), map1); + } + } + for (PALRepositoryModel plModel : palList) { + CoeDesignerShapeAPIManager.getInstance().updateShapeAttribute(_uc, plModel.getId(), methodId, shapeName, shapeAttrConfigs, attributeXmlMap); + } + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_METHOD, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_METHOD_ATTR_SHAPE_CONF_UPDATE); + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + return ro.toString(); + } + + /** + * 建模方法->建模对象->形状配置->查询形状的属性树 + * @param wsId + * @param methodId + * @param shapeId + * @return + */ + public String getCoePalPlManageShapeAttrTreeData(String wsId, String methodId, String shapeId) { + List list = CoeDesignerShapeAPIManager.getInstance().getValidAttributeModels(wsId, methodId, shapeId, methodId); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(methodId); + if (methodModel == null) { + return ResponseObject.newErrResponse("查询失败").toString(); + } + List groups = methodModel.getGroup(); + JSONArray result = new JSONArray(); + for (PALMethodAttributeGroupModel group : groups) { + JSONArray attrArr = new JSONArray(); + for (PALMethodAttributeModel attrModel : list) { + if (attrModel.getGroupPath().equals(group.getName()) && attrModel.getUse()) { + JSONObject attrObj = new JSONObject(); + attrObj.put("label", attrModel.getNewTitle()); + attrObj.put("id", attrModel.getKey()); + attrObj.put("open", false); + attrObj.put("iconCode", ""); + attrObj.put("iconColor", "ff9421"); + attrArr.add(attrObj); + } + } + if (attrArr.size() > 0) { + JSONObject groupObj = new JSONObject(); + groupObj.put("label", group.getDesc()); + groupObj.put("id", group.getName()); + groupObj.put("iconCode", ""); + groupObj.put("iconColor", "#ff9421"); + groupObj.put("open", true); + groupObj.put("children", attrArr); + result.add(groupObj); + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(result); + return ro.toString(); + } + + /** + * 建模方法->连线关系 + * @param methodId + * @return + */ + public String getManageMethodLinkData(String methodId) { + PALMethodModel model = PALMethodCache.getPALMethodModelById(methodId); + if (model == null) { + return ResponseObject.newErrResponse("查询失败").toString(); + } + List links = model.getLinker(); + JSONArray result = new JSONArray(); + for (PALMethodLinkerModel link : links) { + JSONObject obj = new JSONObject(); + obj.put("code", link.getConceptCode()); + obj.put("fromShapeId", link.getFromShapeId()); + obj.put("toShapeId", link.getToShapeId()); + obj.put("outComingName", link.getOutcomingName()); + obj.put("inComingName", link.getIncomingName()); + result.add(obj); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(result); + return ro.toString(); + } + + /** + * 建模方法->数据特性->特性树 + * @param wsId + * @param methodId + * @return + */ + public String getManageMethodAttrTreeData(String wsId, String methodId) { + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(methodId); + if (methodModel == null) { + return ResponseObject.newErrResponse("查询失败").toString(); + } + List list = methodModel.getAttributes(); + List groups = methodModel.getGroup(); + JSONArray result = new JSONArray(); + for (PALMethodAttributeGroupModel group : groups) { + JSONArray attrArr = new JSONArray(); + for (PALMethodAttributeModel attrModel : list) { + if (attrModel.getGroupPath().equals(group.getName())) { + JSONObject attrObj = new JSONObject(); + attrObj.put("label", attrModel.getTitle()); + attrObj.put("id", attrModel.getKey()); + attrObj.put("type", "attr"); + attrObj.put("open", false); + attrObj.put("iconCode", ""); + attrObj.put("iconColor", "#8E8E8E"); + attrObj.put("isUse", false); + attrObj.put("pid", group.getName()); + attrArr.add(attrObj); + } + } + JSONObject groupObj = new JSONObject(); + groupObj.put("label", group.getDesc()); + groupObj.put("id", group.getName()); + groupObj.put("type", "group"); + groupObj.put("iconCode", ""); + groupObj.put("iconColor", "#FFB718"); + groupObj.put("open", true); + groupObj.put("children", attrArr); + result.add(groupObj); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(result); + return ro.toString(); + } + + /** + * 建模方法->数据特性->表格数据 + * @param wsId + * @param methodId + * @param type all:全部(xml),file:(文件属性),shape:(形状属性) + * @return + */ + public String getManageMethodAttrTableData(String wsId, String methodId, String type) { + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(methodId); + if (methodModel == null) { + return ResponseObject.newErrResponse("查询失败").toString(); + } + List groups = methodModel.getGroup(); + Map groupNameMap = new HashMap<>(); + for (PALMethodAttributeGroupModel group : groups) { + groupNameMap.put(group.getName(), group.getDesc()); + } + List attributes = new ArrayList<>(); + if ("all".equals(type)) { + attributes = methodModel.getAttributes();// 有效+无效 + } else if ("file".equals(type)) { + // 有效, 且排好序,有别名 + attributes = PALRepositoryAPIManager.getInstance().getValidAttributeModels(wsId, methodId, true); + } else if ("shape".equals(type)) { + // 有效 且排好序,有别名 + attributes = CoeDesignerShapeAPIManager.getInstance().getAllValidShapeAttributeModels(wsId, methodId); + } + JSONArray result = new JSONArray(); + Map typeMap = PalManageUtil.getMethodAttrTypeMap(); + for (PALMethodAttributeModel attr : attributes) { + JSONObject obj = new JSONObject(); + obj.put("id", attr.getKey()); + obj.put("key", attr.getKey()); + obj.put("title", attr.getTitle()); + obj.put("newTitle", attr.getNewTitle()); + obj.put("type", attr.getType()); + obj.put("typeName", typeMap.containsKey(attr.getType()) ? typeMap.get(attr.getType()) : attr.getType()); + + String ref = attr.getRef(); + if ("relation".equals(attr.getType())) { + JSONObject refObj = JSONObject.parseObject(ref); + obj.put("relationRef", refObj); + } else if ("awsorg".equals(attr.getType())) { + JSONObject refObj = JSONObject.parseObject(ref); + obj.put("awsorgRef", refObj); + } else { + obj.put("ref", attr.getRef()); + } + obj.put("refName", PalManageUtil.getMethodAttrRefName(attr)); + obj.put("value", attr.getValue()); + obj.put("readonly", attr.getReadonly()); + obj.put("groupPathName", groupNameMap.containsKey(attr.getGroupPath()) ? groupNameMap.get(attr.getGroupPath()) : ""); + obj.put("groupPath", attr.getGroupPath()); + obj.put("scope", attr.getScope()); + obj.put("scopeName", handleAttrScope(methodId, attr.getScope())); + obj.put("sort", attr.getSort()); + obj.put("isValid", attr.getIsValid()); + obj.put("isUse", attr.getUse()); + obj.put("bpmFileShow", attr.getBpmFileShow()); + obj.put("bpmShapeShow", attr.getBpmShapeShow()); + obj.put("isRequired",attr.getIsRequired()); + obj.put("desc",attr.getDesc()==null ? "" : attr.getDesc()); + result.add(obj); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(result); + return ro.toString(); + } + + /** + * 建模方法->数据特性->新增、修改属性保存 + * @return + */ + public String saveCoePalPlManageAttr(String methodId, boolean isCreate, String key, String title, String type, String ref, String value, boolean readonly, String groupPath, boolean isValid, String scope, boolean bpmFileShow, boolean bpmShapeShow,String desc,boolean isRequired) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALMethodModel model = PALMethodCache.getPALMethodModelById(methodId); + List attributes = model.getAttributes(); + // 校验 + if (StringUtils.isEmpty(key) && StringUtils.isEmpty(title) && StringUtils.isEmpty(type) + && StringUtils.isEmpty(groupPath) + && StringUtils.isEmpty(scope)) { + return ResponseObject.newErrResponse("参数不完整").toString(); + } + String path = model.getApp().getPath() + PALMethodConst.DIR_ROOT_CONFIG + model.getId() + "/" + PALMethodConst.FILE_ATTRIBUTE_CUSTOM_CONFIG; + if (isCreate) {// 新建 + for (PALMethodAttributeModel attributeModel : attributes) { + if (key.equals(attributeModel.getKey())) { + return ResponseObject.newErrResponse("属性代码[" + key + "]重复").toString(); + } + } + // 获取xml自定义文件 + Document document = getCustomXmlAttrDoc(model, path); + Element e =document.getRootElement().addElement("attribute"); + e.addAttribute("key", key); + e.addAttribute("title", title); + e.addAttribute("type", type); + e.addAttribute("value", value); + e.addAttribute("desc", desc); + e.addAttribute("isRequired", isRequired+""); + e.addAttribute("ref", ref); + e.addAttribute("readonly", readonly + ""); + e.addAttribute("groupPath", groupPath); + e.addAttribute("scope", scope); + e.addAttribute("isValid", isValid + ""); + if ("process.bpmn2".equals(methodId)) { + e.addAttribute("bpmFileShow", bpmFileShow + ""); + e.addAttribute("bpmShapeShow", bpmShapeShow + ""); + } + // 写入缓存 + PALMethodAttributeModel m = new PALMethodAttributeModel(); + m.setApp(model.getApp()); + m.setKey(key); + m.setTitle(title); + m.setType(type); + m.setValue(value); + m.setIsRequired(isRequired); + m.setDesc(desc); + m.setReadonly(readonly); + m.setGroupPath(groupPath); + m.setIsValid(isValid); + m.setRef(ref); + m.setScope(scope); + if ("process.bpmn2".equals(methodId)) { + m.setBpmFileShow(bpmFileShow); + m.setBpmShapeShow(bpmShapeShow); + } + attributes.add(m); + XMLUtil.writeXml(document, path); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_METHOD, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_METHOD_CREATE); + } + } else {// 修改 + boolean flag = false; + PALMethodAttributeModel updateModel = null; + for (PALMethodAttributeModel attributeModel : attributes) { + if (key.equals(attributeModel.getKey())) { + flag = true; + updateModel = attributeModel.clone(); + break; + } + } + if (!flag) { + return ResponseObject.newErrResponse("属性代码[" + key + "]不存在").toString(); + } + // 获取xml自定义文件 + Document document = getCustomXmlAttrDoc(model, path); + List elements = document.getRootElement().elements("attribute"); + Element element = null; + for (Element e : elements) { + if (e.attributeValue("key").equals(key)) { + element = e; + break; + } + } + if (element == null) {// 不存在 + Element e =document.getRootElement().addElement("attribute"); + e.addAttribute("key", key); + e.addAttribute("title", title); + e.addAttribute("type", type); + e.addAttribute("value", value); + e.addAttribute("desc", desc); + e.addAttribute("isRequired", isRequired+""); + e.addAttribute("ref", ref); + e.addAttribute("readonly", readonly + ""); + e.addAttribute("groupPath", groupPath); + e.addAttribute("scope", scope); + e.addAttribute("isValid", isValid + ""); + if ("process.bpmn2".equals(methodId)) { + e.addAttribute("bpmFileShow", bpmFileShow + ""); + e.addAttribute("bpmShapeShow", bpmShapeShow + ""); + } + } else { + element.attribute("title").setValue(title); + element.attribute("value").setValue(value); + if (element.attribute("desc") == null){ + element.addAttribute("desc",desc); + }else { + element.attribute("desc").setValue(desc); + } + if (element.attribute("isRequired") == null){ + element.addAttribute("isRequired",isRequired+""); + }else { + element.attribute("isRequired").setValue(isRequired+""); + } + element.attribute("readonly").setValue(readonly + ""); + element.attribute("isValid").setValue(isValid + ""); + element.attribute("scope").setValue(scope); + element.attribute("groupPath").setValue(groupPath); + element.attribute("type").setValue(type); + element.attribute("ref").setValue(ref); + if ("process.bpmn2".equals(methodId)) { + if (element.attribute("bpmFileShow") == null) { + element.addAttribute("bpmFileShow", bpmFileShow + ""); + } else { + element.attribute("bpmFileShow").setValue(bpmFileShow + ""); + } + if (element.attribute("bpmShapeShow") == null) { + element.addAttribute("bpmShapeShow", bpmShapeShow + ""); + } else { + element.attribute("bpmShapeShow").setValue(bpmShapeShow + ""); + } + } + } + //写入缓存 + attributes.forEach(attributeModel -> { + if (attributeModel.getKey().equals(key)) { + attributeModel.setTitle(title); + attributeModel.setValue(value); + attributeModel.setDesc(desc); + attributeModel.setIsRequired(isRequired); + attributeModel.setReadonly(readonly); + attributeModel.setIsValid(isValid); + attributeModel.setScope(scope); + attributeModel.setGroupPath(groupPath); + attributeModel.setType(type); + attributeModel.setRef(ref); + if ("process.bpmn2".equals(methodId)) { + attributeModel.setBpmFileShow(bpmFileShow); + attributeModel.setBpmShapeShow(bpmShapeShow); + } + } + }); + XMLUtil.writeXml(document, path); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_METHOD, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_METHOD_ATTR_DATA_UPDATE); + } + } + return ro.toString(); + } + + /** + * 获取xml配置文件 + * @param model + * @return + */ + private Document getCustomXmlAttrDoc(PALMethodModel model, String path) { + File file = new File(path); + if (!file.exists()) { + return XMLUtil.createDocument("attributes", "type", "customer"); + } else { + return XMLUtil.readXML(path); + } + } + + /** + * 更新只读和有效 + * @return + */ + public String saveCoePalPlManageMainAttrReadonlyValid(String methodId, String key, boolean readonly, boolean isValid,boolean isRequired) { + PALMethodModel model = PALMethodCache.getPALMethodModelById(methodId); + List attributes = model.getAttributes(); + PALMethodAttributeModel updateModel = null; + for (PALMethodAttributeModel attributeModel : attributes) { + if (key.equals(attributeModel.getKey())) { + updateModel = attributeModel.clone(); + break; + } + } + if ((!readonly && updateModel.getReadonly()) || (readonly && !updateModel.getReadonly())) {// 修改了是否只读 + if ("relation".equals(updateModel.getType()) || "awsorg".equals(updateModel.getType())) {// 关联类型限定只读 + return ResponseObject.newWarnResponse("关联类型限定[只读],不允许修改该项").toString(); + } + } + if (updateModel != null) { + return saveCoePalPlManageAttr(methodId, false, key, updateModel.getTitle(), updateModel.getType(), updateModel.getRef(), updateModel.getValue(), readonly, updateModel.getGroupPath(), isValid, updateModel.getScope(), updateModel.getBpmFileShow() == null ? false : updateModel.getBpmFileShow(), updateModel.getBpmShapeShow() == null ? false : updateModel.getBpmShapeShow(),updateModel.getDesc()==null ? "" : updateModel.getDesc(),isRequired); + } + return ResponseObject.newErrResponse("更新错误").toString(); + } + + /** + * 更新是否在bpm审批时显示的通配 + * @param methodId + * @param key 属性id + * @param bpmShow true false + * @param type bpmFileShow bpmShapeShow + * @return + */ + public String saveCoePalPlManageMainAttrBpmShowSave(String methodId, String key, boolean bpmShow, String type) { + PALMethodModel model = PALMethodCache.getPALMethodModelById(methodId); + List attributes = model.getAttributes(); + PALMethodAttributeModel updateModel = null; + for (PALMethodAttributeModel attributeModel : attributes) { + if (key.equals(attributeModel.getKey())) { + updateModel = attributeModel.clone(); + break; + } + } + if (updateModel != null) { + boolean bpmFileShow = "bpmFileShow".equals(type) ? bpmShow : updateModel.getBpmFileShow(); + boolean bpmShapeShow = "bpmShapeShow".equals(type) ? bpmShow : updateModel.getBpmShapeShow(); + return saveCoePalPlManageAttr(methodId, false, key, updateModel.getTitle(), updateModel.getType(), updateModel.getRef(), updateModel.getValue(), updateModel.getReadonly(), updateModel.getGroupPath(), updateModel.getIsValid(), updateModel.getScope(), bpmFileShow, bpmShapeShow,updateModel.getDesc()==null ? "" : updateModel.getDesc(),updateModel.getIsRequired()); + } + return ResponseObject.newErrResponse("更新错误").toString(); + } + + /** + * 建模方法->数据特性->删除xml文件指定属性 + * @param attrId + * @return + */ + public String removePalPlManageMethodAttr(String methodId, String attrId) { + if (UtilString.isEmpty(attrId)) { + throw new AWSException("属性代码不允许为空"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + SDK.getLogAPI().consoleInfo("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "][开始]删除["+ methodId +"]属性[" + attrId + "]"); + // 删除文件属性配置 + int r = new PALRepositoryAttributeDao().deleteByMethodIdAndAttrId(methodId, attrId); + SDK.getLogAPI().consoleInfo("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "][执行]删除["+ methodId +"]属性[" + attrId + "][文件属性]配置[" + r + "]条"); + // 删除形状属性配置 + r = new PALRepositoryShapeAttributeDao().deleteByMethodIdAndAttrId(methodId, attrId); + SDK.getLogAPI().consoleInfo("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "][执行]删除["+ methodId +"]属性[" + attrId + "][形状属性]配置[" + r + "]条"); + // 删除默认xml文件和自定义xml中该属性 + boolean isExist = false; + PALMethodModel model = PALMethodCache.getPALMethodModelById(methodId); + List attributes = model.getAttributes(); + for (PALMethodAttributeModel attr : attributes) { + if (attrId.equals(attr.getKey())) { + isExist = true; + break; + } + } + if (isExist) { + // 自定义属性文件删除 + String customPath = model.getApp().getPath() + PALMethodConst.DIR_ROOT_CONFIG + model.getId() + "/" + PALMethodConst.FILE_ATTRIBUTE_CUSTOM_CONFIG; + File customFile = new File(customPath); + if (customFile.exists()) { + Document document = XMLUtil.readXML(customPath); + List elements = document.getRootElement().elements("attribute"); + for (int i = 0; i < elements.size(); i++) { + if (attrId.equals(elements.get(i).attributeValue("key"))) { + elements.remove(i);// 删除 + XMLUtil.writeXml(document, customPath);// 保存 + SDK.getLogAPI().consoleInfo("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "][执行]删除["+ methodId +"]属性[" + attrId + "][自定义属性XML]配置文件"); + break; + } + } + } + // 默认属性文件删除,如果通过升级app,该文件会被重新覆盖导致以前删除的属性再次出现,需要再次手动删除 + String defaultPath = model.getApp().getPath() + PALMethodConst.DIR_ROOT_CONFIG + model.getId() + "/" + PALMethodConst.FILE_ATTRIBUTE_CONFIG; + File defaultFile = new File(defaultPath); + if (defaultFile.exists()) { + Document document = XMLUtil.readXML(defaultPath); + List elements = document.getRootElement().elements("attribute"); + for (int i = 0; i < elements.size(); i++) { + if (attrId.equals(elements.get(i).attributeValue("key"))) { + elements.remove(i);// 删除 + XMLUtil.writeXml(document, defaultPath);// 保存 + SDK.getLogAPI().consoleInfo("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "][执行]删除["+ methodId +"]属性[" + attrId + "][出厂预置属性XML]配置文件"); + break; + } + } + } + // 删除缓存 + for (int i = 0; i < attributes.size(); i++) { + if (attrId.equals(attributes.get(i).getKey())) { + attributes.remove(i); + break; + } + } + } + SDK.getLogAPI().consoleInfo("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "][完成]删除["+ methodId +"]属性[" + attrId + "]"); + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_METHOD, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_METHOD_ATTR_DATA_DELETE); + } + return ro.toString(); + } + + /** + * 建模方法->数据特性->更新文件属性和形状属性的属性名称 + * @param wsId + * @param methodId + * @param type file、shape + * @param attrId + * @param newTitle + * @return + */ + public String updateCoePalPlManageMainFileAndShapeAttr(String wsId, String methodId, String type, String attrId, String newTitle, int orderIndex) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALMethodModel method = PALMethodCache.getPALMethodModelById(methodId); + List attributeModels = method.getAttributes(); + PALMethodAttributeModel attrModel = null; + for (PALMethodAttributeModel attr : attributeModels) { + if (attr.getKey().equals(attrId)) { + attrModel = attr; + break; + } + } + if (attrModel == null) { + return ResponseObject.newErrResponse("更新失败,属性不存在").toString(); + } + String title = (UtilString.isEmpty(newTitle) || UtilString.isEmpty(newTitle.trim())) ? attrModel.getTitle() : newTitle;// 名称为空则取xml定义 + if ("file".equals(type)) { + PALRepositoryAttributeModel fileAttrModel = PALRepositoryAttributeCache.getAttributeByMethodIdAndAttrId(wsId, methodId, attrId); + if (fileAttrModel == null) { + // 新建 + PALRepositoryAttributeModel newModel = new PALRepositoryAttributeModel(); + newModel.setId(UUIDGener.getUUID()); + newModel.setWsId(wsId); + newModel.setCategory(methodId.substring(0, methodId.indexOf("."))); + newModel.setMethodId(methodId); + newModel.setAttrId(attrId); + newModel.setAttrName(title); + String value = attrModel.getValue(); + if ("relation".equals(attrModel.getType())) { + String demoStr = "{\"relationShapeId\":\"\",\"shapeId\":\"\",\"attrId\":\"itsystem\",\"shapeText\":\"\",\"relationFileId\":\"\",\"relationShapeText\":\"\",\"groupPath\":\"itsystem_normal\",\"fileId\":\"\"}"; + value = demoStr.replace("itsystem_normal", attrModel.getGroupPath()).replace("itsystem", attrId); + } + newModel.setAttrValue(value); + newModel.setType(attrModel.getType()); + newModel.setIsDelete("1"); + newModel.setOrderIndex(orderIndex); + new PALRepositoryAttributeDao().insert(newModel); + } else { + // 修改名称 + new PALRepositoryAttributeDao().updateAttrNameAndOrderIndex(wsId, attrId, methodId, title, orderIndex); + } + } else if ("shape".equals(type)) { + boolean havingTemp = false;// 是否有临时形状 + boolean havingFormal = false;// 是否有正式配置的形状 + List shapeAttrList =PALRepositoryShapeAttributeCache.getAttributeModelByAttrId(wsId, methodId, attrId); + if (shapeAttrList != null && shapeAttrList.size() > 0) { + // 已存在,修改名称 + PALRepositoryShapeAttributeDao dao = new PALRepositoryShapeAttributeDao(); + for (PALRepositoryShapeAttributeModel model : shapeAttrList) { + if ("all".equals(model.getShapeName())) {// 不是临时形状 + havingTemp = true; + } else { + havingFormal = true; + } + dao.updateAttrNameAndOrderIndex(wsId, attrId, methodId, title, orderIndex); + } + } + if (!havingFormal && !havingTemp) { + // 临时的和正式的不存在,创建临时的all形状 + PALRepositoryShapeAttributeModel newModel = new PALRepositoryShapeAttributeModel(); + newModel.setId(UUIDGener.getUUID()); + newModel.setWsId(wsId); + newModel.setCategory(methodId.substring(0, methodId.indexOf("."))); + newModel.setMethodId(methodId); + newModel.setAttrId(attrId); + newModel.setAttrName(title); + newModel.setAttrValue(attrModel.getValue()); + newModel.setType(attrModel.getType()); + newModel.setShapeName("all"); + newModel.setOrderIndex(orderIndex); + new PALRepositoryShapeAttributeDao().insert(newModel); + } + } + return ro.toString(); + } + + /** + * 建模方法->数据特性->更新文件属性和形状属性的属性排序 + * @param wsId + * @param methodId + * @param type file shape + * @param attrs + * @return + */ + public String coePalPlManageMainFileAndShapeAttrSortUpdate(String wsId, String methodId, String type, String attrs) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray attrArr = JSONArray.parseArray(attrs); + int index = 0; + boolean isSuccess = true; + for (int i = 0; i < attrArr.size(); i++) { + JSONObject attr = attrArr.getJSONObject(i); + String attrId = attr.getString("id"); + String newTitle = attr.getString("newTitle"); + String ro2 = updateCoePalPlManageMainFileAndShapeAttr(wsId, methodId, type, attrId, newTitle, ++index); + JSONObject roObj = JSONObject.parseObject(ro2); + if (!"ok".equals(roObj.getString("result"))) { + SDK.getLogAPI().consoleErr("属性[" + newTitle + "]["+ attrId +"]更新顺序失败"); + isSuccess = false; + } + } + if (!isSuccess) { + return ResponseObject.newErrResponse("部分属性更新失败,详情请查看日志").toString(); + } + return ro.toString(); + } + + /** + * 打开形状配置的查询页面 + * + * @param wsId + * @param type + * @param shapeId + * @param category + * @return + */ + public String openCoePalPlManageShapeConfigQueryDialog(String wsId, String type, String shapeId, String category, String defaultCategory, String commonShapeConfig, String specialShapeConfig, String attributesJsonArray, String relationData, String shapeKey) { + Map map = new HashMap(); + map.put("sid", super.getContext().getSessionId()); + map.put("wsId", wsId); + map.put("type", type); + map.put("shapeId", shapeId); + map.put("shapeKey", shapeKey); + map.put("category", category); + map.put("defaultCategory", defaultCategory); + if (StringUtils.isEmpty(commonShapeConfig)) { + commonShapeConfig = "[]"; + } + if (StringUtils.isEmpty(specialShapeConfig)) { + specialShapeConfig = "[]"; + } + if (StringUtils.isEmpty(attributesJsonArray)) { + attributesJsonArray = "[]"; + } + if (StringUtils.isEmpty(relationData)) { + relationData = "{}"; + } + map.put("commonShapeConfig", commonShapeConfig); + map.put("specialShapeConfig", specialShapeConfig); + map.put("attributesJsonArray", attributesJsonArray); + map.put("relationData", relationData); + String template = "pal.pl.manage.shape.config.query.dialog.html"; + return HtmlPageTemplate.merge(CoEConstant.APP_ID, template, map); + } + + /** + * 获取下拉框的值 + * + * @return + */ + public String openCoePalPlManageShapeConfigUpdateSelectContent() { + //水平位置的值集合 + List horizontals = Lists.newArrayList("mostLeft", "left", "center", "right", "mostRight"); + //垂直位置的值集合 + List verities = Lists.newArrayList("mostTop", "top", "center", "bottom", "mostBottom"); + //显示方式的值集合 + List showTypes = Lists.newArrayList("text", "attribute", "icon"); + //图标集合 + List icons = PalManageUtil.getShapeConfigIconData(); + + Map> map = Maps.newHashMap(); + map.put("horizontals", horizontals); + map.put("verities", verities); + map.put("showTypes", showTypes); + map.put("icons", icons); + return JSON.toJSONString(map); + } + + /** + * 打开形状配置的编辑页面 + * + * @param wsId + * @param shapeId + * @param category + * @param horVerArray + * @param type + * @param horizontal + * @param verity + * @param showType + * @param textContent + * @param key + * @param attrName + * @param isShowAttrName + * @param iconContent + * @return + */ + public String openCoePalPlManageShapeConfigUpdateDialog(String wsId, String shapeId, String category, String defaultCategory, String horVerArray, String type, String horizontal, String verity, String showType, String textContent, String key, String attrName, String isShowAttrName, String iconContent) { + Map map = new HashMap(); + map.put("sid", super.getContext().getSessionId()); + map.put("wsId", wsId); + map.put("shapeId", shapeId); + map.put("category", category); + map.put("defaultCategory", defaultCategory); + map.put("horVerArray", horVerArray); + map.put("type", type); + map.put("horizontal", horizontal); + map.put("verity", verity); + map.put("showType", showType); + map.put("textContent", textContent.replaceAll("\r\n", "")); + map.put("key", key); + map.put("attrName", attrName); + map.put("isShowAttrName", isShowAttrName); + map.put("iconContent", iconContent); + String template = "pal.pl.manage.shape.config.update.dialog.html"; + return HtmlPageTemplate.merge(CoEConstant.APP_ID, template, map); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/PublishAPIManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/PublishAPIManager.java new file mode 100644 index 00000000..231b376e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/PublishAPIManager.java @@ -0,0 +1,172 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish; + +import java.util.Iterator; +import java.util.List; + +import com.actionsoft.bpms.org.cache.UserCache; +import com.actionsoft.bpms.org.cache.UserMapCache; +import com.actionsoft.bpms.org.model.UserMapModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupPermCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupRoleCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishHistory; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishListHistory; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishHistoryModel; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishListHistoryModel; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupModel; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupRoleModel; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.exception.AWSDataAccessException; + +/** + * 流程发布内部API封装 + * + * @author jack + * + */ +public final class PublishAPIManager { + + private static PublishAPIManager instance = new PublishAPIManager(); + + private PublishAPIManager() { + } + + public static PublishAPIManager getInstance() { + return instance; + } + + // --------------流程发布门户浏览PAL资源权限。未开启AWS平台门户用户,由外部系统提供账户拥有的用户组身份------------------ + + /** + * 指定的用户组集合是否有浏览某资产库文件的权限。适用于未开启与AWS平台角色集成,通过给定用户组代码确定浏览权限 + * + * @param groupCodes 用户组代码的集合,适合浏览者具备多个用户组权限时 + * @param wsId 资产库Id + * @param repositoryId 资产库文件版本Id + * @return 可以访问返回true + */ + public boolean havingReadPALRepositoryPermissionByGroupCode(List groupCodes, String wsId, String repositoryId) { + for (String groupCode : groupCodes) { + if (havingReadPALRepositoryPermissionByGroupCode(groupCode, wsId, repositoryId)) { + return true; + } + } + return false; + } + + /** + * 指定的用户组是否有浏览某资产库文件的权限。适用于未开启与AWS平台角色集成,通过给定用户组代码确定浏览权限 + * + * @param groupCode 用户组代码 + * @param wsId 资产库Id + * @param repositoryId 资产库文件版本Id + * @return 可以访问返回true + */ + public boolean havingReadPALRepositoryPermissionByGroupCode(String groupCode, String wsId, String repositoryId) { + PublishUserGroupModel userGroupModel = PublishUserGroupCache.getByCode(wsId, groupCode); + // 用户组不存在 + if (userGroupModel == null) + return false; + return PublishUserGroupPermCache.isExistPALResposityoryPerm(userGroupModel.getId(), repositoryId); + } + + // --------------流程发布门户浏览PAL资源权限。开启AWS平台门户用户------------------ + + /** + * 指定的AWS账户是否有浏览某资产库文件的权限。适用于开启与AWS平台角色集成,直接判断AWS某角色是否具备浏览权限 + * + * @param userId 一个合法的AWS账户 + * @param wsId 资产库Id + * @param repositoryId 资产库文件版本Id + * @return 可以访问返回true + */ + public boolean havingReadPALRepositoryPermissionByUserId(String userId, String wsId, String repositoryId) { + UserModel userModel = UserCache.getModel(userId); + if (havingReadPALRepositoryPermissionByRoleId(userModel.getRoleId(), wsId, repositoryId)) { + return true; + } + // 兼任角色 + List mapList = UserMapCache.getMapListOfUser(userId); + if (mapList != null) { + for (UserMapModel map : mapList) { + if (havingReadPALRepositoryPermissionByRoleId(map.getId(), wsId, repositoryId)) { + return true; + } + } + } + return false; + } + + /** + * 指定的AWS角色是否有浏览某资产库文件的权限。适用于开启与AWS平台角色集成,直接判断AWS某角色是否具备浏览权限 + * + * @param roleId 角色Id + * @param wsId 资产库Id + * @param repositoryId 资产库文件版本Id + * @return 可以访问返回true + */ + public boolean havingReadPALRepositoryPermissionByRoleId(String roleId, String wsId, String repositoryId) { + for (Iterator iter = PublishUserGroupRoleCache.getByRoleId(roleId); iter.hasNext();) { + PublishUserGroupRoleModel model = iter.next(); + String groupId = model.getGroupId();// 小组Id + PublishUserGroupModel groupModel = PublishUserGroupCache.getModel(groupId); + if (groupModel != null && groupModel.getWsId().equals(wsId)) { + boolean isAccess = PublishUserGroupPermCache.isExistPALResposityoryPerm(groupId, repositoryId); + if (isAccess) { + return true; + } + } + } + return false; + } + + public boolean havingReadPALRepositoryPermissionByRoleId(String roleId, String repositoryId) { + for (Iterator iter = PublishUserGroupRoleCache.getByRoleId(roleId); iter.hasNext();) { + PublishUserGroupRoleModel model = iter.next(); + String groupId = model.getGroupId();// 小组Id + PublishUserGroupModel groupModel = PublishUserGroupCache.getModel(groupId); + if (groupModel != null) { + boolean isAccess = PublishUserGroupPermCache.isExistPALResposityoryPerm(groupId, repositoryId); + if (isAccess) { + return true; + } + } + } + return false; + } + + // --------------流程发布相关API------------------ + + /** + * 发布指定范围内的流程,该API可以被外部流程调用,完成发布动作 + * + * @param publish 发布描述信息 + * @param list 发布清单描述 + * @return 成功返回发布Id + * @throws AWSDataAccessException 操作异常需要捕获 + */ + public String publishPALRepository(PublishHistoryModel publish, List list) throws AWSDataAccessException { + new PublishHistory().insert(publish); + String publishId = publish.getId(); + if (list != null) { + // 批量设置 + for (PublishListHistoryModel model : list) { + model.setpId(publishId); + } + // 批量插入详细记录 + PublishListHistory listDao = new PublishListHistory(); + listDao.batchInsert(list); + // 批量更改PAL发布版本的状态,更改内存 + PALRepository repositoryDao = new PALRepository(); + for (PublishListHistoryModel model : list) { + PALRepositoryModelImpl repositoryModel = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(model.getPalRepositoryId()); + repositoryModel.setPublish(true); + repositoryDao.update(repositoryModel); + } + } + return publishId; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishHistoryCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishHistoryCache.java new file mode 100644 index 00000000..e5416c42 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishHistoryCache.java @@ -0,0 +1,58 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.cache; + +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishHistory; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishHistoryModel; +import com.actionsoft.sdk.local.SDK; + +public final class PublishHistoryCache extends Cache { + + /** + * 公共构造函数。插件启动时回调 + * + * @param profile - 缓存配置信息 + */ + public PublishHistoryCache(CachePluginProfile profile) { + super(profile); + } + + public static void putModel(PublishHistoryModel model) { + getCache().put(model.getId(), model); + } + + public static PublishHistoryModel getModel(String id) { + return getCache().get(id); + } + + public static void removeById(String id) { + getCache().remove(id); + } + + /** + * 初始化缓存的回调方法 + */ + public void load() { + load(this); + } + + protected void load(Cache t) { + List _list = new PublishHistory().query().list(); + if (_list != null) { + for (PublishHistoryModel model : _list) { + t.put(model.getId(), model, false); + } + } + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载Coe流程发布门户的发布历史对象 [" + ((_list == null) ? 0 : _list.size()) + "个]"); + } + + public static PublishHistoryCache getCache() { + return (PublishHistoryCache) CacheManager.getCache(PublishHistoryCache.class); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupCache.java new file mode 100644 index 00000000..c1efb4ce --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupCache.java @@ -0,0 +1,100 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.cache; + +import java.util.Iterator; +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishUserGroup; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupModel; +import com.actionsoft.apps.coe.pal.team.user.web.UserWeb; +import com.actionsoft.sdk.local.SDK; + +/** + * 流程发布门户访问权限。用户小组Cache + * + * @author jack + * + */ +public final class PublishUserGroupCache extends Cache { + + /** + * 公共构造函数。插件启动时回调 + * + * @param profile - 缓存配置信息 + */ + public PublishUserGroupCache(CachePluginProfile profile) { + super(profile); + registeIndex(PublishUserGroupCacheIndex1.class, new PublishUserGroupCacheIndex1()); + registeIndex(PublishUserGroupCacheIndex2.class, new PublishUserGroupCacheIndex2()); + registeIndex(PublishUserGroupCacheIndex3.class, new PublishUserGroupCacheIndex3()); + } + + public static void putModel(PublishUserGroupModel model) { + getCache().put(model.getId(), model); + } + + public static PublishUserGroupModel getModel(String id) { + return getCache().get(id); + } + + public static void removeById(String id) { + getCache().remove(id); + } + + /** + * 根据用户小组代码,获得用户小组对象 + * + * @param wsId 资产库Id + * @param groupCode + * @return + */ + public static PublishUserGroupModel getByCode(String wsId, String groupCode) { + return getCache().getByIndexSingle(PublishUserGroupCacheIndex1.class, wsId + "_" + groupCode); + } + + /** + * 根据资产库Id+分类,获取所有小组 + * + * @param wsId + * @return + */ + public static Iterator getCacheByCategoryId(String wsId, String category) { + return getCache().getByIndex(PublishUserGroupCacheIndex2.class, wsId + "_" + category); + } + + /** + * 根据资产库Id,获取所有小组 + * + * @param wsId + * @return + */ + public static Iterator getCacheByWsId(String wsId) { + return getCache().getByIndex(PublishUserGroupCacheIndex3.class, wsId); + } + + /** + * 初始化缓存的回调方法 + */ + public void load() { + load(this); + } + + protected void load(Cache t) { + List _list = new PublishUserGroup().query().list(); + if (_list != null) { + for (PublishUserGroupModel model : _list) { + t.put(model.getId(), model, true); + } + } + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE流程发布门户的用户小组对象 [" + ((_list == null) ? 0 : _list.size()) + "个]"); + } + + public static PublishUserGroupCache getCache() { + return (PublishUserGroupCache) CacheManager.getCache(PublishUserGroupCache.class); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupCacheIndex1.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupCacheIndex1.java new file mode 100644 index 00000000..017e095c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupCacheIndex1.java @@ -0,0 +1,20 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.cache; + +import com.actionsoft.bpms.commons.cache.SingleValueIndex; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupModel; + +/** + * 由资产库Id+用户组代码建立的索引 + * + * @author jack + * + */ +public class PublishUserGroupCacheIndex1 extends SingleValueIndex { + + /** + * 返回模型对象的索引值 + */ + public String key(PublishUserGroupModel model) { + return model.getWsId() + "_" + model.getGroupCode(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupCacheIndex2.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupCacheIndex2.java new file mode 100644 index 00000000..338c4ff0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupCacheIndex2.java @@ -0,0 +1,20 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupModel; + +/** +* @Description 由资产库Id+分类建立的索引 +* @author zhangming +* @date 2014年7月30日 +* +*/ +public class PublishUserGroupCacheIndex2 extends ListValueIndex { + + /** + * 返回模型对象的索引值 + */ + public String key(PublishUserGroupModel model) { + return model.getWsId() + "_" + model.getCategory(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupCacheIndex3.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupCacheIndex3.java new file mode 100644 index 00000000..86b5d3a0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupCacheIndex3.java @@ -0,0 +1,20 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupModel; + +/** +* @Description 由资产库Id建立的索引 +* @author zhangming +* @date 2014年7月31日 +* +*/ +public class PublishUserGroupCacheIndex3 extends ListValueIndex { + + /** + * 返回模型对象的索引值 + */ + public String key(PublishUserGroupModel model) { + return model.getWsId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupPermCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupPermCache.java new file mode 100644 index 00000000..a67bb48c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupPermCache.java @@ -0,0 +1,91 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.cache; + +import java.util.Iterator; +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.pal.manage.publish.constant.PublishConst; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishUserGroupPerm; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupPermModel; +import com.actionsoft.apps.coe.pal.team.user.web.UserWeb; +import com.actionsoft.sdk.local.SDK; + +/** + * 流程发布门户访问权限。用户组权限资源Cache + * + * @author jack + * + */ +public final class PublishUserGroupPermCache extends Cache { + + /** + * 公共构造函数。插件启动时回调 + * + * @param profile - 缓存配置信息 + */ + public PublishUserGroupPermCache(CachePluginProfile profile) { + super(profile); + registeIndex(PublishUserGroupPermCacheIndex1.class, new PublishUserGroupPermCacheIndex1()); + registeIndex(PublishUserGroupPermCacheIndex2.class, new PublishUserGroupPermCacheIndex2()); + } + + public static void putModel(PublishUserGroupPermModel model) { + getCache().put(model.getId(), model); + } + + public static PublishUserGroupPermModel getModel(String id) { + return getCache().get(id); + } + + public static void removeById(String id) { + getCache().remove(id); + } + + /** + * 判断用户组是否有访问某资产库文件的权限 + * + * @param groupId 用户组Id + * @param repositoryId 资产库文件版本Id + * @return 有权限对象返回true + */ + public static boolean isExistPALResposityoryPerm(String groupId, String repositoryId) { + Object obj = getCache().getByIndexSingle(PublishUserGroupPermCacheIndex1.class, groupId + "_" + PublishConst.RESOURCE_PAL_FILE + "_" + repositoryId); + return obj == null ? false : true; + } + + /** + * 获得用户组可访问的资产库文件范围 + * + * @param teamId 用户组Id + * @return 迭代器 + */ + public static Iterator getPALListOfGroup(String groupId) { + return getCache().getByIndex(PublishUserGroupPermCacheIndex2.class, groupId + "_" + PublishConst.RESOURCE_PAL_FILE); + } + + /** + * 初始化缓存的回调方法 + */ + public void load() { + load(this); + } + + protected void load(Cache t) { + List _list = new PublishUserGroupPerm().query().list(); + if (_list != null) { + for (PublishUserGroupPermModel model : _list) { + t.put(model.getId(), model, false); + } + } + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE流程发布门户的用户小组权限资源对象 [" + ((_list == null) ? 0 : _list.size()) + "个]"); + } + + public static PublishUserGroupPermCache getCache() { + return (PublishUserGroupPermCache) CacheManager.getCache(PublishUserGroupPermCache.class); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupPermCacheIndex1.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupPermCacheIndex1.java new file mode 100644 index 00000000..5bd07941 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupPermCacheIndex1.java @@ -0,0 +1,21 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.cache; + +import com.actionsoft.bpms.commons.cache.SingleValueIndex; +import com.actionsoft.apps.coe.pal.pal.manage.publish.constant.PublishConst; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupPermModel; + +/** + * 由小组Id+PERMTYPE+RESOURCEID建立的索引 + * + * @author jack + * + */ +public class PublishUserGroupPermCacheIndex1 extends SingleValueIndex { + + /** + * 返回模型对象的索引值 + */ + public String key(PublishUserGroupPermModel model) { + return model.getGroupId() + "_" + PublishConst.RESOURCE_PAL_FILE + "_" + model.getResourceId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupPermCacheIndex2.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupPermCacheIndex2.java new file mode 100644 index 00000000..de4f16ef --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupPermCacheIndex2.java @@ -0,0 +1,21 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.manage.publish.constant.PublishConst; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupPermModel; + +/** + * 由用户组Id建立的索引 + * + * @author jack + * + */ +public class PublishUserGroupPermCacheIndex2 extends ListValueIndex { + + /** + * 返回模型对象的索引值 + */ + public String key(PublishUserGroupPermModel model) { + return model.getGroupId() + "_" + PublishConst.RESOURCE_PAL_FILE; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupRoleCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupRoleCache.java new file mode 100644 index 00000000..fddbebb9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupRoleCache.java @@ -0,0 +1,88 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.cache; + +import java.util.Iterator; +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishUserGroupRole; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupRoleModel; +import com.actionsoft.apps.coe.pal.team.user.web.UserWeb; +import com.actionsoft.sdk.local.SDK; + +/** + * 流程发布门户访问权限。用户小组与AWS平台角色关联映射Cache + * + * @author jack + * + */ +public final class PublishUserGroupRoleCache extends Cache { + + /** + * 公共构造函数。插件启动时回调 + * + * @param profile - 缓存配置信息 + */ + public PublishUserGroupRoleCache(CachePluginProfile profile) { + super(profile); + registeIndex(PublishUserGroupRoleCacheIndex1.class, new PublishUserGroupRoleCacheIndex1()); + registeIndex(PublishUserGroupRoleCacheIndex2.class, new PublishUserGroupRoleCacheIndex2()); + } + + public static void putModel(PublishUserGroupRoleModel model) { + getCache().put(model.getId(), model); + } + + public static PublishUserGroupRoleModel getModel(String id) { + return getCache().get(id); + } + + public static void removeById(String id) { + getCache().remove(id); + } + + /** + * 某个AWS角色关联的用户小组 + * + * @param roleId AWS平台角色Id,仅用于和AWS平台集成时 + * @return 一个迭代器 + */ + public static Iterator getByRoleId(String roleId) { + return getCache().getByIndex(PublishUserGroupRoleCacheIndex1.class, roleId); + } + + /** + * 用户组关联的AWS角色 + * + * @param groupId 用户组ID + * @return + */ + public static Iterator getByGroupId(String groupId) { + return getCache().getByIndex(PublishUserGroupRoleCacheIndex2.class, groupId); + } + + /** + * 初始化缓存的回调方法 + */ + public void load() { + load(this); + } + + protected void load(Cache t) { + List _list = new PublishUserGroupRole().query().list(); + if (_list != null) { + for (PublishUserGroupRoleModel model : _list) { + t.put(model.getId(), model, false); + } + } + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE流程发布门户的用户小组角色映射对象 [" + ((_list == null) ? 0 : _list.size()) + "个]"); + } + + public static PublishUserGroupRoleCache getCache() { + return (PublishUserGroupRoleCache) CacheManager.getCache(PublishUserGroupRoleCache.class); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupRoleCacheIndex1.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupRoleCacheIndex1.java new file mode 100644 index 00000000..71cb33e9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupRoleCacheIndex1.java @@ -0,0 +1,20 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupRoleModel; + +/** + * 由角色Id建立的索引 + * + * @author jack + * + */ +public class PublishUserGroupRoleCacheIndex1 extends ListValueIndex { + + /** + * 返回模型对象的索引值 + */ + public String key(PublishUserGroupRoleModel model) { + return model.getRoleId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupRoleCacheIndex2.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupRoleCacheIndex2.java new file mode 100644 index 00000000..d2522210 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/cache/PublishUserGroupRoleCacheIndex2.java @@ -0,0 +1,19 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupRoleModel; + + /** +* @Description 由用户组Id建立的索引 +* @author zhangming +* @date 2014年8月5日 +* +*/ +public class PublishUserGroupRoleCacheIndex2 extends ListValueIndex { + /** + * 返回模型对象的索引值 + */ + public String key(PublishUserGroupRoleModel model) { + return model.getGroupId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/constant/PublishConst.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/constant/PublishConst.java new file mode 100644 index 00000000..7fde76a0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/constant/PublishConst.java @@ -0,0 +1,26 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.constant; + +/** + * 流程发布常量 + * + * @author jack + * + */ +public interface PublishConst { + + /** + * 权限资源是资产库的文件版本ID + */ + public static final int RESOURCE_PAL_FILE = 1; + + /** + * AppID + */ + public static String PUBLISH = "com.actionsoft.apps.coe.pal.publisher"; + + /** + * 如果不整合AWS资源,访客账户角色 + */ + public static String GUESTROLE = "0"; + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishCommonDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishCommonDao.java new file mode 100644 index 00000000..aa70ae7d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishCommonDao.java @@ -0,0 +1,305 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.bpms.commons.database.BatchPreparedStatementSetter; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.commons.pagination.SQLPagination; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishCommonModel; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.exception.AWSDataAccessException; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.taobao.api.internal.util.StringUtils; + +public class PublishCommonDao extends DaoObject{ + + /** + * 批量插入常用流程数据 + * @param list + * @param deleteAll 是否删除全部 + * @return + * @throws AWSDataAccessException + */ + public boolean batchInsert(final List list, boolean deleteAll) throws AWSDataAccessException { + if (list == null || list.size() == 0) { + return false; + } + Connection conn = null; + // 关闭事务自动提交 + try { + conn = DBSql.open(); + if (conn != null) { + conn.setAutoCommit(false); + if (deleteAll) { + DBSql.update(conn, "DELETE FROM "+entityName()); + } + StringBuilder sql = new StringBuilder(); + sql.append("INSERT INTO ").append(entityName()).append("(ID,WSID,PLVERSIONID, SORT) values (?, ?, ?, ?)"); + // 执行批量更新 + DBSql.batch(conn, sql.toString(), new BatchPreparedStatementSetter() { + public void setValues(PreparedStatement pst, int paramInt) throws SQLException { + PublishCommonModel model = list.get(paramInt); + pst.setString(1, model.getId()); + pst.setString(2, model.getWsId()); + pst.setString(3, model.getPlversionId()); + pst.setInt(4, model.getSort()); + } + + @Override + public int getBatchSize() { + return list.size(); + } + }); + + // 语句执行完毕,提交本事务 + conn.commit(); + return true; + } + } catch (SQLException e) { + try { + if (conn != null) { + conn.rollback(); + } + } catch (Exception ee) { + } + throw new AWSDataAccessException(e); + }finally { + // 关闭连接 + DBSql.close(conn); + } + return false; + } + + /** + * 批量插入常用流程数据 + * @param wsId + * @param list + * @return + * @throws AWSDataAccessException + */ + public boolean batchInsert(String wsId,final List list) throws AWSDataAccessException { + Connection conn = null; + // 关闭事务自动提交 + try { + conn = DBSql.open(); + if (conn != null) { + conn.setAutoCommit(false); + DBSql.update(conn, "DELETE FROM "+entityName()+" WHERE WSID=?", new Object[] { wsId }); + if(list!=null) { + StringBuilder sql = new StringBuilder(); + sql.append("INSERT INTO ").append(entityName()).append("(ID,WSID,PLVERSIONID, SORT) values (?, ?, ?, ?)"); + // 执行批量更新 + DBSql.batch(conn, sql.toString(), new BatchPreparedStatementSetter() { + public void setValues(PreparedStatement pst, int paramInt) throws SQLException { + PublishCommonModel model = list.get(paramInt); + pst.setString(1, model.getId()); + pst.setString(2, model.getWsId()); + pst.setString(3, model.getPlversionId()); + pst.setInt(4, model.getSort()); + } + + @Override + public int getBatchSize() { + return list.size(); + } + }); + + // 语句执行完毕,提交本事务 + conn.commit(); + return true; + } + } + } catch (SQLException e) { + try { + if (conn != null) { + conn.rollback(); + } + } catch (Exception ee) { + } + throw new AWSDataAccessException(e); + }finally { + // 关闭连接 + DBSql.close(conn); + } + return false; + } + + @Override + public int update(PublishCommonModel model) throws AWSDataAccessException { + return 0; + } + + @Override + public String entityName() { + return "APP_ACT_COE_PAL_PUBLISH_COM"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper{ + @Override + public PublishCommonModel mapRow(ResultSet rset, int arg1){ + PublishCommonModel model = new PublishCommonModel(); + try { + model.setId(rset.getString("ID")); + model.setWsId(rset.getString("WSID")); + model.setPlversionId(rset.getString("PLVERSIONID")); + model.setSort(rset.getInt("SORT")); + } catch (SQLException e) { + e.printStackTrace(); + } + return model; + } + } + + @Override + public int insert(PublishCommonModel model) throws AWSDataAccessException { + return 0; + } + + /** + * 获取所有数据 + * @return + */ + public List getAllInstance() { + String sql = "SELECT ID, WSID, PLVERSIONID, SORT FROM " + entityName() + " ORDER BY SORT, WSID, PLVERSIONID"; + List list = DBSql.query(sql, rowMapper()); + return list; + } + + /** + * 按照资产库查询常用流程数据 + * @param wsId + * @return + */ + public List getCommonDataByWsId(String wsId){ + String sql = "SELECT ID, WSID, PLVERSIONID, SORT FROM " + entityName() + " WHERE WSID = '" + wsId + "'"; + List list = DBSql.query(sql, rowMapper()); + return list; + } + + /** + * 获取最大排序 + * @param wsId + * @return + */ + public int getMaxSort(String wsId) { + String sql = "SELECT MAX(SORT) AS sort FROM " + entityName(); + Object[] args = new Object[0]; + if (UtilString.isNotEmpty(wsId)) { + sql += " WHERE WSID = ?"; + args = new Object[1]; + args[0] = wsId; + } + return DBSql.getInt(sql, args); + } + + /** + * 查询数据 + * @param wsIds + * @return + */ + public JSONArray getCommonDataByPagination(List wsIds) { + for (int i = 0; i < wsIds.size(); i++) { + wsIds.set(i, "'" + wsIds.get(i) + "'"); + } + StringBuilder sql = new StringBuilder("SELECT c.ID, c.PLVERSIONID, p.PLNAME, c.WSID, w.WSNAME, c.SORT FROM " + entityName() + " c, " + PALRepositoryModelImpl.DATABASE_ENTITY + " p, " + CoeWorkSpaceModel.DATABASE_ENTITY + " w "); + sql.append(" WHERE c.PLVERSIONID = p.PLVERSIONID AND w.ID = p.WSID AND p.WSID = c.WSID AND p.ISUSE = '1' AND p.WSID in (" + StringUtils.join(wsIds, ",") + ")").append(" ORDER BY c.SORT, w.WSNAME, p.PLNAME, p.ID"); + List list = DBSql.query(sql.toString(), new JsonMapper()); + JSONArray result = new JSONArray(); + for (int i = 0; i < list.size(); i++) { + result.add(list.get(i)); + } + return result; + } + + private class JsonMapper implements RowMapper{ + @Override + public JSONObject mapRow(ResultSet rset, int arg1){ + JSONObject object = new JSONObject(); + try { + object.put("id", rset.getString("ID")); + object.put("wsId", rset.getString("WSID")); + object.put("versionId", rset.getString("PLVERSIONID")); + object.put("sort", rset.getInt("SORT")); + object.put("name", rset.getString("PLNAME")); + object.put("wsName", rset.getString("WSNAME")); + } catch (Exception e) { + e.printStackTrace(); + } + return object; + } + } + + /** + * 按照资产库查询常用流程数据,按照sort升序排序 + * @param wsId + * @return + */ + public Object[] getCommonDataByWsIds(String wsIds, String category){ + boolean isCategory = false; + if (!UtilString.isEmpty(category)) { + isCategory = true; + } + Object [] obj = new Object[2]; + String sql = "SELECT ID, WSID, PLVERSIONID, SORT FROM " + entityName() + " WHERE WSID IN( " + wsIds + ") ORDER BY SORT"; + List list = DBSql.query(sql, rowMapper()); + + List ids = new ArrayList<>(); + JSONObject result = new JSONObject(); + if (list != null && list.size() > 0) { + for (PublishCommonModel model : list) { + JSONObject object = new JSONObject(); + List temp = PALRepositoryCache.getByVersionId(model.getWsId(), model.getPlversionId()); + if (temp == null || temp.size() == 0) continue;// 过滤被删除或者不存在的数据 + if(isCategory && !category.equals(temp.get(0).getMethodCategory())) continue;// 过滤不符合条件的数据 + object.put("id", model.getId()); + object.put("wsId", model.getWsId()); + object.put("plversionId", model.getPlversionId()); + object.put("sort", model.getSort()); + ids.add(model.getId()); + result.put(model.getId(), object); + } + } + obj[0] = ids; + obj[1] = result; + return obj; + } + + /** + * 更新 + * @param id + * @param sort + * @return + */ + public int updateSort(String id, int sort) { + String sql = "UPDATE " + entityName() + " SET SORT=" + sort + " WHERE ID='" + id + "'"; + return DBSql.update(sql); + } + + /** + * 删除 + * @param sqlWhere + * @return + */ + public int deleteByIds(String sqlWhere) { + String sql = "DELETE FROM " + entityName() + " WHERE ID IN (" + sqlWhere + ")"; + return DBSql.update(sql); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishFrequencyDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishFrequencyDao.java new file mode 100644 index 00000000..cb2a3feb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishFrequencyDao.java @@ -0,0 +1,129 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishFrequencyModel; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.exception.AWSDataAccessException; +import com.alibaba.fastjson.JSONObject; + +/** + * 发布流程的访问量 + * @author sunlh + * + */ +public final class PublishFrequencyDao extends DaoObject { + + @Override + public String entityName() { + return "APP_ACT_COE_PAL_PUBLISH_FREQ"; + } + + @Override + public int insert(PublishFrequencyModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + String sql = "INSERT INTO " + entityName() + "(ID,WSID,PLVERSIONID,COUNT)VALUES(:ID,:WSID,:PLVERSIONID,:COUNT)"; + Map paraMap = new HashMap<>(); + paraMap.put("ID", model.getId()); + paraMap.put("WSID", model.getWsId()); + paraMap.put("PLVERSIONID", model.getPlversionId()); + paraMap.put("COUNT", model.getCount()); + return DBSql.update(sql, paraMap); + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public PublishFrequencyModel mapRow(ResultSet rset, int rowNum) throws SQLException { + PublishFrequencyModel model = new PublishFrequencyModel(); + try { + model.setId(rset.getString("ID")); + model.setWsId(rset.getString("WSID")); + model.setPlversionId(rset.getString("PLVERSIONID")); + model.setCount(rset.getInt("COUNT")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } + + @Override + public int update(PublishFrequencyModel model) throws AWSDataAccessException { + String sql = "UPDATE " + entityName() + " SET COUNT= COUNT + 1 WHERE PLVERSIONID='" + model.getPlversionId()+"'"; + return DBSql.update(sql); + } + + /** + * 根据流程版本Id获取访问数据 + * @return + */ + public PublishFrequencyModel getDataByVersionId(String versionId) { + String sql = "SELECT ID, WSID, PLVERSIONID, COUNT FROM " + entityName() + " WHERE PLVERSIONID = '" + versionId + "'"; + PublishFrequencyModel model = DBSql.getObject(sql, rowMapper()); + return model; + } + + /** + * 查询数据,按照访问量降序排序 + * @param wsId 资产库Id + * @return + */ + public List getDataOrderByCount(String wsId){ + String sql = "SELECT ID, WSID, PLVERSIONID, COUNT FROM " + entityName() + " WHERE WSID = '" + wsId + "' ORDER BY COUNT DESC"; + List list = DBSql.query(sql, rowMapper()); + return list; + } + + /** + * 查询数据,按照访问量降序排序 + * @param wsIds 资产库拼接字符串 + * @param category 大类 + * @return + */ + public Object[] getDatasOrderByCount(String wsIds, String category){ + boolean isCategory = false; + if (!UtilString.isEmpty(category)) { + isCategory = true; + } + Object [] obj = new Object[2]; + String sql = "SELECT ID, WSID, PLVERSIONID, COUNT FROM " + entityName() + " WHERE WSID in(" + wsIds + ") ORDER BY COUNT DESC"; + List list = DBSql.query(sql, rowMapper()); + List ids = new ArrayList<>(); + JSONObject result = new JSONObject(); + if (list != null && list.size() > 0) { + for (PublishFrequencyModel model : list) { + JSONObject object = new JSONObject(); + List temp = PALRepositoryCache.getByVersionId(model.getWsId(), model.getPlversionId()); + if (temp == null || temp.size() == 0) continue;// 过滤被删除或者不存在的数据 + if(isCategory && !category.equals(temp.get(0).getMethodCategory())) continue;// 过滤不符合条件的数据 + object.put("id", model.getId()); + object.put("wsId", model.getWsId()); + object.put("plversionId", model.getPlversionId()); + object.put("count", model.getCount()); + ids.add(model.getId()); + result.put(model.getId(), object); + } + } + obj[0] = ids; + obj[1] = result; + return obj; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishHistory.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishHistory.java new file mode 100644 index 00000000..5c5973ca --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishHistory.java @@ -0,0 +1,115 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishHistoryCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishHistoryModel; +import com.actionsoft.exception.AWSDataAccessException; + +/** + * 资产库发布记录历史 + * + */ +public final class PublishHistory extends DaoObject { + + public PublishHistory() { + } + + @Override + public int insert(PublishHistoryModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) + model.setId(UUIDGener.getUUID()); + String sql = "INSERT INTO " + entityName() + "(ID,PROCESSINSTID,WSID,USERID,AUDITORID,PUBLISHDATE,PUBLISHDESC,PUBLISHN,PUBLISHC,PUBLISHS,TEAMID)VALUES(:ID,:PROCESSINSTID,:WSID,:USERID,:AUDITORID,:PUBLISHDATE,:PUBLISHDESC,:PUBLISHN,:PUBLISHC,:PUBLISHS,:TEAMID)"; + Map paraMap = new HashMap<>(); + paraMap.put("ID", model.getId()); + paraMap.put("PROCESSINSTID", model.getProcessInstId()); + paraMap.put("WSID", model.getWsId()); + paraMap.put("USERID", model.getUserId()); + paraMap.put("AUDITORID", model.getAuditorId()); + paraMap.put("PUBLISHDATE", model.getPublishDate()); + paraMap.put("PUBLISHDESC", model.getPublishDesc()); + paraMap.put("PUBLISHN", model.getPublishNew()); + paraMap.put("PUBLISHC", model.getPublishChange()); + paraMap.put("PUBLISHS", model.getPublishStop()); + paraMap.put("TEAMID", model.getTeamId()); + int n = DBSql.update(sql, paraMap); + if (n > 0) { + PublishHistoryCache.putModel(model); + } + return n; + } + + @Override + public int delete(Object id) throws AWSDataAccessException { + int r = super.delete(id); + if (r > 0) { + new PublishListHistory().deleteByPid((String) id); + PublishHistoryCache.removeById((String) id); + } + return r; + } + + @Override + public int update(PublishHistoryModel model) throws AWSDataAccessException { + return -1; + } + + @Override + public String entityName() { + return "APP_ACT_COE_PAL_PUBLISH"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public PublishHistoryModel mapRow(ResultSet rset, int rowNum) throws SQLException { + PublishHistoryModel model = new PublishHistoryModel(); + try { + model.setId(rset.getString("ID")); + model.setProcessInstId(rset.getString("PROCESSINSTID")); + model.setWsId(rset.getString("WSID")); + model.setUserId(rset.getString("USERID")); + model.setAuditorId(rset.getString("AUDITORID")); + model.setPublishDate(rset.getTimestamp("PUBLISHDATE")); + model.setPublishDesc(rset.getString("PUBLISHDESC")); + model.setPublishNew(rset.getInt("PUBLISHN")); + model.setPublishChange(rset.getInt("PUBLISHC")); + model.setPublishStop(rset.getInt("PUBLISHS")); + model.setTeamId(rset.getString("TEAMID")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } + + /** + * 根据wsId查询流程发布历史 + * + * @param wsId + * @return + */ + public List getPublishHistory(String wsId) { + String sql; + if (wsId != null && !"".equals(wsId.trim())) { + sql = "select * from " + entityName() + " where WSID=?"; + } else { + sql = "select * from " + entityName(); + } + List list = DBSql.query(sql, rowMapper(), new Object[]{wsId}); + return list; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishListHistory.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishListHistory.java new file mode 100644 index 00000000..6d320835 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishListHistory.java @@ -0,0 +1,486 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.actionsoft.bpms.commons.database.BatchPreparedStatementSetter; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.commons.pagination.SQLPagination; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishListHistoryModel; +import com.actionsoft.apps.coe.pal.system.util.StringUtil; +import com.actionsoft.exception.AWSDataAccessException; +import com.alibaba.fastjson.JSONObject; + +/** + * 资产库发布清单历史 + * + */ +public final class PublishListHistory extends DaoObject { + + public PublishListHistory() { + } + + @Override + public int insert(PublishListHistoryModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) + model.setId(UUIDGener.getUUID()); + String sql = "INSERT INTO " + entityName() + "(ID,PID,PALREPOSITORYID,ACTIONTYPE,PUBLISHDESC,TASKID)VALUES(:ID,:PID,:PALREPOSITORYID,:ACTIONTYPE,:PUBLISHDESC,:TASKID)"; + Map paraMap = new HashMap<>(); + paraMap.put("ID", model.getId()); + paraMap.put("PID", model.getpId()); + paraMap.put("PALREPOSITORYID", model.getPalRepositoryId()); + paraMap.put("ACTIONTYPE", model.getActionType()); + paraMap.put("PUBLISHDESC", model.getPublishDesc()); + paraMap.put("TASKID", model.getTaskId()); + return DBSql.update(sql, paraMap); + } + + public void batchInsert(List list) throws AWSDataAccessException { + if (list != null && list.size() > 0) { + final List finalList = list; + for (PublishListHistoryModel model : finalList) { + if (UtilString.isEmpty(model.getId())) + model.setId(UUIDGener.getUUID()); + } + Connection conn = null; + try { + conn = DBSql.open(); + if (conn != null) { + // 关闭事务自动提交 + conn.setAutoCommit(false); + // 准备对象 + StringBuilder sql = new StringBuilder(); + sql.append("INSERT INTO ").append(entityName()).append("(ID,PID,PALREPOSITORYID,ACTIONTYPE,PUBLISHDESC,TASKID) values (?,?,?,?,?,?)"); + // 执行批量新增 + DBSql.batch(conn, sql.toString(), new BatchPreparedStatementSetter() { + public void setValues(PreparedStatement pst, int paramInt) throws SQLException { + PublishListHistoryModel model = finalList.get(paramInt); + + pst.setString(1, model.getId()); + pst.setString(2, model.getpId()); + pst.setString(3, model.getPalRepositoryId()); + pst.setString(4, model.getActionType()); + pst.setString(5, model.getPublishDesc()); + pst.setString(6, model.getTaskId()); + } + + public int getBatchSize() { + return finalList.size(); + } + }); + // 语句执行完毕,提交本事务 + conn.commit(); + } + } catch (SQLException e) { + try { + if (conn != null) { + conn.rollback(); + } + } catch (Exception ee) { + } + throw new AWSDataAccessException(e); + } finally { + // 关闭连接 + DBSql.close(conn); + } + } + } + + @Override + public int delete(Object id) throws AWSDataAccessException { + return super.delete(id); + } + + public void deleteByPid(String pid) throws AWSDataAccessException { + DBSql.update("DELETE FROM " + entityName() + " WHERE PID=? ", new Object[] { pid }); + } + + @Override + public int update(PublishListHistoryModel model) throws AWSDataAccessException { + return -1; + } + + @Override + public String entityName() { + return "APP_ACT_COE_PAL_PUBLISH_LIST"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public PublishListHistoryModel mapRow(ResultSet rset, int rowNum) throws SQLException { + PublishListHistoryModel model = new PublishListHistoryModel(); + try { + model.setId(rset.getString("ID")); + model.setpId(rset.getString("PID")); + model.setPublishDesc(rset.getString("PUBLISHDESC")); + model.setPalRepositoryId(rset.getString("PALREPOSITORYID")); + model.setActionType(rset.getString("ACTIONTYPE")); + model.setPublishDate(rset.getTimestamp("PUBLISHDATE")); + model.setTaskId(rset.getString("TASKID")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } + + /** + * 有publishDate的Mapper + * + * @author zhangming + * @date 2014年8月27日 + * + */ + private class Mapper1 implements RowMapper { + public PublishListHistoryModel mapRow(ResultSet rset, int rowNum) throws SQLException { + PublishListHistoryModel model = new PublishListHistoryModel(); + try { + model.setId(rset.getString("ID")); + model.setpId(rset.getString("PID")); + model.setPublishDesc(rset.getString("PUBLISHDESC")); + model.setPalRepositoryId(rset.getString("PALREPOSITORYID")); + model.setActionType(rset.getString("ACTIONTYPE")); + model.setPublishDate(rset.getTimestamp("PUBLISHDATE")); + model.setTaskId(rset.getString("TASKID")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } + + /** + * 获取文件的发布历史 + * + * @param repositoryId 文件ID + * @param wsId 资产库ID + * @return + */ + public List getRepositoryListByResourceId(String repositoryId, String wsId) { + String sql = "select pl.*, p.PUBLISHDATE from APP_ACT_COE_PAL_PUBLISH_LIST pl, APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_REPOSITORY r1, APP_ACT_COE_PAL_REPOSITORY r2 " + "where r1.PLVERSIONID = r2.PLVERSIONID " + "and r2.ID = pl.PALREPOSITORYID " + "and p.ID = pl.PID and r1.ID = '" + repositoryId + "' and r2.WSID = '" + wsId + "' order by p.PUBLISHDATE desc"; + try { + return DBSql.query(sql, new Mapper1()); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 根据角色查询有权限的文件发布历史 + * + * @param roleId + * @return + */ + public List getPublishListHistoryByRole(String roleId, String type) { + return getPublishListHistoryByRole(roleId, -1, -1, type); + } + + public List getPublishListHistoryByRole(String roleId, int start, int limit, String type) { + String sql = "SELECT pl.ID, pl.PID, pl.PALREPOSITORYID, pl.ACTIONTYPE, pl.PUBLISHDESC, p.PUBLISHDATE, pl.TASKID " + " FROM APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl, ( " + " SELECT DISTINCT up.RESOURCEID FROM APP_ACT_COE_PAL_USERGRP_PERM up, APP_ACT_COE_PAL_USERGRP_ROLE ur " + " WHERE up.GROUPID=ur.GROUPID " + " AND ur.ROLEID=? " + ") perm, APP_ACT_COE_PAL_REPOSITORY r " + "WHERE p.ID = pl.PID " + "AND perm.RESOURCEID=r.PLVERSIONID " + "AND r.ID=pl.PALREPOSITORYID "; + if (type != null && !"".equals(type)) { + sql += " AND pl.ACTIONTYPE = '" + type + "'"; + } + sql += "ORDER BY p.PUBLISHDATE DESC "; + List list = null; + if (start != -1) { + list = DBSql.query(SQLPagination.getPaginitionSQL(sql, start * limit + 1, limit), rowMapper(), new Object[] { roleId }); + } else { + list = DBSql.query(sql, rowMapper(), new Object[] { roleId }); + } + return list; + } + + public List getPublishListHistory() { + String sql = "SELECT pl.ID, pl.PID, pl.PALREPOSITORYID, pl.ACTIONTYPE, pl.PUBLISHDESC, p.PUBLISHDATE, pl.TASKID " + " FROM APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl " + "WHERE p.ID = pl.PID "; + sql += " ORDER BY p.PUBLISHDATE DESC "; + List list = null; + list = DBSql.query(sql, rowMapper(), new Object[] {}); + return list; + } + + // 流程门户-搜索页面-发布动态模块 + public List getPublishListHistoryByRole(String roleId, int start, int limit, String type, String wsIds, String name) { + String sql = "SELECT pl.ID, pl.PID, pl.PALREPOSITORYID, pl.ACTIONTYPE, pl.PUBLISHDESC, p.PUBLISHDATE, pl.TASKID, p.USERID " + " FROM APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl, ( " + " SELECT DISTINCT up.RESOURCEID FROM APP_ACT_COE_PAL_USERGRP_PERM up, APP_ACT_COE_PAL_USERGRP_ROLE ur " + " WHERE up.GROUPID=ur.GROUPID " + " AND ur.ROLEID=? " + ") perm, APP_ACT_COE_PAL_REPOSITORY r " + "WHERE p.ID = pl.PID " + "AND perm.RESOURCEID=r.PLVERSIONID " + "AND r.ID=pl.PALREPOSITORYID "; + if (type != null && !"".equals(type)) { + sql += " AND pl.ACTIONTYPE = '" + type + "'"; + } + if (!UtilString.isEmpty(wsIds)) { + sql += " AND p.WSID IN (" + wsIds + ") "; + } + if (name != null && !"".equals(name)) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql += " and r.PLNAME like " + namelike; + } + sql += " ORDER BY p.PUBLISHDATE DESC "; + List result = null; + if (start != -1) { + result = DBSql.query(SQLPagination.getPaginitionSQL(sql, start + 1, limit), new JsonMapper(), new Object[] { roleId }); + } else { + result = DBSql.query(sql, new JsonMapper(), new Object[] { roleId }); + } + return result; + } + + // 流程门户-搜索页面-发布动态模块 + public List getPublishListHistoryByRole(String roleId, String type, String wsIds, String name) { + String sql = "SELECT pl.ID, pl.PID, pl.PALREPOSITORYID, pl.ACTIONTYPE, pl.PUBLISHDESC, p.PUBLISHDATE, pl.TASKID, p.USERID " + " FROM APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl, APP_ACT_COE_PAL_REPOSITORY r " + "WHERE p.ID = pl.PID AND r.ID=pl.PALREPOSITORYID "; + if (type != null && !"".equals(type)) { + sql += " AND pl.ACTIONTYPE = '" + type + "'"; + } + if (!UtilString.isEmpty(wsIds)) { + sql += " AND p.WSID IN (" + wsIds + ") "; + } + if (name != null && !"".equals(name)) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql += " and r.PLNAME like " + namelike; + } + sql += " ORDER BY p.PUBLISHDATE DESC "; + List result = null; + result = DBSql.query(sql, new JsonMapper()); + return result; + } + + private class JsonMapper implements RowMapper{ + @Override + public JSONObject mapRow(ResultSet rset, int arg1){ + JSONObject object = new JSONObject(); + try { + object.put("id", rset.getString("ID")); + object.put("repositoryId", rset.getString("PALREPOSITORYID")); + object.put("actionType", rset.getString("ACTIONTYPE")); + object.put("publishDesc", rset.getString("PUBLISHDESC")); + object.put("publishDate", rset.getTimestamp("PUBLISHDATE")); + object.put("userId", rset.getString("USERID")); + object.put("taskId", rset.getString("TASKID")); + } catch (Exception e) { + e.printStackTrace(); + } + return object; + } + } + + /** + * 获取全部的发布信息 + * @param type + * @return + */ + public List getPublishListHistory(String type) { + return getPublishListHistory(-1, -1, type); + } + + public List getPublishListHistory(int start, int limit, String type) { + String sql = "SELECT pl.ID, pl.PID, pl.PALREPOSITORYID, pl.ACTIONTYPE, pl.PUBLISHDESC, p.PUBLISHDATE, pl.TASKID " + " FROM APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl," + + "APP_ACT_COE_PAL_REPOSITORY r " + "WHERE p.ID = pl.PID " + "AND r.ID=pl.PALREPOSITORYID "; + if (type != null && !"".equals(type)) { + sql += " AND pl.ACTIONTYPE = '" + type + "'"; + } + sql += " ORDER BY p.PUBLISHDATE DESC "; + List list = null; + if (start != -1) { + list = DBSql.query(SQLPagination.getPaginitionSQL(sql, start * limit + 1, limit), rowMapper()); + } else { + list = DBSql.query(sql, rowMapper()); + } + return list; + } + + /** + * 获取常用流程的发布信息 + * @param type + * @return + */ + public List getPublishCommonList(String type) { + return getPublishCommonList(-1, -1, type); + } + + public List getPublishCommonList(int start, int limit, String type) { + String sql = "SELECT pl.ID, pl.PID, pl.PALREPOSITORYID, pl.ACTIONTYPE, pl.PUBLISHDESC, p.PUBLISHDATE, pl.TASKID " + " FROM APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl," + + "APP_ACT_COE_PAL_PUBLISH_COM c,APP_ACT_COE_PAL_REPOSITORY r " + "WHERE p.ID = pl.PID " + "AND r.ID=pl.PALREPOSITORYID "+" AND c.PLVERSIONID = r.PLVERSIONID"; + if (type != null && !"".equals(type)) { + sql += " AND pl.ACTIONTYPE = '" + type + "'"; + } + sql += " AND r.ISPUBLISH=1 ORDER BY p.PUBLISHDATE DESC "; + List list = null; + if (start != -1) { + list = DBSql.query(SQLPagination.getPaginitionSQL(sql, start * limit + 1, limit), rowMapper()); + } else { + list = DBSql.query(sql, rowMapper()); + } + return list; + } + + /** + * 获取常用流程的发布信息 + * @param type + * @return + */ + public List getPublishFrequencyList(String type) { + return getPublishFrequencyList(-1, -1, type); + } + + public List getPublishFrequencyList(int start, int limit, String type) { + String sql = "SELECT pl.ID, pl.PID, pl.PALREPOSITORYID, pl.ACTIONTYPE, pl.PUBLISHDESC, p.PUBLISHDATE, pl.TASKID " + " FROM APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl," + + "APP_ACT_COE_PAL_PUBLISH_FREQ f,APP_ACT_COE_PAL_REPOSITORY r " + "WHERE p.ID = pl.PID " + "AND r.ID=pl.PALREPOSITORYID "+" AND f.PLVERSIONID = r.PLVERSIONID"; + if (type != null && !"".equals(type)) { + sql += " AND pl.ACTIONTYPE = '" + type + "'"; + } + sql += " AND r.ISPUBLISH=1 ORDER BY f.COUNT DESC "; + List list = null; + if (start != -1) { + list = DBSql.query(SQLPagination.getPaginitionSQL(sql, start * limit + 1, limit), rowMapper()); + } else { + list = DBSql.query(sql, rowMapper()); + } + return list; + } + + /** + * 获取全部的发布信息 + * @param type + * @return + */ + public List getPublishList(String type) { + return getPublishList(-1, -1, type); + } + + public List getPublishList(int start, int limit, String type) { + String sql = "SELECT pl.ID, pl.PID, pl.PALREPOSITORYID, pl.ACTIONTYPE, pl.PUBLISHDESC, p.PUBLISHDATE, pl.TASKID " + " FROM APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl," + + "APP_ACT_COE_PAL_REPOSITORY r " + "WHERE p.ID = pl.PID " + "AND r.ID=pl.PALREPOSITORYID "; + if (type != null && !"".equals(type)) { + sql += " AND pl.ACTIONTYPE = '" + type + "'"; + } + sql += "AND r.ISPUBLISH=1 ORDER BY p.PUBLISHDATE DESC "; + List list = null; + if (start != -1) { + list = DBSql.query(SQLPagination.getPaginitionSQL(sql, start * limit + 1, limit), rowMapper()); + } else { + list = DBSql.query(sql, rowMapper()); + } + return list; + } + + /** + * 获取模型的最后发布信息 + * + * @param repositoryId + * @return + */ + public JSONObject getLastPublishByModelId(String repositoryId) { + String sql = "SELECT p.USERID, pl.PUBLISHDESC, p.PUBLISHDATE, pl.TASKID FROM APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl WHERE pl.pid = p.id AND pl.palrepositoryid = ? ORDER BY publishdate DESC"; + JSONObject result = DBSql.getObject(sql, new RowMapper() { + JSONObject object = new JSONObject(); + @Override + public JSONObject mapRow(ResultSet rs, int arg1) throws SQLException { + object.put("userId", rs.getString("USERID")); + object.put("desc", rs.getString("PUBLISHDESC")); + object.put("date", rs.getTimestamp("PUBLISHDATE")); + object.put("taskId", rs.getString("TASKID")); + return object; + } + }, new Object[] { repositoryId }); + return result; + } + + /** + * 获取模型的最后发布时间 + * + * @param repositoryId + * @return + */ + public String getLastPublishDateByModelId(String repositoryId) { + String sql = "SELECT publishdate FROM APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl WHERE pl.pid = p.id AND pl.palrepositoryid = ? ORDER BY publishdate DESC"; + String lastPublishDate = DBSql.getObject(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }, new Object[] { repositoryId }); + return lastPublishDate; + } + + /** + * 获取模型的最后发布的类型+时间 + * + * @param repositoryId + * @return + */ + public JSONObject getLastPublishDataByModelId(String repositoryId) { + String sql = "SELECT pl.ACTIONTYPE, p.PUBLISHDATE FROM APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl WHERE pl.pid = p.id AND pl.palrepositoryid = ? ORDER BY publishdate DESC"; + JSONObject result = DBSql.getObject(sql, new RowMapper() { + @Override + public JSONObject mapRow(ResultSet rs, int arg1) throws SQLException { + JSONObject object = new JSONObject(); + object.put("type", rs.getString("ACTIONTYPE")); + object.put("date", rs.getTimestamp("PUBLISHDATE")); + return object; + } + }, new Object[] { repositoryId }); + return result; + } + + /** + * 获取模型的最后发布时的taskId + * + * @param repositoryId + * @return + */ + public String getLastPublishTaskIdByModelId(String repositoryId) { + String sql = "SELECT pl.TASKID FROM APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl WHERE pl.pid = p.id AND pl.palrepositoryid = ? ORDER BY publishdate DESC"; + String taskId = DBSql.getObject(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }, new Object[] { repositoryId }); + return taskId; + } + + /** + * 获取特定类型的发布信息集合 + * @param type + * @return + */ + public Set getPublishDataByActiontype(String type, String wsId) { + String sql = "SELECT pl.palrepositoryid FROM APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl WHERE pl.pid = p.id AND pl.actiontype = ? AND p.wsid = ?"; + List list = DBSql.query(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString("palrepositoryid"); + } + }, new Object[] {type, wsId}); + Set set = new HashSet<>(); + if (list != null && list.size() > 0) { + for (String str : list) { + set.add(str); + } + } + return set; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishUserGroup.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishUserGroup.java new file mode 100644 index 00000000..8cb20542 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishUserGroup.java @@ -0,0 +1,223 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupModel; +import com.actionsoft.apps.coe.pal.system.util.StringUtil; +import com.actionsoft.exception.AWSDataAccessException; +import org.apache.commons.lang.StringUtils; + +/** + * 流程发布门户访问权限。用户小组 + * + */ +public final class PublishUserGroup extends DaoObject { + + public PublishUserGroup() { + } + + @Override + public int insert(PublishUserGroupModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) + model.setId(UUIDGener.getUUID()); + String sql = "INSERT INTO " + entityName() + "(ID,WSID,GROUPCODE,CATEGORY,GROUPNAME,GROUPDESC,CREATEUSER,CREATEDATE)VALUES(:ID,:WSID,:GROUPCODE,:CATEGORY,:GROUPNAME,:GROUPDESC,:CREATEUSER,:CREATEDATE)"; + Map paraMap = new HashMap<>(); + paraMap.put("ID", model.getId()); + paraMap.put("WSID", model.getWsId()); + paraMap.put("GROUPCODE", model.getGroupCode()); + paraMap.put("CATEGORY", model.getCategory()); + paraMap.put("GROUPNAME", model.getGroupName()); + paraMap.put("GROUPDESC", model.getGroupDesc()); + paraMap.put("CREATEUSER", model.getCreateUser()); + paraMap.put("CREATEDATE", new Timestamp(System.currentTimeMillis())); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + PublishUserGroupCache.putModel(model); + } + return r; + } + + @Override + public int delete(Object id) throws AWSDataAccessException { + int r = super.delete(id); + if (r > 0) { + PublishUserGroupCache.removeById((String) id); + } + return r; + } + + @Override + public int update(PublishUserGroupModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) { + throw new AWSDataAccessException("Method getId() Does Not Allow Empty!"); + } + Map paraMap = new HashMap<>(); + paraMap.put("GROUPCODE", model.getGroupCode()); + paraMap.put("CATEGORY", model.getCategory()); + paraMap.put("GROUPNAME", model.getGroupName()); + paraMap.put("GROUPDESC", model.getGroupDesc()); + paraMap.put("WSID", model.getWsId()); + // 不需要写sql,可调用基类封装的update方法 + int r = update(model.getId(), paraMap); + if (r > 0) { + PublishUserGroupCache.putModel(model); + } + return r; + } + + @Override + public String entityName() { + return "APP_ACT_COE_PAL_USERGRP"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public PublishUserGroupModel mapRow(ResultSet rset, int rowNum) throws SQLException { + PublishUserGroupModel model = new PublishUserGroupModel(); + try { + model.setId(rset.getString("ID")); + model.setWsId(rset.getString("WSID")); + model.setGroupCode(rset.getString("GROUPCODE")); + model.setCategory(rset.getString("CATEGORY")); + model.setGroupName(rset.getString("GROUPNAME")); + model.setGroupDesc(rset.getString("GROUPDESC")); + model.setCreateUser(rset.getString("CREATEUSER")); + model.setCreateDate(rset.getTimestamp("CREATEDATE")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + + } + + /** + * 根据资产库获取用户组列表 + * @param wsIds + * @return + */ + public List getPublishUserGroupList(List wsIds) { + String sql = ""; + if (wsIds == null || wsIds.size() == 0) { + sql = "select * from " + entityName() + " order by CREATEDATE desc"; + } else { + for (int i = 0; i < wsIds.size(); i++) { + wsIds.set(i, "'" + wsIds.get(i) + "'"); + } + sql = "select * from " + entityName() + " where WSID in (" + StringUtils.join(wsIds, ",") + ") order by CREATEDATE desc"; + } + try{ + return DBSql.query(sql, rowMapper()); + } catch (AWSDataAccessException e) { + e.printStackTrace(System.err); + } + return new ArrayList(); + } + + /** + * 根据资产库ID获得用户组列表 + * + * @param wsId 资产库Id + * @return + */ + public List getPublishUserGroupByWsId(String wsId, String category) { + String sql = ""; + Object[] args; + if (category == null || "".equals(category)) { + sql = "select * from " + entityName() + " where WSID=? order by CREATEDATE desc"; + args = new Object[1]; + args[0] = wsId; + } else { + sql = "select * from " + entityName() + " where WSID=? and CATEGORY=? order by CREATEDATE desc"; + args = new Object[2]; + args[0] = wsId; + args[1] = category; + } + + try{ + return DBSql.query(sql, rowMapper(), args); + } catch (AWSDataAccessException e) { + e.printStackTrace(System.err); + } + return new ArrayList(); + } + + /** + * 根据资产库id获取小组分类 + * + * @param wsId + * @return + */ + public List getCategoryListByWsId(String wsId) { + String sql = "select CATEGORY from " + entityName() + " where WSID='" + wsId + "' group by CATEGORY"; + try { + return DBSql.query(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }); + } catch (AWSDataAccessException e) { + e.printStackTrace(System.err); + } + + return new ArrayList(); + } + + /** + * 获取所有小组分类 + * + * @return + */ + public List getCategoryList() { + String sql = "select CATEGORY from " + entityName() + " group by CATEGORY"; + try { + return DBSql.query(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }); + } catch (AWSDataAccessException e) { + e.printStackTrace(System.err); + } + + return new ArrayList(); + } + + /** + * 根据小组名进行搜索 + * + * @param wsId 资产库Id + * @param name 小组名 + * @return + */ + public List searchGroupByName(String wsId, String name) { + String namelike; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + String sql = "select * from " + entityName() + " where WSID=? and GROUPNAME like " + namelike + " order by CREATEDATE desc"; + Object[] args = {wsId}; + return DBSql.query(sql, rowMapper(), args); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishUserGroupPerm.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishUserGroupPerm.java new file mode 100644 index 00000000..05d776eb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishUserGroupPerm.java @@ -0,0 +1,209 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.BatchPreparedStatementSetter; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupPermCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.constant.PublishConst; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupPermModel; +import com.actionsoft.exception.AWSDataAccessException; + +/** + * 流程发布门户访问权限。用户组权限资源 + * + */ +public final class PublishUserGroupPerm extends DaoObject { + + public PublishUserGroupPerm() { + } + + @Override + public int insert(PublishUserGroupPermModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) + model.setId(UUIDGener.getUUID()); + String sql = "INSERT INTO " + entityName() + "(ID,GROUPID,PERMTYPE,RESOURCEID)VALUES(:ID,:GROUPID,:PERMTYPE,:RESOURCEID)"; + Map paraMap = new HashMap<>(); + paraMap.put("ID", model.getId()); + paraMap.put("GROUPID", model.getGroupId()); + paraMap.put("PERMTYPE", model.getPermType()); + paraMap.put("RESOURCEID", model.getResourceId()); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + PublishUserGroupPermCache.putModel(model); + } + return r; + } + + @Override + public int delete(Object id) throws AWSDataAccessException { + int r = super.delete(id); + if (r > 0) { + PublishUserGroupPermCache.removeById((String) id); + } + return r; + } + + @Override + public int update(PublishUserGroupPermModel model) throws AWSDataAccessException { + return -1; + } + + /** + * 批量重设置某个用户组的PAL访问权限 + * + * @param groupId 用户组Id + * @param repositoryIds 可访问的文件范围(VersionId) + * @throws AWSDataAccessException + */ + public void batchPALPerm(final String groupId, final List repositoryIds) throws AWSDataAccessException { + Connection conn = null; + try { + conn = DBSql.open(); + if (conn != null) { + // 关闭事务自动提交 + conn.setAutoCommit(false); + // 准备对象 + final List insertModels = new ArrayList<>(); + DBSql.update(conn, "DELETE FROM " + entityName() + " WHERE GROUPID=? AND PERMTYPE=?", new Object[] { groupId, PublishConst.RESOURCE_PAL_FILE }); + if (repositoryIds != null && !repositoryIds.isEmpty()) { + StringBuilder sql = new StringBuilder(); + sql.append("INSERT INTO ").append(entityName()).append("(ID,GROUPID,PERMTYPE,RESOURCEID) values (?, ?, ?, ?)"); + // 执行批量更新 + DBSql.batch(conn, sql.toString(), new BatchPreparedStatementSetter() { + public void setValues(PreparedStatement pst, int paramInt) throws SQLException { + String resourceId = repositoryIds.get(paramInt); + PublishUserGroupPermModel perm = new PublishUserGroupPermModel(); + perm.setId(UUIDGener.getUUID()); + perm.setResourceId(resourceId); + perm.setGroupId(groupId); + perm.setPermType(PublishConst.RESOURCE_PAL_FILE); + + pst.setString(1, perm.getId()); + pst.setString(2, perm.getGroupId()); + pst.setInt(3, perm.getPermType()); + pst.setString(4, perm.getResourceId()); + insertModels.add(perm); + } + + public int getBatchSize() { + return repositoryIds.size(); + } + }); + // 语句执行完毕,提交本事务 + conn.commit(); + } + // remove obj + List removeIds = new ArrayList(); + Iterator iter = PublishUserGroupPermCache.getPALListOfGroup(groupId); + while(iter.hasNext()) { + PublishUserGroupPermModel perm = iter.next(); + removeIds.add(perm.getId()); + } + for (String removeId : removeIds) { + PublishUserGroupPermCache.removeById(removeId); + } + // put obj + for (PublishUserGroupPermModel perm : insertModels) { + PublishUserGroupPermCache.putModel(perm); + } + } + } catch (SQLException e) { + try { + if (conn != null) { + conn.rollback(); + } + } catch (Exception ee) { + } + throw new AWSDataAccessException(e); + } finally { + // 关闭连接 + DBSql.close(conn); + } + } + + /** + * 根据用户组Id删除PAL文件权限 + * + * @param groupId 用户组Id + * @return + */ + public int deleteByGroupId(String groupId) { + Connection conn = null; + int r = -1; + try { + conn = DBSql.open(); + if (conn != null) { + // 关闭事务自动提交 + conn.setAutoCommit(false); + r = DBSql.update(conn, "DELETE FROM " + entityName() + " WHERE GROUPID=? AND PERMTYPE=?", new Object[] { groupId, PublishConst.RESOURCE_PAL_FILE }); + // remove obj + for (Iterator iter = PublishUserGroupPermCache.getPALListOfGroup(groupId); iter.hasNext();) { + PublishUserGroupPermModel perm = iter.next(); + PublishUserGroupPermCache.removeById(perm.getId()); + } + } + } catch (SQLException e) { + try { + if (conn != null) { + conn.rollback(); + } + } catch (Exception ee) { + } + throw new AWSDataAccessException(e); + } finally { + // 关闭连接 + DBSql.close(conn); + } + return r; + } + + @Override + public String entityName() { + return "APP_ACT_COE_PAL_USERGRP_PERM"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public PublishUserGroupPermModel mapRow(ResultSet rset, int rowNum) throws SQLException { + PublishUserGroupPermModel model = new PublishUserGroupPermModel(); + try { + model.setId(rset.getString("ID")); + model.setGroupId(rset.getString("GROUPID")); + model.setPermType(rset.getInt("PERMTYPE")); + model.setResourceId(rset.getString("RESOURCEID")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } + + /** + * 获取有某个文件权限的所有小组 + * + * @param resourceId + * @return + * @author zhangming + */ + public List getAllPermsByResourceId(String resourceId) { + String sql = "SELECT * FROM " + entityName() + " WHERE RESOURCEID = ?"; + return DBSql.query(sql, rowMapper(), new Object[]{ resourceId }); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishUserGroupRole.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishUserGroupRole.java new file mode 100644 index 00000000..4a1f360d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/dao/PublishUserGroupRole.java @@ -0,0 +1,198 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.BatchPreparedStatementSetter; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupPermCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupRoleCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.constant.PublishConst; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupPermModel; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupRoleModel; +import com.actionsoft.exception.AWSDataAccessException; + +/** + * 流程发布门户访问权限。用户小组与AWS平台角色关联映射 + * + */ +public final class PublishUserGroupRole extends DaoObject { + + public PublishUserGroupRole() { + } + + @Override + public int insert(PublishUserGroupRoleModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) + model.setId(UUIDGener.getUUID()); + String sql = "INSERT INTO " + entityName() + "(ID,GROUPID,ROLEID)VALUES(:ID,:GROUPID,:ROLEID)"; + Map paraMap = new HashMap<>(); + paraMap.put("ID", model.getId()); + paraMap.put("GROUPID", model.getGroupId()); + paraMap.put("ROLEID", model.getRoleId()); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + PublishUserGroupRoleCache.putModel(model); + } + return r; + } + + @Override + public int delete(Object id) throws AWSDataAccessException { + int r = super.delete(id); + if (r > 0) { + PublishUserGroupRoleCache.removeById((String) id); + } + return r; + } + + @Override + public int update(PublishUserGroupRoleModel model) throws AWSDataAccessException { + return -1; + } + + /** + * 批量重设置某个用户组的AWS角色 + * + * @param groupId 用户组Id + * @param wsId 资产库Id + * @param roleIds AWS角色Id + * @throws AWSDataAccessException + */ + public void batchRole(final String groupId, final List roleIds) throws AWSDataAccessException { + Connection conn = null; + try { + conn = DBSql.open(); + if (conn != null) { + // 关闭事务自动提交 + conn.setAutoCommit(false); + // 准备对象 + final List insertModels = new ArrayList<>(); + DBSql.update(conn, "DELETE FROM " + entityName() + " WHERE GROUPID=?", new Object[] { groupId }); + if (roleIds != null && !roleIds.isEmpty()) { + StringBuilder sql = new StringBuilder(); + sql.append("INSERT INTO ").append(entityName()).append("(ID,GROUPID,ROLEID) values (?, ?, ?)"); + // 执行批量更新 + DBSql.batch(conn, sql.toString(), new BatchPreparedStatementSetter() { + public void setValues(PreparedStatement pst, int paramInt) throws SQLException { + String roleId = roleIds.get(paramInt); + PublishUserGroupRoleModel role = new PublishUserGroupRoleModel(); + role.setId(UUIDGener.getUUID()); + role.setRoleId(roleId); + role.setGroupId(groupId); + + pst.setString(1, role.getId()); + pst.setString(2, role.getGroupId()); + pst.setString(3, role.getRoleId()); + insertModels.add(role); + } + + public int getBatchSize() { + return roleIds.size(); + } + }); + // 语句执行完毕,提交本事务 + conn.commit(); + } + // remove obj + List removeIds = new ArrayList(); + Iterator iter = PublishUserGroupRoleCache.getByGroupId(groupId); + while(iter.hasNext()) { + PublishUserGroupRoleModel role = iter.next(); + removeIds.add(role.getId()); + } + for (String removeId : removeIds) { + PublishUserGroupRoleCache.removeById(removeId); + } + + // put obj + for (PublishUserGroupRoleModel perm : insertModels) { + PublishUserGroupRoleCache.putModel(perm); + } + } + } catch (SQLException e) { + try { + if (conn != null) { + conn.rollback(); + } + } catch (Exception ee) { + } + throw new AWSDataAccessException(e); + } finally { + // 关闭连接 + DBSql.close(conn); + } + } + + /** + * 根据用户组Id删除角色 + * + * @param groupId 用户组Id + * @return + */ + public int deleteByGroupId(String groupId) { + Connection conn = null; + int r = -1; + try { + conn = DBSql.open(); + if (conn != null) { + // 关闭事务自动提交 + conn.setAutoCommit(false); + r = DBSql.update(conn, "DELETE FROM " + entityName() + " WHERE GROUPID=?", new Object[] { groupId }); + // remove obj + for (Iterator iter = PublishUserGroupRoleCache.getByGroupId(groupId); iter.hasNext();) { + PublishUserGroupRoleModel role = iter.next(); + PublishUserGroupRoleCache.removeById(role.getId()); + } + } + } catch (SQLException e) { + try { + if (conn != null) { + conn.rollback(); + } + } catch (Exception ee) { + } + throw new AWSDataAccessException(e); + } finally { + // 关闭连接 + DBSql.close(conn); + } + return r; + } + + @Override + public String entityName() { + return "APP_ACT_COE_PAL_USERGRP_ROLE"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public PublishUserGroupRoleModel mapRow(ResultSet rset, int rowNum) throws SQLException { + PublishUserGroupRoleModel model = new PublishUserGroupRoleModel(); + try { + model.setId(rset.getString("ID")); + model.setGroupId(rset.getString("GROUPID")); + model.setRoleId(rset.getString("ROLEID")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishCommonModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishCommonModel.java new file mode 100644 index 00000000..f819a0f4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishCommonModel.java @@ -0,0 +1,48 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.model; + +/** + * 常用流程模型 + * @author wudong + * + */ + +public class PublishCommonModel { + private static final long serialVersionUID = 1L; + //数据库唯一标识 + private String id; + //资产库标识 + private String wsId; + //流程版本ID + private String plversionId; + //顺序 + private int sort; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getWsId() { + return wsId; + } + public void setWsId(String wsId) { + this.wsId = wsId; + } + public String getPlversionId() { + return plversionId; + } + public void setPlversionId(String plversionId) { + this.plversionId = plversionId; + } + public static long getSerialversionuid() { + return serialVersionUID; + } + public int getSort() { + return sort; + } + public void setSort(int sort) { + this.sort = sort; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishFrequencyModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishFrequencyModel.java new file mode 100644 index 00000000..a2219f63 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishFrequencyModel.java @@ -0,0 +1,58 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +/** + * 发布流程的访问量 + * @author sunlh + * + */ +public class PublishFrequencyModel extends ModelBean { + private static final long serialVersionUID = 1L; + private String id; + private String wsId; + private String plversionId; + private int count; + + public PublishFrequencyModel() { + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWsId() { + return wsId; + } + + public void setWsId(String wsId) { + this.wsId = wsId; + } + + public String getPlversionId() { + return plversionId; + } + + public void setPlversionId(String plversionId) { + this.plversionId = plversionId; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + @Override + public String toString() { + return "PublishFrequencyModel [id=" + id + ", wsId=" + wsId + ", plversionId=" + plversionId + ", count=" + count + + "]"; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishHistoryModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishHistoryModel.java new file mode 100644 index 00000000..02b0aa63 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishHistoryModel.java @@ -0,0 +1,182 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.model; + +import java.sql.Timestamp; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; + +/** + * 流程发布历史 + * + * @author jack + * + */ +public class PublishHistoryModel extends ModelBean { + private static final long serialVersionUID = 1L; + private String id; + private String processInstId; + private String wsId; + private String userId; + private String auditorId; + private Timestamp publishDate; + private String publishDesc; + private String teamId; + private int publishNew; + private int publishChange; + private int publishStop; + + public PublishHistoryModel() { + } + + /** + * 用户组Id,一个36位长的uuid串 + * + * @return + */ + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + /** + * 资产库Id(版本Id) + * + * @return + */ + public String getWsId() { + return wsId; + } + + public void setWsId(String wsId) { + this.wsId = wsId; + } + + /** + * 外部流程实例Id + * + * @return + */ + public String getProcessInstId() { + return processInstId; + } + + public void setProcessInstId(String processInstId) { + this.processInstId = processInstId; + } + + /** + * 申请人,一个合法的AWS账户 + * + * @return + */ + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + /** + * 最后批准人,一个合法的AWS账户 + * + * @return + */ + public String getAuditorId() { + return auditorId; + } + + public void setAuditorId(String auditorId) { + this.auditorId = auditorId; + } + + /** + * 发布日期 + * + * @return + */ + public Timestamp getPublishDate() { + return publishDate; + } + + public void setPublishDate(Timestamp publishDate) { + this.publishDate = publishDate; + } + + /** + * 发布说明 + * + * @return + */ + public String getPublishDesc() { + if (publishDesc == null) + publishDesc = ""; + return publishDesc; + } + + public void setPublishDesc(String publishDesc) { + this.publishDesc = publishDesc; + } + + /** + * 可选,如果发布申请来自小组 + * + * @return + */ + public String getTeamId() { + if (teamId == null) + teamId = ""; + return teamId; + } + + public void setTeamId(String teamId) { + this.teamId = teamId; + } + + /** + * 新发布文件 + * + * @return + */ + public int getPublishNew() { + return publishNew; + } + + public void setPublishNew(int publishNew) { + this.publishNew = publishNew; + } + + /** + * 变更文件 + * + * @return + */ + public int getPublishChange() { + return publishChange; + } + + public void setPublishChange(int publishChange) { + this.publishChange = publishChange; + } + + /** + * 停用文件 + * + * @return + */ + public int getPublishStop() { + return publishStop; + } + + public void setPublishStop(int publishStop) { + this.publishStop = publishStop; + } + + public boolean equals(Object o){ + return (o instanceof PublishHistoryModel) && ((PublishHistoryModel)o).getId().equals(getId()); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishListHistoryModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishListHistoryModel.java new file mode 100644 index 00000000..c7bc2e97 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishListHistoryModel.java @@ -0,0 +1,114 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.model; + +import java.sql.Timestamp; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +/** + * 流程发布历史清单 + * + * @author jack + * + */ +public class PublishListHistoryModel extends ModelBean { + private static final long serialVersionUID = 1L; + private String id; + private String pId; + private String palRepositoryId; + private String actionType; + private String publishDesc; + private String taskId;// 流程手册中对应的流程手册ID,为空则无流程手册 + + private Timestamp publishDate; //发布时间,取自PublishHistoryModel + + public PublishListHistoryModel() { + } + + /** + * 用户组Id,一个36位长的uuid串 + * + * @return + */ + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + /** + * 发布说明 + * + * @return + */ + public String getPublishDesc() { + if (publishDesc == null) + publishDesc = ""; + return publishDesc; + } + + public void setPublishDesc(String publishDesc) { + this.publishDesc = publishDesc; + } + + /** + * 资产库文件ID + * + * @return + */ + public String getPalRepositoryId() { + return palRepositoryId; + } + + public void setPalRepositoryId(String palRepositoryId) { + this.palRepositoryId = palRepositoryId; + } + + /** + * 发布类型 + * + * @return N-新发布;C-变更;S-停用 + */ + public String getActionType() { + return actionType; + } + + public void setActionType(String actionType) { + this.actionType = actionType; + } + + /** + * 发布历史Id + * + * @return + */ + public String getpId() { + return pId; + } + + public void setpId(String pId) { + this.pId = pId; + } + + /** + * 发布时间(取自PublishHistoryModel) + * + * @return + */ + public Timestamp getPublishDate() { + return publishDate; + } + + public void setPublishDate(Timestamp publishDate) { + this.publishDate = publishDate; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishUserGroupModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishUserGroupModel.java new file mode 100644 index 00000000..5b10f858 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishUserGroupModel.java @@ -0,0 +1,144 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.model; + +import java.sql.Timestamp; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; + +/** + * 流程发布门户访问权限。用户小组 + * + * @author jack + * + */ +public class PublishUserGroupModel extends ModelBean { + private static final long serialVersionUID = 1L; + private String id; + private String wsId; + private String groupCode; + private String category; + private String groupName; + private String groupDesc; + private String createUser; + private Timestamp createDate; + + public PublishUserGroupModel() { + } + + /** + * 用户组Id,一个36位长的uuid串 + * + * @return + */ + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + /** + * 资产库Id(版本Id) + * + * @return + */ + public String getWsId() { + return wsId; + } + + public void setWsId(String wsId) { + this.wsId = wsId; + } + + /** + * 用户组代码 + * + * @return + */ + public String getGroupCode() { + if (UtilString.isEmpty(groupCode)) { + groupCode = UUIDGener.getUUID(); + } + return groupCode; + } + + public void setGroupCode(String groupCode) { + this.groupCode = groupCode; + } + + /** + * 用户组分类 + * + * @return + */ + public String getCategory() { + if (category == null) + category = ""; + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + /** + * 用户组名称 + * + * @return + */ + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + /** + * 用户组说明 + * + * @return + */ + public String getGroupDesc() { + if (groupDesc == null) + groupDesc = ""; + return groupDesc; + } + + public void setGroupDesc(String groupDesc) { + this.groupDesc = groupDesc; + } + + /** + * 创建人,一个合法的AWS账户 + * + * @return + */ + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + /** + * 创建日期 + * + * @return + */ + public Timestamp getCreateDate() { + return createDate; + } + + public void setCreateDate(Timestamp createDate) { + this.createDate = createDate; + } + + public boolean equals(Object o){ + return (o instanceof PublishUserGroupModel) && ((PublishUserGroupModel)o).getId().equals(getId()); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishUserGroupPermModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishUserGroupPermModel.java new file mode 100644 index 00000000..62e71b08 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishUserGroupPermModel.java @@ -0,0 +1,79 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; +import com.actionsoft.apps.coe.pal.pal.manage.publish.constant.PublishConst; + +/** + * 流程发布门户访问权限。用户小组权限资源 + * + * @author jack + * + */ +public class PublishUserGroupPermModel extends ModelBean { + private static final long serialVersionUID = 1L; + private String id; + private String groupId; + private int permType; + private String resourceId; + + public PublishUserGroupPermModel() { + } + + /** + * 权限资源Id,一个36位长的uuid串 + * + * @return + */ + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + /** + * 用户组Id + * + * @return + */ + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + /** + * 资源类型 + * + * @return + * @see PublishConst#RESOURCE_PAL_FILE + */ + public int getPermType() { + return permType; + } + + public void setPermType(int permType) { + this.permType = permType; + } + + /** + * 资源Id,权限类型=1时为资产库文件版本Id + * + * @return + */ + public String getResourceId() { + return resourceId; + } + + public void setResourceId(String resourceId) { + this.resourceId = resourceId; + } + + public boolean equals(Object o){ + return (o instanceof PublishUserGroupPermModel) && ((PublishUserGroupPermModel)o).getId().equals(getId()); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishUserGroupRoleModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishUserGroupRoleModel.java new file mode 100644 index 00000000..fcdb927f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/model/PublishUserGroupRoleModel.java @@ -0,0 +1,63 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +/** + * 流程发布门户访问权限。用户小组与AWS平台角色关系映射 + * + * @author jack + * + */ +public class PublishUserGroupRoleModel extends ModelBean { + private static final long serialVersionUID = 1L; + private String id; + private String groupId; + private String roleId; + + public PublishUserGroupRoleModel() { + } + + /** + * 权限资源Id,一个36位长的uuid串 + * + * @return + */ + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + /** + * 用户组Id + * + * @return + */ + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + /** + * AWS平台的角色Id + * + * @return + */ + public String getRoleId() { + return roleId; + } + + public void setRoleId(String roleId) { + this.roleId = roleId; + } + + public boolean equals(Object o){ + return (o instanceof PublishUserGroupRoleModel) && ((PublishUserGroupRoleModel)o).getId().equals(getId()); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/web/PublishManageWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/web/PublishManageWeb.java new file mode 100644 index 00000000..2e225ee1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/publish/web/PublishManageWeb.java @@ -0,0 +1,914 @@ +package com.actionsoft.apps.coe.pal.pal.manage.publish.web; + +import java.io.File; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.coe.pal.pal.ws.constant.CoeWsConstant; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.web.CoeWorkSpaceWeb; +import com.actionsoft.apps.coe.pal.util.BpmOrgUtil; +import com.actionsoft.exception.AWSException; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.lifecycle.api.AppsAPIManager; +import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.org.cache.RoleCache; +import com.actionsoft.bpms.org.model.RoleModel; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.dc.DCProfileManager; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupPermCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupRoleCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.constant.PublishConst; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishCommonDao; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishUserGroup; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishUserGroupPerm; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishUserGroupRole; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishCommonModel; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupModel; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupPermModel; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupRoleModel; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.model.CoeProcessLevelAutoBean; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.constant.CoeFileConstant; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.util.StringHandleUtil; +import com.actionsoft.sdk.local.SDK; +import com.actionsoft.sdk.local.api.AppAPI; + +public class PublishManageWeb extends ActionWeb { + UserContext _uc; + + public PublishManageWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + /** + * 获取某个资产库下所有流程发布小组列表 + * @return + */ + public String getPublishList() { + JSONArray result = new JSONArray(); + // 获取有权限的启用资产库 + CoeWorkSpaceWeb wsWeb = new CoeWorkSpaceWeb(_uc); + List wsList = wsWeb.getActiveCoeWorkSpaceData(); + if (wsList != null && wsList.size() > 0) { + PublishUserGroup dao = new PublishUserGroup(); + List wsIds = new ArrayList<>(); + Map wsMap = new HashMap<>(); + for (CoeWorkSpaceModel model : wsList) { + wsIds.add(model.getUUId()); + wsMap.put(model.getUUId(), model.getWsName()); + } + List list = dao.getPublishUserGroupList(wsIds); + Collections.sort(list, new Comparator() { + @Override + public int compare(PublishUserGroupModel o1, PublishUserGroupModel o2) { + if (o1.getCategory().equals(o2.getCategory())) { + return o1.getCreateDate().compareTo(o2.getCreateDate()); + } else { + return o1.getCategory().compareTo(o2.getCategory()); + } + } + }); + for (PublishUserGroupModel model : list) { + JSONObject obj = new JSONObject(); + obj.put("id", model.getId()); + obj.put("name", model.getGroupName()); + obj.put("category", model.getCategory()); + obj.put("groupCode", model.getGroupCode()); + obj.put("wsId", model.getWsId()); + obj.put("wsName", wsMap.get(model.getWsId())); + obj.put("desc", model.getGroupDesc()); + result.add(obj); + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(result); + return ro.toString(); + } + + /** + * 用户组新建/更新时获取必要数据 + * @param id 不为空则是更新 + * @return + */ + public String getPublishGroupCreateData(String id) { + // 1.所有数据定义准备 + // 基础数据 + String name = ""; + String category = ""; + String desc = ""; + String groupCode = ""; + JSONArray categoryArr = new JSONArray();// 分类数据 + + // 角色数据 + Set roles = new HashSet<>();// 已经关联的AWS角色 + // 权限数据 + String wsId = ""; + JSONArray wsArr = new JSONArray();// 资产库列表 + // JSONArray repositoryTree = new JSONArray();// 资产库树根节点数据 + JSONArray repositorys = new JSONArray();// 已选中资产库模型数据(versionId) + + // 2.获取部分新建/更新共有数据 + // 分类数据 + // 分类列表 + PublishUserGroup dao = new PublishUserGroup(); + List categoryList = dao.getCategoryList(); + if (categoryList != null) { + for (String c : categoryList) { + JSONObject jo = new JSONObject(); + jo.put("label", c); + jo.put("value", c); + categoryArr.add(jo); + } + } + // 资产库列表 + CoeWorkSpaceWeb wsWeb = new CoeWorkSpaceWeb(_uc); + List wsList = wsWeb.getActiveCoeWorkSpaceData(); + for (CoeWorkSpaceModel model : wsList) { + JSONObject obj = new JSONObject(); + obj.put("label", model.getWsName()); + obj.put("value", model.getUUId()); + wsArr.add(obj); + } + // 3.根据新建/更新获取不同的数据内容 + if (UtilString.isNotEmpty(id)) {// 更新 + // 已经录入的组信息 + PublishUserGroupModel userGroupModel = PublishUserGroupCache.getCache().get(id); + if (userGroupModel == null) { + throw new AWSException("数据查询失败[id=" + id + "]"); + } + name = userGroupModel.getGroupName(); + category = userGroupModel.getCategory(); + desc = userGroupModel.getGroupDesc(); + wsId = userGroupModel.getWsId(); + groupCode = userGroupModel.getGroupCode(); + // 已经关联的AWS角色 + Iterator publishUserGroupRoleList = PublishUserGroupRoleCache.getByGroupId(id); + if (publishUserGroupRoleList != null) { + while (publishUserGroupRoleList.hasNext()) { + PublishUserGroupRoleModel publishUserGroupRoleModel = publishUserGroupRoleList.next(); + roles.add(publishUserGroupRoleModel.getRoleId()); + } + } + // 获取所有的角色组 + String[] categoryNames = RoleCache.getCategoryNames(); + for (int i = 0; i < categoryNames.length; i++) { + List roleList = RoleCache.getListOfGroup(categoryNames[i]); + boolean checkGroupAll = true; + for (RoleModel role : roleList) { + if (!roles.contains(role.getId())) { + checkGroupAll = false; + break; + } + } + if (checkGroupAll) { + roles.add(categoryNames[i]); + } + } + // 已经选中的权限树 + Iterator publishUserGroupPermList = PublishUserGroupPermCache.getPALListOfGroup(id); + if (publishUserGroupPermList != null) { + while (publishUserGroupPermList.hasNext()) { + PublishUserGroupPermModel publishUserGroupPermModel = publishUserGroupPermList.next(); + PALRepository PALRepositoryDao = new PALRepository(); + List palRepositoryModelList = PALRepositoryDao.getRepositoryByVersionId(publishUserGroupPermModel.getResourceId()); + if (palRepositoryModelList != null && palRepositoryModelList.size() > 0) { + repositorys.add(palRepositoryModelList.get(0).getVersionId()); + } + } + } + } else {// 新建 + // 默认选择地一个资产库 + if (wsArr.size() > 0) { + wsId = wsArr.getJSONObject(0).getString("value"); + } + // 组代码创建默认 + groupCode = UUIDGener.getUUID(); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("name", name); + ro.put("category", category); + ro.put("desc", desc); + ro.put("groupCode", groupCode); + ro.put("categoryArr", categoryArr); + ro.put("roles", roles); + ro.put("wsId", wsId); + ro.put("wsArr", wsArr); + ro.put("repositorys", repositorys); + return ro.toString(); + } + + /** + * 获取角色树子节点数据 + * @param pid + * @return + */ + public String getPublishGroupRoleTreeData(String pid) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray result; + if (UtilString.isEmpty(pid)) { + result = getRoleJSON(null);// 根目录 + } else { + result = getRoleJSON(pid); + } + ro.setData(result); + return ro.toString(); + } + + /** + * 根据父节点获取所有子节点的versionId + * @param wsId + * @param pid + * @return + */ + public String getPublishGroupAllRepositoryVersionIdByPid(String wsId, String pid) { + List list = new ArrayList<>(); + Set idSet = new HashSet<>(); + PALRepositoryCache.getAllChildrenModelsByPid(wsId, pid, list, idSet); + JSONArray result = new JSONArray(); + for (PALRepositoryModel model : list) { + if (model.isUse()) { + result.add(model.getVersionId()); + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(result); + return ro.toString(); + } + + private String removeSpecialChart(String str) { + if (str == null || "".equals(str)) { + return ""; + } else { + str = str.trim(); + } + String[] specialChart = new String[]{" ", "<", "?", "&", "#", "@", "!", "%", "/", ";", "'", "^", "(", ")", ".", "[", "]", "~", "$", "*", "+", "{", "}", "|", "\"", ":", ">", ",", "\\"}; + for (String c : specialChart) { + str = str.replace(c, ""); + } + + return str; + } + + /** + * AWS角色树 + * + * @param pid 父节点id,即角色分类名称 + * @return pid为空,返回所有角色分类;pid不为空,返回该分类的所有角色 + */ + public JSONArray getRoleJSON(String pid) { + JSONArray categorys = new JSONArray(); // 所有AWS角色分类 + if (pid == null || "".equals(pid) || "root".equals(pid)) { + if (pid == null || "".equals(pid)) { + JSONObject rootNode = new JSONObject(); + rootNode.put("id", "root"); + rootNode.put("label", "岗位角色"); + rootNode.put("type", "root"); + rootNode.put("disabled", true); + JSONObject role = new JSONObject(); + role.put("code", BpmOrgUtil.ROLE_ROOT_ICON_CODE); + role.put("color", BpmOrgUtil.ROLE_ROOT_ICON_COLOR); + rootNode.put("iconFont", role); + rootNode.put("leaf", false); + categorys.add(rootNode); + } else if ("root".equals(pid)) { + // 所有角色列表 + String[] categoryNames = RoleCache.getCategoryNames(); + if (categoryNames != null && categoryNames.length > 0) { + for (String categoryName : categoryNames) { + JSONObject category = new JSONObject(); + category.put("id", categoryName); + category.put("label", categoryName); + category.put("pid", "root"); + category.put("type", "roleGroup"); + JSONObject role = new JSONObject(); + role.put("code", BpmOrgUtil.ROLE_GROUP_ICON_CODE); + role.put("color", BpmOrgUtil.ROLE_GROUP_ICON_COLOR); + category.put("iconFont", role); + category.put("leaf", false); + categorys.add(category); + } + } + } + } else { + List map = RoleCache.getListOfGroup(pid); + for (RoleModel roleModel : map) { + JSONObject role = new JSONObject(); + role.put("id", roleModel.getId()); + role.put("pid", pid); + role.put("label", roleModel.getName()); + role.put("type", "role"); + JSONObject role2 = new JSONObject(); + if (roleModel.getRoleType() == 0) {// 角色 + role2.put("code", BpmOrgUtil.ROLE_ICON_CODE); + role2.put("color", BpmOrgUtil.ROLE_ICON_COLOR); + } else {// 岗位 + role2.put("code", BpmOrgUtil.POSITION_ICON_CODE); + role2.put("color", BpmOrgUtil.POSITION_ICON_COLOR); + } + role.put("iconFont", role2); + role.put("leaf", true); + categorys.add(role); + } + } + + return categorys; + } + + /** + * 新增/修改小组 + * + * @param id 小组id(新增时该项为空) + * @param wsId 资产库Id + * @param groupCode 代码 + * @param category 分类 + * @param groupName 名称 + * @param groupDesc 说明 + * @param resourceIds 权限文件Id + * @param roleIds 关联AWS角色Id + * @return + */ + public String savePublishGroup(String id, String wsId, String groupCode, String category, String groupName, String groupDesc, String resourceIds, String roleIds) { + ResponseObject ro; + PublishUserGroupModel model; + int r; + PublishUserGroup dao = new PublishUserGroup(); + if (UtilString.isEmpty(id)) {// 新增 + model = new PublishUserGroupModel(); + id = UUIDGener.getUUID(); + model.setId(id); + model.setWsId(wsId); + model.setGroupCode(groupCode); + model.setCategory(category); + model.setGroupName(groupName); + model.setGroupDesc(groupDesc); + model.setCreateUser(super.getContext().getUID()); + model.setCreateDate(new Timestamp(System.currentTimeMillis())); + r = dao.insert(model); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_PORTAL, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_PORTAL_USER_GROUP_CREATE); + } + } else {// 更新 + model = PublishUserGroupCache.getModel(id); + model.setWsId(wsId); + model.setGroupCode(groupCode); + model.setCategory(category); + model.setGroupName(groupName); + model.setGroupDesc(groupDesc); + r = dao.update(model); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_PORTAL, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_PORTAL_USER_GROUP_UPDATE); + } + } + + if (r > 0) { + ro = ResponseObject.newOkResponse(); + PublishUserGroupPerm publishUserGroupPerm = new PublishUserGroupPerm(); + List resourceIdList = new ArrayList<>(); + if (resourceIds != null && !"".equals(resourceIds)) { + String[] resourceIdArray = resourceIds.split(","); + for (int i = 0; i < resourceIdArray.length; i++) { + if (!UtilString.isEmpty(resourceIdArray[i]) && resourceIdArray[i].length() == 36) { + resourceIdList.add(resourceIdArray[i]); + } + } + } + publishUserGroupPerm.batchPALPerm(id, resourceIdList); + + PublishUserGroupRole publishUserGroupRole = new PublishUserGroupRole(); + List roleIdList = new ArrayList(); + if (roleIds != null && !"".equals(roleIds)) { + String[] roleIdArray = roleIds.split(","); + roleIdList = new ArrayList(); + for (String roleId : roleIdArray) { + if (SDK.getORGAPI().getRoleById(roleId) != null && !roleIdList.contains(roleId)) { + roleIdList.add(roleId); + } + } + } + publishUserGroupRole.batchRole(id, roleIdList); + } else { + ro = ResponseObject.newErrResponse(); + } + return ro.toString(); + } + + /** + * 删除小组 + * + * @param id 小组Id + * @return + */ + public String deletePublishGroup(String id) { + PublishUserGroup dao = new PublishUserGroup(); + int r = dao.delete(id); + ResponseObject ro; + if (r > 0) { + ro = ResponseObject.newOkResponse(); + PublishUserGroupPerm permDao = new PublishUserGroupPerm(); + permDao.deleteByGroupId(id); + PublishUserGroupRole roleDao = new PublishUserGroupRole(); + roleDao.deleteByGroupId(id); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_PORTAL, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_PORTAL_USER_GROUP_DELETE); + } + } else { + ro = ResponseObject.newErrResponse(); + } + return ro.toString(); + } + + private String obj2html(List list) { + StringBuilder html = new StringBuilder(); + if (list != null) { + int i = 0; + for (PublishUserGroupModel model : list) { + String classType = i % 2 == 0 ? "aws-grid-row" : "aws-grid-row aws-grid-oddRow"; + html.append("" + + " " + (i + 1) + "" + + "
    " + model.getGroupCode() + "
    " + + "
    " + model.getCategory() + "
    " + + "
    " + StringHandleUtil.replaceSpecialChart(model.getGroupName()) + "
    " + + "
    " + model.getGroupDesc() + "
    " + + "
    " + + " " + + " " + + " " + + ""); + i++; + } + } + + return html.toString(); + } + + /** + * 获取常用流程数据列表 + * @return + */ + public String getPublishGroupCommonList() { + JSONArray result = new JSONArray(); + Map map = new HashMap<>(); + // 获取有权限的启用资产库 + // CoeWorkSpaceWeb wsWeb = new CoeWorkSpaceWeb(_uc); + // List wsList = wsWeb.getActiveCoeWorkSpaceData(); + // 获取所有启用中资产库,暂时不根据权限获取(无法处理多资产库不同权限排序问题) + List wsList = new ArrayList<>(); + List records = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getCoeWorkSpaceModelRecodesNoPage(); // 所有记录条数 + int size = records.size(); + for (int i = 0; i < size; i++) { + CoeWorkSpaceModel wsModel = records.get(i); + if (wsModel.getWsState() == CoeWsConstant.CLOSE) { + continue; + } + wsList.add(wsModel); + } + if (wsList != null && wsList.size() > 0) { + List wsIds = new ArrayList<>(); + for (CoeWorkSpaceModel model : wsList) { + wsIds.add(model.getUUId()); + } + result = new PublishCommonDao().getCommonDataByPagination(wsIds); + if (result.size() > 0) { + JSONArray array1 = new JSONArray();// 存放sort为0的数据 + JSONArray array2 = new JSONArray();// 存放sort为非0的数据 + for (int i = 0; i < result.size(); i++) { + if (result.getJSONObject(i).getInteger("sort") == 0) { + array1.add(result.getJSONObject(i)); + } else { + array2.add(result.getJSONObject(i)); + } + } + if (array1.size() > 0) { + array2.addAll(array1); + result = array2; + } + for (int i = 0; i < result.size(); i++) { + String wsId = result.getJSONObject(i).getString("wsId"); + String versionId = result.getJSONObject(i).getString("versionId"); + result.getJSONObject(i).put("sort", i+1); + if (map.containsKey(wsId)) { + map.get(wsId).add(versionId); + } else { + JSONArray array = new JSONArray(); + array.add(versionId); + map.put(wsId, array); + } + } + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data", result); + ro.put("checkedData", map); + return ro.toString(); + } + + /** + * 门户设置-常用流程-新增-查询必要数据 + * @return + */ + public String getCommonCreateData() { + String wsId = ""; + JSONArray wsArr = new JSONArray();// 资产库列表 + JSONArray repositorys = new JSONArray();// 已选中的常用流程,空值 + // 资产库列表 + CoeWorkSpaceWeb wsWeb = new CoeWorkSpaceWeb(_uc); + List wsList = wsWeb.getActiveCoeWorkSpaceData(); + for (CoeWorkSpaceModel model : wsList) { + JSONObject obj = new JSONObject(); + obj.put("label", model.getWsName()); + obj.put("value", model.getUUId()); + wsArr.add(obj); + } + // 默认选择地一个资产库 + if (wsArr.size() > 0) { + wsId = wsArr.getJSONObject(0).getString("value"); + } + + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("wsId", wsId); + ro.put("wsArr", wsArr); + ro.put("repositorys", repositorys); + return ro.toString(); + } + + /** + * 新增保存常用流程 + * @param wsId + * @param resourceIds + * @return + */ + public String savePublishCommonCreate(String wsId, String resourceIds) { + ResponseObject ro; + PublishCommonDao dao = new PublishCommonDao(); + // 获取已经设置好的有效的常用流程 + List list = dao.getCommonDataByWsId(wsId); + Map map = new HashMap<>(); + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + String versionId = list.get(i).getPlversionId(); + int sort = list.get(i).getSort(); + List pList = PALRepositoryCache.getByVersionId(versionId); + if (pList != null && pList.size() > 0 && sort != 0) { + map.put(versionId, sort); + } + } + } + // 获取最大sort + int maxSort = dao.getMaxSort(null); + // 排序 + String[] resourceIdArr = resourceIds.split(","); + List insertList = new ArrayList(); + for(int i=0;i insertList = new ArrayList(); + int index = 0; + for (int i = 0; i < array.size(); i++) { + String versionId = array.getString(i); + List list = PALRepositoryCache.getByVersionId(versionId); + if (list.size() > 0) { + PublishCommonModel model = new PublishCommonModel(); + model.setId(UUIDGener.getUUID()); + model.setWsId(list.get(0).getWsId()); + model.setPlversionId(versionId); + model.setSort(++index); + insertList.add(model); + } + } + if (insertList.size() > 0) { + new PublishCommonDao().batchInsert(insertList, true); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_PORTAL, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_PORTAL_COMMON_REPOSITORY_UPDATE); + } + } + return ro.toString(); + } + + /** + * 初始化排序 + * sort为0的排在首位 + */ + private void initPublishGroupCommonSort() { + PublishCommonDao dao = new PublishCommonDao(); + List zeroList = new ArrayList<>(); + List normalList = new ArrayList<>(); + List list = dao.getAllInstance(); + if (list != null) { + for (PublishCommonModel model : list) { + if (model.getSort() == 0) { + zeroList.add(model); + } else { + normalList.add(model); + } + } + if (zeroList.size() > 0) { + normalList.addAll(zeroList); + } + for (int i = 0; i < normalList.size(); i++) { + normalList.get(i).setSort(i+1); + } + } + if (normalList.size() > 0) { + dao.batchInsert(normalList, true); + } + } + + /** + * 删除 + * @param ids + * @return + */ + public String deletePublishGroupCommon(String ids) { + ResponseObject ro = ResponseObject.newOkResponse(); + String [] idArray = ids.split(","); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < idArray.length; i++) { + if (!UtilString.isEmpty(idArray[i])) { + sb.append("'").append(idArray[i]).append("'").append(","); + } + } + String sqlWhere = ""; + if (sb.length() > 0) { + sqlWhere = sb.substring(0, sb.length() - 1); + } + if (sqlWhere.length() == 0) { + return ResponseObject.newErrResponse("删除失败").toString(); + } + PublishCommonDao dao = new PublishCommonDao(); + dao.deleteByIds(sqlWhere); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_PORTAL, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_PORTAL_COMMON_REPOSITORY_DELETE); + } + return ro.toString(); + } + + /** + * 获取文件名称全路径 + * @param model + * @return + */ + protected void getFilePath(PALRepositoryModel model, StringBuilder sBuilder, StringBuilder idBuilder, Set idSets) { + if (model.getParentId().length() == 36 && !idSets.contains(model.getParentId())) { + String parentId = model.getParentId(); + PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(parentId); + if (parentModel != null) { + sBuilder.insert(0, parentModel.getName() + ">"); + idBuilder.insert(0, parentModel.getId() + ","); + idSets.add(parentModel.getId()); + getFilePath(parentModel, sBuilder, idBuilder, idSets); + } + } + } + + /** + * 门户主题风格数据查询 + * @return + */ + public String queryPublishGroupThemeData() { + ResponseObject ro = ResponseObject.newOkResponse(); + // logo图片设置 + JSONObject logo = new JSONObject(); + // 获取dc中文件目录 + DCContext logoDcContext = null; + DCContext bannerDcContext = null; + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "portalTheme"); + if (dcProfile != null) { + logoDcContext = new DCContext(_uc, dcProfile, "portal", "logo"); + bannerDcContext = new DCContext(_uc, dcProfile, "portal", "banner"); + } + if (logoDcContext != null) { + File file = new File(logoDcContext.getPath()); + if (file.exists()) { + File [] files = file.listFiles(); + if (files != null) { + if (files.length > 0) { + for (File file2 : files) { + String src = new DCContext(_uc, dcProfile, CoEConstant.APP_ID, "portal", "logo", file2.getName()).getDownloadURL(); + logo.put("src", src); + logo.put("name", file2.getName()); + break; + } + } + } + } + } + ro.put("logoData", logo); + // 轮播图设置 + JSONArray pictures = new JSONArray(); + if (bannerDcContext != null) { + File file = new File(bannerDcContext.getPath()); + if (file.exists()) { + File [] files = file.listFiles(); + if (files != null) { + // 按照名称排序 + List fileList = Arrays.asList(files); + Collections.sort(fileList, new Comparator() { + @Override + public int compare(File o1, File o2) { + if (o1.isDirectory() && o2.isFile()) + return -1; + if (o1.isFile() && o2.isDirectory()) + return 1; + return o1.getName().compareTo(o2.getName()); + } + }); + for (int i = 0; i < fileList.size(); i++) { + File file2 = files[i]; + String src = new DCContext(_uc, dcProfile, CoEConstant.APP_ID, "portal", "banner", file2.getName()).getDownloadURL(); + JSONObject object = new JSONObject(); + object.put("src", src); + object.put("name", file2.getName()); + pictures.add(object); + } + } + } + } + ro.put("bannerData", pictures); + return ro.toString(); + } + + /** + * 门户设置-主题风格数据保存 + * @param type + * @param fileName + * @return + */ + public String savePublishGroupThemeData(String type, String fileName) { + if ("logo".equals(type)) { + saveGroupThemeLogo(fileName); + return ResponseObject.newOkResponse().toString(); + } else if ("banner".equals(type)) { + saveGroupThemeBanner(fileName); + return ResponseObject.newOkResponse().toString(); + } + return ResponseObject.newErrResponse("上传失败").toString(); + } + + // 保存logo主题图片 + private void saveGroupThemeLogo(String fileName) { + if (UtilString.isEmpty(fileName)) { + return; + } + DCPluginProfile tmpDcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "portalTheme"); + DCContext logoDcContext = null; + if (dcProfile != null) { + logoDcContext = new DCContext(_uc, dcProfile, "portal", "logo"); + } + // 删除正式 + if (logoDcContext != null) { + UtilFile.removeFile(new File(logoDcContext.getPath())); + } + DCContext tmpDcContext = null; + if (tmpDcProfile != null) { + tmpDcContext = new DCContext(_uc, tmpDcProfile, CoEConstant.APP_ID, "portal", "logo", fileName); + } + if (tmpDcContext != null) { + SDK.getDCAPI().copyDCFile(tmpDcContext, logoDcContext); + } + // 删除临时目录 + UtilFile.removeFile(new File(new DCContext(_uc, tmpDcProfile, "portal", "logo").getPath())); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_PORTAL, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_PORTAL_THEME_STYLE_LOGO_CREATE); + } + } + + // 保存轮播图图片 + private void saveGroupThemeBanner(String fileName) { + if (UtilString.isEmpty(fileName)) { + return; + } + + DCPluginProfile tmpDcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "portalTheme"); + DCContext tmpDcContext = null; + DCContext bannerDcContext = null; + if (dcProfile != null && tmpDcProfile != null) { + bannerDcContext = new DCContext(_uc, dcProfile, "portal", "banner"); + tmpDcContext = new DCContext(_uc, tmpDcProfile, CoEConstant.APP_ID, "portal", "banner", fileName); + if (tmpDcContext != null && bannerDcContext != null) { + SDK.getDCAPI().copyDCFile(tmpDcContext, bannerDcContext); + } + } + // 删除临时目录 + UtilFile.removeFile(new File(new DCContext(_uc, tmpDcProfile, "portal", "banner", fileName).getPath())); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_PORTAL, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_PORTAL_THEME_STYLE_BANNER_CREATE); + } + } + + /** + * 主题风格图片删除 + * @param type + * @param fileName + * @return + */ + public String removePublishGroupThemeData(String type, String fileName) { + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "portalTheme"); + if ("logo".equals(type)) { + DCContext logoDcContext = null; + if (dcProfile != null) { + logoDcContext = new DCContext(_uc, dcProfile, "portal", "logo"); + } + // 删除正式 + if (logoDcContext != null) { + UtilFile.removeFile(new File(logoDcContext.getPath())); + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_PORTAL, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_PORTAL_THEME_STYLE_LOGO_DELETE); + } + return ResponseObject.newOkResponse().toString(); + } else if ("banner".equals(type) && UtilString.isNotEmpty(fileName)) { + DCContext bannerDcContext = null; + if (dcProfile != null) { + bannerDcContext = new DCContext(_uc, dcProfile, CoEConstant.APP_ID, "portal", "banner", fileName); + if (bannerDcContext != null) { + bannerDcContext.delete(); + } + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_PORTAL, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_PORTAL_THEME_STYLE_BANNER_DELETE); + } + return ResponseObject.newOkResponse().toString(); + } + return ResponseObject.newErrResponse("删除失败").toString(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/util/PalManageUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/util/PalManageUtil.java new file mode 100644 index 00000000..4d12a2f7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/manage/util/PalManageUtil.java @@ -0,0 +1,178 @@ +package com.actionsoft.apps.coe.pal.pal.manage.util; + + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.i18n.I18nRes; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; +import org.apache.commons.lang.StringUtils; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public class PalManageUtil { + + /** + * 获取建模管理中属性类型数据源 + * @return + */ + public static Map getMethodAttrTypeMap() { + Map map = new LinkedHashMap(); + map.put("string", "单行文本"); + map.put("textarea", "多行文本"); + map.put("select", "单项选择"); + map.put("select_m", "多项选择"); + map.put("boolean", "是否"); + map.put("number", "数字类型"); + map.put("relation", "PAL模型关联"); + map.put("awsorg", "BPM组织架构关联"); + map.put("link", "链接"); + map.put("DateTimePicker", "日期时间选择器"); + map.put("table", "表格"); + return map; + } + + /** + * 获取建模管理中属性类型为relation关联时的关联范围类型 + * @return + */ + public static Map getMethodAttrRelationTypeMap() { + Map map = new LinkedHashMap(); + map.put("shape", "模型内形状"); + map.put("file", "模型文件"); + map.put("shapeAndFile", "模型文件及模型内形状"); + return map; + } + + /** + * 获取建模管理属性类型为relation关联时的可关联的建模分类和建模方法 + * @return + */ + public static Map getMethodAttrRelationMethodGategoryAndMethodMap() { + Map map = new LinkedHashMap(); + List palMethodCategoryList = PALMethodCache.getPALMethodList(true); + for (String c : palMethodCategoryList) { + map.put(c, I18nRes.findValue(CoEConstant.APP_ID, c) + "(建模分类)"); + List list = PALMethodCache.getPALMethodModelListByMethod(c); + for (PALMethodModel model : list) { + map.put(model.getId(), I18nRes.findValue(CoEConstant.APP_ID, model.getId())); + } + } + return map; + } + + /** + * 获取建模管理属性类型为awsorg关联BPM组织架构的分类 + * @return + */ + public static Map getMethodAttrAwsorgTypeMap() { + Map map = new LinkedHashMap(); + map.put("department", "部门"); + map.put("position", "岗位"); + map.put("role", "角色"); + map.put("user", "人员"); + return map; + } + + /** + * 获取ref的名称 + * @param attr + * @return + */ + public static String getMethodAttrRefName(PALMethodAttributeModel attr) { + String type = attr.getType(); + String refName = attr.getRef(); + if ("relation".equals(type)) { + JSONObject refObj = JSONObject.parseObject(attr.getRef()); + String method = refObj.getString("method"); + boolean multiple = refObj.getBooleanValue("multiple"); + String relationType = refObj.getString("type"); + Map relationTypeMap = getMethodAttrRelationTypeMap(); + List palMethodCategoryList = PALMethodCache.getPALMethodList(true); + for (String c : palMethodCategoryList) { + if (c.equals(method)) { + refName = I18nRes.findValue(CoEConstant.APP_ID, method) + "(" + (relationTypeMap.containsKey(relationType) ? relationTypeMap.get(relationType) : relationType) + "," + (multiple ? "多选" : "单选") + ")"; + break; + } + } + for (String c : palMethodCategoryList) { + List list = PALMethodCache.getPALMethodModelListByMethod(c); + for (PALMethodModel model : list) { + if (model.getId().equals(method)) { + refName = I18nRes.findValue(CoEConstant.APP_ID, method) + "(" + (relationTypeMap.containsKey(relationType) ? relationTypeMap.get(relationType) : relationType) + "," + (multiple ? "多选" : "单选") + ")"; + break; + } + } + } + } else if ("awsorg".equals(type)) { + Map awsorgTypeMap = getMethodAttrAwsorgTypeMap(); + JSONObject refObj = JSONObject.parseObject(attr.getRef()); + JSONArray scopeArr = refObj.getJSONArray("scope"); + boolean multiple = refObj.getBooleanValue("multiple"); + List refNameList = new ArrayList<>(); + for (Map.Entry entry : awsorgTypeMap.entrySet()) { + if (scopeArr.contains(entry.getKey())) { + refNameList.add(entry.getValue()); + } + } + refName = StringUtils.join(refNameList, ",") + "(" + (multiple ? "多选" : "单选") + ")"; + } + return refName; + } + + /** + * 获取形状数据显示规则中的icon数据源 + */ + public static List getShapeConfigIconData() { + List icons = Lists.newArrayList(); + icons.add("|#1296DB");//提示 + icons.add("|#EA9518");//标签 + icons.add("|#EA9518");//反对 + icons.add("|#1296DB");//减少 + icons.add("|#1296DB");//播放 + icons.add("|#EA9518");//警告 + icons.add("|#D81E06");//删除 + icons.add("|#1296DB");//群组 + icons.add("|#1296DB");//上传 + icons.add("|#707070");//提示 + icons.add("|#D81E06");//停止 + icons.add("|#00c853");//完成 + icons.add("|#FA8072");//喜欢 + icons.add("|#00c853");//下载 + icons.add("|#00c853");//修改 + icons.add("|#082E54");//邮件 + icons.add("|#EA9518");//暂停 + icons.add("|#FA8072");//赞同 + icons.add("|#00c853");//增加 + icons.add("|#1296DB");//上 + icons.add("|#1296DB");//下 + icons.add("|#1296DB");//左 + icons.add("|#1296DB");//右 + icons.add("|#7AA7AA");//进度1 + icons.add("|#7AA7AA");//进度2 + icons.add("|#7AA7AA");//进度3 + icons.add("|#7AA7AA");//进度4 + icons.add("|#7AA7AA");//进度5 + icons.add("|#7AA7AA");//进度6 + icons.add("|#7AA7AA");//进度7 + icons.add("|#7AA7AA");//进度8 + icons.add("|#E9433F");//红旗帜 + icons.add("|#FFAE03");//橙黄旗帜 + icons.add("|#F4EA2A");//黄旗帜 + icons.add("|#00C853");//绿旗帜 + icons.add("|#1296DB");//蓝旗帜 + icons.add("|#082E54");//深蓝旗帜 + icons.add("|#88147F");//紫旗帜 + icons.add("|#7DABB1");//浅蓝旗帜 + icons.add("|#707070");//灰旗帜 + return icons; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/PALMethodManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/PALMethodManager.java new file mode 100644 index 00000000..47fbda20 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/PALMethodManager.java @@ -0,0 +1,155 @@ +package com.actionsoft.apps.coe.pal.pal.method; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.system.util.StringUtil; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSONObject; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.Element; +import org.dom4j.io.SAXReader; + +import javax.rmi.CORBA.Util; + +public class PALMethodManager { + private static class Inner { + private final static PALMethodManager instance = new PALMethodManager(); + } + + public static PALMethodManager getInstance() { + return PALMethodManager.Inner.instance; + } + + private PALMethodManager() { + } + + /** + * 根据methodId获取PALMethodModel + * + * @param methodId + * @return PALMethodModel对象 + */ + public PALMethodModel getPALMethodModelById(String methodId) { + return PALMethodCache.getPALMethodModelById(methodId); + } + + /** + * 根据method获取PALMethodModel 如 method="process"; + * + * @param method + * @return PALMethodModel对象 + */ + public List getPALMethodModelListByMethod(String method) { + return PALMethodCache.getPALMethodModelListByMethod(method); + } + + /** + * 获取存在的Method + * + * @return + */ + public List list() { + return PALMethodCache.getPALMethodList(); + } + + /** + * 获取建模方法的图标 + * @param methodId + * @return + */ + public JSONObject getPALMethodIconById(String methodId) { + PALMethodModel model = getPALMethodModelById(methodId); + String code = ""; + String color = ""; + AppContext app; + if (model == null) { + app = SDK.getAppAPI().getAppContext(CoEConstant.APP_ID); + } else { + app = model.getApp(); + } + String manifestXml = "../apps/install/"+ app.getId() +"/manifest.xml"; + File manifestFile = new File(manifestXml); + Document doc = null; + try { + doc = new SAXReader().read(manifestFile); + Element root = doc.getRootElement(); + Element methodIcon = root.element("palMethodIcon"); + if (methodIcon != null) { + JSONObject iconObj = JSONObject.parseObject(methodIcon.getTextTrim()); + if (iconObj.containsKey(methodId)) { + JSONObject obj = iconObj.getJSONObject(methodId); + code = obj.getString("code"); + color = obj.getString("color"); + } else { + code = app.getIconFontCode(); + color = app.getIconFontColor(); + } + } else { + code = app.getIconFontCode(); + color = app.getIconFontColor(); + } + } catch (DocumentException e) { + e.printStackTrace(); + } + JSONObject result = new JSONObject(); + result.put("code", code); + result.put("color", color); + return result; + } + + /** + * 是否允许创建某建模方法判断 + * 不同的建模方法大类不允许创建,返回false,其他的根据创建管控参数进行判断 + * 例如在category建模大类下的parentMethodId建模方法模型创建targetCategory建模大类的targetMethodId类型的子级模型,是否能够创建 + * @param category 当前所属建模方法大类 + * @param parentMethodId 父建模方法Id + * @param targetCategory 需要在parentMethodId下面创建的建模方法大类 + * @param targetMethodId 需要在parentMethodId下面创建的子级建模方法Id + * @return true 运行创建 false 不允许创建 + */ + public boolean havingCreateMethodPerm(String category, String parentMethodId, String targetCategory, String targetMethodId) { + if (UtilString.isEmpty(category) && UtilString.isEmpty(targetCategory) && UtilString.isEmpty(targetMethodId)) { + return false; + } + if (!category.equals(targetCategory)) { + return false; + } + if (UtilString.isEmpty(parentMethodId)) { + parentMethodId = category; + } + JSONObject defineObj = SDK.getAppAPI().getPropertyJSONObjectValue(CoEConstant.APP_ID, "METHOD_DEFINITION_RULES", new JSONObject()); + if (!defineObj.isEmpty()) { + if (defineObj.containsKey(category)) { + JSONObject categoryObj = defineObj.getJSONObject(category); + if (!categoryObj.isEmpty() && categoryObj.containsKey("createRules")) { + JSONObject createRules = categoryObj.getJSONObject("createRules"); + if (!createRules.isEmpty() && createRules.containsKey(parentMethodId)) { + String permStr = createRules.getString(parentMethodId); + if (UtilString.isEmpty(permStr)) {// 权限范围为空,则无权限 + return false; + } + if ("*".equals(permStr.trim())) {// 权限范围为*,则有权限 + return true; + } + List methodIdList = Arrays.asList(permStr.split(",")); + if (methodIdList.contains(targetMethodId)) {// 权限范围包含,则有权限 + return true; + } else {// 不包含,无权限 + return false; + } + } + } + } + } + return true;// 不在管控的json中进行定义,默认有权限 + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/aslp/RegisterMethodApp.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/aslp/RegisterMethodApp.java new file mode 100644 index 00000000..6300f234 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/aslp/RegisterMethodApp.java @@ -0,0 +1,38 @@ +package com.actionsoft.apps.coe.pal.pal.method.aslp; + +import com.actionsoft.apps.coe.pal.pal.method.extend.MethodAppManager; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.util.UtilString; + +import java.util.Map; + +/** + * 为PAL建模方法扩展App,通过该ASLP即可完成注册。推荐注册位置放在该App的启动后事件 + * @author sunlh + * @date 2020-04-07 + * + */ +public class RegisterMethodApp implements ASLP { + + @Override + public ResponseObject call(Map params) { + if (params == null) { + return ResponseObject.newErrResponse().err("不接受参数为空的调用!"); + } + if (!params.containsKey("methodId")) { + return ResponseObject.newErrResponse().err("methodId参数不允许为空!"); + } + AppContext app = (AppContext) params.get("caller"); + String title = params.get("title").toString(); + String desc = params.get("desc").toString(); + String methodId = params.get("methodId").toString(); + if (params.containsKey("isFolder")) { + MethodAppManager.register(methodId, app, title, desc, "1".equals(params.get("isFolder"))); + } else { + MethodAppManager.register(methodId, app, title, desc); + } + return ResponseObject.newOkResponse(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/cache/PALMethodCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/cache/PALMethodCache.java new file mode 100644 index 00000000..1a127e50 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/cache/PALMethodCache.java @@ -0,0 +1,194 @@ +package com.actionsoft.apps.coe.pal.pal.method.cache; + +import java.util.*; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.lifecycle.api.AppsAPIManager; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.apps.coe.pal.pal.method.constant.PALMethodConst; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.i18n.I18nRes; +import com.alibaba.fastjson.JSONObject; + +/** + * PALMethodModel缓存 + * + * @author zhouxuan + * + */ +public class PALMethodCache { + private static Map pmppMap = new LinkedHashMap<>(); + private static String basicTpl; + + public static String getBasicTpl() { + if (basicTpl == null) { + String path = AppsAPIManager.getInstance().getAppContext(CoEConstant.APP_ID).getPath() + PALMethodConst.DIR_ROOT_CONFIG; + UtilFile utilF = new UtilFile(path + "basic.tpl"); + basicTpl = utilF.readStrUTF8(); + } + return basicTpl; + } + + @SuppressWarnings("rawtypes") + private static Map temp = new LinkedHashMap<>(); + + public static Map getPALMethodModelMap() { + return pmppMap; + } + + /** + * 根据methodId获取PALMethodModel + * + * @param methodId + * @return PALMethodModel对象 + */ + public static PALMethodModel getPALMethodModelById(String methodId) { + return pmppMap.get(methodId); + } + + /** + * 根据method获取PALMethodModel 如 method="process"; + * + * @param method + * @return PALMethodModel对象 + */ + @SuppressWarnings("unchecked") + public static List getPALMethodModelListByMethod(String method) { + if (true) { + // if (temp.get(method) == null) { + List list = new ArrayList(); + Iterator iterator = pmppMap.keySet().iterator(); + while (iterator.hasNext()) { + String k = iterator.next(); + if (k.startsWith(method)) { + list.add(pmppMap.get(k)); + } + } + temp.put(method, list); + } + return temp.get(method); + } + + /** + * 获取存在的Method + * + * @return + */ + @SuppressWarnings("unchecked") + public static List getPALMethodList() { + String key = "PALMethodModelList"; + if (true) { + // if (temp.get(key) == null) { + List list = new ArrayList(); + Map map = new HashMap(); + Iterator iterator = pmppMap.keySet().iterator(); + while (iterator.hasNext()) { + String k = iterator.next(); + String tempKey = k.substring(0, k.indexOf(".")); + if (map.get(tempKey) == null) { + map.put(tempKey, ""); + } + } + iterator = map.keySet().iterator(); + while (iterator.hasNext()) { + list.add(iterator.next()); + } + temp.put(key, list); + } + return temp.get(key); + } + + /** + * 获取存在的method + * @param sort 是否按照process,org,data,itsystem,control在前,自定义大类在后 + * @return + */ + public static List getPALMethodList(boolean sort) { + List list = PALMethodCache.getPALMethodList(); + if (!sort) { + return list; + } else { + List result = new ArrayList<>(); + String[] methodArray = new String[] { "process", "org", "data", "itsystem", "control" }; + for (String method : methodArray) { + if (list.contains(method)) { + result.add(method); + } + } + for (String str : list) { + if (!result.contains(str)) { + result.add(str); + } + } + return result; + } + } + + /** + * 查询小组权限范围内的建模大类 + * @param teamId + * @param userId + * @param sort + * @return + */ + public static List getPalMehtodList(String teamId, String userId, boolean sort) { + List methodList = PALMethodCache.getPALMethodList(sort); + if (UtilString.isNotEmpty(teamId)) { + List permMethodList = new ArrayList<>(); + List versionIds = CoeCooperationAPIManager.getInstance().queryCooperationRoleDataPermByTeamUser(teamId, userId); + for (String verId : versionIds) { + List verModels = PALRepositoryCache.getByVersionId(verId); + if (verModels != null && verModels.size() > 0 && !permMethodList.contains(verModels.get(0).getMethodCategory())) { + permMethodList.add(verModels.get(0).getMethodCategory()); + } + } + List tempList = new ArrayList<>(); + for (String methodId : methodList) { + if (permMethodList.contains(methodId)) { + tempList.add(methodId); + } + } + methodList = tempList; + } + return methodList; + } + + /** + * 查询小组权限范围内的建模大类 + * @param teamId + * @param userId + * @param sort + * @return + */ + public static List getPalMehtodList(String teamId, String userId, boolean isUse, boolean isPublish, boolean sort) { + List methodList = PALMethodCache.getPALMethodList(sort); + if (UtilString.isNotEmpty(teamId)) { + List permMethodList = new ArrayList<>(); + List versionIds = CoeCooperationAPIManager.getInstance().queryCooperationRoleDataPermByTeamUser(teamId, userId); + for (String verId : versionIds) { + List verModels = PALRepositoryCache.getByVersionId(verId); + if (verModels != null && verModels.size() > 0 && !permMethodList.contains(verModels.get(0).getMethodCategory())) { + for (PALRepositoryModel m : verModels) { + if ((isUse && m.isUse()) || (isPublish && m.isPublish())) { + permMethodList.add(verModels.get(0).getMethodCategory()); + } + } + } + } + List tempList = new ArrayList<>(); + for (String methodId : methodList) { + if (permMethodList.contains(methodId)) { + tempList.add(methodId); + } + } + methodList = tempList; + } + return methodList; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/cache/PALMethodTemplateCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/cache/PALMethodTemplateCache.java new file mode 100644 index 00000000..7d18992f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/cache/PALMethodTemplateCache.java @@ -0,0 +1,45 @@ +package com.actionsoft.apps.coe.pal.pal.method.cache; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodTemplateModel; + +public class PALMethodTemplateCache { + private static Map templateMap = new HashMap(); + private static Map> methodTemplateMap = new HashMap>(); + + public static void put(List models) { + if (models != null) { + for (PALMethodTemplateModel model : models) { + getCache().put(model.getId(), model); + String methodId = model.getMethodId(); + List list = methodTemplateMap.get(methodId); + if (list == null) { + list = new ArrayList(); + } + if (!list.contains(model)) { + list.add(model); + } + methodTemplateMap.put(methodId, list); + } + } + } + + /** + * 根据methodId获取模板列表 + * + * @param methodId + * @return + * @author zhangming + */ + public static List getByMethodId(String methodId) { + return methodTemplateMap.get(methodId); + } + + public static Map getCache() { + return templateMap; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/constant/PALMethodConst.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/constant/PALMethodConst.java new file mode 100644 index 00000000..a7bf7cd2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/constant/PALMethodConst.java @@ -0,0 +1,62 @@ +package com.actionsoft.apps.coe.pal.pal.method.constant; + +public interface PALMethodConst { + + // -------------------------------------------- + // 插件资源 + // -------------------------------------------- + + /** + * CoE Method插件类App的私有资源文件夹相对路径,存放建模方法的各种配置资源 + */ + public final static String DIR_ROOT_CONFIG = "method/"; + + /** + * 作图片段模版文件夹相对路径 + */ + public final static String DIR_FRAGMENT_CONFIG = "fragment/"; + + /** + * Attribute特性配置文件相对路径 + */ + public final static String FILE_ATTRIBUTE_CONFIG = "diagram.attribute.xml"; + /** + * Attribute特性自定义配置文件相对路径 + */ + public final static String FILE_ATTRIBUTE_CUSTOM_CONFIG = "diagram.attribute.custom.xml"; + + /** + * 连线上下文配置文件相对路径 + */ + public final static String FILE_LINKER_CONFIG = "diagram.linker.xml"; + + /** + * 作图Schema配置文件相对路径 + */ + public final static String FILE_SCHEMA_CONFIG = "diagram.schema.tpl"; + + /** + * 关联methodId配置 + */ + public final static String FILE_IMPORT_CONFIG = "diagram.import.xml"; + + /** + * 用户自定义的Schema配置文件 + */ + public final static String FILE_SCHEMA_CUSTOM_CONFIG = "diagram.schema.custom.tpl"; + + /** + * 模板文件夹相对路径 + */ + public final static String DIR_TEMPLATE_CONFIG = "template/"; + + /** + * epc的AppId + */ + public final static String APP_PROCESS_EPC = "com.actionsoft.apps.coe.method.process.epc"; + + /** + * flowchart的AppId + */ + public final static String APP_PROCESS_FLOWCHART = "com.actionsoft.apps.coe.method.process.flowchart"; +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/extend/MethodAppManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/extend/MethodAppManager.java new file mode 100644 index 00000000..84f3e80d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/extend/MethodAppManager.java @@ -0,0 +1,495 @@ +package com.actionsoft.apps.coe.pal.pal.method.extend; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodTemplateCache; +import com.actionsoft.apps.coe.pal.pal.method.constant.PALMethodConst; +import com.actionsoft.apps.coe.pal.pal.method.model.*; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryAttributeDao; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryShapeAttributeDao; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryAttributeModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; +import com.actionsoft.apps.coe.pal.system.util.XMLUtil; +import com.actionsoft.apps.lifecycle.log.AppsLogger; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.bpms.util.Base64; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; +import org.dom4j.Attribute; +import org.dom4j.Document; +import org.dom4j.Element; + +import java.io.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 注册和管理PAL流程资产库的一些建模扩展应用 + * @author sunlh + * @date 2020-04-07 + * + */ +public class MethodAppManager { + + private static List _list = new ArrayList<>(); + + /** + * 注册PAL关联应用 + * 默认注册非文件夹类型建模方法 + * @param appContext + */ + public static void register(String methodId, AppContext appContext, String title, String desc) { + register(methodId, appContext, title, desc, false); + } + + /** + * 注册PAL关联应用 + * @param methodId + * @param appContext + * @param title + * @param desc + * @param isFolder 是否文件夹类型建模方法,文件夹类型建模方法只有数据属性,无形状定义、连线关系等 + */ + public static void register(String methodId, AppContext appContext, String title, String desc, boolean isFolder) { + if (!new File(appContext.getPath() + PALMethodConst.DIR_ROOT_CONFIG).exists()) { + AppsLogger.err(appContext, "不合规的PAL建模插件应用,没有发现method文件夹"); + } + MethodAppProfile profile = createProfile(methodId, appContext, title, desc); + boolean isUpdate = false; + int i = 0; + for (i = 0; i < _list.size(); i++) { + MethodAppProfile p = _list.get(i); + if (p.getAppContext().getId().equals(profile.getAppContext().getId()) && p.getMethodId().equals(profile.getMethodId())) { + isUpdate = true; + SDK.getAppAPI().info(SDK.getAppAPI().getAppContext(CoEConstant.APP_ID), "扩展App[" + profile.getAppContext().getNameI18N() + "]重新被注册"); + break; + } + } + if (!isUpdate) { + _list.add(profile); + SDK.getAppAPI().info(SDK.getAppAPI().getAppContext(CoEConstant.APP_ID), "扩展App[" + profile.getAppContext().getNameI18N() + "]注册成功"); + } else { + _list.remove(i); + _list.add(profile); + } + + // 处理建模方法 + PALMethodModel palMethodModel = new PALMethodModel(); + palMethodModel.setId(methodId); + palMethodModel.setAttributes(loadAttributeByApp(appContext, methodId)); + palMethodModel.setGroup(loadAttributeGroupByApp(appContext, methodId)); + palMethodModel.setLinker(loadLinkerByApp(appContext, methodId)); + palMethodModel.setSchema(loadSchemaByApp(appContext, methodId)); + palMethodModel.setCustomSchema(loadCustomSchemaByApp(appContext, methodId)); + palMethodModel.setImports(loadImportByApp(appContext, methodId)); + palMethodModel.setApp(appContext); + palMethodModel.setSpecialAttribute(loadSpecialAttributeByApp(appContext, methodId)); + palMethodModel.setFolder(isFolder); + PALMethodCache.getPALMethodModelMap().put(methodId, palMethodModel); + + List templateModelList = loadTemplatesByApp(appContext, methodId); + PALMethodTemplateCache.put(templateModelList); + } + + private static MethodAppProfile createProfile(String methodId, AppContext appContext, String title, String desc) { + MethodAppProfile profile = new MethodAppProfile(); + profile.setTitle(title); + profile.setDesc(desc); + profile.setAppContext(appContext); + profile.setMethodId(methodId); + return profile; + } + + /** + * 读diagram.attribute.xml配置到内存模型,如果文件存在 + * 只读取标签specialAttribute内容 + * @param app + * @param methodId + * @return + * @author sunlh + */ + private static List loadSpecialAttributeByApp(AppContext app, String methodId) { + List list = new ArrayList(); + String path = app.getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_ATTRIBUTE_CONFIG; + File file = new File(path); + if (file.exists()) { + Document readXML = XMLUtil.readXML(path); + List elements = readXML.getRootElement().elements("specialAttribute"); + int count = elements.size(); + for (int i = 0; i < count; i++) { + Element e = elements.get(i); + PALMethodSpecialAttributeModel pam = new PALMethodSpecialAttributeModel(); + pam.setKey(e.attributeValue("key")); + pam.setTitle(e.attributeValue("title")); + pam.setType(e.attributeValue("type")); + pam.setValue(e.attributeValue("value")); + pam.setName(e.attributeValue("name")); + pam.setWidth(e.attributeValue("width")); + pam.setApp(app); + pam.setLastModified(file.lastModified()); + list.add(pam); + } + } + return list; + } + + /** + * 读diagram.attribute.xml配置到内存模型,如果文件存在 + * + * @param app + * @param methodId + * @author jack + */ + private static List loadAttributeByApp(AppContext app, String methodId) { + List list = new ArrayList(); + String path = app.getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_ATTRIBUTE_CONFIG; + String customerPath = app.getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_ATTRIBUTE_CUSTOM_CONFIG; + File file = new File(path); + if (file.exists()) { + Document readXML = XMLUtil.readXML(path); + List elements = readXML.getRootElement().elements("attribute"); + //处理为xml中的每个属性添加isValid属性配置 + handleXmlAttrAddIsValid(readXML, elements, path); + //对比自定义xml来添加和替换elements中的元素 + handleCustomerXml(customerPath, elements); + + int count = elements.size(); + for (int i = 0; i < count; i++) { + Element e = elements.get(i); + PALMethodAttributeModel pam = new PALMethodAttributeModel(); + pam.setKey(e.attributeValue("key")); + pam.setTitle(e.attributeValue("title")); + pam.setType(e.attributeValue("type")); + pam.setValue(e.attributeValue("value")); + pam.setRef(e.attributeValue("ref")); + pam.setGroupPath(e.attributeValue("groupPath")); + pam.setScope(e.attributeValue("scope")); + pam.setApp(app); + pam.setLastModified(file.lastModified()); + pam.setReadonly(e.attributeValue("readonly").equals("true")); + pam.setIsValid(e.attributeValue("isValid").equals("true")); + pam.setBpmFileShow(e.attributeValue("bpmFileShow") != null && e.attributeValue("bpmFileShow").equals("true")); + pam.setBpmShapeShow(e.attributeValue("bpmShapeShow") != null && e.attributeValue("bpmShapeShow").equals("true")); + pam.setIsRequired(e.attributeValue("isRequired")==null ? false: e.attributeValue("isRequired").equals("true")); + pam.setDesc(e.attributeValue("desc")==null?"":e.attributeValue("desc")); + list.add(pam); + } + } + return list; + } + + /** + * 为xml中的每个属性添加isValid属性配置并写入xml中 + * + * @param elements + */ + private static void handleXmlAttrAddIsValid(Document document, List elements, String path) { + //判断是否xml中已经添加了isValid属性 + Element e = elements.get(0); + if (e.attribute("isValid") != null) { + return; + } + elements.forEach(element -> element.addAttribute("isValid", "true")); + //重新写入xml + XMLUtil.writeXml(document, path); + } + + /** + * 处理自定义xml来添加和替换elements中的元素 + * + * @param path + * @param elements + */ + private static void handleCustomerXml(String path, List elements) { + File file = new File(path); + if (!file.exists()) { + return; + } + Document document = XMLUtil.readXML(path); + List listElement = document.getRootElement().elements("attribute"); + //与elements合并 + for (Element e : listElement) { + List attrs = e.attributes(); + int index = -1; + //elements中存在的属性 + for (int i = 0; i < elements.size(); i++) { + if (elements.get(i).attributeValue("key").equals(e.attributeValue("key"))) { + // 删除原来的属性 + elements.remove(i); + index = i; + break; + } + } + // 追加自定义的属性 + if (index != -1) { + elements.add(index, (Element) e.clone()); + } else { + elements.add((Element) e.clone()); + } + } + } + + /** + * 读diagram.attribute.xml配置到内存模型,如果文件存在 + * + * @param app + * @param methodId + * @author jack + */ + private static List loadAttributeGroupByApp(AppContext app, String methodId) { + List list = new ArrayList(); + String path = app.getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_ATTRIBUTE_CONFIG; + File file = new File(path); + if (file.exists()) { + Document readXML = XMLUtil.readXML(path); + List elements = readXML.getRootElement().elements("group"); + int count = elements.size(); + for (int i = 0; i < count; i++) { + Element e = elements.get(i); + PALMethodAttributeGroupModel pagm = new PALMethodAttributeGroupModel(); + pagm.setName(e.attributeValue("name")); + pagm.setParentName(e.attributeValue("parentName")); + pagm.setDesc(e.attributeValue("desc")); + pagm.setApp(app); + pagm.setLastModified(file.lastModified()); + list.add(pagm); + } + } + return list; + } + + /** + * 读diagram.linker.xml配置到内存模型,如果文件存在 + * + * @param app + * @param methodId + * @author jack + */ + private static List loadLinkerByApp(AppContext app, String methodId) { + List list = new ArrayList(); + String path = app.getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_LINKER_CONFIG; + File file = new File(path); + if (file.exists()) { + Document readXML = XMLUtil.readXML(path); + List elements = readXML.getRootElement().elements("concept"); + int count = elements.size(); + for (int i = 0; i < count; i++) { + Element e = elements.get(i); + PALMethodLinkerModel pmlm = new PALMethodLinkerModel(); + pmlm.setMethodId(methodId); + pmlm.setConceptCode(e.attributeValue("conceptCode")); + pmlm.setFromShapeId(e.attributeValue("fromShapeId")); + pmlm.setToShapeId(e.attributeValue("toShapeId")); + pmlm.setOutcomingName(e.attributeValue("outcomingName")); + pmlm.setIncomingName(e.attributeValue("incomingName")); + pmlm.setApp(app); + pmlm.setLastModified(file.lastModified()); + list.add(pmlm); + } + } + return list; + } + + /** + * 读diagram.schema.tpl配置到内存模型,如果文件存在 + * + * @param app + * @param methodId + * @author jack + */ + private static String loadSchemaByApp(AppContext app, String methodId) { + String path = app.getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_SCHEMA_CONFIG; + String schema = ""; + File file = new File(path); + if (file.exists()) { + StringBuffer sb = new StringBuffer(); + BufferedReader reader = null; + try { + reader = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8")); + String line; + while ((line = reader.readLine()) != null) { + sb.append(line + " \t\n"); + } + schema = sb.toString(); + } catch (Exception e) { + e.printStackTrace(); + return ""; + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + return schema; + } + + /** + * 读diagram.schema.custom.tpl配置到内存模型,如果文件存在 + * + * @param app + * @param methodId + * @author jack + */ + private static String loadCustomSchemaByApp(AppContext app, String methodId) { + String path = app.getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_SCHEMA_CUSTOM_CONFIG; + String schema = ""; + File file = new File(path); + if (file.exists()) { + StringBuffer sb = new StringBuffer(); + BufferedReader reader = null; + try { + reader = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8")); + String line; + while ((line = reader.readLine()) != null) { + sb.append(line + " \t\n"); + } + schema = sb.toString(); + } catch (Exception e) { + e.printStackTrace(); + return ""; + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + return schema; + } + + private static String loadImportByApp(AppContext app, String methodId) { + StringBuffer imports = new StringBuffer(); + String path = app.getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_IMPORT_CONFIG; + File file = new File(path); + if (file.exists()) { + Document readXML = XMLUtil.readXML(path); + List elements = readXML.getRootElement().elements("import"); + int count = elements.size(); + for (int i = 0; i < count; i++) { + Element e = elements.get(i); + if (i == count - 1) { + imports.append(e.attributeValue("methodId")); + break; + } + imports.append(e.attributeValue("methodId")).append(","); + } + } + return imports.toString(); + } + + /** + * 读fragment文件夹下的配置到内存模型,如果文件存在 + * + * @param app + * @param methodId + * @author jack + */ + private static void loadFragmentByApp(AppContext app, String methodId) { + // @todo call xml dao to cache + } + + /** + * 读template文件夹下的模板信息到内容中 + * + * @param app + * @param methodId + * @return + * @author zhangming + */ + private static List loadTemplatesByApp(AppContext app, String methodId) { + List list = new ArrayList(); + //模板文件夹路径 + String templateDirPath = app.getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.DIR_TEMPLATE_CONFIG; + File dir = new File(templateDirPath); + if (dir.exists()) { + File[] fileDirs = dir.listFiles(); + if (fileDirs != null && fileDirs.length > 0) { + for (File fileDir : fileDirs) { + if (fileDir.isDirectory() && !fileDir.getName().contains(".svn")) { + PALMethodTemplateModel templateModel = new PALMethodTemplateModel(); + String name = fileDir.getName(); + templateModel.setName(name); + templateModel.setMethodId(methodId); + templateModel.setId(methodId + "_" + name); + //流程定义文件 + UtilFile defineFile = new UtilFile(templateDirPath + name + "/" + name); + String defileStr = defineFile.readStrUTF8(); + JSONObject define = JSONObject.parseObject(defileStr); + templateModel.setDefine(define); + //流程缩略图 + UtilFile diagramFile = new UtilFile(templateDirPath + name + "/" + name + ".small.png"); + byte[] base64Bytes = Base64.encode(diagramFile.readBytes()); + String diagram = ""; + try { + diagram = "data:image/png;base64," + new String(base64Bytes, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + templateModel.setSmallDiagram(diagram); + list.add(templateModel); + } + } + } + } + + return list; + } + + /** + * 销毁一个Method插件配置 + * + * @param app + * @param profile + * @return + * @author jack + */ + public static boolean destory(AppContext app, MethodAppProfile profile) { + destoryByApp(app, profile.getMethodId()); + _list.remove(profile); + return true; + } + + public static boolean destory(String methodId) { + destoryByApp(null, methodId); + for (int i = 0; i < _list.size(); i++) { + if (methodId.equals(_list.get(i).getMethodId())) { + _list.remove(i); + break; + } + } + return true; + } + + /** + * 销毁所有建模方法,停用时调用 + * @return + */ + public static boolean destoryAll() { + _list.clear(); + return true; + } + + /** + * 将与某App相关的Method模型从内存清除 + * + * @param app + * @param methodId + * @author jack + */ + private static void destoryByApp(AppContext app, String methodId) { + PALMethodCache.getPALMethodModelMap().remove(methodId); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/extend/MethodAppProfile.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/extend/MethodAppProfile.java new file mode 100644 index 00000000..067f1da7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/extend/MethodAppProfile.java @@ -0,0 +1,56 @@ +package com.actionsoft.apps.coe.pal.pal.method.extend; + +import com.actionsoft.apps.resource.AppContext; + +/** + * PAL建模方法扩展应用描述 + * @author sunlh + * @date 2020-04-07 + * + */ +public class MethodAppProfile { + + private String title; + + private String desc; + + private String methodId; + + private AppContext appContext; + + public MethodAppProfile() { + + } + + public String getMethodId() { + return methodId; + } + + public void setMethodId(String methodId) { + this.methodId = methodId; + } + + public AppContext getAppContext() { + return appContext; + } + + public void setAppContext(AppContext appContext) { + this.appContext = appContext; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodAttributeGroupModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodAttributeGroupModel.java new file mode 100644 index 00000000..b7b5f175 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodAttributeGroupModel.java @@ -0,0 +1,88 @@ +package com.actionsoft.apps.coe.pal.pal.method.model; + +import com.actionsoft.apps.resource.AppContext; + +/** + * 分组定义 + * + * @author jack + * + */ +public final class PALMethodAttributeGroupModel { + private AppContext app;// 哪个App提供的 + private Long lastModified;// xml最后修改日期,用于scanner扫描更新 + private String name;// 组名称 + private String parentName;// 上级组名称,若根此处可空 + private String desc;// 简要说明 + + /** + * 组名称 + * + * @return + */ + final public String getName() { + return name; + } + + final public void setName(String name) { + this.name = name; + } + + /** + * 上级组名称,若根此处为空 + * + * @return + */ + final public String getParentName() { + return parentName; + } + + final public void setParentName(String parentName) { + this.parentName = parentName; + } + + /** + * 简要说明 + * + * @return + */ + final public String getDesc() { + return desc; + } + + final public void setDesc(String desc) { + this.desc = desc; + } + + /** + * 该定义由哪个App提供 + * + * @return + */ + final public AppContext getApp() { + return app; + } + + final public void setApp(AppContext app) { + this.app = app; + } + + /** + * 最后一次读配置文件到内存的文件时间搓 + * + * @return + */ + final public Long getLastModified() { + return lastModified; + } + + final public void setLastModified(Long lastModified) { + this.lastModified = lastModified; + } + + @Override + public String toString() { + return "PALMethodAttributeGroupModel [app=" + app + ", lastModified=" + lastModified + ", name=" + name + ", parentName=" + parentName + ", desc=" + desc + "]"; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodAttributeModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodAttributeModel.java new file mode 100644 index 00000000..137fe1db --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodAttributeModel.java @@ -0,0 +1,240 @@ +package com.actionsoft.apps.coe.pal.pal.method.model; + +import com.actionsoft.apps.resource.AppContext; + +/** + * 扩展特性定义 + * + * @author jack + * + */ +public final class PALMethodAttributeModel implements Cloneable { + private AppContext app;// 哪个App提供的 + private Long lastModified;// xml最后修改日期,用于scanner扫描更新 + private String key;// 全局唯一标识名 + private String title;// 属性标题 + private String type;// 属性类型,支持string,number,boolean,list,relation,select + private String value;// 默认值 + private String ref;// 当type=list时,参考值 + private Boolean readonly;// 是否只读 + private String groupPath;// 特性绑定在哪个组别上 + private String scope;// 应用范围(methodId、methodId.shapeId),多个用逗号隔开 + //新增两个属性isValid和sort + private Boolean isValid; + private String sort; + //增加判断属性是否使用 + private Boolean isUse; + //修改之后属性新的title + private String newTitle; + //是否在bpm平台显示,只有bpmn流程有该属性 + private Boolean bpmFileShow;// 文件属性上显示 + private Boolean bpmShapeShow;// 形状属性上显示 + + //新增两个属性desc和isRequired + private String desc; + private boolean isRequired; + + /** + * 该定义由哪个App提供 + * + * @return + */ + final public AppContext getApp() { + return app; + } + + final public void setApp(AppContext app) { + this.app = app; + } + + /** + * 最后一次读配置文件到内存的文件时间搓 + * + * @return + */ + final public Long getLastModified() { + return lastModified; + } + + final public void setLastModified(Long lastModified) { + this.lastModified = lastModified; + } + + /** + * 全局唯一标识名 + * + * @return + */ + final public String getKey() { + return key; + } + + final public void setKey(String key) { + this.key = key; + } + + /** + * 属性标题 + * + * @return + */ + final public String getTitle() { + return title; + } + + final public void setTitle(String title) { + this.title = title; + } + + /** + * 属性类型,支持string,number,boolean,list,link + * + * @return + */ + final public String getType() { + return type; + } + + final public void setType(String type) { + this.type = type; + } + + /** + * 默认值 + * + * @return + */ + final public String getValue() { + return value; + } + + final public void setValue(String value) { + this.value = value; + } + + /** + * 当type=list时,参考值 + * + * @return + */ + final public String getRef() { + return ref; + } + + final public void setRef(String ref) { + this.ref = ref; + } + + /** + * 是否只读 + * + * @return + */ + final public Boolean getReadonly() { + return readonly; + } + + final public void setReadonly(Boolean readonly) { + this.readonly = readonly; + } + + /** + * 特性绑定在哪个组别上 + * + * @return + */ + final public String getGroupPath() { + return groupPath; + } + + final public void setGroupPath(String groupPath) { + this.groupPath = groupPath; + } + + /** + * 应用范围(methodId、methodId.shapeId),多个用逗号隔开 + * + * @return + */ + final public String getScope() { + return scope; + } + + final public void setScope(String scope) { + this.scope = scope; + } + + final public Boolean getIsValid() { + return isValid; + } + + final public void setIsValid(Boolean isValid) { + this.isValid = isValid; + } + + final public String getSort() { + return sort; + } + + final public void setSort(String sort) { + this.sort = sort; + } + + final public Boolean getUse() { + return isUse; + } + + final public void setUse(Boolean use) { + isUse = use; + } + + final public String getNewTitle() { + return newTitle; + } + + final public void setNewTitle(String newTitle) { + this.newTitle = newTitle; + } + + final public Boolean getBpmFileShow() { + return bpmFileShow == null ? false : bpmFileShow; + } + + final public void setBpmFileShow(Boolean bpmFileShow) { + this.bpmFileShow = bpmFileShow; + } + + final public Boolean getBpmShapeShow() { + return bpmShapeShow == null ? false : bpmShapeShow; + } + + final public void setBpmShapeShow(Boolean bpmShapeShow) { + this.bpmShapeShow = bpmShapeShow; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public boolean getIsRequired() { + return isRequired; + } + + public void setIsRequired(boolean required) { + isRequired = required; + } + + //深度复制 + public PALMethodAttributeModel clone() { + try { + return (PALMethodAttributeModel)super.clone(); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodJsonModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodJsonModel.java new file mode 100644 index 00000000..1013e6c6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodJsonModel.java @@ -0,0 +1,84 @@ +package com.actionsoft.apps.coe.pal.pal.method.model; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; + +/** + * 用于json数据传输 + * + * @author zhouxuan + */ +public class PALMethodJsonModel { + private String id; + private String name; + private boolean open = false; + private String url; + private String icon = "../apps/" + CoEConstant.APP_ID + "/img/method/16.png"; + private String plCategory; + private boolean menu = true ; + private boolean nocheck = true; + public boolean isNocheck() { + return nocheck; + } + + public void setNocheck(boolean nocheck) { + this.nocheck = nocheck; + } + + public boolean isMenu() { + return menu; + } + + public void setMenu(boolean menu) { + this.menu = menu; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.plCategory = id; + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getPlCategory() { + return plCategory; + } + + public void setPlCategory(String plCategory) { + this.plCategory = plCategory; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodLinkerModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodLinkerModel.java new file mode 100644 index 00000000..b1dd098c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodLinkerModel.java @@ -0,0 +1,124 @@ +package com.actionsoft.apps.coe.pal.pal.method.model; + +import com.actionsoft.apps.resource.AppContext; + +/** + * 连线上下文定义 + * + * @author jack + * + */ +public final class PALMethodLinkerModel { + private AppContext app;// 哪个App提供的 + private Long lastModified;// xml最后修改日期,用于scanner扫描更新 + private String methodId;// 建模方法标识,这是一个隐形属性,读上级目录 + private String conceptCode;// 代码,methodId+conceptCode的组合不允许重复 + private String fromShapeId;// 从哪些形状连出时,多个ShapeId用逗号隔开 + private String toShapeId;// 连接到哪些形状连出时,多个ShapeId用逗号隔开 + private String outcomingName;// 连出对象主动名称,用于提示给用户和生成文档 + private String incomingName;// 连入对象被动名称,用于提示给用户和生成文档 + + /** + * 建模方法标识,这是一个隐形属性,读上级目录 + * + * @return + */ + public String getMethodId() { + return methodId; + } + + public void setMethodId(String methodId) { + this.methodId = methodId; + } + + /** + * 代码,methodId+conceptCode的组合不允许重复 + * + * @return + */ + public String getConceptCode() { + return conceptCode; + } + + public void setConceptCode(String conceptCode) { + this.conceptCode = conceptCode; + } + + /** + * 从哪些形状连出时,多个ShapeId用逗号隔开 + * + * @return + */ + public String getFromShapeId() { + return fromShapeId; + } + + public void setFromShapeId(String fromShapeId) { + this.fromShapeId = fromShapeId; + } + + /** + * 连接到哪些形状连出时,多个ShapeId用逗号隔开 + * + * @return + */ + public String getToShapeId() { + return toShapeId; + } + + public void setToShapeId(String toShapeId) { + this.toShapeId = toShapeId; + } + + /** + * 连出对象主动名称,用于提示给用户和生成文档 + * + * @return + */ + public String getOutcomingName() { + return outcomingName; + } + + public void setOutcomingName(String outcomingName) { + this.outcomingName = outcomingName; + } + + /** + * 连入对象被动名称,用于提示给用户和生成文档 + * + * @return + */ + public String getIncomingName() { + return incomingName; + } + + public void setIncomingName(String incomingName) { + this.incomingName = incomingName; + } + + /** + * 该定义由哪个App提供 + * + * @return + */ + final public AppContext getApp() { + return app; + } + + final public void setApp(AppContext app) { + this.app = app; + } + + /** + * 最后一次读配置文件到内存的文件时间搓 + * + * @return + */ + final public Long getLastModified() { + return lastModified; + } + + final public void setLastModified(Long lastModified) { + this.lastModified = lastModified; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodModel.java new file mode 100644 index 00000000..53c1a8c4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodModel.java @@ -0,0 +1,148 @@ +package com.actionsoft.apps.coe.pal.pal.method.model; + +import java.util.ArrayList; +import java.util.List; + +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.alibaba.fastjson.JSONObject; + +/** + * 某个建模方法定义总入口 + * + * @author jack + * + */ +public final class PALMethodModel { + + private String id;// 全局唯一标识 + private String schema;// 名称 + private String customSchema; //add by zhangming 用户自定义Schema + private List linker;// 连线配置 + private List group;// 属性特性分组 + private List attributes;// 属性特性定义 + private AppContext app;// 哪个App提供的 + private String imports;// 关联的method,多个用之间,用逗号分割 + + private List specialAttribute;// 特殊的键值对类型属性 + private boolean isFolder;// 是否文件夹类型建模方法 + + final public String getId() { + return id; + } + + final public void setId(String id) { + this.id = id; + } + + /** + * 获得JS Schema片段 + * + * @return + * @author jack + */ + final public String getSchema() { + return schema; + } + + final public void setSchema(String schema) { + this.schema = schema; + } + + final public List getLinker() { + if (linker == null) + linker = new ArrayList(); + return linker; + } + + final public void setLinker(List linker) { + this.linker = linker; + } + + final public List getGroup() { + if (group == null) + group = new ArrayList(); + return group; + } + + final public void setGroup(List group) { + this.group = group; + } + + final public List getAttributes() { + if (attributes == null) + attributes = new ArrayList(); + return attributes; + } + + final public void setAttributes(List attributes) { + this.attributes = attributes; + } + + public AppContext getApp() { + return app; + } + + public void setApp(AppContext app) { + this.app = app; + } + + public String getImports() { + return imports; + } + + public void setImports(String imports) { + this.imports = imports; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + PALMethodModel other = (PALMethodModel) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + return true; + } + + public String getCustomSchema() { + return customSchema; + } + + public void setCustomSchema(String customSchema) { + this.customSchema = customSchema; + } + + final public List getSpecialAttribute() { + if (specialAttribute == null) + specialAttribute = new ArrayList(); + return specialAttribute; + } + + final public void setSpecialAttribute(List specialAttribute) { + this.specialAttribute = specialAttribute; + } + + public boolean isFolder() { + return isFolder; + } + + public void setFolder(boolean folder) { + isFolder = folder; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodSpecialAttributeModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodSpecialAttributeModel.java new file mode 100644 index 00000000..b362be3d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodSpecialAttributeModel.java @@ -0,0 +1,83 @@ +package com.actionsoft.apps.coe.pal.pal.method.model; + +import com.actionsoft.apps.resource.AppContext; + +/** + * 文件的特殊属性(例如表格) + * @author sunlh + * + */ +public final class PALMethodSpecialAttributeModel { + private AppContext app;// 哪个App提供的 + private Long lastModified;// xml最后修改日期,用于scanner扫描更新 + private String key;// 全局唯一标识名 + private String title;// 属性标题 + private String type;// 属性类型,支持string,number,boolean,list,relation,select + private String name;// 界面显示标题,多个标题逗号分隔 + private String value;// 标题的英文标识,多个逗号分隔 + private String width;// 该属性每列所占宽度比例,逗号分隔总和为1,必须是百分比形式 + + public AppContext getApp() { + return app; + } + public void setApp(AppContext app) { + this.app = app; + } + public Long getLastModified() { + return lastModified; + } + public void setLastModified(Long lastModified) { + this.lastModified = lastModified; + } + /** + * 全局唯一标识名 + * @return + */ + public String getKey() { + return key; + } + public void setKey(String key) { + this.key = key; + } + /** + * 属性标题 + * @return + */ + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getValue() { + return value; + } + public void setValue(String value) { + this.value = value; + } + public String getWidth() { + return width; + } + public void setWidth(String width) { + this.width = width; + } + + @Override + public String toString() { + return "PALMethodSpecialAttributeModel [key=" + key + ", title=" + title + ", type=" + type + ", name=" + name + + ", value=" + value + ", width=" + width + "]"; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodTemplateModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodTemplateModel.java new file mode 100644 index 00000000..4207e57e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/model/PALMethodTemplateModel.java @@ -0,0 +1,55 @@ +package com.actionsoft.apps.coe.pal.pal.method.model; + +import com.alibaba.fastjson.JSONObject; + +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; + +/** + * 建模方法模板类 + * + * @author zhangming + * @date 2015-3-24 + * @version 6.0 + * @description + */ +public class PALMethodTemplateModel extends PlatformMetaModelBean { + private static final long serialVersionUID = 1L; + + private String id; //methodId_name + private String name; //模板名称(模板文件名) + private String methodId; //模板所属方法 + private JSONObject define; //模板内容 + private String smallDiagram; //缩略图 + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getMethodId() { + return methodId; + } + public void setMethodId(String methodId) { + this.methodId = methodId; + } + public JSONObject getDefine() { + return define; + } + public void setDefine(JSONObject define) { + this.define = define; + } + public String getSmallDiagram() { + return smallDiagram; + } + public void setSmallDiagram(String smallDiagram) { + this.smallDiagram = smallDiagram; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/util/PALMethodUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/util/PALMethodUtil.java new file mode 100644 index 00000000..22174538 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/method/util/PALMethodUtil.java @@ -0,0 +1,289 @@ +package com.actionsoft.apps.coe.pal.pal.method.util; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.system.logger.CoeLogger; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; +import com.actionsoft.i18n.I18nRes; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public class PALMethodUtil { + private static Map> map = new HashMap>(); + + public static ArrayList getMoreShape(String methodId) { + return map.get(methodId); + } + + public static void putShape(String methodId1, String methodId2) { + ArrayList shapes = map.get(methodId1); + if (shapes == null) { + shapes = new ArrayList(); + map.put(methodId1, shapes); + } + shapes.add(methodId2); + } + + static { + load(); + } + + public static void load() { + // //1,EVC + // putShape("process.evc","basic"); + // putShape("process.evc","org.normal"); + // putShape("process.evc","product.normal"); + // putShape("process.evc","data.form"); + // putShape("process.evc","itsystem.normal"); + // putShape("process.evc","control.policy"); + // putShape("process.evc","control.risk"); + // putShape("process.evc","process.flowchart");//判断是否安装 + // + // //2,EPC + // putShape("process.epc","org.normal"); + // putShape("process.epc","data.form"); + // putShape("process.epc","control.policy"); + // putShape("process.epc","control.risk"); + // putShape("process.epc","itsystem.normal"); + // + // //3,normal + // putShape("org.normal","basic"); + // + // //4,product.normal + // putShape("product.normal","basic"); + // putShape("product.normal","org.normal"); + // + // //5,product.normal + // putShape("data.form","basic"); + // putShape("data.form","itsystem.normal"); + // + // //6,itsystem.normal + // putShape("itsystem.normal","basic"); + // putShape("itsystem.normal","data.form"); + // putShape("itsystem.normal","org.normal"); + // + // //7,control.policy + // putShape("control.policy","basic"); + // putShape("control.policy","data.form"); + // putShape("control.policy","org.normal"); + // + // //8,control.risk + // putShape("control.risk","basic"); + // putShape("control.risk","data.form"); + // putShape("control.risk","org.normal"); + + List palMethodList = PALMethodCache.getPALMethodList(); + for (String method : palMethodList) { + List palMethodModelListByMethod = PALMethodCache.getPALMethodModelListByMethod(method); + for (PALMethodModel plModel : palMethodModelListByMethod) { + String[] methodIds = plModel.getImports().split(","); + for (int i = 0, size = methodIds.length; i < size; i++) { + String methodId = methodIds[i]; + if ("".equals(methodId)) { + continue; + } + if ("basic".equals(methodId)) { + putShape(plModel.getId(), methodId); + continue; + } + PALMethodModel palMethodModelById = PALMethodCache.getPALMethodModelById(methodId); + if (palMethodModelById == null) { + continue; + } + putShape(plModel.getId(), palMethodModelById.getId());// 存入cache + } + } + } + } + + public static JSONArray getShapesData(String methodId, String methodIds) { + JSONArray shapeArray = new JSONArray(); + ArrayList moreShape = getMoreShape(methodId); + if (moreShape == null) { + return null; + } + Map> categories = new HashMap>(); + for (String shape : moreShape) { + String type = ""; + ArrayList cateList = null; + if (shape.indexOf(".") != -1) { + type = shape.substring(0, shape.indexOf(".")); + cateList = categories.get(type); + if (cateList == null) { + cateList = new ArrayList(); + categories.put(type, cateList); + } + } else { + type = shape; + cateList = new ArrayList(); + categories.put(type, cateList); + } + cateList.add(shape); + + } + Iterator types = categories.keySet().iterator(); + while (types.hasNext()) { + String type = types.next(); + ArrayList arrayList = categories.get(type); + if (arrayList.size() != 1) {// 分类 + JSONObject json = new JSONObject(); + String checked = methodIds.indexOf(type) != -1 ? "checked" : ""; + StringBuffer values = new StringBuffer(); + int len = 0; + for (String val : arrayList) { + if (++len == arrayList.size()) { + values.append(val); + break; + } + values.append(val).append(","); + } + json.put("attr", ""); + json.put("checked", checked); + json.put("value", values.toString()); + json.put("name", I18nRes.findValue(CoEConstant.APP_ID, type)); + + shapeArray.add(json); + } + for (String val : arrayList) { + JSONObject json = new JSONObject(); + String checked = methodIds.indexOf(val) != -1 ? "checked" : ""; + json.put("attr", arrayList.size() == 1 ? "" : "class=\"child\""); + json.put("checked", checked); + json.put("value", val); + json.put("name", I18nRes.findValue(CoEConstant.APP_ID, val)); + shapeArray.add(json); + } + } + + return shapeArray; + + } + + /** + * @param methodId + * @param selectMethodIds 选中的methodIds + * @return + */ + public static String getShapeDialog(String methodId, String selectMethodIds) { + StringBuffer dialog = new StringBuffer(); + // ui + String template = "
  • $name$
  • "; + JSONArray shapesData = getShapesData(methodId, selectMethodIds); + if (shapesData == null) { + return ""; + } + for (Object object : shapesData) { + JSONObject json = (JSONObject) object; + String li = template; + li = li.replace("$attr$", json.getString("attr")); + li = li.replace("$checked$", json.getString("checked")); + li = li.replace("$value$", json.getString("value")); + li = li.replace("$name$", json.getString("name")); + dialog.append(li).append("\t\n"); + } + + return dialog.toString(); + } + + public static void saveCustom(String methodId, String uuid, String methodIds) { + String key = "custom_" + methodId + "_" + uuid; + if (isOK(methodId, methodIds)) { + CoePropertyUtil.createProperty(key, methodIds); + return; + } + CoeLogger.err("保存用户的图片习惯失败"); + } + + public static String getCustom(String methodId, String uuid) { + String key = "custom_" + methodId + "_" + uuid; + String propertyValue = CoePropertyUtil.getPropertyValue(key); + if (propertyValue == null) { + return ""; + } + if ("".equals(propertyValue)) { + return ""; + } + if (isOK(methodId, propertyValue)) { + return propertyValue; + } + CoeLogger.err("获取用户的图片习惯失败"); + return ""; + } + + protected static boolean isOK(String methodId, String importMethodIds) { + boolean isOk = true; + ArrayList arrayList = map.get(methodId); + if (arrayList == null) { + return false; + } + Map cateMap = new HashMap(); + String[] importArray = importMethodIds.split(","); + for (String method : arrayList) { + cateMap.put(method, method); + } + for (int i = 0, size = importArray.length; i < size; i++) { + if ("".equals(importArray[i])) { + continue; + } + if (!cateMap.containsKey(importArray[i])) { + isOk = false; + break; + } + } + return isOk; + } + + /** + * 导入更多图形 + * + * @param methodId + * @return + */ + public static boolean haveImport(String methodId) { + ArrayList arrayList = map.get(methodId); + if (arrayList == null) { + return false; + } + if (arrayList.size() == 0) { + return false; + } + return true; + } + + /** + * 去掉重复的methodId + * + * @param categories + * @return + */ + public static List distinct(String categories) { + String[] cateArray = categories.split(","); + List cateList = Arrays.asList(cateArray); + Map cateMap = new HashMap(); + for (String cateStr : cateList) { + cateMap.put(cateStr, cateStr); + } + Iterator iterator = cateMap.keySet().iterator(); + cateList = new ArrayList(); + while (iterator.hasNext()) { + String cate = iterator.next(); + cateList.add(cate); + } + return cateList; + } + + public static void main(String[] args) { + // System.out.println(getShapeDialog("process.epc","basic")); + + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/OutPutReportWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/OutPutReportWeb.java new file mode 100644 index 00000000..9badeda0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/OutPutReportWeb.java @@ -0,0 +1,1419 @@ +package com.actionsoft.apps.coe.pal.pal.output; + +import java.io.File; +import java.math.BigDecimal; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.*; + + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.cooperation.model.CoeCooperationTeamModel; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.coe.pal.util.BpmOrgUtil; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; +import com.actionsoft.bpms.commons.htmlframework.AlertWindow; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.org.cache.RoleCache; +import com.actionsoft.bpms.org.model.RoleModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.server.DispatcherRequest; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.conf.portal.LanguageModel; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.dc.DCProfileManager; +import com.actionsoft.bpms.server.fs.dc.DCUtil; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilDate; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.output.dao.OutputTask; +import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppManager; +import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppProfile; +import com.actionsoft.apps.coe.pal.pal.output.model.OutputTaskModel; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.web.DesignerRelationShapeWeb; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.util.StringHandleUtil; +import com.actionsoft.exception.AWSException; +import com.actionsoft.i18n.I18nRes; +import com.actionsoft.sdk.local.SDK; +import com.actionsoft.sdk.local.api.ORGAPI; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Sets; + +/** + * 报告生成器web类 + * + * @author wangyh + *

    + * 2014年7月25日 + */ +public class OutPutReportWeb extends ActionWeb { + UserContext _uc; + + public OutPutReportWeb() { + } + + public OutPutReportWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + /** + * 报告生成器首页 + * + * @param wsId 流程id + * @return + */ + public String outPutReportHome(String wsId, String teamId) { + Map map = new HashMap(); + boolean isActive = PALRepositoryQueryAPIManager.getInstance().isActiveWorkSpace(wsId); + if (!isActive) { + return AlertWindow.getAuthorityMessagePage("资产库被停用", "资产库被停用,该小组无法访问流程发布功能,请联系系统管理员"); + } + if (UtilString.isNotEmpty(teamId)) { + CoeCooperationTeamModel team = CoeCooperationAPIManager.getInstance().queryCooperationTeamById(teamId, true); + if (team == null) { + return AlertWindow.getAuthorityMessagePage("小组查询失败", "小组不存在或已停用,该小组无法访问流程发布功能,请联系系统管理员"); + } + if (!team.getWsId().equals(wsId)) { + return AlertWindow.getAuthorityMessagePage("小组信息错误", "小组与对应的资产库信息不匹配,参数错误,请联系系统管理员"); + } + } + map.put("sid", getSessionId()); + List list = SDK.getPlatformAPI().getlanguages(); + StringBuilder sb = new StringBuilder(); + for (LanguageModel model : list) { + sb.append(""); + } + + // 获取应用参数 + String versionRange = SDK.getAppAPI().getProperty("com.actionsoft.apps.coe.pal.output", "VERSION_RANGE"); + if (versionRange == null || "".equals(versionRange.trim())) { + versionRange = ""; + } + map.put("versionRange", versionRange); + boolean shapeNumberSort = SDK.getAppAPI().getPropertyBooleanValue("com.actionsoft.apps.coe.pal.output", "SHAPE_NUMBER_SORT", true); + map.put("shapeNumberSort", shapeNumberSort); + + map.put("language", sb.toString()); + map.put("wsid", wsId); + map.put("userId", this.getContext().getUserModel().getUID()); + map.put("teamId", teamId); + map.put("totalPage", getCountTotal(wsId, teamId)); + String template = "pal.pl.repository.outputreport.htm"; + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_APPCENTER, CoEOpLogConst.OP_ACCESS, CoEOpLogConst.INFO_APPCENTER_ACCESS_PREFIX + SDK.getAppAPI().getAppContext("com.actionsoft.apps.coe.pal.output").getName() + CoEOpLogConst.INFO_APPCENTER_ACCESS_SUFFIX); + } + return HtmlPageTemplate.merge(CoEConstant.APP_ID, template, map); + } + + /** + * 拿到总的记录条数 + * + * @param wsId + * @param teamId + * @return + */ + public int getCountTotal(String wsId, String teamId) { + List listIds = OutputAppManager.getProfileName(""); + String profileId = getProfileId(listIds); + int count = getCount(teamId, wsId, "", profileId); + return count; + } + + /** + * 得到报告的数据 + * + * @param start  开始记录 + * @param limit   记录条数 + * @param wsid  流程库id + * @param teamId  小组id + * @param data  查询条件 + * @return string + */ + public String getTaskData(int start, int limit, String wsid, String teamId, String data) { + List listIds = OutputAppManager.getProfileName(data); + String profileId = getProfilesIds(listIds); + List list = new OutputTask().getTaskToList(start, limit, wsid, teamId, data, profileId); + StringBuilder sb = new StringBuilder(); + for (OutputTaskModel model : list) { + OutputAppProfile appFile = OutputAppManager.getProfile(model.getProfileId()); + if (appFile != null) { + if (SDK.getAppAPI().isActive(appFile.getAppContext().getId())) { + String td = resData(sb, model, teamId); + sb.append("" + td + ""); + } + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("html", sb.toString()); + return ro.toString(); + } + + private String getProfilesIds(List listIds) { + StringBuilder sb1 = new StringBuilder().append(""); + for (String str : listIds) { + sb1.append("'").append(str).append("',"); + } + String profileId = sb1.toString(); + if (profileId.lastIndexOf(",") > 0) { + profileId = profileId.substring(0, profileId.lastIndexOf(",")); + } + return profileId; + } + + /** + * 数据组装 + * + * @param sb + * @param model + */ + private String resData(StringBuilder sb, OutputTaskModel model, String teamId) { + OutputAppProfile appFile = OutputAppManager.getProfile(model.getProfileId()); + String reportTypeName = appFile.getTitle(); + ORGAPI org = SDK.getORGAPI(); + UserModel userModel = org.getUser(model.getUserId()); + String ownName = model.getUserId(); + if (userModel != null) { + ownName = userModel.getUserName(); + } + Timestamp endTime = model.getEndTime(); + String endTimeStr = ""; + String totalTimeS = "..."; + double totalTime = 0.00; + Timestamp begomTimeO = model.getBeginTime(); + if (endTime == null) { + } else { + endTimeStr = UtilDate.datetimeFormat(new Date(endTime.getTime())); + totalTime = (double) ((double) endTime.getTime() - (double) begomTimeO.getTime()) / 1000.00; + + BigDecimal b = new BigDecimal(totalTime); + totalTime = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + totalTimeS = totalTime + "s"; + } + + String beginTime = ""; + if (begomTimeO == null) { + } else { + beginTime = UtilDate.datetimeFormat(new Date(begomTimeO.getTime())); + } + int sta = model.getTaskState(); + String state = "失败"; + + String operate = "" + "" + ""; + if (sta == 0) { + state = "就绪"; + if (!"".equals(teamId)) { + operate = "" + ""; + } else { + operate = "" + ""; + } + } else if (sta == 1) { + state = "正在执行" + ""; + operate = ""; + } else if (sta == 2) { + operate = ""; + state = "成功"; + String clickFun = ""; + String buttonType = ""; + String cursorType = "default"; + if(appFile.getAppContext().getId().equals("com.actionsoft.apps.coe.pal.output.pr") && SDK.getAppAPI().isInstalled("com.actionsoft.apps.addons.onlinedoc") && SDK.getAppAPI().isActive("com.actionsoft.apps.addons.onlinedoc")) { + // if ("步骤横表".equals(reportTypeName) || "步骤竖表".equals(reportTypeName)) { + clickFun = "onclick=\"OutputReport.previewReport('" + model.getId() + "','" + appFile.getAppContext().getId() + "')\""; + buttonType = ""; + cursorType = "pointer"; + operate += ""+ buttonType + ""; + } + operate += "" + "" + "" + ""; + } + + Map params = new HashMap(); + String teamName = ""; + if (!UtilString.isEmpty(model.getTeamId())) { + teamName = getTeamName(model, params, teamName); + } + String qtip = ""; + if (endTime != null) { + qtip = beginTime + "
    " + endTimeStr; + } + String td = "" + StringHandleUtil.replaceSpecialChart(model.getTaskName()) + "" + "" + reportTypeName + "" + "" + teamName + "" + "" + ownName + " " + "" + totalTimeS + "" + "" + state + " " + "" + operate + ""; + if (!"".equals(teamId)) { + td = "" + StringHandleUtil.replaceSpecialChart(model.getTaskName()) + "" + reportTypeName + "" + "" + ownName + " " + "" + totalTimeS + "" + "" + state + " " + "" + operate + ""; + } + return td; + } + + /** + * 得到小组的名称 + * + * @param model + * @param params + * @param teamName + * @return + */ + private String getTeamName(OutputTaskModel model, Map params, String teamName) { + ResponseObject ro; + boolean active = CoeCooperationAPIManager.getInstance().isInstall(); + if (!active) { + return ""; + } + params.put("teamId", model.getTeamId()); + params.put("sid", _uc.getSessionId()); + CoeCooperationTeamModel team = CoeCooperationAPIManager.getInstance().queryCooperationTeamById(model.getTeamId()); + if (team != null) { + return team.getTeamName(); + } + return ""; + } + + /** + * 注册的App的生成的json数树 + * + * @param language + * @param templateOperate + * @return + */ + public String jsonData(String language, String templateOperate) { + // 多语言过滤, 暂时没有实现多语言 + if (!"cn".equals(language)) { + return ""; + } + List list = OutputAppManager.getList(); + JSONArray jsonArray = new JSONArray(); + + // 加载报告类型 + Map appMap = new HashMap(); + for (OutputAppProfile model : list) { + String appId = model.getAppContext().getId(); + appMap.put(appId.substring(appId.lastIndexOf(".") + 1), model); + } + String raciDataType = SDK.getAppAPI().getProperty("com.actionsoft.apps.coe.pal.output.raci", "raciDataType");// raci + if (raciDataType == null) { + raciDataType = "pal"; + } + String orDataType = SDK.getAppAPI().getProperty("com.actionsoft.apps.coe.pal.output.or", "orDataType");// or + if (orDataType == null) { + orDataType = "pal"; + } + for (Map.Entry entry : appMap.entrySet()) { + OutputAppProfile profile = entry.getValue(); + JSONObject json = new JSONObject(); + json.put("id", "output_" + entry.getKey()); + json.put("name", profile.getGroupName()); + json.put("open", true); + json.put("icon", "../apps/" + profile.getAppContext().getId() + "/img/parent16.png"); + jsonArray.add(json); + } + // 排序 pr or raci risk + if (jsonArray != null && !jsonArray.isEmpty()) { + JSONArray temp = new JSONArray(); + String [] arr = {"output_pr", "output_or", "output_raci", "output_risk"}; + for (int i = 0; i < arr.length; i++) { + for (int j = 0; j < jsonArray.size(); j++) { + if (arr[i].equals(jsonArray.getJSONObject(j).getString("id"))) { + temp.add(jsonArray.getJSONObject(j)); + } + } + } + List tempList = Arrays.asList(arr); + for (int j = 0; j < jsonArray.size(); j++) { + if (!tempList.contains(jsonArray.getJSONObject(j).getString("id"))) { + temp.add(jsonArray.getJSONObject(j)); + } + } + jsonArray = temp; + } + // 加载每种报告类型中的具体类型 + for (OutputAppProfile model : list) { + createJsonData(jsonArray, model); + } + Map map = new HashMap(); + map.put("sid", getSessionId()); + map.put("treeData", jsonArray.toString()); + map.put("raciDataType", raciDataType); + map.put("orDataType", orDataType); + map.put("templateOperate", UtilString.isEmpty(templateOperate) ? "0" : templateOperate); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.outputreport.tree.htm", map); + } + + private void createJsonData(JSONArray jsonArray, OutputAppProfile model) { + JSONObject json; + json = new JSONObject(); + json.put("id", model.getId()); + json.put("name", model.getTitle()); + json.put("groupName", model.getGroupName()); + String appId = model.getAppContext().getId(); + json.put("pid", "output_" + appId.substring(appId.lastIndexOf(".") + 1)); + json.put("targetMethodScope", model.getTargetMethodScope()); + json.put("targetMethodType", model.getTargetMethodType()); + json.put("relationMethodScope", model.getRelationMethodScope()); + json.put("lang", model.getLang()); + json.put("optionClass", model.getOptionClass()); + json.put("generClass", model.getGenerClass()); + json.put("icon", "../apps/" + model.getAppContext().getId() + "/img/icon16.png"); + json.put("isDownload", model.isDownload()); + json.put("templates", model.getTemplates()); + json.put("appId", model.getAppContext().getId()); + jsonArray.add(json); + } + + /** + * 限定范围树展开的数据 + * + * @param methodType 建模大类、建模方法,多个用逗号隔开,如果为空表示全部 + * @param wsid 流程id + * @param pid 父id + * @param versionType 版本类型 + * @return + */ + public String PALFileJsonData(String methodType, String wsid, String pid, String versionType, String teamId) { + List list = PALRepositoryQueryAPIManager.getInstance().getJsonToList(pid, wsid, super.getContext().getLanguage(), methodType); + JSONArray jsonArr = new JSONArray(); + for (JSONObject json : list) { + jsonArr.add(json); + } + return jsonArr.toString(); + } + + /** + * 限定范围树的根节点 + * + * @param methodType + * @param wsid + * @param versionType + * @param targetMethodType + * @return + */ + public String PALFileJsonDataRoot(String methodType, String wsid, String versionType, String teamId, String targetMethodType) { + Map map = new HashMap(); + map.put("sid", getSessionId()); + map.put("targetMethodType", targetMethodType == null ? "" : targetMethodType); + map.put("methodType", methodType); + map.put("wsid", wsid); + map.put("versionType", versionType); + map.put("wsid", wsid); + map.put("teamId", teamId); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.outputreport.pal.file.tree.htm", map); + } + + private String getSessionId() { + return this.getContext().getSessionId(); + } + + /** + * 获取有权限以及Methods限制的流程树 + * + * @param methodType + * @param wsid + * @param versionType + * @param teamId + * @return + */ + public String PALFileJsonDataRootTreeData(String methodType, String wsid, String versionType, String teamId) { + JSONArray jsonArr = null; + if (teamId == null || "".equals(teamId)) { + jsonArr = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryTreeData(_uc, wsid, methodType, versionType); + } else { + jsonArr = PALRepositoryQueryAPIManager.getInstance().getPermPalRepositoryTreeDataByMethods(_uc, wsid, teamId, versionType, methodType); + } + return jsonArr.toString(); + } + + /** + * 报告数据保存 + * + * @param lang  语言 + * @param taskName  任务名称 + * @param userId  操作人 + * @param teamId  小组id + * @param profileId  要生成的报告的appId + * @param wsId  流程库id + * @param isExecute  是否执行 + * @param config  配置的数据 + * @param targetFileId 限定范围的文件id + * @param targetShape 限定范围文件元素的id + * @param relationFileId  关联文件id + * @param isModify  是否修改 + * @param taskId 任务id + * @return + */ + public String reportSave(String lang, String taskName, String userId, String teamId, String profileId, String wsId, String isExecute, String config, String targetFileId, String targetShape, String relationFileId, String isModify, String taskId) { + OutputTaskModel model = null; + if ("true".equals(isModify)) { + OutputTask outTask = new OutputTask(); + model = outTask.queryById(taskId); + wsId = model.getWsId(); + setModel(lang, taskName, userId, teamId, profileId, wsId, model); + outTask.update(model); + } else { + model = createModel(lang, taskName, userId, teamId, profileId, wsId); + taskId = model.getId(); + new OutputTask().insert(model); + } + ResponseObject ro = null; + try { + // 保存配置的数据 + OutputAPIManager.getInstance().saveWizardJsonData(wsId, model.getId(), profileId, createJson(config, targetFileId, targetShape, relationFileId).toString()); + // 是否立即执行 + if ("Y".equals(isExecute)) { + OutputAPIManager.getInstance().startTask(model.getId(), _uc); + } + model = null; + + ro = createRes(true, wsId, teamId, taskId); + } catch (AWSException e) { + ro = createRes(false, wsId, teamId, taskId); + e.printStackTrace(System.err); + } + return ro.toString(); + } + + /** + * 报告数据保存 + * 使用Callable等待手册线程执行完 + * + * @param lang  语言 + * @param taskName  任务名称 + * @param userId  操作人 + * @param teamId  小组id + * @param profileId  要生成的报告的appId + * @param wsId  流程库id + * @param isExecute  是否执行 + * @param config  配置的数据 + * @param targetFileId 限定范围的文件id + * @param targetShape 限定范围文件元素的id + * @param relationFileId  关联文件id + * @param isModify  是否修改 + * @param taskId 任务id + * @return + */ + public String reportSaveByCallable(String lang, String taskName, String userId, String teamId, String profileId, String wsId, String isExecute, String config, String targetFileId, String targetShape, String relationFileId, String isModify, String taskId) { + OutputTaskModel model = null; + if ("true".equals(isModify)) { + OutputTask outTask = new OutputTask(); + model = outTask.queryById(taskId); + wsId = model.getWsId(); + setModel(lang, taskName, userId, teamId, profileId, wsId, model); + outTask.update(model); + } else { + model = createModel(lang, taskName, userId, teamId, profileId, wsId); + taskId = model.getId(); + new OutputTask().insert(model); + } + ResponseObject ro = null; + try { + // 保存配置的数据 + OutputAPIManager.getInstance().saveWizardJsonData(wsId, model.getId(), profileId, createJson(config, targetFileId, targetShape, relationFileId).toString()); + // 是否立即执行 + if ("Y".equals(isExecute)) { + ResponseObject r = OutputAPIManager.getInstance().startTaskAndReturnResult(model.getId(), _uc); + if (r.isErr()) { + throw new AWSException("流程手册创建失败"); + } + } + model = null; + + ro = createRes(true, wsId, teamId, taskId); + } catch (AWSException e) { + ro = createRes(false, wsId, teamId, taskId); + e.printStackTrace(System.err); + } + return ro.toString(); + } + + /** + * 存储的jsonData组装 + * + * @param config + * @param targetFileId + * @param targetShape + * @param relationFileId + * @return + */ + private JSONObject createJson(String config, String targetFileId, String targetShape, String relationFileId) { + JSONObject json = JSONObject.parseObject(config); + json.put("targetFileId", targetFileId); + json.put("targetShape", targetShape); + json.put("relationFileId", relationFileId); + return json; + } + + /** + * 返回对象组装 + * + * @param flag + * @param wsid + * @return + */ + @SuppressWarnings("deprecation") + private ResponseObject createRes(boolean flag, String wsid, String teamId, String taskId) { + ResponseObject ro = ResponseObject.newErrResponse(); + if (flag) { + JSONObject json = new JSONObject(); + ro = ResponseObject.newOkResponse(); + json.put("totalPage", getCountTotal(wsid, teamId)); + json.put("taskId", taskId); + ro.setData(json); + } else { + ro = ResponseObject.newErrResponse(); + } + return ro; + } + + /** + * 对象组装 + * + * @param lang + * @param taskName + * @param userId + * @param teamId + * @param profileId + * @param wsId + * @return + */ + private OutputTaskModel createModel(String lang, String taskName, String userId, String teamId, String profileId, String wsId) { + OutputTaskModel model = new OutputTaskModel(); + model.setCreateTime(new Timestamp(System.currentTimeMillis())); + model.setId(UUIDGener.getUUID()); + setModel(lang, taskName, userId, teamId, profileId, wsId, model); + return model; + } + + private void setModel(String lang, String taskName, String userId, String teamId, String profileId, String wsId, OutputTaskModel model) { + model.setLang(lang); + model.setProfileId(profileId); + if (model.getUserId() == null || "".equals(model.getUserId())) { + if (userId == null || "".equals(userId)) { + model.setUserId(_uc.getUID()); + } else { + model.setUserId(userId); + } + } + model.setTaskName(taskName); + model.setWsId(wsId); + model.setTeamId(teamId); + } + + /** + * 关联关系的tree数据 + * + * @param methodType  建模方法大类 + * @param wsid  流程库id + * @param versionType  版本id + * @param teamId  小组id + * @return + */ + public String PALFileRelationJsonDataRoot(String methodType, String wsid, String versionType, String teamId) { + JSONArray jsonArr = null; + if (teamId == null || "".equals(teamId)) { + jsonArr = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryTreeData(_uc, wsid, methodType, versionType); + } else { + jsonArr = PALRepositoryQueryAPIManager.getInstance().getPermPalRepositoryTreeDataByMethods(_uc, wsid, teamId, versionType, methodType); + } + // jsonArr = PALRepositoryQueryAPIManager.getInstance().getLimitPALTree(new JSONArray(), methodType, wsid, versionType); + Map map = new HashMap(); + map.put("sid", getSessionId()); + map.put("treeData", jsonArr.toString()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.outputreport.pal.file.relation.tree.htm", map); + } + + /** + * 根据teamId得到流程库的id + * + * @param teamId + * @return + */ + public String getWsIdByTeamId(String teamId) { + CoeCooperationTeamModel team = CoeCooperationAPIManager.getInstance().queryCooperationTeamById(teamId, true); + if (team != null) { + return team.getWsId(); + } + return null; + } + + /** + * 返回关联的json数据组tree + * + * @param methodType + * @param pid + * @param wsid + * @param versionType + * @param teamId + * @return + */ + public String PALFileRelationJsonData(String methodType, String pid, String wsid, String versionType, String teamId) { + List list = PALRepositoryQueryAPIManager.getInstance().getJsonToList(pid, wsid, super.getContext().getLanguage(), methodType); + JSONArray jsonArr = new JSONArray(); + for (JSONObject json : list) { + jsonArr.add(json); + } + return jsonArr.toString(); + } + + /** + * 报告删除 + * + * @param id + * @param wsid + * @param profileId + * @return + */ + public String reportDelete(String id, String wsid, String profileId, String teamId) { + ResponseObject ro = null; + //三员管理,流程文件密级switch开启,密级权限校验 + if (HighSecurityUtil.isON() && HighSecurityUtil.fileSecuritySwitch()){ + OutputTaskModel model = new OutputTask().getTaskReportById(id); + if (null != model){ + ResponseObject securityPermission = PALRepositoryQueryAPIManager.getInstance().checkOutputSecurityPermission(_uc, model); + if (securityPermission.isErr()){ + return securityPermission.toString(); + } + } + } + boolean flag = new OutputTask().delete(id, wsid); + if (flag) { + ro = isDeleteOk(id, wsid, profileId, teamId); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_APPCENTER, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_OUTPUT_DELETE); + } + } else { + ro = ResponseObject.newErrResponse(); + } + return ro.toString(); + } + + private ResponseObject isDeleteOk(String id, String wsid, String profileId, String teamId) { + ResponseObject ro; + try { + OutputAPIManager.getInstance().delFile(wsid, id, profileId); + } catch (AWSException e) { + e.printStackTrace(); + } + ro = ResponseObject.newOkResponse(); + JSONObject json = new JSONObject(); + json.put("totalPage", getCountTotal(wsid, teamId)); + ro.setData(json); + return ro; + } + + /** + * 报告统计 + * + * @param teamId  小组id + * @param wsid  流程库id + * @param data  查询条件 + * @return + */ + public String reportCount(String teamId, String wsid, String data) { + List listIds = OutputAppManager.getProfileName(data); + String profileId = getProfileId(listIds); + int count = getCount(teamId, wsid, data, profileId); + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject json = new JSONObject(); + json.put("count", count); + ro.setData(json); + return ro.toString(); + } + + private int getCount(String teamId, String wsid, String data, String profileId) { + return new OutputTask().getCount(wsid, teamId, data, profileId); + } + + private String getProfileId(List listIds) { + StringBuilder sb1 = new StringBuilder(); + for (String str : listIds) { + sb1.append("'").append(str).append("',"); + } + String profileId = sb1.toString(); + if (profileId.lastIndexOf(",") > 0) { + profileId = profileId.substring(0, profileId.lastIndexOf(",")); + } + return profileId; + } + + /** + * 执行报告 + * + * @param id  报告id + * @param wsid  流程库id + * @param profileId  生成报告的appId + * @return + */ + public String reportExecute(String id, String wsid, String profileId) { + try { + OutputAPIManager.getInstance().startTask(id, _uc); + } catch (AWSException e) { + e.printStackTrace(); + } + return ResponseObject.newOkResponse().toString(); + } + + /** + * 修改报告 + * + * @param id  任务id + * @return + */ + public String reportModify(String id) { + OutputTaskModel outputTaskModel = new OutputTask().queryById(id); + OutputAppProfile appProfile = OutputAppManager.getProfile(outputTaskModel.getProfileId()); + ResponseObject ro = ResponseObject.newErrResponse(); + try { + String wizardJsonData = OutputAPIManager.getInstance().getWizardJsonData(outputTaskModel.getWsId(), id, appProfile.getId()); + ro = modifyJsonData(outputTaskModel, wizardJsonData); + } catch (AWSException e) { + ro = ResponseObject.newErrResponse(); + e.printStackTrace(); + } + return ro.toString(); + } + + /** + * 修改时返回给页面的数据 + * + * @param outputTaskModel + * @param wizardJsonData + * @return + */ + private ResponseObject modifyJsonData(OutputTaskModel outputTaskModel, String wizardJsonData) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject json = JSONObject.parseObject(wizardJsonData); + json.put("reportName", outputTaskModel.getTaskName()); + json.put("taskId", outputTaskModel.getId()); + json.put("profileId", outputTaskModel.getProfileId()); + ro.setData(json); + return ro; + } + + /** + * 单个报告的刷新 + * + * @param id 报告的id + * @return + */ + public String refreshRowData(String id, String teamId) { + ResponseObject ro = null; + try { + ro = ResponseObject.newOkResponse(); + OutputTaskModel model = new OutputTask().getTaskReportById(id); + StringBuilder sb = new StringBuilder(); + JSONObject json = new JSONObject(); + json.put("tdContent", resData(sb, model, teamId)); + int state = model.getTaskState(); + json.put("taskState", state); + ro.setData(json); + return ro.toString(); + } catch (Exception e) { + e.printStackTrace(); + } + ro = ResponseObject.newErrResponse(); + return ro.toString(); + } + + /** + * 获得流程文件中的图形列表 + * + * @param id 流程文件Id + * @param type 要获得的图形的类型,“-”表示所有类型 + * @return + */ + public String getRepositoryShapes(String id, String type) { + ResponseObject ro = ResponseObject.newOkResponse(); + + boolean isShowTree = SDK.getAppAPI().getPropertyBooleanValue("com.actionsoft.apps.coe.pal.output", "OR_ORG_TREE", false); + if (!isShowTree) { + Set typeSet = new HashSet(); + String[] types = type.split(","); + for (String t : types) { + typeSet.add(t); + } + List> list = CoeDesignerUtil.getShapeMessageJson(id); // 指定流程文件内容 + + JSONArray jsonArray = new JSONArray(); + if (list != null) { + for (Map map : list) { + if (map.containsKey("type") && typeSet.contains((String) map.get("type"))) { + jsonArray.add(map); + } + } + } + ro.put("data", jsonArray); + ro.put("flag", 1); + } else { + String messageJson = PALRepositoryQueryAPIManager.getInstance().getProcessDefinition(null, id); + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + JSONArray array = ShapeUtil.getLinker(messageJson); + //第一步找出根节点 + JSONArray rootArray = new JSONArray(); + for (Map.Entry entry : elements.entrySet()) { + String key = entry.getKey(); + JSONObject shape = elements.getJSONObject(key); + if (!"linker".equals(shape.getString("name"))) { + boolean flag = true; + for (int i = 0; i < array.size(); i++) { + JSONObject tempObj = array.getJSONObject(i); + String toId = tempObj.getString("to"); + if (toId != null && toId.equals(key)) { + flag = false; + } + } + if (flag) { + rootArray.add(shape); + } + } + } + //第二步从根节点出发遍历子节点 + JSONArray resultArray = new JSONArray(); + for (int i = 0; i < rootArray.size(); i++) { + JSONObject shape = rootArray.getJSONObject(i); + JSONObject object = new JSONObject(); + Set shapeIds = Sets.newHashSet(); + shapeIds.add(shape.getString("id")); + object.put("id", i + 1); + object.put("name", shape.getString("text")); + object.put("shapeId", shape.getString("id")); + object.put("open", true); + resultArray.add(object); + getResultTree(shape, array, resultArray, i + 1, elements, shapeIds); + } + ro.put("data", JSONArray.toJSONString(resultArray)); + ro.put("flag", 2); + } + return ro.toString(); + } + + public JSONArray getResultTree(JSONObject shape, JSONArray array, JSONArray resultArray, int id, JSONObject elements, Set shapeIds) { + JSONArray tmpShapeArray = new JSONArray(); + for (int i = 0; i < array.size(); i++) { + JSONObject tmpObject = array.getJSONObject(i); + String tmpId = tmpObject.getString("to"); + if (tmpObject.getString("from").equals(shape.getString("id")) && tmpId != null && !shapeIds.contains(tmpId)) { + shapeIds.add(tmpId); + tmpShapeArray.add(elements.getJSONObject(tmpId)); + } + } + if (tmpShapeArray.size() == 0) { + return resultArray; + } + for (int j = 0; j < tmpShapeArray.size(); j++) { + JSONObject tmpShape = tmpShapeArray.getJSONObject(j); + JSONObject object = new JSONObject(); + int tmpId = id * 10 + j + 1; + object.put("id", tmpId); + object.put("pid", id); + object.put("name", tmpShape.getString("text")); + object.put("shapeId", tmpShape.getString("id")); + resultArray.add(object); + getResultTree(tmpShape, array, resultArray, tmpId, elements, shapeIds); + } + return resultArray; + } + + /** + * 根据appId获取相应的流程手册 + * @return + */ + public List getOutputAppByAppId(String appId) { + List list = OutputAppManager.getList(); + List newList = new ArrayList<>(); + for (OutputAppProfile model : list) { + if (appId.equals(model.getAppContext().getId())) { + newList.add(model); + } + } + return newList; + } + + /** + * 检测是否可以导出流程手册 + * @param fileId 流程id + * @return + */ + public String checkOutputProcess(String fileId) { + PALRepositoryModel pmodel = PALRepositoryCache.getCache().get(fileId); + if (pmodel == null) { + return ResponseObject.newErrResponse().toString(); + } + ResponseObject ro = ResponseObject.newOkResponse(); + List newList = new ArrayList<>(); + List list = OutputAppManager.getList(); + for (OutputAppProfile model : list) { + String appId = model.getAppContext().getId(); + if ("com.actionsoft.apps.coe.pal.output.pr".equals(appId) && model.getTargetMethodScope().contains(pmodel.getMethodId())) { + newList.add(model); + } + } + JSONArray array = new JSONArray(); + for (OutputAppProfile model : newList) { + com.alibaba.fastjson.JSONObject object = new com.alibaba.fastjson.JSONObject(); + object.put("id", model.getId()); + object.put("groupName", model.getGroupName()); + object.put("title", model.getTitle()); + array.add(object); + } + boolean shapeNumberSort = SDK.getAppAPI().getPropertyBooleanValue("com.actionsoft.apps.coe.pal.output", "SHAPE_NUMBER_SORT", true); + ro.put("shapeNumberSort", shapeNumberSort); + ro.put("data", array); + return ro.toString(); + } + + /** + * 报告生成器 + * raci关联awsorg相关 + * @param wsid + * @param teamId + * @param methodType + * @param targetMethodType + * @return + */ + public String getOutputreportAwsOrgPage(String wsid, String teamId, String methodType, String targetMethodType, String type) { + Map map = new HashMap(); + map.put("sid", getSessionId()); + map.put("targetMethodType", targetMethodType == null ? "" : targetMethodType); + map.put("methodType", methodType); + map.put("wsid", wsid); + map.put("teamId", teamId); + map.put("type", type); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.outputreport.pal.tree.aws.org.htm", map); + } + + /** + * 报告生成器 + * raci树结构(aws org) + * @param wsid + * @param teamId + * @param methodType + * @return + */ + public String getOutputreportAwsOrgTreeData(String wsid, String teamId, String methodType, String type) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray treeData = new JSONArray(); + // department,user,role,position + if (type.contains("department") && type.contains("user")) { + // 组织 + JSONObject org = new JSONObject(); + String orgRoot = "aws_node_org"; + org.put("id", orgRoot); + org.put("name", I18nRes.findValue(AppsConst.SYS_APP_PLATFORM, "组织")); + org.put("open", true); + org.put("nocheck", true); + org.put("type", "orgRoot"); + org.put("uuid", "orgRoot"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.ORG_ROOT_ICON_CODE); + iconFont.put("color", BpmOrgUtil.ORG_ROOT_ICON_COLOR); + org.put("iconFont", iconFont); + treeData.add(org); + // 单位/部门/人员 + JSONArray data = new JSONArray(); + getSubCompanyTreeNodeByOrgRoot(orgRoot, data); + for (int i = 0; i < data.size(); i++) { + treeData.add(data.get(i)); + } + } + if (type.contains("role")) { + // 岗位根目录 + JSONObject position = new JSONObject(); + String positionRoot = "aws_node_position"; + position.put("id", positionRoot); + position.put("name", I18nRes.findValue(AppsConst.SYS_APP_PLATFORM, "岗位")); + position.put("open", true); + position.put("nocheck", true); + position.put("type", "positionRoot"); + position.put("uuid", "positionRoot"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.POSITION_ROOT_ICON_CODE); + iconFont.put("color", BpmOrgUtil.POSITION_ROOT_ICON_COLOR); + position.put("iconFont", iconFont); + treeData.add(position); + // 岗位组/岗位 + JSONArray data2 = new JSONArray(); + getPositionTree(positionRoot, data2); + for (int i = 0; i < data2.size(); i++) { + treeData.add(data2.get(i)); + } + // 角色根目录 + JSONObject role = new JSONObject(); + String roleRoot = "aws_node_role"; + role.put("id", roleRoot); + role.put("name", I18nRes.findValue(AppsConst.SYS_APP_PLATFORM, "角色")); + role.put("open", false); + role.put("nocheck", true); + role.put("type", "roleRoot"); + role.put("uuid", "roleRoot"); + JSONObject iconFont2 = new JSONObject(); + iconFont2.put("code", BpmOrgUtil.ROLE_ROOT_ICON_CODE); + iconFont2.put("color", BpmOrgUtil.ROLE_ROOT_ICON_COLOR); + role.put("iconFont", iconFont2); + treeData.add(role); + // 角色组/角色 + JSONArray data3 = new JSONArray(); + getRoleTree(roleRoot, data3); + for (int i = 0; i < data3.size(); i++) { + treeData.add(data3.get(i)); + } + } + ro.put("data", treeData); + return ro.toString(); + } + + /** + * 获取岗位树 + * @return + */ + private void getPositionTree(String root, JSONArray data) { + String[] roleCategoryList = RoleCache.getCategoryNames(); + if (roleCategoryList != null && roleCategoryList.length > 0) { + for (String name : roleCategoryList) { + if (!UtilString.isEmpty(name)) { + JSONArray groupArr = new JSONArray(); + JSONObject obj = new JSONObject(); + // 获取岗位 + List roleList = SDK.getORGAPI().getRolesByCategory(name); + if (!isEmpty(roleList)) { + for (RoleModel model : roleList) { + if (model != null && model.getRoleType() == 1) { + JSONObject roleObj = new JSONObject(); + roleObj.put("id", "aws_node_position_" + model.getId()); + roleObj.put("pid", "aws_node_positionGroup_" + name); + roleObj.put("uuid", model.getId()); + roleObj.put("name", model.getName()); + roleObj.put("nocheck", false); + roleObj.put("type", "position"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.POSITION_ICON_CODE); + iconFont.put("color", BpmOrgUtil.POSITION_ICON_COLOR); + roleObj.put("iconFont", iconFont); + groupArr.add(roleObj); + } + } + } + if (groupArr.size() > 0) { + // 岗位组 + obj.put("id", "aws_node_positionGroup_" + name); + obj.put("pid", "aws_node_position"); + obj.put("uuid", name); + obj.put("name", name); + obj.put("nocheck", true); + obj.put("open", false); + obj.put("type", "positionGroup"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.POSITION_GROUP_ICON_CODE); + iconFont.put("color", BpmOrgUtil.POSITION_GROUP_ICON_COLOR); + obj.put("iconFont", iconFont); + groupArr.add(0, obj); + data.addAll(groupArr); + } + } + } + } + } + + /** + * 获取角色树 + * @return + */ + private void getRoleTree(String root, JSONArray data) { + String[] roleCategoryList = RoleCache.getCategoryNames(); + if (roleCategoryList != null && roleCategoryList.length > 0) { + for (String name : roleCategoryList) { + if (!UtilString.isEmpty(name)) { + JSONArray groupArr = new JSONArray(); + JSONObject obj = new JSONObject(); + // 获取角色 + List roleList = SDK.getORGAPI().getRolesByCategory(name); + if (!isEmpty(roleList)) { + for (RoleModel model : roleList) { + if (model != null && model.getRoleType() == 0) { + JSONObject roleObj = new JSONObject(); + roleObj.put("id", "aws_node_role_" + model.getId()); + roleObj.put("pid", "aws_node_roleGroup_" + name); + roleObj.put("uuid", model.getId()); + roleObj.put("name", model.getName()); + roleObj.put("nocheck", false); + roleObj.put("type", "role"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.ROLE_ICON_CODE); + iconFont.put("color", BpmOrgUtil.ROLE_ICON_COLOR); + roleObj.put("iconFont", iconFont); + groupArr.add(roleObj); + } + } + } + if (groupArr.size() > 0) { + // 岗位组 + obj.put("id", "aws_node_roleGroup_" + name); + obj.put("pid", "aws_node_role"); + obj.put("uuid", name); + obj.put("name", name); + obj.put("nocheck", true); + obj.put("open", false); + obj.put("type", "roleGroup"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.ROLE_GROUP_ICON_CODE); + iconFont.put("color", BpmOrgUtil.ROLE_GROUP_ICON_COLOR); + obj.put("iconFont", iconFont); + groupArr.add(0, obj); + data.addAll(groupArr); + } + } + } + } + } + + // 获取单位 + private void getSubCompanyTreeNodeByOrgRoot(String root, JSONArray data) { + DesignerRelationShapeWeb web = new DesignerRelationShapeWeb(_uc); + JSONArray tempArr = web.getCompanyTree();// 获取单位列表 + for (int i = 0; i < tempArr.size(); i++) { + JSONObject com = tempArr.getJSONObject(i); + data.add(com); + JSONArray deptArr = web.getDepartmentByCompany(com.getString("id"), com.getString("uuid"), "department,position,role,user", true);// 单位下第一级子部门 + for (int j = 0; j < deptArr.size(); j++) { + JSONObject dept = deptArr.getJSONObject(j); + data.add(dept); + // 部门下的子部门和用户 + getSubDepartmentAndUser(dept.getString("id"), dept.getString("uuid"), data, web); + } + } + } + + // 递归获取部门树结构子节点 + private void getSubDepartmentAndUser(String pid, String uuid, JSONArray data, DesignerRelationShapeWeb web) { + JSONArray temp = web.getDepartmentByParent(pid, uuid, "department,position,role,user", true);// 子部门和用户 + for (int i = 0; i < temp.size(); i++) { + JSONObject object = temp.getJSONObject(i); + data.add(object); + if ("department".equals(object.getString("type"))) { + getSubDepartmentAndUser(object.getString("id"), object.getString("uuid"), data, web); + } + } + } + + private boolean isEmpty(List list) { + return (list == null || list.size() == 0); + } + + private ResponseObject checkAppStatus(String appId) { + AppContext outputContext = SDK.getAppAPI().getAppContext("com.actionsoft.apps.coe.pal.output"); + if (outputContext == null) { + return ResponseObject.newErrResponse("未找到报告生成器应用"); + } + boolean isInstallOutput = SDK.getAppAPI().isInstalled(outputContext); + if (!isInstallOutput) { + return ResponseObject.newErrResponse("报告生成器应用未安装"); + } + boolean isActiveOutput = SDK.getAppAPI().isActive(outputContext); + if (!isActiveOutput) { + return ResponseObject.newErrResponse("报告生成器应用未启动"); + } + AppContext appContext = SDK.getAppAPI().getAppContext(appId); + if (appContext == null) { + return ResponseObject.newErrResponse("未找到该应用[appId=" + appId + "]"); + } + boolean isInstall = SDK.getAppAPI().isInstalled(appId); + if (!isInstall) { + return ResponseObject.newErrResponse(appContext.getName() + "应用未安装"); + } + boolean isActive = SDK.getAppAPI().isActive(appId); + if (!isActive) { + return ResponseObject.newErrResponse(appContext.getName() + "应用未启动"); + } + return ResponseObject.newOkResponse(); + } + + /** + * 流程报告模版下载 + * @param appId + * @param templates + * @return + */ + public String downloadOutPutReportTemplates(String appId, String templates) { + ResponseObject checkRo = checkAppStatus(appId); + if (checkRo.isErr()) { + return checkRo.toString(); + } + AppContext appContext = SDK.getAppAPI().getAppContext(appId); + String path = appContext.getPath(); + String msg = "模型为空无法下载,请联系系统管理员"; + if (UtilString.isEmpty(templates)) { + return ResponseObject.newErrResponse(msg).toString(); + } + ResponseObject ro = null; + // 查找对应应用下模版 + List files = new ArrayList<>(); + JSONArray templatesArr = JSONArray.parseArray(templates); + if (templatesArr == null || templatesArr.size() == 0) { + return ResponseObject.newErrResponse(msg).toString(); + } + for (Object object : templatesArr) { + String template = (String) object; + if (UtilString.isEmpty(template)) { + return ResponseObject.newErrResponse(msg).toString(); + } + UtilFile file = new UtilFile(path + File.separator + template); + if (file.exists()) { + files.add(file); + } + } + String outputAppId = CoEConstant.APP_ID; + String groupValue = "outputTemplate"; + String dirName = files.get(0).getName(); + dirName = dirName.substring(0, dirName.lastIndexOf(".")); + String fileValue = "download" + System.currentTimeMillis(); + + DCContext dcContext = DCUtil.createTempFileContext(outputAppId, groupValue, fileValue, null); + try { + for (UtilFile sourceFile : files) { + UtilFile.copyFile(sourceFile, new UtilFile(dcContext.getPath() + File.separator + sourceFile.getName())); + } + // 创建压缩包 + DCContext dcContext2 = DCUtil.createTempFileContext(outputAppId, groupValue, fileValue + "_zip", "zip"); + dcContext2.setFileName(dirName+ ".zip"); + File ff = new File(dcContext2.getFilePath()); + File f = new File(dcContext.getPath()); + UtilFile.zipCompress(f.getPath(), ff); + dcContext2.setSession(_uc); + ro = ResponseObject.newOkResponse(); + JSONObject json = new JSONObject(); + json.put("url", dcContext2.getDownloadURL()); + ro.setData(json); + return ro.toString(); + } catch (Exception e) { + e.printStackTrace(); + } + return ResponseObject.newErrResponse("下载失败").toString(); + } + + /** + * 上传模版 + * @param appId + * @param profileId + * @param param + * @return + */ + public String uploadOutPutReportTemplates(String appId, String profileId, String param) { + // 校验 + ResponseObject checkRo = checkAppStatus(appId); + if (checkRo.isErr()) { + return checkRo.toString(); + } + if (UtilString.isEmpty(param)) { + return ResponseObject.newErrResponse("上传失败,参数不能为空").toString(); + } + JSONObject paramObj = JSONObject.parseObject(param); + String repositoryName = paramObj.getString("repositoryName"); + String groupValue = paramObj.getString("groupValue"); + String fileValue = paramObj.getString("fileValue"); + String fileName = paramObj.getString("fileName"); + if (UtilString.isEmpty(repositoryName) || UtilString.isEmpty(groupValue) || UtilString.isEmpty(fileValue) || UtilString.isEmpty(fileName)) { + return ResponseObject.newErrResponse("上传失败,参数不能为空").toString(); + } + // 获取附件 + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, repositoryName); + if (dcProfile == null) { + return ResponseObject.newErrResponse("上传失败").toString(); + } + DCContext dcContext = new DCContext(_uc, dcProfile, CoEConstant.APP_ID, groupValue, fileValue, fileName); + File zipFile = new UtilFile(dcContext.getFilePath()); + File parentFile = new File(dcContext.getPath()); + // 解压 + UtilFile zipExpandFile = new UtilFile(parentFile + UtilFile.separator + "zipExpand"); + try { + UtilFile.removeFile(zipExpandFile); + zipExpandFile.mkdir(); + UtilFile.zipExpand(zipFile, zipExpandFile.getPath()); + } catch (Exception e) { + e.printStackTrace(); + throw new AWSException("文件解压失败"); + } + // 对比手册与上传文件是否一致,命名及数量 + File [] files = zipExpandFile.listFiles(); + if (files == null) { + return ResponseObject.newErrResponse("上传文件解压错误").toString(); + } + OutputAppProfile profile = OutputAppManager.getProfile(profileId); + if (!profile.isDownload()) { + return ResponseObject.newErrResponse("不支持上传下载模版操作").toString(); + } + String templates = profile.getTemplates(); + JSONArray templatesArr = JSONArray.parseArray(templates); + if (templatesArr == null || templatesArr.isEmpty()) { + return ResponseObject.newErrResponse("不支持上传下载模版操作").toString(); + } + List uploadFiles = new ArrayList<>(); + for (Object object : templatesArr) { + String name = (String) object; + for (File file : files) { + if (file.getName().equals(name)) { + uploadFiles.add(file); + } + } + } + if (uploadFiles.size() != templatesArr.size()) { + return ResponseObject.newErrResponse("请确认压缩文件中是否包含
    " + templatesArr.toString().replace("[", "").replace("]", "")).toString(); + } + // 创建logs + List historyFiles = new ArrayList<>(); + AppContext appContext = SDK.getAppAPI().getAppContext(appId); + String path = appContext.getPath(); + for (Object object : templatesArr) { + String template = (String) object; + UtilFile file = new UtilFile(path + File.separator + template); + if (!file.exists()) { + SDK.getLogAPI().consoleErr("应用[" + appContext.getName() + "]中缺失文件[" + file.getName() + "]"); + return ResponseObject.newErrResponse("服务器中文件缺失,请联系管理员").toString(); + } else { + historyFiles.add(file); + } + } + File logsFile = new File(appContext.getPath() + File.separator + "logs"); + if (!logsFile.exists() || !logsFile.isDirectory()) { + logsFile.mkdir(); + } + String logName = "log" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + File currLogFile = new File(logsFile, logName); + // 当前复制到历史记录 + if (!currLogFile.exists() || !currLogFile.isDirectory()) { + currLogFile.mkdir(); + } + try { + for (File file : historyFiles) { + UtilFile.copyFile(file, new File(currLogFile, file.getName())); + SDK.getLogAPI().consoleInfo("模型上传[复制模型-备份],从[" + file + "]复制至[" + new File(currLogFile, file.getName()) + "]成功"); + } + } catch (Exception e) { + e.printStackTrace(); + } + // 上传文件替换到当前使用中 + try { + for (File file : uploadFiles) { + UtilFile.copyFile(file, new File(appContext.getPath(), file.getName())); + SDK.getLogAPI().consoleInfo("模型上传[复制模型-上传],从[" + file + "]复制至[" + new File(appContext.getPath(), file.getName()) + "]成功"); + } + } catch (Exception e) { + e.printStackTrace(); + } + ResponseObject ro = ResponseObject.newOkResponse(); + return ro.toString(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/OutputAPIManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/OutputAPIManager.java new file mode 100644 index 00000000..009079d4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/OutputAPIManager.java @@ -0,0 +1,524 @@ +package com.actionsoft.apps.coe.pal.pal.output; +import java.io.FileInputStream; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.InputStream; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.FutureTask; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.util.ClassReflect; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.output.constant.OutputConst; +import com.actionsoft.apps.coe.pal.pal.output.dao.OutputTask; +import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppManager; +import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppProfile; +import com.actionsoft.apps.coe.pal.pal.output.model.OutputTaskModel; +import com.actionsoft.exception.AWSException; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSONObject; + +/** + * 报告生成器内部API封装 + * + * @author jack + * + */ +public class OutputAPIManager { + private static OutputAPIManager instance = new OutputAPIManager(); + + private OutputAPIManager() { + } + + public static OutputAPIManager getInstance() { + return instance; + } + + // -------------------任务保存/提取---------------------- + + /** + * 保存向导限定目标范围、限定关联范围、报告选项等非数据库持久的JSON数据串 + * + * @param wsId 资产库id + * @param id 任务Id + * @param profileId 报告生成器扩展App的配置Id + * @param jsonData 拼装的json数据串 + */ + public void saveWizardJsonData(String wsId, String id, String profileId, String jsonData) throws AWSException { + // --------app appProfile---------- + OutputAppProfile appProfile = OutputAppManager.getProfile(profileId); + if (appProfile == null) + throw new AWSException("Not Find OutputAppProfile! profileId=" + profileId); + // --------dc context----------- + DCPluginProfile dcProfile = SDK.getDCAPI().getDCProfile(appProfile.getAppContext().getId(), OutputConst.EXT_APP_DC_OUTPUT); + if (dcProfile == null) + throw new AWSException("Not Find DCProfile! repositoryName=" + OutputConst.EXT_APP_DC_OUTPUT); + DCContext dcContext = new DCContext(null, dcProfile, appProfile.getAppContext().getId(), wsId, id, OutputConst.FILE_WIZARD_CONFIG); + InputStream in = null; + try { + in = new ByteArrayInputStream(jsonData.getBytes("UTF-8")); + boolean isSave = SDK.getDCAPI().write(in, dcContext); + if (!isSave) { + throw new AWSException("Save Parameter Error!"); + } + } catch (Exception e) { + throw new AWSException(e); + } finally { + try { + if (in != null) + in.close(); + } catch (Exception e) { + } + } + } + + /** + * 删除文件 + * + * @param wsId 资产库id + * @param id 任务Id + * @param profileId 报告生成器扩展App的配置Id + * @throws AWSException + */ + public void delFile(String wsId, String id, String profileId) throws AWSException { + UtilFile file = getFilePath(wsId, id, profileId); + if (file.isDirectory()) { + File[] files = file.listFiles(); + for (File f : files) { + if (f.exists()) { + boolean flag = f.getAbsoluteFile().delete(); + } + } + file.delete(); + } + } + + /** + * 删除资产库时同时删除文件 + * + * @param wsid 资产库id + * @throws AWSException + */ + public void delTaskByWsid(String wsid) throws AWSException { + List list = new OutputTask().getTasksByWsid(wsid); + if (new OutputTask().delTaskByWsid(wsid)) { + String profileId = null; + for (OutputTaskModel model : list) { + profileId = model.getProfileId(); + delFile(wsid, model.getId(), model.getProfileId()); + } + if (profileId != null) { + delFile(wsid, "", profileId); + } + } + } + + /** + * 得到文件 + * + * @param wsId 资产库id + * @param id 任务Id + * @param profileId 报告生成器扩展App的配置Id + * @throws AWSException + */ + public UtilFile getFilePath(String wsId, String id, String profileId) throws AWSException { + OutputAppProfile appProfile = OutputAppManager.getProfile(profileId); + if (appProfile == null) + throw new AWSException("Not Find OutputAppProfile! profileId=" + profileId); + DCPluginProfile dcProfile = SDK.getDCAPI().getDCProfile(appProfile.getAppContext().getId(), OutputConst.EXT_APP_DC_OUTPUT); + if (dcProfile == null) + throw new AWSException("Not Find DCProfile! repositoryName=" + OutputConst.EXT_APP_DC_OUTPUT); + DCContext dcContext = new DCContext(null, dcProfile, appProfile.getAppContext().getId(), wsId, id); + UtilFile file = new UtilFile(dcContext.getPath()); + return file; + } + + /** + * 保存向导限定目标范围、限定关联范围、报告选项等非数据库持久的JSON数据串 + * + * @param wsId 资产库id + * @param id 任务Id + * @param profileId 报告生成器扩展App的配置Id + */ + public String getWizardJsonData(String wsId, String id, String profileId) throws AWSException { + // --------app appProfile---------- + OutputAppProfile appProfile = OutputAppManager.getProfile(profileId); + if (appProfile == null) + throw new AWSException("Not Find OutputAppProfile! profileId=" + profileId); + // --------dc context----------- + DCPluginProfile dcProfile = SDK.getDCAPI().getDCProfile(appProfile.getAppContext().getId(), OutputConst.EXT_APP_DC_OUTPUT); + if (dcProfile == null) + throw new AWSException("Not Find DCProfile! repositoryName=" + OutputConst.EXT_APP_DC_OUTPUT); + DCContext dcContext = new DCContext(null, dcProfile, appProfile.getAppContext().getId(), wsId, id, OutputConst.FILE_WIZARD_CONFIG); + File configFile = new File(dcContext.getFilePath()); + // 如果该配置还不存在,没有保存过 + if (!configFile.exists()) { + return ""; + } + InputStream in = null; + try { + //in = SDK.getDCAPI().read(dcContext); + in = new FileInputStream(configFile); + int b = -1; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + while((b=in.read())!=-1){ + baos.write(b); + } + return baos.toString("UTF-8"); + } catch (Exception e) { + throw new AWSException(e); + } finally { + try { + if (in != null) + in.close(); + } catch (Exception e) { + } + } + } + + // -------------------任务执行/操作---------------------- + + /** + * 克隆一个任务 + * + * @param userId 操作人账户 + * @param id 源任务id,必须是已执行完毕的 + * @throws AWSException + */ + public void cloneTask(String userId, String id) throws Exception { + OutputTaskModel outputTaskModel = new OutputTask().queryById(id); + if (outputTaskModel == null) + throw new AWSException("Not Find outputTask! id=" + id); + if (outputTaskModel.getTaskState() != OutputConst.TASK_STATE_SUCESS && outputTaskModel.getTaskState() != OutputConst.TASK_STATE_ERROR) + throw new AWSException("Task State is " + outputTaskModel.getTaskState() + ", Refuse to Clone!"); + OutputAppProfile appProfile = OutputAppManager.getProfile(outputTaskModel.getProfileId()); + if (appProfile == null) + throw new AWSException("Not Find OutputAppProfile! profileId=" + outputTaskModel.getProfileId()); + // --------dc context----------- + DCPluginProfile dcProfile = SDK.getDCAPI().getDCProfile(appProfile.getAppContext().getId(), OutputConst.EXT_APP_DC_OUTPUT); + if (dcProfile == null) + throw new AWSException("Not Find DCProfile! repositoryName=" + OutputConst.EXT_APP_DC_OUTPUT); + DCContext sourceDcContext = new DCContext(null, dcProfile, appProfile.getAppContext().getId(), outputTaskModel.getWsId(), id, OutputConst.FILE_WIZARD_CONFIG); + //判断源文件是否存在 + UtilFile sourceFile = new UtilFile(sourceDcContext.getFilePath()); + if (!sourceFile.exists()) { + throw new Exception("sourceFile not found"); + } + outputTaskModel.setId(UUIDGener.getUUID()); + outputTaskModel.setUserId(userId); + new OutputTask().insert(outputTaskModel); + // copy config.txt + DCContext targetDcContext = new DCContext(null, dcProfile, appProfile.getAppContext().getId(), outputTaskModel.getWsId(), outputTaskModel.getId(), OutputConst.FILE_WIZARD_CONFIG); + SDK.getDCAPI().copyDCFile(sourceDcContext, targetDcContext); + } + + /** + * 创建线程,执行报告生成任务 + * + * @param id + */ + public void startTask(String id, UserContext uc) throws AWSException { + OutputTaskModel outputTaskModel = new OutputTask().queryById(id); + if (outputTaskModel == null) + throw new AWSException("Not Find outputTask! id=" + id); + + if (outputTaskModel.getTaskState() != OutputConst.TASK_STATE_NONE) + throw new AWSException("Task State is " + outputTaskModel.getTaskState() + ", Refuse to Start!"); + + // --------app appProfile---------- + OutputAppProfile appProfile = OutputAppManager.getProfile(outputTaskModel.getProfileId()); + if (appProfile == null) + throw new AWSException("Not Find OutputAppProfile! profileId=" + outputTaskModel.getProfileId()); + String gennerClass = appProfile.getGenerClass(); + if (UtilString.isEmpty(gennerClass)) + throw new AWSException("OutputAppProfile 'gennerClass' is Null! AppName=" + appProfile.getTitle()); + + // --------dc context----------- + DCPluginProfile dcProfile = SDK.getDCAPI().getDCProfile(appProfile.getAppContext().getId(), OutputConst.EXT_APP_DC_OUTPUT); + if (dcProfile == null) + throw new AWSException("Not Find DCProfile! repositoryName=" + OutputConst.EXT_APP_DC_OUTPUT); + DCContext dcContext = new DCContext(uc, dcProfile, appProfile.getAppContext().getId(), outputTaskModel.getWsId(), id); + + // ---------config--------------- + String wizardJsonData = getWizardJsonData(outputTaskModel.getWsId(), id, appProfile.getId()); + /*JSONObject object = JSONObject.parseObject(wizardJsonData); + + String fileIds = object.getString("targetFileId"); + String [] arr = fileIds.split(","); + for (int i = 0; i < arr.length; i++) { + if("".equals(arr[i])) { + continue; + } + String newData = new String(wizardJsonData); + JSONObject object2 = JSONObject.parseObject(newData); + object2.put("targetFileId", arr[i]); + // start thread + GennerReport gener = new GennerReport(outputTaskModel, appProfile, dcContext, wizardJsonData); + + Thread signalThread = new Thread(gener); + signalThread.setName("CoE Output Report Genner-" + appProfile.getTitle() + "-" + outputTaskModel.getTaskName() + "-" + arr[i]); + signalThread.start(); + }*/ + + // start thread + GennerReport gener = new GennerReport(outputTaskModel, appProfile, dcContext, wizardJsonData); + + Thread signalThread = new Thread(gener); + signalThread.setName("CoE Output Report Genner-" + appProfile.getTitle() + "-" + outputTaskModel.getTaskName()); + signalThread.start(); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(uc, CoEOpLogConst.MODULE_CATEGORY_APPCENTER, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_OUTPUT_CREATE); + } + } + + /** + * 创建线程,执行报告生成任务 + * + * @param id + */ + public ResponseObject startTaskAndReturnResult(String id, UserContext uc) throws AWSException { + OutputTaskModel outputTaskModel = new OutputTask().queryById(id); + if (outputTaskModel == null) + throw new AWSException("Not Find outputTask! id=" + id); + + if (outputTaskModel.getTaskState() != OutputConst.TASK_STATE_NONE) + throw new AWSException("Task State is " + outputTaskModel.getTaskState() + ", Refuse to Start!"); + + // --------app appProfile---------- + OutputAppProfile appProfile = OutputAppManager.getProfile(outputTaskModel.getProfileId()); + if (appProfile == null) + throw new AWSException("Not Find OutputAppProfile! profileId=" + outputTaskModel.getProfileId()); + String gennerClass = appProfile.getGenerClass(); + if (UtilString.isEmpty(gennerClass)) + throw new AWSException("OutputAppProfile 'gennerClass' is Null! AppName=" + appProfile.getTitle()); + + // --------dc context----------- + DCPluginProfile dcProfile = SDK.getDCAPI().getDCProfile(appProfile.getAppContext().getId(), OutputConst.EXT_APP_DC_OUTPUT); + if (dcProfile == null) + throw new AWSException("Not Find DCProfile! repositoryName=" + OutputConst.EXT_APP_DC_OUTPUT); + DCContext dcContext = new DCContext(uc, dcProfile, appProfile.getAppContext().getId(), outputTaskModel.getWsId(), id); + + // ---------config--------------- + String wizardJsonData = getWizardJsonData(outputTaskModel.getWsId(), id, appProfile.getId()); + + CallableGennerReport gener = new CallableGennerReport(outputTaskModel, appProfile, dcContext, wizardJsonData); + FutureTask task = new FutureTask<>(gener); + Thread signalThread = new Thread(task); + signalThread.setName("CoE Output Report Genner-" + appProfile.getTitle() + "-" + outputTaskModel.getTaskName()); + signalThread.start(); + try { + return task.get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + return ResponseObject.newErrResponse(); + } + } + + /** + * 三员管理模式下,重新生成步骤横表手册 + * @param outputTaskModel + */ + public void reGennerReport(UserContext uc,OutputTaskModel outputTaskModel,String id){ + + if (outputTaskModel == null) + throw new AWSException("Not Find outputTask! "); + + // --------app appProfile---------- + OutputAppProfile appProfile = OutputAppManager.getProfile(outputTaskModel.getProfileId()); + if (appProfile == null) + throw new AWSException("Not Find OutputAppProfile! profileId=" + outputTaskModel.getProfileId()); + String gennerClass = appProfile.getGenerClass(); + if (UtilString.isEmpty(gennerClass)) + throw new AWSException("OutputAppProfile 'gennerClass' is Null! AppName=" + appProfile.getTitle()); + + // --------dc context----------- + DCPluginProfile dcProfile = SDK.getDCAPI().getDCProfile(appProfile.getAppContext().getId(), OutputConst.EXT_APP_DC_OUTPUT); + if (dcProfile == null) + throw new AWSException("Not Find DCProfile! repositoryName=" + OutputConst.EXT_APP_DC_OUTPUT); + DCContext dcContext = new DCContext(uc, dcProfile, appProfile.getAppContext().getId(), outputTaskModel.getWsId(), id); + + // ---------config--------------- + //获取原有config.txt的json + String wizardJsonData = getWizardJsonData(outputTaskModel.getWsId(), outputTaskModel.getId(), appProfile.getId()); + + // 根据原有config保存新的配置 + this.saveWizardJsonData(outputTaskModel.getWsId(), id, outputTaskModel.getProfileId(), wizardJsonData); + + //同步执行 + GennerReport gener = new GennerReport(outputTaskModel, appProfile, dcContext, wizardJsonData); + gener.run(); + } + + class CallableGennerReport implements Callable { + + private OutputTaskModel task; + private OutputAppProfile appProfile; + private DCContext dcContext; + private String wizardJsonData; + + public CallableGennerReport(OutputTaskModel task, OutputAppProfile appProfile, DCContext dcContext, String wizardJsonData) { + this.appProfile = appProfile; + this.task = task; + this.dcContext = dcContext; + this.wizardJsonData = wizardJsonData; + } + + @Override + public ResponseObject call() throws Exception { + Constructor cons = null; + try { + cons = ClassReflect.getConstructor(appProfile.getGenerClass(), null, appProfile.getAppContext()); + } catch (Exception e) { + e.printStackTrace(); + SDK.getAppAPI().err(appProfile.getAppContext(), appProfile.getGenerClass() + "--" + e.toString()); + return ResponseObject.newErrResponse(); + } + // 获得该接口实现类实例 + try { + Class generClass = appProfile.getAppContext().getBindClassLoader().loadClass(appProfile.getGenerClass()); + Object obj = cons.newInstance(); + Method execute = generClass.getMethod("execute", new Class[] { OutputTaskModel.class, String.class, DCContext.class }); + // 标记执行 + new OutputTask().updateRunning(task.getId()); + // 正式执行 + ResponseObject ro = (ResponseObject) execute.invoke(obj, new Object[] { task, wizardJsonData, dcContext }); + // 处理日志 + List logs = (List) ro.get("logs"); + if (logs != null && !logs.isEmpty()) { + StringBuilder sb = new StringBuilder(); + for (String msg : logs) { + sb.append(msg + (AWSServerConf.isLinuxOS() ? "" : "\r") + "\n"); + } + // 保存日志文件 + InputStream in = null; + try { + in = new ByteArrayInputStream(sb.toString().getBytes("UTF-8")); + dcContext.setFileName(OutputConst.FILE_TASK_LOG); + SDK.getDCAPI().write(in, dcContext); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (in != null) + in.close(); + } catch (Exception e) { + } + } + } + // 标记结束 + if (ro.isOk()) { + new OutputTask().updateSucess(task.getId()); + return ResponseObject.newOkResponse(); + } else { + new OutputTask().updateError(task.getId()); + return ResponseObject.newErrResponse(); + } + } catch (Exception e) { + e.printStackTrace(); + SDK.getAppAPI().err(appProfile.getAppContext(), appProfile.getGenerClass() + "--" + e.toString()); + return ResponseObject.newErrResponse(); + } + } + + } + + /** + * 得到限定范围的流程id + * + * @param wsId 资产库id + * @param id 任务Id + * @param profileId 报告生成器扩展App的配置Id + * @return + * @throws AWSException + */ + /* public String getargetFileIds(String wsId, String id, String profileId) + * throws AWSException { UtilFile file = new UtilFile(getFilePath(wsId, id, + * profileId) + "/" + OutputConst.FILE_WIZARD_CONFIG); if (file.exists()) { + * String config = file.readStr(); return + * JSONObject.fromObject(config).getString("targetFileId"); } return ""; } */ +} + +class GennerReport implements Runnable { + private OutputTaskModel task; + private OutputAppProfile appProfile; + private DCContext dcContext; + private String wizardJsonData; + + public GennerReport(OutputTaskModel task, OutputAppProfile appProfile, DCContext dcContext, String wizardJsonData) { + this.appProfile = appProfile; + this.task = task; + this.dcContext = dcContext; + this.wizardJsonData = wizardJsonData; + } + + public void run() { + Constructor cons = null; + try { + cons = ClassReflect.getConstructor(appProfile.getGenerClass(), null, appProfile.getAppContext()); + } catch (Exception e) { + e.printStackTrace(); + SDK.getAppAPI().err(appProfile.getAppContext(), appProfile.getGenerClass() + "--" + e.toString()); + } + if (cons != null) { + // 获得该接口实现类实例 + try { + Class generClass = appProfile.getAppContext().getBindClassLoader().loadClass(appProfile.getGenerClass()); + Object obj = cons.newInstance(); + Method execute = generClass.getMethod("execute", new Class[] { OutputTaskModel.class, String.class, DCContext.class }); + // 标记执行 + new OutputTask().updateRunning(task.getId()); + // 正式执行 + ResponseObject ro = (ResponseObject) execute.invoke(obj, new Object[] { task, wizardJsonData, dcContext }); + // 处理日志 + List logs = (List) ro.get("logs"); + if (logs != null && !logs.isEmpty()) { + StringBuilder sb = new StringBuilder(); + for (String msg : logs) { + sb.append(msg + (AWSServerConf.isLinuxOS() ? "" : "\r") + "\n"); + } + // 保存日志文件 + InputStream in = null; + try { + in = new ByteArrayInputStream(sb.toString().getBytes("UTF-8")); + dcContext.setFileName(OutputConst.FILE_TASK_LOG); + SDK.getDCAPI().write(in, dcContext); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (in != null) + in.close(); + } catch (Exception e) { + } + } + } + // 标记结束 + if (ro.isOk()) { + new OutputTask().updateSucess(task.getId()); + } else { + new OutputTask().updateError(task.getId()); + } + } catch (Exception e) { + e.printStackTrace(); + SDK.getAppAPI().err(appProfile.getAppContext(), appProfile.getGenerClass() + "--" + e.toString()); + } + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/OutputDataAPIManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/OutputDataAPIManager.java new file mode 100644 index 00000000..9dc3883a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/OutputDataAPIManager.java @@ -0,0 +1,136 @@ +package com.actionsoft.apps.coe.pal.pal.output; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.manage.CoeDesignerAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.i18n.I18nRes; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +/** + * 该类为报告生成器API类,主要用于获取生成报告所需的数据 + * + * @author zhangming + * @date 2015-4-10 + * @version 6.0 + * @description + */ + +public class OutputDataAPIManager { + /** + * 获得流程文件中的节点列表(不包含linker元素) + * + * @param repositoryId + * @return + * @author zhangming + */ + public static List> getFileElements(String repositoryId) { + PALRepositoryModel palModel = PALRepositoryCache.getCache().get(repositoryId); + List> list = CoeDesignerUtil.getShapeMessageJson(repositoryId); // 流程文件内容 + if (list != null) { + for (Map element : list) { + if (element == null || element.get("attributes") == null) { + continue; + } + element.put("shapeDesc", ""); + element.put("number", ""); + JSONObject attributes = (JSONObject) element.get("attributes"); + element.put("plCategory", I18nRes.findValue(CoEConstant.APP_ID, palModel.getMethodId())); + if (attributes.containsKey("attributesJsonArray")) { + JSONArray attr = attributes.getJSONArray("attributesJsonArray"); + for (int i = 0; i < attr.size(); i++) { + JSONObject attribute = JSONObject.parseObject(attr.getString(i)); + if (attribute != null && attribute.containsKey("value")) { + element.put(attribute.getString("id"), attribute); + if ("desc".equals(attribute.getString("id"))) { + element.put("shapeDesc", attribute.getString("value")); + } + if ("number".equals(attribute.getString("id"))) { + element.put("number", attribute.getString("value")); + } + } + } + } + } + } else { + list = new ArrayList>(); + } + return list; + } + + /** + * 获取模型中的所有节点(包括link) + * + * @param repositoryId + * @return + * @author zhangming + */ + public static JSONObject getFileAllElements(String repositoryId) { + JSONObject data = new JSONObject(); + BaseModel model = CoeDesignerAPIManager.getInstance().getDefinition(repositoryId, 0); + if (model == null) { + model = CoeDesignerUtil.createModel(repositoryId, 0); + } + String define = model.getDefinition(); + if (define == null || "".equals(define)) { + return data; + } + + JSONObject fileContent = JSONObject.parseObject(define); + if (fileContent.containsKey("elements")) { + data = JSONObject.parseObject(fileContent.getString("elements")); + } + + return data; + } + + /** + * 获得文件中某个图形作为主动关联的关联信息(图形A的属性信息为图形B,则A为主动关联,B为被动关联) + * + * @param shapeId 主动关联图形Id + * @param relationFileIds 被动关联文件Id(该字段为空,获取所有主动关联信息;多个被动关联文件,用逗号隔开) + * @author zhangming + */ + public static List getRelationInfoByShapeId(String fileId, String shapeId, String relationFileIds) { + List list = new ArrayList(); + Iterator relationModelIterator = DesignerShapeRelationCache.getByShapeId(fileId, shapeId); + while (relationModelIterator.hasNext()) { + DesignerShapeRelationModel model = relationModelIterator.next(); + if (relationFileIds == null || relationFileIds.equals("") || relationFileIds.contains(model.getRelationFileId())) { + list.add(model); + } + } + return list; + } + + /** + * 获得文件中某个图形作为被动关联的关联信息(图形A的属性信息为图形B,则A为主动关联,B为被动关联) + * + * @param relationShapeId 被动关联图形Id + * @param fileIds 主动关联文件Id(字段为空,获取所有被动关联信息;多个主动关联文件,用逗号隔开) + * @author zhangming + */ + public static List getRelationInfoByRelationShapeId(String relationFileId, String relationShapeId, String fileIds) { + List list = new ArrayList(); + Iterator relationModelIterator = DesignerShapeRelationCache.getByRelationShapeId(relationFileId, relationShapeId); + while (relationModelIterator.hasNext()) { + DesignerShapeRelationModel model = relationModelIterator.next(); + if (fileIds == null || fileIds.equals("") || fileIds.contains(model.getRelationFileId())) { + list.add(model); + } + } + return list; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/aslp/RegisterOutputApp.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/aslp/RegisterOutputApp.java new file mode 100644 index 00000000..dacccd17 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/aslp/RegisterOutputApp.java @@ -0,0 +1,49 @@ +package com.actionsoft.apps.coe.pal.pal.output.aslp; + +import java.util.Map; + +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppManager; + +/** + * 为报告生成器扩展App,通过该ASLP即可完成注册。推荐注册位置放在该App的启动后事件 + * + * @author jack + * + */ +public class RegisterOutputApp implements ASLP { + + @Override + public ResponseObject call(Map params) { + if (params == null) { + return ResponseObject.newErrResponse().err("不接受参数为空的调用!"); + } + if (!params.containsKey("optionClass")) { + return ResponseObject.newErrResponse().err("optionClass参数不允许为空!"); + } + if (!params.containsKey("generClass")) { + return ResponseObject.newErrResponse().err("generClass参数不允许为空!"); + } + if (!params.containsKey("lang")) { + return ResponseObject.newErrResponse().err("lang参数不允许为空!"); + } + AppContext app = (AppContext) params.get("caller"); + String title = (String) params.get("title"); + String optionClass = (String) params.get("optionClass"); + String targetMethodScope = (String) params.get("targetMethodScope"); + String targetMethodType = params.get("targetMethodType") == null ? "" : (String) params.get("targetMethodType"); + String relationMethodScope = (String) params.get("relationMethodScope"); + String lang = (String) params.get("lang"); + String generClass = (String) params.get("generClass"); + String groupName = (String) params.get("groupName"); + // 上传下载模型的处理 + boolean isDownload = params.containsKey("isDownload") ? (boolean)params.get("isDownload") : false; + String templates = params.containsKey("templates") ? (String)params.get("templates") : null; + + OutputAppManager.register(app, groupName, title, targetMethodScope, targetMethodType, relationMethodScope, lang, optionClass, generClass, isDownload, templates); + return ResponseObject.newOkResponse(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/constant/OutputConst.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/constant/OutputConst.java new file mode 100644 index 00000000..a1b1a883 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/constant/OutputConst.java @@ -0,0 +1,39 @@ +package com.actionsoft.apps.coe.pal.pal.output.constant; + +public interface OutputConst { + + /** + * 就绪,等待执行(如创建但未勾选执行、克隆) + */ + public static int TASK_STATE_NONE = 0; + + /** + * 正在执行中 + */ + public static int TASK_STATE_RUNNING = 1; + + /** + * 成功 + */ + public static int TASK_STATE_SUCESS = 2; + + /** + * 失败 + */ + public static int TASK_STATE_ERROR = 3; + + /** + * 生成器向导配置文件 + */ + public static String FILE_WIZARD_CONFIG = "config.txt"; + + /** + * 生成器创建的日志文件 + */ + public static String FILE_TASK_LOG = "report.log"; + + /** + * 约定扩展app存放生成报告、配置、日志的文件仓库名 + */ + public static String EXT_APP_DC_OUTPUT = "output"; +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/dao/OutputTask.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/dao/OutputTask.java new file mode 100644 index 00000000..c3addfc2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/dao/OutputTask.java @@ -0,0 +1,282 @@ +package com.actionsoft.apps.coe.pal.pal.output.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.commons.pagination.SQLPagination; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.output.constant.OutputConst; +import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppManager; +import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppProfile; +import com.actionsoft.apps.coe.pal.pal.output.model.OutputTaskModel; +import com.actionsoft.apps.coe.pal.system.util.StringUtil; +import com.actionsoft.exception.AWSDataAccessException; +import com.actionsoft.sdk.local.SDK; + +/** + * 由报告生成器生成文档输出任务 + * + * @author jack + * + */ +public final class OutputTask extends DaoObject { + + public OutputTask() { + } + + @Override + public int insert(OutputTaskModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) + model.setId(UUIDGener.getUUID()); + String sql = "INSERT INTO " + entityName() + "(ID,TEAMID,WSID,PROFILEID,TASKNAME,USERID,CREATETIME,TASKSTATE,LANG)VALUES(:ID,:TEAMID,:WSID,:PROFILEID,:TASKNAME,:USERID,:CREATETIME,:TASKSTATE,:LANG)"; + Map paraMap = new HashMap<>(); + setInsertValue(model, paraMap); + return DBSql.update(sql, paraMap); + } + + private void setInsertValue(OutputTaskModel model, Map paraMap) { + paraMap.put("ID", model.getId()); + paraMap.put("TEAMID", model.getTeamId()); + paraMap.put("WSID", model.getWsId()); + paraMap.put("USERID", model.getUserId()); + paraMap.put("CREATETIME", new Timestamp(System.currentTimeMillis())); + paraMap.put("TASKSTATE", OutputConst.TASK_STATE_NONE); + paraMap.put("PROFILEID", model.getProfileId()); + paraMap.put("TASKNAME", model.getTaskName()); + paraMap.put("LANG", model.getLang()); + } + + /** + * 执行前,标记 + * + * @param id 任务Id + * @throws AWSDataAccessException + */ + public void updateRunning(String id) throws AWSDataAccessException { + String threadInfo = Thread.currentThread().getId() + ":" + AWSServerConf.getInstanceName(); + Map paraMap = new HashMap<>(); + paraMap.put("BEGINTIME", new Timestamp(System.currentTimeMillis())); + paraMap.put("TASKSTATE", OutputConst.TASK_STATE_RUNNING); + paraMap.put("THREADID", threadInfo); + update(id, paraMap); + } + + /** + * 执行成功后,标记 + * + * @param id 任务Id + * @throws AWSDataAccessException + */ + public void updateSucess(String id) throws AWSDataAccessException { + Map paraMap = new HashMap<>(); + paraMap.put("ENDTIME", new Timestamp(System.currentTimeMillis())); + paraMap.put("TASKSTATE", OutputConst.TASK_STATE_SUCESS); + update(id, paraMap); + } + + /** + * 执行失败后,标记 + * + * @param id 任务Id + * @param reportFile 报告下载信息(可选为空) + * @throws AWSDataAccessException + */ + public void updateError(String id) throws AWSDataAccessException { + Map paraMap = new HashMap<>(); + paraMap.put("ENDTIME", new Timestamp(System.currentTimeMillis())); + paraMap.put("TASKSTATE", OutputConst.TASK_STATE_ERROR); + update(id, paraMap); + } + + @Override + public int update(OutputTaskModel model) throws AWSDataAccessException { + // String sql = "update " + entityName() + + // "set TEAMID=:TEAMID,WSID=:WSID,PROFILEID=:PROFILEID,TASKNAME=:TASKNAME,USERID=:USERID,LANG=:LANG where ID=:ID"; + Map paraMap = new HashMap<>(); + setParamValue(model, paraMap); + return update(model.getId(), paraMap); + } + + private void setParamValue(OutputTaskModel model, Map paraMap) { + paraMap.put("ID", model.getId()); + paraMap.put("TEAMID", model.getTeamId()); + paraMap.put("WSID", model.getWsId()); + paraMap.put("USERID", model.getUserId()); + paraMap.put("TASKSTATE", OutputConst.TASK_STATE_NONE); + paraMap.put("PROFILEID", model.getProfileId()); + paraMap.put("TASKNAME", model.getTaskName()); + paraMap.put("LANG", model.getLang()); + } + + @Override + public String entityName() { + return "APP_ACT_COE_PAL_OUTPUT_TASK"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public OutputTaskModel mapRow(ResultSet rset, int rowNum) throws SQLException { + OutputTaskModel model = new OutputTaskModel(); + try { + rsCreate(rset, model); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + + private void rsCreate(ResultSet rset, OutputTaskModel model) throws SQLException { + model.setId(rset.getString("ID")); + model.setTeamId(rset.getString("TEAMID")); + model.setWsId(rset.getString("WSID")); + model.setUserId(rset.getString("USERID")); + model.setCreateTime(rset.getTimestamp("CREATETIME")); + model.setBeginTime(rset.getTimestamp("BEGINTIME")); + model.setEndTime(rset.getTimestamp("ENDTIME")); + model.setTaskState(rset.getInt("TASKSTATE")); + model.setProfileId(rset.getString("PROFILEID")); + model.setTaskName(rset.getString("TASKNAME")); + model.setThreadId(rset.getString("THREADID")); + model.setLang(rset.getString("LANG")); + } + } + + public List getTaskToList(int start, int limit, String wsid, String teamId, String data, String profileId) { + String sql = getSql(wsid, data, profileId, teamId, data); + if (start == 1 || start == 0) { + start = 0; + } else { + start = (start - 1) * limit; + } + sql = SQLPagination.getPaginitionSQL(sql, start, limit); + List list = null; + list = DBSql.query(sql, rowMapper()); + return list; + } + + private String getSql(String wsid, String data, String profileId, String teamId, String name) { + String condition1 = ""; + if (!"".equals(data)) { + String namelike = ""; + if (StringUtil.containSpecialChar(data)) { + namelike = "%" + StringUtil.replaceSqlStr(data, AWSServerConf.isMySQL()) + "%"; + } else { + namelike = "%" + data + "%"; + } + if (!"".equals(profileId)) { + condition1 = "and (TASKNAME like '" + namelike + "' " + (AWSServerConf.isMySQL() ? " ESCAPE '\\\\'" : " ESCAPE '\\'") + " or PROFILEID in (" + profileId + "))"; + } else { + condition1 = "and TASKNAME like '" + namelike + "' " + (AWSServerConf.isMySQL() ? " ESCAPE '\\\\'" : " ESCAPE '\\'"); + } + } + if (!"".equals(teamId)) { + condition1 += " and TEAMID='" + teamId + "'"; + } + List list = OutputAppManager.getList(); + String appCondition = ""; + StringBuilder appIds = new StringBuilder(""); + if (list != null) { + for (OutputAppProfile profile : list) { + appIds.append("'" + profile.getId() + "',"); + } + appCondition = appIds.toString(); + if (appCondition.indexOf(",") > -1) { + appCondition = appCondition.substring(0, appCondition.lastIndexOf(",")); + } + } + if (!UtilString.isEmpty(appCondition)) { + condition1 += " and PROFILEID in(" + appCondition + ")"; + } else { + condition1 += " and PROFILEID = '' "; + } + condition1 += " and (ISDISPLAY IS NULL OR ISDISPLAY ='' ) "; + String sql = getSqlByWsid(wsid, condition1); + return sql; + } + + private String getSqlByWsid(String wsid, String condition1) { + String sql = "select * from " + entityName() + " where WSID='" + wsid + "' " + condition1 + " order by createTime desc "; + return sql; + } + + public int getCount(String wsid, String profileId) { + String sql = "select count(*) as number from " + entityName() + " where WSID='" + wsid + "'"; + if (profileId != null && !"".equals(profileId)) { + sql += " and PROFILEID in (" + profileId + ")"; + } + sql += " and (ISDISPLAY IS NULL OR ISDISPLAY ='' ) "; + return DBSql.getInt(sql, "number"); + } + + public int getCount(String wsid, String temaId, String profileId) { + String sql = "select count(*) as number from " + entityName() + " where WSID='" + wsid + "' and TEAMID='" + temaId + "'"; + if (profileId != null && !"".equals(profileId)) { + sql += " and PROFILEID in (" + profileId + ")"; + } + sql += " and (ISDISPLAY IS NULL OR ISDISPLAY ='' ) "; + return DBSql.getInt(sql, "number"); + } + + public boolean delete(String id, String wsid) { + String sql = "delete from " + entityName() + " where id='" + id + "'"; + return DBSql.update(sql) > 0; + } + + public int getCount(String wsid, String teamId, String data, String profileId) { + List list = DBSql.query(getSql(wsid, data, profileId, teamId, data), rowMapper()); + int count = 0; + for (OutputTaskModel model : list) { + OutputAppProfile appFile = OutputAppManager.getProfile(model.getProfileId()); + if (appFile != null) { + if (SDK.getAppAPI().isActive(appFile.getAppContext().getId())) { + count++; + } + } + } + return count; + } + + public OutputTaskModel getTaskReportById(String id) { + String sql = "select * from " + entityName() + " where id='" + id + "'"; + return DBSql.getObject(sql, rowMapper()); + } + + public boolean delTaskByWsid(String wsid) { + String sql = "delete from " + entityName() + " where WSID='" + wsid + "'"; + return DBSql.update(sql) > 0; + } + + public List getTasksByWsid(String wsid) { + String sql = getSqlByWsid(wsid, ""); + List list = null; + list = DBSql.query(sql, rowMapper()); + return list; + } + + /** + * 更改状态 + * 该状态值为01时在界面不显示 + * @param id + * @return + */ + public int updateIsDisplayStatus(String id) { + String sql = "UPDATE " + entityName() + " SET ISDISPLAY ='01' WHERE id='" + id + "'"; + int r = DBSql.update(sql); + return r; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/extend/GenerLog.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/extend/GenerLog.java new file mode 100644 index 00000000..59eb6f43 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/extend/GenerLog.java @@ -0,0 +1,79 @@ +package com.actionsoft.apps.coe.pal.pal.output.extend; + +import java.io.ByteArrayOutputStream; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import com.actionsoft.bpms.util.UtilDate; + +/** + * 格式化收集报告生成器的日志 + * + * @author jack + * + */ +public abstract class GenerLog { + + private List logs = new ArrayList<>(); + + public GenerLog() { + } + + /** + * 信息 + * + * @param msg + */ + public void info(String msg) { + put("INFO", msg); + } + + /** + * 警告 + * + * @param msg + */ + public void warn(String msg) { + put("WARN", msg); + } + + /** + * 错误 + * + * @param msg + */ + public void err(String msg) { + put("ERR", msg); + } + + public List logs() { + return logs; + } + + private void put(String type, String msg) { + String info = type + ":[" + UtilDate.datetimeFormat(new Date()) + "]" + msg; + logs.add(info); + } + + /** + * 得到异常信息 + * + * @param e + */ + public void errorInfo(Exception e) { + ByteArrayOutputStream buf = new ByteArrayOutputStream(); + // e.printStackTrace(new PrintWriter(buf, true)); + e.printStackTrace(); + String expMessage = ""; + try { + expMessage = buf.toString("UTF-8"); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } + err(expMessage); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/extend/GenerLogExd.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/extend/GenerLogExd.java new file mode 100644 index 00000000..209ff75b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/extend/GenerLogExd.java @@ -0,0 +1,9 @@ +package com.actionsoft.apps.coe.pal.pal.output.extend; + +/** + * @Description PAL应用化-流程手册等调用 + * @Created by sunlh + * @Date 2020-04-23 + */ +public class GenerLogExd extends GenerLog{ +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/extend/OutputAppManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/extend/OutputAppManager.java new file mode 100644 index 00000000..f2d4f508 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/extend/OutputAppManager.java @@ -0,0 +1,122 @@ +package com.actionsoft.apps.coe.pal.pal.output.extend; + +import java.util.ArrayList; +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.sdk.local.SDK; + +/** + * 注册和管理报告生成器扩展应用 + * + * @author jack + * + */ +public final class OutputAppManager { + private static List _list = new ArrayList<>(); + + private OutputAppManager() { + } + + /** + * 注册 + * + * @param app 具体的App实现对象 + * @param groupName 报告分类 + * @param title 报表标题,可以为null + * @param targetMethodScope 限定目标范围的建模大类、建模方法,多个用逗号隔开,如果为空表示全部 + * @param relationMethodScope + * 限定关联范围的建模大类、建模方法,多个用逗号隔开。如果为空表示全部,如果设置-,表示不需要用户选择关联范围,向导页被忽略 + * @param lang 报告输出语言(cn/en/big5...),支持多种用逗号隔开 + * @param optionClass 对方App提供的一个ActionWeb类路径名称,提供一个约定的getOption(String + * teamId,String + * wsId,List)方法,返回向导进入第三页的div区域,并约定js回调方式,采集最终的key/value值 + * @param generClass 对方App提供的一个普通Java类路径名,提供一个约定execute(String teamId,String + * wsId,String lang,String wizardJsonData)方法 + * @param isDownload 是否支持下载模型文件 + * @param templates isDownload为true时有效,模型文件的名称路径 + */ + public static void register(AppContext app, String groupName, String title, String targetMethodScope, String targetMethodType, String relationMethodScope, String lang, String optionClass, String generClass, boolean isDownload, String templates) { + OutputAppProfile profile = new OutputAppProfile(); + createProfile(app, groupName, title, targetMethodScope, targetMethodType, relationMethodScope, lang, optionClass, generClass, profile, isDownload, templates); + boolean isUpdate = false; + int i = 0; + for (i = 0; i < _list.size(); i++) { + OutputAppProfile p = _list.get(i); + if (p.getId().equals(profile.getId())) { + isUpdate = true; + SDK.getAppAPI().info(SDK.getAppAPI().getAppContext(CoEConstant.APP_ID), "扩展App[" + profile.getTitle() + "]重新被注册"); + break; + } + } + if (!isUpdate) { + _list.add(profile); + SDK.getAppAPI().info(SDK.getAppAPI().getAppContext(CoEConstant.APP_ID), "扩展App[" + profile.getTitle() + "]注册成功"); + } else { + _list.remove(i); + _list.add(profile); + } + } + + private static void createProfile(AppContext app, String groupName, String title, String targetMethodScope, String targetMethodType, String relationMethodScope, String lang, String optionClass, String generClass, OutputAppProfile profile, boolean isDownload, String templates) { + profile.setTargetMethodScope(targetMethodScope); + profile.setTargetMethodType(targetMethodType); + profile.setRelationMethodScope(relationMethodScope); + profile.setLang(lang); + profile.setTitle(title); + profile.setGroupName(groupName); + profile.setGenerClass(generClass); + profile.setOptionClass(optionClass); + profile.setAppContext(app); + profile.setDownload(isDownload); + profile.setTemplates(templates); + } + + /** + * 根据id获得profile注册信息 + * + * @param id 注册profile时的Id + * @return 如果没有找到返回null + */ + public static OutputAppProfile getProfile(String id) { + for (OutputAppProfile p : _list) { + if (p.getId().equals(id)) { + return p; + } + } + return null; + } + + /** + * 有效的报表生成器App + * + * @return + */ + public static List getList() { + List list = new ArrayList<>(); + for (OutputAppProfile p : _list) { + if (SDK.getAppAPI().isActive(p.getAppContext().getId())) { + list.add(p); + } + } + return list; + } + + /** + * 根据给定的名称模糊查询 + * + * @param str + * @return + */ + public static List getProfileName(String str) { + List list = new ArrayList(); + List list1 = getList(); + for (OutputAppProfile model : list1) { + if (SDK.getAppAPI().isActive(model.getAppContext().getId()) && model.getTitle().contains(str)) { + list.add(model.getId()); + } + } + return list; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/extend/OutputAppProfile.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/extend/OutputAppProfile.java new file mode 100644 index 00000000..70271765 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/extend/OutputAppProfile.java @@ -0,0 +1,206 @@ +package com.actionsoft.apps.coe.pal.pal.output.extend; + +import java.io.UnsupportedEncodingException; + +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.bpms.util.MD5; +import com.actionsoft.bpms.util.UtilString; + +/** + * 报告生成器扩展应用描述 + * + * @author jack + * + */ +public final class OutputAppProfile { + + private AppContext appContext; + private String id; + private String groupName; + private String title; + private String targetMethodScope; + private String targetMethodType; + private String relationMethodScope; + private String lang; + private String optionClass; + private String generClass; + private boolean isDownload; + private String templates; + + public OutputAppProfile() { + } + + /** + * 报告分类名称 + * + * @return + */ + public String getGroupName() { + if (groupName == null) + groupName = "未分类"; + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + /** + * 限定关联范围的建模大类、建模方法,多个用逗号隔开。如果为空表示全部,如果设置-,表示不需要用户选择关联范围,向导页被忽略 + * + * @return + */ + public String getRelationMethodScope() { + if (relationMethodScope == null) + relationMethodScope = "-"; + return relationMethodScope; + } + + public void setRelationMethodScope(String relationMethodScope) { + this.relationMethodScope = relationMethodScope; + } + + /** + * 报告输出语言(cn/en/big5...),支持多种用逗号隔开 + * + * @return + */ + public String getLang() { + return lang; + } + + public void setLang(String lang) { + this.lang = lang; + } + + /** + * 该扩展App的Id,由appId+title组成的MD5摘要串 + * + * @return id + */ + public String getId() { + if (UtilString.isEmpty(id)) { + String str = getAppContext().getId() + getTitle(); + try { + id = "_" + new MD5().toDigest(new String(str.getBytes("UTF-8"), "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + } + return id; + } + + /** + * 应用对象,如果该应用被停用,该Profile不会出现在可用状态 + * + * @return + */ + public AppContext getAppContext() { + return appContext; + } + + public void setAppContext(AppContext appContext) { + this.appContext = appContext; + } + + /** + * 报表生成器标题 + * + * @return + */ + public String getTitle() { + if (UtilString.isEmpty(title)) { + return appContext.getName(); + } else { + return title; + } + } + + public void setTitle(String title) { + this.title = title; + } + + /** + * 限定目标范围的建模大类、建模方法,多个用逗号隔开,如果为空表示全部 + * + * @return 多个逗号隔开,如果为空表示可以让用户从全资产库中选择 + */ + public String getTargetMethodScope() { + if (targetMethodScope == null) { + targetMethodScope = ""; + } + return targetMethodScope; + } + + public void setTargetMethodScope(String targetMethodScope) { + this.targetMethodScope = targetMethodScope; + } + + + /** + * 限定目标范围中可选图元类型 + * + * @return 多个逗号隔开,如果为空表示选择整个文件,不限定图元,如果为"-"表示所有类型图元 + */ + public String getTargetMethodType() { + return targetMethodType; + } + + public void setTargetMethodType(String targetMethodType) { + this.targetMethodType = targetMethodType; + } + + /** + * 对方App提供的一个ActionWeb类路径名称,提供一个约定的getOption(String teamId,String + * wsId,List fileIds)方法,返回向导进入第三页的div区域,并约定js回调方式,采集最终的key/value值 + * + * @return 一个类路径 + */ + public String getOptionClass() { + return optionClass; + } + + public void setOptionClass(String optionClass) { + this.optionClass = optionClass; + } + + /** + * 对方App提供的一个普通Java类路径名,提供一个约定execute(String teamId,String wsId,List + * fileIds,Map params)方法,Map为收集到的用户选项 + * + * @return 可选 + */ + public String getGenerClass() { + return generClass; + } + + public void setGenerClass(String generClass) { + this.generClass = generClass; + } + + /** + * 是否支持下载/上传模型文件 + * @return + */ + public boolean isDownload() { + return isDownload; + } + + public void setDownload(boolean isDownload) { + this.isDownload = isDownload; + } + + /** + * 模型文件的名称路径 + * @return + */ + public String getTemplates() { + return templates; + } + + public void setTemplates(String templates) { + this.templates = templates; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/model/OutputTaskModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/model/OutputTaskModel.java new file mode 100644 index 00000000..4bd0494e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/model/OutputTaskModel.java @@ -0,0 +1,202 @@ +package com.actionsoft.apps.coe.pal.pal.output.model; + +import java.sql.Timestamp; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.output.constant.OutputConst; +import com.actionsoft.sdk.local.SDK; +import com.actionsoft.sdk.local.api.internal.PlatformAPIImpl; + +/** + * 由报告生成器生成文档输出任务 + * + * @author jack + * + */ +public class OutputTaskModel extends ModelBean { + + private String id; + private String teamId; + private String wsId; + private String profileId; + private String taskName; + private String userId; + private Timestamp createTime; + private Timestamp beginTime; + private Timestamp endTime; + private int taskState; + private String threadId; + private String lang; + + /** + * 报告生成语言关键词 + * + * @return + * + * @see PlatformAPIImpl#getDefaultLanguage() + * @see PlatformAPIImpl#getlanguages() + */ + public String getLang() { + if (UtilString.isEmpty(lang)) + lang = SDK.getPlatformAPI().getDefaultLanguage(); + return lang; + } + + public void setLang(String lang) { + this.lang = lang; + } + + /** + * 报告生成器扩展App的ProfileId,见OutputAppProfile.getId() + * + * @return + */ + public String getProfileId() { + return profileId; + } + + public void setProfileId(String profileId) { + this.profileId = profileId; + } + + /** + * 任务名称 + * + * @return + */ + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + /** + * 处理该任务的线程信息。格式:线程Id:AWS节点名 + * + * @return + */ + public String getThreadId() { + if (threadId == null) + threadId = ""; + return threadId; + } + + public void setThreadId(String threadId) { + this.threadId = threadId; + } + + /** + * 任务标识,一个长度36位的串 + * + * @return + */ + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + /** + * 如果该任务来自小组 + * + * @return + */ + public String getTeamId() { + if (teamId == null) + teamId = ""; + return teamId; + } + + public void setTeamId(String teamId) { + this.teamId = teamId; + } + + /** + * 资产库Id + * + * @return + */ + public String getWsId() { + return wsId; + } + + public void setWsId(String wsId) { + this.wsId = wsId; + } + + /** + * 创建任务的AWS账户名 + * + * @return + */ + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + /** + * 创建时间 + * + * @return + */ + public Timestamp getCreateTime() { + return createTime; + } + + public void setCreateTime(Timestamp createTime) { + this.createTime = createTime; + } + + /** + * 开始时间 + * + * @return + */ + public Timestamp getBeginTime() { + return beginTime; + } + + public void setBeginTime(Timestamp beginTime) { + this.beginTime = beginTime; + } + + /** + * 完成时间 + * + * @return + */ + public Timestamp getEndTime() { + return endTime; + } + + public void setEndTime(Timestamp endTime) { + this.endTime = endTime; + } + + /** + * 任务状态,报告生成过程由线程处理 + * + * @return 当前状态 + * + * @see OutputConst#TASK_STATE_NONE 就绪,等待执行 + * @see OutputConst#TASK_STATE_ERROR 失败 + * @see OutputConst#TASK_STATE_SUCESS 成功 + * @see OutputConst#TASK_STATE_RUNNING 正在执行中 + */ + public int getTaskState() { + return taskState; + } + + public void setTaskState(int taskState) { + this.taskState = taskState; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/util/OutputExcelUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/util/OutputExcelUtil.java new file mode 100644 index 00000000..92b1bfca --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/util/OutputExcelUtil.java @@ -0,0 +1,1720 @@ +package com.actionsoft.apps.coe.pal.pal.output.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Field; +import java.sql.Timestamp; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFClientAnchor; +import org.apache.poi.hssf.usermodel.HSSFCreationHelper; +import org.apache.poi.hssf.usermodel.HSSFFont; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.hssf.util.HSSFColor; +import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.ss.usermodel.BorderStyle; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.Comment; +import org.apache.poi.ss.usermodel.Drawing; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.VerticalAlignment; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.util.CellRangeAddress; + +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.org.model.RoleModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.ws.web.VersionUtil; +import com.actionsoft.sdk.local.SDK; + +/** + * 导出excel专用 + * + * @author wangyh + * + */ +public class OutputExcelUtil { + + public static final String fileId = "id"; // 文件Id + public static final String fileNo = "no"; // 文件编号 + public static final String fileName = "name"; // 文件名称 + public static final String fileVersion = "version"; // 版本号 + public static final String fileType = "methodId"; // 文件类型 + public static final String fileDesc = "desc"; // 文件描述 + public static final String fileInput = "input"; // 文件输入 + public static final String fileOutput = "output"; // 文件输出 + public static final String fileOwnerUser = "ownerUser"; // 责任人 + public static final String fileOwnerDept = "ownerDept"; // 责任部门 + public static final String fileAuthor = "createUser"; // 文件作者 + public static final String filePublishDate = "createDate"; // 文件发布日期 + public static final String fileModifyUser = "modifyUser"; // 文件最后修改人 + public static final String fileModifyDate = "modifyDate"; // 文件最后修改日期 + + public static final String shapeId = "id"; // 形状Id + public static final String shapeName = "text"; // 形状名称 + public static final String shapeType = "title"; // 形状类型 + public static final String shapeDesc = "shapeDesc"; // 形状描述/定义 + + public static final String FILENAMEREGX = "[?\"/\\\\<>*\\|:]"; //文件命名规则正则表达式 + + /** + * 遍历excel模板,获取所有标签 + * + * @param file 模板文件 + * @return + * @throws IOException + */ + public static Map> getLabelsOfTemp(File file) throws IOException { + Map> map = new HashMap>(); + List fileLabels = new ArrayList(); + List shapeLabels = new ArrayList(); + + // 初始化输入流 + FileInputStream is = new FileInputStream(file); + // 创建Excel,并指定Excel读取位置 + Workbook wb = new HSSFWorkbook(is); + // 根据Workbook得到第0个下标的工作薄 + Sheet sheet1 = wb.getSheetAt(0); + for (Row row : sheet1) { + for (Cell cell : row) { + // 得到单元格类型 + if (cell.getCellType() == Cell.CELL_TYPE_STRING) { + String cellValue = cell.getRichStringCellValue().getString().trim(); + if (cellValue.matches(".*(%)([^%]+)(%).*") || cellValue.matches(".*(\\$)([^\\$]+)(\\$).*")) { + JSONObject label = new JSONObject(); + label.put("row", row.getRowNum()); + label.put("column", cell.getColumnIndex()); + label.put("label", cellValue); + + //截取符合%abc%的字符串 + Pattern p1 = Pattern.compile("(%)([^%]+)(%)"); + Matcher m1 = p1.matcher(cellValue); + List labels1 = new ArrayList(); + while(m1.find()){ + labels1.add(m1.group()); + } + + if (checkLabels(labels1)) { + if (cellValue.matches(".*(%)shape.+(%).*")) { + shapeLabels.add(label); + } else { + fileLabels.add(label); + } + } + + //截取符合$abc$的字符串 + Pattern p2 = Pattern.compile("(\\$)([^\\$]+)(\\$)"); + Matcher m2 = p2.matcher(cellValue); + List labels2 = new ArrayList(); + while(m2.find()){ + labels2.add(m2.group()); + } + if (checkLabels(labels2)) { + if (cellValue.matches(".*(\\$)shape.+(\\$).*")) { + shapeLabels.add(label); + } else { + fileLabels.add(label); + } + } + } + } + } + } + + map.put("file", fileLabels); + map.put("shape", shapeLabels); + return map; + } + + /** + * 校验标签是否正确 + * + * @param labels + * @return + */ + public static boolean checkLabels(List labels) { + String intrinsicLabels = SDK.getPALDiagramQueryAPI().getAllIntrinsicLabels(); + String extendLabels = SDK.getPALDiagramQueryAPI().getExtendLabels(); + for(String label : labels) { + if (label.matches("(%)([^%]+)(%)")) { + if (intrinsicLabels.indexOf(label.substring(1, label.length()-1)) != -1) { + return true; + } + } else if (label.matches("(\\$)([^\\$]+)(\\$)")) { + if (extendLabels.indexOf(label.substring(1, label.length()-1)) != -1) { + return true; + } + } + } + + return false; + } + + /** + * 校验标签是否正确 + * + * @param label + * @return + */ + public static boolean checkLabel(String label) { + String intrinsicLabels = SDK.getPALDiagramQueryAPI().getAllIntrinsicLabels(); + String extendLabels = SDK.getPALDiagramQueryAPI().getExtendLabels(); + if (label.matches("(%)([^%]+)(%)")) { + if (intrinsicLabels.indexOf(label.substring(1, label.length()-1)) != -1) { + return true; + } + } else if (label.matches("(\\$)([^\\$]+)(\\$)")) { + if (extendLabels.indexOf(label.substring(1, label.length()-1)) != -1) { + return true; + } + } + return false; + } + + /** + * 截取字符串中的标签 + * + * @param string + * @return + */ + public static List string2label(String string) { + List labels = new ArrayList(); + //截取符合$XXX$的字符串 + Pattern p1 = Pattern.compile("(\\$)([^\\$]+)(\\$)"); + Matcher m1 = p1.matcher(string); + while(m1.find()){ + String label1 = m1.group(); + if (checkLabel(label1)) { + labels.add(label1); + } + } + //截取符合$XXX$的字符串 + Pattern p2 = Pattern.compile("(%)([^%]+)(%)"); + Matcher m2 = p2.matcher(string); + while(m2.find()){ + String label2 = m2.group(); + if (checkLabel(label2)) { + labels.add(label2); + } + } + return labels; + } + + /** + * 用具体值替换字符串中的标签 + * + * @param model + * @param fileExtendAttrs + * @param result + * @param string 要替换的字符串 + * @return + */ + public static String label2value(PALRepositoryModel model, JSONObject fileExtendAttrs, JSONObject result, String string) { + List labels = string2label(string); + Map map = new HashMap(); + if (model != null) { + map.putAll(getFileAttributeValue(model, fileExtendAttrs, labels)); + } + if (result != null && result.size() > 0) { + map.putAll(getShapeAttributeValue(model.getId(), result, labels)); + } + for (Map.Entry entry : map.entrySet()) { + string = string.replace(entry.getKey(), entry.getValue()); + } + + return string; + } + + public static String label2value(Map map, List labels, String label) { + for (Map.Entry entry : map.entrySet()) { + label = label.replace(entry.getKey(), entry.getValue()); + } + + return label; + } + + + + /** + * 获取文件标签对应的值 + * + * @param model + * @param fileExtendAttrs + * @param labels + * @return + */ + public static Map getFileAttributeValue(PALRepositoryModel model, JSONObject fileExtendAttrs, List labels) { + PALRepositoryModelImpl model1 = (PALRepositoryModelImpl) model; + Map map = new HashMap(); + try { + for (String label : labels) { + if (label.matches("(%)file.+(%)")) { + Field field = OutputExcelUtil.class.getField(label.substring(1, label.length()-1)); + try { + String attribute = (String) field.get(null); + Field attributeField = model1.getClass().getDeclaredField(attribute); + attributeField.setAccessible(true); + String attributeValue = attributeField.get(model1) + ""; + if (label.toLowerCase().contains("createdate") || label.toLowerCase().contains("modifydate") || label.toLowerCase().contains("publishdate")) { + Timestamp date = Timestamp.valueOf(attributeValue); + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + attributeValue = sdf.format(date); + } + map.put(label, attributeValue.trim()); + } catch (IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + } else if (label.matches("(\\$)file_.+(\\$)") && fileExtendAttrs != null) { + Object labelValue = fileExtendAttrs.get(label.substring(6, label.length()-1)); + if (labelValue != null) { + map.put(label, labelValue.toString().toString()); + } else { + map.put(label, ""); + } + } + } + } catch (NoSuchFieldException | SecurityException e) { + e.printStackTrace(); + } + return map; + } + + /** + * 获取文件图形标签对应的值 + * + * @param result + * @param labels + * @return + */ + public static Map getShapeAttributeValue(String modelId, JSONObject result, List labels) { + Map map = new HashMap(); + + Map extendAttrs = new HashMap(); + JSONObject dataAttributes = (JSONObject) result.get("dataAttributes"); + result.put("shapeDesc", ""); + extendAttrs.put("number", ""); + + JSONArray attributesJsonArray = dataAttributes.getJSONArray("attributesJsonArray"); + for (int i = 0; i < attributesJsonArray.size(); i++) { + JSONObject object = attributesJsonArray.getJSONObject(i); + if(object == null || "null".equals(object.toString())) { + continue; + } + if (object.containsKey("value")) { + if ("relation".equals(object.getString("type"))) { + String[] ids = object.getString("value").split(","); + Set set = new TreeSet(); + for (int j = 0; j < ids.length; j++) { + set.add(ids[j]); + } + ids = (String[]) set.toArray(new String[0]); + StringBuilder sb = new StringBuilder(""); + for (String id : ids) { + Iterator list1 = DesignerShapeRelationCache.getByRelationShapeId(modelId, id); + if (list1.hasNext()) { + sb.append(list1.next().getRelationShapeText()); + } + } + String value = sb.toString(); + if (value.length() > 0) { + value = value.substring(0, value.length()-1); + } + extendAttrs.put(object.getString("id"), value); + } else { + extendAttrs.put(object.getString("id"), object.getString("value")); + } + if (object.getString("id").equals("desc")) { + result.put("shapeDesc", object.getString("value")); + } + } + } + + for (String label : labels) { + Object value = null; + if (label.matches("(%)shape.+(%)")) { + Field field; + String attributeName = ""; + try { + field = OutputExcelUtil.class.getField(label.substring(1, label.length()-1)); + attributeName = (String) field.get(null); + } catch (NoSuchFieldException | SecurityException e) { + e.printStackTrace(); + } catch (IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + value = result.get(attributeName); + } else if (label.matches("(\\$)shape_.+(\\$)")) { + value = extendAttrs.get(label.substring(7, label.length()-1)); + } + if (value != null) { + map.put(label, value.toString().trim()); + } else { + map.put(label, ""); + } + } + + return map; + } + + /** + * 生成RACI流程说明 + * + * @param list 要生成的元数据 + * @param file 文件对象 + * @throws IOException + */ + public static void writeReport1(List list, File file, JSONObject jsonObj, PALRepositoryModel repositoryModel, JSONObject fileExtendAttrs, String raciType) throws IOException { + if (!list.isEmpty()) { + FileInputStream readFile = null; + try { + readFile = new FileInputStream(file); + // 创建一个Excel文档对象 + HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(readFile)); + // 获得指定sheet 也可以通过 tamplateFileBook.getSheet("定制模板")得到 + HSSFSheet st = wb.getSheetAt(0); + + /**********************替换sheet名称**********************/ + String sheetName = st.getSheetName(); + List sheetNameLabels = OutputExcelUtil.string2label(sheetName); + String sheetNameValue = sheetName; + if (sheetNameLabels != null && sheetNameLabels.size() > 0) { + sheetNameValue = OutputExcelUtil.label2value(repositoryModel, fileExtendAttrs, null, sheetName); + } + wb.setSheetName(0, sheetNameValue); + + /**********************替换文件内容**********************/ + HSSFCellStyle setBorder = null; + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, false, IndexedColors.WHITE.getIndex()); + Map> labels = getLabelsOfTemp(file); + List shapeLabels = labels.get("shape"); + int shapeLabelRowNum = 0; + for (JSONObject shapeLabel : shapeLabels) { + int rowNum = Integer.parseInt(shapeLabel.getString("row")); + shapeLabelRowNum = rowNum; + int columnNum = Integer.parseInt(shapeLabel.getString("column")); + String label = shapeLabel.getString("label"); + for (int i = 1; i < list.size(); i++) { + HSSFRow hrs = st.getRow(rowNum + i); + if (null == hrs) { + hrs = st.createRow(rowNum + i); + } + // 获得单元格对象 + HSSFCell cell = hrs.getCell(columnNum); + if (null == cell) { + cell = hrs.createCell(columnNum); + } + // 向单元格中放入值 + cell.setCellValue(label); + cell.setCellStyle(setBorder); + } + } + + orderBy(list, jsonObj); + + for (Row row : st) { + for (Cell cell : row) { + // 得到单元格类型 + if (cell.getCellType() == Cell.CELL_TYPE_STRING) { + String cellValue = cell.getRichStringCellValue().getString().trim(); + if (cellValue.matches(".*[%][^$]+[%].*") || cellValue.matches(".*[$][^%]+[$].*")) { + if (row.getRowNum() >= shapeLabelRowNum) { + cell.setCellValue(label2value(repositoryModel, fileExtendAttrs, list.get(row.getRowNum() - shapeLabelRowNum), cellValue)); + } else { + cell.setCellValue(label2value(repositoryModel, fileExtendAttrs, null, cellValue)); + } + cell.setCellStyle(setBorder); + } + } + } + } + + int attrColumn = shapeLabels.size(); + Map RACIResultMap = countRACI(list, raciType); + Map colnumMap = null; + if (RACIResultMap.isEmpty()) { + // 如果RACI列被删除(即第1行没有RACI的列标识),则不显示RACI动态列 + } else { + setRACIRow(wb, st, RACIResultMap, shapeLabelRowNum - 2, attrColumn); + colnumMap = setRACIRowName(wb, st, RACIResultMap, attrColumn); + } + for (int i = 0, rows = list.size(); i < rows; i++) { + setRACICellValue(wb, st, setBorder, i + shapeLabelRowNum - 2, list.get(i), colnumMap, shapeLabelRowNum, attrColumn, raciType); + } + + wb.write(new FileOutputStream(file)); + } finally { + if (readFile != null) { + readFile.close(); + } + readFile = null; + } + } + } + + /** + * 排序功能 + * + * @param list + * @param jsonObj + */ + public static void orderBy(List list, JSONObject jsonObj) { + ComparatorJson comparator = new ComparatorJson(); + comparator.setByName(true); + if (orderNumber(jsonObj)) { + comparator.setByName(false); + } + Collections.sort(list, comparator); + } + + /** + * 得到一共多少列 + * + * @param st + * @return + */ + private static int getColumNumber(HSSFSheet st) { + int row = st.getLastRowNum(); + int total = 0; + HSSFRow rowObj = st.getRow(row); + if (rowObj != null) { + int colum = rowObj.getPhysicalNumberOfCells(); + for (int j = 0; j < colum; j++) { + if (rowObj.getCell(j) != null) { + total++; + } + } + } + return total; + } + + /** + * 设置RACI列名 + * + * @param wb + * @param st + * @param RACIResultMap + * @return + */ + private static Map setRACIRowName(HSSFWorkbook wb, HSSFSheet st, Map RACIResultMap) { + return setRACIRowName(wb, st, RACIResultMap, 3); + } + private static Map setRACIRowName(HSSFWorkbook wb, HSSFSheet st, Map RACIResultMap, int i) { + Map colnumMap = new HashMap(); + HSSFCellStyle setBorder; + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, false, HSSFColor.SKY_BLUE.index); + Set keySet = RACIResultMap.keySet(); + for (String key : keySet) { + if (UtilString.isEmpty(key)) { + continue; + } + if (key.contains("_fileId")) { + continue; + } + + colnumMap.put(key, i); + setCellValue(st, 1, i, RACIResultMap.get(key), HSSFCell.CELL_TYPE_STRING, setBorder); + String fileId = RACIResultMap.get(key + "_fileId"); + if (!"00000000-0000-0000-0000-000000000000".equals(fileId)) { + PALRepositoryModel repositoryModel = PALRepositoryCache.getCache().get(fileId); + if (repositoryModel == null) { + continue; + } + setComment(wb, st, st.getRow(1).getCell(i), repositoryModel.getName(), "AWS CoE"); + } + int length = 0; + try { + length = RACIResultMap.get(key).getBytes("UTF-8").length; + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + st.setColumnWidth((short) i, (short) (length * 256)); + i++; + } + return colnumMap; + } + + /** + * 判断RACI的个数 + * + * @param list + * @return + */ + private static Map countRACI(List list, String raciType) { + Set set = new HashSet(); + for (int i = 0, rows = list.size(); i < rows; i++) { + // 判断RACI的个数 + JSONObject json = list.get(i); + getRACIAttrValue(json, set); + } + Set ids = new HashSet(); + getShapeIds(set, ids); + String shapeIds = createIds(ids.toString().replace("[", "").replace("]", "").replace("\"", "")); + removeNotORGids(ids, shapeIds); + shapeIds = createIds(ids.toString().replace("[", "").replace("]", "").replace("\"", "")); + Map reslutMap = new HashMap<>(); + if ("pal".equals(raciType)) { + reslutMap = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getRelationValueToMap(shapeIds); + } else { + // 单独处理关联aws org的数据 + reslutMap = getAwsOrgMap(ids, reslutMap); + } + return reslutMap; + } + + // 处理关联aws平台组织的数据 + private static Map getAwsOrgMap(Set ids, Map reslutMap) { + Set idSet = new HashSet<>(); + for (String id : ids) { + idSet.add(id.replace("[", "").replace("]", "").replace("\"", "")); + } + if (reslutMap == null) { + reslutMap = new HashMap<>(); + } + for (String id : idSet) { + // 部门 + DepartmentModel departmentModel = SDK.getORGAPI().getDepartmentById(id); + if (departmentModel != null) { + reslutMap.put(id, departmentModel.getName()); + reslutMap.put(id + "_fileId", "00000000-0000-0000-0000-000000000000"); + } else { + // 人员 + UserModel userModel = SDK.getORGAPI().getUser(id); + if (userModel != null) { + reslutMap.put(id, userModel.getUserName()); + reslutMap.put(id + "_fileId", "00000000-0000-0000-0000-000000000000"); + } else { + // 角色 + RoleModel roleModel = SDK.getORGAPI().getRoleById(id); + if (roleModel != null) { + reslutMap.put(id, roleModel.getName()); + reslutMap.put(id + "_fileId", "00000000-0000-0000-0000-000000000000"); + } + } + } + } + return reslutMap; + } + + private static void removeNotORGids(Set ids, String shapeIds) { + Set resultSet = getNotRACIShapeId(shapeIds); + for (String str : resultSet) { + ids.remove(str); + } + } + + private static void getShapeIds(Set set, Set ids) { + for (String val : set) { + String strs[] = val.split(","); + for (String id : strs) { + ids.add(id); + } + } + } + + private static Set getNotRACIShapeId(String shapeIds) { + Map reslutFileIdsMap = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getRelationFileIdsToMap(shapeIds); + Set removeIdsSet = new HashSet(); + Set fileSet = reslutFileIdsMap.keySet(); + Set fileIdSet = new HashSet(); + for (String key : fileSet) { + fileIdSet.add(reslutFileIdsMap.get(key)); + } + Set notOrgFileidSet = getNotORGFileIds(fileIdSet); + for (String key : fileSet) { + if (reslutFileIdsMap.get(key) != null && notOrgFileidSet.contains(reslutFileIdsMap.get(key))) { + removeIdsSet.add(key); + } + } + return removeIdsSet; + } + + /** + * 得到是关联的但不是ORG类型的文件 + * + * @param fileIdSet + * @return + */ + private static Set getNotORGFileIds(Set fileIdSet) { + Set notOrgFileidSet = new HashSet(); + for (String id : fileIdSet) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(id); + if (model != null) { + if (!model.getMethodId().contains("org")) { + notOrgFileidSet.add(id); + } + } + } + return notOrgFileidSet; + } + + /** + * 得到属性值 + * + * @param json + * @param isRelation 是否得到关联的属性 + * @return + */ + private static Set getRACIAttrValue(JSONObject json, Set set) { + JSONObject dataJson = json.getJSONObject("dataAttributes"); + if (dataJson.get("attributesJsonArray").getClass().getName().contains("JSONArray")) { + JSONArray arr = dataJson.getJSONArray("attributesJsonArray"); + for (int i = 0; i < arr.size(); i++) { + JSONObject jsonObj = arr.getJSONObject(i); + if(jsonObj == null || "null".equals(jsonObj.toString())) { + continue; + } + if (jsonObj.containsKey("value") && "relation".equals(jsonObj.getString("type"))) { + if (!jsonObj.getString("value").isEmpty()) + set.add(jsonObj.getString("value")); + } + if (jsonObj.containsKey("value") && ("awsorg".equals(jsonObj.getString("type")))) { + if (!jsonObj.getString("value").isEmpty()) + set.add(jsonObj.getString("value").replace(",", ",")); + } + } + } + return set; + } + + private static void setRACIRow(HSSFWorkbook wb, HSSFSheet st, Map RACIResultMap) { + setRACIRow(wb, st, RACIResultMap, 0, 3); + } + + private static void setRACIRow(HSSFWorkbook wb, HSSFSheet st, Map RACIResultMap, int row, int column) { + HSSFCellStyle setBorder; + setBorder = setCellStyle(wb, "宋体", 12, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, HSSFColor.SKY_BLUE.index); + int column1 = column + RACIResultMap.size()/2 - 1; + if (column1 > column) { + st.addMergedRegion(new CellRangeAddress(row, row, (short) column, (short) (column + RACIResultMap.size()/2 - 1))); + } + setCellBG(st, row, column, setBorder, false); + Font font = wb.createFont(); + font.setBold(true); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 12);// 设置字体大小 + setBorder.setFont(font); + HSSFCell cell = setCellValue(st, row, column, "RACI", HSSFCell.CELL_TYPE_STRING, setBorder); + setComment(wb, st, cell, "R=谁负责A=谁审批C=咨询谁I=通知谁;没有负责人的步骤标为黄色,有两个以上负责人的步骤标为红色", "AWS CoE"); + } + + // 包含下级子文件 + public static boolean isHaveSub(JSONObject jsonObj) { + return jsonObj.getBoolean("isHaveSub"); + } + + // 按编号排序 + public static boolean orderNumber(JSONObject jsonObj) { + return jsonObj.getBoolean("orderNumber"); + } + + // 忽略未编号的步骤描述 + public static boolean ignoreNumber(JSONObject jsonObj) { + return jsonObj.getBoolean("ignoreNumber"); + } + + // 按编号第一排序 + public static boolean orderNuberFirst(JSONObject jsonObj) { + return jsonObj.getBoolean("orderNuberFirst"); + } + + // 按名称第二排序 + public static boolean orderNametwo(JSONObject jsonObj) { + return jsonObj.getBoolean("orderNametwo"); + } + + /** + * 生成RACI矩阵分析(组织与流程) + * + * @param list 要生成的元数据 + * @param file 文件对象 + * @throws IOException + */ + public static void writeReport2(List targetList, File file, List> relationListJson, List relationList, JSONObject jsonObj, String raciType) throws IOException { + if (!targetList.isEmpty() && !relationListJson.isEmpty()) { + FileInputStream readFile = null; + try { + readFile = new FileInputStream(file); + // 创建一个Excel文档对象 + HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(readFile)); + // 获得指定sheet 也可以通过 tamplateFileBook.getSheet("定制模板")得到 + HSSFSheet st = wb.getSheetAt(0); + // PALRepositoryModel model = relationList.get(0); + wb.setSheetName(0, targetList.get(0).getString("fileName") + "_(" + VersionUtil.getVersionStrV(targetList.get(0).getInteger("fileVersion")) + ")"); + HSSFCellStyle setBorder = null; + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.SKY_BLUE.getIndex()); + // 记录每只流程的列号 + Map map = new HashMap(); + // 设置流程名称 + CellStyle styleBody = wb.createCellStyle(); + styleBody.setRotation((short) -90); + styleBody = setCellStyle(wb, styleBody, "宋体", 12, HorizontalAlignment.CENTER, VerticalAlignment.TOP, IndexedColors.SKY_BLUE.getIndex()); + setProcessNameToCell(relationList, st, HSSFCell.CELL_TYPE_STRING, styleBody, map); + orderBy(targetList, jsonObj); + for (int i = 0, rows = targetList.size(); i < rows; i++) { + JSONObject json = targetList.get(i); + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.WHITE.getIndex()); + setCellValue(st, i + 1, 0, getName(json), HSSFCell.CELL_TYPE_STRING, setBorder); + for (int j = 0, size = relationList.size(); j < size; j++) { + setCellBG(st, i + 1, j, setBorder, true); + } + setRACICellValue(json, map, relationListJson, setBorder, i + 1, st, HSSFCell.CELL_TYPE_STRING, wb, raciType); + } + wb.write(new FileOutputStream(file)); + } finally { + if (readFile != null) { + readFile.close(); + } + readFile = null; + } + } + } + + /** + * 生成RACI矩阵分析(组织与流程) + * 关联AWS平台组织 + * @param list 要生成的元数据 + * @param file 文件对象 + * @throws IOException + */ + public static void writeReport2(JSONArray targetList, File file, List> relationListJson, List relationList, JSONObject jsonObj, String raciType) throws IOException { + if (!targetList.isEmpty() && !relationListJson.isEmpty()) { + FileInputStream readFile = null; + try { + readFile = new FileInputStream(file); + // 创建一个Excel文档对象 + HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(readFile)); + // 获得指定sheet 也可以通过 tamplateFileBook.getSheet("定制模板")得到 + HSSFSheet st = wb.getSheetAt(0); + // PALRepositoryModel model = relationList.get(0); + wb.setSheetName(0, "RACI矩阵分析(组织与流程)"); + HSSFCellStyle setBorder = null; + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.SKY_BLUE.getIndex()); + // 记录每只流程的列号 + Map map = new HashMap(); + // 设置流程名称 + CellStyle styleBody = wb.createCellStyle(); + styleBody.setRotation((short) -90); + styleBody = setCellStyle(wb, styleBody, "宋体", 12, HorizontalAlignment.CENTER, VerticalAlignment.TOP, IndexedColors.SKY_BLUE.getIndex()); + setProcessNameToCell(relationList, st, HSSFCell.CELL_TYPE_STRING, styleBody, map); + + for (int i = 0; i < targetList.size(); i++) { + JSONObject json = targetList.getJSONObject(i); + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.WHITE.getIndex()); + setCellValue(st, i + 1, 0, getName(json), HSSFCell.CELL_TYPE_STRING, setBorder); + for (int j = 0, size = relationList.size(); j < size; j++) { + setCellBG(st, i + 1, j, setBorder, true); + } + setRACICellValue(json, map, relationListJson, setBorder, i + 1, st, HSSFCell.CELL_TYPE_STRING, wb, raciType); + } + wb.write(new FileOutputStream(file)); + } finally { + if (readFile != null) { + readFile.close(); + } + readFile = null; + } + } + } + + private static void setRACICellValue(JSONObject json, Map map, List> relationListJson, HSSFCellStyle setBorder, int row, HSSFSheet st, int cellType, HSSFWorkbook wb, String raciType) { + // 限定范围的图形id + String targetShapeId = json.getString("id"); + for (List list : relationListJson) { + if (list.size() == 0) { + continue; + } + Set set = new HashSet(); + String id = ""; + for (JSONObject jsonObject : list) { + if (jsonObject.containsKey("fileId")) { + id = jsonObject.getString("fileId"); + } + List> listMap = getAttrValue(jsonObject, true, true); + for (Map map2 : listMap) { + Set keySet = map2.keySet(); + for (String key : keySet) { + String value = map2.get(key); + if (value != null && value.contains(targetShapeId)) { + set.add(getRACI(key)); + } + } + } + } + StringBuilder sb = new StringBuilder(); + for (String str : set) { + sb.append(str); + } + int column = map.get(id); + String val = sb.toString(); + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.WHITE.getIndex()); + if (val.contains("R")) { + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.BRIGHT_GREEN.getIndex()); + } + setCellValue(st, row, column, val, cellType, setBorder); + } + } + + private static String getRACI(String key) { + String value = ""; + if ("duty_r".equals(key)) { + value = "R"; + } + if ("bpm_duty_r".equals(key)) { + value = "R"; + } + if ("approval_a".equals(key)) { + value = "A"; + } + if ("bpm_approval_a".equals(key)) { + value = "A"; + } + if ("counselor_c".equals(key)) { + value = "C"; + } + if ("bpm_counselor_c".equals(key)) { + value = "C"; + } + if ("notify_i".equals(key)) { + value = "I"; + } + if ("bpm_notify_i".equals(key)) { + value = "I"; + } + return value.toString(); + } + + private static void setProcessNameToCell(List relationList, HSSFSheet st, int cellType, CellStyle setBorder, Map map) { + int i = 1; + + for (PALRepositoryModel model : relationList) { + map.put(model.getId(), i); + setCellValue(st, 0, i, model.getName() + "(" + VersionUtil.getVersionStrV(model.getVersion()) + ")", setBorder); + setCellBG(st, 0, i, setBorder, false); + i++; + } + } + + private static void setProcessNameToCell(List> relationListJson, HSSFSheet st, int cellType, Map map, HSSFWorkbook wb) { + HSSFCellStyle setBorder = null; + int cl = 1; + for (List list : relationListJson) { + if (!list.isEmpty()) { + JSONObject json = list.get(0); + setBorder = setCellStyle(wb, "宋体", 12, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.SKY_BLUE.getIndex()); + Font font = wb.createFont(); + font.setBold(true); + font.setFontHeightInPoints((short) 12);// 设置字体大小 + setBorder.setFont(font); + if (list.size() > 1) { + st.addMergedRegion(new CellRangeAddress(0, 0, (short) cl, (short) (cl + list.size() - 1))); + } + map.put(json.getString("fileId"), cl); + setCellValue(st, 0, cl, json.getString("fileName") + "(" + VersionUtil.getVersionStrV(json.getInteger("fileVersion")) + ")", cellType, setBorder); + setCellBG(st, 0, cl, setBorder, false); + cl = cl + list.size(); + } + } + } + + /** + * RACI矩阵分析(组织与流程活动) + * + * @param list 要生成的元数据 + * @param file 文件对象 + * @throws IOException + */ + public static void writeReport3(List targetList, File file, List> relationListJson, List relationList, JSONObject jsonObj, String raciType) throws IOException { + if (!targetList.isEmpty() && !relationListJson.isEmpty()) { + FileInputStream readFile = null; + try { + readFile = new FileInputStream(file); + // 创建一个Excel文档对象 + HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(readFile)); + // 获得指定sheet 也可以通过 tamplateFileBook.getSheet("定制模板")得到 + HSSFSheet st = wb.getSheetAt(0); + wb.setSheetName(0, targetList.get(0).getString("fileName") + "(" + VersionUtil.getVersionStrV(targetList.get(0).getInteger("fileVersion")) + ")"); + HSSFCellStyle setBorder = null; + setBorder = setCellStyle(wb, "宋体", 12, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.SKY_BLUE.getIndex()); + // 记录每只流程的列号 + Map map = new HashMap(); + // 设置流程名称 + setProcessNameToCell(relationListJson, st, HSSFCell.CELL_TYPE_STRING, map, wb); + Map raciMapCl = new HashMap(); + CellStyle styleBody = wb.createCellStyle(); + styleBody.setRotation((short) -90); + setRACICellShapeValue(map, relationListJson, styleBody, 1, st, HSSFCell.CELL_TYPE_STRING, wb, raciMapCl); + for (List listJson : relationListJson) { + orderBy(listJson, jsonObj); + } + for (int i = 0, rows = targetList.size(); i < rows; i++) { + JSONObject json = targetList.get(i); + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.WHITE.getIndex()); + setCellValue(st, i + 2, 0, getName(json), HSSFCell.CELL_TYPE_STRING, setBorder); + for (int j = 0, size = raciMapCl.size(); j < size; j++) { + setCellBG(st, i + 2, j + 1, setBorder, true); + } + setCellShapeRACI(relationListJson, raciMapCl, json, st, HSSFCell.CELL_TYPE_STRING, wb, setBorder, i); + } + wb.write(new FileOutputStream(file)); + } finally { + if (readFile != null) { + readFile.close(); + } + readFile = null; + } + } + } + + /** + * RACI矩阵分析(组织与流程活动) + * 关联AWS组织 + * @param list 要生成的元数据 + * @param file 文件对象 + * @throws IOException + */ + public static void writeReport3(JSONArray targetList, File file, List> relationListJson, List relationList, JSONObject jsonObj, String raciType) throws IOException { + if (!targetList.isEmpty() && !relationListJson.isEmpty()) { + FileInputStream readFile = null; + try { + readFile = new FileInputStream(file); + // 创建一个Excel文档对象 + HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(readFile)); + // 获得指定sheet 也可以通过 tamplateFileBook.getSheet("定制模板")得到 + HSSFSheet st = wb.getSheetAt(0); + wb.setSheetName(0, "RACI矩阵分析(组织与流程活动)"); + HSSFCellStyle setBorder = null; + setBorder = setCellStyle(wb, "宋体", 12, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.SKY_BLUE.getIndex()); + // 记录每只流程的列号 + Map map = new HashMap(); + // 设置流程名称 + setProcessNameToCell(relationListJson, st, HSSFCell.CELL_TYPE_STRING, map, wb); + Map raciMapCl = new HashMap(); + CellStyle styleBody = wb.createCellStyle(); + styleBody.setRotation((short) -90); + setRACICellShapeValue(map, relationListJson, styleBody, 1, st, HSSFCell.CELL_TYPE_STRING, wb, raciMapCl); + for (List listJson : relationListJson) { + orderBy(listJson, jsonObj); + } + + for (int i = 0, rows = targetList.size(); i < rows; i++) { + JSONObject json = targetList.getJSONObject(i); + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.WHITE.getIndex()); + setCellValue(st, i + 2, 0, getName(json), HSSFCell.CELL_TYPE_STRING, setBorder); + for (int j = 0, size = raciMapCl.size(); j < size; j++) { + setCellBG(st, i + 2, j + 1, setBorder, true); + } + setCellShapeRACI(relationListJson, raciMapCl, json, st, HSSFCell.CELL_TYPE_STRING, wb, setBorder, i); + } + wb.write(new FileOutputStream(file)); + } finally { + if (readFile != null) { + readFile.close(); + } + readFile = null; + } + } + } + + private static void setRACICellShapeValue(Map map, List> relationListJson, CellStyle style0, int row, HSSFSheet st, int cellTypeString, HSSFWorkbook wb, Map raciMapCl) { + // 限定范围的图形id + int col = 1; + for (List list : relationListJson) { + if (!list.isEmpty()) { + String id = list.get(0).getString("fileId"); + int column = map.get(id); + for (JSONObject jsonObject : list) { + String val = getName(jsonObject); + style0 = setCellStyle(wb, style0, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.TOP, IndexedColors.SKY_BLUE.getIndex()); + setCellValue(st, row, column, val, style0); + setCellBG(st, row, column, style0, false); + int length = 0; + try { + length = "R".getBytes("UTF-8").length + 3; + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + st.setColumnWidth((short) column, (short) (length * 256)); + column++; + raciMapCl.put(jsonObject.getString("id"), col); + col++; + } + } + } + } + + /** + * 设置RACI的值 + * + * @param relationListJson + * @param raciMapCl + * @param json + * @param st + * @param cellTypeString + * @param wb + * @param setBorder + * @param i + */ + private static void setCellShapeRACI(List> relationListJson, Map raciMapCl, JSONObject json, HSSFSheet st, int cellTypeString, HSSFWorkbook wb, HSSFCellStyle setBorder, int i) { + for (List relationL : relationListJson) { + String targetId = json.getString("id"); + for (JSONObject jsonObject : relationL) { + List> listMap = getAttrValue(jsonObject, true, true); + for (Map map2 : listMap) { + Set keySet = map2.keySet(); + for (String key : keySet) { + String id = map2.get(key); + if (id != null && id.contains(targetId)) { + String raciValue = getRACI(key); + int columnNum = raciMapCl.get(jsonObject.getString("id")); + HSSFRow hrs = st.getRow(i + 2); + if (hrs != null) { + HSSFCell cell = hrs.getCell(columnNum); + if (cell != null) { + String cellValue = cell.getRichStringCellValue().getString(); + if (cellValue != null && !cellValue.equals("")) { + raciValue = cellValue.trim() + "," + raciValue; + } + } + } + boolean isR = raciValue.contains("R"); + if (isR) { + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.BRIGHT_GREEN.getIndex()); + } else { + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.WHITE.getIndex()); + } + setCellValue(st, i + 2, raciMapCl.get(jsonObject.getString("id")), raciValue, HSSFCell.CELL_TYPE_STRING, setBorder); + } + } + } + } + } + } + + /** + * 流程属性 + * + * @param st + * @param setBorder + * @param map + * @param i + * @param json + */ + private static void setAttrCellValue(HSSFSheet st, HSSFCellStyle setBorder, Map map, int i, JSONObject json) { + List> attrList = getAttrValue(json, false, false); + for (Map map2 : attrList) { + Set keySet = map2.keySet(); + for (String key : keySet) { + + setCellValue(st, i + 2, map.get(key), map2.get(key), HSSFCell.CELL_TYPE_STRING, setBorder); + int length = 0; + try { + length = map2.get(key).getBytes("UTF-8").length + 10; + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + st.setColumnWidth((short) map.get(key).intValue(), (short) (length * 256)); + break; + } + } + } + + /** + * 如果该列定义了R/A/C/I,那么打标 如果行有一个R,对应动态列区域用黄色背景显示 如果行有大于两个R,对应动态列区域用红色背景显示 + * + * @param wb + * @param st + * @param setBorder + * @param i + * @param json + * @param colnumMap + * @return + */ + private static List> setRACICellValue(HSSFWorkbook wb, HSSFSheet st, HSSFCellStyle setBorder, int i, JSONObject json, Map colnumMap, String raciType) { + return setRACICellValue(wb, st, setBorder, i, json, colnumMap, 2, 3, raciType); + } + private static List> setRACICellValue(HSSFWorkbook wb, HSSFSheet st, HSSFCellStyle setBorder, int i, JSONObject json, Map colnumMap, int row, int column, String raciType) { + List> raciList = getAttrValue(json, true, true); + List> resultList = new ArrayList>(); + getHavingRACIValue(raciList, resultList, raciType); + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.WHITE.getIndex()); + + HSSFRow hr = st.getRow(row + i); + if (null == hr) { + hr = st.createRow(row + i); + } + if (colnumMap != null) { + for (int j = 0; j < colnumMap.size(); j++) { + // 获得单元格对象 + HSSFCell hc = hr.getCell(column + j); + if (null == hc) { + hc = hr.createCell(column + j); + } + // 设置单元格border + hc.setCellStyle(setBorder); + } + } + + Set temp = new HashSet(); + Set temp1 = new HashSet(); + for (Map map : resultList) { + Set set = map.keySet(); + for (String key : set) { + temp.add(map.get(key)); + //key = key.replace("[", "").replace("]", "").replace("\"", ""); + if (key.indexOf(",") > 0) { + String keys[] = key.split(","); + if (map.get(key) != null && "R".equals(map.get(key)) && keys.length > 2) { + temp1.add("R"); + } + for (String k : keys) { + String raciValue = map.get(key); + HSSFRow hrs = st.getRow(i + row); + if (hrs != null) { + HSSFCell cell = null; + if (colnumMap != null && colnumMap.containsKey(k)) { + cell = hrs.getCell(colnumMap.get(k)); + } + if (cell != null) { + String cellValue = cell.getRichStringCellValue().getString(); + if (cellValue != null && !cellValue.equals("")) { + raciValue = cellValue.trim() + "," + raciValue; + } + } + } + int value = (colnumMap == null || !colnumMap.containsKey(k)) ? -1 : colnumMap.get(k); + setCellValue(st, i + row, value, raciValue, setBorder); + } + } else { + String raciValue = map.get(key); + HSSFRow hrs = st.getRow(i + row); + if (hrs != null) { + HSSFCell cell = null; + if (colnumMap != null && colnumMap.containsKey(key)) { + cell = hrs.getCell(colnumMap.get(key)); + } + if (cell != null) { + String cellValue = cell.getRichStringCellValue().getString(); + if (cellValue != null && !cellValue.equals("")) { + raciValue = cellValue.trim() + "," + raciValue; + } + } + } + int value = (colnumMap == null || !colnumMap.containsKey(key)) ? -1 : colnumMap.get(key); + setCellValue(st, i + row, value, raciValue, setBorder); + } + } + } + if (!temp.contains("R")) { + if (colnumMap != null) { + for (int j = 0, size = colnumMap.size(); j < size; j++) { + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.YELLOW.getIndex()); + setCellBG(st, i + row, j + column, setBorder, false); + } + } + } + if (temp1.contains("R")) { + if (colnumMap != null) { + for (int j = 0, size = colnumMap.size(); j < size; j++) { + setBorder = setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, true, IndexedColors.RED.getIndex()); + setCellBG(st, i + row, j + column, setBorder, false); + } + } + } + return resultList; + } + + private static void getHavingRACIValue(List> raciList, List> resultList, String raciType) { + for (Map mapRACI : raciList) { + String I = ""; + String C = ""; + String A = ""; + String R = ""; + if ("pal".equals(raciType)) { + I = mapRACI.get("notify_i"); + C = mapRACI.get("counselor_c"); + A = mapRACI.get("approval_a"); + R = mapRACI.get("duty_r"); + } else { + I = mapRACI.get("bpm_notify_i"); + C = mapRACI.get("bpm_counselor_c"); + A = mapRACI.get("bpm_approval_a"); + R = mapRACI.get("bpm_duty_r"); + } + Map map = new HashMap(); + if (I != null && !I.isEmpty()) { + map.put(getIds(I), "I"); + } + if (C != null && !C.isEmpty()) { + map.put(getIds(C), "C"); + } + if (A != null && !A.isEmpty()) { + map.put(getIds(A), "A"); + } + if (R != null && !R.isEmpty()) { + map.put(getIds(R), "R"); + } + if (!map.isEmpty()) + resultList.add(map); + } + } + + private static String getIds(String ids) { + StringBuilder sb = new StringBuilder(); + Set set = new HashSet(); + if (ids.indexOf(",") > 0) { + String strs[] = ids.split(","); + for (String s : strs) { + set.add(s); + } + for (String str : set) { + sb.append(str).append(","); + } + String reslutId = sb.toString(); + reslutId = reslutId.substring(0, reslutId.lastIndexOf(",")); + return reslutId; + } else { + return ids; + } + } + + /** + * + * @param wb 文档对象 + * @param fontName 字体 + * @param fontHeighe 字体大小 + * @param alignment 横向对其方式 + * @param verAlignment 纵向对齐方式 + * @param wapText 是否换行 + * @param bg 单元格背景颜色 + * @return + */ + public static HSSFCellStyle setCellStyle(HSSFWorkbook wb, String fontName, int fontHeighe, HorizontalAlignment center, VerticalAlignment center2, boolean wapText, int bg) { + HSSFCellStyle setBorder = wb.createCellStyle(); + serBorderValue(wb, fontName, fontHeighe, center, center2, wapText, bg, setBorder); + setPatternBorder(setBorder); + return setBorder; + } + + private static void serBorderValue(HSSFWorkbook wb, String fontName, int fontHeighe, HorizontalAlignment center, VerticalAlignment center2, boolean wapText, int bg, HSSFCellStyle setBorder) { + HSSFFont font = wb.createFont(); + font.setFontName(fontName); + font.setFontHeightInPoints((short) fontHeighe);// 设置字体大小 + setBorder.setFont(font); + setBorder.setAlignment(center); // 居中 + setBorder.setVerticalAlignment(center2); + setBorder.setFillForegroundColor((short) bg); + setBorder.setFillPattern(FillPatternType.SOLID_FOREGROUND); + setBorder.setWrapText(wapText); + } + + private static CellStyle setCellStyle(HSSFWorkbook wb, CellStyle setBorder, String fontName, int fontHeighe, HorizontalAlignment alignment, VerticalAlignment verAlignment, int bg) { + HSSFFont font = wb.createFont(); + font.setFontName(fontName); + font.setFontHeightInPoints((short) fontHeighe);// 设置字体大小 + setBorder.setFont(font); + setBorder.setAlignment(alignment); // 居中 + setBorder.setVerticalAlignment(verAlignment); + setBorder.setFillForegroundColor((short) bg); + setBorder.setFillPattern(FillPatternType.SOLID_FOREGROUND); + setPatternBorder(setBorder); + return setBorder; + } + + /** + * 设置单元格边框 + * + * @param cellStyle + */ + private static void setPatternBorder(HSSFCellStyle cellStyle) { + cellStyle.setAlignment(HorizontalAlignment.CENTER); + cellStyle.setBorderBottom(BorderStyle.THIN); + cellStyle.setBottomBorderColor(HSSFColor.BLACK.index); + cellStyle.setBorderLeft(BorderStyle.THIN); + cellStyle.setLeftBorderColor(HSSFColor.BLACK.index); + cellStyle.setBorderRight(BorderStyle.THIN); + cellStyle.setRightBorderColor(HSSFColor.BLACK.index); + cellStyle.setBorderTop(BorderStyle.THIN); + cellStyle.setTopBorderColor(HSSFColor.BLACK.index); + } + + /** + * 设置单元格边框 + * + * @param cellStyle + */ + private static void setPatternBorder(CellStyle cellStyle) { + cellStyle.setAlignment(HorizontalAlignment.CENTER); + cellStyle.setBorderBottom(BorderStyle.THIN); + cellStyle.setBottomBorderColor(HSSFColor.BLACK.index); + cellStyle.setBorderLeft(BorderStyle.THIN); + cellStyle.setLeftBorderColor(HSSFColor.BLACK.index); + cellStyle.setBorderRight(BorderStyle.THIN); + cellStyle.setRightBorderColor(HSSFColor.BLACK.index); + cellStyle.setBorderTop(BorderStyle.THIN); + cellStyle.setTopBorderColor(HSSFColor.BLACK.index); + } + + /** + * 取得一共有多少属性 + * + * @param list + * @return + */ + private static Set getAttrName(List list) { + Set set = new HashSet(); + for (JSONObject json : list) { + JSONObject dataJson = json.getJSONObject("dataAttributes"); + if (dataJson.get("attributesJsonArray").getClass().getName().contains("JSONArray")) { + JSONArray arr = dataJson.getJSONArray("attributesJsonArray"); + for (int i = 0; i < arr.size(); i++) { + JSONObject jsonObj = arr.getJSONObject(i); + if(jsonObj == null || "null".equals(jsonObj.toString())) { + continue; + } + if (jsonObj.containsKey("value")) { + set.add(jsonObj.getString("key")); + } + } + } + } +// set.remove("知会者(I)"); +// set.remove("咨询者(C)"); +// set.remove("审批者(A)"); +// set.remove("责任者(R)"); + set.remove("notify_i"); + set.remove("counselor_c"); + set.remove("approval_a"); + set.remove("duty_r"); + return set; + } + + /** + * 获取编号 + * + * @param json + * @return + */ + public static String getNum(JSONObject json) { + JSONObject dataAttributes = (JSONObject) json.get("dataAttributes"); + JSONArray attributesJsonArray = dataAttributes.getJSONArray("attributesJsonArray"); + for (int i = 0; i < attributesJsonArray.size(); i++) { + JSONObject object = attributesJsonArray.getJSONObject(i); + if (object == null || "null".equals(object.toString())) { + continue; + } + if (object.getString("id").equals("number")) { + return object.getString("value"); + } + } + return ""; + } + + /** + * 获取描述信息 + * + * @param json + * @return + */ + private static String getDesc(JSONObject json) { + JSONObject dataAttributes = (JSONObject) json.get("dataAttributes"); + JSONArray attributesJsonArray = dataAttributes.getJSONArray("attributesJsonArray"); + for (int i = 0; i < attributesJsonArray.size(); i++) { + JSONObject object = attributesJsonArray.getJSONObject(i); + if (object == null || "null".equals(object.toString())) { + continue; + } + if (object.getString("id").equals("desc")) { + return object.getString("value"); + } + } + return ""; + } + + // 单元格写入数据 + private static HSSFCell setCellValue(HSSFSheet st, int row, int column, String value, int cellType, HSSFCellStyle setBorder) { + HSSFRow hrs = st.getRow(row); + if (null == hrs) { + hrs = st.createRow(row); + } + // 获得单元格对象 + HSSFCell cell = hrs.getCell(column); + if (null == cell) { + cell = hrs.createCell(column); + } + // 设置存入内容的类型 + cell.setCellType(cellType); + // 向单元格中放入值 + cell.setCellValue(value); + cell.setCellStyle(setBorder); + return cell; + } + + // 单元格写入数据 + private static HSSFCell setCellValue(HSSFSheet st, int row, int column, String value, CellStyle setBorder) { + if (column == -1) { + return null; + } + if (value == null) { + value = ""; + } + HSSFRow hrs = st.getRow(row); + if (null == hrs) { + hrs = st.createRow(row); + } + // 获得单元格对象 + HSSFCell cell = hrs.getCell(column); + if (null == cell) { + cell = hrs.createCell(column); + } + // 设置存入内容的类型 + // 向单元格中放入值 + cell.setCellValue(value); + cell.setCellStyle(setBorder); + return cell; + } + + private static void setCellBG(HSSFSheet st, int row, int column, CellStyle setBorder, boolean isLeft) { + HSSFRow hrs = st.getRow(row); + if (null == hrs) { + hrs = st.createRow(row); + } + // 获得单元格对象 + HSSFCell cell = hrs.getCell(column); + if (null == cell) { + cell = hrs.createCell(column); + cell.setCellValue(""); + } else { + cell.setCellValue(cell.getStringCellValue()); + } + + setPatternBorder(setBorder); + if (isLeft) { + setBorder.setAlignment(HorizontalAlignment.LEFT); // 居中 + setBorder.setVerticalAlignment(VerticalAlignment.CENTER); + } + // 向单元格中放入值 + cell.setCellStyle(setBorder); + } + + /** + * 获取流程步骤 + * + * @param json + * @return + */ + private static String getName(JSONObject json) { + return json.getString("text"); + + } + + /** + * 得到属性值 + * + * @param json + * @param isRelation 是否得到关联的属性 + * @return + */ + private static List> getAttrValue(JSONObject json, boolean isRelation, boolean isRACI) { + List> list = new ArrayList>(); + JSONObject dataJson = json.getJSONObject("dataAttributes"); + if (dataJson.get("attributesJsonArray").getClass().getName().contains("JSONArray")) { + JSONArray arr = dataJson.getJSONArray("attributesJsonArray"); + for (int i = 0; i < arr.size(); i++) { + JSONObject jsonObj = arr.getJSONObject(i); + if(jsonObj == null || "null".equals(jsonObj.toString())) { + continue; + } + if (isRelation) { + getRelationJson(isRACI, list, jsonObj); + } else { + getNotRelationJson(list, jsonObj); + } + } + } + return list; + } + + /** + * 得到不是关联的属性值,去除RACI类行 + * + * @param list + * @param jsonObj + */ + private static void getNotRelationJson(List> list, JSONObject jsonObj) { + if (jsonObj.containsKey("value")) { +// if (jsonObj.getString("name").contains("责任者(R)") || jsonObj.getString("name").contains("审批者(A)") || jsonObj.getString("name").contains("咨询者(C)") || jsonObj.getString("name").contains("知会者(I)")) { +// return; +// } + // 由汉字改为key + if (jsonObj.getString("key").contains("duty_r") || jsonObj.getString("key").contains("approval_a") || jsonObj.getString("key").contains("counselor_c") || jsonObj.getString("key").contains("notify_i")) { + return; + } + Map map = new HashMap(); + String value = jsonObj.getString("value"); + if ("relation".equals(jsonObj.getString("type"))) { + value = getValueFromDB(jsonObj.getString("value")); + } + // map.put(jsonObj.getString("name"), value); + map.put(jsonObj.getString("key"), value); + list.add(map); + } + } + + /** + * 得到RACI类型的值 + * + * @param isRACI + * @param list + * @param jsonObj + */ + private static void getRelationJson(boolean isRACI, List> list, JSONObject jsonObj) { + if (jsonObj.containsKey("value") && "relation".equals(jsonObj.getString("type"))) { + Map map = new HashMap(); + if (isRACI) { + map.put(jsonObj.getString("key"), jsonObj.getString("value").replace("[", "").replace("]", "").replace("\"", "")); + } else { + String value = getValueFromDB(jsonObj.getString("value")); + map.put(jsonObj.getString("key"), value); + } + list.add(map); + } + if (jsonObj.containsKey("value") && ("awsorg".equals(jsonObj.getString("type")))) {// aws平台组织类型 + Map map = new HashMap(); + if (isRACI) { + map.put(jsonObj.getString("key"), jsonObj.getString("value").replace("[", "").replace("]", "").replace("\"", "").replace(" ", ",")); + } + list.add(map); + } + } + + /** + * 从数据库中取得关联关系 + * + * @param ids 关联的id + * @return + */ + private static String getValueFromDB(String ids) { + String shapeId = createIds(ids); + List list = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getRelationValue(shapeId); + if (!list.isEmpty()) { + StringBuilder result = new StringBuilder(); + for (String value : list) { + result.append(value).append(","); + } + String re = result.toString(); + re = re.substring(0, re.lastIndexOf(",")); + return re; + } + return ""; + } + + /** + * 设置注释 + * + * @param wb + * @param st + * @param cell + * @param commentText + * @param author + */ + private static void setComment(HSSFWorkbook wb, HSSFSheet st, Cell cell, String commentText, String author) { + HSSFCreationHelper createHelper = (HSSFCreationHelper) wb.getCreationHelper(); + Drawing patriarch = st.createDrawingPatriarch(); + // 注释 + HSSFClientAnchor clientAnchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5); + Comment comment = patriarch.createCellComment(clientAnchor); + comment.setString(createHelper.createRichTextString(commentText)); + comment.setAuthor(author); + cell.setCellComment(comment); + + } + + private static String createIds(final String ids) { + Set set = new HashSet(); + if (ids.indexOf(",") > 0) { + String[] strs = ids.split(","); + for (String id : strs) { + set.add(id.trim()); + } + } else { + set.add(ids.trim()); + } + StringBuilder sb = new StringBuilder(); + for (String id : set) { + sb.append("'").append(id).append("',"); + } + String shapeId = sb.toString(); + shapeId = shapeId.substring(0, shapeId.lastIndexOf(",")); + return shapeId; + } + + /** + * list 排序 + * + * @author wangyh + * + * 2014年7月18日 + */ + private static class ComparatorJson implements Comparator { + private boolean byName = false; + + public void setByName(boolean byName) { + this.byName = byName; + } + + @Override + public int compare(JSONObject json1, JSONObject json2) { + if (byName) + return getName(json1).compareTo(getName(json2)); + else { + String number1 = getNum(json1); + String number2 = getNum(json2); + if (!OutputUtil.isPositiveInteger(number1) || !OutputUtil.isPositiveInteger(number2)) { + return number1.compareTo(number2); + } else { + Integer n1 = 0; + Integer n2 = 0; + n1 = Integer.parseInt(number1); + n2 = Integer.parseInt(number2); + return n1.compareTo(n2); + } + } + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/util/OutputUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/util/OutputUtil.java new file mode 100644 index 00000000..969b4d09 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/util/OutputUtil.java @@ -0,0 +1,20 @@ +package com.actionsoft.apps.coe.pal.pal.output.util; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class OutputUtil { + //判断是不是整数 + public static boolean isPositiveInteger(String orginal) { + return isMatch("^\\+{0,1}[1-9]\\d*", orginal); + } + + public static boolean isMatch(String regex, String orginal){ + if (orginal == null || orginal.trim().equals("")) { + return false; + } + Pattern pattern = Pattern.compile(regex); + Matcher isNum = pattern.matcher(orginal); + return isNum.matches(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/util/OutputWordUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/util/OutputWordUtil.java new file mode 100644 index 00000000..b96a733a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/output/util/OutputWordUtil.java @@ -0,0 +1,1002 @@ +package com.actionsoft.apps.coe.pal.pal.output.util; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.org.model.RoleModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.dao.DesignerShapeRelationDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.sdk.local.SDK; + +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public class OutputWordUtil { + + public static final String DEPARTMENT = "department"; // 部门 + public static final String POSITION = "position"; // 岗位 + public static final String COMPANY = "company"; // 公司 + public static final String GENERATEDATE = "generate_date"; // 文档创建日期 + public static final String ORGDUTIE = "org_dutie"; // 岗位职责 + + public static final String TABLE_REPOSITORY = "repository_table"; // 流程table + public static final String TABLE_REPOSITORY_SHAPE = "repository_shape_table"; // 流程步骤table + public static final String TABLE_INSTITUTION = "institution_table"; // 制度table + public static final String TABLE_FORM = "form_table"; // 表单table + public static final String TABLE_IT_SYSTEM = "itsystem_table"; // 信息系统table + public static final String TABLE_KPI = "KPI_table"; // 绩效table + public static final String TABLE_DANGER = "danger_table"; // 风控要求table + public static final String TABLE_REGULATE = "regulate_table"; // 风控(控制)要求table + + public static final String REPOSITORY_NAME = "repository_name"; // 流程名 + public static final String PL_NUMBER = "pl_number"; // 流程编号 + public static final String PL_RESPONSIBLE_PERSON = "pl_responsible_person"; // 责任人 + public static final String PL_RESPONSIBLE_DEPARTMENT = "pl_responsible_department"; // 责任部门 + public static final String PL_EXECUTIVE_ARM = "pl_executive_arm"; // 流程执行部门 + public static final String PL_INPUT = "pl_input"; // 流程输入 + public static final String PL_OUTPUT = "pl_output"; // 流程输出 + public static final String PL_DESC = "pl_desc"; // 流程说明 + public static final String PL_CREATE_USER = "pl_create_user"; // 编制人 + public static final String PL_VERSION = "pl_version"; // 版本号 + public static final String PL_RESPONSIBILITY = "pl_responsibility"; // 主要人员职责描述 + public static final String PL_BUSINESS = "pl_business"; // 关键业务逻辑规则 + public static final String PL_LEAD_PROCESS = "pl_lead_process"; // 前置流程 + public static final String PL_REAR_PROCESS = "pl_rear_process"; // 后置流程 + public static final String PL_ITSYSTEM = "pl_itsystem"; // 相关IT系统 + public static final String PL_DIAGRAM = "pl_diagram"; // 流程图 + public static final String PL_DIAGRAM_WIDTH = "pl_diagram_width"; // 流程图宽度 + public static final String PL_DIAGRAM_HEIGHT = "pl_diagram_height"; // 流程图高度 + public static final int PL_DIAGRAM_MAX_WIDTH = 480; + public static final int PL_DIAGRAM_MAX_HEIGHT = 676; + + public static final String SERIAL_NUMBER = "serial_number"; // 序号 + public static final String SHAPE_ID = "shape_id"; // 流程图形元素id + public static final String SHAPE_NAME = "shape_name"; // 流程图形元素名称 + public static final String SHAPE_NUMBER = "shape_number"; // 步骤编号 + public static final String SHAPE_DESC = "shape_desc"; // 工作详细描述 + public static final String SHAPE_INSTITUTION = "shape_institution"; // 制度要求 + public static final String SHAPE_DANGER = "shape_danger"; // 风险点 + public static final String SHAPE_KPI = "shape_kpi"; // 指标 + public static final String SHAPE_FORM = "shape_form"; // 作业单据 + public static final String SHAPE_HANDLE_TIME = "shape_handle_time"; // 处理时间 + public static final String SHAPE_ITSYSTEM = "shape_itsystem"; // 信息系统 + public static final String SHAPE_VERSION = "shape_version"; // 版本号 + public static final String SHAPE_APPLICATION_SCOPE = "shape_application_scope"; // 适用范围 + public static final String SHAPE_TARGET_VALUE = "shape_target_value"; // 指标值 + public static final String SHAPE_DUTY_R = "shape_duty_r"; // 责任者 + + public static final String SHAPE_BUSINESS = "shape_business";// 业务规则 + public static final String SHAPE_INPUT = "shape_input";// 输入 + public static final String SHAPE_OUT = "shape_out";// 输出 + + public static final String SHAPE_EFFECT = "shape_effect"; // 风险影响 + public static final String SHAPE_PROBABILITY = "shape_probability"; // 风险概率 + public static final String SHAPE_TARGET = "shape_target"; // 控制目标 + public static final String SHAPE_FREQUENCY = "shape_frequency"; // 控制频率 + public static final String SHAPE_MEASURE = "shape_measure"; // 控制措施 + public static final String SHAPE_CALCULATION_METHOD = "shape_calculation_method"; // 计算公式 + public static final String SHAPE_CALCULATION_PROPORTION = "shape_calculation_proportion"; // 计算比例 + public static final String SHAPE_CALCULATION_FREQUENCY = "shape_calculation_frequency"; // 计算频率 + public static final String SHAPE_RELATION_NAME = "shape_relation_name"; // 关联性质名 + + //word换行符 + public static final String WRAPSTRING = ""; + + /** + * 生成word文件 + * + * @param dataMap + * @param tempPath + * @param tempName + * @param docName + */ + public static void createDoc(JSONObject dataMap, String tempPath, String tempName, String docName) { + Configuration configuration = new Configuration(); + configuration.setDefaultEncoding("UTF-8"); + + // 设置模本装置方法和路径 + try { + UtilFile temps = new UtilFile(tempPath); + configuration.setDirectoryForTemplateLoading(temps); + } catch (IOException e2) { + e2.printStackTrace(); + } + Template t = null; + try { + t = configuration.getTemplate(tempName, "UTF-8"); + } catch (IOException e) { + e.printStackTrace(); + } + // 输出文档路径及名称 + File outFile = new File(docName); + Writer out = null; + try { + out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8")); + } catch (Exception e1) { + e1.printStackTrace(); + } + + try { + t.process(dataMap, out); + out.flush(); + out.close(); + } catch (TemplateException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 生成word文件 + * + * @param dataMap + * @param tempPath + * @param tempName + * @param docName + */ + public static void createDoc2(com.alibaba.fastjson.JSONObject dataMap, String tempPath, String tempName, String docName) { + Configuration configuration = new Configuration(); + configuration.setDefaultEncoding("UTF-8"); + + // 设置模本装置方法和路径 + try { + UtilFile temps = new UtilFile(tempPath); + configuration.setDirectoryForTemplateLoading(temps); + } catch (IOException e2) { + e2.printStackTrace(); + } + Template t = null; + try { + t = configuration.getTemplate(tempName, "UTF-8"); + } catch (IOException e) { + e.printStackTrace(); + } + // 输出文档路径及名称 + File outFile = new File(docName); + Writer out = null; + try { + out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8")); + } catch (Exception e1) { + e1.printStackTrace(); + } + + try { + if (t!= null && out != null) { + t.process(dataMap, out); + out.flush(); + out.close(); + } + } catch (TemplateException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 将文件的扩展属性设置默认值为空字符串(防止没有设置扩展属性而使得导出文件出错) + * + * @param methodScope + * @param dataMap + */ + public static void setRepositoryDefaultValue(String methodScope, JSONObject dataMap) { + List attributes = new ArrayList(); + String[] methodIds = methodScope.split(","); + for (String methodId : methodIds) { + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(methodId); + if (palMethodModel != null) { + attributes.addAll(palMethodModel.getAttributes()); + } + } + + if (attributes != null) { + for (PALMethodAttributeModel attribute : attributes) { + String scope = attribute.getScope(); + if (scope.indexOf("%") > -1) { + dataMap.put("pl_" + attribute.getKey(), ""); + } + } + } + } + + /** + * 将文件的扩展属性设置默认值为空字符串(防止没有设置扩展属性而使得导出文件出错) + * com.alibaba.fastjson + * @param methodScope + * @param dataMap + */ + public static void setRepositoryDefaultValue2(String methodScope, JSONObject dataMap) { + List attributes = new ArrayList(); + String[] methodIds = methodScope.split(","); + for (String methodId : methodIds) { + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(methodId); + if (palMethodModel != null) { + attributes.addAll(palMethodModel.getAttributes()); + } + } + + if (attributes != null) { + for (PALMethodAttributeModel attribute : attributes) { + String scope = attribute.getScope(); + if (scope.indexOf("%") > -1) { + dataMap.put("pl_" + attribute.getKey(), ""); + } + } + } + } + + /** + * 将文件中图形元素的扩展属性默认值设为空字符串(防止没有设置扩展属性而使得导出文件出错) + * + * @param repositoryId + * @param _tr + */ + public static void setShapeDefaultValue(String repositoryId, JSONObject _tr) { + List attributes = new ArrayList(); + PALRepositoryModel repositoryModel = PALRepositoryCache.getCache().get(repositoryId); + String methodId = repositoryModel.getMethodId(); + if ("control".equals(methodId.substring(0, methodId.indexOf(".")))) { + PALMethodModel palMethodModel_kpi = PALMethodCache.getPALMethodModelById("control.kpi"); + PALMethodModel palMethodModel_policy = PALMethodCache.getPALMethodModelById("control.policy"); + PALMethodModel palMethodModel_risk = PALMethodCache.getPALMethodModelById("control.risk"); + attributes.addAll(palMethodModel_kpi.getAttributes()); + attributes.addAll(palMethodModel_policy.getAttributes()); + attributes.addAll(palMethodModel_risk.getAttributes()); + } else { + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(repositoryModel.getMethodId()); + attributes.addAll(palMethodModel.getAttributes()); + } + + _tr.put(OutputWordUtil.SHAPE_NUMBER, ""); + _tr.put(OutputWordUtil.SHAPE_NAME, ""); + if (attributes != null) { + for (PALMethodAttributeModel attribute : attributes) { + String scope = attribute.getScope(); + if (!"%".equals(scope)) { + _tr.put("shape_" + attribute.getKey(), ""); + } + if ("organization".equals(attribute.getGroupPath())) { + _tr.put("shape_" + attribute.getKey() + "_org", ""); + _tr.put("shape_" + attribute.getKey() + "_role", ""); + } + } + } + } + + /** + * 将文件中图形元素的扩展属性默认值设为空字符串(防止没有设置扩展属性而使得导出文件出错) + * @param repositoryId + * @param _tr + */ + public static void setShapeDefaultValue2(String repositoryId, JSONObject _tr) { + List attributes = new ArrayList(); + PALRepositoryModel repositoryModel = PALRepositoryCache.getCache().get(repositoryId); + String methodId = repositoryModel.getMethodId(); + if ("control".equals(methodId.substring(0, methodId.indexOf(".")))) { + PALMethodModel palMethodModel_kpi = PALMethodCache.getPALMethodModelById("control.kpi"); + PALMethodModel palMethodModel_policy = PALMethodCache.getPALMethodModelById("control.policy"); + PALMethodModel palMethodModel_risk = PALMethodCache.getPALMethodModelById("control.risk"); + attributes.addAll(palMethodModel_kpi.getAttributes()); + attributes.addAll(palMethodModel_policy.getAttributes()); + attributes.addAll(palMethodModel_risk.getAttributes()); + } else { + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(repositoryModel.getMethodId()); + attributes.addAll(palMethodModel.getAttributes()); + } + + _tr.put(OutputWordUtil.SHAPE_NUMBER, ""); + _tr.put(OutputWordUtil.SHAPE_NAME, ""); + if (attributes != null) { + for (PALMethodAttributeModel attribute : attributes) { + String scope = attribute.getScope(); + if (!"%".equals(scope)) { + _tr.put("shape_" + attribute.getKey(), ""); + } + if ("organization".equals(attribute.getGroupPath())) { + _tr.put("shape_" + attribute.getKey() + "_org", ""); + _tr.put("shape_" + attribute.getKey() + "_role", ""); + } + } + } + } + + /** + * 字符串去重(Set本身有去重功能) + * + * @param str 要去重的字符串 + * @param separator 分隔符 + * @return + */ + public static String removeRepeat(String str, String separator) { + Set set = string2set(str, separator); + return set2string(set); + } + + public static Set string2set(String str, String separator) { + Set set = new LinkedHashSet(); + if (str != null && !"".equals(str)) { + String[] array = str.split(separator); + for (String string : array) { + set.add(string); + } + } + return set; + } + + public static String set2string(Set set) { + StringBuilder result = new StringBuilder(); + if (set.size() > 0) { + for (Iterator it = set.iterator(); it.hasNext();) { + result.append(it.next()); + result.append(","); + } + } + + if (result.indexOf(",") != -1) { + return result.substring(0, result.length() - 1); + } else { + return result.toString(); + } + } + + /** + * 如果图形元素属性中有关联的图形,获取关联的流程文件的数据Table + * + * @param table + * @param relationShapeIds + */ + @Deprecated + public static void setTableValue(JSONArray table, String relationShapeIds) { + relationShapeIds = relationShapeIds.replace("[", "").replace("]", "").replace("\"", ""); + String[] relationShapeIdArray = relationShapeIds.split(","); + List relationModelList = new ArrayList(); + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + for (String relationShapeId : relationShapeIdArray) { + if (UtilString.isEmpty(relationShapeId)) { + continue; + } + List relationModels = dao.query(null, null, null, null, relationShapeId); + if (relationModels != null && relationModels.size() > 0) { + relationModelList.addAll(relationModels); + } + } + + if (relationModelList != null && relationModelList.size() > 0) { + int index = 1; + for (DesignerShapeRelationModel repositoryShape : relationModelList) { + String relationFileId = repositoryShape.getRelationFileId(); + if (relationFileId == null || "".equals(relationFileId)) { + continue; + } + List> relationFileElements = CoeDesignerUtil.getShapeMessageJson2(relationFileId); // 关联流程文件内容 + if (relationFileElements == null || relationFileElements.size() == 0) { + continue; + } + + for (Map element : relationFileElements) { + String id = (String) element.get("id"); + if (relationShapeIds.indexOf(id) != -1) { + JSONObject _tr = new JSONObject(); + OutputWordUtil.setShapeDefaultValue(repositoryShape.getRelationFileId(), _tr); + String name = element.get("text").toString(); + _tr.put(OutputWordUtil.SHAPE_NAME, name.replace("\n", OutputWordUtil.WRAPSTRING)); + _tr.put(OutputWordUtil.SERIAL_NUMBER, index); + + JSONObject dataAttributes = (JSONObject) element.get("attributes"); + if (dataAttributes != null) { + com.alibaba.fastjson.JSONArray dataAttributesJsonArray = dataAttributes.getJSONArray("attributesJsonArray"); + for (int i = 0; i < dataAttributesJsonArray.size(); i++) { + JSONObject dataAttribute = dataAttributesJsonArray.getJSONObject(i); + if(dataAttribute == null || "null".equals(dataAttribute.toString())) { + continue; //跳过dataAttributesJsonArray中的空 + } + if (dataAttribute.containsKey("key") && dataAttribute.containsKey("value")) { + _tr.put("shape_" + dataAttribute.getString("key"), dataAttribute.getString("value")); + } + } + if (dataAttributes.containsKey("privateAttributeContent")) { + String privateAttributeContentStr = dataAttributes.get("privateAttributeContent").toString(); + //basic类型的privateAttributeContent属性为“[]”,其他类型模型的该属性为JSONObject格式 + if (!"".equals(privateAttributeContentStr) && !"[]".equals(privateAttributeContentStr)) { + String firstChart = privateAttributeContentStr.substring(0, 1); + if ("{".equals(firstChart)) { + JSONObject privateAttributeContent = dataAttributes.getJSONObject("privateAttributeContent"); + for (String key : privateAttributeContent.keySet()) { + _tr.put("shape_" + key, privateAttributeContent.getString(key)); + } + // Iterator it = privateAttributeContent.keys(); + // while (it.hasNext()) { + // String key = (String) it.next(); + // _tr.put("shape_" + key, privateAttributeContent.getString(key)); + // } + } + } + } + } + + table.add(_tr); + index++; + relationShapeIds = relationShapeIds.replace(id, ""); + } + } + } + + } + } + + /** + * 如果图形元素属性中有关联的图形,获取关联的流程文件的数据Table + * com.alibaba.fastjson + * @param repositoryId + * @param table + * @param relationShapeIds + */ + @Deprecated + public static void setTableValue2(String repositoryId, com.alibaba.fastjson.JSONArray table, String relationShapeIds) { + // 记录关联属性的流程节点,防止多次查询重复文件信息耗费时间 + Set relationFileIds = new HashSet<>(); + List> relationFileElements2 = new ArrayList>(); + + relationShapeIds = relationShapeIds.replace("[", "").replace("]", "").replace("\"", ""); + if (!"".equals(relationShapeIds)) { + String[] relationShapeIdArray = relationShapeIds.split(","); + Set relationShapeIdSet = new HashSet<>(Arrays.asList(relationShapeIdArray)); // 去重 + Set fileIdSet = new HashSet<>(); + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + for (String relationShapeId : relationShapeIdSet) { + List relationModels = dao.query(repositoryId, null, null, null, relationShapeId); + if (relationModels != null && relationModels.size() > 0) { + for (int i = 0; i < relationModels.size(); i++) { + String relationFileId = relationModels.get(i).getRelationFileId(); + if (relationFileId == null || "".equals(relationFileId)) { + continue; + } + if (!fileIdSet.contains(relationFileId)) { + fileIdSet.add(relationFileId); + } + } + } + } + + if (fileIdSet.size() > 0) { + for (String fileId : fileIdSet) { + if (relationFileIds.contains(fileId)) {// 该文件已查询过,不再重复查询 + + } else { + List> fileElements = CoeDesignerUtil.getShapeMessageJson2(fileId); // 关联流程文件内容 + if (fileElements != null && fileElements.size() > 0) { + relationFileIds.add(fileId); + relationFileElements2.addAll(fileElements); + } + } + } + } + int index = 1; + for (String relationShapeId : relationShapeIdSet) { + for (Map element : relationFileElements2) { + String id = (String) element.get("id"); + if (relationShapeId.equals(id)) { + com.alibaba.fastjson.JSONObject _tr = new com.alibaba.fastjson.JSONObject(); + OutputWordUtil.setShapeDefaultValue2((String) element.get("pid"), _tr); + String name = specialCharTransfer(element.get("text").toString()); + _tr.put(OutputWordUtil.SHAPE_NAME, name.replace("\n", OutputWordUtil.WRAPSTRING)); + _tr.put(OutputWordUtil.SERIAL_NUMBER, index); + + com.alibaba.fastjson.JSONObject dataAttributes = (com.alibaba.fastjson.JSONObject) element.get("attributes"); + if (dataAttributes != null) { + com.alibaba.fastjson.JSONArray dataAttributesJsonArray = dataAttributes.getJSONArray("attributesJsonArray"); + for (int i = 0; i < dataAttributesJsonArray.size(); i++) { + com.alibaba.fastjson.JSONObject dataAttribute = dataAttributesJsonArray.getJSONObject(i); + if (dataAttribute == null || "null".equals(dataAttribute.toString())) { + continue; + } + if (dataAttribute.containsKey("key") && dataAttribute.containsKey("value")) { + _tr.put("shape_" + dataAttribute.getString("key"), specialCharTransfer(dataAttribute.getString("value"))); + } + } + if (dataAttributes.containsKey("privateAttributeContent")) { + String privateAttributeContentStr = dataAttributes.get("privateAttributeContent").toString(); + if (!"".equals(privateAttributeContentStr) && !"[]".equals(privateAttributeContentStr)) { + String firstChart = privateAttributeContentStr.substring(0, 1); + if ("{".equals(firstChart)) { + com.alibaba.fastjson.JSONObject privateAttributeContent = dataAttributes.getJSONObject("privateAttributeContent"); + for (String key : privateAttributeContent.keySet()) { + _tr.put("shape_" + key, specialCharTransfer(privateAttributeContent.getString(key))); + } + } + } + } + } + + table.add(_tr); + index++; + break; + } + } + } + } + + } + + /** + * 获取一行数据信息(包括扩展属性) + * + * @param _tr + * @param shapeIds + * @param key + */ + @Deprecated + public static void setTrValue(JSONObject _tr, String shapeIds, String key, Map shapeModelMap) { + shapeIds = shapeIds.replace("[", "").replace("]", "").replace("\"", ""); + shapeIds = removeRepeat(shapeIds, ","); + String[] shapeIdArray = shapeIds.split(","); + List relationModelList = new ArrayList(); + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + for (String shapeId : shapeIdArray) { + List relationModels = dao.query(null, null, null, null, shapeId); + if (relationModels != null && relationModels.size() > 0) { + relationModelList.addAll(relationModels); + } + } + + StringBuffer sbOrg = new StringBuffer(""); + StringBuffer sbRole = new StringBuffer(""); + + if (relationModelList != null && relationModelList.size() > 0) { + for (DesignerShapeRelationModel repositoryShape : relationModelList) { + if (!shapeModelMap.containsKey(repositoryShape.getRelationShapeId())) { + continue; + } + + String relationFileId = repositoryShape.getRelationFileId(); + List> relationFileElements = CoeDesignerUtil.getShapeMessageJson2(relationFileId); // 关联流程文件内容 + if (relationFileElements != null) { + for (Map element : relationFileElements) { + String id = (String) element.get("id"); + if (shapeIds.indexOf(id) != -1) { + String type = element.get("type").toString(); + if ("organization".equals(type)) { + sbOrg.append(element.get("text").toString().replace("\n", OutputWordUtil.WRAPSTRING)); + sbOrg.append(","); + } else if ("position".equals(type) || "role".equals(type)) { + sbRole.append(element.get("text").toString().replace("\n", OutputWordUtil.WRAPSTRING)); + sbRole.append(","); + } + + com.alibaba.fastjson.JSONObject dataAttributes = (com.alibaba.fastjson.JSONObject) element.get("attributes"); + if (dataAttributes != null) { + com.alibaba.fastjson.JSONArray dataAttributesJsonArray = dataAttributes.getJSONArray("attributesJsonArray"); + for (int i = 0; i < dataAttributesJsonArray.size(); i++) { + com.alibaba.fastjson.JSONObject dataAttribute = dataAttributesJsonArray.getJSONObject(i); + if(dataAttribute == null || "null".equals(dataAttribute.toString())) { + continue; + } + if (dataAttribute.containsKey("key") && dataAttribute.containsKey("value")) { + _tr.put("shape_" + dataAttribute.getString("key"), dataAttribute.getString("value")); + } + } + } + shapeIds = shapeIds.replace(id, ""); + } + } + } + } + + } + String sbOrgString = sbOrg.toString(); + if (sbOrgString.lastIndexOf(",") > 0) { + sbOrgString = sbOrgString.substring(0, sbOrgString.length() - 1); + } + String sbRoleString = sbRole.toString(); + if (sbRoleString.lastIndexOf(",") > 0) { + sbRoleString = sbRoleString.substring(0, sbRoleString.length() - 1); + } + _tr.put(key + "_org", sbOrgString); + _tr.put(key + "_role", sbRoleString); + } + + /** + * 获取一行地址簿相关的数据信息 + * + * @param _tr + * @param shapeIds + * @param key + */ + @Deprecated + public static void setTrAwsOrgValue(JSONObject _tr, String shapeIds, String key, Map shapeModelMap) { + shapeIds = shapeIds.replace("[", "").replace("]", "").replace("\"", ""); + shapeIds = removeRepeat(shapeIds, " "); + String[] shapeIdArray = shapeIds.split(","); + StringBuffer sbOrg = new StringBuffer(""); + StringBuffer sbRole = new StringBuffer(""); + for (String keyId : shapeIdArray) { + if (!UtilString.isEmpty(keyId) && shapeModelMap.containsKey(keyId)) { + String text = shapeModelMap.get(keyId); + JSONObject object = JSONObject.parseObject(text); + String type = object.getString("type"); + if ("department".equals(type)) {// 部门 + DepartmentModel deptModel = SDK.getORGAPI().getDepartmentById(keyId); + if (deptModel != null) { + sbOrg.append(specialCharTransfer(deptModel.getName())).append(","); + } + } + if ("user".equals(type)) {// 人员 + UserModel userModel = SDK.getORGAPI().getUser(keyId); + if (userModel != null) { + sbOrg.append(specialCharTransfer(userModel.getUserName())).append(","); + } + } + if ("role".equals(type)) {// 角色 + RoleModel roleModel = SDK.getORGAPI().getRoleById(keyId); + if (roleModel != null) { + sbRole.append(specialCharTransfer(roleModel.getName())).append(","); + } + } + } + } + String sbOrgString = sbOrg.toString(); + if (sbOrgString.lastIndexOf(",") > 0) { + sbOrgString = sbOrgString.substring(0, sbOrgString.length() - 1); + } + String sbRoleString = sbRole.toString(); + if (sbRoleString.lastIndexOf(",") > 0) { + sbRoleString = sbRoleString.substring(0, sbRoleString.length() - 1); + } + _tr.put(key + "_org", sbOrgString); + _tr.put(key + "_role", sbRoleString); + } + + /** + * 获取图形实例的关联Model Map + * + * @param shapeId + * @return + */ + @Deprecated + public static Map getShapeRelationMap(String shapeId) { + Map relationMap = new HashMap(); + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + List relationModels = dao.query(null, shapeId, null, null, null); + if (relationModels != null && relationModels.size() > 0) { + for (DesignerShapeRelationModel model : relationModels) { + relationMap.put(model.getRelationShapeId(), model.getRelationShapeText()); + } + } + return relationMap; + } + + /** + * 获取图形实例的关联Model Map + * + * @param shapeId + * @return + */ + @Deprecated + public static Map getShapeRelationMap(String fileId, String shapeId) { + Map relationMap = new HashMap(); + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + List relationModels = dao.query(fileId, shapeId, null, null, null); + if (relationModels != null && relationModels.size() > 0) { + for (DesignerShapeRelationModel model : relationModels) { + if ("00000000-0000-0000-0000-000000000000".equals(model.getRelationFileId()) && "00000000-0000-0000-0000-000000000000".equals(model.getRelationShapeId())) { + String text = model.getRelationShapeText(); + relationMap.put(JSONObject.parseObject(text).getString("id"), text); + } else { + relationMap.put(model.getRelationShapeId(), model.getRelationShapeText()); + } + } + } + return relationMap; + } + + /** + * 获取图形实例的关联Model Map + * @param fileId + * @param shapeId + * @return + */ + public static Map> getShapeRelationAttrMap(String fileId, String shapeId) { + List list = new DesignerShapeRelationDao().query(fileId, shapeId, null, null, null); + Map> map = new HashMap<>(); + for (DesignerShapeRelationModel model : list) { + if (!map.containsKey(model.getAttrId())) { + map.put(model.getAttrId(), new ArrayList()); + } + map.get(model.getAttrId()).add(model); + } + return map; + } + + /** + * 将图形元素关联属性的id替换为name + * + * @param key + * @param dataAttribute 图形元素所有关联属性 + * @param shapeRelationModelMap + * @return + */ + @Deprecated + public static void setShapeValue(JSONObject _tr, JSONObject dataAttribute, Map shapeRelationModelMap) { + String result = ""; + String key = dataAttribute.getString("key"); + if ("string".equals(dataAttribute.getString("type")) || "textarea".equals(dataAttribute.getString("type"))) { + result = dataAttribute.getString("value"); + } else { + StringBuilder keyValue = new StringBuilder(); + List keyValueList = new ArrayList(); + if (key != null) { + String attributeValue = dataAttribute.getString("value"); + if (attributeValue != null && attributeValue.length() != 0) { + attributeValue = attributeValue.replace("[", "").replace("]", "").replace("\"", ""); + String[] keyValues = removeRepeat(attributeValue, ",").split(","); + for (String keyId : keyValues) { + if (!"".equals(keyId) && shapeRelationModelMap.containsKey(keyId)) { + keyValueList.add(shapeRelationModelMap.get(keyId)); + } + } + for (String value : keyValueList) { + keyValue.append(value + ","); + } + + if (keyValue.length() > 0) { + result = keyValue.toString().substring(0, keyValue.length() - 1); + } + } + } + } + + _tr.put("shape_" + key, result.replace("\n", OutputWordUtil.WRAPSTRING)); + } + + /** + * 查询横版特殊信息 + * + * 查询部门、岗位、角色 + * + * 部门、岗位、角色的区分依据在相应的流程源文件,需要查找源文件 + * @param _tr + * @param dataAttribute + * @param shapeModelMap + * @param relationFileElements + */ + @Deprecated + public static void setRelationShapeValueByOrgAndRole(com.alibaba.fastjson.JSONObject _tr, com.alibaba.fastjson.JSONObject dataAttribute, + Map shapeModelMap, List> relationFileElements, String shapeId, Set relationFileIds) { + String key = dataAttribute.getString("key"); + if ("organization".equals(dataAttribute.getString("groupPath")) && "relation".equals(dataAttribute.getString("type"))) { + String relationShapeIds = dataAttribute.getString("value"); + relationShapeIds = relationShapeIds.replace("[", "").replace("]", "").replace("\"", ""); + relationShapeIds = removeRepeat(relationShapeIds, ","); + String[] relationShapeIdArr = relationShapeIds.split(","); + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + for (String str : relationShapeIdArr) { + if (!shapeModelMap.containsKey(str)) { + continue; + } + List relationModels = dao.query(null, shapeId, key, null, str); + if (relationModels != null && relationModels.size() > 0) { + for(DesignerShapeRelationModel model : relationModels) { + String relationFileId = model.getRelationFileId(); + boolean flag = false; + if (relationFileIds.contains(relationFileId)) {// 包含该关联文件内容,不再查询 + flag = true; + } else {// 不包含该文件,查询 + List> FileElements = CoeDesignerUtil.getShapeMessageJson2(relationFileId); // 关联流程文件内容 + if (FileElements != null) { + relationFileIds.add(relationFileId); + relationFileElements.addAll(FileElements); + flag = true; + } + } + if (flag) { + StringBuilder sbOrg = new StringBuilder(_tr.getString("shape_" + key + "_org")); + StringBuilder sbRole = new StringBuilder(_tr.getString("shape_" + key + "_role")); + + for (Map element : relationFileElements) { + String id = (String) element.get("id"); + if (relationShapeIds.indexOf(id) != -1 && id.equals(str)) { + String type = element.get("type").toString(); + if ("organization".equals(type)) { + sbOrg.append(","); + sbOrg.append(element.get("text").toString().replace("\n","")); + } else if ("position".equals(type) || "role".equals(type)) { + sbRole.append(","); + sbRole.append(element.get("text").toString().replace("\n","")); + } + } + } + String sbOrgString = specialCharTransfer(sbOrg.toString()); + if (sbOrgString.indexOf(",") == 0) { + sbOrgString = sbOrgString.substring(1, sbOrgString.length()); + } + String sbRoleString = specialCharTransfer(sbRole.toString()); + if (sbRoleString.indexOf(",") == 0) { + sbRoleString = sbRoleString.substring(1, sbRoleString.length()); + } + _tr.put("shape_" + key + "_org", sbOrgString); + _tr.put("shape_" + key + "_role", sbRoleString); + } + } + } + } + } + } + + /** + * 将图形元素关联属性的id替换为name + * com.alibaba.fastjson + * @param key + * @param dataAttribute 图形元素所有关联属性 + * @param shapeRelationModelMap + * @return + */ + @Deprecated + public static void setShapeValue2(com.alibaba.fastjson.JSONObject _tr, com.alibaba.fastjson.JSONObject dataAttribute, Map shapeRelationModelMap) { + String result = ""; + String key = dataAttribute.getString("key"); + if ("string".equals(dataAttribute.getString("type")) || "textarea".equals(dataAttribute.getString("type"))) { + result = specialCharTransfer(dataAttribute.getString("value")).replace("\n", OutputWordUtil.WRAPSTRING); + } else if ("awsorg".equals(dataAttribute.getString("type"))) { + StringBuilder keyValue = new StringBuilder(); + if (key != null) { + String attributeValue = dataAttribute.getString("value"); + if (attributeValue != null && attributeValue.length() != 0) { + attributeValue = attributeValue.replace("[", "").replace("]", "").replace("\"", ""); + String[] keyValues = removeRepeat(attributeValue, ",").split(","); + for (String keyId : keyValues) { + if (!"".equals(keyId) && shapeRelationModelMap.containsKey(keyId)) { + String text = shapeRelationModelMap.get(keyId); + JSONObject object = JSONObject.parseObject(text); + String type = object.getString("type"); + if ("department".equals(type)) {// 部门 + DepartmentModel deptModel = SDK.getORGAPI().getDepartmentById(keyId); + if (deptModel != null) { + keyValue.append(specialCharTransfer(deptModel.getName())).append(","); + } + } + if ("user".equals(type)) {// 人员 + UserModel userModel = SDK.getORGAPI().getUser(keyId); + if (userModel != null) { + keyValue.append(specialCharTransfer(userModel.getUserName())).append(","); + } + } + if ("role".equals(type)) {// 角色 + RoleModel roleModel = SDK.getORGAPI().getRoleById(keyId); + if (roleModel != null) { + keyValue.append(specialCharTransfer(roleModel.getName())).append(","); + } + } + } + } + } + } + if (keyValue.length() > 0) { + result = keyValue.toString().substring(0, keyValue.length() - 1); + } + } else if ("select".equals(dataAttribute.getString("type"))) { + result = specialCharTransfer(dataAttribute.getString("value")); + } else { + StringBuilder keyValue = new StringBuilder(); + List keyValueList = new ArrayList(); + if (key != null) { + String attributeValue = dataAttribute.getString("value"); + if (attributeValue != null && attributeValue.length() != 0) { + attributeValue = attributeValue.replace("[", "").replace("]", "").replace("\"", ""); + String[] keyValues = removeRepeat(attributeValue, ",").split(","); + for (String keyId : keyValues) { + if (!"".equals(keyId) && shapeRelationModelMap.containsKey(keyId)) { + keyValueList.add(shapeRelationModelMap.get(keyId)); + } + } + for (String value : keyValueList) { + value = specialCharTransfer(value); + keyValue.append(value + ","); + } + + if (keyValue.length() > 0) { + result = keyValue.toString().substring(0, keyValue.length() - 1); + } + } + } + } + + _tr.put("shape_" + key, result.replace("\n", OutputWordUtil.WRAPSTRING)); + } + + /** + * 导出word时对特殊字符转义,防止office解析特殊字符打不开 + * 特殊字符"&" "<" ">" + * @param str + */ + public static String specialCharTransfer(String str) { + if (str == null || "".equals(str.trim())) { + return str; + } + return str.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">"); + } + + //排序 + private static class ComparatorMap implements Comparator> { + @Override + public int compare(Map json1, Map json2) { + String number1 = getNum(json1); + String number2 = getNum(json2); + if (!OutputUtil.isPositiveInteger(number1) || !OutputUtil.isPositiveInteger(number2)) { + return number1.compareTo(number2); + } else { + Integer n1 = 0; + Integer n2 = 0; + n1 = Integer.parseInt(number1); + n2 = Integer.parseInt(number2); + return n1.compareTo(n2); + } + } + } + + private static String getNum(Map json) { + if (json.containsKey("number")) { + return json.get("number").toString(); + } + if (json.containsKey("attributes")) { + if (json.get("attributes") instanceof JSONObject) {// netJson + JSONObject dataJson = (JSONObject)json.get("attributes"); + if (dataJson.containsKey("privateAttributeContent") && dataJson.get("privateAttributeContent").getClass().getName().contains("JSONObject")) { + return dataJson.getJSONObject("privateAttributeContent").getString("number"); + } + } + if(json.get("attributes") instanceof com.alibaba.fastjson.JSONObject) {// fastJson + com.alibaba.fastjson.JSONObject dataJson = (com.alibaba.fastjson.JSONObject) json.get("attributes"); + if (dataJson.containsKey("privateAttributeContent") && dataJson.get("privateAttributeContent").getClass().getName().contains("JSONObject")) { + return dataJson.getJSONObject("privateAttributeContent").getString("number"); + } + } + if (json.get("attributes") instanceof JSONArray) { + JSONArray dataJson = (JSONArray) json.get("attributes"); + for (int i = 0; i < dataJson.size(); i++) { + JSONObject obj = (JSONObject) dataJson.get(i); + if ("number".equals(obj.getString("key"))) { + return obj.getString("value"); + } + } + } + } + return ""; + } + + public static void orderByNumber(List> list) { + ComparatorMap comparator = new ComparatorMap(); + + if (list != null && list.size() > 0) { + Collections.sort(list, comparator); + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/PALRepositoryAPIManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/PALRepositoryAPIManager.java new file mode 100644 index 00000000..6d36c141 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/PALRepositoryAPIManager.java @@ -0,0 +1,252 @@ +package com.actionsoft.apps.coe.pal.pal.repository; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryAttributeCache; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryShapeAttributeCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryAttributeModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryPropertyCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryPropertyDao; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryPropertyModel; + +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public class PALRepositoryAPIManager { + + private static class Inner { + private final static PALRepositoryAPIManager instance = new PALRepositoryAPIManager(); + } + + public static PALRepositoryAPIManager getInstance() { + return PALRepositoryAPIManager.Inner.instance; + } + + private PALRepositoryAPIManager() { + } + + /** + * 更新流程的所有自定义属性 + * + * @param plId + * @param propertys + * @return + * @throws SQLException + */ + @Deprecated + public int[] updatePropertysByPLId(String plId, JSONArray propertys) throws SQLException { + PALRepositoryPropertyDao dao = new PALRepositoryPropertyDao(); + if (propertys == null || propertys.size() == 0) { + return null; + } + List propertyList = new ArrayList(); + for (int i = 0; i < propertys.size(); i++) { + JSONObject property = propertys.getJSONObject(i); + String propertyId = property.getString("id"); + PALRepositoryPropertyModel propertyModel = PALRepositoryPropertyCache.getPropertyByPropertyId(plId, propertyId); + if (propertyModel != null) { + property.put("value", propertyModel.getPropertyValue()); + } + PALRepositoryPropertyModel model = new PALRepositoryPropertyModel(UUIDGener.getUUID(), plId, property, i); + propertyList.add(model); + + } + return dao.updatePropertysByPLId(plId, propertyList); + } + + /** + * 根据流程文件Id删除所有属性或某个属性 + * + * @param plId + * @param propertyId + * @return + */ + public int deletePropertysByPLId(String plId, String propertyId) { + PALRepositoryPropertyDao dao = new PALRepositoryPropertyDao(); + return dao.deletePropertysByPLId(null, plId, propertyId); + } + + /** + * 获取有效的所有文件属性列表 + * 资产库的配置信息+xml属性配置信息组合 + * @param wsId 资产库Id + * @return 属性配置xml文件中有效属性集合 + */ + public List getValidAttributeModels(String wsId, String methodId) { + return getValidAttributeModels(wsId, methodId, false); + } + + /** + * 获取所有已排序的有效的文件属性 + * @param wsId + * @param methodId + * @param sort 是否排序,true排序,false但是应用参数排序,则排序 + * @return + */ + public List getValidAttributeModels(String wsId, String methodId, boolean sort) { + List result = new ArrayList<>(); + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(methodId); + if (palMethodModel != null) { + List attributes = palMethodModel.getAttributes(); + if (attributes != null) { + for (PALMethodAttributeModel attributeModel : attributes) { + if (!attributeModel.getIsValid()) { + continue; + } + String scope = attributeModel.getScope(); + if ("%".equals(scope) || scope.contains("%")) { + result.add(attributeModel.clone()); + } + } + } + if (result.size() > 0) { + // 更新sort和title + List fileAttrList = PALRepositoryAttributeCache.getAttributeByMethodId(wsId, methodId); + Map map = new HashMap<>(); + for (PALRepositoryAttributeModel model : fileAttrList) { + map.put(model.getAttrId(), model); + } + for (PALMethodAttributeModel model : result) { + model.setNewTitle(model.getTitle()); + model.setUse(false); + model.setSort("0"); + if (map.containsKey(model.getKey())) { + model.setNewTitle(map.get(model.getKey()).getAttrName()); + model.setSort(map.get(model.getKey()).getOrderIndex() + ""); + model.setUse("1".equals(map.get(model.getKey()).getIsDelete()) ? false : true); + } + } + boolean isSort = SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "ATTRIBUTESORT", false); + if (sort || (!sort && isSort)) {// 上面已经排好序,如果不进行排序,按照xml文件的顺序进行排序 + result.sort((o1, o2) -> { + if ((UtilString.isEmpty(o1.getSort()) || Integer.parseInt(o1.getSort()) == 0) && (UtilString.isEmpty(o2.getSort()) || Integer.parseInt(o2.getSort()) == 0)) { + return 0; + } else if ((UtilString.isEmpty(o1.getSort()) || Integer.parseInt(o1.getSort()) == 0)){ + return 1; + } else if ((UtilString.isEmpty(o2.getSort()) || Integer.parseInt(o2.getSort()) == 0)) { + return -1; + } else return Integer.parseInt(o1.getSort()) - Integer.parseInt(o2.getSort()); + }); + } + } + } + return result; + } + + /** + * 获取有效的且使用中的文件属性 + * @param wsId + * @param methodId + * @return + */ + public List getValidAndUseAttributeModels(String wsId, String methodId) { + List list = new ArrayList<>(); + List validList = getValidAttributeModels(wsId, methodId); + for (PALMethodAttributeModel model : validList) { + if (model.getUse()) { + list.add(model); + } + } + return list; + } + + /** + * 获取有效的且使用中的文件属性 + * @param wsId + * @param methodId + * @param sort 是否排序,true排序,false但是应用参数排序,则排序 + * @return + */ + public List getValidAndUseAttributeModels(String wsId, String methodId, boolean sort) { + List list = new ArrayList<>(); + List validList = getValidAttributeModels(wsId, methodId, sort); + for (PALMethodAttributeModel model : validList) { + if (model.getUse()) { + list.add(model); + } + } + return list; + } + + /** + * 更新模型文件的文件属性 + * 自动查找最新的配置,并且将最新配置进行保存至该流程 + * @param plId 模型id + */ + public void updateRepositoryProperty(String plId) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(plId); + if (model == null) return; + String wsId = model.getWsId(); + String methodId = model.getMethodId(); + List attrConfigs = PALRepositoryAttributeCache.getAttributeByMethodId(wsId, methodId); + if (attrConfigs != null && attrConfigs.size() > 0) { + updateRepositoryProperty(model.getId(), methodId, attrConfigs); + } + } + + /** + * 更新流程文件属性 + * 如果对指定流程进行文件属性初始化,建议调用updateRepositoryProperty(String plId) + * @param id + * @param methodId + * @param attrConfigs 属性配置 + */ + public void updateRepositoryProperty(String id, String methodId, List attrConfigs) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(id); + if (model == null) return; + PALRepositoryPropertyDao repositoryPropertyDao = new PALRepositoryPropertyDao(); + List newList = new ArrayList<>(); + for (PALRepositoryAttributeModel attrModel : attrConfigs) { + String attrId = attrModel.getAttrId(); + List list = repositoryPropertyDao.getPropertysByPlid(model.getId(), attrId); + if (list == null || list.size() == 0) { + PALRepositoryPropertyModel newModel = new PALRepositoryPropertyModel(); + newModel.setId(UUIDGener.getUUID()); + newModel.setPlId(id); + newModel.setPropertyName(attrModel.getAttrName()); + newModel.setPropertyId(attrModel.getAttrId()); + newModel.setOrderIndex(0); + String value = attrModel.getAttrValue(); + if ("relation".equals(attrModel.getType())) { + JSONObject valObj = JSONObject.parseObject(value); + if (valObj == null) { + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(methodId); + List attributeModels = methodModel.getAttributes(); + Map attributeModelMap = new HashMap<>(); + for (PALMethodAttributeModel methodAttrModel : attributeModels) { + if (attrModel.getAttrId().equals(methodAttrModel.getKey())) { + String demoStr = "{\"relationShapeId\":\"\",\"shapeId\":\"\",\"attrId\":\"itsystem\",\"shapeText\":\"\",\"relationFileId\":\"\",\"relationShapeText\":\"\",\"groupPath\":\"itsystem_normal\",\"fileId\":\"\"}"; + demoStr = demoStr.replace("itsystem_normal", methodAttrModel.getGroupPath()).replace("itsystem", attrId); + valObj = JSONObject.parseObject(demoStr); + } + } + + } + valObj.put("fileId", id); + value = valObj.toString(); + } + newModel.setPropertyValue(value); + newList.add(newModel); + } + } + if (newList.size() > 0) { + repositoryPropertyDao.batchInsert(newList); + } + + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/PALRepositoryQueryAPIManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/PALRepositoryQueryAPIManager.java new file mode 100644 index 00000000..ce083430 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/PALRepositoryQueryAPIManager.java @@ -0,0 +1,4162 @@ +package com.actionsoft.apps.coe.pal.pal.repository; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.coe.pal.pal.method.PALMethodManager; +import com.actionsoft.apps.coe.pal.pal.output.constant.OutputConst; +import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppManager; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.constant.CoeFileConstant; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessLevelWeb; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; +import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; +import com.actionsoft.bpms.bpmn.modeler.constant.BPMNConstant; +import com.actionsoft.bpms.bpmn.modeler.constant.BPMNFileConstant; +import com.actionsoft.bpms.bpmn.modeler.io.BPMNIO; +import com.actionsoft.bpms.bpmn.modeler.util.BPMNFileUtil; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.htmlframework.AlertWindow; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.commons.security.high.HighSecurity; +import com.actionsoft.bpms.org.cache.DepartmentCache; +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.server.DispatcherRequest; +import com.actionsoft.bpms.server.SSOUtil; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.dc.DCProfileManager; +import com.actionsoft.bpms.server.fs.dc.DCUtil; +import com.actionsoft.bpms.util.Base64; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishFrequencyDao; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishListHistory; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishFrequencyModel; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.pal.output.OutPutReportWeb; +import com.actionsoft.apps.coe.pal.pal.output.OutputAPIManager; +import com.actionsoft.apps.coe.pal.pal.output.dao.OutputTask; +import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppProfile; +import com.actionsoft.apps.coe.pal.pal.output.model.OutputTaskModel; +import com.actionsoft.apps.coe.pal.pal.repository.cache.CoeProcessLevelCorrelateCache; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryAttributeCache; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryPropertyCache; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryShapeAttributeCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.designer.CoeDesignerShapeAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.adapter.CoeDesginerAdapter; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerImageCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.image.CoeDesignerImage; +import com.actionsoft.apps.coe.pal.pal.repository.designer.manage.CoeDesignerAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BPMNModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.web.CoeDesignerWeb; +import com.actionsoft.apps.coe.pal.pal.repository.model.CoeProcessLevelCorrelateModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryAttributeModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryPropertyModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.dao.UpFileDao; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.model.UpfileModel; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.web.UpfileWeb; +import com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; +import com.actionsoft.apps.coe.pal.pal.ws.web.VersionUtil; +import com.actionsoft.apps.coe.pal.util.StringHandleUtil; +import com.actionsoft.exception.AWSException; +import com.actionsoft.i18n.I18nRes; +import com.actionsoft.sdk.local.SDK; +import com.actionsoft.sdk.local.api.AppAPI; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.collections4.IteratorUtils; + +/** + * 资产库文件查询接口API封装 + * + * @author wangyh + */ +public class PALRepositoryQueryAPIManager { + private PALRepositoryQueryAPIManager() { + } + + public static PALRepositoryQueryAPIManager getInstance() { + return PALRepositoryQueryAPIManager.Inner.instance; + } + + /** + * 得到缓存中所有的流程文件 + * + * @return 一个查询结果集 + */ + public List getPALRepositoryModelList() { + List list = new ArrayList(); + Iterator it = PALRepositoryCache.getCache().iterator(); + while (it.hasNext()) { + list.add(it.next()); + } + return list; + } + + /** + * 得到缓存中指定流程库的流程文件 + * + * @return 一个查询结果集 + */ + public List getPALRepositoryModelList(String wsId) { + List list = new ArrayList(); + Iterator it = PALRepositoryCache.getCache().iterator(); + while (it.hasNext()) { + PALRepositoryModel model = it.next(); + if (model.getWsId().equals(wsId)) + list.add(model); + } + if (wsId != null) { + List list1 = new ArrayList(); + for (PALRepositoryModel model : list) { + if (wsId.equals(model.getWsId())) { + list1.add(model); + } + } + return list1; + } + return list; + } + + /** + * 执行查询,返回结果集 + * + * @param sortType + * @param orderByField + * @param wsId + * @param map + * @return 一个查询结果集 + */ + public List list(boolean sortType, String orderByField, String wsId, Map map) { + Iterator it = PALRepositoryCache.getCache().iterator(); + List list = new ArrayList(); + if (map.size() > 0) { + while (it.hasNext()) { + PALRepositoryModel model = it.next(); + if (isExistModel(model, map)) { + list.add(model); + } + } + if (wsId != null) { + List list1 = new ArrayList(); + for (PALRepositoryModel model : list) { + if (wsId.equals(model.getWsId())) { + list1.add(model); + } + } + return list1; + } + return list; + } else { + list = getPALRepositoryModelList(wsId); + } + return list; + } + + /** + * 对查询结果进行排序 + * + * @param list + * @param sortType + * @param orderByField + */ + private void orderByFieldName(List list, String sortType, String orderByField) { + + } + + private boolean isExistModel(PALRepositoryModel model, Map map) { + Map map1 = new HashMap(); + map1.put("parentId", model.getParentId()); + map1.put("fileId", model.getId()); + map1.put("fileNo", model.getNo()); + map1.put("fileName", model.getName()); + map1.put("version", model.getVersion()); + map1.put("fileLevel", model.getLevel()); + map1.put("fileDesc", model.getDesc()); + map1.put("fileInput", model.getInput()); + map1.put("fileOutput", model.getOutput()); + map1.put("fileOwnerUser", model.getOwnerUser()); + map1.put("fileOwnerDept", model.getOwnerDept()); + map1.put("fileExecType", model.getExecType()); + map1.put("fileSystemName", model.getSystemName()); + map1.put("fileColor", model.getColor()); + map1.put("fileMethodCategory", model.getMethodCategory()); + map1.put("fileMethodId", model.getMethodId()); + map1.put("fileIsUse", model.isUse()); + map1.put("fileIsPublish", model.isPublish()); + map1.put("fileIsSystem", model.isSystemFile()); + map1.put("wsId", model.getWsId()); + Iterator it = map.keySet().iterator(); + Set set = new HashSet(2); + while (it.hasNext()) { + String key = it.next(); + Object obj = map.get(key); + if (obj == null) { + continue; + } + String className = obj.getClass().getName(); + className = className.substring(className.lastIndexOf(".") + 1, className.length()); + queryResult(map1, set, key, obj, className); + } + if (set.size() > 1) { + return false; + } else if (set.size() == 1 && set.contains(true)) + return true; + return false; + } + + private void queryResult(Map map1, Set set, String key, Object obj, String className) { + if ("Integer".equals(className)) { + int i = (Integer) obj; + set.add(i == (Integer) map1.get(key)); + } else if ("Boolean".equals(className)) { + boolean b = (Boolean) obj; + set.add(b == (Boolean) map1.get(key)); + } else if ("String".equals(className)) { + String str = (String) map1.get(key); + if (str != null) { + set.add(str.contains((String) obj)); + } + } else if (className.toLowerCase().contains("list")) { + List list = (List) obj; + Object obj1 = map1.get(key); + if (list.size() > 0) { + set.add(list.contains(obj1)); + } + } + } + + /** + * 根据wsId过滤流程 + * + * @param wsId + * @return + */ + public List getRepositoryModelToList(String wsId) { + List list = new ArrayList(); + Iterator it = PALRepositoryCache.getCache().iterator(); + while (it.hasNext()) { + PALRepositoryModel model = it.next(); + if (model.getWsId().equals(wsId)) { + list.add((PALRepositoryModelImpl) model); + } + } + return list; + } + + public List getJsonToList(String pid, String wsId, String language, String methodType) { + List listJsonArr = new ArrayList(); + List list = getRepositoryModelToList(wsId); + for (PALRepositoryModelImpl model : list) { + if (model.getParentId() != null && !"".equals(model.getParentId()) && model.getParentId().equals(pid) && (model.getMethodId().contains(methodType) || methodType.contains(model.getMethodId()))) { + listJsonArr.add(getJSon(model, language, isParent(model.getId(), list))); + } + } + return listJsonArr; + } + + /** + * 根据wsId过滤流程并生成json + * + * @param wsId + * @return + */ + public JSONArray getRepositoryModelToJson(String wsId, String language) { + List list = new ArrayList(); + Iterator it = PALRepositoryCache.getCache().iterator(); + JSONArray jsonArray = new JSONArray(); + while (it.hasNext()) { + PALRepositoryModel model = it.next(); + if (model.getWsId().equals(wsId)) { + list.add((PALRepositoryModelImpl) model); + } + } + for (PALRepositoryModelImpl models : list) { + putAllNodeJsonToJsonArr(models.getId(), jsonArray, language, list); + } + return jsonArray; + } + + /** + * 根据wsId过滤流程并生成json + * + * @param wsId + * @return + */ + public List getRepositoryModelToJson(String wsId, String language, String methodId) { + List list = new ArrayList(); + Iterator it = PALRepositoryCache.getCache().iterator(); + List listJsonArr = new ArrayList(); + while (it.hasNext()) { + PALRepositoryModel model = it.next(); + if (model.getWsId().equals(wsId) && model.getMethodId().contains(methodId)) { + list.add((PALRepositoryModelImpl) model); + } + } + for (PALRepositoryModelImpl models : list) { + putAllNodeJson(models.getId(), listJsonArr, language, list); + } + return listJsonArr; + } + + private void putAllNodeJsonToJsonArr(String id, JSONArray jsonArray, String language, List models) { + for (int i = 0, size = models.size(); i < size; i++) { + PALRepositoryModel model = models.get(i); + String parentId = model.getParentId(); + if (parentId != null && !"".equals(parentId) && parentId.equals(id)) { + JSONObject json = getJSon(model, language, isParent(id, models)); + jsonArray.add(json); + } + } + } + + private void putAllNodeJson(String id, List jsonArray, String language, List models) { + for (int i = 0, size = models.size(); i < size; i++) { + PALRepositoryModel model = models.get(i); + String parentId = model.getParentId(); + if (parentId != null && !"".equals(parentId) && parentId.equals(id)) { + JSONObject json = getJSon(model, language, isParent(id, models)); + jsonArray.add(json); + } + } + } + + private boolean isParent(String id, List models) { + for (PALRepositoryModelImpl model : models) { + String parentId = model.getParentId(); + if (parentId != null && !"".equals(parentId) && parentId.equals(id)) { + return true; + } + } + return false; + } + + /** + * 获取tree json + * + * @param model + * @param language + * @param flag + * @return + */ + private JSONObject getJSon(PALRepositoryModel model, String language, boolean flag) { + JSONObject rootJson = new JSONObject(); + rootJson.put("id", model.getId().trim()); + rootJson.put("pid", model.getParentId().trim()); + rootJson.put("plNo", CoeProcessLevelUtil.getProcessLevelNoByUUId(model.getId(), model.getWsId()).trim()); + rootJson.put("name", I18nRes.findValue(CoEConstant.APP_ID, language, model.getName()).trim()); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(model.getMethodId()); + if (methodModel == null || methodModel.isFolder()) {// 没有该建模方法或者是文件夹类 + rootJson.put("title", rootJson.get("name")); + } else { + rootJson.put("title", rootJson.get("name") + " " + VersionUtil.getVersionStrV(model.getVersion()).trim()); + } + rootJson.put("drop", false); + rootJson.put("isSystemFile", model.isSystemFile()); + rootJson.put("plMethodId", model.getMethodId().trim()); + if (methodModel == null || methodModel.isFolder()) { + rootJson.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/default/16.png"); + } else { + rootJson.put("icon", "../apps/" + PALMethodCache.getPALMethodModelById(model.getMethodId()).getApp().getId() + "/img/method/" + model.getMethodId() + "/16.png"); + } + if (flag) { + rootJson.put("isParent", true); + rootJson.put("open", false); + } + rootJson.put("plLevel", model.getLevel()); + rootJson.put("plOrdexIndex", model.getOrderIndex()); + rootJson.put("plCategory", model.getMethodCategory()); + return rootJson; + } + + /** + * 得到给定范围内的流程文件 + * + * @param str 格式 id,id,id,id + * @return + */ + public List getFileList(String str) { + List newList = new ArrayList(); + Iterator it = PALRepositoryCache.getCache().iterator(); + while (it.hasNext()) { + PALRepositoryModel model = it.next(); + if (str.contains(model.getId())) { + newList.add(model); + } + } + return newList; + } + + /** + * 根据父id得到子节点 + * + * @param pid + * @return + */ + public List getSubList(String pid) { + List newList = new ArrayList(); + Iterator it = PALRepositoryCache.getCache().iterator(); + while (it.hasNext()) { + PALRepositoryModel model = it.next(); + if (pid.equals(model.getParentId())) { + newList.add(model); + } + } + return newList; + + } + + /** + * 获得小组可访问的使用中的资产库文件 + * + * @param teamId 小组Id + * @param wsId 资产库Id + * @return 库文件集合 + */ + public List getHavingRepositoryAccessList(String wsId, String teamId, String userId) { + return CoeProcessLevelUtil.getPermRepositoryList(wsId, teamId, userId, null, null, true, false); + } + + /** + * 得到可以访问的流程节点 + * + * @param wsid 流程库ID + * @param teamId 小组id + * @param category 建模方法 如process  + */ + public List getAccessPalModel(String wsid, String teamId, String userId, String category) { + return CoeProcessLevelUtil.getPermRepositoryList(wsid, teamId, userId, category, null, true, false); + } + + /** + * 得到当前工作空间下的流程节点 + * + * @param wsId + * @return + */ + public List getRepositoryModelByWsid(String wsId) { + List list = new ArrayList(); + Iterator it = PALRepositoryCache.getCache().iterator(); + while (it.hasNext()) { + PALRepositoryModel model = it.next(); + if (model.getWsId().equals(wsId) && model.isUse()) { + list.add((PALRepositoryModelImpl) model); + } + } + return list; + } + + /** + * 得到当前工作空间下的流程节点 + * + * @param wsId + * @return + */ + public List getRepositoryModelByWsid(String wsId, String category) { + List list = new ArrayList(); + Iterator it = PALRepositoryCache.getCache().iterator(); + while (it.hasNext()) { + PALRepositoryModel model = it.next(); + if (model.getWsId().equals(wsId) && model.getMethodCategory().equals(category)) { + list.add((PALRepositoryModelImpl) model); + } + } + return list; + } + + /** + * 得到当前工作空间下的流程节点 + * + * @param wsId + * @return + */ + public List getRepositoryModelByWsid1(String wsId, String category, boolean isUse, boolean isPublish) { + List list = new ArrayList(); + Iterator it = PALRepositoryCache.getCache().iterator(); + while (it.hasNext()) { + PALRepositoryModel model = it.next(); + if (model.getWsId().equals(wsId) && category.contains(model.getMethodId())) { + boolean flag = true; + if (isUse && !model.isUse()) { + flag = false; + } + if (isPublish && !model.isPublish()) { + flag = false; + } + if (flag) { + list.add((PALRepositoryModelImpl) model); + } + } + } + return list; + } + + /** + * 得到指定权限的树节点并重新生成树节点 + * + * @param wsId 流程库ID + * @param teamId 小组id + * @param category 建模方法 如process  + * @return list + */ + public List getAccessPALFile(String wsId, String teamId, String userId, String category) { + List modelList = getAccessPalModel(wsId, teamId, userId, category); + List> list = new ArrayList>(); + for (int i = 0, size = modelList.size(); i < size; i++) { + forEachList(wsId, teamId, userId, modelList, list, i); // 得到有权限的节点 + } + return createResult(list); + } + + /** + * 得到指定权限的树节点并重新生成树节点 + * + * @param wsid 流程库ID + * @param category 建模方法 如process  + * @return list + */ + public List getAccessPALFile(String wsid, String category) { + List modelList = null; + List> list = new ArrayList>(); + modelList = getAccessPALFileByWsid(wsid, category); + Map tempMap = new HashMap(); + for (int i = 0, size = modelList.size(); i < size; i++) { + PALRepositoryModel m = modelList.get(i); + tempMap.put(m.getId(), m); + } + for (int i = 0, size = modelList.size(); i < size; i++) { + eachList(wsid, tempMap, modelList, list, i); // 得到有权限的节点 + } + return createResult(list); + } + + /** + * 得到指定权限的树节点并重新生成树节点 + * + * @param wsid 流程库ID + * @param category 建模方法 如process  + * @return list + */ + public List getAccessPALFile1(String wsid, String category, boolean isUse, boolean isPublish) { + List modelList = null; + List> list = new ArrayList>(); + modelList = getRepositoryModelByWsid1(wsid, category, isUse, isPublish); + Map tempMap = new HashMap(); + for (int i = 0, size = modelList.size(); i < size; i++) { + PALRepositoryModel m = modelList.get(i); + tempMap.put(m.getVersionId(), m); + } + for (int i = 0, size = modelList.size(); i < size; i++) { + eachList(wsid, tempMap, modelList, list, i); // 得到有权限的节点 + } + return createResult(list); + } + + private List createResult(List> list) { + List> softList = new ArrayList>(); + Map map = new HashMap(); + Set parentIds = getSoftList(list, softList, map);// 得到是父级的节点 + Set keys = map.keySet(); + List result = new ArrayList(); + for (String key : keys) { + resultModel(map, parentIds, result, key);// 汇总结果 + } + Collections.sort(result, new Comparator1()); + return result; + } + + private void resultModel(Map map, Set parentIds, List result, String key) { + PALRepositoryModelImpl m = map.get(key); + if (parentIds.contains(key)) { + m.setPublish(true); + } + if (m.getId().length() < 16) { + m.setLevel(-1); + } + result.add(m); + } + + private String addModelToList(ArrayList models, List modelList, int i) { + PALRepositoryModel coeProcessLevelModel = modelList.get(i); + models.add(coeProcessLevelModel); + return coeProcessLevelModel.getParentId(); + } + + private void forEachList(String wsid, String teamId, String userId, List modelList, List> list, int i) { + ArrayList models = new ArrayList(); + String ruuid = addModelToList(models, modelList, i); + Set permVerIds = CoeProcessLevelUtil.getPermRepositoryVersionIds(wsid, teamId, userId, null, null); + PALRepositoryModel model; + while (true) { + model = PALRepositoryCache.getCache().get(ruuid); + if (model != null) { + if (permVerIds.contains(model.getVersionId())) { + models.add(model); + } + ruuid = model.getParentId(); + } else { + if (ruuid.length() < 36) { + createModelValue(models, ruuid); + } + break; + } + } + list.add(models); + } + + private void createModelValue(ArrayList models, String ruuid) { + PALRepositoryModelImpl cplm = new PALRepositoryModelImpl(); + cplm.setId(ruuid); + cplm.setName(ruuid); + models.add(cplm); + } + + private void eachList(String wsid, Map tempMap, List modelList, List> list, int i) { + ArrayList models = new ArrayList(); + String ruuid = addModelToList(models, modelList, i); + PALRepositoryModel model; + while (true) { + model = PALRepositoryCache.getCache().get(ruuid); + if (model != null) { + if (tempMap.get(model.getVersionId()) != null && model.isUse()) { + models.add(model); + } + ruuid = model.getParentId(); + } else { + if (ruuid.length() < 36) { + createModelValue(models, ruuid); + } + break; + } + } + list.add(models); + } + + private Set getSoftList(List> list, List> softList, Map map) { + for (ArrayList arrayList : list) { + ArrayList subList = new ArrayList(); + for (PALRepositoryModel palRepositoryModel : arrayList) { + addSubList(subList, palRepositoryModel); + } + softList.add(subList); + } + Set parentIds = new HashSet(); + for (ArrayList arrayList : softList) { + Collections.sort(arrayList, new ComparatorLevel()); + for (PALRepositoryModelImpl palRepositoryModel : arrayList) { + parentIds.add(palRepositoryModel.getParentId()); + map.put(palRepositoryModel.getId(), palRepositoryModel); + } + } + return parentIds; + } + + /** + * 创建新的节点对象 + * + * @param subList + * @param palRepositoryModel + */ + private void addSubList(ArrayList subList, PALRepositoryModel palRepositoryModel) { + PALRepositoryModelImpl model = new PALRepositoryModelImpl(); + model.setId(palRepositoryModel.getId()); + model.setParentId(palRepositoryModel.getParentId()); + model.setName(palRepositoryModel.getName()); + model.setLevel(palRepositoryModel.getLevel()); + model.setMethodCategory(palRepositoryModel.getMethodCategory()); + model.setMethodId(palRepositoryModel.getMethodId()); + model.setVersion(palRepositoryModel.getVersion()); + subList.add(model); + } + + /** + * 生成后的树模型组建 + * + * @param methodType 建模方法大类 + * @param wsid 流程库id + * @param jsonArray  jsonArray数组 + * @param teamId 小组id + */ + public void createTreeModel(String methodType, String wsid, JSONArray jsonArray, String teamId, String userId) { + List list = getAccessPALFile(wsid, teamId, methodType, userId); + createTreeModelForEach(methodType, jsonArray, list); + } + + /** + * 生成后的树模型组建 + * + * @param methodType 建模方法大类 + * @param wsid 流程库id + * @param jsonArray  jsonArray数组 + */ + public void createTreeModel1(String methodType, String wsid, JSONArray jsonArray, boolean isUse, boolean isPublish) { + List list = getAccessPALFile1(wsid, methodType, isUse, isPublish); + createTreeModelForEach(methodType, jsonArray, list); + } + + /** + * 生成后的树模型组建 + * + * @param methodType 建模方法大类 + * @param wsid 流程库id + * @param jsonArray  jsonArray数组 + * @param versionType 工作版本或发布版本 + */ + public void createTreeModelByVersionType(String methodType, String wsid, JSONArray jsonArray, String versionType) { + List list = getAccessPALFile(wsid, methodType); + if (list != null) { + if (versionType != null && !"".equals(versionType)) { + for (PALRepositoryModel model : list) { + if ("isUsed".equals(versionType) && !model.isUse()) { + list.remove(model); + break; + } + if ("isPublish".equals(versionType) && !model.isPublish()) { + list.remove(model); + break; + } + } + } + } + createTreeModelForEach(methodType, jsonArray, list); + } + + public void createTreeModelForEach(String methodType, JSONArray jsonArray, List list) { + for (PALRepositoryModel model : list) { + JSONObject json = new JSONObject(); + json.put("id", model.getId()); + json.put("name", I18nRes.findValue(CoEConstant.APP_ID, model.getName())); + if (model.getId().length() < 16) { + if ("process.bpmn2,process.epc,process.flowchart".equals(methodType)) { + json.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/" + model.getMethodId() + "/process.png"); + + } else + json.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/" + model.getMethodId() + "/" + methodType + ".png"); + } else { + json.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/" + model.getMethodId() + "/16.png"); + json.put("fileType", I18nRes.findValue(CoEConstant.APP_ID, model.getMethodId())); + json.put("fileVersion", VersionUtil.getVersionStrV(model.getVersion())); + } + if (model.getMethodId().contains("epc")) { + json.put("icon", "../apps/com.actionsoft.apps.coe.method.process.epc/img/method/" + model.getMethodId() + "/16.png"); + } + if (model.getMethodId().contains("flowchart")) { + json.put("icon", "../apps/com.actionsoft.apps.coe.method.process.flowchart/img/method/process.flowchart/16.png"); + } + if (model.isPublish()) { + json.put("open", false); + if (model.getId().length() < 16) { + json.put("open", true); + } + } + if (model.getParentId() != null) { + json.put("pid", model.getParentId()); + } + jsonArray.add(json); // 加载根 + } + } + + /** + * 得到指定权限范围内的树节点 + * + * @param jsonArray + * @param methodType  建模方法大类 + * @param wsId  流程库id + * @param versionType 版本类型 + * @param teamId 小组id + * @return + */ + public JSONArray getLimitPALTree(JSONArray jsonArray, String methodType, String wsId, String versionType, String teamId, String userId) { + if ("process.bpmn2,process.epc,process.flowchart".equals(methodType) || "process".equals(methodType)) { + createTreeModel("process", wsId, jsonArray, teamId, userId); + } else { + createTreeModel(methodType, wsId, jsonArray, teamId, userId); + } + return jsonArray; + } + + /** + * 得到指定权限范围内的树节点 + * + * @param jsonArray  + * @param methodType 建模方法大类 + * @param wsid 流程库Id + * @param versionType 版本类型 + * @return + */ + public JSONArray getLimitPALTree(JSONArray jsonArray, String methodType, String wsid, String versionType) { + if ("process.bpmn2,process.epc,process.flowchart".equals(methodType) || "process".equals(methodType)) { + boolean isUsed = false; + boolean isPublish = false; + if ("isUsed".equals(versionType)) { + isUsed = true; + } else if ("isPublish".equals(versionType)) { + isPublish = true; + } + createTreeModel1("process.bpmn2,process.epc,process.flowchart", wsid, jsonArray, isUsed, isPublish); + } else { + createTreeModelByVersionType(methodType, wsid, jsonArray, versionType); + } + return jsonArray; + } + + /** + * 得到当前流程库能访问到的授权节点如果没有授权则得到所有的 + * + * @param wsid 流程库Id + * @param category 建模方法大 + * @return + */ + public List getAccessPALFileByWsid(String wsid, String category) { + /* List list = new ArrayList(); + * Iterator it = TeamPermCache.getTeamListByWsId(wsid); + * while (it.hasNext()) { TeamPermModel perModel = it.next(); + * PALRepositoryModelImpl model = (PALRepositoryModelImpl) + * PALRepositoryCache.getCache().get(perModel.getResourceId()); if + * (model.getMethodCategory().equals(category)) list.add(model); } */ + // if (list.isEmpty()) { + return getRepositoryModelByWsid(wsid, category); + // } else { + // return getResultByWsid(list); + // } + } + + private List getResultByWsid(List list) { + List result = new ArrayList(); + Map map = new HashMap(); + for (PALRepositoryModel m : list) { + map.put(m.getId(), m); + } + Set set = map.keySet(); + for (String key : set) { + result.add(map.get(key)); + } + return result; + } + + /** + * 判断资产库是否暂停 + * + * @return + */ + public boolean isActiveWorkSpace(String wsid) { + return new CoeWorkSpace().isActiveWorkSpace(wsid); + } + + /** + * 获取流程资产库下所有流程 + * + * @param wsId 流程库id + * @return + */ + public List getPalRepositoryModelsByWsId(String wsId) { + List list = new ArrayList(); + Iterator pals = PALRepositoryCache.getByWsId(wsId); + while (pals.hasNext()) { + PALRepositoryModel model = pals.next(); + list.add(model); + } + return list; + } + + /** + * 获取某个流程的所有子流程 + * + * @param wsId + * @param pid + * @return + */ + public List getPalRepositoryModelsByPid(String wsId, String pid) { + List list = new ArrayList(); + + List repositoryModelList = PALRepositoryCache.getAllSubModelsByPid(wsId, pid); + if (repositoryModelList != null) { + for (PALRepositoryModel model : repositoryModelList) { + try { + PALRepositoryModelImpl newModel = ((PALRepositoryModelImpl) model).clone(); + newModel.setNewParentId(pid); + list.add(newModel); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + } + } + return list; + } + + public void getAllPalRepositoryModelsByPid(String wsId, String pid, List list) { + List children = getPalRepositoryModelsByPid(wsId, pid); + if (children != null && children.size() > 0) { + list.addAll(children); + } + for (PALRepositoryModel model : children) { + getAllPalRepositoryModelsByPid(wsId, model.getId(), list); + } + } + + /**************************************************** 获取所有流程 *****************************************************/ + + /** + * 获取某个小组的成员有权限的流程 + * @param wsId + * @param userId + * @param teamId + * @param isUsed + * @param isPublished + * @return + */ + public List getPalRepositoryModelsByTeamId(String wsId, String userId, String teamId, boolean isUsed, boolean isPublished) { + List list = CoeProcessLevelUtil.getPermRepositoryList(wsId, teamId, userId, null, null, isUsed, isPublished); + return list; + } + + /** + * 获取流程资产库下所有使用中的流程 + * + * @param wsId 流程库id + * @return + */ + public List getUsedPalRepositoryModelsByWsId(String wsId, String methodId) { + List list = new ArrayList(); + + Iterator pals = PALRepositoryCache.getByWsId(wsId); + while (pals.hasNext()) { + PALRepositoryModel model = pals.next(); + if (model.isUse()) { + if (methodId != null && !"".equals(methodId)) { + if (methodId.indexOf(".") != -1) { + if (model.getMethodId().equals(methodId)) { + list.add(model); + } + } else { + if (model.getMethodCategory().equals(methodId)) { + list.add(model); + } + } + } else { + list.add(model); + } + } + } + return list; + } + + /** + * 获取资产库下的流程 + * @param wsId + * @param methodId + * @return + */ + public List getPalRepositoryModelsByWsIdAndMethodId(String wsId, String methodId) { + List list = new ArrayList(); + Iterator pals = PALRepositoryCache.getByWsId(wsId); + while (pals.hasNext()) { + PALRepositoryModel model = pals.next(); + if (methodId != null && !UtilString.isEmpty(methodId)) { + if (methodId.indexOf(".") != -1) { + if (model.getMethodId().equals(methodId)) { + list.add(model); + } + } else { + if (model.getMethodCategory().equals(methodId)) { + list.add(model); + } + } + } else { + list.add(model); + } + } + return list; + } + + /** + * 获取某个流程的使用中的子流程 + * + * @param wsId + * @param pid + * @return + */ + public List getUsedPalRepositoryModelsByPid(String wsId, String pid) { + List list = getPalRepositoryModelsByPid(wsId, pid); + List removeList = new ArrayList(); + if (list != null) { + for (PALRepositoryModel model : list) { + if (!model.isUse()) { + removeList.add(model); + } + } + } + list.removeAll(removeList); + Collections.sort(list, new Comparator1()); + return list; + } + + /**************************************************** 获取使用中的流程 *****************************************************/ + + /** + * 获取某个流程的所有使用中的子流程 + * + * @param wsId + * @param pid + * @param list + */ + public void getAllUsedPalRepositoryModelsByPid(String wsId, String pid, List list) { + List children = getUsedPalRepositoryModelsByPid(wsId, pid); + if (children != null && children.size() > 0) { + list.addAll(children); + for (PALRepositoryModel model : children) { + getAllUsedPalRepositoryModelsByPid(wsId, model.getId(), list); + } + } + } + + /** + * 通过pid获取子流程集合 + * + * @param wsId + * @param pid + * @param list + */ + public void getUsedListPalRepositoryModelsByPid(String wsId, String pid, List list) { + List children = getUsedPalRepositoryModelsByPid(wsId, pid); + if (children != null && children.size() > 0) { + list.addAll(children); + } + } + + /** + * 获取流程资产库下所有发布的流程 + * + * @param wsId 流程库id + * @return + */ + public List getPublishedPalRepositoryModelsByWsId(String wsId, String methodId) { + List list = new ArrayList(); + + Iterator pals = PALRepositoryCache.getByWsId(wsId); + while (pals.hasNext()) { + PALRepositoryModel model = pals.next(); + if (model.isPublish()) { + if (methodId != null && !"".equals(methodId)) { + if (methodId.indexOf(".") != -1) { + if (model.getMethodId().equals(methodId)) { + list.add(model); + } + } else { + if (model.getMethodCategory().equals(methodId)) { + list.add(model); + } + } + } else { + list.add(model); + } + } + } + return list; + } + + /** + * 获取某个流程的发布的子流程 + * + * @param wsId + * @param pid + * @return + */ + public List getPublishedPalRepositoryModelsByPid(String wsId, String pid) { + List list = getPalRepositoryModelsByPid(wsId, pid); + if (list != null) { + List removeList = new ArrayList(); + for (PALRepositoryModel model : list) { + if (!model.isPublish()) { + removeList.add(model); + } + } + list.removeAll(removeList); + } + + return list; + } + + /** + * 获取某个流程的所有发布的子流程 + * + * @param wsId + * @param pid + * @param list + */ + public void getAllPublishedPalRepositoryModelsByPid(String wsId, String pid, List list) { + List publishedChildren = getPublishedPalRepositoryModelsByPid(wsId, pid); + if (publishedChildren != null && publishedChildren.size() > 0) { + list.addAll(publishedChildren); + } + List children = Cache.iteratorToList(PALRepositoryCache.getByPid(wsId, pid)); + for (PALRepositoryModel model : children) { + getAllPublishedPalRepositoryModelsByPid(wsId, model.getId(), list); + } + } + + /**************************************************** 获取发布的流程 *****************************************************/ + + /** + * 获取完整流程树 + * + * @param context + * @param wsId + * @param methods + * @param type isUsed/isPublished/designer 使用中/已发布/使用中但是未发布 + * @return + */ + public JSONArray getPalRepositoryTreeData(UserContext context, String wsId, String methods, String type) { + JSONArray result = new JSONArray(); + + String[] methodArray; + if (methods == null || "".equals(methods)) { + methodArray = new String[] { "process", "org", "data", "itsystem", "control" }; + } else { + methodArray = methods.split(","); + } + + int i = 1; + Set methodSet = new HashSet(); + for (String method : methodArray) { + String category = ""; + if (method.indexOf(".") != -1) { + category = method.substring(0, method.indexOf(".")); + } else { + category = method; + } + if (methodSet.contains(category)) { + continue; + } else { + methodSet.add(category); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("id", category); + String name = I18nRes.findValue(CoEConstant.APP_ID, category); + jsonObject.put("name", name); + jsonObject.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/" + category + ".png"); + jsonObject.put("menu", false); + jsonObject.put("url", "./w?sid=" + context.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=" + category + "&type=0&wsid=" + wsId); + jsonObject.put("open", i == 1); + jsonObject.put("nocheck", true); + + result.add(jsonObject); + } + + List modelList = new ArrayList(); + boolean isUsed = false; + boolean isPublished = false; + if ("isUsed".equals(type) || "designer".equals(type)) { + modelList = getUsedPalRepositoryModelsByWsId(wsId, category); + isUsed = true; + } else if ("isPublished".equals(type)) { + modelList = getPublishedPalRepositoryModelsByWsId(wsId, category); + isPublished = true; + + } + StringBuilder removeIds = new StringBuilder(""); + if (modelList.size() > 0) { + if (methods != null && !"".equals(methods)) { + List removeList = new ArrayList(); + for (PALRepositoryModel model : modelList) { + // 如果限制的方法是小类,需判断模型方法Id;如果限制的方法是大类,需判断模型的category + if ((method.indexOf(".") != -1 && methods.indexOf(model.getMethodId()) == -1) || (method.indexOf(".") == -1 && !method.equals(model.getMethodCategory()))) { + removeList.add(model); + removeIds.append(model.getId()).append(","); + } + } + // modelList.removeAll(removeList); + } + } + + // 若type为designer并且有数据,则过滤掉已发布的 + if("designer".equals(type) && modelList.size() > 0) { + List tempList = new ArrayList(); + for (PALRepositoryModel model : modelList) { + if (!model.isPublish()) { + tempList.add(model); + } + } + modelList = tempList; + } + + List newList = setNewPid(modelList); + Collections.sort(newList, new Comparator1()); + + result.addAll(list2Json(context, newList, isUsed, isPublished, removeIds.toString(), type)); + i++; + } + return result; + } + + /** + * 获取使用中的流程树根节点及第一级子节点 + * + * @param context + * @param wsId + * @param methods + * @param type isUsed/isPublished + * @return + */ + public JSONArray getPalRepositoryTreeRootData(UserContext context, String wsId, String methods, String type) { + JSONArray result = new JSONArray(); + + String[] methodArray; + if (methods == null || "".equals(methods)) { + methodArray = new String[] { "process", "org", "data", "itsystem", "control" }; + } else { + methodArray = methods.split(","); + } + + int i = 1; + for (String method : methodArray) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("id", method); + String name = I18nRes.findValue(CoEConstant.APP_ID, method); + jsonObject.put("name", name); + jsonObject.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/" + method + ".png"); + jsonObject.put("menu", false); + jsonObject.put("url", "./w?sid=" + context.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=" + method + "&type=0&wsid=" + wsId); + jsonObject.put("open", i == 1); + jsonObject.put("plCategory", method); + + result.add(jsonObject); + if ("isUsed".equals(type)) { + result.addAll(getUsedPalRepositoryTreeDataByPid(context, wsId, method)); + } else if ("isPublished".equals(type)) { + result.addAll(getPublishedPalRepositoryTreeDataByPid(context, wsId, method)); + } + + i++; + } + + return result; + } + + /** + * 获取使用中的流程树根节点 + * + * @param uc + * @param wsId + * @param categorys + * @param teamId 小组Id + * @return + */ + public JSONArray getPalRepositoryTreeRoot(UserContext uc, String wsId, String categorys, String teamId) { + JSONArray result = new JSONArray(); + List palMethodList; + String[] categoryArray; + if (UtilString.isEmpty(categorys)) {// 不指定分类 + palMethodList = PALMethodCache.getPALMethodList(true); + if (!UtilString.isEmpty(teamId)) { + palMethodList = PALMethodCache.getPALMethodList(true); + List list = new ArrayList<>(); + List list1 = CoeProcessLevelUtil.getPermRepositoryList(wsId, teamId, uc.getUID(), null, null, true, false); + for (String str: palMethodList) { + for (PALRepositoryModel model : list1) { + if (model.getMethodCategory().equals(str)) { + list.add(new String(str)); + break; + } + } + } + palMethodList = list; + } + categoryArray = new String[palMethodList.size()]; + palMethodList.toArray(categoryArray); + } else {// 指定分类 + categoryArray = categorys.split(","); + } + for (String category : categoryArray) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("id", category); + jsonObject.put("currId", category); + jsonObject.put("versionId", category); + String name = I18nRes.findValue(CoEConstant.APP_ID, category); + jsonObject.put("name", name); + JSONObject icon = new JSONObject(); + icon.put("icon", ""); + icon.put("color", "red"); + jsonObject.put("icon", icon); + jsonObject.put("plCategory", category); + jsonObject.put("plMethodId", ""); + List list = CoeProcessLevelUtil.getPermRepositoryList(wsId, teamId, uc.getUID(), category, null, true, false); + if (list != null && list.size() > 0) { + jsonObject.put("leaf", false); + } else { + jsonObject.put("leaf", true); + } + result.add(jsonObject); + } + return result; + } + + /** + * 根据pid获取使用中的流程树 + * + * @param wsId 流程库Id + * @param pid 父节点Id + * @return + */ + public JSONArray getUsedPalRepositoryTreeDataByPid(UserContext context, String wsId, String pid) { + List list = getUsedPalRepositoryModelsByPid(wsId, pid); // 根据父节点Id获取使用中的子节点 + Collections.sort(list, new Comparator1()); // 按级别排序 + JSONArray result = list2Json(context, list, true, false); + return result; + } + + + /**************************************************** 获取流程树 **********************************************************/ + + /** + * 根据pid获取发布的流程树 + * + * @param wsId 流程库Id + * @param pid 父节点Id + * @return + */ + public JSONArray getPublishedPalRepositoryTreeDataByPid(UserContext context, String wsId, String pid) { + List list = getUsedPalRepositoryModelsByPid(wsId, pid); // 根据父节点Id获取使用中的子节点 + Collections.sort(list, new Comparator1()); // 按级别排序 + JSONArray result = list2Json(context, list, false, true); + + return result; + } + + /** 父节点下的所有子节点 */ + private static void recurPermChild(List repidList, List newList, String newParentId) { + if(repidList!=null) { + for( int i=0; i list = null; + boolean isUsed = false; + boolean isPublished = false; + if ("isUsed".equals(type)) { + isUsed = true; + } else if ("isPublished".equals(type)) { + isPublished = true; + } + list = getPalRepositoryModelsByTeamId(wsId, context.getUID(), teamId, isUsed, isPublished); + Collections.sort(list, new Comparator1()); // 按级别排序 + List newList = setNewPid(list); + + List categorys = PALMethodCache.getPalMehtodList(teamId, context.getUID(), isUsed, isPublished, true); + int i = 1; + for (String category : categorys) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("id", category); + String name = I18nRes.findValue(CoEConstant.APP_ID, category); + jsonObject.put("name", name); + jsonObject.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/" + category + ".png"); + jsonObject.put("menu", false); + jsonObject.put("url", "./w?sid=" + context.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=" + category + "&type=0&wsid=" + wsId); + jsonObject.put("open", i == 1); + result.add(jsonObject); + i++; + } + + result.addAll(list2Json(context, newList, isUsed, isPublished)); + + return result; + } + + /** + * 根据流程小组获取有权限的完整流程树 + * + * @param context + * @param wsId + * @param teamId + * @param type + * @return + */ + public JSONArray getPermPalRepositoryTreeDataByUser(UserContext context, String wsId, String teamId, String type) { + JSONArray result = new JSONArray(); + + List list = null; + boolean isUsed = false; + boolean isPublished = false; + if ("isUsed".equals(type)) { + isUsed = true; + } else if ("isPublished".equals(type)) { + isPublished = true; + } + list = getPalRepositoryModelsByTeamId(wsId, context.getUID(), teamId, isUsed, isPublished); + Collections.sort(list, new Comparator1()); // 按级别排序 + List newList = setNewPid(list); + + List categorys = PALMethodCache.getPalMehtodList(teamId, context.getUID(), isUsed, isPublished, true); + int i = 1; + for (String category : categorys) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("id", category); + String name = I18nRes.findValue(CoEConstant.APP_ID, category); + jsonObject.put("name", name); + jsonObject.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/" + category + ".png"); + jsonObject.put("menu", false); + jsonObject.put("url", "./w?sid=" + context.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=" + category + "&type=0&wsid=" + wsId); + jsonObject.put("open", i == 1); + result.add(jsonObject); + i++; + } + result.addAll(list2Json(context, newList, isUsed, isPublished)); + + return result; + } + + /** + * 获取有权限以及Methods限制的完整流程树 + * + * @param context + * @param wsId + * @param teamId + * @param type + * @return + */ + public JSONArray getPermPalRepositoryTreeDataByMethods(UserContext context, String wsId, String teamId, String type, String methods) { + JSONArray result = new JSONArray(); + + List list = null; + boolean isUsed = false; + boolean isPublished = false; + if ("isUsed".equals(type) || "designer".equals(type)) { + isUsed = true; + } else if ("isPublished".equals(type)) { + isPublished = true; + } + list = getPalRepositoryModelsByTeamId(wsId, context.getUID(), teamId, isUsed, isPublished); + if (list == null) { + list = new ArrayList(); + } + List removeList = new ArrayList(); + StringBuilder removeIds = new StringBuilder(); + // 若type为designer并且有数据,则过滤掉已发布的 + if("designer".equals(type) && list != null && list.size() > 0) { + List tempList = new ArrayList(); + for (PALRepositoryModel model : list) { + if (!model.isPublish()) { + tempList.add(model); + } + } + list = tempList; + } + Collections.sort(list, new Comparator1()); // 按级别排序 + List newList = setNewPid(list); + + List categorys = PALMethodCache.getPalMehtodList(teamId, context.getUID(), isUsed, isPublished, true); + int i = 1; + for (String category : categorys) { + if (methods != null && !"".equals(methods)) { + if (methods.indexOf(category) == -1) { + continue; + } + } + JSONObject jsonObject = new JSONObject(); + jsonObject.put("id", category); + jsonObject.put("nocheck", true); + String name = I18nRes.findValue(CoEConstant.APP_ID, category); + jsonObject.put("name", name); + jsonObject.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/" + category + ".png"); + jsonObject.put("menu", false); + jsonObject.put("url", "./w?sid=" + context.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=" + category + "&type=0&wsid=" + wsId); + jsonObject.put("open", i == 1); + result.add(jsonObject); + i++; + } + + // 过滤掉method以外的 + for (PALRepositoryModel model : list) { + if (!methods.contains(model.getMethodId())) { + removeIds.append(model.getId()).append(","); + } + } + result.addAll(list2Json(context, newList, isUsed, isPublished, removeIds.toString(), type)); + + return result; + } + + /**************************************************异步获取流程子节点start**************************************************************************/ + + /** + * 获取当前节点的第一级子节点 + * + * @param context 用户 + * @param categorys 流程大类,多个则逗号分隔 + * @param wsId + * @param teamId 若teamId不为空,则获取该用户的小组权限之内的流程 + * @param pid 父节点,为空则以cagegorys中每个元素作为父节点返回结果 + * @return + */ + public JSONArray getSubRepositoryListByPid(UserContext context, String categorys, String wsId, String teamId, String pid) { + JSONArray result = new JSONArray(); + String[] categoryArr = categorys.split(","); + if (UtilString.isEmpty(pid)) {// 父节点为空,直接返回categorys拼接结果 + for (String category : categoryArr) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("id", category); + jsonObject.put("nocheck", true); + String name = I18nRes.findValue(CoEConstant.APP_ID, category); + jsonObject.put("name", name); + jsonObject.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/" + category + ".png"); + jsonObject.put("open", false); + result.add(jsonObject); + } + return result; + } + List tmpList = new ArrayList<>(); + Set resourcePermList = new HashSet(); + if (!UtilString.isEmpty(teamId)) { + resourcePermList = CoeProcessLevelUtil.getPermRepositoryVersionIds(wsId, teamId, context.getUID(), null, null); + } + // 获取子节点集合 + Set ids = new HashSet<>(); + getSubPalListByPidAndTeamId(wsId, teamId, resourcePermList, pid, tmpList, ids); + Collections.sort(tmpList, new Comparator1()); + // 转换json + list2Json(context, tmpList, result, pid); + return result; + } + + /** + * 简易版list转换树结构json + * + * @param list + * @param result + */ + public void list2Json(UserContext context, List list, JSONArray result, String pid) { + for (PALRepositoryModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId().trim()); + object.put("pid", pid); + object.put("name", I18nRes.findValue(CoEConstant.APP_ID, context.getLanguage(), model.getName()).trim()); + object.put("wsId", model.getWsId()); + object.put("methodId", model.getMethodId().trim()); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(model.getMethodId()); + if (methodModel == null || methodModel.isFolder()) {// 没有该建模方法或者是文件夹类 + object.put("iconFont", ""); + } else { + object.put("iconFont", ""); + } + object.put("open", false); + object.put("versionId", model.getVersionId()); + object.put("version", model.getVersion()); + object.put("isUse", model.isUse()); + object.put("level", model.getLevel()); + object.put("ordexIndex", model.getOrderIndex()); + object.put("isPublish", model.isPublish()); + object.put("isStop", model.isStop()); + object.put("isApproval", model.isApproval()); + object.put("ext1", model.getExt1()); + object.put("ext2", model.getExt2()); + object.put("ext3", model.getExt3()); + object.put("ext4", model.getExt4()); + object.put("isUse", model.isUse()); + object.put("category", model.getMethodCategory()); + result.add(object); + } + } + + /** + * 获取流程的子节点 + * + * @param wsId 资产库ID + * @param teamId 流程团队小组Id + * @param resourcePermList 权限Set结合 + * @param pid 父节点 + * @param result 存放结果集的空List + * @param ids 空的set集合,防止数据原因造成死循环 + */ + public void getSubPalListByPidAndTeamId(String wsId, String teamId, Set resourcePermList, String pid, List result, Set ids) { + List list = PALRepositoryCache.getAllSubModelsByPid(wsId, pid); + if (list != null) { + if (UtilString.isEmpty(teamId)) { + for (PALRepositoryModel subModel : list) { + if (subModel.isUse()) { + result.add(subModel); + } + } + } else { + List tmpList = new ArrayList<>(); + for (PALRepositoryModel subModel : list) { + if (subModel.isUse()) { + tmpList.add(subModel); + } + } + for (PALRepositoryModel tmp : tmpList) { + if (resourcePermList.contains(tmp.getVersionId())) { + result.add(tmp); + } else { + if (!ids.contains(tmp.getVersionId())) {// 防止数据错误造成的死循环 + ids.add(tmp.getVersionId()); + getSubPalListByPidAndTeamId(wsId, teamId, resourcePermList, tmp.getId(), result, ids); + } + } + } + } + } + } + /**************************************************异步获取流程子节点end**************************************************************************/ + + /** + * 通过流程model列表,获取流程树的json数组 + * + * @param context + * @param list + * @return + */ + public JSONArray list2Json(UserContext context, List list, boolean isUsed, boolean isPublished) { + return list2Json(context, list, isUsed, isPublished, null, null); + } + + private JSONArray list2Json(UserContext context, List list, boolean isUsed, boolean isPublished, String removeIds, String param) { + JSONArray jsonArray = new JSONArray(); + for (PALRepositoryModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId().trim()); + object.put("pid", model.getNewParentId().trim()); + if (removeIds != null && removeIds.contains(model.getId().trim())) { + object.put("nocheck", true); + } else { + object.put("nocheck", false); + } + object.put("plNo", CoeProcessLevelUtil.getProcessLevelNoByUUId(model.getId(), model.getWsId()).trim()); + object.put("name", I18nRes.findValue(CoEConstant.APP_ID, context.getLanguage(), model.getName()).trim()); + object.put("wsId", model.getWsId()); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(model.getMethodId()); + if (methodModel == null || methodModel.isFolder()) {// 没有该建模方法或者是文件夹类 + object.put("title", object.get("name")); + } else { + object.put("title", object.get("name") + " " + VersionUtil.getVersionStrV(model.getVersion()).trim()); + } + //三员管理文件密级校验 + if (HighSecurityUtil.isON() && HighSecurityUtil.fileSecuritySwitch()){ + ResponseObject responseObject = new CoeProcessLevelWeb(DispatcherRequest.getUserContext()).checkFilePemission(model.getId()); + if (responseObject.isErr() && (methodModel != null && !methodModel.isFolder())){ + object.put("nocheck", true); + } + } + object.put("drop", false); + object.put("isSystemFile", model.isSystemFile()); + object.put("plMethodId", model.getMethodId().trim()); + if (methodModel == null || methodModel.isFolder()) {// 没有该建模方法或者是文件夹类 + object.put("iconFont", ""); + } else { + object.put("iconFont", ""); + } + List children = null; + if (isUsed) { + children = getUsedPalRepositoryModelsByPid(model.getWsId(), model.getId()); + if (param != null && "designer".equals(param) && children != null && children.size() > 0) {// 过滤掉发布版本 + List tempChildren = new ArrayList<>(); + for (PALRepositoryModel model2 : children) { + if (!model2.isPublish()) { + tempChildren.add(model2); + } + } + children = tempChildren; + } + } else if (isPublished) { + children = getPublishedPalRepositoryModelsByPid(model.getWsId(), model.getId()); + } + if (children == null || children.size() == 0) { + object.put("isParent", false); + //String icon = object.getString("icon"); + object.put("leaf", true);// 叶子节点 + // object.put("icon", icon.replace("16.png", "16.leaf.png")); + } else { + object.put("isParent", true); + object.put("open", false); + } + + object.put("plLevel", model.getLevel()); + object.put("plOrdexIndex", model.getOrderIndex()); + object.put("plDiagramUrl", model.getDiagramUrl()); + object.put("isDrops", model.isSystemFile()); + object.put("isPublish", model.isPublish()); + object.put("isStop", model.isStop()); + object.put("isApproval", model.isApproval()); + object.put("ext1", model.getExt1()); + object.put("ext2", model.getExt2()); + object.put("ext3", model.getExt3()); + object.put("ext4", model.getExt4()); + object.put("isUse", model.isUse()); + object.put("url", "./w?sid=" + context.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=" + model.getId() + "&type=1&wsid=" + model.getWsId()); + object.put("plCategory", model.getMethodCategory()); + object.put("versionId", model.getVersionId()); + object.put("orderIndex", model.getOrderIndex()); + object.put("isBottomLevel", model.isBottomLevel()); + String dutyDeptId = model.getDutyDept(); + object.put("dutyDeptId", dutyDeptId == null ? "" : dutyDeptId); + String plDutyDeptName = dutyDeptId; + if (!UtilString.isEmpty(dutyDeptId)) { + if (SDK.getORGAPI().getDepartmentById(dutyDeptId) != null) { + plDutyDeptName = SDK.getORGAPI().getDepartmentById(dutyDeptId).getName(); + } + } + object.put("dutyDeptName", UtilString.isEmpty(dutyDeptId) ? "" : plDutyDeptName); + String plDutyPerson = model.getDutyUser(); + object.put("dutyPersonId", model.getDutyUser() == null ? "" : model.getDutyUser()); + object.put("dutyPersionName", UtilString.isEmpty(plDutyPerson) ? "" : SDK.getORGAPI().getUserAliasNames(plDutyPerson)); + jsonArray.add(object); + } + return jsonArray; + } + + /** + * 对于不完整的流程树(有权限限制等),重新设置父节点Id + * + * @param list + */ + public List setNewPid(List list) { + List newList = new ArrayList(); + Map versionIdMap = new HashMap(); + if (list != null && list.size() > 0) { + for (PALRepositoryModel model : list) { + versionIdMap.put(model.getVersionId(), model); + } + + for (PALRepositoryModel model : list) { + try { + PALRepositoryModelImpl modelImpl = ((PALRepositoryModelImpl) model).clone(); + String pid = model.getParentId(); + modelImpl.setNewParentId(pid); + if (pid.length() < 36) { + newList.add(modelImpl); + continue; + } + boolean flag = false; + while (!flag) { + if (pid.length() < 36) { + modelImpl.setNewParentId(pid); + flag = true; + newList.add(modelImpl); + break; + } + PALRepositoryModel pModel = PALRepositoryCache.getCache().get(pid); + if (pModel != null) { + if (versionIdMap.containsKey(pModel.getVersionId())) { + modelImpl.setNewParentId(versionIdMap.get(pModel.getVersionId()).getId()); + newList.add(modelImpl); + flag = true; + break; + } else { + pid = pModel.getParentId(); + } + } else { + break; + } + } + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + } + } + return newList; + } + + /**************************************************** 流程树相关方法 *******************************************************/ + + /** + * 根据name获取流程文件 + * + * @param name + * @return + */ + public List getCoeProcessLevelByName(String name, String wsId, String methodId) { + PALRepository dao = new PALRepository(); + return dao.getCoeProcessLevelByName(name, wsId, methodId); + + } + + public List sortListByLevel(List list) { + Collections.sort(list, new Comparator1()); // 按级别排序 + return list; + } + + /** + * 获取部门下的流程根节点(仅适用于责任部门选择org) + * @param uid 用户ID + * @param wsId 资产库Id,为空则查询默认资产库 + * @param methodId + * @param category + * @param isUsed + * @param isPublish + * @return + */ + public List getRootPALRepositoryModelsByDeptId(String uid, String wsId, String methodId, String category, boolean isUsed, boolean isPublish) { + String deptIds = getDeptIdsInSql(uid); + List list = new PALRepository().getRootPALRepositoryModelsByDeptId(deptIds, wsId, methodId, category, isUsed, isPublish); + List rootList = new ArrayList(); + + if (list != null && list.size() > 0) { + Set versionIds = new HashSet(); + for (PALRepositoryModel model : list) { + if (!versionIds.contains(model.getVersionId())) { + versionIds.add(model.getVersionId()); + } + } + + /* + * 如果流程的父节点也在列表中,则只保留根节点 + */ + for (PALRepositoryModel model : list) { + boolean flag = true; + String pid = model.getParentId(); + while (pid.length() == 36) { + if (versionIds.contains(pid)) { + flag = false; + break; + } + List pList = PALRepositoryCache.getByVersionId(model.getWsId(), pid); + if (pList == null || pList.size() == 0) { + // 如果父节点已经不在资产库中,则不显示该节点。 + flag = false; + break; + } + pid = pList.get(0).getParentId(); + + } + if (flag) { + rootList.add(model); + } + } + } + + return rootList; + } + + /** + * 获取部门下的所有流程(仅适用于责任部门选择org) + * @param uid 用户ID + * @param wsId 资产库Id,为空则查询默认资产库 + * @param methodId + * @param category + * @param isUsed + * @param isPublish + * @return + */ + public List getAllPALRepositoryModelsByDeptId(String uid, String wsId, String methodId, String category, boolean isUsed, boolean isPublish) { + String deptIds = getDeptIdsInSql(uid); + return new PALRepository().getAllPALRepositoryModelsByDeptId(deptIds, wsId, methodId, category, isUsed, isPublish); + } + + /** + * 根据uid,获取可以查看的流程的责任部门Id + * @param uid + * @return + */ + public String getDeptIdsInSql(String uid) { + String plDeptLayerS = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_PLDEPT_LAYER); + int plDeptLayer = Integer.parseInt(plDeptLayerS); + String deptId = ""; // 要查找的顶级部门 + String deptIds = ""; + DepartmentModel dept = SDK.getORGAPI().getDepartmentByUser(uid); + // 如果属性设置的流程责任部门组织级别为-1,则查询责任部门为当前部门及子部门的流程 + if ("-1".equals(plDeptLayerS)) { + deptId = dept.getId(); + } else { + int deptLayer = dept.getLayer(); + if (deptLayer == plDeptLayer) { + deptIds = "'" + dept.getId() + "'"; + } else if (deptLayer > plDeptLayer) { + // 当前用户的级别小于流程责任部门组织级别,则向上查找上级部门 + while (deptLayer > plDeptLayer) { + String pDeptId = dept.getParentDepartmentId(); + dept = SDK.getORGAPI().getDepartmentById(pDeptId); + if (dept == null) { + break; + } + deptLayer = dept.getLayer(); + } + if (deptLayer == plDeptLayer) { + deptId = dept.getId(); + } + } else if (deptLayer < plDeptLayer) { + // 当前用户的级别大于流程责任部门组织级别,则从当前部门向下查找所有子部门 + deptId = dept.getId(); + } + } + // 查询所有子部门 + List departmentList = new ArrayList(); + DepartmentCache.getAllDepartmentList(deptId, departmentList); + StringBuilder ids = new StringBuilder("'" + deptId + "'"); + for (DepartmentModel model : departmentList) { + ids.append(",'").append(model.getId()).append("'"); + } + deptIds = ids.toString(); + return deptIds; + } + + /** + * + * @param uid + * @param searchList + * @return + */ + public List getDutyDeptRepository(String uid, List searchList) { + List list = new ArrayList(); + String deptIds = getDeptIdsInSql(uid); + if (searchList != null && searchList.size() > 0) { + for (PALRepositoryModel model : searchList) { + String dutyDept = model.getDutyDept(); + if (!UtilString.isEmpty(dutyDept) && deptIds.indexOf(dutyDept) > -1) { + list.add(model); + continue; + } else if (!UtilString.isEmpty(dutyDept) && deptIds.indexOf(dutyDept) == -1) { + continue; + } else { + String pid = model.getParentId(); + while (true) { + if (pid.length() < 36) { + break; + } else { + PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(pid); + if (!UtilString.isEmpty(parentModel.getDutyDept()) && deptIds.indexOf(parentModel.getDutyDept()) > -1) { + list.add(model); + break; + } else { + pid = parentModel.getParentId(); + } + } + } + + } + } + } + return list; + } + + /** + * 流程,发布版本下,未发布流程可见 + * @param context + * @param wsId + * @param pid + * @return + */ + public String getPublishProcessIsVisibleModelList(UserContext context, String wsId, String pid) { + List subPublishList = getPublishedPalRepositoryModelsByPid(wsId, pid);// 发布的子流程 + List subUseList = getUsedPalRepositoryModelsByPid(wsId, pid);// 使用中的子流程 + List list = new ArrayList(); // 获取所有子流程 + Map map = new HashMap(); + for (int i = 0; i < subPublishList.size(); i++) { + PALRepositoryModel model = subPublishList.get(i); + map.put(model.getVersionId(), model); + } + List removeList = new ArrayList(); + if (subUseList != null && subUseList.size() > 0) { + for (int j = subUseList.size() - 1; j >= 0; j--) { + PALRepositoryModel model = subUseList.get(j); + if (map.containsKey(model.getVersionId())) { + list.add(map.get(model.getVersionId())); + removeList.add(model); + } + } + subUseList.removeAll(removeList); + } + list.addAll(subUseList); + Collections.sort(list, new Comparator1()); // 按级别排序 + JSONArray result = list2Json(context, list, true, false); + return result.toString(); + } + + /** + * 部门流程,获取根节点 + * @param uid + * @param wsId + * @param methodId + * @param category + * @param isUse + * @param isPublish + * @return + */ + public List getRootRepositoryModelListByDept(String uid, String wsId, String methodId, String category, boolean isUse, boolean isPublish) { + List rootUseList = new ArrayList(); + PALRepository dao = new PALRepository(); + String deptIds = getDeptIdsInSql(uid); + List deptList = dao.searchRepositoryListForProcessTree(wsId, methodId, category, isUse, isPublish, deptIds, null); + Map map = new HashMap(); + if (deptList != null && deptList.size() > 0) { + for (PALRepositoryModel model : deptList) { + map.put(model.getVersionId(), model); + } + } + if (deptList != null && deptList.size() > 0) { + for (PALRepositoryModel model : deptList) { + String pid = model.getParentId(); + while (true) { + if (pid.length() < 36) { + rootUseList.add(model); + break; + } else if (map.containsKey(pid)) { + break; + } else { + PALRepositoryModel tempModel = PALRepositoryCache.getCache().get(pid); + if (tempModel != null) { + pid = tempModel.getParentId(); + } else { + break; + } + } + } + } + } + return rootUseList; + } + + /** + * 获取有发布版本的部门流程根节点,没有发布版本,取该节点的使用版本 + * @param uid + * @param wsId + * @param methodId + * @param category + * @param isUsed + * @param isPublish + * @return + */ + public List getPublishProcessIsVisibleModelListByDept(String uid, String wsId, String methodId, String category, boolean isUsed, boolean isPublish) { + List list = new ArrayList(); + List rootUseList = getRootRepositoryModelListByDept(uid, wsId, methodId, category, isUsed, isPublish); + List removeList = new ArrayList(); + if (rootUseList != null && rootUseList.size() > 0) { + for (int i = rootUseList.size() - 1; i >= 0; i--) { + PALRepositoryModel model = rootUseList.get(i); + List curModelList = PALRepositoryCache.getByVersionId(model.getWsId(), model.getVersionId()); + for (int j = 0; j < curModelList.size(); j++) { + PALRepositoryModel curModel = curModelList.get(j); + if (curModel.isPublish()) { + list.add(curModel); + removeList.add(model); + break; + } + } + } + rootUseList.removeAll(removeList); + } + list.addAll(rootUseList); + return list; + } + + /** + * 获取有发布版本的部门流程,没有发布版本,取该节点的使用版本 + * @param uid + * @param wsId + * @param methodId + * @param category + * @param isUsed + * @param isPublish + * @return + */ + public List getAllPublishProcessIsVisibleModelListByDept(String uid, String wsId, String methodId, String category, boolean isUsed, boolean isPublish) { + List list = new ArrayList(); + List allDeptList = getAllPALRepositoryModelsByDeptId(uid, wsId, methodId, category, isUsed, isPublish); + if (allDeptList == null) { + return list; + } + List removeList = new ArrayList(); + if (allDeptList.size() > 0) { + for (int i = 0; i < allDeptList.size(); i++) { + PALRepositoryModel model = allDeptList.get(i); + List curModelList = PALRepositoryCache.getByVersionId(model.getWsId(), model.getVersionId()); + for (int j = 0; j < curModelList.size(); j++) { + PALRepositoryModel curModel = curModelList.get(j); + if (curModel.isPublish()) { + list.add(curModel); + removeList.add(model); + break; + } + } + } + allDeptList.removeAll(removeList); + } + list.addAll(allDeptList); + return list; + } + + /** + * 获取有发布版本部门根节点下流程,没有发布版本的流程不显示 + * @param uid + * @param wsId + * @param methodId + * @param category + * @param isUsed + * @param isPublish + * @return + */ + public List getPublishProcessIsHiddenModelListByDept(String uid, String wsId, String methodId, String category, boolean isUsed, boolean isPublish) { + List list = new ArrayList(); + List publishRootList = getRootRepositoryModelListByDept(uid, wsId, methodId, category, isUsed, isPublish); + if (publishRootList != null && publishRootList.size() > 0) { + for (PALRepositoryModel rootModel : publishRootList) { + if (rootModel.isPublish()) { + list.add(rootModel); + } + List childrenList = new ArrayList(); + getAllPublishedPalRepositoryModelsByPid(rootModel.getWsId(), rootModel.getId(), childrenList); + list.addAll(childrenList); + } + } + return list; + } + + /** + * 流程树--根据流程名称搜索流程 + * @param context + * @param wsId + * @param methodId + * @param category + * @param processType + * @param isUse + * @param isPublish + * @param palName + * @return + */ + public List searchPALRepositoryByName(UserContext context, String wsId, String methodId, String category, String processType, boolean isUse, boolean isPublish, String palName) { + String deptIds = ""; + if (!UtilString.isEmpty(processType) && processType.equals("dept")) { + deptIds = getDeptIdsInSql(context.getUID()); + } + return new PALRepository().searchRepositoryListForProcessTree(wsId, methodId, category, isUse, isPublish, deptIds, palName); + } + + public JSONArray searchList2Json(UserContext context, List list, boolean isUsed, boolean isPublished) { + return searchList2Json(context, list, isUsed, isPublished, null); + } + + private JSONArray searchList2Json(UserContext context, List list, boolean isUsed, boolean isPublished, String removeIds) { + JSONArray jsonArray = new JSONArray(); + for (PALRepositoryModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId().trim()); + object.put("pid", model.getNewParentId().trim()); + if (removeIds != null && removeIds.contains(model.getId().trim())) { + object.put("nocheck", true); + } else { + object.put("nocheck", false); + } + object.put("plNo", CoeProcessLevelUtil.getProcessLevelNoByUUId(model.getId(), model.getWsId()).trim()); + object.put("name", I18nRes.findValue(CoEConstant.APP_ID, context.getLanguage(), model.getName()).trim()); + object.put("wsId", model.getWsId()); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(model.getMethodId()); + if (methodModel == null || methodModel.isFolder()) {// 没有该建模方法或者是文件夹类 + object.put("title", object.get("name")); + } else { + object.put("title", object.get("name") + " " + VersionUtil.getVersionStrV(model.getVersion()).trim()); + } + object.put("drop", false); + object.put("isSystemFile", model.isSystemFile()); + object.put("plMethodId", model.getMethodId().trim()); + if (methodModel == null || methodModel.isFolder()) {// 没有该建模方法或者是文件夹类 + object.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/default/16.png"); + } else { + object.put("icon", "../apps/" + PALMethodCache.getPALMethodModelById(model.getMethodId()).getApp().getId() + "/img/method/" + model.getMethodId() + "/16.png"); + } + + List children = null; + if (isUsed) { + children = getUsedPalRepositoryModelsByPid(model.getWsId(), model.getId()); + } else if (isPublished) { + children = getPublishedPalRepositoryModelsByPid(model.getWsId(), model.getId()); + } + if (children == null || children.size() == 0) { + object.put("isParent", false); + String icon = object.getString("icon"); + object.put("icon", icon.replace("16.png", "16.leaf.png")); + } else { + object.put("isParent", true); + object.put("open", false); + } + + object.put("plLevel", model.getLevel()); + object.put("plOrdexIndex", model.getOrderIndex()); + object.put("plDiagramUrl", model.getDiagramUrl()); + object.put("isDrops", model.isSystemFile()); + object.put("isPublish", model.isPublish()); + object.put("isUse", model.isUse()); + object.put("url", "./w?sid=" + context.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=" + model.getId() + "&type=1&wsid=" + model.getWsId()); + object.put("plCategory", model.getMethodCategory()); + object.put("versionId", model.getVersionId()); + object.put("orderIndex", model.getOrderIndex()); + object.put("isBottomLevel", model.isBottomLevel()); + String dutyDeptId = model.getDutyDept(); + object.put("dutyDeptId", dutyDeptId == null ? "" : dutyDeptId); + String plDutyDeptName = dutyDeptId; + if (!UtilString.isEmpty(dutyDeptId)) { + if (SDK.getORGAPI().getDepartmentById(dutyDeptId) != null) { + plDutyDeptName = SDK.getORGAPI().getDepartmentById(dutyDeptId).getName(); + } + } + object.put("dutyDeptName", UtilString.isEmpty(dutyDeptId) ? "" : plDutyDeptName); + String plDutyPerson = model.getDutyUser(); + object.put("dutyPersonId", model.getDutyUser() == null ? "" : model.getDutyUser()); + object.put("dutyPersionName", UtilString.isEmpty(plDutyPerson) ? "" : SDK.getORGAPI().getUserAliasNames(plDutyPerson)); + List models = new ArrayList(); + models.add(model); + PALRepositoryModel tempModel; + String parentId = model.getParentId(); + while (true) { + tempModel = PALRepositoryCache.getCache().get(parentId); + if (tempModel != null) { + models.add(tempModel); + parentId = tempModel.getParentId(); + } else { + if (parentId.length() < 36) { + PALRepositoryModelImpl cplm = new PALRepositoryModelImpl(); + cplm.setId(parentId); + cplm.setName(parentId); + models.add(cplm); + } + break; + } + } + StringBuffer sb = new StringBuffer(); + for (int ii = models.size() - 1; ii >= 0; ii--) { + PALRepositoryModel plModel = models.get(ii); + sb.append(I18nRes.findValue(CoEConstant.APP_ID, plModel.getName())); + if (ii != 0) { + sb.append(">"); + } + } + object.put("currentPath", sb.toString()); + jsonArray.add(object); + } + return jsonArray; + } + + /** + * 根据部门Id获取流程 + * @param deptIds + * @param wsId + * @param methodId + * @param category + * @param isUsed + * @param isPublish + * @return + */ + public List getRootPALRepositoryModelsByBP(String deptIds, String wsId, String methodId, String category, boolean isUsed, boolean isPublish) { + List list = new PALRepository().getRootPALRepositoryModelsByDeptId(deptIds, wsId, methodId, category, isUsed, isPublish); + List rootList = new ArrayList(); + if (list != null && list.size() > 0) { + Set versionIds = new HashSet(); + for (PALRepositoryModel model : list) { + if (!versionIds.contains(model.getVersionId())) { + versionIds.add(model.getVersionId()); + } + } + for (PALRepositoryModel model : list) { + boolean flag = true; + String pid = model.getParentId(); + while (pid.length() == 36) { + if (versionIds.contains(pid)) { + flag = false; + break; + } + List pList = PALRepositoryCache.getByVersionId(model.getWsId(), pid); + if (pList == null || pList.size() == 0) { + // 如果父节点已经不在资产库中,则不显示该节点。 + flag = false; + break; + } + pid = pList.get(0).getParentId(); + + } + if (flag) { + rootList.add(model); + } + } + /** + * 如果流程的父节点也在列表中,则只保留 + */ + } + return rootList; + } + + /** + * 获取指定层级的流程 + * @param _uc + * @param wsId + * @param methodId + * @param category + * @param isUsed + * @param isPublish + * @param level + * @return + */ + public JSONArray getSpecityLevelRepository(UserContext _uc, String wsId, String methodId, String category, boolean isUsed, boolean isPublish, int level) { + JSONArray array = new JSONArray(); + PALRepository dao = new PALRepository(); + String deptId = getDeptIdsInSql(_uc); + List list = dao.getSpecityLevelByDeptId(deptId, wsId, methodId, category, isUsed, isPublish, level); + if (list != null && list.size() > 0) { + StringBuilder filePerms = new StringBuilder(""); + for (PALRepositoryModel model : list) { + filePerms.append(model.getId()).append(","); + } + + for (int i = 0; i < list.size(); i++) { + PALRepositoryModel model = list.get(i); + JSONObject obj = JSONObject.parseObject(model.toJson()); + String openUrl = "./w?sid=" + _uc.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_viewer" + "&uuid=" + model.getId() + "&openType=0&processDefId=" + model.getVersionId() + "&collaboration=1&teamId=&perms=v" + "&filePerms=" + filePerms.toString(); + obj.put("openUrl", openUrl); + array.add(obj); + } + + } + return array; + } + + /** + * 根据uc,获取可以查看的流程的责任部门Id + * @param uc + * @return + */ + public String getDeptIdsInSql(UserContext uc) { + String plDeptLayerS = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_PLDEPT_LAYER); + int plDeptLayer = Integer.parseInt(plDeptLayerS); + String deptId = ""; // 要查找的顶级部门 + String deptIds = ""; + DepartmentModel dept = SDK.getORGAPI().getDepartmentByUser(uc.getUID()); + // 如果属性设置的流程责任部门组织级别为-1,则查询责任部门为当前部门及子部门的流程 + if ("-1".equals(plDeptLayerS)) { + deptId = dept.getId(); + } else { + int deptLayer = dept.getLayer(); + if (deptLayer == plDeptLayer) { + deptId = dept.getId(); + } else if (deptLayer > plDeptLayer) { + // 当前用户的级别小于流程责任部门组织级别,则向上查找上级部门 + while (deptLayer > plDeptLayer) { + String pDeptId = dept.getParentDepartmentId(); + dept = SDK.getORGAPI().getDepartmentById(pDeptId); + if (dept == null) { + break; + } + deptLayer = dept.getLayer(); + } + if (deptLayer == plDeptLayer) { + deptId = dept.getId(); + } + } else if (deptLayer < plDeptLayer) { + // 当前用户的级别大于流程责任部门组织级别,则从当前部门向下查找所有子部门 + deptId = dept.getId(); + } + } + // 查询所有子部门 + List departmentList = new ArrayList(); + DepartmentCache.getAllDepartmentList(deptId, departmentList); + StringBuilder ids = new StringBuilder("'" + deptId + "'"); + for (DepartmentModel model : departmentList) { + ids.append(",'").append(model.getId()).append("'"); + } + deptIds = ids.toString(); + return deptIds; + } + + /** + * 获取流程图片 + * @param _uc 用户上下文对象 + * @param uuid 流程Id + * @return 图片url + */ + public String getPalRepositoryModelPicture(UserContext _uc, String uuid) { + PALRepositoryModel cplm = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + if (cplm == null) { + return null; + } + String p = cplm.getFilePath(); + String url = ""; + if (!"".equals(p)) { + UtilFile file = new UtilFile(p + "/" + cplm.getId() + ".png"); + if (file.exists()) { + DCContext dcContext = null; + DCUtil.getInstance(); + dcContext = DCUtil.createTempFileContext(CoEConstant.APP_ID, "Designer", "PNG", "png"); + String cplmName = cplm.getName().replace("\n", ""); + cplmName = StringHandleUtil.filenameFilter(cplmName, "-"); + dcContext.setFileName(cplmName + ".png"); + File ff = new File(dcContext.getFilePath()); + FileOutputStream fos = null; + try { + fos = new FileOutputStream(ff); + fos.write(file.readBytes()); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (fos != null) { + fos.flush(); + fos.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + dcContext.setSession(_uc); + url = SDK.getConfAPI().getPortalUrl() + "/r/" + dcContext.getDownloadURL().replace("./", ""); + } + } + return url; + } + + /** + * 导出单个流程手册 + * 仅限于应用流程手册com.actionsoft.apps.coe.pal.output.pr下的手册导出 + * @param wsId 资产库Id + * @param userId 用户Id + * @param teamId 小组Id + * @param fileId 流程文件Id + * @return 返回创建流程手册结果及taskId + */ + public String createOutputReportPr(String wsId, String userId, String teamId, String fileId) { + UserContext _uc = UserContext.fromUID(userId); + OutPutReportWeb web = new OutPutReportWeb(_uc); + String appId = "com.actionsoft.apps.coe.pal.output.pr"; + // 报告生成器参数配置 + boolean shapeNumberSort = SDK.getAppAPI().getPropertyBooleanValue(appId, "SHAPE_NUMBER_SORT", true); + String config = "{'isItReport':true,'orderNuberFirst':" + shapeNumberSort + ",'orderNametwo':false,'reportNameIsItName':'%fileName%_%fileVersion%'}";// 配置 + // 流程手册参数配置 cross:步骤横表,默认值/ vertical:步骤竖表/ project:项目定制 + String defaultReportPr = SDK.getAppAPI().getProperty(appId, "DEFAULT_REPORT_PR"); + String title = ""; + if ("cross".equals(defaultReportPr) || defaultReportPr == null || "".equals(defaultReportPr)) {// 步骤横表(默认) + title = "步骤横表"; + } + if ("vertical".equals(defaultReportPr)) {// 步骤竖表 + title = "步骤竖表"; + } + /*if ("project".equals(defaultReportPr)) {// 项目定制 + }*/ + // 获取流程手册下所有的流程模板 + List list = web.getOutputAppByAppId(appId); + OutputAppProfile outputAppProfile = null; + for (OutputAppProfile profile : list) { + if ("".equals(title) && !"步骤横表".equals(profile.getTitle()) && !"步骤竖表".equals(profile.getTitle())) { + outputAppProfile = profile; + break; + } + if (!"".equals(title) && title.equals(profile.getTitle())) { + outputAppProfile = profile; + break; + } + } + if (outputAppProfile == null) { + throw new AWSException("创建流程手册失败,未找到报告模版"); + } + String profileId = outputAppProfile.getId(); + String taskName = outputAppProfile.getTitle(); + String language = "".equals(outputAppProfile.getLang())?"cn":outputAppProfile.getLang(); + String isExecute = "Y"; + String targetShape = ""; + String relationFileId = ""; + String isModify = "false"; + String taskId = ""; + String result = web.reportSaveByCallable(language, taskName, userId, teamId, profileId, wsId, isExecute, config, fileId, targetShape, relationFileId, isModify, taskId); + ResponseObject ro = ResponseObject.parse(result); + if (ro.isOk()) { + com.alibaba.fastjson.JSONObject object = (com.alibaba.fastjson.JSONObject) ro.getData(); + String id = object.getString("taskId"); + // 更改状态为隐藏,不在界面显示该方式创建的流程手册数据 + new OutputTask().updateIsDisplayStatus(id); + } + return result; + } + + /** + * 预览流程手册 + * @param _uc + * @param taskId + * @return + */ + public String outputReportPreview(UserContext _uc, String taskId) { + OutputTaskModel model = new OutputTask().getTaskReportById(taskId); + ResponseObject result = ResponseObject.newOkResponse(); + if (model != null) { + try { + UtilFile file = OutputAPIManager.getInstance().getFilePath(model.getWsId(), taskId, model.getProfileId()); + if (file.exists()) { + File[] fileList = file.listFiles(); + if (fileList.length > 0) { + File docFile = null; + for (File file2 : fileList) { + if (file2.isFile() && "doc".equals((file2.getName().substring(file2.getName().lastIndexOf(".") + 1)))) { + docFile = file2; + break; + } + } + if (docFile == null) { + return ResponseObject.newErrResponse("没有找到文件").toString(); + } + if (SDK.getAppAPI().isActive("com.actionsoft.apps.addons.onlinedoc")) { + String sourceAppId = "com.actionsoft.apps.coe.pal.output.pr"; + String filename = docFile.getName(); + DCContext sourceDc = new DCContext(_uc, DCProfileManager.getDCProfile(sourceAppId, "output"), sourceAppId, model.getWsId(), taskId, filename); + Map aslpParams = new HashMap(); + + aslpParams.put("sid", _uc.getSessionId()); + aslpParams.put("fileNameOriginal", filename); + aslpParams.put("sourceDc", sourceDc); + aslpParams.put("isShowDefaultToolbar", true); + aslpParams.put("isShowBackbtn", false); + aslpParams.put("isEncrypt", true); + aslpParams.put("isCopy", true); + aslpParams.put("isPrint", true); + aslpParams.put("isDownload", true); + AppAPI appAPI = SDK.getAppAPI(); + ResponseObject responseObject = appAPI.callASLP(appAPI.getAppContext(sourceAppId), "aslp://com.actionsoft.apps.addons.onlinedoc/filePreview", aslpParams); + if (responseObject != null) { + if (responseObject.isOk()) { + String url = responseObject.get("url").toString(); + result.put("url", url); + result.put("filename", filename); + } else { + result = ResponseObject.newErrResponse("文档转换服务不可用,请联系管理员"); + } + } + } else { + result = ResponseObject.newErrResponse("文档转换服务不可用,请联系管理员"); + } + } + }else{ + result = ResponseObject.newErrResponse("没有可预览文件"); + } + } catch (Exception e) { + e.printStackTrace(); + return ResponseObject.newErrResponse().toString(); + } + } + return result.toString(); + } + + /** + * 发布流程访问量+1 + */ + public void UpDatePublishCount(PALRepositoryModel plModel) { + // 查询是否有访问数据 + PublishFrequencyDao dao = new PublishFrequencyDao(); + PublishFrequencyModel model = dao.getDataByVersionId(plModel.getVersionId()); + if (model == null) { + // 无访问量数据,新增数据,访问量初始化为1 + PublishFrequencyModel model2 = new PublishFrequencyModel(); + model2.setId(UUIDGener.getUUID()); + model2.setWsId(plModel.getWsId()); + model2.setPlversionId(plModel.getVersionId()); + model2.setCount(1); + dao.insert(model2); + } else { + // 有访问数据,访问量+1 + dao.update(model); + } + } + + /** + * 预览流程手册且流程访问量+1 + * @param _uc + * @param taskId + * @param uuid + * @return + */ + public String outputReportPreviewAndUpdatePublishCount(UserContext _uc, String taskId, String uuid) { + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + if (plModel == null) { + throw new AWSException("该流程未找到,预览失败"); + } + if (!plModel.isPublish()) { + throw new AWSException("该流程当前状态为未发布状态,不允许打开"); + } + UpDatePublishCount(plModel); + return outputReportPreview(_uc, taskId);// 预览流程 + } + + /** + * 获取高频流程列表 + * @param wsId 资产库id + * @param category 大分类 process流程,org组织,data数据,itsystem IT系统,control 风险与控制,null则不过滤 + * @param methodId 具体分类 + * @param count 获取数据条数,-1则获取所有数据 + * @return 返回高频表中数据,按照访问量降序,若高频表数据不足,返回符合条件的无序数据 + */ + public List getFrequenceProcess(String wsId, String category, String methodId, int count) { + boolean hasCategory = false; + if (!UtilString.isEmpty(category)) { + hasCategory = true; + } + boolean hasMehtod = false; + if (!UtilString.isEmpty(hasMehtod)) { + hasMehtod = true; + } + PublishFrequencyDao dao = new PublishFrequencyDao(); + List list = dao.getDataOrderByCount(wsId); + int index = 0;// 计数 + Set versionIds = new HashSet<>(); + List result = new ArrayList<>(); + + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + if (count != -1 && index == count) { + break; + } + PublishFrequencyModel model = list.get(i); + List plModels = PALRepositoryCache.getByVersionId(wsId, model.getPlversionId()); + if(plModels == null || plModels.size() == 0) { + continue; + } + for (int j = 0; j < plModels.size(); j++) { + PALRepositoryModel plModel = plModels.get(i); + if (plModel.isPublish()) { + boolean flag = false; + if (hasCategory && hasMehtod) { + if (category.equals(plModel.getMethodCategory()) && methodId.equals(plModel.getMethodId())) { + flag = true; + } + } else if (hasCategory) { + if (category.equals(plModel.getMethodCategory())) { + flag = true; + } + } else if (hasMehtod) { + if (methodId.equals(plModel.getMethodId())) { + flag = true; + } + } else { + flag = true; + } + if (flag && !versionIds.contains(plModel.getVersionId())) { + index ++; + versionIds.add(plModel.getVersionId()); + result.add(plModel); + } + } + } + } + } + + if (index < count) { + List list2 = IteratorUtils.toList(PALRepositoryCache.getByWsId(wsId)); + if (list2 != null && list2.size() > 0) { + for (int j = 0; j < list2.size(); j++) { + if (count != -1 && index == count) { + break; + } + PALRepositoryModel plModel = list2.get(j); + if (plModel.isPublish()) { + boolean flag = false; + if (hasCategory && hasMehtod) { + if (category.equals(plModel.getMethodCategory()) && methodId.equals(plModel.getMethodId())) { + flag = true; + } + } else if (hasCategory) { + if (category.equals(plModel.getMethodCategory())) { + flag = true; + } + } else if (hasMehtod) { + if (methodId.equals(plModel.getMethodId())) { + flag = true; + } + } else { + flag = true; + } + if (flag && !versionIds.contains(plModel.getVersionId())) { + index++; + versionIds.add(plModel.getVersionId()); + result.add(plModel); + } + } + } + } + } + return result; + } + + /** + * 创建模型图片和缩略图 + * @param uuid 流程Id + * @param bigImage 是否生成大图(正常图片大小) + * @param smallImage 是否生成缩略图 + */ + public void saveImage(String uuid, boolean bigImage, boolean smallImage){ + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + BaseModel model = null; + if (plModel != null) { + if (plModel.getMethodId().contains("bpmn")) { + model = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(uuid, 0); + } else { + model = CoeDesignerAPIManager.getInstance().getDefinition(uuid, 0); + } + if (model != null) { + // 形状锚点更新 + String define = CoeDesignerShapeAPIManager.getInstance().updateShapeConfig(uuid, model.getDefinition()); + model.setDefinition(define); + // 生成图片 + CoeDesignerImage.saveImage(model, bigImage, smallImage); + } + } + if(bigImage && smallImage) { + CoeDesignerImageCache.getCache().remove(uuid); + } + } + + /** + * 创建模型图片和缩略图,图片中流程图上方中间位置增加流程标题 + * 缩略图不进行标题处理 + * @param uuid 流程Id + * @param bigImage 是否生成大图(正常图片大小) + * @param smallImage 是否生成缩略图 + * @param title 可自定义标题,若为空,则默认为流程名称 + */ + public void saveImage(String uuid, boolean bigImage, boolean smallImage, String title){ + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + BaseModel model = null; + if (plModel != null) { + if (plModel.getMethodId().contains("bpmn")) { + model = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(uuid, 0); + } else { + model = CoeDesignerAPIManager.getInstance().getDefinition(uuid, 0); + } + if (model != null) { + + if (smallImage) { + CoeDesignerImage.saveImage(model, false, true); + } + if (bigImage) { + if (UtilString.isEmpty(title)) { + title = plModel.getName(); + } + // 新建一个对象,避免直接修改缓存导致缓存与文件数据不一致 + BaseModel copyModel = new BaseModel(); + copyModel.setUUID(model.getUUID()); + copyModel.setDefinition(model.getDefinition()); + copyModel.setPath(model.getPath()); + copyModel.setType(model.getType()); + copyModel.setMethodId(model.getMethodId()); + copyModel.setVer(model.getVer()); + copyModel.setDraw(model.getDraw()); + copyModel.setAction(model.getAction()); + copyModel.setCreateHistory(model.isCreateHistory()); + copyModel.setUpdateTime(model.getUpdateTime()); + copyModel.setVersionUuid(model.getVersionUuid()); + copyModel.setFileName(model.getFileName()); + + copyModel.setDefinition(createTextTitle(copyModel, title)); + CoeDesignerImage.saveImage(copyModel, true, false); + } + } + } + if(bigImage && smallImage) { + CoeDesignerImageCache.getCache().remove(uuid); + } + } + + /** + * 创建文本类型节点作为标题并返回流程定义 + * @param model + * @param title + * @return + */ + private String createTextTitle(BaseModel model, String title) { + JSONObject position = getDefinitionPosition(model); + if (position == null) { + return model.getDefinition(); + } + + int minX = position.getInteger("minX"); + int minY = position.getInteger("minY"); + int maxX = position.getInteger("maxX"); + // 添加文本 + String standardText = "{\"name\":\"standardText\",\"title\":\"\",\"category\":\"standard\",\"group\":\"\",\"groupName\":null,\"locked\":false,\"link\":\"\",\"children\":[],\"parent\":\"\",\"orderIndex\":0,\"resizeDir\":[\"tl\",\"tr\",\"br\",\"bl\"],\"attribute\":{\"container\":false,\"visible\":true,\"rotatable\":false,\"linkable\":false,\"editable\":true,\"markerOffset\":5},\"dataAttributes\":[{\"name\":\"AWSProperties\",\"type\":\"string\",\"value\":\"\",\"category\":\"default\",\"linksArray\":[],\"attributesContent\":\"\",\"attributesJsonArray\":[],\"privateAttribute\":[],\"privateAttributeContent\":[],\"privateShapesName\":[],\"shapeGroupId\":\"\",\"isCopy\":\"\",\"shapeDesc\":\"\",\"upFilesArray\":[],\"relevanceShapes\":[]}],\"props\":{\"x\":117,\"y\":130,\"w\":220,\"h\":32,\"zindex\":1,\"angle\":0},\"shapeStyle\":{\"alpha\":1},\"lineStyle\":{\"lineWidth\":2,\"lineColor\":\"50,50,50\",\"lineStyle\":\"solid\"},\"fillStyle\":{\"type\":\"solid\",\"color\":\"255,255,255\"},\"fontStyle\":{\"fontFamily\":\"Arial\",\"size\":20,\"color\":\"50,50,50\",\"bold\":false,\"italic\":false,\"underline\":false,\"textAlign\":\"center\",\"vAlign\":\"middle\",\"orientation\":\"vertical\"},\"path\":[{\"lineStyle\":{\"lineWidth\":0},\"fillStyle\":{\"type\":\"none\"},\"actions\":[{\"action\":\"move\",\"x\":\"0\",\"y\":\"0\"},{\"action\":\"line\",\"x\":\"w\",\"y\":\"0\"},{\"action\":\"line\",\"x\":\"w\",\"y\":\"h\"},{\"action\":\"line\",\"x\":\"0\",\"y\":\"h\"},{\"action\":\"close\"}]}],\"textBlock\":{\"x\":0,\"y\":0,\"w\":\"w\",\"h\":\"h\"},\"textBlockFinal\":{\"x\":0,\"y\":0,\"w\":220,\"h\":32},\"anchors\":[],\"resizeable\":\"1\"}"; + JSONObject shape = JSONObject.parseObject(standardText); + String shapeId = UUIDGener.getObjectId();//连线id + shape.put("id", shapeId); + shape.put("text", title); + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int index = 0; index < dataAttributes.size(); index++) { + dataAttributes.getJSONObject(index).put("id", UUIDGener.getObjectId()); + } + shape.put("dataAttributes", dataAttributes); + // 后续通过调整位置可支持标题在任何位置显示 + JSONObject props = shape.getJSONObject("props"); + props.put("x", minX); + props.put("y", minY - 40 - 10);// 40:文本高度,10:间距 + props.put("w", maxX - minX); + props.put("h", 40); + shape.put("props", props); + JSONObject textBlockFinal = shape.getJSONObject("textBlockFinal"); + if (textBlockFinal != null) { + textBlockFinal.put("w", maxX - minX); + textBlockFinal.put("h", 40); + } + shape.put("textBlockFinal", textBlockFinal); + String define = model.getDefinition(); + JSONObject definition = JSONObject.parseObject(define); + JSONObject elements = definition.getJSONObject("elements"); + elements.put(shapeId, shape); + definition.put("elements", elements); + // model.setDefinition(definition.toString()); + return definition.toString(); + } + + /** + * 获取文件的位置 + * @param model + * @return {x:最小横坐标,y:最小y坐标,w:最大宽度,h:最大高度} + */ + private JSONObject getDefinitionPosition(BaseModel model) { + int minX = 99999; + int minY = 99999; + int maxX = -99999; + int maxY = -99999; + String define = model.getDefinition(); + JSONObject definition = JSONObject.parseObject(define); + JSONObject elements = definition.getJSONObject("elements"); + Iterator it = elements.keySet().iterator(); + while (it.hasNext()) { + String elementId = it.next(); + JSONObject shape = elements.getJSONObject(elementId); + String shapeName = shape.getString("name"); + if (shapeName.equals("linker")) {// 连线处理 + // 连线拐点 + JSONArray points = shape.getJSONArray("points"); + if (points != null && points.size() > 0) { + for (int i = 0; i < points.size(); i++) { + JSONObject point = points.getJSONObject(i); + int x = point.getDouble("x").intValue(); + int y = point.getDouble("y").intValue(); + if (minX > x) { + minX = x; + } + if (minY > y) { + minY = y; + } + if (maxX < x) { + maxX = x; + } + if (maxY < y) { + maxY = y; + } + } + } + // 起点终点 + JSONObject from = shape.getJSONObject("from"); + if (from != null && from.size() > 0) { + int x = from.getInteger("x"); + int y = from.getInteger("y"); + if (minX > x) { + minX = x; + } + if (minY > y) { + minY = y; + } + if (maxX < x) { + maxX = x; + } + if (maxY < y) { + maxY = y; + } + } + JSONObject to = shape.getJSONObject("to"); + if (to != null && to.size() > 0) { + int x = to.getInteger("x"); + int y = to.getInteger("y"); + if (minX > x) { + minX = x; + } + if (minY > y) { + minY = y; + } + if (maxX < x) { + maxX = x; + } + if (maxY < y) { + maxY = y; + } + } + + } else {// 其他类型处理 + JSONObject props = shape.getJSONObject("props"); + int x = props.getInteger("x"); + int y = props.getInteger("y"); + int w = props.getInteger("w"); + int h = props.getInteger("h"); + if (minX > x) { + minX = x; + } + if (minY > y) { + minY = y; + } + if (maxX < x + w) { + maxX = x + w; + } + if (maxY < y + h) { + maxY = y + h; + } + } + } + if ( minX != 99999 && minY != 99999 && maxX != -99999 && maxY != -99999) { + JSONObject object = new JSONObject(); + object.put("minX", minX); + object.put("minY", minY); + object.put("maxX", maxX); + object.put("maxY", maxY); + return object; + } + return null; + } + + /** + * 校验图片,若该模型id在定时任务的缓存中,则生成图片,若不在缓存中则跳过 + * @param uuid 流程Id + * @param bigImage 是否生成大图(正常图片大小) + * @param smallImage 是否生成缩略图 + */ + public void checkImage(String uuid, boolean bigImage, boolean smallImage) { + //CoeDesignerImageCache.getCache().get(uuid)可能有为空的情况,此时不生成报告中的图片(待验证出现的条件) + //if (CoeDesignerImageCache.getCache().get(uuid) != null) { + saveImage(uuid, bigImage, smallImage); + //} + } + + /** + * 校验图片,若该模型id在定时任务的缓存中,则生成图片,若不在缓存中则跳过 + * @param uuid 流程Id + * @param bigImage 是否生成大图(正常图片大小) + * @param smallImage 是否生成缩略图 + */ + public void checkImage(String uuid, boolean bigImage, boolean smallImage, String title) { + //CoeDesignerImageCache.getCache().get(uuid)可能有为空的情况,此时不生成报告中的图片(待验证出现的条件) + //if (CoeDesignerImageCache.getCache().get(uuid) != null) { + saveImage(uuid, bigImage, smallImage, title); + //} + } + + /** + * 流程发布门户详情页面 + * + * @return + */ + public String getPublishPortalHtml(UserContext uc, String uuid, String taskId, boolean checkPublish) { + return getPublishPortalHtml(uc, uuid, taskId, checkPublish, true); + } + + /** + * 流程发布门户详情页面 + * + * @return + */ + public String getPublishPortalHtml(UserContext uc, String uuid, String taskId) { + return getPublishPortalHtml(uc, uuid, taskId, true, true); + } + + /** + * 打开流程查看页面 + * + * @return + */ + public String getPublishPortalHtml(UserContext uc, String uuid, String taskId, Boolean upVisit) { + return getPublishPortalHtml(uc, uuid, taskId, false, upVisit); + } + + /** + * 流程发布门户详情页面 + * + * @return + */ + public String getPublishPortalHtml(UserContext uc, String uuid, String taskId, boolean checkPublish, boolean upVisit) { + + //权限校验 +// if (!CoeCooperationAPIManager.getInstance().hasRepositoryPermision(uuid)) { +// return AlertWindow.getWarningMessagePage("打开失败", "无该文件查看权限"); +// } + + //三员管理,文件密级权限校验 + if (HighSecurityUtil.isON() && HighSecurityUtil.fileSecuritySwitch()){ + CoeProcessLevelWeb web = new CoeProcessLevelWeb(uc); + ResponseObject responseObject = web.checkFilePemission(uuid); + if (responseObject.isErr()){ + return AlertWindow.getWarningMessagePage("打开失败", responseObject.getMsg()); + } + } + + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + if (model == null) { + throw new AWSException("该流程未找到,打开失败"); + } + if ("default".equals(model.getMethodId())) { + throw new AWSException("文件夹类型不支持打开"); + } + if (checkPublish) { + if (!model.isPublish()) { + throw new AWSException("该流程当前状态为未发布状态,不允许打开"); + } + } + if (UtilString.isEmpty(taskId)) {// 停用或已发布状态查询流程手册 + taskId = getProcessReportTaskId(model); + } + CoeDesignerWeb web = new CoeDesignerWeb(uc); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_ACCESS, CoEOpLogConst.INFO_REPOSITORY_ACCESS); + } + return web.getPortalDesignerHtml(uuid, upVisit, taskId);// 返回页面 + } + + /** + * 查询流程的最新流程手册id + * + * @param model + * @return + */ + public String getProcessReportTaskId(PALRepositoryModel model) { + if (model != null) { + if (model.isPublish() || model.isStop()) {// 停用或已发布状态查询最新流程手册 + return new PublishListHistory().getLastPublishTaskIdByModelId(model.getId()); + } + } + return null; + } + + /** + * 无session打开流程只读页面 + * @param uid + * @param uuid + * @param processDefId + * @return + */ + public String openDesignerRepositoryViewer(String uid, String uuid, String processDefId) { + if (UtilString.isEmpty(uid)) { + uid = "admin"; + } + if (UtilString.isEmpty(uuid)) { + throw new AWSException("参数uuid不能为空"); + } + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + if (model == null) { + throw new AWSException("流程不存在uuid=" + uuid); + } + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(model.getMethodId()); + if (methodModel == null || methodModel.isFolder()) {// 没有该建模方法或者是文件夹类 + throw new AWSException("未知类型或文件夹类型文件不支持打开uuid=" + uuid); + } + if (HighSecurity.isON()) { + String secAdmin = HighSecurity.getSecModel().getSysAdmin(); + String arr[] = secAdmin.split(" "); + uid = arr[0]; + } + String sid = new SSOUtil().registerClientSessionNoPassword(uid, "cn", "127.0.0.1", "pc"); + UserContext me = UserContext.fromSessionId(sid); + CoeDesignerWeb designerWeb = new CoeDesignerWeb(me); + return designerWeb.getDesignerHtml(uuid, 0, null, true, "", "", "", "1", ""); + } + + /** + * 变更表 + * @param uuid id + * @param setStr set部分sql + * @return + */ + public int updatePALRepositoryById(String uuid, String setStr) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + if (model == null) { + return -1; + } + String sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set "; + sql += setStr; + sql += " where " + PALRepositoryModelImpl.FIELD_UUID + "='" + uuid + "'"; + return CoeProcessLevelDaoFacotory.createCoeProcessLevel().updatePALRepository(uuid, sql); + } + + /** + * 获取流程缩略图片 + * 图片不重新生成,适用于快速查看,卡片展示对实时性要求不强的场景 + * 通过定时任务进行图片更新 + * @param uuid pal流程id,若该流程为关联/(在bpm运行)流程,则返回bpm流程图片 + * @return + */ + public String getProcessImageThumbnail(String uuid) { + PALRepositoryModel cplm = PALRepositoryCache.getCache().get(uuid); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(cplm.getMethodId()); + if (methodModel == null || methodModel.isFolder()) {// 没有该建模方法或者是文件夹类 + return "../apps/" + CoEConstant.APP_ID + "/img/method/default_folder.png"; + } + String photo = "../apps/" + CoEConstant.APP_ID + "/img/method/default.png"; + String processDefId = queryBpmsProcessDefIdByPalId(uuid, true); + if (UtilString.isEmpty(processDefId)) { + String path = cplm.getFilePath(); + if (!UtilString.isEmpty(path)) { + UtilFile utilFile = new UtilFile(path + "/" + cplm.getId() + ".small.png"); + if (utilFile.exists()) { + byte[] base64Bytes = Base64.encode(utilFile.readBytes()); + try { + photo = "data:image/png;base64," + new String(base64Bytes, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + } else {// 获取执行平台图片 + photo = "data:image/png;base64," + BPMNIO.getBPMNImageThumbnail(ProcessDefCache.getInstance().getModel(processDefId).getAppId(), processDefId); + } + return photo; + } + + /** + * 获取流程图片 + * 图片重新生成,适用于实时查看图片,打印报告等耗费时间性能的操作 + * @param uuid pal流程id,若该流程为关联/(在bpm运行)流程,则返回bpm流程图片 + * @return + */ + public String getProcessImg(String uuid) { + PALRepositoryModel cplm = PALRepositoryCache.getCache().get(uuid); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(cplm.getMethodId()); + if (methodModel == null || methodModel.isFolder()) {// 没有该建模方法或者是文件夹类 + return "../apps/" + CoEConstant.APP_ID + "/img/method/default_folder.png"; + } + String photo = "../apps/" + CoEConstant.APP_ID + "/img/method/default.png"; + String processDefId = queryBpmsProcessDefIdByPalId(uuid, true); + if (UtilString.isEmpty(processDefId)) { + PALRepositoryQueryAPIManager.getInstance().checkImage(cplm.getId(), true, false);// 生成图片 + String path = cplm.getFilePath(); + if (!UtilString.isEmpty(path)) { + UtilFile utilFile = new UtilFile(path + "/" + cplm.getId() + ".png"); + if (utilFile.exists()) { + byte[] base64Bytes = Base64.encode(utilFile.readBytes()); + try { + photo = "data:image/png;base64," + new String(base64Bytes, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + } else {// 获取执行平台图片 + photo = "data:image/png;base64," + BPMNIO.getBPMNImage(ProcessDefCache.getInstance().getModel(processDefId).getAppId(), processDefId); + } + return photo; + } + + /** + * 获取流程图片路径,,若该流程为关联/(在bpm运行)流程,则返回bpm流程图片路径 + * 图片重新创建,适用于实时查看图片,打印报告等耗费时间性能的操作 + * @param uuid pal流程id + * @return + */ + public String getProcessImgPath(String uuid) { + PALRepositoryModel cplm = PALRepositoryCache.getCache().get(uuid); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(cplm.getMethodId()); + if (methodModel == null || methodModel.isFolder()) {// 没有该建模方法或者是文件夹类 + return "../apps/" + CoEConstant.APP_ID + "/img/method/default_folder.png"; + } + String imageFilePath = ""; + String processDefId = queryBpmsProcessDefIdByPalId(uuid, true); + if (UtilString.isEmpty(processDefId)) { + PALRepositoryQueryAPIManager.getInstance().checkImage(cplm.getId(), true, false);// 生成图片 + String path = cplm.getFilePath(); + imageFilePath = path + "/" + cplm.getId() + ".png"; + } else { + BPMNIO.getBPMNImage(ProcessDefCache.getInstance().getModel(processDefId).getAppId(), processDefId); + imageFilePath = BPMNFileUtil.getBPMNFileRealpath(ProcessDefCache.getInstance().getModel(processDefId).getAppId(), processDefId) + processDefId + BPMNFileConstant.IMG_FILE_EXT_NAME; + } + return imageFilePath; + } + + /** + * 获取流程文件,若该流程为关联/(在bpm运行)流程,则返回bpm平台流程文件 + * @param uc UserContext对象 + * @param uuid pal流程id + * @return + */ + public String getProcessDefinition(UserContext uc, String uuid) { + String define = ""; + String processDefId = queryBpmsProcessDefIdByPalId(uuid, true); + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + if (UtilString.isEmpty(processDefId)) {// 从pal获取 + if ("process.bpmn2".equals(plModel.getMethodId())) {// bpmn模型 + BPMNModel model = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(uuid, 0); + if (model == null) { + define = CoeDesignerUtil.getTemplateOfDefine(uuid); + } else { + define = model.getDefinition(); + } + } else {// 其他模型 + BaseModel model = CoeDesignerAPIManager.getInstance().getDefinition(uuid, 0); + if (model == null) { + model = CoeDesignerUtil.createModel(uuid, 0); + define = model.getDefinition(); + } else { + define = model.getDefinition(); + } + } + } else {// 从bpm平台获取 + if (uc == null) { + uc = UserContext.fromUID("admin"); + } + CoeDesginerAdapter coeAdapter = new CoeDesginerAdapter(uc); + define = coeAdapter.readDefinition(ProcessDefCache.getInstance().getModel(processDefId).getAppId(), processDefId).toString(); + } + if ("process.bpmn2".equals(plModel.getMethodId())) {// bpmn模型 + JSONObject definition = JSONObject.parseObject(define); + JSONObject localAttribute = definition.containsKey("localAttribute") ? definition.getJSONObject("localAttribute") : new JSONObject(); + if(localAttribute.isEmpty()) { + localAttribute = new JSONObject(); + } + if (localAttribute.isEmpty()) { + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(plModel.getMethodId()); + List attributes = palMethodModel.getAttributes(); + Map> attributeMap = new HashMap>(); + if (attributes != null) { + for (PALMethodAttributeModel AttributeModel : attributes) { + Map map1 = new HashMap(); + map1.put("id", AttributeModel.getKey()); + map1.put("name", AttributeModel.getTitle()); + map1.put("key", AttributeModel.getKey()); + map1.put("value", AttributeModel.getValue()); + map1.put("type", AttributeModel.getType()); + map1.put("ref", AttributeModel.getRef()); + map1.put("readonly", AttributeModel.getReadonly()); + map1.put("groupPath", AttributeModel.getGroupPath()); + map1.put("scope", AttributeModel.getScope()); + attributeMap.put(AttributeModel.getKey(), map1); + } + } + List shapeAttributeList = PALRepositoryShapeAttributeCache.getAttributeListByMethod(plModel.getWsId(), plModel.getMethodId()); + if (shapeAttributeList != null && shapeAttributeList.size() > 0) { + for (PALRepositoryShapeAttributeModel shapeAttributeModel : shapeAttributeList) { + String shapeName = shapeAttributeModel.getShapeName(); + String attrId = shapeAttributeModel.getAttrId(); + if (localAttribute.containsKey(shapeName)) { + JSONArray array = localAttribute.getJSONArray(shapeName); + Map map = attributeMap.get(attrId); + if (map != null) { + JSONObject obj = JSONObject.parseObject(JSON.toJSONString(map)); + array.add(obj); + localAttribute.put(shapeName, array); + } + } else { + JSONArray array = new JSONArray(); + Map map = attributeMap.get(attrId); + if (map != null) { + JSONObject obj = JSONObject.parseObject(JSON.toJSONString(map)); + array.add(obj); + localAttribute.put(shapeName, array); + } + } + } + } + } + definition.put("localAttribute", localAttribute); + // 处理属性问题 + definition = CoeDesignerShapeAPIManager.getInstance().updateShapeDataAttributes(definition, localAttribute); + define = definition.toString(); + } + return define; + } + + /** + * 获取当前流程的所有版本,不同的是若流程与BPMS有关联,则获取与BPMS有关联的流程并更新版本号为BPMS流程版本号 + * @param uuid + * @return list + */ + public List queryPalRepositoryModelsByPalId(String uuid) { + return CoeProcessLevelUtil.queryPalRepositoryModelsByPalId(uuid); + } + + /** + * 获取版本,若PAL与BPMS关联,则获取关联的所有版本,若未关联,获取PAL数据 + * @return + */ + public PALRepositoryModel queryPalRepositoryModelByPalId(String uuid) { + return CoeProcessLevelUtil.queryPalRepositoryModelByPalId(uuid); + } + + /** + * 校验PAL是否关联了bpm流程但是在bpm端流程被删除,若存在此情况则进行关联关系删除 + * @param uuid + * @return + */ + public String correlateResourceCheck(String uuid) { + return CoeProcessLevelUtil.correlateResourceCheck(uuid); + } + + /** + * 获取PAL推送到BPMS但是尚未分配的流程-JSON方式 + * 返回通用的JSON,可供其他jar调用而不用引用相关类 + * @return JSONArray + */ + public JSONArray getCoePalNoDistributionJSON() { + return getCoePalNoDistributionJSONByVersionId(null); + } + + /** + * 获取PAL推送到BPMS但是尚未分配的流程-JSON方式 + * 返回通用的JSON,可供其他jar调用而不用引用相关类 + * @param versionId pal流程版本id + * @return JSONArray + */ + public JSONArray getCoePalNoDistributionJSONByVersionId(String versionId) { + return CoeProcessLevelUtil.getCoePalNoDistributionJSONByVersionId(versionId); + } + + /** + * 保存coe与bpms流程之间的关联关系,供其他jar调用 + * @param object + * @return + */ + public int coePalNoDistributionInsert(JSONObject object) { + return CoeProcessLevelUtil.coePalNoDistributionInsert(object); + } + + /** + * 校验PAL流程是否与BPMS有关联/推送关系 + * @param uuid PAL流程id + * @param checkBpmsExist 若有关联关系,是否进一步校验BPMS端流程是否存在,true:PAL关联了BPMS并且BPMS端被关联流程存在则返回BPMS流程id,false:PAL关联了BPMS流程(不管BPMS端流程是否存在)返回BPMS流程id + * @return 若是关联/推送流程,返回BPMS流程的ID,若不是或者BPMS端流程被删除,返回空字符串 + */ + public String queryBpmsProcessDefIdByPalId(String uuid, boolean checkBpmsExist) { + return CoeProcessLevelUtil.queryBpmsProcessDefIdByPalId(uuid, checkBpmsExist); + } + + /** + * 校验PAL流程是否与BPMS端流程有关联关系 + * @param uuid PAL id + * @param checkBpmsExist 若有关联关系,是否进一步校验BPMS端流程是否存在,true:PAL关联了BPMS并且BPMS端被关联流程存在则返回true,false:PAL关联了BPMS流程(不管BPMS端流程是否存在)返回true + * @return + */ + public boolean isCorrelateBpms(String uuid, boolean checkBpmsExist) { + return CoeProcessLevelUtil.isCorrelateBpms(uuid, checkBpmsExist); + } + + /** + * 根据BPMS流程id查询与PAL关联的流程id + * @param plAwsId + * @return BPMS与PAL有关联关系则返回PAL流程id,无关联关系返回null + */ + public String queryPlIdByPlAwsId(String plAwsId) { + CoeProcessLevelCorrelateModel model = CoeProcessLevelUtil.queryCorrelateModelyPlAwsId(plAwsId); + if (model != null) { + return model.getPlId(); + } + return null; + } + + /** + * 组名称是否可修改、删除判断依据 + * @param processVerIds BPM流程verId集合 + * @return true:可以修改/删除 false:锁定结构,不可以修改/删除 + */ + public boolean BpmUpdateGroup(List processVerIds) { + if (CoeProcessLevelUtil.isPalManage()) { + if (processVerIds == null || processVerIds.size() == 0) { + return true; + } + for (String verId : processVerIds) { + List list = CoeProcessLevelUtil.queryCorrelateModelsyPlAwsId(verId); + if (list == null) { + continue; + } + for (CoeProcessLevelCorrelateModel model : list) { + if (model.isCorrelate() && model.getCorrelateType() == 1 && "show".equals(model.getExt1())) { + return false; + } + } + } + } + return true; + } + + /** + * 流程是否可显示/隐藏 + * @param processVerId + * @return null:该流程/流程版本与PAL 关联关系,依照平台机制处 不为null,[xxx,xxx]:xxx为所有可以显示的流程,且其所有显示流程锁定结构,若size为0, 代表该流程版本下所有流程 显示(及特殊情况出现) + */ + public List getShowBpmProcessList(String processVerId) { + if (CoeProcessLevelUtil.isPalManage()) { + if (UtilString.isEmpty(processVerId)) { + return null; + } + List list = CoeProcessLevelUtil.queryCorrelateModelsyPlAwsId(processVerId); + if (list == null || list.size() == 0) { + return null; + } + List result = new ArrayList<>(); + for (CoeProcessLevelCorrelateModel model : list) { + if (model.isCorrelate() && model.getCorrelateType() == 1 && "show".equals(model.getExt1())) { + result.add(model.getPlAwsId()); + } + } + return result; + } + return null; + } + + /** + * 流程是否锁定结构 + * @param processDefId BPM流程id + * @return true:可以修改/删除 false:锁定结构, 可以修改/删除 + */ + public boolean isLockStructure(String processDefId) { + String plId = queryPlIdByPlAwsId(processDefId); + if (UtilString.isEmpty(plId)) { + return false; + } + CoeProcessLevelCorrelateModel model = CoeProcessLevelCorrelateCache.getCache().get(plId); + if (model == null) { + return false; + } + if (!CoeProcessLevelUtil.isBpmProcessEdit()) { + if (model.isCorrelate()) { + return true; + } + } + return false; + } + + /** + * 流程是否显示 + * @param processDefId + * @return + */ + public boolean isShowBpmProcess(String processDefId) { + if (!CoeProcessLevelUtil.isPalManage()) { + return true; + } + String plId = queryPlIdByPlAwsId(processDefId); + if (UtilString.isEmpty(plId)) { + return true; + } + CoeProcessLevelCorrelateModel model = CoeProcessLevelCorrelateCache.getCache().get(plId); + if (model == null) { + return true; + } + if (model.isCorrelate() && model.getCorrelateType() == 1 && "show".equals(model.getExt1())) { + return true; + } else { + return false; + } + } + + private static class Inner { + private final static PALRepositoryQueryAPIManager instance = new PALRepositoryQueryAPIManager(); + } + + /** + * 根据级别排序 并设置父节点 + * + * @author wangyh + *

    + * 2014年7月25日 + */ + private class ComparatorLevel implements Comparator { + @Override + public int compare(PALRepositoryModelImpl model1, PALRepositoryModelImpl model2) { + Integer level1 = model1.getLevel(); + Integer level2 = model2.getLevel(); + int result = level1.compareTo(level2); + model2.setParentId(model1.getId()); + model1.setPublish(true);// 不是代表发布,用来代替是否是父节点 + return result; + } + } + + /** + * 根据级别排序 + * + * @author wangyh + *

    + * 2014年7月25日 + */ + private class Comparator1 implements Comparator { + @Override + public int compare(PALRepositoryModel model1, PALRepositoryModel model2) { + Integer level1 = model1.getLevel(); + Integer level2 = model2.getLevel(); + int result = level1.compareTo(level2); + if (result == 0) { + Integer index1 = model1.getOrderIndex(); + Integer index2 = model2.getOrderIndex(); + result = index1.compareTo(index2); + } + return result; + } + } + + /** + * 获取更多特性树 + * @param wsId 资产库id + * @param methodId 模型分类 + * @param type file:文件属性,shape:形状属性 + * @param shapeName 形状名称,type为shape时有效,可为空 + * @return + */ + public static JSONArray getPalRepositoryMoreAttrConfig(String wsId, String methodId, String type, String shapeName) { + return CoeProcessLevelUtil.getPalRepositoryMoreAttrConfig(wsId, methodId, type, shapeName); + } + + /****************************************重构一些新的方法 20201209 sunlh********************************************/ + + /** + * 根据pid获取符合条件的子流程数据 + * @param uc + * @param wsId + * @param teamId + * @param pid + * @return + */ + public JSONArray getUsedPalRepositoryTreeDataByPidNew(UserContext uc, String wsId, String teamId, String pid) { + // 获取符合权限的子流程 + List childrenList = getUsedPalRepositoryModelsByPidNew(uc, wsId, teamId, pid); + Collections.sort(childrenList, new Comparator1()); + Map grandChildrenCountMap = new HashMap<>(); + for (PALRepositoryModel chlidModel : childrenList) { + List grandChildrenList = getUsedPalRepositoryModelsByPidNew(uc, wsId, teamId, chlidModel.getId()); + grandChildrenCountMap.put(chlidModel.getId(), grandChildrenList.size()); + } + JSONArray result = list2JsonNew(uc, childrenList, grandChildrenCountMap); + return result; + } + + /** + * 获取某个流程的使用中的子流程 + * + * @param wsId + * @param pid + * @return + */ + public List getUsedPalRepositoryModelsByPidNew(UserContext uc, String wsId, String teamId, String pid) { + if (UtilString.isEmpty(teamId)) { + return getUsedPalRepositoryModelsByPid(wsId, pid); + } else { + List result = new ArrayList<>(); + // 获取权限versionIds + Set permVerIds = CoeProcessLevelUtil.getPermRepositoryVersionIds(wsId, teamId, uc.getUID(), null, null); + if (permVerIds.size() > 0) { + getPermRepositoryByPid(wsId, pid, permVerIds, true, false, new HashSet<>(), result); + } + return result; + } + } + + /** + * 根据父节点获取权限范围内的子流程 + * @param wsId + * @param pid + * @param permVersionIds 权限versionIds + * @param isUse + * @param isPublish + * @param verIds 给一个空的Set,防止数据造成的死循环 + * @param result 结果集 + */ + private void getPermRepositoryByPid(String wsId, String pid, Set permVersionIds, boolean isUse, boolean isPublish, Set verIds, List result) { + List childList = PALRepositoryCache.getAllSubModelsByPid(wsId, pid); + if (childList != null && childList.size() > 0) { + for (PALRepositoryModel model : childList) { + if (verIds.contains(model.getVersionId())) { + //防止无限循环 + continue; + } + if (isUse) { + if (model.isUse()) {// 设计中的流程是连贯的,与发布不同 + verIds.add(model.getVersionId()); + if (permVersionIds.contains(model.getVersionId())) { + result.add(model); + } else { + getPermRepositoryByPid(wsId, model.getId(), permVersionIds, isUse, isPublish, verIds, result); + } + } + } else if (isPublish) { + if (model.isPublish() && permVersionIds.contains(model.getVersionId())) { + verIds.add(model.getVersionId()); + result.add(model); + } else { + getPermRepositoryByPid(wsId, model.getId(), permVersionIds, isUse, isPublish, verIds, result); + } + } + } + } + } + + /** + * 新的流程树list转换json方法 + * @param uc + * @param list + * @param childrenCountMap list中的model是否具有子节点map记录 + * @return + */ + private JSONArray list2JsonNew(UserContext uc, List list, Map childrenCountMap) { + JSONArray jsonArray = new JSONArray(); + for (PALRepositoryModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getVersionId().trim()); + object.put("currId", model.getId()); + object.put("pid", model.getNewParentId().trim()); + object.put("plNo", CoeProcessLevelUtil.getProcessLevelNoByUUId(model.getId(), model.getWsId()).trim()); + object.put("name", I18nRes.findValue(CoEConstant.APP_ID, uc.getLanguage(), model.getName()).trim()); + object.put("wsId", model.getWsId()); + object.put("isSystemFile", model.isSystemFile()); + object.put("plMethodId", model.getMethodId().trim()); + JSONObject icon = new JSONObject(); + object.put("folder", true);// 类型,文件夹 + if ("default".equals(model.getMethodId())) {// 默认文件夹 + JSONObject methodIcon = PALMethodManager.getInstance().getPALMethodIconById(model.getMethodId()); + if (methodIcon != null) { + icon.put("icon", methodIcon.getString("code")); + icon.put("color", methodIcon.getString("color")); + } + } else {// 非默认文件夹 + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(model.getMethodId()); + if (methodModel != null) {// 存在该建模方法 + if (methodModel.isFolder()) {// 文件夹类型扩展的建模方法 + JSONObject methodIcon = PALMethodManager.getInstance().getPALMethodIconById(model.getMethodId()); + icon.put("icon", methodIcon.getString("code")); + icon.put("color", methodIcon.getString("color")); + } else {// 文件类型模型文件 + icon.put("icon", ""); + icon.put("color", "#8E8E8E"); + object.put("folder", false);// 非文件夹 + } + } + } + if (icon.isEmpty()) {// 默认 + icon.put("icon", ""); + icon.put("color", "#FFB718"); + } + object.put("icon", icon); + List children = null; + if (childrenCountMap.containsKey(model.getId()) && childrenCountMap.get(model.getId()) > 0) { + object.put("leaf", false);// 非叶子节点 + object.put("childCount", childrenCountMap.get(model.getId())); + } else { + object.put("leaf", true);// 叶子节点 + object.put("childCount", 0); + } + object.put("plLevel", model.getLevel()); + object.put("plOrdexIndex", model.getOrderIndex()); + object.put("plDiagramUrl", model.getDiagramUrl()); + object.put("isDrops", model.isSystemFile()); + object.put("isPublish", model.isPublish()); + object.put("isStop", model.isStop()); + object.put("isApproval", model.isApproval()); + object.put("ext1", model.getExt1()); + object.put("ext2", model.getExt2()); + object.put("ext3", model.getExt3()); + object.put("ext4", model.getExt4()); + object.put("isUse", model.isUse()); + object.put("plCategory", model.getMethodCategory()); + object.put("versionId", model.getVersionId()); + object.put("orderIndex", model.getOrderIndex()); + object.put("isBottomLevel", model.isBottomLevel()); + //三员管理下,附件是否存在未标定密级 + if(HighSecurityUtil.isON()){ + object.put("isUpfileUnmark",this.checkUpfileSecurity(model)); + if (HighSecurityUtil.fileSecuritySwitch()){ + //流程文件密级回显 + Integer securityLevel = model.getSecurityLevel(); + HashMap securityMap = HighSecurityUtil.getObjSecurityMap(); + String securityLevelName= securityMap.get(String.valueOf(securityLevel)); + object.put("securityLevelName", securityLevelName == null ? "未标密" : securityLevelName); + object.put("isFileSecurity",true); + object.put("securityLevel",securityLevel); + } + } + jsonArray.add(object); + } + return jsonArray; + } + + /** + * 三员管理下,附件是否存在未标定密级 + * @param model + * @return + */ + public boolean checkUpfileSecurity(PALRepositoryModel model){ + List upfileModels = new UpFileDao().search(model.getId(), null, null); + for (UpfileModel upfile: upfileModels){ + if(upfile.getSecurityLevel()==-1){ + return true; + } + } + return false; + } + + + /** + * 形状属性-类型 + */ + public String shapePropertyType(String myTypeName) { + if("linker".equals(myTypeName)) { + return "连线"; + } + Class clzz = BPMNConstant.class; + Field[] fields = clzz.getDeclaredFields(); + for(Field field : fields) { + field.setAccessible(true); + try { + String typeName = (String)field.get(null); + if( myTypeName!=null && myTypeName.equals(typeName) ) { + String type = field.getName(); + Field typeTitle = clzz.getDeclaredField(type + "_TITLE"); + String typeTitleName = (String)typeTitle.get(null); + return typeTitleName; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return ""; + } + + /** + * 获取模型形状的附件 + * @param palId + * @param uc 可为null + * @return + */ + public static List queryShapeUpfileList(String palId, UserContext uc) { + return new UpfileQuery().loadUpFiles(palId, null, "shape", (uc == null ? UserContext.fromUID("admin") : uc)); + } + + /** + * 获取模型形状的关联附件 + * @param palId + * @param uc 可为null + * @return + */ + public static List queryShapeRelationUpfileList(String palId, UserContext uc) { + return new UpfileQuery().loadRelationUpfiles(palId, null, "shape", (uc == null ? UserContext.fromUID("admin") : uc)); + } + + /** + * 获取文件的附件 + * @param palId + * @param uc 可为null + * @return + */ + public static List queryProcessUpfileList(String palId, UserContext uc) { + return new UpfileQuery().loadUpFiles(palId, null, "file", (uc == null ? UserContext.fromUID("admin") : uc)); + } + + /** + * 获取文件的关联附件 + * @param palId + * @param uc 可为null + * @return + */ + public static List queryProcessRelationUpfileList(String palId, UserContext uc) { + return new UpfileQuery().loadRelationUpfiles(palId, null, "file", (uc == null ? UserContext.fromUID("admin") : uc)); + } + + static class UpfileQuery { + /** + * 加载流程文件/形状附件 + * @param palId + * @param type file 文件附件 shape 形状附件 + * @param shapeId + * @return + */ + private List loadUpFiles(String palId, String shapeId, String type, UserContext uc) { + List result = new ArrayList<>(); + UpFileDao upFileDao = new UpFileDao(); + List upfileList = upFileDao.search(palId, shapeId, type); + if (upfileList != null) { + Set ids = new HashSet<>(); + for (UpfileModel model : upfileList) { + if (ids.contains(model.getUuid())) { + continue; + } + ids.add(model.getUuid()); + String downloadURL = ""; + DCContext dcContext = getDCContext(model, uc); + if (dcContext != null) { + downloadURL = dcContext.getDownloadURL() + "&isInline=false"; + } + model.setDownloadUrl(downloadURL); + result.add(model); + } + } + sortByCreateTime(result); + return result; + } + + /** + * 加载关联附件 + * + * @param palId 模型Id + * @param shapeId 图形Id + * @param type file/shape(模型附件还是图形附件) + * @return + */ + private List loadRelationUpfiles(String palId, String shapeId, String type, UserContext uc) { + List result = new ArrayList<>(); + // 获取属性的关联类型(relationType) + Map relationTypeMap = new HashMap<>(); + PALRepositoryModel m = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(palId); + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(m.getMethodId()); + if (palMethodModel != null) { + List attributes = palMethodModel.getAttributes(); + for (PALMethodAttributeModel model : attributes) { + if ("relation".equals(model.getType())) { + JSONObject refObj = JSONObject.parseObject(model.getRef()); + String relationType = refObj.containsKey("type") ? refObj.getString("type") : "shape"; + relationTypeMap.put(model.getKey(), relationType); + } + } + } + if (UtilString.isEmpty(shapeId) || "file".equals(type)) { + shapeId = ""; + } + Iterator iterator = DesignerShapeRelationCache.getByShapeId(palId, shapeId); + List list = new ArrayList<>(); + UpFileDao dao = new UpFileDao(); + while (iterator.hasNext()) { + DesignerShapeRelationModel model = iterator.next(); + if (relationTypeMap.containsKey(model.getAttrId())) { + if("file".equals(relationTypeMap.get(model.getAttrId()))) {// 文件 + String versionId = model.getRelationFileId(); + PALRepositoryModel palModel = CoeProcessLevelUtil.getUseRepositoryByVersionId(versionId);// 获取工作版本 + if (palModel != null) { + List list2 = dao.search(palModel.getId(), null, type); + if (list2 != null && list2.size() > 0) { + list.addAll(list2); + } + } + } else {// 形状 + List list2 = dao.search(model.getRelationFileId(), model.getRelationShapeId(), type); + if (list2 != null && list2.size() > 0) { + list.addAll(list2); + } + } + } + } + if (list != null) { + Set ids = new HashSet<>(); + for (UpfileModel model : list) { + if (ids.contains(model.getUuid())) { + continue; + } + ids.add(model.getUuid()); + PALRepositoryModel palModel = PALRepositoryCache.getCache().get(model.getPl_uuid()); + if (palModel != null) { + String downloadURL = ""; + DCContext dcContext = getDCContext(model, uc); + if (dcContext != null) { + downloadURL = dcContext.getDownloadURL() + "&isInline=false"; + } + model.setDownloadUrl(downloadURL); + result.add(model); + } + } + } + sortByCreateTime(result); + return result; + } + + public void sortByCreateTime(List list) { + list.sort((m1, m2) -> {return m2.getCreateTime().compareTo(m1.getCreateTime());}); + } + + /** + * 获取dccontext + * + * @param model + * @return + */ + private DCContext getDCContext(UpfileModel model, UserContext uc) { + DCContext dcContext = null; + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + if (dcProfile != null) { + if ("f".equals(model.getType())) {// 文件 + dcContext = new DCContext(uc, dcProfile, CoEConstant.APP_ID, "file", + model.getPl_uuid(), model.getFileName()); + } else {// 图形 + dcContext = new DCContext(uc, dcProfile, CoEConstant.APP_ID, model.getPl_uuid(), + model.getShape_uuid(), model.getFileName()); + } + } + return dcContext; + } + } + + /*************************************流程附件 start****************************************/ + /** + * 检测平台是否开启三员管理,同时设置返回参数 + * @param ro + */ + public void checkHighSecurity(String uuid,ResponseObject ro){ + //平台开启三元模式 + if(HighSecurityUtil.isON()){ + PALRepositoryModel plModel = null; + if(null != uuid && HighSecurityUtil.fileSecuritySwitch()){ + plModel = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + } + //全部文件密级 + HashMap securityMap = HighSecurityUtil.getObjSecurityMap(); + //筛选用户与文件密级 + Set entrySet = securityMap.keySet(); + Iterator iterator = entrySet.iterator(); + UserContext userContext = DispatcherRequest.getUserContext(); + while (iterator.hasNext()){ + String next = iterator.next(); + if (!HighSecurityUtil.hasSecurityLevel(userContext,Integer.parseInt(next),plModel)){ + iterator.remove(); + } + } + ro.put("securityList",securityMap); + ro.put("isHighSecurity",true); + if(HighSecurityUtil.fileSecuritySwitch()){ + ro.put("isFileSecurity",true); + } + } + } + + + + /** + * 附件密级根据用户与文件密级过滤 + * @param uc + * @param list + */ + public void upFileSecurityFilter(UserContext uc,List list){ + Iterator iterator = list.iterator(); + while (iterator.hasNext()){ + UpfileModel model = iterator.next(); + if ((!HighSecurityUtil.hasSecurityLevel(uc,model.getSecurityLevel(),model))|| -1 == model.getSecurityLevel()){ + iterator.remove(); + } + } + } + + /** + * 附件密级根据用户筛选其下所有密级文件,包含未标密 + * @param uc + * @param list + */ + public void upFileSecurityUnmarkFilter(UserContext uc,List list){ + Iterator iterator = list.iterator(); + while (iterator.hasNext()){ + UpfileModel model = iterator.next(); + if ((!HighSecurityUtil.hasSecurityLevel(uc,model.getSecurityLevel(),model))){ + iterator.remove(); + } + } + } + + /** + * 是否开启三员管理 + * @return + */ + public boolean isSecurityMode(){ + return HighSecurityUtil.isON(); + } + + /** + * 获取流程树中第一个流程文件未标密 或者 附件未标密文件在树中路径 + * @return + */ + public String getUnmarkPath(UserContext me,String wsId,String teamId){ + ResponseObject ro = ResponseObject.newOkResponse(); + + if (!HighSecurityUtil.isON()){ + ro = ResponseObject.newErrResponse().msg("三员管理应用未开启"); + return ro.toString(); + } + + //小组权限 + Set versionIds = CoeProcessLevelUtil.getPermRepositoryVersionIds(wsId, teamId, me.getUID(), null, null); + + //未标密的文件 + PALRepositoryModel unmarkModel = this.findFileUnmarkModel(versionIds, wsId, teamId); + + if (null == unmarkModel){ + //未标密的附件 + unmarkModel = new UpfileWeb(me).findUpfileUnmarkModel(versionIds, wsId, teamId); + } + + // 获取文件路径 + List path = new ArrayList<>(); + if (null == unmarkModel) { + ro.put("path",path.toArray()); + return ro.toString(); + } + JSONArray repositoryPathData = CoeProcessLevelUtil.getRepositoryPath(unmarkModel.getId()); + // 前面大类不显示,根据小组进行级别处理 + for (int i = 0; i < repositoryPathData.size(); i++) { + JSONObject currObj = repositoryPathData.getJSONObject(i); + PALRepositoryModel currModel = PALRepositoryCache.getCache().get(currObj.getString("id")); + if (currModel != null && versionIds.contains(currModel.getVersionId())) { + path.add(currModel.getVersionId()); + } else if (currObj.getString("id").length() < 36) { + path.add(currObj.getString("id")); + } + } + ro.put("path",path.toArray()); + return ro.toString(); + } + + /** + * 获取第一个流程文件未标密model + * @param me + * @param versionIds + * @param wsId + * @param teamId + * @return + */ + public PALRepositoryModel findFileUnmarkModel(Set versionIds,String wsId,String teamId){ + PALRepositoryModel targetModel = null; + //开启三员管理下,流程文件密级标定switch + if (HighSecurityUtil.fileSecuritySwitch()){ + List repositoryList = this.getInuseRepositoryList(versionIds, wsId, teamId); + for (PALRepositoryModel model : repositoryList){ + //查询流程文件 是否存在未标定密级 + boolean flag = PALRepositoryQueryAPIManager.getInstance().checkFileSecurity(model); + if(flag){ + targetModel = model; + break; + } + } + } + return targetModel; + } + + /** + * 获取流程树中inuse文件 + * @param versionIds 小组权限下的流程文件uuid + * @param wsId + * @param teamId + * @return + */ + public List getInuseRepositoryList(Set versionIds,String wsId,String teamId){ + //获取资产库下所有流程 + List list = new ArrayList<>(); + Iterator iterator = PALRepositoryCache.getByWsId(wsId); + + while (iterator.hasNext()){ + PALRepositoryModel model = iterator.next(); + if (!UtilString.isEmpty(teamId)){ + //小组过滤 + if (model.isUse() && versionIds.contains(model.getVersionId())) { + list.add(model); + } + }else{ + if (model.isUse()){ + list.add(model); + } + } + } + // 排序 + Collections.sort(list, new Comparator1()); + + return list; + } + + /** + * 三员管理下,流程文件是否存在未标定密级 + * @param model + * @return + */ + public boolean checkFileSecurity(PALRepositoryModel model){ + + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(model.getMethodId()); + if (null != methodModel && !methodModel.isFolder() && model.getSecurityLevel() == -1){ + return true; + } + return false; + } + + /** + * 获取流程树下未标密文件的数量 + * @param wsId + * @param teamId + * @return + */ + public Integer getUnMarkFileNum(UserContext me,String wsId, String teamId){ + if (!HighSecurityUtil.isON() || !HighSecurityUtil.fileSecuritySwitch()){ + return null; + } + int num = 0; + + //小组权限 + Set versionIds = CoeProcessLevelUtil.getPermRepositoryVersionIds(wsId, teamId, me.getUID(), null, null); + + //开启三员管理下,流程文件密级标定switch + List repositoryList = this.getInuseRepositoryList(versionIds, wsId, teamId); + for (PALRepositoryModel model : repositoryList){ + //查询流程文件 是否存在未标定密级 + boolean flag = PALRepositoryQueryAPIManager.getInstance().checkFileSecurity(model); + if(flag){ + num ++; + } + } + return num; + } + + /** + * 报告生成器应用,前置校验密级访问权限 + * @param me + * @param model + * @return + */ + public ResponseObject checkOutputSecurityPermission(UserContext me,OutputTaskModel model){ + ResponseObject rs = ResponseObject.newOkResponse(); + + OutputAppProfile appProfile = OutputAppManager.getProfile(model.getProfileId()); + DCPluginProfile dcProfile = SDK.getDCAPI().getDCProfile(appProfile.getAppContext().getId(), OutputConst.EXT_APP_DC_OUTPUT); + DCContext dcContext = new DCContext(null, dcProfile, appProfile.getAppContext().getId(), model.getWsId(), model.getId(), OutputConst.FILE_WIZARD_CONFIG); + + //获取config.txt配置 + UtilFile file = new UtilFile(dcContext.getPath()+"/config.txt"); + String s = file.readStrUTF8(); + JSONObject jsonObject = JSON.parseObject(s); + String targetFileId = String.valueOf(jsonObject.get("targetFileId")); + targetFileId = targetFileId.contains(",") ? targetFileId.substring(targetFileId.indexOf(',')+1) : targetFileId; + + //密级权限校验 + CoeProcessLevelWeb web = new CoeProcessLevelWeb(me); + return web.checkFilePemission(targetFileId); + } + /*************************************流程附件 end****************************************/ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/addons/RepositoryDiagramExistMark.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/addons/RepositoryDiagramExistMark.java new file mode 100644 index 00000000..8e79da10 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/addons/RepositoryDiagramExistMark.java @@ -0,0 +1,77 @@ +package com.actionsoft.apps.coe.pal.pal.repository.addons; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.ws.constant.CoeWsConstant; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.bpms.commons.addons.AddOnsInterface; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.exception.AWSException; +import com.actionsoft.sdk.local.SDK; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * 初始化记录模型图是否存在形状的标记 + */ +public class RepositoryDiagramExistMark implements AddOnsInterface { + + @Override + public String mainPage(UserContext uc) { + // 判断是否记录模型图是否存在形状的标记 + String mark = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "DIAGRAM_CONTENT_EXIST_MARK"); + StringBuilder sb = new StringBuilder(); + if ("close".equals(mark)) { + sb.append("请开启\"应用管理 >CoE PAL流程资产库-参数-模型图是否存在内容的标记开关\"再执行初始化标记操作


    "); + } else { + List wsList = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getCoeWorkSpaceModelRecodesNoPage(); + int count = 0; + try { + PALRepository repository = new PALRepository(); + for (CoeWorkSpaceModel wsModel : wsList) { + if (wsModel.getWsState() == CoeWsConstant.CLOSE) { + continue; + } + List list = repository.getInstanceToList(wsModel.getUUId()); + for (PALRepositoryModel repositoryModel : list) { + String uuid = repositoryModel.getId(); + String define = PALRepositoryQueryAPIManager.getInstance().getProcessDefinition(uc, uuid); + List> shapeList = ShapeUtil.getShapeJson(define, uuid, repositoryModel.getName()); + String markVal = ""; + if (shapeList != null && shapeList.size() > 0) { + markVal = "1"; + } + String ext1 = repositoryModel.getExt1(); + String ext2 = repositoryModel.getExt2(); + String ext3 = repositoryModel.getExt3(); + String ext4 = repositoryModel.getExt4(); + + if ("EXT1".equals(mark)) { + ext1 = markVal; + } else if ("EXT2".equals(mark)) { + ext2 = markVal; + } else if ("EXT3".equals(mark)) { + ext3 = markVal; + } else if ("EXT4".equals(mark)) { + ext4 = markVal; + } + int r = repository.updateRepositoryExt(uuid, ext1, ext2, ext3, ext4); + if (r > 0) { + count++; + } + } + } + } catch (Exception e) { + throw new AWSException(e.getMessage()); + } + sb.append("初始化模型图是否存在内容的标记开关成功,共执行" + count + "条
    "); + } + return sb.toString(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/CoeProcessLevelCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/CoeProcessLevelCache.java new file mode 100644 index 00000000..4fd47234 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/CoeProcessLevelCache.java @@ -0,0 +1,61 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; + +public class CoeProcessLevelCache { + private static Map map=new HashMap(); + private static MapwsMap=new HashMap(); + static{ + load(); + } + public CoeProcessLevelCache() { + } + public static void load(){ + Map _map=new HashMap(); + List wses = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstanceAll(); + for(CoeWorkSpaceModel wsModel:wses){ + List models = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelByWsId(wsModel.getUUId());// 根据wsId得到相关数据 + _map.put(wsModel.getUUId(),models); + } + map=_map; + loadPorcess(); + } + public static void loadPorcess(){ + Map _wsMap=new HashMap(); + Iterator it = map.keySet().iterator(); + for (;it.hasNext();) { + String wsId=(String)it.next(); + List models=(List)map.get(wsId); + Map pMap=new HashMap(); + for (PALRepositoryModel model: models) { + if(pMap.containsKey(model.getParentId())){ + ((List)pMap.get(model.getParentId())).add(model); + }else{ + List pList=new ArrayList(); + pList.add(model); + pMap.put(model.getParentId(),pList); + + } + } + _wsMap.put(wsId, pMap); + } + wsMap=_wsMap; + } + public static List getChildrenes(String wsId,String pid){ + Map pMap =(Map)wsMap.get(wsId); + return (List)pMap.get(pid); + + + } + + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/CoeProcessLevelCorrelateCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/CoeProcessLevelCorrelateCache.java new file mode 100644 index 00000000..956410c3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/CoeProcessLevelCorrelateCache.java @@ -0,0 +1,39 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelCorrelateDao; +import com.actionsoft.apps.coe.pal.pal.repository.model.CoeProcessLevelCorrelateModel; +import com.actionsoft.sdk.local.SDK; + +public class CoeProcessLevelCorrelateCache extends Cache { + + public CoeProcessLevelCorrelateCache(CachePluginProfile profile) { + super(profile); + } + + @Override + public void load() { + load(this); + } + + protected void load(Cache t) { + List _list = new CoeProcessLevelCorrelateDao().query().list(); + if (_list != null) { + for (CoeProcessLevelCorrelateModel model : _list) { + t.put(model.getPlId(), model, false); + } + } + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE流程资产库流程关联对象 [" + ((_list == null) ? 0 : _list.size()) + "个]"); + } + + public static CoeProcessLevelCorrelateCache getCache() { + return (CoeProcessLevelCorrelateCache) CacheManager.getCache(CoeProcessLevelCorrelateCache.class); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/CoeProcessLevelNoCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/CoeProcessLevelNoCache.java new file mode 100644 index 00000000..b05a1c73 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/CoeProcessLevelNoCache.java @@ -0,0 +1,157 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; + +/** + * 多线程加载分级编号 + * + * @author wangyh + * + */ +public class CoeProcessLevelNoCache { + private final Map list = new ConcurrentHashMap(); + + private static class Inner { + private final static CoeProcessLevelNoCache instance = new CoeProcessLevelNoCache(); + } + + public static CoeProcessLevelNoCache getInstance() { + + return CoeProcessLevelNoCache.Inner.instance; + } + + public synchronized void loadProcessLevel(String wsId) { + List wses = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstanceById(wsId); + for (CoeWorkSpaceModel ws : wses) { + Map _list = new LinkedHashMap(); + String[] pids = { "process", "org", "control", "data", "itsystem", "product" }; + for (int ind = 0; ind < pids.length; ind++) { + List models = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getModels(ws.getUUId(), PALRepositoryModelImpl.FIELD_PL_LEVEL, 1, pids[ind]);// 根据wsId得到相关数据 + for (int i = 0; i < models.size(); i++) { + List coeProcesslist = new ArrayList(); + PALRepositoryModel coeProcessLevelModel = models.get(i); + coeProcesslist.add(models.get(i)); + PALRepositoryModel parentModel = null; + if (coeProcessLevelModel.getParentId() != null && !"".equals(coeProcessLevelModel.getParentId())) { + parentModel = PALRepositoryCache.getCache().get(coeProcessLevelModel.getParentId()); + } + String parentId = parentModel == null ? coeProcessLevelModel.getParentId() : parentModel.getVersionId(); + String no = ""; + no = (_list.get(parentId) == null ? "" : _list.get(parentId)) + (i + 1); + _list.put(models.get(i).getVersionId(), no); + getProcessLevelNo(coeProcesslist, _list); + list.put(ws.getUUId(), _list); + } + } + } + } + + // 深度递归树 生成编号 + public void getProcessLevelNo(List models, Map _list) { + String no = ""; + int i = 1; + if (models.size() > 0) { + for (PALRepositoryModel coeProcessLevelModel : models) {// 0级 + if (coeProcessLevelModel.isUse()) { + PALRepositoryModel parentModel = null; + if (coeProcessLevelModel.getParentId() != null && !"".equals(coeProcessLevelModel.getParentId())) { + parentModel = PALRepositoryCache.getCache().get(coeProcessLevelModel.getParentId()); + } + String parentId = parentModel == null ? coeProcessLevelModel.getParentId() : parentModel.getVersionId(); + no = (_list.get(parentId) == null ? "" : _list.get(parentId)) + "." + i; + if (!_list.containsKey(coeProcessLevelModel.getVersionId())) { + _list.put(coeProcessLevelModel.getVersionId(), no); // 将第i级的数据存起来 + } + List ms = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getModels(coeProcessLevelModel.getWsId(), PALRepositoryModelImpl.FIELD_PL_LEVEL, coeProcessLevelModel.getLevel() + 1, coeProcessLevelModel.getVersionId());// 根据wsId得到相关数据 + getProcessLevelNo(ms, _list); + i++; + } + } + } + } + + /** + * 重载指定流程 + * + * @param wsId + */ + public void reload(final String wsId) { +// loadProcessLevel(wsId); + new Thread(new Runnable() { + @Override + public void run() { + loadProcessLevel(wsId); + } + }).start(); + } + + /** + * 重载所有流程 + */ + public void reload() { + new Thread(new Runnable() { + @Override + public void run() { + loadProcessLevel(); + } + }).start(); + } + + public synchronized void loadProcessLevel() { + List wses = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstanceAll(); + for (CoeWorkSpaceModel ws : wses) { + Map _list = new LinkedHashMap(); + String[] pids = { "process", "org", "control", "data", "itsystem", "product" }; + for (int ind = 0; ind < pids.length; ind++) { + List models = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getModels(ws.getUUId(), PALRepositoryModelImpl.FIELD_PL_LEVEL, 0, pids[ind]);// 根据wsId得到相关数据 + for (int i = 0; i < models.size(); i++) { + List coeProcesslist = new ArrayList(); + PALRepositoryModel coeProcessLevelModel = models.get(i); + coeProcesslist.add(models.get(i)); + PALRepositoryModel parentModel = null; + if (coeProcessLevelModel.getParentId() != null && !"".equals(coeProcessLevelModel.getParentId())) { + parentModel = PALRepositoryCache.getCache().get(coeProcessLevelModel.getParentId()); + } + String parentId = parentModel == null ? coeProcessLevelModel.getParentId() : parentModel.getVersionId(); + String no = ""; + no = (_list.get(parentId) == null ? "" : _list.get(parentId)) + (i + 1); + _list.put(models.get(i).getVersionId(), no); + getProcessLevelNo(coeProcesslist, _list); + list.put(ws.getUUId(), _list); + } + } + } + } + + public Map getCoeProcessModelListByWsUUid(String wsUUid) { + return list.get(wsUUid); + } + + /** + * 重载指定流程 + * + * @param wsId + */ + public void reloadInBackground(final String wsId) { + new Thread(new Runnable() { + @Override + public void run() { + loadProcessLevel(wsId); + } + }).start(); + } + + public static void main() { + + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCache.java new file mode 100644 index 00000000..784faedd --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCache.java @@ -0,0 +1,93 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryAttributeDao; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryAttributeModel; +import com.actionsoft.sdk.local.SDK; + +public class PALRepositoryAttributeCache extends Cache{ + + public PALRepositoryAttributeCache(CachePluginProfile configuration) { + super(configuration); + registeIndex(PALRepositoryAttributeCacheIndex1.class, new PALRepositoryAttributeCacheIndex1());//wsId + registeIndex(PALRepositoryAttributeCacheIndex2.class, new PALRepositoryAttributeCacheIndex2());//wsId-methodId + registeIndex(PALRepositoryAttributeCacheIndex3.class, new PALRepositoryAttributeCacheIndex3());//wsId-attrId + registeIndex(PALRepositoryAttributeCacheIndex4.class, new PALRepositoryAttributeCacheIndex4());//wsId-methodId-attrId + registeIndex(PALRepositoryAttributeCacheIndex5.class, new PALRepositoryAttributeCacheIndex5());// methodId-attrId + + } + + @Override + public void load() { + load(this); + } + + protected void load(Cache t) { + List _list = new PALRepositoryAttributeDao().query().list(); + if (_list != null) { + for (PALRepositoryAttributeModel model : _list) { + t.put(model.getId(), model, false); + } + } + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE流程资产库文件属性配置 [" + ((_list == null) ? 0 : _list.size()) + "个]"); + } + + /** + * 获取cache + * @return + */ + public static PALRepositoryAttributeCache getCache() { + return (PALRepositoryAttributeCache)CacheManager.getCache(PALRepositoryAttributeCache.class); + } + /** + * 根据wsId获取属性数据 + * @param wsId + * @return + */ + public static List getAttributeByWsId(String wsId) { + return iteratorToList(getCache().getByIndex(PALRepositoryAttributeCacheIndex1.class, wsId)); + } + /** + * 根据wsId和methodId获取数据 + * @param wsId + * @param methodId + * @return + */ + public static List getAttributeByMethodId(String wsId, String methodId) { + return iteratorToList(getCache().getByIndex(PALRepositoryAttributeCacheIndex2.class, wsId + "-" + methodId)); + } + /** + * 根据wsId和attrId获取数据 + * @param wsId + * @param attrId + * @return + */ + public static List getAttributeByAttrId(String wsId, String attrId) { + return iteratorToList(getCache().getByIndex(PALRepositoryAttributeCacheIndex3.class, wsId + "-" + attrId)); + } + /** + * 根据methodId 和attrId获取数据 + * @param wsId + * @param methodId + * @param attrId + * @return + */ + public static PALRepositoryAttributeModel getAttributeByMethodIdAndAttrId(String wsId, String methodId, String attrId) { + return getCache().getByIndexSingle(PALRepositoryAttributeCacheIndex4.class, wsId + "-" + methodId + "-" + attrId); + } + + /** + * 根据attrId获取数据 + * @param attrId + * @return + */ + public static List getAttributeByMethodIdAndAttrId(String methodId, String attrId) { + return iteratorToList(getCache().getByIndex(PALRepositoryAttributeCacheIndex3.class, methodId + "-" + attrId)); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex1.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex1.java new file mode 100644 index 00000000..802ec1c4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex1.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryAttributeModel; + +public class PALRepositoryAttributeCacheIndex1 extends ListValueIndex{ + + @Override + public String key(PALRepositoryAttributeModel t) { + return t.getWsId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex2.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex2.java new file mode 100644 index 00000000..07bf32d1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex2.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryAttributeModel; + +public class PALRepositoryAttributeCacheIndex2 extends ListValueIndex{ + + @Override + public String key(PALRepositoryAttributeModel t) { + return t.getWsId() + "-" + t.getMethodId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex3.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex3.java new file mode 100644 index 00000000..3ae53a6d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex3.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryAttributeModel; + +public class PALRepositoryAttributeCacheIndex3 extends ListValueIndex{ + + @Override + public String key(PALRepositoryAttributeModel t) { + return t.getWsId() + "-" + t.getAttrId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex4.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex4.java new file mode 100644 index 00000000..a32fb3be --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex4.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.SingleValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryAttributeModel; + +public class PALRepositoryAttributeCacheIndex4 extends SingleValueIndex{ + + @Override + public String key(PALRepositoryAttributeModel t) { + return t.getWsId() + "-" + t.getMethodId() + "-" + t.getAttrId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex5.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex5.java new file mode 100644 index 00000000..d33c83b4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryAttributeCacheIndex5.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryAttributeModel; +import com.actionsoft.bpms.commons.cache.ListValueIndex; + +public class PALRepositoryAttributeCacheIndex5 extends ListValueIndex{ + + @Override + public String key(PALRepositoryAttributeModel t) { + return t.getMethodId() + "-" + t.getAttrId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCache.java new file mode 100644 index 00000000..136c9836 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCache.java @@ -0,0 +1,157 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import java.util.*; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.sdk.local.SDK; + +/** + * 资产库流程缓存 + * + * @author wangyh + * + */ +public class PALRepositoryCache extends Cache { + /* private final Map wsMap = new HashMap(); private static Map> map = new HashMap>(); */ + public PALRepositoryCache(CachePluginProfile profile) { + super(profile); + registeIndex(PALRepositoryCacheIndex1.class, new PALRepositoryCacheIndex1()); // key: wsId + registeIndex(PALRepositoryCacheIndex2.class, new PALRepositoryCacheIndex2()); // key: wsId_pid + registeIndex(PALRepositoryCacheIndex3.class, new PALRepositoryCacheIndex3()); // key: wsId_versionId + registeIndex(PALRepositoryCacheIndex4.class, new PALRepositoryCacheIndex4()); // key: plRid + registeIndex(PALRepositoryCacheIndex5.class, new PALRepositoryCacheIndex5()); // key: versionId + } + + /** + * 缓存流程文件,启动时平台加载 + */ + @Override + public void load() { + load(this); + } + + protected void load(Cache t) { + List _list = new PALRepository().getAllInstance(); + if (_list != null) { + for (PALRepositoryModel model : _list) { + t.put(model.getId(), model, false); + } + } + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE流程资产库流程对象 [" + ((_list == null) ? 0 : _list.size()) + "个]"); + } + + /* public void loadProcess() { Iterator it = map.keySet().iterator(); while (it.hasNext()) { String wsId = it.next(); List models = map.get(wsId); Map pMap = new HashMap(); for (PALRepositoryModel model : models) { if (pMap.containsKey(model.getParentId())) { ((List) pMap.get(model.getParentId())).add(model); } else { List pList = new ArrayList(); pList.add(model); pMap.put(model.getParentId(), pList); + * + * } } wsMap.put(wsId, pMap); } } + * + * public List getChildrenes(String wsId, String pid) { Map pMap = (Map) wsMap.get(wsId); return (List) pMap.get(pid); } */ + + public static PALRepositoryCache getCache() { + return (PALRepositoryCache) CacheManager.getCache(PALRepositoryCache.class); + } + + /** + * 根据资产库Id获取流程列表 + * + * @param wsId 资产库Id + * @return + */ + public static Iterator getByWsId(String wsId) { + return getCache().getByIndex(PALRepositoryCacheIndex1.class, wsId); + } + + // 获取当前流程id的第一级子节点流程 + public static Iterator getByPid(String wsId, String pid) { + return getCache().getByIndex(PALRepositoryCacheIndex2.class, wsId + "_" + pid); + } + + public static List getByVersionId(String wsId, String versionId) { + return iteratorToList(getCache().getByIndex(PALRepositoryCacheIndex3.class, wsId + "_" + versionId)); + } + + public static List getByVersionId( String versionId) { + return iteratorToList(getCache().getByIndex(PALRepositoryCacheIndex5.class, versionId)); + } + + /** + * 获取当前节点的所有子节点(仅限第一级子节点) + * @param wsId + * @param pid + * @return + */ + public static List getAllSubModelsByPid(String wsId, String pid) { + if (pid.length() < 36) { + List list2 = iteratorToList(getByPid(wsId, pid)); + sort(list2); + return list2; + } + PALRepositoryModel model = getCache().get(pid); + + List list2 = new ArrayList<>(); + if(model == null) return list2; + List list = iteratorToList(getCache().getByIndex(PALRepositoryCacheIndex3.class, wsId + "_" + model.getVersionId())); + List result = new ArrayList(); + if (list != null) { + for (PALRepositoryModel vModel : list) { + result.addAll(iteratorToList(getCache().getByIndex(PALRepositoryCacheIndex2.class, wsId + "_" + vModel.getId()))); + } + } + // 过滤去重 + Set ids = new HashSet<>(); + for (PALRepositoryModel m : result) { + if (ids.contains(m.getId())) continue; + list2.add(m); + ids.add(m.getId()); + } + sort(list2); + return list2; + } + + private static void sort(List list2) { + // 按orderIndex排序 + Collections.sort(list2, new Comparator() { + @Override + public int compare(PALRepositoryModel o1, PALRepositoryModel o2) { + return o1.getOrderIndex() - o2.getOrderIndex(); + } + }); + } + + /** + * 获取当前节点的所有子节点(包括所有的当前节点之下所有的级别) + * @param wsId + * @param pid + * @param result new一个List + * @param ids new一个Set,过滤,防止各种原因造成的死循环 + */ + public static void getAllChildrenModelsByPid(String wsId, String pid, List result, Set ids) { + List list = getAllSubModelsByPid(wsId, pid); + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + if (!ids.contains(list.get(i).getId())) { + result.add(list.get(i)); + ids.add(list.get(i).getId()); + //多版本处理 + for (int j = i; j getByPlRid(String plRid) { + return iteratorToList(getCache().getByIndex(PALRepositoryCacheIndex4.class, plRid)); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex1.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex1.java new file mode 100644 index 00000000..25550e9b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex1.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; + +public class PALRepositoryCacheIndex1 extends ListValueIndex { + /** + * 返回模型对象的索引值 + */ + public String key(PALRepositoryModel model) { + return model.getWsId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex2.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex2.java new file mode 100644 index 00000000..db66d8c0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex2.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; + +public class PALRepositoryCacheIndex2 extends ListValueIndex { + /** + * 返回模型对象的索引值 + */ + public String key(PALRepositoryModel model) { + return model.getWsId() + "_" + model.getParentId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex3.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex3.java new file mode 100644 index 00000000..8e935254 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex3.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; + +public class PALRepositoryCacheIndex3 extends ListValueIndex { + /** + * 返回模型对象的索引值 wsId_versionId + */ + public String key(PALRepositoryModel model) { + return model.getWsId() + "_" + model.getVersionId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex4.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex4.java new file mode 100644 index 00000000..005a1edb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex4.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; + +public class PALRepositoryCacheIndex4 extends ListValueIndex { + /** + * 返回模型对象的索引值 + */ + public String key(PALRepositoryModel model) { + return model.getPlRid(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex5.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex5.java new file mode 100644 index 00000000..9f45cb62 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryCacheIndex5.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; + +public class PALRepositoryCacheIndex5 extends ListValueIndex { + /** + * 返回模型对象的索引值 versionId + */ + public String key(PALRepositoryModel model) { + return model.getVersionId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryPropertyCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryPropertyCache.java new file mode 100644 index 00000000..ea869cd6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryPropertyCache.java @@ -0,0 +1,58 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryPropertyDao; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryPropertyModel; +import com.actionsoft.sdk.local.SDK; + +/** + * 流程自定义属性Cache + * + * @author zhangming + * + */ +public class PALRepositoryPropertyCache extends Cache { + + public PALRepositoryPropertyCache(CachePluginProfile configuration) { + super(configuration); + registeIndex(PALRepositoryPropertyCacheIndex1.class, new PALRepositoryPropertyCacheIndex1()); //key: plId + registeIndex(PALRepositoryPropertyCacheIndex2.class, new PALRepositoryPropertyCacheIndex2()); //key: plId + "-" + propertyId + registeIndex(PALRepositoryPropertyCacheIndex3.class, new PALRepositoryPropertyCacheIndex3()); + } + + @Override + public void load() { + load(this); + } + + protected void load(Cache t) { + List _list = new PALRepositoryPropertyDao().query().list(); + for (PALRepositoryPropertyModel property : _list) { + t.put(property.getId(), property, false); + } + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE流程资产库文件属性内容 [" + ((_list == null) ? 0 : _list.size()) + "个]"); + } + + public static PALRepositoryPropertyCache getCache() { + return (PALRepositoryPropertyCache) CacheManager.getCache(PALRepositoryPropertyCache.class); + } + + public static List getPropertyByPlId(String plId) { + return iteratorToList(getCache().getByIndex(PALRepositoryPropertyCacheIndex1.class, plId)); + } + + public static PALRepositoryPropertyModel getPropertyByPropertyId(String plId, String propertyId) { + return getCache().getByIndexSingle(PALRepositoryPropertyCacheIndex2.class, plId + "-" + propertyId); + } + + public static List getPropertyByPropertyId(String propertyId) { + return iteratorToList(getCache().getByIndex(PALRepositoryPropertyCacheIndex3.class, propertyId)); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryPropertyCacheIndex1.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryPropertyCacheIndex1.java new file mode 100644 index 00000000..f3bca378 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryPropertyCacheIndex1.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryPropertyModel; + +public class PALRepositoryPropertyCacheIndex1 extends ListValueIndex { + /** + * 返回某个流程的所有自定义属性 + */ + public String key(PALRepositoryPropertyModel model) { + return model.getPlId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryPropertyCacheIndex2.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryPropertyCacheIndex2.java new file mode 100644 index 00000000..e2962d87 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryPropertyCacheIndex2.java @@ -0,0 +1,10 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.SingleValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryPropertyModel; + +public class PALRepositoryPropertyCacheIndex2 extends SingleValueIndex { + @Override + public String key(PALRepositoryPropertyModel model) { + return model.getPlId() + "-" + model.getPropertyId(); + }} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryPropertyCacheIndex3.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryPropertyCacheIndex3.java new file mode 100644 index 00000000..387cf847 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryPropertyCacheIndex3.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryPropertyModel; +import com.actionsoft.bpms.commons.cache.ListValueIndex; + +public class PALRepositoryPropertyCacheIndex3 extends ListValueIndex { + /** + * 返回某个流程的所有自定义属性 + */ + public String key(PALRepositoryPropertyModel model) { + return model.getPropertyId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryRemoveCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryRemoveCache.java new file mode 100644 index 00000000..1e52c881 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryRemoveCache.java @@ -0,0 +1,91 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import java.util.Iterator; +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryRemove; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryRemoveModel; +import com.actionsoft.sdk.local.SDK; + +public class PALRepositoryRemoveCache extends Cache { + + public PALRepositoryRemoveCache(CachePluginProfile configuration) { + super(configuration); + registeIndex(PALRepositoryRemoveCacheIndex1.class, new PALRepositoryRemoveCacheIndex1()); // key: wsId + registeIndex(PALRepositoryRemoveCacheIndex2.class, new PALRepositoryRemoveCacheIndex2()); // key: removeId + } + + @Override + public void load() { + load(this); + } + + protected void load(Cache t) { + List _list = new PALRepositoryRemove().query().list();// 根据wsId得到相关数据 + if (_list != null) { + for (PALRepositoryRemoveModel model : _list) { + t.put(model.getId(), model, false); + } + } + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE流程资产库删除的流程对象 [" + ((_list == null) ? 0 : _list.size()) + "个]"); + } + + public static PALRepositoryRemoveCache getCache() { + return (PALRepositoryRemoveCache) CacheManager.getCache(PALRepositoryRemoveCache.class); + } + + /** + * 根据wsId获取被删除模型 + * + * @param wsId + * @return + * @author zhangming + */ + public List getModelsByWsId(String wsId) { + Iterator models = getCache().getByIndex(PALRepositoryRemoveCacheIndex1.class, wsId); + return iteratorToList(models); + } + + /** + * 根据removeId获取被删除模型 + * + * @param removeId + * @return + * @author zhangming + */ + public List getModelsByRemoveId(String removeId) { + Iterator models = getCache().getByIndex(PALRepositoryRemoveCacheIndex2.class, removeId); + return iteratorToList(models); + } + + /** + * 根据removeId删除 + * + * @param removeId + * @author zhangming + */ + public void removeModelsByRemoveId(String removeId) { + List models = getModelsByRemoveId(removeId); + for (PALRepositoryRemoveModel model : models) { + remove(model.getId()); + } + } + + /** + * 根据removeId删除 + * + * @param removeId + * @author zhangming + */ + public void removeModelsByWsId(String wsId) { + List models = getModelsByWsId(wsId); + for (PALRepositoryRemoveModel model : models) { + remove(model.getId()); + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryRemoveCacheIndex1.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryRemoveCacheIndex1.java new file mode 100644 index 00000000..2231c107 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryRemoveCacheIndex1.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryRemoveModel; + +public class PALRepositoryRemoveCacheIndex1 extends ListValueIndex { + /** + * 返回模型对象的索引值 + */ + public String key(PALRepositoryRemoveModel model) { + return model.getWsId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryRemoveCacheIndex2.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryRemoveCacheIndex2.java new file mode 100644 index 00000000..c86f9548 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryRemoveCacheIndex2.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryRemoveModel; + +public class PALRepositoryRemoveCacheIndex2 extends ListValueIndex { + /** + * 返回模型对象的索引值 + */ + public String key(PALRepositoryRemoveModel model) { + return model.getRemoveId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCache.java new file mode 100644 index 00000000..6259185d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCache.java @@ -0,0 +1,102 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryShapeAttributeDao; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; +import com.actionsoft.sdk.local.SDK; + +public class PALRepositoryShapeAttributeCache extends Cache{ + + public PALRepositoryShapeAttributeCache(CachePluginProfile configuration) { + super(configuration); + registeIndex(PALRepositoryShapeAttributeCacheIndex1.class, new PALRepositoryShapeAttributeCacheIndex1()); //wsId + registeIndex(PALRepositoryShapeAttributeCacheIndex2.class, new PALRepositoryShapeAttributeCacheIndex2()); //wsId-methodId + registeIndex(PALRepositoryShapeAttributeCacheIndex3.class, new PALRepositoryShapeAttributeCacheIndex3()); //wsId-methodId-shapeName + registeIndex(PALRepositoryShapeAttributeCacheIndex4.class, new PALRepositoryShapeAttributeCacheIndex4()); //wsId-methodId-shapeName-attrId + registeIndex(PALRepositoryShapeAttributeCacheIndex5.class, new PALRepositoryShapeAttributeCacheIndex5()); //wsId-methodId-attrId + registeIndex(PALRepositoryShapeAttributeCacheIndex6.class, new PALRepositoryShapeAttributeCacheIndex6());// methodId-attrId + } + + @Override + public void load() { + load(this); + } + + protected void load(Cache t) { + List _list = new PALRepositoryShapeAttributeDao().query().list(); + if (_list != null) { + for (PALRepositoryShapeAttributeModel model : _list) { + t.put(model.getId(), model, false); + } + } + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE流程资产库模型形状属性配置 [" + ((_list == null) ? 0 : _list.size()) + "个]"); + } + public static PALRepositoryShapeAttributeCache getCache() { + return (PALRepositoryShapeAttributeCache)CacheManager.getCache(PALRepositoryShapeAttributeCache.class); + } + /** + * 通过wsid获取数据 + * @param wsId + * @return + */ + public static List getAttributeListByWsId(String wsId) { + return iteratorToList(getCache().getByIndex(PALRepositoryShapeAttributeCacheIndex1.class, wsId)); + } + /** + * + * @param wsId + * @param methodId + * @return + */ + public static List getAttributeListByMethod(String wsId, String methodId) { + return iteratorToList(getCache().getByIndex(PALRepositoryShapeAttributeCacheIndex2.class, wsId + "-" + methodId)); + } + /** + * + * @param wsId + * @param methodId + * @param shapeName + * @return + */ + public static List getAttributeListByShapeName(String wsId, String methodId, String shapeName) { + return iteratorToList(getCache().getByIndex(PALRepositoryShapeAttributeCacheIndex3.class, wsId + "-" + methodId + "-" + shapeName)); + } + /** + * + * @param wsId + * @param methodId + * @param shapeName + * @param attrId + * @return + */ + public static PALRepositoryShapeAttributeModel getAttributeModelByAttrId(String wsId, String methodId, String shapeName, String attrId) { + return getCache().getByIndexSingle(PALRepositoryShapeAttributeCacheIndex4.class, wsId + "-" + methodId + "-" + shapeName + "-" + attrId); + } + + /** + * + * @param wsId + * @param methodId + * @param attrId + * @return + */ + public static List getAttributeModelByAttrId(String wsId, String methodId, String attrId) { + return iteratorToList(getCache().getByIndex(PALRepositoryShapeAttributeCacheIndex5.class, wsId + "-" + methodId + "-" + attrId)); + } + + /** + * + * @param attrId + * @return + */ + public static List getAttributeModelListByAttrId(String methodId, String attrId) { + return iteratorToList(getCache().getByIndex(PALRepositoryShapeAttributeCacheIndex6.class, methodId + "-" + attrId)); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex1.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex1.java new file mode 100644 index 00000000..3a54bc25 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex1.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; + +public class PALRepositoryShapeAttributeCacheIndex1 extends ListValueIndex{ + + @Override + public String key(PALRepositoryShapeAttributeModel t) { + return t.getWsId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex2.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex2.java new file mode 100644 index 00000000..203a7f5c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex2.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; + +public class PALRepositoryShapeAttributeCacheIndex2 extends ListValueIndex{ + + @Override + public String key(PALRepositoryShapeAttributeModel t) { + return t.getWsId() + "-" + t.getMethodId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex3.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex3.java new file mode 100644 index 00000000..d1cf3b9e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex3.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; + +public class PALRepositoryShapeAttributeCacheIndex3 extends ListValueIndex{ + + @Override + public String key(PALRepositoryShapeAttributeModel t) { + return t.getWsId() + "-" + t.getMethodId() + "-" + t.getShapeName(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex4.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex4.java new file mode 100644 index 00000000..9fe8e109 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex4.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.SingleValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; + +public class PALRepositoryShapeAttributeCacheIndex4 extends SingleValueIndex{ + + @Override + public String key(PALRepositoryShapeAttributeModel t) { + return t.getWsId() + "-" + t.getMethodId() + "-" + t.getShapeName() + "-" + t.getAttrId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex5.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex5.java new file mode 100644 index 00000000..63fc0616 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex5.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; +import com.actionsoft.bpms.commons.cache.ListValueIndex; + +public class PALRepositoryShapeAttributeCacheIndex5 extends ListValueIndex { + + @Override + public String key(PALRepositoryShapeAttributeModel t) { + return t.getWsId() + "-" + t.getMethodId() + "-" + t.getAttrId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex6.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex6.java new file mode 100644 index 00000000..c20687a4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeAttributeCacheIndex6.java @@ -0,0 +1,13 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; +import com.actionsoft.bpms.commons.cache.ListValueIndex; + +public class PALRepositoryShapeAttributeCacheIndex6 extends ListValueIndex { + + @Override + public String key(PALRepositoryShapeAttributeModel t) { + return t.getMethodId() + "-" + t.getAttrId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeConfigCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeConfigCache.java new file mode 100644 index 00000000..070eff05 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeConfigCache.java @@ -0,0 +1,67 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryShapeConfigDao; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeConfigModel; +import com.actionsoft.sdk.local.SDK; + +import java.util.List; + +/** + * @author 郝文豪(James) + * @date 2019/10/29 0029 上午 10:26 + */ +public class PALRepositoryShapeConfigCache extends Cache { + + public PALRepositoryShapeConfigCache(CachePluginProfile configuration) { + super(configuration); + registeIndex(PALRepositoryShapeConfigCacheIndex1.class, new PALRepositoryShapeConfigCacheIndex1()); + registeIndex(PALRepositoryShapeConfigCacheIndex2.class, new PALRepositoryShapeConfigCacheIndex2()); + } + + @Override + public void load() { + load(this); + } + + protected void load(Cache t) { + List _list = new PALRepositoryShapeConfigDao().query().list(); + if (_list != null && _list.size() > 0) { + for (PALRepositoryShapeConfigModel model : _list) { + t.put(model.getId(), model, false); + } + } + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE流程资产库模型形状数据显示通用规则配置 [" + ((_list == null) ? 0 : _list.size()) + "个]"); + } + + public static PALRepositoryShapeConfigCache getCache() { + return CacheManager.getCache(PALRepositoryShapeConfigCache.class); + } + + /** + * 得到指定wsId下methodId下shapeId的配置信息 + * + * @param wsId + * @param methodId + * @param shapeId + * @return + */ + public static List getShapeConfigListByShapeId(String wsId, String methodId, String shapeId) { + return iteratorToList(getCache().getByIndex(PALRepositoryShapeConfigCacheIndex1.class, wsId + "-" + methodId + "-" + shapeId)); + } + + /** + * 得到指定wsId下methodId 的所有配置信息 + * + * @param wsId + * @param methodId + * @return + */ + public static List getShapeConfigListByMethodId(String wsId, String methodId) { + return iteratorToList(getCache().getByIndex(PALRepositoryShapeConfigCacheIndex2.class, wsId + "-" + methodId)); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeConfigCacheIndex1.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeConfigCacheIndex1.java new file mode 100644 index 00000000..86e70631 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeConfigCacheIndex1.java @@ -0,0 +1,15 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeConfigModel; + +/** + * @author 郝文豪(James) + * @date 2019/10/29 0029 上午 10:36 + */ +public class PALRepositoryShapeConfigCacheIndex1 extends ListValueIndex { + @Override + public String key(PALRepositoryShapeConfigModel t) { + return t.getWsId() + "-" + t.getMethodId() + "-" + t.getShapeId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeConfigCacheIndex2.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeConfigCacheIndex2.java new file mode 100644 index 00000000..c4af340a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/cache/PALRepositoryShapeConfigCacheIndex2.java @@ -0,0 +1,15 @@ +package com.actionsoft.apps.coe.pal.pal.repository.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeConfigModel; + +/** + * @author 郝文豪(James) + * @date 2019/10/29 0029 上午 10:36 + */ +public class PALRepositoryShapeConfigCacheIndex2 extends ListValueIndex { + @Override + public String key(PALRepositoryShapeConfigModel t) { + return t.getWsId() + "-" + t.getMethodId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/constant/CoeProcessLevelConstant.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/constant/CoeProcessLevelConstant.java new file mode 100644 index 00000000..bbede2bd --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/constant/CoeProcessLevelConstant.java @@ -0,0 +1,46 @@ +package com.actionsoft.apps.coe.pal.pal.repository.constant; + +public class CoeProcessLevelConstant { + public static final String SUPPORTTHEMANAGEMENTPROCESS = "支持管理流程"; + public static final String COREBUSINESSPROCESSES = "核心经营流程"; + public static final String SUPPORTPROCESS = "支持流程"; + public static final String COREMANAGEMENTPROCESS = "运营流程"; + public static final String STRATEGICPROCESS = "战略流程"; + public static final int SENIORPROCESS = 0; // 高层流程 + public static final int UNDERLYINGPROCESS = 1; // 底层流程 + + /* 小组下流程清单所用常量 */ + public static final String PLISBOTTOM = "1"; // 层级 + public static final String PLM = "2"; // 里程碑 + public static final String EXECTYPE = "3"; // 执行方式 + public static final String SYSTEMNAME = "4"; // 系统名称 + public static final String PLCOLOR = "5"; // 颜色标记 + + /** + * 流程分级标记BPN-常量-标记 + */ + public static final String MARK = "mark"; + /** + * 流程分级标记BPN-常量-分配 + */ + public static final String ASSIGN = "assign"; + /** + * BPN-已标记 + */ + public static final String MARK_STATE_MARKED = "0"; + /** + * BPN-已分配 + */ + public static final String MARK_STATE_ASSIGNED = "1"; + + /** + * BPN-已分配 + */ + public static final String LINK_APP_PREFIX = "link_app_"; + + /** + * BPN-link前缀 + */ + public static final String LINK_PREFIX = "link_"; + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/constant/PLRespositoryConstant.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/constant/PLRespositoryConstant.java new file mode 100644 index 00000000..8fc4e95c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/constant/PLRespositoryConstant.java @@ -0,0 +1,36 @@ +package com.actionsoft.apps.coe.pal.pal.repository.constant; + +public class PLRespositoryConstant { + + public final static String REPOSITORY_ROOT_CONFIG = "workspace"; + + /** + * 流程分级-分类-流程 + */ + public final static String PL_CATEGORY_PROCESS = "process"; + + /** + * 流程分级-分类-数据 + */ + public final static String PL_CATEGORY_DATA = "data"; + + /** + * 流程分级-分类-IT系统 + */ + public final static String PL_CATEGORY_ITSYSTEM = "itsystem"; + + /** + * 流程分级-分类-组织 + */ + public final static String PL_CATEGORY_ORG = "org"; + + /** + * 流程分级-分类-控制 + */ + public final static String PL_CATEGORY_CONTROL = "control"; + + /** + * 流程分级-method-流程.bpmn2 + */ + public final static String PL_METHID_PROCESS_BPMN2 = "process.bpmn2"; +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/CoeProcessLevelCorrelateDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/CoeProcessLevelCorrelateDao.java new file mode 100644 index 00000000..d9f74724 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/CoeProcessLevelCorrelateDao.java @@ -0,0 +1,432 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.commons.pagination.SQLPagination; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.cache.CoeProcessLevelCorrelateCache; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.CoeProcessLevelCorrelateModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.exception.AWSDataAccessException; + +public class CoeProcessLevelCorrelateDao extends DaoObject { + + @Override + public String entityName() { + return CoeProcessLevelCorrelateModel.DATABASE_ENTITY; + } + + /** + * 获取AWS与PAL流程关联关系数据 + * @return + */ + public List getCorrelateList() { + String sql = "SELECT * FROM " + CoeProcessLevelCorrelateModel.DATABASE_ENTITY; + return DBSql.query(sql, new rowMapper()); + } + + /** + * 通过类型来获取关联数据 + * + * @param correlateType + * @return + */ + public List getCorrelateListByCorrelateType(int correlateType) { + String sql = "SELECT * FROM " + CoeProcessLevelCorrelateModel.DATABASE_ENTITY + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_CORRELATETYPE + "=?"; + return DBSql.query(sql, new rowMapper(), new Object [] { correlateType }); + } + + /** + * 获取AWS与PAL流程关联关系数据 + * @param wsId + * @return + */ + public List getCorrelateList(String wsId) { + String sql = "SELECT * FROM " + CoeProcessLevelCorrelateModel.DATABASE_ENTITY + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_WSID + "=?"; + return DBSql.query(sql, new rowMapper(), new Object[] { wsId }); + } + + /** + * 获取已关联 + * + * @param wsId + * @param isCorrelate + * @return + */ + public List getCorrelateListByWsId(String wsId, int isCorrelate) { + String sql = "SELECT * FROM " + CoeProcessLevelCorrelateModel.DATABASE_ENTITY + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_WSID + "=? And " + CoeProcessLevelCorrelateModel.FIELD_ISCORRELATE + "=?"; + return DBSql.query(sql, new rowMapper(), new Object[] { wsId, isCorrelate}); + } + + public List getCorrelateListByWsIdAndPagination(String wsId, int isCorrelate, int start, int size) { + String sql = "SELECT * FROM " + CoeProcessLevelCorrelateModel.DATABASE_ENTITY + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_WSID + "=? And " + CoeProcessLevelCorrelateModel.FIELD_ISCORRELATE + "=?"; + sql = SQLPagination.getPaginitionSQL(sql, start, size); + return DBSql.query(sql, new rowMapper(), new Object[] { wsId, isCorrelate}); + } + + /** + * 获取未关联 + * + * @param wsId + * @param correlateType + * @param isCorrelate + * @return + */ + public List getNotCorrelateListByWsId(String wsId, int correlateType, int isCorrelate) { + String sql = "SELECT * FROM " + CoeProcessLevelCorrelateModel.DATABASE_ENTITY + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_WSID + "=? And " + CoeProcessLevelCorrelateModel.FIELD_ISCORRELATE + "=? And " + CoeProcessLevelCorrelateModel.FIELD_CORRELATETYPE + "=?"; + return DBSql.query(sql, new rowMapper(), new Object[] { wsId, isCorrelate, correlateType}); + } + + public List getEmptyPlVersionIdList() { + String sql = "SELECT * FROM " + entityName() + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_PLVERSIONID + "='' OR " + CoeProcessLevelCorrelateModel.FIELD_PLVERSIONID + " IS NULL "; + return DBSql.query(sql, new rowMapper()); + } + + /** + * 获取关联数据的数量 + * @param plId 资产库id + * @param plAwsVersionid aws流程版本id + * @author SUNLH + * @return + */ + public int getCorrelateCountByIdAndAwsVersionid(String plId, String plAwsVersionid) { + String sql = "SELECT COUNT(*) FROM " + entityName() + + " WHERE (" + CoeProcessLevelCorrelateModel.FIELD_CORRELATETYPE + "=0 OR " + CoeProcessLevelCorrelateModel.FIELD_CORRELATETYPE + " IS NULL) " + + " AND " + CoeProcessLevelCorrelateModel.FIELD_PLID + "=? " + + " AND " + CoeProcessLevelCorrelateModel.FIELD_PLAWSVERSIONID + "=?"; + return DBSql.getInt(sql, new Object[] { plId, plAwsVersionid }); + } + + /** + * 删除关联关系 + * @param plId + */ + public void deleteCorrlate(String plId) { + String sql = "DELETE FROM " + entityName() + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_PLID + "=?"; + int r = DBSql.update(sql, new Object[] { plId }); + if (r > 0) { + CoeProcessLevelCorrelateCache.getCache().remove(plId); + } + } + + public void repairCorrelateData(String plId, String plVersionId, int correlateType, int isCorrelate) { + String sql = "UPDATE " + CoeProcessLevelCorrelateModel.DATABASE_ENTITY + " set " + + CoeProcessLevelCorrelateModel.FIELD_PLVERSIONID + "=?, " + + CoeProcessLevelCorrelateModel.FIELD_CORRELATETYPE + "=? , " + + CoeProcessLevelCorrelateModel.FIELD_ISCORRELATE + "=? where " + + CoeProcessLevelCorrelateModel.FIELD_PLID + "=?"; + Object [] args2 = {plVersionId, correlateType, isCorrelate, plId}; + int r = DBSql.update(sql, args2); + if (r > 0) { + CoeProcessLevelCorrelateModel model = getModelByPlId(plId); + CoeProcessLevelCorrelateCache.getCache().put(plId, model); + } + } + + /** + * 之前老数据表的批量插入 + * @param list + * @return + */ + private boolean oldBatchInsert(List list) { + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + String sql = "INSERT INTO APP_ACT_COE_PAL_CORRELATE (" + + CoeProcessLevelCorrelateModel.FIELD_WSID + ", " + + CoeProcessLevelCorrelateModel.FIELD_PLID + ", " + + CoeProcessLevelCorrelateModel.FIELD_PLAWSID + ", " + + CoeProcessLevelCorrelateModel.FIELD_PLAWSVERSIONID + " ) VALUES(?, ?, ?, ?)"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (int i = 0; i < list.size(); i++) { + CoeProcessLevelCorrelateModel model = list.get(i); + prest.setString(1, model.getWsId()); + prest.setString(2, model.getPlId()); + prest.setString(3, model.getPlAwsId()); + prest.setString(4, model.getPlAwsVersionid()); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + for (CoeProcessLevelCorrelateModel model : list) { + CoeProcessLevelCorrelateCache.getCache().put(model.getPlId(), model); + } + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, prest, null); + } + return false; + } + + /** + * 备份恢复时批量插入 + * @param list + * @return + */ + public boolean batchInsert(List list) { + if (list == null) { + return false; + } + // 兼容老的备份恢复 + for (CoeProcessLevelCorrelateModel model : list) { + if (UtilString.isEmpty(model.getPlVersionId())) { + return oldBatchInsert(list); + } + } + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + String sql = "INSERT INTO APP_ACT_COE_PAL_CORRELATE (" + + CoeProcessLevelCorrelateModel.FIELD_WSID + ", " + + CoeProcessLevelCorrelateModel.FIELD_PLID + ", " + + CoeProcessLevelCorrelateModel.FIELD_PLAWSID + ", " + + CoeProcessLevelCorrelateModel.FIELD_PLAWSVERSIONID + ", " + + CoeProcessLevelCorrelateModel.FIELD_EXT1 + ", " + + CoeProcessLevelCorrelateModel.FIELD_EXT2 + ", " + + CoeProcessLevelCorrelateModel.FIELD_EXT3 + ", " + + CoeProcessLevelCorrelateModel.FIELD_EXT4 + ", " + + CoeProcessLevelCorrelateModel.FIELD_PLVERSIONID + ", " + + CoeProcessLevelCorrelateModel.FIELD_CORRELATETYPE + ", " + + CoeProcessLevelCorrelateModel.FIELD_ISCORRELATE + + " ) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (int i = 0; i < list.size(); i++) { + CoeProcessLevelCorrelateModel model = list.get(i); + prest.setString(1, model.getWsId()); + prest.setString(2, model.getPlId()); + prest.setString(3, model.getPlAwsId()); + prest.setString(4, model.getPlAwsVersionid()); + prest.setString(5, model.getExt1()); + prest.setString(6, model.getExt2()); + prest.setString(7, model.getExt3()); + prest.setString(8, model.getExt4()); + if (!UtilString.isEmpty(model.getPlVersionId())) { + prest.setString(9, model.getPlVersionId()); + prest.setInt(10, model.getCorrelateType()); + prest.setInt(11, model.isCorrelate() ? 1 : 0); + } + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + conn.setAutoCommit(true); + for (CoeProcessLevelCorrelateModel model : list) { + CoeProcessLevelCorrelateCache.getCache().put(model.getPlId(), model); + } + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, prest, null); + } + return false; + } + + /** + * 根据repositoryId(plId)查询 + * @param repositoryId + * @return + */ + public List getModelListByRepositoryId(String repositoryId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_PLID + "=?"; + return DBSql.query(sql, new rowMapper(), new Object[] { repositoryId }); + } + + /** + * 根据条件查询 + * @param param 查询条件 + * @return + */ + public List getByParam(String param) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + param; + return DBSql.query(sql, new rowMapper()); + } + + /** + * 查询数据 + * @param versionId pal流程资产库流程版本id + * @return + */ + public List getModelListByPlVersionId(String versionId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_PLVERSIONID + "=?"; + return DBSql.query(sql, new rowMapper(), new Object[] { versionId }); + } + + public CoeProcessLevelCorrelateModel getModelByPlId(String repositoryId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_PLID + "=?"; + List list = DBSql.query(sql, new rowMapper(), new Object[] { repositoryId }); + if (list != null && list.size() > 0) { + return list.get(0); + } + return null; + } + + /** + * 根据BPMS流程id查询是否与PAL有关联关系 + * @param awsId + * @return + */ + public CoeProcessLevelCorrelateModel queryCorrelateModelyPlAwsId(String awsId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_PLAWSID + "=?"; + List list = DBSql.query(sql, new rowMapper(), new Object[] { awsId }); + if (list != null && list.size() > 0) { + return list.get(0); + } + return null; + } + + /** + * 根据BPMS流程版本id查询是否与PAL有关联关系 + * @param plAwsVersionId + * @return + */ + public List queryCorrelateModelsyPlAwsId(String plAwsVersionId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_PLAWSVERSIONID + "=?"; + return DBSql.query(sql, new rowMapper(), new Object[] { plAwsVersionId }); + } + + /** + * 获取PAL推送到BPMS但是未分配的所有流程 + * @return + */ + public List getCoePalNoDistributionList() { + String sql = "SELECT * FROM " + entityName() + + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_CORRELATETYPE+ "=1 " + +" AND (" + CoeProcessLevelCorrelateModel.FIELD_ISCORRELATE + "=0 OR " + CoeProcessLevelCorrelateModel.FIELD_ISCORRELATE + " IS NULL)"; + return DBSql.query(sql, new rowMapper()); + } + + /** + * 获取PAL推送到BPMS但是未分配的流程 + * @param versionId pal流程版本id + * @return + */ + public List getCoePalNoDistributionListByVersionId(String versionId) { + String sql = "SELECT * FROM " + entityName() + + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_CORRELATETYPE+ "=1 " + + " AND (" + CoeProcessLevelCorrelateModel.FIELD_ISCORRELATE + "=0 OR "+ CoeProcessLevelCorrelateModel.FIELD_ISCORRELATE + " IS NULL) " + + " AND " + CoeProcessLevelCorrelateModel.FIELD_PLVERSIONID + "=?"; + return DBSql.query(sql, new rowMapper(), new Object[] { versionId }); + } + + /** + * 获取PAL推送到BPMS且已分配的流程 + * @param versionId pal流程版本id + * @return + */ + public List getCoePalDistributedListByVersionId(String versionId) { + String sql = "SELECT * FROM " + entityName() + + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_CORRELATETYPE+ "=1 " + + " AND " + CoeProcessLevelCorrelateModel.FIELD_ISCORRELATE + "=1 " + + " AND " + CoeProcessLevelCorrelateModel.FIELD_PLVERSIONID + "=?"; + return DBSql.query(sql, new rowMapper(), new Object[] { versionId }); + } + + /** + * 删除关联关系 + * @param plVersionId + */ + public int deleteByPlVersionId(String plVersionId) { + String sql = "DELETE FROM " + entityName() + " WHERE " + CoeProcessLevelCorrelateModel.FIELD_PLVERSIONID + "=?"; + int r = DBSql.update(sql, new Object[] { plVersionId }); + if (r > 0) { + List list = PALRepositoryCache.getByVersionId(plVersionId); + if (list != null) { + for (PALRepositoryModel model : list) { + CoeProcessLevelCorrelateCache.getCache().remove(model.getId()); + } + } + } + return r; + } + + private class rowMapper implements RowMapper { + + @Override + public CoeProcessLevelCorrelateModel mapRow(ResultSet rs, int arg1) throws SQLException { + CoeProcessLevelCorrelateModel model = new CoeProcessLevelCorrelateModel(); + model.setWsId(rs.getString(CoeProcessLevelCorrelateModel.FIELD_WSID)); + model.setPlId(rs.getString(CoeProcessLevelCorrelateModel.FIELD_PLID)); + model.setPlVersionId(rs.getString(CoeProcessLevelCorrelateModel.FIELD_PLVERSIONID)); + model.setPlAwsVersionid(rs.getString(CoeProcessLevelCorrelateModel.FIELD_PLAWSVERSIONID)); + model.setPlAwsId(rs.getString(CoeProcessLevelCorrelateModel.FIELD_PLAWSID)); + model.setCorrelateType(rs.getInt(CoeProcessLevelCorrelateModel.FIELD_CORRELATETYPE)); + model.setCorrelate(rs.getInt(CoeProcessLevelCorrelateModel.FIELD_ISCORRELATE) == 1); + model.setExt1(rs.getString(CoeProcessLevelCorrelateModel.FIELD_EXT1)); + model.setExt2(rs.getString(CoeProcessLevelCorrelateModel.FIELD_EXT2)); + model.setExt3(rs.getString(CoeProcessLevelCorrelateModel.FIELD_EXT3)); + model.setExt4(rs.getString(CoeProcessLevelCorrelateModel.FIELD_EXT4)); + return model; + } + + } + + @Override + public int insert(CoeProcessLevelCorrelateModel model) throws AWSDataAccessException { + Map paraMap = new HashMap(); + paraMap.put(CoeProcessLevelCorrelateModel.FIELD_PLID, model.getPlId()); + paraMap.put(CoeProcessLevelCorrelateModel.FIELD_WSID, model.getWsId()); + paraMap.put(CoeProcessLevelCorrelateModel.FIELD_PLVERSIONID, model.getPlVersionId()); + paraMap.put(CoeProcessLevelCorrelateModel.FIELD_PLAWSID, model.getPlAwsId()); + paraMap.put(CoeProcessLevelCorrelateModel.FIELD_PLAWSVERSIONID, model.getPlAwsVersionid()); + paraMap.put(CoeProcessLevelCorrelateModel.FIELD_CORRELATETYPE, model.getCorrelateType()); + paraMap.put(CoeProcessLevelCorrelateModel.FIELD_ISCORRELATE, model.isCorrelate() ? 1 : 0); + paraMap.put(CoeProcessLevelCorrelateModel.FIELD_EXT1, model.getExt1()); + paraMap.put(CoeProcessLevelCorrelateModel.FIELD_EXT2, model.getExt2()); + paraMap.put(CoeProcessLevelCorrelateModel.FIELD_EXT3, model.getExt3()); + paraMap.put(CoeProcessLevelCorrelateModel.FIELD_EXT4, model.getExt4()); + int result = DBSql.update(DBSql.getInsertStatement(entityName(), paraMap), paraMap); + if (result > 0) { + CoeProcessLevelCorrelateCache.getCache().put(model.getPlId(), model); + } + return result; + } + + @Override + public RowMapper rowMapper() { + return new rowMapper(); + } + + @Override + public int update(CoeProcessLevelCorrelateModel arg0) throws AWSDataAccessException { + return 0; + } + + public void updateExt1ToShow(String plId) { + String sql = "UPDATE " + CoeProcessLevelCorrelateModel.DATABASE_ENTITY + " set " + + CoeProcessLevelCorrelateModel.FIELD_EXT1 + "=? " + + " where " + + CoeProcessLevelCorrelateModel.FIELD_PLID + "=?"; + Object [] args2 = {"show", plId}; + int r = DBSql.update(sql, args2); + if (r > 0) { + CoeProcessLevelCorrelateModel model = getModelByPlId(plId); + CoeProcessLevelCorrelateCache.getCache().put(plId, model); + } + } + +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/CoeProcessLevelDaoFacotory.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/CoeProcessLevelDaoFacotory.java new file mode 100644 index 00000000..1c52900e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/CoeProcessLevelDaoFacotory.java @@ -0,0 +1,20 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.bpms.commons.database.DaoFactory; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.ClassReflect; +import com.actionsoft.exception.AWSException; + +public class CoeProcessLevelDaoFacotory extends DaoFactory{ + public static final String DAO_CLASSPATH = "com.actionsoft.apps.coe.pal.pal.repository.dao"; + public static PALRepository createCoeProcessLevel() { + try { + Class c = ClassReflect.forName(DAO_CLASSPATH + "." + AWSServerConf.getDatabaseProvider() + ".CoeProcessLevelAdapter", CoEConstant.APP_ID); + return (PALRepository) create(c); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + throw new AWSException(e); + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/CoeProcessLevelSystemName.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/CoeProcessLevelSystemName.java new file mode 100644 index 00000000..bc2dd33c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/CoeProcessLevelSystemName.java @@ -0,0 +1,141 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.apps.coe.pal.pal.repository.model.CoeProcessLevelSystemNameModel; +import com.actionsoft.exception.AWSDataAccessException; + +public class CoeProcessLevelSystemName extends DaoObject { + + public int create(PlatformMetaModelBean obj) throws SQLException { + StringBuffer sql = new StringBuffer(); + CoeProcessLevelSystemNameModel model = (CoeProcessLevelSystemNameModel) obj; + if (model.getUUId().equals("") || model.getUUId().equals("0")) { + model.setUUId(UUIDGener.getUUID()); + } + sql.append("insert into "); + sql.append(CoeProcessLevelSystemNameModel.DATABASE_ENTITY); + sql.append(" ("); + sql.append(model.FIELD_UUID).append(","); + sql.append(model.FIELD_NAME).append(","); + sql.append(model.FIELD_ISDEFAULT).append(""); + sql.append(") values('"); + sql.append(model.getUUId()).append("',"); + sql.append("'").append(model.getName()).append("'").append(","); + boolean isDefult = model.isDefault(); + if (AWSServerConf.isOracle()) { + sql.append("").append(isDefult == false ? "0" : "1").append("").append(""); + } else if (AWSServerConf.isSQLServer()) { + sql.append("").append(isDefult == false ? "0" : "1").append("").append(""); + } else { + sql.append("").append(isDefult).append("").append(""); + } + sql.append(")"); + int r = DBSql.update(sql.toString()); + return r; + } + + public PlatformMetaModelBean getInstance(String uuid) { + String sql = "select * from " + CoeProcessLevelSystemNameModel.DATABASE_ENTITY + " where " + CoeProcessLevelSystemNameModel.FIELD_UUID + "='" + uuid + "'"; + try { + return DBSql.getObject(sql, new CoeProcessLevelSystemNameModelMapper()); + } catch (AWSDataAccessException e) { + e.printStackTrace(System.err); + } + return null; + } + + private class CoeProcessLevelSystemNameModelMapper implements RowMapper { + public CoeProcessLevelSystemNameModel mapRow(ResultSet rs, int arg1) throws SQLException { + CoeProcessLevelSystemNameModel model = new CoeProcessLevelSystemNameModel(); + model.setUUId(putString(rs.getString(model.FIELD_UUID))); + model.setName(putString(rs.getString(model.FIELD_NAME))); + model.setDefault(rs.getBoolean(model.FIELD_ISDEFAULT)); + return model; + } + } + + public PlatformMetaModelBean record2Model(ResultSet rs) { + CoeProcessLevelSystemNameModel model = new CoeProcessLevelSystemNameModel(); + try { + model.setUUId(putString(rs.getString(model.FIELD_UUID))); + model.setName(putString(rs.getString(model.FIELD_NAME))); + model.setDefault(rs.getBoolean(model.FIELD_ISDEFAULT)); + } catch (SQLException e) { + e.printStackTrace(); + } + return model; + } + + public String putString(String obj) { + if (obj == null) { + return ""; + } else { + return obj; + } + } + + @Override + public int update(PlatformMetaModelBean obj) { + StringBuffer sql = new StringBuffer(); + CoeProcessLevelSystemNameModel model = (CoeProcessLevelSystemNameModel) obj; + sql.append("UPDATE ").append(CoeProcessLevelSystemNameModel.DATABASE_ENTITY); + sql.append(" set ").append(model.FIELD_NAME).append("=").append(" '").append(model.getName()).append("' ").append(","); + sql.append(" ").append(model.FIELD_ISDEFAULT).append("=").append(" ").append(model.isDefault()).append("").append(""); + sql.append(" where ").append(model.FIELD_UUID).append("='").append(model.getUUId()).append("'"); + int r = DBSql.update(sql.toString()); + return r; + } + + /** + * 获取sysName + * + * @return + */ + public List getCoeProcessLevelSystemName() { + String sql = "SELECT * FROM " + CoeProcessLevelSystemNameModel.DATABASE_ENTITY; + try { + return DBSql.query(sql, new CoeProcessLevelSystemNameModelMapper()); + } catch (AWSDataAccessException e) { + e.printStackTrace(System.err); + } + return new ArrayList(); + } + + // 删除系统名称 + public String removeSysatemName(String uuid) { + StringBuffer sql = new StringBuffer(); + sql.append("DELETE FROM ").append(CoeProcessLevelSystemNameModel.DATABASE_ENTITY).append(" WHERE ").append(CoeProcessLevelSystemNameModel.FIELD_UUID).append("='").append(uuid).append("'"); + int r = DBSql.update(sql.toString()); + if (r > 0) { + return "1"; + } else { + return "-1"; + } + } + + @Override + public int insert(PlatformMetaModelBean daoObj) { + return 0; + } + + @Override + public String entityName() { + return null; + } + + @Override + public RowMapper rowMapper() { + return null; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/CoeProcessLevelSystemNameDaoFactory.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/CoeProcessLevelSystemNameDaoFactory.java new file mode 100644 index 00000000..cf9b17e6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/CoeProcessLevelSystemNameDaoFactory.java @@ -0,0 +1,20 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.bpms.commons.database.DaoFactory; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.ClassReflect; +import com.actionsoft.exception.AWSException; + +public class CoeProcessLevelSystemNameDaoFactory extends DaoFactory{ + public static final String DAO_CLASSPATH = "com.actionsoft.apps.coe.pal.pal.repository.dao"; + public static CoeProcessLevelSystemName createCoeProcessLevelSystemName() { + try { + Class c = ClassReflect.forName(DAO_CLASSPATH + "." + AWSServerConf.getDatabaseProvider() + ".CoeProcessLevelSystemNameAdapter", CoEConstant.APP_ID); + return (CoeProcessLevelSystemName) create(c); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + throw new AWSException(e); + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepository.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepository.java new file mode 100644 index 00000000..c2b8fa1b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepository.java @@ -0,0 +1,4382 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.actionsoft.apps.lifecycle.api.AppsAPIManager; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.commons.pagination.SQLPagination; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.constant.CoeProcessLevelConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerShapeCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper.CoeFile; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeCopyModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeFileRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapePasteModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil; +import com.actionsoft.apps.coe.pal.pal.repository.util.Number2ChineseNumUtil; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.pal.ws.web.VersionUtil; +import com.actionsoft.apps.coe.pal.system.util.StringUtil; +import com.actionsoft.apps.coe.pal.teamwork.dao.TeamPerm; +import com.actionsoft.exception.AWSDataAccessException; +import com.actionsoft.i18n.I18nRes; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public class PALRepository extends DaoObject { + + public PALRepositoryModel getInstance(String uuid) { + String sql = "select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_UUID + "= ?"; + return DBSql.getObject(sql, new PALRespositoryModelMapper(), new Object[]{uuid}); + } + + /** + * 获取repository表中的所有数据 + * @return + * @author tanj + */ + public List getAllInstance() { + return query().list(); + } + + private class PALRespositoryModelMapper implements RowMapper { + public PALRepositoryModel mapRow(ResultSet rs, int arg1) throws SQLException { + return (PALRepositoryModel) record2Model(rs); + } + } + + @Override + public int insert(PALRepositoryModel obj) throws AWSDataAccessException { + Connection conn = DBSql.open(); + int r = 0; + r = insert(conn, obj); + DBSql.close(conn); + + return r; + } + + public int insert(Connection conn, PALRepositoryModel obj) throws AWSDataAccessException { + int r = 0; + PALRepositoryModelImpl model = (PALRepositoryModelImpl) obj; + if (model.getId().equals("") || model.getId().equals("0")) { + model.setId(UUIDGener.getUUID()); + if(model.getVersionId() == null || "".equals(model.getVersionId())) { + model.setVersionId(model.getId()); + } + } + if (model.getPlRid() == null || "".equals(model.getPlRid()) || "0".equals(model.getId())) { + model.setPlRid(UUIDGener.getUUID()); + } + + Map paraMap = new HashMap(); + paraMap.put(PALRepositoryModelImpl.FIELD_UUID, model.getId()); + paraMap.put(PALRepositoryModelImpl.FIELD_WS_ID, model.getWsId()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_NO, model.getNo()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_NAME, model.getName()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_LEVEL, model.getLevel()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_PARENT_ID, model.getParentId()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_ORDERINDEX, model.getOrderIndex()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_DESC, model.getDesc()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_IS_BOTTOM_LEVEL, model.isBottomLevel()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_RD, model.getOwnerDept()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_RP, model.getOwnerUser()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_M, model.getMilestone()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_EXEC_TYPE, model.getExecType()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_SYSTEM_NAME, model.getSystemName()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_AWS_PID, model.getAWSProcessId()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_DIAGRAM_URL, model.getDiagramUrl()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_COLOR, model.getColor()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_CATEGORY, model.getMethodCategory()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_METHODID, model.getMethodId()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_VER, model.getVersion()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_VERSION_UUID, model.getVersionId()); + paraMap.put(PALRepositoryModelImpl.FIELD_FILE_PATH, model.getFilePath() == null ? "" : model.getFilePath()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_INPUT, model.getInput() == null ? "" : model.getInput()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_OUTPUT, model.getOutput() == null ? "" : model.getOutput()); + //historyMaxVersion转为数字类型 + paraMap.put(PALRepositoryModelImpl.FIELD_HISTORYMAXVERSION, "".equals(model.getHistoryMaxVersion()) ? 0 : Integer.parseInt(model.getHistoryMaxVersion()) ); + paraMap.put(PALRepositoryModelImpl.FIELD_IS_SYSTEM_FILE, model.isSystemFile() ? 1 : 0); + paraMap.put(PALRepositoryModelImpl.FIELD_IS_USE, model.isUse() ? 1 : 0); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_RID, model.getPlRid()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_ISPUBLISH, model.isPublish() ? 1 : 0); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_ISSTOP, model.isStop() ? 1 : 0); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_ISAPPROVAL, model.isApproval() ? 1 : 0); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_CREATEUSER, model.getCreateUser()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_CREATEDATE, model.getCreateDate()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_MODIFYUSER, model.getModifyUser()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_MODIFYDATE, model.getModifyDate()); + paraMap.put(PALRepositoryModelImpl.FIELD_VIEWCOUNT, model.getViewCount()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_DUTY_DEPT, model.getDutyDept()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_DUTY_PERSON, model.getDutyUser()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_LOCKUSER, model.getLockUser()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_EXT1, model.getExt1()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_EXT2, model.getExt2()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_EXT3, model.getExt3()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_EXT4, model.getExt4()); + //三员管理 + if(null != model.getSecurityLevel()){ + paraMap.put(PALRepositoryModelImpl.FIELD_SECURITY_LEVEL,model.getSecurityLevel()); + }else { + model.setSecurityLevel(-1); + } + + String sql = DBSql.getInsertStatement(PALRepositoryModelImpl.DATABASE_ENTITY, paraMap); + model.setNewParentId(model.getParentId()); + r = DBSql.update(conn, sql, paraMap); + if (r > 0) { + PALRepositoryCache.getCache().put(model.getId(), model); + } + return r; + } + + /** + * 批量插入数据 + * + * @param list + * @return + * @author zhangming + */ + public boolean batchInsert(List list) { + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + StringBuilder sql = new StringBuilder("INSERT INTO ").append(PALRepositoryModelImpl.DATABASE_ENTITY) + .append("(") + .append(PALRepositoryModelImpl.FIELD_UUID).append(",") + .append(PALRepositoryModelImpl.FIELD_WS_ID).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_NO).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_NAME).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_LEVEL).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_PARENT_ID).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_ORDERINDEX).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_DESC).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_IS_BOTTOM_LEVEL).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_RD).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_RP).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_M).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_EXEC_TYPE).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_SYSTEM_NAME).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_AWS_PID).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_DIAGRAM_URL).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_COLOR).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_CATEGORY).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_METHODID).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_VER).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_VERSION_UUID).append(",") + .append(PALRepositoryModelImpl.FIELD_FILE_PATH).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_INPUT).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_OUTPUT).append(",") + .append(PALRepositoryModelImpl.FIELD_HISTORYMAXVERSION).append(",") + .append(PALRepositoryModelImpl.FIELD_IS_SYSTEM_FILE).append(",") + .append(PALRepositoryModelImpl.FIELD_IS_USE).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_RID).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_ISPUBLISH).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_CREATEUSER).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_CREATEDATE).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_MODIFYUSER).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_MODIFYDATE).append(",") + .append(PALRepositoryModelImpl.FIELD_VIEWCOUNT).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_DUTY_DEPT).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_DUTY_PERSON).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_ISSTOP).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_ISAPPROVAL).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_EXT1).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_EXT2).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_EXT3).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_EXT4).append(",") + .append(PALRepositoryModelImpl.FIELD_SECURITY_LEVEL).append(")") + .append(" VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); + prest = conn.prepareStatement(sql.toString(), ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (PALRepositoryModel model : list) { + prest.setString(1, model.getId()); + prest.setString(2, model.getWsId()); + prest.setString(3, model.getNo()); + prest.setString(4, model.getName()); + prest.setInt(5, model.getLevel()); + prest.setString(6, model.getParentId()); + prest.setInt(7, model.getOrderIndex()); + prest.setString(8, model.getDesc()); + prest.setInt(9, model.isBottomLevel()); + prest.setString(10, model.getOwnerDept()); + prest.setString(11, model.getOwnerUser()); + prest.setString(12, model.getMilestone()); + prest.setInt(13, model.getExecType()); + prest.setString(14, model.getSystemName()); + prest.setString(15, model.getAWSProcessId()); + prest.setString(16, model.getDiagramUrl()); + prest.setString(17, model.getColor()); + prest.setString(18, model.getMethodCategory()); + prest.setString(19, model.getMethodId()); + prest.setDouble(20, model.getVersion()); + prest.setString(21, model.getVersionId()); + prest.setString(22, model.getFilePath() == null ? "" : model.getFilePath()); + prest.setString(23, model.getInput() == null ? "" : model.getInput()); + prest.setString(24, model.getOutput() == null ? "" : model.getOutput()); + // prest.setString(25, model.getHistoryMaxVersion()); + prest.setInt(25, UtilString.isEmpty(model.getHistoryMaxVersion()) ? 0 : Integer.parseInt(model.getHistoryMaxVersion())); + prest.setInt(26, model.isSystemFile() ? 1 : 0); + prest.setInt(27, model.isUse() ? 1 : 0); + prest.setString(28, model.getPlRid()); + prest.setInt(29, model.isPublish() ? 1 : 0); + prest.setString(30, model.getCreateUser()); + prest.setTimestamp(31, model.getCreateDate()); + prest.setString(32, model.getModifyUser()); + prest.setTimestamp(33, model.getModifyDate()); + prest.setLong(34, model.getViewCount()); + prest.setString(35, model.getDutyDept()); + prest.setString(36, model.getDutyUser()); + prest.setInt(37, model.isStop() ? 1 : 0); + prest.setInt(38, model.isApproval() ? 1 : 0); + prest.setString(39, model.getExt1()); + prest.setString(40, model.getExt2()); + prest.setString(41, model.getExt3()); + prest.setString(42, model.getExt4()); + if (null == model.getSecurityLevel()){ + prest.setInt(43, -1); + }else{ + prest.setInt(43, model.getSecurityLevel()); + } + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, prest, null); + } + return false; + } + + + /** + * 批量插入数据 + * + * @param list + * @return + */ + public boolean batchInsert(Connection conn, PreparedStatement prest, List list) { + if (list == null || list.size() == 0) { + return false; + } + try { + StringBuilder sql = new StringBuilder("INSERT INTO ").append(PALRepositoryModelImpl.DATABASE_ENTITY) + .append("(") + .append(PALRepositoryModelImpl.FIELD_UUID).append(",") + .append(PALRepositoryModelImpl.FIELD_WS_ID).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_NO).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_NAME).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_LEVEL).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_PARENT_ID).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_ORDERINDEX).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_DESC).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_IS_BOTTOM_LEVEL).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_RD).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_RP).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_M).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_EXEC_TYPE).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_SYSTEM_NAME).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_AWS_PID).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_DIAGRAM_URL).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_COLOR).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_CATEGORY).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_METHODID).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_VER).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_VERSION_UUID).append(",") + .append(PALRepositoryModelImpl.FIELD_FILE_PATH).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_INPUT).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_OUTPUT).append(",") + .append(PALRepositoryModelImpl.FIELD_HISTORYMAXVERSION).append(",") + .append(PALRepositoryModelImpl.FIELD_IS_SYSTEM_FILE).append(",") + .append(PALRepositoryModelImpl.FIELD_IS_USE).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_RID).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_ISPUBLISH).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_CREATEUSER).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_CREATEDATE).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_MODIFYUSER).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_MODIFYDATE).append(",") + .append(PALRepositoryModelImpl.FIELD_VIEWCOUNT).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_DUTY_DEPT).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_DUTY_PERSON).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_ISSTOP).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_ISAPPROVAL).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_EXT1).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_EXT2).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_EXT3).append(",") + .append(PALRepositoryModelImpl.FIELD_PL_EXT4).append(",") + .append(PALRepositoryModelImpl.FIELD_SECURITY_LEVEL).append(")") + .append(" VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); + prest = conn.prepareStatement(sql.toString(), ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (PALRepositoryModel model : list) { + prest.setString(1, model.getId()); + prest.setString(2, model.getWsId()); + prest.setString(3, model.getNo()); + prest.setString(4, model.getName()); + prest.setInt(5, model.getLevel()); + prest.setString(6, model.getParentId()); + prest.setInt(7, model.getOrderIndex()); + prest.setString(8, model.getDesc()); + prest.setInt(9, model.isBottomLevel()); + prest.setString(10, model.getOwnerDept()); + prest.setString(11, model.getOwnerUser()); + prest.setString(12, model.getMilestone()); + prest.setInt(13, model.getExecType()); + prest.setString(14, model.getSystemName()); + prest.setString(15, model.getAWSProcessId()); + prest.setString(16, model.getDiagramUrl()); + prest.setString(17, model.getColor()); + prest.setString(18, model.getMethodCategory()); + prest.setString(19, model.getMethodId()); + prest.setDouble(20, model.getVersion()); + prest.setString(21, model.getVersionId()); + prest.setString(22, model.getFilePath() == null ? "" : model.getFilePath()); + prest.setString(23, model.getInput() == null ? "" : model.getInput()); + prest.setString(24, model.getOutput() == null ? "" : model.getOutput()); + // prest.setString(25, model.getHistoryMaxVersion()); + prest.setInt(25, UtilString.isEmpty(model.getHistoryMaxVersion()) ? 0 : Integer.parseInt(model.getHistoryMaxVersion())); + prest.setInt(26, model.isSystemFile() ? 1 : 0); + prest.setInt(27, model.isUse() ? 1 : 0); + prest.setString(28, model.getPlRid()); + prest.setInt(29, model.isPublish() ? 1 : 0); + prest.setString(30, model.getCreateUser()); + prest.setTimestamp(31, model.getCreateDate()); + prest.setString(32, model.getModifyUser()); + prest.setTimestamp(33, model.getModifyDate()); + prest.setLong(34, model.getViewCount()); + prest.setString(35, model.getDutyDept()); + prest.setString(36, model.getDutyUser()); + prest.setInt(37, model.isStop() ? 1 : 0); + prest.setInt(38, model.isApproval() ? 1 : 0); + prest.setString(39, model.getExt1()); + prest.setString(40, model.getExt2()); + prest.setString(41, model.getExt3()); + prest.setString(42, model.getExt4()); + if (null == model.getSecurityLevel()){ + prest.setInt(43, -1); + }else{ + prest.setInt(43, model.getSecurityLevel()); + } + prest.addBatch(); + } + prest.executeBatch(); + return true; + } catch (SQLException e) { + e.printStackTrace(); + } + return false; + } + + /** + * 批量刷新缓存 + * @param list + */ + public void refreshCache(List list) { + if (list == null) { + return; + } + for (PALRepositoryModel model : list) { + PALRepositoryCache.getCache().put(model.getId(), model); + } + } + + /** + * 根据流程资产的id去拿他下面的所有流程 + * + * @param wsId + * @return + */ + public List getInstanceToList(String wsId) { + String sql = "select * from APP_ACT_COE_PAL_REPOSITORY where " + PALRepositoryModelImpl.FIELD_WS_ID + "=?"; + return DBSql.query(sql, new PALRespositoryModelMapper(), wsId); + } + + public PALRepositoryModel record2Model(ResultSet rs) throws SQLException { + PALRepositoryModelImpl model = new PALRepositoryModelImpl(); + model.setId(putString(rs.getString(PALRepositoryModelImpl.FIELD_UUID))); + model.setWsId(putString(rs.getString(PALRepositoryModelImpl.FIELD_WS_ID))); + model.setNo(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_NO))); + model.setName(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_NAME))); + model.setAWSProcessId(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_AWS_PID))); + model.setColor(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_COLOR))); + model.setDesc(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_DESC))); + model.setDiagramUrl(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_DIAGRAM_URL))); + model.setExecType(rs.getInt(PALRepositoryModelImpl.FIELD_PL_EXEC_TYPE)); + model.setBottomLevel(rs.getInt(PALRepositoryModelImpl.FIELD_PL_IS_BOTTOM_LEVEL)); + model.setLevel(rs.getInt(PALRepositoryModelImpl.FIELD_PL_LEVEL)); + model.setMilestone(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_M))); + model.setOrderIndex(rs.getInt(PALRepositoryModelImpl.FIELD_PL_ORDERINDEX)); + model.setParentId(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_PARENT_ID))); + model.setOwnerDept(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_RD))); + model.setOwnerUser(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_RP))); + model.setSystemName(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_SYSTEM_NAME))); + model.setMethodCategory(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_CATEGORY))); + model.setMethodId(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_METHODID))); + model.setVersion(rs.getDouble(PALRepositoryModelImpl.FIELD_PL_VER)); + model.setVersionId(putString(rs.getString(PALRepositoryModelImpl.FIELD_PL_VERSION_UUID))); + model.setUse(rs.getInt(PALRepositoryModelImpl.FIELD_IS_USE) == 1); + model.setSystemFile(rs.getInt(PALRepositoryModelImpl.FIELD_IS_SYSTEM_FILE) == 1); + model.setFilePath(rs.getString(PALRepositoryModelImpl.FIELD_FILE_PATH)); + model.setHistoryMaxVersion(rs.getInt(PALRepositoryModelImpl.FIELD_HISTORYMAXVERSION) + ""); + model.setInput(rs.getString(PALRepositoryModelImpl.FIELD_PL_INPUT)); + model.setOutput(rs.getString(PALRepositoryModelImpl.FIELD_PL_OUTPUT)); + model.setPlRid(rs.getString(PALRepositoryModelImpl.FIELD_PL_RID)); + model.setPublish(rs.getInt(PALRepositoryModelImpl.FIELD_PL_ISPUBLISH) == 1); + model.setStop(rs.getInt(PALRepositoryModelImpl.FIELD_PL_ISSTOP) == 1); + model.setApproval(rs.getInt(PALRepositoryModelImpl.FIELD_PL_ISAPPROVAL) == 1); + model.setCreateUser(rs.getString(PALRepositoryModelImpl.FIELD_PL_CREATEUSER)); + model.setCreateDate(rs.getTimestamp(PALRepositoryModelImpl.FIELD_PL_CREATEDATE)); + model.setModifyUser(rs.getString(PALRepositoryModelImpl.FIELD_PL_MODIFYUSER)); + model.setModifyDate(rs.getTimestamp(PALRepositoryModelImpl.FIELD_PL_MODIFYDATE)); + model.setViewCount(rs.getLong(PALRepositoryModelImpl.FIELD_VIEWCOUNT)); + model.setNewParentId(rs.getString(PALRepositoryModelImpl.FIELD_PL_PARENT_ID)); + model.setDutyDept(rs.getString(PALRepositoryModelImpl.FIELD_PL_DUTY_DEPT) == null ? "" : rs.getString(PALRepositoryModelImpl.FIELD_PL_DUTY_DEPT)); + model.setDutyUser(rs.getString(PALRepositoryModelImpl.FIELD_PL_DUTY_PERSON) == null ? "" : rs.getString(PALRepositoryModelImpl.FIELD_PL_DUTY_PERSON)); + model.setLockUser(rs.getString(PALRepositoryModelImpl.FIELD_PL_LOCKUSER)); + model.setPublishDate(rs.getTimestamp(PALRepositoryModelImpl.FIELD_PL_PUBLISHDATE)); + model.setChangeDate(rs.getTimestamp(PALRepositoryModelImpl.FIELD_PL_CHANGEDATE)); + model.setStopDate(rs.getTimestamp(PALRepositoryModelImpl.FIELD_PL_STOPDATE)); + model.setExt1(rs.getString(PALRepositoryModelImpl.FIELD_PL_EXT1)); + model.setExt2(rs.getString(PALRepositoryModelImpl.FIELD_PL_EXT2)); + model.setExt3(rs.getString(PALRepositoryModelImpl.FIELD_PL_EXT3)); + model.setExt4(rs.getString(PALRepositoryModelImpl.FIELD_PL_EXT4)); + //三员管理-密级 + model.setSecurityLevel(rs.getInt(PALRepositoryModelImpl.FIELD_SECURITY_LEVEL)); + return model; + } + + public String putString(String obj) { + if (obj == null) { + return ""; + } else { + return obj; + } + } + + @Override + public int update(PALRepositoryModel obj) { + PALRepositoryModel model = (PALRepositoryModel) obj; + String sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + + " set " + + PALRepositoryModelImpl.FIELD_WS_ID + "=?, " + + PALRepositoryModelImpl.FIELD_PL_NO + "=?, " + + PALRepositoryModelImpl.FIELD_PL_NAME + "=?, " + + PALRepositoryModelImpl.FIELD_PL_LEVEL + "=?, " + + PALRepositoryModelImpl.FIELD_PL_PARENT_ID + "=?, " + + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + "=?, " + + PALRepositoryModelImpl.FIELD_PL_DESC + "=?, " + + PALRepositoryModelImpl.FIELD_PL_IS_BOTTOM_LEVEL + "=?, " + + PALRepositoryModelImpl.FIELD_PL_RD + "=?, " + + PALRepositoryModelImpl.FIELD_PL_RP + "=?, " + + PALRepositoryModelImpl.FIELD_PL_M + "=?, " + + PALRepositoryModelImpl.FIELD_PL_EXEC_TYPE + "=?, " + + PALRepositoryModelImpl.FIELD_PL_SYSTEM_NAME + "=?, " + + PALRepositoryModelImpl.FIELD_PL_AWS_PID + "=?, " + + PALRepositoryModelImpl.FIELD_PL_DIAGRAM_URL + "=?, " + + PALRepositoryModelImpl.FIELD_PL_COLOR + "=?, " + + PALRepositoryModelImpl.FIELD_PL_CATEGORY + "=?, " + + PALRepositoryModelImpl.FIELD_PL_METHODID + "=?, " + + PALRepositoryModelImpl.FIELD_PL_VER + "=?, " + + PALRepositoryModelImpl.FIELD_PL_VERSION_UUID + "=?, " + + PALRepositoryModelImpl.FIELD_FILE_PATH + "=?, " + + PALRepositoryModelImpl.FIELD_IS_USE + "=?, " + + PALRepositoryModelImpl.FIELD_PL_INPUT + "=?, " + + PALRepositoryModelImpl.FIELD_PL_OUTPUT + "=? ," + + PALRepositoryModelImpl.FIELD_PL_ISPUBLISH + "=? ," + + PALRepositoryModelImpl.FIELD_PL_CREATEUSER + "=? ," + + PALRepositoryModelImpl.FIELD_PL_CREATEDATE + "=? ," + + PALRepositoryModelImpl.FIELD_PL_MODIFYUSER + "=? ," + + PALRepositoryModelImpl.FIELD_PL_MODIFYDATE + "=?, " + + PALRepositoryModelImpl.FIELD_VIEWCOUNT + "=?, " + + PALRepositoryModelImpl.FIELD_PL_DUTY_DEPT + "=?, " + + PALRepositoryModelImpl.FIELD_PL_DUTY_PERSON + "=?, " + + PALRepositoryModelImpl.FIELD_PL_LOCKUSER + "=?, " + + PALRepositoryModelImpl.FIELD_PL_ISSTOP + "=?, " + + PALRepositoryModelImpl.FIELD_PL_ISAPPROVAL + "=?, " + + PALRepositoryModelImpl.FIELD_PL_EXT1 + "=?, " + + PALRepositoryModelImpl.FIELD_PL_EXT2 + "=?, " + + PALRepositoryModelImpl.FIELD_PL_EXT3 + "=?, " + + PALRepositoryModelImpl.FIELD_PL_EXT4 + "=?," + + PALRepositoryModelImpl.FIELD_SECURITY_LEVEL +"=?" + + " where " + + PALRepositoryModelImpl.FIELD_UUID + "=?"; + String filePath = ""; + if (model.getFilePath() != null) { + filePath = model.getFilePath(); + } + String input = ""; + String out = ""; + if (model.getInput() != null) { + input = model.getInput(); + + } + if (model.getOutput() != null) { + out = model.getOutput(); + } + String plNo = ""; + if (model.getNo() != null) { + plNo = model.getNo(); + } + String name = ""; + if (model.getName() != null) { + name = model.getName(); + } + String parentId = ""; + if (model.getParentId() != null) { + parentId = model.getParentId(); + } + String desc = ""; + if (model.getDesc() != null) { + desc = model.getDesc(); + } + String plrd = ""; + if (model.getOwnerDept() != null) { + plrd = model.getOwnerDept(); + } + String plrp = ""; + if (model.getOwnerUser() != null) { + plrp = model.getOwnerUser(); + } + String createUser = ""; + if (model.getCreateUser() != null) { + createUser = model.getCreateUser(); + } + + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + Timestamp createDate = null; + if (model.getCreateDate() != null) { + createDate = model.getCreateDate(); + } else { + createDate = nowTime; + } + String modifyUser = ""; + if (model.getModifyUser() != null) { + modifyUser = model.getModifyUser(); + } + Timestamp modifyDate = null; + if (model.getModifyDate() != null) { + modifyDate = model.getModifyDate(); + } else { + modifyDate = nowTime; + } + String dutyDept = ""; + if (model.getDutyDept() != null) { + dutyDept = model.getDutyDept(); + } + String dutyUser = ""; + if (model.getDutyUser() != null) { + dutyUser = model.getDutyUser(); + } + String lockUser = ""; + if (model.getLockUser() != null) { + lockUser = model.getLockUser(); + } + Integer securityLevel = -1; + if (null != model.getSecurityLevel()){ + securityLevel = model.getSecurityLevel(); + } + Object[] args = { model.getWsId(), plNo, name, model.getLevel(), parentId, model.getOrderIndex(), desc, + model.isBottomLevel(), plrd, plrp, model.getMilestone(), model.getExecType(), + model.getSystemName().trim(), model.getAWSProcessId(), model.getDiagramUrl(), model.getColor(), + model.getMethodCategory(), model.getMethodId(), model.getVersion(), model.getVersionId(), filePath, + model.isUse() ? 1 : 0, input, out, model.isPublish() ? 1 : 0, createUser, createDate, modifyUser, + modifyDate, model.getViewCount(), dutyDept, dutyUser, lockUser, model.isStop() ? 1 : 0, + model.isApproval() ? 1 : 0, model.getExt1(), model.getExt2(), model.getExt3(), model.getExt4(), securityLevel, + model.getId() }; + int r = DBSql.update(sql, args); + if (r > 0) { + PALRepositoryCache.getCache().put(model.getId(), model); + } + return r; + } + + // 修改流程状态值 + public int updatePALRepositoryStatus(PALRepositoryModel model) { + PALRepositoryModelImpl plModel = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(model.getId()); + if (UtilString.isEmpty(model.getId()) || plModel == null) { + return -1; + } + String sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_IS_USE + "=?, " + PALRepositoryModelImpl.FIELD_PL_ISPUBLISH + "=?, " + PALRepositoryModelImpl.FIELD_PL_ISSTOP + "=?, " + PALRepositoryModelImpl.FIELD_PL_ISAPPROVAL + "=?, " + PALRepositoryModelImpl.FIELD_PL_EXT1 + "=?, " + PALRepositoryModelImpl.FIELD_PL_EXT2 + "=?, " + PALRepositoryModelImpl.FIELD_PL_EXT3 + "=?, " + PALRepositoryModelImpl.FIELD_PL_EXT4 + "=?, " + PALRepositoryModelImpl.FIELD_PL_MODIFYUSER + "=?, " + PALRepositoryModelImpl.FIELD_PL_MODIFYDATE + "=? where " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + Object[] args = { model.isUse() ? 1 : 0, model.isPublish() ? 1 : 0, model.isStop() ? 1 : 0, model.isApproval() ? 1 : 0, model.getExt1(), model.getExt2(), model.getExt3(), model.getExt4(), model.getModifyUser(), model.getModifyDate(), model.getId()}; + int r = DBSql.update(sql, args); + if (r > 0) { + plModel.setUse(model.isUse()); + plModel.setPublish(model.isPublish()); + plModel.setStop(model.isStop()); + plModel.setApproval(model.isApproval()); + plModel.setExt1(model.getExt1()); + plModel.setExt2(model.getExt2()); + plModel.setExt3(model.getExt3()); + plModel.setExt4(model.getExt4()); + plModel.setModifyDate(model.getModifyDate()); + plModel.setModifyUser(model.getModifyUser()); + PALRepositoryCache.getCache().put(model.getId(), plModel); + } + return r; + } + + /** + * 变更流程 + * @param model + * @return + */ + public int updatePALRepository(String uuid, String sql) { + int r = DBSql.update(sql); + if (r > 0) { + PALRepositoryModel model = getInstance(uuid); + PALRepositoryCache.getCache().put(model.getId(), model); + } + return r; + } + + /** + * 更新 + * 增加事务控制 + * @param obj + * @param conn + * @return + */ + public int updatePALRepositoryModel(PALRepositoryModel obj, Connection conn) { + PALRepositoryModel model = (PALRepositoryModel) obj; + String sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + + " set " + + PALRepositoryModelImpl.FIELD_WS_ID + "=?, " + + PALRepositoryModelImpl.FIELD_PL_NO + "=?, " + + PALRepositoryModelImpl.FIELD_PL_NAME + "=?, " + + PALRepositoryModelImpl.FIELD_PL_LEVEL + "=?, " + + PALRepositoryModelImpl.FIELD_PL_PARENT_ID + "=?, " + + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + "=?, " + + PALRepositoryModelImpl.FIELD_PL_DESC + "=?, " + + PALRepositoryModelImpl.FIELD_PL_IS_BOTTOM_LEVEL + "=?, " + + PALRepositoryModelImpl.FIELD_PL_RD + "=?, " + + PALRepositoryModelImpl.FIELD_PL_RP + "=?, " + + PALRepositoryModelImpl.FIELD_PL_M + "=?, " + + PALRepositoryModelImpl.FIELD_PL_EXEC_TYPE + "=?, " + + PALRepositoryModelImpl.FIELD_PL_SYSTEM_NAME + "=?, " + + PALRepositoryModelImpl.FIELD_PL_AWS_PID + "=?, " + + PALRepositoryModelImpl.FIELD_PL_DIAGRAM_URL + "=?, " + + PALRepositoryModelImpl.FIELD_PL_COLOR + "=?, " + + PALRepositoryModelImpl.FIELD_PL_CATEGORY + "=?, " + + PALRepositoryModelImpl.FIELD_PL_METHODID + "=?, " + + PALRepositoryModelImpl.FIELD_PL_VER + "=?, " + + PALRepositoryModelImpl.FIELD_PL_VERSION_UUID + "=?, " + + PALRepositoryModelImpl.FIELD_FILE_PATH + "=?, " + + PALRepositoryModelImpl.FIELD_IS_USE + "=?, " + + PALRepositoryModelImpl.FIELD_PL_INPUT + "=?, " + + PALRepositoryModelImpl.FIELD_PL_OUTPUT + "=? ," + + PALRepositoryModelImpl.FIELD_PL_ISPUBLISH + "=? ," + + PALRepositoryModelImpl.FIELD_PL_CREATEUSER + "=? ," + + PALRepositoryModelImpl.FIELD_PL_CREATEDATE + "=? ," + + PALRepositoryModelImpl.FIELD_PL_MODIFYUSER + "=? ," + + PALRepositoryModelImpl.FIELD_PL_MODIFYDATE + "=?, " + + PALRepositoryModelImpl.FIELD_VIEWCOUNT + "=?, " + + PALRepositoryModelImpl.FIELD_PL_DUTY_DEPT + "=?, " + + PALRepositoryModelImpl.FIELD_PL_DUTY_PERSON + "=?, " + + PALRepositoryModelImpl.FIELD_PL_LOCKUSER + "=?, " + + PALRepositoryModelImpl.FIELD_PL_ISSTOP + "=?, " + + PALRepositoryModelImpl.FIELD_PL_ISAPPROVAL + "=?, " + + PALRepositoryModelImpl.FIELD_PL_EXT1 + "=?, " + + PALRepositoryModelImpl.FIELD_PL_EXT2 + "=?, " + + PALRepositoryModelImpl.FIELD_PL_EXT3 + "=?, " + + PALRepositoryModelImpl.FIELD_PL_EXT4 + "=? " + + " where " + + PALRepositoryModelImpl.FIELD_UUID + "=?"; + String filePath = ""; + if (model.getFilePath() != null) { + filePath = model.getFilePath(); + } + String input = ""; + String out = ""; + if (model.getInput() != null) { + input = model.getInput(); + + } + if (model.getOutput() != null) { + out = model.getOutput(); + } + String plNo = ""; + if (model.getNo() != null) { + plNo = model.getNo(); + } + String name = ""; + if (model.getName() != null) { + name = model.getName(); + } + String parentId = ""; + if (model.getParentId() != null) { + parentId = model.getParentId(); + } + String desc = ""; + if (model.getDesc() != null) { + desc = model.getDesc(); + } + String plrd = ""; + if (model.getOwnerDept() != null) { + plrd = model.getOwnerDept(); + } + String plrp = ""; + if (model.getOwnerUser() != null) { + plrp = model.getOwnerUser(); + } + String createUser = ""; + if (model.getCreateUser() != null) { + createUser = model.getCreateUser(); + } + + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + Timestamp createDate = null; + if (model.getCreateDate() != null) { + createDate = model.getCreateDate(); + } else { + createDate = nowTime; + } + String modifyUser = ""; + if (model.getModifyUser() != null) { + modifyUser = model.getModifyUser(); + } + Timestamp modifyDate = null; + if (model.getModifyDate() != null) { + modifyDate = model.getModifyDate(); + } else { + modifyDate = nowTime; + } + String dutyDept = ""; + if (model.getDutyDept() != null) { + dutyDept = model.getDutyDept(); + } + String dutyUser = ""; + if (model.getDutyUser() != null) { + dutyUser = model.getDutyUser(); + } + String lockUser = ""; + if (model.getLockUser() != null) { + lockUser = model.getLockUser(); + } + Object[] args = { model.getWsId(), plNo, name, model.getLevel(), parentId, model.getOrderIndex(), desc, + model.isBottomLevel(), plrd, plrp, model.getMilestone(), model.getExecType(), + model.getSystemName().trim(), model.getAWSProcessId(), model.getDiagramUrl(), model.getColor(), + model.getMethodCategory(), model.getMethodId(), model.getVersion(), model.getVersionId(), filePath, + model.isUse() ? 1 : 0, input, out, model.isPublish() ? 1 : 0, createUser, createDate, modifyUser, + modifyDate, model.getViewCount(), dutyDept, dutyUser, lockUser, model.isStop() ? 1 : 0, + model.isApproval() ? 1 : 0, model.getExt1(), model.getExt2(), model.getExt3(), model.getExt4(), + model.getId() }; + int r = DBSql.update(conn, sql, args); + if (r > 0) { + PALRepositoryCache.getCache().put(model.getId(), model); + } + return r; + } + + /** + * 批量更新 + * @param models + * @return + */ + public boolean updates(List models) { + boolean flag = true; + Connection conn = DBSql.open(); + try { + conn.setAutoCommit(false); + for(PALRepositoryModel model : models) { + updatePALRepositoryModel(model, conn); + } + conn.commit(); + } catch (AWSDataAccessException e1) { + flag = false; + PALRepositoryCache.getCache().reload(); + try { + conn.rollback(); + } catch (SQLException e) { + e.printStackTrace(); + } + return flag; + } catch (SQLException e) { + e.printStackTrace(); + PALRepositoryCache.getCache().reload(); + flag = false; + } finally { + try { + conn.setAutoCommit(true); + } catch (SQLException e) { + e.printStackTrace(); + } + DBSql.close(conn); + } + return flag; + } + + /** + * 修改变更日期和变更人 + * @param uuid + * @param userId + * @return + */ + public int updateModifyUser(String uuid, String userId) { + PALRepositoryModelImpl plModel = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(uuid); + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + String sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_PL_MODIFYDATE + "=?," + PALRepositoryModelImpl.FIELD_PL_MODIFYUSER + "=? WHERE " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + Object[] args = {nowTime, userId, uuid }; + int r = DBSql.update(sql, args); + if (r > 0) { + plModel.setModifyDate(nowTime); + plModel.setModifyUser(userId); + PALRepositoryCache.getCache().put(uuid, plModel); + } + return r; + } + + /** + * 修改 lockUser字段值 锁定 解锁流程模型 + *@param lockUser 加锁人员 默认为空 + * */ + + public int updateLockUser(String uuid, String lockUser, String userId) { + PALRepositoryModelImpl plModel = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(uuid); + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + String sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_PL_LOCKUSER + "=?," + PALRepositoryModelImpl.FIELD_PL_MODIFYDATE + "=?," + PALRepositoryModelImpl.FIELD_PL_MODIFYUSER + "=? WHERE " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + Object[] args = { lockUser, nowTime, userId, uuid }; + int r = DBSql.update(sql, args); + if (r > 0) { + plModel.setLockUser(lockUser); + plModel.setModifyDate(nowTime);; + plModel.setModifyUser(userId); + PALRepositoryCache.getCache().put(uuid, plModel); + } + return r; + } + + /** + * 根据lockuser更新 + *@param lockUser 加锁人员 默认为空 + * */ + + public int updateLockUserByLockUser(String lockUser) { + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + String sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set LOCKUSER=''," + PALRepositoryModelImpl.FIELD_PL_MODIFYDATE + "=?," + PALRepositoryModelImpl.FIELD_PL_MODIFYUSER + "=? WHERE " + PALRepositoryModelImpl.FIELD_PL_LOCKUSER + "=?"; + Object[] args = { nowTime, lockUser, lockUser }; + int r = DBSql.update(sql, args); + if (r > 0) { + PALRepositoryCache.getCache().reload(); + } + return r; + } + + /** + * 流程发布时变更流程的状态和发布时间等 + * @param type 发布类型 N新发布 C变更 S停用 + * @param targetId 发布/变更后/停用的文件ID + * @param sourceId 变更时被变更的文件ID + * @param date 时间 + */ + public void updatePublishStatusAndDate(String type, String targetId, String sourceId, Timestamp date) { + String sql = null; + PALRepositoryModelImpl repositoryModel = null; + switch (type) { + case "N":// 新发布,变为发布状态 + repositoryModel = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(targetId); + if (repositoryModel == null) break; + sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_PL_ISPUBLISH + "=?, " + PALRepositoryModelImpl.FIELD_PL_ISSTOP + "=?, " + PALRepositoryModelImpl.FIELD_PL_PUBLISHDATE + "=? where " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + Object [] args1 = {1, 0, date, targetId}; + int r1 = DBSql.update(sql, args1); + if (r1 > 0) { + repositoryModel.setPublish(true); + repositoryModel.setStop(false); + repositoryModel.setPublishDate(date); + PALRepositoryCache.getCache().put(targetId, repositoryModel); + } + break; + case "C":// 变更 + repositoryModel = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(targetId); + if (repositoryModel == null) break; + sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_PL_ISPUBLISH + "=?, " + PALRepositoryModelImpl.FIELD_PL_ISSTOP + "=?, " + PALRepositoryModelImpl.FIELD_PL_PUBLISHDATE + "=?, " + PALRepositoryModelImpl.FIELD_PL_CHANGEDATE + "=? where " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + Object [] args2 = {1, 0, date, date, targetId};// target变为发布状态,停用状态初始为0 + int r2 = DBSql.update(sql, args2); + if (r2 > 0) { + repositoryModel.setPublish(true); + repositoryModel.setStop(false); + repositoryModel.setPublishDate(date); + repositoryModel.setChangeDate(date); + PALRepositoryCache.getCache().put(targetId, repositoryModel); + } + repositoryModel = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(sourceId); + if (repositoryModel == null) break; + sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_PL_ISPUBLISH + "=?, " + PALRepositoryModelImpl.FIELD_PL_ISSTOP + "=?, " + PALRepositoryModelImpl.FIELD_PL_STOPDATE + "=? where " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + Object [] args3 = {0, 1, date, sourceId};// source变为停用状态 + int r3 = DBSql.update(sql, args3); + if (r3 > 0) { + repositoryModel.setPublish(false); + repositoryModel.setStop(true); + repositoryModel.setStopDate(date); + PALRepositoryCache.getCache().put(sourceId, repositoryModel); + } + break; + default:// 停用 + repositoryModel = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(targetId); + if (repositoryModel == null) break; + sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_PL_ISPUBLISH + "=?, " + PALRepositoryModelImpl.FIELD_PL_ISSTOP + "=?, " + PALRepositoryModelImpl.FIELD_PL_STOPDATE + "=? where " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + Object [] args4 = {0, 1, date, targetId}; + int r4 = DBSql.update(sql, args4); + if (r4 > 0) { + repositoryModel.setPublish(false); + repositoryModel.setStop(true); + repositoryModel.setStopDate(date); + PALRepositoryCache.getCache().put(targetId, repositoryModel); + } + break; + } + } + + /** + * 根据pid获取 下级数据 获得使用中版本 + * + * @param pid + * @return + */ + public List getCoeProcessLevelByPid(String pid, String wsId) { + String sql = ""; + if (pid.length() < 36) { + sql = "select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_PL_PARENT_ID + "=? AND " + PALRepositoryModelImpl.FIELD_WS_ID + "=? AND " + PALRepositoryModelImpl.FIELD_IS_USE + "=1 ORDER BY " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"; + } else { + sql = "select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_PL_PARENT_ID + " in (" + "select r1.ID from " + PALRepositoryModelImpl.DATABASE_ENTITY + " r1, " + PALRepositoryModelImpl.DATABASE_ENTITY + " r2 where r2.ID=? and r1." + PALRepositoryModelImpl.FIELD_PL_VERSION_UUID + " = r2." + PALRepositoryModelImpl.FIELD_PL_VERSION_UUID + ")" + " AND " + PALRepositoryModelImpl.FIELD_WS_ID + "=? AND " + PALRepositoryModelImpl.FIELD_IS_USE + "=1 ORDER BY " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"; + } + return DBSql.query(sql, new PALRespositoryModelMapper(), new Object[] { pid, wsId }); + } + + /** + * 根据pid获取 下级数据 获得所有版本 + * + * @param pid + * @return + */ + public List getCoeProcessLevelAllByPid(String pid, String wsId) { + String sql = "select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_PL_PARENT_ID + "=? AND " + PALRepositoryModelImpl.FIELD_WS_ID + "=? ORDER BY " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"; + return DBSql.query(sql, new PALRespositoryModelMapper(), new Object[] { pid, wsId }); + } + + /** + * 根据name获取流程文件 + * + * @param name + * @return + */ + public List getCoeProcessLevelByName(String name, String wsId, String methodId) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + StringBuilder sql = new StringBuilder("select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_WS_ID + "='" + wsId + "' and " + PALRepositoryModelImpl.FIELD_PL_NAME + " like " + namelike + " and " + PALRepositoryModelImpl.FIELD_IS_USE + "='1' "); + + if (methodId != null && !"".equals(methodId)) { + sql.append(" and PLMETHODID = '" + methodId + "' "); + } + sql.append(" ORDER BY " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"); + return DBSql.query(sql.toString(), new PALRespositoryModelMapper()); + } + + /** + * 根据name获取流程文件 + * @param name + * @param wsId + * @param category + * @return + */ + public List getCoeProcessLevelByNameAndCategory(String name, String wsId, String category) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + StringBuilder sql = new StringBuilder("select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_WS_ID + "='" + wsId + "' and " + PALRepositoryModelImpl.FIELD_PL_NAME + " like " + namelike + " and " + PALRepositoryModelImpl.FIELD_IS_USE + "='1' "); + + if (category != null && !"".equals(category)) { + sql.append(" and PLCATEGORY = '" + category + "' "); + } + sql.append(" ORDER BY " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"); + return DBSql.query(sql.toString(), new PALRespositoryModelMapper()); + } + + /** + * 根据编号查询流程文件(当前使用版本) + * @param plno 流程编号 + * @param wsId + * @param methodId + * @return + */ + public List getCoEProcessModelByNum(String plno, String wsId, String methodId, String plCategory) { + Map param = new HashMap(); + StringBuilder sql = new StringBuilder("select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_PL_NO + "=:PLNO and " + PALRepositoryModelImpl.FIELD_IS_USE + "='1' "); + param.put("PLNO", plno); + if (!UtilString.isEmpty(wsId)) { + sql.append(" and WSID=:WSID"); + param.put("WSID", wsId); + } else { + String defaultWsId = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_DEFAULT_WSID); + if (!UtilString.isEmpty(defaultWsId)) { + param.put("WSID", defaultWsId); + } + } + if (!UtilString.isEmpty(methodId)) { + sql.append(" and PLMETHODID = :METHODID "); + param.put("METHODID", methodId); + } + if (!UtilString.isEmpty(plCategory)) { + sql.append(" and PLCATEGORY = :PLCATEGORY "); + param.put("PLCATEGORY", plCategory); + } + sql.append(" ORDER BY " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"); + return DBSql.query(sql.toString(), param, new PALRespositoryModelMapper()); + } + + /** + * 根据编号查询流程文件(当前使用版本) + * @param plno 流程编号 + * @param wsId + * @param methodId + * @return + */ + public List getCoEProcessModelByDutyDept(String deptId, String wsId, String methodId, String plCategory) { + Map param = new HashMap(); + StringBuilder sql = new StringBuilder("select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_PL_DUTY_DEPT + "=:DEPTID and " + PALRepositoryModelImpl.FIELD_IS_USE + "='1' "); + param.put("DEPTID", deptId); + if (!UtilString.isEmpty(wsId)) { + sql.append(" and WSID=:WSID"); + param.put("WSID", wsId); + } else { + String defaultWsId = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "defaultWsId"); + if (!UtilString.isEmpty(defaultWsId)) { + param.put("WSID", defaultWsId); + } + } + if (!UtilString.isEmpty(methodId)) { + sql.append(" and PLMETHODID = :METHODID "); + param.put("METHODID", methodId); + } + if (!UtilString.isEmpty(plCategory)) { + sql.append(" and PLCATEGORY = :PLCATEGORY "); + param.put("PLCATEGORY", plCategory); + } + sql.append(" ORDER BY " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"); + return DBSql.query(sql.toString(), param, new PALRespositoryModelMapper()); + } + + /** + * 根据关系字段查找 + * + * @param rid + * @return + */ + public List getCoeProcessLevelByRid(String rid) { + String sql = "select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_PL_RID + "=?"; + return DBSql.query(sql, new PALRespositoryModelMapper(), rid); + } + + /** + * 根据关系字段查找正在使用的版本 + * + * @param rid + * @return + */ + public List getCoeUseProcessLevelByRid(String rid) { + String sql = "select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_PL_RID + "=? AND " + PALRepositoryModelImpl.FIELD_IS_USE + "='1'"; + return DBSql.query(sql, new PALRespositoryModelMapper(), rid); + } + + /** + * 根据aws流程定义ID获取流程模型 + * @param awsProcessId + * @return + */ + public List getCoeProcessLevelByAWSProcessId(String awsProcessId) { + String sql = "SELECT * FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE " + PALRepositoryModelImpl.FIELD_PL_AWS_PID + "=? "; + return DBSql.query(sql, new PALRespositoryModelMapper(), new Object[] { awsProcessId }); + } + + /** + * 删除资产库时,删除资产库中相关表数据 + * @param wsId + * @return + * @author tanj + */ + public boolean deleteReleationDataByWsId(String wsId) { + boolean flag = true; + Connection conn = DBSql.open(); + try { + conn.setAutoCommit(false); + Object[] params = new Object[] { wsId }; + String deleteShapeCopySql = "DELETE FROM APP_ACT_COE_PAL_SHAPE_COPY WHERE PALREPOSITORYID IN (SELECT id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?)"; + DBSql.update(conn, deleteShapeCopySql, params); + String deleteShapePasteSql = "DELETE FROM APP_ACT_COE_PAL_SHAPE_PASTE WHERE PALREPOSITORYID IN (SELECT id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?)"; + DBSql.update(conn, deleteShapePasteSql, params); + String deleteShapeRelationSql = "DELETE FROM APP_ACT_COE_PAL_SHAPE_RLAT WHERE FILEID IN (SELECT id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?)"; + DBSql.update(conn, deleteShapeRelationSql, params); + String deleteUpfileSql = "DELETE FROM APP_ACT_COE_PAL_UPFILE WHERE PALREPOSITORYID IN (SELECT id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?)"; + DBSql.update(conn, deleteUpfileSql, params); + String deleteRepositoryPropertySql = "DELETE FROM APP_ACT_COE_PAL_PROP WHERE PLID IN (SELECT ID FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?)"; + DBSql.update(conn, deleteRepositoryPropertySql, params); + String deleteFileAttrSql = "DELETE FROM APP_ACT_COE_PAL_ATTR WHERE WSID=?"; + DBSql.update(conn, deleteFileAttrSql, params); + String deleteShapeAttrSql = "DELETE FROM APP_ACT_COE_PAL_SHAPE_ATTR WHERE WSID=?"; + DBSql.update(conn, deleteShapeAttrSql, params); + // 判断数据库类型 sqlServer用“+”连接字符串 + String deletePropertySql = "DELETE FROM APP_ACT_COE_PROP WHERE PROPERTYKEY IN (SELECT CONCAT(id, '_attr') AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?)" + + " OR PROPERTYKEY IN (SELECT CONCAT('mark_', PLRID) AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT CONCAT('link_', PLRID) AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT CONCAT('link_app_', PLRID) AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT CONCAT('use_', PLRID) AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) "; + if (AWSServerConf.getDatabaseProvider().equals("sqlserver")) { + deletePropertySql = "DELETE FROM APP_ACT_COE_PROP WHERE PROPERTYKEY IN (SELECT id+'_attr' AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT 'mark_'+PLRID AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT 'link_'+PLRID AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT 'link_app_'+PLRID AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT 'use_'+PLRID AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) "; + } + DBSql.update(conn, deletePropertySql, new Object[] { wsId, wsId, wsId, wsId, wsId }); + String deleteRepositoryRemoveSql = "DELETE FROM APP_ACT_COE_PAL_REPO_R WHERE WSID=?"; + DBSql.update(conn, deleteRepositoryRemoveSql, params); + String deleteRepositoryRemoveInfoSql = "DELETE FROM APP_ACT_COE_PAL_REPO_R_INFO WHERE WSID=?"; + DBSql.update(conn, deleteRepositoryRemoveInfoSql, params); + String deleteCorrelateSql = "DELETE FROM APP_ACT_COE_PAL_CORRELATE WHERE WSID=?"; + DBSql.update(conn, deleteCorrelateSql, params); + String deleteSpecialAttrSql = "DELETE FROM APP_ACT_COE_PAL_SPCL_PROP WHERE WSID=?"; + DBSql.update(conn, deleteSpecialAttrSql, params); + String deleteBackupSql = "DELETE FROM APP_ACT_COE_PAL_BACKUP WHERE WSID=?"; + DBSql.update(conn, deleteBackupSql, params); + } catch (SQLException e) { + e.printStackTrace(); + flag = false; + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + flag = false; + } + } finally { + try { + conn.setAutoCommit(true); + } catch (SQLException e) { + e.printStackTrace(); + flag = false; + } + DBSql.close(conn); + } + return flag; + } + + // 递归删除该节点下的子节点 + public Map removeTreeNodes(String uuid, String wsId) { + StringBuffer ids = new StringBuffer(); + ids.append(getChildNodes(uuid, wsId, ids.toString())); + ids.append(uuid); + List list = findFilePath(ids.toString()); + boolean f = removeProcessLevel(ids.toString()); + Map map = new HashMap(); + if (f) { + if (ids.indexOf(",") > 0) { + String strs[] = ids.toString().split(","); + for (String str : strs) { + PALRepositoryCache.getCache().remove(str); + CoeDesignerShapeCache.getCache().remove(str);// 移除缓存中文件对应的图形 + // 删除文件对象流程团队中的权限 + boolean isInstalled = AppsAPIManager.getInstance().isInstalled("com.actionsoft.apps.coe.teamwork"); + if (isInstalled) { + TeamPerm teamPerm = new TeamPerm(); + teamPerm.deleteByResourceId(str); + } + } + } else { + PALRepositoryCache.getCache().remove(ids.toString()); + CoeDesignerShapeCache.getCache().remove(ids.toString());// 移除缓存中文件对应的图形 + boolean isInstalled = AppsAPIManager.getInstance().isInstalled("com.actionsoft.apps.coe.teamwork"); + if (isInstalled) { + TeamPerm teamPerm = new TeamPerm(); + teamPerm.deleteByResourceId(ids.toString()); + } + } + map.put("list", list); + map.put("result", "1"); + } else { + map.put("result", "-1"); + } + return map; + } + + // 递归删除该节点下的子节点 + public Map removeTreeNodes(String ids, String uuid, String wsId) { + List filePathList = findFilePath(ids); + boolean f = removeProcessLevel(ids.toString()); + Map map = new HashMap(); + if (f) { + map.put("list", filePathList); + map.put("result", "1"); + } else { + map.put("result", "-1"); + } + return map; + } + + private List findFilePath(String ids) { + List list = null; + if (ids.indexOf(",") > 0) { + String strs[] = ids.split(","); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < strs.length; i++) { + sb.append("'").append(strs[i]).append("',"); + } + String s = sb.toString(); + s = s.substring(0, s.lastIndexOf(",")); + String sql = "select " + PALRepositoryModelImpl.FIELD_FILE_PATH + " from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_UUID + " in (" + s + ")"; + list = DBSql.query(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }); + } else { + String sql = "select " + PALRepositoryModelImpl.FIELD_FILE_PATH + " from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_UUID + " in ('" + ids + "')"; + list = DBSql.query(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }); + } + return list; + } + + // 递归找得到所有子节点 + /** + * @param pid + * @param wsId + * @param str + * @return + */ + public String getChildNodes(String pid, String wsId, String str) { + StringBuffer result = new StringBuffer(); + PALRepositoryModel model = (PALRepositoryModel) getInstance(pid); + if (model != null) { + if (model.isBottomLevel() == 0) { + List childrenNodes = getCoeProcessLevelAllByPid(pid, wsId); + for (PALRepositoryModel coeProcessLevelModel : childrenNodes) { + result.append(coeProcessLevelModel.getId()).append(","); + result.append(getChildNodes(coeProcessLevelModel.getId(), wsId, result.toString())); + } + } + } + return result.toString(); + } + + // 批量删除子节点 + public boolean removeProcessLevel(String ids) { + boolean completeSuccess = false; + StringBuffer delFiles = new StringBuffer(); + if (!ids.equals("")) { + UtilString ustr = new UtilString(ids); + List v = ustr.split(","); + java.sql.Connection conn = DBSql.open(); + PreparedStatement ps = null; + java.sql.ResultSet rset = null; + try { + conn.setAutoCommit(false); + String sql = "DELETE FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + ps = conn.prepareStatement(sql); + for (int i = 0; i < v.size(); i++) { + String id = (String) v.get(i); + ps.setString(1, id); + ps.addBatch(); + PALRepositoryCache.getCache().remove(id); + } + int[] results = ps.executeBatch(); + for (int i = 0; i < results.length; i++) { + if ((results[i] >= 0) || (results[i] == PreparedStatement.SUCCESS_NO_INFO)) { + completeSuccess = true; + } + } + if (completeSuccess) { + conn.commit(); + } else { + conn.rollback(); + PALRepositoryCache.getCache().reload(); + } + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, ps, rset); + } + if (completeSuccess) {// 删除文件 + UtilString utilS = new UtilString(delFiles.toString()); + List split = utilS.split(","); + for (String pathname : split) { + CoeFile coeFile = new CoeFile(); + coeFile.removeFileOfPath(pathname); + } + } + } + return completeSuccess; + } + + /** + * 删除流程版本 + * + * @param id 要删除的版本ID + * @return + */ + public String deletePalRepositoryVersion(String id) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(id); + String selectSql = "SELECT id FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE PLVERSIONID=? AND ISUSE=1"; + String usedId = null; // 该流程正在使用的版本ID + List usedIds = DBSql.query(selectSql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }, new Object[] { model.getVersionId() }); + if (usedIds != null && usedIds.size() > 0) { + usedId = usedIds.get(0); + } + if (usedId != null && !usedId.equals(id)) { + String updateSql = "UPDATE APP_ACT_COE_PAL_REPOSITORY SET PLPARENTID=? WHERE PLPARENTID=?"; + int r = DBSql.update(updateSql, new Object[] { usedId, id }); + if (r > 0) { + // 获取该版本的所有子流程 + Iterator list = PALRepositoryCache.getByPid(model.getWsId(), id); + // 将子流程的pid改为改流程正在使用的版本ID + while (list.hasNext()) { + PALRepositoryModelImpl childModel = (PALRepositoryModelImpl) list.next(); + childModel.setParentId(usedId); + PALRepositoryCache.getCache().put(childModel.getId(), childModel); + } + } + } + // 删除该流程版本 + String delSql = "delete from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where id=?"; + int result = DBSql.update(delSql, new Object[] { id }); + if (result > 0) { + PALRepositoryCache.getCache().remove(id); + } + return result + ""; + } + + // 递归更新该节点下的所有层级 + public String getChildNodesAndUpdateLevel(PALRepositoryModel model) { + StringBuffer error = new StringBuffer(); + if (model.isBottomLevel() == 0) {// 高层流程 + List childrenNodes = getCoeProcessLevelByPid(model.getId(), model.getWsId()); + for (PALRepositoryModel coeProcessLevelModel : childrenNodes) { + ((PALRepositoryModelImpl) coeProcessLevelModel).setLevel(model.getLevel() + 1); + try { + // 更新相应层级 + this.update(coeProcessLevelModel); + error.append("1"); + } catch (Exception e) { + error.append("-1"); + e.printStackTrace(); + } + getChildNodesAndUpdateLevel(coeProcessLevelModel); + } + } + if (error.toString().indexOf("-1") > -1) { + return "-1"; + } else { + return "1"; + } + } + + /** + * 获取流程清单分页数据 + * + * @param start + * @param limit + * @return + */ + public List getCoeProcessLevelModelRecodes(int start, int limit, String wsId, String conditions) { + return getCoeProcessLevelModelRecodes(start, limit, PALRepositoryModelImpl.FIELD_PL_LEVEL, true, false, wsId, conditions); + } + + /** + * 获取总记录数 + * + * @param start + * @param limit + * @return + */ + public int getSumRecodes(String wsId, String cond) { + List args = new ArrayList(); + String sql = "select count(*) as c from " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE " + PALRepositoryModelImpl.FIELD_WS_ID + "='" + wsId + "' " + getSqlByConditions(cond, args); + int countData = DBSql.getInt(sql, args.toArray()); + return countData; + } + + /** + * 获取流程清单数据 + * + * @param start + * @param limit + * @param sortFiled + * @param upOrDown 是否升序(默认升序) + * @param isPaging 是否分页 + * @return + */ + public List getCoeProcessLevelModelRecodes(int start, int limit, String sortFiled, boolean isUp, boolean isPaging, String wsId, String conditions) { + List list = new ArrayList(); + String upOrDown = "ASC"; + try { + if (!isUp) { + upOrDown = "DESC"; + } + List args = new ArrayList(); + String sql = getSql(sortFiled, wsId, conditions, upOrDown, args); + if (isPaging) { + sql = SQLPagination.getPaginitionSQL(sql, start, limit); + } + list = DBSql.query(sql.toString(), new PALRespositoryModelMapper(), args.toArray()); + } catch (Exception sqle) { + sqle.printStackTrace(); + } + List newList = CoeProcessLevelUtil.getListByProcessLevelPlNo(list); + return newList; + } + + public String getSql(String sortFiled, String wsId, String conditions, String upOrDown, List args) { + String sql = "SELECT * FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE " + PALRepositoryModelImpl.FIELD_WS_ID + "='" + wsId + "' " + getSqlByConditions(conditions, args) + " and " + PALRepositoryModelImpl.FIELD_IS_USE + "=1 and " + PALRepositoryModelImpl.FIELD_PL_CATEGORY + "='process' ORDER BY " + sortFiled + " " + upOrDown + " , " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"; + return sql; + } + + private String validateJson(String name) { + return name == null ? "" : name; + } + + public String getSqlByConditions(String conditions, List args) { + StringBuffer sql = new StringBuffer(); + if (!conditions.equals("")) { + JSONObject json = JSONObject.parseObject(conditions); + String name = validateJson(json.getString("name")).toLowerCase(); + String plRd = validateJson(json.getString("plRd")); + String plRp = validateJson(json.getString("plRp")); + String plColor = validateJson(json.getString("plColor")); + int plM = json.getInteger("plM"); + int execType = json.getInteger("execType"); + String plevel = validateJson(json.getString("plLevel")); + String plNodeId = validateJson(json.getString("plNodeId")); + String wsId =validateJson( json.getString("wsId")); + String dutyDept = validateJson(json.getString("dutyDept")); + String dutyPerson =validateJson( json.getString("dutyPerson")); + String namelike = ""; + + if (!name.equals("")) { + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql.append(" AND LOWER(" + PALRepositoryModelImpl.FIELD_PL_NAME).append(") like " + namelike); + } + if (!plRd.equals("")) { + sql.append(" AND " + PALRepositoryModelImpl.FIELD_PL_RD + " IN (SELECT DISTINCT(RELATIONSHAPEID) FROM APP_ACT_COE_PAL_SHAPE_RLAT WHERE RELATIONSHAPETEXT LIKE '%" + plRd + "%' AND ATTRID = 'plRD')"); + } + if (!plRp.equals("")) { + sql.append(" AND " + PALRepositoryModelImpl.FIELD_PL_RP + " IN (SELECT DISTINCT(RELATIONSHAPEID) FROM APP_ACT_COE_PAL_SHAPE_RLAT WHERE RELATIONSHAPETEXT LIKE '%" + plRp + "%' AND ATTRID = 'plRP')"); + } + if (!plColor.equals("") && !plColor.equals("-1")) { + sql.append(" AND " + PALRepositoryModelImpl.FIELD_PL_COLOR).append(" = '").append(plColor).append("'"); + } + if (plM != -1) { + if (AWSServerConf.isPostgreSQL()) { + sql.append(" AND " + PALRepositoryModelImpl.FIELD_PL_M).append(" = '").append(plM).append("'"); + } else { + sql.append(" AND " + PALRepositoryModelImpl.FIELD_PL_M).append(" = ").append(plM).append(""); + } + } + if (execType != -1) { + sql.append(" AND " + PALRepositoryModelImpl.FIELD_PL_EXEC_TYPE).append(" = ").append(execType).append(""); + } + if (!plevel.equals("-1") && !plevel.equals("")) { + int level = Integer.parseInt(plevel); + sql.append(" AND " + PALRepositoryModelImpl.FIELD_PL_IS_BOTTOM_LEVEL).append(" = ").append(level).append(""); + } + if (!plNodeId.equals("") && !wsId.equals("")) { + List list = new ArrayList(); + PALRepositoryQueryAPIManager.getInstance().getAllUsedPalRepositoryModelsByPid(wsId, plNodeId, list); + StringBuffer oldIds = new StringBuffer(); + oldIds.append(",'").append(plNodeId).append("'"); + for (PALRepositoryModel model : list) { + oldIds.append(",'").append(model.getId()).append("'"); + } + String ids = oldIds.toString(); + ids = ids.substring(ids.indexOf(",") + 1); + sql.append(" AND " + PALRepositoryModelImpl.FIELD_UUID).append(" in (").append(ids).append(")"); + } + if (!UtilString.isEmpty(dutyDept)) { + sql.append(" AND " + PALRepositoryModelImpl.FIELD_PL_DUTY_DEPT).append(" = '").append(dutyDept).append("' "); + } + if (!UtilString.isEmpty(dutyPerson)) { + sql.append(" AND " + PALRepositoryModelImpl.FIELD_PL_DUTY_PERSON).append(" = '").append(dutyPerson).append("' "); + } + } + return sql.toString(); + } + + public int getMaxLevel() { + String sql = "select max(" + PALRepositoryModelImpl.FIELD_PL_LEVEL + ") as c from " + PALRepositoryModelImpl.DATABASE_ENTITY; + int maxLevel = DBSql.getInt(sql, "c"); + return maxLevel; + + } + + // 获取该空间下的最大分级 + public int getMaxLevel(String wsId) { + String sql = "select max(" + PALRepositoryModelImpl.FIELD_PL_LEVEL + ") as c from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_WS_ID + " = '" + wsId + "'"; + int maxLevel = DBSql.getInt(sql, "c"); + return maxLevel; + } + + public int getManLevelByWsId(String wsId) { + String sql = "SELECT MAX(" + PALRepositoryModelImpl.FIELD_PL_LEVEL + ") AS c FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE " + PALRepositoryModelImpl.FIELD_WS_ID + " = :wsId "; + Map paraMap = new HashMap(); + paraMap.put("wsId", wsId); + return DBSql.getInt(sql, "c", paraMap); + } + + public int getChildrenIndex(String id) { + PALRepositoryModel model = (PALRepositoryModel) getInstance(id); + List list = getCoeProcessLevelByPid(model.getParentId(), model.getWsId()); + for (int i = 0; i < list.size(); i++) { + PALRepositoryModel m = list.get(i); + if (m.getId() == model.getId()) { + return i; + } + } + return 0; + } + + public PALRepositoryModel getChildrenModelByIndex(String id, int idx) { + PALRepositoryModel model = (PALRepositoryModel) getInstance(id); + List list = getCoeProcessLevelByPid(model.getParentId(), model.getWsId()); + for (int i = 0; i < list.size(); i++) { + if (i == idx) { + PALRepositoryModel m = list.get(i); + return m; + } + } + return null; + } + + /** + * 获取文件的下级文件的最大orderIndex + * + * @param palId + * @return + * @author zhangming + */ + public int getChildrenMaxOrderIndex(String palId) { + String sql = "SELECT MAX(PLORDERINDEX) AS orderIndex FROM APP_ACT_COE_PAL_REPOSITORY WHERE PLPARENTID IN " + "(SELECT r1.id FROM APP_ACT_COE_PAL_REPOSITORY r1, APP_ACT_COE_PAL_REPOSITORY r2 WHERE r1.PLVERSIONID = r2.PLVERSIONID AND r2.id='" + palId + "')" + " OR PLPARENTID = '" + palId + "'"; + int maxOrderIndex = DBSql.getInt(sql, "orderIndex"); + return maxOrderIndex; + } + + /** + * 获取文件的下级文件的最大orderIndex + * 在不同的资产库根节点(palId)都相同,增加资产库避免统计时错误 + * @param palId + * @param wsId + * @return + * @author sunlh + */ + public int getChildrenMaxOrderIndexByPidAndWsId(String palId, String wsId) { + String sql = "SELECT MAX(PLORDERINDEX) AS orderIndex FROM APP_ACT_COE_PAL_REPOSITORY WHERE (PLPARENTID IN " + "(SELECT r1.id FROM APP_ACT_COE_PAL_REPOSITORY r1, APP_ACT_COE_PAL_REPOSITORY r2 WHERE r1.PLVERSIONID = r2.PLVERSIONID AND r2.id='" + palId + "')" + " OR PLPARENTID = '" + palId + "') AND wsid='" + wsId +"'"; + int maxOrderIndex = DBSql.getInt(sql, "orderIndex"); + return maxOrderIndex; + } + + /** + * 获取该空间下的所有流程分级 + * + * @param wsId + * @return + */ + public List getModels(String wsId) { + List list = PALMethodCache.getPALMethodList(); + String[] cates = new String[list.size()]; + list.toArray(cates); + return getModels(wsId, cates, false); + } + + /** + * 获取流程分类下的所有流程分级 + * + * @param wsId + * @return + */ + public List getModelsOfPorcess(String wsId) { + String[] array = { "process" }; + return getModels(wsId, array, false); + } + + /** + * 获取该空间下所有流程分级-显示状态 + * + * @param wsId + * @return + */ + public List getModels(String wsId, String[] categories, boolean isUse) { + StringBuffer sql = new StringBuffer(); + StringBuffer tempCate = new StringBuffer(); + sql.append("SELECT * FROM ").append(PALRepositoryModelImpl.DATABASE_ENTITY).append(" WHERE ").append(PALRepositoryModelImpl.FIELD_WS_ID).append("= '").append(wsId).append("'"); + /* for (int i = 0, size = categories.length; i < size; i++) { if (i == size - 1) { tempCate.append(" and ").append(PALRepositoryModel .FIELD_PL_CATEGORY ).append("='").append(categories[i]).append("'"); break; } tempCate .append(" ").append(PALRepositoryModelImpl.FIELD_PL_CATEGORY ).append("='").append(categories[i]).append("' or "); } */ + sql.append(tempCate.toString()); + if (isUse) { + sql.append(" and ").append(PALRepositoryModelImpl.FIELD_IS_USE).append("=1 "); + } + sql.append(" ORDER BY ").append(PALRepositoryModelImpl.FIELD_PL_ORDERINDEX).append(" ASC"); + + // sql.append(" and PLMETHODID<>'default' ORDER BY ").append(PALRepositoryModelImpl.FIELD_PL_ORDERINDEX).append(" ASC"); + return DBSql.query(sql.toString(), new PALRespositoryModelMapper()); + } + + public List getModels(String wsId, String pid) { + String sql = "SELECT * FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE " + PALRepositoryModelImpl.FIELD_WS_ID + "= '" + wsId + "' AND " + PALRepositoryModelImpl.FIELD_PL_PARENT_ID + "='" + pid + "' ORDER BY " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + public List getModels(String wsId, String sort, int level, String pid) { + String sql; + if (pid.length() < 36) { + sql = "SELECT * FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE " + PALRepositoryModelImpl.FIELD_WS_ID + "= '" + wsId + "' AND " + PALRepositoryModelImpl.FIELD_PL_LEVEL + "= " + level + " AND " + PALRepositoryModelImpl.FIELD_PL_PARENT_ID + "='" + pid + "' ORDER BY " + sort + ", " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"; + } else { + sql = "SELECT * FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE " + PALRepositoryModelImpl.FIELD_WS_ID + "= '" + wsId + "'" + " AND " + PALRepositoryModelImpl.FIELD_PL_PARENT_ID + " IN (" + " SELECT r1.ID FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " r1, " + PALRepositoryModelImpl.DATABASE_ENTITY + " r2 WHERE r2.ID = '" + pid + "' AND r1.PLVERSIONID = r2.PLVERSIONID)" + " ORDER BY " + sort + ", " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"; + } + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 获取模型中的数据 + * @param wsId + * @param conditions + * @return + * @author tanj + */ + public List getArrayModels(String wsId, String conditions) { + List args = new ArrayList(); + String sql = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getSql(PALRepositoryModelImpl.FIELD_PL_LEVEL, wsId, conditions, "ASC", args); + return DBSql.query(sql, new PALRespositoryModelMapper(), args.toArray()); + } + + // 获取所有模型 + public Map getALLModels(String wsId, String conditions) { + Map map = new HashMap(); + String sql = ""; + List args = new ArrayList(); + sql = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getSql(PALRepositoryModelImpl.FIELD_PL_LEVEL, wsId, conditions, "ASC", args); + int i = 0; + List models = DBSql.query(sql, new PALRespositoryModelMapper(), args.toArray()); + List newList = CoeProcessLevelUtil.getListByProcessLevelPlNo(models); // 转化排序list + for (PALRepositoryModel model : newList) { + List cells = getModelsToList(model, i, wsId); + map.put(i, cells); + i++; + } + return map; + } + + public List getModelsToList(PALRepositoryModel model, int ii, String wsId) { + List filedList = new ArrayList(); + String relationType = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_RELATION_TYPE); + + String plNo = CoeProcessLevelUtil.getProcessLevelNoByUUId(model.getId(), wsId); + // filedList.add(plNo); + // filedList.add(model.getPlName()); + int maxLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getMaxLevel(wsId); + filedList.add(I18nRes.findValue(CoEConstant.APP_ID, model.getMethodId())); + for (int i = 1; i <= maxLevel; i++) { + if (i == model.getLevel()) { + filedList.add((plNo.length() == 1 ? "" : plNo) + " " + I18nRes.findValue(CoEConstant.APP_ID, model.getName()) + "|"); + } else { + filedList.add(""); + } + } + filedList.add(""); + // String deptId = model.getPlRd(); + // String name = ""; + // if (!deptId.equals("")) { + // String[] deptIds = deptId.split(" "); + // for (int i = 0; i < deptIds.length; i++) { + // DepartmentModel deptModel = (DepartmentModel) + // DepartmentCache.getModel(deptIds[i]); + // if (deptModel != null) { + // name += deptModel.getDepartmentName() + " "; + // } + // } + // } + String dutyDept = model.getDutyDept(); + String dutyDeptName = ""; + if (!UtilString.isEmpty(dutyDept)) { + if (SDK.getORGAPI().getDepartmentById(dutyDept) != null) { + dutyDeptName = SDK.getORGAPI().getDepartmentById(dutyDept).getName(); + } + } + String dutyPerson = model.getDutyUser(); + String dutyPersonName = UtilString.isEmpty(dutyPerson) ? "" : SDK.getORGAPI().getUserAliasNames(dutyPerson); + if ("org".equals(relationType)) { + filedList.add(model.getOwnerDept()); + filedList.add(model.getOwnerUser()); + } else if ("address".equals(relationType)) { + filedList.add(dutyDeptName); + filedList.add(dutyPersonName); + } else { + filedList.add(model.getOwnerDept()); + filedList.add(model.getOwnerUser()); + } + filedList.add(CoeProcessLevelUtil.getPlM(model.getMilestone())); + filedList.add(CoeProcessLevelUtil.getPlExecType(model.getExecType())); + // filedList.add(CoeProcessLevelUtil.getSystemName(model.getSystemName())); + filedList.add(model.getColor()); + filedList.add(model.getId()); + + return filedList; + } + + public List getALLModelsShowFields(String wsId) { + List filedList = new ArrayList(); + int maxLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getMaxLevel(wsId); + // filedList.add("编\n号"); + // filedList.add("标题"); + for (int i = 0; i <= maxLevel; i++) { + String level = Number2ChineseNumUtil.convertChineseStr(String.valueOf(i)); + if (i == 0) { + filedList.add(getTitleName(I18nRes.findValue(CoEConstant.APP_ID, "流程分类"))); + } else { + + filedList.add("\n" + I18nRes.findValue(CoEConstant.APP_ID, level) + getTitleName(I18nRes.findValue(CoEConstant.APP_ID, "级流程"))); + } + } + + filedList.add(""); + filedList.add(getTitleName(I18nRes.findValue(CoEConstant.APP_ID, "责任部门"))); + filedList.add(getTitleName(I18nRes.findValue(CoEConstant.APP_ID, "责任人"))); + filedList.add(getTitleName(I18nRes.findValue(CoEConstant.APP_ID, "里程碑"))); + filedList.add(getTitleName(I18nRes.findValue(CoEConstant.APP_ID, "执行方式"))); + // filedList.add(getTitleName(I18nRes.findValue(CoEConstant.APP_ID, "系统名称"))); + return filedList; + } + + private static String getTitleName(String title) { + if (I18nRes.getUserLanguage().equals("en")) { + return title; + } else { + StringBuffer sb = new StringBuffer(); + String[] split = title.split(""); + for (int i = 0; i < split.length; i++) { + sb.append(split[i] + "\n"); + } + return sb.toString(); + } + } + + // 获得分组信息 + public List getGroupModel(String wsId) { + String sql = "SELECT * FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE " + PALRepositoryModelImpl.FIELD_WS_ID + "= '" + wsId + "' ORDER BY " + PALRepositoryModelImpl.FIELD_PL_PARENT_ID + ", " + PALRepositoryModelImpl.FIELD_PL_LEVEL + " ASC"; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 通过type 类型返回相应的统计数据 + * + * @param projectUUID + * @return + */ + public String getPlPieData(final String type, String wsId, String condition) { + java.sql.Connection conn = null; + java.sql.Statement stmt = null; + java.sql.ResultSet rset = null; + List args = new ArrayList(); + String sql = getSqlByType(type, wsId, condition, args); + final String fieldName = getField(type); + Map flotDataMap = new HashMap(); + List flotData = new ArrayList(); + flotDataMap.put("flotDataMap", flotData); + if (!sql.equals("")) { + flotData = DBSql.query(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map result = new HashMap(); + String name = getShowName(type, rs, fieldName); + result.put("label", name + "," + rs.getInt("coun") + ""); + result.put("data", rs.getInt("coun")); + return result; + } + }, args.toArray()); + } + if (flotData.size() == 0) { + Map flotItem = new HashMap(); + flotItem.put("label", ""); + flotItem.put("data", 1); + flotData.add(flotItem); + } + return JSONObject.parseObject(JSON.toJSONString(flotDataMap)).get("flotDataMap").toString(); + } + + /** + * 通过type类型返回相应的统计数据 + * + * @param projectUUID + * @return + */ + public Map>> getProcessReportCount(final String type, String wsId, String condition) { + java.sql.Connection conn = null; + java.sql.Statement stmt = null; + java.sql.ResultSet rset = null; + List args = new ArrayList(); + String sql = getSqlByType(type, wsId, condition, args); + final String fieldName = getField(type); + Map>> flotDataMap = new HashMap(); + List> flotData = new ArrayList(); + if (!sql.equals("")) { + flotData = DBSql.query(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map result = new HashMap(); + String name = getShowName(type, rs, fieldName); + result.put("value", rs.getInt("coun")); + result.put("name", name); + return result; + } + }, args.toArray()); + } + if (flotData.size() == 0) { + Map flotItem = new HashMap(); + flotItem.put("name", I18nRes.findValue(CoEConstant.APP_ID, "无数据")); + flotItem.put("data", 1); + flotData.add(flotItem); + } + flotDataMap.put("flotDataMap", flotData); + return flotDataMap; + } + + private String getField(String type) { + String fieldName = ""; + if (type.equals(CoeProcessLevelConstant.PLM)) { // 按里程碑 + fieldName = "PM"; + } else if (type.equals(CoeProcessLevelConstant.PLISBOTTOM)) { // 层级 + fieldName = "PLISBOTTOMLEVEL"; + } else if (type.equals(CoeProcessLevelConstant.PLCOLOR)) { // 颜色标记 + fieldName = "PLCOLOR"; + } else { + fieldName = "PLEXECTYPE"; // 按执行方式 + } + return fieldName; + } + + public String getSqlByType(String type, String wsId, String condition, List args) { + StringBuffer sql = new StringBuffer(); + String fieldName = getField(type); + if (!fieldName.equals("")) { + sql.append("SELECT "); + sql.append("p." + fieldName + ",COUNT(p." + fieldName + ") AS coun "); + sql.append(" FROM "); + sql.append(PALRepositoryModelImpl.DATABASE_ENTITY + " p"); + sql.append(" where p." + PALRepositoryModelImpl.FIELD_WS_ID + " = '" + wsId + "' AND p." + PALRepositoryModelImpl.FIELD_IS_USE + "='1' AND p." + PALRepositoryModelImpl.FIELD_PL_CATEGORY + "='process' and " + PALRepositoryModelImpl.FIELD_PL_METHODID + "<> 'default' "); + sql.append(getSqlByConditions(condition, args)); + sql.append(" GROUP BY p." + fieldName + ""); + } + return sql.toString(); + } + + private String getShowName(String type, java.sql.ResultSet rset, String fieldName) throws SQLException { + String name = ""; + if (type.equals(CoeProcessLevelConstant.PLM)) { // 按里程碑 + name = CoeProcessLevelUtil.getPlM(String.valueOf(rset.getInt(fieldName))); + } else if (type.equals(CoeProcessLevelConstant.PLISBOTTOM)) { // 层级 + name = CoeProcessLevelUtil.getPlIsBottom(rset.getInt(fieldName)); + } else if (type.equals(CoeProcessLevelConstant.PLCOLOR)) { // 颜色标记 + name = CoeProcessLevelUtil.getPlColor(rset.getString(fieldName) == null ? "" : rset.getString(fieldName)); + } else { + name = CoeProcessLevelUtil.getPlExecType(rset.getInt(fieldName)); + } + if (name.trim().equals("")) { + name = ""; + } + return name; + } + + /** + * 获取所有使用中的资产库文件 + * + * @param wsId + * @return + */ + public List getCoeProcessLevelByWsId(String wsId) { + String sql = "select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_WS_ID + "='" + wsId + "' AND " + PALRepositoryModelImpl.FIELD_IS_USE + "='1' ORDER BY " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 获取所有资产库文件(所有版本) + * + * @param wsId + * @return + */ + public List getAllCoeProcessLevelByWsId(String wsId) { + String sql = "select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_WS_ID + "='" + wsId + "' ORDER BY " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 查询process类型的文件 + * + * @param wsId + * @return + */ + public List getCoePPLevelByWsId(String wsId) { + String sql = "select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_WS_ID + "='" + wsId + "' AND " + PALRepositoryModelImpl.FIELD_IS_USE + "='1' AND " + PALRepositoryModelImpl.FIELD_PL_CATEGORY + "='process' ORDER BY " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + // 执行方式数量 + public int getCoeProcessLevelExecTypeCount(String wsId) { + String sql = "select count(*) coun from APP_ACT_COE_PAL_REPOSITORY where PLEXECTYPE='1' and WSID='" + wsId + "'"; + return DBSql.getInt(sql, "coun"); + } + + public List> getCoeProcessLevelSystemNameCount(String wsId) { + String sql = "select pn.SYSTEMNAME n,count(*) c from APP_ACT_COE_PAL_REPOSITORY p,APP_ACT_COE_PAL_SYSTEMNAME pn where p.PLSYSTEMNAME=pn.id and p.wsid='" + wsId + "' GROUP BY pn.SYSTEMNAME order by c desc"; + return DBSql.query(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map mapValue = new HashMap(); + mapValue.put("count", rs.getInt("c")); + mapValue.put("name", rs.getString("n")); + return mapValue; + } + }); + } + + public List getCoeProcessLevelBySql(String sql) { + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 根据uuid获取保存次数 + * + * @param uuid + * @return + * @author renmm + */ + public int getHistoryMaxVersion(final String uuid) { + + HashMap paraMap = new HashMap(); + paraMap.put(PALRepositoryModelImpl.FIELD_UUID, uuid); + + int historyMaxVersion = DBSql.getInt("SELECT " + PALRepositoryModelImpl.FIELD_HISTORYMAXVERSION + " FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE ID =:ID", PALRepositoryModelImpl.FIELD_HISTORYMAXVERSION, paraMap); + return historyMaxVersion; + } + + public int saveHistoryMaxVersion(final String uuid, int ver) { + + HashMap paraMap = new HashMap(); + paraMap.put(PALRepositoryModelImpl.FIELD_UUID, uuid); + paraMap.put(PALRepositoryModelImpl.FIELD_HISTORYMAXVERSION, ver); + return DBSql.update("update " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_HISTORYMAXVERSION + " =:" + PALRepositoryModelImpl.FIELD_HISTORYMAXVERSION + " where ID =:ID", paraMap); + } + + public List getListProcessLevelByVersionUuid(String verUuid) { + String sql = "select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_PL_VERSION_UUID + " ='" + verUuid + "'" + " order by plver asc"; + return getCoeProcessLevelBySql(sql); + } + + /** + * 返回指定版本的最大版本号 + * + * @param versionUuid + * @param version + * @return + */ + public int getMaxVersionNum(String versionUuid, double version) { + String sql = "select max(" + PALRepositoryModelImpl.FIELD_PL_VER + ") as c from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_PL_VERSION_UUID + "='" + versionUuid + "'"; + return DBSql.getInt(sql, "c"); + } + + /** + * 更新状态为0 + * + * @param versionUuid + * @return + */ + public int updateStateOfVersionUuid(String versionUuid) { + int answer = 0; + String sql = "update " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_IS_USE + "= 0 where " + PALRepositoryModelImpl.FIELD_PL_VERSION_UUID + "='" + versionUuid + "'"; + answer = DBSql.update(sql); + String searchSql = "select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_PL_VERSION_UUID + " = '" + versionUuid + "'"; + List list = DBSql.query(searchSql, new PALRespositoryModelMapper()); + if (list != null && list.size() > 0) { + for (PALRepositoryModel model : list) { + PALRepositoryCache.getCache().put(model.getId(), model); + } + } + return answer; + } + + /** + * 更新指定版本状态为1 + * + * @param uuid + * @return + */ + public int updateUseStateOfVersionUuid(String uuid) { + int answer = 0; + String sql = "update " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_IS_USE + "= 1 where " + PALRepositoryModelImpl.FIELD_UUID + "='" + uuid + "'"; + answer = DBSql.update(sql); + if (answer > 0) { + PALRepositoryModelImpl model = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(uuid); + model.setUse(true); + PALRepositoryCache.getCache().put(model.getId(), model); + } + return answer; + } + + /** + * 根据文件uuid获得正在使用的workspace中对应文件的信息 + * + * @param uuid + * @return + */ + public PALRepositoryModel getUsingPlUuid(String uuid) { + String sql = "SELECT r1.* FROM APP_ACT_COE_PAL_REPOSITORY r1, APP_ACT_COE_PAL_REPOSITORY r2, APP_ACT_COE_PAL_WORKSPACE w" + " WHERE r2." + PALRepositoryModelImpl.FIELD_UUID + " = '" + uuid + "'" + " AND r1." + PALRepositoryModelImpl.FIELD_PL_VERSION_UUID + " = r2." + PALRepositoryModelImpl.FIELD_PL_VERSION_UUID + " AND r1." + PALRepositoryModelImpl.FIELD_WS_ID + " = w." + CoeWorkSpaceModel.FIELD_UUID + " AND w." + CoeWorkSpaceModel.FIELD_IS_USE + " = 1" + " AND r1." + PALRepositoryModelImpl.FIELD_IS_USE + " = 1"; + return DBSql.getObject(sql, new PALRespositoryModelMapper()); + } + + /** + * 获取文件的使用版本或发布版本 + * + * @param plVersionId + * @param type used/published + * @return + * @author zhangming + */ + public PALRepositoryModel getUserOrPublishedVersionId(String plVersionId, String type) { + StringBuilder sql = new StringBuilder("SELECT * FROM APP_ACT_COE_PAL_REPOSITORY WHERE PLVERSIONID=?"); + if ("used".equals(type)) { + sql.append(" AND ISUSE=1"); + } else if ("published".equals(type)) { + sql.append(" AND ISPUBLISH=1"); + } + return DBSql.getObject(sql.toString(), new PALRespositoryModelMapper(), new Object[] { plVersionId }); + } + + /** + * copy图形到数据库 + * + * @param model + */ + public boolean createShape(List list) { + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + String sql = "insert into " + DesignerShapeCopyModel.DATABASE_ENTITY + "(" + DesignerShapeCopyModel.FIELD_SHAPE_ID + "," + DesignerShapeCopyModel.FIELD_SHAPE_GROUPT_ID + "," + DesignerShapeCopyModel.FIELD_SHAPE_NAME + "," + DesignerShapeCopyModel.FIELD_SHAPE_CATEGORY_NAME + "," + DesignerShapeCopyModel.FIELD_PAL_REPOSITORY_ID + "," + DesignerShapeCopyModel.FIELD_SHAPE_TYPE + "," + DesignerShapeCopyModel.FIELD_IS_DELETE + ") VALUES(?,?,?,?,?,?,?)"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (int i = 0; i < list.size(); i++) { + DesignerShapeCopyModel model = list.get(i); + if (isExistShapeGroup(model.getShapeGroupId())) {// 如果存在此图形则更新 + String sql1 = "update " + DesignerShapeCopyModel.DATABASE_ENTITY + " set " + DesignerShapeCopyModel.FIELD_SHAPE_GROUPT_ID + " =:d where " + DesignerShapeCopyModel.FIELD_SHAPE_ID + " =:s "; + int r = DBSql.update(sql1, new Object[] { model.getShapeGroupId(), model.getShapeId() }); + continue; + } + if (isExistShape(model.getShapeId())) { + continue; + } + prest.setString(1, model.getShapeId()); + prest.setString(2, model.getShapeGroupId()); + // prest.setString(3, model.getShapeMessage()); + prest.setString(3, model.getShapeName()); + prest.setString(4, model.getShapecategoryName()); + prest.setString(5, model.getPalRepositoryId()); + prest.setString(6, model.getShapeType()); + prest.setString(7, model.getIsDelete()); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, prest, null); + } + return false; + } + + /** + * 查询是不是第一次复制该组的图形 + * + * @param shapeGroupId + * @return + */ + public boolean isExistShapeGroup(String shapeId) { + String sql = "select count(" + DesignerShapeCopyModel.FIELD_SHAPE_ID + ") from " + DesignerShapeCopyModel.DATABASE_ENTITY + " where " + DesignerShapeCopyModel.FIELD_SHAPE_GROUPT_ID + "='" + shapeId + "'"; + return DBSql.getInt(sql, new Object[] {}) == 0 ? false : true; + } + + /** + * 查询是不是第一次复制该的图形 + * + * @param shapeGroupId + * @return + */ + public boolean isExistShape(String shapeId) { + String sql = "select count(" + DesignerShapeCopyModel.FIELD_SHAPE_ID + ") from " + DesignerShapeCopyModel.DATABASE_ENTITY + " where " + DesignerShapeCopyModel.FIELD_SHAPE_ID + "='" + shapeId + "'"; + return DBSql.getInt(sql, new Object[] {}) == 0 ? false : true; + } + + /** + * 如果是复制的的别的组的图形则删除 + * + * @param shapeId + * @return + */ + public boolean isDelete(String shapeId, DesignerShapePasteModel model) { + String sql = "select count(" + DesignerShapePasteModel.FIELD_SHAPE_ID + ") as number from " + DesignerShapePasteModel.DATABASE_ENTITY + " where " + DesignerShapePasteModel.FIELD_SHAPE_ID + "='" + shapeId + "' and " + DesignerShapePasteModel.FIELD_IS_PASTE + "='Y'"; + try { + if (DBSql.getInt(sql, "number") != 0) { + model.setIsPaste("N"); + return true; + } + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return false; + } + + public boolean pasteToDatabse(List list) { + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + String sql = "insert into " + DesignerShapePasteModel.DATABASE_ENTITY + "(" + DesignerShapePasteModel.FIELD_SHAPE_ID + "," + DesignerShapePasteModel.FIELD_SHAPE_GROUPT_ID + "," + DesignerShapePasteModel.FIELD_SHAPE_NAME + "," + DesignerShapePasteModel.FIELD_SHAPE_CATEGORY_NAME + "," + DesignerShapePasteModel.FIELD_PAL_REPOSITORY_ID + "," + DesignerShapePasteModel.FIELD_SHAPE_TYPE + "," + DesignerShapePasteModel.FIELD_IS_DELETE + ") VALUES(?,?,?,?,?,?,?)"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (int i = 0; i < list.size(); i++) { + DesignerShapePasteModel model = list.get(i); + prest.setString(1, model.getId()); + prest.setString(2, model.getShapeGroupId()); + // prest.setString(3, model.getShapeMessage()); + prest.setString(3, model.getShapeName()); + prest.setString(4, model.getShapecategoryName()); + // prest.setString(6, model.getIsPaste()); + prest.setString(5, model.getPalRepositoryId()); + prest.setString(6, model.getShapeType()); + prest.setString(7, model.getIsDelete()); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, prest, null); + } + return false; + } + + /** + * 根据shapeGroupId找到图形 出现在哪些文件中 + * + * @param shapeGroupId + * @param b + * @return + */ + public Set> getFileIdsList(String shapeGroupId, String uuid) { + String sql1 = "select " + DesignerShapeCopyModel.FIELD_PAL_REPOSITORY_ID + ", " + DesignerShapeCopyModel.FIELD_SHAPE_ID + " from " + DesignerShapeCopyModel.DATABASE_ENTITY + " where " + DesignerShapeCopyModel.FIELD_SHAPE_GROUPT_ID + "=?"; + List> list1 = new ArrayList>(); + + try { + list1 = DBSql.query(sql1, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put("palRepositoryId", rs.getString(1)); + map.put("shapeId", rs.getString(2)); + return map; + } + }, new Object[] { shapeGroupId }); + + } catch (Exception e) { + e.printStackTrace(); + } + + String sql2 = "select " + DesignerShapePasteModel.FIELD_PAL_REPOSITORY_ID + ", " + DesignerShapePasteModel.FIELD_SHAPE_ID + " from " + DesignerShapePasteModel.DATABASE_ENTITY + " where " + DesignerShapePasteModel.FIELD_SHAPE_GROUPT_ID + "=?"; + List> list2 = new ArrayList>(); + try { + list2 = DBSql.query(sql2, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put("palRepositoryId", rs.getString(1)); + map.put("shapeId", rs.getString(2)); + return map; + } + }, new Object[] { shapeGroupId }); + + } catch (Exception e) { + e.printStackTrace(); + } + Set> set = new HashSet>(); + if (list1 != null && list1.size() > 0) { + set.addAll(list1); + } + if (list2 != null && list2.size() > 0) { + set.addAll(list2); + } + return set; + } + + /** + * 获取模型文件中的所有复制信息 + * + * @param repositoryId 模型Id + * @return + * @author zhangming + */ + public List getShapeCopyModelsByRepositoryId(String repositoryId) { + String sql = "SELECT * FROM " + DesignerShapeCopyModel.DATABASE_ENTITY + " WHERE PALREPOSITORYID=?"; + return DBSql.query(sql, new RowMapper() { + @Override + public DesignerShapeCopyModel mapRow(ResultSet rs, int arg1) throws SQLException { + DesignerShapeCopyModel model = new DesignerShapeCopyModel(); + model.setId(rs.getString("ID")); + model.setShapeGroupId(rs.getString("SHAPEGROUPTID")); + model.setShapeName(rs.getString("SHAPENAME")); + model.setShapecategoryName(rs.getString("SHAPECATEGORYNAME")); + model.setPalRepositoryId(rs.getString("PALREPOSITORYID")); + model.setIsDelete(rs.getString("ISDELETE")); + model.setShapeType(rs.getString("SHAPETYPE")); + return model; + } + }, new Object[] { repositoryId }); + } + + /** + * 获取模型文件中的所有粘贴信息 + * + * @param repositoryId 模型Id + * @return + * @author zhangming + */ + public List getShapePasteModelsByRepositoryId(String repositoryId) { + String sql = "SELECT * FROM " + DesignerShapePasteModel.DATABASE_ENTITY + " WHERE PALREPOSITORYID=?"; + return DBSql.query(sql, new RowMapper() { + @Override + public DesignerShapePasteModel mapRow(ResultSet rs, int arg1) throws SQLException { + DesignerShapePasteModel model = new DesignerShapePasteModel(); + model.setId(rs.getString("ID")); + model.setShapeGroupId(rs.getString("SHAPEGROUPTID")); + model.setShapeName(rs.getString("SHAPENAME")); + model.setShapecategoryName(rs.getString("SHAPECATEGORYNAME")); + model.setPalRepositoryId(rs.getString("PALREPOSITORYID")); + model.setIsDelete(rs.getString("ISDELETE")); + model.setShapeType(rs.getString("SHAPETYPE")); + return model; + } + }, new Object[] { repositoryId }); + } + + /** + * 图形出现复制的统计 + */ + + public List> designerRelationShapeCount(String shapeGroupId, String shapeId, String isCopy) { + List> list1 = new ArrayList>(); + String sql1 = "SELECT t2.ID,t2.SHAPETYPE, t1.PLNAME,t1.PLVER,t2.PALREPOSITORYID from APP_ACT_COE_PAL_REPOSITORY t1 ,APP_ACT_COE_PAL_SHAPE_COPY t2 where t1.ID = t2.PALREPOSITORYID and t2.SHAPEGROUPTID='" + shapeGroupId + "' and ISDELETE='N'"; + try { + list1 = DBSql.query(sql1, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put("shapeId", rs.getString(1)); + map.put("type", rs.getString(2)); + map.put("fileName", rs.getString(3)); + map.put("ver", VersionUtil.getVersionStrV(rs.getInt(4))); + map.put("palRepositoryId", rs.getString(5)); + return map; + } + }); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + + List> list2 = new ArrayList>(); + String sql2 = "SELECT t2.ID,t2.SHAPETYPE, t1.PLNAME,t1.PLVER,t2.PALREPOSITORYID from APP_ACT_COE_PAL_REPOSITORY t1 ,APP_ACT_COE_PAL_SHAPE_PASTE t2 where t1.ID = t2.PALREPOSITORYID and t2.SHAPEGROUPTID='" + shapeGroupId + "' and ISDELETE='N'"; + try { + list2 = DBSql.query(sql2, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put("shapeId", rs.getString(1)); + map.put("type", rs.getString(2)); + map.put("fileName", rs.getString(3)); + map.put("ver", VersionUtil.getVersionStrV(rs.getInt(4))); + map.put("palRepositoryId", rs.getString(5)); + return map; + } + }); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + + List> resultList = new ArrayList>(); + if (list1 != null) { + resultList.addAll(list1); + } + if (list2 != null) { + resultList.addAll(list2); + } + return resultList; + } + + // 对复制出现过的图形进行删除 + public void removeShapes(JSONArray jsonArr) { + Connection conn = DBSql.open(); + List list1 = new ArrayList(); + List list2 = new ArrayList(); + getShapesMap(jsonArr, list1, list2); + try { + conn.setAutoCommit(false); + removeShapeFromPaste(conn, list2, "Y"); + removeShapeFromCopy(conn, list1, "Y"); + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn); + } + } + + /** + * 代码重用 + * + * @param jsonArr + * @param list1 + * @param list2 + */ + private void getShapesMap(JSONArray jsonArr, List list1, List list2) { + for (int j = 0; j < jsonArr.size(); j++) { + JSONObject jsonObj = jsonArr.getJSONObject(j); + String shapeId = jsonObj.getString("id"); + JSONArray jsonDataArr = jsonObj.getJSONArray("dataAttributes"); + for (int i = 0; i < jsonDataArr.size(); i++) { + JSONObject dataJsonObj = jsonDataArr.getJSONObject(i); + String shapeGroupId = ""; + try { + if (dataJsonObj.containsKey("shapeGroupId")) { + shapeGroupId = dataJsonObj.getString("shapeGroupId"); + } else { + return; + } + } catch (Exception e) { + e.printStackTrace(); + return; + } + String isCopy = dataJsonObj.getString("isCopy"); + if ((null != isCopy && !"".equals(isCopy)) && (null != shapeGroupId && !"".equals(shapeGroupId))) { + // 更新数据库该条记录为删除状态 + if ("Y".equals(isCopy)) { + list1.add(shapeId); + } else { + list2.add(shapeId); + } + break; + } + } + } + } + + /** + * 从粘贴表的中删除 + * + * @param conn + * @param list + * @param isDelete + * @throws SQLException + */ + private void removeShapeFromPaste(Connection conn, List list, String isDelete) throws SQLException { + if (list.size() == 0) { + return; + } + PreparedStatement prest = null; + String sql = "update " + DesignerShapePasteModel.DATABASE_ENTITY + " set " + DesignerShapePasteModel.FIELD_IS_DELETE + " =? where " + DesignerShapePasteModel.FIELD_SHAPE_ID + " =?"; + prest = conn.prepareStatement(sql); + for (int i = 0; i < list.size(); i++) { + prest.setString(1, isDelete); + prest.setString(2, list.get(i)); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + DBSql.close(prest, null); + } + + /** + * 从复制的表中删除 + * + * @param conn + * @param list + * @param isDelete + * @throws SQLException + */ + private void removeShapeFromCopy(Connection conn, List list, String isDelete) throws SQLException { + if (list.size() == 0) { + return; + } + PreparedStatement prest = null; + String sql = "update " + DesignerShapeCopyModel.DATABASE_ENTITY + " set " + DesignerShapeCopyModel.FIELD_IS_DELETE + " =? where " + DesignerShapeCopyModel.FIELD_SHAPE_ID + " =? "; + prest = conn.prepareStatement(sql); + for (int i = 0; i < list.size(); i++) { + prest.setString(1, isDelete); + prest.setString(2, list.get(i)); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + DBSql.close(prest, null); + } + + /** + * 针对CTRL+Z和CTRL+Y的动作 + * + * @param jsonArr + */ + public void recoverRemoveShapes(JSONArray jsonArr) { + Connection conn = DBSql.open(); + List list1 = new ArrayList(); + List list2 = new ArrayList(); + getShapesMap(jsonArr, list1, list2); + try { + conn.setAutoCommit(false); + removeShapeFromPaste(conn, list2, "N"); + removeShapeFromCopy(conn, list1, "N"); + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn); + } + + } + + /** + * find指定资产id下的所有流程 + * + * @param wsId资产的id + * @return + */ + public List getCoeProcessLevelAll(String wsId) { + String sql = "select * from " + PALRepositoryModelImpl.DATABASE_ENTITY + " where " + PALRepositoryModelImpl.FIELD_WS_ID + "='" + wsId + "' ORDER BY " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + public void updateShapeToDB(List> list, String newShapeGroupId) { + for (Map map : list) { + String id = (String) map.get("id"); + JSONObject shape = (JSONObject) map.get("shape"); + if (!"linker".equals(shape.getString("name")) && shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject attr = dataAttributes.getJSONObject(i); + if (attr.containsKey("relevanceShapes") && attr.getString("shapeGroupId") != null && !"".equals(attr.getString("shapeGroupId")) && attr.getString("isCopy") != null && !"".equals(attr.getString("isCopy"))) { + + break; + } + } + } + String fileUUID = (String) map.get("fileUUID"); + } + } + + public void createShapeRelationFileModel(List listF) { + for (DesignerShapeFileRelationModel fileModel : listF) { + String sql = "select count(*) as number from APP_ACT_COE_PAL_SHAPE_FILE where ID='" + fileModel.getUuid() + "'"; + int i = DBSql.getInt(sql, "number"); + if (i == 0) { + StringBuilder sql1 = new StringBuilder(); + sql1.append("insert into "); + sql1.append("APP_ACT_COE_PAL_SHAPE_FILE"); + sql1.append(" ("); + sql1.append("ID").append(","); + sql1.append("PALREPOSITORYID"); + sql1.append(") values('"); + sql1.append(fileModel.getUuid()).append("','"); + sql1.append(fileModel.getFileUUID()).append("')"); + DBSql.update(sql1.toString()); + } + } + } + + @Override + public String entityName() { + return PALRepositoryModelImpl.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return new PALRespositoryModelMapper(); + } + + /** + * 关联的删除,删除双方的关联形状 + * + * @param uuid + */ + public void respositoryDesignerRelationShapeRelevanceRemove(String uuid) { + String sql = "select SHAPEGROUPID,SHAPERELATIONID,SHAPEID from APP_ACT_COE_PAL_SHAPE_RLAT where ID='" + uuid + "'"; + Map map = DBSql.getObject(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put("groupId", rs.getString("SHAPEGROUPID")); + map.put("relationId", rs.getString("SHAPERELATIONID")); + map.put("shapeId", rs.getString("SHAPEID")); + return map; + } + }); + if (map != null && map.get("groupId") != null && !"".equals(map.get("groupId"))) { + sql = "delete from APP_ACT_COE_PAL_SHAPE_RLAT where SHAPEGROUPID='" + map.get("groupId") + "' and SHAPERELATIONID='" + map.get("relationId") + "'"; + } else { + sql = "delete from APP_ACT_COE_PAL_SHAPE_RLAT where ID='" + uuid + "'"; + } + DBSql.update(sql); + if (map != null) { + sql = "delete from APP_ACT_COE_PAL_SHAPE_RLAT where SHAPERELATIONID='" + map.get("shapeId") + "' and SHAPEID='" + map.get("relationId") + "'"; + DBSql.update(sql); + } + } + + public List getRelationShapesByFileId(String uuId) { + String sql = "select ID from APP_ACT_COE_PAL_SHAPE_FILE where PALREPOSITORYID='" + uuId + "'"; + return DBSql.query(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString("ID"); + } + }); + } + + public void updateRelationShapeGroupId(String shapeGroupId) { + String sql = "select * from APP_ACT_COE_PAL_SHAPE_COPY where SHAPEGROUPTID='" + shapeGroupId + "'"; + List list = DBSql.query(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString("ID"); + } + }); + if (list != null && list.size() > 0) { + String shapeId = list.get(0); + sql = "update APP_ACT_COE_PAL_SHAPE_RLAT set SHAPEGROUPID='" + shapeGroupId + "' where SHAPEID='" + shapeId + "'"; + DBSql.update(sql); + } + } + + /** + * 获取所有未删除的复制图形 + * + * @return + */ + public List> getRelationShapes() { + String sql = "select * from APP_ACT_COE_PAL_SHAPE_COPY where isDelete='N'"; + List> list = null; + list = DBSql.query(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map result = new HashMap(); + result.put("id", rs.getString("ID")); + result.put("shapeGroupiId", rs.getString("SHAPEGROUPTID")); + result.put("shapeName", rs.getString("SHAPENAME")); + result.put("shapeCategoryName", rs.getString("SHAPECATEGORYNAME")); + result.put("palRepositoryId", rs.getString("PALREPOSITORYID")); + result.put("isDelete", rs.getString("ISDELETE")); + result.put("shapeType", rs.getString("SHAPETYPE")); + return result; + } + }); + return list; + } + + public boolean getAccessHome(String wsuuid, String uid) { + String sql = "select " + CoeWorkSpaceModel.FIELD_WS_ADMIN + ", " + CoeWorkSpaceModel.FIELD_WS_DM + " from " + CoeWorkSpaceModel.DATABASE_ENTITY + " where " + CoeWorkSpaceModel.FIELD_UUID + " ='" + wsuuid + "'"; + Map map = DBSql.getObject(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put("WSADMIN", rs.getString("WSADMIN")); + map.put("WSDM", rs.getString("WSDM")); + return map; + } + }); + if (map.get("WSADMIN") != null && map.get("WSADMIN").contains(uid)) { + return true; + } + if (map.get("WSDM") != null && map.get("WSDM").contains(uid)) { + return true; + } + if ("admin".equals(uid)) + return true; + return false; + } + + public List getRelationValue(String id) { + List list = new ArrayList(); + String sql = "select distinct RELATIONSHAPETEXT ,RELATIONSHAPEID from APP_ACT_COE_PAL_SHAPE_RLAT where RELATIONSHAPEID in (" + id + ")"; + List> listMap = DBSql.query(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put(rs.getString(2), rs.getString(1)); + return map; + } + }); + for (Map map : listMap) { + Set set = map.keySet(); + for (String key : set) { + list.add(map.get(key)); + } + } + + return list; + } + + public Map getRelationValueToMap(String id) { + Map resultMap = new HashMap(); + String sql = "select distinct RELATIONSHAPETEXT ,RELATIONSHAPEID, RELATIONFILEID from APP_ACT_COE_PAL_SHAPE_RLAT where RELATIONSHAPEID in (" + id + ")"; + List> listMap = DBSql.query(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put(rs.getString(2), rs.getString(1)); + map.put(rs.getString(2) + "_fileId", rs.getString(3)); + return map; + } + }); + for (Map map : listMap) { + Set set = map.keySet(); + for (String key : set) { + resultMap.put(key, map.get(key)); + } + } + return resultMap; + } + + public Map getRelationFileIdsToMap(String id) { + Map resultMap = new HashMap(); + String sql = "select distinct RELATIONFILEID ,RELATIONSHAPEID from APP_ACT_COE_PAL_SHAPE_RLAT where RELATIONSHAPEID in (" + id + ")"; + List> listMap = DBSql.query(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put(rs.getString(2), rs.getString(1)); + return map; + } + }); + for (Map map : listMap) { + Set set = map.keySet(); + for (String key : set) { + resultMap.put(key, map.get(key)); + } + } + return resultMap; + } + + /** + * 根据流程团队小组Id,模糊查询流程资产文件 + * + * @param teamId 小组Id + * @param name 查询的流程资产文件名 + * @return + */ + public List getRepositoryListByTeamId(String wsId, String teamId, String name) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + + TeamPerm teamPeam = new TeamPerm(); + String sql = "select r.* from " + PALRepositoryModelImpl.DATABASE_ENTITY + " r, " + teamPeam.entityName() + " p " + " where r.PLVERSIONID = p.RESOURCEID and p.TEAMID = '" + teamId + "' and p.PERMTYPE = '1' " + " and r." + PALRepositoryModelImpl.FIELD_WS_ID + "='" + wsId + "' and r." + PALRepositoryModelImpl.FIELD_PL_NAME + " like " + namelike + " and r." + PALRepositoryModelImpl.FIELD_IS_USE + "='1' ORDER BY " + PALRepositoryModelImpl.FIELD_PL_ORDERINDEX + " ASC"; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 根据流程发布中的角色,获取流程资产库列表 + * + * @param roleId 流程发布中的角色Id + * @param isPublish 是否限制为已发布流程 + * @return + */ + public List> getWorkSpaceListByPublishRole(String roleId, boolean isPublish) { + StringBuilder sql = new StringBuilder("select distinct(wc.ID), wc.WSNAME from APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE r, APP_ACT_COE_PAL_REPOSITORY pal, APP_ACT_COE_PAL_WORKSPACE wc" + " where r.ROLEID = '" + roleId + "' and r.GROUPID = p.GROUPID and p.RESOURCEID = pal.PLVERSIONID and wc.ID = pal.WSID"); + if (isPublish) { + sql.append(" and pal.ISPUBLISH = 1"); + } + + return DBSql.query(sql.toString(), new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map result = new HashMap(); + result.put("wsId", rs.getString(1)); + result.put("wsName", rs.getString(2)); + return result; + } + }); + } + + /** + * 根据流程发布中的角色,获取流程资产库列表 + * + * @param roleId 流程发布中的角色Id + * @param isPublish 是否限制为已发布流程 + * @param sort 是否排序 + * @return + */ + public List> getWorkSpaceListByPublishRole(String roleId, boolean isPublish, boolean sort) { + StringBuilder sql = new StringBuilder("select distinct(wc.ID), wc.WSNAME,WSORDERINDEX from APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE r, APP_ACT_COE_PAL_REPOSITORY pal, APP_ACT_COE_PAL_WORKSPACE wc" + " where r.ROLEID = '" + roleId + "' and r.GROUPID = p.GROUPID and p.RESOURCEID = pal.PLVERSIONID and wc.ID = pal.WSID"); + if (isPublish) { + sql.append(" and pal.ISPUBLISH = 1"); + } + if (sort) { + sql.append(" order by " + CoeWorkSpaceModel.FIELD_WS_ORDERINDEX + " ASC"); + } + return DBSql.query(sql.toString(), new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map result = new HashMap(); + result.put("wsId", rs.getString(1)); + result.put("wsName", rs.getString(2)); + return result; + } + }); + } + + /************************获取流程发布数据start***************************************/ + /** + * 按模块获取数据 + * @return + */ + public List getRepositoryListByPublishRolePagination(String wsIds, String roleId, String name, int start, int pageLimit, String category) { + String dbSupply = AWSServerConf.getDatabaseProvider(); + String sql = "select distinct(pal.ID) plId, pal.*"; + if (dbSupply.toLowerCase().equals("sqlserver")) { + sql = "select pal.*"; + } + sql += " from APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE r, APP_ACT_COE_PAL_REPOSITORY pal" + " where r.ROLEID = '" + roleId + "' and r.GROUPID = p.GROUPID and p.RESOURCEID = pal.PLVERSIONID and pal.ISPUBLISH = 1"; + if (!UtilString.isEmpty(wsIds)) { + sql += " and pal.WSID in(" + wsIds + ")"; + } + if (!UtilString.isEmpty(category)) { + sql += " and pal.PLCATEGORY = '" + category + "'"; + } + sql += " and pal.PLMETHODID != 'default' "; + if (name != null && !"".equals(name)) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql += " and pal.PLNAME like " + namelike; + } + sql += " order by pal.PUBLISHDATE DESC, pal.PLLEVEL, pal.PLORDERINDEX "; + try { + // 分页 + sql = SQLPagination.getPaginitionSQL(sql.toString(), start, pageLimit); + } catch (Exception e) { + e.printStackTrace(); + } + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 按模块获取数据 + * @return + */ + public List getRepositoryListByPublishRole(String wsIds, String roleId, String name, String category, boolean isPublish, boolean isUse) { + String dbSupply = AWSServerConf.getDatabaseProvider(); + String sql = "select distinct(pal.ID) plId, pal.*"; + if (dbSupply.toLowerCase().equals("sqlserver")) { + sql = "select pal.*"; + } + sql += " from APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE r, APP_ACT_COE_PAL_REPOSITORY pal" + " where r.ROLEID = '" + roleId + "' and r.GROUPID = p.GROUPID and p.RESOURCEID = pal.PLVERSIONID and "; + if (isPublish) { + sql += " pal.ISPUBLISH = 1"; + } + if (isUse) { + sql += " pal.ISUSE = 1"; + } + if (!UtilString.isEmpty(wsIds)) { + sql += " and pal.WSID in(" + wsIds + ")"; + } + if (!UtilString.isEmpty(category)) { + sql += " and pal.PLCATEGORY = '" + category + "'"; + } + sql += " and pal.PLMETHODID != 'default' "; + if (name != null && !"".equals(name)) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql += " and pal.PLNAME like " + namelike; + } + sql += " order by pal.PUBLISHDATE DESC, pal.PLLEVEL, pal.PLORDERINDEX "; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 按模块获取数据 + * @return + */ + public List getRepositoryListByPublishRole(String wsIds, String roleId, String name, String category) { + String dbSupply = AWSServerConf.getDatabaseProvider(); + String sql = "select distinct(pal.ID) plId, pal.*"; + if (dbSupply.toLowerCase().equals("sqlserver")) { + sql = "select pal.*"; + } + sql += " from APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE r, APP_ACT_COE_PAL_REPOSITORY pal" + " where r.ROLEID = '" + roleId + "' and r.GROUPID = p.GROUPID and p.RESOURCEID = pal.PLVERSIONID and pal.ISPUBLISH = 1"; + if (!UtilString.isEmpty(wsIds)) { + sql += " and pal.WSID in(" + wsIds + ")"; + } + if (!UtilString.isEmpty(category)) { + sql += " and pal.PLCATEGORY = '" + category + "'"; + } + sql += " and pal.PLMETHODID != 'default' "; + if (name != null && !"".equals(name)) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql += " and pal.PLNAME like " + namelike; + } + sql += " order by pal.PUBLISHDATE DESC, pal.PLLEVEL, pal.PLORDERINDEX "; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 获取常用流程数据 + * @return + */ + public List getRepositoryCommonListByPublishRolePagination(String wsIds, String roleId, String name, int start, int pageLimit, String category) { + String dbSupply = AWSServerConf.getDatabaseProvider(); + String sql = "select distinct(pal.ID) plId,comm.SORT, pal.*"; + if (dbSupply.toLowerCase().equals("sqlserver")) { + sql = "select comm.SORT,pal.*"; + } + sql += " from APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE r, APP_ACT_COE_PAL_REPOSITORY pal , APP_ACT_COE_PAL_PUBLISH_COM comm " + " where r.ROLEID = '" + roleId + "' and r.GROUPID = p.GROUPID and p.RESOURCEID = pal.PLVERSIONID and pal.ISPUBLISH = 1 and comm.WSID = pal.WSID and comm.PLVERSIONID = pal.PLVERSIONID "; + if (!UtilString.isEmpty(wsIds)) { + sql += " and pal.WSID in(" + wsIds + ")"; + } + if (!UtilString.isEmpty(category)) { + sql += " and pal.PLCATEGORY = '" + category + "'"; + } + sql += " and pal.PLMETHODID != 'default' "; + if (name != null && !"".equals(name)) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql += " and pal.PLNAME like " + namelike; + } + sql += " order by comm.SORT, pal.PUBLISHDATE DESC, pal.PLLEVEL, pal.PLORDERINDEX "; + try { + // 分页 + sql = SQLPagination.getPaginitionSQL(sql.toString(), start, pageLimit); + } catch (Exception e) { + e.printStackTrace(); + } + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 获取常用流程数据 + * @return + */ + public List getRepositoryCommonListByPublishRole(String wsIds, String roleId, String name, String category) { + String dbSupply = AWSServerConf.getDatabaseProvider(); + String sql = "select distinct(pal.ID) plId,comm.SORT, pal.*"; + if (dbSupply.toLowerCase().equals("sqlserver")) { + sql = "select comm.SORT,pal.*"; + } + sql += " from APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE r, APP_ACT_COE_PAL_REPOSITORY pal , APP_ACT_COE_PAL_PUBLISH_COM comm " + " where r.ROLEID = '" + roleId + "' and r.GROUPID = p.GROUPID and p.RESOURCEID = pal.PLVERSIONID and pal.ISPUBLISH = 1 and comm.WSID = pal.WSID and comm.PLVERSIONID = pal.PLVERSIONID "; + if (!UtilString.isEmpty(wsIds)) { + sql += " and pal.WSID in(" + wsIds + ")"; + } + if (!UtilString.isEmpty(category)) { + sql += " and pal.PLCATEGORY = '" + category + "'"; + } + sql += " and pal.PLMETHODID != 'default' "; + if (name != null && !"".equals(name)) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql += " and pal.PLNAME like " + namelike; + } + sql += " order by comm.SORT, pal.PUBLISHDATE DESC, pal.PLLEVEL, pal.PLORDERINDEX "; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 获取高频流程数据 + * @return + */ + public List getRepositoryFrequencyListByPublishRolePagination(String wsIds, String roleId, String name, int start, int pageLimit, String category) { + String dbSupply = AWSServerConf.getDatabaseProvider(); + String sql = "select distinct(pal.ID) palId,fre.COUNT, pal.*"; + if (dbSupply.toLowerCase().equals("sqlserver")) { + sql = "select fre.COUNT, pal.*"; + } + sql += " from APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE r, APP_ACT_COE_PAL_REPOSITORY pal , APP_ACT_COE_PAL_PUBLISH_FREQ fre " + " where r.ROLEID = '" + roleId + "' and r.GROUPID = p.GROUPID and p.RESOURCEID = pal.PLVERSIONID and pal.ISPUBLISH = 1 and fre.WSID = pal.WSID and fre.PLVERSIONID = pal.PLVERSIONID "; + if (!UtilString.isEmpty(wsIds)) { + sql += " and pal.WSID in(" + wsIds + ")"; + } + if (!UtilString.isEmpty(category)) { + sql += " and pal.PLCATEGORY = '" + category + "'"; + } + sql += " and pal.PLMETHODID != 'default' "; + if (name != null && !"".equals(name)) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql += " and pal.PLNAME like " + namelike; + } + sql += " order by fre.COUNT DESC, pal.PUBLISHDATE DESC, pal.PLLEVEL, pal.PLORDERINDEX "; + try { + // 分页 + sql = SQLPagination.getPaginitionSQL(sql.toString(), start, pageLimit); + } catch (Exception e) { + e.printStackTrace(); + } + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 获取高频流程数据 + * @return + */ + public List getRepositoryFrequencyListByPublishRole(String wsIds, String roleId, String name, String category) { + String dbSupply = AWSServerConf.getDatabaseProvider(); + String sql = "select distinct(pal.ID) palId,fre.COUNT, pal.*"; + if (dbSupply.toLowerCase().equals("sqlserver")) { + sql = "select fre.COUNT, pal.*"; + } + sql += " from APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE r, APP_ACT_COE_PAL_REPOSITORY pal , APP_ACT_COE_PAL_PUBLISH_FREQ fre " + " where r.ROLEID = '" + roleId + "' and r.GROUPID = p.GROUPID and p.RESOURCEID = pal.PLVERSIONID and pal.ISPUBLISH = 1 and fre.WSID = pal.WSID and fre.PLVERSIONID = pal.PLVERSIONID "; + if (!UtilString.isEmpty(wsIds)) { + sql += " and pal.WSID in(" + wsIds + ")"; + } + if (!UtilString.isEmpty(category)) { + sql += " and pal.PLCATEGORY = '" + category + "'"; + } + sql += " and pal.PLMETHODID != 'default' "; + if (name != null && !"".equals(name)) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql += " and pal.PLNAME like " + namelike; + } + sql += " order by fre.COUNT DESC, pal.PUBLISHDATE DESC, pal.PLLEVEL, pal.PLORDERINDEX "; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /************************获取流程发布数据end*****************************************/ + + /** + * 根据流程发布中的角色,获取流程资产文件列表 + * + * @param roleId 流程发布中的角色Id + * @param wsId 流程资产库Id + * @return + */ + public List getRepositoryListByPublishRole(String roleId, String wsId) { + return getRepositoryListByPublishRole(roleId, wsId, null); + } + + + /** + * 根据流程发布中的角色,获取条件下的流程 + * @param roleId + * @param wsIds + * @param name + * @return + */ + public List getRepositoryListByPublishRole(String roleId, String wsIds, String category, String deptId, String methodFilter) { + String sql = "select distinct(pal.ID), pal.* from APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE r, APP_ACT_COE_PAL_REPOSITORY pal" + " where r.ROLEID = '" + roleId + "' and r.GROUPID = p.GROUPID and p.RESOURCEID = pal.PLVERSIONID and pal.ISPUBLISH = 1"; + if (wsIds != null && !"".equals(wsIds)) { + sql += " and pal.WSID in (" + wsIds + ")"; + } + if (!UtilString.isEmpty(category)) { + sql += " and pal.PLCATEGORY = '" + category + "'"; + } + if (!UtilString.isEmpty(deptId)) { + sql += " and pal.PLDUTYDEPT = '" + deptId + "'"; + } + + if (!UtilString.isEmpty(methodFilter)) { + sql += " and pal.PLMETHODID <> '" + methodFilter + "'"; + } + + sql += " order by pal.PLLEVEL, pal.PLORDERINDEX "; + List list = DBSql.query(sql, new PALRespositoryModelMapper()); + return list; + } + + public List getRepositoryListByPublishRole(String roleId, String wsId, String name) { + String sql = "select distinct(pal.ID), pal.* from APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE r, APP_ACT_COE_PAL_REPOSITORY pal" + " where r.ROLEID = '" + roleId + "' and r.GROUPID = p.GROUPID and p.RESOURCEID = pal.PLVERSIONID and pal.ISPUBLISH = 1"; + if (wsId != null && !"".equals(wsId)) { + sql += " and pal.WSID = '" + wsId + "'"; + } + if (name != null && !"".equals(name)) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql += " and pal.PLNAME like " + namelike; + } + sql += " order by pal.PLLEVEL, pal.PLORDERINDEX "; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 根据流程发布中的角色,获取流程资产文件版本id集合 + * @param roleId + * @param wsIds + * @param name + * @return 文件版本id集合 + */ + public Set getRepositoryVersionIdListByPublishRole(String roleId, String wsIds, String category) { + String sql = "select distinct(pal.ID), pal.* from APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE r, APP_ACT_COE_PAL_REPOSITORY pal" + " where r.ROLEID = '" + roleId + "' and r.GROUPID = p.GROUPID and p.RESOURCEID = pal.PLVERSIONID and pal.ISPUBLISH = 1"; + if (wsIds != null && !"".equals(wsIds)) { + sql += " and pal.WSID in (" + wsIds + ")"; + } + if (!UtilString.isEmpty(category)) { + sql += " and pal.PLCATEGORY = '" + category + "'"; + } + sql += " order by pal.PLLEVEL, pal.PLORDERINDEX "; + Set idSet =new HashSet<>(); + List list = DBSql.query(sql, new PALRespositoryModelMapper()); + if (list != null && list.size() > 0) { + for (PALRepositoryModel model : list) { + idSet.add(model.getVersionId()); + } + } + return idSet; + } + + /** + * 获取角色限定下发布流程列表 + * @param roleId + * @param wsIds + * @param category + * @return + */ + public List getRepositoryListByPublishRoleAndCategory(String roleId, String wsIds, String category) { + String sql = "select distinct(pal.ID), pal.* from APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE r, APP_ACT_COE_PAL_REPOSITORY pal" + " where r.ROLEID = '" + roleId + "' and r.GROUPID = p.GROUPID and p.RESOURCEID = pal.PLVERSIONID and pal.ISPUBLISH = 1"; + if (!UtilString.isEmpty(wsIds)) { + sql += " and pal.WSID in(" + wsIds + ")"; + } + if (!UtilString.isEmpty(category)) { + sql += " and pal.PLCATEGORY = '" + category + "'"; + } + sql += " order by pal.PUBLISHDATE DESC, pal.PLLEVEL, pal.PLORDERINDEX "; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 获取具有PAL特定角色下的所有权限文件 + * @param roleId + * @return + */ + public Set getPalVersionIdByroleId(String roleId) { + String sql = "SELECT DISTINCT up.RESOURCEID FROM APP_ACT_COE_PAL_USERGRP_PERM up, APP_ACT_COE_PAL_USERGRP_ROLE ur WHERE up.GROUPID=ur.GROUPID AND ur.ROLEID='" + roleId + "'"; + List list = DBSql.query(sql, new RowMapper() { + @Override + public String mapRow(ResultSet r, int arg1) throws SQLException { + return r.getString(1); + } + }); + if (list != null && list.size() > 0) { + return new HashSet<>(list); + } else { + return new HashSet<>(); + } + } + + /** + * 根据资产库文件versionId获取使用的资产库 + * + * @param versionId 流程版本Id + * @return + */ + public List getRepositoryByVersionId(String versionId) { + String sql = "select * from APP_ACT_COE_PAL_REPOSITORY where PLVERSIONID = '" + versionId + "' and ISUSE = 1"; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 根据资产库文件versionId获取版本号相同的流程 + * + * @param versionId 流程版本Id + * @return + */ + public List getAllRepositoryByVersionId(String versionId) { + String sql = "select * from APP_ACT_COE_PAL_REPOSITORY where PLVERSIONID = '" + versionId + "' ORDER BY PLVER"; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 获得未发布的流程 + * + * @param wsId + * @return + */ + public List getNotPublishedRepositoryList(String wsId) { + StringBuilder sb = new StringBuilder(); + sb.append("SELECT"); + sb.append(" r1.* "); + sb.append(" FROM"); + sb.append(" APP_ACT_COE_PAL_REPOSITORY r1"); + sb.append(" WHERE"); + sb.append(" r1.PLVERSIONID NOT IN ("); + sb.append(" SELECT"); + sb.append(" r2.PLVERSIONID"); + sb.append(" FROM"); + sb.append(" APP_ACT_COE_PAL_REPOSITORY r2"); + sb.append(" WHERE"); + sb.append(" r2.WSID = '"); + sb.append(wsId); + sb.append("'"); + sb.append(" AND r2.ISPUBLISH = 1"); + sb.append(" )"); + sb.append(" AND r1.WSID = '"); + sb.append(wsId); + sb.append("'"); + sb.append(" AND r1.ISUSE = 1"); + sb.append(" ORDER BY"); + sb.append(" r1.PLLEVEL ASC,"); + sb.append(" r1.PLORDERINDEX ASC "); + return DBSql.query(sb.toString(), new PALRespositoryModelMapper()); + } + + /** + * 获得已发布的流程的未发布版本 + * + * @param wsId + * @return + */ + public List getPublishedRepositoryVersionList(String wsId) { + String sql = "select r1.* from APP_ACT_COE_PAL_REPOSITORY r1, APP_ACT_COE_PAL_REPOSITORY r2 where r1.PLVERSIONID = r2.PLVERSIONID and r1.ID <> r2.ID and r1.ISPUBLISH = 0 and r2.ISPUBLISH = 1 and r1.WSID = '" + wsId + "'"; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 获得某个文件的未发布版本 + * + * @param wsId + * @param repositoryId + * @return + */ + public List getPublishedRepositoryVersionListByRid(String repositoryId) { + String sql = "SELECT r1.* FROM APP_ACT_COE_PAL_REPOSITORY r1, APP_ACT_COE_PAL_REPOSITORY r2 WHERE r1.PLVERSIONID = r2.PLVERSIONID AND r2.ID=? AND r1.ID<>r2.ID AND r1.ISPUBLISH=0"; + return DBSql.query(sql, new PALRespositoryModelMapper(), new Object[] { repositoryId }); + } + + /** + * 获得已发布的流程 + * + * @param wsId + * @return + */ + public List getPublishedRepositoryList(String wsId) { + String sql = "select * from APP_ACT_COE_PAL_REPOSITORY where ISPUBLISH = 1 and WSID = '" + wsId + "' order by PLLEVEL asc, PLORDERINDEX asc"; + return DBSql.query(sql, new PALRespositoryModelMapper()); + } + + /** + * 获取某个流程的所有子流程 + * + * @param pid + * @return + */ + public List getPalRepositoryModelsByPid(String pid, String wsId) { + String sql = ""; + if (pid.length() < 36) { + sql = "SELECT * FROM APP_ACT_COE_PAL_REPOSITORY WHERE PLPARENTID=? AND WSID=? ORDER BY PLORDERINDEX"; + return DBSql.query(sql, new PALRespositoryModelMapper(), new Object[] { pid, wsId }); + } else { + sql = "SELECT * FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE PLPARENTID IN " + "(SELECT r1.id FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " r1, " + PALRepositoryModelImpl.DATABASE_ENTITY + " r2 WHERE r1.PLVERSIONID = r2.PLVERSIONID AND r2.id=?)" + " ORDER BY PLORDERINDEX"; + return DBSql.query(sql, new PALRespositoryModelMapper(), new Object[] { pid }); + } + } + + /** + * 获取某个流程的所有子流程 + * + * @param pid + * @return + */ + public List getUsedPalRepositoryModelsByPid(String pid) { + String sql = "SELECT * FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE PLPARENTID IN " + "(SELECT r1.id FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " r1, " + PALRepositoryModelImpl.DATABASE_ENTITY + " r2 WHERE r1.PLVERSIONID = r2.PLVERSIONID AND r2.id=?)" + " AND ISUSE='1' ORDER BY PLORDERINDEX"; + return DBSql.query(sql, new PALRespositoryModelMapper(), new Object[] { pid }); + } + + /** + * 修改已发布流程的浏览次数 + * + * @param palRepositoryId + * @author zhangming + */ + public int updateViewCount(String palRepositoryId) { + PALRepositoryModelImpl model = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(palRepositoryId); + long viewCount = model.getViewCount(); + viewCount++; + model.setViewCount(viewCount); + String sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " SET VIEWCOUNT=? WHERE ID = ?"; + int r = DBSql.update(sql, new Object[] { viewCount, palRepositoryId }); + if (r > 0) { + PALRepositoryCache.getCache().put(model.getId(), model); + } + return r; + } + + /** + * 搜索已发布流程,用于流程发布客户端 + * + * @param ids + * @param filter + * @param order + * @param name + * @return + * @author zhangming + */ + public List searchRepositoryByPublisherPortal(String ids, String filter, String order, String name) { + String[] idstrs = ids.split(","); + StringBuilder idsb = new StringBuilder(); + for (int i = 0; i < idstrs.length; i++) { + idsb.append("'").append(idstrs[i]).append("',"); + } + String idsString = idsb.toString(); + idsString = idsString.substring(0, idsString.lastIndexOf(",")); + + StringBuilder sql = new StringBuilder("SELECT r.id, p.PUBLISHDATE, r.PLRD, r.PLRP, r.plorderindex FROM APP_ACT_COE_PAL_REPOSITORY r, APP_ACT_COE_PAL_PUBLISH p, APP_ACT_COE_PAL_PUBLISH_LIST pl"); + sql.append(" WHERE r.id = pl.palrepositoryid AND pl.pid = p.id AND r.id IN (").append(idsString).append(")"); + + Object[] param = new Object[] { "", "" }; + if (filter != null && !"".equals(filter)) { + JSONObject filterJson = JSONObject.parseObject(filter); + Iterator it = filterJson.keySet().iterator(); + while (it.hasNext()) { + String key = (String) it.next(); + String value = filterJson.getString(key); + if (!key.equals("publishdate")) { + String[] valueStrs = value.split(","); + StringBuilder valuesb = new StringBuilder(); + for (int i = 0; i < valueStrs.length; i++) { + valuesb.append("'").append(valueStrs[i]).append("',"); + } + String valueString = valuesb.toString(); + valueString = valueString.substring(0, valueString.lastIndexOf(",")); + sql.append(" AND " + key + " in (").append(valueString).append(")"); + } else { + String beginTime = ""; + String endTime = ""; + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Timestamp currentTime = new Timestamp(System.currentTimeMillis()); + beginTime = formatter.format(currentTime); + int num = Integer.parseInt(value.substring(0, value.indexOf("-"))); + + Calendar cal = new GregorianCalendar(); + cal.setTime(currentTime); + if (value.contains("year")) { + int year = cal.get(Calendar.YEAR); + year = year - num; + cal.set(Calendar.YEAR, year); + } else if (value.contains("month")) { + int month = cal.get(Calendar.MONTH); + month = month - num; + cal.set(Calendar.MONTH, month); + } else if (value.contains("day")) { + int day = cal.get(Calendar.DAY_OF_MONTH); + day = day - num; + cal.set(Calendar.DAY_OF_MONTH, day); + } + java.util.Date myDate = cal.getTime(); + endTime = formatter.format(myDate); + sql.append(" AND " + key + " BETWEEN ? AND ?"); + param[0] = endTime; + param[1] = beginTime; + } + } + } + + if (name != null && !"".equals(name)) { + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name.toLowerCase() + "%'"; + } + sql.append(" AND lower(r.plname) LIKE " + namelike.toLowerCase()); + } + if (order != null && !"".equals(order)) { + sql.append(" ORDER BY " + order); + } else { + sql.append(" ORDER BY plorderindex"); + } + + List list; + if (param[0].equals("")) { + list = DBSql.query(sql.toString(), new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }); + } else { + list = DBSql.query(sql.toString(), new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }, param); + } + Set set = new HashSet(); + List newList = new ArrayList(); + for (Iterator iter = list.iterator(); iter.hasNext();) { + Object element = iter.next(); + if (set.add(element)) + newList.add(element); + } + list.clear(); + list.addAll(newList); + return list; + } + + /** + * 搜索所有负责部门 + * + * @param wsId + * @return + * @author zhangming + */ + public List> searchRepositoryPlrdByPublisherPortal(String roleId) { + String sql = "SELECT DISTINCT(PLRD), sr.RELATIONSHAPETEXT FROM APP_ACT_COE_PAL_REPOSITORY r, APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE role, APP_ACT_COE_PAL_SHAPE_RLAT sr WHERE r.plrd <> '' AND r.plrd IS NOT NULL AND p.GROUPID = role.GROUPID AND p.RESOURCEID = r.id AND r.PLRD=sr.RELATIONSHAPEID AND role.roleid=?"; + + return DBSql.query(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put("id", rs.getString(1)); + map.put("name", rs.getString(2)); + return map; + } + }, new Object[] { roleId }); + } + + /** + * 搜索所有负责人 + * + * @param roleId + * @return + * @author zhangming + */ + public List> searchRepositoryPlrpByPublisherPortal(String roleId) { + String sql = "SELECT DISTINCT(PLRP), sr.RELATIONSHAPETEXT FROM APP_ACT_COE_PAL_REPOSITORY r, APP_ACT_COE_PAL_USERGRP_PERM p, APP_ACT_COE_PAL_USERGRP_ROLE role, APP_ACT_COE_PAL_SHAPE_RLAT sr WHERE r.plrp <> '' AND r.plrp IS NOT NULL AND p.GROUPID = role.GROUPID AND p.RESOURCEID = r.id AND r.PLRP=sr.RELATIONSHAPEID AND role.roleid = ?"; + + return DBSql.query(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put("id", rs.getString(1)); + map.put("name", rs.getString(2)); + return map; + } + }, new Object[] { roleId }); + } + + /** + * 恢复备份数据时,删除当前的数据 + * + * @param wsId + * @return + * @author zhangming + */ + public boolean deleteRepositorysByWsId(String wsId) { + boolean flag = true; + Connection conn = DBSql.open(); + try { + conn.setAutoCommit(false); + Object[] params = new Object[] { wsId }; + String deleteShapeCopySql = "DELETE FROM APP_ACT_COE_PAL_SHAPE_COPY WHERE PALREPOSITORYID IN (SELECT id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?)"; + DBSql.update(conn, deleteShapeCopySql, params); + String deleteShapePasteSql = "DELETE FROM APP_ACT_COE_PAL_SHAPE_PASTE WHERE PALREPOSITORYID IN (SELECT id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?)"; + DBSql.update(conn, deleteShapePasteSql, params); + String deleteShapeRelationSql = "DELETE FROM APP_ACT_COE_PAL_SHAPE_RLAT WHERE FILEID IN (SELECT id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?)"; + DBSql.update(conn, deleteShapeRelationSql, params); + String deleteUpfileSql = "DELETE FROM APP_ACT_COE_PAL_UPFILE WHERE PALREPOSITORYID IN (SELECT id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?)"; + DBSql.update(conn, deleteUpfileSql, params); + String deleteRepositoryPropertySql = "DELETE FROM APP_ACT_COE_PAL_PROP WHERE PLID IN (SELECT ID FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?)"; + DBSql.update(conn, deleteRepositoryPropertySql, params); + // 判断数据库类型 sqlServer用“+”连接字符串 + String deletePropertySql = "DELETE FROM APP_ACT_COE_PROP WHERE PROPERTYKEY IN (SELECT CONCAT(id, '_attr') AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?)" + + " OR PROPERTYKEY IN (SELECT CONCAT('mark_', PLRID) AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT CONCAT('link_', PLRID) AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT CONCAT('link_app_', PLRID) AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT CONCAT('use_', PLRID) AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) "; + if (AWSServerConf.getDatabaseProvider().equals("sqlserver")) { + deletePropertySql = "DELETE FROM APP_ACT_COE_PROP WHERE PROPERTYKEY IN (SELECT id+'_attr' AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT 'mark_'+PLRID AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT 'link_'+PLRID AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT 'link_app_'+PLRID AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) " + + " OR PROPERTYKEY IN (SELECT 'use_'+PLRID AS id FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?) "; + } + DBSql.update(conn, deletePropertySql, new Object[] { wsId, wsId, wsId, wsId, wsId }); + String deleteCorrelateSql = "DELETE FROM APP_ACT_COE_PAL_CORRELATE WHERE WSID=?"; + DBSql.update(conn, deleteCorrelateSql, params); + String specialPropertySql = "DELETE FROM APP_ACT_COE_PAL_SPCL_PROP WHERE WSID=?"; + DBSql.update(conn, specialPropertySql, params); + String deleteRepositorySql = "DELETE FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?"; + DBSql.update(conn, deleteRepositorySql, params); + } catch (SQLException e) { + e.printStackTrace(); + flag = false; + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + flag = false; + } + } finally { + try { + conn.setAutoCommit(true); + } catch (SQLException e) { + e.printStackTrace(); + flag = false; + } + DBSql.close(conn); + } + + return flag; + } + + /** + * 删除文件,节点的属性和形状的配置信息 + * + * @param wsId + * @return + */ + public boolean deleteFileShapeAttrByWsId(String wsId) { + boolean flag = true; + Connection conn = DBSql.open(); + try { + conn.setAutoCommit(false); + Object[] params = new Object[] { wsId }; + String deleteFileAttrSql = "DELETE FROM APP_ACT_COE_PAL_ATTR WHERE WSID=?"; + DBSql.update(conn, deleteFileAttrSql, params); + String deleteShapeAttrSql = "DELETE FROM APP_ACT_COE_PAL_SHAPE_ATTR WHERE WSID=?"; + DBSql.update(conn, deleteShapeAttrSql, params); + String deleteShapeConfigSql = "DELETE FROM APP_ACT_COE_PAL_SHAPE_CONFIG WHERE WSID=?"; + DBSql.update(conn, deleteShapeConfigSql, params); + } catch (SQLException e) { + e.printStackTrace(); + flag = false; + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + flag = false; + } + } finally { + try { + conn.setAutoCommit(true); + } catch (SQLException e) { + e.printStackTrace(); + flag = false; + } + DBSql.close(conn); + } + + return flag; + } + + /** + * 根据资产库id删除repository表中的数据 + * @param wsId + * @return + * @author tanj + */ + public boolean deleteRepositorysModelByWsId(String wsId) { + boolean flag = true; + Connection conn = DBSql.open(); + try { + conn.setAutoCommit(false); + Object[] params = new Object[] { wsId }; + String deleteRepositorySql = "DELETE FROM APP_ACT_COE_PAL_REPOSITORY WHERE WSID=?"; + DBSql.update(conn, deleteRepositorySql, params); + } catch (SQLException e) { + e.printStackTrace(); + flag = false; + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + flag = false; + } + } finally { + try { + conn.setAutoCommit(true); + } catch (SQLException e) { + e.printStackTrace(); + flag = false; + } + DBSql.close(conn); + } + + return flag; + } + + /** + * 查询有关联关系的模型 + * + * @param name + * @param wsId + * @param modelMethodId + * @param relationMethodId + * @param versionType + * @return + * @author zhangming + */ + public List> searchModelsByRelation(String name, String wsId, String modelMethodId, String relationMethodId, String versionType) { + StringBuilder sql = new StringBuilder("SELECT pal1.ID AS modelId, pal2.ID AS relationId, r.FILEID, r.RELATIONFILEID, r.SHAPEID, r.RELATIONSHAPEID, r.SHAPETEXT, r.RELATIONSHAPETEXT FROM APP_ACT_COE_PAL_REPOSITORY pal1, APP_ACT_COE_PAL_REPOSITORY pal2, APP_ACT_COE_PAL_SHAPE_RLAT r").append(" WHERE pal1.WSID=? AND pal2.WSID=? AND pal2.PLMETHODID IN (" + relationMethodId + ") AND (pal1.ID = r.FILEID AND pal2.ID=r.RELATIONFILEID OR pal1.ID = r.RELATIONFILEID AND pal2.ID=r.FILEID)"); + if (name != null && !"".equals(name)) { + String namelike = ""; + name = name.toLowerCase(); + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql.append(" AND LOWER(pal1.PLNAME) LIKE ").append(namelike); + } + if ("isuse".equals(versionType.toLowerCase())) { + sql.append(" AND pal1.ISUSE=1 AND pal2.ISUSE=1 "); + } else { + sql.append(" AND pal1.ISPUBLISH=1 AND pal2.ISPUBLISH=1"); + } + if (modelMethodId != null && !"".equals(modelMethodId)) { + sql.append(" AND pal1.PLMETHODID IN (" + modelMethodId + ")"); + } + return DBSql.query(sql.toString(), new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map result = new HashMap(); + result.put("modelId", rs.getString(1)); + result.put("relationModelId", rs.getString(2)); + result.put("fileId", rs.getString(3)); + result.put("relationFileId", rs.getString(4)); + result.put("shapeId", rs.getString(5)); + result.put("relationShapeId", rs.getString(6)); + result.put("shapeText", rs.getString(7)); + result.put("relationShapeText", rs.getString(8)); + return result; + } + }, new Object[] { wsId, wsId }); + } + + /** + * 关联查询,不包含关联关系 + * + * @param name + * @param wsId + * @param modelMethodId + * @param versionType + * @return + * @author zhangming + */ + public List searchModelsByRelation(String name, String wsId, String modelMethodId, String versionType) { + StringBuilder sql = new StringBuilder("SELECT * FROM APP_ACT_COE_PAL_REPOSITORY pal WHERE WSID = ?"); + if (name != null && !"".equals(name)) { + String namelike = ""; + name = name.toLowerCase(); + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql.append(" AND LOWER(PLNAME) LIKE ").append(namelike); + } + if ("isuse".equals(versionType.toLowerCase())) { + sql.append(" AND ISUSE=1"); + } else { + sql.append(" AND ISPUBLISH=1"); + } + if (modelMethodId != null && !"".equals(modelMethodId)) { + sql.append(" AND PLMETHODID IN (" + modelMethodId + ")"); + } + + return DBSql.query(sql.toString(), new PALRespositoryModelMapper(), new Object[] { wsId }); + } + + /** + * 获取部门下的流程根节点(仅适用于责任部门选择address) + * @param deptIds 部门ID + * @param wsId 资产库Id,为空则查询默认资产库 + * @param methodId + * @param category + * @param isUsed + * @param isPublish + * @return + */ + public List getRootPALRepositoryModelsByDeptId(String deptIds, String wsId, String methodId, String category, boolean isUsed, boolean isPublish) { + Map params = new HashMap(); + String deptSql = " AND PLDUTYDEPT in (" + deptIds + ")"; + + String wsIdSql = ""; + if (UtilString.isEmpty(wsId)) { + String defaultWsId = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_DEFAULT_WSID); + if (!UtilString.isEmpty(defaultWsId)) { + wsId = defaultWsId; + } + } + if (!UtilString.isEmpty(wsId)) { + wsIdSql = " AND WSID = :WSID"; + params.put("WSID", wsId); + } + + String methodIdSql = ""; + if (!UtilString.isEmpty(methodId)) { + methodIdSql = " AND PLMETHODID = :METHODID"; + params.put("METHODID", methodId); + } + + String categorySql = ""; + if (!UtilString.isEmpty(category)) { + categorySql = " AND PLCATEGORY = :CATEGORY"; + params.put("CATEGORY", category); + } + + String useSql = ""; + if (isUsed) { + useSql = " AND ISUSE=1"; + } + + String publishSql = ""; + if (isPublish) { + publishSql = " AND ISPUBLISH=1"; + } + +// String sql = "SELECT * FROM APP_ACT_COE_PAL_REPOSITORY pal WHERE" +// + " PLLEVEL = (SELECT MIN(PLLEVEL) FROM APP_ACT_COE_PAL_REPOSITORY " +// + " WHERE 1=1 " + useSql + publishSql + wsIdSql + deptSql + methodIdSql + categorySql + ") " +// + useSql + publishSql + wsIdSql + deptSql + methodIdSql + categorySql +// + " ORDER BY PLLEVEL, PLORDERINDEX"; + String sql = "SELECT * FROM APP_ACT_COE_PAL_REPOSITORY pal WHERE 1=1 " + + useSql + publishSql + wsIdSql + deptSql + methodIdSql + categorySql + + " ORDER BY PLLEVEL, PLORDERINDEX"; + + return DBSql.query(sql, params, new PALRespositoryModelMapper()); + } + + /** + * 获取部门下的流程(仅适用于责任部门选择org) + * @param deptIds 部门ID + * @param wsId 资产库Id,为空则查询默认资产库 + * @param methodId + * @param category + * @param isUsed + * @param isPublish + * @return + */ + public List getAllPALRepositoryModelsByDeptId(String deptIds, String wsId, String methodId, String category, boolean isUsed, boolean isPublish) { + Map params = new HashMap(); + String deptSql = ""; + StringBuffer sb = new StringBuffer(); + String[] listStr = deptIds.split(","); + for (int i = 0, len = listStr.length; i < len; i++) { + if (i == 0) { + sb.append(" AND PLDUTYDEPT IN ("); + } + sb.append(listStr[i]); + if (i >= 900 && i < len - 1) { + if (i % 900 == 0) { + sb.append(") OR PLDUTYDEPT IN ("); + } else { + sb.append(","); + } + + } else if (i < len - 1) { + sb.append(","); + } + if (i == len - 1) { + sb.append(")"); + } + } + deptSql = sb.toString(); + + String wsIdSql = ""; + if (UtilString.isEmpty(wsId)) { + String defaultWsId = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_DEFAULT_WSID); + if (!UtilString.isEmpty(defaultWsId)) { + wsId = defaultWsId; + } + } + if (!UtilString.isEmpty(wsId)) { + wsIdSql = " AND WSID = :WSID"; + params.put("WSID", wsId); + } + + String methodIdSql = ""; + if (!UtilString.isEmpty(methodId)) { + methodIdSql = " AND PLMETHODID = :METHODID"; + params.put("METHODID", methodId); + } + + String categorySql = ""; + if (!UtilString.isEmpty(category)) { + categorySql = " AND PLCATEGORY = :CATEGORY"; + params.put("CATEGORY", category); + } + + String useSql = ""; + if (isUsed) { + useSql = " AND ISUSE=1"; + } + + String publishSql = ""; + if (isPublish) { + publishSql = " AND ISPUBLISH=1"; + } + + String sql = "SELECT * FROM APP_ACT_COE_PAL_REPOSITORY pal WHERE 1=1" + + useSql + publishSql + wsIdSql + deptSql + methodIdSql + categorySql + + " ORDER BY PLLEVEL,PLORDERINDEX"; + + return DBSql.query(sql, params, new PALRespositoryModelMapper()); + } + + /** + * 资产库查询 + * @param wsId + * @param plName + * @param plNo + * @param pid + * @param bottomLevel + * @param plDesc + * @param plRd + * @param plRp + * @param pm + * @param plInput + * @param plOutput + * @param execType + * @param color + * @param category + * @param methodId + * @param isUsed + * @param isPublish + * @param dutyDept + * @param dutyPerson + * @param paramMap + * @param order + * @return + */ + public List searchRepositoryList(String wsId, String plName, String plNo, String pid, int bottomLevel, String plDesc, String plRd, String plRp, + String pm, String plInput, String plOutput, int execType, String color, String category, String methodId, boolean isUsed, boolean isPublish, String dutyDept, + String dutyPerson, int plLevel, JSONArray paramMap, String order) { + StringBuilder sql = new StringBuilder("SELECT * FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE 1=1"); + Map params = new HashMap(); + if (!UtilString.isEmpty(wsId)) { + sql.append(" AND WSID=:WSID"); + params.put("WSID", wsId); + + } + if (!UtilString.isEmpty(plName)) { + String namelike = ""; + if (StringUtil.containSpecialChar(plName)) { + namelike = "'%" + StringUtil.replaceSqlStr(plName, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + plName + "%'"; + } + sql.append(" AND PLNAME like ").append(namelike); + } + if (!UtilString.isEmpty(plNo)) { + sql.append(" AND PLNO=:PLNO"); + params.put("PLNO", plNo); + } + if (!UtilString.isEmpty(pid)) { + sql.append(" AND PLPARENTID=:PID"); + params.put("PID", pid); + } + if (bottomLevel != -1) { + sql.append(" AND PLISBOTTOMLEVEL=:BOTTOMLEVEL"); + params.put("BOTTOMLEVEL", bottomLevel); + } + if (!UtilString.isEmpty(plDesc)) { + sql.append(" AND PLDESC LIKE :PLDESC"); + params.put("PLDESC", "%" + plDesc + "%"); + } + if (!UtilString.isEmpty(plRd)) { + sql.append(" AND PLRD=:PLRD"); + params.put("PLRD", plRd); + } + if (!UtilString.isEmpty(plRp)) { + sql.append(" AND PLRP=:PLRP"); + params.put("PLRP", plRp); + } + if (!UtilString.isEmpty(pm)) { + sql.append(" AND PM=:PM"); + params.put("PM", pm); + } + if (!UtilString.isEmpty(plInput)) { + sql.append(" AND PLINPUT LIKE PLINPUT"); + params.put("PLINPUT", "%" + plInput + "%"); + } + if (!UtilString.isEmpty(plOutput)) { + sql.append(" AND PLOUTPUT LIKE PLOUTPUT"); + params.put("PLOUTPUT", "%" + plOutput + "%"); + } + if (execType != -1) { + sql.append(" AND PLEXECTYPE=:PLEXECTYPE"); + params.put("PLEXECTYPE", execType); + } + if (!UtilString.isEmpty(color)) { + sql.append(" AND PLCOLOR=:PLCOLOR"); + params.put("PLCOLOR", color); + } + if (!UtilString.isEmpty(category)) { + sql.append(" AND PLCATEGORY=:PLCATEGORY"); + params.put("PLCATEGORY", category); + } + if (!UtilString.isEmpty(methodId)) { + sql.append(" AND PLMETHODID=:PLMETHODID"); + params.put("PLMETHODID", methodId); + } + if (isUsed) { + sql.append(" AND ISUSE=1"); + } + if (isPublish) { + sql.append(" AND ISPUBLISH=1"); + } + if (!UtilString.isEmpty(dutyDept)) { + sql.append(" AND PLDUTYDEPT=:PLDUTYDEPT"); + params.put("PLDUTYDEPT", dutyDept); + } + if (!UtilString.isEmpty(dutyPerson)) { + sql.append(" AND PLDUTYPERSON=:PLDUTYPERSON"); + params.put("PLDUTYPERSON", dutyPerson); + } + if (plLevel != -1) { + sql.append(" AND PLLEVEL=:PLLEVEL"); + params.put("PLLEVEL", plLevel); + } + if (paramMap != null && paramMap.size() > 0) { + boolean flag = false; + StringBuilder tables = new StringBuilder(""); + StringBuilder wheres = new StringBuilder(""); + for (int i = 0; i < paramMap.size(); i++) { + JSONObject param = paramMap.getJSONObject(i); + if (flag) { + tables.append(" , "); + wheres.append(" AND "); + } else { + flag = true; + wheres.append(" WHERE "); + } + tables.append(" APP_ACT_COE_PAL_PROP p" + i); + String key = param.getString("key"); + String value = param.getString("value"); + wheres.append("p" + i + ".PROPERTYID='" + key + "' AND p" + i + ".PROPERTYVALUE" + value); + } + sql.append(" AND ID IN (SELECT p0.PLID FROM ").append(tables).append(wheres).append(" )"); + } + + if (!UtilString.isEmpty(order)) { + sql.append(" ORDER BY ").append(order); + } + + return DBSql.query(sql.toString(), params, new PALRespositoryModelMapper()); + } + + /** + * 流程树--搜索流程 + * @param wsId + * @param methodId + * @param category + * @param isUsed + * @param isPublish + * @param deptIds 部门ids + * @param displayType 发布版本下,没有发布版本流程是否可见:hidden-不可见, visible-可见 + * @return + */ + public List searchRepositoryListForProcessTree(String wsId, String methodId, String category, boolean isUse, boolean isPublish, String deptIds, String palName) { + StringBuilder sql = new StringBuilder("SELECT * FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE 1=1"); + Map paraMap = new HashMap(); + if (UtilString.isEmpty(wsId)) { + String defaultWsId = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_DEFAULT_WSID); + if (!UtilString.isEmpty(defaultWsId)) { + wsId = defaultWsId; + } + } + if (!UtilString.isEmpty(wsId)) { + sql.append(" AND WSID = :WSID"); + paraMap.put("WSID", wsId); + } + if (!UtilString.isEmpty(methodId)) { + sql.append(" AND PLMETHODID = :METHODID "); + paraMap.put("METHODID", methodId); + } + + if (!UtilString.isEmpty(category)) { + sql.append(" AND PLCATEGORY = :CATEGORY "); + paraMap.put("CATEGORY", category); + } + if (isUse) { + sql.append(" AND ISUSE=1 "); + } + if (isPublish) { + sql.append(" AND ISPUBLISH=1 "); + } + if (!UtilString.isEmpty(deptIds)) { + sql.append(" AND PLDUTYDEPT IN (").append(deptIds).append(")"); + } + if (!UtilString.isEmpty(palName)) { + sql.append(" AND PLNAME LIKE :PALNAME "); + paraMap.put("PALNAME", "%" + palName + "%"); + } + sql.append(" ORDER BY PLLEVEL,PLORDERINDEX "); + return DBSql.query(sql.toString(), paraMap, new PALRespositoryModelMapper()); + } + + /** + * 获取指定部门的指定层级的流程 + * @param deptId + * @param wsId + * @param methodId + * @param category + * @param isUsed + * @param isPublish + * @param level + * @return + */ + public List getSpecityLevelByDeptId(String deptId, String wsId, String methodId, String category, boolean isUsed, boolean isPublish, int level) { + Map paraMap = new HashMap(); + String deptSql = ""; + StringBuffer sb = new StringBuffer(); + String[] listStr = deptId.split(","); + for (int i = 0, len = listStr.length; i < len; i++) { + if (i == 0) { + sb.append(" AND PLDUTYDEPT IN ("); + } + sb.append(listStr[i]); + if (i >= 900 && i < len - 1) { + if (i % 900 == 0) { + sb.append(") OR PLDUTYDEPT IN ("); + } else { + sb.append(","); + } + + } else if (i < len - 1) { + sb.append(","); + } + if (i == len - 1) { + sb.append(")"); + } + } + deptSql = sb.toString(); + String wsIdSql = ""; + if (UtilString.isEmpty(wsId)) { + String defaultWsId = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_DEFAULT_WSID); + if (!UtilString.isEmpty(defaultWsId)) { + wsId = defaultWsId; + } + } + if (!UtilString.isEmpty(wsId)) { + wsIdSql = " AND WSID = :WSID"; + paraMap.put("WSID", wsId); + } + String methodIdSql = ""; + if (!UtilString.isEmpty(methodId)) { + methodIdSql = " AND PLMETHODID = :METHODID"; + paraMap.put("METHODID", methodId); + } + + String categorySql = ""; + if (!UtilString.isEmpty(category)) { + categorySql = " AND PLCATEGORY = :CATEGORY"; + paraMap.put("CATEGORY", category); + } + + String useSql = ""; + if (isUsed) { + useSql = " AND ISUSE=1"; + } + + String publishSql = ""; + if (isPublish) { + publishSql = " AND ISPUBLISH=1"; + } + String levelSql = ""; + if (level > 0) { + levelSql = " AND PLLEVEL = :PLLEVEL"; + paraMap.put("PLLEVEL", level); + } + String sql = "SELECT * FROM APP_ACT_COE_PAL_REPOSITORY pal WHERE 1=1 " + useSql + publishSql + wsIdSql + deptSql + methodIdSql + categorySql + levelSql + " ORDER BY PLLEVEL ASC"; + + return DBSql.query(sql, paraMap, new PALRespositoryModelMapper()); + } + + /** + * 流程属性模糊查询 + * @param wsId + * @param plName + * @param plNo + * @param pid + * @param bottomLevel + * @param plDesc + * @param plRd + * @param plRp + * @param pm + * @param plInput + * @param plOutput + * @param execType + * @param color + * @param category + * @param methodId + * @param isUsed + * @param isPublish + * @param dutyDept + * @param dutyPerson + * @param plLevel + * @param paramMap + * @param order + * @return + */ + public List searchByBlur(String wsId, String plName, String plNo, String pid, int bottomLevel, String plDesc, String plRd, String plRp, + String pm, String plInput, String plOutput, int execType, String color, String category, String methodId, boolean isUsed, boolean isPublish, String dutyDept, + String dutyPerson, int plLevel, JSONArray paramMap, String order) { + StringBuilder sql = new StringBuilder("SELECT * FROM " + PALRepositoryModelImpl.DATABASE_ENTITY + " WHERE 1=1"); + Map params = new HashMap(); + if (!UtilString.isEmpty(wsId)) { + sql.append(" AND WSID=:WSID"); + params.put("WSID", wsId); + } + sql.append(" AND ("); + if (!UtilString.isEmpty(plName)) { + String namelike = ""; + if (StringUtil.containSpecialChar(plName)) { + namelike = "'%" + StringUtil.replaceSqlStr(plName, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + plName + "%'"; + } + sql.append(" PLNAME like ").append(namelike); + } + if (!UtilString.isEmpty(plNo)) { + sql.append(" OR PLNO LIKE :PLNO"); + params.put("PLNO", "%" + plNo + "%"); + } + if (!UtilString.isEmpty(plDesc)) { + sql.append(" OR PLDESC LIKE :PLDESC"); + params.put("PLDESC", "%" + plDesc + "%"); + } + if (!UtilString.isEmpty(pm)) { + if (pm.equals("规划")) { + pm = "0"; + } else if (pm.equals("梳理")) { + pm = "1"; + } else if (pm.equals("设计")) { + pm = "2"; + } else if (pm.equals("实施")) { + pm = "3"; + } else if (pm.equals("测试")) { + pm = "4"; + } else if (pm.equals("运行")) { + pm = "5"; + } else if (pm.equals("暂停")) { + pm = "6"; + } + sql.append(" OR PM=:PM"); + params.put("PM", pm); + } + if (!UtilString.isEmpty(plInput)) { + sql.append(" OR PLINPUT LIKE PLINPUT"); + params.put("PLINPUT", "%" + plInput + "%"); + } + if (!UtilString.isEmpty(plOutput)) { + sql.append(" OR PLOUTPUT LIKE PLOUTPUT"); + params.put("PLOUTPUT", "%" + plOutput + "%"); + } + if (execType != -1) { + sql.append(" AND PLEXECTYPE=:PLEXECTYPE"); + params.put("PLEXECTYPE", execType); + } + if (!UtilString.isEmpty(color)) { + sql.append(" AND PLCOLOR=:PLCOLOR"); + params.put("PLCOLOR", color); + } + if (!UtilString.isEmpty(category)) { + sql.append(" OR PLCATEGORY=:PLCATEGORY"); + params.put("PLCATEGORY", category); + } + if (!UtilString.isEmpty(methodId)) { + if (methodId.indexOf("价值链图") > -1) { + methodId = "process.evc"; + } else if (methodId.indexOf("流程图") > -1) { + methodId = "process.flowchart"; + } else if (methodId.indexOf("事件驱动的过程链图") > -1) { + methodId = "process.epc"; + } else if (methodId.indexOf("BPMN流程图") > -1) { + methodId = "process.bpmn2"; + } + sql.append(" OR PLMETHODID=:PLMETHODID"); + params.put("PLMETHODID", methodId); + } + sql.append(" )"); + if (isUsed) { + sql.append(" AND ISUSE=1"); + } + if (isPublish) { + sql.append(" AND ISPUBLISH=1"); + } + if (!UtilString.isEmpty(dutyDept)) { + sql.append(" AND PLDUTYDEPT=:PLDUTYDEPT"); + params.put("PLDUTYDEPT", dutyDept); + } + if (!UtilString.isEmpty(dutyPerson)) { + sql.append(" AND PLDUTYPERSON=:PLDUTYPERSON"); + params.put("PLDUTYPERSON", dutyPerson); + } + if (plLevel != -1) { + sql.append(" AND PLLEVEL=:PLLEVEL"); + params.put("PLLEVEL", plLevel); + } + if (paramMap != null && paramMap.size() > 0) { + boolean flag = false; + StringBuilder tables = new StringBuilder(""); + StringBuilder wheres = new StringBuilder(""); + for (int i = 0; i < paramMap.size(); i++) { + JSONObject param = paramMap.getJSONObject(i); + if (flag) { + tables.append(" , "); + wheres.append(" AND "); + } else { + flag = true; + wheres.append(" WHERE "); + } + tables.append(" APP_ACT_COE_PAL_PROP p" + i); + String key = param.getString("key"); + String value = param.getString("value"); + wheres.append("p" + i + ".PROPERTYID='" + key + "' AND p" + i + ".PROPERTYVALUE" + value); + } + sql.append(" AND ID IN (SELECT p0.PLID FROM ").append(tables).append(wheres).append(" )"); + } + + if (!UtilString.isEmpty(order)) { + sql.append(" ORDER BY ").append(order); + } + + return DBSql.query(sql.toString(), params, new PALRespositoryModelMapper()); + } + + /** + * 获取流程(库,分类,方式,使用,发布,级别) + * @param wsId 资产库Id,为空则查询默认资产库 + * @param methodId + * @param category + * @param isUsed + * @param isPublish + * @return + */ + public List getDoorPALRepositoryModels(String wsId, int level, String methodId, String category, boolean isUsed, boolean isPublish) { + Map params = new HashMap(); + // + String wsIdSql = ""; + if (UtilString.isEmpty(wsId)) { + String defaultWsId = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_DEFAULT_WSID); + if (!UtilString.isEmpty(defaultWsId)) { + wsId = defaultWsId; + } + } + if (!UtilString.isEmpty(wsId)) { + wsIdSql = " AND WSID = :WSID"; + params.put("WSID", wsId); + } + // + String levelSql = ""; + if(level>0) { + levelSql = " AND PLLEVEL = :LEVEL "; + params.put("LEVEL", level); + } + // + String methodIdSql = ""; + if (!UtilString.isEmpty(methodId)) { + methodIdSql = " AND PLMETHODID = :METHODID"; + params.put("METHODID", methodId); + } + // + String categorySql = ""; + if (!UtilString.isEmpty(category)) { + categorySql = " AND PLCATEGORY = :CATEGORY"; + params.put("CATEGORY", category); + } + // + String useSql = ""; + if (isUsed) { + useSql = " AND ISUSE=1"; + } + // + String publishSql = ""; + if (isPublish) { + publishSql = " AND ISPUBLISH=1"; + } + // + String sql = "SELECT * FROM APP_ACT_COE_PAL_REPOSITORY pal WHERE 1=1 " + + useSql + publishSql + wsIdSql + methodIdSql + categorySql + levelSql + + " ORDER BY PLLEVEL, PLORDERINDEX"; + return DBSql.query(sql, params, new PALRespositoryModelMapper()); + } + + /** + * 批量更新流程路径 + * @param map + * @return + */ + public boolean updateFilePath(Map map) { + boolean completeSuccess = false; + if (!map.isEmpty()) { + Connection conn = DBSql.open(); + PreparedStatement ps = null; + java.sql.ResultSet rset = null; + try { + conn.setAutoCommit(false); + String sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_FILE_PATH + "=? where " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + ps = conn.prepareStatement(sql); + for(Map.Entry entry : map.entrySet()) { + ps.setString(1, entry.getValue()); + ps.setString(2, entry.getKey()); + ps.addBatch(); + } + int[] results = ps.executeBatch(); + for (int i = 0; i < results.length; i++) { + if ((results[i] >= 0) || (results[i] == PreparedStatement.SUCCESS_NO_INFO)) { + completeSuccess = true; + } + } + if (completeSuccess) { + conn.commit(); + } else { + conn.rollback(); + PALRepositoryCache.getCache().reload(true); + } + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, ps, rset); + } + } + return completeSuccess; + } + + /** + * 更新扩展字段内容 + * @param uuid + * @param ext1 + * @param ext2 + * @param ext3 + * @param ext4 + */ + public int updateRepositoryExt(String uuid, String ext1, String ext2, String ext3, String ext4) { + PALRepositoryModelImpl plModel = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(uuid); + String sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_PL_EXT1 + "=?," + PALRepositoryModelImpl.FIELD_PL_EXT2 + "=?," + PALRepositoryModelImpl.FIELD_PL_EXT3 + "=?," + PALRepositoryModelImpl.FIELD_PL_EXT4 + "=? WHERE " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + Object[] args = {ext1 == null ? "" : ext1, ext2 == null ? "" : ext2, ext3 == null ? "" : ext3, ext4 == null ? "" : ext4, uuid}; + int r = DBSql.update(sql, args); + if (r > 0) { + plModel.setExt1(ext1 == null ? "" : ext1); + plModel.setExt2(ext2 == null ? "" : ext2); + plModel.setExt3(ext3 == null ? "" : ext3); + plModel.setExt4(ext4 == null ? "" : ext4); + PALRepositoryCache.getCache().put(uuid, plModel); + } + return r; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryAttributeDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryAttributeDao.java new file mode 100644 index 00000000..4c97aeca --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryAttributeDao.java @@ -0,0 +1,360 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.BatchPreparedStatementSetter; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryAttributeCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryAttributeModel; +import com.actionsoft.exception.AWSDataAccessException; + +public class PALRepositoryAttributeDao extends DaoObject{ + + @Override + public int insert(PALRepositoryAttributeModel model) + throws AWSDataAccessException { + Map paraMap = new HashMap(); + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + paraMap.put(PALRepositoryAttributeModel.FIELD_UUID, model.getId()); + paraMap.put(PALRepositoryAttributeModel.FIELD_WSID, model.getWsId()); + paraMap.put(PALRepositoryAttributeModel.FIELD_ATTRID, model.getAttrId()); + paraMap.put(PALRepositoryAttributeModel.FIELD_ATTRNAME, model.getAttrName()); + paraMap.put(PALRepositoryAttributeModel.FIELD_ATTRVALUE, model.getAttrValue()); + paraMap.put(PALRepositoryAttributeModel.FIELD_CATEGORY, model.getCategory()); + paraMap.put(PALRepositoryAttributeModel.FIELD_METHODID, model.getMethodId()); + paraMap.put(PALRepositoryAttributeModel.FIELD_TYPE, model.getType()); + paraMap.put(PALRepositoryAttributeModel.FIELD_IS_DELETE, model.getIsDelete()); + paraMap.put(PALRepositoryAttributeModel.FIELD_ORDERINDEX, model.getOrderIndex()); + int result = DBSql.update(DBSql.getInsertStatement(entityName(), paraMap), paraMap); + if (result > 0) { + PALRepositoryAttributeCache.getCache().put(model.getId(), model); + } + return result; + } + + @Override + public int update(PALRepositoryAttributeModel model) + throws AWSDataAccessException { + String sql = "UPDATE " + entityName() + " SET " + PALRepositoryAttributeModel.FIELD_WSID + "=:WSID, "+PALRepositoryAttributeModel.FIELD_ATTRID + ":=ATTRID, " + + PALRepositoryAttributeModel.FIELD_ATTRNAME + "=:ATTRNAME, " + PALRepositoryAttributeModel.FIELD_ATTRVALUE + "=:ATTRVALUE, " + PALRepositoryAttributeModel.FIELD_CATEGORY + "=:CATEGORY, " + PALRepositoryAttributeModel.FIELD_METHODID + "=:METHODID, " + + PALRepositoryAttributeModel.FIELD_TYPE + "=:TYPE," + PALRepositoryAttributeModel.FIELD_IS_DELETE +"=:ISDELETE WHERE " + PALRepositoryAttributeModel.FIELD_UUID + "=:ID "; + Map paraMap = new HashMap(); + paraMap.put("ID", model.getId()); + paraMap.put("WSID", model.getWsId()); + paraMap.put("ATTRID", model.getAttrId()); + paraMap.put("ATTRNAME", model.getAttrName()); + paraMap.put("ATTRVALUE", model.getAttrValue()); + paraMap.put("CATEGORY", model.getCategory()); + paraMap.put("METHODID", model.getMethodId()); + paraMap.put("TYPE", model.getType()); + paraMap.put("ISDELETE", model.getIsDelete()); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + PALRepositoryAttributeCache.getCache().put(model.getId(), model); + } + return r; + } + + /** + * 更新删除状态 + * @param model + * @return + */ + public int updateDeleteStatus(PALRepositoryAttributeModel model) throws AWSDataAccessException{ + String sql = "UPDATE " + entityName() + " SET " + PALRepositoryAttributeModel.FIELD_IS_DELETE + "=:ISDELETE WHERE " + PALRepositoryAttributeModel.FIELD_UUID + "=:ID "; + Map paraMap = new HashMap<>(); + paraMap.put("ISDELETE", model.getIsDelete()); + paraMap.put("ID", model.getId()); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + PALRepositoryAttributeCache.getCache().put(model.getId(), model); + } + return r; + } + + /** + * 更新删除状态 + * @param wsId 资产库id + * @param attrId 删除ID + * @param methodId 分类 + * @return + */ + public int updateDeleteStatus(String wsId, String attrId, String methodId, String status) { + String sql = "UPDATE " + entityName() + " SET " + PALRepositoryAttributeModel.FIELD_IS_DELETE + "=:ISDELETE WHERE " + PALRepositoryAttributeModel.FIELD_WSID + "=:WSID AND " + PALRepositoryAttributeModel.FIELD_ATTRID + "=:ATTRID AND " + PALRepositoryAttributeModel.FIELD_METHODID + "=:METHODID"; + Map paraMap = new HashMap<>(); + paraMap.put("ISDELETE", status); + paraMap.put("ATTRID", attrId); + paraMap.put("METHODID", methodId); + paraMap.put("WSID", wsId); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + PALRepositoryAttributeModel model = PALRepositoryAttributeCache.getAttributeByMethodIdAndAttrId(wsId, methodId, attrId); + if (model != null) { + model.setIsDelete(status); + PALRepositoryAttributeCache.getCache().put(model.getId(), model); + } + } + return r; + } + + @Override + public String entityName() { + return PALRepositoryAttributeModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return new PALRepositoryAttributeMapper(); + } + + private class PALRepositoryAttributeMapper implements RowMapper { + + @Override + public PALRepositoryAttributeModel mapRow(ResultSet rs, int arg1) + throws SQLException { + PALRepositoryAttributeModel model = new PALRepositoryAttributeModel(); + model.setId(rs.getString(PALRepositoryAttributeModel.FIELD_UUID)); + model.setWsId(rs.getString(PALRepositoryAttributeModel.FIELD_WSID)); + model.setAttrId(rs.getString(PALRepositoryAttributeModel.FIELD_ATTRID)); + model.setAttrName(rs.getString(PALRepositoryAttributeModel.FIELD_ATTRNAME)); + model.setAttrValue(rs.getString(PALRepositoryAttributeModel.FIELD_ATTRVALUE)); + model.setCategory(rs.getString(PALRepositoryAttributeModel.FIELD_CATEGORY)); + model.setMethodId(rs.getString(PALRepositoryAttributeModel.FIELD_METHODID)); + model.setType(rs.getString(PALRepositoryAttributeModel.FIELD_TYPE)); + model.setIsDelete(rs.getString(PALRepositoryAttributeModel.FIELD_IS_DELETE)); + model.setOrderIndex(rs.getInt(PALRepositoryAttributeModel.FIELD_ORDERINDEX)); + return model; + } + + } + /** + * 根据attrId 删除数据 + * @param wsId + * @param attrId + * @return + */ + public int deleteByAttrId(String wsId, String attrId, String methodId) throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName() + " WHERE WSID = :WSID AND ATTRID = :ATTRID AND METHODID = :METHODID "; + Map paraMap = new HashMap(); + paraMap.put("WSID", wsId); + paraMap.put("ATTRID", attrId); + paraMap.put("METHODID", methodId); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + PALRepositoryAttributeModel attributeModel = PALRepositoryAttributeCache.getAttributeByMethodIdAndAttrId(wsId, methodId, attrId); + if (attributeModel != null) { + PALRepositoryAttributeCache.getCache().remove(attributeModel.getId()); + } + } + return r; + } + /** + * 根据attrId 删除数据 + * @param wsId + * @param attrId + * @return + */ + public int deleteByAttrId(String wsId, String attrId) throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName() + " WHERE WSID = :WSID AND ATTRID = :ATTRID "; + Map paraMap = new HashMap(); + paraMap.put("WSID", wsId); + paraMap.put("ATTRID", attrId); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + List attributeModelList = PALRepositoryAttributeCache.getAttributeByAttrId(wsId, attrId); + if (attributeModelList != null && attributeModelList.size() > 0) { + for (PALRepositoryAttributeModel attributeModel : attributeModelList) { + PALRepositoryAttributeCache.getCache().remove(attributeModel.getId()); + } + } + } + return r; + } + + /** + * 根据attrId 删除数据 + * @param methodId + * @param attrId + * @return + */ + public int deleteByMethodIdAndAttrId(String methodId, String attrId) throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName() + " WHERE METHODID = :METHODID AND ATTRID = :ATTRID "; + Map paraMap = new HashMap(); + paraMap.put("METHODID", methodId); + paraMap.put("ATTRID", attrId); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + List attributeModelList = PALRepositoryAttributeCache.getAttributeByMethodIdAndAttrId(methodId, attrId); + if (attributeModelList != null && attributeModelList.size() > 0) { + for (PALRepositoryAttributeModel attributeModel : attributeModelList) { + PALRepositoryAttributeCache.getCache().remove(attributeModel.getId()); + } + } + } + return r; + } + + /** + * 批量插入数据 + * + * @param configs + * @return + * @throws SQLException + */ + public int[] batchInsert(List configs) throws SQLException { + Connection conn = DBSql.open(); + conn.setAutoCommit(false); + int[] resultNum; + try { + //新增所有配置信息 + String sql = "INSERT INTO " + entityName() + "(ID, WSID, ATTRID, ATTRNAME, ATTRVALUE, CATEGORY, METHODID, TYPE, ISDELETE, ORDERINDEX) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + for (PALRepositoryAttributeModel model : configs) { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + } + // 执行批量 + resultNum = DBSql.batch(conn, sql, new BatchPreparedStatementSetter() { + @Override + public void setValues(PreparedStatement pst, int paramInt) throws SQLException { + PALRepositoryAttributeModel model = configs.get(paramInt); + pst.setString(1, model.getId()); + pst.setString(2, model.getWsId()); + pst.setString(3, model.getAttrId()); + pst.setString(4, model.getAttrName()); + pst.setString(5, model.getAttrValue()); + pst.setString(6, model.getCategory()); + pst.setString(7, model.getMethodId()); + pst.setString(8, model.getType()); + pst.setString(9, model.getIsDelete()); + pst.setInt(10, model.getOrderIndex()); + } + + public int getBatchSize() { + return configs.size(); + } + }); + conn.commit(); + return resultNum; + } catch(SQLException e) { + conn.rollback(); + throw e; + }finally { + DBSql.close(conn); + } + } + + public int[] updateAttributeByCondition(final List list) throws SQLException { + Connection conn = DBSql.open(); + conn.setAutoCommit(false); + int[] resultNum = null; + try { + String sql = "INSERT INTO " + entityName() + "(ID, WSID, ATTRID, ATTRNAME, ATTRVALUE, CATEGORY, METHODID, TYPE, ISDELETE) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"; + if (list != null && list.size() > 0) { + for (PALRepositoryAttributeModel model : list) { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + } + } + resultNum = DBSql.batch(conn, sql, new BatchPreparedStatementSetter(){ + + @Override + public int getBatchSize() { + return 0; + } + + @Override + public void setValues(PreparedStatement pst, int paramInt) throws SQLException { + } + + }); + } catch (Exception e) { + e.printStackTrace(); + } + return resultNum; + } + + /** + * 获取指定资产库的某类图的文件属性列表 + * + * @param methodId + * @return + */ + public List getFileAttributeByMethodId(String methodId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + PALRepositoryAttributeModel.FIELD_METHODID + "=:METHODID ORDER BY " + PALRepositoryAttributeModel.FIELD_ORDERINDEX; + Map params = new HashMap(); + params.put("METHODID", methodId); + return DBSql.query(sql, params, rowMapper()); + } + + /** + * 获取指定资产库的文件属性列表 + * + * @param wsId + * @return + */ + public List getFileAttributeByWsId(String wsId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + PALRepositoryAttributeModel.FIELD_WSID + "=:WSID"; + Map params = new HashMap(); + params.put("WSID", wsId); + return DBSql.query(sql, params, rowMapper()); + } + + /** + * 获取指定资产库的某类图的文件属性列表 + * + * @param wsid + * @param methodId + * @return + */ + public List getFileAttribute(String wsid, String methodId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + PALRepositoryAttributeModel.FIELD_WSID + "=:WSID AND " + PALRepositoryAttributeModel.FIELD_METHODID + "=:METHODID ORDER BY " + PALRepositoryAttributeModel.FIELD_ORDERINDEX; + Map params = new HashMap(); + params.put("WSID", wsid); + params.put("METHODID", methodId); + return DBSql.query(sql, params, rowMapper()); + } + + /** + * 修改属性的名称和排序 + * + * @param wsid + * @param attrId + * @param methodId + * @param attrName + * @param orderIndex + * @return + */ + public int updateAttrNameAndOrderIndex(String wsid, String attrId, String methodId, String attrName, int orderIndex) { + String sql = "UPDATE " + entityName() + " SET " + PALRepositoryAttributeModel.FIELD_ATTRNAME + "=:ATTRNAME," + PALRepositoryAttributeModel.FIELD_ORDERINDEX + "=:ORDERINDEX WHERE " + + PALRepositoryAttributeModel.FIELD_WSID + "=:WSID AND " + PALRepositoryAttributeModel.FIELD_ATTRID + "=:ATTRID AND " + PALRepositoryAttributeModel.FIELD_METHODID + "=:METHODID"; + Map params = new HashMap(); + params.put("ATTRNAME", attrName); + params.put("ORDERINDEX", orderIndex); + params.put("WSID", wsid); + params.put("ATTRID", attrId); + params.put("METHODID", methodId); + int r = DBSql.update(sql, params); + if (r > 0) { + PALRepositoryAttributeModel model = PALRepositoryAttributeCache.getAttributeByMethodIdAndAttrId(wsid, methodId, attrId); + if (model != null) { + model.setAttrName(attrName); + model.setOrderIndex(orderIndex); + } + } + return r; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryPropertyDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryPropertyDao.java new file mode 100644 index 00000000..7755c721 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryPropertyDao.java @@ -0,0 +1,425 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.BatchPreparedStatementSetter; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryPropertyCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryPropertyModel; +import com.actionsoft.exception.AWSDataAccessException; + +public class PALRepositoryPropertyDao extends DaoObject { + + @Override + public int insert(PALRepositoryPropertyModel model) + throws AWSDataAccessException { + Map paramsMap = getModelParamsMap(model); + int result = DBSql.update(DBSql.getInsertStatement(entityName(), paramsMap), paramsMap); + if (result > 0) { + PALRepositoryPropertyCache.getCache().put(model.getId(), model); + } + return result; + } + /** + * 批量导入 + * @param list + * @return + * @author tanj + */ + public boolean batchInsert(final List list) { + if (list == null || list.size() == 0) { + return false; + } + for (PALRepositoryPropertyModel model : list) { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + } + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + String sql = "INSERT INTO " + PALRepositoryPropertyModel.DATABASE_ENTITY + "(" + PALRepositoryPropertyModel.FIELD_ID + "," + PALRepositoryPropertyModel.FIELD_PLID + "," + PALRepositoryPropertyModel.FIELD_PROPERTYID + "," + PALRepositoryPropertyModel.FIELD_PROPERTYNAME + "," + PALRepositoryPropertyModel.FIELD_PROPERTYVALUE + "," + PALRepositoryPropertyModel.FIELD_ORDERINDEX + ")" + " VALUES(?,?,?,?,?,?)"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (int i = 0; i < list.size(); i++) { + PALRepositoryPropertyModel model = list.get(i); + prest.setString(1, model.getId()); + prest.setString(2, model.getPlId()); + prest.setString(3, model.getPropertyId()); + prest.setString(4, model.getPropertyName()); + prest.setString(5, model.getPropertyValue()); + prest.setInt(6, model.getOrderIndex()); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + for (PALRepositoryPropertyModel model : list) { + PALRepositoryPropertyCache.getCache().put(model.getId(), model); + } + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, prest, null); + } + return false; + } + + /** + * 批量导入 + * @param list + * @return + * @author tanj + */ + public boolean batchInsert(Connection conn, PreparedStatement prest, List list) { + if (list == null || list.size() == 0) { + return false; + } + for (PALRepositoryPropertyModel model : list) { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + } + try { + String sql = "INSERT INTO " + PALRepositoryPropertyModel.DATABASE_ENTITY + "(" + PALRepositoryPropertyModel.FIELD_ID + "," + PALRepositoryPropertyModel.FIELD_PLID + "," + PALRepositoryPropertyModel.FIELD_PROPERTYID + "," + PALRepositoryPropertyModel.FIELD_PROPERTYNAME + "," + PALRepositoryPropertyModel.FIELD_PROPERTYVALUE + "," + PALRepositoryPropertyModel.FIELD_ORDERINDEX + ")" + " VALUES(?,?,?,?,?,?)"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (int i = 0; i < list.size(); i++) { + PALRepositoryPropertyModel model = list.get(i); + prest.setString(1, model.getId()); + prest.setString(2, model.getPlId()); + prest.setString(3, model.getPropertyId()); + prest.setString(4, model.getPropertyName()); + prest.setString(5, model.getPropertyValue()); + prest.setInt(6, model.getOrderIndex()); + prest.addBatch(); + } + prest.executeBatch(); + return true; + } catch (SQLException e) { + e.printStackTrace(); + } + return false; + } + + /** + * 刷新缓存 + * @param list + */ + public void refreshCache(List list) { + if (list == null) { + return; + } + for (PALRepositoryPropertyModel model : list) { + PALRepositoryPropertyCache.getCache().put(model.getId(), model); + } + } + + /** + * 批量删除属性 + * @param list + * @return + */ + public int[] batchDelete(final List list) { + Connection conn = DBSql.open(); + int[] resultNum = null; + try { + conn.setAutoCommit(false); + String sql = "DELETE FROM " + entityName() + " WHERE "+ PALRepositoryPropertyModel.FIELD_ID +"=? "; + resultNum = DBSql.batch(conn, sql, new BatchPreparedStatementSetter() { + + @Override + public int getBatchSize() { + return list.size(); + } + + @Override + public void setValues(PreparedStatement prest, int paramInt) + throws SQLException { + PALRepositoryPropertyModel model = list.get(paramInt); + prest.setString(1, model.getId()); + } + + }); + conn.commit(); + if (list != null) { + for (PALRepositoryPropertyModel model : list) { + PALRepositoryPropertyCache.getCache().remove(model.getId()); + } + } + return resultNum; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn); + } + return resultNum; + } + private Map getModelParamsMap(PALRepositoryPropertyModel model) { + Map paramsMap = new HashMap(); + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + paramsMap.put(PALRepositoryPropertyModel.FIELD_ID, model.getId()); + paramsMap.put(PALRepositoryPropertyModel.FIELD_PLID, model.getPlId()); + paramsMap.put(PALRepositoryPropertyModel.FIELD_PROPERTYID, model.getPropertyId()); + paramsMap.put(PALRepositoryPropertyModel.FIELD_PROPERTYNAME, model.getPropertyName()); + paramsMap.put(PALRepositoryPropertyModel.FIELD_PROPERTYVALUE, model.getPropertyValue()); + paramsMap.put(PALRepositoryPropertyModel.FIELD_ORDERINDEX, model.getOrderIndex()); + return paramsMap; + } + + @Override + public int update(PALRepositoryPropertyModel model) + throws AWSDataAccessException { + String sql = "UPDATE " + entityName() + " SET PLID=:PLID, PROPERTYID=:PROPERTYID, PROPERTYNAME=:PROPERTYNAME, PROPERTYVALUE=:PROPERTYVALUE, ORDERINDEX=:ORDERINDEX WHERE ID=:ID"; + Map paramsMap = new HashMap(); + paramsMap.put("PLID", model.getPlId()); + paramsMap.put("PROPERTYID", model.getPropertyId()); + paramsMap.put("PROPERTYNAME", model.getPropertyName()); + paramsMap.put("PROPERTYVALUE", model.getPropertyValue()); + paramsMap.put("ORDERINDEX", model.getOrderIndex()); + paramsMap.put("ID", model.getId()); + int result = DBSql.update(sql, paramsMap); + if (result > 0) { + PALRepositoryPropertyCache.getCache().remove(model.getId()); + PALRepositoryPropertyCache.getCache().put(model.getId(), model); + } + return result; + } + + @Override + public String entityName() { + return PALRepositoryPropertyModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return new PALRepositoryPropertyModelMapper(); + } + + private static class PALRepositoryPropertyModelMapper implements RowMapper { + public PALRepositoryPropertyModel mapRow(ResultSet rs, int arg1) + throws SQLException { + PALRepositoryPropertyModel model=new PALRepositoryPropertyModel(); + model.setId(rs.getString(PALRepositoryPropertyModel.FIELD_ID)); + model.setPlId(rs.getString(PALRepositoryPropertyModel.FIELD_PLID)); + model.setPropertyId(rs.getString(PALRepositoryPropertyModel.FIELD_PROPERTYID)); + model.setPropertyName(rs.getString(PALRepositoryPropertyModel.FIELD_PROPERTYNAME)); + model.setPropertyValue(rs.getString(PALRepositoryPropertyModel.FIELD_PROPERTYVALUE) == null ? "" : rs.getString(PALRepositoryPropertyModel.FIELD_PROPERTYVALUE)); + model.setOrderIndex(rs.getInt(PALRepositoryPropertyModel.FIELD_ORDERINDEX)); + return model; + } + } + + /** + * 根据流程Id获取所有文件的自定义属性 + * + * @param plId + * @return + */ + public List getPropertysByPlid(String plId, String propertyId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + PALRepositoryPropertyModel.FIELD_PLID + "=:PLID"; + Map params = new HashMap(); + params.put("PLID", plId); + if (!UtilString.isEmpty(propertyId)) { + sql += " AND " + PALRepositoryPropertyModel.FIELD_PROPERTYID + "=:PROPERTYID"; + params.put("PROPERTYID", propertyId); + } + return DBSql.query(sql, params, rowMapper()); + } + + /** + * 更新流程的所有自定义属性 + * + * @param plId + * @param propertys + * @throws SQLException + */ + public int[] updatePropertysByPLId(String plId, final List propertys) throws SQLException { + Connection conn = DBSql.open(); + conn.setAutoCommit(false); + int[] resultNum = null; + try { + //删除已有的参数 + deletePropertysByPLId(conn, plId, null); + //新增所有参数 + String sql = "INSERT INTO " + entityName() + "(ID, PLID, PROPERTYID, PROPERTYNAME, PROPERTYVALUE, ORDERINDEX) VALUES (?, ?, ?, ?, ?, ?)"; + for (PALRepositoryPropertyModel model : propertys) { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + } + // 执行批量更新 + resultNum = DBSql.batch(conn, sql.toString(), new BatchPreparedStatementSetter() { + @Override + public void setValues(PreparedStatement pst, int paramInt) throws SQLException { + PALRepositoryPropertyModel model = propertys.get(paramInt); + pst.setString(1, model.getId()); + pst.setString(2, model.getPlId()); + pst.setString(3, model.getPropertyId()); + pst.setString(4, model.getPropertyName()); + pst.setString(5, model.getPropertyValue()); + pst.setInt(6, model.getOrderIndex()); + } + + public int getBatchSize() { + return propertys.size(); + } + }); + conn.commit(); + /* + * 更新缓存 + */ + List list = PALRepositoryPropertyCache.getPropertyByPlId(plId); + if (list != null) { + for (PALRepositoryPropertyModel model : list) { + PALRepositoryPropertyCache.getCache().remove(model.getId()); + } + } + for (PALRepositoryPropertyModel model : propertys) { + PALRepositoryPropertyCache.getCache().remove(model.getId()); + PALRepositoryPropertyCache.getCache().put(model.getId(), model); + } + + return resultNum; + } catch(SQLException e) { + conn.rollback(); + throw e; + }finally { + DBSql.close(conn); + } + } + + /** + * 根据流程文件Id删除所有属性或某个属性 + * + * @param plId + * @return + */ + public int deletePropertysByPLId(Connection conn, String plId, String propertyId) { + StringBuilder sql = new StringBuilder("DELETE FROM " + entityName() + " WHERE " + PALRepositoryPropertyModel.FIELD_PLID + "=:PLID"); + Map params = new HashMap(); + params.put("PLID", plId); + if (!UtilString.isEmpty(propertyId)) { + sql.append(" AND " + PALRepositoryPropertyModel.FIELD_PROPERTYID + "=:PROPERTYID"); + params.put("PROPERTYID", propertyId); + } + int r = 0; + if (conn == null) { + r = DBSql.update(sql.toString(), params); + } else { + r = DBSql.update(conn, sql.toString(), params); + } + if (r > 0) { + if (!UtilString.isEmpty(propertyId)) { + PALRepositoryPropertyModel model = PALRepositoryPropertyCache.getPropertyByPropertyId(plId, propertyId); + PALRepositoryPropertyCache.getCache().remove(model.getId()); + } else { + List list = PALRepositoryPropertyCache.getPropertyByPlId(plId); + if (list != null) { + for (PALRepositoryPropertyModel model : list) { + PALRepositoryPropertyCache.getCache().remove(model.getId()); + } + } + } + } + return r; + } + + public int updatePropertyByPropertyId(String plId, String propertyId, String propertyValue) { + String sql = "UPDATE " + entityName() + " SET PROPERTYVALUE=:PROPERTYVALUE WHERE PLID=:PLID AND PROPERTYID=:PROPERTYID"; + Map params = new HashMap(); + params.put("PLID", plId); + params.put("PROPERTYID", propertyId); + params.put("PROPERTYVALUE", propertyValue); + int r = DBSql.update(sql, params); + if (r > 0) { + PALRepositoryPropertyModel propertyModel = PALRepositoryPropertyCache.getPropertyByPropertyId(plId, propertyId); + if (propertyModel != null) { + propertyModel.setPropertyValue(propertyValue); + PALRepositoryPropertyCache.getCache().put(propertyModel.getId(), propertyModel); + } + } + return r; + } + + public int deletePropertyById(String ids) { + String sql = "DELETE FORM " + entityName() + " WHERE ID IN (" + ids + ")"; + int result = DBSql.update(sql); + if (!UtilString.isEmpty(ids)) { + ids = ids.replaceAll("'", ""); + String[] idArray = ids.split(","); + for (String id : idArray) { + if (!UtilString.isEmpty(id)) { + PALRepositoryPropertyCache.getCache().remove(id); + } + } + } + return result; + } + + /** + * 删除,通过外部进行提交,缓存需要单独处理 + * @param conn + * @param prest + * @param id + */ + public int deletePropertyById(Connection conn, PreparedStatement prest, String id) { + if (UtilString.isEmpty(id)) { + return -1; + } + String sql = "DELETE FROM " + entityName() + " WHERE ID = ?"; + try { + prest = conn.prepareStatement(sql); + prest.setString(1, id); + return prest.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + } + return -1; + } + + /** + * 删除缓存 + * @param list id集合 + */ + public void removeCacheByIds(List list) { + if (list != null) { + for (String id : list) { + PALRepositoryPropertyCache.getCache().remove(id); + } + } + } + + /** + * 根据资产库和属性id查询 + */ + public List queryByWsId(String wsId) { + StringBuilder sql = new StringBuilder("SELECT * FROM " + entityName() + " d WHERE EXISTS (SELECT 1 FROM APP_ACT_COE_PAL_REPOSITORY r WHERE r.WSID = ? AND r.ID = d.PLID) "); + List args = new ArrayList(); + args.add(wsId); + return DBSql.query(sql.toString(), rowMapper(), args.toArray()); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryRemove.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryRemove.java new file mode 100644 index 00000000..4a71c549 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryRemove.java @@ -0,0 +1,411 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao; + +import java.sql.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryRemoveCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryRemoveModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.exception.AWSDataAccessException; + +public class PALRepositoryRemove extends DaoObject { + + @Override + public int insert(PALRepositoryRemoveModel obj) throws AWSDataAccessException { + PALRepositoryModelImpl model = (PALRepositoryModelImpl) obj; + Map paraMap = getInsertSqlParam(obj); + String sql = DBSql.getInsertStatement(entityName(), paraMap); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + model.setNewParentId(model.getParentId()); + PALRepositoryRemoveCache.getCache().put(model.getId(), model); + } + return r; + } + + public int insert(Connection conn, PALRepositoryModel obj) throws AWSDataAccessException { + PALRepositoryModelImpl model = (PALRepositoryModelImpl) obj; + Map paraMap = getInsertSqlParam(model); + String sql = DBSql.getInsertStatement(entityName(), paraMap); + int r = DBSql.update(conn, sql, paraMap); + if (r > 0) { + model.setNewParentId(model.getParentId()); + PALRepositoryRemoveCache.getCache().put(model.getId(), model); + } + return r; + } + + public Map getInsertSqlParam(PALRepositoryRemoveModel obj) { + PALRepositoryModelImpl model = (PALRepositoryModelImpl) obj; + if (model.getId().equals("") || model.getId().equals("0")) { + model.setId(UUIDGener.getUUID()); + if (model.getVersionId().equals("")) { + model.setVersionId(model.getId()); + } + } + + Map paraMap = new HashMap(); + paraMap.put(PALRepositoryModelImpl.FIELD_UUID, model.getId()); + paraMap.put("REMOVEID", model.getRemoveId()); + paraMap.put(PALRepositoryModelImpl.FIELD_WS_ID, model.getWsId()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_NO, model.getNo()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_NAME, model.getName()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_LEVEL, model.getLevel()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_PARENT_ID, model.getParentId()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_ORDERINDEX, model.getOrderIndex()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_DESC, model.getDesc()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_IS_BOTTOM_LEVEL, model.isBottomLevel()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_RD, model.getOwnerDept()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_RP, model.getOwnerUser()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_M, model.getMilestone()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_EXEC_TYPE, model.getExecType()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_SYSTEM_NAME, model.getSystemName()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_AWS_PID, model.getAWSProcessId()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_DIAGRAM_URL, model.getDiagramUrl()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_COLOR, model.getColor()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_CATEGORY, model.getMethodCategory()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_METHODID, model.getMethodId()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_VER, model.getVersion()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_VERSION_UUID, model.getVersionId()); + paraMap.put(PALRepositoryModelImpl.FIELD_FILE_PATH, model.getFilePath() == null ? "" : model.getFilePath()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_INPUT, model.getInput() == null ? "" : model.getInput()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_OUTPUT, model.getOutput() == null ? "" : model.getOutput()); + paraMap.put(PALRepositoryModelImpl.FIELD_HISTORYMAXVERSION, Integer.parseInt(model.getHistoryMaxVersion())); + paraMap.put(PALRepositoryModelImpl.FIELD_IS_SYSTEM_FILE, model.isSystemFile() ? 1 : 0); + paraMap.put(PALRepositoryModelImpl.FIELD_IS_USE, model.isUse() ? 1 : 0); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_RID, model.getPlRid()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_ISPUBLISH, model.isPublish() ? 1 : 0); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_ISSTOP, model.isStop() ? 1 : 0); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_ISAPPROVAL, model.isApproval() ? 1 : 0); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_CREATEUSER, model.getCreateUser()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_CREATEDATE, model.getCreateDate()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_MODIFYUSER, model.getModifyUser()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_MODIFYDATE, model.getModifyDate()); + paraMap.put(PALRepositoryModelImpl.FIELD_VIEWCOUNT, model.getViewCount()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_DUTY_DEPT, model.getDutyDept()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_DUTY_PERSON, model.getDutyUser()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_EXT1, model.getExt1()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_EXT2, model.getExt2()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_EXT3, model.getExt3()); + paraMap.put(PALRepositoryModelImpl.FIELD_PL_EXT4, model.getExt4()); + + return paraMap; + } + + @Override + public int update(PALRepositoryRemoveModel model) throws AWSDataAccessException { + return 0; + } + + @Override + public String entityName() { + return "APP_ACT_COE_PAL_REPO_R"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public PALRepositoryRemoveModel mapRow(ResultSet rset, int rowNum) throws SQLException { + PALRepositoryModelImpl model = new PALRepositoryModelImpl(); + try { + model.setId(rset.getString("ID")); + model.setRemoveId(rset.getString("REMOVEID")); + model.setWsId(putString(rset.getString("WSID"))); + model.setNo(putString(rset.getString("PLNO"))); + model.setName(putString(rset.getString("PLNAME"))); + model.setAWSProcessId(putString(rset.getString("PLAWSPID"))); + model.setColor(putString(rset.getString("PLCOLOR"))); + model.setDesc(putString(rset.getString("PLDESC"))); + model.setExecType(rset.getInt("PLEXECTYPE")); + model.setBottomLevel(rset.getInt("PLISBOTTOMLEVEL")); + model.setLevel(rset.getInt("PLLEVEL")); + model.setFilePath(rset.getString("FILEPATH")); + model.setMilestone(putString(rset.getString("PM"))); + model.setOrderIndex(rset.getInt("PLORDERINDEX")); + model.setParentId(putString(rset.getString("PLPARENTID"))); + model.setOwnerDept(putString(rset.getString("PLRD"))); + model.setOwnerUser(putString(rset.getString("PLRP"))); + model.setSystemName(putString(rset.getString("PLSYSTEMNAME"))); + model.setMethodCategory(putString(rset.getString("PLCATEGORY"))); + model.setMethodId(putString(rset.getString("PLMETHODID"))); + model.setVersion(rset.getInt("PLVER")); + model.setVersionId(putString(rset.getString("PLVERSIONID"))); + model.setUse(rset.getInt("ISUSE") == 1); + model.setSystemFile(rset.getInt("ISSYSTEMFILE") == 1); + model.setHistoryMaxVersion(rset.getInt("HISTORYMAXVERSION") + ""); + model.setInput(rset.getString("PLINPUT")); + model.setOutput(rset.getString("PLOUTPUT")); + model.setPlRid(rset.getString("PLRID")); + model.setPublish(rset.getInt("ISPUBLISH") == 1); + model.setStop(rset.getInt("ISSTOP") == 1); + model.setApproval(rset.getInt("ISAPPROVAL") == 1); + model.setCreateUser(rset.getString("CREATEUSER")); + model.setCreateDate(rset.getTimestamp("CREATEDATE")); + model.setModifyUser(rset.getString("MODIFYUSER")); + model.setModifyDate(rset.getTimestamp("MODIFYDATE")); + model.setViewCount(rset.getLong("VIEWCOUNT")); + model.setNewParentId(rset.getString("PLPARENTID")); + model.setExt1(rset.getString("ext1")); + model.setExt2(rset.getString("ext2")); + model.setExt3(rset.getString("ext3")); + model.setExt4(rset.getString("ext4")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } + + public String putString(String obj) { + if (obj == null) { + return ""; + } else { + return obj; + } + } + + /** + * 获取某次删除的所有模型信息 + * + * @param removeInfoId + * @return + * @author zhangming + */ + public List getModelsByInfoId(String removeInfoId) { + String sql = "SELECT * FROM " + entityName() + " WHERE REMOVEID=?"; + return DBSql.query(sql, rowMapper(), new Object[] { removeInfoId }); + } + + public List getModelsByInfoIds(String removeInfoIds) { + //String sql = "SELECT * FROM " + entityName() + " WHERE REMOVEID IN (" + removeInfoIds + ")"; + StringBuffer sql =new StringBuffer( "SELECT * FROM " + entityName() + " WHERE " ); + String[] removeInfoId_arr = removeInfoIds.split(","); + long valueSize = removeInfoId_arr.length; + int batchSize = (int) (valueSize / 900 + (valueSize % 900 == 0 ? 0 : 1)); + for(int i = 0; i getAllInstance() { + String sql = "SELECT * FROM " + entityName(); + return DBSql.query(sql, rowMapper()); + } + + public List getModelsById(String uuid) { + String sql = "SELECT * FROM " + entityName() + " WHERE ID=?"; + return DBSql.query(sql, rowMapper(), new Object[] { uuid }); + } + + /** + * 获得资产库中所有被删除的模型 + * + * @param wsId + * @return + * @author zhangming + */ + public List getModelsByWsId(String wsId) { + checkTable(); + String sql = "SELECT * FROM " + entityName() + " WHERE WSID=?"; + return DBSql.query(sql, rowMapper(), new Object[] { wsId }); + } + + /** + * 彻底删除某次删除的所有模型 + * + * @param removeId + * @return + * @author zhangming + */ + public int deleteModelsByRemoveId(String removeId) { + String sql = "DELETE FROM " + entityName() + " WHERE REMOVEID=?"; + int r = DBSql.update(sql, new Object[] { removeId }); + if (r > 0) { + PALRepositoryRemoveCache.getCache().removeModelsByRemoveId(removeId); + } + return r; + } + + /** + * 彻底删除某次删除的所有模型 + * + * @param removeId + * @return + * @author zhangming + */ + public int deleteModelsByRemoveId(Connection conn, String removeId) throws AWSDataAccessException { + String sql = "DELETE FROM " + entityName() + " WHERE REMOVEID=?"; + int r = DBSql.update(conn, sql, new Object[] { removeId }); + if (r > 0) { + PALRepositoryRemoveCache.getCache().removeModelsByRemoveId(removeId); + } + return r; + } + + /** + * 彻底删除资产库中的所有模型 + * + * @param wsId + * @return + * @author zhangming + */ + public int deleteModelsByWsId(String wsId) { + String sql = "DELETE FROM " + entityName() + " WHERE WSID=?"; + int r = DBSql.update(sql, new Object[] { wsId }); + if (r > 0) { + PALRepositoryRemoveCache.getCache().removeModelsByWsId(wsId); + } + return r; + } + + /** + * 彻底删除资产库中的所有模型 + * + * @param wsId + * @return + * @author zhangming + */ + public int deleteModelsByWsId(Connection conn, String wsId) throws AWSDataAccessException { + String sql = "DELETE FROM " + entityName() + " WHERE WSID=?"; + int r = DBSql.update(sql, new Object[] { wsId }); + if (r > 0) { + PALRepositoryRemoveCache.getCache().removeModelsByWsId(wsId); + } + return r; + } + + /** + * 检查表是否存在,如果不存在,则创建表 + * + * @return + * @author zhangming + */ + public boolean checkTable() { + boolean flag = true; + if (!isExistTable()) { + String sql_r = ""; + if (AWSServerConf.isOracle()) { + sql_r = "create table APP_ACT_COE_PAL_REPO_R (ID CHAR(36) NOT NULL, REMOVEID CHAR(36), WSID CHAR(36), PLRID CHAR(36), PLNO NVARCHAR2(36), PLNAME NVARCHAR2(128), PLLEVEL NUMBER(2), PLPARENTID NVARCHAR2(36), PLORDERINDEX NUMBER(3), PLISBOTTOMLEVEL NUMBER(1), PLDESC NVARCHAR2(2000), PLRD NVARCHAR2(36), PLRP NVARCHAR2(36), PM NVARCHAR2(36), PLINPUT NVARCHAR2(255), PLOUTPUT NVARCHAR2(255), PLEXECTYPE NUMBER(1), PLSYSTEMNAME NVARCHAR2(36), PLAWSPID CHAR(36), PLDIAGRAMURL NVARCHAR2(255), PLCOLOR NVARCHAR2(36), PLCATEGORY NVARCHAR2(36), PLMETHODID NVARCHAR2(36), PLVER NUMBER(3), PLVERSIONID CHAR(36), ISUSE NUMBER(1), ISPUBLISH NUMBER(1), ISSYSTEMFILE NUMBER(1), FILEPATH NVARCHAR2(255), HISTORYMAXVERSION NUMBER(6), VIEWCOUNT NUMBER(12), CREATEUSER VARCHAR2(36), MODIFYUSER VARCHAR2(36), CREATEDATE DATE, MODIFYDATE DATE, PRIMARY KEY (ID))"; + } else if (AWSServerConf.isSQLServer()) { + sql_r = "create table APP_ACT_COE_PAL_REPO_R (ID NVARCHAR(36) NOT NULL, REMOVEID NVARCHAR(36) NOT NULL, WSID NVARCHAR(36),PLRID NVARCHAR(36),PLNO NVARCHAR(36),PLNAME NVARCHAR(128),PLLEVEL SMALLINT ,PLPARENTID NVARCHAR(36),PLORDERINDEX SMALLINT ,PLISBOTTOMLEVEL SMALLINT ,PLDESC NVARCHAR(2000),PLRD NVARCHAR(36),PLRP NVARCHAR(36),PM NVARCHAR(36),PLINPUT NVARCHAR(255),PLOUTPUT NVARCHAR(255),PLEXECTYPE SMALLINT ,PLSYSTEMNAME NVARCHAR(36),PLAWSPID NVARCHAR(36),PLDIAGRAMURL NVARCHAR(255),PLCOLOR NVARCHAR(36),PLCATEGORY NVARCHAR(36),PLMETHODID NVARCHAR(36),PLVER SMALLINT ,PLVERSIONID NVARCHAR(36),ISUSE SMALLINT ,ISPUBLISH SMALLINT ,ISSYSTEMFILE SMALLINT ,FILEPATH NVARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME,MODIFYDATE DATETIME, PRIMARY KEY (ID))"; + } else if (AWSServerConf.isMySQL()) { + sql_r = "create table APP_ACT_COE_PAL_REPO_R (ID VARCHAR(36) NOT NULL, REMOVEID VARCHAR(36) NOT NULL, WSID VARCHAR(36),PLRID VARCHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL SMALLINT(2),PLPARENTID VARCHAR(36),PLORDERINDEX SMALLINT(3),PLISBOTTOMLEVEL SMALLINT(1),PLDESC text ,PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT VARCHAR(255),PLOUTPUT VARCHAR(255),PLEXECTYPE SMALLINT(1),PLSYSTEMNAME VARCHAR(36),PLAWSPID VARCHAR(36),PLDIAGRAMURL VARCHAR(255),PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER SMALLINT(3),PLVERSIONID VARCHAR(36),ISUSE SMALLINT(1),ISPUBLISH SMALLINT(1),ISSYSTEMFILE SMALLINT(1),FILEPATH VARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME,MODIFYDATE DATETIME, PRIMARY KEY (ID))"; + } else if (AWSServerConf.isDB2()) { + sql_r = "create table APP_ACT_COE_PAL_REPO_R (ID NVARCHAR(36) NOT NULL, REMOVEID NVARCHAR(36) NOT NULL, WSID NVARCHAR(36),PLRID NVARCHAR(36),PLNO NVARCHAR(36),PLNAME NVARCHAR(128),PLLEVEL SMALLINT ,PLPARENTID NVARCHAR(36),PLORDERINDEX SMALLINT ,PLISBOTTOMLEVEL SMALLINT ,PLDESC NVARCHAR(2000),PLRD NVARCHAR(36),PLRP NVARCHAR(36),PM NVARCHAR(36),PLINPUT NVARCHAR(255),PLOUTPUT NVARCHAR(255),PLEXECTYPE SMALLINT ,PLSYSTEMNAME NVARCHAR(36),PLAWSPID NVARCHAR(36),PLDIAGRAMURL NVARCHAR(255),PLCOLOR NVARCHAR(36),PLCATEGORY NVARCHAR(36),PLMETHODID NVARCHAR(36),PLVER SMALLINT ,PLVERSIONID NVARCHAR(36),ISUSE SMALLINT ,ISPUBLISH SMALLINT ,ISSYSTEMFILE SMALLINT ,FILEPATH NVARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE TIMESTAMP,MODIFYDATE TIMESTAMP, PRIMARY KEY (ID))"; + } else if (AWSServerConf.isPostgreSQL()) { + sql_r = "create table APP_ACT_COE_PAL_REPO_R (ID VARCHAR(36) NOT NULL, REMOVEID VARCHAR(36) NOT NULL,WSID VARCHAR(36),PLRID VARCHAR(36),PLNO VARCHAR(36),PLNAME VARCHAR(128),PLLEVEL SMALLINT ,PLPARENTID VARCHAR(36),PLORDERINDEX SMALLINT ,PLISBOTTOMLEVEL SMALLINT ,PLDESC VARCHAR(2000),PLRD VARCHAR(36),PLRP VARCHAR(36),PM VARCHAR(36),PLINPUT VARCHAR(255),PLOUTPUT VARCHAR(255),PLEXECTYPE SMALLINT ,PLSYSTEMNAME VARCHAR(36),PLAWSPID VARCHAR(36),PLDIAGRAMURL VARCHAR(255),PLCOLOR VARCHAR(36),PLCATEGORY VARCHAR(36),PLMETHODID VARCHAR(36),PLVER SMALLINT ,PLVERSIONID VARCHAR(36),ISUSE SMALLINT ,ISPUBLISH SMALLINT ,ISSYSTEMFILE SMALLINT ,FILEPATH VARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE TIMESTAMP,MODIFYDATE TIMESTAMP, PRIMARY KEY (ID))"; + } else { + sql_r = "create table APP_ACT_COE_PAL_REPO_R (ID NVARCHAR(36) NOT NULL, REMOVEID NVARCHAR(36) NOT NULL, WSID NVARCHAR(36),PLRID NVARCHAR(36),PLNO NVARCHAR(36),PLNAME NVARCHAR(128),PLLEVEL SMALLINT ,PLPARENTID NVARCHAR(36),PLORDERINDEX SMALLINT ,PLISBOTTOMLEVEL SMALLINT ,PLDESC NVARCHAR(2000),PLRD NVARCHAR(36),PLRP NVARCHAR(36),PM NVARCHAR(36),PLINPUT NVARCHAR(255),PLOUTPUT NVARCHAR(255),PLEXECTYPE SMALLINT ,PLSYSTEMNAME NVARCHAR(36),PLAWSPID NVARCHAR(36),PLDIAGRAMURL NVARCHAR(255),PLCOLOR NVARCHAR(36),PLCATEGORY NVARCHAR(36),PLMETHODID NVARCHAR(36),PLVER SMALLINT ,PLVERSIONID NVARCHAR(36),ISUSE SMALLINT ,ISPUBLISH SMALLINT ,ISSYSTEMFILE SMALLINT ,FILEPATH NVARCHAR(255),HISTORYMAXVERSION NUMERIC(6),VIEWCOUNT NUMERIC(12),CREATEUSER VARCHAR(36),MODIFYUSER VARCHAR(36),CREATEDATE DATETIME,MODIFYDATE DATETIME, PRIMARY KEY (ID))"; + } + DBSql.update(sql_r); + } + + return flag; + } + + private boolean isExistTable() { + return true; +// Connection conn = DBSql.open(); +// DatabaseMetaData dbmd = null; +// ResultSet rs = null; +// try { +// dbmd = conn.getMetaData(); +// if (AWSServerConf.isOracle()) { +// rs = dbmd.getTables(null, AWSServerConf.getDatabaseUsername().toUpperCase(), entityName(), new String[] { "TABLE" }); +// } else if (AWSServerConf.isPostgreSQL()) { +// rs = dbmd.getTables(null, null, entityName().toLowerCase(), new String[] { "TABLE" }); +// } else { +// rs = dbmd.getTables(null, null, entityName(), new String[] { "TABLE" }); +// } +// +// while (rs.next()) { +// String tableName = rs.getString("TABLE_NAME"); +// if (tableName.toLowerCase().contains(entityName().toLowerCase())) { +// return true; +// } +// } +// } catch (Exception ex) { +// ex.printStackTrace(); +// } finally { +// DBSql.close(conn, null, rs); +// } +// return false; + } + + /** + * 批量更新流程路径 + * @param map + * @return + */ + public boolean updateFilePath(Map map) { + boolean completeSuccess = false; + if (!map.isEmpty()) { + Connection conn = DBSql.open(); + PreparedStatement ps = null; + java.sql.ResultSet rset = null; + try { + conn.setAutoCommit(false); + String sql = "UPDATE " + entityName() + " set " + PALRepositoryModelImpl.FIELD_FILE_PATH + "=? where " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + ps = conn.prepareStatement(sql); + for(Map.Entry entry : map.entrySet()) { + ps.setString(1, entry.getValue()); + ps.setString(2, entry.getKey()); + ps.addBatch(); + } + int[] results = ps.executeBatch(); + for (int i = 0; i < results.length; i++) { + if ((results[i] >= 0) || (results[i] == PreparedStatement.SUCCESS_NO_INFO)) { + completeSuccess = true; + } + } + if (completeSuccess) { + conn.commit(); + } else { + conn.rollback(); + PALRepositoryRemoveCache.getCache().reload(true); + } + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, ps, rset); + } + } + return completeSuccess; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryRemoveInfo.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryRemoveInfo.java new file mode 100644 index 00000000..ceb8124d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryRemoveInfo.java @@ -0,0 +1,602 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.actionsoft.apps.coe.pal.system.util.StringUtil; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.commons.pagination.SQLPagination; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryRemoveCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryRemoveInfoModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryRemoveModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.exception.AWSDataAccessException; + +public class PALRepositoryRemoveInfo extends DaoObject { + + @Override + public int insert(PALRepositoryRemoveInfoModel model) throws AWSDataAccessException { + if (model.getId().equals("") || model.getId().equals("0")) { + model.setId(UUIDGener.getUUID()); + } + + Map paraMap = new HashMap(); + paraMap.put("ID", model.getId()); + paraMap.put("REMOVEUSER", model.getRemoveUser()); + paraMap.put("REMOVETIME", model.getRemoveTime()); + paraMap.put("WSID", model.getWsId()); + paraMap.put("RESOURCEID", model.getRemoveResource()); + paraMap.put("REMOVETYPE", model.getRemoveType()); + + String sql = DBSql.getInsertStatement(entityName(), paraMap); + + int r = DBSql.update(sql, paraMap); + return r; + } + + /** + * 插入删除信息及被删除的所有文件 + * + * @param model + * @param models + * @return + * @author zhangming + */ + public boolean insertRemoveInfoAndRemoveModels(PALRepositoryRemoveInfoModel model, List models) { + boolean flag = true; + checkTable(); // 检查表是否存在 + Connection conn = DBSql.open(); + try { + conn.setAutoCommit(false); + + if (model.getId().equals("") || model.getId().equals("0")) { + model.setId(UUIDGener.getUUID()); + } + + Map paraMap = new HashMap(); + paraMap.put("ID", model.getId()); + paraMap.put("REMOVEUSER", model.getRemoveUser()); + paraMap.put("REMOVETIME", model.getRemoveTime()); + paraMap.put("WSID", model.getWsId()); + paraMap.put("RESOURCEID", model.getRemoveResource()); + paraMap.put("REMOVETYPE", model.getRemoveType()); + + String sql = DBSql.getInsertStatement(entityName(), paraMap); + + int r = DBSql.update(conn, sql, paraMap); + if (r > 0) { + PALRepositoryRemove removeDao = new PALRepositoryRemove(); + try { + for (int i = 0; i < models.size(); i++) { + PALRepositoryModelImpl obj = (PALRepositoryModelImpl) models.get(i); + obj.setRemoveId(model.getId()); + removeDao.insert(conn, obj); + } + } catch (AWSDataAccessException e1) { + flag = false; + e1.printStackTrace(); + try { + conn.rollback(); + } catch (SQLException e2) { + e2.printStackTrace(); + } + } + } else { + flag = false; + return flag; + } + } catch (SQLException e) { + e.printStackTrace(); + flag = false; + } finally { + try { + conn.setAutoCommit(true); + } catch (SQLException e) { + e.printStackTrace(); + } + DBSql.close(conn); + } + + return flag; + } + + @Override + public int update(PALRepositoryRemoveInfoModel model) throws AWSDataAccessException { + return 0; + } + + @Override + public String entityName() { + return "APP_ACT_COE_PAL_REPO_R_INFO"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public PALRepositoryRemoveInfoModel mapRow(ResultSet rset, int rowNum) throws SQLException { + PALRepositoryRemoveInfoModel model = new PALRepositoryRemoveInfoModel(); + try { + model.setId(rset.getString("ID")); + model.setRemoveUser(rset.getString("REMOVEUSER")); + model.setRemoveTime(rset.getTimestamp("REMOVETIME")); + model.setWsId(rset.getString("WSID")); + model.setRemoveResource(rset.getString("RESOURCEID")); + model.setRemoveType(rset.getInt("REMOVETYPE")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } + + /** + * 获取全部数据 + * @return + */ + public List getAllRemoveInfo() { + String sql = "SELECT * FROM " + entityName(); + return DBSql.query(sql, rowMapper()); + } + + /** + * 获取数据 + * @param removeId + * @return + */ + public PALRepositoryRemoveInfoModel getRemoveInfoById(String removeId) { + String sql = "SELECT * FROM " + entityName() + " WHERE id=?"; + List list = DBSql.query(sql, rowMapper(), new Object[] { removeId }); + if (list != null && list.size() > 0) { + return list.get(0); + } else { + return null; + } + } + + /** + * 获取全部数据数量 + * + * @return + * @author zhangming + */ + public int getTotalNum(String wsId) { + checkTable(); + StringBuilder sql = new StringBuilder("SELECT COUNT(*) AS totalCount FROM ").append(entityName()); + Map paraMap = new HashMap(); + if (wsId != null && !"".equals(wsId)) { + sql.append(" WHERE WSID=:wsid"); + paraMap.put("wsid", wsId); + } + return DBSql.getInt(sql.toString(), "totalCount", paraMap); + } + + /** + * 获取全部数据数量 + * @param wsId + * @param searchInput 删除的条目名称(若删除的目录存在子目录,子目录不在模糊查询范围内) + * @return + */ + public int getTotalNum(String wsId, String searchInput, String versionIdsSql) { + Map param = new HashMap(); + StringBuilder sql = new StringBuilder("SELECT COUNT(*) AS totalCount FROM APP_ACT_COE_PAL_REPO_R_INFO info,APP_ACT_COE_PAL_REPO_R r").append(" where r.REMOVEID = info.ID and info.RESOURCEID = r.ID ");; + if (UtilString.isNotEmpty(wsId)) { + sql.append(" and info.WSID=:WSID"); + param.put("WSID", wsId); + } + if (UtilString.isNotEmpty(versionIdsSql)) { + sql.append(" and r.PLVERSIONID in (" + versionIdsSql + ")"); + } + if (UtilString.isNotEmpty(searchInput)) { + String namelike = ""; + if (StringUtil.containSpecialChar(searchInput)) { + namelike = "'%" + StringUtil.replaceSqlStr(searchInput, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + searchInput + "%'"; + } + sql.append(" AND r.PLNAME like " + namelike); + // param.put("PLNAME", namelike); + } + return DBSql.getInt(sql.toString(), "totalCount", param); + } + + /** + * 分页模糊匹配 + * @param start + * @param limit + * @param wsId + * @param searchInput 删除的条目名称(若删除的目录存在子目录,子目录不在模糊查询范围内) + * @return + */ + public List selectRemoveModelsByPagination(int start, int limit, String wsId, String searchInput, String versionIdsSql) { + Map param = new HashMap(); + StringBuilder sql = new StringBuilder("SELECT info.* FROM APP_ACT_COE_PAL_REPO_R_INFO info,APP_ACT_COE_PAL_REPO_R r").append(" where r.REMOVEID = info.ID and info.RESOURCEID = r.ID ");; + if (UtilString.isNotEmpty(wsId)) { + sql.append(" and info.WSID=:WSID"); + param.put("WSID", wsId); + } + if (UtilString.isNotEmpty(versionIdsSql)) { + sql.append(" and r.PLVERSIONID in (" + versionIdsSql + ")"); + } + if (UtilString.isNotEmpty(searchInput)) { + String namelike = ""; + if (StringUtil.containSpecialChar(searchInput)) { + namelike = "'%" + StringUtil.replaceSqlStr(searchInput, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + searchInput + "%'"; + } + sql.append(" AND r.PLNAME like " + namelike); + // param.put("PLNAME", namelike); + } + sql.append(" ORDER BY info.REMOVETIME DESC"); + String sqlStr = sql.toString(); + if (start != -1) { + sqlStr = SQLPagination.getPaginitionSQL(sql.toString(), start, limit); + } + return DBSql.query(sqlStr, param, rowMapper()); + } + + /** + * 分页查询 + * + * @param start + * @param limit + * @return + * @author zhangming + */ + public List selectModelsByPagination(int start, int limit, String wsId) { + checkTable(); + StringBuilder sql = new StringBuilder("SELECT * FROM " + entityName()); + if (wsId != null && !"".equals(wsId)) { + sql.append(" WHERE wsid='" + wsId + "'"); + } + sql.append(" ORDER BY removetime DESC"); + String sqlStr = sql.toString(); + if (start != -1) { + sqlStr = SQLPagination.getPaginitionSQL(sql.toString(), start, limit); + } + return DBSql.query(sqlStr, rowMapper()); + } + + /** + * 获取有小组权限的全部数据数量 + * + * @return + * @author zhangming + */ + public int getTotalNumByTeamId(String teamId) { + checkTable(); + StringBuilder sql = new StringBuilder("SELECT COUNT(r.ID) AS totalCount FROM " + entityName() + " r, APP_ACT_COE_TEAM_PERM p WHERE r.RESOURCEID = p.RESOURCEID"); + Map paraMap = new HashMap(); + if (teamId != null && !"".equals(teamId)) { + sql.append(" AND p.TEAMID=:teamId"); + paraMap.put("teamId", teamId); + } + return DBSql.getInt(sql.toString(), "totalCount", paraMap); + } + + /** + * 查询有小组权限的数据 + * + * @param start + * @param limit + * @param teamId + * @return + * @author zhangming + */ + public List selectModelsByTeamId(int start, int limit, String teamId) { + checkTable(); + StringBuilder sql = new StringBuilder("SELECT r.* FROM " + entityName() + " r, APP_ACT_COE_TEAM_PERM p WHERE r.RESOURCEID = p.RESOURCEID"); + if (teamId != null && !"".equals(teamId)) { + sql.append(" AND p.TEAMID='" + teamId + "'"); + } + sql.append(" ORDER BY r.removetime DESC"); + String sqlStr = sql.toString(); + if (start != -1) { + sqlStr = SQLPagination.getPaginitionSQL(sql.toString(), start, limit); + } + return DBSql.query(sqlStr, rowMapper()); + } + + /** + * 删除“删除信息”及被删除的所有文件 + * + * @param id + * @return + * @author zhangming + */ + public boolean deleteRemoveInfoAndRemoveModels(String ids) { + boolean flag = true; + Connection conn = DBSql.open(); + try { + conn.setAutoCommit(false); + //String sql = "DELETE FROM " + entityName() + " WHERE id IN(" + ids + ")"; + StringBuffer sql = new StringBuffer("DELETE FROM " + entityName() + " WHERE "); + //分批删除 + String[] ids_arr = ids.split(","); + long valueSize = ids_arr.length; + int batchSize = (int) (valueSize / 900 + (valueSize % 900 == 0 ? 0 : 1)); + for(int i = 0; i 0) { + String[] idArray = ids.split(","); + PALRepositoryRemove removeDao = new PALRepositoryRemove(); + for (String id : idArray) { + try { + id = id.replace("'", ""); + removeDao.deleteModelsByRemoveId(conn, id); + } catch (AWSDataAccessException e1) { + flag = false; + conn.rollback(); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + flag = false; + } finally { + try { + conn.setAutoCommit(true); + } catch (SQLException e) { + e.printStackTrace(); + } + DBSql.close(conn); + } + return flag; + } + + /** + * 根据id删除信息 + * + * @param id + * @return + * @author zhangming + */ + public int deleteById(String id) { + String sql = "DELETE FROM " + entityName() + " WHERE id=?"; + return DBSql.update(sql, new Object[] { id }); + } + + /** + * 根据wsId删除信息 + * + * @param wsId + * @return + * @author zhangming + */ + public int deleteByWsId(String wsId) { + String sql = "DELETE FROM " + entityName() + " WHERE WSID=?"; + return DBSql.update(sql, new Object[] { wsId }); + } + + /** + * 根据wsId删除信息及被删除的所有文件 + * + * @param wsId + * @return + * @author zhangming + */ + public boolean deleteRemoveInfoAndRemoveModelsByWsId(String wsId) { + boolean flag = true; + Connection conn = DBSql.open(); + try { + conn.setAutoCommit(false); + String sql = "DELETE FROM " + entityName() + " WHERE WSID=?"; + int r = DBSql.update(conn, sql, new Object[] { wsId }); + if (r > 0) { + PALRepositoryRemove removeDao = new PALRepositoryRemove(); + try { + removeDao.deleteModelsByWsId(conn, wsId); + } catch (AWSDataAccessException e1) { + flag = false; + conn.rollback(); + } + } + } catch (SQLException e) { + e.printStackTrace(); + flag = false; + } finally { + try { + conn.setAutoCommit(true); + } catch (SQLException e) { + e.printStackTrace(); + } + DBSql.close(conn); + } + return flag; + } + + /** + * 从回收站中还原 + * + * @param removeId + * @return + * @author zhangming + */ + public boolean restoreRecycleModel(String removeId) { + if (UtilString.isEmpty(removeId)) { + return false; + } + PALRepositoryRemoveInfoModel removeInfo = new PALRepositoryRemoveInfo().getRemoveInfoById(removeId); + List list = PALRepositoryRemoveCache.getCache().getModelsByRemoveId(removeId); + if (removeInfo == null || list == null) { + return false; + } + boolean flag = true; + Connection conn = DBSql.open(); + try { + conn.setAutoCommit(false); + int orderIndex = 0; + String versionId = ""; + String wsId = ""; + String parentId = ""; + for (PALRepositoryRemoveModel model : list) { + if(model.getId().equals(removeInfo.getRemoveResource())) { + orderIndex = model.getOrderIndex(); + versionId = model.getVersionId(); + wsId = model.getWsId(); + parentId = model.getParentId(); + break; + } + } + if (orderIndex != 0) { + // 防止同一版本的不同流程orderIndex不一致(历史问题会造成不一致),全部统一为当前orderIndex + for (PALRepositoryRemoveModel model : list) { + if (model.getVersionId().equals(versionId)) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl)model; + modelImpl.setOrderIndex(orderIndex); + } + } + // 对其他在资产库中的同级流程的orderIndex更新加1 + List brotherModelList = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByPid(wsId, parentId); + PALRepository dao = new PALRepository(); + for (PALRepositoryModel model2 : brotherModelList) { + if (model2.getOrderIndex() >= orderIndex) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model2; + modelImpl.setOrderIndex(model2.getOrderIndex() +1); //排序顺序加1 + dao.update(modelImpl); + } + } + } + + //更新需要还原的模型的同级别其他模型的排序orderIndex + Set versionIds = new HashSet<>(); + for (PALRepositoryRemoveModel removeModel : list) { + + if (versionIds.contains(removeModel.getVersionId())) { + continue; + } + // String pId = removeModel.getParentId(); + // 获取父节点的所有第一子节点,大于等于当前排序的后移一位orderindex+1 + } + + if (list.size() > 0) { + PALRepository dao = new PALRepository(); + for (PALRepositoryRemoveModel model : list) { + dao.insert(conn, model); + } + } + + String sql = "DELETE FROM " + entityName() + " WHERE id=?"; + int r = DBSql.update(conn, sql, new Object[] { removeId }); + if (r > 0) { + PALRepositoryRemove removeDao = new PALRepositoryRemove(); + removeDao.deleteModelsByRemoveId(conn, removeId); + } + conn.commit(); + } catch (AWSDataAccessException e1) { + flag = false; + try { + conn.rollback(); + } catch (SQLException e) { + e.printStackTrace(); + } + return flag; + } catch (SQLException e) { + e.printStackTrace(); + flag = false; + } finally { + try { + conn.setAutoCommit(true); + } catch (SQLException e) { + e.printStackTrace(); + } + DBSql.close(conn); + } + + return flag; + } + + /** + * 检查表是否存在,如果不存在,则创建表 + * + * @return + * @author zhangming + */ + private boolean checkTable() { + boolean flag = true; + if (!isExistTable()) { + String sql_r_info = ""; + if (AWSServerConf.isOracle()) { + sql_r_info = "create table APP_ACT_COE_PAL_REPO_R_INFO (ID CHAR(36) NOT NULL, REMOVEUSER NVARCHAR2(36), REMOVETIME DATE, WSID NVARCHAR2(36), RESOURCEID NVARCHAR2(36), REMOVETYPE NUMBER(1), PRIMARY KEY (ID))"; + } else if (AWSServerConf.isSQLServer()) { + sql_r_info = "create table APP_ACT_COE_PAL_REPO_R_INFO (ID NVARCHAR(36) NOT NULL, REMOVEUSER NVARCHAR(36), REMOVETIME DATETIME, WSID NVARCHAR(36), RESOURCEID NVARCHAR(36), REMOVETYPE SMALLINT, PRIMARY KEY (ID))"; + } else if (AWSServerConf.isMySQL()) { + sql_r_info = "create table APP_ACT_COE_PAL_REPO_R_INFO (ID VARCHAR(36) NOT NULL, REMOVEUSER VARCHAR(36), REMOVETIME DATETIME, WSID VARCHAR(36), RESOURCEID VARCHAR(36), REMOVETYPE SMALLINT(1), PRIMARY KEY (ID))"; + } else if (AWSServerConf.isDB2()) { + sql_r_info = "create table APP_ACT_COE_PAL_REPO_R_INFO (ID NVARCHAR(36) NOT NULL, REMOVEUSER NVARCHAR(36), REMOVETIME TIMESTAMP, WSID NVARCHAR(36), RESOURCEID NVARCHAR(36), REMOVETYPE SMALLINT, PRIMARY KEY (ID))"; + } else if (AWSServerConf.isPostgreSQL()) { + sql_r_info = "create table APP_ACT_COE_PAL_REPO_R_INFO (ID VARCHAR(36) NOT NULL, REMOVEUSER VARCHAR(36), REMOVETIME TIMESTAMP, WSID VARCHAR(36), RESOURCEID VARCHAR(36), REMOVETYPE SMALLINT, PRIMARY KEY (ID))"; + } else { + sql_r_info = "create table APP_ACT_COE_PAL_REPO_R_INFO (ID NVARCHAR(36) NOT NULL, REMOVEUSER NVARCHAR(36), REMOVETIME DATETIME, WSID NVARCHAR(36), RESOURCEID NVARCHAR(36), REMOVETYPE SMALLINT, PRIMARY KEY (ID))"; + } + DBSql.update(sql_r_info); + PALRepositoryRemove removeDao = new PALRepositoryRemove(); + removeDao.checkTable(); + } + + return flag; + } + + private boolean isExistTable() { + return true; +// Connection conn = DBSql.open(); +// DatabaseMetaData dbmd = null; +// ResultSet rs = null; +// try { +// dbmd = conn.getMetaData(); +// if (AWSServerConf.isOracle()) { +// rs = dbmd.getTables(null, AWSServerConf.getDatabaseUsername().toUpperCase(), entityName(), new String[] { "TABLE" }); +// } else if (AWSServerConf.isPostgreSQL()) { +// rs = dbmd.getTables(null, null, entityName().toLowerCase(), new String[] { "TABLE" }); +// } else { +// rs = dbmd.getTables(null, null, entityName(), new String[] { "TABLE" }); +// } +// +// while (rs.next()) { +// String tableName = rs.getString("TABLE_NAME"); +// if (tableName.toLowerCase().contains(entityName().toLowerCase())) { +// return true; +// } +// } +// } catch (Exception ex) { +// ex.printStackTrace(); +// } finally { +// DBSql.close(conn, null, rs); +// } +// return false; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryShapeAttributeDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryShapeAttributeDao.java new file mode 100644 index 00000000..195dcfc6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryShapeAttributeDao.java @@ -0,0 +1,305 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryAttributeCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryAttributeModel; +import com.actionsoft.bpms.commons.database.BatchPreparedStatementSetter; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryShapeAttributeCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; +import com.actionsoft.exception.AWSDataAccessException; + +public class PALRepositoryShapeAttributeDao extends DaoObject{ + + @Override + public int insert(PALRepositoryShapeAttributeModel model) + throws AWSDataAccessException { + Map paraMap = new HashMap(); + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + paraMap.put(PALRepositoryShapeAttributeModel.FIELD_UUID, model.getId()); + paraMap.put(PALRepositoryShapeAttributeModel.FIELD_WSID, model.getWsId()); + paraMap.put(PALRepositoryShapeAttributeModel.FIELD_ATTRID, model.getAttrId()); + paraMap.put(PALRepositoryShapeAttributeModel.FIELD_ATTRNAME, model.getAttrName()); + paraMap.put(PALRepositoryShapeAttributeModel.FIELD_ATTRVALUE, model.getAttrValue()); + paraMap.put(PALRepositoryShapeAttributeModel.FIELD_CATEGORY, model.getCategory()); + paraMap.put(PALRepositoryShapeAttributeModel.FIELD_METHODID, model.getMethodId()); + paraMap.put(PALRepositoryShapeAttributeModel.FIELD_TYPE, model.getType()); + paraMap.put(PALRepositoryShapeAttributeModel.FIELD_SHAPE_NAME, model.getShapeName()); + paraMap.put(PALRepositoryShapeAttributeModel.FIELD_ORDERINDEX, model.getOrderIndex()); + int result = DBSql.update(DBSql.getInsertStatement(entityName(), paraMap), paraMap); + if (result > 0) { + PALRepositoryShapeAttributeCache.getCache().put(model.getId(), model); + } + return result; + } + + @Override + public int update(PALRepositoryShapeAttributeModel model) + throws AWSDataAccessException { + String sql = "UPDATE " + entityName() + " SET " + PALRepositoryShapeAttributeModel.FIELD_WSID + "=:WSID, "+PALRepositoryShapeAttributeModel.FIELD_ATTRID + ":=ATTRID, " + + PALRepositoryShapeAttributeModel.FIELD_ATTRNAME + "=:ATTRNAME, " + PALRepositoryShapeAttributeModel.FIELD_ATTRVALUE + "=:ATTRVALUE, " + PALRepositoryShapeAttributeModel.FIELD_CATEGORY + "=:CATEGORY, " + PALRepositoryShapeAttributeModel.FIELD_METHODID + "=:METHODID, " + + PALRepositoryShapeAttributeModel.FIELD_TYPE + "=:TYPE," + PALRepositoryShapeAttributeModel.FIELD_SHAPE_NAME +"=:SHAPENAME WHERE " + PALRepositoryShapeAttributeModel.FIELD_UUID + "=:ID "; + Map paraMap = new HashMap(); + paraMap.put("ID", model.getId()); + paraMap.put("WSID", model.getWsId()); + paraMap.put("ATTRID", model.getAttrId()); + paraMap.put("ATTRNAME", model.getAttrName()); + paraMap.put("ATTRVALUE", model.getAttrValue()); + paraMap.put("CATEGORY", model.getCategory()); + paraMap.put("METHODID", model.getMethodId()); + paraMap.put("TYPE", model.getType()); + paraMap.put("SHAPENAME", model.getShapeName()); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + PALRepositoryShapeAttributeCache.getCache().put(model.getId(), model); + } + return r; + } + + @Override + public String entityName() { + return PALRepositoryShapeAttributeModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return new PALRepositoryShapeAttributeMapper(); + } + + private class PALRepositoryShapeAttributeMapper implements RowMapper { + + @Override + public PALRepositoryShapeAttributeModel mapRow(ResultSet rs, int arg1) + throws SQLException { + PALRepositoryShapeAttributeModel model = new PALRepositoryShapeAttributeModel(); + model.setId(rs.getString(PALRepositoryShapeAttributeModel.FIELD_UUID)); + model.setWsId(rs.getString(PALRepositoryShapeAttributeModel.FIELD_WSID)); + model.setAttrId(rs.getString(PALRepositoryShapeAttributeModel.FIELD_ATTRID)); + model.setAttrName(rs.getString(PALRepositoryShapeAttributeModel.FIELD_ATTRNAME)); + model.setAttrValue(rs.getString(PALRepositoryShapeAttributeModel.FIELD_ATTRVALUE)); + model.setCategory(rs.getString(PALRepositoryShapeAttributeModel.FIELD_CATEGORY)); + model.setMethodId(rs.getString(PALRepositoryShapeAttributeModel.FIELD_METHODID)); + model.setType(rs.getString(PALRepositoryShapeAttributeModel.FIELD_TYPE)); + model.setShapeName(rs.getString(PALRepositoryShapeAttributeModel.FIELD_SHAPE_NAME)); + model.setOrderIndex(rs.getInt(PALRepositoryShapeAttributeModel.FIELD_ORDERINDEX)); + return model; + } + + } + /** + * 删除属性 + * @param id + * @param wsId + * @param methodId + * @param shapeName + * @param attrId + * @return + */ + public int deleteShapeAttribute(String id, String wsId, String methodId, String shapeName, String attrId) throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName() + " WHERE WSID=:WSID AND METHODID=:METHODID AND SHAPENAME=:SHAPENAME AND ATTRID=:ATTRID "; + Map paraMap = new HashMap(); + paraMap.put("WSID", wsId); + paraMap.put("METHODID", methodId); + paraMap.put("SHAPENAME", shapeName); + paraMap.put("ATTRID", attrId); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + PALRepositoryShapeAttributeCache.getCache().remove(id); + } + return r; + } + + /** + * 删除属性 + * @param id + * @return + */ + public int deleteShapeAttribute(String id) throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName() + " WHERE ID=:ID "; + Map paraMap = new HashMap(); + paraMap.put("ID", id); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + PALRepositoryShapeAttributeCache.getCache().remove(id); + } + return r; + } + + /** + * 删除属性 + * @param attrId + * @return + */ + public int deleteByMethodIdAndAttrId(String methodId, String attrId) throws AWSDataAccessException{ + String sql = "DELETE FROM " + entityName() + " WHERE METHODID = :METHODID AND ATTRID = :ATTRID "; + Map paraMap = new HashMap(); + paraMap.put("METHODID", methodId); + paraMap.put("ATTRID", attrId); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + List attributeModelList = PALRepositoryShapeAttributeCache.getAttributeModelListByAttrId(methodId, attrId); + if (attributeModelList != null && attributeModelList.size() > 0) { + for (PALRepositoryShapeAttributeModel attributeModel : attributeModelList) { + PALRepositoryAttributeCache.getCache().remove(attributeModel.getId()); + } + } + } + return r; + } + + /** + * 获取指定资产库的某类图的数据属性列表 + * + * @param methodId + * @return + */ + public List getShapeAttributeByMethodId(String methodId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + PALRepositoryShapeAttributeModel.FIELD_METHODID + "=:METHODID ORDER BY " + PALRepositoryShapeAttributeModel.FIELD_ORDERINDEX; + Map params = new HashMap(); + params.put("METHODID", methodId); + return DBSql.query(sql, params, rowMapper()); + } + + /** + * 获取指定资产库的某类图的数据属性列表 + * + * @param wsid + * @param methodId + * @return + */ + public List getShapeAttribute(String wsid, String methodId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + PALRepositoryShapeAttributeModel.FIELD_WSID + "=:WSID AND " + PALRepositoryShapeAttributeModel.FIELD_METHODID + "=:METHODID GROUP BY ATTRID ORDER BY " + PALRepositoryShapeAttributeModel.FIELD_ORDERINDEX; + Map params = new HashMap(); + params.put("WSID", wsid); + params.put("METHODID", methodId); + return DBSql.query(sql, params, rowMapper()); + } + + /** + * 获取指定资产库的数据属性列表 + * + * @param wsId + * @return + */ + public List getShapeAttributeByWsId(String wsId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + PALRepositoryShapeAttributeModel.FIELD_WSID + "=:WSID"; + Map params = new HashMap(); + params.put("WSID", wsId); + return DBSql.query(sql, params, rowMapper()); + } + + /** + * 批量插入数据 + * + * @param configs + * @return + * @throws SQLException + */ + public int[] batchInsert(List configs) throws SQLException { + Connection conn = DBSql.open(); + conn.setAutoCommit(false); + int[] resultNum; + try { + //新增所有配置信息 + String sql = "INSERT INTO " + entityName() + "(ID, WSID, ATTRID, ATTRNAME, ATTRVALUE, CATEGORY, METHODID, TYPE, SHAPENAME, ORDERINDEX) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + for (PALRepositoryShapeAttributeModel model : configs) { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + } + // 执行批量 + resultNum = DBSql.batch(conn, sql, new BatchPreparedStatementSetter() { + @Override + public void setValues(PreparedStatement pst, int paramInt) throws SQLException { + PALRepositoryShapeAttributeModel model = configs.get(paramInt); + pst.setString(1, model.getId()); + pst.setString(2, model.getWsId()); + pst.setString(3, model.getAttrId()); + pst.setString(4, model.getAttrName()); + pst.setString(5, model.getAttrValue()); + pst.setString(6, model.getCategory()); + pst.setString(7, model.getMethodId()); + pst.setString(8, model.getType()); + pst.setString(9, model.getShapeName()); + pst.setInt(10, model.getOrderIndex()); + } + + public int getBatchSize() { + return configs.size(); + } + }); + conn.commit(); + return resultNum; + } catch(SQLException e) { + conn.rollback(); + throw e; + }finally { + DBSql.close(conn); + } + } + + /** + * 修改属性的名称和排序 + * + * @param wsid + * @param attrId + * @param methodId + * @param attrName + * @param orderIndex + * @return + */ + public int updateAttrNameAndOrderIndex(String wsid, String attrId, String methodId, String attrName, int orderIndex) { + String sql = "UPDATE " + entityName() + " SET " + PALRepositoryShapeAttributeModel.FIELD_ATTRNAME + "=:ATTRNAME," + PALRepositoryShapeAttributeModel.FIELD_ORDERINDEX + "=:ORDERINDEX WHERE " + + PALRepositoryShapeAttributeModel.FIELD_WSID + "=:WSID AND " + PALRepositoryShapeAttributeModel.FIELD_ATTRID + "=:ATTRID AND " + PALRepositoryShapeAttributeModel.FIELD_METHODID + "=:METHODID"; + Map params = new HashMap(); + params.put("ATTRNAME", attrName); + params.put("ORDERINDEX", orderIndex); + params.put("WSID", wsid); + params.put("ATTRID", attrId); + params.put("METHODID", methodId); + int r = DBSql.update(sql, params); + if (r > 0) { + String sqlSelect = "SELECT * FROM " + entityName() + " WHERE " + PALRepositoryShapeAttributeModel.FIELD_WSID + "=:WSID AND " + PALRepositoryShapeAttributeModel.FIELD_METHODID + "=:METHODID AND " + PALRepositoryShapeAttributeModel.FIELD_ATTRID + "=:ATTRID"; + Map paramsSelect = new HashMap(); + paramsSelect.put("WSID", wsid); + paramsSelect.put("METHODID", methodId); + paramsSelect.put("ATTRID", attrId); + List list = DBSql.query(sqlSelect, paramsSelect, rowMapper()); + list.forEach(model -> PALRepositoryShapeAttributeCache.getCache().put(model.getId(), model)); + } + return r; + } + + /** + * 批量修改属性id和名称 + * @param wsId + * @param oldAttrId + * @param newAttrId + * @return + * @throws AWSDataAccessException + */ + public int batchUpdateAttrByWsId(String wsId, String oldAttrId, String newAttrId) + throws AWSDataAccessException { + String sql = "UPDATE " + entityName() + " SET " + PALRepositoryShapeAttributeModel.FIELD_ATTRID + "=:ATTRID " + + " WHERE " + PALRepositoryShapeAttributeModel.FIELD_WSID + "=:WSID AND " + PALRepositoryShapeAttributeModel.FIELD_ATTRID + "=:OLDATTRID"; + Map paraMap = new HashMap(); + paraMap.put("ATTRID", newAttrId); + paraMap.put("WSID", wsId); + paraMap.put("OLDATTRID", oldAttrId); + int r = DBSql.update(sql, paraMap); + return r; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryShapeConfigDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryShapeConfigDao.java new file mode 100644 index 00000000..b34ff0d3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositoryShapeConfigDao.java @@ -0,0 +1,198 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao; + +import com.actionsoft.bpms.commons.database.BatchPreparedStatementSetter; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryShapeConfigCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeConfigModel; +import com.actionsoft.exception.AWSDataAccessException; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 形状配置的dao + * + * @author 郝文豪(James) + * @date 2019/10/29 0029 上午 9:49 + */ +public class PALRepositoryShapeConfigDao extends DaoObject { + @Override + public int insert(PALRepositoryShapeConfigModel model) throws AWSDataAccessException { + return 0; + } + + @Override + public int update(PALRepositoryShapeConfigModel model) throws AWSDataAccessException { + return 0; + } + + /** + * 通过wsId来查询形状配置 + * + * @param wsId + * @return + */ + public List queryShapeConfigByWsId(String wsId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + PALRepositoryShapeConfigModel.FIELD_WSID + "=:WSID"; + Map params = new HashMap(); + params.put("WSID", wsId); + return DBSql.query(sql, params, rowMapper()); + } + + /** + * 批量插入数据 + * + * @param configs + * @return + * @throws SQLException + */ + public int[] batchInsert(List configs) throws SQLException { + Connection conn = DBSql.open(); + conn.setAutoCommit(false); + int[] resultNum; + try { + //新增所有配置信息 + String sql = "INSERT INTO " + entityName() + "(ID, WSID, METHODID, SHAPEID, ATTRIBUTE, ORDERINDEX) VALUES (?, ?, ?, ?, ?, ?)"; + for (PALRepositoryShapeConfigModel model : configs) { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + } + // 执行批量 + resultNum = DBSql.batch(conn, sql, new BatchPreparedStatementSetter() { + @Override + public void setValues(PreparedStatement pst, int paramInt) throws SQLException { + PALRepositoryShapeConfigModel model = configs.get(paramInt); + pst.setString(1, model.getId()); + pst.setString(2, model.getWsId()); + pst.setString(3, model.getMethodId()); + pst.setString(4, model.getShapeId()); + pst.setString(5, model.getAttribute()); + pst.setInt(6, model.getOrderIndex()); + } + + public int getBatchSize() { + return configs.size(); + } + }); + conn.commit(); + return resultNum; + } catch(SQLException e) { + conn.rollback(); + throw e; + }finally { + DBSql.close(conn); + } + } + + /** + * 批量更新形状的配置信息 + * + * @param wsId + * @param methodId + * @param shapeId + * @param configs + * @return + * @throws SQLException + */ + public int[] updateShapeConfigByShapeId(String wsId, String methodId, String shapeId, List configs) throws SQLException { + Connection conn = DBSql.open(); + conn.setAutoCommit(false); + int[] resultNum; + try { + //删除已有的配置信息 + List configList = PALRepositoryShapeConfigCache.getShapeConfigListByShapeId(wsId, methodId, shapeId); + if (configList != null && configList.size() > 0) { + deleteShapeConfigByShapeId(conn, wsId, methodId, shapeId); + } + //新增所有配置信息 + String sql = "INSERT INTO " + entityName() + "(ID, WSID, METHODID, SHAPEID, ATTRIBUTE, ORDERINDEX) VALUES (?, ?, ?, ?, ?, ?)"; + for (PALRepositoryShapeConfigModel model : configs) { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + } + // 执行批量 + resultNum = DBSql.batch(conn, sql, new BatchPreparedStatementSetter() { + @Override + public void setValues(PreparedStatement pst, int paramInt) throws SQLException { + PALRepositoryShapeConfigModel model = configs.get(paramInt); + pst.setString(1, model.getId()); + pst.setString(2, model.getWsId()); + pst.setString(3, model.getMethodId()); + pst.setString(4, model.getShapeId()); + pst.setString(5, model.getAttribute()); + pst.setInt(6, model.getOrderIndex()); + } + + public int getBatchSize() { + return configs.size(); + } + }); + conn.commit(); + /* + * 更新缓存 + */ + List list = PALRepositoryShapeConfigCache.getShapeConfigListByShapeId(wsId, methodId, shapeId); + if (list != null) { + for (PALRepositoryShapeConfigModel model : list) { + PALRepositoryShapeConfigCache.getCache().remove(model.getId()); + } + } + for (PALRepositoryShapeConfigModel model : configs) { + PALRepositoryShapeConfigCache.getCache().remove(model.getId()); + PALRepositoryShapeConfigCache.getCache().put(model.getId(), model); + } + + return resultNum; + } catch(SQLException e) { + conn.rollback(); + throw e; + }finally { + DBSql.close(conn); + } + } + + public int deleteShapeConfigByShapeId(Connection conn, String wsId, String methodId, String shapeId) { + String sql = "DELETE FROM " + entityName() + " WHERE " + PALRepositoryShapeConfigModel.FIELD_WSID + "=:WSID AND " + PALRepositoryShapeConfigModel.FIELD_METHODID +"=:METHODID AND " + PALRepositoryShapeConfigModel.FIELD_SHAPEID + "=:SHAPEID"; + Map params = new HashMap(); + params.put("WSID", wsId); + params.put("METHODID", methodId); + params.put("SHAPEID", shapeId); + return DBSql.update(conn, sql, params); + } + + @Override + public String entityName() { + return PALRepositoryShapeConfigModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return new PALRepositoryShapeConfigModelMapper(); + } + + private static class PALRepositoryShapeConfigModelMapper implements RowMapper { + public PALRepositoryShapeConfigModel mapRow(ResultSet rs, int arg1) + throws SQLException { + PALRepositoryShapeConfigModel model=new PALRepositoryShapeConfigModel(); + model.setId(rs.getString(PALRepositoryShapeConfigModel.FIELD_ID)); + model.setWsId(rs.getString(PALRepositoryShapeConfigModel.FIELD_WSID)); + model.setMethodId(rs.getString(PALRepositoryShapeConfigModel.FIELD_METHODID)); + model.setShapeId(rs.getString(PALRepositoryShapeConfigModel.FIELD_SHAPEID)); + model.setAttribute(rs.getString(PALRepositoryShapeConfigModel.FIELD_ATTRIBUTE) == null ? "" : rs.getString(PALRepositoryShapeConfigModel.FIELD_ATTRIBUTE)); + model.setOrderIndex(rs.getInt(PALRepositoryShapeConfigModel.FIELD_ORDERINDEX)); + return model; + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositorySpecialPropertyDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositorySpecialPropertyDao.java new file mode 100644 index 00000000..7104baaa --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/PALRepositorySpecialPropertyDao.java @@ -0,0 +1,163 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositorySpecialPropertyModel; +import com.actionsoft.exception.AWSDataAccessException; + +/** + * 文件的特殊属性(类似表格多行多列) + * @author sunlh + * + */ +public class PALRepositorySpecialPropertyDao extends DaoObject { + + @Override + public int insert(PALRepositorySpecialPropertyModel model) throws AWSDataAccessException { + if(UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + Map paraMap = new HashMap(); + paraMap.put(PALRepositorySpecialPropertyModel.FIELD_ID, model.getId()); + paraMap.put(PALRepositorySpecialPropertyModel.FIELD_PLID, model.getPlId()); + paraMap.put(PALRepositorySpecialPropertyModel.TYPE, model.getType()); + paraMap.put(PALRepositorySpecialPropertyModel.WS_ID, model.getWsId()); + paraMap.put(PALRepositorySpecialPropertyModel.VALUETEXT, model.getValueText()); + int result = DBSql.update(DBSql.getInsertStatement(entityName(), paraMap), paraMap); + return result; + } + + @Override + public int update(PALRepositorySpecialPropertyModel model) throws AWSDataAccessException { + String sql = "UPDATE " + PALRepositorySpecialPropertyModel.DATABASE_ENTITY + " SET " + PALRepositorySpecialPropertyModel.VALUETEXT + " = ?" + " WHERE " + PALRepositorySpecialPropertyModel.FIELD_ID + " = ? "; + return DBSql.update(sql, new Object[] {model.getValueText(), model.getId()}); + } + + /** + * 获取属性 + * @param wsId 资产库id + * @param plId 流程id + * @return + */ + public List getSpecialPropertysByPlid(String wsId, String plId) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + PALRepositorySpecialPropertyModel.WS_ID + "=:WSID" + " AND " + PALRepositorySpecialPropertyModel.FIELD_PLID + "=:PLID"; + Map params = new HashMap(); + params.put("WSID", wsId); + params.put("PLID", plId); + return DBSql.query(sql, params, rowMapper()); + } + + /** + * 获取属性 + * @param wsId 资产库id + * @param plId 流程id + * @param type 类型 + * @return + */ + public List getSpecialPropertysByPlidAndType(String wsId, String plId, String type) { + String sql = "SELECT * FROM " + entityName() + " WHERE " + PALRepositorySpecialPropertyModel.WS_ID + "=:WSID" + " AND " + PALRepositorySpecialPropertyModel.FIELD_PLID + "=:PLID" + " AND " + PALRepositorySpecialPropertyModel.TYPE + "=:TYPE"; + Map params = new HashMap(); + params.put("WSID", wsId); + params.put("PLID", plId); + params.put("TYPE", type); + return DBSql.query(sql, params, rowMapper()); + } + + /** + * 删除 + * @param id 主键 + * @return + */ + public int deleteById(String id) { + String sql = "DELETE FROM " + entityName() + " WHERE " + PALRepositorySpecialPropertyModel.FIELD_ID + " =?"; + return DBSql.update(sql, new Object[] {id}); + } + + /** + * 删除 + * @param plId 模型id + */ + public int deleteByPlId(String plId) { + String sql = "DELETE FROM " + entityName() + " WHERE " + PALRepositorySpecialPropertyModel.FIELD_PLID + " =?"; + return DBSql.update(sql, new Object[] {plId}); + } + + @Override + public String entityName() { + return PALRepositorySpecialPropertyModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return new PALRepositorySpecialPropertyModelMapper(); + } + + private static class PALRepositorySpecialPropertyModelMapper implements RowMapper { + public PALRepositorySpecialPropertyModel mapRow(ResultSet rs, int arg1) + throws SQLException { + PALRepositorySpecialPropertyModel model=new PALRepositorySpecialPropertyModel(); + model.setId(rs.getString(PALRepositorySpecialPropertyModel.FIELD_ID)); + model.setPlId(rs.getString(PALRepositorySpecialPropertyModel.FIELD_PLID)); + model.setType(rs.getString(PALRepositorySpecialPropertyModel.TYPE)); + model.setWsId(rs.getString(PALRepositorySpecialPropertyModel.WS_ID)); + model.setValueText(rs.getString(PALRepositorySpecialPropertyModel.VALUETEXT)); + return model; + } + } + + /** + * 备份恢复时批量插入 + * @param list + * @return + */ + public boolean batchInsert(List list) { + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + String sql = "INSERT INTO APP_ACT_COE_PAL_SPCL_PROP (ID, PLID, WSID, TYPE, VALUETEXT) VALUES(?, ?, ?, ?, ?)"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (int i = 0; i < list.size(); i++) { + PALRepositorySpecialPropertyModel model = list.get(i); + prest.setString(1, model.getId()); + prest.setString(2, model.getPlId()); + prest.setString(3, model.getWsId()); + prest.setString(4, model.getType()); + prest.setString(5, model.getValueText()); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + try { + if (prest != null) { + prest.close(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + DBSql.close(conn, prest, null); + } + return false; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/db2/CoeProcessLevelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/db2/CoeProcessLevelAdapter.java new file mode 100644 index 00000000..f83272da --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/db2/CoeProcessLevelAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.db2; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; + +public class CoeProcessLevelAdapter extends PALRepository{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/db2/CoeProcessLevelSystemNameAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/db2/CoeProcessLevelSystemNameAdapter.java new file mode 100644 index 00000000..59c02437 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/db2/CoeProcessLevelSystemNameAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.db2; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelSystemName; + +public class CoeProcessLevelSystemNameAdapter extends CoeProcessLevelSystemName{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/informix/CoeProcessLevelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/informix/CoeProcessLevelAdapter.java new file mode 100644 index 00000000..56c4511b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/informix/CoeProcessLevelAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.informix; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; + +public class CoeProcessLevelAdapter extends PALRepository{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/informix/CoeProcessLevelSystemNameAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/informix/CoeProcessLevelSystemNameAdapter.java new file mode 100644 index 00000000..f839f203 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/informix/CoeProcessLevelSystemNameAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.informix; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelSystemName; + +public class CoeProcessLevelSystemNameAdapter extends CoeProcessLevelSystemName{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/mysql/CoeProcessLevelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/mysql/CoeProcessLevelAdapter.java new file mode 100644 index 00000000..9dea1299 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/mysql/CoeProcessLevelAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.mysql; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; + +public class CoeProcessLevelAdapter extends PALRepository{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/mysql/CoeProcessLevelSystemNameAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/mysql/CoeProcessLevelSystemNameAdapter.java new file mode 100644 index 00000000..5f552bdb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/mysql/CoeProcessLevelSystemNameAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.mysql; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelSystemName; + +public class CoeProcessLevelSystemNameAdapter extends CoeProcessLevelSystemName{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/oracle/CoeProcessLevelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/oracle/CoeProcessLevelAdapter.java new file mode 100644 index 00000000..14a897f7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/oracle/CoeProcessLevelAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.oracle; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; + +public class CoeProcessLevelAdapter extends PALRepository{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/oracle/CoeProcessLevelSystemNameAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/oracle/CoeProcessLevelSystemNameAdapter.java new file mode 100644 index 00000000..c316a803 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/oracle/CoeProcessLevelSystemNameAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.oracle; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelSystemName; + +public class CoeProcessLevelSystemNameAdapter extends CoeProcessLevelSystemName{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/oscar/CoeProcessLevelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/oscar/CoeProcessLevelAdapter.java new file mode 100644 index 00000000..a154af54 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/oscar/CoeProcessLevelAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.oscar; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; + +public class CoeProcessLevelAdapter extends PALRepository{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/oscar/CoeProcessLevelSystemNameAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/oscar/CoeProcessLevelSystemNameAdapter.java new file mode 100644 index 00000000..28144e73 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/oscar/CoeProcessLevelSystemNameAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.oscar; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelSystemName; + +public class CoeProcessLevelSystemNameAdapter extends CoeProcessLevelSystemName{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/postgresql/CoeProcessLevelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/postgresql/CoeProcessLevelAdapter.java new file mode 100644 index 00000000..31e1393b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/postgresql/CoeProcessLevelAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.postgresql; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; + +public class CoeProcessLevelAdapter extends PALRepository { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/postgresql/CoeProcessLevelSystemNameAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/postgresql/CoeProcessLevelSystemNameAdapter.java new file mode 100644 index 00000000..653fec94 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/postgresql/CoeProcessLevelSystemNameAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.postgresql; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelSystemName; + +public class CoeProcessLevelSystemNameAdapter extends CoeProcessLevelSystemName { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/sqlserver/CoeProcessLevelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/sqlserver/CoeProcessLevelAdapter.java new file mode 100644 index 00000000..f43f5380 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/sqlserver/CoeProcessLevelAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.sqlserver; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; + +public class CoeProcessLevelAdapter extends PALRepository{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/sqlserver/CoeProcessLevelSystemNameAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/sqlserver/CoeProcessLevelSystemNameAdapter.java new file mode 100644 index 00000000..1ece07b4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/sqlserver/CoeProcessLevelSystemNameAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.sqlserver; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelSystemName; + +public class CoeProcessLevelSystemNameAdapter extends CoeProcessLevelSystemName{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/sybase/CoeProcessLevelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/sybase/CoeProcessLevelAdapter.java new file mode 100644 index 00000000..a34dfc7c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/sybase/CoeProcessLevelAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.sybase; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; + +public class CoeProcessLevelAdapter extends PALRepository{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/sybase/CoeProcessLevelSystemNameAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/sybase/CoeProcessLevelSystemNameAdapter.java new file mode 100644 index 00000000..e4fe4bbc --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/dao/sybase/CoeProcessLevelSystemNameAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.repository.dao.sybase; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelSystemName; + +public class CoeProcessLevelSystemNameAdapter extends CoeProcessLevelSystemName{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/CoeDesignerShapeAPIManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/CoeDesignerShapeAPIManager.java new file mode 100644 index 00000000..64a1831d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/CoeDesignerShapeAPIManager.java @@ -0,0 +1,1175 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer; + +import java.util.*; + +import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; +import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition; +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.org.model.RoleModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.pal.method.util.PALMethodUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryShapeAttributeCache; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryShapeConfigCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.web.CoeDesignerWeb; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryAttributeModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeConfigModel; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerShapeCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.manage.CoeDesignerAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.dao.DesignerShapeRelationDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.google.common.collect.Lists; +import org.apache.commons.lang.StringUtils; + +public class CoeDesignerShapeAPIManager { + + private static class Inner { + private final static CoeDesignerShapeAPIManager instance = new CoeDesignerShapeAPIManager(); + } + + public static CoeDesignerShapeAPIManager getInstance() { + return CoeDesignerShapeAPIManager.Inner.instance; + } + + private CoeDesignerShapeAPIManager() { + } + + /** + * 根据条件得到相关的图形 + * + * @param map 查询条件 + * @return 图形的json集合 + */ + public List getShapeList(Map map) { + if (map.isEmpty()){ + return getShapeList(); + } + List list = null; + String fileId = map.get("fileId"); + Map map1 = new HashMap(); + if (fileId != null) { + list = new ArrayList(); + JSONArray jsonArray = CoeDesignerShapeCache.getCache().get(fileId); + if (jsonArray != null && jsonArray.size() > 0) { + addJson(map, list, map1, jsonArray); + } + } else { + Iterator it = CoeDesignerShapeCache.getCache().iterator(); + list = new ArrayList(); + while (it.hasNext()) { + JSONArray jsonArray = it.next(); + addJson(map, list, map1, jsonArray); + } + + } + return list; + } + + public List getShapeList() { + List list = null; + Iterator it = CoeDesignerShapeCache.getCache().iterator(); + list = new ArrayList(); + while (it.hasNext()) { + JSONArray jsonArray = it.next(); + for (Object obj : jsonArray) { + JSONObject jsonObj = (JSONObject) obj; + list.add(jsonObj); + } + } + + return list; + } + + private void addJson(Map map, List list, Map map1, JSONArray jsonArray) { + for (Object obj : jsonArray) { + JSONObject jsonObj = (JSONObject) obj; + if (exist(jsonObj, map1, map)) { + list.add(jsonObj); + } + } + } + + private boolean exist(JSONObject jsonObj, Map map1, Map map) { + JSONObject jsonAttr = JSONObject.parseObject(jsonObj.getString("dataAttributes")); + map1.put("shapeId", jsonObj.getString("id")); + map1.put("shapeName", jsonObj.getString("text")); + map1.put("shapeType", jsonObj.getString("name")); + if (jsonAttr.containsKey("shapeDesc")) { + map1.put("shapeDesc", jsonAttr.getString("shapeDesc")); + } + Set result = new HashSet(2); + Set keySet = map.keySet(); + for (String key : keySet) { + String value = map.get(key); + result.add(value != null && value.equals(map1.get(key))); + } + if (result.size() > 0 && result.contains(true)) { + return true; + } + return false; + } + + /** + * 根据形状配置信息调整流程文件形状属性 + * @param _uc + * @param id 流程id + * @param methodId 流程分类 + * @param shapeName 流程形状 + * @param shapeAttrConfigs 形状配置信息 + * @param attributeXmlMap + */ + public void updateShapeAttribute(UserContext _uc, String id, String methodId, String shapeName, List shapeAttrConfigs, Map> attributeXmlMap) { + PALRepositoryModel palModel = PALRepositoryCache.getCache().get(id); + if (palModel == null) { + return; + } + Map shapeAttrConfigMap = new HashMap<>(); + for (PALRepositoryShapeAttributeModel model : shapeAttrConfigs) { + shapeAttrConfigMap.put(model.getAttrId(), model); + } + // 判断是否关联bpm + String processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(palModel.getId(), true); + if (UtilString.isEmpty(processDefId)) {// pal流程 + BaseModel model = CoeDesignerAPIManager.getInstance().getDefinition(palModel.getId(), 0); + if (model == null) { + return; + } + String define = model.getDefinition(); + JSONObject definition = JSONObject.parseObject(define); + JSONObject tempElements = new JSONObject(); + JSONObject elements = JSONObject.parseObject(definition.getString("elements")); + Iterator it = elements.keySet().iterator(); + while (it.hasNext()) { + String key = it.next(); + JSONObject shape = JSONObject.parseObject(elements.getString(key)); + if (shapeName.equals(shape.getString("name")) && !"linker".equals(shapeName) && shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + if (!dataAttributes.isEmpty() && dataAttributes.size() > 0) { + for (Object object : dataAttributes) { + JSONObject obj = (JSONObject)object; + if (obj.containsKey("attributesJsonArray")) { + JSONArray attributesJsonArray = JSONArray.parseArray(obj.getString("attributesJsonArray")); + JSONArray newArray = new JSONArray(); + Set removeIds = new HashSet<>(); + Set commonIds = new HashSet<>(); + for (int i = 0; i < attributesJsonArray.size(); i++) { + if (attributesJsonArray.get(i) != null) { + JSONObject attrObj = attributesJsonArray.getJSONObject(i); + if (shapeAttrConfigMap.containsKey(attrObj.getString("key"))) { + newArray.add(attrObj); + commonIds.add(attrObj.getString("key"));// 共同的数据标记 + } else { + removeIds.add(attrObj.getString("key"));// 待删除的数据标记 + } + } + } + for (PALRepositoryShapeAttributeModel attrModel : shapeAttrConfigs) { + if (!commonIds.contains(attrModel.getAttrId())) { // 新增的数据处理 + Map map = attributeXmlMap.get(attrModel.getAttrId()); + if (map != null) { + JSONObject attrObj = JSONObject.parseObject(JSON.toJSONString(map)); + newArray.add(attrObj); + } + } + } + obj.put("attributesJsonArray", newArray); + if (removeIds.size() == 0) { + deleteRelationAttributes(palModel.getId(), shape.getString("id"), removeIds); + } + } + } + } + } + tempElements.put(key, shape); + } + definition.put("elements", tempElements); + JSONObject localAttribute = JSONObject.parseObject(definition.getString("localAttribute")); + if (localAttribute == null || localAttribute.isEmpty()) { + localAttribute = new JSONObject(); + } + localAttribute.remove(shapeName); + JSONArray attributes = new JSONArray(); + for (PALRepositoryShapeAttributeModel attrModel : shapeAttrConfigs) { + Map map = attributeXmlMap.get(attrModel.getAttrId()); + if (map != null) { + JSONObject attrObj = JSONObject.parseObject(JSON.toJSONString(map)); + attributes.add(attrObj); + } + } + if (attributes.size() > 0) { + localAttribute.put(shapeName, attributes); + } + definition.put("localAttribute", localAttribute); + model.setDefinition(definition.toString()); + CoeDesignerAPIManager.getInstance().storeDefinition(model);// dao操作 + } else {// 关联bpm流程 + String define = PALRepositoryQueryAPIManager.getInstance().getProcessDefinition(_uc, id); + JSONObject definition = JSONObject.parseObject(define); + JSONObject tempElements = new JSONObject(); + JSONObject elements = JSONObject.parseObject(definition.getString("elements")); + Iterator it = elements.keySet().iterator(); + while (it.hasNext()) { + String key = it.next(); + JSONObject shape = JSONObject.parseObject(elements.getString(key)); + if (shapeName.equals(shape.getString("name")) && !"linker".equals(shapeName) && shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + if (!dataAttributes.isEmpty() && dataAttributes.size() > 0) { + for (Object object : dataAttributes) { + JSONObject obj = (JSONObject)object; + if (obj.containsKey("attributesJsonArray")) { + JSONArray attributesJsonArray = JSONArray.parseArray(obj.getString("attributesJsonArray")); + JSONArray newArray = new JSONArray(); + Set removeIds = new HashSet<>(); + Set commonIds = new HashSet<>(); + for (int i = 0; i < attributesJsonArray.size(); i++) { + if (attributesJsonArray.get(i) != null) { + JSONObject attrObj = attributesJsonArray.getJSONObject(i); + if (shapeAttrConfigMap.containsKey(attrObj.getString("key"))) { + newArray.add(attrObj); + commonIds.add(attrObj.getString("key"));// 共同的数据标记 + } else { + removeIds.add(attrObj.getString("key"));// 待删除的数据标记 + } + } + } + for (PALRepositoryShapeAttributeModel attrModel : shapeAttrConfigs) { + if (!commonIds.contains(attrModel.getAttrId())) { // 新增的数据处理 + Map map = attributeXmlMap.get(attrModel.getAttrId()); + if (map != null) { + JSONObject attrObj = JSONObject.parseObject(JSON.toJSONString(map)); + newArray.add(attrObj); + } + } + } + obj.put("attributesJsonArray", newArray); + if (removeIds.size() == 0) { + deleteRelationAttributes(palModel.getId(), shape.getString("id"), removeIds); + } + } + } + } + } + tempElements.put(key, shape); + } + definition.put("elements", tempElements); + CoeDesignerWeb designerWeb = new CoeDesignerWeb(_uc); + ProcessDefinition definition1 = ProcessDefCache.getInstance().get(processDefId); + String appId = definition1.getAppId(); + String processDefVerId = definition1.getVersionId(); + designerWeb.definitionOfBpmnSave(id, 0, appId, processDefId, "edit|" + processDefVerId, definition.toString(), ""); + } + } + + private String validateJson(String name) { + return name == null ? "" : name; + } + + /** + * 删除关联属性内容 + * @param uuid + * @param shapeId + * @param removeAttrIds + */ + public void deleteRelationAttributes(String uuid, String shapeId, Set removeAttrIds) { + List list = DesignerShapeRelationCache.getListByShapeId(uuid, shapeId); + if (list != null && list.size() > 0) { + List ids = new ArrayList(); + for (DesignerShapeRelationModel model : list) { + if (UtilString.isEmpty(model.getShapeId())) { + continue; + } + if (removeAttrIds.contains(model.getAttrId())) { + ids.add(model.getId()); + } + } + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + dao.deleteByIds(ids); + } + } + + /** + * 删除关联数据 + * @param uuid + * @param shapeId + * @param removeAttrIds + */ + @Deprecated + public void deleteRelationAttributes(String uuid, String shapeId, String removeAttrIds) { + List list = DesignerShapeRelationCache.getListByShapeId(uuid, shapeId); + if (list != null && list.size() > 0) { + List ids = new ArrayList(); + for (DesignerShapeRelationModel model : list) { + if (model.getShapeId().equals("")) { + continue; + } + String attrId = model.getAttrId(); + if (!removeAttrIds.contains(attrId)) { + ids.add(model.getId()); + } + } + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + dao.deleteByIds(ids); + } + } + + /** + * 完善节点数据属性 + * @return + */ + public JSONObject updateShapeDataAttributes(JSONObject definition, JSONObject localAttribute) { + JSONObject elements = definition.getJSONObject("elements"); + Iterator it = elements.keySet().iterator(); + boolean isUpdate = false; + while (it.hasNext()) { + String key = it.next(); + JSONObject shape = elements.getJSONObject(key); + String shapeName = shape.getString("name"); + if(!"linker".equals(shapeName)) { + if (shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + if (!dataAttributes.isEmpty() && dataAttributes.size() > 0) { + boolean isExist = false; + for (Object object : dataAttributes) { + JSONObject obj = (JSONObject) object; + if (obj.containsKey("attributesJsonArray")) { + isExist = true; + } + } + // 没有attributesJsonArray,增加默认属性 + if (!isExist) { + String defaultDataAttribute = new String(CoeDesignerUtil.DEFAULT_DATA_ATTRIBUTE); + JSONObject defaultDataAttributeObj = JSONObject.parseObject(defaultDataAttribute); + defaultDataAttributeObj.put("id", UUIDGener.getObjectId());// id + dataAttributes.add(defaultDataAttributeObj); + shape.put("dataAttributes", dataAttributes); + elements.put(key, shape); + isUpdate = true; + } + } + } + } + } + if (isUpdate) { + definition.put("elements", elements); + } + // 根据配置补全数据属性 + definition = updateShapeLocalAttributes(definition, localAttribute); + return definition; + } + + /** + * 根据localAttribute补全数据属性 + * @param definition + * @param localAttribute + * @return + */ + private JSONObject updateShapeLocalAttributes(JSONObject definition, JSONObject localAttribute) { + if (localAttribute == null || localAttribute.isEmpty()) { + return definition; + } + JSONObject elements = definition.getJSONObject("elements"); + Iterator it = elements.keySet().iterator(); + while (it.hasNext()) { + String shapeId = it.next(); + JSONObject shape = elements.getJSONObject(shapeId); + String shapeName = shape.getString("name"); + if(!"linker".equals(shapeName) && localAttribute.containsKey(shapeName) && shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + if (!dataAttributes.isEmpty() && dataAttributes.size() > 0) { + for (Object object : dataAttributes) { + JSONObject obj = (JSONObject) object; + if (obj.containsKey("attributesJsonArray")) { + JSONArray attrConfigArr = localAttribute.getJSONArray(shapeName); + JSONArray attributesJsonArray = obj.getJSONArray("attributesJsonArray"); + for (int i = 0; i < attrConfigArr.size(); i++) { + JSONObject attrConfig = attrConfigArr.getJSONObject(i); + boolean existAttr = false; + for (int j = 0; j < attributesJsonArray.size(); j++) { + JSONObject attrObj = attributesJsonArray.getJSONObject(j); + if (attrObj == null) {// 历史数据,可能为空 + continue; + } + if (attrConfig.getString("id").equals(attrObj.getString("id"))) { + existAttr = true; + break; + } + } + if (!existAttr) {// 不存在该属性,追加 + attributesJsonArray.add(JSONObject.parseObject(new String(attrConfig.toString()))); + } + } + obj.put("attributesJsonArray", attributesJsonArray); + break; + } + } + shape.put("dataAttributes", dataAttributes); + } + elements.put(shapeId, shape); + } + } + definition.put("elements", elements); + return definition; + } + + /** + * 获取有效的所有属性列表 + * 资产库的配置信息+xml属性配置信息组合 + * @param wsId 资产库Id + * @param shapeMethod 形状定义的methodId + * @param shapeName shape标识名称,不允许为空 + * @param repositoryMethod 模型文件的methodId 当shapeName为泳池泳道分隔符等,shapeMethod都是固定的lane,此时shapeMethod用repositoryMethod替换 + * @return 属性配置xml文件中有效属性集合 + */ + public List getValidAttributeModels(String wsId, String shapeMethod, String shapeName, String repositoryMethod) { + List result = new ArrayList<>(); + if ("basic".equals(shapeMethod)) {// 基本类型无属性 + return result; + } + if ("standard".equals(shapeMethod)) { + return result; + } + if("bpmn".equals(shapeMethod)){ + shapeMethod = "process.bpmn2"; + } + if ("lane".equals(shapeMethod)) { + shapeMethod = repositoryMethod; + } + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(shapeMethod); + List attributes = palMethodModel.getAttributes(); + if (attributes != null) { + for (PALMethodAttributeModel attributeModel : attributes) { + if (!attributeModel.getIsValid()) { + continue; + } + String scope = attributeModel.getScope(); + if (scope.contains(shapeName) || "*".equals(scope) || scope.contains("*")) { + result.add(attributeModel.clone()); + } + } + } + if (result.size() > 0) { + // 更新sort和title + // 形状属性尚未配置,但是设置了别名和排序的临时形状all + List tempShapeAttrList =PALRepositoryShapeAttributeCache.getAttributeListByShapeName(wsId, shapeMethod, "all"); + Map map2 = new HashMap<>(); + for (PALRepositoryShapeAttributeModel model : tempShapeAttrList) { + map2.put(model.getAttrId(), model); + } + // 形状属性现有配置 + List shapeAttrList =PALRepositoryShapeAttributeCache.getAttributeListByShapeName(wsId, shapeMethod, shapeName); + Map map = new HashMap<>(); + for (PALRepositoryShapeAttributeModel model : shapeAttrList) { + if ("all".equals(model.getShapeName())) { + continue; + } + map.put(model.getAttrId(), model); + } + for (PALMethodAttributeModel model : result) { + model.setNewTitle(model.getTitle()); + model.setUse(false); + model.setSort("0"); + if (map2.containsKey(model.getKey())) { + model.setNewTitle(map2.get(model.getKey()).getAttrName()); + model.setSort(map2.get(model.getKey()).getOrderIndex() + ""); + } + if (map.containsKey(model.getKey())) { + model.setNewTitle(map.get(model.getKey()).getAttrName()); + model.setSort(map.get(model.getKey()).getOrderIndex() + ""); + model.setUse(true); + } + } + boolean appParamSort = SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "ATTRIBUTESORT", false); + if (appParamSort) {// 上面已经排好序,如果不进行排序,按照xml文件的顺序进行排序 + result.sort((o1, o2) -> { + if ((UtilString.isEmpty(o1.getSort()) || Integer.parseInt(o1.getSort()) == 0) && (UtilString.isEmpty(o2.getSort()) || Integer.parseInt(o2.getSort()) == 0)) { + return 0; + } else if ((UtilString.isEmpty(o1.getSort()) || Integer.parseInt(o1.getSort()) == 0)){ + return 1; + } else if ((UtilString.isEmpty(o2.getSort()) || Integer.parseInt(o2.getSort()) == 0)) { + return -1; + } else { + return Integer.parseInt(o1.getSort()) - Integer.parseInt(o2.getSort()); + } + }); + } + } + return result; + } + + /** + * 获取有效且使用中的所有属性列表 + * 资产库的配置信息+xml属性配置信息组合 + * @param wsId 资产库Id + * @param shapeMethodId 形状定义的method + * @param shapeName shape标识名称,不允许为空 + * @param repositoryMethod 模型文件的methodId 当shapeName为泳池泳道分隔符等,shapeMethod都是固定的lane,此时shapeMethod用repositoryMethod替换 + * @return 属性配置xml文件中有效属性集合 + */ + public List getValidAndUseAttributeModels(String wsId, String shapeMethodId, String shapeName, String reposiotryMethodId) { + List result = new ArrayList<>(); + List validList = getValidAttributeModels(wsId, shapeMethodId, shapeName, reposiotryMethodId); + for (PALMethodAttributeModel model : validList) { + if (model.getUse()) { + result.add(model); + } + } + return result; + } + + /** + * 获取所有已排序的有效形状属性 + * @param wsId + * @param methodId + * @return + */ + public List getAllValidShapeAttributeModels(String wsId, String methodId) { + List result = new ArrayList<>(); + if ("basic".equals(methodId)) {// 基本类型无属性 + return result; + } + if ("standard".equals(methodId)) { + return result; + } + if("bpmn".equals(methodId)){ + methodId = "process.bpmn2"; + } + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(methodId); + List attributes = palMethodModel.getAttributes(); + if (attributes != null) { + for (PALMethodAttributeModel attributeModel : attributes) { + if (!attributeModel.getIsValid()) { + continue; + } + String scope = attributeModel.getScope(); + if (UtilString.isEmpty(scope)) { + continue; + } + if ("*".equals(scope) || scope.contains("*") || (scope.contains("%") && scope.contains(",")) || !scope.contains("%")) { + result.add(attributeModel.clone()); + } + } + if (result.size() > 0) { + // 形状属性尚未配置,但是设置了别名和排序的临时形状all + List tempShapeAttrList =PALRepositoryShapeAttributeCache.getAttributeListByShapeName(wsId, methodId, "all"); + Map map2 = new HashMap<>(); + for (PALRepositoryShapeAttributeModel model : tempShapeAttrList) { + map2.put(model.getAttrId(), model); + } + // 形状属性现有配置 + List shapeAttrList =PALRepositoryShapeAttributeCache.getAttributeListByMethod(wsId, methodId); + Map map = new HashMap<>(); + for (PALRepositoryShapeAttributeModel model : shapeAttrList) { + if ("all".equals(model.getShapeName())) { + continue; + } + map.put(model.getAttrId(), model); + } + for (PALMethodAttributeModel model : result) { + model.setNewTitle(model.getTitle()); + model.setUse(false); + model.setSort("0"); + if (map2.containsKey(model.getKey())) { + model.setNewTitle(map2.get(model.getKey()).getAttrName()); + model.setSort(map2.get(model.getKey()).getOrderIndex() + ""); + } + if (map.containsKey(model.getKey())) { + model.setNewTitle(map.get(model.getKey()).getAttrName()); + model.setSort(map.get(model.getKey()).getOrderIndex() + ""); + model.setUse(true); + } + } + result.sort((o1, o2) -> { + if ((UtilString.isEmpty(o1.getSort()) || Integer.parseInt(o1.getSort()) == 0) && (UtilString.isEmpty(o2.getSort()) || Integer.parseInt(o2.getSort()) == 0)) { + return 0; + } else if ((UtilString.isEmpty(o1.getSort()) || Integer.parseInt(o1.getSort()) == 0)){ + return 1; + } else if ((UtilString.isEmpty(o2.getSort()) || Integer.parseInt(o2.getSort()) == 0)) { + return -1; + } else return Integer.parseInt(o1.getSort()) - Integer.parseInt(o2.getSort()); + }); + } + } + return result; + } + + /** + * 获取所有已排序的有效且使用中的形状属性 + * @param wsId + * @param methodId + * @return + */ + public List getAllValidAndUseShapeAttributeModels(String wsId, String methodId) { + List result = new ArrayList<>(); + List validList = getAllValidShapeAttributeModels(wsId, methodId); + for (PALMethodAttributeModel model : validList) { + if (model.getUse()) { + result.add(model); + } + } + return result; + } + + /** + * 通过属性list处理文件或者节点属性 + * + * @param attributes + * @param fileAttrList + * @param shapeAttrList + */ + public List handleAttrByList(List attributes, List fileAttrList, List shapeAttrList) { + if (fileAttrList != null) { + List temp1 = Lists.newArrayList(); + List temp2; + for (int i = 0; i < fileAttrList.size(); i++) { + PALRepositoryAttributeModel model1 = fileAttrList.get(i); + for (int j = 0; j < attributes.size(); j++) { + PALMethodAttributeModel model2 = attributes.get(j); + if (model1.getAttrId().equals(model2.getKey())) { + model2.setUse(true); + model2.setNewTitle(model1.getAttrName()); + model2.setSort(model1.getOrderIndex() + ""); + temp1.add(model2); + } + } + } + Iterator iterator = attributes.iterator(); + while (iterator.hasNext()) { + PALMethodAttributeModel model = iterator.next(); + temp1.forEach(temp -> { + if (temp.getKey().equals(model.getKey())) { + iterator.remove(); + } + }); + } + attributes.forEach(attributeModel -> { + attributeModel.setSort("0"); + attributeModel.setNewTitle(attributeModel.getTitle()); + attributeModel.setUse(false); + }); + temp2 = attributes; + attributes = temp1; + attributes.addAll(temp2); + return attributes; + } else{ + List temp1 = Lists.newArrayList(); + List temp2; + for (int i = 0; i < shapeAttrList.size(); i++) { + PALRepositoryShapeAttributeModel model1 = shapeAttrList.get(i); + for (int j = 0; j < attributes.size(); j++) { + PALMethodAttributeModel model2 = attributes.get(j); + if (model1.getAttrId().equals(model2.getKey())) { + model2.setUse(true); + model2.setNewTitle(model1.getAttrName()); + model2.setSort(model1.getOrderIndex() + ""); + temp1.add(attributes.get(j)); + } + } + } + Iterator iterator = attributes.iterator(); + while (iterator.hasNext()) { + PALMethodAttributeModel model = iterator.next(); + temp1.forEach(temp -> { + if (temp.getKey().equals(model.getKey())) { + iterator.remove(); + } + }); + } + attributes.forEach(attributeModel -> { + attributeModel.setSort("0"); + attributeModel.setNewTitle(attributeModel.getTitle()); + attributeModel.setUse(false); + }); + temp2 = attributes; + attributes = temp1; + attributes.addAll(temp2); + return attributes; + } + } + + /** + * 修改处理localAttribute为节点属性最新设置 + * + * @param localAttribute + * @param wsid + * @param methodId + */ + public void handleLatestLocalAttribute (JSONObject localAttribute, String wsid, String methodId, List attrList) { + if (!localAttribute.isEmpty()) { + List shapeAttributeList = PALRepositoryShapeAttributeCache.getAttributeListByMethod(wsid, methodId); + for (int j = 0; j < shapeAttributeList.size(); j++) { + PALRepositoryShapeAttributeModel shapeAttributeModel = shapeAttributeList.get(j); + String shapeName = shapeAttributeModel.getShapeName(); + if (localAttribute.containsKey(shapeName)) { + JSONArray array = localAttribute.getJSONArray(shapeName); + attrList.forEach(attr -> { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + if (attr.getKey().equals(object.getString("id"))) { + String title = attr.getNewTitle(); + object.put("name", title); + } + } + }); + } + } + } + } + + /** + * 处理节点名称和排序 + * + * @param definition + * @param wsid + * @param methodId + * @param attrList + * @return + */ + public List handleShapeAttrSortAndName(JSONObject definition, String wsid, String methodId, List attrList) { + //排序 + List shapeAttrSort = Lists.newArrayList(); + attrList.forEach(attr -> shapeAttrSort.add(attr.getKey())); + //更新名称 + JSONObject elements = definition.getJSONObject("elements"); + Iterator it = elements.keySet().iterator(); + while (it.hasNext()) { + String key = it.next(); + JSONObject shape = elements.getJSONObject(key); + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + if (!dataAttributes.isEmpty() && dataAttributes.size() > 0) { + for (Object object : dataAttributes) { + JSONObject obj = (JSONObject) object; + if (obj.containsKey("attributesJsonArray")) { + JSONArray attributesJsonArray = obj.getJSONArray("attributesJsonArray"); + attrList.forEach(attr -> { + for (int i = 0; i < attributesJsonArray.size(); i++) { + JSONObject object2 = attributesJsonArray.getJSONObject(i); + if (object2 != null && object2.size() > 0 && object2.getString("id").equals(attr.getKey())) { + String title = attr.getNewTitle(); + object2.put("name", title); + } + } + }); + } + } + } + } + return shapeAttrSort; + } + + /** + * 处理流程节点属性配置 + * + * @param wsid + * @param methodId + * @param localAttribute + */ + public void handlePlShapeAttrConfig(String wsid ,String methodId, JSONObject localAttribute) { + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(methodId); + if (palMethodModel == null) { + return; + } + List attributes = palMethodModel.getAttributes(); + Map> attributeMap = new HashMap>(); + if (attributes != null) { + for (PALMethodAttributeModel AttributeModel : attributes) { + Map map1 = new HashMap(); + map1.put("id", AttributeModel.getKey()); + map1.put("name", AttributeModel.getTitle()); + map1.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/icon/shape_attribute.png"); + map1.put("key", AttributeModel.getKey()); + map1.put("value", AttributeModel.getValue()); + map1.put("type", AttributeModel.getType()); + map1.put("ref", AttributeModel.getRef()); + map1.put("readonly", AttributeModel.getReadonly()); + map1.put("groupPath", AttributeModel.getGroupPath()); + map1.put("scope", AttributeModel.getScope()); + attributeMap.put(AttributeModel.getKey(), map1); + } + } + List shapeAttributeList = PALRepositoryShapeAttributeCache.getAttributeListByMethod(wsid, methodId); + if (shapeAttributeList != null && shapeAttributeList.size() > 0) { + for (PALRepositoryShapeAttributeModel shapeAttributeModel : shapeAttributeList) { + String shapeName = shapeAttributeModel.getShapeName(); + String attrId = shapeAttributeModel.getAttrId(); + if (localAttribute.containsKey(shapeName)) { + JSONArray array = localAttribute.getJSONArray(shapeName); + Map map = attributeMap.get(attrId); + if (map != null) { + JSONObject obj = JSONObject.parseObject(JSON.toJSONString(map)); + array.add(obj); + localAttribute.put(shapeName, array); + } + } else { + JSONArray array = new JSONArray(); + Map map = attributeMap.get(attrId); + if (map != null) { + JSONObject obj = JSONObject.parseObject(JSON.toJSONString(map)); + array.add(obj); + localAttribute.put(shapeName, array); + } + } + } + } + } + + /** + * 得到流程定义和排序 + * + * @param define + * @param wsid + * @param methodId + * @return + */ + public JSONObject getCoeDefinitionAndSort(String define, String wsid, String methodId) { + JSONObject definition = JSONObject.parseObject(define); + JSONObject localAttribute = definition.containsKey("localAttribute") ? definition.getJSONObject("localAttribute") : new com.alibaba.fastjson.JSONObject(); + if (localAttribute.isEmpty()) { + //处理流程节点属性配置 + handlePlShapeAttrConfig(wsid, methodId, localAttribute); + } + //获取最新属性的设置 + List attrList = getAllValidShapeAttributeModels(wsid, methodId); + //更新当前最新的属性设置 + handleLatestLocalAttribute(localAttribute, wsid, methodId, attrList); + //更新attributesJsonArray + List sortList = handleShapeAttrSortAndName(definition, wsid, methodId, attrList); + + definition.put("localAttribute", localAttribute); + define = definition.toString(); + JSONObject object = new JSONObject(); + object.put("define", define); + object.put("sort", sortList); + return object; + } + + /** + * 得到流程节点的形状配置 + * + * @param define + * @param wsId + * @param methodId + * @return + */ + public JSONObject getCoeProcessShapeConfig(String define, String wsId, String methodId, String uuid) { + JSONObject definition = JSONObject.parseObject(define); + String methods = PALMethodUtil.getCustom(methodId, uuid); + JSONObject object; + if (StringUtils.isEmpty(methods)) { + object = getCommonShapeConfig(wsId, methodId); + } else { + object = getCommonShapeConfig(wsId, methodId, methods); + } + definition.put("commonShapeConfig", object); + + JSONObject obj = new JSONObject(); + obj.put("define", definition.toString()); + + return obj; + } + + /** + * 获取指定的通用形状配置 + * + * @param wsId + * @param methodId + */ + public JSONObject getCommonShapeConfig(String wsId, String methodId) { + List list = PALRepositoryShapeConfigCache.getShapeConfigListByMethodId(wsId, methodId); + JSONObject object = new JSONObject(); + for (PALRepositoryShapeConfigModel model : list) { + if (object.containsKey(model.getShapeId())) { + JSONArray array = object.getJSONArray(model.getShapeId()); + array.add(JSON.parseObject(model.getAttribute())); + } else { + JSONArray configArray = new JSONArray(); + configArray.add(JSON.parseObject(model.getAttribute())); + object.put(model.getShapeId(), configArray); + } + } + return object; + } + + /** + * 获取指定的通用形状配置 + * + * @param wsId + * @param methodId + * @param methods + * @return + */ + public JSONObject getCommonShapeConfig(String wsId, String methodId, String methods) { + List list = PALRepositoryShapeConfigCache.getShapeConfigListByMethodId(wsId, methodId); + JSONObject object = new JSONObject(); + for (PALRepositoryShapeConfigModel model : list) { + if (object.containsKey(model.getShapeId())) { + JSONArray array = object.getJSONArray(model.getShapeId()); + array.add(JSON.parseObject(model.getAttribute())); + } else { + JSONArray configArray = new JSONArray(); + configArray.add(JSON.parseObject(model.getAttribute())); + object.put(model.getShapeId(), configArray); + } + } + String[] methodIds = methods.split(","); + for (int i = 0; i < methodIds.length; i++) { + List list1 = PALRepositoryShapeConfigCache.getShapeConfigListByMethodId(wsId, methodIds[i]); + for (PALRepositoryShapeConfigModel model : list1) { + if (object.containsKey(model.getShapeId())) { + JSONArray array = object.getJSONArray(model.getShapeId()); + array.add(JSON.parseObject(model.getAttribute())); + } else { + JSONArray configArray = new JSONArray(); + configArray.add(JSON.parseObject(model.getAttribute())); + object.put(model.getShapeId(), configArray); + } + } + } + return object; + } + + /** + * 得到BPMN流程定义和排序 + * + * @param define + * @param wsid + * @param methodId + * @return + */ + public JSONObject getBpmnDefinitionAndSort(String define, String wsid, String methodId) { + JSONObject definition = JSONObject.parseObject(define); + JSONObject localAttribute = definition.containsKey("localAttribute") ? definition.getJSONObject("localAttribute") : new JSONObject(); + if (localAttribute.isEmpty()) { + //处理流程节点属性配置 + handlePlShapeAttrConfig(wsid, methodId, localAttribute); + + definition.put("localAttribute", localAttribute); + // 处理属性问题 + definition = updateShapeDataAttributes(definition, localAttribute); + } + + //获取最新属性的设置 + List attrList = getAllValidShapeAttributeModels(wsid, methodId); + //更新当前最新的属性设置 + handleLatestLocalAttribute(localAttribute, wsid, methodId, attrList); + //更新attributesJsonArray + List sortList = handleShapeAttrSortAndName(definition, wsid, methodId, attrList); + + definition.put("localAttribute", localAttribute); + define = definition.toString(); + JSONObject object = new JSONObject(); + object.put("define", define); + object.put("sort", sortList); + return object; + } + + // 更新节点最新锚点配置和内容 + public String updateShapeConfig(String uuid, String define) { + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + JSONObject definition = JSONObject.parseObject(define); + JSONObject elements = definition.getJSONObject("elements"); + Map> shapeAttrMap = new HashMap<>(); + Iterator it = elements.keySet().iterator(); + + while (it.hasNext()) { + String shapeId = it.next(); + JSONObject shape = elements.getJSONObject(shapeId); + String shapeName = shape.getString("name"); + if (!"linker".equals(shapeName)) { + JSONArray configValueArr = new JSONArray();// 计算出的最新配置和内容 + // 查询通用配置 + List commonShapeConfig = PALRepositoryShapeConfigCache.getShapeConfigListByShapeId(plModel.getWsId(), plModel.getMethodId(), shapeName); + // 获取该形状的属性配置 + if (shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject attr1 = dataAttributes.getJSONObject(i); + if (attr1.containsKey("dataShowConfig")) { + JSONObject dataShowConfigObj = attr1.getJSONObject("dataShowConfig"); + Map configMap = new HashMap<>();// 记录所有有效配置,相同位置特殊配置覆盖通用配置,组合成新的锚点配置 + if (dataShowConfigObj.containsKey("config")) {// 有特殊配置 + JSONArray configArr = dataShowConfigObj.getJSONArray("config"); + // 记录特殊配置 + for (int j = 0; j < configArr.size(); j++) { + JSONObject configObj = configArr.getJSONObject(j); + configMap.put(configObj.getString("horizontal") + "|" + configObj.getString("verity"), configObj); + } + } + // 记录与特殊配置位置不相同的通用配置,若无特殊配置,则记录所有通用配置 + for (PALRepositoryShapeConfigModel common : commonShapeConfig) { + JSONObject configObj = JSONObject.parseObject(common.getAttribute()); + if (!configMap.containsKey(configObj.getString("horizontal") + "|" + configObj.getString("verity"))) { + configMap.put(configObj.getString("horizontal") + "|" + configObj.getString("verity"), configObj); + } + } + for (Map.Entry entry : configMap.entrySet()) { + JSONObject valueObj = new JSONObject();// 配置内容 + // 属性类型,文本 + // 锚点类型:文本、图标、属性(属性类型:下拉框、关联、文本) + JSONObject configObj = entry.getValue(); + String horizontal = configObj.getString("horizontal"); + String verity = configObj.getString("verity"); + String iconContent = configObj.getString("iconContent"); + boolean isShowAttrName = configObj.containsKey("isShowAttrName") ? configObj.getBooleanValue("isShowAttrName") : false;// 是否显示属性名 + String cfgContent = configObj.getString("cfgContent"); + String name = ""; + String value = ""; + String icon = ""; + String showType = configObj.getString("showType");// 类型:文本text,图标icon,属性attribute + if ("attribute".equals(showType)) { + if (!shapeAttrMap.containsKey(shapeName)) { + // 查询有效且使用中的属性 + List list = getValidAndUseAttributeModels(plModel.getWsId(), shape.getString("category").replace("_", "."), shapeName, plModel.getMethodId()); + if (list.size() > 0) { + Map attributeModelMap = new HashMap<>(); + for (PALMethodAttributeModel attributeModel : list) { + attributeModelMap.put(attributeModel.getKey(), attributeModel); + } + shapeAttrMap.put(shapeName, attributeModelMap); + } + } + String key = configObj.getString("key");// 属性key + if (shapeAttrMap.containsKey(shapeName) && shapeAttrMap.get(shapeName).get(key) != null) { + PALMethodAttributeModel attributeModel = shapeAttrMap.get(shapeName).get(key); + String newTitle = attributeModel.getNewTitle();// 属性新标题 + name = newTitle; + String type = attributeModel.getType(); + String ref = attributeModel.getRef(); + if ("relation".equals(type)) {// 关联PAL + JSONObject refObj = JSONObject.parseObject(ref); + String relationType = refObj.getString("type"); + List textList = new ArrayList<>(); + List relationModels = DesignerShapeRelationCache.getListByAttrId(uuid, shapeId, key); + if ("shape".equals(relationType)) {// 关联形状 + for (DesignerShapeRelationModel model : relationModels) { + textList.add(model.getRelationShapeText()); + } + } else {// 关联文件 + for (DesignerShapeRelationModel model : relationModels) { + String versionId = model.getRelationFileId(); + List list = PALRepositoryCache.getByVersionId(versionId); + if (list != null) { + for (PALRepositoryModel ver : list) { + if (ver.isUse()) { + textList.add(ver.getName()); + break; + } + } + } + } + } + Collections.sort(textList); + value = StringUtils.join(textList, "|"); + } else if ("awsorg".equals(type)) {// 关联bpm组织架构 + Set filter = new HashSet(); + JSONObject refObj = JSONObject.parseObject(ref); + JSONArray scope = refObj.getJSONArray("scope"); + List textList = new ArrayList<>(); + List deptList = new ArrayList<>(); + List userList = new ArrayList<>(); + List positionList = new ArrayList<>(); + List roleList = new ArrayList<>(); + List relationModels = DesignerShapeRelationCache.getListByAttrId(uuid, shapeId, key); + for (DesignerShapeRelationModel model : relationModels) { + if ("00000000-0000-0000-0000-000000000000".equals(model.getRelationFileId()) && "00000000-0000-0000-0000-000000000000".equals(model.getRelationShapeId())) { + JSONObject object = JSONObject.parseObject(model.getRelationShapeText()); + // 查询最新名称 + if (scope.contains("department") && "department".equals(object.getString("type"))) { + DepartmentModel dept = SDK.getORGAPI().getDepartmentById(object.getString("id")); + if (dept != null && !filter.contains(dept.getId())) { + deptList.add(dept.getName()); + } + } + if (scope.contains("user") && "user".equals(object.getString("type"))) { + UserModel user = SDK.getORGAPI().getUser(object.getString("id")); + if (user != null && !filter.contains(user.getUID())) { + userList.add(user.getUserName()); + } + } + if (scope.contains("position") && "position".equals(object.getString("type"))) { + RoleModel roleModel = SDK.getORGAPI().getRoleById(object.getString("id")); + if (roleModel != null && !filter.contains(roleModel.getId())) { + positionList.add(roleModel.getName()); + } + } + if (scope.contains("role") && "role".equals(object.getString("type"))) { + RoleModel roleModel = SDK.getORGAPI().getRoleById(object.getString("id")); + if (roleModel != null && !filter.contains(roleModel.getId())) { + roleList.add(roleModel.getName()); + } + } + + } + } + Collections.sort(deptList); + Collections.sort(userList); + Collections.sort(positionList); + Collections.sort(roleList); + textList.addAll(deptList); + textList.addAll(userList); + textList.addAll(positionList); + textList.addAll(roleList); + value = StringUtils.join(textList, "|"); + } else {// 文本等其他类型 + if (attr1.containsKey("attributesJsonArray")) { + JSONArray attributesJsonArray = attr1.getJSONArray("attributesJsonArray"); + for (int j = 0; j < attributesJsonArray.size(); j++) { + JSONObject object = attributesJsonArray.getJSONObject(j); + if (object == null || "null".equals(object.toString())) { + continue; + } + if (object.getString("id").equals(key)) { + value = object.getString("value"); + break; + } + } + } + } + } + + } else if ("text".equals(showType)) { + value = cfgContent; + } else if ("icon".equals(showType)) { + icon = iconContent; + // valueObj.put("icon", icon);// todo + valueObj.put("icon", ""); + valueObj.put("iconCavCode", "");// 图标cav todo + } + valueObj.put("horizontal", horizontal.toLowerCase()); + valueObj.put("vertical", verity.toLowerCase()); + valueObj.put("showName", isShowAttrName); + valueObj.put("value", value); + valueObj.put("type", "string"); + valueObj.put("name", name); + valueObj.put("showType", "attribute".equals(showType) ? "attr" : showType); + configValueArr.add(valueObj); + } + dataShowConfigObj.put("value", configValueArr); + break; + } + } + } + } + + } + return definition.toString(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/adapter/CoeDesginerAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/adapter/CoeDesginerAdapter.java new file mode 100644 index 00000000..1e78e898 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/adapter/CoeDesginerAdapter.java @@ -0,0 +1,185 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.adapter; + +import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; +import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition; +import com.actionsoft.bpms.bpmn.modeler.constant.BPMNDesignerConstant; +import com.actionsoft.bpms.bpmn.modeler.dao.ProcessDesignDaoFactory; +import com.actionsoft.bpms.bpmn.modeler.designer.ProcessBPMNDesignerWeb; +import com.actionsoft.bpms.bpmn.modeler.io.BPMNIO; +import com.actionsoft.bpms.bpmn.modeler.io.helper.BPMNFile; +import com.actionsoft.bpms.bpmn.modeler.io.in.BpmnToJson; +import com.actionsoft.bpms.bpmn.modeler.model.Definitions; +import com.actionsoft.bpms.bpmn.modeler.util.BPMNErrorUtil; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.exception.BPMNDefException; +import com.alibaba.fastjson.JSONObject; + +/** + * 适配-coe设计器与platform设计器 + * + * @author 作者: renmm + * @version 创建时间:2014-2-27 + * + */ +public class CoeDesginerAdapter { + private UserContext me; + + /** + * 需上下文-UserContext uc + */ + public CoeDesginerAdapter(UserContext uc) { + me = uc; + } + + /** + * 流程设计器web-获取历史版本 + * + * @return + */ + public ProcessBPMNDesignerWeb createBPMNDesignerWebObj() { + return new ProcessBPMNDesignerWeb(me); + } + + public static void switchDefineProperties(int type, JSONObject define) { + JSONObject coeProps = define.getJSONObject("coeProperties"); + JSONObject procProps = define.getJSONObject("processProperties"); + switch (type) { + case CoeDesignerConstant.ADAPTER_DESGINER_COE: + define.put("uuid", coeProps.get("uuid")); + define.put("versionId", coeProps.get("versionId")); + break; + case CoeDesignerConstant.ADAPTER_DESGINER_PROCESS: + define.put("uuid", procProps.get("uuid")); + define.put("versionId", procProps.get("versionId")); + break; + default: + break; + } + } + + /** + * 定义-platform设计器 + * + * @param appId + * @param processDefId + * @return + */ + public JSONObject readDefinition(String appId, String processDefId) { + return BPMNIO.getBPMNDesignerJSONObject2(me, appId, processDefId); + } + + /** + * 定义-历史-platform设计器 + * + * @param appId + * @param processDefId + * @param historyNo + * @return + */ + public String readDefinition(String appId, String processDefId, int historyNo) { + ResponseObject ro = ResponseObject.newOkResponse().msg(""); + ProcessDefinition model = ProcessDefCache.getInstance().getModel(processDefId); + BPMNFile bpmnFile = BPMNFile.getInstance(appId, processDefId); + String op = BPMNDesignerConstant.BPMN_DESIGNER_OPERATE_TYPE_RESTOREVERSION + "|" + model.getVersionId() + "|" + historyNo; + Definitions definitions = null; + try { + definitions = bpmnFile.parseBPMN(op, historyNo); + } catch (BPMNDefException e) { + e.printStackTrace(); + ro.err(); + ro.setData(JSONObject.parseObject(BPMNErrorUtil.getErrorJSON(e))); + return ro.toString(); + } + return new BpmnToJson().getJsonString(definitions); + } + + /** + * 历史-设计器 + * + * @param appId + * @param processDefId + * @return + */ + public String readDesignerHistory(String appId, String processDefId) { + return createBPMNDesignerWebObj().historyVersions(appId, processDefId); + } + + public String readDraw(String appId, String processDefId, int historyNo) { + String draw = ""; + String ver = ""; + if (0 != historyNo) { + ver = "_" + historyNo; + } + String path = CoeDesignerUtil.getBpmnRealFilePath(appId, processDefId) + CoeDesignerUtil.getRealFilename(processDefId, ver, CoeDesignerConstant.FILE_DRAW_POSTFIX); + UtilFile realFile = new UtilFile(path); + draw = realFile.readStrUTF8(); + return draw; + } + + /** + * 存储定义-设计器 + * + * @param appId + * @param processDefId + * @param definition + * @param draw + * @throws BPMNDefException + */ + public String storeDefinition(String appId, String processDefId, String op, String definition, String draw) throws BPMNDefException { + if (op.indexOf("newversion") != -1) { + processDefId = ""; + } + return BPMNIO.saveJsonToBPMNFile(me, appId, processDefId, op, definition, false, draw); + } + + /** + * 获取流程的最大版本号 + * + * @param appId + * @param processVersionId + * @return + */ + public int getMaxPorcessVer(String appId, String processVersionId) { + return ProcessDesignDaoFactory.createProcessDef().getLatestVersion(appId, processVersionId); + + } + + /** + * 通过历史重置-产生新的版本 + * + * @param appId + * @param processDefId + * @param historyNo + * @return + * @throws BPMNDefException + */ + public String restoreDefinitionOfHistory(String appId, String processDefId, int historyNo) throws BPMNDefException { + String result = ""; + String define = readDefinition(appId, processDefId, historyNo); + String newPorcessDefId = UUIDGener.getObjectId(); + JSONObject defineJson = JSONObject.parseObject(define); + defineJson.put("uuid", newPorcessDefId); + ProcessDefinition model = ProcessDefCache.getInstance().getModel(processDefId); + String op = BPMNDesignerConstant.BPMN_DESIGNER_OPERATE_TYPE_NEWVERSION + "|" + model.getVersionId() + "|" + getMaxPorcessVer(appId, model.getVersionId()); + result = BPMNIO.saveJsonToBPMNFile(me, appId, newPorcessDefId, op, define, true, ""); + return result; + } + + /** + * 创建新版本 + * + * @param appId + * @param srcProcessDefId + * @return + * @throws BPMNDefException + */ + public String createNewVersion(String appId, String srcProcessDefId) throws BPMNDefException { + return restoreDefinitionOfHistory(appId, srcProcessDefId, 0); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/cache/CoeDesignerImageCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/cache/CoeDesignerImageCache.java new file mode 100644 index 00000000..fc50ba0c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/cache/CoeDesignerImageCache.java @@ -0,0 +1,21 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.cache; + +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; + +public class CoeDesignerImageCache extends Cache { + + public CoeDesignerImageCache(CachePluginProfile profile) { + super(profile); + } + + @Override + protected void load() { + } + + public static CoeDesignerImageCache getCache() { + return (CoeDesignerImageCache) CacheManager.getCache(CoeDesignerImageCache.class); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/cache/CoeDesignerShapeCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/cache/CoeDesignerShapeCache.java new file mode 100644 index 00000000..47e0a419 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/cache/CoeDesignerShapeCache.java @@ -0,0 +1,39 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.cache; + +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; + +import com.alibaba.fastjson.JSONArray; + +/** + * 针对文件中的图形进行缓存 + * + * @author wangyh + * + */ +public class CoeDesignerShapeCache extends Cache { + + public CoeDesignerShapeCache(CachePluginProfile profile) { + super(profile); + } + + @Override + public void load() { + + } + + public static CoeDesignerShapeCache getCache() { + return (CoeDesignerShapeCache) CacheManager.getCache(CoeDesignerShapeCache.class); + } + + /** + * 存放文件中的图形信息 + * + * @param fileId 文件id + * @param jsonArray 图形josn数组 + */ + public void putJsonArray(String fileId, JSONArray jsonArray) { + getCache().put(fileId, jsonArray); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/cache/PALDesignerFileCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/cache/PALDesignerFileCache.java new file mode 100644 index 00000000..40d5ec58 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/cache/PALDesignerFileCache.java @@ -0,0 +1,79 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.cache; + +import java.util.HashMap; + +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.system.logger.CoeLogger; + +public class PALDesignerFileCache extends Cache> { + + public PALDesignerFileCache(CachePluginProfile profile) { + super(profile); + } + + @Override + public void load() { + + } + + /** + * 存入difinition到缓存里 + * + * @param model + */ + public void put(BaseModel model) { + if (model == null) { + // CoeLogger.warn("存储的coe定义模型[" + model + "]为空,模型缓存失败,"); + CoeLogger.warn("存储的coe定义模型为空,模型缓存失败,"); + return; + } + HashMap defiVersionMap = getCache().get(model.getUUID()); + if (defiVersionMap == null) { + defiVersionMap = new HashMap(); + defiVersionMap.put(model.getVer(), model); + } else { + defiVersionMap.put(model.getVer(), model); + } + getCache().put(model.getUUID(), defiVersionMap); + } + + /** + * 移出默认版本 + * + * @param UUID + * @return + */ + public BaseModel pop(String UUID, int ver) { + if (UUID == null || "".equals(UUID.trim())) { + CoeLogger.err("定义模型的唯一标识不能为空.:[" + UUID + "]"); + } + if (getCache().get(UUID) == null) { + return null; + } + return getCache().get(UUID).remove(ver); + } + + /** + * 获取历史版本的模型 + * + * @param UUID + * @param ver 版本号:0,1,... + * @return + */ + public BaseModel get(String UUID, int ver) { + if (UUID == null || "".equals(UUID.trim())) { + CoeLogger.err("定义模型的唯一标识不能为空.:[" + UUID + "]"); + } + if (getCache().get(UUID) == null) { + return null; + } + return getCache().get(UUID).get(ver); + } + + public static PALDesignerFileCache getCache() { + return (PALDesignerFileCache) CacheManager.getCache(PALDesignerFileCache.class); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/cache/PALDesignerFileDragModelCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/cache/PALDesignerFileDragModelCache.java new file mode 100644 index 00000000..9cf1a460 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/cache/PALDesignerFileDragModelCache.java @@ -0,0 +1,65 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.cache; + +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.system.logger.CoeLogger; + +public class PALDesignerFileDragModelCache extends Cache { + + public PALDesignerFileDragModelCache(CachePluginProfile profile) { + super(profile); + } + + @Override + public void load() { + + } + + /** + * 存入拖拽产生的存到缓存里 + * + * @param model + */ + public void putDrag(BaseModel model) { + if (model == null) { + CoeLogger.warn("存储的coe定义模型为空,模型缓存失败,"); + return; + } + getCache().put(model.getUUID(), model); + } + + /** + * 移出拖拽的版本 + * + * @param UUID + * @return + */ + public BaseModel popDrag(String UUID) { + if (UUID == null || "".equals(UUID.trim())) { + CoeLogger.err("定义模型的唯一标识不能为空.:[" + UUID + "]"); + } + BaseModel model = getCache().get(UUID); + getCache().remove(UUID); + return model; + } + + /** + * 获取拖拽的模型 + * + * @param UUID + * @param ver 版本号:0,1,... + * @return + */ + public BaseModel getDrag(String UUID) { + if (UUID == null || "".equals(UUID.trim())) { + CoeLogger.err("定义模型的唯一标识不能为空.:[" + UUID + "]"); + } + return getCache().get(UUID); + } + + public static PALDesignerFileDragModelCache getCache() { + return (PALDesignerFileDragModelCache) CacheManager.getCache(PALDesignerFileDragModelCache.class); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/constant/CoeDesignerConstant.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/constant/CoeDesignerConstant.java new file mode 100644 index 00000000..8ebc1879 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/constant/CoeDesignerConstant.java @@ -0,0 +1,100 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.constant; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.lifecycle.api.AppsAPIManager; +import com.actionsoft.apps.coe.pal.pal.method.constant.PALMethodConst; + +public class CoeDesignerConstant { + + public final static int MESSAGES_SAVE_SUCCESS = 1;// 设计器的消息保存成功 + + public final static int MESSAGES_SAVE_FAIL = -1;// 设计器的消息保存失败 + + public final static int MESSAGES_UPDATE_SUCCESS = 1;// 设计器的消息更新成功 + + public final static int MESSAGES_UPDATE_FAIL = -1;// 设计器的消息更新失败 + + public final static int MESSAGES_DELETE_SUCCESS = 1;// 设计器的消息删除成功 + + public final static int MESSAGES_DELETE_FAIL = -1;// 设计器的消息删除失败 + + public final static int MESSAGES_LOAD_SUCCESS = 1;// 设计器的消息删除成功 + + public final static int MESSAGES_LOAD_FAIL = -1;// 设计器的消息删除失败 + + public final static int MESSAGES_NOT_JSONARRAY = -1;// messagess不是jsonArray对象 + + public final static String DESIGNER_DIFINITION_DEFAULT = "default"; + public final static String DESIGNER_DIFINITION_BPMN = "bpmn"; + + public final static String DIFINITION_DEFAULT_KEY = "ver"; + + public final static String SHAPE_MAP_FILE=AppsAPIManager.getInstance().getAppContext(CoEConstant.APP_ID).getPath() + PALMethodConst.DIR_ROOT_CONFIG+"shape.map.tpl"; + + /** + * coe 网页 设计器新建 + */ + public final static String WEB_DESOGNER_CREATE = "0"; + /** + * coe 网页 设计器打开 + */ + public final static String WEB_DESOGNER_OPEN = "1"; + + public final static String DESIGNER_TYPE_BPMN = "bpmn"; + + public final static String FILE_DRAW_POSTFIX = ".draw"; + + public final static String FILE_CHECK_POSTFIX = ".check"; + + public final static String FILE_SAVE_ACTION_DH = "saveDefaultAndHistory"; + public final static String FILE_SAVE_ACTION_AUTO = "saveAuto"; + + public final static String DESIGNER_DEFINTION_TYPE_DRAG = "drag"; + public final static String DESIGNER_DEFINTION_TYPE_DEFAULT = "default"; + public final static String DESIGNER_DEFINTION_TYPE_HISTORY = "history"; + public final static String DESIGNER_DEFINTION_TYPE_DRAW = "draw"; + + public final static int ANSWER_SUCESS = 1; + public final static int ANSWER_FAILED = -1; + public final static int ANSWER_DEFAULT = 0; + + public final static String DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + /** + * 设计器默认版本 + */ + public final static String DESIGNER_DEFAULT_VERSION = "0"; + + /** + * aws平台 + */ + public final static String DESIGNER_METHOD_PALTFORM_AWS = "aws6"; + + /** + * aws平台 + */ + public final static String DESIGNER_AWS_OP_UPDATE = "update"; + /** + * aws平台 + */ + public final static String DESIGNER_AWS_OP_EDIT = "edit"; + + /** + * aws平台存放的link文件 + */ + public final static String DESIGNER_FILE_LINK = "link_"; + + /** + * 适配-coe属性 + */ + public final static int ADAPTER_DESGINER_COE = 0; + + /** + * 适配-流程属性 + */ + public final static int ADAPTER_DESGINER_PROCESS = 1; + + public final static int REALTIME_LISTEN_TIME = 30; + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/dao/BPMNDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/dao/BPMNDao.java new file mode 100644 index 00000000..66f10c0f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/dao/BPMNDao.java @@ -0,0 +1,249 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.dao; + +import java.io.File; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.regex.Pattern; + +import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerImageCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.PALDesignerFileCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.BPMNFile; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper.CoeFileComparator.COEFileVersionDESC; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper.CoeFileFilter; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BPMNModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public class BPMNDao { + protected BPMNFile storer;// 存储操作器 + + /** + * 模型保存 + * + * @param model + * @return + * @author sunlh + */ + public int store(BaseModel model) { + BPMNModel bpmnModel = (BPMNModel) model;// bpmnModel + storer = new BPMNFile(bpmnModel); + final BPMNFile bpmnM = storer; + // 模型保存,同时内部会进行图形缓存的更新 + bpmnM.store(); + this.recordBpmnProcessLog(bpmnM); //记录bpmn流程日志 + //更新缓存 + PALDesignerFileCache.getCache().put(model);// 文件缓存 + // JSONArray josnArr = getJsonFile(model.getDefinition()); + // CoeDesignerShapeCache.getCache().putJsonArray(model.getUUID(), josnArr);// 图形缓存 + CoeDesignerImageCache.getCache().put(model.getUUID(), model.getUUID());// 图片更新记录缓存 + return CoeDesignerConstant.ANSWER_SUCESS; + } + + /** + * 将流程操作记入日志 + */ + private void recordBpmnProcessLog(BPMNFile bpmnM) { + //记入日志 + String isRecordLog = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "IS_RECORD_PROCESS_LOG"); + if (UtilString.isEmpty(isRecordLog)) { + isRecordLog = "1"; + } + if ("1".equals(isRecordLog)) { + bpmnM.recordBpmnProcessLog(); + } + } + + private JSONArray getJsonFile(String definition) { + List list = ShapeUtil.getShapeJsonToJsonObject(definition); + return JSONArray.parseArray(JSON.toJSONString(list)); + } + + /** + * @param model + * @deprecated + */ + private void createHistoryFile(BaseModel model) { + if (storer.isExist("")) {// 默认版本存在,创建历史版本 + BPMNModel runHistoryModel = new BPMNModel(); + runHistoryModel.setDefinition(model.getDefinition()); + runHistoryModel.setUpdateTime(model.getUpdateTime()); + runHistoryModel.setDraw(model.getDraw()); + runHistoryModel.setCreateHistory(false); + runHistoryModel.setMethodId(model.getMethodId()); + runHistoryModel.setPath(model.getPath()); + runHistoryModel.setType(model.getType()); + runHistoryModel.setUUID(model.getUUID()); + runHistoryModel.setVer((CoeProcessLevelDaoFacotory.createCoeProcessLevel().getHistoryMaxVersion(model.getUUID()) + 1)); + CoeProcessLevelDaoFacotory.createCoeProcessLevel().saveHistoryMaxVersion(runHistoryModel.getUUID(), runHistoryModel.getVer()); + final BPMNFile historyStorer = new BPMNFile(runHistoryModel); + // CoeDesignerCache.getInstance().put(runHistoryModel);// 存入cache + PALDesignerFileCache.getCache().put(runHistoryModel); + new Thread(new Runnable() { + @Override + public void run() { + historyStorer.store();// 存入文件 + } + }).start(); + } + } + + public BPMNModel get(String uuid, int ver) {// 普通版本 + BPMNModel model = null; + String define = ""; + String draw = ""; + // 暂时关闭文件的缓存读取 + // model = (BPMNModel) PALDesignerFileCache.getCache().get(uuid, ver); + if (model == null) { + model = CoeDesignerUtil.createBPMNModel(uuid, ver); + storer = new BPMNFile(model); + define = storer.readDefinition(); + draw = storer.readDraw(); + if (define != null && !"".equals(define)) { + model.setDefinition(define); + } else {// 新创建bpmn模型时 + return null; + } + if (draw != null && !"".equals(draw)) { + model.setDraw(draw); + } else { + model.setDraw(CoeDesignerUtil.getTemplateOfDraw(uuid)); + } + PALDesignerFileCache.getCache().put(model); + } + return model; + } + + /** + * @deprecated + * @param model + * @return + */ + public int restore(BaseModel model) { + int answer = CoeDesignerConstant.ANSWER_DEFAULT; + // 1.入库缓存 + PALDesignerFileCache.getCache().put(model); + // 2.入库介质(数据库、文件系统) + storer = new BPMNFile((BPMNModel) model); + answer = storer.restore(); + return answer; + + } + + public BPMNModel delete(String uuid, int ver) { + BPMNModel model = (BPMNModel) PALDesignerFileCache.getCache().pop(uuid, ver); + if (model != null) { + // 去文件系统里删除 + // 注意处理 + } + return model; + } + + /** + * 通过本地文件获取最大版本号 + * + * @return + */ + protected int getHistoryVersionMaxNo(BPMNModel model) { + BPMNModel runHistoryModel = new BPMNModel(); + String runHistoryName = "";// 最大版本的文件名 + File runHistoryFile = null;// 最大版本文件 + + int maxVer = 0; + + // 读取文件 + String path = model.getPath(); + UtilFile utilF = new UtilFile(path); + if (CoeDesignerConstant.DESIGNER_METHOD_PALTFORM_AWS.equals(model.getPlatform())) {// 共享版本 + File[] historyFiles = utilF.listFiles(new CoeFileFilter().new HistoryOfShareFilter()); + List listFiles = null; + if (historyFiles == null || historyFiles.length == 0) { + return 0; + } + listFiles = Arrays.asList(historyFiles); + Collections.sort(listFiles, new COEFileVersionDESC()); + runHistoryFile = listFiles.get(0); + if (runHistoryFile == null) { + return 0; + } + runHistoryName = runHistoryFile.getName(); + String patternStr = "link_[a-z0-9]*_[a-z0-9]*_[0-9]+"; + if (Pattern.matches(patternStr, runHistoryName)) { + maxVer = Integer.parseInt(runHistoryName.substring(runHistoryName.lastIndexOf("_") + 1)); + } else { + maxVer = 0; + } + + String realPath = CoeDesignerUtil.getBpmnPath(ProcessDefCache.getInstance().getModel(model.getProcessDefId()).getAppId(), model.getProcessDefId()); + runHistoryModel.setRealPath(realPath); + runHistoryModel.setType(CoeDesignerConstant.DESIGNER_DIFINITION_BPMN); + runHistoryModel.setUpdateTime(model.getUpdateTime()); + + } else { + File[] historyFiles = utilF.listFiles(new CoeFileFilter().new HistoryFilter()); + List listFiles = null; + if (historyFiles == null || historyFiles.length == 0) { + return 0; + } + listFiles = Arrays.asList(historyFiles); + Collections.sort(listFiles, new COEFileVersionDESC()); + runHistoryFile = listFiles.get(0); + if (runHistoryFile == null) { + return 0; + } + + runHistoryName = runHistoryFile.getName(); + if (runHistoryName.indexOf("_") == -1) { + maxVer = 0; + } else { + maxVer = Integer.parseInt(runHistoryName.substring(runHistoryName.lastIndexOf("_") + 1)); + } + } + CoeProcessLevelDaoFacotory.createCoeProcessLevel().saveHistoryMaxVersion(model.getUUID(), maxVer);// 更新数据库 + return maxVer; + + } + + /** + * 通过数据库字段获取最大版本 + * + * @return + */ + protected BaseModel getRunHistoryOfDB(BPMNModel model) { + BPMNModel runHistoryModel = new BPMNModel(); + PALRepositoryModel plModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(model.getUUID()); + String fileName = "";// 文件名 + if (plModel == null) { + return null; + } + String maxHistoryVer = plModel.getHistoryMaxVersion();// 最大版本号 + fileName = model.getUUID() + "_" + maxHistoryVer; + UtilFile defineFile = new UtilFile(model.getPath() + fileName); + UtilFile drawFile = new UtilFile(model.getPath() + fileName + CoeDesignerConstant.FILE_DRAW_POSTFIX); + runHistoryModel.setCreateHistory(false); + runHistoryModel.setDefinition(defineFile.readStrUTF8()); + runHistoryModel.setDraw(drawFile.readStrUTF8()); + runHistoryModel.setMethodId(model.getMethodId()); + runHistoryModel.setPath(model.getPath()); + runHistoryModel.setType(CoeDesignerConstant.DESIGNER_DIFINITION_BPMN); + runHistoryModel.setUpdateTime(model.getUpdateTime());// 更新时间 + runHistoryModel.setUUID(model.getUUID()); + runHistoryModel.setVer(Integer.parseInt(maxHistoryVer)); + + // CoeDesignerCache.getInstance().put(runHistoryModel);// 入缓存库 + PALDesignerFileCache.getCache().put(runHistoryModel); + return runHistoryModel; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/dao/CoeDesignerDefaultDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/dao/CoeDesignerDefaultDao.java new file mode 100644 index 00000000..29f59335 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/dao/CoeDesignerDefaultDao.java @@ -0,0 +1,241 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.dao; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.BPMNFile; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerImageCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerShapeCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.PALDesignerFileCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.CoeDesignerFile; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper.CoeFileComparator.COEFileVersionDESC; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper.CoeFileFilter; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public class CoeDesignerDefaultDao { + protected CoeDesignerFile storer;// 存储操作器 + + /** + * 默认版本的definition的存储 + */ + public int store(BaseModel model) { + storer = new CoeDesignerFile(model); + final CoeDesignerFile storerModel = storer; + storerModel.store(); + this.recordFileLog(storerModel); //记录文件日志 + // 更新缓存 + PALDesignerFileCache.getCache().put(model);// 文件缓存 + JSONArray josnArr = getJsonFile(model.getDefinition()); + CoeDesignerShapeCache.getCache().putJsonArray(model.getUUID(), josnArr);// 图形缓存 + CoeDesignerImageCache.getCache().put(model.getUUID(), model.getUUID());// 图片更新记录缓存 + return CoeDesignerConstant.ANSWER_SUCESS; + } + + /** + * 将操作记入日志 + */ + private void recordFileLog(CoeDesignerFile fileM) { + //记入日志 + String isRecordLog = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "IS_RECORD_PROCESS_LOG"); + if (UtilString.isEmpty(isRecordLog)) { + isRecordLog = "1"; + } + if ("1".equals(isRecordLog)) { + fileM.recordFileLog(); + } + } + + private JSONArray getJsonFile(String definition) { + List list = ShapeUtil.getShapeJsonToJsonObject(definition); + return JSONArray.parseArray(JSON.toJSONString(list)); + } + + /** + * @deprecated + * @param model + */ + private void createHistoryFile(BaseModel model) { + if (storer.isExist("")) {// 默认版本存在,创建历史版本 + if (model.isCreateHistory()) { + BaseModel runHistoryModel = new BaseModel(); + runHistoryModel.setCreateHistory(false); + runHistoryModel.setDefinition(storer.readDefinition()); + runHistoryModel.setDraw(storer.readDraw()); + runHistoryModel.setMethodId(model.getMethodId()); + runHistoryModel.setPath(model.getPath()); + runHistoryModel.setType(model.getType()); + runHistoryModel.setUpdateTime(model.getUpdateTime()); + runHistoryModel.setUUID(model.getUUID()); + runHistoryModel.setVer((CoeProcessLevelDaoFacotory.createCoeProcessLevel().getHistoryMaxVersion(model.getUUID()) + 1)); + CoeProcessLevelDaoFacotory.createCoeProcessLevel().saveHistoryMaxVersion(model.getUUID(), runHistoryModel.getVer()); + CoeDesignerFile historyStorer = new CoeDesignerFile(runHistoryModel); + PALDesignerFileCache.getCache().put(runHistoryModel); + storeFile(historyStorer); + } else { + BaseModel lastRunHistoryModel = getRunHistoryOfFile(model); + if (lastRunHistoryModel != null) { + lastRunHistoryModel.setDefinition(model.getDefinition()); + lastRunHistoryModel.setDraw(model.getDraw()); + lastRunHistoryModel.setUpdateTime(model.getUpdateTime()); + CoeDesignerFile historyStorer = new CoeDesignerFile(lastRunHistoryModel); + PALDesignerFileCache.getCache().put(lastRunHistoryModel); + storeFile(historyStorer); + } + } + } + } + + public void storeFile(final CoeDesignerFile historyStorer) { + new Thread(new Runnable() { + @Override + public void run() { + historyStorer.store(); + } + }).start(); + } + + public BaseModel get(String uuid, int ver) { + BaseModel model = null;//PALDesignerFileCache.getCache().get(uuid, ver); + if (model == null) { + model = CoeDesignerUtil.createModel(uuid, ver); + storer = new CoeDesignerFile(model); + String define = ""; + String draw = ""; + define = storer.readDefinition(); + draw = storer.readDraw(); + if (define == null || "".equals(define)) { + return null; + } + model.setDefinition(define); + model.setUpdateTime(CoeDesignerUtil.getUpdateTime(model.getDefinition())); + if (draw != null && !"".equals(draw)) { + model.setDraw(draw); + } else { + model.setDraw(CoeDesignerUtil.getTemplateOfDraw(uuid)); + } + PALDesignerFileCache.getCache().put(model); + } + return model; + } + + /** + * @Deprecated + * @param model + * @return + */ + public int restore(BaseModel model) { + int answer = CoeDesignerConstant.ANSWER_DEFAULT; + // 1.入库缓存 + PALDesignerFileCache.getCache().put(model); + // 2.入库介质(数据库、文件系统) + storer = new CoeDesignerFile(model); + answer = storer.restore(); + return answer; + } + + /** + * 默认版本的definition的删除 + */ + public BaseModel delete(String uuid, int ver) { + BaseModel model = PALDesignerFileCache.getCache().pop(uuid, ver); + storer = new CoeDesignerFile(model); + storer.remove(); + return model; + } + + public BaseModel getRunHistory(BaseModel model) { + return getRunHistoryOfFile(model); + } + + public BaseModel getRunHistoryOfFile(BaseModel model) { + BaseModel runHistoryModel = new BaseModel(); + String runHistoryName = "";// 最大版本的文件名 + File runHistoryFile = null;// 最大版本文件 + String drawFileName = "";// 演示步骤文件名 + String maxVer = ""; + String define = ""; + String draw = ""; + // 读取文件 + String path = model.getPath(); + UtilFile utilF = new UtilFile(path); + File[] historyFiles = utilF.listFiles(new CoeFileFilter().new HistoryFilter()); + List listFiles = null; + if (historyFiles == null || historyFiles.length == 0) {// 历史文件不存在,拿默认版本 + return null; + } + listFiles = Arrays.asList(historyFiles); + Collections.sort(listFiles, new COEFileVersionDESC()); + runHistoryFile = listFiles.get(0); + if (runHistoryFile == null) { + return null; + } + runHistoryName = runHistoryFile.getName(); + drawFileName = runHistoryName + CoeDesignerConstant.FILE_DRAW_POSTFIX; + maxVer = runHistoryName.substring(runHistoryName.indexOf("_") + 1); + UtilFile historyFile = new UtilFile(path + runHistoryName); + UtilFile drawFile = new UtilFile(path + drawFileName);// 演示步骤文件 + define = historyFile.readStrUTF8(); + draw = drawFile.readStrUTF8(); + if (define != null && !"".equals(define)) { + runHistoryModel.setDefinition(define); + runHistoryModel.setUpdateTime(CoeDesignerUtil.getUpdateTime(runHistoryModel.getDefinition())); + } else { + runHistoryModel.setDefinition(CoeDesignerUtil.getTemplateOfDefine(model.getUUID())); + runHistoryModel.setUpdateTime(new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date())); + } + if (draw != null && !"".equals(draw)) { + runHistoryModel.setDraw(draw); + } else { + runHistoryModel.setDraw(CoeDesignerUtil.getTemplateOfDraw(model.getUUID())); + } + // 创建model + runHistoryModel.setCreateHistory(false); + runHistoryModel.setVer(Integer.parseInt(maxVer)); + runHistoryModel.setMethodId(model.getMethodId()); + runHistoryModel.setPath(path); + runHistoryModel.setType(CoeDesignerConstant.DESIGNER_DIFINITION_DEFAULT); + runHistoryModel.setUUID(model.getUUID()); + return runHistoryModel; + } + + protected BaseModel getRunHistoryOfDB(BaseModel model) { + BaseModel runHistoryModel = new BaseModel(); + PALRepositoryModel plModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(model.getUUID()); + String fileName = "";// 文件名 + if (plModel == null) { + return null; + } + String maxHistoryVer = plModel.getHistoryMaxVersion();// 最大版本号 + fileName = model.getUUID() + "_" + maxHistoryVer; + UtilFile defineFile = new UtilFile(model.getPath() + fileName); + UtilFile drawFile = new UtilFile(model.getPath() + fileName + CoeDesignerConstant.FILE_DRAW_POSTFIX); + runHistoryModel.setCreateHistory(false); + runHistoryModel.setDefinition(defineFile.readStrUTF8()); + runHistoryModel.setDraw(drawFile.readStrUTF8()); + runHistoryModel.setMethodId(model.getMethodId()); + runHistoryModel.setPath(model.getPath()); + runHistoryModel.setType(CoeDesignerConstant.DESIGNER_DIFINITION_BPMN); + runHistoryModel.setUpdateTime(model.getUpdateTime());// 更新时间 + runHistoryModel.setUUID(model.getUUID()); + runHistoryModel.setVer(Integer.parseInt(maxHistoryVer)); + PALDesignerFileCache.getCache().put(runHistoryModel); + return runHistoryModel; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/BPMNFile.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/BPMNFile.java new file mode 100644 index 00000000..0445be96 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/BPMNFile.java @@ -0,0 +1,279 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.io.file; + +import java.io.File; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.util.List; + +import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; +import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition; +import com.actionsoft.bpms.bpmn.modeler.io.BPMNIO; +import com.actionsoft.bpms.bpmn.modeler.model.Definitions; +import com.actionsoft.bpms.bpmn.modeler.util.BPMNErrorUtil; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.UtilDate; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerShapeCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BPMNModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.exception.AWSException; +import com.actionsoft.exception.BPMNDefException; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public class BPMNFile { + protected BPMNModel model; + + public BPMNFile(BPMNModel model) { + this.model = model; + } + + /** + * 判断文件是否存在, + * + * @return + */ + public boolean isExist(String type) { + File dir = new File(model.getPath()); + if (!dir.exists()) { + dir.mkdirs(); + } + UtilFile utilFile = new UtilFile(getPathname(type)); + if (!utilFile.exists()) { + return false; + } + return true; + } + + /** + * 存储文件 + * + * @return + */ + public int store() { + checkFile("");// 检验默认文件 + String filePath = "";// 文件路径 + filePath = getPathname(""); + UtilFile defaultFile = new UtilFile(filePath);// 流程文件 + UtilFile jsonFile = new UtilFile(getJsonFilePath());//节点文件 + JSONArray josnArr = getJsonFile(model.getDefinition()); + try { + defaultFile.write(model.getDefinition().getBytes("UTF8")); + jsonFile.write(josnArr.toString().getBytes("UTF8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + throw new AWSException("保存文件失败"); + } + CoeDesignerShapeCache.getCache().putJsonArray(model.getUUID(), josnArr);// 图形缓存 + return CoeDesignerConstant.ANSWER_SUCESS; + } + + /** + * 存储日志文件 + */ + public int recordBpmnProcessLog() { + try { + String updateTime = model.getUpdateTime().replaceAll("[:|\\s]",""); //yyyy-MM-dd HH:mm:ss + if (UtilString.isEmpty(updateTime)) { + updateTime = UtilDate.datetimeFormat(new Date(System.currentTimeMillis())); + } + String year_month = updateTime.substring(0, 7); + //日志的目录 + String logPath = model.getPath() + year_month + "/"; + logPath = logPath.replace("workspace", "workspace/log"); //单独设置目录 + File dir = new File(logPath); + if (!dir.exists()) { + dir.mkdirs(); + } + //日志的文件,文件名带有版本时间信息 + String _ver = ""; + if (0 != model.getVer()) { + _ver = "_" + model.getVer(); + } + String logVerPath = logPath + model.getUUID() + _ver + "@" + updateTime; + //创建日志文件 + UtilFile utilFile = new UtilFile(logVerPath); + if (!utilFile.exists()) { + utilFile.createNewFile(); + } + //准备文件和文件内容 + String filePath = logVerPath;// 文件路径 + UtilFile defaultFile = new UtilFile(filePath);// 流程文件 + UtilFile jsonFile = new UtilFile(filePath + ".json");//节点文件 + JSONArray josnArr = getJsonFile(model.getDefinition()); + //写入内容 + defaultFile.write(model.getDefinition().getBytes("UTF8")); + jsonFile.write(josnArr.toString().getBytes("UTF8")); + } catch (Exception e) { + e.printStackTrace(); + } + return CoeDesignerConstant.ANSWER_SUCESS; + } + + private JSONArray getJsonFile(String definition) { + List list = ShapeUtil.getShapeJsonToJsonObject(definition); + return JSONArray.parseArray(JSON.toJSONString(list)); + } + + /** + * 获取文件存放路径名 + * + * @param type CoeDesignerConstant.FILE_DRAW_POSTFIX , "" + * @return + */ + public String getJsonFilePath() { + return model.getPath() + model.getUUID() + ".json"; + } + + /** + * 读取define + * + * @return + */ + public String readDefinition() { + String define = ""; + if (isExist("")) {// 文件是否存在 + UtilFile fileUtil = new UtilFile(getPathname("")); + define = fileUtil.readStrUTF8(); + } + return define; + } + + /** + * 读取draw + * + * @return + */ + public String readDraw() { + String draw = ""; + if (!isExist(CoeDesignerConstant.FILE_DRAW_POSTFIX)) {// 文件是否存在 + return ""; + } + UtilFile fileUtil = new UtilFile(getPathname(CoeDesignerConstant.FILE_DRAW_POSTFIX)); + draw = fileUtil.readStrUTF8(); + return draw; + } + + /** + * 重置Model的define、draw。 + * + * @return + */ + public int restore() { + checkFile("");// 检查define文件 + checkFile(CoeDesignerConstant.FILE_DRAW_POSTFIX);// 检查draw文件 + String filePath = getPathname(""); + String drawPath = getPathname(CoeDesignerConstant.FILE_DRAW_POSTFIX); + UtilFile fileUtil = new UtilFile(filePath); + UtilFile drawUtil = new UtilFile(drawPath); + try { + fileUtil.write(model.getDefinition().getBytes("UTF8")); + drawUtil.write(model.getDraw().getBytes("UTF8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + return CoeDesignerConstant.ANSWER_SUCESS; + } + + /** + * 移除文件 + * + * @return + */ + public int remove() { + + String path = getPathname(""); + String drawPath = getPathname(CoeDesignerConstant.FILE_DRAW_POSTFIX);// draw文件 + UtilFile fileUtil = new UtilFile(path); + UtilFile drawUtil = new UtilFile(drawPath); + fileUtil.removeFile(fileUtil); + drawUtil.removeFile(drawUtil); + return CoeDesignerConstant.ANSWER_SUCESS; + } + + /** + * 检测文件是否存在,不存在,创建 + * + * @param type + */ + protected void checkFile(String type) { + + File dir = new File(model.getPath()); + if (!dir.exists()) { + dir.mkdirs(); + } + UtilFile utilFile = new UtilFile(getPathname(type)); + try { + if (!utilFile.exists()) { + utilFile.createNewFile(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + } + + /** + * 获取文件存放路径名 + * + * @param type CoeDesignerConstant.FILE_DRAW_POSTFIX , "" + * @return + */ + protected String getPathname(String type) { + String _ver = ""; + if (0 != model.getVer()) { + _ver = "_" + model.getVer(); + } + return model.getPath() + model.getUUID() + _ver + type; + } + + protected int saveDesginerOfAws(BPMNModel model, UserContext _uc) { + int result = CoeDesignerConstant.ANSWER_DEFAULT; + ProcessDefinition proModel = ProcessDefCache.getInstance().getModel(model.getProcessDefId()); + if (proModel == null) { + result = CoeDesignerConstant.ANSWER_FAILED; + } else { + String appId = proModel.getAppId(); + JSONObject defineJson = JSONObject.parseObject(model.getDefinition()); + JSONObject drawJson = JSONObject.parseObject(model.getDraw()); + CoeDesignerUtil.parseBMPNUuid(defineJson, model.getProcessDefId());// 替换为aws的流程id作为标识 + + CoeDesignerUtil.parseBMPNUuid(drawJson, model.getProcessDefId()); + String op = CoeDesignerConstant.DESIGNER_AWS_OP_UPDATE + "|" + model.getProcessVersionId(); + try { + BPMNIO.saveJsonToBPMNFile(_uc, appId, model.getProcessDefId(), op, defineJson.toString(), !model.isCreateHistory(), drawJson.toString()); + result = CoeDesignerConstant.ANSWER_SUCESS; + } catch (BPMNDefException e) { + result = CoeDesignerConstant.ANSWER_FAILED; + e.printStackTrace(); + } catch (Exception e) { + result = CoeDesignerConstant.ANSWER_FAILED; + e.printStackTrace(); + } + } + return result; + } + + protected String createNewBpmnOfAws(UserContext uc, String processDefId, String appId, String operateType) {// 创建新版本 + try { + JSONObject define = JSONObject.parseObject(model.getDefinition()); + JSONObject message = JSONObject.parseObject(model.getDraw()); + CoeDesignerUtil.parseBMPNUuid(define, processDefId); + CoeDesignerUtil.parseBMPNUuid(message, processDefId); + int processNum = CoeDesignerUtil.getProcessDefinitionMaxNumber(appId, model.getProcessVersionId()); + CoeDesignerUtil.putProcess(define, model.getProcessVersionId(), model.getUUID(), processNum); + String result = BPMNIO.saveJsonToBPMNFile(uc, appId, processDefId, operateType, define.toString(), true, message.toString()); + return result; + } catch (BPMNDefException e) { + return BPMNErrorUtil.getErrorJSON(e); + } catch (Exception e) { + return BPMNErrorUtil.getErrorJSON(e); + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/CoeDesignerFile.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/CoeDesignerFile.java new file mode 100644 index 00000000..2e15e150 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/CoeDesignerFile.java @@ -0,0 +1,239 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.io.file; + +import java.io.File; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.util.List; + +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerShapeCache; +import com.actionsoft.bpms.util.UtilDate; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.apps.coe.pal.system.logger.CoeLogger; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.exception.AWSException; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public class CoeDesignerFile { + BaseModel model; + + public CoeDesignerFile(BaseModel model) { + if (model == null) { + CoeLogger.err("model 不能为null"); + } + this.model = model; + + } + + /** + * 存储文件 + * + * @return + */ + public int store(){ + checkFile("");// 检查define文件 + String filePath = "";// 文件路径 + filePath = getPathname(""); + UtilFile defineFile = new UtilFile(filePath);// 模型文件 + UtilFile jsonFile = new UtilFile(getJsonFilePath());// 节点文件 + JSONArray josnArr = getJsonFile(model.getDefinition()); + try { + defineFile.write(model.getDefinition().getBytes("UTF8")); + jsonFile.write(josnArr.toString().getBytes("UTF8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + throw new AWSException("保存文件失败"); + } + CoeDesignerShapeCache.getCache().putJsonArray(model.getUUID(), josnArr);// 图形缓存 + return CoeDesignerConstant.ANSWER_SUCESS; + } + + private JSONArray getJsonFile(String definition) { + List list = ShapeUtil.getShapeJsonToJsonObject(definition); + return JSONArray.parseArray(JSON.toJSONString(list)); + } + + /** + * 读取define + * + * @return + */ + public String readDefinition() { + if (!isExist("")) { + return ""; + } + String define = ""; + String path = getPathname(""); + UtilFile fileUtil = new UtilFile(path); + define = fileUtil.readStrUTF8(); + return define; + } + + /** + * 读取draw + * + * @return + */ + public String readDraw() { + if (!isExist(CoeDesignerConstant.FILE_DRAW_POSTFIX)) { + return ""; + } + String draw = ""; + String path = getPathname(CoeDesignerConstant.FILE_DRAW_POSTFIX); + UtilFile fileUtil = new UtilFile(path); + draw = fileUtil.readStrUTF8(); + return draw; + } + + /** + * 重置define、draw + * + * @return + */ + public int restore() { + checkFile(""); + checkFile(CoeDesignerConstant.FILE_DRAW_POSTFIX); + String filePath = getPathname(""); + String drawPath = getPathname(CoeDesignerConstant.FILE_DRAW_POSTFIX); + UtilFile fileUtil = new UtilFile(filePath); + UtilFile drawUtil = new UtilFile(drawPath); + try { + fileUtil.write(model.getDefinition().getBytes("UTF8")); + drawUtil.write(model.getDraw().getBytes("UTF8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + return CoeDesignerConstant.ANSWER_SUCESS; + } + + /** + * 移除文件 + * + * @return + */ + public int remove() { + checkFile(""); + checkFile(CoeDesignerConstant.FILE_DRAW_POSTFIX); + String path = getPathname("");// defnition文件 + String drawPath = getPathname(CoeDesignerConstant.FILE_DRAW_POSTFIX);// draw文件 + UtilFile fileUtil = new UtilFile(path); + UtilFile drawUtil = new UtilFile(drawPath); + UtilFile.removeFile(fileUtil); + UtilFile.removeFile(drawUtil); + return CoeDesignerConstant.ANSWER_SUCESS; + } + + /** + * 文件不存在,创建 + * + * @param type + */ + protected void checkFile(String type) { + File dir = new File(model.getPath()); + if (!dir.exists()) { + dir.mkdirs(); + } + UtilFile utilF = new UtilFile(getPathname(type)); + try { + if (!utilF.exists()) { + utilF.createNewFile(); + } + utilF = new UtilFile(getJsonFilePath()); + if (!utilF.exists()) { + utilF.createNewFile(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + } + + /** + * 获取文件存放路径名 + * + * @param type CoeDesignerConstant.FILE_DRAW_POSTFIX , "" + * @return + */ + public String getPathname(String type) { + String _ver = ""; + if (0 != model.getVer()) { + _ver = "_" + model.getVer(); + } + return model.getPath() + model.getUUID() + _ver + type; + } + + /** + * 获取文件存放路径名 + * + * @param type CoeDesignerConstant.FILE_DRAW_POSTFIX , "" + * @return + */ + public String getJsonFilePath() { + return model.getPath() + model.getUUID() + ".json"; + } + + /** + * 判断文件是否存在, + * + * @return + */ + public boolean isExist(String type) { + File dir = new File(model.getPath()); + if (!dir.exists()) { + dir.mkdirs(); + } + UtilFile utilFile = new UtilFile(getPathname(type)); + if (!utilFile.exists()) { + return false; + } + return true; + } + + /** + * 存储日志文件 + */ + public int recordFileLog() { + try { + String updateTime = model.getUpdateTime().replaceAll("[:|\\s]",""); //yyyy-MM-dd HH:mm:ss + if (UtilString.isEmpty(updateTime)) { + updateTime = UtilDate.datetimeFormat(new Date(System.currentTimeMillis())); + } + String year_month = updateTime.substring(0, 7); + //日志的目录 + String logPath = model.getPath() + year_month + "/"; + logPath = logPath.replace("workspace", "workspace/log"); //单独设置目录 + File dir = new File(logPath); + if (!dir.exists()) { + dir.mkdirs(); + } + //日志的文件,文件名带有版本时间信息 + String _ver = ""; + if (0 != model.getVer()) { + _ver = "_" + model.getVer(); + } + String logVerPath = logPath + model.getUUID() + _ver + "@" + updateTime; + //创建日志文件 + UtilFile utilFile = new UtilFile(logVerPath); + if (!utilFile.exists()) { + utilFile.createNewFile(); + } + //准备文件和文件内容 + String filePath = logVerPath;// 文件路径 + UtilFile defaultFile = new UtilFile(filePath);// 流程文件 + UtilFile jsonFile = new UtilFile(filePath + ".json");//节点文件 + JSONArray josnArr = getJsonFile(model.getDefinition()); + //写入内容 + defaultFile.write(model.getDefinition().getBytes("UTF8")); + jsonFile.write(josnArr.toString().getBytes("UTF8")); + } catch (Exception e) { + e.printStackTrace(); + } + return CoeDesignerConstant.ANSWER_SUCESS; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/helper/CoeFile.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/helper/CoeFile.java new file mode 100644 index 00000000..fa4080eb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/helper/CoeFile.java @@ -0,0 +1,199 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper; + +import java.io.File; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import org.joda.time.DateTime; +import org.joda.time.Period; +import org.joda.time.format.PeriodFormatter; +import org.joda.time.format.PeriodFormatterBuilder; + +import com.actionsoft.bpms.util.UtilDate; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper.CoeFileComparator.COEFileVersionDESC; + +public class CoeFile { + public JSONArray getHistoryJsonData(String path) { + File utilFile = new File(path); + JSONArray itemArray = new JSONArray(); + File[] drawFiles = utilFile.listFiles(new CoeFileFilter().new DrawFilter()); + List listFile = new ArrayList(); + if (drawFiles != null) { + listFile = Arrays.asList(drawFiles); + } + // 将文件按照版本序号排序 + Collections.sort(listFile, new COEFileVersionDESC()); + + List versionNames = new ArrayList(); + if (listFile != null && listFile.size() > 0) { + for (File file : listFile) { + versionNames.add(file.getName()); + } + } + + if (versionNames.size() > 0) { + for (int size = versionNames.size(), i = size - 1; i >= 0; i--) { + putItemToArray(path, itemArray, versionNames.get(i)); + } + } + return itemArray; + } + + private String validateJson(String name) { + return name == null ? "" : name; + } + + private void putItemToArray(String rootPath, JSONArray itemArray, String fileName) { + UtilFile uf = new UtilFile(rootPath + fileName);// processDefNames.get(0) + String itemStr = uf.readStr(); + if (itemStr == null || ("".equals(itemStr) || "\"null\"".equals(itemStr))) { + return; + } + JSONObject item = JSONObject.parseObject(itemStr); + item.put("filePath", rootPath + fileName); + String updateTimeFormat = "yyyy-MM-dd HH:mm:ss"; + if (itemArray.size() != 0) { + // 获取文件内容中的updateTime + UtilFile uf1 = new UtilFile(validateJson(((JSONObject) itemArray.get(0)).getString("filePath")));// processDefNames.get(0) + String itemStr1 = uf1.readStr(); + JSONObject item1 = JSONObject.parseObject(itemStr1); + DateTime dateTime = new DateTime(UtilDate.getTimes(validateJson(item.getString("updateTime")), updateTimeFormat)); + DateTime lastDateTime = new DateTime(UtilDate.getTimes(validateJson(item1.getString("updateTime")), updateTimeFormat)); + PeriodFormatter periodFormatter = new PeriodFormatterBuilder().appendYears().appendSuffix("年").appendMonths().appendSuffix("月").appendDays().appendSuffix("日").appendHours().appendSuffix("时").appendMinutes().appendSuffix("分").appendSeconds().appendSuffix("秒").toFormatter(); + Period period = null; + if (lastDateTime.getMillis() - dateTime.getMillis() > 0) { + period = new Period(dateTime, lastDateTime); + } else { + period = new Period(lastDateTime, dateTime); + } + item.put("interval", periodFormatter.print(period)); + ((JSONObject) itemArray.get(0)).remove("filePath"); + } + item.put("updateTimeAlias", UtilDate.getAliasDatetime(new Timestamp(UtilDate.getTimes(validateJson(item.getString("updateTime")), updateTimeFormat)))); + itemArray.add(0, item); + } + + /** + * 复制文件夹下面的文件,到指定的一个文件夹里 + * + * @param srcPathname 全路径文件夹名 + * @param targetPathname + * @return 1: 复制成功 , 0:复制失败, -1:复制报错 + */ + public int copyFile(String srcPathname, String targetPathname) { + int result = 0; + File srcFile = new File(srcPathname); + File targetFile = new File(targetPathname); + try { + UtilFile.copyDir(srcFile, targetFile); + result = 1; + } catch (Exception e) { + e.printStackTrace(); + result = -1; + } + return result; + } + + /** + * 修改文件夹下面的文件名 + * + * @param pathname 文件夹全路径 + * @param srcUuid 被替换的uuid + * @param targetUuid 替换的uuid + * @return 1:修改成功 , 0:修改失败 + */ + public int modifyFileNameOfPath(String pathname, String srcUuid, String targetUuid) { + int result = 0; + UtilFile utilF = new UtilFile(pathname); + String tempName = ""; + synchronized (this) { + File[] modifyFiles = utilF.listFiles(); + List listFile = new ArrayList(); + if (modifyFiles != null) { + listFile = Arrays.asList(modifyFiles); + } + for (File file : listFile) { + tempName = file.getName(); + tempName = tempName.replace(srcUuid, targetUuid); + File newFile = new File(pathname + tempName); + file.renameTo(newFile); + } + result = 1; + } + + return result; + } + + /** + * 删除指定目录下的所有文件 + * + * @param pathname 文件夹全路径 + * @return 1:删除成功 , 0:删除失败 + */ + public int removeFileOfPath(String pathname) { + int answer = 0; + UtilFile utilF = new UtilFile(pathname); + utilF.removeFile(utilF); + answer = 1; + return answer; + } + + public int copyDefaultVersion(String srcPath, String srcUuid, String targetPath, String targetUuid) { + int answer = CoeDesignerConstant.ANSWER_DEFAULT; + File file = new File(srcPath); + File[] listFiles = file.listFiles(new CoeFileFilter().new DefaultVersionFilter()); + List srcFiles = new ArrayList(); + if (listFiles != null) { + for (int i = 0; i < listFiles.length; i++) { + File srcFile = listFiles[i]; + srcFiles.add(srcFile.getName()); + } + } + for (String srcName : srcFiles) { + String targetName = srcName.replace(srcUuid, targetUuid); + UtilFile srcFile = new UtilFile(srcPath + srcName); + File dir = new File(targetPath); + if (!dir.exists()) { + dir.mkdir(); + } + UtilFile targetFile = new UtilFile(targetPath + targetName); + try { + if (!targetFile.exists()) { + targetFile.createNewFile(); + } + srcFile.copyFile(srcFile, targetFile); + } catch (IOException e) { + e.printStackTrace(); + return CoeDesignerConstant.ANSWER_FAILED; + } catch (Exception e) { + e.printStackTrace(); + return CoeDesignerConstant.ANSWER_FAILED; + } + } + return CoeDesignerConstant.ANSWER_SUCESS; + } + + public static void main(String[] args) { + String updateTimeFormat = "yyyy-MM-dd HH:mm:ss"; + DateTime lastDateTime = new DateTime(UtilDate.getTimes("2013-12-12 17:27:13", updateTimeFormat)); + Date newDate = new Date(); + long dual = newDate.getTime() - lastDateTime.getMillis(); + if (dual - 2 * 60 * 1000 > 0) { + System.out.println("时间差大于2分钟"); + System.out.println("时间差为" + dual / 1000); + } else { + System.out.println("时间差小于2分钟"); + System.out.println("时间差为" + dual / 1000); + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/helper/CoeFileComparator.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/helper/CoeFileComparator.java new file mode 100644 index 00000000..dd7b8489 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/helper/CoeFileComparator.java @@ -0,0 +1,111 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper; + +import java.io.File; +import java.util.Comparator; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition; + +public class CoeFileComparator { + /** + * 按照最后修改时间升序排列 + * + * @author renmm + * + */ + public static class LastModifiedComparatorASC implements Comparator { + public int compare(File o1, File o2) { + long result = o1.lastModified() - o2.lastModified(); + if (result > 0) { + return 1; + } else if (result < 0) { + return -1; + } else { + return 0; + } + } + } + + /** + * 按照最后修改时间降序排列 + * + * @author renmm + * + */ + public static class LastModifiedComparatorDESC implements Comparator { + public int compare(File o1, File o2) { + long result = o2.lastModified() - o1.lastModified(); + if (result > 0) { + return 1; + } else if (result < 0) { + return -1; + } else { + return 0; + } + } + } + + /** + * 按照coe历史版本号降序排列 + * + * @author renmm + * + */ + public static class COEFileVersionDESC implements Comparator { + String versionNoReg = "_([0-9]+).*$"; + Pattern pattern = Pattern.compile(versionNoReg); + + public int compare(File o1, File o2) { + Matcher matcher1 = pattern.matcher(o1.getName()); + int o1VersionNO = Integer.MAX_VALUE; + while (matcher1.find()) { + o1VersionNO = Integer.parseInt(matcher1.group(1)); + } + int o2VersionNO = Integer.MAX_VALUE; + Matcher matcher2 = pattern.matcher(o2.getName()); + while (matcher2.find()) { + o2VersionNO = Integer.parseInt(matcher2.group(1)); + } + return o2VersionNO - o1VersionNO; + } + } + + /** + * 按照coe历史版本号升序排列 + * + * @author renmm + * + */ + public static class COEFileVersionASC implements Comparator { + String versionNoReg = "_([0-9]+).*$"; + Pattern pattern = Pattern.compile(versionNoReg); + + public int compare(File o1, File o2) { + Matcher matcher1 = pattern.matcher(o1.getName()); + int o1VersionNO = Integer.MAX_VALUE; + while (matcher1.find()) { + o1VersionNO = Integer.parseInt(matcher1.group(1)); + } + int o2VersionNO = Integer.MAX_VALUE; + Matcher matcher2 = pattern.matcher(o2.getName()); + while (matcher2.find()) { + o2VersionNO = Integer.parseInt(matcher2.group(1)); + } + return o1VersionNO - o2VersionNO; + } + } + + /** + * 流程版本排号降序排序 + * + * @author renmm + * + */ + public static class ProcessDefinitionDESC implements Comparator { + public int compare(ProcessDefinition o1, ProcessDefinition o2) { + return o2.getVersionNo() - o1.getVersionNo(); + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/helper/CoeFileFilter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/helper/CoeFileFilter.java new file mode 100644 index 00000000..22bda9c9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/file/helper/CoeFileFilter.java @@ -0,0 +1,170 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper; + +import java.io.File; +import java.io.FilenameFilter; +import java.util.regex.Pattern; + +import com.actionsoft.bpms.bpmn.modeler.constant.BPMNFileConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; + +public class CoeFileFilter { + /** + * 缩略图 + * + * @param fileName + * @return + */ + public class PNGFilter implements FilenameFilter { + + private boolean isPNG(String fileName) { + if (fileName.toLowerCase().endsWith(BPMNFileConstant.IMG_FILE_EXT_NAME) && !fileName.toLowerCase().endsWith(BPMNFileConstant.IMG_SMALL_FILE_EXT_NAME)) { + return true; + } else { + return false; + } + } + + public boolean accept(File dir, String name) { + return isPNG(name); + } + + } + + /** + * 小缩略图filter + * + * @param fileName + * @return + */ + public class SmallPNGFilter implements FilenameFilter { + + private boolean isSmallPNG(String fileName) { + if (fileName.toLowerCase().endsWith(BPMNFileConstant.IMG_SMALL_FILE_EXT_NAME)) { + return true; + } else { + return false; + } + } + + public boolean accept(File dir, String name) { + return isSmallPNG(name); + } + + } + + /** + * 历史小缩略图filter + * + * @param fileName + * @return + */ + public class SmallPNGHistoryFilter implements FilenameFilter { + private boolean isSmallPNGHistory(String fileName) { + String patternStr = "_[a-z0-9]*_[0-9]+" + BPMNFileConstant.IMG_SMALL_FILE_EXT_NAME; + if (Pattern.matches(patternStr, fileName)) { + return true; + } else { + return false; + } + } + + public boolean accept(File dir, String name) { + return isSmallPNGHistory(name); + } + } + + /** + * draw filter + * + * @author renmm + * + */ + public class DrawFilter implements FilenameFilter { + + public boolean accept(File dir, String name) { + String historyReg = "_\\d+\\" + CoeDesignerConstant.FILE_DRAW_POSTFIX + "$"; + return Pattern.compile(historyReg).matcher(name).find(); + // return name.endsWith(CoeDesignerConstant.FILE_DRAW_POSTFIX); + } + + } + + /** + * coe filter + * + * @author renmm + * + */ + public class DefaultFilter implements FilenameFilter { + + public boolean accept(File dir, String name) { + + return name.indexOf(".") != -1; + } + + } + + /** + * 过滤历史版本 + * + * @author rmm + * + */ + public class HistoryFilter implements FilenameFilter { + private boolean isHistory(String fileName) { + String patternStr = "[a-z0-9-]*_[0-9]+"; + if (Pattern.matches(patternStr, fileName)) { + return true; + } else { + return false; + } + } + + public boolean accept(File dir, String name) { + return isHistory(name); + } + } + + /** + * 过滤bpmn历史版本(共享版本) + * + * @author rmm + * + */ + public class HistoryOfShareFilter implements FilenameFilter { + private boolean isHistory(String fileName) { + String patternStr = "link_[a-z0-9]*_[a-z0-9]*_[0-9]+"; + if (Pattern.matches(patternStr, fileName)) { + return true; + } else { + return false; + } + } + + public boolean accept(File dir, String name) { + return name.indexOf("link_") != -1; + } + } + + /** + * 过滤默认版本(包括.png、.draw格式) + * + * @author rmm + * + */ + public class DefaultVersionFilter implements FilenameFilter { + private boolean isDefaultFile(String fileName) { + String patternStr = "((?:link_)?[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12})(\\.draw|\\.png|\\.small\\.png)?"; + if (Pattern.matches(patternStr, fileName)) { + return true; + } else { + return false; + } + } + + public boolean accept(File dir, String name) { + return isDefaultFile(name); + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/image/CoeDesignerImage.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/image/CoeDesignerImage.java new file mode 100644 index 00000000..b7c693a8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/io/image/CoeDesignerImage.java @@ -0,0 +1,58 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.io.image; + +import com.actionsoft.bpms.bpmn.modeler.util.draw.ChartGraphics; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.exception.AWSException; + +public class CoeDesignerImage { + public void save(String pathname,byte []image){ + if (image.length > 0) { + // 保存图片 + UtilFile uf = new UtilFile(pathname); + uf.write(image); + } + } + + + private static void create(String pathname,byte []image){ + if (image.length > 0) { + // 保存图片 + UtilFile uf = new UtilFile(pathname); + uf.write(image); + } + } + + /** + * 生成图片和缩略图 + * @param model 模型源文件 + * @param bigImage 是否生成大图(正常图片大小) + * @param smallImage 是否生成缩略图 + */ + public static void saveImage(BaseModel model, boolean bigImage, boolean smallImage) { + //保存图片 + ChartGraphics brush = new ChartGraphics(); + if (bigImage) { + String pathname =model.getPath()+model.getUUID()+".png"; + byte[] desginerImg = null; + try { + desginerImg = brush.draw(model.getDefinition(), null, null); // 获得原图 + create(pathname, desginerImg); + } catch (Exception e) { + e.printStackTrace(); + throw new AWSException("创建图片失败"); + } + } + if (smallImage) { + String smallpathname =model.getPath()+model.getUUID()+".small.png"; + byte[] desginerSmailImg = null; + try { + desginerSmailImg = brush.draw(model.getDefinition(), 200, 200); + create(smallpathname, desginerSmailImg); + } catch (Exception e) { + e.printStackTrace(); + throw new AWSException("创建缩略图失败"); + } + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/job/SaveImageJob.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/job/SaveImageJob.java new file mode 100644 index 00000000..d71cfaee --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/job/SaveImageJob.java @@ -0,0 +1,106 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.job; + +import java.io.File; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.image.CoeDesignerImage; +import com.actionsoft.apps.coe.pal.pal.repository.designer.manage.CoeDesignerAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BPMNModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.apps.coe.pal.pal.ws.constant.CoeWsConstant; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSONObject; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import com.actionsoft.bpms.schedule.IJob; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerImageCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.exception.AWSException; +/** + * 创建PAL模型图片和缩略图任务 + * @author sunlh + * + */ +public class SaveImageJob implements IJob { + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + // 遍历所有启用中的资产库,将没有图片但是有内容的模型加入cache中进行图片和缩略图创建,暂不考虑关联BPM端的流程 + List wsList = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getCoeWorkSpaceModelRecodesNoPage(); + for (CoeWorkSpaceModel wsModel : wsList) { + if (wsModel.getWsState() == CoeWsConstant.CLOSE) { + continue; + } + Iterator iterator = PALRepositoryCache.getByWsId(wsModel.getUUId()); + while (iterator.hasNext()) { + PALRepositoryModel model = iterator.next(); + String uuid = model.getId(); + // 修改流程图 + BaseModel defineModel; + String define = null; + if (model.getMethodId().equals("process.bpmn2")) { + defineModel = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(uuid, 0); + } else { + defineModel = CoeDesignerAPIManager.getInstance().getDefinition(uuid, 0); + } + if (defineModel != null) { + define = defineModel.getDefinition(); + } + if (UtilString.isNotEmpty(define)) { + JSONObject definition = JSONObject.parseObject(define); + JSONObject elements = definition.getJSONObject("elements"); + String path = model.getFilePath(); + // 判断是否有元素、是否有图片文件 + if (elements != null && elements.size() > 0 && UtilString.isNotEmpty(path)) { + String imgPath = path + File.separator + model.getId() + ".png"; + File file = new File(imgPath);// 云存储需要调整获取文件方式 todo + if (!file.exists()) { + CoeDesignerImageCache.getCache().put(model.getId(), model.getId()); + SDK.getLogAPI().consoleInfo("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]资产库[" + wsModel.getWsName() + "]模型文件["+ model.getName() +"]加入待生成图片队列"); + } + } + } + } + } + + Set uuids = CoeDesignerImageCache.getCache().keys(); + if(uuids != null && !uuids.isEmpty()) { + ExecutorService pool = Executors.newFixedThreadPool(4);// 线程池 + for (String uuid : uuids) { + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + if (plModel != null) { + pool.execute(new Runnable() { + @Override + public void run() { + SDK.getLogAPI().consoleInfo("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]模型文件["+ plModel.getName() +"]创建模型图片和缩略图"); + PALRepositoryQueryAPIManager.getInstance().saveImage(uuid, true, true);// 生成图片和缩略图 + } + }); + } + CoeDesignerImageCache.getCache().remove(uuid);// 删除缓存 + } + try { + pool.shutdown(); + pool.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS); + } catch (Exception e) { + throw new AWSException(e); + } + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/manage/CoeDesignerAPIManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/manage/CoeDesignerAPIManager.java new file mode 100644 index 00000000..082ba4fb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/manage/CoeDesignerAPIManager.java @@ -0,0 +1,77 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.manage; + +import com.actionsoft.apps.coe.pal.pal.repository.designer.dao.BPMNDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.dao.CoeDesignerDefaultDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BPMNModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; + +public class CoeDesignerAPIManager { + protected static CoeDesignerAPIManager instance; + + public static CoeDesignerAPIManager getInstance() { + if (instance == null) { + instance = new CoeDesignerAPIManager(); + } + return instance; + } + + /** + * 存储definition + */ + public int storeDefinition(BaseModel model) { + return new CoeDesignerDefaultDao().store(model); + } + + public int storeDefinitionOfBpmn(BPMNModel model) { + return new BPMNDao().store(model); + } + + /** + * 获取定义模型 + * + * @param UUID + * @return + */ + public BaseModel getDefinition(String uuid, int ver) { + return new CoeDesignerDefaultDao().get(uuid, ver); + + } + + public BPMNModel getDefinitionOfBpmn(String uuid, int ver) { + return new BPMNDao().get(uuid, ver); + } + + public int restoreDefinition(BaseModel model) { + return new CoeDesignerDefaultDao().restore(model); + } + + public int restoreDefinitionOfBpmn(BPMNModel model) { + return new BPMNDao().restore(model); + } + + /** + * 删除definition + */ + public BaseModel deleteDefinition(String uuid, int ver) { + return new CoeDesignerDefaultDao().delete(uuid, ver); + } + + public BaseModel deleteDefinitionOfBpmn(String uuid, int ver) { + return new BPMNDao().delete(uuid, ver); + } + + /** + * 获取正在运行的历史版本 + * + * @param type + * @param uuid + * @return + */ + // public BaseModel getRunHistory(BaseModel model) { + // return new CoeDesignerDefaultDao().getRunHistory(model); + // } + // + // public BaseModel getRunHistoryOfBpmn(BPMNModel model, UserContext uc) { + // return new BPMNDao(uc).getRunHistory(model); + // } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/model/BPMNModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/model/BPMNModel.java new file mode 100644 index 00000000..b8951496 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/model/BPMNModel.java @@ -0,0 +1,70 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.model; + + +public class BPMNModel extends BaseModel { + private String platform; + private String appId; + private String processDefId; + private String processVersionId; + private String processVerNum; + private String link_uuid;//链接文件名, 当platfrom为aws6时,link_uuid作为coeDesginerEngine与aws6DesginerEngine中转文件(实现共享) + private String realPath;//文件内容真实存放路径 + public String getPlatform() { + return platform; + } + + public void setPlatform(String platform) { + this.platform = platform; + } + + public String getProcessDefId() { + return processDefId; + } + + public void setProcessDefId(String processDefId) { + this.processDefId = processDefId; + } + + public String getLink_uuid() { + return link_uuid; + } + + public void setLink_uuid(String link_uuid) { + this.link_uuid = link_uuid; + } + + public String getRealPath() { + return realPath; + } + + public void setRealPath(String realPath) { + this.realPath = realPath; + } + + public String getProcessVersionId() { + return processVersionId; + } + + public void setProcessVersionId(String processVersionId) { + this.processVersionId = processVersionId; + } + + public String getProcessVerNum() { + return processVerNum; + } + + public void setProcessVerNum(String processVerNum) { + this.processVerNum = processVerNum; + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/model/BaseModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/model/BaseModel.java new file mode 100644 index 00000000..c7524d29 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/model/BaseModel.java @@ -0,0 +1,117 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +public class BaseModel extends ModelBean { + + private static final long serialVersionUID = 5292857223929495875L; + protected String uuid = "";// 物理存放名 + protected String versionUuid = ""; + protected String definition;// 设计器需要的对象 + protected String type = "";// 存放的类型 + protected String path = "";// 路径 + protected String methodId = "";// 建模方法 + protected int ver;// 版本 + protected String draw;// 拖动的动作 + protected String action; + protected boolean isCreateHistory = false; + protected String updateTime; + protected String fileName;// 文件名 + + public String getUUID() { + return uuid; + } + + public void setUUID(String UUID) { + this.uuid = UUID; + } + + public String getDefinition() { + return definition; + } + + public void setDefinition(String definition) { + this.definition = definition; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getMethodId() { + return methodId; + } + + public void setMethodId(String methodId) { + this.methodId = methodId; + } + + public int getVer() { + return ver; + } + + public void setVer(int ver) { + this.ver = ver; + } + + public String getDraw() { + return draw; + } + + public void setDraw(String draw) { + this.draw = draw; + } + + public String getAction() { + return action; + } + + public void setAction(String action) { + this.action = action; + } + + public boolean isCreateHistory() { + return isCreateHistory; + } + + public void setCreateHistory(boolean isCreateHistory) { + this.isCreateHistory = isCreateHistory; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getVersionUuid() { + return versionUuid; + } + + public void setVersionUuid(String versionUuid) { + this.versionUuid = versionUuid; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/path/PLRFilePath.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/path/PLRFilePath.java new file mode 100644 index 00000000..103026ff --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/path/PLRFilePath.java @@ -0,0 +1,23 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.path; + +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.apps.coe.pal.pal.repository.designer.path.bulid.CoeFileBuilder; + +public class PLRFilePath { + private static PLRFilePath instance=null; + /** + * @return + */ + public String create(AppContext app,String rUuid){ + + return CoeFileBuilder.getInstance().getlevel4(app, rUuid);//创建4层文件夹路径 + } + + public static PLRFilePath getInstance(){ + if(instance==null){ + instance = new PLRFilePath(); + } + return instance; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/path/bulid/CoeFileBuilder.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/path/bulid/CoeFileBuilder.java new file mode 100644 index 00000000..55ef3803 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/path/bulid/CoeFileBuilder.java @@ -0,0 +1,43 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.path.bulid; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.constant.CoeFileConstant; +import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.dc.DCProfileManager; +import com.actionsoft.bpms.server.fs.dc.DCUtil; +import com.alibaba.fastjson.JSONObject; + +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.pal.ws.web.VersionUtil; + +public class CoeFileBuilder { + private CoeFileBuilder(){ + } + private static class InnerClass { + private static final CoeFileBuilder instance= new CoeFileBuilder(); + } + + public static CoeFileBuilder getInstance(){ + return InnerClass.instance; + } + public String getlevel4(AppContext app, String rUuid){ + //获取plModel + PALRepositoryModel plModel =(PALRepositoryModel)CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(rUuid); + //获取wsModel + CoeWorkSpaceModel wsModel =(CoeWorkSpaceModel)CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstance(plModel.getWsId()); + JSONObject folderObj = new JSONObject(); + folderObj.put("1", wsModel.getWsVersionUuid()); + folderObj.put("2", VersionUtil.getVersionStrV(wsModel.getWsVer())); + folderObj.put("3", plModel.getMethodId()); + folderObj.put("4", plModel.getVersionId()); + String path =DCUtil.getPath() + CoEConstant.APP_ID + "/" +CoEConstant.REPOSITORY_ROOT_DIR + "/" +folderObj.getString("1")+"/"+folderObj.getString("2")+"/"+folderObj.getString("3")+"/"+folderObj.getString("4")+"/"; + return path; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/event/BasicEventSource.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/event/BasicEventSource.java new file mode 100644 index 00000000..0104a8e2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/event/BasicEventSource.java @@ -0,0 +1,70 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.event; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.manage.CoeListenCacheManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.model.ListenEvent; + +/** + * 基本事件源 + * @author zhangming + * + */ +public class BasicEventSource implements Runnable{ + + private EventListener listener; + private Thread sourceThread; + private boolean active = false; + private String messageQueueKey; + private String listenTime; + private List events = new ArrayList(); + private String dateFormat; + + public BasicEventSource(Map params) { + this.messageQueueKey = params.get("subject"); + this.listenTime = params.get("listenTime"); +// if(Validator.isEmpty(listenTime)){ +// this.listenTime = String.valueOf(System.currentTimeMillis()); +// } + this.dateFormat = params.get("dateFormat"); + } + + public void addListener(EventListener listener) { + this.listener = listener; + } + + public void run() { + while (active && events.size() == 0){ + //监听EventSource + List collaborationMessages = CoeListenCacheManager.getInstance().getCollaborationMessages(messageQueueKey, listenTime); + if(collaborationMessages != null && collaborationMessages.size() > 0){ + events.addAll(collaborationMessages); + } + if(events.size() > 0){ + listener.send(events); + break; + } + try { + if(active){ + Thread.sleep(200); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + public void start() { + sourceThread = new Thread(this); + sourceThread.setDaemon(true); + active = true; + sourceThread.start(); + } + + public void stop() { + active = false; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/event/EventListener.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/event/EventListener.java new file mode 100644 index 00000000..2c56f02a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/event/EventListener.java @@ -0,0 +1,89 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.event; + +import java.util.ArrayList; +import java.util.List; + +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.model.ListenEvent; + + +/** + * 事件监听器 + * Http长链接的维持者 + * + * @author zhangming + * + */ +public class EventListener{ + + /** + * 监听器返回后,而事件源监听线程有可能仍处在最后一次循环中。 + * 增加状态标识,防止事件源在监听器停止后,仍修改监听器事件队列 + */ + private boolean listening = true; + protected final List events = new ArrayList(); + private BasicEventSource source; + + /** + * Add event for sending. + */ + public void send(ListenEvent e) { + source.stop(); + synchronized (events) { + if(listening){ + events.add(e); + events.notify(); + } + } + } + + /** + * Add event for sending. + */ + public void send(List es) { + source.stop(); + synchronized (events) { + if(listening){ + events.addAll(es); + events.notify(); + } + } + } + + /** + * 监听事件源 + * @return + */ + public List listen() { + source.start(); + synchronized (events) { + if (events.size() == 0) { + try { + events.wait(CoeDesignerConstant.REALTIME_LISTEN_TIME * 1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + stopListen(); + return events; + } + } + + /** + * 停止监听事件源变化 + */ + public void stopListen(){ + listening = false; + source.stop(); + } + + /** + * 设置监听的事件源 + * @param source + */ + public void setSource(BasicEventSource source) { + this.source = source; + this.source.addListener(this); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/manage/CoeListenCacheManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/manage/CoeListenCacheManager.java new file mode 100644 index 00000000..5b6566ae --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/manage/CoeListenCacheManager.java @@ -0,0 +1,219 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.manage; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TimerTask; + +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.model.ListenClient; +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.model.ListenEvent; + +/** + * 管理监听缓存 + * @author zhangming + * @since 20140324 + * + */ +public class CoeListenCacheManager extends TimerTask { + + protected static CoeListenCacheManager instance; + protected static final Map> collaborationMessages = new HashMap>(); //> + protected static final Map> collaborationSessions = new HashMap>(); //> + + public static CoeListenCacheManager getInstance() { + if (instance == null) { + instance = new CoeListenCacheManager(); + } + return instance; + } + + @Override + public void run() { + long currentTime = System.currentTimeMillis(); + //遍历事件消息Map,删除30s之前的事件消息 + if (collaborationMessages.size() > 0) { + Calendar oldDate = Calendar.getInstance(); + long oldTime; + Iterator>> iteratorEvent = collaborationMessages.entrySet().iterator(); + while (iteratorEvent.hasNext()) { + List messagesEvents = iteratorEvent.next().getValue(); + List removeMessages = new ArrayList(); + for (ListenEvent event : messagesEvents) { + String eventTime = event.getTime(); + try { + Date time = new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).parse(eventTime); + oldDate.setTime(time); + oldTime = oldDate.getTimeInMillis(); + if ((currentTime - oldTime) / 1000 > CoeDesignerConstant.REALTIME_LISTEN_TIME) { + removeMessages.add(event); + } + } catch (ParseException e) { + e.printStackTrace(); + } + } + messagesEvents.removeAll(removeMessages); + } + } + + //遍历Session Map,如果监听时间距离当前时间超过45s,发送离线消息 + if (collaborationSessions.size() > 0) { + Calendar listenTime = Calendar.getInstance(); + long listenTimeLong; + Iterator>> iteratorSession = collaborationSessions.entrySet().iterator(); + while (iteratorSession.hasNext()) { + Map listenClients = iteratorSession.next().getValue(); + if (listenClients.size() == 0) { + iteratorSession.remove(); + continue; + } + Iterator> it = listenClients.entrySet().iterator(); + while(it.hasNext()) { + ListenClient client = it.next().getValue(); + String listenTimeStr = client.getListenTime(); + try { + Date listenTimeDate = new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).parse(listenTimeStr); + listenTime.setTime(listenTimeDate); + listenTimeLong = listenTime.getTimeInMillis(); + if ((currentTime - listenTimeLong) / 1000 > 45) { + //发送离线消息 + ListenEvent listenEvent = new ListenEvent(); + listenEvent.setAction("leave"); + String msg = "{\"action\": \"leave\", \"userId\": \"" + client.getUserId() + "\", \"name\": \"" + client.getName() + "\"}"; + listenEvent.setMessages(msg); + listenEvent.setSubject(client.getSubject()); + listenEvent.setTime(new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date())); + listenEvent.setClientId(client.getClinetId()); + listenEvent.setUserId(client.getUserId()); + setCollaborationMessages(listenEvent); + //将其移除 + it.remove(); + } + } catch (ParseException e) { + e.printStackTrace(); + } + } + + if (listenClients.size() == 0) { + iteratorSession.remove(); + } + } + + } + } + + /** + * 从监听事件缓存中获取事件列表 + * @param uuid + * @param listenTime + * @return + */ + public List getCollaborationMessages(String uuid, String listenTime) { + List events = null; + if (collaborationMessages != null && collaborationMessages.containsKey(uuid)) { + List messages = collaborationMessages.get(uuid); + events = new ArrayList(); + for (ListenEvent event : messages) { + if (listenTime.compareTo(event.getTime()) < 0) { + events.add(event); + } + } + } + return events; + } + + /** + * 将事件添加到监听事件缓存中 + * @param listenEvent + */ + public void setCollaborationMessages(ListenEvent listenEvent) { + String subject = listenEvent.getSubject(); + if (!collaborationMessages.containsKey(subject)) { + List newEvent = new ArrayList(); + newEvent.add(listenEvent); + collaborationMessages.put(subject, newEvent); + } else { + collaborationMessages.get(subject).add(listenEvent); + } + } + + /** + * 判定uuid+sid是否在监听列表中 + * @param uuid 模型id + * @param sid + * @return 已经在监听列表中返回true,否则返回false + */ + public boolean sessionExist(String subject, String sid) { + boolean exist = false; + if (collaborationSessions.containsKey(subject)) { + Map session = collaborationSessions.get(subject); + if (session!= null && session.containsKey(sid) && session.get(sid).getListenTime() != null) { + exist = true; + } + } + return exist; + } + + /** + * 在监听列表中添加session + * @param listenClient + */ + public void setCollaborationSessions(ListenClient listenClient) { + String subject = listenClient.getSubject(); + String sid = listenClient.getSid(); + if (!collaborationSessions.containsKey(subject)) { + Map newSession = new HashMap(); + newSession.put(sid, listenClient); + collaborationSessions.put(subject, newSession); + } else { + collaborationSessions.get(subject).put(sid, listenClient); + } + } + + /** + * 根据文件id获取协作者列表 + * @param subject + * @return Map userNum:同一用户登录数(用户可多地登录) + */ + public Map getCollaborationUsers(String subject) { + Map result = null; + if (collaborationSessions.containsKey(subject) && collaborationSessions.get(subject).size() > 0) { + result = new HashMap(); + for (Map.Entry listenClientMap : collaborationSessions.get(subject).entrySet()) { + ListenClient listenClient = listenClientMap.getValue(); + String userId = listenClient.getUserId(); + if (!result.containsKey(userId)) { + listenClient.setUserNum(1); + } else { + int num = listenClient.getUserNum(); + listenClient.setUserNum(num++); + } + result.put(userId, listenClient); + } + } + return result; + } + + /** + * 处理用户离线信息 + * @param subject + * @param sid + * @return + */ + public ListenClient removeCollaborationSession(String subject, String sid) { + //删除Session + ListenClient listenClient = null; + if (collaborationSessions.containsKey(subject)) { + listenClient = collaborationSessions.get(subject).remove(sid); + } + return listenClient; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/model/ListenClient.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/model/ListenClient.java new file mode 100644 index 00000000..91e44519 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/model/ListenClient.java @@ -0,0 +1,61 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.model; + +import java.util.Date; +/** + * 编辑状态用户信息 + * @author zhangming + * @since 20140320 + */ +public class ListenClient { + private String clinetId; //客户端ID(JS随机生成) + private String userId; //用户id + private String name; //用户名 + private String subject; //监听文件id + private String sid; //监听sid + private String listenTime; //开始监听时间 + private int userNum; //同一用户Id登录数(用户可多地登录) + + public String getClinetId() { + return clinetId; + } + public void setClinetId(String clinetId) { + this.clinetId = clinetId; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getSubject() { + return subject; + } + public void setSubject(String subject) { + this.subject = subject; + } + public String getSid() { + return sid; + } + public void setSid(String sid) { + this.sid = sid; + } + public String getListenTime() { + return listenTime; + } + public void setListenTime(String listenTime) { + this.listenTime = listenTime; + } + public String getUserId() { + return userId; + } + public void setUserId(String userId) { + this.userId = userId; + } + public int getUserNum() { + return userNum; + } + public void setUserNum(int userNum) { + this.userNum = userNum; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/model/ListenEvent.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/model/ListenEvent.java new file mode 100644 index 00000000..93ddd5b5 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/model/ListenEvent.java @@ -0,0 +1,69 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.model; + +import java.util.Date; + +/** + * 文件编辑状态事件信息 + * @author zhangming + * @since 20140320 + */ +public class ListenEvent { + private String subject; //文件id + private String time; //事件发生时间 + private String action; //事件action + private String messages; //事件详细信息 + private String clientId; //客户端ID(JS随机生成) + private String userId; //用户ID + private String title; //模型名称 + private String photoUrl; //协作者用户头像(action=join) + + public String getSubject() { + return subject; + } + public void setSubject(String subject) { + this.subject = subject; + } + public String getAction() { + return action; + } + public void setAction(String action) { + this.action = action; + } + public String getMessages() { + return messages; + } + public void setMessages(String messages) { + this.messages = messages; + } + public String getTime() { + return time; + } + public void setTime(String time) { + this.time = time; + } + public String getClientId() { + return clientId; + } + public void setClientId(String clientId) { + this.clientId = clientId; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getPhotoUrl() { + return photoUrl; + } + public void setPhotoUrl(String photoUrl) { + this.photoUrl = photoUrl; + } + public String getUserId() { + return userId; + } + public void setUserId(String userId) { + this.userId = userId; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/web/CoeRealtimeWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/web/CoeRealtimeWeb.java new file mode 100644 index 00000000..93b365dd --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/realtime/web/CoeRealtimeWeb.java @@ -0,0 +1,141 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.web; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.alibaba.fastjson.JSONObject; + +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.event.BasicEventSource; +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.event.EventListener; +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.manage.CoeListenCacheManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.model.ListenClient; +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.model.ListenEvent; +import com.actionsoft.sdk.local.SDK; + +public class CoeRealtimeWeb extends ActionWeb { + private static final long serialVersionUID = 1L; + private UserContext _uc; + + public CoeRealtimeWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + /** + * 协作监听 + * + * @param request + * @param message + * @param map + * @return + */ + public String listen(String clientId, String userId, String name, String subject, String listenTime) { + Map params = new HashMap(); + params.put("subject", subject); + if (listenTime != null && !listenTime.equals("")) { + params.put("listenTime", listenTime); + } else { + params.put("listenTime", new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date())); + } + params.put("sid", super.getContext().getSessionId()); + params.put("clientId", clientId); + params.put("userId", userId); + params.put("name", name); + + // 处理session + manageSession(params); + + // 启动监听 + EventListener listener = new EventListener(); + BasicEventSource source = new BasicEventSource(params); + listener.setSource(source); + List events = listener.listen(); + + // 监听完毕 + // 发送继续监听事件,并通知监听的版本号,如果没有事件,则继续监听以前的版本号 + ListenEvent refreshEvent = new ListenEvent(); + refreshEvent.setAction("refresh"); + refreshEvent.setTime(new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date())); + events.add(refreshEvent); + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject json = new JSONObject(); + json.put("events", events); + ro.setData(json); + return ro.toString(); + } + + /** + * 管理用户的session + * + * @param params + */ + private void manageSession(Map params) { + String subject = params.get("subject"); + String userId = params.get("userId"); + String name = params.get("name"); + String listenTime = params.get("listenTime"); + String sid = params.get("sid"); + String clientId = params.get("clientId"); + CoeListenCacheManager manager = CoeListenCacheManager.getInstance(); + + // 每次监听,更新该session的生存时间 + boolean sessionExists = manager.sessionExist(subject, sid); + // 如果session不存在或者listenTime为空(表示第一次监听),发布上线消息 + if (!sessionExists) { + // 向Message Queue里发布上线消息 + ListenEvent listenEvent = new ListenEvent(); + listenEvent.setAction("join"); + String msg = "{\"action\": \"join\", \"userId\": \"" + userId + "\", \"name\": \"" + name + "\"}"; + listenEvent.setMessages(msg); + listenEvent.setSubject(subject); + listenEvent.setTime(listenTime); + listenEvent.setClientId(clientId); + listenEvent.setUserId(userId); + listenEvent.setPhotoUrl(SDK.getPortalAPI().getUserPhoto(_uc, userId)); + manager.setCollaborationMessages(listenEvent); + } + + // 建立Session + ListenClient listenClient = new ListenClient(); + listenClient.setClinetId(clientId); + listenClient.setUserId(userId); + listenClient.setName(name); + listenClient.setListenTime(listenTime); + listenClient.setSubject(subject); + listenClient.setSid(sid); + manager.setCollaborationSessions(listenClient); + } + + /** + * 将事件加入监听事件中 + * + * @param params + * @author zhangming + */ + public void addRealtimeEvents(Map params) { + Date newDate = new Date(); + String newDataStr = new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(newDate); + ListenEvent listenEvent = new ListenEvent(); + String action = params.get("action") == null ? "" : params.get("action"); + listenEvent.setAction(action); + listenEvent.setMessages(params.get("messages") == null ? "" : params.get("messages")); + listenEvent.setSubject(params.get("uuid") == null ? "" : params.get("uuid")); + listenEvent.setTime(newDataStr); + listenEvent.setClientId(params.get("clientId") == null ? "" : params.get("clientId")); + listenEvent.setTitle(params.get("title") == null ? "" : params.get("title")); + listenEvent.setUserId(params.get("userId") == null ? "" : params.get("userId")); + CoeListenCacheManager listenManager = CoeListenCacheManager.getInstance(); + // 如果是离线事件,要删除相应的session + if ("leave".equals(action)) { + listenManager.removeCollaborationSession(params.get("uuid"), params.get("sid")); + } + listenManager.setCollaborationMessages(listenEvent); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCache.java new file mode 100644 index 00000000..3cdd360e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCache.java @@ -0,0 +1,268 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.commons.cache.ReplicateActionListener; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.dao.DesignerShapeRelationDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.team.user.web.UserWeb; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +public class DesignerShapeRelationCache extends Cache { + + // 同步事件名称 + public static final String ACTION_DELETE = "delete"; + public static final String ACTION_UPDATE = "update"; + public static final String ACTION_UPDATE_RELATION = "updateRelation"; + + public DesignerShapeRelationCache(CachePluginProfile configuration) { + super(configuration); + registeIndex(DesignerShapeRelationCacheIndex1.class, new DesignerShapeRelationCacheIndex1()); // key:fileId_shapeId + registeIndex(DesignerShapeRelationCacheIndex2.class, new DesignerShapeRelationCacheIndex2()); // key:relationFileId_relationShapeId + registeIndex(DesignerShapeRelationCacheIndex3.class, new DesignerShapeRelationCacheIndex3()); // key:fileId_shapeId_attrId + registeIndex(DesignerShapeRelationCacheIndex4.class, new DesignerShapeRelationCacheIndex4()); // key:fileId_attrId + registeIndex(DesignerShapeRelationCacheIndex5.class, new DesignerShapeRelationCacheIndex5()); // key:fileId_relationShapeId_attrId + registeReplicateActionListener(new DeleteAction()); + registeReplicateActionListener(new UpdateAction()); + registeReplicateActionListener(new UpdateRelationAction()); + } + + + /** + * 删除缓存 + * + */ + private static class DeleteAction implements ReplicateActionListener { + + @Override + public void onReplicate(Object param) { + JSONObject object = JSONObject.parseObject(param.toString()); + String uuid = object.getString("uuid"); + String deleteMapStr = object.getString("deleteMap"); + Map deleteMap = JSONObject.parseObject((String)deleteMapStr, Map.class); + for (String shapeId : deleteMap.keySet()) { + Iterator iter2 = DesignerShapeRelationCache.getByShapeId(uuid, shapeId); + while (iter2.hasNext()) { + DesignerShapeRelationModel model = (DesignerShapeRelationModel) iter2.next(); + DesignerShapeRelationCache.getCache().remove(model.getId(), false); + // System.out.println("[被通知]删除【shapeId】本地缓存:" + JSON.toJSONString(model)); + } + Iterator iter = DesignerShapeRelationCache.getByRelationShapeId(uuid, shapeId); + while (iter.hasNext()) { + DesignerShapeRelationModel model = (DesignerShapeRelationModel) iter.next(); + DesignerShapeRelationCache.getCache().remove(model.getId(), false); + // System.out.println("[被通知]删除【RelationShapeId】本地缓存:" + JSON.toJSONString(model)); + } + } + } + + @Override + public String getName() { + return ACTION_DELETE; + } + } + + /** + * 更新缓存 + * + */ + private static class UpdateAction implements ReplicateActionListener { + + @Override + public void onReplicate(Object param) { + JSONObject object = JSONObject.parseObject(param.toString()); + String uuid = object.getString("uuid"); + String updateMapStr = object.getString("updateMap"); + Map updateMap = JSONObject.parseObject((String)updateMapStr, Map.class); + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + for (String shapeId : updateMap.keySet()) { + List list = dao.query(uuid, shapeId, null, null, null); + if (list != null && list.size() > 0) { + for (DesignerShapeRelationModel model: list) { + model.setShapeText(updateMap.get(shapeId)); + // 只更新本地节点缓存 + DesignerShapeRelationCache.getCache().put(model.getId(), model, false); + // System.out.println("[被通知]更新【shapeId】本地缓存:" + JSON.toJSONString(model)); + } + } + } + } + + @Override + public String getName() { + return ACTION_UPDATE; + } + } + + /** + * 更新被动关联数据 + * @author sunlh + * + */ + private static class UpdateRelationAction implements ReplicateActionListener { + + @Override + public void onReplicate(Object param) { + JSONObject object = JSONObject.parseObject(param.toString()); + String uuid = object.getString("uuid"); + String updateMapStr = object.getString("updateMap"); + Map updateMap = JSONObject.parseObject((String)updateMapStr, Map.class); + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + for (String shapeId : updateMap.keySet()) { + List list = dao.query(null, null, null, uuid, shapeId); + if (list != null && list.size() > 0) { + for (DesignerShapeRelationModel model: list ) { + model.setRelationShapeText(updateMap.get(shapeId)); + // 只更新本地缓存 + DesignerShapeRelationCache.getCache().put(model.getId(), model, false); + // System.out.println("[被通知]更新【RelationShapeId】本地缓存:" + JSON.toJSONString(model)); + } + } + } + } + + @Override + public String getName() { + return ACTION_UPDATE_RELATION; + } + } + + + /** + * 初始化缓存的回调方法 + */ + @Override + protected void load() { + load(this); + } + + protected void load(Cache t) { + List _list = new DesignerShapeRelationDao().query().list(); + if (_list != null) { + for (DesignerShapeRelationModel model : _list) { + t.put(model.getId(), model, false); + } + } + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE图形关联对象 [" + ((_list == null) ? 0 : _list.size()) + "个]"); + } + + public static DesignerShapeRelationCache getCache() { + return (DesignerShapeRelationCache) CacheManager.getCache(DesignerShapeRelationCache.class); + } + + /** + * 增加一个对象 + * + * @param model + */ + public static void putModel(DesignerShapeRelationModel model) { + getCache().put(model.getId(), model); + } + + /** + * 删除一个对象 + * + * @param id + */ + public static void removeById(String id) { + getCache().remove(id); + } + + /** + * 根据shapeId获取主动关联信息 + * + * @param fileId + * @param shapeId + * @return + */ + public static Iterator getByShapeId(String fileId, String shapeId) { + return getCache().getByIndex(DesignerShapeRelationCacheIndex1.class, fileId + "_" + shapeId); + } + + /** + * 根据shapeId获取主动关联信息 + * + * @param fileId + * @param shapeId + * @return + */ + public static List getListByShapeId(String fileId, String shapeId) { + return Cache.iteratorToList(getCache().getByIndex(DesignerShapeRelationCacheIndex1.class, fileId + "_" + shapeId)); + } + + /** + * 根据shapeId获取被动关联的关联信息 + * + * @param relationFileId + * @param relationShapeId + * @return + */ + public static Iterator getByRelationShapeId(String relationFileId, String relationShapeId) { + return getCache().getByIndex(DesignerShapeRelationCacheIndex2.class, relationFileId + "_" + relationShapeId); + } + + /** + * 根据shapeId获取被动关联的关联信息 + * + * @param relationFileId + * @param relationShapeId + * @return + */ + public static List getListByRelationShapeId(String relationFileId, String relationShapeId) { + return Cache.iteratorToList(getCache().getByIndex(DesignerShapeRelationCacheIndex2.class, relationFileId + "_" + relationShapeId)); + } + + /** + * 根据attrId获取主动关联的关联信息 + * + * @param fileId + * @param shapeId + * @param attrId + * @return + */ + public static Iterator getByAttrId(String fileId, String shapeId, String attrId) { + return getCache().getByIndex(DesignerShapeRelationCacheIndex3.class, fileId + "_" + shapeId + "_" + attrId); + } + + /** + * 根据attrId获取主动关联的关联信息 + * + * @param fileId + * @param shapeId + * @param attrId + * @return + */ + public static List getListByAttrId(String fileId, String shapeId, String attrId) { + return Cache.iteratorToList(getCache().getByIndex(DesignerShapeRelationCacheIndex3.class, fileId + "_" + shapeId + "_" + attrId)); + } + /** + * 根据fileId 和attrId 获取主动关联的关联信息 + * @param fileId + * @param attrId + * @return + */ + public static List getByFileId(String fileId, String attrId) { + return Cache.iteratorToList(getCache().getByIndex(DesignerShapeRelationCacheIndex4.class, fileId + "_" + attrId)); + } + + /** + * 根据fileId,attrId,relationShapeId获取数据 + * + * @param fileId + * @param attrId + * @param relationShapeId + * @return + */ + public static List getListByFileIdAndAttrIdAndRelationShapeId(String fileId, String attrId, String relationShapeId) { + return Cache.iteratorToList(getCache().getByIndex(DesignerShapeRelationCacheIndex5.class, fileId + "_" + attrId + "_" + relationShapeId)); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex1.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex1.java new file mode 100644 index 00000000..9c90796d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex1.java @@ -0,0 +1,18 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; + +public class DesignerShapeRelationCacheIndex1 extends ListValueIndex { + + /** + * 查询主动关联的关联信息 + */ + @Override + public String key(DesignerShapeRelationModel t) { + String shapeId = t.getShapeId(); + shapeId = shapeId == null ? "" : shapeId; + return t.getFileId() + "_" + shapeId; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex2.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex2.java new file mode 100644 index 00000000..e1c82f18 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex2.java @@ -0,0 +1,20 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; + +public class DesignerShapeRelationCacheIndex2 extends ListValueIndex { + + /** + * 查询被动关联的关联信息 + */ + @Override + public String key(DesignerShapeRelationModel t) { + String relationShapeId = t.getRelationShapeId(); + if (relationShapeId == null) { + relationShapeId = ""; + } + return t.getRelationFileId() + "_" + relationShapeId; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex3.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex3.java new file mode 100644 index 00000000..b59dedbd --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex3.java @@ -0,0 +1,23 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; + +public class DesignerShapeRelationCacheIndex3 extends ListValueIndex { + + /** + * 查询主动关联的关联信息 + */ + @Override + public String key(DesignerShapeRelationModel t) { + String shapeId = t.getShapeId(); + String attrId = t.getAttrId(); + if (shapeId == null) { + shapeId = ""; + } + if (attrId == null) { + attrId = ""; + } + return t.getFileId() + "_" + shapeId + "_" + attrId; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex4.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex4.java new file mode 100644 index 00000000..b75ffb78 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex4.java @@ -0,0 +1,18 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; + +public class DesignerShapeRelationCacheIndex4 extends ListValueIndex { + + @Override + public String key(DesignerShapeRelationModel t) { + String attrId = t.getAttrId(); + if (attrId == null) { + attrId = ""; + } + return t.getFileId() + "_" + attrId; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex5.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex5.java new file mode 100644 index 00000000..f1fb628f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/cache/DesignerShapeRelationCacheIndex5.java @@ -0,0 +1,23 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache; + +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.bpms.commons.cache.ListValueIndex; + +public class DesignerShapeRelationCacheIndex5 extends ListValueIndex { + + /** + * 查询主动关联的关联信息 + */ + @Override + public String key(DesignerShapeRelationModel t) { + String relationShapeId = t.getRelationShapeId(); + String attrId = t.getAttrId(); + if (relationShapeId == null) { + relationShapeId = ""; + } + if (attrId == null) { + attrId = ""; + } + return t.getFileId() + "_" + attrId + "_" + relationShapeId; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/dao/DesignerShapeRelationDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/dao/DesignerShapeRelationDao.java new file mode 100644 index 00000000..3506ba87 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/dao/DesignerShapeRelationDao.java @@ -0,0 +1,902 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.BatchPreparedStatementSetter; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.exception.AWSDataAccessException; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + + +public class DesignerShapeRelationDao extends DaoObject { + + @Override + public String entityName() { + return "APP_ACT_COE_PAL_SHAPE_RLAT"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public DesignerShapeRelationModel mapRow(ResultSet rset, int rowNum) throws SQLException { + DesignerShapeRelationModel model = new DesignerShapeRelationModel(); + try { + model.setId(rset.getString("ID")); + model.setFileId(rset.getString("FILEID")); + model.setShapeId(rset.getString("SHAPEID") == null ? "" : rset.getString("SHAPEID")); + model.setShapeText(rset.getString("SHAPETEXT") == null ? "" : rset.getString("SHAPETEXT")); + model.setAttrId(rset.getString("ATTRID") == null ? "" : rset.getString("ATTRID")); + model.setRelationFileId(rset.getString("RELATIONFILEID")); + model.setRelationShapeId(rset.getString("RELATIONSHAPEID") == null ? "" : rset.getString("RELATIONSHAPEID")); + model.setRelationShapeText(rset.getString("RELATIONSHAPETEXT") == null ? "" : rset.getString("RELATIONSHAPETEXT")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + + } + + @Override + public int insert(DesignerShapeRelationModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) { + model.setId(UUIDGener.getUUID()); + } + + String sql = "INSERT INTO " + entityName() + "(ID, FILEID, SHAPEID, SHAPETEXT, ATTRID, RELATIONFILEID, RELATIONSHAPEID, RELATIONSHAPETEXT)" + + "VALUES(:ID, :FILEID, :SHAPEID, :SHAPETEXT, :ATTRID, :RELATIONFILEID, :RELATIONSHAPEID, :RELATIONSHAPETEXT)"; + Map paraMap = new HashMap<>(); + paraMap.put("ID", model.getId()); + paraMap.put("FILEID", model.getFileId()); + paraMap.put("SHAPEID", model.getShapeId() == null ? "" : model.getShapeId()); + paraMap.put("SHAPETEXT", model.getShapeText() == null ? "" : model.getShapeText()); + paraMap.put("ATTRID", model.getAttrId() == null ? "" : model.getAttrId()); + paraMap.put("RELATIONFILEID", model.getRelationFileId()); + paraMap.put("RELATIONSHAPEID", model.getRelationShapeId() == null ? "" : model.getRelationShapeId()); + paraMap.put("RELATIONSHAPETEXT", model.getRelationShapeText() == null ? "" : model.getRelationShapeText()); + + int r = DBSql.update(sql, paraMap); + if (r > 0) { + DesignerShapeRelationCache.putModel(model); + } + return r; + } + + public boolean barchInsert(List list) { + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + String sql = "INSERT INTO " + entityName() + "(ID, FILEID, SHAPEID, SHAPETEXT, ATTRID, RELATIONFILEID, RELATIONSHAPEID, RELATIONSHAPETEXT)" + + "VALUES(?, ?, ?, ?, ?, ?, ?, ?)"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (int i = 0; i < list.size(); i++) { + DesignerShapeRelationModel model = list.get(i); + prest.setString(1, model.getId()); + prest.setString(2, model.getFileId()); + prest.setString(3, model.getShapeId() == null ? "" : model.getShapeId()); + prest.setString(4, model.getShapeText() == null ? "" : model.getShapeText()); + prest.setString(5, model.getAttrId() == null ? "" : model.getAttrId()); + prest.setString(6, model.getRelationFileId()); + prest.setString(7, model.getRelationShapeId() == null ? "" : model.getRelationShapeId()); + prest.setString(8, model.getRelationShapeText() == null ? "" : model.getRelationShapeText()); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + for (DesignerShapeRelationModel model : list) { + DesignerShapeRelationCache.putModel(model); + } + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, prest, null); + } + return false; + } + + public boolean batchInsert(Connection conn, PreparedStatement prest, List list) { + if (list == null || list.size() == 0) { + return false; + } + try { + String sql = "INSERT INTO " + entityName() + "(ID, FILEID, SHAPEID, SHAPETEXT, ATTRID, RELATIONFILEID, RELATIONSHAPEID, RELATIONSHAPETEXT)" + + "VALUES(?, ?, ?, ?, ?, ?, ?, ?)"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (int i = 0; i < list.size(); i++) { + DesignerShapeRelationModel model = list.get(i); + prest.setString(1, model.getId()); + prest.setString(2, model.getFileId()); + prest.setString(3, model.getShapeId() == null ? "" : model.getShapeId()); + prest.setString(4, model.getShapeText() == null ? "" : model.getShapeText()); + prest.setString(5, model.getAttrId() == null ? "" : model.getAttrId()); + prest.setString(6, model.getRelationFileId()); + prest.setString(7, model.getRelationShapeId() == null ? "" : model.getRelationShapeId()); + prest.setString(8, model.getRelationShapeText() == null ? "" : model.getRelationShapeText()); + prest.addBatch(); + } + prest.executeBatch(); + return true; + } catch (SQLException e) { + e.printStackTrace(); + } + return false; + } + + /** + * 刷新缓存 + * @param list + */ + public void refreshCache(List list) { + if (list == null) { + return; + } + for (DesignerShapeRelationModel model : list) { + DesignerShapeRelationCache.putModel(model); + } + } + + @Override + public int update(DesignerShapeRelationModel model) throws AWSDataAccessException { + String sql = "UPDATE " + entityName() + " SET FILEID = :FILEID, SHAPEID = :SHAPEID, SHAPETEXT = :SHAPETEXT, ATTRID = :ATTRID, " + + "RELATIONFILEID = :RELATIONFILEID, RELATIONSHAPEID = :RELATIONSHAPEID, RELATIONSHAPETEXT = :RELATIONSHAPETEXT WHERE ID = :ID"; + Map paraMap = new HashMap<>(); + paraMap.put("ID", model.getId()); + paraMap.put("FILEID", model.getFileId()); + paraMap.put("SHAPEID", model.getShapeId() == null ? "" : model.getShapeId()); + paraMap.put("SHAPETEXT", model.getShapeText() == null ? "" : model.getShapeText()); + paraMap.put("ATTRID", model.getAttrId() == null ? "" : model.getAttrId()); + paraMap.put("RELATIONFILEID", model.getRelationFileId() == null ? "" : model.getRelationFileId()); + paraMap.put("RELATIONSHAPEID", model.getRelationShapeId() == null ? "" : model.getRelationShapeId()); + paraMap.put("RELATIONSHAPETEXT", model.getRelationShapeText() == null ? "" : model.getRelationShapeText()); + + int r = DBSql.update(sql, paraMap); + if (r > 0) { + DesignerShapeRelationCache.putModel(model); + } + return r; + } + + /** + * 关联图形修改文本后,修改关联信息 + * + * @param fileId + * @param shapeId + * @param shapeText + * @return + */ + public int updateByShapeId(String fileId, String shapeId, String shapeText) { + String sql = "UPDATE " + entityName() + " SET SHAPETEXT = ? WHERE FILEID = ? AND SHAPEID = ?"; + int r = DBSql.update(sql, new Object[]{ shapeText, fileId, shapeId}); + for (Iterator iter = DesignerShapeRelationCache.getCache().iterator(); iter.hasNext();) { + DesignerShapeRelationModel model = iter.next(); + if (fileId.equals(model.getFileId()) && shapeId.equals(model.getShapeId())) { + model.setShapeText(shapeText); + DesignerShapeRelationCache.putModel(model); + } + } + + return r; + } + + /** + * 被关联图形修改文本后,修改关联信息 + * + * @param relationFileId + * @param relationShapeId + * @param relatinShapeText + * @return + */ + public int updateByRelationShapeId(String relationFileId, String relationShapeId, String relatinShapeText) { + String sql = "UPDATE " + entityName() + " SET RELATIONSHAPETEXT = ? WHERE RELATIONFILEID = ? AND RELATIONSHAPEID = ?"; + int r = DBSql.update(sql, new Object[]{ relatinShapeText, relationFileId, relationShapeId}); + for (Iterator iter = DesignerShapeRelationCache.getCache().iterator(); iter.hasNext();) { + DesignerShapeRelationModel model = iter.next(); + if (model != null && relationFileId.equals(model.getRelationFileId()) && relationShapeId.equals(model.getRelationShapeId())) { + model.setRelationShapeText(relatinShapeText); + DesignerShapeRelationCache.putModel(model); + } + } + + return r; + } + + /** + * 根据Id删除数据 + * + * @param id + * @return + */ + public int deleteById(String id) { + String sql = "DELETE FROM " + entityName() + " WHERE ID = ?"; + int r = DBSql.update(sql, new Object[] { id }); + if (r > 0) { + DesignerShapeRelationCache.removeById(id); + } + return r; + } + + public int deleteByIds(List ids) { + StringBuilder removeIds = new StringBuilder(); + if (ids != null && ids.size() > 0) { + for (String id : ids) { + removeIds.append("'").append(id).append("',"); + } + } else { + return 0; + } + String removeId = removeIds.toString(); + if (removeId.length() > 0) { + removeId = removeId.substring(0, removeId.length() - 1); + } + String sql = "DELETE FROM " + entityName() + " WHERE ID IN(" + removeId + ")"; + int r = DBSql.update(sql); + if (r > 0) { + for (String id : ids) { + DesignerShapeRelationCache.removeById(id); + } + } + return r; + } + + /** + * 根据关联图形所属的文件的Id删除数据,删除文件时使用 + * + * @param fileId + * @return + */ + public int deleteByFileId(String fileId) { + String sql = "DELETE FROM " + entityName() + " WHERE FILEID = ?"; + int r = DBSql.update(sql, new Object[] { fileId}); + for (Iterator iter = DesignerShapeRelationCache.getCache().iterator(); iter.hasNext();) { + DesignerShapeRelationModel model = iter.next(); + if (fileId.equals(model.getFileId())) { + DesignerShapeRelationCache.removeById(model.getId()); + } + } + return r; + } + + /** + * 根据被关联图形所属的文件的Id删除数据,删除文件时使用 + * @param relationFileId + * @return + */ + public int deleteByRelationFileId(String relationFileId) { + String sql = "DELETE FROM " + entityName() + " WHERE RELATIONFILEID = ?"; + int r = DBSql.update(sql, new Object[] { relationFileId }); + for (Iterator iter = DesignerShapeRelationCache.getCache().iterator(); iter.hasNext();) { + DesignerShapeRelationModel model = iter.next(); + if (relationFileId.equals(model.getRelationFileId())) { + DesignerShapeRelationCache.removeById(model.getId()); + } + } + return r; + } + + /** + * 前置流程、后置流程中的流程内容被删除后,删除关联关系 + * 前置流程后置流程中relationShapeId存储的是流程的versionId + * @param relationShapeId + * @return + */ + public int deleteByRelationShapeId(String relationShapeId) { + String sql = "DELETE FROM " + entityName() + " WHERE RELATIONSHAPEID = ?"; + int r = DBSql.update(sql, new Object[] { relationShapeId}); + + for (Iterator iter = DesignerShapeRelationCache.getCache().iterator(); iter.hasNext();) { + DesignerShapeRelationModel model = iter.next(); + if (relationShapeId.equals(model.getRelationShapeId())) { + DesignerShapeRelationCache.removeById(model.getId()); + } + } + return r; + } + + + /** + * 根据关联图形(或被关联图形)的Id删除数据,删除图形时使用 + * + * @param fileId + * @param shapeId + * @return + */ + public int deleteByShapeId(String fileId, String shapeId) { + String sql = "DELETE FROM " + entityName() + " WHERE (FILEID = ? AND SHAPEID = ?) OR (RELATIONFILEID = ? AND RELATIONSHAPEID = ?)"; + int r = DBSql.update(sql, new Object[] { fileId, shapeId, fileId, shapeId }); + + for (Iterator iter = DesignerShapeRelationCache.getCache().iterator(); iter.hasNext();) { + DesignerShapeRelationModel model = iter.next(); + if (fileId.equals(model.getFileId()) && shapeId.equals(model.getShapeId())) { + DesignerShapeRelationCache.removeById(model.getId()); + } else if (fileId.equals(model.getRelationFileId()) && shapeId.equals(model.getRelationShapeId())) { + DesignerShapeRelationCache.removeById(model.getId()); + } + } + + return r; + } + + /** + * 根据关联图形属性的Id删除数据 + * + * @param fileId + * @param shapeId + * @return + */ + public int deleteByAttrId(String fileId, String shapeId, String attrId) { + String sql = "DELETE FROM " + entityName() + " WHERE FILEID = :fileId AND ATTRID = :attrId"; + Map param = new HashMap(); + param.put("fileId", fileId); + param.put("attrId", attrId); + if (!UtilString.isEmpty(shapeId)) { + sql += " AND SHAPEID = :shapeId"; + param.put("shapeId", shapeId); + } else { + sql += " AND (SHAPEID IS NULL OR SHAPEID = '') "; + } + int r = DBSql.update(sql, param); + + Iterator iter = DesignerShapeRelationCache.getByAttrId(fileId, shapeId, attrId); + List ids = new ArrayList(); + while (iter.hasNext()) { + DesignerShapeRelationModel model = iter.next(); + if (fileId.equals(model.getFileId()) && attrId.equals(model.getAttrId())) { + if (UtilString.isEmpty(shapeId)) { + if (model.getShapeId() == null || "".equals(model.getShapeId())) { + //DesignerShapeRelationCache.removeById(model.getId()); + ids.add(model.getId()); + } + } else if (shapeId.equals(model.getShapeId())) { + //DesignerShapeRelationCache.removeById(model.getId()); + ids.add(model.getId()); + } + } + } + for (int i = 0, len = ids.size(); i < len; i++) { + DesignerShapeRelationCache.removeById(ids.get(i)); + } + return r; + } + /** + * 批量删除 + * @param list + * @return + */ + public int[] batchDelete(final List> list) { + Connection conn = DBSql.open(); + int[] resultNum = null; + try { + conn.setAutoCommit(false); + String sql = "DELETE FROM " + entityName() + " WHERE FILEID = ? AND ATTRID = ? AND SHAPEID = ? "; + resultNum = DBSql.batch(conn, sql, new BatchPreparedStatementSetter() { + @Override + public int getBatchSize() { + return list.size(); + } + @Override + public void setValues(PreparedStatement prest, int paramInt) + throws SQLException { + Map map = list.get(paramInt); + prest.setString(1, map.get("fileId")); + prest.setString(2, map.get("attrId")); + prest.setString(3, map.get("shapeId")); + } + + }); + conn.commit(); + if (list != null && list.size() > 0) { + for (Map map : list) { + String fileId = map.get("fileId"); + String shapeId = map.get("shapeId"); + String attrId = map.get("attrId"); + Iterator iter = DesignerShapeRelationCache.getByAttrId(fileId, shapeId, attrId); + List ids = new ArrayList(); + while (iter.hasNext()) { + DesignerShapeRelationModel model = iter.next(); + if (fileId.equals(model.getFileId()) && attrId.equals(model.getAttrId())) { + if (UtilString.isEmpty(shapeId)) { + if (model.getShapeId() == null || "".equals(model.getShapeId())) { + ids.add(model.getId()); + } + } else if (shapeId.equals(model.getShapeId())) { + ids.add(model.getId()); + } + } + } + for (int i = 0, len = ids.size(); i < len; i++) { + DesignerShapeRelationCache.removeById(ids.get(i)); + } + } + } + + return resultNum; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn); + } + return resultNum; + } + /** + * 查询图形A与文件B的关联信息 + * + * @param relationFileId 被动关联文件Id + * @param shapeId 主动关联图形Id + * @param attrId 主动关联图形属性Id(没有为null) + * @return + */ + public List getModelListByRelationFileId(String relationFileId, String shapeId, String attrId) { + StringBuilder sql = new StringBuilder("SELECT * FROM " + entityName() + " WHERE SHAPEID=? AND RELATIONFILEID=?"); + if (attrId != null && !"".equals(attrId)) { + sql.append(" AND ATTRID=?"); + return DBSql.query(sql.toString(), rowMapper(), new Object[]{ shapeId, relationFileId, attrId }); + } else { + return DBSql.query(sql.toString(), rowMapper(), new Object[]{ shapeId, relationFileId }); + } + } + + /** + * 查询图形A与文件B的关联信息 + * + * @param fileId 主动关联文件Id + * @param relationShapeId 被动关联图形Id + * @return + */ + public List getModelListByRelationShapeId(String fileId, String relationShapeId) { + StringBuilder sql = new StringBuilder("SELECT * FROM " + entityName() + " WHERE RELATIONSHAPEID=? AND FILEID=?"); + return DBSql.query(sql.toString(), rowMapper(), new Object[]{ relationShapeId, fileId }); + } + + /** + * 查询图形的所有被动关联信息 + * + * @param relationShapeId + * @return + */ + public List getModelListByRelationShapeId(String relationShapeId) { + String sql = "SELECT * FROM " + entityName() + " WHERE RELATIONSHAPEID=?"; + return DBSql.query(sql, rowMapper(), new Object[]{ relationShapeId }); + } + + /** + * 查询图形的所有主动关联信息 + * + * @param shapeId + * @return + */ + public List getModelListByShapeId(String shapeId) { + String sql = "SELECT * FROM " + entityName() + " WHERE SHAPEID=?"; + return DBSql.query(sql, rowMapper(), new Object[]{ shapeId }); + } + + /** + * 查询多个图形的所有主动关联信息 + * + * @param shapeIds + * @return + */ + public List getModelListByShapeIds(String shapeIds) { + String sql = "SELECT * FROM " + entityName() + " WHERE SHAPEID in (" + shapeIds + ")"; + return DBSql.query(sql, rowMapper()); + } + + /** + * 查询 文件所有图形的所有主动关联信息 + * + * @param fileId + * @return + */ + public List getModelListByFileId(String fileId) { + String sql = "SELECT * FROM " + entityName() + " WHERE FILEID=?"; + return DBSql.query(sql, rowMapper(), new Object[]{ fileId }); + } + + /** + * 根据文件图形和被关联图形查询关联信息 + * @param fileId + * @param shapeId + * @param relationShapeIds + * @return + */ + public List getModelListByShapeIdAndRelationShapeId(String fileId, String shapeId, String relationShapeIds, String relationFileIds) { + StringBuilder sql = new StringBuilder("SELECT * FROM " + entityName() + " WHERE "); + Map param = new HashMap(); + if (!UtilString.isEmpty(fileId)) { + sql.append(" FILEID=:fileId AND"); + param.put("fileId", fileId); + } + if (!UtilString.isEmpty(shapeId)) { + sql.append(" SHAPEID=:shapeId"); + param.put("shapeId", shapeId); + } else { + sql.append(" (SHAPEID=:shapeId OR SHAPEID IS NULL)"); + param.put("shapeId", ""); + } + if (relationShapeIds != null && !"".equals(relationShapeIds)) { + relationShapeIds = relationShapeIds.replaceAll(",", "','"); + sql.append(" AND RELATIONSHAPEID IN ('").append(relationShapeIds).append("')"); + } + if (relationFileIds != null && !"".equals(relationFileIds)) { + relationFileIds = relationFileIds.replaceAll(",", "','"); + sql.append(" AND RELATIONFILEID IN ('").append(relationFileIds).append("')"); + } + return DBSql.query(sql.toString(), param, rowMapper()); + } + + /** + * 根据文件图形和被关联图形查询关联信息 + * @deprecated 版本创建不会改变节点ID,使用shapeId和relationShapeIds会出现查询数据错误问题 + * @param shapeId + * @param relationShapeIds + * @return + */ + public List getModelListByShapeIdAndRelationShapeId(String shapeId, String relationShapeIds) { + StringBuilder sql = new StringBuilder("SELECT * FROM " + entityName() + " WHERE "); + Map param = new HashMap(); + if (!UtilString.isEmpty(shapeId)) { + sql.append(" SHAPEID=:shapeId"); + param.put("shapeId", shapeId); + } else { + sql.append(" (SHAPEID=:shapeId OR SHAPEID IS NULL)"); + param.put("shapeId", ""); + } + if (relationShapeIds != null && !"".equals(relationShapeIds)) { + relationShapeIds = relationShapeIds.replaceAll(",", "','"); + sql.append(" AND RELATIONSHAPEID IN ('").append(relationShapeIds).append("')"); + } + return DBSql.query(sql.toString(), param, rowMapper()); + } + + /** + * 拼接条件查询 + * + * @param fileId + * @param shapeId + * @param attrId + * @param relationFileId + * @param relationShapeId + * @return + * @author zhangming + */ + public List query(String fileId, String shapeId, String attrId, String relationFileId, String relationShapeId) { + StringBuilder sql = new StringBuilder("SELECT * FROM " + entityName() + " WHERE 1=1"); + List args = new ArrayList(); + if (fileId != null && !"".equals(fileId)) { + sql.append(" AND FILEID=?"); + args.add(fileId); + } + if (shapeId != null) { + sql.append(" AND SHAPEID=?"); + args.add(shapeId); + } + if (attrId != null && !"".equals(attrId)) { + sql.append(" AND ATTRID=?"); + args.add(attrId); + } + if (relationFileId != null && !"".equals(relationFileId)) { + sql.append(" AND RELATIONFILEID=?"); + args.add(relationFileId); + } + if (relationShapeId != null && !"".equals(relationShapeId)) { + sql.append(" AND RELATIONSHAPEID=?"); + args.add(relationShapeId); + } + return DBSql.query(sql.toString(), rowMapper(), args.toArray()); + } + + /** + * 批量更新关联图形的文本信息 + * @param updateMap key:shapeId value:text + */ + public void batchUpdateByShapeId(String uuid, Map updateMap) { + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + String sql = "UPDATE " + entityName() + " SET SHAPETEXT = ? WHERE FILEID = ? AND SHAPEID = ?"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (String shapeId : updateMap.keySet()) { + prest.setString(1, updateMap.get(shapeId)); + prest.setString(2, uuid); + prest.setString(3, shapeId); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + // 更新本地缓存 + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + for (String shapeId : updateMap.keySet()) { + List list = dao.query(uuid, shapeId, null, null, null); + if (list != null && list.size() > 0) { + for (DesignerShapeRelationModel model: list) { + model.setShapeText(updateMap.get(shapeId)); + // 只更新本地节点缓存 + DesignerShapeRelationCache.getCache().put(model.getId(), model, false); + // System.out.println("更新【shapeId】本地缓存:" + JSON.toJSONString(model)); + } + } + } + // 更新其他集群节点缓存 + JSONObject object = new JSONObject(); + object.put("uuid", uuid); + object.put("updateMap", JSONObject.toJSONString(updateMap)); + DesignerShapeRelationCache.getCache().replicate(DesignerShapeRelationCache.ACTION_UPDATE, object); + } catch (SQLException e) { + try { + conn.rollback(); + DesignerShapeRelationCache.getCache().reload(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + try { + if (prest != null) { + prest.close(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + DBSql.close(conn, prest, null); + } + } + + /** + * 批量更新被关联图形的文本信息 + * @param updateMap key:shapeId value:text + */ + public void batchUpdateByRelationShapeId(String uuid, Map updateMap) { + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + String sql = "UPDATE " + entityName() + " SET RELATIONSHAPETEXT = ? WHERE RELATIONFILEID = ? AND RELATIONSHAPEID = ?"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (String shapeId : updateMap.keySet()) { + prest.setString(1, updateMap.get(shapeId)); + prest.setString(2, uuid); + prest.setString(3, shapeId); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + // 更新缓存 + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + for (String shapeId : updateMap.keySet()) { + List list = dao.query(null, null, null, uuid, shapeId); + if (list != null && list.size() > 0) { + for (DesignerShapeRelationModel model: list ) { + model.setRelationShapeText(updateMap.get(shapeId)); + // 只更新本地缓存 + DesignerShapeRelationCache.getCache().put(model.getId(), model, false); + // System.out.println("更新【RelationShapeId】本地缓存:" + JSON.toJSONString(model)); + } + } + } + // 更新其他集群节点缓存 + JSONObject object = new JSONObject(); + object.put("uuid", uuid); + object.put("updateMap", JSONObject.toJSONString(updateMap)); + DesignerShapeRelationCache.getCache().replicate(DesignerShapeRelationCache.ACTION_UPDATE_RELATION, object); + } catch (SQLException e) { + try { + conn.rollback(); + DesignerShapeRelationCache.getCache().reload(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + try { + if (prest != null) { + prest.close(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + DBSql.close(conn, prest, null); + } + } + + /** + * 批量删除主动关联的信息 + * @param uuid + * @param deleteMap + */ + public void batchDeleteByShapeId(String uuid, Map deleteMap) { + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + String sql = "DELETE FROM " + entityName() + " WHERE (FILEID = ? AND SHAPEID = ?) OR (RELATIONFILEID = ? AND RELATIONSHAPEID = ?)"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (String shapeId : deleteMap.keySet()) { + prest.setString(1, uuid); + prest.setString(2, shapeId); + prest.setString(3, uuid); + prest.setString(4, shapeId); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + // 更新本地缓存 + for (String shapeId : deleteMap.keySet()) { + Iterator iter2 = DesignerShapeRelationCache.getByShapeId(uuid, shapeId); + while (iter2.hasNext()) { + DesignerShapeRelationModel model = (DesignerShapeRelationModel) iter2.next(); + DesignerShapeRelationCache.getCache().remove(model.getId(), false); + // System.out.println("删除【shapeId】本地缓存:" + JSON.toJSONString(model)); + } + Iterator iter = DesignerShapeRelationCache.getByRelationShapeId(uuid, shapeId); + while (iter.hasNext()) { + DesignerShapeRelationModel model = (DesignerShapeRelationModel) iter.next(); + DesignerShapeRelationCache.getCache().remove(model.getId(), false); + // System.out.println("删除【RelationShapeId】本地缓存:" + JSON.toJSONString(model)); + } + } + // 更新集群其他节点数据缓存 + // 更新其他集群节点缓存 + JSONObject object = new JSONObject(); + object.put("uuid", uuid); + object.put("deleteMap", JSONObject.toJSONString(deleteMap)); + DesignerShapeRelationCache.getCache().replicate(DesignerShapeRelationCache.ACTION_DELETE, object); + } catch (SQLException e) { + try { + conn.rollback(); + DesignerShapeRelationCache.getCache().reload(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + try { + if (prest != null) { + prest.close(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + DBSql.close(conn, prest, null); + } + } + + /** + * 删除,通过外部进行提交,缓存需要单独处理 + * + * @param id + */ + public int deleteById(Connection conn, PreparedStatement prest, String id) { + if (UtilString.isEmpty(id)) { + return -1; + } + String sql = "DELETE FROM " + entityName() + " WHERE ID=?"; + try { + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + prest.setString(1, id); + return prest.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + } + return -1; + } + + /** + * 删除缓存 + * @param list id集合 + */ + public void removeCacheByIds(List list) { + if (list != null) { + for (String id : list) { + DesignerShapeRelationCache.getCache().remove(id); + } + } + } + + /** + * 批量更新被关联图形的字段信息 + * @param list list 完整的Model信息,更新完DB后会直接用list更新缓存 + */ + public boolean batchUpdateRelationInfoById(List list) { + if (list == null || list.size() == 0) { + return true; + } + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + String sql = "UPDATE " + entityName() + " SET RELATIONFILEID = ? , RELATIONSHAPEID = ? , RELATIONSHAPETEXT = ? WHERE ID = ?"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (DesignerShapeRelationModel model : list) { + prest.setString(1, model.getRelationFileId()); + prest.setString(2, model.getRelationShapeId()); + prest.setString(3, model.getRelationShapeText()); + prest.setString(4, model.getId()); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + // 更新缓存 + for (DesignerShapeRelationModel model : list) { + // 只更新本地缓存 + DesignerShapeRelationCache.getCache().put(model.getId(), model, true); + } + } catch (SQLException e) { + try { + conn.rollback(); + DesignerShapeRelationCache.getCache().reload(); + return false; + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + try { + if (prest != null) { + prest.close(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + DBSql.close(conn, prest, null); + } + return true; + } + + /** + * 根据资产库和属性id查询 + */ + public List queryByWsIdAndAttrId(String wsId, String attrId) { + StringBuilder sql = new StringBuilder("SELECT * FROM " + entityName() + " d WHERE EXISTS (SELECT 1 FROM APP_ACT_COE_PAL_REPOSITORY r WHERE r.WSID = ? AND r.ID = d.FILEID) "); + List args = new ArrayList(); + args.add(wsId); + if (attrId != null && !"".equals(attrId)) { + sql.append(" AND d.ATTRID=?"); + args.add(attrId); + } + return DBSql.query(sql.toString(), rowMapper(), args.toArray()); + } + + /** + * 根据资产库和属性id查询 + */ + public int batchUpdateAttrByWsIdAndAttrId(String wsId, String oldAttrId, String attrId) { + String sql = "UPDATE " + entityName() + " d SET ATTRID = :ATTRID WHERE EXISTS (SELECT 1 FROM APP_ACT_COE_PAL_REPOSITORY r WHERE r.WSID = :WSID AND r.ID = d.FILEID) AND d.ATTRID=:OLDATTRID"; + Map paraMap = new HashMap<>(); + paraMap.put("ATTRID", attrId); + paraMap.put("WSID", wsId); + paraMap.put("OLDATTRID", oldAttrId); + int r = DBSql.update(sql, paraMap); + return r; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/event/ShapeRelationBasicEventSource.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/event/ShapeRelationBasicEventSource.java new file mode 100644 index 00000000..949fcee6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/event/ShapeRelationBasicEventSource.java @@ -0,0 +1,70 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.event; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.ShapeRelationListenEvent; + +/** + * 基本事件源 + * @author zhangming + * + */ +public class ShapeRelationBasicEventSource implements Runnable{ + + private ShapeRelationEventListener listener; + private Thread sourceThread; + private boolean active = false; + private String messageQueueKey; + private String listenTime; + private List events = new ArrayList(); + private String dateFormat; + + public ShapeRelationBasicEventSource(Map params) { + this.messageQueueKey = params.get("subject"); + this.listenTime = params.get("listenTime"); +// if(Validator.isEmpty(listenTime)){ +// this.listenTime = String.valueOf(System.currentTimeMillis()); +// } + this.dateFormat = params.get("dateFormat"); + } + + public void addListener(ShapeRelationEventListener listener) { + this.listener = listener; + } + + public void run() { + while (active && events.size() == 0){ + //监听EventSource + /* List collaborationMessages = + * CoeListenCacheManager + * .getInstance().getCollaborationMessages(messageQueueKey, + * listenTime); if(collaborationMessages != null && + * collaborationMessages.size() > 0){ + * events.addAll(collaborationMessages); } */ + if(events.size() > 0){ + listener.send(events); + } + try { + if(active){ + Thread.sleep(200); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + public void start() { + sourceThread = new Thread(this); + sourceThread.setDaemon(true); + active = true; + sourceThread.start(); + } + + public void stop() { + active = false; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/event/ShapeRelationEventListener.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/event/ShapeRelationEventListener.java new file mode 100644 index 00000000..c3344de4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/event/ShapeRelationEventListener.java @@ -0,0 +1,88 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.event; + +import java.util.ArrayList; +import java.util.List; + +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.ShapeRelationListenEvent; + +/** + * 事件监听器 Http长链接的维持者 + * + * @author zhangming + * + */ +public class ShapeRelationEventListener { + + /** + * 监听器返回后,而事件源监听线程有可能仍处在最后一次循环中。 增加状态标识,防止事件源在监听器停止后,仍修改监听器事件队列 + */ + private boolean listening = true; + protected final List events = new ArrayList(); + private ShapeRelationBasicEventSource source; + + /** + * Add event for sending. + */ + public void send(ShapeRelationListenEvent e) { + source.stop(); + synchronized (events) { + if (listening) { + events.add(e); + events.notify(); + } + } + } + + /** + * Add event for sending. + */ + public void send(List es) { + source.stop(); + synchronized (events) { + if (listening) { + events.addAll(es); + events.notify(); + } + } + } + + /** + * 监听事件源 + * + * @return + */ + public List listen() { + source.start(); + synchronized (events) { + if (events.size() == 0) { + try { + events.wait(CoeDesignerConstant.REALTIME_LISTEN_TIME * 1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + stopListen(); + return events; + } + } + + /** + * 停止监听事件源变化 + */ + public void stopListen() { + listening = false; + source.stop(); + } + + /** + * 设置监听的事件源 + * + * @param source + */ + public void setSource(ShapeRelationBasicEventSource source) { + this.source = source; + this.source.addListener(this); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/manager/DesignerRelationShapeCacheManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/manager/DesignerRelationShapeCacheManager.java new file mode 100644 index 00000000..fb84a28c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/manager/DesignerRelationShapeCacheManager.java @@ -0,0 +1,172 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.manager; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.TimerTask; +import java.util.concurrent.ConcurrentHashMap; + +import com.alibaba.fastjson.JSONObject; + +/** + * + * 创建日期 2014-3-28 + * + * 该类主要针对图形作缓存用 + * + * @author wangyouhuai + */ + +public class DesignerRelationShapeCacheManager extends TimerTask{ + // 缓存不同用户复制粘贴操作的数据,以用户userid 如admin作为key来存储 + private final Map> shapeMap = new HashMap>(); + // 以文件id对文件中出现复制的图形进行缓存 + private volatile Map> eventMap = new ConcurrentHashMap>(); + // 存储每组图形的信息,以 组id为key存储 + private Map> shapeGroupMaps = new ConcurrentHashMap>(); + // 组id + private volatile String shapeGroupId; + // 用来存放已打文件的id,目的是对已打开的文件,作到实时同步,对 于没有打开的文件,可以另开线程去执行,加快页面响应速度 + private volatile Map uuidSet = new HashMap(); + + public Map getUuidSet() { + return uuidSet; + } + + public void setUuidSet(Map uuidSet) { + this.uuidSet = uuidSet; + } + + public String getShapeGroupId() { + return shapeGroupId; + } + + public void setShapeGroupId(String shapeGroupId) { + this.shapeGroupId = shapeGroupId; + } + + public Map> getShapeGroupMaps() { + return shapeGroupMaps; + } + + private static class Inner { + private final static DesignerRelationShapeCacheManager instance = new DesignerRelationShapeCacheManager(); + } + + public void setShapeGroupMaps(Map> shapeGroupMaps) { + this.shapeGroupMaps = shapeGroupMaps; + } + + private volatile boolean flag; + + public boolean isFlag() { + return flag; + } + + public void setFlag(boolean flag) { + this.flag = flag; + } + + public Map> getShapemap() { + return shapeMap; + } + + private Map relationShapeMap = new HashMap(); + + private DesignerRelationShapeCacheManager() { + initShapeMapInfo(); + } + + public Map> getEventMap() { + return eventMap; + } + + public void setEventMap(Map> eventMap) { + this.eventMap = eventMap; + } + + public Map getRelationShapeMap() { + return relationShapeMap; + } + + public void setRelationShapeMap(Map relationShapeMap) { + this.relationShapeMap = relationShapeMap; + } + + public static DesignerRelationShapeCacheManager getInstance() { + + return DesignerRelationShapeCacheManager.Inner.instance; + } + + /** + * 让线程处于等待 + */ + public void awaitRes(long time) { + synchronized (getInstance()) { + try { + getInstance().wait(time); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + /** + * 唤醒在等待的线程 + */ +// public void awakenAllThread() { +// synchronized (getInstance()) { +// getInstance().notifyAll(); +// // flag = true; +// } +// } + + private void initShapeMapInfo() { +// UtilFile util = new UtilFile(CoeDesignerConstant.SHAPE_MAP_FILE); +// String str = util.readStrUTF8(); +// if (str != null && str.length() > 0) { +// JSONObject jsonObj = JSONObject.fromObject(str); +// Iterator ite = jsonObj.keys(); +// while (ite.hasNext()) { +// String key = ite.next(); +// JSONArray shapeArr = jsonObj.getJSONArray(key); +// Set set = new HashSet(); +// for (int i = 0; i < shapeArr.size(); i++) { +// JSONObject jObj = shapeArr.getJSONObject(i); +// set.add(jObj); +// } +// if (set.size() > 0) { +// eventMap.put(key, set); +// } +// } +// } + } + + @Override + public void run() { + long currentTimeLong = System.currentTimeMillis(); + if(uuidSet.size() > 0) { + Iterator> iteratorUuid = uuidSet.entrySet().iterator(); + Set removeUuids = new HashSet(); + while (iteratorUuid.hasNext()) { + Map.Entry entry = iteratorUuid.next(); + long listenTimeLong = entry.getValue(); //文件的监听时间 + //如果监听时间超过45秒,说明文件已经被关闭,移除 + if ((currentTimeLong - listenTimeLong) / 1000 > 45) { + removeUuids.add(entry.getKey()); + } + } + if (!removeUuids.isEmpty()) { + for (String key : removeUuids) { + uuidSet.remove(key); + } + } + + } + + } + + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/manager/DesignerShapeCopyCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/manager/DesignerShapeCopyCache.java new file mode 100644 index 00000000..86dcc252 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/manager/DesignerShapeCopyCache.java @@ -0,0 +1,31 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.manager; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.sdk.local.SDK; + +import java.util.HashMap; + +/** + * 形状复制缓存 + */ +public class DesignerShapeCopyCache extends Cache> { + + public DesignerShapeCopyCache(CachePluginProfile profile) { + super(profile); + } + + @Override + protected void load() { + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE图形复制对象 [0个]"); + } + + public static DesignerShapeCopyCache getCache() { + return CacheManager.getCache(DesignerShapeCopyCache.class); + } + + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapeCopyModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapeCopyModel.java new file mode 100644 index 00000000..cae45e71 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapeCopyModel.java @@ -0,0 +1,175 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model; + +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; + +public class DesignerShapeCopyModel extends PlatformMetaModelBean { + /** + * 2014-4-2 + */ + private static final long serialVersionUID = 1L; + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_SHAPE_COPY"; + public static final String FIELD_SHAPE_ID = "ID"; + public static final String FIELD_SHAPE_MESSAGE = "SHAPEMESSAGE"; + public static final String FIELD_SHAPE_GROUPT_ID = "SHAPEGROUPTID"; + public static final String FIELD_SHAPE_NAME = "SHAPENAME"; + public static final String FIELD_SHAPE_CATEGORY_NAME = "SHAPECATEGORYNAME"; + public static final String FIELD_IS_COPY = "ISCOPY"; + public static final String FIELD_PAL_REPOSITORY_ID = "PALREPOSITORYID"; + public static final String FIELD_IS_DELETE = "ISDELETE"; + public static final String FIELD_SHAPE_TYPE = "SHAPETYPE"; + private String clinetId; // 客户端ID(JS随机生成) + private String userId; // 用户id + private String name; // 用户名 + private String subject; // 监听文件id + private String sid; // 监听sid + private String isCopy;// 是否是粘贴 + private String palRepositoryId;// 文件的id + private String isDelete = "N"; + private String shapeType; + private String id; + + public String getShapeType() { + return shapeType; + } + + public void setShapeType(String shapeType) { + this.shapeType = shapeType; + } + + public String getIsDelete() { + return isDelete; + } + + public void setIsDelete(String isDelete) { + this.isDelete = isDelete; + } + + public String getPalRepositoryId() { + return palRepositoryId; + } + + public void setPalRepositoryId(String palRepositoryId) { + this.palRepositoryId = palRepositoryId; + } + + public String getisCopy() { + return isCopy; + } + + public void setisCopy(String isCopy) { + this.isCopy = isCopy; + } + + public String getShapecategoryName() { + return shapecategoryName; + } + + public void setShapecategoryName(String shapecategoryName) { + this.shapecategoryName = shapecategoryName; + } + + private String listenTime; // 开始监听时间 + private int userNum; // 同一用户Id登录数(用户可多地登录) + private String shapeId; + private String shapeGroupId; + private String shapeMessage; + private String shapeName; + private String shapecategoryName; + + public String getShapeName() { + return shapeName; + } + + public void setShapeName(String shapeName) { + this.shapeName = shapeName; + } + + public String getShapeMessage() { + return shapeMessage; + } + + public void setShapeMessage(String shapeMessage) { + this.shapeMessage = shapeMessage; + } + + public String getClinetId() { + return clinetId; + } + + public void setClinetId(String clinetId) { + this.clinetId = clinetId; + } + + public String getShapeId() { + return shapeId; + } + + public void setShapeId(String shapeId) { + this.shapeId = shapeId; + } + + public String getShapeGroupId() { + return shapeGroupId; + } + + public void setShapeGroupId(String shapeGroupId) { + this.shapeGroupId = shapeGroupId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public String getSid() { + return sid; + } + + public void setSid(String sid) { + this.sid = sid; + } + + public String getListenTime() { + return listenTime; + } + + public void setListenTime(String listenTime) { + this.listenTime = listenTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public int getUserNum() { + return userNum; + } + + public void setUserNum(int userNum) { + this.userNum = userNum; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapeFileRelationModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapeFileRelationModel.java new file mode 100644 index 00000000..532eecc7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapeFileRelationModel.java @@ -0,0 +1,33 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model; + +public class DesignerShapeFileRelationModel { + public static final String FIELD_UUID = "ID"; + public static final String FIELD_SFILE_UUID = "FILEUUID"; + private String uuid; // 主键 + private String shapeId; // 形状自己的id + private String fileUUID; // 文件的Id + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getShapeId() { + return shapeId; + } + + public void setShapeId(String shapeId) { + this.shapeId = shapeId; + } + + public String getFileUUID() { + return fileUUID; + } + + public void setFileUUID(String fileUUID) { + this.fileUUID = fileUUID; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapeGroupModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapeGroupModel.java new file mode 100644 index 00000000..b9b905f0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapeGroupModel.java @@ -0,0 +1,6 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model; + +public class DesignerShapeGroupModel { + + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapePasteModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapePasteModel.java new file mode 100644 index 00000000..1d111a68 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapePasteModel.java @@ -0,0 +1,185 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model; + +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; + +public class DesignerShapePasteModel extends PlatformMetaModelBean { + /** + * @author wangyh + * 2014-4-2 + */ + private static final long serialVersionUID = 1L; + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_SHAPE_PASTE"; + public static final String FIELD_SHAPE_ID = "ID"; + public static final String FIELD_SHAPE_MESSAGE = "SHAPEMESSAGE"; + public static final String FIELD_SHAPE_GROUPT_ID = "SHAPEGROUPTID"; + public static final String FIELD_SHAPE_NAME = "SHAPENAME"; + public static final String FIELD_SHAPE_CATEGORY_NAME = "SHAPECATEGORYNAME"; + public static final String FIELD_IS_PASTE = "ISPASTE"; + public static final String FIELD_PAL_REPOSITORY_ID = "PALREPOSITORYID"; + public static final String FIELD_IS_DELETE = "ISDELETE"; + public static final String FIELD_SHAPE_TYPE = "SHAPETYPE"; + private String id; + private String clinetId; // 客户端ID(JS随机生成) + private String userId; // 用户id + private String name; // 用户名 + private String subject; // 监听文件id + private String sid; // 监听sid + private String isPaste;// 是否是粘贴 + private String palRepositoryId;// 文件的id + private String isDelete="N"; + private String shapeType; + private String shapeText; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShapeType() { + return shapeType; + } + + public void setShapeType(String shapeType) { + this.shapeType = shapeType; + } + + public String getIsDelete() { + return isDelete; + } + + public void setIsDelete(String isDelete) { + this.isDelete = isDelete; + } + + public String getPalRepositoryId() { + return palRepositoryId; + } + + public void setPalRepositoryId(String palRepositoryId) { + this.palRepositoryId = palRepositoryId; + } + + public String getIsPaste() { + return isPaste; + } + + public void setIsPaste(String isPaste) { + this.isPaste = isPaste; + } + + public String getShapecategoryName() { + return shapecategoryName; + } + + public void setShapecategoryName(String shapecategoryName) { + this.shapecategoryName = shapecategoryName; + } + + private String listenTime; // 开始监听时间 + private int userNum; // 同一用户Id登录数(用户可多地登录) + private String shapeId; + private String shapeGroupId; + private String shapeMessage; + private String shapeName; + private String shapecategoryName; + + public String getShapeName() { + return shapeName; + } + + public void setShapeName(String shapeName) { + this.shapeName = shapeName; + } + + public String getShapeMessage() { + return shapeMessage; + } + + public void setShapeMessage(String shapeMessage) { + this.shapeMessage = shapeMessage; + } + + public String getClinetId() { + return clinetId; + } + + public void setClinetId(String clinetId) { + this.clinetId = clinetId; + } + + public String getShapeId() { + return shapeId; + } + + public void setShapeId(String shapeId) { + this.shapeId = shapeId; + } + + public String getShapeGroupId() { + return shapeGroupId; + } + + public void setShapeGroupId(String shapeGroupId) { + this.shapeGroupId = shapeGroupId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public String getSid() { + return sid; + } + + public void setSid(String sid) { + this.sid = sid; + } + + public String getListenTime() { + return listenTime; + } + + public void setListenTime(String listenTime) { + this.listenTime = listenTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public int getUserNum() { + return userNum; + } + + public void setUserNum(int userNum) { + this.userNum = userNum; + } + + public String getShapeText() { + return shapeText; + } + + public void setShapeText(String shapeText) { + this.shapeText = shapeText; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapeRelationModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapeRelationModel.java new file mode 100644 index 00000000..1d3800b0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/DesignerShapeRelationModel.java @@ -0,0 +1,65 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +public class DesignerShapeRelationModel extends ModelBean { + private String id; // 主键 + private String fileId; //关联的流程文件Id + private String shapeId; //关联图形Id + private String shapeText; //关联图形文本 + private String attrId; //关联图形的关联属性 + private String relationFileId; //被关联图形所属的文件Id + private String relationShapeId; //被关联图形的Id + private String relationShapeText; //被关联图形的文本 + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getFileId() { + return fileId; + } + public void setFileId(String fileId) { + this.fileId = fileId; + } + public String getShapeId() { + return shapeId; + } + public void setShapeId(String shapeId) { + this.shapeId = shapeId; + } + public String getShapeText() { + return shapeText; + } + public void setShapeText(String shapeText) { + this.shapeText = shapeText; + } + public String getAttrId() { + return attrId; + } + public void setAttrId(String attrId) { + this.attrId = attrId; + } + public String getRelationFileId() { + return relationFileId; + } + public void setRelationFileId(String relationFileId) { + this.relationFileId = relationFileId; + } + public String getRelationShapeId() { + return relationShapeId; + } + public void setRelationShapeId(String relationShapeId) { + this.relationShapeId = relationShapeId; + } + public String getRelationShapeText() { + return relationShapeText; + } + public void setRelationShapeText(String relationShapeText) { + this.relationShapeText = relationShapeText; + } + + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/ShapeRelationListenClient.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/ShapeRelationListenClient.java new file mode 100644 index 00000000..e0bfa7f1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/ShapeRelationListenClient.java @@ -0,0 +1,61 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model; + +import java.util.Date; +/** + * 编辑状态用户信息 + * @author zhangming + * @since 20140320 + */ +public class ShapeRelationListenClient { + private String clinetId; //客户端ID(JS随机生成) + private String userId; //用户id + private String name; //用户名 + private String subject; //监听文件id + private String sid; //监听sid + private String listenTime; //开始监听时间 + private int userNum; //同一用户Id登录数(用户可多地登录) + + public String getClinetId() { + return clinetId; + } + public void setClinetId(String clinetId) { + this.clinetId = clinetId; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getSubject() { + return subject; + } + public void setSubject(String subject) { + this.subject = subject; + } + public String getSid() { + return sid; + } + public void setSid(String sid) { + this.sid = sid; + } + public String getListenTime() { + return listenTime; + } + public void setListenTime(String listenTime) { + this.listenTime = listenTime; + } + public String getUserId() { + return userId; + } + public void setUserId(String userId) { + this.userId = userId; + } + public int getUserNum() { + return userNum; + } + public void setUserNum(int userNum) { + this.userNum = userNum; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/ShapeRelationListenEvent.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/ShapeRelationListenEvent.java new file mode 100644 index 00000000..cdd72024 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/model/ShapeRelationListenEvent.java @@ -0,0 +1,85 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model; + +import java.util.Date; + +/** + * 文件编辑状态事件信息 + * + * @author zhangming + * @since 20140320 + */ +public class ShapeRelationListenEvent { + private String subject; // 文件id + private String time; // 事件发生时间 + private String action; // 事件action + private String messages; // 事件详细信息 + private String clientId; // 客户端ID(JS随机生成) + private String userId; // 用户ID + private String title; // 模型名称 + private String photoUrl; // 协作者用户头像(action=join) + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public String getAction() { + return action; + } + + public void setAction(String action) { + this.action = action; + } + + public String getMessages() { + return messages; + } + + public void setMessages(String messages) { + this.messages = messages; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getClientId() { + return clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getPhotoUrl() { + return photoUrl; + } + + public void setPhotoUrl(String photoUrl) { + this.photoUrl = photoUrl; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/web/DesignerRelationShapeWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/web/DesignerRelationShapeWeb.java new file mode 100644 index 00000000..ce2d9f51 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/relation/web/DesignerRelationShapeWeb.java @@ -0,0 +1,3396 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.relation.web; + +import java.io.File; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.CoeDesignerShapeAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.manager.DesignerShapeCopyCache; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessLevelWeb; +import com.actionsoft.apps.coe.pal.util.BpmOrgUtil; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.commons.security.ac.cache.AccessControlCache; +import com.actionsoft.bpms.commons.security.ac.constant.ACConst; +import com.actionsoft.bpms.commons.security.ac.model.AccessControlModel; +import com.actionsoft.bpms.org.cache.CompanyCache; +import com.actionsoft.bpms.org.cache.DepartmentCache; +import com.actionsoft.bpms.org.cache.RoleCache; +import com.actionsoft.bpms.org.cache.UserCache; +import com.actionsoft.bpms.org.model.*; +import com.actionsoft.bpms.org.web.CompanyWeb; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.*; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodJsonModel; +import com.actionsoft.apps.coe.pal.pal.method.util.PALMethodUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryPropertyCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.designer.manage.CoeDesignerAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.dao.DesignerShapeRelationDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.manager.DesignerRelationShapeCacheManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeCopyModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeFileRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapePasteModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.apps.coe.pal.pal.repository.model.CoeProcessLevelAutoBean; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryPropertyModel; +import com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil; +import com.actionsoft.apps.coe.pal.pal.ws.web.VersionUtil; +import com.actionsoft.apps.coe.pal.util.StringHandleUtil; +import com.actionsoft.apps.coe.pal.util.UtilMapSort; +import com.actionsoft.exception.AWSException; +import com.actionsoft.exception.AWSObjectNotFindException; +import com.actionsoft.i18n.I18nRes; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public class DesignerRelationShapeWeb extends ActionWeb { + private UserContext _uc; + + public DesignerRelationShapeWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + /** + * 复制时将不同用户复制的数据缓存到服务器上 + * + * @param userId 用户id + * @param clientId 客户端id + * @param subject 复制文件的UUID + * @param type 类型 + * @param ver 版本 + * @param shapeId 图形 id + * @param messageJson 存缓存的图形信息 + * @return + */ + public String respositoryDesignerRelationShapeCopy(String userId, String clientId, String subject, String type, String ver, String shapeId, String messageJson, String shapeGroupId) { + DesignerRelationShapeCacheManager relationShapeCache = DesignerRelationShapeCacheManager.getInstance(); + Map> shapeMap = relationShapeCache.getShapemap(); + List elementList = ShapeUtil.getShapeList(messageJson); + boolean isAssigned = CoeProcessLevelUtil.hasAssigned(subject); + if (isAssigned) { + return "false"; + } + + Map relationShapeMap = shapeMap.get(userId); + if (relationShapeMap == null) { + relationShapeMap = new HashMap(); + } + relationShapeMap.put("shapeCopyContent", messageJson);// 将传过来的图形信息保存到缓存中 + relationShapeMap.put("shapeFileId", subject); + relationShapeMap.put("shapeTypeId", type); + relationShapeMap.put("shapeCopyTime", Long.valueOf(System.currentTimeMillis())); + + if (validationUser(shapeMap, userId)) {// 如果是同一用户,则将最后一次复制的内容更新到同一用户对应的缓存中 + shapeMap.put(userId, relationShapeMap); + } else {// 对应新连接的用户 + List list = new ArrayList(); + list.add(messageJson); + shapeMap.put(userId, relationShapeMap); + } + if (copyToDatabase(elementList, subject)) { + return "true"; + } else { + // 如何插入数据库失败则清空缓存中的数据 + relationShapeMap = shapeMap.get(userId); + relationShapeMap.put("shapeCopyContent", null);// 将传过来的图形信息保存到缓存中 + relationShapeMap.put("shapeFileId", null); + relationShapeMap.put("shapeTypeId", null); + relationShapeMap.put("shapeCopyTime", null); + shapeMap.put(userId, relationShapeMap); + return "false"; + } + } + + + /** + * 粘贴时请求由服务器返回的数据 + * + * @param userId 用户id + * @param clientId 客户端Id + * @param subject 文件id + * @param action 动作 + * @param type  类型 + * @param ver 版本 + * @return + */ + public String respositoryDesignerRelationShapePasteAjax(String userId, String clientId, String subject, String action, String type, String ver) { + DesignerRelationShapeCacheManager relationShapeCache = DesignerRelationShapeCacheManager.getInstance(); + // 得到用户缓存的数据 + Map> shapeMap = relationShapeCache.getShapemap(); + Map relationShapeMap = shapeMap.get(userId); + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject json = new JSONObject(); + PALRepositoryModel levelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(subject); + String shapeType = levelModel.getMethodId(); + if (relationShapeMap != null && validationUser(shapeMap, userId)) { + Object shapeCopyContent = relationShapeMap.get("shapeCopyContent");// 从缓存中取得对应用户的复制的图形信息 + Object shapeTypeId = relationShapeMap.get("shapeTypeId"); // 拿到复制的图形所属的文件类型,除bpmn外都可以粘贴 + levelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance((String) shapeTypeId); + List elementList = null; + if (shapeCopyContent != null) { + elementList = ShapeUtil.getShapeList((String) shapeCopyContent); + } + if (validationPaste(shapeType, levelModel.getMethodId(), subject, elementList) && validationIsNotSameRepository((String) shapeTypeId, subject)) { + json.put("shape", (String) relationShapeMap.get("shapeCopyContent")); + json.put("result", "ok"); + } else { + json.put("result", "noShape"); + } + } else { + json.put("result", "error"); + } + ro.setData(json); + return ro.toString(); + } + + /** + * 粘贴时存入数据库的操作 + * + * @param messageJson 对应的操作的图形的信息 + * @param subject 文件的id + * @return + */ + public String pasteToDatabse(String subject, String messageJson) { + // 粘贴时对缓存中的的图形的id进行更新 + List elementList = ShapeUtil.getShapeList(messageJson); + final List list = new ArrayList(); + for (int i = 0; i < elementList.size(); i++) { + JSONObject jsonObj = JSONObject.parseObject(elementList.get(i)); + DesignerShapePasteModel model = new DesignerShapePasteModel(); + model.setShapeId(jsonObj.getString("id")); + JSONArray jsonArr = JSONArray.parseArray(jsonObj.getString("dataAttributes")); + for (int j = 0; j < jsonArr.size(); j++) { + JSONObject jObj = JSONObject.parseObject(jsonArr.getString(j)); + String shapeGroupId = jObj.getString("shapeGroupId"); + if (null != shapeGroupId && !"".equals(shapeGroupId)) { + model.setShapeGroupId(shapeGroupId); + break; + } + } + model.setShapeMessage(elementList.get(i)); + model.setShapecategoryName(jsonObj.containsKey("category") ? jsonObj.getString("category") : ""); + model.setShapeName(jsonObj.getString("name")); + model.setIsPaste("Y"); + model.setPalRepositoryId(subject); + model.setShapeType(jsonObj.containsKey("title") ? jsonObj.getString("title") : ""); + model.setIsDelete("N"); + model.setShapeText(jsonObj.containsKey("text") ? jsonObj.getString("text") : ""); + list.add(model); + } + + new Thread(new Runnable() { + @Override + public void run() { + // 粘贴时对粘贴时的图形的之间的关系进行处理 + pasteChangeRelationShapes(list); + } + }).start(); + + return CoeProcessLevelDaoFacotory.createCoeProcessLevel().pasteToDatabse(list) + ""; + } + + /** + * 粘贴时关联关系的同步 + * + * 些方法的作用如下:比如对A图形进行复制,现在粘贴时图形为A派生出来的称为B,此时的B中的属性还有关联关系应该和A是完全一样的 + * + * + * @param list + */ + private void pasteChangeRelationShapes(List list) { + DesignerRelationShapeCacheManager relationShapeCache = DesignerRelationShapeCacheManager.getInstance(); + Map> userShapeMap = relationShapeCache.getShapemap(); + Map shapeMap = userShapeMap.get(_uc.getUID()); + + String copyMessageJson = (String) shapeMap.get("shapeCopyContent"); + JSONArray jsonArr = JSONArray.parseArray(copyMessageJson); + Map copyMessageMap = new HashMap(); + for (int i = 0; i < jsonArr.size(); i++) { + JSONObject messageObject = JSONObject.parseObject(jsonArr.getString(i)); + copyMessageMap.put(messageObject.getJSONArray("dataAttributes").getJSONObject(0).getString("shapeGroupId"), messageObject.getString("id")); + } + + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + for (DesignerShapePasteModel model : list) { + String shapeGroupId = model.getShapeGroupId(); + String copyShapeId = ""; + if (copyMessageMap.containsKey(shapeGroupId)) { + copyShapeId = copyMessageMap.get(shapeGroupId); + } + List copyShapeRelationModel = dao.getModelListByShapeId(copyShapeId); + for (DesignerShapeRelationModel copyRelationModel : copyShapeRelationModel) { + DesignerShapeRelationModel relationModel = new DesignerShapeRelationModel(); + relationModel.setId(UUIDGener.getUUID()); + relationModel.setFileId(model.getPalRepositoryId()); + relationModel.setShapeId(model.getShapeId()); + relationModel.setShapeText(model.getShapeText()); + relationModel.setAttrId(copyRelationModel.getAttrId()); + relationModel.setRelationFileId(copyRelationModel.getRelationFileId()); + relationModel.setRelationShapeId(copyRelationModel.getRelationShapeId()); + relationModel.setRelationShapeText(copyRelationModel.getRelationShapeText()); + dao.insert(relationModel); + } + } + } + + /** + * 判断当前这个文件是否可以粘贴被复制的图形,只有当当前的文件中存大更多图形并且已选择要粘贴的图形的类别时才能进行粘贴和解析,BPMN只能粘贴 + * 在BPMN中,不能粘贴到其它类别文件中 + * + * @param methodId 当前文件的methodId + * @param pasteMethodId 服务器上存在的这个要粘贴的图形的所属于的methodId + * @param subject 当前文件的UUID + * @return + */ + public boolean validationPaste(String methodId, String pasteMethodId, String subject, List elementList) { + if (elementList == null) { + return false; + } else { + Set set = new HashSet(); + int linkerCount = 0; + int textCount = 0; + for (String s : elementList) { + JSONObject jsonObj = JSONObject.parseObject(s); + if (jsonObj.containsKey("category")) { + set.add(jsonObj.getString("category").replace("_", ".")); + if("standard".equals(jsonObj.getString("category"))) { + textCount ++; + } + } + if (jsonObj.containsKey("name") && "linker".equals(jsonObj.getString("name"))) { + linkerCount ++; + } + } + if ((linkerCount + textCount) == elementList.size()) {// 只有箭头或插入的文本或者只包含这两者 + return true; + } + if (set.size() == 0) { + return false; + } + if (methodId.equals(pasteMethodId) || set.contains(methodId)) { + return true; + } else { + String methodIds = PALMethodUtil.getCustom(methodId, subject);// 得到当前这个文件所关联的图形methodID + if (!"".equals(methodIds)) { + String strs[] = methodIds.split(","); + for (String str : strs) { + if (str.equals(pasteMethodId) || set.contains(str)) + return true; + } + return false; + } else + return false; + } + } + } + + /** + * 校验是否是在同一资产库下,不能跨资产库复制和粘贴可以跨文件和浏览器,只限同一用户 + * + * @param pasteFileUUID 服务器上缓存中的文件ID + * @param TargetFileUUID 粘贴的目标的源文件的ID + * @return boolean + */ + public boolean validationIsNotSameRepository(String pasteFileUUID, String TargetFileUUID) { + PALRepositoryModel levelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(TargetFileUUID); + String targetWsID = levelModel.getWsId(); + levelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(pasteFileUUID); + String pasteWsID = levelModel.getWsId(); + if (pasteWsID.equals(targetWsID)) { + return true; + } + return false; + } + + /** + * 判断是不是同一用户 + * + * @return + */ + public boolean validationUser(Map> shapeMap, String userId) { + if (!shapeMap.isEmpty()) { + Set set = shapeMap.keySet(); + for (String u : set) { + if (u.equals(userId)) {// 如果是同一用户,则将最后一次复制的内容更新到同一用户对应的缓存中 + return true; + } + } + } + return false; + } + + /** + * 将第一次复制的数据插入到数据库 + * @param elementList + * @param subject + * @return + */ + public boolean copyToDatabase(List elementList, String subject) { + List list = new ArrayList(); + for (int i = 0; i < elementList.size(); i++) { + String messageJson = elementList.get(i); + JSONObject jsonObj = JSONObject.parseObject(messageJson); + // 对连线不作任何操作 + if ("linker".equals(jsonObj.getString("name"))) { + continue; + } + Map map = ShapeUtil.getIsCopy(messageJson); + String shapeGroupId = map.get("shapeGroupId"); + String isCopy = map.get("isCopy"); + if ("N".equals(isCopy)) { + continue; + } + DesignerShapeCopyModel model = new DesignerShapeCopyModel(); + model.setShapeId(jsonObj.getString("id")); + model.setShapeGroupId(shapeGroupId); + model.setShapeMessage(elementList.get(i)); + model.setShapecategoryName(jsonObj.getString("category")); + model.setShapeName(jsonObj.getString("name")); + model.setisCopy(isCopy); + model.setPalRepositoryId(subject); + model.setShapeType(jsonObj.getString("title")); + model.setIsDelete("N"); + list.add(model); + } + try { + return CoeProcessLevelDaoFacotory.createCoeProcessLevel().createShape(list); + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + /** + * 改变出现复制的图形的名称或属性,对出现复制的图形的名称和属性进行同步,如: + * 对A图形进行复制派生出B那改变B或者A时两者的名称和属性应该是同步的并有相同的属性和名称 + * @param jsonObj + * @param uuid + */ + public void updateShapes(JSONObject jsonObj, String uuid) { + // JSONObject jsonObj = JSONObject.fromObject(messages); + JSONArray jsonArr1 = jsonObj.getJSONArray("updates"); + DesignerRelationShapeCacheManager event = DesignerRelationShapeCacheManager.getInstance(); + Map> map = event.getEventMap(); + // 只针对单个 图形进行操作 + if (jsonArr1.size() > 1) { + event.setFlag(false); + return; + } + JSONObject jsonObj2 = jsonArr1.getJSONObject(0); + if (!jsonObj2.containsKey("anchors")) { + event.setFlag(false); + return; + } + String name = jsonObj2.getString("text"); + String id = jsonObj2.getString("id"); + if (map != null) { + Set l = map.get(uuid); + if (l != null) { + // 如果名称或属性没有什么变化,只是改变改图形的位置、连线什么的, 则不会唤醒正在阻塞的http长连接的线程 + for (JSONObject jsonObject : l) { + if (id.equals(jsonObject.getString("id")) && name.equals(jsonObject.getString("text")) && isTheSame(jsonObj2.getJSONArray("dataAttributes"), jsonObject.getJSONArray("dataAttributes"))) { + event.setFlag(false); + return; + } + } + } else { + // 否则唤醒正在等待的http长连接的线程 + event.setFlag(false); + } + } + } + + /** + * 更新复制副本的内容 + * + * @param shapeGroupId 组id + * @param title 标题 + * @param text 文本 + * @param jsonDataArr 属性数据 + */ + private void updateShapeCache(String shapeGroupId, String title, String text, JSONArray jsonDataArr) { + DesignerRelationShapeCacheManager cache = DesignerRelationShapeCacheManager.getInstance(); + Map> shapeMap = cache.getShapemap(); + Set key = shapeMap.keySet(); + for (String k : key) { + Map relationShapeMap = shapeMap.get(k); + String messageJson = (String) relationShapeMap.get("shapeCopyContent"); + if (messageJson != null) { + JSONArray jArr = JSONArray.parseArray(messageJson); + for (int i = 0; i < jArr.size(); i++) { + JSONObject shape = jArr.getJSONObject(i); + if (!"linker".equals(shape.get("name")) && shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int j = 0; j < dataAttributes.size(); j++) { + JSONObject attr = dataAttributes.getJSONObject(j); + if (attr.containsKey("attributesContent") && attr.containsKey("shapeGroupId") && shapeGroupId.equals(attr.get("shapeGroupId"))) { + if (shapeGroupId.equals(attr.get("shapeGroupId"))) { + shape.put("text", text); + shape.put("title", title); + shape.put("dataAttributes", jsonDataArr); + relationShapeMap.put("shapeCopyContent", jArr.toString()); + return; + } + } + } + + } + } + } + } + } + + /** + * 判断新的数据和旧的数据是否相同 + * fastjson + * + * @param dataAttributes1 + * @param dataAttributes2 + * @return + */ + private boolean isTheSame(JSONArray dataAttributes1, JSONArray dataAttributes2) { + String attributesContent = ""; + String linksArray = ""; + String privateAttribute = ""; + String attributesJsonArray = ""; + String privateAttributeContent = ""; + String shapeDesc = ""; + String upFilesArray = ""; + String relevanceShapes = ""; + for (int i = 0; i < dataAttributes1.size(); i++) { + JSONObject attr = dataAttributes1.getJSONObject(i); + if (attr.containsKey("attributesContent")) { + attributesContent = attr.getString("attributesContent"); + linksArray = attr.getJSONArray("linksArray").toString(); + attributesJsonArray = attr.getJSONArray("attributesJsonArray").toString(); + privateAttribute = attr.getString("privateAttribute"); + privateAttributeContent = attr.getString("privateAttributeContent"); + shapeDesc = attr.getString("shapeDesc"); + if (attr.containsKey("upFilesArray")) { + upFilesArray = attr.getJSONArray("upFilesArray").toString(); + } + if (attr.containsKey("relevanceShapes")) { + relevanceShapes = attr.getJSONArray("relevanceShapes").toString(); + } + } + } + String attributesContent1 = ""; + String linksArray1 = ""; + String privateAttribute1 = ""; + String attributesJsonArray1 = ""; + String privateAttributeContent1 = ""; + String shapeDesc1 = ""; + String upFilesArray1 = ""; + String relevanceShapes1 = ""; + for (int i = 0; i < dataAttributes2.size(); i++) { + JSONObject attr = dataAttributes2.getJSONObject(i); + if (attr.containsKey("attributesContent")) { + attributesContent1 = attr.getString("attributesContent"); + linksArray1 = attr.getJSONArray("linksArray").toString(); + attributesJsonArray1 = attr.getJSONArray("attributesJsonArray").toString(); + privateAttribute1 = attr.getString("privateAttribute"); + privateAttributeContent1 = attr.getString("privateAttributeContent"); + shapeDesc1 = attr.getString("shapeDesc"); + if (attr.containsKey("upFilesArray")) { + upFilesArray1 = attr.getJSONArray("upFilesArray").toString(); + } + if (attr.containsKey("relevanceShapes")) { + relevanceShapes1 = attr.getJSONArray("relevanceShapes").toString(); + } + } + } + if (relevanceShapes1.equals(relevanceShapes) && attributesContent1.equals(attributesContent) && linksArray1.equals(linksArray) && attributesJsonArray1.equals(attributesJsonArray) && privateAttribute1.equals(privateAttribute) && privateAttributeContent1.equals(privateAttributeContent) && shapeDesc1.equals(shapeDesc) && upFilesArray1.equals(upFilesArray)) { + return true; + } + return false; + } + + /** + * 更新出现复制过的文件的的信息 + * + * @param fileIdList + * @throws UnsupportedEncodingException + */ + private void updateFile(Set> fileIdList, final String shapeGroupId, final String title, final String text, final JSONArray jsonDataArr, final Map> map) throws UnsupportedEncodingException { + DesignerRelationShapeCacheManager event = DesignerRelationShapeCacheManager.getInstance(); + Map uuidSet = event.getUuidSet(); + final Set set = new HashSet(); + for (Map fileMap : fileIdList) {// 快速响应已经打开的文件 + String uuid = fileMap.get("palRepositoryId"); + if (uuidSet.containsKey(uuid)) { + PALRepositoryModel levelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + String filePath = levelModel.getFilePath(); + UtilFile utilFile = new UtilFile(filePath); + File[] file = utilFile.listFiles(); + for (int j = 0; j < file.length; j++) { + String path = file[j].getPath(); + if (path.endsWith(".png") || path.endsWith(".json") || path.endsWith(".draw")) { + continue; + } + utilFile = new UtilFile(path); + String messageJson = utilFile.readStrUTF8(); + String s = ShapeUtil.fileJsonToObject(messageJson, shapeGroupId, title, text, jsonDataArr, map, true, uuid); + utilFile.write(s.getBytes("utf-8")); + } + // 更新缓存 + utilFile = new UtilFile(filePath + File.separator + uuid); + String messageJson = utilFile.readStrUTF8(); + BaseModel definModel = CoeDesignerAPIManager.getInstance().getDefinition(uuid, 0); + definModel.setDefinition(ShapeUtil.fileJsonToObject(messageJson, shapeGroupId, title, text, jsonDataArr, map, false, uuid)); + } else { + set.add(uuid); + } + } + new Thread(new Runnable() {// 启用另一个线程来对未打的文件进行操作,减少用户等待时间 + @Override + public void run() { + for (String uuid : set) { + PALRepositoryModel levelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + if (levelModel == null) { + continue; + } + String filePath = levelModel.getFilePath(); + UtilFile utilFile = new UtilFile(filePath); + File[] file = utilFile.listFiles(); + for (int j = 0; j < file.length; j++) { + String path = file[j].getPath(); + if (path.endsWith(".png") || path.endsWith(".json") || path.endsWith(".draw")) { + continue; + } + utilFile = new UtilFile(path); + String messageJson = utilFile.readStrUTF8(); + String s = ShapeUtil.fileJsonToObject(messageJson, shapeGroupId, title, text, jsonDataArr, map, true, uuid); + try { + utilFile.write(s.getBytes("utf-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + // 更新缓存 + utilFile = new UtilFile(filePath + File.separator + uuid); + String messageJson = utilFile.readStrUTF8(); + BaseModel definModel = CoeDesignerAPIManager.getInstance().getDefinition(uuid, 0); + definModel.setDefinition(ShapeUtil.fileJsonToObject(messageJson, shapeGroupId, title, text, jsonDataArr, map, false, uuid)); + } + } + }).start(); + } + + /** + * 对于打开的文件中有出现复制的图形进行同步 + * + * @param clientId 客户端id + * @param userId 用户id + * @param name 文件名称 + * @param subject 文件id + * @param listenTime 监听时间 + * @return + */ + @SuppressWarnings("deprecation") + public String listen(String clientId, String userId, String name, String subject, String listenTime) { + DesignerRelationShapeCacheManager event = DesignerRelationShapeCacheManager.getInstance(); + long start = System.currentTimeMillis(); + Map uuidSet = event.getUuidSet(); + uuidSet.put(subject, start); + + event.awaitRes(30 * 1000); + long end = System.currentTimeMillis(); + //如果等待时间超过30秒,则说明没有做修改 + if ((end - start) > (30 * 1000)) { + event.setFlag(false); + } + Map> eventMap = event.getEventMap(); + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject json = new JSONObject(); + try { + if (eventMap != null && eventMap.size() > 0 && event.isFlag()) { + json.put("shapes", getUpdateShapes(eventMap, subject)); + json.put("result", "ok"); + } else { + json.put("result", "error"); + } + } catch (Exception e) { + ro = ResponseObject.newErrResponse(); + json.put("result", "error"); + } + ro.setData(json); + return ro.toString(); + } + + private List getUpdateShapes(Map> eventMap, String subject) { + Set set = eventMap.get(subject); + List list = new ArrayList(); + DesignerRelationShapeCacheManager event = DesignerRelationShapeCacheManager.getInstance(); + String shapeGroupId = event.getShapeGroupId(); + for (JSONObject shape : set) { + if (!"linker".equals(shape.get("name")) && shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int j = 0; j < dataAttributes.size(); j++) { + JSONObject attr = dataAttributes.getJSONObject(j); + if (attr.containsKey("attributesContent") && attr.containsKey("shapeGroupId") && shapeGroupId.equals(attr.get("shapeGroupId"))) { + if (shapeGroupId.equals(attr.get("shapeGroupId"))) { + list.add(shape); + break; + } + } + } + } + } + return list; + } + + /** + * 出现复制统计 + * + * @param shapeGroupId 组id + * @param shapeId 图形id + * @param isCopy 是不是复制的 + * @return + */ + public String designerRelationShapeCount(String shapeGroupId, String shapeId, String isCopy) { + List> list = CoeProcessLevelDaoFacotory.createCoeProcessLevel().designerRelationShapeCount(shapeGroupId, shapeId, isCopy); + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject json = new JSONObject(); + if (list.size() > 0) { + json.put("list", list); + json.put("result", "ok"); + } + ro.setData(json); + return ro.toString(); + } + + /** + * 图形的删除 + * + * @param jsonArr 图形信息 + */ + public void removeShapes(JSONArray jsonArr, String uuid) { + DesignerRelationShapeCacheManager event = DesignerRelationShapeCacheManager.getInstance(); + Map> map = event.getEventMap(); + Set list = map.get(uuid); + Set l = new HashSet(); + Set set = new HashSet(); + for (int i = 0; i < jsonArr.size(); i++) { + JSONObject obj = jsonArr.getJSONObject(i); + set.add(obj.getString("id")); + } + if (list != null) { + for (JSONObject jsonObj : list) { + if (set.contains(jsonObj.getString("id"))) { + continue; + } + l.add(jsonObj); + } + } + if (l.size() > 0) { + map.put(uuid, l); + } + CoeProcessLevelDaoFacotory.createCoeProcessLevel().removeShapes(jsonArr);// 复制出现的图形删除 + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + for (int j = 0; j < jsonArr.size(); j++) { + JSONObject obj = jsonArr.getJSONObject(j); + dao.deleteByShapeId(uuid, obj.getString("id"));// 关联/被关联的图形删除 + } + } + + /** + * 针对CTRL+Z和CTRL+Y的动作,撤销和恢复的动作 + * + * @param jsonArray + */ + public void recoverRemoveShapes(JSONArray jsonArray) { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().recoverRemoveShapes(jsonArray); + } + + /** + * 添加属性关联页面 + * + * @param wsId + * @param ref + * @param attrId 属性Id + * @param relationShapeIds 被关联的形状Ids + * @param ruuid 模型id + * @return + */ + public String designerRelevanceShapes(String wsId, String modelId, String ref, String shapeId, String attrId, String relationShapeIds, String relationFileIds, String ruuid) { + Map macroLibraries = new HashMap(); + JSONObject refObj = JSONObject.parseObject(ref); + String method = refObj.getString("method");// 建模大类或建模方法 + String category = method; + if (method.contains(".")) { + category = method.substring(0, method.indexOf("."));// 截取建模大类 + } + String type = refObj.getString("type");// 关联类型 file shape + macroLibraries.put("treeData", getTreeJson(wsId, "", category, type, method)); + macroLibraries.put("sid", _uc.getSessionId()); + macroLibraries.put("wsid", wsId); + macroLibraries.put("attrId", attrId); + macroLibraries.put("refObj", refObj); + macroLibraries.put("category", category); + macroLibraries.put("modelId", modelId == null ? "" : modelId); + + //查询已关联图形 + + JSONArray relationShapeList = new JSONArray(); + if (attrId != null && !"".equals(attrId)) { + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + if ("file".equals(type)) {// 关联模型文件 + Set ids = new HashSet<>();// 之前代码会造成数据库出现多余数据,过滤重复数据 + List list = dao.getModelListByShapeIdAndRelationShapeId(ruuid, shapeId, null, relationFileIds); + for (DesignerShapeRelationModel model : list) { + if (ids.contains(model.getRelationFileId())) { + continue; + } + if (attrId.equals(model.getAttrId())) { + List list2 = PALRepositoryCache.getByVersionId(wsId, model.getRelationFileId());// relationFileId存储的是versionId + for (PALRepositoryModel model2 : list2) { + if (model2.isUse()) { + model.setRelationFileId(model2.getId()); + model.setRelationShapeText(model2.getName()); + break; + } + } + relationShapeList.add(model); + ids.add(model.getRelationFileId()); + } + } + } else {// 关联形状 + Set ids = new HashSet<>(); + List list = dao.getModelListByShapeIdAndRelationShapeId(ruuid, shapeId, relationShapeIds, null); + for (DesignerShapeRelationModel model : list) { + if (ids.contains(model.getRelationShapeId()) && !"shapeAndFile".equals(type)) { + continue; + } + if (attrId.equals(model.getAttrId())) { + List list2 = PALRepositoryCache.getByVersionId(wsId, model.getRelationShapeId()); + for (PALRepositoryModel model2 : list2) { + if (model2.isUse()) { + model.setRelationShapeText(model2.getName()); + break; + } + } + relationShapeList.add(model); + ids.add(model.getRelationShapeId()); + } + } + } + } + macroLibraries.put("relationShapeList", relationShapeList); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.designer.shapes.htm", macroLibraries); + } + + public String getTreeJson(String wsId, String pid, String category, String type, String method) { + StringBuffer treeJson = new StringBuffer(); + if (pid.equals("")) { + return getRootJson(wsId, category, type, method); // 加载根 + } + // 加载二级 + treeJson.append(getTwoNodeJson(pid, wsId)); + + return treeJson.toString(); + } + + /** + * 获取第二级及其以下目录 + * + * @param pid + * @return + */ + public String getTwoNodeJson(String pid, String wsId) { + List coeProcessLevelModels = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelByPid(pid, wsId); + JSONArray jsonArray = new JSONArray(); + for (int i = 0; i < coeProcessLevelModels.size(); i++) { + PALRepositoryModel coeProcessLevelModel = coeProcessLevelModels.get(i); + if (coeProcessLevelModel != null) { + JSONObject json = getJSon(coeProcessLevelModel); + jsonArray.add(json); + } + } + return jsonArray.toString(); + } + + protected String getRootJson(String wsuuid, String category, String type, String methodScope) { + JSONArray jsonArray = new JSONArray(); + if ("file".equals(type)) {// 关联的文件模型 + PALMethodJsonModel processpmjm = new PALMethodJsonModel(); + processpmjm.setId(category); + processpmjm.setName(I18nRes.findValue(CoEConstant.APP_ID, category)); + processpmjm.setUrl("./jd?sid=" + _uc.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_process_models_info&ruuid=process&uuid=process&wsId=" + wsuuid); + processpmjm.setIcon("../apps/" + CoEConstant.APP_ID + "/img/method/" + processpmjm.getId() + ".png"); + processpmjm.setMenu(false); + processpmjm.setOpen(true); + jsonArray.add(processpmjm); + JSONArray nodes = PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryTreeDataByPid(_uc, wsuuid, processpmjm.getId()); + for (int i = 0; i < nodes.size(); i++) { + JSONObject node = nodes.getJSONObject(i); + node.put("url", "./jd?sid=" + _uc.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_process_models_info&ruuid=" + node.getString("id") + "&uuid=" + node.getString("id") + "&wsId=" + wsuuid); + String id = node.getString("id"); + PALRepositoryModel model = PALRepositoryCache.getCache().get(id); + if (model != null) { + if (!model.getMethodCategory().equals(methodScope) && !model.getMethodId().equals(methodScope)) { + node.put("nocheck", true); + } + } + jsonArray.add(node); + } + } else {// 关联的形状节点 + PALMethodJsonModel controlpmjm = new PALMethodJsonModel(); + controlpmjm.setId(category); + controlpmjm.setName(I18nRes.findValue(CoEConstant.APP_ID, category)); + controlpmjm.setUrl(""); + controlpmjm.setIcon("../apps/" + CoEConstant.APP_ID + "/img/method/" + controlpmjm.getId() + ".png"); + controlpmjm.setMenu(false); + controlpmjm.setOpen(true); + jsonArray.add(controlpmjm); + JSONArray nodes = PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryTreeDataByPid(_uc, wsuuid, controlpmjm.getId()); + for (int i = 0; i < nodes.size(); i++) { + JSONObject node = nodes.getJSONObject(i); + node.put("url", "./jd?sid=" + _uc.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_info&ruuid=" + node.getString("id") + "&uuid=" + node.getString("id")); + jsonArray.add(node); + } + } +// for (int i = 0; i < palMethodList.size(); i++) { +// String str = palMethodList.get(i); +// if (str.equals("process") || str.equals("org") || str.equals("data") || str.equals("product") || str.equals("control") || str.equals("itsystem")) { +// +// } else { +// PALMethodJsonModel pmjm = new PALMethodJsonModel(); +// pmjm.setId(str); +// pmjm.setName(I18nRes.findValue(CoEConstant.APP_ID, str)); +// pmjm.setIcon("../apps/" + PALMethodCache.getPALMethodModelListByMethod(str).get(0).getApp().getId() + "/img/method/" + pmjm.getId() + ".png"); +// pmjm.setMenu(false); +// jsonArray.add(pmjm); +// putAllNodeJson(str, wsuuid, jsonArray); +// } +// +// } + return jsonArray.toString(); + } + + /** + * 关联属性快速搜索 + * @param wsId + * @param scope + * @return + */ + public String getShapesTreeDataJson(String wsId, String category, String autoContent) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + List list = new ArrayList(); + if (!"".equals(category)) { + List modelList = coeProcessLevel.getCoeProcessLevelByNameAndCategory(autoContent, wsId, category); + if (modelList != null && modelList.size() > 0) { + for (PALRepositoryModel palModel : modelList) { + if (palModel == null) { + continue; + } + CoeProcessLevelAutoBean bean = new CoeProcessLevelAutoBean(); + bean.setName(palModel.getName()); + bean.setType(palModel.getMethodId()); + StringBuilder sBuilder = new StringBuilder();// 名称组合 + StringBuilder idBuilder = new StringBuilder();// Id组合 + Set idSets = new HashSet<>();// id记录,校验防止递归死循环 + sBuilder.append(bean.getName()); + idBuilder.append(palModel.getId()); + idSets.add(palModel.getId()); + Map topLevelmap = new HashMap(); + topLevelmap.put("topLevel", palModel.getLevel()); //topLevel:为计算后的顶级目录的级别。没有顶级目录的流程舍去 + getFilePath(palModel, sBuilder, idBuilder, idSets, topLevelmap);// 递归获取当前文件名称路径 + if(topLevelmap!=null && topLevelmap.get("topLevel")!=null && topLevelmap.get("topLevel")>1) { + continue; + } + // bean.setUi("
    " + sBuilder.toString() + "
    "); + bean.setUi(sBuilder.toString()); + bean.setValue(idBuilder.toString()); + list.add(bean); + } + } + } + List list2 = new ArrayList(); + boolean isBeyond = false;// 查询结果是否超出一定数量并截取 + if (list != null && list.size() > 0) { + // 排序 + Collections.sort(list, new Comparator() { + @Override + public int compare(CoeProcessLevelAutoBean o1, CoeProcessLevelAutoBean o2) { + String ui1 = o1.getUi(); + String ui2 = o2.getUi(); + return ui2.compareToIgnoreCase(ui1); + } + }); + // 取前15个 + if (list.size() > 15) { + isBeyond = true; + } + for (int i = 0; i < list.size(); i++) { + /*if (i >= 15) { // 取前15个 + break; + }*/ + list2.add(list.get(i)); + } + } + ro.put("result", com.alibaba.fastjson.JSONArray.toJSON(list2)); + ro.put("isBeyond", isBeyond); + return ro.toString(); + } + + /** + * 获取文件名称全路径 + * @param model + * @return + */ + protected void getFilePath(PALRepositoryModel model, StringBuilder sBuilder, StringBuilder idBuilder, Set idSets, Map topLevelmap) { + if (model.getParentId().length() == 36 && !idSets.contains(model.getParentId())) { + String parentId = model.getParentId(); + PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(parentId); + if (parentModel != null) { + sBuilder.insert(0, parentModel.getName() + ">"); + idBuilder.insert(0, parentModel.getId() + ","); + idSets.add(parentModel.getId()); + topLevelmap.put("topLevel", parentModel.getLevel()); + getFilePath(parentModel, sBuilder, idBuilder, idSets, topLevelmap); + } + } + } + + /** + * 得到tree json 结构 + * + * @param wsId + * @param pid + * @return + */ + public String getTreeJson(String wsId, String pid) { + JSONArray list = PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryTreeDataByPid(_uc, wsId, pid); + JSONArray result = new JSONArray(); + for (int i = 0; i < list.size(); i++) { + JSONObject node = list.getJSONObject(i); + node.put("url", "./jd?sid=" + super.getContext().getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_info&ruuid=" + node.getString("id") + "&uuid=" + node.getString("id")); + result.add(node); + } + return result.toString(); + } + + /** + * 得到流程tree json结构 + * @param wsId + * @param pid + * @param methodScope + * @return + */ + public String getProcessModelsTreeJson(String wsId, String pid, String methodScope) { + JSONArray list = PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryTreeDataByPid(_uc, wsId, pid); + JSONArray result = new JSONArray(); + for (int i = 0; i < list.size(); i++) { + JSONObject node = list.getJSONObject(i); + node.put("url", "./jd?sid=" + super.getContext().getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_process_models_info&ruuid=" + node.getString("id") + "&uuid=" + node.getString("id") + "&wsId=" + wsId); + String id = node.getString("id"); + PALRepositoryModel model = PALRepositoryCache.getCache().get(id); + if (model != null) { + if (!model.getMethodCategory().equals(methodScope) && !model.getMethodId().equals(methodScope)) { + node.put("nocheck", true); + } + } + result.add(node); + } + return result.toString(); + } + + /** + * 装载所有的节点 + * + * @param pid + * @param wsId + * @return + */ + public void putAllNodeJson(String pid, String wsId, JSONArray jsonArray) { + List coeProcessLevelModels = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelByPid(pid, wsId); + for (int i = 0; i < coeProcessLevelModels.size(); i++) { + PALRepositoryModel coeProcessLevelModel = coeProcessLevelModels.get(i); + if (coeProcessLevelModel != null) { + JSONObject json = getJSon(coeProcessLevelModel); + jsonArray.add(json); + putAllNodeJson(coeProcessLevelModel.getId(), wsId, jsonArray); + } + } + } + + /** + * 获取tree json + * + * @param coeProcessLevelModel + * @param i + * @return + */ + private JSONObject getJSon(PALRepositoryModel coeProcessLevelModel) { + JSONObject rootJson = new JSONObject(); + rootJson.put("id", coeProcessLevelModel.getId()); + rootJson.put("pid", coeProcessLevelModel.getParentId()); + rootJson.put("plNo", CoeProcessLevelUtil.getProcessLevelNoByUUId(coeProcessLevelModel.getId(), coeProcessLevelModel.getWsId())); + rootJson.put("name", I18nRes.findValue(CoEConstant.APP_ID, super.getContext().getLanguage(), coeProcessLevelModel.getName())); + rootJson.put("title", rootJson.get("name") + " " + VersionUtil.getVersionStrV(coeProcessLevelModel.getVersion())); + rootJson.put("drop", false); + rootJson.put("isSystemFile", coeProcessLevelModel.isSystemFile()); + rootJson.put("plMethodId", coeProcessLevelModel.getMethodId()); + if (!"default".equals(coeProcessLevelModel.getMethodId())) { + if (PALMethodCache.getPALMethodModelById(coeProcessLevelModel.getMethodId()) == null) { + rootJson.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/default/16.png"); + } else { + rootJson.put("icon", "../apps/" + PALMethodCache.getPALMethodModelById(coeProcessLevelModel.getMethodId()).getApp().getId() + "/img/method/" + coeProcessLevelModel.getMethodId() + "/16.png"); + } + } else { + rootJson.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/default/16.png"); + } + rootJson.put("isParent", coeProcessLevelModel.isBottomLevel() == 0 ? true : false); + rootJson.put("plLevel", coeProcessLevelModel.getLevel()); + rootJson.put("plOrdexIndex", coeProcessLevelModel.getOrderIndex()); + rootJson.put("plDiagramUrl", coeProcessLevelModel.getDiagramUrl()); + rootJson.put("plSecurityR", coeProcessLevelModel.getPlSecurityR()); + rootJson.put("plSecurityW", coeProcessLevelModel.getPlSecurityW()); + rootJson.put("url", "./jd?sid=" + super.getContext().getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_info&ruuid=" + coeProcessLevelModel.getId() + "&uuid=" + coeProcessLevelModel.getId()); + rootJson.put("plCategory", coeProcessLevelModel.getMethodCategory()); + return rootJson; + } + + public String designerRelevanceShapesInfo(String relationFileId, String shapeId, String attrId) { + ResponseObject ro = ResponseObject.newOkResponse(); + List> list = CoeDesignerUtil.getShapeMessageJson(relationFileId); + JSONObject json = new JSONObject(); + if (list != null && list.size() > 0) { + for (Map map : list) { + map.put("category", I18nRes.findValue(super.getContext().getLanguage(), (String) map.get("category"))); + } + + UtilMapSort mapSort = new UtilMapSort(); + mapSort.sort(list, "text", "string", null); + for (Map map : list) { + map.put("text", StringHandleUtil.replaceSpecialChart(map.get("text").toString())); + map.put("name", StringHandleUtil.replaceSpecialChart(map.get("name").toString())); + } + json.put("list", list); + ro.put("result", "ok"); + } else { + ro.put("result", "error"); + } + ro.setData(json); + return ro.toString(); + } + + public String designerRelevanceProcessModelsInfo(String uuid, String wsId) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject json = new JSONObject(); + List pList = PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryModelsByPid(wsId, uuid); + List> list = new ArrayList<>(); + for (PALRepositoryModel model : pList) { +// if ("default".equals(model.getMethodId())) { +// continue; +// } + Map map = new HashMap<>(); + map.put("id", model.getVersionId()); + map.put("text", model.getName()); + list.add(map); + } + json.put("list", list); + ro.put("result", "ok"); + ro.setData(json); + return ro.toString(); + } + + // public void updateEventMap(com.alibaba.fastjson.JSONArray jsonArray, String uuid) { + // DesignerRelationShapeCacheManager event = DesignerRelationShapeCacheManager.getInstance(); + // Map> map = event.getEventMap(); + // Set listJsonObj = map.get(uuid); + // if (listJsonObj == null) { + // listJsonObj = new HashSet(); + // + // } + // for (int j = 0; j < jsonArray.size(); j++) { + // com.alibaba.fastjson.JSONObject jsonObj = jsonArray.getJSONObject(j); + // listJsonObj.add(jsonObj); + // } + // map.put(uuid, listJsonObj); + // } + public void updateEventMap(JSONArray jsonArray, String uuid) { + DesignerRelationShapeCacheManager event = DesignerRelationShapeCacheManager.getInstance(); + Map> map = event.getEventMap(); + Set listJsonObj = map.get(uuid); + if (listJsonObj == null) { + listJsonObj = new HashSet(); + + } + for (int j = 0; j < jsonArray.size(); j++) { + JSONObject jsonObj = JSONObject.parseObject(jsonArray.getString(j)); + listJsonObj.add(jsonObj); + } + map.put(uuid, listJsonObj); + } + + /** + * 自定义复制 + * + * @param userId 用户id 如admin + * @param clientId 客户端id + * @param subject 文件id + * @param type 文件类型 + * @param ver 文件版本 + * @param shapeId 形状di + * @param messageJson 形状json 信息 + * @param shapeGroupId 组id + * @return + */ + public String respositoryDesignerRelationShapeCustomCopy(String userId, String clientId, String subject, String type, String ver, String shapeId, String messageJson, String shapeGroupId) { + DesignerShapeCopyCache copyCache = DesignerShapeCopyCache.getCache(); + boolean isAssigned = CoeProcessLevelUtil.hasAssigned(subject); + if (isAssigned) { + return "false"; + } + + HashMap relationShapeMap = new HashMap(); + relationShapeMap.put("shapeCustomCopyContent", messageJson);// 将传过来的图形信息保存到缓存中 + relationShapeMap.put("shapeTypeId", type); + relationShapeMap.put("shapeFileId", subject); + relationShapeMap.put("shapeCuntomCopyTime", Long.valueOf(System.currentTimeMillis())); + // 被动关联的信息存储 + getRelationShape(messageJson, relationShapeMap); + DesignerShapeCopyCache.getCache().put(userId, relationShapeMap); + return "true"; + } + + /** + * 获取所有相关图形的被动关联信息 + */ + private void getRelationShape(String messageJson, Map relationShapeMap) { + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + com.alibaba.fastjson.JSONArray array = com.alibaba.fastjson.JSONArray.parseArray(messageJson); + com.alibaba.fastjson.JSONArray shapeArray = new com.alibaba.fastjson.JSONArray(); + for (int i = 0; i < array.size(); i++) { + com.alibaba.fastjson.JSONObject shapeObject = array.getJSONObject(i); + if (shapeObject.getString("id") != null) { + List list = dao.getModelListByRelationShapeId(shapeObject.getString("id")); + for (DesignerShapeRelationModel model : list) { + com.alibaba.fastjson.JSONObject object = new com.alibaba.fastjson.JSONObject(); + object.put("fileId", model.getFileId()); + object.put("shapeId", model.getShapeId()); + object.put("shapeText", model.getShapeText()); + object.put("attrId", model.getAttrId()); + object.put("relationFileId", model.getRelationFileId()); + object.put("relationShapeId", model.getRelationShapeId()); + object.put("relationShapeText", model.getRelationShapeText()); + shapeArray.add(object); + } + } + } + relationShapeMap.put("relationShape", shapeArray); + } + + /** + * 自定义粘贴 + * + * @param userId 用户id 如admin + * @param clientId 客户端id + * @param subject 文件id + * @param type 文件类型 + * @param ver 文件版本 + * @return + */ + public String respositoryDesignerRelationShapeCustomPasteAjax(String userId, String clientId, String subject, String action, String type, String ver) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject json = new JSONObject(); + PALRepositoryModel levelModel = PALRepositoryCache.getCache().get(subject); + String shapeType = levelModel.getMethodId(); + if (DesignerShapeCopyCache.getCache().get(userId) != null) { + Map relationShapeMap = DesignerShapeCopyCache.getCache().get(userId); + String shapeFileId = (String) relationShapeMap.get("shapeFileId"); + Long shapeCuntomCopyTime = (Long) relationShapeMap.get("shapeCuntomCopyTime"); + Long shapeCopyTime = (Long) relationShapeMap.get("shapeCopyTime"); + levelModel = PALRepositoryCache.getCache().get(shapeFileId); + List elementList = null; + if ((shapeCopyTime != null && shapeCuntomCopyTime == null) || (shapeCuntomCopyTime != null && shapeCopyTime != null && shapeCuntomCopyTime < shapeCopyTime)) { + Object shapeCopyContent = relationShapeMap.get("shapeCopyContent");// 从缓存中取得对应用户的复制的图形信息 + if (shapeCopyContent != null) { + elementList = ShapeUtil.getShapeList((String) shapeCopyContent); + } + if (validationPaste(shapeType, levelModel.getMethodId(), subject, elementList) && validationIsNotSameRepository(shapeFileId, subject)) { + json.put("shape", (String) relationShapeMap.get("shapeCopyContent")); + json.put("result", "ok"); + json.put("copyContent", "shapeCopyContent"); + json.put("relationShape", relationShapeMap.get("relationShape"));// 返回被动关联数据 + } else { + json.put("result", "noShape"); + } + } else if ((shapeCuntomCopyTime != null && shapeCopyTime == null) || (shapeCuntomCopyTime != null && shapeCopyTime != null && shapeCuntomCopyTime > shapeCopyTime)) { + Object shapeCopyContent = relationShapeMap.get("shapeCustomCopyContent");// 从缓存中取得对应用户的复制的图形信息 + if (shapeCopyContent != null) { + elementList = ShapeUtil.getShapeList((String) shapeCopyContent); + } + if (validationPaste(shapeType, levelModel.getMethodId(), subject, elementList) && validationIsNotSameRepository((String) shapeFileId, subject)) { + json.put("shape", (String) relationShapeMap.get("shapeCustomCopyContent")); + json.put("result", "ok"); + json.put("copyContent", "shapeCustomCopyContent"); + json.put("relationShape", relationShapeMap.get("relationShape"));// 返回被动关联数据 + } else { + json.put("result", "noShape"); + } + } + } else { + json.put("result", "error"); + } + ro.setData(json); + return ro.toString(); + } + + /** + * 判断使用哪种进行粘贴 + * + * @param userId 用户id 如admin + * @return + */ + public boolean respositoryDesignerRelationShapeUsed(String userId) { + boolean isAppearCopy = true; + DesignerRelationShapeCacheManager relationShapeCache = DesignerRelationShapeCacheManager.getInstance(); + Map> shapeMap = relationShapeCache.getShapemap(); + if (shapeMap.get(_uc.getUID()) != null && shapeMap.get(_uc.getUID()).get("shapeCopyContent") != null) { + isAppearCopy = true;// 默认为定义复制 + } else if (shapeMap.get(_uc.getUID()) != null && shapeMap.get(_uc.getUID()).get("shapeCustomCopyContent") != null) { + isAppearCopy = false;// 默认为定义复制 + } + return isAppearCopy; + } + + /** + * 更新关联形状的标题 + * + * @param messages + * @param uuid + */ + public void updateShapesName(JSONObject jsonObj, String uuid) { + // JSONObject jsonObj = JSONObject.fromObject(messages); + JSONArray jsonArr1 = jsonObj.getJSONArray("updates"); + if (jsonArr1.size() != 1) { + return; + } + JSONObject jsonObj2 = jsonArr1.getJSONObject(0); + String text = jsonObj2.getString("text"); + String shapeId = jsonObj2.getString("id"); + try { + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + dao.updateByShapeId(uuid, shapeId, text); + dao.updateByRelationShapeId(uuid, shapeId, text); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 关联关系的显示 + * + * @param shapeId 形状id + * @return + */ + public String respositoryDesignerRelationShapeRelevanceShow(String shapeId, String fileId) { + List list = DesignerShapeRelationCache.getListByRelationShapeId(fileId, shapeId); + + JSONArray resultArray = new JSONArray(); + if (list != null && list.size() > 0) { + for (DesignerShapeRelationModel model : list) { + if (!model.getRelationFileId().equals(fileId)) { + continue; + } + // 过滤在文件属性已经删除但是没在关联属性中删除的数据(设置关联时的缺陷处理) + if (UtilString.isEmpty(model.getShapeId())) { + PALRepositoryPropertyModel propertyModel = PALRepositoryPropertyCache.getPropertyByPropertyId(model.getFileId(), model.getAttrId()); + if (propertyModel == null || UtilString.isEmpty(propertyModel.getPropertyValue())) { + continue; + } + } + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("fileId", model.getFileId()); + PALRepositoryModel palModel = PALRepositoryCache.getCache().get(model.getFileId()); + if (palModel != null) { + BaseModel baseModel = CoeDesignerAPIManager.getInstance().getDefinition(palModel.getId(), 0); + if (baseModel != null ) { + String define = baseModel.getDefinition(); + if (!define.contains(model.getShapeId())) { + continue; + } + } else { + continue; + } + object.put("fileName", palModel.getName()); + object.put("fileVersion", palModel.getVersion()); + object.put("fileVersionId", palModel.getVersionId()); + object.put("shapeId", model.getShapeId()); + object.put("shapeText", model.getShapeText()); + if (CoeCooperationAPIManager.getInstance().hasRepositoryPermision(model.getFileId())){ + //文件密级权限校验 + if(HighSecurityUtil.isON() && HighSecurityUtil.fileSecuritySwitch()){ + CoeProcessLevelWeb web = new CoeProcessLevelWeb(_uc); + ResponseObject filePemission = web.checkFilePemission(model.getFileId()); + if (filePemission.isOk()){ + object.put("url", "./w?sid=" + _uc.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&uuid=" + model.getFileId() + "&openType=0&perms=w%2Cd%2Cv&filePerms=-"); + } + }else { + object.put("url", "./w?sid=" + _uc.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&uuid=" + model.getFileId() + "&openType=0&perms=w%2Cd%2Cv&filePerms=-"); + } + } + resultArray.add(object); + } + } + } + + List relationList = DesignerShapeRelationCache.getListByShapeId(fileId, shapeId); + if (relationList != null && relationList.size() > 0) { + for (DesignerShapeRelationModel model : relationList) { + if (!model.getFileId().equals(fileId)) { + continue; + } + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("fileId", model.getRelationFileId()); + PALRepositoryModel palModel = PALRepositoryCache.getCache().get(model.getRelationFileId()); + if (palModel != null) { + BaseModel baseModel = CoeDesignerAPIManager.getInstance().getDefinition(palModel.getId(), 0); + if (baseModel != null ) { + String define = baseModel.getDefinition(); + if (!define.contains(model.getShapeId())) { + continue; + } + } else { + continue; + } + object.put("fileName", palModel.getName()); + object.put("fileVersion", palModel.getVersion()); + object.put("fileVersionId", palModel.getVersionId()); + object.put("shapeId", model.getRelationShapeId()); + object.put("shapeText", model.getRelationShapeText()); + if (CoeCooperationAPIManager.getInstance().hasRepositoryPermision(model.getRelationFileId())){ + //文件密级权限校验 + if(HighSecurityUtil.isON() && HighSecurityUtil.fileSecuritySwitch()){ + CoeProcessLevelWeb web = new CoeProcessLevelWeb(_uc); + ResponseObject filePemission = web.checkFilePemission(model.getFileId()); + if (filePemission.isOk()){ + object.put("url", "./w?sid=" + _uc.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&uuid=" + model.getFileId() + "&openType=0&perms=w%2Cd%2Cv&filePerms=-"); + } + }else { + object.put("url", "./w?sid=" + _uc.getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&uuid=" + model.getFileId() + "&openType=0&perms=w%2Cd%2Cv&filePerms=-"); + } + } + resultArray.add(object); + } + } + } + + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject json = new JSONObject(); + int size = resultArray.size(); + if (size == 0) { + json.put("result", "error"); + } else { + json.put("list", resultArray); + json.put("result", "ok"); + } + ro.setData(json); + return ro.toString(); + } + + /** + * 图形更多属性中,删除一些属性后,需要修改关联表中的关联 + * + * @param fileId + * @param shapeId + * @param attrIds 选中的属性key + * @author zhangming + */ + public String relationCheck(String fileId, String shapeId, String attrIds) { + List list = DesignerShapeRelationCache.getListByShapeId(fileId, shapeId); + if (list != null && list.size() > 0) { + List ids = new ArrayList(); + for (DesignerShapeRelationModel model : list) { + if (model.getShapeId().equals("")) { + continue; + } + String attrId = model.getAttrId(); + if (!attrIds.contains(attrId)) { + ids.add(model.getId()); + } + } + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + dao.deleteByIds(ids); + } + ResponseObject ro = ResponseObject.newOkResponse(); + return ro.toString(); + } + + public String relationSearch(String fileId, String shapeIds) { + StringBuilder relationShapes = new StringBuilder(""); + if (shapeIds != null && !"".equals(shapeIds)) { + String[] shapeArray = shapeIds.split(","); + for (String shapeId : shapeArray) { + Iterator iterator = DesignerShapeRelationCache.getByRelationShapeId(fileId, shapeId); + if (iterator.hasNext()) { + if (relationShapes.length() > 0) { + relationShapes.append(","); + } + relationShapes.append(iterator.next().getRelationShapeText()); + } + } + } + + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("relationShapes", relationShapes.toString()); + return ro.toString(); + } + + /** + * 查询形状节点的relation类型属性数据 + * @param fileId + * @param shapeId + * @param shapeName + * @param shapeCategory + * @return + */ + public String respositoryDesignerRelationShapeRelevanceName(String fileId, String shapeId, String shapeName, String shapeCategory) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryModel m = PALRepositoryCache.getCache().get(fileId); + if (m == null) { + throw new AWSObjectNotFindException("没有查找到关联的文件"); + } + String wsId = m.getWsId(); + if ("bpmn".equals(shapeCategory)) { + shapeCategory = "process.bpmn2"; + } + String shapeMethod = shapeCategory.replace("_", "."); + // 获取有效的属性内容 + List attributeModelList = CoeDesignerShapeAPIManager.getInstance().getValidAttributeModels(wsId, shapeMethod, shapeName, m.getMethodId()); + Map refMap = new HashMap(); + for (PALMethodAttributeModel model : attributeModelList) { + if ("relation".equals(model.getType())) { + refMap.put(model.getKey(), JSON.parseObject(model.getRef())); + } + } + List list = new DesignerShapeRelationDao().getModelListByShapeIdAndRelationShapeId(fileId, shapeId, null, null); + List modelList = new ArrayList(); + for (DesignerShapeRelationModel model : list) { + String attrId = model.getAttrId(); + if (refMap.containsKey(attrId)) { + String relationType = refMap.get(attrId).getString("type"); + if ("file".equals(relationType)) {// 关联的文件 + List list2 = PALRepositoryCache.getByVersionId(wsId, model.getRelationFileId()); + for (PALRepositoryModel model2 : list2) { + if (model2.isUse()) { + model.setRelationShapeText(model2.getName()); + model.setRelationFileId(model2.getId()); + break; + } + } + modelList.add(model); + } else { + modelList.add(model); + } + } + } + // 去重 + List tempList = new ArrayList(); + Set ids = new HashSet<>(); + for (DesignerShapeRelationModel model : modelList) { + String id = model.getFileId() + model.getShapeId() + model.getAttrId() + model.getRelationFileId() + model.getRelationShapeId(); + if (!ids.contains(id)) { + tempList.add(model); + ids.add(id); + } + } + modelList = tempList; + ro.put("shapeRefObj", refMap); + ro.put("relationModelList", modelList); + return ro.toString(); + } + + /** + * 关联关系的保存 + * + * @param relationShapes 关联对象 + * @param shapeId 主动关联图形Id + * @param fileId 主动关联文件Id + * @param shapeGroupId + * @param attrId 关联属性Id + * @param ref 属性配置,属性的数据范围、单多选、关联类型 + * @return + */ + public String respositoryDesignerRelationShapeRelevanceSave(String relationShapes, String shapeId, String fileId, String shapeGroupId, String attrId, String ref) { + JSONObject refObj = JSONObject.parseObject(ref); + String relationType = refObj.getString("type"); + JSONArray relationDataArr = JSONArray.parseArray(relationShapes); + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + List modelList = new ArrayList(); + try { + // 已保存节点删除 + dao.deleteByAttrId(fileId, shapeId, attrId); + for (int i = 0; i < relationDataArr.size(); i++) { + JSONObject object = relationDataArr.getJSONObject(i); + DesignerShapeRelationModel shapeRelationModel = new DesignerShapeRelationModel(); + shapeRelationModel.setId(UUIDGener.getUUID()); + shapeRelationModel.setFileId(object.getString("fileId")); + shapeRelationModel.setShapeId(object.getString("shapeId")); + shapeRelationModel.setShapeText(object.getString("shapeText")); + shapeRelationModel.setAttrId(object.getString("attrId")); + if ("file".equals(relationType)) { + String relationFileId = object.getString("relationFileId"); + // 不管relationFileId是文件ID还是文件VersionId,全部替换成versionId,兼容vue和非vue请求导致数据并不都是versionId的情况 + PALRepositoryModel model = PALRepositoryCache.getCache().get(relationFileId); + if (model == null) { + List models = PALRepositoryCache.getByVersionId(relationFileId); + if (models != null && models.size() > 0) { + relationFileId = models.get(0).getVersionId(); + } + } else { + relationFileId = model.getVersionId(); + } + shapeRelationModel.setRelationFileId(relationFileId); + shapeRelationModel.setRelationShapeId(""); + shapeRelationModel.setRelationShapeText(""); + } else { + shapeRelationModel.setRelationFileId(object.getString("relationFileId")); + shapeRelationModel.setRelationShapeId(object.getString("relationShapeId")); + shapeRelationModel.setRelationShapeText(object.getString("relationShapeText")); + } + dao.insert(shapeRelationModel); + shapeRelationModel.setRelationFileId(object.getString("relationFileId")); + shapeRelationModel.setRelationShapeText(object.getString("relationShapeText"));// 关联模型文件时该值为空,重新赋值 + modelList.add(shapeRelationModel); + } + } catch (Exception e) { + e.printStackTrace(); + ResponseObject responseObject = ResponseObject.newErrResponse("保存关联属性失败"); + return responseObject.toString(); + } + ResponseObject responseObject = ResponseObject.newOkResponse(); + responseObject.put("list", modelList); + return responseObject.toString(); + } + + /** + * 关联与文件的关系 + * + * @param shapeList + * @param shapeId + * @return + */ + private List createAppearModel(List> shapeList, String shapeId) { + List l = new ArrayList(); + for (Map map : shapeList) { + if (shapeId.equals(map.get("shapeId"))) { + continue; + } + DesignerShapeFileRelationModel fileModel = new DesignerShapeFileRelationModel(); + fileModel.setUuid(map.get("shapeId")); + fileModel.setFileUUID(map.get("palRepositoryId")); + l.add(fileModel); + } + return l; + } + + /** + * 删除图形的某个关联属性 + * + * @param fileId + * @param shapeId + * @param attrId + * @return + */ + public String removeRelationByAttrId(String fileId, String shapeId, String attrId) { + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + dao.deleteByAttrId(fileId, shapeId, attrId); + + ResponseObject ro = ResponseObject.newOkResponse(); + return ro.toString(); + } + + /** + * 粘贴时保存关联关系 + * @param shapeMap + * @return + */ + public String pasteRelationSave(String shapeMap, String relationShape, String pasteRelation) { + ResponseObject ro = ResponseObject.newOkResponse(); + // 主动关联关系处理 + JSONArray array = JSONArray.parseArray(shapeMap); + if (array.size() > 0) { + try { + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + // 主动关联关系处理 + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + String copyShapeId = object.getString("copyShapeId"); + String pasteShapeId = object.getString("pasteShapeId"); + String pasteFileId = object.getString("pasteFileId"); + List list = dao.getModelListByShapeId(copyShapeId); + for (DesignerShapeRelationModel copyModel : list) { + DesignerShapeRelationModel pasteModel = new DesignerShapeRelationModel(); + pasteModel.setId(UUIDGener.getUUID()); + pasteModel.setFileId(pasteFileId); + pasteModel.setShapeId(pasteShapeId); + pasteModel.setShapeText(copyModel.getShapeText()); + pasteModel.setAttrId(copyModel.getAttrId()); + pasteModel.setRelationFileId(copyModel.getRelationFileId()); + pasteModel.setRelationShapeId(copyModel.getRelationShapeId()); + pasteModel.setRelationShapeText(copyModel.getRelationShapeText()); + dao.insert(pasteModel); + } + + } + } catch (Exception e) { + e.printStackTrace(); + return ResponseObject.newErrResponse("主动关联关系保存数据库失败").toString(); + } + // 被动关联关系处理 + if("true".equals(pasteRelation)) { + JSONArray jsArray = JSONArray.parseArray(relationShape); +// System.out.println("被动关联的关联关系---" + jsArray); + List list = new ArrayList<>(); + try { + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + // 关联关系存入数据库 + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + String copyShapeId = object.getString("copyShapeId"); + String pasteShapeId = object.getString("pasteShapeId"); + String pasteFileId = object.getString("pasteFileId"); + for (int j = 0; j < jsArray.size(); j++) { + JSONObject object2 = jsArray.getJSONObject(j); + if (!object2.getString("relationShapeId").equals(copyShapeId)) { + continue; + } + DesignerShapeRelationModel relationPasteModel = new DesignerShapeRelationModel(); + relationPasteModel.setId(UUIDGener.getUUID()); + relationPasteModel.setFileId(object2.getString("fileId")); + relationPasteModel.setShapeId(object2.getString("shapeId")); + relationPasteModel.setShapeText(object2.getString("shapeText")); + relationPasteModel.setAttrId(object2.getString("attrId")); + relationPasteModel.setRelationFileId(pasteFileId); + relationPasteModel.setRelationShapeId(pasteShapeId); + relationPasteModel.setRelationShapeText(object2.getString("relationShapeText")); + dao.insert(relationPasteModel); + list.add(relationPasteModel); + } + } + } catch (Exception e) { + e.printStackTrace(); + return ResponseObject.newErrResponse("被动关联关系保存数据库失败").toString(); + } + // 关联关系存到相关模型文件 + if (list.size() > 0) { + Set savedFile = new HashSet<>();// 记录更新成功的文件id + Set fileIds = new HashSet<>();// 记录文件id + for (DesignerShapeRelationModel model : list) { + fileIds.add(model.getFileId()); + } + try { + for (String fileId : fileIds) { + PALRepositoryModel palModel = PALRepositoryCache.getCache().get(fileId); + if (palModel == null) { + break; + } + BaseModel model = CoeDesignerAPIManager.getInstance().getDefinition(palModel.getId(), 0); + if (model == null) { + break; + } + String define = model.getDefinition(); + JSONObject definition = JSONObject.parseObject(define); + JSONObject elements = definition.getJSONObject("elements"); + Iterator it = elements.keySet().iterator(); + while (it.hasNext()) { + String key = it.next(); + JSONObject shape = elements.getJSONObject(key); + String shapeName = shape.getString("name"); + for (DesignerShapeRelationModel model2 : list) { + if (!model2.getFileId().equals(fileId)) { + continue; + } + if (shape.getString("id").equals(model2.getShapeId())) { + if(!"linker".equals(shapeName)) { + shape = updateShapeAttribute(shape, model2); + elements.put(key, shape); + } + } + } + } + // 保存文件 + model.setDefinition(definition.toString()); + CoeDesignerAPIManager.getInstance().storeDefinition(model);// dao操作 + savedFile.add(fileId); + } + } catch (Exception e) { + e.printStackTrace(); + return ResponseObject.newErrResponse("更新被动关联关系相关流程文件失败").toString(); + } + JSONArray jArray = new JSONArray(); + if (savedFile.size() > 0) { + for (String fileId : savedFile) { + PALRepositoryModel palModel = PALRepositoryCache.getCache().get(fileId); + if (palModel != null) { + JSONObject object = new JSONObject(); + object.put("id", palModel.getId()); + object.put("name", palModel.getName() + " " + VersionUtil.getVersionStrV(palModel.getVersion()) ); + jArray.add(object); + } + } + } + ro.put("updated", jArray); + } + } + } + return ro.toString(); + } + + /** + * 更新图形属性 + * @param shape + * @param list + * @return + */ + private JSONObject updateShapeAttribute(JSONObject shape, DesignerShapeRelationModel model2) { + if (shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + if (!dataAttributes.isEmpty() && dataAttributes.size() > 0) { + for (Object object : dataAttributes) { + JSONObject obj = (JSONObject) object; + if (obj.containsKey("attributesJsonArray")) { + JSONArray attributesJsonArray = obj.getJSONArray("attributesJsonArray"); + for (int i = 0; i < attributesJsonArray.size(); i++) { + JSONObject object2 = attributesJsonArray.getJSONObject(i); + if(object2 == null || "null".equals(object2.toString())) { + continue; //attributesJsonArray包含空时,跳过空 + } + if (object2.getString("id").equals(model2.getAttrId())) { + if ("".equals(object2.getJSONArray("value"))) { // 空值直接跳过 + continue; + } + JSONArray jArray = object2.getJSONArray("value"); + if (jArray.size() > 0) { + if (jArray.contains(model2.getRelationShapeId())) { + continue; + } + jArray.add(model2.getRelationShapeId()); + } + } + } + } + } + } + } + if(shape.get("attributesJsonArray") != null) { + JSONArray attributesJsonArray = shape.getJSONArray("attributesJsonArray"); + for (int i = 0; i < attributesJsonArray.size(); i++) { + JSONObject object2 = attributesJsonArray.getJSONObject(i); + if(object2 == null || "null".equals(object2.toString())) { + continue; //attributesJsonArray包含空时,跳过空 + } + if (object2.getString("id").equals(model2.getAttrId())) { + if ("".equals(object2.getJSONArray("value"))) { // 空值直接跳过 + continue; + } + JSONArray jArray = object2.getJSONArray("value"); + if (jArray.size() > 0) { + if (jArray.contains(model2.getRelationShapeId())) { + continue; + } + jArray.add(model2.getRelationShapeId()); + } + } + } + } + return shape; + } + + /** + * 根据流程源文件校验节点关联属性是否存在有关联节点id但是数据库无该关联信息的情况 + * 根据流程源文件反向插入关联数据到APP_ACT_COE_PAL_SHAPE_RLAT + * @param wsId + * @return + */ + public String checkAndRepairShapeRelation(String wsId) { + ResponseObject ro = ResponseObject.newOkResponse(); + // 获取所有模型与节点的对应关系 +// System.out.println("关联关系DB数据恢复"); +// System.out.println("资产库Id:"+ wsId); +// System.out.println("查询资产库下所有模型的节点"); + long a = System.currentTimeMillis(); + Iterator models = PALRepositoryCache.getCache().getByWsId(wsId); + Map shapeIdMap = new HashMap<>(); + Map shapeNameMap = new HashMap<>(); + while (models.hasNext()) { + PALRepositoryModel model = models.next(); + if (model == null || "default".equals(model.getMethodId()) || model.getFilePath() == null || "".equals(model.getFilePath())) { + continue; + } + List> list2 = CoeDesignerUtil.getShapeMessageJson2(model.getId()); + if (list2 == null || list2.size() == 0) continue; + for (Map map : list2) { + if (map != null) { + shapeIdMap.put((String)map.get("id"), model.getId()); + shapeNameMap.put((String)map.get("id"), (String)map.get("name")); + } + } + } + System.out.println("节点个数:" + shapeIdMap.size()); + System.out.println("查询时长:" + (System.currentTimeMillis() - a) + "ms"); + System.out.println("查询数据库中被删除的节点关联数据"); + Iterator list = PALRepositoryCache.getCache().getByWsId(wsId); + int count = 0; + com.alibaba.fastjson.JSONArray result = new com.alibaba.fastjson.JSONArray(); + com.alibaba.fastjson.JSONArray dataError = new com.alibaba.fastjson.JSONArray(); + while (list.hasNext()) { + PALRepositoryModel model = list.next(); + if (model == null || "default".equals(model.getMethodId()) || model.getFilePath() == null || "".equals(model.getFilePath())) { + continue; + } + // 获取文件 + List> list2 = CoeDesignerUtil.getShapeMessageJson2(model.getId()); + if (list2 == null || list2.size() == 0) continue; + for (Map map : list2) { + if (map != null) { + com.alibaba.fastjson.JSONObject attr = (com.alibaba.fastjson.JSONObject)map.get("attributes"); + if (attr != null && !attr.isEmpty()) { + if (attr.containsKey("attributesJsonArray")) { + com.alibaba.fastjson.JSONArray attrJson = attr.getJSONArray("attributesJsonArray"); + for (int i = 0; i < attrJson.size(); i++) { + com.alibaba.fastjson.JSONObject object = attrJson.getJSONObject(i); + if (object == null || "null".equals(object.toString())) { + continue; //跳过attributesJsonArray内的空内容 + } + String id = object.getString("id"); + String type = object.getString("type"); + if ("relation".equals(type)) { + Object value = (Object) object.get("value"); + if ("".equals(value)) { + continue; + } + if(!(value instanceof com.alibaba.fastjson.JSONArray)) { + com.alibaba.fastjson.JSONObject dataErrorObj = new com.alibaba.fastjson.JSONObject(); + dataErrorObj.put("msg", "模型源文件关系属性格式无法解析"); + dataErrorObj.put("id", model.getId()); + dataErrorObj.put("name", model.getName() +" "+ VersionUtil.getVersionStrV(model.getVersion())); + dataErrorObj.put("shapeId", map.get("id")); + dataErrorObj.put("shapeName", map.get("name")); + dataErrorObj.put("attrId", id); + dataError.add(dataErrorObj); + continue; + } + com.alibaba.fastjson.JSONArray values = (com.alibaba.fastjson.JSONArray)value; + + List relationModels = DesignerShapeRelationCache.getListByAttrId(model.getId(), (String)map.get("id"), id); + for (int j = 0; j < values.size(); j++) { + String v = values.getString(j); + boolean flag = true; + for (DesignerShapeRelationModel designerShapeRelationModel : relationModels) { + if(designerShapeRelationModel.getRelationShapeId().equals(v)) { + flag = false; + break; + } + } + if (flag) {// 数据库中没有该关联属性 + com.alibaba.fastjson.JSONObject object2 = new com.alibaba.fastjson.JSONObject(); + object2.put("processId", model.getId()); + object2.put("processName", model.getName()); + object2.put("processVer", VersionUtil.getVersionStr(model.getVersion())); + // 以下为关联信息 + object2.put("id", UUIDGener.getUUID()); + object2.put("fileId", model.getId()); + object2.put("shapeId", (String)map.get("id")); + object2.put("shapeText", (String)map.get("name")); + object2.put("attrId", id); + object2.put("relationShapeId", v); + + String relationFileId = ""; + String relationShapeText = ""; + if("rear_process".equals(id) || "lead_process".equals(id)) { // 前置流程后置流程 + PALRepositoryModel model2 = PALRepositoryCache.getCache().get(v); + if (model2 != null) { // model2为空跳过 + relationFileId = model2.getParentId(); + relationShapeText = model2.getName(); + } + } else {//节点关联 + relationFileId = (String)shapeIdMap.get(v); + relationShapeText = (String)shapeNameMap.get(v); + } + if (relationFileId != null && !"".equals(relationFileId)) { + count++; + object2.put("relationFileId", relationFileId); + object2.put("relationShapeText", relationShapeText); + result.add(object2); + } + } + } + } + } + } + } + + } + } + } + System.out.println("被删除个数" + count); + if(count == 0) { // 关联关系正常 + ro.put("result", "normal"); + } else { + ro.put("result", "exception"); + } + ro.put("count", count); + ro.put("lossData", result); + ro.put("errorData", dataError); + System.out.println("被删除数据:"); + System.out.println(result.toString()); + System.out.println("解析失败模型:"); + System.out.println(dataError.toString()); + + return ro.toString(); + } + + /** + * 关联关系DB数据恢复 + * @param lossData + * @return + */ + public String shapeRelationRestore(String lossData) { + ResponseObject ro = ResponseObject.newOkResponse(); + com.alibaba.fastjson.JSONArray array = com.alibaba.fastjson.JSONArray.parseArray(lossData); + int status = 0; + if(!array.isEmpty() && array.size() > 0) { + List list = new ArrayList<>(); + for (int i = 0; i < array.size(); i++) { + com.alibaba.fastjson.JSONObject object = array.getJSONObject(i); + if (object == null || object.isEmpty()) continue; + DesignerShapeRelationModel model = new DesignerShapeRelationModel(); + model.setId(object.getString("id")); + model.setFileId(object.getString("fileId")); + model.setShapeId(object.getString("shapeId")); + model.setShapeText(object.getString("shapeText")); + model.setAttrId(object.getString("attrId")); + model.setRelationFileId(object.getString("relationFileId")); + model.setRelationShapeId(object.getString("relationShapeId")); + model.setRelationShapeText(object.getString("relationShapeText")); + list.add(model); + } + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + boolean flag = dao.barchInsert(list); + if (flag) { + status = 2;//成功 + } else { + status = 3;//失败 + } + } else { + status = 1;// 无数据 + } + if (status == 1) { + ro.put("result", "ok"); + ro.put("msg", "没有需要恢复的数据"); + } if (status == 2) { + ro.put("result", "ok"); + ro.put("msg", "恢复成功"); + } else { + ro.put("result", "error"); + ro.put("msg", "恢复失败"); + } + return ro.toString(); + } + + /** + * 手工保存流程时更新/删除图形的关联关系 + * @param uuid 流程id + * @param messages + * @return + */ + public void updateDesignerRelationText(String uuid, String messages) { + Map updateMap = new HashMap<>(); + Map deleteMap = new HashMap<>(); + JSONObject mesageObject = JSONObject.parseObject(messages); + Iterator iterator = mesageObject.keySet().iterator(); + while (iterator.hasNext()) { + String shapeId = iterator.next(); + JSONObject shape = JSONObject.parseObject(mesageObject.getString(shapeId)); + if (DesignerShapeRelationCache.getByRelationShapeId(uuid, shapeId).hasNext() || DesignerShapeRelationCache.getByShapeId(uuid, shapeId).hasNext()) { + if ("create".equals(shape.getString("action")) || "update".equals(shape.getString("action"))) { + updateMap.put(shapeId, shape.getString("name")); + } + if ("remove".equals(shape.getString("action"))) { + deleteMap.put(shapeId, shape.getString("name")); + } + } + } + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + if (!deleteMap.isEmpty()) { + dao.batchDeleteByShapeId(uuid, deleteMap); + } + if (!updateMap.isEmpty()) { + dao.batchUpdateByShapeId(uuid, updateMap); + dao.batchUpdateByRelationShapeId(uuid, updateMap); + } + } + + /** + * 保存节点的地址簿属性内容到关联表 + * @return + */ + public String saveAddressShapeData(String data) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject object = JSONObject.parseObject(data); + String fileId = object.getString("uuid"); + String shapeId = object.getString("shapeId"); + String attrId = object.getString("attrId"); + String addressType = object.getString("addressType"); + String value = object.getString("value"); + String shapeText = object.getString("shapeText"); + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + // 删除全部 + dao.deleteByAttrId(fileId, shapeId, attrId); + // 保存新数据 + List modelList = new ArrayList(); + if (!UtilString.isEmpty(value)) { + String [] values = value.split(" "); + for (String str : values) { + if (!UtilString.isEmpty(str)) { + DesignerShapeRelationModel shapeRelationModel = new DesignerShapeRelationModel(); + shapeRelationModel.setId(UUIDGener.getUUID()); + shapeRelationModel.setFileId(fileId); + shapeRelationModel.setShapeId(shapeId); + shapeRelationModel.setShapeText(shapeText); + shapeRelationModel.setAttrId(attrId); + shapeRelationModel.setRelationFileId("00000000-0000-0000-0000-000000000000"); + shapeRelationModel.setRelationShapeId(str); + String relationShapeText = ""; + if ("deptAddress".equals(addressType)) { + relationShapeText = SDK.getORGAPI().getDepartmentById(str).getName(); + } + if ("userAddress".equals(addressType)) { + relationShapeText = SDK.getORGAPI().getUser(str).getUserName(); + } + shapeRelationModel.setRelationShapeText(relationShapeText); + modelList.add(shapeRelationModel); + } + } + } + if (modelList.size() > 0) { + dao.barchInsert(modelList); + } + return ro.toString(); + } + + /** + * 获取关联的地址簿id + * @param objIds + * @param shapeId + * @return + */ + public String getAddressShape(String objIds, String shapeId, String uuid) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject object = new JSONObject(); + JSONArray array = JSONArray.parseArray(objIds); + if (!array.isEmpty()) { + for (int i = 0; i < array.size(); i++) { + String objId = array.getString(i); + List list = DesignerShapeRelationCache.getListByAttrId(uuid, shapeId, objId); + StringBuilder ids = new StringBuilder(); + if (list != null) { + for (int j = 0; j < list.size(); j++) { + ids.append(list.get(j).getRelationShapeId()); + if (j < list.size() - 1) { + ids.append(" "); + } + } + } + object.put(objId, ids.toString()); + } + } + ro.put("data", object); + return ro.toString(); + } + + /** + * 获取地址簿名称字符串 + * @param objIds + * @param shapeId + * @param uuid + * @param type + * @return + */ + public String getAddressNames(String objIds, String shapeId, String uuid, String type) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject object = new JSONObject(); + JSONArray array = JSONArray.parseArray(objIds); + Set idSet = new HashSet<>(); + if (!array.isEmpty()) { + for (int i = 0; i < array.size(); i++) { + String objId = array.getString(i); + List list = DesignerShapeRelationCache.getListByAttrId(uuid, shapeId, objId); + if (list != null) { + for (int j = 0; j < list.size(); j++) { + idSet.add(list.get(j).getRelationShapeId()); + } + } + StringBuilder sb = new StringBuilder(); + if ("userAddress".equals(type)) { + Iterator iterator = idSet.iterator(); + while (iterator.hasNext()) { + String id = iterator.next(); + UserModel user = SDK.getORGAPI().getUser(id); + if (user != null) { + sb.append(user.getUserName()).append(" "); + } + } + } + if ("deptAddress".equals(type)) { + Iterator iterator = idSet.iterator(); + while (iterator.hasNext()) { + String id = iterator.next(); + DepartmentModel model = SDK.getORGAPI().getDepartmentById(id); + if (model != null) { + sb.append(model.getName()).append(" "); + } + } + } + object.put(objId, sb.toString()); + idSet.clear(); + } + } + + + ro.put("data", object); + return ro.toString(); + } + + /** + * 获取aws平台的组织机构/岗位角色树和已选择的数据 + * @param wsId + * @param fileId + * @param shapeId + * @param attrId + * @return + */ + public String getAwsOrgPortal(String wsId, String fileId, String shapeId, String attrId, String ref) { + Map map = new HashMap<>(); + JSONObject refObj = JSONObject.parseObject(ref); + map.put("wsId", wsId); + map.put("shapeId", shapeId); + map.put("attrId", attrId); + map.put("fileId", fileId); + map.put("sid", _uc.getSessionId()); + map.put("refObj", refObj); + + JSONArray treeData = new JSONArray(); + String scope = refObj.getString("scope"); + if (scope.contains("department") || scope.contains("user")) {// 部门或人员,则显示部门 + // 组织机构 + JSONObject org = new JSONObject(); + org.put("id", "aws_node_org"); + org.put("name", I18nRes.findValue(AppsConst.SYS_APP_PLATFORM, "组织")); + org.put("open", false); + org.put("nocheck", true); + org.put("type", "orgRoot"); + org.put("uuid", "orgRoot"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.ORG_ROOT_ICON_CODE); + iconFont.put("color", BpmOrgUtil.ORG_ROOT_ICON_COLOR); + org.put("iconFont", iconFont); + treeData.add(org); +// // 单位 +// JSONArray companyArr = getCompanyTree(); +// if (!isEmpty(companyArr)) { +// for (int i = 0; i < companyArr.size(); i++) { +// treeData.add(companyArr.getJSONObject(i)); +// } +// } + } + if (scope.contains("position")) {// 显示岗位类角色 + // 岗位 + JSONObject position = new JSONObject(); + position.put("id", "aws_node_position"); + position.put("name", I18nRes.findValue(AppsConst.SYS_APP_PLATFORM, "岗位")); + position.put("open", false); + position.put("nocheck", true); + position.put("type", "positionRoot"); + position.put("uuid", "positionRoot"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.POSITION_ROOT_ICON_CODE); + iconFont.put("color", BpmOrgUtil.POSITION_ROOT_ICON_COLOR); + position.put("iconFont", iconFont); + treeData.add(position); + } + if (scope.contains("role")) {// 显示角色类角色 + // 角色 + JSONObject role = new JSONObject(); + role.put("id", "aws_node_role"); + role.put("name", I18nRes.findValue(AppsConst.SYS_APP_PLATFORM, "角色")); + role.put("open", false); + role.put("nocheck", true); + role.put("type", "roleRoot"); + role.put("uuid", "roleRoot"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.ROLE_ROOT_ICON_CODE); + iconFont.put("color", BpmOrgUtil.ROLE_ROOT_ICON_COLOR); + role.put("iconFont", iconFont); + treeData.add(role); + } + + // 获取已保存数据 + JSONObject o = new JSONObject(); + Iterator modelIterator = DesignerShapeRelationCache.getByAttrId(fileId, shapeId, attrId); + Set filter = new HashSet(); + if (modelIterator != null) { + while (modelIterator.hasNext()) { + DesignerShapeRelationModel model = modelIterator.next(); + if ("00000000-0000-0000-0000-000000000000".equals(model.getRelationFileId()) && "00000000-0000-0000-0000-000000000000".equals(model.getRelationShapeId())) { + JSONObject object = JSONObject.parseObject(model.getRelationShapeText()); + boolean flag = false; + // 查询最新名称 + if (scope.contains("department") && "department".equals(object.getString("type"))) { + DepartmentModel dept = SDK.getORGAPI().getDepartmentById(object.getString("id")); + if (dept != null && !filter.contains(dept.getId())) { + flag = true; + object.put("name", dept.getName()); + filter.add(dept.getId()); + } + } + if (scope.contains("user") && "user".equals(object.getString("type"))) { + UserModel user = SDK.getORGAPI().getUser(object.getString("id")); + if (user != null && !filter.contains(user.getUID())) { + flag = true; + object.put("name", user.getUserName()); + filter.add(user.getUID()); + } + } + if (scope.contains("position") && "position".equals(object.getString("type"))) { + RoleModel roleModel = SDK.getORGAPI().getRoleById(object.getString("id")); + if (roleModel != null && !filter.contains(roleModel.getId())) { + flag = true; + object.put("name", roleModel.getName()); + filter.add(roleModel.getId()); + } + } + if (scope.contains("role") && "role".equals(object.getString("type"))) { + RoleModel roleModel = SDK.getORGAPI().getRoleById(object.getString("id")); + if (roleModel != null && !filter.contains(roleModel.getId())) { + flag = true; + object.put("name", roleModel.getName()); + filter.add(roleModel.getId()); + } + } + if (flag) { + o.put(object.getString("id"), object); + } + } + } + } + map.put("treeData", treeData); + map.put("checkedList", o); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.designer.shapes.aws.org.htm", map); + } + + private boolean isEmpty(List list) { + return (list == null || list.size() == 0); + } + + /** + * 获取aws平台树结构,单位为获取登录用户所属单位 + * 所有数据皆为未注销 + * @param pid + * @param uuid + * @param type + * @return + */ + public String getAwsOrgTreeData(String pid, String uuid, String type, String scope, boolean multiple) { + JSONArray data = new JSONArray(); + switch (type) { + case "orgRoot":// 获取单位 + data = getCompanyTree(); + break; + case "company":// 获取单位下第一级部门 + data = getDepartmentByCompany(pid, uuid, scope, multiple); + break; + case "department":// 获取部门下部门和人员 + data = getDepartmentByParent(pid, uuid, scope, multiple); + break; + case "roleRoot":// 获取角色下分组 + data = getRoleGroupTree(); + break; + case "roleGroup":// 获取角色分组下的具体角色 + data = getRoleByGroupId(pid, uuid, scope, multiple); + break; + case "positionRoot":// 获取岗位下分组 + data = getPositionGroupTree(); + break; + case "positionGroup":// 获取岗位分组下的具体岗位 + data = getPositionByGroupId(pid, uuid, scope, multiple); + break; + } + return data.toString(); + } + + /** + * 获取aws平台树结构,所有数据皆是当前人能够有权限看到的单位 + * 所有数据皆为未注销 + * @param pid + * @param uuid + * @param type + * @return + */ + public String getPermAwsOrgTreeData(String pid, String uuid, String type, String scope, boolean multiple) { + JSONArray data = new JSONArray(); + switch (type) { + case "orgRoot":// 获取单位 + data = getValidPermCompany(_uc); + break; + case "company":// 获取单位下第一级部门 + data = getDepartmentByCompany(pid, uuid, scope, multiple); + break; + case "department":// 获取部门下部门和人员 + data = getDepartmentByParent(pid, uuid, scope, multiple); + break; + case "roleRoot":// 获取角色下分组 + data = getRoleGroupTree(); + break; + case "roleGroup":// 获取角色分组下的具体角色 + data = getRoleByGroupId(pid, uuid, scope, multiple); + break; + case "positionRoot":// 获取岗位下分组 + data = getPositionGroupTree(); + break; + case "positionGroup":// 获取岗位分组下的具体岗位 + data = getPositionByGroupId(pid, uuid, scope, multiple); + break; + } + return data.toString(); + } + + /** + * 获取有效有权限的岗位 + * @param me + * @param pid + * @param uuid + * @param multiple + * @return + */ + public JSONArray getValidPermPositionByGroup(UserContext me, String pid, String uuid, boolean multiple) { + JSONArray result = new JSONArray(); + // 获取岗位列表 + JSONObject object = new JSONObject(); + object.put("showRole", true); + String arr = new CompanyWeb(me).getOrganizationTreeJsonData("RoleGroup", uuid, "", "AWS_NODE_RG_ID_" + new MD5().toDigest(uuid), object); + JSONArray roleArr = JSONArray.parseArray(arr); + for (int i = 0; i < roleArr.size(); i++) { + JSONObject roleObj = roleArr.getJSONObject(i); + int roleType = roleObj.getInteger("roleType"); + if (roleType == 1) { + String id = roleObj.getString("id").replace("AWS_NODE_OR_ID_", ""); + RoleModel model = SDK.getORGAPI().getRoleById(id); + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_position_" + model.getId()); + obj.put("pid", pid); + obj.put("uuid", model.getId()); + obj.put("name", model.getName()); + obj.put("nocheck", !multiple); + obj.put("type", "position"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.POSITION_ICON_CODE); + iconFont.put("color", BpmOrgUtil.POSITION_ICON_COLOR); + obj.put("iconFont", iconFont); + result.add(obj); + } + } + return result; + } + + /** + * 获取有权限有效的岗位组 + * @param me + * @return + */ + public JSONArray getValidPermPositionGroup(UserContext me) { + JSONArray result = new JSONArray(); + // 获取岗位组 + JSONObject object = new JSONObject(); + object.put("showRole", true); + String arr = new CompanyWeb(me).getOrganizationTreeJsonData("RoleRoot", "", "", "AWS_NODE_RT_ID_Role", object); + JSONArray roleGroupArr = JSONArray.parseArray(arr); + for (int i = 0; i < roleGroupArr.size(); i++) { + JSONObject o = roleGroupArr.getJSONObject(i); + String groupName = o.getString("groupName"); + List roleModels = SDK.getORGAPI().getRolesByCategory(groupName); + for (RoleModel model : roleModels) { + if (model.getRoleType() == 1) { + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_positionGroup_" + model.getName()); + obj.put("pid", "aws_node_position"); + obj.put("uuid", model.getName()); + obj.put("name", model.getName()); + obj.put("nocheck", true); + obj.put("open", false); + obj.put("type", "positionGroup"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.POSITION_GROUP_ICON_CODE); + iconFont.put("color", BpmOrgUtil.POSITION_GROUP_ICON_COLOR); + obj.put("iconFont", iconFont); + result.add(obj); + } + } + } + return result; + } + + /** + * 根据角色组获取对应的角色 + * @param me + * @return + */ + public JSONArray getValidPermRoleByGroup(UserContext me, String pid, String uuid, boolean multiple) { + JSONArray result = new JSONArray(); + // 获取角色列表 + JSONObject object = new JSONObject(); + object.put("showRole", true); + String arr = new CompanyWeb(me).getOrganizationTreeJsonData("RoleGroup", uuid, "", "AWS_NODE_RG_ID_" + new MD5().toDigest(uuid), object); + JSONArray roleArr = JSONArray.parseArray(arr); + for (int i = 0; i < roleArr.size(); i++) { + JSONObject roleObj = roleArr.getJSONObject(i); + int roleType = roleObj.getInteger("roleType"); + if (roleType == 0) { + String id = roleObj.getString("id").replace("AWS_NODE_OR_ID_", ""); + RoleModel model = SDK.getORGAPI().getRoleById(id); + // 获取角色类角色 + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_role_" + model.getId()); + obj.put("pid", pid); + obj.put("uuid", model.getId()); + obj.put("name", model.getName()); + obj.put("nocheck", !multiple); + obj.put("type", "role"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code",BpmOrgUtil.ROLE_ICON_CODE); + iconFont.put("color", BpmOrgUtil.ROLE_ICON_COLOR); + obj.put("iconFont", iconFont); + result.add(obj); + } + } + return result; + } + + /** + * 获取角色组 + * @return + */ + public JSONArray getValidPermRoleGroup(UserContext me) { + JSONArray result = new JSONArray(); + JSONObject object = new JSONObject(); + object.put("showRole", true); + String arr = new CompanyWeb(me).getOrganizationTreeJsonData("RoleRoot", "", "", "AWS_NODE_RT_ID_Role", object); + JSONArray roleGroupArr = JSONArray.parseArray(arr); + for (int i = 0; i < roleGroupArr.size(); i++) { + JSONObject o = roleGroupArr.getJSONObject(i); + String groupName = o.getString("groupName"); + List roleModels = SDK.getORGAPI().getRolesByCategory(groupName); + for (RoleModel model : roleModels) { + if (model.getRoleType() == 0) { + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_roleGroup_" + model.getName()); + obj.put("pid", "aws_node_role"); + obj.put("uuid", model.getName()); + obj.put("name", model.getName()); + obj.put("nocheck", true); + obj.put("open", false); + obj.put("type", "roleGroup"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.ROLE_GROUP_ICON_CODE); + iconFont.put("color", BpmOrgUtil.ROLE_GROUP_ICON_COLOR); + obj.put("iconFont", iconFont); + result.add(obj); + } + } + } + return result; + } + + /** + * 获取有效的部门的子部门、岗位角色、用户 + * @param me + * @param pid + * @param uuid + * @param scope + * @param multiple + * @return + */ + public JSONArray getValidPermDepartmentByParent(UserContext me, String pid, String uuid, String scope, boolean multiple) { + JSONArray result = new JSONArray(); + // 获取部门下的子部门以及角色 + JSONObject object = new JSONObject(); + object.put("showRole", true); + String arr = new CompanyWeb(me).getOrganizationTreeJsonData("Department", uuid, "", "AWS_NODE_OD_ID_" + uuid, object); + JSONArray deptArr = JSONArray.parseArray(arr); + for (int i = 0; i < deptArr.size(); i++) { + JSONObject o = deptArr.getJSONObject(i); + String objType = o.getString("type"); + if ("Department".equals(objType)) {// 部门 + String id = o.getString("param1"); + DepartmentModel model = SDK.getORGAPI().getDepartmentById(id); + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_department_" + model.getId()); + obj.put("pid", pid); + obj.put("uuid", model.getId()); + obj.put("name", model.getName()); + obj.put("nocheck", !scope.contains("department") || !multiple); + obj.put("open", false); + obj.put("type", "department"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.DEPARTMENT_ICON_CODE); + iconFont.put("color", BpmOrgUtil.DEPARTMENT_ICON_COLOR); + obj.put("iconFont", iconFont); + result.add(obj); + } else if ("departmentRole".equals(objType)) {// 角色、岗位 + String id = o.getString("param1"); + // todo + + } else if ("User".equals(objType)) { + String uid = o.getString("uid"); + UserModel model = SDK.getORGAPI().getUser(uid); + if (model == null || model.isClosed()) { + continue; + } + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_user_" + model.getUID()); + obj.put("pid", pid); + obj.put("uuid", model.getUID()); + obj.put("name", model.getUserName()); + obj.put("nocheck", !multiple); + // obj.put("open", false); + obj.put("type", "user"); + if (model.isManager()) { + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.MANAGER_USER_ICON_CODE); + iconFont.put("color", BpmOrgUtil.MANAGER_USER_ICON_COLOR); + obj.put("iconFont", iconFont); + } else { + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.NORMAL_USER_ICON_CODE); + iconFont.put("color", BpmOrgUtil.NORMAL_USER_ICON_COLOR); + obj.put("iconFont", iconFont); + } + result.add(obj); + } + } + return result; + } + + /** + * 获取单位下部门 + * @param me + * @param pid + * @param uuid + * @param scope + * @param multiple + * @return + */ + public JSONArray getValidPermDepartmentByCompany(UserContext me, String pid, String uuid, String scope, boolean multiple) { + JSONArray result = new JSONArray(); + JSONObject object = new JSONObject(); + object.put("showRole", true); + String arr = new CompanyWeb(me).getOrganizationTreeJsonData("Company", uuid, "", "AWS_NODE_OC_ID_" + uuid, object); + JSONArray deptArr = JSONArray.parseArray(arr); + for (int i = 0; i < deptArr.size(); i++) { + JSONObject deptObj = deptArr.getJSONObject(i); + String id = deptObj.getString("param1"); + DepartmentModel model = SDK.getORGAPI().getDepartmentById(id); + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_department_" + model.getId()); + obj.put("pid", pid); + obj.put("uuid", model.getId()); + obj.put("name", model.getName()); + obj.put("nocheck", !scope.contains("department") || !multiple); + obj.put("open", false); + obj.put("type", "department"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.DEPARTMENT_ICON_CODE); + iconFont.put("color", BpmOrgUtil.DEPARTMENT_ICON_COLOR); + obj.put("iconFont", iconFont); + result.add(obj); + } + return result; + } + + public boolean hasAC(String userId, String resourceId, String resourceType) { + // 获取AC权限列表 + List acList = Cache.iteratorToList(AccessControlCache.getACList(resourceType, resourceId)); + for (AccessControlModel acModel : acList) { + if ("company".equals(acModel._assignmentType)) {// 单位 + // acModel单位的人员可访问resourceId对象 + // 当前用户所属单位与二级权限单位匹配,可访问 + if (SDK.getORGAPI().getCompanyByUser(userId).getId().equals(acModel._assignmentId)) { + return true; + } + // 获取用户所有兼职单位,若包含当前单位,可访问 + List companyIdList = SDK.getORGAPI().getConcurrentlyCompanyId(userId); + for (String companyId : companyIdList) { + if (companyId.equals(acModel._assignmentId)) { + return true; + } + } + } else if ("department".equals(acModel._assignmentType)) {// 部门 + // acModel部门的人员可访问resourceId对象 + // 当前用户所属部门与二级权限部门匹配,可访问 + if (SDK.getORGAPI().getDepartmentByUser(userId).equals(acModel._assignmentId)) { + return true; + } + // 获取部门下所有用户(包含兼职),若包含当前用户,可访问 + List userList = SDK.getORGAPI().getAllUsersByDepartment(acModel._assignmentId); + for (UserModel user : userList) { + if (user.getUID().equals(userId)) { + return true; + } + } + } else if ("user".equals(acModel._assignmentType)) {// 用户 + // 当前用户与二级权限用户匹配,可访问 + if (userId.equals(acModel._assignmentId)) { + return true; + } + } else if ("role".equals(acModel._assignmentType)) {// 岗位角色 + // 当前用户所属岗位角色与二级权限岗位角色匹配,可访问 + if (SDK.getORGAPI().getRoleByUser(userId).getId().equals(acModel._assignmentId)) { + return true; + } + // 按角色查询用户对象(包含兼职到参数指定的角色的用户),包含当前用户,可访问 + List userModelList = SDK.getORGAPI().getUsersByRoleWithMap(acModel._assignmentId); + for (UserModel user : userModelList) { + if (user.getUID().equals(userId)) { + return true; + } + } + } + } + return false; + } + + /** + * 获取个人有权限且有效的单位(包含二级管理员权限) + * @param me + * @return + */ + public JSONArray getValidPermCompany(UserContext me) { + List companyIds = new ArrayList<>(); + JSONArray result = new JSONArray(); + // 获取顶级单位数据 + List companyModels = SDK.getORGAPI().getCompanys(); + for (CompanyModel company : companyModels) { + if (!company.isClosed() && company.isValid()) { + // 当前人所属单位,可访问 + if (SDK.getORGAPI().getCompanyByUser(me.getUID()).equals(company.getId())) { + companyIds.add(company.getId()); + } else if (hasAC(me.getUID(), company.getId(), "platform.companyAdmin")) { + companyIds.add(company.getId()); + } + } + } + for (String companyId : companyIds) { + CompanyModel model = SDK.getORGAPI().getCompanyById(companyId); + if (!model.isClosed() && model.isValid()) { + JSONObject com = new JSONObject(); + com.put("id", "aws_node_company_" + model.getId()); + com.put("pid", "aws_node_org"); + com.put("uuid", model.getId()); + com.put("name", model.getName()); + com.put("nocheck", true); + com.put("open", false); + com.put("type", "company"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.COMPANY_ICON_CODE); + iconFont.put("color", BpmOrgUtil.COMPANY_ICON_COLOR); + com.put("iconFont", iconFont); + result.add(com); + } + } + return result; + } + + /** + * 获取岗位 + * @param pid + * @param uuid 此处uuid为岗位组名称 + * @return + */ + public JSONArray getPositionByGroupId(String pid, String uuid, String scope, boolean multiple) { + JSONArray data = new JSONArray(); + List roleList = SDK.getORGAPI().getRolesByCategory(uuid); + if (!isEmpty(roleList)) { + for (RoleModel model : roleList) { + if (model != null && model.getRoleType() == 1) { + // 获取岗位类角色 + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_position_" + model.getId()); + obj.put("pid", pid); + obj.put("uuid", model.getId()); + obj.put("name", model.getName()); + obj.put("nocheck", !multiple); + obj.put("type", "position"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.POSITION_ICON_CODE); + iconFont.put("color", BpmOrgUtil.POSITION_ICON_COLOR); + obj.put("iconFont", iconFont); + data.add(obj); + } + } + } + return data; + } + + /** + * 获取角色 + * @param pid + * @param uuid 此处uuid为角色组名称 + * @return + */ + public JSONArray getRoleByGroupId(String pid, String uuid, String scope, boolean multiple) { + JSONArray data = new JSONArray(); + List roleList = SDK.getORGAPI().getRolesByCategory(uuid); + if (!isEmpty(roleList)) { + for (RoleModel model : roleList) { + if (model != null && model.getRoleType() == 0) { + // 获取角色类角色 + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_role_" + model.getId()); + obj.put("pid", pid); + obj.put("uuid", model.getId()); + obj.put("name", model.getName()); + obj.put("nocheck", !multiple); + obj.put("type", "role"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code",BpmOrgUtil.ROLE_ICON_CODE); + iconFont.put("color", BpmOrgUtil.ROLE_ICON_COLOR); + obj.put("iconFont", iconFont); + data.add(obj); + } + } + } + return data; + } + + /** + * 获取岗位分组 + * @return + */ + public JSONArray getPositionGroupTree() { + JSONArray data = new JSONArray(); + String[] positionCategoryList = RoleCache.getCategoryNames(); + if (positionCategoryList != null && positionCategoryList.length > 0) { + for (String name : positionCategoryList) { + if (!UtilString.isEmpty(name)) { + // 判断是否包含角色 + List roleList = SDK.getORGAPI().getRolesByCategory(name); + boolean hasPosition = false; + if (!isEmpty(roleList)) { + for (RoleModel model : roleList) { + if (model != null && model.getRoleType() == 1) { + hasPosition = true; + } + } + } + if (hasPosition) { + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_positionGroup_" + name); + obj.put("pid", "aws_node_position"); + obj.put("uuid", name); + obj.put("name", name); + obj.put("nocheck", true); + obj.put("open", false); + obj.put("type", "positionGroup"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.POSITION_GROUP_ICON_CODE); + iconFont.put("color", BpmOrgUtil.POSITION_GROUP_ICON_COLOR); + obj.put("iconFont", iconFont); + data.add(obj); + } + } + } + } + return data; + } + + /** + * 获取角色分组 + * @return + */ + public JSONArray getRoleGroupTree() { + JSONArray data = new JSONArray(); + String[] roleCategoryList = RoleCache.getCategoryNames(); + if (roleCategoryList != null && roleCategoryList.length > 0) { + for (String name : roleCategoryList) { + if (!UtilString.isEmpty(name)) { + // 判断是否包含角色 + List roleList = SDK.getORGAPI().getRolesByCategory(name); + boolean hasRole = false; + if (!isEmpty(roleList)) { + for (RoleModel model : roleList) { + if (model != null && model.getRoleType() == 0) { + hasRole = true; + } + } + } + if (hasRole) { + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_roleGroup_" + name); + obj.put("pid", "aws_node_role"); + obj.put("uuid", name); + obj.put("name", name); + obj.put("nocheck", true); + obj.put("open", false); + obj.put("type", "roleGroup"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.ROLE_GROUP_ICON_CODE); + iconFont.put("color", BpmOrgUtil.ROLE_GROUP_ICON_COLOR); + obj.put("iconFont", iconFont); + data.add(obj); + } + } + } + } + return data; + } + + /** + * 获取部门下的部门和人员 + * @param pid + * @param uuid + * @return + */ + public JSONArray getDepartmentByParent(String pid, String uuid, String scope, boolean multiple) { + JSONArray data = new JSONArray(); + // 部门 + List subDepartmentList = SDK.getORGAPI().getSubDepartments(uuid); + if (!isEmpty(subDepartmentList)) { + for (DepartmentModel model : subDepartmentList) { + if (model == null || model.isClosed()) { + continue; + } + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_department_" + model.getId()); + obj.put("pid", pid); + obj.put("uuid", model.getId()); + obj.put("name", model.getName()); + obj.put("nocheck", !scope.contains("department") || !multiple); + obj.put("open", false); + obj.put("type", "department"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.DEPARTMENT_ICON_CODE); + iconFont.put("color", BpmOrgUtil.DEPARTMENT_ICON_COLOR); + obj.put("iconFont", iconFont); + data.add(obj); + } + } + // 人员 + if (scope.contains("user")) { + List userlist = SDK.getORGAPI().getUsersByDepartment(uuid); + if (!isEmpty(userlist)) { + for (UserModel model : userlist) { + if (model == null || model.isClosed()) { + continue; + } + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_user_" + model.getUID()); + obj.put("pid", pid); + obj.put("uuid", model.getUID()); + obj.put("name", model.getUserName()); + obj.put("nocheck", !multiple); + // obj.put("open", false); + obj.put("type", "user"); + if (model.isManager()) { + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.MANAGER_USER_ICON_CODE); + iconFont.put("color", BpmOrgUtil.MANAGER_USER_ICON_COLOR); + obj.put("iconFont", iconFont); + } else { + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.NORMAL_USER_ICON_CODE); + iconFont.put("color", BpmOrgUtil.NORMAL_USER_ICON_COLOR); + obj.put("iconFont", iconFont); + + } + data.add(obj); + } + } + } + return data; + } + + /** + * 获取单位下部门 + * @param uuid + * @return + */ + public JSONArray getDepartmentByCompany(String pid, String uuid, String scope, boolean multiple) { + JSONArray data = new JSONArray(); + List departmentList = DepartmentCache.getListOfCompany(uuid); + if (!isEmpty(departmentList)) { + for (DepartmentModel model : departmentList) { + if (model != null && model.isClosed()) { + continue; + } + if (model != null && model.getParentDepartmentId().equals("0")) { + JSONObject obj = new JSONObject(); + obj.put("id", "aws_node_department_" + model.getId()); + obj.put("pid", pid); + obj.put("uuid", model.getId()); + obj.put("name", model.getName()); + obj.put("nocheck", !scope.contains("department") || !multiple); + obj.put("open", false); + obj.put("type", "department"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.DEPARTMENT_ICON_CODE); + iconFont.put("color", BpmOrgUtil.DEPARTMENT_ICON_COLOR); + obj.put("iconFont", iconFont); + data.add(obj); + } + } + } + return data; + } + + /** + * 获取单位 + * @return + */ + public JSONArray getCompanyTree() { + JSONArray data = new JSONArray(); + List companys = SDK.getORGAPI().getCompanys(); + if (!isEmpty(companys)) { + for (CompanyModel company : companys) { + if (!company.isClosed() && _uc.getCompanyModel().getId().equals(company.getId())) {// 暂定只取自己的单位组织 + JSONObject com = new JSONObject(); + com.put("id", "aws_node_company_" + company.getId()); + com.put("pid", "aws_node_org"); + com.put("uuid", company.getId()); + com.put("name", company.getName()); + com.put("nocheck", true); + com.put("open", false); + com.put("type", "company"); + JSONObject iconFont = new JSONObject(); + iconFont.put("code", BpmOrgUtil.COMPANY_ICON_CODE); + iconFont.put("color", BpmOrgUtil.COMPANY_ICON_COLOR); + com.put("iconFont", iconFont); + data.add(com); + } + } + } + return data; + } + + /** + * 获取子节点 + * 所有已注销的除外 + * @param uuid + * @param type + * @return + */ + public String getAwsOrgTreeNodeChildData(String uuid, String type) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject data = new JSONObject(); + if ("company".equals(type)) {// 单位:部门+用户 + // 获取部门 + List departmentList = DepartmentCache.getListOfCompany(uuid); + if (!isEmpty(departmentList)) { + for (DepartmentModel model : departmentList) { + if (!model.isClosed() && model.getParentDepartmentId().equals("0")) { + JSONObject obj = new JSONObject(); + obj.put("id", model.getId()); + obj.put("type", "department"); + obj.put("name", model.getName()); + data.put(model.getId(), obj); + // 递归查询子部门及用户 + Set set = new HashSet<>();// 记录所有ID,防止出现深度递归溢出 + set.add(model.getId()); + getDepartmentAndUser(model.getId(), set, data); + } + } + } + } + if ("department".equals(type)) {// 部门:部门+用户 + DepartmentModel model = SDK.getORGAPI().getDepartmentById(uuid); + if (model != null && !model.isClosed()) { + JSONObject obj = new JSONObject(); + obj.put("id", model.getId()); + obj.put("type", "department"); + obj.put("name", model.getName()); + data.put(model.getId(), obj); + // 递归查询子部门及用户 + Set set = new HashSet<>();// 记录所有ID,防止出现深度递归溢出 + set.add(model.getId()); + getDepartmentAndUser(model.getId(), set, data); + } + } + if ("roleGroup".equals(type)) {// 角色组:角色 + // 查询所有角色 + List list = SDK.getORGAPI().getRolesByCategory(uuid); + if (!isEmpty(list)) { + for (RoleModel role : list) { + JSONObject obj = new JSONObject(); + obj.put("id", role.getId()); + obj.put("type", "role"); + obj.put("name", role.getName()); + data.put(role.getId(), obj); + } + } + } + ro.put("data", data); + return ro.toString(); + } + + /** + * 获取所有子部门/用户 + * @param pid + * @param set + * @param data + */ + private void getDepartmentAndUser(String pid, Set set, JSONObject data) { + // 获取子部门 + List list = SDK.getORGAPI().getSubDepartments(pid); + if (!isEmpty(list)) { + for (DepartmentModel model : list) { + if (!model.isClosed() && !set.contains(model.getId())) { + set.add(model.getId()); + JSONObject obj = new JSONObject(); + obj.put("id", model.getId()); + obj.put("type", "department"); + obj.put("name", model.getName()); + data.put(model.getId(), obj); + getDepartmentAndUser(model.getId(), set, data); + } + } + } + // 获取当前部门下用户 + List userlist = SDK.getORGAPI().getUsersByDepartment(pid); + if (!isEmpty(userlist)) { + for (UserModel model : userlist) { + if (!model.isClosed() && !set.contains(model.getUID())) { + JSONObject obj = new JSONObject(); + obj.put("id", model.getUID()); + obj.put("type", "user"); + obj.put("name", model.getUserName()); + data.put(model.getUID(), obj); + } + } + } + } + + /** + * 模糊查询 + * 查询部门/人员/角色/ + * @param autoContent + * @param wsId + * @param ref + * @return + */ + public String queryAwsOrgTree(String autoContent, String wsId, String ref) { + ResponseObject ro = ResponseObject.newOkResponse(); + List list = new ArrayList(); + // 部门 + List companys = SDK.getORGAPI().getCompanys(); + if (!isEmpty(companys)) { + for (CompanyModel company : companys) { + if (!company.isClosed() && _uc.getCompanyModel().getId().equals(company.getId())) {// 暂时只查询自己所在单位 + if (ref.contains("department")) { + List departmentList = DepartmentCache.getListOfCompany(company.getId()); + if (!isEmpty(departmentList)) { + for (DepartmentModel model : departmentList) { + if (model == null || model.isClosed()) { + continue; + } + if (model.getName().toUpperCase().contains(autoContent.toUpperCase())) {// 包含 + CoeProcessLevelAutoBean bean = new CoeProcessLevelAutoBean(); + bean.setName(model.getName()); + bean.setType("department"); + StringBuilder sBuilder = new StringBuilder();// 名称组合 + StringBuilder idBuilder = new StringBuilder();// Id组合 + Set idSets = new HashSet<>();// id记录,校验防止递归死循环 + sBuilder.append(bean.getName()); + idBuilder.append(model.getId()); + idSets.add(model.getId()); + boolean isClosed = false; + isClosed = getDepartmentFilePath(model, sBuilder, idBuilder, idSets, isClosed);// 递归获取当前文件名称路径 + if (!isClosed) { + // bean.setUi("
    " + sBuilder.toString() + "
    "); + bean.setUi(sBuilder.toString()); + bean.setValue(idBuilder.toString()); + list.add(bean); + } + } + } + } + } + } + } + } + // 人员 + if (ref.contains("user")) { + List userList = UserCache.getActiveList(); + if (!isEmpty(userList)) { + for (UserModel model : userList) { + if (SDK.getORGAPI().getDepartmentById(model.getDepartmentId()).getCompanyId().equals(_uc.getCompanyModel().getId()) + && (model.getUserName().toUpperCase().contains(autoContent.toUpperCase()) || model.getUID().toUpperCase().contains(autoContent.toUpperCase()))) { + CoeProcessLevelAutoBean bean = new CoeProcessLevelAutoBean(); + bean.setName(model.getUserName()); + bean.setType("user"); + StringBuilder sBuilder = new StringBuilder();// 名称组合 + StringBuilder idBuilder = new StringBuilder();// Id组合 + Set idSets = new HashSet<>();// id记录,校验防止递归死循环 + sBuilder.append(bean.getName()); + idBuilder.append(model.getUID()); + idSets.add(model.getUID()); + DepartmentModel departmentModel = SDK.getORGAPI().getDepartmentById(model.getDepartmentId()); + if (departmentModel != null && !departmentModel.isClosed()) { + sBuilder.insert(0, departmentModel.getName() + ">"); + idBuilder.insert(0, departmentModel.getId() + ","); + idSets.add(departmentModel.getId()); + boolean isClosed = false; + isClosed = getDepartmentFilePath(departmentModel, sBuilder, idBuilder, idSets, isClosed);// 递归获取当前文件名称路径 + if (!isClosed) { + // bean.setUi("
    " + sBuilder.toString() + "
    "); + bean.setUi(sBuilder.toString()); + bean.setValue(idBuilder.toString()); + list.add(bean); + } + } + } + } + } + } + if (ref.contains("role")) { + // 角色 + List roleList = SDK.getORGAPI().getRoles(); + if (!isEmpty(roleList)) { + for (RoleModel model : roleList) { + if (model != null && model.getRoleType() == 0) { + if (model.getName().toUpperCase().contains(autoContent.toUpperCase())) {// 包含 + CoeProcessLevelAutoBean bean = new CoeProcessLevelAutoBean(); + bean.setName(model.getName()); + bean.setType("role"); + // bean.setUi("
    " + new StringBuilder(model.getCategoryName()).append(">").append(model.getName()) + "
    "); + bean.setUi(new StringBuilder(model.getCategoryName()).append(">").append(model.getName()).toString()); + bean.setValue(model.getCategoryName() + "," + model.getId()); + list.add(bean); + } + } + } + } + } + if (ref.contains("position")) { + // 岗位 + List roleList = SDK.getORGAPI().getRoles(); + if (!isEmpty(roleList)) { + for (RoleModel model : roleList) { + if (model != null && model.getRoleType() == 1) { + if (model.getName().toUpperCase().contains(autoContent.toUpperCase())) {// 包含 + CoeProcessLevelAutoBean bean = new CoeProcessLevelAutoBean(); + bean.setName(model.getName()); + bean.setType("position"); + // bean.setUi("
    " + new StringBuilder(model.getCategoryName()).append(">").append(model.getName()) + "
    "); + bean.setUi(new StringBuilder(model.getCategoryName()).append(">").append(model.getName()).toString()); + bean.setValue(model.getCategoryName() + "," + model.getId()); + list.add(bean); + } + } + } + } + } + + boolean isBeyond = false;// 查询结果是否超出一定数量并截取 + if (!isEmpty(list)) { + // 排序 + Collections.sort(list, new Comparator() { + @Override + public int compare(CoeProcessLevelAutoBean o1, CoeProcessLevelAutoBean o2) { + String ui1 = o1.getUi(); + String ui2 = o2.getUi(); + return ui2.compareToIgnoreCase(ui1); + } + }); + } + ro.put("result", JSONArray.toJSON(list)); + ro.put("isBeyond", isBeyond); + return ro.toString(); + } + + // 递归部门名称 + private boolean getDepartmentFilePath(DepartmentModel model, StringBuilder sBuilder, StringBuilder idBuilder, Set idSets, boolean isClosed) { + if (!idSets.contains(model.getParentDepartmentId())) { + if (!"0".equals(model.getParentDepartmentId())) {// 有父节点 + String pid = model.getParentDepartmentId(); + DepartmentModel parentModel = SDK.getORGAPI().getDepartmentById(pid); + if (parentModel != null) { + if (!parentModel.isClosed()) { + sBuilder.insert(0, parentModel.getName() + ">"); + idBuilder.insert(0, parentModel.getId() + ","); + idSets.add(parentModel.getId()); + getDepartmentFilePath(parentModel, sBuilder, idBuilder, idSets, isClosed); + return false; + } else { + // 任何一级注销,都作废 + return true; + } + } + } else { + // 单位 + CompanyModel companyModel = SDK.getORGAPI().getCompanyById(model.getCompanyId()); + if (companyModel == null || companyModel.isClosed()) { + return true; + } else { + sBuilder.insert(0, companyModel.getName() + ">"); + idBuilder.insert(0, companyModel.getId() + ","); + idSets.add(companyModel.getId()); + return false; + } + } + } + return false; + } + + /** + * 保存关联的AWS平台组织关联关系 + * @param relationAwsOrg + * @param shapeId + * @param fileId + * @param shapeGroupId + * @param attrId + * @param shapeText + * @return + */ + public String saveAwsOrgRelevance(String relationAwsOrg, String shapeId, String fileId, String shapeGroupId, String attrId, String shapeText) { + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + // 已保存节点删除 + dao.deleteByAttrId(fileId, shapeId, attrId); + JSONArray array = JSONArray.parseArray(relationAwsOrg); + if (array != null && !array.isEmpty()) { + List modelList = new ArrayList(); + try { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + DesignerShapeRelationModel shapeRelationModel = new DesignerShapeRelationModel(); + shapeRelationModel.setId(UUIDGener.getUUID()); + shapeRelationModel.setFileId(fileId); + shapeRelationModel.setShapeId(shapeId); + shapeRelationModel.setShapeText(shapeText); + shapeRelationModel.setAttrId(attrId); + shapeRelationModel.setRelationFileId("00000000-0000-0000-0000-000000000000"); + shapeRelationModel.setRelationShapeId("00000000-0000-0000-0000-000000000000"); + shapeRelationModel.setRelationShapeText(object.toString()); + modelList.add(shapeRelationModel); + } + if (modelList.size() > 0) { + dao.barchInsert(modelList); + } + } catch (Exception e) { + throw new AWSException("保存关联属性失败"); + } + } + CoeProcessLevelUtil.syncBPAProcessOwner(fileId, attrId, array); + ResponseObject responseObject = ResponseObject.newOkResponse(); + return responseObject.toString(); + } + + /** + * awsorg关联类型查询关联的aws组织名称 + * @param fileId + * @param shapeId + * @param shapeName + * @param shapeCategory + * @return + */ + public String getAwsOrgRelevanceName(String fileId, String shapeId, String shapeName, String shapeCategory) { + PALRepositoryModel m = PALRepositoryCache.getCache().get(fileId); + if (m == null) { + throw new AWSException("没有查找到关联的文件"); + } + String wsId = m.getWsId(); + if ("bpmn".equals(shapeCategory)) {// BPM平台流程类型为bpmn而不是process.bpmn2 + shapeCategory = "process.bpmn2"; + } + String shapeMethod = shapeCategory.replace("_", "."); + // 获取有效的属性内容 + List attributeModelList = CoeDesignerShapeAPIManager.getInstance().getValidAttributeModels(wsId, shapeMethod, shapeName, m.getMethodId()); + Map refMap = new HashMap(); + for (PALMethodAttributeModel model : attributeModelList) { + if ("awsorg".equals(model.getType())) { + refMap.put(model.getKey(), JSON.parseObject(model.getRef())); + } + } + + + List list = new DesignerShapeRelationDao().getModelListByShapeIdAndRelationShapeId(fileId, shapeId, null, null); + JSONObject attrObj = new JSONObject(); + Set filter = new HashSet(); + for (DesignerShapeRelationModel model : list) { + if ("00000000-0000-0000-0000-000000000000".equals(model.getRelationFileId()) && "00000000-0000-0000-0000-000000000000".equals(model.getRelationShapeId())) { + JSONObject object = JSONObject.parseObject(model.getRelationShapeText()); + // 查询最新名称 + if ("department".equals(object.getString("type"))) { + DepartmentModel dept = SDK.getORGAPI().getDepartmentById(object.getString("id")); + if (dept != null && !filter.contains(dept.getId())) { + object.put("name", dept.getName()); + filter.add(dept.getId()); + } + } + if ("position".equals(object.getString("type"))) {// 岗位 + RoleModel role = SDK.getORGAPI().getRoleById(object.getString("id")); + if (role != null && !filter.contains(role.getId())) { + object.put("name", role.getName()); + filter.add(role.getId()); + } + } + if ("user".equals(object.getString("type"))) { + UserModel user = SDK.getORGAPI().getUser(object.getString("id")); + if (user != null && !filter.contains(user.getUID())) { + object.put("name", user.getUserName()); + filter.add(user.getUID()); + } + } + if ("role".equals(object.getString("type"))) { + RoleModel role = SDK.getORGAPI().getRoleById(object.getString("id")); + if (role != null && !filter.contains(role.getId())) { + object.put("name", role.getName()); + filter.add(role.getId()); + } + } + if (!attrObj.containsKey(model.getAttrId())) { + attrObj.put(model.getAttrId(), new JSONArray()); + } + attrObj.getJSONArray(model.getAttrId()).add(object); + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("attrData", attrObj); + ro.put("shapeRefObj", refMap); + return ro.toString(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/util/CoeDesignerUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/util/CoeDesignerUtil.java new file mode 100644 index 00000000..28136772 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/util/CoeDesignerUtil.java @@ -0,0 +1,1060 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.util; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.lifecycle.api.AppsAPIManager; +import com.actionsoft.bpms.bpmn.constant.ProcessDefinitionConst; +import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; +import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition; +import com.actionsoft.bpms.bpmn.modeler.constant.BPMNConstant; +import com.actionsoft.bpms.bpmn.modeler.util.BPMNFileUtil; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerShapeCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper.CoeFileComparator.ProcessDefinitionDESC; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BPMNModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.path.PLRFilePath; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.mozilla.javascript.Context; +import org.mozilla.javascript.Scriptable; + +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class CoeDesignerUtil { + + // 通用schema一些定义,来源于schema.js和bpmn.js + public static final String DEFAULT_DATA_ATTRIBUTE = "{\"name\":\"default\",\"type\":\"string\",\"value\":\"\",\"category\":\"default\",\"linksArray\":[],\"attributesContent\":\"\",\"attributesJsonArray\":[],\"privateAttribute\":[],\"privateAttributeContent\":[],\"shapeDesc\":\"\",\"shapeGroupId\":\"\",\"upFilesArray\":[],\"isCopy\":\"\",\"relevanceShapes\":[]}"; + public static final String DEFAULT_SHAPE_DEF = "{id:\"\",name:\"\",title:\"\",text:\"\",category:\"\",group:\"\",groupName:null,locked:false,link:\"\",children:[],parent:\"\",orderIndex:0,resizeDir:[\"tl\",\"tr\",\"br\",\"bl\"],attribute:{container:false,visible:true,rotatable:false,linkable:true,editable:true,markerOffset:5},dataAttributes:[{name:\"AWSProperties\",type:\"string\",value:\"\",category:\"default\",id:\"AWSPropertiesID\",linksArray:[],attributesContent:\"\",attributesJsonArray:[],privateAttribute:[],privateAttributeContent:[],privateShapesName:[],shapeGroupId:\"\",isCopy:\"\",shapeDesc:\"\",upFilesArray:[],relevanceShapes:[]}],props:{x:0,y:0,w:120,h:80,zindex:0,angle:0},shapeStyle:{alpha:1},lineStyle:{lineWidth:1,lineColor:\"50,50,50\",lineStyle:\"solid\"},fillStyle:{type:\"solid\",color:\"255,255,255\"},fontStyle:{fontFamily:\"Arial\",size:13,color:\"50,50,50\",bold:false,italic:false,underline:false,textAlign:\"center\",vAlign:\"middle\",orientation:\"vertical\"},path:[{actions:[{action:\"move\",x:\"0\",y:\"0\"},{action:\"line\",x:\"w\",y:\"0\"},{action:\"line\",x:\"w\",y:\"h\"},{action:\"line\",x:\"0\",y:\"h\"},{action:\"close\"}]}],textBlock:{x:\"10\",y:\"0\",w:\"w-20\",h:\"h\"},textBlockFinal:{x:\"w/2-60\",y:\"h\",w:\"120\",h:\"30\"},anchors:[{x:\"w/2\",y:\"0\"},{x:\"w/2\",y:\"h\"},{x:\"0\",y:\"h/2\"},{x:\"w\",y:\"h/2\"}],resizeable:\"1\"}"; + public static final String GLOBAL_COMMAMD_ROUND = "[{action:\"move\",x:\"0\",y:\"h/2\"},{action:\"curve\",x1:\"0\",y1:\"-h/6\",x2:\"w\",y2:\"-h/6\",x:\"w\",y:\"h/2\"},{action:\"curve\",x1:\"w\",y1:\"h+h/6\",x2:\"0\",y2:\"h+h/6\",x:\"0\",y:\"h/2\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAMD_RECTANGLE = "[{action:\"move\",x:\"0\",y:\"0\"},{action:\"line\",x:\"w\",y:\"0\"},{action:\"line\",x:\"w\",y:\"h\"},{action:\"line\",x:\"0\",y:\"h\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAMD_ROUNDRECTANGLE = "[{action:\"move\",x:\"0\",y:\"4\"},{action:\"quadraticCurve\",x1:\"0\",y1:\"0\",x:\"4\",y:\"0\"},{action:\"line\",x:\"w-4\",y:\"0\"},{action:\"quadraticCurve\",x1:\"w\",y1:\"0\",x:\"w\",y:\"4\"},{action:\"line\",x:\"w\",y:\"h-4\"},{action:\"quadraticCurve\",x1:\"w\",y1:\"h\",x:\"w-4\",y:\"h\"},{action:\"line\",x:\"4\",y:\"h\"},{action:\"quadraticCurve\",x1:\"0\",y1:\"h\",x:\"0\",y:\"h-4\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_INNEROUND = "[{action:\"move\",x:\"3\",y:\"h*0.5\"},{action:\"curve\",x1:\"3\",y1:\"-h/6+4\",x2:\"w-3\",y2:\"-h/6+4\",x:\"w-3\",y:\"h*0.5\"},{action:\"curve\",x1:\"w-3\",y1:\"h+h/6-4\",x2:\"3\",y2:\"h+h/6-4\",x:\"3\",y:\"h*0.5\"}]"; + public static final String GLOBAL_COMMAND_MESSAGE0 = "[{action:\"move\",x:\"w*0.5-w*0.3\",y:\"h*0.5-h*0.2\"},{action:\"line\",x:\"w*0.5+w*0.3\",y:\"h*0.5-h*0.2\"},{action:\"line\",x:\"w*0.5+w*0.3\",y:\"h*0.5+h*0.2\"},{action:\"line\",x:\"w*0.5-w*0.3\",y:\"h*0.5+h*0.2\"},{action:\"line\",x:\"w*0.5-w*0.3\",y:\"h*0.5-h*0.2\"},{action:\"close\"},{action:\"move\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5+w*0.3\",y:\"h*0.5-h*0.2\"},{action:\"move\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5-w*0.3\",y:\"h*0.5-h*0.2\"}]"; + public static final String GLOBAL_COMMAND_TIMER0 = "[{action:\"move\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"move\",x:\"w*0.5-w*0.3\",y:\"h*0.5\"},{action:\"curve\",x1:\"w*0.5-w*0.3\",y1:\"h*0.5-h*0.6*2/3\",x2:\"w*0.5+w*0.3\",y2:\"h*0.5-h*0.6*2/3\",x:\"w*0.5+w*0.3\",y:\"h*0.5\"},{action:\"curve\",x1:\"w*0.5+w*0.3\",y1:\"h*0.5+h*0.6*2/3\",x2:\"w*0.5-w*0.3\",y2:\"h*0.5+h*0.6*2/3\",x:\"w*0.5-w*0.3\",y:\"h*0.5\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_TIMER0_NEEDLE = "[{action:\"move\",x:\"w*0.5+w*0.15\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5+w*0.25*Math.cos(Math.PI/12*5)\",y:\"h*0.5-h*0.25*Math.sin(Math.PI/12*5)\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5\"}]"; + public static final String GLOBAL_COMMAND_TIMER0_NUM = "[{action:\"move\",x:\"w*0.5+w*0.3*Math.cos(0)\",y:\"h*0.5+h*0.3*Math.sin(0)\"},{action:\"line\",x:\"w*0.5+w*0.25*Math.cos(0)\",y:\"h*0.5+h*0.25*Math.sin(0)\"},{action:\"move\",x:\"w*0.5+w*0.3*Math.cos(Math.PI/6)\",y:\"h*0.5+h*0.3*Math.sin(Math.PI/6)\"},{action:\"line\",x:\"w*0.5+w*0.25*Math.cos(Math.PI/6)\",y:\"h*0.5+h*0.25*Math.sin(Math.PI/6)\"},{action:\"move\",x:\"w*0.5+w*0.3*Math.cos(Math.PI/6*2)\",y:\"h*0.5+h*0.3*Math.sin(Math.PI/6*2)\"},{action:\"line\",x:\"w*0.5+w*0.25*Math.cos(Math.PI/6*2)\",y:\"h*0.5+h*0.25*Math.sin(Math.PI/6*2)\"},{action:\"move\",x:\"w*0.5+w*0.3*Math.cos(Math.PI/6*3)\",y:\"h*0.5+h*0.3*Math.sin(Math.PI/6*3)\"},{action:\"line\",x:\"w*0.5+w*0.25*Math.cos(Math.PI/6*3)\",y:\"h*0.5+h*0.25*Math.sin(Math.PI/6*3)\"},{action:\"move\",x:\"w*0.5+w*0.3*Math.cos(Math.PI/6*4)\",y:\"h*0.5+h*0.3*Math.sin(Math.PI/6*4)\"},{action:\"line\",x:\"w*0.5+w*0.25*Math.cos(Math.PI/6*4)\",y:\"h*0.5+h*0.25*Math.sin(Math.PI/6*4)\"},{action:\"move\",x:\"w*0.5+w*0.3*Math.cos(Math.PI/6*5)\",y:\"h*0.5+h*0.3*Math.sin(Math.PI/6*5)\"},{action:\"line\",x:\"w*0.5+w*0.25*Math.cos(Math.PI/6*5)\",y:\"h*0.5+h*0.25*Math.sin(Math.PI/6*5)\"},{action:\"move\",x:\"w*0.5+w*0.3*Math.cos(Math.PI/6*6)\",y:\"h*0.5+h*0.3*Math.sin(Math.PI/6*6)\"},{action:\"line\",x:\"w*0.5+w*0.25*Math.cos(Math.PI/6*6)\",y:\"h*0.5+h*0.25*Math.sin(Math.PI/6*6)\"},{action:\"move\",x:\"w*0.5+w*0.3*Math.cos(Math.PI/6*7)\",y:\"h*0.5+h*0.3*Math.sin(Math.PI/6*7)\"},{action:\"line\",x:\"w*0.5+w*0.25*Math.cos(Math.PI/6*7)\",y:\"h*0.5+h*0.25*Math.sin(Math.PI/6*7)\"},{action:\"move\",x:\"w*0.5+w*0.3*Math.cos(Math.PI/6*8)\",y:\"h*0.5+h*0.3*Math.sin(Math.PI/6*8)\"},{action:\"line\",x:\"w*0.5+w*0.25*Math.cos(Math.PI/6*8)\",y:\"h*0.5+h*0.25*Math.sin(Math.PI/6*8)\"},{action:\"move\",x:\"w*0.5+w*0.3*Math.cos(Math.PI/6*9)\",y:\"h*0.5+h*0.3*Math.sin(Math.PI/6*9)\"},{action:\"line\",x:\"w*0.5+w*0.25*Math.cos(Math.PI/6*9)\",y:\"h*0.5+h*0.25*Math.sin(Math.PI/6*9)\"},{action:\"move\",x:\"w*0.5+w*0.3*Math.cos(Math.PI/6*10)\",y:\"h*0.5+h*0.3*Math.sin(Math.PI/6*10)\"},{action:\"line\",x:\"w*0.5+w*0.25*Math.cos(Math.PI/6*10)\",y:\"h*0.5+h*0.25*Math.sin(Math.PI/6*10)\"},{action:\"move\",x:\"w*0.5+w*0.3*Math.cos(Math.PI/6*11)\",y:\"h*0.5+h*0.3*Math.sin(Math.PI/6*11)\"},{action:\"line\",x:\"w*0.5+w*0.25*Math.cos(Math.PI/6*11)\",y:\"h*0.5+h*0.25*Math.sin(Math.PI/6*11)\"}]"; + public static final String GLOBAL_COMMAND_CONDITIONAL0 = "[{action:\"move\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"move\",x:\"w*0.5-w*0.25\",y:\"h*0.5-h*0.25\"},{action:\"line\",x:\"w*0.5+w*0.25\",y:\"h*0.5-h*0.25\"},{action:\"line\",x:\"w*0.5+w*0.25\",y:\"h*0.5+h*0.25\"},{action:\"line\",x:\"w*0.5-w*0.25\",y:\"h*0.5+h*0.25\"},{action:\"line\",x:\"w*0.5-w*0.25\",y:\"h*0.5-h*0.25\"},{action:\"close\"},{action:\"move\",x:\"w*0.5-w*0.2\",y:\"h*0.5-h*0.05\"},{action:\"line\",x:\"w*0.5+w*0.2\",y:\"h*0.5-h*0.05\"},{action:\"move\",x:\"w*0.5-w*0.2\",y:\"h*0.5-h*0.16\"},{action:\"line\",x:\"w*0.5+w*0.2\",y:\"h*0.5-h*0.16\"},{action:\"move\",x:\"w*0.5-w*0.2\",y:\"h*0.5+h*0.05\"},{action:\"line\",x:\"w*0.5+w*0.2\",y:\"h*0.5+h*0.05\"},{action:\"move\",x:\"w*0.5-w*0.2\",y:\"h*0.5+h*0.16\"},{action:\"line\",x:\"w*0.5+w*0.2\",y:\"h*0.5+h*0.16\"}]"; + public static final String GLOBAL_COMMAND_ESCALATION0 = "[{action:\"move\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5+w*0.2\",y:\"h*0.5+h*0.25\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5-h*0.25\"},{action:\"line\",x:\"w*0.5-w*0.2\",y:\"h*0.5+h*0.25\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_SIGNAL0 = "[{action:\"move\",x:\"w*0.5\",y:\"h*0.5-h*0.32\"},{action:\"line\",x:\"w*0.5+w*0.28\",y:\"h*0.5+h*0.15\"},{action:\"line\",x:\"w*0.5-w*0.28\",y:\"h*0.5+h*0.15\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5-h*0.32\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_COMPENSATION0 = "[{action:\"move\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5+w*0.25\",y:\"h*0.5-h*0.2\"},{action:\"line\",x:\"w*0.5+w*0.25\",y:\"h*0.5+h*0.2\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"close\"},{action:\"move\",x:\"w*0.5-w*0.25\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5-h*0.2\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5+h*0.2\"},{action:\"line\",x:\"w*0.5-w*0.25\",y:\"h*0.5\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_ERROR0 = "[{action:\"move\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"move\",x:\"w*0.5+w*0.1\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5+w*0.28\",y:\"h*0.5-h*0.2\"},{action:\"line\",x:\"w*0.5+w*0.1\",y:\"h*0.5+h*0.2\"},{action:\"line\",x:\"w*0.5-w*0.1\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5-w*0.28\",y:\"h*0.5+h*0.2\"},{action:\"line\",x:\"w*0.5-w*0.1\",y:\"h*0.5-h*0.2\"},{action:\"line\",x:\"w*0.5+w*0.1\",y:\"h*0.5\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_MULTIPLE0 = "[{action:\"move\",x:\"w*0.5\",y:\"h*0.5-h*0.28\"},{action:\"line\",x:\"w*0.5+w*0.28\",y:\"h*0.5-h*0.08\"},{action:\"line\",x:\"w*0.5+w*0.17\",y:\"h*0.5+h*0.25\"},{action:\"line\",x:\"w*0.5-w*0.17\",y:\"h*0.5+h*0.25\"},{action:\"line\",x:\"w*0.5-w*0.28\",y:\"h*0.5-h*0.08\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5-h*0.28\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_PARALLEL0 = "[{action:\"move\",x:\"w*0.5+w*0.07\",y:\"h*0.5-h*0.07\"},{action:\"line\",x:\"w*0.5+w*0.27\",y:\"h*0.5-h*0.07\"},{action:\"line\",x:\"w*0.5+w*0.27\",y:\"h*0.5+h*0.07\"},{action:\"line\",x:\"w*0.5+w*0.07\",y:\"h*0.5+h*0.07\"},{action:\"line\",x:\"w*0.5+w*0.07\",y:\"h*0.5+h*0.27\"},{action:\"line\",x:\"w*0.5-w*0.07\",y:\"h*0.5+h*0.27\"},{action:\"line\",x:\"w*0.5-w*0.07\",y:\"h*0.5+h*0.07\"},{action:\"line\",x:\"w*0.5-w*0.27\",y:\"h*0.5+h*0.07\"},{action:\"line\",x:\"w*0.5-w*0.27\",y:\"h*0.5-h*0.07\"},{action:\"line\",x:\"w*0.5-w*0.07\",y:\"h*0.5-h*0.07\"},{action:\"line\",x:\"w*0.5-w*0.07\",y:\"h*0.5-h*0.27\"},{action:\"line\",x:\"w*0.5+w*0.07\",y:\"h*0.5-h*0.27\"},{action:\"line\",x:\"w*0.5+w*0.07\",y:\"h*0.5-h*0.07\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_GATEWAY0 = "[{action:\"move\",x:\"0\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5\",y:\"0\"},{action:\"line\",x:\"w\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5\",y:\"h\"},{action:\"line\",x:\"0\",y:\"h*0.5\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_LINK3 = "[{action:\"move\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"move\",x:\"w*0.5-w*0.26\",y:\"h*0.5-h*0.08\"},{action:\"line\",x:\"w*0.5+w*0.16\",y:\"h*0.5-h*0.08\"},{action:\"line\",x:\"w*0.5+w*0.16\",y:\"h*0.5-h*0.18\"},{action:\"line\",x:\"w*0.5+w*0.26\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5+w*0.16\",y:\"h*0.5+h*0.18\"},{action:\"line\",x:\"w*0.5+w*0.16\",y:\"h*0.5+h*0.08\"},{action:\"line\",x:\"w*0.5-w*0.26\",y:\"h*0.5+h*0.08\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_CANCEL3 = "[{action:\"move\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"move\",x:\"w*0.5\",y:\"h*0.5-h*0.1\"},{action:\"line\",x:\"w*0.5+w*0.16\",y:\"h*0.5-h*0.25\"},{action:\"line\",x:\"w*0.5+w*0.25\",y:\"h*0.5-h*0.16\"},{action:\"line\",x:\"w*0.5+w*0.1\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5+w*0.25\",y:\"h*0.5+h*0.16\"},{action:\"line\",x:\"w*0.5+w*0.16\",y:\"h*0.5+h*0.25\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5+h*0.1\"},{action:\"line\",x:\"w*0.5-w*0.16\",y:\"h*0.5+h*0.25\"},{action:\"line\",x:\"w*0.5-w*0.25\",y:\"h*0.5+h*0.16\"},{action:\"line\",x:\"w*0.5-w*0.1\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5-w*0.25\",y:\"h*0.5-h*0.16\"},{action:\"line\",x:\"w*0.5-w*0.16\",y:\"h*0.5-h*0.25\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5-h*0.1\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_MESSAGE4 = "[{action:\"move\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"move\",x:\"w*0.5-w*0.3\",y:\"h*0.5-h*0.2\"},{action:\"line\",x:\"w*0.5+w*0.3\",y:\"h*0.5-h*0.2\"},{action:\"line\",x:\"w*0.5+w*0.3\",y:\"h*0.5+h*0.2\"},{action:\"line\",x:\"w*0.5-w*0.3\",y:\"h*0.5+h*0.2\"},{action:\"line\",x:\"w*0.5-w*0.3\",y:\"h*0.5-h*0.2\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_MESSAGE4_0 = "[{action:\"move\",x:\"w*0.5-w*0.3\",y:\"h*0.5-h*0.2\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"line\",x:\"w*0.5+w*0.3\",y:\"h*0.5-h*0.2\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_G_ROUND = "[{action:\"move\",x:\"w*0.5 - w*0.25\",y:\"h*0.5\"},{action:\"curve\",x1:\"w*0.5 - w*0.25\",y1:\"h*0.5 - h*2/3*0.5\",x2:\"w*0.5 + w*0.25\",y2:\"h*0.5 - h*2/3*0.5\",x:\"w*0.5 + w*0.25\",y:\"h*0.5\"},{action:\"curve\",x1:\"w*0.5 + w*0.25\",y1:\"h*0.5 + h*2/3*0.5\",x2:\"w*0.5 - w*0.25\",y2:\"h*0.5 + h*2/3*0.5\",x:\"w*0.5 - w*0.25\",y:\"h*0.5\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_MANUAL_TASK = "[{action:\"move\",x:\"100*0.15- 100*0.08\",y:\"60*0.2\"},{action:\"line\",x:\"100*0.15- 100*0.04\",y:\"60*0.2\"},{action:\"line\",x:\"100*0.15+ 100*0.01\",y:\"60*0.13\"},{action:\"line\",x:\"100*0.15+ 100*0.04\",y:\"60*0.13\"},{action:\"line\",x:\"100*0.15 + 100*0.04\",y:\"60*0.17\"},{action:\"line\",x:\"100*0.15+ 100*0.01\",y:\"60*0.17\"},{action:\"line\",x:\"100*0.15+ 100*0.1\",y:\"60*0.17\"},{action:\"line\",x:\"100*0.15+ 100*0.1\",y:\"60*0.21\"},{action:\"line\",x:\"100*0.15+ 100*0.01\",y:\"60*0.21\"},{action:\"line\",x:\"100*0.15+ 100*0.06\",y:\"60*0.21\"},{action:\"line\",x:\"100*0.15+ 100*0.06\",y:\"60*0.25\"},{action:\"line\",x:\"100*0.15+ 100*0.01\",y:\"60*0.25\"},{action:\"line\",x:\"100*0.15+ 100*0.06\",y:\"60*0.25\"},{action:\"line\",x:\"100*0.15+ 100*0.06\",y:\"60*0.29\"},{action:\"line\",x:\"100*0.15+ 100*0.06\",y:\"60*0.29\"},{action:\"line\",x:\"100*0.15+ 100*0.04\",y:\"60*0.29\"},{action:\"line\",x:\"100*0.15+ 100*0.04\",y:\"60*0.33\"},{action:\"line\",x:\"100*0.15- 100*0.04\",y:\"60*0.33\"},{action:\"line\",x:\"100*0.15- 100*0.08\",y:\"60*0.28\"},{action:\"line\",x:\"100*0.15- 100*0.08\",y:\"60*0.2\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_RECEIVE_TASK = "[{action:\"move\",x:\"100*0.15+ 100*0.08\",y:\"60*0.24- 60*0.1\"},{action:\"line\",x:\"100*0.15- 100*0.08\",y:\"60*0.24- 60*0.1\"},{action:\"line\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 + 60*0.08\"},{action:\"line\",x:\"100*0.15+ 100*0.08\",y:\"60*0.24 + 60*0.08\"},{action:\"line\",x:\"100*0.15+ 100*0.08\",y:\"60*0.24- 60*0.1\"},{action:\"close\"},{action:\"line\",x:\"100*0.15 - 0\",y:\"60*0.24- 60*0.01\"},{action:\"line\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24- 60*0.1\"},{action:\"line\",x:\"100*0.15 - 0\",y:\"60*0.24- 60*0.01\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_RECEIVE_TASK_DARK = "[{action:\"move\",x:\"100*0.15+ 100*0.08\",y:\"60*0.24- 60*0.1\"},{action:\"line\",x:\"100*0.15- 100*0.08\",y:\"60*0.24- 60*0.1\"},{action:\"line\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 + 60*0.08\"},{action:\"line\",x:\"100*0.15+ 100*0.08\",y:\"60*0.24 + 60*0.08\"},{action:\"line\",x:\"100*0.15+ 100*0.08\",y:\"60*0.24- 60*0.1\"},{action:\"close\"},{action:\"line\",x:\"100*0.15 - 0\",y:\"60*0.24- 60*0.01\"},{action:\"line\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24- 60*0.1\"},{action:\"line\",x:\"100*0.15 - 0\",y:\"60*0.24- 60*0.01\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_SERVICE_TASK = "[{action:\"move\",x:\"100*0.09 -100*0.26 *0.16\",y:\"60*0.14 + 60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.28 *0.16\",y:\"60*0.14 + 60/5*8 *0.11 *0.16\"},{action:\"line\",x:\"100*0.09 - 100*0.26 *0.16\",y:\"60*0.14 + 60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.17 *0.16\",y:\"60*0.14 + 60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.12 *0.16\",y:\"60*0.14 -60/5*8 *0.02 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.21 *0.16\",y:\"60*0.14 -60/5*8 *0.13 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.18 *0.16\",y:\"60*0.14 -60/5*8 *0.17 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.13 *0.16\",y:\"60*0.14 -60/5*8 *0.19 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.05 *0.16\",y:\"60*0.14 -60/5*8 *0.11 *0.16\"},{action:\"line\",x:\"100*0.09 +100*0.03 *0.16\",y:\"60*0.14 -60/5*8 *0.15 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.04 *0.16\",y:\"60*0.14 -60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.10 *0.16\",y:\"60*0.14 -60/5*8 *0.27 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.15 *0.16\",y:\"60*0.14 -60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.15 *0.16\",y:\"60*0.14 -60/5*8 *0.15 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.23 *0.16\",y:\"60*0.14 -60/5*8 *0.12 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.30 *0.16\",y:\"60*0.14 -60/5*8 *0.19 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.35 *0.16\",y:\"60*0.14 -60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.38 *0.16\",y:\"60*0.14 -60/5*8 *0.12 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.32 *0.16\",y:\"60*0.14 -60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.37 *0.16\",y:\"60*0.14 + 60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.46 *0.16\",y:\"60*0.14 + 60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.48 *0.16\",y:\"60*0.14 + 60/5*8 *0.10 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.46 *0.16\",y:\"60*0.14 + 60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.37 *0.16\",y:\"60*0.14 + 60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.33 *0.16\",y:\"60*0.14 + 60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.38 *0.16\",y:\"60*0.14 + 60/5*8 *0.31 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.36 *0.16\",y:\"60*0.14 + 60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.29 *0.16\",y:\"60*0.14 + 60/5*8 *0.39 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.25 *0.16\",y:\"60*0.14 + 60/5*8 *0.35 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.16 *0.16\",y:\"60*0.14 + 60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.16 *0.16\",y:\"60*0.14 + 60/5*8 *0.46 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.10 *0.16\",y:\"60*0.14 + 60/5*8 *0.48 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.04 *0.16\",y:\"60*0.14 + 60/5*8 *0.46 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.04 *0.16\",y:\"60*0.14 + 60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.04 *0.16\",y:\"60*0.14 + 60/5*8 *0.33 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.12 *0.16\",y:\"60*0.14 + 60/5*8 *0.38 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.18 *0.16\",y:\"60*0.14 + 60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.21 *0.16\",y:\"60*0.14 + 60/5*8 *0.33 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.14 *0.16\",y:\"60*0.14 + 60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.16 *0.16\",y:\"60*0.14 + 60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.26 *0.16\",y:\"60*0.14 + 60/5*8 *0.16 *0.16\"},{action:\"close\"},{action:\"move\",x:\"100*0.09 -100*0.01 *0.16\",y:\"60*0.14 + 60/5*8 *0.01 *0.16\"},{action:\"line\",x:\"100*0.09 +100*0.01 *0.16\",y:\"60*0.14 - 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 +100*0.04 *0.16\",y:\"60*0.14 + 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.08 *0.16\",y:\"60*0.14 + 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.08 *0.16\",y:\"60*0.14 - 60*0.03 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.12 *0.16\",y:\"60*0.14 - 60*0.03 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.12 *0.16\",y:\"60*0.14 - 60*0.0 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.15 *0.16\",y:\"60*0.14 + 60*0.02 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.18 *0.16\",y:\"60*0.14 -60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.22 *0.16\",y:\"60*0.14 + 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.18 *0.16\",y:\"60*0.14 + 60*0.04 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.20 *0.16\",y:\"60*0.14 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.25 *0.16\",y:\"60*0.14 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.25 *0.16\",y:\"60*0.14 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.20 *0.16\",y:\"60*0.14 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.18 *0.16\",y:\"60*0.14 + 60*0.16 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.21 *0.16\",y:\"60*0.14 + 60*0.19 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.18 *0.16\",y:\"60*0.14 + 60*0.22 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.15 *0.16\",y:\"60*0.14 + 60*0.19 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.12 *0.16\",y:\"60*0.14 + 60*0.21 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.12 *0.16\",y:\"60*0.14 + 60*0.25 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.08 *0.16\",y:\"60*0.14 + 60*0.26 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.08 *0.16\",y:\"60*0.14 + 60*0.21 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.05 *0.16\",y:\"60*0.14 + 60*0.18 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.01 *0.16\",y:\"60*0.14 + 60*0.22 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 - 100*0.02 *0.16\",y:\"60*0.14 + 60*0.19 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.0 *0.16\",y:\"60*0.14 + 60*0.16 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.0 *0.16\",y:\"60*0.14 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.04 *0.16\",y:\"60*0.14 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.04 *0.16\",y:\"60*0.14 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0. *0.16\",y:\"60*0.14 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.01 *0.16\",y:\"60*0.14 + 60*0.05 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.01 *0.16\",y:\"60*0.14 + 60*0.01 /5*8 *0.16\"},{action:\"close\"},{action:\"move\",x:\"100*0.15 -100*0.26 *0.16\",y:\"60*0.24 + 60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.28 *0.16\",y:\"60*0.24 + 60/5*8 *0.11 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.26 *0.16\",y:\"60*0.24 + 60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.17 *0.16\",y:\"60*0.24 + 60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.12 *0.16\",y:\"60*0.24 -60/5*8 *0.02 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.21 *0.16\",y:\"60*0.24 -60/5*8 *0.13 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.18 *0.16\",y:\"60*0.24 -60/5*8 *0.17 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.13 *0.16\",y:\"60*0.24 -60/5*8 *0.19 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.05 *0.16\",y:\"60*0.24 -60/5*8 *0.11 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.03 *0.16\",y:\"60*0.24 -60/5*8 *0.15 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.04 *0.16\",y:\"60*0.24 -60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.10 *0.16\",y:\"60*0.24 -60/5*8 *0.27 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.15 *0.16\",y:\"60*0.24 -60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.15 *0.16\",y:\"60*0.24 -60/5*8 *0.15 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.23 *0.16\",y:\"60*0.24 -60/5*8 *0.12 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.30 *0.16\",y:\"60*0.24 -60/5*8 *0.19 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.35 *0.16\",y:\"60*0.24 -60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.38 *0.16\",y:\"60*0.24 -60/5*8 *0.12 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.32 *0.16\",y:\"60*0.24 -60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.37 *0.16\",y:\"60*0.24 +60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.46 *0.16\",y:\"60*0.24 +60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.48 *0.16\",y:\"60*0.24 +60/5*8 *0.10 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.46 *0.16\",y:\"60*0.24 +60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.37 *0.16\",y:\"60*0.24 +60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.33 *0.16\",y:\"60*0.24 +60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.38 *0.16\",y:\"60*0.24 +60/5*8 *0.31 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.36 *0.16\",y:\"60*0.24 +60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.29 *0.16\",y:\"60*0.24 +60/5*8 *0.39 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.25 *0.16\",y:\"60*0.24 +60/5*8 *0.35 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.16 *0.16\",y:\"60*0.24 +60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.16 *0.16\",y:\"60*0.24 +60/5*8 *0.46 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.10 *0.16\",y:\"60*0.24 +60/5*8 *0.48 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.04 *0.16\",y:\"60*0.24 +60/5*8 *0.46 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.04 *0.16\",y:\"60*0.24 +60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.04 *0.16\",y:\"60*0.24 +60/5*8 *0.33 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.12 *0.16\",y:\"60*0.24 +60/5*8 *0.38 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.18 *0.16\",y:\"60*0.24 +60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.21 *0.16\",y:\"60*0.24 +60/5*8 *0.33 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.14 *0.16\",y:\"60*0.24 +60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.16 *0.16\",y:\"60*0.24 +60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.26 *0.16\",y:\"60*0.24 +60/5*8 *0.16 *0.16\"},{action:\"close\"},{action:\"move\",x:\"100*0.15 -100*0.01 *0.16\",y:\"60*0.24 +60/5*8 *0.01 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.01 *0.16\",y:\"60*0.24 - 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.04 *0.16\",y:\"60*0.24 + 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.08 *0.16\",y:\"60*0.24 + 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.08 *0.16\",y:\"60*0.24 - 60*0.03 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.12 *0.16\",y:\"60*0.24 - 60*0.03 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.12 *0.16\",y:\"60*0.24 - 60*0.0 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.15 *0.16\",y:\"60*0.24 + 60*0.02 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.18 *0.16\",y:\"60*0.24 -60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.22 *0.16\",y:\"60*0.24 + 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.18 *0.16\",y:\"60*0.24 + 60*0.04 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.20 *0.16\",y:\"60*0.24 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.25 *0.16\",y:\"60*0.24 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.25 *0.16\",y:\"60*0.24 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.20 *0.16\",y:\"60*0.24 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.18 *0.16\",y:\"60*0.24 + 60*0.16 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.21 *0.16\",y:\"60*0.24 + 60*0.19 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.18 *0.16\",y:\"60*0.24 + 60*0.22 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.15 *0.16\",y:\"60*0.24 + 60*0.19 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.12 *0.16\",y:\"60*0.24 + 60*0.21 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.12 *0.16\",y:\"60*0.24 + 60*0.25 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.08 *0.16\",y:\"60*0.24 + 60*0.26 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.08 *0.16\",y:\"60*0.24 + 60*0.21 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.05 *0.16\",y:\"60*0.24 + 60*0.18 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.01 *0.16\",y:\"60*0.24 + 60*0.22 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 - 100*0.02 *0.16\",y:\"60*0.24 + 60*0.19 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.0 *0.16\",y:\"60*0.24 + 60*0.16 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.0 *0.16\",y:\"60*0.24 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.04 *0.16\",y:\"60*0.24 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.04 *0.16\",y:\"60*0.24 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0 *0.16\",y:\"60*0.24 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.01 *0.16\",y:\"60*0.24 + 60*0.05 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.01 *0.16\",y:\"60*0.24 + 60*0.01 /5*8 *0.16\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_SCRIPT_TASK = "[{action:\"move\",x:\"100*0.15- 100*0.05\",y:\"60*0.24- 60*0.1\"},{action:\"line\",x:\"100*0.15 + 100*0.05\",y:\"60*0.24 - 60*0.1\"},{action:\"curve\",x1:\"100*0.15 + 100*0.02\",y1:\"60*0.24 - 60*0.1\",x2:\"100*0.15 + 100*0.02\",y2:\"60*0.24\",x:\"100*0.15 + 100*0.04\",y:\"60*0.24\"},{action:\"curve\",x1:\"100*0.15 + 100*0.06\",y1:\"60*0.24\",x2:\"100*0.15 + 100*0.06\",y2:\"60*0.24 + 60*0.1\",x:\"100*0.15 + 100*0.03\",y:\"60*0.24 + 60*0.1\"},{action:\"line\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 + 60*0.1\"},{action:\"curve\",x1:\"100*0.15 - 100*0.05\",y1:\"60*0.24 + 60*0.1\",x2:\"100*0.15 - 100*0.05\",y2:\"60*0.24\",x:\"100*0.15 - 100*0.07\",y:\"60*0.24\"},{action:\"curve\",x1:\"100*0.15 - 100*0.09\",y1:\"60*0.24\",x2:\"100*0.15 - 100*0.09\",y2:\"60*0.24 - 60*0.1\",x:\"100*0.15 - 100*0.05\",y:\"60*0.24 - 60*0.1\"},{action:\"close\"},{action:\"move\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 - 60*0.05\"},{action:\"line\",x:\"100*0.15 + 100*0.025\",y:\"60*0.24 - 60*0.05\"},{action:\"move\",x:\"100*0.15 - 100*0.07\",y:\"60*0.24 - 0\"},{action:\"line\",x:\"100*0.15 + 100*0.04\",y:\"60*0.24 - 0\"},{action:\"move\",x:\"100*0.15 - 100*0.055\",y:\"60*0.24 + 60*0.06\"},{action:\"line\",x:\"100*0.15 + 100*0.05\",y:\"60*0.24 + 60*0.06\"}]"; + public static final String GLOBAL_COMMAND_BUSINESS_RULE = "[{action:\"move\",x:\"100*0.15- 100*0.08\",y:\"60*0.24- 60*0.1\"},{action:\"line\",x:\"100*0.15 + 100*0.08\",y:\"60*0.24- 60*0.1\"},{action:\"line\",x:\"100*0.15 + 100*0.08\",y:\"60*0.24 + 60*0.1\"},{action:\"line\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 + 60*0.1\"},{action:\"close\"},{action:\"move\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 - 60*0.05\"},{action:\"line\",x:\"100*0.15 + 100*0.08\",y:\"60*0.24 - 60*0.05\"},{action:\"move\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 + 60*0.0\"},{action:\"line\",x:\"100*0.15 + 100*0.08\",y:\"60*0.24 + 60*0.0\"},{action:\"move\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 + 60*0.05\"},{action:\"line\",x:\"100*0.15 + 100*0.08\",y:\"60*0.24 + 60*0.05\"},{action:\"move\",x:\"100*0.15 - 100*0.04\",y:\"60*0.24 - 60*0.1\"},{action:\"line\",x:\"100*0.15 - 100*0.04\",y:\"60*0.24 + 60*0.1\"}]"; + public static final String GLOBAL_COMMAND_USER_TASK = "[{action:\"move\",x:\"100*0.05+ 100/11*2*0.5-100/11*2*0.2\",y:\"60*0.1+ 60/55*16*0.3\"},{action:\"curve\",x1:\"100*0.05+ 100/11*2*0.30\",y1:\"60*0.1+ 60/55*16*0.3 - 60/55*16*0.4*2/3\",x2:\"100*0.05+ 100/11*2*0.5+100/11*2*0.2\",y2:\"60*0.1+ 60/55*16*0.3 - 60/55*16*0.4*2/3\",x:\"100*0.05+ 100/11*2*0.5+100/11*2*0.2\",y:\"60*0.1+ 60/55*16*0.3\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.5-100/11*2*0.2\",y:\"60*0.1+ 60/55*16*0.3\"},{action:\"close\"},{action:\"move\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.1\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.1\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.68\"},{action:\"quadraticCurve\",x1:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.1\",y1:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\"},{action:\"quadraticCurve\",x1:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.95\",y1:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.95\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.68\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.95\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.77\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.77\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.77\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.77\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.23\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.23\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.77\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.23\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.05\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"close\"},{action:\"move\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.38\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.42\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.40\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.32\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.35\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.32\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.27\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.43\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.27\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.46\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.24\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.68\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.24\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.68\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.35\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.40\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.62\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.42\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_INNER_ROUNDRECTANGLE = "[{action:\"move\",x:\"w * 0 +3\",y:\"h * 0 + h/30 +3\"},{action:\"quadraticCurve\",x1:\"w * 0 +3 +1\",y1:\"h * 0 +3 +1\",x:\"w * 0 + h/30 +3\",y:\"h * 0 +3\"},{action:\"line\",x:\"w * 1 - h/30 -3\",y:\"h * 0 +3\"},{action:\"quadraticCurve\",x1:\"w * 1 -3\",y1:\"h * 0+3\",x:\"w * 1 -3\",y:\"h * 0 + h/30 +3\"},{action:\"line\",x:\"w * 1 -3\",y:\"h * 1 - h/30-3\"},{action:\"quadraticCurve\",x1:\"w * 1 -3\",y1:\"h * 1 -3\",x:\"w * 1 - h/30-3\",y:\"h * 1 -3\"},{action:\"line\",x:\"w * 0 + h/30 +3\",y:\"h * 1 -3\"},{action:\"quadraticCurve\",x1:\"w * 0+3\",y1:\"h * 1-3\",x:\"w * 0 +3\",y:\"h * 1 - h/30 -3\"},{action:\"line\",x:\"w * 0 + 3\",y:\"h * 0 + h/30+3\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_EXCLUSIVE_GATEWAY = "[{action:\"move\",x:\"w*0.5\",y:\"h*0.5\"},{action:\"move\",x:\"w*0.5 - w*0.5*0.4 + w*0.02\",y:\"h*0.5 - h*0.5*0.4 - h*0.02\"},{action:\"line\",x:\"w*0.5 + w*0.5*0.4 + w*0.02\",y:\"h*0.5 + h*0.5*0.4 - h*0.02\"},{action:\"line\",x:\"w*0.5 + w*0.5*0.4 - w*0.02\",y:\"h*0.5 + h*0.5*0.4 + h*0.02\"},{action:\"line\",x:\"w*0.5 - w*0.5*0.4 - w*0.02\",y:\"h*0.5 - h*0.5*0.4 + h*0.02\"},{action:\"close\"},{action:\"move\",x:\"w*0.5 + w*0.5*0.4 - w*0.02\",y:\"h*0.5 - h*0.5*0.4 - h*0.02\"},{action:\"line\",x:\"w*0.5 - w*0.5*0.4 - w*0.02\",y:\"h*0.5 + h*0.5*0.4 - h*0.02\"},{action:\"line\",x:\"w*0.5 - w*0.5*0.4 + w*0.02\",y:\"h*0.5 + h*0.5*0.4 + h*0.02\"},{action:\"line\",x:\"w*0.5 + w*0.5*0.4 + w*0.02\",y:\"h*0.5 - h*0.5*0.4 + h*0.02\"},{action:\"line\",x:\"w*0.5 + w*0.5*0.4 - w*0.02\",y:\"h*0.5 - h*0.5*0.4 - h*0.02\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_COMPLEX_GATEWAY0 = "[{action:\"move\",x:\"w*0.5 - Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02\",y:\"h*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02\",y:\"h*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.03\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02\",y:\"h*0.5 + Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02\",y:\"h*0.5 - Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_COMPLEX_GATEWAY1 = "[{action:\"move\",x:\"w*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02\",y:\"h*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02\",y:\"h*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02\",y:\"h*0.5 + Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02\",y:\"h*0.5 - Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02\",y:\"h*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_COMPLEX_GATEWAY2 = "[{action:\"move\",x:\"w*0.5 - Math.min(w,h)*0.027\",y:\"h*0.5 - Math.min(w,h)*0.5*0.4\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.027\",y:\"h*0.5 + Math.min(w,h)*0.5*0.4\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.027\",y:\"h*0.5 + Math.min(w,h)*0.5*0.4\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.027\",y:\"h*0.5 - Math.min(w,h)*0.5*0.4\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.027\",y:\"h*0.5 - Math.min(w,h)*0.5*0.4\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_COMPLEX_GATEWAY3 = "[{action:\"move\",x:\"w*0.5 - Math.min(w,h)*0.5*0.4\",y:\"h*0.5 - Math.min(w,h)*0.027\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.5*0.4\",y:\"h*0.5 + Math.min(w,h)*0.027\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.5*0.4\",y:\"h*0.5 + Math.min(w,h)*0.027\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.5*0.4\",y:\"h*0.5 - Math.min(w,h)*0.027\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.5*0.4\",y:\"h*0.5 - Math.min(w,h)*0.027\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_EVENT_BASED_GATEWAY = "[{action:\"move\",x:\"w*0.5 - w*0.5/55*32\",y:\"h*0.5\"},{action:\"curve\",x1:\"w*0.5 - w*0.5/55*32\",y1:\"h*0.5 - h/55*32*2/3\",x2:\"w*0.5 + w*0.5/55*32\",y2:\"h*0.5 - h/55*32*2/3\",x:\"w*0.5 + w*0.5/55*32\",y:\"h*0.5\"},{action:\"curve\",x1:\"w*0.5 + w*0.5/55*32\",y1:\"h*0.5 + h/55*32*2/3\",x2:\"w*0.5 - w*0.5/55*32\",y2:\"h*0.5 + h/55*32*2/3\",x:\"w*0.5 - w*0.5/55*32\",y:\"h*0.5\"},{action:\"close\"},{action:\"move\",x:\"w*0.5 - w*0.4/55*32\",y:\"h*0.5\"},{action:\"curve\",x1:\"w*0.5 - w*0.4/55*32\",y1:\"h*0.5 - h/55*32*2/3*0.8\",x2:\"w*0.5+w*0.4/55*32\",y2:\"h*0.5 - h/55*32*2/3*0.8\",x:\"w*0.5 + w*0.4/55*32\",y:\"h*0.5\"},{action:\"curve\",x1:\"w*0.5 + w*0.4/55*32\",y1:\"h*0.5 + h/55*32*2/3*0.8\",x2:\"w*0.5 - w*0.4/55*32\",y2:\"h*0.5 + h/55*32*2/3*0.8\",x:\"w*0.5 - w*0.4/55*32\",y:\"h*0.5\"},{action:\"close\"},{action:\"move\",x:\"w*0.5\",y:\"h*0.5 - h/55*32*0.28\"},{action:\"line\",x:\"w*0.5+ w/55*32*0.28\",y:\"h*0.5- h/55*32*0.08\"},{action:\"line\",x:\"w*0.5+ w/55*32*0.17\",y:\"h*0.5+h/55*32*0.25\"},{action:\"line\",x:\"w*0.5- w/55*32*0.17\",y:\"h*0.5+ h/55*32*0.25\"},{action:\"line\",x:\"w*0.5- w/55*32*0.28\",y:\"h*0.5-h/55*32*0.08\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5-h/55*32*0.28\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_EVENT_BASED_START_GATEWAY = "[{action:\"move\",x:\"w*0.5 - w*0.5/55*32\",y:\"h*0.5\"},{action:\"curve\",x1:\"w*0.5 - w*0.5/55*32\",y1:\"h*0.5 - h/55*32*2/3\",x2:\"w*0.5 + w*0.5/55*32\",y2:\"h*0.5 - h/55*32*2/3\",x:\"w*0.5 + w*0.5/55*32\",y:\"h*0.5\"},{action:\"curve\",x1:\"w*0.5 + w*0.5/55*32\",y1:\"h*0.5 + h/55*32*2/3\",x2:\"w*0.5 - w*0.5/55*32\",y2:\"h*0.5 + h/55*32*2/3\",x:\"w*0.5 - w*0.5/55*32\",y:\"h*0.5\"},{action:\"close\"},{action:\"move\",x:\"w*0.5\",y:\"h*0.5 - h/55*32*0.28\"},{action:\"line\",x:\"w*0.5+ w/55*32*0.28\",y:\"h*0.5- h/55*32*0.08\"},{action:\"line\",x:\"w*0.5+ w/55*32*0.17\",y:\"h*0.5+h/55*32*0.25\"},{action:\"line\",x:\"w*0.5- w/55*32*0.17\",y:\"h*0.5+ h/55*32*0.25\"},{action:\"line\",x:\"w*0.5- w/55*32*0.28\",y:\"h*0.5-h/55*32*0.08\"},{action:\"line\",x:\"w*0.5\",y:\"h*0.5-h/55*32*0.28\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_PARALLEL_GATEWAY = "[{action:\"move\",x:\"w*0.5 - Math.min(w,h)*0.04\",y:\"h*0.5 - h*0.5*0.5\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.04\",y:\"h*0.5 + h*0.5*0.5\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.04\",y:\"h*0.5 + h*0.5*0.5\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.04\",y:\"h*0.5 - h*0.5*0.5\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.04\",y:\"h*0.5 - h*0.5*0.5\"},{action:\"close\"},{action:\"move\",x:\"w*0.5 - w*0.5*0.5\",y:\"h*0.5 - Math.min(w,h)*0.04\"},{action:\"line\",x:\"w*0.5 - w*0.5*0.5\",y:\"h*0.5 + Math.min(w,h)*0.04\"},{action:\"line\",x:\"w*0.5 + w*0.5*0.5\",y:\"h*0.5 + Math.min(w,h)*0.04\"},{action:\"line\",x:\"w*0.5 + w*0.5*0.5\",y:\"h*0.5 - Math.min(w,h)*0.04\"},{action:\"line\",x:\"w*0.5 - w*0.5*0.5\",y:\"h*0.5 - Math.min(w,h)*0.04\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_PARALLEL_EVENTBASED_GATEWAY = "[{action:\"move\",x:\"w*0.5 - Math.min(w,h)*0.027\",y:\"h*0.5 - Math.min(w,h)*0.5*0.4\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.027\",y:\"h*0.5 - Math.min(w,h)*0.02\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.5*0.4\",y:\"h*0.5 - Math.min(w,h)*0.027\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.5*0.4\",y:\"h*0.5 + Math.min(w,h)*0.027\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.027\",y:\"h*0.5 + Math.min(w,h)*0.027\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.027\",y:\"h*0.5 + Math.min(w,h)*0.5*0.4\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.027\",y:\"h*0.5 + Math.min(w,h)*0.5*0.4\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.027\",y:\"h*0.5 + Math.min(w,h)*0.027\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.5*0.4\",y:\"h*0.5 + Math.min(w,h)*0.027\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.5*0.4\",y:\"h*0.5 - Math.min(w,h)*0.027\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.027\",y:\"h*0.5 - Math.min(w,h)*0.027\"},{action:\"line\",x:\"w*0.5 + Math.min(w,h)*0.027\",y:\"h*0.5 - Math.min(w,h)*0.5*0.4\"},{action:\"line\",x:\"w*0.5 - Math.min(w,h)*0.027\",y:\"h*0.5 - Math.min(w,h)*0.5*0.4\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_DATA_IN_OBJECT = "[{action:\"move\",x:\"w/3/4\",y:\"h/4/3+3\"},{action:\"line\",x:\"w/3/4*3.5\",y:\"h/4/3+3\"},{action:\"line\",x:\"w/3/4*3.5\",y:\"h/4/3-h/4/5+3\"},{action:\"line\",x:\"w/3/4*5\",y:\"h/4/2+3\"},{action:\"line\",x:\"w/3/4*3.5\",y:\"h/4/2+h/4/2-h/4/3+h/4/5+3\"},{action:\"line\",x:\"w/3/4*3.5\",y:\"h/4/2+h/4/2-h/4/3+3\"},{action:\"line\",x:\"w/3/4\",y:\"h/4/2+h/4/2-h/4/3+3\"},{action:\"line\",x:\"w/3/4\",y:\"h/4/3+3\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_CHOREOGRAPHY_TASK = "[{action:\"move\",x:\"0\",y:\"6\"},{action:\"quadraticCurve\",x1:\"0\",y1:\"0\",x:\"6\",y:\"0\"},{action:\"line\",x:\"w-6\",y:\"0\"},{action:\"quadraticCurve\",x1:\"w\",y1:\"0\",x:\"w\",y:\"6\"},{action:\"line\",x:\"w\",y:\"h-6\"},{action:\"quadraticCurve\",x1:\"w\",y1:\"h\",x:\"w-6\",y:\"h\"},{action:\"line\",x:\"6\",y:\"h\"},{action:\"quadraticCurve\",x1:\"0\",y1:\"h\",x:\"0\",y:\"h-6\"},{action:\"line\",x:\"0\",y:\"6\"},{action:\"close\"}]"; + + public static final String GLOBAL_COMMAND_METHOD_USER_TASK = "[{action:\"move\",x:\"100*0.05+ 100/11*2*0.5-100/11*2*0.2\",y:\"60*0.1+ 60/55*16*0.3\"},{action:\"curve\",x1:\"100*0.05+ 100/11*2*0.30\",y1:\"60*0.1+ 60/55*16*0.3 - 60/55*16*0.4*2/3\",x2:\"100*0.05+ 100/11*2*0.5+100/11*2*0.2\",y2:\"60*0.1+ 60/55*16*0.3 - 60/55*16*0.4*2/3\",x:\"100*0.05+ 100/11*2*0.5+100/11*2*0.2\",y:\"60*0.1+ 60/55*16*0.3\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.5-100/11*2*0.2\",y:\"60*0.1+ 60/55*16*0.3\"},{action:\"close\"},{action:\"move\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.1\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.1\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.68\"},{action:\"quadraticCurve\",x1:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.1\",y1:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\"},{action:\"quadraticCurve\",x1:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.95\",y1:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.95\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.68\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.95\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.77\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.77\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.77\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.77\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.23\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.23\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.77\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.23\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.05\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96\"},{action:\"close\"},{action:\"move\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.38\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.42\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.40\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.32\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.35\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.32\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.27\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.43\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.27\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.46\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.24\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.68\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.24\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.68\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.35\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.40\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.62\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.42\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58\"},{action:\"line\",x:\"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35\",y:\"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_METHOD_SERVICE_TASK = "[{action:\"move\",x:\"100*0.09 -100*0.26 *0.16\",y:\"60*0.14 + 60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.28 *0.16\",y:\"60*0.14 + 60/5*8 *0.11 *0.16\"},{action:\"line\",x:\"100*0.09 - 100*0.26 *0.16\",y:\"60*0.14 + 60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.17 *0.16\",y:\"60*0.14 + 60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.12 *0.16\",y:\"60*0.14 -60/5*8 *0.02 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.21 *0.16\",y:\"60*0.14 -60/5*8 *0.13 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.18 *0.16\",y:\"60*0.14 -60/5*8 *0.17 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.13 *0.16\",y:\"60*0.14 -60/5*8 *0.19 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.05 *0.16\",y:\"60*0.14 -60/5*8 *0.11 *0.16\"},{action:\"line\",x:\"100*0.09 +100*0.03 *0.16\",y:\"60*0.14 -60/5*8 *0.15 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.04 *0.16\",y:\"60*0.14 -60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.10 *0.16\",y:\"60*0.14 -60/5*8 *0.27 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.15 *0.16\",y:\"60*0.14 -60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.15 *0.16\",y:\"60*0.14 -60/5*8 *0.15 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.23 *0.16\",y:\"60*0.14 -60/5*8 *0.12 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.30 *0.16\",y:\"60*0.14 -60/5*8 *0.19 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.35 *0.16\",y:\"60*0.14 -60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.38 *0.16\",y:\"60*0.14 -60/5*8 *0.12 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.32 *0.16\",y:\"60*0.14 -60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.37 *0.16\",y:\"60*0.14 + 60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.46 *0.16\",y:\"60*0.14 + 60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.48 *0.16\",y:\"60*0.14 + 60/5*8 *0.10 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.46 *0.16\",y:\"60*0.14 + 60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.37 *0.16\",y:\"60*0.14 + 60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.33 *0.16\",y:\"60*0.14 + 60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.38 *0.16\",y:\"60*0.14 + 60/5*8 *0.31 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.36 *0.16\",y:\"60*0.14 + 60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.29 *0.16\",y:\"60*0.14 + 60/5*8 *0.39 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.25 *0.16\",y:\"60*0.14 + 60/5*8 *0.35 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.16 *0.16\",y:\"60*0.14 + 60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.16 *0.16\",y:\"60*0.14 + 60/5*8 *0.46 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.10 *0.16\",y:\"60*0.14 + 60/5*8 *0.48 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.04 *0.16\",y:\"60*0.14 + 60/5*8 *0.46 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.04 *0.16\",y:\"60*0.14 + 60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.04 *0.16\",y:\"60*0.14 + 60/5*8 *0.33 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.12 *0.16\",y:\"60*0.14 + 60/5*8 *0.38 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.18 *0.16\",y:\"60*0.14 + 60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.21 *0.16\",y:\"60*0.14 + 60/5*8 *0.33 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.14 *0.16\",y:\"60*0.14 + 60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.16 *0.16\",y:\"60*0.14 + 60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.26 *0.16\",y:\"60*0.14 + 60/5*8 *0.16 *0.16\"},{action:\"close\"},{action:\"move\",x:\"100*0.09 -100*0.01 *0.16\",y:\"60*0.14 + 60/5*8 *0.01 *0.16\"},{action:\"line\",x:\"100*0.09 +100*0.01 *0.16\",y:\"60*0.14 - 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 +100*0.04 *0.16\",y:\"60*0.14 + 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.08 *0.16\",y:\"60*0.14 + 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.08 *0.16\",y:\"60*0.14 - 60*0.03 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.12 *0.16\",y:\"60*0.14 - 60*0.03 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.12 *0.16\",y:\"60*0.14 - 60*0.0 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.15 *0.16\",y:\"60*0.14 + 60*0.02 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.18 *0.16\",y:\"60*0.14 -60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.22 *0.16\",y:\"60*0.14 + 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.18 *0.16\",y:\"60*0.14 + 60*0.04 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.20 *0.16\",y:\"60*0.14 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.25 *0.16\",y:\"60*0.14 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.25 *0.16\",y:\"60*0.14 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.20 *0.16\",y:\"60*0.14 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.18 *0.16\",y:\"60*0.14 + 60*0.16 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.21 *0.16\",y:\"60*0.14 + 60*0.19 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.18 *0.16\",y:\"60*0.14 + 60*0.22 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.15 *0.16\",y:\"60*0.14 + 60*0.19 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.12 *0.16\",y:\"60*0.14 + 60*0.21 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.12 *0.16\",y:\"60*0.14 + 60*0.25 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.08 *0.16\",y:\"60*0.14 + 60*0.26 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.08 *0.16\",y:\"60*0.14 + 60*0.21 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.05 *0.16\",y:\"60*0.14 + 60*0.18 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.01 *0.16\",y:\"60*0.14 + 60*0.22 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 - 100*0.02 *0.16\",y:\"60*0.14 + 60*0.19 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.0 *0.16\",y:\"60*0.14 + 60*0.16 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.0 *0.16\",y:\"60*0.14 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.04 *0.16\",y:\"60*0.14 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.04 *0.16\",y:\"60*0.14 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0. *0.16\",y:\"60*0.14 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 + 100*0.01 *0.16\",y:\"60*0.14 + 60*0.05 /5*8 *0.16\"},{action:\"line\",x:\"100*0.09 -100*0.01 *0.16\",y:\"60*0.14 + 60*0.01 /5*8 *0.16\"},{action:\"close\"},{action:\"move\",x:\"100*0.15 -100*0.26 *0.16\",y:\"60*0.24 + 60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.28 *0.16\",y:\"60*0.24 + 60/5*8 *0.11 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.26 *0.16\",y:\"60*0.24 + 60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.17 *0.16\",y:\"60*0.24 + 60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.12 *0.16\",y:\"60*0.24 -60/5*8 *0.02 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.21 *0.16\",y:\"60*0.24 -60/5*8 *0.13 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.18 *0.16\",y:\"60*0.24 -60/5*8 *0.17 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.13 *0.16\",y:\"60*0.24 -60/5*8 *0.19 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.05 *0.16\",y:\"60*0.24 -60/5*8 *0.11 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.03 *0.16\",y:\"60*0.24 -60/5*8 *0.15 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.04 *0.16\",y:\"60*0.24 -60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.10 *0.16\",y:\"60*0.24 -60/5*8 *0.27 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.15 *0.16\",y:\"60*0.24 -60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.15 *0.16\",y:\"60*0.24 -60/5*8 *0.15 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.23 *0.16\",y:\"60*0.24 -60/5*8 *0.12 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.30 *0.16\",y:\"60*0.24 -60/5*8 *0.19 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.35 *0.16\",y:\"60*0.24 -60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.38 *0.16\",y:\"60*0.24 -60/5*8 *0.12 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.32 *0.16\",y:\"60*0.24 -60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.37 *0.16\",y:\"60*0.24 +60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.46 *0.16\",y:\"60*0.24 +60/5*8 *0.05 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.48 *0.16\",y:\"60*0.24 +60/5*8 *0.10 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.46 *0.16\",y:\"60*0.24 +60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.37 *0.16\",y:\"60*0.24 +60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.33 *0.16\",y:\"60*0.24 +60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.38 *0.16\",y:\"60*0.24 +60/5*8 *0.31 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.36 *0.16\",y:\"60*0.24 +60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.29 *0.16\",y:\"60*0.24 +60/5*8 *0.39 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.25 *0.16\",y:\"60*0.24 +60/5*8 *0.35 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.16 *0.16\",y:\"60*0.24 +60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.16 *0.16\",y:\"60*0.24 +60/5*8 *0.46 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.10 *0.16\",y:\"60*0.24 +60/5*8 *0.48 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.04 *0.16\",y:\"60*0.24 +60/5*8 *0.46 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.04 *0.16\",y:\"60*0.24 +60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.04 *0.16\",y:\"60*0.24 +60/5*8 *0.33 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.12 *0.16\",y:\"60*0.24 +60/5*8 *0.38 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.18 *0.16\",y:\"60*0.24 +60/5*8 *0.37 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.21 *0.16\",y:\"60*0.24 +60/5*8 *0.33 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.14 *0.16\",y:\"60*0.24 +60/5*8 *0.25 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.16 *0.16\",y:\"60*0.24 +60/5*8 *0.16 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.26 *0.16\",y:\"60*0.24 +60/5*8 *0.16 *0.16\"},{action:\"close\"},{action:\"move\",x:\"100*0.15 -100*0.01 *0.16\",y:\"60*0.24 +60/5*8 *0.01 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.01 *0.16\",y:\"60*0.24 - 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.04 *0.16\",y:\"60*0.24 + 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.08 *0.16\",y:\"60*0.24 + 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.08 *0.16\",y:\"60*0.24 - 60*0.03 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.12 *0.16\",y:\"60*0.24 - 60*0.03 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.12 *0.16\",y:\"60*0.24 - 60*0.0 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.15 *0.16\",y:\"60*0.24 + 60*0.02 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.18 *0.16\",y:\"60*0.24 -60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.22 *0.16\",y:\"60*0.24 + 60*0.01 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.18 *0.16\",y:\"60*0.24 + 60*0.04 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.20 *0.16\",y:\"60*0.24 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.25 *0.16\",y:\"60*0.24 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.25 *0.16\",y:\"60*0.24 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.20 *0.16\",y:\"60*0.24 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.18 *0.16\",y:\"60*0.24 + 60*0.16 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.21 *0.16\",y:\"60*0.24 + 60*0.19 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.18 *0.16\",y:\"60*0.24 + 60*0.22 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.15 *0.16\",y:\"60*0.24 + 60*0.19 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.12 *0.16\",y:\"60*0.24 + 60*0.21 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.12 *0.16\",y:\"60*0.24 + 60*0.25 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.08 *0.16\",y:\"60*0.24 + 60*0.26 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.08 *0.16\",y:\"60*0.24 + 60*0.21 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.05 *0.16\",y:\"60*0.24 + 60*0.18 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.01 *0.16\",y:\"60*0.24 + 60*0.22 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 - 100*0.02 *0.16\",y:\"60*0.24 + 60*0.19 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.0 *0.16\",y:\"60*0.24 + 60*0.16 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.0 *0.16\",y:\"60*0.24 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.04 *0.16\",y:\"60*0.24 + 60*0.12 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.04 *0.16\",y:\"60*0.24 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0 *0.16\",y:\"60*0.24 + 60*0.08 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 + 100*0.01 *0.16\",y:\"60*0.24 + 60*0.05 /5*8 *0.16\"},{action:\"line\",x:\"100*0.15 -100*0.01 *0.16\",y:\"60*0.24 + 60*0.01 /5*8 *0.16\"},{action:\"close\"}]"; + public static final String GLOBAL_COMMAND_METHOD_BUSINESS_RULE = "[{action:\"move\",x:\"100*0.15- 100*0.08\",y:\"60*0.24- 60*0.1\"},{action:\"line\",x:\"100*0.15 + 100*0.08\",y:\"60*0.24- 60*0.1\"},{action:\"line\",x:\"100*0.15 + 100*0.08\",y:\"60*0.24 + 60*0.1\"},{action:\"line\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 + 60*0.1\"},{action:\"close\"},{action:\"move\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 - 60*0.05\"},{action:\"line\",x:\"100*0.15 + 100*0.08\",y:\"60*0.24 - 60*0.05\"},{action:\"move\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 + 60*0.0\"},{action:\"line\",x:\"100*0.15 + 100*0.08\",y:\"60*0.24 + 60*0.0\"},{action:\"move\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 + 60*0.05\"},{action:\"line\",x:\"100*0.15 + 100*0.08\",y:\"60*0.24 + 60*0.05\"},{action:\"move\",x:\"100*0.15 - 100*0.04\",y:\"60*0.24 - 60*0.1\"},{action:\"line\",x:\"100*0.15 - 100*0.04\",y:\"60*0.24 + 60*0.1\"}]"; + public static final String GLOBAL_COMMAND_METHOD_SCRIPT_TASK = "[{action:\"move\",x:\"100*0.15- 100*0.05\",y:\"60*0.24- 60*0.1\"},{action:\"line\",x:\"100*0.15 + 100*0.05\",y:\"60*0.24 - 60*0.1\"},{action:\"curve\",x1:\"100*0.15 + 100*0.02\",y1:\"60*0.24 - 60*0.1\",x2:\"100*0.15 + 100*0.02\",y2:\"60*0.24\",x:\"100*0.15 + 100*0.04\",y:\"60*0.24\"},{action:\"curve\",x1:\"100*0.15 + 100*0.06\",y1:\"60*0.24\",x2:\"100*0.15 + 100*0.06\",y2:\"60*0.24 + 60*0.1\",x:\"100*0.15 + 100*0.03\",y:\"60*0.24 + 60*0.1\"},{action:\"line\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 + 60*0.1\"},{action:\"curve\",x1:\"100*0.15 - 100*0.05\",y1:\"60*0.24 + 60*0.1\",x2:\"100*0.15 - 100*0.05\",y2:\"60*0.24\",x:\"100*0.15 - 100*0.07\",y:\"60*0.24\"},{action:\"curve\",x1:\"100*0.15 - 100*0.09\",y1:\"60*0.24\",x2:\"100*0.15 - 100*0.09\",y2:\"60*0.24 - 60*0.1\",x:\"100*0.15 - 100*0.05\",y:\"60*0.24 - 60*0.1\"},{action:\"close\"},{action:\"move\",x:\"100*0.15 - 100*0.08\",y:\"60*0.24 - 60*0.05\"},{action:\"line\",x:\"100*0.15 + 100*0.025\",y:\"60*0.24 - 60*0.05\"},{action:\"move\",x:\"100*0.15 - 100*0.07\",y:\"60*0.24 - 0\"},{action:\"line\",x:\"100*0.15 + 100*0.04\",y:\"60*0.24 - 0\"},{action:\"move\",x:\"100*0.15 - 100*0.055\",y:\"60*0.24 + 60*0.06\"},{action:\"line\",x:\"100*0.15 + 100*0.05\",y:\"60*0.24 + 60*0.06\"}]"; + + /** + * 重装Model + * + * @param model + * @param msgAction 设计器发送的消息jsonArray字符串 + */ + public static void resetBaseModelOfMsgAction(BaseModel model, String msgAction) { + // 存入draw + String draw = model.getDraw(); + if (draw == null || ("".equals(draw) || "\"null\"".equals(draw))) { + return; + } + JSONArray msgActionJsonArray = JSONArray.parseArray(msgAction); + /* JSONObject drawJson = JSONObject.fromObject(draw); + * System.out.println("格式化用时:"+(System.currentTimeMillis()-start)); + * drawJson.put("updateTime", model.getUpdateTime()); if (drawJson == + * null || drawJson.size() == 0) { drawJson = + * JSONObject.fromObject(getTemplateOfDraw(model.getUUID()));// 获取默认版本 } + * JSONArray msgJsonArray = drawJson.getJSONArray("messages"); + * msgJsonArray.add(msgActionJsonArray); + * model.setDraw(drawJson.toString());// 存入draw */ + // definition + String definition = model.getDefinition(); + JSONObject defineJson = JSONObject.parseObject(definition); + if (defineJson == null || defineJson.size() == 0) { + defineJson = JSONObject.parseObject(getTemplateOfDefine(model.getUUID())); + } + defineJson.put("updateTime", model.getUpdateTime()); + JSONObject elements = JSONObject.parseObject(defineJson.getString("elements"));// 图形存放 + for (int i = 0, size = msgActionJsonArray.size(); i < size; i++) { + JSONObject message = JSONObject.parseObject(msgActionJsonArray.getString(i)); + String action = (String) message.get("action"); + JSONArray jsonArr = null; + if ("create".equals(action)) { + jsonArr = createAction(model, elements, message); + } else if ("update".equals(action)) { + jsonArr = updateAction(model, elements, message); + } else if ("remove".equals(action)) { + jsonArr = removeAction(model, elements, message); + } else if ("updateLocalAttribute".equals(action)) { + defineJson.put("localAttribute", msgActionJsonArray.getJSONObject(0).getJSONObject("content").getString("update")); + } else { + defineJson.put("page", msgActionJsonArray.getJSONObject(0).getJSONObject("content").getString("update")); + } + if (jsonArr != null) + CoeDesignerShapeCache.getCache().put(model.getUUID(), jsonArr); + + } + model.setDefinition(defineJson.toString());// 存入define; + } + + private static JSONArray createAction(BaseModel model, JSONObject elements, JSONObject message) { + JSONArray jsonArr; + JSONArray msgArray = message.getJSONArray("content"); + for (int ii = 0, iiSize = msgArray.size(); ii < iiSize; ii++) { + JSONObject msgJson = msgArray.getJSONObject(ii); + // JSONObject jsonTemp = ShapeUtil.getJson(msgJson); + elements.put(msgJson.getString("id"), msgJson);// 创建 + } + // 将图形存入缓存 + jsonArr = ShapeUtil.getCreateJsonArray(CoeDesignerShapeCache.getCache().get(model.getUUID()), msgArray); + // CoeDesignerShapeCache.getCache().put(model.getUUID(), jsonArr); + return jsonArr; + } + + private static JSONArray updateAction(BaseModel model, JSONObject elements, JSONObject message) { + JSONArray jsonArr; + JSONObject contentJson = message.getJSONObject("content"); + JSONArray updatesArray = contentJson.getJSONArray("updates"); + for (int ii = 0, iiSize = updatesArray.size(); ii < iiSize; ii++) { + JSONObject msgJson = updatesArray.getJSONObject(ii); + elements.put(msgJson.getString("id"), msgJson);// 更新 + } + // 将图形存入缓存 + jsonArr = ShapeUtil.getUpdateJsonArray(CoeDesignerShapeCache.getCache().get(model.getUUID()), updatesArray); + // CoeDesignerShapeCache.getCache().put(model.getUUID(), jsonArr); + // controller.updateMessage(message.getJSONArray("content")); + return jsonArr; + } + + private static JSONArray removeAction(BaseModel model, JSONObject elements, JSONObject message) { + JSONArray jsonArr; + JSONArray msgArray = message.getJSONArray("content"); + for (int ii = 0, iiSize = msgArray.size(); ii < iiSize; ii++) { + JSONObject msgJson = msgArray.getJSONObject(ii); + elements.remove(msgJson.getString("id"));// 移出 + } + jsonArr = ShapeUtil.getDeletedJsonArray(CoeDesignerShapeCache.getCache().get(model.getUUID()), msgArray); + // CoeDesignerShapeCache.getCache().put(model.getUUID(), jsonArr); + return jsonArr; + } + + /** + * 获取默认版本的draw模板 + * + * @return + */ + public static String getTemplateOfDraw(String uuid) { + JSONObject template = new JSONObject(); + PALRepositoryModel plModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + String versionId = ""; + if (plModel != null) { + versionId = plModel.getVersionId(); + } + String[] arrStr = {}; + template.put("chartId", uuid); + template.put("updateTime", ""); + template.put("definitionId", uuid); + template.put("versionId", versionId); + template.put("remark", ""); + template.put("messages", arrStr); + template.put("userIds", arrStr); + template.put("userNames", ""); + return template.toString(); + + } + + /** + * 获取deine的模板 + * + * @return + */ + public static String getTemplateOfDefine(String uuid) { + JSONObject template = new JSONObject(); + JSONObject page = new JSONObject(); + JSONObject elements = new JSONObject(); + page.put("height", 2500); + page.put("width", 1600); + page.put("padding", 60); + page.put("showGrid", true); + page.put("gridSize", 15); + page.put("backgroundColor", "255,255,255"); + template.put("uuid", uuid); + template.put("page", page); + template.put("elements", elements); + template.put("processProperties", getProcessProperties()); + template.put("coeProperties", getCoeProperties()); + template.put("processDocument", ""); + + return template.toString(); + } + + public static String getBpmnProcessProperties() { + JSONObject process = new JSONObject(); + process.put("accessSecurityType", 0); + process.put("archivesId", 0); + process.put("isAutoArchives", false); + process.put("isCancelProcess", true); + process.put("cancelProcessExclusiveActivities", ""); + process.put("isCancelTask", false); + process.put("defaultInstanceTitle", ""); + process.put("extendProperty", ""); + process.put("isDataShare", false); + process.put("isDraftRemove", false); + return process.toString(); + + } + + public static String getBpmnInitData(Map macroLibraries) { + StringBuffer initData = new StringBuffer(); + initData.append("var operateType = \"new\";"); + macroLibraries.put("BPMN_TYPE_START_EVENT", BPMNConstant.BPMN_TYPE_START_EVENT); + macroLibraries.put("AWS_ELEMENT_START_EVENT_MESSAGE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_START_EVENT_MESSAGE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_START_EVENT_TIMER_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_START_EVENT_TIMER_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_START_EVENT_SIGNAL_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_START_EVENT_SIGNAL_EVENT_DEFINITION); + macroLibraries.put("BPMN_TYPE_END_EVENT", BPMNConstant.BPMN_TYPE_END_EVENT); + macroLibraries.put("AWS_ELEMENT_END_EVENT_TERMINATE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_END_EVENT_TERMINATE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_END_EVENT_MESSAGE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_END_EVENT_MESSAGE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_END_EVENT_SIGNAL_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_END_EVENT_SIGNAL_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_END_EVENT_ERROR_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_END_EVENT_ERROR_EVENT_DEFINITION); + macroLibraries.put("BPMN_TYPE_SEQUENCE_FLOW", BPMNConstant.BPMN_TYPE_SEQUENCE_FLOW); + macroLibraries.put("BPMN_TYPE_TASK", BPMNConstant.BPMN_TYPE_TASK); + macroLibraries.put("BPMN_TYPE_USER_TASK", BPMNConstant.BPMN_TYPE_USER_TASK); + macroLibraries.put("BPMN_TYPE_SERVICE_TASK", BPMNConstant.BPMN_TYPE_SERVICE_TASK); + macroLibraries.put("BPMN_TYPE_SCRIPT_TASK", BPMNConstant.BPMN_TYPE_SCRIPT_TASK); + macroLibraries.put("BPMN_TYPE_MANUAL_TASK", BPMNConstant.BPMN_TYPE_MANUAL_TASK); + macroLibraries.put("BPMN_TYPE_BUSINESSRULE_TASK", BPMNConstant.BPMN_TYPE_BUSINESSRULE_TASK); + macroLibraries.put("BPMN_TYPE_SEND_TASK", BPMNConstant.BPMN_TYPE_SEND_TASK); + macroLibraries.put("BPMN_TYPE_RECEIVE_TASK", BPMNConstant.BPMN_TYPE_RECEIVE_TASK); + macroLibraries.put("BPMN_TYPE_GATEWAY", BPMNConstant.BPMN_TYPE_GATEWAY); + macroLibraries.put("BPMN_TYPE_EVENTBASED_GATEWAY", BPMNConstant.BPMN_TYPE_EVENTBASED_GATEWAY); + macroLibraries.put("BPMN_TYPE_COMPLEX_GATEWAY", BPMNConstant.BPMN_TYPE_COMPLEX_GATEWAY); + macroLibraries.put("BPMN_TYPE_INTERMEDIATE_CATCH_EVENT", BPMNConstant.BPMN_TYPE_INTERMEDIATE_CATCH_EVENT); + macroLibraries.put("AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_TIMER_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_TIMER_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_MESSAGE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_MESSAGE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_SIGNAL_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_SIGNAL_EVENT_DEFINITION); + macroLibraries.put("BPMN_TYPE_INTERMEDIATE_THROW_EVENT", BPMNConstant.BPMN_TYPE_INTERMEDIATE_THROW_EVENT); + macroLibraries.put("AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_MESSAGE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_MESSAGE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_SIGNAL_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_SIGNAL_EVENT_DEFINITION); + macroLibraries.put("BPMN_TYPE_BOUNDARY_EVENT", BPMNConstant.BPMN_TYPE_BOUNDARY_EVENT); + macroLibraries.put("AWS_ELEMENT_BOUNDARY_EVENT_COMPENSATION_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_COMPENSATE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_BOUNDARY_EVENT_ERROR_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_ERROR_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_BOUNDARY_EVENT_MESSAGE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_MESSAGE_EVENT_DEFINITION); + macroLibraries.put("BPMN_TYPE_PARALLEL_GATEWAY", BPMNConstant.BPMN_TYPE_PARALLEL_GATEWAY); + macroLibraries.put("BPMN_TYPE_INCLUSIVE_GATEWAY", BPMNConstant.BPMN_TYPE_INCLUSIVE_GATEWAY); + macroLibraries.put("BPMN_TYPE_EXCLUSIVE_GATEWAY", BPMNConstant.BPMN_TYPE_EXCLUSIVE_GATEWAY); + macroLibraries.put("BPMN_TYPE_CALL_ACTIVITY_CALLING_PROCESS", BPMNConstant.BPMN_TYPE_CALL_ACTIVITY_CALLING_PROCESS); + macroLibraries.put("BPMN_TYPE_SUB_PROCESS", BPMNConstant.BPMN_TYPE_SUB_PROCESS); + macroLibraries.put("BPMN_TYPE_TEXT_ANNOTATION", BPMNConstant.BPMN_TYPE_TEXT_ANNOTATION); + macroLibraries.put("BPMN_TYPE_HORIZONTAL_POOL", BPMNConstant.BPMN_TYPE_POOL); + macroLibraries.put("BPMN_TYPE_VERTICAL_POOL", BPMNConstant.BPMN_TYPE_VERTICAL_POOL); + macroLibraries.put("BPMN_TYPE_HORIZONTAL_LANE", BPMNConstant.BPMN_TYPE_LANE); + macroLibraries.put("BPMN_TYPE_VERTICAL_LANE", BPMNConstant.BPMN_TYPE_VERTICAL_LANE); + return initData.toString(); + } + + /** + * get updateTime + * + * @param jsonObj + * @return + */ + public static String getUpdateTime(String jsonObj) { + com.alibaba.fastjson.JSONObject json = com.alibaba.fastjson.JSONObject.parseObject(jsonObj); + // JSONObject json = JSONObject.fromObject(jsonObj); + // return json.optString("updateTime"); + if (json.containsKey("updateTime")) { + return json.getString("updateTime"); + } + return ""; + } + + /** + * add updateTime + * + * @param jsonObj + * @return + */ + public static String addUpdateTime(String jsonObj, String timeStr) { + JSONObject json = JSONObject.parseObject(jsonObj); + json.put("updateTime", timeStr); + return json.toString(); + + } + + public static String updateProcessName(String jsonObj, String uuid) { + PALRepositoryModel plModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + JSONObject json = JSONObject.parseObject(jsonObj); + json.put("processName", plModel.getName()); + return json.toString(); + + } + + public static String getLinkFileName(String uuid, String ver, String type) { + return CoeDesignerConstant.DESIGNER_FILE_LINK + uuid + ver + type; + } + + public static String getRealFilename(String processDefId, String ver, String profix) { + return processDefId + ver + profix; + } + + public static String getBpmnRealFilePath(String appId, String processDefId) { + return BPMNFileUtil.getBPMNFileRealpath(appId, processDefId); + } + + /** + * aws与coe各自的唯一标识转换 + * + * @param define + * @param newUuid + */ + public static void parseBMPNUuid(JSONObject define, String newUuid) { + define.put("uuid", newUuid); + // define.put("chartId", newUuid); + } + + /** + * 得到bpmn真实文件存放的路径 + * + * @return + */ + public static String getBpmnPath(String appId, String processDefId) { + String path = BPMNFileUtil.getBPMNFileRealpath(appId, processDefId); + return path; + } + + public static ProcessDefinition getMaxPorcessDefinition(String uuid) { + PALRepositoryModel plModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + String appId = ((ProcessDefinition) ProcessDefCache.getInstance().getModel(plModel.getAWSProcessId())).getAppId(); + List list = ProcessDefCache.getInstance().getListOfProcessVersion(appId, plModel.getAWSProcessId()); + int size = list.size(); + for (ProcessDefinition processModel : list) { + if (processModel.getVersionNo() == size) { + return processModel; + } + } + return null; + } + + public static int getProcessDefinitionMaxNumber(String appId, String processVersionId) { + List list = ProcessDefCache.getInstance().getListOfProcessVersion(appId, processVersionId); + int maxVer = 0; + for (ProcessDefinition model : list) { + if (model.getVersionNo() > maxVer) { + maxVer = model.getVersionNo(); + } + } + return maxVer; + } + + public static ProcessDefinition getMaxProcessDefinition(String appId, String processVersionId) { + List list = ProcessDefCache.getInstance().getActiveDefsOfVersion(appId, processVersionId); + Collections.sort(list, new ProcessDefinitionDESC()); + return list.get(0); + } + + public static BaseModel createModel(String uuid, int ver) { + BaseModel model = new BPMNModel(); + PALRepositoryModelImpl plModel = (PALRepositoryModelImpl) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + String path = plModel.getFilePath(); + if ("".equals(path) || path == null) { + path = PLRFilePath.getInstance().create(AppsAPIManager.getInstance().getAppContext(CoEConstant.APP_ID), uuid); + plModel.setFilePath(path); + try { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().update(plModel); + } catch (Exception e) { + e.printStackTrace(); + } + } + String methodId = ((PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid)).getMethodId(); + model.setUUID(uuid); + model.setVersionUuid(plModel.getVersionId()); + model.setPath(path); + model.setMethodId(methodId); + model.setDefinition(CoeDesignerUtil.getTemplateOfDefine(uuid)); + model.setDraw(CoeDesignerUtil.getTemplateOfDraw(uuid)); + model.setType(CoeDesignerConstant.DESIGNER_DIFINITION_DEFAULT); + model.setVer(ver); + model.setUpdateTime(new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date())); + return model; + } + + public static BPMNModel createBPMNModel(String uuid, int ver) { + BPMNModel model = new BPMNModel(); + PALRepositoryModel plModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + String path = plModel.getFilePath(); + if ("".equals(path) || path == null) { + path = PLRFilePath.getInstance().create(AppsAPIManager.getInstance().getAppContext(CoEConstant.APP_ID), uuid); + ((PALRepositoryModelImpl) plModel).setFilePath(path); + try { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().update(plModel); + } catch (Exception e) { + e.printStackTrace(); + } + } + String methodId = plModel.getMethodId(); + model.setUUID(uuid); + model.setPath(path); + model.setMethodId(methodId); + model.setDefinition(CoeDesignerUtil.getTemplateOfDefine(uuid)); + model.setDraw(CoeDesignerUtil.getTemplateOfDraw(uuid)); + model.setVer(ver); + model.setProcessVersionId(plModel.getAWSProcessId()); + model.setCreateHistory(true); + model.setType(CoeDesignerConstant.DESIGNER_DIFINITION_BPMN); + model.setUpdateTime(new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date())); + return model; + } + + public static String getBpmnOperateTypeOfAws(String processDefVersionId, int processNum) { + + return "newversion|" + processDefVersionId + "|" + processNum; + } + + public static void putProcess(JSONObject define, String processDefVersionId, String uid, int processVer) { + JSONObject processProperties = new JSONObject(); + ProcessDefinition model = ProcessDefCache.getInstance().getModel(processDefVersionId); + processProperties.put("processAdministrator", model.getProcessAdministrator()); + processProperties.put("categoryName", model.getCategoryName()); + processProperties.put("processGroupName", model.getProcessGroupName()); + processProperties.put("createTime", new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date())); + processProperties.put("updateTime", new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date())); + processProperties.put("createUser", uid); + processProperties.put("engineType", model.getEngineType()); + processProperties.put("versionId", processDefVersionId); + processProperties.put("processVer", processVer); + processProperties.put("historyMaxVersion", "0"); + processProperties.put("isAutoArchives", true); + processProperties.put("engineType", ProcessDefinitionConst.ENGINE_CONTROL_WORKFLOW); + processProperties.put("isDataShare", false); + processProperties.put("isQuickStart", false); + processProperties.put("defaultInstanceTitle", ""); + processProperties.put("archivesId", 0); + processProperties.put("isTrackForm", false); + processProperties.put("isSecurityLayer", false); + processProperties.put("accessSecurityType", 0); + processProperties.put("isMobileStart", false); + processProperties.put("timeDurationText", ""); + processProperties.put("wariningTimeDurationText", ""); + processProperties.put("timeDuration", 0); + processProperties.put("wariningTimeDuration", 0); + processProperties.put("isWorklistPopMini", true); + processProperties.put("isCancelTask", false); + processProperties.put("trackDiagramType", 0); + processProperties.put("isDraftRemove", false); + processProperties.put("shortMessageNotifyTemplate", ""); + processProperties.put("mailNotifyTemplate", ""); + processProperties.put("isCancelProcess", true); + processProperties.put("cancelProcessExclusiveActivities", ""); + processProperties.put("processLevelType", 0); + processProperties.put("extendProperty", ""); + processProperties.put("leanStandard", 0); + processProperties.put("versionStatus", 0); + processProperties.put("releaseUser", ""); + processProperties.put("releaseTime", ""); + processProperties.put("messageDigest", ""); + define.put("processProperties", processProperties); + } + + public static JSONObject getCoeProperties() {// coe属性 + JSONObject coePorperties = new JSONObject(); + coePorperties.put("ver", 0); + coePorperties.put("fileName", ""); + coePorperties.put("uuid", ""); + coePorperties.put("versionId", ""); + coePorperties.put("update", true); + return coePorperties; + } + + public static JSONObject getProcessProperties() {// 流程属性 + JSONObject processProperties = new JSONObject(); + processProperties.put("categoryName", ""); + processProperties.put("processGroupName", ""); + processProperties.put("versionId", ""); + processProperties.put("uuid", ""); + return processProperties; + } + + /** + * 取得指定流程文件内容 + * + * @param uuid 流程文件的id + * @return + */ + public static List> getShapeMessageJson(String uuid) { + if (uuid == null || "".equals(uuid)) { + return null; + } + String messageJson = ""; + PALRepositoryModel levelModel = PALRepositoryCache.getCache().get(uuid); + messageJson = PALRepositoryQueryAPIManager.getInstance().getProcessDefinition(null, uuid); + if (messageJson != null) { + List> list = ShapeUtil.getShapeJson(messageJson, uuid, levelModel.getName()); + return list; + } + return null; + } + + /** + * 取得指定流程文件内容 + * 使用com.alibaba.fastjson.JSONObject + * + * @param uuid 流程文件的id + * @return + */ + @Deprecated + public static List> getShapeMessageJson2(String uuid) { + if (uuid == null || "".equals(uuid)) { + return null; + } + String messageJson = ""; + PALRepositoryModel levelModel = PALRepositoryCache.getCache().get(uuid); + messageJson = PALRepositoryQueryAPIManager.getInstance().getProcessDefinition(null, uuid); + if (messageJson != null) { + List> list = ShapeUtil.getShapeJson2(messageJson, uuid, levelModel.getName()); + return list; + } + return null; + } + + /** + * 取得指定流程文件所有节点的位置 + * + * @param uuid 流程文件的id + * @return + */ + public static List> getShapeMessageJson3(String uuid) { + if (uuid == null || "".equals(uuid)) { + return null; + } + String messageJson = ""; + PALRepositoryModel levelModel = PALRepositoryCache.getCache().get(uuid); + messageJson = PALRepositoryQueryAPIManager.getInstance().getProcessDefinition(null, uuid); + if (messageJson != null) { + List> list = ShapeUtil.getShapeJson3(messageJson, uuid, levelModel.getName()); + return list; + } + return null; + } + + /** + * 取得流程指定文件内容,包括所有形状的属性内容值(关联属性等已转化为文字) + * @param uuid + * @return + */ + public static List getShapeMessageJson5(String uuid) { + List> elementList = getShapeMessageJson4(uuid); + List result = new ArrayList<>(); + for (int i = 0; i < elementList.size(); i++) { + Map map = elementList.get(i); + JSONObject object = new JSONObject(); + for (Map.Entry entry : map.entrySet()) { + object.put(entry.getKey(), entry.getValue()); + } + result.add(object); + } + return result; + } + + /** + * 取得指定流程文件内容,包括所有形状的属性内容值(关联属性等已转化为文字) + * + * @param uuid 流程文件的id + * @return + */ + public static List> getShapeMessageJson4(String uuid) { + if (uuid == null || "".equals(uuid)) { + return null; + } + String messageJson = ""; + PALRepositoryModel levelModel = PALRepositoryCache.getCache().get(uuid); + messageJson = PALRepositoryQueryAPIManager.getInstance().getProcessDefinition(null, uuid); + if (messageJson != null) { + List> list = ShapeUtil.getShapeList(messageJson, uuid, levelModel.getName()); + return list; + } + return null; + } + + /** + * 获取method的schema定义 + * + * @param methodId + * @return + * @author zhangming + */ + public static JSONObject getMethodDefine(String methodId) { + JSONObject methodDefine = new JSONObject(); + PALMethodModel mModel = PALMethodCache.getPALMethodModelById(methodId); + String schema = mModel.getSchema(); + String[] shapesString = schema.split("Schema.addShape"); + JSONObject methodCategory = new JSONObject(); + JSONObject methodShapes = new JSONObject(); + for (String shapeString : shapesString) { + if (shapeString.contains("Schema.addCategory")) { + shapeString = shapeString.substring(shapeString.indexOf("(") + 1, shapeString.lastIndexOf(")")); + methodCategory = JSONObject.parseObject(shapeString); + } else { + shapeString = shapeString.substring(shapeString.indexOf("(") + 1, shapeString.lastIndexOf(")")); + if (shapeString.contains("drawIcon")) { + shapeString = shapeString.substring(0, shapeString.indexOf("drawIcon") - 1) + "}"; + } + try { + String str = shapeString; + str = str.replaceAll("Math\\.PI\\*0.5", "\"Math\\.PI\\*0.5\"");// 部分格式转换 + JSONObject shape = JSONObject.parseObject(str); + if (shape.containsKey("name")) { + methodShapes.put(shape.getString("name"), shape); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + methodDefine.put("methodCategory", methodCategory); + methodDefine.put("methodShapes", methodShapes); + return methodDefine; + } + + /************获取图形定义start****************/ + + /** + * 得到图形定义 + * @param methodId + * @return + */ + public static JSONArray getShapeDefinition(String methodId) { + JSONArray result = new JSONArray(); + methodId = methodId.replace("__", ".").replace("_", "."); + PALMethodModel model = PALMethodCache.getPALMethodModelById(methodId); + String schema = model.getSchema(); + String tempSchema = ShapeUtil.replaceBlank(schema); + + if (methodId.contains("bpmn2")) + tempSchema = replaceText(tempSchema); +// if (methodId.contains("epc") || methodId.contains("org")) +// tempSchema = replaceTextEPC(tempSchema); + tempSchema = replaceTextEPC(tempSchema); + List list = getSchemaToJson(tempSchema); + for (String str : list) { + str = str.replace(" ", ""); + if (str.contains("category:\"lane\"")) { + continue; + } + if (str.contains("drawIcon")) { + str = str.substring(0, str.indexOf("drawIcon") - 1) + "}"; + } + JSONObject shape = JSONObject.parseObject(str); + JSONObject defaultShape = JSONObject.parseObject(DEFAULT_SHAPE_DEF); + // 替换部分属性 + replaceActions(defaultShape, shape); + result.add(defaultShape); + } + String customSchema = model.getCustomSchema(); + String tempCustomSchema = ShapeUtil.replaceBlank(customSchema); + if (methodId.contains("bpmn2")) + tempCustomSchema = replaceText(tempCustomSchema); + if (methodId.contains("epc") || methodId.contains("org")) + tempCustomSchema = replaceTextEPC(tempCustomSchema); + List customList = getSchemaToJson(tempCustomSchema); + for (String str : customList) { + str = str.replace(" ", ""); + if (str.contains("category:\"lane\"")) { + continue; + } + if (str.contains("drawIcon")) { + str = str.substring(0, str.indexOf("drawIcon") - 1) + "}"; + } + JSONObject shape = JSONObject.parseObject(str); + JSONObject defaultShape = JSONObject.parseObject(DEFAULT_SHAPE_DEF); + // 替换部分属性 + replaceActions(defaultShape, shape); + result.add(defaultShape); + } + return result; + } + + /** + * 获取图形定义 + * @param methodId 模型分类 + * @param shapeName 形状主键名称 + * @return + */ + public static JSONObject getShapeDefinition(String methodId, String shapeName) { + if (UtilString.isEmpty(methodId) || UtilString.isEmpty(shapeName)) { + return null; + } + methodId = methodId.replace("__", ".").replace("_", "."); + PALMethodModel model = PALMethodCache.getPALMethodModelById(methodId); + // 标准图形 + String schema = model.getSchema(); + String tempSchema = ShapeUtil.replaceBlank(schema); + if (methodId.contains("bpmn2")) + tempSchema = replaceText(tempSchema); + if (methodId.contains("epc") || methodId.contains("org")) + tempSchema = replaceTextEPC(tempSchema); + List list = getSchemaToJson(tempSchema); + for (String str : list) { + JSONObject result = JSONObject.parseObject(str); + if (result.containsKey("name") && shapeName.equals(result.getString("name"))) { + return result; + } + } + // 自定义图形 + String customSchema = model.getCustomSchema(); + String tempCustomSchema = ShapeUtil.replaceBlank(customSchema); + if (methodId.contains("bpmn2")) + tempCustomSchema = replaceText(tempCustomSchema); + if (methodId.contains("epc") || methodId.contains("org")) + tempCustomSchema = replaceTextEPC(tempCustomSchema); + List customList = getSchemaToJson(tempCustomSchema); + for (String str : customList) { + JSONObject result = JSONObject.parseObject(str); + if (result.containsKey("name") && shapeName.equals(result.getString("name"))) { + return result; + } + } + return null; + } + + /** + * 替换部分属性 + * @param defaultShape + * @param shape + */ + private static void replaceActions(JSONObject defaultShape, JSONObject shape) { + if (!shape.containsKey("dataAttributes") || shape.getJSONArray("dataAttributes").isEmpty()) { + JSONArray array = new JSONArray(); + array.add(JSONObject.parseObject(DEFAULT_DATA_ATTRIBUTE)); + shape.put("dataAttributes", array); + } else { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + boolean existExtendAttr = false; + for (Object attribute : dataAttributes) { + JSONObject obj = (JSONObject) attribute; + if (obj.containsKey("attributesJsonArray")) { + existExtendAttr = true; + break; + } + } + if (!existExtendAttr) { + dataAttributes.add(JSONObject.parseObject(DEFAULT_DATA_ATTRIBUTE)); + shape.put("dataAttributes", dataAttributes); + } + } + for (Map.Entry entry : defaultShape.entrySet()) { + String key = entry.getKey(); + if (shape.containsKey(key)) { + if ("lineStyle".equals(key)) { + JSONObject defaultLineStyle = defaultShape.getJSONObject("lineStyle"); + JSONObject shapeLineStyle = shape.getJSONObject("lineStyle"); + for (Map.Entry map : defaultLineStyle.entrySet()) { + if (!shapeLineStyle.containsKey(map.getKey())) { + shapeLineStyle.put(map.getKey(), map.getValue()); + } + } + shape.put("lineStyle", shapeLineStyle); + } + if ("fillStyle".equals(key)) { + JSONObject defaultfillStyle = defaultShape.getJSONObject("fillStyle"); + JSONObject shapeFillStyle = shape.getJSONObject("fillStyle"); + for (Map.Entry map : defaultfillStyle.entrySet()) { + if (!shapeFillStyle.containsKey(map.getKey())) { + shapeFillStyle.put(map.getKey(), map.getValue()); + } + } + shape.put("fillStyle", shapeFillStyle); + } + if ("fontStyle".equals(key)) { + JSONObject defaultFontStyle = defaultShape.getJSONObject("fontStyle"); + JSONObject shapeFontStyle = shape.getJSONObject("fontStyle"); + for (Map.Entry map : defaultFontStyle.entrySet()) { + if (!shapeFontStyle.containsKey(map.getKey())) { + shapeFontStyle.put(map.getKey(), map.getValue()); + } + } + shape.put("fontStyle", shapeFontStyle); + } + if ("props".equals(key)) { + JSONObject defaultProps = defaultShape.getJSONObject("props"); + JSONObject shapeProps = shape.getJSONObject("props"); + for (Map.Entry map : defaultProps.entrySet()) { + if (!shapeProps.containsKey(map.getKey())) { + shapeProps.put(map.getKey(), map.getValue()); + } + } + shape.put("props", shapeProps); + } + if ("path".equals(key)) { + JSONArray shapePath = shape.getJSONArray("path"); + for (int i = 0; i < shapePath.size(); i++) { + JSONObject object = shapePath.getJSONObject(i); + if (object.containsKey("actions")) { + Object actions = object.get("actions"); + if (actions.toString().startsWith("{")) { + JSONObject object2 = JSONObject.parseObject(actions.toString()); + if (object2.containsKey("ref") && getGlobalCommand().containsKey(object2.getString("ref"))) { + object.put("actions", JSONArray.parseArray(getGlobalCommand().get(object2.getString("ref")))); + } + } + } + } + } + defaultShape.put(key, shape.get(key)); + } + } + for (Map.Entry entry : shape.entrySet()) { + String key = entry.getKey(); + if (!defaultShape.containsKey(key)) { + defaultShape.put(key, shape.get(key)); + } + } + // 替换textblock + JSONObject props = defaultShape.getJSONObject("props"); + if (props != null) { + int w = props.getInteger("w"); + int h = props.getInteger("h"); + if (defaultShape.containsKey("textBlock") && defaultShape.containsKey("textBlockFinal")) { + JSONObject textBlock = JSONObject.parseObject(defaultShape.getString("textBlock")); + JSONObject textBlockFinal = new JSONObject(); + String textBlockX = textBlock.getString("x").replace("w", w + "").replace("h", h + "").replace("Mat" + h, "Math"); + String textBlockY = textBlock.getString("y").replace("w", w + "").replace("h", h + "").replace("Mat" + h, "Math"); + String textBlockW = textBlock.getString("w").replace("w", w + "").replace("h", h + "").replace("Mat" + h, "Math"); + String textBlockH = textBlock.getString("h").replace("w", w + "").replace("h", h + "").replace("Mat" + h, "Math"); + if (textBlockX.equals("0")) { + textBlockX = "0.0"; + } + if (textBlockY.equals("0")) { + textBlockY = "0.0"; + } + if (textBlockW.equals("0")) { + textBlockW = "0.0"; + } + if (textBlockH.equals("0")) { + textBlockH = "0.0"; + } + textBlockFinal.put("x", Double.parseDouble(runJs(textBlockX).toString())); + textBlockFinal.put("y", Double.parseDouble(runJs(textBlockY).toString())); + textBlockFinal.put("w", Double.parseDouble(runJs(textBlockW).toString())); + textBlockFinal.put("h", Double.parseDouble(runJs(textBlockH).toString())); + defaultShape.put("textBlock", textBlock); + defaultShape.put("textBlockFinal", textBlockFinal); + } + } + } + + /** + * 转换为js + * + * @param val + * @return string + */ + private static String runJs(String val) { + String jsVal = ""; + try { + Context cx = Context.enter(); + Scriptable scope = cx.initStandardObjects(); + Object result = cx.evaluateString(scope, val, null, 1, null); + jsVal = Context.toString(result); + } finally { + Context.exit(); + } + return jsVal; + } + + + /** + * 将js中的定义的变量改成常量 + * + * @param schema + * @return + */ + private static String replaceText(String schema) { + return schema.replace("startEventText", "\"" + BPMNConstant.BPMN_TYPE_START_EVENT_TITLE + "\"") + .replace("verticalPoolText", "\"" + BPMNConstant.BPMN_TYPE_VERTICAL_POOL_TITLE + "\"") + .replace("userTaskText", "\"" + BPMNConstant.BPMN_TYPE_USER_TASK_TITLE + "\"") + .replace("exclusiveGatewayText", "\"" + BPMNConstant.BPMN_TYPE_EXCLUSIVE_GATEWAY_TITLE + "\"") + .replace("horizontalPoolText", "\"" + BPMNConstant.BPMN_TYPE_POOL_TITLE + "\"") + .replace("timerStartEventText", "\"" + BPMNConstant.AWS_ELEMENT_START_EVENT_TIMER_EVENT_DEFINITION_TITLE + "\"") + .replace("signalStartEventText", "\"" + BPMNConstant.AWS_ELEMENT_START_EVENT_SIGNAL_EVENT_DEFINITION_TITLE + "\"") + .replace("horizontalLaneText", "\"" + BPMNConstant.BPMN_TYPE_LANE_TITLE + "\"") + .replace("timerIntermediateCatchEventText", "\"" + BPMNConstant.AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_TIMER_EVENT_DEFINITION_TITLE + "\"") + .replace("messageBoundaryInterrputingEventText", "\"" + BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_MESSAGE_EVENT_DEFINITION_TITLE + "\"") + .replace("endEventText", "\"" + BPMNConstant.BPMN_TYPE_END_EVENT_TITLE + "\"") + .replace("callActivityCallingProcessText", "\"" + BPMNConstant.BPMN_TYPE_CALL_ACTIVITY_CALLING_PROCESS_TITLE + "\"") + .replace("transactionText", "\"" + BPMNConstant.BPMN_TYPE_TRANSACTION_TITLE + "\"") + .replace("groupText", "\"" + BPMNConstant.BPMN_TYPE_GROUP_TITLE + "\"") + .replace("textAnnotationText", "\"" + BPMNConstant.BPMN_TYPE_TEXT_ANNOTATION_TITLE + "\"") + .replace("messageStartEventText", "\"" + BPMNConstant.AWS_ELEMENT_START_EVENT_MESSAGE_EVENT_DEFINITION_TITLE + "\"") + .replace("messageIntermediateCatchEventText", "\"" + BPMNConstant.AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_MESSAGE_EVENT_DEFINITION_TITLE + "\"") + .replace("signalIntermediateCatchEventText", "\"" + BPMNConstant.AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_SIGNAL_EVENT_DEFINITION_TITLE + "\"") + .replace("messageIntermediateThrowingEventText", "\"" + BPMNConstant.AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_MESSAGE_EVENT_DEFINITION_TITLE + "\"") + .replace("signalIntermediateThrowingEventText", "\"" + BPMNConstant.AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_SIGNAL_EVENT_DEFINITION_TITLE + "\"") + .replace("signalBoundaryInterrputingEventText", "\"边界信号事件\"") + .replace("compensationBoundaryInterrputingEventText", "\"" + BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_COMPENSATE_EVENT_DEFINITION_TITLE + "\"") + .replace("errorBoundaryInterrputingEventText", "\"" + BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_ERROR_EVENT_DEFINITION_TITLE + "\"") + .replace("terminateEndEventText", "\"" + BPMNConstant.AWS_ELEMENT_END_EVENT_TERMINATE_EVENT_DEFINITION_TITLE + "\"") + .replace("messageEndEventText", "\"" + BPMNConstant.AWS_ELEMENT_END_EVENT_MESSAGE_EVENT_DEFINITION_TITLE + "\"") + .replace("signalEndEventText", "\"" + BPMNConstant.AWS_ELEMENT_END_EVENT_SIGNAL_EVENT_DEFINITION_TITLE + "\"") + .replace("errorEndEventText", "\"" + BPMNConstant.AWS_ELEMENT_END_EVENT_ERROR_EVENT_DEFINITION_TITLE + "\"") + .replace("serviceTaskText", "\"" + BPMNConstant.BPMN_TYPE_SERVICE_TASK_TITLE + "\"") + .replace("manualTaskText", "\"" + BPMNConstant.BPMN_TYPE_MANUAL_TASK_TITLE + "\"") + .replace("receiveTaskText", "\"" + BPMNConstant.BPMN_TYPE_RECEIVE_TASK_TITLE + "\"") + .replace("sendTaskText", "\"" + BPMNConstant.BPMN_TYPE_SEND_TASK_TITLE + "\"") + .replace("scriptTaskText", "\"" + BPMNConstant.BPMN_TYPE_SCRIPT_TASK_TITLE + "\"") + .replace("businessRuleTaskText", "\"" + BPMNConstant.BPMN_TYPE_BUSINESSRULE_TASK_TITLE + "\"") + .replace("inclusiveGatewayText", "\"" + BPMNConstant.BPMN_TYPE_INCLUSIVE_GATEWAY_TITLE + "\"") + .replace("complexGatewayText", "\"" + BPMNConstant.BPMN_TYPE_COMPLEX_GATEWAY_TITLE + "\"") + .replace("eventBasedGatewayText", "\"" + BPMNConstant.BPMN_TYPE_EVENTBASED_GATEWAY_TITLE + "\"") + .replace("parallelGatewayText", "\"" + BPMNConstant.BPMN_TYPE_PARALLEL_GATEWAY_TITLE + "\"") + .replace("verticalLaneText", "\"" + BPMNConstant.BPMN_TYPE_VERTICAL_LANE_TITLE + "\"") + // 以下来源于designer.extend.userdefined.js + .replace("userTaskLineColor", "\"0,100,0\"") + .replace("userTaskFillStyleBeginColor", "\"153,255,100\"") + .replace("userTaskFillStyleBndColor", "\"116,218,116\"") + .replace("userTaskContentColor", "\"\"") + .replace("servicesTaskLineColor", "\"79,63,0\"") + .replace("servicesTaskFillStyleBeginColor", "\"255,204,120\"") + .replace("servicesTaskFillStyleBndColor", "\"255,204,0\"") + .replace("servicesTaskContentColor", "\"145,255,145\"") + .replace("taskLineColor", "\"79,63,0\"") + .replace("taskFillStyleBeginColor", "\"255,204,120\"") + .replace("taskFillStyleBndColor", "\"255,204,0\"") + .replace("taskContentColor", "\"145,255,145\"") + .replace("gatewayLineColor", "\"11,108,195\"") + .replace("gatewayFillStyleBeginColor", "\"157,215,237\"") + .replace("gatewayFillStyleBndColor", "\"137,157,192\"") + .replace("gatewayContentColor", "\"193,214,230\"") + .replace("endEventLineColor", "\"100,0,0\"") + .replace("endEventFillStyleBeginColor", "\"255,0,0\"") + .replace("endEventFillStyleBndColor", "\"160,0,0\"") + .replace("endEventContentColor", "\"\"") + + .replace("startEventFillStyleBndColor", "\"0,180,0\"") + .replace("startEventContentColor", "\"145,255,145\"") + .replace("startEventLineColor", "\"0,100,0\"") + .replace("startEventFillStyleBeginColor", "\"0,255,0\"") + + .replace("boundaryEventLineColor", "\"100,0,0\"") + .replace("boundaryEventFillStyleBeginColor", "\"241,113,99\"") + .replace("boundaryEventFillStyleBndColor", "\"150,28,14\"") + .replace("boundaryEventContentColor", "\"242,124,110\"") + + .replace("intermediateCatchEventLineColor", "\"47,79,0\"") + .replace("intermediateCatchEventFillStyleBeginColor", "\"170,255,43\"") + .replace("intermediateCatchEventFillStyleBndColor", "\"146,242,0\"") + .replace("intermediateCatchEventContentColor", "\"190,250,101\"") + .replace("intermediateThrowingEventLineColor", "\"98,81,0\"") + .replace("intermediateThrowingEventFillStyleBeginColor", "\"255,226,183\"") + .replace("intermediateThrowingEventFillStyleBndColor", "\"255,221,170\"") + .replace("intermediateThrowingEventContentColor", "\"230,255,191\""); + } + + private static String replaceTextEPC(String schema) { + return schema.replace(" ", "").replace("Math.PI*0.5", Math.PI * 0.5 + ""); + } + + /** + * 获取schema中的json + * @param schema + * @return + */ + private static List getSchemaToJson(String schema) { + List list = new ArrayList(); + String par = "Schema.addShape\\((.*?)\\);"; + Pattern pattern = Pattern.compile(par, Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(schema); + while (matcher.find()) { + list.add(matcher.group(1)); + } + return list; + } + + private static Map getGlobalCommand() { + Map map = new HashMap<>(); + map.put("roundRectangle", GLOBAL_COMMAMD_ROUNDRECTANGLE); + map.put("round", GLOBAL_COMMAMD_ROUND); + map.put("rectangle", GLOBAL_COMMAMD_RECTANGLE); + map.put("inneround", GLOBAL_COMMAND_INNEROUND); + map.put("message0", GLOBAL_COMMAND_MESSAGE0); + map.put("timer0", GLOBAL_COMMAND_TIMER0); + map.put("timer0_needle", GLOBAL_COMMAND_TIMER0_NEEDLE); + map.put("timer0_num", GLOBAL_COMMAND_TIMER0_NUM); + map.put("conditional0", GLOBAL_COMMAND_CONDITIONAL0); + map.put("escalation0", GLOBAL_COMMAND_ESCALATION0); + map.put("signal0", GLOBAL_COMMAND_SIGNAL0); + map.put("compensation0", GLOBAL_COMMAND_COMPENSATION0); + map.put("error0", GLOBAL_COMMAND_ERROR0); + map.put("multiple0", GLOBAL_COMMAND_MULTIPLE0); + map.put("parallel0", GLOBAL_COMMAND_PARALLEL0); + map.put("gateway0", GLOBAL_COMMAND_GATEWAY0); + map.put("link3", GLOBAL_COMMAND_LINK3); + map.put("cancel3", GLOBAL_COMMAND_CANCEL3); + map.put("message4", GLOBAL_COMMAND_MESSAGE4); + map.put("message4_0", GLOBAL_COMMAND_MESSAGE4_0); + map.put("g_round", GLOBAL_COMMAND_G_ROUND); + map.put("manual_task", GLOBAL_COMMAND_MANUAL_TASK); + map.put("receive_task", GLOBAL_COMMAND_RECEIVE_TASK); + map.put("receive_task_dark", GLOBAL_COMMAND_RECEIVE_TASK_DARK); + map.put("service_task", GLOBAL_COMMAND_SERVICE_TASK); + map.put("script_task", GLOBAL_COMMAND_SCRIPT_TASK); + map.put("business_rule", GLOBAL_COMMAND_BUSINESS_RULE); + map.put("user_task", GLOBAL_COMMAND_USER_TASK); + map.put("inner_roundRectangle", GLOBAL_COMMAND_INNER_ROUNDRECTANGLE); + map.put("exclusive_gateway", GLOBAL_COMMAND_EXCLUSIVE_GATEWAY); + map.put("complex_gateway0", GLOBAL_COMMAND_COMPLEX_GATEWAY0); + map.put("complex_gateway1", GLOBAL_COMMAND_COMPLEX_GATEWAY1); + map.put("complex_gateway2", GLOBAL_COMMAND_COMPLEX_GATEWAY2); + map.put("complex_gateway3", GLOBAL_COMMAND_COMPLEX_GATEWAY3); + map.put("event_based_gateway", GLOBAL_COMMAND_EVENT_BASED_GATEWAY); + map.put("event_based_start_gateway", GLOBAL_COMMAND_EVENT_BASED_START_GATEWAY); + map.put("parallel_gateway", GLOBAL_COMMAND_PARALLEL_GATEWAY); + map.put("parallel_eventbased_gateway", GLOBAL_COMMAND_PARALLEL_EVENTBASED_GATEWAY); + map.put("data_in_object", GLOBAL_COMMAND_DATA_IN_OBJECT); + map.put("choreography_task", GLOBAL_COMMAND_CHOREOGRAPHY_TASK); + + map.put("method_script_task", GLOBAL_COMMAND_METHOD_SCRIPT_TASK);// epc-审批节点 + map.put("method_service_task", GLOBAL_COMMAND_METHOD_SERVICE_TASK);// epc-系统节点 + map.put("method_user_task", GLOBAL_COMMAND_METHOD_USER_TASK);// epc-操作节点 + return map; + } + + /************获取图形定义end****************/ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/util/Img2Pdf.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/util/Img2Pdf.java new file mode 100644 index 00000000..0db7daae --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/util/Img2Pdf.java @@ -0,0 +1,208 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.util; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.util.UtilString; + +/** + * 通过itext生成PDF + * @author sunlh + * + */ +public class Img2Pdf { + public static void main(String[] args) { + File targetFile = new File("../pdf-test/pdfTarget/my_doc.pdf"); + File imgDir = new File("../pdf-test/imgSource"); + List files = new ArrayList<>(); + if (imgDir.exists() && imgDir.isDirectory()) { + File [] fileArr = imgDir.listFiles(); + for (File file : fileArr) { + if (file.isFile()) { + files.add(file); + } + } + } + if (files.size() == 0) { + System.out.println("PDF create error, no images!"); + return; + } + createPdf(new HashMap(), targetFile, files, "张三", "测试文档", "测试", "张三"); + } + + /** + * 创建PDF文档 + * @param targetFile + * @param sourceDir + * @param author + * @param title + * @param subject + * @param creator + */ + public static void createPdf(Map titleMap, File targetFile, File sourceDir, String author, String title, String subject, String creator) { + // createPdf(titleMap, targetFile, queryListFilesPath(sourceDir), author, title, subject, creator); + } + + /** + * 创建PDF文档 + * @param targetFile + * @param files + */ + public static void createPdf(Map titleMap, File targetFile, List files, String author, String title, String subject, String creator) { +// // 创建文件及相关目录 +// Document document = new Document(PageSize.A4.rotate()); +// // 设置文档属性 +// createMainInformation(document, author, title, subject, creator); +// // 创建PdfWriter对象 +// PdfWriter writer; +// try { +// writer = PdfWriter.getInstance(document, new FileOutputStream(targetFile.getPath())); +// // 设置每行的间距 +// writer.setInitialLeading(0); +// // 打开文档 +// document.open(); +// // 设置字体 +// Font font = createFont(document); +// // 创建文档 +// for (File file : files) { +// document.newPage(); +// String content = UtilString.isEmpty(titleMap.get(file.getName())) ? "" : titleMap.get(file.getName()); +// Paragraph paragraph = new Paragraph(content, font); +// document.add(paragraph); +// Image img = Image.getInstance(file.getPath()); +// // 计算 +// Map sizeMap = getAbsolutePosition(img, 70, 30, 30, 30); +// img.scaleAbsolute(sizeMap.get("imgW"), sizeMap.get("imgH")); +// img.setAbsolutePosition(sizeMap.get("x"), sizeMap.get("y")); +//// System.out.println("page width:" + PageSize.A4.getWidth()); +//// System.out.println("page height:" + PageSize.A4.getHeight()); +//// System.out.println(sizeMap); +// document.add(img); +// } +// PdfContentByte cb = writer.getDirectContent(); +// cb.fill(); +// cb.sanityCheck(); +// } catch (FileNotFoundException e) { +// e.printStackTrace(); +// } catch (DocumentException e) { +// e.printStackTrace(); +// } catch (IOException e) { +// e.printStackTrace(); +// } finally { +// document.close(); +// } + + } + + /** + * 图片自适应PDF + * @param img + * @param top + * @param bottom + * @param left + * @param right + * @return 图片绝对坐标值,左下角 + */ +// public static Map getAbsolutePosition(Image img, float top, float bottom, float left, float right) { +// Map result = new HashMap<>(); +// float pageH = PageSize.A4.getWidth(); +// float pageW = PageSize.A4.getHeight(); +// float imgH = img.getHeight(); +// float imgW = img.getWidth(); +// float scale = resize(imgW, imgH, pageW, pageH, top, bottom, left, right);// 缩放比例 +// result.put("scale", scale); +// float newImgW = imgW * scale; +// float newImgH = imgH * scale; +// // 文档横坐标 +// result.put("x", (pageW - left - right - newImgW) / 2 + left); +// // 文档纵坐标 +// result.put("y", pageH - top - newImgH); +// // 图片缩放后宽度 +// result.put("imgW", newImgW); +// // 图片缩放后高度 +// result.put("imgH", newImgH); +// return result; +// } +// +// private static float resize(float imgW, float imgH, float pageW, float pageH, float top, float bottom, float left, float right) { +// float width = imgW; +// float height = imgH; +// pageW = pageW - left - right; +// pageH = pageH - top - bottom; +// float scale = 1f; +// // 宽高都小于PDF,原样输出 +// if (width <= pageW && height <= pageH) { +// return scale; +// } +// // 宽和高都大于PDF +// if (width > pageW && height > pageH) { +// return pageW/width < pageH/height ? pageW/width : pageH/height; +// } +// // 宽和高其一大于PDF +// return width > pageW ? pageW/width : pageH/height; +// } +// +// private static Font createFont(Document document) throws DocumentException, IOException { +// BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); +// Font font = new Font(baseFont); +// // 设置字体大小 +// font.setSize(13); +// // 设置字体颜色 +// // font.setColor(new BaseColor(255, 0, 0)); +// // 设置类型,加粗 +// // font.setStyle(Font.BOLD); +// // 设置类型,倾斜 +// // font.setStyle(Font.ITALIC); +// // 设置类型,下划线 +// // font.setStyle(Font.UNDERLINE); +// // 设置类型,可组合,倾斜+删除线 +// // font.setStyle(Font.ITALIC | Font.STRIKETHRU); +// // 设置类型,为正常 +// font.setStyle(Font.NORMAL); +// return font; +// } +// +// /** +// * 设置文档属性 +// * @param document +// * @param author +// * @param title +// * @param subject +// * @param creator +// */ +// public static void createMainInformation(Document document, String author, String title, String subject, String creator) { +// // 作者 +// document.addAuthor(author); +// // 创建日期 +// document.addCreationDate(); +// // 创建关键字 +// // document.addKeywords(); +// // 创建生产商,自动使用iText +// document.addProducer(); +// // 创建程序 +// document.addCreator(creator); +// // 标题 +// document.addTitle(title); +// // 主题 +// document.addSubject(subject); +// } +// +// private static List queryListFilesPath(File dir) { +// List files = new ArrayList<>(); +// if (dir.exists() && dir.isDirectory()) { +// File [] fileArr = dir.listFiles(); +// for (File file : fileArr) { +// if (file.isFile()) { +// files.add(file); +// } +// } +// } +// return files; +// } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/util/ShapeUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/util/ShapeUtil.java new file mode 100644 index 00000000..f65d6a20 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/util/ShapeUtil.java @@ -0,0 +1,1379 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.util; + +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.CoeDesignerShapeAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.org.model.RoleModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.system.util.StringUtil; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; + +/** + * + * 作者 wangyouhuai + * + * 创建日期 2014-4-2 + * + */ +public class ShapeUtil { + private static Set processNames = new HashSet(); + static { + processNames.add("control"); + processNames.add("risk"); + processNames.add("item"); + processNames.add("regulation"); + processNames.add("procedure"); + processNames.add("method"); + processNames.add("manualOperation"); + processNames.add("predefinedProcess"); + processNames.add("callActivityCallingProcess"); + processNames.add("businessRuleTask"); + processNames.add("scriptTask"); + processNames.add("sendTask"); + processNames.add("userTask"); + processNames.add("serviceTask"); + processNames.add("manualTask"); + processNames.add("receiveTask"); + processNames.add("process"); + } + + /** + * 获取所有形状的信息列表,包括形状的基本信息和自定义属性信息 + * @param messageJson + * @param uuid + * @param plName + * @return + */ + public static List> getShapeList(String messageJson, String uuid, String plName) { + List> list = new ArrayList<>(); + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + for (Map.Entry entry : elements.entrySet()) { + String key = entry.getKey(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + String shapeId = shape.getString("id"); + Map map = new HashMap(); + map.put("id", shapeId); + map.put("title", shape.getString("title")); + map.put("text", shape.getString("text")); + map.put("category", shape.getString("category").replace("_", ".")); + map.put("type", name); + map.put("uuid", uuid); + map.put("name", shape.getString("text")); + map.put("plName", plName); + // 获取形状的属性 + JSONArray attributeValArr = getShapeAttributeValArr(uuid, shapeId, shape); + // 编号单独拿出来 + for (int i = 0; i < attributeValArr.size(); i++) { + JSONObject obj = attributeValArr.getJSONObject(i); + if ("number".equals(obj.getString("key"))) { + map.put("number", obj.getString("value")); + } + } + map.put("attributes", attributeValArr); + list.add(map); + } + } + return list; + } + + + + /** + * 获取指定形状的所有属性值 + * @param uuid + * @param shapeId + * @param shapeObject + * @return + */ + public static JSONArray getShapeAttributeValArr(String uuid, String shapeId, JSONObject shapeObject) { + JSONArray result = new JSONArray(); + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + String methodId = model.getMethodId(); + String wsId = model.getWsId(); + JSONObject dataAttributes = getCustom(shapeObject.getJSONArray("dataAttributes")); + JSONArray attributesJsonArray = dataAttributes.containsKey("attributesJsonArray") ? dataAttributes.getJSONArray("attributesJsonArray") : new JSONArray(); //扩展属性 + // 查询属性数据集合 + Map attrDataMap = new HashMap<>(); + for (Object obj : attributesJsonArray) { + if(obj==null) { + continue; //删除的节点不存在 + } + JSONObject jsonObj = (JSONObject)obj; + if( !jsonObj.containsKey("groupPath") || UtilString.isEmpty(jsonObj.getString("groupPath")) ) { + continue; //排除组 + } + if( !jsonObj.containsKey("type") || UtilString.isEmpty(jsonObj.getString("type")) ) { + continue; //排除无type的 + } + attrDataMap.put(jsonObj.getString("key"), jsonObj); + } + // 获取形状的属性配置(有效且使用中) + List methodAttrModels = CoeDesignerShapeAPIManager.getInstance().getValidAndUseAttributeModels(wsId, methodId, shapeObject.getString("name"), methodId); + for (PALMethodAttributeModel methodAttrModel : methodAttrModels) { + JSONObject obj = new JSONObject(); + obj.put("key", methodAttrModel.getKey()); + obj.put("name", methodAttrModel.getNewTitle()); + obj.put("type", methodAttrModel.getType()); + String key = methodAttrModel.getKey(); + String attrValue = ""; + if (attrDataMap.containsKey(key)) { + JSONObject jsonObj = attrDataMap.get(key); + String type = methodAttrModel.getType(); + if ("string".equals(type)) { + attrValue = jsonObj.containsKey("value") ? jsonObj.getString("value") : ""; + } else if ("number".equals(type)) { + attrValue = jsonObj.containsKey("value") ? jsonObj.getString("value") : ""; + } else if ("textarea".equals(type)) { + attrValue = jsonObj.containsKey("value") ? jsonObj.getString("value") : ""; + } else if ("boolean".equals(type)) { + attrValue = jsonObj.containsKey("value") ? jsonObj.getString("value") : ""; + } else if ("select".equals(type)) { + attrValue = jsonObj.containsKey("value") ? jsonObj.getString("value") : ""; + } else if ("select_m".equals(type)) { + attrValue = jsonObj.containsKey("value") ? jsonObj.getString("value") : ""; + String[] values = attrValue.split(","); + List valueList = new ArrayList<>(); + for (int i = 0; i < values.length; i++) { + if (!UtilString.isEmpty(values[i])) { + valueList.add(values[i]); + } + } + attrValue = StringUtils.join(valueList, ","); + } else if ("relation".equals(type)) { + JSONObject refObj = JSONObject.parseObject(methodAttrModel.getRef()); + String relationType = refObj.containsKey("type") ? refObj.getString("type") : "shape"; + List list = DesignerShapeRelationCache.getListByAttrId(uuid, shapeId, key); + if (list != null && list.size() > 0) { + // 判断是否有重复数据,进行重复过滤 + Set tempStrs = new HashSet<>(); + List tempList = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + DesignerShapeRelationModel relationModel = list.get(i); + String str = relationModel.getFileId() + relationModel.getShapeId() + relationModel.getAttrId() + relationModel.getRelationFileId() + relationModel.getRelationShapeId(); + if (!tempStrs.contains(str)) { + tempList.add(relationModel); + tempStrs.add(str); + } + } + list = tempList; + List inputValues = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + DesignerShapeRelationModel relationModel = list.get(i); + if ("file".equals(relationType)) {// 文件属性 + String versionId = UtilString.isEmpty(relationModel.getRelationShapeId()) ? relationModel.getRelationFileId() : relationModel.getRelationShapeId(); + if (!UtilString.isEmpty(versionId)) { + List list2 = PALRepositoryCache.getByVersionId(wsId, versionId); + for (PALRepositoryModel model2 : list2) { + if (model2.isUse()) { + inputValues.add(model2.getName()); + break; + } + } + } + } else {// 形状属性 + inputValues.add(relationModel.getRelationShapeText()); + } + } + attrValue = StringUtils.join(inputValues, ","); + } + } else if ("awsorg".equals(type)) {// 关联bpm组织架构 + List list = DesignerShapeRelationCache.getListByAttrId(uuid, shapeId, key); + List awsOrgResultList = new ArrayList<>(); + List deptValueList = new ArrayList<>(); + List positionValueList = new ArrayList<>(); + List userValueList = new ArrayList<>(); + List roleValueList = new ArrayList<>(); + if (list != null && list.size() > 0) { + for (DesignerShapeRelationModel relationModel : list) { + JSONObject object = JSONObject.parseObject(relationModel.getRelationShapeText()); + String orgType = object.getString("type"); + String keyId = object.getString("id"); + if ("department".equals(orgType)) {// 部门 + DepartmentModel deptModel = SDK.getORGAPI().getDepartmentById(keyId); + if (deptModel != null) { + deptValueList.add(deptModel.getName()); + } + } + if ("position".equals(orgType)) {// 岗位 + RoleModel roleModel = SDK.getORGAPI().getRoleById(keyId); + if (roleModel != null) { + positionValueList.add(roleModel.getName()); + } + } + if ("user".equals(orgType)) {// 人员 + UserModel userModel = SDK.getORGAPI().getUser(keyId); + if (userModel != null) { + userValueList.add(userModel.getUserName()); + } + } + if ("role".equals(orgType)) {// 角色 + RoleModel roleModel = SDK.getORGAPI().getRoleById(keyId); + if (roleModel != null) { + roleValueList.add(roleModel.getName()); + } + } + } + } + awsOrgResultList.addAll(deptValueList); + awsOrgResultList.addAll(positionValueList); + awsOrgResultList.addAll(roleValueList); + awsOrgResultList.addAll(userValueList); + attrValue = StringUtils.join(awsOrgResultList, ","); + } else { + attrValue = jsonObj.containsKey("value") ? jsonObj.getString("value") : ""; + } + } + obj.put("value", attrValue); + result.add(obj); + } + return result; + } + + /** + * 得到流程文件中图形的json集合 + * @param messageJson 文件内容 + * @return + */ + public static List> getShapeJson(String messageJson, String uuid, String plName) { + List> list = new ArrayList>(); + + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + for (Map.Entry entry : elements.entrySet()) { + String key = entry.getKey(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + Map map = new HashMap(); + map.put("id", shape.getString("id")); + map.put("title", shape.getString("title")); + map.put("text", shape.getString("text")); + map.put("category", shape.getString("category").replace("_", ".")); + map.put("type", name); + map.put("pid", uuid); + map.put("name", shape.getString("text")); + map.put("plName", plName); + + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject attr = dataAttributes.getJSONObject(i); + if (attr.containsKey("shapeGroupId")) { + map.put("shapeGroupId", attr.getString("shapeGroupId")); + } else { + map.put("shapeGroupId", ""); + } + + if (attr.containsKey("attributesJsonArray")) { + map.put("attributes", attr); + } else { + map.put("attributes", new JSONObject()); + } + + if (attr.containsKey("privateAttributeContent")) { + String privateAttributeContent = attr.get("privateAttributeContent").toString(); + if (privateAttributeContent.startsWith("{") && attr.getJSONObject("privateAttributeContent").containsKey("number")) { + map.put("number", attr.getJSONObject("privateAttributeContent").get("number")); + } + } + } + list.add(map); + } + } + return list; + } + + /** + * 获取连线关系 + * + * @param messageJson + * @return + */ + public static JSONArray getLinker(String messageJson) { + JSONArray array = new JSONArray(); + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + for (Map.Entry entry : elements.entrySet()) { + String key = entry.getKey(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if ("linker".equals(name)) { + JSONObject object = new JSONObject(); + JSONObject fromObject = shape.getJSONObject("from"); + JSONObject toObject = shape.getJSONObject("to"); + object.put("from", fromObject.getString("id")); + object.put("to", toObject.getString("id")); + array.add(object); + } + } + return array; + } + + /** + * 得到流程文件中图形的json集合 + * 使用com.alibaba.fastjson.JSONObject + * @param messageJson 文件内容 + * @return + */ + @Deprecated + public static List> getShapeJson2(String messageJson, String uuid, String plName) { + List> list = new ArrayList>(); + + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + for (Map.Entry entry : elements.entrySet()) { + String key = entry.getKey(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + Map map = new HashMap(); + map.put("id", shape.getString("id")); + map.put("title", shape.getString("title")); + map.put("text", shape.getString("text")); + map.put("category", shape.getString("category").replace("_", ".")); + map.put("type", name); + map.put("pid", uuid); + map.put("name", shape.getString("text")); + map.put("plName", plName); + + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject attr = dataAttributes.getJSONObject(i); + if (attr.containsKey("shapeGroupId")) { + map.put("shapeGroupId", attr.getString("shapeGroupId")); + } else { + map.put("shapeGroupId", ""); + } + + if (attr.containsKey("attributesJsonArray")) { + map.put("attributes", attr); + } else { + map.put("attributes", new JSONObject()); + } + + if (attr.containsKey("privateAttributeContent")) { + String privateAttributeContent = attr.get("privateAttributeContent").toString(); + if (privateAttributeContent.startsWith("{") && attr.getJSONObject("privateAttributeContent").containsKey("number")) { + map.put("number", attr.getJSONObject("privateAttributeContent").get("number")); + } + } + } + list.add(map); + } + } + return list; + } + + /** + * 得到流程文件中图形位置的json集合 + * @param messageJson 文件内容 + * @return + */ + public static List> getShapeJson3(String messageJson, String uuid, String plName) { + List> list = new ArrayList>(); + + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + for (Map.Entry entry : elements.entrySet()) { + String key = entry.getKey(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + Map map = new HashMap(); + JSONObject props = JSONObject.parseObject(shape.getString("props")); + map.put("x", props.getString("x")); + map.put("y", props.getString("y")); + map.put("w", props.getString("w")); + map.put("h", props.getString("h")); + map.put("zindex", props.getString("zindex")); + list.add(map); + } + } + return list; + } + + /** + * 如果文件中有复制过的图形则创建新版本的时候改变由复制过来的图形的id + * + * @param messageJson + * @param shapeGroupId + */ + public static String fileJsonToObject(String messageJson, String shapeGroupId, String title, String text, JSONArray jsonDataArr, Map> map, boolean flag, String uuid) { + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + Iterator ite = elements.keySet().iterator(); + Map map1 = new HashMap(); + for (int i = 0; i < jsonDataArr.size(); i++) { + JSONObject jObj = jsonDataArr.getJSONObject(i); + if (jObj.containsKey("attributesContent")) { + map1.put("attributesContent", jObj.getString("attributesContent")); + map1.put("linksArray", jObj.getJSONArray("linksArray").toString()); + map1.put("attributesJsonArray", jObj.getJSONArray("attributesJsonArray").toString()); + map1.put("privateAttribute", jObj.getString("privateAttribute")); + map1.put("privateAttributeContent", jObj.getString("privateAttributeContent")); + map1.put("shapeDesc", jObj.getString("shapeDesc")); + if (jObj.containsKey("upFilesArray")) { + map1.put("upFilesArray", jObj.getJSONArray("upFilesArray").toString()); + } + if (jObj.containsKey("relevanceShapes")) { + map1.put("relevanceShapes", jObj.getJSONArray("relevanceShapes").toString()); + } + } + } + while (ite.hasNext()) { + String key = ite.next(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject attr = dataAttributes.getJSONObject(i); + if (attr.containsKey("attributesContent") && attr.containsKey("shapeGroupId") && shapeGroupId.equals(attr.get("shapeGroupId"))) { + attr.put("attributesContent", map1.get("attributesContent")); + attr.put("linksArray", map1.get("linksArray")); + attr.put("attributesJsonArray", map1.get("attributesJsonArray")); + attr.put("privateAttribute", map1.get("privateAttribute")); + attr.put("privateAttributeContent", map1.get("privateAttributeContent")); + attr.put("shapeDesc", map1.get("shapeDesc")); + if (attr.containsKey("upFilesArray")) { + attr.put("upFilesArray", map1.get("upFilesArray")); + } + if (attr.containsKey("relevanceShapes")) { + attr.put("relevanceShapes", map1.get("relevanceShapes").toString()); + } + shape.put("title", title); + shape.put("text", text); + if (!flag) { + Set set = map.get(uuid); + if (set != null) { + List list1 = new ArrayList(); + for (JSONObject jsonObject : set) { + if (jsonObject.get("id").equals(shape.get("id"))) { + list1.add(jsonObject); + } + } + for (JSONObject jsonObject : list1) { + set.remove(jsonObject); + } + set.add(shape); + map.put(uuid, set); + } + } + break; + } + /* if (attr.containsKey("shapeGroupId") && + * shapeGroupId.equals(attr.get("shapeGroupId"))) { + * shape.put("title", title); shape.put("text", text); // + * shape.put("dataAttributes", jsonDataArr.toString()); // + * break; } */ + } + + } + } + return definition.toString(); + } + + /** + * 复制图形的时候改变图形的id + * + * @param messageJson + * @return + */ + public static String shapeJsonToObject(String messageJson, Map> shapeMap, String uuId) { + List elementList = new ArrayList(); + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + Iterator ite = elements.keySet().iterator(); + Set set = new HashSet(); + while (ite.hasNext()) { + String key = ite.next(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + elementList.add(shape); + if (!name.equals("linker")) { + if (shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject attr = dataAttributes.getJSONObject(i); + if (attr.containsKey("attributesContent") && attr.containsKey("shapeGroupId") && !"".equals(attr.get("shapeGroupId"))) { + set.add(shape); + shapeMap.put(uuId, set); + } + } + } + } + } + return definition.toString(); + } + + /** + * 每次粘贴时改变图形的位置 + * + * @param messageJson + * @return + */ + public static String changeShapePosition(String messageJson) { + JSONObject messageJsonObject = JSONObject.parseObject(messageJson); + List elementList = new ArrayList(); + Iterator ite = messageJsonObject.keySet().iterator(); + while (ite.hasNext()) { + String key = ite.next(); + JSONObject shape = messageJsonObject.getJSONObject(key); + String name = shape.getString("name"); + elementList.add(shape); + if (!name.equals("linker")) { + shape.put("id", "obj_" + UUIDGener.getUUID().replace("-", "")); + if (shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject attr = dataAttributes.getJSONObject(i); + } + } + } + } + return messageJsonObject.toString(); + } + + // 拿到所有图形 + public static List getShapeList(String messageJson, String messages) { + List elementList = new ArrayList(); + JSONArray jsonArr = JSONArray.parseArray(messageJson); + JSONArray jsonArr1 = JSONArray.parseArray(messages); + Map> map = new HashMap>(); + for (int i = 0; i < jsonArr1.size(); i++) { + JSONObject json = jsonArr1.getJSONObject(i); + Map m = new HashMap(); + m.put("text", json.getString("text")); + m.put("title", json.getString("title")); + map.put(json.getString("id"), m); + } + for (int i = 0; i < jsonArr.size(); i++) { + JSONObject json = jsonArr.getJSONObject(i); + String id = json.getString("id"); + Map m = map.get(id); + if (m != null) { + String text = m.get("text"); + String title = m.get("title"); + json.put("text", text); + json.put("title", title); + } + elementList.add(json.toString()); + } + return elementList; + } + + // 拿到所有图形 + public static List getShapeList(String messageJson) { + List elementList = new ArrayList(); + JSONArray jsonArr = JSONArray.parseArray(messageJson); + for (int i = 0; i < jsonArr.size(); i++) { + JSONObject json = jsonArr.getJSONObject(i); + elementList.add(json.toString()); + } + return elementList; + } + + /** + * 创建图形 的id + * + * @param messageJson + * @return + */ + /* public static String createShapeId(String messageJson) { JSONArray + * jsonArr = JSONArray.fromObject(messageJson); JSONArray obj = new + * JSONArray(); for (int i = 0; i < jsonArr.size(); i++) { JSONObject + * jsonObj = JSONObject.fromObject(jsonArr.get(i)); for (int j = 0; j < + * jsonObj.size();) { jsonObj.put("id", "_" + + * UUIDGener.getUUID().replace("-", "")); break; } obj.add(jsonObj); } + * return obj.toString(); } */ + /** + * 每次粘贴时改变图形的位置 + * + * @param messageJson + * @return + */ + public static Map getIsCopy(String messageJson) { + JSONObject shape = JSONObject.parseObject(messageJson); + String name = shape.getString("name"); + Map map = new HashMap(); + if (!name.equals("linker")) { + shape.put("id", "_" + UUIDGener.getUUID().replace("-", "")); + if (shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject attr = dataAttributes.getJSONObject(i); + if (attr.containsKey("shapeGroupId")) { + String isCopy = attr.getString("isCopy"); + String shapeGroupId = attr.getString("shapeGroupId"); + if ((null != isCopy && !"".equals(isCopy)) && (null != shapeGroupId && !"".equals(shapeGroupId))) { + map.put("isCopy", isCopy); + map.put("shapeGroupId", shapeGroupId); + } else { + map.put("isCopy", "N"); + map.put("shapeGroupId", ""); + } + } + } + } + } + return map; + } + + /** + * 拿到图形所属组的id + * + * @param messageJson + * @return + */ + public static String getShapeGroupId(String messageJson) { + JSONObject shape = JSONObject.parseObject(messageJson); + List elementList = new ArrayList(); + String name = shape.getString("name"); + elementList.add(shape); + if (!name.equals("linker")) { + shape.put("id", "_" + UUIDGener.getUUID().replace("-", "")); + if (shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject attr = dataAttributes.getJSONObject(i); + if (attr.containsKey("shapeGroupId")) { + String shapeGroupId = attr.getString("shapeGroupId"); + if (null != shapeGroupId && !"".equals(shapeGroupId)) { + return shapeGroupId; + } + } + } + } + } + return ""; + } + + public static String getShape(String messageJson, String messages) { + JSONArray jsonArr = JSONArray.parseArray(messageJson); + JSONArray jsonArr1 = JSONArray.parseArray(messages); + Map> map = new HashMap>(); + for (int i = 0; i < jsonArr1.size(); i++) { + JSONObject json = jsonArr1.getJSONObject(i); + Map m = new HashMap(); + m.put("text", json.getString("text")); + m.put("title", json.getString("title")); + map.put(json.getString("id"), m); + } + for (int i = 0; i < jsonArr.size(); i++) { + JSONObject json = jsonArr.getJSONObject(i); + String id = json.getString("id"); + Map m = map.get(id); + if (m != null) { + String text = m.get("text"); + String title = m.get("title"); + json.put("text", text); + json.put("title", title); + } + } + return jsonArr.toString(); + } + + /** + * 创建新版本时将出现复制的图形添加到数据库 + * + * @param messageJson + * @return + */ + public static String fileJsonToObject(String messageJson, List list, Map mapNewUUIDS) { + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + Iterator ite = elements.keySet().iterator(); + Set set = new HashSet(); + while (ite.hasNext()) { + String key = ite.next(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + String oldIdT = shape.getString("id"); + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject attr = dataAttributes.getJSONObject(i); + if (attr.containsKey("shapeGroupId") && attr.get("shapeGroupId") != null && !"".equals(attr.get("shapeGroupId")) && attr.get("isCopy") != null && !"".equals(attr.get("isCopy"))) { + attr.put("isCopy", "N"); + } + } + + // String id = "obj_" + UUIDGener.getUUID().replace("-", "").replace("_", ""); + String id = UUIDGener.getObjectId(); + if (mapNewUUIDS != null) { + mapNewUUIDS.put(oldIdT, id); + } + shape.put("id", id); + list.add(shape); + set.add(key); + } + } + if (list.size() > 0) { + for (String key : set) { + elements.remove(key); + } + for (JSONObject jsonObject : list) { + elements.put(jsonObject.getString("id"), jsonObject); + } + } + return definition.toString(); + } + + /** + * 创建资产库的时候更新关联的形状 + * + * @param utilFie + * @param newKey + */ + + /* public static void updateRelevanceShapes(UtilFile utilFile, Map map, Map>> shapeGroupMap, String + * uuid) { String messageJson = utilFile.readStr(); if (messageJson == null) + * { return; } JSONObject definition = JSONObject.fromObject(messageJson); + * JSONObject elements = definition.getJSONObject("elements"); JSONObject + * elements1 = new JSONObject(); Iterator ite = elements.keys(); + * Map copyMap = new HashMap(); Map pasteMap = new HashMap(); boolean flag = false; + * while (ite.hasNext()) { String key = ite.next(); JSONObject shape = + * elements.getJSONObject(key); String name = shape.getString("name"); + * String newShapeId = "_" + UUIDGener.getUUID().replace("-", ""); if + * (!"linker".equals(name) && shape.get("dataAttributes") != null) { + * JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); for (int + * i = 0; i < dataAttributes.size(); i++) { JSONObject attr = + * dataAttributes.getJSONObject(i); if (attr.containsKey("relevanceShapes") + * && attr.getString("shapeGroupId") != null && + * !"".equals(attr.getString("shapeGroupId")) && attr.getString("isCopy") != + * null && !"".equals(attr.getString("isCopy"))) { JSONArray + * relevanceShapesArr = attr.getJSONArray("relevanceShapes"); if + * (relevanceShapesArr.size() > 0) { String fileId = ""; String newFileId = + * ""; for (int j = 0; j < relevanceShapesArr.size();) { JSONObject + * relevanceShapesObj = relevanceShapesArr.getJSONObject(j); fileId = + * relevanceShapesObj.getString("pid"); newFileId = map.get(fileId); break; + * } if (newFileId != null) { for (int j = 0; j < relevanceShapesArr.size(); + * j++) { JSONObject relevanceShapesObj = + * relevanceShapesArr.getJSONObject(j); relevanceShapesObj.put("pid", + * newFileId); flag = true; } } } String shapeGroupId = + * attr.getString("shapeGroupId"); Map> m = + * shapeGroupMap.get(shapeGroupId); if (m == null) { m = new HashMap>(); Set set = new HashSet(); set.add(shape); + * m.put("group", set); set = new HashSet(); set.add(uuid); + * m.put("shapeGroupId_", set); shapeGroupMap.put(shapeGroupId, m); } else { + * Set set = m.get("group"); set.add(shape); m.put("group", set); + * set = m.get("shapeGroupId_"); set.add(shape); m.put("shapeGroupId_", + * set); } if ("Y".equals(attr.get("isCopy"))) { copyMap.put(key, value) } + * else { + * + * } break; } } } // 更新形状的id shape.put("id", newShapeId); + * elements1.put(newShapeId, shape); System.out.println(newShapeId); } // + * /if (flag) { definition.put("elements", elements1); + * utilFile.write(definition.toString()); // } } */ + /** + * 创建资产库的时候更新关联的形状 + * + * @param utilFie + * @param newKey + */ + + public static void updateRelevanceShapes(UtilFile utilFile, Map map, Map> shapeGroupMap, String uuid) { + String messageJson = utilFile.readStrUTF8(); + if (messageJson == null) { + return; + } + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + JSONObject elements1 = new JSONObject(); + Iterator ite = elements.keySet().iterator(); + while (ite.hasNext()) { + String key = ite.next(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + String newShapeId = "_" + UUIDGener.getUUID().replace("-", ""); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject attr = dataAttributes.getJSONObject(i); + if (attr.containsKey("relevanceShapes") && attr.getString("shapeGroupId") != null && !"".equals(attr.getString("shapeGroupId")) && attr.getString("isCopy") != null && !"".equals(attr.getString("isCopy"))) { + JSONArray relevanceShapesArr = attr.getJSONArray("relevanceShapes"); + if (relevanceShapesArr.size() > 0) { + String fileId = ""; + String newFileId = ""; + for (int j = 0; j < relevanceShapesArr.size();) { + JSONObject relevanceShapesObj = relevanceShapesArr.getJSONObject(j); + fileId = relevanceShapesObj.getString("pid"); + newFileId = map.get(fileId); + break; + } + if (newFileId != null) { + for (int j = 0; j < relevanceShapesArr.size(); j++) { + JSONObject relevanceShapesObj = relevanceShapesArr.getJSONObject(j); + relevanceShapesObj.put("pid", newFileId); + } + } + } + String shapeGroupId = attr.getString("shapeGroupId"); + Set set = shapeGroupMap.get(shapeGroupId); + if (set == null) { + set = new HashSet(); + set.add(shape); + shapeGroupMap.put(shapeGroupId, set); + } else { + set.add(shape); + shapeGroupMap.put(shapeGroupId, set); + } + /* if ("Y".equals(attr.get("isCopy"))) { + * copyMap.put(key, value) } else { + * + * } */ + break; + } + } + + } else if ("linker".equals(name)) { + newShapeId = shape.getString("id"); + } + shape.put("id", newShapeId); + elements1.put(newShapeId, shape); + // 更新形状的id + + // System.out.println(newShapeId); + } + // /if (flag) { + definition.put("elements", elements1); + try { + utilFile.write(definition.toString().getBytes("utf-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + // } + } + + /* + public static void main(String[] args) { + String path = "E:\\dev-aws\\6.0\\development\\release\\apps\\install\\com.actionsoft.apps.coe.pal\\workspace\\0712493f-d1dc-47bc-b1db-6d2a01a3698b\\v1.0\\process.evc\\5d23d777-ac6d-4bab-8730-c4a0669a202f\\5d23d777-ac6d-4bab-8730-c4a0669a202f"; + UtilFile util = new UtilFile(path); + String shapeGroupId = "shapeGroupId_c6189d5ab44000013a171acf14121a08"; + } + */ + + // 修改形状的groupId + public static List> updateShapeGropuId(UtilFile utilFile, String oldGroupId, String newShapeGroupId, String newFileUUID) { + String messageJson = utilFile.readStrUTF8(); + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + Iterator ite = elements.keySet().iterator(); + List> list = new ArrayList>(); + while (ite.hasNext()) { + String key = ite.next(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject attr = dataAttributes.getJSONObject(i); + if (attr.containsKey("relevanceShapes") && attr.getString("shapeGroupId") != null && oldGroupId.equals(attr.getString("shapeGroupId")) && attr.getString("isCopy") != null && !"".equals(attr.getString("isCopy"))) { + Map map = new HashMap(); + map.put("id", shape.getString("id")); + map.put("shape", shape); + map.put("fileUUID", newFileUUID); + list.add(map); + break; + } + } + + } + } + messageJson = messageJson.replaceAll(oldGroupId, newShapeGroupId); + try { + utilFile.write(messageJson.getBytes("utf-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return list; + } + + // 将出现复制过的图形写到文件中 + public static void writeShapMapToFile(final Map> map) { + synchronized (ShapeUtil.class) { + new Thread(new Runnable() { + @Override + public void run() { + Set set = map.keySet(); + JSONObject json = new JSONObject(); + for (String key : set) { + json.put(key, JSONArray.parseArray(JSON.toJSONString(map.get(key)))); + } + UtilFile util = new UtilFile(CoeDesignerConstant.SHAPE_MAP_FILE); + util.readStrUTF8(); + try { + util.write(json.toString().getBytes("utf-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + + public static String setNodeExtensionAttr(String ele) { + JSONObject definition = JSONObject.parseObject(ele); + JSONObject elements = definition.getJSONObject("elements"); + Iterator ite = elements.keySet().iterator(); + while (ite.hasNext()) { + String key = ite.next(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if (!"linker".equals(name)) { + JSONObject textBlock = shape.getJSONObject("textBlock"); + if (name.indexOf("vertical") > -1) { + textBlock.put("w", "w-20"); + } else if (name.indexOf("horizontal") > -1) { + textBlock.put("h", "h-20"); + } else if (name.toLowerCase().indexOf("startevent") > -1 || name.toLowerCase().indexOf("endevent") > -1 || name.toLowerCase().indexOf("gateway") > -1 || name.toLowerCase().indexOf("intermediate") > -1 || name.toLowerCase().indexOf("boundary") > -1) { + textBlock.put("x", "w/2-60"); + textBlock.put("y", "h"); + } else if (name.equals("product") || name.equals("service")) { + textBlock.put("w", "w"); + textBlock.put("h", "h*0.75-Math.min(h/2,w/6)"); + } else if (name.equals("target") || name.equals("consumer")) { + textBlock.put("w", "w+40"); + textBlock.put("h", "h"); + + } else { + textBlock.put("w", "w-20"); + textBlock.put("h", "h"); + } + // System.out.println(shape.getString("textBlock")); + } + } + return definition.toString(); + } + + /** + * 替换掉\n 回车()\t 水平制表符( ) \r 换行( ) + */ + public static String replaceBlank(String schema) { + String dest = ""; + if (schema != null) { + Pattern p = Pattern.compile("\t|\r|\n"); + Matcher m = p.matcher(schema); + dest = m.replaceAll(""); + } + return dest; + } + + /** + * 得到流程文件中图形的json集合,排除连线 + * + * @param messageJson 文件内容 + * @return + */ + public static List getShapeJsonToJsonObject(String messageJson) { + List list = new ArrayList(); + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + Iterator ite = elements.keySet().iterator(); + while (ite.hasNext()) { + String key = ite.next(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + JSONObject jsonObj = new JSONObject(); + jsonObj.put("id", key); + jsonObj.put("name", shape.getString("name")); + jsonObj.put("title", shape.getString("title")); + jsonObj.put("text", shape.getString("text")); + jsonObj.put("category", shape.getString("category")); + jsonObj.put("dataAttributes", getCustom(shape.getJSONArray("dataAttributes"))); + list.add(jsonObj); + } + } + return list; + } + + /** + * 得到流程文件中图形的json集合,包括连线 + * + * @param messageJson 文件内容 + * @return + */ + public static List getShapeJsonAllToJsonObject(String messageJson) { + List list = new ArrayList(); + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + Iterator ite = elements.keySet().iterator(); + while (ite.hasNext()) { + String key = ite.next(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if ( shape.get("dataAttributes") != null) { + JSONObject jsonObj = new JSONObject(); + jsonObj.put("id", key); + jsonObj.put("name", shape.getString("name")); + jsonObj.put("title", shape.getString("title")); + jsonObj.put("text", shape.getString("text")); + jsonObj.put("category", shape.getString("category")); + jsonObj.put("dataAttributes", getCustom(shape.getJSONArray("dataAttributes"))); + list.add(jsonObj); + } + } + return list; + } + + /** + * 得到流程文件中所有图形的json对象 + * + * @param messageJson 文件内容 + * @return JSONArray + */ + public static JSONArray getShapeJsonToJsonArray(String messageJson) { + JSONArray array = new JSONArray(); + JSONObject definition = JSONObject.parseObject(messageJson); + JSONObject elements = definition.getJSONObject("elements"); + Iterator ite = elements.keySet().iterator(); + while (ite.hasNext()) { + String key = ite.next(); + JSONObject shape = elements.getJSONObject(key); + JSONObject obj = new JSONObject(); + obj.put("id", key); + obj.put("name", shape.getString("name")); + obj.put("title", shape.getString("title")); + obj.put("text", shape.getString("text")); + array.add(obj); + } + return array; + } + + /** + * 根据图形的json文件路径得到文件中图形的json数组 + * + * @param filePath 图形josn文件路径 + * @return + */ + @Deprecated + public JSONArray getShapeJsonFromFile(String filePath) { + if (filePath == null) { + return null; + } + UtilFile jsonFile = new UtilFile(filePath); + String josn = jsonFile.readStrUTF8(); + if (josn == null || "".equals(josn)) { + return null; + } + String definition = jsonFile.readStrUTF8(); + return JSONArray.parseArray(definition); + } + + /** + * 得到流程文件中图形的json + * + * @param shape json对象 + * @return + */ + public static JSONObject getJson(JSONObject shape) { + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + JSONObject jsonObj = new JSONObject(); + jsonObj.put("id", shape.getString("id")); + jsonObj.put("name", shape.getString("name")); + jsonObj.put("title", shape.getString("title")); + jsonObj.put("text", shape.getString("text")); + jsonObj.put("category", shape.getString("category")); + jsonObj.put("dataAttributes", shape.getJSONArray("dataAttributes")); + return jsonObj; + } + return null; + } + + public static JSONObject getCustom(JSONArray ja) { + JSONObject json = new JSONObject(); + for (Object object : ja) { + JSONObject attr = (JSONObject) object; + if (attr.containsKey("linksArray")) { + json.put("linksArray", attr.get("linksArray")); + } + if (attr.containsKey("attributesContent")) { + json.put("attributesContent", attr.get("attributesContent")); + } + if (attr.containsKey("attributesJsonArray")) { + json.put("attributesJsonArray", attr.get("attributesJsonArray")); + } + if (attr.containsKey("privateAttribute")) { + json.put("privateAttribute", attr.get("privateAttribute")); + } + if (attr.containsKey("privateShapesName")) { + json.put("privateShapesName", attr.get("privateShapesName")); + } + if (attr.containsKey("privateAttributeContent")) { + json.put("privateAttributeContent", attr.get("privateAttributeContent")); + } + if (attr.containsKey("shapeGroupId")) { + json.put("shapeGroupId", attr.get("shapeGroupId")); + } + if (attr.containsKey("isCopy")) { + json.put("isCopy", attr.get("isCopy")); + } + if (attr.containsKey("shapeDesc")) { + json.put("shapeDesc", attr.get("shapeDesc")); + } + if (attr.containsKey("upFilesArray")) { + json.put("upFilesArray", attr.get("upFilesArray")); + } + if (attr.containsKey("relevanceShapes")) { + json.put("relevanceShapes", attr.get("relevanceShapes")); + } + } + return json; + } + + /** + * 缓存图形的jons数组 针对图形创建 + * + * @param existJsonArray 已经存在的josn数组 + * @param msgArray 新增的josn数组 + * @return 组合的json数组 + */ + public static JSONArray getCreateJsonArray(JSONArray existJsonArray, JSONArray msgArray) { + if (existJsonArray == null) { + existJsonArray = new JSONArray(); + } + for (int ii = 0, iiSize = msgArray.size(); ii < iiSize; ii++) { + JSONObject shape = msgArray.getJSONObject(ii); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + JSONObject jsonObj = new JSONObject(); + jsonObj.put("id", shape.getString("id")); + jsonObj.put("name", shape.getString("name")); + jsonObj.put("title", shape.getString("title")); + jsonObj.put("text", shape.getString("text")); + jsonObj.put("category", shape.getString("category")); + jsonObj.put("dataAttributes", getCustom(shape.getJSONArray("dataAttributes"))); + existJsonArray.add(jsonObj); + } + } + return existJsonArray; + } + + /** + * 缓存图形的jons数组,针对更新图形 + * + * @param existJsonArray 已经存在的josn数组 + * @param msgArray 新增的josn数组 + * @return 组合的json数组 + */ + public static JSONArray getUpdateJsonArray(JSONArray existJsonArray, JSONArray msgArray) { + if (existJsonArray == null) { + existJsonArray = new JSONArray(); + } + List listIndex = new ArrayList(); + List list = new ArrayList(); + if (existJsonArray.size() > 0) { + for (int ii = 0, iiSize = msgArray.size(); ii < iiSize; ii++) { + JSONObject shape = msgArray.getJSONObject(ii); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + JSONObject jsonObj = new JSONObject(); + jsonObj.put("id", shape.getString("id")); + jsonObj.put("name", shape.getString("name")); + jsonObj.put("title", shape.getString("title")); + jsonObj.put("text", shape.getString("text")); + jsonObj.put("category", shape.getString("category")); + jsonObj.put("dataAttributes", getCustom(shape.getJSONArray("dataAttributes"))); + list.add(jsonObj); + for (int i = 0, size = existJsonArray.size(); i < size; i++) { + JSONObject tempJsonObj = existJsonArray.getJSONObject(i); + if (jsonObj.getString("id").equals(tempJsonObj.getString("id"))) { + listIndex.add(i); + } + } + } + } + for (int i = 0, index = listIndex.size(); i < index; i++) { + existJsonArray.remove(listIndex.get(i)); + } + for (JSONObject jsonObject : list) { + existJsonArray.add(jsonObject); + } + } else { + for (int ii = 0, iiSize = msgArray.size(); ii < iiSize; ii++) { + JSONObject shape = msgArray.getJSONObject(ii); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + JSONObject jsonObj = new JSONObject(); + jsonObj.put("id", shape.getString("id")); + jsonObj.put("name", shape.getString("name")); + jsonObj.put("title", shape.getString("title")); + jsonObj.put("text", shape.getString("text")); + jsonObj.put("category", shape.getString("category")); + jsonObj.put("dataAttributes", getCustom(shape.getJSONArray("dataAttributes"))); + existJsonArray.add(jsonObj); + } + } + } + return existJsonArray; + } + + /** + * 缓存图形的jons数组 针对图形删除 + * + * @param existJsonArray 已经存在的josn数组 + * @param msgArray 新增的josn数组 + * @return 组合的json数组 + */ + public static JSONArray getDeletedJsonArray(JSONArray existJsonArray, JSONArray msgArray) { + if (existJsonArray != null) { + List listIndex = new ArrayList(); + for (int ii = 0, iiSize = msgArray.size(); ii < iiSize; ii++) { + JSONObject shape = msgArray.getJSONObject(ii); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + JSONObject jsonObj = new JSONObject(); + jsonObj.put("id", shape.getString("id")); + jsonObj.put("name", shape.getString("name")); + jsonObj.put("title", shape.getString("title")); + jsonObj.put("text", shape.getString("text")); + jsonObj.put("category", shape.getString("category")); + jsonObj.put("dataAttributes", getCustom(shape.getJSONArray("dataAttributes"))); + for (int i = 0, size = existJsonArray.size(); i < size; i++) { + JSONObject tempJsonObj = existJsonArray.getJSONObject(i); + if (jsonObj.getString("id").equals(tempJsonObj.getString("id"))) { + listIndex.add(i); + } + } + } + } + for (int i = 0, index = listIndex.size(); i < index; i++) { + existJsonArray.remove(listIndex.get(i)); + } + } + return existJsonArray; + } + + private static JSONArray getJsonFile(String uuid) { + String definition = PALRepositoryQueryAPIManager.getInstance().getProcessDefinition(null, uuid); + List list = ShapeUtil.getShapeJsonToJsonObject(definition); + return JSONArray.parseArray(JSON.toJSONString(list)); + } + + /** + * 获取形状 + * @param uuid + * @param shapeId + * @return + */ + public static JSONObject getShapeById(String uuid, String shapeId) { + JSONArray fileJson = getJsonFile(uuid); + for (int i = 0; i < fileJson.size(); i++) { + JSONObject shape = fileJson.getJSONObject(i); + if (shape.getString("id").equals(shapeId)) { + return shape; + } + } + return new JSONObject(); + } + + /** + * 从.json文件中解析json + * + * @param list 给定的路径 + * @return 有编号的图形 + */ + public static List> getShapeJson(List list) throws Exception { + List> result = new ArrayList>(); + for (PALRepositoryModel model : list) { + // UtilFile file = new UtilFile(model.getFilePath() + "/" + model.getId() + ".json"); + // String str = file.readStrUTF8(); + // if (str != null) { + List list1 = new ArrayList(); + // JSONArray jsonArr = JSONArray.parseArray(str); + JSONArray jsonArr = getJsonFile(model.getId()); + for (Object obj : jsonArr) { + JSONObject json = (JSONObject) obj; + if (processNames.contains(json.getString("name"))) { + json.put("fileName", StringUtil.replaceBlank(model.getName())); + json.put("fileVersion", model.getVersion()); + json.put("fileId", model.getId()); + list1.add(json); + } + } + result.add(list1); + // } + } + return result; + } + + public static Map> getShapeJson2(List list) throws Exception { + Map> result = new HashMap>(); + for (PALRepositoryModel model : list) { + // 获取文件中的图形属性 + //UtilFile file = new UtilFile(model.getFilePath() + "/" + model.getId() + ".json"); + //String str = file.readStrUTF8(); + //if (str != null) { + List list1 = new ArrayList(); + //JSONArray jsonArr = JSONArray.parseArray(str); + JSONArray jsonArr = getJsonFile(model.getId()); + for (Object obj : jsonArr) { + JSONObject json = (JSONObject) obj; + if (processNames.contains(json.getString("name"))) { + list1.add(json); + } + } + result.put(model.getId(), list1); + //} + } + return result; + } + + /** + * 从组织中的.json文件中解析json + * + * @param list 给定的路径 + * @return 有编号的图形 + */ + public static List> getOrgShapeJson(List list) throws Exception { + List> result = new ArrayList>(); + for (PALRepositoryModel model : list) { + // UtilFile file = new UtilFile(model.getFilePath() + "/" + model.getId() + ".json"); + // String str = file.readStrUTF8(); + // if (str != null) { + List list1 = new ArrayList(); + // JSONArray jsonArr = JSONArray.parseArray(str); + JSONArray jsonArr = getJsonFile(model.getId()); + for (Object obj : jsonArr) { + JSONObject json = (JSONObject) obj; + json.put("fileName", StringUtil.replaceBlank(model.getName())); + json.put("fileVersion", model.getVersion()); + json.put("fileId", model.getId()); + list1.add(json); + } + result.add(list1); + // } + } + return result; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/web/CoeDesignerWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/web/CoeDesignerWeb.java new file mode 100644 index 00000000..ba93bc3d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/designer/web/CoeDesignerWeb.java @@ -0,0 +1,3842 @@ +package com.actionsoft.apps.coe.pal.pal.repository.designer.web; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import javax.imageio.ImageIO; + +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.cooperation.constant.CoeCooperationConst; +import com.actionsoft.apps.coe.pal.cooperation.model.CoeCooperationRoleModel; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.coe.pal.pal.repository.cache.*; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.bpms.bpmn.engine.cache.util.ProcessDefVersionUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFFont; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.hssf.util.HSSFColor; +import org.apache.poi.ss.usermodel.BorderStyle; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.VerticalAlignment; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.lifecycle.api.AppsAPIManager; +import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; +import com.actionsoft.bpms.bpmn.constant.ProcessDefinitionConst; +import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; +import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition; +import com.actionsoft.bpms.bpmn.modeler.constant.BPMNConstant; +import com.actionsoft.bpms.bpmn.modeler.constant.BPMNDesignerConstant; +import com.actionsoft.bpms.bpmn.modeler.constant.BPMNFileConstant; +import com.actionsoft.bpms.bpmn.modeler.designer.DesignerFileUtil; +import com.actionsoft.bpms.bpmn.modeler.designer.ProcessBPMNDesignerWeb; +import com.actionsoft.bpms.bpmn.modeler.io.BPMNIO; +import com.actionsoft.bpms.bpmn.modeler.io.helper.BPMNFile; +import com.actionsoft.bpms.bpmn.modeler.io.in.BpmnToJson; +import com.actionsoft.bpms.bpmn.modeler.model.Definitions; +import com.actionsoft.bpms.bpmn.modeler.util.BPMNErrorUtil; +import com.actionsoft.bpms.bpmn.modeler.util.BPMNFileUtil; +import com.actionsoft.bpms.bpmn.modeler.util.draw.ChartGraphics; +import com.actionsoft.bpms.commons.cache.checkout.CheckoutCache; +import com.actionsoft.bpms.commons.cache.checkout.model.CheckoutModel; +import com.actionsoft.bpms.commons.htmlframework.AlertWindow; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.commons.session.SessionImpl; +import com.actionsoft.bpms.org.cache.DepartmentCache; +import com.actionsoft.bpms.org.cache.UserCache; +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.org.model.RoleModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.server.AWSServerEngineConfiguration; +import com.actionsoft.bpms.server.Quota; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.dc.DCProfileManager; +import com.actionsoft.bpms.server.fs.dc.DCUtil; +import com.actionsoft.bpms.util.Base64; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilDate; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.comment.constant.PALCommentConst; +import com.actionsoft.apps.coe.pal.pal.comment.dao.PALComment; +import com.actionsoft.apps.coe.pal.pal.comment.model.PALCommentModel; +import com.actionsoft.apps.coe.pal.pal.manage.publish.constant.PublishConst; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.constant.PALMethodConst; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeGroupModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodLinkerModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.pal.method.util.PALMethodUtil; +import com.actionsoft.apps.coe.pal.pal.output.dao.OutputTask; +import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppManager; +import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppProfile; +import com.actionsoft.apps.coe.pal.pal.output.model.OutputTaskModel; +import com.actionsoft.apps.coe.pal.pal.output.util.OutputWordUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelCorrelateDao; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.designer.CoeDesignerShapeAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.adapter.CoeDesginerAdapter; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper.CoeFile; +import com.actionsoft.apps.coe.pal.pal.repository.designer.manage.CoeDesignerAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BPMNModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.manage.CoeListenCacheManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.model.ListenClient; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.dao.DesignerShapeRelationDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.manager.DesignerRelationShapeCacheManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapePasteModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.Img2Pdf; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.apps.coe.pal.pal.repository.model.CoeProcessLevelCorrelateModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryAttributeModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeAttributeModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryShapeConfigModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.dao.UpFileDao; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.model.UpfileModel; +import com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessLevelWeb; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessRecycleWeb; +import com.actionsoft.apps.coe.pal.pal.ws.web.VersionUtil; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUserDaoFactory; +import com.actionsoft.apps.coe.pal.team.user.model.CoeUserModel; +import com.actionsoft.apps.coe.pal.util.JsonUtil; +import com.actionsoft.apps.coe.pal.util.StringHandleUtil; +import com.actionsoft.exception.AWSException; +import com.actionsoft.exception.BPMNDefException; +import com.actionsoft.i18n.I18nRes; +import com.actionsoft.sdk.local.SDK; +import com.actionsoft.sdk.local.api.AppAPI; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Maps; + +public class CoeDesignerWeb extends ActionWeb { + + private static final long serialVersionUID = 1L; + private UserContext _uc; + private CoeProcessLevelWeb coeProcessLevelWeb; + + public CoeDesignerWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + public static String getUserName(String nameList) { + StringBuilder fullName = new StringBuilder(); + nameList = nameList.trim(); + if (nameList.equals("")) { + return ""; + } + nameList = nameList + " "; + UtilString myStr = new UtilString(nameList); + List myArray = myStr.split(" "); + int i = 0; + String uid = ""; + try { + int size = myArray.size(); + for (i = 0; i < size; i++) { + uid = myArray.get(i).toString(); + if (uid.trim().equals("")) + continue; + uid = SDK.getORGAPI().getUserId(uid); + UserModel model = (UserModel) UserCache.getModel(uid); + String name = uid; + if (model != null) { + name = model.getUserName(); + } + fullName.append(name).append(' '); + } + return fullName.toString().trim(); + } catch (Exception e) { + return ""; + } + } + + /** + * 设计器页面 + * + * @param rUUID + * @param openType + * @param teamId 小组Id + * @return + */ + public String getDesignerHtml(String rUUID, int openType, String teamId, String perms, String filePerms, String openAppType) { + return getDesignerHtml(rUUID, openType, null, false, teamId, perms, filePerms, openAppType, null); + } + + public String getDesignerHtml(String rUUID, int openType, String shapeId, String teamId, String perms, String filePerms, String openAppType) { + return getDesignerHtml(rUUID, openType, shapeId, false, teamId, perms, filePerms, openAppType, null); + } + + public String getDesignerHtml(String rUUID, int openType, String shapeId, boolean isView, String teamId, String perms, String filePerms, String openAppType, String dockDisplay) { + Map macroLibraries = new HashMap(); + if (shapeId != null) { + macroLibraries.put("selectedElementId", shapeId); + } else { + macroLibraries.put("selectedElementId", ""); + } + macroLibraries.put("js", ""); + PALRepositoryModelImpl plModel = (PALRepositoryModelImpl) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(rUUID); + + if (plModel == null) { + return AlertWindow.getNotFoundMessagePage("未找到文件", "该文件已被删除"); + } + + if (!CoeCooperationAPIManager.getInstance().hasRepositoryPermision(rUUID)) { + return AlertWindow.getWarningMessagePage("打开失败", "无该文件查看权限"); + } + //三员管理,文件密级权限校验 + if (HighSecurityUtil.isON() && HighSecurityUtil.fileSecuritySwitch()){ + CoeProcessLevelWeb web = new CoeProcessLevelWeb(_uc); + ResponseObject responseObject = web.checkFilePemission(rUUID); + if (responseObject.isErr()){ + return AlertWindow.getWarningMessagePage("打开失败", responseObject.getMsg()); + } + } + + boolean outputPerm = true; + if (UtilString.isNotEmpty(teamId)) { + CoeCooperationRoleModel role = CoeCooperationAPIManager.getInstance().queryCooperationRoleByUser(teamId, _uc.getUID()); + if (role != null) { + perms = role.getActionPerm(); + } + // 没有新建、修改权限则只读 + if (!role.getActionPerm().contains(CoeCooperationConst.ACTION_WRITE)) { + isView = true; + } + if (!"all".equals(role.getAppPerm()) && !role.getAppPerm().contains("com.actionsoft.apps.coe.pal.output")) { + outputPerm = false; + } + } + List versionModels = PALRepositoryCache.getByVersionId(plModel.getVersionId()); + //按照版本号排序 + versionModels.sort(Comparator.comparing(PALRepositoryModel::getVersion)); + JSONArray verArray = new JSONArray(); + for (int v = 0; v < versionModels.size(); v++) { + PALRepositoryModel model = versionModels.get(v); + JSONObject tmp = new JSONObject(); + tmp.put("uuid", model.getId()); + tmp.put("nameVersion", model.getName() + "_V" + model.getVersion()); + verArray.add(tmp); + } + macroLibraries.put("verArray", JSON.toJSONString(verArray)); + + String type = CoeDesignerConstant.DESIGNER_DIFINITION_DEFAULT; + if (plModel.getMethodId() != null && plModel.getMethodId().indexOf(CoeDesignerConstant.DESIGNER_DIFINITION_BPMN) != -1) { + type = CoeDesignerConstant.DESIGNER_DIFINITION_BPMN; + } else { + type = CoeDesignerConstant.DESIGNER_DIFINITION_DEFAULT; + } + + // 删除与BPMS关联的无效关联关系 + CoeProcessLevelUtil.deleteInvalidCorrelate(plModel.getId()); + String processDefId = ""; + boolean isCorrelateBpms = PALRepositoryQueryAPIManager.getInstance().isCorrelateBpms(plModel.getId(), true); + if (CoeDesignerConstant.DESIGNER_DIFINITION_BPMN.equals(type)) { + if (isCorrelateBpms) { + processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(plModel.getId(), true); + } else { + processDefId = ""; + } + } + macroLibraries.put("isCorrelateBpms", isCorrelateBpms); + macroLibraries.put("isMarked", false); + + // 自动保存 + String isSysAutoSave = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "SYS_AUTOSAVE"); + macroLibraries.put("isAutoSave", isSysAutoSave); + // 如果非只读打开,判断文件是否被其他人打开 + String checkoutTip = ""; + boolean isLock = false; + String lockuser = plModel.getLockUser(); + if (!UtilString.isEmpty(lockuser)) {//加锁 + if (lockuser.equals(_uc.getUID())) {//本人加锁 + setCurrentCheckoutRight(rUUID, _uc.getUID());//进入正常编辑界面 + } else {//其他用户,显示已被锁定 + checkoutTip = "
    " + "
    " + "
    已由 " + SDK.getORGAPI().getUserNames(lockuser) + " 编辑该模型时锁定,最后一次保存日期" + "
    " + UtilDate.datetimeFormat(plModel.getModifyDate()) + "" + "
    " + "
    "; + isView = true; + isLock = true; + } + } else {//未上锁 + if ("0".equals(isSysAutoSave) && !isView) { + CheckoutModel checkoutModel = getCurrentCheckoutInfo(rUUID);//打开该流程视图的对象 + if (checkoutModel != null) { + long idel = AWSServerConf.getMainServerConnectionTimeout(); + Map onlines = new SessionImpl().getOnline(idel);//在线状态 + if (onlines.containsKey(checkoutModel.getUser())) {//判断锁定者是否还在会话中 + if (!checkoutModel.getUser().equals(_uc.getUID())) { + isView = true; + isLock = true; + // 是否允许强制获取编辑权,1:允许,0:不允许 + String checkoutRight = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "CHECKOUTRIGHT"); + if ("1".equals(checkoutRight)) { + checkoutTip = "
    " + "
    " + "
    已由 " + SDK.getORGAPI().getUserNames(checkoutModel.getUser()) + " 编辑该模型时锁定,最后一次保存日期" + "
    " + UtilDate.datetimeFormat(plModel.getModifyDate()) + + ",点击此处强行获取编辑权" + "
    " + "
    "; + } else { + checkoutTip = "
    " + "
    " + "
    已由 " + SDK.getORGAPI().getUserNames(checkoutModel.getUser()) + " 编辑该模型时锁定,最后一次保存日期" + "
    " + UtilDate.datetimeFormat(plModel.getModifyDate()) + "" + "
    " + "
    "; + } + } else { + UserContext wContext = UserContext.fromUID(checkoutModel.getUser()); + CoeDesignerWeb cdw = new CoeDesignerWeb(wContext); + cdw.releaseCheckoutRight(rUUID); + setCurrentCheckoutRight(rUUID, _uc.getUID()); + } + } else { + setCurrentCheckoutRight(rUUID, _uc.getUID()); + } + } else { + setCurrentCheckoutRight(rUUID, _uc.getUID()); + } + } + } + + int state = 0;// 版本状态:设计、运行、停用 + String appId = ""; + if (isCorrelateBpms) { + ProcessDefinition definition = ProcessDefCache.getInstance().get(processDefId); + if (definition != null) { + if (definition.getVersionStatus() == 1 || definition.getVersionStatus() == -1) { + isView = true; + } + state = definition.getVersionStatus(); + appId = definition.getAppId(); + if (CoeProcessLevelUtil.isPalManage()) {// PAL为中心管理流程 + CoeProcessLevelCorrelateModel correlateModel = CoeProcessLevelCorrelateCache.getCache().get(plModel.getId()); + if (correlateModel != null && !"show".equals(correlateModel.getExt1()) && correlateModel.getCorrelateType() == 1) { + state = 2; + } + } + } + } + + if (CoeDesignerConstant.DESIGNER_DIFINITION_BPMN.equals(type)) { + getBpmnDesginerUI(plModel, macroLibraries, isView, isLock); + getBpmnParams(plModel, processDefId, macroLibraries); + macroLibraries.put("isMarked", CoeProcessLevelUtil.hasMarked(plModel.getId())); + } else { + getCoeDesginerUI(plModel, macroLibraries, isLock, isView); + getCoeParams(plModel, macroLibraries); + } + + macroLibraries.put("BPMNSupport", AWSServerEngineConfiguration.getEngineBPMNSupport()); + macroLibraries.put("BPMNLevel0", AWSServerEngineConfiguration.getEngineBPMNLevel0()); + macroLibraries.put("BPMNLevel1", AWSServerEngineConfiguration.getEngineBPMNLevel1()); + macroLibraries.put("BPMNLevel2", AWSServerEngineConfiguration.getEngineBPMNLevel2()); + String userUrl = SDK.getPortalAPI().getUserPhoto(_uc, _uc.getUID()); + getMoreSharpe(plModel.getMethodId(), plModel.getId(), macroLibraries);// 获取更多图形 + macroLibraries.put("ver", 0); + macroLibraries.put("methodId", plModel.getMethodId()); + macroLibraries.put("sid", _uc.getSessionId()); + macroLibraries.put("wsId", plModel.getWsId()); + macroLibraries.put("uuid", rUUID);// definition的UUID + macroLibraries.put("parentChartId", plModel.getParentId()); + macroLibraries.put("uid", _uc.getUID()); + macroLibraries.put("userUrl", userUrl); + macroLibraries.put("userName", _uc.getUserModel().getUserName()); + macroLibraries.put("schema", getSchema(plModel.getId(), plModel.getMethodId(), PALMethodUtil.getCustom(plModel.getMethodId(), plModel.getId()))); + macroLibraries.put("sessionId", _uc.getSessionId()); + macroLibraries.put("fileName", ShapeUtil.replaceBlank(plModel.getName())); + macroLibraries.put("openType", openType); + macroLibraries.put("teamId", teamId); + macroLibraries.put("perms", perms);// 该流程权限(w,d,v) + macroLibraries.put("filePerms", filePerms);// 所有具有权限的流程Id + macroLibraries.put("isPublish", plModel.isPublish()); + macroLibraries.put("isStop", plModel.isStop()); + macroLibraries.put("isApproval", plModel.isApproval()); + macroLibraries.put("ext1", plModel.getExt1()); + macroLibraries.put("ext2", plModel.getExt2()); + macroLibraries.put("ext3", plModel.getExt3()); + macroLibraries.put("ext4", plModel.getExt4()); + macroLibraries.put("isPalManage", CoeProcessLevelUtil.isPalManage()); + CoeUserModel userModel = (CoeUserModel) CoeUserDaoFactory.createUser().getInstanceByUserId(_uc.getUID()); + boolean isAdmin = (userModel != null && (userModel.getIsAdmin() == 1)); + macroLibraries.put("isAdmin", isAdmin); + //三员管理,文件密级回显 + if (HighSecurityUtil.isON() && HighSecurityUtil.fileSecuritySwitch()){ + Integer securityLevel = plModel.getSecurityLevel(); + HashMap securityMap = HighSecurityUtil.getObjSecurityMap(); + String securityLevelName= securityMap.get(String.valueOf(securityLevel)); + macroLibraries.put("securityLevelName", securityLevelName == null ? "未标密" : securityLevelName); + macroLibraries.put("isHighSecurity",true); + } + // 更多特性权限 + String moreAttrRight = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "MOREATTR_RIGHT");// 1普通用户有设置更多特性权限, + if ("2".equals(moreAttrRight)) {// 只有admin显示 + if ("admin".equals(_uc.getUID())) { + macroLibraries.put("moreAttrRight", true); + } else { + macroLibraries.put("moreAttrRight", false); + } + } else if ("0".equals(moreAttrRight)) {// 0只有管理员用户有权限 + if (isAdmin) {// 管理员用户 + macroLibraries.put("moreAttrRight", true); + } else{// 普通用户 + macroLibraries.put("moreAttrRight", false); + } + } else { + macroLibraries.put("moreAttrRight", true); + } + + macroLibraries.put("checkoutTip", checkoutTip); + if (plModel.isPublish() || plModel.isStop() || plModel.isApproval()) { + macroLibraries.put("checkoutTip", ""); + } + macroLibraries.put("isView", isView);// 是否只读打开 + + // 是否允许用户自定义模板,0:不允许;1:允许。 + AppAPI appApi = SDK.getAppAPI(); + String isCustomDefine = appApi.getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_CUSTOM_DEFINE_SCHEMA); + macroLibraries.put("isCustomDefine", isCustomDefine); + macroLibraries.put("openAppType", openAppType == null || "".equals(openAppType) ? "0" : openAppType); + + //获取是否开启泳道更多特性配置和强制刷新形状属性值 + boolean isLaneAttrConfig = appApi.getPropertyBooleanValue(CoEConstant.APP_ID, "IS_LANE_ATTR_CONFIG", false); + boolean isLaneForceRefreshShapeAttr = appApi.getPropertyBooleanValue(CoEConstant.APP_ID, "IS_LANE_FORCE_REFRESH_SHAPE_ATTR", false); + macroLibraries.put("isLaneAttrConfig", isLaneAttrConfig); + macroLibraries.put("isLaneForceRefreshShapeAttr", isLaneForceRefreshShapeAttr); + + if (plModel.isPublish() || isView || plModel.isStop() || plModel.isApproval()) { + macroLibraries.put("editable", "0"); + } else { + macroLibraries.put("editable", "1"); + } + + if (plModel.isPublish() || plModel.isStop() || plModel.isApproval()) { + long viewCount = plModel.getViewCount(); + plModel.setViewCount(viewCount + 1); + PALRepository dao = new PALRepository(); + dao.update(plModel); + } + + getDesginerDefaultParams(macroLibraries);// 获取默认参数配置 + // 文件协作者 + if (!plModel.isPublish() && !isView && !plModel.isStop() && !plModel.isApproval()) { + CoeListenCacheManager manager = CoeListenCacheManager.getInstance(); + Map listenClients = manager.getCollaborationUsers(rUUID); + StringBuilder userPhoto = new StringBuilder(""); + int userNum = 1; + if (listenClients != null) { + for (ListenClient listenClient : listenClients.values()) { + if (!_uc.getUID().equals(listenClient.getUserId())) { + userPhoto.append(""); + } else { + userNum += listenClient.getUserNum(); + } + } + } + macroLibraries.put("usersPhoto", userPhoto.toString()); + macroLibraries.put("userNum", userNum); + } else { + macroLibraries.put("usersPhoto", ""); + macroLibraries.put("userNum", ""); + } + + DesignerRelationShapeCacheManager relationShapeCache = DesignerRelationShapeCacheManager.getInstance(); + Map> shapeMap = relationShapeCache.getShapemap(); + boolean isExistCopy = false; + if (shapeMap.get(_uc.getUID()) != null) { + isExistCopy = true; + } + boolean isAppearCopy = true; + if (shapeMap.get(_uc.getUID()) != null && shapeMap.get(_uc.getUID()).get("shapeCopyContent") != null) { + isAppearCopy = false;// 默认为定义复制 + } + macroLibraries.put("isExistCopy", isExistCopy); + macroLibraries.put("isAppearCopy", isAppearCopy); + // 如果流程只读,获取流程图片信息 + if (!plModel.isPublish() && !isView && !plModel.isStop() && !plModel.isApproval()) { + String p = plModel.getFilePath(); + String diagram = "../apps/" + CoEConstant.APP_ID + "/img/method/default.png"; + if (isCorrelateBpms) { + diagram = "data:image/png;base64," + BPMNIO.getBPMNImage(appId, processDefId); + } else { + if (!"".equals(p)) { + UtilFile utilFile = new UtilFile(p + "/" + plModel.getId() + ".png"); + if (utilFile.exists()) { + byte[] base64Bytes = Base64.encode(utilFile.readBytes()); + try { + diagram = "data:image/png;base64," + new String(base64Bytes, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + } + macroLibraries.put("diagram", diagram); + } else { + macroLibraries.put("diagram", ""); + } + macroLibraries.put("state", state); + // DockBtnBar中的各功能是否显示 + macroLibraries.put("attributeView", ""); + macroLibraries.put("messageView", ""); + macroLibraries.put("printView", ""); + macroLibraries.put("publishView", ""); + + if (dockDisplay != null && !"".equals(dockDisplay)) { + JSONObject dockDisplayJson = JSONObject.parseObject(dockDisplay); + Iterator keys = dockDisplayJson.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + macroLibraries.put(key, dockDisplayJson.get(key)); + } + } + String riskStyle = "display:none;"; + if (SDK.getAppAPI().isInstalled("com.actionsoft.apps.coe.pal.risk") && SDK.getAppAPI().isActive("com.actionsoft.apps.coe.pal.risk")) { + riskStyle = ""; + } + if (plModel.getMethodId().equals("process.epc") || plModel.getMethodId().equals("process.bpmn2") || plModel.getMethodId().equals("process.flowchart")) { + riskStyle = UtilString.isEmpty(riskStyle) ? "" : "display:none;"; + } else { + riskStyle = "display:none;"; + } + macroLibraries.put("riskStyle", riskStyle); + String processOnIsInstall = "false"; + if (SDK.getAppAPI().isInstalled("com.actionsoft.apps.coe.pal.processon")) { + processOnIsInstall = "true"; + } + String processOnIsActive = "false"; + if (SDK.getAppAPI().isActive("com.actionsoft.apps.coe.pal.processon")) { + processOnIsActive = "true"; + } + macroLibraries.put("processOnIsInstall", processOnIsInstall); + macroLibraries.put("processOnIsActive", processOnIsActive); + JSONObject relationShapeIds = new JSONObject(); + JSONObject relationShapeModels = new JSONObject(); + List> elements = CoeDesignerUtil.getShapeMessageJson(plModel.getId()); + if (elements != null && elements.size() > 0) { + for (Map element : elements) { + String elementId = element.containsKey("id") ? element.get("id").toString() : ""; + if (!UtilString.isEmpty(elementId)) { + Iterator modelIterator = DesignerShapeRelationCache.getByShapeId(plModel.getId(), elementId); + if (modelIterator != null) { + while (modelIterator.hasNext()) { + DesignerShapeRelationModel shapeRelationModel = modelIterator.next(); + PALRepositoryModel relationPalModel = PALRepositoryCache.getCache().get(shapeRelationModel.getRelationFileId()); + if (relationPalModel != null) { + relationShapeIds.put(shapeRelationModel.getRelationShapeId(), shapeRelationModel); + relationShapeModels.put(shapeRelationModel.getShapeId() + "_" + shapeRelationModel.getAttrId(), shapeRelationModel.getRelationShapeText()); + } + } + } + } + } + } + macroLibraries.put("relationShapes", relationShapeIds); + macroLibraries.put("relationShapeModels", relationShapeModels); + + List defaultAttrSort = new ArrayList<>(); + JSONObject attrDefineObj = new JSONObject(); + List shapeAttrMethods = CoeDesignerShapeAPIManager.getInstance().getAllValidAndUseShapeAttributeModels(plModel.getWsId(), plModel.getMethodId()); + for (PALMethodAttributeModel attrModel : shapeAttrMethods) { + defaultAttrSort.add(attrModel.getKey()); + JSONObject object = new JSONObject(); + object.put("key", attrModel.getKey()); + object.put("name", attrModel.getNewTitle()); + object.put("readonly", attrModel.getReadonly()); + object.put("type", attrModel.getType()); + object.put("desc", attrModel.getDesc()==null ? "" : attrModel.getDesc()); + object.put("isRequired", attrModel.getIsRequired()); + attrDefineObj.put(attrModel.getKey(), object); + } + macroLibraries.put("attrDefineObj", attrDefineObj); + macroLibraries.put("defaultAttrSort", defaultAttrSort.size() > 0 ? StringUtils.join(defaultAttrSort, "|") : ""); + macroLibraries.put("importShapeStyle", "display:none"); + if ("control.policy".equals(plModel.getMethodId()) || "data.form".equals(plModel.getMethodId())) {// 制度/表单活动节点导入 + macroLibraries.put("importShapeStyle", "display:block"); + } + if (outputPerm && "process".equals(plModel.getMethodCategory()) && !"process.evc".equals(plModel.getMethodId())) { + if (SDK.getAppAPI().isActive("com.actionsoft.apps.addons.onlinedoc") && SDK.getAppAPI().isActive("com.actionsoft.apps.coe.pal.output.pr")) { + macroLibraries.put("processOutput", true); + } else { + macroLibraries.put("processOutput", false); + } + } else { + macroLibraries.put("processOutput", false); + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_ACCESS, CoEOpLogConst.INFO_REPOSITORY_ACCESS); + } + // 流程串联分析应用 + getPalProcessLinkTag(plModel, macroLibraries); + if (!plModel.isPublish() && !isView && !plModel.isStop() && !plModel.isApproval()) { + // 集群节点 + macroLibraries.put("BPMInstanceName", SDK.getConfAPI().getInstanceName()); + macroLibraries.put("isCollaborationSwitch", SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "isCollaborationSwitch", false)); + // 是否开启同名校验 + macroLibraries.put("sameNameCheck", SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "SAME_NAME_CHECK", false)); + // 批处理应用 + getPalBatchTag(plModel, macroLibraries); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.designer.htm", macroLibraries); + } else { + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.designer.view.html", macroLibraries); + } + } + + // 串联分析应用片段 + public void getPalProcessLinkTag(PALRepositoryModel plModel, Map macroLibraries) { + String processlinkAppId = "com.actionsoft.apps.coe.pal.processlink"; + String processlink_ete_js = ""; + String processlink_ete_analysis = ""; + + if ("process".equals(plModel.getMethodCategory()) && SDK.getAppAPI().isInstalled(processlinkAppId) && SDK.getAppAPI().isActive(processlinkAppId)) { + processlink_ete_js = ""; + processlink_ete_js += ""; + //滚动条 + processlink_ete_js += ""; + processlink_ete_js += ""; + processlink_ete_js += ""; + processlink_ete_js += ""; + //文件的串联分析 + processlink_ete_analysis = + "
    " + + "
    " + + "" + + "
    " + + "
    " ; + } + macroLibraries.put("processlink_ete_js", processlink_ete_js); + macroLibraries.put("processlink_ete_analysis", processlink_ete_analysis); + } + + // 批量处理相关片段 + public void getPalBatchTag(PALRepositoryModel plModel, Map macroLibraries) { + String batchDlg = ""; + String batchJs = ""; + boolean installBatch = false;// 是否安装该批处理应用 + String appId = "com.actionsoft.apps.coe.pal.batch"; + if ("process".equals(plModel.getMethodCategory()) && SDK.getAppAPI().isInstalled(appId) && SDK.getAppAPI().isActive(appId)) { + batchDlg = HtmlPageTemplate.merge(appId, "batch.dialog.htm", null); + Map jsMap = new HashMap<>(); + jsMap.put("appId", appId); + batchJs = HtmlPageTemplate.merge(appId, "batch.link.htm", jsMap); + installBatch = true; + } + macroLibraries.put("batch-dlg", batchDlg); + macroLibraries.put("batch-js", batchJs); + macroLibraries.put("installBatch", installBatch); + } + + protected String getMoreSharpe(String methodId, String uuid, Map macroLibraries) { + StringBuffer div = new StringBuffer(); + if (!PALMethodUtil.haveImport(methodId)) { + macroLibraries.put("btnShapeStyle", "display:none;"); + } else { + macroLibraries.put("btnShapeStyle", ""); + } + macroLibraries.put("liStr", PALMethodUtil.getShapeDialog(methodId, PALMethodUtil.getCustom(methodId, uuid))); + return div.toString(); + } + + /** + * 流程id + * + * @param id + * @return + */ + public String toPalRepositoryPrint(String id) { + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(id); + if (plModel == null) { + return SDK.getPortalAPI().getMessagePageOfError("流程未定义", "id:" + id); + } + boolean isCorrelateBpms = PALRepositoryQueryAPIManager.getInstance().isCorrelateBpms(id, true); + Map macroLibraries = new HashMap(); + String appId = ""; + String diagram = "../apps/" + CoEConstant.APP_ID + "/img/method/default.png"; + String heightStyle = ""; + String palTitle = ""; + String version = ""; + String processDefId = ""; + String p = plModel.getFilePath(); + if (isCorrelateBpms) { + processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(id, true); + appId = ProcessDefCache.getInstance().get(processDefId).getAppId(); + diagram = "data:image/png;base64," + BPMNIO.getBPMNImage(appId, processDefId); + } else { + if (p != null && !"".equals(p)) { + PALRepositoryQueryAPIManager.getInstance().checkImage(plModel.getId(), true, false);// 生成图片 + UtilFile utilFile = new UtilFile(p + "/" + plModel.getId() + ".png"); + if (utilFile.exists()) { + BufferedImage sourceImg; + try { + sourceImg = ImageIO.read(utilFile); + if (sourceImg != null) { + int height = sourceImg.getHeight(); + if (height > 600 && height < 1000) { + heightStyle = "height: 600px;"; + } + } else { + heightStyle = "height: 600px;"; + } + } catch (IOException e) { + e.printStackTrace(); + } + byte[] base64Bytes = Base64.encode(utilFile.readBytes()); + try { + diagram = "data:image/png;base64," + new String(base64Bytes, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + } + palTitle = plModel.getName(); + version = "V" + plModel.getVersion(); + macroLibraries.put("diagram", diagram); + macroLibraries.put("heightStyle", heightStyle); + macroLibraries.put("palTitle", palTitle); + macroLibraries.put("version", version); + macroLibraries.put("sid", _uc.getSessionId()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.designer.print.html", macroLibraries); + } + + /** + * 获取aws的bpmn的define + * + * @param appId + * @param processDefId + * @param verNo + * @return + */ + protected String getDefineOfAws(String appId, String processDefId, int verNo) { + String data = ""; + if (processDefId.length() > 0) { + BPMNFile bpmnFile = BPMNFile.getInstance(appId, processDefId); + Definitions definitions = null; + try { + definitions = bpmnFile.parseBPMN(null, verNo); + } catch (BPMNDefException e) { + return BPMNErrorUtil.getErrorJSON(e); + } catch (Exception e) { + return BPMNErrorUtil.getErrorJSON(e); + } + data = new BpmnToJson().getJsonString(definitions); + } + JSONObject define = JSONObject.parseObject(data); + return define.toString(); + } + + protected void getLinker(BaseModel model, Map macroLibraries) { + // String methodId = model.getMethodId(); + List methodList = PALMethodCache.getPALMethodList(); + List> list = new ArrayList>(); + for (String methodTemp : methodList) { + List methodIdList = PALMethodCache.getPALMethodModelListByMethod(methodTemp); + for (PALMethodModel methodObj : methodIdList) { + // PALMethodModel palMethodModel = + // PALMethodCache.getPALMethodModelById(methodId); + List linker = methodObj.getLinker(); + for (PALMethodLinkerModel method : linker) { + Map m = new HashMap(); + m.put("methodId", method.getMethodId()); + m.put("conceptCode", method.getConceptCode()); + m.put("fromShapeId", method.getFromShapeId()); + m.put("toShapeId", method.getToShapeId()); + m.put("outcomingName", method.getOutcomingName()); + m.put("incomingName", method.getIncomingName()); + list.add(m); + } + } + } + JSONArray linkerRelationshipJsonArray = JSONArray.parseArray(JSON.toJSONString(list)); + macroLibraries.put("linkerRelationship", linkerRelationshipJsonArray); + } + + protected void getDesginerDefaultParams(Map macroLibraries) { + macroLibraries.put("BPMN_TYPE_START_EVENT", BPMNConstant.BPMN_TYPE_START_EVENT); + macroLibraries.put("AWS_ELEMENT_START_EVENT_MESSAGE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_START_EVENT_MESSAGE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_START_EVENT_TIMER_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_START_EVENT_TIMER_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_START_EVENT_SIGNAL_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_START_EVENT_SIGNAL_EVENT_DEFINITION); + macroLibraries.put("BPMN_TYPE_END_EVENT", BPMNConstant.BPMN_TYPE_END_EVENT); + macroLibraries.put("AWS_ELEMENT_END_EVENT_TERMINATE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_END_EVENT_TERMINATE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_END_EVENT_MESSAGE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_END_EVENT_MESSAGE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_END_EVENT_SIGNAL_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_END_EVENT_SIGNAL_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_END_EVENT_ERROR_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_END_EVENT_ERROR_EVENT_DEFINITION); + macroLibraries.put("BPMN_TYPE_SEQUENCE_FLOW", BPMNConstant.BPMN_TYPE_SEQUENCE_FLOW); + macroLibraries.put("BPMN_TYPE_TASK", BPMNConstant.BPMN_TYPE_TASK); + macroLibraries.put("BPMN_TYPE_USER_TASK", BPMNConstant.BPMN_TYPE_USER_TASK); + macroLibraries.put("BPMN_TYPE_SERVICE_TASK", BPMNConstant.BPMN_TYPE_SERVICE_TASK); + macroLibraries.put("BPMN_TYPE_SCRIPT_TASK", BPMNConstant.BPMN_TYPE_SCRIPT_TASK); + macroLibraries.put("BPMN_TYPE_MANUAL_TASK", BPMNConstant.BPMN_TYPE_MANUAL_TASK); + macroLibraries.put("BPMN_TYPE_BUSINESSRULE_TASK", BPMNConstant.BPMN_TYPE_BUSINESSRULE_TASK); + macroLibraries.put("BPMN_TYPE_SEND_TASK", BPMNConstant.BPMN_TYPE_SEND_TASK); + macroLibraries.put("BPMN_TYPE_RECEIVE_TASK", BPMNConstant.BPMN_TYPE_RECEIVE_TASK); + macroLibraries.put("BPMN_TYPE_GATEWAY", BPMNConstant.BPMN_TYPE_GATEWAY); + macroLibraries.put("BPMN_TYPE_EVENTBASED_GATEWAY", BPMNConstant.BPMN_TYPE_EVENTBASED_GATEWAY); + macroLibraries.put("BPMN_TYPE_COMPLEX_GATEWAY", BPMNConstant.BPMN_TYPE_COMPLEX_GATEWAY); + macroLibraries.put("BPMN_TYPE_INTERMEDIATE_CATCH_EVENT", BPMNConstant.BPMN_TYPE_INTERMEDIATE_CATCH_EVENT); + macroLibraries.put("AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_TIMER_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_TIMER_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_MESSAGE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_MESSAGE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_SIGNAL_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_SIGNAL_EVENT_DEFINITION); + macroLibraries.put("BPMN_TYPE_INTERMEDIATE_THROW_EVENT", BPMNConstant.BPMN_TYPE_INTERMEDIATE_THROW_EVENT); + macroLibraries.put("AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_MESSAGE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_MESSAGE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_SIGNAL_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_SIGNAL_EVENT_DEFINITION); + macroLibraries.put("BPMN_TYPE_BOUNDARY_EVENT", BPMNConstant.BPMN_TYPE_BOUNDARY_EVENT); + macroLibraries.put("AWS_ELEMENT_BOUNDARY_EVENT_COMPENSATION_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_COMPENSATE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_BOUNDARY_EVENT_ERROR_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_ERROR_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_BOUNDARY_EVENT_MESSAGE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_MESSAGE_EVENT_DEFINITION); + macroLibraries.put("BPMN_TYPE_PARALLEL_GATEWAY", BPMNConstant.BPMN_TYPE_PARALLEL_GATEWAY); + macroLibraries.put("BPMN_TYPE_INCLUSIVE_GATEWAY", BPMNConstant.BPMN_TYPE_INCLUSIVE_GATEWAY); + macroLibraries.put("BPMN_TYPE_EXCLUSIVE_GATEWAY", BPMNConstant.BPMN_TYPE_EXCLUSIVE_GATEWAY); + macroLibraries.put("BPMN_TYPE_CALL_ACTIVITY_CALLING_PROCESS", BPMNConstant.BPMN_TYPE_CALL_ACTIVITY_CALLING_PROCESS); + macroLibraries.put("BPMN_TYPE_SUB_PROCESS", BPMNConstant.BPMN_TYPE_SUB_PROCESS); + macroLibraries.put("BPMN_TYPE_TEXT_ANNOTATION", BPMNConstant.BPMN_TYPE_TEXT_ANNOTATION); + macroLibraries.put("BPMN_TYPE_HORIZONTAL_POOL", BPMNConstant.BPMN_TYPE_POOL); + macroLibraries.put("BPMN_TYPE_VERTICAL_POOL", BPMNConstant.BPMN_TYPE_VERTICAL_POOL); + macroLibraries.put("BPMN_TYPE_HORIZONTAL_LANE", BPMNConstant.BPMN_TYPE_LANE); + macroLibraries.put("BPMN_TYPE_VERTICAL_LANE", BPMNConstant.BPMN_TYPE_VERTICAL_LANE); + // + macroLibraries.put("AWS_ELEMENT_BOUNDARY_EVENT_SIGNAL_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_SIGNAL_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_BOUNDARY_EVENT_TIMER_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_TIMER_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_BOUNDARY_EVENT_COMPENSATE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_BOUNDARY_EVENT_COMPENSATE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_END_EVENT_COMPENSATE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_END_EVENT_COMPENSATE_EVENT_DEFINITION); + macroLibraries.put("AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_COMPENSATE_EVENT_DEFINITION", BPMNConstant.AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_COMPENSATE_EVENT_DEFINITION); + + } + + protected List getCoeParams(PALRepositoryModel plModel, Map macroLibraries) { + // coe所需参数 + String uuid = plModel.getId(); + String versionUuid = plModel.getVersionId(); + String fileName = ShapeUtil.replaceBlank(plModel.getName()); + String wsid = plModel.getWsId(); + String methodId = plModel.getMethodId(); + BaseModel model = CoeDesignerAPIManager.getInstance().getDefinition(uuid, 0); + if (model == null) { + model = CoeDesignerUtil.createModel(uuid, 0); + } + List sortList; + CoeDesignerShapeAPIManager manager = CoeDesignerShapeAPIManager.getInstance(); + String define = model.getDefinition(); + + //获取流程定义和排序 + JSONObject object = manager.getCoeDefinitionAndSort(define, wsid, methodId); + + model.setDefinition(object.getString("define")); + + sortList = (List) object.get("sort"); + + //处理流程节点形状的通用配置 + JSONObject obj = manager.getCoeProcessShapeConfig(model.getDefinition(), wsid, methodId, uuid); + model.setDefinition(obj.getString("define")); + + model.setFileName(fileName); + putCoeProterties(model); + macroLibraries.put("charId", uuid); + macroLibraries.put("versionUuid", versionUuid); + macroLibraries.put("ver", 0); + macroLibraries.put("fileName", fileName); + macroLibraries.put("versionNum", VersionUtil.showVer(plModel.getVersion())); + macroLibraries.put("appId", ""); + macroLibraries.put("processDefId", ""); + macroLibraries.put("processVersion", ""); + macroLibraries.put("processDefVersionId", ""); + macroLibraries.put("processName", ""); + macroLibraries.put("processGroupName", ""); + macroLibraries.put("categoryName", ""); + macroLibraries.put("define", model.getDefinition()); + macroLibraries.put("isRunning", ""); + macroLibraries.put("type", CoeDesignerConstant.DESIGNER_DIFINITION_DEFAULT); + getLinker(model, macroLibraries); + return sortList; + } + + // 获取是否可以检出状态所需字段 + private void setCheckoutHashMap(String appId, String processDefId, Map macroLibraries) { + if ("".equals(processDefId)) { + return; + } + macroLibraries.put("checkoutstate", BPMNDesignerConstant.BPMN_DESIGNER_CHECKOUT_CHECKOUTING); + macroLibraries.put("checkoutuser", DesignerFileUtil.getCheckOutUser(appId, processDefId)); + macroLibraries.put("checkoutusername", getUserName(DesignerFileUtil.getCheckOutUser(appId, processDefId))); + macroLibraries.put("checkouttime", UtilDate.getAliasDatetime(DesignerFileUtil.getCheckOutTime(appId, processDefId))); + macroLibraries.put("checkoutip", DesignerFileUtil.getCheckOutIP(appId, processDefId)); + macroLibraries.put("user", getContext().getUID()); + UserModel model = (UserModel) UserCache.getModel(getContext().getUID()); + macroLibraries.put("currentUserName", model.getUserName()); + } + + protected List getBpmnParams(PALRepositoryModel plModel, String processDefId, Map macroLibraries) { + // coe所需参数 + String uuid = plModel.getId(); + String versionUuid = ""; + String fileName = ""; + String wsid = plModel.getWsId(); + String methodId = plModel.getMethodId(); + + // 流程所需参数 + String appId = ""; + String processDefVersionId = "";// 流程版本id + int processVersion = 0;// 流程版本号 + String processName = "";// 流程名称 + String processGroupName = "";// 流程组名称 + String categoryName = "";// 分类 + + int versionStatus = 0; + String isRunning = ""; + String define = ""; + ProcessDefinition processModel = null; + BPMNModel model = CoeDesignerUtil.createBPMNModel(uuid, 0); + if (!UtilString.isEmpty(processDefId)) { // 关联或者推送到console + processModel = ProcessDefCache.getInstance().getModel(processDefId); + if (processModel == null) {// 资源在console中被删除的情况,从coe中获取数据 + model = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(uuid, 0); + if (model == null) { + define = CoeDesignerUtil.getTemplateOfDefine(uuid); + } else { + define = model.getDefinition(); + } + } else { // 资源在console中未被删除的情况,从console中获取数据 + CoeDesginerAdapter coeAdapter = new CoeDesginerAdapter(_uc); + define = coeAdapter.readDefinition(appId = processModel.getAppId(), processDefId).toString(); + // 替换真实类型 + try { + JSONObject defineObj = JSONObject.parseObject(define); + JSONObject eleObj = defineObj.getJSONObject("elements"); + Iterator> eleIt = eleObj.entrySet().iterator(); + while(eleIt.hasNext()) { + Entry entry = eleIt.next(); + JSONObject entryVal = (JSONObject)entry.getValue(); + if("linker".equals(entryVal.getString("name"))) { + continue; + } + String typeTitleName = PALRepositoryQueryAPIManager.getInstance().shapePropertyType(entryVal.getString("name")); + entryVal.put("title", typeTitleName); + } + define = JSONObject.toJSONString(defineObj); + } catch(Exception e) { + e.printStackTrace(); + } + // + processDefVersionId = processModel.getVersionId(); + processVersion = processModel.getVersionNo(); + processName = processModel.getName(); + processGroupName = processModel.getProcessGroupName(); + categoryName = processModel.getCategoryName(); + versionStatus = processModel.getVersionStatus(); + fileName = ShapeUtil.replaceBlank(processName); + model.setAppId(processModel.getAppId()); + appId = model.getAppId(); + } + } else { // 没有关联console + model = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(uuid, 0); + if (model == null) { + define = CoeDesignerUtil.getTemplateOfDefine(uuid); + } else { + define = model.getDefinition(); + } + } + versionUuid = plModel.getVersionId(); + if (versionStatus == ProcessDefinitionConst.VERSION_STATUS_RELEASE) {// 如果已经发布,则标注role为running,供设计器判断操作使用 + isRunning = "role = \"running\""; + } + CoeDesignerShapeAPIManager manager = CoeDesignerShapeAPIManager.getInstance(); + //获取流程定义和排序 + JSONObject object = manager.getBpmnDefinitionAndSort(define, wsid, methodId); + + define = object.getString("define"); + List sortList = (List) object.get("sort"); + //处理流程节点形状的通用配置 + JSONObject obj = manager.getCoeProcessShapeConfig(define, wsid, methodId, uuid); + define = obj.getString("define"); + + macroLibraries.put("charId", "".equals(processDefId) ? uuid : processDefId); + macroLibraries.put("versionUuid", versionUuid); + macroLibraries.put("ver", 0); + macroLibraries.put("fileName", ShapeUtil.replaceBlank(fileName)); + macroLibraries.put("versionNum", processModel == null ? VersionUtil.showVer(plModel.getVersion()) : VersionUtil.showVer(processModel.getVersionNo())); + macroLibraries.put("appId", appId); + macroLibraries.put("processDefId", processDefId); + macroLibraries.put("processVersion", processVersion); + macroLibraries.put("processDefVersionId", processDefVersionId); + macroLibraries.put("processName", processName); + macroLibraries.put("processGroupName", processGroupName); + macroLibraries.put("categoryName", categoryName); + macroLibraries.put("define", define); + macroLibraries.put("isRunning", isRunning); + macroLibraries.put("type", CoeDesignerConstant.DESIGNER_DIFINITION_BPMN); + setCheckoutHashMap(appId, processDefId, macroLibraries); + getLinker(model, macroLibraries); + return sortList; + } + + protected void getBpmnDesginerUI(PALRepositoryModel plModel, Map macroLibraries, boolean isView, boolean isLock) { + // 属性过滤 + String schemeId = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "FILTER_SCHEME"); + if(schemeId==null || schemeId.equals("null") ) { + schemeId = ""; + } + macroLibraries.put("schemeId", schemeId); + + StringBuffer bpmnJs = new StringBuffer(); + String baseScript = "\t\n"; + String saveUI = ""; + String isSysAutoSave = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "SYS_AUTOSAVE"); + bpmnJs.append(baseScript.replace("$js$", "designer.extend.events.js")); + boolean flag = Quota.isDeveloperService();// true 有权限,false 无权限 + if (CoeProcessLevelUtil.queryCorrelateType(plModel.getId()) == 1) { // PAL推送至BPMS,且BPMS端已分配 + bpmnJs.append(baseScript.replace("$js$", "bpmn.designer.extend.core.js")); + if (plModel.isApproval() || plModel.isPublish() || plModel.isStop() || isView) { + + } else { + saveUI += "
    "; + } + if (flag) { + if (CoeProcessLevelUtil.isPalManage() && !"show".equals(CoeProcessLevelCorrelateCache.getCache().get(plModel.getId()).getExt1()) && CoeProcessLevelCorrelateCache.getCache().get(plModel.getId()).getCorrelateType() == 1) { + if (CoeProcessLevelUtil.showBpmRunButton(plModel)) {// 显示在bpm运行按钮 + saveUI += "
    "; + } + } else { + saveUI += "
    "; + if(UtilString.isNotEmpty(schemeId)) { //配置了属性过滤参数 + saveUI += "
    "; + saveUI += "
    "; + } + } + } + } else if (CoeProcessLevelUtil.hasMarked(plModel.getId())) { // PAL推送至BPMS,但BPMS端未分配 + if (isSysAutoSave.equals("0")) { + if (plModel.isApproval() || plModel.isPublish() || plModel.isStop() || isView) { + + } else { + saveUI += "
    "; + } + if (flag) { + saveUI += "
    "; + } + } else { + if (flag) { + saveUI = "
    "; + } + } + } else if (CoeProcessLevelUtil.queryCorrelateType(plModel.getId()) == 0) { // BPMS流程关联到PAL + bpmnJs.append(baseScript.replace("$js$", "bpmn.designer.extend.core.js")); + if (plModel.isApproval() || plModel.isPublish() || plModel.isStop() || isView) { + + } else { + saveUI += "
    "; + } + if (flag) { + saveUI += "
    "; + if(UtilString.isNotEmpty(schemeId)) { //配置了属性过滤参数 + saveUI += "
    "; + saveUI += "
    "; + } + } + } else if (plModel.getMethodId().equals("process.bpmn2")) { // 未标记关联,实时保存 + if (isSysAutoSave.equals("0")) { + + if (plModel.isApproval() || plModel.isPublish() || plModel.isStop() || isView) { + if (flag) { + if (CoeProcessLevelUtil.showBpmRunButton(plModel) && !isLock) {// 显示在bpm运行按钮 + saveUI += "
    "; + } + } + } else { + saveUI += "
    "; + if (flag) { + if (CoeProcessLevelUtil.showBpmRunButton(plModel)) {// 显示在bpm运行按钮 + saveUI += "
    "; + saveUI += "
    "; + } + } + } + + } else { + if (flag) { + saveUI += "
    "; + //saveUI += "
    "; + } + } + } + //锁定流程 + String lockUser = plModel.getLockUser(); + if (_uc.getUID().equals(lockUser)) {//当前锁定人 + if (plModel.isPublish() || isView || plModel.isStop()) { + //saveUI += "
    "; + } else { + saveUI += "
    "; + } + } else { + if (plModel.isPublish() || isView || plModel.isStop()) { + //saveUI += "
    "; + } else { + saveUI += "
    "; + } + } + bpmnJs.append(baseScript.replace("$js$", "bpmn.designer.extend.events.js")); + bpmnJs.append(baseScript.replace("$js$", "bpmn.designer.ui.js")); + bpmnJs.append(baseScript.replace("$js$", "bpmn.designer.biz.js")); + macroLibraries.put("saveUI", saveUI); + macroLibraries.put("dock_btn_validate", ""); + macroLibraries.put("js", bpmnJs.toString()); + } + + protected void getCoeDesginerUI(PALRepositoryModel plModel, Map macroLibraries, boolean isLock, boolean isView) { + String saveUI = ""; + if (!plModel.isApproval() && !plModel.isPublish() && !plModel.isStop() && !isView) { + saveUI = "
    "; + String isSysAutoSave = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "SYS_AUTOSAVE"); + if (isSysAutoSave.equals("1")) { + saveUI = ""; + } + //锁定流程 + String lockUser = plModel.getLockUser(); + if (_uc.getUID().equals(lockUser)) {//当前锁定人 + saveUI += "
    "; + } else { + saveUI += "
    "; + } + if (isLock) { + saveUI = ""; + } + } + macroLibraries.put("saveUI", saveUI); + macroLibraries.put("type", CoeDesignerConstant.DESIGNER_DIFINITION_DEFAULT); + // bpmn所需参数 + macroLibraries.put("dock_btn_validate", ""); + macroLibraries.put("processDefId", ""); + macroLibraries.put("appId", ""); + } + + protected void putCoeProterties(BaseModel model) { + // JSONObject defineJson = JSONObject.fromObject(model.getDefinition()); + // JSONObject coeProps = defineJson.containsKey("coeProperties") ? defineJson.getJSONObject("coeProperties") : null; + com.alibaba.fastjson.JSONObject defineJson = com.alibaba.fastjson.JSONObject.parseObject(model.getDefinition()); + com.alibaba.fastjson.JSONObject coeProps = defineJson.containsKey("coeProperties") ? defineJson.getJSONObject("coeProperties") : null; + if (coeProps != null && coeProps.getBoolean("update")) {// 第一次更新json里的 + coeProps.put("uuid", model.getUUID()); + coeProps.put("versionUuid", model.getVersionUuid()); + coeProps.put("ver", model.getVer()); + coeProps.put("fileName", ShapeUtil.replaceBlank(model.getFileName())); + coeProps.put("update", false); + model.setDefinition(defineJson.toString()); + } + } + + public String getDesignerTemplateHtml(String uuid) { + Map macroLibraries = new HashMap(); + macroLibraries.put("uuid", uuid);// definition的UUID + macroLibraries.put("sid", _uc.getSessionId()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.designer.template.htm", macroLibraries); + } + + public String designerMessage(final String type, String uuid, int ver, final String messages, String teamId, String lockUser) { + int check = JsonUtil.checkJsonArray(messages); + String imgPath = ""; + BaseModel definModel = null; + if (check < 0) { + return CoeDesignerConstant.MESSAGES_NOT_JSONARRAY + ""; + } + if (type.equals(CoeDesignerConstant.DESIGNER_DIFINITION_BPMN)) {// bpmn模型 + definModel = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(uuid, 0); + } else { + definModel = CoeDesignerAPIManager.getInstance().getDefinition(uuid, 0); + } + + if (definModel == null) { + if (type.equals(CoeDesignerConstant.DESIGNER_DIFINITION_BPMN)) {// bpmn模型 + definModel = CoeDesignerUtil.createBPMNModel(uuid, ver); + } else { + definModel = CoeDesignerUtil.createModel(uuid, ver); + } + + definModel.setCreateHistory(true); + definModel.setUpdateTime(new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date())); + } else { + // 注释掉下面这段代码,不生成历史文件 + /* + * String updateTimeFormat = "yyyy-MM-dd HH:mm:ss"; + DateTime lastDateTime = new DateTime(UtilDate.getTimes(definModel.getUpdateTime(), updateTimeFormat)); + Date newDate = new Date(); + long dual = newDate.getTime() - lastDateTime.getMillis(); + definModel.setUpdateTime(new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(newDate)); + if (dual - 2 * 60 * 1000 > 0) { + // 创建新版本 + definModel.setCreateHistory(true); + } else { + // 存入到运行版本里 + definModel.setCreateHistory(false); + + }*/ + definModel.setCreateHistory(false); + } + final BaseModel definModel1 = definModel; + CoeDesignerUtil.resetBaseModelOfMsgAction(definModel1, messages);// 组装model; + if (type.equals(CoeDesignerConstant.DESIGNER_DIFINITION_BPMN)) {// bpmn模型 + CoeDesignerAPIManager.getInstance().storeDefinitionOfBpmn((BPMNModel) definModel1);// dao操作 + } else { + CoeDesignerAPIManager.getInstance().storeDefinition(definModel1);// dao操作 + } + // 修改数据库中的修改日期 + Timestamp modifyDate = new Timestamp(System.currentTimeMillis()); + PALRepositoryModelImpl repositoryModel = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(uuid); + Timestamp lastModifyDate = repositoryModel.getModifyDate(); // 上次修改时间 + repositoryModel.setModifyDate(modifyDate); + repositoryModel.setModifyUser(_uc.getUID()); + PALRepository repositoryDao = new PALRepository(); + repositoryModel.setLockUser(lockUser); + repositoryDao.update(repositoryModel); + + // 修改流程团队距上次修改日期超过三天,自动发布动态 + if (teamId != null && !"".equals(teamId)) { + if ((modifyDate.getTime() - lastModifyDate.getTime()) > 60 * 60 * 1000 * 24 * 3) { + AppAPI appAPI = SDK.getAppAPI(); + if (appAPI.isActive("com.actionsoft.apps.network")) { + String aslp = ""; + Map params = new HashMap(); + params.put("sid", _uc.getSessionId()); + params.put("sourceAppId", "com.actionsoft.apps.coe.teamwork"); + aslp = "aslp://com.actionsoft.apps.network/createStream"; + SimpleDateFormat m_format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + params.put("message", _uc.getUserName() + "在 " + m_format.format(modifyDate) + " 修改了流程 " + repositoryModel.getName()); + params.put("teamId", teamId); + ResponseObject responseObject = appAPI.callASLP(appAPI.getAppContext("com.actionsoft.apps.coe.teamwork"), aslp, params); + } + } + } + return imgPath; + } + + /** + * 版本创建,返回创建的结果 + * 关联流程创建新版本 + * @param uuid + * @param processDefId + * @param correlateType 关联类型 1:PAL推送到BPMS,其他:BPMS关联到PAL + * @return + */ + public String createNewCorrelateProcessVersion(String uuid,String processDefId, int correlateType) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryModelImpl lastplModel = (PALRepositoryModelImpl) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + String newUUID = UUIDGener.getUUID(); + ProcessDefinition processDef = ProcessDefCache.getInstance().getModel(processDefId); + // 创建关联关系数据 + CoeProcessLevelCorrelateModel cModel = new CoeProcessLevelCorrelateModel(); + cModel.setWsId(lastplModel.getWsId()); + cModel.setPlId(newUUID); + cModel.setPlVersionId(lastplModel.getVersionId()); + cModel.setPlAwsId(processDef.getId()); + cModel.setPlAwsVersionid(processDef.getVersionId()); + cModel.setCorrelateType(correlateType); + cModel.setCorrelate(true); + if(!CoeProcessLevelUtil.isPalManage() && correlateType == 1) { + cModel.setExt1("hidden"); + } + try { + new CoeProcessLevelCorrelateDao().insert(cModel); + } catch (Exception e) { + e.printStackTrace(); + } + String srcPath = "";// 源文件路径 + String targetPath = "";// 目标文件路径 + String oldUUID = lastplModel.getId(); + lastplModel.setId(newUUID); + if (correlateType == 1) {// PAL推送到BPMS,版本号取PAL流程最大值+1 + //Todo:大小版本号变更后未处理 + List list = PALRepositoryCache.getByVersionId(lastplModel.getVersionId()); + double maxVer = 0; + for (PALRepositoryModel model : list) { + maxVer = model.getVersion() > maxVer ? model.getVersion() : maxVer; + } + //Todo: + lastplModel.setVersion(maxVer + 1); + } else {// BPMS关联到PAL,版本号跟随BPMS + lastplModel.setVersion(processDef.getVersionNo()); + } + lastplModel.setHistoryMaxVersion(String.valueOf(processDef.getHistoryMaxVersion())); + lastplModel.setUse(false); + srcPath = lastplModel.getFilePath(); + if (!"".equals(srcPath) && srcPath != null) { + targetPath = srcPath.replace(uuid, lastplModel.getId()); + } + lastplModel.setFilePath(targetPath); + lastplModel.setPublish(false); + lastplModel.setStop(false); + lastplModel.setApproval(false); + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + String uid = _uc.getUID(); + lastplModel.setCreateUser(uid); + lastplModel.setCreateDate(nowTime); + lastplModel.setModifyUser(uid); + lastplModel.setModifyDate(nowTime); + int store = 0; + try { + store = CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(lastplModel); + } catch (Exception e) { + e.printStackTrace(); + ro = ResponseObject.newWarnResponse("创建失败," + e.getMessage()); + return ro.toString(); + } + if (store == 1) { + // 修改设计器文件 + CoeFile fileUtil = new CoeFile(); + fileUtil.copyDefaultVersion(srcPath, uuid, targetPath, lastplModel.getId()); + // 查询数据节点id,bpm平台创建新版本节点id不会改变 + Map mapNewUUID = new HashMap(); + String define = ""; + CoeDesginerAdapter coeAdapter = new CoeDesginerAdapter(_uc); + define = coeAdapter.readDefinition(ProcessDefCache.getInstance().getModel(processDefId).getAppId(), processDefId).toString(); + JSONObject definition = JSONObject.parseObject(define); + JSONObject elements = definition.getJSONObject("elements"); + Iterator ite = elements.keySet().iterator(); + while (ite.hasNext()) { + String key = ite.next(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + String oldIdT = shape.getString("id"); + mapNewUUID.put(oldIdT, oldIdT); + } + } + + // 处理流程属性 + String property = CoePropertyUtil.getPropertyValue(oldUUID + "_attr"); + if (!UtilString.isEmpty(property)) { + CoePropertyUtil.createProperty(newUUID + "_attr", property); + } + CoeProcessLevelUtil.copyRepositoryProperty(PALRepositoryCache.getCache().get(oldUUID), PALRepositoryCache.getCache().get(newUUID), mapNewUUID, _uc); + ro = ResponseObject.newOkResponse("创建成功"); + JSONObject obj = new JSONObject(); + ro.put("newObj", obj); + ro.put("uuid", lastplModel.getId()); + } else { + ro = ResponseObject.newWarnResponse("创建失败"); + } + return ro.toString(); + } + + public String definitionOfBpmnSave(String uuid, int ver, String appId, String processDefId, String op, String define, String drawMessage) { + ResponseObject responseObject = ResponseObject.newOkResponse().msg(""); + String rs = ""; + String validateResult = ""; + + validateResult = bpmnValidate(appId, processDefId, define); + JSONObject validate = JSONObject.parseObject(validateResult); + String status = validate.getJSONObject("data").getString("result"); + if (!"success".equals(status)) { + return validateResult; + } + if (!UtilString.isEmpty(processDefId)) { + CoeDesginerAdapter coeAdapter = new CoeDesginerAdapter(_uc); + try { + if (op.contains("newversion")) { + // 重新获取当前versionId中最大的版本号,界面传过来的op中的版本号不一定是最大版本号 + String[] array = op.split("\\|"); + String versionId = array[1]; + List list = ProcessDefCache.getInstance().getListOfProcessVersion(appId, versionId); + int processVer = 0; + for (ProcessDefinition definition : list) { + if (definition.getVersionNo() > processVer) { + processVer = definition.getVersionNo(); + } + } + op = "newversion|" + versionId + "|" + processVer; + } + rs = coeAdapter.storeDefinition(appId, processDefId, op, define, drawMessage); + JSONObject rsJson = JSONObject.parseObject(rs); + + // 已关联的流程进行新建,则新流程默认已关联 + if ("success".equals(rsJson.getString("result")) && op.contains("newversion")) { + CoeProcessLevelCorrelateModel cModel = CoeProcessLevelCorrelateCache.getCache().get(uuid); + if (cModel != null && cModel.isCorrelate()) { + createNewCorrelateProcessVersion(uuid, rsJson.getString("processDefId"), cModel.getCorrelateType()); + } + } + responseObject.setData(rsJson); + } catch (BPMNDefException e) { + e.printStackTrace(); + responseObject.err(); + responseObject.setData(JSONObject.parseObject(BPMNErrorUtil.getErrorJSON(e))); + return responseObject.toString(); + } + + return responseObject.toString(); + } + return validateResult; + } + + public String bpmnValidate(String appId, String processDefId, String define) { + + ResponseObject responseObject = ResponseObject.newOkResponse().msg("您的文件校验成功"); + String result = ""; + try { + result = BPMNIO.validateBPMNFile(getContext(), appId, processDefId, define); + responseObject.setData(JSONObject.parseObject(result)); + return responseObject.toString(); + } catch (BPMNDefException e) { + e.printStackTrace(); + responseObject.err("您的文件校验失败,请查看右侧校验信息列表"); + responseObject.setData(JSONObject.parseObject(BPMNErrorUtil.getErrorJSON(e))); + return responseObject.toString(); + } catch (Exception e) { + e.printStackTrace(); + responseObject.err("您的文件校验失败,请查看右侧校验信息列表"); + responseObject.setData(JSONObject.parseObject(BPMNErrorUtil.getErrorJSON(e))); + + return responseObject.toString(); + } + } + + public JSONArray getHistoryDataJson(String uuid) { + JSONArray historyJson = new JSONArray(); + PALRepositoryModel plModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + if (!"".equals(plModel.getFilePath())) { + CoeFile jsonUtil = new CoeFile(); + historyJson = jsonUtil.getHistoryJsonData(plModel.getFilePath()); + } + return historyJson; + } + + // 读取所有版本的列表 + public String historyVersions(String type, String appId, String uuid, String processDefId) { + if (CoeDesignerConstant.DESIGNER_DIFINITION_BPMN.equals(type)) {// bpmn设计器 + // plModel.setPlAwsPidd2"); + } + if (!"".equals(processDefId)) { + CoeDesginerAdapter coeAdapter = new CoeDesginerAdapter(_uc); + return coeAdapter.readDesignerHistory(appId, processDefId); + } + + JSONObject json = new JSONObject(); + JSONArray versions = getHistoryDataJson(uuid); + JSONObject users = new JSONObject(); + UserModel model = (UserModel) UserCache.getModel(getContext().getUID()); + users.put(getContext().getUID(), model.getUserName()); + json.put("users", users); + json.put("versions", versions); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(json); + return ro.toString(); + } + + public String getDefine(String type, String appId, String uuid, String processDefId, int ver) { + String define = "{}"; + BaseModel model = null; + if (!"".equals(processDefId)) { + CoeDesginerAdapter coeAdapter = new CoeDesginerAdapter(_uc); + define = coeAdapter.readDefinition(appId, processDefId, ver); + ResponseObject responseObject = ResponseObject.newOkResponse(); + responseObject.setData(JSONObject.parseObject(define)); + return responseObject.toString(); + } else if (CoeDesignerConstant.DESIGNER_DIFINITION_BPMN.equals(type)) { + model = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(uuid, ver); + } else { + model = CoeDesignerAPIManager.getInstance().getDefinition(uuid, ver); + } + if (model != null) { + define = model.getDefinition(); + } + ResponseObject responseObject = ResponseObject.newOkResponse(); + responseObject.setData(JSONObject.parseObject(define)); + return responseObject.toString(); + } + + /** + * 重置历史版本 + * + * @param type + * @param uuid + * @param processDefId + * @param ver + * @return + */ + public String restoreHistoryVersion(String type, String appId, String uuid, String processDefId, int ver) { + ProcessBPMNDesignerWeb processBPMNDesignerWeb = new ProcessBPMNDesignerWeb(getContext()); + String versionId = ProcessDefCache.getInstance().getModel(processDefId).getVersionId(); + String operateType = "restoreversion|" + versionId + "|" + ver; + return processBPMNDesignerWeb.restoreVersion(appId, processDefId, operateType); + } + + /** + * 创建节点关系 + * @param oldModel + * @param createNewShapeId true 返回map中key为文件节点id,value为新创建的id; false 返回map中key为文件节点id,value与key相同 + * @return map key:oldShapeId value:newShapeId/oldShapeId + */ + private Map createShapeIdRelation(PALRepositoryModel oldModel, boolean createNewShapeId) { + // 创建新老节点对应关系 + Map map = new HashMap(); + // 获取原来的节点数据 + String define = ""; + BPMNModel bpmnDefineModel = null; + BaseModel baseDefineModel = null; + if (oldModel.getMethodId().equals("process.bpmn2")) { + bpmnDefineModel = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(oldModel.getId(), 0); + if (bpmnDefineModel == null) { + bpmnDefineModel = CoeDesignerUtil.createBPMNModel(oldModel.getId(), 0); + } + define = bpmnDefineModel.getDefinition(); + } else { + baseDefineModel = CoeDesignerAPIManager.getInstance().getDefinition(oldModel.getId(), 0); + if (baseDefineModel == null) { + baseDefineModel = CoeDesignerUtil.createModel(oldModel.getId(), 0); + } + define = baseDefineModel.getDefinition(); + } + JSONObject definition = JSONObject.parseObject(define); + JSONObject elements = definition.getJSONObject("elements"); + Iterator ite = elements.keySet().iterator(); + while (ite.hasNext()) { + String key = ite.next(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + String oldId = shape.getString("id"); + if (createNewShapeId) { + String id = UUIDGener.getObjectId(); + map.put(oldId, id); + } else { + map.put(oldId, oldId); + } + } + } + return map; + } + + /** + * 复制出现的时候-已无出现复制功能 + * @param uuId + * @deprecated + */ + private Map updateCPShapes(String olduuid, String uuId, String define) { + PALRepositoryModel levelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuId); + String filePath = levelModel.getFilePath(); + filePath = filePath + File.separator + levelModel.getId(); + UtilFile utilFile = new UtilFile(filePath); + String messageJson = utilFile.readStrUTF8(); + if (!UtilString.isEmpty(define)) { + messageJson = define; + } + if (messageJson == null || "".equals(messageJson)) { + return new HashMap(); + } + List list = new ArrayList(); + Map mapNewUUIDS = new HashMap(); + + messageJson = ShapeUtil.fileJsonToObject(messageJson, list, mapNewUUIDS); + if (mapNewUUIDS != null) { + for (Map.Entry mapNewUUID : mapNewUUIDS.entrySet()) { + messageJson = messageJson.replace(mapNewUUID.getKey(), mapNewUUID.getValue()); + } + } + if (list.size() > 0 && updateShapes(list, uuId)) { + try { + utilFile.write(messageJson.getBytes("utf-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + DesignerRelationShapeCacheManager cache = DesignerRelationShapeCacheManager.getInstance(); + Map> shapeMap = cache.getEventMap(); + messageJson = ShapeUtil.shapeJsonToObject(messageJson, shapeMap, uuId); + return mapNewUUIDS; + } + + /** + * 更新图形到数据库 + * + * @param elementList + * @param subject + * @return + */ + private boolean updateShapes(List elementList, String subject) { + // 粘贴时对缓存中的的图形的id进行更新 + List list = new ArrayList(); + for (int i = 0, size = elementList.size(); i < size; i++) { + JSONObject jsonObj = elementList.get(i); + DesignerShapePasteModel model = new DesignerShapePasteModel(); + model.setShapeId(jsonObj.getString("id")); + JSONArray jsonArr = JSONArray.parseArray(jsonObj.getString("dataAttributes")); + for (int j = 0, size1 = jsonArr.size(); j < size1; j++) { + JSONObject jObj = JSONObject.parseObject(jsonArr.getString(j)); + if (jObj.containsKey("shapeGroupId")) { + String shapeGroupId = jObj.getString("shapeGroupId"); + if (null != shapeGroupId && !"".equals(shapeGroupId)) { + model.setShapeGroupId(shapeGroupId); + break; + } + } + + } + model.setShapeMessage(jsonObj.toString()); + model.setShapecategoryName(jsonObj.getString("category")); + model.setShapeName(jsonObj.getString("name")); + model.setIsPaste("Y"); + model.setPalRepositoryId(subject); + model.setShapeType(jsonObj.getString("title")); + model.setIsDelete("N"); + model.setId(jsonObj.getString("id")); + list.add(model); + } + try { + return CoeProcessLevelDaoFacotory.createCoeProcessLevel().pasteToDatabse(list); + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + protected String getDesginerTr(PALRepositoryModel plModel, String uuid, int i) { + StringBuffer tr = new StringBuffer(); + String img = ""; + String title = ""; + String checkedInputAttr = ""; + if (!plModel.isUse()) { + img = "../apps/" + CoEConstant.APP_ID + "/img/ws/red.ball.gif"; + title = "历史版本"; + } else { + img = "../apps/" + CoEConstant.APP_ID + "/img/ws/green.ball.gif"; + title = "正在使用"; + } + /* if(!"".equals(uuid) && plModel.getUUId().equals(uuid)){ + * checkedInputAttr ="checked='checked'"; } */ + String backgroud = " background: none repeat scroll 0 0" + " #FFFFFF;"; + if (i % 2 == 0) + backgroud = " background: none repeat scroll 0 0 " + "#FAFAFA;"; + if (plModel.isUse()) + checkedInputAttr = "checked='checked'"; + tr.append("").append("").append("
    ").append("").append("
    ").append("").append("
    ") + .append(VersionUtil.getVersionStrV(plModel.getVersion())).append("
    ").append("
    ").append(plModel.getName()).append("
    ").append("" + "
    ").append(" "); + // 已发布版本和正在使用版本不能删除 + if (!plModel.isPublish() && !plModel.isUse()) { + tr.append(""); + } + tr.append(""); + return tr.toString(); + + } + + protected void saveDesginerOfAws(BPMNModel model) { + String appId = ProcessDefCache.getInstance().getModel(model.getProcessDefId()).getAppId(); + try { + BPMNIO.saveJsonToBPMNFile(getContext(), appId, model.getProcessDefId(), "", model.getDefinition(), false, model.getDraw()); + + } catch (BPMNDefException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 根据chartId 获得相应图片(预览) + * + * @param uuid chartId + * @return + */ + public String getPNGUrl(String uuid) { + String photo = "../apps/" + CoEConstant.APP_ID + "/img/method/default.png"; + if (uuid.indexOf("obj_") == 0) { + photo = "data:image/png;base64," + BPMNIO.getBPMNImage( ProcessDefCache.getInstance().getModel(uuid).getAppId(), uuid); + } else { + PALRepositoryModel cplm = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + if (cplm != null) { + PALRepositoryQueryAPIManager.getInstance().checkImage(cplm.getId(), true, false);// 生成图片 + String path = cplm.getFilePath(); + if (!UtilString.isEmpty(path)) { + UtilFile utilFile = new UtilFile(path + "/" + cplm.getId() + ".png"); + if (utilFile.exists()) { + byte[] base64Bytes = Base64.encode(utilFile.readBytes()); + try { + photo = "data:image/png;base64," + new String(base64Bytes, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("url", photo); + return ro.toString(); + } + + /** + * 下载导出流程图片 + * @param uuid + * @return + */ + public String getPNGDownloadUrl(String uuid, String type) { + ResponseObject ro = ResponseObject.newOkResponse(); + String url = ""; + if (type.equals("image")) { + url = handlePngTypeUrl(uuid); + } + if (type.equals("pdf")) { + url = handlePdfTypeUrl(uuid); + } + if (type.equals("json")) { + url = handleJsonTypeUrl(uuid); + } + if (type.equals("xml")) { + url = handleXmlTypeUrl(uuid); + } + if (type.equals("excel")) { + url = handleExcelTypeUrl(uuid); + } + ro.put("url", url); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_DOWNLOAD, CoEOpLogConst.INFO_REPOSITORY_PNG_DOWNLOAD); + } + return ro.toString(); + } + + private String handleExcelTypeUrl(String uuid) { + PALRepositoryModel model = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + //创建工作簿 + HSSFWorkbook workbook = new HSSFWorkbook(); + //创建工作表 + HSSFSheet sheet = workbook.createSheet(model.getName()); + HSSFFont font = workbook.createFont(); + HSSFCellStyle styleHead = workbook.createCellStyle(); + styleHead.setFillForegroundColor(HSSFColor.BLUE_GREY.index); + styleHead.setFillPattern(FillPatternType.SOLID_FOREGROUND); + styleHead.setBorderBottom(BorderStyle.THIN); + styleHead.setBottomBorderColor(HSSFColor.BLACK.index); + styleHead.setBorderLeft(BorderStyle.THIN); + styleHead.setLeftBorderColor(HSSFColor.BLACK.index); + styleHead.setBorderRight(BorderStyle.THIN); + styleHead.setRightBorderColor(HSSFColor.BLACK.index); + styleHead.setBorderTop(BorderStyle.THIN); + styleHead.setTopBorderColor(HSSFColor.BLACK.index); + // 设置左右对齐居中 + styleHead.setAlignment(HorizontalAlignment.CENTER); + // 垂直对其居中 + styleHead.setVerticalAlignment(VerticalAlignment.CENTER); + // 设置true让Cell中的内容以多行显示 + styleHead.setWrapText(true); + + font.setBold(true); + font.setColor(HSSFColor.WHITE.index); + styleHead.setFont(font); + + //获取数据 + ExcelData excelData = new ExcelData(); + JSONArray array = excelData.getExcelData(uuid); + //设置数据 + if (array != null && array.size() > 0) { + //表头 + HSSFRow headerRow = sheet.createRow(0); + JSONObject object = array.getJSONObject(0); + Set tmpHeaderSet = object.keySet(); + int k = 0; + for (String key : tmpHeaderSet) { + sheet.setColumnWidth(k, 6000); + HSSFCell cellHeader = headerRow.createCell(k); + cellHeader.setCellValue(key); + cellHeader.setCellStyle(styleHead); + k++; + } + HSSFCellStyle styleData = workbook.createCellStyle(); + styleData.setBorderBottom(BorderStyle.THIN); + styleData.setBottomBorderColor(HSSFColor.BLACK.index); + styleData.setBorderLeft(BorderStyle.THIN); + styleData.setLeftBorderColor(HSSFColor.BLACK.index); + styleData.setBorderRight(BorderStyle.THIN); + styleData.setRightBorderColor(HSSFColor.BLACK.index); + styleData.setBorderTop(BorderStyle.THIN); + styleData.setTopBorderColor(HSSFColor.BLACK.index); + for (int i = 0; i < array.size(); i++) { + JSONObject tmp = array.getJSONObject(i); + HSSFRow sheetRow = sheet.createRow(i + 1); + Set tmpSet = tmp.keySet(); + int j = 0; + for (String key : tmpSet) { + HSSFCell cell = sheetRow.createCell(j); + cell.setCellValue(tmp.getString(key)); + cell.setCellStyle(styleData); + j++; + } + } + } + //写入文件 + DCContext dc = DCUtil.createTempFileContext(CoEConstant.APP_ID, "", "", ".xls"); + dc.setFileName(model.getName() + "_V" + model.getVersion() + ".xls"); + File exportFile = new File(dc.getFilePath()); + try { + workbook.write(new FileOutputStream(exportFile)); + workbook.close(); + } catch (IOException e) { + e.printStackTrace(); + } + dc.setSession(_uc); + return dc.getDownloadURL(); + } + + private String handlePdfTypeUrl(String uuid) { + return downloadProcessPdf(uuid); + } + + private String handleXmlTypeUrl(String uuid) { + JSONObject object = handleRepositoryJson(uuid); + //json->xml的变换 + StringBuffer buffer = new StringBuffer(); + buffer.append(""); + jsonToXmlstr(object, buffer); + + //得到下载url + DCContext dc = DCUtil.createTempFileContext(CoEConstant.APP_ID, "", "", "xml"); + //设置导出文件dc的名称 + PALRepositoryModel model = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + dc.setFileName(model.getName() + "_V" + model.getVersion() + ".xml"); + File exportFile = new File(dc.getFilePath()); + FileOutputStream fos = null; + try { + fos = new FileOutputStream(exportFile); + fos.write(buffer.toString().getBytes("UTF-8")); + fos.flush(); + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + dc.setSession(_uc); + return dc.getDownloadURL(); + } + + public String jsonToXmlstr(JSONObject jsonObject, StringBuffer buffer ){ + Set> set = jsonObject.entrySet(); + Iterator> iterator = set.iterator(); + while (iterator.hasNext()){ + Map.Entry entry = iterator.next(); + if (entry.getValue().getClass().getName().equals("com.alibaba.fastjson.JSONObject")){ + buffer.append("<" + entry.getKey() + ">"); + JSONObject jo = jsonObject.getJSONObject(entry.getKey()); + jsonToXmlstr(jo, buffer); + buffer.append(""); + } else if(entry.getValue().getClass().getName().equals("com.alibaba.fastjson.JSONArray")){ + JSONArray ja = jsonObject.getJSONArray(entry.getKey()); + if (ja != null && ja.size() > 0 && ja.get(0) instanceof String) { + buffer.append("<" + entry.getKey() + ">" + JSON.toJSONString(ja)); + buffer.append(""); + } else { + for (int i = 0; i < ja.size(); i++) { + buffer.append("<" + entry.getKey() + ">"); + JSONObject joChild = ja.getJSONObject(i); + jsonToXmlstr(joChild, buffer); + buffer.append(""); + } + } + } else if(entry.getValue().getClass().getName().equals("java.lang.String")){ + buffer.append("<" + entry.getKey() + ">" + entry.getValue()); + buffer.append(""); + } + } + return buffer.toString(); + } + + private JSONObject handleRepositoryJson(String uuid) { + //执行导出流程 + CoeProcessLevelWeb coeProcessLevelWeb = new CoeProcessLevelWeb(_uc); + coeProcessLevelWeb.coePalPlExport(_uc, uuid); + //处理得到一个包含流程文件的json文件 + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + DCContext dcContext = new DCContext(_uc, dcProfile, CoEConstant.APP_ID, "export", uuid); + UtilFile repositoryJsonFile = new UtilFile(dcContext.getPath() + "/" + "repository.json"); + UtilFile repositoryFile = new UtilFile(dcContext.getPath() + "/" + uuid + "/" + uuid); + JSONObject object = JSON.parseObject(repositoryJsonFile.readStrUTF8()); + JSONObject object1 = JSON.parseObject(repositoryFile.readStrUTF8()); + object.put("repositoryFile", object1); + return object; + } + + private String handleJsonTypeUrl(String uuid) { + JSONObject object = handleRepositoryJson(uuid); + //得到下载url + DCContext dc = DCUtil.createTempFileContext(CoEConstant.APP_ID, "", "", "json"); + //设置导出文件dc的名称 + PALRepositoryModel model = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + dc.setFileName(model.getName() + "_V" + model.getVersion() + ".json"); + File exportFile = new File(dc.getFilePath()); + FileOutputStream fos = null; + try { + fos = new FileOutputStream(exportFile); + fos.write(JSON.toJSONString(object).getBytes("UTF-8")); + fos.flush(); + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + dc.setSession(_uc); + return dc.getDownloadURL(); + } + + private String handlePngTypeUrl(String uuid) { + boolean isCorrelate = PALRepositoryQueryAPIManager.getInstance().isCorrelateBpms(uuid, true); + if (isCorrelate) { + try { + String processDefId = CoeProcessLevelUtil.queryBpmsProcessDefIdByPalId(uuid, true); + return BPMNIO.getBPMNDiagramUrl(ProcessDefCache.getInstance().getModel(processDefId).getAppId(), processDefId, 1, _uc.getSessionId(), 0); + } catch (AWSException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + PALRepositoryModel cplm = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + if (cplm == null) throw new AWSException("流程未找到 " + uuid); + PALRepositoryQueryAPIManager.getInstance().checkImage(cplm.getId(), true, true);// 生成图片 + String path = cplm.getFilePath(); + if (!UtilString.isEmpty(path)) { + UtilFile utilFile = new UtilFile(path + "/" + cplm.getId() + ".png"); + if (utilFile.exists()) { + DCContext dcContext = null; + DCUtil.getInstance(); + dcContext = DCUtil.createTempFileContext(AppsConst.SYS_APP_PLATFORM, "Designer", "PNG", "png"); + String cplmName = cplm.getName().replace("\n", ""); + cplmName = StringHandleUtil.filenameFilter(cplmName, "-"); + dcContext.setFileName(cplmName + ".png"); + File ff = new File(dcContext.getFilePath()); + FileOutputStream fos = null; + try { + fos = new FileOutputStream(ff); + fos.write(utilFile.readBytes()); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (fos != null) { + fos.flush(); + fos.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + dcContext.setSession(_uc); + return dcContext.getDownloadURL(); + } + } + } + return ""; + } + + /** + * 下载图片为pdf + * @param ids 流程id,逗号分隔 + * @return + */ + public String downloadProcessPdf(String ids) { + if (UtilString.isEmpty(ids)) { + throw new AWSException("参数不能为空"); + } + // 获取所有流程 + Set removeIds = new HashSet(); + List list = new ArrayList(); + String [] idArr = ids.split(","); + for (String id : idArr) { + if (!UtilString.isEmpty(id)) { + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(id); + PALRepositoryModel removeModel = PALRepositoryRemoveCache.getCache().get(id);// 回收站 + if (plModel == null && removeModel == null) { + SDK.getLogAPI().consoleInfo("[流程图片PDF下载]未找到流程文件,id:" + id); + continue; + } + if (plModel == null) { + plModel = removeModel; + removeIds.add(plModel.getId()); + } + list.add(plModel); + } + } + // 获取所有图片 + //Collections.sort(list, new ChinaWordCompartor()); // 按名称排序 + int index = 1;// 序号,后期生成pdf按照名称排序,每次导出pdf顺序一致 + // 放入该应用的dc下 + String appId = CoEConstant.APP_ID; + String repositoryName = "tmp"; + String groupValue = "processImgs"; + String fileValue = UUIDGener.getUUID(); + Map titleMap = new HashMap<>(); + // System.out.println(fileValue); + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(appId, repositoryName); + DCContext dc = new DCContext(_uc, dcProfile, appId, groupValue, fileValue); + UtilFile fileDir = new UtilFile(dc.getPath()); + // 创建文件 + fileDir.mkdirs(); + String title = "default"; + for (PALRepositoryModel model : list) { + BPMNModel bpmnDefineModel = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(model.getId(), 0); + if (bpmnDefineModel == null) { + bpmnDefineModel = CoeDesignerUtil.createBPMNModel(model.getId(), 0); + bpmnDefineModel.setCreateHistory(false); + } + // 创建图片 + ChartGraphics brush = new ChartGraphics(); + byte[] desginerImg = null; + try { + // desginerImg = brush.draw(bpmnDefineModel.getDefinition(), (int)PageSize.A4.getHeight() - 70 - 30, (int)PageSize.A4.getWidth() - 30 - 30); // 获得原图 + desginerImg = brush.draw(bpmnDefineModel.getDefinition(), null, null); // 获得原图 + if (desginerImg.length > 0) { + // 保存图片 + UtilFile uf = new UtilFile(fileDir + File.separator + index + ".png"); + uf.write(desginerImg); + //String processNo = getProcessNo(model.getId()); + //String title = model.getName() + " " + (UtilString.isEmpty(processNo) ? "" : processNo) + "(" + StatusContrastUtil.getInstance().getStatusName(model) + ")"; + title = model.getName() + "_V" + model.getVersion(); + SDK.getLogAPI().consoleInfo("【流程PDF下载】创建流程图片【成功】【" + title + "】【uuid=" + model.getId() + "】"); + titleMap.put(index + ".png", title); + index++; + } + } catch (Exception e) { + e.printStackTrace(); + SDK.getLogAPI().consoleInfo("【流程PDF下载】创建流程图片【失败】【" + model.getName() + "】【uuid=" + model.getId() + "】"); + } + } + // 生成pdf图片,tmp文件下 + String pdfFileValue = "pdf"; + DCContext pdfDc = new DCContext(_uc, dcProfile, appId, groupValue, pdfFileValue); + UtilFile pdfDir = new UtilFile(pdfDc.getPath()); + if (!pdfDir.exists()) { + pdfDir.mkdirs(); + } + String date = new SimpleDateFormat("yyyyMMdd").format(new Date()).toString(); + /*File [] pdfFiles = pdfDir.listFiles(new MyFilenameFilter(date)); + int maxNo = 0; + if (pdfFiles != null && pdfFiles.length > 0) { + // 获取最大编号 + for (int i = 0; i < pdfFiles.length; i++) { + File file = pdfFiles[i]; + String noStr = file.getName().substring(file.getName().lastIndexOf("-") + 1, file.getName().lastIndexOf(".")); + maxNo = compareNo(noStr, maxNo); + } + } + + String suffixNo = formatNo(maxNo + 1); + String pdfName = "流程图-" + date + "-" + suffixNo + ".pdf";*/ + String pdfName = title + ".pdf"; + File pdfFile = new File(pdfDir.getPath() + File.separator + pdfName); + Img2Pdf.createPdf(titleMap, pdfFile, fileDir, _uc.getUserName(), pdfName, "流程图", _uc.getUserName()); + SDK.getLogAPI().consoleInfo("创建流程图PDF,图片文件夹名称【" + fileValue + "】,PDF名称【" + pdfName + "】"); + // 删除存储图片的文件夹 + UtilFile.removeFile(fileDir); + // 提供下载流 + DCContext pdfContext = new DCContext(_uc, dcProfile, appId, groupValue, pdfFileValue, pdfName); + pdfContext.setSession(_uc); + return pdfContext.getDownloadURL() + "&isInline=false"; + } + + /* + * 锁定 解锁当前流程 xuwp + * */ + public String lockOrUnlockProcess(String uuid, String optype) { + ResponseObject rs = ResponseObject.newOkResponse(); + //判断流程是否已锁定 + PALRepository dao = new PALRepository(); + PALRepositoryModel model = dao.getInstance(uuid); + if (model != null) { + String lockuser = model.getLockUser(); + if (!UtilString.isEmpty(lockuser) && !lockuser.equals(getContext().getUID())) { + rs.err(); + } else { + lockuser = ""; + if ("lockpro".equals(optype)) {//锁定 + lockuser = getContext().getUID(); + } + try { + dao.updateLockUser(uuid, lockuser, _uc.getUID()); + rs.ok(); + } catch (Exception e) { + rs.msg("锁定失败"); + } + } + } + + + return rs.toString(); + } + + /* + * 判断当前流程是否处于锁定状态 + * */ + public String checkProcessLockState(String uuid) { + ResponseObject rs = ResponseObject.newOkResponse(); + if (!UtilString.isEmpty(uuid) && uuid.contains("obj_")) {// 推送过去的,暂时不校验,等改了推送机制再说 + rs.put("lockUser", ""); + rs.put("canSave", true); + return rs.toString(); + } + boolean canSave = true;//是否可执行保存操作 + PALRepository dao = new PALRepository(); + PALRepositoryModel model = dao.getInstance(uuid); + String lockUser = ""; + if (model != null) { + lockUser = model.getLockUser(); + UserModel user = SDK.getORGAPI().getUser(lockUser); + if (UtilString.isNotEmpty(lockUser) && user != null && !user.isClosed() && !_uc.getUID().equals(lockUser)) { + canSave = false; + lockUser = user.getUserName(); + } + } else { + return ResponseObject.newErrResponse("文件已被删除").toString(); + } + rs.put("lockUser", lockUser); + rs.put("canSave", canSave); + return rs.toString(); + } + + public String getShape(String uuid, String methodId, String categories, String wsId) { + String shapes = getSchema(uuid, methodId, categories); + Map map = Maps.newHashMap(); + map.put("shapes", shapes); + List cateList = PALMethodUtil.distinct(categories); + int len = 0; + StringBuffer methodIds = new StringBuffer(); + for (String cate : cateList) { + List shapeConfigs = PALRepositoryShapeConfigCache.getShapeConfigListByMethodId(wsId, cate); + JSONObject object = new JSONObject(); + for (PALRepositoryShapeConfigModel model : shapeConfigs) { + if (object.containsKey(model.getShapeId())) { + JSONArray array = object.getJSONArray(model.getShapeId()); + array.add(JSON.parseObject(model.getAttribute())); + } else { + JSONArray configArray = new JSONArray(); + configArray.add(JSON.parseObject(model.getAttribute())); + object.put(model.getShapeId(), configArray); + } + } + map.put(cate, JSON.toJSONString(object)); + if (++len == cateList.size()) { + methodIds.append(cate); + break; + } + methodIds.append(cate).append(","); + } + PALMethodUtil.saveCustom(methodId, uuid, methodIds.toString()); + return JSON.toJSONString(map); + } + + public String getSchema(String uuid, String methodId, String categories) { + StringBuffer shapes = new StringBuffer(); + List cateList = PALMethodUtil.distinct(categories); + CoeUserModel userModel = (CoeUserModel) CoeUserDaoFactory.createUser().getInstanceByUserId(_uc.getUID()); + boolean isAdmin = false; + if (userModel != null && userModel.getIsAdmin() == 1) { + isAdmin = true; + } + PALMethodModel mModel = PALMethodCache.getPALMethodModelById(methodId); + + // 是否允许用户自定义模板,0:不允许;1:允许。 + AppAPI appApi = SDK.getAppAPI(); + String isCustomDefine = appApi.getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_CUSTOM_DEFINE_SCHEMA); + + if (mModel != null) { + String schema = mModel.getSchema(); + if ("0".equals(isCustomDefine)) { + shapes.append(schema).append("\r\n"); + } else { + shapes.append(schema).append("\r\n"); +// if (isAdmin || methodId.equals("process.bpmn2")) { +// shapes.append(schema).append("\r\n"); +// } else { +// shapes.append(schema.substring(0, schema.indexOf("Schema.addShape"))).append("\r\n"); +// } + if (mModel.getCustomSchema() != null) { + shapes.append(mModel.getCustomSchema()).append("\r\n"); + } + } + } + for (String cate : cateList) { + if ("basic".equals(cate)) { + shapes.append(PALMethodCache.getBasicTpl()).append("\r\n"); + continue; + } + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(cate); + if (methodModel == null) { + continue; + } + String schema = methodModel.getSchema(); + if ("0".equals(isCustomDefine)) { + shapes.append(methodModel.getSchema()).append("\r\n"); + } else { + if (isAdmin) { + shapes.append(methodModel.getSchema()).append("\r\n"); + } else { + shapes.append(schema.substring(0, schema.indexOf("Schema.addShape"))).append("\r\n"); + } + if (methodModel.getCustomSchema() != null) { + shapes.append(methodModel.getCustomSchema()).append("\r\n"); + } + } + } + return shapes.toString(); + } + + public String getDesignerLinkTree(String wsid, String teamId, String palId) { + Map macroLibraries = new HashMap(); + JSONArray expendIds = new JSONArray(); + if (teamId == null || "".equals(teamId)) { + macroLibraries.put("treeData", PALRepositoryQueryAPIManager.getInstance().getPalRepositoryTreeRootData(_uc, wsid, "", "isUsed")); + PALRepository dao = new PALRepository(); + if (palId != null && !"".equals(palId)) { + List parentModels = new ArrayList(); + PALRepositoryModel pModel = PALRepositoryCache.getCache().get(palId); + while (pModel != null) { + if (pModel.getParentId().length() == 36) { + parentModels.add(pModel); + List pModels = dao.getRepositoryByVersionId(pModel.getParentId()); + pModel = pModels != null && pModels.size() > 0 ? pModels.get(0) : null; + if (pModel != null) { + expendIds.add(0, pModel.getId()); + } + } else { + expendIds.add(0, pModel.getParentId()); + pModel = null; + } + + } + } + } else { + macroLibraries.put("treeData", PALRepositoryQueryAPIManager.getInstance().getPermPalRepositoryTreeData(_uc, wsid, teamId, "isUsed")); + } + macroLibraries.put("expendIds", expendIds); + macroLibraries.put("sid", _uc.getSessionId()); + macroLibraries.put("wsid", wsid); + macroLibraries.put("teamId", teamId); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.designer.link.tree.htm", macroLibraries); + } + + public String getDesignerLinkTreeSearchByName(String seachName, String wsid) { + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + List coeProcessLevels = coeProcessLevel.getCoeProcessLevelByName(seachName, wsid, null); + int length = coeProcessLevels.size(); + JSONArray jsonArr = new JSONArray(); + for (int i = 0; i < length; i++) { + PALRepositoryModel model = coeProcessLevels.get(i); + JSONObject json = new JSONObject(); + json.put("id", model.getId()); + jsonArr.add(json); + } + ResponseObject resp = null; + JSONObject data = new JSONObject(); + data.put("jsonArr", jsonArr); + resp = ResponseObject.newOkResponse(); + resp.setData(data); + // resp.msg("创建成功"); + return resp.toString(); + } + + /** + * 获取流程相关的留言 + * + * @param repositoryId + * @return + */ + public String getPALCommentList(String repositoryId, String openAppType) { + JSONArray result = new JSONArray(); + PALComment dao = new PALComment(); + List list = dao.getCommentList(repositoryId, "-1", openAppType); + if (list != null) { + for (PALCommentModel model : list) { + JSONObject object = new JSONObject(); + UserModel userModel = UserCache.getCache().get(model.getUserId()); + object.put("id", model.getId()); + object.put("userId", userModel.getUID()); + object.put("userName", userModel.getUserName()); + object.put("userPhoto", SDK.getPortalAPI().getUserPhoto(_uc, userModel.getUID())); + object.put("departmentName", DepartmentCache.getCache().get(userModel.getDepartmentId()).getName()); + object.put("userComment", model.getUserComment()); + object.put("commentDate", model.getCommentDate()); + List replyList = dao.getCommentList(repositoryId, model.getId(), null); + if (replyList != null) { + JSONArray replyArray = new JSONArray(); + for (PALCommentModel replyModel : replyList) { + JSONObject replyObject = new JSONObject(); + replyObject.put("userId", replyModel.getUserId()); + UserModel replyUserModel = UserCache.getCache().get(replyModel.getUserId()); + replyObject.put("userName", replyUserModel.getUserName()); + replyObject.put("userPhoto", SDK.getPortalAPI().getUserPhoto(_uc, replyUserModel.getUID())); + replyObject.put("userComment", replyModel.getUserComment()); + replyObject.put("commentDate", replyModel.getCommentDate()); + replyArray.add(replyObject); + } + object.put("replyNum", replyArray.size()); + object.put("replyArray", replyArray); + } else { + object.put("replyNum", 0); + } + result.add(object); + } + } + + ResponseObject ro = ResponseObject.newOkResponse(result.toString()); + return ro.toString(); + } + + /** + * 保存发布信息 + * + * @param comment 发布内容 + * @param wsId 资产库Id + * @param teamId 小组Id(可以为空) + * @param repositoryId (流程Id) + * @param pId 父信息Id(可以为空) + * @return + */ + public String savePALComment(String comment, String wsId, String teamId, String repositoryId, String pId, String openAppType) { + PALComment dao = new PALComment(); + PALRepositoryModel repositoryModel = PALRepositoryCache.getCache().get(repositoryId); + + String streamId = ""; + // 如果消息来自小组,将消息发送至工作网络 + if (teamId != null && !"".equals(teamId)) { + AppAPI appAPI = SDK.getAppAPI(); + if (appAPI.isActive("com.actionsoft.apps.network")) { + String aslp = ""; + Map params = new HashMap(); + params.put("sid", _uc.getSessionId()); + params.put("sourceAppId", "com.actionsoft.apps.coe.teamwork"); + if (pId != null && !"".equals(pId)) { // 回复消息 + aslp = "aslp://com.actionsoft.apps.network/replyStream"; + PALCommentModel palCommentModel = dao.queryById(pId); + params.put("message", comment); + params.put("streamId", palCommentModel.getStreamId()); + ResponseObject responseObject = appAPI.callASLP(appAPI.getAppContext("com.actionsoft.apps.coe.teamwork"), aslp, params); + if (responseObject != null) { + streamId = responseObject.get("streamCommentId") == null ? "" : responseObject.get("streamCommentId").toString(); + } + } else if (openAppType != null && !"".equals(openAppType) && !"0".equals(openAppType)) { // 创建消息 + aslp = "aslp://com.actionsoft.apps.network/createStream"; + params.put("message", "在流程 " + repositoryModel.getName() + " 中留言 " + comment); + params.put("teamId", teamId); + ResponseObject responseObject = appAPI.callASLP(appAPI.getAppContext("com.actionsoft.apps.coe.teamwork"), aslp, params); + if (responseObject != null) { + streamId = responseObject.get("streamId") == null ? "" : responseObject.get("streamId").toString(); + } + } + } + } + + // 保存至数据库中 + PALCommentModel model = new PALCommentModel(); + model.setId(UUIDGener.getUUID()); + model.setPId(pId == null ? "" : pId); + model.setStreamId(streamId); + if (wsId == null || "".equals(wsId)) { + wsId = PALRepositoryCache.getCache().get(repositoryId).getWsId(); + } + model.setWsId(wsId); + model.setTargetType(PALCommentConst.TARGET_TYPE_FILE); + model.setTargetId(repositoryId); + model.setTeamId(teamId == null ? "" : teamId); + model.setUserId(_uc.getUID()); + model.setUserComment(comment); + model.setCommentDate(new Timestamp(System.currentTimeMillis())); + if (openAppType == null || "".equals(openAppType)) { + model.setInfoType(PALCommentConst.INFO_TYPE_PRIVATE); + } else { + model.setInfoType(PALCommentConst.INFO_TYPE_PUBLIC); + } + + int n = dao.insert(model); + + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("userId", model.getUserId()); + object.put("userName", _uc.getUserName()); + object.put("departmentName", _uc.getDepartmentModel().getName()); + object.put("userPhoto", SDK.getPortalAPI().getUserPhoto(_uc, _uc.getUID())); + object.put("userComment", comment); + object.put("commentDate", model.getCommentDate()); + object.put("replyNum", 0); + ResponseObject ro = ResponseObject.newOkResponse(object.toString()); + if (n != 1) { + ro = ResponseObject.newErrResponse(); + } + + return ro.toString(); + } + + /** + * 新增自定义图形模板 + * + * @param schema + * @param methodId + * @param category + * @return + */ + public String saveCOEPALPLCustomSchema(String schema, String methodId, String category) { + ResponseObject ro = null; + + String filePath = null; + if (methodId.equals("process.epc")) { + filePath = AppsAPIManager.getInstance().getAppContext(PALMethodConst.APP_PROCESS_EPC).getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_SCHEMA_CUSTOM_CONFIG; + } else if (methodId.equals("process.flowchart")) { + filePath = AppsAPIManager.getInstance().getAppContext(PALMethodConst.APP_PROCESS_FLOWCHART).getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_SCHEMA_CUSTOM_CONFIG; + } else { + filePath = AppsAPIManager.getInstance().getAppContext(CoEConstant.APP_ID).getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_SCHEMA_CUSTOM_CONFIG; + } + UtilFile file = new UtilFile(filePath); + // 如果还没有定义过模板,新建文件 + if (!file.exists()) { + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + ro = ResponseObject.newErrResponse(); + return ro.toString(); + } + } + String oldSchemaString = file.readStrUTF8(); + if (oldSchemaString == null) { + oldSchemaString = ""; + } + StringBuilder oldSchema = new StringBuilder(oldSchemaString); + JSONObject schemaJson = JSONObject.parseObject(schema); + String name = schemaJson.getString("name"); + // 如果已经定义过该名称模板,将之前的删除 + if (oldSchemaString.indexOf("\"name\":\"" + name + "\"") > -1) { + oldSchemaString = oldSchemaString.replaceAll("\n\r", ""); + String[] schemas = oldSchemaString.split("Schema.addShape"); + String[] newSchemas = schemas; + for (int i = 0; i < schemas.length; i++) { + String o = schemas[i]; + if (o.indexOf("\"name\":\"" + name + "\"") > -1) { + newSchemas[i] = ""; + } + } + oldSchema = new StringBuilder(""); + for (int i = 0; i < newSchemas.length; i++) { + if (!"".equals(newSchemas[i])) { + oldSchema.append("Schema.addShape").append(newSchemas[i]).append("\n\r"); + } + } + + } + try { + // 写入新模板 + schema = schema.replaceAll("\\\\t\\\\n", "\t\n").replaceAll("\\\\", ""); + schema = "Schema.addShape(" + schema + ");\n\r"; + oldSchema.append(schema); + file.write(oldSchema.toString().getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + ro = ResponseObject.newErrResponse(); + return ro.toString(); + } + + // 更新缓存 + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelMap().get(methodId); + palMethodModel.setCustomSchema(oldSchema.toString()); + PALMethodCache.getPALMethodModelMap().put(methodId, palMethodModel); + + ro = ResponseObject.newOkResponse(oldSchema.toString()); + return ro.toString(); + } + + /** + * 删除自定义的模板 + * + * @param schemaName 图形名称 + * @param methodId 模型类型 + * @return + */ + public String removeCOEPALPLCustomSchema(String schemaName, String methodId) { + ResponseObject ro = null; + String filePath = null; + if (methodId.equals("process.epc")) { + filePath = AppsAPIManager.getInstance().getAppContext(PALMethodConst.APP_PROCESS_EPC).getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_SCHEMA_CUSTOM_CONFIG; + } else if (methodId.equals("process.flowchart")) { + filePath = AppsAPIManager.getInstance().getAppContext(PALMethodConst.APP_PROCESS_FLOWCHART).getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_SCHEMA_CUSTOM_CONFIG; + } else { + filePath = AppsAPIManager.getInstance().getAppContext(CoEConstant.APP_ID).getPath() + PALMethodConst.DIR_ROOT_CONFIG + methodId + "/" + PALMethodConst.FILE_SCHEMA_CUSTOM_CONFIG; + } + UtilFile file = new UtilFile(filePath); + // 如果没有文件,说明还没有自定义过模板 + if (!file.exists()) { + ro = ResponseObject.newErrResponse("0"); // 0:没有定义模板 + return ro.toString(); + } else { + // 如果已经定义过模板,判断是否包含该名称 + String oldSchemaString = file.readStrUTF8(); + if (oldSchemaString == null) { + oldSchemaString = ""; + } + // 如果已经定义过该模板,需将其删除 + if (oldSchemaString.indexOf("\"name\":\"" + schemaName + "\"") > -1) { + oldSchemaString = oldSchemaString.replaceAll("\n\r", ""); + String[] schemas = oldSchemaString.split("Schema.addShape"); + String[] newSchemas = schemas; + for (int i = 0; i < schemas.length; i++) { + String o = schemas[i]; + if (o.indexOf("\"name\":\"" + schemaName + "\"") > -1) { + newSchemas[i] = ""; + } + } + StringBuilder oldSchema = new StringBuilder(""); + for (int i = 0; i < newSchemas.length; i++) { + if (!"".equals(newSchemas[i])) { + oldSchema.append("Schema.addShape").append(newSchemas[i]).append("\n\r"); + } + } + + try { + // 重新写入文件 + file.write(oldSchema.toString().getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + // 重新加载缓存 + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelMap().get(methodId); + palMethodModel.setCustomSchema(oldSchema.toString()); + PALMethodCache.getPALMethodModelMap().put(methodId, palMethodModel); + + ro = ResponseObject.newOkResponse(); + return ro.toString(); + + } else { + ro = ResponseObject.newErrResponse("1"); // 1:没有定义该名称模板 + return ro.toString(); + } + + } + } + + /** + * 获取select类型的属性的options + * + * @param category + * @return + * @author zhangming + */ + public String getAttributeSelectOptions(String category) { + if (category != null && !"".equals(category)) { + category = category.replace("_", "."); + } else { + ResponseObject ro = ResponseObject.newErrResponse(); + return ro.toString(); + } + if (category.equalsIgnoreCase("bpmn")) { + category = "process.bpmn2"; + } + JSONObject result = new JSONObject(); + + List methodModelList = PALMethodCache.getPALMethodModelListByMethod(category.substring(0, category.indexOf("."))); + for (PALMethodModel methodModel : methodModelList) { + if (methodModel.getId().equals(category)) { + List attributeModels = methodModel.getAttributes(); + for (PALMethodAttributeModel attributeModel : attributeModels) { + if ("select".equals(attributeModel.getType()) || "select_m".equals(attributeModel.getType())) { + result.put(attributeModel.getKey(), attributeModel.getRef()); + } + } + } + } + + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data", result); + return ro.toString(); + } + + /** + * 检查流程的锁定用户 + * + * @param uuid + * @return + */ + public String getCheckoutInfo(String uuid) { + ResponseObject ro = ResponseObject.newOkResponse(); + CheckoutModel model = getCurrentCheckoutInfo(uuid); + String uid = model == null ? "" : model.getUser(); + ro.put("currentUserId", uid); + if (!UtilString.isEmpty(uid)) { + ro.put("currentUserName", SDK.getORGAPI().getUserNames(uid)); + } else { + ro.put("currentUserName", ""); + } + if (UtilString.isEmpty(uid) || _uc.getUID().equals(uid)) { + ro.put("isLocked", false); // 是否被其他人锁定 + } else { + ro.put("isLocked", true); + } + PALRepository dao = new PALRepository(); + PALRepositoryModel palmodel = dao.getInstance(uuid); + if (palmodel != null) { + String lockUser = palmodel.getLockUser(); + if (!UtilString.isEmpty(lockUser) && !lockUser.equals(_uc.getUID())) { + ro.put("isLocked", true); + } + } + return ro.toString(); + } + + /** + * 获取流程编辑权限 + * + * @param uuid + */ + protected void setCurrentCheckoutRight(String uuid, String uid) { + CheckoutModel checkoutModel = getCurrentCheckoutInfo(uuid); + if (checkoutModel == null) { + checkoutModel = new CheckoutModel(); + checkoutModel.setAppId(CoEConstant.APP_ID); + } + checkoutModel.setUser(_uc.getUID()); + checkoutModel.setIp(_uc.getSessionIp()); + checkoutModel.setTime(new Timestamp(System.currentTimeMillis())); + CheckoutCache.getCache().put(CoEConstant.APP_ID + "_" + "designer_" + uuid, checkoutModel); + } + + /** + * 查询当前的编辑用户 + * + * @param uuid + * @return + */ + protected CheckoutModel getCurrentCheckoutInfo(String uuid) { + return CheckoutCache.getValue(CoEConstant.APP_ID + "_" + "designer_" + uuid); + } + + /** + * 强制获取锁 + * + * @param uuid + * @return + */ + public String setCheckoutRight(String uuid) { + ResponseObject ro = ResponseObject.newOkResponse(); + // 如果流程被人为锁住,则放弃强制获取 + String lockUser = PALRepositoryCache.getCache().get(uuid).getLockUser(); + if (!UtilString.isEmpty(lockUser) && !_uc.getUID().equals(lockUser)) { + } else { + setCurrentCheckoutRight(uuid, _uc.getUID()); + } + return ro.toString(); + } + + /** + * 释放编辑权 + * + * @param uuid + * @return + */ + public String releaseCheckoutRight(String uuid) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryModel process = PALRepositoryCache.getCache().get(uuid); + if (process != null) { + List list = PALRepositoryCache.getByVersionId(process.getWsId(), process.getVersionId()); + for (PALRepositoryModel p : list) { + CheckoutModel model = getCurrentCheckoutInfo(p.getId()); + if (model != null && model.getUser().equals(_uc.getUID())) { + CheckoutCache.removeValue(CoEConstant.APP_ID + "_" + "designer_" + p.getId()); + } + } + } + + return ro.toString(); + } + + /** + * 修改流程节点名称/删除流程节点,修改关联表的数据 + * + * @param uuid + * @param shapeId + * @param shapeText + * @param type 1:修改;2:删除 + * @return + */ + public String updateShapeTextOrDeleteShape(String uuid, String shapeId, String shapeText, int type) { + ResponseObject ro = ResponseObject.newOkResponse(); + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + if (type == 1) { + dao.updateByShapeId(uuid, shapeId, shapeText); + dao.updateByRelationShapeId(uuid, shapeId, shapeText); + } else if (type == 2) { + String[] shapeIds = shapeId.split(","); + for (String id : shapeIds) { + if (!UtilString.isEmpty(id)) { + dao.deleteByShapeId(uuid, id); + } + } + } + return ro.toString(); + } + + /** + * 根据部门id,获取部门信息 + * + * @param deptIds + * @return + */ + public String getRelationShapDeptName(String deptIds) { + ResponseObject ro = ResponseObject.newOkResponse(); + if (UtilString.isEmpty(deptIds)) { + ro.put("deptObjs", new JSONObject()); + return ro.toString(); + } + JSONObject obj = new JSONObject(); + String[] deptIdArray = deptIds.split(" "); + for (int i = 0, len = deptIdArray.length; i < len; i++) { + String deptId = deptIdArray[i]; + DepartmentModel deptModel = SDK.getORGAPI().getDepartmentById(deptId); + obj.put(deptId, JSONObject.parseObject(JSON.toJSONString(deptModel))); + } + ro.put("deptObjs", obj); + return ro.toString(); + } + + /** + * 根据aws流程ID获取pal资产库流程ID + * + * @param newDefId + * @return + */ + public String getPLIdByAWSId(String newDefId) { + ResponseObject ro = ResponseObject.newOkResponse(); + // aws流程创建版本之后若创建成功之后切换最新流程的时候,会刷新流程列表,刷新时若缩略图文件不存在则报空指针异常,此处进行循环查询文件是否存在 + // 间隔0.2s,查询次数最多50次 + long timer = new Date().getTime(); + int count = 0; + while (true) { + if (new Date().getTime() > timer) { + timer += 200; + count++; + if (count > 50) { + break; + } + ProcessDefinition definition = ProcessDefCache.getInstance().get(newDefId); + String imageFilePath = BPMNFileUtil.getBPMNFileRealpath(definition.getAppId(), newDefId) + newDefId + BPMNFileConstant.IMG_SMALL_FILE_EXT_NAME; + UtilFile utilFile = new UtilFile(imageFilePath); + if (utilFile.readBytes() != null) { + break; + } + } + } + ro.put("plId", PALRepositoryQueryAPIManager.getInstance().queryPlIdByPlAwsId(newDefId)); + return ro.toString(); + } + + /** + * shape同名符号提示 + * + * @param uuid + * @param shapeId + * @param shapeText + * @return + */ + public String getShapeSameTexts(String uuid, String shapeId, String shapeText) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + String wsId = model.getWsId(); + Set ids = new HashSet<>(); + List list = PALRepositoryQueryAPIManager.getInstance().getRepositoryModelByWsid(wsId); + for (PALRepositoryModel m : list) { + if ("default".equals(m.getMethodId()) || m.getFilePath() == null || "".equals(m.getFilePath())) { + continue; + } + // 获取文件 + List> list2 = CoeDesignerUtil.getShapeMessageJson2(m.getId()); + if (list2 == null || list2.size() == 0) + continue; + for (Map map : list2) { + if (map != null) { + if ("lane".equals(map.get("category")) || ("process.flowchart".equals(map.get("category")) && "terminator".equals(map.get("type")) || ("process.bpmn2".equals(map.get("category")) && "startEvent".equals(map.get("type"))) || ("process.bpmn2".equals(map.get("category")) && "endEvent".equals(map.get("type"))))) + continue; + if (shapeText != null && !"".equals(shapeText) && shapeText.equals(map.get("text"))) { + ids.add((String) map.get("pid")); + } + } + } + } + if (ids.size() > 0) { + StringBuilder sb = new StringBuilder(); + // 获取路径和模型名称 + List pList = new ArrayList<>(); + for (String id : ids) { + pList.add(PALRepositoryCache.getCache().get(id)); + } + sb.append("
  • "); + for (PALRepositoryModel pModel : pList) { + sb.append("
      " + pModel.getName() + " V" + pModel.getVersion() + ".0
    "); + } + sb.append("
  • "); + ro.put("result", sb.toString()); + } + return ro.toString(); + } + + /** + * 平台与PAL是否存在共享状态 + * @param processDefId + * @return + */ + public String manageFactorJudgeCorrelateBpms(String processDefId) { + boolean checkCorrelate = false; + PALRepositoryQueryAPIManager queryManager = PALRepositoryQueryAPIManager.getInstance(); + String plid = queryManager.queryPlIdByPlAwsId(processDefId); + if( !UtilString.isEmpty(plid) ) { + PALRepository palRepository = new PALRepository(); + PALRepositoryModel plModel = palRepository.getInstance(plid); + if(plModel!=null) { + checkCorrelate = true; + } + } + if(checkCorrelate) { //共享 + ResponseObject ro = ResponseObject.newOkResponse("BPM和PAL有关联关系,["+processDefId+"]关联["+plid+"]"); + return ro.toString(); + } else { //不共享 + ResponseObject ro = ResponseObject.newErrResponse("BPM和PAL不存在关联关系"); + return ro.toString(); + } + } + + /******************************************新版门户流程详情start********************************************************/ + + /** + * 门户流程详情详情 + * @param rUUID 流程ID + * @param upVisit 记录访问量+1,true:记录 ;false:不记录 + * @param taskId 流程手册id + * @return + */ + public String getPortalDesignerHtml(String rUUID, boolean upVisit, String taskId) { + String processDefId = ""; + Map macroLibraries = new HashMap(); + macroLibraries.put("selectedElementId", ""); + macroLibraries.put("js", ""); + PALRepositoryModelImpl plModel = (PALRepositoryModelImpl) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(rUUID); + + if (plModel == null) { + return AlertWindow.getNotFoundMessagePage("未找到文件", "该文件已被删除"); + } + + macroLibraries.put("taskId", ""); + // 增加三员管理模式taskid为new,change判断 + if ("process".equals(plModel.getMethodCategory()) && !UtilString.isEmpty(taskId) && !"submit_create".equals(taskId) && !"new".equals(taskId) && !"change".equals(taskId)) { + macroLibraries.put("outputFileName", plModel.getName() + ".doc"); + macroLibraries.put("taskId", taskId); + // 压缩包名称 和 手册模板 + OutputTaskModel taskModel = new OutputTask().getTaskReportById(taskId); + // 压缩包名称 + macroLibraries.put("taskName", taskModel.getTaskName() + ".zip"); + OutputAppProfile appFile = OutputAppManager.getProfile(taskModel.getProfileId()); + // 手册模板(com.actionsoft.apps.coe.pal.output.pr) + macroLibraries.put("taskProfile", appFile.getAppContext().getId()); + } + + String type = CoeDesignerConstant.DESIGNER_DIFINITION_DEFAULT; + if (plModel.getMethodId() != null && plModel.getMethodId().indexOf(CoeDesignerConstant.DESIGNER_DIFINITION_BPMN) != -1) { + type = CoeDesignerConstant.DESIGNER_DIFINITION_BPMN; + } else { + type = CoeDesignerConstant.DESIGNER_DIFINITION_DEFAULT; + } + + boolean isCorrelateBpms = PALRepositoryQueryAPIManager.getInstance().isCorrelateBpms(plModel.getId(), true); + macroLibraries.put("isMarked", false); + //默认排序 + List defaultAttrSort; + if (CoeDesignerConstant.DESIGNER_DIFINITION_BPMN.equals(type)) { + // 删除与BPMS关联的无效关联关系 + CoeProcessLevelUtil.deleteInvalidCorrelate(plModel.getId()); + if (isCorrelateBpms) { + processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(plModel.getId(), true); + } else { + processDefId = ""; + } + getBpmnDesginerUI(plModel, macroLibraries, true, true); + defaultAttrSort = getBpmnParams(plModel, processDefId, macroLibraries); + macroLibraries.put("isMarked", CoeProcessLevelUtil.hasMarked(plModel.getId())); + } else { + getCoeDesginerUI(plModel, macroLibraries, true, true); + defaultAttrSort = getCoeParams(plModel, macroLibraries); + } + int state = 0;// 版本状态:设计、运行、停用 + if (isCorrelateBpms) { + ProcessDefinition definition = ProcessDefCache.getInstance().get(processDefId); + if (definition != null) { + state = definition.getVersionStatus(); + } + } + macroLibraries.put("BPMNSupport", AWSServerEngineConfiguration.getEngineBPMNSupport()); + macroLibraries.put("BPMNLevel0", AWSServerEngineConfiguration.getEngineBPMNLevel0()); + macroLibraries.put("BPMNLevel1", AWSServerEngineConfiguration.getEngineBPMNLevel1()); + macroLibraries.put("BPMNLevel2", AWSServerEngineConfiguration.getEngineBPMNLevel2()); + String userUrl = SDK.getPortalAPI().getUserPhoto(_uc, _uc.getUID()); + getMoreSharpe(plModel.getMethodId(), plModel.getId(), macroLibraries);// 获取更多图形 + macroLibraries.put("ver", 0); + macroLibraries.put("methodId", plModel.getMethodId()); + macroLibraries.put("sid", _uc.getSessionId()); + macroLibraries.put("wsId", plModel.getWsId()); + macroLibraries.put("uuid", rUUID);// definition的UUID + macroLibraries.put("parentChartId", plModel.getParentId()); + macroLibraries.put("uid", _uc.getUID()); + macroLibraries.put("userUrl", userUrl); + macroLibraries.put("userName", _uc.getUserModel().getUserName()); + macroLibraries.put("schema", getSchema(plModel.getId(), plModel.getMethodId(), PALMethodUtil.getCustom(plModel.getMethodId(), plModel.getId()))); + macroLibraries.put("sessionId", _uc.getSessionId()); + macroLibraries.put("fileName", ShapeUtil.replaceBlank(plModel.getName())); + macroLibraries.put("typeName", I18nRes.findValue(CoEConstant.APP_ID, plModel.getMethodCategory()) + "图"); + macroLibraries.put("openType", 0); + macroLibraries.put("teamId", ""); + macroLibraries.put("perms", "");// 该流程权限(w,d,v) + macroLibraries.put("filePerms", "");// 所有具有权限的流程Id + macroLibraries.put("isPublish", plModel.isPublish()); + CoeUserModel userModel = (CoeUserModel) CoeUserDaoFactory.createUser().getInstanceByUserId(_uc.getUID()); + boolean isAdmin = (userModel != null && (userModel.getIsAdmin() == 1)); + macroLibraries.put("isAdmin", isAdmin); + // 更多特性权限 + String moreAttrRight = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "MOREATTR_RIGHT");// 1普通用户有设置更多特性权限, + if ("2".equals(moreAttrRight)) {// 只有admin显示 + if ("admin".equals(_uc.getUID())) { + macroLibraries.put("moreAttrRight", true); + } else { + macroLibraries.put("moreAttrRight", false); + } + } else if ("0".equals(moreAttrRight)) {// 0只有管理员用户有权限 + if (isAdmin) {// 管理员用户 + macroLibraries.put("moreAttrRight", true); + } else{// 普通用户 + macroLibraries.put("moreAttrRight", false); + } + } else { + macroLibraries.put("moreAttrRight", true); + } + // 自动保存 + String isSysAutoSave = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "SYS_AUTOSAVE"); + macroLibraries.put("isAutoSave", isSysAutoSave); + macroLibraries.put("checkoutTip", ""); + macroLibraries.put("isView", true);// 是否只读打开 + + // 是否允许用户自定义模板,0:不允许;1:允许。 + AppAPI appApi = SDK.getAppAPI(); + String isCustomDefine = appApi.getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_CUSTOM_DEFINE_SCHEMA); + macroLibraries.put("isCustomDefine", isCustomDefine); + macroLibraries.put("openAppType", "0"); + + macroLibraries.put("editable", "0"); + + if (plModel.isPublish()) { + long viewCount = plModel.getViewCount(); + plModel.setViewCount(viewCount + 1); + PALRepository dao = new PALRepository(); + dao.update(plModel); + } + + getDesginerDefaultParams(macroLibraries);// 获取默认参数配置 + + macroLibraries.put("usersPhoto", ""); + macroLibraries.put("userNum", ""); + DesignerRelationShapeCacheManager relationShapeCache = DesignerRelationShapeCacheManager.getInstance(); + Map> shapeMap = relationShapeCache.getShapemap(); + boolean isExistCopy = false; + if (shapeMap.get(_uc.getUID()) != null) { + isExistCopy = true; + } + boolean isAppearCopy = true; + if (shapeMap.get(_uc.getUID()) != null && shapeMap.get(_uc.getUID()).get("shapeCopyContent") != null) { + isAppearCopy = false;// 默认为定义复制 + } + macroLibraries.put("isExistCopy", isExistCopy); + macroLibraries.put("isAppearCopy", isAppearCopy); + + macroLibraries.put("diagram", ""); + macroLibraries.put("state", state); + // DockBtnBar中的各功能是否显示 + macroLibraries.put("attributeView", ""); + macroLibraries.put("messageView", ""); + macroLibraries.put("printView", ""); + macroLibraries.put("publishView", ""); + + String riskStyle = "display:none;"; + // risk应用已下架 +// if (SDK.getAppAPI().isInstalled("com.actionsoft.apps.coe.pal.risk") && SDK.getAppAPI().isActive("com.actionsoft.apps.coe.pal.risk")) { +// riskStyle = ""; +// } +// if (plModel.getMethodId().equals("process.epc") || plModel.getMethodId().equals("process.bpmn2") || plModel.getMethodId().equals("process.flowchart")) { +// riskStyle = UtilString.isEmpty(riskStyle) ? "" : "display:none;"; +// } else { +// riskStyle = "display:none;"; +// } + macroLibraries.put("riskStyle", riskStyle); + String processOnIsInstall = "false"; + if (SDK.getAppAPI().isInstalled("com.actionsoft.apps.coe.pal.processon")) { + processOnIsInstall = "true"; + } + String processOnIsActive = "false"; + if (SDK.getAppAPI().isActive("com.actionsoft.apps.coe.pal.processon")) { + processOnIsActive = "true"; + } + macroLibraries.put("processOnIsInstall", processOnIsInstall); + macroLibraries.put("processOnIsActive", processOnIsActive); + + + JSONObject relationShapeIds = new JSONObject(); + JSONObject relationShapeModels = new JSONObject(); + List> elements = CoeDesignerUtil.getShapeMessageJson(plModel.getId()); + if (elements != null && elements.size() > 0) { + for (Map element : elements) { + String elementId = element.containsKey("id") ? element.get("id").toString() : ""; + if (!UtilString.isEmpty(elementId)) { + Iterator modelIterator = DesignerShapeRelationCache.getByShapeId(plModel.getId(), elementId); + if (modelIterator != null) { + while (modelIterator.hasNext()) { + DesignerShapeRelationModel shapeRelationModel = modelIterator.next(); + PALRepositoryModel relationPalModel = PALRepositoryCache.getCache().get(shapeRelationModel.getRelationFileId()); + if (relationPalModel != null) { + relationShapeIds.put(shapeRelationModel.getRelationShapeId(), shapeRelationModel); + relationShapeModels.put(shapeRelationModel.getShapeId() + "_" + shapeRelationModel.getAttrId(), shapeRelationModel.getRelationShapeText()); + } + } + } + } + } + } + macroLibraries.put("relationShapes", relationShapeIds); + macroLibraries.put("relationShapeModels", relationShapeModels); + + if (defaultAttrSort != null && defaultAttrSort.size() > 0) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < defaultAttrSort.size(); i++) { + if (i == defaultAttrSort.size() - 1) { + sb.append(defaultAttrSort.get(i)); + } else { + sb.append(defaultAttrSort.get(i) + "|"); + } + } + macroLibraries.put("defaultAttrSort", sb.toString()); + } else { + macroLibraries.put("defaultAttrSort", ""); + } + macroLibraries.put("importShapeStyle", "display:none"); + StringBuilder sb = new StringBuilder(); + Set ids = new HashSet<>(); + sb.append(plModel.getName()); + ids.add(plModel.getId()); + getFilePath(sb, ids, (PALRepositoryModel)plModel); + macroLibraries.put("toolbarName", sb.toString()); + + List shapeIds = new ArrayList<>();// 当前流程所有节点 + List> shapeList = CoeDesignerUtil.getShapeMessageJson2(rUUID);//获取所有节点 + if (shapeList != null && shapeList.size() > 0) { + for (Map map : shapeList) { + shapeIds.add((String)map.get("id")); + } + } + + getPalProcessLinkTag(plModel, macroLibraries); + /********************附件************************/ + // 文件或节点自身附件 + com.alibaba.fastjson.JSONObject upFileObject = new com.alibaba.fastjson.JSONObject(); + upFileObject.put("file", new JSONArray()); + for (String shape : shapeIds) { + upFileObject.put(shape, new JSONArray()); + } + UpFileDao upFileDao = new UpFileDao(); + StringBuilder sqlWhere = new StringBuilder(); + sqlWhere.append(" and PALREPOSITORYID ='").append(rUUID).append("'"); + List fileList = upFileDao.search(sqlWhere.toString()); + + //三员管理下,过滤当前用户与文件密级显示 + if(HighSecurityUtil.isON()){ + macroLibraries.put("isHighSecurity", true); + PALRepositoryQueryAPIManager.getInstance().upFileSecurityFilter(this._uc,fileList); + } + if (fileList != null && fileList.size() > 0) { + for (UpfileModel upfileModel : fileList) { + com.alibaba.fastjson.JSONObject object = new com.alibaba.fastjson.JSONObject(); + object.put("id", upfileModel.getUuid()); + object.put("name", upfileModel.getFileName()); + object.put("type", "self"); + if ("f".equals(upfileModel.getType())) { + upFileObject.getJSONArray("file").add(object); + } + if ("s".equals(upfileModel.getType())) { + if (upFileObject.getJSONArray(upfileModel.getShape_uuid()) == null) { + continue; + } + + upFileObject.getJSONArray(upfileModel.getShape_uuid()).add(object); + } + } + } + + // 文件或节点的关联节点的附件 + //查询流程和节点附件 + List relationList = null; + // 查询关联的节点 + DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); + relationList = relationDao.getModelListByFileId(rUUID); + + //关联文件list + List relationUpfFileList = new ArrayList<>(); + if (relationList != null && relationList.size() > 0) { + for (int i = 0; i < relationList.size(); i++) { + DesignerShapeRelationModel model = relationList.get(i); + if (UtilString.isEmpty(model.getRelationShapeId())) {// 关联的模型文件 + List files = upFileDao.search(model.getRelationFileId(), null, "file"); + relationUpfFileList.addAll(files); + }else { + //关联的图形文件 + List files = upFileDao.search(model.getRelationFileId(), model.getRelationShapeId(), null); + relationUpfFileList.addAll(files); + } + } + } + + if (relationUpfFileList != null && relationUpfFileList.size() > 0) { + //三员管理,过滤关联文件密级显示 + if(HighSecurityUtil.isON()){ + PALRepositoryQueryAPIManager.getInstance().upFileSecurityFilter(this._uc,relationUpfFileList); + } + for (UpfileModel relationUpFile : relationUpfFileList) { + com.alibaba.fastjson.JSONObject object = new com.alibaba.fastjson.JSONObject(); + object.put("id", relationUpFile.getUuid()); + object.put("name", relationUpFile.getFileName()); + object.put("type", "relation"); + upFileObject.getJSONArray("file").add(object);// 文件 + } + } + macroLibraries.put("upfileData", upFileObject); + /********************附件************************/ + /********************步骤说明************************/ + // 获取所有关联属性 + JSONObject relationShapes = new JSONObject(); + if (shapeList != null && shapeList.size() > 0) { + for (Map map : shapeList) { + String shapeId1 = (String)map.get("id"); + relationShapes.put(shapeId1, new JSONObject()); + String shapeName = (String) map.get("type"); + String shapeCategory = (String) map.get("category"); + String shapeMethod = shapeCategory.replace("_", "."); + List attributeModelList = CoeDesignerShapeAPIManager.getInstance().getValidAttributeModels(plModel.getWsId(), shapeMethod, shapeName, plModel.getMethodId()); + Map refMap = new HashMap(); + Map attrTypeMap = new HashMap<>(); + for (PALMethodAttributeModel model : attributeModelList) { + if (!model.getUse()) { + continue; + } + if ("relation".equals(model.getType()) || "awsorg".equals(model.getType())) { + refMap.put(model.getKey(), JSON.parseObject(model.getRef())); + } + attrTypeMap.put(model.getKey(), model.getType()); + } + List list = new DesignerShapeRelationDao().getModelListByShapeIdAndRelationShapeId(plModel.getId(), shapeId1, null, null); + List modelList = new ArrayList<>(); + for (DesignerShapeRelationModel model : list) { + String attrId = model.getAttrId(); + if (attrTypeMap.containsKey(attrId)) { + if ("relation".equals(attrTypeMap.get(attrId))) { + if (refMap.containsKey(attrId)) { + String relationType = refMap.get(attrId).getString("type"); + if ("file".equals(relationType)) {// 关联的文件 + List list2 = PALRepositoryCache.getByVersionId(plModel.getWsId(), model.getRelationFileId()); + for (PALRepositoryModel model2 : list2) { + if (model2.isUse()) { + model.setRelationShapeText(model2.getName()); + model.setRelationFileId(model2.getId()); + break; + } + } + modelList.add(model); + } else { + modelList.add(model); + } + } + } else if ("awsorg".equals(attrTypeMap.get(attrId))) { + JSONObject object = JSONObject.parseObject(model.getRelationShapeText()); + String id = object.getString("id"); + HashSet keys = new HashSet<>(); + if (!keys.contains(id)) { + // 查询最新名称 + if ("department".equals(object.getString("type"))) { + DepartmentModel dept = SDK.getORGAPI().getDepartmentById(object.getString("id")); + if (dept == null) continue; + object.put("name", dept.getName()); + } + if ("position".equals(object.getString("type"))) { + RoleModel roleModel = SDK.getORGAPI().getRoleById(object.getString("id")); + if (roleModel == null) continue; + object.put("name", roleModel.getName()); + } + if ("user".equals(object.getString("type"))) { + UserModel user = SDK.getORGAPI().getUser(object.getString("id")); + if (user == null) continue; + object.put("name", user.getUserName()); + } + if ("role".equals(object.getString("type"))) { + RoleModel roleModel = SDK.getORGAPI().getRoleById(object.getString("id")); + if (roleModel == null) continue; + object.put("name", roleModel.getName()); + } + modelList.add(model); + keys.add(id); + } + } + + } + + } + // 去重 + List tempList = new ArrayList(); + Set keys = new HashSet<>(); + for (DesignerShapeRelationModel model : modelList) { + String key = model.getFileId() + model.getShapeId() + model.getAttrId() + model.getRelationFileId() + model.getRelationShapeId() + model.getRelationShapeText(); + if (!keys.contains(key)) { + tempList.add(model); + keys.add(key); + } + } + modelList = tempList; + modelList.sort((m1, m2) -> {return m1.getId().compareTo(m2.getId());}); + for (DesignerShapeRelationModel model : modelList) { + if (attrTypeMap.containsKey(model.getAttrId())) { + if ("relation".equals(attrTypeMap.get(model.getAttrId()))) { + if (relationShapes.getJSONObject(shapeId1).containsKey(model.getAttrId())) { + relationShapes.getJSONObject(shapeId1).put(model.getAttrId(), relationShapes.getJSONObject(shapeId1).getString(model.getAttrId()) + "," + model.getRelationShapeText()); + } else { + relationShapes.getJSONObject(shapeId1).put(model.getAttrId(), model.getRelationShapeText()); + } + } else if ("awsorg".equals(attrTypeMap.get(model.getAttrId()))) { + if (relationShapes.getJSONObject(shapeId1).containsKey(model.getAttrId())) { + relationShapes.getJSONObject(shapeId1).put(model.getAttrId(), relationShapes.getJSONObject(shapeId1).getString(model.getAttrId()) + "," + JSONObject.parseObject(model.getRelationShapeText()).getString("name")); + } else { + relationShapes.getJSONObject(shapeId1).put(model.getAttrId(), JSONObject.parseObject(model.getRelationShapeText()).getString("name")); + } + } + } + } + } + } + macroLibraries.put("relationShapesData", relationShapes); + /********************步骤说明************************/ + /********************描述************************/ + // 自定义属性 + JSONObject object = CoeProcessLevelUtil.getProcessLevelPropertyVal(plModel.getId()); + macroLibraries.put("processDesc", object); + if (upVisit) { + PALRepositoryQueryAPIManager.getInstance().UpDatePublishCount(plModel); + } + /********************描述************************/ + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.designer.view.portal.html", macroLibraries); + } + + /** + * 根据method获取当前文件所定义的自定义属性 + * @param model + */ + public List getFileAttrListByMethod(PALRepositoryModel model) { + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(model.getMethodId()); + if(palMethodModel == null) { + return null; + } + List attributes = palMethodModel.getAttributes(); + List tempList = new ArrayList<>(); + if (attributes != null) { + for (PALMethodAttributeModel attributeModel : attributes) { + String scope = attributeModel.getScope(); + if ("%".equals(scope) || scope.contains("%")) { + PALRepositoryAttributeModel attrModel = PALRepositoryAttributeCache.getAttributeByMethodIdAndAttrId(model.getWsId(), model.getMethodId(), attributeModel.getKey()); + if (attrModel != null && "0".equals(attrModel.getIsDelete())) { + tempList.add(attributeModel); + } + } + } + } + return tempList; + } + + /** + * 更多属性 + * + * @param uuid + * @return + */ + public List getMoreAttr(String uuid) { + if ("0".equals(uuid)) { + return null; + } + if (uuid != null && !"".equals(uuid)) { + PALRepositoryModel m = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(m.getMethodId()); + if (palMethodModel == null) { + return null; + } + List group = palMethodModel.getGroup(); + List parentList = new ArrayList<>(); + if (group != null) { + for (PALMethodAttributeGroupModel groupModel : group) { + parentList.add(groupModel.getName()); + } + } + List attributes = palMethodModel.getAttributes(); + List result = new ArrayList<>(); + if (attributes != null) { + for (int i = 0; i < parentList.size(); i++) { + String parent = parentList.get(i); + result.add(parent); + for (PALMethodAttributeModel AttributeModel : attributes) { + if (parentList.get(i).equals(AttributeModel.getGroupPath())) { + result.add(AttributeModel.getKey()); + } + } + } + } + return result; + } + return null; + } + + private void getFilePath(StringBuilder sb, Set ids, PALRepositoryModel plModel) { + if (plModel.getParentId().length() >= 36) { + PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(plModel.getParentId()); + if (parentModel == null) { + parentModel = PALRepositoryCache.getCache().get(plModel.getVersionId()); + } + if (parentModel != null && !ids.contains(parentModel.getId()) && !ids.contains(parentModel.getVersionId())) { + sb.insert(0, parentModel.getName() + ">"); + ids.add(parentModel.getId()); + getFilePath(sb, ids, parentModel); + } + } + } + + /** + * 门户打开之前的校验 + * 对已发布的流程只能打开 + * @param uuid + * @return + */ + public String getDesignerViewerPortalLinkPerm(String uuid) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + String status = "ok"; + if (model == null) { + status = "notFound"; + } else if (!model.isPublish()) { + status = "notPublish"; + } else { + // 判断是否有查看权限 + String isIntegrationAWSUser = SDK.getAppAPI().getProperty("com.actionsoft.apps.coe.pal.publisher", "isIntegrationAWSUser"); //是否整合AWS用户 + String roleId = ""; + if ("false".equals(isIntegrationAWSUser)) { + roleId = PublishConst.GUESTROLE; + } else { + roleId = _uc.getRoleModel().getId(); + } + PALRepository dao = new PALRepository(); + Set idSet = dao.getRepositoryVersionIdListByPublishRole(roleId, "'" + model.getWsId() + "'", null); + if (!idSet.contains(model.getVersionId())) { + status = "noPerm"; + } + } + ro.put("data", status); + return ro.toString(); + } + + /******************************************新版门户流程详情end********************************************************/ + + //获取excel数据的内部类 + private class ExcelData { + public String TARGET_METHOD_SCOPE = "process.bpmn2,process.epc,process.flowchart"; + public String PROCESS_STEP = "userTask,serviceTask,manualTask,receiveTask,sendTask,scriptTask,businessRuleTask,callActivityCallingProcess,method,process,predefinedProcess,decision"; + public JSONArray getExcelData(String uuid) { + PALRepositoryModel repositoryModel = PALRepositoryCache.getCache().get(uuid); + List> repositoryFileElements = CoeDesignerUtil.getShapeMessageJson(uuid); //流程文件内容 + OutputWordUtil.orderByNumber(repositoryFileElements); + JSONArray repositoryShapeTable = new JSONArray(); + + if (repositoryFileElements != null) { + int index = 1;// 流程步骤序号 + for (Map shape : repositoryFileElements) { + //如果图形元素不是流程步骤,不导出该元素 + if (PROCESS_STEP.indexOf((String)shape.get("type")) == -1) { + continue; + } + JSONObject _tr = new JSONObject(); + OutputWordUtil.setShapeDefaultValue2(uuid, _tr); //设置默认值 + _tr.put(OutputWordUtil.SERIAL_NUMBER, index); //序号 + _tr.put(OutputWordUtil.REPOSITORY_NAME, repositoryModel.getName()); //流程名称 + _tr.put(OutputWordUtil.SHAPE_NAME, shape.get("text")); //步骤名称 + + JSONObject dataAttributes = (JSONObject) shape.get("attributes"); + if (dataAttributes != null) { + _tr.put(OutputWordUtil.SHAPE_DESC, (OutputWordUtil.specialCharTransfer((String)dataAttributes.get("shapeDesc"))).replace("\n", OutputWordUtil.WRAPSTRING)); //工作详细描述 + JSONArray dataAttributesJsonArray = dataAttributes.getJSONArray("attributesJsonArray"); + Map shapeModelMap = OutputWordUtil.getShapeRelationMap(uuid, (String) shape.get("id")); + for (int i = 0; i < dataAttributesJsonArray.size(); i++) { + JSONObject dataAttribute = dataAttributesJsonArray.getJSONObject(i); + if (dataAttribute != null && dataAttribute.containsKey("value")) { + //获取关联属性的属性值 + OutputWordUtil.setShapeValue2(_tr, dataAttribute, shapeModelMap); + } + } + } + + repositoryShapeTable.add(_tr); + index++; + } + } + return repositoryShapeTable; + } + } + + /** + * 设计器-查询版本相关数据 + * @param wsId + * @param teamId + * @param id + * @return + */ + public String getPalProcessLevelVersionData(String wsId, String teamId, String id) { + if (UtilString.isEmpty(id) || PALRepositoryCache.getCache().get(id) == null) { + return ResponseObject.newErrResponse("文件不存在").toString(); + } + ResponseObject ro = ResponseObject.newOkResponse(); + CoeCooperationAPIManager.getInstance().queryCooperationMemberActionPerm(teamId, _uc.getUID(), ro); + ro.put("isCorrelatebpms", false); + ro.put("processDefId", ""); + boolean isCorrelateBpms = PALRepositoryQueryAPIManager.getInstance().isCorrelateBpms(id, true); + if (isCorrelateBpms) {// 与bpm平台关联流程 + String processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(id, true); + ro.put("isCorrelatebpms", true); + ro.put("processDefId", processDefId); + String appId = ProcessDefCache.getInstance().get(processDefId).getAppId(); + List versionList = ProcessDefCache.getInstance().getListOfProcessVersion(appId, processDefId); + ProcessDefCache.getInstance().sortByCreateTimeDesc(versionList); + boolean isPalManage = CoeProcessLevelUtil.isPalManage(); + ro.put("isPalManage", isPalManage); + JSONArray array = new JSONArray(); + for (ProcessDefinition processDefinition : versionList) { + String plId = PALRepositoryQueryAPIManager.getInstance().queryPlIdByPlAwsId(processDefinition.getId()); + if (UtilString.isEmpty(plId)) { + continue; + } + JSONObject obj = new JSONObject(); + String versionStatus = ""; + String color = "#4E7FF9"; + int versionState = processDefinition.getVersionStatus(); + if (versionState == ProcessDefinitionConst.VERSION_STATUS_CLOSED) { + versionStatus = ProcessDefVersionUtil.getVersionName(ProcessDefinitionConst.VERSION_STATUS_CLOSED); + color = "#D9001B"; + } else if (versionState == ProcessDefinitionConst.VERSION_STATUS_DESIGN) { + versionStatus = ProcessDefVersionUtil.getVersionName(ProcessDefinitionConst.VERSION_STATUS_DESIGN); + } else if (versionState == ProcessDefinitionConst.VERSION_STATUS_RELEASE) { + versionStatus = ProcessDefVersionUtil.getVersionName(ProcessDefinitionConst.VERSION_STATUS_RELEASE); + color = "#1AA477"; + } + obj.put("versionNo", VersionUtil.getVersionStrV(processDefinition.getVersionNo())); + obj.put("name", processDefinition.getName()); + obj.put("createUser", SDK.getORGAPI().getUser(processDefinition.getCreateUser()) == null ? processDefinition.getCreateUser() : SDK.getORGAPI().getUser(processDefinition.getCreateUser()).getUserName()); + obj.put("createDate", UtilDate.dateFormat(processDefinition.getCreateTime())); + obj.put("bpmState", I18nRes.findValue(AppsConst.SYS_APP_PLATFORM, versionStatus)); + obj.put("bpmStateCode", versionStatus); + obj.put("bpmStateColor", color); + PALRepositoryModel m = PALRepositoryCache.getCache().get(plId); + obj.put("isUse", m.isUse()); + obj.put("isPublish", m.isPublish()); + obj.put("isStop", m.isStop()); + obj.put("isApproval", m.isApproval()); + obj.put("id", m.getId()); + obj.put("awsId", processDefinition.getId()); + obj.put("isFirst", processDefinition.getId().equals(processDefinition.getVersionId())); + obj.put("versionStatus", processDefinition.getVersionStatus()); + obj.put("isCorrelate", false); + CoeProcessLevelCorrelateModel correlateModel = CoeProcessLevelCorrelateCache.getCache().get(m.getId()); + if (isPalManage) { + if (correlateModel != null && "show".equals(correlateModel.getExt1()) && correlateModel.getCorrelateType() == 1) { + obj.put("isCorrelate", true); + } + } + array.add(obj); + } + ro.put("tableData", array); + return ro.toString(); + } else {// pal自身文件 + PALRepositoryModel model = PALRepositoryCache.getCache().get(id); + List versions = PALRepositoryCache.getByVersionId(model.getVersionId()); + Collections.sort(versions, new Comparator() { + @Override + public int compare(PALRepositoryModel o1, PALRepositoryModel o2) { + return VersionUtil.compareVersionNo(o1.getVersion(),o2.getVersion(),true); + } + }); + JSONArray array = new JSONArray(); + for (PALRepositoryModel m : versions) { + if (m != null) { + JSONObject obj = new JSONObject(); + obj.put("id", m.getId()); + obj.put("isUse", m.isUse()); + obj.put("isPublish", m.isPublish()); + obj.put("isStop", m.isStop()); + obj.put("isApproval", m.isApproval()); + obj.put("versionNo", VersionUtil.getVersionStrV(m.getVersion())); + obj.put("name", m.getName()); + obj.put("createUser", SDK.getORGAPI().getUser(m.getCreateUser()) == null ? m.getCreateUser() : SDK.getORGAPI().getUser(m.getCreateUser()).getUserName()); + obj.put("createDate", UtilDate.dateFormat(m.getCreateDate())); + array.add(obj); + } + } + ro.put("tableData", array); + return ro.toString(); + } + } + + /** + * 设计器-创建新版本 + * @param wsId + * @param teamId + * @param id + * @return + */ + public String createPalDesignerNewVersion(String wsId, String teamId, String id,boolean isLargeIteration) { + ResponseObject ro = null; + boolean isCorrelateBpms = PALRepositoryQueryAPIManager.getInstance().isCorrelateBpms(id, true); + if (isCorrelateBpms) { + String processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(id, true); + ProcessDefinition processDefinition = ProcessDefCache.getInstance().get(processDefId); + ResponseObject responseObject = ResponseObject.newOkResponse(); + + ProcessBPMNDesignerWeb web = new ProcessBPMNDesignerWeb(_uc); + String appId = processDefinition.getAppId(); + String operateType = "newversion|"+ processDefinition.getVersionId() +"|" + processDefinition.getVersionNo(); + JSONObject defineRo = JSONObject.parseObject(web.getDefine(appId, processDefId, operateType, 0)); + if (!"ok".equals(defineRo.getString("result"))) { + return ResponseObject.newWarnResponse("创建失败," + defineRo.getString("msg")).toString(); + } + JSONObject define = defineRo.getJSONObject("data"); + JSONObject savePalNewVerRo = JSONObject.parseObject(definitionOfBpmnSave(id, 0, appId, processDefId, operateType, define.toString(), "")); + if (!"ok".equals(savePalNewVerRo.getString("result"))) { + return ResponseObject.newWarnResponse("创建失败," + savePalNewVerRo.getString("msg")).toString(); + } + JSONObject defData = savePalNewVerRo.getJSONObject("data"); + String newDefId = defData.getString("processDefId"); + JSONObject plIdRo = JSONObject.parseObject(getPLIdByAWSId(newDefId)); + if (!"ok".equals(plIdRo.getString("result"))) { + return ResponseObject.newWarnResponse("创建失败," + plIdRo.getString("msg")).toString(); + } + String plId = plIdRo.getJSONObject("data").getString("plId"); + ro = ResponseObject.newOkResponse("创建成功"); + ro.put("uuid", plId); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_REPOSITORY_NEW_VERSION_CREATE); + } + return ro.toString(); + } + double tempVer = 0;// 版本号 + String srcPath = "";// 源文件路径 + String targetPath = "";// 目标文件路径 + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + PALRepositoryModelImpl lastplModel = (PALRepositoryModelImpl) coeProcessLevel.getInstance(id); + final String oldUUID = lastplModel.getId(); + lastplModel.setId(UUIDGener.getUUID()); + final String newUUID = lastplModel.getId(); + //大小版本号处理 + tempVer = isLargeIteration ? coeProcessLevel.getMaxVersionNum(lastplModel.getVersionId(), lastplModel.getVersion()) : coeProcessLevel.getMaxVersionNum(lastplModel.getVersionId(),lastplModel.getVersion()); + lastplModel.setHistoryMaxVersion("0"); + lastplModel.setVersion(VersionUtil.increaseVersionNo(tempVer,isLargeIteration)); + lastplModel.setUse(false); + srcPath = lastplModel.getFilePath(); + if (!"".equals(srcPath) && srcPath != null) { + targetPath = srcPath.replace(id, lastplModel.getId()); + } + lastplModel.setFilePath(targetPath); + lastplModel.setPublish(false); + lastplModel.setStop(false); + lastplModel.setApproval(false); + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + String uid = super.getContext().getUID(); + lastplModel.setCreateUser(uid); + lastplModel.setCreateDate(nowTime); + lastplModel.setModifyUser(uid); + lastplModel.setModifyDate(nowTime); + //密级 + lastplModel.setSecurityLevel(-1); + int store = 0; + try { + store = CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(lastplModel); + } catch (Exception e) { + e.printStackTrace(); + ro = ResponseObject.newWarnResponse("创建失败," + e.getMessage()); + return ro.toString(); + } + if (store == 1) { + // 修改设计器文件 + CoeFile fileUtil = new CoeFile(); + fileUtil.copyDefaultVersion(srcPath, id, targetPath, lastplModel.getId()); + // 获取新旧节点关联关系 + final Map mapNewUUID = createShapeIdRelation(PALRepositoryCache.getCache().get(oldUUID), false); + // 处理流程属性 + String property = CoePropertyUtil.getPropertyValue(oldUUID + "_attr"); + if (!UtilString.isEmpty(property)) { + CoePropertyUtil.createProperty(newUUID + "_attr", property); + } + CoeProcessLevelUtil.copyRepositoryProperty(PALRepositoryCache.getCache().get(oldUUID), PALRepositoryCache.getCache().get(newUUID), mapNewUUID, _uc); + ro = ResponseObject.newOkResponse("创建成功"); + ro.put("uuid", lastplModel.getId()); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_REPOSITORY_NEW_VERSION_CREATE); + } + } else { + ro = ResponseObject.newWarnResponse("创建失败"); + } + return ro.toString(); + } + + /** + * 设计器-删除某版本文件(放入回收站) + * @param wsId + * @param teamId + * @param id 模型文件id + * @return + */ + public String deletePalDesignerVersion(String wsId, String teamId, String id) { + ResponseObject ro; + PALRepositoryModel plModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(id); + List list = new ArrayList(); + list.add(plModel); + CoeProcessRecycleWeb recycleWeb = new CoeProcessRecycleWeb(_uc); + boolean insertFlag = recycleWeb.saveRecycleProcesses(plModel, list); // 流程信息存入回收站 + + if (insertFlag) { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().deletePalRepositoryVersion(id); + CoeProcessLevelNoCache.getInstance().reloadInBackground(plModel.getWsId()); // 重新装载编号 + ro = ResponseObject.newOkResponse(); + ro.msg("已放入回收站"); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_REPOSITORY_VERSION_DELETE); + } + } else { + ro = ResponseObject.newErrResponse(); + ro.msg("删除失败"); + } + return ro.toString(); + } + + /** + * 设计器-切换版本状态为使用中 + * @param wsId + * @param teamId + * @param id + * @return + */ + public String changePalDesignerVersionUse(String wsId, String teamId, String id) { + int answer = 0; + PALRepository repository = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + PALRepositoryModel lastPlModel = (PALRepositoryModel) repository.getInstance(id); + answer = repository.updateStateOfVersionUuid(lastPlModel.getVersionId());// 更新所有的为0 + answer = repository.updateUseStateOfVersionUuid(lastPlModel.getId());// 更新当前版本为使用状态 + CoeProcessLevelNoCache.getInstance().reloadInBackground(lastPlModel.getWsId()); + if (answer > 0) { + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("id", id); + return ro.toString(); + } else { + return ResponseObject.newErrResponse("使用版本更新失败").toString(); + } + } + + // 生成更多特性的json串 + public String getMoreAttritbute(UserContext me, String type, String wsId, String uuid, String processDefId, String shapeName, String category, String defaultCategory) { + if (UtilString.isEmpty(category)) { + throw new AWSException("获取更多特性失败,category不允许为空"); + } + category = category.replace("_", "."); + if (category.equalsIgnoreCase("bpmn")) { + category = "process.bpmn2"; + } + if (shapeName.indexOf("_custom") > -1) { + shapeName = shapeName.substring(0, shapeName.indexOf("_")); + } + //对于泳道的处理(获取判断下面树数据的条件) + String tmpMethodId = ""; + if (StringUtils.isNotEmpty(uuid)) { + PALRepositoryModel tmpModel = PALRepositoryCache.getCache().get(uuid); + tmpMethodId = tmpModel.getMethodId(); + } + + List methodList = PALMethodCache.getPALMethodList(); + List> list = new ArrayList>(); + Set setGroup = new HashSet(); + Set setAttributes = new HashSet(); + for (String methodTemp : methodList) { + List methodIdList = PALMethodCache.getPALMethodModelListByMethod(methodTemp); + for (PALMethodModel methodObj : methodIdList) { + // if (tmpMethodId.equals(methodObj.getId())) { + if (category.equals(methodObj.getId()) || (category.equals("lane") && tmpMethodId.equals(methodObj.getId()))) { // update by sunlh 20200721 + String methodId = methodObj.getId(); + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(methodId); + List group = palMethodModel.getGroup(); + Map groupMap = new HashMap(); + int count = 0; + if (group != null) { + for (PALMethodAttributeGroupModel groupModel : group) { + groupMap.put(groupModel.getName(), groupModel); + Map map = new HashMap(); + map.put("id", groupModel.getName()); + map.put("name", groupModel.getDesc()); + map.put("open", false); + map.put("iconFont", ""); + String parentName = groupModel.getParentName(); + if (parentName != null && !"".equals(parentName.trim())) { + map.put("pid", parentName); + } + if (count == 0) { + map.put("open", true); + } + count++; + setGroup.add(groupModel.getName()); + list.add(map); + } + } + //获取最新的属性设置 + CoeDesignerShapeAPIManager manager = CoeDesignerShapeAPIManager.getInstance(); + List attrLists = manager.getAllValidShapeAttributeModels(wsId, methodId); + + if (attrLists != null) { + for (PALMethodAttributeModel attributeModel : attrLists) { + //替换新名称 + String title = attributeModel.getNewTitle(); + String groupPath = attributeModel.getGroupPath(); + PALMethodAttributeGroupModel gm = groupMap.get(groupPath); + Map map = new HashMap(); + String scope = attributeModel.getScope(); + if (scope.contains(shapeName)) { + // 对属性的在图形上的作用域进行过虑 + map.put("id", attributeModel.getKey()); + map.put("name", title); + // map.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/icon/shape_attribute.png"); + map.put("iconFont", ""); + map.put("pid", gm.getName()); + map.put("key", attributeModel.getKey()); + map.put("value", attributeModel.getValue()); + map.put("type", attributeModel.getType()); + map.put("ref", attributeModel.getRef()); + map.put("readonly", attributeModel.getReadonly()); + map.put("groupPath", attributeModel.getGroupPath()); + map.put("scope", attributeModel.getScope()); + setAttributes.add(gm.getName()); + list.add(map); + } else if ("*".equals(scope) || scope.contains("*")) { + map.put("id", attributeModel.getKey()); + map.put("name", title); + // map.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/icon/shape_attribute.png"); + map.put("iconFont", ""); + map.put("pid", gm.getName()); + map.put("key", attributeModel.getKey()); + map.put("value", attributeModel.getValue()); + map.put("type", attributeModel.getType()); + map.put("ref", attributeModel.getRef()); + map.put("readonly", attributeModel.getReadonly()); + map.put("groupPath", attributeModel.getGroupPath()); + map.put("scope", attributeModel.getScope()); + setAttributes.add(gm.getName()); + list.add(map); + } + + } + } + + } + } + } + setGroup.removeAll(setAttributes); + List> list1 = new ArrayList>(); + for (int i = 0, size = list.size(); i < size; i++) { + if (!setGroup.contains(list.get(i).get("id"))) { + list1.add(list.get(i)); + } + } + //通过LANE_FORCE_REFRESH_SHAPE_ATTR_SCOPE参数来控制树数据显示 + if (category.equals("lane")) { + String[] attrScopes = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "LANE_FORCE_REFRESH_SHAPE_ATTR_SCOPE").split(","); + if (attrScopes != null && attrScopes.length > 0 && list1 != null && list1.size() > 0) { + List> list2 = Lists.newArrayList(); + List> list3 = Lists.newArrayList(); + Set pids = Sets.newHashSet(); + for (Map map : list1) { + String object = (String)map.get("key"); + if (object != null) { + for (String key : attrScopes) { + if (object.equals(key)) { + pids.add((String)map.get("pid")); + list3.add(map); + } + } + } + } + if (pids != null && pids.size() > 0) { + for (String pid : pids) { + for (Map map : list1) { + if (map.get("id").equals(pid)) { + list2.add(map); + } + } + } + } + list2.addAll(list3); + list1 = list2; + } + } + + Map macroLibraries = new HashMap(); + JSONArray jsonarray = JSONArray.parseArray(JSON.toJSONString(list1)); + macroLibraries.put("sid", _uc.getSessionId()); + macroLibraries.put("data", jsonarray); + macroLibraries.put("attrType", "1"); + String template = "pal.pl.repository.designer.more.attribute.htm"; + List selectIds = Lists.newArrayList(); + if (type.equals("shapeConfigSelect")) { + template = "pal.pl.manage.shape.config.more.attribute.htm"; + if (StringUtils.isEmpty(defaultCategory)) { + defaultCategory = category; + } + List shapeAttributeList = PALRepositoryShapeAttributeCache.getAttributeListByShapeName(wsId, defaultCategory, shapeName); + if (shapeAttributeList.size() > 0) { + for (PALRepositoryShapeAttributeModel model : shapeAttributeList) { + selectIds.add(model.getAttrId()); + } + } + macroLibraries.put("selectIds", JSONArray.parseArray(JSON.toJSONString(selectIds))); + } + return HtmlPageTemplate.merge(CoEConstant.APP_ID, template, macroLibraries); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/job/RemoveRecycleJob.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/job/RemoveRecycleJob.java new file mode 100644 index 00000000..408baa02 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/job/RemoveRecycleJob.java @@ -0,0 +1,76 @@ +package com.actionsoft.apps.coe.pal.pal.repository.job; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryRemove; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryRemoveInfo; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryRemoveInfoModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryRemoveModel; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessRecycleWeb; +import com.actionsoft.apps.coe.pal.system.util.StringUtil; +import com.actionsoft.bpms.schedule.IJob; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import java.sql.Timestamp; +import java.util.*; + +import static com.actionsoft.bpms.util.UtilDate.getDateForward; + +/** + * @Description 清除PAL回收站定时器 + * @Created by sunlh + * @Date 2020-09-29 + */ +public class RemoveRecycleJob implements IJob { + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + // 清除三十天以上的回收站数据 + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY, 00); + calendar.set(Calendar.MINUTE, 00); + calendar.set(Calendar.SECOND, 00); + Timestamp timeLine = new Timestamp(getDateForward(calendar.getTime(), -29).getTime());// 算上今天往前30天的零点零分零秒 + PALRepositoryRemoveInfo dao = new PALRepositoryRemoveInfo(); + List list = dao.getAllRemoveInfo(); + Map map = new HashMap<>(); + if (list != null && list.size() > 0) { + PALRepositoryRemove removeDao = new PALRepositoryRemove(); + for (PALRepositoryRemoveInfoModel model : list) { + List names = new ArrayList<>(); + List ids = new ArrayList<>(); + String removeId = model.getId(); + if (model.getRemoveTime().before(timeLine)) {// 30天以前的 + List models = removeDao.getModelsByInfoIds("'" + model.getId() + "'"); + if (models != null && models.size() > 0) { + for (PALRepositoryRemoveModel palModel : models) { + names.add(palModel.getName()); + ids.add(palModel.getId()); + } + map.put(model.getId(), "[" + StringUtils.join(names, ",") + "]" + "[" + StringUtils.join(ids, ",") + "]"); + } + } + + } + + } + // 开始进行删除 + if (map.size() > 0) { + int count = 0; + UserContext uc = UserContext.fromUID("admin"); + CoeProcessRecycleWeb web = new CoeProcessRecycleWeb(uc); + SDK.getLogAPI().consoleInfo("[开始][" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]执行[流程资产库定时清理回收站数据]任务,任务详情见[调度任务->流程资产库定时清理回收站数据]"); + Iterator> iterator = map.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + web.deleteResource("'" + entry.getKey() + "'");// 删除 + SDK.getLogAPI().consoleInfo("[删除]" + entry.getValue()); + count++; + } + SDK.getLogAPI().consoleInfo("[完成][" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]执行[流程资产库定时清理回收站数据]任务,共处理[" + count + "]条数据"); + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelAutoBean.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelAutoBean.java new file mode 100644 index 00000000..b90e5183 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelAutoBean.java @@ -0,0 +1,37 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model; +/** + * + * @author 周璇 + * + */ +public class CoeProcessLevelAutoBean { + private String ui; + private String value; + private String name; + private String type; //add by zhangming 2014-3-17 + public String getUi() { + return ui; + } + public void setUi(String ui) { + this.ui = ui; + } + public String getValue() { + return value; + } + public void setValue(String value) { + this.value = value; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelCorrelateModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelCorrelateModel.java new file mode 100644 index 00000000..01af783b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelCorrelateModel.java @@ -0,0 +1,139 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +/** + * pal-aws流程关联 + * @author SUNLH + * + */ +public class CoeProcessLevelCorrelateModel extends ModelBean{ + /** + * + */ + private static final long serialVersionUID = 1L; + + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_CORRELATE"; + + public static final String FIELD_WSID = "WSID";// 资产库ID + public static final String FIELD_PLID = "PLID";// 资产库流程ID + public static final String FIELD_PLAWSVERSIONID = "PLAWSVERSIONID";// AWS流程版本ID + public static final String FIELD_PLAWSID = "PLAWSID";// AWS流程ID + public static final String FIELD_PLVERSIONID = "PLVERSIONID";// 资产库流程版本ID + public static final String FIELD_CORRELATETYPE = "CORRELATETYPE";// 关联类型,关联(默认或0),推送1 + public static final String FIELD_ISCORRELATE = "ISCORRELATE";// 是否与AWS流程进行关联,否(默认或0),是1 + public static final String FIELD_EXT1 = "EXT1";// add by sunlh + public static final String FIELD_EXT2 = "EXT2";// add by sunlh + public static final String FIELD_EXT3 = "EXT3";// add by sunlh + public static final String FIELD_EXT4 = "EXT4";// add by sunlh + + private String wsId; + private String plId; + private String plAwsVersionid; + private String plAwsId; + private String plVersionId; + private int correlateType; + private boolean isCorrelate; + // 扩展字段 + private String ext1 = ""; + private String ext2 = ""; + private String ext3 = ""; + private String ext4; + + public CoeProcessLevelCorrelateModel() { + this.wsId = ""; + this.plId = ""; + this.plAwsVersionid = ""; + this.plAwsId = ""; + this.plVersionId = ""; + } + + public String getWsId() { + return wsId; + } + + public void setWsId(String wsId) { + this.wsId = wsId; + } + + public String getPlId() { + return plId; + } + + public void setPlId(String plId) { + this.plId = plId; + } + + public String getPlAwsVersionid() { + return plAwsVersionid; + } + + public void setPlAwsVersionid(String plAwsVersionid) { + this.plAwsVersionid = plAwsVersionid; + } + + public String getPlAwsId() { + return plAwsId; + } + + public void setPlAwsId(String plAwsId) { + this.plAwsId = plAwsId; + } + + public String getPlVersionId() { + return plVersionId; + } + + public void setPlVersionId(String plVersionId) { + this.plVersionId = plVersionId; + } + + public int getCorrelateType() { + return correlateType; + } + + public void setCorrelateType(int correlateType) { + this.correlateType = correlateType; + } + + public boolean isCorrelate() { + return isCorrelate; + } + + public void setCorrelate(boolean isCorrelate) { + this.isCorrelate = isCorrelate; + } + + public String getExt1() { + return ext1; + } + + public void setExt1(String ext1) { + this.ext1 = ext1; + } + + public String getExt2() { + return ext2; + } + + public void setExt2(String ext2) { + this.ext2 = ext2; + } + + public String getExt3() { + return ext3; + } + + public void setExt3(String ext3) { + this.ext3 = ext3; + } + + public String getExt4() { + return ext4; + } + + public void setExt4(String ext4) { + this.ext4 = ext4; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelFileAttributeDefinition.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelFileAttributeDefinition.java new file mode 100644 index 00000000..f8f3edac --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelFileAttributeDefinition.java @@ -0,0 +1,28 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model; + +public interface CoeProcessLevelFileAttributeDefinition { + // 名称 + String FILE_ATTRIBUTE_NAME = "FILE_ATTRIBUTE_NAME"; + // 编号 + String FILE_ATTRIBUTE_NUMBER = "FILE_ATTRIBUTE_NUMBER"; + // 分类 + String FILE_ATTRIBUTE_CLASSIFY = "FILE_ATTRIBUTE_CLASSIFY"; + // 描述 + String FILE_ATTRIBUTE_DESCRIPTION = "FILE_ATTRIBUTE_DESCRIPTION"; + // 输入 + String FILE_ATTRIBUTE_INPUT = "FILE_ATTRIBUTE_INPUT"; + // 输出 + String FILE_ATTRIBUTE_OUTPUT = "FILE_ATTRIBUTE_OUTPUT"; + // 层次 + String FILE_ATTRIBUTE_LEVEL = "FILE_ATTRIBUTE_LEVEL"; + // 责任部门 + String FILE_ATTRIBUTE_DEPARTMENT = "FILE_ATTRIBUTE_DEPARTMENT"; + // 责任人 + String FILE_ATTRIBUTE_DUTY = "FILE_ATTRIBUTE_DUTY"; + // 里程碑 + String FILE_ATTRIBUTE_MILESTONE = "FILE_ATTRIBUTE_MILESTONE"; + // 执行方式 + String FILE_ATTRIBUTE_CONCURRENCY = "FILE_ATTRIBUTE_CONCURRENCY"; + // 颜色标记 + String FILE_ATTRIBUTE_COLOR_CODE = "FILE_ATTRIBUTE_COLOR_CODE"; +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelJsonModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelJsonModel.java new file mode 100644 index 00000000..5459c337 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelJsonModel.java @@ -0,0 +1,80 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model; + +/** + * 用于架构全景的json数据传递 + * @author zhouxuan + * + */ +public class CoeProcessLevelJsonModel { + private String uuid=""; + private String plNo=""; + private String plAllNo=""; + private String plName=""; + private int plLevel; + private String plParentId; + private String color; + private int childrenCount; + private int index; + private String plCategory; + + public String getPlAllNo() { + return plAllNo; + } + public void setPlAllNo(String plAllNo) { + this.plAllNo = plAllNo; + } + public int getChildrenCount() { + return childrenCount; + } + public void setChildrenCount(int childrenCount) { + this.childrenCount = childrenCount; + } + public int getIndex() { + return index; + } + public void setIndex(int index) { + this.index = index; + } + public String getUuid() { + return uuid; + } + public void setUuid(String uuid) { + this.uuid = uuid; + } + public String getPlNo() { + return plNo; + } + public void setPlNo(String plNo) { + this.plNo = plNo; + } + public String getPlName() { + return plName; + } + public void setPlName(String plName) { + this.plName = plName; + } + public int getPlLevel() { + return plLevel; + } + public void setPlLevel(int plLevel) { + this.plLevel = plLevel; + } + public String getPlParentId() { + return plParentId; + } + public void setPlParentId(String plParentId) { + this.plParentId = plParentId; + } + public String getColor() { + return color; + } + public void setColor(String color) { + this.color = color; + } + public String getPlCategory() { + return plCategory; + } + public void setPlCategory(String plCategory) { + this.plCategory = plCategory; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelSystemNameModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelSystemNameModel.java new file mode 100644 index 00000000..7491e33d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/CoeProcessLevelSystemNameModel.java @@ -0,0 +1,38 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model; + +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; + +public class CoeProcessLevelSystemNameModel extends PlatformMetaModelBean { + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_SYSTEMNAME"; + public static final String FIELD_UUID = "ID"; + public static final String FIELD_NAME = "SYSTEMNAME"; + public static final String FIELD_ISDEFAULT = "ISDEFAULT"; + + private String uuid; + private String name; + private boolean isDefault = false; + + public String getUUId() { + return uuid; + } + + public void setUUId(String uuid) { + this.uuid = uuid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isDefault() { + return isDefault; + } + + public void setDefault(boolean isDefault) { + this.isDefault = isDefault; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryAttributeModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryAttributeModel.java new file mode 100644 index 00000000..200c1b63 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryAttributeModel.java @@ -0,0 +1,102 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +public class PALRepositoryAttributeModel extends ModelBean{ + + /** + * + */ + private static final long serialVersionUID = 1L; + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_ATTR"; + public static final String FIELD_UUID = "ID"; + public static final String FIELD_WSID = "WSID"; + public static final String FIELD_ATTRID = "ATTRID"; + public static final String FIELD_ATTRNAME = "ATTRNAME"; + public static final String FIELD_ATTRVALUE = "ATTRVALUE"; + public static final String FIELD_CATEGORY = "CATEGORY"; + public static final String FIELD_METHODID = "METHODID"; + public static final String FIELD_TYPE = "TYPE"; + public static final String FIELD_IS_DELETE = "ISDELETE"; + public static final String FIELD_ORDERINDEX = "ORDERINDEX"; + + public PALRepositoryAttributeModel() { + super(); + } + + private String id; + private String wsId; + private String attrId; + private String attrName; + private String attrValue; + private String category; + private String methodId; + private String type; + private String isDelete; + private int orderIndex; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getWsId() { + return wsId; + } + public void setWsId(String wsId) { + this.wsId = wsId; + } + public String getAttrId() { + return attrId; + } + public void setAttrId(String attrId) { + this.attrId = attrId; + } + public String getCategory() { + return category; + } + public void setCategory(String category) { + this.category = category; + } + public String getMethodId() { + return methodId; + } + public void setMethodId(String methodId) { + this.methodId = methodId; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + + public void setAttrName(String attrName) { + this.attrName = attrName; + } + public String getAttrName() { + return attrName; + } + + public void setIsDelete(String isDelete) { + this.isDelete = isDelete; + } + public String getIsDelete() { + return isDelete; + } + public void setAttrValue(String attrValue) { + this.attrValue = attrValue; + } + public String getAttrValue() { + return attrValue; + } + + public int getOrderIndex() { + return orderIndex; + } + + public void setOrderIndex(int orderIndex) { + this.orderIndex = orderIndex; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryModel.java new file mode 100644 index 00000000..38daed6c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryModel.java @@ -0,0 +1,347 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model; + +import java.sql.Timestamp; + +import com.actionsoft.bpms.commons.mvc.model.IModelBean; + +/** + * 资产库文件 + * + * @author jack + * + */ +public interface PALRepositoryModel extends IModelBean { + + /** + * 主键唯一索引,一个36位长度的串 + * + * @return + */ + public String getId(); + + /** + * 资产库Id + * + * @return + */ + public String getWsId(); + + /** + * 文件编号 + * + * @return + */ + public String getNo(); + + /** + * 文件名称 + * + * @return + */ + public String getName(); + + /** + * 层级 + * + * @return + */ + public int getLevel(); + + /** + * 父文件Id + * + * @return + */ + public String getParentId(); + + /** + * 同一级次下排序顺序 + * + * @return + */ + public int getOrderIndex(); + + /** + * 说明 + * + * @return + */ + public String getDesc(); + + /** + * 是否低层流程 + * + * @return + */ + public int isBottomLevel(); + + /** + * 输出 + * + * @return + */ + public String getOutput(); + + /** + * 输入 + * + * @return + */ + public String getInput(); + + /** + * 责任部门 + * + * @return + */ + public String getOwnerDept(); + + /** + * 责任人 + * + * @return + */ + public String getOwnerUser(); + + /** + * 里程碑 + * + * @return + */ + public String getMilestone(); + + /** + * 执行类型 + * + * @return + */ + public int getExecType(); + + /** + * 系统名称 + * + * @return + */ + public String getSystemName(); + + /** + * 一个AWS BPMS的BPMN文件Id + * + * @return + */ + public String getAWSProcessId(); + + public String getDiagramUrl(); + + /** + * 标记颜色 + * + * @return + */ + public String getColor(); + + /** + * @deprecated + * @return + */ + public String getPlSecurityW(); + + /** + * @deprecated + * @return + */ + public String getPlSecurityR(); + + /** + * 建模方法大类 + * + * @return + */ + public String getMethodCategory(); + + /** + * 建模方法标识 + * + * @return + */ + public String getMethodId(); + + /** + * 版本号 + * + * @return + */ + public double getVersion(); + + /** + * 版本Id,多个版本时一致,取自第一个版本的Id + * + * @return + */ + public String getVersionId(); + + /** + * 是否工作 + * + * @return + */ + public boolean isUse(); + + /** + * 是否发布 + * + * @return + */ + public boolean isPublish(); + + /** + * 是否停用 + * @return + */ + public boolean isStop(); + + /** + * 是否审批中 + * @return + */ + public boolean isApproval(); + + /** + * ? + * + * @return + */ + public String getFilePath(); + + /** + * ? + * + * @return + */ + public String getHistoryMaxVersion(); + + /** + * 是否系统文件,不允许删除 + * + * @return + */ + public boolean isSystemFile(); + + /** + * @deprecated ? + * @return + */ + public String getPlRid(); + + /** + * 创建人Id + * + * @return + */ + public String getCreateUser(); + + /** + * 最后修改人Id + * + * @return + */ + public String getModifyUser(); + + /** + * 创建时间 + * + * @return + */ + public Timestamp getCreateDate(); + + /** + * 最后修改时间 + * + * @return + */ + public Timestamp getModifyDate(); + + /** + * 发布后的浏览次数 + * + * @return + */ + public long getViewCount(); + + /** + * 新的根节点 + * + * @return + * @author zhangming + */ + public String getNewParentId(); + + /** + * 流程责任人 + * @return + * @author tanj + */ + public String getDutyUser(); + + /** + * 流程责任部门 + * @return + * @author tanj + */ + public String getDutyDept(); + + /** + * 锁定流程模型人员 + * @return + */ + public String getLockUser(); + + /** + * 发布时间 + * @return + */ + public Timestamp getPublishDate(); + + /** + * 发布变更时间 + * @return + */ + public Timestamp getChangeDate(); + + /** + * 发布停用时间 + * @return + */ + public Timestamp getStopDate(); + + /** + * 扩展 + * @return + */ + public String getExt1(); + + /** + * 扩展 + * @return + */ + public String getExt2(); + + /** + * 扩展 + * @return + */ + public String getExt3(); + + /** + * 扩展 + * @return + */ + public String getExt4(); + + /** + * 文件密级 + * @return + */ + public Integer getSecurityLevel(); + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryPropertyModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryPropertyModel.java new file mode 100644 index 00000000..7eb4425b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryPropertyModel.java @@ -0,0 +1,88 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model; + +import com.alibaba.fastjson.JSONObject; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +/** + * 流程属性的自定义属性 + * + * @author zhangming + * + */ +public class PALRepositoryPropertyModel extends ModelBean { + /** + * + */ + private static final long serialVersionUID = 1L; + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_PROP"; + public static final String FIELD_ID = "ID"; + public static final String FIELD_PLID = "PLID"; + public static final String FIELD_PROPERTYID = "PROPERTYID"; + public static final String FIELD_PROPERTYNAME = "PROPERTYNAME"; + public static final String FIELD_PROPERTYVALUE = "PROPERTYVALUE"; + public static final String FIELD_ORDERINDEX = "ORDERINDEX"; + + private String id; + private String plId; //流程Id + private String propertyId; //属性Id + private String propertyName; //属性名称(页面显示的名称) + private String propertyValue; //属性值 + private int orderIndex; //属性排序 + + public PALRepositoryPropertyModel() { + super(); + } + + private String validateJson(String name) { + return name == null ? "" : name; + } + + public PALRepositoryPropertyModel(String id, String plId, JSONObject json, int orderIndex) { + super(); + this.id = id; + this.plId = plId; + this.setPropertyId(validateJson(json.getString("id"))); + this.setPropertyName(validateJson(json.getString("name"))); + this.setPropertyValue(validateJson(json.getString("value"))); + this.orderIndex = orderIndex; + } + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getPlId() { + return plId; + } + public void setPlId(String plId) { + this.plId = plId; + } + public String getPropertyId() { + return propertyId; + } + public void setPropertyId(String propertyId) { + this.propertyId = propertyId; + } + public String getPropertyName() { + return propertyName; + } + public void setPropertyName(String propertyName) { + this.propertyName = propertyName; + } + public String getPropertyValue() { + return propertyValue; + } + public void setPropertyValue(String propertyValue) { + this.propertyValue = propertyValue; + } + public int getOrderIndex() { + return orderIndex; + } + + public void setOrderIndex(int orderIndex) { + this.orderIndex = orderIndex; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryRemoveInfoModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryRemoveInfoModel.java new file mode 100644 index 00000000..215f5b35 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryRemoveInfoModel.java @@ -0,0 +1,62 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model; + +import java.sql.Timestamp; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +/** + * 流程文件删除Model + * + * @author zhangming + * @date 2015-7-21 + * @version 6.0 + * @description + */ +public class PALRepositoryRemoveInfoModel extends ModelBean { + + private static final long serialVersionUID = 1L; + + private String id; //UUID + private String removeUser; //删除文件的用户Id + private Timestamp removeTime; //删除时间 + private String wsId; //被删除资源的资产库Id + private String removeResource; //被删除的资源Id + private int removeType; //删除类型,1:文件删除;2:版本删除 + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getRemoveUser() { + return removeUser; + } + public void setRemoveUser(String removeUser) { + this.removeUser = removeUser; + } + public Timestamp getRemoveTime() { + return removeTime; + } + public void setRemoveTime(Timestamp timestamp) { + this.removeTime = timestamp; + } + public String getRemoveResource() { + return removeResource; + } + public void setRemoveResource(String removeResource) { + this.removeResource = removeResource; + } + public int getRemoveType() { + return removeType; + } + public void setRemoveType(int removeType) { + this.removeType = removeType; + } + public String getWsId() { + return wsId; + } + public void setWsId(String wsId) { + this.wsId = wsId; + } +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryRemoveModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryRemoveModel.java new file mode 100644 index 00000000..00121b04 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryRemoveModel.java @@ -0,0 +1,18 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model; + +/** + * 被删除的资产库文件 + * + * @author zhangming + * @date 2015-7-21 + * @version 6.0 + */ +public interface PALRepositoryRemoveModel extends PALRepositoryModel { + /** + * 获取文件删除信息对象Id + * + * @return + * @author zhangming + */ + public String getRemoveId(); +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryShapeAttributeModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryShapeAttributeModel.java new file mode 100644 index 00000000..b5385cfb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryShapeAttributeModel.java @@ -0,0 +1,102 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +public class PALRepositoryShapeAttributeModel extends ModelBean{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_SHAPE_ATTR"; + public static final String FIELD_UUID = "ID"; + public static final String FIELD_WSID = "WSID"; + public static final String FIELD_ATTRID = "ATTRID"; + public static final String FIELD_ATTRNAME = "ATTRNAME"; + public static final String FIELD_ATTRVALUE = "ATTRVALUE"; + public static final String FIELD_CATEGORY = "CATEGORY"; + public static final String FIELD_METHODID = "METHODID"; + public static final String FIELD_TYPE = "TYPE"; + public static final String FIELD_SHAPE_NAME = "SHAPENAME"; + public static final String FIELD_ORDERINDEX = "ORDERINDEX"; + + + private String id; + private String wsId; + private String attrId; + private String attrName; + private String attrValue; + private String category; + private String methodId; + private String type; + private String shapeName; + private int orderIndex; + + public PALRepositoryShapeAttributeModel(){ + super(); + } + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getWsId() { + return wsId; + } + public void setWsId(String wsId) { + this.wsId = wsId; + } + public String getAttrId() { + return attrId; + } + public void setAttrId(String attrId) { + this.attrId = attrId; + } + public String getAttrName() { + return attrName; + } + public void setAttrName(String attrName) { + this.attrName = attrName; + } + public String getAttrValue() { + return attrValue; + } + public void setAttrValue(String attrValue) { + this.attrValue = attrValue; + } + public String getCategory() { + return category; + } + public void setCategory(String category) { + this.category = category; + } + public String getMethodId() { + return methodId; + } + public void setMethodId(String methodId) { + this.methodId = methodId; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public String getShapeName() { + return shapeName; + } + public void setShapeName(String shapeName) { + this.shapeName = shapeName; + } + + public int getOrderIndex() { + return orderIndex; + } + + public void setOrderIndex(int orderIndex) { + this.orderIndex = orderIndex; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryShapeConfigModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryShapeConfigModel.java new file mode 100644 index 00000000..e636d3ba --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositoryShapeConfigModel.java @@ -0,0 +1,81 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +/** + * 形状配置表的model + * + * @author 郝文豪(James) + * @date 2019/10/28 0028 下午 5:31 + */ +public class PALRepositoryShapeConfigModel extends ModelBean { + + private static final long serialVersionUID = 1L; + + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_SHAPE_CONFIG"; + public static final String FIELD_ID = "ID"; + public static final String FIELD_WSID = "WSID"; + public static final String FIELD_METHODID = "METHODID"; + public static final String FIELD_SHAPEID = "SHAPEID"; + public static final String FIELD_ATTRIBUTE = "ATTRIBUTE"; + public static final String FIELD_ORDERINDEX = "ORDERINDEX"; + + private String id; + private String wsId; + private String methodId; + private String shapeId; + private String attribute; + private int orderIndex; + + public PALRepositoryShapeConfigModel() { + super(); + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWsId() { + return wsId; + } + + public void setWsId(String wsId) { + this.wsId = wsId; + } + + public String getMethodId() { + return methodId; + } + + public void setMethodId(String methodId) { + this.methodId = methodId; + } + + public String getShapeId() { + return shapeId; + } + + public void setShapeId(String shapeId) { + this.shapeId = shapeId; + } + + public String getAttribute() { + return attribute; + } + + public void setAttribute(String attribute) { + this.attribute = attribute; + } + + public int getOrderIndex() { + return orderIndex; + } + + public void setOrderIndex(int orderIndex) { + this.orderIndex = orderIndex; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositorySpecialPropertyModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositorySpecialPropertyModel.java new file mode 100644 index 00000000..ca469d76 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/PALRepositorySpecialPropertyModel.java @@ -0,0 +1,82 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +/** + * 流程属性的自定义表格属性 + * + * @author sunlh + * + */ +public class PALRepositorySpecialPropertyModel extends ModelBean { + /** + * + */ + private static final long serialVersionUID = 1L; + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_SPCL_PROP"; + public static final String FIELD_ID = "ID"; + public static final String FIELD_PLID = "PLID"; + public static final String WS_ID = "WSID"; + public static final String TYPE = "TYPE"; + public static final String VALUETEXT = "VALUETEXT"; + + private String id; + private String plId; //流程Id + private String wsId; //资产库id + private String type; //属性类型 + private String valueText; //内容json串 + + public PALRepositorySpecialPropertyModel() { + super(); + } + + public PALRepositorySpecialPropertyModel(String id, String plId, String wsId, String type, String valueText) { + super(); + this.id = id; + this.plId = plId; + this.wsId = wsId; + this.type = type; + this.valueText = valueText; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getPlId() { + return plId; + } + + public void setPlId(String plId) { + this.plId = plId; + } + + public String getWsId() { + return wsId; + } + + public void setWsId(String wsId) { + this.wsId = wsId; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getValueText() { + return valueText; + } + + public void setValueText(String valueText) { + this.valueText = valueText; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/impl/PALRepositoryModelImpl.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/impl/PALRepositoryModelImpl.java new file mode 100644 index 00000000..f9628813 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/model/impl/PALRepositoryModelImpl.java @@ -0,0 +1,588 @@ +package com.actionsoft.apps.coe.pal.pal.repository.model.impl; + +import java.sql.Timestamp; + +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryRemoveModel; + +/** + * 资产库文件 + * + * @author jack + * + */ +public class PALRepositoryModelImpl extends PlatformMetaModelBean implements PALRepositoryRemoveModel, Cloneable { + private static final long serialVersionUID = 5759322424586676074L; + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_REPOSITORY"; + public static final String FIELD_UUID = "ID"; + public static final String FIELD_WS_ID = "WSID"; + public static final String FIELD_PL_NO = "PLNO"; + public static final String FIELD_PL_NAME = "PLNAME"; + public static final String FIELD_PL_LEVEL = "PLLEVEL"; + public static final String FIELD_PL_PARENT_ID = "PLPARENTID"; + public static final String FIELD_PL_ORDERINDEX = "PLORDERINDEX"; + public static final String FIELD_PL_DESC = "PLDESC"; + public static final String FIELD_PL_IS_BOTTOM_LEVEL = "PLISBOTTOMLEVEL"; + public static final String FIELD_PL_RD = "PLRD"; + public static final String FIELD_PL_RP = "PLRP"; + public static final String FIELD_PL_M = "PM"; + public static final String FIELD_PL_EXEC_TYPE = "PLEXECTYPE"; + public static final String FIELD_PL_SYSTEM_NAME = "PLSYSTEMNAME"; + public static final String FIELD_PL_AWS_PID = "PLAWSPID"; + public static final String FIELD_PL_DIAGRAM_URL = "PLDIAGRAMURL"; + public static final String FIELD_PL_COLOR = "PLCOLOR"; + public static final String FIELD_PL_CATEGORY = "PLCATEGORY"; + public static final String FIELD_PL_METHODID = "PLMETHODID"; + public static final String FIELD_PL_VER = "PLVER"; + public static final String FIELD_PL_VERSION_UUID = "PLVERSIONID"; + public static final String FIELD_IS_USE = "ISUSE"; + public static final String FIELD_IS_SYSTEM_FILE = "ISSYSTEMFILE"; + public static final String FIELD_FILE_PATH = "FILEPATH"; + public static final String FIELD_PL_INPUT = "PLINPUT"; + public static final String FIELD_HISTORYMAXVERSION = "HISTORYMAXVERSION"; + public static final String FIELD_PL_OUTPUT = "PLOUTPUT"; + public static final String FIELD_PL_HISTORY_AWS_PID = "PLHISTORYAWSPID"; + public static final String FIELD_PL_RID = "PLRID"; + public static final String FIELD_PL_ISPUBLISH = "ISPUBLISH"; + public static final String FIELD_PL_ISSTOP = "ISSTOP";// add by sunlh + public static final String FIELD_PL_CREATEUSER = "CREATEUSER"; //add by zhangming + public static final String FIELD_PL_MODIFYUSER = "MODIFYUSER"; //add by zhangming + public static final String FIELD_PL_CREATEDATE = "CREATEDATE"; //add by zhangming + public static final String FIELD_PL_MODIFYDATE = "MODIFYDATE"; //add by zhangming + public static final String FIELD_VIEWCOUNT = "VIEWCOUNT"; //add by zhangming + public static final String FIELD_PL_DUTY_PERSON = "PLDUTYPERSON"; // add by tanj + public static final String FIELD_PL_DUTY_DEPT = "PLDUTYDEPT"; //add by tanj + public static final String FIELD_PL_LOCKUSER = "LOCKUSER"; //add by xuwp + public static final String FIELD_PL_PUBLISHDATE = "PUBLISHDATE";// add by sunlh + public static final String FIELD_PL_CHANGEDATE = "CHANGEDATE";// add by sunlh + public static final String FIELD_PL_STOPDATE = "STOPDATE";// add by sunlh + public static final String FIELD_PL_ISAPPROVAL = "ISAPPROVAL";// add by sunlh + public static final String FIELD_PL_EXT1 = "EXT1";// add by sunlh + public static final String FIELD_PL_EXT2 = "EXT2";// add by sunlh + public static final String FIELD_PL_EXT3 = "EXT3";// add by sunlh + public static final String FIELD_PL_EXT4 = "EXT4";// add by sunlh + //文件密级 add by anhc + public static final String FIELD_SECURITY_LEVEL = "SECURITYLEVEL"; + + private String id = ""; + private String wsId = ""; + private String no = ""; + private String name = ""; + private int level; + private String parentId; + private String newParentId; + private int orderIndex; + private String desc = ""; + private int isBottomLevel; + private String ownerDept = ""; + private String ownerUser = ""; + private String milestone = "0"; + private int execType; + private String systemName = "-1"; + private String AWSProcessId = ""; + private String color = "#FFF"; + private String methodCategory = ""; + private String methodId = ""; + private double version; + private String versionId = ""; + private String output = ""; + private String input = ""; + private String createUser; //add by zhangming 创建人Id + private String modifyUser; //add by zhangming 最后修改人Id + private Timestamp createDate; //add by zhangming 创建时间 + private Timestamp modifyDate; //add by zhangming 最后修改时间 + private long viewCount; //add by zhangming 发布后的浏览次数 + private String dutyUser = ""; //add by tanj 流程责任人 + private String dutyDept = ""; //add by tanj 流程责任部门 + private String lockUser = "";//add by xuwp 锁定流程模型人员id + private Timestamp publishDate;//add by sunlh 流程发布时间 + private Timestamp changeDate;//add by sunlh 流程变更时间 + private Timestamp stopDate;//add by sunlh 流程停用时间 + + // int? + private String historyMaxVersion = ""; + // boolean! + private boolean isUse = true; + private boolean isSystemFile ;// 是否为系统文件,不让删除的文件,用于二分法和三分法 + private boolean isPublish;// 是否发布 + private boolean isStop;// 是否停用 + private boolean isApproval;// 是否审核中 + + //如果文件被删除,删除信息Id + private String removeId; + + // 内存值,作废物理字段 + private String filePath = ""; + private String diagramUrl = ""; + + // 扩展字段 + private String ext1 = ""; + private String ext2 = ""; + private String ext3 = ""; + private String ext4; + /** + * 文件密级 + */ + private Integer securityLevel; + + // ---del + /** + * @deprecated + */ + private String plSecurityW = ""; + /** + * @deprecated + */ + private String plSecurityR = ""; + /** + * @deprecated 检查逻辑? + */ + private String plRid = ""; + + public boolean isPublish() { + return isPublish; + } + + public void setPublish(boolean isPublish) { + this.isPublish = isPublish; + } + + public boolean isStop() { + return isStop; + } + + public void setStop(boolean isStop) { + this.isStop = isStop; + } + + public String getOutput() { + return output; + } + + public void setOutput(String output) { + this.output = output; + } + + public String getInput() { + return input; + } + + public void setInput(String input) { + this.input = input; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getWsId() { + return wsId; + } + + public void setWsId(String wsId) { + this.wsId = wsId; + } + + public String getNo() { + return no; + } + + public void setNo(String no) { + this.no = no; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public int getOrderIndex() { + return orderIndex; + } + + public void setOrderIndex(int orderIndex) { + this.orderIndex = orderIndex; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public int isBottomLevel() { + return isBottomLevel; + } + + public void setBottomLevel(int isBottomLevel) { + this.isBottomLevel = isBottomLevel; + } + + public String getOwnerDept() { + return ownerDept; + } + + public void setOwnerDept(String ownerDept) { + this.ownerDept = ownerDept; + } + + public String getOwnerUser() { + return ownerUser; + } + + public void setOwnerUser(String ownerUser) { + this.ownerUser = ownerUser; + } + + public String getMilestone() { + return milestone; + } + + public void setMilestone(String milestone) { + this.milestone = milestone; + } + + public int getExecType() { + return execType; + } + + public void setExecType(int execType) { + this.execType = execType; + } + + public String getSystemName() { + return systemName; + } + + public void setSystemName(String systemName) { + this.systemName = systemName; + } + + public String getAWSProcessId() { + return AWSProcessId; + } + + public void setAWSProcessId(String AWSProcessId) { + this.AWSProcessId = AWSProcessId; + } + + public String getDiagramUrl() { + return diagramUrl; + } + + /** + * @deprecated + * @param plDiagramUrl + */ + public void setDiagramUrl(String diagramUrl) { + this.diagramUrl = diagramUrl; + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color; + } + + /** + * @deprecated + * @return + */ + public String getPlSecurityW() { + return plSecurityW; + } + + /** + * @deprecated + * @param plSecurityW + */ + public void setPlSecurityW(String plSecurityW) { + this.plSecurityW = plSecurityW; + } + + /** + * @deprecated + * @return + */ + public String getPlSecurityR() { + return plSecurityR; + } + + /** + * @deprecated + * @param plSecurityR + */ + public void setPlSecurityR(String plSecurityR) { + this.plSecurityR = plSecurityR; + } + + public String getMethodCategory() { + return methodCategory; + } + + public void setMethodCategory(String methodCategory) { + this.methodCategory = methodCategory; + } + + public String getMethodId() { + return methodId; + } + + public void setMethodId(String methodId) { + this.methodId = methodId; + } + + public String getVersionId() { + return versionId; + } + + public void setVersionId(String versionId) { + this.versionId = versionId; + } + + public boolean isUse() { + return isUse; + } + + public void setUse(boolean isUse) { + this.isUse = isUse; + } + + public String getFilePath() { + return filePath; + } + + /** + * @deprecated + * @param filePath + */ + public void setFilePath(String filePath) { + this.filePath = filePath; + } + + public String getHistoryMaxVersion() { + return historyMaxVersion; + } + + public void setHistoryMaxVersion(String historyMaxVersion) { + this.historyMaxVersion = historyMaxVersion; + } + + public void setVersion(double version) { + this.version = version; + } + + public double getVersion() { + return version; + } + + public boolean isSystemFile() { + return isSystemFile; + } + + public void setSystemFile(boolean isSystemFile) { + this.isSystemFile = isSystemFile; + } + + /** + * @deprecated ? + * @return + */ + public String getPlRid() { + return plRid; + } + + public void setPlRid(String plRid) { + this.plRid = plRid; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getModifyUser() { + return modifyUser; + } + + public void setModifyUser(String modifyUser) { + this.modifyUser = modifyUser; + } + + public Timestamp getCreateDate() { + return createDate; + } + + public void setCreateDate(Timestamp createDate) { + this.createDate = createDate; + } + + public Timestamp getModifyDate() { + return modifyDate; + } + + public void setModifyDate(Timestamp modifyDate) { + this.modifyDate = modifyDate; + } + + public long getViewCount() { + return viewCount; + } + + public void setViewCount(long viewCount) { + this.viewCount = viewCount; + } + + public boolean equals(Object o){ + return (o instanceof PALRepositoryModel) && ((PALRepositoryModel)o).getId().equals(getId()); + } + + public String getNewParentId() { + return newParentId; + } + + public void setNewParentId(String newParentId) { + this.newParentId = newParentId; + } + + public String getRemoveId() { + return removeId; + } + + public void setRemoveId(String removeId) { + this.removeId = removeId; + } + + public String getDutyUser() { + return dutyUser; + } + + public void setDutyUser(String dutyUser) { + this.dutyUser = dutyUser; + } + + public String getDutyDept() { + return dutyDept; + } + + public void setDutyDept(String dutyDept) { + this.dutyDept = dutyDept; + } + + public String getLockUser() { + return lockUser; + } + + public void setLockUser(String lockUser) { + this.lockUser = lockUser; + } + + public Timestamp getPublishDate() { + return publishDate; + } + + public void setPublishDate(Timestamp publishDate) { + this.publishDate = publishDate; + } + + public Timestamp getChangeDate() { + return changeDate; + } + + public void setChangeDate(Timestamp changeDate) { + this.changeDate = changeDate; + } + + public Timestamp getStopDate() { + return stopDate; + } + + public void setStopDate(Timestamp stopDate) { + this.stopDate = stopDate; + } + + @Override + public PALRepositoryModelImpl clone() throws CloneNotSupportedException { + PALRepositoryModelImpl newModel = (PALRepositoryModelImpl)super.clone(); + return newModel; + } + + public boolean isApproval() { + return isApproval; + } + + public void setApproval(boolean isApproval) { + this.isApproval = isApproval; + } + + public String getExt1() { + return ext1; + } + + public void setExt1(String ext1) { + this.ext1 = ext1; + } + + public String getExt2() { + return ext2; + } + + public void setExt2(String ext2) { + this.ext2 = ext2; + } + + public String getExt3() { + return ext3; + } + + public void setExt3(String ext3) { + this.ext3 = ext3; + } + + public String getExt4() { + return ext4; + } + + public void setExt4(String ext4) { + this.ext4 = ext4; + } + + public Integer getSecurityLevel() { + return securityLevel; + } + + public void setSecurityLevel(Integer securityLevel) { + this.securityLevel = securityLevel; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/CoeFileProcessor.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/CoeFileProcessor.java new file mode 100644 index 00000000..720f5ade --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/CoeFileProcessor.java @@ -0,0 +1,55 @@ +/** + * + */ +package com.actionsoft.apps.coe.pal.pal.repository.upfile; + +import java.util.Map; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.constant.CoeFileConstant; +import com.actionsoft.bpms.server.fs.AbstFileProcessor; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.sdk.local.SDK; + +/** + * @author 作者: renmm + * @version 创建时间:2014-4-8 + * + */ +public class CoeFileProcessor extends AbstFileProcessor { + @Override + public boolean uploadReady(Map param) { + return true; + } + + @Override + public void uploadSuccess(Map param) { + } + + @Override + public void uploadError(Map param) { + } + + @Override + public boolean downloadValidate(Map param) { + // System.out.println(param); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + // 下载PAL模型/形状附件进行日志记录 + Object obj = param.get("DCContext"); + if (obj != null && obj instanceof DCContext) { + DCContext dc = (DCContext)obj; + if (CoeFileConstant.COE_UPFILE.equals(dc.getRepositoryName())) { + if ("file".equals(dc.getGroupValue())) {// 模型附件 + CoEOpLogAPI.auditOkOp(dc.getSession(), CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_DOWNLOAD, CoEOpLogConst.INFO_REPOSITORY_FILE_DOWNLOAD); + } else {// 形状附件 + CoEOpLogAPI.auditOkOp(dc.getSession(), CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_DOWNLOAD, CoEOpLogConst.INFO_REPOSITORY_SHAPE_FILE_DOWNLOAD); + } + } + } + } + return true; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/constant/CoeFileConstant.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/constant/CoeFileConstant.java new file mode 100644 index 00000000..cbfeb0d3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/constant/CoeFileConstant.java @@ -0,0 +1,17 @@ +/** + * + */ +package com.actionsoft.apps.coe.pal.pal.repository.upfile.constant; + +/** + * @author 作者: renmm + * @version 创建时间:2014-4-8 + * + */ +public interface CoeFileConstant { + /** + * coe附件上传id + */ + String COE_UPFILE = "COE_Upfile"; + String TMP_UPFILE = "tmp"; +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/dao/UpFileDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/dao/UpFileDao.java new file mode 100644 index 00000000..9986c7d1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/dao/UpFileDao.java @@ -0,0 +1,254 @@ +package com.actionsoft.apps.coe.pal.pal.repository.upfile.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.model.UpfileModel; +import com.actionsoft.exception.AWSDataAccessException; +import com.actionsoft.sdk.local.SDK; + +/** + * @author 作者: renmm + * @version 创建时间:2014-4-8 + * + */ +public class UpFileDao { + /** + * 创建附件Model + * + * @param model + * @return + */ + public int create(UpfileModel model) { + int result = 0; + Map paraMap = new HashMap(); + paraMap.put(UpfileModel.FIELD_UUID, model.getUuid()); + paraMap.put(UpfileModel.FIELD_PL_UUID, model.getPl_uuid()); + paraMap.put(UpfileModel.FIELD_SHAPE_UUID, model.getShape_uuid()); + paraMap.put(UpfileModel.FIELD_FILENAME, model.getFileName()); + paraMap.put(UpfileModel.FIELD_DOWNLOAD, model.getDownload()); + paraMap.put(UpfileModel.FIELD_TYPE, model.getType()); + paraMap.put(UpfileModel.FIELD_CREATEUSER, model.getCreateUser()); + paraMap.put(UpfileModel.FIELD_CREATETIME, model.getCreateTime()); + if (model.getSecurityLevel()!=null){ + paraMap.put(UpfileModel.FIELD_SECURITY_LEVEL,model.getSecurityLevel()); + } + String sql = DBSql.getInsertStatement(UpfileModel.DATABASE_ENTITY, paraMap); + result = DBSql.update(sql.toString(), paraMap); + return result; + } + + /** + * 按条件进行更新 + * @param model + * @return + */ + public int update(UpfileModel model){ + List args = new ArrayList<>(); + StringBuffer sql = new StringBuffer("update " +UpfileModel.DATABASE_ENTITY+" set "); + if (null != model.getPl_uuid()){ + sql.append(UpfileModel.FIELD_PL_UUID + "=?,"); + args.add(model.getPl_uuid()); + } + if (null != model.getShape_uuid()){ + sql.append(UpfileModel.FIELD_SHAPE_UUID + "=?,"); + args.add(model.getShape_uuid()); + } + if (null != model.getFileName()){ + sql.append(UpfileModel.FIELD_FILENAME +"=?,"); + args.add(model.getFileName()); + } + if (null != model.getSecurityLevel()){ + sql.append(UpfileModel.FIELD_SECURITY_LEVEL + "=?,"); + args.add(model.getSecurityLevel()); + } + int index = sql.lastIndexOf(","); + sql.setCharAt(index,' '); + sql.append("where "+UpfileModel.FIELD_UUID+"=?"); + args.add(model.getUuid()); + return DBSql.update(sql.toString(), args.toArray()); + } + public boolean batchInsert(List list) { + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + String sql = "insert into " + UpfileModel.DATABASE_ENTITY + "(" + UpfileModel.FIELD_UUID + "," + UpfileModel.FIELD_PL_UUID + "," + UpfileModel.FIELD_SHAPE_UUID + "," + UpfileModel.FIELD_TYPE + "," + UpfileModel.FIELD_FILENAME + "," + UpfileModel.FIELD_DOWNLOAD + "," + UpfileModel.FIELD_CREATEUSER + "," + UpfileModel.FIELD_CREATETIME +","+UpfileModel.FIELD_SECURITY_LEVEL+")" + " VALUES(?,?,?,?,?,?,?,?,?)"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (int i = 0; i < list.size(); i++) { + UpfileModel model = list.get(i); + prest.setString(1, model.getUuid()); + prest.setString(2, model.getPl_uuid()); + prest.setString(3, model.getShape_uuid()); + prest.setString(4, model.getType()); + prest.setString(5, model.getFileName()); + prest.setInt(6, model.getDownload()); + prest.setString(7, model.getCreateUser()); + prest.setTimestamp(8, model.getCreateTime()); + if (null != model.getSecurityLevel()){ + prest.setInt(9,model.getSecurityLevel()); + }else { + prest.setInt(9,-1); + } + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, prest, null); + } + return false; + } + + public List search(String sqlWhere) { + StringBuffer sql = new StringBuffer(); + sql.append("select * from ").append(UpfileModel.DATABASE_ENTITY).append(" where 1 = 1 ").append(sqlWhere); + try { + return DBSql.query(sql.toString(), new UpfileModelMapper()); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return new ArrayList(); + } + + private class UpfileModelMapper implements RowMapper { + public UpfileModel mapRow(ResultSet rs, int arg1) throws SQLException { + UpfileModel model = new UpfileModel(); + try { + model.setUuid(rs.getString(UpfileModel.FIELD_UUID)); + model.setPl_uuid(rs.getString(UpfileModel.FIELD_PL_UUID)); + model.setShape_uuid(rs.getString(UpfileModel.FIELD_SHAPE_UUID)); + model.setType(rs.getString(UpfileModel.FIELD_TYPE)); + model.setFileName(rs.getString(UpfileModel.FIELD_FILENAME)); + model.setCreateUser(rs.getString(UpfileModel.FIELD_CREATEUSER)); + model.setCreateTime(rs.getTimestamp(UpfileModel.FIELD_CREATETIME)); + model.setDownload(rs.getInt(UpfileModel.FIELD_DOWNLOAD)); + //文件密级 + model.setSecurityLevel(rs.getInt(UpfileModel.FIELD_SECURITY_LEVEL)); + // model.setFileType(rs.getString(UpfileModel.FIELD_FILETYPE)); + + } catch (SQLException e) { + e.printStackTrace(); + } + return model; + + } + } + + public UpfileModel record2Model(ResultSet rs) { + UpfileModel model = new UpfileModel(); + try { + model.setUuid(rs.getString(UpfileModel.FIELD_UUID)); + model.setPl_uuid(rs.getString(UpfileModel.FIELD_PL_UUID)); + model.setShape_uuid(rs.getString(UpfileModel.FIELD_SHAPE_UUID)); + model.setType(rs.getString(UpfileModel.FIELD_TYPE)); + model.setFileName(rs.getString(UpfileModel.FIELD_FILENAME)); + model.setDownload(rs.getInt(UpfileModel.FIELD_DOWNLOAD)); + } catch (SQLException e) { + e.printStackTrace(); + } + return model; + + } + + public int delete(String uuid) { + int result = 0; + StringBuffer sql = new StringBuffer(); + sql.append("delete from ").append(UpfileModel.DATABASE_ENTITY).append(" where id = '" + uuid + "'"); + result = DBSql.update(sql.toString()); + return result; + } + + public int deleteByShape(String sqlWhere) { + int result = 0; + StringBuffer sql = new StringBuffer(); + sql.append("delete from ").append(UpfileModel.DATABASE_ENTITY).append(" where 1 = 1 ").append(sqlWhere); + result = DBSql.update(sql.toString()); + return result; + } + + public UpfileModel get(String uuid) { + List search = search(" and id ='" + uuid + "'"); + return search.size() == 0 ? null : search.get(0); + } + + // 查询某个模型的所有附件 + public List searchByRepositoryId(String repositoryId) { + return search(" AND PALREPOSITORYID='" + repositoryId + "'"); + } + + public List searchByRepositoryId(String repositoryId, String type) { + StringBuffer sqlWhere = new StringBuffer(); + if (!UtilString.isEmpty(type)) { + sqlWhere.append(" and PALREPOSITORYID ='").append(repositoryId).append("' and FILETYPE='").append(type).append("'"); + } + return search(sqlWhere.toString()); + } + + /** + * 按照条件查询 + * @param repositoryId + * @param shapeId + * @param type f,s + * @return + */ + public List search(String repositoryId, String shapeId, String type) { + StringBuffer sql = new StringBuffer(); + sql.append("select * from ").append(UpfileModel.DATABASE_ENTITY).append(" where 1 = 1 "); + Map param = new HashMap(); + if (UtilString.isNotEmpty(repositoryId)) { + sql.append(" and PALREPOSITORYID=:PALREPOSITORYID"); + param.put("PALREPOSITORYID", repositoryId); + } + if (UtilString.isNotEmpty(type)) { + sql.append(" and FILETYPE=:FILETYPE"); + param.put("FILETYPE", "file".equals(type) ? "f" : "shape".equals(type) ? "s" : type); + } + if (UtilString.isNotEmpty(shapeId)) { + sql.append(" and SHAPEID=:SHAPEID"); + param.put("SHAPEID", shapeId); + } + sql.append(" ORDER BY " + UpfileModel.FIELD_CREATETIME + " DESC"); + return DBSql.query(sql.toString(), param, new UpfileModelMapper()); + } + + /** + * 获取关联附件 + * + * @param uuid + * @param shapeId + * @param type + * @return + * @author zhangming + */ + @Deprecated + public List getRelationUpfile(String uuid, String shapeId, String type) { + String sql = "SELECT f.* FROM APP_ACT_COE_PAL_UPFILE f, APP_ACT_COE_PAL_SHAPE_RLAT r WHERE r.FILEID=? AND f.PALREPOSITORYID = r.RELATIONFILEID AND f.SHAPEID = r.RELATIONSHAPEID"; + if (type.equals("file")) { + return DBSql.query(sql, new UpfileModelMapper(), new Object[] { uuid }); + } else { + sql += " AND r.SHAPEID=?"; + return DBSql.query(sql, new UpfileModelMapper(), new Object[] { uuid, shapeId }); + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/model/UpfileModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/model/UpfileModel.java new file mode 100644 index 00000000..2a9a5d78 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/model/UpfileModel.java @@ -0,0 +1,154 @@ +/** + * + */ +package com.actionsoft.apps.coe.pal.pal.repository.upfile.model; + +import java.sql.Timestamp; + +/** + * @author 作者: renmm + * @version 创建时间:2014-4-8 + * + */ +public class UpfileModel { + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_UPFILE"; + public static final String FIELD_UUID = "ID"; + public static final String FIELD_PL_UUID = "PALREPOSITORYID"; + public static final String FIELD_SHAPE_UUID = "SHAPEID"; + public static final String FIELD_TYPE = "FILETYPE"; + public static final String FIELD_FILENAME = "FILENAME"; + public static final String FIELD_DOWNLOAD = "DOWNLOAD"; + //文件密级 + public static final String FIELD_SECURITY_LEVEL = "SECURITYLEVEL"; + public static final String FIELD_CREATEUSER = "CREATEUSER"; + public static final String FIELD_CREATETIME = "CREATETIME"; + + private String uuid; + /** + * 文件uuid + */ + private String pl_uuid; + /** + * 图形uuid + */ + private String shape_uuid; + /** + * 分类:文件,图形 + */ + private String type; + /** + * 附件名称 + */ + private String fileName; + + /** + * 文件类型 + */ + private String fileType; + + /** + * 是否允许下载(0:不允许;1:允许) + */ + private int download; + + /** + * 文件密级(0: "普通", 1: "秘密", 2: "机密", 3: "绝密") + */ + private Integer securityLevel; + + /** + * 上传者 + */ + private String createUser; + + /** + * 上传时间 + */ + private Timestamp createTime; + + /** + * 下载url,数据库无该字段,后期自行拼装 + */ + private String downloadUrl; + + public String getDownloadUrl() { + return downloadUrl; + } + + public void setDownloadUrl(String downloadUrl) { + this.downloadUrl = downloadUrl; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getPl_uuid() { + return pl_uuid; + } + + public void setPl_uuid(String pl_uuid) { + this.pl_uuid = pl_uuid; + } + + public String getShape_uuid() { + return shape_uuid; + } + + public void setShape_uuid(String shape_uuid) { + this.shape_uuid = shape_uuid; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public int getDownload() { + return download; + } + + public void setDownload(int download) { + this.download = download; + } + + public Integer getSecurityLevel() { + return securityLevel; + } + + public void setSecurityLevel(Integer securityLevel) { + this.securityLevel = securityLevel; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public Timestamp getCreateTime() { + return createTime; + } + + public void setCreateTime(Timestamp createTime) { + this.createTime = createTime; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/web/UpfileWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/web/UpfileWeb.java new file mode 100644 index 00000000..abb47557 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/upfile/web/UpfileWeb.java @@ -0,0 +1,889 @@ +/** + * + */ +package com.actionsoft.apps.coe.pal.pal.repository.upfile.web; + +import java.io.File; +import java.sql.Timestamp; +import java.util.*; + +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.server.DispatcherRequest; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.dc.DCProfileManager; +import com.actionsoft.bpms.server.fs.dc.DCUtil; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.constant.CoeFileConstant; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.dao.UpFileDao; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.model.UpfileModel; +import com.actionsoft.sdk.local.SDK; +import com.actionsoft.sdk.local.api.AppAPI; + +/** + * coe-附件处理web页面 + * + * @author 作者: renmm + * @version 创建时间:2014-4-8 + * + */ +public class UpfileWeb extends ActionWeb { + + private UserContext _uc; + + /** + * @param userContext + */ + public UpfileWeb(UserContext userContext) { + super(userContext); + _uc = userContext; + } + + /** + * coe-文件-上传附件-Portal-页面 + * @param pl_uuid + * @param shape_uuid + * @param type + * @return + */ + @Deprecated + public String upFilePortalHtml(String pl_uuid, String shape_uuid, String type) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(pl_uuid); + Map macroLibraries = new HashMap(); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("pl_uuid", pl_uuid); + macroLibraries.put("shape_uuid", shape_uuid); + macroLibraries.put("type", type); + macroLibraries.put("repositoryName", CoeFileConstant.TMP_UPFILE); + //三员管理下,默认文件上传目录 + if (HighSecurityUtil.isON()){ + macroLibraries.put("isHighSecurity", true); + HashMap securityMap = HighSecurityUtil.getObjSecurityMap(); + //筛选用户与文件密级 + Set entrySet = securityMap.keySet(); + Iterator iterator = entrySet.iterator(); + UserContext userContext = DispatcherRequest.getUserContext(); + while (iterator.hasNext()){ + String next = iterator.next(); + PALRepositoryModel plModel = null; + //流程文件switch,双重筛选密级 + if (HighSecurityUtil.fileSecuritySwitch()){ + plModel = model; + } + if (!HighSecurityUtil.hasSecurityLevel(userContext,Integer.parseInt(next),plModel)){ + iterator.remove(); + } + } + macroLibraries.put("securityOptions", JSON.toJSONString(securityMap)); + } + macroLibraries.put("appId", CoEConstant.APP_ID); + macroLibraries.put("userId", super.getContext().getUID()); + macroLibraries.put("readonly", model.isPublish()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.level.upfile.portal.htm", macroLibraries); + } + + public String addUpFile(String pl_uuid, String shape_uuid, String type, String download, String fileName,String securityLevel) { + UpfileModel model = new UpfileModel(); + UpFileDao dao = new UpFileDao(); + ResponseObject r = null; + model.setUuid(UUIDGener.getUUID()); + model.setPl_uuid(pl_uuid); + model.setShape_uuid(shape_uuid); + model.setDownload("1".equals(download) ? 1 : 0); + model.setCreateUser(super.getContext().getUID()); + model.setCreateTime(new Timestamp(System.currentTimeMillis())); + if("file".equals(type)) { + model.setType("f"); + } else { + model.setType("s"); + } + // model.setFileType(fileType); + model.setFileName(fileName); + //开启三员管理 + boolean on = HighSecurityUtil.isON(); + if (on) { + if (securityLevel.equals("")) { + //删除tmp目录数据 + this.removeTmpFile(model); + r = ResponseObject.newErrResponse().msg(""); + return r.toString(); + } + model.setSecurityLevel(Integer.parseInt(securityLevel)); + } + if (dao.create(model) > 0) { + if(on){ + //移动tmp文件到对应目录,删除tmp原始数据 + this.moveTmpFileToCOE(model); + } + r = ResponseObject.newOkResponse().msg(""); + r.put("uuid", model.getUuid()); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + if ("f".equals(model.getType())) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_UPLOAD, CoEOpLogConst.INFO_REPOSITORY_FILE_UPLOAD); + } else { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_UPLOAD, CoEOpLogConst.INFO_REPOSITORY_SHAPE_FILE_UPLOAD); + } + } + return r.toString(); + } + // 删除dc附件 + DCContext dcContext = getDCContext(model); + if (dcContext != null) { + dcContext.delete(); + } + r = ResponseObject.newErrResponse().msg(""); + return r.toString(); + } + + /** + * 设计器内批量上传附件处理 + * @param pl_uuid + * @param shape_uuid + * @param type + * @param download + * @param files + * @return + */ + public String addUpFile2(String pl_uuid, String shape_uuid, String type, String download, String files) { + JSONArray uuids = new JSONArray(); + UpFileDao dao = new UpFileDao(); + ResponseObject r = ResponseObject.newOkResponse(); + JSONArray fileArr = JSONArray.parseArray(files); + for (int i = 0; i < fileArr.size(); i++) { + JSONObject fileObj = fileArr.getJSONObject(i); + String fileName = fileObj.getString("name"); + String securityLevel = fileObj.getString("securityLevel"); + UpfileModel model = new UpfileModel(); + model.setUuid(UUIDGener.getUUID()); + model.setPl_uuid(pl_uuid); + model.setShape_uuid(shape_uuid); + model.setDownload("1".equals(download) ? 1 : 0); + model.setCreateUser(super.getContext().getUID()); + model.setCreateTime(new Timestamp(System.currentTimeMillis())); + if("file".equals(type)) { + model.setType("f"); + } else { + model.setType("s"); + } + model.setFileName(fileName); + //开启三员管理 + boolean on = HighSecurityUtil.isON(); + if (on) { + model.setSecurityLevel(Integer.parseInt(securityLevel)); + } + if (dao.create(model) > 0) { + uuids.add(model.getUuid()); + //移动tmp文件到对应目录,删除tmp原始数据 + this.moveTmpFileToCOE(model); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + if ("f".equals(model.getType())) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_UPLOAD, CoEOpLogConst.INFO_REPOSITORY_FILE_UPLOAD); + } else { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_UPLOAD, CoEOpLogConst.INFO_REPOSITORY_SHAPE_FILE_UPLOAD); + } + } + } + } + r.put("uuids", uuids); + return r.toString(); + } + + /** + * 删除tmp目录下对应文件 + * @param model + */ + private void removeTmpFile(UpfileModel model){ + DCContext dcContext = getTmpDCContext(model); + if (dcContext != null) { + try { + String path = dcContext.getPath(); + String fName = model.getFileName(); + String dirName = fName.substring(0, fName.lastIndexOf(".")); + String postfix = fName.substring(fName.lastIndexOf(".")); + if (!postfix.equals(".pdf")) { + UtilFile pdfFile = new UtilFile(path + dirName + ".pdf"); + if (pdfFile.exists()) { + UtilFile.removeFile(pdfFile); + } + } + UtilFile dir = new UtilFile(path + dirName); + if (dir.exists() && dir.isDirectory()) { + UtilFile.removeFile(dir); + } + dcContext.delete(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + /** + * 将tmp目录中文件移动到COE目录下,移动后删除tmp目录文件 + * @param model + */ + private void moveTmpFileToCOE(UpfileModel model){ + + DCContext tmpContext = getTmpDCContext(model); + DCContext coeContext = getDCContext(model); + if (tmpContext !=null && coeContext != null){ + String tmpPath = tmpContext.getPath(); + String coePath = coeContext.getPath(); + String fName= model.getFileName(); + try { + UtilFile.moveFile(new File(tmpPath+fName),new File(coePath+fName)); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + + /** + * 删除附件 + * + * @param uuid + * @return + */ + public String delete(String uuid) { + UpFileDao upFileDao = new UpFileDao(); + UpfileModel upfileModel = upFileDao.get(uuid); + ResponseObject r = null; + + int delete = upFileDao.delete(uuid); + if (delete > 0) { + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + if ("f".equals(upfileModel.getType())) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_REPOSITORY_FILE_DELETE); + } else { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_REPOSITORY_SHAPE_FILE_DELETE); + } + } + + DCContext dcContext = getDCContext(upfileModel); + if (dcContext != null) { + try { + String path = dcContext.getPath(); + String fileName = upfileModel.getFileName(); + String dirName = fileName.substring(0, fileName.lastIndexOf(".")); + String postfix = fileName.substring(fileName.lastIndexOf(".")); + if (!postfix.equals(".pdf")) { + UtilFile pdfFile = new UtilFile(path + dirName + ".pdf"); + if (pdfFile.exists()) { + UtilFile.removeFile(pdfFile); + } + } + UtilFile dir = new UtilFile(path + dirName); + if (dir.exists() && dir.isDirectory()) { + UtilFile.removeFile(dir); + } + dcContext.delete(); + } catch (Exception e) { + e.printStackTrace(); + upFileDao.create(upfileModel); + r = ResponseObject.newErrResponse().msg(""); + return r.toDataString(); + } + r = ResponseObject.newOkResponse().msg(""); + r.put("uuid", upfileModel.getUuid()); + return r.toString(); + } + } + r = ResponseObject.newOkResponse().msg(""); + return r.toString(); + } + + /** + * 附件在线阅读 + * + * @param uuid + * @return + * @author zhangming + */ + public String readFile(String uuid) { + UserContext me = super.getContext(); + ResponseObject ro = ResponseObject.newOkResponse(); + UpFileDao upfileDao = new UpFileDao(); + UpfileModel upfileModel = upfileDao.get(uuid); + DCContext dcContext = getDCContext(upfileModel); + String fileName = upfileModel.getFileName(); + AppAPI appAPI = SDK.getAppAPI(); + if (appAPI.isActive("com.actionsoft.apps.addons.onlinedoc")) { + String support = ""; + Map params1 = new HashMap(); + params1.put("sid", me.getSessionId()); + String aslp1 = "aslp://com.actionsoft.apps.addons.onlinedoc/getSupportType"; + ResponseObject responseObject1 = appAPI.callASLP(appAPI.getAppContext(CoEConstant.APP_ID), aslp1, + params1); + if (responseObject1 != null) { + if (responseObject1.isOk()) { + if (responseObject1.toJsonObject().get("data") != null) { + support = responseObject1.toJsonObject().getJSONObject("data").optString("supportType"); + } + } else { + return ResponseObject.newErrResponse(responseObject1.getMsg()).toString(); + } + } + String suffix = fileName.substring(fileName.lastIndexOf(".") + 1); + if (support.contains(suffix)) { + String aslp = "aslp://com.actionsoft.apps.addons.onlinedoc/filePreview"; + Map params = new HashMap(); + params.put("sid", me.getSessionId()); + params.put("fileNameOriginal", fileName); + // 文件DC + params.put("sourceDc", dcContext); + params.put("isShowDefaultToolbar", true); + params.put("isCopy", true); + params.put("isPrint", true); + //download权限判断依据:1.支持下载 + if(upfileModel.getDownload() == 1) { + params.put("isDownload", true); + } else { + params.put("isDownload", false); + } + params.put("isShowBackbtn", false); + // 文件是否加密(为了解决存储模型附件组件有一个是否加密属性) + params.put("isEncrypt", false); + ResponseObject responseObject = appAPI.callASLP(appAPI.getAppContext(CoEConstant.APP_ID), aslp, + params); + if (responseObject != null) { + if (responseObject.isOk()) { + String url = responseObject.get("url").toString(); + ro.put("url", url); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + if ("f".equals(upfileModel.getType())) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_ACCESS, CoEOpLogConst.INFO_REPOSITORY_FILE_ACCESS); + } else { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_ACCESS, CoEOpLogConst.INFO_REPOSITORY_SHAPE_FILE_ACCESS); + } + } + + } else { + ro = ResponseObject.newErrResponse(responseObject.getMsg()); + } + } + } else { + ro.put("url", dcContext.getDownloadURL()); + ro.put("noSupport", true); + } + } else { + ro = ResponseObject.newErrResponse("文档转换服务不可用"); + } + return ro.toString(); + } + + /** + * 加载附件 + * + * @param pl_uuid + * @param shape_uuid + * @param type + * @return + */ + public String loadUpFiles(String pl_uuid, String shape_uuid, String type, String uuids, String wsId, String teamId) { + StringBuffer sqlWhere = new StringBuffer(); + UpFileDao upFileDao = new UpFileDao(); + if ("file".equals(type)) { + type = "f"; + sqlWhere.append(" and PALREPOSITORYID ='").append(pl_uuid).append("' and FILETYPE='").append(type) + .append("'"); + } else { + if ("".equals(uuids)) { + return ""; + } + String[] split = uuids.split(","); + sqlWhere.append(" and PALREPOSITORYID ='").append(pl_uuid).append("' AND SHAPEID IN ("); + for (int i = 0, size = split.length; i < size; i++) { + if (i == size - 1) { + sqlWhere.append("'").append(split[i]).append("'"); + break; + } + sqlWhere.append("'").append(split[i]).append("'").append(","); + } + sqlWhere.append(")"); + } + List search = upFileDao.search(sqlWhere.toString()); + //三员管理模式下,过滤文件密级高于用户密级不显示 + if(HighSecurityUtil.isON()){ + PALRepositoryQueryAPIManager.getInstance().upFileSecurityFilter(this._uc,search); + } + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray list = new JSONArray(); + if (search != null && search.size() > 0) { + for (UpfileModel model : search) { + JSONObject object = JSONObject.parseObject(JSON.toJSONString(model)); + String downloadURL = ""; + DCContext dcContext = getDCContext(model); + if (dcContext != null) { + downloadURL = dcContext.getDownloadURL() + "&isInline=false"; + } + object.put("url", downloadURL); + list.add(object); + } + } + ro.put("list", list); + CoeCooperationAPIManager.getInstance().queryCooperationMemberActionPerm(teamId, _uc.getUID(), ro); + PALRepositoryQueryAPIManager.getInstance().checkHighSecurity(pl_uuid,ro); + return ro.toString(); + } + + /** + * 三员管理加载全部附件,包含未标密 + * @param pl_uuid + * @param shape_uuid + * @param type + * @param uuids + * @param wsId + * @param teamId + * @return + */ + public String loadUpFilesAll(String pl_uuid, String shape_uuid, String type, String uuids, String wsId, String teamId) { + StringBuffer sqlWhere = new StringBuffer(); + UpFileDao upFileDao = new UpFileDao(); + //获取最新version 流程 + PALRepositoryModel versionModel = null; + List repositoryModels = PALRepositoryCache.getByVersionId(wsId, pl_uuid); + for (PALRepositoryModel model:repositoryModels){ + if (model.isUse()){ + versionModel = model; + } + } + if ("file".equals(type)) { + sqlWhere.append(" and PALREPOSITORYID ='").append(null == versionModel?pl_uuid:versionModel.getId()).append("'"); + } else { + if ("".equals(uuids)) { + return ""; + } + String[] split = uuids.split(","); + sqlWhere.append(" and PALREPOSITORYID ='").append(null == versionModel?pl_uuid:versionModel.getId()).append("' AND SHAPEID IN ("); + for (int i = 0, size = split.length; i < size; i++) { + if (i == size - 1) { + sqlWhere.append("'").append(split[i]).append("'"); + break; + } + sqlWhere.append("'").append(split[i]).append("'").append(","); + } + sqlWhere.append(")"); + } + List search = upFileDao.search(sqlWhere.toString()); + //三员管理模式下,过滤文件密级高于用户密级不显示 + if(HighSecurityUtil.isON()){ + PALRepositoryQueryAPIManager.getInstance().upFileSecurityUnmarkFilter(this._uc,search); + } + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray upfileList = new JSONArray(); + JSONArray shapeList = new JSONArray(); + if (search != null && search.size() > 0) { + for (UpfileModel model : search) { + JSONObject object = JSONObject.parseObject(JSON.toJSONString(model)); + String downloadURL = ""; + DCContext dcContext = getDCContext(model); + if (dcContext != null) { + downloadURL = dcContext.getDownloadURL() + "&isInline=false"; + } + object.put("url", downloadURL); + if (object.get("type").equals("f")){ + upfileList.add(object); + }else { + shapeList.add(object); + } + } + } + ro.put("upfileList", upfileList); + ro.put("shapeList", shapeList); + PALRepositoryQueryAPIManager.getInstance().checkHighSecurity(pl_uuid,ro); + return ro.toString(); + } + + /** + * 三员管理下更新附件密级 + * @param pl_uuid + * @param securityLevel + * @return + */ + public String updateUpFileSecurityLevel(String pl_uuid,String securityLevel){ + ResponseObject ro = null; + if (!HighSecurityUtil.isON()){ + ro = ResponseObject.newErrResponse().msg(""); + return ro.toString(); + } + UpfileModel model = new UpfileModel(); + model.setUuid(pl_uuid); + model.setSecurityLevel(Integer.parseInt(securityLevel)); + int update = new UpFileDao().update(model); + if (update>0){ + //更新成功 + ro = ResponseObject.newOkResponse(); + ro.put("updateNum",update); + return ro.toString(); + } + ro = ResponseObject.newErrResponse().msg(""); + return ro.toString(); + } + + /** + * 三员管理下获取第一个未标定密级文件所在树中path + * @param wsId + * @param teamId + * @return + */ + public String getUpfileUnmarkPath(String wsId,String teamId){ + ResponseObject ro = ResponseObject.newOkResponse(); + + if (!HighSecurityUtil.isON()){ + ro = ResponseObject.newErrResponse().msg("三员管理应用未开启"); + return ro.toString(); + } + + //小组权限 + Set versionIds = CoeProcessLevelUtil.getPermRepositoryVersionIds(wsId, teamId, _uc.getUID(), null, null); + + //获取目标model + PALRepositoryModel targetModel = this.findUpfileUnmarkModel(versionIds,wsId,teamId); + + // 获取文件路径 + List path = new ArrayList<>(); + if (null == targetModel) { + ro.put("path",path.toArray()); + return ro.toString(); + } + JSONArray repositoryPathData = CoeProcessLevelUtil.getRepositoryPath(targetModel.getId()); + // 前面大类不显示,根据小组进行级别处理 + for (int i = 0; i < repositoryPathData.size(); i++) { + JSONObject currObj = repositoryPathData.getJSONObject(i); + PALRepositoryModel currModel = PALRepositoryCache.getCache().get(currObj.getString("id")); + if (currModel != null && versionIds.contains(currModel.getVersionId())) { + path.add(currModel.getVersionId()); + } else if (currObj.getString("id").length() < 36) { + path.add(currObj.getString("id")); + } + } + + ro.put("path",path.toArray()); + return ro.toString(); + } + + /** + * 获取流程树中第一个附件未标密文件的流程文件model + * @param versionIds 小组权限下的流程文件uuid + * @param wsId + * @param teamId + * @return + */ + public PALRepositoryModel findUpfileUnmarkModel(Set versionIds,String wsId,String teamId){ + //获取资产库下所有流程 + List list = PALRepositoryQueryAPIManager.getInstance().getInuseRepositoryList(versionIds, wsId, teamId); + + PALRepositoryModel targetModel = null; + for (PALRepositoryModel model : list){ + //查询附件 是否存在未标定密级 + boolean flag = PALRepositoryQueryAPIManager.getInstance().checkUpfileSecurity(model); + if(flag){ + targetModel = model; + break; + } + } + return targetModel; + } + + + + + + /** + * 拼接文件名 + * + * @param model + * @return + */ + public String joinFileName(UpfileModel model) { + StringBuffer a = new StringBuffer(); + String downloadURL = ""; + String imgs = "*.jpg,*.jpeg,.gif,*.png,*.bmp";// 图片后缀 + String docs = "*.docs,*.docx";// doc文件 + String txt = ".txt"; + if (imgs.lastIndexOf(model.getFileName()) != -1) { + } else if (docs.lastIndexOf(model.getFileName()) != -1) { + } else if (txt.lastIndexOf(model.getFileName()) != -1) { + } else { + + } + // .append("") + DCContext dcContext = getDCContext(model); + if (dcContext != null) { + downloadURL = dcContext.getDownloadURL(); + } + a.append("").append(model.getFileName()).append(""); + return a.toString(); + } + + /** + * 获取dccontext + * + * @param model + * @return + */ + public DCContext getDCContext(UpfileModel model) { + DCContext dcContext = null; + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + if (dcProfile != null) { + if ("f".equals(model.getType())) {// 文件 + dcContext = new DCContext(super.getContext(), dcProfile, CoEConstant.APP_ID, "file", + model.getPl_uuid(), model.getFileName()); + } else {// 图形 + dcContext = new DCContext(super.getContext(), dcProfile, CoEConstant.APP_ID, model.getPl_uuid(), + model.getShape_uuid(), model.getFileName()); + } + } + return dcContext; + } + + /** + * 获取tmp目录对应DCContext + * @param model + * @return + */ + public DCContext getTmpDCContext(UpfileModel model){ + DCContext dcContext = null; + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.TMP_UPFILE); + if (dcProfile != null) { + if ("f".equals(model.getType())) {// 文件 + dcContext = new DCContext(super.getContext(), dcProfile, CoEConstant.APP_ID, "file", + model.getPl_uuid(), model.getFileName()); + } else {// 图形 + dcContext = new DCContext(super.getContext(), dcProfile, CoEConstant.APP_ID, model.getPl_uuid(), + model.getShape_uuid(), model.getFileName()); + } + } + return dcContext; + } + + /** + * 加载关联附件 + * + * @param uuid 模型Id + * @param shapeId 图形Id + * @param type file/shape(模型附件还是图形附件) + * @return + */ + public String loadRelationUpfiles(String uuid, String shapeId, String type) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray result = new JSONArray(); + // 获取属性的关联类型(relationType) + Map relationTypeMap = new HashMap<>(); + PALRepositoryModel m = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(m.getMethodId()); + if (palMethodModel != null) { + List attributes = palMethodModel.getAttributes(); + for (PALMethodAttributeModel model : attributes) { + String relationType = "shape"; + if ("relation".equals(model.getType())) { + JSONObject refObj = JSONObject.parseObject(model.getRef()); + relationType = refObj.containsKey("type") ? refObj.getString("type") : "shape"; + } + relationTypeMap.put(model.getKey(), relationType); + } + } + if (UtilString.isEmpty(shapeId) || "file".equals(type)) { + shapeId = ""; + } + Iterator iterator = DesignerShapeRelationCache.getByShapeId(uuid, shapeId); + List list = new ArrayList<>(); + UpFileDao dao = new UpFileDao(); + while (iterator.hasNext()) { + DesignerShapeRelationModel model = iterator.next(); + if (relationTypeMap.containsKey(model.getAttrId())) { + if("file".equals(relationTypeMap.get(model.getAttrId()))) {// 文件 + String versionId = model.getRelationFileId(); + PALRepositoryModel palModel = CoeProcessLevelUtil.getUseRepositoryByVersionId(versionId);// 获取工作版本 + if (palModel != null) { + // 文件:根据relationFileId 和 文件类型 查询 + List list2 = dao.search(palModel.getId(), null, type); + if (list2 != null && list2.size() > 0) { + list.addAll(list2); + } + } + } else {// 形状 + //形状:根据relationFileId 和 relationShapeId 查询 + List list2 = dao.search(model.getRelationFileId(), model.getRelationShapeId(), null); + if (list2 != null && list2.size() > 0) { + list.addAll(list2); + } + } + } + } + //三员管理模式过滤关联附件的密级显示 + if(HighSecurityUtil.isON()){ + PALRepositoryQueryAPIManager.getInstance().upFileSecurityFilter(this._uc,list); + } + Map upfileMap = new HashMap(); + if (list != null && list.size() > 0) { + Collections.sort(list, new Comparator() { + @Override + public int compare(UpfileModel o1, UpfileModel o2) { + return o2.getCreateTime().compareTo(o1.getCreateTime()); + } + }); + for (UpfileModel model : list) { + JSONObject object = JSONObject.parseObject(JSON.toJSONString(model)); + PALRepositoryModel palModel = PALRepositoryCache.getCache().get(model.getPl_uuid()); + if (palModel != null) { + object.put("modelName", palModel.getName()); + String downloadURL = ""; + DCContext dcContext = getDCContext(model); + if (dcContext != null) { + downloadURL = dcContext.getDownloadURL(); + } + object.put("url", downloadURL); + if (upfileMap.containsKey(model.getUuid())) { + continue; + } else { + result.add(object); + upfileMap.put(model.getUuid(), model.getUuid()); + } + } + } + } + ro.put("list", result); + PALRepositoryQueryAPIManager.getInstance().checkHighSecurity(uuid,ro); + return ro.toString(); + } + + /** + * 删除附件 + * + * @param uuid + * @param messages + */ + public void deleteShapeFile(String uuid, String messages) { + StringBuffer sb = new StringBuffer(); + JSONObject mesageObject = JSONObject.parseObject(messages); + Iterator iterator = mesageObject.keySet().iterator(); + while (iterator.hasNext()) { + String shapeId = iterator.next(); + JSONObject shape = JSONObject.parseObject(mesageObject.getString(shapeId)); + if ("remove".equals(shape.getString("action"))) { + sb.append("'").append(shapeId).append("'").append(","); + } + } + if (sb.length() > 0) { + String shapes = sb.substring(0, sb.length() - 1); + UpFileDao dao = new UpFileDao(); + String sqlWhere = " and " + UpfileModel.FIELD_PL_UUID + "='" + uuid + "' and " + + UpfileModel.FIELD_SHAPE_UUID + " in (" + shapes + ")"; + List list = dao.search(sqlWhere); + if (!UtilString.isEmpty(list)) { + int delete = dao.deleteByShape(sqlWhere); + if (delete > 0) { + for (UpfileModel model : list) { + DCContext dcContext = getDCContext(model); + if (dcContext != null) { + try { + String path = dcContext.getPath(); + String fileName = model.getFileName(); + String dirName = fileName.substring(0, fileName.lastIndexOf(".")); + String postfix = fileName.substring(fileName.lastIndexOf(".")); + if (!postfix.equals(".pdf")) { + UtilFile pdfFile = new UtilFile(path + dirName + ".pdf"); + if (pdfFile.exists()) { + UtilFile.removeFile(pdfFile); + } + } + UtilFile dir = new UtilFile(path + dirName); + if (dir.exists() && dir.isDirectory()) { + UtilFile.removeFile(dir); + } + dcContext.delete(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } + } + } + + /** + * 图形粘贴时附件的处理 + * + * @param shapeMap + * @return + */ + public String pasteShapeFile(String shapeMap, String userId) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray array = JSONArray.parseArray(shapeMap); + if (!array.isEmpty()) { + UpFileDao dao = new UpFileDao(); + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + if (dcProfile == null) { + return ro.toString(); + } + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + String copyShapeId = object.getString("copyShapeId"); + String pasteFileId = object.getString("pasteFileId"); + String pasteShapeId = object.getString("pasteShapeId"); + String sqlWhere = " and " + UpfileModel.FIELD_SHAPE_UUID + "='" + copyShapeId + "'" + " and " + UpfileModel.FIELD_TYPE + "='s' "; + List list = dao.search(sqlWhere); + if (list != null && list.size() > 0) { + List pasteList = new ArrayList<>(); + for (UpfileModel model : list) { + // 找到附件 + DCContext dcContext = getDCContext(model); + DCContext pasteDcContxt = new DCContext(super.getContext(), dcProfile, CoEConstant.APP_ID, pasteFileId, pasteShapeId, model.getFileName()); + if (dcContext != null && pasteDcContxt != null) { + if (DCUtil.copyDCFile(dcContext, pasteDcContxt)) { + // 更新数据库 + UpfileModel newModel = new UpfileModel(); + newModel.setUuid(UUIDGener.getUUID()); + newModel.setType(model.getType()); + newModel.setShape_uuid(pasteShapeId); + newModel.setPl_uuid(pasteFileId); + newModel.setFileName(model.getFileName()); + newModel.setDownload(model.getDownload()); + newModel.setCreateUser(userId); + newModel.setCreateTime(new Timestamp(System.currentTimeMillis())); + pasteList.add(newModel); + } else { + pasteDcContxt.delete(); + } + } + } + if (pasteList.size() > 0) { + dao.batchInsert(pasteList); + } + } + } + } + return ro.toString(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/CoeProcessLevelUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/CoeProcessLevelUtil.java new file mode 100644 index 00000000..3bca7340 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/CoeProcessLevelUtil.java @@ -0,0 +1,3813 @@ +package com.actionsoft.apps.coe.pal.pal.repository.util; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +import java.io.OutputStreamWriter; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.*; +import java.util.Map.Entry; + +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.pal.method.PALMethodManager; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.dao.*; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerShapeCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.PALDesignerFileCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.PALDesignerFileDragModelCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.manage.CoeDesignerAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.ws.web.VersionUtil; +import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; +import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; +import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.org.model.RoleModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.server.DispatcherRequest; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.dc.DCProfileManager; +import com.actionsoft.bpms.server.fs.dc.DCUtil; +import com.actionsoft.bpms.util.*; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeGroupModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.pal.output.util.OutputWordUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.*; +import com.actionsoft.apps.coe.pal.pal.repository.constant.PLRespositoryConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.CoeDesignerShapeAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.dao.DesignerShapeRelationDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.web.CoeDesignerWeb; +import com.actionsoft.apps.coe.pal.pal.repository.model.*; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.dao.UpFileDao; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.model.UpfileModel; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.web.UpfileWeb; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessLevelWeb; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; +import com.actionsoft.exception.AWSException; +import com.actionsoft.exception.ExceptionUtil; +import com.actionsoft.i18n.I18nRes; +import com.actionsoft.sdk.local.SDK; +import com.actionsoft.sdk.local.api.AppAPI; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; + +public class CoeProcessLevelUtil { + + /** + * 获取所有的固定属性 + * @return + */ + public static JSONArray getAllDefaultAttrData() { + JSONArray attrData = new JSONArray(); + // 名称 + JSONObject nameObj = new JSONObject(); + nameObj.put("type", "string"); + nameObj.put("readonly", false); + nameObj.put("id", PALRepositoryModelImpl.FIELD_PL_NAME); + nameObj.put("label", "名称"); + nameObj.put("value", ""); + nameObj.put("default", ""); + nameObj.put("attrSource", "default"); + attrData.add(nameObj); + // 分类 + JSONObject methodObj = new JSONObject(); + methodObj.put("type", "string"); + methodObj.put("readonly", true); + methodObj.put("id", PALRepositoryModelImpl.FIELD_PL_METHODID); + methodObj.put("label", "分类"); + methodObj.put("value", ""); + methodObj.put("default", ""); + methodObj.put("attrSource", "default"); + attrData.add(methodObj); + return attrData; + } + + // 里程碑 + public static String getPlM(String plMId) { + String plMName = ""; + if (plMId == null || plMId.equals("")) { + plMId = "-1"; + } + int tplMId = Integer.parseInt(plMId.trim()); + if (tplMId == 0) { + plMName = I18nRes.findValue(CoEConstant.APP_ID, "规划"); + } else if (tplMId == 1) { + plMName = I18nRes.findValue(CoEConstant.APP_ID, "梳理"); + } else if (tplMId == 2) { + plMName = I18nRes.findValue(CoEConstant.APP_ID, "设计"); + } else if (tplMId == 3) { + plMName = I18nRes.findValue(CoEConstant.APP_ID, "实施"); + } else if (tplMId == 4) { + plMName = I18nRes.findValue(CoEConstant.APP_ID, "测试"); + } else if (tplMId == 5) { + plMName = I18nRes.findValue(CoEConstant.APP_ID, "运行"); + } else if (tplMId == 6) { + plMName = I18nRes.findValue(CoEConstant.APP_ID, "暂停"); + } + return plMName; + } + + // 执行方式 + public static String getPlExecType(int plExecType) { + String plExecTypeName = ""; + if (plExecType == 0) { + plExecTypeName = I18nRes.findValue(CoEConstant.APP_ID, "未执行"); + } else if (plExecType == 1) { + plExecTypeName = I18nRes.findValue(CoEConstant.APP_ID, "制度执行"); + } else if (plExecType == 2) { + plExecTypeName = I18nRes.findValue(CoEConstant.APP_ID, "部分系统执行"); + } else if (plExecType == 3) { + plExecTypeName = I18nRes.findValue(CoEConstant.APP_ID, "完全系统执行"); + } + return plExecTypeName; + } + + // 层级 + public static String getPlIsBottom(int plType) { + String PlIsBottomName = ""; + if (plType == 0) { + PlIsBottomName = I18nRes.findValue(CoEConstant.APP_ID, "高层流程"); + } else if (plType == 1) { + PlIsBottomName = I18nRes.findValue(CoEConstant.APP_ID, "底层流程"); + } + return PlIsBottomName; + } + + // 系统名称 + public static String getSystemName(String sysId) { + List list = CoeProcessLevelSystemNameDaoFactory.createCoeProcessLevelSystemName().getCoeProcessLevelSystemName(); + String sysName = I18nRes.findValue(CoEConstant.APP_ID, "无系统支撑"); + if (sysId.equals("")) { + sysId = "-1"; + } + for (CoeProcessLevelSystemNameModel coeProcessLevelSystemNameModel : list) { + if (coeProcessLevelSystemNameModel.getUUId().equals(sysId)) { + sysName = coeProcessLevelSystemNameModel.getName(); + break; + } + } + return sysName; + } + + // 颜色标记 + public static String getPlColor(String color) { + String PlColorName = ""; + if ("#FFF".equals(color)) { + PlColorName = I18nRes.findValue(CoEConstant.APP_ID, "白色"); + } else if ("#FF99CC".equals(color)) { + PlColorName = I18nRes.findValue(CoEConstant.APP_ID, "粉红色"); + } else if ("#FBEC89".equals(color)) { + PlColorName = I18nRes.findValue(CoEConstant.APP_ID, "黄色"); + } else if ("#5BC0DE".equals(color)) { + PlColorName = I18nRes.findValue(CoEConstant.APP_ID, "浅蓝色"); + } else if ("#BEBEC5".equals(color)) { + PlColorName = I18nRes.findValue(CoEConstant.APP_ID, "浅灰色"); + } else if ("#999".equals(color)) { + PlColorName = I18nRes.findValue(CoEConstant.APP_ID, "灰色"); + } + return PlColorName; + } + + public static String getSystemName(String sysId, List list) { + String sysName = I18nRes.findValue(CoEConstant.APP_ID, "无系统支撑"); + if (sysId.equals("")) { + sysId = "-1"; + } + for (CoeProcessLevelSystemNameModel coeProcessLevelSystemNameModel : list) { + if (coeProcessLevelSystemNameModel.getUUId().equals(sysId)) { + sysName = coeProcessLevelSystemNameModel.getName(); + break; + } + } + return sysName; + } + + // 从缓存中获取编号 + public static String getProcessLevelNoByUUId(String uuid, String wsId) { + String plNo = "0"; + Map map = CoeProcessLevelNoCache.getInstance().getCoeProcessModelListByWsUUid(wsId); + if (map != null) { + // Iterator it = map.values().iterator(); + // while (it.hasNext()) { + // System.out.println(">>>>" + it.next()); + // } + plNo = map.get(uuid) == null ? "0" : (String) map.get(uuid); + } + return plNo; + } + + // 将当前数据经过缓存编号参照重新排列顺序 + public static List getListByProcessLevelPlNo(List list) { + List newList = new ArrayList(); + if (list.size() > 0) { + String wsUUId = list.get(0).getWsId(); + Map map = CoeProcessLevelNoCache.getInstance().getCoeProcessModelListByWsUUid(wsUUId); + if (map != null) { + Iterator it = map.keySet().iterator(); + while (it.hasNext()) { + String uuid = (String) it.next(); // 获取流程分级的uuid + // 将缓存中的数据顺序同步至新的list中 + for (PALRepositoryModel coe : list) { + if (uuid.equals(coe.getVersionId())) { + newList.add(coe); + break; + } + } + } + } + } + return newList; + } + + /** + * 分级是否生成图片 + * + * @return + */ + public static boolean hasImg(String uuid) { + PALRepositoryModel model = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + String pathname = model.getFilePath() + model.getId() + ".png"; + if (!PLRespositoryConstant.PL_METHID_PROCESS_BPMN2.equals(model.getMethodId())) { + return false; + } + UtilFile utilF = new UtilFile(pathname); + return utilF.exists(); + } + + /** + * 是否已关联BPMS + * + * @param uuid + * @return true PAL与BPMS已关联 + */ + public static boolean hasAssigned(String uuid) { + int result = queryCorrelateType(uuid); + return result == 0 || result == 1; + } + + /** + * 是否PAL流程在BPMS中运行但是尚未分配 + * @param uuid + * @return + */ + public static boolean hasMarked(String uuid) { + if (UtilString.isEmpty(uuid)) { + return false; + } + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + if (plModel == null) { + return false; + } + List list = PALRepositoryCache.getByVersionId(plModel.getVersionId()); + for (PALRepositoryModel p : list) { + CoeProcessLevelCorrelateModel model = CoeProcessLevelCorrelateCache.getCache().get(p.getId()); + if (model != null && model.getCorrelateType() == 1 && !model.isCorrelate()) { + return true; + } + } + return false; + } + + /** + * 获取流程id 通过流程版本id,版本号 + * + * @param appId + * @param uuid + * @param ver + * @return + */ + public static String getProcessDefIdByVer(String appId, String uuid, int ver) { + if (hasAssigned(uuid)) {// 已关联 + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + List list = new CoeProcessLevelCorrelateDao().getModelListByPlVersionId(model.getVersionId()); + for (CoeProcessLevelCorrelateModel cModel : list) { + ProcessDefinition definition = ProcessDefCache.getInstance().get(cModel.getPlAwsId()); + if (definition != null && definition.getVersionNo() == ver) { + return definition.getId(); + } + } + } + return ""; + } + + /** + * 获取分级与BPMN相关联的appId + * + * @param uuid + * @return + */ + public static String getAppId(String uuid) { + String result = ""; + String processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(uuid, true); + if (!UtilString.isEmpty(processDefId)) { + result = ProcessDefCache.getInstance().get(processDefId).getAppId(); + } + return result; + } + + public static ProcessDefinition getProcessDefinition(String appId, String uuid, int ver) { + if (hasAssigned(uuid)) {// 已分配 + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + List list = new CoeProcessLevelCorrelateDao().getModelListByPlVersionId(model.getVersionId()); + for (CoeProcessLevelCorrelateModel cModel : list) { + ProcessDefinition definition = ProcessDefCache.getInstance().get(cModel.getPlAwsId()); + if (definition != null && definition.getVersionNo() == ver) { + return definition; + } + } + } + return null; + } + + /** + * 根据BPMS端流程id查询关联数据 + * @param plAwsId + * @return + */ + public static CoeProcessLevelCorrelateModel queryCorrelateModelyPlAwsId(String plAwsId) { + return new CoeProcessLevelCorrelateDao().queryCorrelateModelyPlAwsId(plAwsId); + } + + /** + * 根据BPMS端流程版本id查询关联数据 + * @param plAwsVersionId + * @return + */ + public static List queryCorrelateModelsyPlAwsId(String plAwsVersionId) { + return new CoeProcessLevelCorrelateDao().queryCorrelateModelsyPlAwsId(plAwsVersionId); + } + + /** + * 校验PAL流程是否与BPMS端流程有关联关系 + * @param uuid PAL id + * @param checkBpmsExist 若有关联关系,是否进一步校验BPMS端流程是否存在,true:PAL关联了BPMS并且BPMS端被关联流程存在则返回true,false:PAL关联了BPMS流程(不管BPMS端流程是否存在)返回true + * @return + */ + public static boolean isCorrelateBpms(String uuid, boolean checkBpmsExist) { + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + if (plModel == null) + return false; + if (!"process.bpmn2".equals(plModel.getMethodId())) { + return false; + } + CoeProcessLevelCorrelateModel model = CoeProcessLevelCorrelateCache.getCache().get(uuid); + if (model == null) return false; + if (model.isCorrelate()) { + if (checkBpmsExist) {// 是否进一步校验bpms端流程是否存在 + if (ProcessDefCache.getInstance().get(model.getPlAwsId()) != null) { + return true; + } else { + return false; + } + } + return true; + } + return false; + } + + /** + * 校验PAL流程是否与BPMS有关联/推送关系 + * @param uuid PAL流程id + * @param checkBpmsExist 若有关联关系,是否进一步校验BPMS端流程是否存在,true:PAL关联了BPMS并且BPMS端被关联流程存在则返回BPMS流程id,false:PAL关联了BPMS流程(不管BPMS端流程是否存在)返回BPMS流程id + * @return 若是关联/推送流程,返回BPMS流程的ID,若不是或者BPMS端流程被删除,返回空字符串 + */ + public static String queryBpmsProcessDefIdByPalId(String uuid, boolean checkBpmsExist) { + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + if (plModel == null) { + return ""; + } + if (!"process.bpmn2".equals(plModel.getMethodId())) { + return ""; + } + CoeProcessLevelCorrelateModel model = CoeProcessLevelCorrelateCache.getCache().get(uuid); + if (model == null) return ""; + if (model.isCorrelate()) { + if (checkBpmsExist) {// 是否进一步校验bpms端流程是否存在 + if (ProcessDefCache.getInstance().get(model.getPlAwsId()) != null) { + return model.getPlAwsId(); + } else { + return ""; + } + } + return model.getPlAwsId(); + } + return ""; + } + + /** + * 保存coe与bpms流程之间的关联关系,供其他jar调用 + * @param object + * @return + */ + public static int coePalNoDistributionInsert(JSONObject object) { + String plId = object.getString("plId"); + String processDefId = object.getString("processDefId"); + String processDefVersionId = object.getString("processDefVersionId"); + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(plId); + int result = 0; + if (plModel != null) { + CoeProcessLevelCorrelateDao dao = new CoeProcessLevelCorrelateDao(); + // 删除旧有数据 + dao.deleteByPlVersionId(plModel.getVersionId()); + // 保存新数据 + CoeProcessLevelCorrelateModel correlateModel = new CoeProcessLevelCorrelateModel(); + correlateModel.setPlId(plModel.getId()); + correlateModel.setWsId(plModel.getWsId()); + correlateModel.setPlVersionId(plModel.getVersionId()); + correlateModel.setPlAwsId(processDefId); + correlateModel.setPlAwsVersionid(processDefVersionId); + correlateModel.setCorrelateType(1); + correlateModel.setCorrelate(true); + correlateModel.setExt1(""); + correlateModel.setExt1(""); + correlateModel.setExt1(""); + correlateModel.setExt1(""); + if (isPalManage()) { + correlateModel.setExt1("show"); + } + result = dao.insert(correlateModel); + } + return result; + } + + /** + * 获取PAL推送到BPMS但是尚未分配的流程-JSON方式 + * 返回通用的JSON,可供其他jar调用而不用引用相关类 + * @param versionId pal流程版本id + * @return JSONArray + */ + public static JSONArray getCoePalNoDistributionJSONByVersionId(String versionId) { + List list; + if (UtilString.isEmpty(versionId)) { + list = new CoeProcessLevelCorrelateDao().getCoePalNoDistributionList(); + } else { + list = new CoeProcessLevelCorrelateDao().getCoePalNoDistributionListByVersionId(versionId); + } + JSONArray result = new JSONArray(); + if (list != null && list.size() > 0) { + result = JSONArray.parseArray(JSON.toJSONString(list)); + } + return result; + } + + /** + * 检查关联流程源文件在AWS端是否存在,若不存在则删除 + * @param uuid + * @return + */ + public static String correlateResourceCheck(String uuid) { + List models = new ArrayList<>(); + models.add(PALRepositoryCache.getCache().get(uuid)); + return deleteInvalidCorrelate(models); + } + + /** + * PAL与BPMS关联后BPMS流程被删除的处理 + * @param models + * @return + */ + public static String deleteInvalidCorrelate(List models) { + // 关联多个版本但是在console端只删除了某一个版本时,该流程涉及的所有版本都断开关联,暂时这样处理 + StringBuffer invalidCorrelate = new StringBuffer(); + for (int i = 0; i < models.size(); i++) { + PALRepositoryModel model = models.get(i); + if (model != null && "process.bpmn2".equals(model.getMethodId())) { + boolean delInvalidCorrelate = CoeProcessLevelUtil.deleteInvalidCorrelate(model.getId()); + if (delInvalidCorrelate) { + invalidCorrelate.append(model.getName() + ","); + } + } + } + return invalidCorrelate.length() > 0 ? invalidCorrelate.substring(0, invalidCorrelate.length() - 1) : ""; + } + + /** + * 若PAL与BPMS已经具有关联关系但是BPMS端流程被删除,则删除关联关系 + * 若是PAL推送到BPMS或者BPMS关联到PAL,若BPMS端被某一流程删除,则PAL中的流程所有版本皆断开关联关系,暂时这样 + * @param uuid + */ + public static boolean deleteInvalidCorrelate(String uuid) { + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + boolean flag = false; + if (plModel != null) { + List list = PALRepositoryCache.getByVersionId(plModel.getVersionId()); + for (PALRepositoryModel m : list) { + CoeProcessLevelCorrelateModel model = CoeProcessLevelCorrelateCache.getCache().get(m.getId()); + if (model != null && model.isCorrelate() && ProcessDefCache.getInstance().get(model.getPlAwsId()) == null) { + flag = true; + } + } + if (flag) { + // 删除PAL流程下的所有版本关联关系 + int r = new CoeProcessLevelCorrelateDao().deleteByPlVersionId(plModel.getVersionId()); + SDK.getLogAPI().consoleInfo("[删除]BPMS关联到PAL的流程在BPMS端被删除,关联关系自动删除,删除数据条数[" + r + "]条,流程versionId:" + plModel.getVersionId()); + } + } + return flag; + } + + /** + * 查询关联类型 + * @param uuid PAL流程id + * @return int -1:未关联,0:BPMS关联PAL,1:推送且BPMS已分配,2:推送但BPMS未分配,若以2为判断依据,不准确,建议使用hasMarked方法 + */ + public static int queryCorrelateType(String uuid) { + int result = -1;// 未关联 + CoeProcessLevelCorrelateModel model = CoeProcessLevelCorrelateCache.getCache().get(uuid); + if (model != null) { + if (model.getCorrelateType() == 1) {// PAL推送至BPMS + if (model.isCorrelate()) { + result = 1;// 推送且已分配 + } else { + return 2;// 推送未分配,2只能代表当前流程为未分配,若想要查询当前流程所属版本的所有流程是否有已推送未分配,请使用hasMarked方法 + } + } else { + result = 0;// BPMS关联至PAL + } + } + return result; + } + + /** + * 获取版本,若PAL与BPMS关联,则获取关联的所有版本,若未关联,获取PAL数据 + * @return + */ + public static List queryPalRepositoryModelsByPalId(String uuid) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + if (model == null) { + return null; + } + if (isCorrelateBpms(uuid, true)) { + List palModels = new ArrayList(); + List list = new CoeProcessLevelCorrelateDao().getModelListByPlVersionId(model.getVersionId()); + PALRepository palDao = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + for (CoeProcessLevelCorrelateModel cModel : list) { + PALRepositoryModelImpl palModel = (PALRepositoryModelImpl) palDao.getInstance(cModel.getPlId()); + ProcessDefinition definition = ProcessDefCache.getInstance().get(cModel.getPlAwsId()); + if (palModel != null && definition != null) { + palModel.setVersion(definition.getVersionNo()); + palModels.add(palModel); + } + } + return palModels; + } else { + return PALRepositoryCache.getByVersionId(model.getVersionId()); + } + } + + /** + * 获取版本,若PAL与BPMS关联,则获取关联的流程并更新其版本号,若未关联,获取PAL数据 + * @return + */ + public static PALRepositoryModel queryPalRepositoryModelByPalId(String uuid) { + if (isCorrelateBpms(uuid, true)) { + PALRepository palDao = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + PALRepositoryModelImpl palModel = (PALRepositoryModelImpl)palDao.getInstance(uuid); + ProcessDefinition definition = ProcessDefCache.getInstance().get(CoeProcessLevelCorrelateCache.getCache().get(uuid).getPlAwsId()); + if (palModel != null && definition != null) { + palModel.setVersion(definition.getVersionNo()); + return palModel; + } + } else { + return PALRepositoryCache.getCache().get(uuid); + } + return null; + } + + /** + * 复制粘贴文件,创建新版本时对一些属性处理的公共方法 + * 包括关联属性、文件属性、文件特殊属性、文件形状附件 + * @param oldModel 被复制的模型 + * @param newModel 新的模型 + * @param mapNewUUID 新老模型的形状id关联关系 key:被复制的模型的形状id, valu:新的模型的形状id + */ + public static void copyRepositoryProperty(PALRepositoryModel oldModel, PALRepositoryModel newModel, Map mapNewUUID, UserContext _uc) { + new CopyRepositoryProperty().copyRepositoryProperty(oldModel, newModel, mapNewUUID, _uc); + } + + /** + * 复制模型时的属性处理 + * + */ + private static class CopyRepositoryProperty { + public void copyRepositoryProperty(PALRepositoryModel oldModel, PALRepositoryModel newModel, Map mapNewUUID, UserContext _uc) { + // 复制属性关联信息 + updateRelation(oldModel.getId(), newModel.getId(), mapNewUUID); + // 复制文件属性 + updateFileProperty(oldModel.getId(), newModel.getId()); + // 复制文件特殊属性(类似列表属性) + updateSpecialAttr(newModel.getWsId(), oldModel.getId(), newModel.getId()); + // 复制附件 + updateFile(oldModel.getId(), newModel.getId(), mapNewUUID, _uc); + } + + /** + * 处理附件 + * + * @param oldUUID + * @param newUUID + * @param mapNewUUID + * @author SUNLH + */ + private void updateFile(String oldUUID, String newUUID, Map mapNewUUID, UserContext _uc) { + UpfileWeb upfileWeb = new UpfileWeb(_uc); + UpFileDao upFileDao = new UpFileDao(); + StringBuffer sqlWhere = new StringBuffer(); + List dcContexts = new ArrayList<>(); + sqlWhere.append(" and PALREPOSITORYID = '").append(oldUUID).append("'"); + List search = upFileDao.search(sqlWhere.toString()); + if (search != null && search.size() > 0) { + for (int i = 0; i < search.size(); i++) { + DCContext oldDcContext = upfileWeb.getDCContext(search.get(i)); + if (mapNewUUID.containsKey(search.get(i).getShape_uuid())) { + search.get(i).setShape_uuid(mapNewUUID.get(search.get(i).getShape_uuid())); + } + search.get(i).setUuid(UUIDGener.getUUID()); + search.get(i).setPl_uuid(newUUID); + //search.get(i).setCreateUser(_uc.getUID()); //附件创建人使用当前登录人员,不做处理则使用原数据中的人员 + search.get(i).setCreateTime(new Timestamp(System.currentTimeMillis())); + DCContext newDcContext = upfileWeb.getDCContext(search.get(i)); + dcContexts.add(newDcContext); + DCUtil.copyDCFile(oldDcContext, newDcContext); + } + boolean result = upFileDao.batchInsert(search); + if (!result) {// 删除DC附件 + if (dcContexts != null && dcContexts.size() > 0) { + for (int i = 0; i < dcContexts.size(); i++) { + if (dcContexts.get(i) != null) { + dcContexts.get(i).delete(); + } + } + } + } + } + } + + // 处理文件特殊属性(列表形式的属性) + private void updateSpecialAttr(String wsId, String oldUUID, String newUUID) { + PALRepositorySpecialPropertyDao dao = new PALRepositorySpecialPropertyDao(); + List list = dao.getSpecialPropertysByPlid(wsId, oldUUID); + if (list != null && list.size() > 0) { + for (int i = 0; i < list.size(); i++) { + PALRepositorySpecialPropertyModel model = list.get(i); + model.setId(UUIDGener.getUUID()); + model.setPlId(newUUID); + dao.insert(model); + } + } + } + + // 复制文件属性 + private void updateFileProperty(String oldUuid, String newUuid) { + PALRepositoryPropertyDao repositoryPropertyDao = new PALRepositoryPropertyDao(); + List oldPropertyList = repositoryPropertyDao.getPropertysByPlid(oldUuid, ""); + List newPropertyList = new ArrayList(); + if (oldPropertyList != null && oldPropertyList.size() > 0) { + for (PALRepositoryPropertyModel propertyModel : oldPropertyList) { + propertyModel.setPlId(newUuid); + propertyModel.setId(UUIDGener.getUUID()); + newPropertyList.add(propertyModel); + } + } + repositoryPropertyDao.batchInsert(newPropertyList); + } + + /** + * 关联属性复制 + * @param olduuid + * @param uuId + * @param mapNewUUID + */ + private void updateRelation(String olduuid, String uuId, Map mapNewUUID) { + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + List oldModelList = dao.getModelListByFileId(olduuid); + for (DesignerShapeRelationModel oldModel : oldModelList) { + if (mapNewUUID.containsKey(oldModel.getShapeId())) { + DesignerShapeRelationModel newModel = new DesignerShapeRelationModel(); + newModel.setId(UUIDGener.getUUID()); + newModel.setFileId(uuId); + newModel.setShapeId(mapNewUUID.get(oldModel.getShapeId())); + newModel.setShapeText(oldModel.getShapeText()); + newModel.setAttrId(oldModel.getAttrId()); + newModel.setRelationFileId(oldModel.getRelationFileId()); + newModel.setRelationShapeId(oldModel.getRelationShapeId()); + newModel.setRelationShapeText(oldModel.getRelationShapeText()); + dao.insert(newModel); + } else if (UtilString.isEmpty(oldModel.getShapeId()) && !UtilString.isEmpty(oldModel.getRelationFileId())) { + DesignerShapeRelationModel newModel = new DesignerShapeRelationModel(); + newModel.setId(UUIDGener.getUUID()); + newModel.setFileId(uuId); + newModel.setShapeId(""); + newModel.setShapeText(""); + newModel.setAttrId(oldModel.getAttrId()); + newModel.setRelationFileId(oldModel.getRelationFileId()); + newModel.setRelationShapeId(oldModel.getRelationShapeId()); + newModel.setRelationShapeText(oldModel.getRelationShapeText()); + dao.insert(newModel); + } + } + } + + } + + + /** + * 更新PAL与BPMS之间的关联(含PAL推送到BPMS运行,BPMS关联到PAL梳理)关系 + * 由APP_ACT_COE_PROP表数据更新转换至APP_ACT_COE_PAL_CORRELATE + * 该方法使用之处:1.升级平台进行数据库更新时,2.PAL资产库备份数据还原时,3.PAL资产库导入时 都需要执行此方法将老数据转换为新数据 + */ + public static void updateCorrelateData () { + new UpdateCorrelateData().updateCorrelateData(); + } + + /** + * 迁移数据库表数据时的处理 + * + */ + private static class UpdateCorrelateData { + + private void updateCorrelateData() { + // 更新现有APP_ACT_COE_PAL_CORRELATE表数据 + updateCorrelate(); + // APP_ACT_COE_PROP数据转换到APP_ACT_COE_PAL_CORRELATE中 + transferPropertyToCorrelate(); + } + + // 转换数据 + private void transferPropertyToCorrelate() { + // 查询出未分配的数据,并转换 + transferCoeMarkDistributionData(); + // 查询出已分配的数据 + transferCoeMarkDistributedData(); + } + + private void transferCoeMarkDistributedData() { + CoeProcessLevelCorrelateDao dao = new CoeProcessLevelCorrelateDao(); + Set deletePlRids = new HashSet(); + Map map = CoePropertyUtil.getPropertysValue2("PROPERTYKEY like 'link_%'", null); + Iterator> iterator = map.entrySet().iterator(); + int count = 0; + StringBuilder sbBuilder = new StringBuilder(); + while (iterator.hasNext()) { + Entry entry = iterator.next(); + String key = entry.getKey(); + if (key.contains("link_app_")) { + continue; + } + String plRid = key.substring(5, key.length()); + String processDefId = entry.getValue(); + ProcessDefinition definition = ProcessDefCache.getInstance().get(processDefId); + if (definition != null) { + List processDeflist = ProcessDefCache.getInstance().getListOfProcessVersion(definition.getAppId(), definition.getVersionId()); + if (processDeflist != null) { + if (processDeflist.size() == 1) {// 一个版本 + PALRepositoryModel plModel = getCoeProcessLevelModelByRid(plRid); + if (plModel != null) { + this.insert(dao, plModel, definition); + } + } else {// 多个版本 + // 获取使用中的版本 + PALRepositoryModel plModel = getCoeProcessLevelModelByRid(plRid); + if (plModel != null) { + Collections.sort(processDeflist, new Comparator() { + + @Override + public int compare(ProcessDefinition o1, ProcessDefinition o2) { + return o1.getVersionNo() - o2.getVersionNo(); + } + }); + CoeDesignerWeb web = null; + for (int i = 0; i < processDeflist.size(); i++) { + ProcessDefinition pDefinition = processDeflist.get(i); + if (i == 0) { + this.insert(dao, plModel, pDefinition); + } else { + // 以plModel创建流程,然后进行关联 + if (web == null) { + web = new CoeDesignerWeb(UserContext.fromUID("admin")); + } + web.createNewCorrelateProcessVersion(plModel.getId(), pDefinition.getId(), 1); + count++; + String plId = PALRepositoryQueryAPIManager.getInstance().queryPlIdByPlAwsId(pDefinition.getId()); + sbBuilder.append(PALRepositoryCache.getCache().get(plId).getName() + VersionUtil.getVersionStrV(PALRepositoryCache.getCache().get(plId).getVersion())).append(","); + } + } + PALRepository repository = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + String versionId = plModel.getVersionId(); + String uuid = plModel.getId(); + String useProcessDefId = CoePropertyUtil.getPropertyValue("use_" + plRid); + if (!UtilString.isEmpty(useProcessDefId) && ProcessDefCache.getInstance().get(useProcessDefId) != null) { + uuid = PALRepositoryQueryAPIManager.getInstance().queryPlIdByPlAwsId(useProcessDefId); + } + repository.updateStateOfVersionUuid(versionId);// 更新所有的为0 + repository.updateUseStateOfVersionUuid(uuid);// 更新当前版本为使用状态 + } + } + } + } + // 删除数据 + deletePlRids.add(plRid); + } + // 删除老数据 + deleteCoePropertyData(deletePlRids); + SDK.getLogAPI().consoleInfo("PAL与BPMS关联流程[已分配]数据转移[" + count + "]条"); + if (count > 0) { + SDK.getLogAPI().consoleInfo("PAL与BPMS关联流程[已分配]数据转移流程详情[" + (sbBuilder.length() > 0 ? sbBuilder.substring(0, sbBuilder.length() - 1) : "") + "]"); + } + } + + private void transferCoeMarkDistributionData() { + Set deletePlRids = new HashSet(); + Map map = CoePropertyUtil.getPropertysValue2("PROPERTYKEY like 'mark_%'", "0"); + Iterator iterator = map.keySet().iterator(); + CoeProcessLevelCorrelateDao dao = new CoeProcessLevelCorrelateDao(); + int count = 0; + StringBuilder sbBuilder = new StringBuilder(); + while (iterator.hasNext()) { + String key = iterator.next(); + String plRid = key.substring(5, key.length()); + // 根据关系字段查找正在使用的版本 + PALRepositoryModel plModel = getCoeProcessLevelModelByRid(plRid); + if (plModel != null) { + this.insert(dao, plModel, null); + count++; + sbBuilder.append(plModel.getName() + VersionUtil.getVersionStrV(plModel.getVersion())).append(","); + } + // 删除 + deletePlRids.add(plRid); + } + deleteCoePropertyData(deletePlRids); + SDK.getLogAPI().consoleInfo("PAL与BPMS关联流程[未分配]数据转移[" + count + "]条"); + if (count > 0) { + SDK.getLogAPI().consoleInfo("PAL与BPMS关联流程[未分配]数据转移详情[" + (sbBuilder.length() > 0 ? sbBuilder.substring(0, sbBuilder.length() - 1) : "") + "]"); + } + } + + private void deleteCoePropertyData(Set deletePlRids) { + if (deletePlRids != null && deletePlRids.size() > 0) { + for (String plRid : deletePlRids) { + CoePropertyUtil.deleteProperty("mark_" + plRid); + CoePropertyUtil.deleteProperty("link_" + plRid); + CoePropertyUtil.deleteProperty("link_app_" + plRid); + CoePropertyUtil.deleteProperty("use_" + plRid); + } + } + } + + private void insert(CoeProcessLevelCorrelateDao dao, PALRepositoryModel plModel, ProcessDefinition definition) { + CoeProcessLevelCorrelateModel model = new CoeProcessLevelCorrelateModel(); + model.setWsId(plModel.getWsId()); + model.setPlId(plModel.getId()); + model.setPlVersionId(plModel.getVersionId()); + model.setCorrelateType(1);// PAL推送到BPMS + if (definition == null) { + model.setCorrelate(false); + } else { + model.setPlAwsId(definition.getId()); + model.setPlAwsVersionid(definition.getVersionId()); + model.setCorrelate(true); + } + + dao.insert(model); + } + + /** + * 获取正在使用中的PAL流程 + * @param rid plRid字段 + * @return + */ + private PALRepositoryModel getCoeProcessLevelModelByRid(String rid) { + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + CoeWorkSpace coeWorkSpace = CoeWorkSpaceDaoFactory.createCoeWorkSpace(); + List list = coeProcessLevel.getCoeUseProcessLevelByRid(rid); + PALRepositoryModel plModel = null; + for (int i = 0; i < list.size(); i++) { + plModel = list.get(i); + CoeWorkSpaceModel model = (CoeWorkSpaceModel) coeWorkSpace.getInstance(plModel.getWsId()); + if (model.getIsUse() == 1 && plModel.isUse()) { + return plModel; + } + } + return null; + } + + /** + * 更新补全BPMS关联到PAL的数据,更新APP_ACT_COE_PAL_CORRELATE表数据 + */ + private void updateCorrelate() { + CoeProcessLevelCorrelateDao dao = new CoeProcessLevelCorrelateDao(); + + List list = dao.getEmptyPlVersionIdList(); + int count = 0; + if (list != null && list.size() > 0) { + for (CoeProcessLevelCorrelateModel model : list) { + String plId = model.getPlId(); + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(plId); + if (plModel == null) { + dao.deleteCorrlate(plId); + SDK.getLogAPI().consoleInfo("PAL与BPMS关联流程数据转移时PAL流程未找到[id:" + plId + "],无效关联数据删除,删除数据" + JSON.toJSONString(model)); + continue; + } + dao.repairCorrelateData(plModel.getId(), plModel.getVersionId(), 0, 1); + count++; + } + } + SDK.getLogAPI().consoleInfo("PAL与BPMS关联流程数据补全[" + count + "]条"); + } + } + + /** + * 创建RepositoryModel对象 + * @param no 编号 + * @param wsId 资产库id + * @param name 名称 + * @param orderIndex 顺序 + * @param parentId 父id + * @param category 分类 + * @param isUse 是否当前使用 + * @param version 版本号 + * @param isSystemFile 是否系统文件 + * @param methodId 小类 + * @param maxVersion + * @param level 层级 + * @param createUser 创建用户id + * @param modifyUser 修改用户id + * @return + */ + public static PALRepositoryModelImpl createPALRepositoryModel(String id, String plRid, String wsId, String name, String no, int orderIndex, String parentId, String category, boolean isUse, int version, String versionId, boolean isSystemFile, String methodId, String maxVersion, int level, String dutyDept, String dutyUser, String createUser, String modifyUser, Timestamp timestamp, String ext1, String ext2, String ext3, String ext4, String input, String output, String desc, String plRd, String plRp,Integer securityLevel) { + PALRepositoryModelImpl model = new PALRepositoryModelImpl(); + model.setId(id); + model.setPlRid(plRid); + model.setVersionId(versionId); + model.setWsId(wsId); + model.setName(name); + model.setNo(no); + model.setOrderIndex(orderIndex); + model.setParentId(parentId); + model.setNewParentId(parentId); + model.setMethodCategory(category); + model.setUse(isUse); + model.setVersion(version); + model.setSystemFile(isSystemFile); + model.setMethodId(methodId); + model.setHistoryMaxVersion(maxVersion); + model.setLevel(level); + model.setDutyDept(dutyDept); + model.setDutyUser(dutyUser); + model.setCreateDate(timestamp); + model.setModifyDate(timestamp); + model.setCreateUser(createUser); + model.setModifyUser(modifyUser); + model.setExt1(ext1); + model.setExt2(ext2); + model.setExt3(ext3); + model.setExt4(ext4); + model.setInput(input); + model.setOutput(output); + model.setDesc(desc); + model.setOwnerDept(plRd); + model.setOwnerUser(plRp); + model.setSecurityLevel(securityLevel); + return model; + } + + /** + * 以PAL的BPMN流程为中心进行流程管理 + * PAL流程关联BPM平台流程(PAL流程在BPM运行)之后,BPM端不可进行修改流程图结构,只能进行流程配置,不能对已经在BPM运行的PAL流程进行删除、复制、新建等操作 + * @return true 可以编辑,false 锁定图结构 + */ + public static boolean isPalManage() { + return SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_PAL_MANAGE", false); + } + + /** + * BPM端是否有编辑流程图结构权限 + * @return true 可以编辑,false 锁定图结构 + */ + public static boolean isBpmProcessEdit() { + return SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "BPM_PROCESS_EDIT", true); + } + + /** + * 是否显示在bpm运行按钮 + * @return + */ + public static boolean showBpmRunButton(PALRepositoryModel model) { + String value = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "PAL_TO_BPM_BUTTON"); + if (UtilString.isEmpty(value)) return false; + if (model == null) return false; + if (value.contains("all")) return true; + if (model.isApproval()) { + if (value.contains("approval")) { + return true; + } else { + return false; + } + } + if (model.isPublish()) { + if (value.contains("publish")) { + return true; + } else { + return false; + } + } + if (model.isStop()) { + if (value.contains("stop")) { + return true; + } else { + return false; + } + } + if (value.contains("designer")) { + return true; + } + return false; + } + +// public static List getPlRepositoryVersionCompareMessage(String versionId) { +// String no = "history_no"; +// List versions = PALRepositoryCache.getByVersionId(versionId); +// // 版本排序 +// Collections.sort(versions, new Comparator() { +// @Override +// public int compare(PALRepositoryModel o1, PALRepositoryModel o2) { +// return o2.getVersion() - o1.getVersion(); +// } +// }); +// if (versions != null) { +// +// } +// return null; +// } + + public static JSONObject getPlRepositoryCompareMessage(PALRepositoryModel currModel, PALRepositoryModel prevModel) { + PlRepositoryVersionCompare compare = new PlRepositoryVersionCompare(); + //文件属性 + List fileAttrCompare = compare.compareRepositoryProperty(currModel, prevModel); + //节点属性 + List shapeAttrCompare = compare.compareRepositoryShape(currModel, prevModel); + + JSONObject object = new JSONObject(); + object.put("fileAttrCompare", fileAttrCompare); + object.put("shapeAttrCompare", shapeAttrCompare); + return object; + } + + private static class PlRepositoryVersionCompare { + // 记录查询过的文件信息,避免多次IO查询 + private Map defineMap = new HashMap<>(); + + /** + * 对比文件属性 + * @param currModel + * @param prevModel + */ + private List compareRepositoryProperty(PALRepositoryModel currModel, PALRepositoryModel prevModel) { + List result = new LinkedList<>(); + // 对比文件扩展属性 + List extendList = PALRepositoryAttributeCache.getAttributeByMethodId(currModel.getWsId(), currModel.getMethodId()); + /* + * 对比文本/多行文本,下拉框/多选下拉框,关联属性 + */ + if (extendList != null && extendList.size() > 0) { + for (PALRepositoryAttributeModel model : extendList) { + if ("0".equals(model.getIsDelete())) { + if (model.getType().equalsIgnoreCase("string") || model.getType().equalsIgnoreCase("textarea")) {// 对比文本/多行文本,下拉框/多选下拉框 + // 获取属性内容 + PALRepositoryPropertyModel currPropertyModel = PALRepositoryPropertyCache.getPropertyByPropertyId(currModel.getId(), model.getAttrId()); + PALRepositoryPropertyModel prevPropertyModel = PALRepositoryPropertyCache.getPropertyByPropertyId(prevModel.getId(), model.getAttrId()); + String compareResult = compareTextContent(currPropertyModel.getPropertyValue(), prevPropertyModel.getPropertyValue()); + if (compareResult != null) { + result.add(assemblePropertyName(model.getAttrName()) + compareResult); + } + } else if (model.getType().equalsIgnoreCase("relation")) {// 对比PAL关联属性 + List currRelationModels = DesignerShapeRelationCache.getListByAttrId(currModel.getId(), "", model.getAttrId()); + List prevRelationModels = DesignerShapeRelationCache.getListByAttrId(prevModel.getId(), "", model.getAttrId()); + String compareResult = compareRelationShapeContent(currRelationModels, prevRelationModels); + if (compareResult != null) { + result.add(assemblePropertyName(model.getAttrName()) + compareResult); + } + } else if (model.getType().equalsIgnoreCase("awsorg")) {// 对比关联平台的关联属性 + List currRelationModels = DesignerShapeRelationCache.getListByAttrId(currModel.getId(), "", model.getAttrId()); + List prevRelationModels = DesignerShapeRelationCache.getListByAttrId(prevModel.getId(), "", model.getAttrId()); + String compareResult = compareRelationOrgShapeContent(currRelationModels, prevRelationModels); + if (compareResult != null) { + result.add(assemblePropertyName(model.getAttrName()) + compareResult); + } + } else {// 其余类型按照string类型进行对比 + // 获取属性内容 + PALRepositoryPropertyModel currPropertyModel = PALRepositoryPropertyCache.getPropertyByPropertyId(currModel.getId(), model.getAttrId()); + PALRepositoryPropertyModel prevPropertyModel = PALRepositoryPropertyCache.getPropertyByPropertyId(prevModel.getId(), model.getAttrId()); + String compareResult = compareTextContent(currPropertyModel.getPropertyValue(), prevPropertyModel.getPropertyValue()); + if (compareResult != null) { + result.add(assemblePropertyName(model.getAttrName()) + compareResult); + } + } + } + } + } + // 对比文件附件 + String compareResult = compareRepositoryUpfileFile(currModel, prevModel); + if (compareResult != null) { + result.add(assemblePropertyName("附件") + compareResult); + } + + return result; + } + + /** + * 对比节点数据 + * @param currModel + * @param prevModel + */ + private List compareRepositoryShape(PALRepositoryModel currModel, PALRepositoryModel prevModel) { + // 获取文件 + String prevDefinition = null; + if (defineMap.containsKey(prevModel.getId())) { + prevDefinition = defineMap.get(prevModel.getId()); + } else { + prevDefinition = PALRepositoryQueryAPIManager.getInstance().getProcessDefinition(null, prevModel.getId()); + defineMap.put(prevModel.getId(), prevDefinition); + } + List prevList = ShapeUtil.getShapeJsonToJsonObject(prevDefinition); + String currDefinition = null; + if (defineMap.containsKey(currModel.getId())) { + currDefinition = defineMap.get(currModel.getId()); + } else { + currDefinition = PALRepositoryQueryAPIManager.getInstance().getProcessDefinition(null, currModel.getId()); + defineMap.put(currModel.getId(), currDefinition); + } + List currList = ShapeUtil.getShapeJsonToJsonObject(currDefinition); + + Map prevMap = new HashMap<>(); + Map currMap = new HashMap<>(); + for (JSONObject obj : prevList) { + String id = obj.getString("id"); + prevMap.put(id, obj); + } + for (JSONObject obj : currList) { + String id = obj.getString("id"); + currMap.put(id, obj); + } + Set sameSet = new HashSet<>();// 记录前一版本与当前版本都存在的节点 + // 查找较上一版本新增节点 + Set addSet = new HashSet<>();// 记录新增节点 + Set currSet = currMap.keySet(); + for (String str : currSet) { + if (!prevMap.containsKey(str)) { + addSet.add(str); + } else { + sameSet.add(str); + } + } + // 查找较上一版本删除节点 + Set deleteSet = new HashSet<>();// 记录删除节点 + Set prevSet = prevMap.keySet(); + for (String str : prevSet) { + if (!currMap.containsKey(str)) { + deleteSet.add(str); + } + } + List result = new LinkedList<>(); + List addList = new ArrayList(); + for (String shapeId : addSet) { + JSONObject object = currMap.get(shapeId); + String text = assembleShapeName(object.getString("text")); + addList.add(text); + } + if (addList.size() > 0) { + Collections.sort(addList); + result.add("增加节点 " + StringUtils.join(addList, ",")); + } + List deleteList = new ArrayList<>(); + for (String shapeId : deleteSet) { + JSONObject object = prevMap.get(shapeId); + String text = assembleShapeName(object.getString("text")); + deleteList.add(text); + } + if (deleteList.size() > 0) { + Collections.sort(deleteList); + result.add("删除节点 " + StringUtils.join(deleteList, ",")); + } + + for (String id : sameSet) { + JSONObject currShape = currMap.get(id); + JSONObject prevShape = prevMap.get(id); + // 对比名称 + String currText = currShape.getString("text"); + String prevText = prevShape.getString("text"); + String curr = currText == null ? "" : currText.replace("\n", "").replace(" ", ""); + String prev = prevText == null ? "" : prevText.replace("\n", "").replace(" ", ""); + if (!curr.equals(prev)) { + result.add(assembleShapeName(prev) + "名称修改为" + assembleShapeName(curr)); + } + // 对比类型 + String currName = currShape.getString("name"); + String prevName = prevShape.getString("name"); + String currTitle = currShape.getString("title"); + String prevTitle = prevShape.getString("title"); + String nameCompareResult = compareIdContent(currName, prevName); + // 节点类型有变化,不再比对具体属性值内容 + boolean compareAttrContent = true; + if (nameCompareResult != null) { + + result.add(assembleShapeName(curr) + "节点类型" + transferCommonStr(nameCompareResult, currTitle, prevTitle, null)); + compareAttrContent = false; + } + // 对比节点描述 + JSONObject currAttributes = currShape.containsKey("dataAttributes") ? currShape.getJSONObject("dataAttributes") : new JSONObject(); + JSONObject prevAttributes = prevShape.containsKey("dataAttributes") ? prevShape.getJSONObject("dataAttributes") : new JSONObject(); + + if (compareAttrContent) {// 两个版本相同的节点类型相同时对比 + // 节点属性对比 + String shapeName = currShape.getString("name"); + List shapeAttributeModels = PALRepositoryShapeAttributeCache.getAttributeListByShapeName(currModel.getWsId(), currModel.getMethodId(), shapeName); + JSONArray currAttributesJsonArray = currAttributes.containsKey("attributesJsonArray") ? currAttributes.getJSONArray("attributesJsonArray") : new JSONArray(); + JSONArray prevAttributesJsonArray = prevAttributes.containsKey("attributesJsonArray") ? prevAttributes.getJSONArray("attributesJsonArray") : new JSONArray(); + for (PALRepositoryShapeAttributeModel shapeAttrModel : shapeAttributeModels) { + if (!UtilString.isEmpty(shapeAttrModel.getType())) { + String compareResult = compareShapeAttribute(shapeAttrModel, currModel, prevModel, id, currAttributesJsonArray, prevAttributesJsonArray); + if (compareResult != null) { + result.add(assembleShapeName(curr) + assemblePropertyName(shapeAttrModel.getAttrName()) + compareResult); + } + } + } + // 对比节点附件 + String compareResult = compareRepositoryUpfileFile(currModel, prevModel, id); + if (compareResult != null) { + result.add(assembleShapeName(curr) + assemblePropertyName("附件") + compareResult); + } + } + } + return result; + } + + /** + * 节点属性对比 + * @param model + * @param currModel + * @param prevModel + * @param shapeId + * @param currAttributesJsonArray + * @param prevAttributesJsonArray + * @return + */ + private String compareShapeAttribute(PALRepositoryShapeAttributeModel model, PALRepositoryModel currModel, PALRepositoryModel prevModel, String shapeId, JSONArray currAttributesJsonArray, JSONArray prevAttributesJsonArray) { + // 获取两个value + String attrId = model.getAttrId(); + if (model.getType().equalsIgnoreCase("relation")) {// 对比PAL关联属性 + List currRelationModels = DesignerShapeRelationCache.getListByAttrId(currModel.getId(), shapeId, attrId); + List prevRelationModels = DesignerShapeRelationCache.getListByAttrId(prevModel.getId(), shapeId, attrId); + return compareRelationShapeContent(currRelationModels, prevRelationModels); + } else if (model.getType().equalsIgnoreCase("awsorg")) {// 对比关联平台的关联属性 + List currRelationModels = DesignerShapeRelationCache.getListByAttrId(currModel.getId(), shapeId, attrId); + List prevRelationModels = DesignerShapeRelationCache.getListByAttrId(prevModel.getId(), shapeId, attrId); + return compareRelationOrgShapeContent(currRelationModels, prevRelationModels); + } else {// string/textarea/boolean/select/select_m等 + String currValue = ""; + String prevValue = ""; + for (Object object : currAttributesJsonArray) { + JSONObject obj = (JSONObject)object; + if (obj != null && obj.containsKey("key") && attrId.equals(obj.getString("key"))) { + currValue = obj.containsKey("value") ? obj.getString("value") : ""; + } + } + for (Object object : prevAttributesJsonArray) { + JSONObject obj = (JSONObject)object; + if (obj != null && obj.containsKey("key") && attrId.equals(obj.getString("key"))) { + prevValue = obj.containsKey("value") ? obj.getString("value") : ""; + } + } + if (model.getType().equals("select_m")) {// select_m多选 + if (currValue.equals(prevValue)) { + return null; + } else if ("".equals(currValue) && !"".equals(prevValue)) { + // delete + List prevList = new ArrayList<>(); + CollectionUtils.addAll(prevList, prevValue.split(",")); + Collections.sort(prevList); + return transferCommonStr("delete", null, StringUtils.join(prevList, ",")); + } else if (!"".equals(currValue) && "".equals(prevValue)) { + // add + List currList = new ArrayList<>(); + CollectionUtils.addAll(currList, currValue.split(",")); + return transferCommonStr("add", StringUtils.join(currList, ","), null); + } else { + List currList = new ArrayList<>(); + CollectionUtils.addAll(currList, currValue.split(",")); + List prevList = new ArrayList<>(); + CollectionUtils.addAll(prevList, prevValue.split(",")); + if (currList.size() == prevList.size()) { + boolean isSame = true; + for (String prev : prevList) { + if (!currList.contains(prev)) { + isSame = false; + break; + } + } + if (!isSame) { + // update + return transferCommonStr("update", StringUtils.join(currList, ","), StringUtils.join(prevList, ",")); + } + } else { + // update + return transferCommonStr("update", StringUtils.join(currList, ","), StringUtils.join(prevList, ",")); + } + } + } else {// other + return compareTextContent(currValue, prevValue); + } + } + return null; + } + + /** + * 拼接节点名称 + * @param text + * @return + */ + private String assembleShapeName(String text) { + return "【" + text + "】"; + } + + /** + * 对比责任部门-文件属性 + * @param currModel + * @param prevModel + * @return + */ + private String compareDutyDept(PALRepositoryModel currModel, PALRepositoryModel prevModel) { + String relationType = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_RELATION_TYPE); + if ("org".equals(relationType)) {//关联部门/人 + String currPlRd = "";// 责任部门 + String currPlRdId = ""; + Iterator currPlRDs = DesignerShapeRelationCache.getByAttrId(currModel.getId(), "", "plRD"); + if (currPlRDs.hasNext()) { + DesignerShapeRelationModel relationModel = currPlRDs.next(); + currPlRd = relationModel.getRelationShapeText(); + currPlRdId = relationModel.getRelationShapeId(); + } + + String prevPlRd = "";// 责任部门 + String prevPlRdId = ""; + Iterator prevPlRDs = DesignerShapeRelationCache.getByAttrId(prevModel.getId(), "", "plRD"); + if (prevPlRDs.hasNext()) { + DesignerShapeRelationModel relationModel = prevPlRDs.next(); + prevPlRd = relationModel.getRelationShapeText(); + prevPlRdId = relationModel.getRelationShapeId(); + } + String compareResult = compareIdContent(currPlRdId, prevPlRdId); + return transferCommonStr(compareResult, currPlRd, prevPlRd); + } else if ("address".equals(relationType)) {//地址簿部门/人 + String currPlDutyDept = ""; + currPlDutyDept = currModel.getDutyDept(); + String currPlDutyDeptName = currPlDutyDept; + if (!UtilString.isEmpty(currPlDutyDept)) { + if (SDK.getORGAPI().getDepartmentById(currPlDutyDept) != null) { + currPlDutyDeptName = SDK.getORGAPI().getDepartmentById(currPlDutyDept).getName(); + } + } + currPlDutyDeptName = UtilString.isEmpty(currPlDutyDeptName) ? "" : currPlDutyDeptName; + + String prevPlDutyDept = ""; + prevPlDutyDept = prevModel.getDutyDept(); + String prevplDutyDeptName = prevPlDutyDept; + if (!UtilString.isEmpty(prevPlDutyDept)) { + if (SDK.getORGAPI().getDepartmentById(prevPlDutyDept) != null) { + prevplDutyDeptName = SDK.getORGAPI().getDepartmentById(prevPlDutyDept).getName(); + } + } + prevplDutyDeptName = UtilString.isEmpty(prevplDutyDeptName) ? "" : prevplDutyDeptName; + String compareResult = compareIdContent(currPlDutyDept, prevPlDutyDept); + return transferCommonStr(compareResult, currPlDutyDeptName, prevplDutyDeptName); + } + return null; + } + + private String compareIdContent(String currStr, String prevStr) { + String curr = currStr == null ? "" : currStr.replace("\n", "").replace(" ", ""); + String prev = prevStr == null ? "" : prevStr.replace("\n", "").replace(" ", ""); + if (curr.equals(prev)) { + return null; + } + if ("".equals(prev) && !"".equals(curr)) {// 由空变为非空 + // 增加了内容xxx + return "add"; + } else if ("".equals(curr) && !"".equals(prev)) {// 由非空变为空 + // 删除了内容 + return "delete"; + } else {// 由prev变为curr + return "update"; + } + } + + /** + * 对比关联属性 + * @param currRelationModels + * @param prevRelationModels + */ + private String compareRelationShapeContent(List currRelationModels, List prevRelationModels) { + if ((currRelationModels == null || currRelationModels.size() == 0) && (prevRelationModels == null || prevRelationModels.size() == 0)) { + return null; + } else if ((currRelationModels == null || currRelationModels.size() == 0) && prevRelationModels.size() > 0) {// 删除了 + return transferCommonStr("delete", null, getRelationModelsText(prevRelationModels)); + } else if ((prevRelationModels == null || prevRelationModels.size() == 0) && currRelationModels.size() > 0) {// 增加了 + return transferCommonStr("add", getRelationModelsText(currRelationModels), null); + } else { + Set currSets = new HashSet<>(); + Set prevSets = new HashSet<>(); + for (DesignerShapeRelationModel model : currRelationModels) { + currSets.add(model.getRelationFileId() + "_" + model.getRelationShapeId()); + } + for (DesignerShapeRelationModel model : prevRelationModels) { + prevSets.add(model.getRelationFileId() + "_" + model.getRelationShapeId()); + } + if (currSets.size() == prevSets.size()) { + for (String prev : prevSets) { + if (!currSets.contains(prev)) { + return transferCommonStr("update", getRelationModelsText(currRelationModels), getRelationModelsText(prevRelationModels)); + } + } + } else { + return transferCommonStr("update", getRelationModelsText(currRelationModels), getRelationModelsText(prevRelationModels)); + } + } + return null; + } + + private String getRelationModelsText(List list) { + if (list == null || list.size() == 0) { + return null; + } + Set set = new HashSet<>(); + List result = new ArrayList<>(); + for (DesignerShapeRelationModel model : list) { + if (set.contains(model.getRelationFileId() + "_" + model.getRelationShapeId())) { + continue; + } + set.add(model.getRelationFileId() + "_" + model.getRelationShapeId()); + if (UtilString.isEmpty(model.getRelationShapeId())) { + String versionId = model.getRelationFileId(); + List list2 = PALRepositoryCache.getByVersionId(versionId); + for (PALRepositoryModel pModel : list2) { + if (pModel.isUse()) { + result.add(pModel.getName()); + break; + } + } + } else { + result.add(model.getRelationShapeText()); + } + } + Collections.sort(result); + return StringUtils.join(result, ","); + } + + /** + * 对比关联属性(关联到AWS平台的角色岗位部门员工) + * @param currRelationModels + * @param prevRelationModels + * @return + */ + private String compareRelationOrgShapeContent(List currRelationModels, List prevRelationModels) { + String commonStr = "00000000-0000-0000-0000-000000000000"; + if ((currRelationModels == null || currRelationModels.size() == 0) && (prevRelationModels == null || prevRelationModels.size() == 0)) { + return null; + } else if ((currRelationModels == null || currRelationModels.size() == 0) && prevRelationModels.size() > 0) {// 删除了 + return transferCommonStr("delete", null, getRelationOrgModelsText(prevRelationModels, commonStr)); + } else if ((prevRelationModels == null || prevRelationModels.size() == 0) && currRelationModels.size() > 0) {// 增加了 + return transferCommonStr("add", getRelationOrgModelsText(currRelationModels, commonStr), null); + } else { + Set currSets = new HashSet<>(); + Set prevSets = new HashSet<>(); + for (DesignerShapeRelationModel model : currRelationModels) { + if (commonStr.equals(model.getRelationFileId()) && commonStr.equals(model.getRelationShapeId())) { + JSONObject object = JSONObject.parseObject(model.getRelationShapeText()); + currSets.add(object.getString("id")); + } + } + for (DesignerShapeRelationModel model : prevRelationModels) { + if (commonStr.equals(model.getRelationFileId()) && commonStr.equals(model.getRelationShapeId())) { + JSONObject object = JSONObject.parseObject(model.getRelationShapeText()); + prevSets.add(object.getString("id")); + } + } + if (currSets.size() == prevSets.size()) { + for (String prev : prevSets) { + if (!currSets.contains(prev)) { + return transferCommonStr("update", getRelationOrgModelsText(currRelationModels, commonStr), getRelationOrgModelsText(prevRelationModels, commonStr)); + } + } + } else { + return transferCommonStr("update", getRelationOrgModelsText(currRelationModels, commonStr), getRelationOrgModelsText(prevRelationModels, commonStr)); + } + } + return null; + } + + /** + * 获取关联到AWS平台的角色部门员工 + * @param list + * @param commonStr + * @return + */ + private String getRelationOrgModelsText(List list, String commonStr) { + if (list == null || list.size() == 0) { + return null; + } + List resultList = new ArrayList<>(); + Set filter = new HashSet(); + for (DesignerShapeRelationModel model : list) { + if (commonStr.equals(model.getRelationFileId()) && commonStr.equals(model.getRelationShapeId())) { + JSONObject object = JSONObject.parseObject(model.getRelationShapeText()); + boolean flag = false; + // 查询最新名称 + if ("department".equals(object.getString("type"))) { + DepartmentModel dept = SDK.getORGAPI().getDepartmentById(object.getString("id")); + if (dept != null && !filter.contains(dept.getId())) { + flag = true; + object.put("name", dept.getName()); + filter.add(dept.getId()); + } + } + if ("user".equals(object.getString("type"))) { + UserModel user = SDK.getORGAPI().getUser(object.getString("id")); + if (user != null && !filter.contains(user.getUID())) { + flag = true; + object.put("name", user.getUserName()); + filter.add(user.getUID()); + } + } + if ("role".equals(object.getString("type"))) { + RoleModel roleModel = SDK.getORGAPI().getRoleById(object.getString("id")); + if (roleModel != null && !filter.contains(roleModel.getId())) { + flag = true; + object.put("name", roleModel.getName()); + filter.add(roleModel.getId()); + } + } + if ("position".equals(object.getString("type"))) {// 岗位 + RoleModel roleModel = SDK.getORGAPI().getRoleById(object.getString("id")); + if (roleModel != null && !filter.contains(roleModel.getId())) { + flag = true; + object.put("name", roleModel.getName()); + filter.add(roleModel.getId()); + } + } + if (flag) { + resultList.add(object); + } + } + } + List result = new ArrayList<>(); + if (resultList.size() > 0) { + // 排序 + Collections.sort(resultList, new Comparator() { + @Override + public int compare(JSONObject o1, JSONObject o2) { + if (o1.getString("type").equals(o2.getString("type"))) { + return (o1.containsKey("name") ? o1.getString("name") : "").compareTo(o2.containsKey("name") ? o2.getString("name") : ""); + } else { + JSONObject object = new JSONObject(); + object.put("department", 1); + object.put("user", 2); + object.put("role", 3); + object.put("position", 4); + return object.getIntValue(o1.getString("type")) - object.getIntValue(o2.getString("type")); + } + } + }); + for (JSONObject object : resultList) { + result.add(object.getString("name")); + } + } + return StringUtils.join(result, ","); + } + + private String compareTextContent(String currStr, String prevStr) { + String curr = currStr == null ? "" : currStr.replace("\n", "").replace(" ", ""); + String prev = prevStr == null ? "" : prevStr.replace("\n", "").replace(" ", ""); + if (curr.equals(prev)) { + return null; + } + if ("".equals(prev) && !"".equals(curr)) {// 由空变为非空 + // 增加了内容xxx + return transferCommonStr("add", curr, prev); + } else if ("".equals(curr) && !"".equals(prev)) {// 由非空变为空 + // 删除了内容 + return transferCommonStr("delete", curr, prev); + } else {// 由prev变为curr + return transferCommonStr("update", curr, prev); + } + } + + /** + * 拼接属性名称 + * @param propertyName + * @return + */ + private String assemblePropertyName(String propertyName) { + return "[" + propertyName + "]"; + } + + private String transferCommonStr(String type, String curr, String prev) { + return transferCommonStr(type, curr, prev, "内容"); + } + + private String transferCommonStr(String type, String curr, String prev, String keyword) { + String prefix = " ", suffix = " "; + keyword = keyword == null ? "" : keyword; + if ("add".equals(type)) { + return "增加了" + keyword + prefix + specialCharTransfer(curr); + } else if ("delete".equals(type)) { + return "删除了" + keyword + prefix + specialCharTransfer(prev); + } else if ("update".equals(type)) { + return keyword + "由" + prefix + specialCharTransfer(prev) + suffix + "修改为" + prefix + specialCharTransfer(curr); + } else { + return null; + } + } + + private String specialCharTransfer(String str) { + return OutputWordUtil.specialCharTransfer(str); + } + + // 对比节点附件 + private String compareRepositoryUpfileFile(PALRepositoryModel currModel, PALRepositoryModel prevModel, String currShapeId) { + // 获取文件属性 + String currSql = " AND " + UpfileModel.FIELD_PL_UUID + "='" + currModel.getId() + "' AND " + UpfileModel.FIELD_SHAPE_UUID + "='" + currShapeId + "' AND " + UpfileModel.FIELD_TYPE + "='s'"; + String prevSql = " AND " + UpfileModel.FIELD_PL_UUID + "='" + prevModel.getId() + "' AND " + UpfileModel.FIELD_SHAPE_UUID + "='" + currShapeId + "' AND " + UpfileModel.FIELD_TYPE + "='s'"; + UpFileDao dao = new UpFileDao(); + List currList = dao.search(currSql); + List prevList = dao.search(prevSql); + return compareUpfileModels(currList, prevList); + } + + // 对比文件附件 + private String compareRepositoryUpfileFile(PALRepositoryModel currModel, PALRepositoryModel prevModel) { + // 获取文件属性 + String currSql = " AND " + UpfileModel.FIELD_PL_UUID + "='" + currModel.getId() + "' AND " + UpfileModel.FIELD_TYPE + "='f'"; + String prevSql = " AND " + UpfileModel.FIELD_PL_UUID + "='" + prevModel.getId() + "' AND " + UpfileModel.FIELD_TYPE + "='f'"; + UpFileDao dao = new UpFileDao(); + List currList = dao.search(currSql); + List prevList = dao.search(prevSql); + return compareUpfileModels(currList, prevList); + } + + private String compareUpfileModels(List currList, List prevList) { + if ((currList == null || currList.size() == 0) && (prevList == null || prevList.size() == 0)) { + return null; + } else if ((currList == null || currList.size() == 0) && prevList.size() > 0) {// 删除了 + return transferCommonStr("delete", null, getUpfileModelsText(prevList), null); + } else if ((prevList == null || prevList.size() == 0) && currList.size() > 0) {// 增加了 + return transferCommonStr("add", getUpfileModelsText(currList), null, null); + } else { + List currNames = new ArrayList<>(); + List prevNames = new ArrayList<>(); + for (UpfileModel model : currList) { + currNames.add(model.getFileName()); + } + for (UpfileModel model : prevList) { + prevNames.add(model.getFileName()); + } + if (currNames.size() == prevNames.size()) { + for (String prev : prevNames) { + if (!currNames.contains(prev)) { + return transferCommonStr("update", getUpfileModelsText(currList), getUpfileModelsText(prevList), null); + } + } + } else { + return transferCommonStr("update", getUpfileModelsText(currList), getUpfileModelsText(prevList), null); + } + } + return null; + + } + + private String getUpfileModelsText(List list) { + if (list == null || list.size() == 0) { + return null; + } + List result = new ArrayList<>(); + for (UpfileModel model : list) { + result.add(model.getFileName()); + } + Collections.sort(result); + return StringUtils.join(result, ","); + } + } + + /** + * 获取更多特性树 + * @param wsId 资产库id + * @param methodId 模型分类 + * @param type file:文件属性,shape:形状属性 + * @param shapeName 形状名称,type为shape时有效,可为空 + * @return + */ + public static JSONArray getPalRepositoryMoreAttrConfig(String wsId, String methodId, String type, String shapeName) { + JSONArray result = new JSONArray(); + if (!UtilString.isEmpty(methodId)) { + List attrLists = null; + Set attrIds = new HashSet<>(); + Set groupIds = new HashSet<>(); + if ("file".equals(type)) { + attrLists = PALRepositoryAPIManager.getInstance().getValidAndUseAttributeModels(wsId, methodId); + } else if ("shape".equals(type)) { + attrLists = CoeDesignerShapeAPIManager.getInstance().getAllValidShapeAttributeModels(wsId, methodId); + } + for (PALMethodAttributeModel attr : attrLists) { + if (attr.getUse()) { + attrIds.add(attr.getKey()); + groupIds.add(attr.getGroupPath()); + } + } + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(methodId); + List group = palMethodModel.getGroup(); + Map groupMap = new HashMap(); + List> list = new ArrayList>(); + List> listParent = new ArrayList>(); + List> listChildren = new ArrayList>(); + Map childAndParentMap = new HashMap(); + if (group != null) { + for (PALMethodAttributeGroupModel groupModel : group) { + if (groupIds.contains(groupModel.getName())) { + groupMap.put(groupModel.getName(), groupModel); + Map map = new HashMap(); + map.put("id", groupModel.getName()); + map.put("name", groupModel.getDesc()); + map.put("open", false); + map.put("iconFont", ""); + String parentName = groupModel.getParentName(); + if (parentName != null && !"".equals(parentName.trim())) { + map.put("pid", parentName); + } + listParent.add(map); + } + } + for (PALMethodAttributeModel attrModel : attrLists) { + //更新属性名称 + String title = attrModel.getNewTitle(); + String groupPath = attrModel.getGroupPath(); + PALMethodAttributeGroupModel gm = groupMap.get(groupPath); + Map map = new HashMap(); + if (attrIds.contains(attrModel.getKey())) { + map.put("id", attrModel.getKey()); + map.put("name", title); + map.put("iconFont", ""); + map.put("pid", gm.getName()); + map.put("key", attrModel.getKey()); + map.put("value", attrModel.getValue()); + map.put("type", attrModel.getType()); + map.put("ref", attrModel.getRef()); + map.put("readonly", attrModel.getReadonly()); + map.put("groupPath", attrModel.getGroupPath()); + map.put("scope", attrModel.getScope()); + childAndParentMap.put(attrModel.getKey(), gm.getName()); + listChildren.add(map); + } + } + } + for (Map map1 : listParent) { + list.add(map1); + } + for (Map map : listChildren) { + list.add(map); + } + return JSONArray.parseArray(JSON.toJSONString(list)); + } + return result; + } + + /** + * 获取流程的更多特性数据 + * @param wsId + * @param uuid + * @param type file 文件属性更多特性,shape节点更多特性 + */ + public static JSONObject queryRepositoryMoreAttrData(String wsId, String uuid, String type) { + JSONObject result = new JSONObject(); + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + if (model == null) { + return result; + } + if ("file".equals(type)) { + // 获取文件配置属性 + List fileAttrConfig = PALRepositoryAttributeCache.getAttributeByMethodId(wsId, model.getMethodId()); + // 获取有效的文件配置 + List fileAttrConfigTmp = new ArrayList<>(); + if (fileAttrConfig != null && fileAttrConfig.size() > 0) { + for (PALRepositoryAttributeModel attrModel: fileAttrConfig) { + if ("0".equals(attrModel.getIsDelete())) { + fileAttrConfigTmp.add(attrModel); + } + } + } + fileAttrConfig = fileAttrConfigTmp; + // 获取每个属性的属性值 + // 获取文件属性值 + List list = PALRepositoryPropertyCache.getPropertyByPlId(uuid); + for (PALRepositoryAttributeModel attrModel:fileAttrConfig) { + String attrId = attrModel.getAttrId(); + String attrType = attrModel.getType(); + // 获取流程属性值 + if (!UtilString.isEmpty(attrType)) { + if ("relation".equals(attrType)) { + List relationList = DesignerShapeRelationCache.getListByAttrId(uuid, "", attrId); + JSONArray tmpArr = new JSONArray(); + if (relationList != null && relationList.size() > 0) { + Set tempStrs = new HashSet<>(); + for (DesignerShapeRelationModel rModel : relationList) { + String str = rModel.getFileId() + rModel.getShapeId() + rModel.getAttrId() + rModel.getRelationFileId() + rModel.getRelationShapeId(); + if (!tempStrs.contains(str)) { + JSONObject object = new JSONObject(); + object.put("relationFileId", rModel.getRelationFileId()); + object.put("relationShapeId", rModel.getRelationShapeId()); + object.put("relationShapeText", rModel.getRelationShapeText()); + tmpArr.add(object); + tempStrs.add(str); + } + } + } + result.put(attrId, tmpArr.toString()); + } else if ("awsorg".equals(attrType)) { + List relationList = DesignerShapeRelationCache.getListByAttrId(uuid, "", attrId); + JSONObject tmpObj = new JSONObject(); + if (relationList != null && relationList.size() > 0) { + for (DesignerShapeRelationModel rModel : relationList) { + JSONObject object1 = JSONObject.parseObject(rModel.getRelationShapeText()); + tmpObj.put(object1.getString("id"), object1); + } + } + result.put(attrId, tmpObj); + } else { + PALRepositoryPropertyModel pModel = PALRepositoryPropertyCache.getPropertyByPropertyId(uuid, attrId); + result.put(attrId, pModel == null ? "" : pModel.getPropertyValue()); + } + } + } + } + if ("shape".equals(type)) { + // 节点更多特性配置数据 + List shapeAttrConfig = PALRepositoryShapeAttributeCache.getAttributeListByMethod(wsId, model.getMethodId()); + Map> map = new HashMap<>(); + for (PALRepositoryShapeAttributeModel shapeAttrModel : shapeAttrConfig) { + String attrId = shapeAttrModel.getAttrId(); + String attrType = shapeAttrModel.getType(); + if (!UtilString.isEmpty(attrType)) { + if (map.containsKey(shapeAttrModel.getShapeName())) { + map.get(shapeAttrModel.getShapeName()).add(attrId); + } else { + Set tmp = new HashSet<>(); + tmp.add(attrId); + map.put(shapeAttrModel.getShapeName(), tmp); + } + } + } + // 获取流程文件属性内容 + List> repositoryFileElements = CoeDesignerUtil.getShapeMessageJson(uuid); //流程文件内容 + JSONObject shapes = new JSONObject(); + Map shapeTypeMap = new HashMap<>(); + if (repositoryFileElements != null) { + for (Map shape : repositoryFileElements) { + JSONObject dataAttributes = (JSONObject) shape.get("attributes"); + if (dataAttributes != null && dataAttributes.containsKey("attributesJsonArray")) { + JSONArray dataAttributesJsonArray = dataAttributes.getJSONArray("attributesJsonArray"); + JSONObject tmpShapeObj = new JSONObject(); + for (int i = 0; i < dataAttributesJsonArray.size(); i++) { + JSONObject dataAttribute = dataAttributesJsonArray.getJSONObject(i); + if (dataAttribute.containsKey("type")) { + String attrId = dataAttribute.getString("id"); + String relationType = dataAttribute.getString("type"); + if ("relation".equals(relationType)) {// 关联类型,存储关联表 + List relationList = DesignerShapeRelationCache.getListByAttrId(uuid, shape.get("id").toString(), attrId); + JSONArray tmpArr = new JSONArray(); + if (relationList != null && relationList.size() > 0) { + Set tempStrs = new HashSet<>(); + for (DesignerShapeRelationModel rModel : relationList) { + String str = rModel.getFileId() + rModel.getShapeId() + rModel.getAttrId() + rModel.getRelationFileId() + rModel.getRelationShapeId(); + if (!tempStrs.contains(str)) { + JSONObject object = new JSONObject(); + object.put("relationFileId", rModel.getRelationFileId()); + object.put("relationShapeId", rModel.getRelationShapeId()); + object.put("relationShapeText", rModel.getRelationShapeText()); + tmpArr.add(object); + tempStrs.add(str); + } + } + } + tmpShapeObj.put(attrId, tmpArr); + } else if ("awsorg".equals(relationType)) { + List relationList = DesignerShapeRelationCache.getListByAttrId(uuid, shape.get("id").toString(), attrId); + JSONObject tmpObj = new JSONObject(); + if (relationList != null && relationList.size() > 0) { + for (DesignerShapeRelationModel rModel : relationList) { + JSONObject object1 = JSONObject.parseObject(rModel.getRelationShapeText()); + tmpObj.put(object1.getString("id"), object1); + } + } + tmpShapeObj.put(attrId, tmpObj); + } else {// 文本类型或其他类型 + tmpShapeObj.put(attrId, dataAttribute.containsKey("value") ? dataAttribute.getString("value") : ""); + } + } + } + shapes.put(shape.get("id").toString(), tmpShapeObj); + shapeTypeMap.put(shape.get("id").toString(), shape.get("type").toString()); + } + } + } + // 属性内容根据属性的配置查漏补缺 + for (Map.Entry entry : shapes.entrySet()) { + String shapeId = entry.getKey(); + JSONObject shape = shapes.getJSONObject(shapeId); + String shapeType = shapeTypeMap.get(shapeId); + Set attrIds = map.get(shapeType); + if (attrIds == null || attrIds.size() == 0) { + result.put(shapeId, new JSONObject()); + } else { + JSONObject object = new JSONObject(); + for (String attrId: attrIds) { + object.put(attrId, shape.containsKey(attrId) ? shape.get(attrId) : ""); + } + result.put(shapeId, object); + } + } + } + return result; + } + + /** + * 外部调用进行流程定义文件保存 + * @param uuid 流程id + * @param define 流程定义文件 + * @param teamId 流程团队小组 + * @param uc 用户 + * @return + */ + public static String saveDefinition(String uuid, String define, String teamId, UserContext uc) { + String ro = null; + String processDefId = queryBpmsProcessDefIdByPalId(uuid, true); + if (!UtilString.isEmpty(processDefId)) {// 关联流程 + CoeDesignerWeb designerWeb = new CoeDesignerWeb(uc); + ProcessDefinition definition = ProcessDefCache.getInstance().get(processDefId); + String appId = definition.getAppId(); + ro = designerWeb.definitionOfBpmnSave(uuid, 0, appId, processDefId, "edit|" + definition.getVersionId(), define, ""); + } else {// pal流程 + CoeProcessLevelWeb web = new CoeProcessLevelWeb(uc); + try { + ro = web.saveProcessDefine(uc, uuid, define, teamId, "{}"); + } catch (IOException e) { + e.printStackTrace(); + ro = ResponseObject.newErrResponse(ExceptionUtil.getMessage(e)).toString(); + } + } + return ro; + } + + /** + * 保存文件属性更多特性的配置 + * 直接调用保存属性配置信息 + * 目前流程批处理应用调用此方法 + * @param uc + * @param attrConfig + * @throws SQLException + */ + public static void saveAttrConfig(String appId, UserContext uc, JSONArray attrConfig) throws SQLException { + CoeProcessLevelWeb web = new CoeProcessLevelWeb(uc); + for (int i = 0; i < attrConfig.size(); i++) { + JSONObject obj = attrConfig.getJSONObject(i); + String uuid = obj.getString("id"); + PALRepositoryModel palModel = PALRepositoryCache.getCache().get(uuid); + // 每次调整涉及全资产库所有流程避免多余的数据处理,过滤掉不需要调整的数据 + JSONArray tmpArr = new JSONArray(); + JSONArray attrValue = JSONArray.parseArray(obj.getString("value")); + for (int j = 0; j < attrValue.size(); j++) { + JSONObject attr = attrValue.getJSONObject(j); + String attrId = attr.getString("id"); + if (!UtilString.isEmpty(attrId)) { + PALRepositoryAttributeModel attributeModel = PALRepositoryAttributeCache.getAttributeByMethodIdAndAttrId(palModel.getWsId(), palModel.getMethodId(), attrId); + // 没有配置该属性或者逻辑删除 + if (attributeModel == null || (attributeModel != null && "1".equals(attributeModel.getIsDelete()))) { + tmpArr.add(attr); + } + } + } + if (tmpArr.size() > 0) { + // todo + SDK.getLogAPI().consoleErr(SDK.getAppAPI().getAppContext(appId).getNameI18N() + ":流程[文件属性]资产库全局配置存储[后台执行][失败],待调整"); + // SDK.getLogAPI().consoleErr(SDK.getAppAPI().getAppContext(appId).getNameI18N() + ":流程[文件属性]资产库全局配置存储数据库[后台执行][成功],资产库ID:" + palModel.getWsId() + ",流程分类:" + palModel.getMethodId() + ",属性配置数据:" + tmpArr.toString()); + } + } + } + + /** + * PAL应用化替换数据库表路径字段 + * @param filePath + * @return + */ + public static String replaceRepositoryFilePath(String filePath) { + if (!UtilString.isEmpty(filePath)) { + if (filePath.contains("../apps/install/_bpm.coe/") || filePath.contains("../apps/install/com.actionsoft.apps.coe.pal/")) { + filePath = filePath.replace("../apps/install/_bpm.coe/", DCUtil.getPath() + CoEConstant.APP_ID + "/") + .replace("../apps/install/com.actionsoft.apps.coe.pal/", DCUtil.getPath() + CoEConstant.APP_ID + "/"); + } + } + return filePath; + } + + /** + * 获取模型责任人 + * @param id + * @return + */ + public static String getDutyPersonByPalId(String id) { + PALRepositoryModel repositoryModel = PALRepositoryCache.getCache().get(id); + String relationType = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_RELATION_TYPE); + String relationPerson = ""; + if (relationType.equals("address")) { + String plDutyPerson = repositoryModel.getDutyUser(); + plDutyPerson = plDutyPerson == null ? "" : plDutyPerson; + if (!UtilString.isEmpty(plDutyPerson)) { + plDutyPerson = SDK.getORGAPI().getUserNames(plDutyPerson); + } + relationPerson = plDutyPerson; + + } else { + String plRP = repositoryModel.getOwnerUser(); + plRP = plRP == null ? "" : plRP; + if (plRP != null) { + List plRPList = DesignerShapeRelationCache.getListByAttrId(repositoryModel.getId(), "", "plRP"); + if (plRPList != null && plRPList.size() > 0) { + plRP = plRPList.get(0).getRelationShapeText(); + } + } + relationPerson = plRP; + } + return relationPerson; + } + + /** + * 获取模型责任部门 + * @param id + * @return + */ + public static String getDutyDeptByPalId(String id) { + PALRepositoryModel repositoryModel = PALRepositoryCache.getCache().get(id); + String relationType = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_RELATION_TYPE); + String relationDept = ""; + if (relationType.equals("address")) { + String plDutyDept = repositoryModel.getDutyDept(); + plDutyDept = plDutyDept == null ? "" : plDutyDept; + if (!UtilString.isEmpty(plDutyDept)) { + if (SDK.getORGAPI().getDepartmentById(plDutyDept) != null) { + plDutyDept = SDK.getORGAPI().getDepartmentById(plDutyDept).getName(); + } + } + relationDept = plDutyDept; + + } else { + String plRD = repositoryModel.getOwnerDept(); + plRD = plRD == null ? "" : plRD; + if (plRD != null) { + List plRDList = DesignerShapeRelationCache.getListByAttrId(repositoryModel.getId(), "", "plRD"); + if (plRDList != null && plRDList.size() > 0) { + plRD = plRDList.get(0).getRelationShapeText(); + } + } + relationDept = plRD; + } + return relationDept; + } + + /** + * 获取文件自定义属性内容 + * @param uuid + * @return + */ + public static JSONArray getProcessLevelPropertyArr(String uuid) { + JSONArray result = new JSONArray(); + JSONObject propertyValObj = getProcessLevelPropertyVal(uuid); + for (String index : propertyValObj.keySet()) { + result.add(propertyValObj.getJSONObject(index)); + } + return result; + } + + /** + * 文件自定义属性 + * @param uuid + */ + public static JSONObject getProcessLevelPropertyVal(String uuid) { + int index = 1; + JSONObject result = new JSONObject(); + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + Map map = new HashMap(); + PALRepositoryModel m = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(plModel.getId()); + // 获取所有文件属性 + List methodAttrModels = PALRepositoryAPIManager.getInstance().getValidAttributeModels(m.getWsId(), m.getMethodId()); + if (methodAttrModels != null && methodAttrModels.size() > 0) { + Map attributeModelMap = new HashMap<>(); + Map sortAttrMap = new HashMap<>(); + if (methodAttrModels != null) { + int sort = 0; + for (PALMethodAttributeModel attr : methodAttrModels) { + attributeModelMap.put(attr.getKey(), attr); + sortAttrMap.put(attr.getKey(), ++sort); + } + } + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(m.getMethodId()); + List groups = methodModel.getGroup(); + PALRepositoryPropertyDao dao = new PALRepositoryPropertyDao(); + List propertys = dao.getPropertysByPlid(plModel.getId(), null); + // 排序 + propertys.sort((p1, p2) -> (sortAttrMap.containsKey(p1.getPropertyId()) ? sortAttrMap.get(p1.getPropertyId()) : 0) - (sortAttrMap.containsKey(p2.getPropertyId()) ? sortAttrMap.get(p2.getPropertyId()) : 0)); + + for (PALRepositoryPropertyModel property : propertys) { + String id = property.getPropertyId(); + if (!attributeModelMap.containsKey(id) || !attributeModelMap.get(id).getUse()) { + continue; + } + PALMethodAttributeModel attributeModel = attributeModelMap.get(id); + String inputValue = property.getPropertyValue(); + if ("relation".equals(attributeModel.getType())) { + List list = DesignerShapeRelationCache.getListByAttrId(plModel.getId(), "", attributeModel.getKey()); + if (list != null && list.size() > 0) { + // 判断是否有重复数据,进行重复过滤 + Set tempStrs = new HashSet<>(); + List tempList = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + DesignerShapeRelationModel model = list.get(i); + String str = model.getFileId() + model.getShapeId() + model.getAttrId() + model.getRelationFileId() + model.getRelationShapeId(); + if (!tempStrs.contains(str)) { + tempList.add(model); + tempStrs.add(str); + } + } + list = tempList; + List inputValueList = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + DesignerShapeRelationModel model = list.get(i); + JSONObject refObj = JSONObject.parseObject(attributeModel.getRef()); + String relationTyp = refObj.containsKey("type") ? refObj.getString("type") : "shape"; + if ("file".equals(relationTyp)) {// 关联的模型文件 + if (model.getRelationFileId().length() < 36) { + continue; + } + List list2 = PALRepositoryCache.getByVersionId(m.getWsId(), model.getRelationFileId()); + for (PALRepositoryModel model2 : list2) { + if (model2.isUse()) { + inputValueList.add(model2.getName()); + break; + } + } + } else { + inputValueList.add(model.getRelationShapeText()); + } + } + inputValue = StringUtils.join(inputValueList, ","); + } else {//db中无关联数据 + inputValue = ""; + } + } + // 关联bpm组织架构 + if ("awsorg".equals(attributeModel.getType())) { + List list = DesignerShapeRelationCache.getListByAttrId(plModel.getId(), "", attributeModel.getKey()); + List deptValList = new ArrayList<>(); + List positionValList = new ArrayList<>(); + List roleValList = new ArrayList<>(); + List userValList = new ArrayList<>(); + if (list != null && list.size() > 0) { + Set filter = new HashSet();// 去重记录 + + list.sort((m1, m2) -> {return m1.getId().compareTo(m2.getId());}); + for (DesignerShapeRelationModel model : list) { + if ("00000000-0000-0000-0000-000000000000".equals(model.getRelationFileId()) && "00000000-0000-0000-0000-000000000000".equals(model.getRelationShapeId())) { + JSONObject object = JSONObject.parseObject(model.getRelationShapeText()); + // 查询最新名称 + if ("department".equals(object.getString("type"))) { + DepartmentModel dept = SDK.getORGAPI().getDepartmentById(object.getString("id")); + if (dept != null && !filter.contains(dept.getId())) { + deptValList.add(dept.getName()); + filter.add(dept.getId()); + } + } + if ("position".equals(object.getString("type"))) {// 岗位,先用角色代替 + RoleModel role = SDK.getORGAPI().getRoleById(object.getString("id")); + if (role != null && !filter.contains(role.getId())) { + positionValList.add(role.getName()); + filter.add(role.getId()); + } + } + if ("user".equals(object.getString("type"))) { + UserModel user = SDK.getORGAPI().getUser(object.getString("id")); + if (user != null && !filter.contains(user.getUID())) { + userValList.add(user.getUserName()); + filter.add(user.getUID()); + } + } + if ("role".equals(object.getString("type"))) { + RoleModel role = SDK.getORGAPI().getRoleById(object.getString("id")); + if (role != null && !filter.contains(role.getId())) { + roleValList.add(role.getName()); + filter.add(role.getId()); + } + } + } + } + } + // 数据组合 + deptValList.addAll(positionValList); + deptValList.addAll(roleValList); + deptValList.addAll(userValList); + inputValue = StringUtils.join(deptValList, ","); + } + inputValue = inputValue.replaceAll("'", "'"); + inputValue = inputValue.replaceAll("\"", """); + JSONObject attribute = new JSONObject(); + attribute.put("name", property.getPropertyName()); + attribute.put("key", property.getPropertyId()); + attribute.put("value", inputValue); + attribute.put("type", attributeModel.getType()); + result.put(String.valueOf(index++), attribute); + } + } + return result; + } + + /** + * 统计个人权限下的模型文件的建模大类和建模方法分类 + * 不作为个人是否有某建模方法判断依据,仅根据已有数据进行统计 + * @param wsId + * @param teamId + */ + public static List getRepositoryCategoryAndMethods(String wsId, String teamId, String userId) { + List result = new ArrayList<>(); + List palMethodCategoryList = PALMethodCache.getPALMethodList(true);// 获取建模标准大类 + Set categorys = new HashSet<>(); + Set methods = new HashSet<>(); + if (UtilString.isNotEmpty(teamId)) { + Set versionIds = getPermRepositoryVersionIds(wsId, teamId, userId, null, null); + for (String versionId : versionIds) { + List list = PALRepositoryCache.getByVersionId(versionId); + if (list != null && list.size() > 0) { + PALRepositoryModel model = list.get(0); + categorys.add(model.getMethodCategory()); + methods.add(model.getMethodId()); + } + } + } else { + methods.add("default");// 文件夹分类 + } + for (String category : palMethodCategoryList) { + if (UtilString.isNotEmpty(teamId) && !categorys.contains(category)) { + continue; + } + JSONObject categoryObj = new JSONObject(); + String name = I18nRes.findValue(CoEConstant.APP_ID, category); + categoryObj.put("category", category); + categoryObj.put("id", category); + categoryObj.put("name", name); + categoryObj.put("method", new JSONArray()); + if ("process".equals(category) && methods.contains("default")) {// 文件夹特殊分类特殊处理 + JSONObject methodObj = new JSONObject(); + methodObj.put("app", CoEConstant.APP_ID); + methodObj.put("category", category); + methodObj.put("categoryName", I18nRes.findValue(CoEConstant.APP_ID, category)); + methodObj.put("method", "default"); + methodObj.put("id", "default"); + methodObj.put("name", "文件夹"); + JSONObject icon = PALMethodManager.getInstance().getPALMethodIconById("default"); + methodObj.put("icon", icon); + categoryObj.getJSONArray("method").add(methodObj); + } + List list = PALMethodCache.getPALMethodModelListByMethod(category);// 建模分类 + for (PALMethodModel model : list) { + if (UtilString.isNotEmpty(teamId) && !methods.contains(model.getId())) { + continue; + } + JSONObject methodObj = new JSONObject(); + methodObj.put("app", model.getApp().getId()); + methodObj.put("category", category); + methodObj.put("categoryName", I18nRes.findValue(CoEConstant.APP_ID, category)); + methodObj.put("method", model.getId()); + methodObj.put("id", model.getId()); + methodObj.put("name", I18nRes.findValue(CoEConstant.APP_ID, model.getId())); + JSONObject icon = PALMethodManager.getInstance().getPALMethodIconById(model.getId()); + methodObj.put("icon", icon); + categoryObj.getJSONArray("method").add(methodObj); + } + result.add(categoryObj); + } + return result; + } + + /** + * 获取所有有权限的模型文件的versionId + * @param wsId 资产库Id + * @param teamId 小组Id + * @param userId 用户Id + * @param category 建模方法大类,可为null + * @param method 模型分类,可为null + * @return + */ + public static Set getPermRepositoryVersionIds(String wsId, String teamId, String userId, String category, String method) { + Set result = new HashSet<>(); + Iterator iterator = PALRepositoryCache.getByWsId(wsId); + while (iterator.hasNext()) { + PALRepositoryModel model = iterator.next(); + if (!result.contains(model.getVersionId())) { + if (UtilString.isNotEmpty(method)) {// 先判断建模分类(小)是否符合 + if (model.getMethodId().equals(method)) { + result.add(model.getVersionId()); + } + } else if (UtilString.isNotEmpty(category)){// 再判断建模分类(大)是否符合 + if (model.getMethodCategory().equals(category)) { + result.add(model.getVersionId()); + } + } else { + result.add(model.getVersionId()); + } + } + } + // 小组数据权限范围+该角色(当前用户所属角色)下的数据权限交集 + if (!UtilString.isEmpty(teamId)) { + List permVerList = CoeCooperationAPIManager.getInstance().queryCooperationRoleDataPermByTeamUser(teamId, userId); + Set versionIds = new HashSet<>(); + if (result.size() > 0) { + for (String verId : result) { + if (permVerList.contains(verId)) { + versionIds.add(verId); + } + } + } + result = versionIds; + } + return result; + } + + /** + * 获取所有有权限的使用中的模型文件 + * @param wsId 资产库Id + * @param teamId 小组Id + * @param userId 用户Id + * @param category 建模方法大类,可为null + * @param method 模型分类,可为null + * @return + */ + public static List getPermRepositoryList(String wsId, String teamId, String userId, String category, String method, boolean isUse, boolean isPublish) { + List result = new ArrayList<>(); + Set versionIds = getPermRepositoryVersionIds(wsId, teamId, userId, category, method); + for (String versionId : versionIds) { + List list = PALRepositoryCache.getByVersionId(versionId); + if (list != null) { + for (PALRepositoryModel model : list) { + if ((isUse && model.isUse()) || (isPublish && model.isPublish())) { + result.add(model); + } + } + } + } + return result; + } + + /** + * 获取最近编辑的模型文件 + * @param wsId 资产库Id + * @param teamId 小组id + * @param category 分类,为空则不限制 + * @param method 模型分类,为空则不限制 + * @param count 查询条数,为0则不限制 + * @return + */ + public static List getRecentUpdateRepositoryList(String wsId, String teamId, String userId, String category, String method, int count) { + List permRepositoryList = getPermRepositoryList(wsId, teamId, userId, category, method,true, false); + // 排序 + Collections.sort(permRepositoryList, new ComparatorUpdateDateDesc()); + if (count > 0) { + if (permRepositoryList.size() < count) { + return permRepositoryList; + } else { + return permRepositoryList.subList(0, count); + } + } else { + return permRepositoryList; + } + } + + /** + * 获取收藏的文件模型 + * @param wsId + * @param teamId + * @return + */ + public static List getCommonRepositoryList(UserContext uc, String wsId, String teamId, String userId) { + List result = new ArrayList<>(); + String oldStr = SDK.getPortalAPI().getUserProfileItem(CoEConstant.APP_ID, uc.getUID(), CoEConstant.COMMON_REPOSITORY_VERSIONID, CoEConstant.COMMON_REPOSITORY_VERSIONID); + if (UtilString.isNotEmpty(oldStr)) { + JSONObject object = JSONObject.parseObject(oldStr); + if (object.containsKey(wsId)) { + JSONArray versionIds = object.getJSONArray(wsId); + List list = getPermRepositoryList(wsId, teamId, userId, null, null, true, false); + for (PALRepositoryModel model: list) { + if (versionIds.contains(model.getVersionId())) { + result.add(model); + } + } + } + } + Collections.sort(result, new ComparatorUpdateDateDesc()); + return result; + } + + /** + * 判断文件模型是否已收藏 + * @param uc + * @param wsId + * @param plVersionId + * @return + */ + public static boolean isCommonRepository(UserContext uc, String wsId, String plVersionId) { + String oldStr = SDK.getPortalAPI().getUserProfileItem(CoEConstant.APP_ID, uc.getUID(), CoEConstant.COMMON_REPOSITORY_VERSIONID, CoEConstant.COMMON_REPOSITORY_VERSIONID); + if (UtilString.isNotEmpty(oldStr)) { + JSONObject object = JSONObject.parseObject(oldStr); + if (object.containsKey(wsId)) { + JSONArray versionIds = object.getJSONArray(wsId); + if (versionIds.contains(plVersionId)) { + return true; + } + } + } + return false; + } + + /** + * 更新时间倒序 + */ + static class ComparatorUpdateDateDesc implements Comparator{ + @Override + public int compare(PALRepositoryModel o1, PALRepositoryModel o2) { + return o2.getModifyDate().compareTo(o1.getModifyDate()); + } + + } + + /** + * 获取模型文件的路径 + * @param id 模型文件id + * @return jsonArray [{id:xx,name:xx},{id:xx,name:xx}] + */ + public static JSONArray getRepositoryPath(String id) { + JSONArray result = new JSONArray(); + Set versionIds = new HashSet<>(); + class GetRepositoryPath { + void getRepositoryPath(Set versionIds, String pid, JSONArray result) { + if (pid.length() < 36) { + JSONObject obj = new JSONObject(); + obj.put("name", I18nRes.findValue(CoEConstant.APP_ID, pid)); + obj.put("id", pid); + obj.put("versionId", pid); + result.add(0, obj); + } else { + PALRepositoryModel tempModel = null; + PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(pid); + if (parentModel != null) { + if (parentModel.isUse()) { + tempModel = parentModel; + } else { + String versionId = parentModel.getVersionId(); + List versionList = PALRepositoryCache.getByVersionId(versionId); + for (PALRepositoryModel model: versionList) { + if (model.isUse()) { + tempModel = model; + } + } + } + } else { + List versionList = PALRepositoryCache.getByVersionId(pid); + for (PALRepositoryModel model: versionList) { + if (model.isUse()) { + tempModel = model; + } + } + } + if (tempModel != null && !versionIds.contains(tempModel.getVersionId())) { + JSONObject obj = new JSONObject(); + obj.put("name", tempModel.getName()); + obj.put("id", tempModel.getId()); + obj.put("versionId", tempModel.getVersionId()); + result.add(0, obj); + versionIds.add(tempModel.getVersionId()); + getRepositoryPath(versionIds, tempModel.getParentId(), result); + } + } + } + } + new GetRepositoryPath().getRepositoryPath(versionIds, id, result); + return result; + } + + /** + * 批量调整关联属性关联表中文件属性的数据存储 + * 导入、恢复资产库、导入流程、启动应用等 + * 将relationShapeId的值调整到relationFileId,将relationShapeId、relationShapeName值置空 + * 只是针对文件属性中的前置流程和后置流程,若需补充其他,可在其中进行增加 + * @param wsId wsId为空则更新全部,不为空则更新指定资产库 + */ + public static void correctFileRelationPropData(String wsId) { + class T { + public void updateRelationInfoDataByWsId(String wsId) { + CoeWorkSpaceModel ws = new CoeWorkSpace().getInstance(wsId); + if (ws == null) { + return; + } + List result = new ArrayList<>(); + Iterator iterator = PALRepositoryCache.getByWsId(wsId); + while (iterator.hasNext()) { + PALRepositoryModel model = iterator.next(); + String id = model.getId(); + List list1 = DesignerShapeRelationCache.getByFileId(id, "lead_process"); + for (DesignerShapeRelationModel model1 : list1) { + if (UtilString.isNotEmpty(model1.getRelationShapeId())) { + result.add(model1); + } + } + List list2 = DesignerShapeRelationCache.getByFileId(id, "rear_process"); + for (DesignerShapeRelationModel model2 : list2) { + if (UtilString.isNotEmpty(model2.getRelationShapeId())) { + result.add(model2); + } + } + } + if (result.size() > 0) { + List list = new ArrayList<>(); + for (DesignerShapeRelationModel model : result) { + + String id = model.getRelationShapeId(); + String versionId = ""; + PALRepositoryModel pModel = PALRepositoryCache.getCache().get(id); + if (pModel == null) { + List vers = PALRepositoryCache.getByVersionId(id); + if (vers != null && vers.size() > 0) { + versionId = id; + } + } else { + versionId = pModel.getVersionId(); + } + if (UtilString.isNotEmpty(versionId)) { + DesignerShapeRelationModel newModel = new DesignerShapeRelationModel(); + newModel.setId(model.getId()); + newModel.setAttrId(model.getAttrId()); + newModel.setFileId(model.getFileId()); + newModel.setShapeId(model.getShapeId()); + newModel.setShapeText(model.getShapeText()); + newModel.setRelationFileId(versionId);// 存储模型文件的versionId + newModel.setRelationShapeId("");// 置空 + newModel.setRelationShapeText("");// 置空 + list.add(newModel); + } + + } + if (list.size() > 0) { + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + SDK.getLogAPI().consoleInfo("[开始]PAL 资产库[" + ws.getWsName() + "]属性关联数据库表[APP_ACT_COE_PAL_SHAPE_RLAT]数据格式调整更新"); + int count = 0; + for (DesignerShapeRelationModel model : list) { + count++; + SDK.getLogAPI().consoleInfo("[" + count + "]数据库表ID[" + model.getId() + "]更新为 " + JSON.toJSON(model)); + } + boolean isSuccess = dao.batchUpdateRelationInfoById(list); + if (isSuccess) { + SDK.getLogAPI().consoleInfo("[完成]PAL 资产库[" + ws.getWsName() + "]属性关联数据库表[APP_ACT_COE_PAL_SHAPE_RLAT]数据格式调整更新,更新[" + count + "]条数据"); + } else { + SDK.getLogAPI().consoleErr("[失败]PAL 资产库[" + ws.getWsName() + "]属性关联数据库表[APP_ACT_COE_PAL_SHAPE_RLAT]数据格式调整更新"); + } + } + } + } + } + if (UtilString.isNotEmpty(wsId)) {// 更新指定资产库,忽略掉回收站,不再处理 + new T().updateRelationInfoDataByWsId(wsId); + } else { + List wss = new CoeWorkSpace().getInstanceAll(); + if (wss != null) { + T t = new T(); + for (CoeWorkSpaceModel model : wss) { + t.updateRelationInfoDataByWsId(model.getUUId()); + } + } + } + } + + /** + * 根据模型文件versionId获取使用中的模型文件Model + * @return + */ + public static PALRepositoryModel getUseRepositoryByVersionId(String versionId) { + if (UtilString.isEmpty(versionId)) { + return null; + } + List list = PALRepositoryCache.getByVersionId(versionId); + if (list == null || list.size() == 0) { + return null; + } + for (PALRepositoryModel model : list) { + if (model.isUse()) { + return model; + } + } + return null; + } + + /** + * 将模型文件加入PAL小组权限 + * @param uc + * @param teamId 小组id + * @param palId 流程模型文件id + * @param addToTeamPerm 是否将权限加入小组数据权限中 + * @param addToRolePerm 是否将权限加入当前小组的该用户 + * @return + */ + public static boolean addRepositoryToTeamAndRolePerm(UserContext uc, String teamId, String palId, boolean addToTeamPerm, boolean addToRolePerm) { + if (UtilString.isEmpty(uc) || UtilString.isEmpty(teamId) || UtilString.isEmpty(palId)) { + return false; + } + PALRepositoryModel model = PALRepositoryCache.getCache().get(palId); + if (model == null) { + return false; + } + return CoeCooperationAPIManager.getInstance().addRepositoryToTeamAndRolePerm(uc, teamId, model.getVersionId(), true, true); + + } + + /** + * 判断是否有打开相应的流程权限 + * @param userId + * @param uuid + * @param teamId + * @return + */ + public static boolean havingOpenDesignerPerm(String userId, String uuid, String teamId) { + PALRepositoryModelImpl plModel = (PALRepositoryModelImpl) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + if (plModel == null) { + return false; + } + if ("admin".equals(userId)) { + return true; + } + String wsId = plModel.getWsId(); + CoeWorkSpaceModel wsModel = new CoeWorkSpace().getInstance(wsId); + String adminIds = wsModel.getWsAdmin(); + if (adminIds.contains(userId)) { + return true; + } + if (UtilString.isNotEmpty(teamId)) { + List verIds = CoeCooperationAPIManager.getInstance().queryCooperationRoleDataPermByTeamUser(teamId, userId); + if (verIds.contains(plModel.getVersionId())) { + return true; + } + } + return false; + } + + /** + * 批量调整模型的文件/形状默认属性至自定义属性中 + */ + public static void updateDefaultAttr2CustomAttr(UserContext uc, String wsId, boolean newThread) { + class T { + + private File logFile; + + public void appendLog(String content) { + appendLog(content, logFile); + } + + public void appendLog(String content, File file) { + try { + String logFilePath = file.getPath(); + // 构造函数中的第二个参数true表示以追加形式写文件 + FileOutputStream fos = new FileOutputStream(logFilePath, true); + OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8"); + osw.write(content + "\n"); + osw.close(); + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + System.out.println("文件写入失败!" + e); + } + } + + public void updateDefaultAttr2CustomAttr(String wsId, File logFile, String msg) { + this.logFile = logFile; + // dc/tmp/upgradedefault/wsId.log + CoeWorkSpaceModel ws = new CoeWorkSpace().getInstance(wsId); + if (ws == null) { + return; + } + long time1 = System.currentTimeMillis(); + SDK.getLogAPI().consoleInfo("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[开始][升级固定属性]资产库:[" + ws.getWsName() + "][" + ws.getUUId() + "]," + msg); + appendLog("[开始]资产库:" + ws.getWsName() + "--------------------------------------------------", logFile); + appendLog("[开始]更新文件属性配置--------------------------------------------------", logFile); + // 文件属性配置更新 + updateRepositoryAttrConfig(wsId); + appendLog("[完成]更新文件属性配置--------------------------------------------------", logFile); + appendLog("[开始]更新文件属性内容--------------------------------------------------", logFile); + // 文件属性内容更新 + updateRepositoryAttrContent(wsId); + appendLog("[完成]更新文件属性内容--------------------------------------------------", logFile); + appendLog("[开始]更新形状属性配置--------------------------------------------------", logFile); + // 形状属性配置更新 + updateRepositoryShapeAttrConfig(wsId); + appendLog("[完成]更新形状属性配置--------------------------------------------------", logFile); + // 关联bpm组织架构的raci类型进行attr名称更新 + appendLog("[开始]更新形状属性配置中RACI命名--------------------------------------------------", logFile); + boolean updateAttrName = updateRepositoryShapeRACIAttrName(wsId); + appendLog("[完成]更新形状属性配置中RACI命名--------------------------------------------------", logFile); + if (updateAttrName) { + appendLog("[开始]更新形状关联属性中RACI命名--------------------------------------------------", logFile); + // 更新relation表里面的raci属性内容 + updateRepositoryShapeRACIRelationAttrId(wsId); + appendLog("[完成]更新形状关联属性中RACI命名--------------------------------------------------", logFile); + } + // 更新流程文件内容表 + appendLog("[开始]更新模型文件形状属性内容--------------------------------------------------", logFile); + updateRepositoryDefineJson(wsId, updateAttrName); + appendLog("[完成]更新模型文件形状属性内容--------------------------------------------------", logFile); + appendLog("[完成]更新结束,耗时[" + (System.currentTimeMillis() - time1)/1000d + "]秒--------------------------------------------------", logFile); + SDK.getLogAPI().consoleInfo("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[完成][升级固定属性]资产库:[" + ws.getWsName() + "][" + ws.getUUId() + "]," + ",耗时[" + (System.currentTimeMillis() - time1)/1000d + "]秒," + msg); + } + + /** + * 更新模型文件的形状属性内容 + * @param wsId + * @param updateAttrName + */ + private void updateRepositoryDefineJson(String wsId, boolean updateAttrName) { + + List list = new PALRepository().getInstanceToList(wsId); + // 需要添加编号属性的形状number: control risk item regulation procedure method manualOperation predefinedProcess callActivityCallingProcess businessRuleTask scriptTask sendTask userTask serviceTask manualTask receiveTask process decision group + String numberAttrShapeScope = "control,risk,item,regulation,procedure,method,manualOperation,predefinedProcess,callActivityCallingProcess,businessRuleTask,scriptTask,sendTask,userTask,serviceTask,manualTask,receiveTask,process,decision,group"; + Set numberAttrShapeScopeSet = new HashSet<>(Arrays.asList(numberAttrShapeScope.split(","))); + // 需要添加表单类型属性的形状form_type: form forms + String formTypeAttrShapeScope = "form,forms"; + Set formTypeAttrShapeScopeSet = new HashSet<>(Arrays.asList(formTypeAttrShapeScope.split(","))); + // 需要添加系统图类型的形状 + String systemTypeAttrShapeScope = "database,appSystem,device,cloudServer"; + Set systemTypeAttrShapeScopeSet = new HashSet<>(Arrays.asList(systemTypeAttrShapeScope.split(","))); + Map>> methodAttrMap = new HashMap<>(); + for (PALRepositoryModel palModel : list) { + if (!methodAttrMap.containsKey(palModel.getMethodId())) { + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(palModel.getMethodId()); + if (palMethodModel == null) { + continue; + } + List attributes = palMethodModel.getAttributes(); + Map> attributeXmlMap = new HashMap>(); + if (attributes != null) { + for (PALMethodAttributeModel attributeModel : attributes) { + Map map1 = new HashMap(); + map1.put("id", attributeModel.getKey()); + map1.put("name", attributeModel.getTitle()); + map1.put("key", attributeModel.getKey()); + map1.put("value", attributeModel.getValue()); + map1.put("type", attributeModel.getType()); + map1.put("ref", attributeModel.getRef()); + map1.put("readonly", attributeModel.getReadonly()); + map1.put("groupPath", attributeModel.getGroupPath()); + map1.put("scope", attributeModel.getScope()); + attributeXmlMap.put(attributeModel.getKey(), map1); + } + } + methodAttrMap.put(palModel.getMethodId(), attributeXmlMap); + } + Map> attributeXmlMap = methodAttrMap.get(palModel.getMethodId()); + + // 判断是否关联bpm + String processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(palModel.getId(), true); + if (UtilString.isEmpty(processDefId)) {// pal流程 + BaseModel model = CoeDesignerAPIManager.getInstance().getDefinition(palModel.getId(), 0); + if (model == null) { + continue; + } + String define = model.getDefinition(); + JSONObject definition = JSONObject.parseObject(define); + JSONObject tempElements = new JSONObject(); + JSONObject elements = JSONObject.parseObject(definition.getString("elements")); + Iterator it = elements.keySet().iterator(); + while (it.hasNext()) { + String key = it.next(); + JSONObject shape = JSONObject.parseObject(elements.getString(key)); + String shapeName = shape.getString("name"); + String shapeTitle = shape.getString("text"); + if (!"linker".equals(shapeName) && shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + if (!dataAttributes.isEmpty() && dataAttributes.size() > 0) { + for (Object object : dataAttributes) { + JSONObject obj = (JSONObject)object; + if (obj.containsKey("attributesJsonArray")) { + JSONArray attributesJsonArray = JSONArray.parseArray(obj.getString("attributesJsonArray")); + boolean addDesc = true; + boolean addNumber = true; + boolean addFormType = true; + boolean addItSystemType = true; + boolean addItSystemIcon = true; + for (int i = 0; i < attributesJsonArray.size(); i++) { + if (attributesJsonArray.get(i) != null) { + JSONObject attrObj = attributesJsonArray.getJSONObject(i); + String attrId = attrObj.getString("key"); + if ("desc".equals(attrId)) { + addDesc = false;// 描述属性已存在 + } + if ("number".equals(attrId)) { + addNumber = false;// 编号属性已存在 + } + if ("form_type".equals(attrId)) { + addFormType = false;// 表单类型属性已存在 + } + if ("itsystem_type".equals(attrId)) { + addItSystemType = false;// IT系统形状类型属性已存在 + } + if ("itsystem_icon".equals(attrId)) { + addItSystemIcon = false; + } + if (updateAttrName) { + // duty_r->bpm_duty_r,approval_a->bpm_approval_a,counselor_c->bpm_counselor_c,notify_i->bpm_notify_i + if ("duty_r".equals(attrId)) { + attrObj.put("id", "bpm_duty_r"); + attrObj.put("key", "bpm_duty_r"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改PAL模型["+ palModel.getName() +"][" + shapeTitle + "]属性duty_r->bpm_duty_r"); + } + if ("approval_a".equals(attrId)) { + attrObj.put("id", "bpm_approval_a"); + attrObj.put("key", "bpm_approval_a"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改PAL模型["+ palModel.getName() +"][" + shapeTitle + "]属性approval_a->bpm_approval_a"); + } + if ("counselor_c".equals(attrId)) { + attrObj.put("id", "bpm_counselor_c"); + attrObj.put("key", "bpm_counselor_c"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改PAL模型["+ palModel.getName() +"][" + shapeTitle + "]属性counselor_c->bpm_counselor_c"); + } + if ("notify_i".equals(attrId)) { + attrObj.put("id", "bpm_notify_i"); + attrObj.put("key", "bpm_notify_i"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改PAL模型["+ palModel.getName() +"][" + shapeTitle + "]属性notify_i->bpm_notify_i"); + } + } + } + } + if (addDesc) { + Map map = attributeXmlMap.get("desc"); + if (map != null) { + JSONObject attrObj = JSONObject.parseObject(JSON.toJSONString(map)); + // 描述赋值 + String shapeDesc = obj.getString("shapeDesc"); + attrObj.put("value", UtilString.isEmpty(shapeDesc) ? "" : shapeDesc); + attributesJsonArray.add(attrObj); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加PAL模型["+ palModel.getName() +"][" + shapeTitle + "]属性[描述],值为" + attrObj.getString("value")); + } + } + if (addNumber && numberAttrShapeScopeSet.contains(shapeName)) { + Map map = attributeXmlMap.get("number"); + if (map != null) { + JSONObject attrObj = JSONObject.parseObject(JSON.toJSONString(map)); + // 编号赋值 + if (!"[]".equals(obj.getString("privateAttributeContent"))) { + JSONObject numObj = obj.getJSONObject("privateAttributeContent"); + if (numObj != null && numObj.containsKey("number")) { + attrObj.put("value", numObj.getString("number")); + } + } + attributesJsonArray.add(attrObj); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加PAL模型["+ palModel.getName() +"][" + shapeTitle + "]属性[编号],值为" + attrObj.getString("value")); + } + } + if (addFormType && formTypeAttrShapeScopeSet.contains(shapeName)) { + Map map = attributeXmlMap.get("form_type"); + if (map != null) { + JSONObject attrObj = JSONObject.parseObject(JSON.toJSONString(map)); + // 赋值 + if (!"[]".equals(obj.getString("privateAttributeContent"))) { + String formType = obj.getString("privateAttributeContent"); + attrObj.put("value", formType); + } + attributesJsonArray.add(attrObj); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加PAL模型["+ palModel.getName() +"][" + shapeTitle + "]属性[表单类型],值为" + attrObj.getString("value")); + } + } + if (addItSystemType && systemTypeAttrShapeScopeSet.contains(shapeName)) { + Map map = attributeXmlMap.get("itsystem_type"); + if (map != null) { + JSONObject attrObj = JSONObject.parseObject(JSON.toJSONString(map)); + // 类型赋值 + if (!"[]".equals(obj.getString("privateAttributeContent"))) { + JSONObject tmpObj = obj.getJSONObject("privateAttributeContent"); + if (tmpObj != null && tmpObj.containsKey("type")) { + attrObj.put("value", tmpObj.getString("type")); + } + } + attributesJsonArray.add(attrObj); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加PAL模型["+ palModel.getName() +"][" + shapeTitle + "]属性[类型],值为" + attrObj.getString("value")); + } + } + if (addItSystemIcon && systemTypeAttrShapeScopeSet.contains(shapeName)) { + Map map = attributeXmlMap.get("itsystem_icon"); + if (map != null) { + JSONObject attrObj = JSONObject.parseObject(JSON.toJSONString(map)); + // 图标赋值 + if (!"[]".equals(obj.getString("privateAttributeContent"))) { + JSONObject tmpObj = obj.getJSONObject("privateAttributeContent"); + if (tmpObj != null && tmpObj.containsKey("icon")) { + attrObj.put("value", tmpObj.getString("icon")); + } + } + attributesJsonArray.add(attrObj); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加PAL模型["+ palModel.getName() +"][" + shapeTitle + "]属性[图标],值为" + attrObj.getString("value")); + } + } + obj.put("attributesJsonArray", attributesJsonArray); + } + } + } + } + tempElements.put(key, shape); + } + definition.remove("localAttribute");// 打开流程时重新构建 + definition.put("elements", tempElements); + model.setDefinition(definition.toString()); + CoeDesignerAPIManager.getInstance().storeDefinition(model);// dao操作 + } else {// 关联bpm流程 + String define = PALRepositoryQueryAPIManager.getInstance().getProcessDefinition(uc, palModel.getId()); + JSONObject definition = JSONObject.parseObject(define); + JSONObject tempElements = new JSONObject(); + JSONObject elements = JSONObject.parseObject(definition.getString("elements")); + Iterator it = elements.keySet().iterator(); + while (it.hasNext()) { + String key = it.next(); + JSONObject shape = JSONObject.parseObject(elements.getString(key)); + String shapeName = shape.getString("name"); + String shapeTitle = shape.getString("text"); + if (!"linker".equals(shapeName) && shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + if (!dataAttributes.isEmpty() && dataAttributes.size() > 0) { + for (Object object : dataAttributes) { + JSONObject obj = (JSONObject)object; + if (obj.containsKey("attributesJsonArray")) { + JSONArray attributesJsonArray = JSONArray.parseArray(obj.getString("attributesJsonArray")); + boolean addDesc = true; + boolean addNumber = true; + boolean addType = true; + boolean addItSystemType = true; + boolean addItSystemIcon = true; + for (int i = 0; i < attributesJsonArray.size(); i++) { + if (attributesJsonArray.get(i) != null) { + JSONObject attrObj = attributesJsonArray.getJSONObject(i); + String attrId = attrObj.getString("key"); + if ("desc".equals(attrId)) { + addDesc = false;// 描述属性已存在 + } + if ("number".equals(attrId)) { + addNumber = false;// 编号属性已存在 + } + if ("form_type".equals(attrId)) { + addType = false;// 表单类型属性已存在 + } + if ("itsystem_type".equals(attrId)) { + addItSystemType = false;// IT系统形状类型属性已存在 + } + if ("itsystem_icon".equals(attrId)) { + addItSystemIcon = false; + } + if (updateAttrName) { + // duty_r->bpm_duty_r,approval_a->bpm_approval_a,counselor_c->bpm_counselor_c,notify_i->bpm_notify_i + if ("duty_r".equals(attrId)) { + attrObj.put("id", "bpm_duty_r"); + attrObj.put("key", "bpm_duty_r"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改BPM关联流程["+ palModel.getName() +"][" + shapeTitle + "]属性duty_r->bpm_duty_r"); + } + if ("approval_a".equals(attrId)) { + attrObj.put("id", "bpm_approval_a"); + attrObj.put("key", "bpm_approval_a"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改BPM关联流程["+ palModel.getName() +"][" + shapeTitle + "]属性approval_a->bpm_approval_a"); + } + if ("counselor_c".equals(attrId)) { + attrObj.put("id", "bpm_counselor_c"); + attrObj.put("key", "bpm_counselor_c"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改BPM关联流程["+ palModel.getName() +"][" + shapeTitle + "]属性counselor_c->bpm_counselor_c"); + } + if ("notify_i".equals(attrId)) { + attrObj.put("id", "bpm_notify_i"); + attrObj.put("key", "bpm_notify_i"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改BPM关联流程["+ palModel.getName() +"][" + shapeTitle + "]属性notify_i->bpm_notify_i"); + } + } + } + } + if (addDesc) { + Map map = attributeXmlMap.get("desc"); + if (map != null) { + JSONObject attrObj = JSONObject.parseObject(JSON.toJSONString(map)); + // 描述赋值 + String shapeDesc = obj.getString("shapeDesc"); + attrObj.put("value", UtilString.isEmpty(shapeDesc) ? "" : shapeDesc); + attributesJsonArray.add(attrObj); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加BPM关联流程["+ palModel.getName() +"][" + shapeTitle + "]属性[描述],值为" + attrObj.getString("value")); + } + } + if (addNumber && numberAttrShapeScopeSet.contains(shapeName)) { + Map map = attributeXmlMap.get("number"); + if (map != null) { + JSONObject attrObj = JSONObject.parseObject(JSON.toJSONString(map)); + // 编号赋值 + if (!"[]".equals(obj.getString("privateAttributeContent"))) { + JSONObject numObj = obj.getJSONObject("privateAttributeContent"); + if (numObj != null && numObj.containsKey("number")) { + attrObj.put("value", numObj.getString("number")); + } + } + attributesJsonArray.add(attrObj); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加BPM关联流程["+ palModel.getName() +"][" + shapeTitle + "]属性[编号],值为" + attrObj.getString("value")); + } + } + if (addType && formTypeAttrShapeScopeSet.contains(shapeName)) { + Map map = attributeXmlMap.get("form_type"); + if (map != null) { + JSONObject attrObj = JSONObject.parseObject(JSON.toJSONString(map)); + // 赋值 + if (!"[]".equals(obj.getString("privateAttributeContent"))) { + String formType = obj.getString("privateAttributeContent"); + attrObj.put("value", formType); + } + attributesJsonArray.add(attrObj); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加BPM关联流程["+ palModel.getName() +"][" + shapeTitle + "]属性[表单类型],值为" + attrObj.getString("value")); + } + } + if (addItSystemType && systemTypeAttrShapeScopeSet.contains(shapeName)) { + Map map = attributeXmlMap.get("itsystem_type"); + if (map != null) { + JSONObject attrObj = JSONObject.parseObject(JSON.toJSONString(map)); + // 类型赋值 + if (!"[]".equals(obj.getString("privateAttributeContent"))) { + JSONObject tmpObj = obj.getJSONObject("privateAttributeContent"); + if (tmpObj != null && tmpObj.containsKey("type")) { + attrObj.put("value", tmpObj.getString("type")); + } + } + attributesJsonArray.add(attrObj); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加BPM关联流程["+ palModel.getName() +"][" + shapeTitle + "]属性[类型],值为" + attrObj.getString("value")); + } + } + if (addItSystemIcon && systemTypeAttrShapeScopeSet.contains(shapeName)) { + Map map = attributeXmlMap.get("itsystem_icon"); + if (map != null) { + JSONObject attrObj = JSONObject.parseObject(JSON.toJSONString(map)); + // 图标赋值 + if (!"[]".equals(obj.getString("privateAttributeContent"))) { + JSONObject tmpObj = obj.getJSONObject("privateAttributeContent"); + if (tmpObj != null && tmpObj.containsKey("icon")) { + attrObj.put("value", tmpObj.getString("icon")); + } + } + attributesJsonArray.add(attrObj); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加BPM关联流程["+ palModel.getName() +"][" + shapeTitle + "]属性[图标],值为" + attrObj.getString("value")); + } + } + obj.put("attributesJsonArray", attributesJsonArray); + } + } + } + } + tempElements.put(key, shape); + } + definition.remove("localAttribute");// 打开流程时重新构建 + definition.put("elements", tempElements); + CoeDesignerWeb designerWeb = new CoeDesignerWeb(uc); + ProcessDefinition definition1 = ProcessDefCache.getInstance().get(processDefId); + String appId = definition1.getAppId(); + String processDefVerId = definition1.getVersionId(); +// System.out.println("----"); +// System.out.println(definition); + designerWeb.definitionOfBpmnSave(palModel.getId(), 0, appId, processDefId, "edit|" + processDefVerId, definition.toString(), ""); + } + } + + + } + + /** + * 更新关联内容表relation表内容 + * @param wsId + */ + private void updateRepositoryShapeRACIRelationAttrId(String wsId) { + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + // 修改属性名称duty_r->bpm_duty_r,approval_a->bpm_approval_a,counselor_c->bpm_counselor_c,notify_i->bpm_notify_i + int r = dao.batchUpdateAttrByWsIdAndAttrId(wsId, "duty_r", "bpm_duty_r"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改形状属性关联内容表ID duty_r->bpm_duty_r[" + r + "]条"); + r = dao.batchUpdateAttrByWsIdAndAttrId(wsId, "approval_a", "bpm_approval_a"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改形状属性关联内容表ID approval_a->bpm_approval_a[" + r + "]条"); + r = dao.batchUpdateAttrByWsIdAndAttrId(wsId, "counselor_c", "bpm_counselor_c"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改形状属性关联内容表ID counselor_c->bpm_counselor_c[" + r + "]条"); + r = dao.batchUpdateAttrByWsIdAndAttrId(wsId, "notify_i", "bpm_notify_i"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改形状属性关联内容表ID notify_i->bpm_notify_i[" + r + "]条"); + } + + /** + * 关联bpm组织架构的raci类型进行attr名称更新 + * @param wsId + */ + private boolean updateRepositoryShapeRACIAttrName(String wsId) { + boolean updateAttrName = false; + PALRepositoryShapeAttributeDao dao = new PALRepositoryShapeAttributeDao(); + List existList = dao.getShapeAttributeByWsId(wsId); + for (PALRepositoryShapeAttributeModel model : existList) { + if ("duty_r".equals(model.getAttrId()) || "approval_a".equals(model.getAttrId()) || "counselor_c".equals(model.getAttrId()) || "notify_i".equals(model.getAttrId())) { + String type = model.getType(); + if ("awsorg".equals(type)) { + updateAttrName = true; + } + break; + } + } + if (updateAttrName) { + // 修改属性名称duty_r->bpm_duty_r,approval_a->bpm_approval_a,counselor_c->bpm_counselor_c,notify_i->bpm_notify_i + int r = dao.batchUpdateAttrByWsId(wsId, "duty_r", "bpm_duty_r"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改形状属性配置表ID duty_r->bpm_duty_r[" + r + "]条"); + r = dao.batchUpdateAttrByWsId(wsId, "approval_a", "bpm_approval_a"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改形状属性配置表ID approval_a->bpm_approval_a[" + r + "]条"); + r = dao.batchUpdateAttrByWsId(wsId, "counselor_c", "bpm_counselor_c"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改形状属性配置表ID counselor_c->bpm_counselor_c[" + r + "]条"); + r = dao.batchUpdateAttrByWsId(wsId, "notify_i", "bpm_notify_i"); + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]修改形状属性配置表ID notify_i->bpm_notify_i[" + r + "]条"); + } + return updateAttrName; + } + + /** + * 更新形状属性配置 + * @param wsId + */ + private void updateRepositoryShapeAttrConfig(String wsId) { + List list = new ArrayList<>(); + // 查询已存在的 + List existList = new PALRepositoryShapeAttributeDao().getShapeAttributeByWsId(wsId); + Set ids = new HashSet<>(); + for (PALRepositoryShapeAttributeModel model : existList) { + ids.add(model.getMethodId() + "_" + model.getShapeName() + "_" + model.getAttrId()); + } + // 需要添加描述属性的形状desc: all + // 需要添加编号属性的形状number: control risk item regulation procedure method manualOperation predefinedProcess callActivityCallingProcess businessRuleTask scriptTask sendTask userTask serviceTask manualTask receiveTask process decision group + String numberAttrShapeScope = "control,risk,item,regulation,procedure,method,manualOperation,predefinedProcess,callActivityCallingProcess,businessRuleTask,scriptTask,sendTask,userTask,serviceTask,manualTask,receiveTask,process,decision,group"; + Set numberAttrShapeScopeSet = new HashSet<>(Arrays.asList(numberAttrShapeScope.split(","))); + // 需要添加表单类型属性的形状form_type: form forms + String formTypeAttrShapeScope = "form,forms"; + Set formTypeAttrShapeScopeSet = new HashSet<>(Arrays.asList(formTypeAttrShapeScope.split(","))); + // 需要添加系统图类型的形状 + String systemTypeAttrShapeScope = "database,appSystem,device,cloudServer"; + Set systemTypeAttrShapeScopeSet = new HashSet<>(Arrays.asList(systemTypeAttrShapeScope.split(","))); + // 获取所有的建模方法 + Map> shapeMap = new HashMap<>(); + List palMethodCategoryList = PALMethodCache.getPALMethodList(true); + for (String c : palMethodCategoryList) { + List methods = PALMethodCache.getPALMethodModelListByMethod(c); + for (PALMethodModel method : methods) { + if (method.isFolder()) { + continue; + } + shapeMap.put(method.getId(), new HashSet<>()); + // 获取所有的形状 + JSONArray shapes = CoeDesignerUtil.getShapeDefinition(method.getId()); + // System.out.println("------" + method.getId() + "------"); + for (int i = 0; i < shapes.size(); i++) { + JSONObject shape = shapes.getJSONObject(i); + shapeMap.get(method.getId()).add(shape.getString("name")); + // System.out.println(shape.getString("name")); + } + } + } + // 所有的形状都有描述属性,部分有编号属性,表单有类型 + for (Map.Entry> entry : shapeMap.entrySet()) { + String methodId = entry.getKey(); + Set shapeNames = entry.getValue(); + for (String shapeName : shapeNames) { + // 添加描述配置 + if (!ids.contains(methodId + "_" + shapeName + "_desc")) { + PALRepositoryShapeAttributeModel newModel = new PALRepositoryShapeAttributeModel(); + newModel.setId(UUIDGener.getUUID()); + newModel.setAttrId("desc"); + newModel.setAttrName("描述"); + newModel.setAttrValue(""); + newModel.setCategory(methodId.substring(0, methodId.indexOf("."))); + newModel.setMethodId(methodId); + newModel.setOrderIndex(0); + newModel.setShapeName(shapeName); + newModel.setType("textarea"); + newModel.setWsId(wsId); + list.add(newModel); + } + String newShapeName = shapeName; + if (shapeName.contains("_custom")) {// 自定义的形状,去掉自定义标识 + newShapeName = shapeName.substring(0, shapeName.indexOf("_")); + } + // 添加编号配置 + if (!ids.contains(methodId + "_" + newShapeName + "_number") && numberAttrShapeScopeSet.contains(newShapeName)) { + PALRepositoryShapeAttributeModel newModel = new PALRepositoryShapeAttributeModel(); + newModel.setId(UUIDGener.getUUID()); + newModel.setAttrId("number"); + newModel.setAttrName("编号"); + newModel.setAttrValue(""); + newModel.setCategory(methodId.substring(0, methodId.indexOf("."))); + newModel.setMethodId(methodId); + newModel.setOrderIndex(0); + newModel.setShapeName(shapeName); + newModel.setType("string"); + newModel.setWsId(wsId); + list.add(newModel); + } + // 添加表单类型配置 + if (!ids.contains(methodId + "_" + newShapeName + "_form_type") && formTypeAttrShapeScopeSet.contains(newShapeName)) { + PALRepositoryShapeAttributeModel newModel = new PALRepositoryShapeAttributeModel(); + newModel.setId(UUIDGener.getUUID()); + newModel.setAttrId("form_type"); + newModel.setAttrName("表单类型"); + newModel.setAttrValue(""); + newModel.setCategory(methodId.substring(0, methodId.indexOf("."))); + newModel.setMethodId(methodId); + newModel.setOrderIndex(0); + newModel.setShapeName(shapeName); + newModel.setType("select"); + newModel.setWsId(wsId); + list.add(newModel); + } + // 添加IT系统类型配置 + if (!ids.contains(methodId + "_" + newShapeName + "_itsystem_type") && systemTypeAttrShapeScopeSet.contains(newShapeName)) { + PALRepositoryShapeAttributeModel newModel = new PALRepositoryShapeAttributeModel(); + newModel.setId(UUIDGener.getUUID()); + newModel.setAttrId("itsystem_type"); + newModel.setAttrName("类型"); + newModel.setAttrValue(""); + newModel.setCategory(methodId.substring(0, methodId.indexOf("."))); + newModel.setMethodId(methodId); + newModel.setOrderIndex(0); + newModel.setShapeName(shapeName); + newModel.setType("string"); + newModel.setWsId(wsId); + list.add(newModel); + } + // 添加IT系统图标配置 + if (!ids.contains(methodId + "_" + newShapeName + "_itsystem_icon") && systemTypeAttrShapeScopeSet.contains(newShapeName)) { + PALRepositoryShapeAttributeModel newModel = new PALRepositoryShapeAttributeModel(); + newModel.setId(UUIDGener.getUUID()); + newModel.setAttrId("itsystem_icon"); + newModel.setAttrName("图标"); + newModel.setAttrValue(""); + newModel.setCategory(methodId.substring(0, methodId.indexOf("."))); + newModel.setMethodId(methodId); + newModel.setOrderIndex(0); + newModel.setShapeName(shapeName); + newModel.setType("string"); + newModel.setWsId(wsId); + list.add(newModel); + } + } + } + if (list.size() > 0) { + try { + new PALRepositoryShapeAttributeDao().batchInsert(list); + for (PALRepositoryShapeAttributeModel model : list) { + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加形状属性配置信息[" + model.getAttrName() + "[" + model.getAttrId() + "]" + "]" + JSON.toJSON(model)); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + /** + * 更新文件属性内容 + * 将编号、描述、输入、输出、责任部门、责任人从APP_ACT_COE_PAL_REPOSITORY添加到APP_ACT_COE_PAL_PROP + * @param wsId + */ + private void updateRepositoryAttrContent(String wsId) { + List relationModelList = new ArrayList<>(); + List list = new ArrayList<>(); + List existAttrList = new PALRepositoryPropertyDao().queryByWsId(wsId); + Set ids = new HashSet<>(); + for (PALRepositoryPropertyModel model : existAttrList) { + ids.add(model.getPlId() + "_" + model.getPropertyId()); + } + List models = new PALRepository().getInstanceToList(wsId); + for (PALRepositoryModel model : models) { + if (model.getMethodId().equals("process.bpmn2") || model.getMethodId().equals("process.evc") + || model.getMethodId().equals("process.epc") || model.getMethodId().equals("process.flowchart")) { + if (!ids.contains(model.getId() + "_" + "number")) { + list.add(createRepositoryPropModel(model.getId(), "number", model.getNo(), "编号", 0)); + } + if (!ids.contains(model.getId() + "_" + "desc")) { + list.add(createRepositoryPropModel(model.getId(), "desc", model.getDesc(), "描述", 0)); + } + if (!ids.contains(model.getId() + "_" + "input")) { + list.add(createRepositoryPropModel(model.getId(), "input", model.getInput(), "输入", 0)); + } + if (!ids.contains(model.getId() + "_" + "out")) { + list.add(createRepositoryPropModel(model.getId(), "out", model.getOutput(), "输出", 0)); + } + if (!ids.contains(model.getId() + "_" + "bpm_department")) { + list.add(createRepositoryPropModel(model.getId(), "bpm_department", "", "责任部门", 0)); + } + if (!ids.contains(model.getId() + "_" + "bpm_person")) { + list.add(createRepositoryPropModel(model.getId(), "bpm_person", "", "责任人", 0)); + } + if (!ids.contains(model.getId() + "_" + "department")) { + list.add(createRepositoryPropModel(model.getId(), "department", "", "责任部门", 0)); + } + if (!ids.contains(model.getId() + "_" + "person")) { + list.add(createRepositoryPropModel(model.getId(), "person", "", "责任人", 0)); + } + if (UtilString.isNotEmpty(model.getDutyUser())) { + // 添加责任人到relation表中 + String userId = model.getDutyUser(); + UserModel user = SDK.getORGAPI().getUser(userId); + if (user != null) { + JSONObject userObj = new JSONObject(); + userObj.put("name", user.getUserName()); + userObj.put("id", userId); + userObj.put("type", "user"); + DesignerShapeRelationModel relation = new DesignerShapeRelationModel(); + relation.setId(UUIDGener.getUUID()); + relation.setFileId(model.getId()); + relation.setShapeId(""); + relation.setShapeText(""); + relation.setAttrId("bpm_person"); + relation.setRelationFileId("00000000-0000-0000-0000-000000000000"); + relation.setRelationShapeId("00000000-0000-0000-0000-000000000000"); + relation.setRelationShapeText(userObj.toString()); + relationModelList.add(relation); + } + } + if (UtilString.isNotEmpty(model.getDutyDept())) { + // 添加责任部门到relation表中 + String deptId = model.getDutyDept(); + DepartmentModel dept = SDK.getORGAPI().getDepartmentById(deptId); + if (dept != null) { + JSONObject deptObj = new JSONObject(); + deptObj.put("name", dept.getName()); + deptObj.put("id", dept.getId()); + deptObj.put("type", "department"); + DesignerShapeRelationModel relation = new DesignerShapeRelationModel(); + relation.setId(UUIDGener.getUUID()); + relation.setFileId(model.getId()); + relation.setShapeId(""); + relation.setShapeText(""); + relation.setAttrId("bpm_department"); + relation.setRelationFileId("00000000-0000-0000-0000-000000000000"); + relation.setRelationShapeId("00000000-0000-0000-0000-000000000000"); + relation.setRelationShapeText(deptObj.toString()); + relationModelList.add(relation); + } + } + } else if (model.getMethodId().equals("control.kpi") || model.getMethodId().equals("control.policy") + || model.getMethodId().equals("control.risk") || model.getMethodId().equals("data.form") + || model.getMethodId().equals("itsystem.normal") || model.getMethodId().equals("org.normal")) { + if (!ids.contains(model.getId() + "_" + "number")) { + list.add(createRepositoryPropModel(model.getId(), "number", model.getNo(), "编号", 0)); + } + if (!ids.contains(model.getId() + "_" + "desc")) { + list.add(createRepositoryPropModel(model.getId(), "desc", model.getDesc(), "描述", 0)); + } + } + } + DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); + List plrpList = relationDao.queryByWsIdAndAttrId(wsId, "plRP"); + // 关联pal组织责任人替换更新(不删除,只新增) + for (DesignerShapeRelationModel plrpModel : plrpList) { + if (UtilString.isEmpty(plrpModel.getRelationFileId()) && UtilString.isEmpty(plrpModel.getRelationShapeId())) { + continue; + } + DesignerShapeRelationModel relation = new DesignerShapeRelationModel(); + relation.setId(UUIDGener.getUUID()); + relation.setFileId(plrpModel.getFileId()); + relation.setShapeId(plrpModel.getShapeId()); + relation.setShapeText(plrpModel.getShapeText()); + relation.setAttrId("person"); + relation.setRelationFileId(plrpModel.getRelationFileId()); + relation.setRelationShapeId(plrpModel.getRelationShapeId()); + relation.setRelationShapeText(plrpModel.getRelationShapeText()); + relationModelList.add(relation); + } + // 关联pal组织责任部门替换更新(不删除,只新增) + List plrdList = relationDao.queryByWsIdAndAttrId(wsId, "plRD"); + for (DesignerShapeRelationModel plrdModel : plrdList) { + if (UtilString.isEmpty(plrdModel.getRelationFileId()) && UtilString.isEmpty(plrdModel.getRelationShapeId())) { + continue; + } + DesignerShapeRelationModel relation = new DesignerShapeRelationModel(); + relation.setId(UUIDGener.getUUID()); + relation.setFileId(plrdModel.getFileId()); + relation.setShapeId(plrdModel.getShapeId()); + relation.setShapeText(plrdModel.getShapeText()); + relation.setAttrId("department"); + relation.setRelationFileId(plrdModel.getRelationFileId()); + relation.setRelationShapeId(plrdModel.getRelationShapeId()); + relation.setRelationShapeText(plrdModel.getRelationShapeText()); + relationModelList.add(relation); + } + // 保存文件属性内容配置 + if (list.size() > 0) { + new PALRepositoryPropertyDao().batchInsert(list); + for (PALRepositoryPropertyModel model : list) { + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加文件属性内容信息[" + model.getPropertyName() + "[" + model.getPropertyId() + "]" + "[" + model.getPropertyValue() + "]]" + JSON.toJSON(model)); + } + } + // 保存文件属性关联属性 + if (relationModelList.size() > 0) { + relationDao.barchInsert(relationModelList); + for (DesignerShapeRelationModel model : relationModelList) { + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加文件关联属性内容信息[fileId:" + model.getFileId() + "[" + model.getAttrId() + "]" + "]" + JSON.toJSON(model)); + } + } + } + + /** + * 创建文件属性内容model + * @param plId + * @param propertyId + * @param propertyValue + * @param propertyName + * @param orderIndex + * @return + */ + private PALRepositoryPropertyModel createRepositoryPropModel(String plId, String propertyId, String propertyValue, String propertyName, int orderIndex) { + PALRepositoryPropertyModel prop = new PALRepositoryPropertyModel(); + prop.setId(UUIDGener.getUUID()); + prop.setPlId(plId); + prop.setPropertyId(propertyId); + prop.setPropertyValue(propertyValue); + prop.setPropertyName(propertyName); + prop.setOrderIndex(orderIndex); + return prop; + } + + /** + * 更新文件属性的配置 + * 添加编号、描述、输入、输出、责任部门、责任人、bpm责任部门、bpm责任人等 + */ + private void updateRepositoryAttrConfig(String wsId) { + List existAttrList = new PALRepositoryAttributeDao().getFileAttributeByWsId(wsId); + Set ids = new HashSet<>(); + for (PALRepositoryAttributeModel model : existAttrList) { + ids.add(model.getMethodId() + "_" + model.getAttrId()); + } + List list = new ArrayList<>(); + String bpmDel; + String palDel; + if ("address".equals(SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "RELATION_TYPE"))) {// 关联bpm平台 + bpmDel = "0"; + palDel = "1"; + } else {// 关联pal组织 + bpmDel = "1"; + palDel = "0"; + } + // 编号、描述、输入、输出、责任部门、责任人、bpm责任部门、bpm责任人 + // process.bpmn2 + int count = 1; + String category = "process"; + String methodId = "process.bpmn2"; + if (!ids.contains(methodId + "_number")) { + list.add(createRepositoryAttrModel(wsId, "编号", "number", "", "0", count++, category, methodId, "string")); + } + if (!ids.contains(methodId + "_desc")) { + list.add(createRepositoryAttrModel(wsId, "描述", "desc", "", "0", count++, category, methodId, "textarea")); + } + if (!ids.contains(methodId + "_input")) { + list.add(createRepositoryAttrModel(wsId, "输入", "input", "", "0", count++, category, methodId, "textarea")); + } + if (!ids.contains(methodId + "_out")) { + list.add(createRepositoryAttrModel(wsId, "输出", "out", "", "0", count++, category, methodId, "textarea")); + } + if (!ids.contains(methodId + "_bpm_department")) { + list.add(createRepositoryAttrModel(wsId, "责任部门", "bpm_department", "", bpmDel, count++, category, methodId, "awsorg")); + } + if (!ids.contains(methodId + "_bpm_person")) { + list.add(createRepositoryAttrModel(wsId, "责任人", "bpm_person", "", bpmDel, count++, category, methodId, "awsorg")); + } + if (!ids.contains(methodId + "_department")) { + list.add(createRepositoryAttrModel(wsId, "责任部门", "department", "", palDel, count++, category, methodId, "relation")); + } + if (!ids.contains(methodId + "_person")) { + list.add(createRepositoryAttrModel(wsId, "责任人", "person", "", palDel, count++, category, methodId, "relation")); + } + // process.evc + count = 1; + methodId = "process.evc"; + if (!ids.contains(methodId + "_number")) { + list.add(createRepositoryAttrModel(wsId, "编号", "number", "", "0", count++, category, methodId, "string")); + } + if (!ids.contains(methodId + "_desc")) { + list.add(createRepositoryAttrModel(wsId, "描述", "desc", "", "0", count++, category, methodId, "textarea")); + } + if (!ids.contains(methodId + "_input")) { + list.add(createRepositoryAttrModel(wsId, "输入", "input", "", "0", count++, category, methodId, "textarea")); + } + if (!ids.contains(methodId + "_out")) { + list.add(createRepositoryAttrModel(wsId, "输出", "out", "", "0", count++, category, methodId, "textarea")); + } + if (!ids.contains(methodId + "_bpm_department")) { + list.add(createRepositoryAttrModel(wsId, "责任部门", "bpm_department", "", bpmDel, count++, category, methodId, "awsorg")); + } + if (!ids.contains(methodId + "_bpm_person")) { + list.add(createRepositoryAttrModel(wsId, "责任人", "bpm_person", "", bpmDel, count++, category, methodId, "awsorg")); + } + if (!ids.contains(methodId + "_department")) { + list.add(createRepositoryAttrModel(wsId, "责任部门", "department", "", palDel, count++, category, methodId, "relation")); + } + if (!ids.contains(methodId + "_person")) { + list.add(createRepositoryAttrModel(wsId, "责任人", "person", "", palDel, count++, category, methodId, "relation")); + } + // process.epc + count = 1; + methodId = "process.epc"; + if (!ids.contains(methodId + "_number")) { + list.add(createRepositoryAttrModel(wsId, "编号", "number", "", "0", count++, category, methodId, "string")); + } + if (!ids.contains(methodId + "_desc")) { + list.add(createRepositoryAttrModel(wsId, "描述", "desc", "", "0", count++, category, methodId, "textarea")); + } + if (!ids.contains(methodId + "_input")) { + list.add(createRepositoryAttrModel(wsId, "输入", "input", "", "0", count++, category, methodId, "textarea")); + } + if (!ids.contains(methodId + "_out")) { + list.add(createRepositoryAttrModel(wsId, "输出", "out", "", "0", count++, category, methodId, "textarea")); + } + if (!ids.contains(methodId + "_bpm_department")) { + list.add(createRepositoryAttrModel(wsId, "责任部门", "bpm_department", "", bpmDel, count++, category, methodId, "awsorg")); + } + if (!ids.contains(methodId + "_bpm_person")) { + list.add(createRepositoryAttrModel(wsId, "责任人", "bpm_person", "", bpmDel, count++, category, methodId, "awsorg")); + } + if (!ids.contains(methodId + "_department")) { + list.add(createRepositoryAttrModel(wsId, "责任部门", "department", "", palDel, count++, category, methodId, "relation")); + } + if (!ids.contains(methodId + "_person")) { + list.add(createRepositoryAttrModel(wsId, "责任人", "person", "", palDel, count++, category, methodId, "relation")); + } + // process.flowchart + count = 1; + methodId = "process.flowchart"; + if (!ids.contains(methodId + "_number")) { + list.add(createRepositoryAttrModel(wsId, "编号", "number", "", "0", count++, category, methodId, "string")); + } + if (!ids.contains(methodId + "_desc")) { + list.add(createRepositoryAttrModel(wsId, "描述", "desc", "", "0", count++, category, methodId, "textarea")); + } + if (!ids.contains(methodId + "_input")) { + list.add(createRepositoryAttrModel(wsId, "输入", "input", "", "0", count++, category, methodId, "textarea")); + } + if (!ids.contains(methodId + "_out")) { + list.add(createRepositoryAttrModel(wsId, "输出", "out", "", "0", count++, category, methodId, "textarea")); + } + if (!ids.contains(methodId + "_bpm_department")) { + list.add(createRepositoryAttrModel(wsId, "责任部门", "bpm_department", "", bpmDel, count++, category, methodId, "awsorg")); + } + if (!ids.contains(methodId + "_bpm_person")) { + list.add(createRepositoryAttrModel(wsId, "责任人", "bpm_person", "", bpmDel, count++, category, methodId, "awsorg")); + } + if (!ids.contains(methodId + "_department")) { + list.add(createRepositoryAttrModel(wsId, "责任部门", "department", "", palDel, count++, category, methodId, "relation")); + } + if (!ids.contains(methodId + "_person")) { + list.add(createRepositoryAttrModel(wsId, "责任人", "person", "", palDel, count++, category, methodId, "relation")); + } + + // 编号、描述 + // control.kpi + count = 1; + category = "control"; + methodId = "control.kpi"; + if (!ids.contains(methodId + "_number")) { + list.add(createRepositoryAttrModel(wsId, "编号", "number", "", "0", count++, category, methodId, "string")); + } + if (!ids.contains(methodId + "_desc")) { + list.add(createRepositoryAttrModel(wsId, "描述", "desc", "", "0", count++, category, methodId, "textarea")); + } + // control.policy + count = 1; + category = "control"; + methodId = "control.policy"; + if (!ids.contains(methodId + "_number")) { + list.add(createRepositoryAttrModel(wsId, "编号", "number", "", "0", count++, category, methodId, "string")); + } + if (!ids.contains(methodId + "_desc")) { + list.add(createRepositoryAttrModel(wsId, "描述", "desc", "", "0", count++, category, methodId, "textarea")); + } + // control.risk + count = 1; + category = "control"; + methodId = "control.risk"; + if (!ids.contains(methodId + "_number")) { + list.add(createRepositoryAttrModel(wsId, "编号", "number", "", "0", count++, category, methodId, "string")); + } + if (!ids.contains(methodId + "_desc")) { + list.add(createRepositoryAttrModel(wsId, "描述", "desc", "", "0", count++, category, methodId, "textarea")); + } + // data.form + count = 1; + category = "data"; + methodId = "data.form"; + if (!ids.contains(methodId + "_number")) { + list.add(createRepositoryAttrModel(wsId, "编号", "number", "", "0", count++, category, methodId, "string")); + } + if (!ids.contains(methodId + "_desc")) { + list.add(createRepositoryAttrModel(wsId, "描述", "desc", "", "0", count++, category, methodId, "textarea")); + } + // itsystem.normal + count = 1; + category = "itsystem"; + methodId = "itsystem.normal"; + if (!ids.contains(methodId + "_number")) { + list.add(createRepositoryAttrModel(wsId, "编号", "number", "", "0", count++, category, methodId, "string")); + } + if (!ids.contains(methodId + "_desc")) { + list.add(createRepositoryAttrModel(wsId, "描述", "desc", "", "0", count++, category, methodId, "textarea")); + } + // org.normal + count = 1; + category = "org"; + methodId = "org.normal"; + if (!ids.contains(methodId + "_number")) { + list.add(createRepositoryAttrModel(wsId, "编号", "number", "", "0", count++, category, methodId, "string")); + } + if (!ids.contains(methodId + "_desc")) { + list.add(createRepositoryAttrModel(wsId, "描述", "desc", "", "0", count++, category, methodId, "textarea")); + } + if (list.size() > 0) { + try { + new PALRepositoryAttributeDao().batchInsert(list); + for (PALRepositoryAttributeModel model : list) { + appendLog("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]添加文件属性配置信息[" + model.getAttrName() + "[" + model.getAttrId() + "]" + "]" + JSON.toJSON(model)); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + /** + * 创建文件属性配置Model + * @return + */ + private PALRepositoryAttributeModel createRepositoryAttrModel(String wsId, String attrName, String attrId, String attrValue, String isDelete, int orderIndex, String category, String methodId, String type) { + PALRepositoryAttributeModel attr = new PALRepositoryAttributeModel(); + attr.setId(UUIDGener.getUUID()); + attr.setWsId(wsId); + attr.setAttrName(attrName); + attr.setAttrId(attrId); + attr.setAttrValue(attrValue); + attr.setIsDelete(isDelete); + attr.setOrderIndex(orderIndex); + attr.setCategory(category); + attr.setMethodId(methodId); + attr.setType(type); + return attr; + } + + } + class TT { + private void run() { + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "defaultAttrUpgrade"); + String dateStr = UtilDate.timeFormat(new Date(System.currentTimeMillis()), "yyyy-MM-dd-HH-mm-ss"); + // 应用启动后执行,与StartListener.java的updateDefaultAttrPath判断配合使用 + String updateDefaultAttrPath = DCUtil.getPath() + CoEConstant.APP_ID + File.separator + "defaultAttrUpgrade"; + if (!new File(updateDefaultAttrPath).exists()) { + new File(updateDefaultAttrPath).mkdirs(); + } + // 更新资产库属性配置及内容 + if (UtilString.isNotEmpty(wsId)) {// 更新指定资产库,忽略掉回收站,不再处理 + DCContext dc = new DCContext(uc, dcProfile, CoEConstant.APP_ID, dateStr, wsId + ".log"); + String dcPath = dc.getPath(); + File file = new File(dcPath); + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + new T().updateDefaultAttr2CustomAttr(wsId, file, "第[1]个,共[1]个"); + } else { + List wss = new CoeWorkSpace().getInstanceAll(); + if (wss != null) { + T t = new T(); + for (int i = 0; i < wss.size(); i++) { + CoeWorkSpaceModel model = wss.get(i); + DCContext dc = new DCContext(uc, dcProfile, CoEConstant.APP_ID, dateStr, model.getUUId() + ".log"); + String dcPath = dc.getPath(); + File file = new File(dcPath); + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + t.updateDefaultAttr2CustomAttr(model.getUUId(), file, "第[" + (i + 1) + "]个,共[" + wss.size() + "]个"); + } + } + } + SDK.getLogAPI().consoleInfo("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "详细升级日志见doccenter/com.actionsoft.apps.coe.pal/defaultAttrUpgrade/" + dateStr); + PALDesignerFileCache.getCache().reload(); + PALDesignerFileCache.getCache().reload(); + PALDesignerFileDragModelCache.getCache().reload(); + PALRepositoryCache.getCache().reload(); + CoeDesignerShapeCache.getCache().reload(); + DesignerShapeRelationCache.getCache().reload(); + PALRepositoryAttributeCache.getCache().reload(); + PALRepositoryShapeAttributeCache.getCache().reload(); + PALRepositoryPropertyCache.getCache().reload(); + } + } + if (newThread) { + new Thread(()->{ + new TT().run(); + }, "batchReplace-" + uc.getUID() + "-" + uc.getUserName()).start(); + } else { + new TT().run(); + } + + } + + /** + * 同步bpa的流程权限 + * @param palId + * @param attrId + * @param awsorgArr + */ + public static void syncBPAProcessOwner(String palId, String attrId, JSONArray awsorgArr) { + // PAL同步BPA的流程权限 + if (SDK.getAppAPI().isInstalled("com.actionsoft.apps.coe.bpa") && SDK.getAppAPI().isActive("com.actionsoft.apps.coe.bpa")) { + String processDefId = CoeProcessLevelUtil.queryBpmsProcessDefIdByPalId(palId, true); + if (UtilString.isNotEmpty(processDefId)) {// 关联了BPM + String processOwnerAttr = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "PROCESS_OWNER_ATTR"); + if (attrId.equals(processOwnerAttr)) {// 设置了该属性触发同步bpa流程权限 + List bpaProcessOwnerList = new ArrayList<>(); + for (int i = 0; i < awsorgArr.size(); i++) { + JSONObject obj = awsorgArr.getJSONObject(i); + if ("user".equals(obj.getString("type"))) { + bpaProcessOwnerList.add(obj.getString("id")); + } + } + String processDefVerId = ProcessDefCache.getInstance().get(processDefId).getVersionId(); + // aslp调用 + syncBPAProcessOwnerAslp(StringUtils.join(bpaProcessOwnerList, ","), processDefVerId); + } + } + } + } + + /** + * 同步PAL权限至BPA + * @param userIds + * @param processDefVerId + */ + private static void syncBPAProcessOwnerAslp(String userIds, String processDefVerId) { + // 调用App + String sourceAppId = CoEConstant.APP_ID; + // aslp服务地址 + String aslp = "aslp://com.actionsoft.apps.coe.bpa/saveProcessOwner"; + // 参数定义列表 + Map params = new HashMap(); + //流程版本id,必填 + params.put("processDefVerId", processDefVerId); + //流程负责人,必填 + params.put("processOwner", userIds); + //sessionid,非必填 + params.put("sid", DispatcherRequest.getUserContext().getSessionId()); + AppAPI appAPI = SDK.getAppAPI(); + //保存pal权限字段 + ResponseObject ro = appAPI.callASLP(appAPI.getAppContext(sourceAppId), aslp, params); + if (ro.isOk()) { + SDK.getLogAPI().consoleInfo("[成功][" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "] PAL流程权限同步至BPA"); + } else { + SDK.getLogAPI().consoleErr("[失败][" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "] PAL流程权限同步至BPA," + ro.getMsg()); + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/CoeRepositoryImportUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/CoeRepositoryImportUtil.java new file mode 100644 index 00000000..010a3b82 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/CoeRepositoryImportUtil.java @@ -0,0 +1,865 @@ +package com.actionsoft.apps.coe.pal.pal.repository.util; + +import java.io.IOException; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.bpms.commons.security.high.HighSecurity; +import com.actionsoft.sdk.local.SDK; +import org.mozilla.javascript.Context; +import org.mozilla.javascript.Scriptable; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.dc.DCUtil; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.designer.manage.CoeDesignerAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.util.ReadExcelUtil; + +public class CoeRepositoryImportUtil { + public static final String IMPORT_TEMPLATE = "import"; + public static final String ORG_TEMPLATE = "ORG model import template.xls"; + public static final String ORG_TEMPLATE_PATH = SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getPath() + "resource/import/org/" + ORG_TEMPLATE; + public static final String[] ORG_TITLES = new String[] {"Number", "Type", "Name", "Parent Number"}; + public static final String MODEL_NAME_SPLIT = "#"; + + public ResponseObject importOrgModel(UserContext uc, String wsId, String pId, String fileName, String teamId) throws Exception { + ResponseObject ro = ResponseObject.newOkResponse(); + + String methodId = "org.normal"; + + DCContext dcContext = DCUtil.createTempFileContext(CoEConstant.APP_ID, "_import", null, "xls"); + dcContext.setFileName(fileName); + dcContext.setSession(uc); + ReadExcelUtil readUtil = new ReadExcelUtil(); + JSONArray excelSheetArray = null; + try { + excelSheetArray = readUtil.readExcel(dcContext.getFilePath(), ORG_TITLES); + } catch (IOException e) { + e.printStackTrace(); + ro = ResponseObject.newErrResponse(e.getCause().getMessage()); + return ro; + } + if (excelSheetArray == null || excelSheetArray.size() == 0) { + ro = ResponseObject.newErrResponse("Excel格式错误或内容为空"); + return ro; + } + + PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(pId); + int level = 1; + if (parentModel != null) { + level = parentModel.getLevel() + 1; + } + Map repositoryMap = new LinkedHashMap(); + JSONObject repositoryFiles = new JSONObject(); + JSONArray securityBindList = new JSONArray(); + for (int i = 0; i < excelSheetArray.size(); i++) { + JSONObject sheet = excelSheetArray.getJSONObject(i); + String sheetName = sheet.getString("sheetName"); + String name = sheetName.substring(sheetName.lastIndexOf(MODEL_NAME_SPLIT) + 1); + String parentId = sheetName.contains(MODEL_NAME_SPLIT) ? sheetName.substring(0, sheetName.lastIndexOf(MODEL_NAME_SPLIT)) : pId; + PALRepositoryModelImpl model = getRepositoryModel(uc, wsId, parentId, name, "org", "org.normal"); + repositoryMap.put(name, model); + + if (HighSecurity.isON() && HighSecurityUtil.fileSecuritySwitch()){ + //三员管理开启 + JSONObject securityObject = new JSONObject(); + securityObject.put("uuid",model.getId()); + securityObject.put("name",model.getName()); + securityBindList.add(securityObject); + } + + JSONObject repositoryFile = getMethodJSONObject(model); + JSONArray data = sheet.getJSONArray("data"); //excel中的数据 + JSONObject repositoryFileElements = getMethodElementsJSONArray(data, methodId, sheetName); + repositoryFile.put("elements", repositoryFileElements); + repositoryFiles.put(name, repositoryFile); + } + if (HighSecurity.isON() && HighSecurityUtil.fileSecuritySwitch()){ + ro.put("securityBindList",securityBindList); + } + //重新设置parentId + PALRepository dao = new PALRepository(); + for (Map.Entry entry : repositoryMap.entrySet()) { + PALRepositoryModelImpl model = entry.getValue(); + String parentId = model.getParentId(); + if (!parentId.equals(pId)) { + if (repositoryMap.containsKey(parentId)) { + model.setParentId(repositoryMap.get(parentId).getId()); + model.setLevel(repositoryMap.get(parentId).getLevel() + 1); + } else { + model.setName(model.getParentId() + MODEL_NAME_SPLIT + model.getName()); + model.setParentId(pId); + model.setLevel(level); + } + } + dao.insert(model); + } + + for (Map.Entry entry : repositoryMap.entrySet()) { + String id = entry.getValue().getId(); + BaseModel defineModel = CoeDesignerUtil.createModel(id, 0); + String name = entry.getKey(); + JSONObject definition = repositoryFiles.getJSONObject(name); + defineModel.setDefinition(definition.toString()); + CoeDesignerAPIManager.getInstance().storeDefinition(defineModel); + } + if (!UtilString.isEmpty(teamId)) { + // todo 导入的组织Excel小组处理 + } + + return ro; + } + + private PALRepositoryModelImpl getRepositoryModel(UserContext uc, String wsId, String pId, String name, String category, String methodId) { + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + PALRepositoryModelImpl model = new PALRepositoryModelImpl(); + String id = UUIDGener.getUUID(); + model.setId(id); + model.setWsId(wsId); + model.setName(name); + model.setNo(""); + PALRepositoryModel coeProcessLevelModel = (PALRepositoryModel)coeProcessLevel.getInstance(pId); + if (pId.length() < 36 || coeProcessLevelModel == null) { + model.setLevel(1); + } else { + model.setLevel(coeProcessLevelModel.getLevel() + 1); + } + int orderIndex = coeProcessLevel.getChildrenMaxOrderIndexByPidAndWsId(pId, wsId) + 1; + model.setParentId(pId); + model.setOrderIndex(orderIndex); + model.setDesc(""); + model.setBottomLevel(0); + model.setOwnerDept(""); + model.setOwnerUser(""); + model.setMilestone(""); + model.setExecType(0); + model.setSystemName("-1"); + model.setAWSProcessId(""); + model.setDiagramUrl(""); + model.setColor("#FFF"); + model.setMethodCategory(category); + model.setMethodId(methodId); + model.setVersion(1); + model.setVersionId(id); + model.setHistoryMaxVersion("0"); + model.setSystemFile(false); + model.setUse(true); + model.setPublish(false); + model.setPlRid(UUIDGener.getUUID()); + model.setCreateUser(uc.getUID()); + model.setModifyUser(uc.getUID()); + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + model.setCreateDate(nowTime); + model.setModifyDate(nowTime); + model.setViewCount(0); + return model; + } + + private JSONObject getMethodJSONObject(PALRepositoryModel model) { + JSONObject object = new JSONObject(); + object.put("uuid", model.getId()); + + JSONObject page = new JSONObject(); + page.put("height", 2500); + page.put("width", 1600); + page.put("padding", 60); + page.put("showGrid", true); + page.put("gridSize", 15); + page.put("backgroundColor", "255,255,255"); + object.put("page", page); + + JSONObject processProperties = new JSONObject(); + processProperties.put("categoryName", ""); + processProperties.put("processGroupName", ""); + processProperties.put("versionId", ""); + processProperties.put("uuid", ""); + object.put("processProperties", processProperties); + + JSONObject coeProperties = new JSONObject(); + coeProperties.put("ver", model.getVersion()); + coeProperties.put("fileName", model.getName()); + coeProperties.put("uuid", model.getId()); + coeProperties.put("versionId", model.getVersionId()); + coeProperties.put("update", false); + coeProperties.put("versionUuid", model.getVersionId()); + object.put("coeProperties", coeProperties); + + object.put("processDocument", ""); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + object.put("updateTime", df.format(model.getModifyDate())); + + return object; + } + + private JSONObject getMethodElementsJSONArray(JSONArray elements, String methodId, String sheetName) throws Exception { + JSONObject object = new JSONObject(); + + JSONObject elementNumberMap = new JSONObject(); + JSONObject elementPNumberMap = new JSONObject(); + //JSONArray转成JSONObject + for (int i = 0; i < elements.size(); i++) { + JSONObject element = JSONObject.parseObject(elements.getString(i)); + if (!element.containsKey("number") || (int)element.getDoubleValue("number") < 1) { + throw new Exception("Sheet [" + sheetName + "] 的第" + (i + 2) + "行的'Number'不允许为空"); + } + if (!element.containsKey("type") || element.getString("type") == null || "".equals(element.getString("type"))) { + throw new Exception("Sheet [" + sheetName + "] 的第" + (i + 2) + "行的'Type'不允许为空"); + } + if (element.containsKey("parent number") && element.getString("number").equals(element.getString("parent number"))) { + throw new Exception("Sheet [" + sheetName + "] 的第" + (i + 2) + "行的'Number'与'Parent Number'不允许相同"); + } + elementNumberMap.put(element.getString("number"), element); + } + for (int i = 0; i < elements.size(); i++) { + JSONObject element = JSONObject.parseObject(elements.getString(i)); + + JSONArray pNumberArray = new JSONArray(); + String pNumber = element.containsKey("parent number") ? element.getString("parent number") : "-1"; + pNumber = elementNumberMap.containsKey(pNumber) ? pNumber : "-1"; + if (elementPNumberMap.containsKey(pNumber)) { + pNumberArray = elementPNumberMap.getJSONArray(pNumber); + } + element.put("index", pNumberArray.size() + 1); + elementNumberMap.put(element.getString("number"), element); + pNumberArray.add(element); + elementPNumberMap.put(pNumber, pNumberArray); + } + + getElementWidth(elementNumberMap, elementPNumberMap, "-1"); + List list = new ArrayList(); + Set names = elementNumberMap.keySet(); + for (String name : names) { + list.add(elementNumberMap.getJSONObject(name)); + } + + Collections.sort(list, new Comparator1()); + + JSONObject methodDefine = CoeDesignerUtil.getMethodDefine(methodId); + JSONObject methodCategory = methodDefine.getJSONObject("methodCategory"); + JSONObject methodShapes = methodDefine.getJSONObject("methodShapes"); + //确定元素的位置 + Map numberIdMap = new HashMap(); + Map levelWidth = new HashMap(); + int pageEdge = 100; + JSONArray emptyJSONArray = new JSONArray(); + int zindex = 1; + for (JSONObject jsonObject : list){ + String number = jsonObject.getString("number"); + String parentNumber = jsonObject.containsKey("parent number") ? jsonObject.getString("parent number") : ""; + if (elementNumberMap.containsKey(parentNumber)) { + zindex++; + } + + String id = "_" + new UtilString(UUIDGener.getUUID()).replace("-", ""); + numberIdMap.put(number, id); + JSONObject excelData = elementNumberMap.getJSONObject(number); + JSONObject shape = JSONObject.parseObject(methodShapes.getString(excelData.getString("type"))); + JSONObject element = new JSONObject(); + element.put("id", id); + element.put("name", shape.getString("name")); + element.put("title", shape.getString("title")); + element.put("text", excelData.containsKey("name") ? validateJson(excelData.getString("name")) : ""); + element.put("category", shape.getString("category")); + element.put("group", ""); + element.put("groupName", ""); + element.put("locked", false); + element.put("link", ""); + element.put("children", emptyJSONArray); + element.put("parent", ""); + element.put("orderIndex", 0); + element.put("resizeDir", new String[]{"tl", "tr", "br", "bl"}); + JSONObject attribute = new JSONObject(); + attribute.put("container", false); + attribute.put("visible", true); + attribute.put("rotatable", false); + attribute.put("linkable", true); + attribute.put("editable", true); + attribute.put("markerOffset", 5); + element.put("attribute", attribute); + JSONArray dataAttributes = JSONArray.parseArray(methodCategory.getString("dataAttributes")); + JSONObject AWSProperties = new JSONObject(); + AWSProperties.put("name", "AWSProperties"); + AWSProperties.put("type", "string"); + AWSProperties.put("value", ""); + AWSProperties.put("category", "default"); + AWSProperties.put("id", "_" + new UtilString(UUIDGener.getUUID()).replace("-", "")); + AWSProperties.put("linksArray", emptyJSONArray); + AWSProperties.put("attributesContent", ""); + AWSProperties.put("attributesJsonArray", emptyJSONArray); + AWSProperties.put("privateAttribute", emptyJSONArray); + AWSProperties.put("privateAttributeContent", emptyJSONArray); + AWSProperties.put("privateShapesName", emptyJSONArray); + AWSProperties.put("shapeGroupId", ""); + AWSProperties.put("isCopy", ""); + AWSProperties.put("shapeDesc", ""); + AWSProperties.put("upFilesArray", emptyJSONArray); + AWSProperties.put("relevanceShapes", emptyJSONArray); + for (int index = 0; index < dataAttributes.size(); index++) { + String attributeId = "_" + new UtilString(UUIDGener.getUUID()).replace("-", ""); + dataAttributes.getJSONObject(index).put("id", attributeId); + } + dataAttributes.add(AWSProperties); + element.put("dataAttributes", dataAttributes); + int width = validateJson(excelData.getInteger("width")); + int level = validateJson(excelData.getInteger("level")); + int x = 0; + int y = 0; + int w = validateJson(shape.getJSONObject("props").getInteger("w")); + int h = validateJson(shape.getJSONObject("props").getInteger("h")); + int currentWidth = 50; + if (levelWidth.containsKey(level)) { + currentWidth = levelWidth.get(level) + 50; + } + x = currentWidth + width/2 - w/2 + pageEdge; + y = (level - 1) * (h + 50) + pageEdge; + if (y < 0) { + y = 100; + } + levelWidth.put(level, currentWidth + width); + JSONObject props = new JSONObject(); + props.put("w", w); + props.put("h", h); + props.put("x", x); + props.put("y", y); + props.put("zindex", zindex); + props.put("angle", 0); + element.put("props", props); + JSONObject shapeStyle = new JSONObject(); + shapeStyle.put("alpha", 1); + element.put("shapeStyle", shapeStyle); + JSONObject lineStyle = JSONObject.parseObject(shape.getString("lineStyle")); + lineStyle.put("lineStyle", "solid"); + element.put("lineStyle", lineStyle); + JSONObject fillStyle = JSONObject.parseObject(shape.getString("fillStyle")); + fillStyle.put("angle", Double.parseDouble(runJs(fillStyle.getString("angle")))); + if (!fillStyle.containsKey("color")) { + fillStyle.put("color", "255,255,255"); + } + element.put("fillStyle", fillStyle); + JSONObject fontStyle = new JSONObject(); + fontStyle.put("fontFamily", "Arial"); + fontStyle.put("size", 13); + fontStyle.put("color", "50,50,50"); + fontStyle.put("bold", false); + fontStyle.put("italic", false); + fontStyle.put("underline", false); + fontStyle.put("textAlign", "center"); + fontStyle.put("vAlign", "middle"); + fontStyle.put("orientation", "vertical"); + element.put("fontStyle", fontStyle); + JSONArray path = JSONArray.parseArray(shape.getString("path")); + JSONArray newPath = new JSONArray(); + for (int j = 0; j < path.size(); j++) { + JSONObject actions = path.getJSONObject(j); + if (actions.containsKey("actions") && actions.get("actions").toString().contains("ref")) { + String ref = actions.getJSONObject("actions").getString("ref"); + if (ref.equals("rectangle")) { + JSONArray newActions = new JSONArray(); + newActions.add(JSONObject.parseObject("{\"action\": \"move\", \"x\": \"0\", \"y\": \"0\"}")); + newActions.add(JSONObject.parseObject("{\"action\": \"line\", \"x\": \"w\", \"y\": \"0\"}")); + newActions.add(JSONObject.parseObject("{\"action\": \"line\", \"x\": \"w\", \"y\": \"h\"}")); + newActions.add(JSONObject.parseObject("{\"action\": \"line\", \"x\": \"0\", \"y\": \"h\"}")); + newActions.add(JSONObject.parseObject("{\"action\": \"close\"}")); + actions.put("actions", newActions); + } + } + newPath.add(actions); + } + element.put("path", newPath); + JSONObject textBlock = JSONObject.parseObject(shape.getString("textBlock")); + element.put("textBlock", textBlock); + JSONObject textBlockFinal = new JSONObject(); + String textBlockX = textBlock.getString("x").replace("w", w + "").replace("h", h + ""); + String textBlockY = textBlock.getString("y").replace("w", w + "").replace("h", h + ""); + String textBlockW = textBlock.getString("w").replace("w", w + "").replace("h", h + ""); + String textBlockH = textBlock.getString("h").replace("w", w + "").replace("h", h + ""); + if (textBlockX.equals("0")) { + textBlockX = "0.0"; + } + if (textBlockY.equals("0")) { + textBlockY = "0.0"; + } + if (textBlockW.equals("0")) { + textBlockW = "0.0"; + } + if (textBlockH.equals("0")) { + textBlockH = "0.0"; + } + textBlockFinal.put("x", Double.parseDouble(runJs(textBlockX).toString())); + textBlockFinal.put("y", Double.parseDouble(runJs(textBlockY).toString())); + textBlockFinal.put("w", Double.parseDouble(runJs(textBlockW).toString())); + textBlockFinal.put("h", Double.parseDouble(runJs(textBlockH).toString())); + element.put("textBlockFinal", textBlockFinal); + JSONArray anchors = new JSONArray(); + if (shape.containsKey("anchors")) { + anchors = shape.getJSONArray("anchors"); + } else { + JSONObject anchors1 = new JSONObject(); + anchors1.put("x", "w/2"); + anchors1.put("y", "0"); + anchors.add(anchors1); + JSONObject anchors2 = new JSONObject(); + anchors2.put("x", "w/2"); + anchors2.put("y", "h"); + anchors.add(anchors2); + JSONObject anchors3 = new JSONObject(); + anchors3.put("x", "0"); + anchors3.put("y", "h/2"); + anchors.add(anchors3); + JSONObject anchors4 = new JSONObject(); + anchors4.put("x", "w"); + anchors4.put("y", "h/2"); + anchors.add(anchors4); + } + element.put("anchors", anchors); + element.put("resizeable", "1"); + + if (elementNumberMap.containsKey(parentNumber)) { + String mapId = numberIdMap.get(parentNumber); + if (object.containsKey(mapId)) { + JSONObject linker = addLinker(object.getJSONObject(mapId), element, zindex - 1); + object.put(linker.getString("id"), linker); + } + } + + zindex++; + object.put(id, element); + } + + return object; + } + + /** + * 获取元素宽度(子元素宽度之和) + * + * @param elementNumberMap + * @param elementPNumberMap + * @param pNumber + * @return + * @author zhangming + */ + private int getElementWidth(JSONObject elementNumberMap, JSONObject elementPNumberMap, String pNumber) { + int width = 0; + int level = 1; + if (elementNumberMap.containsKey(pNumber)) { + level = validateJson(elementNumberMap.getJSONObject(pNumber).getInteger("level")) + 1; + } + //如果elementPNumberMap中包含key pNumber,说明有下层元素,需要计算下级元素宽度之和;如果不包含该key,则说明该元素为末级元素 + if (elementPNumberMap.containsKey(pNumber)) { + JSONArray subElements = elementPNumberMap.getJSONArray(pNumber); + for (int i = 0; i < subElements.size(); i++) { + String number = subElements.getJSONObject(i).getString("number"); + elementNumberMap.getJSONObject(number).put("level", level); + width += getElementWidth(elementNumberMap, elementPNumberMap, subElements.getJSONObject(i).getString("number")); + } + width += (subElements.size() - 1) * 50; + } else { + width = 120; + } + if (elementNumberMap.containsKey(pNumber)) { + elementNumberMap.getJSONObject(pNumber).put("width", width); + } + return width; + } + + /** + * 增加元素之间的连线 + * + * @param pElement + * @param element + * @param zindex + * @return + * @author zhangming + */ + private JSONObject addLinker(JSONObject pElement, JSONObject element, int zindex) { + JSONObject linker = new JSONObject(); + linker.put("id", "_" + new UtilString(UUIDGener.getUUID()).replace("-", "")); + linker.put("name", "linker"); + linker.put("text", ""); + linker.put("group", ""); + linker.put("linkerType", "broken"); + JSONObject fromProps = pElement.getJSONObject("props"); + JSONObject toProps = element.getJSONObject("props"); + int fromX = validateJson(fromProps.getInteger("x")); + int fromY = validateJson(fromProps.getInteger("y")); + int fromW = validateJson(fromProps.getInteger("w")); + int fromH = validateJson(fromProps.getInteger("h")); + int toX = validateJson(toProps.getInteger("x")); + int toY = validateJson(toProps.getInteger("y")); + int toW = validateJson(toProps.getInteger("w")); + JSONObject from = new JSONObject(); + from.put("x", fromX + fromW/2); + from.put("y", fromY + fromH); + from.put("angle", 4.712389); + from.put("id", pElement.getString("id")); + JSONObject to = new JSONObject(); + to.put("x", toX + toW/2); + to.put("y", toY); + // to.put("angle", 1.5707964); + to.put("angle", Math.PI/2); + to.put("id", element.getString("id")); + JSONArray points = new JSONArray(); + JSONObject point1 = new JSONObject(); + point1.put("x", validateJson(from.getInteger("x"))); + point1.put("y", (validateJson(from.getInteger("y")) + validateJson(to.getInteger("y"))) / 2); + points.add(point1); + JSONObject point2 = new JSONObject(); + point2.put("x", validateJson(to.getInteger("x"))); + point2.put("y", (validateJson(from.getInteger("y")) + validateJson(to.getInteger("y"))) / 2); + points.add(point2); + linker.put("points", points); + linker.put("locked", false); + JSONArray dataAttributes = new JSONArray(); + JSONObject dataAttribute1 = new JSONObject(); + dataAttribute1.put("name", "AWSProperties"); + dataAttribute1.put("type", "string"); + dataAttribute1.put("value", ""); + dataAttribute1.put("category", "default"); + dataAttribute1.put("id", "AWSPropertiesID"); + linker.put("dataAttributes", dataAttributes); + linker.put("orderIndex", 0); + JSONObject props = new JSONObject(); + props.put("zindex", zindex); + linker.put("props", props); + JSONObject lineStyle = new JSONObject(); + lineStyle.put("lineWidth", 2); + lineStyle.put("lineColor", "50,50,50"); + lineStyle.put("lineStyle", "solid"); + lineStyle.put("beginArrowStyle", "none"); + lineStyle.put("endArrowStyle", "solidArrow"); + linker.put("lineStyle", lineStyle); + JSONObject fontStyle = new JSONObject(); + fontStyle.put("fontFamily", "Arial"); + fontStyle.put("size", 13); + fontStyle.put("color", "50,50,50"); + fontStyle.put("bold", false); + fontStyle.put("italic", false); + fontStyle.put("underline", false); + fontStyle.put("textAlign", "centers"); + linker.put("fontStyle", fontStyle); + linker.put("from", from); + linker.put("to", to); + + return linker; + } + + private static class Comparator1 implements Comparator { + @Override + public int compare(JSONObject model1, JSONObject model2) { + Integer level1 = model1.getInteger("level"); + Integer level2 = model2.getInteger("level"); + int result = level1.compareTo(level2); + if (result == 0) { + Integer index1 = model1.getInteger("index"); + Integer index2 = model2.getInteger("index"); + result = index1.compareTo(index2); + } + return result; + } + } + + /** + * 创建节点 + */ + public JSONObject getMethodElementsJSONArray(JSONArray elements, String methodId, double initX, double initY, double zindex) throws Exception { + JSONObject object = new JSONObject(); + + JSONObject elementNumberMap = new JSONObject(); + JSONObject elementPNumberMap = new JSONObject(); + //JSONArray转成JSONObject + for (int i = 0; i < elements.size(); i++) { + JSONObject element = elements.getJSONObject(i); + elementNumberMap.put(element.getString("number"), element); + } + for (int i = 0; i < elements.size(); i++) { + JSONObject element = elements.getJSONObject(i); + + JSONArray pNumberArray = new JSONArray(); + String pNumber = element.containsKey("parent number") ? element.getString("parent number") : "-1"; + pNumber = elementNumberMap.containsKey(pNumber) ? pNumber : "-1"; + if (elementPNumberMap.containsKey(pNumber)) { + pNumberArray = elementPNumberMap.getJSONArray(pNumber); + } + element.put("index", pNumberArray.size() + 1); + elementNumberMap.put(element.getString("number"), element); + pNumberArray.add(element); + elementPNumberMap.put(pNumber, pNumberArray); + } + + getElementWidth(elementNumberMap, elementPNumberMap, "-1"); + List list = new ArrayList(); + Set names = elementNumberMap.keySet(); + for (String name : names) { + list.add(elementNumberMap.getJSONObject(name)); + } + Collections.sort(list, new Comparator1()); + + JSONObject methodDefine = CoeDesignerUtil.getMethodDefine(methodId); + JSONObject methodCategory = methodDefine.getJSONObject("methodCategory"); + JSONObject methodShapes = methodDefine.getJSONObject("methodShapes"); + //确定元素的位置 + Map numberIdMap = new HashMap(); + Map levelWidth = new HashMap(); + int pageEdge = 100; + JSONArray emptyJSONArray = new JSONArray(); + int count = 0; + for (JSONObject jsonObject : list){ + count++; + if (count % 9 == 0) { + initY += 100; + levelWidth = new HashMap(); + } + String number = jsonObject.getString("number"); + String parentNumber = jsonObject.containsKey("parent number") ? jsonObject.getString("parent number") : ""; + if (elementNumberMap.containsKey(parentNumber)) { + zindex++; + } + + String id = jsonObject.getString("id"); + numberIdMap.put(number, id); + JSONObject excelData = elementNumberMap.getJSONObject(number); + JSONObject shape = methodShapes.getJSONObject(excelData.getString("type")); + JSONObject element = new JSONObject(); + element.put("id", id); + element.put("name", shape.getString("name")); + element.put("title", shape.getString("title")); + element.put("text", excelData.containsKey("name") ? validateJson(excelData.getString("name")) : ""); + element.put("category", shape.getString("category")); + element.put("group", ""); + element.put("groupName", ""); + element.put("locked", false); + element.put("link", ""); + element.put("children", emptyJSONArray); + element.put("parent", ""); + element.put("orderIndex", 0); + element.put("resizeDir", new String[]{"tl", "tr", "br", "bl"}); + JSONObject attribute = new JSONObject(); + attribute.put("container", false); + attribute.put("visible", true); + attribute.put("rotatable", false); + attribute.put("linkable", true); + attribute.put("editable", true); + attribute.put("markerOffset", 5); + element.put("attribute", attribute); + //JSONArray dataAttributes = methodCategory.getJSONArray("dataAttributes"); + JSONArray dataAttributes = JSONArray.parseArray(methodCategory.getString("dataAttributes")); + JSONObject AWSProperties = new JSONObject(); + AWSProperties.put("name", "AWSProperties"); + AWSProperties.put("type", "string"); + AWSProperties.put("value", ""); + AWSProperties.put("category", "default"); + AWSProperties.put("id", "_" + new UtilString(UUIDGener.getUUID()).replace("-", "")); + AWSProperties.put("linksArray", emptyJSONArray); + AWSProperties.put("attributesContent", ""); + AWSProperties.put("attributesJsonArray", emptyJSONArray); + AWSProperties.put("privateAttribute", emptyJSONArray); + AWSProperties.put("privateAttributeContent", emptyJSONArray); + if ("data.form".equals(methodId)) { + AWSProperties.put("privateAttribute", "{'type':'类型'}"); + AWSProperties.put("privateAttributeContent", "电子表单"); + } + AWSProperties.put("privateShapesName", emptyJSONArray); + AWSProperties.put("shapeGroupId", ""); + AWSProperties.put("isCopy", ""); + AWSProperties.put("shapeDesc", ""); + AWSProperties.put("upFilesArray", emptyJSONArray); + AWSProperties.put("relevanceShapes", emptyJSONArray); + for (int index = 0; index < dataAttributes.size(); index++) { + String attributeId = "_" + new UtilString(UUIDGener.getUUID()).replace("-", ""); + dataAttributes.getJSONObject(index).put("id", attributeId); + } + dataAttributes.add(AWSProperties); + element.put("dataAttributes", dataAttributes); + int width = validateJson(excelData.getInteger("width")); + int level = validateJson(excelData.getInteger("level")); + int x = 0; + int y = 0; + int w = validateJson(shape.getJSONObject("props").getInteger("w")); + int h = validateJson(shape.getJSONObject("props").getInteger("h")); + int currentWidth = 50; + if (levelWidth.containsKey(level)) { + currentWidth = levelWidth.get(level) + 50; + } + x = currentWidth + width/2 - w/2 + pageEdge; + y = (level - 1) * (h + 50) + pageEdge + (int)initY; + if (y < 0) { + y = 100; + } + levelWidth.put(level, currentWidth + width); + JSONObject props = new JSONObject(); + props.put("w", w); + props.put("h", h); + props.put("x", x); + props.put("y", y); + props.put("zindex", zindex); + props.put("angle", 0); + element.put("props", props); + JSONObject shapeStyle = new JSONObject(); + shapeStyle.put("alpha", 1); + element.put("shapeStyle", shapeStyle); + JSONObject lineStyle = shape.getJSONObject("lineStyle"); + if (lineStyle != null && !lineStyle.isEmpty()) { + lineStyle.put("lineStyle", "solid"); + element.put("lineStyle", lineStyle); + } else { + lineStyle = new JSONObject(); + lineStyle.put("lineWidth", 2); + lineStyle.put("lineColor", "50,50,50"); + lineStyle.put("lineStyle", "solid"); + element.put("lineStyle", lineStyle); + } + JSONObject fillStyle = shape.getJSONObject("fillStyle"); + if (fillStyle != null && !fillStyle.isEmpty()) { + fillStyle.put("angle", Double.parseDouble(runJs(fillStyle.getString("angle")))); + if (!fillStyle.containsKey("color")) { + fillStyle.put("color", "255,255,255"); + } + element.put("fillStyle", fillStyle); + } else { + fillStyle = new JSONObject(); + fillStyle.put("type", "solid"); + fillStyle.put("color", "255,255,255"); + element.put("fillStyle", fillStyle); + } + JSONObject fontStyle = new JSONObject(); + fontStyle.put("fontFamily", "Arial"); + fontStyle.put("size", 13); + fontStyle.put("color", "50,50,50"); + fontStyle.put("bold", false); + fontStyle.put("italic", false); + fontStyle.put("underline", false); + fontStyle.put("textAlign", "center"); + fontStyle.put("vAlign", "middle"); + fontStyle.put("orientation", "vertical"); + element.put("fontStyle", fontStyle); + JSONArray path = JSONArray.parseArray(shape.getString("path")); + JSONArray newPath = new JSONArray(); + for (int j = 0; j < path.size(); j++) { + JSONObject actions = path.getJSONObject(j); + if (actions.containsKey("actions") && actions.get("actions").toString().contains("ref")) { + String ref = actions.getJSONObject("actions").getString("ref"); + if (ref.equals("rectangle")) { + JSONArray newActions = new JSONArray(); + newActions.add(JSONObject.parseObject("{\"action\": \"move\", \"x\": \"0\", \"y\": \"0\"}")); + newActions.add(JSONObject.parseObject("{\"action\": \"line\", \"x\": \"w\", \"y\": \"0\"}")); + newActions.add(JSONObject.parseObject("{\"action\": \"line\", \"x\": \"w\", \"y\": \"h\"}")); + newActions.add(JSONObject.parseObject("{\"action\": \"line\", \"x\": \"0\", \"y\": \"h\"}")); + newActions.add(JSONObject.parseObject("{\"action\": \"close\"}")); + actions.put("actions", newActions); + } + } + newPath.add(actions); + } + element.put("path", newPath); + JSONObject textBlock = JSONObject.parseObject(shape.getString("textBlock")); + element.put("textBlock", textBlock); + JSONObject textBlockFinal = new JSONObject(); + String textBlockX = textBlock.getString("x").replace("w", w + "").replace("h", h + ""); + String textBlockY = textBlock.getString("y").replace("w", w + "").replace("h", h + ""); + String textBlockW = textBlock.getString("w").replace("w", w + "").replace("h", h + ""); + String textBlockH = textBlock.getString("h").replace("w", w + "").replace("h", h + ""); + if (textBlockX.equals("0")) { + textBlockX = "0.0"; + } + if (textBlockY.equals("0")) { + textBlockY = "0.0"; + } + if (textBlockW.equals("0")) { + textBlockW = "0.0"; + } + if (textBlockH.equals("0")) { + textBlockH = "0.0"; + } + textBlockFinal.put("x", Double.parseDouble(runJs(textBlockX).toString())); + textBlockFinal.put("y", Double.parseDouble(runJs(textBlockY).toString())); + textBlockFinal.put("w", Double.parseDouble(runJs(textBlockW).toString())); + textBlockFinal.put("h", Double.parseDouble(runJs(textBlockH).toString())); + element.put("textBlockFinal", textBlockFinal); + JSONArray anchors = new JSONArray(); + if (shape.containsKey("anchors")) { + anchors = JSONArray.parseArray(shape.getString("anchors")); + } else { + JSONObject anchors1 = new JSONObject(); + anchors1.put("x", "w/2"); + anchors1.put("y", "0"); + anchors.add(anchors1); + JSONObject anchors2 = new JSONObject(); + anchors2.put("x", "w/2"); + anchors2.put("y", "h"); + anchors.add(anchors2); + JSONObject anchors3 = new JSONObject(); + anchors3.put("x", "0"); + anchors3.put("y", "h/2"); + anchors.add(anchors3); + JSONObject anchors4 = new JSONObject(); + anchors4.put("x", "w"); + anchors4.put("y", "h/2"); + anchors.add(anchors4); + } + element.put("anchors", anchors); + element.put("resizeable", "1"); + + if (elementNumberMap.containsKey(parentNumber)) { + String mapId = numberIdMap.get(parentNumber); + if (object.containsKey(mapId)) { + JSONObject linker = addLinker(object.getJSONObject(mapId), element, (int)zindex - 1); + object.put(linker.getString("id"), linker); + } + } + + zindex++; + object.put(id, element); + } + return object; + } + + private String validateJson(String name) { + return name == null ? "" : name; + } + + private int validateJson(Integer index) { + return index == null ? 0 : index; + } + + /** + * 转换为js + * @param val + * @return string + */ + private String runJs(String val) { + String jsVal = ""; + try { + Context cx = Context.enter(); + Scriptable scope = cx.initStandardObjects(); + Object result = cx.evaluateString(scope, val, null, 1, null); + jsVal = Context.toString(result); + } finally { + Context.exit(); + } + return jsVal; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/Number2ChineseNumUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/Number2ChineseNumUtil.java new file mode 100644 index 00000000..383dec66 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/Number2ChineseNumUtil.java @@ -0,0 +1,64 @@ +package com.actionsoft.apps.coe.pal.pal.repository.util; + +public class Number2ChineseNumUtil { + private static String HanDigiStr[] = new String[] { "零","一", "二", "三", "四", "五", "六", "七", "八", "九" }; + + private static String HanDiviStr[] = new String[] { "", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千", "万", "十", "百", "千" }; + + /** + * @param NumStr + * @return + * + */ + public static String convertChineseStr(String NumStr) { + // 输入字符串必须正整数,只允许前导空格(必须右对齐),不宜有前导零 + String ChineseStr = ""; + boolean lastZero = false; + boolean hasValue = false; // 亿、万进位前有数值标记 + boolean blZero=false;//亿、万位为零的标志, + int len, n; + len = NumStr.length(); + if (len > 15) + return "数值过大!"; + for (int i = len - 1; i >= 0; i--) { + if (NumStr.charAt(len - i - 1) == ' ') + continue; + n = NumStr.charAt(len - i - 1) - '0'; + if (n < 0 || n > 9) + return "输入含非数字字符!"; + + if (n != 0) { + if (lastZero) + ChineseStr += HanDigiStr[0]; // 若干零后若跟非零值,只显示一个零 + // 除了亿万前的零不带到后面 + // if( !( n==1 && (i%4)==1 && (lastzero || i==len-1) ) ) // + // 如十进位前有零也不发壹音用此行 + if((i%4==3)&& blZero) //亿位为0,万位非0需要读零 + ChineseStr +=HanDigiStr[0]; + ChineseStr += HanDigiStr[n]; + ChineseStr += HanDiviStr[i]; // 非零值后加进位,个位为空 + hasValue = true; // 置万进位前有值标记 + + } else { + + if ((i % 8) == 0 || ((i % 8) == 4 && hasValue)) // 亿万之间必须有非零值方显示万 + ChineseStr += HanDiviStr[i]; // “亿”或“万” + } + if (i % 8 == 0) + hasValue = false; // 万进位前有值标记逢亿复位 + lastZero = (n == 0) && (i % 4 != 0); + blZero=(n == 0) && (i % 4 == 0); + } + if (ChineseStr.length() == 0) + return HanDigiStr[0]; // 输入空字符或"0",返回"零" + + if(ChineseStr.length()==3&&ChineseStr.substring(1,2).equals("十")&&ChineseStr.substring(0,1).equals("一")){ + ChineseStr=ChineseStr.substring(1,3); + } + if(ChineseStr.length()==2&&ChineseStr.substring(1,2).equals("十")){ + ChineseStr=ChineseStr.substring(1,2); + } + return ChineseStr; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/RepositoryTreeUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/RepositoryTreeUtil.java new file mode 100644 index 00000000..0be00a23 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/RepositoryTreeUtil.java @@ -0,0 +1,271 @@ +package com.actionsoft.apps.coe.pal.pal.repository.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessLevelWeb; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.server.DispatcherRequest; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public class RepositoryTreeUtil { + + public static JSONArray list2tree(List repositoryList, String wsId, String method) { + JSONArray jsonArray = list2tree(repositoryList, wsId, method, true, false, null); + return jsonArray; + } + + public static JSONArray list2tree(List repositoryList, String wsId, String method, boolean professionalIcon, boolean checkbox, String checkboxIds) { + JSONArray jsonArray = new JSONArray(); + + Map repositoryMap = new HashMap(); + repositoryMap.put(wsId, new PALRepositoryModelImpl()); + if (repositoryList == null) { + return jsonArray; + } + for (PALRepositoryModel model : repositoryList) { + repositoryMap.put(model.getVersionId(), model); + } + + List list = new ArrayList(); + for (PALRepositoryModel repository : repositoryList) { + if (repository.getMethodCategory().contains(method)) { + PALRepositoryModelImpl object = new PALRepositoryModelImpl(); + object.setId(repository.getId()); + object.setName(repository.getName()); + object.setLevel(repository.getLevel()); + object.setMethodCategory(repository.getMethodCategory()); + object.setMethodId(repository.getMethodId()); + object.setVersionId(repository.getVersionId()); + object.setVersion(repository.getVersion()); + object.setWsId(repository.getWsId()); + // 责任人和责任部门 + object.setDutyDept(repository.getDutyDept()); + object.setDutyUser(repository.getDutyUser()); + if (repository.getParentId().length() < 36) { + object.setParentId(repository.getParentId() + "_" + wsId); + } else { + String pid = repository.getParentId(); + while(true) { + if(pid.length() < 36) { + object.setParentId(pid + "_" + wsId); + break; + } else if (repositoryMap.containsKey(pid)) { + PALRepositoryModel parentModel = repositoryMap.get(pid); + object.setParentId(parentModel.getId()); + break; + } else { + PALRepositoryModel pModel = PALRepositoryCache.getCache().get(pid); + if (pModel != null) { + pid = pModel.getParentId(); + } else { + object.setParentId(pid); + break; + } + } + } + } + + list.add(object); + } + } + Collections.sort(list, new Comparator1()); + + for (PALRepositoryModel palModel : list) { + JSONObject palObject = new JSONObject(); + palObject.put("id", palModel.getId()); + palObject.put("name", palModel.getName()); + palObject.put("pid", palModel.getParentId()); + palObject.put("versionId", palModel.getVersionId()); + palObject.put("version", palModel.getVersion()); + palObject.put("category", palModel.getMethodCategory()); + palObject.put("method", palModel.getMethodId()); + // 责任部门和责任人 + palObject.put("dutyDept", palModel.getDutyDept()); + palObject.put("dutyDeptName", ""); + if (!UtilString.isEmpty(palModel.getDutyDept())) { + DepartmentModel model = SDK.getORGAPI().getDepartmentById(palModel.getDutyDept()); + if (model != null) palObject.put("dutyDeptName", model.getName()); + } + palObject.put("dutyUser", palModel.getDutyUser()); + palObject.put("dutyUserName", ""); + if (!UtilString.isEmpty(palModel.getDutyUser())) { + UserModel model = SDK.getORGAPI().getUser(palModel.getDutyUser()); + if (model != null) palObject.put("dutyUserName", model.getUserName()); + } + // if (professionalIcon) { + if (false) { + palObject.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/" + palModel.getMethodId() + "/16.png"); + if (palModel.getMethodId().contains("epc")) { + palObject.put("icon", "../apps/com.actionsoft.apps.coe.method.process.epc/img/method/" + palModel.getMethodId() + "/16.png"); + } + if (palModel.getMethodId().contains("flowchart")) { + palObject.put("icon", "../apps/com.actionsoft.apps.coe.method.process.flowchart/img/method/process.flowchart/16.png"); + } + } else { + if (palModel.getMethodId().equals("default")) { + palObject.put("iconFont", ""); + // palObject.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/icon/unprofessional_tree_folder.png"); + } else { + // palObject.put("icon", ""); + palObject.put("iconFont", ""); + } + } + List children = PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryModelsByPid(palModel.getWsId(), palModel.getId()); + if (children == null || children.size() == 0) { + palObject.put("isParent", false); + // String icon = palObject.getString("icon"); + // palObject.put("icon", icon.replace("16.png", "16.leaf.png")); + } else { + palObject.put("isParent", true); + palObject.put("open", false); + } + if (checkbox) { + if (checkboxIds != null && (checkboxIds.equals("-") || checkboxIds.contains(palModel.getId())) && !palModel.getMethodId().equals("default")) { + palObject.put("nocheck", false); + } else { + palObject.put("nocheck", true); + } + } + jsonArray.add(palObject); + } + + return jsonArray; + } + + public static JSONArray list2tree(List repositoryList, String wsId, boolean professionalIcon, boolean checkbox, String checkboxIds) { + JSONArray jsonArray = new JSONArray(); + + Map repositoryMap = new HashMap(); + repositoryMap.put(wsId, new PALRepositoryModelImpl()); + if (repositoryList == null) { + return jsonArray; + } + for (PALRepositoryModel model : repositoryList) { + repositoryMap.put(model.getVersionId(), model); + } + + List list = new ArrayList(); + for (PALRepositoryModel repository : repositoryList) { + PALRepositoryModelImpl object = new PALRepositoryModelImpl(); + object.setId(repository.getId()); + object.setName(repository.getName()); + object.setLevel(repository.getLevel()); + object.setMethodCategory(repository.getMethodCategory()); + object.setMethodId(repository.getMethodId()); + object.setVersionId(repository.getVersionId()); + object.setVersion(repository.getVersion()); + object.setWsId(repository.getWsId()); + // 责任人和责任部门 + object.setDutyDept(repository.getDutyDept()); + object.setDutyUser(repository.getDutyUser()); + object.setParentId(repository.getParentId()); + list.add(object); + } + Collections.sort(list, new Comparator1()); + + for (PALRepositoryModel palModel : list) { + JSONObject palObject = new JSONObject(); + palObject.put("id", palModel.getId()); + palObject.put("name", palModel.getName()); + palObject.put("pid", palModel.getParentId()); + palObject.put("versionId", palModel.getVersionId()); + palObject.put("version", palModel.getVersion()); + palObject.put("category", palModel.getMethodCategory()); + palObject.put("method", palModel.getMethodId()); + // 责任部门和责任人 + palObject.put("dutyDept", palModel.getDutyDept()); + palObject.put("dutyDeptName", ""); + if (!UtilString.isEmpty(palModel.getDutyDept())) { + DepartmentModel model = SDK.getORGAPI().getDepartmentById(palModel.getDutyDept()); + if (model != null) palObject.put("dutyDeptName", model.getName()); + } + palObject.put("dutyUser", palModel.getDutyUser()); + palObject.put("dutyUserName", ""); + if (!UtilString.isEmpty(palModel.getDutyUser())) { + UserModel model = SDK.getORGAPI().getUser(palModel.getDutyUser()); + if (model != null) palObject.put("dutyUserName", model.getUserName()); + } + if (false) { + palObject.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/" + palModel.getMethodId() + "/16.png"); + if (palModel.getMethodId().contains("epc")) { + palObject.put("icon", "../apps/com.actionsoft.apps.coe.method.process.epc/img/method/" + palModel.getMethodId() + "/16.png"); + } + if (palModel.getMethodId().contains("flowchart")) { + palObject.put("icon", "../apps/com.actionsoft.apps.coe.method.process.flowchart/img/method/process.flowchart/16.png"); + } + } else { + if (palModel.getMethodId().equals("default")) { + palObject.put("iconFont", ""); + } else { + palObject.put("iconFont", ""); + } + } + List children = PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryModelsByPid(palModel.getWsId(), palModel.getId()); + if (children == null || children.size() == 0) { + palObject.put("isParent", false); + // String icon = palObject.getString("icon"); + // palObject.put("icon", icon.replace("16.png", "16.leaf.png")); + } else { + palObject.put("isParent", true); + palObject.put("open", false); + } + //流程文件是否为文件夹 + boolean isFolder = palModel.getMethodId().equals("default") ? true : false; + palObject.put("isFolder", isFolder); + + if (checkbox) { + if (checkboxIds != null && (checkboxIds.equals("-") || checkboxIds.contains(palModel.getId())) && !isFolder) { + palObject.put("nocheck", false); + palObject.put("isPublish", false); + } else { + palObject.put("nocheck", true); + palObject.put("isPublish", true); + } + //文件密级校验 + if (HighSecurityUtil.isON() && HighSecurityUtil.fileSecuritySwitch()){ + ResponseObject responseObject = new CoeProcessLevelWeb(DispatcherRequest.getUserContext()).checkFilePemission(palModel.getId()); + if (responseObject.isErr() && !isFolder){ + palObject.put("nocheck", true); + } + } + } + jsonArray.add(palObject); + } + + return jsonArray; + } + + private static class Comparator1 implements Comparator { + @Override + public int compare(PALRepositoryModel model1, PALRepositoryModel model2) { + Integer level1 = model1.getLevel(); + Integer level2 = model2.getLevel(); + int result = level1.compareTo(level2); + if (result == 0) { + Integer index1 = model1.getOrderIndex(); + Integer index2 = model2.getOrderIndex(); + result = index1.compareTo(index2); + } + return result; + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/web/CoeProcessLevelWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/web/CoeProcessLevelWeb.java new file mode 100644 index 00000000..6b14d93b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/web/CoeProcessLevelWeb.java @@ -0,0 +1,9089 @@ +package com.actionsoft.apps.coe.pal.pal.repository.web; + +import com.actionsoft.apps.AppPlatformConfig; +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.coe.pal.pal.ws.constant.CoeWsConstant; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.apps.lifecycle.api.AppsAPIManager; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; +import com.actionsoft.bpms.bpmn.constant.ProcessDefinitionConst; +import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; +import com.actionsoft.bpms.bpmn.engine.cache.util.ProcessDefUtil; +import com.actionsoft.bpms.bpmn.engine.cache.util.ProcessDefVersionUtil; +import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition; +import com.actionsoft.bpms.bpmn.modeler.io.BPMNIO; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.log.auditing.constant.AuditConst; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.commons.security.high.HighSecurity; +import com.actionsoft.bpms.commons.security.logging.model.Level; +import com.actionsoft.bpms.commons.security.mgtgrade.util.GradeSecurityUtil; +import com.actionsoft.bpms.org.cache.DepartmentCache; +import com.actionsoft.bpms.org.cache.UserCache; +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.org.model.RoleModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.repository.ModelRepositoryWeb; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.dc.DCProfileManager; +import com.actionsoft.bpms.server.fs.dc.DCUtil; +import com.actionsoft.bpms.util.Base64; +import com.actionsoft.bpms.util.*; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishUserGroupPerm; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishUserGroupPermModel; +import com.actionsoft.apps.coe.pal.pal.method.PALMethodManager; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodTemplateCache; +import com.actionsoft.apps.coe.pal.pal.method.model.*; +import com.actionsoft.apps.coe.pal.pal.output.OutputDataAPIManager; +import com.actionsoft.apps.coe.pal.pal.output.util.OutputExcelUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.*; +import com.actionsoft.apps.coe.pal.pal.repository.constant.CoeProcessLevelConstant; +import com.actionsoft.apps.coe.pal.pal.repository.dao.*; +import com.actionsoft.apps.coe.pal.pal.repository.designer.CoeDesignerShapeAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.adapter.CoeDesginerAdapter; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerImageCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.PALDesignerFileCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper.CoeFile; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper.CoeFileComparator.ProcessDefinitionDESC; +import com.actionsoft.apps.coe.pal.pal.repository.designer.manage.CoeDesignerAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BPMNModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.path.PLRFilePath; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.dao.DesignerShapeRelationDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.manager.DesignerRelationShapeCacheManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeCopyModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapePasteModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.web.DesignerRelationShapeWeb; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.apps.coe.pal.pal.repository.model.*; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.constant.CoeFileConstant; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.dao.UpFileDao; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.model.UpfileModel; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.web.UpfileWeb; +import com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil; +import com.actionsoft.apps.coe.pal.pal.repository.util.CoeRepositoryImportUtil; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.pal.ws.ui.ContentPane; +import com.actionsoft.apps.coe.pal.pal.ws.web.VersionUtil; +import com.actionsoft.apps.coe.pal.portal.web.CoEPortalSkins; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUserDaoFactory; +import com.actionsoft.apps.coe.pal.team.user.model.CoeUserModel; +import com.actionsoft.exception.AWSException; +import com.actionsoft.exception.BPMNDefException; +import com.actionsoft.i18n.I18nRes; +import com.actionsoft.sdk.local.SDK; +import com.actionsoft.sdk.local.api.AppAPI; +import com.actionsoft.sdk.local.api.LogAPI; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.*; +import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.VerticalAlignment; + +import java.io.*; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.text.Collator; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +public class CoeProcessLevelWeb extends ActionWeb { + private UserContext _uc; + private String sysAppPlatform; + + public CoeProcessLevelWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + /** + * 获取未关闭的工作空间 + * + * @return + */ + public static String getCoeWorspaceHtml() { + StringBuffer html = new StringBuffer(); + List list = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getNormalCoeWorkSpaceModelRecodes(); + for (CoeWorkSpaceModel coeWorkSpaceModel : list) { + html.append(""); + } + return html.toString(); + } + + // 系统名称 + protected static String getSystemNameOption(String plSystemName) { + if (plSystemName.equals("")) { + plSystemName = "-1"; + } + StringBuffer options = new StringBuffer(); + List list = CoeProcessLevelSystemNameDaoFactory.createCoeProcessLevelSystemName().getCoeProcessLevelSystemName(); + String selected = ""; + options.append(""); + for (CoeProcessLevelSystemNameModel coeProcessLevelSystemNameModel : list) { + if (coeProcessLevelSystemNameModel.getUUId().equals(plSystemName)) { + selected = "selected"; + } else { + selected = ""; + } + options.append(""); + } + return options.toString(); + } + + public static String getNewPlSecurityR(String plSecurityW, String plSecurityR) { + StringBuffer newPlSecurityRs = new StringBuffer(); + UtilString utilString = new UtilString(plSecurityW); + List v = utilString.split(","); + for (int i = 0, size = v.size(); i < size; i++) { + String w = (String) v.get(i); + plSecurityR = plSecurityR.replace(",", " "); + if (plSecurityR.indexOf(w) > -1) { + plSecurityR = plSecurityR.replace(w, ""); + } + } + plSecurityR = plSecurityR.trim(); + UtilString r = new UtilString(plSecurityR.toString()); + List newplRs = r.split(" "); + int c = 0; + Iterator it = newplRs.iterator(); + while (it.hasNext()) { + String id = (String) it.next(); + if (id != "") { + if (c == 0) { + newPlSecurityRs.append(id); + } else { + newPlSecurityRs.append(",").append(id); + } + c++; + } + } + return newPlSecurityRs.toString(); + } + + // 返回和原来数据有差异的数据 + public static String getOldValue(String oldStr, String newStr) { + StringBuffer oldValues = new StringBuffer(); + UtilString utilString = new UtilString(newStr); + List v = utilString.split(","); + for (int i = 0, size = v.size(); i < size; i++) { + String w = (String) v.get(i); + oldStr = oldStr.replace(",", " "); + if (oldStr.indexOf(w) > -1) { + oldStr = oldStr.replace(w, ""); + } + } + oldStr = oldStr.trim(); + UtilString r = new UtilString(oldStr.toString()); + List newplRs = r.split(" "); + int c = 0; + Iterator it = newplRs.iterator(); + while (it.hasNext()) { + String id = (String) it.next(); + if (id != "") { + if (c == 0) { + oldValues.append(id); + } else { + oldValues.append(",").append(id); + } + c++; + } + } + return oldValues.toString(); + } + + /** + * 获取流程库的主页面 + * + * @param wsuuid + * @return + */ + public String getCoeRepositoryHtml(String wsuuid) { + boolean isInitTree = SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "INIT_LEVEL_AND_ORDERINDEX", false); + if (isInitTree) { + /*校验资产库模型的level和orderIndex并进行错误更正*/ + checkAndUpdatePALLevelAndOrderIndex(wsuuid); + } + + Map macroLibraries = new HashMap(); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("option", getCoeWorspaceHtml()); + macroLibraries.put("wsuuid", wsuuid); + macroLibraries.put("userId", _uc.getUserModel().getUID()); + CoeWorkSpaceModel model = (CoeWorkSpaceModel) CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstance(wsuuid); + macroLibraries.put("wsName", model == null ? "" : I18nRes.findValue(CoEConstant.APP_ID, model.getWsName())); + macroLibraries.put("treeData", PALRepositoryQueryAPIManager.getInstance().getPalRepositoryTreeRootData(_uc, wsuuid, "", "isUsed")); + macroLibraries.put("appId", CoEConstant.APP_ID); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.html", macroLibraries); + } + + /** + * 每次进入资产库校验资产库模型的level和orderIndex并进行错误更正 + * @param wsId + */ + private void checkAndUpdatePALLevelAndOrderIndex(String wsId) { + PALRepository dao = new PALRepository(); + if(wsId != null && !"".equals(wsId)) { + String[] methodArray = new String[]{"process", "org", "data", "itsystem", "control"}; + for (String method : methodArray) { + getPALTreeChild(wsId, method, 1, dao); + System.out.println("*******更新" + method + "所有子节点的level和orderIndex**********"); + } + } + } + + // 递归获取第一级子流程并更新 + private void getPALTreeChild(String wsId, String parentId, int level, PALRepository dao) { + List list = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByPid(wsId, parentId); + if (list != null && list.size() > 0) { + // 更新level和orderIndex + updateLevelAndOrderIndex(list, level, dao); + // 获取版本id集合 + Set versionIdSet = new HashSet<>(); + for (PALRepositoryModel model : list) { + versionIdSet.add(model.getVersionId()); + } + level += 1; + for (String versionId : versionIdSet) { + for (PALRepositoryModel model : list) { + if (model.getVersionId().equals(versionId) && model.isUse()) { + getPALTreeChild(wsId, model.getId(), level, dao); // 获取子文件更新 + break;// 防止出现多个活动版本时计算错误,只取第一个活动版本 + } + } + } + } + } + + /** + * 更新Level和orderIndex + * @param list + * @param level 正确的level + */ + private void updateLevelAndOrderIndex(List list, int level, PALRepository dao) { + List models = new ArrayList<>(); + ArrayList versionIdList = orderByOrderIndex(list, ""); + for (int i = 0; i < versionIdList.size(); i++) { + for (PALRepositoryModel model : list) { + if (model.getVersionId().equals(versionIdList.get(i))) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model; + modelImpl.setLevel(level); + modelImpl.setOrderIndex(i + 1); + models.add(model); + } + } + } + if (models != null && models.size() > 0) { + // 数据库和缓存更新 + dao.updates(models); + } + } + + /** + * coe流程查询页面 + * + * @param wsId + * @param plId + * @return + * @author zhangming + */ + public String toCoePalPlSearch(String wsId, String plId, String palPath) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(plId); + String category = model.getMethodCategory(); + List methodList = PALMethodManager.getInstance().getPALMethodModelListByMethod(category); + JSONArray methodArray = new JSONArray(); + JSONObject methodAttributes = new JSONObject(); + methodAttributes.put("shapeDesc", "描述/定义"); + methodAttributes.put("number", "编号"); + StringBuilder schema = new StringBuilder(); + for (PALMethodModel methodModel : methodList) { + String methodId = methodModel.getId(); + String methodName = I18nRes.findValue(CoEConstant.APP_ID, methodId); + JSONObject method = new JSONObject(); + method.put("methodId", methodId); + method.put("methodName", methodName); + method.put("methodSchema", methodModel.getSchema()); + methodArray.add(method); + schema.append(methodModel.getSchema()); + List attributes = methodModel.getAttributes(); + if (attributes != null) { + for (PALMethodAttributeModel attribute : attributes) { + if (!"relation".equals(attribute.getType())) { + methodAttributes.put(attribute.getKey(), attribute.getTitle()); + } + } + } + } + + Map macroLibraries = new HashMap(); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("wsId", wsId); + macroLibraries.put("plId", plId); + macroLibraries.put("palPath", palPath); + macroLibraries.put("methods", methodArray); + macroLibraries.put("schema", schema.toString()); + macroLibraries.put("attributes", methodAttributes); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.search.html", macroLibraries); + } + + /** + * coe流程查询 + * + * @param wsId + * @param plId + * @return + * @author zhangming + */ + public String coePalPlSearch(String wsId, String plId, String fileType, String fileName, String shapeType, String shapeName, String attributes) { + JSONArray result = new JSONArray(); + List list = new ArrayList(); + PALRepositoryQueryAPIManager.getInstance().getAllUsedPalRepositoryModelsByPid(wsId, plId, list); + if (!"".equals(fileType) || !"".equals(fileName)) { + fileType = fileType.replace("_", "."); + List removeList = new ArrayList(); + for (PALRepositoryModel palModel : list) { + if (!"".equals(fileType)) { + if (!fileType.contains(palModel.getMethodId())) { + removeList.add(palModel); + continue; + } + } + if (!"".equals(fileName)) { + if (!palModel.getName().contains(fileName)) { + removeList.add(palModel); + continue; + } + } + } + list.removeAll(removeList); + } + + for (PALRepositoryModel palModel : list) { + List> palElements = OutputDataAPIManager.getFileElements(palModel.getId()); + for (Map element : palElements) { + if (!"".equals(shapeType) || !"".equals(shapeName) || !"".equals(attributes)) { + if (!"".equals(shapeType)) { + String type = element.get("type").toString(); + if (!shapeType.equals(type)) { + continue; + } + } + if (!"".equals(shapeName)) { + String text = element.get("text").toString(); + if (!text.contains(shapeName)) { + continue; + } + } + if (!"".equals(attributes)) { + JSONArray attributesJson = JSONArray.parseArray(attributes); + String rule = attributesJson.getJSONObject(0).getString("rule"); + boolean flag = "and".equals(rule); + for (int index = 0; index < attributesJson.size(); index++) { + boolean flagTmp = false; + JSONObject attribute = attributesJson.getJSONObject(index); + String attrId = attribute.getString("attrId"); + String expression = attribute.getString("expression"); + String value = attribute.getString("value"); + if ("notInstall".equals(expression)) { + if (!element.containsKey(attrId)) { + flagTmp = true; + } + } else if ("install".equals(expression)) { + if (element.containsKey(attrId)) { + flagTmp = true; + } + } else { + if (element.containsKey(attrId)) { + String attrValue = (String) element.get(attrId); + if ("contain".equals(expression) && attrValue.contains(value)) { + flagTmp = true; + } else if ("notContain".equals(expression) && !attrValue.contains(value)) { + flagTmp = true; + } + } + } + if ("and".equals(rule) && !flagTmp) { + flag = false; + break; + } else if ("or".equals(rule) && flagTmp) { + flag = true; + break; + } + } + if (!flag) { + continue; + } + } + } + result.add(element); + } + } + + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", result); + return ro.toString(); + } + + /** + * 导出查询的内容 + * + * @param exportData + * @return + * @author zhangming + * @throws IOException + */ + public String coePalPlSearchExport(String exportData, String exportAttributes) { + DCContext dcContext = null; + dcContext = DCUtil.createTempFileContext(CoEConstant.APP_ID, "_search", null, "xls"); + dcContext.setSession(_uc); + UtilFile uf = new UtilFile(dcContext.getFilePath()); + String[] attributes = exportAttributes.split(","); + if (!uf.exists()) { + try { + uf.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + try { + // 创建一个Excel文档对象 + HSSFWorkbook wb = new HSSFWorkbook(); + // 获得指定sheet + HSSFSheet sheet = wb.createSheet(); + + /********************** 样式 **********************/ + HSSFCellStyle setStyle = null; + setStyle = OutputExcelUtil.setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, false, IndexedColors.SKY_BLUE.getIndex()); + setStyle.setWrapText(true); + sheet.setColumnWidth((short) 0, (short) 35.7 * 150); + sheet.setColumnWidth((short) 1, (short) 35.7 * 150); + sheet.setColumnWidth((short) 2, (short) 35.7 * 150); + sheet.setColumnWidth((short) 3, (short) 35.7 * 150); + for (int i = 0; i < attributes.length; i++) { + sheet.setColumnWidth((short) (i + 4), (short) 35.7 * 250); + } + + /********************** title **********************/ + HSSFRow hrsTitle = sheet.createRow(0); + createExcelCell(hrsTitle, 0, "pid", setStyle); + createExcelCell(hrsTitle, 1, "id", setStyle); + createExcelCell(hrsTitle, 2, "plName", setStyle); + createExcelCell(hrsTitle, 3, "text", setStyle); + for (int i = 0; i < attributes.length; i++) { + createExcelCell(hrsTitle, (i + 4), attributes[i], setStyle); + } + + /********************** content **********************/ + setStyle = OutputExcelUtil.setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, false, IndexedColors.WHITE.getIndex()); + JSONArray datas = JSONArray.parseArray(exportData); + for (int i = 0; i < datas.size(); i++) { + JSONObject data = datas.getJSONObject(i); + HSSFRow hrs = sheet.createRow(i + 1); + createExcelCell(hrs, 0, data.getString("pid"), setStyle); + createExcelCell(hrs, 1, data.getString("id"), setStyle); + createExcelCell(hrs, 2, data.getString("plName"), setStyle); + createExcelCell(hrs, 3, data.getString("text"), setStyle); + for (int j = 0; j < attributes.length; j++) { + String value = ""; + if (data.containsKey(attributes[j])) { + value = data.getString(attributes[j]); + if (value.contains("\"value\"")) { + JSONObject valueObj = JSONObject.parseObject(value); + value = valueObj.getString("value"); + } + } + createExcelCell(hrs, (j + 4), value, setStyle); + } + } + wb.write(new FileOutputStream(uf)); + } catch (IOException e) { + e.printStackTrace(); + } + + ResponseObject ro = ResponseObject.newOkResponse(dcContext.getDownloadURL()); + return ro.toString(); + } + + private void createExcelCell(HSSFRow hrs, int cellNum, String cellValue, HSSFCellStyle setBorder) { + // 获得单元格对象 + HSSFCell cell = hrs.getCell(cellNum); + if (null == cell) { + cell = hrs.createCell(cellNum); + } + // 向单元格中放入值 + cell.setCellValue(cellValue); + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + cell.setCellStyle(setBorder); + } + + /** + * 导入文件 + * + * @param wsId + * @param fileName + * @return + * @author zhangming + */ + public String coePalPlSearchImport(String wsId, String fileName, String category) { + DCContext dcContext = null; + dcContext = DCUtil.createTempFileContext(CoEConstant.APP_ID, "_import", null, "xls"); + dcContext.setFileName(fileName); + dcContext.setSession(_uc); + UtilFile uf = new UtilFile(dcContext.getFilePath()); + InputStream is = null; + POIFSFileSystem fs; + HSSFWorkbook wb = null; + HSSFSheet sheet; + HSSFRow row; + try { + is = new FileInputStream(uf); + try { + fs = new POIFSFileSystem(is); + wb = new HSSFWorkbook(fs); + } catch (IOException e) { + e.printStackTrace(); + } + if (wb == null) { + throw new AWSException("导入Excel文件失败"); + } + sheet = wb.getSheetAt(0); + row = sheet.getRow(0); + // 标题总列数 + int colNum = row.getPhysicalNumberOfCells(); + String[] title = new String[colNum]; + for (int i = 0; i < colNum; i++) { + HSSFCell cell = row.getCell(i); + title[i] = cell.getStringCellValue(); + } + if (colNum <= 2 || !"pid".equals(title[0]) || !"id".equals(title[1])) { + ResponseObject ro = ResponseObject.newErrResponse("文件格式错误!"); + return ro.toString(); + } + + int rowNum = sheet.getLastRowNum(); + Map>> datas = new HashMap>>(); + for (int i = 1; i <= rowNum; i++) { + row = sheet.getRow(i); + String fileId = row.getCell(0).getStringCellValue(); + List> list = datas.get(fileId); + if (list == null) { + list = new ArrayList>(); + } + Map map = new HashMap(); + for (int j = 1; j < colNum; j++) { + String stringValue = getStringCellValue(row.getCell(j)); + if ("number".equals(title[j]) && row.getCell(j).getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { + stringValue = stringValue.substring(0, stringValue.indexOf(".")); + } + map.put(title[j], stringValue); + } + list.add(map); + datas.put(fileId, list); + } + + // 属性 + List methodList = PALMethodManager.getInstance().getPALMethodModelListByMethod(category); + Map methodAttributes = new HashMap(); + for (PALMethodModel methodModel : methodList) { + List attributes = methodModel.getAttributes(); + if (attributes != null) { + for (PALMethodAttributeModel attribute : attributes) { + if (!"relation".equals(attribute.getType())) { + methodAttributes.put(attribute.getKey(), attribute); + } + } + } + } + + for (Map.Entry>> data : datas.entrySet()) { + String fileId = data.getKey(); + List> elementsFromExcel = data.getValue(); + BaseModel definModel = CoeDesignerAPIManager.getInstance().getDefinition(fileId, 0); + JSONObject definition = JSONObject.parseObject(definModel.getDefinition()); + JSONObject elementsJson = JSONObject.parseObject(definition.getString("elements")); + for (Map map : elementsFromExcel) { + String shapeId = map.get("id"); + JSONObject elementJson = JSONObject.parseObject(elementsJson.getString(shapeId)); + elementJson.put("text", map.get("text")); + JSONArray dataAttributes = JSONArray.parseArray(elementJson.getString("dataAttributes")); + for (int index = 0; index < dataAttributes.size(); index++) { + JSONObject attr = JSONObject.parseObject(dataAttributes.getString(index)); + if (attr.containsKey("attributesJsonArray")) { + attr.put("shapeDesc", map.get("shapeDesc")); + String number = map.containsKey("number") ? map.get("number") : ""; + attr.put("privateAttributeContent", "{'number':'" + number + "'}"); + attr.put("privateShapesName", "{'number':'" + number + "'}"); + JSONArray attributesJsonArray = attr.getJSONArray("attributesJsonArray"); + for (Map.Entry attributeFromExcel : map.entrySet()) { + String key = attributeFromExcel.getKey(); + if (!key.equals("pid") && !key.equals("id") && !key.equals("plName") && !key.equals("text") && !key.equals("number")) { + if (methodAttributes.containsKey(key)) { + JSONObject attribute = new JSONObject(); + PALMethodAttributeModel attributeModel = methodAttributes.get(key); + attribute.put("id", attributeModel.getKey()); + attribute.put("ref", attributeModel.getRef()); + attribute.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/icon/shape_attribute.png"); + attribute.put("scope", attributeModel.getScope()); + attribute.put("name", attributeModel.getTitle()); + attribute.put("value", map.get(key)); + attribute.put("groupPath", attributeModel.getGroupPath()); + attribute.put("pid", attributeModel.getGroupPath()); + attribute.put("type", attributeModel.getType()); + attribute.put("readonly", attributeModel.getReadonly()); + attribute.put("key", attributeModel.getKey()); + + attributesJsonArray.remove(attribute); + attributesJsonArray.add(attribute); + } + } + } + } + } + elementsJson.put(shapeId, elementJson); + } + definModel.setDefinition(definition.toString()); + CoeDesignerAPIManager.getInstance().storeDefinition(definModel); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + ResponseObject ro = ResponseObject.newErrResponse("File not found!"); + return ro.toString(); + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + ResponseObject ro = ResponseObject.newOkResponse(); + return ro.toString(); + } + + /** + * 准备好需要导出的流程相关数据文件 + * @param session + * @param repositoryIds + * @return + */ + public String coePalPlExport(UserContext session, String repositoryIds) { + List list = new ArrayList<>(); + String wsId = ""; + String category = ""; + JSONArray repositoryIdArr = JSONArray.parseArray(repositoryIds); + for (int i = 0; i < repositoryIdArr.size(); i++) { + String repositoryId = repositoryIdArr.getString(i); + PALRepositoryModel model = PALRepositoryCache.getCache().get(repositoryId); + if (model != null) { + list.add(model); + } + } + Collections.sort(list, new ComparatorMap()); + String dcId = UUIDGener.getUUID(); + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + DCContext dc = new DCContext(session, dcProfile, CoEConstant.APP_ID, "export", dcId); + UtilFile fileDir = new UtilFile(dc.getPath()); + fileDir.mkdirs(); + UtilFile repositoryFile = new UtilFile(dc.getPath() + "/" + "repository.json"); + if (!repositoryFile.exists()) { + try { + repositoryFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + JSONArray repositoryArr = new JSONArray(); + PALRepository repositoryDao = new PALRepository(); + DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); + PALRepositoryPropertyDao repositoryPropertyDao = new PALRepositoryPropertyDao(); + CoeProcessLevelCorrelateDao correlateDao = new CoeProcessLevelCorrelateDao(); + UpFileDao upfileDao = new UpFileDao(); + PALRepositorySpecialPropertyDao specialPropertyDao = new PALRepositorySpecialPropertyDao(); + JSONArray plnameArr = new JSONArray(); + int exportCount = 0; + String exportTitle = "";// 取第一个作为标题 + for (int i = 0; i < list.size(); i++) { + PALRepositoryModel repository = list.get(i); + if (i == 0) { + exportTitle = repository.getName(); + } + plnameArr.add(repository.getName() + VersionUtil.getVersionStrV(repository.getVersion())); + exportCount++; + wsId = repository.getWsId(); + category = repository.getMethodCategory(); + String repositoryId = repository.getId(); + String methodId = repository.getMethodId(); + String repositoryPlrId = repository.getPlRid(); + JSONObject object = new JSONObject(); + object.put("id", repository.getId()); + object.put("wsId", wsId); + object.put("plRid", repository.getPlRid()); + object.put("No", repository.getNo()); + object.put("name", repository.getName()); + object.put("level", repository.getLevel()); + object.put("parentId", repository.getParentId()); + object.put("orderIndex", repository.getOrderIndex()); + object.put("isBottomLevel", repository.isBottomLevel()); + object.put("desc", repository.getDesc()); + object.put("ownerDept", repository.getOwnerDept()); + object.put("ownerUser", repository.getOwnerUser()); + object.put("milestone", repository.getMilestone()); + object.put("input", repository.getInput()); + object.put("output", repository.getOutput()); + object.put("execType", repository.getExecType()); + object.put("systemName", repository.getSystemName()); + object.put("AWSProcessId", repository.getAWSProcessId()); + object.put("diagramUrl", repository.getDiagramUrl()); + object.put("color", repository.getColor()); + object.put("methodCategory", repository.getMethodCategory()); + object.put("methodId", methodId); + object.put("version", repository.getVersion()); + object.put("versionId", repository.getVersionId()); + object.put("isUse", repository.isUse()); + object.put("isPublish", repository.isPublish()); + object.put("isStop", repository.isStop()); + object.put("isApproval", repository.isApproval()); + object.put("isSystemFile", repository.isSystemFile()); + object.put("filePath", repository.getFilePath()); + object.put("historyMaxVersion", repository.getHistoryMaxVersion()); + object.put("viewCount", repository.getViewCount()); + object.put("createUser", repository.getCreateUser()); + object.put("modifyUser", repository.getModifyUser()); + object.put("createDate", repository.getCreateDate() == null ? "" : UtilDate.datetimeFormat(repository.getCreateDate())); + object.put("modifyDate", repository.getModifyDate() == null ? "" : UtilDate.datetimeFormat(repository.getModifyDate())); + object.put("plDutyDept", repository.getDutyDept()); + object.put("plDutyUser", repository.getDutyUser()); + object.put("ext1", repository.getExt1()); + object.put("ext2", repository.getExt2()); + object.put("ext3", repository.getExt3()); + object.put("ext4", repository.getExt4()); + //三员管理流程文件密级 + object.put("securityLevel",repository.getSecurityLevel()); + + List shapeCopyList = repositoryDao.getShapeCopyModelsByRepositoryId(repositoryId); // APP_ACT_COE_PAL_SHAPE_COPY表中的数据 + object.put("shapeCopyList", shapeCopyList2JSONArray(shapeCopyList)); + List shapePasteList = repositoryDao.getShapePasteModelsByRepositoryId(repositoryId); // APP_ACT_COE_PAL_SHAPE_PASTE表中的数据 + object.put("shapePasteList", shapePasteList2JSONArray(shapePasteList)); + List shapeRelationList = relationDao.getModelListByFileId(repositoryId); // APP_ACT_COE_PAL_SHAPE_RLAT表中的数据 + object.put("shapeRelationList", shapeRelationList2JSONArray(shapeRelationList)); + List upfileList = upfileDao.searchByRepositoryId(repositoryId); // APP_ACT_COE_PAL_UPFILE表中的数据 + object.put("upfileList", upfileList2JSONArray(upfileList)); + List repositoryPropertyList = repositoryPropertyDao.getPropertysByPlid(repositoryId, null); // APP_ACT_COE_PAL_PROP 流程模型属性 + object.put("repositoryPropertyList", repositoryPropertyList2JSONArray(repositoryPropertyList)); + Map property = CoePropertyUtil.getPropertysValue(" PROPERTYKEY='" + repositoryId + "_attr' OR PROPERTYKEY='mark_" + repositoryPlrId + "' OR PROPERTYKEY='link_" + repositoryPlrId + "' OR PROPERTYKEY='link_app_" + repositoryPlrId + "' OR PROPERTYKEY='use_" + repositoryPlrId + "' "); // APP_ACT_COE_PROP表中模型属性 + object.put("propertyList", property == null || property.size() == 0 ? new JSONObject() : property2JSONObject(property)); + List correlateList = correlateDao.getModelListByRepositoryId(repositoryId);// APP_ACT_COE_PAL_CORRELATE表中的数据 + object.put("correlateList", correlate2JSONArray(correlateList)); + List specialPropertyList = specialPropertyDao.getSpecialPropertysByPlid(wsId, repositoryId);// APP_ACT_COE_PAL_SPCL_PROP表中的数据 + object.put("specialPropertyList", specialProperty2JSONArray(specialPropertyList)); + + repositoryArr.add(object); + try { + String dcRepositoryFile = dc.getPath() + File.separator + repositoryId; + //判断PAL流程是否与BPMS端流程有关联关系 + boolean isCorrelateBpms = PALRepositoryQueryAPIManager.getInstance().isCorrelateBpms(repositoryId, true); + if (isCorrelateBpms) { + String define = PALRepositoryQueryAPIManager.getInstance().getProcessDefinition(_uc, repositoryId); + UtilFile repositoryFileTargetDir = new UtilFile(dcRepositoryFile + File.separator + repositoryId); + if (!repositoryFileTargetDir.exists()) { + repositoryFileTargetDir.mkdirs(); + } + UtilFile repositoryFileTarget = new UtilFile(dcRepositoryFile + File.separator + repositoryId + File.separator + repositoryId); + if (!repositoryFileTarget.exists()) { + repositoryFileTarget.createNewFile(); + } + repositoryFileTarget.writeUTF8(define); + } else { + // 复制流程文件 + String sourcePath = CoeWsConstant.getWorkspaceRootPath(wsId) + "/v1.0/" + methodId + File.separator + repositoryId; + UtilFile repositoryFileSourceDir = new UtilFile(sourcePath); + UtilFile repositoryFileTargetDir = new UtilFile(dcRepositoryFile + File.separator + repositoryId); + if (repositoryFileSourceDir.exists() && repositoryFileSourceDir.isDirectory()) { + UtilFile.copyDir(repositoryFileSourceDir, repositoryFileTargetDir); + } + } + // 复制所有的附件 + UtilFile targetDir = new UtilFile(dcRepositoryFile + File.separator + "upfile" + File.separator + "repositoryFile"); + UtilFile shapeTargetDir = new UtilFile(dcRepositoryFile + File.separator + "upfile" + File.separator + "shapeFile"); + DCPluginProfile fileProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + if (fileProfile != null) { + // 复制节点附件 + DCContext fileDcContext = new DCContext(session, fileProfile, repositoryId, ""); + UtilFile file = new UtilFile(fileDcContext.getPath().replaceAll(File.separator + File.separator, File.separator)); + if (file.exists()) { + UtilFile tempfile = new UtilFile(shapeTargetDir.getPath()); + if (tempfile.exists()) { + tempfile.mkdirs(); + } + UtilFile.copyDir(file, tempfile); + } + // 复制文件附件 + DCContext shapeDcContext = new DCContext(session, fileProfile, "file", repositoryId); + UtilFile modelFile = new UtilFile(shapeDcContext.getPath()); + if (modelFile.exists()) { + UtilFile tempFile = new UtilFile(targetDir.getPath()); + if (tempFile.exists()) { + tempFile.mkdirs(); + } + UtilFile.copyDir(modelFile, tempFile); + } + } + } catch (IOException e) { + e.printStackTrace(); + return ResponseObject.newErrResponse("export fail").toString(); + } catch (Exception e) { + e.printStackTrace(); + return ResponseObject.newErrResponse("export fail").toString(); + } + } + //存储流程相关的数据 + repositoryFile.writeUTF8(repositoryArr.toString()); + //plMessage.txt导出的流程简要说明 + CoeWorkSpace workspace = new CoeWorkSpace(); + CoeWorkSpaceModel wsModel = workspace.getAllModel(wsId); + JSONObject messageObject = new JSONObject(); + messageObject.put("plNames", plnameArr); + messageObject.put("exportCount", exportCount); + messageObject.put("wsId", wsId); + messageObject.put("wsName", wsModel.getWsName()); + messageObject.put("category", category); + messageObject.put("exportTime", UtilDate.datetimeFormat(new Timestamp(System.currentTimeMillis()))); + messageObject.put("exportUser", SDK.getORGAPI().getUserNames(session.getUID())); + FileOutputStream out = null; + try { + out = new FileOutputStream(dc.getPath() + File.separator + "plMessage.txt"); + out.write(messageObject.toString().getBytes("UTF-8")); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (out != null) { + try { + out.flush(); + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("exportTitle", exportTitle); + ro.put("exportCount", exportCount); + ro.put("dcId", dcId); + return ro.toString(); + } + + /** + * 获取流程导出的下载地址 + * @param session + * @param exportTitle 下载的压缩包的名称一部分(取自其中第一只流程名称 + * @param exportCount 文件数量 + * @param dcId dc下文件的id + * @return + */ + public String getCoePalPlExport(UserContext session, String exportTitle, int exportCount, String dcId) { + //获取导出的流程数据 + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + DCContext dcContext = new DCContext(session, dcProfile, CoEConstant.APP_ID, "export", dcId); + UtilFile repositoryDir = new UtilFile(dcContext.getPath()); + DCContext dc = DCUtil.createTempFileContext(CoEConstant.APP_ID, "", "", "export"); + //设置导出文件dc的名称 + dc.setFileName(exportTitle + (exportCount != 0 ? "等(" + exportCount + "个文件)" : "") + "_" + UtilDate.datetimeFormat(new Timestamp(System.currentTimeMillis())).replace(":", "").replace(" ", "-") + ".export"); + File exportFile = new File(dc.getFilePath()); + dc.setSession(session); + //打包压缩 + try { + UtilFile.zipCompress(repositoryDir.getPath(), exportFile); + } catch (Exception e) { + e.printStackTrace(); + return ResponseObject.newErrResponse("export zip fail").toString(); + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_DOWNLOAD, CoEOpLogConst.INFO_REPOSITORY_DOWNLOAD); + } + return ResponseObject.newOkResponse().put("downLoadUrl", dc.getDownloadURL()).toString(); + } + + /** + * 得到导入流程的页面 + * + * @return + */ + public String openCoePalPlImport() { + String template = "pal.pl.import.htm"; + Map map = Maps.newHashMap(); + map.put("sid", super.getContext().getSessionId()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, template, map); + } + + /** + * 导入成功的结果页面 + * + * @param data + * @return + */ + public String openCoePalPlImportResult(String data) { + String template = "pal.pl.importResult.htm"; + Map map = Maps.newHashMap(); + map.put("sid", super.getContext().getSessionId()); + map.put("data", data); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, template, map); + } + + /** + * 导出流程导入报告 + * + * @param fileName + * @return + */ + public String exportCoePalPlImportResult(String fileName) { + ResponseObject ro = ResponseObject.newOkResponse(); + //获取需要导出的日志数据 + String fileDirName = fileName.split("\\.")[0]; + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + DCContext dcContext = new DCContext(super.getContext(), dcProfile, CoEConstant.APP_ID, "_import", "Normal", fileDirName); + UtilFile logFile = new UtilFile( dcContext.getFilePath()+ File.separator + "importLog.txt"); + + DCContext dc = DCUtil.createTempFileContext(CoEConstant.APP_ID, "", "", "txt"); + dc.setFileName(fileDirName + "_log.txt"); + UtilFile exportLogFile = new UtilFile(dc.getFilePath()); + try { + UtilFile.copyFile(logFile, exportLogFile); + } catch (Exception e) { + e.printStackTrace(); + } + dc.setSession(_uc); + ro.put("downLoadUrl", dc.getDownloadURL()); + return ro.toString(); + } + + /** + * 处理导入流程(批量导入) + * @param files + * @param wsId + * @param parentId + * @param plCategory + * @return + */ + public String handleCoePalPlImport(String files, String wsId, String parentId, String plCategory, String teamId) { + // 1.校验 + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + DCContext dcContext = null; + if (dcProfile != null) { + dcContext = new DCContext(_uc, dcProfile, CoEConstant.APP_ID, "_import", "Normal"); + } + if (dcContext == null) { + return ResponseObject.newErrResponse("导入失败,请重新导入").toString(); + } + String expandId = UUIDGener.getUUID() + "_expand_tmp"; + UtilFile expandDir = new UtilFile(dcContext.getPath() + File.separator + expandId);// 存放所有解压后的文件目录 + expandDir.mkdirs(); + JSONArray fileNameArr = JSONArray.parseArray(files); + + List expandFileList = new ArrayList<>(); + for (int i = 0; i < fileNameArr.size(); i++) { + String fileName = fileNameArr.getString(i); + // 解压文件 + String zipExpandPath = expandDir.getPath() + File.separator + fileName.substring(0, fileName.lastIndexOf(".")); + UtilFile sourceFile = new UtilFile(dcContext.getPath() + File.separator + fileName); + try { + UtilFile.zipExpand(sourceFile, zipExpandPath); + } catch (Exception e) { + e.printStackTrace(); + return ResponseObject.newErrResponse("解压[" + fileName + "]失败,请重试").toString(); + } + expandFileList.add(zipExpandPath); + } + // 校验是否存在plMessage.txt和repository.json + for (int i = 0; i < expandFileList.size(); i++) { + String path = expandFileList.get(i); + UtilFile messageFile = new UtilFile(path + File.separator + "plMessage.txt"); + UtilFile repositoryFile = new UtilFile(path + File.separator + "repository.json"); + if (!messageFile.exists() || !messageFile.isFile() || !repositoryFile.exists() || !repositoryFile.isFile()) { + return ResponseObject.newErrResponse("[" + fileNameArr.getString(i) + "]文件解析错误,请上传正确的流程文件").toString(); + } + } + + String plMethodId = ""; + if (parentId.length() < 36) { + plMethodId = plCategory; + } else { + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(parentId); + if (plModel == null) { + throw new AWSException("导入失败,当前模型不存在,请联系系统管理员或刷新重试"); + } + plMethodId = plModel.getMethodId(); + } + + // 校验文件大类是否符合 + for (int i = 0; i < expandFileList.size(); i++) { + String path = expandFileList.get(i); + UtilFile messageFile = new UtilFile(path + File.separator + "plMessage.txt"); + JSONObject messageObj = JSONObject.parseObject(messageFile.readStrUTF8()); + if (!messageObj.containsKey("exportCount")) {// 兼容之前的单个流程文件导入处理 + return handleCoePalPlImport2(fileNameArr.getString(i), wsId, parentId, plCategory, teamId); + } + if (!plCategory.equals(messageObj.getString("category"))) { + return ResponseObject.newErrResponse("[" + fileNameArr.getString(i) + "]该模型不属于[" + I18nRes.findValue(CoEConstant.APP_ID, plCategory) + "],应导入[" + I18nRes.findValue(CoEConstant.APP_ID, messageObj.getString("category")) + "]目录下").toString(); + } + // 校验是否有新建管控以及管控权限 + UtilFile repositoryFile = new UtilFile(path + File.separator + "repository.json"); + JSONArray repositoryArr = JSONArray.parseArray(repositoryFile.readStrUTF8()); + for (int n = 0; n < repositoryArr.size(); n++) { + JSONObject object = repositoryArr.getJSONObject(n); + String category = object.getString("methodCategory"); + String methodId = object.getString("methodId"); + String name = object.getString("name"); + if (!PALMethodManager.getInstance().havingCreateMethodPerm(plCategory, plMethodId, category, methodId)) { + return ResponseObject.newErrResponse("[" + fileNameArr.getString(i) + "]该模型中[" + name + "]不允许导入,此模型[" + I18nRes.findValue(CoEConstant.APP_ID, methodId) + "]不能创建在[" + I18nRes.findValue(CoEConstant.APP_ID, plMethodId) + "]之下,请联系系统管理员并检查PAL应用参数【建模方法定义规则】中新建规则").toString(); + } + } + } + + //记录有关流程文件导入的日志信息 + JSONObject logObject = new JSONObject(); + JSONArray securityBindList = new JSONArray(); + StringBuilder sbLog = new StringBuilder(); + + String parentVersionId = ""; + int level = 1; + if (parentId.length() < 36) {// 父节点是大类 + parentVersionId = parentId; + } else { + PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(parentId); + parentVersionId = parentModel.getVersionId(); + level = parentModel.getLevel() + 1; + } + + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + CoeWorkSpace workSpace = new CoeWorkSpace(); + // 开始导入 + for (int m = 0; m < expandFileList.size(); m++) { + String path = expandFileList.get(m); + UtilFile repositoryFile = new UtilFile(path + File.separator + "repository.json"); + JSONArray repositoryArr = JSONArray.parseArray(repositoryFile.readStrUTF8()); + for (int n = 0; n < repositoryArr.size(); n++) { + JSONObject object = repositoryArr.getJSONObject(n); + JSONArray listExp = new JSONArray(); + if (n == 0) { + CoeWorkSpaceModel wsModel = workSpace.getInstance(wsId); + logObject.put("importWs", wsModel.getWsName()); + logObject.put("importPl", object.getString("name")); + sbLog.append("【" + wsModel.getWsName() + "】导入“" + object.getString("name") + "”\r\n\n"); + } + String oldId = object.getString("id"); + String oldWsId = object.getString("wsId"); + //String oldPalRid = object.getString("plRid"); + String category = object.getString("methodCategory"); + String methodId = object.getString("methodId"); + String oldRd = object.getString("ownerDept"); + String oldRp = object.getString("ownerUser"); + String oldDd = object.getString("plDutyDept"); + String oldDp = object.getString("plDutyUser"); + + String repositoryPath = path + File.separator + oldId; + + String newId = UUIDGener.getUUID(); + String newPalRid = UUIDGener.getUUID(); + String newVersionId = newId; + PALRepositoryModelImpl repository = new PALRepositoryModelImpl(); + repository.setId(newId); + repository.setWsId(wsId); + repository.setPlRid(newPalRid); + repository.setNo(object.getString("No")); + repository.setName(object.getString("name")); + // 层级 + repository.setLevel(level); + //父节点 + repository.setParentId(parentVersionId); + int orderIndex = coeProcessLevel.getChildrenMaxOrderIndexByPidAndWsId(parentId, wsId); + repository.setOrderIndex(orderIndex + 1); + repository.setBottomLevel(validateJson(object.getInteger("isBottomLevel"))); + repository.setDesc(object.containsKey("desc") ? object.getString("desc") : ""); + //流程责任部门和人员(判断对应的部门和人员是否存在) + if (StringUtils.isEmpty(oldRd)) { + repository.setOwnerDept(""); + } else { + if (wsId.equals(oldWsId)) { + repository.setOwnerDept(oldRd); + } else { + repository.setOwnerDept(""); + } + } + if (StringUtils.isEmpty(oldRp)) { + repository.setOwnerUser(""); + } else { + if (wsId.equals(oldWsId)) { + repository.setOwnerUser(oldRp); + } else { + repository.setOwnerUser(""); + } + } + repository.setMilestone(object.getString("milestone")); + repository.setInput(object.containsKey("input") ? object.getString("input") : ""); + repository.setOutput(object.containsKey("output") ? object.getString("output") : ""); + repository.setExecType(validateJson(object.getInteger("execType"))); + repository.setSystemName(object.getString("systemName")); + repository.setAWSProcessId(object.getString("AWSProcessId")); + repository.setDiagramUrl(object.getString("diagramUrl")); + repository.setColor(object.getString("color")); + repository.setMethodCategory(category); + repository.setMethodId(methodId); + //版本 + repository.setVersion(1); + repository.setVersionId(newVersionId); + //使用状态和发布状态 + repository.setUse(true); + repository.setPublish(false); + repository.setSystemFile(object.getBoolean("isSystemFile")); + //流程存放路径 + if (object.containsKey("filePath") && (!object.getString("filePath").equals(""))) { + String palFilePath = object.getString("filePath"); + palFilePath = palFilePath.replace(oldWsId, wsId).replace(oldId, newId); + palFilePath = CoeProcessLevelUtil.replaceRepositoryFilePath(palFilePath);// 兼容老版本流程导入到应用化的PAL中 + repository.setFilePath(palFilePath); + } else { + repository.setFilePath(""); + } + repository.setHistoryMaxVersion("0"); + repository.setViewCount(0L); + //流程创建人和修改人以及创建时间和修改时间 + repository.setCreateUser(_uc.getUID()); + repository.setModifyUser(_uc.getUID()); + Timestamp date = new Timestamp(System.currentTimeMillis()); + repository.setCreateDate(date); + String importTime = UtilDate.datetimeFormat(date); + List locList = Lists.newArrayList(); + String importLoc = getImportLoc(parentId, level - 1, locList) + "/" + object.getString("name"); + logObject.put("importTime", importTime); + logObject.put("importLoc", importLoc); + sbLog.append(importTime + "导入" + importLoc + "\r\n\n"); + + repository.setModifyDate(date); + //判断责任部门和人员是否存在 + if (DepartmentCache.getModel(oldDd) == null) { + repository.setDutyDept(""); + if (StringUtils.isNotEmpty(oldDd)) { + listExp.add("原文件属性【责任部门】关联“" + oldDd + "”,断开关联"); + } + } else { + repository.setDutyDept(oldDd); + } + if (UserCache.getModel(oldDp) == null) { + repository.setDutyUser(""); + if (StringUtils.isNotEmpty(oldDp)) { + listExp.add("原文件属性【责任人】关联“" + oldDp + "”,断开关联"); + } + } else { + repository.setDutyUser(oldDp); + } + repository.setStop(false); + repository.setApproval(false); + + //文件密级标定判断 + Integer securityLevel = object.getInteger("securityLevel"); + if (HighSecurity.isON() && HighSecurityUtil.fileSecuritySwitch()){ + if(null == securityLevel || -1 == securityLevel){ + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(methodId); + if (!(methodModel == null || methodModel.isFolder())) { + //三员管理开启 + JSONObject securityObject = new JSONObject(); + securityObject.put("uuid",repository.getId()); + securityObject.put("name",repository.getName()); + securityBindList.add(securityObject); + } + } + } + repository.setSecurityLevel(securityLevel); + + //流程相关的数据 + List shapeRelationList; + List upfileList; + List repositoryPropertyList; + List specialPropertyList; + + shapeRelationList = JSONArray2ShapeRelationList(object.getJSONArray("shapeRelationList"), newId); + upfileList = JSONArray2UpfileList(object.getJSONArray("upfileList"), newId); + repositoryPropertyList = JSONArray2RepositoryPropertyList(object.getJSONArray("repositoryPropertyList"), newId); + specialPropertyList = handleConvertSpecialListOfObject(object.getJSONArray("specialPropertyList"), oldId, oldWsId, newId, wsId); + + Map newShapeIds = Maps.newHashMap(); + if (!"default".equals(methodId) && PALMethodCache.getPALMethodModelById(methodId) != null && !PALMethodCache.getPALMethodModelById(methodId).isFolder()) { + //copy流程文件到workspace下 + UtilFile plSourceFileDir = new UtilFile(repositoryPath + File.separator + oldId); + String plTargetPath = CoeWsConstant.getWorkspaceRootPath(wsId) + "/v1.0/" + methodId + File.separator + newId; + UtilFile plTargetFileDir = new UtilFile(plTargetPath); + if (plSourceFileDir.exists() && plSourceFileDir.isDirectory()) { + String[] fileList = plSourceFileDir.list(); // 目录下所有文件 + for (String name : fileList) { + // fileName是不是要保存的文件名,如果不是,则删除 + UtilFile sourceFile = new UtilFile(plSourceFileDir + "/" + name); + String newFileName = name; + if (newFileName.indexOf(oldId) > -1) { + newFileName = newFileName.replace(oldId, newId); + } + UtilFile targetFile = new UtilFile(plTargetFileDir + "/" + newFileName); + try { + UtilFile.copyFile(sourceFile, targetFile); + } catch (Exception e) { + e.printStackTrace(); + } + } + } else { + return ResponseObject.newErrResponse("请上传正确的流程文件").toString(); + } + //处理流程文件(localAttribute,elements,dataAttributes,uuid) + UtilFile plFile = new UtilFile(plTargetPath + File.separator + newId); + UtilFile plFileJson = new UtilFile(plTargetPath + File.separator + newId + ".json"); + String define = plFile.readStrUTF8(); + String shapeAttributeJson = plFileJson.readStrUTF8(); + + CoeDesignerShapeAPIManager manager = CoeDesignerShapeAPIManager.getInstance(); + JSONObject definition = JSONObject.parseObject(define); + JSONArray shapeAttrArray = JSONArray.parseArray(shapeAttributeJson); + JSONObject newLocalAttribute = new JSONObject(); + manager.handlePlShapeAttrConfig(wsId, methodId, newLocalAttribute); + definition.put("localAttribute", newLocalAttribute); + definition.put("uuid", newId); + //获取所有的节点 + JSONObject elements = definition.getJSONObject("elements"); + JSONObject newElements = new JSONObject(); + Iterator it1 = elements.keySet().iterator(); + while (it1.hasNext()) { + String key = it1.next(); + newShapeIds.put(key, UUIDGener.getObjectId()); + } + int index = 0; + int shapeAttrIndex = 0; + sbLog.append("节点有:"); + List shapeNames = Lists.newArrayList(); + Iterator it = elements.keySet().iterator(); + while (it.hasNext()) { + index++; + String key = it.next(); + //newShapeIds.put(key, UUIDGener.getObjectId()); + JSONObject shape = elements.getJSONObject(key); + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + JSONArray newAttributeJsonArray = new JSONArray(); + boolean flag = false; + String shapeName = shape.getString("name"); + if (!shapeName.equals("linker") && !dataAttributes.isEmpty() && dataAttributes.size() > 0) { + sbLog.append(shape.getString("text") + ";"); + for (Object object1 : dataAttributes) { + JSONObject obj = (JSONObject) object1; + obj.put("id", UUIDGener.getObjectId()); + if (obj.containsKey("attributesJsonArray")) { + //处理节点属性 + JSONArray attributesJsonArray = obj.getJSONArray("attributesJsonArray"); + JSONArray attrArray = newLocalAttribute.getJSONArray(shapeName); + for (int i = 0; i < attributesJsonArray.size(); i++) { + JSONObject tmpObject1 = attributesJsonArray.getJSONObject(i); + if (tmpObject1 == null || tmpObject1.size() == 0) { + continue; + } + String tmpId1 = tmpObject1.getString("id"); + if (attrArray != null && attrArray.size() > 0) { + for (int j = 0; j < attrArray.size(); j++) { + JSONObject tmpObject2 = attrArray.getJSONObject(j); + String tmpId2 = tmpObject2.getString("id"); + if (tmpId1.equals(tmpId2)) { + if (tmpObject1.getString("type").equals("relation")) { + Object relationIds = tmpObject1.get("value"); + if (relationIds.equals("")) { + tmpObject1 = JSONObject.parseObject(tmpObject1.toString()); + newAttributeJsonArray.add(tmpObject1); + shapeNames.add(tmpObject1.getString("name")); + break; + } else { + JSONArray tmpRelationIds = (JSONArray) relationIds; + if (tmpRelationIds.size() > 0 && StringUtils.isEmpty(tmpRelationIds.getString(0))) { + tmpObject1 = JSONObject.parseObject(tmpObject1.toString()); + newAttributeJsonArray.add(tmpObject1); + shapeNames.add(tmpObject1.getString("name")); + break; + } + if (tmpRelationIds.size() > 0 && StringUtils.isNotEmpty(tmpRelationIds.getString(0))) { + //处理如前后置流程的关联类型 + PALRepositoryModel model = PALRepositoryCache.getCache().get(tmpRelationIds.getString(0)); + if (model != null && model.getWsId().equals(wsId)) { + tmpObject1 = JSONObject.parseObject(tmpObject1.toString()); + newAttributeJsonArray.add(tmpObject1); + shapeNames.add(tmpObject1.getString("name")); + break; + } + //处理如RACI的关联类型 + if (tmpRelationIds.getString(0).indexOf("obj_") == 0) { + tmpObject1 = JSONObject.parseObject(tmpObject1.toString()); + newAttributeJsonArray.add(tmpObject1); + shapeNames.add(tmpObject1.getString("name")); + break; + } + } + } + } else { + tmpObject1 = JSONObject.parseObject(tmpObject1.toString()); + newAttributeJsonArray.add(tmpObject1); + if (tmpObject1.containsKey("key")) { + shapeNames.add(tmpObject1.getString("name")); + } + break; + } + } + } + } + } + obj.put("attributesJsonArray", newAttributeJsonArray); + //处理链接流程 + JSONArray linkArrays = obj.getJSONArray("linksArray"); + if (linkArrays != null && linkArrays.size() > 0) { + for (int i = 0; i < linkArrays.size(); i++) { + JSONObject linkObject = linkArrays.getJSONObject(i); + PALRepositoryModel model = PALRepositoryCache.getCache().get(linkObject.getString("uuid")); + if (model == null) { + listExp.add("原【" + shape.getString("text") + "】形状属性链接模型“" + linkObject.getString("name") + "”,断开关联"); + obj.put("linksArray", new JSONArray()); + shape.put("link", ""); + flag = true; + break; + } else { + if (!wsId.equals(model.getWsId())) { + listExp.add("原【" + shape.getString("text") + "】形状属性链接模型“" + linkObject.getString("name") + "”,断开关联"); + obj.put("linksArray", new JSONArray()); + shape.put("link", ""); + flag = true; + break; + } + } + } + } + } + } + } + shapeAttrIndex += newAttributeJsonArray.size(); + if (shapeName.equals("linker")) { + index--; + JSONObject formObject = shape.getJSONObject("from"); + formObject.put("id", newShapeIds.get(formObject.getString("id"))); + JSONObject toObject = shape.getJSONObject("to"); + toObject.put("id", newShapeIds.get(toObject.getString("id"))); + } + shape.put("attributesJsonArray", JSONArray.parseArray(newAttributeJsonArray.toString())); + shape.put("id", newShapeIds.get(key)); + // 父节点parent替换 + if (UtilString.isNotEmpty(shape.getString("parent")) && newShapeIds.containsKey(shape.getString("parent"))) { + shape.put("parent", newShapeIds.get(shape.getString("parent"))); + } + // 子节点parent替换 + JSONArray childrenArr = shape.getJSONArray("children"); + if (childrenArr != null && childrenArr.size() > 0) { + JSONArray newChildrenArr = new JSONArray(); + for (int i = 0; i < childrenArr.size(); i++) { + childrenArr.set(i, newShapeIds.containsKey(childrenArr.getString(i)) ? newShapeIds.get(childrenArr.getString(i)) : childrenArr.getString(i)); + } + shape.put("children", childrenArr); + } + newElements.put(newShapeIds.get(key), elements.getJSONObject(key)); + //处理节点属性json文件 + if (shapeAttrArray != null) { + for (int i = 0; i < shapeAttrArray.size(); i++) { + JSONObject object1 = shapeAttrArray.getJSONObject(i); + if (object1.getString("id").equals(key)) { + object1.put("id", newShapeIds.get(key)); + JSONObject dataAttrs = object1.getJSONObject("dataAttributes"); + if (flag) { + dataAttrs.put("linksArray", new JSONArray()); + } + dataAttrs.put("attributesJsonArray", newAttributeJsonArray); + } + } + } + } + logObject.put("shapeNum", index); + logObject.put("shapeAttrNum", shapeAttrIndex); + sbLog.append("\r\n形状属性有:" + Joiner.on(",").join(shapeNames)); + sbLog.append("\r\n形状属性共有:" + shapeAttrIndex + "个\r\n"); + definition.put("elements", newElements); + //写入文件 + plFile.writeUTF8(JSON.toJSONString(definition)); + if (shapeAttrArray != null) { + plFileJson.writeUTF8(JSON.toJSONString(shapeAttrArray)); + } + } + + //处理附件 + // 拷贝附件文件到upfile 路径下面 + UtilFile repositoryUpFileSourceDir = new UtilFile(repositoryPath + File.separator + "upfile"); + if (repositoryUpFileSourceDir.isDirectory() && repositoryUpFileSourceDir.exists()) { + DCPluginProfile fileDcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + //文件附件 + UtilFile plUpFileSourceDir = new UtilFile(repositoryUpFileSourceDir.getPath() + File.separator + "repositoryFile"); + if (plUpFileSourceDir.isDirectory() && plUpFileSourceDir.exists()) { + String[] fileList = plUpFileSourceDir.list(); + if (fileList.length > 0) { + DCContext fileDc = new DCContext(super.getContext(), fileDcProfile, CoEConstant.APP_ID, "file", newId); + UtilFile upfileDir = new UtilFile(fileDc.getPath()); + if (!upfileDir.exists()) { + upfileDir.mkdirs(); + } + if (upfileDir.exists() && upfileDir.isDirectory()) { + try { + UtilFile.copyDir(plUpFileSourceDir, upfileDir); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + //节点附件 + if (!"default".equals(methodId)) { + UtilFile shapeUpFileSourceDir = new UtilFile(repositoryUpFileSourceDir.getPath() + File.separator + "shapeFile"); + if (shapeUpFileSourceDir.isDirectory() && shapeUpFileSourceDir.exists()) { + String[] fileList = shapeUpFileSourceDir.list(); + if (fileList.length > 0) { + for (int i = 0; i < fileList.length; i++) { + String tmpFileDirName = fileList[i]; + UtilFile shapeUpFileDir = new UtilFile(shapeUpFileSourceDir.getPath() + File.separator + tmpFileDirName); + DCContext fileDc = new DCContext(super.getContext(), fileDcProfile, CoEConstant.APP_ID, newId, newShapeIds.get(tmpFileDirName)); + UtilFile upfileDir = new UtilFile(fileDc.getPath()); + if (!upfileDir.exists()) { + upfileDir.mkdirs(); + } + if (upfileDir.exists() && upfileDir.isDirectory()) { + try { + UtilFile.copyDir(shapeUpFileDir, upfileDir); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } + } + } + + //在插入数据库之前先处理数据 + if (!"default".equals(methodId)) { + handleShapeRelationList(wsId, methodId, shapeRelationList, newShapeIds, listExp); + } + //整理异常信息的顺序 + handleExpMessageSort(listExp); + logObject.put("listExp", listExp); + sbLog.append("\r\n异常处理:\r\n"); + //处理异常信息在日志中换行显示 + handleExpMessageShowLog(listExp, sbLog); + handleUpFileList(upfileList, newShapeIds, sbLog); + handleRepositoryPropertyList(wsId, methodId, repositoryPropertyList, sbLog, logObject); + + PALRepository repositoryDao = new PALRepository(); + DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); + UpFileDao upfileDao = new UpFileDao(); + PALRepositoryPropertyDao repositoryPropertyDao = new PALRepositoryPropertyDao(); + PALRepositorySpecialPropertyDao specialPropertyDao = new PALRepositorySpecialPropertyDao(); + if (repository != null) { + repositoryDao.insert(repository); + } + if (shapeRelationList != null && shapeRelationList.size() > 0) { + relationDao.barchInsert(shapeRelationList); + } + if (upfileList != null && upfileList.size() > 0) { + upfileDao.batchInsert(upfileList); + } + if (repositoryPropertyList != null && repositoryPropertyList.size() > 0) { + repositoryPropertyDao.batchInsert(repositoryPropertyList); + } + if (specialPropertyList != null && specialPropertyList.size() > 0) { + specialPropertyDao.batchInsert(specialPropertyList); + } + sbLog.append("\r\n"); + sbLog.append("\r\n"); + //对于来自PAL小组中的导入的流程添加权限 + if (StringUtils.isNotEmpty(teamId)) { + CoeCooperationAPIManager.getInstance().addRepositoryToTeamAndRolePerm(_uc, teamId, repository.getVersionId(), true, true); + } + } + } +// PALRepositoryCache.getCache().reload(); +// PALRepositoryPropertyCache.getCache().reload(); +// DesignerShapeRelationCache.getCache().reload(); +// PALDesignerFileCache.getCache().reload(); + // 更新关联表数据存储格式 + CoeProcessLevelUtil.correctFileRelationPropData(wsId); + + //三员管理下,导入文件未标定密级返回 + if (HighSecurity.isON() && HighSecurityUtil.fileSecuritySwitch()){ + logObject.put("securityBindList",securityBindList); + } + //写入导入日志 + FileOutputStream logOut = null; + try { + logOut = new FileOutputStream(expandDir.getPath() + "/importLog.txt"); + logOut.write(sbLog.toString().getBytes("UTF-8")); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (logOut != null) { + try { + logOut.flush(); + logOut.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data", JSON.toJSONString(logObject)); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_REPOSITORY_IMPORT_CREATE); + } + return ro.toString(); + } + + /** + * 处理导入流程(单个导入) + * + * @param fileName + * @param wsId + * @param parentId + * @param plCategory + * @return + */ + public String handleCoePalPlImport2(String fileName, String wsId, String parentId, String plCategory, String teamId) { + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + DCContext dcContext = null; + if (dcProfile != null) { + dcContext = new DCContext(super.getContext(), dcProfile, CoEConstant.APP_ID, "_import", "Normal", fileName); + } + if (dcContext == null) { + throw new AWSException("导入失败"); + } + String[] tmpstr = fileName.split("\\."); + String path = dcContext.getPath() + tmpstr[0]; + String filePath = dcContext.getFilePath(); + UtilFile file = new UtilFile(filePath); + //记录有关流程文件导入的日志信息 + JSONObject logObject = new JSONObject(); + JSONArray listExp = new JSONArray(); + StringBuilder sbLog = new StringBuilder(); + List locList = Lists.newArrayList(); + if (file.exists()) { + try { + //解压 + UtilFile.zipExpand(file, path); + } catch (Exception e) { + e.printStackTrace(); + return ResponseObject.newErrResponse("解压失败").toString(); + } + } + + //根据repository.json来处理导入流程的入库 + UtilFile repositoryFile = new UtilFile(path + "/repository.json"); + if (!repositoryFile.isFile() && !repositoryFile.exists()) { + return ResponseObject.newErrResponse("请上传正确的流程文件").toString(); + } + + String parentVersionId = ""; + int level = 1; + if (parentId.length() < 36) {// 父节点是大类 + parentVersionId = parentId; + } else { + PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(parentId); + parentVersionId = parentModel.getVersionId(); + level = parentModel.getLevel() + 1; + } + + JSONObject object = JSON.parseObject(repositoryFile.readStrUTF8()); + String oldId = object.getString("id"); + String oldWsId = object.getString("wsId"); + //String oldPalRid = object.getString("plRid"); + String category = object.getString("methodCategory"); + String methodId = object.getString("methodId"); + String oldRd = object.getString("ownerDept"); + String oldRp = object.getString("ownerUser"); + String oldDd = object.getString("plDutyDept"); + String oldDp = object.getString("plDutyUser"); + //校验导入位置是否合理 + if (!plCategory.equals(category)) { + return ResponseObject.newErrResponse("该模型不属于”" + I18nRes.findValue(CoEConstant.APP_ID, plCategory) + "”,应导入“" + I18nRes.findValue(CoEConstant.APP_ID, category) + "“目录下").toString(); + } + + CoeWorkSpace workSpace = new CoeWorkSpace(); + CoeWorkSpaceModel wsModel = workSpace.getInstance(wsId); + logObject.put("importWs", wsModel.getWsName()); + logObject.put("importPl", object.getString("name")); + sbLog.append("【" + wsModel.getWsName() + "】导入“" + object.getString("name") + "”\r\n\n"); + + String newId = UUIDGener.getUUID(); + String newPalRid = UUIDGener.getUUID(); + String newVersionId = newId; + + PALRepositoryModelImpl repository = new PALRepositoryModelImpl(); + repository.setId(newId); + repository.setWsId(wsId); + repository.setPlRid(newPalRid); + repository.setNo(object.getString("No")); + repository.setName(object.getString("name")); + //层级 + repository.setLevel(level); + //父节点 + repository.setParentId(parentVersionId); + //流程排序 + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + int orderIndex = coeProcessLevel.getChildrenMaxOrderIndexByPidAndWsId(parentId, wsId); + repository.setOrderIndex(orderIndex + 1); + repository.setBottomLevel(validateJson(object.getInteger("isBottomLevel"))); + repository.setDesc(object.containsKey("desc") ? object.getString("desc") : ""); + //流程责任部门和人员(判断对应的部门和人员是否存在) + if (StringUtils.isEmpty(oldRd)) { + repository.setOwnerDept(""); + } else { + if (wsId.equals(oldWsId)) { + repository.setOwnerDept(oldRd); + } else { + repository.setOwnerDept(""); + } + } + if (StringUtils.isEmpty(oldRp)) { + repository.setOwnerUser(""); + } else { + if (wsId.equals(oldWsId)) { + repository.setOwnerUser(oldRp); + } else { + repository.setOwnerUser(""); + } + } + repository.setMilestone(object.getString("milestone")); + repository.setInput(object.containsKey("input") ? object.getString("input") : ""); + repository.setOutput(object.containsKey("output") ? object.getString("output") : ""); + repository.setExecType(validateJson(object.getInteger("execType"))); + repository.setSystemName(object.getString("systemName")); + repository.setAWSProcessId(object.getString("AWSProcessId")); + repository.setDiagramUrl(object.getString("diagramUrl")); + repository.setColor(object.getString("color")); + repository.setMethodCategory(category); + repository.setMethodId(methodId); + //版本 + repository.setVersion(1); + repository.setVersionId(newVersionId); + //使用状态和发布状态 + repository.setUse(true); + repository.setPublish(false); + repository.setSystemFile(object.getBoolean("isSystemFile")); + //流程存放路径 + if (object.containsKey("filePath") && (!object.getString("filePath").equals(""))) { + String palFilePath = object.getString("filePath"); + palFilePath = palFilePath.replace(oldWsId, wsId).replace(oldId, newId); + palFilePath = CoeProcessLevelUtil.replaceRepositoryFilePath(palFilePath);// 兼容老版本流程导入到应用化的PAL中 + repository.setFilePath(palFilePath); + } else { + repository.setFilePath(""); + } + repository.setHistoryMaxVersion("0"); + repository.setViewCount(0L); + //流程创建人和修改人以及创建时间和修改时间 + repository.setCreateUser(_uc.getUID()); + repository.setModifyUser(_uc.getUID()); + repository.setCreateDate(new Timestamp(System.currentTimeMillis())); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String importTime = dateFormat.format(System.currentTimeMillis()); + String importLoc = getImportLoc(parentId, level - 1, locList) + "/" + object.getString("name"); + logObject.put("importTime", importTime); + logObject.put("importLoc", importLoc); + sbLog.append(importTime + "导入" + importLoc + "\r\n\n"); + + repository.setModifyDate(new Timestamp(System.currentTimeMillis())); + //判断责任部门和人员是否存在 + if (DepartmentCache.getModel(oldDd) == null) { + repository.setDutyDept(""); + if (StringUtils.isNotEmpty(oldDd)) { + listExp.add("原文件属性【责任部门】关联“" + oldDd + "”,断开关联"); + } + } else { + repository.setDutyDept(oldDd); + } + if (UserCache.getModel(oldDp) == null) { + repository.setDutyUser(""); + if (StringUtils.isNotEmpty(oldDp)) { + listExp.add("原文件属性【责任人】关联“" + oldDp + "”,断开关联"); + } + } else { + repository.setDutyUser(oldDp); + } + repository.setStop(false); + repository.setApproval(false); + + //流程相关的数据 + List shapeRelationList; + List upfileList; + List repositoryPropertyList; + List specialPropertyList; + + shapeRelationList = JSONArray2ShapeRelationList(object.getJSONArray("shapeRelationList"), newId); + upfileList = JSONArray2UpfileList(object.getJSONArray("upfileList"), newId); + repositoryPropertyList = JSONArray2RepositoryPropertyList(object.getJSONArray("repositoryPropertyList"), newId); + specialPropertyList = handleConvertSpecialListOfObject(object.getJSONArray("specialPropertyList"), oldId, oldWsId, newId, wsId); + + //copy流程文件到workspace下 + UtilFile plSourceFileDir = new UtilFile(path + File.separator + oldId); + String plTargetPath = CoeWsConstant.getWorkspaceRootPath(wsId) + "/v1.0/" + methodId + File.separator + newId; + UtilFile plTargetFileDir = new UtilFile(plTargetPath); + if (plSourceFileDir.exists() && plSourceFileDir.isDirectory()) { + String[] fileList = plSourceFileDir.list(); // 目录下所有文件 + for (String name : fileList) { + // fileName是不是要保存的文件名,如果不是,则删除 + UtilFile sourceFile = new UtilFile(plSourceFileDir + "/" + name); + String newFileName = name; + if (newFileName.indexOf(oldId) > -1) { + newFileName = newFileName.replace(oldId, newId); + } + UtilFile targetFile = new UtilFile(plTargetFileDir + "/" + newFileName); + try { + UtilFile.copyFile(sourceFile, targetFile); + } catch (Exception e) { + e.printStackTrace(); + } + } + } else { + return ResponseObject.newErrResponse("请上传正确的流程文件").toString(); + } + //处理流程文件(localAttribute,elements,dataAttributes,uuid) + UtilFile plFile = new UtilFile(plTargetPath + File.separator + newId); + UtilFile plFileJson = new UtilFile(plTargetPath + File.separator + newId + ".json"); + String define = plFile.readStrUTF8(); + String shapeAttributeJson = plFileJson.readStrUTF8(); + + CoeDesignerShapeAPIManager manager = CoeDesignerShapeAPIManager.getInstance(); + JSONObject definition = JSONObject.parseObject(define); + JSONArray shapeAttrArray = JSONArray.parseArray(shapeAttributeJson); + JSONObject newLocalAttribute = new JSONObject(); + manager.handlePlShapeAttrConfig(wsId, methodId, newLocalAttribute); + definition.put("localAttribute", newLocalAttribute); + definition.put("uuid", newId); + //获取所有的节点 + JSONObject elements = definition.getJSONObject("elements"); + JSONObject newElements = new JSONObject(); + Iterator it1 = elements.keySet().iterator(); + Map newShapeIds = Maps.newHashMap(); + while (it1.hasNext()) { + String key = it1.next(); + newShapeIds.put(key, UUIDGener.getObjectId()); + } + int index = 0; + int shapeAttrIndex = 0; + sbLog.append("节点有:"); + List shapeNames = Lists.newArrayList(); + Iterator it = elements.keySet().iterator(); + while (it.hasNext()) { + index++; + String key = it.next(); + //newShapeIds.put(key, UUIDGener.getObjectId()); + JSONObject shape = elements.getJSONObject(key); + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + JSONArray newAttributeJsonArray = new JSONArray(); + boolean flag = false; + String shapeName = shape.getString("name"); + if (!shapeName.equals("linker") && !dataAttributes.isEmpty() && dataAttributes.size() > 0) { + sbLog.append(shape.getString("text") + ";"); + for (Object object1 : dataAttributes) { + JSONObject obj = (JSONObject) object1; + obj.put("id", UUIDGener.getObjectId()); + if (obj.containsKey("attributesJsonArray")) { + //处理节点属性 + JSONArray attributesJsonArray = obj.getJSONArray("attributesJsonArray"); + JSONArray attrArray = newLocalAttribute.getJSONArray(shapeName); + for (int i = 0; i < attributesJsonArray.size(); i++) { + JSONObject tmpObject1 = attributesJsonArray.getJSONObject(i); + if (tmpObject1 == null) { + continue; + } + String tmpId1 = tmpObject1.getString("id"); + if (attrArray != null && attrArray.size() > 0) { + for (int j = 0; j < attrArray.size(); j++) { + JSONObject tmpObject2 = attrArray.getJSONObject(j); + String tmpId2 = tmpObject2.getString("id"); + if (tmpId1.equals(tmpId2)) { + if (tmpObject1.getString("type").equals("relation")) { + Object relationIds = tmpObject1.get("value"); + if (relationIds.equals("")) { + newAttributeJsonArray.add(tmpObject1); + shapeNames.add(tmpObject1.getString("name")); + break; + } else { + JSONArray tmpRelationIds = (JSONArray) relationIds; + if (tmpRelationIds.size() > 0 && StringUtils.isEmpty(tmpRelationIds.getString(0))) { + newAttributeJsonArray.add(tmpObject1); + shapeNames.add(tmpObject1.getString("name")); + break; + } + if (tmpRelationIds.size() > 0 && StringUtils.isNotEmpty(tmpRelationIds.getString(0))) { + //处理如前后置流程的关联类型 + PALRepositoryModel model = PALRepositoryCache.getCache().get(tmpRelationIds.getString(0)); + if (model != null && model.getWsId().equals(wsId)) { + newAttributeJsonArray.add(tmpObject1); + shapeNames.add(tmpObject1.getString("name")); + break; + } + //处理如RACI的关联类型 + if (tmpRelationIds.getString(0).indexOf("obj_") == 0) { + newAttributeJsonArray.add(tmpObject1); + shapeNames.add(tmpObject1.getString("name")); + break; + } + } + } + } else { + newAttributeJsonArray.add(tmpObject1); + if (tmpObject1.containsKey("key")) { + shapeNames.add(tmpObject1.getString("name")); + } + break; + } + } + } + } + } + obj.put("attributesJsonArray", newAttributeJsonArray); + //处理链接流程 + JSONArray linkArrays = obj.getJSONArray("linksArray"); + if (linkArrays != null && linkArrays.size() > 0) { + for (int i = 0; i < linkArrays.size(); i++) { + JSONObject linkObject = linkArrays.getJSONObject(i); + PALRepositoryModel model = PALRepositoryCache.getCache().get(linkObject.getString("uuid")); + if (model == null) { + listExp.add("原【" + shape.getString("text") + "】形状属性链接模型“" + linkObject.getString("name") + "”,断开关联"); + obj.put("linksArray", new JSONArray()); + shape.put("link", ""); + flag = true; + break; + } else { + if (!wsId.equals(model.getWsId())) { + listExp.add("原【" + shape.getString("text") + "】形状属性链接模型“" + linkObject.getString("name") + "”,断开关联"); + obj.put("linksArray", new JSONArray()); + shape.put("link", ""); + flag = true; + break; + } + } + } + } + } + } + } + shapeAttrIndex += newAttributeJsonArray.size(); + if (shapeName.equals("linker")) { + index--; + JSONObject formObject = shape.getJSONObject("from"); + formObject.put("id", newShapeIds.get(formObject.getString("id"))); + JSONObject toObject = shape.getJSONObject("to"); + toObject.put("id", newShapeIds.get(toObject.getString("id"))); + } + shape.put("attributesJsonArray", newAttributeJsonArray); + shape.put("id", newShapeIds.get(key)); + newElements.put(newShapeIds.get(key), elements.getJSONObject(key)); + //处理节点属性json文件 + if (shapeAttrArray != null) { + for (int i = 0; i < shapeAttrArray.size(); i++) { + JSONObject object1 = shapeAttrArray.getJSONObject(i); + if (object1.getString("id").equals(key)) { + object1.put("id", newShapeIds.get(key)); + JSONObject dataAttrs = object1.getJSONObject("dataAttributes"); + if (flag) { + dataAttrs.put("linksArray", new JSONArray()); + } + dataAttrs.put("attributesJsonArray", newAttributeJsonArray); + } + } + } + } + logObject.put("shapeNum", index); + logObject.put("shapeAttrNum", shapeAttrIndex); + sbLog.append("\r\n形状属性有:" + Joiner.on(",").join(shapeNames)); + sbLog.append("\r\n形状属性共有:" + shapeAttrIndex + "个\r\n"); + definition.put("elements", newElements); + //写入文件 + plFile.writeUTF8(JSON.toJSONString(definition)); + if (shapeAttrArray != null) { + plFileJson.writeUTF8(JSON.toJSONString(shapeAttrArray)); + } + + //处理附件 + // 拷贝附件文件到upfile 路径下面 + UtilFile repositoryUpFileSourceDir = new UtilFile(path + File.separator + "upfile"); + if (repositoryUpFileSourceDir.isDirectory() && repositoryUpFileSourceDir.exists()) { + DCPluginProfile fileDcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + //文件附件 + UtilFile plUpFileSourceDir = new UtilFile(repositoryUpFileSourceDir.getPath() + File.separator + "repositoryFile"); + if (plUpFileSourceDir.isDirectory() && plUpFileSourceDir.exists()) { + String[] fileList = plUpFileSourceDir.list(); + if (fileList.length > 0) { + DCContext fileDc = new DCContext(super.getContext(), fileDcProfile, CoEConstant.APP_ID, "file", newId); + UtilFile upfileDir = new UtilFile(fileDc.getPath()); + if (!upfileDir.exists()) { + upfileDir.mkdirs(); + } + if (upfileDir.exists() && upfileDir.isDirectory()) { + try { + UtilFile.copyDir(plUpFileSourceDir, upfileDir); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + //节点附件 + UtilFile shapeUpFileSourceDir = new UtilFile(repositoryUpFileSourceDir.getPath() + File.separator + "shapeFile"); + if (shapeUpFileSourceDir.isDirectory() && shapeUpFileSourceDir.exists()) { + String[] fileList = shapeUpFileSourceDir.list(); + if (fileList.length > 0) { + for (int i = 0; i < fileList.length; i++) { + String tmpFileDirName = fileList[i]; + UtilFile shapeUpFileDir = new UtilFile(shapeUpFileSourceDir.getPath() + File.separator + tmpFileDirName); + DCContext fileDc = new DCContext(super.getContext(), fileDcProfile, CoEConstant.APP_ID, newId, newShapeIds.get(tmpFileDirName)); + UtilFile upfileDir = new UtilFile(fileDc.getPath()); + if (!upfileDir.exists()) { + upfileDir.mkdirs(); + } + if (upfileDir.exists() && upfileDir.isDirectory()) { + try { + UtilFile.copyDir(shapeUpFileDir, upfileDir); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } + } + + //在插入数据库之前先处理数据 + handleShapeRelationList(wsId, methodId, shapeRelationList, newShapeIds, listExp); + //整理异常信息的顺序 + handleExpMessageSort(listExp); + logObject.put("listExp", listExp); + sbLog.append("\r\n异常处理:\r\n"); + //处理异常信息在日志中换行显示 + handleExpMessageShowLog(listExp, sbLog); + handleUpFileList(upfileList, newShapeIds, sbLog); + handleRepositoryPropertyList(wsId, methodId, repositoryPropertyList, sbLog, logObject); + + PALRepository repositoryDao = new PALRepository(); + DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); + UpFileDao upfileDao = new UpFileDao(); + PALRepositoryPropertyDao repositoryPropertyDao = new PALRepositoryPropertyDao(); + PALRepositorySpecialPropertyDao specialPropertyDao = new PALRepositorySpecialPropertyDao(); + if (repository != null) { + repositoryDao.insert(repository); + } + if (shapeRelationList != null && shapeRelationList.size() > 0) { + relationDao.barchInsert(shapeRelationList); + } + if (upfileList != null && upfileList.size() > 0) { + upfileDao.batchInsert(upfileList); + } + if (repositoryPropertyList != null && repositoryPropertyList.size() > 0) { + repositoryPropertyDao.batchInsert(repositoryPropertyList); + } + if (specialPropertyList != null && specialPropertyList.size() > 0) { + specialPropertyDao.batchInsert(specialPropertyList); + } + PALRepositoryCache.getCache().reload(); + PALRepositoryPropertyCache.getCache().reload(); + DesignerShapeRelationCache.getCache().reload(); + PALDesignerFileCache.getCache().reload(); + + //对于来自流程团队中的导入的流程添加权限 + if (StringUtils.isNotEmpty(teamId)) { + CoeCooperationAPIManager.getInstance().addRepositoryToTeamAndRolePerm(_uc, teamId, repository.getVersionId(), true, true); + } + + //写入导入日志 + try { + FileOutputStream logOut = new FileOutputStream(path + "/importLog.txt"); + logOut.write(sbLog.toString().getBytes("UTF-8")); + logOut.flush(); + logOut.close(); + } catch (IOException e) { + e.printStackTrace(); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data", JSON.toJSONString(logObject)); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_REPOSITORY_IMPORT_CREATE); + } + return ro.toString(); + } + + private void handleExpMessageSort(JSONArray listExp) { + JSONArray tmpFileAttrMess = new JSONArray(); + Iterator it = listExp.iterator(); + while(it.hasNext()) { + String tmp = (String) it.next(); + if (tmp.contains("文件属性")) { + tmpFileAttrMess.add(tmp); + it.remove(); + } + } + listExp.addAll(tmpFileAttrMess); + } + + private void handleExpMessageShowLog(JSONArray listExp, StringBuilder sbLog) { + for (Object exp : listExp) { + sbLog.append(exp + "\r\n"); + } + } + + private String getImportLoc(String parentId, int level, List locList) { + if (level == 0 || level == 1) { + String root = I18nRes.findValue(CoEConstant.APP_ID, parentId); + if (level == 0) { + return root; + } else { + locList.add(root); + Collections.reverse(locList); + return Joiner.on("/").join(locList); + } + } + PALRepositoryModel model = PALRepositoryCache.getCache().get(parentId); + locList.add(model.getName()); + return getImportLoc(model.getParentId(), model.getLevel(), locList); + } + + private void handleShapeRelationList(String wsId, String methodId, List shapeRelationList, Map newShapeIds, JSONArray listExp) { + Map tmpFileMap = Maps.newHashMap(); + Map tmpShapeMap = Maps.newHashMap(); + //获取最新的文件和节点属性数据 + List fileList = PALRepositoryAPIManager.getInstance().getValidAndUseAttributeModels(wsId, methodId); + List shapeList = CoeDesignerShapeAPIManager.getInstance().getAllValidShapeAttributeModels(wsId, methodId); + fileList.forEach(file -> { + if (file.getType().equals("relation")) { + tmpFileMap.put(file.getKey(), file.getNewTitle()); + } + }); + shapeList.forEach(shape -> { + if (shape.getType().equals("relation")) { + tmpShapeMap.put(shape.getKey(), shape.getNewTitle()); + } + }); + + if (shapeRelationList != null && shapeRelationList.size() > 0) { + Iterator iterator = shapeRelationList.iterator(); + while (iterator.hasNext()) { + DesignerShapeRelationModel model = iterator.next(); + String judge = model.getRelationFileId(); + PALRepositoryModel tmpModel = PALRepositoryCache.getCache().get(judge); + + if (tmpModel == null && PALRepositoryCache.getByVersionId(judge).size() <= 0) { + iterator.remove(); + handleRelationAttrExp(model, tmpFileMap, tmpShapeMap, listExp); + } else { + if (wsId.equals(tmpModel.getWsId())) { + String oldShapeId = model.getShapeId(); + if (oldShapeId != null && oldShapeId.contains("obj")) { + model.setShapeId(newShapeIds.get(oldShapeId)); + } + } else { + iterator.remove(); + handleRelationAttrExp(model, tmpFileMap, tmpShapeMap, listExp); + } + } + } + } + } + + private void handleRelationAttrExp(DesignerShapeRelationModel model, Map tmpFileMap, Map tmpShapeMap, JSONArray listExp) { + if (model.getShapeId().equals("")) { + String tmp = tmpFileMap.get(model.getAttrId()); + if (model.getAttrId().equals("plRD")) { + tmp = "责任部门"; + } + if (model.getAttrId().equals("plRP")) { + tmp = "责任人"; + } + if (StringUtils.isNotEmpty(tmp)) { + if (StringUtils.isNotEmpty(model.getRelationShapeText())) { + listExp.add("原文件属性【" + tmp + "】关联“" + model.getRelationShapeText() + "”,断开关联"); + } + } else { + listExp.add("原文件属性【" + model.getAttrId() + "】不存在,关联“" + model.getRelationShapeText() + "”,断开关联"); + } + } else { + String tmp = tmpShapeMap.get(model.getAttrId()); + if (StringUtils.isNotEmpty(tmp)) { + listExp.add("原【" + model.getShapeText() + "】形状属性【" + tmp + "】关联“" + model.getRelationShapeText() + "”,断开关联"); + } else { + listExp.add("原【" + model.getShapeText() + "】形状属性【" + model.getAttrId() + "】不存在,关联“" + model.getRelationShapeText() + "”,断开关联"); + } + } + } + + private void handleUpFileList(List upFileList, Map newShapeIds, StringBuilder sbLog) { + sbLog.append("\r\n导入的附件有:"); + if (upFileList != null && upFileList.size() > 0) { + upFileList.forEach(upFileModel -> { + String oldShapeId = upFileModel.getShape_uuid(); + sbLog.append(upFileModel.getFileName() + ";"); + if (oldShapeId != null && oldShapeId.contains("obj")) { + upFileModel.setShape_uuid(newShapeIds.get(oldShapeId)); + } + }); + } + } + + private void handleRepositoryPropertyList(String wsId, String methodId, List repositoryPropertyList, StringBuilder sbLog, JSONObject logObject) { + sbLog.append("\r\n文件属性有:"); + int index = 0; + if (repositoryPropertyList != null && repositoryPropertyList.size() > 0) { + //获取最新的文件属性数据 + Map tmpFileMap = Maps.newHashMap(); + List fileList = PALRepositoryAPIManager.getInstance().getValidAndUseAttributeModels(wsId, methodId); + fileList.forEach(file -> { + tmpFileMap.put(file.getKey(), file.getNewTitle()); + }); + + Iterator iterator = repositoryPropertyList.iterator(); + while (iterator.hasNext()) { + PALRepositoryPropertyModel property = iterator.next(); + String propertyValue = property.getPropertyValue(); + if (StringUtils.isEmpty(tmpFileMap.get(property.getPropertyId()))) { + iterator.remove(); + continue; + } + if (StringUtils.isNotEmpty(propertyValue) && propertyValue.contains("relationShapeId")) { + JSONObject object = JSON.parseObject(propertyValue); + String judge; + if (object.getString("attrId").equals("lead_process") || object.getString("attrId").equals("rear_process")) { + judge = object.getString("relationShapeId"); + } else { + judge = object.getString("relationFileId"); + } + String[] relationIds = judge.split(","); + if (relationIds.length > 0) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(relationIds[0]); + if (model == null) { + iterator.remove(); + } else { + if (wsId.equals(model.getWsId())) { + object.put("fileId", property.getPlId()); + property.setPropertyValue(JSON.toJSONString(object)); + } else { + iterator.remove(); + } + } + } + } + } + repositoryPropertyList.forEach(p -> sbLog.append(p.getPropertyName() + ";")); + index = repositoryPropertyList.size(); + } + logObject.put("fileAttrNum", index); + sbLog.append("\r\n文件属性共有:" + index + "个"); + } + + private JSONArray correlate2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (CoeProcessLevelCorrelateModel model : list) { + JSONObject object = new JSONObject(); + object.put("wsId", model.getWsId()); + object.put("plId", model.getPlId()); + object.put("plAwsVersionid", model.getPlAwsVersionid()); + object.put("plAwsId", model.getPlAwsId()); + object.put("plVersionId", model.getPlVersionId()); + object.put("correlateType", model.getCorrelateType()); + object.put("isCorrelate", model.isCorrelate()); + array.add(object); + } + } + return array; + } + + private JSONArray specialProperty2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (PALRepositorySpecialPropertyModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("wsId", model.getWsId()); + object.put("plId", model.getPlId()); + object.put("type", model.getType()); + object.put("valueText", model.getValueText()); + array.add(object); + } + } + return array; + } + + public String getCoePalPlVersionCompare(String firstId, String secondId) { + PALRepositoryModel firstModel = PALRepositoryCache.getCache().get(firstId); + PALRepositoryModel secondModel = PALRepositoryCache.getCache().get(secondId); + JSONObject object = CoeProcessLevelUtil.getPlRepositoryCompareMessage(secondModel, firstModel); + return JSON.toJSONString(object); + } + + /** + * 获取单元格数据内容为字符串类型的数据 + * + * @param cell Excel单元格 + * @return String 单元格数据内容 + */ + private String getStringCellValue(HSSFCell cell) { + String strCell = null; + switch (cell.getCellType()) { + case HSSFCell.CELL_TYPE_STRING: + strCell = cell.getStringCellValue(); + break; + case HSSFCell.CELL_TYPE_NUMERIC: + strCell = String.valueOf(cell.getNumericCellValue()); + break; + case HSSFCell.CELL_TYPE_BOOLEAN: + strCell = String.valueOf(cell.getBooleanCellValue()); + break; + case HSSFCell.CELL_TYPE_BLANK: + strCell = ""; + break; + default: + strCell = ""; + break; + } + if (UtilString.isEmpty(strCell)) { + strCell = ""; + } + return strCell; + } + + public String getCoePalPlManage(String wsuuid) { + Map map = new HashMap(); + map.put("sid", super.getContext().getSessionId()); + map.put("option", getCoeWorspaceHtml()); + map.put("wsuuid", wsuuid); + CoeWorkSpaceModel model = (CoeWorkSpaceModel) CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstance(wsuuid); + map.put("wsName", model == null ? "" : I18nRes.findValue(CoEConstant.APP_ID, model.getWsName())); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.manage.html", map); + } + + // 跳转到 tree页面 + public String getCoeProcessLevelTree(String wsId) { + Map macroLibraries = new HashMap(); + macroLibraries.put("coePortal", CoEPortalSkins.getCoESkinsName(getContext())); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("option", getCoeWorspaceHtml()); + macroLibraries.put("wsId", wsId); + CoeWorkSpaceModel model = (CoeWorkSpaceModel) CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstance(wsId); + macroLibraries.put("wsName", model == null ? "" : model.getWsName()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.level.portal.tree.htm", macroLibraries); + } + + /** + * 新建级次 + * + * @param pid 上级UUID + * @param id 本级UUID + * @param type 类型 + * @param editable 是否只读(0:只读) + * @return + */ + public String createOrUpdateCoeProcessLevel(String wsid, String pid, String id, String type, String editable) { + // 获得父级模型 + PALRepositoryModel parentPlModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(pid); + // 获得有哪些建模方法 + List methodModels = null; + if (parentPlModel == null) { + methodModels = PALMethodCache.getPALMethodModelListByMethod(pid); + } else { + methodModels = PALMethodCache.getPALMethodModelListByMethod(parentPlModel.getMethodCategory()); + } + String wsID = wsid; + String plName = ""; + int plLevel = 0; + if (parentPlModel != null) { + plLevel = parentPlModel.getLevel(); + } + String plParentId = pid; + int plOrderIndex = 0; + StringBuffer methodIdsb = new StringBuffer(); + String methodId = ""; + Map macroLibraries = new HashMap(); + // 更新 + List listApps = AppsAPIManager.getInstance().getInstalledApps(); + int size = listApps.size(); + Map map1 = new HashMap(); + for (int i = 0; i < size; i++) { + map1.put(listApps.get(i).getId(), listApps.get(i).getRuntimeState()); + } + if (!id.equals("") && !id.equals("0")) { + macroLibraries.put("showStyle", ""); + PALRepositoryModel plModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(id); + if ("default".equals(plModel.getMethodId())) { + macroLibraries.put("showStyleCss", "Y"); + } + plName = plModel.getName(); + plLevel = plModel.getLevel(); + plOrderIndex = plModel.getOrderIndex(); + methodId = plModel.getMethodId(); + for (int i = 0, methodSize = methodModels.size(); i < methodSize; i++) { + PALMethodModel palMethodModel = methodModels.get(i); + String appId = palMethodModel.getId(); + if (map1.containsKey("com.actionsoft.apps.coe.method." + appId)) { + String methodId1 = map1.get("com.actionsoft.apps.coe.method." + appId); + if (methodId1.equals(AppsConst.RUNTIME_STATE_STOPPED) || methodId1.equals(AppsConst.RUNTIME_STATE_FAILED) || methodId1.equals(AppsConst.RUNTIME_STATE_READY) || methodId1.equals(AppsConst.RUNTIME_STATE_STARTING) || methodId1.equals(AppsConst.RUNTIME_STATE_STOPPING) || methodId1.equals(AppsConst.RUNTIME_STATE_UNINSTALLED) || methodId1.equals(AppsConst.RUNTIME_STATE_UNINSTALLING) || methodId1.equals(AppsConst.RUNTIME_STATE_FAILED)) + continue; + } + if (palMethodModel.getId().equals(plModel.getMethodId())) { + methodIdsb.append(""); + } else { + methodIdsb.append(""); + } + + } + // 已发布流程属性只读 + if (plModel.isPublish() || plModel.isStop() || plModel.isApproval()) { + editable = "0"; + } + } else { + macroLibraries.put("showStyle", "style=\"display: none;\""); + for (int i = 0, size1 = methodModels.size(); i < size1; i++) { + PALMethodModel palMethodModel = methodModels.get(i); + String appId = palMethodModel.getId(); + if (map1.containsKey("com.actionsoft.apps.coe.method." + appId)) { + String methodId1 = map1.get("com.actionsoft.apps.coe.method." + appId); + if (methodId1.equals(AppsConst.RUNTIME_STATE_STOPPED) || methodId1.equals(AppsConst.RUNTIME_STATE_FAILED) || methodId1.equals(AppsConst.RUNTIME_STATE_READY) || methodId1.equals(AppsConst.RUNTIME_STATE_STARTING) || methodId1.equals(AppsConst.RUNTIME_STATE_STOPPING) || methodId1.equals(AppsConst.RUNTIME_STATE_UNINSTALLED) || methodId1.equals(AppsConst.RUNTIME_STATE_UNINSTALLING) || methodId1.equals(AppsConst.RUNTIME_STATE_FAILED)) + continue; + } + methodIdsb.append(""); + + } + } + + macroLibraries.put("coePortal", CoEPortalSkins.getCoESkinsName(getContext())); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("id", id); + Map map = getMoreAttrContent(super.getContext().getSessionId(), id, macroLibraries); + if (map.get("content") == null && map.get("attrIds") == null) { + map.put("content", ""); + macroLibraries.put("attrIds", ""); + } else { + String s = (String) map.get("attrIds"); + macroLibraries.put("attrIds", s); + } + macroLibraries.put("moreAttrContent", map.get("content")); + macroLibraries.put("moreAttrRefs", map.get("refs") == null ? new JSONObject() : map.get("refs")); + + macroLibraries.put("wsID", wsID); + macroLibraries.put("plName", plName); + macroLibraries.put("plLevel", plLevel); + macroLibraries.put("plParentId", plParentId); + macroLibraries.put("plOrderIndex", plOrderIndex); + macroLibraries.put("type", type); + macroLibraries.put("miselectoption", methodIdsb.toString()); + macroLibraries.put("methodIdValue", methodId); + macroLibraries.put("editable", (editable == null || "".equals(editable)) ? "1" : editable); + + CoeUserModel userModel = (CoeUserModel) CoeUserDaoFactory.createUser().getInstanceByUserId(_uc.getUID()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.level.create.htm", macroLibraries); + } + + /* // 系统名称 private static String getSystemNameOption(String plSystemName) { + * return + * " " + * ; + * + * } */ + + // /** + // * 得到资产库 tree json 结构 + // * + // * @param wsId + // * @param pid + // * @param jsonArray + // * @return + // */ + // public String getRepositoryTreeJson(String wsId, String pid,JSONArray + // jsonArray) { + // StringBuffer treeJson = new StringBuffer(); + // treeJson.append(getRepositoryNodeJson(pid, wsId,jsonArray)); + // return treeJson.toString(); + // } + + protected com.alibaba.fastjson.JSONArray getMoreSpecialAttr(String sid, String uuid) { + PALRepositoryModel m = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + if (m == null) { + return new com.alibaba.fastjson.JSONArray(); + } + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(m.getMethodId()); + if(palMethodModel == null) { + return new com.alibaba.fastjson.JSONArray(); + } + + List attributes = palMethodModel.getSpecialAttribute(); + com.alibaba.fastjson.JSONArray array = new com.alibaba.fastjson.JSONArray(); + if (attributes != null) { + for (PALMethodSpecialAttributeModel attributeModel : attributes) { + com.alibaba.fastjson.JSONObject object = new com.alibaba.fastjson.JSONObject(); + object.put("id", attributeModel.getKey()); + object.put("key", attributeModel.getKey()); + object.put("title", attributeModel.getTitle()); + object.put("name", attributeModel.getName()); + object.put("value", attributeModel.getValue()); + object.put("type", attributeModel.getType()); + object.put("width", attributeModel.getWidth()); + array.add(object); + } + return array; + } + return new com.alibaba.fastjson.JSONArray(); + } + + private Map getMoreAttrContent(String sid, String uuid, Map macroLibraries) { + Map map = new HashMap(); + PALRepositoryModel m = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + // 获取所有文件属性 + List methodAttrModels = PALRepositoryAPIManager.getInstance().getValidAttributeModels(m.getWsId(), m.getMethodId()); + Map attributeModelMap = new HashMap<>(); + Map sortAttrMap = new HashMap<>(); + if (methodAttrModels != null) { + int index = 0; + for (PALMethodAttributeModel attr : methodAttrModels) { + attributeModelMap.put(attr.getKey(), attr); + sortAttrMap.put(attr.getKey(), ++index); + } + } + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(m.getMethodId()); + List groups = methodModel.getGroup(); + PALRepositoryPropertyDao dao = new PALRepositoryPropertyDao(); + List propertys = dao.getPropertysByPlid(uuid, null); + // 排序 + propertys.sort((p1, p2) -> (sortAttrMap.containsKey(p1.getPropertyId()) ? sortAttrMap.get(p1.getPropertyId()) : 0) - (sortAttrMap.containsKey(p2.getPropertyId()) ? sortAttrMap.get(p2.getPropertyId()) : 0)); + + StringBuilder content = new StringBuilder(); + StringBuilder sb = new StringBuilder(); + JSONObject refs = new JSONObject(); + for (PALRepositoryPropertyModel property : propertys) { + String id = property.getPropertyId(); + if (!attributeModelMap.containsKey(id) || !attributeModelMap.get(id).getUse()) { + continue; + } + PALMethodAttributeModel attributeModel = attributeModelMap.get(id); + String jsonValue = property.getPropertyValue(); + String event = "onblur=\"saveContent($(this));\""; + String inputValue = property.getPropertyValue(); + String fileId = ""; + String shapeId = ""; + if ("relation".equals(attributeModel.getType())) { + List list = DesignerShapeRelationCache.getListByAttrId(uuid, "", attributeModel.getKey()); + if (list != null && list.size() > 0) { + // 判断是否有重复数据,进行重复过滤 + Set tempStrs = new HashSet<>(); + List tempList = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + DesignerShapeRelationModel model = list.get(i); + String str = model.getFileId() + model.getShapeId() + model.getAttrId() + model.getRelationFileId() + model.getRelationShapeId(); + if (!tempStrs.contains(str)) { + tempList.add(model); + tempStrs.add(str); + } + } + list = tempList; + List inputValueList = new ArrayList<>(); + List fileIdList = new ArrayList<>(); + List shapeIdList = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + DesignerShapeRelationModel model = list.get(i); + JSONObject refObj = JSONObject.parseObject(attributeModel.getRef()); + String relationTyp = refObj.containsKey("type") ? refObj.getString("type") : "shape"; + if ("file".equals(relationTyp)) {// 关联的模型文件 + if (model.getRelationFileId().length() < 36) { + continue; + } + List list2 = PALRepositoryCache.getByVersionId(m.getWsId(), model.getRelationFileId()); + for (PALRepositoryModel model2 : list2) { + if (model2.isUse()) { + inputValueList.add(model2.getName()); + fileIdList.add(model2.getId());// 再次存储时会转换为versionId + break; + } + } + } else { + inputValueList.add(model.getRelationShapeText()); + fileIdList.add(model.getRelationFileId()); + shapeIdList.add(model.getRelationShapeId()); + } + } + inputValue = StringUtils.join(inputValueList, ","); + fileId = StringUtils.join(fileIdList, ","); + shapeId = StringUtils.join(shapeIdList, ","); + } else {//db中无关联数据 + inputValue = ""; + } + } + // 关联bpm组织架构 + JSONArray dataArr = new JSONArray(); + if ("awsorg".equals(attributeModel.getType())) { + List list = DesignerShapeRelationCache.getListByAttrId(uuid, "", attributeModel.getKey()); + if (list != null && list.size() > 0) { + Set filter = new HashSet();// 去重记录 + for (DesignerShapeRelationModel model : list) { + if ("00000000-0000-0000-0000-000000000000".equals(model.getRelationFileId()) && "00000000-0000-0000-0000-000000000000".equals(model.getRelationShapeId())) { + JSONObject object = JSONObject.parseObject(model.getRelationShapeText()); + // 查询最新名称 + if ("department".equals(object.getString("type"))) { + DepartmentModel dept = SDK.getORGAPI().getDepartmentById(object.getString("id")); + if (dept != null && !filter.contains(dept.getId())) { + object.put("name", dept.getName()); + filter.add(dept.getId()); + dataArr.add(object); + } + } + if ("position".equals(object.getString("type"))) {// 岗位,先用角色代替 + RoleModel role = SDK.getORGAPI().getRoleById(object.getString("id")); + if (role != null && !filter.contains(role.getId())) { + object.put("name", role.getName()); + filter.add(role.getId()); + dataArr.add(object); + } + } + if ("user".equals(object.getString("type"))) { + UserModel user = SDK.getORGAPI().getUser(object.getString("id")); + if (user != null && !filter.contains(user.getUID())) { + object.put("name", user.getUserName()); + filter.add(user.getUID()); + dataArr.add(object); + } + } + if ("role".equals(object.getString("type"))) { + RoleModel role = SDK.getORGAPI().getRoleById(object.getString("id")); + if (role != null && !filter.contains(role.getId())) { + object.put("name", role.getName()); + filter.add(role.getId()); + dataArr.add(object); + } + } + } + } + } + // 数据组合 + List valueList = new ArrayList<>(); + for (int i = 0; i < dataArr.size(); i++) { + valueList.add(dataArr.getJSONObject(i).getString("name")); + } + inputValue = StringUtils.join(valueList, ","); + } + + inputValue = inputValue.replaceAll("'", "'"); + inputValue = inputValue.replaceAll("\"", """); + + String input = ""; + + String type = attributeModel.getType(); + boolean readonly = attributeModel.getReadonly(); + if ("textarea".equals(type)) { + input = ""; + } else if ("select".equals(type) || "select_m".equals(type)) { + if (readonly) { + input = ""; + } else { + input = ""; + } + String ref = attributeModel.getRef(); + if (!UtilString.isEmpty(ref)) { + refs.put(id, ref); + } + } else if ("relation".equals(type)) {// 关联pal模型文件、形状 + JSONObject refObj = JSONObject.parseObject(attributeModel.getRef()); + event = "readonly='readonly' relationFileId=\"" + fileId + "\" relationShapeId=\"" + shapeId + "\" groupPath=\"" + attributeModel.getGroupPath() + "\" ref="+ refObj +" onclick=\"openRelationDialog($(this), \'saveContent\')\""; + input = ""; + } else if ("awsorg".equals(type)) {// 关联bpm组织架构 + JSONObject refObj = JSONObject.parseObject(attributeModel.getRef()); + event = "readonly='readonly' data-value="+ dataArr +" groupPath=\"" + attributeModel.getGroupPath() + "\" ref="+ refObj +" onclick=\"openRelationAwsorgDialog($(this))\""; + input = ""; + } else if("DateTimePicker".equals(type)) { + input = "" + ""; + }else if ("table".equals(type)){ + + JSONObject table = JSON.parseObject(jsonValue); + String tableName = table != null ? (String)table.get("name") : ""; + boolean isRequired = attributeModel.getIsRequired(); + + + input = "" + + "" + + "" + + " " + + "" + + ""; + } + else { + if (readonly) { + input = ""; + } + } + content.append(" " + attributeModel.getNewTitle() + " " + input + " "); + sb.append(id + "|"); + } + map.put("content", content.toString()); + map.put("attrIds", sb.toString()); + map.put("refs", refs); + return map; + } + + /** + * 获取资产库节点的 json + * + * @param pid + * @param wsId + * @param jsonArray + * @return + */ + public String getRepositoryNodeJson(String pid, String wsId, JSONArray jsonArray) { + List models = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelByPid(pid, wsId); + if (jsonArray == null) { + jsonArray = new JSONArray(); + } + for (int i = 0, size = models.size(); i < size; i++) { + PALRepositoryModel coeProcessLevelModel = models.get(i); + if (coeProcessLevelModel != null) { + JSONObject json = getJSon(coeProcessLevelModel, i); + jsonArray.add(json); + } + } + return jsonArray.toString(); + } + + /** + * 得到tree json 结构 + * + * @param wsId + * @param pid + * @return + */ + public String getTreeJson(String wsId, String pid) { + if (UtilString.isEmpty(wsId)) { + wsId = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_DEFAULT_WSID); + } + return PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryTreeDataByPid(_uc, wsId, pid).toString(); + } + + /** + * 获取根json + * + * @param wsuuid + * @return + */ + private String getRootJson(String wsuuid) { + List methodList = PALMethodCache.getPALMethodList(); + JSONArray jsonArray = new JSONArray(); + PALMethodJsonModel processpmjm = new PALMethodJsonModel(); + processpmjm.setId("process"); + processpmjm.setName(I18nRes.findValue(CoEConstant.APP_ID, "process")); + processpmjm.setOpen(true); + processpmjm.setUrl("./w?sid=" + super.getContext().getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=process&type=0&wsid=" + wsuuid); + processpmjm.setIcon("../apps/" + CoEConstant.APP_ID + "/img/method/" + processpmjm.getId() + ".png"); + processpmjm.setMenu(false); + jsonArray.add(processpmjm); + putAllNodeJson(processpmjm.getId(), wsuuid, jsonArray); + + PALMethodJsonModel orgpmjm = new PALMethodJsonModel(); + orgpmjm.setId("org"); + orgpmjm.setName(I18nRes.findValue(CoEConstant.APP_ID, "org")); + orgpmjm.setUrl("./w?sid=" + super.getContext().getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=org&type=0&wsid=" + wsuuid); + orgpmjm.setIcon("../apps/" + CoEConstant.APP_ID + "/img/method/" + orgpmjm.getId() + ".png"); + orgpmjm.setMenu(false); + jsonArray.add(orgpmjm); + // putAllNodeJson(orgpmjm.getId(), wsuuid, jsonArray); + PALMethodJsonModel productpmjm = new PALMethodJsonModel(); + productpmjm.setId("product"); + productpmjm.setName(I18nRes.findValue(CoEConstant.APP_ID, "product")); + productpmjm.setUrl("./w?sid=" + super.getContext().getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=product&type=0&wsid=" + wsuuid); + productpmjm.setIcon("../apps/" + CoEConstant.APP_ID + "/img/method/" + productpmjm.getId() + ".png"); + productpmjm.setMenu(false); + jsonArray.add(productpmjm); + // putAllNodeJson(productpmjm.getId(), wsuuid, jsonArray); + + PALMethodJsonModel datapmjm = new PALMethodJsonModel(); + datapmjm.setId("data"); + datapmjm.setName(I18nRes.findValue(CoEConstant.APP_ID, "data")); + datapmjm.setUrl("./w?sid=" + super.getContext().getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=data&type=0&wsid=" + wsuuid); + datapmjm.setIcon("../apps/" + CoEConstant.APP_ID + "/img/method/" + datapmjm.getId() + ".png"); + datapmjm.setMenu(false); + jsonArray.add(datapmjm); + // putAllNodeJson(datapmjm.getId(), wsuuid, jsonArray); + + PALMethodJsonModel itsystempmjm = new PALMethodJsonModel(); + itsystempmjm.setId("itsystem"); + itsystempmjm.setName(I18nRes.findValue(CoEConstant.APP_ID, "itsystem")); + itsystempmjm.setUrl("./w?sid=" + super.getContext().getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=itsystem&type=0&wsid=" + wsuuid); + itsystempmjm.setIcon("../apps/" + CoEConstant.APP_ID + "/img/method/" + itsystempmjm.getId() + ".png"); + itsystempmjm.setMenu(false); + jsonArray.add(itsystempmjm); + // putAllNodeJson(itsystempmjm.getId(), wsuuid, jsonArray); + + PALMethodJsonModel controlpmjm = new PALMethodJsonModel(); + controlpmjm.setId("control"); + controlpmjm.setName(I18nRes.findValue(CoEConstant.APP_ID, "control")); + controlpmjm.setUrl("./w?sid=" + super.getContext().getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=control&type=0&wsid=" + wsuuid); + controlpmjm.setIcon("../apps/" + CoEConstant.APP_ID + "/img/method/" + controlpmjm.getId() + ".png"); + controlpmjm.setMenu(false); + jsonArray.add(controlpmjm); + // putAllNodeJson(controlpmjm.getId(), wsuuid, jsonArray); + + for (int i = 0, size = methodList.size(); i < size; i++) { + String str = methodList.get(i); + if (str.equals("process") || str.equals("org") || str.equals("data") || str.equals("product") || str.equals("control") || str.equals("itsystem")) { + + } else { + PALMethodJsonModel pmjm = new PALMethodJsonModel(); + pmjm.setId(str); + pmjm.setName(I18nRes.findValue(CoEConstant.APP_ID, str)); + pmjm.setIcon("../apps/" + PALMethodCache.getPALMethodModelListByMethod(str).get(0).getApp().getId() + "/img/method/" + pmjm.getId() + ".png"); + pmjm.setMenu(false); + jsonArray.add(pmjm); + // putAllNodeJson(str, wsuuid, jsonArray); + } + + } + return jsonArray.toString(); + } + + /** + * 装载所有的节点 + * + * @param pid + * @param wsId + * @return + */ + public void putAllNodeJson(String pid, String wsId, JSONArray jsonArray) { + List models = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelByPid(pid, wsId); + for (int i = 0, size = models.size(); i < size; i++) { + PALRepositoryModel coeProcessLevelModel = models.get(i); + if (coeProcessLevelModel == null) { + continue; + } + if (!"default".equals(coeProcessLevelModel.getMethodId()) && PALMethodCache.getPALMethodModelById(coeProcessLevelModel.getMethodId()) == null) + continue; + if (coeProcessLevelModel != null) { + JSONObject json = getJSon(coeProcessLevelModel, i); + jsonArray.add(json); + // putAllNodeJson(coeProcessLevelModel.getUUId(), wsId, + // jsonArray); + } + } + } + + /** + * 获取第二级及其以下目录 + * + * @param pid + * @return + */ + public String getTwoNodeJson(String pid, String wsId) { + List coeProcessLevelModels = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelByPid(pid, wsId); + JSONArray jsonArray = new JSONArray(); + try { + int size = coeProcessLevelModels.size(); + for (int i = 0; i < size; i++) { + PALRepositoryModelImpl coeProcessLevelModel = (PALRepositoryModelImpl) coeProcessLevelModels.get(i); + if (coeProcessLevelModel == null) { + continue; + } + coeProcessLevelModel.setParentId(pid); + boolean flag = false; + if (!"default".equals(coeProcessLevelModel.getMethodId()) && PALMethodCache.getPALMethodModelById(coeProcessLevelModel.getMethodId()) == null) + continue; + if (coeProcessLevelModel != null) { + List coeProcessLevelModels1 = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelByPid(coeProcessLevelModel.getId(), wsId); + int size1 = coeProcessLevelModels1.size(); + for (int j = 0; j < size1; j++) { + PALRepositoryModel coeProcessLevelModels11 = coeProcessLevelModels1.get(j); + if (coeProcessLevelModels11 == null) { + continue; + } + if (!"default".equals(coeProcessLevelModels11.getMethodId()) && PALMethodCache.getPALMethodModelById(coeProcessLevelModels11.getMethodId()) == null) + continue; + if (coeProcessLevelModels11 != null) { + flag = true; + break; + } + } + JSONObject json = getJSon(coeProcessLevelModel, i, flag); + jsonArray.add(json); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return jsonArray.toString(); + } + + /** + * 获取tree json + * + * @param coeProcessLevelModel + * @param i + * @return + */ + private JSONObject getJSon(PALRepositoryModel coeProcessLevelModel, int i) { + JSONObject rootJson = new JSONObject(); + rootJson.put("id", coeProcessLevelModel.getId().trim()); + rootJson.put("pid", coeProcessLevelModel.getParentId().trim()); + rootJson.put("plNo", CoeProcessLevelUtil.getProcessLevelNoByUUId(coeProcessLevelModel.getId(), coeProcessLevelModel.getWsId()).trim()); + rootJson.put("name", I18nRes.findValue(CoEConstant.APP_ID, super.getContext().getLanguage(), coeProcessLevelModel.getName()).trim()); + if ("default".equals(coeProcessLevelModel.getMethodId())) { + rootJson.put("title", rootJson.get("name")); + } else { + rootJson.put("title", rootJson.get("name") + " " + VersionUtil.getVersionStrV(coeProcessLevelModel.getVersion()).trim()); + } + rootJson.put("drop", false); + rootJson.put("isSystemFile", coeProcessLevelModel.isSystemFile()); + rootJson.put("plMethodId", coeProcessLevelModel.getMethodId().trim()); + if (!"default".equals(coeProcessLevelModel.getMethodId())) { + if (PALMethodCache.getPALMethodModelById(coeProcessLevelModel.getMethodId()) == null) { + rootJson.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/default/16.png"); + } else { + rootJson.put("icon", "../apps/" + PALMethodCache.getPALMethodModelById(coeProcessLevelModel.getMethodId()).getApp().getId() + "/img/method/" + coeProcessLevelModel.getMethodId() + "/16.png"); + } + + } else { + rootJson.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/default/16.png"); + + } + rootJson.put("isParent", true); + rootJson.put("plLevel", coeProcessLevelModel.getLevel()); + rootJson.put("plOrdexIndex", coeProcessLevelModel.getOrderIndex()); + rootJson.put("plDiagramUrl", coeProcessLevelModel.getDiagramUrl()); + rootJson.put("isDrops", getIsDorpStatus(coeProcessLevelModel.getName())); + rootJson.put("plSecurityR", coeProcessLevelModel.getPlSecurityR()); + rootJson.put("plSecurityW", coeProcessLevelModel.getPlSecurityW()); + rootJson.put("url", "./w?sid=" + super.getContext().getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=" + coeProcessLevelModel.getId() + "&type=1&wsid=" + coeProcessLevelModel.getWsId()); + rootJson.put("versionId", coeProcessLevelModel.getVersionId()); + // if (coeProcessLevelModel.) { + rootJson.put("open", false); + // } else { + // rootJson.put("open", false); + // } + rootJson.put("plCategory", coeProcessLevelModel.getMethodCategory()); + return rootJson; + } + + private JSONObject getJSon(PALRepositoryModel coeProcessLevelModel, int i, boolean flag) { + JSONObject rootJson = new JSONObject(); + rootJson.put("id", coeProcessLevelModel.getId().trim()); + rootJson.put("pid", coeProcessLevelModel.getParentId().trim()); + rootJson.put("plNo", CoeProcessLevelUtil.getProcessLevelNoByUUId(coeProcessLevelModel.getId(), coeProcessLevelModel.getWsId()).trim()); + rootJson.put("name", I18nRes.findValue(CoEConstant.APP_ID, super.getContext().getLanguage(), coeProcessLevelModel.getName()).trim()); + if ("default".equals(coeProcessLevelModel.getMethodId())) { + rootJson.put("title", rootJson.get("name")); + } else { + rootJson.put("title", rootJson.get("name") + " " + VersionUtil.getVersionStrV(coeProcessLevelModel.getVersion()).trim()); + } + rootJson.put("drop", false); + rootJson.put("isSystemFile", coeProcessLevelModel.isSystemFile()); + rootJson.put("plMethodId", coeProcessLevelModel.getMethodId().trim()); + if (!"default".equals(coeProcessLevelModel.getMethodId())) { + if (PALMethodCache.getPALMethodModelById(coeProcessLevelModel.getMethodId()) == null) { + rootJson.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/default/16.png"); + } else { + rootJson.put("icon", "../apps/" + PALMethodCache.getPALMethodModelById(coeProcessLevelModel.getMethodId()).getApp().getId() + "/img/method/" + coeProcessLevelModel.getMethodId() + "/16.png"); + } + + } else { + rootJson.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/default/16.png"); + + } + + rootJson.put("isParent", false); + rootJson.put("open", true); + if (flag) { + rootJson.put("isParent", true); + rootJson.put("open", false); + } + rootJson.put("plLevel", coeProcessLevelModel.getLevel()); + rootJson.put("plOrdexIndex", coeProcessLevelModel.getOrderIndex()); + rootJson.put("plDiagramUrl", coeProcessLevelModel.getDiagramUrl()); + rootJson.put("isDrops", getIsDorpStatus(coeProcessLevelModel.getName())); + rootJson.put("plSecurityR", coeProcessLevelModel.getPlSecurityR()); + rootJson.put("plSecurityW", coeProcessLevelModel.getPlSecurityW()); + rootJson.put("url", "./w?sid=" + super.getContext().getSessionId() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=" + coeProcessLevelModel.getId() + "&type=1&wsid=" + coeProcessLevelModel.getWsId()); + rootJson.put("plCategory", coeProcessLevelModel.getMethodCategory()); + rootJson.put("versionId", coeProcessLevelModel.getVersionId()); + return rootJson; + } + + public boolean getIsDorpStatus(String plName) { + if ((plName.equals(CoeProcessLevelConstant.SUPPORTTHEMANAGEMENTPROCESS)) || (plName.equals(CoeProcessLevelConstant.COREBUSINESSPROCESSES)) || (plName.equals(CoeProcessLevelConstant.SUPPORTPROCESS)) || (plName.equals(CoeProcessLevelConstant.COREMANAGEMENTPROCESS)) || (plName.equals(CoeProcessLevelConstant.STRATEGICPROCESS))) { + return false; + } else { + return true; + } + } + + /** + * 更新流程名称 + * + * @param model + */ + private void updateProcessName(PALRepositoryModel model) { + String appId = CoeProcessLevelUtil.getAppId(model.getId()); + String processDefId = ""; + if (!appId.equals("")) { + //Todo:version字段类型转换后与平台关联比较方法没有同步 + processDefId = CoeProcessLevelUtil.getProcessDefIdByVer(appId, model.getId(), (int)model.getVersion()); + } + + if (!"".equals(processDefId)) { + JSONObject bpmnDesignerJSONObject = BPMNIO.getBPMNDesignerJSONObject2(_uc, appId, processDefId); + bpmnDesignerJSONObject.put("processName", model.getName()); + ProcessDefinition procModel = ProcessDefCache.getInstance().getModel(processDefId); + String op = "update|" + procModel.getVersionId(); + try { + BPMNIO.saveJsonToBPMNFile(_uc, appId, processDefId, op, bpmnDesignerJSONObject.toString(), true, null); + } catch (BPMNDefException e) { + e.printStackTrace(); + } + + } + } + + private String validateJson(String name) { + return name == null ? "" : name; + } + + private int validateJson(Integer index) { + return index == null ? 0 : index; + } + + + /** + * 文件属性的扩展属性值修改 + * @param uuid + * @param attrId + * @param jsonContent + * @return + */ + public String moreAttrContentSave(String uuid, String attrId, String jsonContent) { + // 获取属性的关联类型(relationType) + Map attrModelMap = new HashMap<>(); + if(uuid != null && attrId != null && !"".equals(attrId)) { + PALRepositoryModel m = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(m.getMethodId()); + if (palMethodModel != null) { + List attributes = palMethodModel.getAttributes(); + for (PALMethodAttributeModel model : attributes) { + attrModelMap.put(model.getKey(), model); + } + } + } + + // 取出json + PALRepositoryPropertyDao dao = new PALRepositoryPropertyDao(); + List list = dao.getPropertysByPlid(uuid, attrId); + DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); + if (list != null && list.size() > 0) { + PALRepositoryPropertyModel property = list.get(0); + if ("relation".equals(attrModelMap.get(property.getPropertyId()))) {// 关联pal组织 + JSONObject object1 = new JSONObject(); + object1.put("fileId", uuid); + object1.put("shapeId", ""); + object1.put("attrId", property.getPropertyId()); + object1.put("relationFileId", ""); + object1.put("relationShapeId", ""); + object1.put("relationShapeText", ""); + JSONObject relationObj = JSONObject.parseObject(jsonContent); + object1.put("groupPath", relationObj.getString("groupPath")); + property.setPropertyValue(object1.toString()); + } else if ("awsorg".equals(attrModelMap.get(property.getPropertyId()))) {// 关联bpm组织 + JSONObject object2 = new JSONObject(); + object2.put("name", ""); + object2.put("id", ""); + object2.put("type", ""); + property.setPropertyValue(object2.toString()); + } else {// 文本、选择等类型 + property.setPropertyValue(jsonContent); + } + if(list.size() > 1) { //如果文件属性有重复出现的属性,只保留一条 + // 删除该些条 + List unnecessaryPropertyList = list.subList(1, list.size()); + dao.batchDelete(unnecessaryPropertyList); + // 插入该条 + dao.update(property); + } else { + dao.update(property); + } + if ("relation".equals(attrModelMap.get(property.getPropertyId()).getType())) {// 关联pal组织 + JSONObject relationObj = JSONObject.parseObject(jsonContent); + relationDao.deleteByAttrId(uuid, "", attrId); + if (relationObj.containsKey("relationFileId") && !"".equals(relationObj.getString("relationFileId"))) { + String [] relationFileIds = relationObj.getString("relationFileId").split(","); + String [] relationShapeIds = relationObj.getString("relationShapeId").split(","); + String [] relationShapeText = relationObj.getString("relationShapeText").split(","); + for(int i = 0; i < relationFileIds.length; i++) { + String relationFileId = relationFileIds[i]; + DesignerShapeRelationModel relationModel = new DesignerShapeRelationModel(); + relationModel.setFileId(relationObj.getString("fileId")); + relationModel.setShapeId(""); + relationModel.setShapeText(""); + relationModel.setAttrId(relationObj.getString("attrId")); + relationModel.setRelationFileId(relationFileId); + relationModel.setRelationShapeId(""); + relationModel.setRelationShapeText(""); + // 获取文件 + JSONObject refObj = JSONObject.parseObject(attrModelMap.get(attrId).getRef()); + String relationType = refObj.containsKey("type") ? refObj.getString("type") : "shape"; + if("file".equals(relationType)) {//关联的是模型文件,例如属性前置流程,后置流程,直接保存,存储versionId + // 不管relationFileId是文件ID还是文件VersionId,全部替换成versionId,兼容vue和非vue请求导致数据并不都是versionId的情况 + PALRepositoryModel model = PALRepositoryCache.getCache().get(relationFileId); + if (model == null) { + List models = PALRepositoryCache.getByVersionId(relationFileId); + if (models != null && models.size() > 0) { + relationFileId = models.get(0).getVersionId(); + } + } else { + relationFileId = model.getVersionId(); + } + relationModel.setRelationFileId(relationFileId); + } else {// 关联的是图形 + String relationShapeId = relationShapeIds[i]; + relationModel.setRelationShapeId(relationShapeId); + if ("shape".equals(relationType)){ + List> relationFileList = CoeDesignerUtil.getShapeMessageJson(relationFileId); + if (relationFileList == null || relationFileList.size() == 0) { + return ResponseObject.newErrResponse("没有查询到关联的文件").toString(); + } + boolean flag = true; + for (Map map : relationFileList) { + if (map == null || map.get("id") == null) { + continue; + } + if(map.get("id").equals(relationShapeId)) { + String text = map.get("text") == null ? "" : (String)map.get("text"); + relationModel.setRelationShapeText(text); + flag = false; + break; + } + } + if(flag) { + return ResponseObject.newErrResponse("没有查询到关联的图形").toString(); + } + }else { + relationModel.setRelationShapeText(relationShapeText[i]); + } + + } + relationDao.insert(relationModel); + } + } + } else if ("awsorg".equals(attrModelMap.get(property.getPropertyId()).getType())) {// 关联bpm组织架构 + JSONArray awsorgArr = JSONArray.parseArray(jsonContent); + relationDao.deleteByAttrId(uuid, "", attrId); + if (!awsorgArr.isEmpty()) { + for (int i = 0; i < awsorgArr.size(); i++) { + JSONObject awsorgObj = awsorgArr.getJSONObject(i); + DesignerShapeRelationModel model = new DesignerShapeRelationModel(); + model.setFileId(uuid); + model.setShapeId(""); + model.setShapeText(""); + model.setAttrId(attrId); + model.setRelationFileId("00000000-0000-0000-0000-000000000000"); + model.setRelationShapeId("00000000-0000-0000-0000-000000000000"); + model.setRelationShapeText(awsorgObj.toString()); + relationDao.insert(model); + } + } + CoeProcessLevelUtil.syncBPAProcessOwner(uuid, attrId, awsorgArr); + } + } + + if(uuid != null && attrId != null && !"".equals(attrId)) { + this.recordProcessAttrLog( uuid, attrId, jsonContent); + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_REPOSITORY_ATTR_UPDATE); + } + ResponseObject ro = ResponseObject.newOkResponse(); + return ro.toString(); + } + + /** + * 文件属性的固定属性值修改 + * + * @param uuid + * @param jsonKey + * @param jsonContent + * @return + */ + public String defaultAttrContentSave(String uuid, String jsonKey, String jsonContent) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + PALRepositoryModelImpl model = (PALRepositoryModelImpl)coeProcessLevel.getInstance(uuid); + if (model == null) { + return ResponseObject.newErrResponse("模型文件查询失败").toString(); + } + boolean modify = false; +// if (PALRepositoryModelImpl.FIELD_PL_NAME.equals(jsonKey)) {// 名称 +// +// } + if (PALRepositoryModelImpl.FIELD_PL_NO.equals(jsonKey)) {// 编号 + model.setNo(jsonContent); + modify = true; + } +// if (PALRepositoryModelImpl.FIELD_PL_METHODID.equals(jsonKey)) {// 分类 +// +// } + if (PALRepositoryModelImpl.FIELD_PL_DESC.equals(jsonKey)) {// 描述 + model.setDesc(jsonContent); + modify = true; + } + if (PALRepositoryModelImpl.FIELD_PL_INPUT.equals(jsonKey)) {// 输入 + model.setInput(jsonContent); + modify = true; + } + if (PALRepositoryModelImpl.FIELD_PL_OUTPUT.equals(jsonKey)) {// 输出 + model.setOutput(jsonContent); + modify = true; + } + if (PALRepositoryModelImpl.FIELD_PL_DUTY_DEPT.equals(jsonKey) || PALRepositoryModelImpl.FIELD_PL_DUTY_PERSON.equals(jsonKey)) { + String dutyRelationType = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_RELATION_TYPE); + if ("org".equals(dutyRelationType)) { + DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); + JSONObject relationObj = JSONObject.parseObject(jsonContent); + String attrId = PALRepositoryModelImpl.FIELD_PL_DUTY_DEPT.equals(jsonKey) ? "plRD" : "plRP"; + if (attrId.equals("plRD")) { + model.setOwnerDept(""); + modify = true; + } else if (attrId.equals("plRP")) { + model.setOwnerUser(""); + modify = true; + } + relationDao.deleteByAttrId(uuid, "", attrId); + if (relationObj.containsKey("relationFileId") && !"".equals(relationObj.getString("relationFileId"))) { + String [] relationFileIds = relationObj.getString("relationFileId").split(","); + String [] relationShapeIds = relationObj.getString("relationShapeId").split(","); + for(int i = 0; i < relationFileIds.length; i++) { + String relationFileId = relationFileIds[i]; + DesignerShapeRelationModel relationModel = new DesignerShapeRelationModel(); + relationModel.setFileId(relationObj.getString("fileId")); + relationModel.setShapeId(""); + relationModel.setShapeText(""); + relationModel.setAttrId(attrId); + relationModel.setRelationFileId(relationFileId); + relationModel.setRelationShapeId(""); + relationModel.setRelationShapeText(""); + String relationShapeId = relationShapeIds[i]; + relationModel.setRelationShapeId(relationShapeId); + if (attrId.equals("plRD")) { + model.setOwnerDept(relationShapeId); + } else if (attrId.equals("plRP")) { + model.setOwnerUser(relationShapeId); + } + List> relationFileList = CoeDesignerUtil.getShapeMessageJson(relationFileId); + if (relationFileList == null || relationFileList.size() == 0) { + return ResponseObject.newErrResponse("没有查询到关联的文件").toString(); + } + boolean flag = true; + for (Map map : relationFileList) { + if (map == null || map.get("id") == null) { + continue; + } + if(map.get("id").equals(relationShapeId)) { + String text = map.get("text") == null ? "" : (String)map.get("text"); + relationModel.setRelationShapeText(text); + flag = false; + break; + } + } + if(flag) { + return ResponseObject.newErrResponse("没有查询到关联的图形").toString(); + } + relationDao.insert(relationModel); + } + } + } else { + if (PALRepositoryModelImpl.FIELD_PL_DUTY_DEPT.equals(jsonKey)) {// 责任部门 + model.setDutyDept(jsonContent); + modify = true; + } + if (PALRepositoryModelImpl.FIELD_PL_DUTY_PERSON.equals(jsonKey)) {// 责任人 + model.setDutyUser(jsonContent); + modify = true; + } + } + } + if (modify) { + coeProcessLevel.update(model); + CoeProcessLevelNoCache.getInstance().reloadInBackground(model.getWsId()); + if(uuid != null && jsonKey != null && !"".equals(jsonKey)) { + this.recordProcessAttrLog( uuid, jsonKey, jsonContent); + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_REPOSITORY_ATTR_UPDATE); + } + } + return ro.toString(); + } + + /** + * 文件属性的单个值修改时存储日志文件 + * + */ + private void recordProcessAttrLog(String uuid, String jsonKey, String jsonContent) { + //是否记日志 + String isRecordLog = "0"; + try { + isRecordLog = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "IS_RECORD_PROCESS_LOG"); + if(isRecordLog==null || "".equals(isRecordLog)) { + isRecordLog = "0"; + } + } catch(Exception e) { + } + if(!"1".equals(isRecordLog)) { + return; + } + //记录日志 + PALRepositoryModel repository = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + BPMNModel defineModel = null; + if (repository.getMethodId().equals("process.bpmn2")) { + defineModel = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(uuid, 0); + } else { + //只记录bpmn的 + return; + } + if(defineModel == null) { + return; + } + + String updateTime = new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date()).replaceAll("[:|\\s]", ""); + String year_month = updateTime.substring(0, 7); + try { + //审计日志 +// SDK.getLogAPI().audit(AuditConst.CHANNEL_CLIENT, AuditConst.CATALOG_PROCESS, _uc.getUID(), "保存", "PAL流程文件属性:"+repository.getName(), +// "流程文件:" + uuid + "@"+ jsonKey + "@" + updateTime + "[库Id为"+repository.getWsId()+"]", _uc.getClientIP(), Level.INFO); + //日志的目录 + String logPath = defineModel.getPath()+year_month+"/"+jsonKey+"/"; + logPath = logPath.replace("workspace", "workspace/log"); //单独设置目录 + File dir = new File(logPath); + if (!dir.exists()) { + dir.mkdirs(); + } + //日志的文件,文件名带有版本时间信息 + String _ver = ""; + if (0 != defineModel.getVer()) { + _ver = "_" + defineModel.getVer(); + } + String logVerPath = logPath + defineModel.getUUID() + _ver + "@" + jsonKey + "@" + updateTime; + //创建日志文件 + UtilFile utilFile = new UtilFile(logVerPath); + if (!utilFile.exists()) { + utilFile.createNewFile(); + } + //准备文件和文件内容 + String filePath = logVerPath;// 文件路径 + UtilFile defaultFile = new UtilFile(filePath);// 文件 + //写入内容 + defaultFile.write(jsonContent.getBytes("UTF8")); + } catch(Exception e) { + e.printStackTrace(); + } + } + + /** + * 将定义文件更新为新的ID + * + * @param uuid + * @param object + * @return + * @author zhangming + */ + private String copyDefine(String uuid, String object) { + JSONObject cloneObject = JSONObject.parseObject(object); + cloneObject.put("uuid", uuid); + Map elementMap = new HashMap(); + JSONObject elements = cloneObject.getJSONObject("elements"); + JSONObject newElements = new JSONObject(); + Iterator it = elements.keySet().iterator(); + while (it.hasNext()) { + String key = (String) it.next(); + JSONObject element = elements.getJSONObject(key); + String newId = getElementUUID(); + elementMap.put(key, newId); + element.put("id", newId); + JSONArray dataAttributes = element.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject dataAttribute = dataAttributes.getJSONObject(i); + if (dataAttribute.getString("id").startsWith("_") && dataAttribute.getString("id").length() == 33) { + dataAttribute.put("id", getElementUUID()); + } + } + newElements.put(newId, element); + } + + cloneObject.put("elements", newElements); + cloneObject.put("updateTime", new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date())); + String cloneDefine = cloneObject.toString(); + for (String key : elementMap.keySet()) { + cloneDefine = cloneDefine.replace(key, elementMap.get(key)); + } + return cloneDefine; + } + + private String getElementUUID() { + String uuid = UUIDGener.getUUID(); + uuid = "_" + uuid.replace("-", ""); + return uuid; + } + + // 返回 + public List getDelIds(String source, String target) { + List st = new ArrayList(); + if (!source.equals("")) { + if (!target.equals("")) { + UtilString sourceStr = new UtilString(source); + List vstr = sourceStr.split(","); + for (int i = 0, size = vstr.size(); i < size; i++) { + String id = (String) vstr.get(i); + if (target.indexOf(id) == -1) { // 查找少了的id号 + st.add(id); + } + } + } else { + UtilString sourceStr = new UtilString(source); + List vstr = sourceStr.split(","); + for (int i = 0, size = vstr.size(); i < size; i++) { + String id = (String) vstr.get(i); + // 查找少了的id号 + st.add(id); + } + } + } + return st; + } + + /* public static void main(String args[]) { String oldStr = ""; String + * newStr = ""; String newoldStr = getNewPlSecurityR(oldStr, newStr); + * System.out.println(">>>oldStr>>>" + newoldStr); + * + * } */ + + /** + * 获取总记录数 + * @return + */ + public int getSumRecodes() { + String sql = "select count(*) as c from " + PALRepositoryModelImpl.DATABASE_ENTITY; + int countData = DBSql.getInt(sql, "c"); + return countData; + } + + // 移除节点 + public String removeTreeNode(String uuid, String wsId) { + String flag = ""; + flag = removePALRepository(uuid, wsId); + + CoeProcessLevelNoCache.getInstance().reloadInBackground(wsId); // 重新装载编号 + ResponseObject ro = ResponseObject.newOkResponse(flag); + return ro.toString(); + } + + private String removePALRepository(String uuid, String wsId) { + StringBuffer ids = new StringBuffer(); + String idsString; + PALRepository dao = new PALRepository(); + // PALRepositoryModel model = dao.getInstance(uuid); + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + if (model == null) { + return "-1"; + } + String parentVersionId = model.getParentId(); + List list = dao.getAllRepositoryByVersionId(model.getVersionId()); // versionId相同的流程 + PALRepositoryQueryAPIManager.getInstance().getAllPalRepositoryModelsByPid(model.getWsId(), model.getId(), list); + Map palMap = new HashMap(); + List removeList = new ArrayList(); + for (PALRepositoryModel obj : list) { + if (!palMap.containsKey(obj.getId())) { + ids.append(obj.getId()).append(","); + palMap.put(obj.getId(), obj.getId()); + removeList.add(obj); + } + } + // list.removeAll(removeList); + idsString = ids.toString(); + if (idsString.indexOf(",") > -1) { + idsString = idsString.substring(0, ids.lastIndexOf(",")); + } + CoeProcessRecycleWeb recycleWeb = new CoeProcessRecycleWeb(_uc); + boolean insertFlag = recycleWeb.saveRecycleProcesses(model, removeList); // 流程信息存入回收站 + if (!insertFlag) { + return "-1"; + } + + Map map = CoeProcessLevelDaoFacotory.createCoeProcessLevel().removeTreeNodes(idsString, uuid, wsId); + String flag = (String) map.get("result"); + + List chrildModelList = PALRepositoryCache.getAllSubModelsByPid(wsId, parentVersionId); + if (chrildModelList == null || chrildModelList.size() == 0) { + List parentModelList = PALRepositoryCache.getByVersionId(wsId, model.getParentId()); + for (PALRepositoryModel parentModel : parentModelList) { + PALRepositoryModelImpl parentModelImpl = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(parentModel.getId()); + parentModelImpl.setBottomLevel(1); + dao.update(parentModelImpl); + } + } + /*被删除模型后面的同级模型进行排序(orderindex)更新*/ + List brotherModelList = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByPid(wsId, parentVersionId); + for (PALRepositoryModel model2 : brotherModelList) { + if (model2.getOrderIndex() > model.getOrderIndex()) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model2; + modelImpl.setOrderIndex(model2.getOrderIndex() -1); //排序顺序减1 + dao.update(modelImpl); + } + } + return flag; + } + + // 获取是否有孩子节点 + public String getChildrenStr(String id, String wsId) { + StringBuffer str = new StringBuffer(); + str.append(CoeProcessLevelDaoFacotory.createCoeProcessLevel().getChildNodes(id, wsId, str.toString())); + if (str.toString().equals("")) { + return "-1"; + } else { + return "1"; + } + } + + // 修改orderindex + public String setPlOrderIndex(String orderIndexs) { + StringBuffer result = new StringBuffer(); + String wsId = null; + if (!orderIndexs.equals("")) { + UtilString ut = new UtilString(orderIndexs); + List v = ut.split(","); + for (int i = 0, size = v.size(); i < size; i++) { + String st = (String) v.get(i); + UtilString u = new UtilString(st); + List vv = u.split("|"); + String id = (String) vv.get(0); + int orderIndex = Integer.parseInt((String) vv.get(1)); + PALRepositoryModelImpl model = (PALRepositoryModelImpl) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(id); + model.setOrderIndex(orderIndex); + wsId = model.getWsId(); + try { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().update(model); + result.append("1"); + } catch (Exception e) { + result.append("-1"); + e.printStackTrace(); + } + } + } + if (result.toString().indexOf("-1") > -1) { + return "-1"; + } else { + if (wsId != null) + CoeProcessLevelNoCache.getInstance().reloadInBackground(wsId); // 重新装载编号 + return "1"; + } + } + + // 重新修改pid + public String setPlPids(String pids) { + StringBuffer result = new StringBuffer(); + result.append("0"); + String wsId = null; + if (!pids.equals("")) { + UtilString ut = new UtilString(pids); + List v = ut.split(","); + String ids = (String) v.get(0); + String pid = (String) v.get(1); + UtilString u = new UtilString(ids); + List vv = u.split("|"); + for (int i = 0, size = vv.size(); i < size; i++) { + String id = (String) vv.get(i); + PALRepositoryModelImpl model = (PALRepositoryModelImpl) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(id); + PALRepositoryModel pidModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(pid); + model.setParentId(pid); + model.setLevel(pidModel.getLevel() + 1); + wsId = model.getWsId(); + try { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().update(model); + CoeProcessLevelDaoFacotory.createCoeProcessLevel().getChildNodesAndUpdateLevel(model); // 递归更新子节点的level + result.append("1"); + } catch (Exception e) { + result.append("-1"); + e.printStackTrace(); + } + } + } + if (result.toString().indexOf("-1") > -1) { + return "-1"; + } else { + if (wsId != null) + CoeProcessLevelNoCache.getInstance().reloadInBackground(wsId); // 重新装载编号 + return "1"; + } + } + + /** + * 通过拖拽修改文件的排序或父节点 + * + * @param sourceId 要修改的文件Id + * @param targetId 目标文件Id + * @param type insert:插入到文件之间;inner:插入到target内部(默认最后一个位置) + * @param position below: 在target后面插入;above:在target上面插入 + * @return + */ + public String updatePalIndexOrPid(String sourceId, String targetId, String type, String position) { + ResponseObject ro = null; + if(sourceId.equals(targetId)) { + ro = ResponseObject.newErrResponse("移动文件与目标文件不能相同"); + return ro.toString(); + } + PALRepositoryModel sourceModel = PALRepositoryCache.getCache().get(sourceId); + PALRepositoryModel targetModel = PALRepositoryCache.getCache().get(targetId); + if (sourceModel == null) { + ro = ResponseObject.newErrResponse("要移动的源文件不存在"); + return ro.toString(); + } else { + } + if (targetId.length() == 36 && targetModel == null) { + ro = ResponseObject.newErrResponse("移动的目标文件不存在"); + return ro.toString(); + } + // 验证目标文件是否是源文件的子文件,子文件则不能拖拽,避免出现父子关联关系死循环 + List allSubList = new ArrayList<>(); + PALRepositoryQueryAPIManager.getInstance().getAllPalRepositoryModelsByPid(sourceModel.getWsId(), sourceId, allSubList); + if (allSubList != null && allSubList.size() > 0) { + for (PALRepositoryModel model : allSubList) { + if (targetId.equals(model.getId()) || targetId.equals(model.getVersionId())) { + ro = ResponseObject.newErrResponse("移动文件不能移动到自身的子文件内"); + return ro.toString(); + } + } + } + if (type == null || "".equals(type)) { + ro = ResponseObject.newErrResponse("参数type为空,移动失败"); + return ro.toString(); + } + + // 重构文件拖动 + List models = new ArrayList<>(); + if("insert".equals(type)) { // 放文件之间 + if(sourceModel.getParentId().equals(targetModel.getParentId())) { // 同一个父节点 + // 获取与targetModel同一父节点的所有子流程 + List targetBrothers = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByPid(targetModel.getWsId(), targetModel.getParentId()); + // 按照orderIndex排序,返回一个ArrayList,放入有序的versionId + ArrayList versionIdList = orderByOrderIndex(targetBrothers, sourceModel.getVersionId()); + int index = 0; + if("below".equals(position)) { // 放在target之后 + for (int i = 0; i < versionIdList.size(); i++) { + if (versionIdList.get(i).equals(targetModel.getVersionId())) { + index = i + 1; + break; + } + } + } + if("above".equals(position)) { // 放在target之前 + for (int i = 0; i < versionIdList.size(); i++) { + if (versionIdList.get(i).equals(targetModel.getVersionId())) { + index = i; + break; + } + } + } + versionIdList.add(index, sourceModel.getVersionId()); + for (int i = 0; i < versionIdList.size(); i++) { + for (PALRepositoryModel model : targetBrothers) { + if (model.getVersionId().equals(versionIdList.get(i))) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model; + modelImpl.setOrderIndex(i + 1); + models.add(model); + } + } + } + } else { // 不是同一个父节点 + if(sourceModel.getLevel() == targetModel.getLevel()) { // level相同 + + // 获取与sourceModel同一父节点的所有子流程 + List sourceBrothers = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByPid(sourceModel.getWsId(), sourceModel.getParentId()); + // 过滤掉source排序 + ArrayList sVersionIdList = orderByOrderIndex(sourceBrothers, sourceModel.getVersionId()); + // 更新source + for (int i = 0; i < sVersionIdList.size(); i++) { + for (PALRepositoryModel model : sourceBrothers) { + if (model.getVersionId().equals(sVersionIdList.get(i))) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model; + modelImpl.setOrderIndex(i + 1); + models.add(model); + } + } + } + + // 获取与targetModel同一父节点的所有子流程 + List targetBrothers = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByPid(targetModel.getWsId(), targetModel.getParentId()); + ArrayList tVersionIdList = orderByOrderIndex(targetBrothers, ""); + int index = 0; + if("below".equals(position)) { // 放在target之后 + for (int i = 0; i < tVersionIdList.size(); i++) { + if (tVersionIdList.get(i).equals(targetModel.getVersionId())) { + index = i + 1; + break; + } + } + } + if("above".equals(position)) { // 放在target之前 + for (int i = 0; i < tVersionIdList.size(); i++) { + if (tVersionIdList.get(i).equals(targetModel.getVersionId())) { + index = i; + break; + } + } + } + tVersionIdList.add(index, sourceModel.getVersionId()); + for (int i = 0; i < tVersionIdList.size(); i++) { + if(tVersionIdList.get(i).equals(sourceModel.getVersionId())) { + for (PALRepositoryModel model : sourceBrothers) { + if (model.getVersionId().equals(tVersionIdList.get(i))) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model; + modelImpl.setOrderIndex(i + 1); + modelImpl.setParentId(targetModel.getParentId()); + modelImpl.setNewParentId(targetModel.getParentId()); + models.add(model); + } + } + } else { + for (PALRepositoryModel model : targetBrothers) { + if (model.getVersionId().equals(tVersionIdList.get(i))) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model; + modelImpl.setOrderIndex(i + 1); + models.add(model); + } + } + } + } + } else { // level不相同 + // 获取与sourceModel同一父节点的所有子流程 + List sourceBrothers = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByPid(sourceModel.getWsId(), sourceModel.getParentId()); + // 过滤掉source排序 + ArrayList sVersionIdList = orderByOrderIndex(sourceBrothers, sourceModel.getVersionId()); + // 更新source + for (int i = 0; i < sVersionIdList.size(); i++) { + for (PALRepositoryModel model : sourceBrothers) { + if (model.getVersionId().equals(sVersionIdList.get(i))) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model; + modelImpl.setOrderIndex(i + 1); + models.add(model); + } + } + } + // 获取与targetModel同一父节点的所有子流程 + List targetBrothers = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByPid(targetModel.getWsId(), targetModel.getParentId()); + ArrayList tVersionIdList = orderByOrderIndex(targetBrothers, ""); + int index = 0; + if("below".equals(position)) { // 放在target之后 + for (int i = 0; i < tVersionIdList.size(); i++) { + if (tVersionIdList.get(i).equals(targetModel.getVersionId())) { + index = i + 1; + break; + } + } + } + if("above".equals(position)) { // 放在target之前 + for (int i = 0; i < tVersionIdList.size(); i++) { + if (tVersionIdList.get(i).equals(targetModel.getVersionId())) { + index = i; + break; + } + } + } + tVersionIdList.add(index, sourceModel.getVersionId()); + for (int i = 0; i < tVersionIdList.size(); i++) { + if(tVersionIdList.get(i).equals(sourceModel.getVersionId())) { + for (PALRepositoryModel model : sourceBrothers) { + if (model.getVersionId().equals(tVersionIdList.get(i))) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model; + modelImpl.setLevel(targetModel.getLevel()); + modelImpl.setOrderIndex(i + 1); + modelImpl.setParentId(targetModel.getParentId()); + modelImpl.setNewParentId(targetModel.getParentId()); + models.add(model); + } + } + } else { + for (PALRepositoryModel model : targetBrothers) { + if (model.getVersionId().equals(tVersionIdList.get(i))) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model; + modelImpl.setOrderIndex(i + 1); + models.add(model); + } + } + } + } + // sourceModel的多级子节点Level更新处理 + List sourceAllChild = new ArrayList<>(); + PALRepositoryQueryAPIManager.getInstance().getAllPalRepositoryModelsByPid(sourceModel.getWsId(), sourceModel.getId(), sourceAllChild); + for (PALRepositoryModel model : sourceAllChild) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model; + modelImpl.setLevel(model.getLevel() + targetModel.getLevel() - sourceModel.getLevel()); + models.add(model); + } + } + } + } + if("inner".equals(type)) { // 放在文件里面 + // 获取与sourceModel同一父节点的所有子流程 + List sourceBrothers = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByPid(sourceModel.getWsId(), sourceModel.getParentId()); + // 过滤掉source排序 + ArrayList sVersionIdList = orderByOrderIndex(sourceBrothers, sourceModel.getVersionId()); + // 更新source + for (int i = 0; i < sVersionIdList.size(); i++) { + for (PALRepositoryModel model : sourceBrothers) { + if (model.getVersionId().equals(sVersionIdList.get(i))) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model; + modelImpl.setOrderIndex(i + 1); + models.add(model); + } + } + } + int orderIndex = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getChildrenMaxOrderIndexByPidAndWsId(targetModel.getId(), targetModel.getWsId()); + for (PALRepositoryModel model : sourceBrothers) { + if (model.getVersionId().equals(sourceModel.getVersionId())) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model; + modelImpl.setOrderIndex(orderIndex + 1); + modelImpl.setParentId(targetModel.getId()); + modelImpl.setNewParentId(targetModel.getId()); + modelImpl.setLevel(targetModel.getLevel() + 1); + models.add(model); + } + } + // sourceModel的多级子节点Level更新处理 + List sourceAllChild = new ArrayList<>(); + PALRepositoryQueryAPIManager.getInstance().getAllPalRepositoryModelsByPid(sourceModel.getWsId(), sourceModel.getId(), sourceAllChild); + for (PALRepositoryModel model : sourceAllChild) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl) model; + modelImpl.setLevel(model.getLevel() + targetModel.getLevel() + 1 - sourceModel.getLevel()); + models.add(model); + } + } + + boolean result = false; + if (models != null && models.size() > 0) { + // 数据库和缓存更新 + PALRepository dao = new PALRepository(); + result = dao.updates(models); + } + if(result) { + ro = ResponseObject.newOkResponse(); + } else { + ro = ResponseObject.newErrResponse("数据没有被更新或者保存数据库失败"); + } + return ro.toString(); + } + + /** + * 按照orderIndex属性进行排序 + * @param list 待排序集合 + * @param filterVer 结果集合中需要过滤的versionId + */ + private ArrayList orderByOrderIndex(List list, String filterVer) { + List versionIdList = new ArrayList<>();// 按照orderIndex顺序放入versionId + if(list != null && list.size() > 0) { + Collections.sort(list, new ComparatorMap()); + Set versionIdSet = new HashSet<>(); + for (PALRepositoryModel model : list) { + if(model.getVersionId().equals(filterVer)) continue; // 过滤掉sourceModel + if(versionIdSet.contains(model.getVersionId())) continue; + versionIdList.add(model.getVersionId()); + versionIdSet.add(model.getVersionId()); + } + } + return (ArrayList)versionIdList; + } + + /** + * 通过拖拽修改文件的排序或父节点 + * + * @param sourceId 要修改的文件Id + * @param targetId 目标文件Id + * @param type insert:在target后面插入;inner:在target内部插入 + * @return + * @author zhangming + */ + public String updatePalIndexOrPid2(String sourceId, String targetId, String type, String position) { + ResponseObject ro = null; + PALRepositoryModel sourceModel = PALRepositoryCache.getCache().get(sourceId); + PALRepositoryModel targetModel = PALRepositoryCache.getCache().get(targetId); + PALRepositoryModelImpl source = null; + if (sourceModel == null) { + ro = ResponseObject.newErrResponse("要移动的源文件不存在"); + return ro.toString(); + } else { + source = (PALRepositoryModelImpl) sourceModel; + } + if (targetId.length() == 36 && targetModel == null) { + ro = ResponseObject.newErrResponse("移动的目标文件不存在"); + return ro.toString(); + } + + PALRepository dao = new PALRepository(); + //如果在target后面插入,并且target.level == source.level + //或者在target内部插入,并且target.level + 1 == source.level + //说明source文件的level没有修改,只需要修改文件本身,不需要修改子文件的level + //否则,修改文件本身,还需要修改所有子文件 + int minusLevel = 0; + int targetLevel = targetModel == null ? 0 : targetModel.getLevel(); + List list = new ArrayList(); + //versionId相同的流程 + List versionList = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getListProcessLevelByVersionUuid(sourceModel.getVersionId()); + for (int index = 0; index < versionList.size(); index++) { + PALRepositoryModelImpl versionModel = (PALRepositoryModelImpl) versionList.get(index); + versionModel.setOrderIndex(source.getOrderIndex()); + versionModel.setParentId(source.getParentId()); + versionModel.setNewParentId(source.getParentId()); + list.add(versionModel); + } + //所有子流程 + List subList = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByPid(sourceModel.getWsId(), sourceId); + if (subList != null && subList.size() > 0) { + list.addAll(subList); + } + PALRepositoryCache.getCache().remove(source.getId()); + if ("insert".equals(type)) { + minusLevel = targetLevel - sourceModel.getLevel(); + if (position != null && "below".equals(position)) { + source.setOrderIndex(targetModel.getOrderIndex() + 1); + } else { + source.setOrderIndex(targetModel.getOrderIndex() - 1); + } + source.setParentId(targetModel.getParentId()); + source.setNewParentId(targetModel.getParentId()); + } else { + minusLevel = targetLevel + 1 - sourceModel.getLevel(); + int orderIndex = dao.getChildrenMaxOrderIndex(targetId); + source.setOrderIndex(orderIndex + 1); + source.setParentId(targetModel == null ? targetId : targetModel.getVersionId()); + source.setNewParentId(targetModel == null ? targetId : targetModel.getVersionId()); + } + if (minusLevel != 0) { + for (int i = 0; i < list.size(); i++) { + PALRepositoryModelImpl model = (PALRepositoryModelImpl) list.get(i); + model.setLevel(model.getLevel() + minusLevel); + dao.update(model); + } + } else { + dao.update(source); + } + + //如果type为insert,将target下面的其他流程的index+1 + if ("insert".equals(type)) { + int targetIndex = targetModel.getOrderIndex(); + List targetSubList = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByPid(targetModel.getWsId(), targetModel.getParentId()); + for (int i = 0; i < targetSubList.size(); i++) { + PALRepositoryModelImpl model = (PALRepositoryModelImpl) targetSubList.get(i); + if (model.getOrderIndex() > targetIndex || "above".equals(position) && model.getOrderIndex() == targetIndex) { + model.setOrderIndex(model.getOrderIndex() + 1); + } + dao.update(model); + } + } + + ro = ResponseObject.newOkResponse(); + return ro.toString(); + } + + // 得到引用的aws流程 树json + public String getAwsProcessTreeJson(String wsId, String pid, String ids, String teamId) { + StringBuffer treeJson = new StringBuffer(); + if (pid.equals("")) { + return getAwsProcessRootTreeJson(wsId); // 加载根 + } + // 加载二级 + treeJson.append(getAwsProcessTwoNodeJson(wsId, ids, teamId)); + // System.out.println("getTeamTreeJson>>>" + treeJson.toString()); + return treeJson.toString(); + } + + /** + * 获取流程二级目录 + * @param wsId + * @param ids + * @param teamId + * @return + */ + public String getAwsProcessTwoNodeJson(String wsId, String ids, String teamId) { + // 得到所有流程分级信息 + List list = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getModels(wsId); + // 返回该小组下可以访问的流程 + + List objlist = getAllProcessAndPorcessLevelListByTeamId(list, teamId); + + List processList = (List) objlist.get(0); + List processLevelList = (List) objlist.get(1); + + JSONArray jsonArray = new JSONArray(); + for (int i = 0, size = processList.size(); i < size; i++) { + + ProcessDefinition workFlowModel = processList.get(i); + PALRepositoryModel coeProcessLevel = processLevelList.get(i); + + JSONObject json = getAwsProcessJSon(workFlowModel, ids, wsId, coeProcessLevel); + setJSONCheck(ids, workFlowModel, json); + jsonArray.add(json); + } + return jsonArray.toString(); + } + + // 根据小组id得到该小组可以访问得所有流程 和流程分级 + public List getAllProcessAndPorcessLevelListByTeamId(List models, String teamId) { + List ojbList = new ArrayList(); + List list = new ArrayList(); + List coeList = new ArrayList(); + for (PALRepositoryModel coeProcessLevelModel : models) { + // 获取可管理的小组id + String managerTeamId = coeProcessLevelModel.getPlSecurityW(); + // 获取可访问的小组id + String readTeamId = coeProcessLevelModel.getPlSecurityR(); + if (managerTeamId.equals("") && readTeamId.equals("")) { + continue; + } + if (((!managerTeamId.equals("")) && managerTeamId.indexOf(teamId) > -1) || ((!readTeamId.equals("")) && (readTeamId.indexOf(teamId) > -1))) { + String awsId = coeProcessLevelModel.getAWSProcessId(); + if (!awsId.equals("")) { + List table = ProcessDefCache.getInstance().getListOfProcessVersion(CoEConstant.APP_ID, awsId); + ProcessDefinition model = (ProcessDefinition) table.get(new Integer(table.size())); + if (model != null) { + list.add(model); + coeList.add(coeProcessLevelModel); + } + } + } + } + ojbList.add(list); + ojbList.add(coeList); + return ojbList; + } + + // 获得工作空间下流程树的根? + private String getAwsProcessRootTreeJson(String wsId) { + CoeWorkSpaceModel model = (CoeWorkSpaceModel) CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstance(wsId); + JSONArray jsonArray = new JSONArray(); + JSONObject rootJson = new JSONObject(); + rootJson.put("id", "node_0"); + rootJson.put("wsId", model.getUUId()); + rootJson.put("pid", -1); + rootJson.put("text", I18nRes.findValue(CoEConstant.APP_ID, model.getWsName())); + rootJson.put("iconCls", "icon-tree-nodes-root"); + rootJson.put("state", "closed"); + JSONObject attributes = new JSONObject(); + attributes.put("requestType", "root"); + rootJson.put("attributes", attributes); + jsonArray.add(rootJson); + return jsonArray.toString(); + } + + // 获取其他节点的json结构 + private JSONObject getAwsProcessJSon(ProcessDefinition model, String ids, String wsId, PALRepositoryModel coeProcessLevelModel) { + JSONObject rootJson = new JSONObject(); + rootJson.put("id", model.getId()); + rootJson.put("pid", "node_0"); + rootJson.put("wsid", wsId); + String processLevelName = ""; + PALRepositoryModel processLevelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(coeProcessLevelModel.getId()); + if (processLevelModel != null) { + processLevelName = "[(" + processLevelModel.getName() + ")]"; + } + rootJson.put("text", I18nRes.findValue(CoEConstant.APP_ID, model.getName()) + I18nRes.findValue(CoEConstant.APP_ID, processLevelName)); + rootJson.put("iconCls", "icon-tree-nodes-process"); + rootJson.put("isleaf", "true"); + JSONObject attributes = new JSONObject(); + attributes.put("requestType", ""); + attributes.put("uuid", model.getVersionId()); + attributes.put("processLevelId", coeProcessLevelModel.getId()); + rootJson.put("attributes", attributes); + return rootJson; + } + + // 设置流程的复选框选中 + private void setJSONCheck(String ids, ProcessDefinition workFlowModel, JSONObject json) { + if (!ids.equals("")) { + UtilString idStr = new UtilString(ids); + List v = idStr.split(","); + for (int i = 0, size = v.size(); i < size; i++) { + String id = (String) v.get(i); + if (id.equals(workFlowModel.getVersionId())) { + json.put("checked", "true"); + break; + } + } + } + } + + // 获得饼图json + public String getPlPieJson(String type, String wsId, String condition) { + String data = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getPlPieData(type, wsId, condition); + return data; + } + + /** + * 流程统计 + * + * @return + */ + public String getPLStatistics(String wsId, String condition) { + Map macroLibraries = new HashMap(); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("condition", condition); + macroLibraries.put("coePortal", CoEPortalSkins.getCoESkinsName(getContext())); + macroLibraries.put("coeIsBottomPie", getTeamWelcomeDimensionPieHtml(CoeProcessLevelConstant.PLISBOTTOM, wsId, condition));// 层级 + macroLibraries.put("coePlmPie", getTeamWelcomeDimensionPieHtml(CoeProcessLevelConstant.PLM, wsId, condition));// 里程碑 + macroLibraries.put("coeExectypePie", getTeamWelcomeDimensionPieHtml(CoeProcessLevelConstant.EXECTYPE, wsId, condition));// 执行方式 + macroLibraries.put("coeSystemPie", getTeamWelcomeDimensionPieHtml(CoeProcessLevelConstant.SYSTEMNAME, wsId, condition));// 系统名称 + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.count.htm", macroLibraries); + } + + /** + * 根据传入的类型获得小组流程清单饼图 + * @param type + * @param wsId + * @param condition + * @return + */ + private String getTeamWelcomeDimensionPieHtml(String type, String wsId, String condition) { + StringBuffer html = new StringBuffer(); + String data = new CoeProcessLevelWeb(getContext()).getPlPieJson(type, wsId, condition); + html.append("
    "); + html.append(" " + data); + html.append("
    "); + return html.toString(); + } + + /** + * 获得资源库展示html + * + * @param ruuid 资源库节点UUID + * @param wsid 资产库ID + * @param type 0 是根 1是正常节点 + * @return + */ + public String getPortalHtml(String ruuid, String wsid, String type) { + Map macroLibraries = new HashMap(); + PALRepositoryModel coeProcessLevelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(ruuid); + + macroLibraries.put("createButton", ""); + macroLibraries.put("importPalButton", ""); + String parentId; + int level; + String plCategory; + if (ruuid.length() < 36 || coeProcessLevelModel == null) { + macroLibraries.put("name", "" + I18nRes.findValue(CoEConstant.APP_ID, ruuid)); + macroLibraries.put("parentid", ruuid); + parentId = ruuid; + level = 0; + plCategory = ruuid; + macroLibraries.put("plLevel", 0); + macroLibraries.put("createButton", "新建"); + if (ruuid.equals("process")) { + macroLibraries.put("importPalButton", "导入流程"); + } + } else { + macroLibraries.put("name", getProcessLevelTitle(coeProcessLevelModel.getId(), wsid, type)); + macroLibraries.put("createButton", "新建"); + macroLibraries.put("parentid", coeProcessLevelModel.getId()); + parentId = coeProcessLevelModel.getId(); + macroLibraries.put("plLevel", coeProcessLevelModel.getLevel() + 1); + level = coeProcessLevelModel.getLevel(); + plCategory = coeProcessLevelModel.getMethodCategory(); + if (ruuid.equals("process") || coeProcessLevelModel != null && coeProcessLevelModel.getMethodCategory().equals("process")) { + macroLibraries.put("importPalButton", "导入流程"); + } + } + macroLibraries.put("exportButton", ""); + if (ruuid.equals("org") || coeProcessLevelModel != null && coeProcessLevelModel.getMethodCategory().equals("org")) { + macroLibraries.put("importButton", ""); + macroLibraries.put("importMenu", "
    • 直接导入
    • 模板导入
    "); + // macroLibraries.put("exportButton", ""); + } else { + macroLibraries.put("importButton", ""); + macroLibraries.put("importMenu", ""); + } + StringBuffer sb = new StringBuffer(); + StringBuffer listSb = new StringBuffer(); + List models = new ArrayList(); + models.add(coeProcessLevelModel); + models.addAll(CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelByPid(ruuid, wsid)); + // PAL与BPMS有关联,但是在BPMS中流程被删除的处理 + macroLibraries.put("invalidCorrelate", CoeProcessLevelUtil.deleteInvalidCorrelate(models)); + + for (int i = 0, size = models.size(); i < size; i++) { + PALRepositoryModelImpl cplm = (PALRepositoryModelImpl) models.get(i); + if (cplm == null) { + continue; + } + String modelName = cplm.getName().replace("\"", """).replace("<", "<").replace(">", ">"); + cplm.setName(modelName); + boolean isActive = false; + if (cplm != null && !"default".equals(cplm.getMethodId())) { + if (PALMethodCache.getPALMethodModelById(cplm.getMethodId()) == null) { + isActive = false; + } else { + String methodId = PALMethodCache.getPALMethodModelById(cplm.getMethodId()).getApp().getId(); + isActive = SDK.getAppAPI().isActive(methodId); + } + } + + boolean isCorrelate = PALRepositoryQueryAPIManager.getInstance().isCorrelateBpms(cplm.getId(), true); + String processDefId = ""; + ProcessDefinition definition = null; + String appId = ""; + int ver = -1; + if (isCorrelate) { + processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(cplm.getId(), true); + definition = ProcessDefCache.getInstance().get(processDefId); + appId = definition.getAppId(); + ver = ProcessDefCache.getInstance().get(processDefId).getVersionNo(); + } + String p = cplm.getFilePath(); + String userImg = "0"; + String photo = "../apps/" + CoEConstant.APP_ID + "/img/method/default.png"; + if (!"default".equals(cplm.getMethodId()) && isActive) { + if (isCorrelate && definition.getVersionStatus() != -1) { + photo = "data:image/png;base64," + BPMNIO.getBPMNImageThumbnail(appId, processDefId); + userImg = "1"; + } else { + if (!"".equals(p)) { + UtilFile utilFile = new UtilFile(p + "/" + cplm.getId() + ".small.png"); + if (utilFile.exists()) { + byte[] base64Bytes = Base64.encode(utilFile.readBytes()); + try { + photo = "data:image/png;base64," + new String(base64Bytes, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + userImg = "1"; + } + } + } + } else { + photo = "../apps/" + CoEConstant.APP_ID + "/img/method/default_folder.png"; + userImg = "0"; + } + + String delete = ""; + String listDelete = ""; + if (!cplm.isSystemFile() && !cplm.isPublish() && !cplm.isStop() && i > 0 && !cplm.isApproval()) { + delete = "删除文件"; + listDelete = ""; + } + + String onclick = ""; + if ("default".equals(cplm.getMethodId())) { + onclick = "parent.createProcessLevel(window,'" + wsid + "','" + cplm.getParentId() + "','" + cplm.getId() + "');"; + } else if (!isActive) { + onclick = "$.simpleAlert('该应用未安装或已暂停');"; + } else { + onclick = "parent.openDesginer('" + cplm.getId() + "',0,'" + ShapeUtil.replaceBlank(modelName) + "','" + appId + "','" + processDefId + "', '0');"; + } + + String subProcessCount = ""; + StringBuilder subProcessList = new StringBuilder(""); + // String icon = "../apps/" + CoEConstant.APP_ID + "/img/method/" + cplm.getMethodId() + "/16.leaf.png"; + String icon = ""; + if (!"default".equals(cplm.getMethodId())) { + icon = ""; + } + List subProcesses = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getUsedPalRepositoryModelsByPid(cplm.getId()); + if (i > 0 && subProcesses != null && subProcesses.size() > 0) { + if (!"default".equals(cplm.getMethodId())) { + icon = ""; + } + // icon = "../apps/" + CoEConstant.APP_ID + "/img/method/" + cplm.getMethodId() + "/16.png"; + subProcessCount = "下级文件(" + subProcesses.size() + ")"; + if (cplm.isPublish() || cplm.isStop() || cplm.isApproval()) { + subProcessList.append("
    ").append("
      "); + }else { + subProcessList.append("
      ").append("
        "); + } + int count = 3; +// if (cplm.isPublish()) { +// count = 1; +// } + for (int index = 0; index < count && index < subProcesses.size(); index++) { + PALRepositoryModel subModel = subProcesses.get(index); + if (subModel == null) { + continue; + } + String subClick = ""; + boolean subIsActive = false; + if (!"default".equals(subModel.getMethodId())) { + if (PALMethodCache.getPALMethodModelById(subModel.getMethodId()) == null) { + subIsActive = false; + } else { + String methodId = PALMethodCache.getPALMethodModelById(subModel.getMethodId()).getApp().getId(); + subIsActive = SDK.getAppAPI().isActive(methodId); + } + } + if ("default".equals(subModel.getMethodId())) { + subClick = "parent.createProcessLevel(window,'" + wsid + "','" + subModel.getParentId() + "','" + subModel.getId() + "');"; + } else if (!subIsActive) { + subClick = "$.simpleAlert('该应用未安装或已暂停');"; + } else { + subClick = "parent.openDesginer('" + subModel.getId() + "',0,'" + ShapeUtil.replaceBlank(subModel.getName()) + "','" + appId + "','" + processDefId + "', '0');"; + } + subProcessList.append("
      • " + subModel.getName().replace("\"", """).replace("<", "<").replace(">", ">") + "
      • "); + } + if (subProcesses.size() > count) { + subProcessList.append("
      • 更多
      • "); + } + subProcessList.append("
      "); + subProcessList.append("
      "); + } + if (i == 0) { + if (!"default".equals(cplm.getMethodId())) { + icon = ""; + } + // icon = "../apps/" + CoEConstant.APP_ID + "/img/method/" + cplm.getMethodId() + "/16.png"; + } + + String createUser = cplm.getCreateUser() == null ? "" : cplm.getCreateUser(); + if (UserCache.getModel(createUser) != null) { + createUser = UserCache.getModel(createUser).getUserName(); + } + String createDate = UtilDate.dateFormat(cplm.getCreateDate()); + sb.append("
      "); + sb.append("
      "); + sb.append("
      "); + sb.append("
      "); + sb.append(" " + cplm.getName() + " V" + (ver == -1 ? cplm.getVersion() : ver) + ".0"); + sb.append("
      "); + sb.append("
      "); + if (userImg.equals("0")) { + sb.append(" " + icon + ""); + } else { + sb.append(" "); + } + + sb.append("
      "); + sb.append(subProcessList); + sb.append("
      "); + sb.append("
      "); + sb.append("
      "); + sb.append(" 创建人:" + createUser + "【" + createDate + "】"); + sb.append("
      "); + sb.append("
      "); + sb.append("
      "); + if (cplm.isApproval()) {// 审核中顺序第一个 + sb.append(" 审核中"); + } else if (cplm.isPublish()) { + sb.append(" 已发布"); + } else if (cplm.isStop()) { + sb.append(" 已停用"); + } + sb.append("
      "); + sb.append("
      "); + sb.append("
      "); + sb.append(" 编辑信息"); + sb.append(delete); + sb.append("
      "); + sb.append("
      "); + listSb.append("").append(" " + icon + "" + cplm.getName() + "").append(" " + I18nRes.findValue(CoEConstant.APP_ID, cplm.getMethodId()) + " ").append(""+createUser+ "").append(""+createDate+"").append(" ") + .append(" ").append(listDelete).append(" ").append(""); + } + // 批量流程处理相关 + getPalBatchTag(ruuid, macroLibraries); + + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("ruuid", ruuid); + macroLibraries.put("type", type); + macroLibraries.put("wsid", wsid); + macroLibraries.put("pane", sb.toString()); + macroLibraries.put("list", listSb); + macroLibraries.put("jsonBpnMarkAndAssgin", jsonBpnMarkAndAssgin(ruuid, wsid));// 获取bpn的标记和分配 + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.portal.htm", macroLibraries); + } + + /* private JSONObject getJSon(String projectId, PALRepositoryModel + * coeProcessLevelModel, int i) { JSONObject rootJson = new JSONObject(); + * String powerValue = ""; rootJson.put("power", "0"); if + * (coeProcessLevelModel.getPlSecurityR().indexOf(projectId) != -1) {// 读 + * rootJson.put("power", "1"); } if + * (coeProcessLevelModel.getPlSecurityW().indexOf(projectId) != -1) {// 写的权限 + * rootJson.put("power", "2"); } String power = rootJson.getString("power"); + * rootJson.put("id", coeProcessLevelModel.getId()); + * rootJson.put("plParentId", coeProcessLevelModel.getParentId()); + * rootJson.put("plNo", + * CoeProcessLevelUtil.getProcessLevelNoByUUId(coeProcessLevelModel.getId(), + * coeProcessLevelModel.getWsId())); + * + * rootJson.put("drop", false); // if + * (coeProcessLevelModel.getPlIsBottomLevel() == 0) { // + * rootJson.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/pl/process.level.png"); // } + * else { // rootJson.put("icon", + * "../apps/" + CoEConstant.APP_ID + "/img/pl/process.def.gif"); // } if + * (coeProcessLevelModel.getLevel() <= 10) { rootJson.put("icon", + * "../apps/" + CoEConstant.APP_ID + "/img/pl/process.level" + coeProcessLevelModel.getLevel() + * + ".png"); } else { rootJson.put("icon", + * "../apps/" + CoEConstant.APP_ID + "/img/pl/process.levelx.png"); } if (!"2".equals(power)) + * { rootJson.put("drag", "false"); } boolean isShow = false; if + * ("0".equals(power)) { powerValue = + * I18nRes.findValue(CoEConstant.APP_ID, + * super.getContext().getLanguage(), "不可访问"); isShow = + * isShow(coeProcessLevelModel, projectId); + * + * } else if ("1".equals(power)) { powerValue = + * I18nRes.findValue(CoEConstant.APP_ID, + * super.getContext().getLanguage(), "可访问"); } else if ("2".equals(power)) { + * powerValue = I18nRes.findValue(CoEConstant.APP_ID, + * super.getContext().getLanguage(), "可管理"); } + * + * rootJson.put("name", "(" + coeProcessLevelModel.getLevel() + + * I18nRes.findValue(CoEConstant.APP_ID, + * super.getContext().getLanguage(), "级") + ")" + + * (coeProcessLevelModel.getLevel() == 0 ? + * I18nRes.findValue(CoEConstant.APP_ID, + * super.getContext().getLanguage(), coeProcessLevelModel.getName()) : + * coeProcessLevelModel.getName()) + "[" + + * CoeProcessLevelUtil.getProcessLevelNoByUUId(coeProcessLevelModel.getId(), + * coeProcessLevelModel.getWsId()) + "](" + powerValue + ")"); + * rootJson.put("isParent", coeProcessLevelModel.isBottomLevel() == 0 ? true + * : false); rootJson.put("plLevel", coeProcessLevelModel.getLevel()); + * rootJson.put("plOrdexIndex", coeProcessLevelModel.getOrderIndex()); + * rootJson.put("plDiagramUrl", coeProcessLevelModel.getDiagramUrl()); + * rootJson.put("isDrops", getIsDorpStatus(coeProcessLevelModel.getName())); + * rootJson.put("plSecurityR", coeProcessLevelModel.getPlSecurityR()); + * rootJson.put("plSecurityW", coeProcessLevelModel.getPlSecurityW()); if + * ("0".equals(power) && !isShow) { return null; } return rootJson; } */ + /* private boolean isShow(PALRepositoryModel model, String projectId) { + * List models = + * PALRepositoryCache.getCache().getChildrenes(model.getWsId(), + * model.getId()); boolean isShow = false; if (models == null) { return + * false; } for (int j = 0, size = models.size(); j < size; j++) { + * PALRepositoryModel plModel = models.get(j); if + * (plModel.getPlSecurityR().indexOf(projectId) != -1 || + * plModel.getPlSecurityW().indexOf(projectId) != -1) { return true; } + * isShow = isShow(plModel, projectId); if (isShow == true) { return isShow; + * } } return isShow; } */ + + // 批量处理相关片段 + public void getPalBatchTag(String ruuid, Map macroLibraries) { + String batchButton = ""; + String batchDlg = ""; + String batchJs = ""; + String appId = "com.actionsoft.apps.coe.pal.batch"; + if ("process".equals(ruuid) && SDK.getAppAPI().isInstalled(appId) && SDK.getAppAPI().isActive(appId)) { + batchButton = HtmlPageTemplate.merge(appId, "batch.main.button1.htm", null); + batchDlg = HtmlPageTemplate.merge(appId, "batch.dialog.htm", null); + Map jsMap = new HashMap<>(); + jsMap.put("appId", appId); + batchJs = HtmlPageTemplate.merge(appId, "batch.link.htm", jsMap); + } + macroLibraries.put("batch-button", batchButton); + macroLibraries.put("batch-dlg", batchDlg); + macroLibraries.put("batch-js", batchJs); + } + + /** + * 检查关联流程源文件在AWS端是否存在,若不存在则删除 + * @param uuid + * @return + */ + public String correlateResourceCheck(String uuid) { + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("invalidCorrelate", CoeProcessLevelUtil.correlateResourceCheck(uuid)); + return ro.toString(); + } + + /** + * bpn的标记和分配 + * + * @return + */ + private String jsonBpnMarkAndAssgin(String ruuid, String wsid) { + JSONObject json = new JSONObject(); + JSONArray mark = new JSONArray();// 标记数组 + JSONArray assign = new JSONArray();// 分配数组 +// List coeProcessLevelModels = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelByPid(ruuid, wsid); +// sysAppPlatform = AppsConst.SYS_APP_PLATFORM; +// for (PALRepositoryModel model : coeProcessLevelModels) { +// if (!PLRespositoryConstant.PL_METHID_PROCESS_BPMN2.equals(model.getMethodId())) {// 不是bpn图 +// continue; +// } +// String state = CoePropertyUtil.getPropertyValue(CoeProcessLevelConstant.MARK + "_" + model.getPlRid()); +// if (state == null) {// 未标记 +// continue; +// } +// +// if (CoeProcessLevelConstant.MARK_STATE_MARKED.equals(state)) {// 已标记 +// mark.add(model.getId()); +// } +// if (CoeProcessLevelConstant.MARK_STATE_ASSIGNED.equals(state)) {// 已分配 +// assign.add(model.getId()); +// } +// } + json.put(CoeProcessLevelConstant.MARK, mark);// 标记数据 + json.put(CoeProcessLevelConstant.ASSIGN, assign);// 分配数据 + return json.toString(); + } + + // 获取标题路径 + private String getProcessLevelTitle(String ruuid, String wsid, String type) { + PALRepositoryModel coeProcessLevelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(ruuid); + if (type.equals("0")) { + return I18nRes.findValue(CoEConstant.APP_ID, ruuid); + } else { + ArrayList list = new ArrayList(); + list.add(coeProcessLevelModel); + ruuid = coeProcessLevelModel.getParentId(); + PALRepositoryModel model; + while (true) { + model = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(ruuid); + if (model != null) { + list.add(model); + ruuid = model.getParentId(); + } else { + if (ruuid.length() < 36) { + PALRepositoryModelImpl cplm = new PALRepositoryModelImpl(); + cplm.setId(ruuid); + cplm.setName(ruuid); + list.add(cplm); + } + break; + } + } + StringBuffer sb = new StringBuffer(); + for (int i = list.size() - 1; i >= 0; i--) { + PALRepositoryModel plModel = list.get(i); + if (plModel == null) { + continue; + } + boolean isActive = false; + if (!"default".equals(plModel.getMethodId())) { + if (PALMethodCache.getPALMethodModelById(plModel.getMethodId()) == null) { + isActive = false; + } else { + String methodId = PALMethodCache.getPALMethodModelById(plModel.getMethodId()).getApp().getId(); + isActive = SDK.getAppAPI().isActive(methodId); + } + } + String attr = ""; + if (i != 0) { + attr = " class='pltitle' onclick='inFile(this)'"; + } + if (plModel.getId().length() < 36) { + sb.append("" + I18nRes.findValue(CoEConstant.APP_ID, plModel.getName()) + ""); + } else { + String icon = ""; + // String ic = "'../apps/" + CoEConstant.APP_ID + "/img/method/default/16.png'"; + if (!"default".equals(plModel.getMethodId()) && isActive) { + icon = ""; + // ic = "'../apps/" + PALMethodCache.getPALMethodModelById(plModel.getMethodId()).getApp().getId() + "/img/method/" + plModel.getMethodId() + "/16.png'"; + } + // sb.append(""); + //去掉icon 20190409 fulp + //sb.append("" + icon + ""); + sb.append("" + I18nRes.findValue(CoEConstant.APP_ID, plModel.getName()) + " " + ""); + } + if (i != 0) { + sb.append(" > "); + } + } + return sb.toString(); + } + } + + /** + * 新建流程库文件v2 + * + * @param wsid + * @param id + * @return + */ + public String createProcessLevel(String wsid, String id) { + Map macroLibraries = new HashMap(); + PALRepositoryModel coeProcessLevelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(id); + List list; + StringBuffer liString = new StringBuffer(); + if (coeProcessLevelModel == null) { + list = PALMethodCache.getPALMethodModelListByMethod(id); + if ("process".equals(id)) { + liString.append("
    • 流程规划
    • "); + } + } else { + if ("process".equals(coeProcessLevelModel.getMethodCategory())) { + liString.append("
    • 流程规划
    • "); + } + list = PALMethodCache.getPALMethodModelListByMethod(coeProcessLevelModel.getMethodCategory()); + } + List listApps = AppsAPIManager.getInstance().getInstalledApps(); + int size = listApps.size(); + Map map = new HashMap(); + for (int i = 0; i < size; i++) { + map.put(listApps.get(i).getId(), listApps.get(i).getRuntimeState()); + } + for (int i = 0, size1 = list.size(); i < size1; i++) { + PALMethodModel palMethodModel = list.get(i); + String appId = palMethodModel.getApp().getId(); + if (map.containsKey(appId)) { + if (map.get(appId).equals(AppsConst.RUNTIME_STATE_STOPPED)) + continue; + if (i == 0) { + liString.append("
    • " + I18nRes.findValue(CoEConstant.APP_ID, palMethodModel.getId()) + "
    • "); + macroLibraries.put("selectCategory", palMethodModel.getId()); + } else { + liString.append("
    • " + I18nRes.findValue(CoEConstant.APP_ID, palMethodModel.getId()) + "
    • "); + } + } + } + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("lihtml", liString.toString()); + macroLibraries.put("pid", id); + macroLibraries.put("wsid", wsid); + + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.create.htm", macroLibraries); + } + + /** + * 资产库模糊查询 + * @param name + * @param wsid + * @return + */ + @Deprecated + public String getPLInfoByName(String name, String wsid) { + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + List modelList = coeProcessLevel.getCoeProcessLevelByName(name, wsid, null); + List list = new ArrayList(); + for (int i = 0; i < modelList.size(); i++) { + PALRepositoryModel coeProcessLevelModel = modelList.get(i); + if (!coeProcessLevelModel.isUse()) { + continue; + } + if (list.size() >= 15) {// 15条直接返回结果 + break; + } + CoeProcessLevelAutoBean bean = new CoeProcessLevelAutoBean(); + bean.setValue(coeProcessLevelModel.getId()); + bean.setName(coeProcessLevelModel.getName()); + bean.setType(coeProcessLevelModel.getMethodId()); + StringBuilder sBuilder = new StringBuilder();// 名称组合 + Set idSets = new HashSet<>();// id记录,校验防止递归死循环 + sBuilder.append(bean.getName()); + idSets.add(coeProcessLevelModel.getId()); + getFilePath(coeProcessLevelModel, sBuilder,idSets);// 递归获取当前文件名称路径 + bean.setUi("
      " + sBuilder.toString() + "
      "); + list.add(bean); + } + if (list != null && list.size() > 0) { + // 排序 + Collections.sort(list, new Comparator() { + @Override + public int compare(CoeProcessLevelAutoBean o1, CoeProcessLevelAutoBean o2) { + String ui1 = o1.getUi(); + String ui2 = o2.getUi(); + return ui2.compareToIgnoreCase(ui1); + } + }); + } + return JSON.toJSONString(list); + } + + /** + * 资产库模型查询 + * @param wsId + * @param teamId + * @param name + * @param timeStamp 查询时间戳 + * @return + */ + public String basicQueryCoeProcessLevelByName(String wsId, String teamId, String name, String timeStamp) { + ResponseObject ro = ResponseObject.newOkResponse(); + // 获取模型列表 + List list = new ArrayList<>(); + Iterator iterator = PALRepositoryCache.getByWsId(wsId); + while (iterator.hasNext()) { + list.add(iterator.next()); + } + // 获取使用中且名称符合的,过滤掉大部分数据 + List tempList = new ArrayList<>(); + for (PALRepositoryModel model : list) { + if (model.isUse() && model.getName().toUpperCase().contains(name.toUpperCase())) { + tempList.add(model); + } + } + list = tempList; + // 过滤小组 + Set versionIds = CoeProcessLevelUtil.getPermRepositoryVersionIds(wsId, teamId, _uc.getUID(), null, null); + if (!UtilString.isEmpty(teamId)) { + List tempList3 = new ArrayList<>(); + for (PALRepositoryModel model : list) { + if (versionIds.contains(model.getVersionId())) { + tempList3.add(model); + } + } + list = tempList3; + } + List result = new ArrayList<>(); + JSONObject methodIcons = new JSONObject(); + Map folderMap = new HashMap<>(); + for (PALRepositoryModel model : list) { + List names = new ArrayList<>(); + List path = new ArrayList<>(); + JSONArray repositoryPathData = CoeProcessLevelUtil.getRepositoryPath(model.getId()); + // 前面大类不显示,根据小组进行级别处理 + for (int i = 0; i < repositoryPathData.size(); i++) { + JSONObject currObj = repositoryPathData.getJSONObject(i); + PALRepositoryModel currModel = PALRepositoryCache.getCache().get(currObj.getString("id")); + if (currModel != null && versionIds.contains(currModel.getVersionId())) { + names.add(currModel.getName()); + path.add(currModel.getVersionId()); + } else if (currObj.getString("id").length() < 36) { + path.add(currObj.getString("id")); + } + } + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("name", model.getName()); + object.put("versionId", model.getVersionId()); + object.put("methodId", model.getMethodId()); + object.put("path", StringUtils.join(path, ",")); + object.put("pathName", StringUtils.join(names, ">")); + if (!methodIcons.containsKey(model.getMethodId())) { + JSONObject iconObj = PALMethodManager.getInstance().getPALMethodIconById(model.getMethodId()); + methodIcons.put(model.getMethodId(), iconObj); + } + JSONObject icon = new JSONObject(); + JSONObject iconObj = methodIcons.getJSONObject(model.getMethodId()); + icon.put("code", iconObj.getString("code")); + icon.put("color", iconObj.getString("color")); + object.put("icon", icon); + if (!folderMap.containsKey(model.getMethodId())) { + PALMethodModel methodModel = PALMethodManager.getInstance().getPALMethodModelById(model.getMethodId()); + folderMap.put(model.getMethodId(), methodModel == null ? true : methodModel.isFolder()); + } + object.put("folder", folderMap.get(model.getMethodId())); + result.add(object); + } + // 按照名称排序,构造返回内容 + Collections.sort(result, new Comparator() { + @Override + public int compare(JSONObject o1, JSONObject o2) { + return o2.getString("name").compareToIgnoreCase(o1.getString("name")); + } + }); + ro.put("data", result); + ro.put("timeStamp", timeStamp); + return ro.toString(); + } + + /** + * 资产库模糊查询-高级查询-查询主信息 + * 建模方法标准大类分类,建模方法分类,pal用户(创建人) + * @param wsId + * @param teamId + * @return + */ + public String conditionQueryCoeProcessLevelMainData(String wsId, String teamId) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray result = new JSONArray(); + JSONArray allMethodList = new JSONArray();// 记录全部建模方法 + // 查询符合的建模分类及方法 + List categorys = CoeProcessLevelUtil.getRepositoryCategoryAndMethods(wsId, teamId, _uc.getUID()); + for (JSONObject categoryObj : categorys) { + JSONObject resultObj = new JSONObject(); + String category = categoryObj.getString("id"); + String categoryName = categoryObj.getString("name"); + JSONArray method = categoryObj.getJSONArray("method"); + resultObj.put("label", categoryName); + resultObj.put("name", category); + JSONArray methodList = new JSONArray(); + for (int i = 0; i < method.size(); i++) { + JSONObject methodObj = method.getJSONObject(i); + String methodId = methodObj.getString("id"); + String methodName = methodObj.getString("name"); + JSONObject obj = new JSONObject(); + obj.put("id", methodId); + obj.put("name", methodName); + methodList.add(obj); + JSONObject obj2 = new JSONObject(); + obj2.put("id", methodId); + obj2.put("name", methodName); + allMethodList.add(obj2); + } + resultObj.put("methodList", methodList); + result.add(resultObj); + } + // 构造"全部"标签 + JSONObject allTab = new JSONObject(); + allTab.put("label", "全部"); + allTab.put("name", "all"); + allTab.put("methodList", allMethodList); + result.add(0, allTab); + // 查询有权限范围内的流程的创建人,作为高级查询的流程创建人选项 + List userList = new ArrayList<>(); + Set userIds = new HashSet<>(); + List list = CoeProcessLevelUtil.getPermRepositoryList(wsId, teamId, _uc.getUID(), null, null, true, false); + for (PALRepositoryModel plModel : list) { + String createUserId = plModel.getCreateUser(); + if (userIds.contains(createUserId)) { + continue; + } + userIds.add(createUserId); + UserModel user = SDK.getORGAPI().getUser(createUserId); + JSONObject obj = new JSONObject(); + obj.put("id", createUserId); + if (user != null) { + obj.put("name", user.getUserName()); + } else { + obj.put("name", createUserId); + } + userList.add(obj); + } + // 排序 + userList.sort((u1, u2) -> {return u1.getString("name").compareToIgnoreCase(u2.getString("name"));}); + ro.put("data", result); + ro.put("userData", userList); + return ro.toString(); + } + + /** + * 资产库模糊查询-高级查询-查询符合的数据 + * @param wsId 资产库Id + * @param teamId 小组Id + * @param type 查询范围 文件 形状 + * @param method 建模方法分类 + * @param createUser 创建人s + * @param updateDate 更新时间范围 + * @param key 查询名称关键字 + * @param timeStamp 时间戳 + * @return + */ + public String conditionQueryCoeProcessLevelData(String wsId, String teamId, String type, String method, String createUser, String updateDate, String key, String timeStamp) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray result = new JSONArray(); + List tempList = new ArrayList<>(); + List list = CoeProcessLevelUtil.getPermRepositoryList(wsId, teamId, _uc.getUID(), null, null, true, false); + class T {// json字符串转换set + + Set jsonToSet(JSONArray json) {// json转set + Set result = new HashSet<>(); + for (int i = 0; i < json.size(); i++) { + result.add(json.getString(i)); + } + return result; + } + + Timestamp queryStartDate(String updateDate) {// 返回指定时间段内的起始时间 + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY, 00); + calendar.set(Calendar.MINUTE, 00); + calendar.set(Calendar.SECOND, 00); + switch (updateDate) { + case "today":// 今天内 + return new Timestamp(calendar.getTime().getTime()); + case "seven":// 7天内 + return new Timestamp(UtilDate.getDateForward(calendar.getTime(), -6).getTime()); + case "fifteen":// 15天内 + return new Timestamp(UtilDate.getDateForward(calendar.getTime(), -14).getTime()); + case "thirty":// 30天内 + return new Timestamp(UtilDate.getDateForward(calendar.getTime(), -29).getTime()); + default: + return null; + } + } + } + if (list != null && list.size() > 0) {// 先过滤掉一部分容易过滤的数据 + T t = new T(); + Set methodSet = t.jsonToSet(JSONArray.parseArray(method)); + Set createUserSet = t.jsonToSet(JSONArray.parseArray(createUser)); + // 获取文件模型的图标icon + JSONObject methodIcons = new JSONObject(); + for (PALRepositoryModel model : list) { + // 时间范围对比 + Timestamp timestamp = t.queryStartDate(updateDate); + if (timestamp != null) { + if (model.getModifyDate().before(timestamp)) { + continue; + } + } + // 建模方法、创建人对比 + if (!methodSet.contains(model.getMethodId()) || !createUserSet.contains(model.getCreateUser())) { + continue; + } + tempList.add(model); + } + } + // 进行名称过滤,组装结果数据 + if (tempList != null && tempList.size() > 0) { + Collections.sort(tempList, new Comparator() { + @Override + public int compare(PALRepositoryModel o1, PALRepositoryModel o2) { + return o1.getName().compareToIgnoreCase(o2.getName()); + } + }); + // 获取文件模型的图标icon + JSONObject methodIcons = new JSONObject(); + // 记录是否文件夹 + Map folderMap = new HashMap<>(); + Set typeSet = new T().jsonToSet(JSONArray.parseArray(type)); + for (PALRepositoryModel model : tempList) { + boolean isExist = false; + + if (typeSet.contains("file")) { + if (model.getName().toUpperCase().contains(key.toUpperCase())) { + isExist = true; + } + } + List shapeData = new ArrayList<>(); + if (typeSet.contains("shape")) { + List> relationFileList = CoeDesignerUtil.getShapeMessageJson(model.getId()); + if (relationFileList != null && relationFileList.size() > 0) { + for (Map map : relationFileList) { + if (map == null || map.get("id") == null) { + continue; + } + String text = map.get("text") == null ? "" : (String) map.get("text"); + if (text.toUpperCase().contains(key.toUpperCase())) {// 对比形状名称 + shapeData.add(text); + isExist = true; + } + } + } + } + Collections.sort(shapeData); + if (isExist) { + JSONObject resultObj = new JSONObject(); + resultObj.put("id", model.getId()); + resultObj.put("name", model.getName()); + resultObj.put("methodId", model.getMethodId()); + resultObj.put("versionId", model.getVersionId()); + JSONArray repositoryPathData = CoeProcessLevelUtil.getRepositoryPath(model.getId()); + List pathList = new ArrayList<>(); + for (int i = 0; i < repositoryPathData.size(); i++) { + pathList.add(repositoryPathData.getJSONObject(i).getString("versionId")); + } + resultObj.put("path", UtilString.join(pathList, ",")); + if (!methodIcons.containsKey(model.getMethodId())) { + JSONObject iconObj = PALMethodManager.getInstance().getPALMethodIconById(model.getMethodId()); + methodIcons.put(model.getMethodId(), iconObj); + } + JSONObject icon = new JSONObject(); + JSONObject iconObj = methodIcons.getJSONObject(model.getMethodId()); + icon.put("code", iconObj.getString("code")); + icon.put("color", iconObj.getString("color")); + resultObj.put("icon", icon); + resultObj.put("shapeData", shapeData); + resultObj.put("shapeDataStr", ""); + resultObj.put("shapeDataSize", shapeData.size()); + resultObj.put("createUser", SDK.getORGAPI().getUser(model.getCreateUser()) == null ? model.getCreateUser() : SDK.getORGAPI().getUser(model.getCreateUser()).getUserName()); + resultObj.put("createDate", UtilDate.datetimeFormat(model.getCreateDate(), "yyyy年MM月dd日")); + resultObj.put("updateUser", SDK.getORGAPI().getUser(model.getModifyUser()) == null ? model.getModifyUser() : SDK.getORGAPI().getUser(model.getModifyUser()).getUserName()); + resultObj.put("updateDate", UtilDate.datetimeFormat(model.getModifyDate(), "yyyy年MM月dd日")); + if (!folderMap.containsKey(model.getMethodId())) { + PALMethodModel methodModel = PALMethodManager.getInstance().getPALMethodModelById(model.getMethodId()); + folderMap.put(model.getMethodId(), methodModel == null ? true : methodModel.isFolder()); + } + resultObj.put("folder", folderMap.get(model.getMethodId())); + result.add(resultObj); + } + } + } + ro.put("data", result); + ro.put("timeStamp", timeStamp); + return ro.toString(); + } + + /** + * 获取文件名称全路径 + * @param model + * @return + */ + @Deprecated + private void getFilePath(PALRepositoryModel model, StringBuilder sBuilder, Set idSets) { + if (model.getParentId().length() == 36 && !idSets.contains(model.getParentId())) { + String parentId = model.getParentId(); + PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(parentId); + if (parentModel != null) { + sBuilder.insert(0, parentModel.getName() + ">"); + idSets.add(parentModel.getId()); + getFilePath(parentModel, sBuilder, idSets); + } + } + } + + /** + * 更新文件名称 + * + * @param uuid + * @param title + * @return + */ + public String updatePLName(String uuid, String title) { + PALRepositoryModelImpl model = (PALRepositoryModelImpl) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + if (model == null) { + return ResponseObject.newErrResponse("模型文件不存在").toString(); + } + if (UtilString.isEmpty(title) || UtilString.isEmpty(title.trim())) { + title = "未命名文件"; + } + title = title.replaceAll("\n", ""); + if (title.equals(model.getName())) { + return ResponseObject.newOkResponse().toString(); + } + model.setName(title); + String uid = super.getContext().getUID(); + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + model.setModifyUser(uid); + model.setModifyDate(nowTime); + CoeProcessLevelDaoFacotory.createCoeProcessLevel().update(model); + // 暂时先不处理流程名称与bpm平台同步问题 + // String processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(model.getId(), true); +// if (UtilString.isNotEmpty(processDefId)) { +// ProcessDefinition definition = ProcessDefCache.getInstance().get(processDefId); +// if (definition != null) { +// JSONObject bpmnDesignerJSONObject = BPMNIO.getBPMNDesignerJSONObject2(_uc, definition.getAppId(), processDefId); +// bpmnDesignerJSONObject.put("processName", title); +// ProcessDefinition m = ProcessDefCache.getInstance().getModel(processDefId); +// String op = "update|" + m.getVersionId(); +// try { +// BPMNIO.saveJsonToBPMNFile(_uc, definition.getAppId(), processDefId, op, bpmnDesignerJSONObject.toString(), true, null); +// } catch (BPMNDefException e) { +// e.printStackTrace(); +// } +// } +// } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_REPOSITORY_UPDATE); + } + return ResponseObject.newOkResponse().toString(); + } + + /** + * 复制库文件 + * @param sourceUUID + * @param targetUUID + * @param copyType + * @return + */ + public String copyFile(String wsId, String teamId, String sourceUUID, String targetUUID, String copyType) { + ResponseObject checkRo = checkCopyFile(sourceUUID, targetUUID, copyType); + if (!checkRo.isOk()) { // 文件校验 + return checkRo.toString(); + } + if ("self".equals(copyType)) { // 复制当前文件 + return copyCurrentFile(wsId, teamId, sourceUUID, targetUUID, 0); + } + if ("all".equals(copyType)) { // 复制当前文件及全部子文件 + return copyAllFile(wsId, teamId, sourceUUID, targetUUID, 0); + } + ResponseObject ro = ResponseObject.newOkResponse(); + return ro.toString(); + } + + /** + * 复制当前文件及所有子文件 + * @param sourceUUID + * @param targetUUID + * @return + */ + private String copyAllFile(String wsId, String teamId, String sourceUUID, String targetUUID, int index) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryModel sourceModel = PALRepositoryCache.getCache().get(sourceUUID); + String rostr = copyCurrentFile(wsId, teamId, sourceUUID, targetUUID, index++); + List subModelList = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelByPid(sourceUUID, sourceModel.getWsId()); + if (subModelList != null && subModelList.size() > 0) { + for (PALRepositoryModel model : subModelList) { + String newTargetUUID = JSONObject.parseObject(rostr).getJSONObject("data").getString("useId"); + if (newTargetUUID == null || "".equals(newTargetUUID)) { + continue; + } + copyAllFile(wsId, teamId, model.getId(), newTargetUUID, index); + } + } + return ro.toString(); + } + + /** + * 校验复制/粘贴的文件是否存在 + * @param sourceUUID + * @param targetUUID + * @param copyType + */ + private ResponseObject checkCopyFile(String sourceUUID, String targetUUID, String copyType) { + PALRepositoryModel targetProcessLevelModel = PALRepositoryCache.getCache().get(targetUUID); + if (targetUUID.length() >= 36) { + if (targetProcessLevelModel == null) { + return ResponseObject.newErrResponse("粘贴文件失败,目标文件不存在"); + } + } + PALRepositoryModel sourceProcessLevelModel = PALRepositoryCache.getCache().get(sourceUUID); + if (sourceProcessLevelModel == null) { + return ResponseObject.newErrResponse("粘贴文件失败,源文件不存在"); + } + +// 新版不会有以下情况 +// if (targetProcessLevelModel.getVersionId().equals(sourceProcessLevelModel.getVersionId())) { +// return ResponseObject.newErrResponse("复制与粘贴位置不能相同"); +// } +// List list = new ArrayList<>(); +// Set idSet = new HashSet(); +// PALRepositoryCache.getAllChildrenModelsByPid(sourceProcessLevelModel.getWsId(), sourceProcessLevelModel.getId(), list, idSet); +// if (list != null) { +// for (PALRepositoryModel model : list) { +// if (model.getVersionId().equals(targetProcessLevelModel.getVersionId())) { +// return ResponseObject.newErrResponse("文件不能复制到其自身内部"); +// } +// } +// } + return ResponseObject.newOkResponse(); + } + + /** + * 复制当前文件 + * @param sourceUUID + * @param targetUUID + */ + private String copyCurrentFile(String wsId, String teamId, String sourceUUID, String targetUUID, int index) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryModelImpl sourceModel = (PALRepositoryModelImpl) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(sourceUUID); + PALRepositoryModelImpl targetModel = (PALRepositoryModelImpl) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(targetUUID); + if (targetUUID.length() < 36) {// 根目录下复制 + targetModel = new PALRepositoryModelImpl(); + targetModel.setWsId(wsId); + targetModel.setLevel(0); + targetModel.setId(targetUUID); + } + + copyRepository(wsId, teamId, sourceModel, targetModel, ro, index); + return ro.toString(); + } + + /** + * 复制PAL模型,若PAL流程与BPMS流程有关联,则复制源文件为BPMS端流程文件 + * @param sourceModel + * @param targetModel + * @param ro + */ + private void copyRepository(String wsId, String teamId, PALRepositoryModelImpl sourceModel, PALRepositoryModelImpl targetModel, ResponseObject ro, int index) { + String targetUUID = targetModel.getId(); + String targetWsId = targetModel.getWsId(); + String versionId = UUIDGener.getUUID();// 新的版本ID + String plRid = UUIDGener.getUUID(); + int orderIndex = -1; + Map mapNewUUID = new HashMap(); + boolean isCorrelate = PALRepositoryQueryAPIManager.getInstance().isCorrelateBpms(sourceModel.getId(), true); + List models = CoeProcessLevelUtil.queryPalRepositoryModelsByPalId(sourceModel.getId()); + Collections.sort(models, new Comparator() { + @Override + public int compare(PALRepositoryModel o1, PALRepositoryModel o2) { + return VersionUtil.compareVersionNo(o1.getVersion(),o2.getVersion(),true); + } + }); + int version = 1; + for (PALRepositoryModel oldModel : models) { + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + PALRepositoryModelImpl newModel = new PALRepositoryModelImpl(); + + newModel.setWsId(targetWsId); + newModel.setLevel(targetModel.getLevel() + 1); + String plNo = ""; + if (targetUUID.length() == 36) { + PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(targetUUID); + if (parentModel != null) { + targetUUID = parentModel.getVersionId(); + if (!UtilString.isEmpty(plNo)) { + List list = Cache.iteratorToList(PALRepositoryCache.getByPid(wsId, targetUUID)); + if (list.size() < 9) { + plNo = parentModel.getNo() + "0" + (list.size() + 1); + } else { + plNo = parentModel.getNo() + (list.size() + 1); + } + } + List parentModelList = PALRepositoryCache.getByVersionId(wsId, parentModel.getVersionId()); + for (PALRepositoryModel parentVerModel : parentModelList) { + PALRepositoryModelImpl parentModelImpl = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(parentVerModel.getId()); + parentModelImpl.setBottomLevel(0); + coeProcessLevel.update(parentModelImpl); + } + } + } + + newModel.setVersionId(versionId); + newModel.setPlRid(plRid); + newModel.setVersion(version); + newModel.setHistoryMaxVersion("0"); + if (version == 1) { + newModel.setId(versionId); + newModel.setUse(true); + } else { + newModel.setId(UUIDGener.getUUID()); + newModel.setUse(false); + } + newModel.setParentId(targetUUID); + newModel.setNo(plNo); + newModel.setMethodId(oldModel.getMethodId()); + newModel.setMethodCategory(oldModel.getMethodCategory()); + newModel.setMilestone(oldModel.getMilestone()); + if (orderIndex == -1) { + orderIndex = coeProcessLevel.getChildrenMaxOrderIndexByPidAndWsId(targetUUID, wsId); + } + newModel.setOrderIndex(orderIndex + 1); + newModel.setName(oldModel.getName() + (index == 0 ? "(副本)" : "")); + String uid = super.getContext().getUID(); + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + newModel.setCreateUser(uid); + newModel.setCreateDate(nowTime); + newModel.setModifyUser(uid); + newModel.setModifyDate(nowTime); + newModel.setBottomLevel(oldModel.isBottomLevel()); + newModel.setDesc(oldModel.getDesc()); + newModel.setInput(oldModel.getInput()); + newModel.setOutput(oldModel.getOutput()); + newModel.setExecType(oldModel.getExecType()); + newModel.setSystemFile(false); + newModel.setSystemName(oldModel.getSystemName()); + newModel.setPublish(false); + newModel.setStop(false); + newModel.setApproval(false); + newModel.setDutyDept(oldModel.getDutyDept()); + newModel.setDutyUser(oldModel.getDutyUser()); + newModel.setExt1(oldModel.getExt1()); + newModel.setExt2(oldModel.getExt2()); + newModel.setExt3(oldModel.getExt3()); + newModel.setExt4(oldModel.getExt4()); + version++; + // 创建 + try { + coeProcessLevel.insert(newModel); + if (!"default".equals(newModel.getMethodId())) { + String path = PLRFilePath.getInstance().create(AppsAPIManager.getInstance().getAppContext(CoEConstant.APP_ID), newModel.getId()); + path = path.replace(newModel.getVersionId(), newModel.getId()); + newModel.setFilePath(path); + coeProcessLevel.update(newModel); + } + // 设置PAL小组权限 + if (!UtilString.isEmpty(teamId)) { + CoeCooperationAPIManager.getInstance().addRepositoryToTeamAndRolePerm(_uc, teamId, newModel.getVersionId(), true, true); + } + CoeProcessLevelNoCache.getInstance().reloadInBackground(targetWsId); // 重新装载编号 + if (!isCorrelate) {// PAL流程 + if (!UtilString.isEmpty(newModel.getFilePath()) && !UtilString.isEmpty(oldModel.getFilePath())) { + CoeFile fileUtil = new CoeFile(); + fileUtil.copyDefaultVersion(oldModel.getFilePath(), oldModel.getId(), newModel.getFilePath(), newModel.getId()); + CoeDesignerImageCache.getCache().put(newModel.getId(), newModel.getId());// 图片更新记录缓存 + } + } else {// PAL与BPMS关联流程,从BPMS端获取数据 + CoeProcessLevelCorrelateModel model = CoeProcessLevelCorrelateCache.getCache().get(oldModel.getId()); + if (model != null && model.isCorrelate()) { + ProcessDefinition processDefinition = ProcessDefCache.getInstance().get(model.getPlAwsId()); + if (processDefinition != null) { + CoeDesginerAdapter coeDesginerAdapter = new CoeDesginerAdapter(getContext()); + JSONObject definition = coeDesginerAdapter.readDefinition(processDefinition.getAppId(), processDefinition.getId()); + String define = definition.toString(); + define = define.replace("bpmn", "process_bpmn2"); + BPMNModel defineModel = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(newModel.getId(), 0); + if (defineModel == null) { + defineModel = CoeDesignerUtil.createBPMNModel(newModel.getId(), 0); + defineModel.setCreateHistory(false); + CoeDesignerAPIManager.getInstance().storeDefinitionOfBpmn(defineModel); + } + defineModel.setUpdateTime(new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date())); + defineModel.setDefinition(define); + CoeDesignerAPIManager.getInstance().storeDefinitionOfBpmn(defineModel);// dao操作 + CoeDesignerImageCache.getCache().put(newModel.getId(), newModel.getId());// 图片更新记录缓存 + } + } + } + + mapNewUUID = createShapeIdRelation(oldModel, mapNewUUID, true); + // 更新流程文件中节点id等信息 + updateDefineShape(newModel, mapNewUUID, ""); + CoeProcessLevelUtil.copyRepositoryProperty(oldModel, newModel, mapNewUUID, _uc); + } catch (Exception e) { + e.printStackTrace(); + } + } + ro.put("useId", CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeUseProcessLevelByRid(plRid).get(0).getId()); + } + + private void updateDefineShape(PALRepositoryModelImpl newModel, Map mapNewUUID, String define) { + String messageJson = null; + PALRepositoryModel levelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(newModel.getId()); + String filePath = levelModel.getFilePath(); + filePath = filePath + File.separator + levelModel.getId(); + UtilFile utilFile = new UtilFile(filePath); + if (UtilString.isEmpty(define)) { + messageJson = utilFile.readStrUTF8(); + } else { + messageJson = define; + } + if (!UtilString.isEmpty(messageJson)) { + if (mapNewUUID != null) { + for (Map.Entry entry : mapNewUUID.entrySet()) { + messageJson = messageJson.replace(entry.getKey(), entry.getValue()); + } + } + try { + utilFile.write(messageJson.getBytes("utf-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + DesignerRelationShapeCacheManager cache = DesignerRelationShapeCacheManager.getInstance(); + Map> shapeMap = cache.getEventMap(); + ShapeUtil.shapeJsonToObject(messageJson, shapeMap, newModel.getId()); + } + } + + /** + * 创建节点关系 + * @param oldModel + * @param createNewShapeId true 返回map中key为文件节点id,value为新创建的id; false 返回map中key为文件节点id,value与key相同 + * @return map key:oldShapeId value:newShapeId/oldShapeId + */ + private Map createShapeIdRelation(PALRepositoryModel oldModel, Map map, boolean createNewShapeId) { + // 获取原来的节点数据 + String define = ""; + BPMNModel bpmnDefineModel = null; + BaseModel baseDefineModel = null; + if (oldModel.getMethodId().equals("process.bpmn2")) { + bpmnDefineModel = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(oldModel.getId(), 0); + if (bpmnDefineModel == null) { + bpmnDefineModel = CoeDesignerUtil.createBPMNModel(oldModel.getId(), 0); + } + define = bpmnDefineModel.getDefinition(); + } else { + baseDefineModel = CoeDesignerAPIManager.getInstance().getDefinition(oldModel.getId(), 0); + if (baseDefineModel == null) { + baseDefineModel = CoeDesignerUtil.createModel(oldModel.getId(), 0); + } + define = baseDefineModel.getDefinition(); + } + JSONObject definition = JSONObject.parseObject(define); + JSONObject elements = definition.getJSONObject("elements"); + Iterator ite = elements.keySet().iterator(); + while (ite.hasNext()) { + String key = ite.next(); + JSONObject shape = elements.getJSONObject(key); + String name = shape.getString("name"); + if (!"linker".equals(name) && shape.get("dataAttributes") != null) { + String oldId = shape.getString("id"); + if (createNewShapeId) { + String id = UUIDGener.getObjectId(); + if (!map.containsKey(oldId)) { + map.put(oldId, id); + } + } else { + if (!map.containsKey(oldId)) { + map.put(oldId, oldId); + } + } + } + } + return map; + } + + // // 流程分级 新建级次ajax数据 + public String coePALProcessLevelCreateAjax(String wsid, String pid, String id, String type) { + + // 获得父级模型 + PALRepositoryModel parentPlModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(pid); + // 获得有哪些建模方法? + List palMethodModels = null; + if (parentPlModel == null) { + palMethodModels = PALMethodCache.getPALMethodModelListByMethod(pid); + } else { + palMethodModels = PALMethodCache.getPALMethodModelListByMethod(parentPlModel.getMethodCategory()); + } + String wsID = wsid; + String plNo = ""; + String plName = ""; + int plLevel = 0; + if (parentPlModel != null) { + plLevel = parentPlModel.getLevel(); + } + String plParentId = pid; + int plOrderIndex = 0; + String plDesc = ""; + int plIsBottomLevel = 0; + String plRd = ""; + String plRdId = ""; + String[] plRdIds = null; + String plRp = ""; + String plM = ""; + int plExecType = 0; + String plSystemName = ""; + String plAwsPid = ""; + String plDiagramUrl = ""; + String plColor = ""; + String plSecurityW = ""; + String plSecurityR = ""; + String plSecurityRName = ""; + String plSecurityWName = ""; + StringBuffer methodIdsb = new StringBuffer(); + Map macroLibraries = new HashMap(); + // 更新 + List listApps = AppsAPIManager.getInstance().getInstalledApps(); + int size = listApps.size(); + Map map1 = new HashMap(); + for (int i = 0; i < size; i++) { + map1.put(listApps.get(i).getId(), listApps.get(i).getRuntimeState()); + } + if (!id.equals("") && !id.equals("0")) { + macroLibraries.put("showStyle", ""); + PALRepositoryModel plModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(id); + plNo = plModel.getNo(); + plName = plModel.getName(); + plLevel = plModel.getLevel(); + plOrderIndex = plModel.getOrderIndex(); + plDesc = plModel.getDesc(); + plIsBottomLevel = plModel.isBottomLevel(); + plRdId = plModel.getOwnerDept(); + plRdIds = plRdId.split(" "); + for (int i = 0; i < plRdIds.length; i++) { + String departmentId = plRdIds[i]; + if ("".equals(departmentId)) { + continue; + } + DepartmentModel dModel = (DepartmentModel) DepartmentCache.getModel(departmentId); + if (dModel == null) { + continue; + } + plRd += dModel.getName() + " "; + } + + plRp = plModel.getOwnerUser(); + plM = plModel.getMilestone(); + plExecType = plModel.getExecType(); + plSystemName = plModel.getSystemName(); + plAwsPid = plModel.getAWSProcessId(); + plDiagramUrl = plModel.getDiagramUrl(); + plColor = plModel.getColor(); + plSecurityW = plModel.getPlSecurityW(); + plSecurityR = plModel.getPlSecurityR(); + for (int i = 0, size1 = palMethodModels.size(); i < size1; i++) { + PALMethodModel palMethodModel = palMethodModels.get(i); + String appId = palMethodModel.getId(); + if (map1.containsKey(appId)) { + if (map1.get(appId).equals(AppsConst.RUNTIME_STATE_STOPPED)) + continue; + if (appId.equals(plModel.getMethodId())) { + methodIdsb.append(""); + } else { + methodIdsb.append(""); + } + } + } + } else { + macroLibraries.put("showStyle", "style=\"display: none;\""); + for (int i = 0, size2 = palMethodModels.size(); i < size2; i++) { + PALMethodModel palMethodModel = palMethodModels.get(i); + String appId = palMethodModel.getId(); + if (map1.containsKey(appId)) { + if (map1.get(appId).equals(AppsConst.RUNTIME_STATE_STOPPED)) + continue; + methodIdsb.append(""); + } + } + } + + macroLibraries.put("coePortal", CoEPortalSkins.getCoESkinsName(getContext())); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("id", id); + Map map = getMoreAttrContent(super.getContext().getSessionId(), id, macroLibraries); + if (map.get("content") == null && map.get("attrIds") == null) { + map.put("content", ""); + macroLibraries.put("attrIds", ""); + } else { + String s = (String) map.get("attrIds"); + macroLibraries.put("attrIds", s); + } + JSONObject json = new JSONObject(); + json.put("wsID", wsID); + json.put("plNo", plNo); + json.put("plName", plName); + json.put("plLevel", plLevel); + json.put("plParentId", plParentId); + json.put("plOrderIndex", plOrderIndex); + json.put("plDesc", plDesc); + json.put("plIsBottomLevel", plIsBottomLevel); + json.put("plRd", plRd); + json.put("plRdId", plRdId); + json.put("plRp", plRp); + json.put("plM", plM); + json.put("plExecType", plExecType); + json.put("plSystemName", getSystemNameOption(plSystemName)); + json.put("plAwsPid", plAwsPid); + ProcessDefinition wfModel = ProcessDefCache.getInstance().getModel(plAwsPid); + json.put("plAwsName", wfModel == null ? "" : wfModel.getName()); + json.put("plSecurityRName", plSecurityRName); + json.put("plSecurityWName", plSecurityWName); + json.put("plDiagramUrl", plDiagramUrl); + json.put("plColor", plColor); + json.put("type", type); + json.put("plSecurityW", plSecurityW); + json.put("plSecurityR", plSecurityR); + json.put("miselectoption", methodIdsb.toString()); + return json.toString(); + + } + + /** + * 根据文件uuid获得正在使用的workspace中对应文件的uuid + * + * @param uuid + * @return + */ + public String getUsingPlId(String uuid) { + String usingId = ""; + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + PALRepositoryModel model = coeProcessLevel.getUsingPlUuid(uuid); + if (model == null) { + throw new AWSException("查询当前使用中流程失败,uuid="+ uuid); + } + usingId = model.getId(); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("fileId", usingId); + ro.put("fileName", model.getName()); + return ro.toString(); + } + + /** + * 标记 bpmn文件 + * + * @param uuid + * @return + */ + public String mark(String uuid) { + PALRepositoryModel model = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + if (model == null) { + throw new AWSException("流程未找到
      uuid:" + uuid); + } + if (CoeProcessLevelUtil.isPalManage()) { + CoeProcessLevelCorrelateModel correlateModel = CoeProcessLevelCorrelateCache.getCache().get(uuid); + if (correlateModel != null && correlateModel.isCorrelate() && correlateModel.getCorrelateType() == 1) { + new CoeProcessLevelCorrelateDao().updateExt1ToShow(uuid); + ResponseObject r1 = ResponseObject.newOkResponse().msg("成功"); + r1.put("sid", _uc.getSessionId()); + return r1.toString(); + } + } + List list = new CoeProcessLevelCorrelateDao().getModelListByPlVersionId(model.getVersionId()); + if (list == null || list.size() == 0) { + CoeProcessLevelCorrelateModel correlateModel = new CoeProcessLevelCorrelateModel(); + correlateModel.setPlId(uuid); + correlateModel.setWsId(model.getWsId()); + correlateModel.setPlVersionId(model.getVersionId()); + correlateModel.setCorrelateType(1); + correlateModel.setCorrelate(false); + new CoeProcessLevelCorrelateDao().insert(correlateModel); + } + ResponseObject r1 = ResponseObject.newOkResponse().msg("成功"); + r1.put("sid", _uc.getSessionId()); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_MAPPINGMANAGEMENT, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_MAPPINGMANAGEMENT_CREATE); + } + return r1.toString(); + } + + /** + * 获取bpmn版本list + * + * @param uuid + * @param appId + * @param processVersionId + * @return + */ + public String versionHtml(String uuid, String appId, String processVersionId) { + String imgData = "";// img + Map macroLibraries = new HashMap(); + StringBuffer listPane = new StringBuffer(); + String open = ""; + String liClick = ""; + String state = ""; + List listOfProcessVersion = ProcessDefCache.getInstance().getListOfProcessVersion(appId, processVersionId); + + Collections.sort(listOfProcessVersion, new ProcessDefinitionDESC()); + + /**已关联版本过滤start**/ + boolean flag = false; + CoeProcessLevelCorrelateModel correlateModel = CoeProcessLevelCorrelateCache.getCache().get(uuid); + Map processMap = new HashMap(); + if (correlateModel != null && correlateModel.isCorrelate()) { + flag = true; + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + List list = PALRepositoryCache.getByVersionId(model.getWsId(), model.getVersionId()); + for (PALRepositoryModel pModel : list) { + CoeProcessLevelCorrelateModel model2 = CoeProcessLevelCorrelateCache.getCache().get(pModel.getId()); + if (model2 != null && model2.isCorrelate()) { + processMap.put(model2.getPlAwsId(), pModel.getId()); + } + } + } + /****end*****/ + for (ProcessDefinition processDefinition : listOfProcessVersion) { + if (processDefinition == null) { + continue; + } + if (flag) { + if (!processMap.containsKey(processDefinition.getId())) { + continue; + } + uuid = processMap.get(processDefinition.getId()); + } + imgData = "data:image/png;base64," + BPMNIO.getBPMNImageThumbnail(appId, processDefinition.getId()); + switch (processDefinition.getVersionStatus()) { + case -1: + state = "停用"; + break; + case 0: + state = "设计"; + break; + case 1: + state = "运行"; + break; + default: + } + liClick = "onclick=\"openDesginer('" + uuid + "',0,'" + processDefinition.getName() + "','" + processDefinition.getId() + "')\" "; + open = ""; + listPane.append(ContentPane.getPane("" + state + "", "单击打开", liClick, imgData, processDefinition.getName() + " " + VersionUtil.getVersionStrV(processDefinition.getVersionNo()), "", "
      " + open + "
      ")); + } + + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("name", processVersionId); + macroLibraries.put("listPane", listPane); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.level.run.bpmn.htm", macroLibraries); + } + + /** + * 取消标记 bpn文件 + * + * @param uuid + * @return + */ + public String rmark(String uuid) { + // 是否已经与bpms关联,若关联,复制bpms流程到pal,若未关联,直接删除关联关系 + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + if (plModel == null) { + ResponseObject ro = ResponseObject.newErrResponse("取消失败,流程未找到
      uuid:" + uuid); + return ro.toString(); + } + CoeProcessLevelCorrelateDao dao = new CoeProcessLevelCorrelateDao(); + List list = dao.getCoePalDistributedListByVersionId(plModel.getVersionId()); + if (list != null && list.size() > 0) {// 已经分配,流程文件从BPMS复制到PAL + for (CoeProcessLevelCorrelateModel cModel : list) { + String processDefId = cModel.getPlAwsId(); + String plId = cModel.getPlId(); + copyProcessFromBPMS(plId, processDefId); + } + } + // 删除关联关系 + dao.deleteByPlVersionId(plModel.getVersionId()); + ResponseObject newOkResponse = ResponseObject.newOkResponse(); + newOkResponse.msg("取消成功"); + newOkResponse.put("newUUId", uuid); + newOkResponse.put("name", plModel.getName()); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_MAPPINGMANAGEMENT, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_MAPPINGMANAGEMENT_DELETE); + } + return newOkResponse.toString(); + } + + public String getTemplateByMethodId(String methodId) { + StringBuilder html = new StringBuilder(); + html.append("
      空模板
      "); + List list = PALMethodTemplateCache.getByMethodId(methodId); + if (list != null) { + for (PALMethodTemplateModel model : list) { + html.append("
      "); + html.append("
      " + model.getName() + "
      "); + } + } + + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("html", html.toString()); + return ro.toString(); + } + + /** + * 导入Org模型 + * + * @param wsId + * @param pId + * @param fileName + * @return + */ + public String importOrgModel(String wsId, String pId, String fileName, String teamId) { + ResponseObject ro = ResponseObject.newOkResponse(); + + CoeRepositoryImportUtil util = new CoeRepositoryImportUtil(); + try { + ro = util.importOrgModel(_uc, wsId, pId, fileName, teamId); + } catch (Exception e) { + e.printStackTrace(); + ro = ResponseObject.newErrResponse(e.getCause() == null ? e.getMessage() : e.getCause().getMessage()); + } + + return ro.toString(); + } + + /** + * 下载导入模板 + * + * @param category + * @return + * @author zhangming + */ + public String getImportTemplateUrl(String category) { + ResponseObject ro = ResponseObject.newOkResponse(); + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "template"); + DCContext dc = new DCContext(_uc, dcProfile, CoEConstant.APP_ID, CoeRepositoryImportUtil.IMPORT_TEMPLATE, category, CoeRepositoryImportUtil.ORG_TEMPLATE); + if (!new File(dc.getFilePath()).exists()) { + try { + UtilFile.copyFile(new File(CoeRepositoryImportUtil.ORG_TEMPLATE_PATH), new File(dc.getFilePath())); + } catch (Exception e) { + e.printStackTrace(); + throw new AWSException("下载模板错误"); + } + dc = new DCContext(_uc, dcProfile, CoEConstant.APP_ID, CoeRepositoryImportUtil.IMPORT_TEMPLATE, category, CoeRepositoryImportUtil.ORG_TEMPLATE); + } + String url = dc.getDownloadURL(); + ro.put("url", url); + return ro.toDataString(); + } + + public String getCoEPALRepositoryTreeDataByDept(String wsId, String categorys) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray treeData = new JSONArray(); + if (UtilString.isEmpty(wsId)) { + wsId = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_DEFAULT_WSID); + } + // 根节点 + String[] categoryArray = categorys.split(","); + for (String category : categoryArray) { + category = category.trim(); + JSONObject categoryRoot = new JSONObject(); + categoryRoot.put("id", category); + categoryRoot.put("name", I18nRes.findValue(CoEConstant.APP_ID, category)); + categoryRoot.put("open", false); + categoryRoot.put("nocheck", true); + treeData.add(categoryRoot); + + // 查询部门下的流程根节点 + List list = PALRepositoryQueryAPIManager.getInstance().getRootPALRepositoryModelsByDeptId(_uc.getUID(), wsId, null, category, true, false); + for (PALRepositoryModel process : list) { + JSONObject processObj = new JSONObject(); + processObj.put("id", process.getVersionId()); + processObj.put("pid", category); + processObj.put("name", process.getName()); + processObj.put("open", false); + processObj.put("wsId", process.getWsId()); + String deptId = process.getDutyDept(); + processObj.put("dutyDeptId", UtilString.isEmpty(deptId) ? "" : deptId); + String plDutyDeptName = deptId; + if (!UtilString.isEmpty(deptId)) { + if (SDK.getORGAPI().getDepartmentById(deptId) != null) { + plDutyDeptName = SDK.getORGAPI().getDepartmentById(deptId).getName(); + } + } + processObj.put("dutyDeptName", UtilString.isEmpty(deptId) ? "" : plDutyDeptName); + String plDutyPerson = process.getDutyUser(); + processObj.put("dutyPersonId", plDutyPerson); + processObj.put("dutyPersionName", UtilString.isEmpty(plDutyPerson) ? "" : SDK.getORGAPI().getUserAliasNames(plDutyPerson)); + processObj.put("palNum", process.getNo()); + processObj.put("versionId", process.getVersionId()); + processObj.put("isPublish", process.isPublish()); + processObj.put("isUse", process.isUse()); + processObj.put("plLevel", process.getLevel()); + treeData.add(processObj); + } + } + + ro.put("treeData", treeData); + return ro.toString(); + } + + public String getCoEPALRepositoryTreeData(String wsId, String categorys) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray treeData = new JSONArray(); + // 根节点 + String[] categoryArray = categorys.split(","); + for (String category : categoryArray) { + category = category.trim(); + JSONObject categoryRoot = new JSONObject(); + categoryRoot.put("id", category); + categoryRoot.put("name", I18nRes.findValue(CoEConstant.APP_ID, category)); + categoryRoot.put("open", false); + categoryRoot.put("nocheck", true); + categoryRoot.put("wsId", wsId); + treeData.add(categoryRoot); + } + + ro.put("treeData", treeData); + return ro.toString(); + } + + public String getPALLinkOfRepository(String wsId, String plId) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray fileLinks = new JSONArray();// 文件属性 + JSONArray customLinks = new JSONArray();// 自定义属性 + List> elements = OutputDataAPIManager.getFileElements(plId); + if (elements != null && elements.size() > 0) { + for (Map element : elements) { + if (element.containsKey("attributes")) { + JSONArray linksArray = JSONObject.parseObject(element.get("attributes").toString()).getJSONArray("linksArray"); + if (linksArray != null) { + for (int i = 0; i < linksArray.size(); i++) { + JSONObject link = linksArray.getJSONObject(i); + //将url中的sid替换为最新的sid值 + String oldUrl = link.getString("url"); + if (oldUrl.contains("sid=")) { + int tmpIndex = oldUrl.indexOf("sid="); + String newUrl = oldUrl.replace(oldUrl.substring(tmpIndex + 4, tmpIndex + 40), _uc.getSessionId()); + link.put("url", newUrl); + } + if ("file".equals(link.getString("type"))) {// 文件链接 + String id = link.getString("uuid"); + PALRepositoryModel model = PALRepositoryCache.getCache().get(id); + if (model != null) { + String processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(model.getId(), true); + String appId = ""; + if (!UtilString.isEmpty(processDefId)) { + appId = ProcessDefCache.getInstance().get(processDefId).getAppId(); + } + String photo = "../apps/" + CoEConstant.APP_ID + "/img/method/default.png"; + if (!"default".equals(model.getMethodId())) { + String p = model.getFilePath(); + if (!UtilString.isEmpty(processDefId)) { + photo = "data:image/png;base64," + BPMNIO.getBPMNImageThumbnail(appId, processDefId); + } else { + if (!UtilString.isEmpty(p)) { + UtilFile utilFile = new UtilFile(p + "/" + model.getId() + ".small.png"); + if (utilFile.exists()) { + byte[] base64Bytes = Base64.encode(utilFile.readBytes()); + try { + photo = "data:image/png;base64," + new String(base64Bytes, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + } + } else { + photo = "../apps/" + CoEConstant.APP_ID + "/img/method/default_folder.png"; + } + link.put("fileName", model.getName()); + link.put("photo", photo); + fileLinks.add(link); + } + } else {// 自定义链接 + customLinks.add(link); + } + } + } + } + } + } + ro.put("links", fileLinks); + ro.put("customLInks", customLinks); + return ro.toString(); + } + + /** + * 全量保存流程文件 + * + * @param uuid + * @param define + * @return + * @throws IOException + */ + public String saveProcessDefine(UserContext me, String uuid, String define, String teamId, String messages) throws IOException { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryModelImpl repositoryModel = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(uuid); + if (repositoryModel == null) { + throw new AWSException("保存失败,无该流程"); + } + //当前时间 + String now = new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date()); + //处理删除流程定义中的commonShapeConfig + JSONObject definition = JSONObject.parseObject(define); + if (StringUtils.isNotEmpty(definition.getString("commonShapeConfig"))) { + definition.remove("commonShapeConfig"); + } + define = definition.toString(); + + // 修改流程图 + if (repositoryModel.getMethodId().equals("process.bpmn2")) { + BPMNModel defineModel = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(uuid, 0); + if (defineModel == null) { + defineModel = CoeDesignerUtil.createBPMNModel(uuid, 0); + defineModel.setCreateHistory(false); + } + defineModel.setUpdateTime(now); + defineModel.setDefinition(define); + CoeDesignerAPIManager.getInstance().storeDefinitionOfBpmn(defineModel);// 保存文件 + } else { + BaseModel defineModel = CoeDesignerAPIManager.getInstance().getDefinition(uuid, 0); + if (defineModel == null) { + defineModel = CoeDesignerUtil.createModel(uuid, 0); + defineModel.setCreateHistory(false); + } + defineModel.setUpdateTime(now); + defineModel.setDefinition(define); + CoeDesignerAPIManager.getInstance().storeDefinition(defineModel);// 保存文件 + } + + // 关联/被关联图形的名称更新 + DesignerRelationShapeWeb relationShapeWeb = new DesignerRelationShapeWeb(_uc); + relationShapeWeb.updateDesignerRelationText(uuid, messages); + // 删除图形的附件删除 + UpfileWeb upfileWeb = new UpfileWeb(_uc); + upfileWeb.deleteShapeFile(uuid, messages); + + // 修改数据库中的修改日期 + Timestamp modifyDate = new Timestamp(System.currentTimeMillis()); + repositoryModel.setModifyDate(modifyDate); + repositoryModel.setModifyUser(_uc.getUID()); + // 判断是否记录模型图是否存在形状的标记 + String mark = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "DIAGRAM_CONTENT_EXIST_MARK"); + if (!"close".equals(mark)) { + List> shapeList = ShapeUtil.getShapeJson(define, uuid, repositoryModel.getName()); + String markVal = ""; + if (shapeList != null && shapeList.size() > 0) { + markVal = "1"; + } + if ("EXT1".equals(mark)) { + repositoryModel.setExt1(markVal); + } else if ("EXT2".equals(mark)) { + repositoryModel.setExt2(markVal); + } else if ("EXT3".equals(mark)) { + repositoryModel.setExt3(markVal); + } else if ("EXT4".equals(mark)) { + repositoryModel.setExt4(markVal); + } + } + PALRepository repositoryDao = new PALRepository(); + repositoryDao.update(repositoryModel); + + // 修改流程团队距上次修改日期超过一天,自动发布动态 + if (teamId != null && !"".equals(teamId)) { + AppAPI appAPI = SDK.getAppAPI(); + if (appAPI.isActive("com.actionsoft.apps.network")) { + String aslp = ""; + Map params = new HashMap(); + params.put("sid", _uc.getSessionId()); + params.put("sourceAppId", "com.actionsoft.apps.coe.teamwork"); + aslp = "aslp://com.actionsoft.apps.network/createStream"; + SimpleDateFormat m_format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + params.put("message", _uc.getUserName() + "在 " + m_format.format(modifyDate) + " 修改了流程 " + repositoryModel.getName()); + params.put("teamId", teamId); + ResponseObject responseObject = appAPI.callASLP(appAPI.getAppContext("com.actionsoft.apps.coe.teamwork"), aslp, params); + } + // } + } + //记入日志 + String isRecordLog = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "IS_RECORD_PROCESS_LOG"); + if(UtilString.isEmpty(isRecordLog)) { + isRecordLog = "1"; + } +// if("1".equals(isRecordLog)) { +// SDK.getLogAPI().audit(AuditConst.CHANNEL_CLIENT, AuditConst.CATALOG_PROCESS, me.getUID(), "保存", "PAL模型文件:"+repositoryModel.getName(), +// "模型文件:"+uuid+"@"+now.replaceAll("[:|\\s]", "")+"[库Id为"+repositoryModel.getWsId()+"]", me.getClientIP(), Level.INFO); +// } + // 记录操作行为日志 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_REPOSITORY_DESIGNER_UPDATE); + } + return ro.toString(); + } + + /** + * 导出流程 + * @param wsId + * @param uuid + * @return + * @throws Exception + */ + public String exportRepository(String wsId, String uuid) throws Exception { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + if (model == null) { + return ResponseObject.newErrResponse("流程模型不存在").toString(); + } + String versionId = model.getVersionId(); + String methodId = model.getMethodId(); + PALRepository dao = new PALRepository(); + List list = dao.getAllRepositoryByVersionId(versionId); + if (list == null || list.size() <= 0) { + return ResponseObject.newErrResponse("流程模型不存在").toString(); + } + List upfiles = new ArrayList(); + PALRepository repositoryDao = new PALRepository(); + PALRepositoryPropertyDao repositoryPropertyDao = new PALRepositoryPropertyDao(); + DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); + UpFileDao upfileDao = new UpFileDao(); + JSONArray palRepositoryJsonArray = new JSONArray(); + for (PALRepositoryModel repository : list) { + String repositoryId = repository.getId(); + String repositoryPlrId = repository.getPlRid(); + upfiles.addAll(upfileDao.searchByRepositoryId(repositoryId)); + + JSONObject object = new JSONObject(); + object.put("id", repository.getId()); + object.put("wsId", repository.getWsId()); + object.put("plRid", repository.getPlRid()); + object.put("No", repository.getNo()); + object.put("name", repository.getName()); + object.put("level", repository.getLevel()); + object.put("parentId", repository.getParentId()); + object.put("orderIndex", repository.getOrderIndex()); + object.put("isBottomLevel", repository.isBottomLevel()); + object.put("desc", repository.getDesc()); + object.put("ownerDept", repository.getOwnerDept()); + object.put("ownerUser", repository.getOwnerUser()); + object.put("milestone", repository.getMilestone()); + object.put("input", repository.getInput()); + object.put("output", repository.getOutput()); + object.put("execType", repository.getExecType()); + object.put("systemName", repository.getSystemName()); + object.put("AWSProcessId", repository.getAWSProcessId()); + object.put("diagramUrl", repository.getDiagramUrl()); + object.put("color", repository.getColor()); + object.put("methodCategory", repository.getMethodCategory()); + object.put("methodId", repository.getMethodId()); + object.put("version", repository.getVersion()); + object.put("versionId", repository.getVersionId()); + object.put("isUse", repository.isUse()); + object.put("isPublish", repository.isPublish()); + object.put("isSystemFile", repository.isSystemFile()); + object.put("filePath", repository.getFilePath()); + object.put("historyMaxVersion", repository.getHistoryMaxVersion()); + object.put("viewCount", repository.getViewCount()); + object.put("createUser", repository.getCreateUser()); + object.put("modifyUser", repository.getModifyUser()); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + object.put("createDate", repository.getCreateDate() == null ? "" : df.format(repository.getCreateDate())); + object.put("modifyDate", repository.getModifyDate() == null ? "" : df.format(repository.getModifyDate())); + object.put("plDutyDept", repository.getDutyDept()); + object.put("plDutyUser", repository.getDutyUser()); + + List shapeCopyList = repositoryDao.getShapeCopyModelsByRepositoryId(repositoryId); // APP_ACT_COE_PAL_SHAPE_COPY表中的数据 + object.put("shapeCopyList", shapeCopyList2JSONArray(shapeCopyList)); + List shapePasteList = repositoryDao.getShapePasteModelsByRepositoryId(repositoryId); // APP_ACT_COE_PAL_SHAPE_PASTE表中的数据 + object.put("shapePasteList", shapePasteList2JSONArray(shapePasteList)); + List shapeRelationList = relationDao.getModelListByFileId(repositoryId); // APP_ACT_COE_PAL_SHAPE_RLAT表中的数据 + object.put("shapeRelationList", shapeRelationList2JSONArray(shapeRelationList)); + List upfileList = upfileDao.searchByRepositoryId(repositoryId); // APP_ACT_COE_PAL_UPFILE表中的数据 + object.put("upfileList", upfileList2JSONArray(upfileList)); + List repositoryPropertyList = repositoryPropertyDao.getPropertysByPlid(repositoryId, null); // APP_ACT_COE_PAL_PROP 流程模型属性 + object.put("repositoryPropertyList", repositoryPropertyList2JSONArray(repositoryPropertyList)); + Map property = CoePropertyUtil.getPropertysValue(" PROPERTYKEY='" + repositoryId + "_attr' OR PROPERTYKEY='mark_" + repositoryPlrId + "' OR PROPERTYKEY='link_" + repositoryPlrId + "' OR PROPERTYKEY='link_app_" + repositoryPlrId + "' "); // APP_ACT_COE_PROP表中模型属性 + object.put("propertyList", property == null || property.size() == 0 ? new JSONObject() : property2JSONObject(property)); + + palRepositoryJsonArray.add(object); + } + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "backup"); + DCContext dc = new DCContext(_uc, dcProfile, CoEConstant.APP_ID, wsId, versionId); + UtilFile fileDir = new UtilFile(dc.getPath()); + UtilFile repositoryFile = new UtilFile(dc.getPath() + "/" + "repository.json"); + + try { + if (!fileDir.exists()) { + fileDir.mkdirs(); + } + if (!repositoryFile.exists()) { + repositoryFile.createNewFile(); + } + repositoryFile.writeUTF8(palRepositoryJsonArray.toString()); + + // 复制流程文件 + for (PALRepositoryModel repository : list) { + String id = repository.getId(); + String sourcePath = CoeWsConstant.getWorkspaceRootPath(wsId) + "/v1.0/" + methodId + "/" + id; + UtilFile repositoryFileSourceDir = new UtilFile(sourcePath); + UtilFile repositoryFileTargetDir = new UtilFile(dc.getPath() + "/" + wsId + "/v1.0/" + methodId + "/" + id); + if (repositoryFileSourceDir.exists() && repositoryFileSourceDir.isDirectory()) { + UtilFile.copyDir(repositoryFileSourceDir, repositoryFileTargetDir); + } + List upfilesArray = upfileDao.searchByRepositoryId(id); + for (int j = 0; j < upfilesArray.size(); j++) { + UpfileModel fileModel = upfilesArray.get(j); + String type = fileModel.getType(); + String pl_uuid = fileModel.getPl_uuid(); + String shape_uuid = fileModel.getShape_uuid(); + String fileName = fileModel.getFileName(); + String groupValue = ""; + String fileValue = ""; + if (type.equals("f")) { + groupValue = "file"; + fileValue = pl_uuid; + } else { + groupValue = pl_uuid; + fileValue = shape_uuid; + } + DCPluginProfile fileDcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + DCContext fileDc = new DCContext(_uc, fileDcProfile, CoEConstant.APP_ID, groupValue, fileValue); + UtilFile upfileDir = new UtilFile(fileDc.getPath()); + UtilFile targetDir = new UtilFile(dc.getPath() + "/upfile"); + if (!targetDir.exists()) { + targetDir.mkdir(); + } + UtilFile groupValueDir = new UtilFile(targetDir + "/" + groupValue); + if (!groupValueDir.exists()) { + groupValueDir.mkdir(); + } + UtilFile fileValueDir = new UtilFile(groupValueDir + "/" + fileValue); + if (!fileValueDir.exists()) { + fileValueDir.mkdir(); + } + if (upfileDir.exists() && upfileDir.isDirectory()) { + UtilFile sourceFile = new UtilFile(upfileDir + "/" + fileName); + UtilFile targetFile = new UtilFile(fileValueDir + "/" + fileName); + UtilFile.copyFile(sourceFile, targetFile); + } + } + } + // 复制出现复制图形文件 + String shapeMapSourcePath = CoeDesignerConstant.SHAPE_MAP_FILE; + UtilFile shapeMapSourceFile = new UtilFile(shapeMapSourcePath); + UtilFile shapeMapTargetFile = new UtilFile(dc.getPath() + "/" + "shape.map.tpl"); + if (shapeMapSourceFile.exists()) { + UtilFile.copyFile(shapeMapSourceFile, shapeMapTargetFile); + } + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + + DCContext dcContext = null; + dcContext = DCUtil.createTempFileContext(CoEConstant.APP_ID, "", "", "bak"); + dcContext.setFileName(versionId + ".bak"); + File ff = new File(dcContext.getFilePath()); + UtilFile repositoryDir = new UtilFile(dc.getPath()); + if (repositoryDir.exists() && repositoryDir.isDirectory()) { + UtilFile.zipCompress(repositoryDir.getPath(), ff); + } + dcContext.setSession(_uc); + String downloadUrl = dcContext.getDownloadURL(); + ro.put("downloadUrl", downloadUrl); + return ro.toString(); + } + + /** + * 导入流程 + * @param wsId + * @param uuid + * @return + * @throws Exception + */ + public String importRepository(String wsId, String uuid, String fileName) throws Exception { + ResponseObject ro = ResponseObject.newOkResponse(); + int level = 0; + String versionId = ""; + if (uuid.length() < 36) { + level = 0; + versionId = uuid; + } else { + PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); + if (model == null) { + return ResponseObject.newErrResponse("流程模型不存在").toString(); + } + level = model.getLevel(); + versionId = model.getVersionId(); + } + DCContext dcContext = null; + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + if (dcProfile != null) { + dcContext = new DCContext(super.getContext(), dcProfile, CoEConstant.APP_ID, "_import", "Normal", fileName); + } + if (dcContext == null) { + return ResponseObject.newErrResponse("导入流程文件未找到").toString(); + } + String path = dcContext.getPath(); + String filePath = dcContext.getFilePath(); + UtilFile file1 = new UtilFile(filePath); + if (file1.exists()) { + try { + UtilFile.zipExpand(file1, path); + } catch (Exception e) { + e.printStackTrace(); + ro = ResponseObject.newErrResponse("请上传正确的流程文件"); + return ro.toString(); + } + } + UtilFile repositoryFile = new UtilFile(path + "/repository.json"); + if (!repositoryFile.isFile() && !repositoryFile.exists()) { + ro = ResponseObject.newErrResponse("请上传正确的流程文件"); + return ro.toString(); + } + String oldVersionId = ""; + String oldPalRid = ""; + String oldWsId = ""; + String newVersionId = ""; + String newRid = UUIDGener.getUUID(); + JSONArray repositoryArray = JSONArray.parseArray(repositoryFile.readStrUTF8()); + List repositoryList = new ArrayList(); + List shapeRelationList = new ArrayList(); + List upfileList = new ArrayList(); + List repositoryPropertyList = new ArrayList(); + Map propertyMap = new HashMap(); + // fileArray 存储有关流程文件的repository model 信息 + JSONArray fileArray = new JSONArray(); + JSONArray upfileArray = new JSONArray(); + // 删除数据库中之前的数据,再插入新数据 + PALRepository repositoryDao = new PALRepository(); + DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); + UpFileDao upfileDao = new UpFileDao(); + PALRepositoryPropertyDao repositoryPropertyDao = new PALRepositoryPropertyDao(); + if (!repositoryArray.isEmpty() && repositoryArray.size() > 0) { + for (Object obj : repositoryArray) { + JSONObject object = (JSONObject) obj; + String oldId = object.getString("id"); + String methodId = object.getString("methodId"); + String newId = UUIDGener.getUUID(); + if (UtilString.isEmpty(oldVersionId)) { + oldVersionId = object.getString("versionId"); + } + if (UtilString.isEmpty(oldPalRid)) { + oldPalRid = object.getString("plRid"); + } + if (UtilString.isEmpty(oldWsId)) { + oldWsId = object.getString("wsId"); + } + if (UtilString.isEmpty(newVersionId)) { + newVersionId = newId; + } + + PALRepositoryModelImpl repository = new PALRepositoryModelImpl(); + repository.setId(newId); + repository.setWsId(wsId); + repository.setPlRid(newRid); + repository.setNo(object.getString("No")); + repository.setName(object.getString("name")); + repository.setLevel(level + 1); + repository.setParentId(versionId); + repository.setOrderIndex(validateJson(object.getInteger("orderIndex"))); + repository.setBottomLevel(validateJson(object.getInteger("isBottomLevel"))); + repository.setDesc(object.containsKey("desc") ? object.getString("desc") : ""); + repository.setOwnerDept(object.getString("ownerDept")); + repository.setOwnerUser(object.getString("ownerUser")); + repository.setMilestone(object.getString("milestone")); + repository.setInput(object.containsKey("input") ? object.getString("input") : ""); + repository.setOutput(object.containsKey("output") ? object.getString("output") : ""); + repository.setExecType(validateJson(object.getInteger("execType"))); + repository.setSystemName(object.getString("systemName")); + repository.setAWSProcessId(object.getString("AWSProcessId")); + repository.setDiagramUrl(object.getString("diagramUrl")); + repository.setColor(object.getString("color")); + repository.setMethodCategory(object.getString("methodCategory")); + repository.setMethodId(object.getString("methodId")); + repository.setVersion(validateJson(object.getInteger("version"))); + repository.setVersionId(newVersionId); + repository.setUse(object.getBoolean("isUse")); + repository.setPublish(object.getBoolean("isPublish")); + repository.setSystemFile(object.getBoolean("isSystemFile")); + if (object.containsKey("filePath") && (!object.getString("filePath").equals(""))) { + String palFilePath = object.getString("filePath"); + palFilePath = palFilePath.replace(oldWsId, wsId).replace(oldId, newId); + palFilePath = CoeProcessLevelUtil.replaceRepositoryFilePath(palFilePath); + JSONObject tempObj = new JSONObject(); + tempObj.put("repositoryId", object.getString("id")); + tempObj.put("methodId", object.getString("methodId")); + tempObj.put("newRepositoryId", newId); + fileArray.add(tempObj); + repository.setFilePath(palFilePath); + } else { + repository.setFilePath(""); + } + repository.setHistoryMaxVersion(object.getString("historyMaxVersion")); + repository.setViewCount(object.getLong("viewCount")); + repository.setCreateUser(object.getString("createUser")); + repository.setModifyUser(object.getString("modifyUser")); + repository.setCreateDate(object.getString("createDate").equals("") ? null : Timestamp.valueOf(object.getString("createDate"))); + repository.setModifyDate(object.getString("modifyDate").equals("") ? null : Timestamp.valueOf(object.getString("modifyDate"))); + repository.setDutyDept(object.getString("plDutyDept")); + repository.setDutyUser(object.getString("plDutyUser")); + + repositoryList.add(repository); + + shapeRelationList.addAll(JSONArray2ShapeRelationList(object.getJSONArray("shapeRelationList"), newId)); + upfileList.addAll(JSONArray2UpfileList(object.getJSONArray("upfileList"), newId)); + repositoryPropertyList.addAll(JSONArray2RepositoryPropertyList(object.getJSONArray("repositoryPropertyList"), newId)); + propertyMap.putAll(jsonObject2Property(object.getJSONObject("propertyList"), oldId, oldPalRid, newId, newRid)); + + JSONArray array = object.getJSONArray("upfileList"); + if (array != null && array.size() > 0) { + for (int d = 0; d < array.size(); d++) { + JSONObject upfileObject = array.getJSONObject(d); + JSONObject tempObject = new JSONObject(); + String fileId = upfileObject.getString("repositoryId"); + String fileType = upfileObject.getString("fileType"); + String fileName2 = upfileObject.getString("fileName"); + String shapeId = upfileObject.getString("shapeId"); + tempObject.put("fileId", fileId); + tempObject.put("fileType", fileType); + tempObject.put("fileName", fileName2); + tempObject.put("shapeId", shapeId); + tempObject.put("newFileId", newId); + upfileArray.add(tempObject); + } + } + + UtilFile repositoryFileSourceDir = new UtilFile(path + "/" + oldWsId + "/v1.0/" + methodId + "/" + oldId); + + String targetPath = CoeWsConstant.getWorkspaceRootPath(wsId) + "/v1.0/" + methodId + "/" + newId; + UtilFile repositoryFileTargetDir = new UtilFile(targetPath); + if (repositoryFileSourceDir.exists() && repositoryFileSourceDir.isDirectory()) { + String[] fileList = repositoryFileSourceDir.list(); // 目录下所有文件 + for (String name : fileList) { + // fileName是不是要保存的文件名,如果不是,则删除 + UtilFile sourceFile = new UtilFile(repositoryFileSourceDir + "/" + name); + String newFileName = name; + if (newFileName.indexOf(oldId) > -1) { + newFileName = newFileName.replace(oldId, newId); + } + UtilFile targetFile = new UtilFile(repositoryFileTargetDir + "/" + newFileName); + UtilFile.copyFile(sourceFile, targetFile); + } + } + } + } + if (repositoryList != null && repositoryList.size() > 0) { + repositoryDao.batchInsert(repositoryList); + } + if (shapeRelationList != null && shapeRelationList.size() > 0) { + relationDao.barchInsert(shapeRelationList); + } + if (upfileList != null && upfileList.size() > 0) { + upfileDao.batchInsert(upfileList); + } + if (repositoryPropertyList != null && repositoryPropertyList.size() > 0) { + repositoryPropertyDao.batchInsert(repositoryPropertyList); + } + if (propertyMap != null && propertyMap.size() > 0) { + CoePropertyUtil.batchInsert(propertyMap); + } + + // 拷贝附件文件到upfile 路径下面 + UtilFile repositoryUpFileSourceDir = new UtilFile(path + "/upfile"); + if (repositoryUpFileSourceDir.isDirectory() && repositoryUpFileSourceDir.exists()) { + for (int f = 0; f < upfileArray.size(); f++) { + JSONObject fileObject = upfileArray.getJSONObject(f); + String fileId = fileObject.getString("fileId"); + String fileType = fileObject.getString("fileType"); + String fileName2 = fileObject.getString("fileName"); + String shapeId = fileObject.getString("shapeId"); + String newFileId = fileObject.getString("newFileId"); + String groupValue = ""; + String fileValue = ""; + String oldGroupValue = ""; + String oldFileValue = ""; + if (fileType.equals("f")) { + oldGroupValue = "file"; + oldFileValue = fileId; + groupValue = "file"; + fileValue = newFileId; + } else { + oldGroupValue = fileId; + oldFileValue = shapeId; + groupValue = newFileId; + fileValue = shapeId; + } + DCPluginProfile fileDcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + DCContext fileDc = new DCContext(super.getContext(), fileDcProfile, CoEConstant.APP_ID, groupValue, fileValue); + UtilFile upfileDir = new UtilFile(fileDc.getPath()); + if (!upfileDir.exists()) { + upfileDir.mkdirs(); + } + if (upfileDir.exists() && upfileDir.isDirectory()) { + UtilFile sourceUpFile = new UtilFile(repositoryUpFileSourceDir + "/" + oldGroupValue + "/" + oldFileValue + "/" + fileName); + UtilFile targetUpFile = new UtilFile(upfileDir + "/" + fileName2); + try { + UtilFile.copyFile(sourceUpFile, targetUpFile); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + PALRepositoryCache.getCache().reload(); + PALRepositoryPropertyCache.getCache().reload(); + DesignerShapeRelationCache.getCache().reload(); + PALDesignerFileCache.getCache().reload(); + return ro.toString(); + } + + private JSONArray shapeCopyList2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (DesignerShapeCopyModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("shapeGroupId", model.getShapeGroupId()); + object.put("shapeName", model.getShapeName()); + object.put("shapeCategoryName", model.getShapecategoryName()); + object.put("repositoryId", model.getPalRepositoryId()); + object.put("isDelete", model.getIsDelete()); + object.put("shapeType", model.getShapeType()); + array.add(object); + } + } + + return array; + } + + private List JSONArray2ShapeCopyList(JSONArray array) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + DesignerShapeCopyModel model = new DesignerShapeCopyModel(); + model.setId(object.getString("id")); + model.setShapeGroupId(object.getString("shapeGroupId")); + model.setShapeName(object.getString("shapeName")); + model.setShapecategoryName(object.getString("shapeCategoryName")); + model.setPalRepositoryId(object.getString("repositoryId")); + model.setIsDelete(object.getString("isDelete")); + model.setShapeType(object.getString("shapeType")); + list.add(model); + } + } + return list; + } + + private JSONArray shapePasteList2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (DesignerShapePasteModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("shapeGroupId", model.getShapeGroupId()); + object.put("shapeName", model.getShapeName()); + object.put("shapeCategoryName", model.getShapecategoryName()); + object.put("repositoryId", model.getPalRepositoryId()); + object.put("isDelete", model.getIsDelete()); + object.put("shapeType", model.getShapeType()); + array.add(object); + } + } + + return array; + } + + private List JSONArray2ShapePasteList(JSONArray array) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + DesignerShapePasteModel model = new DesignerShapePasteModel(); + model.setId(object.getString("id")); + model.setShapeGroupId(object.getString("shapeGroupId")); + model.setShapeName(object.getString("shapeName")); + model.setShapecategoryName(object.getString("shapeCategoryName")); + model.setPalRepositoryId(object.getString("repositoryId")); + model.setIsDelete(object.getString("isDelete")); + model.setShapeType(object.getString("shapeType")); + list.add(model); + } + } + return list; + } + + private JSONArray shapeRelationList2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (DesignerShapeRelationModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("fileId", model.getFileId()); + object.put("shapeId", model.getShapeId()); + object.put("shapeText", model.getShapeText()); + object.put("relationFileId", model.getRelationFileId()); + object.put("relationShapeId", model.getRelationShapeId()); + object.put("relationShapeText", model.getRelationShapeText()); + object.put("attrId", model.getAttrId()); + array.add(object); + } + } + + return array; + } + + private List JSONArray2ShapeRelationList(JSONArray array, String newUUid) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + DesignerShapeRelationModel model = new DesignerShapeRelationModel(); + model.setId(UUIDGener.getUUID()); + model.setFileId(newUUid); + model.setShapeId(object.getString("shapeId")); + model.setShapeText(object.getString("shapeText")); + model.setRelationFileId(object.getString("relationFileId")); + model.setRelationShapeId(object.getString("relationShapeId")); + model.setRelationShapeText(object.getString("relationShapeText")); + model.setAttrId(object.getString("attrId")); + list.add(model); + } + } + return list; + } + + private JSONArray upfileList2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (UpfileModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getUuid()); + object.put("repositoryId", model.getPl_uuid()); + object.put("shapeId", model.getShape_uuid()); + object.put("fileName", model.getFileName()); + object.put("fileType", model.getType()); + Timestamp createTime = model.getCreateTime(); + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + object.put("createTime", sdf.format(createTime)); + object.put("createUser", model.getCreateUser()); + object.put("download", model.getDownload()); + object.put("securityLevel",model.getSecurityLevel()); + array.add(object); + } + } + + return array; + } + + private List JSONArray2UpfileList(JSONArray array, String newUUid) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + UpfileModel model = new UpfileModel(); + model.setUuid(UUIDGener.getUUID()); + model.setPl_uuid(newUUid); + model.setShape_uuid(object.getString("shapeId")); + model.setFileName(object.getString("fileName")); + model.setType(object.getString("fileType")); + model.setCreateTime(Timestamp.valueOf(object.getString("createTime"))); + model.setCreateUser(object.getString("createUser")); + model.setDownload(validateJson(object.getInteger("download"))); + model.setSecurityLevel(object.getInteger("securityLevel")); + list.add(model); + } + } + return list; + } + + private JSONArray repositoryPropertyList2JSONArray(List list) { + JSONArray array = new JSONArray(); + if (list != null && list.size() > 0) { + for (PALRepositoryPropertyModel model : list) { + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("plId", model.getPlId()); + object.put("propertyId", model.getPropertyId()); + object.put("propertyName", model.getPropertyName()); + object.put("propertyValue", model.getPropertyValue()); + object.put("orderIndex", model.getOrderIndex()); + array.add(object); + } + } + return array; + } + + private List JSONArray2RepositoryPropertyList(JSONArray array, String newUUid) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + PALRepositoryPropertyModel model = new PALRepositoryPropertyModel(); + model.setId(UUIDGener.getUUID()); + model.setPlId(newUUid); + model.setPropertyId(object.getString("propertyId")); + model.setPropertyName(object.getString("propertyName")); + model.setPropertyValue(object.getString("propertyValue")); + model.setOrderIndex(Integer.parseInt(object.getString("orderIndex"))); + list.add(model); + } + } + return list; + } + + private JSONObject property2JSONObject(Map map) { + JSONObject property = new JSONObject(); + if (map != null && map.size() > 0) { + for (Map.Entry entry : map.entrySet()) { + property.put(entry.getKey(), entry.getValue()); + } + } + return property; + } + + private Map jsonObject2Property(JSONObject property, String oldId, String oldRid, String newUUid, String newRid) { + Map map = new HashMap(); + Iterator it = property.keySet().iterator(); + while (it.hasNext()) { + String key = it.next(); + if (key.indexOf(oldId) > -1) { + key = key.replace(oldId, newUUid); + } + if (key.indexOf(oldRid) > -1) { + key = key.replace(oldRid, newRid); + } + map.put(key, property.getString(key)); + } + return map; + } + + private List handleConvertSpecialListOfObject(JSONArray specialPropertys, String oldId, String oldWsId, String newId, String newWsId) { + List list = Lists.newArrayList(); + if (specialPropertys != null && specialPropertys.size() > 0) { + for (int i = 0; i < specialPropertys.size(); i++) { + JSONObject object = specialPropertys.getJSONObject(i); + PALRepositorySpecialPropertyModel model = new PALRepositorySpecialPropertyModel(); + model.setId(UUIDGener.getUUID()); + model.setPlId(newId); + model.setWsId(newWsId); + model.setType(object.getString("type")); + model.setValueText(object.getString("valueText")); + list.add(model); + } + } + return list; + } + + /** + * 资产库bpmn2流程关联 + * @return + */ + public String correlateWorkspace() { + Map macroLibraries = new HashMap(); + macroLibraries.put("sid", _uc.getSessionId()); + macroLibraries.put("uid", super.getContext().getUID()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.ws.correlate.htm", macroLibraries); + } + + /** + * 资产库bpmn2流程关联 + * 获取初始数据 + * @return + */ + public String getCoePALWSCorrelateData() { + ResponseObject ro = ResponseObject.newOkResponse(); + // 获取已关联应用树结构 + ro.put("awsCorrelated", JSONArray.parseArray(getAwsCorrelateTree(CoEConstant.APP_ID, "", "BMRoot", "", "correlated"))); + // 获取未关联应用树结构 + ro.put("awsNoCorrelate", JSONArray.parseArray(getAwsCorrelateTree(CoEConstant.APP_ID, "", "BMRoot", "", "noCorrelate"))); + // 获取流程资产列表 + List records = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getCoeWorkSpaceModelRecodesNoPage(); // 所有记录条数 + JSONArray jsArray = new JSONArray(); + String userId = super.getContext().getUserModel().getUID(); + boolean flag = false; + for (int i = 0; i < records.size(); i++) { + JSONObject object = new JSONObject(); + CoeWorkSpaceModel wsModel = records.get(i); + if (wsModel.getWsAdmin() != null && wsModel.getWsAdmin().contains(userId) || (wsModel.getWsDm() != null && wsModel.getWsDm().contains(userId)) || ("admin".equals(userId))) { + if (wsModel.getWsState() == 0) {// 启用资产库 + object.put("wsId", wsModel.getUUId()); + object.put("wsName", wsModel.getWsName()); + if (!flag) { + flag = true; + object.put("checked", flag); + } else { + object.put("checked", false); + } + jsArray.add(object); + } + } + } + ro.put("wsData", jsArray); + // 获取第一个流程资产树结构 + for (int i = 0; i < jsArray.size(); i++) { + JSONObject object = JSONObject.parseObject(jsArray.getString(i)); + if (object.getBoolean("checked")) { + ro.put("wsTreeData", PALRepositoryQueryAPIManager.getInstance().getPalRepositoryTreeRootData(_uc, JSONObject.parseObject(jsArray.getString(0)).getString("wsId"), "process", "isUsed")); + break; + } + } + return ro.toString(); + } + + /** + * 判断是否具有关联或推送关系 + * @param requestType 请求类型: BMRoot BMApps BMPDGroup + * @param type 类型 未关联 noCorrelate 已关联 correlated + * @param param + * @param param2 + * @return + */ + private boolean isCorrelateAndMark(String requestType, String type, String param, String param2) { + // 获取关联数据 + Set corr1 = new HashSet();// BPMS关联到PAL + Set corr2 = new HashSet();// PAL推送到BPMS + List list = new CoeProcessLevelCorrelateDao().getCorrelateList(); + if (list != null && list.size() > 0) { + for (CoeProcessLevelCorrelateModel model : list) { + if (model.isCorrelate()) { + if (model.getCorrelateType() == 1) {// PAL->BPMS + corr2.add(model.getPlAwsId()); + } else {// BPMS->PAL + corr1.add(model.getPlAwsId()); + } + } + } + + if ("BMRoot".equals(requestType)) { + // 获取所有流程 + Map processMap = ProcessDefCache.getInstance().getListByApp(param); + Set processDefIds = processMap.keySet(); + List processList = new ArrayList<>(); + for (String processDefId : processDefIds) { + processList.add(processMap.get(processDefId)); + } + if ("noCorrelate".equals(type)) { + for (String processDefId : processDefIds) { + if(!corr1.contains(processDefId) && !corr2.contains(processDefId)) return true; + } + } + if ("correlated".equals(type)) { + for (String processDefId : processDefIds) { + if(corr1.contains(processDefId) || corr2.contains(processDefId)) return true; + } + } + } else if ("BMApps".equals(requestType)) { + // 获取所有流程 + List processList = ProcessDefCache.getInstance().getListOfProcessGroup(param, param2); + if ("noCorrelate".equals(type)) { + for (ProcessDefinition processDef : processList) { + if(!corr1.contains(processDef.getId()) && !corr2.contains(processDef.getId())) return true; + } + } + if ("correlated".equals(type)) { + for (ProcessDefinition processDef : processList) { + if(corr1.contains(processDef.getId()) || corr2.contains(processDef.getId())) return true; + } + } + } else if ("BMPDGroup".equals(requestType)) { + ProcessDefinition processDef = ProcessDefCache.getInstance().get(param2); + if ("noCorrelate".equals(type)) { + if(!corr1.contains(processDef.getId()) && !corr2.contains(processDef.getId())) return true; + } + if ("correlated".equals(type)) { + if(corr1.contains(processDef.getId()) || corr2.contains(processDef.getId())) return true; + } + } + } else { + if ("noCorrelate".equals(type)) { + return true; + } + if ("correlated".equals(type)) { + return false; + } + } + return false; + } + + /** + * 获取关联/未关联的AWS应用流程树 + * @param appId + * @param pid + * @param requestType + * @param param + * @param type 区分关联/未关联 + * @return + */ + public String getAwsCorrelateTree(String appId, String pid, String requestType, String param, String type) { + JSONArray jsArray = new JSONArray(); + String _me = _uc.getUID(); + if ("BMRoot".equals(requestType)) { + boolean flag = AppPlatformConfig.hasValidTeam(_me); + if (flag) {// 存在有效的小组 + List apps = new ArrayList<>(); + apps = ModelRepositoryWeb.getVisibleInstalledDevAndManagementApps(_me); + AppsAPIManager.getInstance().sortAppByName(apps); + for(AppContext app : apps) { + if (isAppVisible(app, _me) && isCorrelateAndMark(requestType, type, app.getId(), "")) { + // admin以外的管理员,如果app下没有自己有权限的模型,不显示app + boolean superMaster = GradeSecurityUtil.isSuperMaster(_me); + if (HighSecurity.isON()) { + superMaster = HighSecurity.is3PSysAdmin(_me); + } + if (!superMaster && !hasManageModel(app.getId(), _me)) { + continue; + } + jsArray.add(getAppJson(type, app)); + } + } + } + } else if ("BMApps".equals(requestType)) { + String[] groups = ProcessDefCache.getInstance().getGroupIds(appId); + if (groups != null) { + List processAllList = new ArrayList(); + for (int i = 0; i < groups.length; i++) { + String groupId = groups[i]; + if (groupId != null) { + List processList = ProcessDefCache.getInstance().getListOfProcessGroup(appId, groupId); + if (processList.size() == 0) { + continue; + } + processAllList.addAll(processList); + } + } + ProcessDefCache.getInstance().sortByName(processAllList); + Set groupIds = new HashSet<>(); + for (ProcessDefinition processDef : processAllList) { + if (processDef != null) { + if (processDef.getEngineType() == ProcessDefinitionConst.ENGINE_CONTROL_DW) { + continue; + } + // 判断流程管理权限 + if (processDef != null && ProcessDefUtil.isProcessDefAdminitrator(processDef, _me)) { + if (!groupIds.contains(processDef.getProcessGroupId()) && isCorrelateAndMark(requestType, type, appId, processDef.getProcessGroupId())) { + jsArray.add(getPDGroupJson(type, appId, processDef, pid)); + groupIds.add(processDef.getProcessGroupId()); + } + } + } + } + } + } else if ("BMPDGroup".equals(requestType)) { + JSONObject jsonObject = JSONObject.parseObject(param); + String categoryName = jsonObject.getString("categoryName"); + String groupId = jsonObject.getString("groupId"); + List processList = ProcessDefCache.getInstance().getListOfProcessGroup(appId, groupId); + ProcessDefCache.getInstance().sortByCreateTimeDesc(processList); + + for (ProcessDefinition processDef : processList) { + if (processDef == null) { + continue; + } + if (!processDef.getCategoryName().equals(categoryName)) + continue; + // 判断流程管理权限 + if (processDef != null && !ProcessDefUtil.isProcessDefAdminitrator(processDef, super.getContext().getUID())) { + continue; + } + if (processDef.getEngineType() == ProcessDefinitionConst.ENGINE_CONTROL_DW) { + continue; + } + // 过滤关联/推送到AWS的流程 + if (isCorrelateAndMark(requestType, type, appId, processDef.getId())) { + jsArray.add(getPDJson(type, appId, processDef, groupId, pid)); + } + } + } + return jsArray.toString(); + } + + /** + * 获取流程加载的JSON串 + * + * @param appId + * @param groupId 流程组ID + * @return 流程加载的JSON串 + */ + private JSONObject getPDJson(String prefix, String appId, ProcessDefinition processDef, String groupId, String pid) { + JSONObject object = new JSONObject(); + object.put("id", prefix + "_" + processDef.getId() + "_" + "BMPD"); + String processNameStyle = ProcessDefVersionUtil.getProcessNameOfVersionStyle(processDef); + //object.put("name", processNameStyle); + //object.put("title", processNameStyle.replace("color:#36C", "color:white")); + object.put("name", ProcessDefVersionUtil.getProcessNameOfVersion(processDef)); + object.put("title", ProcessDefVersionUtil.getProcessNameOfVersion(processDef)); + object.put("realName", processDef.getName()); + object.put("processName", ProcessDefVersionUtil.getProcessNameOfVersion(processDef)); + object.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/process.png"); + object.put("categoryName", processDef.getCategoryName()); + object.put("groupId", processDef.getProcessGroupId()); + object.put("groupName", processDef.getProcessGroupName()); + object.put("type", "BMPD"); + object.put("processDefId", processDef.getId()); + object.put("versionId", processDef.getVersionId()); + object.put("pid", pid); + object.put("menu", false); + object.put("appId", appId); + object.put("appName", AppsAPIManager.getInstance().getAppContext(appId).getName()); + if ("correlated".equals(prefix)) { + object.put("nocheck", true); + } + return object; + } + + /** + * 获取流程组加载的JSON串 + * + * @param appId + * @param pid 所属流程模型树节点id + * @return 流程组加载的JSON + */ + private JSONObject getPDGroupJson(String prefix, String appId, ProcessDefinition processDef, String pid) { + JSONObject object = new JSONObject(); + object.put("id", prefix + "_" + processDef.getProcessGroupId() + "_" + "BMPDGroup"); + object.put("name", processDef.getProcessGroupName()); + object.put("pid", pid); + object.put("groupId", processDef.getProcessGroupId()); + object.put("groupName", processDef.getProcessGroupName()); + object.put("type", "BMPDGroup"); + object.put("categoryName", processDef.getCategoryName()); + object.put("open", false); + object.put("appId", appId); + object.put("menu", false); + object.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/method/process.png"); + if ("noCorrelate".equals(prefix)) { + object.put("nocheck", false); + } else { + object.put("nocheck", true); + } + return object; + } + + /** + * 获取app列表的JSON串 + * @param prefix + * @param app + * @return + */ + private JSONObject getAppJson(String prefix, AppContext app) { + JSONObject object = new JSONObject(); + object.put("id", prefix + "_" + app.getId().replace(".", "_") + "_BMApps"); + object.put("name", app.getName()); + object.put("type", "BMApps"); + object.put("open", false); + object.put("appId", app.getId()); + object.put("menu", false); + File icon = new File(app.getIcon16FilePath()); + if (icon.exists()) { + object.put("icon", AppsAPIManager.getInstance().getIcon16URL(app.getId(), getContext())); + } else { + object.put("iconCls", "treeBMApps"); + } + object.put("nocheck", true); + return object; + } + + /** + * 判断当前app下是否具备有权限的模型 + * + * @param appId + * @param uid + * @return + */ + private boolean hasManageModel(String appId, String uid) { + Collection cs = getCategorysByApp(appId); + for (String c : cs) { + if (isAppCategoryVisible(appId, c, uid)) { + return true; + } + } + return false; + } + + // 探测如果有流程权限时才显示该分类 + private boolean isAppCategoryVisible(String appId, String category, String uid) { + Map processList = ProcessDefCache.getInstance().getListByApp(appId); + for (ProcessDefinition model : processList.values()) { + if (category.equals(model.getCategoryName()) && ProcessDefUtil.isProcessDefAdminitrator(model, uid)) { + return true; + } + } + return false; + } + + /** + * 根据appid获取下面的分类 + * @param appId + * @return 流程分类 + */ + private Collection getCategorysByApp(String appId) { + Set l = new HashSet(); + Map ps = ProcessDefCache.getInstance().getListByApp(appId); + String uid = getContext().getUID(); + for (ProcessDefinition model : ps.values()) { + if (ProcessDefUtil.isProcessDefAdminitrator(model, uid)) { + l.add(model.getCategoryName()); + } + } + ArrayList categoryList = new ArrayList(l); + Collections.sort(categoryList, Collator.getInstance(Locale.CHINA)); + return categoryList; + } + + private boolean isAppVisible(AppContext appContext, String uid) { + if (AppsConst.RUNTIME_STATE_OFFLINE.equals(appContext.getRuntimeState())) { + return false; + } + if (!appContext.isCategoryVisible()) { + return false; + } + String appId = appContext.getId(); + Map processList = ProcessDefCache.getInstance().getListByApp(appId); + for (ProcessDefinition model : processList.values()) { + if (ProcessDefUtil.isProcessDefAdminitrator(model, uid)) { + return true; + } + } + return false; + } + + /** + * 新建关联时快速搜索 + * @param query 关键词 + * @param type 类型 + * @param limit 每页数据条数 + * @param currentPage 当前页 + * @return + */ + public String getCorrelateSearchDataToJson(String query, String type, int limit, int currentPage) { + int start = (currentPage - 1) * limit; + query = query.toUpperCase(); + JSONObject result = new JSONObject(); + JSONArray allData = new JSONArray(); + JSONArray data = new JSONArray(); + String apps = getAwsCorrelateTree(CoEConstant.APP_ID, "", "BMRoot", "", type); + JSONArray jsonApps = JSONArray.parseArray(apps); + for(int i = 0; i < jsonApps.size(); i++) { + JSONObject app = JSONObject.parseObject(jsonApps.getString(i)); + String groups = getAwsCorrelateTree(app.getString("appId"), app.getString("id"), app.getString("type"), "", type); + JSONArray jsonGroups = JSONArray.parseArray(groups); + for (int j = 0; j < jsonGroups.size(); j++) { + JSONObject group = (JSONObject) jsonGroups.get(j); + JSONObject param = new JSONObject(); + param.put("groupId", group.getString("groupId")); + param.put("categoryName", group.getString("categoryName")); + String processDefs = getAwsCorrelateTree(group.getString("appId"), group.getString("id"), group.getString("type"), param.toString(), type); + JSONArray jArray = JSONArray.parseArray(processDefs); + for (Object object : jArray) { + allData.add(object); + } + } + } + if (allData.size() > 0) { + for (int i = 0; i < allData.size(); i++) { + JSONObject object = (JSONObject) allData.get(i); + if (object.getString("realName").toUpperCase().indexOf(query) > -1 || object.getString("groupName").toUpperCase().indexOf(query) > -1 || object.getString("appName").toUpperCase().indexOf(query) > -1) { + JSONObject newObject = new JSONObject(); + newObject.put("processDefName", "" + setHigheLight(object.getString("name"), query)); + newObject.put("processDefId", object.getString("processDefId")); + newObject.put("versionId", object.getString("versionId")); + newObject.put("groupId", object.getString("groupId")); + newObject.put("groupName", "" + setHigheLight(object.getString("groupName"), query)); + newObject.put("processDefId", object.getString("processDefId")); + newObject.put("appName", setHigheLight(object.getString("appName"), query)); + newObject.put("appId", object.getString("appId").replace(".", "_")); + data.add(newObject); + } + } + } + if (data.size() == 0) { + JSONObject json = new JSONObject(); + JSONArray data2 = new JSONArray(); + JSONObject recode = new JSONObject(); + recode.put("processDefName", ""); + recode.put("processDefId", ""); + recode.put("versionId", ""); + recode.put("groupId", ""); + recode.put("groupName", " 没有搜索到信息"); + recode.put("processDefId", ""); + data2.add(recode); + json.put("totalRecords", "0"); + json.put("curPage", "1"); + json.put("data", data2); + return json.toString(); + } + JSONArray pageData = new JSONArray(); + for (int i = start; i < (start + limit); i++) { + if (i > (data.size() - 1)) + break; + pageData.add(data.get(i)); + } + result.put("totalRecords", data.size()); + result.put("curPage", currentPage); + result.put("data", pageData); + return result.toString(); + } + + /** + * 设置字体高亮 + * @param str + * @param query + * @return + */ + private String setHigheLight(String str, String query) { + int index = str.toUpperCase().indexOf(query); + int len = query.length(); + if (index > -1) { + str = str.substring(0, index) + "" + str.substring(index, len + index) + "" + str.substring(len + index, str.length()); + } + return str; + } + + /** + * PAL关联AWS流程保存 + * @param wsId + * @param currentCorrelation + * @author SUNLH + * @return + */ + public String coePALProcessLevelCorrelateCreateSave(String wsId, String currentCorrelation) { + CoeProcessLevelCorrelateDao correlateDao = new CoeProcessLevelCorrelateDao(); + Set set = new HashSet<>(); + List levelList = new ArrayList<>(); + JSONArray currentCorrelationArr = JSONArray.parseArray(currentCorrelation); + Map idMap = new HashMap<>(); + for (int i = 0; i < currentCorrelationArr.size(); i++) { + idMap.put(currentCorrelationArr.getJSONObject(i).getString("id"), UUIDGener.getUUID()); + set.add(validateJson(currentCorrelationArr.getJSONObject(i).getInteger("plLevel"))); + } + levelList.addAll(set); + Collections.sort(levelList); + + for (int i = 0; i < levelList.size(); i++) { + for (int j = 0; j < currentCorrelationArr.size(); j++) { + JSONObject jsObject = JSONObject.parseObject(currentCorrelationArr.getString(j)); + if (levelList.get(i) == validateJson(jsObject.getInteger("plLevel"))) { + if ("BMPDGroup".equals(jsObject.getString("type"))) { // 流程组按照文件保存 + String plParentId = jsObject.getString("pid"); + String methodId = jsObject.getString("category"); + String parentType = jsObject.getString("parentType"); + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + PALRepositoryModel parentModel; + if ("ws".equals(parentType)) { // 父节点是资产库 + parentModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(plParentId); + } else { + plParentId = idMap.get(jsObject.getString("pid")); + parentModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(plParentId); + } + String uid = super.getContext().getUID(); + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + PALRepositoryModelImpl model = new PALRepositoryModelImpl(); + model.setCreateUser(uid); + model.setCreateDate(nowTime); + model.setParentId(parentModel == null ? plParentId : parentModel.getVersionId()); + model.setId(idMap.get(jsObject.getString("id"))); + model.setVersionId(idMap.get(jsObject.getString("id"))); + model.setWsId(wsId); + model.setNo(""); + model.setName(jsObject.getString("groupName").trim().replaceAll("\n", "")); + model.setAWSProcessId(""); + model.setColor("#FFF"); + model.setDesc(""); + model.setDiagramUrl(""); + model.setExecType(0); + model.setBottomLevel(0); + model.setLevel(validateJson(jsObject.getInteger("plLevel"))); + model.setMilestone("0"); + model.setOwnerDept(""); + model.setOwnerUser(""); + model.setOutput(""); + model.setInput(""); + model.setPlSecurityR(""); + model.setPlSecurityW(""); + model.setModifyUser(uid); + model.setModifyDate(nowTime); + model.setDutyDept(""); + model.setDutyUser(""); + model.setSystemName("-1"); + model.setMethodId(methodId); + if (methodId.indexOf(".") > 0) { + model.setMethodCategory(methodId.substring(0, methodId.indexOf("."))); + } else { + model.setMethodCategory(methodId); + if (parentModel != null) { + model.setMethodCategory(parentModel.getMethodCategory()); + } + + } + if ("default".equals(methodId)) { + model.setMethodCategory("process"); + } + try { + model.setVersion(1); + model.setUse(true); + // model.setOrderIndex(getSumRecodes() + 1); + int orderIndex = coeProcessLevel.getChildrenMaxOrderIndexByPidAndWsId(model.getParentId(), model.getWsId()); + model.setOrderIndex(orderIndex + 1); + model.setHistoryMaxVersion("0"); + // 权限和父级同步 + PALRepositoryModel cplm = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(plParentId); + + if (cplm != null) { + model.setLevel(cplm.getLevel() + 1);// 比父级多一级层级 + if (model.getPlSecurityW().equals("")) { + model.setPlSecurityW(cplm.getPlSecurityW()); + } + if (model.getPlSecurityR().equals("")) { + model.setPlSecurityR(cplm.getPlSecurityR()); + } + } else { + model.setLevel(1); + } + // 创建 + try { + coeProcessLevel.insert(model); + } catch (Exception e) { + e.printStackTrace(); + } + CoeProcessLevelNoCache.getInstance().reloadInBackground(wsId); // 重新装载编号 + PALRepositoryCache.getCache().put(model.getId(), model); // 加载到缓存中 + } catch (Exception e) { + e.printStackTrace(); + } + } + if ("BMPD".equals(jsObject.getString("type"))) { // 流程保存 + String plParentId = jsObject.getString("pid"); + String methodId = jsObject.getString("category"); + String parentType = jsObject.getString("parentType"); + PALRepositoryModel parentModel; + if ("ws".equals(parentType)) { // 父节点是资产库 + parentModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(plParentId); + } else { + plParentId = idMap.get(jsObject.getString("pid")); + parentModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(plParentId); + } + plParentId = plParentId.length() == 36 ? parentModel.getVersionId() : plParentId; + // 该流程是否已有兄弟流程(同一个流程,不同的版本)进行了当前节点的父节点下关联,关联过,取出数据,没有关联过,新建数据 + String versionId = ""; + String plRid = ""; + boolean isUse = true; + List list = Cache.iteratorToList(PALRepositoryCache.getByPid(wsId, plParentId)); + for (PALRepositoryModel model : list) { + if (correlateDao.getCorrelateCountByIdAndAwsVersionid(model.getId(), jsObject.getString("versionId")) > 0) { + versionId = model.getVersionId(); + plRid = model.getPlRid(); + isUse = false; + break; + } + } + if ("".equals(versionId)) { + versionId = UUIDGener.getUUID(); + plRid = UUIDGener.getUUID(); + isUse = true; + } + ProcessDefinition processDef = ProcessDefCache.getInstance().getModel(jsObject.getString("processDefId")); + String newProcessDefId = idMap.get(jsObject.getString("id")); + if (isUse) { + newProcessDefId = versionId; + } + // 创建关联关系数据 + CoeProcessLevelCorrelateModel cModel = new CoeProcessLevelCorrelateModel(); + cModel.setWsId(wsId); + cModel.setPlId(newProcessDefId); + cModel.setPlAwsId(processDef.getId()); + cModel.setPlAwsVersionid(processDef.getVersionId()); + cModel.setPlVersionId(versionId); + cModel.setCorrelateType(0); + cModel.setCorrelate(true); + try { + correlateDao.insert(cModel); + } catch (Exception e) { + e.printStackTrace(); + } + // 创建相关pal数据 + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + PALRepositoryModelImpl model = new PALRepositoryModelImpl(); + model.setWsId(wsId); + model.setLevel((Integer) (parentModel == null ? 1 : (parentModel.getLevel() + 1))); + String plNo = ""; + if (plParentId.length() == 36) { + if (parentModel != null) { + if (!UtilString.isEmpty(plNo)) { + if (list.size() < 9) { + plNo = parentModel.getNo() + "0" + (list.size() + 1); + } else { + plNo = parentModel.getNo() + (list.size() + 1); + } + } + List parentModelList = PALRepositoryCache.getByVersionId(wsId, parentModel.getVersionId()); + for (PALRepositoryModel parentVerModel : parentModelList) { + PALRepositoryModelImpl parentModelImpl = (PALRepositoryModelImpl) PALRepositoryCache.getCache().get(parentVerModel.getId()); + parentModelImpl.setBottomLevel(0); + coeProcessLevel.update(parentModelImpl); + } + } + } + model.setId(newProcessDefId); + model.setVersionId(versionId); + model.setVersion(processDef.getVersionNo()); + model.setHistoryMaxVersion(String.valueOf(processDef.getHistoryMaxVersion())); + model.setPlRid(plRid); + model.setUse(isUse); + model.setParentId(plParentId); + model.setNo(plNo); + model.setMethodId(methodId); + model.setMethodCategory(methodId.substring(0, methodId.indexOf("."))); + model.setMilestone("1"); + int orderIndex = coeProcessLevel.getChildrenMaxOrderIndexByPidAndWsId(plParentId, model.getWsId()); + model.setOrderIndex(orderIndex + 1); + model.setName(processDef.getName()); + String uid = super.getContext().getUID(); + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + model.setCreateUser(uid); + model.setCreateDate(nowTime); + model.setModifyUser(uid); + model.setModifyDate(nowTime); + model.setBottomLevel(1); + // 创建 + try { + coeProcessLevel.insert(model); + PALRepositoryModel plModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(model.getId()); + // 设置文件路径,无物理文件 + String path = PLRFilePath.getInstance().create(AppsAPIManager.getInstance().getAppContext(CoEConstant.APP_ID), model.getId()); + path = path.replace(model.getVersionId(), model.getId()); + ((PALRepositoryModelImpl) plModel).setFilePath(path); + CoeProcessLevelDaoFacotory.createCoeProcessLevel().update(plModel); + + CoeProcessLevelNoCache.getInstance().reloadInBackground(model.getWsId()); // 重新装载编号 + // 流程发布用户组权限和父级同步 + if (parentModel != null) { + PublishUserGroupPerm dao = new PublishUserGroupPerm(); + List list2 = dao.getAllPermsByResourceId(parentModel.getVersionId()); + for (PublishUserGroupPermModel parentPModel : list2) { + PublishUserGroupPermModel newPModel = new PublishUserGroupPermModel(); + newPModel.setId(UUIDGener.getUUID()); + newPModel.setGroupId(parentPModel.getGroupId()); + newPModel.setPermType(parentPModel.getPermType()); + newPModel.setResourceId(model.getId()); + dao.insert(newPModel); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } + // 关联关系 + ResponseObject ro = ResponseObject.newOkResponse(); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_MAPPINGMANAGEMENT, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_MAPPINGMANAGEMENT_CREATE); + } + return ro.toString(); + } + + /** + * 取消AWS流程关联 + * @param uuid 流程ID + * @return + */ + public String COEPALPLCancelCorrelate(String uuid) { + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + if (plModel == null) { + throw new AWSException("流程未找到
      uuid:" + uuid); + } + CoeProcessLevelCorrelateDao dao = new CoeProcessLevelCorrelateDao(); + List correlateModels = dao.getModelListByPlVersionId(plModel.getVersionId()); + if (correlateModels != null && correlateModels.size() > 0) { + for (CoeProcessLevelCorrelateModel cModel : correlateModels) { + String processDefId = cModel.getPlAwsId(); + String plId = cModel.getPlId(); + copyProcessFromBPMS(plId, processDefId); + } + // 删除关联关系 + dao.deleteByPlVersionId(plModel.getVersionId()); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("name", plModel.getName()); + ro.put("newUUId", plModel.getName()); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_MAPPINGMANAGEMENT, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_MAPPINGMANAGEMENT_DELETE); + } + return ro.toString(); + } + + /** + * 从BPMScopy流程到PAL + * @param plId PAL id + * @param processDefId BPMS id + */ + private void copyProcessFromBPMS (String plId, String processDefId) { + PALRepositoryModel handleModel = PALRepositoryCache.getCache().get(plId); + ProcessDefinition processDefinition = ProcessDefCache.getInstance().get(processDefId); + if (processDefinition != null && handleModel != null) { + CoeDesginerAdapter coeDesginerAdapter = new CoeDesginerAdapter(getContext()); + // 获得definition + JSONObject definition = coeDesginerAdapter.readDefinition(processDefinition.getAppId(), processDefinition.getId()); + String define = definition.toString(); + define = define.replace("bpmn", "process_bpmn2"); + + BPMNModel defineModel = CoeDesignerAPIManager.getInstance().getDefinitionOfBpmn(plId, 0); + if (defineModel == null) { + defineModel = CoeDesignerUtil.createBPMNModel(plId, 0); + defineModel.setCreateHistory(false); + } + defineModel.setUpdateTime(new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date())); + defineModel.setDefinition(define); + CoeDesignerAPIManager.getInstance().storeDefinitionOfBpmn(defineModel);// dao操作 + } + } + + /** + * 特殊文件属性(列表形式属性)保存 + * @param wsId + * @param id + * @param plId + * @param type + * @param opType + * @param value + * @return + */ + public String SpecialAttributeSave(String wsId, String id, String plId, String type, String opType, String value) { + PALRepositoryModel pModel = PALRepositoryCache.getCache().get(plId); + if(pModel == null) { + return ResponseObject.newErrResponse("保存失败").toString(); + } + PALRepositorySpecialPropertyDao dao = new PALRepositorySpecialPropertyDao(); + PALRepositorySpecialPropertyModel model = new PALRepositorySpecialPropertyModel(); + model.setPlId(plId); + model.setWsId(wsId); + model.setValueText(value); + model.setType(type); + int result = -1; + if("insert".equals(opType)) {// 新增 + model.setId(UUIDGener.getUUID()); + result = dao.insert(model); + } else {// 更新 + model.setId(id); + result = dao.update(model); + } + if (result == -1) { + return ResponseObject.newErrResponse("保存失败").toString(); + } + ResponseObject ro = ResponseObject.newOkResponse("保存成功"); + ro.put("id", model.getId()); + return ro.toString(); + } + + /** + * 特殊文件属性(列表形式属性)删除 + * @param id 主键 + * @return + */ + public String SpecialAttributeSaveDelete(String id) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositorySpecialPropertyDao dao = new PALRepositorySpecialPropertyDao(); + dao.delete(id); + return ro.toString(); + } + + /** + * 查询导出组织模型等结构 + * 简单查询 + * @param wsId + * @param ruuid + * @return + */ + public String exportOrgData(String wsId, String ruuid) { + if (UtilString.isEmpty(wsId)) { + throw new AWSException("资产库参数不能为空"); + } + if (UtilString.isEmpty(ruuid)) { + throw new AWSException("流程参数不能为空"); + } + ResponseObject ro = ResponseObject.newOkResponse(); + List list = new ArrayList<>(); + try { + if (ruuid.length() >= 36) { + list.add(PALRepositoryCache.getCache().get(ruuid)); + } + List tempList = new ArrayList<>(); + PALRepositoryQueryAPIManager.getInstance().getAllPalRepositoryModelsByPid(wsId, ruuid, list); + Set tempSet = new HashSet<>();// 去除重复值 + for (int i = 0; i < list.size(); i++) { + if (list.get(i) != null && !tempSet.contains(list.get(i).getId()) && list.get(i).isUse()) { + tempList.add(list.get(i)); + tempSet.add(list.get(i).getId()); + } + } + StringBuilder sb = new StringBuilder(); + for(int i = 0; i < tempList.size(); i++) { + PALRepositoryModel model = tempList.get(i); + if (model != null) { + // 获取所有节点 + // 获取文件 + sb.append(model.getName()).append("\n"); + List> list2 = CoeDesignerUtil.getShapeMessageJson2(model.getId()); + if (list2 == null || list2.size() == 0) { + continue; + } + for (Map map : list2) { + if (map != null) { + if ("lane".equals(map.get("category"))) { + continue; + } + sb.append("  ").append(map.get("text")).append("\n"); + } + } + } + } + String data = null; + if (sb.length() > 0) { + data = sb.substring(0, sb.length() - 2).replaceAll("'", "'").replaceAll("\"", """).replaceAll("<", "<").replaceAll(">", ">"); + } else { + data = sb.toString(); + } + ro.put("data", data); + return ro.toString(); + } catch (Exception e) { + return ResponseObject.newErrResponse("查询错误").toString(); + } + } + + /** + * 制度表单等工具栏中上传附件删除 + * @param ruuid + * @param fileName + * @return + */ + public String delShapeUpfile(String appId, String repositoryName, String groupValue, String ruuid, String fileName) { + ResponseObject ro = ResponseObject.newOkResponse(); + try { + DCContext dcContext = null; + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(appId, repositoryName); + if (dcProfile != null) { + dcContext = new DCContext(super.getContext(), dcProfile, appId, groupValue, ruuid, fileName); + } + if (dcContext != null) { + dcContext.delete(); + } + } catch (Exception e) { + ro = ResponseObject.newErrResponse(); + } + return ro.toString(); + + } + + /** + * 制度表单等工具栏中上传附件保存并生成相应活动节点 + * @param uuid + * @param fileNames + * @param type + * @return + */ + public String saveShapeUpfile(String appId, String repositoryName, String groupValue, String uuid, String fileNames, String type) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryModel plModel = PALRepositoryCache.getCache().get(uuid); + if (plModel == null) { + return ResponseObject.newErrResponse("找不到该流程").toString(); + } + JSONArray array =JSONArray.parseArray(fileNames); + JSONArray jsonArray = new JSONArray(); + for (int i = 0, index = 1; i < array.size(); i++) { + String fileName = array.getString(i); + String newFileName = fileName.substring(0, fileName.lastIndexOf(".")); + JSONObject object = new JSONObject(); + if(newFileName != null && !"".equals(newFileName)) { + object.put("number", index++); + object.put("type", type); + object.put("name", newFileName); + object.put("fullName", fileName); + object.put("id", "obj_" + new UtilString(UUIDGener.getUUID()).replace("-", "")); + jsonArray.add(object); + } + } + if (jsonArray.isEmpty()) { + return ResponseObject.newErrResponse("没有相关数据,请重试").toString(); + } + CoeRepositoryImportUtil util = new CoeRepositoryImportUtil(); + try { + double x = 0, y = 0, zindex = 0; + List> list2 = CoeDesignerUtil.getShapeMessageJson3(uuid); + if (list2 != null && list2.size() > 0) { + for (int i = 0; i < list2.size(); i++) { + Map map = list2.get(i); + Double newZ = Double.parseDouble((String)map.get("zindex")); + if (zindex < newZ) { + zindex = newZ; + } + Double newY = Double.parseDouble((String)map.get("y")); + if (y < newY) { + y = newY; + } + } + zindex ++; + } + JSONObject newElements = util.getMethodElementsJSONArray(jsonArray, plModel.getMethodId(), x, y, zindex); + // 走创建流程 + BaseModel defineModel = CoeDesignerAPIManager.getInstance().getDefinition(uuid, 0); + if (defineModel == null) { + defineModel = CoeDesignerUtil.createModel(uuid, 0); + defineModel.setCreateHistory(false); + } + defineModel.setUpdateTime(new SimpleDateFormat(CoeDesignerConstant.DATE_TIME_STYLE_YYYY_MM_DD_HH_MM_SS).format(new Date())); + String define = defineModel.getDefinition(); + JSONObject object = com.alibaba.fastjson.JSONObject.parseObject(define); + JSONObject elements = JSONObject.parseObject(object.getString("elements")); + Iterator it = newElements.keySet().iterator(); + while (it.hasNext()) { + String key = it.next(); + elements.put(key, newElements.get(key)); + } + object.put("elements", elements); + defineModel.setDefinition(object.toString()); + CoeDesignerAPIManager.getInstance().storeDefinition(defineModel);// dao操作 + // 保存附件信息到数据库 + UpFileDao dao = new UpFileDao(); + List list = new ArrayList<>(); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject obj = jsonArray.getJSONObject(i); + UpfileModel model = new UpfileModel(); + model.setUuid(UUIDGener.getUUID()); + model.setPl_uuid(uuid); + model.setShape_uuid(obj.getString("id")); + model.setDownload(1); + model.setCreateUser(super.getContext().getUID()); + model.setCreateTime(new Timestamp(System.currentTimeMillis())); + model.setType("s"); + model.setFileName(obj.getString("fullName")); + // 复制临时目录到附件目录 + DCPluginProfile targetDcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + DCContext targetDcContext = new DCContext(super.getContext(), targetDcProfile, CoEConstant.APP_ID, model.getPl_uuid(), model.getShape_uuid()); + DCPluginProfile sourceDcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + DCContext sourceDcContext = new DCContext(super.getContext(), sourceDcProfile, CoEConstant.APP_ID, "shapeFile", model.getPl_uuid(), model.getFileName()); + boolean result = SDK.getDCAPI().copyDCFile(sourceDcContext, targetDcContext); + if (result) { + //删除上传的临时文件目录 + sourceDcContext.delete(); + list.add(model); + } + } + dao.batchInsert(list); + } catch (Exception e) { + e.printStackTrace(); + } + ro.put("name", plModel.getName()); + return ro.toString(); + } + + /** + * 获取打开一个流程所需要的参数 + * + * @param ruuid 资源库节点UUID + * @param wsid 资产库ID + * @param type 0 是根 1是正常节点 + * @return + */ + public String getPortalParam(String ruuid, String wsid) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryModel coeProcessLevelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(ruuid); + if (coeProcessLevelModel == null) { + throw new AWSException("没有查找到文件"); + } + List models = new ArrayList(); + models.add(coeProcessLevelModel); + /**关联流程源文件(console端)被删除的处理**/ + CoeProcessLevelUtil.deleteInvalidCorrelate(models); + + PALRepositoryModelImpl cplm = (PALRepositoryModelImpl) coeProcessLevelModel; + String modelName = cplm.getName().replace("\"", """).replace("<", "<").replace(">", ">"); + cplm.setName(modelName); + boolean isActive = false; + if (cplm != null && !"default".equals(cplm.getMethodId())) { + if (PALMethodCache.getPALMethodModelById(cplm.getMethodId()) == null) { + isActive = false; + } else { + String methodId = PALMethodCache.getPALMethodModelById(cplm.getMethodId()).getApp().getId(); + isActive = SDK.getAppAPI().isActive(methodId); + } + } + String processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(cplm.getId(), true); + String appId = ""; + if (!UtilString.isEmpty(processDefId)) { + appId = ProcessDefCache.getInstance().get(processDefId).getAppId(); + } + String onclick = ""; + if ("default".equals(cplm.getMethodId())) { + onclick = "createProcessLevel(window,'" + wsid + "','" + cplm.getParentId() + "','" + cplm.getId() + "');"; + } else if (!isActive) { + onclick = "$.simpleAlert('该应用未安装或已暂停');"; + } else { + onclick = "openDesginer('" + cplm.getId() + "',0,'" + ShapeUtil.replaceBlank(modelName) + "','" + appId + "','" + processDefId + "', '0');"; + } + ro.put("onclick", onclick); + return ro.toString(); + } + + /** 删除流程中的节点时记录日志 */ + public String COEPALRepositoryDesignerDeleteLog(String uuid, String delnode, String delnum) { + ResponseObject ro = ResponseObject.newOkResponse(); + //是否记日志 + String isRecordLog = "0"; + try { + isRecordLog = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "IS_RECORD_PROCESS_LOG"); + if(isRecordLog==null || "".equals(isRecordLog)) { + isRecordLog = "0"; + } + } catch(Exception e) { + } + if(!"1".equals(isRecordLog)) { + return ro.toString(); + } + //记录日志 + //流程 + PALRepositoryModel coeProcessLevelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(uuid); + if (coeProcessLevelModel == null) { + return ro.toString(); + } + //流程库Id + String wsId = coeProcessLevelModel.getWsId(); + if (coeProcessLevelModel.getMethodId().equals("process.bpmn2")) { + + } else { + //只记录bpmn的 + return ro.toString(); + } + String simple_delnode = delnode; + if(simple_delnode.length()>101) { + simple_delnode = delnode.substring(0, 100) + "......(请查看详细日志)"; + } + try { + //审计日志 + String acceptObj = "PAL流程文件删除了"+delnum+"个元素"; //客体 + String info = "流程文件:" + uuid + ";元素:"+ simple_delnode + "库Id:"+wsId; //信息 + String allInfo = "流程文件:" + uuid + ";元素:"+ delnode + "库Id:"+wsId; //全面信息 + SDK.getLogAPI().audit(AuditConst.CHANNEL_CLIENT, AuditConst.CATALOG_PROCESS, _uc.getUID(), "删除", acceptObj, + info, _uc.getClientIP(), Level.INFO); + + + LogAPI log = SDK.getLogAPI(); + StringBuffer buffer = new StringBuffer() + .append(_uc.getUserName()+"进行操作-->") + .append(acceptObj+"-->") + .append(allInfo); + log.consoleInfo(buffer.toString()); + } catch(Exception e) { + } + return ro.toString(); + } + + /** + * 加载流程树 + * @param wsId + * @param teamId + * @param pid + * @return + */ + public String getPalProcesslevelTreeData(String wsId, String teamId, String pid) { + ResponseObject ro = ResponseObject.newOkResponse(); + if (UtilString.isEmpty(pid)) { + // 返回根节点数据 + ro.setData(PALRepositoryQueryAPIManager.getInstance().getPalRepositoryTreeRoot(_uc, wsId, null, teamId)); + return ro.toString(); + } + ro.setData(PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryTreeDataByPidNew(_uc, wsId, teamId, pid)); + return ro.toString(); + } + + /** + * 查询新建文件类型 + * @param category + * @param methodId + * @return + */ + public String getPalProcessLevelCreateMethodList(String category, String methodId) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray fileArr = new JSONArray();// 文件类模型,可以画图 + JSONArray folderArr = new JSONArray();// 文件夹类模型,作为文件夹 + // 默认的简单文件分类 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "OPEN_CREATE_DEFAULT_FOLDER", true)) { + String defaultCategory = "process"; + String defualtMethod = "default"; + JSONObject defaultObj = new JSONObject(); + defaultObj.put("app", CoEConstant.APP_ID); + defaultObj.put("category", defaultCategory); + defaultObj.put("categoryName", I18nRes.findValue(CoEConstant.APP_ID, defaultCategory)); + defaultObj.put("method", defualtMethod); + defaultObj.put("methodName", I18nRes.findValue(CoEConstant.APP_ID, defualtMethod)); + defaultObj.put("havingCreatePerm", PALMethodManager.getInstance().havingCreateMethodPerm(category, methodId, defaultCategory, defualtMethod)); + // JSONObject defaultIcon = PALMethodManager.getInstance().getPALMethodIconById(defualtMethod); + JSONObject defaultIcon = new JSONObject(); + defaultIcon.put("code", ""); + defaultIcon.put("color", "#4E7FF9"); + defaultObj.put("icon", defaultIcon); + folderArr.add(defaultObj); + } + + // 内置/扩展建模方法 + List palMethodCategoryList = PALMethodCache.getPALMethodList(true); + for (String c : palMethodCategoryList) { + List list = PALMethodCache.getPALMethodModelListByMethod(c); + for (PALMethodModel model : list) { + String schema = model.getSchema(); + + JSONObject methodObj = new JSONObject(); + methodObj.put("app", model.getApp().getId()); + methodObj.put("category", c); + methodObj.put("categoryName", I18nRes.findValue(CoEConstant.APP_ID, c)); + methodObj.put("method", model.getId()); + methodObj.put("methodName", I18nRes.findValue(CoEConstant.APP_ID, model.getId())); + if (model.getSchema().contains("架构KPI图")){ + methodObj.put("methodName", "架构KPI图"); + } + if (model.getSchema().contains("角色图")){ + methodObj.put("methodName", "角色图"); + } + // System.out.println(c+"对应的"+ PALMethodManager.getInstance().havingCreateMethodPerm(category, methodId, "process", model.getId())); + methodObj.put("havingCreatePerm",PALMethodManager.getInstance().havingCreateMethodPerm(category, methodId, c, model.getId())); + + + + + //流程入口允许新建表单图和制度图 by金鹏 + if (category.equals("process")&&model.getSchema().contains("表单图")){ + methodObj.put("havingCreatePerm",true); + } + if (category.equals("process")&&model.getSchema().contains("制度")){ + methodObj.put("havingCreatePerm",true); + } + + + //允许新建角色图 + if (category.equals("process")&&model.getSchema().contains("角色图")){ + methodObj.put("havingCreatePerm",true); + } + + JSONObject icon = PALMethodManager.getInstance().getPALMethodIconById(model.getId()); + methodObj.put("icon", icon); + if (model.isFolder()) { + folderArr.add(methodObj); + } else { + fileArr.add(methodObj); + } + + + + } + + } + + ro.put("fileMethodList", fileArr); + ro.put("folderMethodList", folderArr); + //三员管理状态 + if(HighSecurityUtil.isON() && HighSecurityUtil.fileSecuritySwitch()){ + PALRepositoryQueryAPIManager.getInstance().checkHighSecurity(null,ro); + } + return ro.toString(); + } + + /** + * 保存/修改新建文件夹、层级 + * @param wsId + * @param teamId + * @param method + * @param id id为空则新建,不为空则修改 + * @param parentId + * @param name + * @param desc + * @return + */ + public String saveCreatePalProcessLevelFolder(String wsId, String teamId, String method, String id, String parentId, String name, String desc) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + if (!UtilString.isEmpty(id)) {// 修改 + PALRepositoryModelImpl model = (PALRepositoryModelImpl) coeProcessLevel.getInstance(id); + String uid = _uc.getUID(); + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + model.setName(name); + model.setDesc(desc); + model.setModifyUser(uid); + model.setModifyDate(nowTime); + coeProcessLevel.update(model);// 更新 + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_REPOSITORY_UPDATE); + } + } else {// 新增 + String parentVersionId = ""; + int level = 1; + String category = parentId; + if (parentId.length() < 36) {// 父节点是大类 + parentVersionId = parentId; + } else { + PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(parentId); + parentVersionId = parentModel.getVersionId(); + level = parentModel.getLevel() + 1; + category = parentModel.getMethodCategory(); + } + int orderIndex = coeProcessLevel.getChildrenMaxOrderIndexByPidAndWsId(parentId, wsId) + 1; + String uid = _uc.getUID(); + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + String plRid = UUIDGener.getUUID(); + id = UUIDGener.getUUID(); + PALRepositoryModelImpl model = CoeProcessLevelUtil.createPALRepositoryModel(id, plRid, wsId, name, "", orderIndex, parentVersionId, category, true, 1, id, + false, method, "0", level, null, null, uid, uid, nowTime, null, null, null, null, null, null, desc, null, null,null); + coeProcessLevel.insert(model);// 保存 + if (!"default".equals(method)) { + // 保存文件属性 + PALRepositoryAPIManager.getInstance().updateRepositoryProperty(model.getId()); + } + if (!UtilString.isEmpty(teamId)) {// 小组赋权 + CoeCooperationAPIManager.getInstance().addRepositoryToTeamAndRolePerm(_uc, teamId, model.getVersionId(), true, true); + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_REPOSITORY_CREATE); + } + } + return ro.toString(); + } + + /** + * 创建空白模型 + * @param wsId + * @param teamId + * @param category + * @param method + * @param parentId + * @param container + * @return + */ + public String saveCreatePalProcessLevelRepository(String wsId, String teamId, String category, String method, String parentId, String container,Integer securityLevel) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + String parentVersionId = ""; + int level = 1; + if (parentId.length() < 36) {// 父节点是大类 + parentVersionId = parentId; + } else { + PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(parentId); + parentVersionId = parentModel.getVersionId(); + level = parentModel.getLevel() + 1; + } + int orderIndex = coeProcessLevel.getChildrenMaxOrderIndexByPidAndWsId(parentId, wsId) + 1; + String uid = _uc.getUID(); + Timestamp nowTime = new Timestamp(System.currentTimeMillis()); + String plRid = UUIDGener.getUUID(); + String id = UUIDGener.getUUID(); + PALRepositoryModelImpl model = CoeProcessLevelUtil.createPALRepositoryModel(id, plRid, wsId, "未命名文件", "", orderIndex, parentVersionId, category, true, 1, + id, false, method, "0", level, null, null, uid, uid, nowTime, null, null, null, null, null, null, null, null, null,securityLevel); + // 创建 + try { + coeProcessLevel.insert(model); + // 流程发布用户组权限和父级同步 + PALRepositoryModel parentModel = (PALRepositoryModel) coeProcessLevel.getInstance(parentId); + if (parentModel != null) { + PublishUserGroupPerm dao = new PublishUserGroupPerm(); + List list = dao.getAllPermsByResourceId(parentModel.getVersionId()); + for (PublishUserGroupPermModel parentPModel : list) { + PublishUserGroupPermModel newPModel = new PublishUserGroupPermModel(); + newPModel.setId(UUIDGener.getUUID()); + newPModel.setGroupId(parentPModel.getGroupId()); + newPModel.setPermType(parentPModel.getPermType()); + newPModel.setResourceId(model.getId()); + dao.insert(newPModel); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + // 如果有模板,复制模板中的内容 + if (container != null && !"".equals(container) && !"_blank".equals(container)) { + PALMethodTemplateModel templateModel = PALMethodTemplateCache.getCache().get(container); + BaseModel defineModel; + if (category.contains("bpmn2")) { + defineModel = CoeDesignerUtil.createBPMNModel(model.getId(), 0); + } else { + defineModel = CoeDesignerUtil.createModel(model.getId(), 0); + } + defineModel.setDefinition(copyDefine(model.getId(), templateModel.getDefine().toString())); + if (category.contains("bpmn2")) { + CoeDesignerAPIManager.getInstance().storeDefinitionOfBpmn((BPMNModel) defineModel); + } else { + CoeDesignerAPIManager.getInstance().storeDefinition(defineModel); + } + // 保存模型属性(依照最新的属性进行保存,不再取模板属性) +// String tempId = templateModel.getDefine().getString("uuid"); +// String json = CoePropertyUtil.getPropertyValue(tempId + "_attr"); +// if (!UtilString.isEmpty(json)) { +// JSONArray jsonArr = JSONArray.parseArray(json); +// for (int i = 0; i < jsonArr.size(); i++) { +// JSONObject attribute = jsonArr.getJSONObject(i); +// attribute.put("value", ""); +// } +// try { +// PALRepositoryAPIManager.getInstance().updatePropertysByPLId(model.getId(), jsonArr); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// } + } + // 保存文件属性 + PALRepositoryAPIManager.getInstance().updateRepositoryProperty(model.getId()); + // 小组权限设置 + if (!UtilString.isEmpty(teamId)) { + CoeCooperationAPIManager.getInstance().addRepositoryToTeamAndRolePerm(_uc, teamId, model.getVersionId(), true, true); + } + ro.put("id", id); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_REPOSITORY_CREATE); + } + return ro.toString(); + } + + /** + * 获取最近的文件和收藏的文件 + * @param wsId + * @param teamId + * @return + */ + public String getRecentAndFavoriteRepository(String wsId, String teamId) { + ResponseObject ro = ResponseObject.newOkResponse(); + CoeCooperationAPIManager.getInstance().queryCooperationMemberActionPerm(teamId, _uc.getUID(), ro); + // 获取文件模型的图标icon + JSONObject methodIcons = new JSONObject(); + // 获取最近编辑的文件 + List recentList = CoeProcessLevelUtil.getRecentUpdateRepositoryList(wsId, teamId, _uc.getUID(), null, null, 30); + JSONArray recentData = new JSONArray(); + for (PALRepositoryModel model: recentList) { + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("versionId", model.getVersionId()); + object.put("name", model.getName()); + object.put("methodId", model.getMethodId()); + object.put("methodName", I18nRes.findValue(CoEConstant.APP_ID, model.getMethodId())); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(model.getMethodId()); + object.put("folder", true);// 所有的模型建模方法都默认为文件夹类型 + if (methodModel != null) { + object.put("folder", methodModel.isFolder()); + } + object.put("desc", model.getDesc()); + object.put("pathData", CoeProcessLevelUtil.getRepositoryPath(model.getId())); + object.put("isFavorite", CoeProcessLevelUtil.isCommonRepository(_uc, wsId, model.getVersionId())); + object.put("updateUser", SDK.getORGAPI().getUser(model.getModifyUser()) == null ? model.getModifyUser() : SDK.getORGAPI().getUser(model.getModifyUser()).getUserName()); + object.put("updateDate", UtilDate.datetimeFormat(model.getModifyDate())); + if (!methodIcons.containsKey(model.getMethodId())) { + JSONObject iconObj = PALMethodManager.getInstance().getPALMethodIconById(model.getMethodId()); + methodIcons.put(model.getMethodId(), iconObj); + } + JSONObject icon = new JSONObject(); + JSONObject iconObj = methodIcons.getJSONObject(model.getMethodId()); + icon.put("code", iconObj.getString("code")); + icon.put("color", iconObj.getString("color")); + object.put("icon", icon); + recentData.add(object); + } + // 获取收藏的文件 + List commonList = CoeProcessLevelUtil.getCommonRepositoryList(_uc, wsId, teamId, _uc.getUID()); + JSONArray commonData = new JSONArray(); + for (PALRepositoryModel model: commonList) { + JSONObject object = new JSONObject(); + object.put("id", model.getId()); + object.put("versionId", model.getVersionId()); + object.put("name", model.getName()); + object.put("methodId", model.getMethodId()); + object.put("methodName", I18nRes.findValue(CoEConstant.APP_ID, model.getMethodId())); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(model.getMethodId()); + object.put("folder", true);// 所有的模型建模方法都默认为文件夹类型 + if (methodModel != null) { + object.put("folder", methodModel.isFolder()); + } + object.put("desc", model.getDesc()); + object.put("pathData", CoeProcessLevelUtil.getRepositoryPath(model.getId())); + object.put("isFavorite", true); + object.put("updateUser", SDK.getORGAPI().getUser(model.getModifyUser()) == null ? model.getModifyUser() : SDK.getORGAPI().getUser(model.getModifyUser()).getUserName()); + object.put("updateDate", UtilDate.datetimeFormat(model.getModifyDate())); + if (!methodIcons.containsKey(model.getMethodId())) { + JSONObject iconObj = PALMethodManager.getInstance().getPALMethodIconById(model.getMethodId()); + methodIcons.put(model.getMethodId(), iconObj); + } + JSONObject icon = new JSONObject(); + JSONObject iconObj = methodIcons.getJSONObject(model.getMethodId()); + icon.put("code", iconObj.getString("code")); + icon.put("color", iconObj.getString("color")); + object.put("icon", icon); + commonData.add(object); + } + ro.put("recentData", recentData); + ro.put("commonData", commonData); + return ro.toString(); + } + + /** + * 收藏文件模型 + * @param wsId + * @param teamId + * @param versionId + * @return + */ + public String savePalProcessLevelFavoriteData(String wsId, String teamId, String versionId) { + ResponseObject ro = ResponseObject.newOkResponse(); + String oldStr = SDK.getPortalAPI().getUserProfileItem(CoEConstant.APP_ID, _uc.getUID(), CoEConstant.COMMON_REPOSITORY_VERSIONID, CoEConstant.COMMON_REPOSITORY_VERSIONID); + JSONObject result; + if (UtilString.isNotEmpty(oldStr)) { + result = JSONObject.parseObject(oldStr); + if (result.containsKey(wsId)) { + JSONArray versionIds = result.getJSONArray(wsId); + if (!versionIds.contains(versionId)) { + versionIds.add(versionId); + result.put(wsId, versionIds); + } + } else { + JSONArray versionIds = new JSONArray(); + versionIds.add(versionId); + result.put(wsId, versionIds); + } + } else { + result = new JSONObject(); + JSONArray versionIds = new JSONArray(); + versionIds.add(versionId); + result.put(wsId, versionIds); + } + SDK.getPortalAPI().setUserProfileItem(CoEConstant.APP_ID, _uc.getUID(), CoEConstant.COMMON_REPOSITORY_VERSIONID, CoEConstant.COMMON_REPOSITORY_VERSIONID, result.toJSONString()); + return ro.toString(); + } + + /** + * 取消收藏 + * @param wsId + * @param teamId + * @param versionId + * @return + */ + public String cancelPalProcessLevelFavorite(String wsId, String teamId, String versionId) { + ResponseObject ro = ResponseObject.newOkResponse(); + String oldStr = SDK.getPortalAPI().getUserProfileItem(CoEConstant.APP_ID, _uc.getUID(), CoEConstant.COMMON_REPOSITORY_VERSIONID, CoEConstant.COMMON_REPOSITORY_VERSIONID); + JSONObject result; + if (UtilString.isNotEmpty(oldStr)) { + result = JSONObject.parseObject(oldStr); + if (result.containsKey(wsId)) { + JSONArray versionIds = result.getJSONArray(wsId); + if (versionIds.contains(versionId)) { + versionIds.remove(versionId); + result.put(wsId, versionIds); + SDK.getPortalAPI().setUserProfileItem(CoEConstant.APP_ID, _uc.getUID(), CoEConstant.COMMON_REPOSITORY_VERSIONID, CoEConstant.COMMON_REPOSITORY_VERSIONID, result.toJSONString()); + } + } + } + return ro.toString(); + } + + /** + * 查询当前文件及子文件 + * @param wsId + * @param teamId + * @param id + * @return + */ + public String getPalProcessLevelRepositoryChildData(String wsId, String teamId, String id) { + ResponseObject ro = ResponseObject.newOkResponse(); + // 获取当前文件信息 + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + PALRepositoryModel model = (PALRepositoryModel)coeProcessLevel .getInstance(id); + + if (id.length() >= 36 && model == null) { + return ResponseObject.newErrResponse("模型文件查询失败").toString(); + } + int index = 0; + // 获取当前文件路径 + JSONArray repositoryPathData = CoeProcessLevelUtil.getRepositoryPath(id); + if (UtilString.isNotEmpty(teamId)) { + JSONArray tempArr = new JSONArray(); + List permVerIds = CoeCooperationAPIManager.getInstance().queryCooperationRoleDataPermByTeamUser(teamId, _uc.getUID()); + for (int i = 0; i < repositoryPathData.size(); i++) { + JSONObject currObj = repositoryPathData.getJSONObject(i); + String pathId = currObj.getString("id"); + if (pathId.length() < 36 || permVerIds.contains(currObj.getString("versionId"))) { + tempArr.add(currObj); + } + } + repositoryPathData = tempArr; + } + + ro.put("repositoryPathData", repositoryPathData); + // 权限获取 + CoeCooperationAPIManager.getInstance().queryCooperationMemberActionPerm(teamId, _uc.getUID(), ro); + // 获取文件模型的图标icon + JSONObject methodIcons = new JSONObject(); + JSONArray tableData= new JSONArray(); + if (id.length() >= 36) { + JSONObject object = new JSONObject(); + object.put("index", index++); + object.put("id", model.getId()); + object.put("pid", model.getParentId()); + object.put("versionId", model.getVersionId()); + object.put("name", model.getName()); + object.put("methodId", model.getMethodId()); + object.put("methodName", I18nRes.findValue(CoEConstant.APP_ID, model.getMethodId())); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(model.getMethodId()); + object.put("folder", true);// 所有的模型建模方法都默认为文件夹类型 + if (methodModel != null) { + object.put("folder", methodModel.isFolder()); + } + object.put("desc", model.getDesc()); + object.put("isFavorite", CoeProcessLevelUtil.isCommonRepository(_uc, wsId, model.getVersionId())); + object.put("updateUser", SDK.getORGAPI().getUser(model.getModifyUser()) == null ? model.getModifyUser() : SDK.getORGAPI().getUser(model.getModifyUser()).getUserName()); + object.put("updateDate", UtilDate.datetimeFormat(model.getModifyDate())); + if (!methodIcons.containsKey(model.getMethodId())) { + JSONObject iconObj = PALMethodManager.getInstance().getPALMethodIconById(model.getMethodId()); + methodIcons.put(model.getMethodId(), iconObj); + } + JSONObject icon = new JSONObject(); + JSONObject iconObj = methodIcons.getJSONObject(model.getMethodId()); + icon.put("code", iconObj.getString("code")); + icon.put("color", iconObj.getString("color")); + object.put("icon", icon); + ro.put("mainRepository",object); +// tableData.add(object); + } + // 获取子文件列表 + List subList = PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryModelsByPidNew(_uc, wsId, teamId, id); + if (subList != null) { + for (PALRepositoryModel subModel: subList) { + JSONObject subObj = new JSONObject(); + subObj.put("index", index++); + subObj.put("id", subModel.getId()); + subObj.put("pid", subModel.getParentId()); + subObj.put("versionId", subModel.getVersionId()); + subObj.put("name", subModel.getName()); + subObj.put("methodId", subModel.getMethodId()); + subObj.put("methodName", I18nRes.findValue(CoEConstant.APP_ID, subModel.getMethodId())); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(subModel.getMethodId()); + subObj.put("folder", true);// 所有的模型建模方法都默认为文件夹类型 + if (methodModel != null) { + subObj.put("folder", methodModel.isFolder()); + } + subObj.put("childSize", PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryModelsByPidNew(_uc, wsId, teamId, subModel.getId()).size());// 子节点个数 + subObj.put("desc", subModel.getDesc()); + subObj.put("isFavorite", CoeProcessLevelUtil.isCommonRepository(_uc, wsId, subModel.getVersionId())); + subObj.put("updateUser", SDK.getORGAPI().getUser(subModel.getModifyUser()) == null ? subModel.getModifyUser() : SDK.getORGAPI().getUser(subModel.getModifyUser()).getUserName()); + subObj.put("updateDate", UtilDate.datetimeFormat(subModel.getModifyDate())); + if (!methodIcons.containsKey(subModel.getMethodId())) { + JSONObject subIconObj = PALMethodManager.getInstance().getPALMethodIconById(subModel.getMethodId()); + methodIcons.put(subModel.getMethodId(), subIconObj); + } + JSONObject subIcon = new JSONObject(); + JSONObject subIconObj = methodIcons.getJSONObject(subModel.getMethodId()); + subIcon.put("code", subIconObj.getString("code")); + subIcon.put("color", subIconObj.getString("color")); + subObj.put("icon", subIcon); + tableData.add(subObj); + } + } + // 串联分析应用是否安装 + if(SDK.getAppAPI().isInstalled(CoEConstant.APP_PROCESSLINK_ID) && SDK.getAppAPI().isActive(CoEConstant.APP_PROCESSLINK_ID)) { + ro.put("processLinkInstall", true); + } else { + ro.put("processLinkInstall", false); + } + // 流程手册应用是否安装 + ro.put("outputPrInstall", false); + if (SDK.getAppAPI().isInstalled(CoEConstant.APP_OUTPUT_PR_ID) && SDK.getAppAPI().isActive(CoEConstant.APP_OUTPUT_PR_ID)) { + if (UtilString.isNotEmpty(teamId)) {// 是否有响应权限 + Set appPerm = CoeCooperationAPIManager.getInstance().queryAppPerm(teamId, _uc.getUID()); + if (appPerm.contains(CoEConstant.APP_OUTPUT_ID)) { + ro.put("outputPrInstall", true); + } + } else { + ro.put("outputPrInstall", true); + } + } + // 预览应用是否安装 + if (SDK.getAppAPI().isInstalled(CoEConstant.APP_ONLINE_DOC_ID) && SDK.getAppAPI().isActive(CoEConstant.APP_ONLINE_DOC_ID)) { + ro.put("onlineDocInstall", true); + } else { + ro.put("onlineDocInstall", false); + } + if (id.length() < 36) { + ro.put("isClickTreeRoot", true); + ro.put("category", id); + } else { + ro.put("isClickTreeRoot", false); + ro.put("category", model.getMethodCategory()); + } + // 流程批处理是否显示 + boolean batchAppVisible = false; + String batchDlg = ""; + if (((id.length() < 36 && "process".equals(id)) || (id.length() == 36 && "process".equals(model.getMethodCategory()))) && SDK.getAppAPI().isInstalled(CoEConstant.APP_BATCH_ID) && SDK.getAppAPI().isActive(CoEConstant.APP_BATCH_ID)) { + if (UtilString.isEmpty(teamId)) { + batchAppVisible = true; + } else { + batchAppVisible = CoeCooperationAPIManager.getInstance().havingWritePerm(teamId, _uc.getUID()); + } + batchDlg = HtmlPageTemplate.merge(CoEConstant.APP_BATCH_ID, "batch.dialog.htm", null); + } + ro.put("batchAppVisible", batchAppVisible); + ro.put("batchDlg", batchDlg); + ro.put("tableData", tableData); + //三员管理状态 + PALRepositoryQueryAPIManager.getInstance().checkHighSecurity(id,ro); + return ro.toString(); + } + + /** + * Repository 树形子列表元素orderIndex调整 + * 对index进行重新排序,从1开始 + * @param wsId 资产库ID + * @param currentId 待调整位置uuid + * @param originId 插入位置uuid + * @return + */ + public String updatePalProcessLevelRepositoryOrderIndex(String wsId,String currentId,String originId){ + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + /* + 1.根据两个uuid获取对应的Repository的Model, + 2.如果Model对应的parentID 不相同,则说明有跨级排序,直接返回“不允许跨级移动,请联系管理员调整!” + 3.根据插入位置Model,parentid 缓存查询子目录list + 4.根据curIndex 与 oriIndex 分区重排序。每个区域重排序时,同时更新多版本文件的orderIndex + 5.返回统一提示信息 + */ + PALRepositoryModel currentRepository = coeProcessLevel.getInstance(currentId); + PALRepositoryModel originRepository = coeProcessLevel.getInstance(originId); + if (null == currentRepository || null == originRepository){ + ro.put("desc","传递参数异常"); + ro.put("updateFlag",false); + return ro.toString(); + } + String originPid = originRepository.getParentId(); + String currentPid = currentRepository.getParentId(); + // 重排序出现跨级, + if(!originPid.equals(currentPid)){ + ro.put("desc","不允许跨级移动,请联系资产库管理员调整!"); + ro.put("updateFlag",false); + return ro.toString(); + } + + // 根据origin的pid 不需要teamid相关权限,获取子文件列表 + List subList = PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryModelsByPid(wsId, originPid); + if(subList.isEmpty()){ + ro.put("desc","传递参数没有同级目录"); + ro.put("updateFlag",false); + return ro.toString(); + } + Collections.sort(subList,new Comparator() { + @Override + public int compare(PALRepositoryModel o1, PALRepositoryModel o2) { + return o1.getOrderIndex() - o2.getOrderIndex(); + } + }); + int orderIndex = 1; + int originIndex = originRepository.getOrderIndex(); + int currentIndex = currentRepository.getOrderIndex(); + + if(currentIndex > originIndex){ + //筛选子list + Iterator iterator = subList.iterator(); + List resList = new ArrayList<>(); + while (iterator.hasNext()){ + PALRepositoryModel nextRepository = iterator.next(); + // 去除current + if (nextRepository.getVersionId().equals(currentRepository.getVersionId())){ + iterator.remove(); + }else if(nextRepository.getOrderIndex() < originIndex ){ + resList.add(nextRepository); + iterator.remove(); + } + } + + // 重新排序,1.更新resList 2.更新cur 3.更新筛选后的subList + orderIndex = this.reorderListIndex(coeProcessLevel,resList,orderIndex); + + orderIndex = this.reorderModelIndex(coeProcessLevel,currentRepository,orderIndex); + + orderIndex = this.reorderListIndex(coeProcessLevel,subList,orderIndex); + }else{ + //筛选子list + Iterator iterator = subList.iterator(); + List resList = new ArrayList<>(); + while (iterator.hasNext()){ + PALRepositoryModel nextRepository = iterator.next(); + // 去除current + if (nextRepository.getVersionId().equals(currentRepository.getVersionId())){ + iterator.remove(); + }else if(nextRepository.getOrderIndex() > originIndex){ + resList.add(nextRepository); + iterator.remove(); + } + } + + // 重排序 1.更新筛选后的subList 2.更新cur 3.更新resList + + orderIndex = this.reorderListIndex(coeProcessLevel,subList,orderIndex); + + orderIndex = this.reorderModelIndex(coeProcessLevel,currentRepository,orderIndex); + + orderIndex = this.reorderListIndex(coeProcessLevel,resList,orderIndex); + } + + ro.put("desc","移动成功"); + ro.put("updateFlag",true); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_REPOSITORY_SORT_UPDATE); + } + return ro.toString(); + } + + private int reorderListIndex(PALRepository coeProcessLevel,List list,int orderIndex){ + for(PALRepositoryModel model : list){ + //多版本调整 + List versions = PALRepositoryCache.getByVersionId(model.getVersionId()); + for (PALRepositoryModel verModel: versions){ + PALRepositoryModelImpl repositoryModel = (PALRepositoryModelImpl) verModel; + repositoryModel.setOrderIndex(orderIndex); + coeProcessLevel.update(repositoryModel); + } + orderIndex++; + } + + return orderIndex; + } + + private int reorderModelIndex(PALRepository coeProcessLevel,PALRepositoryModel model,int orderIndex){ + // 调整当前待调整文件orderIndex,同步调整多版本 + List curVersions = PALRepositoryCache.getByVersionId(model.getVersionId()); + for (PALRepositoryModel vmodel : curVersions){ + PALRepositoryModelImpl curRepositoryModel = (PALRepositoryModelImpl) vmodel; + curRepositoryModel.setOrderIndex(orderIndex); + coeProcessLevel.update(curRepositoryModel); + } + return ++orderIndex; + } + + /** + * 获取模型文件详情 + * @param wsId + * @param teamId + * @param id + * @return + */ + public String getPalProcessLevelRepositoryDetailData(String wsId, String teamId, String id) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(id); + if (model == null) { + return ResponseObject.newErrResponse("模型文件查询失败").toString(); + } + JSONObject object = new JSONObject(); + object.put("name", model.getName()); + object.put("id", model.getId()); + object.put("desc", model.getDesc()); + object.put("versionId", model.getVersionId()); + object.put("version", VersionUtil.getVersionStr(model.getVersion())); + object.put("methodId", model.getMethodId()); + object.put("methodName", I18nRes.findValue(CoEConstant.APP_ID, model.getMethodId())); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(model.getMethodId()); + boolean folder = true;// 所有的模型建模方法都默认为文件夹类型 + if (methodModel != null) { + folder = methodModel.isFolder(); + } + object.put("folder", folder); + JSONObject iconObj = PALMethodManager.getInstance().getPALMethodIconById(model.getMethodId()); + object.put("iconCode", iconObj.getString("code")); + object.put("iconColor", iconObj.getString("color")); + object.put("isUse", model.isUse()); + object.put("isPublish", model.isPublish()); + object.put("isApproval", model.isApproval()); + object.put("isStop", model.isStop()); + + boolean isActive = false; + if (model != null && !"default".equals(model.getMethodId())) { + if (PALMethodCache.getPALMethodModelById(model.getMethodId()) == null) { + isActive = false; + } else { + String appId = PALMethodCache.getPALMethodModelById(model.getMethodId()).getApp().getId(); + isActive = SDK.getAppAPI().isActive(appId); + } + } + boolean isCorrelate = PALRepositoryQueryAPIManager.getInstance().isCorrelateBpms(model.getId(), true); + String processDefId = ""; + ProcessDefinition definition = null; + String appId = ""; + int ver = -1; + if (isCorrelate) { + processDefId = PALRepositoryQueryAPIManager.getInstance().queryBpmsProcessDefIdByPalId(model.getId(), true); + definition = ProcessDefCache.getInstance().get(processDefId); + appId = definition.getAppId(); + ver = ProcessDefCache.getInstance().get(processDefId).getVersionNo(); + object.put("version", VersionUtil.getVersionStr(ver)); + } + String photoType = "image"; + String photo = ""; + String p = model.getFilePath(); + if (folder) { + photoType = "icon"; + photo = iconObj.getString("code"); + } else { + if (isCorrelate && definition.getVersionStatus() != -1) { + photo = "data:image/png;base64," + BPMNIO.getBPMNImageThumbnail(appId, processDefId); + } else { + if (!UtilString.isEmpty(p)) { + UtilFile utilFile = new UtilFile(p + "/" + model.getId() + ".small.png"); + if (utilFile.exists()) { + byte[] base64Bytes = Base64.encode(utilFile.readBytes()); + try { + photo = "data:image/png;base64," + new String(base64Bytes, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + if (UtilString.isEmpty(photo)) {// 默认 + photoType = "icon"; + photo = ""; + } + } + } + //三员管理,文件密级权限控制 + if (HighSecurityUtil.isON() && HighSecurityUtil.fileSecuritySwitch()){ + ResponseObject response = new CoeProcessLevelWeb(_uc).checkFilePemission(id); + if (response.isErr()){ + photoType = "icon"; + photo = ""; + } + } + object.put("photoType", photoType); + object.put("photo", photo); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(object); + return ro.toString(); + } + + /** + * 批量移动文件 + * @param sourceData 要移动的文件s + * @param targetData 目标文件 + * @return + */ + public String movePalProcessLevelRepository(String sourceData, String targetData) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONObject targetObj = JSONArray.parseArray(targetData).getJSONObject(0); + String targetId = targetObj.getString("id"); + if (targetId.length() < 36) { + return ResponseObject.newErrResponse("不支持移动至建模建模方法大类下,请选择其他文件").toString(); + } + JSONArray sourceArr = JSONArray.parseArray(sourceData); + if (targetId.equals(sourceArr.getJSONObject(0).getString("pid"))) { + return ResponseObject.newErrResponse("移动的文件已经在目标文件里面,不需要移动").toString(); + } + List sourceList = new ArrayList<>(); + for (int i = 0; i < sourceArr.size(); i++) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(sourceArr.getJSONObject(i).getString("id")); + sourceList.add(model); + } + Collections.sort(sourceList, new ComparatorMap()); + + PALRepositoryModel targetModel = PALRepositoryCache.getCache().get(targetId); + for (PALRepositoryModel model: sourceList) { + String result = updatePalIndexOrPid(model.getId(), targetId, "inner", null); + JSONObject moveRo = JSONObject.parseObject(result); + if (!"ok".equals(moveRo.getString("result"))) { + SDK.getLogAPI().consoleErr("移动文件[" + model.getName() + "][" + model.getId() + "] 到 [" + targetModel.getName() + "]["+ targetModel.getId() +"]失败," + moveRo.getString("msg")); + return ResponseObject.newErrResponse(moveRo.getString("msg")).toString(); + } + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_REPOSITORY_MOVE_UPDATE); + } + return ro.toString(); + } + + /** + * 复制文件 + * @param wsId + * @param teamId + * @param sourceIds + * @param targetId + * @return + */ + public String copyPalProcessLevelRepository(String wsId, String teamId, String sourceIds, String targetId) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray sourceIdArr = JSONArray.parseArray(sourceIds); + for (int i = 0; i < sourceIdArr.size(); i++) { + String sourceId = sourceIdArr.getString(i); + if (UtilString.isNotEmpty(sourceId) && sourceId.equals(targetId)) {// 复制模型与复制位置是同一个的情况,复制的位置改为复制模型的父级 + String parentTarget = PALRepositoryCache.getCache().get(targetId).getParentId(); + if (parentTarget.length() > 36) { + PALRepositoryModel parent = PALRepositoryCache.getCache().get(parentTarget); + if (parent == null) { + List list = PALRepositoryCache.getByVersionId(targetId); + if (list != null) { + parentTarget = list.get(0).getId(); + } + } + } + targetId = parentTarget; + } + PALRepositoryModel model = PALRepositoryCache.getCache().get(sourceId); + String result = copyFile(wsId, teamId, sourceId, targetId, "all"); + JSONObject moveRo = JSONObject.parseObject(result); + if (!"ok".equals(moveRo.getString("result"))) { + SDK.getLogAPI().consoleErr("复制文件[" + model.getName() + "][" + model.getId() + "]失败," + moveRo.getString("msg")); + return ResponseObject.newErrResponse(moveRo.getString("msg")).toString(); + } + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_REPOSITORY_COPY_CREATE); + } + return ro.toString(); + } + + /** + * 删除模型文件 + * @param wsId + * @param teamId + * @param repositoryIds + * @return + */ + public String removePalRepositoryLevel(String wsId, String teamId, String repositoryIds) { + ResponseObject ro = ResponseObject.newOkResponse(); + JSONArray repositoryIdArr = JSONArray.parseArray(repositoryIds); + for (int i = 0; i < repositoryIdArr.size(); i++) { + String repositoryId = repositoryIdArr.getString(i); + PALRepositoryModel model = PALRepositoryCache.getCache().get(repositoryId); + String result = removeTreeNode(repositoryId, wsId); + JSONObject moveRo = JSONObject.parseObject(result); + if (!"ok".equals(moveRo.getString("result"))) { + SDK.getLogAPI().consoleErr("删除文件[" + model.getName() + "][" + model.getId() + "]失败," + moveRo.getString("msg")); + return ResponseObject.newErrResponse(moveRo.getString("msg")).toString(); + } + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_REPOSITORY, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_REPOSITORY_DELETE); + } + return ro.toString(); + } + + /** + * 查询文件属性 + * @param wsId + * @param teamId + * @param id + * @return + */ + public String getPalProcessLevelPropertyData(String wsId, String teamId, String id) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryModel model = PALRepositoryCache.getCache().get(id); + if (model == null) { + return ResponseObject.newErrResponse("模型文件查询失败").toString(); + } + boolean fileReadonly = false;// 是否只读 + if (model.isApproval() || model.isPublish() || model.isStop()) { + fileReadonly = true; + } else if (UtilString.isNotEmpty(teamId)){ + fileReadonly = !CoeCooperationAPIManager.getInstance().havingWritePerm(teamId, _uc.getUID()); + } + + String methodId = model.getMethodId(); + String dutyRelationType = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, CoEConstant.PROPERTY_RELATION_TYPE); + ro.put("dutyRelationType", dutyRelationType); + // 固定属性 + JSONArray defaultAttrConfig = CoeProcessLevelUtil.getAllDefaultAttrData(); + for (int i = 0; i < defaultAttrConfig.size(); i++) { + JSONObject attr = defaultAttrConfig.getJSONObject(i); + attr.put("readonly", fileReadonly ? true : attr.getBooleanValue("readonly") ? true : false); + if (PALRepositoryModelImpl.FIELD_PL_NAME.equals(attr.getString("id"))) {// 名称 + attr.put("value", model.getName()); + } + if (PALRepositoryModelImpl.FIELD_PL_METHODID.equals(attr.getString("id"))) {// 分类 + attr.put("value", I18nRes.findValue(CoEConstant.APP_ID, methodId)); + } + } + // 自定义属性(更多特性) + // 先进行数据补全 + PALRepositoryAPIManager.getInstance().updateRepositoryProperty(model.getId()); + // 获取所有文件属性 + List methodAttrModels = PALRepositoryAPIManager.getInstance().getValidAndUseAttributeModels(wsId, methodId); + Map attributeModelMap = new HashMap<>(); + Map sortAttrMap = new HashMap<>(); + if (methodAttrModels != null) { + int index = 0; + for (PALMethodAttributeModel attr : methodAttrModels) { + attributeModelMap.put(attr.getKey(), attr); + sortAttrMap.put(attr.getKey(), ++index); + } + } + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(methodId); + List groups = methodModel.getGroup(); + PALRepositoryPropertyDao dao = new PALRepositoryPropertyDao(); + List propertys = dao.getPropertysByPlid(id, null); + // 排序 + propertys.sort((p1, p2) -> (sortAttrMap.containsKey(p1.getPropertyId()) ? sortAttrMap.get(p1.getPropertyId()) : 0) - (sortAttrMap.containsKey(p2.getPropertyId()) ? sortAttrMap.get(p2.getPropertyId()) : 0)); + + JSONArray result = new JSONArray(); + for (PALMethodAttributeGroupModel groupModel : groups) { + JSONObject group = new JSONObject(); + group.put("groupPath", groupModel.getName()); + group.put("groupPathName", groupModel.getDesc()); + JSONArray data = new JSONArray(); + for (PALRepositoryPropertyModel property : propertys) { + if (attributeModelMap.containsKey(property.getPropertyId()) && attributeModelMap.get(property.getPropertyId()).getUse()) {// 包含并且使用中 + PALMethodAttributeModel attributeModel = attributeModelMap.get(property.getPropertyId()); + String key = attributeModel.getKey(); + String groupPath = attributeModel.getGroupPath(); + String type = attributeModel.getType(); + String title = attributeModel.getNewTitle(); + boolean xmlReadonly = attributeModel.getReadonly(); + String ref = attributeModel.getRef(); + if (groupModel.getName().equals(groupPath)) { + JSONObject obj = new JSONObject(); + obj.put("id", key); + obj.put("label", title); + obj.put("ref", ref); + obj.put("type", type); + obj.put("readonly", fileReadonly ? true : xmlReadonly ? true : false); + obj.put("desc",attributeModel.getDesc()==null?"":attributeModel.getDesc()); + obj.put("isRequired",attributeModel.getIsRequired()); + if ("string".equals(type)) { + obj.put("value", property.getPropertyValue()); + obj.put("default", ""); + } else if ("number".equals(type)) { + obj.put("value", property.getPropertyValue()); + } else if ("textarea".equals(type)) { + obj.put("value", property.getPropertyValue()); + } else if ("boolean".equals(type)) { + obj.put("value", property.getPropertyValue()); + JSONArray options = new JSONArray(); + String[] optionStrArr = ref.split(","); + for (int i = 0; i < optionStrArr.length; i++) { + JSONObject obj1 = new JSONObject(); + obj1.put("value", optionStrArr[i]); + obj1.put("label", optionStrArr[i]); + options.add(obj1); + } + obj.put("options", options); + } else if ("select".equals(type)) { + obj.put("value", property.getPropertyValue()); + JSONArray options = new JSONArray(); + String[] optionStrArr = ref.split(","); + for (int i = 0; i < optionStrArr.length; i++) { + JSONObject obj1 = new JSONObject(); + obj1.put("value", optionStrArr[i]); + obj1.put("label", optionStrArr[i]); + options.add(obj1); + } + obj.put("options", options); + } else if ("select_m".equals(type)) { + String value = property.getPropertyValue(); + String[] values = value.split(","); + JSONArray valueArr = new JSONArray(); + for (int i = 0; i < values.length; i++) { + if (!UtilString.isEmpty(values[i])) { + valueArr.add(values[i]); + } + } + obj.put("value", valueArr); + JSONArray options = new JSONArray(); + String[] optionStrArr = ref.split(","); + for (int i = 0; i < optionStrArr.length; i++) { + JSONObject obj1 = new JSONObject(); + obj1.put("value", optionStrArr[i]); + obj1.put("label", optionStrArr[i]); + options.add(obj1); + } + obj.put("options", options); + } else if ("relation".equals(type)) { + JSONObject refObj = JSONObject.parseObject(attributeModel.getRef()); + obj.put("ref", refObj); + obj.put("readonly", fileReadonly ? true : false); + List list = DesignerShapeRelationCache.getListByAttrId(id, "", property.getPropertyId()); + if (list != null && list.size() > 0) { + // 判断是否有重复数据,进行重复过滤 + Set tempStrs = new HashSet<>(); + List tempList = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + DesignerShapeRelationModel relationModel = list.get(i); + String str = relationModel.getFileId() + relationModel.getShapeId() + relationModel.getAttrId() + relationModel.getRelationFileId() + relationModel.getRelationShapeId(); + if (!tempStrs.contains(str)) { + tempList.add(relationModel); + tempStrs.add(str); + } + } + list = tempList; + List inputValues = new ArrayList<>(); + List fileIds = new ArrayList<>(); + List shapeIds = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + DesignerShapeRelationModel relationModel = list.get(i); + if ("file".equals(refObj.containsKey("type") ? refObj.getString("type") : "shape")) {// 文件属性 + String versionId = UtilString.isEmpty(relationModel.getRelationShapeId()) ? relationModel.getRelationFileId() : relationModel.getRelationShapeId(); + if (!UtilString.isEmpty(versionId)) { + List list2 = PALRepositoryCache.getByVersionId(wsId, versionId); + for (PALRepositoryModel model2 : list2) { + if (model2.isUse()) { + inputValues.add(model2.getName()); + fileIds.add(versionId); + break; + } + } + } + } else {// 形状属性 + inputValues.add(relationModel.getRelationShapeText()); + fileIds.add(relationModel.getRelationFileId()); + shapeIds.add(relationModel.getRelationShapeId()); + } + } + obj.put("value", StringUtils.join(inputValues, ",")); + obj.put("fileIds", StringUtils.join(fileIds, ",")); + obj.put("shapeIds", StringUtils.join(shapeIds, ",")); + } + } else if ("awsorg".equals(type)) { + JSONObject refObj = JSONObject.parseObject(attributeModel.getRef()); + obj.put("ref", refObj); + obj.put("readonly", fileReadonly ? true : false); + List list = DesignerShapeRelationCache.getListByAttrId(id, "", property.getPropertyId()); + if (list != null && list.size() > 0) { + List departmentModelList = new ArrayList<>(); + List roleModelList = new ArrayList<>(); + List userModelList = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + DesignerShapeRelationModel relationModel = list.get(i); + JSONObject relationObj = JSONObject.parseObject(relationModel.getRelationShapeText()); + String orgId = relationObj.getString("id"); + String orgType = relationObj.getString("type"); + if (ref.contains(orgType)) { + if ("department".equals(orgType)) { + DepartmentModel deptModel = SDK.getORGAPI().getDepartmentById(orgId); + if (deptModel != null && !deptModel.isClosed() && deptModel.isValid()) { + departmentModelList.add(deptModel); + } + } else if ("position".equals(orgType)) { + // 先用角色代替 + RoleModel roleModel = SDK.getORGAPI().getRoleById(orgId); + if (roleModel != null) { + roleModelList.add(roleModel); + } + } else if ("role".equals(orgType)) { + RoleModel roleModel = SDK.getORGAPI().getRoleById(orgId); + if (roleModel != null) { + roleModelList.add(roleModel); + } + } else if ("user".equals(orgType)) { + UserModel userModel = SDK.getORGAPI().getUser(orgId); + if (userModel != null && !userModel.isClosed()) { + userModelList.add(userModel); + } + } + } + } + // 排序 + departmentModelList.sort((d1, d2)-> { + if (d1.getLayer() != d2.getLayer()) { + return d1.getLayer() - d2.getLayer(); + } else if (d1.getOrderIndex() != d2.getOrderIndex()) { + return d2.getOrderIndex() - d2.getOrderIndex(); + } else { + return d1.getName().compareTo(d2.getName()); + } + }); + roleModelList.sort((r1, r2)-> {return r1.getOrderIndex() - r2.getOrderIndex();}); + userModelList.sort((u1, u2)-> {return u1.getOrderIndex() - u2.getOrderIndex();}); + // 结果 + List value = new ArrayList<>(); + JSONObject selectIdObj = new JSONObject(); + JSONArray deptArr = new JSONArray(); + JSONArray roleArr = new JSONArray(); + JSONArray positionArr = new JSONArray(); + JSONArray userArr = new JSONArray(); + for (DepartmentModel dept : departmentModelList) { + value.add(dept.getName()); + deptArr.add(dept.getId()); + } + for (RoleModel role : roleModelList) { + value.add(role.getName()); + roleArr.add(role.getId()); + } + for (UserModel user : userModelList) { + value.add(user.getUserName()); + userArr.add(user.getUID()); + } + selectIdObj.put("department", deptArr); + selectIdObj.put("position", new JSONArray()); + selectIdObj.put("role", roleArr); + selectIdObj.put("user", userArr); + obj.put("value", StringUtils.join(value, ",")); + obj.put("selectIdObj", selectIdObj); + } + }else if ("link".equals(type)){ + obj.put("value", property.getPropertyValue()); + }else if ("DateTimePicker".equals(type)){ + obj.put("value", property.getPropertyValue()); + }else if ("table".equals(type)){ + obj.put("value", StringUtils.isEmpty(property.getPropertyValue()) ? new JSONObject() : JSON.parseObject(property.getPropertyValue())); + } + data.add(obj); + } + } + } + if (data.size() > 0) { + group.put("data", data); + result.add(group); + } + } + // 固定属性放入基本信息类中,排在首位 + if (defaultAttrConfig.size() > 0) { + boolean existBaseAttr = false; + for (int i = 0; i < result.size(); i++) { + JSONObject obj = result.getJSONObject(i); + if ("baseAttribute".equals(obj.getString("groupPath"))) { + existBaseAttr = true; + obj.getJSONArray("data").addAll(0, defaultAttrConfig); + break; + } + } + if (!existBaseAttr) { + JSONObject obj = new JSONObject(); + obj.put("groupPath", "baseAttribute"); + obj.put("groupPathName", "基本属性"); + obj.put("data", defaultAttrConfig); + result.add(0, obj); + } + } + ro.put("propertyData", result); + return ro.toString(); + } + + class ComparatorMap implements Comparator{ + + @Override + public int compare(PALRepositoryModel o1, PALRepositoryModel o2) { + Integer order1 = o1.getOrderIndex(); + Integer order2 = o2.getOrderIndex(); + return order1.compareTo(order2); + } + + } + + /** + * 单个更新流程文件密级 + * @param uuid + * @param securityLevel + * @return + */ + public String updateRepositorySecurityLevel(String uuid, Integer securityLevel){ + ResponseObject ro = null; + if (!HighSecurityUtil.isON()){ + ro = ResponseObject.newErrResponse().msg("未开启三员管理应用"); + return ro.toString(); + } + int update = this.updateSecurityLevel(uuid,securityLevel); + if (update >0){ + //更新成功 + ro = ResponseObject.newOkResponse(); + ro.put("updateNum",update); + return ro.toString(); + } + ro = ResponseObject.newErrResponse().msg("密级标定失败"); + return ro.toString(); + } + + /** + * 批量更新文件密级 + * @param fileList + * @return + */ + public String batchUpdateRepositorySecurityLevel(String fileList){ + ResponseObject ro = null; + if (!HighSecurityUtil.isON()){ + ro = ResponseObject.newErrResponse().msg("未开启三员管理应用"); + return ro.toString(); + } + int update = 0; + JSONArray fileArr = JSON.parseArray(fileList); + for (int i=0;i 0){ + //更新成功 + ro = ResponseObject.newOkResponse(); + ro.put("updateNum",update); + return ro.toString(); + } + ro = ResponseObject.newErrResponse().msg("密级标定失败"); + return ro.toString(); + } + + /** + * 更新流程文件密级 + * @param uuid + * @param securityLevel + * @return + */ + private int updateSecurityLevel(String uuid,Integer securityLevel){ + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + PALRepositoryModelImpl model = (PALRepositoryModelImpl) coeProcessLevel.getInstance(uuid); + //更新中多版本处理:获取最新version正在使用流程文件 + PALRepositoryModelImpl versionModel = null; + List repositoryModels = PALRepositoryCache.getByVersionId(model.getWsId(), uuid); + for (PALRepositoryModel m:repositoryModels){ + if (m.isUse()){ + versionModel = (PALRepositoryModelImpl) m; + } + } + + if (null == versionModel){ + return -1; + } + versionModel.setSecurityLevel(securityLevel); + return coeProcessLevel.update(versionModel); + } + + /** + * 获取未标密文件数量 + * @param wsId + * @param teamId + * @return + */ + public String getUnmarkFileNum(String wsId,String teamId){ + ResponseObject ro = null; + if (!HighSecurityUtil.isON()){ + ro = ResponseObject.newErrResponse().msg("未开启三员管理应用"); + return ro.toString(); + } + if(!HighSecurityUtil.fileSecuritySwitch()){ + ro = ResponseObject.newErrResponse().msg("未配置流程文件switch"); + return ro.toString(); + } + Integer fileNum = PALRepositoryQueryAPIManager.getInstance().getUnMarkFileNum(this._uc, wsId, teamId); + + if (null != fileNum){ + ro = ResponseObject.newOkResponse(); + ro.put("unmarkFileNum",fileNum); + return ro.toString(); + } + ro = ResponseObject.newErrResponse().msg("获取未标密文件数量失败"); + return ro.toString(); + } + + /** + * 校验当前用户是否有查看流程文件的权限 + * @param uuid + * @return + */ + public ResponseObject checkFilePemission(String uuid){ + ResponseObject ro = ResponseObject.newOkResponse(); + if(!HighSecurityUtil.isON()){ + ro = ResponseObject.newErrResponse().msg("未开启三员管理应用"); + return ro; + } + if (!HighSecurityUtil.fileSecuritySwitch()){ + ro = ResponseObject.newErrResponse().msg("平台未开启流程文件switch参数配置"); + return ro; + } + + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + PALRepositoryModel plModel = coeProcessLevel.getInstance(uuid); + PALMethodModel methodModel = PALMethodCache.getPALMethodModelById(plModel.getMethodId()); + if (methodModel == null || methodModel.isFolder()) { + // 没有该建模方法或者是文件夹类 + ro.put("checkFlag",true); + return ro; + } + if (null == plModel){ + ro = ResponseObject.newErrResponse().msg("不存在对应文件"); + return ro; + } + if(plModel.getSecurityLevel()==-1){ + ro = ResponseObject.newErrResponse().msg("未标定密级,无法访问"); + return ro; + } + + boolean persion = HighSecurityUtil.hasSecurityLevel(_uc,plModel.getSecurityLevel(),plModel); + if(persion){ + ro.put("checkFlag",persion); + return ro; + } + ro = ResponseObject.newErrResponse().msg("无密级权限,不可访问与删除"); + return ro; + } + + /** + * 流程文件批量密级权限校验 + * @param uuids + * @param isSub 是否进行下属列表密级权限校验 + * @return + */ + public ResponseObject checkFilePermissionBatch(String uuids,boolean isSub){ + ResponseObject ro = null; + JSONArray uuidArr = JSON.parseArray(uuids); + JSONArray res = new JSONArray(); + for (int i=0; i subModelList = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelByPid(uuid, wsid); + if (subModelList.isEmpty()){ + return ro; + } + for (PALRepositoryModel plModel : subModelList){ + ResponseObject responseObject = this.checkFilePemission(plModel.getId()); + if (responseObject.isOk()){ + ResponseObject object = checkSubFilePermission(plModel.getId(), plModel.getWsId()); + if (null != object && object.isErr()){ + ro = ResponseObject.newErrResponse().msg("无密级权限,不可访问与删除"); + return ro; + } + }else{ + ro = ResponseObject.newErrResponse().msg("无密级权限,不可访问与删除"); + return ro; + } + } + return ResponseObject.newOkResponse(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/web/CoeProcessListWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/web/CoeProcessListWeb.java new file mode 100644 index 00000000..99b6f3ac --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/web/CoeProcessListWeb.java @@ -0,0 +1,612 @@ +package com.actionsoft.apps.coe.pal.pal.repository.web; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFFont; +import org.apache.poi.hssf.usermodel.HSSFRichTextString; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.hssf.util.HSSFColor; +import org.apache.poi.ss.usermodel.BorderStyle; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.VerticalAlignment; +import org.apache.poi.ss.util.CellRangeAddress; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.form.engine.helper.iae.ImpExpHelper; +import com.actionsoft.bpms.org.cache.DepartmentCache; +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelSystemNameDaoFactory; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.model.CoeProcessLevelSystemNameModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil; +import com.actionsoft.apps.coe.pal.pal.repository.util.Number2ChineseNumUtil; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.portal.util.NavigationUtil; +import com.actionsoft.apps.coe.pal.portal.web.CoEPortalSkins; +import com.actionsoft.i18n.I18nRes; + +public class CoeProcessListWeb extends ActionWeb { + private UserContext _uc; + + public CoeProcessListWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + // 跳转到流程清单页面 + public String getCoeProcessListHtml(String wsId, String condition) { + Map macroLibraries = new HashMap(); + macroLibraries.put("coePortal", CoEPortalSkins.getCoESkinsName(getContext())); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("option", CoeProcessLevelWeb.getCoeWorspaceHtml()); + macroLibraries.put("sysNameOption", getSystemNameOption()); + macroLibraries.put("wsId", wsId); + macroLibraries.put("condition", condition); + macroLibraries.put("processCount", CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelByWsId(wsId).size()); + + String html = getToolbarHtml(wsId); + macroLibraries.put("html", html); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.list.portal.htm", macroLibraries); + } + + private String getToolbarHtml(String wsId) { + StringBuffer html = new StringBuffer(); + StringBuffer js = new StringBuffer(); + js.append(""); + html.append(js.toString()); + html.append(""); + return html.toString(); + } + + public String getOpt(PALRepositoryModel plModel) { + StringBuffer html = new StringBuffer(); + html.append(""); + // if(plModel.getPlIsBottomLevel()==CoeProcessLevelConstant.UNDERLYINGPROCESS){//底层流程 + html.append(""); + // } + + if (plModel.getDiagramUrl().equals("")) { + // if(plModel.getPlIsBottomLevel()==CoeProcessLevelConstant.UNDERLYINGPROCESS){ + html.append(""); + // } + } else { + html.append(""); + } + + html.append(""); + if (plModel.getLevel() >= 1) {// 最顶层分级不显示删除 + html.append(""); + } + PALRepository lev = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + int idx = lev.getChildrenIndex(plModel.getId()); + + int size = lev.getCoeProcessLevelByPid(plModel.getParentId(), plModel.getWsId()).size(); + + if (size > 1) { + if (idx > 0) { + int preIndx = idx - 1; + String preId = ""; + int orderIndex = 0; + if (preIndx >= 0) { + PALRepositoryModel preModel = lev.getChildrenModelByIndex(plModel.getId(), preIndx); + if (preModel != null) { + preId = preModel.getId(); + orderIndex = preModel.getOrderIndex(); + } + } + html.append(""); + } + } + return html.toString(); + } + + // 系统名称选项 + private static String getSystemNameOption() { + StringBuffer options = new StringBuffer(); + List list = CoeProcessLevelSystemNameDaoFactory.createCoeProcessLevelSystemName().getCoeProcessLevelSystemName(); + String selected = ""; + options.append(""); + for (CoeProcessLevelSystemNameModel coeProcessLevelSystemNameModel : list) { + options.append(""); + } + return options.toString(); + } + + /** + * 根据传入数据得到分页数据 + * + * @param start + * @param limit + * @return + */ + public List getCoeProcessLevelModelRecodes(int start, int limit, String wsId, String conditions) { + return CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelModelRecodes(start, limit, wsId, conditions); + } + + /** + * 获取总记录数 + * + * @param start + * @param limit + * @return + */ + public int getSumRecodes(String wsId, String conditions) { + return CoeProcessLevelDaoFacotory.createCoeProcessLevel().getSumRecodes(wsId, conditions); + } + + // 跳转到设置流程图 + public String flowChartHtml(String id, String type) { + PALRepositoryModel model = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(id); + Map macroLibraries = new HashMap(); + macroLibraries.put("coePortal", CoEPortalSkins.getCoESkinsName(getContext())); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("id", id); + macroLibraries.put("type", type); + macroLibraries.put("plDiagramUrl", model.getDiagramUrl()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.list.flow.char.htm", macroLibraries); + } + + // 保存标记颜色 + public String saveflowChart(String id, String plDiagramUrl) { + String isSuccess = "1"; + PALRepositoryModelImpl model = (PALRepositoryModelImpl) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(id); + model.setDiagramUrl(plDiagramUrl); + try { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().update(model); + } catch (Exception e) { + isSuccess = "-1"; + e.printStackTrace(); + } + return isSuccess; + } + + // 标记颜色 + public String signColorHtml(String id) { + PALRepositoryModel model = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(id); + Map macroLibraries = new HashMap(); + macroLibraries.put("coePortal", CoEPortalSkins.getCoESkinsName(getContext())); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("id", id); + macroLibraries.put("plColor", model.getColor()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.list.sign.htm", macroLibraries); + } + + // 保存标记颜色 + public String saveSignColor(String id, String plColor) { + String isSuccess = "1"; + PALRepositoryModelImpl model = (PALRepositoryModelImpl) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(id); + model.setColor(plColor); + try { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().update(model); + } catch (Exception e) { + isSuccess = "-1"; + e.printStackTrace(); + } + return isSuccess; + } + + // 向上 + public String uP(String id, int orderIndex, String preId, int preOrderIndex) { + String isUp = "1"; + PALRepository lev = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + PALRepositoryModelImpl currentModel = (PALRepositoryModelImpl) lev.getInstance(id); + currentModel.setOrderIndex(orderIndex); + PALRepositoryModelImpl preModel = (PALRepositoryModelImpl) lev.getInstance(preId); + preModel.setOrderIndex(preOrderIndex); + try { + lev.update(currentModel); + lev.update(preModel); + } catch (Exception e) { + isUp = "-1"; + e.printStackTrace(); + } + return isUp; + } + + /** + * 将指定的子表数据输出到指定的Excel工作区间指定的相对位置 + * + * @param isFriendly + * @param wb + * @param sheet + * @param rowIndex + * @param columnIndex + * @param bindId + * @param formModel + * @param sheetModel + * @param metaDataModel . + */ + private static void exportSheetData(HSSFWorkbook wb, HSSFSheet sheet, int rowIndex, short columnIndex, String wsId, String conditions) { + HSSFFont font = wb.createFont(); + HSSFCellStyle styleHead = wb.createCellStyle(); + styleHead.setFillForegroundColor(HSSFColor.BLUE_GREY.index); + styleHead.setFillPattern(FillPatternType.SOLID_FOREGROUND); + styleHead.setBorderBottom(BorderStyle.THIN); + styleHead.setBottomBorderColor(HSSFColor.BLACK.index); + styleHead.setBorderLeft(BorderStyle.THIN); + styleHead.setLeftBorderColor(HSSFColor.BLACK.index); + styleHead.setBorderRight(BorderStyle.THIN); + styleHead.setRightBorderColor(HSSFColor.BLACK.index); + styleHead.setBorderTop(BorderStyle.THIN); + styleHead.setTopBorderColor(HSSFColor.BLACK.index); + // 设置左右对齐居中 + styleHead.setAlignment(HorizontalAlignment.CENTER); + // 垂直对其居中 + styleHead.setVerticalAlignment(VerticalAlignment.CENTER); + // 设置true让Cell中的内容以多行显示 + styleHead.setWrapText(true); + + font.setBold(true); + font.setColor(HSSFColor.WHITE.index); + styleHead.setFont(font); + short column = columnIndex; + + Map map = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getALLModels(wsId, conditions); + List fieldList = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getALLModelsShowFields(wsId); + // 设置默认的两行 通栏 + rowIndex = getExcelHeader(wb, sheet, rowIndex, column, fieldList, wsId); + HSSFRow row = sheet.createRow(rowIndex); + for (int i = 0, fileSize = fieldList.size(); i < fileSize; i++) { + // metaDataModel + HSSFCell cell = row.createCell(column); + String val = (String) fieldList.get(i); + if (val.trim().indexOf("流") > -1) { + sheet.setColumnWidth(column, 1500); + } else if (val.trim().indexOf("编") > -1) { + sheet.setColumnWidth(column, 2200); + } else if (val.equals("")) { + sheet.setColumnWidth(column, 9200); + } else { + sheet.setColumnWidth(column, 4000); + } + cell.setCellValue(new HSSFRichTextString(val)); + cell.setCellStyle(styleHead); + column++; + } + sheet.createFreezePane(1, 3); // 前三列冻结 + int maxLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getMaxLevel(wsId); + // 行信息 + Map dataMap = new HashMap(); + // 合并列的信息 + Map columMap = new HashMap(); + int count = 0; + for (int ii = 0, size = map.size(); ii < size; ii++) { // 每一行记录 + List list = map.get(ii); + rowIndex++; + row = sheet.createRow(rowIndex); + dataMap.put(list.get(list.size() - 1), rowIndex); // key uuid value + // rowIndex + // 数据记录 + HSSFCellStyle styleData = wb.createCellStyle(); + styleData.setBorderBottom(BorderStyle.THIN); + styleData.setBottomBorderColor(HSSFColor.BLACK.index); + styleData.setBorderLeft(BorderStyle.THIN); + styleData.setLeftBorderColor(HSSFColor.BLACK.index); + styleData.setBorderRight(BorderStyle.THIN); + styleData.setRightBorderColor(HSSFColor.BLACK.index); + styleData.setBorderTop(BorderStyle.THIN); + styleData.setTopBorderColor(HSSFColor.BLACK.index); + short col = getExcelColor((String) list.get(list.size() - 2)); + if (col > 0) { + styleData.setFillPattern(FillPatternType.SOLID_FOREGROUND); + styleData.setFillForegroundColor(getExcelColor((String) list.get(list.size() - 2)));// + } + for (int i = 0, listSize = list.size(); i < listSize; i++) { + if (i < list.size() - 2) { + HSSFCell cell = row.createCell(i); + try { + String cellValue = (String) list.get(i); + int fromColumnIndex = 0; + if (cellValue.indexOf("|") > -1) { + cellValue = cellValue.substring(0, cellValue.indexOf("|")); + fromColumnIndex = cell.getColumnIndex(); + Map data = new HashMap(); + data.put(0, rowIndex); + data.put(1, fromColumnIndex); + data.put(2, maxLevel + 1); + columMap.put(count, data); // key uuid value + // rowIndex + // fromColumnIndex + // toColumnIndex + count++; + } + cell.setCellValue(I18nRes.findValue(CoEConstant.APP_ID, cellValue.trim())); + } catch (Exception ex) { + cell.setCellValue((Integer) list.get(i)); + } + cell.setCellStyle(styleData); + } + } + } + // 将已经存在的数据进行分组 + List> group = getProcessLevelGroup(wsId); + if (group.size() > 0) { + for (int i = 0, groupSize = group.size(); i < groupSize; i++) { + List item = group.get(i); + if (item.size() > 0) { + if (dataMap.size() > 0) { + if (dataMap.get(item.get(0).getId()) != null && dataMap.get(item.get(item.size() - 1).getId()) != null) { + int fromRow = (Integer) dataMap.get(item.get(0).getId()); + int toRow = (Integer) dataMap.get(item.get(item.size() - 1).getId()); + if (i != 0) { + sheet.groupRow(fromRow, toRow); + } + } + } + } + } + } + // 将已经存在的数据进行合并单元格 + if (columMap.size() > 0) { + for (int i = 0, countSize = columMap.size(); i < countSize; i++) { + Map data = (Map) columMap.get(i); + if (data.size() > 0) { + int rowindex = (Integer) data.get(0); + int fromColumnIndex = (Integer) data.get(1); + int toColumnIndex = (Integer) data.get(2); + CellRangeAddress region = new CellRangeAddress((short) rowindex, (short) fromColumnIndex, (short) rowindex, (short) toColumnIndex);// 合并从第rowFrom行columnFrom列 + sheet.addMergedRegion(region);// 到rowTo行columnTo的区域 + + } + } + } + + } + + // 得到所有信息的分组 + public static List> getProcessLevelGroup(String wsId) { + List models = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getModels(wsId, "0"); + List> coll = new ArrayList>(); + int i = 0; + back(models, wsId, coll, i); + return coll; + } + + public static void back(List models, String wsId, List> coll, int i) { + List item = new ArrayList(); + for (PALRepositoryModel coeProcessLevelModel : models) {// + item.add(coeProcessLevelModel); + } + coll.add(item); + for (PALRepositoryModel coeProcessLevelModel : models) {// + List ms = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getModels(wsId, coeProcessLevelModel.getId()); + if (ms.size() > 0) { + back(ms, wsId, coll, i); + } + } + } + + // 设置默认的两行 通栏 + public static int getExcelHeader(HSSFWorkbook wb, HSSFSheet sheet, int rowIndex, short column, List fieldList, String wsId) { + HSSFRow row1 = sheet.createRow(rowIndex); + // 设置默认的两行 通栏 + HSSFCellStyle styleHead1 = wb.createCellStyle(); + CoeWorkSpaceModel model = (CoeWorkSpaceModel) CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstance(wsId); + String workSpaceName = ""; + if (model != null) { + workSpaceName = model.getWsName(); + } + styleHead1.setAlignment(HorizontalAlignment.LEFT); + styleHead1.setVerticalAlignment(VerticalAlignment.CENTER); + styleHead1.setBorderBottom(BorderStyle.THIN); + styleHead1.setBottomBorderColor(HSSFColor.BLACK.index); + styleHead1.setBorderLeft(BorderStyle.THIN); + styleHead1.setLeftBorderColor(HSSFColor.RED.index); + styleHead1.setBorderRight(BorderStyle.THIN); + styleHead1.setRightBorderColor(HSSFColor.BLACK.index); + styleHead1.setBorderTop(BorderStyle.THIN); + styleHead1.setTopBorderColor(HSSFColor.RED.index); + HSSFFont font = wb.createFont(); + font.setBold(true); + font.setColor(HSSFColor.BLACK.index); + font.setFontHeightInPoints((short) 14); + styleHead1.setFont(font); + column = 0; + for (int i = 0, fielSize = fieldList.size(); i < fielSize; i++) { + HSSFCell cell = row1.createCell(column); + cell.setCellValue(I18nRes.findValue(CoEConstant.APP_ID, workSpaceName)); + cell.setCellStyle(styleHead1); + column++; + } + int toTo = fieldList.size() - 1; + CellRangeAddress region = new CellRangeAddress((short) 0, (short) 0, (short) 0, (short) toTo);// 合并从第rowFrom行columnFrom列 + sheet.addMergedRegion(region);// 到rowTo行columnTo的区域 + row1.setHeight((short) 400); + rowIndex++; + + HSSFRow row2 = sheet.createRow(rowIndex); + HSSFCellStyle styleHead2 = wb.createCellStyle(); + styleHead2.setBorderBottom(BorderStyle.THIN); + styleHead2.setBottomBorderColor(HSSFColor.BLACK.index); + styleHead2.setBorderLeft(BorderStyle.THIN); + styleHead2.setLeftBorderColor(HSSFColor.BLACK.index); + styleHead2.setBorderRight(BorderStyle.THIN); + styleHead2.setRightBorderColor(HSSFColor.BLACK.index); + styleHead2.setBorderTop(BorderStyle.THIN); + styleHead2.setTopBorderColor(HSSFColor.BLACK.index); + styleHead2.setAlignment(HorizontalAlignment.RIGHT); + + column = 0; + // 设置默认的两行 通栏 + for (int i = 0, fielSize = fieldList.size(); i < fielSize; i++) { + HSSFCell cell = row2.createCell(column); + SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd"); + String date = formate.format(new Date()).toString(); + String val = date + " By AWS CoE"; + cell.setCellValue(val); + cell.setCellStyle(styleHead2); + column++; + } + int toTo2 = fieldList.size() - 1; + CellRangeAddress region2 = new CellRangeAddress((short) 1, (short) 0, (short) 1, (short) toTo2);// 合并从第rowFrom行columnFrom列 + sheet.addMergedRegion(region2);// 到rowTo行columnTo的区域 + rowIndex++; + + return rowIndex; + } + + // excel对应颜色 + public static short getExcelColor(String color) { + short exColor = 0; + if (color.equals("#FFF")) { + exColor = HSSFColor.WHITE.index; + } else if (color.equals("#FF99CC")) {// #FF99CC + exColor = HSSFColor.ROSE.index; + } else if (color.equals("#FBEC88")) { + exColor = HSSFColor.LIGHT_YELLOW.index; + } else if (color.equals("#5BC0DE")) { + exColor = HSSFColor.AQUA.index; + } else if (color.equals("#BEBEC5")) { + exColor = HSSFColor.GREY_25_PERCENT.index; + } else if (color.equals("#999")) { + exColor = HSSFColor.GREY_40_PERCENT.index; + } + return exColor; + } + + public String expExcel(String wsId, String conditions) { + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sheet = wb.createSheet(I18nRes.findValue(CoEConstant.APP_ID, "流程清单")); + // 模板标题 + short rowIndex = 0; + exportSheetData(wb, sheet, rowIndex, (short) 0, wsId, conditions); + String fileName = ImpExpHelper.createExcelTmpFile(wb); + String fileURL = "downfile.wf?flag1=Excel&flag2=_&sid=" + super.getContext().getSessionId() + "&rootDir=tmp&filename=" + fileName + "&attachment=true&tmp" + NavigationUtil.generateSecretRandom() + System.currentTimeMillis(); + return fileURL; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/web/CoeProcessRecycleWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/web/CoeProcessRecycleWeb.java new file mode 100644 index 00000000..c5125f78 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/web/CoeProcessRecycleWeb.java @@ -0,0 +1,517 @@ +package com.actionsoft.apps.coe.pal.pal.repository.web; + +import java.io.File; +import java.sql.Timestamp; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.cooperation.constant.CoeCooperationConst; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.lifecycle.api.AppsAPIManager; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilDate; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.apps.coe.pal.pal.repository.cache.CoeProcessLevelNoCache; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryRemoveCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelCorrelateDao; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryPropertyDao; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryRemove; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryRemoveInfo; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositorySpecialPropertyDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerShapeCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.dao.DesignerShapeRelationDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.manager.DesignerRelationShapeCacheManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryRemoveInfoModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryRemoveModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.dao.UpFileDao; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.model.UpfileModel; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.web.UpfileWeb; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; +import com.actionsoft.apps.coe.pal.teamwork.dao.TeamPerm; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; + +/** + * 流程回收站Web类 + * + * @author zhangming + * @date 2015-7-24 + * @version 6.1 + * @description + */ +public class CoeProcessRecycleWeb extends ActionWeb { + private UserContext _uc; + + public CoeProcessRecycleWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + /** + * 查询回收站数据总条数 + * @param wsId + * @param teamId + * @param searchInput + * @return + */ + public String queryDataTotalCount(String wsId, String teamId, String searchInput) { + int totalNum = 0; + PALRepositoryRemoveInfo dao = new PALRepositoryRemoveInfo(); + if ("admin".equals(_uc.getUID()) || UtilString.isEmpty(teamId)) {// admin具有所有数据权限 + totalNum = dao.getTotalNum(wsId, searchInput, null); + } else { + // 获取个人小组权限versionIds + List permVersionIds = CoeCooperationAPIManager.getInstance().queryCooperationRoleDataPermByTeamUser(teamId, _uc.getUID()); + if (permVersionIds == null || permVersionIds.size() == 0) { + totalNum = 0; + } else { + List tempList = new ArrayList<>(); + for (String versionId : permVersionIds) { + tempList.add("'" + versionId + "'"); + } + totalNum = dao.getTotalNum(wsId, searchInput, StringUtils.join(tempList, ",")); + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(totalNum); + return ro.toString(); + } + + /** + * 查询回收站数据 + * @param currentPage + * @param pageStep + * @param wsId + * @param teamId + * @param searchInput + * @return + */ + public String getRecycleData(int currentPage, int pageStep, String wsId, String teamId, String searchInput) { + ResponseObject ro = ResponseObject.newOkResponse(); + PALRepositoryRemoveInfo dao = new PALRepositoryRemoveInfo(); + int start = currentPage * pageStep; + int limit = pageStep; + List list = null; + if ("admin".equals(_uc.getUID()) || UtilString.isEmpty(teamId)) { + list = dao.selectRemoveModelsByPagination(start, limit, wsId, searchInput, null); + } else { + // 获取个人小组权限versionIds + List permVersionIds = CoeCooperationAPIManager.getInstance().queryCooperationRoleDataPermByTeamUser(teamId, _uc.getUID()); + if (permVersionIds == null || permVersionIds.size() == 0) { + list = null; + } else { + List tempList = new ArrayList<>(); + for (String versionId : permVersionIds) { + tempList.add("'" + versionId + "'"); + } + list = dao.selectRemoveModelsByPagination(start, limit, wsId, searchInput, StringUtils.join(tempList, ",")); + } + } + JSONArray result = new JSONArray(); + if (list != null && list.size() > 0) { + for (PALRepositoryRemoveInfoModel info : list) { + JSONObject obj = new JSONObject(); + obj.put("id", info.getId()); + obj.put("date", UtilDate.datetimeFormat(info.getRemoveTime())); + obj.put("user", UserContext.fromUID(info.getRemoveUser()).getUserName()); + PALRepositoryRemoveModel palModel = PALRepositoryRemoveCache.getCache().get(info.getRemoveResource()); + obj.put("name", palModel.getName()); + result.add(obj); + } + } + ro.setData(result); + return ro.toString(); + } + + /** + * 流程放入回收站 + * + * @param model + * @param models + * @return + * @author zhangming + */ + public boolean saveRecycleProcesses(PALRepositoryModel model, List models) { + PALRepositoryRemoveInfoModel removeInfoModel = new PALRepositoryRemoveInfoModel(); + String id = UUIDGener.getUUID(); + removeInfoModel.setId(id); + removeInfoModel.setRemoveUser(_uc.getUID()); + removeInfoModel.setRemoveTime(new Timestamp(System.currentTimeMillis())); + removeInfoModel.setRemoveResource(model.getId()); + removeInfoModel.setWsId(model.getWsId()); + removeInfoModel.setRemoveType(1); + PALRepositoryRemoveInfo removeInfoDao = new PALRepositoryRemoveInfo(); + boolean flag = removeInfoDao.insertRemoveInfoAndRemoveModels(removeInfoModel, models); + return flag; + } + + /** + * 从回收站中删除流程 + * + * @param removeIds + * @return + */ + public String deleteResource(String removeIds) { + PALRepositoryRemoveInfo dao = new PALRepositoryRemoveInfo(); + PALRepositoryRemove removeDao = new PALRepositoryRemove(); + List models = removeDao.getModelsByInfoIds(removeIds); + + boolean r = dao.deleteRemoveInfoAndRemoveModels(removeIds); + if (r) { + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_RECYCLE, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_RECYCLE_DELETE); + } + boolean isInstalled = AppsAPIManager.getInstance().isInstalled(CoeCooperationConst.COOPERATION_ID); + for (PALRepositoryRemoveModel model : models) { + // 删除流程文件 + String filePath = model.getFilePath(); + if (filePath != null && !"".equals(filePath)) { + UtilFile utilFile = new UtilFile(filePath); + String fileP = utilFile.getAbsolutePath().replace("bin\\..\\", ""); + utilFile = new UtilFile(fileP); + if (utilFile.isDirectory()) { + File[] uf = utilFile.listFiles(); + for (int j = 0; j < uf.length; j++) { + uf[j].delete(); + } + utilFile.delete(); + } + } + // 删除权限 + CoeDesignerShapeCache.getCache().remove(model.getId());// 移除缓存中文件对应的图形 + // 删除文件对象流程团队中的权限 + if (isInstalled) { + // 小组数据权限中删除 + List existModels = PALRepositoryCache.getByVersionId(model.getVersionId()); + if (existModels == null || existModels.size() == 0) { + CoeCooperationAPIManager.getInstance().removeCooperationDataPerm(model.getVersionId()); + } + } + + // 删除属性关联 + DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); + // 删除主动关联信息 + relationDao.deleteByFileId(model.getId()); + // 删除被动关联信息,分为两种,一种是关联了当前文件,一种是关联了当前文件的形状。关联了文件存储的是versionId,需要判断是否有在用的模型,有则保留关联关系 + List removeRelationIds = new ArrayList<>(); + // 只判断relationShapeId为空,即关联了文件,因为存储的是versionId,判断是否有在用的其他version,没有直接删除,还有在用的其他版本,则保留此关系 + List list1 = relationDao.query(null, null, null, model.getVersionId(), null); + for (DesignerShapeRelationModel m1 : list1) { + if (UtilString.isEmpty(m1.getRelationShapeId())) { + List list = PALRepositoryCache.getByVersionId(model.getVersionId()); + if (list == null || list.size() == 0) { + removeRelationIds.add(m1.getId()); + } + } + } + // 只判断relationShapeId不为空,即被关联了形状,直接删除 + List list2 = relationDao.query(null, null, null, model.getId(), null); + for (DesignerShapeRelationModel m2 : list2) { + if (UtilString.isNotEmpty(m2.getRelationShapeId())) { + removeRelationIds.add(m2.getId()); + } + } + for (String relationId : removeRelationIds) { + relationDao.deleteById(relationId); + } + // 删除属性中前置流程/后置流程的关联(历史数据结构处理,无影响,只是兼容应用升级前就在回收站的流程) + List list = PALRepositoryCache.getByVersionId(model.getWsId(), model.getVersionId()); + if (list == null || list.size() == 0) { + relationDao.deleteByRelationShapeId(model.getVersionId()); + } + // 删除文件特殊属性 + PALRepositorySpecialPropertyDao dao1 = new PALRepositorySpecialPropertyDao(); + dao1.deleteByPlId(model.getId()); + + // 删除出现复制信息 + DesignerRelationShapeCacheManager event = DesignerRelationShapeCacheManager.getInstance(); + Map> map = event.getEventMap(); + map.remove(model.getId()); + ShapeUtil.writeShapMapToFile(map); + + // 删除流程推送信息 + CoePropertyUtil.deleteProperty("mark_" + model.getPlRid()); + CoePropertyUtil.deleteProperty("link_" + model.getPlRid()); + CoePropertyUtil.deleteProperty("link_app_" + model.getPlRid()); + CoePropertyUtil.deleteProperty("use_" + model.getPlRid()); + + // 删除流程关联 + CoeProcessLevelCorrelateDao correlateDao = new CoeProcessLevelCorrelateDao(); + correlateDao.deleteCorrlate(model.getId()); + + // 删除附件 + StringBuffer sqlWhere = new StringBuffer(); + sqlWhere.append(" and PALREPOSITORYID = '").append(model.getId()).append("'"); + UpFileDao upFileDao = new UpFileDao(); + List upfileModels = upFileDao.search(sqlWhere.toString()); + if (upfileModels != null && upfileModels.size() > 0) { + UpfileWeb upfileWeb = new UpfileWeb(_uc); + for (int i = 0; i < upfileModels.size(); i++) { + upfileWeb.delete(upfileModels.get(i).getUuid()); + } + } + + // 删除文件属性 + PALRepositoryPropertyDao propertyDao = new PALRepositoryPropertyDao(); + propertyDao.deletePropertysByPLId(null, model.getId(), null); + + } + + ResponseObject ro = ResponseObject.newOkResponse("删除成功"); + int totalNum = dao.getTotalNum(null); + ro.put("totalNum", totalNum); + return ro.toString(); + } else { + ResponseObject ro = ResponseObject.newErrResponse("删除失败"); + return ro.toString(); + } + } + + /** + * 清空回收站 + * + * @return + * @author zhangming + */ + public String deleteAllResource() { + PALRepositoryRemoveInfo dao = new PALRepositoryRemoveInfo(); + List list = dao.selectModelsByPagination(-1, 0, null); + StringBuilder ids = new StringBuilder(); + if (list != null && list.size() > 0) { + for (PALRepositoryRemoveInfoModel model : list) { + ids.append("'").append(model.getId()).append("'").append(","); + } + String idsStr = ids.toString(); + if (idsStr.indexOf(",") > -1) { + idsStr = idsStr.substring(0, idsStr.lastIndexOf(",")); + } + return deleteResource(idsStr); + } else { + ResponseObject ro = ResponseObject.newOkResponse("删除成功"); + return ro.toString(); + } + } + + //从回收站中还原 + public String restoreRecycleModel(String removeIds) { + ResponseObject ro = ResponseObject.newOkResponse("还原成功"); + PALRepositoryRemoveInfo dao = new PALRepositoryRemoveInfo(); + if (removeIds == null || "".equals(removeIds)) { + ro = ResponseObject.newErrResponse("请选择要还原的模型"); + return ro.toString(); + } + String[] removeIdArray = removeIds.split(","); + Set wsIds = new HashSet(); + + //重构回收站还原逻辑sunlh + try { + for (String removeId : removeIdArray) { + if (removeId == null || "".equals(removeId)) { + continue; + } + removeId = removeId.replace("'", ""); + PALRepositoryRemoveInfoModel removeInfo = dao.getRemoveInfoById(removeId); + if (removeInfo == null) { + continue; + } + // 对被删除的模型进行排序,不能按照level和orderIndex进行排序(历史遗留问题导致有些level和orderIndex错误) + List removeModels = PALRepositoryRemoveCache.getCache().getModelsByRemoveId(removeId); + List result = new ArrayList<>(); + String versionId = ""; + for (PALRepositoryRemoveModel model : removeModels) { + if(model.getId().equals(removeInfo.getRemoveResource())) { + versionId = model.getVersionId(); + break; + } + } + for (PALRepositoryRemoveModel model : removeModels) { + if(model.getVersionId().equals(versionId)) { + result.add(model); + } + } + sortById(versionId, removeModels, result); + + // 无父节点模型的记录 + Map map = new HashMap<>(); + int maxOrderIndex = 0; + // 有需要的模型重置parentId, plLevel, orderIndex + for (PALRepositoryRemoveModel model : result) { + wsIds.add(model.getWsId()); + //如果资产库中有其他版本,直接还原版本 + List versionList = PALRepositoryCache.getByVersionId(model.getWsId(), model.getVersionId()); + if (versionList != null && versionList.size() > 0) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl)model; + // 设置level,orderIndex,parentId + modelImpl.setLevel(versionList.get(0).getLevel()); + modelImpl.setOrderIndex(versionList.get(0).getOrderIndex()); + modelImpl.setParentId(versionList.get(0).getParentId()); + PALRepositoryRemoveCache.getCache().put(model.getId(), model); + } else { + String parentId = model.getParentId(); + boolean flag = true; + + if(parentId.length() < 36) { // 父节点是根节点 + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl)model; + modelImpl.setLevel(1); + PALRepositoryRemoveCache.getCache().put(model.getId(), model); + flag = false; + } else { + List models = PALRepositoryCache.getByVersionId(model.getWsId(), parentId); + if(models != null && models.size() > 0) { // 资产库有父节点 + PALRepositoryModel parentModel = models.get(0); + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl)model; + // 设置level, orderIndex不变 + modelImpl.setLevel(parentModel.getLevel() + 1); + PALRepositoryRemoveCache.getCache().put(model.getId(), model); + flag = false; + } + } + if(flag) { // 父节点在需要被还原的模型集合中 + for (PALRepositoryModel model2 : result) { + if (model2.getVersionId().equals(parentId)) { + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl)model; + modelImpl.setLevel(model2.getLevel() +1); + // 暂时不对orderIndex处理,依照原样 + PALRepositoryRemoveCache.getCache().put(model.getId(), model); + flag = false; + break; + } + } + } + if(flag) {// 父节点被删除,设置父节点为根节点,重置parentId,plLevel,orderIndex + PALRepositoryModelImpl modelImpl = (PALRepositoryModelImpl)model; + String newParentId = model.getMethodCategory(); + if (maxOrderIndex == 0) { + int orderIndex = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getChildrenMaxOrderIndexByPidAndWsId(newParentId, model.getWsId()); + orderIndex += 1; + modelImpl.setOrderIndex(orderIndex); + maxOrderIndex = orderIndex; + map.put(model.getVersionId(), orderIndex); + } else if (map.containsKey(model.getVersionId())) { + modelImpl.setOrderIndex(map.get(model.getVersionId())); + } else { + maxOrderIndex += 1; + modelImpl.setOrderIndex(maxOrderIndex); + map.put(model.getVersionId(), maxOrderIndex); + } + modelImpl.setParentId(newParentId); + modelImpl.setLevel(1); + PALRepositoryRemoveCache.getCache().put(model.getId(), model); + } + } + + } + + //如果流程库中已经存在该模型,说明其子文件还原时创建过模型,需要替换流程库中的模型 + /*PALRepositoryModelImpl removeModel = (PALRepositoryModelImpl) PALRepositoryRemoveCache.getCache().get(removeInfo.getRemoveResource()); + wsIds.add(removeModel.getWsId()); + if (PALRepositoryCache.getCache().get(removeId) != null) { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().update(removeModel); + } else { + //如果资产库中有其他版本,直接还原版本 + List versionList = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getRepositoryByVersionId(removeModel.getVersionId()); + if (versionList != null && versionList.size() > 0) { + PALRepositoryModel versionModel = versionList.get(0); + removeModel.setParentId(versionModel.getParentId()); + removeModel.setOrderIndex(versionModel.getOrderIndex()); + removeModel.setLevel(versionModel.getLevel());// 更新level + int maxVersion = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getMaxVersionNum(removeModel.getVersionId()); + removeModel.setVersion(maxVersion + 1); + PALRepositoryRemoveCache.getCache().put(removeModel.getId(), removeModel); + } else { + String pid = removeModel.getParentId(); + if (pid.length() == 36) { + PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(pid); + //判断父节点是否存在,如果在资产库中,则直接还原;如果不在资产库中,还原到根目录 + if (parentModel == null) { + pid = removeModel.getMethodCategory(); + } + } + + if (!pid.equals(removeModel.getParentId())) { + removeModel.setParentId(pid); + 更新level和orderIndex + int orderIndex = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getChildrenMaxOrderIndexByPidAndWsId(pid, removeModel.getWsId()); + removeModel.setLevel(1); + removeModel.setOrderIndex(orderIndex + 1); + PALRepositoryRemoveCache.getCache().put(removeModel.getId(), removeModel); + } + } + }*/ + + dao.restoreRecycleModel(removeId); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_RECYCLE, CoEOpLogConst.OP_RESTORE, CoEOpLogConst.INFO_RECYCLE_RESTORE); + } + } + + } catch (Exception e) { + PALRepositoryRemoveCache.getCache().reload();// 发生错误之后缓存已被改掉,需要重新加载 + e.printStackTrace(); + } + + // 重新装载编号 + for (String wsId : wsIds) { + CoeProcessLevelNoCache.getInstance().reloadInBackground(wsId); + } + + int totalNum = dao.getTotalNum(null); + ro.put("totalNum", totalNum); + return ro.toString(); + } + + /** + * 按照父子节点排序 + * 防止后续遍历操作先遍历出子节点后出现父节点造成数据错误 + * 不能使用pllevel和orderIndex进行排序,历史遗留问题造成了该两个字段值错误 + * @param parentId + * @param list + * @param result + */ + private void sortById(String parentId, List list, List result) { + Set versionIds = new HashSet<>(); + for (PALRepositoryRemoveModel model : list) { + if (model.getParentId().equals(parentId)) { + result.add(model); + versionIds.add(model.getVersionId()); + } + } + if (versionIds.size() > 0) { + for (String versionId : versionIds) { + sortById(versionId, list, result); + } + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/constant/CoeWsConstant.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/constant/CoeWsConstant.java new file mode 100644 index 00000000..23e07439 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/constant/CoeWsConstant.java @@ -0,0 +1,31 @@ +package com.actionsoft.apps.coe.pal.pal.ws.constant; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.bpms.server.fs.dc.DCUtil; + +import java.io.File; + +public class CoeWsConstant { + public static final int OPEN = 0; //正常状态 + public static final int CLOSE = 1; //关闭 + public static final int DICHOTOMY = 0; //二分法 + public static final int TRICHOTOMY = 1; //三分法 + public static final int DIY = 2; //自定义分法 + + public static String getTitle(String title,int length){ + if(title.length()>=length){ + title=title.substring(0,length)+"..."; + } + return title; + } + + /** + * 获取资产库的根目录 + * @param wsId + * @return + */ + public static String getWorkspaceRootPath(String wsId) { + return DCUtil.getPath() + CoEConstant.APP_ID + File.separator + CoEConstant.REPOSITORY_ROOT_DIR + File.separator + wsId; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/CoeWorkSpace.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/CoeWorkSpace.java new file mode 100644 index 00000000..e4ef1728 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/CoeWorkSpace.java @@ -0,0 +1,776 @@ +package com.actionsoft.apps.coe.pal.pal.ws.dao; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; +import com.actionsoft.bpms.commons.pagination.SQLPagination; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.ws.constant.CoeWsConstant; +import com.actionsoft.apps.coe.pal.pal.ws.enums.WsOrgTypeEnum; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.system.util.StringUtil; +import com.actionsoft.apps.coe.pal.team.user.model.CoeUserModel; +import com.actionsoft.exception.AWSDataAccessException; +import com.actionsoft.sdk.local.SDK; + +public class CoeWorkSpace extends DaoObject { + + public int create(PlatformMetaModelBean obj) throws SQLException { + CoeWorkSpaceModel model = (CoeWorkSpaceModel) obj; + String uuid = model.getUUId(); + if (uuid.equals("")) { + model.setUUId(UUIDGener.getUUID()); + model.setWsVersionUuid(model.getUUId()); + model.setWsVer(1); + model.setIsUse(1);// 默认展示 + } + String sql = "insert into " + CoeWorkSpaceModel.DATABASE_ENTITY + "(" + CoeWorkSpaceModel.FIELD_UUID + "," + CoeWorkSpaceModel.FIELD_WS_NAME + "," + CoeWorkSpaceModel.FIELD_WS_DM + "," + CoeWorkSpaceModel.FIELD_WS_DESC + "," + CoeWorkSpaceModel.FIELD_WS_STATE + "," + CoeWorkSpaceModel.FIELD_WS_ORGTYPE + "," + CoeWorkSpaceModel.FIELD_WS_TCTYPE + "," + CoeWorkSpaceModel.FIELD_WS_BG_URL + "," + CoeWorkSpaceModel.FIELD_WS_VERSION_UUID + "," + CoeWorkSpaceModel.FIELD_WS_VER + "," + CoeWorkSpaceModel.FIELD_IS_USE + "," + CoeWorkSpaceModel.FIELD_WS_ORDERINDEX + ") values(?,?,?,?,?,?,?,?,?,?,?,?)"; + int wsOrgType = model.getWsOrgType() == null ? WsOrgTypeEnum.COMPANY.ordinal() : model.getWsOrgType().ordinal(); + Object[] args = { model.getUUId(), model.getWsName(), model.getWsDesc(), model.getWsState(), wsOrgType, model.getWsTctype(), model.getWsTctype(), model.getWsBgUrl(), model.getWsVersionUuid(), model.getWsVer(), model.getIsUse(), model.getWsOrderindex() }; + int r = DBSql.update(sql, args); + if (uuid.equals("")) { + insertProcessLevel(model); // 向流程分级表中插入数据 + } + return r; + } + + private void insertProcessLevel(CoeWorkSpaceModel model) throws SQLException { + if (model.getWsTctype() == CoeWsConstant.DIY && !SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "AUTO_CREATE_PROCESS_FRAMEWORK_ROOT", true)) { + return; + } + PALRepositoryModelImpl coeProcessLevelModelP = new PALRepositoryModelImpl(); + coeProcessLevelModelP.setId(UUIDGener.getUUID()); + coeProcessLevelModelP.setNo("1"); + coeProcessLevelModelP.setWsId(model.getUUId()); + coeProcessLevelModelP.setName("流程架构"); + coeProcessLevelModelP.setOrderIndex(1); + coeProcessLevelModelP.setParentId("process"); + coeProcessLevelModelP.setNewParentId("process"); + coeProcessLevelModelP.setMethodCategory("process"); + coeProcessLevelModelP.setUse(true); + coeProcessLevelModelP.setVersion(1); + coeProcessLevelModelP.setSystemFile(true); + coeProcessLevelModelP.setMethodId("default"); + coeProcessLevelModelP.setHistoryMaxVersion("0"); + coeProcessLevelModelP.setVersionId(coeProcessLevelModelP.getId()); + coeProcessLevelModelP.setLevel(1); + coeProcessLevelModelP.setCreateDate(new Timestamp(System.currentTimeMillis())); + coeProcessLevelModelP.setModifyDate(new Timestamp(System.currentTimeMillis())); + coeProcessLevelModelP.setCreateUser(model.getCreateUser()); + coeProcessLevelModelP.setModifyUser(model.getModifyUser()); + String parentUUID = coeProcessLevelModelP.getId(); + CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(coeProcessLevelModelP); + if (model.getWsTctype() == CoeWsConstant.DICHOTOMY) { + PALRepositoryModelImpl coeProcessLevelModel1 = createPALRepositoryModel("1", model.getUUId(), "核心经营流程", 1, parentUUID, "process", true, 1, true, "process.evc", "0", 2, model.getCreateUser(), model.getModifyUser()); + PALRepositoryModelImpl coeProcessLevelModel2 = createPALRepositoryModel("2", model.getUUId(), "支持管理流程", 2, parentUUID, "process", true, 1, true, "process.evc", "0", 2, model.getCreateUser(), model.getModifyUser()); + + List list1 = new ArrayList(); + String[] repositoryNames1 = { "愿景和战略", "产品/服务研发", "产品营销", "产品交付", "客户服务" }; + for (int i = 0; i < repositoryNames1.length; i++) { + PALRepositoryModelImpl coeProcessLevelModel = createPALRepositoryModel("1" + (i + 1), model.getUUId(), repositoryNames1[i], (i + 1), coeProcessLevelModel1.getId(), "process", true, 1, false, "default", "0", 3, model.getCreateUser(), model.getModifyUser()); + list1.add(coeProcessLevelModel); + } + + List list2 = new ArrayList(); + String[] repositoryNames2 = { "人力资源", "IT和知识管理", "财务管理", "物业管理", "环安管理", "外部关系管理", "对改进和变革进行管理" }; + for (int i = 0; i < repositoryNames2.length; i++) { + PALRepositoryModelImpl coeProcessLevelModel = createPALRepositoryModel("2" + (i + 1), model.getUUId(), repositoryNames2[i], (i + 1), coeProcessLevelModel2.getId(), "process", true, 1, false, "default", "0", 3, model.getCreateUser(), model.getModifyUser()); + list2.add(coeProcessLevelModel); + } + + try { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(coeProcessLevelModel1); + for (PALRepositoryModelImpl model1 : list1) { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(model1); + } + CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(coeProcessLevelModel2); + for (PALRepositoryModelImpl model2 : list2) { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(model2); + } + } catch (Exception e) { + e.printStackTrace(); + } + } else if (model.getWsTctype() == CoeWsConstant.TRICHOTOMY) { + PALRepositoryModelImpl coeProcessLevelModel1 = createPALRepositoryModel("1", model.getUUId(), "战略流程", 1, parentUUID, "process", true, 1, true, "process.evc", "0", 2, model.getCreateUser(), model.getModifyUser()); + PALRepositoryModelImpl coeProcessLevelModel2 = createPALRepositoryModel("2", model.getUUId(), "运营流程", 2, parentUUID, "process", true, 1, true, "process.evc", "0", 2, model.getCreateUser(), model.getModifyUser()); + PALRepositoryModelImpl coeProcessLevelModel3 = createPALRepositoryModel("3", model.getUUId(), "支持流程", 3, parentUUID, "process", true, 1, true, "process.evc", "0", 2, model.getCreateUser(), model.getModifyUser()); + + List list1 = new ArrayList(); + String[] repositoryNames1 = { "企业战略", "企业计划", "组织管理" }; + for (int i = 0; i < repositoryNames1.length; i++) { + PALRepositoryModelImpl coeProcessLevelModel = createPALRepositoryModel("1" + (i + 1), model.getUUId(), repositoryNames1[i], (i + 1), coeProcessLevelModel1.getId(), "process", true, 1, false, "default", "0", 3, model.getCreateUser(), model.getModifyUser()); + list1.add(coeProcessLevelModel); + } + + List list2 = new ArrayList(); + String[] repositoryNames2 = { "营销管理", "客户管理", "商机管理", "招投标管理", "项目管理" }; + for (int i = 0; i < repositoryNames2.length; i++) { + PALRepositoryModelImpl coeProcessLevelModel = createPALRepositoryModel("2" + (i + 1), model.getUUId(), repositoryNames2[i], (i + 1), coeProcessLevelModel2.getId(), "process", true, 1, false, "default", "0", 3, model.getCreateUser(), model.getModifyUser()); + list2.add(coeProcessLevelModel); + } + + List list3 = new ArrayList(); + String[] repositoryNames3 = { "付款管理", "合作伙伴管理", "采购管理", "人事管理", "财务管理", "资产管理", "IT管理" }; + for (int i = 0; i < repositoryNames3.length; i++) { + PALRepositoryModelImpl coeProcessLevelModel = createPALRepositoryModel("3" + (i + 1), model.getUUId(), repositoryNames3[i], (i + 1), coeProcessLevelModel3.getId(), "process", true, 1, false, "default", "0", 3, model.getCreateUser(), model.getModifyUser()); + list3.add(coeProcessLevelModel); + } + try { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(coeProcessLevelModel1); + for (PALRepositoryModelImpl model1 : list1) { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(model1); + } + CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(coeProcessLevelModel2); + for (PALRepositoryModelImpl model2 : list2) { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(model2); + } + CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(coeProcessLevelModel3); + for (PALRepositoryModelImpl model3 : list3) { + CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(model3); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + private PALRepositoryModelImpl createPALRepositoryModel(String no, String wsId, String name, int orderIndex, String pId, String category, boolean isUse, int version, boolean isSystemFile, String methodId, String maxVersion, int level, String createUser, String modifyUser) { + PALRepositoryModelImpl model = new PALRepositoryModelImpl(); + String id = UUIDGener.getUUID(); + model.setId(id); + model.setVersionId(id); + model.setNo(no); + model.setWsId(wsId); + model.setName(name); + model.setOrderIndex(orderIndex); + model.setParentId(pId); + model.setNewParentId(pId); + model.setMethodCategory(category); + model.setUse(isUse); + model.setVersion(version); + model.setSystemFile(isSystemFile); + model.setMethodId(methodId); + model.setHistoryMaxVersion(maxVersion); + model.setLevel(level); + model.setCreateDate(new Timestamp(System.currentTimeMillis())); + model.setModifyDate(new Timestamp(System.currentTimeMillis())); + model.setCreateUser(createUser); + model.setModifyUser(modifyUser); + return model; + } + + public CoeWorkSpaceModel getInstance(String uuid) { + try { + String sql = "select * from " + CoeWorkSpaceModel.DATABASE_ENTITY + " where id=?"; + return DBSql.getObject(sql, new CoeWorkSpaceModelMapper(), new Object[] { uuid }); + } catch (Exception sql) { + sql.printStackTrace(); + } + return null; + } + + public CoeWorkSpaceModel getAllModel(String uuid) { + try { + String sql = "select * from " + CoeWorkSpaceModel.DATABASE_ENTITY + " where id=?"; + return DBSql.getObject(sql, new CoeWorkSpaceModelMapper(), new Object[]{uuid}); + } catch (Exception sqle) { + sqle.printStackTrace(); + } + return null; + } + + private class CoeWorkSpaceModelMapper implements RowMapper { + public CoeWorkSpaceModel mapRow(ResultSet rs, int arg1) throws SQLException { + CoeWorkSpaceModel model = new CoeWorkSpaceModel(); + try { + model.setUUId(putString(rs.getString(CoeWorkSpaceModel.FIELD_UUID))); + model.setWsName(putString(rs.getString(CoeWorkSpaceModel.FIELD_WS_NAME))); + model.setWsDm(putString(rs.getString(CoeWorkSpaceModel.FIELD_WS_DM))); + model.setWsDesc(putString(rs.getString(CoeWorkSpaceModel.FIELD_WS_DESC))); + model.setWsState(rs.getInt(CoeWorkSpaceModel.FIELD_WS_STATE)); + model.setWsTctype(rs.getInt(CoeWorkSpaceModel.FIELD_WS_TCTYPE)); + model.setWsBgUrl(putString(rs.getString(CoeWorkSpaceModel.FIELD_WS_BG_URL))); + model.setWsOrderindex(rs.getInt(CoeWorkSpaceModel.FIELD_WS_ORDERINDEX)); + model.setWsOrgType(WsOrgTypeEnum.values()[rs.getInt(CoeWorkSpaceModel.FIELD_WS_ORGTYPE)]); + model.setWsVersionUuid(putString(rs.getString(CoeWorkSpaceModel.FIELD_WS_VERSION_UUID))); + model.setWsVer(rs.getInt(CoeWorkSpaceModel.FIELD_WS_VER)); + model.setIsUse(rs.getInt(CoeWorkSpaceModel.FIELD_IS_USE)); + model.setWsAdmin(rs.getString(CoeWorkSpaceModel.FIELD_WS_ADMIN)); + } catch (SQLException e) { + e.printStackTrace(); + } + return model; + } + } + + public List getInstanceAll() { + String sql = "select * from " + CoeWorkSpaceModel.DATABASE_ENTITY; + try { + return DBSql.query(sql, new CoeWorkSpaceModelMapper()); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return new ArrayList(); + } + + public List getInstanceById(String wsId) { + String sql = "select * from " + CoeWorkSpaceModel.DATABASE_ENTITY + " where ID='" + wsId + "'"; + try { + return DBSql.query(sql, new CoeWorkSpaceModelMapper()); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return new ArrayList(); + } + + // public Map getInstance(String sortname) { + // return getInstance(sortname, DaoObject.SORT_ASC); + // } + + /* public Map getInstance(String sortname, String sorttype) { java.sql.Connection conn = open(); java.sql.Statement stmt = null; java.sql.ResultSet rset = null; Map models = new HashMap(); try { stmt = conn.createStatement(); rset = super.getRecord(conn, stmt, sortname, sorttype); int i = 0; while (rset.next()) { models.put(new Integer(i), (CoeUserModel) record2Model(rset)); i++; } if (models.size() == 0) { return null; } else { return models; } } catch (SQLException sqle) { sqle.printStackTrace(); } finally { close(conn, stmt, rset); } return null; } */ + + public PlatformMetaModelBean record2Model(ResultSet rs) { + CoeWorkSpaceModel model = new CoeWorkSpaceModel(); + try { + model.setUUId(putString(rs.getString(CoeWorkSpaceModel.FIELD_UUID))); + model.setWsName(putString(rs.getString(CoeWorkSpaceModel.FIELD_WS_NAME))); + model.setWsDm(putString(rs.getString(CoeWorkSpaceModel.FIELD_WS_DM))); + model.setWsDesc(putString(rs.getString(CoeWorkSpaceModel.FIELD_WS_DESC))); + model.setWsState(rs.getInt(CoeWorkSpaceModel.FIELD_WS_STATE)); + model.setWsTctype(rs.getInt(CoeWorkSpaceModel.FIELD_WS_TCTYPE)); + model.setWsBgUrl(putString(rs.getString(CoeWorkSpaceModel.FIELD_WS_BG_URL))); + model.setWsOrderindex(rs.getInt(CoeWorkSpaceModel.FIELD_WS_ORDERINDEX)); + model.setWsOrgType(WsOrgTypeEnum.values()[rs.getInt(CoeWorkSpaceModel.FIELD_WS_ORGTYPE)]); + model.setWsVersionUuid(putString(rs.getString(CoeWorkSpaceModel.FIELD_WS_VERSION_UUID))); + model.setWsVer(rs.getInt(CoeWorkSpaceModel.FIELD_WS_VER)); + model.setIsUse(rs.getInt(CoeWorkSpaceModel.FIELD_IS_USE)); + } catch (SQLException e) { + e.printStackTrace(); + } + return model; + } + + public String putString(String obj) { + if (obj == null) { + return ""; + } else { + return obj; + } + } + + @Override + public int update(PlatformMetaModelBean obj) { + CoeWorkSpaceModel model = (CoeWorkSpaceModel) obj; + String sql = "UPDATE " + CoeWorkSpaceModel.DATABASE_ENTITY + " set " + CoeWorkSpaceModel.FIELD_WS_NAME + "=?, " + CoeWorkSpaceModel.FIELD_WS_DM + "=?," + CoeWorkSpaceModel.FIELD_WS_ADMIN + "=?," + CoeWorkSpaceModel.FIELD_WS_DESC + "=?," + CoeWorkSpaceModel.FIELD_WS_STATE + "=?," + CoeWorkSpaceModel.FIELD_WS_ORGTYPE + "=?," + CoeWorkSpaceModel.FIELD_WS_TCTYPE + "=?," + CoeWorkSpaceModel.FIELD_WS_BG_URL + "=?," + CoeWorkSpaceModel.FIELD_WS_ORDERINDEX + "=? where " + CoeWorkSpaceModel.FIELD_UUID + "=?"; + Object[] args = { model.getWsName(), model.getWsDm(), model.getWsAdmin(), model.getWsDesc(), model.getWsState(), model.getWsOrgType().ordinal(), model.getWsTctype(), model.getWsBgUrl(), model.getWsOrderindex(), model.getUUId() }; + int r = DBSql.update(sql, args); + return r; + + } + + /** + * 获取流程资产分页数据 + * + * @param start + * @param limit + * @return + */ + public List getCoeWorkSpaceModelRecodes(int start, int limit) { + return getCoeWorkSpaceModelRecodes(start, limit, CoeWorkSpaceModel.FIELD_WS_ORDERINDEX, false, true); + } + + public List getCoeWorkSpaceModelRecodesNoPage() { + return getCoeWorkSpaceModelRecodes(0, 0, CoeWorkSpaceModel.FIELD_WS_STATE, true, false); + } + + /** + * 获取总记录数 + * + * @param start + * @param limit + * @return + */ + public int getSumRecodes() { + String sql = "select count(*) as c from " + CoeWorkSpaceModel.DATABASE_ENTITY; + int countData = DBSql.getInt(sql, "c"); + return countData; + } + + /** + * 获取非停用流程资产 + * + * @return + */ + public List getNormalCoeWorkSpaceModelRecodes() { + List list = new ArrayList(); + List coeWorkSpaceModels = getCoeWorkSpaceModelRecodes(0, 0, CoeWorkSpaceModel.FIELD_WS_ORDERINDEX, false, false); + for (CoeWorkSpaceModel coeWorkSpaceModel : coeWorkSpaceModels) { + if (coeWorkSpaceModel.getWsState() == CoeWsConstant.OPEN) { + list.add(coeWorkSpaceModel); + } + } + return list; + } + + /** + * 获取流程资产数据 + * + * @param start + * @param limit + * @param sortFiled + * @param upOrDown 是否升序(默认升序) + * @param isPaging 是否分页 + * @return + */ + public List getCoeWorkSpaceModelRecodes(int start, int limit, String sortFiled, boolean isUp, boolean isPaging) { + String upOrDown = "ASC"; + if (!isUp) { + upOrDown = "DESC"; + } + StringBuilder sql = new StringBuilder("SELECT * FROM APP_ACT_COE_PAL_WORKSPACE WHERE ISUSE=1 ORDER BY "); + ; + if (!sortFiled.equals(CoeWorkSpaceModel.FIELD_WS_ORDERINDEX)) { + sql.append(sortFiled + " " + upOrDown + ", " + CoeWorkSpaceModel.FIELD_WS_ORDERINDEX + " DESC"); + } else { + sql.append(CoeWorkSpaceModel.FIELD_WS_ORDERINDEX + " ASC"); + } + + String sqlStr = sql.toString(); + if (isPaging) { + sqlStr = SQLPagination.getPaginitionSQL(sql.toString(), start, limit); + } + try { + return DBSql.query(sqlStr, new CoeWorkSpaceModelMapper()); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return new ArrayList(); + } + + /** + * 变更为(停用 or 启用)状态 + * + * @param uuid + * @param state + * @return + */ + + public boolean stopCoeWorkspace(String uuid, int state) { + int st = CoeWsConstant.CLOSE; + if (state == CoeWsConstant.OPEN) { + st = CoeWsConstant.OPEN; + } + StringBuffer sql = new StringBuffer(); + sql.append("update ").append(CoeWorkSpaceModel.DATABASE_ENTITY).append(" set " + CoeWorkSpaceModel.FIELD_WS_STATE).append("=").append(st).append(" where ").append(CoeWorkSpaceModel.FIELD_UUID).append("='").append(uuid).append("'"); + int r = DBSql.update(sql.toString()); + // 更新小组的状态 + // sql = new StringBuffer(); + // int projectState = 0; + // int pr = 0; + // if (state == 0) { + // projectState = 1; + // } + // sql.append("update ").append("SYS_COE_PROJECT ").append("set project_status=" + // + projectState).append(" where ").append("wsid ='" + uuid + "'"); + // pr = DBSql.update(sql.toString()); + if (r > 0) { + return true; + } else { + return false; + } + } + + /** + * 删除记录 + * + * @param uuid + * @return + */ + public boolean removeCoeWorkspace(String uuid) { + StringBuffer sql = new StringBuffer(); + sql.append("delete from ").append(CoeWorkSpaceModel.DATABASE_ENTITY).append(" where ").append(CoeWorkSpaceModel.FIELD_UUID).append("='").append(uuid).append("'"); + int r = DBSql.update(sql.toString()); + if (r > 0) { + return true; + } else { + return false; + } + } + + public int getCountVer(String versionId) { + String sql = "SELECT COUNT(*) from APP_ACT_COE_PAL_WORKSPACE p where p.WSVERSIONUUID='" + versionId + "'"; + return DBSql.getInt(sql, new Object[0]); + } + + public List getCoeUserMainRecodes(int start, int limit) { + return getCoeUserMainRecodes(start, limit, CoeUserModel.FIELD_USER_ID, false, false); + } + + private List getCoeUserMainRecodes(int start, int limit, String sortFiled, boolean isUp, boolean isPaging) { + + String upOrDown = "ASC"; + if (!isUp) { + upOrDown = "DESC"; + } + String sql = "SELECT cu." + CoeUserModel.FIELD_ID + ", cu." + CoeUserModel.FIELD_USER_ID + ", o." + CoeUserModel.FIELD_USER_NAME + ", cu." + CoeUserModel.FIELD_IS_ADMIN + " FROM " + CoeUserModel.DATABASE_ENTITY + " cu, ORGUSER o WHERE cu.USERID = o.USERID and o.CLOSED = 0" + " ORDER BY " + sortFiled + " " + upOrDown; + if (isPaging) { + sql = SQLPagination.getPaginitionSQL(sql, start, limit); + } + try { + return DBSql.query(sql, new CoeUserModelMapper()); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return new ArrayList(); + } + + /** + * 查询用户 + * @param name + * @return + */ + public List searchUser(String name) { + String sortFiled = CoeUserModel.FIELD_USER_NAME; + String upOrDown = "ASC"; + StringBuilder sql = new StringBuilder("SELECT cu." + CoeUserModel.FIELD_ID + ", cu." + CoeUserModel.FIELD_USER_ID + ", o." + CoeUserModel.FIELD_USER_NAME + ", cu." + CoeUserModel.FIELD_IS_ADMIN + " FROM " + CoeUserModel.DATABASE_ENTITY + " cu, ORGUSER o WHERE cu.USERID = o.USERID "); + String namelike = ""; + if (StringUtil.containSpecialChar(name)) { + namelike = "'%" + StringUtil.replaceSqlStr(name, AWSServerConf.isMySQL()) + "%'" + (AWSServerConf.isMySQL() ? "ESCAPE '\\\\'" : " ESCAPE '\\'"); + } else { + namelike = "'%" + name + "%'"; + } + sql.append(" and (o.USERNAME like " + namelike + "or o.USERID like " + namelike + ") "); + sql.append(" and o.CLOSED = 0" + " ORDER BY " + sortFiled + " " + upOrDown); + try { + return DBSql.query(sql.toString(), new CoeUserModelMapper()); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return new ArrayList(); + } + + private class CoeUserModelMapper implements RowMapper { + public CoeUserModel mapRow(ResultSet rs, int arg1) throws SQLException { + CoeUserModel model = new CoeUserModel(); + model.setId(rs.getString(CoeUserModel.FIELD_ID)); + model.setUserId(rs.getString(CoeUserModel.FIELD_USER_ID)); + model.setIsAdmin(rs.getInt(CoeUserModel.FIELD_IS_ADMIN)); + if (rs.getString(CoeUserModel.FIELD_USER_NAME) != null) { + model.setUserName(rs.getString(CoeUserModel.FIELD_USER_NAME)); + } + return model; + } + } + + // 获取所有的记录条数 + + public int getCoeUserCount() { + try { + String sql = "SELECT COUNT(*) AS number FROM APP_ACT_COE_USER cu ,ORGUSER o WHERE cu.USERID = o.USERID and o.CLOSED = 0"; + return DBSql.getInt(sql, "number"); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return 0; + } + + public Map getCoeWorkSpaceVersions(String versionId) { + + Map map = new HashMap(); + List list = new ArrayList(); + String sql = "SELECT * FROM APP_ACT_COE_PAL_WORKSPACE WHERE WSVERSIONUUID='" + versionId + "' ORDER BY WSVER"; + try { + list = DBSql.query(sql, new CoeWorkSpaceModelMapper()); + // 如果有多条记录赐查询出最大版本号 + if (DBSql.query(sql, new CoeWorkSpaceModelMapper()).size() > 1) { + sql = "SELECT MAX(wsver) FROM APP_ACT_COE_PAL_WORKSPACE WHERE WSVERSIONUUID='" + versionId + "'"; + map.put("maxVersionNo", DBSql.getString(sql)); + } + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + map.put("list", list); + return map; + } + + public boolean updateCoeWorkSpaceVersion(String wsUsedUUID, String wsSelectVersionId) { + java.sql.Connection conn = DBSql.open(); + PreparedStatement stmt = null; + PreparedStatement stmt2 = null; + int flag = 0; + try { + conn.setAutoCommit(false); + String sql = "UPDATE APP_ACT_COE_PAL_WORKSPACE SET ISUSE=? WHERE WSVERSIONUUID=?"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, 0); + stmt.setString(2, wsUsedUUID); + flag = stmt.executeUpdate(); + } catch (Exception e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + return false; + } finally { + DBSql.close(stmt, null); + } + try { + String sql = "UPDATE APP_ACT_COE_PAL_WORKSPACE SET ISUSE=? WHERE ID=?"; + stmt2 = conn.prepareStatement(sql); + stmt2.setInt(1, 1); + stmt2.setString(2, wsSelectVersionId); + // stmt.addBatch(); + if (flag > 0) { + stmt2.executeUpdate(); + conn.commit(); + } else { + conn.rollback(); + } + } catch (Exception e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + return false; + } finally { + DBSql.close(conn, stmt, null); + } + return true; + } + + public String delCoeWorkSpaceVersion(String wsUUID, String versionId) { + java.sql.Connection conn = DBSql.open(); + PreparedStatement stmt = null; + PreparedStatement stmt2 = null; + ResultSet rs2 = null; + int i = 0; + String json = ""; + try { + conn.setAutoCommit(false); + String sql = "DELETE FROM APP_ACT_COE_PAL_WORKSPACE WHERE ID=?"; + stmt = conn.prepareStatement(sql); + stmt.setString(1, wsUUID); + i = stmt.executeUpdate(); + conn.commit(); + } catch (Exception e) { + json = "{'flag':" + false + ",'maxVersion':'v1.0'}"; + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(stmt, null); + } + try { + String maxVersion = null; + String sql = "SELECT MAX(WSVER) FROM APP_ACT_COE_PAL_WORKSPACE WHERE WSVERSIONUUID=?"; + stmt2 = conn.prepareStatement(sql); + stmt2.setString(1, versionId); + rs2 = stmt2.executeQuery(); + if (rs2.next()) + maxVersion = rs2.getString(1); + boolean flag = i == 0 ? false : true; + if (maxVersion != null) { + json = "{'flag':" + flag + ",'maxVersion':'" + maxVersion + "'}"; + } else { + json = "{'flag':" + false + ",'maxVersion':'v1.0'}"; + } + } catch (Exception e) { + json = "{'flag':" + false + ",'maxVersion':'v1.0'}"; + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, stmt2, rs2); + } + return json; + } + + public void setDefaultDisplayVersion(String versionId) { + java.sql.Connection conn = DBSql.open(); + PreparedStatement stmt = null; + PreparedStatement stmt2 = null; + ResultSet rs = null; + ResultSet rs2 = null; + String maxVersion = null; + try { + String sql = "SELECT MAX(WSVER) FROM APP_ACT_COE_PAL_WORKSPACE WHERE WSVERSIONUUID=?"; + stmt = conn.prepareStatement(sql); + stmt.setString(1, versionId); + rs = stmt.executeQuery(); + if (rs.next()) + maxVersion = rs.getString(1); + } catch (Exception e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(stmt, rs); + } + if (maxVersion != null) { + try { + conn.setAutoCommit(false); + String sql = "UPDATE APP_ACT_COE_PAL_WORKSPACE SET ISUSE = 1 WHERE WSVER=? AND WSVERSIONUUID=?"; + stmt2 = conn.prepareStatement(sql); + stmt2.setInt(1, maxVersion.equals("") ? 1 : Integer.parseInt(maxVersion)); + stmt2.setString(2, versionId); + stmt2.executeUpdate(); + conn.commit(); + } catch (Exception e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, stmt2, rs2); + } + } + } + + /** + * 返回指定版本的最大版本号 + * + * @param versionUuid + * @return + */ + public int getMaxVersionNum(String versionUuid) { + String sql = "select max(" + CoeWorkSpaceModel.FIELD_WS_VER + ") as c from " + CoeWorkSpaceModel.DATABASE_ENTITY + " where " + CoeWorkSpaceModel.FIELD_WS_VERSION_UUID + "='" + versionUuid + "'"; + return DBSql.getInt(sql, "c"); + } + + public String getIsUsingWSUUID(String versionId) { + String sql = "select ID from APP_ACT_COE_PAL_WORKSPACE where WSVERSIONUUID='" + versionId + "' and ISUSE=1"; + return DBSql.getString(sql, "ID"); + } + + @Override + public int insert(PlatformMetaModelBean daoObj) { + CoeWorkSpaceModel model = (CoeWorkSpaceModel) daoObj; + String uuid = model.getUUId(); + if (uuid.equals("")) { + model.setUUId(UUIDGener.getUUID()); + model.setWsVersionUuid(model.getUUId()); + model.setWsVer(1); + model.setIsUse(1);// 默认展示 + } + String sql = "insert into " + CoeWorkSpaceModel.DATABASE_ENTITY + " (" + CoeWorkSpaceModel.FIELD_UUID + "," + CoeWorkSpaceModel.FIELD_WS_NAME + "," + CoeWorkSpaceModel.FIELD_WS_DM + "," + CoeWorkSpaceModel.FIELD_WS_ADMIN + "," + CoeWorkSpaceModel.FIELD_WS_DESC + "," + CoeWorkSpaceModel.FIELD_WS_STATE + "," + CoeWorkSpaceModel.FIELD_WS_ORGTYPE + "," + CoeWorkSpaceModel.FIELD_WS_TCTYPE + "," + CoeWorkSpaceModel.FIELD_WS_BG_URL + "," + CoeWorkSpaceModel.FIELD_WS_VERSION_UUID + "," + CoeWorkSpaceModel.FIELD_WS_VER + "," + CoeWorkSpaceModel.FIELD_IS_USE + "," + CoeWorkSpaceModel.FIELD_WS_ORDERINDEX + ") values(?,?,?,?,?,?,?,?,?,?,?,?,?)"; + int wsOrgType = model.getWsOrgType() == null ? WsOrgTypeEnum.COMPANY.ordinal() : model.getWsOrgType().ordinal(); + Object[] args = { model.getUUId(), model.getWsName(), model.getWsDm(), model.getWsAdmin(), model.getWsDesc(), model.getWsState(), wsOrgType, model.getWsTctype(), model.getWsBgUrl(), model.getWsVersionUuid(), model.getWsVer(), model.getIsUse(), model.getWsOrderindex() }; + + int r = DBSql.update(sql, args); + if (uuid.equals("")) { + try { + insertProcessLevel(model); + } catch (SQLException e) { + e.printStackTrace(); + } // 向流程分级表中插入数据 + } + return r; + } + + /** + * 创建资产库和默认流程文件 + * @param daoObj + * @return + */ + public int insertObj(PlatformMetaModelBean daoObj) { + CoeWorkSpaceModel model = (CoeWorkSpaceModel) daoObj; + String uuid = model.getUUId(); + if (uuid.equals("")) { + model.setUUId(UUIDGener.getUUID()); + model.setWsVersionUuid(model.getUUId()); + model.setWsVer(1); + model.setIsUse(1);// 默认展示 + } + String sql = "insert into " + CoeWorkSpaceModel.DATABASE_ENTITY + " (" + CoeWorkSpaceModel.FIELD_UUID + "," + CoeWorkSpaceModel.FIELD_WS_NAME + "," + CoeWorkSpaceModel.FIELD_WS_DM + "," + CoeWorkSpaceModel.FIELD_WS_ADMIN + "," + CoeWorkSpaceModel.FIELD_WS_DESC + "," + CoeWorkSpaceModel.FIELD_WS_STATE + "," + CoeWorkSpaceModel.FIELD_WS_ORGTYPE + "," + CoeWorkSpaceModel.FIELD_WS_TCTYPE + "," + CoeWorkSpaceModel.FIELD_WS_BG_URL + "," + CoeWorkSpaceModel.FIELD_WS_VERSION_UUID + "," + CoeWorkSpaceModel.FIELD_WS_VER + "," + CoeWorkSpaceModel.FIELD_IS_USE + "," + CoeWorkSpaceModel.FIELD_WS_ORDERINDEX + ") values(?,?,?,?,?,?,?,?,?,?,?,?,?)"; + int wsOrgType = model.getWsOrgType() == null ? WsOrgTypeEnum.COMPANY.ordinal() : model.getWsOrgType().ordinal(); + Object[] args = { model.getUUId(), model.getWsName(), model.getWsDm(), model.getWsAdmin(), model.getWsDesc(), model.getWsState(), wsOrgType, model.getWsTctype(), model.getWsBgUrl(), model.getWsVersionUuid(), model.getWsVer(), model.getIsUse(), model.getWsOrderindex() }; + + int r = DBSql.update(sql, args); + try { + insertProcessLevel(model); // 创建子文件 + } catch (SQLException e) { + e.printStackTrace(); + } // 向流程分级表中插入数据 + return r; + } + + /** + * 创建资产库和默认流程文件(可选) + * @param daoObj + * @param createRepository 是否创建分级文件 + * @return + */ + public int insertObj(PlatformMetaModelBean daoObj, boolean createRepository) { + CoeWorkSpaceModel model = (CoeWorkSpaceModel) daoObj; + String uuid = model.getUUId(); + if (uuid.equals("")) { + model.setUUId(UUIDGener.getUUID()); + model.setWsVersionUuid(model.getUUId()); + model.setWsVer(1); + model.setIsUse(1);// 默认展示 + } + String sql = "insert into " + CoeWorkSpaceModel.DATABASE_ENTITY + " (" + CoeWorkSpaceModel.FIELD_UUID + "," + CoeWorkSpaceModel.FIELD_WS_NAME + "," + CoeWorkSpaceModel.FIELD_WS_DM + "," + CoeWorkSpaceModel.FIELD_WS_ADMIN + "," + CoeWorkSpaceModel.FIELD_WS_DESC + "," + CoeWorkSpaceModel.FIELD_WS_STATE + "," + CoeWorkSpaceModel.FIELD_WS_ORGTYPE + "," + CoeWorkSpaceModel.FIELD_WS_TCTYPE + "," + CoeWorkSpaceModel.FIELD_WS_BG_URL + "," + CoeWorkSpaceModel.FIELD_WS_VERSION_UUID + "," + CoeWorkSpaceModel.FIELD_WS_VER + "," + CoeWorkSpaceModel.FIELD_IS_USE + "," + CoeWorkSpaceModel.FIELD_WS_ORDERINDEX + ") values(?,?,?,?,?,?,?,?,?,?,?,?,?)"; + int wsOrgType = model.getWsOrgType() == null ? WsOrgTypeEnum.COMPANY.ordinal() : model.getWsOrgType().ordinal(); + Object[] args = { model.getUUId(), model.getWsName(), model.getWsDm(), model.getWsAdmin(), model.getWsDesc(), model.getWsState(), wsOrgType, model.getWsTctype(), model.getWsBgUrl(), model.getWsVersionUuid(), model.getWsVer(), model.getIsUse(), model.getWsOrderindex() }; + + int r = DBSql.update(sql, args); + if (createRepository) { + try { + insertProcessLevel(model); // 创建子文件 + } catch (SQLException e) { + e.printStackTrace(); + } // 向流程分级表中插入数据 + } + return r; + } + + @Override + public String entityName() { + return null; + } + + @Override + public RowMapper rowMapper() { + return null; + } + + /** + * 判断资产库是否暂停 + * + * @return + */ + public boolean isActiveWorkSpace(String wsid) { + String sql = "select WSSTATE from " + CoeWorkSpaceModel.DATABASE_ENTITY + " where ID='" + wsid + "'"; + return DBSql.getInt(sql, "WSSTATE") == 0; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/CoeWorkSpaceDaoFactory.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/CoeWorkSpaceDaoFactory.java new file mode 100644 index 00000000..b8779a65 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/CoeWorkSpaceDaoFactory.java @@ -0,0 +1,21 @@ +package com.actionsoft.apps.coe.pal.pal.ws.dao; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.bpms.commons.database.DaoFactory; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.ClassReflect; +import com.actionsoft.exception.AWSException; + +public class CoeWorkSpaceDaoFactory extends DaoFactory { + public static final String DAO_CLASSPATH = "com.actionsoft.apps.coe.pal.pal.ws.dao"; + + public static CoeWorkSpace createCoeWorkSpace() { + try { + Class c = ClassReflect.forName(DAO_CLASSPATH + "." + AWSServerConf.getDatabaseProvider() + ".CoeWorkSpaceAdapter", CoEConstant.APP_ID); + return (CoeWorkSpace)create(c); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + throw new AWSException(e); + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/db2/CoeWorkSpaceAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/db2/CoeWorkSpaceAdapter.java new file mode 100644 index 00000000..100875f3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/db2/CoeWorkSpaceAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.ws.dao.db2; + +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; + +public class CoeWorkSpaceAdapter extends CoeWorkSpace{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/informix/CoeWorkSpaceAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/informix/CoeWorkSpaceAdapter.java new file mode 100644 index 00000000..c051bdb3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/informix/CoeWorkSpaceAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.ws.dao.informix; + +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; + +public class CoeWorkSpaceAdapter extends CoeWorkSpace{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/mysql/CoeWorkSpaceAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/mysql/CoeWorkSpaceAdapter.java new file mode 100644 index 00000000..413b4f72 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/mysql/CoeWorkSpaceAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.ws.dao.mysql; + +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; + +public class CoeWorkSpaceAdapter extends CoeWorkSpace{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/oracle/CoeWorkSpaceAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/oracle/CoeWorkSpaceAdapter.java new file mode 100644 index 00000000..7069dc8f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/oracle/CoeWorkSpaceAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.ws.dao.oracle; + +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; + +public class CoeWorkSpaceAdapter extends CoeWorkSpace{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/oscar/CoeWorkSpaceAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/oscar/CoeWorkSpaceAdapter.java new file mode 100644 index 00000000..7a133e29 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/oscar/CoeWorkSpaceAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.ws.dao.oscar; + +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; + +public class CoeWorkSpaceAdapter extends CoeWorkSpace{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/postgresql/CoeWorkSpaceAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/postgresql/CoeWorkSpaceAdapter.java new file mode 100644 index 00000000..dabd7193 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/postgresql/CoeWorkSpaceAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.ws.dao.postgresql; + +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; + +public class CoeWorkSpaceAdapter extends CoeWorkSpace{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/sqlserver/CoeWorkSpaceAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/sqlserver/CoeWorkSpaceAdapter.java new file mode 100644 index 00000000..02b0ea55 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/sqlserver/CoeWorkSpaceAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.ws.dao.sqlserver; + +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; + +public class CoeWorkSpaceAdapter extends CoeWorkSpace{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/sybase/CoeWorkSpaceAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/sybase/CoeWorkSpaceAdapter.java new file mode 100644 index 00000000..25b45ea6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/dao/sybase/CoeWorkSpaceAdapter.java @@ -0,0 +1,7 @@ +package com.actionsoft.apps.coe.pal.pal.ws.dao.sybase; + +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; + +public class CoeWorkSpaceAdapter extends CoeWorkSpace{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/enums/WsOrgTypeEnum.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/enums/WsOrgTypeEnum.java new file mode 100644 index 00000000..06f054d2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/enums/WsOrgTypeEnum.java @@ -0,0 +1,61 @@ +package com.actionsoft.apps.coe.pal.pal.ws.enums; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.alibaba.fastjson.JSONObject; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.i18n.I18nRes; + + + +public enum WsOrgTypeEnum{ + BUSINESS("业务域","process.architecture.1.png") + ,COMPANY("公司","process.architecture.2.png") + ,GROUPCOMPANY("集团","process.architecture.3.png") + ,GLOBALCOMPANY("全球性集团","process.architecture.4.png"); + + private String name; + private String img; + WsOrgTypeEnum(String name,String img){ + this.name=name; + this.img=img; + } + public String getName() { + return name; + } + public String getImg() { + return img; + } + public int getIndex() { + return this.ordinal(); + } + public static String getSelect(WsOrgTypeEnum wsOrgTypeEnum,UserContext uc) { + StringBuffer select=new StringBuffer(); + WsOrgTypeEnum[] values = WsOrgTypeEnum.values(); + for (WsOrgTypeEnum wote : values) { + if(wsOrgTypeEnum.ordinal()==wote.ordinal()){ + select.append(""); + }else{ + select.append(""); + } + } + return select.toString(); + } + + public static JSONObject getObject(WsOrgTypeEnum wsOrgTypeEnum) { + JSONObject object = new JSONObject(); + object.put("orgTypeName", ""); + object.put("orgTypeImg", ""); + WsOrgTypeEnum[] values = WsOrgTypeEnum.values(); + for (WsOrgTypeEnum wote : values) { + if(wsOrgTypeEnum.ordinal()==wote.ordinal()){ + object.put("orgTypeName", wote.getName()); + object.put("orgTypeImg", wote.getImg()); + return object; + } + } + + return object; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/model/CoeWorkSpaceModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/model/CoeWorkSpaceModel.java new file mode 100644 index 00000000..b01f3f81 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/model/CoeWorkSpaceModel.java @@ -0,0 +1,168 @@ +package com.actionsoft.apps.coe.pal.pal.ws.model; + +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; +import com.actionsoft.apps.coe.pal.pal.ws.enums.WsOrgTypeEnum; + +/** + * 流程规划-流程资产 + * + * @author heliang + * + */ +public class CoeWorkSpaceModel extends PlatformMetaModelBean{ + + public static final String DATABASE_ENTITY = "APP_ACT_COE_PAL_WORKSPACE"; + + public static final String FIELD_UUID = "ID"; + public static final String FIELD_WS_NAME = "WSNAME"; + public static final String FIELD_WS_DM = "WSDM"; + public static final String FIELD_WS_DESC = "WSDESC"; + public static final String FIELD_WS_STATE = "WSSTATE"; + public static final String FIELD_WS_ORGTYPE = "WSORGTYPE"; + public static final String FIELD_WS_TCTYPE = "WSTCTYPE"; + public static final String FIELD_WS_BG_URL = "WSBGURL"; + public static final String FIELD_WS_ORDERINDEX = "WSORDERINDEX"; + public static final String FIELD_WS_VERSION_UUID = "WSVERSIONUUID"; + public static final String FIELD_WS_VER = "WSVER"; + public static final String FIELD_IS_USE = "ISUSE"; + public static final String FIELD_WS_ADMIN = "WSADMIN"; + + private String uuid=""; + private String wsVersionUuid=""; + private String wsName=""; + private String wsDm=""; + private String wsDesc; + private int wsState; + private int wsTctype; + private String wsBgUrl; + private int wsOrderindex; + private WsOrgTypeEnum wsOrgType; + private int wsVer; + private int isUse; + private String wsAdmin=""; + private String createUser; + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getModifyUser() { + return modifyUser; + } + + public void setModifyUser(String modifyUser) { + this.modifyUser = modifyUser; + } + + private String modifyUser; + public String getWsAdmin() { + return wsAdmin; + } + + public void setWsAdmin(String wsAdmin) { + this.wsAdmin = wsAdmin; + } + + public String getUUId() { + return uuid; + } + + public void setUUId(String uuid) { + this.uuid = uuid; + } + + public String getWsName() { + return wsName; + } + + public void setWsName(String wsName) { + this.wsName = wsName; + } + + public String getWsDm() { + return wsDm; + } + + public void setWsDm(String wsDm) { + this.wsDm = wsDm; + } + + public String getWsDesc() { + return wsDesc; + } + + public void setWsDesc(String wsDesc) { + this.wsDesc = wsDesc; + } + + public int getWsState() { + return wsState; + } + + public void setWsState(int wsState) { + this.wsState = wsState; + } + + public int getWsTctype() { + return wsTctype; + } + + public void setWsTctype(int wsTctype) { + this.wsTctype = wsTctype; + } + + public String getWsBgUrl() { + return wsBgUrl; + } + + public void setWsBgUrl(String wsBgUrl) { + this.wsBgUrl = wsBgUrl; + } + + public int getWsOrderindex() { + return wsOrderindex; + } + + public void setWsOrderindex(int wsOrderindex) { + this.wsOrderindex = wsOrderindex; + } + + public WsOrgTypeEnum getWsOrgType() { + return wsOrgType; + } + + public void setWsOrgType(WsOrgTypeEnum wsOrgType) { + this.wsOrgType = wsOrgType; + } + + public String getWsVersionUuid() { + return wsVersionUuid; + } + + public void setWsVersionUuid(String wsVersionUuid) { + this.wsVersionUuid = wsVersionUuid; + } + + + public int getWsVer() { + return wsVer; + } + + public void setWsVer(int wsVer) { + this.wsVer = wsVer; + } + + public int getIsUse() { + return isUse; + } + + public void setIsUse(int isUse) { + this.isUse = isUse; + } + + + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/ui/ContentPane.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/ui/ContentPane.java new file mode 100644 index 00000000..b2345b41 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/ui/ContentPane.java @@ -0,0 +1,262 @@ +package com.actionsoft.apps.coe.pal.pal.ws.ui; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.ws.constant.CoeWsConstant; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.team.user.model.CoeUserModel; +import com.actionsoft.i18n.I18nRes; + +public class ContentPane { + private static String template = ""; + + public static void getPane() { + StringBuffer pane = new StringBuffer(); + pane.append("
    • ");// style='width:174px' + // 不能设置前面一句话,因为这样设置后流水式的宽度会固定成174px。zhoux + // 2014-2-7 + pane.append(" "); + pane.append(" $rightTopContainer$"); + pane.append("
      "); + pane.append(" "); + pane.append("
      "); + pane.append("
        "); + pane.append("
      • $name$
      • "); + pane.append("
      • "); + pane.append(" $desc$"); + pane.append("
      • "); + pane.append("
      • "); + pane.append(" $btnGroup$"); + pane.append("
      • "); + pane.append("
      "); + pane.append("
      "); + pane.append("
    • "); + + template = pane.toString(); + + } + + /** + * @param rightTopContainer + * @param divTitle 鼠标放入pane上的title + * @param customAttr 自定义参数,如uuid = 'db08e7d1c7af910e0a11ff38c47611d3' + * @param imgUrl 图片url + * @param name 标题 + * @param desc 描述 + * @param btnGroup 按钮操作组,可以参照ContentPane.createWorkSpaceBtnGroup() + * @return + */ + public static String getPane(String rightTopContainer, String divTitle, String customAttr, String imgUrl, String name, String desc, String btnGroup) { + if (template.length() == 0) { + getPane(); + } + String pane = template; + pane = replace(pane, "$rightTopContainer$", rightTopContainer); + pane = replace(pane, "$divTitle$", divTitle); + pane = replace(pane, "$attr$", customAttr); + pane = replace(pane, "$imgUrl$", imgUrl); + pane = replace(pane, "$name$", name); + pane = replace(pane, "$desc$", desc); + pane = replace(pane, "$btnGroup$", btnGroup); + return pane; + } + + /** + * @param divTitle 鼠标放入pane上的title + * @param customAttr 自定义参数,如uuid = 'db08e7d1c7af910e0a11ff38c47611d3' + * @param imgUrl 图片url + * @param name 标题 + * @param desc 描述 + * @param btnGroup 按钮操作组,可以参照ContentPane.createWorkSpaceBtnGroup() + * @return + */ + public static String getPane(String rightTopContainer, String divTitle, String customAttr, String imgUrl, String name, String desc, String btnGroup, String warning) { + + StringBuffer pane = new StringBuffer(); + pane.append("
    • ");// style='width:174px' + // 不能设置前面一句话,因为这样设置后流水式的宽度会固定成174px。zhoux + // 2014-2-7 + pane.append(" "); + pane.append(" $rightTopContainer$"); + pane.append("
      "); + pane.append(" "); + pane.append("
      "); + pane.append("
        "); + pane.append("
      • $name$
      • "); + pane.append("
      • "); + pane.append(" $desc$"); + pane.append("
      • "); + pane.append("
      • "); + pane.append(" $btnGroup$"); + pane.append("
      • "); + pane.append("
      "); + pane.append("
      "); + pane.append("
    • "); + String pane1 = pane.toString(); + pane1 = replace(pane1, "$rightTopContainer$", rightTopContainer); + pane1 = replace(pane1, "$divTitle$", divTitle); + pane1 = replace(pane1, "$attr$", customAttr); + pane1 = replace(pane1, "$imgUrl$", imgUrl); + pane1 = replace(pane1, "$name$", name); + pane1 = replace(pane1, "$desc$", desc); + pane1 = replace(pane1, "$btnGroup$", btnGroup); + pane1 = replace(pane1, "$warning$", warning); + return pane1; + } + + private static String replace(String template, String $, String placeholder) { + + return template.replace($, placeholder); + } + + /** + * @param model 配置按钮所需的参数 + * @param lang + * @return + */ + // public static String createWorkSpaceBtnGroup(CoeWorkSpaceModel + // model,String lang){ + // String myStateStr; + // int myState; + // if (model.getWsState() == CoeWsConstant.CLOSE) { + // myStateStr = "启用"; + // myState = 0; + // } else { + // myStateStr = "停用"; + // myState = 1; + // } + // StringBuffer btnList = new StringBuffer(); + // btnList.append("
      "); + // btnList.append("").append("").append(""); + // btnList.append("").append("").append(""); + // btnList.append("").append("").append(""); + // if (model.getWsState() == CoeWsConstant.CLOSE) { + // btnList.append("").append("").append(""); + // } + // btnList.append("
      "); + // btnList.append("
      "); + // btnList.append("").append("").append(""); + // btnList.append("").append("").append(""); + // btnList.append("").append("").append(""); + // btnList.append("").append("").append(""); + // btnList.append("
      "); + // return btnList.toString(); + // } + + /** + * @param model 配置按钮所需的参数 + * @param lang + * @return + */ + public static String createWorkSpaceBtnGroup(CoeWorkSpaceModel model, String lang, String sid) { + String myStateStr; + int myState; + String icon; + if (model.getWsState() == CoeWsConstant.CLOSE) { + myStateStr = "启用"; + icon = "start.png"; + myState = 0; + } else { + myStateStr = "停用"; + icon = "pause.png"; + myState = 1; + } + StringBuffer btnList = new StringBuffer(); + btnList.append("
      "); + btnList.append("").append("").append(""); + btnList.append("").append("").append(""); + // 交付CoE_博林特的这个功能先隐藏 + // btnList.append("").append("").append(""); + // /btnList.append("").append("").append(""); + if (model.getWsState() == CoeWsConstant.CLOSE) { + btnList.append("").append("").append(""); + } + btnList.append("
      "); + // btnList.append("
      "); + // btnList.append("").append("").append(""); + // btnList.append("").append("").append(""); + // btnList.append("").append("").append(""); + // btnList.append("").append("").append(""); + // btnList.append("
      "); + return btnList.toString(); + } + + /** + * @param divTitle 鼠标放入pane上的title + * @param customAttr 自定义参数,如uuid = 'db08e7d1c7af910e0a11ff38c47611d3' + * @param imgUrl 图片url + * @param name 标题 + * @param desc 描述 + * @param btnGroup 按钮操作组,可以参照ContentPane.createWorkSpaceBtnGroup() + * @return + */ + public static String getCoeUserPane(String divTitle, String liId, String customAttr, String imgUrl, String name, String desc, String btnGroup) { + StringBuffer temp = new StringBuffer(); + temp.append("
    • "); + temp.append(" "); + temp.append("
      "); + temp.append(" "); + temp.append("
      "); + temp.append("
        "); + temp.append("
      • $name$
      • "); + temp.append("
      • "); + temp.append(" $desc$"); + temp.append("
      • "); + temp.append("
      • "); + temp.append(" $btnGroup$"); + temp.append("
      • "); + temp.append("
      "); + // template = temp.toString(); + String pane = temp.toString(); + pane = replace(pane, "$divTitle$", divTitle); + pane = replace(pane, "$attr$", customAttr); + pane = replace(pane, "$imgUrl$", imgUrl); + pane = replace(pane, "$name$", name); + pane = replace(pane, "$desc$", desc); + pane = replace(pane, "$btnGroup$", btnGroup); + return pane; + } + + /** + * @param model 配置高级用户首页面按钮所需的参数 + * @param lang + * @return + */ + public static String createCoeUserMainBtnGroup(String sid, CoeUserModel model, String lang, String currentUserId) { + StringBuffer btnList = new StringBuffer(); + btnList.append("
      "); + if (!"admin".equals(model.getUserId())) { + if (!model.getUserId().equals(currentUserId)) { + btnList.append("").append("").append(""); + btnList.append("").append("").append(""); + } + } + btnList.append("
      "); + return btnList.toString(); + } + + public static void main(String[] args) { +// System.out.println(getPane("运行", "abc", "123", "666", "999", "aaa", "ccc")); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/util/DataUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/util/DataUtil.java new file mode 100644 index 00000000..1a5d68c0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/util/DataUtil.java @@ -0,0 +1,308 @@ +package com.actionsoft.apps.coe.pal.pal.ws.util; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import org.apache.xmlbeans.XmlCursor; +import org.apache.xmlbeans.XmlException; +import org.apache.xmlbeans.XmlOptions; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; +import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition; +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; +import com.actionsoft.bpms.org.cache.DepartmentCache; +import com.actionsoft.bpms.org.cache.UserCache; +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.cache.CoeProcessLevelNoCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelDaoFacotory; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelSystemNameDaoFactory; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.enums.WsOrgTypeEnum; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.coe.xmlbeans.CoeProcessLevelDocument.CoeProcessLevel; +import com.actionsoft.coe.xmlbeans.CoeProcessLevelListDocument.CoeProcessLevelList; +import com.actionsoft.coe.xmlbeans.CoeWorkSpaceDocument; +import com.actionsoft.coe.xmlbeans.CoeWorkSpaceDocument.CoeWorkSpace; +import com.actionsoft.coe.xmlbeans.IdDocument.Id; +import com.actionsoft.coe.xmlbeans.LidDocument.Lid; +import com.actionsoft.coe.xmlbeans.PlawspidDocument.Plawspid; +import com.actionsoft.coe.xmlbeans.PlcolorDocument.Plcolor; +import com.actionsoft.coe.xmlbeans.PldescDocument.Pldesc; +import com.actionsoft.coe.xmlbeans.PldiagramurlDocument.Pldiagramurl; +import com.actionsoft.coe.xmlbeans.PlexectypeDocument.Plexectype; +import com.actionsoft.coe.xmlbeans.PlisbottomlevelDocument.Plisbottomlevel; +import com.actionsoft.coe.xmlbeans.PllevelDocument.Pllevel; +import com.actionsoft.coe.xmlbeans.PlmDocument.Plm; +import com.actionsoft.coe.xmlbeans.PlnameDocument.Plname; +import com.actionsoft.coe.xmlbeans.PlnoDocument.Plno; +import com.actionsoft.coe.xmlbeans.PlorderindexDocument.Plorderindex; +import com.actionsoft.coe.xmlbeans.PlparentidDocument.Plparentid; +import com.actionsoft.coe.xmlbeans.PlrdDocument.Plrd; +import com.actionsoft.coe.xmlbeans.PlrpDocument.Plrp; +import com.actionsoft.coe.xmlbeans.PlscurityrDocument.Plscurityr; +import com.actionsoft.coe.xmlbeans.PlscuritywDocument.Plscurityw; +import com.actionsoft.coe.xmlbeans.PlsystemnameDocument.Plsystemname; +import com.actionsoft.coe.xmlbeans.WsbgurlDocument.Wsbgurl; +import com.actionsoft.coe.xmlbeans.WsdescDocument.Wsdesc; +import com.actionsoft.coe.xmlbeans.WsdmDocument.Wsdm; +import com.actionsoft.coe.xmlbeans.WsidDocument.Wsid; +import com.actionsoft.coe.xmlbeans.WsnameDocument.Wsname; +import com.actionsoft.coe.xmlbeans.WsorderindexDocument.Wsorderindex; +import com.actionsoft.coe.xmlbeans.WsorgtypeDocument.Wsorgtype; +import com.actionsoft.coe.xmlbeans.WsstateDocument.Wsstate; +import com.actionsoft.coe.xmlbeans.WstctypeDocument.Wstctype; +import com.actionsoft.i18n.I18nRes; + +public class DataUtil { + public static final String COE_NAME_SPACE_URI = "http://xmlbeans.coe.actionsoft.com"; + + public static boolean expData(CoeWorkSpaceModel model, List CoeProcessLevelModels, File ff) { + boolean f = true; + CoeWorkSpaceDocument doc = CoeWorkSpaceDocument.Factory.newInstance(); + CoeWorkSpace coedoc = doc.addNewCoeWorkSpace(); + XmlCursor cursor = coedoc.newCursor(); + cursor.toNextToken(); + cursor.insertAttributeWithValue("targetNamespace", COE_NAME_SPACE_URI); + cursor.dispose(); + Id id = coedoc.addNewId(); + Wsname wsName = coedoc.addNewWsname(); + Wsdm wsdm = coedoc.addNewWsdm(); + Wsdesc wsdesc = coedoc.addNewWsdesc(); + Wsstate wsstate = coedoc.addNewWsstate(); + Wstctype wsctype = coedoc.addNewWstctype(); + Wsorderindex wsOrderindex = coedoc.addNewWsorderindex(); + Wsbgurl wsbgurl = coedoc.addNewWsbgurl(); + + Wsorgtype orgtype = coedoc.addNewWsorgtype(); + + id.setValue(model.getUUId()); + wsName.setValue(model.getWsName()); + wsdm.setValue(""); + wsdesc.setValue(model.getWsDesc()); + wsstate.setValue(0); + wsctype.setValue(model.getWsTctype()); + wsOrderindex.setValue(0); + wsbgurl.setValue(model.getWsBgUrl()); + orgtype.setValue(model.getWsOrgType().getIndex()); + + CoeProcessLevelList list = coedoc.addNewCoeProcessLevelList(); + for (PALRepositoryModel coeProcessLevelModel : CoeProcessLevelModels) { + CoeProcessLevel coeprocessLevel = list.addNewCoeProcessLevel(); + Lid lid = coeprocessLevel.addNewLid(); + Plawspid awspid = coeprocessLevel.addNewPlawspid(); + Plcolor plcolor = coeprocessLevel.addNewPlcolor(); + Pldesc pldesc = coeprocessLevel.addNewPldesc(); + Pldiagramurl url = coeprocessLevel.addNewPldiagramurl(); + Plexectype type = coeprocessLevel.addNewPlexectype(); + Plisbottomlevel plisbottomlevel = coeprocessLevel.addNewPlisbottomlevel(); + Pllevel pllevel = coeprocessLevel.addNewPllevel(); + Plm plm = coeprocessLevel.addNewPlm(); + Plname plname = coeprocessLevel.addNewPlname(); + Plno plno = coeprocessLevel.addNewPlno(); + Plorderindex orderindex = coeprocessLevel.addNewPlorderindex(); + Plrd plrd = coeprocessLevel.addNewPlrd(); + Plscurityw plscurityw = coeprocessLevel.addNewPlscurityw(); + Plsystemname plsystemname = coeprocessLevel.addNewPlsystemname(); + Wsid wsId = coeprocessLevel.addNewWsid(); + Plparentid plparentid = coeprocessLevel.addNewPlparentid(); + Plrp plrp = coeprocessLevel.addNewPlrp(); + Plscurityr plscurityr = coeprocessLevel.addNewPlscurityr(); + + lid.setValue(coeProcessLevelModel.getId()); + awspid.setValue(coeProcessLevelModel.getAWSProcessId()); + plcolor.setValue(coeProcessLevelModel.getColor()); + pldesc.setValue(coeProcessLevelModel.getDesc()); + url.setValue(coeProcessLevelModel.getDiagramUrl()); + type.setValue(coeProcessLevelModel.getExecType()); + plisbottomlevel.setValue(coeProcessLevelModel.isBottomLevel()); + pllevel.setValue(coeProcessLevelModel.getLevel()); + plm.setValue(coeProcessLevelModel.getMilestone()); + plname.setValue(coeProcessLevelModel.getName()); + plno.setValue(coeProcessLevelModel.getNo());// 编号 + orderindex.setValue(coeProcessLevelModel.getOrderIndex()); + plrd.setValue(coeProcessLevelModel.getOwnerDept()); + plscurityw.setValue(coeProcessLevelModel.getPlSecurityW());// 管理权限 + plscurityr.setValue(coeProcessLevelModel.getPlSecurityR());// 访问权限 + plsystemname.setValue(coeProcessLevelModel.getSystemName()); + wsId.setValue(coeProcessLevelModel.getWsId()); + plparentid.setValue(coeProcessLevelModel.getParentId()); + plrp.setValue(coeProcessLevelModel.getOwnerUser());// 责任人 + } + XmlOptions options = new XmlOptions(); + options.setSavePrettyPrint(); + options.setUseDefaultNamespace(); + try { + doc.save(ff, options); + } catch (IOException e) { + f = false; + e.printStackTrace(); + } + return f; + } + + public static String impData(File file) { + StringBuffer sb = new StringBuffer(); + String wsId = null; + try { + CoeWorkSpaceDocument doc = CoeWorkSpaceDocument.Factory.parse(file); + CoeWorkSpace coeWorkSpace = doc.getCoeWorkSpace(); + String coeWorkSpaceId = coeWorkSpace.getId().getValue(); + CoeWorkSpaceModel mo = (CoeWorkSpaceModel) CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstance(coeWorkSpaceId); + if (mo != null) { + return I18nRes.findValue(CoEConstant.APP_ID, "流程资产已经存在,导入失败!"); + } + CoeWorkSpaceModel model = new CoeWorkSpaceModel(); + model.setUUId(coeWorkSpaceId); + wsId = coeWorkSpaceId; + model.setWsBgUrl(coeWorkSpace.getWsbgurl().getValue()); + model.setWsDesc(coeWorkSpace.getWsdesc().getValue()); + model.setWsDm(coeWorkSpace.getWsdm().getValue()); + model.setWsName(coeWorkSpace.getWsname().getValue()); + model.setWsOrderindex(coeWorkSpace.getWsorderindex().getValue()); + model.setWsState(coeWorkSpace.getWsstate().getValue()); + model.setWsTctype(coeWorkSpace.getWstctype().getValue()); + model.setWsOrgType(WsOrgTypeEnum.values()[coeWorkSpace.getWsorgtype().getValue()]); + try { + CoeWorkSpaceDaoFactory.createCoeWorkSpace().insert(model); + CoeProcessLevelList list = coeWorkSpace.getCoeProcessLevelList(); + CoeProcessLevel[] coeProcessLevels = list.getCoeProcessLevelArray(); + for (int i = 0; i < coeProcessLevels.length; i++) { + CoeProcessLevel coeProcessLevel = coeProcessLevels[i]; + PALRepositoryModelImpl coeProcessLevelModel = new PALRepositoryModelImpl(); + String color = coeProcessLevel.getPlcolor().getValue(); + String plm = coeProcessLevel.getPlm().getValue(); + String plrp = coeProcessLevel.getPlrp().getValue();// 责任人 + String plrd = coeProcessLevel.getPlrd().getValue(); // 责任部门 + String awsPid = coeProcessLevel.getPlawspid().getValue();// 流程id + String plscurityr = coeProcessLevel.getPlscurityr().getValue(); // 可访问小组 + String plscurityw = coeProcessLevel.getPlscurityw().getValue(); + + StringBuffer nwerp = new StringBuffer(); // 新责任人 + StringBuffer nwerd = new StringBuffer();// 责任部门 + UtilString utp = new UtilString(plrp); + List vp = utp.split(" "); + int r = 0; + for (int j = 0,vpSize = vp.size(); j < vpSize; j++) { + String p = (String) vp.get(j); + if (p.indexOf("<") > -1) { + String tmpp = p.substring(0, p.indexOf("<")); + UserModel ue = (UserModel) UserCache.getModel(tmpp); + if (ue != null) { + if (r == 0) { + nwerp.append(p); + } else { + nwerp.append(" ").append(p); + } + r++; + } + } + } + + UtilString utd = new UtilString(plrd); + List vd = utd.split(" "); + int rr = 0; + for (int j = 0,vdSize = vd.size(); j vr = utr.split(","); + + UtilString utw = new UtilString(plscurityw); + List vw = utw.split(","); + + if (color.equals("")) { + color = "#FFF"; + } + if (plm.equals("")) { + plm = "0"; + } + String id = coeProcessLevel.getLid().getValue(); + coeProcessLevelModel.setId(id); + if (wfModel != null) { + coeProcessLevelModel.setAWSProcessId(awsPid); + // 临时注释 2014-2-12 zhoux + // storeCOEUserModel(nwerp.toString(), wfModel.getId()); + } + coeProcessLevelModel.setWsId(coeWorkSpaceId); + coeProcessLevelModel.setNo(coeProcessLevel.getPlno().getValue()); + coeProcessLevelModel.setName(coeProcessLevel.getPlname().getValue()); + coeProcessLevelModel.setColor(color); + coeProcessLevelModel.setDesc(coeProcessLevel.getPldesc().getValue()); + coeProcessLevelModel.setDiagramUrl(coeProcessLevel.getPldiagramurl().getValue()); + coeProcessLevelModel.setExecType(coeProcessLevel.getPlexectype().getValue()); + coeProcessLevelModel.setBottomLevel(coeProcessLevel.getPlisbottomlevel().getValue()); + coeProcessLevelModel.setLevel(coeProcessLevel.getPllevel().getValue()); + coeProcessLevelModel.setMilestone(plm); + coeProcessLevelModel.setOrderIndex(coeProcessLevel.getPlorderindex().getValue()); + coeProcessLevelModel.setParentId(coeProcessLevel.getPlparentid().getValue()); + coeProcessLevelModel.setOwnerDept(nwerd.toString()); + + coeProcessLevelModel.setOwnerUser(nwerp.toString()); + coeProcessLevelModel.setPlSecurityR(""); + coeProcessLevelModel.setPlSecurityW(""); + // 判断系统名称在此系统中是否存在 + String systemNameId = coeProcessLevel.getPlsystemname().getValue(); + PlatformMetaModelBean daoObjectModel = CoeProcessLevelSystemNameDaoFactory.createCoeProcessLevelSystemName().getInstance(systemNameId); + if (daoObjectModel != null) { + coeProcessLevelModel.setSystemName(systemNameId); + } else { + coeProcessLevelModel.setSystemName("-1"); + } + PALRepositoryModel m = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(id); + if (m != null) { + return I18nRes.findValue(CoEConstant.APP_ID, "流程分级") + m.getName() + I18nRes.findValue(CoEConstant.APP_ID, "已经存在,导入失败!") + "\n"; + } + int ids; + try { + ids = CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(coeProcessLevelModel); + + if (ids > 0) { + sb.append("1"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + e.printStackTrace(); + sb.append("-1"); + } + + } catch (XmlException e) { + sb.append("-1"); + e.printStackTrace(); + } catch (IOException e) { + sb.append("-1"); + e.printStackTrace(); + } + + if (sb.toString().indexOf("-1") > -1) { + return "-1"; + } else { + if(wsId!=null) + CoeProcessLevelNoCache.getInstance().reloadInBackground(wsId);// 重新装载编号 + return "1"; + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/web/CoeWorkSpaceWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/web/CoeWorkSpaceWeb.java new file mode 100644 index 00000000..7dc15a54 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/web/CoeWorkSpaceWeb.java @@ -0,0 +1,2046 @@ +package com.actionsoft.apps.coe.pal.pal.ws.web; +import java.util.Map; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.apps.lifecycle.api.AppsAPIManager; +import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.dc.DCProfileManager; +import com.actionsoft.bpms.server.fs.dc.DCUtil; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.backup.extend.CoEPALBackupProcessor; +import com.actionsoft.apps.coe.pal.pal.output.OutputAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.*; +import com.actionsoft.apps.coe.pal.pal.repository.dao.*; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerShapeCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.PALDesignerFileCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.constant.CoeDesignerConstant; +import com.actionsoft.apps.coe.pal.pal.repository.designer.io.file.helper.CoeFile; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.dao.DesignerShapeRelationDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.manager.DesignerRelationShapeCacheManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeCopyModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapePasteModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil; +import com.actionsoft.apps.coe.pal.pal.repository.model.*; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.constant.CoeFileConstant; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.dao.UpFileDao; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.model.UpfileModel; +import com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessRecycleWeb; +import com.actionsoft.apps.coe.pal.pal.ws.constant.CoeWsConstant; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.enums.WsOrgTypeEnum; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.pal.ws.ui.ContentPane; +import com.actionsoft.apps.coe.pal.pal.ws.util.DataUtil; +import com.actionsoft.apps.coe.pal.portal.web.CoEPortalSkins; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUserDaoFactory; +import com.actionsoft.apps.coe.pal.team.user.model.CoeUserModel; +import com.actionsoft.apps.coe.pal.teamwork.dao.TeamPerm; +import com.actionsoft.exception.AWSException; +import com.actionsoft.i18n.I18nRes; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; +import org.apache.commons.lang3.StringUtils; + +public class CoeWorkSpaceWeb extends ActionWeb { + private UserContext _uc; + static { + loadShapeCache(); + } + + /** + * 加载文件中的图形 + */ + public static void loadShapeCache() { + new Thread(new Runnable() { + @Override + public void run() { + List list = PALRepositoryQueryAPIManager.getInstance().getPALRepositoryModelList(); + for (PALRepositoryModel model : list) { + String filePath = model.getFilePath(); + String fileId = model.getId(); + if (filePath != null && !"".equals(filePath)) { + UtilFile jsonFilePath = new UtilFile(filePath + fileId + ".json"); + if (jsonFilePath.exists()) { + String jsonString = jsonFilePath.readStrUTF8(); + if (jsonString != null && !"".equals(jsonString)) { + JSONArray josnArr = JSONArray.parseArray(jsonFilePath.readStrUTF8()); + CoeDesignerShapeCache.getCache().put(fileId, josnArr); + } + } + } + } + } + }).start(); + } + + public CoeWorkSpaceWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + private static String filePath = null; + + // 跳转到指定页面wrokspace页面 + public String getCoeWorkSpaceHtml() { + getSumRecodes(); + Map macroLibraries = new HashMap(); + macroLibraries.put("coePortal", CoEPortalSkins.getCoESkinsName(getContext())); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("uid", super.getContext().getUID()); + macroLibraries.put("userNameAlias", super.getContext().getUserModel().getUserNameAlias()); + CoeWorkSpace dao = new CoeWorkSpace(); + List records = dao.getInstanceAll(); // 所有记录条数 + macroLibraries.put("isEmpty", records.size() == 0); + macroLibraries.put("bpmToPalButton", SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "OPEN_BPM_TO_PAL", true) ? "" : ""); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.ws.portal.htm", macroLibraries); + } + + public String getCoeWorkSpaceGridData() { + List records = getCoeWorkSpaceModelRecodes(); // 所有记录条数 + JSONArray result = new JSONArray(); + String userId = super.getContext().getUserModel().getUID(); + int j = 0; + int size = records.size(); + for (int i = 0; i < size; i++) { + CoeWorkSpaceModel wsModel = records.get(i); + if (wsModel.getWsAdmin() != null && wsModel.getWsAdmin().contains(userId) || (wsModel.getWsDm() != null && wsModel.getWsDm().contains(userId)) || ("admin".equals(userId))) { + JSONObject object = JSONObject.parseObject(wsModel.toJson()); + if (UtilString.isEmpty(object.getString("UUId"))) { + object.put("UUId", object.getString("uUId")); + } + object.put("orgTypeName", WsOrgTypeEnum.getObject(wsModel.getWsOrgType()).get("orgTypeName")); + object.put("orgTypeImg", WsOrgTypeEnum.getObject(wsModel.getWsOrgType()).get("orgTypeImg")); + int tcType = wsModel.getWsTctype(); + if (tcType == 0) { + object.put("tcType", "二分法"); + } else if (tcType == 1) { + object.put("tcType", "三分法"); + } else { + object.put("tcType", "自定义"); + } + result.add(object); + j++; + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("result", result); + ro.put("size", j); + return ro.toString(); + } + + /** + * 获取所有启用中且有权限的资产库 + * @return + */ + public List getActiveCoeWorkSpaceData() { + List result = new ArrayList<>(); + List records = getCoeWorkSpaceModelRecodes(); // 所有记录条数 + String userId = super.getContext().getUserModel().getUID(); + int size = records.size(); + for (int i = 0; i < size; i++) { + CoeWorkSpaceModel wsModel = records.get(i); + if (wsModel.getWsState() == CoeWsConstant.CLOSE) { + continue; + } + if ((wsModel.getWsAdmin() != null && wsModel.getWsAdmin().contains(userId)) || (wsModel.getWsDm() != null && wsModel.getWsDm().contains(userId)) || ("admin".equals(userId))) { + result.add(wsModel); + } + } + return result; + } + + // 获取每一个元素 + public String getItemHtml(CoeWorkSpaceModel model) { + String title = I18nRes.findValue(CoEConstant.APP_ID, super.getContext().getLanguage(), "单击打开"); + String imgUrl = ""; + String name = ""; + // String desc = ""; + String state = "0"; + if (model.getWsState() == CoeWsConstant.OPEN) { + imgUrl = "../apps/" + CoEConstant.APP_ID + "/img/ws/" + model.getWsOrgType().getImg(); + } else { + imgUrl = "../apps/" + CoEConstant.APP_ID + "/img/ws/close_" + model.getWsOrgType().getImg(); + state = "1"; + title = ""; + } + String customAttr = "wsuuid='" + model.getUUId() + "' state='" + state + "'"; + name = model.getWsName()/* + " " + + * VersionUtil.getVerStr(model.getWsVer()) */; + // desc = model.getWsDesc(); + + return ContentPane.getPane("", title, customAttr, imgUrl, name, "", ContentPane.createWorkSpaceBtnGroup(model, super.getContext().getLanguage(), super.getContext().getSessionId())); + } + + private String getCoeWsStopState(CoeWorkSpaceModel wsModel, int state) { + String myStateStr = ""; + int myState; + String stop = ""; + if (state == CoeWsConstant.CLOSE) { + myStateStr = ""; + myState = 0; + } else { + myStateStr = ""; + myState = 1; + } + stop = ""; + return stop; + } + + /** + * 根据传入数据得到分页数据 + * + * @param start + * @param limit + * @return + */ + public List getCoeWorkSpaceModelRecodes(int start, int limit) { + return CoeWorkSpaceDaoFactory.createCoeWorkSpace().getCoeWorkSpaceModelRecodes(start, limit); + } + + /** + * 得到所有数据 + * @return + */ + public List getCoeWorkSpaceModelRecodes() { + return CoeWorkSpaceDaoFactory.createCoeWorkSpace().getCoeWorkSpaceModelRecodesNoPage(); + } + + /** + * 获取总记录数 + * @return + */ + public int getSumRecodes() { + return CoeWorkSpaceDaoFactory.createCoeWorkSpace().getSumRecodes(); + } + + // 新建 更新 流程资产 + public String createOrUpdateWorkspace(String uuid) { + String wsUUID = ""; + String wsName = ""; + String wsDm = ""; + String wsAdmin = ""; + String wsDesc = ""; + int state = 0; + int tctype = 0; + String wsBgUrl = ""; + int orderindex = 0; + String wsOrgTypeSelect = ""; + // 更新 + if (!uuid.equals("") && (!uuid.equals("0"))) { + CoeWorkSpaceModel wsModel = (CoeWorkSpaceModel) CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstance(uuid); + wsUUID = uuid; + wsName = wsModel.getWsName(); + wsDm = wsModel.getWsDm(); + wsAdmin = wsModel.getWsAdmin(); + wsDesc = wsModel.getWsDesc(); + state = wsModel.getWsState(); + tctype = wsModel.getWsTctype(); + wsBgUrl = wsModel.getWsBgUrl(); + orderindex = wsModel.getWsOrderindex(); + wsOrgTypeSelect = WsOrgTypeEnum.getSelect(wsModel.getWsOrgType(), super.getContext()); + } else { + wsOrgTypeSelect = WsOrgTypeEnum.getSelect(WsOrgTypeEnum.COMPANY, super.getContext()); + } + Map macroLibraries = new HashMap(); + macroLibraries.put("coePortal", CoEPortalSkins.getCoESkinsName(getContext())); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("wsName", wsName); + macroLibraries.put("wsDesc", wsDesc); + macroLibraries.put("wsDm", getUserName(wsDm)); + macroLibraries.put("wsDmId", wsDm); + macroLibraries.put("wsAdmin", getUserName(wsAdmin)); + macroLibraries.put("wsAdminId", wsAdmin); + macroLibraries.put("state", state); + macroLibraries.put("tctype", tctype); + macroLibraries.put("wsBgUrl", wsBgUrl); + macroLibraries.put("orderindex", orderindex); + macroLibraries.put("wsid", wsUUID); + macroLibraries.put("sid", getContext().getSessionId()); + macroLibraries.put("wsOrgTypeSelect", wsOrgTypeSelect); + macroLibraries.put("uid", super.getContext().getUID()); + macroLibraries.put("userNameAlias", super.getContext().getUserModel().getUserNameAlias()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.ws.create.htm", macroLibraries); + } + + /** + * 导入资产库 + * @return + * @author tanj + */ + public String importWorkspace() { + Map macroLibraries = new HashMap(); + CoeWorkSpace cws = new CoeWorkSpace(); + List modelList = cws.getInstanceAll(); + CoeWorkSpaceModel wsModel; + JSONArray jsonArr = new JSONArray(); + for (int i = 0; i < modelList.size(); i++) { + wsModel = modelList.get(i); + JSONObject obj = new JSONObject(); + obj.put("value", wsModel.getUUId()); + obj.put("text", wsModel.getWsName()); + if (wsModel.getWsState() == 0) { + jsonArr.add(obj); + } + } + // 服务器文件导入的doccenter/" + CoEConstant.APP_ID + "/tmp/imp/repository下的文件的目录 + JSONArray impRepsitorys = new JSONArray(); + JSONObject seat0 = new JSONObject(); + seat0.put("id", "seat0"); + seat0.put("text", "请选择文件"); + impRepsitorys.add(seat0); + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + DCContext dc = new DCContext(_uc, dcProfile, CoEConstant.APP_ID, "imp", "repository"); + File ff_dir = new File(dc.getPath()); + if(ff_dir.exists() && ff_dir.isDirectory()) { + //筛选备份文件 + File[] ff_total = ff_dir.listFiles(); + List ff_baks = new ArrayList(); + if(ff_total!=null && ff_total.length > 0) { + for(int i = 0; i < ff_total.length; i++) { + + if(ff_total[i].isFile() && ff_total[i].getName().endsWith(".bak")) { + ff_baks.add(ff_total[i]); + } + } + } + //按最后修改时间降序 + ff_baks.sort(new Comparator() { + public int compare(File f1, File f2) { + long diff = f1.lastModified() - f2.lastModified(); + if (diff > 0) + return -1; + else if (diff == 0) + return 0; + else + return 1; + } + }); + // + for(File ff_bak : ff_baks) { + String name = ff_bak.getName(); + JSONObject impRepsitory = new JSONObject(); + impRepsitory.put("id", name); + impRepsitory.put("text", name); + impRepsitorys.add(impRepsitory); + } + } + macroLibraries.put("appId", CoEConstant.APP_ID); + macroLibraries.put("sid", _uc.getSessionId()); + macroLibraries.put("wsNameList", jsonArr); + macroLibraries.put("impRepositorys", impRepsitorys); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.ws.import.htm", macroLibraries); + } + + /** + * 获取服务器中的待导入资产库文件 + * @return + */ + public String getPALWSRemoteImportData() { + ResponseObject ro = ResponseObject.newOkResponse(); + // 服务器文件导入的doccenter/" + CoEConstant.APP_ID + "/tmp/imp/repository下的文件的目录 + JSONArray impRepsitorys = new JSONArray(); + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + DCContext dc = new DCContext(_uc, dcProfile, CoEConstant.APP_ID, "imp", "repository"); + File ff_dir = new File(dc.getPath()); + if(ff_dir.exists() && ff_dir.isDirectory()) { + //筛选备份文件 + File[] ff_total = ff_dir.listFiles(); + List ff_baks = new ArrayList(); + if(ff_total!=null && ff_total.length > 0) { + for(int i = 0; i < ff_total.length; i++) { + + if(ff_total[i].isFile() && ff_total[i].getName().endsWith(".bak")) { + ff_baks.add(ff_total[i]); + } + } + } + //按最后修改时间降序 + ff_baks.sort(new Comparator() { + public int compare(File f1, File f2) { + long diff = f1.lastModified() - f2.lastModified(); + if (diff > 0) + return -1; + else if (diff == 0) + return 0; + else + return 1; + } + }); + // + for(File ff_bak : ff_baks) { + String name = ff_bak.getName(); + JSONObject impRepsitory = new JSONObject(); + impRepsitory.put("label", name); + impRepsitory.put("value", name); + impRepsitorys.add(impRepsitory); + } + } + ro.put("impRepsitorys", impRepsitorys); + return ro.toString(); + } + + /** + * 获取资产库数据JSON + * @param wsId + * @param pid + * @return + */ + public String getRepositoryTreeData(String wsId, String pid) { + if (pid == null || "".equals(pid)) { + return PALRepositoryQueryAPIManager.getInstance().getPalRepositoryTreeRootData(_uc, wsId, "process", "isUsed").toString(); + } else { + return PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryTreeDataByPid(_uc, wsId, pid).toString(); + } + } + + /** + * 判断资产库中是否有相同id的workspace + * @param wsFileName + * @return + */ + public String workspaceIsExist(String wsFileName, String source) { + ResponseObject ro = ResponseObject.newOkResponse(); + + String wsuuid = wsFileName.indexOf("(") > -1 ? wsFileName.substring(0, wsFileName.indexOf("(")) : wsFileName.substring(0, wsFileName.indexOf(".")); + wsuuid = wsuuid.trim(); + DCContext dcContext = null; + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + if (dcProfile != null) { + if(source!=null && source.equals("remote")) { //服务器文件上传 + dcContext = new DCContext(super.getContext(), dcProfile, CoEConstant.APP_ID, "imp", "repository", wsFileName); + } else { //本地文件上传 + dcContext = new DCContext(super.getContext(), dcProfile, CoEConstant.APP_ID, "Normal", "Normal", wsFileName); + } + } + if (dcContext == null) { + throw new AWSException("上传的流程资产库文件不存在"); + } + String path = dcContext.getPath(); + String filePath = dcContext.getFilePath(); + UtilFile file = new UtilFile(filePath); + if (file.exists()) { + try { + UtilFile.zipExpand(file, path); + } catch (Exception e) { + e.printStackTrace(); + ro = ResponseObject.newErrResponse("请上传正确的流程资产文件"); + return ro.toString(); + } + } + UtilFile txtFile = new UtilFile(path + "/wsMessage.txt"); + String txtData = null; + try { + if (txtFile.isFile() && txtFile.exists()) { + InputStreamReader read = new InputStreamReader(new FileInputStream(txtFile), "UTF-8"); + BufferedReader buff = new BufferedReader(read); + txtData = buff.readLine(); + buff.close(); + } + } catch (IOException e) { + e.printStackTrace(); + ro = ResponseObject.newErrResponse("请上传正确的流程资产文件"); + return ro.toString(); + } + JSONObject jsonObj = JSONObject.parseObject(txtData); + String wsId = jsonObj.containsKey("wsId") ? jsonObj.getString("wsId") : ""; + CoeWorkSpace coe = CoeWorkSpaceDaoFactory.createCoeWorkSpace(); + if (!UtilString.isEmpty(wsId) && wsId.equals(wsuuid)) { + CoeWorkSpaceModel model = coe.getInstance(wsId); + if (model == null) { + ro.put("message", "nexist"); + } else { + ro.put("message", "exist"); + } + } else { + ro = ResponseObject.newErrResponse("请上传正确的流程资产文件"); + return ro.toString(); + } + return ro.toString(); + } + + /** + * 根据UserId拼接"userId" + * + * @param userIds + * @return + */ + private String getUserName(String userIds) { + if (userIds != null && !"".equals(userIds)) { + String[] userIdArray = userIds.split(","); + StringBuilder userName = new StringBuilder(); + for (String userId : userIdArray) { + CoeUserModel userModel = (CoeUserModel) CoeUserDaoFactory.createUser().getInstanceByUserId(userId); + if (userModel != null) { + userName.append(userId + "<" + userModel.getUserName() + "> "); + } + } + + return userName.toString(); + } + return ""; + } + + /** + * 保存空间 + * + * @param uuid + * @param wsName + * @param wsDm + * @param wsAdmin + * @param wsDsc + * @param state + * @param tctype + * @param wsBgUrl + * @param orderIndex + * @return + */ + public String saveCoeWorkspace(String uuid, String wsName, String wsDm, String wsAdmin, String wsDsc, int state, int tctype, String wsBgUrl, int orderIndex, int wsOrgType) { + StringBuffer info = new StringBuffer(); + CoeWorkSpace coe = CoeWorkSpaceDaoFactory.createCoeWorkSpace(); + CoeWorkSpaceModel obj = new CoeWorkSpaceModel(); + obj.setWsName(wsName); + obj.setWsDm(wsDm); + if ("".equals(wsAdmin.trim())) { + obj.setWsAdmin(super.getContext().getUserModel().getUID()); + } else { + obj.setWsAdmin(wsAdmin); + } + obj.setWsDesc(wsDsc); + obj.setWsState(state); + obj.setWsTctype(tctype); + obj.setWsBgUrl(wsBgUrl); + obj.setWsOrgType(WsOrgTypeEnum.values()[wsOrgType]); + obj.setWsVer(1); + try { + if (uuid.equals("")) { + uuid = UUIDGener.getUUID(); + obj.setWsOrderindex(getSumRecodes() + 1); + obj.setUUId(uuid); + obj.setWsVersionUuid(obj.getUUId()); + obj.setWsVer(1); + obj.setIsUse(1);// 默认展示 + obj.setCreateUser(_uc.getUID()); + obj.setModifyUser(_uc.getUID()); + coe.insertObj(obj); + obj.setWsTctype(tctype); + + coe.update(obj); + } else { + obj.setUUId(uuid); + obj.setWsOrderindex(orderIndex); + CoeWorkSpaceModel wsModel = (CoeWorkSpaceModel) coe.getInstance(uuid); + if (wsModel != null) { + obj.setWsState(wsModel.getWsState()); + } + coe.update(obj); + } + info.append("1"); + } catch (Exception e) { + e.printStackTrace(); + info.append("-1"); + } + CoeProcessLevelNoCache.getInstance().reload(uuid); + ResponseObject ro = ResponseObject.newOkResponse(info.toString()); + ro.put("uuid", uuid); + return ro.toString(); + } + + /** + * 保存导入的空间 + * @param wsFileName 导入的文件名 + * @param source local-本地上传 remote-服务器上传 + * @return + * @author tanj + * @throws Exception + */ + public String saveImportCoeWorkspace(String wsFileName, String replaceChoice, String source) throws Exception { + ResponseObject ro = ResponseObject.newOkResponse("导入成功"); + DCContext dcContext = null; + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, "tmp"); + if (dcProfile != null) { + if(source!=null && source.equals("remote")) { + dcContext = new DCContext(super.getContext(), dcProfile, CoEConstant.APP_ID, "imp", "repository", wsFileName); + } else { + dcContext = new DCContext(super.getContext(), dcProfile, CoEConstant.APP_ID, "Normal", "Normal", wsFileName); + } + } + if (dcContext == null) { + ro = ResponseObject.newErrResponse("导入失败"); + return ro.toString(); + } + String path = dcContext.getPath(); + String filePath = dcContext.getFilePath(); + UtilFile file = new UtilFile(filePath); + if (file.exists()) { + // 解压前删除config.json文件,该文件单独存在,存储文件属性配置、节点属性配置、形状配置,后续使用config.json是否存在作为判断条件,若不删除,一定条件下(之前存在config.json,新导入的不存在情境下)会出现影响sunlh + UtilFile configFile = new UtilFile(path + "/" + "config.json"); + if (configFile.exists()) { + configFile.delete(); + } + + try { + UtilFile.zipExpand(file, path); + } catch (Exception e) { + e.printStackTrace(); + ro = ResponseObject.newErrResponse("资产库文件解压失败,请上传正确的资产库文件"); + return ro.toString(); + } + } + UtilFile txtFile = new UtilFile(path + "/wsMessage.txt"); + String txtData = null; + try { + if (txtFile.isFile() && txtFile.exists()) { + InputStreamReader read = new InputStreamReader(new FileInputStream(txtFile), "UTF-8"); + BufferedReader buff = new BufferedReader(read); + txtData = buff.readLine(); + buff.close(); + } + } catch (IOException e) { + e.printStackTrace(); + ro = ResponseObject.newErrResponse("资产库文件读取失败"); + return ro.toString(); + } + JSONObject jsonObj = JSONObject.parseObject(txtData); + String wsId = jsonObj.containsKey("wsId") ? jsonObj.getString("wsId") : ""; + CoeWorkSpace coe = CoeWorkSpaceDaoFactory.createCoeWorkSpace(); + String wsName = jsonObj.containsKey("wsName") ? jsonObj.getString("wsName") : ""; + if (!UtilString.isEmpty(wsId)) { + CoeWorkSpaceModel model = coe.getInstance(wsId); + PALRepositoryRemove removeDao = new PALRepositoryRemove(); + CoeProcessRecycleWeb web = new CoeProcessRecycleWeb(_uc); + // 删除回收站中存在的流程 + List rList = removeDao.getModelsByWsId(wsId); + StringBuffer sb = new StringBuffer(); + for (PALRepositoryRemoveModel rModel : rList) { + sb.append("'" + rModel.getRemoveId() + "',"); + } + if (sb.length() > 0) { + web.deleteResource(sb.substring(0, sb.length() - 1)); + } + if (model == null) { + // 新建 + CoeWorkSpaceModel obj = new CoeWorkSpaceModel(); + obj.setUUId(wsId); + obj.setWsName(jsonObj.getString("wsName")); + // obj.setWsAdmin(jsonObj.getString("wsAdmin")); + obj.setWsAdmin("admin".equals(_uc.getUID()) ? "admin" : ("admin," + _uc.getUID()));// 新导入默认管理员为当前用户和admin + obj.setWsDm(jsonObj.getString("wsDm")); + obj.setWsDesc(jsonObj.getString("wsDesc")); + obj.setWsState(Integer.parseInt(jsonObj.getString("wsState"))); + obj.setWsOrgType(WsOrgTypeEnum.values()[Integer.parseInt(jsonObj.getString("wsOrgType"))]); + obj.setWsTctype(Integer.parseInt(jsonObj.getString("wsTctype"))); + obj.setWsBgUrl(jsonObj.getString("wsBgUrl")); + obj.setWsOrderindex(Integer.parseInt(jsonObj.getString("wsOrderIndex"))); + obj.setWsVer(Integer.parseInt(jsonObj.getString("wsVer"))); + obj.setWsVersionUuid(wsId); + obj.setIsUse(Integer.parseInt(jsonObj.getString("isUse"))); + obj.setCreateUser(_uc.getUID()); + obj.setModifyUser(_uc.getUID()); + + coe.insertObj(obj); + // 处理文件 + if (!recoverImportBackup(path, wsId, "", "createWs")) { + ro = ResponseObject.newErrResponse(); + return ro.toString(); + } + } else { + // 处理文件 + if (!recoverImportBackup(path, wsId, replaceChoice, "replaceWs")) { + ro = ResponseObject.newErrResponse(); + return ro.toString(); + } + } + // 更新关联数据-数据迁移 + CoeProcessLevelUtil.updateCorrelateData(); + // 删除关联推送失效的数据 + CoEPALBackupProcessor backProcessor = new CoEPALBackupProcessor(); + backProcessor.delInvalidCorrelateData(wsId); + // 更新关联表数据存储格式 + CoeProcessLevelUtil.correctFileRelationPropData(wsId); + if (!jsonObj.containsKey("upgradeDefaultAttr") || jsonObj.getBooleanValue("upgradeDefaultAttr")) { + // 老版本的默认属性处理为新版本自定义属性 + CoeProcessLevelUtil.updateDefaultAttr2CustomAttr(_uc, wsId, false); + } + } + ro.put("wsName", wsName); + ro.put("wsDesc", jsonObj.getString("wsDesc")); + ro.put("wsOrgType", WsOrgTypeEnum.values()[Integer.parseInt(jsonObj.getString("wsOrgType"))]); + ro.put("wsId", wsId); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_WORKSPACE, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_WORKSPACE_IMPORT_CREATE); + } + return ro.toString(); + } + + // 在导入的资产库中,恢复备份的信息 + public boolean recoverImportBackup(String path, String wsId, String replaceChoice, String importChoice) throws Exception { + UtilFile repositoryDir = new UtilFile(path); + if (!repositoryDir.exists() || !repositoryDir.isDirectory()) { + return false; + } + UtilFile repositoryFile = new UtilFile(path + "/" + "repository.json"); + if (!repositoryFile.exists()) { + return false; + } + //判断config.json是否存在 + boolean mark = true; + UtilFile configFile = new UtilFile(path + "/" + "config.json"); + if (!configFile.exists()) { + mark = false; + } + // 数据对象 + JSONArray repositoryArray = JSONArray.parseArray(repositoryFile.readStrUTF8()); + List repositoryList = new ArrayList(); + List shapeRelationList = new ArrayList(); + List upfileList = new ArrayList(); + List repositoryPropertyList = new ArrayList(); + Map propertyMap = new HashMap(); + List correlateList = new ArrayList<>(); + List specialPropertyList = new ArrayList<>(); + // fileArray 存储有关流程文件的repository model 信息 + JSONArray fileArray = new JSONArray(); + JSONArray upfileArray = new JSONArray(); + // 删除数据库中之前的数据,再插入新数据 + PALRepository repositoryDao = new PALRepository(); + DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); + UpFileDao upfileDao = new UpFileDao(); + PALRepositoryPropertyDao repositoryPropertyDao = new PALRepositoryPropertyDao(); + CoeProcessLevelCorrelateDao correlateDao = new CoeProcessLevelCorrelateDao(); + PALRepositorySpecialPropertyDao specialPropertyDao = new PALRepositorySpecialPropertyDao(); + //文件属性配置,节点属性配置,形状配置的dao + PALRepositoryShapeConfigDao shapeConfigDao = new PALRepositoryShapeConfigDao(); + PALRepositoryAttributeDao fileAttrDao = new PALRepositoryAttributeDao(); + PALRepositoryShapeAttributeDao shapeAttrDao = new PALRepositoryShapeAttributeDao(); + for (int i = 0; i < repositoryArray.size(); i++) { + JSONObject object = repositoryArray.getJSONObject(i); + PALRepositoryModelImpl repository = new PALRepositoryModelImpl(); + String repositoryId = object.getString("id"); + if (importChoice.equals("createWs")) { + recoverData(object, repositoryList, fileArray, upfileArray, shapeRelationList, upfileList, repositoryPropertyList, propertyMap, correlateList, specialPropertyList); + } else if (importChoice.equals("replaceWs")) { + if ((PALRepositoryCache.getCache().get(repositoryId) != null && replaceChoice.equals("replace")) || (PALRepositoryCache.getCache().get(repositoryId) == null)) { + // + if (PALRepositoryRemoveCache.getCache().get(repositoryId) != null) { + continue; + } + recoverData(object, repositoryList, fileArray, upfileArray, shapeRelationList, upfileList, repositoryPropertyList, propertyMap, correlateList, specialPropertyList); + } + } + } + if (replaceChoice.equals("replace")) { + List currentWsRepositoryList = PALRepositoryQueryAPIManager.getInstance().getPALRepositoryModelList(wsId); + List diffRepositoryList = new ArrayList(); + for (int j = 0; j < currentWsRepositoryList.size(); j++) { + PALRepositoryModel model = currentWsRepositoryList.get(j); + String curRepositoryId = model.getId(); + String repositoryIdFlag = ""; + for (int k = 0; k < repositoryArray.size(); k++) { + JSONObject object = repositoryArray.getJSONObject(k); + String repositoryId = object.getString("id"); + if (PALRepositoryCache.getCache().get(repositoryId) != null && repositoryId.equals(curRepositoryId)) { + repositoryIdFlag = repositoryId; + break; + } + } + if (!UtilString.isEmpty(repositoryIdFlag)) { + continue; + } + diffRepositoryList.add(model); + } + for (PALRepositoryModel repositoryModel : diffRepositoryList) { + String repositoryModelId = repositoryModel.getId(); + String repositoryPlrId = repositoryModel.getPlRid(); + repositoryList.add(repositoryModel); + List curShapeRelationList = relationDao.getModelListByFileId(repositoryModelId); + shapeRelationList.addAll(curShapeRelationList); + List curUpfileList = upfileDao.searchByRepositoryId(repositoryModelId); // APP_ACT_COE_PAL_UPFILE表中的数据 + upfileList.addAll(curUpfileList); + List curRepositoryPropertyList = repositoryPropertyDao.getPropertysByPlid(repositoryModelId, null); + repositoryPropertyList.addAll(curRepositoryPropertyList); + Map property = CoePropertyUtil.getPropertysValue(" PROPERTYKEY='" + repositoryModelId + "_attr' OR PROPERTYKEY='mark_" + repositoryPlrId + "' OR PROPERTYKEY='link_" + repositoryPlrId + "' OR PROPERTYKEY='link_app_" + repositoryPlrId + "' OR PROPERTYKEY='use_" + repositoryPlrId + "' "); // + propertyMap.putAll(property); + } + } + + List fileAttrList = Lists.newArrayList(); + List shapeAttrList = Lists.newArrayList(); + List shapeConfigList = Lists.newArrayList(); + if (mark) { + JSONObject configJson = JSON.parseObject(configFile.readStrUTF8()); + fileAttrList = JSON.parseArray(configJson.getString("fileAttribute"), PALRepositoryAttributeModel.class); + shapeAttrList = JSON.parseArray(configJson.getString("shapeAttribute"), PALRepositoryShapeAttributeModel.class); + shapeConfigList = JSON.parseArray(configJson.getString("shapeConfig"), PALRepositoryShapeConfigModel.class); + } + + // 删除当前数据 + if (importChoice.equals("createWs") || replaceChoice.equals("replace")) { + repositoryDao.deleteRepositorysByWsId(wsId); + } + if (importChoice.equals("createWs") || replaceChoice.equals("replace") && mark) { + repositoryDao.deleteFileShapeAttrByWsId(wsId); + } + if (repositoryList != null && repositoryList.size() > 0) { + repositoryDao.batchInsert(repositoryList); + } + if (shapeRelationList != null && shapeRelationList.size() > 0) { + relationDao.barchInsert(shapeRelationList); + } + if (upfileList != null && upfileList.size() > 0) { + upfileDao.batchInsert(upfileList); + } + if (repositoryPropertyList != null && repositoryPropertyList.size() > 0) { + repositoryPropertyDao.batchInsert(repositoryPropertyList); + } + if (propertyMap != null && propertyMap.size() > 0) { + CoePropertyUtil.batchInsert(propertyMap); + } + if (correlateList != null && correlateList.size() > 0) { + correlateDao.batchInsert(correlateList); + } + if (specialPropertyList != null && specialPropertyList.size() > 0) { + specialPropertyDao.batchInsert(specialPropertyList); + } + if (importChoice.equals("createWs") || replaceChoice.equals("replace") && mark) {// 与上方删除对应 + if (fileAttrList != null && fileAttrList.size() > 0 && mark) { + fileAttrDao.batchInsert(fileAttrList); + } + if (shapeAttrList != null && shapeAttrList.size() > 0 && mark) { + shapeAttrDao.batchInsert(shapeAttrList); + } + if (shapeConfigList != null && shapeConfigList.size() > 0 && mark) { + shapeConfigDao.batchInsert(shapeConfigList); + } + } + + UtilFile repositoryFileSourceDir = new UtilFile(path + "/" + wsId); + + String targetPath = CoeWsConstant.getWorkspaceRootPath(wsId); + UtilFile repositoryFileTargetDir = new UtilFile(targetPath); + if (importChoice.equals("createWs")) { + UtilFile.removeFile(repositoryFileTargetDir); // 如果是新建,删除资产库中的数据 + // 拷贝信息到资产库 + if (repositoryFileSourceDir.exists() && repositoryFileSourceDir.isDirectory()) { + UtilFile.copyDir(repositoryFileSourceDir, repositoryFileTargetDir); + } + } else { + // 拷贝信息到资产库 + if (repositoryFileSourceDir.exists() && repositoryFileSourceDir.isDirectory()) { + for (int a = 0; a < fileArray.size(); a++) { + JSONObject fileObj = fileArray.getJSONObject(a); + String repositoryId = fileObj.getString("repositoryId"); + String methodId = fileObj.getString("methodId"); + UtilFile parentDir = new UtilFile(targetPath + "/v1.0/" + methodId); + UtilFile dir = new UtilFile(targetPath + "/v1.0/" + methodId + "/" + repositoryId); + if (parentDir.isDirectory() && parentDir.exists()) { + if (dir.exists() && dir.isDirectory()) { + String[] fileList = dir.list(); // 目录下所有文件 + for (String fileName : fileList) { + UtilFile file = new UtilFile(dir + "/" + fileName); + UtilFile.removeFile(file); + } + } + if (!dir.exists()) { + dir.mkdir(); + } + } else { + if (!dir.exists()) { + dir.mkdirs(); + } + } + UtilFile sourceDir = new UtilFile(path + "/" + wsId + "/v1.0/" + methodId + "/" + repositoryId); + if (sourceDir.exists() && sourceDir.isDirectory()) { + UtilFile.copyDir(sourceDir, dir); + } + } + } + } + + // 拷贝附件文件到upfile 路径下面 + UtilFile repositoryUpFileSourceDir = new UtilFile(path + "/upfile"); + if (repositoryUpFileSourceDir.isDirectory() && repositoryUpFileSourceDir.exists()) { + for (int f = 0; f < upfileArray.size(); f++) { + JSONObject fileObject = upfileArray.getJSONObject(f); + String fileId = fileObject.getString("fileId"); + String fileType = fileObject.getString("fileType"); + String fileName = fileObject.getString("fileName"); + String shapeId = fileObject.getString("shapeId"); + String groupValue = ""; + String fileValue = ""; + if (fileType.equals("f")) { + groupValue = "file"; + fileValue = fileId; + } else { + groupValue = fileId; + fileValue = shapeId; + } + DCPluginProfile fileDcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + DCContext fileDc = new DCContext(super.getContext(), fileDcProfile, CoEConstant.APP_ID, groupValue, fileValue); + UtilFile upfileDir = new UtilFile(fileDc.getPath()); + if (!upfileDir.exists()) { + upfileDir.mkdirs(); + } + if (upfileDir.exists() && upfileDir.isDirectory()) { + UtilFile sourceUpFile = new UtilFile(repositoryUpFileSourceDir + "/" + groupValue + "/" + fileValue + "/" + fileName); + UtilFile targetUpFile = new UtilFile(upfileDir + "/" + fileName); + try { + UtilFile.copyFile(sourceUpFile, targetUpFile); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + // 复制出现复制图形文件 + // 更新缓存 + PALRepositoryCache.getCache().reload(); + PALRepositoryPropertyCache.getCache().reload(); + DesignerShapeRelationCache.getCache().reload(); + PALDesignerFileCache.getCache().reload(); + if (mark) { + PALRepositoryAttributeCache.getCache().reload(); + PALRepositoryShapeAttributeCache.getCache().reload(); + PALRepositoryShapeConfigCache.getCache().reload(); + } + return true; + } + + private String validateJson(String name) { + return name == null ? "" : name; + } + + private int validateJson(Integer index) { + return index == null ? 0 : index; + } + + private void recoverData(JSONObject object, List repositoryList, JSONArray fileArray, JSONArray upfileArray, List shapeRelationList, List upfileList, List repositoryPropertyList, Map propertyMap, List correlateList, List specialPropertyList) { + PALRepositoryModelImpl repository = new PALRepositoryModelImpl(); + repository.setId(object.getString("id")); + repository.setWsId(object.getString("wsId")); + repository.setPlRid(object.getString("plRid")); + repository.setNo(object.getString("No")); + repository.setName(object.getString("name")); + repository.setLevel(validateJson(object.getInteger("level"))); + repository.setParentId(object.getString("parentId")); + repository.setOrderIndex(validateJson(object.getInteger("orderIndex"))); + repository.setBottomLevel(validateJson(object.getInteger("isBottomLevel"))); + repository.setDesc(object.containsKey("desc") ? object.getString("desc") : ""); + repository.setOwnerDept(object.getString("ownerDept")); + repository.setOwnerUser(object.getString("ownerUser")); + repository.setMilestone(object.getString("milestone")); + repository.setInput(object.containsKey("input") ? object.getString("input") : ""); + repository.setOutput(object.containsKey("output") ? object.getString("output") : ""); + repository.setExecType(validateJson(object.getInteger("execType"))); + repository.setSystemName(object.getString("systemName")); + repository.setAWSProcessId(object.getString("AWSProcessId")); + repository.setDiagramUrl(object.getString("diagramUrl")); + repository.setColor(object.getString("color")); + repository.setMethodCategory(object.getString("methodCategory")); + repository.setMethodId(object.getString("methodId")); + repository.setVersion(validateJson(object.getInteger("version"))); + repository.setVersionId(object.getString("versionId")); + repository.setUse(object.getBoolean("isUse")); + repository.setPublish(object.getBoolean("isPublish")); + repository.setSystemFile(object.getBoolean("isSystemFile")); + repository.setFilePath(object.containsKey("filePath") ? CoeProcessLevelUtil.replaceRepositoryFilePath(object.getString("filePath")) : ""); + repository.setStop(object.containsKey("isStop") ? object.getBoolean("isStop") : false); + repository.setApproval(object.containsKey("isApproval") ? object.getBoolean("isApproval") : false); + repository.setExt1(object.containsKey("ext1") ? object.getString("ext1") : ""); + repository.setExt2(object.containsKey("ext2") ? object.getString("ext2") : ""); + repository.setExt3(object.containsKey("ext3") ? object.getString("ext3") : ""); + repository.setExt4(object.containsKey("ext4") ? object.getString("ext4") : ""); + //文件密级 + repository.setSecurityLevel(object.containsKey("securityLevel") ? Integer.parseInt(String.valueOf(object.get("securityLevel"))) : -1); + if (object.containsKey("filePath") && (!object.getString("filePath").equals(""))) { + JSONObject tempObj = new JSONObject(); + tempObj.put("repositoryId", object.getString("id")); + tempObj.put("methodId", object.getString("methodId")); + fileArray.add(tempObj); + } + repository.setHistoryMaxVersion(object.getString("historyMaxVersion")); + repository.setViewCount(object.getLong("viewCount")); + repository.setCreateUser(object.getString("createUser")); + repository.setModifyUser(object.getString("modifyUser")); + repository.setCreateDate(object.getString("createDate").equals("") ? null : Timestamp.valueOf(object.getString("createDate"))); + repository.setModifyDate(object.getString("modifyDate").equals("") ? null : Timestamp.valueOf(object.getString("modifyDate"))); + repository.setDutyDept(object.getString("plDutyDept")); + repository.setDutyUser(object.getString("plDutyUser")); + + repositoryList.add(repository); + + shapeRelationList.addAll(JSONArray2ShapeRelationList(object.getJSONArray("shapeRelationList"))); + upfileList.addAll(JSONArray2UpfileList(object.getJSONArray("upfileList"))); + repositoryPropertyList.addAll(JSONArray2RepositoryPropertyList(object.getJSONArray("repositoryPropertyList"))); + propertyMap.putAll(jsonObject2Property(object.getJSONObject("propertyList"))); + if (object.get("correlateList") == null) { + correlateList.addAll(JSONArray2correlate(new JSONArray())); + } else { + correlateList.addAll(JSONArray2correlate(object.getJSONArray("correlateList"))); + } + if (object.get("specialPropertyList") == null) { + specialPropertyList.addAll(JSONArray2specialProperty(new JSONArray())); + } else { + specialPropertyList.addAll(JSONArray2specialProperty(object.getJSONArray("specialPropertyList"))); + } + + JSONArray array = object.getJSONArray("upfileList"); + if (array != null && array.size() > 0) { + for (int d = 0; d < array.size(); d++) { + JSONObject upfileObject = array.getJSONObject(d); + JSONObject tempObject = new JSONObject(); + String fileId = upfileObject.getString("repositoryId"); + String fileType = upfileObject.getString("fileType"); + String fileName = upfileObject.getString("fileName"); + String shapeId = upfileObject.getString("shapeId"); + tempObject.put("fileId", fileId); + tempObject.put("fileType", fileType); + tempObject.put("fileName", fileName); + tempObject.put("shapeId", shapeId); + tempObject.put("newFileId", upfileObject.getString("repositoryId")); + upfileArray.add(tempObject); + } + } + } + + /** + * 变更状态为停用 获取启用状态 + * + * @param uuid + * @param type + * @return + */ + public String stopCoeWorkspace(String uuid, int type) { + boolean flag = CoeWorkSpaceDaoFactory.createCoeWorkSpace().stopCoeWorkspace(uuid, type); + String msg = ""; + if (flag) { + msg = "1"; + } else { + msg = "-1"; + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + if (type == CoeWsConstant.OPEN) {// 开启 + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_WORKSPACE, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_WORKSPACE_RUN_UPDATE); + } else {// 关闭 + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_WORKSPACE, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_WORKSPACE_STOP_UPDATE); + } + } + ResponseObject ro = ResponseObject.newOkResponse(msg); + return ro.toString(); + } + + /** + * 此处的删除操作可以改为批量去操作,放到同一个删除的方法里,当出现异常时,将事务进行回滚 + * + * @param uuid + * @return + */ + public String removeCoeWorkspace(String uuid) { + StringBuffer result = new StringBuffer(); + + // 设置默认的流程版本,默认为高版本 + CoeWorkSpaceDaoFactory.createCoeWorkSpace().setDefaultDisplayVersion(uuid); + boolean f = CoeWorkSpaceDaoFactory.createCoeWorkSpace().removeCoeWorkspace(uuid); + // 删除该空间下的流程分级 + List list = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getModels(uuid); + for (PALRepositoryModel coeProcessLevelModel : list) { + Map map1 = CoeProcessLevelDaoFacotory.createCoeProcessLevel().removeTreeNodes(coeProcessLevelModel.getId(), uuid); + result.append((String) map1.get("result")); + } + + if (f && (result.toString().indexOf("false") == -1)) { + return "1"; + } else { + return "-1"; + } + } + + // 导出数据 + public String expCoeWorkSpace(String uuid, String clientType) { + CoeWorkSpaceModel model = (CoeWorkSpaceModel) CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstance(uuid); + List list = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getModels(uuid); + DCContext dcContext = null; + if (clientType.equals("ipad")) { + dcContext = DCUtil.getInstance().createTempFileContext(CoEConstant.APP_ID, "Exp", "EPA", "zip"); + } else { + dcContext = DCUtil.getInstance().createTempFileContext(CoEConstant.APP_ID, "Exp", "EPA", "epa"); + } + File ff = new File(dcContext.getFilePath()); + DataUtil.expData(model, list, ff); + return dcContext.getDownloadURL(); + } + + // 导入数据 + public String impCoeWorkSpace(String name) { + DCContext dcContext = DCUtil.getInstance().createTempFileContext(CoEConstant.APP_ID, "Imp", "EPA", null); + dcContext.setFileName(name); + File f = new File(dcContext.getFilePath()); + String b = DataUtil.impData(f); + return b; + } + + // 流程空间预览 + public String getCoeWorkSpacePreview(String wsId) { + CoeWorkSpaceModel model = (CoeWorkSpaceModel) CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstance(wsId); + int wsState; + String deleteButton = ""; + if (model.getWsState() == CoeWsConstant.CLOSE) { + wsState = 0; + deleteButton = ""; + } else { + wsState = 1; + } + StringBuffer zScript = new StringBuffer(); + zScript.append("data[0] = ['','" + CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelExecTypeCount(wsId) + "'];"); + List systemNameList = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelSystemNameCount(wsId); + int otherValue = -1; + for (int i = 0, size = systemNameList.size(); i < size; i++) { + Map map = (Map) systemNameList.get(i); + if (i < 4) { + zScript.append("data[" + (i + 1) + "] = ['" + map.get("name") + "','" + map.get("count") + "'];"); + } else { + otherValue += (Integer) map.get("count"); + } + } + if (otherValue != -1) { + zScript.append("data[4] = ['','" + otherValue + "'];"); + } + Map macroLibraries = new HashMap(); + macroLibraries.put("wsUUID", model.getUUId()); + macroLibraries.put("wsName", I18nRes.findValue(CoEConstant.APP_ID, model.getWsName())); + macroLibraries.put("wsDesc", model.getWsDesc()); + macroLibraries.put("wsState", wsState); + macroLibraries.put("zScript", zScript.toString()); + macroLibraries.put("wsStatus", model.getWsState() == CoeWsConstant.OPEN ? "" : ""); + macroLibraries.put("czWsStatus", model.getWsState() == CoeWsConstant.OPEN ? "" : ""); + macroLibraries.put("deleteButton", deleteButton); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.ws.view.htm", macroLibraries); + } + + public String getCoeWorkSpaceVersionHtml(String versionId, String wsUsedUUID) { + Map map = new HashMap(); + List records = (List) getCoeWorkSpaceVersionModelRecodes(versionId).get("list"); // 所有记录条数 + StringBuffer html = new StringBuffer(""); + String maxVersionNo = ""; + if (records.size() > 1) { + for (int i = 0, size = records.size(); i < size; i++) { + CoeWorkSpaceModel wsModel = records.get(i); + html.append(getVersionItemHtml(wsModel, versionId, i)); + } + maxVersionNo = VersionUtil.getVersionStrV(Integer.parseInt(getCoeWorkSpaceVersionModelRecodes(versionId).get("maxVersionNo") + "")); + } else if (records.size() == 1) { + html.append(getVersionItemHtml(records.get(0), versionId, 0)); + maxVersionNo = VersionUtil.getVersionStrV(records.get(0).getWsVer()); + } + html.append(""); + map.put("wsVersionId", versionId); + map.put("tableContent", html); + map.put("sid", _uc.getSessionId()); + wsUsedUUID = getIsUsingWSUUID(versionId); + map.put("wsUsedUUID", wsUsedUUID); + // html.toString() + "|" + records.size(); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.ws.portal.version.htm", map); + } + + private String getVersionItemHtml(CoeWorkSpaceModel wsModel, String versionId, int i) { + String backgroud = " background: none repeat scroll 0 0 #FFFFFF;"; + if (i % 2 == 0) + backgroud = " background: none repeat scroll 0 0 #FAFAFA;"; + WsOrgTypeEnum wse = wsModel.getWsOrgType(); + String img = "../apps/" + CoEConstant.APP_ID + "/img/ws/green.ball.gif"; + String title = "使用中"; + String isUse = "Y"; + String menu = "创建新版本"; + if (wsModel.getIsUse() == 0) { + img = "../apps/" + CoEConstant.APP_ID + "/img/ws/red.ball.gif"; + title = "历史资产"; + isUse = "N"; + menu = " 激活 " + " 创建新版本 " + " 删除"; + } + StringBuilder sb = new StringBuilder(); + sb.append(" " + "
      " + + VersionUtil.getVersionStrV(wsModel.getWsVer()) + "
      " + wsModel.getWsName() + "
      " + "
      " + "
      " + menu + "
      "); + + return sb.toString(); + } + + private Map getCoeWorkSpaceVersionModelRecodes(String versionId) { + return CoeWorkSpaceDaoFactory.createCoeWorkSpace().getCoeWorkSpaceVersions(versionId); + + } + + private String getIsUsingWSUUID(String versionId) { + return CoeWorkSpaceDaoFactory.createCoeWorkSpace().getIsUsingWSUUID(versionId); + + } + + /* public String getCoeWorkSpaceVersionSaveHtml(String wsuuid, String + * maxVersionNo, String versionId, String wsUsedUUID) { CoeWorkSpace coe = + * CoeWorkSpaceDaoFactory.createCoeWorkSpace(); String newVersion = + * VersionUtil.getNextVersion(maxVersionNo); CoeWorkSpaceModel m = + * (CoeWorkSpaceModel) coe.getInstance(wsuuid); // 获得该流程资产下的所有数据库记录 + * PALRepository p =CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + * List list = p.getInstanceToList(wsuuid); list = + * p.getCoeProcessLevelByPid("process", wsuuid); + * p.getCoeProcessLevelByPid("", wsuuid); CoeWorkSpaceModel obj = new + * CoeWorkSpaceModel(); obj.setWsName(m.getWsName()); + * obj.setWsDm(m.getWsDm()); obj.setWsDesc(m.getWsDesc()); + * obj.setWsState(m.getWsState()); obj.setWsTctype(m.getWsTctype()); + * obj.setWsBgUrl(m.getWsBgUrl()); obj.setWsOrgType(m.getWsOrgType()); + * obj.setWsNo(newVersion); obj.setWsVersionUuid(versionId); + * obj.setUUId(UUIDGener.getUUID()); String path = ""; + * + * for (PALRepositoryModel l : list) { if (l.getFilePath() != null && + * !"".equals(l.getFilePath())) { path = createNewFilePath(l.getFilePath(), + * newVersion); break; } } + * + * Map map1 = new HashMap(); + * //List> tempList1 = new ArrayList>(); Map map2 = new HashMap(); + * Map map3 = new HashMap(); + * //List> tempList2 = new ArrayList>(); String s = "process,org,data,product"; for + * (PALRepositoryModel l : list) { String oldUUid = l.getUUId(); + * List ll = p.getCoeProcessLevelByPid(oldUUid, wsuuid); + * if(ll.size()>0){ + * + * + * } } try { //int count = p.getSumRecodes()+1; for (PALRepositoryModel l : + * list) { String oldUUid = l.getUUId(); List ll = + * p.getCoeProcessLevelByPid(oldUUid, wsuuid); PALRepositoryModel model = + * new PALRepositoryModel(); model.setUUId(UUIDGener.getUUID()); if + * ("".equals(l.getFilePath())) { model.setFilePath(""); } else { path = + * createNewFilePath(l.getFilePath(), newVersion, model.getUUId()); new + * CoeFile().modifyFileNameOfPath(path, l.getUUId(), model.getUUId()); + * model.setFilePath(path); } model.setWsID(obj.getUUId()); + * model.setPlNo(l.getPlNo()); model.setPlName(l.getPlName()); + * model.setPlAwsPid(l.getPlAwsPid()); model.setPlColor(l.getPlColor()); + * model.setPlDesc(l.getPlDesc()); + * model.setPlDiagramUrl(l.getPlDiagramUrl()); + * model.setPlExecType(l.getPlExecType()); + * model.setPlIsBottomLevel(l.getPlIsBottomLevel()); + * model.setPlLevel(l.getPlLevel()); model.setPlM(l.getPlM()); + * model.setPlOrderIndex(l.getPlOrderIndex()); + * model.setPlParentId(l.getPlParentId()); if (!s.contains( + * l.getPlParentId())) { map1.put(l.getPlParentId(), model.getUUId()); + * map2.put(model.getUUId(), l.getPlParentId()); //tempList1.add(map1); + * //tempList2.add(map2); } map3.put("", ""); model.setPlRd(l.getPlRd()); + * model.setPlRp(l.getPlRp()); model.setPlSecurityR(l.getPlSecurityR()); + * model.setPlSecurityW(l.getPlSecurityW()); + * model.setPlSystemName(l.getPlSystemName()); + * model.setPlMethodId(l.getPlMethodId()); model.setPlVer(l.getPlVer()); + * model.setPlVersionUuid(l.getPlVersionUuid()); + * model.setIsUser(l.getIsUser()); + * model.setHistoryMaxVersion(l.getHistoryMaxVersion() + ""); + * model.setPlCategory(l.getPlCategory()); p.create(model); + * if(map2.get("parentId")!=null){p.updateParentId( + * model.getUUId(),map2.get("parentId"));map2.put("parentId", null);} + * if(ll.size()>0){ map2.put("parentId", model.getUUId()); } + * + * } + * + * //对所插入的数据的parentId更新 int len = tempList1.size(); for (int i = 0; i map = tempList1.get(i); + * + * } //Set uuids = map2.keySet(); //for (String uuid : uuids) { // + * CoeProcessLevelDaoFacotory + * .createCoeProcessLevel().updateParentId(uuid,map1.get(map2.get(uuid))); + * //} } catch (SQLException e) { e.printStackTrace(System.err); } try { + * obj.setWsOrderindex(getSumRecodes() + 1); coe.create(obj); } catch + * (SQLException e) { e.printStackTrace(); } return + * getCoeWorkSpaceVersionHtml(versionId, wsUsedUUID); } */ + + /** + * 流程资产版本复制 + * + * @param wsuuid 版本Id + * @param maxVersionNo 最大版本 + * @param versionId 版本id + * @param wsUsedUUID 正在使用的版本 + * @return + */ + public String getCoeWorkSpaceVersionSaveHtml(String wsuuid, String maxVersionNo, String versionId, String wsUsedUUID) { + CoeWorkSpace coe = CoeWorkSpaceDaoFactory.createCoeWorkSpace(); + CoeWorkSpaceModel m = (CoeWorkSpaceModel) coe.getInstance(wsuuid); + String newVersionStr = ""; + int maxVer = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getMaxVersionNum(m.getWsVersionUuid()); + // 获得该流程资产下的所有数据库记录 + PALRepository p = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + p.getCoeProcessLevelByPid("", wsuuid); + CoeWorkSpaceModel obj = new CoeWorkSpaceModel(); + obj.setWsName(m.getWsName()); + obj.setWsDm(m.getWsDm()); + obj.setWsDesc(m.getWsDesc()); + obj.setWsState(m.getWsState()); + obj.setWsTctype(m.getWsTctype()); + obj.setWsBgUrl(m.getWsBgUrl()); + obj.setWsOrgType(m.getWsOrgType()); + obj.setWsVer(maxVer + 1); + obj.setWsVersionUuid(versionId); + obj.setUUId(UUIDGener.getUUID()); + try { + obj.setWsOrderindex(getSumRecodes() + 1); + coe.insert(obj); + } catch (Exception e) { + e.printStackTrace(); + return "false"; + } + newVersionStr = VersionUtil.getVersionStrV(obj.getWsVer()); + Map map1 = new HashMap(); + try { + copyCoeWorkSpaceFile("process", "process", obj.getUUId(), wsuuid, newVersionStr, map1); + copyCoeWorkSpaceFile("org", "org", obj.getUUId(), wsuuid, newVersionStr, map1); + copyCoeWorkSpaceFile("data", "data", obj.getUUId(), wsuuid, newVersionStr, map1); + copyCoeWorkSpaceFile("product", "product", obj.getUUId(), wsuuid, newVersionStr, map1); + } catch (Exception e) { + e.printStackTrace(); + return "false"; + } + List records = (List) getCoeWorkSpaceVersionModelRecodes(versionId).get("list"); // 所有记录条数 + StringBuffer html = new StringBuffer(""); + for (int i = 0, size = records.size(); i < size; i++) { + CoeWorkSpaceModel wsModel = records.get(i); + html.append(getVersionItemHtml(wsModel, versionId, i)); + } + html.append(""); + if (map1.size() > 0) { + DesignerRelationShapeCacheManager shapeCache = DesignerRelationShapeCacheManager.getInstance(); + // 得到改资产库下所有文件的路径 + Map pathMap = getProcessLevelFilePath(obj.getUUId()); + // 更新形状的关联关系 + updateFileShapes(pathMap, map1, shapeCache.getShapeGroupMaps()); + } + CoeProcessLevelNoCache.getInstance().reload(wsuuid); + return html.toString(); + } + + private void updateFileShapes(final Map pathMap, final Map map1, final Map> shapeGroupMap) { + new Thread(new Runnable() {// 减少客户端的等待时间 + @Override + public void run() { + Set keySet = pathMap.keySet(); + for (String key : keySet) { + UtilFile utilFie = pathMap.get(key); + ShapeUtil.updateRelevanceShapes(utilFie, map1, shapeGroupMap, key); + } + Set set = shapeGroupMap.keySet(); + HashMap> fileUUIDMap = new HashMap>(); + for (String str : set) { + Set> fileUUIDMapSet = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getFileIdsList(str, null); + Set fileUUIDSet = new HashSet(); + if (fileUUIDMapSet != null) { + for (Map map : fileUUIDMapSet) { + fileUUIDSet.add(map.get("palRepositoryId")); + } + } + fileUUIDMap.put(str, fileUUIDSet); + } + updateShapeToDB(shapeGroupMap, fileUUIDMap, pathMap, map1); + DesignerRelationShapeCacheManager shapeCache = DesignerRelationShapeCacheManager.getInstance(); + shapeCache.getShapeGroupMaps().clear(); + } + }).start(); + } + + private void updateShapeToDB(Map> shapeGroupMap, HashMap> fileUUIDMap, Map pathMap, Map map1) { + Set keySet = shapeGroupMap.keySet(); + Map> newShapeMap = new HashMap>(); + for (String oldGroupId : keySet) { + Set oldFileSet = fileUUIDMap.get(oldGroupId); + String newShapeGroupId = "shapeGroupId_" + UUIDGener.getUUID().replace("-", ""); + newShapeMap.put(newShapeGroupId, shapeGroupMap.get(oldGroupId)); + for (String oldFileUUID : oldFileSet) { + UtilFile utilFile = pathMap.get(map1.get(oldFileUUID));// 得到与之关联的新文件 + if (utilFile != null) { + List> list = ShapeUtil.updateShapeGropuId(utilFile, oldGroupId, newShapeGroupId, map1.get(oldFileUUID)); + insertToShapeToDB(list, newShapeGroupId); + } + } + } + + } + + public void insertToShapeToDB(List> list, String newShapeGroupId) { + List copyList = new ArrayList(); + List pasteList = new ArrayList(); + DesignerRelationShapeCacheManager cache = DesignerRelationShapeCacheManager.getInstance(); + Map> shapeMap = cache.getEventMap(); + for (Map map : list) { + JSONObject shape = (JSONObject) map.get("shape"); + String fileUUID = (String) map.get("fileUUID"); + if (!"linker".equals(shape.getString("name")) && shape.get("dataAttributes") != null) { + JSONArray dataAttributes = shape.getJSONArray("dataAttributes"); + for (int i = 0; i < dataAttributes.size(); i++) { + JSONObject attr = dataAttributes.getJSONObject(i); + if (attr.containsKey("relevanceShapes") && attr.getString("shapeGroupId") != null && !"".equals(attr.getString("shapeGroupId")) && attr.getString("isCopy") != null && !"".equals(attr.getString("isCopy"))) { + PALRepositoryModel levelModel = (PALRepositoryModel) CoeProcessLevelDaoFacotory.createCoeProcessLevel().getInstance(fileUUID); + String filePath = levelModel.getFilePath() + File.separator + levelModel.getId(); + UtilFile utilFile = new UtilFile(filePath); + String messageJson = utilFile.readStrUTF8(); + if (messageJson != null) { + ShapeUtil.shapeJsonToObject(messageJson, shapeMap, fileUUID); + } + if ("Y".equals(attr.getString("isCopy"))) { + packagCopyModel(copyList, shape, fileUUID, newShapeGroupId, attr.getString("isCopy")); + } else { + packagPasteModel(pasteList, shape, fileUUID, newShapeGroupId); + } + break; + } + } + + } + } + if (copyList.size() > 0) + CoeProcessLevelDaoFacotory.createCoeProcessLevel().createShape(copyList); + if (pasteList.size() > 0) + CoeProcessLevelDaoFacotory.createCoeProcessLevel().pasteToDatabse(pasteList); + } + + private void packagCopyModel(List list, JSONObject jsonObj, String subject, String newShapeGroupId, String isCopy) { + DesignerShapeCopyModel model = new DesignerShapeCopyModel(); + model.setShapeId(jsonObj.getString("id")); + model.setShapeGroupId(newShapeGroupId); + model.setShapeMessage(jsonObj.toString()); + model.setShapecategoryName(jsonObj.getString("category")); + model.setShapeName(jsonObj.getString("name")); + model.setisCopy(isCopy); + model.setPalRepositoryId(subject); + model.setShapeType(jsonObj.getString("title")); + model.setIsDelete("N"); + list.add(model); + } + + private void packagPasteModel(List list, JSONObject jsonObj, String subject, String newShapeGroupId) { + DesignerShapePasteModel model = new DesignerShapePasteModel(); + model.setShapeId(jsonObj.getString("id")); + model.setShapeGroupId(newShapeGroupId); + model.setShapeMessage(jsonObj.toString()); + model.setShapecategoryName(jsonObj.getString("category")); + model.setShapeName(jsonObj.getString("name")); + model.setIsPaste("Y"); + model.setPalRepositoryId(subject); + model.setShapeType(jsonObj.getString("title")); + model.setIsDelete("N"); + list.add(model); + } + + private Map getProcessLevelFilePath(String wsId) { + Map map = new HashMap(); + List list = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelAll(wsId); + for (PALRepositoryModel model : list) { + String path = model.getFilePath(); + if (path != null && !"".equals(path)) { + UtilFile utilFile = new UtilFile(path + File.separator + model.getId()); + map.put(model.getId(), utilFile); + } + } + return map; + } + + /** + * 流程资产版本复制 + * + * @param parentID 新的 + * @param oldparentID 旧的 + * @param wsuuid 新的 + * @param oldwsuuid 旧的 + */ + private void copyCoeWorkSpaceFile(String parentID, String oldparentID, String wsuuid, String oldwsuuid, String newVersion, Map map1) { + Map map = new HashMap(); + PALRepository p = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + List list = p.getCoeProcessLevelAllByPid(oldparentID, oldwsuuid); + for (PALRepositoryModel model : list) { + oldparentID = model.getId(); + ((PALRepositoryModelImpl) model).setId(UUIDGener.getUUID()); + map1.put(oldparentID, model.getId()); + if (map.get(model.getVersionId()) == null) { + map.put(model.getVersionId(), model.getId()); + } + ((PALRepositoryModelImpl) model).setVersionId(map.get(model.getVersionId())); + ((PALRepositoryModelImpl) model).setParentId(parentID); + ((PALRepositoryModelImpl) model).setWsId(wsuuid); + try { + String path = createNewFilePath(model.getFilePath(), newVersion, model.getId()); + new CoeFile().modifyFileNameOfPath(path, oldparentID, model.getId()); + ((PALRepositoryModelImpl) model).setFilePath(path); + CoeProcessLevelDaoFacotory.createCoeProcessLevel().insert(model); + } catch (Exception e) { + e.printStackTrace(); + } + copyCoeWorkSpaceFile(model.getId(), oldparentID, wsuuid, oldwsuuid, newVersion, map1); + } + } + + public String createNewFilePath(String sourcePath, String versionNo, String targetSource) { + if (sourcePath != null && !"".equals(sourcePath)) { + String[] str = sourcePath.split("/"); + String TempTargetSourcePath = ""; + for (int i = 0; i < str.length - 3; i++) { + TempTargetSourcePath += str[i] + "/"; + } + TempTargetSourcePath = TempTargetSourcePath + versionNo + "/"; + if (!"".equals(sourcePath) && !"".equals(TempTargetSourcePath)) { + TempTargetSourcePath = TempTargetSourcePath + str[str.length - 2] + "/" + targetSource + "/"; + int c = new CoeFile().copyFile(sourcePath, TempTargetSourcePath); + if (c == 1) { + return TempTargetSourcePath; + } + } + } + return ""; + } + + public String getCoeWorkSpaceVersionUsedHtml(String wsUsedUUID, String wsSelectVersionId) { + if ("".equals(wsSelectVersionId) || "".equals(wsUsedUUID)) { + return "fasle"; + } + return CoeWorkSpaceDaoFactory.createCoeWorkSpace().updateCoeWorkSpaceVersion(wsUsedUUID, wsSelectVersionId) + ""; + } + + public String getCoeWorkSpaceVersionDel(String wsUUID, String versionId) { + final List list = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoePPLevelByWsId(wsUUID); + int k = list.size(); + try { + if (k > 0) { + new Thread(new Runnable() { + @Override + public void run() { + removeFileByUUID(list); + } + }).start(); + } + return CoeWorkSpaceDaoFactory.createCoeWorkSpace().delCoeWorkSpaceVersion(wsUUID, versionId); + } catch (Exception e) { + return "{'flag':" + false + ",'maxVersion':'v1.0'}"; + } + } + + // 删除资产的版本时删除对应的文件 + private void removeFileByUUID(List list) { + String path = null; + DesignerRelationShapeCacheManager event = DesignerRelationShapeCacheManager.getInstance(); + Map> map = event.getEventMap(); + for (PALRepositoryModel model : list) { + path = model.getFilePath(); + if (path != null && !"".equals(path)) { + path = new UtilFile(new UtilFile(path).getParent()).getParent(); + UtilFile utilF = new UtilFile(path); + File[] fs = utilF.listFiles(); + for (File file : fs) { + UtilFile.removeFile(new UtilFile(file.getPath())); + } + UtilFile.removeFile(new UtilFile(path)); + break; + } + } + for (PALRepositoryModel m : list) {// 删除缓存中对应的出现过的形状 + map.remove(m.getId()); + } + ShapeUtil.writeShapMapToFile(map); + } + + public String removeCoeWorkspace(String uuid, String versionId) { + // 删除前先判断时候在该空间下有小组 如果有小组则不允许删除 并给出提示信息 + StringBuffer result = new StringBuffer(); + + // 删除相关表数据 + CoeProcessLevelDaoFacotory.createCoeProcessLevel().deleteReleationDataByWsId(uuid); + // 设置默认的流程版本,默认为高版本 + int count = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getCountVer(versionId); + CoeWorkSpaceDaoFactory.createCoeWorkSpace().setDefaultDisplayVersion(versionId); + boolean f = CoeWorkSpaceDaoFactory.createCoeWorkSpace().removeCoeWorkspace(uuid); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_WORKSPACE, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_WORKSPACE_DELETE); + } + // 删除该空间下的流程分级 + List list = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getModels(uuid); + String path = null; + DesignerRelationShapeCacheManager event = DesignerRelationShapeCacheManager.getInstance(); + Map> map = event.getEventMap(); + for (PALRepositoryModel coeProcessLevelModel : list) { + map.remove(coeProcessLevelModel.getId()); + if (!"".equals(coeProcessLevelModel.getFilePath())) { + path = coeProcessLevelModel.getFilePath(); + } + Map map1 = CoeProcessLevelDaoFacotory.createCoeProcessLevel().removeTreeNodes(coeProcessLevelModel.getId(), uuid); + result.append((String) map1.get("result")); + } + ShapeUtil.writeShapMapToFile(map); + try { + OutputAPIManager.getInstance().delTaskByWsid(uuid);// 删除对应的报告生成器的记录 + } catch (AWSException e) { + e.printStackTrace(System.err); + } + // 删除文件对象流程团队中的权限 + boolean isInstalled = AppsAPIManager.getInstance().isInstalled("com.actionsoft.apps.coe.teamwork"); + if (isInstalled) { + TeamPerm teamPerm = new TeamPerm(); + teamPerm.deleteByWorkspaceId(uuid); + } + + String msg = ""; + if (f && (result.toString().indexOf("false") == -1)) { + // 文件删除 + if (path != null) { + if (count < 2) { + filePath = path = new UtilFile(new UtilFile(new UtilFile(path).getParent()).getParent()).getParent(); + } else { + path = new UtilFile(new UtilFile(path).getParent()).getParent(); + } + UtilFile.removeFile(new UtilFile(path)); + } else { + path = AppsAPIManager.getInstance().getAppContext(CoEConstant.APP_ID).getPath() + "workspace/" + uuid + "/"; + UtilFile file = null; + if (filePath == null) { + file = new UtilFile(path); + } else { + file = new UtilFile(filePath); + } + if (file.exists()) { + UtilFile.removeFile(new UtilFile(path)); + } + } + msg = "1"; + } else { + msg = "-1"; + } + // 删除PAL小组相关信息 + if (CoeCooperationAPIManager.getInstance().isInstall()) { + CoeCooperationAPIManager.getInstance().removeAllCooperationByWsId(uuid); + } + ResponseObject ro = ResponseObject.newOkResponse(msg); + return ro.toString(); + } + + /** + * 流程库属性-选择用户页面 + * + * @param users + * @return + */ + public String toPALWSUserList(String users, String removeUserIds) { + String[] userArray = null; + if (users != null) { + userArray = users.split(","); + } + + Map allUsers = CoeUserDaoFactory.createUser().getInstanceWithUserName(CoeUserModel.FIELD_ID); + JSONArray jsonArray = new JSONArray(); + for (int i = 0; allUsers != null && i < allUsers.size(); i++) { + CoeUserModel userModel = (CoeUserModel) allUsers.get(new Integer(i)); + if (removeUserIds != null && removeUserIds.contains(userModel.getUserId())) { + continue; + } + + String isAdmin = userModel.getIsAdmin() == 0 ? "否" : "是"; + String isChecked = ""; + if (userArray != null && isExist(userArray, userModel.getUserId())) { + isChecked = "checked"; + } else if (userArray == null || userArray.length == 0) { + if (userModel.getUserId().equals(_uc.getUID())) { + isChecked = "checked"; + } + } + JSONObject object = new JSONObject(); + object.put("id", userModel.getUserId()); + object.put("userName", userModel.getUserName()); + object.put("isChecked", isChecked); + object.put("isAdmin", isAdmin); + object.put("name", userModel.getUserId() + "<" + userModel.getUserName() + ">"); + jsonArray.add(object); + } + + Map macroLibraries = new HashMap(); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("userList", jsonArray); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.ws.userlist.html", macroLibraries); + } + + /** + * 判断某个id是否在数组中 + * + * @param array + * @param id + * @return + */ + private boolean isExist(String[] array, String id) { + if (array != null && array.length > 0) { + for (String a : array) { + if (a.equals(id)) { + return true; + } + } + } + return false; + } + + public boolean getAccessHome(String wsuuid) { + CoeProcessLevelNoCache.getInstance().reload(wsuuid); + return CoeProcessLevelDaoFacotory.createCoeProcessLevel().getAccessHome(wsuuid, super.getContext().getUserModel().getUID()); + } + + private List JSONArray2specialProperty(JSONArray array) { + List list = new ArrayList<>(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + PALRepositorySpecialPropertyModel model = new PALRepositorySpecialPropertyModel(); + model.setId(object.getString("id")); + model.setPlId(object.getString("plId")); + model.setWsId(object.getString("wsId")); + model.setType(object.getString("type")); + if (object.get("valueText") != null) {// 兼容旧字段备份文件 + model.setValueText(object.getString("valueText")); + } else { + model.setValueText(object.getString("value")); + } + list.add(model); + } + } + return list; + } + + private List JSONArray2correlate(JSONArray array) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + CoeProcessLevelCorrelateModel model = new CoeProcessLevelCorrelateModel(); + model.setWsId(object.getString("wsId")); + model.setPlId(object.getString("plId")); + model.setPlAwsVersionid(object.getString("plAwsVersionid")); + model.setPlAwsId(object.getString("plAwsId")); + if (!UtilString.isEmpty(object.getString("plVersionId"))) { + model.setPlVersionId(object.getString("plVersionId")); + model.setCorrelateType(object.getIntValue("correlateType")); + model.setCorrelate(object.getBoolean("isCorrelate")); + } + list.add(model); + } + } + return list; + } + + private List JSONArray2ShapeCopyList(JSONArray array, JSONObject jo) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + DesignerShapeCopyModel model = new DesignerShapeCopyModel(); + model.setId(validateJson(object.getString("id"))); + model.setShapeGroupId(validateJson(object.getString("shapeGroupId"))); + model.setShapeName(validateJson(object.getString("shapeName"))); + model.setShapecategoryName(validateJson(object.getString("shapeCategoryName"))); + model.setPalRepositoryId(validateJson(object.getString("repositoryId"))); + model.setIsDelete(validateJson(object.getString("isDelete"))); + model.setShapeType(validateJson(object.getString("shapeType"))); + list.add(model); + } + } + return list; + } + + private List JSONArray2ShapePasteList(JSONArray array, JSONObject jo) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + DesignerShapePasteModel model = new DesignerShapePasteModel(); + model.setId(validateJson(object.getString("id"))); + model.setShapeGroupId(validateJson(object.getString("shapeGroupId"))); + model.setShapeName(validateJson(object.getString("shapeName"))); + model.setShapecategoryName(validateJson(object.getString("shapeCategoryName"))); + model.setPalRepositoryId(validateJson(object.getString("repositoryId"))); + model.setIsDelete(validateJson(object.getString("isDelete"))); + model.setShapeType(validateJson(object.getString("shapeType"))); + list.add(model); + } + } + return list; + } + + private List JSONArray2ShapeRelationList(JSONArray array) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + DesignerShapeRelationModel model = new DesignerShapeRelationModel(); + model.setId(validateJson(object.getString("id"))); + model.setFileId(validateJson(object.getString("fileId"))); + model.setShapeId(validateJson(object.getString("shapeId"))); + model.setShapeText(validateJson(object.getString("shapeText"))); + model.setRelationFileId(validateJson(object.getString("relationFileId"))); + model.setRelationShapeId(validateJson(object.getString("relationShapeId"))); + model.setRelationShapeText(validateJson(object.getString("relationShapeText"))); + model.setAttrId(validateJson(object.getString("attrId"))); + + list.add(model); + } + } + return list; + } + + private List JSONArray2UpfileList(JSONArray array) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + UpfileModel model = new UpfileModel(); + model.setUuid(validateJson(object.getString("id"))); + model.setPl_uuid(validateJson(object.getString("repositoryId"))); + model.setShape_uuid(validateJson(object.getString("shapeId"))); + model.setFileName(validateJson(object.getString("fileName"))); + model.setType(validateJson(object.getString("fileType"))); + model.setCreateTime(Timestamp.valueOf(validateJson(object.getString("createTime")))); + model.setCreateUser(validateJson(object.getString("createUser"))); + model.setDownload(validateJson(object.getInteger("download"))); + model.setSecurityLevel(object.containsKey("securityLevel") ? Integer.parseInt(String.valueOf(object.get("securityLevel"))) : -1); + list.add(model); + } + } + return list; + } + + private List JSONArray2RepositoryPropertyList(JSONArray array) { + List list = new ArrayList(); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + PALRepositoryPropertyModel model = new PALRepositoryPropertyModel(); + model.setId(validateJson(object.getString("id"))); + model.setPlId(validateJson(object.getString("plId"))); + model.setPropertyId(validateJson(object.getString("propertyId"))); + model.setPropertyName(validateJson(object.getString("propertyName"))); + model.setPropertyValue(validateJson(object.getString("propertyValue"))); + model.setOrderIndex(validateJson(object.getInteger("orderIndex"))); + list.add(model); + } + } + return list; + } + + private Map jsonObject2Property(JSONObject property) { + Map map = new HashMap(); + Iterator it = property.keySet().iterator(); + while (it.hasNext()) { + String key = it.next(); + map.put(key, property.getString(key)); + } + return map; + } + + /** + * 获取更新资产库的数据 + * @param wsId 资产库id,若为空,新建资产库相关数据,若不为空,更新资产库数据 + * @return + */ + public String getUpdateWorkspaceDataById(String wsId) { + ResponseObject ro = ResponseObject.newOkResponse(); + String name = ""; + String desc = ""; + JSONArray admin = new JSONArray(); + int type = 0;// 默认 + JSONArray types = new JSONArray(); + JSONArray adminOptions = new JSONArray(); + + if(!UtilString.isEmpty(wsId)) { + CoeWorkSpaceModel wsModel = (CoeWorkSpaceModel) CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstance(wsId); + if (wsModel == null) { + ro = ResponseObject.newErrResponse("无该资产库"); + return ro.toString(); + } + name = wsModel.getWsName(); + desc = wsModel.getWsDesc(); + String wsAdmin = wsModel.getWsAdmin() == null ? "" : wsModel.getWsAdmin(); + String[] wsAdminArr = wsAdmin.split(","); + for (int i = 0; i < wsAdminArr.length; i++) { + if (!UtilString.isEmpty(wsAdminArr[i])) { + admin.add(wsAdminArr[i]); + } + } + type = wsModel.getWsTctype(); + } else { + // 新建 + // 默认当前用户为高级用户 + admin.add(_uc.getUID()); + } + // 获取pal高级用户 + Map allUsers = CoeUserDaoFactory.createUser().getInstanceWithUserName(CoeUserModel.FIELD_ID); + for (int i = 0; allUsers != null && i < allUsers.size(); i++) { + CoeUserModel userModel = (CoeUserModel) allUsers.get(new Integer(i)); + if (userModel.getIsAdmin() == 0 || (HighSecurityUtil.isON() && HighSecurityUtil.isSecAdminUser(userModel.getUserId()))) { + continue; + } + JSONObject object = new JSONObject(); + object.put("value", userModel.getUserId()); + object.put("label", userModel.getUserId() + "<" + userModel.getUserName() + ">"); + object.put("path", SDK.getORGAPI().getDepartmentByUser(userModel.getUserId()).getPathNameI18NOfCache()); + adminOptions.add(object); + } + ro.put("name", name); + ro.put("desc", desc); + ro.put("admin", admin); + ro.put("type", type); + ro.put("adminOptions", adminOptions); + return ro.toString(); + } + + /** + * 更新/保存资产库 + * @param wsId + * @param name + * @param desc + * @param type + * @param admin + * @return + */ + public String saveWorkspace(String wsId, String name, String desc, int type, String admin) { + ResponseObject ro = ResponseObject.newOkResponse(); + CoeWorkSpace dao = CoeWorkSpaceDaoFactory.createCoeWorkSpace(); + if(!UtilString.isEmpty(wsId)) { + CoeWorkSpaceModel wsModel = (CoeWorkSpaceModel) dao.getInstance(wsId); + if (wsModel == null) { + ro = ResponseObject.newErrResponse("无该资产库"); + return ro.toString(); + } + wsModel.setWsName(name); + wsModel.setWsDesc(desc); + wsModel.setWsTctype(type); + wsModel.setWsAdmin(admin); + // 更新资产库 + dao.update(wsModel); + ro.msg("更新成功"); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_WORKSPACE, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_WORKSPACE_UPDATE); + } + } else { + // 新建 + CoeWorkSpaceModel model = new CoeWorkSpaceModel(); + wsId = UUIDGener.getUUID(); + model.setUUId(wsId); + model.setWsName(name); + model.setWsDesc(desc); + model.setWsTctype(type); + model.setWsAdmin(admin); + model.setWsVersionUuid(wsId); + model.setWsDm(""); + model.setWsState(0); + model.setWsBgUrl(""); + model.setWsOrderindex(getSumRecodes() + 1); + model.setWsOrgType(WsOrgTypeEnum.values()[1]); + model.setWsVer(1); + model.setIsUse(1); + model.setCreateUser(_uc.getUID()); + model.setModifyUser(_uc.getUID()); + dao.insertObj(model); + ro.msg("新建成功"); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_WORKSPACE, CoEOpLogConst.OP_CREATE, CoEOpLogConst.INFO_WORKSPACE_CREATE); + } + } + CoeProcessLevelNoCache.getInstance().reload(wsId); + ro.put("wsId", wsId); + return ro.toString(); + } + + /** + * 获取资产库管理数据 + * @return + */ + public String getCoeWorkSpaceManageData() { + List records = getCoeWorkSpaceModelRecodes(); // 所有记录条数 + List openList = new ArrayList<>(); + List closeList = new ArrayList<>(); + + String userId = _uc.getUID(); + for (int i = 0; i < records.size(); i++) { + CoeWorkSpaceModel wsModel = records.get(i); + String wsId = wsModel.getUUId(); + if (wsModel.getWsAdmin() != null && wsModel.getWsAdmin().contains(userId) || (wsModel.getWsDm() != null && wsModel.getWsDm().contains(userId)) || ("admin".equals(userId))) { + JSONObject object = new JSONObject(); + object.put("wsId", wsId); + object.put("name", wsModel.getWsName()); + object.put("desc", wsModel.getWsDesc()); + List adminList = new ArrayList<>(); + if (!UtilString.isEmpty(wsModel.getWsAdmin())) { + String[] adminArr = wsModel.getWsAdmin().split(","); + for (int j = 0; j < adminArr.length; j++) { + if (!UtilString.isEmpty(adminArr[j])) { + UserModel user = SDK.getORGAPI().getUser(adminArr[j]); + if (user == null) { + adminList.add(adminArr[j]); + } else { + adminList.add(user.getUserName()); + } + } + } + } + object.put("admin", StringUtils.join(adminList, ",")); + // object.put("createDate", wsModel.getc) // 没有创建时间 + int count = 0; + List repoList = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryModelsByWsId(wsId); + for (PALRepositoryModel model: repoList) { + if (model.isUse()) { + count++; + } + } + object.put("count", count); + if (wsModel.getWsState() == CoeWsConstant.OPEN) { + object.put("open", true); + openList.add(object); + } else { + object.put("open", false); + closeList.add(object); + } + } + } + openList.addAll(closeList); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data", openList); + return ro.toString(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/web/VersionUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/web/VersionUtil.java new file mode 100644 index 00000000..a82dd7a6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/ws/web/VersionUtil.java @@ -0,0 +1,90 @@ +package com.actionsoft.apps.coe.pal.pal.ws.web; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class VersionUtil { + public static String getVersionStrV(double versionNo) { + return "V"+VersionUtil.getIntNum(versionNo) + "."+ VersionUtil.getDecNum(versionNo); + } + public static String getVersionStr(double versionNo) { + return VersionUtil.getIntNum(versionNo) + "."+ VersionUtil.getDecNum(versionNo); + } + + /** + * @param verStr + * @return + */ + public static int getVer(String verStr) { + String reg = "v(\\d{1,3})\\.0"; + Matcher matcher = Pattern.compile(reg).matcher(verStr); + if (matcher.find()) { + return Integer.parseInt(matcher.group(1)); + } + return 0; + } + + public static String showVer(double ver) { + return VersionUtil.getVersionStrV(ver); + } + + /** + * 迭代versionNo + * @param versionNo + * @param isLargeIteration 大小版本迭代标志 + * @return + */ + public static double increaseVersionNo(double versionNo,boolean isLargeIteration){ + String numStr = String.format("%.3f",versionNo); + int index = numStr.indexOf("."); + String newNum = ""; + if (isLargeIteration){ + newNum = (Integer.parseInt(numStr.substring(0, index))+1) + ".0"; + return Double.parseDouble(newNum); + } + + String dNum = numStr.substring(index+1>numStr.length()?index:index+1); + int num = Integer.parseInt(dNum) + 1; + newNum = numStr.substring(0,index) + "."+ String.format("%03d", num); + return Double.parseDouble(newNum); + } + + /** + * 比较版本号 + * @param num1 + * @param num2 + * @param isReverse 正反比较整数位标志为,true为逆序,false为正序 + * @return + */ + public static int compareVersionNo(double num1, double num2,boolean isReverse){ + int intNum1 = VersionUtil.getIntNum(num1); + int decNum1 = VersionUtil.getDecNum(num1); + + int intNum2 = VersionUtil.getIntNum(num2); + int decNum2 = VersionUtil.getDecNum(num2); + + if (intNum1 == intNum2){ + return decNum2 - decNum1; + } + + return isReverse ? intNum2 - intNum1 : intNum1 - intNum2; + } + + public static int getIntNum(double num){ + String numStr = String.format("%.3f",num); + int index = numStr.indexOf("."); + return Integer.parseInt(numStr.substring(0,index)); + } + + public static int getDecNum(double num){ + String numStr = String.format("%.3f",num); + int index = numStr.indexOf("."); + return Integer.parseInt(numStr.substring(index+1>numStr.length()?index:index+1)); + } + + public static void main(String[] args) { + System.out.println(VersionUtil.getVer("v145.0")); + System.out.println(VersionUtil.getVersionStrV(13)); + System.out.println(VersionUtil.showVer(13)); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/COETeamPortletAccm.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/COETeamPortletAccm.java new file mode 100644 index 00000000..784819ee --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/COETeamPortletAccm.java @@ -0,0 +1,53 @@ +package com.actionsoft.apps.coe.pal.plugin; + +import com.actionsoft.bpms.commons.security.ac.model.ACAccessMode; +import com.actionsoft.bpms.commons.security.ac.model.ACCM; + +/** + * 仅数据配置对象,便于常量引用 + * + * @author chengy + * + */ +public class COETeamPortletAccm extends ACCM { + + public static final ACAccessMode VISIT = new ACAccessMode("可访问", 0); + public static final ACAccessMode MANAGER = new ACAccessMode("可管理", 1); + + public static final String RESOURCE_TYPE = "coe.teamPortlet"; + private String resourceName = "小组门户"; + private String[] assignmentTypes; + private static ACAccessMode[] accessModes = new ACAccessMode[] { VISIT, MANAGER }; + private boolean isolationCompany; + private boolean orgAdminSecurity = true; + private String callBack; + + public String getResourceName() { + return resourceName; + } + + public String[] getAssignmentTypes() { + return assignmentTypes; + } + + public ACAccessMode[] getAccessModes() { + return accessModes; + } + + public boolean isIsolationCompany() { + return isolationCompany; + } + + public boolean isOrgAdminSecurity() { + return orgAdminSecurity; + } + + public String getCallBack() { + return callBack; + } + + public String getResourceType() { + return RESOURCE_TYPE; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/InstallListener.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/InstallListener.java new file mode 100644 index 00000000..4ddb6306 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/InstallListener.java @@ -0,0 +1,33 @@ +package com.actionsoft.apps.coe.pal.plugin; + +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepositoryRemove; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryRemoveModel; +import com.actionsoft.apps.listener.AppListener; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.bpms.server.fs.dc.DCUtil; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.sdk.local.SDK; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * PAL安装后事件 + * @author sunlh + * @date 2020-04-08 + * + */ +public class InstallListener implements AppListener { + + @Override + public void after(AppContext appContext) { + } + + @Override + public boolean before(AppContext appContext) { + return true; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/Plugins.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/Plugins.java new file mode 100644 index 00000000..90ccaa9f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/Plugins.java @@ -0,0 +1,171 @@ +package com.actionsoft.apps.coe.pal.plugin; + +import java.util.ArrayList; +import java.util.List; +import java.util.Timer; + +import com.actionsoft.apps.coe.pal.aslp.*; +import com.actionsoft.apps.coe.pal.aslp.DiagramAPI.QueryFileElements; +import com.actionsoft.apps.coe.pal.aslp.DiagramAPI.QueryRelationInfoByRelationShapeId; +import com.actionsoft.apps.coe.pal.aslp.DiagramAPI.QueryRelationInfoByShapeId; +import com.actionsoft.apps.coe.pal.aslp.DiagramAPI.QueryShapeList; +import com.actionsoft.apps.coe.pal.aslp.MethodAPI.QueryMethodById; +import com.actionsoft.apps.coe.pal.aslp.MethodAPI.QueryMethodListByMethod; +import com.actionsoft.apps.coe.pal.aslp.PermAPI.*; +import com.actionsoft.apps.coe.pal.aslp.PublishAPI.PublishPALRepository; +import com.actionsoft.apps.coe.pal.aslp.RepositoryAPI.*; +import com.actionsoft.apps.coe.pal.pal.home.aslp.RegisterExtendsApp; +import com.actionsoft.apps.coe.pal.pal.method.aslp.RegisterMethodApp; +import com.actionsoft.apps.coe.pal.pal.repository.addons.RepositoryDiagramExistMark; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.manager.DesignerShapeCopyCache; +import com.actionsoft.apps.listener.PluginListener; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.apps.resource.plugin.profile.*; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.backup.extend.CoEPALBackupProcessor; +import com.actionsoft.apps.coe.pal.pal.expression.GetDWConditionExpression; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishHistoryCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupPermCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupRoleCache; +import com.actionsoft.apps.coe.pal.pal.output.aslp.RegisterOutputApp; +import com.actionsoft.apps.coe.pal.pal.repository.cache.*; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerImageCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerShapeCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.PALDesignerFileCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.PALDesignerFileDragModelCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.realtime.manage.CoeListenCacheManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.CoeFileProcessor; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.constant.CoeFileConstant; +import com.actionsoft.apps.coe.pal.teamwork.cache.TeamMemberPermCache; +import com.actionsoft.apps.coe.pal.teamwork.cache.TeamPermCache; + +/** + * 注册CoE随平台安装的默认插件 + * + */ +public class Plugins implements PluginListener { + public static boolean installed = false; + + public Plugins() { + } + + public List register(AppContext context) { + List list = new ArrayList(); + + list.add(new CachePluginProfile(TeamPermCache.class)); + list.add(new CachePluginProfile(TeamMemberPermCache.class)); + list.add(new CachePluginProfile(PublishHistoryCache.class)); + list.add(new CachePluginProfile(PublishUserGroupCache.class)); + list.add(new CachePluginProfile(PublishUserGroupPermCache.class)); + list.add(new CachePluginProfile(PublishUserGroupRoleCache.class)); + list.add(new CachePluginProfile(PALDesignerFileCache.class)); + list.add(new CachePluginProfile(PALDesignerFileDragModelCache.class)); + list.add(new CachePluginProfile(PALRepositoryCache.class)); + list.add(new CachePluginProfile(PALRepositoryRemoveCache.class)); + list.add(new CachePluginProfile(CoeDesignerShapeCache.class)); + list.add(new CachePluginProfile(DesignerShapeRelationCache.class)); + list.add(new CachePluginProfile(PALRepositoryPropertyCache.class)); + list.add(new CachePluginProfile(PALRepositoryAttributeCache.class)); + list.add(new CachePluginProfile(PALRepositoryShapeConfigCache.class)); + list.add(new CachePluginProfile(PALRepositoryShapeAttributeCache.class)); + list.add(new CachePluginProfile(CoeProcessLevelCorrelateCache.class)); + list.add(new CachePluginProfile(CoeDesignerImageCache.class)); + list.add(new CachePluginProfile(DesignerShapeCopyCache.class)); + list.add(new ACPluginProfile(new COETeamPortletAccm())); + + list.add(new AtFormulaPluginProfile("PAL应用", "@getDWCondition(*fieldName,*fieldValue)", GetDWConditionExpression.class.getName(), "获取DW中的自定义查询条件", "返回DW中自定义的查询条件")); + + CoeListenCacheManager task1 = CoeListenCacheManager.getInstance(); + try { + CoEConstant.timer1.cancel(); + } catch (IllegalStateException e) { + } + CoEConstant.timer1 = new Timer(); + try { + CoEConstant.timer1.schedule(task1, 1000, 1000 * 60 * 1); + } catch (IllegalStateException e) { + } + /* new Thread(new Runnable() { + * + * @Override public void run() { DesignerRelationShapeCacheManager.getInstance();// 初始化缓存 + * + * DesignerRelationShapeCacheManager task2 = DesignerRelationShapeCacheManager.getInstance(); try{ CoEConstant.timer2.cancel(); } catch (IllegalStateException e) { + * + * } CoEConstant.timer2 = new Timer(); try { CoEConstant.timer2.schedule(task2, 1000, 1000 * 60 * 1); } catch (IllegalStateException e) { } } }).start(); */ + + // 注册DC资源 + list.add(new DCPluginProfile("workspace", CoeFileProcessor.class.getName(), "存放资产库文件", false, false)); + list.add(new DCPluginProfile(CoeFileConstant.COE_UPFILE, CoeFileProcessor.class.getName(), "存放coe附件", false, false)); + list.add(new DCPluginProfile("tmp", CoeFileProcessor.class.getName(), "存放临时文件", false)); + list.add(new DCPluginProfile(CoEPALBackupProcessor.COE_BACKUP, CoeFileProcessor.class.getName(), "存放coe备份文件", false, false)); + list.add(new DCPluginProfile("template", CoeFileProcessor.class.getName(), "存放coe中的模板文件", false, false)); + list.add(new DCPluginProfile("portalTheme", CoeFileProcessor.class.getName(), "存放流程发布门户的logo轮播图等文件", false, false)); + list.add(new DCPluginProfile("defaultAttrUpgrade", CoeFileProcessor.class.getName(), "存放固定属性升级日志", false, false)); + // 注册报告生成器ASLP服务 + list.add(new ASLPPluginProfile("registerOutputApp", RegisterOutputApp.class.getName(), "开发者注册报告生成器扩展App", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + // 注册应用扩展点ASLP服务 + list.add(new ASLPPluginProfile("registerExtendsApp", RegisterExtendsApp.class.getName(), "开发者注册PAL流程资产库扩展应用App", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + // 建模方法ASLP + list.add(new ASLPPluginProfile("registerMethodApp", RegisterMethodApp.class.getName(), "开发者注册PAL流程资产库建模方法App", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + // 外部调用ASLP + // 资产库类aslp + list.add(new ASLPPluginProfile("queryIsActiveWorkSpace", QueryIsActiveWorkSpace.class.getName(), "查询指定流程资产库是否启用中", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryWorkspaceById", QueryWorkspaceById.class.getName(), "查询指定流程资产库", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryWorkspaceList", QueryWorkspaceList.class.getName(), "查询指定范围内流程资产库列表", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + // 模型类aslp + list.add(new ASLPPluginProfile("queryBpmProcessIsLockStructure", QueryBpmProcessIsLockStructure.class.getName(), "是否锁定BPM端流程结构,不允许在BPM端进行流程的编辑设计(但是可以配置属性参数)", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryRepositoryByAwsId", QueryRepositoryByAwsId.class.getName(), "根据BPM端流程查询与PAL有关系的流程", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryRepositoryById", QueryRepositoryById.class.getName(), "根据PAL模型ID查询模型信息", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryBpmGroupNameIsModify", QueryBpmGroupNameIsModify.class.getName(), "判断BPM端流程组名称是否可修改、删除", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryBpmProcessIsShow", QueryBpmProcessIsShow.class.getName(), "查询pal端管控bpm流程时BPM端是否可显示", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryShowBpmProcesseList", QueryShowBpmProcesseList.class.getName(), "查询BPM端可显示的流程", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryNotAssingedRepositoryList", QueryNotAssingedRepositoryList.class.getName(), "获取PAL推送到BPMS但是尚未分配的流程", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("saveAssignRepository", SaveAssignRepository.class.getName(), "对未分配的bpmn流程进行分配保存", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryRepositoryListByVersionid", QueryRepositoryListByVersionid.class.getName(), "根据PAL流程版本id获取流程模型集合", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryRepositoryImage", QueryRepositoryImage.class.getName(), "获取模型图片", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("openRepositoryPortalHtml", OpenRepositoryPortalHtml.class.getName(), "获取流程详情页面html", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + // SDK API + // DiagramAPI + list.add(new ASLPPluginProfile("queryShapeList", QueryShapeList.class.getName(), "查询所有的图形的集合,请直接调用SDK.getPALDiagramQueryAPI.list()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryFileElements", QueryFileElements.class.getName(), "获得流程文件中的节点列表(不包含linker元素),请直接调用SDK.getPALDiagramQueryAPI.getFileElements()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryRelationInfoByShapeId", QueryRelationInfoByShapeId.class.getName(), "获得文件中某个图形作为主动关联的关联信息(图形A的属性信息为图形B,则A为主动关联,B为被动关联),请直接调用SDK.getPALDiagramQueryAPI.getRelationInfoByShapeId()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryRelationInfoByRelationShapeId", QueryRelationInfoByRelationShapeId.class.getName(), "获得文件中某个图形作为被动关联的关联信息(图形A的属性信息为图形B,则A为主动关联,B为被动关联),请直接调用SDK.getPALDiagramQueryAPI.getRelationInfoByRelationShapeId()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + // MethodAPI + list.add(new ASLPPluginProfile("queryMethodById", QueryMethodById.class.getName(), "获取建模方法定义,请直接调用SDK.getPALMethodQueryAPI.getPALMethodModelById()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryMethodListByMethod", QueryMethodListByMethod.class.getName(), "获取建模方法定义集合,请直接调用SDK.getPALMethodQueryAPI.getPALMethodModelListByMethod()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + // PermAPI + list.add(new ASLPPluginProfile("havingPALMethodPermissionByTeam", HavingPALMethodPermissionByTeam.class.getName(), "该小组是否有访问指定资产库某类建模方法下资源的权限,如是否可以访问组织类文件,请直接调用SDK.getPALPermAPI.havingPALMethodPermissionByTeam()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("havingPALRepositoryPermissionByTeam", HavingPALRepositoryPermissionByTeam.class.getName(), "该小组是否有访问资产库指定文件的访问权限,请直接调用SDK.getPALPermAPI.havingPALRepositoryPermissionByTeam()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("removePermsByTeam", RemovePermsByTeam.class.getName(), "当流程团队小组被删除时,删除小组相关的配置资源和成员权限,请直接调用SDK.getPALPermAPI.removePermsByTeam()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("removeAllPerms", RemoveAllPerms.class.getName(), "卸载流程团队App时,删除所有权限配置,请直接调用SDK.getPALPermAPI.removeAllPerms()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("QueryTeamMemberActions", QueryTeamMemberActions.class.getName(), "获得小组全部成员的操作权限集合,请直接调用SDK.getPALPermAPI.getTeamMemberActions()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("QueryTeamMemberAction", QueryTeamMemberAction.class.getName(), "获得小组指定成员操作权限,请直接调用SDK.getPALPermAPI.getTeamMemberAction()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("havingReadPALRepositoryPermissionByGroupCodeList", HavingReadPALRepositoryPermissionByGroupCodeList.class.getName(), "指定的用户组集合是否有浏览某资产库文件的权限。适用于未开启与AWS平台角色集成,通过给定用户组代码确定浏览权限,请直接调用SDK.getPALPermAPI.havingReadPALRepositoryPermissionByGroupCodeList()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("havingReadPALRepositoryPermissionByGroupCode", HavingReadPALRepositoryPermissionByGroupCode.class.getName(), "指定的用户组是否有浏览某资产库文件的权限。适用于未开启与AWS平台角色集成,通过给定用户组代码确定浏览权限,请直接调用SDK.getPALPermAPI.havingReadPALRepositoryPermissionByGroupCode()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("havingReadPALRepositoryPermissionByUserId", HavingReadPALRepositoryPermissionByUserId.class.getName(), "指定的AWS账户是否有浏览某资产库文件的权限。适用于开启与AWS平台角色集成,直接判断AWS某角色是否具备浏览权限,请直接调用SDK.getPALPermAPI.havingReadPALRepositoryPermissionByUserId()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("havingReadPALRepositoryPermissionByRoleId", HavingReadPALRepositoryPermissionByRoleId.class.getName(), "指定的AWS角色是否有浏览某资产库文件的权限。适用于开启与AWS平台角色集成,直接判断AWS某角色是否具备浏览权限,请直接调用SDK.getPALPermAPI.havingReadPALRepositoryPermissionByRoleId()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + // PublishAPI + list.add(new ASLPPluginProfile("publishPALRepository", PublishPALRepository.class.getName(), "发布指定范围内的流程,该API可以被外部流程调用,完成发布动作,请直接调用SDK.getPALPermAPI.publishPALRepository()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + // ReppositoryAPI + list.add(new ASLPPluginProfile("queryRepositoryList", QueryRepositoryList.class.getName(), "查询资产库文件,请直接调用SDK.getPALRepositoryQueryAPI.list()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryPALRepositoryModelsByTeamId", QueryPALRepositoryModelsByTeamId.class.getName(), "查询小组可访问的资产库文件,请直接调用SDK.getPALRepositoryQueryAPI.getPALRepositoryModelsByTeamId()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryPALRepositoryModelsByTeamIdAndMethodId", QueryPALRepositoryModelsByTeamIdAndMethodId.class.getName(), "获取有权限的资产库文件,请直接调用SDK.getPALRepositoryQueryAPI.getPALRepositoryModelsByTeamIdAndMethodId()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryPALRepositoryModelsByWsId", QueryPALRepositoryModelsByWsId.class.getName(), "获取某个资产库所有文件,请直接调用SDK.getPALRepositoryQueryAPI.getPALRepositoryModelsByWsId()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryPALRepositoryModelsByName", QueryPALRepositoryModelsByName.class.getName(), "根据名称获取资产库文件,请直接调用SDK.getPALRepositoryQueryAPI.getPalRepositoryModelsByName()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryPALRepositoryModelsByPid", QueryPALRepositoryModelsByPid.class.getName(), "获取某个流程的子流程,只获取第一级子流程,请直接调用SDK.getPALRepositoryQueryAPI.getPalRepositoryModelsByPid()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryAllPALRepositoryModelsByPid", QueryAllPALRepositoryModelsByPid.class.getName(), "获取某个流程的所有子流程,请直接调用SDK.getPALRepositoryQueryAPI.getAllPalRepositoryModelsByPid()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryPALRepositoryModelsByWsIdAndMethodId", QueryPALRepositoryModelsByWsIdAndMethodId.class.getName(), "获取流程资产库下的流程,请直接调用SDK.getPALRepositoryQueryAPI.getPalRepositoryModelsByWsIdAndMethodId()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryUsedPALRepositoryModelsByWsId", QueryUsedPALRepositoryModelsByWsId.class.getName(), "获取流程资产库下使用中的流程,请直接调用SDK.getPALRepositoryQueryAPI.getUsedPalRepositoryModelsByWsId()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryUsedPALRepositoryModelsByPid", QueryUsedPALRepositoryModelsByPid.class.getName(), "获取流程资产库下使用中的子流程,只获取第一级正在使用中的子流程,请直接调用SDK.getPALRepositoryQueryAPI.getUsedPalRepositoryModelsByPid()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryAllUsedPALRepositoryModelsByPid", QueryAllUsedPALRepositoryModelsByPid.class.getName(), "获取流程资产库下所有使用中的子流程,请直接调用SDK.getPALRepositoryQueryAPI.getAllUsedPalRepositoryModelsByPid()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryPublishedPALRepositoryModelsByWsId", QueryPublishedPALRepositoryModelsByWsId.class.getName(), "获取流程资产库下已发布的流程,请直接调用SDK.getPALRepositoryQueryAPI.getPublishedPalRepositoryModelsByWsId()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryPublishedPALRepositoryModelsByPid", QueryPublishedPALRepositoryModelsByPid.class.getName(), "获取流程资产库下已发布的子流程,只获取第一级正在使用中的子流程,请直接调用SDK.getPALRepositoryQueryAPI.getPublishedPalRepositoryModelsByPid()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + list.add(new ASLPPluginProfile("queryAllPublishedPALRepositoryModelsByPid", QueryAllPublishedPALRepositoryModelsByPid.class.getName(), "获取流程资产库下所有已发布的子流程,请直接调用SDK.getPALRepositoryQueryAPI.getAllPublishedPalRepositoryModelsByPid()方法", new HttpASLP(HttpASLP.AUTH_AWS_SID, null))); + + list.add(new AddOnsPluginProfile(RepositoryDiagramExistMark.class.getName(), "PAL初始化模型图标记", null)); + return list; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/StartListener.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/StartListener.java new file mode 100644 index 00000000..51d9eea8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/StartListener.java @@ -0,0 +1,520 @@ +package com.actionsoft.apps.coe.pal.plugin; + +import java.io.File; +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.*; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishHistoryCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupPermCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupRoleCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishListHistory; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; +import com.actionsoft.apps.coe.pal.pal.method.extend.MethodAppManager; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; +import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.*; +import com.actionsoft.apps.coe.pal.pal.repository.dao.*; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerImageCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerShapeCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.PALDesignerFileCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.PALDesignerFileDragModelCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.manage.CoeDesignerAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.dao.DesignerShapeRelationDao; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; +import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; +import com.actionsoft.apps.coe.pal.pal.repository.designer.web.CoeDesignerWeb; +import com.actionsoft.apps.coe.pal.pal.repository.model.*; +import com.actionsoft.apps.coe.pal.pal.repository.model.impl.PALRepositoryModelImpl; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; +import com.actionsoft.apps.coe.pal.system.util.XMLUtil; +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUser; +import com.actionsoft.apps.coe.pal.team.user.model.CoeUserModel; +import com.actionsoft.apps.coe.pal.teamwork.cache.TeamMemberPermCache; +import com.actionsoft.apps.coe.pal.teamwork.cache.TeamPermCache; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.apps.listener.AppListener; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.resource.plugin.profile.ACPluginProfile; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; +import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; +import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition; +import com.actionsoft.bpms.commons.login.constant.LoginConst; +import com.actionsoft.bpms.commons.session.SessionImpl; +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.dc.DCProfileManager; +import com.actionsoft.bpms.server.fs.dc.DCUtil; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.exception.AWSDataAccessException; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.dom4j.Document; +import org.dom4j.Element; + +import static com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil.correctFileRelationPropData; +import static com.actionsoft.apps.coe.pal.pal.repository.util.CoeProcessLevelUtil.updateDefaultAttr2CustomAttr; + +public class StartListener implements AppListener{ + + @Override + public void after(AppContext appContext) { + // 批量调整模型的文件/形状默认属性至自定义属性中,必须放在initMethod之前 + // 不用参数判断,应用参数在分发和安装等操作出现不执行情况,改为判断dc中是否有该日志文件 + // boolean updateDefaultAttr = SDK.getAppAPI().getPropertyBooleanValue(appContext.getId(), "UPGRADE_DEFAULT_ATTRIBUTE", false); + String updateDefaultAttrPath = DCUtil.getPath() + CoEConstant.APP_ID + File.separator + "defaultAttrUpgrade"; + if (!new File(updateDefaultAttrPath).exists()) {// PAL云存储任务时需要进行适配 todo + SDK.getAppAPI().setProperty(appContext.getId(), "UPGRADE_DEFAULT_ATTRIBUTE", "false"); + String sid = new SessionImpl().registerSession(LoginConst.SYSTEM_COE, "admin", "0:0:0:0:0:0:0:1", "cn", "pc", true, null).getSessionId(); + UserContext uc = UserContext.fromSessionId(sid); + // 更新xml文件 + updateAttirbuteCustomXml(); + // 更新资产库相关配置和属性存储内容 + updateDefaultAttr2CustomAttr(uc, null, true); + } + initMethod(appContext);// 加载内置建模方法 + // 该方法放入了安装后事件中,若有必要,可放开该注释在启动后执行 + initPalRepositoryTableFilePath(appContext);// 批量调整流程资产库表流程路径 + // 更新APP_ACT_COE_PAL_CORRELATE表数据,APP_ACT_COE_PROP表数据转移至APP_ACT_COE_PAL_CORRELATE + // CoeProcessLevelUtil.updateCorrelateData(); + // 更新流程的发布时间 + // updatesPublishData(getPublishData()); + // 批量调整APP_ACT_COE_PAL_SHAPE_RLAT中文件属性(前置流程,后置流程) + correctFileRelationPropData(null); + } + + /** + * 批量更新发布时间 + * @param publishDatas + * @return + */ + public boolean updatesPublishData(JSONArray publishDatas) { + if (publishDatas.size() == 0) { + return false; + } + boolean flag = true; + Connection conn = DBSql.open(); + try { + conn.setAutoCommit(false); + for (int i = 0; i < publishDatas.size(); i++) { + JSONObject data = publishDatas.getJSONObject(i); + String id = data.getString("id"); + Timestamp publishDate = data.getTimestamp("publishDate"); + Timestamp changeDate = data.getTimestamp("changeDate"); + Timestamp stopDate = data.getTimestamp("stopDate"); + String type = data.getString("type"); + String sql = null; + switch (type) { + case "N": + sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_PL_PUBLISHDATE + "=? where " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + Object [] args = {publishDate, id}; + DBSql.update(conn, sql, args); + break; + case "C": + sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_PL_PUBLISHDATE + "=?, " + PALRepositoryModelImpl.FIELD_PL_CHANGEDATE + "=? where " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + Object [] args2 = {publishDate, changeDate, id}; + DBSql.update(conn, sql, args2); + break; + default:// "S" + sql = "UPDATE " + PALRepositoryModelImpl.DATABASE_ENTITY + " set " + PALRepositoryModelImpl.FIELD_PL_STOPDATE + "=? where " + PALRepositoryModelImpl.FIELD_UUID + "=?"; + Object [] args3 = {stopDate, id}; + DBSql.update(conn, sql, args3); + break; + } + } + conn.commit(); + PALRepositoryCache.getCache().reload(); + } catch (AWSDataAccessException e1) { + flag = false; + PALRepositoryCache.getCache().reload(); + try { + conn.rollback(); + } catch (SQLException e) { + e.printStackTrace(); + } + return flag; + } catch (SQLException e) { + e.printStackTrace(); + PALRepositoryCache.getCache().reload(); + flag = false; + } finally { + try { + conn.setAutoCommit(true); + } catch (SQLException e) { + e.printStackTrace(); + } + DBSql.close(conn); + } + return flag; + } + + /** + * 获取所有流程的发布时间信息 + * @return + */ + private JSONArray getPublishData() { + // 获取所有资产库 + List wsList = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getCoeWorkSpaceModelRecodesNoPage(); + PublishListHistory dao = new PublishListHistory(); + JSONArray datas = new JSONArray(); + for (CoeWorkSpaceModel model : wsList) { + String wsId = model.getUUId(); + Iterator iterator = PALRepositoryCache.getByWsId(wsId); + while (iterator.hasNext()) { + PALRepositoryModel plModel = (PALRepositoryModel) iterator.next(); + if (plModel != null) { + JSONObject publishObject = dao.getLastPublishDataByModelId(plModel.getId()); + if (publishObject == null || publishObject.isEmpty()) continue; + String type = publishObject.getString("type"); + Timestamp date = publishObject.getTimestamp("date"); + if (plModel.isPublish()) {// 已发布 + if ("N".equals(type)) { + // 更新发布时间 + JSONObject object = new JSONObject(); + object.put("id", plModel.getId()); + object.put("type", type); + object.put("publishDate", date); + datas.add(object); + } else if ("C".equals(type)) { + // 更新发布时间和变更时间 + JSONObject object = new JSONObject(); + object.put("id", plModel.getId()); + object.put("type", type); + object.put("publishDate", date); + object.put("changeDate", date); + datas.add(object); + } + } else {// 设计中 + if ("S".equals(type)) { + // 更新停用时间 + JSONObject object = new JSONObject(); + object.put("id", plModel.getId()); + object.put("type", type); + object.put("stopDate", date); + datas.add(object); + } + } + } + } + } + return datas; + } + + /** + * 批量调整流程资产库表流程路径APP_ACT_COE_PAL_REPOSITORY和APP_ACT_COE_PAL_REPO_R + */ + private void initPalRepositoryTableFilePath(AppContext appContext) { + PALRepository dao = new PALRepository(); + List models = dao.getAllInstance(); + if (models != null) { + Map map = new HashMap<>(); + for (PALRepositoryModel model : models) { + String filePath = model.getFilePath(); + if (!UtilString.isEmpty(filePath)) { + if (filePath.contains("../apps/install/_bpm.coe/") || filePath.contains("../apps/install/com.actionsoft.apps.coe.pal/")) { + filePath = filePath.replace("../apps/install/_bpm.coe/", DCUtil.getPath() + appContext.getId() + "/"); + filePath = filePath.replace("../apps/install/com.actionsoft.apps.coe.pal/", DCUtil.getPath() + appContext.getId() + "/"); + // 替换成dc路径 + map.put(model.getId(), filePath); + } + } + } + if (map.size() > 0) { + boolean isSuccess = dao.updateFilePath(map); + if (isSuccess) { + SDK.getLogAPI().consoleInfo("[" + appContext.getNameI18N() + "]批量调整PAL流程资产库APP_ACT_COE_PAL_REPOSITORY数据库表FILEPATH字段[" + map.size() + "]条"); + } + } + } + PALRepositoryRemove removeDao = new PALRepositoryRemove(); + List removeModels = removeDao.getAllInstance(); + if (removeModels != null) { + Map map = new HashMap<>(); + for (PALRepositoryRemoveModel model : removeModels) { + String filePath = model.getFilePath(); + if (!UtilString.isEmpty(filePath)) { + if (filePath.contains("../apps/install/_bpm.coe/") || filePath.contains("../apps/install/com.actionsoft.apps.coe.pal/")) { + filePath = filePath.replace("../apps/install/_bpm.coe/", DCUtil.getPath() + appContext.getId() + "/"); + filePath = filePath.replace("../apps/install/com.actionsoft.apps.coe.pal/", DCUtil.getPath() + appContext.getId() + "/"); + // 替换成dc路径 + map.put(model.getId(), filePath); + } + } + } + if (map.size() > 0) { + boolean isSuccess = removeDao.updateFilePath(map); + if (isSuccess) { + SDK.getLogAPI().consoleInfo("[" + appContext.getNameI18N() + "]批量调整PAL流程资产库APP_ACT_COE_PAL_REPO_R数据库表FILEPATH字段[" + map.size() + "]条"); + } + } + } + } + + /** + * 加载PAL出厂内置的建模方法 + * @param appContext + */ + private void initMethod(AppContext appContext) { + // 重新注册 + MethodAppManager.register("process.bpmn2", appContext, "process.bpmn2", "bpmn2建模方法"); + MethodAppManager.register("process.evc", appContext, "process.evc", "evc建模方法"); + MethodAppManager.register("data.form", appContext, "data.form", "data建模方法"); + // 是否显示建模方法分类"组织" + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "SHOW_ORG_METHOD_CATEGORY", true)) { + MethodAppManager.register("org.normal", appContext, "org.normal", "org建模方法"); + } else { + MethodAppManager.destory("org.normal"); + } + + //新增org.role by zhaolei + MethodAppManager.register("org.role", appContext, "org.role", "角色图"); + + + + // MethodAppManager.register("product.normal", appContext); + MethodAppManager.register("itsystem.normal", appContext, "itsystem.normal", "itsystem建模方法"); + MethodAppManager.register("control.policy", appContext, "control.policy", "policy建模方法"); + MethodAppManager.register("control.risk", appContext, "control.risk", "risk建模方法"); + MethodAppManager.register("control.kpi", appContext, "control.kpi", "kpi建模方法"); + MethodAppManager.register("control.framework", appContext, "control.framework", "系统架构KPI建模方法"); + + // 是否开启业务层级、业务域、流程组建模方法 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "OPEN_BUSINESS_METHOD", false)) { + MethodAppManager.register("process.businessLevel", appContext, "process.businessLevel", "业务层级建模方法", true); + MethodAppManager.register("process.businessArea", appContext, "process.businessArea", "业务域建模方法", true); + MethodAppManager.register("process.processGroup", appContext, "process.processGroup", "流程组建模方法", true); + } else { + MethodAppManager.destory("process.businessLevel"); + MethodAppManager.destory("process.businessArea"); + MethodAppManager.destory("process.processGroup"); + } + } + + @Override + public boolean before(AppContext app) { + // 三员处理 + if (!initHighSecurityUser(app)) { + return false; + } + return true; + } + + /** + * 初始化三员相关账户 + */ + private boolean initHighSecurityUser(AppContext app) { + // 三员判断处理 + CoeUser dao = new CoeUser(); + if (HighSecurityUtil.isON()) {// 三员开启,删除pal的admin用户,添加对应的安全保密员用户 + SDK.getLogAPI().consoleInfo("[" + app.getNameI18N() + "]三员安全保密控制模式[开启]"); + // 1.判断用户表是否有admin,有则删除 + List adminList = new ArrayList<>(); + adminList.add("admin"); + try { + List adminUserList = dao.getCoeUsers(adminList); + if (adminUserList != null && adminUserList.size() > 0) { + // 删除 + dao.delete(adminList); + SDK.getLogAPI().consoleInfo("[" + app.getNameI18N() + "]三员安全开启,删除默认的ADMIN用户[成功]"); + } + } catch (SQLException e) { + e.printStackTrace(); + SDK.getLogAPI().consoleErr("[" + app.getNameI18N() + "]三员安全用户初始化错误:" + e.getMessage()); + return false; + } + // 2.判断用户表是否有平台安全保密员,没有则添加 + try { + List secAdminList = HighSecurityUtil.getSecAdminList(); + List secAdminUserList = dao.getCoeUsers(secAdminList); + Set userIdSet = new HashSet<>(); + if (secAdminUserList != null && secAdminUserList.size() > 0) { + for (CoeUserModel user : secAdminUserList) { + userIdSet.add(user.getUserId()); + } + } + List insertUserList = new ArrayList<>(); + for (String userId : secAdminList) { + if (!userIdSet.contains(userId)) { + insertUserList.add(userId); + } + } + if (insertUserList.size() > 0) {// 将系统的安全保密员新增至PAL管理用户中 + dao.createUser(insertUserList, "1"); + SDK.getLogAPI().consoleInfo("[" + app.getNameI18N() + "]三员安全开启,添加默认的安全保密员用户[成功]"); + } + } catch (SQLException e) { + e.printStackTrace(); + SDK.getLogAPI().consoleErr("[" + app.getNameI18N() + "]三员安全用户初始化错误:" + e.getMessage()); + return false; + } + } else {// 三员关闭,添加pal的admin用户,删除对应的安全保密员用户 + // 1.判断用户表是否有admin,没有则添加 + List adminList = new ArrayList<>(); + adminList.add("admin"); + try { + List adminUserList = dao.getCoeUsers(adminList); + if (adminUserList == null || adminUserList.size() == 0) { + // 添加 + dao.createUser(adminList, "1"); + SDK.getLogAPI().consoleInfo("[" + app.getNameI18N() + "]三员安全关闭,添加默认的ADMIN用户[成功]"); + } + } catch (SQLException e) { + e.printStackTrace(); + SDK.getLogAPI().consoleErr("[" + app.getNameI18N() + "]三员安全用户初始化错误:" + e.getMessage()); + return false; + } + // 2.判断用户表是否有平台安全保密员,有则删除 + try { + List secAdminList = HighSecurityUtil.getSecAdminList(); + List secAdminUserList = dao.getCoeUsers(secAdminList); + if (secAdminUserList != null && secAdminUserList.size() > 0) { + dao.delete(secAdminList); + SDK.getLogAPI().consoleInfo("[" + app.getNameI18N() + "]三员安全关闭,删除默认的安全保密员用户[成功]"); + } + } catch (SQLException e) { + e.printStackTrace(); + SDK.getLogAPI().consoleErr("[" + app.getNameI18N() + "]三员安全用户初始化错误:" + e.getMessage()); + return false; + } + } + return true; + } + + /** + * 更新自定义属性xml文件 + */ + public void updateAttirbuteCustomXml() { + String methodPath = "../apps/install/com.actionsoft.apps.coe.pal/method/"; + String customXmlName = "diagram.attribute.custom.xml"; + + //control.control 金鹏 + handleCustomXml(methodPath + "control.framework/" + customXmlName); + + // control.kpi + handleCustomXml(methodPath + "control.kpi/" + customXmlName); + // control.policy + handleCustomXml(methodPath + "control.policy/" + customXmlName); + // control.risk + handleCustomXml(methodPath + "control.risk/" + customXmlName); + // data.form + handleCustomXml(methodPath + "data.form/" + customXmlName); + // itsystem.normal + handleCustomXml(methodPath + "itsystem.normal/" + customXmlName); + // org.normal + handleCustomXml(methodPath + "org.normal/" + customXmlName); + // process.bpmn2 + handleCustomXml(methodPath + "process.bpmn2/" + customXmlName); + // process.evc + handleCustomXml(methodPath + "process.evc/" + customXmlName); + methodPath = "../apps/install/com.actionsoft.apps.coe.method.process.epc/method/"; + // process.epc + handleCustomXml(methodPath + "process.epc/" + customXmlName); + methodPath = "../apps/install/com.actionsoft.apps.coe.method.process.flowchart/method/"; + // process.flowchart + handleCustomXml(methodPath + "process.flowchart/" + customXmlName); + + + //control.role 赵磊 + handleCustomXml(methodPath + "org.role/" + customXmlName); + + + + } + + /** + * 处理自定义的属性文件 + * @param customXmlPath + */ + private void handleCustomXml(String customXmlPath) { + + File customFile = new File(customXmlPath); + if (customFile.exists()) { + SDK.getLogAPI().consoleInfo("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "[升级固定属性]备份并调整" + customXmlPath + "建模方法自定义属性配置文件"); + File defaultFile = new File(customFile.getParentFile().getPath() + File.separator + "diagram.attribute.xml"); + // 备份xml文件 + try { + UtilFile.copyFile(customFile, new File(customFile.getParentFile().getPath() + File.separator + "diagram.attribute.custom.xml_bak")); + } catch (Exception e) { + e.printStackTrace(); + } + // 升级 + Document defaultDocument = XMLUtil.readXML(defaultFile.getPath()); + List defaultElements = defaultDocument.getRootElement().elements("attribute"); + Document customDocument = XMLUtil.readXML(customXmlPath); + List customElements = customDocument.getRootElement().elements("attribute"); + // raci,如果是awsorg类型的,修改对应的key为bpm_开头 + for (Element e : customElements) { + if ("duty_r".equals(e.attributeValue("key"))) { + if ("awsorg".equals(e.attributeValue("type"))) { + e.attribute("key").setValue("bpm_duty_r"); + } + } else if ("approval_a".equals(e.attributeValue("key"))) { + if ("awsorg".equals(e.attributeValue("type"))) { + e.attribute("key").setValue("bpm_approval_a"); + } + } else if ("counselor_c".equals(e.attributeValue("key"))) { + if ("awsorg".equals(e.attributeValue("type"))) { + e.attribute("key").setValue("bpm_counselor_c"); + } + } else if ("notify_i".equals(e.attributeValue("key"))) { + if ("awsorg".equals(e.attributeValue("type"))) { + e.attribute("key").setValue("bpm_notify_i"); + } + } + } + // relation类型属性根据默认属性文件或者所属父目录修改ref + for (Element e : customElements) { + String key = e.attributeValue("key"); + String type = e.attributeValue("type"); + if ("relation".equals(type) || "awsorg".equals(type)) { + boolean isDefault = false; + for (Element ee : defaultElements) { + if (ee.attributeValue("key").equals(key)) { + isDefault = true; + e.attribute("ref").setValue(ee.attributeValue("ref")); + } + } + if (!isDefault) { + if ("awsorg".equals(type)) { + e.attribute("ref").setValue("{'scope':['department','position','role','user'],'multiple':true}"); + } else { + String groupPath = e.attributeValue("groupPath"); + String ref = "{method:'',multiple:true,type:'shape'}"; + if ("data_form".equals(groupPath)) { + ref = "{method:'data',multiple:true,type:'shape'}"; + } else if ("itsystem_normal".equals(groupPath)) { + ref = "{method:'itsystem',multiple:true,type:'shape'}"; + } else if ("control".equals(groupPath)) { + ref = "{method:'control',multiple:true,type:'shape'}"; + } else if ("organization".equals(groupPath)) { + ref = "{method:'org',multiple:true,type:'shape'}"; + } else if ("process_model".equals(groupPath)) { + ref = "{method:'process',multiple:true,type:'file'}"; + } + e.attribute("ref").setValue(ref); + } + } + } + } + // 写入 + XMLUtil.writeXml(customDocument, customXmlPath); + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/StopListener.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/StopListener.java new file mode 100644 index 00000000..1d4b5141 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/plugin/StopListener.java @@ -0,0 +1,37 @@ +package com.actionsoft.apps.coe.pal.plugin; + +import com.actionsoft.apps.coe.pal.pal.method.extend.MethodAppManager; +import com.actionsoft.apps.listener.AppListener; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishHistoryCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupPermCache; +import com.actionsoft.apps.coe.pal.pal.manage.publish.cache.PublishUserGroupRoleCache; +import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodTemplateCache; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.CoeDesignerShapeCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.PALDesignerFileCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.cache.PALDesignerFileDragModelCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; +import com.actionsoft.apps.coe.pal.teamwork.cache.TeamMemberPermCache; +import com.actionsoft.apps.coe.pal.teamwork.cache.TeamPermCache; + +public class StopListener implements AppListener{ + + @Override + public void after(AppContext arg0) { + try{ + CoEConstant.timer1.cancel(); + CoEConstant.timer2.cancel(); + // MethodAppManager.destoryAll(); + } catch (IllegalStateException e) { + } + } + + @Override + public boolean before(AppContext arg0) { + return true; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/constant/CoENavConstant.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/constant/CoENavConstant.java new file mode 100644 index 00000000..8899fd66 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/constant/CoENavConstant.java @@ -0,0 +1,53 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.constant; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; + +public class CoENavConstant { + //禁用slider + public static final String NAV_SLIDER_DISABLED = "0"; + //启用slider + public static final String NAV_SLIDER_ENABLED = "1"; + + //不是系统内置 + public static final String NAV_CHANNEL_IS_NOT_SYSTEM = "0"; + //是系统 + public static final String NAV_CHANNEL_IS_SYSTEM = "1"; + + //频道实现类默认提示 + public static final String NAV_CHANNEL_CLASS_IMPL_DEFVAL = " com.actionsoft.apps.coe.pal.portal.item.CoENavChannelItemInterface "; + + public static final String NAV_CHANNEL_TITLE_DEFVAL = "无频道名称"; + + public static final String NAV_CHANNEL_DEFAULT_CLASS_IMPL = "com.actionsoft.apps.coe.pal.portal.item.impl.CoENavChannelItemDefaultImpl"; + + public static final String NAV_SLIDER_DEFAULT_ICON = "../apps/" + CoEConstant.APP_ID + "/img/icon.png"; + + //请求类型-url + public static final String NAV_BUTTON_ACTION_TYPE_URL = "1"; + public static final String NAV_BUTTON_ACTION_TYPE_URL_VAL = "URL"; + //请求类型-javascript + public static final String NAV_BUTTON_ACTION_TYPE_JAVASCRIPT = "2"; + public static final String NAV_BUTTON_ACTION_TYPE_JAVASCRIPT_VAL = "JavaScript"; + + public static final String NAV_BUTTON_TARGET_MAIN = "mainFrame"; + public static final String NAV_BUTTON_TARGET_BLANK = "_blank"; + public static final String NAV_BUTTON_TARGET_SELF = "_self"; + + public static final String NAV_CHANNEL_DEFAULT_TITLE = "无标题"; +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/CoENavButtonDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/CoENavButtonDao.java new file mode 100644 index 00000000..c8022e8f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/CoENavButtonDao.java @@ -0,0 +1,207 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.apps.coe.pal.portal.model.CoENavButtonModel; +import com.actionsoft.exception.AWSDataAccessException; + +public class CoENavButtonDao extends DaoObject { + + public CoENavButtonDao() { + // super.setEntityName(CoENavButtonModel.DATABASE_ENTITY); + } + + public int create(PlatformMetaModelBean obj) throws SQLException { + StringBuffer sql = new StringBuffer(); + CoENavButtonModel model = (CoENavButtonModel) obj; + // ID需要更换为String UUID zhoux 2014.1.8 + // model.setId(getSequenceValue()); + + sql.append("insert into "); + sql.append(entityName()); + sql.append(" ("); + sql.append(CoENavButtonModel.FIELD_ID).append(","); + sql.append(CoENavButtonModel.FIELD_CREATE_USER).append(","); + sql.append(CoENavButtonModel.FIELD_CREATE_DATE).append(","); + sql.append(CoENavButtonModel.FIELD_MENU_TITLE).append(","); + sql.append(CoENavButtonModel.FIELD_MENU_TIP).append(","); + sql.append(CoENavButtonModel.FIELD_TARGET).append(","); + sql.append(CoENavButtonModel.FIELD_MENU_ICON).append(","); + sql.append(CoENavButtonModel.FIELD_ORDER_INDEX).append(","); + sql.append(CoENavButtonModel.FIELD_ACTION_TYPE).append(","); + sql.append(CoENavButtonModel.FIELD_ACTION_VALUE).append(","); + sql.append(CoENavButtonModel.FIELD_UUID).append(","); + sql.append(CoENavButtonModel.FIELD_NAV_SLIDER_UUID); + sql.append(") values("); + sql.append(model.getId()).append(","); + sql.append("'").append(model.getCreateUser()).append("'").append(","); + sql.append(DBSql.getDBDateFunction()).append(","); + sql.append("?,"); + sql.append("?,"); + sql.append("?,"); + sql.append("?,"); + sql.append("?,"); + sql.append("?,"); + sql.append("?,"); + sql.append("?,"); + sql.append("?"); + sql.append(")"); + Object[] params = new Object[] { model.getMenuTitle(), model.getMenuTip(), model.getTarget(), model.getMenuIcon(), model.getOrderIndex(), model.getActionType(), model.getActionValue(), model.getUUID(), model.getNavSliderUUID() }; + int r = DBSql.update(sql.toString(), params); + return r; + } + + public Map getInstance(String arg0, String arg1) { + return null; + } + + public PlatformMetaModelBean record2Model(ResultSet rs) { + CoENavButtonModel model = new CoENavButtonModel(); + try { + model.setId(rs.getInt(CoENavButtonModel.FIELD_ID)); + model.setCreateUser(rs.getString(CoENavButtonModel.FIELD_CREATE_USER)); + model.setCreateDate(rs.getTimestamp(CoENavButtonModel.FIELD_CREATE_DATE)); + model.setMenuTitle(rs.getString(CoENavButtonModel.FIELD_MENU_TITLE)); + model.setMenuTip(rs.getString(CoENavButtonModel.FIELD_MENU_TIP)); + model.setTarget(rs.getString(CoENavButtonModel.FIELD_TARGET)); + model.setMenuIcon(rs.getString(CoENavButtonModel.FIELD_MENU_ICON)); + model.setOrderIndex(rs.getInt(CoENavButtonModel.FIELD_ORDER_INDEX)); + model.setActionType(rs.getString(CoENavButtonModel.FIELD_ACTION_TYPE)); + model.setActionValue(rs.getString(CoENavButtonModel.FIELD_ACTION_VALUE)); + model.setUUID(rs.getString(CoENavButtonModel.FIELD_UUID)); + model.setNavSliderUUID(rs.getString(CoENavButtonModel.FIELD_NAV_SLIDER_UUID)); + } catch (SQLException e) { + e.printStackTrace(); + } + return model; + } + + public int update(PlatformMetaModelBean obj) { + StringBuffer sql = new StringBuffer(); + CoENavButtonModel model = (CoENavButtonModel) obj; + sql.append("UPDATE ").append(entityName()); + sql.append(" set ").append(CoENavButtonModel.FIELD_MENU_TITLE).append("=?,"); + sql.append(CoENavButtonModel.FIELD_MENU_TIP).append("=?,"); + sql.append(CoENavButtonModel.FIELD_TARGET).append("=?,"); + sql.append(CoENavButtonModel.FIELD_MENU_ICON).append("=?,"); + sql.append(CoENavButtonModel.FIELD_ACTION_TYPE).append("=?,"); + sql.append(CoENavButtonModel.FIELD_ACTION_VALUE).append("=?"); + sql.append(" where ").append(CoENavButtonModel.FIELD_UUID).append("=?"); + int r = DBSql.update(sql.toString(), new Object[] { model.getMenuTitle(), model.getMenuTip(), model.getTarget(), model.getMenuIcon(), model.getActionType(), model.getActionValue(), model.getUUID() }); + return r; + } + + public int getMaxOrderIndex() { + String sliasName = " orderIndex "; + StringBuffer sql = new StringBuffer(); + sql.append("select max(").append(CoENavButtonModel.FIELD_ORDER_INDEX).append(")").append(sliasName); + sql.append(" from ").append(entityName()); + return DBSql.getInt(sql.toString(), sliasName.trim()); + } + + public List getInstance(String sql, String sortname, String sorttype) { + try { + return DBSql.query(sql.toString(), new CoENavButtonModelMapper()); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return new ArrayList(); + } + + private class CoENavButtonModelMapper implements RowMapper { + + public CoENavButtonModel mapRow(ResultSet rs, int arg1) throws SQLException { + CoENavButtonModel model = new CoENavButtonModel(); + try { + model.setId(rs.getInt(CoENavButtonModel.FIELD_ID)); + model.setCreateUser(rs.getString(CoENavButtonModel.FIELD_CREATE_USER)); + model.setCreateDate(rs.getTimestamp(CoENavButtonModel.FIELD_CREATE_DATE)); + model.setMenuTitle(rs.getString(CoENavButtonModel.FIELD_MENU_TITLE)); + model.setMenuTip(rs.getString(CoENavButtonModel.FIELD_MENU_TIP)); + model.setTarget(rs.getString(CoENavButtonModel.FIELD_TARGET)); + model.setMenuIcon(rs.getString(CoENavButtonModel.FIELD_MENU_ICON)); + model.setOrderIndex(rs.getInt(CoENavButtonModel.FIELD_ORDER_INDEX)); + model.setActionType(rs.getString(CoENavButtonModel.FIELD_ACTION_TYPE)); + model.setActionValue(rs.getString(CoENavButtonModel.FIELD_ACTION_VALUE)); + model.setUUID(rs.getString(CoENavButtonModel.FIELD_UUID)); + model.setNavSliderUUID(rs.getString(CoENavButtonModel.FIELD_NAV_SLIDER_UUID)); + } catch (SQLException e) { + e.printStackTrace(); + } + return model; + } + + } + + public List findButtonsBySliderUUID(String sliderUUID) { + StringBuffer sql = new StringBuffer(); + sql.append("select * from ").append(entityName()); + sql.append(" where ").append(CoENavButtonModel.FIELD_NAV_SLIDER_UUID).append("='").append(sliderUUID).append("'"); + return getInstance(sql.toString(), CoENavButtonModel.FIELD_ORDER_INDEX, "ASC"); + } + + public CoENavButtonModel findButtonByUUID(String buttonUUID) { + StringBuffer sql = new StringBuffer(); + sql.append("select * from ").append(entityName()); + sql.append(" where ").append(CoENavButtonModel.FIELD_UUID).append("='").append(buttonUUID).append("'"); + List models = getInstance(sql.toString(), CoENavButtonModel.FIELD_ORDER_INDEX, "ASC"); + if (models.isEmpty()) { + return null; + } else { + return models.get(0); + } + } + + public String delButtonById(String buttonUUID) { + StringBuffer sql = new StringBuffer(); + sql.append("delete from ").append(entityName()); + sql.append(" where ").append(CoENavButtonModel.FIELD_UUID).append(" = '").append(buttonUUID).append("'"); + return DBSql.update(sql.toString()) + ""; + } + + public String delButtonBySilderUUId(String silderUUid) { + StringBuffer sql = new StringBuffer(); + sql.append("delete from ").append(entityName()); + sql.append(" where ").append(CoENavButtonModel.FIELD_NAV_SLIDER_UUID).append(" = '").append(silderUUid).append("'"); + return DBSql.update(sql.toString()) + ""; + } + + @Override + public int insert(PlatformMetaModelBean daoObj) { + return 0; + } + + @Override + public String entityName() { + return CoENavButtonModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return null; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/CoENavChannelDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/CoENavChannelDao.java new file mode 100644 index 00000000..1ccdb0d6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/CoENavChannelDao.java @@ -0,0 +1,205 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.apps.coe.pal.portal.model.CoENavChannelModel; +import com.actionsoft.apps.coe.pal.system.util.StringUtil; +import com.actionsoft.apps.coe.pal.team.user.model.CoeUserModel; +import com.actionsoft.exception.AWSDataAccessException; + +public class CoENavChannelDao extends DaoObject { + + public CoENavChannelDao() { + // super.setEntityName(CoENavChannelModel.DATABASE_ENTITY); + } + + public int create(PlatformMetaModelBean obj) throws SQLException { + StringBuffer sql = new StringBuffer(); + CoENavChannelModel model = (CoENavChannelModel) obj; + // ID需要更换为String UUID zhoux 2014.1.8 + // model.setId(getSequenceValue()); + + sql.append("insert into "); + sql.append(entityName()); + sql.append(" ("); + sql.append(CoENavChannelModel.FIELD_ID).append(","); + sql.append(CoENavChannelModel.FIELD_CREATE_USER).append(","); + sql.append(CoENavChannelModel.FIELD_CREATE_DATE).append(","); + sql.append(CoENavChannelModel.FIELD_CHANNEL_TITLE).append(","); + sql.append(CoENavChannelModel.FIELD_CLASS_IMPL).append(","); + sql.append(CoENavChannelModel.FIELD_DEFAULT_VIEW).append(","); + sql.append(CoENavChannelModel.FIELD_ORDER_INDEX).append(","); + sql.append(CoENavChannelModel.FIELD_IS_SYSTEM).append(","); + sql.append(CoENavChannelModel.FIELD_UUID); + sql.append(") values(?,"); + sql.append("?,"); + sql.append(DBSql.getDBDateFunction()).append(","); + sql.append("?,"); + sql.append("?,"); + sql.append("?,"); + sql.append("?,"); + sql.append("?,"); + sql.append("?"); + sql.append(")"); + int r = DBSql.update(sql.toString(), new Object[] { model.getId(), model.getCreateUser(), model.getChannelTitle(), model.getClassImpl(), model.getDefaultView(), model.getOrderIndex(), model.getIsSystem(), model.getUUID() }); + /* if(r == DBSql.SQL_EXECUTE_STATUS_OK){ return model.getId(); }else{ + * return r ; } */ + return r; + } + + public PlatformMetaModelBean record2Model(ResultSet rs) { + CoENavChannelModel model = new CoENavChannelModel(); + try { + model.setId(rs.getInt(CoENavChannelModel.FIELD_ID)); + model.setCreateUser(rs.getString(CoENavChannelModel.FIELD_CREATE_USER)); + model.setCreateDate(rs.getTimestamp(CoENavChannelModel.FIELD_CREATE_DATE)); + model.setChannelTitle(rs.getString(CoENavChannelModel.FIELD_CHANNEL_TITLE)); + model.setClassImpl(rs.getString(CoENavChannelModel.FIELD_CLASS_IMPL)); + model.setDefaultView(rs.getString(CoENavChannelModel.FIELD_DEFAULT_VIEW)); + model.setOrderIndex(rs.getInt(CoENavChannelModel.FIELD_ORDER_INDEX)); + model.setIsSystem(rs.getString(CoENavChannelModel.FIELD_IS_SYSTEM)); + model.setUUID(rs.getString(CoENavChannelModel.FIELD_UUID)); + } catch (SQLException e) { + e.printStackTrace(); + } + return model; + } + + @Override + public int update(PlatformMetaModelBean obj) { + StringBuffer sql = new StringBuffer(); + CoENavChannelModel model = (CoENavChannelModel) obj; + sql.append("UPDATE ").append(entityName()); + sql.append(" set ").append(CoENavChannelModel.FIELD_CHANNEL_TITLE).append("=").append("'").append(model.getChannelTitle()).append("'").append(","); + sql.append(CoENavChannelModel.FIELD_CLASS_IMPL).append("=").append("'").append(model.getClassImpl()).append("'").append(","); + sql.append(CoENavChannelModel.FIELD_DEFAULT_VIEW).append("=").append("'").append(StringUtil.convertSign(model.getDefaultView())).append("'"); + sql.append(" where ").append(CoENavChannelModel.FIELD_UUID).append("=").append("'").append(model.getUUID()).append("'"); + int r = DBSql.update(sql.toString()); + return r; + } + + public List findAllChannel() { + return findAllChannel(CoENavChannelModel.FIELD_ORDER_INDEX, "ASC"); + } + + public List findAllChannel(String sortname, String sorttype) { + StringBuffer sql = new StringBuffer(); + sql.append("select * from ").append(entityName()); + try { + return DBSql.query(sql.toString(), new CoENavChannelModelMapper()); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return new ArrayList(); + } + + private class CoENavChannelModelMapper implements RowMapper { + public CoENavChannelModel mapRow(ResultSet rs, int arg1) throws SQLException { + CoENavChannelModel model = new CoENavChannelModel(); + try { + model.setId(rs.getInt(CoENavChannelModel.FIELD_ID)); + model.setCreateUser(rs.getString(CoENavChannelModel.FIELD_CREATE_USER)); + model.setCreateDate(rs.getTimestamp(CoENavChannelModel.FIELD_CREATE_DATE)); + model.setChannelTitle(rs.getString(CoENavChannelModel.FIELD_CHANNEL_TITLE)); + model.setClassImpl(rs.getString(CoENavChannelModel.FIELD_CLASS_IMPL)); + model.setDefaultView(rs.getString(CoENavChannelModel.FIELD_DEFAULT_VIEW)); + model.setOrderIndex(rs.getInt(CoENavChannelModel.FIELD_ORDER_INDEX)); + model.setIsSystem(rs.getString(CoENavChannelModel.FIELD_IS_SYSTEM)); + model.setUUID(rs.getString(CoENavChannelModel.FIELD_UUID)); + } catch (SQLException e) { + e.printStackTrace(); + } + return model; + } + + } + + /** + * 获得最大排序索引 + * + * @return + */ + public int getMaxOrderIndex() { + String sliasName = " orderIndex "; + StringBuffer sql = new StringBuffer(); + sql.append("select max(").append(CoENavChannelModel.FIELD_ORDER_INDEX).append(")").append(sliasName); + sql.append(" from ").append(entityName()); + return DBSql.getInt(sql.toString(), sliasName.trim()); + } + + public String updateOrderIndex(String channelUUID, String orderIndex) { + StringBuffer sql = new StringBuffer(); + sql.append("UPDATE ").append(entityName()); + sql.append(" set ").append(CoENavChannelModel.FIELD_ORDER_INDEX).append("=").append("'").append(orderIndex).append("'"); + sql.append(" where ").append(CoENavChannelModel.FIELD_UUID).append("=").append("'").append(channelUUID).append("'"); + int r = DBSql.update(sql.toString()); + return r + ""; + } + + /** + * 通过UUID删除频道 + * + * @param channelUUID + * @return + */ + public String delChannelByUUID(String channelUUID) { + StringBuffer sql = new StringBuffer(); + sql.append("delete from ").append(entityName()); + sql.append(" where ").append(CoENavChannelModel.FIELD_UUID).append(" = '").append(channelUUID).append("'"); + return DBSql.update(sql.toString()) + ""; + } + + public CoENavChannelModel findChannelByUUID(String channelUUID) { + StringBuffer sql = new StringBuffer(); + sql.append("select * from ").append(entityName()); + sql.append(" where ").append(CoENavChannelModel.FIELD_UUID).append("='").append(channelUUID).append("'"); + try { + return DBSql.getObject(sql.toString(), new CoENavChannelModelMapper()); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public int insert(PlatformMetaModelBean daoObj) { + return 0; + } + + @Override + public String entityName() { + return CoENavChannelModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return null; + } + + /* public int getSequenceValue() throws SequenceException { return + * Sequence.getSequence(Sequence.SEQUENCE_SYS_COE_COMPONENTS); } */ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/CoENavDaoFactory.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/CoENavDaoFactory.java new file mode 100644 index 00000000..671e875b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/CoENavDaoFactory.java @@ -0,0 +1,57 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.bpms.commons.database.DaoFactory; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.ClassReflect; +import com.actionsoft.exception.AWSException; + +public class CoENavDaoFactory extends DaoFactory { + + public static final String DAO_CLASSPATH = "com.actionsoft.apps.coe.pal.portal.dao"; + + public static CoENavChannelDao createNavChannel(){ + try { + Class c = ClassReflect.forName(DAO_CLASSPATH + "." + AWSServerConf.getDatabaseProvider() + ".CoENavChannelAdapter", CoEConstant.APP_ID); + return (CoENavChannelDao) create(c); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + throw new AWSException(e); + } + } + public static CoENavSliderDao createNavSlider(){ + try { + Class c = ClassReflect.forName(DAO_CLASSPATH + "." + AWSServerConf.getDatabaseProvider() + ".CoENavSliderAdapter", CoEConstant.APP_ID); + return (CoENavSliderDao) create(c); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + throw new AWSException(e); + } + } + public static CoENavButtonDao createNavButton(){ + try { + Class c = ClassReflect.forName(DAO_CLASSPATH + "." + AWSServerConf.getDatabaseProvider() + ".CoENavButtonAdapter", CoEConstant.APP_ID); + return (CoENavButtonDao) create(c); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + throw new AWSException(e); + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/CoENavSliderDao.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/CoENavSliderDao.java new file mode 100644 index 00000000..a27148ea --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/CoENavSliderDao.java @@ -0,0 +1,245 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.apps.coe.pal.portal.model.CoENavSliderModel; +import com.actionsoft.apps.coe.pal.system.util.StringUtil; +import com.actionsoft.exception.AWSDataAccessException; + +public class CoENavSliderDao extends DaoObject { + + public CoENavSliderDao() { + // super.setEntityName(CoENavSliderModel.DATABASE_ENTITY); + } + + public int create(PlatformMetaModelBean obj) throws SQLException { + StringBuffer sql = new StringBuffer(); + CoENavSliderModel model = (CoENavSliderModel) obj; + // ID需要更换为String UUID zhoux 2014.1.8 + // model.setId(getSequenceValue()); + // model.setOrderIndex("1"); + + sql.append("insert into "); + sql.append(entityName()); + sql.append(" ("); + sql.append(CoENavSliderModel.FIELD_ID).append(","); + sql.append(CoENavSliderModel.FIELD_CREATE_USER).append(","); + sql.append(CoENavSliderModel.FIELD_CREATE_DATE).append(","); + sql.append(CoENavSliderModel.FIELD_SLIDER_TITLE).append(","); + sql.append(CoENavSliderModel.FIELD_SLIDER_TIP).append(","); + sql.append(CoENavSliderModel.FIELD_URL).append(","); + sql.append(CoENavSliderModel.FIELD_TARGET).append(","); + sql.append(CoENavSliderModel.FIELD_ICON_URL).append(","); + sql.append(CoENavSliderModel.FIELD_ORDER_INDEX).append(","); + sql.append(CoENavSliderModel.FIELD_IS_DISABLED).append(","); + sql.append(CoENavSliderModel.FIELD_IS_SYSTEM).append(","); + sql.append(CoENavSliderModel.FIELD_UUID).append(","); + sql.append(CoENavSliderModel.FIELD_CHANNEL_UUID); + sql.append(") values("); + sql.append(model.getId()).append(","); + sql.append("'").append(model.getCreateUser()).append("'").append(","); + sql.append(DBSql.getDBDateFunction()).append(","); + sql.append("'").append(model.getSliderTitle()).append("'").append(","); + sql.append("'").append(model.getSliderTip()).append("'").append(","); + sql.append("'").append(model.getUrl()).append("'").append(","); + sql.append("'").append(model.getTarget()).append("'").append(","); + sql.append("'").append(model.getIconUrl()).append("'").append(","); + sql.append(model.getOrderIndex()).append(","); + sql.append("'").append(model.getIsDisabled()).append("'").append(","); + sql.append("'").append(model.getiSystem()).append("'").append(","); + sql.append("'").append(model.getUUID()).append("'").append(","); + sql.append("'").append(model.getChannelUUID()).append("'"); + sql.append(")"); + int r = DBSql.update(sql.toString()); + /* if(r == DBSql.SQL_EXECUTE_STATUS_OK){ return model.getId(); }else{ + * return r ; } */ + return r; + } + + public PlatformMetaModelBean record2Model(ResultSet rs) { + CoENavSliderModel model = new CoENavSliderModel(); + try { + model.setId(rs.getInt(CoENavSliderModel.FIELD_ID)); + model.setCreateUser(rs.getString(CoENavSliderModel.FIELD_CREATE_USER)); + model.setCreateDate(rs.getTimestamp(CoENavSliderModel.FIELD_CREATE_DATE)); + model.setSliderTitle(rs.getString(CoENavSliderModel.FIELD_SLIDER_TITLE)); + model.setSliderTip(rs.getString(CoENavSliderModel.FIELD_SLIDER_TIP)); + model.setUrl(rs.getString(CoENavSliderModel.FIELD_URL)); + model.setTarget(rs.getString(CoENavSliderModel.FIELD_TARGET)); + model.setIconUrl(rs.getString(CoENavSliderModel.FIELD_ICON_URL)); + model.setOrderIndex(rs.getInt(CoENavSliderModel.FIELD_ORDER_INDEX)); + model.setIsDisabled(rs.getString(CoENavSliderModel.FIELD_IS_DISABLED)); + model.setUUID(rs.getString(CoENavSliderModel.FIELD_UUID)); + model.setChannelUUID(rs.getString(CoENavSliderModel.FIELD_CHANNEL_UUID)); + model.setiSystem(rs.getString(CoENavSliderModel.FIELD_IS_SYSTEM)); + } catch (SQLException e) { + e.printStackTrace(); + } + return model; + } + + @Override + public int update(PlatformMetaModelBean obj) { + StringBuffer sql = new StringBuffer(); + CoENavSliderModel model = (CoENavSliderModel) obj; + sql.append("UPDATE ").append(entityName()); + sql.append(" set ").append(CoENavSliderModel.FIELD_SLIDER_TITLE).append("=").append("'").append(model.getSliderTitle()).append("'").append(","); + sql.append(CoENavSliderModel.FIELD_SLIDER_TIP).append("=").append("'").append(model.getSliderTip()).append("'").append(","); + sql.append(CoENavSliderModel.FIELD_TARGET).append("=").append("'").append(model.getTarget()).append("'").append(","); + sql.append(CoENavSliderModel.FIELD_ICON_URL).append("=").append("'").append(model.getIconUrl()).append("'").append(","); + sql.append(CoENavSliderModel.FIELD_IS_DISABLED).append("=").append("'").append(model.getIsDisabled()).append("'").append(","); + sql.append(CoENavSliderModel.FIELD_URL).append("=").append("'").append(StringUtil.convertSign(model.getUrl())).append("'"); + sql.append(" where ").append(CoENavSliderModel.FIELD_UUID).append("=").append("'").append(model.getUUID()).append("'"); + + int r = DBSql.update(sql.toString()); + return r; + } + + public List findAllSlider(String channelUUID) { + return findAllSlider(channelUUID, CoENavSliderModel.FIELD_ORDER_INDEX, "ASC"); + } + + public List findAllSlider(String channelUUID, String sortname, String sorttype) { + StringBuffer sql = new StringBuffer(); + sql.append("select * from ").append(entityName()); + sql.append(" where ").append(CoENavSliderModel.FIELD_CHANNEL_UUID).append(" = ").append("'").append(channelUUID).append("' "); + try { + return DBSql.query(sql.toString(), new CoENavSliderModelMapper()); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return new ArrayList(); + } + + public CoENavSliderModel findSlider(String SlidelUUID) { + StringBuffer sql = new StringBuffer(); + sql.append("select * from ").append(entityName()); + sql.append(" where ").append(CoENavSliderModel.FIELD_UUID).append(" = ").append("'").append(SlidelUUID).append("'"); + try { + return DBSql.getObject(sql.toString(), new CoENavSliderModelMapper()); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 获得最大排序索引 + * + * @return + */ + public int getMaxOrderIndex() { + String sliasName = " orderIndex "; + StringBuffer sql = new StringBuffer(); + sql.append("select max(").append(CoENavSliderModel.FIELD_ORDER_INDEX).append(")").append(sliasName); + sql.append(" from ").append(entityName()); + return DBSql.getInt(sql.toString(), sliasName.trim()); + } + + public String updateOrderIndex(String channelUUID, String orderIndex) { + StringBuffer sql = new StringBuffer(); + sql.append("UPDATE ").append(entityName()); + sql.append(" set ").append(CoENavSliderModel.FIELD_ORDER_INDEX).append("=").append("'").append(orderIndex).append("'"); + sql.append(" where ").append(CoENavSliderModel.FIELD_UUID).append("=").append("'").append(channelUUID).append("'"); + int r = DBSql.update(sql.toString()); + return r + ""; + } + + /** + * 通过UUID删除slider + * + * @param sliderUUID + * @return + */ + public String delSliderByUUID(String sliderUUID) { + StringBuffer sql = new StringBuffer(); + sql.append("delete from ").append(entityName()); + sql.append(" where ").append(CoENavSliderModel.FIELD_UUID).append(" = '").append(sliderUUID).append("'"); + return DBSql.update(sql.toString()) + ""; + } + + private class CoENavSliderModelMapper implements RowMapper { + + public CoENavSliderModel mapRow(ResultSet rs, int arg1) throws SQLException { + CoENavSliderModel model = new CoENavSliderModel(); + try { + model.setId(rs.getInt(CoENavSliderModel.FIELD_ID)); + model.setCreateUser(rs.getString(CoENavSliderModel.FIELD_CREATE_USER)); + model.setCreateDate(rs.getTimestamp(CoENavSliderModel.FIELD_CREATE_DATE)); + model.setSliderTitle(rs.getString(CoENavSliderModel.FIELD_SLIDER_TITLE)); + model.setSliderTip(rs.getString(CoENavSliderModel.FIELD_SLIDER_TIP)); + model.setUrl(rs.getString(CoENavSliderModel.FIELD_URL)); + model.setTarget(rs.getString(CoENavSliderModel.FIELD_TARGET)); + model.setIconUrl(rs.getString(CoENavSliderModel.FIELD_ICON_URL)); + model.setOrderIndex(rs.getInt(CoENavSliderModel.FIELD_ORDER_INDEX)); + model.setIsDisabled(rs.getString(CoENavSliderModel.FIELD_IS_DISABLED)); + model.setUUID(rs.getString(CoENavSliderModel.FIELD_UUID)); + model.setChannelUUID(rs.getString(CoENavSliderModel.FIELD_CHANNEL_UUID)); + model.setiSystem(rs.getString(CoENavSliderModel.FIELD_IS_SYSTEM)); + } catch (SQLException e) { + e.printStackTrace(); + } + return model; + } + + } + + /** + * 通过频道删除sliders + * + * @param channelUUID + * @return + */ + public String delSlidersByChannelUUID(String channelUUID) { + List list = findAllSlider(channelUUID); + for (Iterator it = list.listIterator(); it.hasNext();) { + CoENavSliderModel silder = it.next(); + CoENavDaoFactory.createNavButton().delButtonBySilderUUId(silder.getUUID()); + } + + StringBuffer sql = new StringBuffer(); + sql.append("delete from ").append(entityName()); + sql.append(" where ").append(CoENavSliderModel.FIELD_CHANNEL_UUID).append(" = '").append(channelUUID).append("'"); + return DBSql.update(sql.toString()) + ""; + } + + @Override + public int insert(PlatformMetaModelBean daoObj) { + return 0; + } + + @Override + public String entityName() { + return CoENavSliderModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return null; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/db2/CoENavButtonAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/db2/CoENavButtonAdapter.java new file mode 100644 index 00000000..59e9744b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/db2/CoENavButtonAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.db2; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavButtonDao; + +public class CoENavButtonAdapter extends CoENavButtonDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/db2/CoENavChannelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/db2/CoENavChannelAdapter.java new file mode 100644 index 00000000..fb0314b6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/db2/CoENavChannelAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.db2; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavChannelDao; + +public class CoENavChannelAdapter extends CoENavChannelDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/db2/CoENavSliderAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/db2/CoENavSliderAdapter.java new file mode 100644 index 00000000..8d60620f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/db2/CoENavSliderAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.db2; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavSliderDao; + +public class CoENavSliderAdapter extends CoENavSliderDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/informix/CoENavButtonAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/informix/CoENavButtonAdapter.java new file mode 100644 index 00000000..507a2ec1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/informix/CoENavButtonAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.informix; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavButtonDao; + +public class CoENavButtonAdapter extends CoENavButtonDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/informix/CoENavChannelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/informix/CoENavChannelAdapter.java new file mode 100644 index 00000000..e7527a5f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/informix/CoENavChannelAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.informix; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavChannelDao; + +public class CoENavChannelAdapter extends CoENavChannelDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/informix/CoENavSliderAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/informix/CoENavSliderAdapter.java new file mode 100644 index 00000000..bb3eb942 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/informix/CoENavSliderAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.informix; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavSliderDao; + +public class CoENavSliderAdapter extends CoENavSliderDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/mysql/CoENavButtonAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/mysql/CoENavButtonAdapter.java new file mode 100644 index 00000000..b29ff6b0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/mysql/CoENavButtonAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.mysql; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavButtonDao; + +public class CoENavButtonAdapter extends CoENavButtonDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/mysql/CoENavChannelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/mysql/CoENavChannelAdapter.java new file mode 100644 index 00000000..ae36e505 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/mysql/CoENavChannelAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.mysql; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavChannelDao; + +public class CoENavChannelAdapter extends CoENavChannelDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/mysql/CoENavSliderAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/mysql/CoENavSliderAdapter.java new file mode 100644 index 00000000..ef97e08a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/mysql/CoENavSliderAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.mysql; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavSliderDao; + +public class CoENavSliderAdapter extends CoENavSliderDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oracle/CoENavButtonAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oracle/CoENavButtonAdapter.java new file mode 100644 index 00000000..6e87260d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oracle/CoENavButtonAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.oracle; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavButtonDao; + +public class CoENavButtonAdapter extends CoENavButtonDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oracle/CoENavChannelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oracle/CoENavChannelAdapter.java new file mode 100644 index 00000000..8bd30687 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oracle/CoENavChannelAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.oracle; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavChannelDao; + +public class CoENavChannelAdapter extends CoENavChannelDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oracle/CoENavSliderAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oracle/CoENavSliderAdapter.java new file mode 100644 index 00000000..7c73c41b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oracle/CoENavSliderAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.oracle; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavSliderDao; + +public class CoENavSliderAdapter extends CoENavSliderDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oscar/CoENavButtonAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oscar/CoENavButtonAdapter.java new file mode 100644 index 00000000..b727f112 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oscar/CoENavButtonAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.oscar; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavButtonDao; + +public class CoENavButtonAdapter extends CoENavButtonDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oscar/CoENavChannelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oscar/CoENavChannelAdapter.java new file mode 100644 index 00000000..518827f7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oscar/CoENavChannelAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.oscar; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavChannelDao; + +public class CoENavChannelAdapter extends CoENavChannelDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oscar/CoENavSliderAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oscar/CoENavSliderAdapter.java new file mode 100644 index 00000000..ea35e5c0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/oscar/CoENavSliderAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.oscar; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavSliderDao; + +public class CoENavSliderAdapter extends CoENavSliderDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/postgresql/CoENavButtonAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/postgresql/CoENavButtonAdapter.java new file mode 100644 index 00000000..e64c9d8a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/postgresql/CoENavButtonAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.postgresql; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavButtonDao; + +public class CoENavButtonAdapter extends CoENavButtonDao{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/postgresql/CoENavChannelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/postgresql/CoENavChannelAdapter.java new file mode 100644 index 00000000..ffcabcdb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/postgresql/CoENavChannelAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.postgresql; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavChannelDao; + +public class CoENavChannelAdapter extends CoENavChannelDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/postgresql/CoENavSliderAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/postgresql/CoENavSliderAdapter.java new file mode 100644 index 00000000..7192b692 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/postgresql/CoENavSliderAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.postgresql; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavSliderDao; + +public class CoENavSliderAdapter extends CoENavSliderDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sqlserver/CoENavButtonAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sqlserver/CoENavButtonAdapter.java new file mode 100644 index 00000000..090bbc07 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sqlserver/CoENavButtonAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.sqlserver; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavButtonDao; + +public class CoENavButtonAdapter extends CoENavButtonDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sqlserver/CoENavChannelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sqlserver/CoENavChannelAdapter.java new file mode 100644 index 00000000..9ec5754a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sqlserver/CoENavChannelAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.sqlserver; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavChannelDao; + +public class CoENavChannelAdapter extends CoENavChannelDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sqlserver/CoENavSliderAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sqlserver/CoENavSliderAdapter.java new file mode 100644 index 00000000..ce0e9ac4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sqlserver/CoENavSliderAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.sqlserver; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavSliderDao; + +public class CoENavSliderAdapter extends CoENavSliderDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sybase/CoENavButtonAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sybase/CoENavButtonAdapter.java new file mode 100644 index 00000000..4e8e37f4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sybase/CoENavButtonAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.sybase; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavButtonDao; + +public class CoENavButtonAdapter extends CoENavButtonDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sybase/CoENavChannelAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sybase/CoENavChannelAdapter.java new file mode 100644 index 00000000..cca2538f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sybase/CoENavChannelAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.sybase; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavChannelDao; + +public class CoENavChannelAdapter extends CoENavChannelDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sybase/CoENavSliderAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sybase/CoENavSliderAdapter.java new file mode 100644 index 00000000..7ba08733 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/dao/sybase/CoENavSliderAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.dao.sybase; + +import com.actionsoft.apps.coe.pal.portal.dao.CoENavSliderDao; + +public class CoENavSliderAdapter extends CoENavSliderDao { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/model/CoENavButtonModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/model/CoENavButtonModel.java new file mode 100644 index 00000000..46f4cf6c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/model/CoENavButtonModel.java @@ -0,0 +1,159 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.model; + +import java.sql.Timestamp; + +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; + +/** + * 操作菜单 + * @author liangt + * @date 2012-3-20 + */ +public class CoENavButtonModel extends PlatformMetaModelBean { + + private static final long serialVersionUID = 5983779749348510543L; + /** + * create table SYS_COE_NAV_BUTTON( + ID NUMERIC not null, + CREATE_DATE DATE, + CREATE_USER NVARCHAR2(32), + MENU_TITLE NVARCHAR2(200), + MENU_TIP NVARCHAR2(200), + TARGET NVARCHAR2(12), + ORDER_INDEX NUMERIC, + ACTION_TYPE NVARCHAR2(2), + ACTION_VALUE NVARCHAR2(200), + MENU_ICON NVARCHAR2(200), + UUID NVARCHAR2(32), + NAV_SLIDER_UUID NVARCHAR2(128), + primary key(ID) +) +) + */ + public static final String DATABASE_ENTITY = "SYS_COE_NAV_BUTTON"; + + public static final String FIELD_ID = "ID"; + public static final String FIELD_CREATE_USER = "CREATE_USER"; + public static final String FIELD_CREATE_DATE = "CREATE_DATE"; + public static final String FIELD_MENU_TITLE = "MENU_TITLE"; + public static final String FIELD_MENU_TIP = "MENU_TIP"; + public static final String FIELD_TARGET = "TARGET"; + public static final String FIELD_MENU_ICON = "MENU_ICON"; + public static final String FIELD_ORDER_INDEX = "ORDER_INDEX"; + public static final String FIELD_ACTION_TYPE = "ACTION_TYPE"; + public static final String FIELD_ACTION_VALUE = "ACTION_VALUE"; + public static final String FIELD_UUID = "UUID"; + public static final String FIELD_NAV_SLIDER_UUID = "NAV_SLIDER_UUID"; + + private int id; + private String createUser; + private Timestamp createDate; + //标题 + private String menuTitle; + //提示 + private String menuTip; + + private String target; + //菜单图标 + private String menuIcon; + //排序索引 + private int orderIndex; + //请求类型 + private String actionType; + //请求值 + private String actionValue; + + private String UUID; + // + private String navSliderUUID; + + public int getId() { + return id; + } + public void setId(int id) { + this.id = id; + } + public String getCreateUser() { + return createUser; + } + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + public Timestamp getCreateDate() { + return createDate; + } + public void setCreateDate(Timestamp createDate) { + this.createDate = createDate; + } + public String getMenuTitle() { + return menuTitle == null ? "" :menuTitle; + } + public void setMenuTitle(String menuTitle) { + this.menuTitle = menuTitle; + } + public String getMenuTip() { + return menuTip == null ? "" : menuTip; + } + public void setMenuTip(String menuTip) { + this.menuTip = menuTip; + } + public String getTarget() { + return target; + } + public void setTarget(String target) { + this.target = target; + } + public String getMenuIcon() { + return menuIcon == null ? "" : menuIcon; + } + public void setMenuIcon(String menuIcon) { + this.menuIcon = menuIcon; + } + public int getOrderIndex() { + return orderIndex; + } + public void setOrderIndex(int orderIndex) { + this.orderIndex = orderIndex; + } + public String getActionType() { + return actionType; + } + public void setActionType(String actionType) { + this.actionType = actionType; + } + public String getActionValue() { + return actionValue == null ? "" : actionValue; + } + public void setActionValue(String actionValue) { + this.actionValue = actionValue; + } + public String getUUID() { + return UUID == null ? "" : UUID; + } + public void setUUID(String uUID) { + UUID = uUID; + } + public String getNavSliderUUID() { + return navSliderUUID; + } + public void setNavSliderUUID(String navSliderUUID) { + this.navSliderUUID = navSliderUUID; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/model/CoENavChannelModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/model/CoENavChannelModel.java new file mode 100644 index 00000000..a597dc4a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/model/CoENavChannelModel.java @@ -0,0 +1,152 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.model; + +import java.sql.Timestamp; + +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; + +/** + * 导航 + * @author liangt + * @date 2012-3-20 + */ +public class CoENavChannelModel extends PlatformMetaModelBean { + private static final long serialVersionUID = -4326297261559547867L; + + /** + * + create table SYS_COE_NAV_CHANNEL( + ID NUMERIC not null, + CREATE_DATE DATE, + CREATE_USER NVARCHAR2(32), + CHANNEL_TITLE NVARCHAR2(100), + CLASS_IMPL NVARCHAR2(200), + DEFAULT_VIEW NVARCHAR2(1), + ORDER_INDEX NUMERIC, + IS_SYSTEM NVARCHAR2(1), + UUID NVARCHAR2(128), + primary key(ID) + ) + + */ + public static final String DATABASE_ENTITY = "SYS_COE_NAV_CHANNEL"; + + public static final String FIELD_ID = "ID"; + public static final String FIELD_CREATE_USER = "CREATE_USER"; + public static final String FIELD_CREATE_DATE = "CREATE_DATE"; + public static final String FIELD_CHANNEL_TITLE = "CHANNEL_TITLE"; + + public static final String FIELD_CLASS_IMPL = "CLASS_IMPL"; + public static final String FIELD_DEFAULT_VIEW = "DEFAULT_VIEW"; + public static final String FIELD_ORDER_INDEX = "ORDER_INDEX"; + public static final String FIELD_IS_SYSTEM = "IS_SYSTEM"; + public static final String FIELD_UUID = "UUID"; + + + private int id; + private String createUser; + private Timestamp createDate; + //导航标题 + private String channelTitle; + //实现类 + private String classImpl = ""; + //是否使用默认 + private String defaultView = ""; + //排序索引 + private int orderIndex; + //是否为系统(系统内使用) + private String isSystem; + + private String UUID = ""; + + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public Timestamp getCreateDate() { + return createDate; + } + + public void setCreateDate(Timestamp createDate) { + this.createDate = createDate; + } + + public String getChannelTitle() { + return channelTitle; + } + + public void setChannelTitle(String channelTitle) { + this.channelTitle = channelTitle; + } + + public String getClassImpl() { + return classImpl == null ? "" : classImpl; + } + + public void setClassImpl(String classImpl) { + this.classImpl = classImpl; + } + + public int getOrderIndex() { + return orderIndex; + } + + public void setOrderIndex(int orderIndex) { + this.orderIndex = orderIndex; + } + + public String getUUID() { + return UUID; + } + + public void setUUID(String uUID) { + UUID = uUID; + } + + public String getDefaultView() { + return defaultView; + } + + public void setDefaultView(String defaultView) { + this.defaultView = defaultView; + } + + public String getIsSystem() { + return isSystem==null?"":isSystem; + } + + public void setIsSystem(String isSystem) { + this.isSystem = isSystem; + } + + + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/model/CoENavSliderModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/model/CoENavSliderModel.java new file mode 100644 index 00000000..0b54ff6e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/model/CoENavSliderModel.java @@ -0,0 +1,174 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.model; + +import java.sql.Timestamp; + +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; + +/** + * slider + * @author liangt + * @date 2012-3-20 + */ +public class CoENavSliderModel extends PlatformMetaModelBean { + + private static final long serialVersionUID = -38864607019412787L; + + /** + create table SYS_COE_NAV_SLIDER( + ID NUMERIC not null, + CREATE_DATE DATE, + CREATE_USER NVARCHAR2(32), + SLIDER_TITLE NVARCHAR2(100), + SLIDER_TIP NVARCHAR2(100), + URL NVARCHAR2(200), + TARGET NVARCHAR2(100), + ICON_URL NVARCHAR2(100), + ORDER_INDEX NUMERIC, + IS_DISABLED NVARCHAR2(1), + UUID NVARCHAR2(32), + CHANNEL_UUID NVARCHAR2(32), + primary key(ID) + ) + */ + public static final String DATABASE_ENTITY = "SYS_COE_NAV_SLIDER"; + + public static final String FIELD_ID = "ID"; + public static final String FIELD_CREATE_USER = "CREATE_USER"; + public static final String FIELD_CREATE_DATE = "CREATE_DATE"; + public static final String FIELD_SLIDER_TITLE = "SLIDER_TITLE"; + public static final String FIELD_SLIDER_TIP = "SLIDER_TIP"; + + public static final String FIELD_URL = "URL"; + public static final String FIELD_TARGET = "TARGET"; + public static final String FIELD_ICON_URL = "ICON_URL"; + public static final String FIELD_ORDER_INDEX = "ORDER_INDEX"; + public static final String FIELD_IS_DISABLED = "IS_DISABLED"; + public static final String FIELD_IS_SYSTEM = "IS_SYSTEM"; + + public static final String FIELD_UUID = "UUID"; + public static final String FIELD_CHANNEL_UUID = "CHANNEL_UUID"; + + private int id; + private String createUser; + private Timestamp createDate; + //标题 + private String sliderTitle = ""; + //提示 + private String sliderTip = ""; + //URL地址 + private String url = ""; + //显示位置 + private String target; + //功能图标 + private String iconUrl = ""; + //排序索引 + private int orderIndex; + //是否显示 + private String isDisabled; + //是否系统 + private String iSystem; + + public String getiSystem() { + return iSystem==null||iSystem.trim().length()==0?"0":iSystem; + } + public void setiSystem(String iSystem) { + this.iSystem = iSystem; + } + // + private String UUID = ""; + //导航UUID + private String channelUUID; + + public int getId() { + return id; + } + public void setId(int id) { + this.id = id; + } + public String getCreateUser() { + return createUser; + } + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + public Timestamp getCreateDate() { + return createDate; + } + public void setCreateDate(Timestamp createDate) { + this.createDate = createDate; + } + public String getSliderTitle() { + return sliderTitle == null ? "" :sliderTitle; + } + public void setSliderTitle(String sliderTitle) { + this.sliderTitle = sliderTitle; + } + public String getSliderTip() { + return sliderTip == null ? "" :sliderTip; + } + public void setSliderTip(String sliderTip) { + this.sliderTip = sliderTip; + } + public String getUrl() { + return url == null ? "" :url; + } + public void setUrl(String url) { + this.url = url; + } + public String getTarget() { + return target==null?"":target; + } + public void setTarget(String target) { + this.target = target; + } + public String getIconUrl() { + return iconUrl == null ? "" :iconUrl; + } + public void setIconUrl(String iconUrl) { + this.iconUrl = iconUrl; + } + public int getOrderIndex() { + return orderIndex; + } + public void setOrderIndex(int orderIndex) { + this.orderIndex = orderIndex; + } + public String getIsDisabled() { + return isDisabled; + } + public void setIsDisabled(String isDisabled) { + this.isDisabled = isDisabled; + } + + public String getUUID() { + return UUID; + } + public void setUUID(String uUID) { + UUID = uUID; + } + public String getChannelUUID() { + return channelUUID; + } + public void setChannelUUID(String channelUUID) { + this.channelUUID = channelUUID; + } + + + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/util/NavigationUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/util/NavigationUtil.java new file mode 100644 index 00000000..3c26ac0a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/util/NavigationUtil.java @@ -0,0 +1,108 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.util; + +import java.security.SecureRandom; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.apache.commons.codec.binary.Hex; + +import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; +import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition; +import com.actionsoft.bpms.bpmn.engine.model.def.WorkFlowCOEUserModel; +import com.actionsoft.bpms.org.cache.UserCache; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.apps.coe.pal.team.user.util.CoEUtil; +import com.actionsoft.sdk.local.SDK; + +public class NavigationUtil { + public static String getProcessImg(String processUUID, UserContext me) { + StringBuffer response = new StringBuffer(); + response.append(""); + return response.toString(); + } + + public static String getProcessImgSrc(String processUUID, UserContext me) { + StringBuffer response = new StringBuffer(); + response.append("./downfile.wf?flag1=Model&flag2=fpd"); + response.append("&sid=" + me.getSessionId()); + response.append("&filename=" + processUUID + ".png&rootDir=FPD&temp=" + generateSecretRandom()); + return response.toString(); + } + + public static String getProcessImg2(String processUUID, UserContext me) { + StringBuffer response = new StringBuffer(); + response.append(""); + return response.toString(); + } + + public static String getOtherFlowDesigner(String user, UserContext me) { + StringBuffer html = new StringBuffer(); + Map processList = null;// ProcessDesignDaoFactory.createWorkFlowCOEUser().findUserProcess(user); + HashMap tmpMap = new HashMap(); + tmpMap.put(user, user); + if (processList != null) { + Iterator processListiterator = processList.keySet().iterator(); + while (processListiterator.hasNext()) { + WorkFlowCOEUserModel model = (WorkFlowCOEUserModel) processList.get(processListiterator.next()); + String processVersionUUID = model._flowUUID; + ProcessDefinition wfModel = ProcessDefCache.getInstance().getModel(processVersionUUID); + if (wfModel == null) { + continue; + } + String adminStr = wfModel.getCreateUser(); + adminStr = SDK.getORGAPI().getUserIds(adminStr); + String[] array = adminStr.trim().split(" "); + for (int g = 0; g < array.length; g++) { + String adminName = array[g].trim(); + if (tmpMap.get(adminName) == null && !adminName.equals("")) { + tmpMap.put(adminName, adminName); + html.append(""); + } + } + } + } + return html.toString(); + } + + public static String generateSecretRandom() { + SecureRandom random = new SecureRandom(); + byte [] result = new byte[32]; + random.nextBytes(result); + return Hex.encodeHexString(result); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/web/CoEPortalSkins.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/web/CoEPortalSkins.java new file mode 100644 index 00000000..54839839 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/web/CoEPortalSkins.java @@ -0,0 +1,111 @@ +package com.actionsoft.apps.coe.pal.portal.web; + +import java.util.Map; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.bpms.client.UserInfoController; +import com.actionsoft.bpms.commons.login.LoginAbst; +import com.actionsoft.bpms.commons.login.LoginInterface; +import com.actionsoft.bpms.commons.login.constant.LoginConst; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.commons.userprofile.UserProfileAPIManager; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.UtilString; + +/** + * CoE首页 + * + * @author jackliu + * + */ +public class CoEPortalSkins extends LoginAbst implements LoginInterface { + + /** + * 验证身份总入口,创建session。如果有用户自定义的LoginAdapter,该类被调用 + * + * @param uid 账户名 + * @param pwd 口令 + * @param lang 界面语言,见LoginConst常量定义 + * @param userIp 客户端IP + * @return 一个JSON串,result=ok身份验证通过,含有session的数据被返回,否则检查msg + * @author mengq + */ + public ResponseObject validateIdentity(String uid, String pwd, String lang, String userIp, Map params) { + return validateIdentity(LoginConst.SYSTEM_COE, uid, pwd, lang, userIp, LoginConst.DEVICE_PC, false, params); + } + + /** + * 进入首页 + * + * @param me 用户上下文对象 + * @return + * @author mengq + */ + public String getHomePage(UserContext me) { +// StringBuilder _system = new StringBuilder(); +// _system.append("
    • 我的项目
    • \n"); +// boolean isCreateProject = CoeUserDaoFactory.createUser().isAc(me, LanguageUserAcConf.LANGUAGE_USER_AC_TYPE_2); +// if (isCreateProject) { +// _system.append("
    • 新建项目
    • \n"); +// } +// boolean isManager = CoeUserDaoFactory.createUser().isAc(me, LanguageUserAcConf.LANGUAGE_USER_AC_TYPE_1); +// if (isManager) { +// _system.append("
    • 高级管理\n"); +// // _nav +// _system.append(""); +// _system.append("
    • "); +// +// } +// Map macroLibraries = new HashMap(); +// macroLibraries.put("userName", me.getUserModel().getUserName()); +// macroLibraries.put("system", _system.toString()); +// macroLibraries.put("sid", ""); +// return HtmlPageTemplate.merge(CoEConstant.APP_ID, "main.frame.top.coe.htm", macroLibraries); + NavigationWeb web = new NavigationWeb(me); + return web.getNavHeader(); + } + + /** + * vue主页 + * @param me + * @return + */ + public String getVueHomePage(UserContext me, String mainType) { + NavigationWeb web = new NavigationWeb(me); + return web.getVueNavHeader(mainType); + } + + /** + * 获得CONSOLE皮肤key + * + * @param me + * @return + * @author jack + */ + public static String getCoESkinsName(UserContext me) { + String skins = UserProfileAPIManager.getInstance().getProfileItem(CoEConstant.APP_ID, me.getUID(), UserProfileAPIManager.PROFILE_KEY_COMMONS, "portal.skins"); + if (UtilString.isEmpty(skins)) { + skins = "default";// def + } + return skins; + } + + /** + * 注销提示页面 + * + * @param me 用户上下文对象 + * @return + * @author mengq + */ + public String getLogoutPage(UserContext me) { + UserInfoController controller = new UserInfoController(); + return controller.logout(me, me.getSessionId()); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/web/NavigationWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/web/NavigationWeb.java new file mode 100644 index 00000000..5bfd2046 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/portal/web/NavigationWeb.java @@ -0,0 +1,1282 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.portal.web; + +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.sql.SQLException; +import java.util.*; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.cooperation.model.CoeCooperationTeamModel; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.coe.pal.pal.home.extend.ExtendsAppManager; +import com.actionsoft.apps.coe.pal.pal.home.extend.ExtendsAppProfile; +import com.actionsoft.apps.coe.pal.pal.ws.web.CoeWorkSpaceWeb; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.bpms.util.*; +import com.actionsoft.bpms.util.Base64; +import com.actionsoft.sdk.service.AppApi; +import com.alibaba.fastjson.JSON; +import org.apache.commons.lang.StringUtils; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.commons.security.mgtgrade.util.GradeSecurityUtil; +import com.actionsoft.bpms.org.dao.User; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.server.AWSServer; +import com.actionsoft.bpms.server.Passwd; +import com.actionsoft.bpms.server.Quota; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.conf.portal.AWSPortalConf; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.dc.DCProfileManager; +import com.actionsoft.bpms.server.fs.file.ReadDCFile; +import com.actionsoft.apps.coe.pal.install.dao.CoeIniDaoFactory; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.dao.CoeProcessLevelSystemNameDaoFactory; +import com.actionsoft.apps.coe.pal.pal.repository.model.CoeProcessLevelSystemNameModel; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.portal.constant.CoENavConstant; +import com.actionsoft.apps.coe.pal.portal.dao.CoENavDaoFactory; +import com.actionsoft.apps.coe.pal.portal.model.CoENavButtonModel; +import com.actionsoft.apps.coe.pal.portal.model.CoENavChannelModel; +import com.actionsoft.apps.coe.pal.portal.model.CoENavSliderModel; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; +import com.actionsoft.apps.coe.pal.team.user.conf.LanguageUserAcConf; +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUser; +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUserDaoFactory; +import com.actionsoft.apps.coe.pal.team.user.web.UserWeb; +import com.actionsoft.apps.coe.pal.teamwork.web.TeamWorkManagerWeb; +import com.actionsoft.i18n.I18nRes; +import com.actionsoft.sdk.local.SDK; +import com.actionsoft.sdk.local.api.AppAPI; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +/** + * 导航 + * + * @author liangt + * @date 2012-3-14 + */ +public class NavigationWeb extends ActionWeb { + + private static final long serialVersionUID = 7395478327656203607L; + + private UserContext _uc; + + public NavigationWeb(UserContext uc) { + super(uc); + this._uc = uc; + + } + + /** + * 获得导航头部 + * + * @return + */ + public String getNavHeader() { + // UpdateCoE.update(); + // 判断是COE是否初始化第一步 + String initStep = null; + UserWeb userWeb = new UserWeb(); + boolean bb = userWeb.isExistTable(); + if (bb) { + initStep = CoePropertyUtil.getPropertyValue("InitStep"); + } + // ||initStep==null||Integer.parseInt(initStep)<6 + if (CoeIniDaoFactory.createCoeIni().isInit() <= 0) { + if (super.getContext().getUID().equals("admin")) // 是管理员用户 + { + return getInitHtml(initStep);// 去初始化界面 + } else { + return getInitAlertHtml(I18nRes.findValue(CoEConstant.APP_ID, super.getContext().getLanguage(), "CoE系统未初始化,请联系admin用户或者管理员。"));// 去提醒初始化界面 + } + } + if (CoeIniDaoFactory.createCoeIni().isInit() > 0 && initStep != null) { + if (Integer.parseInt(initStep) < 6) { + if (super.getContext().getUID().equals("admin")) // 是管理员用户 + { + return getInitHtml(initStep);// 去初始化界面 + } else { + return getInitAlertHtml(I18nRes.findValue(CoEConstant.APP_ID, super.getContext().getLanguage(), "CoE系统正在初始化,敬请期待..."));// 去提醒初始化界面 + } + } + } + // =============================================== + Map macroLibraries = new HashMap(); + macroLibraries.put("sid", getContext().getSessionId()); + macroLibraries.put("consoleButton", getConsoleButton()); + macroLibraries.put("coePortal", CoEPortalSkins.getCoESkinsName(getContext())); + macroLibraries.put("sliderButton", ""); + macroLibraries.put("sliderMain", ""); + macroLibraries.put("sliderTitle", ""); + + macroLibraries.put("bodytag", ""); + String console = ""; + if (GradeSecurityUtil.isSuperMaster(super.getContext().getUID()) || CoeUserDaoFactory.createUser().isAc(super.getContext(), LanguageUserAcConf.LANGUAGE_USER_AC_TYPE_1)) { + console = "
    • " + I18nRes.findValue(CoEConstant.APP_ID, super.getContext().getLanguage(), "控制台") + "
    • "; + } + macroLibraries.put("console", console); + StringBuffer myProfile = new StringBuffer(); + + if (super.getContext().getUID().equals("admin") && !bb) { + myProfile.append(" " + I18nRes.findValue(CoEConstant.APP_ID, super.getContext().getLanguage(), "初始化系统") + ""); + + } + + // console的跳转判断 + String defaultSystemKey = "19";// 放置可能来自LDAP的非帐户对应 + if (!(Integer.parseInt(defaultSystemKey) > 20)) {// 没有访问控制台的权限 + + } + macroLibraries.put("myProfile", myProfile); + macroLibraries.put("contentMain", "
      " + I18nRes.findValue(CoEConstant.APP_ID, super.getContext().getLanguage(), "空白页面") + "
      "); + macroLibraries.put("userPhoto", " " + "" + super.getContext().getUserModel().getUserName() + ""); + // macroLibraries.put("projectUUID", ""); + macroLibraries.put("lang", getContext().getLanguage()); + + AppAPI appApi = SDK.getAppAPI(); + boolean isNetworkActive = appApi.isActive("com.actionsoft.apps.network"); + if (isNetworkActive) { + macroLibraries.put("teamShow", ""); + } else { + macroLibraries.put("teamShow", "display: none;"); + } + boolean isNoticeActive = appApi.isActive("com.actionsoft.apps.notification"); + if (isNoticeActive) { + macroLibraries.put("isNoticeActive", true); + } else { + macroLibraries.put("isNoticeActive", false); + } + + CoeUser dao = new CoeUser(); + boolean isAdmin = dao.isCoEManager(super.getContext().getUID()); + if (isAdmin) { + macroLibraries.put("managerUserShow", ""); + } else { + macroLibraries.put("managerUserShow", "display: none;"); + } + + if (isAdmin && isNetworkActive) { + macroLibraries.put("createShow", ""); + } else { + macroLibraries.put("createShow", "display: none;"); + } + + // 升级的功能 + StringBuilder versionImg = new StringBuilder(); + if ((GradeSecurityUtil.isSuperMaster(getContext().getUID()) || GradeSecurityUtil.isSystemMaster(getContext().getUID())) && AWSServerConf.isPaaSCloud()) { + versionImg.append(""); + } + macroLibraries.put("version", AWSServer.getInstance().getAWSVersion()); + macroLibraries.put("version-img", versionImg.toString()); + macroLibraries.put("isPaaSCloud", AWSServerConf.isPaaSCloud()); + macroLibraries.put("upgradeHtml", HtmlPageTemplate.merge(AppsConst.SYS_APP_PLATFORM, "console.user.upgrade.htm", macroLibraries)); + // 升级的功能结束 + + // 如果没有BPA和BAM用户,首页title显示“pal” + if (Quota.getMaxCoEBPAUser() <= 0) { + macroLibraries.put("title", "流程资产库"); + macroLibraries.put("logo", "../apps/" + CoEConstant.APP_ID + "/img/logo/pal_logo.png"); + } else { + macroLibraries.put("title", "流程卓越中心"); + macroLibraries.put("logo", "../apps/" + CoEConstant.APP_ID + "/img/logo/pal_logo.png"); + } + + // 是否允许用户修改口令,修改口令页面链接被隐藏。适用于身份来自LDAP或外部 + boolean isSecurityPwdChange = AWSPortalConf.isSecurityPwdChange(); + macroLibraries.put("isSecurityPwdChange", isSecurityPwdChange); + // 默认口令验证,是否强制修改默认密码 + Passwd passwd = new Passwd(); + UserModel userModel = super.getContext().getUserModel(); + boolean forceChangePwd = false; + try { + Constructor _cons = null; + Class[] parameterTypes = {}; + _cons = ClassReflect.getConstructor("com.actionsoft.bpms.org.dao.User", parameterTypes); + if (_cons != null) { + Object[] paras = {}; + Object o = _cons.newInstance(paras); + Method loginCheckSecurityMethod = User.class.getMethod("getPassword", new Class[] { String.class, String.class }); + Object dparams = loginCheckSecurityMethod.invoke(o, new Object[] { userModel.getUID(), AWSPortalConf.getSecurityPwdDefault() }); + String newPwd = (String) dparams; + if (isSecurityPwdChange && userModel.getPassword().equals(newPwd)) { + forceChangePwd = true; + } + } + } catch (Exception e) { + if (isSecurityPwdChange && userModel.getPassword().equals(passwd.deepMD5(AWSPortalConf.getSecurityPwdDefault()))) { + forceChangePwd = true; + } + } + // 验证口令修改周期 + // int securityPwdCycle = AWSPortalConf.getSecurityPwdCycle(); // 口令修改周期,单位(天) + macroLibraries.put("forceChangePwd", forceChangePwd); + // 密码强度 + boolean isSecurityPwdComplexity = AWSPortalConf.isSecurityPwdComplexity(); + int securityMinPwdLength = AWSPortalConf.getSecurityMinPwdLength(); + int securityMaxPwdLength = AWSPortalConf.getSecurityMaxPwdLength(); + macroLibraries.put("isSecurityPwdComplexity", isSecurityPwdComplexity); + macroLibraries.put("securityMinPwdLength", securityMinPwdLength); + macroLibraries.put("securityMaxPwdLength", securityMaxPwdLength); + macroLibraries.put("uid", _uc.getUID()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "portal.header.htm", macroLibraries); + } + + /** + * 去提醒初始化界面 + * + * @return + */ + public String getInitAlertHtml(String value) { + // 去提醒初始化界面 + return ""; + } + + /** + * 去初始化界面 + * + * @return + */ + public String getInitHtml(String initStep) { + if (initStep == null) { + initStep = "0"; + } + Map macroLibraries = new HashMap(); + macroLibraries.put("sid", getContext().getSessionId()); + macroLibraries.put("initStep", initStep); + macroLibraries.put("isCOE", Quota.getMaxCoEBPAUser() > 0 || Quota.getMaxCoEPALUser() > 0); + macroLibraries.put("isBPA", Quota.getMaxCoEBPAUser() > 0); + macroLibraries.put("isCC", Quota.isCCService()); + macroLibraries.put("isCNBR", I18nRes.getUserLanguage().equals("en") ? "" : "
      "); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "install.main.htm", macroLibraries); + } + + /** + * 获得导航菜单 + * + * @return + */ + public String getNavChannel(String condition) { + return ""; + } + + /** + * 获得导航编辑界面 + * + * @return + */ + public String getNavMain(String condition) { + condition = condition == null || condition.trim().length() == 0 ? "{'coePortal':'default'}" : condition; + JSONObject json = JSONObject.parseObject(condition); + Map macroLibraries = new HashMap(); + macroLibraries.put("coePortal", json.getString("coePortal")); + macroLibraries.put("condition", condition); + macroLibraries.put("coeNavMain", getAllChannel(json)); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "console.channel.htm", macroLibraries); + } + + public String editChannel(JSONObject json, String channelUUID) { + CoENavChannelModel sysModel = CoENavDaoFactory.createNavChannel().findChannelByUUID(channelUUID); + String funStr = getAllSlider(json, sysModel.getUUID()); + Map macroLibraries = new HashMap(); + macroLibraries.put("coePortal", json.getString("coePortal")); + macroLibraries.put("coeNavMain", getChannelHtml(json, sysModel, funStr)); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "console.params.htm", macroLibraries); + } + + /** + * 获得所有导航 + * + * @return + */ + + public String getAllChannel(JSONObject json) { + List allSys = CoENavDaoFactory.createNavChannel().findAllChannel(); + StringBuffer html = new StringBuffer(); + for (int i = 0, size = allSys.size(); i < size; i++) { + CoENavChannelModel sysModel = allSys.get(i); + html.append(""); + + html.append(""); + html.append(I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), sysModel.getChannelTitle())); + html.append(""); + + html.append(""); + html.append(sysModel.getClassImpl() == null || sysModel.getClassImpl().trim().length() == 0 ? I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "系统默认") : sysModel.getClassImpl()); + html.append(""); + + html.append(""); + String edit = ""; + String del = sysModel.getIsSystem().equals("1") ? "" : ""; + html.append(edit + " " + del); + html.append(""); + + html.append(""); + } + return html.toString(); + } + + public String getChannelHtml(JSONObject json, CoENavChannelModel sysModel, String funStr) { + String coePortal = json.getString("coePortal"); + if (sysModel == null) { + sysModel = new CoENavChannelModel(); + } + StringBuffer html = new StringBuffer(); + + html.append("
      "); + html.append("
      "); + html.append("
      "); + if (sysModel.getChannelTitle() == null) { + html.append(""); + } else { + html.append(sysModel.getChannelTitle()); + } + html.append("
      "); + if (!sysModel.getIsSystem().equals("1")) { + html.append("
      "); + } + if (sysModel.getClassImpl().equals("")) { + html.append("
      "); + } else { + html.append("
      "); + } + html.append("
      "); + html.append("  
      "); + html.append("
      "); + if (sysModel.getClassImpl().equals("")) { + html.append("
      "); + } else { + html.append("
      "); + } + html.append(" "); + html.append("
      "); + html.append("
      "); + html.append(funStr); + html.append("
      "); + html.append("   "); + html.append("
      "); + return html.toString(); + } + + /* public String getChannelHtml(String sysUUID) { CoENavChannelModel model = new CoENavChannelModel(); String funStr = getAllSlider(model.getUUID()); return getChannelHtml(model,funStr); } */ + + public String getNewChannelHtml(JSONObject json) { + json.put("count", 1); + Map macroLibraries = new HashMap(); + macroLibraries.put("coePortal", json.getString("coePortal")); + macroLibraries.put("coeNavMain", getChannelHtml(json, null, getSliderHtml(json, null, getAllButtonHtml(null, null)))); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "console.params.htm", macroLibraries); + } + + /** + * 获得指定导航的所有slider + * @param channelUUID + * @param json + * @return + */ + public String getAllSlider(JSONObject json, String channelUUID) { + // 所有slider + List allFun = CoENavDaoFactory.createNavSlider().findAllSlider(channelUUID); + StringBuffer html = new StringBuffer(); + // html.append("
      "); + for (int i = 0, size = allFun.size(); i < size; i++) { + CoENavSliderModel funModel = allFun.get(i); + String butStr = getAllButtonHtml(json, funModel.getUUID()); + json.put("count", i + 1); + html.append(getSliderHtml(json, funModel, butStr)); + } + // 当频道下面没有slider的时候,默认出现一个新的 + if (StringUtils.isNotEmpty(channelUUID) && allFun.size() == 0) { + // CoENavSliderModel sliderModel = new CoENavSliderModel(); + // sliderModel.setChannelUUID(channelUUID); + json.put("channelUUID", channelUUID); + html.append(getNewSliderHtml(json)); + } + // html.append("
      "); + return html.toString(); + } + + public String getNewSliderHtml(JSONObject json) { + CoENavSliderModel sliderModel = new CoENavSliderModel(); + sliderModel.setChannelUUID(json.getString("channelUUID")); + // json.put("count", 1); + return getSliderHtml(json, sliderModel, getAllButtonHtml(json, null)); + } + + /* public String getSliderHtml(JSONObject json,CoENavSliderModel funModel,String butStr) { return getSliderHtml(json,funModel, butStr); } */ + + private int validateJson(Integer index) { + return index == null ? 0 : index; + } + + public String getSliderHtml(JSONObject json, CoENavSliderModel funModel, String butStr) { + String coePortal = json.getString("coePortal"); + if (funModel == null) { + // 如果为空这是新建 + funModel = new CoENavSliderModel(); + } + int count = 1; + try { + count = validateJson(json.getInteger("count")); + } catch (Exception e) { + } + StringBuffer html = new StringBuffer(); + html.append("
      "); + if (!funModel.getiSystem().equals("1")) { + html.append("
      "); + } + html.append("
      ").append(I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "频道") + count).append("
      "); + html.append("
      "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + String nameUUID = StringUtils.isEmpty(funModel.getUUID()) ? StringUtils.isEmpty(funModel.getChannelUUID()) ? "" : funModel.getChannelUUID() : funModel.getUUID(); + html.append(" "); + html.append(" "); + // html.append(" "); + // html.append(" "); + // html.append(" "); + // html.append(" "); + html.append("
      " + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "频道标题") + ": *" + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "提示") + ":
      URL" + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "地址") + ": *
      " + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "显示位置") + ":" + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "是否显示") + ":" + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "显示")); + html.append(" " + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "隐藏") + "
      背景图标
      "); + html.append("
      "); + html.append(butStr); + html.append("
      "); + + return html.toString(); + } + + public String getAllButtonHtml(JSONObject json, String funUUID) { + StringBuffer html = new StringBuffer(); + html.append("
      "); + html.append("
      "); + html.append(" " + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "操作菜单") + ": " + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "添加菜单") + " " + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "编辑菜单") + "   " + + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "删除菜单") + ""); + html.append("
      "); + html.append("
      "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(""); + // 查询funUUID,否则new + List allBut = CoENavDaoFactory.createNavButton().findButtonsBySliderUUID(funUUID); + for (int i = 0, size = allBut.size(); i < size; i++) { + CoENavButtonModel butModel = allBut.get(i); + html.append(getButtonTrHtml(butModel)); + } + html.append(""); + html.append("
       " + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "标题") + "" + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "提示") + "" + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "请求类型") + "" + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "请求值") + "" + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "背景图标") + "" + I18nRes.findValue(CoEConstant.APP_ID, getContext().getLanguage(), "权限") + "
      "); + html.append("
      "); + html.append("
      "); + return html.toString(); + } + + private String getButtonTrHtml(CoENavButtonModel model) { + StringBuffer html = new StringBuffer(); + html.append(" "); + html.append(" ").append("").append(""); + html.append(" ").append(model.getMenuTitle()).append(""); + html.append(" ").append(model.getMenuTip()).append(""); + html.append(" "); + if (CoENavConstant.NAV_BUTTON_ACTION_TYPE_URL.equals(model.getActionType())) { + html.append(CoENavConstant.NAV_BUTTON_ACTION_TYPE_URL_VAL); + } else if (CoENavConstant.NAV_BUTTON_ACTION_TYPE_JAVASCRIPT.equals(model.getActionType())) { + html.append(CoENavConstant.NAV_BUTTON_ACTION_TYPE_JAVASCRIPT_VAL); + } + html.append(""); + html.append(" ").append(model.getActionValue()).append(""); + html.append(" ").append(model.getMenuIcon()).append(""); + html.append(" "); + html.append(" "); + return html.toString(); + } + + /** + * 获得控制台按钮 + * + * @return + */ + private String getConsoleButton() { + boolean isManager = CoeUserDaoFactory.createUser().isAc(_uc, LanguageUserAcConf.LANGUAGE_USER_AC_TYPE_1); + if (isManager) { + return "|"; + } else { + return ""; + } + } + + public String saveChannel(String condition) { + JSONObject json = JSONObject.parseObject(condition); + CoENavChannelModel cModel = new CoENavChannelModel(); + String channelUUID = json.getString("channelUUID"); + cModel.setChannelTitle(json.getString("title")); + if (cModel.getChannelTitle().equals("")) { + cModel.setChannelTitle(""); + } + cModel.setClassImpl(json.getString("classImpl")); + cModel.setDefaultView(json.getString("defaultView")); + // 默认不是系统内置 + cModel.setIsSystem(CoENavConstant.NAV_CHANNEL_IS_NOT_SYSTEM); + if (StringUtils.isEmpty(channelUUID)) { + try { + cModel.setOrderIndex(CoENavDaoFactory.createNavChannel().getMaxOrderIndex() + 1); + cModel.setCreateUser(_uc.getUID()); + cModel.setUUID(UUIDGener.getUUID()); + return CoENavDaoFactory.createNavChannel().create(cModel) + "|" + cModel.getUUID(); + } catch (SQLException e) { + e.printStackTrace(); + } + } else { + cModel.setUUID(channelUUID); + return CoENavDaoFactory.createNavChannel().update(cModel) + "|" + cModel.getUUID(); + } + return "-1"; + } + + public String editSlider(String condition) { + JSONObject json = JSONObject.parseObject(condition); + CoENavSliderModel model = new CoENavSliderModel(); + String sliderUUID; + try { + sliderUUID = json.getString("sliderUUID"); + } catch (Exception e) { + sliderUUID = null; + } + + model.setSliderTitle(json.getString("sliderTitle")); + if (model.getSliderTitle().equals("")) { + model.setSliderTitle(""); + } + model.setSliderTip(json.getString("sliderTip")); + model.setUrl(json.getString("url")); + if (model.getUrl().equals("")) { + model.setUrl(""); + } + model.setTarget(json.getString("target")); + model.setIsDisabled(json.getString("isDisabled")); + model.setIconUrl(json.getString("iconUrl")); + model.setChannelUUID(json.getString("channelUUID")); + if (StringUtils.isEmpty(sliderUUID)) { + try { + model.setOrderIndex(CoENavDaoFactory.createNavSlider().getMaxOrderIndex() + 1); + // 如果没有channel将新建 + String chStr = ""; + if (StringUtils.isEmpty(model.getChannelUUID())) { + String cr = saveChannel(condition); + String[] channel = cr.split("\\|"); + if (channel.length > 0) { + model.setChannelUUID(channel[1]); + chStr = "|" + model.getChannelUUID(); + } else { + return cr; + } + } + model.setCreateUser(_uc.getUID()); + model.setUUID(UUIDGener.getUUID()); + return CoENavDaoFactory.createNavSlider().create(model) + "|" + model.getUUID() + chStr; + } catch (SQLException e) { + e.printStackTrace(); + } + } else { + model.setUUID(sliderUUID); + return CoENavDaoFactory.createNavSlider().update(model) + "|" + model.getUUID(); + } + return ""; + } + + // 跳转到系统名称首页 + public String getSysNamePortalHtml(String condition) { + condition = condition == null || condition.trim().length() == 0 ? "{'coePortal':'default'}" : condition; + JSONObject json = JSONObject.parseObject(condition); + Map macroLibraries = new HashMap(); + macroLibraries.put("coePortal", json.getString("coePortal")); + macroLibraries.put("coeNavMain", getAllSystemNameListHtml()); + macroLibraries.put("sid", super.getContext().getSessionId()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "console.system.name.htm", macroLibraries); + } + + // 得到list信息 + public String getAllSystemNameListHtml() { + List list = CoeProcessLevelSystemNameDaoFactory.createCoeProcessLevelSystemName().getCoeProcessLevelSystemName(); + StringBuffer html = new StringBuffer(); + int count = list.size(); + for (int i = 0; i < count; i++) { + CoeProcessLevelSystemNameModel coeProcessLevelSystemNameModel = list.get(i); + html.append(""); + html.append(""); + html.append(i + 1); + html.append(""); + html.append(""); + html.append(coeProcessLevelSystemNameModel.getName()); + html.append(""); + html.append(""); + String edit = "  "; + String del = ""; + if (!coeProcessLevelSystemNameModel.isDefault()) { + html.append(edit); + if (!coeProcessLevelSystemNameModel.getUUId().equals("1")) { + html.append(del); + } + } + html.append(""); + html.append(""); + } + return html.toString(); + } + + // 打开系统名称对话框 + public String openCrtaeDialog(String uuid) { + String id = ""; + String name = ""; + boolean isDefault = false; + if (!uuid.equals("")) { + CoeProcessLevelSystemNameModel model = (CoeProcessLevelSystemNameModel) CoeProcessLevelSystemNameDaoFactory.createCoeProcessLevelSystemName().getInstance(uuid); + id = model.getUUId(); + name = model.getName(); + isDefault = model.isDefault(); + } + Map macroLibraries = new HashMap(); + macroLibraries.put("uuid", id); + macroLibraries.put("coePortal", CoEPortalSkins.getCoESkinsName(getContext())); + macroLibraries.put("name", name); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("isDefault", isDefault); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "console.system.name.create.htm", macroLibraries); + } + + // 保存系统名称 + public String saveSystemName(String uuid, String systemName, boolean isDefault) { + StringBuffer result = new StringBuffer(); + CoeProcessLevelSystemNameModel model = new CoeProcessLevelSystemNameModel(); + model.setUUId(uuid); + model.setName(systemName); + model.setDefault(isDefault); + if (uuid.equals("")) { + // 添加操作 + try { + CoeProcessLevelSystemNameDaoFactory.createCoeProcessLevelSystemName().create(model); + result.append("1"); + } catch (SQLException e) { + result.append("-1"); + e.printStackTrace(); + } + } else { + // 修改操作 + try { + CoeProcessLevelSystemNameDaoFactory.createCoeProcessLevelSystemName().update(model); + result.append("1"); + } catch (Exception e) { + result.append("-1"); + e.printStackTrace(); + } + } + return result.toString(); + } + + // 删除系统名称 + public String removeSystemName(String uuid) { + return CoeProcessLevelSystemNameDaoFactory.createCoeProcessLevelSystemName().removeSysatemName(uuid); + } + + public String editButton(String condition) { + JSONObject json = JSONObject.parseObject(condition); + CoENavButtonModel model = new CoENavButtonModel(); + String buttonUUID = json.getString("buttonUUID"); + model.setActionType(json.getString("actionType")); + model.setActionValue(json.getString("actionValue")); + model.setMenuIcon(json.getString("menuIcon")); + model.setMenuTip(json.getString("menuTip")); + model.setMenuTitle(json.getString("menuTitle")); + model.setTarget(json.getString("target")); + if (StringUtils.isEmpty(buttonUUID)) { + try { + model.setNavSliderUUID(json.getString("navSliderUUID")); + model.setOrderIndex(CoENavDaoFactory.createNavButton().getMaxOrderIndex() + 1); + model.setCreateUser(_uc.getUID()); + model.setUUID(UUIDGener.getUUID()); + int r = CoENavDaoFactory.createNavButton().create(model); + if (r > 0) { + return getButtonTrHtml(model); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } else { + try { + model.setUUID(buttonUUID); + int r = CoENavDaoFactory.createNavButton().update(model); + if (r > 0) { + return getButtonTrHtml(model); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return ""; + } + + public String getButtonHtml(String condition) { + Map macroLibraries = new HashMap(); + JSONObject json = JSONObject.parseObject(condition); + macroLibraries.put("coePortal", json.getString("coePortal")); + String buttonUUID, navSliderUUID; + try { + buttonUUID = json.getString("buttonUUID"); + } catch (Exception e) { + buttonUUID = null; + } + try { + navSliderUUID = json.getString("navSliderUUID"); + } catch (Exception e) { + navSliderUUID = null; + } + CoENavButtonModel model; + if (StringUtils.isNotEmpty(buttonUUID)) { + model = CoENavDaoFactory.createNavButton().findButtonByUUID(buttonUUID); + if (model == null) { + model = new CoENavButtonModel(); + model.setUUID(buttonUUID); + } + } else { + model = new CoENavButtonModel(); + } + StringBuffer html = new StringBuffer(); + html.append("
      "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append(" "); + html.append("
      "); + html.append("
      Target"); + html.append("
      *
       
      "); + html.append(""); + html.append(""); + html.append("
      "); + macroLibraries.put("consoleBotton", html.toString()); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "console.params.button.htm", macroLibraries); + } + + public String updateIndex(String condition) { + JSONObject json = JSONObject.parseObject(condition); + String channelUUID1 = json.getString("channelUUID1"); + String orderIndex1 = json.getString("orderIndex1"); + String channelUUID2 = json.getString("channelUUID2"); + String orderIndex2 = json.getString("orderIndex2"); + String r = "-1"; + r = CoENavDaoFactory.createNavSlider().updateOrderIndex(channelUUID1, orderIndex2); + r = CoENavDaoFactory.createNavSlider().updateOrderIndex(channelUUID2, orderIndex1); + return r; + } + + public String delChannel(String condition) { + JSONObject json = JSONObject.parseObject(condition); + String channelUUID = json.getString("channelUUID"); + CoENavDaoFactory.createNavSlider().delSlidersByChannelUUID(channelUUID); + CoENavDaoFactory.createNavChannel().delChannelByUUID(channelUUID); + return this.getAllChannel(null); + } + + public String delSlider(String condition) { + JSONObject json = JSONObject.parseObject(condition); + String sliderUUID = json.getString("sliderUUID"); + List coENavButtonModels = CoENavDaoFactory.createNavButton().findButtonsBySliderUUID(sliderUUID); + if (coENavButtonModels != null) { + if (coENavButtonModels.size() > 0) { + for (int i = 0, size = coENavButtonModels.size(); i < size; i++) { + CoENavDaoFactory.createNavButton().delButtonById(coENavButtonModels.get(i).getUUID()); + } + } + } + return CoENavDaoFactory.createNavSlider().delSliderByUUID(sliderUUID); + } + + public String delButtons(String condition) { + JSONObject json = JSONObject.parseObject(condition); + String ids = json.getString("ids"); + String[] buttons = ids.split("\\|"); + for (int i = 0; i < buttons.length; i++) { + String bUUID = buttons[i]; + if (StringUtils.isNotEmpty(bUUID)) { + CoENavDaoFactory.createNavButton().delButtonById(bUUID); + } + } + return "1"; + } + + public String getStatus(String condition) { + JSONObject json = JSONObject.parseObject(condition); + String uuid = ""; + try { + uuid = json.getString("projectUUID"); + } catch (Exception e) { + return "1"; + } + + String status = "1"; + String wsState = "0"; + try { + status = DBSql.getString("select project_status from SYS_COE_PROJECT where uuid=?", new Object[] { uuid }); + wsState = DBSql.getString("SELECT ws_state FROM APP_ACT_COE_PAL_WORKSPACE ws where ws.uuid in (select wsid from SYS_COE_PROJECT s where s.uuid=?)", new Object[] { uuid }); + } catch (Exception e) { + e.printStackTrace(); + } + if ("1".equals(status) && "0".equals(wsState)) { + return "1"; + } else { + return "0"; + } + } + + /** + * 进入pal导航主页 + * vue + * @return + */ + public String getVueNavHeader(String mainType) { + Map macroLibraries = new HashMap(); + macroLibraries.put("sessionId", getContext().getSessionId()); + + boolean isSecAdminUser = false;// 是否安全保密员 + // 三员处理 + if (HighSecurityUtil.isON() && HighSecurityUtil.isSecAdminUser(_uc.getUID())) { + mainType = "4";// 安全保密员只能进入管理中心 + isSecAdminUser = true; + } + macroLibraries.put("isSecAdminUser", isSecAdminUser); + + // 是否允许用户修改口令,修改口令页面链接被隐藏。适用于身份来自LDAP或外部 + boolean isSecurityPwdChange = AWSPortalConf.isSecurityPwdChange(); + macroLibraries.put("isSecurityPwdChange", isSecurityPwdChange); + // 默认口令验证,是否强制修改默认密码 + Passwd passwd = new Passwd(); + UserModel userModel = super.getContext().getUserModel(); + boolean forceChangePwd = false; + try { + Constructor _cons = null; + Class[] parameterTypes = {}; + _cons = ClassReflect.getConstructor("com.actionsoft.bpms.org.dao.User", parameterTypes); + if (_cons != null) { + Object[] paras = {}; + Object o = _cons.newInstance(paras); + Method loginCheckSecurityMethod = User.class.getMethod("getPassword", new Class[] { String.class, String.class }); + Object dparams = loginCheckSecurityMethod.invoke(o, new Object[] { userModel.getUID(), AWSPortalConf.getSecurityPwdDefault() }); + String newPwd = (String) dparams; + if (isSecurityPwdChange && userModel.getPassword().equals(newPwd)) { + forceChangePwd = true; + } + } + } catch (Exception e) { + if (isSecurityPwdChange && userModel.getPassword().equals(passwd.deepMD5(AWSPortalConf.getSecurityPwdDefault()))) { + forceChangePwd = true; + } + } + // 验证口令修改周期 + // int securityPwdCycle = AWSPortalConf.getSecurityPwdCycle(); // 口令修改周期,单位(天) + macroLibraries.put("forceChangePwd", forceChangePwd); + // 密码强度 + boolean isSecurityPwdComplexity = AWSPortalConf.isSecurityPwdComplexity(); + int securityMinPwdLength = AWSPortalConf.getSecurityMinPwdLength(); + int securityMaxPwdLength = AWSPortalConf.getSecurityMaxPwdLength(); + macroLibraries.put("isSecurityPwdComplexity", isSecurityPwdComplexity); + macroLibraries.put("securityMinPwdLength", securityMinPwdLength); + macroLibraries.put("securityMaxPwdLength", securityMaxPwdLength); + macroLibraries.put("uid", _uc.getUID()); + AppAPI appApi = SDK.getAppAPI(); + // 通知应用是否启动 + boolean isNoticeActive = appApi.isActive("com.actionsoft.apps.notification"); + if (isNoticeActive) { + macroLibraries.put("isNoticeActive", true); + } else { + macroLibraries.put("isNoticeActive", false); + } + String userId = _uc.getUID(); + CoeUser userDao = new CoeUser(); + boolean isManage = false;// 是否PAL管理员 + if ("admin".equals(userId)) {// admin默认为管理员 + isManage = true; + } else { + isManage = userDao.isCoEManager(_uc.getUID()); + } + macroLibraries.put("isManage", isManage); + if (UtilString.isEmpty(mainType)) {// 没有指定主页类型,进行计算 + mainType = "2";// 默认登录用户为普通用户且无加入任何小组 + if (isManage) {// 管理员用户 + CoeWorkSpaceWeb wsWeb = new CoeWorkSpaceWeb(_uc); + List wsList = wsWeb.getActiveCoeWorkSpaceData(); + if (wsList.size() > 0) { + mainType = "1"; + } else { + mainType = "0"; + } + } else { + // PAL小组是否启动 + boolean isCoopActive = CoeCooperationAPIManager.getInstance().isInstall(); + if (isCoopActive) { + // 获取已加入的启用中的小组 + List teamList = CoeCooperationAPIManager.getInstance().queryJoindTeamList(_uc.getUID(), true, true); + if (teamList.size() > 0) { + mainType = "3"; + } else { + mainType = "2"; + } + } + } + } else if ("5".equals(mainType)) {// 通过用户下拉菜单进入PAL小组,动态判断 + mainType = "2"; + // 判断mainType是2或者3 + // PAL小组是否启动 + boolean isCoopActive = CoeCooperationAPIManager.getInstance().isInstall(); + if (isCoopActive) { + List teamList = CoeCooperationAPIManager.getInstance().queryJoindTeamList(_uc.getUID(), true, true); + if (teamList.size() > 0) { + mainType = "3"; + } else { + mainType = "2"; + } + } + } + macroLibraries.put("mainType", mainType); + macroLibraries.put("settingParam", JSON.toJSON(macroLibraries)); + // 操作行为日志 + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "main.htm", macroLibraries); + } + + /** + * 查询导航栏初始化数据 + * vue + */ + public String getPalNavHeaderData(String mainType) { + ResponseObject ro = ResponseObject.newOkResponse(); + // 用户头像 + ro.put("userPhoto", SDK.getPortalAPI().getUserPhoto(_uc, _uc.getUID())); + AppAPI appApi = SDK.getAppAPI(); + // 流程发布应用是否启动 + boolean isPbulishActive = appApi.isActive("com.actionsoft.apps.coe.pal.publisher"); + ro.put("isPbulishActive", isPbulishActive); + CoeUser userDao = new CoeUser(); + // pal小组是否启动 + boolean isCooperationActive = CoeCooperationAPIManager.getInstance().isInstall(); + ro.put("isCooperationActive", isCooperationActive); + // 获取资产库相关 + JSONArray wsOptions = new JSONArray();// 资产库列表 + String wsLabel = ""; + String wsValue = ""; + + // 获取小组相关 + JSONArray teamOptions = new JSONArray();// 资产库列表 + String teamLabel = ""; + String teamValue = ""; + String teamId = ""; + boolean isTeamManager = false; + + + if ("0".equals(mainType)) {// 是管理员但是无任何管理资产库 + + } else if ("1".equals(mainType)) {// 是管理员并且有管理资产库 + CoeWorkSpaceWeb wsWeb = new CoeWorkSpaceWeb(_uc); + List wsList = wsWeb.getActiveCoeWorkSpaceData(); + for (CoeWorkSpaceModel model : wsList) { + JSONObject wsObj = new JSONObject(); + wsObj.put("value", model.getUUId()); + wsObj.put("label", model.getWsName()); + wsOptions.add(wsObj); + } + wsValue = wsList.get(0).getUUId(); + wsLabel = wsList.get(0).getWsName(); + } else if ("2".equals(mainType)) {// 普通用户且没有任何小组 + + } else if ("3".equals(mainType)) {// 普通用户有当前小组 + // PAL小组是否启动 + if (isCooperationActive) { + List teamList = CoeCooperationAPIManager.getInstance().queryJoindTeamList(_uc.getUID(), true, true); + if (teamList.size() > 0) { + for (CoeCooperationTeamModel team : teamList) { + JSONObject teamObj = new JSONObject(); + teamObj.put("value", team.getId() + "|" + team.getWsId()); + teamObj.put("label", team.getTeamName()); + teamObj.put("teamId", team.getId()); + JSONObject teamLogo = JSONObject.parseObject(team.getTeamLogo()); + teamObj.put("teamLogo", teamLogo); + teamOptions.add(teamObj); + if (!isTeamManager) {// 任一小组管理员,则true + isTeamManager = CoeCooperationAPIManager.getInstance().isTeamManager(team.getId(), _uc.getUID()); + } + } + teamLabel = teamOptions.getJSONObject(0).getString("label"); + teamValue = teamOptions.getJSONObject(0).getString("value"); + teamId = teamOptions.getJSONObject(0).getString("teamId"); + } + } + } else if ("4".equals(mainType)) {// 管理中心 + + } + ro.put("wsOptions", wsOptions); + ro.put("wsLabel", wsLabel); + ro.put("wsValue", wsValue); + ro.put("teamOptions", teamOptions); + ro.put("teamLabel", teamLabel); + ro.put("teamValue", teamValue); + ro.put("isTeamManager", isTeamManager); + + // 获取所有应用中心数据 + JSONArray appList = new JSONArray(); + List apps = ExtendsAppManager.getList(); + for (ExtendsAppProfile profile : apps) { + AppContext appContext = profile.getAppContext(); + if (appContext.getId().equals("com.actionsoft.apps.coe.pal.mappingmanagement")) { + continue; + } + if (appApi.isActive(appContext.getId())) { + JSONObject app = new JSONObject(); + app.put("appId", appContext.getId()); + app.put("name", appContext.getNameI18N()); + String desc = SDK.getAppAPI().getProperty(appContext.getId(), "description"); + app.put("desc", UtilString.isEmpty(desc) ? "一句话简介" : desc.trim()); + app.put("clazzName", profile.getMainClass()); + JSONObject icon = new JSONObject(); + if (UtilString.isEmpty(appContext.getIconFontCode())) { + icon.put("icon", ""); + } else { + icon.put("icon", appContext.getIconFontCode()); + } + if (UtilString.isEmpty(appContext.getIconFontColor())) { + icon.put("color", "#009688"); + } else { + icon.put("color", appContext.getIconFontColor()); + } + app.put("icon", icon); + appList.add(app); + } + } + // 管理员有建模管理和资产库备份权限 + JSONObject method = new JSONObject(); + method.put("appId", "method"); + method.put("name", "建模管理"); + method.put("desc", "元模型定义管理中心"); + method.put("clazzName", "method"); + JSONObject icon = new JSONObject(); + icon.put("icon", ""); + icon.put("color", "#4E7FF9"); + method.put("icon", icon); + appList.add(method); + JSONObject backup = new JSONObject(); + backup.put("appId", "backup"); + backup.put("name", "数据备份"); + backup.put("desc", "备份还原流程资产"); + backup.put("clazzName", "backup"); + JSONObject icon2 = new JSONObject(); + icon2.put("icon", ""); + icon2.put("color", "#ff9421"); + backup.put("icon", icon2); + appList.add(backup); + JSONObject recycle = new JSONObject(); + recycle.put("appId", "recycle"); + recycle.put("name", "回收站"); + recycle.put("desc", "恢复删除模型文件"); + recycle.put("clazzName", "recycle"); + JSONObject icon3 = new JSONObject(); + icon3.put("icon", ""); + icon3.put("color", "#D9001B"); + recycle.put("icon", icon3); + appList.add(recycle); + // 三员管理模式下,添加密级标定应用 + if (HighSecurityUtil.isON()){ + JSONObject mark = new JSONObject(); + mark.put("appId", "mark"); + mark.put("name", "密级标定"); + mark.put("desc", "快速标定文件密级"); + mark.put("clazzName", "mark"); + JSONObject icon4 = new JSONObject(); + icon4.put("icon", ""); + icon4.put("color", "#4E7FF9"); + mark.put("icon", icon4); + appList.add(mark); + } + + JSONObject teamAppList = new JSONObject(); + if (UtilString.isNotEmpty(teamId)) { + for (int i = 0; i < teamOptions.size(); i++) { + String tempTeamId = teamOptions.getJSONObject(i).getString("teamId"); + Set appPerm = CoeCooperationAPIManager.getInstance().queryAppPerm(tempTeamId, _uc.getUID()); + JSONArray tempList = new JSONArray(); + for (int j = 0; j < appList.size(); j++) { + JSONObject app = appList.getJSONObject(j); + if (appPerm.contains(app.getString("appId"))) { + tempList.add(JSON.parseObject(JSON.toJSONString(app))); + } + // 三员管理模式下,添加密级标定应用 + if (HighSecurityUtil.isON()) { + if (app.getString("appId").equals("mark")) { + tempList.add(JSON.parseObject(JSON.toJSONString(app))); + } + } + } + teamAppList.put(tempTeamId, tempList); + } + appList = JSON.parseArray(JSON.toJSONString(teamAppList.getJSONArray(teamId))); + } + ro.put("teamAppList", teamAppList); + ro.put("appList", appList); + return ro.toString(); + } + + /** + * 获取小组成员相关权限 + * @param wsId + * @param teamId + * @return + */ + public String getUserPerm(String wsId, String teamId) { + ResponseObject ro = ResponseObject.newOkResponse(); + CoeCooperationAPIManager.getInstance().queryCooperationMemberActionPerm(teamId, _uc.getUID(), ro); + return ro.toString(); + } + + /** + * 记录各模块的访问日志 + * 关联管理在其app中进行记录,不在此记录 + * @param moduleCategory 业务模块 + * @return + */ + public String saveAccessLog(String moduleCategory) { + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + String tempModuleCategory = null; + String info = null; + switch (moduleCategory) { + case "workspaceManage":// 管理中心-资产库管理 + tempModuleCategory = CoEOpLogConst.MODULE_CATEGORY_WORKSPACE; + info = CoEOpLogConst.INFO_WORKSPACE_MANAGE_ACCESS; + break; + case "cooperationManage":// 管理中心-小组管理 + tempModuleCategory = CoEOpLogConst.MODULE_CATEGORY_COOPERATION; + info = CoEOpLogConst.INFO_COOPERATION_ACCESS_MANAGE; + break; + case "palUser":// 管理中心-PAL用户 + tempModuleCategory = CoEOpLogConst.MODULE_CATEGORY_USER; + info = CoEOpLogConst.INFO_USER_ACCESS; + break; + case "themeStyle":// 管理中心-主题风格 + tempModuleCategory = CoEOpLogConst.MODULE_CATEGORY_PORTAL; + info = CoEOpLogConst.INFO_PORTAL_THEME_STYLE_ACCESS; + break; + case "commonRepository":// 管理中心-常用流程 + tempModuleCategory = CoEOpLogConst.MODULE_CATEGORY_PORTAL; + info = CoEOpLogConst.INFO_PORTAL_COMMON_REPOSITORY_ACCESS; + break; + case "userGroup":// 管理中心-浏览用户 + tempModuleCategory = CoEOpLogConst.MODULE_CATEGORY_PORTAL; + info = CoEOpLogConst.INFO_PORTAL_USER_GROUP_ACCESS; + break; + case "method":// 应用中心-建模管理 + tempModuleCategory = CoEOpLogConst.MODULE_CATEGORY_METHOD; + info = CoEOpLogConst.INFO_METHOD_ACCESS; + break; + case "backup":// 应用中心-数据备份 + tempModuleCategory = CoEOpLogConst.MODULE_CATEGORY_BACKUP; + info = CoEOpLogConst.INFO_BACKUP_ACCESS; + break; + case "recycle":// 应用中心-回收站 + tempModuleCategory = CoEOpLogConst.MODULE_CATEGORY_RECYCLE; + info = CoEOpLogConst.INFO_RECYCLE_ACCESS; + break; + case "workspace":// 访问资产库 + tempModuleCategory = CoEOpLogConst.MODULE_CATEGORY_WORKSPACE; + info = CoEOpLogConst.INFO_WORKSPACE_ACCESS; + break; + case "cooperation":// 访问PAL小组 + tempModuleCategory = CoEOpLogConst.MODULE_CATEGORY_COOPERATION; + info = CoEOpLogConst.INFO_COOPERATION_ACCESS; + break; + } + if (UtilString.isNotEmpty(tempModuleCategory)) { + CoEOpLogAPI.auditOkOp(_uc, tempModuleCategory, CoEOpLogConst.OP_ACCESS, info); + } + } + return ResponseObject.newOkResponse().toString(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/httpsqs/client/HttpsqsClient.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/httpsqs/client/HttpsqsClient.java new file mode 100644 index 00000000..0dc5c1f5 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/httpsqs/client/HttpsqsClient.java @@ -0,0 +1,396 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.system.httpsqs.client; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; + +import com.actionsoft.exception.AWSException; + +public class HttpsqsClient { + private String server; //服务器IP地址 + private int port; //服务器端口号 + private String charset; //HTTP请求字符集 + private int connectTimeout = 60 * 1000; //连接超时,默认毫秒值 + private int readTimeout = 60 * 1000; //读超时,默认毫秒值 + + public static final String HTTPSQS_ERROR_PREFIX = "HTTPSQS_ERROR"; + + /** + * 建立HTTP Sqs Client + * + * @param server 服务器IP地址 + * @param port 服务器端口号 + * @param charset HTTP请求字符集 + * @param connectTimeout 连接超时 + * @param readTimeout 读超时 + */ + public HttpsqsClient(String server, int port, String charset, int connectTimeout, int readTimeout) { + this.server = server; + this.port = port; + this.charset = charset; + this.connectTimeout = connectTimeout; + this.readTimeout = readTimeout; + } + /** + * 建立HTTP Sqs Client + * + * @param server 服务器IP地址 + * @param port 服务器端口号 + * @param charset HTTP请求字符集 + */ + public HttpsqsClient(String server, int port, String charset) { + this.server = server; + this.port = port; + this.charset = charset; + } + + /** + * 处理HTTP + * + * @param urlstr 请求的URL + * @return 服务器的返回信息 + */ + private String doProcess(String urlstr) { + URL url = null; + try { + url = new URL(urlstr); + } catch (MalformedURLException e) { + return HTTPSQS_ERROR_PREFIX + ":" + e.getMessage(); + } + + BufferedReader reader = null; + try { + URLConnection conn = url.openConnection(); + conn.setConnectTimeout(connectTimeout); + conn.setReadTimeout(readTimeout); + conn.setUseCaches(false); + conn.setDoOutput(false); + conn.setDoInput(true); + conn.setRequestProperty("Content-Type", "text/plain;charset=" + charset); + + conn.connect(); + + reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset)); + String line; + StringBuilder result = new StringBuilder(); + + int i = 0; + while ((line = reader.readLine()) != null) { + i++; + if (i != 1) { + result.append("\n"); + } + result.append(line); + } + return result.toString(); + } catch (IOException e) { + return HTTPSQS_ERROR_PREFIX + ":" + e.getMessage(); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException ex) { + } + } + } + } + + /** + * 更改指定队列的最大队列数量 + * + * @param queue_name 队列名 + * @param num 最大队列数 + * @return 成功: 返回"HTTPSQS_MAXQUEUE_OK" + *
      错误: "HTTPSQS_MAXQUEUE_CANCEL"-设置没有成功 + *
      其他错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String maxqueue(String queue_name, String num) { + String result = null; + try { + String urlstr = "http://" + this.server + ":" + this.port + "/?name=" + URLEncoder.encode(queue_name, charset) + "&opt=maxqueue&num=" + num; + result = this.doProcess(urlstr); + return result; + } catch (UnsupportedEncodingException ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } +//synctime + + /** + * 修改定时刷新内存缓冲区内容到磁盘的间隔时间 + * + * @param queue_name 队列名 + * @param num 间隔时间(秒) + * @return 成功: 返回"HTTPSQS_SYNCTIME_OK" + *
      错误: "HTTPSQS_SYNCTIME_CANCEL"-设置没有成功 + *
      其他错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String synctime(String queue_name, String num) { + String result = null; + try { + String urlstr = "http://" + this.server + ":" + this.port + "/?name=" + URLEncoder.encode(queue_name, charset) + "&opt=synctime&num=" + num; + result = this.doProcess(urlstr); + return result; + } catch (UnsupportedEncodingException ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } + + /** + * 重置指定队列 + * + * @param queue_name 队列名 + * @return 成功: 返回"HTTPSQS_RESET_OK" + *
      错误: "HTTPSQS_RESET_ERROR"-设置没有成功 + *
      其他错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String reset(String queue_name) { + String result = null; + try { + String urlstr = "http://" + this.server + ":" + this.port + "/?name=" + URLEncoder.encode(queue_name, charset) + "&opt=reset"; + + result = this.doProcess(urlstr); + return result; + } catch (UnsupportedEncodingException ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } + + /** + * 查看指定队列位置点的内容 + * + * @param queue_name 队列名 + * @param pos 位置 + * @return 成功: 返回指定位置的队列内容,错误返回已"HTTPSQS_ERROR"开头的字符串 + *
      错误: "HTTPSQS_ERROR_NOFOUND"-指定的消息不存在 + *
      其他错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String view(String queue_name, String pos) { + String result = null; + try { + String urlstr = "http://" + this.server + ":" + this.port + "/?charset=" + this.charset + "&name=" + URLEncoder.encode(queue_name, charset) + "&opt=view&pos=" + pos; + + result = this.doProcess(urlstr); + return result; + } catch (UnsupportedEncodingException ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } + + /** + * 查看队列状态 + * + * @param queue_name 队列名 + * @return 成功: 返回队列信息 + *
      错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String status(String queue_name) { + String result = null; + try { + String urlstr = "http://" + this.server + ":" + this.port + "/?name=" + URLEncoder.encode(queue_name, charset) + "&opt=status"; + + result = this.doProcess(urlstr); + return result; + } catch (UnsupportedEncodingException ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } + + /** + * 已JSO格式,查看队列状态 + * + * @param queue_name 队列名 + * @return 成功: {"name":"队列名","maxqueue":最大队列数,"putpos":队列写入点值,"putlap":队列写入点值圈数,"getpos":队列获取点值,"getlap":队列获取点值圈数,"unread":未读消息数} + *
      错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String statusJson(String queue_name) { + String result = null; + try { + String urlstr = "http://" + this.server + ":" + this.port + "/?name=" + URLEncoder.encode(queue_name, charset) + "&opt=status_json"; + + result = this.doProcess(urlstr); + return result; + } catch (UnsupportedEncodingException ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } + + /** + * 出队列 + * + * @param queue_name 队列名 + * @return 成功: 出队列的消息内容 + *
      错误: "HTTPSQS_GET_END"-队列为空 + *
      其他错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String get(String queue_name) { + String result = null; + try { + String urlstr = "http://" +this.server + ":" + this.port + "/?charset=" + this.charset + "&name=" + URLEncoder.encode(queue_name, charset) + "&opt=get"; + + result = this.doProcess(urlstr); + return result; + } catch (UnsupportedEncodingException ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } + + /** + * 入队列 + * + * @param queue_name 队列名 + * @param data 入队列的消息内容 + * @return 成功: 返回字符串"HTTPSQS_PUT_OK" + *
      错误: "HTTPSQS_PUT_ERROR"-入队列错误; "HTTPSQS_PUT_END"-队列已满 + *
      其他错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String put(String queue_name, String data) { + String urlstr; + URL url = null; + try { + urlstr = "http://" +this.server + ":" + this.port + "/?name=" + URLEncoder.encode(queue_name, charset) + "&opt=put"; + url = new URL(urlstr); + } catch (UnsupportedEncodingException ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } catch (MalformedURLException e) { + return HTTPSQS_ERROR_PREFIX + ":" + e.getMessage(); + } + URLConnection conn; + OutputStreamWriter writer = null; + try { + conn = url.openConnection(); + conn.setConnectTimeout(connectTimeout); + conn.setReadTimeout(readTimeout); + conn.setUseCaches(false); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setRequestProperty("Content-Type", "text/plain;charset=" + charset); + + conn.connect(); + + writer = new OutputStreamWriter(conn.getOutputStream(), charset); + writer.write(URLEncoder.encode(data, charset)); + writer.flush(); + } catch (IOException e) { + e.printStackTrace(System.err); + return HTTPSQS_ERROR_PREFIX + ":" + e.getMessage(); + } finally { + if (writer != null) { + try { + writer.close(); + } catch (IOException ex) { + } + } + } + + BufferedReader reader = null; + try { + reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset)); + return reader.readLine(); + } catch (IOException e) { + e.printStackTrace(System.err); + return HTTPSQS_ERROR_PREFIX + ":" + e.getMessage(); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException ex) { + } + } + } + } + /** + * 入队列 + * + * @param queue_name 队列名 + * @param data 入队列的消息内容 + * zhoux + */ + public void putCoEData(String queue_name, String data)throws Exception{ + String urlstr; + URL url=null; + try { + urlstr = "http://" +this.server + ":" + this.port + "/?name=" + URLEncoder.encode(queue_name, charset) + "&opt=put"; + url = new URL(urlstr); + } catch (UnsupportedEncodingException ex) { + throw ex; + } catch (MalformedURLException e) { + throw e; + } + URLConnection conn=null; + + OutputStreamWriter writer = null; + try { + conn = url.openConnection(); + conn.setConnectTimeout(connectTimeout); + conn.setReadTimeout(readTimeout); + conn.setUseCaches(false); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setRequestProperty("Content-Type", "text/plain;charset=" + charset); + conn.connect(); + + writer = new OutputStreamWriter(conn.getOutputStream(), charset); + writer.write(URLEncoder.encode(data, charset)); + writer.flush(); + } catch (IOException e) { + throw e; + } finally { + if (writer != null) { + try { + writer.close(); + } catch (IOException ex) { + } + } + } + + BufferedReader reader = null; + try { + reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset)); + } catch (IOException e) { + throw e; + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException ex) { + } + } + } + } + public static void main(String[] args) { + HttpsqsClient sqsClient = new HttpsqsClient("127.0.0.1", 1218, "GBK"); + sqsClient.put("test", "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); + sqsClient.put("test", "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); + String dateQueueRs; + while (true) { + dateQueueRs = sqsClient.get("test"); + // 结束标志 + if (dateQueueRs == null || dateQueueRs.indexOf("HTTPSQS_ERROR") >= 0 || dateQueueRs.equals("HTTPSQS_GET_END")) { + break; + } + } + } +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/httpsqs/client/ex/ChunkedInputStream.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/httpsqs/client/ex/ChunkedInputStream.java new file mode 100644 index 00000000..28de0dcb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/httpsqs/client/ex/ChunkedInputStream.java @@ -0,0 +1,296 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.system.httpsqs.client.ex; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; + +public class ChunkedInputStream extends InputStream { + /** + * The inputstream that we're wrapping + */ + private InputStream in; + + /** + * The chunk size + */ + private int chunkSize; + + /** + * The current position within the current chunk + */ + private int pos; + + /** + * True if we'are at the beginning of stream + */ + private boolean bof = true; + + /** + * True if we've reached the end of stream + */ + private boolean eof = false; + + /** + * True if this stream is closed + */ + private boolean closed = false; + + /** + * ChunkedInputStream constructor that associates the chunked input stream with a + * HTTP method} the chunked input stream originates from. If chunked input stream + * contains any footers (trailing headers), they will be added to the associated + * + * @param in the raw input stream + * @throws IOException If an IO error occurs + */ + public ChunkedInputStream(final InputStream in) throws IOException { + + if (in == null) { + throw new IllegalArgumentException("InputStream parameter may not be null"); + } + this.in = in; + this.pos = 0; + } + + /** + *

      Returns all the data in a chunked stream in coalesced form. A chunk + * is followed by a CRLF. The method returns -1 as soon as a chunksize of 0 + * is detected.

      + *

      + *

      Trailer headers are read automcatically at the end of the stream and + * can be obtained with the getResponseFooters() method.

      + * + * @return -1 of the end of the stream has been reached or the next data + * byte + * @throws IOException If an IO problem occurs + */ + public int read() throws IOException { + + if (closed) { + throw new IOException("Attempted read from closed stream."); + } + if (eof) { + return -1; + } + if (pos >= chunkSize) { + nextChunk(); + if (eof) { + return -1; + } + } + pos++; + return in.read(); + } + + /** + * Read some bytes from the stream. + * + * @param b The byte array that will hold the contents from the stream. + * @param off The offset into the byte array at which bytes will start to be + * placed. + * @param len the maximum number of bytes that can be returned. + * @return The number of bytes returned or -1 if the end of stream has been + * reached. + * @throws IOException if an IO problem occurs. + * @see java.io.InputStream#read(byte[], int, int) + */ + public int read(byte[] b, int off, int len) throws IOException { + + if (closed) { + throw new IOException("Attempted read from closed stream."); + } + + if (eof) { + return -1; + } + if (pos >= chunkSize) { + nextChunk(); + if (eof) { + return -1; + } + } + len = Math.min(len, chunkSize - pos); + int count = in.read(b, off, len); + pos += count; + return count; + } + + /** + * Read some bytes from the stream. + * + * @param b The byte array that will hold the contents from the stream. + * @return The number of bytes returned or -1 if the end of stream has been + * reached. + * @throws IOException if an IO problem occurs. + * @see java.io.InputStream#read(byte[]) + */ + public int read(byte[] b) throws IOException { + return read(b, 0, b.length); + } + + /** + * Read the CRLF terminator. + * + * @throws IOException If an IO error occurs. + */ + private void readCRLF() throws IOException { + int cr = in.read(); + int lf = in.read(); + if ((cr != '\r') || (lf != '\n')) { + throw new IOException( + "CRLF expected at end of chunk: " + cr + "/" + lf); + } + } + + + /** + * Read the next chunk. + * + * @throws IOException If an IO error occurs. + */ + private void nextChunk() throws IOException { + if (!bof) { + readCRLF(); + } + chunkSize = getChunkSizeFromInputStream(in); + bof = false; + pos = 0; + if (chunkSize == 0) { + eof = true; + } + } + + /** + * Expects the stream to start with a chunksize in hex with optional + * comments after a semicolon. The line must end with a CRLF: "a3; some + * comment\r\n" Positions the stream at the start of the next line. + * + * @param in The new input stream. + * @return the chunk size as integer + * @throws IOException when the chunk size could not be parsed + */ + private static int getChunkSizeFromInputStream(final InputStream in) + throws IOException { + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + // States: 0=normal, 1=\r was scanned, 2=inside quoted string, -1=end + int state = 0; + while (state != -1) { + int b = in.read(); + if (b == -1) { + throw new IOException("chunked stream ended unexpectedly"); + } + switch (state) { + case 0: + switch (b) { + case '\r': + state = 1; + break; + case '\"': + state = 2; + /* fall through */ + default: + baos.write(b); + } + break; + + case 1: + if (b == '\n') { + state = -1; + } else { + // this was not CRLF + throw new IOException("Protocol violation: Unexpected" + + " single newline character in chunk size"); + } + break; + + case 2: + switch (b) { + case '\\': + b = in.read(); + baos.write(b); + break; + case '\"': + state = 0; + /* fall through */ + default: + baos.write(b); + } + break; + default: + throw new RuntimeException("assertion failed"); + } + } + + //parse data + String dataString = getAsciiString(baos.toByteArray()); + int separator = dataString.indexOf(';'); + dataString = (separator > 0) + ? dataString.substring(0, separator).trim() + : dataString.trim(); + + int result; + try { + result = Integer.parseInt(dataString.trim(), 16); + } catch (NumberFormatException e) { + throw new IOException("Bad chunk size: " + dataString); + } + return result; + } + + /** + * Upon close, this reads the remainder of the chunked message, + * leaving the underlying socket at a position to start reading the + * next response without scanning. + * + * @throws IOException If an IO problem occurs. + */ + public void close() throws IOException { + if (!closed) { + eof = true; + closed = true; + } + } + + /** + * Converts the byte array of ASCII characters to a string. This method is + * to be used when decoding content of HTTP elements (such as response + * headers) + * + * @param data the byte array to be encoded + * @return The string representation of the byte array + * @since 3.0 + */ + public static String getAsciiString(final byte[] data) { + return getAsciiString(data, 0, data.length); + } + + public static String getAsciiString(final byte[] data, int offset, int length) { + if (data == null) { + throw new IllegalArgumentException("Parameter may not be null"); + } + + try { + return new String(data, offset, length, "US-ASCII"); + } catch (UnsupportedEncodingException e) { + throw new Error("HttpClient requires ASCII support"); + } + } +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/httpsqs/client/ex/ContentLengthInputStream.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/httpsqs/client/ex/ContentLengthInputStream.java new file mode 100644 index 00000000..71e0e072 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/httpsqs/client/ex/ContentLengthInputStream.java @@ -0,0 +1,168 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.system.httpsqs.client.ex; + +import java.io.IOException; +import java.io.InputStream; + +public class ContentLengthInputStream extends InputStream { + + /** + * The maximum number of bytes that can be read from the stream. Subsequent + * read operations will return -1. + */ + private long contentLength; + + /** + * The current position + */ + private long pos = 0; + + /** + * True if the stream is closed. + */ + private boolean closed = false; + + /** + * Wrapped input stream that all calls are delegated to. + */ + private InputStream wrappedStream = null; + + /** + * Creates a new length limited stream + * + * @param in The stream to wrap + * @param contentLength The maximum number of bytes that can be read from + * the stream. Subsequent read operations will return -1. + * @since 3.0 + */ + public ContentLengthInputStream(InputStream in, long contentLength) { + super(); + this.wrappedStream = in; + this.contentLength = contentLength; + } + + /** + *

      Reads until the end of the known length of content.

      + *

      + *

      Does not close the underlying socket input, but instead leaves it + * primed to parse the next response.

      + * + * @throws IOException If an IO problem occurs. + */ + public void close() throws IOException { + if (!closed) { + closed = true; + } + } + + + /** + * Read the next byte from the stream + * + * @return The next byte or -1 if the end of stream has been reached. + * @throws IOException If an IO problem occurs + * @see java.io.InputStream#read() + */ + public int read() throws IOException { + if (closed) { + throw new IOException("Attempted read from closed stream."); + } + + if (pos >= contentLength) { + return -1; + } + pos++; + return this.wrappedStream.read(); + } + + /** + * Does standard {@link InputStream#read(byte[], int, int)} behavior, but + * also notifies the watcher when the contents have been consumed. + * + * @param b The byte array to fill. + * @param off Start filling at this position. + * @param len The number of bytes to attempt to read. + * @return The number of bytes read, or -1 if the end of content has been + * reached. + * @throws java.io.IOException Should an error occur on the wrapped stream. + */ + public int read(byte[] b, int off, int len) throws java.io.IOException { + if (closed) { + throw new IOException("Attempted read from closed stream."); + } + + if (pos >= contentLength) { + return -1; + } + + if (pos + len > contentLength) { + len = (int) (contentLength - pos); + } + int count = this.wrappedStream.read(b, off, len); + pos += count; + return count; + } + + + /** + * Read more bytes from the stream. + * + * @param b The byte array to put the new data in. + * @return The number of bytes read into the buffer. + * @throws IOException If an IO problem occurs + * @see java.io.InputStream#read(byte[]) + */ + public int read(byte[] b) throws IOException { + return read(b, 0, b.length); + } + + /** + * Skips and discards a number of bytes from the input stream. + * + * @param n The number of bytes to skip. + * @return The actual number of bytes skipped. <= 0 if no bytes + * are skipped. + * @throws IOException If an error occurs while skipping bytes. + * @see InputStream#skip(long) + */ + public long skip(long n) throws IOException { + // make sure we don't skip more bytes than are + // still available + long length = Math.min(n, contentLength - pos); + // skip and keep track of the bytes actually skipped + length = this.wrappedStream.skip(length); + // only add the skipped bytes to the current position + // if bytes were actually skipped + if (length > 0) { + pos += length; + } + return length; + } + + public int available() throws IOException { + if (this.closed) { + return 0; + } + int avail = this.wrappedStream.available(); + if (this.pos + avail > this.contentLength) { + avail = (int) (this.contentLength - this.pos); + } + return avail; + } + +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/httpsqs/client/ex/HttpsqsClientEx.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/httpsqs/client/ex/HttpsqsClientEx.java new file mode 100644 index 00000000..59b108b8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/httpsqs/client/ex/HttpsqsClientEx.java @@ -0,0 +1,426 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.system.httpsqs.client.ex; + +import java.io.*; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.URLEncoder; +import java.util.StringTokenizer; + +import javax.net.ssl.SSLSocketFactory; + +public class HttpsqsClientEx { + private String _server; //服务器IP地址 + private int _port; //服务器端口号 + private String _charset; //HTTP请求字符集 + private int _connectTimeout = 0; //连接超时 + private int _readTimeout = 0; //读超时 + + private HttpClient _client = null; + + public static final String HTTPSQS_ERROR_PREFIX = "HTTPSQS_ERROR"; + + /** + * 建立HTTP Sqs Client + * + * @param server 服务器IP地址 + * @param port 服务器端口号 + * @param charset HTTP请求字符集 + * @param connectTimeout 连接超时 + * @param readTimeout 读超时 + */ + public HttpsqsClientEx(String server, int port, String charset, int connectTimeout, int readTimeout) { + this._server = server; + this._port = port; + this._charset = charset; + this._connectTimeout = connectTimeout; + this._readTimeout = readTimeout; + _client = new HttpClient(); + } + + public void open() { + try { + _client.openConnection(); + } catch (IOException e) { + // + } + } + + public void close() { + _client.closeConnection(); + } + + /** + * 更改指定队列的最大队列数量 + * + * @param queue_name 队列名 + * @param num 最大队列数 + * @return 成功: 返回"HTTPSQS_MAXQUEUE_OK" + *
      错误: "HTTPSQS_MAXQUEUE_CANCEL"-设置没有成功 + *
      其他错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String maxqueue(String queue_name, String num) { + try { + String urlstr = "/?name=" + URLEncoder.encode(queue_name, _charset) + "&opt=maxqueue&num=" + num; + String result = _client.sendRequest(urlstr, null); + return result; + } catch (Throwable ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } +//synctime + + /** + * 修改定时刷新内存缓冲区内容到磁盘的间隔时间 + * + * @param queue_name 队列名 + * @param num 间隔时间(秒) + * @return 成功: 返回"HTTPSQS_SYNCTIME_OK" + *
      错误: "HTTPSQS_SYNCTIME_CANCEL"-设置没有成功 + *
      其他错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String synctime(String queue_name, String num) { + try { + String urlstr = "/?name=" + URLEncoder.encode(queue_name, _charset) + "&opt=synctime&num=" + num; + String result = _client.sendRequest(urlstr, null); + return result; + } catch (Throwable ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } + + /** + * 重置指定队列 + * + * @param queue_name 队列名 + * @return 成功: 返回"HTTPSQS_RESET_OK" + *
      错误: "HTTPSQS_RESET_ERROR"-设置没有成功 + *
      其他错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String reset(String queue_name) { + try { + String urlstr = "/?name=" + URLEncoder.encode(queue_name, _charset) + "&opt=reset"; + String result = _client.sendRequest(urlstr, null); + return result; + } catch (Throwable ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } + + /** + * 查看指定队列位置点的内容 + * + * @param queue_name 队列名 + * @param pos 位置 + * @return 成功: 返回指定位置的队列内容,错误返回已"HTTPSQS_ERROR"开头的字符串 + *
      错误: "HTTPSQS_ERROR_NOFOUND"-指定的消息不存在 + *
      其他错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String view(String queue_name, String pos) { + try { + String urlstr = "/?charset=" + this._charset + "&name=" + URLEncoder.encode(queue_name, _charset) + "&opt=view&pos=" + pos; + String result = _client.sendRequest(urlstr, null); + return result; + } catch (Throwable ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } + + /** + * 查看队列状态 + * + * @param queue_name 队列名 + * @return 成功: 返回队列信息 + *
      错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String status(String queue_name) { + try { + String urlstr = "/?name=" + URLEncoder.encode(queue_name, _charset) + "&opt=status"; + String result = _client.sendRequest(urlstr, null); + return result; + } catch (Throwable ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } + + /** + * 已JSO格式,查看队列状态 + * + * @param queue_name 队列名 + * @return 成功: {"name":"队列名","maxqueue":最大队列数,"putpos":队列写入点值,"putlap":队列写入点值圈数,"getpos":队列获取点值,"getlap":队列获取点值圈数,"unread":未读消息数} + *
      错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String statusJson(String queue_name) { + try { + String urlstr = "/?name=" + URLEncoder.encode(queue_name, _charset) + "&opt=status_json"; + String result = _client.sendRequest(urlstr, null); + return result; + } catch (Throwable ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } + + /** + * 出队列 + * + * @param queue_name 队列名 + * @return 成功: 出队列的消息内容 + *
      错误: "HTTPSQS_GET_END"-队列为空 + *
      其他错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String get(String queue_name) { + try { + String urlstr = "/?charset=" + this._charset + "&name=" + URLEncoder.encode(queue_name, _charset) + "&opt=get"; + String result = _client.sendRequest(urlstr, null); + return result; + } catch (Throwable ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } + + /** + * 入队列 + * + * @param queue_name 队列名 + * @param data 入队列的消息内容 + * @return 成功: 返回字符串"HTTPSQS_PUT_OK" + *
      错误: "HTTPSQS_PUT_ERROR"-入队列错误; "HTTPSQS_PUT_END"-队列已满 + *
      其他错误: 返回已"HTTPSQS_ERROR"开头的字符串 + */ + public String put(String queue_name, String data) { + try { + String urlstr = "/?name=" + URLEncoder.encode(queue_name, _charset) + "&opt=put"; + String result = _client.sendRequest(urlstr, data); + return result; + } catch (Throwable ex) { + return HTTPSQS_ERROR_PREFIX + ":" + ex.getMessage(); + } + } + + /** + * A replacement for java.net.URLConnection. + */ + private class HttpClient { + private String _hostAndPort; + + private Socket _socket = null; + private BufferedWriter _writer; + private InputStream _input; + private byte[] _readBbuffer; + private boolean _keepalive; + + + public HttpClient() { + _hostAndPort = _port == 80 ? _server : _server + ":" + _port; + } + + protected void openConnection() throws IOException { + if (_input == null) { + InetSocketAddress socketAddress = new InetSocketAddress(_server, _port); + // _socket = new Socket(); + _socket = SSLSocketFactory.getDefault().createSocket(); + try { + _socket.setSoTimeout(_readTimeout); + _socket.setReuseAddress(true); + _socket.setTcpNoDelay(true); + _socket.setSoLinger(true, 0); + } catch (Throwable thex) { + // + } + + _socket.connect(socketAddress, _connectTimeout); + _writer = new BufferedWriter(new OutputStreamWriter(_socket.getOutputStream(), _charset)); + _input = _socket.getInputStream(); + } + } + + protected void closeConnection() { + if (_input != null) { + try { + _input.close(); + } catch (IOException ex1) { + } + _input = null; + } + + if (_writer != null) { + try { + _writer.close(); + } catch (IOException ex) { + } + _writer = null; + } + + if (_socket != null) { + try { + _socket.close(); + } catch (Exception ignore) { + } + _socket = null; + } + } + + /** + * 从HTTP Header里找到字符集编码,没有发现返回null + * + * @param contentType + * @return + */ + private String getCharsetFromContentType(String contentType) { + if (contentType == null) { + return null; + } + int start = contentType.indexOf("charset="); + if (start < 0) { + return null; + } + String encoding = contentType.substring(start + 8); + int end = encoding.indexOf(';'); + if (end >= 0) { + encoding = encoding.substring(0, end); + } + encoding = encoding.trim(); + if ((encoding.length() > 2) && (encoding.startsWith("\"")) && (encoding.endsWith("\""))) { + encoding = encoding.substring(1, encoding.length() - 1); + } + return (encoding.trim()); + } + + private static final String CRLN = "\r\n"; + + /** + * @param pathAndQuery + * @param request + * @return + * @throws IOException + */ + public String sendRequest(String pathAndQuery, String request) throws IOException { + this.openConnection(); + try { + if (request != null) { + _writer.write("POST " + pathAndQuery + " HTTP/1.1" + CRLN); + } else { + _writer.write("GET " + pathAndQuery + " HTTP/1.1" + CRLN); + } + + _writer.write("User-Agent: " + "wstone" + CRLN); + _writer.write("Host: " + _hostAndPort + CRLN); + + _writer.write("Connection: Keep-Alive" + CRLN); + _writer.write("Content-Type: text/plan;charset=" + _charset + CRLN); + if (request != null) { + _writer.write("Content-Length: " + request.getBytes(_charset).length); //加上2是为了加上多余的回车换行 + } + + _writer.write(CRLN + CRLN); + if (request != null) { + _writer.write(request); + } + _writer.flush(); + + // start reading server response headers + String line = readLine(_input, _charset); + int contentLength = -1; + StringTokenizer tokens = new StringTokenizer(line); + String httpversion = tokens.nextToken(); + String statusCode = tokens.nextToken(); + String statusMsg = tokens.nextToken("\n\r"); + _keepalive = "HTTP/1.1".equals(httpversion); + if (!"200".equals(statusCode)) { + throw new IOException("Unexpected Response from Server: " + statusMsg); + } + + do { + line = readLine(_input, _charset); + if (line != null) { + line = line.toLowerCase(); + if (line.startsWith("content-length:")) { + contentLength = Integer.parseInt(line.substring(15).trim()); + } + if (line.startsWith("connection:")) { + _keepalive = line.indexOf("keep-alive") > -1; + } + if (line.startsWith("content-type")) { + _charset = getCharsetFromContentType(line); + } + } + } while (line != null && !line.equals("")); + + InputStream bodyInputStream; + if (contentLength > 0) { + bodyInputStream = new ContentLengthInputStream(_input, contentLength); + } else { + bodyInputStream = new ChunkedInputStream(_input); + } + + BufferedReader bodyReader = new BufferedReader(new InputStreamReader(bodyInputStream, _charset)); + StringBuilder result = new StringBuilder(); + int i = 0; + while ((line = bodyReader.readLine()) != null) { + i++; + if (i != 1) { + result.append("\n"); + } + result.append(line); + } + + if (!_keepalive) { + this.closeConnection(); + } + + return result.toString(); + } catch (IOException ioex) { + this.closeConnection(); + throw ioex; + } + } + + /** + * @throws Throwable + */ + protected void finalize() throws Throwable { + closeConnection(); + } + + private static final int defaultByteBufferSize = 8192; + + private String readLine(InputStream input, String charset) throws IOException { + if (_readBbuffer == null) { + _readBbuffer = new byte[defaultByteBufferSize]; + } + int next; + int count = 0; + while (true) { + next = input.read(); + if (next < 0 || next == '\n') { + break; + } + if (next != '\r') { + _readBbuffer[count++] = (byte) next; + } + if (count >= _readBbuffer.length) { + throw new IOException("HTTP Line too long, more than:" + _readBbuffer.length); + } + } + return new String(_readBbuffer, 0, count, charset); + } + + } //<-end HttpClient + + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/logger/CoeLogger.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/logger/CoeLogger.java new file mode 100644 index 00000000..16263f90 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/logger/CoeLogger.java @@ -0,0 +1,44 @@ +package com.actionsoft.apps.coe.pal.system.logger; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.lifecycle.api.AppsAPIManager; +import com.actionsoft.apps.lifecycle.log.AppsLogger; +import com.actionsoft.apps.resource.AppContext; + +public class CoeLogger { + protected static final AppContext APP = AppsAPIManager.getInstance().getAppContext(CoEConstant.APP_ID); + /**coe输出info日志 + * @param msg + */ + public static void info(String msg){ + AppsLogger.info(APP, msg); + } + /**coe输出warn日志 + * @param msg + */ + public static void warn(String msg){ + AppsLogger.warn(APP, msg); + } + /**coe输出warn日志 + * @param msg 消息 + * @param solution 解决方案 + */ + public static void warn(String msg,String solution){ + AppsLogger.warn(APP, msg,solution); + } + /**coe输出err日志 + * @param msg + */ + public static void err(String msg){ + AppsLogger.err(APP, msg); + } + + /**coe输出err日志 + * @param msg + * @param solution 解决方案 + */ + public static void err(String msg,String solution){ + AppsLogger.err(APP, msg, solution); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/pagination/CoEPaginationUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/pagination/CoEPaginationUtil.java new file mode 100644 index 00000000..ebc9a851 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/pagination/CoEPaginationUtil.java @@ -0,0 +1,144 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.system.pagination; + +public class CoEPaginationUtil { + + /** + * + * @param @param page 页数 + * @param @param listCount 总条数 + * @param @param pageList 每页显示个数 + * @param @return + * @return String + * @throws + */ + public static String getPaginationHtml(int page, int listCount, int pageList) { + return getPaginationHtml(page, listCount, pageList, false, false); + } + + /** + * + * @param @param page 页数 + * @param @param listCount 总条数 + * @param @param pageList 每页显示个数 + * @param @param hasPageList 是否显示“显示个数” + * @param @param hasPageInfo 是否显示“条目信息” + * @param @return + * @return String + * @throws + */ + public static String getPaginationHtml(int page, int listCount, int pageList, boolean hasPageList, boolean hasPageInfo) { + int pageCount = (listCount + pageList - 1) / pageList; + if (page > pageCount) { + throw new RuntimeException(""); + } + int startNum = (pageList * (page - 1)) - 1; + int endNum = pageList * page; + StringBuffer html = new StringBuffer(); + html.append("").append("\n"); + return html.toString(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/property/CoePropertyUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/property/CoePropertyUtil.java new file mode 100644 index 00000000..5b990cb0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/property/CoePropertyUtil.java @@ -0,0 +1,182 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.system.property; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.Reader; +import java.sql.Clob; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.exception.AWSDataAccessException; + +public class CoePropertyUtil { + + /** + * 创建或者更新值 + * + * @param key + * @param value + * @return + */ + public static boolean createProperty(String key, String value) { + boolean isOK = false; + if (getPropertyValue(key) == null) { + int r = DBSql.update("insert into APP_ACT_COE_PROP (propertykey,PROPERTYVALUE) values (?,?)", new Object[] { key, value }); + isOK = r > 0; + } else { + int r = DBSql.update("update APP_ACT_COE_PROP set PROPERTYVALUE=? where propertykey=?", new Object[] { value, key }); + isOK = r > 0; + } + + return isOK; + } + + public static boolean batchInsert(Map map) { + Connection conn = DBSql.open(); + PreparedStatement prest = null; + try { + conn.setAutoCommit(false); + String sql = "INSERT INTO APP_ACT_COE_PROP (PROPERTYKEY,PROPERTYVALUE) VALUES (?,?)"; + prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + for (Entry entry : map.entrySet()) { + prest.setString(1, entry.getKey()); + prest.setString(2, entry.getValue().toString()); + prest.addBatch(); + } + prest.executeBatch(); + conn.commit(); + return true; + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, prest, null); + } + return false; + } + + /** + * 获得值 + * + * @param key + * @return + */ + public static String getPropertyValue(String key) { + return getPropertysValue("PROPERTYKEY='" + key + "'").get(key); + } + + /** + * 根据key的前缀获得数据 + * + * @param prefix + * @return + */ + public static Map getPropertysValue(String where) { + return getPropertysValue2(where, null); + } + + public static Map getPropertysValue2(String where, String value) { + ConcurrentMap _list = new ConcurrentHashMap(); + String sql = "select * from APP_ACT_COE_PROP where " + where; + List> list = null; + try { + if (AWSServerConf.isPostgreSQL()) { + list = DBSql.query(sql, new RowMapper>() { + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map result = new HashMap(); + result.put("key", rs.getString("PROPERTYKEY")); + result.put("value", rs.getString("PROPERTYVALUE")); + return result; + } + }); + } else { + list = DBSql.query(sql, new RowMapper>() { + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map result = new HashMap(); + result.put("key", rs.getString("PROPERTYKEY")); + Clob clob = rs.getClob("PROPERTYVALUE"); + if (clob == null) { + result.put("value", ""); + return result; + } + String reString = ""; + Reader is = clob.getCharacterStream();// 得到流 + BufferedReader br = new BufferedReader(is); + String s; + try { + s = br.readLine(); + StringBuffer sb = new StringBuffer(); + while (s != null) {// 执行循环将字符串全部取出付值给 StringBuffer由StringBuffer转成STRING + sb.append(s); + s = br.readLine(); + } + reString = sb.toString(); + result.put("value", reString); + } catch (IOException e) { + e.printStackTrace(); + } + return result; + } + }); + } + } catch (AWSDataAccessException e) { + return _list;// 如果表不存在则抛异常到这里,直接返回一个空map + } + if (list != null && list.size() > 0) { + for (Map map : list) { + if (value == null || map.get("value").equals(value)) { + _list.put(map.get("key"), map.get("value")); + } + } + } + return _list; + } + + /** + * 删除 + * + * @param key + */ + public static void deleteProperty(String key) { + String sql = "delete from APP_ACT_COE_PROP where propertykey = '" + key + "'"; + DBSql.update(sql); + } + + public static void clearLeanRecount() { + String sql = "delete from APP_ACT_COE_PROP where propertykey like 'leanReCount%'"; + DBSql.update(sql); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/util/DBIndex.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/util/DBIndex.java new file mode 100644 index 00000000..994add58 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/util/DBIndex.java @@ -0,0 +1,167 @@ +package com.actionsoft.apps.coe.pal.system.util; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +/** + * + * @author zhouxuan + *@deprecated 该类未被使用,且存在sql注入问题 + */ +public class DBIndex { + /** + * 创建索引 + * @param dbType 数据库类型 MYSQL DB2 ORACLE OSCAR SQLSERVER SYBASE + * @param indexType INDEX 普通索引 UNIQUE 不重复索引 + * @param conn 数据库连接 + * @param indexName 索引名称 + * @param tableName 表名 + * @param fieldName 字段名 + * @return 是否成功 + * @throws SQLException + */ + public static boolean createIndex(String dbType,String indexType,Connection conn,String indexName,String tableName,String fieldName) throws SQLException{ + if(dbType.equals("MYSQL")){ + createMYSQLIndex(indexType, conn, indexName, tableName, fieldName); + }else if(dbType.equals("DB2")){ + createDB2Index(indexType, conn, indexName, tableName, fieldName); + }else if(dbType.equals("ORACLE")){ + createORACLEIndex(indexType, conn, indexName, tableName, fieldName); + }else if(dbType.equals("OSCAR")){ + createOSCARIndex(indexType, conn, indexName, tableName, fieldName); + }else if(dbType.equals("SQLSERVER")){ + createSQLSERVERIndex(indexType, conn, indexName, tableName, fieldName); + }else if(dbType.equals("SYBASE")){ + createSYBASEIndex(indexType, conn, indexName, tableName, fieldName); + } + return true; + } + public static boolean dropIndex(String dbType,Connection conn,String indexName,String tableName,String fieldName) throws SQLException{ + if(dbType.equals("MYSQL")){ + dropMYSQLIndex(conn, indexName, tableName, fieldName); + }else if(dbType.equals("DB2")){ + dropDB2Index(conn, indexName, tableName, fieldName); + }else if(dbType.equals("ORACLE")){ + dropORACLEIndex(conn, indexName, tableName, fieldName); + }else if(dbType.equals("OSCAR")){ + dropOSCARIndex(conn, indexName, tableName, fieldName); + }else if(dbType.equals("SQLSERVER")){ + dropSQLSERVERIndex(conn, indexName, tableName, fieldName); + }else if(dbType.equals("SYBASE")){ + dropSYBASEIndex(conn, indexName, tableName, fieldName); + } + return true; + } + private static boolean createMYSQLIndex(String indexType,Connection conn,String indexName,String tableName,String fieldName) throws SQLException{ + StringBuffer sql = new StringBuffer(); + if (indexType.equals("INDEX")) { + sql.append("CREATE INDEX ").append(indexName).append(" ON ").append(tableName).append("(").append(fieldName).append(")"); + } else if (indexType.equals("UNIQUE")) { + sql.append("CREATE UNIQUE INDEX ").append(indexName).append(" ON ").append(tableName).append("(").append(fieldName).append(")"); + } + return execSQL(conn, sql.toString()); + } + private static boolean createDB2Index(String indexType,Connection conn,String indexName,String tableName,String fieldName)throws SQLException{ + StringBuffer sql = new StringBuffer(); + if (indexType.equals("INDEX")) { + sql.append("CREATE INDEX ").append(indexName).append(" ON ").append(tableName).append("(").append(fieldName).append(")"); + } else if (indexType.equals("UNIQUE")) { + sql.append("CREATE UNIQUE INDEX ").append(indexName).append(" ON ").append(tableName).append("(").append(fieldName).append(")"); + } + return execSQL(conn, sql.toString()); + } + private static boolean createORACLEIndex(String indexType,Connection conn,String indexName,String tableName,String fieldName)throws SQLException{ + StringBuffer sql = new StringBuffer(); + if (indexType.equals("INDEX")) { + sql.append("CREATE INDEX ").append(indexName).append(" ON ").append(tableName).append("(").append(fieldName).append(")"); + } else if (indexType.equals("UNIQUE")) { + sql.append("CREATE UNIQUE INDEX ").append(indexName).append(" ON ").append(tableName).append("(").append(fieldName).append(")"); + } + return execSQL(conn, sql.toString()); + } + private static boolean createOSCARIndex(String indexType,Connection conn,String indexName,String tableName,String fieldName)throws SQLException{ + StringBuffer sql = new StringBuffer(); + if (indexType.equals("INDEX")) { + sql.append("CREATE INDEX ").append(indexName).append(" ON ").append(tableName).append("(").append(fieldName).append(")"); + } else if (indexType.equals("UNIQUE")) { + sql.append("CREATE UNIQUE INDEX ").append(indexName).append(" ON ").append(tableName).append("(").append(fieldName).append(")"); + } + return execSQL(conn, sql.toString()); + } + private static boolean createSQLSERVERIndex(String indexType,Connection conn,String indexName,String tableName,String fieldName)throws SQLException{ + StringBuffer sql = new StringBuffer(); + if (indexType.equals("INDEX")) { + sql.append("CREATE INDEX ").append(indexName).append(" ON ").append(tableName).append("(").append(fieldName).append(")"); + } else if (indexType.equals("UNIQUE")) { + sql.append("CREATE UNIQUE INDEX ").append(indexName).append(" ON ").append(tableName).append("(").append(fieldName).append(")"); + } + return execSQL(conn, sql.toString()); + } + private static boolean createSYBASEIndex(String indexType,Connection conn,String indexName,String tableName,String fieldName)throws SQLException{ + StringBuffer sql = new StringBuffer(); + if (indexType.equals("INDEX")) { + sql.append("CREATE INDEX ").append(indexName).append(" ON ").append(tableName).append("(").append(fieldName).append(")"); + } else if (indexType.equals("UNIQUE")) { + sql.append("CREATE UNIQUE INDEX ").append(indexName).append(" ON ").append(tableName).append("(").append(fieldName).append(")"); + } + return execSQL(conn, sql.toString()); + } + private static boolean execSQL(Connection conn,String sql) throws SQLException{ + // 该类未使用,该方法存在sql注入问题,注释掉 + return false; + /* + PreparedStatement ps = null; + try { + // 1.打开连接 + conn.setAutoCommit(false);// 更改JDBC事务的默认提交方式 + ps = conn.prepareStatement(sql.toString()); + if (ps == null) { + return false; + } + int count= ps.executeUpdate(); + conn.commit();//提交JDBC事务 + conn.setAutoCommit(true);// 恢复JDBC事务的默认提交方式 + return true; + }catch (Exception e) { + conn.rollback();//回滚JDBC事务 + return false; + } finally { + if (ps != null) { + ps.close(); + } + ps=null; + } + */ + } + private static boolean dropMYSQLIndex(Connection conn,String indexName,String tableName,String fieldName) throws SQLException{ + StringBuffer sql = new StringBuffer(); + sql.append("ALTER TABLE "+tableName+" drop index ").append(indexName); + return execSQL(conn, sql.toString()); + } + private static boolean dropDB2Index(Connection conn,String indexName,String tableName,String fieldName)throws SQLException{ + StringBuffer sql = new StringBuffer(); + sql.append("drop index ").append(indexName); + return execSQL(conn, sql.toString()); + } + private static boolean dropORACLEIndex(Connection conn,String indexName,String tableName,String fieldName)throws SQLException{ + StringBuffer sql = new StringBuffer(); + sql.append("drop index ").append(indexName); + return execSQL(conn, sql.toString()); + } + private static boolean dropOSCARIndex(Connection conn,String indexName,String tableName,String fieldName)throws SQLException{ + StringBuffer sql = new StringBuffer(); + sql.append("drop index ").append(indexName); + return execSQL(conn, sql.toString()); + } + private static boolean dropSQLSERVERIndex(Connection conn,String indexName,String tableName,String fieldName)throws SQLException{ + StringBuffer sql = new StringBuffer(); + sql.append("drop index ").append(tableName).append(".").append(indexName); + return execSQL(conn, sql.toString()); + } + private static boolean dropSYBASEIndex(Connection conn,String indexName,String tableName,String fieldName)throws SQLException{ + StringBuffer sql = new StringBuffer(); + sql.append("drop index ").append(tableName).append(".").append(indexName); + return execSQL(conn, sql.toString()); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/util/DateUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/util/DateUtil.java new file mode 100644 index 00000000..1e5d10a7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/util/DateUtil.java @@ -0,0 +1,169 @@ +package com.actionsoft.apps.coe.pal.system.util; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +/** + * 时间处理工具 + * + * @author 周璇 wing - V 2.0 + * + */ +public final class DateUtil { + // 日期操作 h.househtime >= convert(varchar(20),getdate()-"+(date-1)+",111) + // yyyy MM dd HH mm ss ms + public SimpleDateFormat sdf; + private Calendar cal; + public DateUtil(){ + sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } + public DateUtil(String dateformat){ + sdf = new SimpleDateFormat(dateformat); + } + /** + * 根据间隔时间获得日期 + * + * @param day 间隔时间 如 2(获得后天的日期) + * @return date + */ + public Date getDate(int day) { + cal = Calendar.getInstance(); + cal.add(cal.DAY_OF_YEAR, day); + return cal.getTime(); + } + + /** + * 获得已经格式化的当前日期 + * + * @return string date + */ + public String getDate() { + cal = Calendar.getInstance(); + cal.add(cal.DAY_OF_YEAR, 0); + return formatString(cal.getTime()); + } + + /** + * 格式化时间 + * + * @param date 需要格式化的日期对象 + * @return string date + */ + public String formatString(Date date) { + return sdf.format(date); + } + + /** + * 格式化时间 + * + * @param date 需要格式化的String日期 + * @return string date + */ + public String formatString(String date) { + date = replace(date); + return sdf.format(new Date(date)); + } + /** + * 将String类型的时间转换为Date类型 + * @param date 时间 + * @return Date时间 + */ + public Date formatDate(String date) { + date = replace(date); + try { + return sdf.parse(sdf.format(new Date(date))); + } catch (ParseException e) { + e.printStackTrace(); + return null; + } + } + /*********************** + * 日差 如果第一个时间:当前时间 第二个时间:昨天 |得1 + * @param sFrom + * @param sTo + * @return + */ + public static int getDiffOfDay(Date sFrom, Date sTo) { + int nDay = 0; + nDay = (int)((sFrom.getTime() - sTo.getTime()) / 60 / 1000/60/24); + return nDay; + } + /** + * 时差 + * @param sFrom + * @param sTo + * @return + */ + public static int getDiffOfHour(Date sFrom, Date sTo) { + int nDay = 0; + nDay = (int)((sFrom.getTime() - sTo.getTime()) / 60 / 1000/60); + return nDay; + } + + /**************** + *秒差 + *sFrom: + *sTo: + */ + public static int getDiffOfSecond(Date sFrom, Date sTo) { + int nDay = 0; + nDay = (int)((sFrom.getTime() - sTo.getTime()) / 1000); + return nDay; + } + /** + * 添加 count 小时 + * @param d + * @param count 添加天数 + * @return + */ + public static Date addHour(Date d,int count) + { + Calendar ins = Calendar.getInstance(); + ins.setTime(d); + ins.add(Calendar.HOUR, count); + return ins.getTime(); + } + /** + * 添加 count月 + * @param d + * @param count 添加月 + * @return + */ + public static Date addMonth(Date d,int count) + { + Calendar ins = Calendar.getInstance(); + ins.setTime(d); + ins.add(Calendar.MONTH, count); + return ins.getTime(); + } + /** + * 添加 count秒 + * @param d + * @param count 添加秒 + * @return + */ + public static Date addSecond(Date d,int count) + { + Calendar ins = Calendar.getInstance(); + ins.setTime(d); + ins.add(Calendar.SECOND, count); + return ins.getTime(); + } + private static String replace(String date) { + date = date.replace("-", "/"); + date = date.replace("年", "/"); + date = date.replace("月", "/"); + date = date.replace("日", ""); + return date; + } + /* + public static void main(String[] args) { + String time="2013-6-14 07:11:11"; + Date date = new DateUtil().formatDate(time); + //初始化到现在相差多少小时 + int sc=Math.abs(DateUtil.getDiffOfHour(date,new Date())); +// System.out.println(sc); + } + */ +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/util/StringUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/util/StringUtil.java new file mode 100644 index 00000000..706a25bb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/util/StringUtil.java @@ -0,0 +1,146 @@ +package com.actionsoft.apps.coe.pal.system.util; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.actionsoft.bpms.util.UtilString; + +public class StringUtil { + public static final String[] placSrc = { "'", "_", "%", "-" }; + public static final String[] placTar = { "''", "\\_", "\\%", "\\-" }; + public static final String[] placTarMySql = { "''", "\\\\_", "\\\\%", "\\\\-" }; + + /** + * @param cuke 过长的字符串 + * @param length 截取原字符串多少个 + * @return Examples: StringUtil.cutString("ABCDEFG", 3) returns "ABC.." + */ + public static String cutString(String cuke, int length) { + if (cuke == null) { + return ""; + } + if (cuke.length() > length && length > 2) { + return cuke.substring(0, length) + ".."; + } else { + return cuke; + } + + } + + /** + * @param cuke + * @param length + * @return Examples: StringUtil.cutString("ABCDEFG", 3) returns "..EFG" + */ + public static String cutStringFromRight(String cuke, int length) { + if (cuke == null) { + return ""; + } + if (cuke.length() > length && length > 2) { + return ".." + cuke.substring(cuke.length() - length); + } else { + return cuke; + } + + } + + /** + * @param cuke + * @param leftLength 从字符串前面截取字符个数 + * @param rightLength 从字符串后面解气字符个数 + * @return Examples: StringUtil.cutString("ABCDEFG", 3,2) returns "AB..EFG" + */ + public static String cutString(String cuke, int leftLength, int rightLength) { + if (cuke == null) { + return ""; + } + if (leftLength < 0) { + leftLength = 0; + } + if (rightLength < 0) { + rightLength = 0; + } + if (cuke.length() > leftLength + rightLength && leftLength > 0 && rightLength > 0) { + return cuke.substring(0, leftLength) + ".." + cuke.substring(cuke.length() - rightLength); + } else { + return cuke; + } + } + + /** + * 过滤掉这些字符 \n 回车( ) \t 水平制表符( ) \s 空格(\u0008) \r 换行( ) + * + * @param str + * @return + */ + public static String replaceBlank(String str) { + String dest = ""; + if (str != null) { + Pattern p = Pattern.compile("\\s*|\t|\r|\n"); + Matcher m = p.matcher(str); + dest = m.replaceAll(""); + } + return dest; + } + + /** + * 替换特殊字符 百分号、单引号、下划线 + * + * @param str + * @param isMysql : true:mysql,false:其他数据库 + * @return + */ + public static String replaceSqlStr(String str, boolean isMysql) { + + String sent = ""; + sent = str; + + if (isMysql) { + sent = replaceSqlStr(str, placTarMySql); + } else { + sent = replaceSqlStr(str, placTar); + } + return sent; + } + + /** + * 替换特殊字符 百分号、单引号、下划线 + * + * @param str + * @return + */ + private static String replaceSqlStr(String str, String[] array) { + + String sent = ""; + sent = str; + for (int i = 0, size = placSrc.length; i < size; i++) { + sent = sent.replace(placSrc[i], array[i]); + } + return sent; + } + + /** + * 字符串是否包含特殊字符 + * + * @param state + * @return + */ + public static boolean containSpecialChar(String state) { + boolean right = false; + for (int i = 0, size = placSrc.length; i < size; i++) { + if (state.indexOf(placSrc[i]) != -1) { + right = true; + break; + } + } + return right; + } + static public String convertSign(String value) { + if (value == null) + return null; + if (value.indexOf('\'') > -1) { + value = new UtilString(value).replace("'", "''"); + } + return value; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/util/XMLUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/util/XMLUtil.java new file mode 100644 index 00000000..829868c2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/system/util/XMLUtil.java @@ -0,0 +1,109 @@ +package com.actionsoft.apps.coe.pal.system.util; + +import java.io.*; +import java.net.URL; +import java.net.URLDecoder; + +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.SAXReader; +import org.dom4j.io.XMLWriter; + +/** + * XML读取帮助类 + * @author zhouxuan + */ +public class XMLUtil { + public static Document readXML(String fileName) { + if (fileName == null) { + return null; + } + SAXReader reader = new SAXReader(); + Document document = null; + try { + URL resource = Thread.currentThread().getContextClassLoader() + .getResource(fileName); + String filePath = (resource == null) ? fileName : URLDecoder + .decode(resource.getFile()); + int jarIndicator = filePath.indexOf('!'); + if (jarIndicator > 0) { + filePath = filePath.substring(5, filePath.indexOf('!')); + } + File f = new File(filePath); + InputStream in = new FileInputStream(f); + if (in != null) { + document = reader.read(in); + } else { + File file = new File(fileName); + document = reader.read(file); + } + + return document; + } catch (DocumentException e) { + File fil = new File(fileName); + try { + document = reader.read(fil); + } catch (Exception e1) { + + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static Document readXMLFromInputStream(InputStream in) { + Document document = null; + SAXReader reader = new SAXReader(); + + try { + document = reader.read(in); + } catch (DocumentException e) { + e.printStackTrace(); + } + + return document; + } + + public static void writeXml(Document document, String filePath) { + File xmlFile = new File(filePath); + XMLWriter writer = null; + try { + if (xmlFile.exists()) + xmlFile.delete(); + writer = new XMLWriter(new FileOutputStream(xmlFile), OutputFormat.createPrettyPrint()); + writer.write(document); + writer.close(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (writer != null) { + try { + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + public static Document createDocument(String rootName, String attributeName, String attributeVaule) { + Document document = null; + try { + document = DocumentHelper.createDocument(); + Element root = document.addElement(rootName); + root.addAttribute(attributeName, attributeVaule); + } catch (Exception e) { + throw new RuntimeException(e + "->创建的【" + rootName + "】根节点出现错误"); + } + return document; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/conf/LanguageUserAcConf.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/conf/LanguageUserAcConf.java new file mode 100644 index 00000000..7ee602ee --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/conf/LanguageUserAcConf.java @@ -0,0 +1,32 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.conf; + +public class LanguageUserAcConf { + /** + * is manager + */ + public static final int LANGUAGE_USER_AC_TYPE_1 = 0; + /** + * is create project + */ + public static final int LANGUAGE_USER_AC_TYPE_2 = 1; + /** + * 流程规划权限类型 + */ + public static final int LANGUAGE_USER_AC_TYPE_3 = 2; +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/CoeUser.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/CoeUser.java new file mode 100644 index 00000000..ce0fd616 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/CoeUser.java @@ -0,0 +1,507 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.bpms.commons.database.MapResultSetExtractor; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; +import com.actionsoft.bpms.commons.pagination.SQLPagination; +import com.actionsoft.bpms.commons.security.mgtgrade.util.GradeSecurityUtil; +import com.actionsoft.bpms.org.cache.UserCache; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.team.user.conf.LanguageUserAcConf; +import com.actionsoft.apps.coe.pal.team.user.model.CoeUserModel; +import com.actionsoft.exception.AWSDataAccessException; +import com.actionsoft.sdk.local.SDK; +import org.apache.commons.lang3.StringUtils; +import xdbc.database.sql.SQL; + +public class CoeUser extends DaoObject { + public CoeUser() { + // super.setEntityName(CoeUserModel.DATABASE_ENTITY); + } + + public PlatformMetaModelBean getInstanceById(String id) { + CoeUserModel model = new CoeUserModel(); + try { + String sql = "SELECT cu." + model.FIELD_ID + ", cu." + model.FIELD_USER_ID + ", o." + model.FIELD_USER_NAME + ", cu." + model.FIELD_IS_ADMIN + " FROM " + CoeUserModel.DATABASE_ENTITY + " cu, ORGUSER o WHERE cu.USERID = o.USERID AND cu." + model.FIELD_ID + "=?"; + return DBSql.getObject(sql, new RowMapper() { + @Override + public CoeUserModel mapRow(ResultSet rs, int arg1) throws SQLException { + CoeUserModel model = new CoeUserModel(); + model.setId(rs.getString(model.FIELD_ID)); + model.setIsAdmin(rs.getInt(model.FIELD_IS_ADMIN)); + model.setUserId(rs.getString(model.FIELD_USER_ID) + "<" + rs.getString(model.FIELD_USER_NAME) + ">"); + return model; + } + }, id); + } catch (Exception sqle) { + sqle.printStackTrace(); + } + return model; + } + + /** + * 根据用户Id获取用户信息 + * + * @param userId + * @return + */ + public PlatformMetaModelBean getInstanceByUserId(String userId) { + CoeUserModel model = new CoeUserModel(); + try { + String sql = "SELECT cu." + model.FIELD_ID + ", cu." + model.FIELD_USER_ID + ", o." + model.FIELD_USER_NAME + ", cu." + model.FIELD_IS_ADMIN + " FROM " + CoeUserModel.DATABASE_ENTITY + " cu, ORGUSER o WHERE cu.USERID = o.USERID AND cu." + model.FIELD_USER_ID + "=?"; + return DBSql.getObject(sql, new RowMapper() { + @Override + public CoeUserModel mapRow(ResultSet rs, int arg1) throws SQLException { + CoeUserModel model = new CoeUserModel(); + model.setId(rs.getString(model.FIELD_ID)); + model.setIsAdmin(rs.getInt(model.FIELD_IS_ADMIN)); + model.setUserId(rs.getString(model.FIELD_USER_ID)); + model.setUserName(rs.getString(model.FIELD_USER_NAME)); + return model; + } + }, userId); + } catch (Exception sqle) { + sqle.printStackTrace(); + } + return model; + } + + public int create(PlatformMetaModelBean obj) throws SQLException { + StringBuffer sql = new StringBuffer(); + CoeUserModel model = (CoeUserModel) obj; + model.setId(UUIDGener.getUUID()); + sql.append("insert into "); + sql.append(entityName()); + sql.append(" ("); + sql.append(model.FIELD_ID).append(","); + sql.append(model.FIELD_USER_ID).append(","); + sql.append(model.FIELD_IS_ADMIN); + sql.append(") values('"); + sql.append(model.getId()).append("',"); + sql.append("'").append(model.getUserId()).append("'").append(","); + sql.append(model.getIsAdmin()); + sql.append(")"); + int r = DBSql.update(sql.toString()); + return r; + } + + public Map getInstance(String sortname) { + return getInstance(sortname, "ASC"); + } + + public Map getInstance(String sortname, String sorttype) { + StringBuilder sql = new StringBuilder(); + if ((sorttype == null) || sorttype.equals("")) { + sorttype = "DESC"; + } + StringBuilder sqlbufer = new StringBuilder(); + sqlbufer.append(sql.append("select * from ").append(CoeUserModel.DATABASE_ENTITY).toString()); + if ((sortname != null) && (!sortname.equals(""))) { + sqlbufer.append(" ORDER BY ").append(sortname).append(" ").append(sorttype); + } + try { + return DBSql.query(sqlbufer.toString(), new MapResultSetExtractor(new RowMapper() { + + public CoeUserModel mapRow(ResultSet rs, int rowNum) throws SQLException { + return (CoeUserModel) record2Model(rs); + } + })); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return new HashMap(); + } + + public Map getInstanceWithUserName(String sortname) { + return getInstanceWithUserName(sortname, "ASC"); + } + + public Map getInstanceWithUserName(String sortname, String sorttype) { + StringBuilder sql = new StringBuilder(); + if ((sorttype == null) || sorttype.equals("")) { + sorttype = "DESC"; + } + StringBuilder sqlbufer = new StringBuilder(); + sqlbufer.append(sql.append("SELECT cu." + CoeUserModel.FIELD_ID + ", cu." + CoeUserModel.FIELD_USER_ID + ", o." + CoeUserModel.FIELD_USER_NAME + ", cu." + CoeUserModel.FIELD_IS_ADMIN + " FROM " + CoeUserModel.DATABASE_ENTITY + " cu, ORGUSER o WHERE cu.USERID = o.USERID and o.CLOSED = 0 ").toString()); + if ((sortname != null) && (!sortname.equals(""))) { + sqlbufer.append(" ORDER BY cu.").append(sortname).append(" ").append(sorttype); + } + try { + return DBSql.query(sqlbufer.toString(), new MapResultSetExtractor(new RowMapper() { + public CoeUserModel mapRow(ResultSet rs, int rowNum) throws SQLException { + CoeUserModel model = new CoeUserModel(); + model.setId(rs.getString(model.FIELD_ID)); + model.setIsAdmin(rs.getInt(model.FIELD_IS_ADMIN)); + model.setUserId(rs.getString(model.FIELD_USER_ID)); + model.setUserName(rs.getString(model.FIELD_USER_NAME)); + return model; + } + })); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return new HashMap(); + } + + public PlatformMetaModelBean record2Model(ResultSet rs) { + CoeUserModel model = new CoeUserModel(); + try { + model.setId(rs.getString(model.FIELD_ID)); + model.setUserId(rs.getString(model.FIELD_USER_ID)); + model.setIsAdmin(rs.getInt(model.FIELD_IS_ADMIN)); + } catch (SQLException e) { + e.printStackTrace(); + } + return model; + } + + @Override + public int update(PlatformMetaModelBean obj) { + StringBuffer sql = new StringBuffer(); + CoeUserModel model = (CoeUserModel) obj; + sql.append("UPDATE ").append(entityName()); + sql.append(" set ").append(model.FIELD_IS_ADMIN).append("=").append(model.getIsAdmin()).append(","); + sql.append(" ").append(model.FIELD_USER_ID).append("=").append("'").append(model.getUserId()).append("'"); + sql.append(" where ").append(model.FIELD_ID).append("='").append(model.getId()).append("'"); + int r = DBSql.update(sql.toString()); + return r; + } + + /** + * is ac + * + * @param user + * @return + */ + public boolean isAc(UserContext user, int acType) { + boolean isflag = false; + if (GradeSecurityUtil.isSuperMaster(user.getUID())) {// master + isflag = true; + } + Map models = getInstance("ID"); + if (models != null) { + for (int i = 0, size = models.size(); i < size; i++) { + CoeUserModel model = (CoeUserModel) models.get(new Integer(i)); + if (model != null) { + String _userId = SDK.getORGAPI().getUserAliasNames(user.getUID()); + UtilString users = new UtilString(model.getUserId()); + List _user = users.split(" "); + for (int j = 0, size1 = _user.size(); j < size1; j++) { + if (_user.get(j).toString().trim().length() == 0) { + continue; + } + if (_user.get(j).toString().equals(_userId)) { + if (acType == LanguageUserAcConf.LANGUAGE_USER_AC_TYPE_1 && model.getIsAdmin() == 1) { + isflag = true; + break; + } + } + } + } + } + } + return isflag; + } + + public String findUserNameById(String userId) { + String sliasName = " USERNAME "; + StringBuffer sql = new StringBuffer(); + sql.append("select ").append(CoeUserModel.FIELD_USER_ID).append(sliasName).append(" from "); + sql.append(entityName()); + sql.append(" where ").append(CoeUserModel.FIELD_ID).append("=?"); + + return DBSql.getString(sql.toString(), new Object[] { userId }); + } + + @Override + public int insert(PlatformMetaModelBean daoObj) { + return 0; + } + + @Override + public String entityName() { + return CoeUserModel.DATABASE_ENTITY; + } + + @Override + public RowMapper rowMapper() { + return null; + } + + public boolean validateIsAccessCOE(String userid) { + String sql = "select u1.USERID from APP_ACT_COE_USER u1,ORGUSER u2 where u1.USERID=? and u1.USERID=u2.USERID and u2.CLOSED=0"; + String id = DBSql.getObject(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }, userid); + if (id != null && !"".equals(id)) { + return true; + } + return false; + } + + /** + * 判断是否为CoE管理员 + * + * @param userid + * @return + * @author zhangming + */ + public boolean isCoEManager(String userid) { + String sql = "SELECT ISADMIN FROM APP_ACT_COE_USER WHERE USERID=?"; + String isAdmin = DBSql.getObject(sql, new RowMapper() { + @Override + public String mapRow(ResultSet rs, int arg1) throws SQLException { + return rs.getString(1); + } + }, new Object[] { userid }); + if (isAdmin != null && "1".equals(isAdmin)) { + return true; + } + return false; + } + + public boolean isExistTable() { + return true;// APP_ACT_COE_USER是初始化表,不再校验,pg数据库校验此方法有问题 +// Connection conn = DBSql.open(); +// DatabaseMetaData dbmd = null; +// ResultSet rs = null; +// try { +// dbmd = conn.getMetaData(); +// rs = dbmd.getTables(null, null, "APP_ACT_COE_USER", new String[] { "TABLE" }); +// if (rs != null && rs.next()) { +// return true; +// } +// } catch (Exception ex) { +// ex.printStackTrace(); +// } finally { +// DBSql.close(conn); +// } +// return false; + } + + public Map userCheckRepeat(List list) { + Map rsMap = new HashMap(); + List result = new ArrayList(); + List newList = new ArrayList(); + String sql = "SELECT * FROM APP_ACT_COE_USER"; + List l = DBSql.query(sql, new RowMapper() { + @Override + public CoeUserModel mapRow(ResultSet rs, int arg1) throws SQLException { + CoeUserModel model = new CoeUserModel(); + model.setId(rs.getString("ID")); + model.setUserId(rs.getString("USERID")); + return model; + } + }); + if (l.size() > 0) { + for (int i = 0, size = list.size(); i < size; i++) { + boolean repeat = false; + for (CoeUserModel model : l) { + if (model.getUserId().equals(list.get(i))) { + result.add(model); + repeat = true; + break; + } + } + if (!repeat) { + newList.add(list.get(i)); + } + } + } + rsMap.put("repeatModelList", result); + rsMap.put("newList", newList); + return rsMap; + } + + public void createUser(List list, String isAdmin) { + for (int i = 0, size = list.size(); i < size; i++) { + StringBuffer sql = new StringBuffer(); + sql.append("insert into "); + sql.append(CoeUserModel.DATABASE_ENTITY); + sql.append(" ("); + sql.append(CoeUserModel.FIELD_ID).append(","); + sql.append(CoeUserModel.FIELD_USER_ID).append(","); + sql.append(CoeUserModel.FIELD_IS_ADMIN); + sql.append(") values('"); + sql.append(UUIDGener.getUUID()).append("',"); + sql.append("'").append(list.get(i)).append("'").append(","); + sql.append(isAdmin); + sql.append(")"); + int r = DBSql.update(sql.toString()); + } + } + + public String getUserName(String userId) { + UserModel user = UserCache.getModel(userId); + if (user != null) { + return user.getUserName(); + } else { + return null; + } + } + + /** + * 删除 + */ + public void deleteAll() { + String delSql = "delete from " + CoeUserModel.DATABASE_ENTITY; + DBSql.update(delSql); + } + + /** + * 删除指定用户 + * @param userIdList + */ + public void delete(List userIdList) throws SQLException{ + if (userIdList != null || userIdList.size() >= 0) { + List sqlParamList = new ArrayList<>(); + for (String userId : userIdList) { + sqlParamList.add("'" + userId + "'"); + } + String delSql = "delete from " + entityName() + " WHERE " + CoeUserModel.FIELD_USER_ID + " IN (" + StringUtils.join(sqlParamList, ",") + ")"; + DBSql.update(delSql); + } + } + + /** + * 批量插入 + * @param userIds 用户ids,逗号分隔 + * @param isAdmin 是否管理员 + */ + public boolean batchInsert(List userIds, boolean isAdmin) { + boolean completeSuccess = false; + int isMananger = isAdmin ? 1 : 0; + if (userIds != null && userIds.size() > 0) { + Connection conn = DBSql.open(); + PreparedStatement ps = null; + java.sql.ResultSet rset = null; + try { + conn.setAutoCommit(false); + String sql = new StringBuilder("INSERT INTO ").append(entityName()) + .append("(") + .append(CoeUserModel.FIELD_ID).append(",") + .append(CoeUserModel.FIELD_USER_ID).append(",") + .append(CoeUserModel.FIELD_IS_ADMIN) + .append(")") + .append(" VALUES (?,?,?)").toString(); + ps = conn.prepareStatement(sql); + for (String userId : userIds) { + ps.setString(1, UUIDGener.getUUID()); + ps.setString(2, userId); + ps.setInt(3, isMananger); + ps.addBatch(); + } + int[] results = ps.executeBatch(); + for (int i = 0; i < results.length; i++) { + if ((results[i] >= 0) || (results[i] == PreparedStatement.SUCCESS_NO_INFO)) { + completeSuccess = true; + } + } + if (completeSuccess) { + conn.commit(); + } else { + conn.rollback(); + PALRepositoryCache.getCache().reload(true); + } + } catch (SQLException e) { + try { + conn.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } finally { + DBSql.close(conn, ps, rset); + } + } + return completeSuccess; + } + + + + /** + * 获取PAL用户表所有数据,不与ORGUSER关联查询 + * @return + */ + public List getCoeUsers() { + String sql = "SELECT * FROM " + entityName(); + try { + return DBSql.query(sql, new Mapper()); + } catch (AWSDataAccessException e) { + e.printStackTrace(); + } + return new ArrayList(); + } + + private class Mapper implements RowMapper { + public CoeUserModel mapRow(ResultSet rset, int rowNum) throws SQLException { + CoeUserModel model = new CoeUserModel(); + try { + model.setId(rset.getString(model.FIELD_ID)); + model.setUserId(rset.getString(model.FIELD_USER_ID)); + model.setIsAdmin(rset.getInt(model.FIELD_IS_ADMIN)); + UserModel user = SDK.getORGAPI().getUser(model.getUserId()); + model.setUserName(user == null ? model.getUserId() : user.getUserName()); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } + + /** + * 根据用户Id集合获取相关用户信息(不关联ORGUSER) + * @param userIdList + * @return + */ + public List getCoeUsers(List userIdList) throws SQLException { + if (userIdList == null || userIdList.size() == 0) { + return new ArrayList<>(); + } + List sqlParamList = new ArrayList<>(); + for (String userId : userIdList) { + sqlParamList.add("'" + userId + "'"); + } + String sql = "SELECT * FROM " + entityName() + " WHERE " + CoeUserModel.FIELD_USER_ID + " IN (" + StringUtils.join(sqlParamList, ",") + ")"; + try { + return DBSql.query(sql, new Mapper()); + } catch (Exception sqle) { + sqle.printStackTrace(); + } + return new ArrayList<>(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/CoeUserDaoFactory.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/CoeUserDaoFactory.java new file mode 100644 index 00000000..d47f5e83 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/CoeUserDaoFactory.java @@ -0,0 +1,38 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.dao; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.portal.dao.CoENavButtonDao; +import com.actionsoft.bpms.commons.database.DaoFactory; +import com.actionsoft.bpms.server.conf.server.AWSServerConf; +import com.actionsoft.bpms.util.ClassReflect; +import com.actionsoft.exception.AWSException; + +public class CoeUserDaoFactory extends DaoFactory { + public static final String DAO_CLASSPATH = "com.actionsoft.apps.coe.pal.team.user.dao"; + + public static CoeUser createUser() { + try { + Class c = ClassReflect.forName(DAO_CLASSPATH + "." + AWSServerConf.getDatabaseProvider() + ".CoeUserAdapter", CoEConstant.APP_ID); + return (CoeUser) create(c); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + throw new AWSException(e); + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/db2/CoeUserAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/db2/CoeUserAdapter.java new file mode 100644 index 00000000..ad62d4e6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/db2/CoeUserAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.dao.db2; + +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUser; + +public class CoeUserAdapter extends CoeUser{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/informix/CoeUserAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/informix/CoeUserAdapter.java new file mode 100644 index 00000000..561c089a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/informix/CoeUserAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.dao.informix; + +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUser; + +public class CoeUserAdapter extends CoeUser{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/mysql/CoeUserAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/mysql/CoeUserAdapter.java new file mode 100644 index 00000000..9408b5a8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/mysql/CoeUserAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.dao.mysql; + +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUser; + +public class CoeUserAdapter extends CoeUser{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/oracle/CoeUserAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/oracle/CoeUserAdapter.java new file mode 100644 index 00000000..f14734b9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/oracle/CoeUserAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.dao.oracle; + +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUser; + +public class CoeUserAdapter extends CoeUser { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/oscar/CoeUserAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/oscar/CoeUserAdapter.java new file mode 100644 index 00000000..c086ee54 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/oscar/CoeUserAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.dao.oscar; + +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUser; + +public class CoeUserAdapter extends CoeUser{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/postgresql/CoeUserAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/postgresql/CoeUserAdapter.java new file mode 100644 index 00000000..97a032f7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/postgresql/CoeUserAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.dao.postgresql; + +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUser; + +public class CoeUserAdapter extends CoeUser{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/sqlserver/CoeUserAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/sqlserver/CoeUserAdapter.java new file mode 100644 index 00000000..e1a3487a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/sqlserver/CoeUserAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.dao.sqlserver; + +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUser; + +public class CoeUserAdapter extends CoeUser { + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/sybase/CoeUserAdapter.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/sybase/CoeUserAdapter.java new file mode 100644 index 00000000..9b647bd6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/dao/sybase/CoeUserAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.dao.sybase; + +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUser; + +public class CoeUserAdapter extends CoeUser{ + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/model/CoeUserModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/model/CoeUserModel.java new file mode 100644 index 00000000..0e1fa994 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/model/CoeUserModel.java @@ -0,0 +1,84 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.model; + +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; + +public class CoeUserModel extends PlatformMetaModelBean { + /** + * 2014-5-20 + */ + private static final long serialVersionUID = -284398061012044313L; + + public String getId() { + return _id; + } + + public void setId(String _id) { + this._id = _id; + } + + public String getUserId() { + return _user_id; + } + + public void setUserId(String _user_id) { + this._user_id = _user_id; + } + + public int getIsAdmin() { + return isAdmin; + } + + public void setIsAdmin(int isAdmin) { + this.isAdmin = isAdmin; + } + + public String getUserName() { + return _user_name; + } + + public void setUserName(String _user_name) { + this._user_name = _user_name; + } + + public static final String DATABASE_ENTITY = "APP_ACT_COE_USER"; + + public static final String FIELD_ID = "ID"; + public static final String FIELD_USER_ID = "USERID"; + public static final String FIELD_IS_ADMIN = "ISADMIN"; + public static final String FIELD_USER_NAME = "USERNAME"; + + private String _id; + private String _user_id = ""; + private String _user_name = ""; + private int isAdmin = 0; + private String userAccount = ""; + + public String getUserAccount() { + return userAccount; + } + + public void setUserAccount(String userAccount) { + this.userAccount = userAccount; + } + + public CoeUserModel() { + + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/util/CoEUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/util/CoEUtil.java new file mode 100644 index 00000000..a614be30 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/util/CoEUtil.java @@ -0,0 +1,36 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.util; + +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.sdk.local.SDK; + +public class CoEUtil { + + /** + * 获得用户头像路径 2011-4-28 + * + * @author LT + */ + public static String getPhotoUrl(String uid, String sessionId) { + try { + return SDK.getPortalAPI().getUserPhoto(UserContext.fromSessionId(sessionId), uid); + } catch (Exception e) { + return "";// session error + } + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/web/UserWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/web/UserWeb.java new file mode 100644 index 00000000..fff6fe4d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/team/user/web/UserWeb.java @@ -0,0 +1,694 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.team.user.web; + +import java.sql.SQLException; +import java.util.*; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.log.CoEOpLogAPI; +import com.actionsoft.apps.coe.pal.log.CoEOpLogConst; +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUser; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.bpms.commons.mvc.model.PlatformMetaModelBean; +import com.actionsoft.bpms.util.UUIDGener; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.commons.security.mgtgrade.util.GradeSecurityUtil; +import com.actionsoft.bpms.commons.session.cache.SessionCache; +import com.actionsoft.bpms.commons.session.model.SessionModel; +import com.actionsoft.bpms.org.cache.CompanyCache; +import com.actionsoft.bpms.org.cache.DepartmentCache; +import com.actionsoft.bpms.org.cache.UserCache; +import com.actionsoft.bpms.org.cache.UserMapCache; +import com.actionsoft.bpms.org.model.CompanyModel; +import com.actionsoft.bpms.org.model.DepartmentModel; +import com.actionsoft.bpms.org.model.TeamMemberModel; +import com.actionsoft.bpms.org.model.UserMapModel; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.org.util.SecurityUtil; +import com.actionsoft.bpms.server.Quota; +import com.actionsoft.bpms.server.SSOUtil; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.model.CoeProcessLevelAutoBean; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.ui.ContentPane; +import com.actionsoft.apps.coe.pal.team.user.dao.CoeUserDaoFactory; +import com.actionsoft.apps.coe.pal.team.user.model.CoeUserModel; +import com.actionsoft.i18n.I18nRes; +import com.actionsoft.sdk.local.SDK; + +public class UserWeb extends ActionWeb { + private UserContext _uc; + + public UserWeb(UserContext uc) { + super(uc); + _uc = uc; + } + + public UserWeb() { + } + + /** + * 获取用户管理 json数据 + * + * @param page + * @param row + * @return + */ + @Deprecated + public String getUserManagerJson(String page, String row) { + JSONObject json = new JSONObject(); + JSONArray jsonarray = new JSONArray(); + Map record = CoeUserDaoFactory.createUser().getInstance(CoeUserModel.FIELD_ID); + int size = 0; + if (record != null) { + size = record.size(); + for (int i = 0; i < size; i++) { + CoeUserModel userModel = (CoeUserModel) record.get(new Integer(i)); + String[] userNames = userModel.getUserId().split(" "); + StringBuffer username = new StringBuffer(); + for (int j = 0; j < userNames.length; j++) { + String waring = ""; + UserModel uModel = (UserModel) UserCache.getModel(SDK.getORGAPI().getUserId(userNames[j])); + + if (uModel == null || uModel.isClosed()) { + waring = ""; + waring += "" + userNames[j] + ""; + username.append(waring).append("  "); + } else { + username.append(userNames[j]).append("  "); + + } + + } + Map map = new HashMap(); + map.put("userid", userModel.getId()); + map.put("username", username.toString()); + map.put("isadmin", userModel.getIsAdmin()); + jsonarray.add(map); + } + } + json.put("total", new Integer(record == null ? 0 : size)); + json.put("rows", jsonarray); + return json.toString(); + } + + /** + * 获取组织人员 + * + * @param type + * @param parame1 + * @param parame2 + * @return + */ + public String getPersons(String type, String parame1, String parame2) { + String js = ""; + if (type.equals("")) { + js = "[{\"id\":\"AWS_NODE_RT_ID_Org\",\"text\":\"组织机构\",\"state\":\"closed\",\"attributes\":{\"requestType\":\"OrgRoot\",\"param1\":\"0\",\"param2\":\"\",\"param3\":\"\",\"leaf\":\"false\" }}]"; + } else { + String parentid = parame1; + String param2 = parame2; + String test = this.getOrgJson(type, parentid, param2); + js = test; + } + return js; + } + + /** + * 获取组织 + * + * @param requestType + * @param param1 + * @param param2 + * @return + */ + public String getOrgJson(String requestType, String param1, String param2) { + StringBuffer jsonStr = new StringBuffer("["); + if (requestType.equals("OrgRoot")) { + Map hCompanyList = new HashMap(); + List h = CompanyCache.getList(); + int size = h.size(); + for (int i = 0; i < size; i++) { + CompanyModel companyModel = h.get(i); + if (SecurityUtil.hasCompanySec(getContext(), companyModel.getId())) { + hCompanyList.put(new Integer(hCompanyList.size()), companyModel); + } + } + size = hCompanyList.size(); + for (int i = 0; hCompanyList != null && i < size; i++) { + CompanyModel companyModel = (CompanyModel) hCompanyList.get(new Integer(i)); + jsonStr.append(getCompanyJson(companyModel)).append(","); + } + } else if (requestType.equals("Company")) { + String companyId = param1; + boolean isSetSecurity = param2.equals("isSetSecurity"); + // 列出指定部门的下级列表 + List departmentList = DepartmentCache.getListOfCompany(companyId); + if (departmentList != null) { + int size = departmentList.size(); + for (int i = 0; i < size; i++) { + DepartmentModel model = (DepartmentModel) departmentList.get(new Integer(i)); + if (model != null && model.getParentDepartmentId().equals("0")) { + if (GradeSecurityUtil.checkSeeForDepartment(getContext().getUID(), model.getId())) { + jsonStr.append(getDepartmentJson(model, SecurityUtil.isDeptMaster(getContext(), model.getId()), isSetSecurity)).append(","); + } + } + } + } + } else if (requestType.equals("Department")) { + String rootDepartmentId = param1; + boolean isSetSecurity = param2.equals("isSetSecurity"); + DepartmentModel rootModel = (DepartmentModel) DepartmentCache.getModel(rootDepartmentId); + // 列出指定部门的下级列表 + List subDepartmentList = DepartmentCache.getSubDepartments(rootDepartmentId); + if (subDepartmentList != null) { + int size = subDepartmentList.size(); + for (int i = 0; i < size; i++) { + DepartmentModel model = (DepartmentModel) subDepartmentList.get(new Integer(i)); + if (GradeSecurityUtil.checkSeeForDepartment(getContext().getUID(), model.getId())) { + jsonStr.append(getDepartmentJson(model, SecurityUtil.isDeptMaster(getContext(), model.getId()), isSetSecurity)).append(","); + } + } + } + + boolean isMaster = SecurityUtil.isDeptMaster(getContext(), rootModel.getId()); + if (isMaster && param2.equals("")) { + // 列出指定部门的帐户 + Iterator userHash = UserCache.getUserListOfDepartment(rootDepartmentId); + Map tmp = new HashMap(); + if (userHash != null) { + while (userHash.hasNext()) { + UserModel userModel = userHash.next(); + tmp.put(userModel.getUID(), ""); + if (userModel.isClosed() == true) + continue;// 注销的不再显示 + jsonStr.append(getUserJson(userModel, isMaster)).append(","); + } + }// add by wangwq 增加了 兼职部门的显示 + List userMapHash = UserMapCache.getMapListOfDepartment(rootDepartmentId); + if (userMapHash != null) { + int size = userMapHash.size(); + for (int i = 0; i < size; i++) { + UserMapModel userMapModel = (UserMapModel) userMapHash.get(new Integer(i)); + UserModel userModel = (UserModel) UserCache.getModel(userMapModel.getUID()); + if (userModel.isClosed() || tmp.containsKey(userModel.getUID())) + continue;// 注销的不再显示 兼职的不重复显示 + jsonStr.append(getUserMapJson(userModel, userMapModel)).append(","); + } + } + } + } + if (jsonStr.toString().lastIndexOf(",") > -1) + jsonStr.setLength(jsonStr.length() - 1); + jsonStr.append("]"); + return jsonStr.toString(); + } + + /** + * add by wangwq 增加了兼职部门的人员的显示 将一个帐户对象转换成一个JSON描述串 + * + * @param model + * @return + */ + private String getUserMapJson(UserModel model, UserMapModel userMapMpdel) { + StringBuffer jsonStr = new StringBuffer("{"); + jsonStr.append("\"id\":\"AWS_NODE_OU_ID_" + model.getUniqueId() + "\","); + jsonStr.append("\"text\":\"" + SDK.getORGAPI().getUserAliasNames(model.getUID()) + "\","); + jsonStr.append("\"attributes\":{\"requestType\":\"User\",\"param1\":\"" + model.getUniqueId() + "\",\"param2\":\"\",\"param3\":\"" + SDK.getORGAPI().getUserAliasNames(model.getUID()) + "\",\"leaf\":\"true\"}"); + jsonStr.append("}"); + return jsonStr.toString(); + } + + private String getUserJson(UserModel model, boolean isMaster) { + TeamMemberModel teamMemberModel = null; + return this.getUserJson(model, teamMemberModel, isMaster); + } + + /** + * 将一个帐户对象转换成一个JSON描述串 + * + * @param model + * @return + */ + private String getUserJson(UserModel model, TeamMemberModel teamMemberModel, boolean isMaster) { + String qtip = "
      可直接拖动该用户到其他部门"; + // if (!isDraggable()) { + qtip = ""; + // } + String id = "AWS_NODE_OU_ID_" + model.getUniqueId(); + if (teamMemberModel != null) { + id = "AWS_NODE_TU_ID_" + model.getUniqueId(); + } + StringBuffer jsonStr = new StringBuffer("{"); + jsonStr.append("\"id\":\"" + id + "\","); + jsonStr.append("\"text\":\"" + SDK.getORGAPI().getUserAliasNames(model.getUID()) + "\","); + jsonStr.append("\"attributes\":{\"requestType\":\"User\",\"param1\":\"" + model.getUniqueId() + "\",\"param2\":\"\",\"param3\":\"" + SDK.getORGAPI().getUserAliasNames(model.getUID()) + "\",\"leaf\":\"true\"}"); + jsonStr.append("}"); + return jsonStr.toString(); + } + + /** + * 获取公司json数据 + * + * @param companyModel + * @return + */ + private String getCompanyJson(CompanyModel companyModel) { + String text = ""; + boolean isMaster = GradeSecurityUtil.isSuperMaster(getContext().getUID()) || SecurityUtil.isCompanyManager(getContext(), companyModel.getId()); + if (isMaster) { + text = companyModel.getName(); + } else { + text = "" + companyModel.getName() + ""; + } + + StringBuffer jsonStr = new StringBuffer("{"); + jsonStr.append("\"id\":\""); + jsonStr.append("AWS_NODE_OC_ID_" + companyModel.getId()); + jsonStr.append("\",\"text\":\""); + jsonStr.append(text); + jsonStr.append("\",\"state\":\"closed\","); + jsonStr.append("\"attributes\":{\"requestType\":\"Company\",\"param1\":\"" + companyModel.getId() + "\",\"param2\":\"\",\"param3\":\"\",\"leaf\":\"false\"}"); + jsonStr.append("}"); + return jsonStr.toString(); + } + + /** + * 将一个部门对象转换成一个JSON描述串 + * + * @param model + * @return + */ + private String getDepartmentJson(DepartmentModel model, boolean isMaster, boolean isSetSecurity) { + String qtip = "", text = ""; + if (isMaster && !isSetSecurity) { + // if (isDraggable()) { + // qtip = "可直接拖动该部门到其他公司或部门"; + // } + text = model.getName(); + } else { + qtip = ""; + text = "" + model.getName() + ""; + } + StringBuffer jsonStr = new StringBuffer("{"); + jsonStr.append("\"id\":\"AWS_NODE_OD_ID_" + model.getId() + "\", "); + jsonStr.append("\"text\":\""); + jsonStr.append(text); + jsonStr.append("\",\"state\":\"closed\","); + jsonStr.append("\"attributes\":{\"requestType\":\"Department\",\"param1\":\"" + model.getId() + "\",\"param2\":\"\",\"param3\":\"\",\"leaf\":\"false\"}"); + jsonStr.append("}"); + return jsonStr.toString(); + } + + /** + * 10进制转2进制 + * + * @param ten 数据库中存放的十进制数据 + * @param grantcount 当前控制权限个数 + * @return + */ + public String ten_two(int ten, int grantcount) { + StringBuffer sb1 = new StringBuffer(); + StringBuffer sb0 = new StringBuffer(); + ArrayList array_int = new ArrayList(); + Integer s; + String out_two = ""; + if (ten != 0) { + while (ten != 1) { + s = new Integer(ten % 2); + ten = ten / 2; + array_int.add("@" + s); + } + for (int z = 0; z < grantcount; z++) { + + if (z != grantcount - 1) { + sb1.append("0@"); + } else { + sb1.append("1"); + } + } + array_int.add(sb1.toString()); + } else { + for (int m = 0; m < grantcount; m++) { + if (m != grantcount - 1) { + sb0.append("0@"); + } else { + sb0.append("0"); + } + } + array_int.add(sb0.toString()); + } + int size = array_int.size(); + for (int i = (size - 1); i > -1; i--) { + String s1 = array_int.get(i).toString(); + + out_two += s1; + } + return out_two; + } + + /** + * 保存表格数据 + * + * @param data + * @return + */ + public String saveGridDate(String data) { + String[] arr = data.split("_"); + boolean flag = true; + for (int i = 0; i < arr.length; i++) { + String datas[] = arr[i].split(","); + String username = datas[1]; + String ismanager = datas[3]; + CoeUserModel model = new CoeUserModel(); + // model._user_id= Integer.parseInt((id == null || + // id.trim().length() == 0 ? "0" : id.trim())); + + String userAccount = ""; + if (username == null) { + username = ""; + } else { + if (username.indexOf("<") > 0) { + userAccount = username.substring(0, username.indexOf("<")); + } else { + userAccount = username; + } + } + model.setId(datas[0]); + model.setUserId(username == null ? "" : username.substring(0, username.indexOf("<"))); + model.setIsAdmin(Integer.parseInt(ismanager)); + model.setUserAccount(userAccount); + try { + if (!"0".equals(model.getIsAdmin()) && !"".equals(model.getId())) { + int r = CoeUserDaoFactory.createUser().update(model); + StringBuffer msg = new StringBuffer("[操作:修改用户]"); + msg.append("[用户:").append(model.getUserId()).append("]"); + msg.append("[高级管理:").append(model.getIsAdmin() == 1 ? "拥有权限" : "不拥有权限").append("]"); + msg.append("[状态:").append(r > 0 ? "成功]" : "失败]"); + + if (flag) { + flag = r > 0; + } + } else { + int r = CoeUserDaoFactory.createUser().create(model); + StringBuffer msg = new StringBuffer("[操作:新添用户]"); + msg.append("[用户:").append(model.getUserId()).append("]"); + msg.append("[高级管理:").append(model.getIsAdmin() == 1 ? "拥有权限" : "不拥有权限").append("]"); + msg.append("[状态:").append(r > 0 ? "成功]" : "失败]"); + if (flag) { + flag = r > 0; + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + return flag + ""; + } + + + private String getCoeUserMainItemHtml(CoeUserModel model) { + String title = I18nRes.findValue(CoEConstant.APP_ID, super.getContext().getLanguage(), ""); + String customAttr = "useruuid='" + model.getId() + "'"; + String imgUrl = ""; + // imgUrl = ORGAPI.getInstance().getUserPhotoUrl(_uc, model.getUserId(), + // 160); + imgUrl = SDK.getPortalAPI().getUserPhoto(_uc, model.getUserId()); + String name = model.getUserId() + "<" + model.getUserName() + ">"; + name = model.getUserName(); + if (name == null) { + name = ""; + } + String desc = ""; + // if(desc==null){desc="";} + String sid = this._uc.getSessionId(); + return ContentPane.getCoeUserPane(title, model.getId() + "", customAttr, imgUrl, name, desc, ContentPane.createCoeUserMainBtnGroup(sid, model, super.getContext().getLanguage(), this._uc.getUID())); + } + + private List getCoeUserMainRecodes(int start, int limit) { + // ORGAPI.getInstance().getUserPhotoUrl(me, userId, imgWidth) + return CoeWorkSpaceDaoFactory.createCoeWorkSpace().getCoeUserMainRecodes(start, limit); + } + + public boolean validateIsAccessCOE(String userid) { + return CoeUserDaoFactory.createUser().validateIsAccessCOE(userid); + } + + @Deprecated + public boolean isExistTable() { + return true; + // try { +// return CoeUserDaoFactory.createUser().isExistTable(); +// } catch (Exception e) { +// } +// return false; + } + + /** + * 查询用户 + * @param name + * @return + */ + public String searchUser(String name) { + ResponseObject ro = ResponseObject.newOkResponse(); + List list = new ArrayList(); + List models = CoeWorkSpaceDaoFactory.createCoeWorkSpace().searchUser(name); + if (models != null && models.size() > 0) { + for (CoeUserModel model : models) { + if (model == null) { + continue; + } + CoeProcessLevelAutoBean bean = new CoeProcessLevelAutoBean(); + bean.setName(model.getUserName()); + bean.setType(model.getIsAdmin() + ""); + bean.setValue(model.getId()); + bean.setUi("
      " + model.getUserName() + "
      "); + list.add(bean); + } + } + ro.put("result", JSONArray.toJSON(list)); + return ro.toString(); + } + + /** + * 查询用户 + * @return + */ + public String queryCoePalUserData() { + if (!hasModifyPerm()) { + return ResponseObject.newErrResponse("当前用户无用户管理权限").toString(); + } + List records = getCoeUserMainRecodes(0, 0); // 所有记录条数,暂时不分页 + Collections.sort(records, new Comparator() { + @Override + public int compare(CoeUserModel o1, CoeUserModel o2) { + return "admin".equals(o1.getUserId()) ? -1 : 0; + } + }); + boolean isHighSecurity = false; + List secAdminUserList = null; + if (HighSecurityUtil.isON()) { + isHighSecurity = true; + // 获取安全保密员 + secAdminUserList = HighSecurityUtil.getSecAdminList(); + } + + JSONArray result1 = new JSONArray();// 管理员 + JSONArray result2 = new JSONArray();// 普通用户 + for (CoeUserModel model : records) { + JSONObject object = new JSONObject(); + object.put("id", model.getUserId()); + object.put("name", model.getUserName()); + object.put("userPhoto", SDK.getPortalAPI().getUserPhoto(_uc, model.getUserId())); + object.put("role", SDK.getORGAPI().getRoleByUser(model.getUserId()).getNameI18N()); + if (model.getIsAdmin() == 1) { + result1.add(object); + } else { + result2.add(object); + } + // 增加是否安全保密员标识 + boolean isSecAdminUser = false; + if (isHighSecurity) { + isSecAdminUser = secAdminUserList.contains(model.getUserId()); + } + object.put("isSecAdminUser", isSecAdminUser); + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("data1", result1); + ro.put("data2", result2); + return ro.toString(); + } + + /** + * 批量变更用户角色 + * @param userIds + * @return + */ + public String changeCoePalUserRole(String userIds) { + if (!hasModifyPerm()) { + return ResponseObject.newErrResponse("当前用户无用户管理权限").toString(); + } + if (UtilString.isEmpty(userIds)) { + return ResponseObject.newErrResponse("参数不能为空").toString(); + } + Set userSet = new HashSet<>(Arrays.asList(userIds.split(","))); + if (userSet.contains("admin")) { + return ResponseObject.newErrResponse("admin管理员用户不允许变更").toString(); + } + CoeUser dao = new CoeUser(); + boolean isExit = false; + for (String userId : userSet) { + if (UtilString.isNotEmpty(userId)) { + PlatformMetaModelBean bean = dao.getInstanceByUserId(userId); + CoeUserModel model = (CoeUserModel)bean; + // 当前用户由管理员变更为普通用户时,退出系统 + if (this._uc.getUserModel().getUID().equals(userId) && model.getIsAdmin() == 1) { + // new SSOUtil().destroySession(this._uc.getSessionId()); // 在界面自动执行退出 + isExit = true; + } + model.setIsAdmin(model.getIsAdmin() == 0 ? 1 : 0); + dao.update(model); + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("isExit", isExit); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_USER, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_USER_UPDATE); + } + return ro.toString(); + } + + /** + * 判断是否有用户管理权限 + * 暂时默认true + * @return + */ + private boolean hasModifyPerm() { + return new CoeUser().isCoEManager(_uc.getUID()); + } + + /** + * 批量删除用户 + * @param userIds + * @return + */ + public String removeCoePalUser(String userIds) { + if (!hasModifyPerm()) { + return ResponseObject.newErrResponse("当前用户无用户管理权限").toString(); + } + if (UtilString.isEmpty(userIds)) { + return ResponseObject.newErrResponse("参数不能为空").toString(); + } + Set userSet = new HashSet<>(Arrays.asList(userIds.split(","))); + if (userSet.contains("admin")) { + return ResponseObject.newErrResponse("admin管理员用户不允许删除").toString(); + } + CoeUser dao = new CoeUser(); + boolean isExit = false; + for (String userId : userSet) { + if (UtilString.isNotEmpty(userId)) { + PlatformMetaModelBean bean = dao.getInstanceByUserId(userId); + CoeUserModel model = (CoeUserModel)bean; + String id = model.getId();// id值 + int r = CoeUserDaoFactory.createUser().delete(id); + if (r > 0) { + // 同步PAL用户至PAL小组成员,删除在PAL小组中存在但是不在PAL用户中存在的成员 + CoeCooperationAPIManager.getInstance().syncCooperationMemberFromPal(); + if (this._uc.getUserModel().getUID().equals(userId)) { + new SSOUtil().destroySession(this._uc.getSessionId()); + isExit = true; + } + Iterator sessions = SessionCache.getCache().iterator(); + while (sessions.hasNext()) { + SessionModel sessionModel = sessions.next(); + if (sessionModel.getUid().equals(userId)) { + new SSOUtil().destroySession(sessionModel.getSessionId()); + // break; + } + } + //解锁该用户锁定流程 + new PALRepository().updateLockUserByLockUser(userId); + } + } + } + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("isExit", isExit); + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_USER, CoEOpLogConst.OP_DELETE, CoEOpLogConst.INFO_USER_DELETE); + } + return ro.toString(); + } + + /** + * 批量设置/保存PAL用户 + * @param managerUsers + * @param generalUsers + * @return + */ + public String saveCoePalUser(String managerUsers, String generalUsers) { + if (!hasModifyPerm()) { + return ResponseObject.newWarnResponse("当前用户无用户管理权限").toString(); + } + Set managerUserSet = new HashSet<>(Arrays.asList(managerUsers.split(","))); + Set generalUserSet = new HashSet<>(Arrays.asList(generalUsers.split(","))); + + List list1 = new ArrayList<>(); + for (String userId : managerUserSet) { + if (UtilString.isNotEmpty(userId) && !list1.contains(userId)) { + list1.add(userId); + } + } + List list2 = new ArrayList<>(); + for (String userId : generalUserSet) { + if (UtilString.isNotEmpty(userId) && !list2.contains(userId)) { + list2.add(userId); + } + } + int maxUser = Quota.getMaxCoEPALUser(); + if (maxUser < list1.size() + list2.size()) { + return ResponseObject.newWarnResponse("用户数已超过许可总数(许可最大用户数" + maxUser + ")").toString(); + } + // 全部删除,全部保存 + CoeUser dao = new CoeUser(); + dao.deleteAll(); + if (list1.size() > 0) { + dao.batchInsert(list1, true); + } + + if (list2.size() > 0) { + dao.batchInsert(list2, false); + } + // 操作行为日志记录 + if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { + CoEOpLogAPI.auditOkOp(_uc, CoEOpLogConst.MODULE_CATEGORY_USER, CoEOpLogConst.OP_UPDATE, CoEOpLogConst.INFO_USER_UPDATE); + } + // 同步PAL用户至PAL小组成员,删除在PAL小组中存在但是不在PAL用户中存在的成员 + CoeCooperationAPIManager.getInstance().syncCooperationMemberFromPal(); + return ResponseObject.newOkResponse().toString(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/TeamPermAPIManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/TeamPermAPIManager.java new file mode 100644 index 00000000..42fd1664 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/TeamPermAPIManager.java @@ -0,0 +1,136 @@ +package com.actionsoft.apps.coe.pal.teamwork; + +import java.util.Iterator; +import java.util.List; + +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.teamwork.cache.TeamMemberPermCache; +import com.actionsoft.apps.coe.pal.teamwork.cache.TeamPermCache; +import com.actionsoft.apps.coe.pal.teamwork.dao.TeamMemberPerm; +import com.actionsoft.apps.coe.pal.teamwork.dao.TeamPerm; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamMemberPermModel; +import com.actionsoft.exception.AWSDataAccessException; + +/** + * 小组权限API内部封装、调用 + * + * @author jack + * + */ +public final class TeamPermAPIManager { + private static TeamPermAPIManager instance = new TeamPermAPIManager(); + + private TeamPermAPIManager() { + } + + public static TeamPermAPIManager getInstance() { + return instance; + } + + // --------------小组访问PAL资源权限(粗粒度,更细的权限由流程团队成员权限控制)------------------ + + /** + * 该小组是否有访问指定资产库某类建模方法下资源的权限,如是否可以访问组织类文件 + * + * @param teamId 小组Id + * @param wsId 资产库Id + * @param methodCategary 建模方法大类名,如process + * @return 可以访问返回true + */ + public boolean havingPALMethodPermission(String teamId, String wsId, String methodCategary) { + boolean isAccess = false; + // 拿到该资产库建模方法下用户创建的根目录,逐个判断是否有文件的访问权限。若其中之一有权访问,则可以访问该类建模资源 + + return isAccess; + } + + /** + * 该小组是否有访问资产库指定文件的访问权限 + * + * @param teamId 小组Id + * @param wsId 资产库Id + * @param repositoryId 资产库文件版本Id + * @return 有访问权返回true + */ + public boolean havingPALRepositoryPermission(String teamId, String wsId, String repositoryId) { + return TeamPermCache.getByPALFile(teamId, wsId, repositoryId) == null ? false : true; + } + + /** + * 卸载流程团队App时,删除所有权限配置 + * + * @throws AWSDataAccessException + */ + public void removeAllPerms() throws AWSDataAccessException { + new TeamPerm().deleteAllTeamPerm(); + new TeamMemberPerm().deleteAllTeamMemberPerm(); + } + + /** + * 当小组被删除时,删除小组相关的配置资源权限 + * + * @param teamId 小组Id + * @throws AWSDataAccessException + */ + public void removePermsByTeam(String teamId) throws AWSDataAccessException { + new TeamPerm().deleteByTeamId(teamId); + new TeamMemberPerm().deleteByTeamId(teamId); + } + + // --------------小组成员操作权限(细粒度,CoE只提供维护和查询API,界面由扩展的App实现)------------------ + + /** + * 获得小组全部成员的操作权限 + * + * @param teamId 小组Id + * @return 已设置操作权限的用户+权限列表,一个迭代器 + * + * @see TeamMemberPermModel#isActionWrite() 是否有修改、新建操作的权限 + * @see TeamMemberPermModel#isActionDelete() 是否有删除操作的权限 + * @see TeamMemberPermModel#isActionVersion() 是否有版本操作的权限 + * @see TeamMemberPermModel#isActionPublish() 是否有发布操作的权限 + * @see TeamMemberPermModel#isActionAccessExtendApps() 是否有有访问扩展应用的权限 + */ + public Iterator getTeamMemberActions(String teamId) { + return TeamMemberPermCache.getListOfTeam(teamId); + } + + /** + * 获得小组成员操作权限 + * + * @param teamId 小组Id + * @param userId 一个合法的AWS账户 + * @return 如果有权限配置返回对象,否则返回null + * + * @see TeamMemberPermModel#isActionWrite() 是否有修改、新建操作的权限 + * @see TeamMemberPermModel#isActionDelete() 是否有删除操作的权限 + * @see TeamMemberPermModel#isActionVersion() 是否有版本操作的权限 + * @see TeamMemberPermModel#isActionPublish() 是否有发布操作的权限 + * @see TeamMemberPermModel#isActionAccessExtendApps() 是否有有访问扩展应用的权限 + */ + public TeamMemberPermModel getTeamMemberAction(String teamId, String userId) { + TeamMemberPermModel perm = TeamMemberPermCache.getByTeamAndUser(teamId, userId); + return perm; + } + + /** + * 为指定小组批量设置成员操作权限 + * + * @param list 一组成员权限对象。getId为空时做追加;getId不为空且getActionType为空串做删除 ;其他为更新操作 + * @throws AWSDataAccessException 可能会抛出异常,应做检查处理 + */ + public void setTeamMemberAction(List list) throws AWSDataAccessException { + if (list != null) { + for (TeamMemberPermModel model : list) { + if (UtilString.isEmpty(model.getId())) { + new TeamMemberPerm().insert(model); + } else if (!UtilString.isEmpty(model.getId()) && UtilString.isEmpty(model.getActionType())) { + new TeamMemberPerm().delete(model.getId()); + } else { + new TeamMemberPerm().update(model); + } + } + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamMemberPermCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamMemberPermCache.java new file mode 100644 index 00000000..053418e1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamMemberPermCache.java @@ -0,0 +1,111 @@ +package com.actionsoft.apps.coe.pal.teamwork.cache; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.team.user.web.UserWeb; +import com.actionsoft.apps.coe.pal.teamwork.dao.TeamMemberPerm; +import com.actionsoft.apps.coe.pal.teamwork.dao.TeamMemberPermExtend; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamMemberPermExtendModel; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamMemberPermModel; +import com.actionsoft.sdk.local.SDK; + +/** + * 小组成员操作权限Cache + * + * @author jack + * + */ +@Deprecated +public final class TeamMemberPermCache extends Cache { + + /** + * 公共构造函数。插件启动时回调 + * + * @param profile - 缓存配置信息 + */ + public TeamMemberPermCache(CachePluginProfile profile) { + super(profile); + registeIndex(TeamMemberPermCacheIndex1.class, new TeamMemberPermCacheIndex1()); + registeIndex(TeamMemberPermCacheIndex2.class, new TeamMemberPermCacheIndex2()); + } + + /** + * 放入一个对象 + * + * @param model + */ + public static void putModel(TeamMemberPermModel model) { + getCache().put(model.getId(), model); + } + + /** + * 移走一个对象 + * + * @param id + */ + public static void removeById(String id) { + getCache().remove(id); + } + + /** + * 从索引直接取值 + * + * @param teamId 小组Id + * @param userId 用户登录Id + * @return 找不到返回null + */ + public static TeamMemberPermModel getByTeamAndUser(String teamId, String userId) { + return getCache().getByIndexSingle(TeamMemberPermCacheIndex1.class, teamId + "_" + userId); + } + + /** + * 从索引直接取值 + * + * @param teamId 小组Id + * @return 迭代器 + */ + public static Iterator getListOfTeam(String teamId) { + return getCache().getByIndex(TeamMemberPermCacheIndex2.class, teamId); + } + + /** + * 初始化缓存的回调方法 + */ + public void load() { + UserWeb userWeb = new UserWeb(); + boolean bb = userWeb.isExistTable(); + if (bb) { + List list = new TeamMemberPerm().query().list(); + List list2 = new TeamMemberPermExtend().query().list(); + Map> map = new HashMap> (); + for(TeamMemberPermExtendModel model:list2) { + if(map.get(model.getBindId())!=null) { + map.get(model.getBindId()).add(model); + }else { + List list3 = new ArrayList(); + list3.add(model); + map.put(model.getBindId(), list3); + } + } + for (TeamMemberPermModel model : list) { + model.setTeamMemberPermExtendModel(map.get(model.getId())); + put(model.getId(), model, false); + } + ConsolePrinter.info( "[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE流程小组成员操作权限对象 [" + list.size() + "个]"); + } + } + + public static TeamMemberPermCache getCache() { + return (TeamMemberPermCache) CacheManager.getCache(TeamMemberPermCache.class); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamMemberPermCacheIndex1.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamMemberPermCacheIndex1.java new file mode 100644 index 00000000..2027475c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamMemberPermCacheIndex1.java @@ -0,0 +1,21 @@ +package com.actionsoft.apps.coe.pal.teamwork.cache; + +import com.actionsoft.bpms.commons.cache.SingleValueIndex; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamMemberPermModel; + +/** + * 由小组Id+账户名建立的索引 + * + * @author jack + * + */ +public class TeamMemberPermCacheIndex1 extends SingleValueIndex { + + /** + * 返回模型对象的索引值 + */ + public String key(TeamMemberPermModel model) { + return model.getTeamId() + "_" + model.getUserId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamMemberPermCacheIndex2.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamMemberPermCacheIndex2.java new file mode 100644 index 00000000..6a180fce --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamMemberPermCacheIndex2.java @@ -0,0 +1,21 @@ +package com.actionsoft.apps.coe.pal.teamwork.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamMemberPermModel; + +/** + * 由小组Id建立的索引 + * + * @author jack + * + */ +public class TeamMemberPermCacheIndex2 extends ListValueIndex { + + /** + * 返回模型对象的索引值 + */ + public String key(TeamMemberPermModel model) { + return model.getTeamId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCache.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCache.java new file mode 100644 index 00000000..1fdb0d19 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCache.java @@ -0,0 +1,112 @@ +package com.actionsoft.apps.coe.pal.teamwork.cache; + +import java.util.List; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile; +import com.actionsoft.bpms.commons.cache.Cache; +import com.actionsoft.bpms.commons.cache.CacheManager; +import com.actionsoft.bpms.util.ConsolePrinter; +import com.actionsoft.apps.coe.pal.team.user.web.UserWeb; +import com.actionsoft.apps.coe.pal.teamwork.dao.TeamPerm; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamPermModel; +import com.actionsoft.sdk.local.SDK; + +/** + * 小组可访问资源Cache + * + * @author jack + * + */ +@Deprecated +public final class TeamPermCache extends Cache { + + /** + * 公共构造函数。插件启动时回调 + * + * @param profile - 缓存配置信息 + */ + public TeamPermCache(CachePluginProfile profile) { + super(profile); + registeIndex(TeamPermCacheIndex1.class, new TeamPermCacheIndex1()); + registeIndex(TeamPermCacheIndex2.class, new TeamPermCacheIndex2()); + registeIndex(TeamPermCacheIndex3.class, new TeamPermCacheIndex3()); + registeIndex(TeamPermCacheIndex4.class, new TeamPermCacheIndex4()); + } + + public static void putModel(TeamPermModel model) { + getCache().put(model.getId(), model); + } + + /** + * 移走一个对象 + * + * @param id + */ + public static void removeById(String id) { + getCache().remove(id); + } + + /** + * 获得小组可访问的资源库文件范围 + * + * @param teamId 小组Id + * @param wsId 资产库Id + * @param repositoryId 资产库文件Id + * @return 如果可访问,返回对象。否则返回null + */ + public static TeamPermModel getByPALFile(String teamId, String wsId, String plVersionId) { + return getCache().getByIndexSingle(TeamPermCacheIndex2.class, teamId + "_" + wsId + "_" + plVersionId); + } + + /** + * 获得小组可访问的资产库文件范围 + * + * @param teamId 小组Id + * @param wsId 资产库Id + * @return 迭代器 + */ + public static List getPALListOfTeam(String teamId) { + return iteratorToList(getCache().getByIndex(TeamPermCacheIndex1.class, teamId)); + } + + /** + * 根据资产库文件Id,获取所有有该文件权限的小组列表 + * + * @param repositoryId 资产库文件Id + * @return 迭代器 + */ + public static List getTeamListByPALFile(String repositoryId) { + return iteratorToList(getCache().getByIndex(TeamPermCacheIndex3.class, repositoryId)); + } + + /** + * 获得某个资产库中所有授权的文件 + * + * @param wsId 资产库Id + * @return 迭代器 + */ + public static List getTeamListByWsId(String wsId) { + return iteratorToList(getCache().getByIndex(TeamPermCacheIndex4.class, wsId)); + } + + /** + * 初始化缓存的回调方法 + */ + public void load() { + UserWeb userWeb = new UserWeb(); + boolean bb = userWeb.isExistTable(); + if (bb) { + List list = new TeamPerm().query().list(); + for (TeamPermModel model : list) { + put(model.getId(), model, false); + } + ConsolePrinter.info("[" + SDK.getAppAPI().getAppContext(CoEConstant.APP_ID).getNameI18N() + "]Cache加载CoE流程小组资源权限对象 [" + list.size() + "个]"); + } + } + + public static TeamPermCache getCache() { + return (TeamPermCache) CacheManager.getCache(TeamPermCache.class); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCacheIndex1.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCacheIndex1.java new file mode 100644 index 00000000..5b80876c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCacheIndex1.java @@ -0,0 +1,21 @@ +package com.actionsoft.apps.coe.pal.teamwork.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamPermModel; + +/** + * 由小组Id建立的索引 + * + * @author jack + * + */ +public class TeamPermCacheIndex1 extends ListValueIndex { + + /** + * 返回模型对象的索引值 + */ + public String key(TeamPermModel model) { + return model.getTeamId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCacheIndex2.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCacheIndex2.java new file mode 100644 index 00000000..7f1df04d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCacheIndex2.java @@ -0,0 +1,21 @@ +package com.actionsoft.apps.coe.pal.teamwork.cache; + +import com.actionsoft.bpms.commons.cache.SingleValueIndex; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamPermModel; + +/** + * 由小组Id+资产库Id+资产库文件Id建立的索引 + * + * @author jack + * + */ +public class TeamPermCacheIndex2 extends SingleValueIndex { + + /** + * 返回模型对象的索引值 + */ + public String key(TeamPermModel model) { + return model.getTeamId() + "_" + model.getWsId() + "_" + model.getResourceId(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCacheIndex3.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCacheIndex3.java new file mode 100644 index 00000000..a49cbcb6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCacheIndex3.java @@ -0,0 +1,19 @@ +package com.actionsoft.apps.coe.pal.teamwork.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamPermModel; + +/** +* @Description 根据资源ID创建索引 +* @author zhangming +* @date 2014年7月25日 +* +*/ +public class TeamPermCacheIndex3 extends ListValueIndex { + /** + * 返回模型对象的索引值 + */ + public String key(TeamPermModel model) { + return model.getResourceId(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCacheIndex4.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCacheIndex4.java new file mode 100644 index 00000000..1f09b7aa --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/cache/TeamPermCacheIndex4.java @@ -0,0 +1,19 @@ +package com.actionsoft.apps.coe.pal.teamwork.cache; + +import com.actionsoft.bpms.commons.cache.ListValueIndex; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamPermModel; + +/** +* @Description 根据资产库ID创建索引 +* @author zhangming +* @date 2014年7月25日 +* +*/ +public class TeamPermCacheIndex4 extends ListValueIndex{ + /** + * 返回模型对象的索引值 + */ + public String key(TeamPermModel model) { + return model.getWsId(); + } +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/dao/ProcessPublish.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/dao/ProcessPublish.java new file mode 100644 index 00000000..d34459bf --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/dao/ProcessPublish.java @@ -0,0 +1,65 @@ +package com.actionsoft.apps.coe.pal.teamwork.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.util.DBSql; + +public final class ProcessPublish { + + public List> getPublishAddData(String processInstId) { + String sql = "select * from bo_act_coe_publish_n where BINDID='" + processInstId + "'"; + return DBSql.query(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put("PUBLISTHTYPE", rs.getString("PUBLISTHTYPE")); + map.put("PUBLISHDESC", rs.getString("PUBLISHDESC")); + map.put("PUBLISHVERSION", rs.getString("PUBLISHVERSION")); + map.put("PUBLISHFILENAME", rs.getString("PUBLISHFILENAME")); + map.put("ID", rs.getString("ID")); + map.put("PUBLISHFILEID", rs.getString("PUBLISHFILEID")); + return map; + } + }); + } + + public List> getPublishStopData(String processInstId) { + String sql = "select * from bo_act_coe_publish_s where BINDID='" + processInstId + "'"; + return DBSql.query(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put("STOPTYPE", rs.getString("STOPTYPE")); + map.put("STOPDESC", rs.getString("STOPDESC")); + map.put("STOPVERSION", rs.getString("STOPVERSION")); + map.put("STOPFILENAME", rs.getString("STOPFILENAME")); + map.put("ID", rs.getString("ID")); + map.put("STOPFILEID", rs.getString("STOPFILEID")); + return map; + } + }); + } + + public List> getPublishChangeData(String processInstId) { + String sql = "select * from bo_act_coe_publish_c where BINDID='" + processInstId + "'"; + return DBSql.query(sql, new RowMapper>() { + @Override + public Map mapRow(ResultSet rs, int arg1) throws SQLException { + Map map = new HashMap(); + map.put("CHANGETYPE", rs.getString("CHANGETYPE")); + map.put("CHANGEDDESC", rs.getString("CHANGEDDESC")); + map.put("CHANGEDVERSION", rs.getString("CHANGEDVERSION")); + map.put("CHANGEFILENAME", rs.getString("CHANGEFILENAME")); + map.put("ID", rs.getString("ID")); + map.put("CHANGEFILEID", rs.getString("CHANGEFILEID")); + return map; + } + }); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/dao/TeamMemberPerm.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/dao/TeamMemberPerm.java new file mode 100644 index 00000000..e50a5372 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/dao/TeamMemberPerm.java @@ -0,0 +1,279 @@ +package com.actionsoft.apps.coe.pal.teamwork.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.BatchPreparedStatementSetter; +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.teamwork.cache.TeamMemberPermCache; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamMemberPermExtendModel; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamMemberPermModel; +import com.actionsoft.exception.AWSDataAccessException; + +public final class TeamMemberPerm extends DaoObject { + + public TeamMemberPerm() { + } + + @Override + public int insert(TeamMemberPermModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) + model.setId(UUIDGener.getUUID()); + Connection conn = null; + try { + conn = DBSql.open(); + if (conn != null) { + // 关闭事务自动提交 + conn.setAutoCommit(false); + // 准备对象 + final List insertModels = new ArrayList<>(); + DBSql.update(conn, "DELETE FROM APP_ACT_COE_TEAMMBR_PERM_EXT WHERE BINDID=?", new Object[] { model.getId() }); + if (model.getTeamMemberPermExtendModel() != null && !model.getTeamMemberPermExtendModel().isEmpty()) { + StringBuilder sql = new StringBuilder(); + sql.append("INSERT INTO ").append("APP_ACT_COE_TEAMMBR_PERM_EXT").append("(ID,BINDID,RESOURCEID) values (?, ?, ?)"); + // 执行批量更新 + DBSql.batch(conn, sql.toString(), new BatchPreparedStatementSetter() { + public void setValues(PreparedStatement pst, int paramInt) throws SQLException { + TeamMemberPermExtendModel tpem = model.getTeamMemberPermExtendModel().get(paramInt); + + pst.setString(1, UUIDGener.getUUID()); + pst.setString(2, model.getId()); + pst.setString(3, tpem.getResourceId()); + insertModels.add(tpem); + } + + public int getBatchSize() { + return model.getTeamMemberPermExtendModel().size(); + } + }); + // 语句执行完毕,提交本事务 + conn.commit(); + } + + String sql = "INSERT INTO " + entityName() + "(ID,TEAMID,USERID,ACTIONTYPE,EXTENDAPPS)VALUES(:ID,:TEAMID,:USERID,:ACTIONTYPE,:EXTENDAPPS)"; + Map paraMap = new HashMap<>(); + paraMap.put("ID", model.getId()); + paraMap.put("TEAMID", model.getTeamId()); + paraMap.put("USERID", model.getUserId()); + paraMap.put("ACTIONTYPE", model.getActionType()); + paraMap.put("EXTENDAPPS", model.getExtendApps()); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + TeamMemberPermCache.putModel(model); + } + return r; + } else { + return -1; + } + } catch (SQLException e) { + try { + if (conn != null) { + conn.rollback(); + } + } catch (Exception ee) { + } + throw new AWSDataAccessException(e); + } finally { + // 关闭连接 + DBSql.close(conn); + } + } + + @Override + public int update(TeamMemberPermModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) { + throw new AWSDataAccessException("Method getId() Does Not Allow Empty!"); + } + Map paraMap = new HashMap<>(); + paraMap.put("ACTIONTYPE", model.getActionType()); + paraMap.put("EXTENDAPPS", model.getExtendApps()); + updatePermExtend(model); + int r = update(model.getId(), paraMap); + if (r > 0) { + TeamMemberPermCache.putModel(model); + } + return r; + } + + public void updatePermExtend(TeamMemberPermModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) + model.setId(UUIDGener.getUUID()); + Connection conn = null; + try { + conn = DBSql.open(); + if (conn != null) { + // 关闭事务自动提交 + conn.setAutoCommit(false); + // 准备对象 + final List insertModels = new ArrayList<>(); + DBSql.update(conn, "DELETE FROM APP_ACT_COE_TEAMMBR_PERM_EXT WHERE BINDID=?", new Object[] { model.getId() }); + if (model.getTeamMemberPermExtendModel() != null && !model.getTeamMemberPermExtendModel().isEmpty()) { + StringBuilder sql = new StringBuilder(); + sql.append("INSERT INTO ").append("APP_ACT_COE_TEAMMBR_PERM_EXT").append("(ID,BINDID,RESOURCEID) values (?, ?, ?)"); + // 执行批量更新 + DBSql.batch(conn, sql.toString(), new BatchPreparedStatementSetter() { + public void setValues(PreparedStatement pst, int paramInt) throws SQLException { + TeamMemberPermExtendModel tpem = model.getTeamMemberPermExtendModel().get(paramInt); + + pst.setString(1, UUIDGener.getUUID()); + pst.setString(2, model.getId()); + pst.setString(3, tpem.getResourceId()); + insertModels.add(tpem); + } + + public int getBatchSize() { + return model.getTeamMemberPermExtendModel().size(); + } + }); + // 语句执行完毕,提交本事务 + conn.commit(); + } + } + } catch (SQLException e) { + try { + if (conn != null) { + conn.rollback(); + } + } catch (Exception ee) { + } + throw new AWSDataAccessException(e); + } finally { + // 关闭连接 + DBSql.close(conn); + } + } + + /** + * 卸载流程团队App时,删除所有权限配置数据 + * + * @throws AWSDataAccessException + */ + public void deleteAllTeamMemberPerm() throws AWSDataAccessException { + DBSql.update("DELETE FROM " + entityName()); + DBSql.update("DELETE FROM APP_ACT_COE_TEAMMBR_PERM_EXT"); + TeamMemberPermCache.getCache().destroy(); + } + + /** + * 当小组被删除时,删除小组成员权限 + * + * @param teamId 小组Id + * @throws AWSDataAccessException + */ + public void deleteByTeamId(String teamId) throws AWSDataAccessException { + int r = DBSql.update("DELETE FROM " + entityName() + " WHERE TEAMID=? ", new Object[] { teamId }); + // remove obj + if (r > 0) { + for (Iterator iter = TeamMemberPermCache.getCache().iterator(); iter.hasNext();) { + TeamMemberPermModel perm = iter.next(); + if (perm.getTeamId().equals(teamId)) { + DBSql.update("DELETE FROM APP_ACT_COE_TEAMMBR_PERM_EXT WHERE BINDID=? ", new Object[] { perm.getId() }); + TeamMemberPermCache.removeById(perm.getId()); + } + } + } + } + + @Override + public int delete(Object id) throws AWSDataAccessException { + int r = super.delete(id); + if (r > 0) { + DBSql.update("DELETE FROM APP_ACT_COE_TEAMMBR_PERM_EXT WHERE BINDID=? ", new Object[] { id }); + TeamMemberPermCache.removeById((String) id); + } + return r; + } + + @Override + public String entityName() { + return "APP_ACT_COE_TEAMMBR_PERM"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public TeamMemberPermModel mapRow(ResultSet rset, int rowNum) throws SQLException { + TeamMemberPermModel model = new TeamMemberPermModel(); + try { + model.setId(rset.getString("ID")); + model.setTeamId(rset.getString("TEAMID")); + model.setUserId(rset.getString("USERID")); + model.setActionType(rset.getString("ACTIONTYPE")); + model.setExtendApps(rset.getString("EXTENDAPPS")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } + + /** + * 获取有w权限的人数 + * + * @param userIds + * @return + * @author zhangming + */ + public int getWPermCount(String teamId, String userIds) { + String[] ids = null; + String idSql = ""; + if (userIds != null) { + ids = userIds.split(","); + } + if (ids != null) { + StringBuilder sb = new StringBuilder(); + for (String id : ids) { + if (!"".equals(id)) { + sb.append("'").append(id).append("',"); + } + } + if (sb.length() > 0) { + idSql = sb.toString(); + idSql = idSql.substring(0, idSql.length() - 1); + } + } + + String sql = "SELECT COUNT(*) FROM (SELECT DISTINCT(userid) FROM APP_ACT_COE_TEAMMBR_PERM WHERE TEAMID <> ? AND ACTIONTYPE LIKE '%w%' AND userid NOT IN(" + idSql + ")) perm"; + int count = DBSql.getInt(sql, new Object[] { teamId }); + return count; + } + /** + * 查询群组人员权限 + * @param teamId + * @param userId + * @return + */ + public TeamMemberPermModel getTeamMemberPerm(String teamId, String userId) { + String sql = " SELECT t.ID, t.TEAMID, t.USERID, t.ACTIONTYPE, t.EXTENDAPPS from " + entityName() + " t WHERE 1=1 AND TEAMID=? AND t.USERID=? "; + TeamMemberPermModel temMemberPerm = DBSql.getObject(sql, new RowMapper() { + @Override + public TeamMemberPermModel mapRow(ResultSet rs, int arg1) throws SQLException { + TeamMemberPermModel model = new TeamMemberPermModel(); + model.setId( rs.getString("ID") ); + model.setTeamId( rs.getString("TEAMID") ); + model.setUserId( rs.getString("USERID") ); + model.setActionType( rs.getString("ACTIONTYPE") ); + model.setExtendApps( rs.getString("EXTENDAPPS") ); + model.setTeamMemberPermExtendModel(null); //设置为空 + return model; + } + + }, teamId, userId); + return temMemberPerm; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/dao/TeamMemberPermExtend.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/dao/TeamMemberPermExtend.java new file mode 100644 index 00000000..a681c4f3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/dao/TeamMemberPermExtend.java @@ -0,0 +1,84 @@ +package com.actionsoft.apps.coe.pal.teamwork.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamMemberPermExtendModel; +import com.actionsoft.exception.AWSDataAccessException; + +public class TeamMemberPermExtend extends DaoObject{ + + @Override + public String entityName() { + return "APP_ACT_COE_TEAMMBR_PERM_EXT"; + } + + @Override + public int insert(TeamMemberPermExtendModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) + model.setId(UUIDGener.getUUID()); + String sql = "INSERT INTO " + entityName() + "(ID,BINDID,RESOURCEID)VALUES(:ID,:BINDID,:RESOURCEID)"; + Map paraMap = new HashMap<>(); + paraMap.put("ID", model.getId()); + paraMap.put("BINDID", model.getBindId()); + paraMap.put("RESOURCEID", model.getResourceId()); + int r = DBSql.update(sql, paraMap); + return r; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public TeamMemberPermExtendModel mapRow(ResultSet rset, int rowNum) throws SQLException { + TeamMemberPermExtendModel model = new TeamMemberPermExtendModel(); + try { + model.setId(rset.getString("ID")); + model.setBindId(rset.getString("BINDID")); + model.setResourceId(rset.getString("RESOURCEID")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + } + + @Override + public int update(TeamMemberPermExtendModel arg0) throws AWSDataAccessException { + return 0; + } + + public void delete(String bindId){ + DBSql.update("DELETE FROM " + entityName() + " WHERE BINDID=? ", new Object[] { bindId }); + } + + public void deleteAllTeamMemberPermExtend() throws AWSDataAccessException { + DBSql.update("DELETE FROM " + entityName()); + } + + /** + * 查询特定群组下特定人员权限资源 + * @param bindId + * @return + */ + public List getTeamMemberPermExtendModelList(String bindId) { + String sql = " SELECT * FROM " + entityName() + " WHERE 1=1 AND BINDID=? "; + List teamMemberPermExtendList = DBSql.query(sql, rowMapper(), bindId); + if(teamMemberPermExtendList == null) { + teamMemberPermExtendList = new ArrayList(); + } + return teamMemberPermExtendList; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/dao/TeamPerm.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/dao/TeamPerm.java new file mode 100644 index 00000000..83de4581 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/dao/TeamPerm.java @@ -0,0 +1,150 @@ +package com.actionsoft.apps.coe.pal.teamwork.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import com.actionsoft.bpms.commons.database.RowMapper; +import com.actionsoft.bpms.commons.mvc.dao.DaoObject; +import com.actionsoft.bpms.util.DBSql; +import com.actionsoft.bpms.util.UUIDGener; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.apps.coe.pal.teamwork.cache.TeamPermCache; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamPermModel; +import com.actionsoft.exception.AWSDataAccessException; + +public final class TeamPerm extends DaoObject { + + public TeamPerm() { + } + + @Override + public int insert(TeamPermModel model) throws AWSDataAccessException { + if (UtilString.isEmpty(model.getId())) + model.setId(UUIDGener.getUUID()); + String sql = "INSERT INTO " + entityName() + "(ID,TEAMID,WSID,PERMTYPE,RESOURCEID)VALUES(:ID,:TEAMID,:WSID,:PERMTYPE,:RESOURCEID)"; + Map paraMap = new HashMap<>(); + paraMap.put("ID", model.getId()); + paraMap.put("TEAMID", model.getTeamId()); + paraMap.put("WSID", model.getWsId()); + paraMap.put("PERMTYPE", model.getPermType()); + paraMap.put("RESOURCEID", model.getResourceId()); + int r = DBSql.update(sql, paraMap); + if (r > 0) { + TeamPermCache.putModel(model); + } + return r; + } + + /** + * 卸载流程团队App时,删除所有权限配置数据 + * + * @throws AWSDataAccessException + */ + public void deleteAllTeamPerm() throws AWSDataAccessException { + int r = DBSql.update("DELETE FROM " + entityName()); + if (r > 0) { + TeamPermCache.getCache().destroy(); + } + } + + /** + * 当小组被删除时,删除小组资源权限 + * + * @param teamId 小组Id + * @throws AWSDataAccessException + */ + public void deleteByTeamId(String teamId) throws AWSDataAccessException { + int r = DBSql.update("DELETE FROM " + entityName() + " WHERE TEAMID=? ", new Object[] { teamId }); + if (r > 0) { + // remove obj + for (Iterator iter = TeamPermCache.getCache().iterator(); iter.hasNext();) { + TeamPermModel perm = iter.next(); + if (perm.getTeamId().equals(teamId)) { + TeamPermCache.removeById(perm.getId()); + } + } + } + } + + /** + * 资产库文件被删除时,删除小组资源权限 + * + * @param resourceId 资产库文件ID + * @throws AWSDataAccessException + */ + public void deleteByResourceId (String resourceId) throws AWSDataAccessException { + int r = DBSql.update("DELETE FROM " + entityName() + " WHERE RESOURCEID=? ", new Object[] { resourceId }); + if (r > 0) { + // remove obj + for (Iterator iter = TeamPermCache.getCache().iterator(); iter.hasNext();) { + TeamPermModel perm = iter.next(); + if (perm.getResourceId().equals(resourceId)) { + TeamPermCache.removeById(perm.getId()); + } + } + } + } + + /** + * 资产库被删除时,删除小组资源权限 + * + * @param wsId 资产库Id + * @throws AWSDataAccessException + */ + public void deleteByWorkspaceId(String wsId) throws AWSDataAccessException { + int r = DBSql.update("DELETE FROM " + entityName() + " WHERE WSID=? ", new Object[] { wsId }); + if (r > 0) { + // remove cache + for (Iterator iter = TeamPermCache.getCache().iterator(); iter.hasNext();) { + TeamPermModel perm = iter.next(); + if (perm.getWsId().equals(wsId)) { + TeamPermCache.removeById(perm.getId()); + } + } + } + } + + @Override + public int delete(Object id) throws AWSDataAccessException { + int r = super.delete(id); + if (r > 0) { + TeamPermCache.removeById((String) id); + } + return r; + } + + @Override + public int update(TeamPermModel model) throws AWSDataAccessException { + return -1; + } + + @Override + public String entityName() { + return "APP_ACT_COE_TEAM_PERM"; + } + + @Override + public RowMapper rowMapper() { + return new Mapper(); + } + + private class Mapper implements RowMapper { + public TeamPermModel mapRow(ResultSet rset, int rowNum) throws SQLException { + TeamPermModel model = new TeamPermModel(); + try { + model.setId(rset.getString("ID")); + model.setTeamId(rset.getString("TEAMID")); + model.setWsId(rset.getString("WSID")); + model.setPermType(rset.getInt("PERMTYPE")); + model.setResourceId(rset.getString("RESOURCEID")); + } catch (Exception e) { + e.printStackTrace(); + } + return model; + } + + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/model/TeamMemberPermExtendModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/model/TeamMemberPermExtendModel.java new file mode 100644 index 00000000..a6fbfeb2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/model/TeamMemberPermExtendModel.java @@ -0,0 +1,64 @@ +package com.actionsoft.apps.coe.pal.teamwork.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + + +/** + * 小组成员的流程操作权限 + * + * @author sunlh 2018-08-03 + * + */ +public class TeamMemberPermExtendModel extends ModelBean{ + + private static final long serialVersionUID = 1L; + + private String id; + private String bindId; + private String resourceId; + + + public TeamMemberPermExtendModel() { + + } + + + /** + * 唯一标识,一个36位串 + * + * @return + */ + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + + /** + * 流程权限Id,一个36位串。来自小组权限的BINDID + * + * @return + */ + public String getBindId() { + return bindId; + } + public void setBindId(String bindId) { + this.bindId = bindId; + } + + /** + * 流程Id,一个36位串。来自资产库流程ID + * + * @return + */ + public String getResourceId() { + return resourceId; + } + public void setResourceId(String resourceId) { + this.resourceId = resourceId; + } + + + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/model/TeamMemberPermModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/model/TeamMemberPermModel.java new file mode 100644 index 00000000..aa201c7d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/model/TeamMemberPermModel.java @@ -0,0 +1,145 @@ +package com.actionsoft.apps.coe.pal.teamwork.model; + +import java.util.List; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; +import com.actionsoft.bpms.util.UtilString; + +/** + * 小组成员的操作权限 + * + * @author jack + * + */ +public final class TeamMemberPermModel extends ModelBean { + private static final long serialVersionUID = 1L; + private String id; + private String teamId; + private String userId; + private String actionType; + private String extendApps; + + private List teamMemberPermExtendModel; + + public TeamMemberPermModel() { + } + + /** + * 获取唯一标识,一个36位串 + * @return 唯一标识 + */ + public String getId() { + return id; + } + + /** + * 设置id + * @param id 唯一标识,一个36位串 + */ + public void setId(String id) { + this.id = id; + } + + /** + * 小组Id标识,一个36位串。如来自工作网络的小组Id + * + * @return 小组id + */ + public String getTeamId() { + return teamId; + } + + /** + * 设置小组Id + * + * @param teamId 一个36位串。如来自工作网络的小组Id,也可以是自行扩展的任何小组Id + */ + public void setTeamId(String teamId) { + this.teamId = teamId; + } + + /** + * 一个合法的AWS账户 + * + * @return AWS账户 + */ + public String getUserId() { + return userId; + } + + /** + * 设置账户Id,该账户对于业务场景,应该属于该小组的成员 + * + * @param userId 一个合法的AWS账户 + */ + public void setUserId(String userId) { + this.userId = userId; + } + + /** + * 被许可的操作代码组合,不含R权限(读),所有team成员都可只读浏览小组内的文件 + * + * @return 被许可的操作代码,多个用逗号隔开 + */ + public String getActionType() { + if (!UtilString.isEmpty(actionType) && !actionType.endsWith(",")) { + actionType = actionType + ","; + } + if (actionType == null) + actionType = ""; + return actionType; + } + + /** + * 设置账户对小组文件的操作权限 + * + * @param actionType 被许可的操作代码,多个用逗号隔开 + */ + public void setActionType(String actionType) { + this.actionType = actionType; + } + + /** + * 获取可访问扩展应用权限,多个用逗号隔开 + * @return 可访问扩展应用权限,多个用逗号隔开 + */ + public String getExtendApps() { + if (extendApps == null) + extendApps = ""; + return extendApps; + } + + /** + * 设置可访问扩展应用权限 + * @param extendApps 可访问扩展应用权限,多个用逗号隔开 + */ + public void setExtendApps(String extendApps) { + this.extendApps = extendApps; + } + + /** + * 比较TeamMemberPermModel对象的id是否相同 + * @param o TeamMemberPermModel对象 + */ + public boolean equals(Object o){ + return (o instanceof TeamMemberPermModel) && ((TeamMemberPermModel)o).getId().equals(getId()); + } + + /** + * 获取小组成员的可操作的流程范围权限的关联关系 + * @return 小组成员的可操作的流程范围权限的关联关系集合 + */ + public List getTeamMemberPermExtendModel() { + return teamMemberPermExtendModel; + } + + /** + * 设置小组成员的可操作的流程范围权限 + * @param teamMemberPermExtendModel 小组成员与流程关联关系对象 + */ + public void setTeamMemberPermExtendModel(List teamMemberPermExtendModel) { + this.teamMemberPermExtendModel = teamMemberPermExtendModel; + } + + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/model/TeamPermModel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/model/TeamPermModel.java new file mode 100644 index 00000000..e5880880 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/model/TeamPermModel.java @@ -0,0 +1,91 @@ +package com.actionsoft.apps.coe.pal.teamwork.model; + +import com.actionsoft.bpms.commons.mvc.model.ModelBean; + +/** + * 小组权限资源 + * + * @author jack + * + */ +public final class TeamPermModel extends ModelBean { + private static final long serialVersionUID = 1L; + private String id; + private String teamId; + private String wsId; + private int permType; + private String resourceId; + + public TeamPermModel() { + } + + /** + * 唯一标识,一个36位串 + * + * @return + */ + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + /** + * 小组Id标识,一个36位串。如来自工作网络的小组Id + * + * @return + */ + public String getTeamId() { + return teamId; + } + + public void setTeamId(String teamId) { + this.teamId = teamId; + } + + /** + * 资产库Id标识,一个36位串 + * + * @return + */ + public String getWsId() { + return wsId; + } + + public void setWsId(String wsId) { + this.wsId = wsId; + } + + /** + * 权限资源类型 + * + * @return + */ + public int getPermType() { + return permType; + } + + public void setPermType(int permType) { + this.permType = permType; + } + + /** + * 对应权限资源类型的对象Id + * + * @return + */ + public String getResourceId() { + return resourceId; + } + + public void setResourceId(String resourceId) { + this.resourceId = resourceId; + } + + public boolean equals(Object o){ + return (o instanceof TeamPermModel) && ((TeamPermModel)o).getId().equals(getId()); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/plugin/CoETeamWorkAppProfile.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/plugin/CoETeamWorkAppProfile.java new file mode 100644 index 00000000..587e786a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/plugin/CoETeamWorkAppProfile.java @@ -0,0 +1,79 @@ +package com.actionsoft.apps.coe.pal.teamwork.plugin; + +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.bpms.util.UtilString; + +/** + * 流程团队应用扩展描述。这类App通过TeamWorkAppManager完成注册。如果被重复注册,报表生成器标题相同时按最后一次注册的配置配置 + * + * @author jack + * @deprecated + */ +public final class CoETeamWorkAppProfile { + private AppContext appContext; + private String title; + private String mainClass; + private String deletedClass; + + public CoETeamWorkAppProfile() { + } + + /** + * 应用对象,如果该应用被停用,该Profile不会出现在可用状态 + * + * @return + */ + public AppContext getAppContext() { + return appContext; + } + + public void setAppContext(AppContext appContext) { + this.appContext = appContext; + } + + /** + * 应用标题 + * + * @return + */ + public String getTitle() { + if (UtilString.isEmpty(title)) { + return appContext.getName(); + } else { + return title; + } + } + + public void setTitle(String title) { + this.title = title; + } + + /** + * 对方App提供的一个ActionWeb类路径名称,提供一个约定的getHome(String + * teamId)方法,返回一个完整的入口html页面,以iframe嵌入至工作区域 + * + * @return 一个类路径 + */ + public String getMainClass() { + return mainClass; + } + + public void setMainClass(String mainClass) { + this.mainClass = mainClass; + } + + /** + * 对方App提供的一个普通Java类路径名,提供一个约定execute(String + * teamId)方法,当小组被删除时回调。开发者可以在这里删除垃圾、配置信息,但不建议删除业务数据信息 + * + * @return 可选。一个类路径 + */ + public String getDeletedClass() { + return deletedClass; + } + + public void setDeletedClass(String deletedClass) { + this.deletedClass = deletedClass; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/plugin/CoEWorkTeamAppManager.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/plugin/CoEWorkTeamAppManager.java new file mode 100644 index 00000000..199a34eb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/plugin/CoEWorkTeamAppManager.java @@ -0,0 +1,64 @@ +package com.actionsoft.apps.coe.pal.teamwork.plugin; + +import java.util.ArrayList; +import java.util.List; + +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.sdk.local.SDK; + +/** + * 注册流程团队应用,获得有效的流程团队应用 + * + * @author jack + * @deprecated + */ +public final class CoEWorkTeamAppManager { + private static List _list = new ArrayList<>(); + + private CoEWorkTeamAppManager() { + } + + /** + * 注册 + * + * @param app 具体的App实现对象 + * @param title 报表标题,可以为null + * @param mainClass 对方App提供的一个ActionWeb类路径名称,提供一个约定的getHome(String + * teamId)方法,返回一个完整的入口html页面,以iframe嵌入至工作区域 + * @param deletedClass 对方App提供的一个普通Java类路径名,提供一个约定execute(String + * teamId)方法,当小组被删除时回调。开发者可以在这里删除垃圾、配置信息,但不建议删除业务数据信息 + */ + public static void register(AppContext app, String title, String mainClass, String deletedClass) { + CoETeamWorkAppProfile profile = new CoETeamWorkAppProfile(); + profile.setDeletedClass(deletedClass); + profile.setMainClass(mainClass); + profile.setTitle(title); + profile.setAppContext(app); + boolean isUpdate = false; + for (CoETeamWorkAppProfile p : _list) { + if (p.getAppContext().getId().equals(app.getId()) && p.getTitle().equals(profile.getTitle())) { + isUpdate = true; + break; + } + } + if (!isUpdate) { + _list.add(profile); + } + } + + /** + * 有效的扩展应用App + * + * @return + */ + public static List getList() { + List list = new ArrayList<>(); + for (CoETeamWorkAppProfile p : _list) { + if (SDK.getAppAPI().isActive(p.getAppContext().getId())) { + list.add(p); + } + } + return list; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/web/ProcessPublishWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/web/ProcessPublishWeb.java new file mode 100644 index 00000000..a126204f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/web/ProcessPublishWeb.java @@ -0,0 +1,123 @@ +package com.actionsoft.apps.coe.pal.teamwork.web; + +import java.sql.Timestamp; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.apps.coe.pal.pal.manage.publish.dao.PublishListHistory; +import com.actionsoft.apps.coe.pal.pal.manage.publish.model.PublishListHistoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.teamwork.dao.ProcessPublish; + +/** + * 流程发布App + * + */ +public class ProcessPublishWeb extends ActionWeb { + private UserContext _uc; + + public ProcessPublishWeb(UserContext userContext) { + super(userContext); + _uc = userContext; + } + + public String getPublishAddData(String processInstId) { + List> list = new ProcessPublish().getPublishAddData(processInstId); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(list); + return ro.toString(); + } + + public String getPublishStopData(String processInstId) { + List> list = new ProcessPublish().getPublishStopData(processInstId); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(list); + return ro.toString(); + } + + public String getPublishChangeData(String processInstId) { + List> list = new ProcessPublish().getPublishChangeData(processInstId); + ResponseObject ro = ResponseObject.newOkResponse(); + ro.setData(list); + return ro.toString(); + } + + /** + * 对应于流程发布新增,停用,变更三个弹窗的json数据,暂时用 + * 的给定的wsid和teamId,此两项参数应该在新建立该流程的时候动态获得 + * + * @param wsid + * @param teamId + * @return + */ + public String PALPublisherData(String wsid, String teamId) { + // ResponseObject res = ResponseObject.newOkResponse(); + wsid = "012ce44a-6a05-40cb-989e-b3bfe2258a61"; + teamId = "1c248226-673e-4b74-85f5-6254dcf6df84"; + String treeData = "[]"; + // if (!"".equals(wsid)) { + treeData = getTreeData(wsid, teamId); + // } + // res.setData(treeData); + System.out.println(treeData); + Map map = new HashMap(); + map.put("treeData", treeData); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "coe.pal.publish.add.htm", map); + + } + + private String getTreeData(String wsId, String teamId) { + String treeData; + JSONArray jsonArr = new JSONArray(); + treeData = jsonArr.toString(); + return treeData; + } + + /** + * 获取资产库文件发布历史 + * + * @param repositoryId + * @param wsId + * @return + */ + public String getPublishHistoryList(String repositoryId, String wsId) { + PublishListHistory dao = new PublishListHistory(); + List list = dao.getRepositoryListByResourceId(repositoryId, wsId); + JSONArray jsonArray = new JSONArray(); + + if (list != null && list.size() > 0) { + for (PublishListHistoryModel publishModel : list) { + JSONObject object = new JSONObject(); + Timestamp publishDate = publishModel.getPublishDate(); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + object.put("publishDate", df.format(publishDate)); + object.put("publishType", publishModel.getActionType()); + object.put("publishDesc", publishModel.getPublishDesc()); + PALRepositoryModel process = PALRepositoryCache.getCache().get(publishModel.getPalRepositoryId()); + if (process != null) { + object.put("plId", process.getId()); + object.put("plName", process.getName()); + } + + jsonArray.add(object); + } + } + + ResponseObject ro = ResponseObject.newOkResponse(jsonArray.toString()); + return ro.toString(); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/web/TeamWorkManagerWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/web/TeamWorkManagerWeb.java new file mode 100644 index 00000000..81b77b26 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/teamwork/web/TeamWorkManagerWeb.java @@ -0,0 +1,351 @@ +package com.actionsoft.apps.coe.pal.teamwork.web; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.actionsoft.apps.coe.pal.constant.CoEConstant; +import com.actionsoft.apps.coe.pal.cooperation.CoeCooperationAPIManager; +import com.actionsoft.apps.coe.pal.pal.output.dao.OutputTask; +import com.actionsoft.apps.coe.pal.pal.output.model.OutputTaskModel; +import com.actionsoft.apps.coe.pal.pal.repository.web.CoeProcessLevelWeb; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.lifecycle.api.AppsAPIManager; +import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate; +import com.actionsoft.bpms.commons.mvc.view.ActionWeb; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; +import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; +import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpace; +import com.actionsoft.apps.coe.pal.pal.ws.dao.CoeWorkSpaceDaoFactory; +import com.actionsoft.apps.coe.pal.pal.ws.model.CoeWorkSpaceModel; +import com.actionsoft.apps.coe.pal.teamwork.cache.TeamPermCache; +import com.actionsoft.apps.coe.pal.teamwork.dao.TeamPerm; +import com.actionsoft.apps.coe.pal.teamwork.model.TeamPermModel; +import com.actionsoft.i18n.I18nRes; +import com.actionsoft.sdk.local.SDK; +import com.actionsoft.sdk.local.api.AppAPI; + +/** + * PAL资产库管理>工作网络下小组资源管理 + * + */ +public class TeamWorkManagerWeb extends ActionWeb { + private UserContext _uc; + + public TeamWorkManagerWeb(UserContext userContext) { + super(userContext); + _uc = userContext; + } + + /** + * 获取活动的工作网络数据 + * @return + */ + public String getNetworkList(String wsId) { + JSONArray networkList = new JSONArray(); + //判断流程团队App是否安装并使用 + boolean isActive = AppsAPIManager.getInstance().isActive("com.actionsoft.apps.coe.teamwork"); + CoeWorkSpace wsDao = new CoeWorkSpace(); + CoeWorkSpaceModel wsModel = wsDao.getInstance(wsId); + String uid = this.getContext().getUID(); + boolean isAdmin = false; + if (wsModel.getWsAdmin() != null) { + String[] wsAdmins = wsModel.getWsAdmin().split(","); + for (String wsAdmin : wsAdmins) { + if (uid.equals(wsAdmin)) { + isAdmin = true; + break; + } + } + } + if (isActive && isAdmin) { + JSONObject networkRoot = new JSONObject(); + networkRoot.put("id", "0"); + networkRoot.put("name", "流程团队"); + networkRoot.put("open", true); + networkRoot.put("icon", "../apps/" + CoEConstant.APP_ID + "/img/teamwork.png"); + networkList.add(networkRoot); + + AppAPI appAPI = SDK.getAppAPI(); + String aslp = "aslp://com.actionsoft.apps.network/queryAllNetwork"; + Map params = new HashMap(); + params.put("sid", _uc.getSessionId()); + ResponseObject ro = appAPI.callASLP(appAPI.getAppContext(CoEConstant.APP_ID), aslp, params); + if (ro.toJsonObject().get("data") != null) { + JSONArray networks = (JSONObject.parseObject(ro.toJsonObject().toString()).getJSONObject("data")).getJSONArray("networks"); + for (int i = 0; i < networks.size(); i++) { + JSONObject network = networks.getJSONObject(i); + JSONObject object = new JSONObject(); + object.put("id", network.getString("id")); + object.put("pid", "0"); + object.put("name", network.getString("networkName")); + if (!"".equals(network.getString("networkLogo"))) { + object.put("icon", network.getString("networkLogo")); + } + object.put("title", network.getString("networkName")); + networkList.add(object); + } + } + } + ResponseObject responseObject = ResponseObject.newOkResponse(networkList.toString()); + return responseObject.toString(); + } + + /** + * 小组成员权限设置页面 + * @param wsId 资产库ID + * @param networkId 工作网络id + * @return + */ + public String getNetworkTeamList(String wsId, String networkId) { + Map teamMap = new LinkedHashMap(); + StringBuilder html = new StringBuilder(); + //获取工作网络中所有小组 + AppAPI appAPI = SDK.getAppAPI(); + Map params = new HashMap(); + String aslp = "aslp://com.actionsoft.apps.network/queryTeamsByAppId"; + params.put("networkId", networkId); + params.put("appId", "com.actionsoft.apps.coe.teamwork"); + params.put("title", "流程团队"); + params.put("sid", _uc.getSessionId()); + ResponseObject ro = appAPI.callASLP(appAPI.getAppContext(CoEConstant.APP_ID), aslp, params); + if (ro.toJsonObject().get("data") != null ) { + JSONArray teams = (JSONObject.parseObject(ro.toJsonObject().toString()).getJSONObject("data")).getJSONArray("teams"); + if (teams != null && teams.size() > 0) { + for (int i = 0; i < teams.size(); i++) { + JSONObject team = teams.getJSONObject(i); + if ("1".equals(team.getString("teamStatus"))) + teamMap.put(team.getString("id"), team); + } + } + // 无数据设置 + if (teamMap.size() == 0) { + return SDK.getPortalAPI().getMessagePageOfNoContent(I18nRes.findValue(AppsConst.SYS_APP_PLATFORM,"无数据"), null); + } + int i = 0; + for (Map.Entry entry : teamMap.entrySet()) { + JSONObject object = entry.getValue(); + String teamType = object.getString("teamType"); + String teamTypeIcon = "../apps/com.actionsoft.apps.network/img/team/type_" + teamType + ".png"; + String teamTypeName = ""; + if ("1".equals(teamType)) { + teamTypeName = "公共"; + } else if ("2".equals(teamType)) { + teamTypeName = "私有"; + } else if ("3".equals(teamType)) { + teamTypeName = "私密"; + } + String teamLogo = object.getString("teamLogo"); + String teamLogoSrc = "".equals(teamLogo) ? "../apps/com.actionsoft.apps.network/img/team/logo_2.png" : teamLogo; + teamLogo = ""; + + int teamMembersNum = object.getInteger("memberAmount") == null ? 0 : object.getInteger("memberAmount"); + String teamManager = object.getString("teamManager"); + String classType = (i%2 == 0) ? "aws-grid-row" : "aws-grid-row aws-grid-oddRow"; + //白色 已设置 + + String button = ""; + List teamPerms = TeamPermCache.getPALListOfTeam(object.getString("id")); + if (teamPerms != null && teamPerms.size() > 0) { + if (wsId.equals(teamPerms.get(0).getWsId())) { + button = ""; + } else { + button = ""; + } + } + html.append("" + +" " + +"
      " + +"
      " + teamLogo + "
      " + +"
      " + +"
      " + object.getString("teamName") + "
      " + +"
      " + teamTypeName + ",成员 " + teamMembersNum + " 人
      " + +"
      " + +"
      " + +" " + +" " + object.getString("createTime") + "" + +" " + object.getString("lastActive") + "" + +"
      " + teamManager + "
      " + +" " + button + "" + +""); + i++; + } + } + + Map macroLibraries = new HashMap(); + macroLibraries.put("sid", super.getContext().getSessionId()); + macroLibraries.put("wsId", wsId); + macroLibraries.put("tbody", html); + return HtmlPageTemplate.merge(CoEConstant.APP_ID, "teamwork.processmodeling.teamperm.html", macroLibraries); + } + + /** + * 根据小组Id和资产库Id,判断该小组是否在资产库中设置权限 + * @param wsId + * @param teamId + * @return + * @author tanj + */ + public String setUpTeamPerm(String wsId, String teamId) { + Iterator teamPerms = TeamPermCache.getCache().iterator(); + List teamPermModelList = TeamPermCache.iteratorToList(teamPerms); + Set cannotUpdateIds = new HashSet(); + if (teamPermModelList != null && teamPermModelList.size() > 0) { + for (TeamPermModel teamPermModel : teamPermModelList) { + if (!wsId.equals(teamPermModel.getWsId())) { + cannotUpdateIds.add(teamPermModel.getTeamId()); + } + } + } + if (cannotUpdateIds.contains(teamId)) { + List teamPermModels = TeamPermCache.getPALListOfTeam(teamId); + CoeWorkSpaceModel ws = CoeWorkSpaceDaoFactory.createCoeWorkSpace().getInstance(teamPermModels.get(0).getWsId()); + String wsName = ws.getWsName(); + ResponseObject ro = ResponseObject.newOkResponse(wsName); + return ro.toString(); + } + ResponseObject ro = ResponseObject.newErrResponse(); + return ro.toString(); + } + + /** + * 根据小组Id和资产库Id,获得小组的资产库文件权限 + * + * @param teamId + * @return + */ + public String getTeamPerm(String teamId, String wsId) { + // 获取树节点 + JSONArray treeData = PALRepositoryQueryAPIManager.getInstance().getPalRepositoryTreeRootData(_uc, wsId, null, "isUsed"); + // 获取根节点 + JSONArray ids = new JSONArray(); + JSONArray versionIds = new JSONArray(); + JSONObject names = new JSONObject(); + List teamPerms = TeamPermCache.getPALListOfTeam(teamId); + if (teamPerms != null && teamPerms.size() > 0) { + for (TeamPermModel model : teamPerms) { + versionIds.add(model.getResourceId()); + List list = PALRepositoryCache.getByVersionId(model.getWsId(), model.getResourceId()); + String name = ""; + for (PALRepositoryModel process : list) { + if (process.isUse()) { + name = process.getName(); + names.put(model.getResourceId(), name); + ids.add(process.getId()); + break; + } + } + + } + } + + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("treeData", treeData); + ro.put("ids", ids); + ro.put("versionIds", versionIds); + ro.put("names", names); + return ro.toString(); + } + + /** + * 判断文件链接权限 + * + * @param uuids 链接的文件Id + * @param modelType used/published + * @param filePerms 所有有权限的文件:"-"表示没有权限限制 + * @return + * @author zhangming + */ + public String getPalLinkPerm(String uuids, String modelType, String filePerms) { + /* + * 判断是否进行权限判断, + * 如果不需要,根据modelType获取相应的发布版本Id或正在使用的版本Id; + * 如果需要,根据filePerms获取对应的versionIds,判断uuids对应的versionId是否包含在versionIds中,然后根据modelType获取相应Id + */ + ResponseObject ro = ResponseObject.newOkResponse(); + + JSONArray result = new JSONArray(); + + String filePermVersionIds = "-"; + if (filePerms != null && !"".equals(filePerms) && !"-".equals(filePerms)) { + String[] filePermIds = filePerms.split(","); + StringBuilder sb = new StringBuilder(""); + for (String filePermId : filePermIds) { + PALRepositoryModel model = PALRepositoryCache.getCache().get(filePermId); + if (model != null) { + sb.append(model.getVersionId()).append(","); + } + } + filePermVersionIds = sb.toString(); + } + + PALRepository dao = new PALRepository(); + if (uuids != null && !"".equals(uuids)) { + String[] linkUUIDs = uuids.split(","); + if (linkUUIDs.length == 1){ + //三员管理,流程文件密级switch开启,密级权限校验 + if (HighSecurityUtil.isON() && HighSecurityUtil.fileSecuritySwitch()){ + CoeProcessLevelWeb web = new CoeProcessLevelWeb(_uc); + ResponseObject responseObject = web.checkFilePemission(linkUUIDs[0]); + if (responseObject.isErr()){ + return responseObject.toString(); + } + } + //文件权限校验 + if (!CoeCooperationAPIManager.getInstance().hasRepositoryPermision(linkUUIDs[0])){ + ro = ResponseObject.newErrResponse().msg("无文件访问权限!"); + return ro.toString(); + } + } + for (String linkUUID : linkUUIDs) { + //文件密级过滤 + if (HighSecurityUtil.isON() && HighSecurityUtil.fileSecuritySwitch()){ + CoeProcessLevelWeb web = new CoeProcessLevelWeb(_uc); + ResponseObject responseObject = web.checkFilePemission(linkUUID); + if (responseObject.isErr()){ + continue; + } + } + //文件权限过滤 + if (!CoeCooperationAPIManager.getInstance().hasRepositoryPermision(linkUUID)){ + continue; + } + PALRepositoryModel model = PALRepositoryCache.getCache().get(linkUUID); + if (model == null) { + continue; + } + if ("used".equals(modelType) && model.isUse() || "published".equals(modelType) && model.isPublish()) { + } else { + model = dao.getUserOrPublishedVersionId(model.getVersionId(), modelType); + } + if ("-".equals(filePermVersionIds) || !"-".equals(filePermVersionIds) && filePermVersionIds.contains(model.getId())) { + JSONObject object = new JSONObject(); + object.put("linkUUID", linkUUID); + object.put("uuid", model.getId()); + result.add(object); + } + } + } + + ro.put("uuids", result); + return ro.toString(); + } + + public String getRepositoryTreeData(String wsId, String pid) { + return PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryTreeDataByPid(_uc, wsId, pid).toString(); + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/BpmOrgUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/BpmOrgUtil.java new file mode 100644 index 00000000..eb6ee8c3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/BpmOrgUtil.java @@ -0,0 +1,34 @@ +package com.actionsoft.apps.coe.pal.util; + +/** + * BPM组织架构相关 + */ +public class BpmOrgUtil { + + public static final String ORG_ROOT_ICON_CODE = "";// 组织根节点icon code + public static final String ORG_ROOT_ICON_COLOR = "rgb(230, 155, 67)";// 组织根节点icon color + public static final String COMPANY_ICON_CODE = "";// 单位节点icon code + public static final String COMPANY_ICON_COLOR = "#1296db";// 单位节点icon color + public static final String DEPARTMENT_ICON_CODE = "";// 部门节点icon code + public static final String DEPARTMENT_ICON_COLOR = "#555";// 部门节点icon color + public static final String NORMAL_USER_ICON_CODE = "";// 普通用户节点icon code + public static final String NORMAL_USER_ICON_COLOR = "#555";// 普通用户节点icon color + public static final String MANAGER_USER_ICON_CODE = "";// 部门管理员用户节点icon code + public static final String MANAGER_USER_ICON_COLOR = "#E8574E";// 部门管理员用户节点icon color + + public static final String ROLE_ROOT_ICON_CODE = "";// 角色根节点icon code + public static final String ROLE_ROOT_ICON_COLOR = "rgb(230, 155, 67)";// 角色根节点icon color + public static final String ROLE_GROUP_ICON_CODE = "";// 角色组节点icon code + public static final String ROLE_GROUP_ICON_COLOR = "rgb(230, 155, 67)";// 角色组节点icon color + public static final String ROLE_ICON_CODE = "";// 角色节点icon code + public static final String ROLE_ICON_COLOR = "#555";// 角色节点icon color + + + public static final String POSITION_ROOT_ICON_CODE = "";// 岗位根节点icon code + public static final String POSITION_ROOT_ICON_COLOR = "rgb(230, 155, 67)";// 岗位根节点icon color + public static final String POSITION_GROUP_ICON_CODE = "";// 岗位组节点icon code + public static final String POSITION_GROUP_ICON_COLOR = "rgb(230, 155, 67)";// 岗位组节点icon color + public static final String POSITION_ICON_CODE = "";// 岗位节点icon code + public static final String POSITION_ICON_COLOR = "#008ED5";// 岗位节点icon color + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/CoEInitUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/CoEInitUtil.java new file mode 100644 index 00000000..f380a648 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/CoEInitUtil.java @@ -0,0 +1,140 @@ +/* + * Copyright(C)2001-2012 Actionsoft Co.,Ltd + * AWS(Actionsoft workflow suite) BPM(Business Process Management) PLATFORM Source code + * AWS is a application middleware for BPM System + + + * 本软件工程编译的二进制文件及源码版权归北京炎黄盈动科技发展有限责任公司所有, + * 受中国国家版权局备案及相关法律保护,未经书面法律许可,任何个人或组织都不得泄漏、 + * 传播此源码文件的全部或部分文件,不得对编译文件进行逆向工程,违者必究。 + + * $$本源码是炎黄盈动最高保密级别的文件$$ + * + * http://www.actionsoft.com.cn + * + */ + +package com.actionsoft.apps.coe.pal.util; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; + +import com.actionsoft.bpms.server.Quota; +import com.actionsoft.bpms.util.UtilDate; +import com.actionsoft.apps.coe.pal.install.dao.CoeIniDaoFactory; +import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; + +/** + * coe重构 此类原名:BPAInitUtil.java 此类原路径:com.actionsoft.bpms.workflow.analysis.init.util 重构日期:2012-8-29 + * + * @author 周璇 + * + */ +public class CoEInitUtil { + + public static CoEInitUtil getInstance() { + return new CoEInitUtil(); + } + + + + + public boolean isWeekEnd(Date date) { + Date lastWeek = UtilDate.getLastDayOfWeek(date); + if (isSameDate(lastWeek, date)) { + return true; + } + return false; + } + + public boolean isMonthEnd(Date date) { + Date lastMonth = UtilDate.getLastDayOfMonth(date); + if (isSameDate(lastMonth, date)) { + return true; + } + return false; + } + + public boolean isQuarterEnd(Date date) { + if (UtilDate.getMonth(date) == 3 && UtilDate.getDay(date) == 31) { + return true; + } else if (UtilDate.getMonth(date) == 6 && UtilDate.getDay(date) == 30) { + return true; + } else if (UtilDate.getMonth(date) == 9 && UtilDate.getDay(date) == 30) { + return true; + } else if (UtilDate.getMonth(date) == 12 && UtilDate.getDay(date) == 31) { + return true; + } + return false; + } + + public boolean isYearEnd(Date date) { + if (UtilDate.getMonth(date) == 12 && UtilDate.getDay(date) == 31) { + return true; + } + return false; + } + + public boolean isSameDate(Date date, Date date2) { + Date curDate = date2; + if (curDate == null) { + curDate = new Date(); + } + if (date != null) { + if (UtilDate.getYear(curDate) == UtilDate.getYear(date) && UtilDate.getMonth(curDate) == UtilDate.getMonth(date) && UtilDate.getDay(curDate) == UtilDate.getDay(date)) { + return true; + } + } + return false; + } + + public ArrayList getDelayDateList(Date dateFrom, Date today) { + ArrayList list = new ArrayList(); + Calendar a = Calendar.getInstance(); + a.setTime(dateFrom); + while (dateFrom.before(today) || isSameDate(a.getTime(), today)) { + // System.out.println(DateFormat.getDateInstance().format(a.getTime())); + // 初始值 不算是 + if (!isSameDate(a.getTime(), dateFrom)) { + list.add(a.getTime()); + } + // 到达同一天了 就证明是最后一个结果了 + if (isSameDate(a.getTime(), today)) { + break; + } else { + a.add(Calendar.DAY_OF_YEAR, 1); + } + + } + return list; + } + + /** + * 判断是否初始化完毕 + * + * @return 周璇 + */ + public static boolean isCoeInitEnd() { + if (!(Quota.isCoE())) {// 没有CoE权限 + return false; + } + String initStep = CoePropertyUtil.getPropertyValue("InitStep"); + if (CoeIniDaoFactory.createCoeIni().isInit() <= 0) { + return false;// COE未初始化第一步 + } + if (initStep != null) { + if (Integer.parseInt(initStep) < 6) { + return false;// COE初始化未结束 + } + } + return true; + } + + public static void main(String[] args) { + Calendar a = Calendar.getInstance(); + a.setTime(new Date()); + a.add(Calendar.DAY_OF_YEAR, 1); + new CoEInitUtil().getDelayDateList(a.getTime(), new Date()); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/HighSecurityUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/HighSecurityUtil.java new file mode 100644 index 00000000..8d507dd8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/HighSecurityUtil.java @@ -0,0 +1,226 @@ +package com.actionsoft.apps.coe.pal.util; + +import com.actionsoft.apps.AppsConst; +import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.model.UpfileModel; +import com.actionsoft.bpms.commons.security.high.HighSecurity; +// import com.actionsoft.bpms.commons.security.high.extend.HighSecurityExtendHelper; +import com.actionsoft.bpms.org.model.UserModel; +import com.actionsoft.bpms.server.DispatcherRequest; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.util.UtilString; +import com.actionsoft.i18n.I18nRes; +import com.actionsoft.sdk.local.SDK; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import java.lang.reflect.Field; +import java.util.*; + +/** + * 三员相关 + */ +public class HighSecurityUtil { + + /** + * 是否开启三员 + * @return true 开启 false 未开启 + */ + public static boolean isON() { + return HighSecurity.isON(); + } + + /** + * 是否允许指定用户登录PAL客户端 + * @param userId + * @return + */ + public static Boolean allow3PLoginPal(String userId) { + if (isON()) { + // 三员模式下只允许安全保密员登录PAL + if (isSecAdminUser(userId)) { + return true; + } else if (isSysAdminUser(userId) || isAuditorUser(userId)){ + return false; + } else { + return true; + } + } + return true; + } + + /** + * 获取默认的安全保密员账号(不包括衍生) + * @return List 用户ID集合 + */ + public static List getSysAdminList() { + if (!isON()) { + return new ArrayList<>(); + } + List result = new ArrayList<>(); + String userIds = HighSecurity.getSecModel().getSysAdmin(); + String [] arr = userIds.split(" "); + for (int i = 0; i < arr.length; i++) { + if (UtilString.isNotEmpty(arr[i])) { + result.add(arr[i]); + } + } + return result; + } + + /** + * 获取默认的安全保密员系统管理员账号(不包括衍生) + * @return List 用户ID集合 + */ + public static List getSecAdminList() { + if (!isON()) { + return new ArrayList<>(); + } + List result = new ArrayList<>(); + String userIds = HighSecurity.getSecModel().getSecAdmin(); + String [] arr = userIds.split(" "); + for (int i = 0; i < arr.length; i++) { + if (UtilString.isNotEmpty(arr[i])) { + result.add(arr[i]); + } + } + return result; + } + + /** + * 获取默认的安全审计员账号(不包括衍生) + * @return List 用户ID集合 + */ + public static List getAuditorList() { + if (!isON()) { + return new ArrayList<>(); + } + List result = new ArrayList<>(); + String userIds = HighSecurity.getSecModel().getAuditor(); + String [] arr = userIds.split(" "); + for (int i = 0; i < arr.length; i++) { + if (UtilString.isNotEmpty(arr[i])) { + result.add(arr[i]); + } + } + return result; + } + + /** + * 判定是否是系统管理员用户(不包括衍生) + * @return true 是 false 不是 + */ + public static Boolean isSysAdminUser(String userId) { + List userList = getSysAdminList(); + return userList.contains(userId); + } + + /** + * 判断是否是安全保密员用户(不包括衍生) + * @return true 是 false 不是 + */ + public static Boolean isSecAdminUser(String userId) { + List userList = getSecAdminList(); + return userList.contains(userId); + } + + /** + * 判断是否是安全审计员用户(不包括衍生) + * @return true 是 false 不是 + */ + public static Boolean isAuditorUser(String userId) { + List userList = getAuditorList(); + return userList.contains(userId); + } + + /** + * 获取平台的对象秘级参数设置 + * @return 有序hashMap key:密级key,value:密级value + */ + public static HashMap getObjSecurityMap() { + UserContext userContext = DispatcherRequest.getUserContext(); + Map params = new HashMap<>(); + LinkedHashMap form = null;// HighSecurityExtendHelper.getSecurityLevelList("PALSecurity", userContext, null, params); + if (null == form){ + HashMap result = new LinkedHashMap<>(); + List> list = HighSecurity.getSecModel().getFormSecurityList(); + for (List secParam : list) { + String label = I18nRes.findValue(AppsConst.SYS_APP_PLATFORM, secParam.get(1)); + if (!UtilString.isEmpty(label)){ + result.put(secParam.get(0), label); + } + } + return result; + }else{ + return form; + } + + } + + /** + * 判断指定用户的密级是否>= 指定密级 + * @param model 指定用户 + * @param level 密级等级 + * @return + */ + private static boolean hasSecurityLevel(UserModel model,int level){ + return HighSecurity.hasSecurityLevel(model,level); + } + + /** + * 三员管理密级权限校验,支持平台拓展实现 + * 默认使用用户 与 level进行校验; + * model不为null则需要双重校验,用户级别与流程文件级别(PALRepositoryModel) + * @param uc + * @param level 待校验密级 + * @param model 附件或者文件类型对象 + * @return + */ + public static boolean hasSecurityLevel(UserContext uc, int level,Object model){ + + String type = ""; + if (model instanceof UpfileModel || null == model){ + type = "UpfileModel"; + }else if (model instanceof PALRepositoryModel){ + type = "RepositoryModel"; + }else{ + return false; + } + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("type",type);//"UpfileModel/RepositoryModel" + jsonObject.put("securityLevel", level); + Map params = new HashMap<>(); + Boolean b = null;// HighSecurityExtendHelper.checkObject(uc, jsonObject, params); + if (b == null) { + boolean userSecurity = hasSecurityLevel(uc.getUserModel(), level); + if (type.equals("UpfileModel")){ + return userSecurity; + }else { + return userSecurity && hasSecurityLevel((PALRepositoryModel)model,level); + } + } else { + return b; + } + } + + private static boolean hasSecurityLevel(PALRepositoryModel plModel,int level){ + if (plModel.getSecurityLevel() != -1 && plModel.getSecurityLevel() < level) { + return false; + } + return true; + } + /** + * 流程文件密级标定switch + * @return + */ + public static boolean fileSecuritySwitch(){ + final String param = SDK.getAppAPI().getProperty("com.actionsoft.apps.coe.pal", "fileHighSecurity"); + if (null == param || "".equals(param)){ + return false; + } + boolean fileSwitch = Boolean.parseBoolean(param); + return fileSwitch; + } + +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/JsonUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/JsonUtil.java new file mode 100644 index 00000000..66dd727e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/JsonUtil.java @@ -0,0 +1,43 @@ +package com.actionsoft.apps.coe.pal.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +public class JsonUtil { + //高并发时,可能会出现问题,防止服务器报错 + public static JSONObject fromObject(Object obj){ + int count =0; + while(true){ + try { + return JSONObject.parseObject(JSON.toJSONString(obj)); + } catch (Exception e) { + count++; + if(count>5){ + return null; + } + } + } + } + + /** + * @param jsonArray 形如"[{}]" + * @return + */ + public static int checkJsonArray(String jsonArray){ + int check =1; + if(jsonArray == null){ + check = 0; + return check; + } + if("".equals(jsonArray)){ + check = -1; + } + if("undefined".equals(jsonArray)){ + check = -2; + } + if(jsonArray.indexOf("[")==-1 && jsonArray.indexOf("]")==-1){ + check = -3; + } + return check ; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/ReadExcelUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/ReadExcelUtil.java new file mode 100644 index 00000000..8f7faa26 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/ReadExcelUtil.java @@ -0,0 +1,237 @@ +package com.actionsoft.apps.coe.pal.util; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import com.actionsoft.bpms.util.UtilString; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public class ReadExcelUtil { + public static final String OFFICE_EXCEL_2003_POSTFIX = "xls"; + public static final String OFFICE_EXCEL_2010_POSTFIX = "xlsx"; + + public JSONArray readExcel(String path, String[] normalTitles) throws IOException { + if (path == null || "".equals(path)) { + return null; + } else { + String postfix = getPostfix(path); + if (!"".equals(postfix)) { + if (OFFICE_EXCEL_2003_POSTFIX.equals(postfix)) { + return readXls(path, normalTitles); + } else if (OFFICE_EXCEL_2010_POSTFIX.equals(postfix)) { + return readXlsx(path, normalTitles); + } + } else { + // System.out.println(path + Common.NOT_EXCEL_FILE); + } + } + return null; + } + + public JSONArray readXlsx(String path, String[] normalTitles) throws IOException { + FileInputStream is = new FileInputStream(path); + XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is); + JSONArray list = new JSONArray(); + // Read the Sheet + for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) { + XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet); + if (xssfSheet == null) { + continue; + } else if (xssfSheet.getLastRowNum() <= 1) { + continue; + } + JSONObject sheet = new JSONObject(); + sheet.put("index", numSheet); + sheet.put("sheetName", xssfSheet.getSheetName()); + List titles = getTitle(xssfSheet.getRow(0)); + if (titles == null || titles.size() == 0) { + continue; + } + sheet.put("titles", titles); + //判断title是否符合规范 + if (titles == null || titles.size() == 0) { + continue; + } else if(normalTitles != null && normalTitles.length > 0) { + boolean isEquals = true; + if (normalTitles.length != titles.size()) { + isEquals = false; + continue; + } + for (int i = 0; i < normalTitles.length; i++) { + if (!normalTitles[i].toLowerCase().equals(titles.get(i))) { + isEquals = false; + break; + } + } + if (!isEquals) { + continue; + } + } + // Read the Row + JSONArray data = new JSONArray(); + for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) { + XSSFRow xssfRow = xssfSheet.getRow(rowNum); + if (xssfRow != null) { + JSONObject object = new JSONObject(); + for (int cellNum = 0; cellNum < titles.size(); cellNum++) { + XSSFCell cellValue = xssfRow.getCell(cellNum); + if (cellValue == null) { + break; + } + object.put(titles.get(cellNum), getValue(cellValue)); + } + data.add(object); + } + } + sheet.put("data", data); + list.add(sheet); + } + return list; + } + + public JSONArray readXls(String path, String[] normalTitles) throws IOException { + InputStream is = new FileInputStream(path); + HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is); + JSONArray list = new JSONArray(); + // Read the Sheet + for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) { + HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet); + if (hssfSheet == null) { + continue; + } else if (hssfSheet.getLastRowNum() < 1) { + continue; + } + JSONObject sheet = new JSONObject(); + sheet.put("sheetName", hssfSheet.getSheetName()); + List titles = getTitle(hssfSheet.getRow(0)); + //判断title是否符合规范 + if (titles == null || titles.size() == 0) { + continue; + } else if(normalTitles != null && normalTitles.length > 0) { + boolean isEquals = true; + if (normalTitles.length > titles.size()) { + isEquals = false; + continue; + } + for (int i = 0; i < normalTitles.length; i++) { + if (!normalTitles[i].toLowerCase().equals(titles.get(i))) { + isEquals = false; + break; + } + } + if (!isEquals) { + continue; + } + } + sheet.put("titles", titles); + // Read the Row + JSONArray data = new JSONArray(); + for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) { + HSSFRow hssfRow = hssfSheet.getRow(rowNum); + if (hssfRow != null) { + JSONObject object = new JSONObject(); + boolean emptyData = false; + for (int cellNum = 0; cellNum < normalTitles.length; cellNum++) { + HSSFCell cellValue = hssfRow.getCell(cellNum); + if ((cellNum == 0 || cellNum == 1) && (cellValue == null || UtilString.isEmpty(getValue(cellValue)))) { + emptyData = true; + break; + } + if (cellValue == null) { + break; + } + object.put(titles.get(cellNum), getValue(cellValue)); + } + if (!emptyData) { + data.add(object); + } + } + } + sheet.put("data", data); + list.add(sheet); + } + return list; + } + + public List getTitle(XSSFRow hssfRow) { + List titles = null; + if (hssfRow != null) { + titles = new ArrayList(); + Iterator its = hssfRow.cellIterator(); + while(its.hasNext()) { + Cell cell = its.next(); + String cellValue = cell.getStringCellValue(); + if (cellValue == null || "".equals(cellValue.trim())) { + break; + } + titles.add(cellValue.trim().toLowerCase().replace("*", "")); + } + } + + return titles; + } + + public List getTitle(HSSFRow hssfRow) { + List titles = null; + if (hssfRow != null) { + titles = new ArrayList(); + Iterator its = hssfRow.cellIterator(); + while(its.hasNext()) { + Cell cell = its.next(); + String cellValue = cell.getStringCellValue(); + if (cellValue == null || "".equals(cellValue.trim())) { + break; + } + titles.add(cellValue.trim().toLowerCase().replace("*", "")); + } + } + + return titles; + } + + private String getValue(XSSFCell xssfCell) { + if (xssfCell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { + return String.valueOf(xssfCell.getBooleanCellValue()); + } else if (xssfCell.getCellType() == Cell.CELL_TYPE_NUMERIC) { + return String.valueOf(xssfCell.getNumericCellValue()); + } else { + return String.valueOf(xssfCell.getStringCellValue()); + } + } + + private String getValue(HSSFCell hssfCell) { + if (hssfCell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { + return String.valueOf(hssfCell.getBooleanCellValue()); + } else if (hssfCell.getCellType() == Cell.CELL_TYPE_NUMERIC) { + return String.valueOf(hssfCell.getNumericCellValue()); + } else { + return String.valueOf(hssfCell.getStringCellValue()); + } + } + + public String getPostfix(String path) { + String postfix = ""; + if (path != null && !"".equals(path.trim())) { + path = path.trim(); + postfix = path.substring(path.lastIndexOf(".") + 1); + } + + return postfix; + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/StringHandleUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/StringHandleUtil.java new file mode 100644 index 00000000..b58ec045 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/StringHandleUtil.java @@ -0,0 +1,23 @@ +package com.actionsoft.apps.coe.pal.util; + +import java.util.regex.Pattern; + +public class StringHandleUtil { + + public static String replaceSpecialChart(String str) { + str = str.replace("<", "<").replace(">", ">").replace("\"", """); + return str; + } + + private static Pattern FilePattern = Pattern.compile("[\\\\/:*?\"<>|]"); + + /** + * 替换windows文件名特殊字符 + * + * @param str + * @return + */ + public static String filenameFilter(String str, String replaceChart) { + return str == null ? null : FilePattern.matcher(str).replaceAll(replaceChart == null ? "" : replaceChart); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/Table2Excel.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/Table2Excel.java new file mode 100644 index 00000000..00f3e1c6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/Table2Excel.java @@ -0,0 +1,94 @@ +package com.actionsoft.apps.coe.pal.util; + +import java.io.FileOutputStream; +import java.io.IOException; + +import com.alibaba.fastjson.JSONArray; + +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.VerticalAlignment; + +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.fs.AbstFileProcessor; +import com.actionsoft.bpms.server.fs.DCContext; +import com.actionsoft.bpms.server.fs.FileProcessorListener; +import com.actionsoft.bpms.server.fs.dc.DCUtil; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.apps.coe.pal.pal.output.util.OutputExcelUtil; + +public class Table2Excel extends AbstFileProcessor implements FileProcessorListener { + + public static String exportExcel(UserContext me, String titles, String content, String appId) { + DCContext dcContext = null; + dcContext = DCUtil.createTempFileContext(appId, "tmp", null, "xls"); + dcContext.setSession(me); + UtilFile uf = new UtilFile(dcContext.getFilePath()); + if (!uf.exists()) { + try { + uf.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + try { + // 创建一个Excel文档对象 + HSSFWorkbook wb = new HSSFWorkbook(); + // 获得指定sheet + HSSFSheet sheet = wb.createSheet(); + + JSONArray titleJsonArray = JSONArray.parseArray(titles); + + /********************** 样式 **********************/ + HSSFCellStyle setStyle = null; + setStyle = OutputExcelUtil.setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, false, IndexedColors.SKY_BLUE.getIndex()); + setStyle.setWrapText(true); + for (int i = 0; i < titleJsonArray.size(); i++) { + sheet.setColumnWidth((short) i, (short) 35.7*150); + } + + /********************** title **********************/ + HSSFRow hrsTitle = sheet.createRow(0); + for (int i = 0; i < titleJsonArray.size(); i++) { + createExcelCell(hrsTitle, i, titleJsonArray.getString(i), setStyle); + } + + /********************** content **********************/ + setStyle = OutputExcelUtil.setCellStyle(wb, "宋体", 11, HorizontalAlignment.CENTER, VerticalAlignment.CENTER, false, IndexedColors.WHITE.getIndex()); + JSONArray datas = JSONArray.parseArray(content); + for (int i = 0; i < datas.size(); i++) { + JSONArray data = datas.getJSONArray(i); + HSSFRow hrs = sheet.createRow(i+1); + for (int j = 0; j < data.size(); j++) { + createExcelCell(hrs, j, data.getString(j), setStyle); + } + } + wb.write(new FileOutputStream(uf)); + } catch (IOException e) { + e.printStackTrace(); + } + + ResponseObject ro = ResponseObject.newOkResponse(); + ro.put("url", dcContext.getDownloadURL()); + return ro.toString(); + } + + private static void createExcelCell(HSSFRow hrs, int cellNum, String cellValue, HSSFCellStyle setBorder) { + // 获得单元格对象 + HSSFCell cell = hrs.getCell(cellNum); + if (null == cell) { + cell = hrs.createCell(cellNum); + } + // 向单元格中放入值 + cell.setCellValue(cellValue); + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + cell.setCellStyle(setBorder); + } +} diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/UtilMapSort.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/UtilMapSort.java new file mode 100644 index 00000000..57d4752b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/util/UtilMapSort.java @@ -0,0 +1,56 @@ +package com.actionsoft.apps.coe.pal.util; + +import java.text.Collator; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Map; + +public class UtilMapSort { + public void sort(List> list, final String field, final String fieldType, final String sort) { + Collections.sort(list, new Comparator>() { + public int compare(Map o1, Map o2) { + int ret = 0; + String type = "string"; + if (fieldType != null) { + type = fieldType; + } + try { + // Number类型 + if ("number".equals(type.toLowerCase())) { + String number1 = (String) o1.get(field); + String number2 = (String) o2.get(field); + Integer n1 = 0; + Integer n2 = 0; + if (!"".equals(number1)) { + n1 = Integer.parseInt(number1); + } + if (!"".equals(number2)) { + n2 = Integer.parseInt(number2); + } + if (sort != null && "desc".equals(sort.toLowerCase())) { // 倒序 + ret = n2.compareTo(n1); + } else { // 正序 + ret = n1.compareTo(n2); + } + } + // 其他(按照java.lang.String处理) + else { + String strA = (String) o1.get(field); + String strB = (String) o2.get(field); + //中国语默认顺序来进行中文排序 + Collator collatorChinese = Collator.getInstance(java.util.Locale.CHINA); + if (sort != null && "desc".equals(sort.toLowerCase())) { // 倒序 + ret = collatorChinese.compare(strB, strA); + } else { // 正序 + ret = collatorChinese.compare(strA, strB); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return ret; + } + }); + } +} diff --git a/com.actionsoft.apps.coe.pal/template/page/coe.pal.publish.add.htm b/com.actionsoft.apps.coe.pal/template/page/coe.pal.publish.add.htm new file mode 100644 index 00000000..120adba7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/coe.pal.publish.add.htm @@ -0,0 +1,138 @@ + + + +流程新发布清单 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      +
      +
        +
        + + + + + + + + + + + + + + + +
        流程新发布清单
        + + + + + + +
        + + + + + + + + + + + + + + + + + + + +
        [#PUBLISTHTYPE][#PUBLISHFILENAME]
        [#PUBLISHVERSION]  
        [#PUBLISHDESC]
        +
        +
        [#Actionsoft]
        +
        +
        +
        +
        + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/console.channel.htm b/com.actionsoft.apps.coe.pal/template/page/console.channel.htm new file mode 100644 index 00000000..c45079fb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/console.channel.htm @@ -0,0 +1,54 @@ + + + + + CoE<I18N#流程卓越中心> + + + + + + + + + +
        +
        + + + +
        + + + + + + + + + + <#coeNavMain> + +
        +
        + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/console.home.htm b/com.actionsoft.apps.coe.pal/template/page/console.home.htm new file mode 100644 index 00000000..96de877a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/console.home.htm @@ -0,0 +1,52 @@ + + + + + CoE<I18N#流程卓越中心> + + + + + + + + + +
        +
        高级用户
        +
        组织结构
        +
        + +
        + +
        + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/console.params.button.htm b/com.actionsoft.apps.coe.pal/template/page/console.params.button.htm new file mode 100644 index 00000000..3e8f3111 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/console.params.button.htm @@ -0,0 +1,23 @@ + + + + + CoE<I18N#流程卓越中心> + + + + + + + + + + <#consoleBotton> + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/console.params.htm b/com.actionsoft.apps.coe.pal/template/page/console.params.htm new file mode 100644 index 00000000..5d10553d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/console.params.htm @@ -0,0 +1,36 @@ + + + + + CoE<I18N#流程卓越中心> + + + + + + + + + + + +
        + <#coeNavMain> + + +
        + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/console.system.name.create.htm b/com.actionsoft.apps.coe.pal/template/page/console.system.name.create.htm new file mode 100644 index 00000000..698ee24b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/console.system.name.create.htm @@ -0,0 +1,49 @@ + + + + +Project_Create + + + + + + + + + + + + +
        +
        + + + + + + + +
        :
        +
        +
        + +
        +
        +
        + + + +
        + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/console.system.name.htm b/com.actionsoft.apps.coe.pal/template/page/console.system.name.htm new file mode 100644 index 00000000..81870317 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/console.system.name.htm @@ -0,0 +1,66 @@ + + + + + CoE<I18N#流程卓越中心> + + + + + + + + + + + +
        +
        + + + +
        + + + + + + + + + + <#coeNavMain> + +
        +
        + + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/console.team.htm b/com.actionsoft.apps.coe.pal/template/page/console.team.htm new file mode 100644 index 00000000..69585cf7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/console.team.htm @@ -0,0 +1,67 @@ + + + + + CoE<I18N#流程卓越中心> + + + + + + + + + + + + +
        +
        +
        + + + +
        +
        + + + + + + + + + + + + <#coeNavMain> + + +
        +
        + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/install.main.htm b/com.actionsoft.apps.coe.pal/template/page/install.main.htm new file mode 100644 index 00000000..862815fe --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/install.main.htm @@ -0,0 +1,302 @@ + + + + + + CoE<I18N#流程卓越中心初始化> + + + + + + + + + + + + + + + + + + + +
        +
        + + + +
        + +
        +
        +
        + +
        +
        +
        +
        +
          +
        • + + +
        • + +
        +
        + +
        +
        + + + +   + + + +   + + + + + + + + + + + + + +
        + +
        +
        +
        Copyright © 2010 Actionsoft.com.cn
        +
      + + <#sid> + + + + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/main.frames.coe.htm b/com.actionsoft.apps.coe.pal/template/page/main.frames.coe.htm new file mode 100644 index 00000000..fe185165 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/main.frames.coe.htm @@ -0,0 +1,19 @@ + + + +AWS® Business Process Center of Excellence + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/main.htm b/com.actionsoft.apps.coe.pal/template/page/main.htm new file mode 100644 index 00000000..63d8f82c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/main.htm @@ -0,0 +1,16 @@ +CoE PAL流程资产库
      \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.backup.home.html b/com.actionsoft.apps.coe.pal/template/page/pal.backup.home.html new file mode 100644 index 00000000..48e69327 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.backup.home.html @@ -0,0 +1,67 @@ + + + + + 资产库备份 + + + + + + + + + + + + + + +
      + + +
      +
      +
      + + + + + + + + + + + +
      备份时间备份用户备注更多
      +
      +
      + + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.main.html b/com.actionsoft.apps.coe.pal/template/page/pal.main.html new file mode 100644 index 00000000..ab28814b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.main.html @@ -0,0 +1,102 @@ + + + + +<#wsName> + + + + + + + + + + + + + + + +
      +
      流程库
      +
      应用列表
      +
      管理
      +
      + +
      + +
      + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.count.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.count.htm new file mode 100644 index 00000000..464d327f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.count.htm @@ -0,0 +1,94 @@ + + + + + Project_Create + + + + + + + + + + + + + + + + + +
      +
      +
      +
      +
      +
      +
      <#coeIsBottomPie>
      +
      +
      +
      +
      +
      +
      <#coePlmPie>
      +
      +
      + +
      +
      +
      +
      <#coeExectypePie>
      +
      +
      + +
      +
      +
      +
      <#coeSystemPie>
      +
      +
      +
      +
      +
      +
      +
      +
      + + +
      +
      +
      +
      +
      + + +
      + + +
      + +
      + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.designer.shapes.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.designer.shapes.html new file mode 100644 index 00000000..1afa0c76 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.designer.shapes.html @@ -0,0 +1,45 @@ + + + + +Welcome to AWSUI Index Page. + + + + + + + + +
      + + + +
        +
      +
      + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.html new file mode 100644 index 00000000..6d58a1d1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.html @@ -0,0 +1,207 @@ + + + + +Welcome to AWSUI Index Page. + + + + + + + + + + + + + + +
      +
      +
        +
        +
        +
        +
        +
        +
        +
        + + + + + + + + +
          + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.import.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.import.htm new file mode 100644 index 00000000..9b63f5ae --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.import.htm @@ -0,0 +1,68 @@ + + + + +流程导入 + + + + + + + + + + + +
          + + + + + + + +
          文件名 + + 上传文件 +
          +
          + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.importResult.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.importResult.htm new file mode 100644 index 00000000..d145dc49 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.importResult.htm @@ -0,0 +1,55 @@ + + + + +流程导入 + + + + + + + + + + + +
          +
          +
          +
          +
          +
          导入清单
          +
          ------------------------------------------------------------------
          +
          异常处理:
          +
          + +
          +
          +
          +
          导入信息:
          +
          +
          ------------------------------------------------------------------
          +
          ***建议导出日志做备忘
          +
          + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.create.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.create.htm new file mode 100644 index 00000000..665e832e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.create.htm @@ -0,0 +1,211 @@ + + + + +Project_Create + + + + + + + + + + + + + + + + + + + +
          + + + + + + + + + + + + + + <#moreAttrContent> + +
          属性名称属性值
          +
          + +
          +
          + + +
            +
          • +
          • 附件
          • +
          + + + + + + + + + + + + + + + + + + + + +
          + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.portal.empower.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.portal.empower.htm new file mode 100644 index 00000000..dea3fe36 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.portal.empower.htm @@ -0,0 +1,98 @@ + + + + +Project_Create + + + + + + + + + + + + +
          +
          + + + + + +
          +
          + : +
            +
          + : + + +
          + : +
            +
          + : + + +
          +
          +
          +
          +
          + + + + + + + + + + +
          + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.portal.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.portal.htm new file mode 100644 index 00000000..273cdca4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.portal.htm @@ -0,0 +1,319 @@ + + + + +CoE<I18N#流程卓越中心> + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.portal.tree.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.portal.tree.htm new file mode 100644 index 00000000..1a3f5e4f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.portal.tree.htm @@ -0,0 +1,173 @@ + + + + +CoE<I18N#流程卓越中心> + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.run.bpmn.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.run.bpmn.htm new file mode 100644 index 00000000..c290ab1b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.run.bpmn.htm @@ -0,0 +1,98 @@ + + + + + 流程分级run版本 + + + + + + + + + + + +
          + <#name> + + + + +
          +
          +
          + +
          + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.upfile.portal.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.upfile.portal.htm new file mode 100644 index 00000000..4f052bbf --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.level.upfile.portal.htm @@ -0,0 +1,167 @@ + + + + + + coe-pa-pl-upfile-portal + + + + + + + + + + + + + + +
          +
          +
          + + + + + + + +
          + + + + + + + + + + +
          文件名操作
          +
          +
          + +
          + +
          + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.list.flow.char.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.list.flow.char.htm new file mode 100644 index 00000000..bb817ba1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.list.flow.char.htm @@ -0,0 +1,72 @@ + + + + +Project_Create + + + + + + + + + +
          +
          + + + + + +
          : +   +
          +
          +
          +
          +
          + + + + + +
          + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.list.portal.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.list.portal.htm new file mode 100644 index 00000000..faf2897b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.list.portal.htm @@ -0,0 +1,144 @@ + + + + +CoE<I18N#流程卓越中心> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <#html> +
          + +
                       
          +
          +
          + +
          +
          +
          + +
          + +
          +
          + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.list.sign.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.list.sign.htm new file mode 100644 index 00000000..75cbd8e9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.list.sign.htm @@ -0,0 +1,76 @@ + + + + +Project_Create + + + + + + + + + +
          +
          + + + + + +
          : + +
          +
          +
          +
          +
          + + + +
          + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.attribute.dialog.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.attribute.dialog.html new file mode 100644 index 00000000..ae6a2f23 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.attribute.dialog.html @@ -0,0 +1,542 @@ + + + + +Attribute dialog page + + + + + + + + + + + + + + + + +
          +
          +
          +
          基本信息
          +
          +
          +
          +
          +
          +
          属性代码
          +
          +
          +
          +
          + +
          + +
          +
          +
          +
          +
          +
          属性名称
          +
          +
          +
          +
          + +
          + +
          +
          +
          +
          +
          +
          类型
          +
          +
          +
          +
          +
          + +
          +
          +
          +
          +
          +
          默认值
          +
          +
          +
          +
          +
          + +
          +
          +
          +
          +
          +
          类型
          +
          +
          +
          +
          +
          + +
          +
          +
          +
          + +
          +
          +
          + + 是否只读 + +
          +
          + +
          +
          + + + +
          +
          +
          +
          +
          +
          +
          +
          + + 是否有效 + +
          +
          + +
          +
          + + + +
          +
          +
          +
          +
          +
          +
          + + +
          +
          作用范围
          +
          +
          +
          +
          +
          +
          +
          +
          + + 文件属性 + +
          +
          + +
          +
          + + + +
          +
          +
          +
          + +
          +
          +
          +
          + + 形状属性 + +
          +
          + +
          +
          + + + +
          +
          +
          +
          + + +
          +
          + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.html new file mode 100644 index 00000000..8339c161 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.html @@ -0,0 +1,148 @@ + + + + +Welcome to AWSUI Index Page. + + + + + + + + + + +
          +
          +
            + + +
              + +
            +
            +
            +
            +
            + + +
              + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.ligature.type.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.ligature.type.html new file mode 100644 index 00000000..22b7964b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.ligature.type.html @@ -0,0 +1,91 @@ + + + + +Welcome to AWSUI Index Page. + + + + + + + + + + + +
              + +
              +
              + + + + + +
              +
              + + + + + + + +
              序号
              代码
              主动名称
              被动名称
              连出范围
              连入范围
              +
              +
              +
              +
              + + <#content> +
              +
              +
              +
              +
              +
              + + + +
              + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.main.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.main.html new file mode 100644 index 00000000..d46c23fb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.main.html @@ -0,0 +1,51 @@ + + + + +Welcome to AWSUI Index Page. + + + + + + + +
              +
              +
              +
              +
              + + + <#content> +
              序号模型图标模型名称模型ID类型
              +
              +
              +
              + + +
              + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.main.shape.attr.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.main.shape.attr.html new file mode 100644 index 00000000..a72b8d5f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.main.shape.attr.html @@ -0,0 +1,226 @@ + + + +Welcome to AWSUI Index Page. + + + + + + + + + + + +
              +
              +
              + + + + + + + + + + + + + + +
              序号
              属性代码
              属性名称
              属性类型
              默认值
              是否只读
              所属目录
              作用范围
              是否有效
              +
              + + <#content> +
              +
              +
              +
              +
              +
              +
              + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.main.shape.attr.new.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.main.shape.attr.new.html new file mode 100644 index 00000000..09e5dbb9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.main.shape.attr.new.html @@ -0,0 +1,228 @@ + + + +Welcome to AWSUI Index Page. + + + + + + + + + + + +
              +
              +
              + + + + + + + + + + + + + + + +
              序号
              属性代码
              属性名称(原)
              属性名称
              属性类型
              默认值
              是否只读
              所属目录
              作用范围
              排序
              +
              + + <#content> +
              +
              +
              +
              +
              +
              +
              + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.modeldefinition.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.modeldefinition.html new file mode 100644 index 00000000..47d14d16 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.modeldefinition.html @@ -0,0 +1,83 @@ + + + +Welcome to AWSUI Index Page. + + + + + + + + + +
              +
              + + + + + + + + + + +
              序号
              模型图标
              模型名称
              模型ID
              类型
              +
              + + <#content> +
              +
              +
              +
              +
              +
              +
              + + +
              + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.modelsnippet.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.modelsnippet.html new file mode 100644 index 00000000..9688d13a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.modelsnippet.html @@ -0,0 +1,40 @@ + + + +Welcome to AWSUI Index Page. + + + + + + + + +
              +
              +
              +
              +
              + +
              +
              +
              + + +
              + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shape.config.more.attribute.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shape.config.more.attribute.htm new file mode 100644 index 00000000..4f738953 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shape.config.more.attribute.htm @@ -0,0 +1,139 @@ + + + + + 流程资产文件设计页面 + + + + + + + +
              + + +
                +
              +
              + + + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shape.config.query.dialog.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shape.config.query.dialog.html new file mode 100644 index 00000000..6a1463d6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shape.config.query.dialog.html @@ -0,0 +1,76 @@ + + + + +shapeConfig query dialog page + + + + + + + + + + +
              +
              + + + + + + + + +
              +添加
              + +
              +
              + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shape.config.update.dialog.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shape.config.update.dialog.html new file mode 100644 index 00000000..06738639 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shape.config.update.dialog.html @@ -0,0 +1,258 @@ + + + + +shapeConfig update dialog page + + + + + + + + + + + + + +
              +
              +
              +
              显示位置
              +
              +
              +
              +
              + +
              水平
              +
              +
              +
              + +
              +
              + +
              +
              +
              + +
              垂直
              +
              +
              +
              + +
              +
              + +
              +
              +
              +
              +
              +
              显示方式
              +
              +
              +
              +
              +
              + +
              +
              +
              +
              +
              +
              +
              文本信息
              +
              +
              +
              +
              +
              + +
              +
              +
              +
              + + +
              + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shapeattribute.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shapeattribute.html new file mode 100644 index 00000000..43f37148 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shapeattribute.html @@ -0,0 +1,92 @@ + + + + +Welcome to AWSUI Index Page. + + + + + + + + + + + + + + + + + + + +
              +
              + +
              + +
              +
              + 全部 + 形状属性 + 文件属性 + +
              +
              +
              +
              + + + + +
                + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shapedefinition.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shapedefinition.html new file mode 100644 index 00000000..7e22ad54 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.manage.shapedefinition.html @@ -0,0 +1,150 @@ + + + +Welcome to AWSUI Index Page. + + + + + + + + + + + +
                + + + +
                +
                + + + + + + + +
                +
                + + + + + + + + + + + +
                序号
                形状图标
                形状名称
                形状ID
                模型ID
                模型名称
                类型
                配置
                +
                +
                +
                + + <#content> +
                +
                +
                +
                +
                + +
                + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.create.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.create.htm new file mode 100644 index 00000000..d7835445 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.create.htm @@ -0,0 +1,403 @@ + + + + + 流程资源库文件portal + + + + + + + + + +
                +
                分类
                +
                模板
                +
                +
                  + <#lihtml> +
                +
                +
                + + + +
                +
                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                级别
                + + +
                + +
                责任部门 + + +
                责任人 + +
                里程碑 +
                执行方式 +
                流程图 + +
                维护组 + +
                浏览组 + +
                +
                +
                +
                +
                +
                + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.bpmn2.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.bpmn2.htm new file mode 100644 index 00000000..f5d5f511 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.bpmn2.htm @@ -0,0 +1,1242 @@ + + + + +11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

                +
                + + + + +
                +
                + +
                +
                +
                +
                + + +
                Arial
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                + + +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                + +
                +
                +
                +
                +
                +
                +
                +
                +
                + + +
                +
                +
                +
                + +
                + + +
                +
                +
                +
                +
                +
                +
                +
                + +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                + +
                +
                V1
                +
                设计
                +
                + +
                +
                +
                +
                +
                +
                +
                +
                +
                + + + +
                +
                +
                +
                +
                + + +
                +
                +
                +
                + +
                +
                +
                + + +
                +
                + 图形 +
                +
                +
                +
                连线
                +
                +
                +
                +
                +
                +
                +
                +
                +
                填充样式
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                + 角度: +
                +
                +
                + 半径: +
                +
                +
                +
                +
                + +
                + 显示方式: +
                +
                +
                +
                +
                +
                透明度
                +
                +
                +
                +
                +
                + 度量 +
                +
                +
                +
                位置和大小
                +
                X:
                +
                +
                宽:
                +
                +
                +
                Y:
                +
                +
                高:
                +
                +
                +
                +
                旋转方向
                +
                +
                +
                +
                +
                + 页面设置 +
                +
                +
                +
                页面
                +
                页面大小:
                +
                +
                +
                内边距:
                +
                +
                +
                背景颜色:
                +
                +
                +
                +
                网格
                + +
                +
                网格大小:
                +
                +
                +
                +
                +
                +
                +
                + 数据属性 +
                +
                +
                +
                +
                添加数据属性
                +
                +
                名字:
                + +
                +
                类型:
                + +
                +
                值:
                +
                +
                +
                确定
                +
                取消
                +
                +
                +
                +
                  +
                +
                +
                +
                +
                + 历史操作 +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                + 校验信息 +
                +
                +
                +
                正在校验...
                + +
                +
                +
                +
                +
                + + + + + + + + + + + + + + + + + +
                +
                快捷键列表
                +
                +
                + 通用 + + Alt按住Alt,通过鼠标可以对页面进行拖动 + + + Ctrl按住Ctrl,点击一个图形,将其添加到选择图形中,或者从中移除 + + + Ctrl + < , Ctrl + >放大,缩小 + + + Ctrl + A全部选中 + + + Esc取消选中,并取消当先操作 + + + T插入文本 + + + I插入图片 + + + L插入连线 + +   + 图形被选中时 + + 箭头 (←↑↓→) 将选中图形向左、向上、向下、向右移动 + + + Ctrl + 箭头 (←↑↓→) 每次微移一个像素 + + + Ctrl + 调整大小 调整图形大小,并且约束比例 + +   + + Ctrl + Z撤销 + + + Ctrl + Y恢复 + +   + + Ctrl + X剪切 + + + Ctrl + C复制 + + + Ctrl + V粘贴 + + + Ctrl + D复用 + + + Ctrl + Shift + B格式刷 + + + Delete, Backspace删除 + +   + + Ctrl + ]将选中的图形置于顶层 + + + Ctrl + [将选中的图形置于底层 + + + Ctrl + Shift + ]将选中的图形上移一层 + + + Ctrl + Shift + [将选中的图形下移一层 + +   + + Ctrl + L锁定选中的图形 + + + Ctrl + Shift + L将选中的图形解锁 + +   + + Ctrl + G组合选中的图形 + + + Ctrl + Shift + G将选中的图形取消组合 + +   + 编辑文本 + + 空格 编辑文本 + + + Ctrl + B粗体 + + + Ctrl + I斜体 + + + Ctrl + U下划线 + + + Ctrl + Enter保存文本编辑 + +
                +
                +
                确定
                +
                + +
                +
                发送反馈
                +
                +

                + 您可以把使用中遇到的问题、功能的建议、评论等发送给我们。
                我们迫切希望得到您有价值的反馈,有您的反馈,我们会做的更好!

                请写下您的邮箱和反馈描述: +

                + + + + +
                +
                + 发送 +
                +
                + + + +
                +
                下载格式
                +
                +
                +
                  +
                • + + +
                  +
                • +
                • + + +
                  +
                • +
                • + + +
                  +
                • +
                + + + + +
                +
                +
                +
                确定
                  +
                取消
                +
                +
                + + + + + + + + + + + + + + + + + + + + + +
                +
                提示:
                +
                +

                请从列表中选择一个用户

                +
                确定
                +
                +
                +
                + + +
                +
                选择图片
                +
                +
                  +
                • 我的图片
                • +
                • 网络图片
                • +
                • 搜索图片
                • +
                +
                +
                +
                +
                +
                上传图片 + +
                + +
                +
                +
                +
                + + +
                +
                确定
                +
                取消
                + +
                +
                +
                +
                +
                +
                +
                + 聊天  (0) + + +
                +
                +
                  +
                  +
                  + + +
                  +
                  +
                  +
                  +
                  + 您已经和服务器断开连接,请刷新重试。 +
                  +
                  + 重试  + 关闭 +
                  +
                  +
                  + + + + + + + + + + + + + + + + + +
                  + + +
                  + + + + + + +
                  +
                  +
                  已由 编辑该流程时锁定,最后一次保存日期 + ,点击此处强行获取编辑权 +
                  +
                  + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.htm new file mode 100644 index 00000000..305c8761 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.htm @@ -0,0 +1,2846 @@ + + + + + <#fileName> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <#js> + + + + + + + + + + + + + + + + + + + <#processlink_ete_js> + <#batch-js> + + + + + + +
                  + +
                  +
                  + <#fileName> + +
                  +
                  + <#versionNum> +
                  + +
                  +
                  +
                  + +
                  + <#saveUI> + +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  + + +
                  +
                  Arial
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  + + +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  + + +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  + +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  + +
                  +
                  +
                  +
                  + +
                  + +
                  +
                  +
                  + 您的浏览器不支持HTML5,请使用IE9及以上版本,或Chrome、Firefox等浏览器 + + + + + + + +
                  +
                  +
                  +
                  +
                  + +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  + + + <#dock_btn_validate> + +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  + + <#processlink_ete_analysis> +
                  +
                  + + +
                  +
                  + 图形 +
                  +
                  +
                  +
                  连线
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  填充样式
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  + 角度: +
                  +
                  +
                  + 半径: +
                  +
                  +
                  +
                  +
                  +
                  更改图片
                  +
                  + 显示方式: +
                  +
                  +
                  +
                  +
                  +
                  +
                  透明度
                  +
                  +
                  +
                  +
                  +
                  + 度量 +
                  +
                  +
                  +
                  位置和大小
                  +
                  X:
                  +
                  +
                  宽:
                  +
                  +
                  +
                  Y:
                  +
                  +
                  高:
                  +
                  +
                  +
                  +
                  旋转方向
                  +
                  +
                  +
                  +
                  +
                  + 页面设置 +
                  +
                  +
                  +
                  页面
                  +
                  页面大小:
                  +
                  +
                  +
                  +
                  +
                  +
                  内边距:
                  +
                  +
                  +
                  +
                  +
                  +
                  背景颜色:
                  +
                  +
                  +
                  +
                  网格
                  + + +
                  +
                  网格大小:
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  + 文件属性 +
                  +
                  +
                  + +
                    + +
                    + + +
                    +
                    + + + + + + + + + +
                    关系类型对象名称
                    +
                    +
                    + + + + + + + + + + + + + + + + + + +
                    属性名称属性值
                    名称 + +
                    类型
                    +
                    + +
                    + + + + + + + + +
                    模型名称类型
                    +
                    + + +
                    + + + + + + + + +
                    文件名称图形名称
                    +
                    + +
                    +
                      +
                    • +
                    • +
                    • + 附件 +
                    • + +
                    +
                  +
                  +
                    +
                  • + +
                  • +
                  +
                  +
                  +
                  + 历史版本 +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  + 校验信息 + +
                  +
                  +
                  +
                  正在校验...
                  + +
                  +
                  +
                  +
                  + 留言 + +
                  +
                  +
                  +
                  + +
                  + 1000字 + +
                  +
                  +
                  +
                  +
                  +
                  +
                  +
                  + 发布历史 + +
                  +
                  +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  +
                  快捷键列表
                  +
                  +
                  + 通用 + + Alt + 按住Alt,通过鼠标可以对页面进行拖动 + + + + Ctrl + < , Ctrl + > + 缩小,放大画布 + + + Ctrl + A + 全部选中 + + + Esc + 取消选中,并取消当前操作 + + +   + 图形被选中时 + + 箭头 (←↑↓→) + 将选中图形向左、向上、向下、向右移动 + + + Ctrl + 箭头 (←↑↓→) + 每次微移一个像素 + + + Ctrl + 调整大小 + 调整图形大小,并且约束比例 + +   + + Ctrl + Z + 撤销 + + + Ctrl + Y + 恢复 + +   + + Ctrl + X + 剪切 + + + Ctrl + C + 复制 + + + Ctrl + V + 粘贴 + + + Ctrl + D + 复用 + + + Ctrl + R + 数据配置 + + + Ctrl + Shift + B + 格式刷 + + + Delete, Backspace + 删除 + +   + + Ctrl + ] + 将选中的图形置于顶层 + + + Ctrl + [ + 将选中的图形置于底层 + + + Ctrl + Shift + ] + 将选中的图形上移一层 + + + Ctrl + Shift + [ + 将选中的图形下移一层 + +   + + Ctrl + L + 锁定选中的图形 + + + Ctrl + Shift + L + 将选中的图形解锁 + +   + + Ctrl + G + 组合选中的图形 + + + Ctrl + Shift + G + 将选中的图形取消组合 + +   + 编辑文本 + + 空格 + 编辑文本 + + + Ctrl + B + 粗体 + + + Ctrl + I + 斜体 + + + Ctrl + U + 下划线 + + + Ctrl + Enter + 保存文本编辑 + +
                  +
                  +
                  关闭
                  +
                  + +
                  +
                  发送反馈
                  +
                  +

                  + 您可以把使用中遇到的问题、功能的建议、评论等发送给我们。 +
                  我们迫切希望得到您有价值的反馈,有您的反馈,我们会做的更好! +
                  +
                  请写下您的邮箱和反馈描述: +

                  + + + + + + +
                  +
                  + 发送 +
                  +
                  + + + + + + +
                  +
                  + +
                  +
                  + +
                  + +
                  + + + + + + + + + + + + + + + + + +
                  +
                  +
                  + + + + + + + + + +
                  +
                  分享与协作
                  +
                  +
                  + 权限列表: +
                  +
                  +
                  +
                  + 新邀请: + + 1输入受邀请人姓名或者邮箱。 + + 2从以下用户列表中选择一个用户发起邀请。 + 已经被邀请! + 发送成功。 +
                  +
                  + + + +
                  + +
                  +
                  + +
                  + 从以下用户列表中选择一个用户发起邀请: +
                  +
                  +
                  +
                  + 发送邀请 +
                  +
                  +
                  +
                  + +
                  +
                  提示:
                  +
                  +

                  请从列表中选择一个用户

                  +
                  确定
                  +
                  +
                  +
                  + + +
                  +
                  选择图片
                  +
                  +
                    +
                  • 我的图片
                  • +
                  • 网络图片
                  • +
                  • 搜索图片
                  • +
                  +
                  +
                  +
                  +
                  +
                  上传图片 + +
                  + +
                  +
                  +
                  +
                  + + +
                  +
                  确定
                  +
                  取消
                  + +
                  +
                  +
                  +
                  +
                  +
                  +
                  + 聊天 + +
                  +
                  +
                    +
                    +
                    + + +
                    +
                    +
                    +
                    +
                    + 您已经和服务器断开连接,请刷新重试。 +
                    +
                    + 重试  + 关闭 +
                    +
                    + + +
                    + + + + + + + + + + + + + + + + +
                    +
                    + +
                    +
                    已由 <#checkoutusername> 编辑该流程时锁定,最后一次保存日期 + <#checkouttime> + ,点击此处强行获取编辑权 +
                    +
                    + + + + +
                    +
                    + +
                    +
                    已由 <#checkoutusername> 编辑该流程时锁定,最后一次保存日期 + <#checkouttime> + ,点击此处强行获取编辑权 +
                    +
                    + + + + + + + + + + + + <#batch-dlg> +
                    + + + + + + + + + +
                    + + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.link.tree.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.link.tree.htm new file mode 100644 index 00000000..dda8cd7f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.link.tree.htm @@ -0,0 +1,36 @@ + + + + + 流程资产文件设计页面 + + + + + + + + + +
                    + +
                    +
                      +
                      +
                      + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.more.attribute.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.more.attribute.htm new file mode 100644 index 00000000..c00079f9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.more.attribute.htm @@ -0,0 +1,96 @@ + + + + + 流程资产文件设计页面 + + + + + + + +
                      + + + +
                        +
                      +
                      + + + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.print.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.print.html new file mode 100644 index 00000000..4c046b4f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.print.html @@ -0,0 +1,38 @@ + + + + + <#palTitle> + + + + + + + +
                      +
                      <#palTitle> <#version>
                      + +
                      + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.shapes.aws.org.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.shapes.aws.org.htm new file mode 100644 index 00000000..f5f92b25 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.shapes.aws.org.htm @@ -0,0 +1,117 @@ + + + + 关联AWS PaaS组织 + + + + + + + + + + + + + + + +
                      +
                      + + + + +
                      +
                      +
                        +
                        +
                        + +
                        +
                          +
                          + + + +
                          +
                          + + + + + + + + + + +
                          选择分类名称
                          +
                          +
                          + + diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.shapes.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.shapes.htm new file mode 100644 index 00000000..ef02a269 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.shapes.htm @@ -0,0 +1,149 @@ + + + + 关联形状 + + + + + + + + + + + + + + + +
                          +
                          + + + + +
                          +
                          +
                            +
                            +
                            + +
                            +
                            + + + + +
                            +
                            +
                              +
                              +
                              + +
                              +
                                +
                                + + + +
                                +
                                + + + + + + + + + +
                                选择名称
                                +
                                +
                                + + diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.template.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.template.htm new file mode 100644 index 00000000..6880bbf0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.template.htm @@ -0,0 +1,60 @@ + + + + + 设计器模板 + + + + +
                                +
                                Coe 模板
                                +
                                +
                                +
                                +
                                参数说明

                                +
                                查看本页源代码
                                +
                                效果展示
                                +
                                参数说明

                                +
                                查看本页源代码
                                +
                                效果展示
                                +
                                参数说明

                                +
                                查看本页源代码
                                +
                                效果展示
                                +
                                参数说明

                                +
                                查看本页源代码
                                +
                                效果展示
                                +
                                +
                                +
                                +
                                + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.version.manager.bpmn.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.version.manager.bpmn.htm new file mode 100644 index 00000000..8b9c69e8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.version.manager.bpmn.htm @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + +流程模型 + + + + + +
                                + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.version.manager.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.version.manager.htm new file mode 100644 index 00000000..21423b46 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.version.manager.htm @@ -0,0 +1,48 @@ + + + + + 设计器版本管理 + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.view.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.view.html new file mode 100644 index 00000000..c88f37e6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.view.html @@ -0,0 +1,1498 @@ + + + + + <#fileName>(<#versionNum>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <#js> + + + + + + + + + + + + <#processlink_ete_js> + + + + + + +
                                +
                                +
                                + <#checkoutTip> + <#fileName> +
                                +
                                + <#versionNum> +
                                + +
                                +
                                +
                                + +
                                + <#saveUI> + +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                + + +
                                +
                                Arial
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                + + +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                + + +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                + +
                                +
                                +
                                +
                                + +
                                +
                                +
                                + +
                                +
                                + +
                                + + + + + + + + +
                                + +
                                +
                                +
                                +
                                +
                                + 您的浏览器不支持HTML5,请使用IE9及以上版本,或Chrome、Firefox等浏览器 + + + + + + +
                                +
                                +
                                +
                                +
                                + +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                + +
                                +
                                +
                                + <#dock_btn_validate> +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                + + <#processlink_ete_analysis> +
                                +
                                + + +
                                +
                                + 图形 +
                                +
                                +
                                +
                                连线
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                填充样式
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                + 角度: +
                                +
                                +
                                + 半径: +
                                +
                                +
                                +
                                +
                                +
                                更改图片
                                +
                                + 显示方式: +
                                +
                                +
                                +
                                +
                                +
                                +
                                透明度
                                +
                                +
                                +
                                +
                                +
                                + 度量 +
                                +
                                +
                                +
                                位置和大小
                                +
                                X:
                                +
                                +
                                宽:
                                +
                                +
                                +
                                Y:
                                +
                                +
                                高:
                                +
                                +
                                +
                                +
                                旋转方向
                                +
                                +
                                +
                                +
                                +
                                + 页面设置 +
                                +
                                +
                                +
                                页面
                                +
                                页面大小:
                                +
                                +
                                +
                                +
                                +
                                +
                                内边距:
                                +
                                +
                                +
                                +
                                +
                                +
                                背景颜色:
                                +
                                +
                                +
                                +
                                网格
                                + + +
                                +
                                网格大小:
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                + 文件属性 +
                                +
                                +
                                +
                                  +
                                  + +
                                  +
                                  + + + + + + + + + +
                                  关系类型对象名称
                                  +
                                  +
                                  + + + + + + + + + + + + + + + + + + +
                                  属性名称属性值
                                  名称 + +
                                  类型
                                  +
                                  + +
                                  + + + + + + + + +
                                  模型名称类型
                                  +
                                  + + +
                                  + + + + + + + + +
                                  文件名称图形名称
                                  +
                                  +
                                  +
                                    +
                                  • + 附件 +
                                  • +
                                  +
                                +
                                +
                                  +
                                • + +
                                • +
                                + +
                                + +
                                +
                                + 留言 + +
                                +
                                +
                                +
                                + +
                                + 1000字 + +
                                +
                                +
                                +
                                +
                                +
                                +
                                +
                                + 发布历史 + +
                                +
                                +
                                +
                                + +
                                +
                                + +
                                +
                                + + + +
                                +
                                +
                                + +
                                +
                                快捷键列表
                                +
                                +
                                + 通用 + + Alt + 按住Alt,通过鼠标可以对页面进行拖动 + + + + Ctrl + < , Ctrl + > + 缩小,放大画布 + + + Ctrl + A + 全部选中 + + + Esc + 取消选中,并取消当前操作 + + +   + 图形被选中时 + + 箭头 (←↑↓→) + 将选中图形向左、向上、向下、向右移动 + + + Ctrl + 箭头 (←↑↓→) + 每次微移一个像素 + + + Ctrl + 调整大小 + 调整图形大小,并且约束比例 + +   + + Ctrl + Z + 撤销 + + + Ctrl + Y + 恢复 + +   + + Ctrl + X + 剪切 + + + Ctrl + C + 复制 + + + Ctrl + V + 粘贴 + + + Ctrl + D + 复用 + + + Ctrl + R + 数据配置 + + + Ctrl + Shift + B + 格式刷 + + + Delete, Backspace + 删除 + +   + + Ctrl + ] + 将选中的图形置于顶层 + + + Ctrl + [ + 将选中的图形置于底层 + + + Ctrl + Shift + ] + 将选中的图形上移一层 + + + Ctrl + Shift + [ + 将选中的图形下移一层 + +   + + Ctrl + L + 锁定选中的图形 + + + Ctrl + Shift + L + 将选中的图形解锁 + +   + + Ctrl + G + 组合选中的图形 + + + Ctrl + Shift + G + 将选中的图形取消组合 + +   + 编辑文本 + + 空格 + 编辑文本 + + + Ctrl + B + 粗体 + + + Ctrl + I + 斜体 + + + Ctrl + U + 下划线 + + + Ctrl + Enter + 保存文本编辑 + +
                                +
                                +
                                关闭
                                +
                                + + + + + + + + + + + + + + + + +
                                + + + + + + + + +
                                + + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.view.portal.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.view.portal.html new file mode 100644 index 00000000..aff9310e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.designer.view.portal.html @@ -0,0 +1,716 @@ + + + + + <#fileName>(<#versionNum>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <#js> + + + + + + + + + + + <#processlink_ete_js> + + + + + + + + + +
                                + <#toolbarName> +
                                +
                                + <#typeName> +
                                + +
                                + >> + << +
                                +
                                +
                                + +
                                +
                                +
                                +
                                +
                                + 您的浏览器不支持HTML5,请使用IE9及以上版本,或Chrome、Firefox等浏览器 + + + + + + +
                                +
                                +
                                +
                                +
                                + + + + +
                                + +
                                +
                                + +
                                + +
                                +
                                +
                                + + + + + + + + + + + + + +
                                + + + + + + + +
                                + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.home.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.home.htm new file mode 100644 index 00000000..0c4a9c7c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.home.htm @@ -0,0 +1,92 @@ + + + + + 流程资源应用列表 + + + + + + +
                                +
                                +
                                  +
                                +
                                +
                                +
                                +
                                + +
                                + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.htm new file mode 100644 index 00000000..0bd05aa8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.htm @@ -0,0 +1,223 @@ + + + + +报告生成器 + + + + + + + + + + + + + +
                                +
                                +
                                + +
                                +
                                + +
                                +
                                + +
                                +
                                +
                                + + + + + + + + + + + + + + +
                                名称报告类型小组名创建人耗时状态操作
                                +
                                + +
                                + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.pal.file.relation.tree.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.pal.file.relation.tree.htm new file mode 100644 index 00000000..40ef1fca --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.pal.file.relation.tree.htm @@ -0,0 +1,29 @@ + + + + +报告生成器 + + + + + + + + +
                                  + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.pal.file.tree.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.pal.file.tree.htm new file mode 100644 index 00000000..e7978139 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.pal.file.tree.htm @@ -0,0 +1,39 @@ + + + + +报告生成器 + + + + + + + + +
                                    + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.pal.tree.aws.org.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.pal.tree.aws.org.htm new file mode 100644 index 00000000..58679517 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.pal.tree.aws.org.htm @@ -0,0 +1,39 @@ + + + + +报告生成器 + + + + + + + + +
                                      + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.portal.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.portal.htm new file mode 100644 index 00000000..7aa00dd6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.portal.htm @@ -0,0 +1,76 @@ + + + + +报告生成器 + + + + + + + + + + + + +
                                      +
                                      +
                                      + +
                                      +
                                      + +
                                      +
                                      + +
                                      +
                                      +
                                      + + + + + + + + + + + + +
                                      名称创建人耗时状态操作
                                      +
                                      + +
                                      + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.tree.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.tree.htm new file mode 100644 index 00000000..c84e2a92 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.outputreport.tree.htm @@ -0,0 +1,48 @@ + + + + +报告生成器 + + + + + + + + +
                                        +
                                        +
                                        +
                                        + +
                                        +
                                        +
                                        + 文件格式支持:zip +
                                        +
                                        + + + + +
                                        + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.portal.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.portal.htm new file mode 100644 index 00000000..15e7bb53 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.repository.portal.htm @@ -0,0 +1,310 @@ + + + + + 流程分级portal + + + + + + + + + <#batch-js> + + +
                                        + <#name> +
                                        + +
                                        + <#batch-button> + <#createButton> + <#importButton> + <#importMenu> + <#exportButton> + + + + + + + + +
                                        + +
                                        + <#pane> +
                                        + + + + + + + + + <#batch-dlg> + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.search.html b/com.actionsoft.apps.coe.pal/template/page/pal.pl.search.html new file mode 100644 index 00000000..7f7c71db --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.search.html @@ -0,0 +1,74 @@ + + + + +Pal Search + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                        查找范围
                                        模型类型 + + 模型名称
                                        元素类型元素名称
                                        使用属性过滤 + + +
                                        + +
                                        +
                                        + +
                                        +
                                        +
                                        + + + + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.pl.setting.flow.htm b/com.actionsoft.apps.coe.pal/template/page/pal.pl.setting.flow.htm new file mode 100644 index 00000000..f2a374a5 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.pl.setting.flow.htm @@ -0,0 +1,56 @@ + + + + + 关联流程页面 + + + + +
                                          + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.recycle.html b/com.actionsoft.apps.coe.pal/template/page/pal.recycle.html new file mode 100644 index 00000000..da39b4bb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.recycle.html @@ -0,0 +1,55 @@ + + + + + 回收站 + + + + + + + + + + + + + +
                                          + + +
                                          +
                                          + + + + +
                                          + + + + + + + + + + + + + +
                                          + + 流程名称资产库名称删除时间用户更多
                                          + +
                                          + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.ws.correlate.htm b/com.actionsoft.apps.coe.pal/template/page/pal.ws.correlate.htm new file mode 100644 index 00000000..75d86df9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.ws.correlate.htm @@ -0,0 +1,98 @@ + + + + +AWS 关联 + + + + + + + + + + + + + + + +
                                          +
                                          +
                                          + 已关联 + 未关联 +
                                          + +
                                          +
                                          +
                                          + +
                                          +
                                          + +
                                          +
                                          +
                                          +
                                          +
                                          +
                                          +
                                          + + +
                                          +
                                          +
                                          + +
                                          +
                                          +
                                          + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.ws.create.htm b/com.actionsoft.apps.coe.pal/template/page/pal.ws.create.htm new file mode 100644 index 00000000..341ee919 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.ws.create.htm @@ -0,0 +1,247 @@ + + + + +Project_Create + + + + + + + + + + + +
                                          +
                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                          + + + +
                                          + +
                                          + +
                                          + +
                                          + + +
                                          + + + +
                                          +
                                          +
                                          + +
                                          + + + + + + + + + + +
                                          + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.ws.import.htm b/com.actionsoft.apps.coe.pal/template/page/pal.ws.import.htm new file mode 100644 index 00000000..0d101dea --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.ws.import.htm @@ -0,0 +1,99 @@ + + + + +资产库导入 + + + + + + + + + +
                                          + + + + + + + + +
                                          文件来源 + + + + +
                                          + + + + + + + + + +
                                          文件 + + + 上传 +
                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                          + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.ws.portal.htm b/com.actionsoft.apps.coe.pal/template/page/pal.ws.portal.htm new file mode 100644 index 00000000..79894b5c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.ws.portal.htm @@ -0,0 +1,226 @@ + + + + + CoE<I18N#流程卓越中心> + + + + + + + + + + + + + + + + + + + +
                                          + + + <#bpmToPalButton> + + + + + + + + +
                                          + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.ws.portal.version.htm b/com.actionsoft.apps.coe.pal/template/page/pal.ws.portal.version.htm new file mode 100644 index 00000000..760e7ef6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.ws.portal.version.htm @@ -0,0 +1,174 @@ + + + + + CoE<I18N#流程卓越中心> + + + + + + + + + + + + + +
                                          + + + + + + +
                                          + +
                                          + +
                                          +
                                          +
                                          + + + + + + + + + + + +
                                          版本
                                          名称
                                          状态
                                          操作
                                          +
                                          + + <#tableContent> +
                                          +
                                          +
                                          +
                                          +
                                          +
                                          + + + + +
                                          +
                                          +
                                          +
                                          + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.ws.userlist.html b/com.actionsoft.apps.coe.pal/template/page/pal.ws.userlist.html new file mode 100644 index 00000000..5692696b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.ws.userlist.html @@ -0,0 +1,170 @@ + + + + +Project_Create + + + + + + + + + + + + + + + +
                                          +
                                          + + + + + + + +
                                          +
                                          +
                                          + + + + + + +
                                          + + + + + + + + + + +
                                          用户名管理员
                                          +
                                          +
                                          + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/pal.ws.view.htm b/com.actionsoft.apps.coe.pal/template/page/pal.ws.view.htm new file mode 100644 index 00000000..aa051adf --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/pal.ws.view.htm @@ -0,0 +1,62 @@ + + + + +<I18N#流程资产预览> + + + + + + + + + + + + + + +
                                          + + + + +
                                          +

                                          + :<#wsName> +
                                          + :<#wsStatus> +

                                          + <#deleteButton> +
                                          +

                                          +
                                          + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/portal.header.htm b/com.actionsoft.apps.coe.pal/template/page/portal.header.htm new file mode 100644 index 00000000..ee534122 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/portal.header.htm @@ -0,0 +1,400 @@ + + + + +<#title> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                          + + + +
                                          + +
                                          +
                                          + + + + +
                                          + +
                                          +
                                          + + + + + + +
                                          +
                                          +
                                          +
                                          +
                                          + + + + + + +
                                          + 工作网络 +
                                          +
                                          +
                                          +
                                          + 小组图标 + + 上传图片 + 删除图片 +
                                          +
                                          + 小组名称 + +
                                          +
                                          + 小组简介 + +
                                          +
                                          +
                                          + + +
                                          +
                                          +
                                          + + <#upgradeHtml> + + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/portal.header.right.layout.htm b/com.actionsoft.apps.coe.pal/template/page/portal.header.right.layout.htm new file mode 100644 index 00000000..7effd888 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/portal.header.right.layout.htm @@ -0,0 +1,90 @@ + + + + + 首页努力加载中... + + + + +
                                          +
                                          + + +
                                          +
                                          +
                                          + +
                                          +
                                          + +
                                          +
                                          +
                                          + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/social.process.info.htm b/com.actionsoft.apps.coe.pal/template/page/social.process.info.htm new file mode 100644 index 00000000..0b96639b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/social.process.info.htm @@ -0,0 +1,51 @@ + + + + +<I18N#流程信息> + + + + + + + + + + + + + + + + +
                                          +
                                          + <#List> +
                                          +
                                          + + + diff --git a/com.actionsoft.apps.coe.pal/template/page/social.process.info.two.htm b/com.actionsoft.apps.coe.pal/template/page/social.process.info.two.htm new file mode 100644 index 00000000..dcf05b8d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/social.process.info.two.htm @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + +<I18N#流程信息> + + + + + + +
                                          +
                                          + <#List> +
                                          +
                                          + + diff --git a/com.actionsoft.apps.coe.pal/template/page/social.stream.main.htm b/com.actionsoft.apps.coe.pal/template/page/social.stream.main.htm new file mode 100644 index 00000000..62e2b36d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/social.stream.main.htm @@ -0,0 +1,168 @@ + + + + +CoE<I18N#流程卓越中心> + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/social.userInfo.htm b/com.actionsoft.apps.coe.pal/template/page/social.userInfo.htm new file mode 100644 index 00000000..a2356862 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/social.userInfo.htm @@ -0,0 +1,73 @@ + + + + +<I18N#用户信息> + + + + + + + + + + + + + + + + + + + +
                                          +
                                          +
                                          + +
                                          +
                                          + <#List> +
                                          +
                                          +
                                          +
                                          +
                                          + + diff --git a/com.actionsoft.apps.coe.pal/template/page/team.user.create.htm b/com.actionsoft.apps.coe.pal/template/page/team.user.create.htm new file mode 100644 index 00000000..2c2538de --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/team.user.create.htm @@ -0,0 +1,147 @@ + + + + +Project_Create + + + + + + + + + + + +
                                          + + + + + + + + + + + + + + +
                                          + + + +
                                          + +
                                          重复帐户 + + + + +
                                          + + + + <#sid> + + + + + + + + + + + +
                                          + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/team.user.main.htm b/com.actionsoft.apps.coe.pal/template/page/team.user.main.htm new file mode 100644 index 00000000..d6a592da --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/team.user.main.htm @@ -0,0 +1,205 @@ + + + + +<I18N#用户管理> + + + + + + + + + + + + + + + + + + + + + +
                                          + + + + + + + + + + + + + + +
                                          +
                                          +
                                          +
                                          + + +
                                          管理员 (0)
                                          + + + +
                                          普通用户 (0)
                                          + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/team.view.draggable.htm b/com.actionsoft.apps.coe.pal/template/page/team.view.draggable.htm new file mode 100644 index 00000000..16242852 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/team.view.draggable.htm @@ -0,0 +1,21 @@ + + + + +Language_Component + + + + + + +
                                          +
                                          +
                                          + <#sid> + +
                                          + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/team.view.process.main.htm b/com.actionsoft.apps.coe.pal/template/page/team.view.process.main.htm new file mode 100644 index 00000000..ceaa928f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/team.view.process.main.htm @@ -0,0 +1,107 @@ + + + + +Language_Component + + + + + + + + + + +
                                          +

                                           

                                          +


                                          + loading...

                                          +

                                           

                                          +
                                          + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/teamwork.processmodeling.teamperm.html b/com.actionsoft.apps.coe.pal/template/page/teamwork.processmodeling.teamperm.html new file mode 100644 index 00000000..ee686e3e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/teamwork.processmodeling.teamperm.html @@ -0,0 +1,124 @@ + + + + + Network Team List + + + + + + + + + + + + + + +
                                          +
                                          + + + + + + + + + + + +
                                          小组名创建日期活跃日期管理员操作
                                          +
                                          + + <#tbody> +
                                          +
                                          +
                                          +
                                          +
                                          + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.common.create.html b/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.common.create.html new file mode 100644 index 00000000..2b405cd0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.common.create.html @@ -0,0 +1,66 @@ + + + + + 设置常用流程页面 + + + + + + + + + + + + +
                                          +
                                          +
                                          +
                                          + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.common.html b/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.common.html new file mode 100644 index 00000000..13d7c9d5 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.common.html @@ -0,0 +1,70 @@ + + + + + 常用流程设置 + + + + + + + + + + + + +
                                          + + + +
                                          +
                                          +
                                          + + + + + + + + + +
                                          序号名称排序
                                          +
                                          + +
                                          +
                                          +
                                          加载更多
                                          + +
                                          +
                                          +
                                          +
                                          +
                                          +
                                          + + diff --git a/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.grouplist.create.html b/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.grouplist.create.html new file mode 100644 index 00000000..919df8c1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.grouplist.create.html @@ -0,0 +1,101 @@ + + + + + Publisher group create + + + + + + + + + + + + + + + + + + + +
                                          + + + +
                                          +
                                          +
                                          + + + + + + + + + + + + + + + + + +
                                          +
                                          + +
                                          +
                                            +
                                            + +
                                            +
                                              +
                                              +
                                              + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.grouplist.html b/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.grouplist.html new file mode 100644 index 00000000..30159a26 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.grouplist.html @@ -0,0 +1,94 @@ + + + + + Publisher group List + + + + + + + + + + + + + + +
                                              + +
                                              + +
                                              +
                                              +
                                              +
                                              + + + + + + + + + + + +
                                              序号代码分类名称说明操作
                                              +
                                              + + <#tbody> +
                                              +
                                              +
                                              +
                                              +
                                              +
                                              + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.theme.html b/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.theme.html new file mode 100644 index 00000000..330d1020 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/template/page/teamwork.publisher.theme.html @@ -0,0 +1,143 @@ + + + + + 主题风格 + + + + + + + + + + + + +
                                              + +
                                              + +
                                              +
                                              + +
                                              +
                                              +
                                              + + diff --git a/com.actionsoft.apps.coe.pal/web.zip b/com.actionsoft.apps.coe.pal/web.zip new file mode 100644 index 00000000..32a4696d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web.zip differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/action.xml b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/action.xml new file mode 100644 index 00000000..d932d9dc --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/action.xml @@ -0,0 +1,1724 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/alram/coe.team.detail.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/alram/coe.team.detail.css new file mode 100644 index 00000000..db395398 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/alram/coe.team.detail.css @@ -0,0 +1,84 @@ +html, body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, p, blockquote, th, td { + margin: 0; + padding: 0; +} + +/*告警事件样式*/ +.alarmList{ + border-bottom: 1px solid #E5E5E5; + padding: 0px ; + margin: 10px 10px; + height: 28px; +} +.alarmList div{ + position: relative; +} +div h3{ + margin: 0px; + padding: 0px; + line-height: 22px; +} +.tagFloat{ + float: left; +} +.tagClear{ + clear: both; +} +.tagRight{ + float: right; +} + +.alarmSearch { + background: none repeat scroll 0 0 #EFEFEF; + border: 1px solid #D4D4D4; + height: 28px; + line-height: 28px; + margin-top: 4px; + padding:3px 10px 5px; + text-align: right; + font-size: 14px; + border-radius:6px 6px 6px 6px; + box-shadow:0.3px 0.4px 1.5px rgba(0,0,0,0.2); + +} +.alarmSearch img{ + margin-left: 3px; + cursor: pointer; + height: 22px; + margin-bottom: 3px; + vertical-align: middle; +} +.alarmData{ + margin: 5px auto; + padding: 0px; +} +.alarmDetalContainer{ + background: url("../../img/wash-white-30.png") repeat scroll 0 0 transparent; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); + margin: 10px auto; + padding: 15px; + width: 670px; +} +.alarmSearch { + background: none repeat scroll 0 0 #EFEFEF; + border: 1px solid #D4D4D4; + height: 28px; + line-height: 28px; + margin-top: 4px; + padding-right: 10px; + text-align: right; +} +/*自定义datepickter */ +div.navigationDatepickerDivAws { + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + border: 1px solid #aaaaaa; + width: 580px; + background:#F7F7F7; + font-size:13px; + left: 100px; + position: absolute; + top: 100px; +} +#datepicker{ + padding-right: 3px; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/alram/coe.team.main.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/alram/coe.team.main.css new file mode 100644 index 00000000..22a2778a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/alram/coe.team.main.css @@ -0,0 +1,104 @@ +/*--team-main-css*/ +html body { + background: url("../../img/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; + background-position: center; + background-attachment: fixed; + margin:0px; + } +@media (max-width: 979px) { + html body { + background-position: center top; + background-color: rgb(150,198,96) ; + background-attachment: fixed; + background-image: none; + margin:0px; + } +} + +@media (min-width: 980px) { + html body { + background: url("../../img/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; + background-position: center top; + background-attachment: fixed; + margin:0px; + } +} + +.coe_team_main{ + margin: 0 auto; + padding: 15px; + overflow-x:hidden; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); + height:100%; +} + +/*team-left-nav*/ +.clearBorder{ + border: 0; + } + .bs-docs-sidenav { + background-color: #FFFFFF; + border-radius: 6px 6px 6px 6px; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.067); + margin: 0; + padding: 0; + width: 100%; +} +.bs-docs-sidenav > li > a { + border: 1px solid #E5E5E5; + display: block; + margin: 0 0 -1px; + padding: 3px 14px; +} +.bs-docs-sidenav > li:first-child > a { + border-radius: 6px 6px 0 0; +} +.bs-docs-sidenav > li:last-child > a { + border-radius: 0 0 6px 6px; +} +.bs-docs-sidenav > .active > a { + border: 0 none; + box-shadow: 1px 0 0 rgba(0, 0, 0, 0.1) inset, -1px 0 0 rgba(0, 0, 0, 0.1) inset; + padding: 4px 15px; + position: relative; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.15); + z-index: 2; +} +.bs-docs-sidenav .icon-chevron-right { + float: right; + margin-right: -6px; + margin-top: 2px; + opacity: 0.25; +} +.bs-docs-sidenav > li > a:hover { + background-color: #F5F5F5; +} +.bs-docs-sidenav a:hover .icon-chevron-right { + opacity: 0.5; +} +.bs-docs-sidenav .active .icon-chevron-right, .bs-docs-sidenav .active a:hover .icon-chevron-right { + background-image: url("../img/glyphicons-halflings-white.png"); + opacity: 1; +} + +.wf-node { + border: 0 none; + margin: 0; + min-height: 300px; + overflow: auto; + padding-top: 10px; + width: 200px; +} +/*bootstrap--custom*/ +.accordion-heading .accordion-toggle { + display: block; + padding: 4px 15px; +} +.accordion-group { + border: 0px solid #E5E5E5; + border-radius: 4px 4px 4px 4px; + margin-bottom: 0px; +} + + +/*-----team-left-nav-end----*/ \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-all/css/bootstrap.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-all/css/bootstrap.css new file mode 100644 index 00000000..23d6905e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-all/css/bootstrap.css @@ -0,0 +1,6158 @@ +/*! + * Bootstrap v2.3.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +audio:not([controls]) { + display: none; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +a:hover, +a:active { + outline: 0; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + width: auto\9; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, +.google-maps img { + max-width: none; +} + +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} + +button, +input { + *overflow: visible; + line-height: normal; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +label, +select, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input[type="radio"], +input[type="checkbox"] { + cursor: pointer; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} + +body { + margin: 0; + /*font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;*/ + font-size: 13px; + line-height: 18px; + color: #333333; + background-color: #ffffff; +} + +a { + color: #0088cc; + text-decoration: none; +} + +a:hover, +a:focus { + color: #005580; + text-decoration: underline; +} + +.img-rounded { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +.img-circle { + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; +} + +.row { + margin-left: -20px; + *zoom: 1; +} + +.row:before, +.row:after { + display: table; + line-height: 0; + content: ""; +} + +.row:after { + clear: both; +} + +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} + +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.span12 { + width: 940px; +} + +.span11 { + width: 860px; +} + +.span10 { + width: 780px; +} + +.span9 { + width: 700px; +} + +.span8 { + width: 620px; +} + +.span7 { + width: 540px; +} + +.span6 { + width: 460px; +} + +.span5 { + width: 380px; +} + +.span4 { + width: 300px; +} + +.span3 { + width: 220px; +} + +.span2 { + width: 140px; +} + +.span1 { + width: 60px; +} + +.offset12 { + margin-left: 980px; +} + +.offset11 { + margin-left: 900px; +} + +.offset10 { + margin-left: 820px; +} + +.offset9 { + margin-left: 740px; +} + +.offset8 { + margin-left: 660px; +} + +.offset7 { + margin-left: 580px; +} + +.offset6 { + margin-left: 500px; +} + +.offset5 { + margin-left: 420px; +} + +.offset4 { + margin-left: 340px; +} + +.offset3 { + margin-left: 260px; +} + +.offset2 { + margin-left: 180px; +} + +.offset1 { + margin-left: 100px; +} + +.row-fluid { + width: 100%; + *zoom: 1; +} + +.row-fluid:before, +.row-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.row-fluid:after { + clear: both; +} + +.row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} + +.row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.127659574468085%; +} + +.row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; +} + +.row-fluid .span11 { + width: 91.48936170212765%; + *width: 91.43617021276594%; +} + +.row-fluid .span10 { + width: 82.97872340425532%; + *width: 82.92553191489361%; +} + +.row-fluid .span9 { + width: 74.46808510638297%; + *width: 74.41489361702126%; +} + +.row-fluid .span8 { + width: 65.95744680851064%; + *width: 65.90425531914893%; +} + +.row-fluid .span7 { + width: 57.44680851063829%; + *width: 57.39361702127659%; +} + +.row-fluid .span6 { + width: 48.93617021276595%; + *width: 48.88297872340425%; +} + +.row-fluid .span5 { + width: 40.42553191489362%; + *width: 40.37234042553192%; +} + +.row-fluid .span4 { + width: 31.914893617021278%; + *width: 31.861702127659576%; +} + +.row-fluid .span3 { + width: 23.404255319148934%; + *width: 23.351063829787233%; +} + +.row-fluid .span2 { + width: 14.893617021276595%; + *width: 14.840425531914894%; +} + +.row-fluid .span1 { + width: 6.382978723404255%; + *width: 6.329787234042553%; +} + +.row-fluid .offset12 { + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; +} + +.row-fluid .offset12:first-child { + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; +} + +.row-fluid .offset11 { + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; +} + +.row-fluid .offset11:first-child { + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; +} + +.row-fluid .offset10 { + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; +} + +.row-fluid .offset10:first-child { + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; +} + +.row-fluid .offset9 { + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; +} + +.row-fluid .offset9:first-child { + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; +} + +.row-fluid .offset8 { + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; +} + +.row-fluid .offset8:first-child { + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; +} + +.row-fluid .offset7 { + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; +} + +.row-fluid .offset7:first-child { + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; +} + +.row-fluid .offset6 { + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; +} + +.row-fluid .offset6:first-child { + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; +} + +.row-fluid .offset5 { + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; +} + +.row-fluid .offset5:first-child { + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; +} + +.row-fluid .offset4 { + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; +} + +.row-fluid .offset4:first-child { + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; +} + +.row-fluid .offset3 { + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; +} + +.row-fluid .offset3:first-child { + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; +} + +.row-fluid .offset2 { + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; +} + +.row-fluid .offset2:first-child { + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; +} + +.row-fluid .offset1 { + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; +} + +.row-fluid .offset1:first-child { + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; +} + +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} + +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} + +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} + +.container:before, +.container:after { + display: table; + line-height: 0; + content: ""; +} + +.container:after { + clear: both; +} + +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.container-fluid:after { + clear: both; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} + +small { + font-size: 85%; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +cite { + font-style: normal; +} + +.muted { + color: #999999; +} + +a.muted:hover, +a.muted:focus { + color: #808080; +} + +.text-warning { + color: #c09853; +} + +a.text-warning:hover, +a.text-warning:focus { + color: #a47e3c; +} + +.text-error { + color: #b94a48; +} + +a.text-error:hover, +a.text-error:focus { + color: #953b39; +} + +.text-info { + color: #3a87ad; +} + +a.text-info:hover, +a.text-info:focus { + color: #2d6987; +} + +.text-success { + color: #468847; +} + +a.text-success:hover, +a.text-success:focus { + color: #356635; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + line-height: 40px; +} + +h1 { + font-size: 38.5px; +} + +h2 { + font-size: 31.5px; +} + +h3 { + font-size: 24.5px; +} + +h4 { + font-size: 17.5px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 11.9px; +} + +h1 small { + font-size: 24.5px; +} + +h2 small { + font-size: 17.5px; +} + +h3 small { + font-size: 14px; +} + +h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + padding: 0; + margin: 0 0 10px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +li { + line-height: 20px; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +ul.inline, +ol.inline { + margin-left: 0; + list-style: none; +} + +ul.inline > li, +ol.inline > li { + display: inline-block; + *display: inline; + padding-right: 5px; + padding-left: 5px; + *zoom: 1; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 10px; +} + +.dl-horizontal { + *zoom: 1; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + line-height: 0; + content: ""; +} + +.dl-horizontal:after { + clear: both; +} + +.dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dl-horizontal dd { + margin-left: 180px; +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 20px; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + padding: 2px 4px; + color: #d14; + white-space: nowrap; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 20px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +legend small { + font-size: 15px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 13px; + line-height: 18px; + color: #555555; + vertical-align: middle; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +input, +textarea, +.uneditable-input { + width: 206px; +} + +textarea { + height: auto; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + *margin-top: 0; + line-height: normal; +} + +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} + +select { + width: 220px; + background-color: #ffffff; + border: 1px solid #cccccc; +} + +select[multiple], +select[size] { + height: auto; +} + +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.uneditable-input, +.uneditable-textarea { + color: #999999; + cursor: not-allowed; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} + +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} + +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} + +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} + +.input-mini { + width: 60px; +} + +.input-small { + width: 90px; +} + +.input-medium { + width: 150px; +} + +.input-large { + width: 210px; +} + +.input-xlarge { + width: 270px; +} + +.input-xxlarge { + width: 530px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} + +input, +textarea, +.uneditable-input { + margin-left: 0; +} + +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 926px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 846px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 766px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 686px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 606px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 526px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 446px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 366px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 286px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 206px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 126px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 46px; +} + +.controls-row { + *zoom: 1; +} + +.controls-row:before, +.controls-row:after { + display: table; + line-height: 0; + content: ""; +} + +.controls-row:after { + clear: both; +} + +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} + +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} + +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} + +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} + +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} + +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} + +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} + +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} + +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + line-height: 0; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.help-block, +.help-inline { + color: #595959; +} + +.help-block { + display: block; + margin-bottom: 10px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-append, +.input-prepend { + display: inline-block; + margin-bottom: 10px; + font-size: 0; + white-space: nowrap; + vertical-align: middle; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu, +.input-append .popover, +.input-prepend .popover { + font-size: 14px; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} + +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} + +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} + +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +/* Allow for input prepend/append in search forms */ + +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + margin-bottom: 0; + vertical-align: middle; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} + +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} + +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} + +.control-group { + margin-bottom: 10px; +} + +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + line-height: 0; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 180px; +} + +.form-horizontal .help-block { + margin-bottom: 0; +} + +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} + +.form-horizontal .form-actions { + padding-left: 180px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table th { + font-weight: bold; +} + +.table thead th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} + +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} + +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child, +.table-bordered tbody:first-child tr:first-child > th:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child, +.table-bordered tbody:first-child tr:first-child > th:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tbody:last-child tr:last-child > th:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > th:first-child { + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tbody:last-child tr:last-child > th:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > th:last-child { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; +} + +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-striped tbody > tr:nth-child(odd) > td, +.table-striped tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover > td, +.table-hover tbody tr:hover > th { + background-color: #f5f5f5; +} + +table td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} + +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} + +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} + +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} + +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} + +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} + +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} + +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} + +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} + +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} + +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} + +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} + +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} + +.table tbody tr.success > td { + background-color: #dff0d8; +} + +.table tbody tr.error > td { + background-color: #f2dede; +} + +.table tbody tr.warning > td { + background-color: #fcf8e3; +} + +.table tbody tr.info > td { + background-color: #d9edf7; +} + +.table-hover tbody tr.success:hover > td { + background-color: #d0e9c6; +} + +.table-hover tbody tr.error:hover > td { + background-color: #ebcccc; +} + +.table-hover tbody tr.warning:hover > td { + background-color: #faf2cc; +} + +.table-hover tbody tr.info:hover > td { + background-color: #c4e3f3; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 1px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +/* White icons with optional class, or on hover/focus/active states of certain elements */ + +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:focus > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > li > a:focus > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:focus > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"], +.dropdown-submenu:focus > a > [class*=" icon-"] { + background-image: url("../img/glyphicons-halflings-white.png"); +} + +.icon-glass { + background-position: 0 0; +} + +.icon-music { + background-position: -24px 0; +} + +.icon-search { + background-position: -48px 0; +} + +.icon-envelope { + background-position: -72px 0; +} + +.icon-heart { + background-position: -96px 0; +} + +.icon-star { + background-position: -120px 0; +} + +.icon-star-empty { + background-position: -144px 0; +} + +.icon-user { + background-position: -168px 0; +} + +.icon-film { + background-position: -192px 0; +} + +.icon-th-large { + background-position: -216px 0; +} + +.icon-th { + background-position: -240px 0; +} + +.icon-th-list { + background-position: -264px 0; +} + +.icon-ok { + background-position: -288px 0; +} + +.icon-remove { + background-position: -312px 0; +} + +.icon-zoom-in { + background-position: -336px 0; +} + +.icon-zoom-out { + background-position: -360px 0; +} + +.icon-off { + background-position: -384px 0; +} + +.icon-signal { + background-position: -408px 0; +} + +.icon-cog { + background-position: -432px 0; +} + +.icon-trash { + background-position: -456px 0; +} + +.icon-home { + background-position: 0 -24px; +} + +.icon-file { + background-position: -24px -24px; +} + +.icon-time { + background-position: -48px -24px; +} + +.icon-road { + background-position: -72px -24px; +} + +.icon-download-alt { + background-position: -96px -24px; +} + +.icon-download { + background-position: -120px -24px; +} + +.icon-upload { + background-position: -144px -24px; +} + +.icon-inbox { + background-position: -168px -24px; +} + +.icon-play-circle { + background-position: -192px -24px; +} + +.icon-repeat { + background-position: -216px -24px; +} + +.icon-refresh { + background-position: -240px -24px; +} + +.icon-list-alt { + background-position: -264px -24px; +} + +.icon-lock { + background-position: -287px -24px; +} + +.icon-flag { + background-position: -312px -24px; +} + +.icon-headphones { + background-position: -336px -24px; +} + +.icon-volume-off { + background-position: -360px -24px; +} + +.icon-volume-down { + background-position: -384px -24px; +} + +.icon-volume-up { + background-position: -408px -24px; +} + +.icon-qrcode { + background-position: -432px -24px; +} + +.icon-barcode { + background-position: -456px -24px; +} + +.icon-tag { + background-position: 0 -48px; +} + +.icon-tags { + background-position: -25px -48px; +} + +.icon-book { + background-position: -48px -48px; +} + +.icon-bookmark { + background-position: -72px -48px; +} + +.icon-print { + background-position: -96px -48px; +} + +.icon-camera { + background-position: -120px -48px; +} + +.icon-font { + background-position: -144px -48px; +} + +.icon-bold { + background-position: -167px -48px; +} + +.icon-italic { + background-position: -192px -48px; +} + +.icon-text-height { + background-position: -216px -48px; +} + +.icon-text-width { + background-position: -240px -48px; +} + +.icon-align-left { + background-position: -264px -48px; +} + +.icon-align-center { + background-position: -288px -48px; +} + +.icon-align-right { + background-position: -312px -48px; +} + +.icon-align-justify { + background-position: -336px -48px; +} + +.icon-list { + background-position: -360px -48px; +} + +.icon-indent-left { + background-position: -384px -48px; +} + +.icon-indent-right { + background-position: -408px -48px; +} + +.icon-facetime-video { + background-position: -432px -48px; +} + +.icon-picture { + background-position: -456px -48px; +} + +.icon-pencil { + background-position: 0 -72px; +} + +.icon-map-marker { + background-position: -24px -72px; +} + +.icon-adjust { + background-position: -48px -72px; +} + +.icon-tint { + background-position: -72px -72px; +} + +.icon-edit { + background-position: -96px -72px; +} + +.icon-share { + background-position: -120px -72px; +} + +.icon-check { + background-position: -144px -72px; +} + +.icon-move { + background-position: -168px -72px; +} + +.icon-step-backward { + background-position: -192px -72px; +} + +.icon-fast-backward { + background-position: -216px -72px; +} + +.icon-backward { + background-position: -240px -72px; +} + +.icon-play { + background-position: -264px -72px; +} + +.icon-pause { + background-position: -288px -72px; +} + +.icon-stop { + background-position: -312px -72px; +} + +.icon-forward { + background-position: -336px -72px; +} + +.icon-fast-forward { + background-position: -360px -72px; +} + +.icon-step-forward { + background-position: -384px -72px; +} + +.icon-eject { + background-position: -408px -72px; +} + +.icon-chevron-left { + background-position: -432px -72px; +} + +.icon-chevron-right { + background-position: -456px -72px; +} + +.icon-plus-sign { + background-position: 0 -96px; +} + +.icon-minus-sign { + background-position: -24px -96px; +} + +.icon-remove-sign { + background-position: -48px -96px; +} + +.icon-ok-sign { + background-position: -72px -96px; +} + +.icon-question-sign { + background-position: -96px -96px; +} + +.icon-info-sign { + background-position: -120px -96px; +} + +.icon-screenshot { + background-position: -144px -96px; +} + +.icon-remove-circle { + background-position: -168px -96px; +} + +.icon-ok-circle { + background-position: -192px -96px; +} + +.icon-ban-circle { + background-position: -216px -96px; +} + +.icon-arrow-left { + background-position: -240px -96px; +} + +.icon-arrow-right { + background-position: -264px -96px; +} + +.icon-arrow-up { + background-position: -289px -96px; +} + +.icon-arrow-down { + background-position: -312px -96px; +} + +.icon-share-alt { + background-position: -336px -96px; +} + +.icon-resize-full { + background-position: -360px -96px; +} + +.icon-resize-small { + background-position: -384px -96px; +} + +.icon-plus { + background-position: -408px -96px; +} + +.icon-minus { + background-position: -433px -96px; +} + +.icon-asterisk { + background-position: -456px -96px; +} + +.icon-exclamation-sign { + background-position: 0 -120px; +} + +.icon-gift { + background-position: -24px -120px; +} + +.icon-leaf { + background-position: -48px -120px; +} + +.icon-fire { + background-position: -72px -120px; +} + +.icon-eye-open { + background-position: -96px -120px; +} + +.icon-eye-close { + background-position: -120px -120px; +} + +.icon-warning-sign { + background-position: -144px -120px; +} + +.icon-plane { + background-position: -168px -120px; +} + +.icon-calendar { + background-position: -192px -120px; +} + +.icon-random { + width: 16px; + background-position: -216px -120px; +} + +.icon-comment { + background-position: -240px -120px; +} + +.icon-magnet { + background-position: -264px -120px; +} + +.icon-chevron-up { + background-position: -288px -120px; +} + +.icon-chevron-down { + background-position: -313px -119px; +} + +.icon-retweet { + background-position: -336px -120px; +} + +.icon-shopping-cart { + background-position: -360px -120px; +} + +.icon-folder-close { + width: 16px; + background-position: -384px -120px; +} + +.icon-folder-open { + width: 16px; + background-position: -408px -120px; +} + +.icon-resize-vertical { + background-position: -432px -119px; +} + +.icon-resize-horizontal { + background-position: -456px -118px; +} + +.icon-hdd { + background-position: 0 -144px; +} + +.icon-bullhorn { + background-position: -24px -144px; +} + +.icon-bell { + background-position: -48px -144px; +} + +.icon-certificate { + background-position: -72px -144px; +} + +.icon-thumbs-up { + background-position: -96px -144px; +} + +.icon-thumbs-down { + background-position: -120px -144px; +} + +.icon-hand-right { + background-position: -144px -144px; +} + +.icon-hand-left { + background-position: -168px -144px; +} + +.icon-hand-up { + background-position: -192px -144px; +} + +.icon-hand-down { + background-position: -216px -144px; +} + +.icon-circle-arrow-right { + background-position: -240px -144px; +} + +.icon-circle-arrow-left { + background-position: -264px -144px; +} + +.icon-circle-arrow-up { + background-position: -288px -144px; +} + +.icon-circle-arrow-down { + background-position: -312px -144px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-wrench { + background-position: -360px -144px; +} + +.icon-tasks { + background-position: -384px -144px; +} + +.icon-filter { + background-position: -408px -144px; +} + +.icon-briefcase { + background-position: -432px -144px; +} + +.icon-fullscreen { + background-position: -456px -144px; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle { + *margin-bottom: -3px; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open { + *z-index: 1000; +} + +.open > .dropdown-menu { + display: block; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} + +.dropdown-submenu > a:after { + display: block; + float: right; + width: 0; + height: 0; + margin-top: 5px; + margin-right: -10px; + border-color: transparent; + border-left-color: #cccccc; + border-style: solid; + border-width: 5px 0 5px 5px; + content: " "; +} + +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.dropdown .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; +} + +.typeahead { + z-index: 1051; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.collapse.in { + height: auto; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.btn { + display: inline-block; + *display: inline; + padding: 4px 12px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 13px; + line-height: 18px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + *background-color: #e6e6e6; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #cccccc; + *border: 0; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} + +.btn:active, +.btn.active { + background-color: #cccccc \9; +} + +.btn:first-child { + *margin-left: 0; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} + +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} + +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} + +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + *background-color: #0044cc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} + +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + *background-color: #f89406; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + *background-color: #bd362f; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + *background-color: #51a351; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + *background-color: #222222; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} + +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-link { + color: #0088cc; + cursor: pointer; + border-color: transparent; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-link:hover, +.btn-link:focus { + color: #005580; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +.btn-link[disabled]:focus { + color: #333333; + text-decoration: none; +} + +.btn-group { + position: relative; + display: inline-block; + *display: inline; + *margin-left: .3em; + font-size: 0; + white-space: nowrap; + vertical-align: middle; + *zoom: 1; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 10px; + margin-bottom: 10px; + font-size: 0; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group > .btn + .btn { + margin-left: -1px; +} + +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} + +.btn-group > .btn-mini { + font-size: 10.5px; +} + +.btn-group > .btn-small { + font-size: 11.9px; +} + +.btn-group > .btn-large { + font-size: 17.5px; +} + +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + *padding-top: 5px; + padding-right: 8px; + *padding-bottom: 5px; + padding-left: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group > .btn-mini + .dropdown-toggle { + *padding-top: 2px; + padding-right: 5px; + *padding-bottom: 2px; + padding-left: 5px; +} + +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large + .dropdown-toggle { + *padding-top: 7px; + padding-right: 12px; + *padding-bottom: 7px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} + +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} + +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} + +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} + +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} + +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} + +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} + +.btn .caret { + margin-top: 8px; + margin-left: 0; +} + +.btn-large .caret { + margin-top: 6px; +} + +.btn-large .caret { + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.btn-mini .caret, +.btn-small .caret { + margin-top: 8px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group-vertical > .btn + .btn { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert, +.alert h4 { + color: #c09853; +} + +.alert h4 { + margin: 0; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success h4 { + color: #468847; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info h4 { + color: #3a87ad; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.nav { + margin-bottom: 20px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li > a > img { + max-width: none; +} + +.nav > .pull-right { + float: right; +} + +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav-list { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 0; +} + +.nav-list > li > a, +.nav-list .nav-header { + margin-right: -15px; + margin-left: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.nav-list > li > a { + padding: 3px 15px; +} + +.nav-list > .active > a, +.nav-list > .active > a:hover, +.nav-list > .active > a:focus { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} + +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.nav-tabs, +.nav-pills { + *zoom: 1; +} + +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + line-height: 0; + content: ""; +} + +.nav-tabs:after, +.nav-pills:after { + clear: both; +} + +.nav-tabs > li, +.nav-pills > li { + float: left; +} + +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs > li { + margin-bottom: -1px; +} + +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover, +.nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover, +.nav-tabs > .active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.nav-pills > .active > a, +.nav-pills > .active > a:hover, +.nav-pills > .active > a:focus { + color: #ffffff; + background-color: #0088cc; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li > a { + margin-right: 0; +} + +.nav-tabs.nav-stacked { + border-bottom: 0; +} + +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.nav-tabs.nav-stacked > li > a:hover, +.nav-tabs.nav-stacked > li > a:focus { + z-index: 2; + border-color: #ddd; +} + +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} + +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} + +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.nav .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav .dropdown-toggle:hover .caret, +.nav .dropdown-toggle:focus .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +/* move down carets for tabs */ + +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} + +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} + +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.nav > .dropdown.active > a:hover, +.nav > .dropdown.active > a:focus { + cursor: pointer; +} + +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover, +.nav > li.dropdown.open.active > a:focus { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} + +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret, +.nav li.dropdown.open a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} + +.tabs-stacked .open > a:hover, +.tabs-stacked .open > a:focus { + border-color: #999999; +} + +.tabbable { + *zoom: 1; +} + +.tabbable:before, +.tabbable:after { + display: table; + line-height: 0; + content: ""; +} + +.tabbable:after { + clear: both; +} + +.tab-content { + overflow: auto; +} + +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} + +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.tabs-below > .nav-tabs > li > a:hover, +.tabs-below > .nav-tabs > li > a:focus { + border-top-color: #ddd; + border-bottom-color: transparent; +} + +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover, +.tabs-below > .nav-tabs > .active > a:focus { + border-color: transparent #ddd #ddd #ddd; +} + +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} + +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} + +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.tabs-left > .nav-tabs > li > a:hover, +.tabs-left > .nav-tabs > li > a:focus { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} + +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover, +.tabs-left > .nav-tabs .active > a:focus { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} + +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} + +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.tabs-right > .nav-tabs > li > a:hover, +.tabs-right > .nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} + +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover, +.tabs-right > .nav-tabs .active > a:focus { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} + +.nav > .disabled > a { + color: #999999; +} + +.nav > .disabled > a:hover, +.nav > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 20px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.navbar-inner:before, +.navbar-inner:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-inner:after { + clear: both; +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; + overflow: visible; +} + +.navbar .brand { + display: block; + float: left; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .brand:hover, +.navbar .brand:focus { + text-decoration: none; +} + +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} + +.navbar-link { + color: #777777; +} + +.navbar-link:hover, +.navbar-link:focus { + color: #333333; +} + +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-right: 1px solid #ffffff; + border-left: 1px solid #f2f2f2; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn, +.navbar .input-prepend .btn-group, +.navbar .input-append .btn-group { + margin-top: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-form:after { + clear: both; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} + +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} + +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 14px; + margin-bottom: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.navbar-static-top { + position: static; + margin-bottom: 0; +} + +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} + +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-right: 0; + padding-left: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} + +.navbar .nav > li { + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} + +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + color: #333333; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + *background-color: #e5e5e5; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} + +.navbar .btn-navbar:hover, +.navbar .btn-navbar:focus, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} + +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} + +.navbar .nav > li > .dropdown-menu:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} + +.navbar .nav > li > .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + top: auto; + bottom: -7px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown > a:hover .caret, +.navbar .nav li.dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + color: #555555; + background-color: #e5e5e5; +} + +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + right: 100%; + left: auto; + margin-right: -1px; + margin-left: 0; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + border-color: #252525; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); +} + +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover, +.navbar-inverse .brand:focus, +.navbar-inverse .nav > li > a:focus { + color: #ffffff; +} + +.navbar-inverse .brand { + color: #999999; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover, +.navbar-inverse .navbar-link:focus { + color: #ffffff; +} + +.navbar-inverse .divider-vertical { + border-right-color: #222222; + border-left-color: #111111; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .nav li.dropdown > a:hover .caret, +.navbar-inverse .nav li.dropdown > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + outline: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} + +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + *background-color: #040404; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:focus, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} + +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} + +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + margin: 20px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *zoom: 1; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination ul > li { + display: inline; +} + +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination ul > li > a:hover, +.pagination ul > li > a:focus, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} + +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} + +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover, +.pagination ul > .disabled > a:focus { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} + +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; +} + +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; +} + +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} + +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} + +.pager { + margin: 20px 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + line-height: 0; + content: ""; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: default; + background-color: #fff; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal.fade { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 10%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-header h3 { + margin: 0; + line-height: 30px; +} + +.modal-body { + position: relative; + max-height: 400px; + padding: 15px; + overflow-y: auto; +} + +.modal-form { + margin-bottom: 0; +} + +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + line-height: 0; + content: ""; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 11px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} + +.popover-title:empty { + display: none; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + line-height: 0; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} + +.thumbnail > img { + display: block; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #555555; +} + +.media, +.media-body { + overflow: hidden; + *overflow: visible; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + margin-left: 0; + list-style: none; +} + +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; +} + +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding-right: 9px; + padding-left: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +.label:empty, +.badge:empty { + display: none; +} + +a.label:hover, +a.label:focus, +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label-important, +.badge-important { + background-color: #b94a48; +} + +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} + +.label-warning, +.badge-warning { + background-color: #f89406; +} + +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} + +.label-success, +.badge-success { + background-color: #468847; +} + +.label-success[href], +.badge-success[href] { + background-color: #356635; +} + +.label-info, +.badge-info { + background-color: #3a87ad; +} + +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} + +.label-inverse, +.badge-inverse { + background-color: #333333; +} + +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} + +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} + +.btn-mini .label, +.btn-mini .badge { + top: 0; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress .bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); +} + +.progress-striped .bar { + background-color: #149bdf; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} + +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} + +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.accordion { + margin-bottom: 1px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.right { + right: 15px; + left: auto; +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-indicators { + position: absolute; + top: 15px; + right: 15px; + z-index: 5; + margin: 0; + list-style: none; +} + +.carousel-indicators li { + display: block; + float: left; + width: 10px; + height: 10px; + margin-left: 5px; + text-indent: -999px; + background-color: #ccc; + background-color: rgba(255, 255, 255, 0.25); + border-radius: 5px; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + line-height: 20px; + color: #ffffff; +} + +.carousel-caption h4 { + margin: 0 0 5px; +} + +.carousel-caption p { + margin-bottom: 0; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + color: inherit; +} + +.hero-unit li { + line-height: 30px; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} + +.affix { + position: fixed; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-all/css/bootstrap.min.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-all/css/bootstrap.min.css new file mode 100644 index 00000000..815f9f0b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-all/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v2.3.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:13px;line-height:18px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:13px;line-height:18px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-all/img/glyphicons-halflings-white.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-all/img/glyphicons-halflings-white.png new file mode 100644 index 00000000..3bf6484a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-all/img/glyphicons-halflings-white.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-all/img/glyphicons-halflings.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-all/img/glyphicons-halflings.png new file mode 100644 index 00000000..a9969993 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-all/img/glyphicons-halflings.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-botton-form-icons-buttongroups-dropdowns/css/bootstrap.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-botton-form-icons-buttongroups-dropdowns/css/bootstrap.css new file mode 100644 index 00000000..196140c0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-botton-form-icons-buttongroups-dropdowns/css/bootstrap.css @@ -0,0 +1,1951 @@ +/*! + * Bootstrap v2.3.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ +.clearfix { + *zoom: 1; +} +.clearfix:before, +.clearfix:after { + display: table; + content: ""; + line-height: 0; +} +.clearfix:after { + clear: both; +} +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +form { + margin: 0 0 20px; +} +fieldset { + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +legend small { + font-size: 15px; + color: #999999; +} +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} +label { + display: block; + margin-bottom: 5px; +} +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + vertical-align: middle; +} +input, +textarea, +.uneditable-input { + width: 206px; +} +textarea { + height: auto; +} +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear .2s, box-shadow linear .2s; + -moz-transition: border linear .2s, box-shadow linear .2s; + -o-transition: border linear .2s, box-shadow linear .2s; + transition: border linear .2s, box-shadow linear .2s; +} +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); + -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + *margin-top: 0; + /* IE7 */ + + margin-top: 1px \9; + /* IE8-9 */ + + line-height: normal; +} +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} +select { + width: 220px; + border: 1px solid #cccccc; + background-color: #ffffff; +} +select[multiple], +select[size] { + height: auto; +} +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.uneditable-input, +.uneditable-textarea { + color: #999999; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} +.uneditable-textarea { + width: auto; + height: auto; +} +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} +.input-mini { + width: 60px; +} +.input-small { + width: 90px; +} +.input-medium { + width: 150px; +} +.input-large { + width: 210px; +} +.input-xlarge { + width: 270px; +} +.input-xxlarge { + width: 530px; +} +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} +input, +textarea, +.uneditable-input { + margin-left: 0; +} +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 926px; +} +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 846px; +} +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 766px; +} +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 686px; +} +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 606px; +} +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 526px; +} +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 446px; +} +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 366px; +} +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 286px; +} +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 206px; +} +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 126px; +} +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 46px; +} +.controls-row { + *zoom: 1; +} +.controls-row:before, +.controls-row:after { + display: table; + content: ""; + line-height: 0; +} +.controls-row:after { + clear: both; +} +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} +.form-actions:before, +.form-actions:after { + display: table; + content: ""; + line-height: 0; +} +.form-actions:after { + clear: both; +} +.help-block, +.help-inline { + color: #595959; +} +.help-block { + display: block; + margin-bottom: 10px; +} +.help-inline { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + vertical-align: middle; + padding-left: 5px; +} +.input-append, +.input-prepend { + display: inline-block; + margin-bottom: 10px; + vertical-align: middle; + font-size: 0; + white-space: nowrap; +} +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu, +.input-append .popover, +.input-prepend .popover { + font-size: 14px; +} +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} +/* Allow for input prepend/append in search forms */ +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + margin-bottom: 0; + vertical-align: middle; +} +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} +.control-group { + margin-bottom: 10px; +} +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + content: ""; + line-height: 0; +} +.form-horizontal .control-group:after { + clear: both; +} +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} +.form-horizontal .controls:first-child { + *padding-left: 180px; +} +.form-horizontal .help-block { + margin-bottom: 0; +} +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} +.form-horizontal .form-actions { + padding-left: 180px; +} +.btn { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + padding: 4px 12px; + margin-bottom: 0; + font-size: 14px; + line-height: 20px; + text-align: center; + vertical-align: middle; + cursor: pointer; + color: #333333; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #e6e6e6; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + border: 1px solid #cccccc; + *border: 0; + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *margin-left: .3em; + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); +} +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} +.btn:active, +.btn.active { + background-color: #cccccc \9; +} +.btn:first-child { + *margin-left: 0; +} +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); +} +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; + padding-left: 0; + padding-right: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #0044cc; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #f89406; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #bd362f; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #51a351; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #2f96b4; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #222222; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn-link { + border-color: transparent; + cursor: pointer; + color: #0088cc; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.btn-link:hover, +.btn-link:focus { + color: #005580; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +.btn-link[disabled]:focus { + color: #333333; + text-decoration: none; +} +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; + margin-top: 1px; +} +/* White icons with optional class, or on hover/focus/active states of certain elements */ +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:focus > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > li > a:focus > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:focus > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"], +.dropdown-submenu:focus > a > [class*=" icon-"] { + background-image: url("../img/glyphicons-halflings-white.png"); +} +.icon-glass { + background-position: 0 0; +} +.icon-music { + background-position: -24px 0; +} +.icon-search { + background-position: -48px 0; +} +.icon-envelope { + background-position: -72px 0; +} +.icon-heart { + background-position: -96px 0; +} +.icon-star { + background-position: -120px 0; +} +.icon-star-empty { + background-position: -144px 0; +} +.icon-user { + background-position: -168px 0; +} +.icon-film { + background-position: -192px 0; +} +.icon-th-large { + background-position: -216px 0; +} +.icon-th { + background-position: -240px 0; +} +.icon-th-list { + background-position: -264px 0; +} +.icon-ok { + background-position: -288px 0; +} +.icon-remove { + background-position: -312px 0; +} +.icon-zoom-in { + background-position: -336px 0; +} +.icon-zoom-out { + background-position: -360px 0; +} +.icon-off { + background-position: -384px 0; +} +.icon-signal { + background-position: -408px 0; +} +.icon-cog { + background-position: -432px 0; +} +.icon-trash { + background-position: -456px 0; +} +.icon-home { + background-position: 0 -24px; +} +.icon-file { + background-position: -24px -24px; +} +.icon-time { + background-position: -48px -24px; +} +.icon-road { + background-position: -72px -24px; +} +.icon-download-alt { + background-position: -96px -24px; +} +.icon-download { + background-position: -120px -24px; +} +.icon-upload { + background-position: -144px -24px; +} +.icon-inbox { + background-position: -168px -24px; +} +.icon-play-circle { + background-position: -192px -24px; +} +.icon-repeat { + background-position: -216px -24px; +} +.icon-refresh { + background-position: -240px -24px; +} +.icon-list-alt { + background-position: -264px -24px; +} +.icon-lock { + background-position: -287px -24px; +} +.icon-flag { + background-position: -312px -24px; +} +.icon-headphones { + background-position: -336px -24px; +} +.icon-volume-off { + background-position: -360px -24px; +} +.icon-volume-down { + background-position: -384px -24px; +} +.icon-volume-up { + background-position: -408px -24px; +} +.icon-qrcode { + background-position: -432px -24px; +} +.icon-barcode { + background-position: -456px -24px; +} +.icon-tag { + background-position: 0 -48px; +} +.icon-tags { + background-position: -25px -48px; +} +.icon-book { + background-position: -48px -48px; +} +.icon-bookmark { + background-position: -72px -48px; +} +.icon-print { + background-position: -96px -48px; +} +.icon-camera { + background-position: -120px -48px; +} +.icon-font { + background-position: -144px -48px; +} +.icon-bold { + background-position: -167px -48px; +} +.icon-italic { + background-position: -192px -48px; +} +.icon-text-height { + background-position: -216px -48px; +} +.icon-text-width { + background-position: -240px -48px; +} +.icon-align-left { + background-position: -264px -48px; +} +.icon-align-center { + background-position: -288px -48px; +} +.icon-align-right { + background-position: -312px -48px; +} +.icon-align-justify { + background-position: -336px -48px; +} +.icon-list { + background-position: -360px -48px; +} +.icon-indent-left { + background-position: -384px -48px; +} +.icon-indent-right { + background-position: -408px -48px; +} +.icon-facetime-video { + background-position: -432px -48px; +} +.icon-picture { + background-position: -456px -48px; +} +.icon-pencil { + background-position: 0 -72px; +} +.icon-map-marker { + background-position: -24px -72px; +} +.icon-adjust { + background-position: -48px -72px; +} +.icon-tint { + background-position: -72px -72px; +} +.icon-edit { + background-position: -96px -72px; +} +.icon-share { + background-position: -120px -72px; +} +.icon-check { + background-position: -144px -72px; +} +.icon-move { + background-position: -168px -72px; +} +.icon-step-backward { + background-position: -192px -72px; +} +.icon-fast-backward { + background-position: -216px -72px; +} +.icon-backward { + background-position: -240px -72px; +} +.icon-play { + background-position: -264px -72px; +} +.icon-pause { + background-position: -288px -72px; +} +.icon-stop { + background-position: -312px -72px; +} +.icon-forward { + background-position: -336px -72px; +} +.icon-fast-forward { + background-position: -360px -72px; +} +.icon-step-forward { + background-position: -384px -72px; +} +.icon-eject { + background-position: -408px -72px; +} +.icon-chevron-left { + background-position: -432px -72px; +} +.icon-chevron-right { + background-position: -456px -72px; +} +.icon-plus-sign { + background-position: 0 -96px; +} +.icon-minus-sign { + background-position: -24px -96px; +} +.icon-remove-sign { + background-position: -48px -96px; +} +.icon-ok-sign { + background-position: -72px -96px; +} +.icon-question-sign { + background-position: -96px -96px; +} +.icon-info-sign { + background-position: -120px -96px; +} +.icon-screenshot { + background-position: -144px -96px; +} +.icon-remove-circle { + background-position: -168px -96px; +} +.icon-ok-circle { + background-position: -192px -96px; +} +.icon-ban-circle { + background-position: -216px -96px; +} +.icon-arrow-left { + background-position: -240px -96px; +} +.icon-arrow-right { + background-position: -264px -96px; +} +.icon-arrow-up { + background-position: -289px -96px; +} +.icon-arrow-down { + background-position: -312px -96px; +} +.icon-share-alt { + background-position: -336px -96px; +} +.icon-resize-full { + background-position: -360px -96px; +} +.icon-resize-small { + background-position: -384px -96px; +} +.icon-plus { + background-position: -408px -96px; +} +.icon-minus { + background-position: -433px -96px; +} +.icon-asterisk { + background-position: -456px -96px; +} +.icon-exclamation-sign { + background-position: 0 -120px; +} +.icon-gift { + background-position: -24px -120px; +} +.icon-leaf { + background-position: -48px -120px; +} +.icon-fire { + background-position: -72px -120px; +} +.icon-eye-open { + background-position: -96px -120px; +} +.icon-eye-close { + background-position: -120px -120px; +} +.icon-warning-sign { + background-position: -144px -120px; +} +.icon-plane { + background-position: -168px -120px; +} +.icon-calendar { + background-position: -192px -120px; +} +.icon-random { + background-position: -216px -120px; + width: 16px; +} +.icon-comment { + background-position: -240px -120px; +} +.icon-magnet { + background-position: -264px -120px; +} +.icon-chevron-up { + background-position: -288px -120px; +} +.icon-chevron-down { + background-position: -313px -119px; +} +.icon-retweet { + background-position: -336px -120px; +} +.icon-shopping-cart { + background-position: -360px -120px; +} +.icon-folder-close { + background-position: -384px -120px; + width: 16px; +} +.icon-folder-open { + background-position: -408px -120px; + width: 16px; +} +.icon-resize-vertical { + background-position: -432px -119px; +} +.icon-resize-horizontal { + background-position: -456px -118px; +} +.icon-hdd { + background-position: 0 -144px; +} +.icon-bullhorn { + background-position: -24px -144px; +} +.icon-bell { + background-position: -48px -144px; +} +.icon-certificate { + background-position: -72px -144px; +} +.icon-thumbs-up { + background-position: -96px -144px; +} +.icon-thumbs-down { + background-position: -120px -144px; +} +.icon-hand-right { + background-position: -144px -144px; +} +.icon-hand-left { + background-position: -168px -144px; +} +.icon-hand-up { + background-position: -192px -144px; +} +.icon-hand-down { + background-position: -216px -144px; +} +.icon-circle-arrow-right { + background-position: -240px -144px; +} +.icon-circle-arrow-left { + background-position: -264px -144px; +} +.icon-circle-arrow-up { + background-position: -288px -144px; +} +.icon-circle-arrow-down { + background-position: -312px -144px; +} +.icon-globe { + background-position: -336px -144px; +} +.icon-wrench { + background-position: -360px -144px; +} +.icon-tasks { + background-position: -384px -144px; +} +.icon-filter { + background-position: -408px -144px; +} +.icon-briefcase { + background-position: -432px -144px; +} +.icon-fullscreen { + background-position: -456px -144px; +} +.btn-group { + position: relative; + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + font-size: 0; + vertical-align: middle; + white-space: nowrap; + *margin-left: .3em; +} +.btn-group:first-child { + *margin-left: 0; +} +.btn-group + .btn-group { + margin-left: 5px; +} +.btn-toolbar { + font-size: 0; + margin-top: 10px; + margin-bottom: 10px; +} +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.btn-group > .btn + .btn { + margin-left: -1px; +} +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} +.btn-group > .btn-mini { + font-size: 10.5px; +} +.btn-group > .btn-small { + font-size: 11.9px; +} +.btn-group > .btn-large { + font-size: 17.5px; +} +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; +} +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-top-left-radius: 6px; + -moz-border-radius-topleft: 6px; + border-top-left-radius: 6px; + -webkit-border-bottom-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + border-bottom-left-radius: 6px; +} +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + -moz-border-radius-topright: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + -moz-border-radius-bottomright: 6px; + border-bottom-right-radius: 6px; +} +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + *padding-top: 5px; + *padding-bottom: 5px; +} +.btn-group > .btn-mini + .dropdown-toggle { + padding-left: 5px; + padding-right: 5px; + *padding-top: 2px; + *padding-bottom: 2px; +} +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} +.btn-group > .btn-large + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; + *padding-top: 7px; + *padding-bottom: 7px; +} +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); +} +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} +.btn .caret { + margin-top: 8px; + margin-left: 0; +} +.btn-large .caret { + margin-top: 6px; +} +.btn-large .caret { + border-left-width: 5px; + border-right-width: 5px; + border-top-width: 5px; +} +.btn-mini .caret, +.btn-small .caret { + margin-top: 8px; +} +.dropup .btn-large .caret { + border-bottom-width: 5px; +} +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.btn-group-vertical > .btn + .btn { + margin-left: 0; + margin-top: -1px; +} +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-botton-form-icons-buttongroups-dropdowns/css/bootstrap.min.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-botton-form-icons-buttongroups-dropdowns/css/bootstrap.min.css new file mode 100644 index 00000000..a8afabcb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-botton-form-icons-buttongroups-dropdowns/css/bootstrap.min.css @@ -0,0 +1,344 @@ +/*! + * Bootstrap v2.3.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ +.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0;} +.clearfix:after{clear:both;} +.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;} +.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} +form{margin:0 0 20px;} +fieldset{padding:0;margin:0;border:0;} +legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333333;border:0;border-bottom:1px solid #e5e5e5;}legend small{font-size:15px;color:#999999;} +label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px;} +input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} +label{display:block;margin-bottom:5px;} +select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555555;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;vertical-align:middle;} +input,textarea,.uneditable-input{width:206px;} +textarea{height:auto;} +textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear .2s, box-shadow linear .2s;-moz-transition:border linear .2s, box-shadow linear .2s;-o-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);} +input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal;} +input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto;} +select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px;} +select{width:220px;border:1px solid #cccccc;background-color:#ffffff;} +select[multiple],select[size]{height:auto;} +select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +.uneditable-input,.uneditable-textarea{color:#999999;background-color:#fcfcfc;border-color:#cccccc;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} +.uneditable-input{overflow:hidden;white-space:nowrap;} +.uneditable-textarea{width:auto;height:auto;} +input:-moz-placeholder,textarea:-moz-placeholder{color:#999999;} +input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999999;} +input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999999;} +.radio,.checkbox{min-height:20px;padding-left:20px;} +.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px;} +.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} +.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} +.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} +.input-mini{width:60px;} +.input-small{width:90px;} +.input-medium{width:150px;} +.input-large{width:210px;} +.input-xlarge{width:270px;} +.input-xxlarge{width:530px;} +input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0;} +.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block;} +input,textarea,.uneditable-input{margin-left:0;} +.controls-row [class*="span"]+[class*="span"]{margin-left:20px;} +input.span12,textarea.span12,.uneditable-input.span12{width:926px;} +input.span11,textarea.span11,.uneditable-input.span11{width:846px;} +input.span10,textarea.span10,.uneditable-input.span10{width:766px;} +input.span9,textarea.span9,.uneditable-input.span9{width:686px;} +input.span8,textarea.span8,.uneditable-input.span8{width:606px;} +input.span7,textarea.span7,.uneditable-input.span7{width:526px;} +input.span6,textarea.span6,.uneditable-input.span6{width:446px;} +input.span5,textarea.span5,.uneditable-input.span5{width:366px;} +input.span4,textarea.span4,.uneditable-input.span4{width:286px;} +input.span3,textarea.span3,.uneditable-input.span3{width:206px;} +input.span2,textarea.span2,.uneditable-input.span2{width:126px;} +input.span1,textarea.span1,.uneditable-input.span1{width:46px;} +.controls-row{*zoom:1;}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0;} +.controls-row:after{clear:both;} +.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left;} +.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px;} +input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eeeeee;} +input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent;} +.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} +.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;} +.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;} +.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} +.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} +.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;} +.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;} +.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} +.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} +.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;} +.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;} +.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} +.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad;} +.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad;} +.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;} +.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad;} +input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} +.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0;} +.form-actions:after{clear:both;} +.help-block,.help-inline{color:#595959;} +.help-block{display:block;margin-bottom:10px;} +.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;} +.input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap;}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px;} +.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2;} +.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #ccc;} +.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546;} +.input-prepend .add-on,.input-prepend .btn{margin-right:-1px;} +.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} +.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px;} +.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} +.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.input-prepend.input-append .btn-group:first-child{margin-left:0;} +input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} +.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} +.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} +.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} +.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} +.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle;} +.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} +.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block;} +.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;} +.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;} +.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0;} +.control-group{margin-bottom:10px;} +legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate;} +.form-horizontal .control-group{margin-bottom:20px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0;} +.form-horizontal .control-group:after{clear:both;} +.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right;} +.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0;}.form-horizontal .controls:first-child{*padding-left:180px;} +.form-horizontal .help-block{margin-bottom:0;} +.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px;} +.form-horizontal .form-actions{padding-left:180px;} +.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333333;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #cccccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333333;background-color:#e6e6e6;*background-color:#d9d9d9;} +.btn:active,.btn.active{background-color:#cccccc \9;} +.btn:first-child{*margin-left:0;} +.btn:hover,.btn:focus{color:#333333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} +.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} +.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px;} +.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0;} +.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px;} +.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} +.btn-block+.btn-block{margin-top:5px;} +input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%;} +.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);} +.btn-primary{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(to bottom, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#0044cc;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#ffffff;background-color:#0044cc;*background-color:#003bb3;} +.btn-primary:active,.btn-primary.active{background-color:#003399 \9;} +.btn-warning{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#ffffff;background-color:#f89406;*background-color:#df8505;} +.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} +.btn-danger{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(to bottom, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#ffffff;background-color:#bd362f;*background-color:#a9302a;} +.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} +.btn-success{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(to bottom, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#ffffff;background-color:#51a351;*background-color:#499249;} +.btn-success:active,.btn-success.active{background-color:#408140 \9;} +.btn-info{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(to bottom, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#ffffff;background-color:#2f96b4;*background-color:#2a85a0;} +.btn-info:active,.btn-info.active{background-color:#24748c \9;} +.btn-inverse{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#363636;background-image:-moz-linear-gradient(top, #444444, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));background-image:-webkit-linear-gradient(top, #444444, #222222);background-image:-o-linear-gradient(top, #444444, #222222);background-image:linear-gradient(to bottom, #444444, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#ffffff;background-color:#222222;*background-color:#151515;} +.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;} +button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} +button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;} +button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;} +button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;} +.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.btn-link{border-color:transparent;cursor:pointer;color:#0088cc;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent;} +.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333333;text-decoration:none;} +[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px;} +.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png");} +.icon-glass{background-position:0 0;} +.icon-music{background-position:-24px 0;} +.icon-search{background-position:-48px 0;} +.icon-envelope{background-position:-72px 0;} +.icon-heart{background-position:-96px 0;} +.icon-star{background-position:-120px 0;} +.icon-star-empty{background-position:-144px 0;} +.icon-user{background-position:-168px 0;} +.icon-film{background-position:-192px 0;} +.icon-th-large{background-position:-216px 0;} +.icon-th{background-position:-240px 0;} +.icon-th-list{background-position:-264px 0;} +.icon-ok{background-position:-288px 0;} +.icon-remove{background-position:-312px 0;} +.icon-zoom-in{background-position:-336px 0;} +.icon-zoom-out{background-position:-360px 0;} +.icon-off{background-position:-384px 0;} +.icon-signal{background-position:-408px 0;} +.icon-cog{background-position:-432px 0;} +.icon-trash{background-position:-456px 0;} +.icon-home{background-position:0 -24px;} +.icon-file{background-position:-24px -24px;} +.icon-time{background-position:-48px -24px;} +.icon-road{background-position:-72px -24px;} +.icon-download-alt{background-position:-96px -24px;} +.icon-download{background-position:-120px -24px;} +.icon-upload{background-position:-144px -24px;} +.icon-inbox{background-position:-168px -24px;} +.icon-play-circle{background-position:-192px -24px;} +.icon-repeat{background-position:-216px -24px;} +.icon-refresh{background-position:-240px -24px;} +.icon-list-alt{background-position:-264px -24px;} +.icon-lock{background-position:-287px -24px;} +.icon-flag{background-position:-312px -24px;} +.icon-headphones{background-position:-336px -24px;} +.icon-volume-off{background-position:-360px -24px;} +.icon-volume-down{background-position:-384px -24px;} +.icon-volume-up{background-position:-408px -24px;} +.icon-qrcode{background-position:-432px -24px;} +.icon-barcode{background-position:-456px -24px;} +.icon-tag{background-position:0 -48px;} +.icon-tags{background-position:-25px -48px;} +.icon-book{background-position:-48px -48px;} +.icon-bookmark{background-position:-72px -48px;} +.icon-print{background-position:-96px -48px;} +.icon-camera{background-position:-120px -48px;} +.icon-font{background-position:-144px -48px;} +.icon-bold{background-position:-167px -48px;} +.icon-italic{background-position:-192px -48px;} +.icon-text-height{background-position:-216px -48px;} +.icon-text-width{background-position:-240px -48px;} +.icon-align-left{background-position:-264px -48px;} +.icon-align-center{background-position:-288px -48px;} +.icon-align-right{background-position:-312px -48px;} +.icon-align-justify{background-position:-336px -48px;} +.icon-list{background-position:-360px -48px;} +.icon-indent-left{background-position:-384px -48px;} +.icon-indent-right{background-position:-408px -48px;} +.icon-facetime-video{background-position:-432px -48px;} +.icon-picture{background-position:-456px -48px;} +.icon-pencil{background-position:0 -72px;} +.icon-map-marker{background-position:-24px -72px;} +.icon-adjust{background-position:-48px -72px;} +.icon-tint{background-position:-72px -72px;} +.icon-edit{background-position:-96px -72px;} +.icon-share{background-position:-120px -72px;} +.icon-check{background-position:-144px -72px;} +.icon-move{background-position:-168px -72px;} +.icon-step-backward{background-position:-192px -72px;} +.icon-fast-backward{background-position:-216px -72px;} +.icon-backward{background-position:-240px -72px;} +.icon-play{background-position:-264px -72px;} +.icon-pause{background-position:-288px -72px;} +.icon-stop{background-position:-312px -72px;} +.icon-forward{background-position:-336px -72px;} +.icon-fast-forward{background-position:-360px -72px;} +.icon-step-forward{background-position:-384px -72px;} +.icon-eject{background-position:-408px -72px;} +.icon-chevron-left{background-position:-432px -72px;} +.icon-chevron-right{background-position:-456px -72px;} +.icon-plus-sign{background-position:0 -96px;} +.icon-minus-sign{background-position:-24px -96px;} +.icon-remove-sign{background-position:-48px -96px;} +.icon-ok-sign{background-position:-72px -96px;} +.icon-question-sign{background-position:-96px -96px;} +.icon-info-sign{background-position:-120px -96px;} +.icon-screenshot{background-position:-144px -96px;} +.icon-remove-circle{background-position:-168px -96px;} +.icon-ok-circle{background-position:-192px -96px;} +.icon-ban-circle{background-position:-216px -96px;} +.icon-arrow-left{background-position:-240px -96px;} +.icon-arrow-right{background-position:-264px -96px;} +.icon-arrow-up{background-position:-289px -96px;} +.icon-arrow-down{background-position:-312px -96px;} +.icon-share-alt{background-position:-336px -96px;} +.icon-resize-full{background-position:-360px -96px;} +.icon-resize-small{background-position:-384px -96px;} +.icon-plus{background-position:-408px -96px;} +.icon-minus{background-position:-433px -96px;} +.icon-asterisk{background-position:-456px -96px;} +.icon-exclamation-sign{background-position:0 -120px;} +.icon-gift{background-position:-24px -120px;} +.icon-leaf{background-position:-48px -120px;} +.icon-fire{background-position:-72px -120px;} +.icon-eye-open{background-position:-96px -120px;} +.icon-eye-close{background-position:-120px -120px;} +.icon-warning-sign{background-position:-144px -120px;} +.icon-plane{background-position:-168px -120px;} +.icon-calendar{background-position:-192px -120px;} +.icon-random{background-position:-216px -120px;width:16px;} +.icon-comment{background-position:-240px -120px;} +.icon-magnet{background-position:-264px -120px;} +.icon-chevron-up{background-position:-288px -120px;} +.icon-chevron-down{background-position:-313px -119px;} +.icon-retweet{background-position:-336px -120px;} +.icon-shopping-cart{background-position:-360px -120px;} +.icon-folder-close{background-position:-384px -120px;width:16px;} +.icon-folder-open{background-position:-408px -120px;width:16px;} +.icon-resize-vertical{background-position:-432px -119px;} +.icon-resize-horizontal{background-position:-456px -118px;} +.icon-hdd{background-position:0 -144px;} +.icon-bullhorn{background-position:-24px -144px;} +.icon-bell{background-position:-48px -144px;} +.icon-certificate{background-position:-72px -144px;} +.icon-thumbs-up{background-position:-96px -144px;} +.icon-thumbs-down{background-position:-120px -144px;} +.icon-hand-right{background-position:-144px -144px;} +.icon-hand-left{background-position:-168px -144px;} +.icon-hand-up{background-position:-192px -144px;} +.icon-hand-down{background-position:-216px -144px;} +.icon-circle-arrow-right{background-position:-240px -144px;} +.icon-circle-arrow-left{background-position:-264px -144px;} +.icon-circle-arrow-up{background-position:-288px -144px;} +.icon-circle-arrow-down{background-position:-312px -144px;} +.icon-globe{background-position:-336px -144px;} +.icon-wrench{background-position:-360px -144px;} +.icon-tasks{background-position:-384px -144px;} +.icon-filter{background-position:-408px -144px;} +.icon-briefcase{background-position:-432px -144px;} +.icon-fullscreen{background-position:-456px -144px;} +.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em;}.btn-group:first-child{*margin-left:0;} +.btn-group+.btn-group{margin-left:5px;} +.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px;}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px;} +.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.btn-group>.btn+.btn{margin-left:-1px;} +.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px;} +.btn-group>.btn-mini{font-size:10.5px;} +.btn-group>.btn-small{font-size:11.9px;} +.btn-group>.btn-large{font-size:17.5px;} +.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} +.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} +.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} +.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} +.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2;} +.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} +.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px;} +.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px;} +.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px;} +.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px;} +.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} +.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6;} +.btn-group.open .btn-primary.dropdown-toggle{background-color:#0044cc;} +.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406;} +.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f;} +.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351;} +.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4;} +.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222222;} +.btn .caret{margin-top:8px;margin-left:0;} +.btn-large .caret{margin-top:6px;} +.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px;} +.btn-mini .caret,.btn-small .caret{margin-top:8px;} +.dropup .btn-large .caret{border-bottom-width:5px;} +.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} +.btn-group-vertical{display:inline-block;*display:inline;*zoom:1;} +.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px;} +.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} +.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} +.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0;} +.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-botton-form-icons-buttongroups-dropdowns/img/glyphicons-halflings-white.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-botton-form-icons-buttongroups-dropdowns/img/glyphicons-halflings-white.png new file mode 100644 index 00000000..3bf6484a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-botton-form-icons-buttongroups-dropdowns/img/glyphicons-halflings-white.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-botton-form-icons-buttongroups-dropdowns/img/glyphicons-halflings.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-botton-form-icons-buttongroups-dropdowns/img/glyphicons-halflings.png new file mode 100644 index 00000000..a9969993 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/bootstrap/bootstrap-botton-form-icons-buttongroups-dropdowns/img/glyphicons-halflings.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.bpa.main.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.bpa.main.css new file mode 100644 index 00000000..31cdeebd --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.bpa.main.css @@ -0,0 +1,57 @@ +html body { + background: url("../img/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; + background-position: center; + background-attachment: fixed; + margin:0px; + } + +.coe_team_main{ + width:1024px; + background: url("../img/wash-white-30.png") repeat scroll 0 0 transparent; + margin: 0 auto; + padding: 15px; + overflow-x:hidden; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); + height:100%; +} + +.bpa_portlet_add{ + font-size:12px; + float:right; + margin-top:5px; + margin-bottom:5px; + border-radius: 10px 10px 10px 10px; + background-color:#FFF; + border:1px; + border-color:#000; + cursor:pointer; + padding:3px; + color:#444; + margin-right:20px; +} +.bpa_portlet_add:hover{ + background-color:#006DCC; + color:#fff; +} +.nav-list{ + margin-bottom:5px; +} +.pli{ + cursor:pointer; +} +.tree-title{ + white-space:nowrap; + word-break: keep-all; +} +.tree-node{ + white-space:nowrap; + word-break: keep-all; +} +.wf-node{ + margin:0px; + border:0px; + padding-top:10px; + min-height:305px; + overflow:auto; + width:200px; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.bpa.portlet.content.manager.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.bpa.portlet.content.manager.css new file mode 100644 index 00000000..2779ebd4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.bpa.portlet.content.manager.css @@ -0,0 +1,112 @@ +body{ + background-color:#FFF; + padding: 5px 15px 5px 15px; +} +.content{ + background-color:#FFF; + margin-top:-10px; +} +.none{ + display:none; +} +select{ + width:450px; +} +input{ + width:440px; +} + +/*body,div,form{ + padding: 0; + margin:0; + outline-style: none; + }*/ + .BZ { +margin-top: 5px; +margin-bottom: 5px; +width: 450px; +font-size: 13px; +font: normal 13px Arial; +} +.BZ>div{ + margin-right: -4px; +} +.th:first-child { +border-left: 1px solid #c0c0c0; +border-radius: 3px 0 0 3px; +-webkit-border-radius: 3px 0 0 3px; +-moz-border-radius: 3px 0 0 3px; +} +.th:last-child { +border-right: 1px solid #c0c0c0; +border-radius: 0 3px 3px 0; +-webkit-border-radius: 0 3px 3px 0; +-moz-border-radius: 0 3px 3px 0; +} +.th.wkb { +background-image: none; +background: #fafafa; +box-shadow: inset 0px 0px 4px rgba(0,0,0,0.5); +-webkit-box-shadow: inset 0px 0px 4px rgba(0,0,0,0.5); +-moz-box-shadow: inset 0px 0px 4px rgba(0,0,0,0.5); +border-color: #999; +} +.th { +background-color: #eee; +background-image: -webkit-gradient(linear,left bottom,left top,color-stop(0,#e0e0e0),color-stop(1,#fff)); +background-image: -moz-linear-gradient(center bottom,#fff 0%,#e0e0e0 100%); +border-bottom: 1px solid #aaa; +border-left: 1px solid #aaa; +border-top: 1px solid #aaa; +color: #444; +cursor: pointer; +display: inline-block; +font-size: 13px; +font-weight: bold; +padding-top: 7px; +padding-bottom: 7px; +text-align: center; +text-shadow: none; +text-transform: uppercase; +width: 152px; +zoom: 1; +z-index: 50; +} +.th:HOVER { +background: #cfcfcf; +background-image: -webkit-gradient(linear,left bottom,left top,color-stop(0,#cacaca),color-stop(1,#ededed)); +background-image: -moz-linear-gradient(center bottom,#ededed 0%,#cacaca 100%); +} +.CG { +background-repeat: no-repeat; +background-position: 50% 30%; +height: 31px; +width: 152px; +} +.CG>* { +margin: 0 auto; +} +.Wz { +background: no-repeat url(../img/sprites.png) -860px -516px; +height: 30px; +width: 32px; +} +.TI { +background: no-repeat url(../img/sprites.png) -825px -288px; +height: 30px; +width: 33px; +} + +.VE { +background: no-repeat url(../img/sprites.png) -578px -301px; +height: 30px; +width: 33px; +} +.eP { +background: no-repeat url(../img/sprites.png) -16px -352px; +height: 30px; +width: 32px; +} +hr{ + margin: 10px 0; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.header.notification.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.header.notification.css new file mode 100644 index 00000000..7e481c0b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.header.notification.css @@ -0,0 +1,198 @@ +/* 通知中心 */ +.metro-notification-container { + width: 100%; + text-align: center; + position: absolute; + top: 20px; +} +.metro-notification-logo { + width: 32px; + cursor: pointer; +} +.metro-notification-count { + color: white; + font-size: 11px; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #000000; + border-radius: 50%; + background: #E12727; + display: none; + left: 40px; + position: absolute; + white-space: nowrap; + text-overflow: ellipsis; + cursor: pointer; +} +/* 消息管理容器 */ +.notification-message-container { + text-align: right; + position: absolute; + left: 0; + right: 0; + bottom: 0; + z-index: 2; +} +/* 未读消息列表 */ +.notification-message-list-container { + text-align: left; + border-bottom: 1px solid #666666; +} +.notification-message-operate { + width: 24px; + height: 24px; + margin-right: 20px; + margin-bottom: 3px; + display: inline-block; + position: relative; + cursor: pointer; + z-index: 3; +} +.notification-message-operate-icon { + width: 100%; + height: 100%; +} +.notification-message-operate.top { + bottom: 0; + right: 0; + position: absolute; +} +/* 未读消息 */ +.notification-message-item-container { + color: #FFFFFF; + height: 80px; + line-height: 80px; + border: 1px solid #666666; + border-bottom: 0; + background: url(../img/icon/bg-nav-dir.png); + position: relative; + display: none; +} +.notification-message-item-container.w { + color: #000000; + background: #FFFF66; + opacity: 0.9; +} +.notification-message-item-container.e { + background: #FF6666; + opacity: 0.9; +} +/* 应用通知图标 */ +.notification-appsystem-icon { + width: 60px; + height: 60px; + margin: 10px 5px; + background-size: 100%; + position: absolute; + display: inline-block; +} +/* Sender或消息类型 */ +.notification-sender-photo { + width: 38px; + height: 40px; + margin: 20px 5px; + background-size: 100%; + position: absolute; + left: 65px; + display: inline-block; +} +/* 内容 */ +.notification-message-content-container { + margin: 0 330px 0 125px; +} +.notification-appsystem-name { + font-size: 16px; + font-weight: bold; + height: 38px; + line-height: 50px; +} +.notification-message-content { + line-height: 20px; + cursor: pointer; +} +/* 操作按钮 */ +.notification-operate-buttons { + text-align: right; + width: 220px; + height: 100%; + position: absolute; + top: 0; + right: 110px; +} +.notification-operate-button { + padding: 5px 12px; + margin-right: 5px; + border-radius: 0; +} +.notification-operate-button.blue { + color: white; + background: #005CFF; + border: 1px solid #005CFF; +} +.notification-operate-button.red { + color: white; + background: red; + border: 1px solid red; +} +.notification-operate-info { + color: #000000; + max-width: 210px; + padding: 5px 15px; + border: 1px solid #F3F3F3; + border-radius: 5px; + margin-right: 5px; + background: #888888; + cursor: default; +} +/* 接收时间 */ +.notification-datetime { + text-align: center; + width: 80px; + position: absolute; + top: 0; + right: 30px; +} +/* 关闭 */ +.notification-operate-close { + width: 20px; + height: 20px; + background: url(../img/icon/close.png); + position: absolute; + top: 30px; + right: 5px; + cursor: pointer; +} +.button.gray { + border: #DDDDDD; + background: #CCCCCC; + cursor: default; +} + +/* Apply these styles only when #preview-pane has + been placed within the Jcrop widget */ +.jcrop-holder #preview-pane { + display: block; + position: absolute; + z-index: 2000; + top: 0; + right: -150px; + padding: 6px; + border: 1px rgba(0,0,0,.4) solid; + background-color: white; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); + box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); +} + +/* The Javascript code will set the aspect ratio of the crop + area based on the size of the thumbnail preview, + specified here */ +#preview-pane .preview-container { + width: 120px; + height: 120px; + overflow: hidden; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.header.wizard.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.header.wizard.css new file mode 100644 index 00000000..fec80d75 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.header.wizard.css @@ -0,0 +1,5 @@ +.network-logo-option{ + vertical-align: -webkit-baseline-middle; + color: #2375BE; + cursor: pointer; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.login.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.login.css new file mode 100644 index 00000000..cd52f4c5 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.login.css @@ -0,0 +1,168 @@ +/*global css*/ + +body { + color: #333333; + font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; + font-size: 13px; + margin: 0; + padding: 0; +} +input,textarea,div{ + resize:none;outline:none;font-size:13px; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} +a { +text-decoration: none; +color: #F1E7E7; +} + +a:hover { +color: #F1E7E7; +} +.login-bg{ + position: absolute;height:100%;width:100%; + background:url(../img/bg4.jpg) 0px 0px no-repeat; +} +.login-container{ + position: fixed;left:35%;height:100%; + width:65%; + box-shadow:1px 3px 5px #999; + background: url(../img/trans.png) repeat; + background: rgba(255,255,255,0.3); + padding: 120px 70px 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +@media screen and (max-width: 800px) { + .login-container{ + left:0; + width:100%; + } +} +@media screen and (min-width: 801px) and (max-width: 1090px) { + .login-container{ + left:23%; + width:100%; + } +} + +/* ---------head------------- */ +.brand{ + font-weight:900; + font-size:20px; + margin-top:20px; + cursor:pointer; +} +.brand .brand-logo{ + font-weight:100; + font-size:12px; + position:relative; + top:-10px; +} +/*---------form----------*/ +.form-unit > h2{ + margin-top: 10px; + margin-bottom: 20px; + font-size: 16px; + font-weight: normal; + color: #252323; +} +.login-form input { + font-family: inherit; + font-size: 14px; + color: #383838; + display: block; + width: 300px; + height: 32px; + line-height: 20px; + padding: 8px 12px; + margin-bottom: 30px; + border: 1px solid #D9D9D9; + border-radius: 3px; + transition: border-color 0.15s ease-in-out 0s; + vertical-align: middle; +} + +.login-form .input { + background-color: #FFFFFF; +} + +.login-form .input:focus { + border-color: #696363; + outline: 0 none; +} +.login-form .form-control[disabled],.login-form .form-control[readonly]{ + background-color: #F1F1F1; + cursor: not-allowed; +} + +.btn-primary{ + font-size: 16px; + font-weight: bold; + color: white; + text-align: center; + text-decoration: none !important; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.35); + min-width: 50px; + *width: 100px; + line-height:28px; + padding: 5px 20px !important; + background-color: #0088cc; + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -o-border-radius: 3px; + box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.3); + transition: border-color .5s; + -webkit-transition: border-color .5s; + -moz-transition: border-color .5s; + -o-transition: border-color .5s; + float: left; + cursor: pointer; + border: 1px #0088cc solid; + -moz-box-sizing:content-box; + -ms-box-sizing:content-box; + box-sizing:content-box; + margin-top: 0px; +} +.btn-primary:hover, +.btn-primary:focus { + color: #ffffff; + background-color: #0099e6; + border-color: #0099e6; +} +.btn-primary:active, +.btn-primary.active { + background-color: #0077b3; + border-color: #0077b3; +} +.btn-primary.disabled, +.btn-primary[disabled], +{ + background-color: #0088cc; + border-color: #0088cc; +} +.select-i18n{ + float: left; + margin-left:30px; + text-align: center; + color: #ccc; +} +.select-i18n:hover{ + color: #333; +} +/*------bottom-------*/ +.bottom{ + margin-top:50px; + font-family:'Verdana'; + /*background:url(../apps/com.actionsoft.apps.coe.pal/img/coebottom2_07.png) no-repeat;*/ + position: fixed; + right: 20px; + bottom: 0; + height:49px; + font-size:12px; + line-height:45px; + text-align:center; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.alarm.default.list.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.alarm.default.list.css new file mode 100644 index 00000000..d23dda45 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.alarm.default.list.css @@ -0,0 +1,261 @@ +@charset "utf-8"; + +.alarmDefaultListDiv{ + border: 0 none; + font-size: 14px; + height: 100%; + padding: 2px 5px 0; + width: 99%; +} + +.alarmTitle{ + text-align: left; +} + +.alarmTitle a{ + /** + display: block; + float: left; + width: 120px; + text-decoration: underline; + color: #3399FF; + line-height: 24px; + text-align: center; + cursor: pointer; + **/ +} + +.alarmTitle .content{ + background:#999999; + color: #FFFFFF; + font-weight: bold; + height: 24px; + text-decoration: none; + text-align: center; + margin-left: 5px; + cursor: default; +} + +.alarmLine{ + border: 1px solid #666666; +} + +.alarmContent{ + +} + +.alarmSearch{ + border: 1px solid #D4D4D4; + height: 28px; + line-height: 28px; + margin-top: 4px; + background: #EFEFEF; + padding-right: 10px; + text-align: right; +} + +.alarmSearch img{ + vertical-align: middle; + height: 22px; + margin-bottom: 3px; + cursor: pointer; +} + +.alarmHeader{ + height: 24px; +} + +.alarmHeader td{ + text-align: left; + border-bottom: 2px solid #BBBBBB; +} + +.alarmList{ + height: 42px; +} +.alarmList td{ + border-bottom: 1px solid #BBBBBB; +} +.alarmList td img{ + vertical-align: middle; +} + + +.alarmList-odd{ + background:#FBFBFB; +} + +.alarmNo{ + text-align: center; + width: 50px; +} + +.alarmEventName{ + text-align: left; +} + +.alarmEventFrom{ + text-align: left; + width: 140px; +} + +.alarmTimeSegment{ + text-align: left; + width: 80px; +} + +.alarmDate{ + width: 180px; + text-align: left; +} + +.alarmValue{ + width: 65px; + text-align: left; +} + +.alarmChange{ + width: 80px; +} + +.alarmNumber{ + width: 40px; + text-align: right; +} +.alarmNumber-red{ + color:red; +} + +.alarmNumber-green{ + color:green; +} + +.alarmMessage{ + text-decoration: underline; + color: #3399FF; + text-align: center; + width: 65px; + cursor: pointer; +} + +.imgUp{ + /*"images/up.png"*/ +} + +.imgDown{ + +} + +.clear{ clear:both; border:none;} + + +/** dialog start*/ + + +.alarmDefaultDialogList{ + height: 24px; + line-height: 24px; +} + +.alarmDefaultDialogLeftTd{ + text-align: right; + width: 100px; +} + +.alarmDefaultDialogSpan{ + color:red; +} + +.alarmDefaultDialogInput{ + width: 560px; + border: 1px solid #666666; +} + +.alarmDefaultDialogInput1{ + width: 173px; + border: 1px solid #666666; +} + +.alarmDefaultDialogInput2{ + width: 140px; + border: 1px solid #666666; +} +.alarmDefaultDialogInput3{ + width: 120px; + border: 1px solid #666666; +} + +.alarmDefaultDialogTitle{ + font-weight: bold; + text-align: left; +} + +.alarmDefaultDialogDate{ + color: #999999; + height: 28px; +} + +.alarmDefaultDialogButtonTd{ + padding-right: 60px; + text-align: right; +} + +.alarmDefaultDialogButton{ + background: none repeat scroll 0 0 #000000; + border: 1px solid; + color: #FFFFFF; + display: block; + float: right; + height: 30px; + line-height: 30px; + text-align: center; + width: 60px; + -moz-box-shadow:4px 4px 8px #ccc; + -moz-border-radius: 9px 9px 9px 9px; + + -webkit-border-radius: 5px; + -webkit-box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.2); + + /*filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);*/ +} + +.alarmDefaultDialogButton-next{ + display: inline-block; + height: 40px; + padding-right: 15px; + text-decoration:none; + background: transparent url(images/btn_next_right.png) 100% 0 no-repeat; +} +.alarmDefaultDialogButton-next span { + cursor:pointer; + display: block; + padding: 10px 18px 11px 30px; + font-size: 16px; + color: white; + text-shadow: 0 1px #448BD8; + background: transparent url(images/btn_next_left.png) 0 0 no-repeat; +} + +.alarmDefaultDialogButtonParent{ + display: block; + float: right; +} + +.alarmDefaultDialogButtonContent{ + color: #FFFFFF; + display: block; + float: right; + position: absolute; + text-align: center; + z-index: 100; + + height: 30px; + line-height: 30px; + text-align: center; + width: 60px; +} +.customWidth150{ + width: 150px; +} + +/** dialog end*/ \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.analysis.amount.partner.list.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.analysis.amount.partner.list.css new file mode 100644 index 00000000..266068c4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.analysis.amount.partner.list.css @@ -0,0 +1,68 @@ +@charset "utf-8"; + +.dialogAmountPartnerTable{ + width:100%; + text-align: center; +} +/* 表头 */ +.dialogAmountPartnerHeader{ + background: #F2F2F2; +} + +.dialogAmountPartnerHeader td{ + border-bottom: 1px solid #E2E2E2; + border-top: 1px solid #E2E2E2; +} + +/* 列表 */ +.dialogAmountPartnerList{ + height: 28px; +} + +.dialogAmountPartnerList td{ + border-bottom: 1px solid #EAEAEA; +} + +/* 序号 */ +.dialogAmountPartnerNo{ + width: 60px; +} + +/* 标题 */ +.dialogAmountPartnerTitle{ + text-align: left; +} + +.dialogAmountPartnerTitle a{ + color: #3399FF; + text-decoration: underline; + /*cursor: pointer;*/ +} + +/* 日期 */ +.dialogAmountPartnerDate{ + text-align: left; + width: 140px; +} + +/* 跟踪 */ +.dialogAmountPartnerPrompt{ + width: 80px; +} + +/* 耗时 */ +.dialogAmountPartnerTime{ + width: 100px; +} + +/* 耗时 */ +.dialogAmountPartnerStartDate{ + text-align: left; + width: 140px; +} + +/* 耗时 */ +.dialogAmountPartnerEndDate{ + text-align: left; + width: 140px; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.analysis.main.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.analysis.main.css new file mode 100644 index 00000000..a60dc4c1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.analysis.main.css @@ -0,0 +1,475 @@ +/*【打印--导出】导航 可引入此样式*/ + +/* top web */ +.analysis-main-top-web{ + padding-top:0px; + float:left; + width:99%; +} +/*layout 北 */ +.report-navigation-layout-north{ + height:75px; + padding:5px 5px 0; + margin:0px; + border:0; + border-bottom: 1px solid #666666; +} + +/*导航与内容的分界线*/ +.report-navigation-layout-line{ + /*border: 1px solid #666666; + margin-top: 1px;*/ + border: 1px solid #737373; + + width: 99.9%; +} +/*导航背景色 */ +.report-navigation-header{ + background-color:#EEEEEE; + height:25px; + border: 1px solid #C9C9C9; + width:99%; + margin: 2px 0 0 5px; + font-size: 12px; +} + +/* 打印图标icon */ +.report-navigation-icon-Print{ + background: url("../../../aws_img/Print16.gif") no-repeat scroll 0 50% transparent; + border:1px solid #EEEEEE; + padding-left:20px; + margin-left:10px; + text-decoration:none; + line-height: 23px; + display:block; + float:left; + /*height:100%;*/ + width:40px; + color:#0d0d0d; + border-right: 1px solid #BBBBBB; +} + +/* 打印图标icon */ +.report-navigation-icon-Back{ + background: url("../../../aws_img/redo_edit.gif") no-repeat scroll 0 50% transparent; + border:1px solid #EEEEEE; + padding-left:20px; + margin-left:10px; + text-decoration:none; + line-height: 23px; + display:block; + float:left; + /*height:100%;*/ + width:40px; + color:#0d0d0d; + border-right: 1px solid #BBBBBB; +} +.report-navigation-icon-Back:hover{ + border: 1px solid #6A6A6A; + background-color:#787878; +} +/* 满意度图标icon */ +.report-navigation-icon-Saf-run{ + background: url("../../../aws_img/green.ball.gif") no-repeat scroll 0 50% transparent; + border:1px solid #EEEEEE; + padding-left:20px; + margin-left:10px; + text-decoration:none; + line-height: 23px; + display:block; + float:right; + /*height:100%;*/ + width:60px; + color:#0d0d0d; + border-right: 1px solid #BBBBBB; +} +.report-navigation-icon-Saf-stop{ + background: url("../../../aws_img/red.ball.gif") no-repeat scroll 0 50% transparent; + border:1px solid #EEEEEE; + padding-left:20px; + margin-left:10px; + text-decoration:none; + line-height: 23px; + display:block; + float:right; + /*height:100%;*/ + width:60px; + color:#0d0d0d; + border-right: 1px solid #BBBBBB; +} +/* 打印图标icon 鼠标移上背景色 */ +.report-navigation-icon-Print:hover{ + border: 1px solid #6A6A6A; + background-color:#787878; +} + +/* 导出图标icon */ +.report-navigation-icon-downarrow{ + /*background: url("../../../aws_img/arrow_down.gif") no-repeat scroll 90% 50% transparent;*/ + /*border-top:1px solid #EEEEEE; + border-right:1px solid #EEEEEE; + border-bottom:1px solid #C9C9C9; + border-left:1px solid #EEEEEE;*/ + border:1px solid #EEEEEE; + /*margin-left: 10px;*/ + padding-left: 10px; + text-decoration:none; + line-height: 23px; + display:block; + float:left; + /*height:100%;*/ + width:60px; + color:#0d0d0d; + border-left: 1px solid #FFFFFF; + border-right: 1px solid #BBBBBB; +} + +.report-navigation-icon-downarrow span{ + padding-left: 15px; + width: 20px; +} +/* 导出图标icon 图片样式 */ +.report-navigation-icon-downarrow-black-down { /* report-navigation-icon-downarrow span */ + /*background: url("../../../aws_img/arrow_down.gif") no-repeat scroll 90% 50% transparent;*/ + background: url("../../../aws_img/arrow_down_gray.gif") no-repeat scroll 50% 50% transparent; + border:0; +} + +.report-navigation-icon-downarrow-black-up { + background: url("../../../aws_img/arrow_top_gray.gif") no-repeat scroll 50% 50% transparent; + border:0; +} + +/* 导出图标icon 背景色 */ +.report-navigation-icon-downarrow-hover{ + border: 1px solid #6A6A6A; + background-color:#787878; + color: #FFFFFF; +} + +/* 导出图标icon 背景图标 */ +.report-navigation-icon-downarrow-white-down{ /* report-navigation-icon-downarrow-hover span */ + background: url("../../../aws_img/arrow_down_white.gif") no-repeat scroll 50% 50% transparent; +} + +/* 标题栏 */ +.report-navigation-title{ + background-color: #666666; + color: #FFFFFF; + display: block; + float: left; + font-size: 15px; + font-weight: bold; + height: 20px; + line-height: 22px; + text-align: center; + padding: 2px 15px; + margin-left: 5px; + margin-top: 4px; +} + +.report-navigation-set-button { + color: #00A5EE; + cursor: pointer; + display: block; + float: left; + font-size: 13px; + font-weight: bold; + line-height: 22px; + margin: 6px 0 0 10px; + text-decoration: underline; +} + +.report-navigation-title-sub{ + color: #BBBBBB; + display: block; + float: left; + font-size: 14px; + font-weight: bold; + height: 20px; + line-height: 22px; + margin-top: 4px; + padding: 2px 10px; + text-align: center; +} + +/* 栓选条件 */ +.report-navigation-condition{ + float:right; + display: block; + font-size: 15px; + height: 24px; + line-height: 22px; + text-align: center; + padding: 2px 4px; + /*color: #1C2E3D;*/ +} + +/* 栓选条件显示位置 */ +.report-navigation-condition div{ + float:right; +} + +/* 导航 子导航 背景色 */ +.report-navigation-header-sub{ + background-color:#F7F7F7; + height:25px; + border: 1px solid #CBCBCB; + border-top:0; + width:99%; + display:none; + margin: 0 5px; +} + +/* excel图标 */ +.report-navigation-icon-excel{ + background: url("../../../aws_img/file/excel.jpg") no-repeat scroll 0 50% transparent; + margin-left:10px; + text-decoration:none; + line-height: 20px; + display:block; + width:40px; + float:left; + padding-left: 20px; + border: 1px solid #F7F7F7; + padding-top:2px; + height:20px; +} + +/* excel图标 */ +.report-navigation-icon-excel:hover{ + border: 1px solid #EEEEEE; + text-decoration: underline; + cursor: pointer; + /*background-color:#C9C9C9;*/ +} + +/* word图标 */ +.report-navigation-icon-word{ + background: url("../../../aws_img/file/word.jpg") no-repeat scroll 0 50% transparent; + margin-left:10px; + text-decoration:none; + line-height: 20px; + display:block; + width:40px; + float:left; + padding-left: 20px; + border: 1px solid #F7F7F7; + padding-top:2px; + height:20px; +} + +/* word图标 */ +.report-navigation-icon-word:hover{ + border: 1px solid #EEEEEE; + text-decoration: underline; + cursor: pointer; + /*background-color:#C9C9C9;*/ +} + +/* word图标 */ +.report-navigation-icon-pdf{ + background: url("../../../aws_img/file/pdf.jpg") no-repeat scroll 0 50% transparent; + margin-left:10px; + text-decoration:none; + line-height: 20px; + display:block; + width:40px; + float:left; + padding-left: 20px; + border: 1px solid #F7F7F7; + padding-top:2px; + height:20px; +} + +/* word图标 */ +.report-navigation-icon-pdf:hover{ + border: 1px solid #EEEEEE; + text-decoration: underline; + cursor: pointer; + /*background-color:#C9C9C9;*/ +} + +/* 图标排列方式 */ +.report-navigation-permutation{ + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + border: 1px solid #EFEFEF; + height: 22px; + margin: 0 5px 0 0; + width: 170px; +} + +.report-navigation-permutation:hover{ + border: 1px solid #ccc; +} +.report-navigation-permutation-hover0{ /*可以删除*/ + border: 1px solid #EFEFEF; + color: #666666; + height: 20px; +} +.report-navigation-icon-permutation{ + width:45px; + height: 18px; + border: 1px solid #fff; + width:55px; + margin-top: 1px; +} + +.report-navigation-icon-permutation-span1{ + display: block; + float: left; + height: 16px; + width: 16px; + padding: 4px 0 0 8px; +} + +.report-navigation-icon-permutation-span2{ + display: block; + float: right; + height: 16px; + width: 16px; + margin-top: 2px; + cursor: pointer; +} + +.report-navigation-icon-permutation-title-content{ + display: block; + float: left; + font-size: 12px; + height: 20px; + line-height: 20px; + width: 14px; +} + +.report-navigation-icon-permutation-hover{ + background: url("../img//permutation_bg.gif") scroll 50% 50% transparent; + border: 1px solid #999999; + -moz-border-radius: 5px 5px 5px 5px; + /*width:40px;*/ +} + +.report-navigation-icon-permutation-click{ + background:#676767; + border: 1px solid #999999; + -moz-border-radius: 5px 5px 5px 5px; + /*color:#666666;*/ +} + +.report-navigation-permutation-div{ + position:absolute; + top: 65px; + z-index:100; + left: 80px; + color: #222222; + background:#EFEFEF; + border: 1px solid #B0B0B0; + width: 80px; + padding: 2px; + display:none; + -moz-border-radius: 5px 5px 5px 5px; +} + +.report-navigation-permutation-div table{ + width: 100%; + cursor: pointer; +} + +.report-navigation-permutation-div tr:hover{ + background:#676767; +} + +/* 时间区间 */ +.report-navigation-time-interval{ + /*margin-right: 5px;*/ + border: 1px solid #EFEFEF; + border-radius: 5px 5px 5px 5px; + height: 22px; + font-size: 18px; + color: #1C2E3D; + cursor: pointer; + font-weight: bold; + width:270px; +} + +.report-navigation-time-interval:hover{ + border: 1px solid #ccc; +} + +.report-navigation-time-interval span{ + padding: 0 2px; +} + +.report-navigation-time-interval-downarrow{ + background-color: #F7F7F7; + display: block; + float: right; + height: 20px; + width: 12px; +} + +.report-navigation-time-interval-line{ + /*color: #D5D5D5;*/ + font-size: 12px; + padding: 0 2px; +} + +/* 流程版本选择 */ +.report-navigation-workflows{ + margin-right: 5px; + -moz-border-radius: 5px 5px 5px 5px; + border: 1px solid #EFEFEF; + height: 22px; +} + +.report-navigation-workflows:hover{ + border: 1px solid #ccc; +} + +/* 新旧流程选择 */ +.report-navigation-newold-presses{ + /*background: url("../img//permutation_bg.gif") scroll 50% 50% transparent; + border: 1px solid #999999; + height: 18px; + margin-right: 5px; + height: 20px; + line-height: 20px;*/ +} +.report-navigation-newold-presses input{ + border : 0; +} + +/*.report-navigation-icon-permutation:hover .report-navigation-icon-permutation-span2{ + background: url("../../../aws_img/arrow_down_gray.gif") no-repeat scroll 50% 50% transparent; +}*/ + +.report-navigation-icon-permutation-day{ + background: url("../img//permutation_day.png") no-repeat scroll 50% 50% transparent; +} +.report-navigation-icon-permutation-day-dark{ + background: url("../img//permutation_day_dark.png") no-repeat scroll 50% 50% transparent; +} + +.report-navigation-icon-permutation-month{ + background: url("../img//permutation_month.png") no-repeat scroll 50% 50% transparent; +} +.report-navigation-icon-permutation-month-dark{ + background: url("../img//permutation_month_dark.png") no-repeat scroll 50% 50% transparent; +} +.report-navigation-icon-permutation-week{ + background: url("../img//permutation_week.png") no-repeat scroll 50% 50% transparent; +} +.report-navigation-icon-permutation-week-dark{ + background: url("../img//permutation_week_dark.png") no-repeat scroll 50% 50% transparent; +} + +.analysisProcessNewOldRadio{ /* 吞吐量 > 流程,新的or结束的,单选按钮 */ + width: 145px; +} + +.analysisDiyKpiVipTreatDialogRadio{ + width: 180px; +} + + + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.analysis.report.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.analysis.report.css new file mode 100644 index 00000000..c9bba05d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.analysis.report.css @@ -0,0 +1,321 @@ +/* 载入提示 */ +.loadingPrompt{ + background:#FFF1A8; + font-weight: bold; + position: absolute; + top: 0; + display: none; +} +/* 全局字体样式 */ +.analysisGlobalStyle{ + font-size:14px; + text-align: center; +} +/* 图例边框 */ +.analysisFlotBorder{ + text-align: center; + border: 1px solid #DDDDDD; +} +/* 图例边框 样式 */ +.analysisFlotStyle{ + padding: 0 0 0 10px;margin-bottom: 5px; +} +/* 图例 */ +.labelFlotSpan{ + display: block; + font-weight: bold; + line-height: 24px; + left: 48%; + /* position: absolute;*/ + z-index: 100; +} +.labelFlotSpan2{ + display: block; + font-weight: bold; + line-height: 24px; + left: 48%; + /* position: absolute;*/ + z-index: 100; + text-align: left; + margin-right:10px; + border-bottom: 1px solid #DDDDDD; +} +.labelFlotSpanContainer{line-height: 18px;margin-right:10px;border-bottom: 1px solid #DDDDDD;} +/* 分割线 表格布局 */ +.analysisSeparatedTitleTd{ + border-bottom: 2px solid #666666; + font-weight: bold; + padding: 10px 0 5px 5px; + text-align: left; +} +/* 内容列表表头 */ +.analysisContentListHeader{ + text-align: center; + background: #e0e0e0; + height: 28px; +} +/* 内容列表表头 分割线样式 */ +.analysisContentListHeader td{ + border-right: 1px solid #BBBBBB; + border-left: 1px solid #FFFFFF; + border-bottom: 1px solid #E5E5E5; /* 与analysisContentList-img td相同*/ +} +/* 内容列表宽表头 */ +.analysisContentListWideHeader{ + text-align: left; + height: 60px; + background: url("images/analysisContentListWideHeader.gif") repeat-x scroll 0 100% transparent; +} +/* 内容列表宽表头 分割线样式 */ +.analysisContentListWideHeader td{ + border-right: 1px solid #BBBBBB; + border-left: 1px solid #FFFFFF; + border-bottom: 1px solid #E5E5E5; /* 与analysisContentList-img td相同*/ + vertical-align: top; +} +.analysisContentListWideHeader .content{ + color: #666666; + display: block; + padding: 5px 0 0 5px; + font-size: 13px; +} +.analysisContentListWideHeader .number{ + color: #666666; + display: block; + font-size: 16px; + font-weight: bold; + padding: 3px 0 0 5px; +} +/* 内容列表列表 含图片*/ +.analysisContentList-img{ + height: 50px; +} +/* 内容列表列表 含图片 鼠标移上*/ +.analysisContentList-img:hover{ + background: #FFFFCC; +} +/* 内容列表列表 含图片 边框*/ +.analysisContentList-img td{ + border-bottom: 1px solid #E5E5E5; +} +/* 内容列表列表 含图片 偶列*/ +.analysisContentListOdd-img{ + background: #F2F2F2; +} +/* 内容列表列表 */ +.analysisContentList{ + height: 35px; +} +.analysisContentList:hover{ + background: #FFFFCC; +} +.analysisContentList td{ + border-bottom: 1px solid #E5E5E5; +} +.analysisContentListOdd{ + background: #F2F2F2; +} +/* 内容列表列表 序号 */ +.analysisContentListNo{ + font-size: 20px; + width: 50px; +} +/* 内容列表列表 标题 */ +.analysisContentListTitle { + text-align: left; +} +.analysisContentListTitle a{ + color: #3399FF; +} +.analysisContentListTitleColor{ + color: #3399FF; +} +/* 内容列表列表 创建人 */ +.analysisContentListCreate { +} +/* 内容列表列表 */ /*覆盖analysisContentList-img td设置 */ +.analysisContentListCreate td{ + border:0; +} +/* 内容列表列表 头像 */ +.analysisContentListPhoto { + text-align: left; + width: 45px; +} +/* 内容列表列表 部门 */ +.analysisContentListDepa{ + color: #676767; + font-size: 13px; + font-weight: bold; + text-align: left; +} +/* 内容列表列表 岗位 */ +.analysisContentListPost{ + font-size: 18px; + padding: 5px 0 2px 2px; +} +/* 内容列表列表 用户名 */ +.analysisContentListUser { + color: #676767; + font-size: 13px; + text-align: left; +} +/* 内容列表列表 创建时间 */ +.analysisContentListCreateDate { + text-align: left; +} +/* 内容列表列表 跟踪 */ +.analysisContentListTrack { + +} +/* 内容列表列表 跟踪 */ +.analysisContentListTime { + text-align: center; +} +/* 内容列表列表 工具条 背景 */ +.analysisContentBarBG{ + background: #F2F2F2; + padding: 2px; +} +.analysisContentBarBorder{ + border-bottom: 1px solid #EAEAEA; + padding: 2px; +} +/* 内容列表列表 工具条 使用次数 */ +.analysisContentBarFrequen{ + width:90px; + line-height: 24px; +} +/* 内容列表列表 工具条 使用次数 升序*/ +.analysisContentBarFrequen .sortAsc{ + background: url("images/sort_asc_light.png") no-repeat scroll 0 50% transparent; + display: block; + float: right; + height: 24px; + margin-right: 15px; + width: 12px; + cursor: pointer; +} +.analysisContentBarFrequen .sortAsc:hover{ + background: url("images/sort_asc.png") no-repeat scroll 0 50% transparent; +} +/* 内容列表列表 工具条 使用次数 降序*/ +.analysisContentBarFrequen .sortDesc{ + background: url("images/sort_desc_light.png") no-repeat scroll 0 50% transparent; + display: block; + float: right; + height: 24px; + margin-right: 15px; + width: 12px; + cursor: pointer; +} +.analysisContentBarFrequen .sortDesc:hover{ + background: url("images/sort_desc.png") no-repeat scroll 0 50% transparent; +} +/* 内容列表列表 节点 */ +.analysisContentNode { + background: url("images/process_node_bg.png") no-repeat scroll 50% 50% transparent; + width: 130px; +} +/* 内容列表列表 数字 */ +.analysisContentNumber { + font-size: 20px; + font-weight: bold; + width: 90px; +} +.analysisContentNumberColor { + color: #FF0000; +} +/* 内容列表列表 内容文本 */ +.analysisContentListText { + text-align: left; +} +.analysisContentListText td{ + border:0; +} +.analysisContentScale{ + padding: 2px; +} + +.analysisContentScale div{ + background:#558ED5; + border: 1px solid #4A87D2; + text-align: center; + cursor: pointer; +} + +.analysisContentScale div:hover{ + background:#88B0E1; + border: 1px solid #558ED5; +} +/* 内容列表列表 内容显示位置 */ +.analysisFlotStylePosition { + text-align: center; + vertical-align: top; + width: 50%; +} +/* 内容列表列表 大饼图 */ +.analysisFlotInstance{ + height: 300px; + width: 100%; + margin: 0 auto; + text-align: left; +} +/* 内容列表列表 小饼图 */ +.analysisFlotInstanceNode{ + height: 150px; + width: 100%; + margin: 0 auto; + text-align: left; +} +/* 内容列表列表 Prompt提示 */ +.analysisContentPrompt{ + color: #AAAAAA; + font-size: 13px; + text-align: left; + width: 35px; +} + +.analysisContentPrompt span{ + display: block; + float: left; + padding: 3px 4px 0; +} +/* 内容列表列表 采集器 */ +.analysisContentCollect{ + text-align: center; +} +/* 内容列表列表 单位 */ +.analysisContentUnit{ + +} +/*uuid*/ +.analysisContentListUUID{ + +} +/* 内容列表列表 删除 */ +.analysisContentDel{ + +} +.analysisContentDel a { + color: #3399FF; +} + +.analysisSeparatedTitle{ + background: none repeat scroll 0 0 #666666; + color: #FFFFFF; + font-weight: bold; + margin-left: 2px; + padding: 2px; +} + +/* 内容列表列表 更多 */ +.analysisContentMore{ + color: #3399FF; + cursor: pointer; + font-size: 13px; + font-weight: bold; +} +.kpiSearch{text-align: right;} +.kpiSearch img{vertical-align: middle;margin-bottom: 5px;cursor: pointer;} +.kpiSearch select{width:120px;margin-right: 5px;height: 22px;line-height:22px;padding:0;} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.dialog.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.dialog.css new file mode 100644 index 00000000..198f0b1e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.dialog.css @@ -0,0 +1,101 @@ +@charset "utf-8"; + +/*自定义KPI start*/ + +.analysisManageDiyKpiDialogRadio{ + /*width: 276px;*/ + padding-left: 10px; + float: left; +} + +.manageDiyKpiDialogList{ + height: 26px; + line-height: 26px; +} + +.manageDiyKpiDialogLeftTd{ + text-align: right; + width: 115px; +} + +.manageDiyKpiDialogSpan{ /*所有星号使用同一个*/ + color:red; +} + +.manageDiyKpiDialogInput{ + width: 592px; + border: 1px solid #666666; +} + +.manageDiyKpiDialogInput1{ + width: 238px; + border: 1px solid #666666; +} + +.manageDiyKpiDialogButton-next{ + display: inline-block; + height: 40px; + padding-right: 15px; + text-decoration:none; + background: transparent url(images/btn_next_right.png) 100% 0 no-repeat; +} +.manageDiyKpiDialogButton-next span { + cursor:pointer; + display: block; + padding: 10px 18px 11px 30px; + font-size: 16px; + color: white; + text-shadow: 0 1px #448BD8; + background: transparent url(images/btn_next_left.png) 0 0 no-repeat; +} + +.manageDiyKpiDialogButtonTd{ + padding-right: 60px; + text-align: right; +} + +.manageDiyKpiDialogDate{ + color: #999999; + height: 28px; +} +.manageDiyKpiSelect{ + width: 240px; +} +/*自定义KPI end*/ + +/*分析维度 start*/ +.analysisDimensionDialogList{ + height: 40px; + line-height: 40px; +} + +/*分析维度 end*/ + +.dialogTableHead{ + background: none repeat scroll 0 0 #E0E0E0; + height: 28px; + text-align: center; +} + +.dialogTableHead td{ + border-bottom: 1px solid #E5E5E5; + border-left: 1px solid #FFFFFF; + border-right: 1px solid #BBBBBB; +} + +.analysisContentList{ + height: 35px; +} +.analysisContentList:hover{ + background: #FFFFCC; +} +.analysisContentList td{ + white-space: nowrap; + border-bottom: 1px solid #E5E5E5; +} +.analysisContentListOdd{ + background: #F2F2F2; +} +.analysisContentListTitle{ + text-align: left; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.dimension.statistics.main.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.dimension.statistics.main.css new file mode 100644 index 00000000..73eb2827 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.dimension.statistics.main.css @@ -0,0 +1,44 @@ +@charset "utf-8"; +html body { + background-attachment: fixed; + background: url("../img//noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; + background-position: center top; + padding-top:0px; +} +.main_center{ + background-color:#FFF; + border-radius: 3px 3px 3px 3px; +} +.coe_dimension_statistics_main{ + width:1024px; + background: url("../img//wash-white-30.png") repeat scroll 0 0 transparent; + margin: 0 auto; + padding: 15px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); +} +.statisticsDimensionSetParent{ + padding: 0 5px; + display:none; +} + +.statisticsDimensionSet{ + border-color: -moz-use-text-color #666666 #666666; + border-right: 3px solid #666666; + border-style: none solid solid; + border-width: medium 3px 3px; + height: 300px; + margin-right: 15px; +} + +.projectStatisticsFieldset{ + height: 230px; + width: 300px; + -moz-border-radius: 5px 5px 5px 5px; + border: 1px solid #786EBF; +} + +.projectStatisticsFieldsetDiv{ + /*border: 1px solid #786EBF;*/ + height: 220px; + overflow: auto; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.icon.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.icon.css new file mode 100644 index 00000000..bdec2dc8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.icon.css @@ -0,0 +1,210 @@ +/* +// ---------------------------------------------------------------------- +// coe样式表(深海洋绿) +// 本样式表适用于coe 产品 +// ---------------------------------------------------------------------- +*/ + +/*默认的页面样式*/ +/*用户*/ +.icon_user{ + background:url('../../../aws_img/user6.gif') no-repeat; +} +.icon_add{ + background:url('../../../aws_img/add.gif') no-repeat; +} +.icon_remove{ + background:url('../../../aws_img/Delete.gif') no-repeat; +} +.icon_save{ + background:url('../../../aws_img/save.gif') no-repeat; +} +.icon_enter{ + background:url('../../../aws_img/user6.gif') no-repeat; +} +.icon_cancal{ + background:url('../../../aws_img/undo_edit.gif') no-repeat; +} +.icon_language{ + background:url('../../../aws_img/org_securitys.gif') no-repeat; +} +.icon_config{ + background:url('../../../aws_img/config_item.gif') no-repeat; +} +.icon_rename1{ + background:url('../../../aws_img/rename.png') no-repeat; +} +.icon_edit{ + background:url('../../../aws_img/edit.gif') no-repeat; +} +.icon_next_step{ + background:url('../../../aws_img/navdown.gif') no-repeat; +} +.icon_up_step{ + background:url('../../../aws_img/navup.gif') no-repeat; +} +.icon_process{ + background:url('../../../aws_img/process.gif') no-repeat; +} +.icon_admin{ + background: url("../../aws_css/coe/images/admin.gif") no-repeat scroll 50% 50% transparent; +} + +.draggableDiv{ + width:96px; + height:56px; + /*padding:0px;*/ + text-align:center; + line-height:56px; + /*border: 1px solid #D3D3D3;*/ + border-radius: 5px 5px 5px 5px; + font-size: 12px; + overflow: hidden; + cursor:pointer; + margin:0 auto; + + word-break:break-all ; +} +.draggableDivGray{ + /*background: url("../img//wf_WorkFlow_Coe_Language_Dimension_Draggable1.gif") repeat-x scroll 0 0 #A39263;*/ + background: url("../img//Draggable11.gif") +} +.draggableDivBlue{ + /*background: url("../img//wf_WorkFlow_Coe_Language_Dimension_Draggable2.gif") repeat-x scroll 0 0 #98CBFE;*/ + background: url("../img//Draggable22.gif"); + +} +.draggableDivPink{ + /*background: url("../img//wf_WorkFlow_Coe_Language_Dimension_Draggable2.gif") repeat-x scroll 0 0 #98CBFE;*/ + background: url("../img//Draggable44.gif"); + +} + +.draggableTable{ + width:116px; + height:70px; + vertical-align:middle; + text-align:center; + border-right:#D3D3D3 solid 2px; + padding:0px; + margin:0px auto; +} +.draggableClick{ + border: 4px solid #AFC873; + width:94px; + height:54px; + /*background: url("../img//Draggable3.gif");*/ +} +.projectListImg{ + width:29px; + height:34px; + background: url("../../../aws_img/wf_document/icon.gif") 50% 50% no-repeat; + +} + +/*Tree图标icon样式*/ +.icon-tree-nodes-root { + background: url("../../../aws_img/left_blue/img/base.gif") repeat scroll 0 0 transparent !important; +} + +.icon-tree-nodes-group { + background: url("../../../aws_img/profile2.gif") repeat scroll 0 0 transparent !important; +} + +.icon-tree-nodes-group2 { + background: url("../img//tree_nodes_group.gif") no-repeat scroll 50% 50% transparent !important; +} +.icon-tree-nodes-dimension { + background: url("../../../aws_img/process.group.gif") repeat scroll 0 0 transparent !important; +} +.icon-tree-nodes-dimension2 { + background: url("../img//tree_nodes_dimension.gif") no-repeat scroll 50% 50% transparent !important; +} +.icon-tree-nodes-process { + background: url("../../../aws_img/process.def.gif") repeat scroll 0 0 transparent !important; +} +.icon-tree-nodes-process2 { + background: url("../img//tree_nodes_process.gif") no-repeat scroll 50% 50% transparent !important; +} + +/*取消按钮*/ +.btn-gray-big{ + font: 12px 'Lucida Grande', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; + display: inline-block; + height: 40px; + padding-right: 10px; + text-decoration:none; + background: transparent url(images/btn_biggrey_right.png) 100% 0 no-repeat; +} +.btn-gray-big span { + cursor:pointer; + display: block; + padding: 10px 16px 11px 25px; + font-size: 16px; + color: #6F6F6F; + text-shadow: 0 1px white; + background: transparent url(images/btn_biggrey_left.png) 0 0 no-repeat; +} + +.btn-gray-big:hover{ + text-decoration:none; + background: transparent url(images/btn_biggrey_right_hover.png) 100% 0 no-repeat; +} +.btn-gray-big span:hover{ + background: transparent url(images/btn_biggrey_left_hover.png) 0 0 no-repeat; +} + +/*下一步*/ +.btn-next{ + display: inline-block; + height: 40px; + padding-right: 15px; + text-decoration:none; + background: transparent url(images/btn_next_right.png) 100% 0 no-repeat; +} +.btn-next span { + cursor:pointer; + display: block; + padding: 10px 18px 11px 30px; + font-size: 16px; + color: white; + text-shadow: 0 1px #448BD8; + background: transparent url(images/btn_next_left.png) 0 0 no-repeat; +} +.btn-next:hover{ + text-decoration:none; + background: transparent url(images/btn_next_right_hover.png) 100% 0 no-repeat; +} +.btn-next:hover span{ + background: transparent url(images/btn_next_left_hover.png) 0 0 no-repeat; +} + +/*上一步*/ +.btn-prev{ + display: inline-block; + height: 40px; + padding-left: 15px; + text-decoration:none; + background: transparent url(images/btn_prev_right.png) 0 0 no-repeat; +} +.btn-prev span { + cursor:pointer; + display: block; + padding: 10px 22px 11px 26px; + font-size: 16px; + color: white; + text-shadow: 0 1px #448BD8; + background: transparent url(images/btn_prev_left.png) 100% 0 no-repeat; +} +.btn-prev:hover{ + text-decoration:none; + background: transparent url(images/btn_prev_right_hover.png) 0 0 no-repeat; +} +.btn-prev:hover span{ + background: transparent url(images/btn_prev_left_hover.png) 100% 0 no-repeat; +} + +.clear{ + clear:both; + border:none; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.pagination.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.pagination.css new file mode 100644 index 00000000..6b56bac7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.pagination.css @@ -0,0 +1,31 @@ +.pagination { + font-size: 80%; + } + +.pagination a { + text-decoration: none; + border: solid 1px #AAE; + color: #15B; +} + +.pagination a, .pagination span { + display: block; + float: left; + padding: 0.3em 0.5em; + margin-right: 5px; + margin-bottom: 5px; + min-width:1em; + text-align:center; +} + +.pagination .current { + background: #26B; + color: #fff; + border: solid 1px #AAE; +} + +.pagination .current.prev, .pagination .current.next{ + color:#999; + border-color:#999; + background:#fff; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.pagination.two.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.pagination.two.css new file mode 100644 index 00000000..e81f2204 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.pagination.two.css @@ -0,0 +1,117 @@ +@charset "utf-8"; + +.datagrid-pager { + background: none repeat scroll 0 0 #EFEFEF; + border-top: 1px solid #CCCCCC; + position: relative; +} +.pagination { + height: 30px; +} +.pagination table { + float: left; + height: 30px; +} +.pagination-btn-separator { + border-left: 1px solid #CCCCCC; + border-right: 1px solid #FFFFFF; + float: left; + height: 24px; + margin: 3px 1px; +} +.pagination-num { + border: 1px solid #CCCCCC; + margin: 0 2px; +} +.pagination-page-list { + margin: 0 6px; +} +.pagination-info { + float: right; + font-size: 12px; + padding-right: 6px; + padding-top: 8px; +} +.pagination span { + font-size: 12px; +} +.pagination-first { + background: url("images/pagination_first.gif") no-repeat scroll 0 0 transparent; +} +.pagination-prev { + background: url("images/pagination_prev.gif") no-repeat scroll 0 0 transparent; +} +.pagination-next { + background: url("images/pagination_next.gif") no-repeat scroll 0 0 transparent; +} +.pagination-last { + background: url("images/pagination_last.gif") no-repeat scroll 0 0 transparent; +} +.pagination-load { + background: url("images/pagination_load.png") no-repeat scroll 0 0 transparent; +} +.pagination-loading { + background: url("images/pagination_loading.gif") no-repeat scroll 0 0 transparent; +} + +a.l-btn { + background: url("images/button_a_bg.gif") no-repeat scroll right top transparent; + color: #444444; + cursor: pointer; + display: inline-block; + font-size: 12px; + height: 24px; + outline: medium none; + padding-right: 18px; + text-decoration: none; +} +a.l-btn-plain { + background: none repeat scroll 0 0 transparent; + border: 1px solid transparent; + padding-right: 5px; +} +a.l-btn-disabled { + color: #CCCCCC; + cursor: default; + opacity: 0.5; +} +a.l-btn span.l-btn-left { + background: url("images/button_span_bg.gif") no-repeat scroll left top transparent; + display: inline-block; + height: 16px; + line-height: 16px; + padding: 4px 0 4px 18px; +} +a.l-btn-plain span.l-btn-left { + background: none repeat scroll 0 0 transparent; + padding-left: 5px; +} +a.l-btn span span.l-btn-text { + display: inline-block; + height: 16px; + line-height: 16px; + padding: 0; +} +a.l-btn span span span.l-btn-empty { + display: inline-block; + padding: 0; + width: 16px; +} +a.l-btn:hover { + background-position: right bottom; + outline: medium none; +} +a.l-btn:hover span.l-btn-left { + background-position: left bottom; +} +a.l-btn-plain:hover { + -moz-border-radius: 3px 3px 3px 3px; + background: url("images/button_plain_hover.png") repeat-x scroll left bottom transparent; + border: 1px solid #7EABCD; +} +a.l-btn-disabled:hover { + background-position: right top; +} +a.l-btn-disabled:hover span.l-btn-left { + background-position: left top; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.process.analysis.customer.info.dialog.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.process.analysis.customer.info.dialog.css new file mode 100644 index 00000000..e63c05cc --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.process.analysis.customer.info.dialog.css @@ -0,0 +1 @@ +@charset "utf-8"; diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.process.analysis.customer.process.dialog.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.process.analysis.customer.process.dialog.css new file mode 100644 index 00000000..e63c05cc --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.process.analysis.customer.process.dialog.css @@ -0,0 +1 @@ +@charset "utf-8"; diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.process.analysis.diykpi.manage.dialog.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.process.analysis.diykpi.manage.dialog.css new file mode 100644 index 00000000..630e69f6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.process.analysis.diykpi.manage.dialog.css @@ -0,0 +1,61 @@ +@charset "utf-8"; + +/*自定义KPI start*/ + +.analysisManageDiyKpiDialogRadio{ + width: 276px; + float: left; +} + +.manageDiyKpiDialogList{ + height: 26px; + line-height: 26px; +} + +.manageDiyKpiDialogLeftTd{ + text-align: right; + width: 120px; +} + +.manageDiyKpiDialogSpan{ + color:red; +} + +.manageDiyKpiDialogInput{ + width: 590px; + + border: 1px solid #666666; +} + +.manageDiyKpiDialogInput1{ + width: 95%; + border: 1px solid #666666; +} + +.manageDiyKpiDialogButton-next{ + display: inline-block; + height: 40px; + padding-right: 15px; + text-decoration:none; + background: transparent url(images/btn_next_right.png) 100% 0 no-repeat; +} +.manageDiyKpiDialogButton-next span { + cursor:pointer; + display: block; + padding: 10px 18px 11px 30px; + font-size: 16px; + color: white; + text-shadow: 0 1px #448BD8; + background: transparent url(images/btn_next_left.png) 0 0 no-repeat; +} + +.manageDiyKpiDialogButtonTd{ + padding-right: 60px; + text-align: right; +} + +.manageDiyKpiDialogDate{ + color: #999999; + height: 28px; +} +/*自定义KPI end*/ \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.radio.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.radio.css new file mode 100644 index 00000000..cf515c99 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.radio.css @@ -0,0 +1,72 @@ +/*【打印--导出】导航 可引入此样式*/ + + +/* amount process radio start */ +.analysisRadioLeft{ + background: url("images/radio_bg_left.png") no-repeat scroll 0 50% transparent; + display: block; + float: left; + height: 24px; + width: 6px; +} + +.analysisRadioContent{ + border-top: 1px solid #D8D8D8; + border-bottom: 1px solid #D8D8D8; + display: block; + float: left; + height: 22px; + background:#F2F2F2; + line-height: 24px; +} + +.analysisRadioContentParent{ + border: 1px solid #F2F2F2; + height: 20px; + cursor: pointer; +} + +.analysisRadioContentParent:hover{ + -moz-border-radius: 5px 5px 5px 5px; + background: none repeat scroll 0 0 #bbb; + border: 1px solid #999; +} +.analysisRadioContent span{ + display: block; + float: left; +} + +.analysisRadioContent .radioWord{ + padding: 0 0px 0 3px; +} + +.analysisRadioRight{ + background: url("images/radio_bg_right.png") no-repeat scroll 0 50% transparent; + display: block; + float: left; + height: 24px; + width: 6px; +} + +.analysisRadioRray{ + background: url("images/gray_radio.png") no-repeat scroll 0 50% transparent; + height: 22px; + width: 16px; + cursor: pointer; +} +.analysisRadioWhite{ + background: url("images/white_radio.png") no-repeat scroll 0 50% transparent; + height: 22px; + width: 16px; + cursor: pointer; +} +.analysisRadioBlack{ + background: url("images/black_radio.png") no-repeat scroll 0 50% transparent; + height: 22px; + width: 16px; + cursor: pointer; +} + +.clear{ clear:both; border:none;} + +/* amount process radio end */ \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.report.view.main.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.report.view.main.css new file mode 100644 index 00000000..e6c35f70 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.report.view.main.css @@ -0,0 +1,150 @@ +.projectViewTabsBGColor{ + background-color:#F0F0F0; +} +.projectViewTabsHeader{ + padding:0; +} +.project-view-tabs-downarrow{ + /*background:url(../../../aws_img/arrow_down.gif) 50% 50% no-repeat;*/ + background:url(../../../aws_img/arrow_down_gray.gif) 50% 50% no-repeat; + margin-left: 5px; +} + +.processTabsDiv{ + padding-top: 5px; + display:none; + position:absolute; + top: 65px; + z-index:100; + left: 80px; + color: #222222; +} + +.processTabsDiv-sub{ + -moz-border-radius: 5px 5px 5px 5px; + -moz-box-shadow: 1px 1px 2px 1px #DDDDDD; + /*background: none repeat scroll 0 0 #FFFFFF;*/ + min-height: 200px; + min-width: 450px; +} + +.processTabsDiv-sub-shad{ + min-height: 210px; + min-width: 360px; + opacity: 0.9; + filter: alpha(opacity=90); + border: 1px solid #D8E6F3; + background: none repeat scroll 0 0 #F2F2F2; + position: absolute; + z-index:-1; +} + +.processTabsDiv-sub span{ + background: url("images/tabs_div_arrow_right.png") no-repeat scroll 80% 50% transparent; + min-width:94px; + max-width:94px; + display: block; + border: 1px solid #FFF; + padding: 2px; + cursor: pointer; + /*position: absolute; + z-index:103;*/ +} + + +.processTabsDivArrow{ + background: url("images/tabs_div_arrow.png") no-repeat scroll 50% 50% transparent; + height: 7px; + position: absolute; + top: -1px; + width: 11px; + left: 65px; + opacity: 0.8; + filter: alpha(opacity=80); +} + +.processTabsDiv-sub-class{ + float:left; +} + +.processTabsDiv-sub-class .divTable{ + width: 100%; +} + +.processTabsDiv-sub-class .divTable .divTdParent{ + font-weight: bold; +} +.processTabsDiv-sub-class .divTable .divTdLeaf{ + cursor:pointer; +} + +.processTabsDiv-sub-class .divTable .divTdLeaf:hover{ +/*.processTabsDiv-sub-class .divTable .divTdLeaf-hover{*/ + background-color:#999; +} + +.divTdLeaf-click{ + background-color:#888; +} + +.dimensionListTabsToolManage{ + display:none; + background: none repeat scroll 0 0 #FFF; + border: 2px solid #49799F; + height: 200px; + position: absolute; + top: 0; + width: 308px; +} + +.reportViewTabsTools{ + width:450px; + height: 100%; + background:#294d72; + cursor:pointer; +} + +.reportViewTabsTools .content{ + float: left; + height: 25px; + line-height: 25px; + width: 422px; + color: #fff; + padding-left: 4px; + + border-right: 1px solid #49799f; +} +.reportViewTabsTools .content:hover{ + background-color:#49799f; +} +.reportViewTabsTools .content-hover{ + background-color:#49799f; +} +.reportViewTabsTools .content .text{ + width:300px; + overflow:hidden; /*超出的部分隐藏起来。*/ + white-space:nowrap; /*不显示的地方用省略号...代替*/ + text-overflow:ellipsis; /* 支持 IE */ + -o-text-overflow: ellipsis; /* 支持 Opera */ + float: left; +} +/*.reportViewTabsTools .content .text:after{ + content:"..."; +}*/ /* 支持 Firefox */ + +.reportViewTabsTools .dimension{ + height: 100%; + width: 22px; + + border-left: 1px solid #FFFFFF; +} +.reportViewTabsTools .dimension:hover{ + background-color:#49799f; +} + +.reportViewTabsTools .downarrow{ + background: url("../../../aws_img/arrow_down_white.gif") no-repeat scroll 50% 50% transparent; + float: right; + height: 24px; + width: 20px; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.userinfo.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.userinfo.css new file mode 100644 index 00000000..c17ab35f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.team.userinfo.css @@ -0,0 +1,207 @@ +body { + font-family:Verdana; + font-size:12px; +} +#container { + margin:0 auto; + width:100%; +} +#header { + height:100px; + background:#9c6; + margin-bottom:5px; +} +#mainContent { + min-height:400px; + margin-bottom:5px; +} +#sidebar { + float:left; + width:200px; + min-height:500px; + height:100%; + background: url("../../../commons/js/jquery/themes/default/ui/app/appviewport2/images/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; + position:fixed; + border-right:#999; + text-align:center; + border-right:#999 solid 1px; +} + +#content { + margin-left:201px; +} +#content2 { + height:50px; +} +#content3 { + margin-top:4px; + overflow: auto; +} +#container4 { + margin:0 auto; + width:100%; +} + +#content4{ + margin:0 auto; + overflow:hidden; +} +.content-tbl { + height:30px; + line-height:29px; + background:url("../../../commons/js/jquery/themes/default/ui/app/appviewport2/images/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; + border-left-width:1px; + border-bottom-color:#999; + border-bottom:#b5b5b5 solid 1px; + border-top:#b5b5b5 solid 1px; + padding-left:8px; + +} +.kris { + padding-left:15px; + font:30px xx-small; + float:left; + margin-top:10px; +} +.gb { + float:right; + font-size:25px; + color:#CCC; + cursor:pointer; +} +.Process { + padding: 6px 10px 2px 10px; + color:#000000; + background-color:#FFF; + border-radius: 1px 1px 0px 0px; + font-weight: 800; + margin-left:3px; + position:relative; + top:6px; + border-top:1px solid #B5B5B5; + border-left:1px solid #B5B5B5; + border-right:1px solid #B5B5B5; +} +.backButton { + margin-left:10px; + cursor:pointer; +} +.pinlun { + padding: 6px 10px 1px 10px; + border-radius: 1px 1px 0px 0px; + cursor:pointer; + font-weight: 800; + margin-left:3px; + color:#666666; + position:relative; + top:6px; + border-top:1px solid #B5B5B5; + border-left:1px solid #B5B5B5; + border-right:1px solid #B5B5B5; + border-bottom:1px solid #B5B5B5; +} +@media screen\0 { + .pinlun {padding: 6px 10px 2px 10px;} + .Process { + padding: 6px 10px 3px 10px; + } +} +@media screen and (-webkit-min-device-pixel-ratio:0) { + .pinlun { + padding: 6px 10px 1px 10px; + } + .Process { + padding: 6px 10px 2px 10px; + } +} +.pinlun:hover { + background:#FFFFFF; + color:#000; + border-top:1px solid #B5B5B5; + border-left:1px solid #B5B5B5; + border-right:1px solid #B5B5B5; + border-bottom:1px solid #B5B5B5; +} +.flowboder { + width:210px; + height:200px; + margin:5px; + margin-left:15px; + float:left; + cursor:pointer; + border:#999 solid 1px; + text-align:center; + border-radius: 5px 5px 5px 5px; + box-shadow:5px 2px 6px #444; +} +.flowconert_font { + color:#3980c3; + margin:0 auto; + text-align:center; +} +.flowconert_buttont { + display:none; + margin-top:-30px; + padding:0 5px 0 40px; +} +.conert { + width:200px; + height:160px; + margin:3px auto; +} +.phonrconert { + border:#CCC solid 1px; + width:110px; + height:110px; + margin:10px auto; +} +.userInofT{ + text-align:center; + margin:5px auto; + word-wrap: break-word; +} +.processPng{ + width:195px; + height:170px; +} + +.flowboderflow { + margin-right:355px !important; + margin-right:352px; + overflow:auto; + min-height:450px; + height:450px; + min-width: 340px; +} +#sidebar-flow { + float:right; + width:350px; + background:#F9F9F9; + border-left:#999; + text-align:left; + overflow:auto; + border-left:#999 solid 1px; + margin-right:1px; + min-height:450px; + height:450px; +} +#processImgId { +cursor: move; +} + +.process-title { + padding-left:15px; + font-weight: 800; +} +.social_share_process_title{ + text-align:left; + padding-left:10px; +} + + +.commentList{ + text-align:left; + margin:5px auto; + width:700px; +} + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.ws.list.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.ws.list.css new file mode 100644 index 00000000..4103d865 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.ws.list.css @@ -0,0 +1,462 @@ +@CHARSET "UTF-8"; + +.query_container { + +} + +#main_list { + margin: 0 10px; +} +#content_container { + margin: 0; +} +#content_container_process, #content_container_task { + margin: 2px 5px; +} +/***************** Items **********************/ +.content_layout { + /*float: left;*/ + overflow: auto; +} +.item_box { + background: url(../aws_css/designer/v2/images/users/content_bg.png) repeat-x; + margin-left: 15px; + padding-top: 2px; +} +.item_list { + /* min-width: 500px; */ +} + +.item_list .file_item:hover { + background-color: #F3F3F3 ; + +} +.file_item { + font-size: 13px; + line-height: 28px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} +.file_item_sub { + line-height: 28px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} +.file_group { + line-height: 28px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + cursor: pointer; +} +.item_list .selected { + background-color: #63ABF7; + color: #FFF; +} +.item_list .selected a { + color: #FFF; +} +.item_list .selected:hover { + background-color: #63ABF7; + box-shadow: none; +} + +.item_list .list_group, .header { + border-bottom: 1px solid #99BBE8; + height: 28px; + padding-left: 5px; +} + +tr.item_list tr.list_item, tr.header { + border-bottom: 1px solid #EBEBEB; + height: 28px; + padding-left: 5px; +} +.item_list .list_item, .header { + border-bottom: 1px solid #EBEBEB; + height: 28px; + padding-left: 5px; +} +.item_list .list_item_sub { + border-bottom: 1px solid #EBEBEB; + height: 28px; +} +.item_list li.header { + font-weight: bold; + font-size: 12px; + color: #555; +} +.item_list tr.header,tr.header { + font-weight: bold; + font-size: 13px; + color: #555; + background-color: #dce9f9; +background-image: -webkit-gradient(linear, left top, left bottom, from(#ebf3fc), to(#dce9f9)); +background-image: -webkit-linear-gradient(top, #ebf3fc, #dce9f9); +background-image: -moz-linear-gradient(top, #ebf3fc, #dce9f9); +background-image: -ms-linear-gradient(top, #ebf3fc, #dce9f9); +background-image: -o-linear-gradient(top, #ebf3fc, #dce9f9); +background-image: linear-gradient(top, #ebf3fc, #dce9f9); +-webkit-box-shadow: 0 1px 0 rgba(255,255,255,.8) inset; +-moz-box-shadow:0 1px 0 rgba(255,255,255,.8) inset; +box-shadow: 0 1px 0 rgba(255,255,255,.8) inset; +border-top: none; +text-shadow: 0 1px 0 rgba(255,255,255,.5); +} + +.item_list li.header:hover { + background-color: transparent; +} + +.item_list .list_group div, .item_list .header div { + height: 28px; + line-height: 28px; +} + +.item_list .list_item div, .item_list .header div { + line-height: 28px; +} + +.item_list .list_item_sub div, .item_list .header div { + line-height: 28px; +} + +.item_list .expandicon { + width: 30px; + text-align: center; +} + +.item_list .checkbox { + width: 30px; + text-align: center; +} + +.item_list .title { + cursor: default; + padding-left: 5px; + border-bottom: 1px solid #EBEBEB; + width: 60%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.item_list .processname { + width: 20%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.item_list .operate,td.operate { + border-bottom: 1px solid #EBEBEB; + width: 40%; + padding: 3px 4px; +} +.item_list .createtime { + width: 120px; + text-align: center; +} + +.item_list .target { + width: 100px; +} + +.item_list .owner { + width: 100px; +} + +.process { + +} +.task { + +} + +.active { + +} +.suspend { + background-color: rgba(255, 255, 0, 0.4); +} +.end { +} +.terminate { +} +.error { + color: #EC6363; +} +.complete { + +} +.compensate { + +} +.delete { + color: #A2A2A2; +} +.cancel { + color: #A2A2A2; +} +.terminate { + +} + +.icon { + width: 16px; + height: 16px; + margin-right: 3px; + display: inline-block; + vertical-align: middle; +} +.process.icon.active { + background: url(../aws_img/process/runtime/engine/process/active.gif) no-repeat; +} +.process.icon.suspend { + background: url(../aws_img/process/runtime/engine/process/suspend.gif) no-repeat; +} +.process.icon.end { + font-weight: bold; + font-size: 18px; + color: #555; + background: url(../aws_img/process/runtime/engine/process/end.png) no-repeat; +} +.process.icon.terminate { + font-weight: bold; + font-size: 18px; + color: #555; + background: url(../aws_img/process/runtime/engine/process/terminate.png) no-repeat; +} +.process.icon.cancel { + background: url(../aws_img/process/runtime/engine/process/cancel.png) no-repeat; +} + +.task.icon.active { + background: url(../aws_img/process/runtime/engine/task/active.gif) no-repeat; +} +.task.icon.suspend { + background: url(../aws_img/process/runtime/engine/task/suspend.gif) no-repeat; +} +.task.icon.error { + color: red; + background: url(../aws_img/process/runtime/engine/task/error.png) no-repeat; +} +.task.icon.complete { + background: url(../aws_img/process/runtime/engine/task/complete.png) no-repeat; +} +.task.icon.cancel { + color: gray; + background: url(../aws_img/process/runtime/engine/task/cancel.png) no-repeat; +} +.task.icon.compensate { + background: url(../aws_img/process/runtime/engine/task/compensate.png) no-repeat; +} +.task.icon.delete { + color: gray; + background: url(../aws_img/process/runtime/engine/task/delete.png) no-repeat; +} + +.task.icon.terminate { + background: url(../aws_img/process/runtime/engine/task/terminate.png) no-repeat; +} +.usertask.icon.state.STATE_TYPE_TRANSACT { + background: url(../aws_img/process/runtime/engine/usertask/1.png) no-repeat; +} +.usertask.icon.state.STATE_TYPE_CC { + background: url(../aws_img/process/runtime/engine/usertask/2.png) no-repeat; +} +.usertask.icon.state.STATE_TYPE_SYSTEM_NOTIFY { + background: url(../aws_img/process/runtime/engine/usertask/9.png) no-repeat; +} +.usertask.icon.state.STATE_TYPE_ADHOC { + background: url(../aws_img/process/runtime/engine/usertask/11.png) no-repeat; +} +.usertask.icon.state.none { + background: url() no-repeat; +} +.usertask.icon.CLAIM_USER { + background: url() no-repeat; +} +.usertask.icon.CLAIM_DEPARTMENT { + background: url(../aws_img/process/runtime/engine/share/1.png) no-repeat; +} +.usertask.icon.CLAIM_ROLE { + background: url(../aws_img/process/runtime/engine/share/2.png) no-repeat; +} +.usertask.icon.CLAIM_TEAM { + background: url(../aws_img/process/runtime/engine/share/3.png) no-repeat; +} +.usertask.icon.CLAIM_NOT_FIND_PERFORMER { + background: url() no-repeat; +} +.dvhdr { + width: 340px; + font-size: 14px; + background: #E7E7E7; + border: 1px solid #D0D0D0; + font-weight: bold; + padding: 3px; + -webkit-border-top-left-radius: 5px; + -webkit-border-top-right-radius: 5px; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + -moz-border-radius-topleft: 5px; + -moz-border-radius-bottomright: 5px; +} +.dvbdy { + width: 340px; + background: #FFFFFF; + border-left: 1px solid #D0D0D0; + border-right: 1px solid #D0D0D0; + border-bottom: 1px solid #D0D0D0; + padding: 3px; + -webkit-border-bottom-left-radius: 5px; + -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-bottomleft: 5px; + -moz-border-radius-bottomright: 5px; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} +.radius3 { + -moz-border-radius: 3px 3px 3px 3px; + -webkit-border-radius: 3px 3px 3px 3px; + border-radius: 3px 3px 3px 3px; +} +/*分页*/ +.pagination { + float: left; + border: 1px solid #CDCDCD; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +.pagination a { + display: block; + float: left; + height: 20px; + width: 20px; + background-color: rgb(0,50,75); + color: #555555; + text-align: center; + text-decoration: none; + font-family: Times, 'Times New Roman', Georgia, Palatino; /* ATTN: need a better font stack */ + font-weight: bold; + font-size: 16px; + outline: none; + vertical-align: middle; + + background: #F3F3F3; /* Old browsers */ + background: -moz-linear-gradient(top, #F3F3F3 0%, #D3D3D3 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#F3F3F3), color-stop(100%,#D3D3D3)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #F3F3F3 0%,#D3D3D3 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #F3F3F3 0%,#D3D3D3 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #F3F3F3 0%,#D3D3D3 100%); /* IE10+ */ + background: linear-gradient(top, #F3F3F3 0%,#D3D3D3 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#F3F3F3', endColorstr='#D3D3D3',GradientType=0 ); /* IE6-9 */ + +} + +.pagination a:hover, .pagination a:focus, .pagination a:active { + + background: #CECECE; /* Old browsers */ + background: -moz-linear-gradient(top, #E4E4E4 0%, #CECECE 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#E4E4E4), color-stop(100%,#CECECE)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #E4E4E4 0%,#CECECE 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #E4E4E4 0%,#CECECE 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #E4E4E4 0%,#CECECE 100%); /* IE10+ */ + background: linear-gradient(top, #E4E4E4 0%,#CECECE 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#E4E4E4', endColorstr='#CECECE',GradientType=0 ); /* IE6-9 */ + +} + +.pagination a.disabled, .pagination a.disabled:hover, .pagination a.disabled:focus, .pagination a.disabled:active { + + background: #F3F3F3; /* Old browsers */ + background: -moz-linear-gradient(top, #F3F3F3 0%, #D3D3D3 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#F3F3F3), color-stop(100%,#D3D3D3)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #F3F3F3 0%,#D3D3D3 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #F3F3F3 0%,#D3D3D3 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #F3F3F3 0%,#D3D3D3 100%); /* IE10+ */ + background: linear-gradient(top, #F3F3F3 0%,#D3D3D3 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#F3F3F3', endColorstr='#D3D3D3',GradientType=0 ); /* IE6-9 */ + + color: #A8A8A8; + +} + +.pagination a:first-child { + border-radius: 2px 0 0 2px; + -moz-border-radius: 2px 0 0 2px; + -webkit-border-radius: 2px 0 0 2px; +} + +.pagination a:last-child { + border-radius: 0 2px 2px 0; + -moz-border-radius: 0 2px 2px 0; + -webkit-border-radius: 0 2px 2px 0; +} + +.pagination a { + border-right: 1px solid #CDCDCD; + border-left: 1px solid #CDCDCD; +} + +.pagination a:first-child { + border: none; +} + +.pagination a:last-child { + border: none; +} + +.pagination input { + border: none; + float: left; + text-align: center; + height: 20px; + outline: none; + vertical-align: middle; + width: 120px; + padding: 0; + margin: 0; +} +.pagination input:hover,.pagination input:focus,.pagination input:active { + border: none; + float: left; + text-align: center; + height: 20px; + outline: none; + vertical-align: middle; + width: 120px; + padding: 0; + margin: 0; +} +/* gigantic class for demo purposes */ + +.gigantic.pagination { + margin: 0px 0; +} + +.gigantic.pagination a { + height: 22px; + width: 22px; + font-size: 22px; + line-height: 22px; +} + +.gigantic.pagination input { + width: 100px; + height: 22px; + font-size: 15px; +} +.center{ + margin: 0 auto; + text-align: center; +} +.excel-number{ + background-color: #F5FAFA; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.ws.main.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.ws.main.css new file mode 100644 index 00000000..dfdcb5ac --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.ws.main.css @@ -0,0 +1,504 @@ +.oDvShadow{ + -webkit-box-shadow: 5px 5px 7px #999; + -webkit-border-bottom-right-radius: 15px; + -moz-box-shadow: 5px 5px 7px #999; + -moz-border-radius-bottomright: 15px; + box-shadow: 5px 5px 7px #999; +} +html body { + margin: 0px; + padding: 0px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + background-repeat: repeat; +} +input, textarea, div { + resize: none; + outline: none; + font-size: 12px; +} +.fieldset { + padding: 10px; + margin: 10px; + color: #333; + border: #06c solid 1px; +} +.legend { + color: #06c; + font-weight: 800; + background: #fff; + border: #b6b6b6 solid 1px; + padding: 3px 6px; +} +/*输入框*/ +input[type="text"] { + border: 1px solid #D9D9D9; + border-top: 1px solid silver; + padding: 4px; + width: 180px; + background-color: #FFFFFF; + border-radius: 2px; + width: 135px; + padding-left: 5px; + vertical-align: middle; +} +input[type="text"]:hover { + border: 1px solid #B8B8B8; + border-top: 1px solid #A1A1A1; +} +input[type="text"]:focus { + border: 1px solid #3da2ea; + box-shadow: inset 0px 1px 2px rgba(0,0,0,0.2); +} +select { + border: 1px solid #D9D9D9; + border-top: 1px solid silver; + padding: 2px 4px; + background-color: #FFFFFF; + border-radius: 2px; + width: 146px; + height: 25px; + padding-left: 5px; + vertical-align: middle; + line-height:25px; +} +select:hover { + border: 1px solid #B8B8B8; + border-top: 1px solid #A1A1A1; +} +option { + padding-left: 8px; + height: 18px; + vertical-align: middle; + line-height:25px; + padding-top:4px; +} +div.leftDiv { + float: left; + width: 240px; + height: 100%; + text-align: left; +} +ul.ztree { + border: 1px solid #C3C3C3; + width: 100%; + height: 100%; + overflow-y: auto; + overflow-x: auto; +} +div.rightDiv { + float: left; + padding-left: 15px; +} +.nav-tab-box { + width: 100%; + border: 0px; + height: 30px; + border-bottom: 1px solid #CCC; +} +.nav-tabs { + padding-left: 10px; + list-style: none; + float: left; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} +.nav-tabs li { + float: left; + cursor: pointer; + height: 22px; + line-height: 22px; + text-align: center; + border-right: 1px solid #C3C3C3; + border-left: 1px solid #E5E5E5; + border-top: 1px solid #C3C3C3; +} +.tab-active { + background: #FFFFFF; + color: #23272C; + padding: 4px 19px 4px 19px; +} +.tab-normal { + color: #444; + padding: 4px 19px 3px 19px; + background: #D7D7D7; +} +.tab-normal:hover { + background: #CCC; +} +.nav-items-container { + width: 100%; + height:100%; +} +.tab-border-radius { + -moz-border-radius: 6px 6px 0px 0px; + -webkit-border-radius: 6px 6px 0px 0px; + border-radius: 6px 6px 0px 0px; +} +/*树节点*/ +.treeIconRoot_ico_open,.treeIconRoot_ico_close{ + background:transparent url(../aws_img/left_blue/img/base.gif)!important; + background-repeat: no-repeat; +} +.treeIconCategory_ico_open,.treeIconCategory_ico_close{ + background:transparent url(../aws_img/profile2.gif)!important; + background-repeat: no-repeat; +} +.treeIconWFG_ico_open,.treeIconWFG_ico_close{ + background:transparent url(../aws_img/process.group.gif)!important; + background-repeat: no-repeat; +} +.treeIconWF_ico_open,.treeIconWF_ico_close{ + background:transparent url(../aws_img/process.def.gif)!important; + background-repeat: no-repeat; +} +.treeIconWFG2_ico_open,.treeIconWFG2_ico_close{ + background:transparent url(../aws_img/process.bo.group.gif)!important; + background-repeat: no-repeat; +} +.treeIconWFG2_ico_docu{ + background:transparent url(../aws_img/grid.png)!important; + background-repeat: no-repeat; +} +.treeIconWF2_ico_open,.treeIconWF2_ico_close{ + background:transparent url(../aws_img/process.def2.gif)!important; + background-repeat: no-repeat; +} +.treeIconUnUserTask_ico_docu{ + background:transparent url(../aws_img/domain.gif)!important; + background-repeat: no-repeat; +} +.treeIconUserTask_ico_docu{ + background:transparent url(../aws_img/user6.gif)!important; + background-repeat: no-repeat; +} +.operation { + /*position: relative;*/ + display: inline-block; + margin: 0 3px 0 0px; + padding: 1px 8px 1px 8px; + height: auto; + font-family: Helvetica, arial, freesans, clean, sans-serif; + line-height: 14px; + text-align: center; + vertical-align: text-top; + border-top: 1px solid #ccc; + border-radius: 8px; + font-weight: normal; + color: white; + background: #3995DA; + text-decoration: none; + font-size: 11px; +} + +/*以下为空间显示样式*/ +.GEQ2YR4BBR { + background-color: white; + position: relative; + width: 100%; + height: 100%; +} +.GEQ2YR4BAR { + height: 23px; +} +.GEQ2YR4BOQ { + width: 35px; + float: left; + height: 1%; + position: relative; +} +.GEQ2YR4BPQ { + float: left; + height: 100%; +} +.GEQ2YR4BNI { + cursor: default !important; + text-decoration: none !important; + font-size: 8pt; + margin: 0; + border: 0; +} +.GEQ2YR4BOH { + cursor: default; + padding-top: 2px; +} +.GEQ2YR4BLI { + position: fixed; + color: white; + height: 32px; + width: 100%; + bottom: 0; +} +.GEQ2YR4BKI { + float: left; + height: 15px; + margin-left: 26px; + margin-top: 10px; + width: 41px; +} +.GEQ2YR4BJI { + cursor: default !important; + text-decoration: none !important; + font-size: 8pt; + border: 0; +} +.GEQ2YR4BJR { + padding-right: 20px; + padding-bottom: 15px; +} +.GEQ2YR4BIR { + float: left; +} +.buttons { + float: right; +} +.GEQ2YR4BGR { + padding-left: 3px; + padding-top: 5px; + clear: both; +} +.GEQ2YR4BJR .largeButtonContainer, .GEQ2YR4BJR .bp_button_gray_blue_20 { + padding-bottom: 5px; +} +.GEQ2YR4BFS { + position: relative; + top: 1px; + font-size: 11px; + border: 0 none; + width: 150px; + margin-right: 10px; + height: 12px; +} +.itemSummaryListPanel .lastModified { + font-size: 12px; + color: #4c5866; + height: 16px; + margin-left:20px; + overflow: hidden; +} +.itemSummaryListPanel .itemSummary .name { + color: #1563b5; + font-size: 14px; + font-weight: bold; + padding-top: 1px; + /*float: left;*/ + cursor: pointer; +} +.browserShortenedLabel { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +body { + font-family: Arial, Helvetica, sans-serif; +} +.itemSummaryListPanel { + overflow: hidden; +} +.flowTable:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; + overflow: hidden; +} +.itemSummaryListPanel .flowTable { + width: 100%; +} +.itemSummaryListPanel .spaceSummary { + height: 82px; +} +.itemSummaryListPanel .itemSummary { + margin-top:5px; + position: relative; + float: left; + background-color: white; +} +.itemSummaryListPanel .itemSummary .hoverArea-selected { + background-color: #edf4fb; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + /*border:1px solid #edf4fb;*/ +} +.itemSummaryListPanel .spaceSummary .hoverArea { + height: 72px; +} +.itemSummaryListPanel .itemSummary .hoverArea { + padding: 3px; + margin-right: 7px; + margin-bottom: 4px; + overflow: hidden; +} +.itemSummaryListPanel .itemSummary .body { + padding-left: 5px; + + +} +.itemSummaryListPanel .itemSummary .icon { + margin-top: 2px; + width: 26px; + height: 26px; + float: left; +} + +.tagsEditor .editTags { + position: relative; + + float: left; + cursor: pointer; + padding-left: 15px; + margin-right:8px; + padding-top: 2px; + background: url('../img/ws/edit.png') 0 3px no-repeat; + color: #1563b5; +} +.tagsEditor .stopTags { + position: relative; + /*font-size: 10px;*/ + float: left; + cursor: pointer; + padding-left: 15px; + margin-right:8px; + padding-top: 2px; + background: url('../img/ws/stop.png') 0 3px no-repeat; + color: #1563b5; +} +.tagsEditor .delTags { + position: relative; + + float: left; + cursor: pointer; + padding-left: 15px; + margin-right:8px; + padding-top: 2px; + background: url('../img/ws/del.png') 0 3px no-repeat; + color: #1563b5; +} +.tagsEditor .expTags { + position: relative; + + float: left; + cursor: pointer; + padding-left: 15px; + margin-right:8px; + padding-top: 2px; + background: url('../img/ws/exp.png') 0 3px no-repeat; + color: #1563b5; +} + +.tagsEditor .container { + position: absolute; +} + +.itemSummaryListPanel .itemSummary .tagsEditorWidget .padding { + padding-top: 8px; +} +.itemSummaryListPanel .itemSummary .tagsEditorWidget { + clear: both; + height: 25px; +} +.tagsEditorWidget { + position: relative; + overflow: hidden; + width: 100%; +} + +.itemSummaryListPanel .itemSummary .hoverArea .followingButton-isNotFollowed { + display: none; +} +.itemSummaryListPanel .itemSummary .hoverArea .followingButton { + margin-top: 8px; +} + +.itemSummaryListPanel .itemSummary .hoverArea-selected .followingButton-isNotFollowed { + display: block; +} +.itemSummaryListPanel .itemSummary .hoverArea .followingButton { + margin-top: 8px; +} +.followingButton { + cursor: pointer; + float: left; + width: 22px; + height: 17px; +} +element.style { + left: 69px; + top: 223px; + visibility: visible; + position: absolute; + overflow: visible; +} +Matched CSS Rules .bwlPopupMenu { + color: black; + background-color: white; + border: 1px #a0a0a0 solid; + padding-top: 5px; + padding-bottom: 5px; +} +.bwlPopupMenu { + color: black; +} + +.bwlPopupMenu .actionButton { + clear: both; + padding-top: 7px; + padding-right: 6px; + padding-bottom: 1px; + padding-left: 32px; + cursor: pointer; + height: 18px; + min-width: 110px; +} +.bwlPopupMenu .popupItem { + font-size: 11px; + text-decoration: none; + color: black; + background-color: white; + display: block; +} +.actionButton { + top: 13px; +} + +.bwlPopupMenu .popupItem:hover { + background-color: #e3edf7; +} + + +.bwlPopupMenu { + color: black; + background-color: white; + border: 1px #a0a0a0 solid; + padding-top: 5px; + padding-bottom: 5px; +} +.clearBoth { + /*clear: both;*/ +} +.ws_item{ + text-align:center; + margin:5px; + float:left; + height:170px; + line-height:30px; + width:140px; + border-radius:6px 6px 6px 6px; + border:1px solid #fff; +} +.ws_item:hover{ + background-color:#E6E6E6; + border:1px solid #E6E6E6; + cursor:pointer; +} +.ws_item_img{ + margin-top:25px; + background-color:#FFF; + padding:10px; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.ws.office.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.ws.office.css new file mode 100644 index 00000000..27eb541a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.ws.office.css @@ -0,0 +1,29 @@ + +div.qtip-content{/*���qTip������ȫ�������ͻ����*/ + color:white; +} +.officeCenter{ + background: url("images/process.office.bg.png") repeat; + min-height:582px; +} +#workspace{padding: 20px 0 0 260px;} +.projectLine{border-top: 1px solid rgb(196, 189, 181);width:50px;height:1px;margin-top: 57px;float:left;} +.projectTitle{line-height: 24px;Height:24px;font-weight: bold;font-size:14px;padding:0 5px;} +.projectTitle span{ + float: right; + background: url(images/office.member.png) no-repeat; + font-size: 12px; + font-weight: normal; + padding-left: 12px; + background-position-y: 3px; + } +.projectContent{float: left;margin-top: 20px;} + +#officeHtml ul{width: 330px;list-style: none;margin-left:40px;border-left: 1px solid rgb(196, 189, 181);} +#officeHtml ul li{float:left;} +.project{width: 270px;border: 1px solid rgb(196, 189, 181);background-color: #ffffff;border-radius: 5px;} +.project .imgBox{width:255px;height: 50px;overflow: hidden;float:left;} +.project .boxslider{float:left;width:9px;display:none;} +.project .boxslider button{background: url(images/arrowDoubleDown.gif) no-repeat;border: none;margin-top: 20px;height: 12px;} +.project .imgBox img{margin:4px;} + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.ws.portal.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/coe.ws.portal.css new file mode 100644 index 00000000..e69de29b diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/coe.datepicker.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/coe.datepicker.css new file mode 100644 index 00000000..0513dd09 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/coe.datepicker.css @@ -0,0 +1,96 @@ + +div.navigationDatepickerDivAws { + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + border: 1px solid #aaaaaa; + width: 780px; + background:#F7F7F7; + font-size:13px; + left: 100px; + position: absolute; + top: 100px; +} + +.dateSet{ + height: 95px; + border: 1px dotted #666666; + padding-left: 2px; + padding-top: 2px; +} +.dateSet span{ + display: block; + width: 45%; + float:left; + padding-left: 5px; +} + +.dateSet .options{ + +} + +.dateSet .options span:hover{ + background:#DDDDDD; + cursor: pointer; +} + +.dateValue{ + height:30px; + width: 98%; + line-height: 30px; +} +.dateValue span{ + display: block; + width: 45%; + float:left; +} + +.dateValue span input{ + width: 94%; +} + +.dateButton{ + height:30px; +} +.dateButton span{ + display: block; + float: right; + text-align: center; + width: 50%; +} + +.state-default { + border: 1px solid #D3D3D3; + color: #555555; + font-weight: normal; +} +.state-active { + border: 1px solid #AAAAAA; + font-weight: normal; + color: #FFFFFF; + background:#0077CC; +} +.state-second{ + border: 1px solid #AAAAAA; + font-weight: normal; + color: #FFFFFF; + background: #ed7e17; +} +.state-three{ + border: 1px solid #AAAAAA; + font-weight: normal; + color: #FFFFFF; + background: #00b1ab; +} +.inputSelect{ + border: 2px solid #0077CC; +} +.dateBlockArea{ + font-size: 76.5%;/* 62.5%;*/ + +} +.compare-no-active{ + display: none; +} +input.default { +border: #ddd solid 1px; +color: #aaa; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_flat_0_aaaaaa_40x100.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 00000000..5b5dab2a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_flat_75_ffffff_40x100.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 00000000..ac8b229a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_55_fbf9ee_1x400.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 00000000..ad3d6346 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_55_fbf9ee_1x400.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_65_ffffff_1x400.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 00000000..42ccba26 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_75_dadada_1x400.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 00000000..5a46b47c Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_75_dadada_1x400.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_75_e6e6e6_1x400.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 00000000..86c2baa6 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_95_fef1ec_1x400.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 00000000..4443fdc1 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 00000000..7c9fa6c6 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_222222_256x240.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_222222_256x240.png new file mode 100644 index 00000000..ee039dc0 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_222222_256x240.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_2e83ff_256x240.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 00000000..45e8928e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_2e83ff_256x240.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_454545_256x240.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_454545_256x240.png new file mode 100644 index 00000000..7ec70d11 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_454545_256x240.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_888888_256x240.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_888888_256x240.png new file mode 100644 index 00000000..5ba708c3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_888888_256x240.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_cd0a0a_256x240.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 00000000..7930a558 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/images/ui-icons_cd0a0a_256x240.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/jquery.ui.core.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/jquery.ui.core.css new file mode 100644 index 00000000..ef27f470 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/jquery.ui.core.css @@ -0,0 +1,41 @@ +/* + * jQuery UI CSS Framework 1.8.11 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/jquery.ui.datepicker.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/jquery.ui.datepicker.css new file mode 100644 index 00000000..3497ddd4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/jquery.ui.datepicker.css @@ -0,0 +1,68 @@ +/* + * jQuery UI Datepicker 1.8.11 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: center; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/jquery.ui.theme.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/jquery.ui.theme.css new file mode 100644 index 00000000..6bf63531 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/datepicker/jquery.ui.theme.css @@ -0,0 +1,252 @@ +/* + * jQuery UI CSS Framework 1.8.11 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/ + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } + +.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #DDDDDD; color: #222222/*{fcHeader}*/; font-weight: bold; } +.ui-widget-header a { color: #222222/*{fcHeader}*/; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #FFCC33; } +.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-top { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-right { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-left { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all { -moz-border-radius: 4px/*{cornerRadius}*/; -webkit-border-radius: 4px/*{cornerRadius}*/; border-radius: 4px/*{cornerRadius}*/; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } +.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; } \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/alert.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/alert.css new file mode 100644 index 00000000..156c0f91 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/alert.css @@ -0,0 +1,14 @@ +#messageBoxFrame {background: transparent; margin:25px 1em 100px 1em; width:80%; margin:0 auto;} + +.xtop, .xbottom {display:block; background:transparent; font-size:1px;} +.xb1, .xb2, .xb3, .xb4 {display:block; overflow:hidden;} +.xb1, .xb2, .xb3 {height:1px;} +.xb2, .xb3, .xb4 {background:#fbeec3; border-left:1px solid #ebc13b; border-right:1px solid #ebc13b;} +.xb1 {margin:0 5px; background:#ebc13b;} +.xb2 {margin:0 3px; border-width:0 2px;} +.xb3 {margin:0 2px;} +.xb4 {height:2px; margin:0 1px;} + +.xboxcontent {display:block; border:0 solid #ebc13b; border-width:0 1px; background-color:#fbeec3;/*height:100%;*/} + + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.console.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.console.css new file mode 100644 index 00000000..aa774ac8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.console.css @@ -0,0 +1,71 @@ +@charset "UTF-8"; + +body{ + background-attachment: fixed; + background:url("../../img/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; + background-position: center top; + margin:0; + padding:0; +} +.coe_console_main{ + margin:0 auto; + width:1024px; + background: url("../../img/wash-white-30.png") repeat scroll 0 0 transparent; + margin: 0 auto; + padding: 15px; + overflow:hidden; +} + +.console_left{ + height: 85%; + width: 140px; + float: left; + position:fix; + padding-top: 5px; + background-color: #F5F5F5; + border: 1px solid rgba(0, 0, 0, 0.05); + border-radius: 4px 4px 4px 4px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05) inset; + min-height: 230px; + padding-left:20px; +} + +.console_right{ + min-height: 410px; + margin-left: 165px !important; + background-color: #FFFFFF; + overflow: no; +} + +.coe_console_menu{ + padding: 3px 0 3px 10px; + cursor: pointer; + font-size: 14px; + font-weight: bold; +} +.coe_console_menu img{ + padding: 0 5px; +} + +.coe_console_list{ + padding-left: 25px; + cursor: pointer; +} + +.coe_console_item{ + width: 80%; +} + +.coe_console_item:hover{ + background-color: #FADE8E !important; + color:#FA8EAA!important; +} + +.coe_console_item_select{ + background-color: #898989; + color:#FFF!important; +} + +.coe_console_item img{ + padding: 0 5px; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.console.params.button.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.console.params.button.css new file mode 100644 index 00000000..e6e8f380 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.console.params.button.css @@ -0,0 +1,28 @@ +@charset "UTF-8"; + +.coe_console_button_tips{ + text-align:right; + padding-right: 20px; +} + +.coe_console_button_table{ + border-width: 0; + margin: 0 auto; + width: 90%; +} + +.coe_console_button_table td{ + border-bottom: 1px dashed #DDDDDD; + height: 40px; +} +.coe_console_button_table input{ + width:80%; +} +.coe_console_button_table select{ + width:50%; +} +.coe_console_button_exit{ + font-size: 13px; + margin: 3px 10px; + padding: 0 10px; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.console.params.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.console.params.css new file mode 100644 index 00000000..8da673b2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.console.params.css @@ -0,0 +1,145 @@ +@charset "UTF-8"; + +.console_system_param_edit{ + background-color: #676767; + border: 1px solid #999999; + color: #EEEEEE; + cursor: pointer; + float: right; + margin: 5px; + padding: 3px; +} + +.coe_nav_item{ + margin: 5px; + padding-left: 10px; + padding-top: 10px; +} + +.coe_nav_item_name{ + font-size: 16px; + font-weight: bold; + float:left; + padding-bottom: -3px; +} + +.coe_nav_default_color{ + color: #999999; +} + +.coe_nav_item_del{ + display:none; + cursor: pointer; + display: none; + float: left; + height: 20px; + margin: 0 5px; + padding: 0 10px; + width: 20px; +} + +.coe_nav_item_impl_check{ + margin-left: 50px; + cursor: pointer; +} + +.coe_nav_slider_add{ + cursor: pointer; + float: right; + margin-right: 10px; + margin-top: -28px; +} + +.coe_nav_item_impl{ + display: none; + padding-left: 50px; +} + +.coe_nav_slider_list{ + width: 90%; +} +.coe_nav_slider_tbl{ + width: 90%; + height:30px; + +} +.coe_nav_slider_item{ + border: 1px solid #999999; + margin-bottom: 10px; + padding:10px; + line-height: 25px; +} + +.coe_nav_slider_del{ + float: right; + margin: -8px -8px 0 0; + display:none; + cursor: pointer; + float: none\0; + position: relative\0; + text-align: right\9; +} + +.coe_nav_slider_item .num{ + background-color: #666666; + color: #DDDDDD; + border: 1px solid #999999; + height: 25px; + line-height: 25px; + text-align: center; + width: 50px; + ; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + float:left; +} + +.coe_nav_slider_item .span{ + float: left; + padding-left: 20px; + padding-right: 10px; +} + +.coe_nav_slider_menu{ + border: 1px solid #999999; + height: 200px; + width: 90%; + margin: 0 auto; +} + +.coe_nav_slider_menu_button{ + height:40px; + border-bottom:1px solid #999999; + line-height: 40px; + padding-left: 10px +} +.coe_nav_slider_menu_list{ + overflow: auto; + height: 150px; + padding: 5px; +} + +.coe_nav_slider_menu_list table{ + white-space:nowrap; + background-color:#000000; +} + +.coe_nav_slider_menu_list th{ + background-color:#fff; +} + +.coe_nav_slider_menu_list td{ + background-color:#fff; + text-align: center; +} +.social_stream_font{ + color: #3366FF; + cursor: pointer; + text-decoration: underline; +} +.silder_table{ + width:90%; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.social.stream.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.social.stream.css new file mode 100644 index 00000000..b71e5392 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.social.stream.css @@ -0,0 +1,311 @@ +@charset "UTF-8"; + +.social_main{ + margin: 0 auto; + padding: 15px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); +} +.social_left{ + + margin:0 auto; + background: url("../../../../commons/js/jquery/themes/default/ui/app/appviewport2/images/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; + margin: 0 10px; + padding: 5px 10px; + min-height: 600px; +} + +.social_right{ + border: 1px solid #999999; + float: right; + height: 100%; + min-width: 300px; + min-height: 500px; + margin-left: 10px; + width: 300px; + background-color: #FFFFFF; +} + +.social_share{ + +} + +.social_share_title{ + padding: 10px 10px 5px 10px; + font-size: 150%; + font-weight: bold; + font-family: arial,sans-serif; + margin-top:5px; +} + +.social_textarea{ + border-bottom: 1px solid #999999; + margin: 0 10px; + padding-bottom: 20px; + border-radius: 0px 0px 0px 7px; +} + +.social_textarea_edit{ + display:none; +} + +.social_testarea_onlyread{ + border: 1px solid #666666; + color: #999999; + line-height: 50px; + min-height: 50px; + padding-left: 10px; + cursor: pointer; + border-radius: 7px 0px 0px 0px; +} + +.social_text{ + border: 1px solid #999999; + min-height: 50px; + border-radius: 7px 0px 0px 0px; +} +.social_editable{ + border: medium none; + cursor: text; + line-height: 18px; + margin:5px; + min-height: 16px; + overflow: hidden; + text-align: left; + width: 95%; + border: medium none; + +} + +.social_colse{ + color: #999999; + cursor: pointer; + float: right; + font-weight: bold; + display:inline; + margin-top:5px; + margin-right:5px; +} + +.social_btn{ + padding-top: 5px; + text-align: right; +} + +.social_count_area{ + color: #999999; + text-align:center; + line-height:18px; + padding:4px 10px; + vertical-align: middle; +} + +.social_count_area em{ + font-size: 20px +} + +.social_count_area err{ + font-size: 28px; + color: #E56C0A; +} + +.social_project{ + border: 1px solid #999999; +} + +.social_project_err{ + border: 1px solid #E56C0A!important; +} + +.container_filter{ + background: url("../../../../commons/js/jquery/themes/default/ui/app/appviewport2/images/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; + float: right; + margin-right: 5px; + margin-top: -8px; + cursor: pointer; +} + +.container_filter_menu{ + border: 1px solid #888888; + position: absolute; + min-width: 100px; + display:none; + width: 80px; +} + +.filter_menu_item{ + cursor: pointer; + padding: 5px 10px; +} + +.filter_menu_item:hover{ + background-color: #ddd; +} + +.filter_list_select{ + background-color: #bbb!important; +} + +.social_content{ + min-height:100px; +} + +.social_stream_item{ + background-color: #FFFFFF; + border: 1px solid #DDDDDD; + border-radius: 3px 3px 3px 3px; + margin-top: 1em; + margin-bottom: 1em; + padding: 7px; +} +.social_stream_item:hover +{ + border: 1px solid #b5b5b5; +} +.social_stream_main{ +} + +.social_stream_left{ + float:left; + margin-left: 5px; + width: 55px; +} + +.social_stream_right{ + float:left; + width:85%; +} + +.social_stream_title{ + +} + +.social_stream_legend{ + border-bottom: 1px dashed #DDDDDD; +} +.social_stream_date{ + color: #999999; +} + +.social_stream_content{ + word-wrap:break-word; + word-break:break-all; + padding: 5px 0; + margin-top:8px; + color: black; +} +.social_stream_font{ + color:#37a; + /*color: #3366FF;*/ + cursor: pointer; +} +.social_stream_font:hover{ + color:#fff; + text-decoration:none; + background:#37a; +} +.social_stream_replay_list{ + /**border: 1px solid #EDEDED;**/ + border-bottom: 0px; + background-color: #fff; +} +.social_stream_replay_item{ + /*padding: 8px; + border-bottom: 1px dashed #DDDDDD;*/ + border-bottom-color: #EDEDED; + border-bottom-style: solid; + border-bottom-width: 1px; + border-top-color: #FFFFFF; + border-top-style: solid; + border-top-width: 1px; + padding-bottom: 5px; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + position: relative; +} +.font_size{ + font-size: 13px; + font-weight: bold; +} + +.social_replay_left{ + float: left; +} + +.social_replay_right{ + /**float: left;**/ + max-width:540px; +} + +.social_replay_content{ + word-wrap:break-word; + word-break:break-all; +} +.social_replay_content span{ + word-wrap:break-word; + word-break:break-all; +} +.social_stream_replay_new{ + padding: 5px; +} +.social_replay_new_edit{ + display:none; + margin-top:8px; +} + +.social_replay_new_only{ + border: 1px solid #DDDDDD; + padding: 5px; + cursor:pointer; + color:#999 +} + +.social_replay_new_right{ + float:left; + +} +.social_replay_new_left{ + float: left; +} +.social_replay_colse{ + +} + +.social_replay_new_text{ +} +.social_replay_new_btn{ + text-align:right; +} + +.social_replay_new_area{ + + width:455px; +} + +.social_stream_get_more{ + background-color: #EEEEEE; + border: 1px solid #999999; + cursor: pointer; + padding: 10px 5px; + text-align: center; + margin-bottom: 10px; +} + +.social_stream_get_more:hover{ + background-color: #bbb!important; +} + + +.divPhoto{ + float:right; +} +.replayPhoto{ + max-width:32px; + max-height:32px; + cursor: pointer; +} +.mainPhoto{ + height: 45px; + width:45px; + cursor: pointer; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.team.create.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.team.create.css new file mode 100644 index 00000000..b24e32e0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.team.create.css @@ -0,0 +1,44 @@ +@charset "UTF-8"; + +.team_create_title{ + background-color: #333333; + color: #FFFFFF; + font-weight: bold; + height: 30px; + padding-left: 10px; + line-height: 30px; + margin-bottom:5px; +} + +.team_create_content{ + margin: 0 auto; + width: 98%; + margin-top:5px; +} + +.team_careat_button{ + float: right; + margin-right:20px; +} +.team_create_tbl_bottom{ + margin-top:5px; +} + +.team_careat_date{ + color: #999999; + float: left; + padding-left: 120px; +} + +.radius4{ + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} + +.team_careat_button .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.team.govern.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.team.govern.css new file mode 100644 index 00000000..e3d96c8d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.team.govern.css @@ -0,0 +1,234 @@ +@charset "UTF-8"; +html body { + background: url("../../img/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; + background-position: center; + background-attachment: fixed; + margin:0px; + } +@media (max-width: 979px) { + html body { + background-position: center top; + background-color: rgb(150,198,96) ; + background-attachment: fixed; + background-image: none; + margin:0px; + } +} + +@media (min-width: 980px) { + html body { + background: url("../../img/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; + background-position: center top; + background-attachment: fixed; + margin:0px; + } +} + +div.graph { + width: 400px; + height: 320px; +} +.coe_team_stat_dime_more{ + float:right; +} +.coe_team_gover{ + margin: 0 auto; + padding: 15px; + overflow-x:hidden; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); +} + +.coe_team_gover_left{ + float:left; + width:200px; + +} +.coe_team_gover_content{ + width:705px; + float:left; + border: 1px solid #999999; + border-radius: 4px 4px 4px 4px; + padding:0 0 5px 5px; +} + + +.coe_team_column{ + float: left; +} +.coe_team_menu{ + padding: 3px 0 3px 10px; + cursor: pointer; + font-size: 14px; + font-weight: bold; + +} + +.coe_team_menu img{ + padding: 0 5px; + +} + +.coe_team_count{ + +} + +.coe_team_list{ + padding-left: 25px; + width:80%; +} + +.coe_team_user_item{ +} + +.coe_team_user_item_img{ + vertical-align: middle; + width: 40px; +} + +.coe_team_content{ + margin: 0 auto; + padding:5px; +} + +.coe_team_info_title{ + font-weight: bold; + font-size: 13px; + line-height: 18px; + padding-left:8px; + margin-bottom:5px; +} +.coe_team_info_title span{ + margin-left:5px; + display:none; + cursor:pointer; +} + +.coe_team_info{ + min-height: 400px; +} + + +.coe_team_govern_dimension_title{ + color:#5DB0E6; + height: 30px; + line-height: 30px; +} + +.coe_team_govern_dimension_title_item{ + padding: 0 10px; + cursor:pointer; +} + +.coe_team_govern_dimension_title_item_select{ + font-weight: bold; +} + +.coe_team_govern_dimension_item{ + border: 1px solid #D3D3D3; + border-radius: 4px 4px 4px 4px; + margin-top: 5px; + background-color: #FFFFFF; + +} +.govern_dimension_has_left{ + float: left; + min-height: 120px; + padding: 10px; + width:210px + word-break: break-all; +} +.govern_dimension_has_user_photo{ + +} +.govern_dimension_has_user_info{ + padding-top:5px; +} + +.govern_dimension_has_user_name{ + font-size: 18px; + font-weight: bold; + margin:5px 0; +} +.govern_dimension_has_user_depa{ + +} +.govern_dimension_has_user_mobile{ +} +.govern_dimension_has_user_email{ +} +.govern_dimension_has_right{ + /* border-left: 1px solid #D3D3D3;*/ + border-radius: 4px 4px 4px 4px; + float: right; + padding: 5px; + width:460px; + margin:0 auto; +} +.govern_dimension_NotSet{ + padding:5px; +} + +.govern_dimension_item_title{ + border-bottom: 1px dotted #999999; + font-weight: bold; + line-height: 30px; + padding-left: 10px ; +} +.govern_dimension_item_title span{padding-right:10px;} +.govern_dimension_item_title label{display: inline-block;vertical-align: middle;} +.govern_dimension_item_title input{vertical-align: middle;margin: 2px !important;float:left;} +.coe_team_govern_dimension_process_item{ + background-color: #F5F5F5; + border-radius: 4px 4px 4px 4px; + margin-top: 5px; +} +.dimension_process_item_process_name{ + height: 30px; + line-height: 30px; + padding-left: 8px; +} +.dimension_process_item_console{ + float: right; +} + +.dimension_process_item_console span{ + padding: 0 5px; +} + +.dimension_process_item_admin_title{ + padding: 10px; +} + +.dimension_process_item_admin { + width: 460px; +} + +.dimension_process_item_admin img{ + padding: 5px; + width: 45px; + height: 45px; +} + +.govern_dimension_notSet_black{ + width:397px; + padding: 0px 5px 0 0; + float:left; +} +.coe_team_info_edit{ + min-height:500px; + display:none; +} +.coe_team_info_read{ + min-height:380px; + border: 1px solid #D3D3D3; + border-radius: 4px 4px 4px 4px; + padding:10px; + background-color: #FFFFFF; +} +.coe_team_content-tbl { + background: none repeat scroll 0 0 #FFFFFF; + border: 1px solid #B5B5B5; + height: 30px; + line-height: 29px; + border-radius: 4px 4px 4px 4px; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.team.process.group.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.team.process.group.css new file mode 100644 index 00000000..0dc57623 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.team.process.group.css @@ -0,0 +1,286 @@ +@charset "UTF-8"; + +body{ + margin: 0; + padding: 0; +} + +.team_process_group{ + /*height: 100%;*/ + margin: 0 auto; + width: 100%; +} + +.team_process_group_list{ + overflow: auto; +} + +.team_process_group_item{ + background-color: #AAAAAA; + border: 1px solid; + float: left; + font-weight: bold; + height: 50px; + line-height: 50px; + margin: 5px; + min-width: 150px; + text-align: center; + cursor: pointer; +} + +.team_process_group_add{ + background-color: #999999; + bottom: 0; + height: 30px; + line-height: 30px; + position: absolute; + text-align: center; + width: 100%; + cursor: pointer; +} + +.team_process_dimension{ + background-color: #333333; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} + +.team_process_dimension_content{ + overflow: auto; + padding: 5px; + +} +.team_process_dimension_content_fieldset{ + height: 96%; + padding: 0; +} +.team_process_dimension_exit{ + background-color: #AAAAAA; + color: #444444; + height: 40px; + line-height: 40px; + text-align: center; + cursor: pointer; +} +.team_process_dimension_left{ + background-color: #FFFFFF; + padding: 0 5px; + float: left; + height: 100%; +} + +.team_process_dimension_right{ + background-color: #FFFFFF; + float: right; + height: 100%; + width: 150px; +} +.team_process_dimension_process_list{ + height: 50%; +} +.team_process_dimension_process_list_content{ + height: 90%; + width: 100%; + overflow: auto; +} + +.team_process_dimension_process_list_content_over{ + background-color: #FFFFCD !important; +} + +.team_process_dimension_process_item{ + background-color: #AAAAAA; + border: 1px solid #444444; + float: left; + margin: 5px; + min-width: 150px; + padding: 5px; + cursor:pointer; +} + +.team_process_all{ + height: 50%; +} + +.team_process_all_content{ + height: 90%; + width: 100%; + overflow: auto; +} + +.team_process_all_content legend{ + font-size: 13px; + padding: 0 20px; +} + +.team_process_all_item{ + float:left; + background-color: #DDDDDD; + border: 1px solid #999999; + float: left; + margin: 5px; + min-width: 150px; + padding: 5px; + cursor:pointer; +} + +.team_process_all_item_exist{ + text-decoration:line-through; + border:1px #FF0000 solid; +} + +.team_process_dimension_list{ + height: 100%; + margin: 0 2px; + overflow: auto; + width: 140px; +} + +.team_process_dimension_item{ + background-color: #666666; + border: 1px solid #999999; + float: left; + margin: 5px 0; + min-width: 134px; + padding: 10px 2px; + cursor: pointer; +} + +.team_process_dimension_item_over{ + background-color: #8BB5DC !important; +} + +.team_process_all_event{ + cursor:pointer; +} + +.team_process_dimension_process_delete{ + border: 1px solid #999999; + height: 30px; + line-height: 30px; + margin: 2px; + width: 144px; + text-align: center; + color: #AAAAAA; + +} + +.team_process_dimension_process_delete img{ + height: 20px; + margin: -2px 5px 0; + vertical-align: middle; +} + +.team_process_dimension_process_delete_over{ + background-color: #BCD6AA !important; + +} + +.team_process_create_dimension{ + background-color: #EEEEEE; + border: 1px solid #999999; + height: 300px; + margin-top: 3px; +} + +.team_process_create_dimension_exit{ + background-color: #AAAAAA; + color: #444444; + height: 30px; + line-height: 30px; + text-align: center; + cursor: pointer; +} + +.team_process_create_dimension_content{ + height: 270px; +} + +.team_process_create_dimension_left{ + float: left; + height: 95%; + padding: 5px 0 0 5px; + width: 58%; +} + +.team_process_create_dimension_right{ + float: right; + padding: 5px 5px 5px 0; + width: 39%; +} + +.team_process_create_dimension_type{ + width:80%; + margin: 10px 0 0 10px; +} + +.team_process_create_dimension_group_list{ + overflow: auto; + margin: 0 auto; + width: 95%; + height: 90%; + padding-top: 5px; +} + +.team_process_create_dimension_group_item{ + background-color: #AAAAAA; + border: 1px solid #666666; + float: left; + margin: 5px; + padding: 5px 10px; + cursor:pointer; +} + +.team_process_create_dimension_group_item_select{ + background-color: #3995DA!important; + border-color: #FC6!important; +} + +.team_process_create_dimension_group_add{ + background-color: #AAAAAA; + border: 1px solid #666666; + float: left; + margin: 5px; + padding: 5px 10px; + cursor:pointer; +} + +.team_process_create_dimension_group{ + margin: 10px; + width: 80%; +} + +.team_process_create_area{ + display:none; + height: 60px; + padding-bottom: 10px; +} + +.team_process_create_dimension_group_list_error{ + background-color: #EAFAC4; +} + +.team_process_create_error{ + background-color: #EAFAC4; + display: none; + float: left; + height: 50px; + line-height: 23px; + padding: 3px; + text-align: left; + width: 60%; +} +/* +.clear{ + clear:both; +} + +.opacity8{ + filter:alpha(opacity=80); + -moz-opacity:0.8; + -khtml-opacity: 0.8; + opacity: 0.8; +}*/ \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.team.welcome.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.team.welcome.css new file mode 100644 index 00000000..09e2d1c3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/coe.team.welcome.css @@ -0,0 +1,76 @@ +@charset "UTF-8"; +html body { + background: url("../../img/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; + background-position: center; + background-attachment: fixed; + margin:0px; + } +.coe_team_welcome{ + margin: 0 auto; + padding: 15px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); +} + + +.coe_team_welcome_left{ + float:left; + width:200px; + +} +.coe_team_welcome_content{ + min-width:710px; + max-width:710px; + float:left; + margin-left:5px; + margin-right:5px; + border: 1px solid #999999; + border-radius: 4px 4px 4px 4px; + background-color: #FFFFFF; +} +.coe_team_welcome_content2{ + width:770px; + float:left; + margin-left:5px; + margin-right:5px; + border: 1px solid #999999; + border-radius: 4px 4px 4px 4px; + background-color: #FFFFFF; + word-break: break-all +} +.coe_team_welcome_right{ + width:200px; + float:right; +} +div.graph { + width: 190px; + height: 140px; +} + +.coe_team_user_item_img{ + vertical-align: middle; + width: 40px; +} +.coe_team_admin_item{ + color:#FF0000; +} + +.coe_team_social{ + margin: 0 10px; + padding: 0 10px; +} + +.coe_team_pie_title{ + font-weight: bold; + padding: 5px 5px 10px; +} + +.coe_team_alarm_title{ + font-weight: bold; + padding: 5px 5px 10px; +} +.coe_team_stat_dime_more{ + float:right; + margin-top:-25px; + margin-right:3px; + line-height: 26px; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/main.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/main.css new file mode 100644 index 00000000..527b802f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/main.css @@ -0,0 +1,128 @@ +@charset "UTF-8"; + +body{ + margin: 0; + min-width: 960px; + padding: 0; + background-color: #FEFEFE; + overflow-x:hidden; +} + +.header{ + position: fix; + width: 100%; + z-index: 1; +} + + +.nav_portal_photo{ + width:20px; + height:20px; + vertical-align:middle; +} + + +.nav_header_bottom { + background-color: #808080; + border-top: 1px solid #555; + height: 5px; + display:none; +} + +.nav_slider{ + line-height: 33px; + height: 33px; + width:100%; + margin-left:0px; + text-align:center; + background-color:#E6E6E6; +} + +.nav_slider_button{ + min-width: 100px; + padding:2px 0px 2px; +} + +.nav_slider_main{ + color: black; + font-size:15px; + width:960px; + margin:0px auto; + padding:0px; + text-align:left; +} + +.nav_slider_main .slider_item{ + cursor: pointer; + padding: 4px; + border-radius: 4px 4px 4px 4px; + margin: 0 3px; +} + +.nav_slider_main .slider_item:hover{ + background-color: rgb(194, 194, 207); + color: #ffffff; +} +.slider_item span img{width:24px;height:21px;} + +.slider_item_select{ + color: #FFFFFF; + background-color: rgb(136, 136, 150); +} + +.nav_slider_main .slider_icon{ + margin-right: 3px; + margin-top: -3px; + vertical-align: middle; +} + +.nav_slider_title{ + float:left; + margin-left: 90px; + margin-right: 20px; +} +.content{ + width:100%; + border: 0 none; +} + + +.dock { + background-color: #FFFFFF; + border-bottom: 1px solid #999999; + border-bottom-left-radius: 3px; + border-left: 1px solid #999999; + box-shadow: 0 0 8px #888888; + height: auto; + position: fixed; + right: 0; + + right:20px; +} + +.dock div { + + cursor: pointer; + height: 32px; + margin: 5px; + width: 32px; +} +.dock div.active { + background-color: #E5E5E5; + box-shadow: 0 1px 3px #666666 inset; +} + +.dock span { + display: block; + height: 8px; +} +.nav-button_default{ + background: url("../../img/config.png") no-repeat scroll 0 0 transparent; +} +.nav-button_default2{ + background: url("../../img/classify.png") no-repeat scroll 0 0 transparent; +} +.awsLogo{font-size: 21px !important;} +.awsLogo span{font-size: 12px;vertical-align: top;font-weight:normal;} +.fastLeft{padding-left:24px !important;background: url("../../img/fastLeft.png") no-repeat scroll 4px transparent;} +.fastRight{padding-left:24px !important;background: url("../../img/fastRight.png") no-repeat scroll 4px transparent;} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/pqgrid.min.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/pqgrid.min.css new file mode 100644 index 00000000..0ea4d1f1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/pqgrid.min.css @@ -0,0 +1,9 @@ +/** + * ParamQuery Grid a.k.a. pqGrid v1.1.3 + * + * Copyright (c) 2012-2013 Paramvir Dhindsa + * Released under GPL v3 license + * http://paramquery.com/license + * + */ +div.pq-grid{font-family:Tahoma;font-size:11px;overflow:hidden;position:relative}div.pq-grid *{font-family:Tahoma;font-size:11px;margin:0;padding:0;line-height:normal}div.pq-grid *:focus{outline:1px dotted gray}div.pq-grid-top{border-width:0}div.pq-grid-title{border-bottom:1px solid #c5c5c5;zoom:1;padding:5px;overflow:hidden}div.pq-grid-toolbar{border-top:1px solid #fff;border-bottom:1px solid #c5c5c5;padding:3px 5px 4px;zoom:1;overflow:hidden}div.pq-grid-toolbar .ui-button{margin:0 4px}div.pq-grid div.draggable{cursor:move}div.pq-grid-bottom{border-top:1px solid #c5c5c5;border-top-width:0;position:relative}div.pq-grid-footer{border-top:1px solid #fff;padding:2px 5px 2px;overflow:hidden;position:relative}div.pq-grid-inner{position:relative;width:100%;overflow-x:hidden;overflow-y:hidden}div.pq-grid-right{position:relative;overflow:hidden;display:block}div.pq-header-outer{position:relative;border-width:0;overflow:hidden;width:100%;z-index:1}.pq-grid span.pq-grid-header{position:absolute;top:-2px;cursor:default;display:inline-block;overflow:hidden;border-width:0}.pq-grid-header .pq-col-sort-asc .pq-col-sort-icon{padding-right:16px;height:16px;width:16px;BACKGROUND:url(images/sort_asc.gif) no-repeat right 6px}.pq-grid-header .pq-col-sort-desc .pq-col-sort-icon{padding-right:16px;BACKGROUND:url(images/sort_desc.gif) no-repeat right 6px}.pq-grid-col-resize-handle{cursor:w-resize;display:block;width:20px;height:22px;background:;z-index:2;position:absolute;top:0}.pq-grid-drag-bar{position:absolute;width:1px;z-index:100;top:0;background-color:#000}div.pq-grid .pq-align-right{text-align:right}div.pq-grid .pq-align-right *{text-align:right}div.pq-grid .pq-align-center{text-align:center}div.pq-grid .pq-align-center *{text-align:center}div.pq-cont-right{position:relative;overflow:hidden;border-width:0}div.pq-cont{overflow:hidden;border-top:0;width:100%;position:relative}.pq-grid .pq-cont .ui-state-hover{font-weight:normal}table.pq-grid-table{border-spacing:0;table-layout:fixed;width:0;position:relative;top:0;margin-top:-1px}table.pq-grid-header-table{table-layout:fixed;width:0;border-spacing:0}table.pq-grid-header-table div.pq-grid-header-table-div{padding:5px}div.pq-grid-header_ddn_icon{position:absolute;top:0;width:16px;height:100%;border-left:1px solid #fff;background:url('images/ddn.png') no-repeat 40% 45%}div.pq-grid-header_ddn_icon_bg{display:none;position:absolute;top:0;width:17px;height:100%;border-left:1px solid #ccc;background:url('images/column-header-bg.png');text-align:left!important}div.ui-resizable-handle{z-index:1}.pq-grid td.pq-grid-col{overflow:hidden;border-width:0;border-right:1px solid #cfcfcf;border-top:1px solid #cfcfcf}td.pq-grid-number-col{border-right:1px solid #cfcfcf}.pq-grid .pq-col-drag-helper{border:1px solid steelblue;background:#fff;padding:3px}.pq-grid .pq-col-drag-helper .pq-drag-icon{background:url("images/cross.png");height:16px;width:16px;margin-right:5px;margin-bottom:-3px;display:inline-block}.pq-grid .pq-drag-accept .pq-drag-icon{background:url("images/tick.png")}.pq-grid td.pq-drop-hover{background:#fff;background-image:url("")}tr.pq-row-hidden{visibility:hidden;height:1px}td.pq-grid-cell{overflow:hidden;padding:0;vertical-align:top}td div.pq-td-div{padding:4px 5px}.pq-wrap-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}table.pq-grid-td-border-right td.pq-grid-cell{border-right:1px solid #d0d0d0}table.pq-grid-td-border-bottom td.pq-grid-cell{border-bottom:1px solid #ededed}div.pq-cell-selected-border{border:1px solid #ccc;position:absolute;padding:0}div.pq-cell-selected-border-edit{background:#fff;color:#333}div.pq-grid-editor-default{background:#fff;padding:2px}tr td.pq-grid-number-cell{border-right:1px solid #9eb6ce;cursor:pointer}.pq-grid td.pq-grid-number-cell{border-top:0;border-left:0}tr td.pq-last-freeze-col{border-right:1px solid steelblue}div.pq-grid-disable{height:100%;width:100%;position:absolute;left:0;top:0;background:#ccc;z-index:3}div.pq-loading{height:100%;width:100%;position:absolute;left:0;top:0;display:none}div.pq-loading div.pq-loading-bg{background:#ccc;height:100%;width:100%;position:absolute;left:0;top:0}div.pq-loading-mask{width:100px;height:25px;padding:5px;position:absolute;left:50%;top:50%;margin-left:-50px;margin-top:-13px}.pq-grid div.pq-loading-mask div{padding-top:0;padding-right:6px;padding-left:29px;line-height:23px;background-image:url("images/loading.gif");background-position:6px center;background-repeat:no-repeat}div.pq-vscroll{height:150px;width:17px;border:0 solid blue;position:absolute;right:0;bottom:17px}div.pq-hscroll{height:17px;border:0 solid blue;position:absolute;right:17px;bottom:0}div.pq-hvscroll-square{height:17px;width:17px;border:0 solid blue;position:absolute;right:0;bottom:0}.pq-tree-icon-container{position:relative;float:left;height:16px}.pq-tree-icon{cursor:pointer;position:absolute;width:18px;height:16px;right:0;top:-2px}div.pq-grid tr td.pq-grid-cell-hover{border-width:0}div.pq-grid tr td.pq-cell-select{word-break: break-all;border-top-width:0;border-left-width:0}.pq-pager{padding:2px 5px 13px;overflow:hidden;vertical-align:middle}.pq-pager *{vertical-align:middle}.pq-grid span.pq-separator{height:18px;border-left:1px solid #ccc;border-right:1px solid #fff;display:inline-block;margin-right:5px}.pq-pager input{padding:0 1px;text-align:center;width:35px;margin-right:5px;height:16px}div.pq-pager span,div.pq-pager select{margin-right:5px}.pq-pager .pq-pageholder{vertical-align:top}.pq-grid button.ui-button-icon-only{height:22px;width:22px;margin-right:5px;padding:.2em .2em}.pq-grid .ui-state-default .pq-page-first{background:url('images/page-first-gray.gif')}.pq-grid .ui-state-default .pq-page-prev{background:url('images/page-prev-gray.gif')}.pq-grid .ui-state-default .pq-page-next{background:url('images/page-next-gray.gif')}.pq-grid .ui-state-default .pq-page-last{background:url('images/page-last-gray.gif')}.pq-grid .ui-state-default .pq-refresh{background:url('images/refresh.gif')}.pq-scrollbar-vert{display:block;width:17px;background:#efefef url(images/vert-bg.png)}.pq-scrollbar-horiz{display:block;height:17px;background:#efefef url(images/horiz-bg.png)}.pq-scrollbar-vert *{padding:0;margin:0}.pq-scrollbar-horiz *{padding:0;margin:0}.pq-sb-btn{width:17px;height:17px;position:absolute;background-color:steelblue}.pq-scrollbar-vert div.top-btn{left:0;top:0;background:url(images/sprite.png)}.pq-scrollbar-horiz div.left-btn{left:0;top:0;background:url(images/sprite.png) -34px}.pq-scrollbar-vert div.bottom-btn{left:0;bottom:0;background:url(images/sprite.png) -17px}.pq-scrollbar-horiz div.right-btn{top:0;right:0;background:url(images/sprite.png) -51px}.pq-sb-slider{position:absolute}.pq-sb-slider *{background:url(images/sprite.png)}.pq-sb-slider-h{position:absolute}.pq-sb-slider-h *{display:inline-block;background:url(images/sprite.png)}.pq-sb-slider .vert-slider-top{width:17px;height:3px;overflow:hidden;background-position:17px -8px}.pq-sb-slider-h .horiz-slider-left{height:17px;width:3px;overflow:hidden;background-position:-68px 0}.pq-sb-slider .vert-slider-bg{width:17px;overflow:hidden;background:#b6cefb url(images/vert-slider-bg.png)}.pq-sb-slider-h .horiz-slider-bg{height:17px;overflow:hidden;background:#b6cefb url(images/horiz-slider-bg.png)}.pq-sb-slider .vert-slider-center{width:17px;height:8px;overflow:hidden;background-position:17px 0}.pq-sb-slider-h .horiz-slider-center{height:17px;width:8px;overflow:hidden;background-position:-74px 0}.pq-sb-slider .vert-slider-bottom{width:17px;height:3px;overflow:hidden;background-position:17px -11px}.pq-sb-slider-h .horiz-slider-right{height:17px;width:3px;overflow:hidden;background-position:-71px 0} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/public.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/public.css new file mode 100644 index 00000000..4454a309 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/default/public.css @@ -0,0 +1,656 @@ +@charset "UTF-8"; +body, html { + margin: 0px; + padding: 0px; +} +/*button start*/ +.button { + font-size: 13px; + font-weight: 500; + line-height: 18px; + min-width: 70px; + display: inline-block; + text-align: center; + cursor: pointer; + text-decoration:none; + + border: 1px solid #787878; + +} +.button.default { + color: white!important; + text-shadow: rgba(0, 0, 0, 0.2) 1px 1px 0; + background-color: #2179D1 8%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ABABAB',endColorstr='#454545',GradientType=0); + background-size: 100%; + background-image: -webkit-linear-gradient(top,#ABABAB,#CDCDCD 8%,#454545); + background-image: -moz-linear-gradient(top,#ABABAB,#CDCDCD 8%,#454545); + background-image: -o-linear-gradient(top,#ABABAB,#CDCDCD 8%,#454545); + background-image: -ms-linear-gradient(top,#ABABAB,#CDCDCD 8%,#454545); + background-image: linear-gradient(top,#ABABAB,#CDCDCD 8%,#454545); +} +.button.default:hover { + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ABABAB',endColorstr='#545454',GradientType=0); + background-size: 100%; + background-image: -webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ABABAB),color-stop(8%,#CDCDCD),color-stop(100%,#545454)); + background-image: -webkit-linear-gradient(top,#ABABAB,#CDCDCD 8%,#545454); + background-image: -moz-linear-gradient(top,#ABABAB,#CDCDCD 8%,#545454); + background-image: -o-linear-gradient(top,#ABABAB,#CDCDCD 8%,#545454); + background-image: -ms-linear-gradient(top,#ABABAB,#CDCDCD 8%,#545454); + background-image: linear-gradient(top,#ABABAB,#CDCDCD 8%,#545454); +} +.button.default:active { + background-color: #CDCDCD; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#545454',endColorstr='#CDCDCD',GradientType=0); + background-size: 100%; + background-image: -webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#545454),color-stop(100%,#CDCDCD)); + background-image: -webkit-linear-gradient(top,#545454,#CDCDCD); + background-image: -moz-linear-gradient(top,#545454,#CDCDCD); + background-image: -o-linear-gradient(top,#545454,#CDCDCD); + background-image: -ms-linear-gradient(top,#545454,#CDCDCD); + background-image: linear-gradient(top,#545454,#CDCDCD); +} + +.button.blue { + color: white!important; + border-color: #3995DA; + text-shadow: rgba(0, 0, 0, 0.2) 1px 1px 0; + background-color: #2179D1 8%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#74c5f6',endColorstr='#227fdf',GradientType=0); + background-size: 100%; + background-image: -webkit-linear-gradient(top,#74c5f6,#55b4f4 8%,#227fdf); + background-image: -moz-linear-gradient(top,#74c5f6,#55b4f4 8%,#227fdf); + background-image: -o-linear-gradient(top,#74c5f6,#55b4f4 8%,#227fdf); + background-image: -ms-linear-gradient(top,#74c5f6,#55b4f4 8%,#227fdf); + background-image: linear-gradient(top,#74c5f6,#55b4f4 8%,#227fdf); +} +.button.blue:hover { + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#74c5f6',endColorstr='#1d72ca',GradientType=0); + background-size: 100%; + background-image: -webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#74c5f6),color-stop(8%,#55b4f4),color-stop(100%,#1d72ca)); + background-image: -webkit-linear-gradient(top,#74c5f6,#55b4f4 8%,#1d72ca); + background-image: -moz-linear-gradient(top,#74c5f6,#55b4f4 8%,#1d72ca); + background-image: -o-linear-gradient(top,#74c5f6,#55b4f4 8%,#1d72ca); + background-image: -ms-linear-gradient(top,#74c5f6,#55b4f4 8%,#1d72ca); + background-image: linear-gradient(top,#74c5f6,#55b4f4 8%,#1d72ca); +} +.button.blue:active { + background-color: #55B4F4; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#1d72ca',endColorstr='#55b4f4',GradientType=0); + background-size: 100%; + background-image: -webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#1d72ca),color-stop(100%,#55b4f4)); + background-image: -webkit-linear-gradient(top,#1d72ca,#55b4f4); + background-image: -moz-linear-gradient(top,#1d72ca,#55b4f4); + background-image: -o-linear-gradient(top,#1d72ca,#55b4f4); + background-image: -ms-linear-gradient(top,#1d72ca,#55b4f4); + background-image: linear-gradient(top,#1d72ca,#55b4f4); +} + +/* button end*/ + +/*public +.clear{ + clear: both; + height: 1px; + margin-top: -1px; + overflow: hidden; +}*/ + + +.clear{ + clear: both; + height: 1px; + margin-top: -1px; + overflow: hidden; +} + +.radius5{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; +} +.radius3{ + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} + +.opacity8{ + filter:alpha(opacity=80); + -moz-opacity:0.8; + -khtml-opacity: 0.8; + opacity: 0.8; +} + +.center{ + margin: 0 auto; +} + + + +.link_b { + font-weight: bold; +} + +a { + color: #3366CC; + cursor: pointer; + font-family: Arial,Helvetica,sans-serif; + font-size: 13px; + text-decoration: none; +} + +.coe_cms{ + -moz-border-bottom-colors: none; + -moz-border-image: none; + -moz-border-left-colors: none; + -moz-border-right-colors: none; + -moz-border-top-colors: none; + border-color: #E8E8E8 #E8E8E8 #CCCCCC; + border-radius: 4px 4px 4px 4px; + border-style: solid; + border-width: 1px; + margin-bottom: 5px; + min-height: 200px; + background-color: #FFFFFF; +} + +.coe_cms h5{ + background-color: #F5F5F5; + color: #7B7B7B; + font-family: helvetica; + font-weight: normal; + line-height: 26px; + margin: 0; + padding-left: 5px; +} +.coe_cms_content{ + font-size:11px; + font-family: helvetica; + font-weight: normal; + margin-top:3px; +} +/*用户*/ +.icon_user{ + background:url('../../../aws_img/user6.gif') no-repeat; +} +.icon_add{ + background:url('../../../aws_img/add.gif') no-repeat; +} +.icon_remove{ + background:url('../../../aws_img/Delete.gif') no-repeat; +} +.icon_save{ + background:url('../../../aws_img/save.gif') no-repeat; +} +.icon_enter{ + background:url('../../../aws_img/user6.gif') no-repeat; +} +.icon_cancal{ + background:url('../../../aws_img/undo_edit.gif') no-repeat; +} +.icon_language{ + background:url('../../../aws_img/org_securitys.gif') no-repeat; +} +.icon_config{ + background:url('../../../aws_img/config_item.gif') no-repeat; +} +.icon_rename1{ + background:url('../../../aws_img/rename.png') no-repeat; +} +.icon_edit{ + background:url('../../../aws_img/edit.gif') no-repeat; +} +.icon_next_step{ + background:url('../../../aws_img/navdown.gif') no-repeat; +} +.icon_up_step{ + background:url('../../../aws_img/navup.gif') no-repeat; +} +.icon_process{ + background:url('../../../aws_img/process.gif') no-repeat; +} +.icon_admin{ + background: url("../../aws_css/coe/images/admin.gif") no-repeat scroll 50% 50% transparent; +}.fixedToolbar{ + background:#F2F2F2; + z-index:2008; + position:fixed; + left:0px; + width:100%; + top:0px; +} +.fixedToolbar2{ + background:#F2F2F2; + z-index:2008; + left:0px; + width:100%; + top:0px; + position:fixed; + + } + #help { + margin: 0; + border: 0; + padding: 0; + clear: both; + float: none; + font-size: 1px; +} +.fixedToolbar1{ + background:#F2F2F2; + position:fixed; + width:166px; +} +/*列表选择样式*/ + +.componentTypSelect { + width:393px; + font-weight: normal; + font-family:"Arial", "Arial", "Helvetica", "sans-serif"; + font-size: 12px; +} +.componentFixedToolbar{ + background:#ffffff; + z-index:2008; + position:fixed; + left:0px; + width:100%; + top:0px; +} + +.draggableDiv{ + width:96px; + height:56px; + /*padding:0px;*/ + text-align:center; + line-height:56px; + /*border: 1px solid #D3D3D3;*/ + border-radius: 5px 5px 5px 5px; + font-size: 12px; + overflow: hidden; + cursor:pointer; + margin:0 auto; + + word-break:break-all ; +} +.draggableDivGray{ + /*background: url("../../img/wf_WorkFlow_Coe_Language_Dimension_Draggable1.gif") repeat-x scroll 0 0 #A39263;*/ + background: url("../../img/Draggable11.gif") +} +.draggableDivBlue{ + /*background: url("../../img/wf_WorkFlow_Coe_Language_Dimension_Draggable2.gif") repeat-x scroll 0 0 #98CBFE;*/ + background: url("../../img/Draggable22.gif"); + +} +.draggableDivPink{ + /*background: url("../../img/wf_WorkFlow_Coe_Language_Dimension_Draggable2.gif") repeat-x scroll 0 0 #98CBFE;*/ + background: url("../../img/Draggable44.gif"); + +} + +.draggableTable{ + width:116px; + height:70px; + vertical-align:middle; + text-align:center; + border-right:#D3D3D3 solid 2px; + padding:0px; + margin:0px auto; +} +.draggableClick{ + border: 4px solid #AFC873; + width:94px; + height:54px; + /*background: url("../../img/Draggable3.gif");*/ +} +.projectListImg{ + width:29px; + height:34px; + background: url("../../../aws_img/wf_document/icon.gif") 50% 50% no-repeat; + +} + +.t1 { + color: #2B5C8D; + font-size: 14px; + font-weight: bold; +} +.t2 { + color: #999999; + font-size: 12px; + height: 20px; + line-height: 20px; +} + + +/*Tree图标icon样式*/ +.icon-tree-nodes-root { + background: url("../../../aws_img/left_blue/img/base.gif") repeat scroll 0 0 transparent !important; +} + +.icon-tree-nodes-group { + background: url("../../../aws_img/profile2.gif") repeat scroll 0 0 transparent !important; +} + +.icon-tree-nodes-group2 { + background: url("../../img/tree_nodes_group.gif") no-repeat scroll 50% 50% transparent !important; +} +.icon-tree-nodes-dimension { + background: url("../../../aws_img/process.group.gif") repeat scroll 0 0 transparent !important; +} +.icon-tree-nodes-dimension2 { + background: url("../../img/tree_nodes_dimension.gif") no-repeat scroll 50% 50% transparent !important; +} +.icon-tree-nodes-process { + background: url("../../../aws_img/process.def.gif") repeat scroll 0 0 transparent !important; +} +.icon-tree-nodes-process2 { + background: url("../../img/tree_nodes_process.gif") no-repeat scroll 50% 50% transparent !important; +} + +.bestAdminister{ + width:200px; +} + +.project_dialog_bg{ + background: url("../../img/dialog_bg2.jpg") repeat-x scroll left top #DBDBDB; +} + +.project_dialog_line_spacing{ + background: url("../../img/dialog_line2.jpg") repeat-x scroll left top #DBDBDB; +} + +.linkUP{ + border-top :2px double #f00; +} +.likeDown{ + border-bottom:2px double #f00; +} +.likeRight{ + border-right:2px double #f00; +} +.likeLeft{ + border-left:2px double #f00; +} +.awsTagedit{ + border: 0px; + width: 100%; + text-align:center; + padding-top:0px; + float:right; + font-size:12px; +} +.awsTageditTd{ + padding:0px 2px; + margin:0px; +} + +.selectTagedit{ + background: #F9F9C5 url(tageditImg/disc.png) 4px center no-repeat; + border: 1px solid #CAD8F3; + padding: 1px 0 1px 1px; + -moz-border-radius: 8px 4px 4px 8px; + -webkit-border-radius: 8px 4px 4px 8px; + border-radius: 8px 4px 4px 8px; + text-align:center; + width: 90px; +} +.doSelectTagedit{ + border: 1px solid #e0a949; + background-color: #FBEC88; + width: 90px; +} + +.layoutRegionNorth{ + height:30px; + text-align:right; + background-color: #F5F4F2; + background: url("../../aws_js/jquery/jquery-easyui-1.2.2/themes/default/images/panel_title.gif") repeat-x scroll 0 0 transparent; + +} +.processListDesc{ + color: #888888; + font-family: Verdana,Arial,Helvetica,sans-serif; + font-size: 12px; + padding-left: 2px; +} + +.processListBorder{ + border: 1px solid #8AAED2; + -moz-border-radius: 8px 4px 4px 8px; + -webkit-border-radius: 8px 4px 4px 8px; + border-radius: 8px 4px 4px 8px; +} + +.aws-dialog-title{ + background-color: #E8EFF4; + border-left: 1px solid #FFFFFF; + border-right: 1px solid #FFFFFF; + border-top: 1px solid #FFFFFF; + height: 29px; + overflow: hidden; + width:100%; + height:28px; + padding:0px; + margin:0px; +} + +.aws-dialog-button-colse{ + background-image: url("images/aws-dialog.gif"); + background-position: 0 0; + cursor: pointer; + float: right; + font-size: 0; + height: 13px; + line-height: 0; + margin: 0 4px 0 0; + overflow: hidden; + width: 13px; +} + +.aws-dialog-button-colse-hover{ + background-position: -13px 0; +} + +.aws-dialog-title-content { + color: #333333; + font-size: 16px; + font-weight: bold; + height: 21px; + line-height: 15px; + overflow: hidden; + padding: 0 0 0 8px; +} + +/*取消按钮*/ +.btn-gray-big{ + font: 12px 'Lucida Grande', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; + display: inline-block; + height: 40px; + padding-right: 10px; + text-decoration:none; + background: transparent url(images/btn_biggrey_right.png) 100% 0 no-repeat; +} +.btn-gray-big span { + cursor:pointer; + display: block; + padding: 10px 16px 11px 25px; + font-size: 16px; + color: #6F6F6F; + text-shadow: 0 1px white; + background: transparent url(images/btn_biggrey_left.png) 0 0 no-repeat; +} + +.btn-gray-big:hover{ + text-decoration:none; + background: transparent url(images/btn_biggrey_right_hover.png) 100% 0 no-repeat; +} +.btn-gray-big span:hover{ + background: transparent url(images/btn_biggrey_left_hover.png) 0 0 no-repeat; +} +/*下一步*/ +.btn-next{ + display: inline-block; + height: 40px; + padding-right: 15px; + text-decoration:none; + background: transparent url(images/btn_next_right.png) 100% 0 no-repeat; +} +.btn-next span { + cursor:pointer; + display: block; + padding: 10px 18px 11px 30px; + font-size: 16px; + color: white; + text-shadow: 0 1px #448BD8; + background: transparent url(images/btn_next_left.png) 0 0 no-repeat; +} +.btn-next:hover{ + text-decoration:none; + background: transparent url(images/btn_next_right_hover.png) 100% 0 no-repeat; +} +.btn-next:hover span{ + background: transparent url(images/btn_next_left_hover.png) 0 0 no-repeat; +} + +/*上一步*/ +.btn-prev{ + display: inline-block; + height: 40px; + padding-left: 15px; + text-decoration:none; + background: transparent url(images/btn_prev_right.png) 0 0 no-repeat; +} +.btn-prev span { + cursor:pointer; + display: block; + padding: 10px 22px 11px 26px; + font-size: 16px; + color: white; + text-shadow: 0 1px #448BD8; + background: transparent url(images/btn_prev_left.png) 100% 0 no-repeat; +} +.btn-prev:hover{ + text-decoration:none; + background: transparent url(images/btn_prev_right_hover.png) 0 0 no-repeat; +} +.btn-prev:hover span{ + background: transparent url(images/btn_prev_left_hover.png) 100% 0 no-repeat; +} + +.grayMessage{ + opacity: 0.4; + filter: alpha(opacity=40); +} + +.dimension-tags-ul{ + float:left; + list-style:none; + margin: 0; + padding: 0; +} + +.dimension-tags-ul li{ + float:left; + height:24px; + width:300px; + font-size:12px; + font-family:Arial, Helvetica, sans-serif,"宋体"; + margin:3px; + cursor:pointer; + border-radius:5px; + /*color:#666666;*/ + cursor: pointer; +} + +.dimension-tags-ul li .contentDiv{ + height:22px; + line-height:22px; + border:1px solid #ffffff; + width:298px; + border-radius:5px; +} + +.dimension-tags-ul li .contentDiv .leftDiv{ + float:left; + padding-left:5px; +} +.dimension-tags-ul li .contentDiv .rightDiv{ + float:right; +} +.dimension-tags-ul li .contentDiv .rightDiv a{ + width:15px; + height:24px; + _height:22px; + background:url(images/aws-dialog1.gif) 0 50% no-repeat; + cursor: pointer; + display:block; +} +.dimension-tags-ul li .contentDiv .rightDiv a:hover{ + background-position: -13px 50%; +} + +.dimension-tags-ul li .contentDiv .rightDivNo{ + float:right; +} +.dimension-tags-ul li .contentDiv .rightDivNo a{ + width:15px; + height:24px; + _height:22px; + cursor: pointer; + display:block; +} + +.light-green{ + border:1px solid #AAB792; + background-color:#759DD5; + background: url("images/green.gif") repeat-x scroll 0 0 transparent; + color: #fff; +} +.light-green:hover{ /*border:1px solid #6f8542;*/} + +.light-orange{ + border:1px solid #D6C39D; + background-color:#EFAA15; + background: url("images/yellow.gif") repeat-x scroll 0 0 transparent; + color: #000; +} +.light-orange:hover{ /*border:1px solid #d19e44;*/} + +.light-purple{ + border:1px solid #8883A8; + background-color:#eef2fb; +} +.light-purple:hover{ /*border:1px solid #574e85;*/} + +.clear{ + clear:both; + border:none; +} + +.dimension-tags-ul li .contentDiv .tickDiv{ + float:right; +} + +.dimension-tags-ul li .contentDiv .tickDiv a{ + width:15px; + height:24px; + _height:22px; + background:url(tageditImg/tick.png) 50% 50% no-repeat; + cursor: pointer; + display:block; +} + +.dimension-tags-ul li .contentDiv .tickDiv a:hover{ + background:url(tageditImg/tick1.png) 50% 50% no-repeat; +} + +/*统一qtip2提示的字体大小*/ +.custom-font12{ + font-size: 12px; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/error/desinger.error.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/error/desinger.error.css new file mode 100644 index 00000000..26489699 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/error/desinger.error.css @@ -0,0 +1,46 @@ +HTML { + BACKGROUND: #f2f2f2 +} + +.non_support_mask { + FONT-FAMILY: NewsGothic, "News Gothic MT", "Lucida Sans", "Lucida Grande", sans-serif !important; BACKGROUND: #f2f2f2; COLOR: #666; FONT-SIZE: 0.75em; text-shadow: 0 1px rgba(255, 255, 255, .9) +} +.no_sup_mask_main { + POSITION: relative; TEXT-ALIGN: center; PADDING-BOTTOM: 0px; MARGIN: 0px auto; PADDING-LEFT: 25px; PADDING-RIGHT: 25px; MAX-WIDTH: 700px; PADDING-TOP: 0px +} +.no_sup_mask_main H1 { + MARGIN: 50px 0px 30px; DISPLAY: block; FONT-SIZE: 64px; FONT-WEIGHT: 100 +} +.no_sup_mask_main H1 DEL { + COLOR: #999; TEXT-DECORATION: line-through +} +.no_sup_mask_main P { + LINE-HEIGHT: 26px; MARGIN: 20px 0px; FONT-SIZE: 14px +} +.bs_logo_list { + HEIGHT: 80px +} +.bs_logo_list A { + MARGIN: 0px 5px; WIDTH: 80px; DISPLAY: inline-block; BACKGROUND: url(../../img/support_browsers_list.png) no-repeat 0px 0px; HEIGHT: 80px; OVERFLOW: hidden +} +.non_support_mask .no_sup_mask_main .bs_logo_list A.sup_chrome { + BACKGROUND-POSITION: 0px 0px +} +.non_support_mask .no_sup_mask_main .bs_logo_list A.sup_firefox { + BACKGROUND-POSITION: -80px 0px +} +.non_support_mask .no_sup_mask_main .bs_logo_list A.sup_ie { + BACKGROUND-POSITION: -160px 0px +} +.non_support_mask .no_sup_mask_main .bs_logo_list A.sup_safari { + BACKGROUND-POSITION: 0px -80px +} +.non_support_mask .no_sup_mask_main .bs_logo_list A.sup_opera { + BACKGROUND-POSITION: -80px -80px +} +.non_support_mask .no_sup_footer { + POSITION: fixed; PADDING-BOTTOM: 20px; BACKGROUND-COLOR: #272727; PADDING-LEFT: 25px; BOTTOM: 0px; PADDING-RIGHT: 25px; RIGHT: 0px; PADDING-TOP: 25px; LEFT: 0px +} +.non_support_mask .no_sup_footer .processon_logo { + WIDTH: 120px; DISPLAY: inline-block; BACKGROUND: url(/images/default/logo/logo_m.png) no-repeat; HEIGHT: 26px +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/fontcss/coe.font.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/fontcss/coe.font.css new file mode 100644 index 00000000..8dd94619 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/fontcss/coe.font.css @@ -0,0 +1,76 @@ +/* +** create by renmm +** date 2013/10/28 16:03; +*/ + +/*引入字体*/ +@font-face{ + font-family:'ConceptboardDingbats'; + src:url('../../font/conceptboarddingbats-regular-webfont.eot'); + src:url('../../font/conceptboarddingbats-regular-webfont.eot?#iefix') format('embedded-opentype'), + url('../../font/conceptboarddingbats-regular-webfont.woff') format('woff'), + url('../../font/conceptboarddingbats-regular-webfont.ttf') format('truetype'), + url('../../font/conceptboarddingbats-regular-webfont.svg#ConceptboardDingbats') format('svg'); + font-weight:normal;font-style:normal +} + +[class^="icon-"]:before,[class*="icon-"]:before{ + font-family:ConceptboardDingbats; + font-weight:normal; + font-style:normal; + display:inline-block; + text-decoration:inherit; + text-decoration:none; + font-size:1.25em +} + +/* +**tiles:瓷砖 +**lists:列; +*/ +.icons-group{ + margin: 0; + padding: 0; +} +.icons-group .button2:first-child{ + border-top-left-radius:3px; + border-bottom-left-radius:3px; +} +.icons-group .button2:last-child{ + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.icons-group span { + float: left; +} +.icon-tiles:before{content:"\e046";} +.icon-lists:before{content:"\e061";} +.button2{ + border: 1px solid #BBBBBB; + cursor: pointer; +} + +.current { + background: none repeat scroll 0 0 #E6E6E6; + box-shadow: 0 1px 3px 1px rgba(1, 1, 1, 0.15) inset; +} + +.default { + background: none repeat scroll 0 0 #F4F4F4; + box-shadow: 0 1px 0 #FFFFFF inset; +} +.default:hover{ + background: #fff; +} + +.square { + font-size: 16px; + height: 28px; + line-height: 26px; + padding: 0 7px; + text-align: center; +} +.button.clean { + color: #404040; + text-shadow: none; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/guide/coe.guide2.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/guide/coe.guide2.css new file mode 100644 index 00000000..5aaeceac --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/guide/coe.guide2.css @@ -0,0 +1,87 @@ +.guide_div { + width: 100%; + height: 100%; + z-index: 2; + position: absolute; + top: 0px; + background-color: rgba(0, 0, 0, 0.3); +} + +.guide_head_div { + width: 100%; + height: 60px; + position: absolute; + top: 0px; + line-height: 60px; + vertical-align: middle; + text-align: center; + background-color: rgba(0, 0, 0, 0.5); + color: rgb(255, 255, 255); + font-size: 17px; +} + +.guide_head_div .guide_span { + padding: 10px; + cursor: pointer; +} + +.guide_head_div .guide_span:hover { + background-color: rgb(54, 144, 230); + border-radius: 2px; +} + +.guide_head_separator { + border-right: solid 1px #7e7e7e; + margin: 0px 20px; +} + +.guide_head_div .guide_head_current { + background-color: rgb(54, 144, 230); + border-radius: 2px; +} + +.guide_div .guide_dlg { + position: absolute; + display: block; + border: 1px solid #4b4b4b; + background-color: #4b4b4b; + color: #fff; + border-radius: 4px; +} + +.guide_dlg .guide_dlg_title { + background-color: #4b4b4b; + height: 40px; + padding: 0px 20px; + line-height: 40px; + vertical-align: middle; + font-size: 15px; +} + +.guide_dlg .button_next { + display: block; + margin-top: 10px; + background-image: none; + background-color: #318fe7; + position: absolute; + bottom: 20px; + right: 20px; +} + +.guide2_btn_wrap { + position: absolute; + left: 60px; + bottom: 100px; + z-index:2; + border: 1px dashed rgb(54, 144, 230); + padding: 5px; +} + +.guide2_btn { + width: 140px; + height: 40px; + font-size: 15px; + background-color: rgb(54, 144, 230); + color: #fff; + margin-right: 0px; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/admin.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/admin.gif new file mode 100644 index 00000000..58384e91 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/admin.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/amountProcessNodeFlotBar.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/amountProcessNodeFlotBar.jpg new file mode 100644 index 00000000..19ba8a58 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/amountProcessNodeFlotBar.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/amountProcessTrendFlotLine.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/amountProcessTrendFlotLine.jpg new file mode 100644 index 00000000..7b76ada3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/amountProcessTrendFlotLine.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/analysisBG.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/analysisBG.png new file mode 100644 index 00000000..8a093885 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/analysisBG.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/analysisContentListWideHeader.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/analysisContentListWideHeader.gif new file mode 100644 index 00000000..2f22ba37 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/analysisContentListWideHeader.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/arrowDoubleDown.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/arrowDoubleDown.gif new file mode 100644 index 00000000..1f608541 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/arrowDoubleDown.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/arrowDoubleUp.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/arrowDoubleUp.gif new file mode 100644 index 00000000..07c37629 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/arrowDoubleUp.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/aws-dialog.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/aws-dialog.gif new file mode 100644 index 00000000..5616142b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/aws-dialog.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/black_radio.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/black_radio.png new file mode 100644 index 00000000..1c4bddaf Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/black_radio.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_biggrey_left.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_biggrey_left.png new file mode 100644 index 00000000..54b3a9d6 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_biggrey_left.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_biggrey_left_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_biggrey_left_hover.png new file mode 100644 index 00000000..89214a63 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_biggrey_left_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_biggrey_right.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_biggrey_right.png new file mode 100644 index 00000000..d9cb4b05 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_biggrey_right.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_biggrey_right_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_biggrey_right_hover.png new file mode 100644 index 00000000..4bd319e6 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_biggrey_right_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_next_left.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_next_left.png new file mode 100644 index 00000000..f9187d16 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_next_left.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_next_left_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_next_left_hover.png new file mode 100644 index 00000000..2926c791 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_next_left_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_next_right.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_next_right.png new file mode 100644 index 00000000..d297c547 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_next_right.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_next_right_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_next_right_hover.png new file mode 100644 index 00000000..6bc1456f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_next_right_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_prev_left.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_prev_left.png new file mode 100644 index 00000000..e7489034 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_prev_left.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_prev_left_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_prev_left_hover.png new file mode 100644 index 00000000..88cd7b60 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_prev_left_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_prev_right.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_prev_right.png new file mode 100644 index 00000000..b7149ae5 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_prev_right.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_prev_right_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_prev_right_hover.png new file mode 100644 index 00000000..2e6b444a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/btn_prev_right_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/button_plain_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/button_plain_hover.png new file mode 100644 index 00000000..b074e4ed Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/button_plain_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/dialog_east_north.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/dialog_east_north.png new file mode 100644 index 00000000..a8dd57d2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/dialog_east_north.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/dialog_east_south.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/dialog_east_south.png new file mode 100644 index 00000000..8f66451d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/dialog_east_south.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/dialog_west_north.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/dialog_west_north.png new file mode 100644 index 00000000..9691c2e8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/dialog_west_north.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/dialog_west_south.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/dialog_west_south.png new file mode 100644 index 00000000..76ed65d6 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/dialog_west_south.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/down.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/down.png new file mode 100644 index 00000000..91539686 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/down.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/gray_radio.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/gray_radio.png new file mode 100644 index 00000000..157593d0 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/gray_radio.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/green.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/green.gif new file mode 100644 index 00000000..b3c8daaa Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/green.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/office.member.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/office.member.png new file mode 100644 index 00000000..db5e187a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/office.member.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_first.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_first.gif new file mode 100644 index 00000000..d84f41a9 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_first.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_last.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_last.gif new file mode 100644 index 00000000..3df5c2ba Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_last.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_load.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_load.png new file mode 100644 index 00000000..d65defbc Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_load.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_next.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_next.gif new file mode 100644 index 00000000..96016353 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_next.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_prev.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_prev.gif new file mode 100644 index 00000000..eb70cf8f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/pagination_prev.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/png.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/png.png new file mode 100644 index 00000000..7141db18 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/png.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/process.office.bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/process.office.bg.png new file mode 100644 index 00000000..89029c0f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/process.office.bg.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/process_node_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/process_node_bg.png new file mode 100644 index 00000000..50a106f9 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/process_node_bg.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/radio_bg_left.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/radio_bg_left.png new file mode 100644 index 00000000..b22d4291 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/radio_bg_left.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/radio_bg_right.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/radio_bg_right.png new file mode 100644 index 00000000..a5ad3ef7 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/radio_bg_right.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/search.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/search.png new file mode 100644 index 00000000..94580080 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/search.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/sort_asc.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/sort_asc.png new file mode 100644 index 00000000..a60e4fff Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/sort_asc.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/sort_asc_light.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/sort_asc_light.png new file mode 100644 index 00000000..58978ce3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/sort_asc_light.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/sort_desc.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/sort_desc.png new file mode 100644 index 00000000..a4edba12 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/sort_desc.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/sort_desc_light.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/sort_desc_light.png new file mode 100644 index 00000000..c1cb002c Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/sort_desc_light.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/tabs_div_arrow.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/tabs_div_arrow.png new file mode 100644 index 00000000..30eee245 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/tabs_div_arrow.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/tabs_div_arrow_right.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/tabs_div_arrow_right.png new file mode 100644 index 00000000..900288e7 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/tabs_div_arrow_right.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/up.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/up.png new file mode 100644 index 00000000..37a5d2c4 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/up.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/user.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/user.jpg new file mode 100644 index 00000000..9fb95a61 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/user.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/white_radio.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/white_radio.png new file mode 100644 index 00000000..548770f8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/white_radio.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/yellow.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/yellow.gif new file mode 100644 index 00000000..afa61605 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/images/yellow.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/coe.install.step.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/coe.install.step.css new file mode 100644 index 00000000..43468bc8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/coe.install.step.css @@ -0,0 +1,3 @@ +.maindiv{ + margin: 25px; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/coe.install.tabs.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/coe.install.tabs.css new file mode 100644 index 00000000..e426d598 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/coe.install.tabs.css @@ -0,0 +1,78 @@ + +/* root element for tabs */ +ul.tabs { + list-style:none; + margin:0 !important; + padding:0; + border-bottom:1px solid #666; + height:30px; +} + +/* single tab */ +ul.tabs li { + float:left; + text-indent:0; + padding:0; + margin:0 !important; + list-style-image:none !important; +} + +/* link inside the tab. uses a background image */ +ul.tabs a { + background: url(images/blue.png) no-repeat -420px 0; + font-size:11px; + display:block; + height: 30px; + line-height:30px; + width: 134px; + text-align:center; + text-decoration:none; + color:#333; + padding:0px; + margin:0px; + position:relative; + top:1px; +} + +ul.tabs a:active { + outline:none; +} + +/* when mouse enters the tab move the background image */ +ul.tabs a:hover { + background-position: -420px -31px; + color:#fff; +} + +/* active tab uses a class name "current". its highlight is also done by moving the background image. */ +ul.tabs a.current, ul.tabs a.current:hover, ul.tabs li.current a { + background-position: -420px -62px; + cursor:default !important; + color:#000 !important; +} + +/* Different widths for tabs: use a class name: w1, w2, w3 or w2 */ + + +/* width 1 */ +ul.tabs a.s { background-position: -553px 0; width:81px; } +ul.tabs a.s:hover { background-position: -553px -31px; } +ul.tabs a.s.current { background-position: -553px -62px; } + +/* width 2 */ +ul.tabs a.l { background-position: -248px -0px; width:174px; } +ul.tabs a.l:hover { background-position: -248px -31px; } +ul.tabs a.l.current { background-position: -248px -62px; } + + +/* width 3 */ +ul.tabs a.xl { background-position: 0 -0px; width:248px; } +ul.tabs a.xl:hover { background-position: 0 -31px; } +ul.tabs a.xl.current { background-position: 0 -62px; } + + +/* initially all panes are hidden */ +.panes .pane { + display:none; +} + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/images/blue.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/images/blue.png new file mode 100644 index 00000000..48f78b5d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/images/blue.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/images/gr-1.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/images/gr-1.gif new file mode 100644 index 00000000..bcf8b74d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/images/gr-1.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/images/nav-item-bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/images/nav-item-bg.png new file mode 100644 index 00000000..22ff7ed8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/images/nav-item-bg.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/wing-frame.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/wing-frame.css new file mode 100644 index 00000000..54e9d25b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/init/wing-frame.css @@ -0,0 +1,598 @@ +/* +CSS布局框架 +author:周璇 + +W_* 为外面的大容器 +w_* 为容器里面的小容器 +w_c_l 清除左边距 +w_c_r 清除右边距 +w_c 清除浮动 换行 +w_l_* 向左漂浮 +w_r_* 向右漂浮 +w_pl_* 左填充 +w_pr_* 右填充 +*/ + +body { + min-width: 960px; + font-size: 14px; +} +.W_12, +.W_16 { + margin-left: auto; + margin-right: auto; + width: 960px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.w_1, +.w_2, +.w_3, +.w_4, +.w_5, +.w_6, +.w_7, +.w_8, +.w_9, +.w_10, +.w_11, +.w_12, +.w_13, +.w_14, +.w_15, +.w_16 { + display: inline; + float: left; + margin-left: 10px; + margin-right: 10px; +} + +.w_r_1, .w_l_1, +.w_r_2, .w_l_2, +.w_r_3, .w_l_3, +.w_r_4, .w_l_4, +.w_r_5, .w_l_5, +.w_r_6, .w_l_6, +.w_r_7, .w_l_7, +.w_r_8, .w_l_8, +.w_r_9, .w_l_9, +.w_r_10, .w_l_10, +.w_r_11, .w_l_11, +.w_r_12, .w_l_12, +.w_r_13, .w_l_13, +.w_r_14, .w_l_14, +.w_r_15, .w_l_15 { + position: relative; +} + +.W_12 .w_3, +.W_16 .w_4 { + width: 220px; +} + +.W_12 .w_6, +.W_16 .w_8 { + width: 460px; +} + +.W_12 .w_9, +.W_16 .w_12 { + width: 700px; +} + +.W_12 .w_12, +.W_16 .w_16 { + width: 940px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.w_c_l { + margin-left: 0; +} + +.w_c_r { + margin-right: 0; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_12 .w_1 { + width: 60px; +} + +.W_12 .w_2 { + width: 140px; +} + +.W_12 .w_4 { + width: 300px; +} + +.W_12 .w_5 { + width: 380px; +} + +.W_12 .w_7 { + width: 540px; +} + +.W_12 .w_8 { + width: 620px; +} + +.W_12 .w_10 { + width: 780px; +} + +.W_12 .w_11 { + width: 860px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_16 .w_1 { + width: 40px; +} + +.W_16 .w_2 { + width: 100px; +} + +.W_16 .w_3 { + width: 160px; +} + +.W_16 .w_5 { + width: 280px; +} + +.W_16 .w_6 { + width: 340px; +} + +.W_16 .w_7 { + width: 400px; +} + +.W_16 .w_9 { + width: 520px; +} + +.W_16 .w_10 { + width: 580px; +} + +.W_16 .w_11 { + width: 640px; +} + +.W_16 .w_13 { + width: 760px; +} + +.W_16 .w_14 { + width: 820px; +} + +.W_16 .w_15 { + width: 880px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_12 .w_pl_3, +.W_16 .w_pl_4 { + padding-left: 240px; +} + +.W_12 .w_pl_6, +.W_16 .w_pl_8 { + padding-left: 480px; +} + +.W_12 .w_pl_9, +.W_16 .w_pl_12 { + padding-left: 720px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_12 .w_pl_1 { + padding-left: 80px; +} + +.W_12 .w_pl_2 { + padding-left: 160px; +} + +.W_12 .w_pl_4 { + padding-left: 320px; +} + +.W_12 .w_pl_5 { + padding-left: 400px; +} + +.W_12 .w_pl_7 { + padding-left: 560px; +} + +.W_12 .w_pl_8 { + padding-left: 640px; +} + +.W_12 .w_pl_10 { + padding-left: 800px; +} + +.W_12 .w_pl_11 { + padding-left: 880px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_16 .w_pl_1 { + padding-left: 60px; +} + +.W_16 .w_pl_2 { + padding-left: 120px; +} + +.W_16 .w_pl_3 { + padding-left: 180px; +} + +.W_16 .w_pl_5 { + padding-left: 300px; +} + +.W_16 .w_pl_6 { + padding-left: 360px; +} + +.W_16 .w_pl_7 { + padding-left: 420px; +} + +.W_16 .w_pl_9 { + padding-left: 540px; +} + +.W_16 .w_pl_10 { + padding-left: 600px; +} + +.W_16 .w_pl_11 { + padding-left: 660px; +} + +.W_16 .w_pl_13 { + padding-left: 780px; +} + +.W_16 .w_pl_14 { + padding-left: 840px; +} + +.W_16 .w_pl_15 { + padding-left: 900px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_12 .w_pr_3, +.W_16 .w_pr_4 { + padding-right: 240px; +} + +.W_12 .w_pr_6, +.W_16 .w_pr_8 { + padding-right: 480px; +} + +.W_12 .w_pr_9, +.W_16 .w_pr_12 { + padding-right: 720px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_12 .w_pr_1 { + padding-right: 80px; +} + +.W_12 .w_pr_2 { + padding-right: 160px; +} + +.W_12 .w_pr_4 { + padding-right: 320px; +} + +.W_12 .w_pr_5 { + padding-right: 400px; +} + +.W_12 .w_pr_7 { + padding-right: 560px; +} + +.W_12 .w_pr_8 { + padding-right: 640px; +} + +.W_12 .w_pr_10 { + padding-right: 800px; +} + +.W_12 .w_pr_11 { + padding-right: 880px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_16 .w_pr_1 { + padding-right: 60px; +} + +.W_16 .w_pr_2 { + padding-right: 120px; +} + +.W_16 .w_pr_3 { + padding-right: 180px; +} + +.W_16 .w_pr_5 { + padding-right: 300px; +} + +.W_16 .w_pr_6 { + padding-right: 360px; +} + +.W_16 .w_pr_7 { + padding-right: 420px; +} + +.W_16 .w_pr_9 { + padding-right: 540px; +} + +.W_16 .w_pr_10 { + padding-right: 600px; +} + +.W_16 .w_pr_11 { + padding-right: 660px; +} + +.W_16 .w_pr_13 { + padding-right: 780px; +} + +.W_16 .w_pr_14 { + padding-right: 840px; +} + +.W_16 .w_pr_15 { + padding-right: 900px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_12 .w_r_3, +.W_16 .w_r_4 { + left: 240px; +} + +.W_12 .w_r_6, +.W_16 .w_r_8 { + left: 480px; +} + +.W_12 .w_r_9, +.W_16 .w_r_12 { + left: 720px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_12 .w_r_1 { + left: 80px; +} + +.W_12 .w_r_2 { + left: 160px; +} + +.W_12 .w_r_4 { + left: 320px; +} + +.W_12 .w_r_5 { + left: 400px; +} + +.W_12 .w_r_7 { + left: 560px; +} + +.W_12 .w_r_8 { + left: 640px; +} + +.W_12 .w_r_10 { + left: 800px; +} + +.W_12 .w_r_11 { + left: 880px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_16 .w_r_1 { + left: 60px; +} + +.W_16 .w_r_2 { + left: 120px; +} + +.W_16 .w_r_3 { + left: 180px; +} + +.W_16 .w_r_5 { + left: 300px; +} + +.W_16 .w_r_6 { + left: 360px; +} + +.W_16 .w_r_7 { + left: 420px; +} + +.W_16 .w_r_9 { + left: 540px; +} + +.W_16 .w_r_10 { + left: 600px; +} + +.W_16 .w_r_11 { + left: 660px; +} + +.W_16 .w_r_13 { + left: 780px; +} + +.W_16 .w_r_14 { + left: 840px; +} + +.W_16 .w_r_15 { + left: 900px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_12 .w_l_3, +.W_16 .w_l_4 { + left: -240px; +} + +.W_12 .w_l_6, +.W_16 .w_l_8 { + left: -480px; +} + +.W_12 .w_l_9, +.W_16 .w_l_12 { + left: -720px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_12 .w_l_1 { + left: -80px; +} + +.W_12 .w_l_2 { + left: -160px; +} + +.W_12 .w_l_4 { + left: -320px; +} + +.W_12 .w_l_5 { + left: -400px; +} + +.W_12 .w_l_7 { + left: -560px; +} + +.W_12 .w_l_8 { + left: -640px; +} + +.W_12 .w_l_10 { + left: -800px; +} + +.W_12 .w_l_11 { + left: -880px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.W_16 .w_l_1 { + left: -60px; +} + +.W_16 .w_l_2 { + left: -120px; +} + +.W_16 .w_l_3 { + left: -180px; +} + +.W_16 .w_l_5 { + left: -300px; +} + +.W_16 .w_l_6 { + left: -360px; +} + +.W_16 .w_l_7 { + left: -420px; +} + +.W_16 .w_l_9 { + left: -540px; +} + +.W_16 .w_l_10 { + left: -600px; +} + +.W_16 .w_l_11 { + left: -660px; +} + +.W_16 .w_l_13 { + left: -780px; +} + +.W_16 .w_l_14 { + left: -840px; +} + +.W_16 .w_l_15 { + left: -900px; +} + +/*----------------------------------------------------------------------------------------------------*/ + +.w_c { + clear: both; + display: block; + overflow: hidden; + visibility: hidden; + width: 0; + height: 0; +} + +/*----------------------------------------------------------------------------------------------------*/ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/jquery.tagedit.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/jquery.tagedit.css new file mode 100644 index 00000000..e696179d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/jquery.tagedit.css @@ -0,0 +1,59 @@ +/** + * Styles for the jQuery Plugin tagedit + * + * Copyright (c) 2010 Oliver Albrecht info@webwork-albrecht.de + * + * @author Oliver Albrecht info@webwork-albrecht.de + * @version 1.0.0 + * + */ + +/** Styles for the Example page **/ +body {font-size: 12px; color: #666; font-family: Verdana, sans-serif; margin: 20px;} +input {font-size: 12px; color: #666; font-family: Verdana, sans-serif;} +input[type=submit] {border: 1px solid #999; margin-top: 2em; background: #fff; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; line-height: 30px; height: 30px; -moz-box-shadow: 0 0 3px #888; -webkit-box-shadow: 0 0 3px #888; box-shadow: 0 0 3px #888;} +label {font-weight: bold; margin-bottom: 0.5em; display: block;} +.footer {margin-top: 100px;} + +/** + * Styles of the tagedit inputsforms + */ +.tagedit-list {margin: 0; padding: 5px 5px 0 5px; border: 1px solid #c6c6c6; width: 400px; overflow: auto; font-size: 11px; min-height: 25px; } +.tagedit-list li.tagedit-listelement {list-style-type: none; float: left; margin: 0 5px 0px 0; padding: 0; } +/* New Item input */ +.tagedit-list li.tagedit-listelement-new input {border: 0; height: 100%; padding: 2px 5px; width: 15px; background: #fff;} +.tagedit-list li.tagedit-listelement-new input:focus {outline: none;} +.tagedit-list li.tagedit-listelement-new input.tagedit-input-disabled {display: none;} +/* Item that is put to the List */ +.tagedit-list li.tagedit-listelement-old {background: #DEE7F8 url(tageditImg/disc.png) 4px center no-repeat; border: 1px solid #CAD8F3; padding: 2px 0 2px 13px; margin-top:2px; -moz-border-radius: 8px 4px 4px 8px; -webkit-border-radius: 8px 4px 4px 8px; border-radius: 8px 4px 4px 8px;} +.tagedit-listelement-old-aws { + background: #DEE7F8 url(tageditImg/disc.png) 4px center no-repeat; + border: 1px solid #CAD8F3; + padding: 1px 0 1px 13px; + -moz-border-radius: 8px 4px 4px 8px; + -webkit-border-radius: 8px 4px 4px 8px; + border-radius: 8px 4px 4px 8px; + text-align:center; +} +.tagedit-list li.tagedit-listelement-old:hover {background-color: #D6E4FF;} +.tagedit-list li.tagedit-listelement-old a.tagedit-close, +.tagedit-list li.tagedit-listelement-old a.tagedit-break, +.tagedit-list li.tagedit-listelement-old a.tagedit-delete, +.tagedit-list li.tagedit-listelement-old a.tagedit-save {font-weight: bold; text-indent: -2000px; display: inline-block; width: 15px; height: 100%; cursor: pointer; border-left: 1px dotted #7E9DD6; margin: 0 2px 0 5px; background: url(tageditImg/cross.png) center center no-repeat;} +.tagedit-list li.tagedit-listelement-old a.tagedit-save {background-image: url(tageditImg/tick.png); margin-right: 0;} +.tagedit-list li.tagedit-listelement-old a.tagedit-break {background-image: url(tageditImg/undo.png); margin-right: 0;} +.tagedit-list li.tagedit-listelement-old a.tagedit-delete {background-image: url(tageditImg/delete.png); margin: 0 5px 0 2px; background-position: right center;} +/* Items that are edited */ +.tagedit-list li.tagedit-listelement-edit input.tagedit-edit-input {border: 0; background: transparent; font-size: 11px; color: #666; padding: 0;} +.tagedit-list li.tagedit-listelement-edit input:focus {outline: none;} +.tagedit-list li.tagedit-listelement-edit a.tagedit-break {border: 0; margin-left: 0;} +.tagedit-list li.tagedit-listelement-edit a.tagedit-close, +.tagedit-list li.tagedit-listelement-edit span {display: none;} +/* Item is marked as deleted */ +.tagedit-list li.tagedit-listelement-deleted, +.tagedit-list li.tagedit-listelement-deleted:hover {padding-right: 5px; background-color: #FFD6D6; border-color: #FFB7B7; border-style: dashed; } +.tagedit-list li.tagedit-listelement-deleted span {text-decoration: line-through;} +.tagedit-list li.tagedit-listelement-deleted a.tagedit-close {margin-right: 0;} +/* by liangt */ +.tagedit-list li.tagedit-listelement-not-deleted, +.tagedit-list li.tagedit-listelement-not-deleted:hover {padding-right: 5px; background-color: #FFD6D6; border-color: #FFB7B7; border-style: dashed; } \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/pal.login.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/pal.login.css new file mode 100644 index 00000000..6fe2579e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/pal.login.css @@ -0,0 +1,167 @@ +/*global css*/ + +body { + color: #333333; + font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; + font-size: 13px; + margin: 0; + padding: 0; +} +input,textarea,div{ + resize:none;outline:none;font-size:13px; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} +a { +text-decoration: none; +color: #F1E7E7; +} + +a:hover { +color: #F1E7E7; +} + +/*login-background*/ + +.login-bg{ + position: absolute;height:100%;width:100%; + background:url(../img/bg4.jpg) 0px 0px no-repeat; +} +/*login-container*/ +.login-container{ + position: fixed;left:35%;height:100%; + width:65%; + background: url(../img/trans.png) repeat; + background: rgba(255,255,255,0.3); +} + +@media screen and (max-width: 800px) { + .login-container{ + left:0; + width:100%; + } +} +@media screen and (min-width: 801px) and (max-width: 1090px) { + .login-container{ + left:23%; + width:100%; + } +} + +/* ---------head------------- */ +.brand{ + font-weight:900; + font-size:20px; + margin-top:20px; + cursor:pointer; +} +.brand .brand-logo{ + font-weight:100; + font-size:12px; + position:relative; + top:-10px; +} +/*---------form----------*/ +.form-unit > h2{ + margin-top: 10px; + margin-bottom: 20px; + font-size: 16px; + font-weight: normal; + color: #252323; +} +.login-form input { + font-family: inherit; + font-size: 14px; + color: #383838; + display: block; + width: 280px; + height: 32px; + line-height: 20px; + padding: 8px 12px 8px 30px; + margin-bottom: 0; + border: 1px solid #D9D9D9; + border-radius: 3px; + transition: border-color 0.15s ease-in-out 0s; + vertical-align: middle; +} + +.login-form .input { + background-color: #FFFFFF; +} + +.login-form .input:focus { + border-color: #696363; + outline: 0 none; +} +.login-form .form-control[disabled],.login-form .form-control[readonly]{ + background-color: #F1F1F1; + cursor: not-allowed; +} + +.btn-primary{ + font-size: 16px; + font-weight: bold; + color: white; + text-align: center; + text-decoration: none !important; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.35); + min-width: 50px; + width: 285px; + line-height:35px; + padding: 5px 20px !important; + background-color: #18A075; + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -o-border-radius: 3px; + box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.3); + transition: border-color .5s; + -webkit-transition: border-color .5s; + -moz-transition: border-color .5s; + -o-transition: border-color .5s; + float: left; + cursor: pointer; + border: 1px #18A075 solid; + -moz-box-sizing:content-box; + -ms-box-sizing:content-box; + box-sizing:content-box; + margin-top: 0px; +} +.btn-primary:hover, +.btn-primary:focus { + color: #ffffff; + background-color: #0099e6; + border-color: #0099e6; +} +.btn-primary:active, +.btn-primary.active { + background-color: #0077b3; + border-color: #0077b3; +} +.btn-primary.disabled, +.btn-primary[disabled], +{ + background-color: #0088cc; + border-color: #0088cc; +} +.select-i18n{ + float: left; + margin-left:30px; + text-align: center; + color: #ccc; +} +.select-i18n:hover{ + color: #333; +} +/*------bottom-------*/ +.bottom{ + margin-top:50px; + font-family:'Verdana'; + /*background:url(../apps/com.actionsoft.apps.coe.pal/img/coebottom2_07.png) no-repeat;*/ + position: fixed; + right: 20px; + bottom: 0; + height:49px; + font-size:12px; + line-height:45px; + text-align:center; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/pal.pl.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/pal.pl.css new file mode 100644 index 00000000..ef930c9c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/pal.pl.css @@ -0,0 +1,89 @@ +.bottom_border_input { + line-height: normal; + border-left: none; + border-right: none; + border-top: none; + border-bottom: 2px solid #D2D2D2; + background-color: #F1F2F4; +} + +.bottom_border_input:focus, .bottom_border_input:hover { + border-left: none; + border-right: none; + border-top: none; + border-bottom: 2px solid #1CA17A; + color: #1CA17A; +} + +.awsui-layout-left-title { + border-bottom: none; +} + + +/* pal tree样式 */ +.ui-tree .tree-items { + line-height: 20px; +} + +.ui-tree .tree-items span { + margin-left: 1px; + margin-right: 1px; +} + +.ui-tree .root-close, .ui-tree .root-close.end { + background: url(../img/icon/tree-shrink.png) no-repeat !important; + background-position: center !important; +} + +.ui-tree .root-open, .ui-tree .root-open.end { + background: url(../img/icon/tree-expand.png) no-repeat !important; + background-position: center !important; +} + +.ui-tree .root-file { + vertical-align: middle; +} +.ui-tree .root-doc { +} +.ui-tree .tree-indent.line { + background: none; +} + +.awsui-tabs-container.top { + border-bottom: none !important; +} + +.awsui-tabs-items.current { + border: none !important; + color: #1CA17A; +} + +.awsui-tabs-items.top { + border: none !important; + margin: 6px 1px 0px 2px; +} + +.awsui-tabs-items { + font-size: 13px; +} + +.ui-tree .line-items { + background: none; +} + +.ui-tree .line-items.end { + background: none; +} + +.ui-tree .tree-items.current { + background-color: #E7E8EA; + color: #1CA17A; +} + +.ui-tree .tree-items:hover{ + background:rgb(218, 218, 218); +} + +.background_grey{ + background-color: #E7E8EA; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/pal.pl.repository.designer.view.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/pal.pl.repository.designer.view.css new file mode 100644 index 00000000..630f4efb --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/pal.pl.repository.designer.view.css @@ -0,0 +1,291 @@ +.view_box { + margin: 0px auto 20px auto; + border: 1px solid #ccc; + overflow: hidden; + position: relative; + background: #fff; + cursor: move; +} +.view_box.fullscreen { + position: fixed; + top: 0; + left: 0; + z-index: 2; + width: 100%; + height: 100%; + margin-top: 0px; +} +#chartDivBox { + position: absolute; + top: 0px; + left: 0px; + width: 100%; + height: 100%; + cursor: move; + background: url(/images/default/view_loading.gif) center center no-repeat; +} +#chartDiv { + position: absolute; + top: 0px; + left: 0px; + -moz-user-select: none; + -webkit-user-select: none; +} +#chart_img { + opacity: 0; + filter: alpha(opacity=0); + -moz-user-select: none; + -webkit-user-select: none; + -webkit-transition: opacity 0.2s ease-in-out; + -moz-transition: opacity 0.2s ease-in-out; + -o-transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s ease-in-out; + -khtml-transition: opacity 0.2s ease-in-out; + -ms-transition: opacity 0.2s ease-in-out; +} +#chart_preview { + position: absolute; + right: 10px; + bottom: 10px; + border: 1px solid #ccc; + width: 150px; + height: 160px; + overflow: hidden; + cursor: default; + background: rgba(255,255,255,0.7); +} +#chart_preview_wrap { + opacity: 0; + filter: alpha(opacity=0); +} +#chart_preview #preview_box { + border: 2px solid rgba(255,0,0,0.5); + position: absolute; + top: 0px; + left: 0px; + cursor: move; +} + +#side_btn { + position: absolute; + top: 55px; + right: 0px; + z-index: 999; + background-color: rgb(126, 133, 141); +} +#side_btn .side_button { + margin: 5px 5px 0px 5px; +} +.side_button { + height: 40px; + line-height: 40px; + min-width: 40px; + padding: 0; + text-align: center; + border: 1px solid transparent; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -ms-border-radius: 2px; + border-radius: 2px; + position: relative; + cursor: default; +} +.side_button:hover { + background: #c5c5c5; +} +.side_button.active_btn { + border: solid 1px #000; +} + +.ico_side { + height: 40px; + cursor: pointer; +} +.ico_side_enlarge { + background: url(../img/icon/enlarge.png) center center no-repeat; +} +.ico_side_narrow { + background: url(../img/icon/narrow.png) center center no-repeat; +} +.ico_side_fullscreen { + background: url(../img/icon/fullscreen.png) center center no-repeat; +} +.ico_side_speech { + background: url(../img/icon/so2.png) center center no-repeat; +} +.ico_side_publish { + background: url(../img/icon/list.png) center center no-repeat; +} +.ico_side_property { + background: url(../img/icon/properties.png) center center no-repeat; +} +.ico_side_print { + background: url(../img/icon/print.png) center center no-repeat; +} +.ico_side_thumbnail { + background: url(../img/icon/composs.png) center center no-repeat; +} + +.sidelist_div { + position: absolute; + z-index: 999; + padding-top: 10px; + width: 250px; + height: auto; + max-height: 700px; + overflow-y: auto; + border: solid 2px #999; + background: #f5f5f5; + border: 1px solid #999; + -webkit-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.33); + -moz-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.33); + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.33); +} +.ex { + margin: 10px; + padding: 5px; + background: #fff; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; + position: relative; + border: solid 1px #ddd; +} +.ex-totop2 { + display: block; + overflow: hidden; + width: 0px; + height: 0px; + border: 10px solid #ddd; + border-color: #ddd #f5f5f5; + border-width: 0 10px 10px 10px; + position: absolute; + left: 95px; + top: -10px; +} + +article,section,time,aside{display:block;} + +.point-time { + content: ""; + position: absolute; + width: 13px; + height: 13px; + top: 17px; + left: 30%; + background: #1c87bf; + margin-left: -4px; + border-radius: 50%; + box-shadow: 0 0 0 5px #f5f5f5; +} + +.text-red { + color: #f6393f; +} + +.text-blue { + color: #1c87bf; +} + +.text-green { + color: #95c91e; +} + +.text-yellow { + color: #ffb902; +} + +.text-purple { + color: #d32d93; +} + +.point-red { + background-color: #f6393f; +} + +.point-blue { + background-color: #1c87bf; +} + +.point-green { + background-color: #95c91e; +} + +.point-yellow { + background-color: #ffb902; +} + +.point-purple { + background-color: #d32d93; +} + +.content { + width: 300px; + margin: 0px auto; +} +.content article { + position: relative; +} +.content article > h3 { + width: 25%; + height: 20px; + line-height: 20px; + text-align: right; + font-size: 1.4em; + color: #1d1d1d; + padding: 10px 0 20px; +} +.content article section { + padding: 0 0 17px; + position: relative; +} +.content article section:before { + content: ""; + width: 5px; + top: 17px; + bottom: -17px; + left: 30%; + background: #e6e6e6; + position: absolute; +} +.content article section:last-child:before { + display: none; +} +.content article section time { + width: 25%; + min-width: 85px; + display: block; + position: absolute; +} +.content article section time > span { + display: block; + text-align: right; +} +.content article section aside { + color: #3a3a38; + margin-left: 35%; + padding-bottom: 15px; +} +.content article section .brief { + color: #9f9f9f; +} + +.awsui-popbox-arrow{ + display:none; + position: absolute; + z-index:9999999; + border:10px solid transparent; + width:0px;height:0px; +} +.awsui-popbox-arrow-inner{ + position: absolute; + z-index:9999999; + border:10px solid transparent; + width:0px;height:0px; +} +.awsui-popbox-arrow.top{ + border-bottom:10px solid rgba(0,0,0,.2); +} +.awsui-popbox-arrow-inner.top{ + border-bottom:10px solid #fff; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/pal.ws.portal.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/pal.ws.portal.css new file mode 100644 index 00000000..33060b41 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/pal.ws.portal.css @@ -0,0 +1,159 @@ +.layout_title { + margin-top: 30px; + font-size: 15px; +} + +.layout_tile_div { + width: 220px; + height: 125px; + margin: 20px 25px 0px 0px; + padding: 10px 20px; + display: inline-block; + background-color: rgb(255, 255, 255); + box-shadow: rgba(170, 170, 170, 0.3) 1px 1px 1px 0px; + position: relative; + border-radius: 2px; +} + +.layout_tile_div:hover { + box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1), 0 4px 8px 0 rgba(0,0,0,0.2); +} + +.layout_tile_div .title { + width: 200px; + height: 22px; + font-size: 17px; + /* + margin-bottom: 5px; + */ + cursor: pointer; +} + +.layout_tile_content .title { + color: rgb(15, 156, 109); +} + +.layout_tile_content .description { + /* + margin: 5px 0px; + */ + width: 150px; + color: rgb(128, 128, 128); +} + +.layout_tile_content .pal_type_icon, .layout_tile_content_stop .pal_type_icon { + height: 100px; + width: 100px; + position: absolute; + right: 10px; + bottom: 20px; +} + +.layout_tile_div .pal_down { + height: 20px; + width: 20px; + position: absolute; + right: 10px; + top: 10px; + cursor: pointer; + background: url(../img/icon/pal_down.png) no-repeat center; +} + +.layout_tile_div .layout_tile_edit { + position: absolute; + top: 35px; + right: 10px; + background-color: rgb(255, 255, 255); + line-height: 20px; + padding: 10px; + box-shadow: rgba(0, 0, 0, 0.3) 1px 1px 5px 2px; +} + +.layout_tile_div .layout_tile_edit span { + display: block; + padding: 5px 10px; + font-size: 14px; + cursor: pointer; +} + +.layout_tile_div .layout_tile_edit img { + margin-right: 10px; + width: 16px; +} + +.layout_tile_content_stop .title { + color: #989898; +} + +.layout_tile_content_stop .description { + color: #b6b6b6; +} + +.span_icon { + border: solid 1px rgb(170, 170, 170); + line-height: 8px; + height: 10px; + display: inline-block; + padding: 8px; + cursor: pointer; +} + +.span_icon.current { + background: none repeat scroll 0 0 rgb(230, 230, 230); + -webkit-box-shadow: 0 1px 3px 1px rgba(1, 1, 1, 0.15) inset; + box-shadow: 0 1px 3px 1px rgba(1, 1, 1, 0.15) inset; +} + +.table { + box-shadow: 1px 2px 10px 3px rgb(232, 232, 232); +} + +.table tbody { + background-color: #FFF; +} + +.table-thin th { + line-height: 32px !important; +} + +.table img { + cursor: pointer; +} + +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #F4F8FB; +} + +.table-hover .first_td { + border-left: solid 3px rgba(255, 255, 255, 0); + cursor: pointer; +} + +.table-hover > tbody > tr:hover > .first_td { + border-left: solid 3px #45AC8E; +} + +.text_overflow { + overflow: hidden; /*自动隐藏文字*/ + text-overflow: ellipsis;/*文字隐藏后添加省略号*/ + white-space: nowrap;/*强制不换行*/ +} +.no-pal { + position: relative; + top: 150px; + color: #AAAAAA; + text-align: center; + font-size: 14px !important; + width: 100%; + height: 120px; + line-height: 114px !important; + background: url(../img/ws/not-find-pal.png); + background-repeat: no-repeat; + background-position: center; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + -khtml-user-select: none; + cursor: default; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/portal.header.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/portal.header.css new file mode 100644 index 00000000..f1b3d50c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/portal.header.css @@ -0,0 +1,183 @@ +html, body{ + height: 100%; + margin: 0; +} + +/* 左侧菜单 */ +#menu_bar{ + height: 100%; + width: 70px; + float: left; + background-color: #21292E; +} + +.menu_bar_li{ + height: 50px; + width: 50px; + margin: 10px; + border: solid 1px #21292E; + border-radius: 6px; + cursor: pointer; +} + +.menu_bar_li.current{ + border: solid 1px #00C98B; +} + +#menubar_pal{ + background: url('../img/icon/menubar_pal.png') no-repeat center; +} + +#menubar_pal:hover, #menubar_pal.current{ + background: url('../img/icon/menubar_pal_hover.png') no-repeat center; +} + +#menubar_team{ + background: url('../img/icon/menubar_team.png') no-repeat center; +} + +#menubar_team:hover, #menubar_team.current{ + background: url('../img/icon/menubar_team_hover.png') no-repeat center; +} +#menubar_setting{ + background: url('../img/icon/menubar_setting.png') no-repeat center; +} + +#menubar_setting:hover, #menubar_setting.current{ + background: url('../img/icon/menubar_setting_hover.png') no-repeat center; +} +#menubar_bbs{ + background: url('../img/icon/menubar_bbs.png') no-repeat center; +} + +#menubar_bbs:hover, #menubar_bbs.current{ + background: url('../img/icon/menubar_bbs_hover.png') no-repeat center; +} +#menubar_help{ + background: url('../img/icon/menubar_help.png') no-repeat center; +} + +#menubar_help:hover, #menubar_help.current{ + background: url('../img/icon/menubar_help_hover.png') no-repeat center; +} +#menubar_recycle{ + background: url('../img/icon/menubar_recycle.png') no-repeat center; +} + +#menubar_recycle:hover, #menubar_recycle.current{ + background: url('../img/icon/menubar_recycle_hover.png') no-repeat center; +} + + +/* 右侧主要内容 */ +.header{ + box-shadow: rgba(170, 170, 170, 0.3) -3px 3px 5px 0px; + position: absolute; + z-index: 2; + top: 0px; + left: 70px; + right: 0px; +} + +.header_float_left{ + float: left; + height: 50px; + line-height: 50px; + vertical-align: middle; + padding: 10px 20px; +} + +#header_text{ + height: 29px; + line-height: 29px; + vertical-align: middle; + font-size: 22px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +.header_float_right{ + float: right; + height: 50px; + line-height: 50px; + vertical-align: middle; + padding: 10px 20px; +} + +.header_separater{ + height: 20px; + line-height: 20px; + vertical-align: middle; + border-left: 1px solid rgb(204, 204, 204); + margin: 0 10px; + display: inline-block; +} + +.content-icons{ + display: inline-block; + width:0; + height:0; + border-left:5px solid transparent; + border-right:5px solid transparent; +} +.down_black{ + border-top:5px solid rgb(170, 170, 170); + border-bottom:0px; +} + +.up_black{ + border-bottom:5px solid rgb(170, 170, 170); + border-top:0px; +} + +.down_black_big{ + display: inline-block; + width:0; + height:0; + border-left:8px solid transparent; + border-right:8px solid transparent; + cursor: pointer; + border-top:8px solid rgb(170, 170, 170); + border-bottom:0px; +} + +.up_black_big{ + display: inline-block; + width:0; + height:0; + border-left:8px solid transparent; + border-right:8px solid transparent; + cursor: pointer; + border-bottom:8px solid rgb(170, 170, 170); + border-top:0px; +} + +#main{ +/* background-color: rgb(245, 248, 248); */ + position: absolute; + top: 70px; + bottom: 0px; + left: 70px; + right: 0px; +} + +.head_tab { + display: inline-block; + width: 80px; + line-height: 30px; + vertical-align: middle; + text-align: center; + margin: 5px 5px; + cursor: pointer; +} + +.head_tab.current, .head_tab:hover { + background-color: #1AA47D; + color: #FFF; + border-radius: 25px; +} + +.text_overflow { + overflow: hidden; /*自动隐藏文字*/ + text-overflow: ellipsis;/*文字隐藏后添加省略号*/ + white-space: nowrap;/*强制不换行*/ +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/portal/portal.coe.public.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/portal/portal.coe.public.css new file mode 100644 index 00000000..1cf02c50 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/portal/portal.coe.public.css @@ -0,0 +1,194 @@ +@charset "UTF-8"; + +/*button start*/ + +html { + "Helvetica Neue",Helvetica,Arial,sans-serif +} +body { + font-size: 12px; + line-height: 1.333; +} + +.button { + font-size: 13px; + font-weight: 500; + line-height: 18px; + min-width: 70px; + display: inline-block; + text-align: center; + cursor: pointer; + text-decoration:none; + + border: 1px solid #787878; + +} + +.button.default { + color: white!important; + text-shadow: rgba(0, 0, 0, 0.2) 1px 1px 0; + background-color: #2179D1 8%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ABABAB',endColorstr='#454545',GradientType=0); + background-size: 100%; + background-image: -webkit-linear-gradient(top,#ABABAB,#CDCDCD 8%,#454545); + background-image: -moz-linear-gradient(top,#ABABAB,#CDCDCD 8%,#454545); + background-image: -o-linear-gradient(top,#ABABAB,#CDCDCD 8%,#454545); + background-image: -ms-linear-gradient(top,#ABABAB,#CDCDCD 8%,#454545); + background-image: linear-gradient(top,#ABABAB,#CDCDCD 8%,#454545); +} +.button.default:hover { + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ABABAB',endColorstr='#545454',GradientType=0); + background-size: 100%; + background-image: -webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ABABAB),color-stop(8%,#CDCDCD),color-stop(100%,#545454)); + background-image: -webkit-linear-gradient(top,#ABABAB,#CDCDCD 8%,#545454); + background-image: -moz-linear-gradient(top,#ABABAB,#CDCDCD 8%,#545454); + background-image: -o-linear-gradient(top,#ABABAB,#CDCDCD 8%,#545454); + background-image: -ms-linear-gradient(top,#ABABAB,#CDCDCD 8%,#545454); + background-image: linear-gradient(top,#ABABAB,#CDCDCD 8%,#545454); +} +.button.default:active { + background-color: #CDCDCD; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#545454',endColorstr='#CDCDCD',GradientType=0); + background-size: 100%; + background-image: -webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#545454),color-stop(100%,#CDCDCD)); + background-image: -webkit-linear-gradient(top,#545454,#CDCDCD); + background-image: -moz-linear-gradient(top,#545454,#CDCDCD); + background-image: -o-linear-gradient(top,#545454,#CDCDCD); + background-image: -ms-linear-gradient(top,#545454,#CDCDCD); + background-image: linear-gradient(top,#545454,#CDCDCD); +} + +.button.blue { + color: white!important; + border-color: #3995DA; + text-shadow: rgba(0, 0, 0, 0.2) 1px 1px 0; + background-color: #2179D1 8%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#74c5f6',endColorstr='#227fdf',GradientType=0); + background-size: 100%; + background-image: -webkit-linear-gradient(top,#74c5f6,#55b4f4 8%,#227fdf); + background-image: -moz-linear-gradient(top,#74c5f6,#55b4f4 8%,#227fdf); + background-image: -o-linear-gradient(top,#74c5f6,#55b4f4 8%,#227fdf); + background-image: -ms-linear-gradient(top,#74c5f6,#55b4f4 8%,#227fdf); + background-image: linear-gradient(top,#74c5f6,#55b4f4 8%,#227fdf); +} +.button.blue:hover { + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#74c5f6',endColorstr='#1d72ca',GradientType=0); + background-size: 100%; + background-image: -webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#74c5f6),color-stop(8%,#55b4f4),color-stop(100%,#1d72ca)); + background-image: -webkit-linear-gradient(top,#74c5f6,#55b4f4 8%,#1d72ca); + background-image: -moz-linear-gradient(top,#74c5f6,#55b4f4 8%,#1d72ca); + background-image: -o-linear-gradient(top,#74c5f6,#55b4f4 8%,#1d72ca); + background-image: -ms-linear-gradient(top,#74c5f6,#55b4f4 8%,#1d72ca); + background-image: linear-gradient(top,#74c5f6,#55b4f4 8%,#1d72ca); +} +.button.blue:active { + background-color: #55B4F4; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#1d72ca',endColorstr='#55b4f4',GradientType=0); + background-size: 100%; + background-image: -webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#1d72ca),color-stop(100%,#55b4f4)); + background-image: -webkit-linear-gradient(top,#1d72ca,#55b4f4); + background-image: -moz-linear-gradient(top,#1d72ca,#55b4f4); + background-image: -o-linear-gradient(top,#1d72ca,#55b4f4); + background-image: -ms-linear-gradient(top,#1d72ca,#55b4f4); + background-image: linear-gradient(top,#1d72ca,#55b4f4); +} + +/* button end*/ + +/*public +.clear{ + clear: both; + height: 1px; + margin-top: -1px; + overflow: hidden; +}*/ + + +.clear{ + clear: both; + height: 1px; + margin-top: -1px; + overflow: hidden; +} + +.radius5{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; +} +.radius3{ + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} + +.opacity8{ + filter:alpha(opacity=80); + -moz-opacity:0.8; + -khtml-opacity: 0.8; + opacity: 0.8; +} + +.center{ + margin: 0 auto; +} + + +input, textarea, div { + color: #333333; + font-family: Arial,Helvetica,sans-serif; + font-size: 13px; + outline: medium none; + resize: none; +} +div{ + word-wrap:break-word; + word-break:break-all; + +} +.link_b { + font-weight: bold; +} + +a { + color: #3366CC; + cursor: pointer; + font-family: Arial,Helvetica,sans-serif; + font-size: 13px; + text-decoration: none; +} + +.coe_cms{ + -moz-border-bottom-colors: none; + -moz-border-image: none; + -moz-border-left-colors: none; + -moz-border-right-colors: none; + -moz-border-top-colors: none; + border-color: #E8E8E8 #E8E8E8 #CCCCCC; + border-radius: 4px 4px 4px 4px; + border-style: solid; + border-width: 1px; + margin-bottom: 5px; + min-height: 200px; + background-color: #FFFFFF; +} + +.coe_cms h5{ + background-color: #F5F5F5; + color: #7B7B7B; + font-family: helvetica; + font-weight: normal; + line-height: 26px; + margin: 0; + padding-left: 5px; +} +.coe_cms_content{ + font-size:11px; + font-family: helvetica; + font-weight: normal; + margin-top:3px; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/portal/portal.coe.social.stream.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/portal/portal.coe.social.stream.css new file mode 100644 index 00000000..de14739d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/portal/portal.coe.social.stream.css @@ -0,0 +1,281 @@ +@charset "UTF-8"; + +.social_main{ + width: 730px; + background: url("../../img/wash-white-30.png") repeat scroll 0 0 transparent; + margin: 0 auto; + padding: 15px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); +} +.social_left{ + border: 1px solid #999999; + margin:0 auto; + background-color: #FFFFFF; + margin: 0 10px; + padding: 5px 10px; + min-height: 600px; +} + +.social_right{ + border: 1px solid #999999; + float: right; + height: 100%; + min-width: 300px; + min-height: 500px; + margin-left: 10px; + width: 300px; + background-color: #FFFFFF; +} + +.social_share{ + +} + +.social_share_title{ + padding: 10px 10px 5px 10px; + font-size: 150%; + font-weight: bold; + font-family: arial,sans-serif; + margin-top:5px; +} + +.social_textarea{ + border-bottom: 1px solid #999999; + margin: 0 10px; + padding-bottom: 20px; + border-radius: 0px 0px 0px 7px; +} + +.social_textarea_edit{ + display:none; +} + +.social_testarea_onlyread{ + border: 1px solid #666666; + color: #999999; + line-height: 50px; + min-height: 50px; + padding-left: 10px; + cursor: pointer; + border-radius: 7px 0px 0px 0px; +} + +.social_text{ + border: 1px solid #999999; + min-height: 50px; + border-radius: 7px 0px 0px 0px; +} +.social_editable{ + border: medium none; + cursor: text; + line-height: 18px; + margin:5px; + min-height: 16px; + overflow: hidden; + text-align: left; + width: 92%; + border: medium none; + +} + +.social_colse{ + color: #999999; + cursor: pointer; + float: right; + font-weight: bold; + display:inline; + margin-top:5px; + margin-right:5px; +} + +.social_btn{ + padding-top: 5px; + text-align: right; +} + +.social_count_area{ + color: #999999; + text-align:center; + line-height:18px; + padding:4px 10px; + vertical-align: middle; +} + +.social_count_area em{ + font-size: 20px +} + +.social_count_area err{ + font-size: 28px; + color: #E56C0A; +} + +.social_project{ + border: 1px solid #999999; +} + +.social_project_err{ + border: 1px solid #E56C0A!important; +} + +.container_filter{ + background-color: #FFFFFF; + float: right; + margin-right: 5px; + margin-top: -8px; + cursor: pointer; +} + +.container_filter_menu{ + border: 1px solid #888888; + position: absolute; + min-width: 100px; + display:none; + width: 80px; +} + +.filter_menu_item{ + cursor: pointer; + padding: 5px 10px; +} + +.filter_menu_item:hover{ + background-color: #ddd; +} + +.filter_list_select{ + background-color: #bbb!important; +} + +.social_content{ + min-height:100px; +} + +.social_stream_item{ + border-bottom: 1px solid #EEEEEE; + padding: 15px 0; +} + +.social_stream_main{ +} + +.social_stream_left{ + float:left; + margin-left: 5px; + width: 55px; +} + +.social_stream_right{ + float:left; + width:510px; +} + +.social_stream_title{ + +} + +.social_stream_legend{ + border-bottom: 1px dashed #DDDDDD; +} +.social_stream_date{ + color: #999999; +} + +.social_stream_content{ + word-wrap:break-word; + word-break:break-all; + padding: 5px 0; + margin-top:8px; + color: black; +} + +.social_stream_font{ + color: #3366FF; + cursor: pointer; +} + +.social_stream_replay_item{ + padding: 8px; + border-bottom: 1px dashed #DDDDDD; +} + +.social_replay_left{ + float: left; +} + +.social_replay_right{ + float: left; + max-width:440px; +} + +.social_replay_content{ + word-wrap:break-word; + word-break:break-all; +} +.social_replay_content span{ + word-wrap:break-word; + word-break:break-all; +} +.social_stream_replay_new{ + padding: 5px; +} +.social_replay_new_edit{ + display:none; + margin-top:8px; +} + +.social_replay_new_only{ + border: 1px solid #999999; + padding: 5px; + cursor:pointer; +} + +.social_replay_new_right{ + float:left; + +} +.social_replay_new_left{ + float: left; +} +.social_replay_colse{ + +} + +.social_replay_new_text{ +} +.social_replay_new_btn{ + text-align:right; +} + +.social_replay_new_area{ + + width:455px; +} + +.social_stream_get_more{ + background-color: #EEEEEE; + border: 1px solid #999999; + cursor: pointer; + padding: 10px 5px; + text-align: center; + margin-bottom: 10px; +} + +.social_stream_get_more:hover{ + background-color: #bbb!important; +} + + +.divPhoto{ + float:right; +} +.replayPhoto{ + max-width:32px; + max-height:32px; + cursor: pointer; +} +.mainPhoto{ + height: 45px; + width:45px; + cursor: pointer; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/public.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/public.css new file mode 100644 index 00000000..3dfaedab --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/public.css @@ -0,0 +1,645 @@ +/* +// ---------------------------------------------------------------------- +// coe样式表(深海洋绿) +// 本样式表适用于coe 产品 +// ---------------------------------------------------------------------- +*/ +@charset "UTF-8"; +/*默认的页面样式*/ + +html body{ +margin: 0px; +padding: 0px; +font-size: 12px; +background: url("../img/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; +} +.coe_main_content{ + /*width:924px;*/ + background: url("../img/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8; +} + +.radius5{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; +} +.radius3{ + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} + +.opacity8{ + filter:alpha(opacity=80); + -moz-opacity:0.8; + -khtml-opacity: 0.8; + opacity: 0.8; +} + +.center{ + margin: 0 auto; +} +.link_b { + font-weight: bold; +} + +a { + color: #3366CC; + cursor: pointer; + font-size: 13px; + text-decoration: none; +} + +.coe_cms{ + -moz-border-bottom-colors: none; + -moz-border-image: none; + -moz-border-left-colors: none; + -moz-border-right-colors: none; + -moz-border-top-colors: none; + border-color: #E8E8E8 #E8E8E8 #CCCCCC; + border-radius: 4px 4px 4px 4px; + border-style: solid; + border-width: 1px; + margin-bottom: 5px; + min-height: 200px; + background-color: #FFFFFF; +} + +.coe_cms h5{ + background-color: #F5F5F5; + color: #7B7B7B; + font-family: helvetica; + font-weight: normal; + line-height: 26px; + margin: 0; + padding-left: 5px; +} +.coe_cms_content{ + font-size:11px; + font-family: helvetica; + font-weight: normal; + margin-top:3px; +} +/*用户*/ +.icon_user{ + background:url('../../../aws_img/user6.gif') no-repeat; +} +.icon_add{ + background:url('../../../aws_img/add.gif') no-repeat; +} +.icon_remove{ + background:url('../../../aws_img/Delete.gif') no-repeat; +} +.icon_save{ + background:url('../../../aws_img/save.gif') no-repeat; +} +.icon_enter{ + background:url('../../../aws_img/user6.gif') no-repeat; +} +.icon_cancal{ + background:url('../../../aws_img/undo_edit.gif') no-repeat; +} +.icon_language{ + background:url('../../../aws_img/org_securitys.gif') no-repeat; +} +.icon_config{ + background:url('../../../aws_img/config_item.gif') no-repeat; +} +.icon_rename1{ + background:url('../../../aws_img/rename.png') no-repeat; +} +.icon_edit{ + background:url('../../../aws_img/edit.gif') no-repeat; +} +.icon_next_step{ + background:url('../../../aws_img/navdown.gif') no-repeat; +} +.icon_up_step{ + background:url('../../../aws_img/navup.gif') no-repeat; +} +.icon_process{ + background:url('../../../aws_img/process.gif') no-repeat; +} +.icon_admin{ + background: url("../../aws_css/coe/images/admin.gif") no-repeat scroll 50% 50% transparent; +}.fixedToolbar{ + background:#F2F2F2; + z-index:2008; + position:fixed; + left:0px; + width:100%; + top:0px; +} +.fixedToolbar2{ + background:#F2F2F2; + z-index:2008; + left:0px; + width:100%; + top:0px; + position:fixed; + + } + #help { + margin: 0; + border: 0; + padding: 0; + clear: both; + float: none; + font-size: 1px; +} +.fixedToolbar1{ + background:#F2F2F2; + position:fixed; + width:166px; +} +/*列表选择样式*/ + +.componentTypSelect { + width:393px; + font-weight: normal; + font-family:"Arial", "Arial", "Helvetica", "sans-serif"; + font-size: 12px; +} +.componentFixedToolbar{ + background:#ffffff; + z-index:2008; + position:fixed; + left:0px; + width:100%; + top:0px; +} + +.draggableDiv{ + width:96px; + height:56px; + /*padding:0px;*/ + text-align:center; + line-height:56px; + /*border: 1px solid #D3D3D3;*/ + border-radius: 5px 5px 5px 5px; + font-size: 12px; + overflow: hidden; + cursor:pointer; + margin:0 auto; + + word-break:break-all ; +} +.draggableDivGray{ + /*background: url("../img//wf_WorkFlow_Coe_Language_Dimension_Draggable1.gif") repeat-x scroll 0 0 #A39263;*/ + background: url("../img//Draggable11.gif") +} +.draggableDivBlue{ + /*background: url("../img//wf_WorkFlow_Coe_Language_Dimension_Draggable2.gif") repeat-x scroll 0 0 #98CBFE;*/ + background: url("../img//Draggable22.gif"); + +} +.draggableDivPink{ + /*background: url("../img//wf_WorkFlow_Coe_Language_Dimension_Draggable2.gif") repeat-x scroll 0 0 #98CBFE;*/ + background: url("../img//Draggable44.gif"); + +} + +.draggableTable{ + max-width:116px; + min-width:116px; + width:116px; + max-height:70px; + min-height:70px; + height:70px; + text-align:center; + border-right:#D3D3D3 solid 2px; + padding:5px; + margin:5px 5px; +} +.draggableClick{ + border: 4px solid #AFC873; + width:94px; + height:54px; + /*background: url("../img//Draggable3.gif");*/ +} +.projectListImg{ + width:29px; + height:34px; + background: url("../../../aws_img/wf_document/icon.gif") 50% 50% no-repeat; + +} + +.t1 { + color: #2B5C8D; + font-size: 14px; + font-weight: bold; +} +.t2 { + color: #999999; + font-size: 12px; + height: 20px; + line-height: 20px; +} + + +/*Tree图标icon样式*/ +.icon-tree-nodes-root { + background: url("../img/pl/process.home.png") no-repeat scroll 0 0 transparent !important; +} + +.icon-tree-nodes-group { + background: url("../../../aws_img/profile2.gif") repeat scroll 0 0 transparent !important; +} + +.icon-tree-nodes-group2 { + background: url("../img/tree_nodes_group.gif") no-repeat scroll 50% 50% transparent !important; +} +.icon-tree-nodes-dimension { + background: url("../../../aws_img/process.group.gif") repeat scroll 0 0 transparent !important; +} +.icon-tree-nodes-dimension2 { + background: url("../img//tree_nodes_dimension.gif") no-repeat scroll 50% 50% transparent !important; +} +.icon-tree-nodes-process { + background: url("../../../aws_img/process.def.gif") repeat scroll 0 0 transparent !important; +} +.icon-tree-nodes-process2 { + background: url("../img//tree_nodes_process.gif") no-repeat scroll 50% 50% transparent !important; +} + +.bestAdminister{ + width:200px; +} + +.project_dialog_bg{ + background: url("../img//dialog_bg2.jpg") repeat-x scroll left top #DBDBDB; +} + +.project_dialog_line_spacing{ + background: url("../img//dialog_line2.jpg") repeat-x scroll left top #DBDBDB; +} + +.linkUP{ + border-top :2px double #f00; +} +.likeDown{ + border-bottom:2px double #f00; +} +.likeRight{ + border-right:2px double #f00; +} +.likeLeft{ + border-left:2px double #f00; +} +.awsTagedit{ + border: 0px; + width: 100%; + text-align:center; + padding-top:0px; + float:right; + font-size:12px; +} +.awsTageditTd{ + padding:0px 2px; + margin:0px; +} + +.selectTagedit{ + background: #F9F9C5 url(tageditImg/disc.png) 4px center no-repeat; + border: 1px solid #CAD8F3; + padding: 1px 0 1px 1px; + -moz-border-radius: 8px 4px 4px 8px; + -webkit-border-radius: 8px 4px 4px 8px; + border-radius: 8px 4px 4px 8px; + text-align:center; + width: 90px; +} +.doSelectTagedit{ + border: 1px solid #e0a949; + background-color: #FBEC88; + width: 90px; +} + +.layoutRegionNorth{ + height:30px; + text-align:right; + background-color: #F5F4F2; + background: url("../../aws_js/jquery/jquery-easyui-1.2.2/themes/default/images/panel_title.gif") repeat-x scroll 0 0 transparent; + +} +.processListDesc{ + color: #888888; + font-family: Verdana,Arial,Helvetica,sans-serif; + font-size: 12px; + padding-left: 2px; +} + +.processListBorder{ + border: 1px solid #8AAED2; + -moz-border-radius: 8px 4px 4px 8px; + -webkit-border-radius: 8px 4px 4px 8px; + border-radius: 8px 4px 4px 8px; +} + +.aws-dialog-title{ + background-color: #E8EFF4; + border-left: 1px solid #FFFFFF; + border-right: 1px solid #FFFFFF; + border-top: 1px solid #FFFFFF; + height: 29px; + overflow: hidden; + width:100%; + height:28px; + padding:0px; + margin:0px; +} + +.aws-dialog-button-colse{ + background-image: url("images/aws-dialog.gif"); + background-position: 0 0; + cursor: pointer; + float: right; + font-size: 0; + height: 13px; + line-height: 0; + margin: 0 4px 0 0; + overflow: hidden; + width: 13px; +} + +.aws-dialog-button-colse-hover{ + background-position: -13px 0; +} + +.aws-dialog-title-content { + color: #333333; + font-size: 16px; + font-weight: bold; + height: 21px; + line-height: 15px; + overflow: hidden; + padding: 0 0 0 8px; +} + +/*取消按钮*/ +.btn-gray-big{ + font: 12px 'Lucida Grande', 'Lucida Sans Unicode', Arial, Verdana, sans-serif; + display: inline-block; + height: 40px; + padding-right: 10px; + text-decoration:none; + background: transparent url(images/btn_biggrey_right.png) 100% 0 no-repeat; +} +.btn-gray-big span { + cursor:pointer; + display: block; + padding: 10px 16px 11px 25px; + font-size: 16px; + color: #6F6F6F; + text-shadow: 0 1px white; + background: transparent url(images/btn_biggrey_left.png) 0 0 no-repeat; +} + +.btn-gray-big:hover{ + text-decoration:none; + background: transparent url(images/btn_biggrey_right_hover.png) 100% 0 no-repeat; +} +.btn-gray-big span:hover{ + background: transparent url(images/btn_biggrey_left_hover.png) 0 0 no-repeat; +} +/*下一步*/ +.btn-next{ + display: inline-block; + height: 40px; + padding-right: 15px; + text-decoration:none; + background: transparent url(images/btn_next_right.png) 100% 0 no-repeat; +} +.btn-next span { + cursor:pointer; + display: block; + padding: 10px 18px 11px 30px; + font-size: 16px; + color: white; + text-shadow: 0 1px #448BD8; + background: transparent url(images/btn_next_left.png) 0 0 no-repeat; +} +.btn-next:hover{ + text-decoration:none; + background: transparent url(images/btn_next_right_hover.png) 100% 0 no-repeat; +} +.btn-next:hover span{ + background: transparent url(images/btn_next_left_hover.png) 0 0 no-repeat; +} + +/*上一步*/ +.btn-prev{ + display: inline-block; + height: 40px; + padding-left: 15px; + text-decoration:none; + background: transparent url(images/btn_prev_right.png) 0 0 no-repeat; +} +.btn-prev span { + cursor:pointer; + display: block; + padding: 10px 22px 11px 26px; + font-size: 16px; + color: white; + text-shadow: 0 1px #448BD8; + background: transparent url(images/btn_prev_left.png) 100% 0 no-repeat; +} +.btn-prev:hover{ + text-decoration:none; + background: transparent url(images/btn_prev_right_hover.png) 0 0 no-repeat; +} +.btn-prev:hover span{ + background: transparent url(images/btn_prev_left_hover.png) 100% 0 no-repeat; +} + +.grayMessage{ + opacity: 0.4; + filter: alpha(opacity=40); +} + +.dimension-tags-ul{ + float:left; + list-style:none; + margin: 0; + padding: 0; +} + +.dimension-tags-ul li{ + float:left; + height:24px; + width:300px; + font-size:12px; + font-family:Arial, Helvetica, sans-serif,"宋体"; + margin:3px; + cursor:pointer; + border-radius:5px; + /*color:#666666;*/ + cursor: pointer; +} + +.dimension-tags-ul li .contentDiv{ + height:22px; + line-height:22px; + border:1px solid #ffffff; + width:298px; + border-radius:5px; +} + +.dimension-tags-ul li .contentDiv .leftDiv{ + float:left; + padding-left:5px; +} +.dimension-tags-ul li .contentDiv .rightDiv{ + float:right; +} +.dimension-tags-ul li .contentDiv .rightDiv a{ + width:15px; + height:24px; + _height:22px; + background:url(images/aws-dialog1.gif) 0 50% no-repeat; + cursor: pointer; + display:block; +} +.dimension-tags-ul li .contentDiv .rightDiv a:hover{ + background-position: -13px 50%; +} + +.dimension-tags-ul li .contentDiv .rightDivNo{ + float:right; +} +.dimension-tags-ul li .contentDiv .rightDivNo a{ + width:15px; + height:24px; + _height:22px; + cursor: pointer; + display:block; +} + +.light-green{ + border:1px solid #AAB792; + background-color:#759DD5; + background: url("images/green.gif") repeat-x scroll 0 0 transparent; + color: #fff; +} +.light-green:hover{ /*border:1px solid #6f8542;*/} + +.light-orange{ + border:1px solid #D6C39D; + background-color:#EFAA15; + background: url("images/yellow.gif") repeat-x scroll 0 0 transparent; + color: #000; +} +.light-orange:hover{ /*border:1px solid #d19e44;*/} + +.light-purple{ + border:1px solid #8883A8; + background-color:#eef2fb; +} +.light-purple:hover{ /*border:1px solid #574e85;*/} + +.clear{ + clear:both; + border:none; +} + +.dimension-tags-ul li .contentDiv .tickDiv{ + float:right; +} + +.dimension-tags-ul li .contentDiv .tickDiv a{ + width:15px; + height:24px; + _height:22px; + background:url(tageditImg/tick.png) 50% 50% no-repeat; + cursor: pointer; + display:block; +} + +.dimension-tags-ul li .contentDiv .tickDiv a:hover{ + background:url(tageditImg/tick1.png) 50% 50% no-repeat; +} + +.accordionLeft{width:200px;padding:10px; margin:0px; padding:0px;background-color:whiteSmoke; float:left} +.accordionDiv{margin:0px;border:0px;padding-top:5px;min-height: 140px;text-align: center;} +.processTypesUl{margin:20px !important;} +/**::-webkit-scrollbar { + width: 12px; + height: 12px; +} +::-webkit-scrollbar-track-piece { + width: 11px; + height: 11px; +} +::-webkit-scrollbar-thumb { + border:2px solid #fff; + border-radius: 6px; + background: #d7d7d7; +} +::-webkit-scrollbar-thumb:hover { + background: #C3C3C3; +} +**/ +.popWindow{ + border:#909090 0px solid;background:#E8E8D0;color:#333;PADDING:5px; + filter:progid:DXImageTransform.Microsoft.Shadow(color=#909090,direction=120,strength=4); + -moz-box-shadow: 2px 2px 10px #909090; + -webkit-box-shadow: 2px 2px 10px #909090; + -ms-box-shadow: 2px 2px 10px #909090; + -o-box-shadow: 2px 2px 10px #909090; + box-shadow: 1px 1px 10px #909090; +} +/*清理浮动*/ +.clearfix:after { + clear: both; + content: '.'; + display: block; + height: 0; + visibility: hidden; +} +.dwSenTdL { + vertical-align: top; + padding-top: 5px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.dwSenTdL .stext { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 180px; + height: 16px; +} + +.dwSenTdR { + vertical-align: top; + padding-left: 1px; +} + +.dwSenTdR .awsui-textbox { + width: 176px; +} + +.dwSenTdR .awsui-select { + width: 188px; + height: 26px; +} + +.inputDiv { + padding-top: 3px; +} + +.inputDiv input { + width: 176px; +} + +.inputDiv .awsui-select { + width: 186px; + height: 26px; +} + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/coe.social.papershow.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/coe.social.papershow.css new file mode 100644 index 00000000..ee4084e2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/coe.social.papershow.css @@ -0,0 +1,69 @@ +article{ + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; + width: 220px; + float:left; + margin-left:10px; + margin-top:10px; + margin-bottom:-10px; + border:1px solid #ccc; +} +article.post { + background-color: white; + margin-bottom: 30px !important; + position: relative; + -webkit-border-radius: 5px; + border-radius: 5px; +} +article.post::after { + content: "."; + background: url(images/png.png) no-repeat 0 -11px; + width: 100%; + height: 10px; + display: block; + text-indent: -9999px; + position: absolute; + bottom: -10px; + left: 3px; +} +article.post .entry { + padding: 0 10px 10px 10px; + word-wrap: break-word; + min-height:230px; + max-height:230px; +} +article.columns { + float: left; + display: inline; + margin-left: 10px; + margin-right: 0px; +} +article a:link, a:visited { + margin-top:10px; + color: #000; + text-decoration: none; + outline: 0; +} +article a:hover { + color:#555; +} +article a:link { +-webkit-tap-highlight-color: #F60; +} +article div{ + background-color:#EAF8F6; + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; + border-radius: 5px 5px 5px 5px; +} +article img{ + border:0; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/coe.social.style.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/coe.social.style.css new file mode 100644 index 00000000..3f21a043 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/coe.social.style.css @@ -0,0 +1,22 @@ +.scrolltop { + background-attachment: scroll; + background-clip: border-box; + background-color: transparent; + background-image: url("../../img/socialStyle/gotop.png"); + background-origin: padding-box; + background-position: 0 0; + background-repeat: no-repeat; + background-size: auto auto; + bottom: 60px; + cursor: pointer; + height: 55px; + line-height: 40px; + position: fixed; + width: 51px; + z-index: 99999; +} + +.scrolltop:hover { + background-position: 0 -110px; +} + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/network/network.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/network/network.css new file mode 100644 index 00000000..af223712 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/network/network.css @@ -0,0 +1,2630 @@ +@CHARSET "UTF-8"; +body{ + overflow: hidden; + overflow-x: hidden; +} +::-webkit-scrollbar +{ + width: 8px; + height: 8px; +} +::-webkit-scrollbar-track-piece +{ + width: 11px; + height: 11px; +} +::-webkit-scrollbar-thumb +{ + border-width: 1px; + border-style: solid; + border-color: #fff; + border-radius: 6px; + background: #d7d7d7; +} +::-webkit-scrollbar-thumb:hover +{ + background: #C3C3C3; +} +#header_nav{ + width: auto; + margin-left: 10px; + margin-right: 10px; +} +/***************Layout Styles*******************/ +.layout_container{ + position: relative; +} +.bench_layout{ + height: 1000px; +} +.layout_left{ + width: 199px; + border-right: 1px solid #C6C8CC; + background: #F0F0F0 url(../images/diagrams/left_bg.jpg) right top repeat-y; + position: absolute; +} +.layout_main{ + background: #FFF; + margin-left: 200px; +} +.content_container{ + position: relative; +} +.content_layout{ + overflow: auto; +} +.content_main{ + margin-right: 240px; + padding: 20px; +} +.content_right{ + position: absolute; + width: 219px; + border-left: 1px solid #C6C8CC; + background: url(../images/diagrams/right_bg.png) repeat-y; + padding: 20px 10px; + right: 0px; + top: 0px; +} +/**************Left Styles**********************/ +.network_user{ + padding: 15px 20px 5px; + position: relative; +} +.network_user a{ + display: block; + font-weight: bold; + color: #666; + text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.9); +} +.network_user a:hover{ + color: #4183C4; + text-decoration: none; +} +.network_user .img_shadow{ + display: block; + position: absolute; + width: 48px; + height: 48px; + -webkit-box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3); + -moz-box-shadow: inset 0 0 3px rgba(0,0,0,0.3); + -o-box-shadow: inset 0 0 3px rgba(0,0,0,0.3); + box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3); +} +.network_user img{ + width: 48px; + height: 48px; + box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 1px 0 white; + -moz-box-shadow: 0 1px 0 #fff; + -o-box-shadow: 0 1px 0 #fff; + box-shadow: 0 1px 0 white; + margin-right: 5px; + float:left; + vertical-align: middle; +} +.network_user .name{ + height: 48px; + display: table-cell; + vertical-align: middle; +} +.layout_left h2{ + text-align: center; + text-shadow: 1px 1px 1px #FFF; + color: #666; +} +.left_nav{ + margin-top: 10px; +} +.left_nav .separator{ + margin: 5px auto; + width: 160px; + border-top: #DCE1E6 1px solid; + border-bottom: #F7F9FB 1px solid; + height: 0px; +} +.left_nav div{ + cursor: pointer; + height: 33px; + line-height: 33px; + padding-left: 25px; + font-weight: bold; +} +.left_nav .child{ + padding-left: 40px; + font-weight: normal; +} +.left_nav div:hover{ + background: url(../images/diagrams/hover_on.png) right 0px no-repeat; +} +.left_nav div.active{ + background: url(../images/diagrams/hover_on.png) right -33px no-repeat; +} +.left_nav div.active:hover{ + background: url(../images/diagrams/hover_on.png) right -33px no-repeat; +} +.left_nav .ico{ + display: inline-block; + float: left; + margin: 6px 5px 5px 0px; +} +.icon-teams-big{ + background-position: 0px 0px; + width:24px;height:24px; +} + +.counter { + position: relative; + display: inline-block; + margin: 0 0 0 25px; + padding: 1px 8px 1px 8px; + height: auto; + font-family: Helvetica, arial, freesans, clean, sans-serif; + font-size: 8px !important; + line-height: 14px; + text-align: center; + vertical-align: text-top; + color: #777; + background: white; + border-top: 1px solid #ccc; + border-radius: 8px; + font-weight: normal; +} +.counter:hover{ + color: #fff; + background: #3995DA; +} + +#folderlist_panel{ + padding: 5px 0px; +} +#folderlist_panel ul li{ + padding-left:20px; +} +#folderlist_panel ul li span{ + display:block; + padding:5px; + cursor: pointer; +} +#folderlist_panel ul li span:hover{ + color: white; + background-color:#4183C4; + background-image: -moz-linear-gradient(top, #08C, #0077B3); + background-image: -webkit-linear-gradient(top, #08C, #0077B3); + background-image: -o-linear-gradient(top, #08C, #0077B3); + background-image: linear-gradient(to bottom, #08C, #0077B3); + background-repeat: repeat-x; +} +.folder_tree_icon{ + width:16px; + height:16px; + margin-right:5px; + vertical-align: text-top; +} +.ico{ + background: url(../images/network/icons.png) no-repeat; + display: inline-block; + width: 16px; height: 18px; +} +.ico.home{ + background-position: 0px 0px; +} +.ico.noti{ + background-position: 0px -20px; +} +.ico.teams{ + background-position: 0px -40px; +} + +.ico.invite{ + background-position: 0px -60px; +} +.ico.follow{ + background-position: 0px -80px; +} +.ico.removeme{ + background-position: 0px -141px; + cursor:pointer; +} +.ico.setting{ + background-position: 0px -158px; +} +.ico.follower{ + background-position: 0px -100px; +} +.ico.suggest{ + background-position: 0px -120px; +} + +.ico.bt{ + background: url(../images/diagrams/icons.png) no-repeat; + display: inline-block; + width: 18px; height: 18px; + float:left; margin: 4px 5px 0px 0px; +} +.ico.folder_list{ + background: url(../images/diagrams/icons.png) no-repeat; + display: inline-block; + background-position: -28px -21px; + width: 24px; + height: 22px; +} +.ico.diagram{ + background: url(../images/diagrams/icons.png) no-repeat; + display: inline-block; + background-position: -28px -43px; + width: 24px; + height: 22px; +} +.ico.delete{ + background-position: -55px 0px; +} +.ico.view{ + background-position: -55px -22px; +} +.ico.clear_trash{ + background-position: -55px -44px; +} +.ico.restore{ + background-position: -79px 0px; +} +.ico.download{ + background-position: -79px -22px; + width: 19px; +} +.ico.folder_add{ + background-position: -79px -43px; +} +.ico.dm_add{ + background-position: -103px -44px; +} +.ico.import{ + background-position: -105px -22px; + width: 19px; +} +.ico.edit{ + background-position: -104px 0px; +} + +/**************Main Layout Styles**********************/ +.dir{ + border-bottom: 1px solid #E5E5E5; + height: 38px; + line-height: 38px; + margin-left: 20px; +} +.dir a:last-child{ + color: #888; +} +.dir span{ + color: #888; +} +.dir .split{ + color: #A6A6A6; + display: inline-block; + padding: 0px 5px; +} +.main_btns{ + height: 30px; + padding: 12px 20px 15px 0px; + margin-left:20px; + background: url(../images/diagrams/content_bg.png) center bottom repeat-x; +} +.main_btns .button, .main_btns .btn_group{ + margin-right: 2px; + font-weight: normal; +} +.main_btns .right{ + float: right; +} +.main_btns .right li{ + float: left; +} +.viewtype{ + float: right; + width:80px; + height:30px; + display: inline-block; + margin-left: 3px; +} +.viewtype span{ + overflow: hidden; + display:block; + float:left; + cursor:pointer; + width:40px;height:30px; + background:url(../images/diagrams/icons.png) no-repeat; +} +.viewtype .list{ + background-position: 0px -66px; +} +.viewtype .icon{ + background-position: -40px -66px; +} +.viewtype .list.current{ + background-position: 0px -96px; +} +.viewtype .icon.current{ + background-position: -40px -96px; +} +.viewtype .current:hover{ + background-image:url(../images/diagrams/icons.png); +} +.btn_operation, .btn_publish{ + display: none; +} +.private-link{ + padding:0px 5px;margin:5px 0px;border:1px solid #ddd;height:26px;line-height:26px; + display:none; + position: relative; +} +.private-link input{ + border:0px;width:95%; + color:#4183C4; + height:26px;line-height:26px; +} +.publish_opt_link{ + line-height:24px;display:none; +} +.private-link-selected{ + box-shadow:0 0 2px #ddd inset; + -moz-box-shadow:0 0 2px #ddd inset; + -ms-box-shadow:0 0 2px #ddd inset; + -o-box-shadow:0 0 2px #ddd inset; + +} +/***************** Items **********************/ +.item_list{ +} +.item_list .file_item:hover{ + background-color: #F3F3F3; +} +.item_list .selected{ + background-color: #63ABF7; + color: #FFF; +} +.item_list .selected a{ + color: #FFF; +} +.item_list .selected:hover{ + background-color: #63ABF7; + box-shadow: none; +} +.folder_list, .diagram{ + margin: 9px 5px 0px 0px; + float: left; +} +.item_list .list_item, .header{ + border-bottom: 1px solid #EBEBEB; + height: 40px; + padding-left: 10px; +} +.item_list li.header{ + font-weight: bold; + color: #555; +} +.item_list li.header:hover{ + background-color: transparent; +} +.item_list .list_item div, .item_list .header div{ + line-height: 40px; + float:left; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.item_list .title{ + width: 60%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.item_list .owner{ + width: 20%; +} +.item_list .modified{ + width: 20%; +} +.icon_item{ + float: left; + margin: 0px 10px 10px 0px; + padding: 10px; + border-radius: 5px; +} +.icon_item:hover{ + box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.1); +} +.icon_item .thumb{ + border: 1px solid #D7D7D7; + background-color: #FFF; + position: relative; +} +.icon_item .thumb img{ + width: 198px; + height: 198px; +} +.icon_item .thumb_folder{ + border-color: transparent; + background-color: transparent; +} +.icon_item .title{ + margin-top: 10px; + text-align: center; + width: 100%; +} +#sort_menu li, #coll_role_menu li{ + padding-left: 5px; +} +#sort_menu span, #coll_role_menu span{ + display: inline-block; + float:left; + width: 24px; + height: 24px; + vertical-align: middle; +} +.popmenu .selected{ + background: transparent url(../images/common.png) -5px -302px no-repeat; +} +#more_menu_chart a{ + display: block; +} +.items_clear{ + display: block; + clear: both; + text-align: center; +} +.publiced{ + padding: 2px 4px; + font-size: 10px; + line-height: 10px; + color: #FFF; + background-color: #8FCA15; + -webkit-text-size-adjust:none; +} +.icon_item .publiced{ + position: absolute; + right: 1px; + bottom: 1px; +} +.list_item .publiced{ + left: 20px; + bottom: 1px; +} +#team_add_items li{ + padding: 10px 0px; +} +#team_add_items span{ + display: inline-block; + text-align: right; + width: 110px; + padding: 8px 5px 0px 0px; + vertical-align: top; +} +.preview-user{ + padding:15px 0px 0px 5px; +} +.preview-user-fullName{ + font-size:15px; + font-weight: bold; + color:#4183C4; +} +/************************** Preview Items******************/ +.preview{ + +} +.preview .thumb{ + width: 180px; + height: 180px; + margin: 0px auto; + border: 1px solid #C6C8CC; +} +.preview .thumb img{ + width: 180px; + height: 180px; +} +.preview .split{ + margin: 10px auto; + border-top: #EBEBEB 1px solid; + height: 0px; +} +.pre-box{ + color: #666; +} +.pre-box h3{ + margin: 0px 0px 5px; +} +.pre-box ul{ + line-height:20px;padding-left:5px; +} +.pre-box ul li span{ + color:#333; +} +#file_tab_attr ul{ + float: left; + width: 270px; + text-align: left; +} +#file_tab_attr li{ + padding: 3px 0px; +} +#file_tab_attr span { + display: inline-block; + width: 80px; + text-align: right; + margin-right: 10px; +} +#file_tab_attr input { + width: 150px; +} +#file_tab_attr select { + width: 160px; +} +.right_moudle_title{ + font-weight: bold; + margin: 15px 0px 5px; + font-weight: bold; + color: #444; + font-size: 13px; +} +.team_home_notes .type_icon{ + margin: 0px; +} +.team_home_notes li{ + padding-top: 10px; + display: block; +} +.team_home_notes div{ + color: #999; +} +/************************team files new*********************************/ +.empty_tip{ + padding-top:135px; + text-align:center;font-weight:bold;font-size:16px;color:#555; + background:url(../images/diagrams/folder_empty.png) center top no-repeat; +} +#new_diagram_types{ + text-align:center; + overflow: hidden +} +#new_diagram_types div{ + float: left; + height:100px; + line-height:100px; + width:220px; + font-size:15px; + font-weight:bold; + background: #F2F2F2; + cursor: pointer; +} +#new_diagram_types div:hover{ + background:#ddd; +} + +.dlg_new_diagram_main{ + border:1px solid #ddd; + border-radius:3px; +} +.dlg_new_diagram_main_content{ + height:400px; + overflow-y:scroll; + width:800px; + padding: 0px 0px 15px 15px; + margin-top: 5px; +} +.newdiagram_list{ + float: left; + margin: 10px 10px 0px 0px; + padding: 10px; + border-radius: 5px; +} +.newdiagram_list:hover { + box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.1); + background:#f3f3f3; +} +.newdiagram_selected{ + background:#63abf7; + color: white; +} +.newdiagram_selected:hover{ + background:#63abf7; +} + +.newdiagram_list .thumb1{ + border: 1px solid #D7D7D7; + background-color: #FFF; + position: relative; +} +.newdiagram_list .thumb1 img{ + width: 160px; + height: 160px; +} +.newdiagram_list .title1{ + margin-top: 10px; + text-align: center; + width: 160px; +} +#publish_addtags{ + display: inline-block; + width: 190px; + max-height: 130px; + overflow-y: auto; +} +#publish_addtags #tag_input{ + width: 100%; +} +.publish_split{ + margin: 5px 0px; height: 1px; background: #E5E5E5; +} +.pub_items{ + float: left; + width: 50%; +} +.pub_items li{ + padding: 5px 0px; +} +.pub_items li label { + font-weight: bold; + display: inline-block; + width: 70px; + text-align: right; + margin-right: 5px; + color: #888; +} +.export-box{ + margin: 10px 0px 5px; + color:#5B636B; +} +.export-list{ + padding: 5px 0px; border-bottom:1px solid #EFEFEF; +} +.export-list li{ + display:inline-block; +} +.export-list .first{ + width:320px; +} +.export-list.h{ + font-weight:bold; +} +.export-list input{ + vertical-align: middle; +} +.export-menu{ + line-height:20px; font-weight:bold; +} +.export_des{ + line-height: 14px; font-size:12px; color:#666; display:block; font-weight:normal; padding-left:25px +} +.suffix{ + font-weight:normal; +} +#colla_suggest_box h3{ + margin: 10px 0 5px 0; + line-height: 30px; + font-size: 15px; + font-weight: bold; + color: #5B636B; + border-bottom: 1px solid #CCC; +} +#colla_suggest_box .alert{ + margin-top: 10px; +} +.colla_suggest{ + max-height: 160px; + overflow: auto; +} +.colla_suggest li{ + padding: 5px; + cursor: pointer; +} +.colla_suggest li:hover{ + background-color: #63ABF7; + color: white; +} +.colla_suggest img{ + width: 30px; + height: 30px; + border-radius: 5px; + vertical-align: middle; + margin-right: 5px; +} +/************************searchDiv find followed user*********************************/ +.teams-left{ + width:160px;min-height:600px;position:fixed;margin-top:5px;texdt-align:center; + border-radius:3px 0 0 0;float:left;display:inline-block; +} +.teams-left .teams-left-list li{ + line-height:30px; + height:30px; + width:100%; + padding-left:16px; + cursor:pointer; +} +.teams-left .teams-left-list li:hover{ + background:#fff; +} +.teams-left .teams-left-list .teams-left-list-selected{ + /*background:#fff;*/ +} + +.left_item{ + text-align:left; + height:32px; + line-height:32px; + width:145px; + cursor:pointer; + padding-left:15px; + } +.teamlist{ + height:100px; + background:#fff; + margin:0; + padding:0; +} +.team-updates-title{ + padding-left:20px; + min-height:30px; +} +.team-updates-title li{ + float:left; + list-style:none; + line-height:30px; + height:30px; + margin:0 8px 0 8px; + font-weight: bold; + color:#666; + cursor:pointer; +} +.team-updates-left{ + float:left; + display:inline-block; + width:550px; + min-height:320px; +} +.team-updates-right{ + display:inline-block; + width:230px; + min-height:320px; +} +.teams_files_operate{ + padding:2px; + width:65px; + position: absolute; + right:-2px; + top:-1px; + border:1px solid #ddd; + min-height:500px; + text-align:center; + padding-top:5px; +} +.teams_files_operate .icon{ + text-align:center; + margin:10px 5px; + width:25px; +} +.teams_files_operate .sort{ + left:1px; + position: absolute; +} + +.teams_info{ +} +.teams_info .table{ + width:60%; + border-collapse: collapse; + margin:10px; +} +.error-tip{ + text-align:center; margin-top:20px; display:none; + background:#55B4F4; + position: absolute; + width:200px; + height:40px; + left:50%; + margin-left:-100px; + top:50%; + margin-top:-20px; + color:white; + line-height:40px; +} +.teams_info .table td{ + border:1px solid #fff; + height:40px; + line-height:40px; + padding-left:20px; +} +.teams_info .table_right{ + width:305px; + border-collapse: collapse; + margin:10px 0px 20px 0px; +} +.teams_info .table_right td{ + border:1px solid #fff; + height:40px; + line-height:40px; + padding-left:20px; +} +.left_item:hover{ + background:#f6f6f6; +} +.left_item_selected{ + border-radius:3px; + -moz-box-shadow:1px 2px 8px #DCDCDC; + -ms-box-shadow:1px 2px 8px #DCDCDC; + -o-box-shadow:1px 2px 8px #DCDCDC; + box-shadow:1px 2px 8px gray; +} +/**************************************teams-setting start**************************************************/ +.setting-box{ + padding:10px 0px; +} +.setting-box-title{ + font-weight:bold;color:#444 +} +.setting-box img#logo{ + width:80px;height:80px;vertical-align: middle; + margin: 5px 0px; +} +/************************************************************************************************************/ +/********************************************team notes start******************************************************/ +/* 整体布局 */ +.team_notes_block{ + overflow: auto; + padding: 0px 20px; +} +#note_list{ +} +#note_list ul{ + border-bottom: 1px solid #E9E9E9; + height: 40px; + line-height: 40px; +} +#note_list ul li{ + float: left; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +#note_list .note_name{ + width: 50%; +} +#note_list .note_owner{ + width: 25%; +} +#note_list .note_date{ + width: 25%; +} +.note_header{ + font-weight: bold; + color: #555; +} +.note_item:hover{ + background:#f3f3f3; + cursor:pointer; +} +.note_selected:hover{ + background:#63abf7; + color:white; +} +.note_selected{ + background:#63abf7; + color:white; +} +.type_icon{ + display: inline-block; + float: left; + background: url(../images/event/doc_icons.png) 0 0 no-repeat; + width:20px;margin-right:5px; + margin-top: 8px; + height: 24px; + margin-left: 10px; +} +.list_xls{ + background-position: 0px 2px; +} +.list_ppt{ + background-position: 0px -20px; +} +.list_doc{ + background-position: 0px -44px; +} +.list_image{ + background-position: 0px -67px; +} +.list_pdf{ + background-position: 0px -89px; +} +.article{ + background-position: 0px -137px; +} +.list_file{ + background-position: 0px -113px; +} +.note_edit_title { + margin: 20px 0px; + font-size: 20px; + font-weight: 200; + color: #5B636B; + padding: 5px; +} +.note_add_items .field { + display: block; + font-weight: bold; + margin-top: 10px; + margin-bottom: 5px; + color: #5B636B; +} +.note_add_items .txt { + width: 540px; +} +.note_edit_btn, .note_view_btn{ + display: none; +} +/* 文档为空 */ +.notes_empty{ + padding-top:135px; + text-align:center;font-weight:bold;font-size:16px;color:#555; + background:url(../images/diagrams/folder_empty.png) center top no-repeat; +} +.doc_allows{ + color: #777; + font-size: 12px; + padding: 5px 0px; + line-height:15px; + margin-left:150px; +} +.doc_allows li{ + text-align: left; + list-style: circle; +} +.doc_allows li:FIRST-CHILD{ + list-style: none;font-weight:bold; + margin-left:-30px; +} +/* 删除小组文档提示窗口 */ +.arrow_tip{ + background-color: #D5D5D5; + padding:4px;display:none; + font-size:12px; +} +.arrow_tip .arrow{ + background: transparent url(../images/common.png) center -59px no-repeat; + display:block; width: 15px; height:10px; position: absolute; top:-5px;left:240px; +} +.arrow_tip .buttons{ + text-align: center; margin: 10px 0px 0px; +} +.arrow_tip .buttons .button{ + line-height:24px; +} +/*******************************************************************************************************************/ +/********************************************teams-members start***********************************************/ +.member_list ul{ + border-bottom: 1px solid #E9E9E9; + height: 35px; + line-height: 35px; + padding: 10px 0px; +} +.member_list ul li{ + float: left; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.member_list .member_name{ + width: 55%; +} +.member_list .member_role{ + width: 30%; +} +.member_list .member_op{ + width: 15%; +} +.member_header{ + font-weight: bold; + color: #555; +} +.contacts-items:hover{ + background:#f3f3f3; +} +.contacts-selected:hover{ + background:#63abf7; + color:white; +} +.contacts-selected{ + background:#63abf7; + color:white; +} +.contacts-items img{ + width:35px;height:35px;vertical-align: middle; margin: 0px 5px 0px 10px; +} +.contacts-role{ + border:1px solid transparent;padding:3px 4px;cursor:pointer; +} +.contacts-role:hover{ + border:1px solid #ccc; + background:#eee; + box-shadow:1px 1px 1px #ddd inset; + color:#333; +} +.contacts-role-selected{ + border:1px solid #ccc; + background:#eee; + box-shadow:1px 1px 1px #ddd inset; + color:#333; +} +.contacts-role-none{ + border:1px solid transparent;padding:3px 4px; + position: absolute; + top:27%; + left:49%; +} +/********************************************teams-members end*************************************************/ + +/* followers */ +.user_items{ + padding:10px; +} +.user_item{ + display:inline-block; + width:180px; + height:50px; + margin:7px; + border:1px solid #eee; + padding:8px; + position: relative; + float:left; +} +.user_item:hover{ + border:1px solid #55B4F4 +} +.user_item .follow-span{ + position: absolute; + right:4px; + bottom:2px; +} +.user_item img{ + width:50px; + vertical-align: middle; +} +/* recommend */ +/* 搜索框 */ +.side-search-input { + border: 0; + background: transparent; + outline: none; + height: 25px; + line-height: 25px; + width: 90%; + padding: 2px; + color:gray; + margin-top:2px; + margin-left: 30px; + font-size: 14px; +} +.side-search-box { + background: #f5f8f8; + border: 1px solid #C2C5C7; + border-bottom-color: #ABADAF; + border-radius: 4px; + -webkit-border-radius: 4px; + -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 1px rgba(0, 0, 0, 0.1); + width:250px; + margin-top:10px; + position: relative; +} +.side-go-search { + position: absolute; + left: 0; + top: 0; + width: 36px; + height: 30px; + display: block; + cursor:pointer; + background: transparent url(../images/common.png) 0px -273px no-repeat; +} +.searchDiv{ + margin-top:20px; + padding:0 10px 6px 18px; +} +.searchDiv1{ + margin-top:20px; + padding:0 10px 20px 38px; +} +.searchDiv h3{ + font-size:14px; + color:#777; +} + +/* user_followedtags start */ +.right-items{ + width:190px; + display:inline-block; +} +.list_tags{ + display:block; + margin-top:10px; + margin-bottom:15px; +} +.list_tags .list_items{ + margin-top:0px; + padding:5px 8px 5px 0px; + float:left; + position:relative; + max-height:350px; + overflow:hidden; +} +.list_tags .list_items .content .thumb{ + width:150px;height:163px;border:1px solid #eee;margin-left:15px;margin-top:4px; +} +.list_tags .list_items .button{ + /* margin-left:300px; + position:absolute; */ + margin-left:20px; + line-height:25px; + margin-top:2px; +} +.list_tags .list_items .logo{ + float:left; +} +.list_tags .list_items .logo a{ + text-decoration: none; +} +.list_tags .list_items .natag{ + position:relative; + display:inline-block; + border:1px solid #d9d9d9; + margin:0px; + min-width:115px; + max-width:115px; + height:20px; + line-height:20px; + padding:5px 15px 5px 20px; + border-radius:2px; + -moz-border-radius:2px; + -webkit-border-radius:2px; + -khtml-border-radius:2px; + box-shadow:0px 0px 3px #e5e5e5; + -moz-box-shadow:0px 0px 3px #e5e5e5; + -webkit-box-shadow:0px 0px 3px #e5e5e5; + -khtml-box-shadow:0px 0px 3px #e5e5e5; + font-weight:bold; + font-size:13px; + white-space:nowrap; + cursor:pointer; + text-align:left; + text-decoration:none; + background: url(../images/icons/social-icons.png) 0px 4px no-repeat; +} +.list_tags .list_items .navs:hover{ + box-shadow:0px 0px 9px #ccc; + -moz-box-shadow:0px 0px 9px #ccc; + -webkit-box-shadow:0px 0px 9px #ccc; + -khtml-box-shadow:0px 0px 9px #ccc; +} +.list_tags .list_items .del_foll_tag{ + background:url(/themes/default/images/charts/close-bar.png) no-repeat;opacity:0.5;filter:alpha(opacity=50); + -moz-opacity:0.5;-webkit-opacity:0.5;display:none; + color:#ccc;position:absolute;top:7px;right:2px;width:16px;height:16px; +} +.list_tags .list_items .hover{ + box-shadow:0px 0px 9px #ccc; + -moz-box-shadow:0px 0px 9px #ccc; + -webkit-box-shadow:0px 0px 9px #ccc; + -khtml-box-shadow:0px 0px 9px #ccc; +} +.list_tags .list_items .edit{ + cursor: pointer; + float:right; + margin-right:20px; + margin-top:10px; + width: 13px; + height: 13px; + display: inline-block; + background: url(../images/icons/options_hover.png) no-repeat; +} +.list_tags .option{ + margin-bottom:-20px; +} +.list_tags .following{ + color:#ccc; + opacity: 0.5; + -moz-opacity: 0.5; + -webkit-opacity: 0.5; + -khtml-opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; +} +.person{ + width:50px;height:50px;float:left;border:none; margin:1px 0px 0px 1px +} +/* invite */ +.invite_div{ + padding:15px 15px; +} +.invite_right{ + vertical-align: top;padding-top:10px;width:300px;padding-left:20px; +} +/* teams */ + +.groups{ + margin-top:7px; + position: relative; + overflow:hidden; +} +.groups-current{ + margin-left:20px; + position: relative; +} +.groups-current-item{ + margin-left:10px; +} +.groups ul{ + margin-left:20px; +} +.groups_ul{ + margin-top:15px; +} +.groups li{ + display:inline-block; + list-style:none; + float:left; +} +.groups .last{ + float:right; + height:30px; + vertical-align: middle; +} +.groups li a{ + text-decoration: under-line; +} +.groups li .selected{ + font-weight: bold; + color:black !important; +} +.dlg_content { + border: 1px solid #CEDAE1; + margin-top: 15px; + border-radius: 2px; + padding: 10px; +} +.dlg_buttons { + padding-top: 10px; + text-align: right; +} +.text_items{ + line-height:30px; +} +.dialog-content-left{ + width:295px; +} +.dialog-content-left-members{ + padding:5px 5px; + margin-left:5px; + border:1px solid #ddd; + background:#fff; + width:200px; + min-height:50px; + display:inline-block; +} +.contacts_items{ + border: 1px solid #DDD; + background-color: #F5F6F7; + width:144px; + height:56px; + margin:4px; + float:left; + display:block; + font-size:11px !important; + position: relative; + overflow:hidden; + /*padding:5px 5px 5px 5px;*/ + } +.contacts_add_items{ + border: 1px dashed gray; + background-color: #F5F6F7; + width:144px; + height:56px; + line-height:56px; + text-align:center; + cursor:pointer; + margin:4px; + float:left; + display:block; + overflow:hidden; + + /*padding:5px 5px 5px 5px;*/ + } +.contacts_items .top{ + height:46px; + margin:4px; + line-height:20px; +} +.contacts_items .bottom{ + height:18px; + line-height:18px; + margin:3px; + border-top: 1px solid #E3E3E3; +} +.contacts_add_items:hover{ + border:1px solid lightblue; + background:#fff; +} +.contacts_items ul{ + list-style: none; + +} +.contacts_items li{ + display:inline-block; + overflow: hidden; + float:left; +} +.contacts_left{ + border:1px solid blue; +} +.contacts_right{ + padding-left:1px; + border:1px solid blue; + display:inline-block; +} +.group_item{ + position: absolute; + right:2px;top:2px; + padding:1px 3px 1px 2px; + font-size:11px; + /*cursor:pointer;*/ + text-align:center; + border:1px solid #F5F6F7; +} +.group_item:hover{ + background:#fff; + border:1px solid #ddd; +} +.group_item1{ + border-bottom:1px solid #ddd; + padding:1px 2px 1px 2px; + font-size:11px; + min-width:50px; + display:block; + /*cursor:pointer;*/ +} +.group_item1:hover{ + background:#63ABF7; +} +.W_moredown_txt { + display: inline-block; + border-color: #666 transparent transparent transparent; + border-style: solid dashed dashed dashed; + border-width: 4px 4px 0px 4px; + font-size: 0; + line-height: 0; + width: 0; + height: 0; + position: relative; + top: -2px; + left: 2px; +} +.add-contact{ + margin:8px 25px 0 20px; + border:1px solid #ddd; + padding:6px 5px 10px 5px; +} +.add-contact-tip{ + height:25px; + margin-left:10px; + width:223px; + display:none; + color:red; +} +.group_des{ + padding-left:6px; + width:250px; + border-top:1px solid #ddd; + margin-top:3px; + padding-top:2px; +} +.group_input{ + font-size:14px; + font-weight: bold; + border-top:1px solid #ddd; + margin-top:3px; + padding-top:2px; +} +.group_tip{ + height:60px; + margin:15px 45px 0 30px; + line-height:22px; +} +.group_tip_title{ + margin:5px 40px 3px 30px; + line-height:20px; + cursor:pointer; +} +.add-remark{ + display:block; + padding:1px; + font-size:10px !important; + /*cursor:pointer;*/ +} +/*--------------- new ------------------*/ +.team-list{ + width:160px;height:90px; + border:1px solid #ddd; + margin:5px 13px 5px 13px; + cursor:pointer; + position: relative; +} + +.createTeam{ + text-align:center; + font-size:14px; + cursor:pointer; + line-height:90px; + border:1px dashed gray; +} + +.clones{ + position: absolute; + z-index: 1000000; + border-color: #63ABF7; +} + +.scale { + color:white; + /* -ms-transform: scale(1.1); + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -khtml-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1);*/ + -ms-transition-duration: 0.5s; + -webkit-transition-duration: 0.5s; + -khtml-transition-duration: 0.5s; + -moz-transition-duration: 0.5s; + -o-transition-duration: 0.5s; + background-color: #63ABF7; + background-image: -webkit-linear-gradient(top,#63ABF7,#5E99CD); + background-image: -moz-linear-gradient(top,#63ABF7,#5E99CD); + background-image: -ms-linear-gradient(top,#63ABF7,#5E99CD); + background-image: -o-linear-gradient(top,#63ABF7,#5E99CD); + background-image: linear-gradient(top,#63ABF7,#5E99CD); +} +.scale-color{ + background-color: #63ABF7; + background-image: -webkit-linear-gradient(top,#63ABF7,#5E99CD); + background-image: -moz-linear-gradient(top,#63ABF7,#5E99CD); + background-image: -ms-linear-gradient(top,#63ABF7,#5E99CD); + background-image: -o-linear-gradient(top,#63ABF7,#5E99CD); + background-image: linear-gradient(top,#63ABF7,#5E99CD); +} +.scale a{ + color:white; +} +.scale_origtial { + -ms-transform: scale(1); + -webkit-transform: scale(1); + -moz-transform: scale(1); + -khtml-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + -ms-transition-duration: 1s; + -webkit-transition-duration: 1s; + -khtml-transition-duration: 1s; + -moz-transition-duration: 1s; + -o-transition-duration: 1s; +} +.team-list-item{ + border-top:1px solid #ddd; + padding:3px 3px 3px 5px; +} +.team-list-title{ + font-weight:bold;line-height:25px;height:25px;padding-left:6px; +} +.contacts-logo{ + width:45px; + height:45px; + vertical-align: top; +} +.teams-contacts-logo{ + width:25px; + height:25px; + margin:2px 3px 2px 2px; + float:left; +} +.teams-contacts-size{ + color:green; + font-weight:bold; +} +.add-contact-teams{ + padding:10px; + max-height:240px; + height:240px; +} +.add-contact-teams-item{ + display:inline-block; + margin:3px; + padding:3px 5px 3px 3px; + border:1px solid #ddd; + min-width:60px; + height:25px; + line-height:25px; +} +.add-contact-teams-item:hover{ + background:#5E99CD; + color:white; +} +.no_select{ + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + -khtml-user-select: none; +} +.add-contact-item-selected{ + background:#63ABF7; + color:white; +} +.round{ + -moz-transform:rotate(90deg); + -webkit-transform:rotate(90deg); + -o-transform:rotate(90deg); + transform:rotate(90deg); + filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1); +} +/*--------------- my followed list ------------------*/ +.followed_block{ + display:block; + float:left; + width:60%; +} +.followed_block.none{ + width:40%; + background:url("../images/network/man2.png") center center no-repeat; +} +.followed_content{ + height:565px; + padding: 20px; + overflow: auto; +} +.followed_content.right{ + height:565px; + border-left: 1px solid #C6C8CC; + background: url(../images/diagrams/right_bg.png) repeat-y; +} +#search_div{ + width:95%;height:30px;padding-top:30px;padding-bottom:20px;position:relative;margin:0 auto; +} +#side-search-box0{ + border-radius: 15px;-moz-border-radius:15px;-webkit-border-radius:15px;-o-border-radius:15px; + margin:0 auto;width:98%; +} +.followed_user_title{ + height:45px; + line-height:45px; + width:100%; + margin-bottom:10px; + border-bottom: 3px solid #DDD; +} +.followed_user_title span{ + color: #666; + font-weight: bold; + font-size: 13px; +} +.followed_list_ul{ + margin:10px 0px; + position:relative; + cursor: pointer; + height:auto; +} +.followed_li{ + display: list-item; + text-align: -webkit-match-parent; + margin: 0; + padding: 0; + vertical-align: middle; +} +.followed_list_ul .followed_let{ + width: 100%; + height:30px; + line-height:30px; + border-bottom: 1px solid #81b7ec; +} +.followed_list_ul .followed_let .followed_let_title{ + padding:3px;color: #81b7ec; + font-size: 14px; + font-weight: bold; +} +.followed_list_ul .followed_select_item{ + width: 100%;margin-top:10px; + border-bottom: 1px solid #E9E9E9; +} +.followed_list_ul .followed_select_item:hover{ + background: #f7f4f4; + border-bottom: 1px solid #f1f0f0; +} +.followed_list_ul .selected, .followed_list_ul .selected:hover{ + background: #f3f3f3; + border-bottom: 1px solid #EBEBEB; +} +.followed_list_ul .followed_select_item .followed_select_item_wrap{ + padding: 8px 8px 8px 10px; + position: relative; + height: 40px; + overflow: hidden; +} +.list_avat{ + float: left; + width: 40px; + height: 40px; + overflow: hidden; + margin-right: 18px; + vertical-align: middle; +} +.list_avat .avat_photo{ + width: 40px; + height:40px; + border:none; +} +.catagory{ + float: right; + display: inline-block; + margin: 6px 30px 0 0; + max-width: 300px; + white-space: nowrap; + overflow: hidden; +} +.fusername{ + display:block; + float:left; + line-height: 40px; + color: #6f6f6f; + font-size: 13px; + height: 40px; + overflow: hidden; + margin-right: 30px; + white-space: nowrap; + _white-space: normal; + text-overflow: ellipsis; +} +.chk_box{ + position: absolute; + top: 50%; + margin-top: -7px; + right: 12px; + display: block; + overflow: hidden; + padding: 4px; +} +.chk_box .icon_span{ + width: 17px; + height: 17px; + padding:0px; + margin-top:-4px; + margin-right:-4px; + + overflow: hidden; + display: block; +} +.collect, .current:hover, .followed_list_ul li.current, .followed_list_ul li.current:hover, .some_btns{ + background-image: url(../images/network/bot_bg2.png); + background-repeat: repeat-x; +} +.followed_list_ul li.current,.followed_list_ul li.current:hover{ + background:#63ABF7; + color: white; +} +.show_user_photo{ + width:120px;height:120px;margin-top:10px;vertical-align: middle;float:left;border:1px solid #f3f3f3; +} +.show_name a{ + font-weight: bold; + color: #666; + text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.show_name a:hover{ + color: #4183C4;text-decoration: none; +} +.user_info{ + float:left; + min-height:60px; + width:97%; + margin-left:10px; + border-bottom:1px solid #EBEBEB; +} +.user_info dl { + padding: 10px 5px; + margin: 0; +} +.user_info dl dt{ + float:left;margin-right:10px; + font-weight:bold; + font-size:13px; + color:#666; +} +.user_info dl dd{ + margin-left:3px; +} +.user_info dl dd span{ + font-size:14px;color:#999; +} +.some_btns { + position: absolute; + z-index: 30; + bottom: 0px; + left: 0; + width: 100%; + display:none; + background-color: #f3f3f3; + background-position: 0 -228px; +} +.some_innder { + padding: 8px 20px; + position: relative; + margin:0 auto; + height:auto!important; +} +.some_innder ul li{ + height:38px;float:left;text-align:center;width:105px; +} + +/*************************** Block Style *************************************/ +.block_content{ + padding: 20px; + overflow: auto; +} +.block_content.right{ + border-left: 1px solid #C6C8CC; + background: url(../images/diagrams/right_bg.png) repeat-y; +} + +/***********************Notification Center BEGIN********************************/ +.block{ + display: block; + float: left; + width: 50%; +} +.block.none{ + background: url(../images/network/sound.png) center center no-repeat; +} +.noti_title{ + color: #666; + margin: 0px; + padding-bottom: 10px; + border-bottom: 3px solid #DDD; + margin-bottom: 20px; +} +.noti_item{ + border-bottom: 1px solid #EBEBEB; + padding: 15px; + padding-left: 10px; + cursor: default; + font-weight: bold; + color: #555; + position: relative; +} +.noti_item.read{ + color: #999; + font-weight: normal; +} +.noti_item img{ + +} +.noti_date{ + font-size:12px; + color: #999; + font-weight: normal; + margin-top: 5px; +} +.noti_item.selected{ + background-color: #63ABF7; + color: #FFF; +} +.noti_item.selected .noti_date{ + color: #FFF; +} +.noti_item.selected:hover{ + background-color: #63ABF7; +} +.noti_item img{ + width: 40px; + height: 40px; + vertical-align: top; + position: absolute; +} +.noti_content{ + margin-left:50px; +} +.noti_item:hover{ + background-color: #F3F3F3; +} +.noti_empty{ + text-align: center; + color: gray; + padding-top: 20px; +} +.noti_pagination{ + margin-top: 20px; +} +.detail_title{ + font-weight:bold; + color: #555; + padding: 8px 0px 20px; + border-bottom: 1px solid #EBEBEB; +} +.detail_title p{ + border: 1px solid #EDEDED; + background-color: #F9F9F9; + margin: 10px 0px 0px; + padding: 5px 10px; + font-weight: normal; +} +.noti_details{ + padding-top: 20px; +} +.noti_details .detail_img{ + width: 200px; + height: 200px; + margin-right: 20px; + position: absolute; +} +.noti_details .detail_content{ + margin-left: 220px; +} +.noti_details .title{ + margin: 0px 0px 20px; + font-weight: bold; +} +.detail_btns{ + padding-bottom: 20px; + border-bottom: 1px solid #EBEBEB; +} +.detail_sender{ + padding-top: 20px; +} +.detail_sender img{ + width: 60px; + height: 60px; +} +/***********************Notification Center END********************************/ + +/***********************Invite BEGIN********************************/ +.invite_container{ + max-width: 700px; + min-width: 400px; + padding: 20px; +} +.invite_box{ + float:left; +} +.feedTags{ + border: 1px solid #D9D9D9; + border-top: 1px solid silver; + padding: 5px; + border-radius: 2px; + width: 400px; +} +.feedTags:hover{ + border: 1px solid #B8B8B8; + border-top: 1px solid #A1A1A1; +} +#tag_input { + height:18px; + margin:0; + padding:0; + line-height:18px; + border:0 none; +} +.tagitem { + position:relative; + display: inline-block; + margin: 0px 5px 5px 0; + border: 1px solid #D9D9D9; + padding-left:5px; + border-radius: 2px; + box-shadow: 0px 0px 3px #E5E5E5; + font-size:12px; + height:25px; + line-height:25px; + white-space:nowrap; + cursor:default; + text-align:center; +} +.close-tag { + background: transparent url(../images/common.png) 0px -95px no-repeat; + float:right; + height:16px; + width:16px; + margin-left:3px; + margin-top:2px; + oeverflow:hidden; + cursor:pointer; + display:inline-block; +} +.invite_members{ + margin-top: 10px; +} +.invite_members .member_item{ + float: left; + width: 240px; + margin: 0px 10px 10px 0px; +} +.invite_members img{ + float: left; + margin-right: 10px; + width: 40px; + height: 40px; +} +.invite_members span{ + display: table-cell; + height: 40px; + vertical-align: middle; +} +.invite_from{ + margin-bottom: 5px; + font-weight: bold; + color: #666; +} +.invite_link{ + margin-right: 10px; +} +.invite_link:hover{ + text-decoration: none; +} +/***********************Invite END********************************/ + +/***********************followers 我的粉丝********************************/ +.follower_block{ + display: block; + float: left; + width:60%; +} +.follower_block.none{ + width:40%; + background:url("../images/network/man2.png") center center no-repeat; +} +.follower_content{ + height:565px; + padding:20px; + overflow: auto; +} +.follower_content.right{ + height:565px; + border-left: 1px solid #C6C8CC; + background: url(../images/diagrams/right_bg.png) repeat-y; +} +#search_div1{ + width:95%;height:30px;padding-top:30px;padding-bottom:20px;position:relative;margin:0 auto; +} +#side-search-box1{ + border-radius: 15px;-moz-border-radius:15px;-webkit-border-radius:15px;-o-border-radius:15px; + margin:0 auto;width:98%; +} +.follower_user_title{ + height:45px; + line-height:45px; + width:100%; + margin-bottom:10px; + border-bottom: 3px solid #DDD; +} +.follower_user_title span{ + color: #666; + font-weight: bold; + font-size: 13px; +} +.follower_list_ul{ + margin:10px 0px; + position:relative; + cursor: pointer; + height:auto; +} +.follower_list_ul .follower_let{ + width: 100%; + height:30px; + line-height:30px; + border-bottom: 1px solid #81b7ec; +} + .follower_li{ + display: list-item; + text-align: -webkit-match-parent; + margin: 0; + padding: 0; + vertical-align: middle; +} +.follower_list_ul .follower_let_title{ + padding:3px;color: #4183C4; + font-size: 14px; + font-weight: bold; +} +.follower_list_ul .follower_select_item{ + width: 100%;margin-top:10px; + border-bottom: 1px solid #E9E9E9; +} +.follower_list_ul .follower_select_item:hover{ + background: #f3f3f3; + border-bottom: 1px solid #EBEBEB; +} +.follower_list_ul .follower_select_item .follower_select_item_wrap{ + padding: 8px 8px 8px 10px; + position: relative; + height: 40px; + overflow: hidden; +} +.follower_select_item_wrap .list_avat{ + float: left; + width: 40px; + height: 40px; + overflow: hidden; + margin-right: 18px; + vertical-align: middle; +} +.follower_select_item_wrap .list_avat .avat_photo{ + width: 40px; + height:40px; + border:none; +} +.follower_select_item_wrap .catagory{ + float: right; + display: inline-block; + margin: 6px 30px 0 0; + max-width: 300px; + white-space: nowrap; + overflow: hidden; +} +.follower_select_item_wrap .fusername{ + display:block; + float:left; + line-height: 40px; + color: #6f6f6f; + font-size: 13px; + height: 40px; + overflow: hidden; + margin-right: 30px; + white-space: nowrap; + _white-space: normal; + text-overflow: ellipsis; +} +.follower_list_ul li.current,.follower_list_ul li.current:hover{ + background:#63ABF7; + color: white; +} +/***********************followers 我的粉丝 END********************************/ + + +/*********************** 首页 Home BEGIN********************************/ +/*********HOME OLD********************/ +.show_fun{ + position:absolute;z-index:998;width:450px;background:#fff;height:120px;display:block;top:185px;left:340px;box-shadow: 0 0 15px #95c16e; + padding: 3px 0px; border: 5px solid #95c16e;display:none; +} +.arrowl{ + width:32px;height:19px; + z-index:999;top:20px;left:-38px; + position:absolute; + overflow:hidden; + background:url(../images/users/show_fun_arrows.png) no-repeat 0 0; +} +.arrowr{ + width:32px;height:19px; + z-index:999;top:20px;left:458px; + position:absolute; + overflow:hidden; + background:url(../images/users/show_fun_arrows_r.png) no-repeat 0 0; +} +.show_next{ + position:absolute;display:block;width:60px;height:20px;text-align:center;top:100px;left:380px;color:#889753; +} + +#share_tip{ + background:#FFC;padding:5px 0px 5px 10px; + font-weight: bold; color:#666;display:none; +} +#share_link{ + padding:10px;border-top:1px solid #d2d2d2;display:none; +} +.link_b{ + font-weight:bold; +} +.gray{ + color:#555; +} +.light_gray{ + color: #999; +} +#share_link .des{ + padding-top:5px;color:#333; +} +.clear{ + clear:both; +} + +.loading{ + text-align:center;padding:20px 0px 10px;font-weight:bold;color:#666; +} +.loading img{ + vertical-align: text-top; +} + + +.send-email{ + background:url(../images/users/email_send.png) no-repeat; + display:inline-block; width:32px;height:32px;vertical-align: middle; +} +#emailAddresses-manualInviteForm .qcmt-textarea-box{ + width: 176px; +} +#emailAddresses-manualInviteForm .invite_propert{ + margin: 0; + padding: 0; + display: inline-block; +} +#emailAddresses-manualInviteForm .button{ + display: inline-block;min-width: 5px;margin-left:0px; +} +#emailAddresses-manualInviteForm .invite_propert label{ + margin-left: 6px; + vertical-align: middle; +} +#emailAddresses-manualInviteForm .invite_propert label img{ + height: 16px; + width: 16px; + margin-top:8px; + display: inline; +} +.other_invite{ + width:100%; + padding:2px; + margin-top:5px; + display: inline-block; margin-left:0px; +} +.other_invite a{ + text-decoration:none; + display: inline-block; +} +.other_invite img{ + border:0px; + width:71px; + margin-left:25px; + height:47px; +} +.other_invite img:hover{ + -ms-box-shadow: 0 2px 4px rgba(0,0,0,.5); + -o-box-shadow: 0 2px 4px rgba(0,0,0,.5); + -moz-box-shadow: -1px 1px 1px rgba(0,0,0,.5); + -webkit-box-shadow: 0 2px 4px rgba(0,0,0,.5); + box-shadow: 0 2px 4px rgba(0,0,0,.5); +} + + +.invitation-resulttip-tipmsg{ + background: none repeat scroll 0 0 #FFFFCC; + border-bottom: 1px solid #CCCC11; + border-radius:5px 5px 0px 0px; + -moz-border-radius:5px 5px 0px 0px; + -webkit-border-radius:5px 5px 0px 0px; + color: #666666; + font-weight: bold; + padding: 5px; + float: left; + width:99%; +} +.invitation-resulttip-tipmsg font{ + margin-left: 5px; +} +.invite-resulttip-close{ + background: url("../images/common.png") no-repeat scroll 0 -100px transparent; + cursor: pointer; + display: inline-block; + float: right; + height: 10px; + margin: 2px 0px; + width: 15px; +} +.invitation-resulttip-content{ + background: none repeat scroll 0 0 #F1F1F1; + border-radius:0px 0px 5px 5px; + -moz-border-radius:0px 0px 5px 5px; + -webkit-border-radius:0px 0px 5px 5px; + float:left; + height: auto; + width: 99%; + padding: 5px; + margin-bottom:5px; +} +.invitation-resulttip-content ul{ + float:left; + width:100%; +} +.invitation-resulttip-content ul li{ + float: left; + height: auto; + margin-left: 5px; + padding-bottom: 5px; + width:50%; +} +.invite-resulttip-uimg{ + width:40px; + height: 40px; + float: left; +} +.invite-resulttip-uimg img{ + width:40px;height:40px; +} +.invite-resulttip-name{ + margin-left: 5px; + margin-top: 0px; + float: left; +} +.invite-resulttip-follow{ + margin-left: 5px; + margin-top: 2px; + float: left; +} + +/* tutorial start***********************************network 用户指南mark CSS**************************/ + +.tutorial{ + position:absolute; + top:38px; + z-index:89; + display:block; + color:#fff; +} + +.tutorial .big{ + position:absolute; + display:none; +} +.tutorial .big h2{ + color: white; + font-size: 24px; + line-height: 26px; + padding:0; +} +.tutorial .big p{ + font-size: 18px; + font-weight: 200; + line-height: 22px; +} +.tutorial .big .next-step{ + font-size: 18px; + display: inline-block; + line-height: 22px; + color:rgb(51,144,230); + text-decoration: none; + border:0; + } +.tutorial .big .skip{ + color: white; + font-size: 12px; + text-decoration: none; + display: inline-block; + line-height: 22px; + border:0; +} +.tutorial .big a span{ + font-size: 10px; +} +.tutorial .big .arrow{ + background:url("../images/users/tutorial.png") no-repeat; +} +#user_menu .arrow{ + background-position: 0px -324px; + width: 135px; + height: 74px; + position: absolute; + top: 10px; + left:-35px; + z-index:100; +} +#user_menu p{ + width:450px; +} +#user_box .arrow{ + background-position: -127px 0px; + width: 132px; + height: 72px; + position: absolute; + top: -15px; + right:-50px; +} +#user_box p{ + width:400px; +} +#share_update .arrow{ + background-position: 0px -334px; + width: 122px; + height: 64px; + position: absolute; + z-index: 100; + top: 30px; + left: -102px; +} +#share_update h2{ + margin-left:30px; +} +#send_invite .invite_bg{ + background: url("../images/users/send_invite.png") no-repeat; + position: absolute; + width:37px; + height:39px; + top:20px; + z-index: 100; + left:290px; +} +#send_invite .arrow{ + background-position: -171px -138px; + width: 52px; + height: 44px; + position: absolute; + top: 60px; + z-index: 100; + left: 250px; +} +#send_invite p{ + width:300px; +} +#send_invite .tip{ + background:url("../images/users/tutorial.png") no-repeat -230px -137px transparent; + position: absolute; + width: 50px; + height: 50px; + z-index:100; + left: 390px; + top:-30px; +} +.user-box{ + border:1px solid #E5E5E5; + background-color: #F9F9F9; +} +.profile-link{ + display:block; padding:12px; + text-shadow: 1px 1px 0 white; +} +.big-border{ + border: 5px solid #95c16e; +} +.profile-link span{ + display:block; font-weight:bold; + line-height:20px;color:#444; +} +.profile-link label{ + line-height:20px; cursor:pointer; color: #777; +} +.profile-link:hover{ + text-decoration: none; +} +.profile-link:hover span{ + text-decoration: underline; color:#36c +} +.user-box img{ + width:40px; height:40px; + float:left; margin-right:10px; +} +.user-box ul{ + border-top: 1px solid #E8E8E8; +} +.user-box ul li{ + display: table-cell;padding:8px 12px; + border-right:1px solid #E2E2E2; +} +.user-box ul li.last{ + border-right:none; +} +.user-box ul li a{ + color: #777; +} +.user-box ul li a span{ + display:block; font-weight:bold; + line-height:16px;color:#444; +} +.user-box ul li a:hover{ + color: #36C; text-decoration: none; +} +.user-box ul li a:hover span{ + color: #36C; +} +.delete_icon{ + float:right;background: transparent url(../images/common.png) 2px -96px no-repeat; + width:16px; height:16px; cursor:pointer; +} +#arrow_tip{ + background-color: #D5D5D5; + padding:4px; display:none; +} +#arrow_tip .arrow{ + background: transparent url(../images/common.png) center -59px no-repeat; + display:block; width: 15px; height:10px; position: absolute; top:-5px; +} +.tip_body{ + padding:10px; background:#FFF;border: 1px solid #CCC; +} +#arrow_tip .buttons{ + text-align: center; margin: 10px 0px 0px; +} +#arrow_tip .buttons .button{ + line-height:24px; +} +/* tutorial show arrow */ +.tuto_cur{ + position:absolute; + width:100%; + padding:0px; + top:38px; + left:0px; + z-index:88; + display:blcok; +} +#tuto_menu{ + position:absolute; + display:none; + width:199px; + margin:0px; + + padding:0px; +} +#tuto_userbox{ + position:absolute; + display:none; + height:37px; + margin:0px; + padding:0px; +} +#tuto_updates{ + position:absolute; + display:none; + padding:0px; + margin:0px; + top:65px; + height:80px; + left:215px; +} +#tuto_invent{ + position:absolute; + display:none; + padding:0px; + margin:0px; + height:50px; + width:278px; + top:35px; + right:40px; +} +.tuto_cur .tuto_arrow{ + background:url("../images/users/totural_arrow.png") no-repeat; + position:absolute;margin:0px; +} +/* tutorial end***************************************************network 用户指南mark CSS*********************************************************** */ + +.latest_event{ + width:280px;height:auto;padding:0;margin:0 auto; + position: relative; +} +.latest_event img{ + width:280px;height:200px;display:none; +} +.latest_event a{ + width:280px;display:block;height:auto; +} +#events_sliders{ + width:280px;display:block;height:auto; +} +#events_sliders .overed{ + width: 280px;text-align:center;margin:0px;padding:0px;cursor:pointer; + display: none; line-height: 30px;position:absolute;top:166px; + color: #fff468; font-size: 14px;height:30px;background:rgba(55,49,47,0.4); +} +#events_sliders .overed span{ + display:inline; + margin-left:4px; +} +/*********************** 首页 Home END********************************/ + +/***********************找人suggest recommend BEGIN********************************/ +.recomm_block{ + display: block; + float: left; + width:60%; +} +.recomm_block.none{ + width:40%; + background:url("../images/network/man2.png") center center no-repeat; +} +.recomm_content{ + height:565px; + padding:20px; + overflow: auto; +} +.recomm_content.right{ + height:565px; + border-left: 1px solid #C6C8CC; + background: url(../images/diagrams/right_bg.png) repeat-y; +} +#search_div_2{ + width:95%;height:30px;padding-top:30px;padding-bottom:20px;position:relative;margin:0 auto; +} +#side-search-box{ + border-radius: 15px;-moz-border-radius:15px;-webkit-border-radius:15px;-o-border-radius:15px; + margin:0 auto;width:98%; +} +.recomm_user_title{ + height:45px; + line-height:45px; + width:100%; + margin-bottom:10px; + border-bottom: 3px solid #DDD; +} +.recomm_user_title span{ + color: #666; + font-weight: bold; + font-size: 13px; +} +.recomm_item{ + border-bottom: 1px solid #EBEBEB; + padding: 15px; + padding-left: 10px; + cursor: default; + color:#6f6f6f; + position:relative; + font-size:13px; + font-weight: normal; +} +.recomm_item:hover{ + background:#f3f3f3; +} +.recomm_item .recomm_fullname{ + display: inline-block;font-size:13px;height:40px;line-height:40px; +} +.follow_sel, .follow_sel:hover{ + background:#efeded; +} +.recomm_item img{ + width: 40px; + height: 40px; + vertical-align: middle; + margin-right: 10px; + display: inline-block; +} +.recomm_selected, .recomm_selected:hover{ + background-color: #63ABF7; + color: white; +} +.recomm_item .follow_mark{ + position: absolute; + top: 50%; + margin-top: -7px; + right: 12px; + display: block; + overflow: hidden; + padding: 4px; +} +.recomm_item .follow_mark .icon_span{ + width:17px; + height:17px; + padding:0px; + margin-top:-4px; + margin-right:-4px; + overflow: hidden; + display: block; +} +/***********************suggest recommend END********************************/ +/* 编辑器样式做调整 */ +.ke-toolbar{ + padding:12px 15px !important; + border-bottom:0px !important; + background:url(/images/bpc/editerToorbar.png) 0 0 repeat-x !important; +} +.ke-outline { + border: 0px !important; + margin: 1px; + padding: 1px 2px; + font-size: 0; + line-height: 40px !important; + overflow: hidden; + cursor: pointer; + display: block; + float: left; +} +.ke-toolbar-icon{ + margin-left:2px !important; +} +/* 编辑器样式做调整 */ \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/stream/style.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/stream/style.css new file mode 100644 index 00000000..7dac1821 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/stream/style.css @@ -0,0 +1,326 @@ +@CHARSET "UTF-8"; + +.stream_item{ + border-bottom:1px solid #EBEBEB;padding:15px 0px; + position: relative; +} +.cell_photo{ + width: 60px; + position: absolute; +} +.cell_photo img{ + width:50px;height:50px; +} +.cell_content{ + margin-left: 60px; +} +.followed { + width: 30px; + height: 30px; + margin-right: 5px; +} +.stream_row{ + padding-top: 10px; +} +.stream_row .alert{ + display: inline-block; +} +.stream_row .share_doc_uploaded{ + margin-left: 0px; + min-height:0px; +} +.stream_row .chart{ + position: relative; +} +.stream_row .chart .chart_img{ + position: absolute; + border:1px solid #E5E5E5; + width: 150px; + height: 150px; +} +.stream_row .chart_info{ + margin-left: 160px; + min-height: 150px; +} +.stream_row p{ + margin-top: 5px; +} +.user_inline img{ + width: 30px; + height: 30px; + vertical-align: middle; +} +.user_inline{ + padding-top: 5px; +} +.stream_tags{ + padding-top: 5px; +} +.stream_tags span{ + display: inline-block; + width: 16px; + height: 16px; + margin-right: 5px; + background: url(../images/common-16.png) 0px -48px no-repeat; + float:left; +} +.stream_tags a{ + color: #888; + margin-right: 8px; +} +.stream_date{ + margin-left: 5px; + color: #999; +} +.rating-box{ + width:70px;height:14px; background:url(../images/icons/rating_stars.png) repeat-x; + display:inline-block; +} +.rating-box .rated{ + height:14px;background:url(../images/icons/rating_stars.png) 0px -14px repeat-x; + display:block; +} +.stream_op{ + padding-bottom: 5px; +} +.stream_op a{ + margin-right: 10px; + padding-right: 10px; + border-right: 1px solid #D2D2D2; +} +.stream_op a:last-child{ + border-right: 0px +} +#stream_delete{ + display:none; +} +.stream_item:hover #stream_delete{ + display:block; +} +.stream_comments{ + border: 1px solid #EDEDED; + border-bottom: 0px; + background-color: #F9F9F9; +} +.stream_comments li{ + border-top: 1px solid #FFF; + border-bottom: 1px solid #EDEDED; + padding: 5px 10px; + position: relative; +} +.stream_comments textarea{ + display:block; + width: 98%; + overflow: hidden; + line-height: 18px; +} +#comment_post, #comment_cancel{ + padding: 2px 10px; + margin-top: 5px; +} +#comment_cancel{ + margin-left: 5px; +} +.comment_photo{ + width:30px;height:30px; + position: absolute; +} +.comment_content{ + margin-left: 40px; +} +#stream_comment_delete{ + display:none; +} +.stream_comment:hover #stream_comment_delete{ + display:block; +} +.followed{ + width: 30px; + height: 30px; + margin-right: 5px; +} +.light_gray { + color: #999; +} +.link_b { + font-weight: bold; +} +.stream_from{ + display: inline-block; + width: 10px; + height: 13px; + vertical-align: middle; + background: url(../images/common-16.png) 0px -67px no-repeat; +} +.stream_delete_btns{ + padding: 10px 0px 5px; + text-align: center; +} +.stream_delete_btns .button{ + line-height: 24px; +} + +/******************Share Update Styles*********************/ +.share_new{ + color: #999; + border:1px solid #d2d2d2; + margin-bottom:10px; + border-radius:3px; + text-align:left; + background-color: #F9F9F9; + overflow: hidden; +} +.share_new_input{ + min-height:16px; + width:98%; + padding:10px 1%; + cursor: text; + line-height:18px; + color:#666; + text-align:left; + border:none; + overflow: hidden; + margin: 0px; +} +.editing{ + color:#333;min-height:50px; +} +.share_options{ + height: 30px; + border-top: 1px solid #e2e2e2; +} +.share_options li{ + float: left; + width: 30px; + height: 30px; + border-left: 1px solid #fff; + border-right: 1px solid #EDEDED; + cursor:pointer; +} +.share_options li span{ + width: 18px; + height: 18px; + display: block; + margin: 6px auto; + background-image: url(../images/network/icon_options.png); +} +.share_link.active{ + background-position: 0px -18px; +} +.share_doc{ + background-position: -36px 0px; +} +.share_tag{ + background-position: -18px 0px; +} +.share_link.active{ + background-position: 0px -18px; +} +.share_doc.active{ + background-position: -36px -18px; +} +.share_tag.active{ + background-position: -18px -18px; +} +.share_options li:hover .share_link{ + background-position: 0px -18px; +} +.share_options li:hover .share_doc{ + background-position: -36px -18px; +} +.share_options li:hover .share_tag{ + background-position: -18px -18px; +} +.share_opt_content{ + border-top: 1px solid #e2e2e2; + padding: 5px 10px; + position: relative; + display: none; +} +#share_doc_input{ + position: absolute; + width: 50px; height: 60px; + filter: alpha(opacity:0); + opacity: 0; + z-index: 1; + cursor: pointer; + overflow: hidden; +} +.share_doc_btn{ + background: url(../images/network/icon_options.png) center -36px no-repeat; + display: block; + position: absolute; + width: 50px; height: 60px; + cursor: pointer; +} +.share_doc_uploaded{ + margin-left: 60px; + min-height: 60px; +} +.share_doc_uploaded li { + background: url(../images/event/doc_icons.png) no-repeat; + padding-left: 20px; + line-height: 24px; +} +.share_doc_uploaded .close_icon { + float: none; + vertical-align: middle; + margin-left: 5px; +} +.share_doc_uploaded .upload_loading { + background: none; + padding-left: 0px; +} +.share_doc_uploaded .xls{ + background-position: 0px 2px; +} +.share_doc_uploaded .ppt{ + background-position: 0px -20px; +} +.share_doc_uploaded .doc{ + background-position: 0px -44px; +} +.share_doc_uploaded .image{ + background-position: 0px -67px; +} +.share_doc_uploaded .pdf{ + background-position: 0px -89px; +} +.share_doc_uploaded .file{ + background-position: 0px -113px; +} +.share_doc_uploaded .article{ + background-position: 0px -138px; +} +.share_tags { + border: 1px solid #D9D9D9; + border-top: 1px solid silver; + padding: 5px; + border-radius: 2px; + background: #FFF; + margin: 2px 0px; +} +.share_tags:hover { + border: 1px solid #B8B8B8; + border-top: 1px solid #A1A1A1; +} +#share_tag_input { + width: 100%; + height: 18px; + margin: 0; + padding: 0px; + line-height: 18px; + border: 0 none; +} +#share_btn_area{ + padding-bottom:10px; +} +#stream_new_alert{ + text-align: center; +} +#stream_new_alert span{ + cursor: pointer; +} +#stream_new_alert span:hover{ + text-decoration: underline; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/style.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/style.css new file mode 100644 index 00000000..7dac1821 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/social/style.css @@ -0,0 +1,326 @@ +@CHARSET "UTF-8"; + +.stream_item{ + border-bottom:1px solid #EBEBEB;padding:15px 0px; + position: relative; +} +.cell_photo{ + width: 60px; + position: absolute; +} +.cell_photo img{ + width:50px;height:50px; +} +.cell_content{ + margin-left: 60px; +} +.followed { + width: 30px; + height: 30px; + margin-right: 5px; +} +.stream_row{ + padding-top: 10px; +} +.stream_row .alert{ + display: inline-block; +} +.stream_row .share_doc_uploaded{ + margin-left: 0px; + min-height:0px; +} +.stream_row .chart{ + position: relative; +} +.stream_row .chart .chart_img{ + position: absolute; + border:1px solid #E5E5E5; + width: 150px; + height: 150px; +} +.stream_row .chart_info{ + margin-left: 160px; + min-height: 150px; +} +.stream_row p{ + margin-top: 5px; +} +.user_inline img{ + width: 30px; + height: 30px; + vertical-align: middle; +} +.user_inline{ + padding-top: 5px; +} +.stream_tags{ + padding-top: 5px; +} +.stream_tags span{ + display: inline-block; + width: 16px; + height: 16px; + margin-right: 5px; + background: url(../images/common-16.png) 0px -48px no-repeat; + float:left; +} +.stream_tags a{ + color: #888; + margin-right: 8px; +} +.stream_date{ + margin-left: 5px; + color: #999; +} +.rating-box{ + width:70px;height:14px; background:url(../images/icons/rating_stars.png) repeat-x; + display:inline-block; +} +.rating-box .rated{ + height:14px;background:url(../images/icons/rating_stars.png) 0px -14px repeat-x; + display:block; +} +.stream_op{ + padding-bottom: 5px; +} +.stream_op a{ + margin-right: 10px; + padding-right: 10px; + border-right: 1px solid #D2D2D2; +} +.stream_op a:last-child{ + border-right: 0px +} +#stream_delete{ + display:none; +} +.stream_item:hover #stream_delete{ + display:block; +} +.stream_comments{ + border: 1px solid #EDEDED; + border-bottom: 0px; + background-color: #F9F9F9; +} +.stream_comments li{ + border-top: 1px solid #FFF; + border-bottom: 1px solid #EDEDED; + padding: 5px 10px; + position: relative; +} +.stream_comments textarea{ + display:block; + width: 98%; + overflow: hidden; + line-height: 18px; +} +#comment_post, #comment_cancel{ + padding: 2px 10px; + margin-top: 5px; +} +#comment_cancel{ + margin-left: 5px; +} +.comment_photo{ + width:30px;height:30px; + position: absolute; +} +.comment_content{ + margin-left: 40px; +} +#stream_comment_delete{ + display:none; +} +.stream_comment:hover #stream_comment_delete{ + display:block; +} +.followed{ + width: 30px; + height: 30px; + margin-right: 5px; +} +.light_gray { + color: #999; +} +.link_b { + font-weight: bold; +} +.stream_from{ + display: inline-block; + width: 10px; + height: 13px; + vertical-align: middle; + background: url(../images/common-16.png) 0px -67px no-repeat; +} +.stream_delete_btns{ + padding: 10px 0px 5px; + text-align: center; +} +.stream_delete_btns .button{ + line-height: 24px; +} + +/******************Share Update Styles*********************/ +.share_new{ + color: #999; + border:1px solid #d2d2d2; + margin-bottom:10px; + border-radius:3px; + text-align:left; + background-color: #F9F9F9; + overflow: hidden; +} +.share_new_input{ + min-height:16px; + width:98%; + padding:10px 1%; + cursor: text; + line-height:18px; + color:#666; + text-align:left; + border:none; + overflow: hidden; + margin: 0px; +} +.editing{ + color:#333;min-height:50px; +} +.share_options{ + height: 30px; + border-top: 1px solid #e2e2e2; +} +.share_options li{ + float: left; + width: 30px; + height: 30px; + border-left: 1px solid #fff; + border-right: 1px solid #EDEDED; + cursor:pointer; +} +.share_options li span{ + width: 18px; + height: 18px; + display: block; + margin: 6px auto; + background-image: url(../images/network/icon_options.png); +} +.share_link.active{ + background-position: 0px -18px; +} +.share_doc{ + background-position: -36px 0px; +} +.share_tag{ + background-position: -18px 0px; +} +.share_link.active{ + background-position: 0px -18px; +} +.share_doc.active{ + background-position: -36px -18px; +} +.share_tag.active{ + background-position: -18px -18px; +} +.share_options li:hover .share_link{ + background-position: 0px -18px; +} +.share_options li:hover .share_doc{ + background-position: -36px -18px; +} +.share_options li:hover .share_tag{ + background-position: -18px -18px; +} +.share_opt_content{ + border-top: 1px solid #e2e2e2; + padding: 5px 10px; + position: relative; + display: none; +} +#share_doc_input{ + position: absolute; + width: 50px; height: 60px; + filter: alpha(opacity:0); + opacity: 0; + z-index: 1; + cursor: pointer; + overflow: hidden; +} +.share_doc_btn{ + background: url(../images/network/icon_options.png) center -36px no-repeat; + display: block; + position: absolute; + width: 50px; height: 60px; + cursor: pointer; +} +.share_doc_uploaded{ + margin-left: 60px; + min-height: 60px; +} +.share_doc_uploaded li { + background: url(../images/event/doc_icons.png) no-repeat; + padding-left: 20px; + line-height: 24px; +} +.share_doc_uploaded .close_icon { + float: none; + vertical-align: middle; + margin-left: 5px; +} +.share_doc_uploaded .upload_loading { + background: none; + padding-left: 0px; +} +.share_doc_uploaded .xls{ + background-position: 0px 2px; +} +.share_doc_uploaded .ppt{ + background-position: 0px -20px; +} +.share_doc_uploaded .doc{ + background-position: 0px -44px; +} +.share_doc_uploaded .image{ + background-position: 0px -67px; +} +.share_doc_uploaded .pdf{ + background-position: 0px -89px; +} +.share_doc_uploaded .file{ + background-position: 0px -113px; +} +.share_doc_uploaded .article{ + background-position: 0px -138px; +} +.share_tags { + border: 1px solid #D9D9D9; + border-top: 1px solid silver; + padding: 5px; + border-radius: 2px; + background: #FFF; + margin: 2px 0px; +} +.share_tags:hover { + border: 1px solid #B8B8B8; + border-top: 1px solid #A1A1A1; +} +#share_tag_input { + width: 100%; + height: 18px; + margin: 0; + padding: 0px; + line-height: 18px; + border: 0 none; +} +#share_btn_area{ + padding-bottom:10px; +} +#stream_new_alert{ + text-align: center; +} +#stream_new_alert span{ + cursor: pointer; +} +#stream_new_alert span:hover{ + text-decoration: underline; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/cross.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/cross.png new file mode 100644 index 00000000..24b5b3cb Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/cross.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/delete.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/delete.png new file mode 100644 index 00000000..8e15abd3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/delete.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/disc.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/disc.png new file mode 100644 index 00000000..61059c2b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/disc.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/edit.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/edit.png new file mode 100644 index 00000000..23441f76 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/edit.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/go.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/go.png new file mode 100644 index 00000000..ca227ef2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/go.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/tick.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/tick.png new file mode 100644 index 00000000..587c7855 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/tick.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/tick1.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/tick1.png new file mode 100644 index 00000000..9f7ca237 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/tick1.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/undo.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/undo.png new file mode 100644 index 00000000..ac4193b8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/css/tageditImg/undo.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/font/conceptboarddingbats-regular-webfont.eot b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/font/conceptboarddingbats-regular-webfont.eot new file mode 100644 index 00000000..1b087f77 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/font/conceptboarddingbats-regular-webfont.eot differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/font/conceptboarddingbats-regular-webfont.svg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/font/conceptboarddingbats-regular-webfont.svg new file mode 100644 index 00000000..53412c09 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/font/conceptboarddingbats-regular-webfont.svg @@ -0,0 +1,489 @@ + + + + +Created by FontPrep 20130207 at Tue Oct 8 18:14:12 2013 + By Florian Kutschera +copyright missing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/font/conceptboarddingbats-regular-webfont.ttf b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/font/conceptboarddingbats-regular-webfont.ttf new file mode 100644 index 00000000..ba2ebfc3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/font/conceptboarddingbats-regular-webfont.ttf differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/font/conceptboarddingbats-regular-webfont.woff b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/font/conceptboarddingbats-regular-webfont.woff new file mode 100644 index 00000000..bdc296ba Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/font/conceptboarddingbats-regular-webfont.woff differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable1.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable1.gif new file mode 100644 index 00000000..dfca69ad Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable1.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable11.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable11.gif new file mode 100644 index 00000000..169a4b57 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable11.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable2.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable2.gif new file mode 100644 index 00000000..831b1c7d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable2.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable22.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable22.gif new file mode 100644 index 00000000..8931eb25 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable22.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable3.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable3.gif new file mode 100644 index 00000000..8dee7db3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable3.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable4.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable4.gif new file mode 100644 index 00000000..a59c1b4d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable4.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable44.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable44.gif new file mode 100644 index 00000000..cfb16875 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable44.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable5.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable5.gif new file mode 100644 index 00000000..4d047314 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/Draggable5.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/admin.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/admin.jpg new file mode 100644 index 00000000..fa5d7f1c Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/admin.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/alert.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/alert.png new file mode 100644 index 00000000..2c36f25c Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/alert.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ap.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ap.png new file mode 100644 index 00000000..be8e784a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ap.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/app-toolbar-bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/app-toolbar-bg.png new file mode 100644 index 00000000..baebc3c2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/app-toolbar-bg.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/arrow-down.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/arrow-down.png new file mode 100644 index 00000000..2e0d692d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/arrow-down.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/arrow-up.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/arrow-up.png new file mode 100644 index 00000000..871c9468 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/arrow-up.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/backup.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/backup.png new file mode 100644 index 00000000..9fea4f46 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/backup.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bar_logo.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bar_logo.png new file mode 100644 index 00000000..0bee57ef Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bar_logo.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg1.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg1.jpg new file mode 100644 index 00000000..2dd1622d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg1.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg10.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg10.jpg new file mode 100644 index 00000000..d1837993 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg10.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg11.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg11.jpg new file mode 100644 index 00000000..f3a45633 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg11.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg2.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg2.jpg new file mode 100644 index 00000000..b2fa791e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg2.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg3.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg3.jpg new file mode 100644 index 00000000..6b09e4fd Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg3.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg4.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg4.jpg new file mode 100644 index 00000000..988844df Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg4.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg5.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg5.jpg new file mode 100644 index 00000000..d2739534 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg5.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg6.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg6.jpg new file mode 100644 index 00000000..761ff869 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg6.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg7.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg7.jpg new file mode 100644 index 00000000..d2475576 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg7.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg8.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg8.jpg new file mode 100644 index 00000000..b29a7f5f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg8.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg9.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg9.jpg new file mode 100644 index 00000000..303257eb Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg9.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg_primaryNav_left.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg_primaryNav_left.gif new file mode 100644 index 00000000..06f07df4 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg_primaryNav_left.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg_primaryNav_right.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg_primaryNav_right.gif new file mode 100644 index 00000000..e4b4d53d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/bg_primaryNav_right.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/blue.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/blue.png new file mode 100644 index 00000000..b457e8e0 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/blue.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/button_left.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/button_left.png new file mode 100644 index 00000000..fda56227 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/button_left.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/button_right.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/button_right.png new file mode 100644 index 00000000..6742cc22 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/button_right.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/canvas_bg.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/canvas_bg.jpg new file mode 100644 index 00000000..bed2eca0 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/canvas_bg.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/closedhand_8_8.cur b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/closedhand_8_8.cur new file mode 100644 index 00000000..ef366396 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/closedhand_8_8.cur differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coe_big5.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coe_big5.jpg new file mode 100644 index 00000000..f043fcee Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coe_big5.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coe_cn.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coe_cn.jpg new file mode 100644 index 00000000..2d000557 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coe_cn.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coe_en.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coe_en.jpg new file mode 100644 index 00000000..923a05b1 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coe_en.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coebottom2_07.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coebottom2_07.png new file mode 100644 index 00000000..faea7e09 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coebottom2_07.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coeleft2_05.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coeleft2_05.png new file mode 100644 index 00000000..2d1bea47 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coeleft2_05.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coeright2_05.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coeright2_05.png new file mode 100644 index 00000000..58f97c20 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coeright2_05.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coetop2_03.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coetop2_03.png new file mode 100644 index 00000000..c3b3dfce Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/coetop2_03.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/default/add.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/default/add.png new file mode 100644 index 00000000..14f47080 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/default/add.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/default/default_icon.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/default/default_icon.png new file mode 100644 index 00000000..992348a4 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/default/default_icon.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/default/del.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/default/del.png new file mode 100644 index 00000000..7c4179c2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/default/del.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dengl.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dengl.gif new file mode 100644 index 00000000..fb460c96 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dengl.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dengl.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dengl.jpg new file mode 100644 index 00000000..44ccdf24 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dengl.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dialog_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dialog_bg.png new file mode 100644 index 00000000..fa8ab3f4 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dialog_bg.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dialog_bg2.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dialog_bg2.jpg new file mode 100644 index 00000000..ce03f198 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dialog_bg2.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dialog_line.bmp b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dialog_line.bmp new file mode 100644 index 00000000..3c2cb2bf Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dialog_line.bmp differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dialog_line2.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dialog_line2.jpg new file mode 100644 index 00000000..61b64b45 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/dialog_line2.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/fastLeft.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/fastLeft.png new file mode 100644 index 00000000..40f6af51 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/fastLeft.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/fastRight.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/fastRight.png new file mode 100644 index 00000000..c3aa98f8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/fastRight.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/1.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/1.jpg new file mode 100644 index 00000000..93bd95f0 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/1.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/1_1.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/1_1.jpg new file mode 100644 index 00000000..53b62136 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/1_1.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/1_2.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/1_2.jpg new file mode 100644 index 00000000..23de17c7 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/1_2.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2.jpg new file mode 100644 index 00000000..0a54ffa1 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2_1.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2_1.jpg new file mode 100644 index 00000000..15e2a5f3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2_1.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2_2.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2_2.jpg new file mode 100644 index 00000000..4f524e94 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2_2.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2_3.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2_3.jpg new file mode 100644 index 00000000..f29c7055 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2_3.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2_4.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2_4.jpg new file mode 100644 index 00000000..6b3b4331 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/2_4.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/3.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/3.jpg new file mode 100644 index 00000000..34896dee Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/3.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/3_1.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/3_1.jpg new file mode 100644 index 00000000..a941d59b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/3_1.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/3_2.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/3_2.jpg new file mode 100644 index 00000000..67e6de61 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/3_2.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/closed.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/closed.png new file mode 100644 index 00000000..9e132905 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/guide/closed.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/home.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/home.png new file mode 100644 index 00000000..1f192b54 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/home.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon.png new file mode 100644 index 00000000..992348a4 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/bar.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/bar.png new file mode 100644 index 00000000..25c2832c Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/bar.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/bg-nav-dir.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/bg-nav-dir.png new file mode 100644 index 00000000..31a29101 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/bg-nav-dir.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/browse34.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/browse34.png new file mode 100644 index 00000000..e9f5306f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/browse34.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/chart.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/chart.png new file mode 100644 index 00000000..7a173a90 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/chart.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/chart2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/chart2.png new file mode 100644 index 00000000..b7264a33 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/chart2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/classify.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/classify.png new file mode 100644 index 00000000..f5d44e44 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/classify.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/close.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/close.png new file mode 100644 index 00000000..a5b850e8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/close.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/collaboration.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/collaboration.png new file mode 100644 index 00000000..edac1210 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/collaboration.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/complete_button.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/complete_button.png new file mode 100644 index 00000000..31231dc3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/complete_button.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/composs.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/composs.png new file mode 100644 index 00000000..2ac370bc Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/composs.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/config.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/config.png new file mode 100644 index 00000000..0f0d32af Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/config.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/db.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/db.png new file mode 100644 index 00000000..11466f49 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/db.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/delete.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/delete.png new file mode 100644 index 00000000..72b5bba8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/delete.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/designer.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/designer.png new file mode 100644 index 00000000..825b55de Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/designer.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/directory.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/directory.png new file mode 100644 index 00000000..468ae6c2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/directory.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/download34.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/download34.png new file mode 100644 index 00000000..6ff1da8d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/download34.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/edit.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/edit.png new file mode 100644 index 00000000..1fcaf4dc Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/edit.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/enlarge.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/enlarge.png new file mode 100644 index 00000000..b879125a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/enlarge.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/f.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/f.png new file mode 100644 index 00000000..17c8d583 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/f.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/file.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/file.png new file mode 100644 index 00000000..2c85e4fb Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/file.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/files.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/files.png new file mode 100644 index 00000000..d68504e8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/files.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/fullscreen.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/fullscreen.png new file mode 100644 index 00000000..9b83f045 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/fullscreen.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/guide_close.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/guide_close.png new file mode 100644 index 00000000..b096830f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/guide_close.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/import.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/import.png new file mode 100644 index 00000000..aba34fe5 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/import.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/import16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/import16.png new file mode 100644 index 00000000..d11b6e5c Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/import16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/layout.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/layout.png new file mode 100644 index 00000000..6e321a62 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/layout.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/ligature_type.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/ligature_type.png new file mode 100644 index 00000000..6660d6c3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/ligature_type.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/lightning.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/lightning.png new file mode 100644 index 00000000..39319316 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/lightning.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/link.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/link.png new file mode 100644 index 00000000..44a3dad8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/link.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/list.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/list.png new file mode 100644 index 00000000..cb2904c8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/list.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/logo-notification-untitled.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/logo-notification-untitled.png new file mode 100644 index 00000000..2a880839 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/logo-notification-untitled.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/logo-notification.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/logo-notification.png new file mode 100644 index 00000000..14197417 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/logo-notification.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/m.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/m.png new file mode 100644 index 00000000..0f0d32af Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/m.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/m2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/m2.png new file mode 100644 index 00000000..b56341af Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/m2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_bbs.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_bbs.png new file mode 100644 index 00000000..b97c3a33 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_bbs.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_bbs_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_bbs_hover.png new file mode 100644 index 00000000..73d4ad2f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_bbs_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_help.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_help.png new file mode 100644 index 00000000..e2fae048 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_help.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_help_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_help_hover.png new file mode 100644 index 00000000..3822af7f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_help_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_pal.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_pal.png new file mode 100644 index 00000000..8d68e1df Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_pal.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_pal_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_pal_hover.png new file mode 100644 index 00000000..06da0694 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_pal_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_recycle.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_recycle.png new file mode 100644 index 00000000..69488ab8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_recycle.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_recycle_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_recycle_hover.png new file mode 100644 index 00000000..1704d50d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_recycle_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_setting.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_setting.png new file mode 100644 index 00000000..596710a5 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_setting.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_setting_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_setting_hover.png new file mode 100644 index 00000000..74eb2a5f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_setting_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_team.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_team.png new file mode 100644 index 00000000..2b1c6c4b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_team.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_team_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_team_hover.png new file mode 100644 index 00000000..1c4efa2a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/menubar_team_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/model_snippet.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/model_snippet.png new file mode 100644 index 00000000..cc7e5466 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/model_snippet.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/narrow.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/narrow.png new file mode 100644 index 00000000..b6bfc402 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/narrow.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/new-teamwork.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/new-teamwork.png new file mode 100644 index 00000000..41103771 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/new-teamwork.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/nextfile.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/nextfile.png new file mode 100644 index 00000000..042574c5 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/nextfile.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/open.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/open.png new file mode 100644 index 00000000..7dd72026 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/open.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/open2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/open2.png new file mode 100644 index 00000000..feab6742 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/open2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/open3.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/open3.png new file mode 100644 index 00000000..e73bb756 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/open3.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal-link.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal-link.png new file mode 100644 index 00000000..665dc084 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal-link.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal-to-link.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal-to-link.png new file mode 100644 index 00000000..4f8a32d1 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal-to-link.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_delete.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_delete.png new file mode 100644 index 00000000..15b6224f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_delete.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_down.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_down.png new file mode 100644 index 00000000..2ab6af35 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_down.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_down_hover.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_down_hover.png new file mode 100644 index 00000000..989b19ce Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_down_hover.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_download.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_download.png new file mode 100644 index 00000000..49939bcd Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_download.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_edit.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_edit.png new file mode 100644 index 00000000..e0f8bb42 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_edit.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_reading.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_reading.png new file mode 100644 index 00000000..fbe30e27 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_reading.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_restore.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_restore.png new file mode 100644 index 00000000..07e0838b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_restore.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_start.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_start.png new file mode 100644 index 00000000..c9d9676d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_start.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_stop.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_stop.png new file mode 100644 index 00000000..3afff50c Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pal_stop.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/password.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/password.png new file mode 100644 index 00000000..16648293 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/password.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pause.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pause.png new file mode 100644 index 00000000..08d58f93 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/pause.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/plug.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/plug.png new file mode 100644 index 00000000..5b0fa1c6 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/plug.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/print.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/print.png new file mode 100644 index 00000000..b42133fb Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/print.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/properties.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/properties.png new file mode 100644 index 00000000..de77c2a5 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/properties.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/refresh.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/refresh.png new file mode 100644 index 00000000..cf14607e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/refresh.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/rstar.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/rstar.png new file mode 100644 index 00000000..67f3917c Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/rstar.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/shape_attribute.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/shape_attribute.png new file mode 100644 index 00000000..3cfe301a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/shape_attribute.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/shape_definition.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/shape_definition.png new file mode 100644 index 00000000..1adfc915 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/shape_definition.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/so.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/so.png new file mode 100644 index 00000000..0e0e044e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/so.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/so2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/so2.png new file mode 100644 index 00000000..98d7813e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/so2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/speech.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/speech.png new file mode 100644 index 00000000..3ffa7087 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/speech.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/star.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/star.png new file mode 100644 index 00000000..dfecc37f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/star.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/start.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/start.png new file mode 100644 index 00000000..173e61e1 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/start.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/switch.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/switch.png new file mode 100644 index 00000000..99e5488e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/switch.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/sys.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/sys.png new file mode 100644 index 00000000..6ca38db6 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/sys.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/table.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/table.png new file mode 100644 index 00000000..8b20a159 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/table.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/task.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/task.png new file mode 100644 index 00000000..9e4a2891 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/task.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/teamm.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/teamm.png new file mode 100644 index 00000000..4d4f9d81 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/teamm.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tile.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tile.png new file mode 100644 index 00000000..d1dd3175 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tile.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tools.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tools.png new file mode 100644 index 00000000..dc63a4c0 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tools.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tree-expand.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tree-expand.png new file mode 100644 index 00000000..871a0c72 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tree-expand.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tree-file.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tree-file.png new file mode 100644 index 00000000..29ce4068 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tree-file.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tree-shrink.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tree-shrink.png new file mode 100644 index 00000000..bed70e22 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/tree-shrink.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/unprofessional_tree_folder.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/unprofessional_tree_folder.png new file mode 100644 index 00000000..f09b4617 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/unprofessional_tree_folder.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/update.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/update.png new file mode 100644 index 00000000..cfc8fcbd Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/update.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/user.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/user.png new file mode 100644 index 00000000..f51dd5ad Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/user.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/version.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/version.png new file mode 100644 index 00000000..b31bf54a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/version.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/window.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/window.png new file mode 100644 index 00000000..43b9a01f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/window.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/y.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/y.png new file mode 100644 index 00000000..b99922fe Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon/y.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon_form_attachment.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon_form_attachment.png new file mode 100644 index 00000000..1df7d825 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/icon_form_attachment.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/imgback.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/imgback.jpg new file mode 100644 index 00000000..d99cf8c2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/imgback.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/list.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/list.png new file mode 100644 index 00000000..190c246f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/list.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/load.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/load.gif new file mode 100644 index 00000000..e2a8cbf0 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/load.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/loading.big.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/loading.big.gif new file mode 100644 index 00000000..dc68442a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/loading.big.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/loading.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/loading.gif new file mode 100644 index 00000000..127bb9ae Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/loading.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/login_bg.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/login_bg.jpg new file mode 100644 index 00000000..b3ac23fc Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/login_bg.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/logo/pal_logo.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/logo/pal_logo.png new file mode 100644 index 00000000..d3552317 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/logo/pal_logo.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/logo/portal_logo.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/logo/portal_logo.png new file mode 100644 index 00000000..d3552317 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/logo/portal_logo.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.kpi/16.leaf.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.kpi/16.leaf.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.kpi/16.leaf.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.kpi/16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.kpi/16.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.kpi/16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.kpi/32.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.kpi/32.png new file mode 100644 index 00000000..e1ff900b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.kpi/32.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.kpi/shape/kpi.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.kpi/shape/kpi.png new file mode 100644 index 00000000..61610d1e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.kpi/shape/kpi.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.png new file mode 100644 index 00000000..a4a5028e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/16.leaf.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/16.leaf.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/16.leaf.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/16.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/32.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/32.png new file mode 100644 index 00000000..e1ff900b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/32.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/shape/item.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/shape/item.png new file mode 100644 index 00000000..a650c4f6 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/shape/item.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/shape/regulation.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/shape/regulation.png new file mode 100644 index 00000000..114b6950 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.policy/shape/regulation.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/16.leaf.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/16.leaf.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/16.leaf.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/16.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/32.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/32.png new file mode 100644 index 00000000..e1ff900b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/32.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/shape/control.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/shape/control.png new file mode 100644 index 00000000..50312492 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/shape/control.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/shape/risk.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/shape/risk.png new file mode 100644 index 00000000..34027bdc Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/control.risk/shape/risk.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/16.leaf.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/16.leaf.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/16.leaf.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/16.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/32.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/32.png new file mode 100644 index 00000000..e1ff900b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/32.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/shape/form.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/shape/form.png new file mode 100644 index 00000000..f5f48072 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/shape/form.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/shape/forms.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/shape/forms.png new file mode 100644 index 00000000..07550637 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.form/shape/forms.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.png new file mode 100644 index 00000000..56354f91 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/data.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default.png new file mode 100644 index 00000000..8613e748 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default/16.leaf.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default/16.leaf.png new file mode 100644 index 00000000..4d92692d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default/16.leaf.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default/16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default/16.png new file mode 100644 index 00000000..4d92692d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default/16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default_folder.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default_folder.png new file mode 100644 index 00000000..25cdb014 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default_folder.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default_folder1.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default_folder1.png new file mode 100644 index 00000000..cf1ceb78 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/default_folder1.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/16.leaf.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/16.leaf.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/16.leaf.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/16.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/32.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/32.png new file mode 100644 index 00000000..e1ff900b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/32.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/shape/appSystem.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/shape/appSystem.png new file mode 100644 index 00000000..962295ef Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/shape/appSystem.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/shape/cloudServer.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/shape/cloudServer.png new file mode 100644 index 00000000..9bffea1b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/shape/cloudServer.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/shape/database.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/shape/database.png new file mode 100644 index 00000000..6a8ab0a0 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/shape/database.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/shape/device.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/shape/device.png new file mode 100644 index 00000000..d14864e8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.normal/shape/device.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.png new file mode 100644 index 00000000..e0ea6d42 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/itsystem.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/method.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/method.png new file mode 100644 index 00000000..7070f0f5 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/method.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/16.leaf.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/16.leaf.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/16.leaf.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/16.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/32.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/32.png new file mode 100644 index 00000000..e1ff900b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/32.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/shape/employee.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/shape/employee.png new file mode 100644 index 00000000..83042a3b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/shape/employee.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/shape/organization.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/shape/organization.png new file mode 100644 index 00000000..2e48af24 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/shape/organization.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/shape/position.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/shape/position.png new file mode 100644 index 00000000..c186bf21 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/shape/position.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/shape/role.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/shape/role.png new file mode 100644 index 00000000..39600bce Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.normal/shape/role.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.png new file mode 100644 index 00000000..ae57b6a9 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/org.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/16.leaf.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/16.leaf.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/16.leaf.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/16.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/32.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/32.png new file mode 100644 index 00000000..e1ff900b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/32.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/businessRuleTask.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/businessRuleTask.png new file mode 100644 index 00000000..e240ba76 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/businessRuleTask.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/callActivityCallingProcess.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/callActivityCallingProcess.png new file mode 100644 index 00000000..029e3609 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/callActivityCallingProcess.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/compensationBoundaryInterrputingEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/compensationBoundaryInterrputingEvent.png new file mode 100644 index 00000000..2612ac99 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/compensationBoundaryInterrputingEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/complexGateway.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/complexGateway.png new file mode 100644 index 00000000..aea3fa3a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/complexGateway.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/endEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/endEvent.png new file mode 100644 index 00000000..0c1f8fdb Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/endEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/errorBoundaryInterrputingEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/errorBoundaryInterrputingEvent.png new file mode 100644 index 00000000..baa66e00 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/errorBoundaryInterrputingEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/errorEndEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/errorEndEvent.png new file mode 100644 index 00000000..cff4831f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/errorEndEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/eventBasedGateway.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/eventBasedGateway.png new file mode 100644 index 00000000..995b62b7 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/eventBasedGateway.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/exclusiveGateway.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/exclusiveGateway.png new file mode 100644 index 00000000..0ff205bb Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/exclusiveGateway.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/group.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/group.png new file mode 100644 index 00000000..04005369 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/group.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/horizontalLane.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/horizontalLane.png new file mode 100644 index 00000000..9e7be9cf Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/horizontalLane.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/horizontalPool.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/horizontalPool.png new file mode 100644 index 00000000..153ea0e3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/horizontalPool.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/inclusiveGateway.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/inclusiveGateway.png new file mode 100644 index 00000000..c5b6f8c1 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/inclusiveGateway.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/manualTask.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/manualTask.png new file mode 100644 index 00000000..276ab9f2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/manualTask.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageBoundaryInterrputingEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageBoundaryInterrputingEvent.png new file mode 100644 index 00000000..cab4e2ec Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageBoundaryInterrputingEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageEndEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageEndEvent.png new file mode 100644 index 00000000..ef7b663d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageEndEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageIntermediateCatchEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageIntermediateCatchEvent.png new file mode 100644 index 00000000..d17e06f9 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageIntermediateCatchEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageIntermediateThrowingEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageIntermediateThrowingEvent.png new file mode 100644 index 00000000..b4a05b27 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageIntermediateThrowingEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageStartEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageStartEvent.png new file mode 100644 index 00000000..ab2906a4 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/messageStartEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/parallelGateway.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/parallelGateway.png new file mode 100644 index 00000000..e270fc31 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/parallelGateway.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/receiveTask.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/receiveTask.png new file mode 100644 index 00000000..54b2cdc8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/receiveTask.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/scriptTask.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/scriptTask.png new file mode 100644 index 00000000..51f50c48 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/scriptTask.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/sendTask.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/sendTask.png new file mode 100644 index 00000000..03bb6ba8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/sendTask.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/serviceTask.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/serviceTask.png new file mode 100644 index 00000000..148660ce Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/serviceTask.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalBoundaryInterrputingEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalBoundaryInterrputingEvent.png new file mode 100644 index 00000000..c3a865b3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalBoundaryInterrputingEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalEndEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalEndEvent.png new file mode 100644 index 00000000..138f2dd8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalEndEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalIntermediateCatchEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalIntermediateCatchEvent.png new file mode 100644 index 00000000..aeaaad99 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalIntermediateCatchEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalIntermediateThrowingEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalIntermediateThrowingEvent.png new file mode 100644 index 00000000..3475c124 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalIntermediateThrowingEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalStartEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalStartEvent.png new file mode 100644 index 00000000..ca72a1e8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/signalStartEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/startEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/startEvent.png new file mode 100644 index 00000000..ed4f3d4d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/startEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/terminateEndEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/terminateEndEvent.png new file mode 100644 index 00000000..70bee443 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/terminateEndEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/textAnnotation.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/textAnnotation.png new file mode 100644 index 00000000..8bb5619b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/textAnnotation.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/timerIntermediateCatchEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/timerIntermediateCatchEvent.png new file mode 100644 index 00000000..a1747b67 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/timerIntermediateCatchEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/timerStartEvent.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/timerStartEvent.png new file mode 100644 index 00000000..95ced0bd Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/timerStartEvent.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/transaction.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/transaction.png new file mode 100644 index 00000000..d779320f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/transaction.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/userTask.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/userTask.png new file mode 100644 index 00000000..4db6a5ca Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/userTask.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/verticalLane.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/verticalLane.png new file mode 100644 index 00000000..8404ffd7 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/verticalLane.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/verticalPool.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/verticalPool.png new file mode 100644 index 00000000..c31a72fb Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.bpmn2/shape/verticalPool.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/16.leaf.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/16.leaf.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/16.leaf.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/16.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/and.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/and.png new file mode 100644 index 00000000..b707fc13 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/and.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/event.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/event.png new file mode 100644 index 00000000..0e563383 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/event.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/horizontalLane.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/horizontalLane.png new file mode 100644 index 00000000..d1388432 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/horizontalLane.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/horizontalPool.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/horizontalPool.png new file mode 100644 index 00000000..95b9410f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/horizontalPool.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/horizontalSeparator.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/horizontalSeparator.png new file mode 100644 index 00000000..0599850e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/horizontalSeparator.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/horizontalSeparatorBar.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/horizontalSeparatorBar.png new file mode 100644 index 00000000..191ee5e2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/horizontalSeparatorBar.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/method.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/method.png new file mode 100644 index 00000000..30bd68b4 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/method.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/or.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/or.png new file mode 100644 index 00000000..10586f01 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/or.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/procedure.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/procedure.png new file mode 100644 index 00000000..cf1de363 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/procedure.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/verticalLane.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/verticalLane.png new file mode 100644 index 00000000..6f34ac6d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/verticalLane.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/verticalPool.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/verticalPool.png new file mode 100644 index 00000000..3bcff5a3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/verticalPool.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/verticalSeparator.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/verticalSeparator.png new file mode 100644 index 00000000..191ee5e2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/verticalSeparator.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/verticalSeparatorBar.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/verticalSeparatorBar.png new file mode 100644 index 00000000..0599850e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/verticalSeparatorBar.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/xor.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/xor.png new file mode 100644 index 00000000..04fdf51b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.epc/shape/xor.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/16.leaf.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/16.leaf.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/16.leaf.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/16.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/32.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/32.png new file mode 100644 index 00000000..e1ff900b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/32.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/IO.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/IO.png new file mode 100644 index 00000000..fba13946 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/IO.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/horizontalLane.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/horizontalLane.png new file mode 100644 index 00000000..9e7be9cf Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/horizontalLane.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/horizontalPool.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/horizontalPool.png new file mode 100644 index 00000000..153ea0e3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/horizontalPool.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/horizontalSeparator.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/horizontalSeparator.png new file mode 100644 index 00000000..508385ce Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/horizontalSeparator.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain1.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain1.png new file mode 100644 index 00000000..40ea801a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain1.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain2.png new file mode 100644 index 00000000..e5ebcf41 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain3.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain3.png new file mode 100644 index 00000000..7e6a6886 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain3.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain4.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain4.png new file mode 100644 index 00000000..ba6a00e6 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain4.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain5.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain5.png new file mode 100644 index 00000000..9ef9f927 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain5.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain6.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain6.png new file mode 100644 index 00000000..92b983e9 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/valueChain6.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/verticalLane.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/verticalLane.png new file mode 100644 index 00000000..8404ffd7 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/verticalLane.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/verticalPool.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/verticalPool.png new file mode 100644 index 00000000..c31a72fb Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/verticalPool.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/verticalSeparator.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/verticalSeparator.png new file mode 100644 index 00000000..39b1e3d6 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.evc/shape/verticalSeparator.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/16.leaf.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/16.leaf.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/16.leaf.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/16.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/32.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/32.png new file mode 100644 index 00000000..e1ff900b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/32.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/annotation.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/annotation.png new file mode 100644 index 00000000..8bb5619b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/annotation.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/card.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/card.png new file mode 100644 index 00000000..a617d1ba Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/card.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/data.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/data.png new file mode 100644 index 00000000..925d7cde Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/data.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/decision.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/decision.png new file mode 100644 index 00000000..0d72fca7 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/decision.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/directData.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/directData.png new file mode 100644 index 00000000..05c27a6f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/directData.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/display.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/display.png new file mode 100644 index 00000000..477a8c7a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/display.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/document.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/document.png new file mode 100644 index 00000000..f5f48072 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/document.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/horizontalLane.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/horizontalLane.png new file mode 100644 index 00000000..9e7be9cf Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/horizontalLane.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/horizontalPool.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/horizontalPool.png new file mode 100644 index 00000000..153ea0e3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/horizontalPool.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/horizontalSeparator.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/horizontalSeparator.png new file mode 100644 index 00000000..508385ce Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/horizontalSeparator.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/horizontalSeparatorBar.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/horizontalSeparatorBar.png new file mode 100644 index 00000000..191ee5e2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/horizontalSeparatorBar.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/internalStorage.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/internalStorage.png new file mode 100644 index 00000000..7cf949fc Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/internalStorage.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/loopLimit.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/loopLimit.png new file mode 100644 index 00000000..f5091c63 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/loopLimit.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/manualInput.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/manualInput.png new file mode 100644 index 00000000..2da18437 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/manualInput.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/manualOperation.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/manualOperation.png new file mode 100644 index 00000000..1d702b82 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/manualOperation.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/offPageReference.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/offPageReference.png new file mode 100644 index 00000000..dea04d02 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/offPageReference.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/onPageReference.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/onPageReference.png new file mode 100644 index 00000000..0d9f1296 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/onPageReference.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/paperTape.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/paperTape.png new file mode 100644 index 00000000..29e019f8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/paperTape.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/parallelMode.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/parallelMode.png new file mode 100644 index 00000000..52259c4f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/parallelMode.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/predefinedProcess.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/predefinedProcess.png new file mode 100644 index 00000000..1a745725 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/predefinedProcess.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/preparation.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/preparation.png new file mode 100644 index 00000000..6964caa9 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/preparation.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/process.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/process.png new file mode 100644 index 00000000..7b2ba308 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/process.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/sequentialData.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/sequentialData.png new file mode 100644 index 00000000..755855c2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/sequentialData.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/storedData.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/storedData.png new file mode 100644 index 00000000..a266e9f6 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/storedData.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/terminator.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/terminator.png new file mode 100644 index 00000000..a95953a5 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/terminator.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/verticalLane.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/verticalLane.png new file mode 100644 index 00000000..8404ffd7 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/verticalLane.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/verticalPool.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/verticalPool.png new file mode 100644 index 00000000..c31a72fb Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/verticalPool.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/verticalSeparator.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/verticalSeparator.png new file mode 100644 index 00000000..39b1e3d6 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/verticalSeparator.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/verticalSeparatorBar.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/verticalSeparatorBar.png new file mode 100644 index 00000000..0599850e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.flowchart/shape/verticalSeparatorBar.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.png new file mode 100644 index 00000000..180e6ea0 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/process.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/16.leaf.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/16.leaf.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/16.leaf.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/16.png new file mode 100644 index 00000000..d8cd7b08 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/32.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/32.png new file mode 100644 index 00000000..e1ff900b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/32.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/shape/consumer.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/shape/consumer.png new file mode 100644 index 00000000..0805d0eb Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/shape/consumer.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/shape/product.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/shape/product.png new file mode 100644 index 00000000..031aff68 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/shape/product.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/shape/service.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/shape/service.png new file mode 100644 index 00000000..8a324ce9 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/shape/service.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/shape/target.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/shape/target.png new file mode 100644 index 00000000..48051ea7 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.normal/shape/target.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.png new file mode 100644 index 00000000..ed31f60c Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/method/product.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/nav-button_default.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/nav-button_default.gif new file mode 100644 index 00000000..31de7b53 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/nav-button_default.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/nav-button_default2 (2).gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/nav-button_default2 (2).gif new file mode 100644 index 00000000..94c67dd3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/nav-button_default2 (2).gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/nav-button_default2.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/nav-button_default2.gif new file mode 100644 index 00000000..ce6a51eb Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/nav-button_default2.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/noise-dark_195x195.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/noise-dark_195x195.png new file mode 100644 index 00000000..fa405f42 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/noise-dark_195x195.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/office.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/office.png new file mode 100644 index 00000000..9c0c972e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/office.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/open.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/open.png new file mode 100644 index 00000000..903468aa Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/open.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/openhand_8_8.cur b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/openhand_8_8.cur new file mode 100644 index 00000000..cb444f9a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/openhand_8_8.cur differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/outputreport.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/outputreport.png new file mode 100644 index 00000000..693c3fc9 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/outputreport.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pbar-ani.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pbar-ani.gif new file mode 100644 index 00000000..cb59a04f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pbar-ani.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation2.png new file mode 100644 index 00000000..b61f396b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_bg.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_bg.gif new file mode 100644 index 00000000..ea746f0d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_bg.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_day.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_day.png new file mode 100644 index 00000000..9ff36704 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_day.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_day_dark.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_day_dark.png new file mode 100644 index 00000000..baf30f7b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_day_dark.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_month.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_month.png new file mode 100644 index 00000000..48a593d7 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_month.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_month_dark.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_month_dark.png new file mode 100644 index 00000000..931bdb70 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_month_dark.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_week.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_week.png new file mode 100644 index 00000000..d58b8193 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_week.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_week_dark.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_week_dark.png new file mode 100644 index 00000000..3bd82280 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/permutation_week_dark.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/danger.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/danger.png new file mode 100644 index 00000000..8c2efa10 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/danger.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/danger_bk.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/danger_bk.png new file mode 100644 index 00000000..7757c5ec Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/danger_bk.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/link.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/link.png new file mode 100644 index 00000000..4c925f9b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/link.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/no_security_permission.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/no_security_permission.png new file mode 100644 index 00000000..7416ad97 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/no_security_permission.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.chart.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.chart.png new file mode 100644 index 00000000..4051cff4 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.chart.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.def.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.def.gif new file mode 100644 index 00000000..68488356 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.def.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.home.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.home.png new file mode 100644 index 00000000..066e4b22 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.home.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level.png new file mode 100644 index 00000000..c181c988 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level0.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level0.png new file mode 100644 index 00000000..f38b7c8a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level0.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level1.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level1.png new file mode 100644 index 00000000..13047735 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level1.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level10.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level10.png new file mode 100644 index 00000000..7eb83c54 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level10.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level2.png new file mode 100644 index 00000000..ba8ff3b8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level3.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level3.png new file mode 100644 index 00000000..68daf2af Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level3.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level4.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level4.png new file mode 100644 index 00000000..49b925b9 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level4.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level5.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level5.png new file mode 100644 index 00000000..22f869a5 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level5.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level6.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level6.png new file mode 100644 index 00000000..686f5cf1 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level6.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level7.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level7.png new file mode 100644 index 00000000..2909eca3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level7.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level8.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level8.png new file mode 100644 index 00000000..b18aef19 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level8.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level9.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level9.png new file mode 100644 index 00000000..0372ae75 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.level9.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.levelx.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.levelx.png new file mode 100644 index 00000000..a856967f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.levelx.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.list.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.list.png new file mode 100644 index 00000000..725f171e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.list.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.org.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.org.png new file mode 100644 index 00000000..e19590cb Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.org.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.tree.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.tree.png new file mode 100644 index 00000000..311b0156 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/process.tree.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/regulate.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/regulate.png new file mode 100644 index 00000000..bcba90de Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/regulate.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/shape_link.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/shape_link.png new file mode 100644 index 00000000..6ffed625 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/shape_link.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/smooth_item-selected.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/smooth_item-selected.png new file mode 100644 index 00000000..09c27212 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pl/smooth_item-selected.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/plan.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/plan.gif new file mode 100644 index 00000000..eabba735 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/plan.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/portal_banner.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/portal_banner.jpg new file mode 100644 index 00000000..464a1f35 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/portal_banner.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/power.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/power.png new file mode 100644 index 00000000..c8df4fa3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/power.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/powssd2.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/powssd2.jpg new file mode 100644 index 00000000..bec57e02 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/powssd2.jpg differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pre_file_back.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pre_file_back.png new file mode 100644 index 00000000..f87a6df2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pre_file_back.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pre_file_list.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pre_file_list.png new file mode 100644 index 00000000..3d995e7f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pre_file_list.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pre_file_refresh.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pre_file_refresh.png new file mode 100644 index 00000000..38a82066 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/pre_file_refresh.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/publisher.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/publisher.png new file mode 100644 index 00000000..84aa8ec7 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/publisher.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/resources_common.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/resources_common.png new file mode 100644 index 00000000..e72b7bd3 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/resources_common.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/resources_theme.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/resources_theme.png new file mode 100644 index 00000000..584cc145 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/resources_theme.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/search.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/search.gif new file mode 100644 index 00000000..52e0909e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/search.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/security.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/security.png new file mode 100644 index 00000000..6538311a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/security.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/set.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/set.png new file mode 100644 index 00000000..bdc72006 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/set.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/socialStyle/gotop.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/socialStyle/gotop.png new file mode 100644 index 00000000..249f249b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/socialStyle/gotop.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/sprites.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/sprites.png new file mode 100644 index 00000000..9e19f35c Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/sprites.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/support_browsers_list.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/support_browsers_list.png new file mode 100644 index 00000000..2bd9a522 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/support_browsers_list.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/teamwork.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/teamwork.png new file mode 100644 index 00000000..a624af96 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/teamwork.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/trans.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/trans.png new file mode 100644 index 00000000..ac248bd0 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/trans.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/trash-del.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/trash-del.png new file mode 100644 index 00000000..b15550fc Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/trash-del.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/tree.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/tree.png new file mode 100644 index 00000000..92179548 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/tree.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/tree_nodes_dimension.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/tree_nodes_dimension.gif new file mode 100644 index 00000000..545499e4 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/tree_nodes_dimension.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/tree_nodes_group.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/tree_nodes_group.gif new file mode 100644 index 00000000..9951f00e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/tree_nodes_group.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/tree_nodes_process.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/tree_nodes_process.gif new file mode 100644 index 00000000..68488356 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/tree_nodes_process.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/wash-white-30.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/wash-white-30.png new file mode 100644 index 00000000..b70e0c2f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/wash-white-30.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/wf_WorkFlow_Coe_Language_Dimension_Draggable1.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/wf_WorkFlow_Coe_Language_Dimension_Draggable1.gif new file mode 100644 index 00000000..ec227711 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/wf_WorkFlow_Coe_Language_Dimension_Draggable1.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/wf_WorkFlow_Coe_Language_Dimension_Draggable2.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/wf_WorkFlow_Coe_Language_Dimension_Draggable2.gif new file mode 100644 index 00000000..a4198dcc Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/wf_WorkFlow_Coe_Language_Dimension_Draggable2.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/add1_16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/add1_16.png new file mode 100644 index 00000000..4ed1a8f6 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/add1_16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.1.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.1.png new file mode 100644 index 00000000..d08aa4cd Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.1.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.1.small.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.1.small.png new file mode 100644 index 00000000..cd678907 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.1.small.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.2.png new file mode 100644 index 00000000..0cd29a00 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.2.small.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.2.small.png new file mode 100644 index 00000000..cd678907 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.2.small.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.3.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.3.png new file mode 100644 index 00000000..be143a11 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.3.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.3.small.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.3.small.png new file mode 100644 index 00000000..cd678907 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.3.small.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.4.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.4.png new file mode 100644 index 00000000..2fd40018 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.4.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.4.small.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.4.small.png new file mode 100644 index 00000000..cd678907 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/close_process.architecture.4.small.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/del.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/del.png new file mode 100644 index 00000000..d3aea19a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/del.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/edit.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/edit.png new file mode 100644 index 00000000..86468269 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/edit.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/edit1_16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/edit1_16.png new file mode 100644 index 00000000..addce44c Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/edit1_16.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/exp.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/exp.png new file mode 100644 index 00000000..91df9c7f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/exp.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/green.ball.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/green.ball.gif new file mode 100644 index 00000000..17d4a022 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/green.ball.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/not-find-pal.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/not-find-pal.png new file mode 100644 index 00000000..7d44f976 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/not-find-pal.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.1.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.1.png new file mode 100644 index 00000000..f5ea708b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.1.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.1.small.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.1.small.png new file mode 100644 index 00000000..459e6e40 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.1.small.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.2.png new file mode 100644 index 00000000..f8f17227 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.2.small.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.2.small.png new file mode 100644 index 00000000..459e6e40 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.2.small.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.3.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.3.png new file mode 100644 index 00000000..a67114fc Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.3.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.3.small.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.3.small.png new file mode 100644 index 00000000..459e6e40 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.3.small.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.4.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.4.png new file mode 100644 index 00000000..7f346434 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.4.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.4.small.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.4.small.png new file mode 100644 index 00000000..459e6e40 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/process.architecture.4.small.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/red.ball.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/red.ball.gif new file mode 100644 index 00000000..ad53ca9a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/red.ball.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/space.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/space.gif new file mode 100644 index 00000000..fce0c754 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/space.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/stop.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/stop.png new file mode 100644 index 00000000..141b03be Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/ws/stop.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/xl.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/xl.png new file mode 100644 index 00000000..5896bf52 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/img/xl.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/css/defaultTheme.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/css/defaultTheme.css new file mode 100644 index 00000000..f473c6c8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/css/defaultTheme.css @@ -0,0 +1,92 @@ +/*! +* jquery.fixedHeaderTable. The jQuery fixedHeaderTable plugin +* +* Copyright (c) 2011 Mark Malek +* http://fixedheadertable.com +* +* Licensed under MIT +* http://www.opensource.org/licenses/mit-license.php +* +* http://docs.jquery.com/Plugins/Authoring +* jQuery authoring guidelines +* +* Launch : October 2009 +* Version : 1.3 +* Released: May 9th, 2011 +* +* +* all CSS sizing (width,height) is done in pixels (px) +*/ + +/* @group Reset */ + +.fht-table, +.fht-table thead, +.fht-table tfoot, +.fht-table tbody, +.fht-table tr, +.fht-table th, +.fht-table td { + /* position */ + margin: 0; + + /* size */ + padding: 0; + + /* text */ + font-size: 100%; + font: inherit; + vertical-align: top; + } + +.fht-table { + /* appearance */ + border-collapse: collapse; + border-spacing: 0; + } + +/* @end */ + +/* @group Content */ + +.fht-table-wrapper, +.fht-table-wrapper .fht-thead, +.fht-table-wrapper .fht-tfoot, +.fht-table-wrapper .fht-fixed-column .fht-tbody, +.fht-table-wrapper .fht-fixed-body .fht-tbody, +.fht-table-wrapper .fht-tbody { + /* appearance */ + overflow: hidden; + + /* position */ + position: relative; + } + + .fht-table-wrapper .fht-fixed-body .fht-tbody, + .fht-table-wrapper .fht-tbody { + /* appearance */ + overflow: auto; + } + + .fht-table-wrapper .fht-table .fht-cell { + /* appearance */ + overflow: hidden; + + /* size */ + height: 1px; + } + + .fht-table-wrapper .fht-fixed-column, + .fht-table-wrapper .fht-fixed-body { + /* position */ + top: 0; + left: 0; + position: absolute; + } + + .fht-table-wrapper .fht-fixed-column { + /* position */ + z-index: 1; + } + +/* @end */ \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/css/960.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/css/960.css new file mode 100644 index 00000000..65946516 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/css/960.css @@ -0,0 +1,641 @@ +/* + 960 Grid System ~ Core CSS. + Learn more ~ http://960.gs/ + + Licensed under GPL and MIT. +*/ + +/* + Forces backgrounds to span full width, + even if there is horizontal scrolling. + Increase this if your layout is wider. + + Note: IE6 works fine without this fix. +*/ + +body { + min-width: 960px; +} + +/* `Containers +----------------------------------------------------------------------------------------------------*/ + +.container_12, +.container_16 { + margin-left: auto; + margin-right: auto; + width: 960px; +} + +/* `Grid >> Global +----------------------------------------------------------------------------------------------------*/ + +.grid_1, +.grid_2, +.grid_3, +.grid_4, +.grid_5, +.grid_6, +.grid_7, +.grid_8, +.grid_9, +.grid_10, +.grid_11, +.grid_12, +.grid_13, +.grid_14, +.grid_15, +.grid_16 { + display: inline; + float: left; + margin-left: 10px; + margin-right: 10px; +} + +.push_1, .pull_1, +.push_2, .pull_2, +.push_3, .pull_3, +.push_4, .pull_4, +.push_5, .pull_5, +.push_6, .pull_6, +.push_7, .pull_7, +.push_8, .pull_8, +.push_9, .pull_9, +.push_10, .pull_10, +.push_11, .pull_11, +.push_12, .pull_12, +.push_13, .pull_13, +.push_14, .pull_14, +.push_15, .pull_15 { + position: relative; +} + +.container_12 .grid_3, +.container_16 .grid_4 { + width: 220px; +} + +.container_12 .grid_6, +.container_16 .grid_8 { + width: 460px; +} + +.container_12 .grid_9, +.container_16 .grid_12 { + width: 700px; +} + +.container_12 .grid_12, +.container_16 .grid_16 { + width: 940px; +} + +/* `Grid >> Children (Alpha ~ First, Omega ~ Last) +----------------------------------------------------------------------------------------------------*/ + +.alpha { + margin-left: 0; +} + +.omega { + margin-right: 0; +} + +/* `Grid >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .grid_1 { + width: 60px; +} + +.container_12 .grid_2 { + width: 140px; +} + +.container_12 .grid_4 { + width: 300px; +} + +.container_12 .grid_5 { + width: 380px; +} + +.container_12 .grid_7 { + width: 540px; +} + +.container_12 .grid_8 { + width: 620px; +} + +.container_12 .grid_10 { + width: 780px; +} + +.container_12 .grid_11 { + width: 860px; +} + +/* `Grid >> 16 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_16 .grid_1 { + width: 40px; +} + +.container_16 .grid_2 { + width: 100px; +} + +.container_16 .grid_3 { + width: 160px; +} + +.container_16 .grid_5 { + width: 280px; +} + +.container_16 .grid_6 { + width: 340px; +} + +.container_16 .grid_7 { + width: 400px; +} + +.container_16 .grid_9 { + width: 520px; +} + +.container_16 .grid_10 { + width: 580px; +} + +.container_16 .grid_11 { + width: 640px; +} + +.container_16 .grid_13 { + width: 760px; +} + +.container_16 .grid_14 { + width: 820px; +} + +.container_16 .grid_15 { + width: 880px; +} + +/* `Prefix Extra Space >> Global +----------------------------------------------------------------------------------------------------*/ + +.container_12 .prefix_3, +.container_16 .prefix_4 { + padding-left: 240px; +} + +.container_12 .prefix_6, +.container_16 .prefix_8 { + padding-left: 480px; +} + +.container_12 .prefix_9, +.container_16 .prefix_12 { + padding-left: 720px; +} + +/* `Prefix Extra Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .prefix_1 { + padding-left: 80px; +} + +.container_12 .prefix_2 { + padding-left: 160px; +} + +.container_12 .prefix_4 { + padding-left: 320px; +} + +.container_12 .prefix_5 { + padding-left: 400px; +} + +.container_12 .prefix_7 { + padding-left: 560px; +} + +.container_12 .prefix_8 { + padding-left: 640px; +} + +.container_12 .prefix_10 { + padding-left: 800px; +} + +.container_12 .prefix_11 { + padding-left: 880px; +} + +/* `Prefix Extra Space >> 16 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_16 .prefix_1 { + padding-left: 60px; +} + +.container_16 .prefix_2 { + padding-left: 120px; +} + +.container_16 .prefix_3 { + padding-left: 180px; +} + +.container_16 .prefix_5 { + padding-left: 300px; +} + +.container_16 .prefix_6 { + padding-left: 360px; +} + +.container_16 .prefix_7 { + padding-left: 420px; +} + +.container_16 .prefix_9 { + padding-left: 540px; +} + +.container_16 .prefix_10 { + padding-left: 600px; +} + +.container_16 .prefix_11 { + padding-left: 660px; +} + +.container_16 .prefix_13 { + padding-left: 780px; +} + +.container_16 .prefix_14 { + padding-left: 840px; +} + +.container_16 .prefix_15 { + padding-left: 900px; +} + +/* `Suffix Extra Space >> Global +----------------------------------------------------------------------------------------------------*/ + +.container_12 .suffix_3, +.container_16 .suffix_4 { + padding-right: 240px; +} + +.container_12 .suffix_6, +.container_16 .suffix_8 { + padding-right: 480px; +} + +.container_12 .suffix_9, +.container_16 .suffix_12 { + padding-right: 720px; +} + +/* `Suffix Extra Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .suffix_1 { + padding-right: 80px; +} + +.container_12 .suffix_2 { + padding-right: 160px; +} + +.container_12 .suffix_4 { + padding-right: 320px; +} + +.container_12 .suffix_5 { + padding-right: 400px; +} + +.container_12 .suffix_7 { + padding-right: 560px; +} + +.container_12 .suffix_8 { + padding-right: 640px; +} + +.container_12 .suffix_10 { + padding-right: 800px; +} + +.container_12 .suffix_11 { + padding-right: 880px; +} + +/* `Suffix Extra Space >> 16 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_16 .suffix_1 { + padding-right: 60px; +} + +.container_16 .suffix_2 { + padding-right: 120px; +} + +.container_16 .suffix_3 { + padding-right: 180px; +} + +.container_16 .suffix_5 { + padding-right: 300px; +} + +.container_16 .suffix_6 { + padding-right: 360px; +} + +.container_16 .suffix_7 { + padding-right: 420px; +} + +.container_16 .suffix_9 { + padding-right: 540px; +} + +.container_16 .suffix_10 { + padding-right: 600px; +} + +.container_16 .suffix_11 { + padding-right: 660px; +} + +.container_16 .suffix_13 { + padding-right: 780px; +} + +.container_16 .suffix_14 { + padding-right: 840px; +} + +.container_16 .suffix_15 { + padding-right: 900px; +} + +/* `Push Space >> Global +----------------------------------------------------------------------------------------------------*/ + +.container_12 .push_3, +.container_16 .push_4 { + left: 240px; +} + +.container_12 .push_6, +.container_16 .push_8 { + left: 480px; +} + +.container_12 .push_9, +.container_16 .push_12 { + left: 720px; +} + +/* `Push Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .push_1 { + left: 80px; +} + +.container_12 .push_2 { + left: 160px; +} + +.container_12 .push_4 { + left: 320px; +} + +.container_12 .push_5 { + left: 400px; +} + +.container_12 .push_7 { + left: 560px; +} + +.container_12 .push_8 { + left: 640px; +} + +.container_12 .push_10 { + left: 800px; +} + +.container_12 .push_11 { + left: 880px; +} + +/* `Push Space >> 16 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_16 .push_1 { + left: 60px; +} + +.container_16 .push_2 { + left: 120px; +} + +.container_16 .push_3 { + left: 180px; +} + +.container_16 .push_5 { + left: 300px; +} + +.container_16 .push_6 { + left: 360px; +} + +.container_16 .push_7 { + left: 420px; +} + +.container_16 .push_9 { + left: 540px; +} + +.container_16 .push_10 { + left: 600px; +} + +.container_16 .push_11 { + left: 660px; +} + +.container_16 .push_13 { + left: 780px; +} + +.container_16 .push_14 { + left: 840px; +} + +.container_16 .push_15 { + left: 900px; +} + +/* `Pull Space >> Global +----------------------------------------------------------------------------------------------------*/ + +.container_12 .pull_3, +.container_16 .pull_4 { + left: -240px; +} + +.container_12 .pull_6, +.container_16 .pull_8 { + left: -480px; +} + +.container_12 .pull_9, +.container_16 .pull_12 { + left: -720px; +} + +/* `Pull Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .pull_1 { + left: -80px; +} + +.container_12 .pull_2 { + left: -160px; +} + +.container_12 .pull_4 { + left: -320px; +} + +.container_12 .pull_5 { + left: -400px; +} + +.container_12 .pull_7 { + left: -560px; +} + +.container_12 .pull_8 { + left: -640px; +} + +.container_12 .pull_10 { + left: -800px; +} + +.container_12 .pull_11 { + left: -880px; +} + +/* `Pull Space >> 16 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_16 .pull_1 { + left: -60px; +} + +.container_16 .pull_2 { + left: -120px; +} + +.container_16 .pull_3 { + left: -180px; +} + +.container_16 .pull_5 { + left: -300px; +} + +.container_16 .pull_6 { + left: -360px; +} + +.container_16 .pull_7 { + left: -420px; +} + +.container_16 .pull_9 { + left: -540px; +} + +.container_16 .pull_10 { + left: -600px; +} + +.container_16 .pull_11 { + left: -660px; +} + +.container_16 .pull_13 { + left: -780px; +} + +.container_16 .pull_14 { + left: -840px; +} + +.container_16 .pull_15 { + left: -900px; +} + +/* `Clear Floated Elements +----------------------------------------------------------------------------------------------------*/ + +/* http://sonspring.com/journal/clearing-floats */ + +.clear { + clear: both; + display: block; + overflow: hidden; + visibility: hidden; + width: 0; + height: 0; +} + +/* http://perishablepress.com/press/2009/12/06/new-clearfix-hack */ + +.clearfix:after { + clear: both; + content: ' '; + display: block; + font-size: 0; + line-height: 0; + visibility: hidden; + width: 0; + height: 0; +} + +/* + The following zoom:1 rule is specifically for IE6 + IE7. + Move to separate stylesheet if invalid CSS is a problem. +*/ + +* html .clearfix, +*:first-child+html .clearfix { + zoom: 1; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/css/demo.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/css/demo.css new file mode 100644 index 00000000..fffdae5f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/css/demo.css @@ -0,0 +1,236 @@ +body { + /* appearance */ + background-image: url(../images/bg.png); + background-repeat: repeat; + + /* text */ + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + } + +.styles { + display: none; + } + +input::-webkit-input-placeholder { + color: #585858; + } +input:-moz-placeholder { + color: #585858; + } + +.button { + /* appearance */ + background-color: #3f3f3f; + background-image: -moz-linear-gradient( + top, + rgba(255,255,255,0.0) 0%, + rgba(255,255,255,0.1) 50%); + + background-image: -webkit-gradient( + linear, left top, left bottom, + color-stop(100%,rgba(255,255,255,0.0)), + color-stop(50%,rgba(255,255,255,0.1))); + border: 1px solid #000000; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: 0 1px 0 rgba(139,139,139,1) inset, 0 1px 0 rgba(88,88,88,1); + -moz-box-shadow: 0 1px 0 rgba(139,139,139,1) inset, 0 1px 0 rgba(88,88,88,1); + box-shadow: 0 1px 0 rgba(139,139,139,1) inset, 0 1px 0 rgba(88,88,88,1); + + /* position */ + display: inline-block; + margin: 10px 0; + + /* size */ + padding: 0 10px; + + /* text */ + color: #eaeaea; + font-size: 12px; + line-height: 30px; + text-decoration: none; + white-space: nowrap; + } +.button:hover { + /* appearance */ + background-color: #6495ed; + -webkit-box-shadow: 0 0 3px #6495ed; + -moz-box-shadow: 0 0 3px #6495ed; + box-shadow: 0 0 3px #6495ed; + } + +#buildTable { + margin-top: 20px; + } + +#tablePlaceholder { + margin-top: 40px; + } + +.table_options { + /* appearance */ + background-color: #252525; + background-image: -moz-linear-gradient( + top, + rgba(255,255,255,0.05) 20%, + rgba(255,255,255,0.0) 80%); + + background-image: -webkit-gradient( + linear, left top, left bottom, + color-stop(20%,rgba(255,255,255,0.05)), + color-stop(80%,rgba(255,255,255,0.0))); + border: 1px solid #000000; + -webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.75); + -moz-box-shadow: 0 5px 10px rgba(0,0,0,0.75); + box-shadow: 0 5px 10px rgba(0,0,0,0.75); + overflow: hidden; + + /* size */ + padding: 10px 0; + + } + h2 { + /* text */ + color: #dadada; + font-size: 14px; + font-weight: bold; + text-align: center; + text-shadow: 0 -1px 1px #000000; + } + .table_options fieldset { + /* appearance */ + border: none; + + /* size */ + padding: 5px 0; + + /* text */ + text-align: right; + } + .table_options label { + /* size */ + padding: 0 10px 0 0; + + /* text */ + color: #b2b2b2; + font-size: 12px; + text-shadow: 0 -1px 1px #000000; + + } + .table_options input, + .table_options input:focus { + /* appearance */ + background-color: #1f1f1f; + border: 1px solid #000000; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: 0 1px 1px rgba(63,63,63,1), 0 1px 3px rgba(0,0,0,1) inset; + -moz-box-shadow: 0 1px 1px rgba(63,63,63,1), 0 1px 3px rgba(0,0,0,1) inset; + box-shadow: 0 1px 1px rgba(63,63,63,1), 0 1px 3px rgba(0,0,0,1) inset; + + /* size */ + padding: 8px 5px; + width: 50px; + + /* text */ + color: #fff; + } + .table_options input:focus { + outline: 1px solid #fff; + } + + + + +/* Fancy Dark Table */ +.fancyDarkTable .numeric { + /* text */ + text-align: right; + } + +.fancyDarkTable td, .fancyDarkTable th { + border: 1px solid #000000; + padding: 5px; +} + +.fancyDarkTable thead tr th { + padding: 10px 5px 10px 5px; + } + +.fancyDarkTable { + /*border-collapse: separate;*/ + + /* text */ + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + } + +.fancyDarkTable tbody tr td { + /* appearance */ + background-color: #3f3f3f; + background-image: -moz-linear-gradient( + top, + rgba(255,255,255,0.0) 0%, + rgba(255,255,255,0.02) 100%); + + background-image: -webkit-gradient( + linear, left top, left bottom, + color-stop(0%,rgba(255,255,255,0.0)), + color-stop(100%,rgba(255,255,255,0.02))); + border-bottom-color: #2f2f2f; + border-right-color: #2f2f2f; + + /* size */ + padding: 10px 5px 30px 5px; + + /* text */ + color: #FFFFFF; + font-size: 11px; + font-weight: bold; + text-shadow: 0 -1px 1px #000000; + } + +.fancyDarkTable tbody tr.odd td { + /* appearance */ + background-color: #464646; + background-image: -moz-linear-gradient( + top, + rgba(255,255,255,0.0) 0%, + rgba(255,255,255,0.02) 100%); + + background-image: -webkit-gradient( + linear, left top, left bottom, + color-stop(0%,rgba(255,255,255,0.0)), + color-stop(100%,rgba(255,255,255,0.02))); + border-right-color: #2f2f2f; + } + +.fancyDarkTable thead tr th, +.fancyDarkTable tfoot tr td { + /* appearance */ + background-color: #151515; + background-image: -moz-linear-gradient( + top, + rgba(255,255,255,0.05) 0%, + rgba(255,255,255,0.0) 100%); + + background-image: -webkit-gradient( + linear, left top, left bottom, + color-stop(0%,rgba(255,255,255,0.05)), + color-stop(100%,rgba(255,255,255,0.0))); + + /* text */ + color: #ffffff; + font-size: 12px; + font-weight: bold; + text-shadow: 0 -1px 1px #000; + } + +.fancyDarkTable .fht-head { + -webkit-box-shadow: 0 -1px 0 #3f3f3f; + -moz-box-shadow: 0 -1px 0 #3f3f3f; + box-shadow: 0 -1px 0 #3f3f3f; + z-index: 1; + position: relative; + } \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/css/myTheme.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/css/myTheme.css new file mode 100644 index 00000000..994efc7f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/css/myTheme.css @@ -0,0 +1,239 @@ +.divider { + margin-top: 40px; + } + +.button { + /* appearance */ + background-color: #3f3f3f; + background-image: -moz-linear-gradient( + top, + rgba(255,255,255,0.0) 0%, + rgba(255,255,255,0.1) 50%); + + background-image: -webkit-gradient( + linear, left top, left bottom, + color-stop(100%,rgba(255,255,255,0.0)), + color-stop(50%,rgba(255,255,255,0.1))); + border: 1px solid #000000; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: 0 1px 0 rgba(139,139,139,1) inset, 0 1px 0 rgba(88,88,88,1); + -moz-box-shadow: 0 1px 0 rgba(139,139,139,1) inset, 0 1px 0 rgba(88,88,88,1); + box-shadow: 0 1px 0 rgba(139,139,139,1) inset, 0 1px 0 rgba(88,88,88,1); + cursor: pointer; + + /* position */ + display: inline-block; + margin: 10px; + + /* size */ + padding: 0 10px; + + /* text */ + color: #eaeaea; + font-size: 12px; + line-height: 30px; + text-decoration: none; + white-space: nowrap; + } +.button:hover { + /* appearance */ + background-color: #6495ed; + -webkit-box-shadow: 0 0 3px #6495ed; + -moz-box-shadow: 0 0 3px #6495ed; + box-shadow: 0 0 3px #6495ed; + } + +.myTableWrapper { + width: 800px; + height: 500px; + } + +.height250 { + height: 250px; + overflow-x: auto; + overflow-y: auto; +} + +.height400 { + height: 400px; + overflow-x: auto; + overflow-y: auto; +} + +.fancyTable td, .fancyTable th { + /* appearance */ + border: 1px solid #778899; + + /* size */ + padding: 5px; + } + +.fancyTable { + /* text */ + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + } + +.fancyTable tbody tr td { + /* appearance */ + background-color: #eef2f9; + background-image: -moz-linear-gradient( + top, + rgba(255,255,255,0.4) 0%, + rgba(255,255,255,0.2) 50%, + rgba(255,255,255,0.1) 51%, + rgba(255,255,255,0.0) 100%); + + background-image: -webkit-gradient( + linear, left top, left bottom, + color-stop(0%,rgba(255,255,255,0.4)), + color-stop(50%,rgba(255,255,255,0.2)), + color-stop(51%,rgba(255,255,255,0.1)), + color-stop(100%,rgba(255,255,255,0.0))); + + /* text */ + color: #262c31; + font-size: 11px; + } + +.fancyTable tbody tr.odd td { + /* appearance */ + background-color: #d6e0ef; + background-image: -moz-linear-gradient( + top, + rgba(255,255,255,0.4) 0%, + rgba(255,255,255,0.2) 50%, + rgba(255,255,255,0.1) 51%, + rgba(255,255,255,0.0) 100%); + + background-image: -webkit-gradient( + linear, left top, left bottom, + color-stop(0%,rgba(255,255,255,0.4)), + color-stop(50%,rgba(255,255,255,0.2)), + color-stop(51%,rgba(255,255,255,0.1)), + color-stop(100%,rgba(255,255,255,0.0))); + } + +.fancyTable thead tr th, +.fancyTable thead tr td, +.fancyTable tfoot tr th, +.fancyTable tfoot tr td { + /* appearance */ + background-color: #8ca9cf; + background-image: -moz-linear-gradient( + top, + rgba(255,255,255,0.4) 0%, + rgba(255,255,255,0.2) 50%, + rgba(255,255,255,0.1) 51%, + rgba(255,255,255,0.0) 100%); + + background-image: -webkit-gradient( + linear, left top, left bottom, + color-stop(0%,rgba(255,255,255,0.4)), + color-stop(50%,rgba(255,255,255,0.2)), + color-stop(51%,rgba(255,255,255,0.1)), + color-stop(100%,rgba(255,255,255,0.0))); + + /* text */ + color: #121517; + font-size: 12px; + font-weight: bold; + text-shadow: 0 1px 1px #e8ebee; + } + + +/* Fancy Dark Table */ +.fancyDarkTable .numeric { + /* text */ + text-align: right; + } + +.fancyDarkTable td, .fancyDarkTable th { + border: 1px solid #000000; + padding: 5px; +} + +.fancyDarkTable thead tr th { + padding: 10px 5px 10px 5px; + } + +.fancyDarkTable { + /*border-collapse: separate;*/ + + /* text */ + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + } + +.fancyDarkTable tbody tr td { + /* appearance */ + background-color: #48535e; + background-image: -moz-linear-gradient( + top, + rgba(255,255,255,0.0) 0%, + rgba(255,255,255,0.02) 100%); + + background-image: -webkit-gradient( + linear, left top, left bottom, + color-stop(0%,rgba(255,255,255,0.0)), + color-stop(100%,rgba(255,255,255,0.02))); + border-bottom-color: #22272e; + border-top-color: #708090; + border-right-color: #000; + border-left-color: #3c454f; + + /* size */ + padding: 10px 5px 30px 5px; + + /* text */ + color: #FFFFFF; + font-size: 11px; + font-weight: bold; + text-shadow: 0 -1px 1px #000000; + } + +.fancyDarkTable tbody tr.odd td { + /* appearance */ + background-color: #3c454f; + background-image: -moz-linear-gradient( + top, + rgba(255,255,255,0.0) 0%, + rgba(255,255,255,0.02) 100%); + + background-image: -webkit-gradient( + linear, left top, left bottom, + color-stop(0%,rgba(255,255,255,0.0)), + color-stop(100%,rgba(255,255,255,0.02))); + border-right-color: #000; + } + +.fancyDarkTable thead tr th, +.fancyDarkTable tfoot tr td { + /* appearance */ + background-color: #0b0d10; + background-image: -moz-linear-gradient( + top, + rgba(255,255,255,0.4) 0%, + rgba(255,255,255,0.2) 50%, + rgba(255,255,255,0.1) 51%, + rgba(255,255,255,0.0) 100%); + + background-image: -webkit-gradient( + linear, left top, left bottom, + color-stop(0%,rgba(255,255,255,0.4)), + color-stop(50%,rgba(255,255,255,0.2)), + color-stop(51%,rgba(255,255,255,0.1)), + color-stop(100%,rgba(255,255,255,0.0))); + + /* text */ + color: #ffffff; + font-size: 12px; + font-weight: bold; + text-shadow: 0 -1px 1px #000; + } + +.fancyDarkTable .fht-head { + -webkit-box-shadow: 0 5px 10px #000; + z-index: 1; + position: relative; + } \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/css/reset.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/css/reset.css new file mode 100644 index 00000000..13f8e0a1 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/css/reset.css @@ -0,0 +1,53 @@ +/* http://meyerweb.com/eric/tools/css/reset/ */ +/* v1.0 | 20080212 */ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +/* remember to define focus styles! */ +:focus { + outline: 0; +} + +/* remember to highlight inserts somehow! */ +ins { + text-decoration: none; +} +del { + text-decoration: line-through; +} + +/* tables still need 'cellspacing="0"' in the markup */ +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/demo.html b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/demo.html new file mode 100644 index 00000000..0e7f0bc0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/demo.html @@ -0,0 +1,60 @@ + + + + FixedHeaderTable Demo + + + + + + + + +
                                              + +
                                              +
                                              +
                                              +

                                              Table Properties

                                              +
                                              + + +
                                              +
                                              + + +
                                              +
                                              + +
                                              +

                                              Table Appearance

                                              +
                                              + + +
                                              +
                                              + + +
                                              +
                                              + +
                                              +

                                               

                                              +
                                              + + +
                                              +
                                              + + +
                                              + +
                                              +
                                              +
                                              + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/demo.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/demo.js new file mode 100644 index 00000000..267073c4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/demo.js @@ -0,0 +1,13 @@ +$(document).ready(function() { + $('#myTable01').fixedHeaderTable({ footer: false, cloneHeadToFoot: true, altClass: 'odd', autoShow: true }); + + $('#myTable01').fixedHeaderTable('show', 1000); + + $('#myTable02').fixedHeaderTable({ footer: true, altClass: 'odd' }); + + $('#myTable05').fixedHeaderTable({ altClass: 'odd', footer: true, fixedColumns: 1 }); + + $('#myTable03').fixedHeaderTable({ altClass: 'odd', footer: true, fixedColumns: 1 }); + + $('#myTable04').fixedHeaderTable({ altClass: 'odd', footer: true, cloneHeadToFoot: true, fixedColumns: 3 }); +}); diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/images/bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/images/bg.png new file mode 100644 index 00000000..2cf8af04 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/images/bg.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/js/demo.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/js/demo.js new file mode 100644 index 00000000..0fff0896 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/js/demo.js @@ -0,0 +1,73 @@ +$(document).ready(function() { + $('#buildTable').bind('click', function(e) { + e.preventDefault(); + + $('#tablePlaceholder').empty() + .buildTable(); + }); + + $('#runPlugin').bind('click', function(e) { + e.preventDefault(); + + $('#tablePlaceholder table').fixedHeaderTable({ height: '400', altClass: 'odd', themeClass: 'fancyDarkTable' }); + }); +}); + +$.fn.extend({ + buildTable: function() { + var defaults = { + width: '100%', + height: 400, + rows: 100, + columns: 5, + borderWidth: 1, + borderColor: '#000000', + padding: 5 + }; + + var $self = $(this), + self = this, + rows = $('#rows').val(), + columns = $('#columns').val(), + borderWidth = $('#borderWidth').val(), + borderColor = $('#borderColor').val(), + padding = $('#padding').val(), + $thead, + $tbody, + $currentRow, + $styles, + options = {}; + + if ( padding != '' ) { + options.padding = padding; + } + + options = $.extend({}, defaults, options); + + $self.append('
                                              '); + + $thead = $self.find('thead'); + $thead.append(''); + for ( var column = 1; column <= columns; column++ ) { + $thead.find('tr') + .append('Column '+column+''); + } + + $tbody = $self.find('tbody'); + for ( var row = 1; row <= rows; row++ ) { + $currentRow = $('').appendTo($tbody); + + for ( var column = 1; column <= columns; column++ ) { + $currentRow.append('Column '+column+''); + } + } + +/* + var paddingStyle = "padding: " + options.padding + "px !important;"; + + $styles = $('').appendTo('.styles'); + + $styles.html('th, td { '+paddingStyle+' }'); +*/ + } +}); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/test.html b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/test.html new file mode 100644 index 00000000..f5856db7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/demo/test.html @@ -0,0 +1,1287 @@ + + + + FixedHeaderTable Test + + + + + + + + + +
                                              +
                                              +
                                              +    				
                                              +$('#myTable01').fixedHeaderTable({ 
                                              +	footer: true,
                                              +	cloneHeadToFoot: true,
                                              +	altClass: 'odd',
                                              +	autoShow: false
                                              +});
                                              +    				
                                              +    			
                                              +
                                              +
                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                              BrowserVisitsPages/VisitAvg. Time on Site% New VisitsBounce Rate
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              +
                                              +
                                              +
                                              + +
                                              +
                                              +
                                              +        		    				
                                              +$('#myTable02').fixedHeaderTable({
                                              +	footer: true,
                                              +	altClass: 'odd',
                                              +});
                                              +        		    				
                                              +        		    			
                                              +
                                              +
                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                              BrowserVisitsPages/VisitAvg. Time on Site% New VisitsBounce Rate
                                              This is a unique footer12345
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox Web Browser Version 4.01,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%
                                              +
                                              +
                                              +
                                              + +
                                              +
                                              +
                                              +        			
                                              +$('#myTable05').fixedHeaderTable({
                                              +	altClass: 'odd',
                                              +	footer: true,
                                              +	fixedColumns: 1,
                                              +});
                                              +        			
                                              +        		
                                              +
                                              +
                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                              BrowserVisitsPages/VisitAvg. Time on Site% New VisitsBounce RateAvg. Time on Site% New VisitsBounce Rate
                                              BrowserVisitsPages/VisitAvg. Time on Site% New VisitsBounce RateAvg. Time on Site% New VisitsBounce Rate
                                              Firefox first1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:22 test test test70.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00% test test test32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              +
                                              +
                                              +
                                              + +
                                              +
                                              +
                                              +        			
                                              +$('#myTable03').fixedHeaderTable({
                                              +	altClass: 'odd',
                                              +	footer: true,
                                              +	fixedColumns: 1,
                                              +});
                                              +        			
                                              +        		
                                              +
                                              +
                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                              BrowserVisitsPages/VisitAvg. Time on Site% New VisitsBounce RateAvg. Time on Site% New VisitsBounce Rate
                                              Firefox first1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:22 test test test70.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00% test test test32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              +
                                              +
                                              +
                                              + +
                                              +
                                              +
                                              +        			
                                              +$('#myTable04').fixedHeaderTable({
                                              +	altClass: 'odd',
                                              +	footer: true,
                                              +	cloneHeadToFoot: true,
                                              +	fixedColumn: 3,
                                              +});
                                              +        			
                                              +        		
                                              +
                                              +
                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                              BrowserVisitsPages/VisitAvg. Time on Site% New VisitsBounce RateAvg. Time on Site% New VisitsBounce Rate
                                              Firefox first1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:22 test test test70.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00% test test test32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              Firefox1,9903.1100:04:2270.00%32.61%00:04:2270.00%32.61%
                                              +
                                              +
                                              +
                                              + + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/jquery.fixedheadertable.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/jquery.fixedheadertable.js new file mode 100644 index 00000000..e6bee101 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/jquery.fixedheadertable.js @@ -0,0 +1,705 @@ +/*! + * jquery.fixedHeaderTable. The jQuery fixedHeaderTable plugin + * + * Copyright (c) 2011 Mark Malek + * http://fixedheadertable.com + * + * Licensed under MIT + * http://www.opensource.org/licenses/mit-license.php + * + * http://docs.jquery.com/Plugins/Authoring + * jQuery authoring guidelines + * + * Launch : October 2009 + * Version : 1.3 + * Released: May 9th, 2011 + * + * + * all CSS sizing (width,height) is done in pixels (px) + */ + +(function ($) { + + $.fn.fixedHeaderTable = function (method) { + + // plugin's default options + var defaults = { + + width: '100%', + height: '100%', + themeClass: 'fht-default', + borderCollapse: true, + fixedColumns: 0, // fixed first columns + fixedColumn: false, // For backward-compatibility + sortable: false, + autoShow: true, // hide table after its created + footer: false, // show footer + cloneHeadToFoot: false, // clone head and use as footer + autoResize: false, // resize table if its parent wrapper changes size + create: null // callback after plugin completes + }; + + var settings = {}; + + // public methods + var methods = { + init: function (options) { + settings = $.extend({}, defaults, options); + + // iterate through all the DOM elements we are attaching the plugin to + return this.each(function () { + var $self = $(this), // reference the jQuery version of the current DOM element + self = this; // reference to the actual DOM element + + if (helpers._isTable($self)) { + methods.setup.apply(this, Array.prototype.slice.call(arguments, 1)); + $.isFunction(settings.create) && settings.create.call(this); + } else { + $.error('Invalid table mark-up'); + } + }); + }, + + /* + * Setup table structure for fixed headers and optional footer + */ + setup: function (options) { + var $self = $(this), + self = this, + $thead = $self.find('thead'), + $tfoot = $self.find('tfoot'), + $tbody = $self.find('tbody'), + $wrapper, + $divHead, + $divFoot, + $divBody, + $fixedHeadRow, + $temp, + tfootHeight = 0; + + settings.originalTable = $(this).clone(); + settings.includePadding = helpers._isPaddingIncludedWithWidth(); + settings.scrollbarOffset = helpers._getScrollbarWidth(); + settings.themeClassName = settings.themeClass; + + if (settings.width.search('%') > -1) { + var widthMinusScrollbar = $self.parent().width() - settings.scrollbarOffset; + } else { + var widthMinusScrollbar = settings.width - settings.scrollbarOffset; + } + + $self.css({ + width: widthMinusScrollbar + }); + + + if (!$self.closest('.fht-table-wrapper').length) { + $self.addClass('fht-table'); + $self.wrap('
                                              '); + } + + $wrapper = $self.closest('.fht-table-wrapper'); + + if(settings.fixedColumn == true && settings.fixedColumns <= 0) { + settings.fixedColumns = 1; + } + + if (settings.fixedColumns > 0 && $wrapper.find('.fht-fixed-column').length == 0) { + $self.wrap('
                                              '); + + var $fixedColumns = $('
                                              ').prependTo($wrapper), + $fixedBody = $wrapper.find('.fht-fixed-body'); + } + + $wrapper.css({ + width: settings.width, + height: settings.height + }) + .addClass(settings.themeClassName); + + if (!$self.hasClass('fht-table-init')) { + + $self.wrap('
                                              '); + + } + $divBody = $self.closest('.fht-tbody'); + + var tableProps = helpers._getTableProps($self); + + helpers._setupClone($divBody, tableProps.tbody); + + if (!$self.hasClass('fht-table-init')) { + if (settings.fixedColumns > 0) { + $divHead = $('
                                              ').prependTo($fixedBody); + } else { + $divHead = $('
                                              ').prependTo($wrapper); + } + + $divHead.find('table.fht-table').addClass(settings.originalTable.attr('class')); + $thead.clone().appendTo($divHead.find('table')); + } else { + $divHead = $wrapper.find('div.fht-thead'); + } + + helpers._setupClone($divHead, tableProps.thead); + + $self.css({ + 'margin-top': -$divHead.outerHeight(true) + }); + + /* + * Check for footer + * Setup footer if present + */ + if (settings.footer == true) { + + helpers._setupTableFooter($self, self, tableProps); + + if (!$tfoot.length) { + $tfoot = $wrapper.find('div.fht-tfoot table'); + } + + tfootHeight = $tfoot.outerHeight(true); + } + + var tbodyHeight = $wrapper.height() - $thead.outerHeight(true) - tfootHeight - tableProps.border; + + $divBody.css({ + 'height': tbodyHeight + }); + + $self.addClass('fht-table-init'); + + if (typeof(settings.altClass) !== 'undefined') { + methods.altRows.apply(self); + } + + if (settings.fixedColumns > 0) { + helpers._setupFixedColumn($self, self, tableProps); + } + + if (!settings.autoShow) { + $wrapper.hide(); + } + + helpers._bindScroll($divBody, tableProps); + + return self; + }, + + /* + * Resize the table + * Incomplete - not implemented yet + */ + resize: function(options) { + var $self = $(this), + self = this; + return self; + }, + + /* + * Add CSS class to alternating rows + */ + altRows: function(arg1) { + var $self = $(this), + self = this, + altClass = (typeof(arg1) !== 'undefined') ? arg1 : settings.altClass; + + $self.closest('.fht-table-wrapper') + .find('tbody tr:odd:not(:hidden)') + .addClass(altClass); + }, + + /* + * Show a hidden fixedHeaderTable table + */ + show: function(arg1, arg2, arg3) { + var $self = $(this), + self = this, + $wrapper = $self.closest('.fht-table-wrapper'); + + // User provided show duration without a specific effect + if (typeof(arg1) !== 'undefined' && typeof(arg1) === 'number') { + + $wrapper.show(arg1, function() { + $.isFunction(arg2) && arg2.call(this); + }); + + return self; + + } else if (typeof(arg1) !== 'undefined' && typeof(arg1) === 'string' + && typeof(arg2) !== 'undefined' && typeof(arg2) === 'number') { + // User provided show duration with an effect + + $wrapper.show(arg1, arg2, function() { + $.isFunction(arg3) && arg3.call(this); + }); + + return self; + + } + + $self.closest('.fht-table-wrapper') + .show(); + $.isFunction(arg1) && arg1.call(this); + + return self; + }, + + /* + * Hide a fixedHeaderTable table + */ + hide: function(arg1, arg2, arg3) { + var $self = $(this), + self = this, + $wrapper = $self.closest('.fht-table-wrapper'); + + // User provided show duration without a specific effect + if (typeof(arg1) !== 'undefined' && typeof(arg1) === 'number') { + $wrapper.hide(arg1, function() { + $.isFunction(arg3) && arg3.call(this); + }); + + return self; + } else if (typeof(arg1) !== 'undefined' && typeof(arg1) === 'string' + && typeof(arg2) !== 'undefined' && typeof(arg2) === 'number') { + + $wrapper.hide(arg1, arg2, function() { + $.isFunction(arg3) && arg3.call(this); + }); + + return self; + } + + $self.closest('.fht-table-wrapper') + .hide(); + + $.isFunction(arg3) && arg3.call(this); + + + + return self; + }, + + /* + * Destory fixedHeaderTable and return table to original state + */ + destroy: function() { + var $self = $(this), + self = this, + $wrapper = $self.closest('.fht-table-wrapper'); + + $self.insertBefore($wrapper) + .removeAttr('style') + .append($wrapper.find('tfoot')) + .removeClass('fht-table fht-table-init') + .find('.fht-cell') + .remove(); + + $wrapper.remove(); + + return self; + } + + } + + // private methods + var helpers = { + + /* + * return boolean + * True if a thead and tbody exist. + */ + _isTable: function($obj) { + var $self = $obj, + hasTable = $self.is('table'), + hasThead = $self.find('thead').length > 0, + hasTbody = $self.find('tbody').length > 0; + + if (hasTable && hasThead && hasTbody) { + return true; + } + + return false; + + }, + + /* + * return void + * bind scroll event + */ + _bindScroll: function($obj, tableProps) { + var $self = $obj, + $wrapper = $self.closest('.fht-table-wrapper'), + $thead = $self.siblings('.fht-thead'), + $tfoot = $self.siblings('.fht-tfoot'); + + $self.bind('scroll', function() { + if (settings.fixedColumns > 0) { + var $fixedColumns = $wrapper.find('.fht-fixed-column'); + + $fixedColumns.find('.fht-tbody table') + .css({ + 'margin-top': -$self.scrollTop() + }); + } + + $thead.find('table') + .css({ + 'margin-left': -this.scrollLeft + }); + + if (settings.footer || settings.cloneHeadToFoot) { + $tfoot.find('table') + .css({ + 'margin-left': -this.scrollLeft + }); + } + }); + }, + + /* + * return void + */ + _fixHeightWithCss: function ($obj, tableProps) { + if (settings.includePadding) { + $obj.css({ + 'height': $obj.height() + tableProps.border + }); + } else { + $obj.css({ + 'height': $obj.parent().height() + tableProps.border + }); + } + }, + + /* + * return void + */ + _fixWidthWithCss: function($obj, tableProps, width) { + if (settings.includePadding) { + $obj.each(function(index) { + $(this).css({ + 'width': width == undefined ? $(this).width() + tableProps.border : width + tableProps.border + }); + }); + } else { + $obj.each(function(index) { + $(this).css({ + 'width': width == undefined ? $(this).parent().width() + tableProps.border : width + tableProps.border + }); + }); + } + + }, + + /* + * return void + */ + _setupFixedColumn: function ($obj, obj, tableProps) { + var $self = $obj, + self = obj, + $wrapper = $self.closest('.fht-table-wrapper'), + $fixedBody = $wrapper.find('.fht-fixed-body'), + $fixedColumn = $wrapper.find('.fht-fixed-column'), + $thead = $('
                                              '), + $tbody = $('
                                              '), + $tfoot = $('
                                              '), + $firstThChildren,// = $fixedBody.find('.fht-thead thead tr > *:first-child'), + $firstTdChildren, + fixedColumnWidth,// = $firstThChild.outerWidth(true) + tableProps.border, + fixedBodyWidth = $wrapper.width(), + fixedBodyHeight = $fixedBody.find('.fht-tbody').height() - settings.scrollbarOffset, + $newRow; + + $thead.find('table.fht-table').addClass(settings.originalTable.attr('class')); + $tbody.find('table.fht-table').addClass(settings.originalTable.attr('class')); + $tfoot.find('table.fht-table').addClass(settings.originalTable.attr('class')); + + $firstThChildren = $fixedBody.find('.fht-thead thead tr > *:lt(' + settings.fixedColumns + ')'); + fixedColumnWidth = settings.fixedColumns * tableProps.border; + $firstThChildren.each(function(index) { + fixedColumnWidth += $(this).outerWidth(true); + }); + + // Fix cell heights + helpers._fixHeightWithCss($firstThChildren, tableProps); + helpers._fixWidthWithCss($firstThChildren, tableProps); + + var tdWidths = []; + $firstThChildren.each(function(index) { + tdWidths.push($(this).width()); + }); + + firstTdChildrenSelector = 'tbody tr > *:not(:nth-child(n+' + (settings.fixedColumns + 1) + '))'; + $firstTdChildren = $fixedBody.find(firstTdChildrenSelector) + .each(function(index) { + helpers._fixHeightWithCss($(this), tableProps); + helpers._fixWidthWithCss($(this), tableProps, tdWidths[index % settings.fixedColumns] ); + }); + + // clone header + $thead.appendTo($fixedColumn) + .find('tr') + .append($firstThChildren.clone()); + + $tbody.appendTo($fixedColumn) + .css({ + 'margin-top': -1, + 'height': fixedBodyHeight + tableProps.border + }); + + var $newRow; + $firstTdChildren.each(function(index) { + if (index % settings.fixedColumns == 0) { + $newRow = $('').appendTo($tbody.find('tbody')); + + if (settings.altClass && $(this).parent().hasClass(settings.altClass)) { + $newRow.addClass(settings.altClass); + } + } + + $(this).clone() + .appendTo($newRow); + }); + + // set width of fixed column wrapper + $fixedColumn.css({ + 'height': 0, + 'width': fixedColumnWidth + }) + + + // bind mousewheel events + var maxTop = $fixedColumn.find('.fht-tbody .fht-table').height() - $fixedColumn.find('.fht-tbody').height(); + $fixedColumn.find('.fht-table').bind('mousewheel', function(event, delta, deltaX, deltaY) { + if (deltaY == 0) return; + var top = parseInt($(this).css('marginTop'), 10) + (deltaY > 0 ? 120 : -120); + if (top > 0) top = 0; + if (top < -maxTop) top = -maxTop; + $(this).css('marginTop', top); + $fixedBody.find('.fht-tbody').scrollTop(-top).scroll(); + return false; + }); + + + // set width of body table wrapper + $fixedBody.css({ + 'width': fixedBodyWidth + }); + + // setup clone footer with fixed column + if (settings.footer == true || settings.cloneHeadToFoot == true) { + var $firstTdFootChild = $fixedBody.find('.fht-tfoot tr > *:lt(' + settings.fixedColumns + ')'); + + helpers._fixHeightWithCss($firstTdFootChild, tableProps); + $tfoot.appendTo($fixedColumn) + .find('tr') + .append($firstTdFootChild.clone()); + // Set (view width) of $tfoot div to width of table (this accounts for footers with a colspan) + footwidth = $tfoot.find('table').innerWidth(); + $tfoot.css({ + 'top': settings.scrollbarOffset, + 'width': footwidth + }); + } + }, + + /* + * return void + */ + _setupTableFooter: function ($obj, obj, tableProps) { + + var $self = $obj, + self = obj, + $wrapper = $self.closest('.fht-table-wrapper'), + $tfoot = $self.find('tfoot'), + $divFoot = $wrapper.find('div.fht-tfoot'); + + if (!$divFoot.length) { + if (settings.fixedColumns > 0) { + $divFoot = $('
                                              ').appendTo($wrapper.find('.fht-fixed-body')); + } else { + $divFoot = $('
                                              ').appendTo($wrapper); + } + } + $divFoot.find('table.fht-table').addClass(settings.originalTable.attr('class')); + + switch (true) { + case !$tfoot.length && settings.cloneHeadToFoot == true && settings.footer == true: + + var $divHead = $wrapper.find('div.fht-thead'); + + $divFoot.empty(); + $divHead.find('table') + .clone() + .appendTo($divFoot); + + break; + case $tfoot.length && settings.cloneHeadToFoot == false && settings.footer == true: + + $divFoot.find('table') + .append($tfoot) + .css({ + 'margin-top': -tableProps.border + }); + + helpers._setupClone($divFoot, tableProps.tfoot); + + break; + } + + }, + + /* + * return object + * Widths of each thead cell and tbody cell for the first rows. + * Used in fixing widths for the fixed header and optional footer. + */ + _getTableProps: function($obj) { + var tableProp = { + thead: {}, + tbody: {}, + tfoot: {}, + border: 0 + }, + borderCollapse = 1; + + if (settings.borderCollapse == true) { + borderCollapse = 2; + } + + tableProp.border = ($obj.find('th:first-child').outerWidth() - $obj.find('th:first-child').innerWidth()) / borderCollapse; + + $obj.find('thead tr:first-child > *').each(function(index) { + tableProp.thead[index] = $(this).width() + tableProp.border; + }); + + $obj.find('tfoot tr:first-child > *').each(function(index) { + tableProp.tfoot[index] = $(this).width() + tableProp.border; + }); + + $obj.find('tbody tr:first-child > *').each(function(index) { + tableProp.tbody[index] = $(this).width() + tableProp.border; + }); + + return tableProp; + }, + + /* + * return void + * Fix widths of each cell in the first row of obj. + */ + _setupClone: function($obj, cellArray) { + var $self = $obj, + selector = ($self.find('thead').length) ? + 'thead tr:first-child > *' : + ($self.find('tfoot').length) ? + 'tfoot tr:first-child > *' : + 'tbody tr:first-child > *', + $cell; + + $self.find(selector).each(function(index) { + $cell = ($(this).find('div.fht-cell').length) ? $(this).find('div.fht-cell') : $('
                                              ').appendTo($(this)); + + $cell.css({ + 'width': parseInt(cellArray[index]) + }); + + /* + * Fixed Header and Footer should extend the full width + * to align with the scrollbar of the body + */ + if (!$(this).closest('.fht-tbody').length && $(this).is(':last-child') && !$(this).closest('.fht-fixed-column').length) { + var padding = (($(this).innerWidth() - $(this).width()) / 2) + settings.scrollbarOffset; + $(this).css({ + 'padding-right': padding + 'px' + }); + } + }); + }, + + /* + * return boolean + * Determine how the browser calculates fixed widths with padding for tables + * true if width = padding + width + * false if width = width + */ + _isPaddingIncludedWithWidth: function() { + var $obj = $('
                                              test
                                              '), + defaultHeight, + newHeight; + + $obj.addClass(settings.originalTable.attr('class')); + $obj.appendTo('body'); + + defaultHeight = $obj.find('td').height(); + + $obj.find('td') + .css('height', $obj.find('tr').height()); + + newHeight = $obj.find('td').height(); + $obj.remove(); + + if (defaultHeight != newHeight) { + return true; + } else { + return false; + } + + }, + + /* + * return int + * get the width of the browsers scroll bar + */ + _getScrollbarWidth: function() { + var scrollbarWidth = 0; + + if (!scrollbarWidth) { + if ($.browser.msie) { + var $textarea1 = $('') + .css({ position: 'absolute', top: -1000, left: -1000 }).appendTo('body'), + $textarea2 = $('') + .css({ position: 'absolute', top: -1000, left: -1000 }).appendTo('body'); + scrollbarWidth = $textarea1.width() - $textarea2.width() + 2; // + 2 for border offset + $textarea1.add($textarea2).remove(); + } else { + var $div = $('
                                              ') + .css({ width: 100, height: 100, overflow: 'auto', position: 'absolute', top: -1000, left: -1000 }) + .prependTo('body').append('
                                              ').find('div') + .css({ width: '100%', height: 200 }); + scrollbarWidth = 100 - $div.width(); + $div.parent().remove(); + } + } + + return scrollbarWidth; + } + + } + + + // if a method as the given argument exists + if (methods[method]) { + + // call the respective method + return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); + + // if an object is given as method OR nothing is given as argument + } else if (typeof method === 'object' || !method) { + + // call the initialization method + return methods.init.apply(this, arguments); + + // otherwise + } else { + + // trigger an error + $.error('Method "' + method + '" does not exist in fixedHeaderTable plugin!'); + + } + + }; + +})(jQuery); diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/jquery.fixedheadertable.min.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/jquery.fixedheadertable.min.js new file mode 100644 index 00000000..473f5c29 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/jquery.fixedheadertable.min.js @@ -0,0 +1,62 @@ +/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) + * Licensed under the MIT License (LICENSE.txt). + * + * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. + * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. + * Thanks to: Seamus Leahy for adding deltaX and deltaY + * + * Version: 3.0.4 + * + * Requires: 1.2.2+ + */ + +/*! + * jquery.fixedHeaderTable. The jQuery fixedHeaderTable plugin + * + * Copyright (c) 2011 Mark Malek + * http://fixedheadertable.com + * + * Licensed under MIT + * http://www.opensource.org/licenses/mit-license.php + * + * http://docs.jquery.com/Plugins/Authoring + * jQuery authoring guidelines + * + * Launch : October 2009 + * Version : 1.3 + * Released: May 9th, 2011 + * + * + * all CSS sizing (width,height) is done in pixels (px) + */ + + +(function($){var types=['DOMMouseScroll','mousewheel'];$.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var i=types.length;i;){this.addEventListener(types[--i],handler,false);}}else{this.onmousewheel=handler;}},teardown:function(){if(this.removeEventListener){for(var i=types.length;i;){this.removeEventListener(types[--i],handler,false);}}else{this.onmousewheel=null;}}};$.fn.extend({mousewheel:function(fn){return fn?this.bind("mousewheel",fn):this.trigger("mousewheel");},unmousewheel:function(fn){return this.unbind("mousewheel",fn);}});function handler(event){var orgEvent=event||window.event,args=[].slice.call(arguments,1),delta=0,returnValue=true,deltaX=0,deltaY=0;event=$.event.fix(orgEvent);event.type="mousewheel";if(event.wheelDelta){delta=event.wheelDelta/120;} +if(event.detail){delta=-event.detail/3;} +deltaY=delta;if(orgEvent.axis!==undefined&&orgEvent.axis===orgEvent.HORIZONTAL_AXIS){deltaY=0;deltaX=-1*delta;} +var userAgent=navigator.userAgent.toLowerCase();var wheelDeltaScaleFactor=1;if(jQuery.browser.msie||(jQuery.browser.webkit&&!(/chrome/.test(userAgent)))){wheelDeltaScaleFactor=40;} +if(orgEvent.wheelDeltaY!==undefined){deltaY=orgEvent.wheelDeltaY/120/wheelDeltaScaleFactor;} +if(orgEvent.wheelDeltaX!==undefined){deltaX=-1*orgEvent.wheelDeltaX/120/wheelDeltaScaleFactor;} +args.unshift(event,delta,deltaX,deltaY);return $.event.handle.apply(this,args);}})(jQuery);(function($){$.fn.fixedHeaderTable=function(method){var defaults={width:'100%',height:'100%',themeClass:'fht-default',borderCollapse:true,fixedColumns:0,sortable:false,autoShow:true,footer:false,cloneHeadToFoot:false,autoResize:false,create:null};var settings={};var methods={init:function(options){settings=$.extend({},defaults,options);return this.each(function(){var $self=$(this),self=this;if(helpers._isTable($self)){methods.setup.apply(this,Array.prototype.slice.call(arguments,1));$.isFunction(settings.create)&&settings.create.call(this);}else{$.error('Invalid table mark-up');}});},setup:function(options){var $self=$(this),self=this,$thead=$self.find('thead'),$tfoot=$self.find('tfoot'),$tbody=$self.find('tbody'),$wrapper,$divHead,$divFoot,$divBody,$fixedHeadRow,$temp,tfootHeight=0;settings.includePadding=helpers._isPaddingIncludedWithWidth();settings.scrollbarOffset=helpers._getScrollbarWidth();settings.themeClassName=settings.themeClass;if(settings.width.search('%')>-1){var widthMinusScrollbar=$self.parent().width()-settings.scrollbarOffset;}else{var widthMinusScrollbar=settings.width-settings.scrollbarOffset;} +$self.css({width:widthMinusScrollbar});if(!$self.closest('.fht-table-wrapper').length){$self.addClass('fht-table');$self.wrap('
                                              ');} +$wrapper=$self.closest('.fht-table-wrapper');if(settings.fixedColumns>0&&$wrapper.find('.fht-fixed-column').length==0){$self.wrap('
                                              ');var $fixedColumns=$('
                                              ').prependTo($wrapper),$fixedBody=$wrapper.find('.fht-fixed-body');} +$wrapper.css({width:settings.width,height:settings.height}).addClass(settings.themeClassName);if(!$self.hasClass('fht-table-init')){$self.wrap('
                                              ');} +$divBody=$self.closest('.fht-tbody');var tableProps=helpers._getTableProps($self);helpers._setupClone($divBody,tableProps.tbody);if(!$self.hasClass('fht-table-init')){if(settings.fixedColumns>0){$divHead=$('
                                              ').prependTo($fixedBody);}else{$divHead=$('
                                              ').prependTo($wrapper);} +$thead.clone().appendTo($divHead.find('table'));}else{$divHead=$wrapper.find('div.fht-thead');} +helpers._setupClone($divHead,tableProps.thead);$self.css({'margin-top':-$divHead.outerHeight(true)});if(settings.footer==true){helpers._setupTableFooter($self,self,tableProps);if(!$tfoot.length){$tfoot=$wrapper.find('div.fht-tfoot table');} +tfootHeight=$tfoot.outerHeight(true);} +var tbodyHeight=$wrapper.height()-$thead.outerHeight(true)-tfootHeight-tableProps.border;$divBody.css({'height':tbodyHeight});$self.addClass('fht-table-init');if(typeof(settings.altClass)!=='undefined'){methods.altRows.apply(self);} +if(settings.fixedColumns>0){helpers._setupFixedColumn($self,self,tableProps);} +if(!settings.autoShow){$wrapper.hide();} +helpers._bindScroll($divBody,tableProps);return self;},resize:function(options){var $self=$(this),self=this;return self;},altRows:function(arg1){var $self=$(this),self=this,altClass=(typeof(arg1)!=='undefined')?arg1:settings.altClass;$self.closest('.fht-table-wrapper').find('tbody tr:odd:not(:hidden)').addClass(altClass);},show:function(arg1,arg2,arg3){var $self=$(this),self=this,$wrapper=$self.closest('.fht-table-wrapper');if(typeof(arg1)!=='undefined'&&typeof(arg1)==='number'){$wrapper.show(arg1,function(){$.isFunction(arg2)&&arg2.call(this);});return self;}else if(typeof(arg1)!=='undefined'&&typeof(arg1)==='string'&&typeof(arg2)!=='undefined'&&typeof(arg2)==='number'){$wrapper.show(arg1,arg2,function(){$.isFunction(arg3)&&arg3.call(this);});return self;} +$self.closest('.fht-table-wrapper').show();$.isFunction(arg1)&&arg1.call(this);return self;},hide:function(arg1,arg2,arg3){var $self=$(this),self=this,$wrapper=$self.closest('.fht-table-wrapper');if(typeof(arg1)!=='undefined'&&typeof(arg1)==='number'){$wrapper.hide(arg1,function(){$.isFunction(arg3)&&arg3.call(this);});return self;}else if(typeof(arg1)!=='undefined'&&typeof(arg1)==='string'&&typeof(arg2)!=='undefined'&&typeof(arg2)==='number'){$wrapper.hide(arg1,arg2,function(){$.isFunction(arg3)&&arg3.call(this);});return self;} +$self.closest('.fht-table-wrapper').hide();$.isFunction(arg3)&&arg3.call(this);return self;},destroy:function(){var $self=$(this),self=this,$wrapper=$self.closest('.fht-table-wrapper');$self.insertBefore($wrapper).removeAttr('style').append($wrapper.find('tfoot')).removeClass('fht-table fht-table-init').find('.fht-cell').remove();$wrapper.remove();return self;}} +var helpers={_isTable:function($obj){var $self=$obj,hasTable=$self.is('table'),hasThead=$self.find('thead').length>0,hasTbody=$self.find('tbody').length>0;if(hasTable&&hasThead&&hasTbody){return true;} +return false;},_bindScroll:function($obj,tableProps){var $self=$obj,$wrapper=$self.closest('.fht-table-wrapper'),$thead=$self.siblings('.fht-thead'),$tfoot=$self.siblings('.fht-tfoot');$self.bind('scroll',function(){if(settings.fixedColumns>0){var $fixedColumns=$wrapper.find('.fht-fixed-column');$fixedColumns.find('.fht-tbody table').css({'margin-top':-$self.scrollTop()});} +$thead.find('table').css({'margin-left':-this.scrollLeft});if(settings.cloneHeadToFoot){$tfoot.find('table').css({'margin-left':-this.scrollLeft});}});},_fixHeightWithCss:function($obj,tableProps){if(settings.includePadding){$obj.css({'height':$obj.height()+tableProps.border});}else{$obj.css({'height':$obj.parent().height()+tableProps.border});}},_fixWidthWithCss:function($obj,tableProps,width){if(settings.includePadding){$obj.each(function(index){$(this).css({'width':width==undefined?$(this).width()+tableProps.border:width+tableProps.border});});}else{$obj.each(function(index){$(this).css({'width':width==undefined?$(this).parent().width()+tableProps.border:width+tableProps.border});});}},_setupFixedColumn:function($obj,obj,tableProps){var $self=$obj,self=obj,$wrapper=$self.closest('.fht-table-wrapper'),$fixedBody=$wrapper.find('.fht-fixed-body'),$fixedColumn=$wrapper.find('.fht-fixed-column'),$thead=$('
                                              '),$tbody=$('
                                              '),$tfoot=$('
                                              '),$firstThChildren,$firstTdChildren,fixedColumnWidth,fixedBodyWidth=$wrapper.width(),fixedBodyHeight=$fixedBody.find('.fht-tbody').height()-settings.scrollbarOffset,$newRow;$firstThChildren=$fixedBody.find('.fht-thead thead tr th:lt('+settings.fixedColumns+')');fixedColumnWidth=settings.fixedColumns*tableProps.border;$firstThChildren.each(function(index){fixedColumnWidth+=$(this).outerWidth(true);});helpers._fixHeightWithCss($firstThChildren,tableProps);helpers._fixWidthWithCss($firstThChildren,tableProps);var tdWidths=[];$firstThChildren.each(function(index){tdWidths.push($(this).width());});firstTdChildrenSelector='tbody tr td:not(:nth-child(n+'+(settings.fixedColumns+1)+'))';$firstTdChildren=$fixedBody.find(firstTdChildrenSelector).each(function(index){helpers._fixHeightWithCss($(this),tableProps);helpers._fixWidthWithCss($(this),tableProps,tdWidths[index%settings.fixedColumns]);});$thead.appendTo($fixedColumn).find('tr').append($firstThChildren.clone());$tbody.appendTo($fixedColumn).css({'margin-top':-1,'height':fixedBodyHeight+tableProps.border});var $newRow;$firstTdChildren.each(function(index){if(index%settings.fixedColumns==0){$newRow=$('').appendTo($tbody.find('tbody'));if(settings.altClass&&$(this).parent().hasClass(settings.altClass)){$newRow.addClass(settings.altClass);}} +$(this).clone().appendTo($newRow);});$fixedColumn.css({'height':0,'width':fixedColumnWidth}) +var maxTop=$fixedColumn.find('.fht-tbody .fht-table').height()-$fixedColumn.find('.fht-tbody').height();$fixedColumn.find('.fht-table').bind('mousewheel',function(event,delta,deltaX,deltaY){if(deltaY==0)return;var top=parseInt($(this).css('marginTop'),10)+(deltaY>0?120:-120);if(top>0)top=0;if(top<-maxTop)top=-maxTop;$(this).css('marginTop',top);$fixedBody.find('.fht-tbody').scrollTop(-top).scroll();return false;});$fixedBody.css({'width':fixedBodyWidth});if(settings.footer==true||settings.cloneHeadToFoot==true){var $firstTdFootChild=$fixedBody.find('.fht-tfoot thead tr th:lt('+settings.fixedColumns+')');helpers._fixHeightWithCss($firstTdFootChild,tableProps);$tfoot.appendTo($fixedColumn).find('tr').append($firstTdFootChild.clone());$tfoot.css({'top':settings.scrollbarOffset});}},_setupTableFooter:function($obj,obj,tableProps){var $self=$obj,self=obj,$wrapper=$self.closest('.fht-table-wrapper'),$tfoot=$self.find('tfoot'),$divFoot=$wrapper.find('div.fht-tfoot');if(!$divFoot.length){if(settings.fixedColumns>0){$divFoot=$('
                                              ').appendTo($wrapper.find('.fht-fixed-body'));}else{$divFoot=$('
                                              ').appendTo($wrapper);}} +switch(true){case!$tfoot.length&&settings.cloneHeadToFoot==true&&settings.footer==true:var $divHead=$wrapper.find('div.fht-thead');$divFoot.empty();$divHead.find('table').clone().appendTo($divFoot);break;case $tfoot.length&&settings.cloneHeadToFoot==false&&settings.footer==true:$divFoot.find('table').append($tfoot).css({'margin-top':-tableProps.border});helpers._setupClone($divFoot,tableProps.tfoot);break;}},_getTableProps:function($obj){var tableProp={thead:{},tbody:{},tfoot:{},border:0},borderCollapse=1;if(settings.borderCollapse==true){borderCollapse=2;} +tableProp.border=($obj.find('th:first-child').outerWidth()-$obj.find('th:first-child').innerWidth())/borderCollapse;$obj.find('thead tr:first-child th').each(function(index){tableProp.thead[index]=$(this).width()+tableProp.border;});$obj.find('tfoot tr:first-child td').each(function(index){tableProp.tfoot[index]=$(this).width()+tableProp.border;});$obj.find('tbody tr:first-child td').each(function(index){tableProp.tbody[index]=$(this).width()+tableProp.border;});return tableProp;},_setupClone:function($obj,cellArray){var $self=$obj,selector=($self.find('thead').length)?'thead th':($self.find('tfoot').length)?'tfoot td':'tbody td',$cell;$self.find(selector).each(function(index){$cell=($(this).find('div.fht-cell').length)?$(this).find('div.fht-cell'):$('
                                              ').appendTo($(this));$cell.css({'width':parseInt(cellArray[index])});if(!$(this).closest('.fht-tbody').length&&$(this).is(':last-child')&&!$(this).closest('.fht-fixed-column').length){var padding=(($(this).innerWidth()-$(this).width())/2)+settings.scrollbarOffset;$(this).css({'padding-right':padding+'px'});}});},_isPaddingIncludedWithWidth:function(){var $obj=$('
                                              test
                                              '),defaultHeight,newHeight;$obj.appendTo('body');defaultHeight=$obj.find('td').height();$obj.find('td').css('height',$obj.find('tr').height());newHeight=$obj.find('td').height();$obj.remove();if(defaultHeight!=newHeight){return true;}else{return false;}},_getScrollbarWidth:function(){var scrollbarWidth=0;if(!scrollbarWidth){if($.browser.msie){var $textarea1=$('').css({position:'absolute',top:-1000,left:-1000}).appendTo('body'),$textarea2=$('').css({position:'absolute',top:-1000,left:-1000}).appendTo('body');scrollbarWidth=$textarea1.width()-$textarea2.width()+2;$textarea1.add($textarea2).remove();}else{var $div=$('
                                              ').css({width:100,height:100,overflow:'auto',position:'absolute',top:-1000,left:-1000}).prependTo('body').append('
                                              ').find('div').css({width:'100%',height:200});scrollbarWidth=100-$div.width();$div.parent().remove();}} +return scrollbarWidth;}} +if(methods[method]){return methods[method].apply(this,Array.prototype.slice.call(arguments,1));}else if(typeof method==='object'||!method){return methods.init.apply(this,arguments);}else{$.error('Method "'+method+'" does not exist in fixedHeaderTable plugin!');}};})(jQuery); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/lib/jquery.mousewheel.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/lib/jquery.mousewheel.js new file mode 100644 index 00000000..caaaa010 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/Fixed-Header-Table/lib/jquery.mousewheel.js @@ -0,0 +1,90 @@ +/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) + * Licensed under the MIT License (LICENSE.txt). + * + * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. + * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. + * Thanks to: Seamus Leahy for adding deltaX and deltaY + * + * Version: 3.0.4 + * + * Requires: 1.2.2+ + */ + +(function($) { + +var types = ['DOMMouseScroll', 'mousewheel']; + +$.event.special.mousewheel = { + setup: function() { + if ( this.addEventListener ) { + for ( var i=types.length; i; ) { + this.addEventListener( types[--i], handler, false ); + } + } else { + this.onmousewheel = handler; + } + }, + + teardown: function() { + if ( this.removeEventListener ) { + for ( var i=types.length; i; ) { + this.removeEventListener( types[--i], handler, false ); + } + } else { + this.onmousewheel = null; + } + } +}; + +$.fn.extend({ + mousewheel: function(fn) { + return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); + }, + + unmousewheel: function(fn) { + return this.unbind("mousewheel", fn); + } +}); + + +function handler(event) { + var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0; + event = $.event.fix(orgEvent); + event.type = "mousewheel"; + + // Old school scrollwheel delta + if ( event.wheelDelta ) { delta = event.wheelDelta/120; } + if ( event.detail ) { delta = -event.detail/3; } + + // New school multidimensional scroll (touchpads) deltas + deltaY = delta; + + // Gecko + if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { + deltaY = 0; + deltaX = -1*delta; + } + + + // Webkit + var userAgent = navigator.userAgent.toLowerCase(); + + var wheelDeltaScaleFactor = 1; + if (jQuery.browser.msie || (jQuery.browser.webkit && !(/chrome/.test(userAgent)))) { + wheelDeltaScaleFactor = 40; + } + + if (orgEvent.wheelDeltaY !== undefined) { + deltaY = orgEvent.wheelDeltaY / 120 / wheelDeltaScaleFactor; + } + if (orgEvent.wheelDeltaX !== undefined) { + deltaX = -1*orgEvent.wheelDeltaX / 120 / wheelDeltaScaleFactor; + } + + // Add event and delta to the front of the arguments + args.unshift(event, delta, deltaX, deltaY); + + return $.event.handle.apply(this, args); +} + +})(jQuery); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/artDialog.min.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/artDialog.min.js new file mode 100644 index 00000000..7d9a60a7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/artDialog.min.js @@ -0,0 +1,27 @@ +/* artDialog 5 | (c) 2009-2012 TangBin | http://code.google.com/p/artdialog/ */ +(function(g,h){function i(a){var c=f.expando,d=a===g?0:a[c];d===h&&(a[c]=d=++f.uuid);return d}var f=g.art=function(a,c){return new f.fn.constructor(a,c)},p=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,o=/[\n\t]/g;if(g.$===h)g.$=f;f.fn=f.prototype={constructor:function(a,c){var d,c=c||document;if(!a)return this;if(a.nodeType)return this[0]=a,this;if("string"===typeof a&&(d=p.exec(a))&&d[2])return(d=c.getElementById(d[2]))&&d.parentNode&&(this[0]=d),this;this[0]=a;return this},hasClass:function(a){return-1< +(" "+this[0].className+" ").replace(o," ").indexOf(" "+a+" ")?!0:!1},addClass:function(a){this.hasClass(a)||(this[0].className+=" "+a);return this},removeClass:function(a){var c=this[0];if(a){if(this.hasClass(a))c.className=c.className.replace(a," ")}else c.className="";return this},css:function(a,c){var d,e=this[0];if("string"===typeof a){if(c===h)return f.css(e,a);e.style[a]=c}else for(d in a)e.style[d]=a[d];return this},show:function(){return this.css("display","block")},hide:function(){return this.css("display", +"none")},offset:function(){var a=this[0],c=a.getBoundingClientRect(),d=a.ownerDocument,a=d.body,d=d.documentElement;return{left:c.left+(self.pageXOffset||d.scrollLeft)-(d.clientLeft||a.clientLeft||0),top:c.top+(self.pageYOffset||d.scrollTop)-(d.clientTop||a.clientTop||0)}},html:function(a){var c=this[0];if(a===h)return c.innerHTML;f.cleanData(c.getElementsByTagName("*"));c.innerHTML=a;return this},remove:function(){var a=this[0];f.cleanData(a.getElementsByTagName("*"));f.cleanData([a]);a.parentNode.removeChild(a); +return this},bind:function(a,c){f.event.add(this[0],a,c);return this},unbind:function(a,c){f.event.remove(this[0],a,c);return this}};f.fn.constructor.prototype=f.fn;f.isWindow=function(a){return a&&"object"===typeof a&&"setInterval"in a};f.fn.find=function(a){var c=this[0],d=a.split(".")[1];if(d)if(document.getElementsByClassName)d=c.getElementsByClassName(d);else{for(var e=a=0,b=[],c=(c||document).getElementsByTagName("*"),m=c.length,d=RegExp("(^|\\s)"+d+"(\\s|$)");af&&i-u>s?i-u+a:w)+"px";p.top=(x+q>h+d&&j-q>d?j-q:x)+"px";this._follow&&this._follow.removeAttribute(e);this._follow=b;b[e]=c.id;return this},button:function(){for(var b=this.dom.buttons,a=b[0],c=this._listeners=this._listeners||{},d=[].slice.call(arguments),e=0,f,h,l,i,j;eloading..
                                              ',title:"message",button:null,ok:null,cancel:null,initialize:null,beforeunload:null,okValue:"ok",cancelValue:"cancel",width:"auto",height:"auto",padding:"20px 25px",skin:null,time:null,esc:!0,focus:!0,visible:!0,follow:null,lock:!1,fixed:!1,zIndex:1987};this.artDialog=g.dialog=g.artDialog=e})(this.art||this.jQuery,this); diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/artDialog.plugins.min.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/artDialog.plugins.min.js new file mode 100644 index 00000000..c3257a8d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/artDialog.plugins.min.js @@ -0,0 +1,6 @@ +(function(c){c.alert=c.dialog.alert=function(b,a){return c.dialog({id:"Alert",fixed:!0,lock:!0,content:b,ok:!0,beforeunload:a})};c.confirm=c.dialog.confirm=function(b,a,m){return c.dialog({id:"Confirm",fixed:!0,lock:!0,content:b,ok:a,cancel:m})};c.prompt=c.dialog.prompt=function(b,a,m){var d;return c.dialog({id:"Prompt",fixed:!0,lock:!0,content:['
                                              ',b,'
                                              '].join(""), +initialize:function(){d=this.dom.content.find(".d-input-text")[0];d.select();d.focus()},ok:function(){return a&&a.call(this,d.value)},cancel:function(){}})};c.dialog.prototype.shake=function(){var b=function(a,b,c){var h=+new Date,e=setInterval(function(){var f=(+new Date-h)/c;1<=f?(clearInterval(e),b(f)):a(f)},13)},a=function(c,d,g,h){var e=h;void 0===e&&(e=6,g/=e);var f=parseInt(c.style.marginLeft)||0;b(function(a){c.style.marginLeft=f+(d-f)*a+"px"},function(){0!==e&&a(c,1===e?0:1.3*(d/e-d),g,--e)}, +g)};return function(){a(this.dom.wrap[0],40,600);return this}}();var o=function(){var b=this,a=function(a){var c=b[a];b[a]=function(){return c.apply(b,arguments)}};a("start");a("over");a("end")};o.prototype={start:function(b){c(document).bind("mousemove",this.over).bind("mouseup",this.end);this._sClientX=b.clientX;this._sClientY=b.clientY;this.onstart(b.clientX,b.clientY);return!1},over:function(b){this._mClientX=b.clientX;this._mClientY=b.clientY;this.onover(b.clientX-this._sClientX,b.clientY-this._sClientY); +return!1},end:function(b){c(document).unbind("mousemove",this.over).unbind("mouseup",this.end);this.onend(b.clientX,b.clientY);return!1}};var j=c(window),k=c(document),i=document.documentElement,p=!!("minWidth"in i.style)&&"onlosecapture"in i,q="setCapture"in i,r=function(){return!1},n=function(b){var a=new o,c=artDialog.focus,d=c.dom,g=d.wrap,h=d.title,e=g[0],f=h[0],i=d.main[0],l=e.style,s=i.style,t=b.target===d.se[0]?!0:!1,u=(d="fixed"===e.style.position)?0:k.scrollLeft(),v=d?0:k.scrollTop(),n= +j.width()-e.offsetWidth+u,A=j.height()-e.offsetHeight+v,w,x,y,z;a.onstart=function(){t?(w=i.offsetWidth,x=i.offsetHeight):(y=e.offsetLeft,z=e.offsetTop);k.bind("dblclick",a.end).bind("dragstart",r);p?h.bind("losecapture",a.end):j.bind("blur",a.end);q&&f.setCapture();g.addClass("d-state-drag");c.focus()};a.onover=function(a,b){if(t){var c=a+w,d=b+x;l.width="auto";s.width=Math.max(0,c)+"px";l.width=e.offsetWidth+"px";s.height=Math.max(0,d)+"px"}else c=Math.max(u,Math.min(n,a+y)),d=Math.max(v,Math.min(A, +b+z)),l.left=c+"px",l.top=d+"px"};a.onend=function(){k.unbind("dblclick",a.end).unbind("dragstart",r);p?h.unbind("losecapture",a.end):j.unbind("blur",a.end);q&&f.releaseCapture();g.removeClass("d-state-drag")};a.start(b)};c(document).bind("mousedown",function(b){var a=artDialog.focus;if(a){var c=b.target,d=a.config,a=a.dom;if(!1!==d.drag&&c===a.title[0]||!1!==d.resize&&c===a.se[0])return n(b),!1}})})(this.art||this.jQuery); diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/index.html b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/index.html new file mode 100644 index 00000000..055c5ca4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/index.html @@ -0,0 +1,1316 @@ + + + + + + + +artDialog + + + + + + + + + + + +
                                              +
                                              +

                                              文档索引

                                              + +
                                              +
                                              +

                                              快速上手

                                              +

                                              artDialog api 风格统一,有一定前端开发经验的同学通过阅读文档5分钟即可上手。 + +

                                              +

                                              引入文件

                                              +

                                              在页面 head 引入 artDialog 样式与脚本文件:

                                              +
                                              <link href="./skins/default.css" rel="stylesheet" />
                                              +<script src="./artDialog.min.js"></script>
                                              +

                                              调用方式

                                              +
                                                +
                                              1. +

                                                art.dialog(content, [ok], [cancel])

                                                +
                                                art.dialog('artDialog: I Love You!', function () {alert('Thank you!')});
                                                +  
                                                + 运行
                                              2. +
                                              3. +

                                                art.dialog(options)

                                                +
                                                art.dialog({
                                                +    title: '欢迎',
                                                +    content: '欢迎使用artDialog对话框组件!',
                                                +    ok: function () {
                                                +        this
                                                +        .title('警告')
                                                +        .content('请注意artDialog两秒后将关闭!')
                                                +        .lock()
                                                +        .time(2000);
                                                +        return false;
                                                +    }
                                                +});
                                                +  
                                                + 运行
                                              4. +
                                              +

                                              artDialog 有两种调用方式,第一种是最简单的直接传入参数方式;第二种拥有更多的可选项,参见 配置参数

                                              +

                                              [使用jQuery?]

                                              +

                                              扩展接口

                                              +

                                              除了上述两种调用方式之外,artDialog 还提供一些接口方便异步操作,比如实现外部程序更新对话框内容、关闭窗口等。这是属于高级操作,详情参见 接口

                                              +

                                              若无特别说明,扩展方法均支持链式调用。

                                              +
                                              +
                                              +

                                              配置参数

                                              +
                                                +
                                              • +

                                                title

                                                +
                                                +
                                                概述
                                                +
                                                (默认值: "message") 标题内容
                                                +
                                                类型
                                                +
                                                String
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    title: 'hello world!'
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                content

                                                +
                                                +
                                                概述
                                                +
                                                (默认值: "<div class="d-loading"><span>loading..</span></div>") 设置消息内容。
                                                +
                                                + 如果传入的是 HTMLElement 类型,如果是隐藏元素会给其设置display:block以显示该元素,其他属性与绑定的事件都会完整保留,对话框关闭后此元素又将恢复原来的display属性,并且重新插入原文档所在位置
                                                +
                                                类型
                                                +
                                                String, HTMLElement
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    content: 'hello world!'
                                                +});
                                                + 运行
                                                +
                                                +
                                                art.dialog({
                                                +    content: document.getElementById('options-content-demo-element'),
                                                +    id: 'EF893L'
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                ok

                                                +
                                                +
                                                概述
                                                +
                                                确定按钮。
                                                +
                                                + 回调函数 this 指向 art.dialog 对象,执行完毕默认关闭对话框,若返回 false 则阻止关闭
                                                +
                                                类型
                                                +
                                                Function
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    ok: function () {
                                                +        this.content('hello world!');
                                                +        return false;
                                                +    }
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                cancel

                                                +
                                                +
                                                概述
                                                +
                                                取消按钮。
                                                +
                                                + 取消按钮也等同于标题栏的关闭按钮。回调函数 this 指向 art.dialog 对象,执行完毕默认关闭对话框,若返回 false 则阻止关闭
                                                +
                                                类型
                                                +
                                                Function
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    cancel: function () {
                                                +        alert('关闭');
                                                +    }
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                okValue

                                                +
                                                +
                                                概述
                                                +
                                                (默认值: "ok") 确定按钮文本
                                                +
                                                类型
                                                +
                                                String
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    okValue: '猛击我',
                                                +    ok: function () {
                                                +        this.content('hello world!');
                                                +        return false;
                                                +    }
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                cancelValue

                                                +
                                                +
                                                概述
                                                +
                                                (默认值: cancel) 取消按钮文本
                                                +
                                                类型
                                                +
                                                String
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    cancelValue: '取消我',
                                                +    cancel: function () {
                                                +        alert('关闭');
                                                +    }
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                button

                                                +
                                                +
                                                概述
                                                +
                                                +

                                                自定义按钮组。
                                                +
                                                + 回调函数 this 指向 art.dialog 对象,执行完毕默认关闭对话框,若返回 false 则阻止关闭

                                                +
                                                +
                                                类型
                                                +
                                                Array
                                                +
                                                选项
                                                +
                                                +
                                                +
                                                value
                                                +
                                                按钮显示文本
                                                +
                                                callback
                                                +
                                                (可选) 按钮点击后的回调函数。回调函数 this 指向 art.dialog 对象,执行完毕默认关闭对话框,若返回 false 则阻止关闭
                                                +
                                                focus
                                                +
                                                (默认值: true) 是否聚焦
                                                +
                                                width
                                                +
                                                (可选) 设置按钮 CSS width 值
                                                +
                                                disabled
                                                +
                                                (默认值: false) 是否禁用
                                                +
                                                id
                                                +
                                                (默认值: 与 value 一致) 唯一标识
                                                +
                                                +
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    button: [
                                                +        {
                                                +            value: '同意',
                                                +            callback: function () {
                                                +                this
                                                +                .content('你同意了')
                                                +                .button({
                                                +                    id: 'button-disabled',
                                                +                    value: '我变成有效按钮了',
                                                +                    disabled: false
                                                +                 });
                                                +                return false;
                                                +            },
                                                +            focus: true
                                                +        },
                                                +        {
                                                +            value: '不同意',
                                                +            callback: function () {
                                                +                alert('你不同意')
                                                +            }
                                                +        },
                                                +        {
                                                +            id: 'button-disabled',
                                                +            value: '无效按钮',
                                                +            disabled: true
                                                +        },
                                                +        {
                                                +            value: '关闭我'
                                                +        }
                                                +    ]
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                width

                                                +
                                                +
                                                概述
                                                +
                                                (默认值: "auto") 设置对话框 内容 宽度。
                                                +
                                                + 一般情况下无需设置此值,对话框会自适应内容宽度
                                                +
                                                类型
                                                +
                                                Number, String
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    width: 460
                                                +});
                                                + 运行
                                                +
                                                +
                                                art.dialog({
                                                +    width: '20em'
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                height

                                                +
                                                +
                                                概述
                                                +
                                                (默认值: "auto") 设置对话框 内容 高度。
                                                +
                                                + 一般情况下无需设置此值,对话框会自适应内容宽度
                                                +
                                                类型
                                                +
                                                Number, String
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    height: 460
                                                +});
                                                + 运行
                                                +
                                                +
                                                art.dialog({
                                                +    height: '20em'
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                fixed

                                                +
                                                +
                                                概述
                                                +
                                                (默认值: false) 开启固定定位。
                                                +
                                                + 固定定位是 css2.1 position 的一个属性,它能固定在浏览器某个地方,也不受滚动条拖动影响。IE6 与 部分移动浏览器对其支持不好,内部会转成绝对定位
                                                +
                                                类型
                                                +
                                                Boolean
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    fixed: true,
                                                +    content: '请拖动滚动条查看'
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                follow

                                                +
                                                +
                                                概述
                                                +
                                                让对话框依附在指定元素附近
                                                +
                                                类型
                                                +
                                                HTMLElement
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    follow: document.getElementById('options-follow-demo-runCode'),
                                                +    content: '让对话框跟着某个元素,一个元素同时只能出现一个对话框'
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                lock

                                                +
                                                +
                                                概述
                                                +
                                                (默认值: false) 开启锁屏遮罩。
                                                +
                                                + 中断用户对话框之外的交互,用于显示非常重要的操作/消息。建议只在适合的时候使用它。遮罩还可以设置颜色与透明度,参见: backgroundopacity
                                                +
                                                类型
                                                +
                                                Boolean
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    lock: true
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                padding

                                                +
                                                +
                                                概述
                                                +
                                                (默认值: "20px 25px") 设置消息内容与消息容器的填充边距,即 style padding 属性
                                                +
                                                类型
                                                +
                                                String
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    content: 'hello world',
                                                +    padding: 0
                                                +})
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                id

                                                +
                                                +
                                                概述
                                                +
                                                设定对话框唯一标识。
                                                +
                                                + 作用: +
                                                  +
                                                1. 可防止重复 ID 对话框弹出
                                                2. +
                                                3. 可后续使用 art.dialog.get(id) 获取某个对话框的接口
                                                4. +
                                                +
                                                +
                                                类型
                                                +
                                                String
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    id: 'id-demo',
                                                +    content: '再次点击运行看看'
                                                +});
                                                +art.dialog.get('id-demo').title('8888888888');
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                zIndex

                                                +
                                                +
                                                概述
                                                +
                                                (默认值: 1987) 重置全局 zIndex 初始值,用来改变对话框叠加高度。
                                                +
                                                + 比如有时候配合外部浮动层UI组件,但是它们可能默认 zIndex 没有 artDialog 高,导致无法浮动到 artDialog 之上,这个时候你就可以给对话框指定一个较小的 zIndex 值。 + 请注意这是一个会影响到全局的配置,后续出现的对话框叠加高度将重新按此累加。
                                                +
                                                类型
                                                +
                                                Number
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    zIndex: 87
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                initialize

                                                +
                                                +
                                                概述
                                                +
                                                对话框初始化完成后执行的函数。
                                                +
                                                + 回调函数 this 指向 art.dialog 对象
                                                +
                                                类型
                                                +
                                                Function
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    initialize: function () {
                                                +        this.content("ttt");
                                                +    }
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                beforeunload

                                                +
                                                +
                                                概述
                                                +
                                                对话框关闭前执行的函数。
                                                +
                                                + 回调函数 this 指向 art.dialog 对象,执行完毕默认关闭对话框,若返回 false 则阻止关闭
                                                +
                                                类型
                                                +
                                                Function
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    beforeunload: function () {
                                                +        return confirm('确定关闭对话框吗');
                                                +    }
                                                +}, function () {});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                visible

                                                +
                                                +
                                                概述
                                                +
                                                (默认值: true) 是否显示对话框
                                                +
                                                类型
                                                +
                                                Boolean
                                                +
                                                示例
                                                +
                                                +
                                                var dialog = art.dialog({
                                                +    visible: false,
                                                +    id: 'visible-demo'
                                                +});
                                                +
                                                +confirm('显示对话框吗') ? dialog.visible() : dialog.hidden();
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                time

                                                +
                                                +
                                                概述
                                                +
                                                设置对话框显示时间,超过时间自动关闭 (单位:毫秒)
                                                +
                                                类型
                                                +
                                                Number
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    time: 2000
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                esc

                                                +
                                                +
                                                概述
                                                +
                                                (默认值: false) 是否允许用户按 Esc 键关闭对话框
                                                +
                                                类型
                                                +
                                                Boolean
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    esc: false,
                                                +    content: '按 Esc 不能关闭我'
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                focus

                                                +
                                                +
                                                概述
                                                +
                                                (默认值: true) 是否支持对话框按钮自动聚焦
                                                +
                                                类型
                                                +
                                                Boolean
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    focus: false,
                                                +    ok: function () {}
                                                +});
                                                + 运行
                                                +
                                                +
                                              • +
                                              +
                                              +
                                              +

                                              接口

                                              +
                                                +
                                              • +

                                                art.dialog.get(id)

                                                +
                                                +
                                                概述
                                                +
                                                根据 id 获取 art.dialog 对象。注意:这是一个静态方法
                                                +
                                                参数
                                                +
                                                +
                                                +
                                                id
                                                +
                                                对话框 id
                                                +
                                                +
                                                +
                                                返回值
                                                +
                                                如果存在 id 参数则返回 art.dialog 对象,否则返回页面所有 art.dialog 对象数组
                                                +
                                                示例
                                                +
                                                +
                                                art.dialog({
                                                +    id: 'demo-get'
                                                +});
                                                +
                                                +var dialog = art.dialog.get('demo-get');
                                                +dialog.title('hello').content('I Love You!');
                                                +
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                closed

                                                +
                                                +
                                                概述
                                                +
                                                对话框是否已经关闭。注意:这是一个属性,对话框若关闭其值为 true
                                                +
                                                示例
                                                +
                                                +
                                                var dialog = art.dialog();
                                                +
                                                +dialog.close();
                                                +
                                                +alert(dialog.closed);
                                                +
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                close()

                                                +
                                                +
                                                概述
                                                +
                                                关闭对话框
                                                +
                                                示例
                                                +
                                                +
                                                var dialog = art.dialog({
                                                +    content: 'hello world!'
                                                +});
                                                +
                                                +if (confirm('关闭对话框吗')) {
                                                +    dialog.close();
                                                +};
                                                +
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                visible()

                                                +
                                                +
                                                概述
                                                +
                                                把隐藏的对话框显示
                                                +
                                                示例
                                                +
                                                +
                                                var dialog = art.dialog({
                                                +    visible: false
                                                +});
                                                +
                                                +dialog.visible();
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                hidden()

                                                +
                                                +
                                                概述
                                                +
                                                隐藏对话框
                                                +
                                                示例
                                                +
                                                +
                                                var dialog = art.dialog();
                                                +
                                                +dialog.hidden();
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                title(value)

                                                +
                                                +
                                                概述
                                                +
                                                设置对话框标题
                                                +
                                                参数
                                                +
                                                +
                                                +
                                                value
                                                +
                                                标题内容
                                                +
                                                +
                                                +
                                                示例
                                                +
                                                +
                                                var dialog = art.dialog({
                                                +    title: '请等待..'
                                                +});
                                                +
                                                +dialog.title('欢迎使用');
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                content(value)

                                                +
                                                +
                                                概述
                                                +
                                                设置消息内容
                                                +
                                                参数
                                                +
                                                +
                                                +
                                                value
                                                +
                                                消息内容
                                                +
                                                +
                                                +
                                                示例
                                                +
                                                +
                                                var dialog = art.dialog();
                                                +
                                                +dialog.content('加载完成!');
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                button(button, [button], ..)

                                                +
                                                +
                                                概述
                                                +
                                                添加或者修改一个或者多个按钮
                                                +
                                                参数
                                                +
                                                +
                                                +
                                                button
                                                +
                                                按钮配置
                                                +
                                                +
                                                +
                                                选项
                                                +
                                                +
                                                +
                                                value
                                                +
                                                按钮显示文本
                                                +
                                                callback
                                                +
                                                (可选) 按钮点击后的回调函数。回调函数 this 指向 art.dialog 对象,执行完毕默认关闭对话框,若返回 false 则阻止关闭
                                                +
                                                focus
                                                +
                                                (默认值: true) 是否聚焦
                                                +
                                                width
                                                +
                                                (可选) 设置按钮 CSS width 值
                                                +
                                                disabled
                                                +
                                                (默认值: false) 是否禁用
                                                +
                                                id
                                                +
                                                (默认值: 与 value 一致) 唯一标识
                                                +
                                                +
                                                +
                                                示例
                                                +
                                                +

                                                修改按钮与新增按钮:

                                                +
                                                var dialog = art.dialog({
                                                +    button: [{
                                                +        value: '增加一个按钮',
                                                +        focus: true,
                                                +        callback: function () {
                                                +            this.button({
                                                +                value: '关闭我'
                                                +            });
                                                +            return false;
                                                +        }
                                                +    }, {
                                                +        id: 'button',
                                                +        value: '提交 (5)',
                                                +        width: '8em',
                                                +        callback: function () {
                                                +            alert(0);
                                                +            return false;
                                                +        },
                                                +        disabled: true
                                                +    }]
                                                +});
                                                +
                                                +var i = 5;
                                                +var timer = setInterval(function () {
                                                +    i--;
                                                +    
                                                +    dialog.button({
                                                +        id: 'button',
                                                +        value: '提交 (' + i + ')',
                                                +        disabled: true
                                                +    });
                                                +    
                                                +    if (i === 0) {
                                                +        clearInterval(timer);
                                                +        dialog.button({
                                                +            id: 'button',
                                                +            value: '提交',
                                                +            disabled: false
                                                +        });
                                                +    };
                                                +}, 1000);
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                follow(element)

                                                +
                                                +
                                                概述
                                                +
                                                让对话框依附在指定元素附近
                                                +
                                                参数
                                                +
                                                +
                                                +
                                                element
                                                +
                                                元素
                                                +
                                                +
                                                +
                                                示例
                                                +
                                                +
                                                var dialog = art.dialog();
                                                +
                                                +dialog.follow(document.getElementById('api-follow-demo-runCode'));
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                size(width, height)

                                                +
                                                +
                                                概述
                                                +
                                                指定对话框内容尺寸
                                                +
                                                参数
                                                +
                                                +
                                                +
                                                width
                                                +
                                                内容宽度
                                                +
                                                height
                                                +
                                                内容高度
                                                +
                                                +
                                                +
                                                示例
                                                +
                                                +
                                                var dialog = art.dialog();
                                                +
                                                +dialog.size('20em', 60);
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                lock()

                                                +
                                                +
                                                概述
                                                +
                                                开启锁屏遮罩
                                                +
                                                示例
                                                +
                                                +
                                                var dialog = art.dialog();
                                                +
                                                +dialog.lock();
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                unlock()

                                                +
                                                +
                                                概述
                                                +
                                                关闭锁屏遮罩
                                                +
                                                示例
                                                +
                                                +
                                                var dialog = art.dialog({
                                                +    lock: true
                                                +});
                                                +
                                                +dialog.unlock();
                                                + 运行
                                                +
                                                +
                                              • +
                                              • +

                                                time(value)

                                                +
                                                +
                                                概述
                                                +
                                                设置对话框显示时间,超过时间自动关闭 (单位:毫秒)
                                                +
                                                参数
                                                +
                                                +
                                                +
                                                value
                                                +
                                                毫秒
                                                +
                                                +
                                                +
                                                示例
                                                +
                                                +
                                                var dialog = art.dialog();
                                                +
                                                +dialog.time(2000);
                                                + 运行
                                                +
                                                +
                                              • +
                                              +
                                              +
                                              +

                                              插件

                                              +

                                              artDialog 可以通过插件支持拖动、抖动效果, alert、confirm、prompt 方法。只需在 artDialog 之后引用如下文件即可:

                                              +
                                              +<script src="./artDialog.plugins.min.js"></script>
                                              +

                                              + +

                                              +
                                              +

                                              演示插件

                                              +
                                                +
                                              • +

                                                art.alert(content, [callback])

                                                +
                                                art.alert('那些年,我们一起追的女孩');
                                                +
                                                + 运行
                                              • +
                                              • +

                                                art.confirm(content, ok, [cancel])

                                                +
                                                art.confirm('你再也不相信爱情了么?', function () {
                                                +    alert(0);
                                                +}, function () {
                                                +    alert(1);
                                                +});
                                                +
                                                + 运行
                                              • +
                                              • +

                                                art.prompt(content, ok, [defaultValue])

                                                +
                                                art.prompt('你的名字是什么?', function (value) {
                                                +    alert(value);
                                                +}, '糖饼');
                                                +
                                                + 运行
                                              • +
                                              • +

                                                shake()

                                                +
                                                art.dialog({
                                                +    id: 'shake-demo',
                                                +    title: '登录',
                                                +    content: '帐号:<input type="text" value="guest" /><br />'
                                                +        + '密码:<input id="login-pw" type="text" value="****" />',
                                                +    lock: true,
                                                +    fixed: true,
                                                +    ok: function () {
                                                +        var pw = document.getElementById('login-pw');
                                                +        pw.select();
                                                +    	pw.focus();
                                                +    	this.shake();
                                                +        return false;
                                                +    },
                                                +    okValue: '登录',
                                                +    cancel: function () {}
                                                +});
                                                + 运行
                                              • +
                                              +
                                              +
                                              + +
                                              + + + + + + + \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/jquery.artDialog.min.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/jquery.artDialog.min.js new file mode 100644 index 00000000..4a98cd71 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/jquery.artDialog.min.js @@ -0,0 +1,17 @@ +/* artDialog 5 | (c) 2009-2012 TangBin | http://code.google.com/p/artdialog/ */ +(function(h,k,l){if("BackCompat"===document.compatMode)throw Error("artDialog: Document types require more than xhtml1.0");var m,q=0,p="artDialog"+ +new Date,u=k.VBArray&&!k.XMLHttpRequest,t="createTouch"in document&&!("onmousemove"in document)||/(iPhone|iPad|iPod)/i.test(navigator.userAgent),n=!u&&!t,e=function(a,b,c){a=a||{};if("string"===typeof a||1===a.nodeType)a={content:a,fixed:!t};var d;d=e.defaults;var f=a.follow=1===this.nodeType&&this||a.follow,g;for(g in d)a[g]===l&&(a[g]=d[g]);a.id=f&& +f[p+"follow"]||a.id||p+q;if(d=e.list[a.id])return f&&d.follow(f),d.zIndex().focus(),d;if(!n)a.fixed=!1;if(!a.button||!a.button.push)a.button=[];if(b!==l)a.ok=b;a.ok&&a.button.push({id:"ok",value:a.okValue,callback:a.ok,focus:!0});if(c!==l)a.cancel=c;a.cancel&&a.button.push({id:"cancel",value:a.cancelValue,callback:a.cancel});e.defaults.zIndex=a.zIndex;q++;return e.list[a.id]=m?m.constructor(a):new e.fn.constructor(a)};e.version="5.0";e.fn=e.prototype={constructor:function(a){var b;this.closed=!1; +this.config=a;this.dom=b=this.dom||this._getDom();a.skin&&b.wrap.addClass(a.skin);b.wrap.css("position",a.fixed?"fixed":"absolute");b.close[!1===a.cancel?"hide":"show"]();b.content.css("padding",a.padding);this.button.apply(this,a.button);this.title(a.title).content(a.content).size(a.width,a.height).time(a.time);a.follow?this.follow(a.follow):this.position();this.zIndex();a.lock&&this.lock();this._addEvent();this[a.visible?"visible":"hidden"]().focus();m=null;a.initialize&&a.initialize.call(this); +return this},content:function(a){var b,c,d,f,g=this,e=this.dom.content,j=e[0];this._elemBack&&(this._elemBack(),delete this._elemBack);if("string"===typeof a)e.html(a);else if(a&&1===a.nodeType)f=a.style.display,b=a.previousSibling,c=a.nextSibling,d=a.parentNode,this._elemBack=function(){b&&b.parentNode?b.parentNode.insertBefore(a,b.nextSibling):c&&c.parentNode?c.parentNode.insertBefore(a,c):d&&d.appendChild(a);a.style.display=f;g._elemBack=null},e.html(""),j.appendChild(a),h(a).show();return this.position()}, +title:function(a){var b=this.dom,c=b.outer,b=b.title;!1===a?(b.hide().html(""),c.addClass("d-state-noTitle")):(b.show().html(a),c.removeClass("d-state-noTitle"));return this},position:function(){var a=this.dom,b=a.wrap[0],c=a.window,d=a.document,f=this.config.fixed,a=f?0:d.scrollLeft(),d=f?0:d.scrollTop(),f=c.width(),e=c.height(),h=b.offsetHeight,c=(f-b.offsetWidth)/2+a,f=f=(h<4*e/7?0.382*e-h/2:(e-h)/2)+d,b=b.style;b.left=Math.max(c,a)+"px";b.top=Math.max(f,d)+"px";return this},size:function(a,b){var c= +this.dom.main[0].style;"number"===typeof a&&(a+="px");"number"===typeof b&&(b+="px");c.width=a;c.height=b;return this},follow:function(a){var b=h(a),c=this.config;if(!a||!a.offsetWidth&&!a.offsetHeight)return this.position(this._left,this._top);var d=c.fixed,e=p+"follow",g=this.dom,s=g.window,j=g.document,g=s.width(),s=s.height(),r=j.scrollLeft(),j=j.scrollTop(),i=b.offset(),b=a.offsetWidth,k=d?i.left-r:i.left,i=d?i.top-j:i.top,o=this.dom.wrap[0],m=o.style,l=o.offsetWidth,o=o.offsetHeight,n=k-(l- +b)/2,q=i+a.offsetHeight,r=d?0:r,d=d?0:j;m.left=(ng&&k-l>r?k-l+b:n)+"px";m.top=(q+o>s+d&&i-o>d?i-o:q)+"px";this._follow&&this._follow.removeAttribute(e);this._follow=a;a[e]=c.id;return this},button:function(){for(var a=this.dom.buttons,b=a[0],c=this._listeners=this._listeners||{},d=[].slice.call(arguments),e=0,g,k,j,l,i;eloading..
                                              ',title:"message",button:null,ok:null,cancel:null,initialize:null,beforeunload:null,okValue:"ok",cancelValue:"cancel",width:"auto",height:"auto",padding:"20px 25px",skin:null,time:null,esc:!0,focus:!0,visible:!0,follow:null,lock:!1,fixed:!1,zIndex:1987};this.artDialog=h.dialog=h.artDialog=e})(this.art||this.jQuery,this); diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/license.txt b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/license.txt new file mode 100644 index 00000000..02bbb60b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/license.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/aero.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/aero.css new file mode 100644 index 00000000..ea8ced48 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/aero.css @@ -0,0 +1,60 @@ +@charset "utf-8"; +/* + * artDialog skin + * http://code.google.com/p/artdialog/ + * (c) 2009-2012 TangBin, http://www.planeArt.cn + * + * This is licensed under the GNU LGPL, version 2.1 or later. + * For details, see: http://creativecommons.org/licenses/LGPL/2.1/ + */ + +/* common start */ +body { _margin:0; _height:100%; }/*IE6 BUG*/ +.d-outer { text-align:left; } +.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; } +.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; } +.d-header, .d-button { font: 12px/1.11 Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; } +.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; } +.d-state-noTitle .d-title { display:none; } +.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; } +.d-close:hover { text-decoration:none; } +.d-main { text-align:center; vertical-align:middle; min-width:9em; } +.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; } +.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; } +.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; } +.d-buttons { padding:8px; text-align:right; white-space:nowrap; } +.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, 1); box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; } +.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; } +.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); } +.d-button:hover { color:#000; border-color:#666; } +.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 5px rgba(66, 109, 201, .9), inset 0 1px 1em rgba(0, 0, 0, .3); } +.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; } +.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; } +.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; } +.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); } +.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; } +/* common end */ + +.d-inner { background:#FFF; } +.d-titleBar { width:100%; height:0; position:relative; bottom:30px; _bottom:0; _margin-top:-30px; } +.d-title { height:29px; line-height:29px; padding:0 16px 0 0; _padding:0; color:#FFF; font-weight:700; text-shadow:1px 1px 0 rgba(0, 0, 0, .9); } +.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(aero/aero_s.png); background-repeat:no-repeat; } +.d-nw { width:14px; height:34px; background-position: 0 0; } +.d-ne { width:14px; height:34px; background-position: -14px 0; } +.d-sw { width:14px; height:14px; background-position: 0 -34px; } +.d-se { width:14px; height:14px; background-position: -14px -34px; } +.d-close { top:7px; right:0; _z-index:1; width:13px; height:13px; _font-size:0; _line-height:0; text-indent:-9999em; background-position:left -96px; } +.d-close:hover { background-position:right -96px; } +.d-n, .d-s { background-repeat:repeat-x; } +.d-n { background-position: 0 -48px; } +.d-s { background-position: 0 -82px; } +.d-w, .d-e { background-image:url(aero/aero_s2.png); background-repeat:repeat-y; } +.d-w { background-position:left top; } +.d-e { background-position: right bottom; } +.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; } +.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; } +.d-state-noTitle { box-shadow:none; } +.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; } +.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; } +.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; } +.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; } \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/aero/aero_s.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/aero/aero_s.png new file mode 100644 index 00000000..ff3a379c Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/aero/aero_s.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/aero/aero_s2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/aero/aero_s2.png new file mode 100644 index 00000000..6fda697d Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/aero/aero_s2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black.css new file mode 100644 index 00000000..a77ff09b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black.css @@ -0,0 +1,78 @@ +@charset "utf-8"; +/* + * artDialog skin + * http://code.google.com/p/artdialog/ + * (c) 2009-2012 TangBin, http://www.planeArt.cn + * + * This is licensed under the GNU LGPL, version 2.1 or later. + * For details, see: http://creativecommons.org/licenses/LGPL/2.1/ + */ + +/* common start */ +body { _margin:0; _height:100%; }/*IE6 BUG*/ +.d-outer { text-align:left; } +.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; } +.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; } +.d-header, .d-button { font: 12px/1.11 Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; } +.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; } +.d-state-noTitle .d-title { display:none; } +.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; } +.d-close:hover { text-decoration:none; } +.d-main { text-align:center; vertical-align:middle; min-width:9em; } +.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; } +.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; } +.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; } +.d-buttons { padding:8px; text-align:right; white-space:nowrap; } +.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, 1); box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; } +.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; } +.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); } +.d-button:hover { color:#000; border-color:#666; } +.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 5px rgba(66, 109, 201, .9), inset 0 1px 1em rgba(0, 0, 0, .3); } +.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; } +.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; } +.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; } +.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); } +.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; } +/* common end */ + +.d-inner { background:#f7f7f7; } +.d-titleBar { width:100%; height:0; position:relative; bottom:30px; _bottom:0; _margin-top:-30px; } +.d-title { height:29px; line-height:29px; padding:0 25px 0 0; _padding:0; text-indent:5px; color:#FFF; font-weight:700; text-shadow:-1px -1px 0 rgba(0, 0, 0, .7); } +.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(black/bg.png); background-repeat:no-repeat; } +.d-nw { width:15px; height:38px; background-position: 0 0; } +.d-ne { width:15px; height:38px; background-position: -15px 0; } +.d-sw { width:15px; height:18px; background-position: 0 -38px; } +.d-se { width:15px; height:18px; background-position: -15px -38px; } +.d-close { top:4px; right:4px; _z-index:1; width:20px; height:20px; _font-size:0; _line-height:0; text-indent:-9999em; background-position:0 -112px; } +.d-close:hover { background-position:0 -132px; } +.d-n, .d-s { background-repeat:repeat-x; } +.d-n { background-position: 0 -56px; } +.d-s { background-position: 0 -94px; } +.d-w, .d-e { background-image:url(black/bg2.png); background-repeat:repeat-y; } +.d-w { background-position:left top; } +.d-e { background-position: right bottom; } +aui_icon, .d-main { padding-top:3px; } +@media screen and (min-width:0) { + .d-outer { border-radius:8px; box-shadow:0 5px 15px rgba(0, 0, 0, .4); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: -webkit-box-shadow linear .2s; } + .d-state-drag { box-shadow:none; } + .d-state-lock { box-shadow:0 3px 26px rgba(0, 0, 0, .9); } + .d-outer:active { box-shadow:0 0 5px rgba(0, 0, 0, .1)!important; } + .d-state-drag { box-shadow:none!important; } + .d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(black/bg_css3.png); } + .d-nw { width:5px; height:31px; } + .d-ne { width:5px; height:31px; background-position: -5px 0; } + .d-sw { width:5px; height:5px;background-position: 0 -31px; } + .d-se { width:5px; height:5px; background-position: -5px -31px; } + .d-close { background-position:0 -72px; } + .d-close:hover { background-position:0 -92px; } + .d-n { background-position: 0 -36px; } + .d-s { background-position: 0 -67px; } + .d-w, .d-e { background-image:url(black/bg_css3_2.png); } +} +.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; } +.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; } +.d-state-noTitle { box-shadow:none; } +.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; } +.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; } +.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; } +.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; } \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black/bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black/bg.png new file mode 100644 index 00000000..6d42b890 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black/bg.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black/bg2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black/bg2.png new file mode 100644 index 00000000..8f5568df Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black/bg2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black/bg_css3.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black/bg_css3.png new file mode 100644 index 00000000..32cc89d5 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black/bg_css3.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black/bg_css3_2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black/bg_css3_2.png new file mode 100644 index 00000000..4e5801b7 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/black/bg_css3_2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue.css new file mode 100644 index 00000000..fac1e533 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue.css @@ -0,0 +1,78 @@ +@charset "utf-8"; +/* + * artDialog skin + * http://code.google.com/p/artdialog/ + * (c) 2009-2012 TangBin, http://www.planeArt.cn + * + * This is licensed under the GNU LGPL, version 2.1 or later. + * For details, see: http://creativecommons.org/licenses/LGPL/2.1/ + */ + +/* common start */ +body { _margin:0; _height:100%; }/*IE6 BUG*/ +.d-outer { text-align:left; } +.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; } +.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; } +.d-header, .d-button { font: 12px/1.11 Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; } +.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; } +.d-state-noTitle .d-title { display:none; } +.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; } +.d-close:hover { text-decoration:none; } +.d-main { text-align:center; vertical-align:middle; min-width:9em; } +.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; } +.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; } +.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; } +.d-buttons { padding:8px; text-align:right; white-space:nowrap; } +.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, 1); box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; } +.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; } +.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); } +.d-button:hover { color:#000; border-color:#666; } +.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 5px rgba(66, 109, 201, .9), inset 0 1px 1em rgba(0, 0, 0, .3); } +.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; } +.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; } +.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; } +.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); } +.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; } +/* common end */ + +.d-inner { background:#f7f7f7; } +.d-titleBar { width:100%; height:0; position:relative; bottom:30px; _bottom:0; _margin-top:-30px; } +.d-title { height:29px; line-height:29px; padding:0 25px 0 0; _padding:0; text-indent:5px; color:#FFF; font-weight:700; text-shadow:-1px -1px 0 rgba(33, 79, 183, .7); } +.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(blue/bg.png); background-repeat:no-repeat; } +.d-nw { width:15px; height:38px; background-position: 0 0;} +.d-ne { width:15px; height:38px; background-position: -15px 0; } +.d-sw { width:15px; height:18px; background-position: 0 -38px; } +.d-se { width:15px; height:18px; background-position: -15px -38px; } +.d-close { top:4px; right:4px; _z-index:1; width:20px; height:20px; _font-size:0; _line-height:0; text-indent:-9999em; background-position:0 -112px; } +.d-close:hover { background-position:0 -132px; } +.d-n, .d-s { background-repeat:repeat-x; } +.d-n { background-position: 0 -56px; } +.d-s { background-position: 0 -94px; } +.d-w, .d-e { background-image:url(blue/bg2.png); background-repeat:repeat-y; } +.d-w { background-position:left top; } +.d-e { background-position: right bottom; } +.d-main { padding-top:3px; } +@media screen and (min-width:0) {/* css3 */ + .d-outer { border-radius:8px; box-shadow:0 5px 15px rgba(2, 37, 69, .4); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: -webkit-box-shadow linear .2s; } + .d-state-drag { box-shadow:none; } + .d-state-lock { box-shadow:0 3px 26px rgba(0, 0, 0, .9); } + .d-outer:active { box-shadow:0 0 5px rgba(2, 37, 69, .1)!important; } + .d-state-drag { box-shadow:none!important; } + .d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(blue/bg_css3.png); } + .d-nw { width:5px; height:31px; } + .d-ne { width:5px; height:31px; background-position: -5px 0; } + .d-sw { width:5px; height:5px;background-position: 0 -31px; } + .d-se { width:5px; height:5px; background-position: -5px -31px; } + .d-close { background-position:0 -72px; } + .d-close:hover { background-position:0 -92px; } + .d-n { background-position: 0 -36px; } + .d-s { background-position: 0 -67px; } + .d-w, .d-e { background-image:url(blue/bg_css3_2.png); } +} +.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; } +.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; } +.d-state-noTitle { box-shadow:none; } +.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; } +.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; } +.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; } +.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; } \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue/bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue/bg.png new file mode 100644 index 00000000..52c1c019 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue/bg.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue/bg2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue/bg2.png new file mode 100644 index 00000000..834c17a8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue/bg2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue/bg_css3.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue/bg_css3.png new file mode 100644 index 00000000..8f55b85b Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue/bg_css3.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue/bg_css3_2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue/bg_css3_2.png new file mode 100644 index 00000000..b8f66eb8 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/blue/bg_css3_2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/chrome.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/chrome.css new file mode 100644 index 00000000..4a601dc6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/chrome.css @@ -0,0 +1,59 @@ +@charset "utf-8"; +/* + * artDialog skin + * http://code.google.com/p/artdialog/ + * (c) 2009-2012 TangBin, http://www.planeArt.cn + * + * This is licensed under the GNU LGPL, version 2.1 or later. + * For details, see: http://creativecommons.org/licenses/LGPL/2.1/ + */ + +/* common start */ +body { _margin:0; _height:100%; }/*IE6 BUG*/ +.d-outer { text-align:left; } +.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; } +.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; } +.d-header, .d-button { font: 12px/1.11 Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; } +.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; } +.d-state-noTitle .d-title { display:none; } +.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; } +.d-close:hover { text-decoration:none; } +.d-main { text-align:center; vertical-align:middle; min-width:9em; } +.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; } +.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; } +.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; } +.d-buttons { padding:8px; text-align:right; white-space:nowrap; } +.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, 1); box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; } +.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; } +.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); } +.d-button:hover { color:#000; border-color:#666; } +.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 5px rgba(66, 109, 201, .9), inset 0 1px 1em rgba(0, 0, 0, .3); } +.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; } +.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; } +.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; } +.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); } +.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; } +/* common end */ + +.d-inner { background:#FFF; } +.d-titleBar { width:100%; height:0; position:relative; bottom:26px; _bottom:0; _margin-top:-26px;} +.d-title { height:26px; line-height:23px; padding:0 60px 0 5px; color:#FFF; font-weight:700; text-shadow:0 1px 0 #000; } +.d-nw, .d-ne, .d-w, .d-e, .d-sw, .d-se, .d-close { background-image:url(chrome/chrome_s.png); background-repeat:no-repeat; } +.d-nw { width:5px; height:26px; background-position: -46px -8px; } +.d-ne { width:5px; height:26px; background-position: -53px -8px; } +.d-w { background-position:-60px 0; background-repeat:repeat-y; } +.d-e { background-position:-65px 0; background-repeat:repeat-y; } +.d-sw { width:5px; height:5px; background-position: -46px -2px;} +.d-se { width:5px; height:5px; background-position: -53px -2px;} +.d-close { top:1px; right:0; width:44px; height:17px; background-position:0 0; _font-size:0; _line-height:0; text-indent:-9999em; } +.d-close:hover { background-position:0 -18px; } +.d-n, .d-s { background-image:url(chrome/border.png); background-repeat:repeat-x; } +.d-n { background-position:0 top; } +.d-s { background-position: 0 bottom; }.d-buttons { background-color:#F6F6F6; border-top:1px solid #DADEE5; } +.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; } +.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; } +.d-state-noTitle { box-shadow:none; } +.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; } +.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; } +.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; } +.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; } diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/chrome/border.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/chrome/border.png new file mode 100644 index 00000000..db3bdcd9 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/chrome/border.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/chrome/chrome_s.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/chrome/chrome_s.png new file mode 100644 index 00000000..3f62b86f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/chrome/chrome_s.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/default.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/default.css new file mode 100644 index 00000000..ee61ecc0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/default.css @@ -0,0 +1,74 @@ +@charset "utf-8"; +/* + * artDialog skin + * http://code.google.com/p/artdialog/ + * (c) 2009-2012 TangBin, http://www.planeArt.cn + * + * This is licensed under the GNU LGPL, version 2.1 or later. + * For details, see: http://creativecommons.org/licenses/LGPL/2.1/ + */ + +/* common start */ +body { _margin:0; _height:100%; }/*IE6 BUG*/ +.d-outer { text-align:left; } +.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; } +.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; } +.d-header, .d-button { font: 12px/1.11 Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; } +.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; } +.d-state-noTitle .d-title { display:none; } +.d-close { display:none; position:absolute; text-decoration:none; outline:none; _cursor:pointer; } +.d-close:hover { text-decoration:none; } +.d-main { text-align:center; vertical-align:middle; min-width:9em; } +.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; } +.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; } +.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; } +.d-buttons { padding:8px; text-align:right; white-space:nowrap; } +.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, 1); box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; } +.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; } +.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); } +.d-button:hover { color:#000; border-color:#666; } +.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 5px rgba(66, 109, 201, .9), inset 0 1px 1em rgba(0, 0, 0, .3); } +.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; } +.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; } +.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; } +.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); } +.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; } +/* common end */ + +.d-inner { background:#FFF; } +.d-outer, .d-inner { border:1px solid rgba(0, 0, 0, .7); border:1px solid #333\9; } +.d-nw, .d-ne, .d-sw, .d-se { width:8px; height:8px; } +.d-nw, .d-n, .d-ne, .d-w, .d-e, .d-sw, .d-s, .d-se { background:rgba(0, 0, 0, .4); background:#000\9!important; filter:alpha(opacity=40); } +.d-state-lock .d-nw, .d-state-lock .d-n, .d-state-lock .d-ne, .d-state-lock .d-w, .d-state-lock .d-e, .d-state-lock .d-sw, .d-state-lock .d-s, .d-state-lock .d-se { background:rgba(0, 0, 0, .5); background:#000\9!important; filter:alpha(opacity=50); } +.d-titleBar { position:relative; height:100%; } +.d-titleBar2 {display:none; position:relative; height:100%; } +.d-title { height:28px; line-height:27px; padding:0 28px 0 10px; text-shadow:0 1px 0 rgba(255, 255, 255, .7); background-color:#edf5f8; font-weight:bold; color:#95a7ae; font-family: Tahoma, Arial/9!important; background-color:#bdc6cd; background: linear-gradient(top, #edf5f8, #bdc6cd); background: -moz-linear-gradient(top, #edf5f8, #bdc6cd); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#edf5f8), to(#bdc6cd)); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#edf5f8', endColorstr='#bdc6cd'); border-top:1px solid #edf5f8; border-bottom:1px solid #b6bec5; } +.d-state-focus .d-title { color:#4c5a5f; } +.d-state-drag .d-title { background: linear-gradient(top, #bdc6cd, #edf5f8); background: -moz-linear-gradient(top, #bdc6cd, #edf5f8); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bdc6cd), to(#edf5f8)); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdc6cd', endColorstr='#edf5f8'); box-shadow:none; } +.d-state-drag .d-titleBar { box-shadow:none; } +.d-close { padding:0; top:4px; right:4px; width:21px; height:21px; line-height:21px; font-size:18px; color:#68767b; text-align:center; font-family: Helvetica, STHeiti; _font-family: Tahoma, '\u9ed1\u4f53', 'Book Antiqua', Palatino; text-shadow:0 1px 0 rgba(255, 255, 255, .9); } +.d-close:hover { background:#85140E; color:#FFF; text-shadow:0 1px 0 rgba(0, 0, 0, .5); } +.d-close:active { background:#450B07; color:#FFF; } +.d-content { color:#666; } +.d-state-focus .d-content { color:#000; }.d-buttons { background-color:#F6F6F6; border-top: 1px solid #DADEE5; } +.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; } +.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; } +.d-state-noTitle { border:0 none; box-shadow:none; } +.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; } +.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; } +.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; } +.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; } +.d-state-noTitle .d-dialog { box-shadow: none; } + +@media screen and (min-width:0) {/* css3 */ + .d-nw, .d-n, .d-ne, .d-w, .d-e, .d-sw, .d-s, .d-se { display:none; } + .d-inner { border:0 none; } + .d-outer { border-color:#666; } + .d-state-focus .d-dialog { box-shadow: 0 0 3px rgba(0, 0, 0, .4); } + .d-state-drag, .d-state-focus:active { box-shadow:none; } + .d-state-focus { box-shadow:0 3px 26px rgba(0, 0, 0, .9); } + .d-close { border-radius:5px; } + .d-close:hover { box-shadow: 0 1px 0 rgba(255, 255, 255, .4); } + .d-outer { -webkit-transform: scale(0); transform: scale(0); -webkit-transition: -webkit-box-shadow .2s ease-in-out, -webkit-transform .2s ease-in-out; transition: box-shadow .2s ease-in-out, transform .2s ease-in-out; } + .d-state-visible { -webkit-transform: scale(1); transform: scale(1); } +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green.css new file mode 100644 index 00000000..2d71249a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green.css @@ -0,0 +1,77 @@ +@charset "utf-8"; +/* + * artDialog skin + * http://code.google.com/p/artdialog/ + * (c) 2009-2012 TangBin, http://www.planeArt.cn + * + * This is licensed under the GNU LGPL, version 2.1 or later. + * For details, see: http://creativecommons.org/licenses/LGPL/2.1/ + */ + +/* common start */ +body { _margin:0; _height:100%; }/*IE6 BUG*/ +.d-outer { text-align:left; } +.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; } +.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; } +.d-header, .d-button { font: 12px/1.11 Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; } +.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; } +.d-state-noTitle .d-title { display:none; } +.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; } +.d-close:hover { text-decoration:none; } +.d-main { text-align:center; vertical-align:middle; min-width:9em; } +.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; } +.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; } +.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; } +.d-buttons { padding:8px; text-align:right; white-space:nowrap; } +.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, 1); box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; } +.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; } +.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); } +.d-button:hover { color:#000; border-color:#666; } +.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 5px rgba(66, 109, 201, .9), inset 0 1px 1em rgba(0, 0, 0, .3); } +.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; } +.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; } +.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; } +.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); } +.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; } +/* common end */ + +.d-inner { background:#f7f7f7; } +.d-titleBar { width:100%; height:0; position:relative; bottom:30px; _bottom:0; _margin-top:-30px; } +.d-title { height:29px; line-height:29px; padding:0 25px 0 0; _padding:0; text-indent:5px; color:#FFF; font-weight:700; text-shadow:-1px -1px 0 rgba(0, 50, 0, .7); } +.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(green/bg.png); background-repeat:no-repeat; } +.d-nw { width:15px; height:38px; background-position: 0 0; } +.d-ne { width:15px; height:38px; background-position: -15px 0; } +.d-sw { width:15px; height:18px; background-position: 0 -38px; } +.d-se { width:15px; height:18px; background-position: -15px -38px; } +.d-close { top:4px; right:4px; _z-index:1; width:20px; height:20px; _font-size:0; _line-height:0; text-indent:-9999em; background-position:0 -112px; } +.d-close:hover { background-position:0 -132px; } +.d-n, .d-s { background-repeat:repeat-x; } +.d-n { background-position: 0 -56px; } +.d-s { background-position: 0 -94px; } +.d-w, .d-e { background-image:url(green/bg2.png); background-repeat:repeat-y; } +.d-w { background-position:left top; } +.d-e { background-position: right bottom; } +aui_icon, .d-main { padding-top:3px; } +@media screen and (min-width:0) { + .d-outer { border-radius:8px; box-shadow:0 5px 15px rgba(0, 50, 0, .4); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: -webkit-box-shadow linear .2s; } + .d-state-lock { box-shadow:0 3px 26px rgba(0, 0, 0, .9); } + .d-outer:active { box-shadow:0 0 5px rgba(0, 50, 0, .1)!important; } + .d-state-drag { box-shadow:none!important; } + .d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(green/bg_css3.png); } + .d-nw { width:5px; height:31px; } + .d-ne { width:5px; height:31px; background-position: -5px 0; } + .d-sw { width:5px; height:5px;background-position: 0 -31px; } + .d-se { width:5px; height:5px; background-position: -5px -31px; } + .d-close { background-position:0 -72px; } + .d-close:hover { background-position:0 -92px; } + .d-n { background-position: 0 -36px; } + .d-s { background-position: 0 -67px; } + .d-w, .d-e { background-image:url(green/bg_css3_2.png); } +} +.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; } +.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; } +.d-state-noTitle { box-shadow:none; } +.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; } +.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; } +.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; } +.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; } \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/bg.png new file mode 100644 index 00000000..7919c88e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/bg.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/bg2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/bg2.png new file mode 100644 index 00000000..3faa0c8a Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/bg2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/bg_css3.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/bg_css3.png new file mode 100644 index 00000000..aa255e43 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/bg_css3.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/bg_css3_2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/bg_css3_2.png new file mode 100644 index 00000000..4e5801b7 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/bg_css3_2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/color_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/color_bg.png new file mode 100644 index 00000000..7919c88e Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/green/color_bg.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/idialog.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/idialog.css new file mode 100644 index 00000000..5eb98426 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/idialog.css @@ -0,0 +1,72 @@ +@charset "utf-8"; +/* + * artDialog skin + * http://code.google.com/p/artdialog/ + * (c) 2009-2012 TangBin, http://www.planeArt.cn + * + * This is licensed under the GNU LGPL, version 2.1 or later. + * For details, see: http://creativecommons.org/licenses/LGPL/2.1/ + */ + +/* common start */ +body { _margin:0; _height:100%; }/*IE6 BUG*/ +.d-outer { text-align:left; } +.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; } +.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; } +.d-header, .d-button { font: 12px/1.11 Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; } +.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; } +.d-state-noTitle .d-title { display:none; } +.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; } +.d-close:hover { text-decoration:none; } +.d-main { text-align:center; vertical-align:middle; min-width:9em; } +.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; } +.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; } +.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; } +.d-buttons { padding:8px; text-align:right; white-space:nowrap; } +.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, 1); box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; } +.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; } +.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); } +.d-button:hover { color:#000; border-color:#666; } +.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 5px rgba(66, 109, 201, .9), inset 0 1px 1em rgba(0, 0, 0, .3); } +.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; } +.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; } +.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; } +.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); } +.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; } +/* common end */ + +.d-inner { background:#FFF; } +.d-titleBar { width:100%; } +.d-title { position:absolute; left:0; top:0; width:100%; height:22px; text-align:left; text-indent:-999em; font-size:0; } +.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(idialog/idialog_s.png); background-repeat:no-repeat; } +.d-nw { width:15px; height:15px; background-position: 0 0; } +.d-ne { width:15px; height:15px; background-position: -15px 0; } +.d-sw { width:15px; height:15px; background-position: 0 -15px; } +.d-se { width:15px; height:15px; background-position: -15px -15px; } +.d-close { position:absolute; right:-8px; top:-8px; _z-index:1; width:34px; height:34px; _font-size:0; _line-height:0; text-indent:-9999em; background-position:0 -60px; } +.d-close:hover { background-position:0 -94px; } +.d-n, .d-s { background-repeat:repeat-x; } +.d-n { background-position: 0 -30px; } +.d-s { background-position: 0 -45px; } +.d-w, .d-e { background-image:url(idialog/idialog_s2.png); background-repeat:repeat-y; } +.d-w { background-position:left top; } +.d-e { background-position: right bottom; } +@media screen and (min-width:0) {/* css3 */ + .d-nw, .d-ne, .d-sw, .d-se{ width:5px; height:5px; } + .d-nw, .d-n, .d-ne, .d-w, .d-e, .d-sw, .d-s, .d-se { background:none; } + .d-sw, .d-s, .d-se { background:url(idialog/idialog_s.png) repeat-x 0 -45px; } + .d-sw { border-radius:0 0 0 5px; } + .d-se { border-radius:0 0 5px 0; } + .d-outer { border:1px solid #929292; border-radius:5px; box-shadow:0 3px 8px rgba(0, 0, 0, .2); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: -webkit-box-shadow linear .2s; } + .d-border { border-radius:5px; background:#FFF; } + .d-state-drag { box-shadow:none; } + .d-state-lock { box-shadow:0 3px 26px rgba(0, 0, 0, .9); } + .d-outer:active { box-shadow:0 0 5px rgba(0, 0, 0, .1)!important; } + .d-state-drag { box-shadow:none!important; } + .d-close { right:-16px; top:-16px; } + .d-outer { -webkit-transform: scale(0); transform: scale(0); -webkit-transition: -webkit-box-shadow .2s ease-in-out, -webkit-transform .2s ease-in-out; transition: box-shadow .2s ease-in-out, transform .2s ease-in-out; } + .d-state-visible { -webkit-transform: scale(1); transform: scale(1); } +} +@media screen and (-webkit-min-device-pixel-ratio:0) {/* apple | webkit */ + .d-close { right:auto; left:-16px; top:-16px; } +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/idialog/idialog_s.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/idialog/idialog_s.png new file mode 100644 index 00000000..d86d0544 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/idialog/idialog_s.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/idialog/idialog_s2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/idialog/idialog_s2.png new file mode 100644 index 00000000..7be06ad2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/idialog/idialog_s2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/loading.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/loading.gif new file mode 100644 index 00000000..e8c28929 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/loading.gif differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/opera.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/opera.css new file mode 100644 index 00000000..55f329ff --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/opera.css @@ -0,0 +1,61 @@ +@charset "utf-8"; +/* + * artDialog skin + * http://code.google.com/p/artdialog/ + * (c) 2009-2012 TangBin, http://www.planeArt.cn + * + * This is licensed under the GNU LGPL, version 2.1 or later. + * For details, see: http://creativecommons.org/licenses/LGPL/2.1/ + */ + +/* common start */ +body { _margin:0; _height:100%; }/*IE6 BUG*/ +.d-outer { text-align:left; } +.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; } +.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; } +.d-header, .d-button { font: 12px/1.11 Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; } +.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; } +.d-state-noTitle .d-title { display:none; } +.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; } +.d-close:hover { text-decoration:none; } +.d-main { text-align:center; vertical-align:middle; min-width:9em; } +.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; } +.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; } +.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; } +.d-buttons { padding:8px; text-align:right; white-space:nowrap; } +.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, 1); box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; } +.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; } +.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); } +.d-button:hover { color:#000; border-color:#666; } +.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 5px rgba(66, 109, 201, .9), inset 0 1px 1em rgba(0, 0, 0, .3); } +.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; } +.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; } +.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; } +.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); } +.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; } +/* common end */ + +.d-inner { background:#f0f1f9; } +.d-titleBar { width:100%; height:0; position:relative; bottom:27px; _bottom:0; _margin-top:-27px; } +.d-title { height:27px; line-height:27px; padding:0 37px 0 0; _padding:0; color:#333; text-shadow:1px 1px 0 rgba(255, 255, 255, .7); } +.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(opera/s1.png); background-repeat:no-repeat; } +.d-nw { width:15px; height:32px; background-position: 0 0; } +.d-ne { width:15px; height:32px; background-position: -15px 0; } +.d-sw { width:15px; height:15px; background-position: 0 -33px; } +.d-se { width:15px; height:15px; background-position: -15px -33px } +.d-close { top:0; right:0; _z-index:1; width:27px; height:27px; _font-size:0; _line-height:0; *zoom:1; text-indent:-9999em; background-position:0 -96px; } +.d-close:hover { background-position:0 -123px; } +.d-n, .d-s { background-repeat:repeat-x; } +.d-n { background-position: 0 -48px; } +.d-s { background-position: 0 -81px; } +.d-w, .d-e { background-image:url(opera/s2.png); background-repeat:repeat-y; } +.d-w { background-position:left top; } +.d-e { background-position: right bottom; } +.d-icon, .d-main { padding-top:10px; } +.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; } +.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; } +.d-state-noTitle { box-shadow:none; } +.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; } +.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; } +.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; } +.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; } \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/opera/s1.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/opera/s1.png new file mode 100644 index 00000000..e6941c1f Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/opera/s1.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/opera/s2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/opera/s2.png new file mode 100644 index 00000000..0debda05 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/opera/s2.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/simple.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/simple.css new file mode 100644 index 00000000..d5519b60 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/simple.css @@ -0,0 +1,54 @@ +@charset "utf-8"; +/* + * artDialog skin + * http://code.google.com/p/artdialog/ + * (c) 2009-2012 TangBin, http://www.planeArt.cn + * + * This is licensed under the GNU LGPL, version 2.1 or later. + * For details, see: http://creativecommons.org/licenses/LGPL/2.1/ + */ + +/* common start */ +body { _margin:0; _height:100%; }/*IE6 BUG*/ +.d-outer { text-align:left; } +.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; } +.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; } +.d-header, .d-button { font: 12px/1.11 Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; } +.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; } +.d-state-noTitle .d-title { display:none; } +.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; } +.d-close:hover { text-decoration:none; } +.d-main { text-align:center; vertical-align:middle; min-width:9em; } +.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; } +.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; } +.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; } +.d-buttons { padding:8px; text-align:right; white-space:nowrap; } +.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, 1); box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; } +.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; } +.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); } +.d-button:hover { color:#000; border-color:#666; } +.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 5px rgba(66, 109, 201, .9), inset 0 1px 1em rgba(0, 0, 0, .3); } +.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; } +.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; } +.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; } +.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); } +.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; } +/* common end */ + +.d-inner { background:#FFF; border:1px solid #666; } +.d-nw, .d-ne, .d-sw, .d-se { width:3px; height:3px; } +.d-nw, .d-n, .d-ne, .d-w, .d-e, .d-sw, .d-s, .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5); } +.d-titleBar { position:relative; height:100%; } +.d-title { position:absolute; top:0; left:0; width:100%; height:24px; text-indent:-9999em; overflow:hidden; font-size:0; } +.d-state-drag .d-title { color:#666; } +.d-close { padding:0; top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; } +.d-close:hover, .d-close:active { text-decoration:none; color:#900; } +.d-content { color:#666; } +.d-state-focus .d-content { color:#000; } +@media screen and (min-width:0) { + .d-close { width:20px; height:20px; line-height:20px; right:-10px; top:-10px; border-radius:20px; background:#999; color:#FFF; box-shadow:0 1px 3px rgba(0, 0, 0, .3); -moz-transition: linear .06s; -webkit-transition: linear .06s; transition: linear .06s; } + .d-close:hover { width:24px; height:24px; line-height:24px; right:-12px; top:-12px; color:#FFF; box-shadow:0 1px 3px rgba(209, 40, 42, .5); background:#d1282a; border-radius:24px; } + .d-state-lock .d-dialog { box-shadow:0 3px 26px rgba(0, 0, 0, .9); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: -webkit-box-shadow linear .2s; } + .d-dialog:active { box-shadow:0 0 5px rgba(0, 0, 0, .1)!important; } + .d-state-drag { box-shadow:none!important; } +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/twitter.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/twitter.css new file mode 100644 index 00000000..a59789b6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/skins/twitter.css @@ -0,0 +1,58 @@ +@charset "utf-8"; +/* + * artDialog skin + * http://code.google.com/p/artdialog/ + * (c) 2009-2012 TangBin, http://www.planeArt.cn + * + * This is licensed under the GNU LGPL, version 2.1 or later. + * For details, see: http://creativecommons.org/licenses/LGPL/2.1/ + */ + +/* common start */ +body { _margin:0; _height:100%; }/*IE6 BUG*/ +.d-outer { text-align:left; } +.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; } +.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; } +.d-header, .d-button { font: 12px/1.11 Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; } +.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; } +.d-state-noTitle .d-title { display:none; } +.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; } +.d-close:hover { text-decoration:none; } +.d-main { text-align:center; vertical-align:middle; min-width:9em; } +.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; } +.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; } +.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; } +.d-buttons { padding:8px; text-align:right; white-space:nowrap; } +.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, 1); box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; } +.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; } +.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); } +.d-button:hover { color:#000; border-color:#666; } +.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 5px rgba(66, 109, 201, .9), inset 0 1px 1em rgba(0, 0, 0, .3); } +.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; } +.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; } +.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; } +.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); } +.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; } +/* common end */ + +.d-inner { background:rgba(0, 0, 0, .7); } +.d-dialog { background:#FFF; border-radius:3px; } +.d-inner { background:#FFF; /*ie*/} +.d-outer { border:1px solid #000; border-radius:5px; box-shadow: 0 3px 0 rgba(0,0,0,0.1); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: -webkit-box-shadow linear .2s; } +.d-state-lock { box-shadow:0 3px 26px rgba(0, 0, 0, .9); } +.d-outer:active { box-shadow:none!important; } +.d-state-drag { box-shadow:none!important; } +.d-border { border-radius:3px; } +.d-nw, .d-ne { width:5px; height:37px; } +.d-sw, .d-se { width:5px; height:5px; } +.d-nw, .d-n, .d-ne, .d-w, .d-e, .d-sw, .d-s, .d-se { background:rgba(0, 0, 0, .7); background:#000\9!important; filter:alpha(opacity=70); } +.d-titleBar { width:100%; height:0; position:relative; bottom:33px; _bottom:0; _margin-top:-33px; } +.d-title { height:27px; line-height:27px; padding:0 16px 0 5px; color:#FFF; font-weight:700; text-shadow:0 1px 0 #000; } +.d-close { padding:0; top:2px; right:5px; width:21px; height:21px; line-height:21px; font-size:18px; text-align:center; color:#EBEBEB; font-family: Helvetica, STHeiti; _font-family: Tahoma, '\u9ed1\u4f53', 'Book Antiqua', Palatino; border:1px solid transparent; _border:0 none; background:#000; border-radius:15px; } +.d-close:hover { color:#FFF; background:#C72015; border:1px solid #000; _border:0 none; box-shadow: 0 1px 0 rgba(255, 255, 255, .3), inset 0 1px 0 rgba(255, 255, 255, .3); } +.d-close:active { box-shadow: none; } +.d-state-noTitle { } +.d-content { color:#666; } +.d-state-noTitle .d-nw, .d-state-noTitle .d-ne { height:5px; } +.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; } +.d-state-noTitle .d-close { top:5px; } diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/source/artDialog.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/source/artDialog.js new file mode 100644 index 00000000..cebfd974 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/source/artDialog.js @@ -0,0 +1,1526 @@ +/*! +* artDialog 5 +* Date: 2012-03-21 +* http://code.google.com/p/artdialog/ +* (c) 2009-2012 TangBin, http://www.planeArt.cn +* +* This is licensed under the GNU LGPL, version 2.1 or later. +* For details, see: http://creativecommons.org/licenses/LGPL/2.1/ +*/ + +;(function (window, undefined) { + +var $ = window.art = function (selector, context) { + return new $.fn.constructor(selector, context); + }, + quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/, + rclass = /[\n\t]/g; + +if (window.$ === undefined) { + window.$ = $; +}; + +$.fn = $.prototype = { + + constructor: function (selector, context) { + var match, elem; + context = context || document; + + if (!selector) { + return this; + }; + + if (selector.nodeType) { + this[0] = selector; + return this; + }; + + if (typeof selector === 'string') { + match = quickExpr.exec(selector); + + if (match && match[2]) { + elem = context.getElementById(match[2]); + if (elem && elem.parentNode) this[0] = elem; + return this; + }; + }; + + this[0] = selector; + return this; + }, + + /** + * 判断样式类是否存在 + * @param {String} 名称 + * @return {Boolean} + */ + hasClass: function (name) { + var className = ' ' + name + ' '; + + if ((' ' + this[0].className + ' ').replace(rclass, ' ').indexOf(className) > -1) { + return true; + }; + + return false; + }, + + /** + * 添加样式类 + * @param {String} 名称 + */ + addClass: function (name) { + if (!this.hasClass(name)) { + this[0].className += ' ' + name; + }; + + return this; + }, + + /** + * 移除样式类 + * @param {String} 名称 + */ + removeClass: function (name) { + var elem = this[0]; + + if (!name) { + elem.className = ''; + } else + if (this.hasClass(name)) { + elem.className = elem.className.replace(name, ' '); + }; + + return this; + }, + + /** + * 读写样式
                                              + * css(name) 访问第一个匹配元素的样式属性
                                              + * css(properties) 把一个"名/值对"对象设置为所有匹配元素的样式属性
                                              + * css(name, value) 在所有匹配的元素中,设置一个样式属性的值
                                              + */ + css: function (name, value) { + var i, elem = this[0], obj = arguments[0]; + + if (typeof name === 'string') { + if (value === undefined) { + return $.css(elem, name); + } else { + elem.style[name] = value; + }; + } else { + for (i in obj) { + elem.style[i] = obj[i]; + }; + }; + + return this; + }, + + /** 显示元素 */ + show: function () { + return this.css('display', 'block'); + }, + + /** 隐藏元素 */ + hide: function () { + return this.css('display', 'none'); + }, + + /** + * 获取相对文档的坐标 + * @return {Object} 返回left、top的数值 + */ + offset: function () { + var elem = this[0], + box = elem.getBoundingClientRect(), + doc = elem.ownerDocument, + body = doc.body, + docElem = doc.documentElement, + clientTop = docElem.clientTop || body.clientTop || 0, + clientLeft = docElem.clientLeft || body.clientLeft || 0, + top = box.top + (self.pageYOffset || docElem.scrollTop) - clientTop, + left = box.left + (self.pageXOffset || docElem.scrollLeft) - clientLeft; + + return { + left: left, + top: top + }; + }, + + /** + * 读写HTML - (不支持文本框) + * @param {String} 内容 + */ + html: function (content) { + var elem = this[0]; + + if (content === undefined) return elem.innerHTML; + $.cleanData(elem.getElementsByTagName('*')); + elem.innerHTML = content; + + return this; + }, + + /** + * 移除节点 + */ + remove: function () { + var elem = this[0]; + + $.cleanData(elem.getElementsByTagName('*')); + $.cleanData([elem]); + elem.parentNode.removeChild(elem); + + return this; + }, + + /** + * 事件绑定 + * @param {String} 类型 + * @param {Function} 要绑定的函数 + */ + bind: function (type, callback) { + $.event.add(this[0], type, callback); + return this; + }, + + /** + * 移除事件 + * @param {String} 类型 + * @param {Function} 要卸载的函数 + */ + unbind: function(type, callback) { + $.event.remove(this[0], type, callback); + return this; + } + +}; + +$.fn.constructor.prototype = $.fn; + + +/** 检测window */ +$.isWindow = function (obj) { + return obj && typeof obj === 'object' && 'setInterval' in obj; +}; + + +/** +* 搜索子元素 +* 注意:只支持nodeName或.className的形式,并且只返回第一个元素 +* @param {String} +*/ +$.fn.find = function (expr) { + var value, elem = this[0], + className = expr.split('.')[1]; + + if (className) { + if (document.getElementsByClassName) { + value = elem.getElementsByClassName(className); + } else { + value = getElementsByClassName(className, elem); + }; + } else { + value = elem.getElementsByTagName(expr); + }; + + return $(value[0]); +}; +function getElementsByClassName (className, node, tag) { + node = node || document; + tag = tag || '*'; + var i = 0, + j = 0, + classElements = [], + els = node.getElementsByTagName(tag), + elsLen = els.length, + pattern = new RegExp("(^|\\s)" + className + "(\\s|$)"); + + for (; i < elsLen; i ++) { + if (pattern.test(els[i].className)) { + classElements[j] = els[i]; + j ++; + }; + }; + return classElements; +}; + +/** +* 遍历 +* @param {Object} +* @param {Function} +*/ +$.each = function (obj, callback) { + var name, i = 0, + length = obj.length, + isObj = length === undefined; + + if (isObj) { + for (name in obj) { + if (callback.call(obj[name], name, obj[name]) === false) { + break; + }; + }; + } else { + for ( + var value = obj[0]; + i < length && callback.call(value, i, value) !== false; + value = obj[++i] + ) {}; + }; + + return obj; +}; + +/** +* 读写缓存 +* @param {HTMLElement} 元素 +* @param {String} 缓存名称 +* @param {Any} 数据 +* @return {Any} 如果无参数data则返回缓存数据 +*/ +$.data = function (elem, name, data) { + var cache = $.cache, + id = uuid(elem); + + if (name === undefined) { + return cache[id]; + }; + + if (!cache[id]) { + cache[id] = {}; + }; + + if (data !== undefined) { + cache[id][name] = data; + }; + + return cache[id][name]; +}; + +/** +* 删除缓存 +* @param {HTMLElement} 元素 +* @param {String} 缓存名称 +*/ +$.removeData = function (elem, name) { + var empty = true, + expando = $.expando, + cache = $.cache, + id = uuid(elem), + thisCache = id && cache[id]; + + if (!thisCache) { + return; + }; + + if (name) { + + delete thisCache[name]; + for (var n in thisCache) { + empty = false; + }; + + if (empty) { + delete $.cache[id]; + }; + + } else { + + delete cache[id]; + + if (elem.removeAttribute) { + elem.removeAttribute(expando); + } else { + elem[expando] = null; + }; + + }; +}; + +$.uuid = 0; +$.cache = {}; +$.expando = '@cache' + + new Date; + +// 标记元素唯一身份 +function uuid (elem) { + var expando = $.expando, + id = elem === window ? 0 : elem[expando]; + if (id === undefined) elem[expando] = id = ++ $.uuid; + return id; +}; + + +/** +* 事件机制 +* @namespace +* @requires [$.data, $.removeData] +*/ +$.event = { + + /** + * 添加事件 + * @param {HTMLElement} 元素 + * @param {String} 事件类型 + * @param {Function} 要添加的函数 + */ + add: function (elem, type, callback) { + var cache, listeners, + that = $.event, + data = $.data(elem, '@events') || $.data(elem, '@events', {}); + + cache = data[type] = data[type] || {}; + listeners = cache.listeners = cache.listeners || []; + listeners.push(callback); + + if (!cache.handler) { + cache.elem = elem; + cache.handler = that.handler(cache); + + elem.addEventListener + ? elem.addEventListener(type, cache.handler, false) + : elem.attachEvent('on' + type, cache.handler); + }; + }, + + /** + * 卸载事件 + * @param {HTMLElement} 元素 + * @param {String} 事件类型 + * @param {Function} 要卸载的函数 + */ + remove: function (elem, type, callback) { + var i, cache, listeners, + that = $.event, + empty = true, + data = $.data(elem, '@events'); + + if (!data) { + return; + }; + + if (!type) { + for (i in data) that.remove(elem, i); + return; + }; + + cache = data[type]; + + if (!cache) { + return; + }; + + listeners = cache.listeners; + if (callback) { + for (i = 0; i < listeners.length; i ++) { + listeners[i] === callback && listeners.splice(i--, 1); + }; + } else { + cache.listeners = []; + }; + + if (cache.listeners.length === 0) { + elem.removeEventListener + ? elem.removeEventListener(type, cache.handler, false) + : elem.detachEvent('on' + type, cache.handler); + + delete data[type]; + cache = $.data(elem, '@events'); + + for (var n in cache) { + empty = false; + }; + + if (empty) { + $.removeData(elem, '@events'); + }; + }; + }, + + /** @inner 事件句柄 */ + handler: function (cache) { + return function (event) { + event = $.event.fix(event || window.event); + for (var i = 0, list = cache.listeners, fn; fn = list[i++];) { + if (fn.call(cache.elem, event) === false) { + event.preventDefault(); + event.stopPropagation(); + }; + }; + }; + }, + + /** @inner Event对象兼容处理 */ + fix: function (event) { + if (event.target) { + return event; + }; + + var eventObj = { + target: event.srcElement || document, + preventDefault: function () {event.returnValue = false}, + stopPropagation: function () {event.cancelBubble = true} + }; + + // IE6/7/8 在原生window.event对象写入数据会导致内存无法回收,应当采用拷贝 + for (var i in event) { + eventObj[i] = event[i]; + } + + return eventObj; + } + +}; + +/** +* 清理元素集的事件与缓存 +* @requires [$.removeData, $.event] +* @param {HTMLCollection} 元素集 +*/ +$.cleanData = function (elems) { + var i = 0, elem, + len = elems.length, + removeEvent = $.event.remove, + removeData = $.removeData; + + for (; i < len; i ++) { + elem = elems[i]; + removeEvent(elem); + removeData(elem); + }; +}; + +// 获取css +$.css = 'defaultView' in document && 'getComputedStyle' in document.defaultView ? + function (elem, name) { + return document.defaultView.getComputedStyle(elem, false)[name]; +} : + function (elem, name) { + return elem.currentStyle[name] || ''; +}; + + +/** +* 获取滚动条位置 - [不支持写入] +* $.fn.scrollLeft, $.fn.scrollTop +* @example 获取文档垂直滚动条:$(document).scrollTop() +* @return {Number} 返回滚动条位置 +*/ +$.each(['Left', 'Top'], function (i, name) { + var method = 'scroll' + name; + + $.fn[method] = function () { + var elem = this[0], win; + + win = getWindow(elem); + return win ? + ('pageXOffset' in win) ? + win[i ? 'pageYOffset' : 'pageXOffset'] : + win.document.documentElement[method] || win.document.body[method] : + elem[method]; + }; +}); + +function getWindow (elem) { + return $.isWindow(elem) ? + elem : + elem.nodeType === 9 ? + elem.defaultView || elem.parentWindow : + false; +}; + +/** +* 获取窗口或文档尺寸 - [只支持window与document读取] +* @example +获取文档宽度:$(document).width() +获取可视范围:$(window).width() +* @return {Number} +*/ +$.each(['Height', 'Width'], function (i, name) { + var type = name.toLowerCase(); + + $.fn[type] = function (size) { + var elem = this[0]; + if (!elem) { + return size == null ? null : this; + }; + + return $.isWindow(elem) ? + elem.document.documentElement['client' + name] || elem.document.body['client' + name] : + (elem.nodeType === 9) ? + Math.max( + elem.documentElement['client' + name], + elem.body['scroll' + name], elem.documentElement['scroll' + name], + elem.body['offset' + name], elem.documentElement['offset' + name] + ) : null; + }; + +}); + +return $}(window)); + + + + + + +;(function ($, window, undefined) { + +// artDialog 只支持 xhtml 1.0 或者以上的 DOCTYPE 声明 +if (document.compatMode === 'BackCompat') { + throw new Error('artDialog: Document types require more than xhtml1.0'); +}; + +var _singleton, + _count = 0, + _expando = 'artDialog' + + new Date, + _isIE6 = window.VBArray && !window.XMLHttpRequest, + _isMobile = 'createTouch' in document && !('onmousemove' in document) + || /(iPhone|iPad|iPod)/i.test(navigator.userAgent), + _isFixed = !_isIE6 && !_isMobile; + + +var artDialog = function (config, ok, cancel) { + + config = config || {}; + + if (typeof config === 'string' || config.nodeType === 1) { + + config = {content: config, fixed: !_isMobile}; + }; + + + var api, defaults = artDialog.defaults; + var elem = config.follow = this.nodeType === 1 && this || config.follow; + + + // 合并默认配置 + for (var i in defaults) { + if (config[i] === undefined) { + config[i] = defaults[i]; + }; + }; + + + config.id = elem && elem[_expando + 'follow'] || config.id || _expando + _count; + api = artDialog.list[config.id]; + + + + if (api) { + if (elem) { + api.follow(elem) + }; + api.zIndex().focus(); + return api; + }; + + + + // 目前主流移动设备对fixed支持不好 + if (!_isFixed) { + config.fixed = false; + }; + + // !$.isArray(config.button) + if (!config.button || !config.button.push) { + config.button = []; + }; + + + // 确定按钮 + if (ok !== undefined) { + config.ok = ok; + }; + + if (config.ok) { + config.button.push({ + id: 'ok', + value: config.okValue, + callback: config.ok, + focus: true + }); + }; + + + // 取消按钮 + if (cancel !== undefined) { + config.cancel = cancel; + }; + + if (config.cancel) { + config.button.push({ + id: 'cancel', + value: config.cancelValue, + callback: config.cancel + }); + }; + + // 更新 zIndex 全局配置 + artDialog.defaults.zIndex = config.zIndex; + + _count ++; + + return artDialog.list[config.id] = _singleton ? + _singleton.constructor(config) : new artDialog.fn.constructor(config); +}; + +artDialog.version = '5.0'; + +artDialog.fn = artDialog.prototype = { + + /** @inner */ + constructor: function (config) { + var dom; + + this.closed = false; + this.config = config; + this.dom = dom = this.dom || this._getDom(); + + config.skin && dom.wrap.addClass(config.skin); + + dom.wrap.css('position', config.fixed ? 'fixed' : 'absolute'); + dom.close[config.cancel === false ? 'hide' : 'show'](); + dom.content.css('padding', config.padding); + + this.button.apply(this, config.button); + + this.title(config.title) + .content(config.content) + .size(config.width, config.height) + .time(config.time); + + config.follow + ? this.follow(config.follow) + : this.position(); + + this.zIndex(); + config.lock && this.lock(); + + this._addEvent(); + this[config.visible ? 'visible' : 'hidden']().focus(); + + _singleton = null; + + config.initialize && config.initialize.call(this); + + return this; + }, + + + /** + * 设置内容 + * @param {String, HTMLElement, Object} 内容 (可选) + */ + content: function (message) { + + var prev, next, parent, display, + that = this, + $content = this.dom.content, + content = $content[0]; + + + if (this._elemBack) { + this._elemBack(); + delete this._elemBack; + }; + + + if (typeof message === 'string') { + + $content.html(message); + } else + + if (message && message.nodeType === 1) { + + // 让传入的元素在对话框关闭后可以返回到原来的地方 + display = message.style.display; + prev = message.previousSibling; + next = message.nextSibling; + parent = message.parentNode; + + this._elemBack = function () { + if (prev && prev.parentNode) { + prev.parentNode.insertBefore(message, prev.nextSibling); + } else if (next && next.parentNode) { + next.parentNode.insertBefore(message, next); + } else if (parent) { + parent.appendChild(message); + }; + message.style.display = display; + that._elemBack = null; + }; + + $content.html(''); + content.appendChild(message); + $(message).show(); + + }; + + return this.position(); + }, + + + /** + * 设置标题 + * @param {String, Boolean} 标题内容. 为 false 则隐藏标题栏 + */ + title: function (content) { + var dom = this.dom, + outer = dom.outer, + $title = dom.title, + className = 'd-state-noTitle'; + + if (content === false) { + outer.addClass(className); + $("#closeIconID").hide(); + } else { + $title.show().html(content); + outer.removeClass(className); + }; + + return this; + }, + + + /** @inner 位置居中 */ + position: function () { + + var dom = this.dom, + wrap = dom.wrap[0], + $window = dom.window, + $document = dom.document, + fixed = this.config.fixed, + dl = fixed ? 0 : $document.scrollLeft(), + dt = fixed ? 0 : $document.scrollTop(), + ww = $window.width(), + wh = $window.height(), + ow = wrap.offsetWidth, + oh = wrap.offsetHeight, + left = (ww - ow) / 2 + dl, + top = top = (oh < 4 * wh / 7 ? wh * 0.382 - oh / 2 : (wh - oh) / 2) + dt, + style = wrap.style; + + style.left = Math.max(left, dl) + 'px'; + style.top = Math.max(top, dt) + 'px'; + + return this; + }, + + + /** + * 尺寸 + * @param {Number, String} 宽度 + * @param {Number, String} 高度 + */ + size: function (width, height) { + + var style = this.dom.main[0].style; + + if (typeof width === 'number') { + width = width + 'px'; + }; + + if (typeof height === 'number') { + height = height + 'px'; + }; + + style.width = width; + style.height = height; + + return this; + }, + + + /** + * 跟随元素 + * @param {HTMLElement} + */ + follow: function (elem) { + + var $elem = $(elem), + config = this.config; + + + // 隐藏元素不可用 + if (!elem || !elem.offsetWidth && !elem.offsetHeight) { + + return this.position(this._left, this._top); + }; + + var fixed = config.fixed, + expando = _expando + 'follow', + dom = this.dom, + $window = dom.window, + $document = dom.document, + winWidth = $window.width(), + winHeight = $window.height(), + docLeft = $document.scrollLeft(), + docTop = $document.scrollTop(), + offset = $elem.offset(), + width = elem.offsetWidth, + height = elem.offsetHeight, + left = fixed ? offset.left - docLeft : offset.left, + top = fixed ? offset.top - docTop : offset.top, + wrap = this.dom.wrap[0], + style = wrap.style, + wrapWidth = wrap.offsetWidth, + wrapHeight = wrap.offsetHeight, + setLeft = left - (wrapWidth - width) / 2, + setTop = top + height, + dl = fixed ? 0 : docLeft, + dt = fixed ? 0 : docTop; + + + setLeft = setLeft < dl ? left : + (setLeft + wrapWidth > winWidth) && (left - wrapWidth > dl) + ? left - wrapWidth + width + : setLeft; + + + setTop = (setTop + wrapHeight > winHeight + dt) + && (top - wrapHeight > dt) + ? top - wrapHeight + : setTop; + + + style.left = setLeft + 'px'; + style.top = setTop + 'px'; + + + this._follow && this._follow.removeAttribute(expando); + this._follow = elem; + elem[expando] = config.id; + + return this; + }, + + + /** + * 自定义按钮 + * @example + button({ + value: 'login', + callback: function () {}, + disabled: false, + focus: true + }, .., ..) + */ + button: function () { + + var dom = this.dom, + $buttons = dom.buttons, + elem = $buttons[0], + strongButton = 'd-state-highlight', + listeners = this._listeners = this._listeners || {}, + ags = [].slice.call(arguments); + + var i = 0, val, value, id, isNewButton, button; + + for (; i < ags.length; i ++) { + + val = ags[i]; + + value = val.value; + id = val.id || value; + isNewButton = !listeners[id]; + button = !isNewButton ? listeners[id].elem : document.createElement('input'); + + button.type = 'button'; + button.className = 'd-button'; + + if (!listeners[id]) { + listeners[id] = {}; + }; + + if (value) { + button.value = value; + }; + + if (val.width) { + button.style.width = val.width; + }; + + if (val.callback) { + listeners[id].callback = val.callback; + }; + + if (val.focus) { + this._focus && this._focus.removeClass(strongButton); + this._focus = $(button).addClass(strongButton); + this.focus(); + }; + + button[_expando + 'callback'] = id; + button.disabled = !!val.disabled; + + + if (isNewButton) { + listeners[id].elem = button; + elem.appendChild(button); + }; + }; + + $buttons[0].style.display = ags.length ? '' : 'none'; + + return this; + }, + + + /** 显示对话框 */ + visible: function () { + //this.dom.wrap.show(); + this.dom.wrap.css('visibility', 'visible'); + this.dom.outer.addClass('d-state-visible'); + + if (this._isLock) { + this._lockMask.show(); + }; + + return this; + }, + + + /** 隐藏对话框 */ + hidden: function () { + //this.dom.wrap.hide(); + this.dom.wrap.css('visibility', 'hidden'); + this.dom.outer.removeClass('d-state-visible'); + + if (this._isLock) { + this._lockMask.hide(); + }; + + return this; + }, + + + /** 关闭对话框 */ + close: function () { + + if (this.closed) { + return this; + }; + + var dom = this.dom, + $wrap = dom.wrap, + list = artDialog.list, + beforeunload = this.config.beforeunload, + follow = this.config.follow; + + if (beforeunload && beforeunload.call(this) === false) { + return this; + }; + + + if (artDialog.focus === this) { + artDialog.focus = null; + }; + + + if (follow) { + follow.removeAttribute(_expando + 'follow'); + }; + + + if (this._elemBack) { + this._elemBack(); + }; + + + + this.time(); + this.unlock(); + this._removeEvent(); + delete list[this.config.id]; + + + if (_singleton) { + + $wrap.remove(); + + // 使用单例模式 + } else { + + _singleton = this; + + dom.title.html(''); + dom.content.html(''); + dom.buttons.html(''); + + $wrap[0].className = $wrap[0].style.cssText = ''; + dom.outer[0].className = 'd-outer'; + + $wrap.css({ + left: 0, + top: 0, + position: _isFixed ? 'fixed' : 'absolute' + }); + + for (var i in this) { + if (this.hasOwnProperty(i) && i !== 'dom') { + delete this[i]; + }; + }; + + this.hidden(); + + }; + + this.closed = true; + return this; + }, + + + /** + * 定时关闭 + * @param {Number} 单位毫秒, 无参数则停止计时器 + */ + time: function (time) { + + var that = this, + timer = this._timer; + + timer && clearTimeout(timer); + + if (time) { + this._timer = setTimeout(function(){ + that._click('cancel'); + }, time); + }; + + + return this; + }, + + /** @inner 设置焦点 */ + focus: function () { + + if (this.config.focus) { + //setTimeout(function () { + try { + var elem = this._focus && this._focus[0] || this.dom.close[0]; + elem && elem.focus(); + // IE对不可见元素设置焦点会报错 + } catch (e) {}; + //}, 0); + }; + + return this; + }, + + + /** 置顶对话框 */ + zIndex: function () { + + var dom = this.dom, + top = artDialog.focus, + index = artDialog.defaults.zIndex ++; + + // 设置叠加高度 + dom.wrap.css('zIndex', index); + this._lockMask && this._lockMask.css('zIndex', index - 1); + + // 设置最高层的样式 + top && top.dom.outer.removeClass('d-state-focus'); + artDialog.focus = this; + dom.outer.addClass('d-state-focus'); + + return this; + }, + + + /** 设置屏锁 */ + lock: function () { + + if (this._isLock) { + return this; + }; + + var that = this, + config = this.config, + dom = this.dom, + div = document.createElement('div'), + $div = $(div), + index = artDialog.defaults.zIndex - 1; + + this.zIndex(); + dom.outer.addClass('d-state-lock'); + + $div.css({ + zIndex: index, + position: 'fixed', + left: 0, + top: 0, + width: '100%', + height: '100%', + overflow: 'hidden' + }).addClass('d-mask'); + + if (!_isFixed) { + $div.css({ + position: 'absolute', + width: $(window).width() + 'px', + height: $(document).height() + 'px' + }); + }; + + + $div.bind('click', function () { + that._reset(); + }).bind('dblclick', function () { + that._click('cancel'); + }); + + document.body.appendChild(div); + + this._lockMask = $div; + this._isLock = true; + + return this; + }, + + + /** 解开屏锁 */ + unlock: function () { + + if (!this._isLock) { + return this; + }; + + this._lockMask.unbind(); + this._lockMask.hide(); + this._lockMask.remove(); + + this.dom.outer.removeClass('d-state-lock'); + this._isLock = false; + + return this; + }, + + + // 获取元素 + _getDom: function () { + + var body = document.body; + + if (!body) { + throw new Error('artDialog: "documents.body" not ready'); + }; + + var wrap = document.createElement('div'); + + wrap.style.cssText = 'position:absolute;left:0;top:0'; + wrap.innerHTML = artDialog._templates; + body.insertBefore(wrap, body.firstChild); + + var name, + i = 0, + dom = {}, + els = wrap.getElementsByTagName('*'), + elsLen = els.length; + + for (; i < elsLen; i ++) { + name = els[i].className.split('d-')[1]; + if (name) { + dom[name] = $(els[i]); + }; + }; + + dom.window = $(window); + dom.document = $(document); + dom.wrap = $(wrap); + + return dom; + }, + + + // 按钮回调函数触发 + _click: function (id) { + + var fn = this._listeners[id] && this._listeners[id].callback; + + return typeof fn !== 'function' || fn.call(this) !== false ? + this.close() : this; + }, + + + // 重置位置 + _reset: function () { + var elem = this.config.follow; + elem ? this.follow(elem) : this.position(); + }, + + + // 事件代理 + _addEvent: function () { + + var that = this, + dom = this.dom; + + + // 监听点击 + dom.wrap + .bind('click', function (event) { + + var target = event.target, callbackID; + + // IE BUG + if (target.disabled) { + return false; + }; + + if (target === dom.close[0]) { + that._click('cancel'); + return false; + } else { + callbackID = target[_expando + 'callback']; + callbackID && that._click(callbackID); + }; + + }) + .bind('mousedown', function () { + that.zIndex(); + }); + + }, + + + // 卸载事件代理 + _removeEvent: function () { + this.dom.wrap.unbind(); + } + +}; + +artDialog.fn.constructor.prototype = artDialog.fn; + + + +$.fn.dialog = $.fn.artDialog = function () { + var config = arguments; + this[this.live ? 'live' : 'bind']('click', function () { + artDialog.apply(this, config); + return false; + }); + return this; +}; + + + +/** 最顶层的对话框API */ +artDialog.focus = null; + + + +/** +* 根据 ID 获取某对话框 API +* @param {String} 对话框 ID +* @return {Object} 对话框 API (实例) +*/ +artDialog.get = function (id) { + return id === undefined + ? artDialog.list + : artDialog.list[id]; +}; + +artDialog.list = {}; + + + +// 全局快捷键 +$(document).bind('keydown', function (event) { + var target = event.target, + nodeName = target.nodeName, + rinput = /^input|textarea$/i, + api = artDialog.focus, + keyCode = event.keyCode; + + if (!api || !api.config.esc || rinput.test(nodeName) && target.type !== 'button') { + return; + }; + + // ESC + keyCode === 27 && api._click('cancel'); +}); + + + +// 浏览器窗口改变后重置对话框位置 +$(window).bind('resize', function () { + var dialogs = artDialog.list; + for (var id in dialogs) { + dialogs[id]._reset(); + }; +}); + + + +// XHTML 模板 +// 使用 uglifyjs 压缩能够预先处理"+"号合并字符串 +// @see http://marijnhaverbeke.nl/uglifyjs +artDialog._templates = +'
                                              ' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '
                                              ' ++ '
                                              ' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '
                                              ' ++ '
                                              ' ++ '
                                              ' ++ '' ++ '\xd7' ++ '' ++ '
                                              ' ++ '
                                              ' ++ '
                                              ' ++ '
                                              ' ++ '
                                              ' ++ '
                                              ' ++'
                                              '; + + + +/** + * 默认配置 + */ +artDialog.defaults = { + + // 消息内容 + content: '
                                              loading..
                                              ', + + // 标题 + title: 'message', + + // 自定义按钮 + button: null, + + // 确定按钮回调函数 + ok: null, + + // 取消按钮回调函数 + cancel: null, + + // 对话框初始化后执行的函数 + initialize: null, + + // 对话框关闭前执行的函数 + beforeunload: null, + + // 确定按钮文本 + okValue: 'ok', + + // 取消按钮文本 + cancelValue: 'cancel', + + // 内容宽度 + width: 'auto', + + // 内容高度 + height: 'auto', + + // 内容与边界填充距离 + padding: '20px 25px', + + // 皮肤名(多皮肤共存预留接口) + skin: null, + + // 自动关闭时间 + time: null, + + // 是否支持Esc键关闭 + esc: true, + + // 是否支持对话框按钮自动聚焦 + focus: true, + + // 初始化后是否显示对话框 + visible: true, + + // 让对话框跟随某元素 + follow: null, + + // 是否锁屏 + lock: false, + + // 是否固定定位 + fixed: false, + + // 对话框叠加高度值(重要:此值不能超过浏览器最大限制) + zIndex: 1987 + +}; + +this.artDialog = $.dialog = $.artDialog = artDialog; +}(this.art || this.jQuery, this)); + + + + +/* 更新记录 + +1. follow 不再支持 String 类型 +2. button 参数只支持 Array 类型 +3. button name 成员改成 value +4. button 增加 id 成员 +5. okVal 参数更名为 okValue, 默认值由 '确定' 改为 'ok' +6. cancelVal 参数更名为 cancelValue, 默认值由 '取消' 改为 'cancel' +6. close 参数更名为 beforeunload +7. init 参数更名为 initialize +8. title 参数默认值由 '消息' 改为 'message' +9. time 参数与方法参数单位由秒改为毫秒 +10. hide 参数方法更名为 hidden +11. 内部为皮肤增加动态样式 d-state-visible 类 +12. 给遮罩增添样式 d-mask 类 +13. background 参数被取消, 由 CSS 文件定义 +14. opacity 参数被取消, 由 CSS 文件定义 +15. 取消拖动特性,改由插件支持 +16. 取消 left 与 top 参数 +17. 取消对 ie6 提供 fixed 支持,自动转换为 absolute +18. 取消对 ie6 提供 alpha png 支持 +19. 取消对 ie6 提供 select 标签遮盖支持 +20. 增加 focus 参数 +21. 取消 position 方法 +22. 取消对 的支持 +23. 取消对 iframe 的支持 +24. title 方法不支持空参数 +25. content 方法不支持空参数 +26. button 方法的参数不支持数组类型 +27. 判断 DOCTYPE, 对 xhtml1.0 以下的页面报告错误 +28. 修复 IE8 动态等新内容时没有撑开对话框高度,特意为 ie8 取消 .d-content { display:inline-block } +29. show 参数与方法更名为 visible +30. 修正重复调用 close 方法出现的错误 + +*/ + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/source/artDialog.plugins.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/source/artDialog.plugins.js new file mode 100644 index 00000000..ad3d977c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/source/artDialog.plugins.js @@ -0,0 +1,322 @@ +/*! +* artDialog 5 plugins +* Date: 2012-03-16 +* http://code.google.com/p/artdialog/ +* (c) 2009-2012 TangBin, http://www.planeArt.cn +* +* This is licensed under the GNU LGPL, version 2.1 or later. +* For details, see: http://creativecommons.org/licenses/LGPL/2.1/ +*/ + +;(function ($) { + +/** + * 警告 + * @param {String, HTMLElement} 消息内容 + * @param {Function} (可选) 回调函数 + */ +$.alert = $.dialog.alert = function (content, callback) { + return $.dialog({ + id: 'Alert', + fixed: true, + lock: true, + content: content, + ok: true, + beforeunload: callback + }); +}; + + +/** + * 确认选择 + * @param {String, HTMLElement} 消息内容 + * @param {Function} 确定按钮回调函数 + * @param {Function} 取消按钮回调函数 + */ +$.confirm = $.dialog.confirm = function (content, ok, cancel) { + return $.dialog({ + id: 'Confirm', + fixed: true, + lock: true, + content: content, + ok: ok, + cancel: cancel + }); +}; + + +/** + * 输入框 + * @param {String, HTMLElement} 消息内容 + * @param {Function} 确定按钮回调函数。函数第一个参数接收用户录入的数据 + * @param {String} 输入框默认文本 + */ +$.prompt = $.dialog.prompt = function (content, ok, defaultValue) { + defaultValue = defaultValue || ''; + var input; + + return $.dialog({ + id: 'Prompt', + fixed: true, + lock: true, + content: [ + '
                                              ', + content, + '
                                              ', + '
                                              ', + '', + '
                                              ' + ].join(''), + initialize: function () { + input = this.dom.content.find('.d-input-text')[0]; + input.select(); + input.focus(); + }, + ok: function () { + return ok && ok.call(this, input.value); + }, + cancel: function () {} + }); +}; + + +/** 抖动效果 */ +$.dialog.prototype.shake = (function () { + + var fx = function (ontween, onend, duration) { + var startTime = + new Date; + var timer = setInterval(function () { + var runTime = + new Date - startTime; + var pre = runTime / duration; + + if (pre >= 1) { + clearInterval(timer); + onend(pre); + } else { + ontween(pre); + }; + }, 13); + }; + + var animate = function (elem, distance, duration) { + var quantity = arguments[3]; + + if (quantity === undefined) { + quantity = 6; + duration = duration / quantity; + }; + + var style = elem.style; + var from = parseInt(style.marginLeft) || 0; + + fx(function (pre) { + elem.style.marginLeft = from + (distance - from) * pre + 'px'; + }, function () { + if (quantity !== 0) { + animate( + elem, + quantity === 1 ? 0 : (distance / quantity - distance) * 1.3, + duration, + -- quantity + ); + }; + }, duration); + }; + + return function () { + animate(this.dom.wrap[0], 40, 600); + return this; + }; +})(); + + +// 拖拽支持 +var DragEvent = function () { + var that = this, + proxy = function (name) { + var fn = that[name]; + that[name] = function () { + return fn.apply(that, arguments); + }; + }; + + proxy('start'); + proxy('over'); + proxy('end'); +}; + + +DragEvent.prototype = { + + // 开始拖拽 + // onstart: function () {}, + start: function (event) { + $(document) + .bind('mousemove', this.over) + .bind('mouseup', this.end); + + this._sClientX = event.clientX; + this._sClientY = event.clientY; + this.onstart(event.clientX, event.clientY); + + return false; + }, + + // 正在拖拽 + // onover: function () {}, + over: function (event) { + this._mClientX = event.clientX; + this._mClientY = event.clientY; + this.onover( + event.clientX - this._sClientX, + event.clientY - this._sClientY + ); + + return false; + }, + + // 结束拖拽 + // onend: function () {}, + end: function (event) { + $(document) + .unbind('mousemove', this.over) + .unbind('mouseup', this.end); + + this.onend(event.clientX, event.clientY); + return false; + } + +}; + +var $window = $(window), + $document = $(document), + html = document.documentElement, + isIE6 = !('minWidth' in html.style), + isLosecapture = !isIE6 && 'onlosecapture' in html, + isSetCapture = 'setCapture' in html, + dragstart = function () { + return false + }; + +var dragInit = function (event) { + + var dragEvent = new DragEvent, + api = artDialog.focus, + dom = api.dom, + $wrap = dom.wrap, + $title = dom.title, + $main = dom.main, + wrap = $wrap[0], + title = $title[0], + main = $main[0], + wrapStyle = wrap.style, + mainStyle = main.style; + + + var isResize = event.target === dom.se[0] ? true : false; + var isFixed = wrap.style.position === 'fixed', + minX = isFixed ? 0 : $document.scrollLeft(), + minY = isFixed ? 0 : $document.scrollTop(), + maxX = $window.width() - wrap.offsetWidth + minX, + maxY = $window.height() - wrap.offsetHeight + minY; + + + var startWidth, startHeight, startLeft, startTop; + + + // 对话框准备拖动 + dragEvent.onstart = function (x, y) { + + if (isResize) { + startWidth = main.offsetWidth; + startHeight = main.offsetHeight; + } else { + startLeft = wrap.offsetLeft; + startTop = wrap.offsetTop; + }; + + $document.bind('dblclick', dragEvent.end) + .bind('dragstart', dragstart); + + if (isLosecapture) { + $title.bind('losecapture', dragEvent.end) + } else { + $window.bind('blur', dragEvent.end) + }; + + isSetCapture && title.setCapture(); + + $wrap.addClass('d-state-drag'); + api.focus(); + }; + + // 对话框拖动进行中 + dragEvent.onover = function (x, y) { + + if (isResize) { + var width = x + startWidth, + height = y + startHeight; + + wrapStyle.width = 'auto'; + mainStyle.width = Math.max(0, width) + 'px'; + wrapStyle.width = wrap.offsetWidth + 'px'; + + mainStyle.height = Math.max(0, height) + 'px'; + + } else { + var left = Math.max(minX, Math.min(maxX, x + startLeft)), + top = Math.max(minY, Math.min(maxY, y + startTop)); + + wrapStyle.left = left + 'px'; + wrapStyle.top = top + 'px'; + }; + + + }; + + // 对话框拖动结束 + dragEvent.onend = function (x, y) { + + $document.unbind('dblclick', dragEvent.end) + .unbind('dragstart', dragstart); + + if (isLosecapture) { + $title.unbind('losecapture', dragEvent.end); + } else { + $window.unbind('blur', dragEvent.end) + }; + + isSetCapture && title.releaseCapture(); + + $wrap.removeClass('d-state-drag'); + }; + + + dragEvent.start(event); + +}; + + +// 代理 mousedown 事件触发对话框拖动 +$(document).bind('mousedown', function (event) { + var api = artDialog.focus; + if (!api) return; + + var target = event.target, + config = api.config, + dom = api.dom; + + if (config.drag !== false && target === dom.title[0] + || config.resize !== false && target === dom.se[0]) { + dragInit(event); + + // 防止firefox与chrome滚屏 + return false; + }; +}); + + +}(this.art || this.jQuery)); + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/source/jquery.artDialog.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/source/jquery.artDialog.js new file mode 100644 index 00000000..f436c20e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/source/jquery.artDialog.js @@ -0,0 +1,970 @@ +/*! +* artDialog 5 +* Date: 2012-03-21 +* http://code.google.com/p/artdialog/ +* (c) 2009-2012 TangBin, http://www.planeArt.cn +* +* This is licensed under the GNU LGPL, version 2.1 or later. +* For details, see: http://creativecommons.org/licenses/LGPL/2.1/ +*/ + +;(function ($, window, undefined) { + +// artDialog ֻ֧�� xhtml 1.0 �������ϵ� DOCTYPE ���� +if (document.compatMode === 'BackCompat') { + throw new Error('artDialog: Document types require more than xhtml1.0'); +}; + +var _singleton, + _count = 0, + _expando = 'artDialog' + + new Date, + _isIE6 = window.VBArray && !window.XMLHttpRequest, + _isMobile = 'createTouch' in document && !('onmousemove' in document) + || /(iPhone|iPad|iPod)/i.test(navigator.userAgent), + _isFixed = !_isIE6 && !_isMobile; + + +var artDialog = function (config, ok, cancel) { + + config = config || {}; + + if (typeof config === 'string' || config.nodeType === 1) { + + config = {content: config, fixed: !_isMobile}; + }; + + + var api, defaults = artDialog.defaults; + var elem = config.follow = this.nodeType === 1 && this || config.follow; + + + // �ϲ�Ĭ������ + for (var i in defaults) { + if (config[i] === undefined) { + config[i] = defaults[i]; + }; + }; + + + config.id = elem && elem[_expando + 'follow'] || config.id || _expando + _count; + api = artDialog.list[config.id]; + + + + if (api) { + if (elem) { + api.follow(elem) + }; + api.zIndex().focus(); + return api; + }; + + + + // Ŀǰ�����ƶ��豸��fixed֧�ֲ��� + if (!_isFixed) { + config.fixed = false; + }; + + // !$.isArray(config.button) + if (!config.button || !config.button.push) { + config.button = []; + }; + + + // ȷ����ť + if (ok !== undefined) { + config.ok = ok; + }; + + if (config.ok) { + config.button.push({ + id: 'ok', + value: config.okValue, + callback: config.ok, + focus: true + }); + }; + + + // ȡ����ť + if (cancel !== undefined) { + config.cancel = cancel; + }; + + if (config.cancel) { + config.button.push({ + id: 'cancel', + value: config.cancelValue, + callback: config.cancel + }); + }; + + // ���� zIndex ȫ������ + artDialog.defaults.zIndex = config.zIndex; + + _count ++; + + return artDialog.list[config.id] = _singleton ? + _singleton.constructor(config) : new artDialog.fn.constructor(config); +}; + +artDialog.version = '5.0'; + +artDialog.fn = artDialog.prototype = { + + /** @inner */ + constructor: function (config) { + var dom; + + this.closed = false; + this.config = config; + this.dom = dom = this.dom || this._getDom(); + + config.skin && dom.wrap.addClass(config.skin); + + dom.wrap.css('position', config.fixed ? 'fixed' : 'absolute'); + dom.close[config.cancel === false ? 'hide' : 'show'](); + dom.content.css('padding', config.padding); + + this.button.apply(this, config.button); + + this.title(config.title) + .content(config.content) + .size(config.width, config.height) + .time(config.time); + + config.follow + ? this.follow(config.follow) + : this.position(); + + this.zIndex(); + config.lock && this.lock(); + + this._addEvent(); + this[config.visible ? 'visible' : 'hidden']().focus(); + + _singleton = null; + + config.initialize && config.initialize.call(this); + + return this; + }, + + + /** + * �������� + * @param {String, HTMLElement, Object} ���� (��ѡ) + */ + content: function (message) { + + var prev, next, parent, display, + that = this, + $content = this.dom.content, + content = $content[0]; + + + if (this._elemBack) { + this._elemBack(); + delete this._elemBack; + }; + + + if (typeof message === 'string') { + + $content.html(message); + } else + + if (message && message.nodeType === 1) { + + // �ô����Ԫ���ڶԻ���رպ���Է��ص�ԭ���ĵط� + display = message.style.display; + prev = message.previousSibling; + next = message.nextSibling; + parent = message.parentNode; + + this._elemBack = function () { + if (prev && prev.parentNode) { + prev.parentNode.insertBefore(message, prev.nextSibling); + } else if (next && next.parentNode) { + next.parentNode.insertBefore(message, next); + } else if (parent) { + parent.appendChild(message); + }; + message.style.display = display; + that._elemBack = null; + }; + + $content.html(''); + content.appendChild(message); + $(message).show(); + + }; + + return this.position(); + }, + + + /** + * ���ñ��� + * @param {String, Boolean} ��������. Ϊ false �����ر����� + */ + title: function (content) { + + var dom = this.dom, + outer = dom.outer, + $title = dom.title, + className = 'd-state-noTitle'; + + if (content === false) { + $title.hide().html(''); + outer.addClass(className); + } else { + $title.show().html(content); + outer.removeClass(className); + }; + + return this; + }, + + + /** @inner λ�þ��� */ + position: function () { + + var dom = this.dom, + wrap = dom.wrap[0], + $window = dom.window, + $document = dom.document, + fixed = this.config.fixed, + dl = fixed ? 0 : $document.scrollLeft(), + dt = fixed ? 0 : $document.scrollTop(), + ww = $window.width(), + wh = $window.height(), + ow = wrap.offsetWidth, + oh = wrap.offsetHeight, + left = (ww - ow) / 2 + dl, + top = top = (oh < 4 * wh / 7 ? wh * 0.382 - oh / 2 : (wh - oh) / 2) + dt, + style = wrap.style; + + style.left = Math.max(left, dl) + 'px'; + style.top = Math.max(top, dt) + 'px'; + + return this; + }, + + + /** + * �ߴ� + * @param {Number, String} ��� + * @param {Number, String} �߶� + */ + size: function (width, height) { + + var style = this.dom.main[0].style; + + if (typeof width === 'number') { + width = width + 'px'; + }; + + if (typeof height === 'number') { + height = height + 'px'; + }; + + style.width = width; + style.height = height; + + return this; + }, + + + /** + * ����Ԫ�� + * @param {HTMLElement} + */ + follow: function (elem) { + + var $elem = $(elem), + config = this.config; + + + // ����Ԫ�ز����� + if (!elem || !elem.offsetWidth && !elem.offsetHeight) { + + return this.position(this._left, this._top); + }; + + var fixed = config.fixed, + expando = _expando + 'follow', + dom = this.dom, + $window = dom.window, + $document = dom.document, + winWidth = $window.width(), + winHeight = $window.height(), + docLeft = $document.scrollLeft(), + docTop = $document.scrollTop(), + offset = $elem.offset(), + width = elem.offsetWidth, + height = elem.offsetHeight, + left = fixed ? offset.left - docLeft : offset.left, + top = fixed ? offset.top - docTop : offset.top, + wrap = this.dom.wrap[0], + style = wrap.style, + wrapWidth = wrap.offsetWidth, + wrapHeight = wrap.offsetHeight, + setLeft = left - (wrapWidth - width) / 2, + setTop = top + height, + dl = fixed ? 0 : docLeft, + dt = fixed ? 0 : docTop; + + + setLeft = setLeft < dl ? left : + (setLeft + wrapWidth > winWidth) && (left - wrapWidth > dl) + ? left - wrapWidth + width + : setLeft; + + + setTop = (setTop + wrapHeight > winHeight + dt) + && (top - wrapHeight > dt) + ? top - wrapHeight + : setTop; + + + style.left = setLeft + 'px'; + style.top = setTop + 'px'; + + + this._follow && this._follow.removeAttribute(expando); + this._follow = elem; + elem[expando] = config.id; + + return this; + }, + + + /** + * �Զ��尴ť + * @example + button({ + value: 'login', + callback: function () {}, + disabled: false, + focus: true + }, .., ..) + */ + button: function () { + + var dom = this.dom, + $buttons = dom.buttons, + elem = $buttons[0], + strongButton = 'd-state-highlight', + listeners = this._listeners = this._listeners || {}, + ags = [].slice.call(arguments); + + var i = 0, val, value, id, isNewButton, button; + + for (; i < ags.length; i ++) { + + val = ags[i]; + + value = val.value; + id = val.id || value; + isNewButton = !listeners[id]; + button = !isNewButton ? listeners[id].elem : document.createElement('input'); + + button.type = 'button'; + button.className = 'd-button'; + + if (!listeners[id]) { + listeners[id] = {}; + }; + + if (value) { + button.value = value; + }; + + if (val.width) { + button.style.width = val.width; + }; + + if (val.callback) { + listeners[id].callback = val.callback; + }; + + if (val.focus) { + this._focus && this._focus.removeClass(strongButton); + this._focus = $(button).addClass(strongButton); + this.focus(); + }; + + button[_expando + 'callback'] = id; + button.disabled = !!val.disabled; + + + if (isNewButton) { + listeners[id].elem = button; + elem.appendChild(button); + }; + }; + + $buttons[0].style.display = ags.length ? '' : 'none'; + + return this; + }, + + + /** ��ʾ�Ի��� */ + visible: function () { + //this.dom.wrap.show(); + this.dom.wrap.css('visibility', 'visible'); + this.dom.outer.addClass('d-state-visible'); + + if (this._isLock) { + this._lockMask.show(); + }; + + return this; + }, + + + /** ���ضԻ��� */ + hidden: function () { + //this.dom.wrap.hide(); + this.dom.wrap.css('visibility', 'hidden'); + this.dom.outer.removeClass('d-state-visible'); + + if (this._isLock) { + this._lockMask.hide(); + }; + + return this; + }, + + + /** �رնԻ��� */ + close: function () { + + if (this.closed) { + return this; + }; + + var dom = this.dom, + $wrap = dom.wrap, + list = artDialog.list, + beforeunload = this.config.beforeunload, + follow = this.config.follow; + + if (beforeunload && beforeunload.call(this) === false) { + return this; + }; + + + if (artDialog.focus === this) { + artDialog.focus = null; + }; + + + if (follow) { + follow.removeAttribute(_expando + 'follow'); + }; + + + if (this._elemBack) { + this._elemBack(); + }; + + + + this.time(); + this.unlock(); + this._removeEvent(); + delete list[this.config.id]; + + + if (_singleton) { + + $wrap.remove(); + + // ʹ�õ���ģʽ + } else { + + _singleton = this; + + dom.title.html(''); + dom.content.html(''); + dom.buttons.html(''); + + $wrap[0].className = $wrap[0].style.cssText = ''; + dom.outer[0].className = 'd-outer'; + + $wrap.css({ + left: 0, + top: 0, + position: _isFixed ? 'fixed' : 'absolute' + }); + + for (var i in this) { + if (this.hasOwnProperty(i) && i !== 'dom') { + delete this[i]; + }; + }; + + this.hidden(); + + }; + + this.closed = true; + return this; + }, + + + /** + * ��ʱ�ر� + * @param {Number} ��λ����, �޲�����ֹͣ��ʱ�� + */ + time: function (time) { + + var that = this, + timer = this._timer; + + timer && clearTimeout(timer); + + if (time) { + this._timer = setTimeout(function(){ + that._click('cancel'); + }, time); + }; + + + return this; + }, + + /** @inner ���ý��� */ + focus: function () { + + if (this.config.focus) { + //setTimeout(function () { + try { + var elem = this._focus && this._focus[0] || this.dom.close[0]; + elem && elem.focus(); + // IE�Բ��ɼ�Ԫ�����ý���ᱨ�� + } catch (e) {}; + //}, 0); + }; + + return this; + }, + + + /** �ö��Ի��� */ + zIndex: function () { + + var dom = this.dom, + top = artDialog.focus, + index = artDialog.defaults.zIndex ++; + + // ���õ��Ӹ߶� + dom.wrap.css('zIndex', index); + this._lockMask && this._lockMask.css('zIndex', index - 1); + + // ������߲����ʽ + top && top.dom.outer.removeClass('d-state-focus'); + artDialog.focus = this; + dom.outer.addClass('d-state-focus'); + + return this; + }, + + + /** �������� */ + lock: function () { + + if (this._isLock) { + return this; + }; + + var that = this, + config = this.config, + dom = this.dom, + div = document.createElement('div'), + $div = $(div), + index = artDialog.defaults.zIndex - 1; + + this.zIndex(); + dom.outer.addClass('d-state-lock'); + + $div.css({ + zIndex: index, + position: 'fixed', + left: 0, + top: 0, + width: '100%', + height: '100%', + overflow: 'hidden' + }).addClass('d-mask'); + + if (!_isFixed) { + $div.css({ + position: 'absolute', + width: $(window).width() + 'px', + height: $(document).height() + 'px' + }); + }; + + + $div.bind('click', function () { + that._reset(); + }).bind('dblclick', function () { + that._click('cancel'); + }); + + document.body.appendChild(div); + + this._lockMask = $div; + this._isLock = true; + + return this; + }, + + + /** �⿪���� */ + unlock: function () { + + if (!this._isLock) { + return this; + }; + + this._lockMask.unbind(); + this._lockMask.hide(); + this._lockMask.remove(); + + this.dom.outer.removeClass('d-state-lock'); + this._isLock = false; + + return this; + }, + + + // ��ȡԪ�� + _getDom: function () { + + var body = document.body; + + if (!body) { + throw new Error('artDialog: "documents.body" not ready'); + }; + + var wrap = document.createElement('div'); + + wrap.style.cssText = 'position:absolute;left:0;top:0'; + wrap.innerHTML = artDialog._templates; + body.insertBefore(wrap, body.firstChild); + + var name, + i = 0, + dom = {}, + els = wrap.getElementsByTagName('*'), + elsLen = els.length; + + for (; i < elsLen; i ++) { + name = els[i].className.split('d-')[1]; + if (name) { + dom[name] = $(els[i]); + }; + }; + + dom.window = $(window); + dom.document = $(document); + dom.wrap = $(wrap); + + return dom; + }, + + + // ��ť�ص��������� + _click: function (id) { + + var fn = this._listeners[id] && this._listeners[id].callback; + + return typeof fn !== 'function' || fn.call(this) !== false ? + this.close() : this; + }, + + + // ����λ�� + _reset: function () { + var elem = this.config.follow; + elem ? this.follow(elem) : this.position(); + }, + + + // �¼����� + _addEvent: function () { + + var that = this, + dom = this.dom; + + + // ������� + dom.wrap + .bind('click', function (event) { + + var target = event.target, callbackID; + + // IE BUG + if (target.disabled) { + return false; + }; + + if (target === dom.close[0]) { + that._click('cancel'); + return false; + } else { + callbackID = target[_expando + 'callback']; + callbackID && that._click(callbackID); + }; + + }) + .bind('mousedown', function () { + that.zIndex(); + }); + + }, + + + // ж���¼����� + _removeEvent: function () { + this.dom.wrap.unbind(); + } + +}; + +artDialog.fn.constructor.prototype = artDialog.fn; + + + +$.fn.dialog = $.fn.artDialog = function () { + var config = arguments; + this[this.live ? 'live' : 'bind']('click', function () { + artDialog.apply(this, config); + return false; + }); + return this; +}; + + + +/** ���ĶԻ���API */ +artDialog.focus = null; + + + +/** +* ���� ID ��ȡij�Ի��� API +* @param {String} �Ի��� ID +* @return {Object} �Ի��� API (ʵ��) +*/ +artDialog.get = function (id) { + return id === undefined + ? artDialog.list + : artDialog.list[id]; +}; + +artDialog.list = {}; + + + +// ȫ�ֿ�ݼ� +$(document).bind('keydown', function (event) { + var target = event.target, + nodeName = target.nodeName, + rinput = /^input|textarea$/i, + api = artDialog.focus, + keyCode = event.keyCode; + + if (!api || !api.config.esc || rinput.test(nodeName) && target.type !== 'button') { + return; + }; + + // ESC + keyCode === 27 && api._click('cancel'); +}); + + + +// ��������ڸı�����öԻ���λ�� +$(window).bind('resize', function () { + var dialogs = artDialog.list; + for (var id in dialogs) { + dialogs[id]._reset(); + }; +}); + + + +// XHTML ģ�� +// ʹ�� uglifyjs ѹ���ܹ�Ԥ�ȴ���"+"�źϲ��ַ��� +// @see http://marijnhaverbeke.nl/uglifyjs +artDialog._templates = +'
                                              ' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '
                                              ' ++ '
                                              ' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '' ++ '
                                              ' ++ '
                                              ' ++ '
                                              ' ++ '' ++ '\xd7' ++ '' ++ '
                                              ' ++ '
                                              ' ++ '
                                              ' ++ '
                                              ' ++ '
                                              ' ++ '
                                              ' ++'
                                              '; + + + +/** + * Ĭ������ + */ +artDialog.defaults = { + + // ��Ϣ���� + content: '
                                              loading..
                                              ', + + // ���� + title: 'message', + + // �Զ��尴ť + button: null, + + // ȷ����ť�ص����� + ok: null, + + // ȡ����ť�ص����� + cancel: null, + + // �Ի����ʼ����ִ�еĺ��� + initialize: null, + + // �Ի���ر�ǰִ�еĺ��� + beforeunload: null, + + // ȷ����ť�ı� + okValue: 'ok', + + // ȡ����ť�ı� + cancelValue: 'cancel', + + // ���ݿ�� + width: 'auto', + + // ���ݸ߶� + height: 'auto', + + // ������߽������� + padding: '20px 25px', + + // Ƥ����(��Ƥ������Ԥ���ӿ�) + skin: null, + + // �Զ��ر�ʱ�� + time: null, + + // �Ƿ�֧��Esc���ر� + esc: true, + + // �Ƿ�֧�ֶԻ���ť�Զ��۽� + focus: true, + + // ��ʼ�����Ƿ���ʾ�Ի��� + visible: true, + + // �öԻ������ijԪ�� + follow: null, + + // �Ƿ����� + lock: false, + + // �Ƿ�̶���λ + fixed: false, + + // �Ի�����Ӹ߶�ֵ(��Ҫ����ֵ���ܳ���������������) + zIndex: 1987 + +}; + +this.artDialog = $.dialog = $.artDialog = artDialog; +}(this.art || this.jQuery, this)); + + + + +/* ���¼�¼ + +1. follow ����֧�� String ���� +2. button ����ֻ֧�� Array ���� +3. button name ��Ա�ij� value +4. button ���� id ��Ա +5. okVal ��������Ϊ okValue, Ĭ��ֵ�� 'ȷ��' ��Ϊ 'ok' +6. cancelVal ��������Ϊ cancelValue, Ĭ��ֵ�� 'ȡ��' ��Ϊ 'cancel' +6. close ��������Ϊ beforeunload +7. init ��������Ϊ initialize +8. title ����Ĭ��ֵ�� '��Ϣ' ��Ϊ 'message' +9. time �����뷽��������λ�����Ϊ���� +10. hide ������������Ϊ hidden +11. �ڲ�ΪƤ�����Ӷ�̬��ʽ d-state-visible �� +12. ������������ʽ d-mask �� +13. background ������ȡ��, �� CSS �ļ����� +14. opacity ������ȡ��, �� CSS �ļ����� +15. ȡ���϶����ԣ����ɲ��֧�� +16. ȡ�� left �� top ���� +17. ȡ���� ie6 �ṩ fixed ֧�֣��Զ�ת��Ϊ absolute +18. ȡ���� ie6 �ṩ alpha png ֧�� +19. ȡ���� ie6 �ṩ select ��ǩ�ڸ�֧�� +20. ���� focus ���� +21. ȡ�� position ���� +22. ȡ���� ��֧�� +23. ȡ���� iframe ��֧�� +24. title ������֧�ֿղ��� +25. content ������֧�ֿղ��� +26. button �����IJ�����֧���������� +27. �ж� DOCTYPE, �� xhtml1.0 ���µ�ҳ�汨����� +28. �޸� IE8 ��̬��������ʱû�гſ��Ի���߶ȣ�����Ϊ ie8 ȡ�� .d-content { display:inline-block } +29. show �����뷽������Ϊ visible +30. �����ظ����� close �������ֵĴ��� + +*/ + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/test2.html b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/test2.html new file mode 100644 index 00000000..1b57ad75 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/artDialog/test2.html @@ -0,0 +1,38 @@ + + + + + + + +artDialog + + +无标题文档 + + + + + + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/bootstrap/js/bootstrap.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/bootstrap/js/bootstrap.js new file mode 100644 index 00000000..c298ee42 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/bootstrap/js/bootstrap.js @@ -0,0 +1,2276 @@ +/* =================================================== + * bootstrap-transition.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#transitions + * =================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) + * ======================================================= */ + + $(function () { + + $.support.transition = (function () { + + var transitionEnd = (function () { + + var el = document.createElement('bootstrap') + , transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } + , name + + for (name in transEndEventNames){ + if (el.style[name] !== undefined) { + return transEndEventNames[name] + } + } + + }()) + + return transitionEnd && { + end: transitionEnd + } + + })() + + }) + +}(window.jQuery);/* ========================================================== + * bootstrap-alert.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#alerts + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* ALERT CLASS DEFINITION + * ====================== */ + + var dismiss = '[data-dismiss="alert"]' + , Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + , selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = $(selector) + + e && e.preventDefault() + + $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) + + $parent.trigger(e = $.Event('close')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent + .trigger('closed') + .remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent.on($.support.transition.end, removeElement) : + removeElement() + } + + + /* ALERT PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('alert') + if (!data) $this.data('alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + /* ALERT NO CONFLICT + * ================= */ + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + /* ALERT DATA-API + * ============== */ + + $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) + +}(window.jQuery);/* ============================================================ + * bootstrap-button.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#buttons + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* BUTTON PUBLIC CLASS DEFINITION + * ============================== */ + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.button.defaults, options) + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + , $el = this.$element + , data = $el.data() + , val = $el.is('input') ? 'val' : 'html' + + state = state + 'Text' + data.resetText || $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d) + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.closest('[data-toggle="buttons-radio"]') + + $parent && $parent + .find('.active') + .removeClass('active') + + this.$element.toggleClass('active') + } + + + /* BUTTON PLUGIN DEFINITION + * ======================== */ + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('button') + , options = typeof option == 'object' && option + if (!data) $this.data('button', (data = new Button(this, options))) + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.defaults = { + loadingText: 'loading...' + } + + $.fn.button.Constructor = Button + + + /* BUTTON NO CONFLICT + * ================== */ + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + /* BUTTON DATA-API + * =============== */ + + $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + }) + +}(window.jQuery);/* ========================================================== + * bootstrap-carousel.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#carousel + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CAROUSEL CLASS DEFINITION + * ========================= */ + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.prototype = { + + cycle: function (e) { + if (!e) this.paused = false + if (this.interval) clearInterval(this.interval); + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + return this + } + + , getActiveIndex: function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + return this.$items.index(this.$active) + } + + , to: function (pos) { + var activeIndex = this.getActiveIndex() + , that = this + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) { + return this.$element.one('slid', function () { + that.to(pos) + }) + } + + if (activeIndex == pos) { + return this.pause().cycle() + } + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + , pause: function (e) { + if (!e) this.paused = true + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + clearInterval(this.interval) + this.interval = null + return this + } + + , next: function () { + if (this.sliding) return + return this.slide('next') + } + + , prev: function () { + if (this.sliding) return + return this.slide('prev') + } + + , slide: function (type, next) { + var $active = this.$element.find('.item.active') + , $next = next || $active[type]() + , isCycling = this.interval + , direction = type == 'next' ? 'left' : 'right' + , fallback = type == 'next' ? 'first' : 'last' + , that = this + , e + + this.sliding = true + + isCycling && this.pause() + + $next = $next.length ? $next : this.$element.find('.item')[fallback]() + + e = $.Event('slide', { + relatedTarget: $next[0] + , direction: direction + }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + this.$element.one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + } + + + /* CAROUSEL PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('carousel') + , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) + , action = typeof option == 'string' ? option : options.slide + if (!data) $this.data('carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.defaults = { + interval: 5000 + , pause: 'hover' + } + + $.fn.carousel.Constructor = Carousel + + + /* CAROUSEL NO CONFLICT + * ==================== */ + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + /* CAROUSEL DATA-API + * ================= */ + + $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + , options = $.extend({}, $target.data(), $this.data()) + , slideIndex + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('carousel').pause().to(slideIndex).cycle() + } + + e.preventDefault() + }) + +}(window.jQuery);/* ============================================================= + * bootstrap-collapse.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#collapse + * ============================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* COLLAPSE PUBLIC CLASS DEFINITION + * ================================ */ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.collapse.defaults, options) + + if (this.options.parent) { + this.$parent = $(this.options.parent) + } + + this.options.toggle && this.toggle() + } + + Collapse.prototype = { + + constructor: Collapse + + , dimension: function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + , show: function () { + var dimension + , scroll + , actives + , hasData + + if (this.transitioning || this.$element.hasClass('in')) return + + dimension = this.dimension() + scroll = $.camelCase(['scroll', dimension].join('-')) + actives = this.$parent && this.$parent.find('> .accordion-group > .in') + + if (actives && actives.length) { + hasData = actives.data('collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('collapse', null) + } + + this.$element[dimension](0) + this.transition('addClass', $.Event('show'), 'shown') + $.support.transition && this.$element[dimension](this.$element[0][scroll]) + } + + , hide: function () { + var dimension + if (this.transitioning || !this.$element.hasClass('in')) return + dimension = this.dimension() + this.reset(this.$element[dimension]()) + this.transition('removeClass', $.Event('hide'), 'hidden') + this.$element[dimension](0) + } + + , reset: function (size) { + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + [dimension](size || 'auto') + [0].offsetWidth + + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') + + return this + } + + , transition: function (method, startEvent, completeEvent) { + var that = this + , complete = function () { + if (startEvent.type == 'show') that.reset() + that.transitioning = 0 + that.$element.trigger(completeEvent) + } + + this.$element.trigger(startEvent) + + if (startEvent.isDefaultPrevented()) return + + this.transitioning = 1 + + this.$element[method]('in') + + $.support.transition && this.$element.hasClass('collapse') ? + this.$element.one($.support.transition.end, complete) : + complete() + } + + , toggle: function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + } + + + /* COLLAPSE PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('collapse') + , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) + if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.defaults = { + toggle: true + } + + $.fn.collapse.Constructor = Collapse + + + /* COLLAPSE NO CONFLICT + * ==================== */ + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + /* COLLAPSE DATA-API + * ================= */ + + $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + , target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + , option = $(target).data('collapse') ? 'toggle' : $this.data() + $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + $(target).collapse(option) + }) + +}(window.jQuery);/* ============================================================ + * bootstrap-dropdown.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#dropdowns + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* DROPDOWN CLASS DEFINITION + * ========================= */ + + var toggle = '[data-toggle=dropdown]' + , Dropdown = function (element) { + var $el = $(element).on('click.dropdown.data-api', this.toggle) + $('html').on('click.dropdown.data-api', function () { + $el.parent().removeClass('open') + }) + } + + Dropdown.prototype = { + + constructor: Dropdown + + , toggle: function (e) { + var $this = $(this) + , $parent + , isActive + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + $parent.toggleClass('open') + } + + $this.focus() + + return false + } + + , keydown: function (e) { + var $this + , $items + , $active + , $parent + , isActive + , index + + if (!/(38|40|27)/.test(e.keyCode)) return + + $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + if (!isActive || (isActive && e.keyCode == 27)) { + if (e.which == 27) $parent.find(toggle).focus() + return $this.click() + } + + $items = $('[role=menu] li:not(.divider):visible a', $parent) + + if (!$items.length) return + + index = $items.index($items.filter(':focus')) + + if (e.keyCode == 38 && index > 0) index-- // up + if (e.keyCode == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items + .eq(index) + .focus() + } + + } + + function clearMenus() { + $(toggle).each(function () { + getParent($(this)).removeClass('open') + }) + } + + function getParent($this) { + var selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = selector && $(selector) + + if (!$parent || !$parent.length) $parent = $this.parent() + + return $parent + } + + + /* DROPDOWN PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.dropdown + + $.fn.dropdown = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('dropdown') + if (!data) $this.data('dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.dropdown.Constructor = Dropdown + + + /* DROPDOWN NO CONFLICT + * ==================== */ + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + /* APPLY TO STANDARD DROPDOWN ELEMENTS + * =================================== */ + + $(document) + .on('click.dropdown.data-api', clearMenus) + .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.dropdown-menu', function (e) { e.stopPropagation() }) + .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) + .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) + +}(window.jQuery); +/* ========================================================= + * bootstrap-modal.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#modals + * ========================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* MODAL CLASS DEFINITION + * ====================== */ + + var Modal = function (element, options) { + this.options = options + this.$element = $(element) + .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) + this.options.remote && this.$element.find('.modal-body').load(this.options.remote) + } + + Modal.prototype = { + + constructor: Modal + + , toggle: function () { + return this[!this.isShown ? 'show' : 'hide']() + } + + , show: function () { + var that = this + , e = $.Event('show') + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.escape() + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(document.body) //don't move modals dom position + } + + that.$element.show() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element + .addClass('in') + .attr('aria-hidden', false) + + that.enforceFocus() + + transition ? + that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : + that.$element.focus().trigger('shown') + + }) + } + + , hide: function (e) { + e && e.preventDefault() + + var that = this + + e = $.Event('hide') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + + $(document).off('focusin.modal') + + this.$element + .removeClass('in') + .attr('aria-hidden', true) + + $.support.transition && this.$element.hasClass('fade') ? + this.hideWithTransition() : + this.hideModal() + } + + , enforceFocus: function () { + var that = this + $(document).on('focusin.modal', function (e) { + if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { + that.$element.focus() + } + }) + } + + , escape: function () { + var that = this + if (this.isShown && this.options.keyboard) { + this.$element.on('keyup.dismiss.modal', function ( e ) { + e.which == 27 && that.hide() + }) + } else if (!this.isShown) { + this.$element.off('keyup.dismiss.modal') + } + } + + , hideWithTransition: function () { + var that = this + , timeout = setTimeout(function () { + that.$element.off($.support.transition.end) + that.hideModal() + }, 500) + + this.$element.one($.support.transition.end, function () { + clearTimeout(timeout) + that.hideModal() + }) + } + + , hideModal: function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.removeBackdrop() + that.$element.trigger('hidden') + }) + } + + , removeBackdrop: function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + , backdrop: function (callback) { + var that = this + , animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $('"+(i[0]>0&&G==i[1]-1?'
                                              ':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'':"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"), +l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
                                              ',o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()): +g;for(a.yearshtml+='";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="
                                              ";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c== +"Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear"); +if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a); +c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a, +"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker= +function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker, +[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.14";window["DP_jQuery_"+A]=d})(jQuery); +;/* + * jQuery UI Progressbar 1.8.14 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("
                                              ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); +this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100* +this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.14"})})(jQuery); +;/* + * jQuery UI Effects 1.8.14 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/ + */ +jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], +16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle, +a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d= +a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor", +"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0, +0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211, +211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b, +d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})}; +f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this, +[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.14",save:function(c,a){for(var b=0;b
                                              ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}); +c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c, +a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments); +a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%", +"pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d* +((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/= +e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/= +e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h
                                              ").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+ +e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); +;/* + * jQuery UI Effects Fade 1.8.14 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fade + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Fold 1.8.14 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fold + * + * Depends: + * jquery.effects.core.js + */ +(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1], +10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery); +;/* + * jQuery UI Effects Highlight 1.8.14 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&& +this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Pulsate 1.8.14 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Pulsate + * + * Depends: + * jquery.effects.core.js + */ +(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments); +b.dequeue()})})}})(jQuery); +; \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/bpaportlet/script/jquery.portlet.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/bpaportlet/script/jquery.portlet.js new file mode 100644 index 00000000..a560fc77 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/bpaportlet/script/jquery.portlet.js @@ -0,0 +1,489 @@ +/* + *1.1.3 + */ +var hoverObject=null; +var hoverEvent=null; +(function($) { + $.widget("ui.portlet", { + options: { + columns: {}, + sortable: true, + singleView: true, + removeItem: null + }, + + /** + * create portlet widget + */ + _create: function() { + this.element.addClass("ui-portlet"); + var _this = this; + var _ele = _this.element; + var o = _this.options; + + $.each(o.columns, function(ci, c) { + + var $column = $('
                                              ', { + width: c.width + }).addClass('ui-portlet-column').appendTo(_ele); + + $.each(c.portlets, function(pi, p) { + + var item = $('
                                              ').addClass('ui-portlet-item ui-widget ui-widget-content ui-helper-clearfix ui-corner-all').data('option', p).appendTo($column); + if(p.attrs) { + item.attr(p.attrs); + } + + // title + var title = $('
                                              ', { + 'class': 'ui-portlet-header ui-widget-header ui-corner-all', + //'title':双击放大, + //'alt':双击放大, + html: function() { + if($.isFunction(p.title)) { + return p.title; + } + return "" + p.title; + } + }).appendTo(item); + + // add icon for title + if(p.icon) { + title.prepend(""); + } + + // event element + if(parent.isManager=="true"){ + title.prepend(""); + title.prepend(""); + //title.prepend(""); + title.prepend(""); + } + // content + var ct = $('
                                              ', { + 'class': 'ui-portlet-content' + }).appendTo(item); + + // set content style + if(p.content.style) { + $(ct).css(p.content.style); + } + + // set attrs + if(p.content.attrs) { + $.each(p.content.attrs, function(k, v) { + var attr = ct.attr(k); + if(attr) { + if(k == 'style' && v.substr(v.length - 1) != ';') { + attr += ';'; + } + if(k == 'class') { + attr += ' '; + } + attr += v; + } + ct.attr(k, attr); + }); + } + + // load content + _this._content.call(_ele, item, p, function(data) { + // load scripts + _this._loadScripts(p.scripts); + }); + }); + }); + + // init events + _this._initEvents(); + + // bind single view + if (o.singleView === true) { + _this._regSingleView(); + } + + // enable/disable sortable + _this._sortable(o.sortable); + }, + + /** + * set option for plugin + * @param {[type]} key key + * @param {[type]} value value + */ + _setOption: function(key, value) { + // static options + if(this.options[key]) { + this.options[key] = value; + } + + // need handle speical + switch(key) { + case "sortable": + this._sortable(value); + break; + } + }, + + /** + * single view + */ + _regSingleView: function() { + var _ele = this.element; + $(_ele).find('.ui-portlet-header').dblclick(function() { + return;//禁止双击title放大 + var $item = $(this).parents('.ui-portlet-item'); + var p = $item.data('option'); + + // recovery normal model + if($item.hasClass('ui-portlet-single-view')) { + $(_ele).find('.ui-portlet-item').show(); + $item.removeClass('ui-portlet-single-view').css({ + width: $item.data('width'), + height: $item.data('height') + }).css({ + position: 'static' + }).removeData('width').removeData('height'); + + // callback + if(p.singleView) { + if($.isFunction(p.singleView.recovery)) { + p.singleView.recovery.call($item, p); + } + } + } else { + //只要设置了宽度就会影响拖动后自动改变宽度的效果 + // enable single view + var t=$item.get(0).offsetTop; + $(_ele).find('.ui-portlet-item').hide(); + // move left:0 top:0, set width use body's width + $item.show().addClass('ui-portlet-single-view').data({ + width: $item.width(), + height: $item.height() + }).css({ + position: 'absolute', + left: 0, + top: t + }); + + var wh = {}; + if(p.singleView) { + // use custom width and height + if(p.singleView.width) { + if($.isFunction(p.singleView.width)) { + wh.width = p.singleView.width.call($item, p); + } else { + wh.width = p.singleView.width; + } + } + if(p.singleView.height) { + if($.isFunction(p.singleView.height)) { + wh.height = p.singleView.height.call($item, p); + } else { + wh.height = p.singleView.height; + } + } + + } else { + // use default width + wh.width = $(_ele).width() + 14; + } + + $item.css({ + width: wh.width, + height: wh.height + }); + + // callback + if(p.singleView && $.isFunction(p.singleView.enable)) { + p.singleView.enable.call($item, p); + } + } + reloadHoverWindow(); + }); + }, + + /** + * load java scripts + * @param {[string]} scripts [description] + */ + _loadScripts: function(scripts) { + if(scripts) { + $.each(scripts, function() { + var head = $('head').remove('#loadScript'); + $("").attr({ + src: this, + type: 'text/javascript', + id: 'loadScript' + }).appendTo(head); + }); + } + }, + + /** + * enable/disable sortable + * @param {[type]} value [true|false] + */ + _sortable: function(value) { + if(parent.isManager=="true"){ + var st = $(".ui-portlet-column", this.element).sortable({ + connectWith: ".ui-portlet-column",stop: saveLayout + }).disableSelection(); + }else{ + value=false; + } + if(value === true) { + $(this.element).find('.ui-portlet-header').css('cursor', 'move'); + st.sortable('enable'); + $(".ui-portlet-content").draggable({ + start: function() { + return false; + } + }); + } else { + $(this.element).find('.ui-portlet-header').css('cursor', 'default'); + //st.sortable('disable'); + } + }, + + /** + * events and handlers + * @return {[type]} [description] + */ + _initEvents: function() { + var _this = this; + // toggle contents + var toggle = $(".ui-portlet-toggle", this.element).click(function(event) { + $(this).toggleClass("ui-icon-minusthick").toggleClass("ui-icon-plusthick"); + $(this).parents(".ui-portlet-item:first").find(".ui-portlet-content").slideToggle(); + }).dblclick(function(event) { + event.stopPropagation(); + }); + + var edit = $(".ui-portlet-pencil", this.element).click(function(event) { + parent.openPortletContentManager($(this).attr("pid"),修改窗口小部件); + }).dblclick(function(event) { + event.stopPropagation(); + }); + + var refresh = $(".ui-portlet-refresh", this.element).click(function(event) { + _this.refresh.call(_this, event); + + }).dblclick(function(event) { + event.stopPropagation(); + }); + + var close = $(".ui-portlet-close", this.element).click(function(event) { + if(confirm(温馨提示确认删除此窗口小部件)){ + $.post("./w", { cmd:'COE_TEAM_BPA_PORTLET_CONTENT_SHOW_WINDOW_DELELTE',sid:parent.sid,pwuuid:$(this).attr("pid")},deletePWHD, "text"); + _this._destoryItem.call(_this, event); + }else{ + return; + } + }).dblclick(function(event) { + event.stopPropagation(); + }); + $(".ui-portlet-header").hover(function(event){ + hoverObject=_this; + hoverEvent=event; + }) + + + this._hoverable(toggle.parent()); + this._hoverable(refresh.parent()); + startJSHeight(); + }, + + /** + * hoverable + */ + _hoverable: function(element) { + $(element).hover(function() { + $(this).addClass('ui-state-hover'); + }, function() { + $(this).removeClass('ui-state-hover'); + }); + }, + + /** + * destory single portlet + */ + _destoryItem: function(event) { + var o = this.options; + var item = $(event.target).parents('.ui-portlet-item'); + item.remove(); + if($.isFunction(o.removeItem)) { + o.removeItem(); + } + }, + + /** + * refresh contents + */ + refresh: function(event) { + var o = this.options; + var portlet = $(event.target).parents('.ui-portlet'); + var item = $(event.target).parents('.ui-portlet-item'); + var pio = item.data('option'); + if(pio && pio.content &&pio.content.url){ + pio.content.url = pio.content.url.slice(0,pio.content.url.indexOf('&tmp'))+'&tmp='+Math.random(10); + } + var ct = item.find('.ui-portlet-content'); + var pt = item.parents('.ui-portlet'); + // callback + if($.isFunction(pio.beforeRefresh)) { + pio.beforeRefresh.call(pt, pio); + } + // set contents + this._content.call(portlet, item, pio, function(data) { + // callback + if($.isFunction(pio.afterRefresh)) { + pio.afterRefresh.call(pt, data, pio); + } + }); + + // load scripts + this._loadScripts(pio.scripts); + }, + + /** + * get content from multi styles + * @param {[type]} item [.ui-portlet-item] + * @param {[type]} pio [portlet configs] + * @param {[type]} cl [callback after load] + */ + _content: function(item, pio, cl) { + var o = this.options; + var that = this; + var type = pio.content.type; + var content = null; + var ct = item.find('.ui-portlet-content'); + + // before show callback + if($.isFunction(pio.content.beforeShow)) { + pio.content.beforeShow.call(this, pio.content.text); + } + + if(type == 'text') { + content = pio.content.text; + + // get content from function + if($.isFunction(content)) { + content = content(that, item, pio); + } + + if($.isFunction(cl)) { + cl.call(that, content); + } + ct.html(content); + _callAfterShow(pio.content.text); + } else if(type == 'ajax') { + var dataType = pio.content.dataType || 'html'; + $(ct).html("


                                              loading...

                                              "); + $.ajax({ + url: pio.content.url, + dataType: dataType, + beforeSend: function() { + $(ct).html('Loading...'); + }, + success: function(data, textStatus, jqXHR) { + if(dataType == 'html') { + content = data; + $(ct).html(data); + } else if(dataType == 'json') { + if($.isFunction(pio.content.formatter)) { + content = pio.content.formatter(o, pio, data); + $(ct).html(content); + } + } + _callAfterShow(content); + if($.isFunction(cl)) { + cl.call(that, data); + } + }, + error: function(jqXHR, textStatus, errorThrown) { + var content = "Load Error..."; + $(ct).html(content); + if ($.isFunction(pio.content.error)) { + pio.content.error.call(ct, jqXHR, textStatus, errorThrown); + } + } + }); + } + + /** + * after show callback + */ + + function _callAfterShow(content) { + if($.isFunction(pio.content.afterShow)) { + pio.content.afterShow.call(that, content); + } + } + + }, + + /** + * destory portlet + */ + _destroy: function() { + this.element.removeClass("ui-portlet").text(""); + + // call the base destroy function + $.Widget.prototype.destroy.call(this); + return this; + } + }); + +})(jQuery); +function deletePWHD(msg){ +} +function saveLayout(event,ui){ + reloadHoverWindow(); + startJSHeight(); + var orderString = ""; + $.each($(".ui-portlet-column"), function(m) { + orderString+="#"+m+":"; + $.each($(this).children(), function(d) { + orderString += $(this).attr('pid') + "@"; + }) + }) + + $.post("./w", {cmd:'COE_TEAM_BPA_PORTLET_CONTENT_SHOW_WINDOW_ORDER_SAVE',sid:parent.sid,portletUUID:portletUUID,projectUUID:projectUUID,orderString:orderString},saveLayoutHD, "text"); + +} +function reloadHoverWindow(){ + hoverObject.refresh.call(hoverObject, hoverEvent); +} +function saveLayoutHD(msg){} +var setCount=0; +var ptimer; +function reinitIframe(){ + try{ + var height=document.documentElement.scrollHeight; + + if(parent.parentHeight50){ + // clearTimeout(ptimer); + //} + }else{ + if(height>50){ + parent.document.getElementById("mainIframe").height =height+"px"; + parent.document.getElementById("loadMainIframe").style.display='none'; + } + } + }catch(e){ + + } +} +function startJSHeight(){ + setCount=0; + var count=0; + count=$(".ui-portlet-close").length; + if(count<=0){ + parent.document.getElementById("loadMainIframe").style.display='none'; + } + ptimer=window.setInterval("reinitIframe()", 100); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.commons.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.commons.js new file mode 100644 index 00000000..2b406c1b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.commons.js @@ -0,0 +1,63 @@ + +//修改显示样式,tile或list +function changeShowType(type) { + var showType = "tile"; + if (type == undefined || type == "") { + if ($.cookie("coe_showtype") != undefined) { + showType = $.cookie("coe_showtype"); + } else { + $.cookie("coe_showtype", "tile"); + } + } else { + showType = type; + $.cookie("coe_showtype", type); + } + $("#show_style_icon .span_icon.current").removeClass("current"); + if (showType == "tile") { + $("#show_style_icon .span_icon[icontype=tile]").addClass("current"); + $(".layout_tile").show(); + $(".layout_list").hide(); + } else { + $("#show_style_icon .span_icon[icontype=list]").addClass("current"); + $(".layout_tile").hide(); + $(".layout_list").show(); + } +} + +function json2String(obj) { + var THIS = this; + switch (typeof(obj)) { + case 'string': + return '"' + obj.replace(/(["\\])/g, '\\$1') + '"'; + case 'array': + return '[' + obj.map(THIS.json2String).join(',') + ']'; + case 'object': + if (obj instanceof Array || Object.prototype.toString.call(obj) === '[object Array]') { + var strArr = []; + var len = obj.length; + for (var i = 0; i < len; i++) { + strArr.push(THIS.json2String(obj[i])); + } + return '[' + strArr.join(',') + ']'; + } else if (obj == null) { + return 'null'; + + } else { + var string = []; + for (var property in obj) string.push(THIS.json2String(property) + ':' + THIS.json2String(obj[property])); + return '{' + string.join(',') + '}'; + } + case 'number': + return obj; + case 'boolean': + return obj; + case false: + return obj; + case 'function': + return obj.toString(); + } +} + +function string2JSON(obj){ + return eval('(' + obj + ')'); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.console.params.button.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.console.params.button.js new file mode 100644 index 00000000..7c43b1e8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.console.params.button.js @@ -0,0 +1,109 @@ +jQuery(function(){ + + init(); +}); + +function init(){ + $("#actionType").unbind("change").bind("change",function(){ + if($(this).val()==2){ + $("#targetTr").hide(); + } else { + $("#targetTr").show(); + } + }); +} + +function consoleButtonExit(){ + parent.$.fancybox.close(); +} + +function editConsoleButtonExit(obj){ + var menuTitle = $("#menuTitle").val(); + if(!checkValue(menuTitle,"名称不能包含|'\"。、,+*/%^=\\!&:;~`#<>$等字符")){ + $("#menuTitle").val(""); + return false; + } + var menuTip = $("#menuTip").val(); + var actionType = $("#actionType").val(); + var target = actionType == 2 ? "" : $("#target").val(); + var actionValue = $("#actionValue").val(); + var menuIcon = $("#menuIcon").val(); + var navSliderUUID = $("#navSliderUUID").val(); + var buttonUUID = $("#buttonUUID").val(); + if(actionValue==''){ + window.top.$.simpleAlert(温馨提示请求值不能为空); + return false; + } + var data = { + "menuTitle":menuTitle, + "menuTip":menuTip, + "actionType":actionType, + "target":target, + "actionValue":actionValue, + "menuIcon":menuIcon, + "buttonUUID":buttonUUID, + "navSliderUUID":navSliderUUID + } + if(checkEditButton()){ + parent.parent.parent.sendRequest("COE_CONSOLE_PARAMS_BUTTON_EDIT",data,"",function(msg){ + if(msg.length > 0 ){ + var newObj = $(msg); + //现有记录 + var bUUID = newObj.find("input").val(); + //已有记录 + var menu = $(parent.coeButtonCurrentObj).parents(".coe_nav_slider_menu"); + + var oldObj = menu.find("input[value="+bUUID+"]"); + + if(oldObj.size() > 0){ + var tr = oldObj.parents("tr"); + tr.before(msg); + tr.remove(); + } else { + menu.find("table").append(msg); + } + consoleButtonExit(); + } + }); + } +} + +function checkEditButton(){ + return true; +} +function checkValue(str, info, isNumber, f) { + var flag=false; + if(f){ + flag=f; + } + if (isNumber) { + if (isNaN(str)) { + window.top.$.simpleAlert(不是一个数值); + return false; + } + } + if(f && f.name == "activationCondition"){ + var valid= /[\|\'\"\。\、\,\+\*\/\^\=\\\!\&\:\;\~\`\#\<\>\$]+/; + if(valid.test(str)){ + alertInfo(info); + return false; + } + }else if(flag){ + var valid= /[\|\'\"\。\、\,\*\/\^\=\\\!\&\:\;\~\`\#\<\>\$]+/; + if(valid.test(str)){ + alertInfo(info); + return false; + } + } + else{ + if(checkSymbols(str)){ + alertInfo(info); + return false; + } + } + return true; +} + +function alertInfo(info){ + window.top.$.simpleAlert(info); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.console.systemname.create.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.console.systemname.create.js new file mode 100644 index 00000000..a73d8f9b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.console.systemname.create.js @@ -0,0 +1,69 @@ +//关闭dialog +function closeDialog(){ + window.top.closeAwsDialog(); +} + +function saveSystemName(){ + jQuery("#saveSystemNameBtn").attr("disabled","disabled"); + var sysName=jQuery("#systemName").val(); + var isDefault=jQuery("#isDefault").val(); + var uuid=jQuery("#uuid").val(); + if(!checkValue(sysName,"系统名称不能包含|'\"。、,+*/%^=\\!&:;~`#<>$等字符")){ + return false; + } + $.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent($('#sid').val()) + "&cmd=COE_CONSOLE_SYSTEMNAME_SAVE", + data : "uuid=" + uuid + "&systemName=" +sysName+"&isDefault="+isDefault, + success : function(msg) { + if(msg=="1"){ + reloadSysGrid(); + closeDialog(); + }else{ + jQuery("#saveSystemNameBtn").removeAttr("disabled"); + window.top.$.simpleAlert(添加失败请查看错误日志); + } + } + }); +} + +//刷新grid +function reloadSysGrid(){ + var hr=parent.document.querySelector(".appviewport2-right-content").contentWindow.document.querySelector(".page-center-main-iframe").contentWindow.location; + parent.document.querySelector(".appviewport2-right-content").contentWindow.document.querySelector(".page-center-main-iframe").contentWindow.location=hr; +} +function checkValue(str, info, isNumber, f) { + var flag=false; + if(f){ + flag=f; + } + if (isNumber) { + if (isNaN(str)) { + window.top.$.simpleAlert(不是一个数值); + return false; + } + } + if(f && f.name == "activationCondition"){ + var valid= /[\|\'\"\。\、\,\+\*\/\^\=\\\!\&\:\;\~\`\#\<\>\$]+/; + if(valid.test(str)){ + alertInfo(info); + return false; + } + }else if(flag){ + var valid= /[\|\'\"\。\、\,\*\/\^\=\\\!\&\:\;\~\`\#\<\>\$]+/; + if(valid.test(str)){ + alertInfo(info); + return false; + } + }else{ + if(checkSymbols(str)){ + alertInfo(info); + return false; + } + } + return true; +} + +function alertInfo(info){ + window.top.$.simpleAlert(info); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.console.systemname.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.console.systemname.js new file mode 100644 index 00000000..0fb2f3c0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.console.systemname.js @@ -0,0 +1,48 @@ +$(function(){ + if(window.top.isIpad()){ + $('#addbn').bind('mousedown', function() { + openAddSystemName(); + }); + }else{ + $('#addbn').bind('click', function() { + openAddSystemName(); + }); + } +}); + +//打开添加|修改 系统名称dialog +function openAddSystemName(id){ + if(id==undefined){ + id=""; + } + //var url="./w?sid="+encodeURIComponent($('#sid').val())+"&cmd=COE_CONSOLE_SYSTEMNAME_CREATE&uuid="+id; + var title=添加系统名称; + //parent.parent.asyncbox.open({id:'showOpenSystemName',url : url,width : 450,height : 130,title:title,modal:true}); + window.top.openBox("COE_CONSOLE_SYSTEMNAME_CREATE","&uuid="+id,title,450,130); +} + +//删除记录 +function delSystemName(id){ + if(confirm(是否确认删除该系统名称)){ + $.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent($('#sid').val()) + "&cmd=COE_CONSOLE_SYSTEMNAME_DEL", + data : "uuid=" + id, + success : function(msg) { + if(msg=="1"){ + window.top.$.simpleAlert(删除成功); + reloadGrid(); + closeDialog(); + }else{ + window.top.$.simpleAlert(删除失败请查看错误日志); + } + } + }); + } +} +//刷新grid +function reloadGrid(){ + var obj=parent.jQuery("#sysnameli").get(0); + parent.openSysNameIframe(obj,'COE_CONSOLE_PARAMS_SYSTEMNAME','d2'); +} + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.cookie.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.cookie.js new file mode 100644 index 00000000..f997d4d9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.cookie.js @@ -0,0 +1,19 @@ + function getCookie (cookieName) { + if(document.cookie!=''){ + var cookieNames = document.cookie.split(';'); + for(i=0;i-1){ + return unescape(cookieNames[i].split('=')[1]); + } + } + } +} +/** +设置Cookie +*/ +function setCookie (cookieName, cookieValue, expires, path, domain, secure) { +var Days = 30; +var exp = new Date(); +exp.setTime(exp.getTime() + Days*24*60*60*1000); +document.cookie = cookieName + "="+ escape (cookieValue) + ";expires=" + exp.toGMTString() + ('https:' == document.location.protocol ? ";secure" : ""); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.enter.performance.board.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.enter.performance.board.js new file mode 100644 index 00000000..3bd06aa9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.enter.performance.board.js @@ -0,0 +1,9 @@ +!function($){ + if(typeof($)=="undefined"){ + return; + } + $("div.performanceboard").on("click",function(){ + var url='./w?sid='+encodeURI(jQuery('input[name=sid]').val())+'&cmd=COE_TEAM_BPA_PORTLET_CONTENT_ALL'+"&portletUUID="+"&projectUUID="; + window.open(url,'fullscreen'); + }) +}(window.jQuery) \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.excel.export.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.excel.export.js new file mode 100644 index 00000000..077c2a9a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.excel.export.js @@ -0,0 +1,42 @@ +/** + * 适用于普通table内容导出excel(只能导出文本),导出的文件存于%dc%/%appId%/tmp下 + * 暂不支持分页 + */ + +var ExcelModel = { + tableId : "", + appId: "", + executeExport: function(options){ + tableId = options.tableId; + appId = options.appId; + + var titles = []; + var content = []; + $("#" + tableId + " th").each(function(){ + titles.push($(this).text()); + }); + $("#" + tableId + " tbody tr").each(function(i){ + var trArr = []; + $(this).find("td").each(function(){ + trArr.push($(this).text()); + }); + content.push(trArr); + }) + var param = { + titles: JSON.stringify(titles), + content: JSON.stringify(content), + appId: appId + } + awsui.ajax.request({ + url : "./jd?sid=" + $("#sid").val() + "&cmd=com.actionsoft.apps.coe.pal_table_excel_export", + method : "POST", + data : param, + ok : function(r) { + var url = r.data.url; + window.location.href = url; + }, + err:function(r){ + } + }); + } +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.header.notification.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.header.notification.js new file mode 100644 index 00000000..3932a6f4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.header.notification.js @@ -0,0 +1,323 @@ +// 通知提醒 +var timeout_loadMsgAmount; +var maxShowAmount = 5; // 最大显示记录数 +var unReadMsgAmount = 0; // 未读记录数 +var unReadMsgList = new Array(); // 未读通知消息集合 + +// 初始化通知中心 +function initNotification() { + if (isNoticeActive) { + // 通知中心 + $('#metroNotificationCenter,#metroNotificationCenterTips').click(function(e) { + clearTimeout(timeout_loadMsgAmount); + loadUnReadMsgAmount(); // 加载未读 + showFunctionWindow("notificationCenter", "通知中心", "./w?sid=" + sid + "&cmd=com.actionsoft.apps.notification_center"); + if ($('#notificationMessageOperate').next().css('display') != 'none') { + $('#notificationMessageOperate').click(); + } + }); + // 展开/隐藏消息通知面板 + $('#notificationMessageOperate').click(function(e) { + var _self = $(this); + if (_self.next().css('display') == 'none') { + showNotificationMessage(); // 展开显示通知消息 + } else { + // 收缩 + _self.next().stop().slideUp('slow', function(e) { + _self.addClass('top').attr('title', '显示'); + _self.children('img').attr('src', '../apps/com.actionsoft.apps.coe.pal/img/icon/logo-notification-untitled.png'); + }); + } + }); + loadUnReadMsgAmount(); // 定时加载未读通知消息记录数 + } else { + // 隐藏消息通知图标(左侧的图标和消息数,右下角的铃铛) + $('#metroNotificationCenter,#metroNotificationCenterTips,#notificationMessageContainer').hide(); + } +} + +function loadUnReadMsgAmount() { + $.post('./jd?sid='+sid+'&cmd=com.actionsoft.apps.notification_load_unread_msg', {}, function(responseObject) { + if (responseObject['result'] == 'ok') { + $('#notificationMessageOperate').attr('title', '隐藏'); + var container = $('#notificationMessageListContainer'); + unReadMsgList = responseObject['data']['list']; + + var amount = responseObject['data']['amount']; + // 如果新加载的记录数为0,则清空未读通知列表 + if (amount == 0) { + container.children().stop().slideUp('slow', function(e) { + $(this).remove(); + }); + } + // 加载之前无通知消息,新加载后有新的通知消息,则渲染通知消息 + else if (unReadMsgAmount == 0) { + reRenderUnReadMsgList(container); // 重新渲染未读通知列表 + unReadMsgAmount = amount; + showNotificationMessage(); // 展开显示通知消息 + notificationArrivalSoundTips(); // 消息到达声音提示 + } + // 否则,渲染最新的N条未读通知消息 + else { + var len = getShowAmount(); // 获取可以显示的未读通知数 + // 1. 排除不是最新的未读通知:如果页面上未读通知列表中的记录未在最新加载的N跳记录中,则移除; + for (var i=0; i maxShowAmount ? maxShowAmount : len; +} +// 设置未读通知记录数 +function settingUnReadMsgAmount(amount) { + if (amount != undefined) + unReadMsgAmount = amount; + if(unReadMsgAmount <= 0) { + $('#metroNotificationCenterTips').text(''); + $('#metroNotificationCenterTips').hide(); + $('#notificationMessageOperate').hide(); + } else { + $('#metroNotificationCenterTips').text(unReadMsgAmount); + $('#metroNotificationCenterTips').show(); + $('#notificationMessageOperate').show(); + } +} +// 重新渲染未读通知列表 +function reRenderUnReadMsgList(container) { + container.empty(); + var len = getShowAmount(); // 获取可以显示的未读通知数 + for (var i=0; i
                                              '); + item.addClass(data['notifyLevel']).attr('msgId', data['id']).attr('registerId', data['registerId']); + var system_icon = $(''); + if (data['icon'] == undefined || data['icon'] == '') { + system_icon = $(''); + if (data['notifyLevel'] == 'w') { + system_icon.attr('src', '../apps/com.actionsoft.apps.notification/img/icon64-warning.png'); + } else if (data['notifyLevel'] == 'e') { + system_icon.attr('src', '../apps/com.actionsoft.apps.notification/img/icon64-error.png'); + } else { + system_icon.attr('src', '../apps/com.actionsoft.apps.notification/img/icon64.png'); + } + } else { + system_icon = $(''); + system_icon.attr('src', data['icon']); + } + var sender_photo = $(''); + if (data['photo'] != undefined && data['photo'] != '') { + sender_photo = $(''); + sender_photo.attr('src', data['photo']); + } + var content_container = $('
                                              '); + var system_name = $('
                                              ' + data['systemName'] + '
                                              '); + var content_width = $(window).width() - 420; + var maxFonts = content_width / 13 * 2 - 3; + var content = $('
                                              ' + data['content'] + '
                                              '); + + var buttons = $('
                                              '); + var datetime = $('' + data['createTime'] + ''); + var operate_close = $(''); + operate_close.click(function(e) { + readNotificationMessage($(this).parent()); + $(document).quicktip('close'); // 关闭quicktip提示 + }); + // 点击内容,打开通知中心 + content.click(function(e) { + var messageId = $(this).parent().parent().attr('msgId'); + showFunctionWindow("notificationCenter" + messageId, "通知中心", "./w?sid=" + sid + "&cmd=com.actionsoft.apps.notification_center" + "&messageId=" + messageId); + if ($('#notificationMessageOperate').next().css('display') != 'none') { + $('#notificationMessageOperate').click(); + } + clearTimeout(timeout_loadMsgAmount); + loadUnReadMsgAmount(); // 加载未读 + }); + + var operateButtons = data['buttons']; + if (operateButtons == undefined) { + var _button = $('忽略'); + buttons.append(_button); + _button.click(function(e) { // 忽略,设置为已读 + readNotificationMessage($(this).parent().parent()); + }); + } else { + var len_ii = operateButtons.length; + // 最多值允许3个按钮 + len_ii = (len_ii > 3) ? 3 : len_ii; + for (var ii=0; ii' + _button['name'] +''); + buttons.append(_btn); + continue; + } + var _btn = $('' + _button['name'] + ''); + var color = _button['color'] == undefined ? '' : _button['color']; + _btn.addClass(color); + _btn.attr('target', _button['target']).attr('action', action).attr('functionId', functionId).attr('functionName', functionName); + _btn.click(function(e) { + var target = $(this).attr('target'); + if (target == 'blank' || target == '_blank') { + window.open($(this).attr('action')); + } else if (target == 'mainFrame') { + // TODO 显示消息列表 + window.showFunctionWindow($(this).attr('functionId'), $(this).attr('functionName'), $(this).attr('action'), true); + } else if (target == 'ajax') { + awsui.ajax.post($(this).attr('action'), {}, function(e) {}, 'json'); + } + readNotificationMessage($(this).parent().parent()); // 设置为已读 + }); + buttons.append(_btn); + } + } + if (isAfter == undefined) { + container.append(item); + } else if (isAfter) { + container.after(item); + } else { + container.prepend(item); + } + item.append(system_icon).append(sender_photo).append(content_container).append(buttons).append(datetime).append(operate_close); + content_container.append(system_name).append(content); + item.stop().slideDown('slow'); +} +// 阅读通知消息 +function readNotificationMessage(itemObj) { + var msgId = $(itemObj).attr('msgId'); + var registerId = $(itemObj).attr('registerId'); + awsui.ajax.post('./jd?sid='+sid+'&cmd=com.actionsoft.apps.notification_read_message', {'id': msgId, 'registerId': registerId}, function(responseObject) { + if (responseObject['result'] == 'ok') { + $(itemObj).stop().slideUp('slow', function(e) { + $(itemObj).remove(); + unReadMsgAmount--; + settingUnReadMsgAmount(); + if (unReadMsgList.length > 0) { + var container = $('#notificationMessageListContainer'); + renderUnReadMsgItem(unReadMsgList[0], container); + unReadMsgList.remove(0); + } + }); + } else { + $.simpleAlert(responseObject['msg'], responseObject['result']); + } + }, 'json'); +} +// 显示消息通知 +function showNotificationMessage() { + var _self = $('#notificationMessageOperate'); + // 展开 + _self.removeClass('top'); + _self.next().stop().slideDown('slow', function(e) { + _self.attr('title', '隐藏'); + _self.children('img').attr('src', '../apps/com.actionsoft.apps.coe.pal/img/icon/logo-notification.png'); + }); +} +// 消息到达声音提示 +function notificationArrivalSoundTips() { + if(notificationSoundTips) { + + } +} + +// 显示功能窗口 +var showFunctionWindow = top.window.showFunctionWindow = window.showFunctionWindow = function(id, name, url, refresh) { + url = encodeURI(url); + $("#appviewport2-right-content").attr("src", url); + $(".appviewport2-left li").removeClass("action"); + $("#li_teamwork").addClass("action"); +}; + +// 已读消息(供外部调用) +top.window.readNotificationMsg = function(msgId) { + var container = $('#notificationMessageListContainer'); + var item = container.children('div[msgId="' + msgId + '"]'); + if (item.hasClass('notification-message-item-container')) { // 已展示出 + item.remove(); + unReadMsgAmount--; + settingUnReadMsgAmount(); + if (unReadMsgList.length > 0) { + renderUnReadMsgItem(unReadMsgList[0], container); + unReadMsgList.remove(0); + } + } else { // 未展示 + var len = unReadMsgList == undefined ? 0 : unReadMsgList.length; + for (var i=0; i this.length) { + return false; + } + for (var i = 0, n = 0; i < this.length; i++) { + if (this[i] != this[idx]) { + this[n++] = this[i]; + } + } + this.length -= 1; +}; \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.header.uploadimage.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.header.uploadimage.js new file mode 100644 index 00000000..f22a15a9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.header.uploadimage.js @@ -0,0 +1,182 @@ +// 初始化剪裁控件 +// Create variables (in this scope) to hold the API and image size +var jcrop_api, boundx, boundy, +// Grab some information about the preview pane +$preview, $pcnt, $pimg, xsize, ysize; + +$(document).ready(function() { + $('#tmpUploadLogo,#userPhotoPreview').attr('src', "../apps/com.actionsoft.apps.network/img/team.png"); + $preview = $('#preview-pane'), $pcnt = $('#preview-pane .preview-container'), $pimg = $('#preview-pane .preview-container img'), xsize = $pcnt.width(), ysize = $pcnt.height(); + // 渲染图像裁切组件 + $('#tmpUploadLogo').Jcrop({ + onChange : updatePreview, + onSelect : updatePreview, + aspectRatio : 1, + boxWidth: 550, + boxHeight: 350 + }, function() { + // Use the API to get the real image size + var bounds = this.getBounds(); + boundx = bounds[0]; + boundy = bounds[1]; + // Store the API in the jcrop_api variable + jcrop_api = this; + + // Move the preview into the jcrop container for css positioning + $preview.appendTo(jcrop_api.ui.holder); + $('#jcrop-botton').appendTo(jcrop_api.ui.holder); + }); + function updatePreview(c) { + if (parseInt(c.w) > 0) { + var rx = xsize / c.w; + var ry = ysize / c.h; + + $pimg.css({ + width : Math.round(rx * boundx) + 'px', + height : Math.round(ry * boundy) + 'px', + marginLeft : '-' + Math.round(rx * c.x) + 'px', + marginTop : '-' + Math.round(ry * c.y) + 'px' + }); + $pimg.attr('x', Math.round(rx * c.x)).attr('y', Math.round(ry * c.y)).attr('ratio', rx); + } + }; +}); + +// 初始化upload组件 +var isContinueFive = true; // 禁止多次重复操作 +function openUploadLogoDialog(type, id, logo, appId, callback) { + if (!isContinueFive) return; + isContinueFive = false; // 禁止多次重复操作 + // 打开Dialog + $('#uploadLogoDailog').dialog({ + title: "上传图片", + draggable: false, + onClose: function() { + //$("#nwWorkManageDialog").show(); + isContinueFive = true; // 禁止多次重复操作 + return true; + } + }); + + // 处理默认参数 + if (type == undefined || type == '') type = 'team'; + if (id == undefined || id == '') id = '-'; + // DC相关参数 + var repositoryName = '!network-logo'; + var groupValue = type; + var fileValue = id; + var fileName = ''; + if (type == 'team') { + fileName = $('#teamTmpLogoFileName').val(); + } else if (type == 'network') { + fileName = $('#networkTmpLogoFileName').val(); + } + + if (logo == undefined || logo == '') { + logo = "../apps/com.actionsoft.apps.network/img/" + type + ".png"; + // 禁用裁切按钮 + $('#crop').attr('disabled', 'disabled').addClass('gray'); + $("#crop").unbind('click'); + } else { + // 启用裁切按钮 + $('#crop').removeAttr('disabled').removeClass('gray'); + // 点击剪裁图片,会对图片进行剪裁并保存 + $("#crop").unbind('click').click(function(){ + cutImage(repositoryName, appId, groupValue, fileValue, fileName); + }); + } + + changeImage(logo); + var filter = [["Images (*.jpg; *.jpeg; *.gif; *.png;)","*.jpg; *.jpeg; *.gif; *.png;"]]; + // 配置upload组件 + $('#uploadImage').upfile({ + sid: sid, + appId: appId, + repositoryName : repositoryName, // !network-logo + groupValue: groupValue, // team/network + fileValue: fileValue, // [teamId]/[networkId] + numLimit : 1, //最大个数 + sizeLimit : parseInt(20) * 1024 * 1024, //附件最大数 + filesToFilter:filter, + done: function(e, data) { + if (data['result']['data']['result'] == 'ok') { + var url = data['result']['data']['data']['attrs']['url'] + '&t=' + new Date().getTime(); + var w = data['result']['data']['data']['attrs']['width']; + var h = data['result']['data']['data']['attrs']['height']; + // 新增,重新绑定上传组件 + if (id == '-') { + id = data['result']['data']['data']['attrs']['uuid']; + openUploadLogoDialog(type, id, url); + fileValue = id; + if (type == 'team') { + $('#nwTeamEditForm').find('#teamId').val(id); + $('#nwTeamEditForm').find('#teamTmpLogo').val(url); + $('#nwTeamEditForm').find('#teamLogo').val('logo.jpg'); + } else if (type == 'network') { + $('#nwNetworkEditForm').find('#networkId').val(id); + $('#nwNetworkEditForm').find('#networkTmpLogo').val(url); + $('#nwNetworkEditForm').find('#networkLogo').val('logo.jpg'); + } + } + + // 参数 + var fileName = data['result']['data']['data']['attrs']['fileName']; + changeImage(url); + + // 启用裁切按钮 + $('#crop').removeAttr('disabled').removeClass('gray'); + // 点击剪裁图片,会对图片进行剪裁并保存 + $("#crop").unbind('click').click(function(){ + cutImage(repositoryName, appId, groupValue, fileValue, fileName, callback); + }); + } else { + $.simpleAlert(data['result']['data']['msg'], data['result']['data']['result']); + } + } + }); + // 关闭窗口 + $("#closePhotoDailog").unbind('click').click(function(){ + $('#uploadLogoDailog').dialog('close'); + }); +} + +// 更换图片 +function changeImage(imageURL) { + parent.jcrop_api.setImage(imageURL, function(obj) { + // Use the API to get the real image size + var bounds = jcrop_api.getBounds(); + boundx = bounds[0]; + boundy = bounds[1]; + $pimg.css({ + width : boundx + 'px', + height : boundy + 'px', + marginLeft : '0', + marginTop : '0' + }); + $pimg.attr('x', 0).attr('y', 0).attr('ratio', 1); + $('#userPhotoPreview').attr('src', imageURL); + }); +} + +// 裁切图像 +function cutImage(repositoryName, appId, groupValue, fileValue, srcFileName, callback) { + var x = $pimg.attr('x') == undefined ? 0 : $pimg.attr('x'); + var y = $pimg.attr('y') == undefined ? 0 : $pimg.attr('y'); + var ratio = $pimg.attr('ratio') == undefined ? 1 : $pimg.attr('ratio'); + var params = {repositoryName: repositoryName, appId: appId, groupValue: groupValue, fileValue: fileValue, + srcFileName: srcFileName, descFileName: 'logo.jpg', + x: x, y: y, w: 120, h: 120, ratio: ratio}; + var url = './jd?sid=' + sid + '&cmd=CLIENT_PICTURE_CUT'; + awsui.ajax.post(url, params, function(responseObject){ + if (responseObject['result'] == 'ok') { + var url = responseObject['data']['url'] + '&t=' + new Date().getTime(); + $.simpleAlert("图片保存成功", 'ok'); + if (callback) { + callback(url, fileValue); + } + $('#uploadLogoDailog').dialog('close'); + } else { + $.simpleAlert(responseObject['msg'], responseObject['result']); + } + }, 'json'); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.header.wizard.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.header.wizard.js new file mode 100644 index 00000000..bcfd6034 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.header.wizard.js @@ -0,0 +1,329 @@ +var selectedTeamId; //选择的小组Id +var checkedPermNodes = []; //有权限的文件Id +var chechedPermNames = {}; //有权限的文件的Name +var treeData = []; + +var options = { + title:'创建流程小组', + width:750, + animate:true, + model:true, + height:430, + items:[ + {title:"创建小组",des:""}, + {title:"邀请小组成员",des:""}, + {title:"设置小组权限",des:""} + ], + onNext:function(options){ + if (options.currentStep == 0) { + var teamName = $("#teamName").val().trim(); + var teamDescValue = $("#teamDesc").val().trim(); + if (teamName == "") { + $.simpleAlert("[小组名称]不允许为空"); + return false; + } else if(teamName.length > 20){ + $.simpleAlert("[小组名称]不允许超过20位字符", 'info', 2000); + return false; + } else if(teamDescValue.length > 200){ + $.simpleAlert("[小组简介]不允许超过200位字符", 'info', 2000); + return false; + } else if ($('#network').val() == null || $('#network').val() == "") { + $.simpleAlert("[工作网络]不允许为空", 'info', 2000); + return false; + } + return true; + } else if (options.currentStep == 1) { + initTeamTree(); + return true; + } + }, + onPrev:function(options){ + return true; + }, + onFinish:function(options){ + $.simpleAlert("正在保存", "loading"); + var teamName = $("#teamName").val().trim(); + var teamDesc = $("#teamDesc").val(); + var teamType = $("#teamType").val(); + var teamMember = ""; + var userList = window.frames["user_list_iframe"].getSelectList(); + if (userList != undefined && userList.selectIdList.length > 0) { + teamMember = userList.selectIdList; + } + + var fileIds = ""; + var checkedNodes = teamTree.getCheckedNodes(); + if (checkedNodes.length > 0) { + for (var i = 0; i < checkedPermNodes.length; i++) { + if (checkedPermNodes[i] != "" && checkedPermNodes[i] != undefined && checkedPermNodes[i] != "undefined") { + fileIds += checkedPermNodes[i] + ","; + } + } + } + if (fileIds.length > 0) { + fileIds = fileIds.substring(0, fileIds.length - 1); + } + + var params = { + fileValue: $("#fileValue").val(), + teamName: teamName, + teamDesc: teamDesc, + teamType: teamType, + teamMember: teamMember, + fileIds: fileIds, + wsId: $("#selectWs").val(), + network: $('#network').val() + } + + $.ajax({ + url: "./jd?sid=" + $("#sid").val() + "&cmd=com.actionsoft.apps.coe.pal_createteam_save", + data: params, + success: function(msg) { + if (msg.result == "ok") { + $.simpleAlert("保存成功", "ok", {callback:function(){ + $('#wizard-dig').dialog('close');}} + ); + } else { + if(msg.msg != "") { + $.simpleAlert(msg.msg, "error"); + } else { + $.simpleAlert("保存失败", "error"); + } + + } + } + }) + + return true; + } +}; + +var appId = "com.actionsoft.apps.network"; + +$(document).ready(function() { + // 上传小组图片 + $("#uploadTeamLogoBtn").unbind('click').bind("click", function(e) { + var teamId = $('#nwTeamEditForm').find('#teamId').val(); + var teamTmpLogo = $('#nwTeamEditForm').find('#teamTmpLogo').val(); + openUploadLogoDialog('team', teamId, teamTmpLogo, appId, function(url, fileValue1){ + $("#img-uploadTeamLogoBtn").attr("src", url); + $('#uploadTeamLogoBtn').text('编辑图片'); + $("#fileValue").val(fileValue1); + }); + e.stopPropagation(); // 阻止事件冒泡 + }); + // 删除小组图片 + $("#deleteTeamLogoBtn").click(function(e) { + deleteTeamLogo(); // 强制删除小组图片 + $('#uploadTeamLogoBtn').text('上传图片'); + e.stopPropagation(); // 阻止事件冒泡 + }); + + // 关闭上传图片窗口 + $('#closeUserPortrait').click(function(e) { + $('#uploadUserPortraitDailog').dialog('close'); + e.stopPropagation(); // 阻止事件冒泡 + }); + + $("#window-mask").hide(); + +}); + + +// 删除小组Logo +function deleteTeamLogo() { + $('#nwTeamEditForm').find('#teamTmpLogo').val(''); + $('#img-uploadTeamLogoBtn').attr('src', "../apps/com.actionsoft.apps.network/img/team.png"); + $('#nwTeamLogo').attr('src', "../apps/com.actionsoft.apps.network/img/team.png"); +} + +/*****************************************************流程树***************************************************/ +//PAL文件树 +var teamTree; +function initTeamTree() { + var wsId = jQuery("#wsId").val(); + $("#teamTree").html(""); + var setting = getTeamTreeSetings(); + teamTree = awsui.tree.init($("#teamTree"), setting); + setCheckedNode(); +} + +function getTeamTreeSetings() { + var setting = { + checkbox:true, + checkInherit : false, + event:{ + onCheck:onCheckPerm, + beforeExpand : loadTeamPermData, + afterExpand : setCheckedNode, + afterLoad : afterLoadTeamPerm + } + }; + + setting.dataModel = { + data : treeData + }; + return setting; +} + +//加载子节点 +function loadTeamPermData(treeNode) { + var wsId = $("#selectWs").val(); + var dataModel = { + url : "./jd?sid=" + jQuery("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_teamwork_teamtree_data_query&pid=" + treeNode.id + + "&wsId=" + wsId, + method : "POST", + dataType : "json" + } + teamTree.refreshNode({ + id : treeNode.id, + dataModel : dataModel + }); +} + +function changeWs() { + $("#teamTree").empty(); + checkedPermNodes=[]; + chechedPermNames={}; + var wsId = $("#selectWs").val(); + $.ajax({ + url: "jd?sid=" + $("#sid").val() + "&cmd=com.actionsoft.apps.coe.pal_createteam_tree_data_query", + data: {"wsId": wsId}, + success: function(msg) { + if (msg.result == "ok") { + treeData = msg.data.treeData; + initTeamTree(); + } + } + }) +} + +//选中checkbox后的事件 +function onCheckPerm(treeNode, node) { + + var versionId; + var rootId; + var ckbValue = treeNode[0].value; + for (var j in treeData) { + if (ckbValue == treeData[j].id) { + if (treeData[j].versionId != undefined) { + versionId = treeData[j].versionId; + rootId = treeData[j].plCategory; + } + break; + } + } + + var rootCkbObj = $("input[type=checkbox][value=" + rootId + "]"); + if (rootCkbObj) { + var checkedObjs = rootCkbObj.parent("a").siblings("ul").find("input[type=checkbox]:checked"); + if (checkedObjs.length > 0) { + rootCkbObj.prop("checked", true); + } else { + rootCkbObj.prop("checked", false); + } + } + + if (treeNode[0].checked == true) { + checkedPermNodes.push(versionId); + chechedPermNames[versionId] = treeData[j].name; + } else { + for (var i = 0; i < checkedPermNodes.length; i++) { + if (checkedPermNodes[i] == versionId) { + checkedPermNodes.splice(i, 1); + break; + } + } + $("#" + versionId).closest("li").remove(); + } + + /*设置子节点同步选中/取消功能*/ + if (treeNode[0].checked == true) { // 选中 + if(node.open != undefined) { + var allChild = []; + //查询所有子节点 + getAllChild(node, allChild); + //放入选中变量 + for(var i = 0; i < allChild.length; i++) { + var check = allChild[i]; + if(jQuery.inArray(check.versionId, checkedPermNodes) != -1) { + continue; + } + checkedPermNodes.push(check.versionId); + chechedPermNames[check.versionId] = check.name; + //设置所有子节点input选中 + $("input[type=checkbox][value=" + check.id + "]").prop('checked', true); + } + } + } else { // 取消选中 + if(node.open != undefined) { + var allChild = []; + //查询所有子节点 + getAllChild(node, allChild); + //删除取消选中变量 + for(var i = 0; i < allChild.length; i++) { + var check = allChild[i]; + if(jQuery.inArray(check.versionId, checkedPermNodes) == -1) { + continue; + } + checkedPermNodes = $.grep(checkedPermNodes, function(n, i) { + return n !== check.versionId; + }); + //设置所有子节点input取消选中 + $("input[type=checkbox][value=" + check.id + "]").prop('checked', false); + } + } + } +} + + + +//获取所有子节点 +function getAllChild(node, allChild) { + for(var i = 0; i < treeData.length; i++) { + var child = treeData[i]; + if(child.pid == node.id) { + allChild.push(child); + if(child.open != undefined) {// 有子节点 + getAllChild(child, allChild); + } + } + } +} + +//设置被选中的checkbox +function setCheckedNode() { + for (var i = 0; i < checkedPermNodes.length; i++) { + var resourceId = checkedPermNodes[i]; + var rootId; + for (var j = 0; j < treeData.length; j++) { + if (resourceId == treeData[j].versionId) { + resourceId = treeData[j].id; + rootId = treeData[j].plCategory; + break; + } + } + var checkboxObj = $("input[type=checkbox][value=" + resourceId + "]"); + if (checkboxObj != undefined) { + checkboxObj.prop("checked", true); + } + var rootCheckboxObj = $("input[type=checkbox][value=" + rootId + "]"); + if (rootCheckboxObj != undefined) { + rootCheckboxObj.prop("checked", true); + } + } +} +function afterLoadTeamPerm() { + $("a[tabindex=process]").trigger("click.nodeClick"); +} + +// 清空信息 +function clearAllCreateTeamInfo() { + $('#teamName').val('');// 小组名称 + $('#teamDesc').val('');// 小组简介 + $("#deleteTeamLogoBtn").click();// 组logo + document.getElementById("user_list_iframe").src = document.getElementById("user_list_iframe").src;// 用户列表 + $('#networkDiv').html('');// 初始化工作网络选择 + $('#selectWsDiv').html('');// 初始化资产库选择 +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.language.dimension.draggable.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.language.dimension.draggable.js new file mode 100644 index 00000000..31708e8f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.language.dimension.draggable.js @@ -0,0 +1,584 @@ +var sid = ""; + + +function getDimIcons(iconType){ +var tblDimIcons='
                                              '; +tblDimIcons=tblDimIcons+" "; +tblDimIcons=tblDimIcons+" "; +tblDimIcons=tblDimIcons+" "; + if(iconType.indexOf('Group')>0){ + tblDimIcons=tblDimIcons+" "; + + }else{ + tblDimIcons=tblDimIcons+" "; + + } + tblDimIcons=tblDimIcons+'
                                              '; + return tblDimIcons; +} +jQuery(function(){ + + sid = parent.sid; + windowResize(); + $(window).resize(function () { + windowResize(); + }); + //自动加载数据 + parent.layoutDimensionMain(); + + jQuery("#dimIcons").find('img').live("click",function(){ + if($(this).attr('fun')=='edit'){ + var id = jQuery(this).parent().attr("dimId"); + var node = parent.findNodeById(id); + if(node&&node.text){ + node.text=node.text.replace(/['"]/g,"\'") + } + parent.dblClickTreeNode(node); + parent.selectNodeById(node); + }else if($(this).attr('fun')=='delDim'){ + parent.delDimension(); + }else if($(this).attr('fun')=='addGroup'){ + parent.addDimension(true); + parent.jQuery("#dimensionName").parent().parent().show();//显示分类 + }else if($(this).attr('fun')=='adddim'){ + parent.addDimension(false); + parent.jQuery("#dimensionName").parent().parent().show();//显示分类 + } + else if($(this).attr('fun')=='addprocess'){ + parent.addProcess(); + } + }); + $('#blankGroup').live("click",function(){ + parent.addDimension(true); + }); +}); +/* 通过CSS样式创建DIV */ +function generateDraggableDiv(_css,id,text){ + var _div = jQuery("
                                              "); + + if(_css){ + _div.addClass("draggableDiv"); + _div.attr("id",id); + _div.addClass(_css); + } else { + _div.height("100%"); + _div.width("100%"); + _div.html(" "); + } + + if(text){ + _div.html(text); + } + if(_css){ + _div.mousedown(function(){ + var id = jQuery(this).attr("id"); + var node = parent.findNodeById(id); + parent.clickTreeNode(node); + parent.selectNodeById(node); + }); + /* .dblclick(function(){ + var id = jQuery(this).attr("id"); + var node = parent.findNodeById(id); + parent.dblClickTreeNode(node); + parent.selectNodeById(node); + }) + ; + */ + //拖拽 + _div.draggable({ + /*deltaX:0, + deltaY:0, + proxy:function(source){ + var n = $('
                                              '); + n.addClass("draggableDiv"); + n.addClass(_css); + n.html($(source).html()).appendTo('body'); + return n; + },*/ + revert:true, + onStartDrag:function(){ + //克隆对象 + //jQuery(this).unbind("mousemove"); + _dragDivClone = jQuery(this).clone(); + _dragDivClone.unbind("mousemove"); + _dragDivClone.fadeTo(1,0.4); + _dragDivClone.css("z-index","0"); //解决火狐双击事件不能出发问题 + _dragDivClone.removeClass("draggableClick"); + jQuery(this).parent().prepend(_dragDivClone); + //存在拖拽对象 + //_hasDragObj = true ; + }, + onStopDrag:function(){ + _dragDivClone.remove(); + //jQuery(this).bind("mousemove",draggableMousemove); + if(_presentObj){ + var _group = jQuery(this).attr("id").substr(id.length-5); + if(_position == "up") { + //如果group被 + if(_group != "Group"){ + + var _target = jQuery(_presentObj).parent().parent(); + var _isExistVal = isExistUpVal(jQuery(this),_target); + + if(!_isExistVal){ + var _this = jQuery(this).parent().parent(); + var sil = _this.siblings(); // 是否还存在其他 + var _pTable = _this.parent().parent(); + //移除不存在维度的分类 + if(sil.length == 1 ){ + var ids = this.id.split("|"); + var groupId = ids[1]; //error + _groupTr.find("div").each(function(){ + var trDivid = jQuery(this).attr("id").split("|"); // + if(trDivid[1] == groupId){ + jQuery(this).fadeOut(200); + setTimeout(function() { + jQuery(this).remove(); + //移除空白列 + _pTable.remove(); + }, 500); + } + }); + } + //添加 + + _this.slideUp(200); + //更改页面相应的id,提交需要更改内容。只更改添加列,减少列不变,如果不成功--刷新 + updateDraggableDate(jQuery(this).attr("id"),jQuery(_presentObj).attr("id"),getGroupName(),_position); + setTimeout(function() { + _target.before(_this); + autoChangeBlankTd(); + //TODO 需要处理页面 + + }, 400); + setTimeout(function() { + _this.slideDown(200); + }, 400); + } else { + window.top.$.simpleAlert("[" + jQuery(this).html() + "]"+维度已经存在); + } + } else { + window.top.$.simpleAlert(分类+"[" + jQuery(this).html() + "]"+不能拖放到此处); + } + } else { + //是否是组 + if(_group == "Group"){ + var _this = jQuery(this).parent(); + var _target = jQuery(_presentObj).parent(); + var _thisTable = getGroupObjTable(_this); + var _targetTable = getGroupObjTable(_target); + _this.slideUp(200); + //同步数据 + updateDraggableDate(jQuery(this).attr("id"),jQuery(_presentObj).attr("id"),"",_position); + if (_position == "left") { + setTimeout(function() { + _target.before(_this); + //连带 + if(_targetTable){ + _targetTable.before(_thisTable); + } else { + _thisTable.parent().append(_thisTable); + } + //TODO 需要处理页面 + + }, 400); + } else { + /*setTimeout(function() { + _target.after(_this); + //连带 + _targetTable.after(_thisTable); + //TODO 需要处理页面 + + }, 400);*/ + } + setTimeout(function() { + _this.slideDown(200); + }, 400); + + + } else { + if (_position == "left") { + + } else { + + } + var _nodeId = jQuery(this).attr("id"); + var node = parent.findNodeById(_nodeId); + parent.editDraggableGroupName(node,this,_presentObj,_position); + } + + } + clearLikeCss(); + _presentObj = null; + } + + } + }); + } + _div.droppable({ + onDragEnter:function(e,source){ + //jQuery("#displayDiv1").html("enter"); + }, + onDragOver:function(e,source){ + clearLikeCss(); + //处理提示行 + var id = this.id; + var _group; + if(id){ + _group = id.substr(id.length-5); + if(_group == "Group"){ + showLeftUp(this,source); + } else { + showLikeUp(this,source); + } + + } else { + + showLikeUp(this,source); + } + + }, + onDragLeave:function(e,source){ + + }, + onDrop:function(e,source){ + + } + }); + return _div; +} +var _dragDivClone; //克隆对象,当拖拽的时候留下虚影,记录方便删除 +var _hasDragObj = false; //是否存在拖拽对象 +var _presentObj; //上一个有提示线时的对象 +var _position; //将要插入的位置 +var _pageX = 0,_pageY = 0; //全局鼠标坐标 + +//更新拖拽后内容 +function updateDraggableDate(thisId,targetId,groupName,position){ + $.ajax({ + type: "POST", + url: encodeURI("./w?sid=" + sid + "&cmd=COE_TEAM_DIMENSION_DRAGGABLE_UPDATEDATA"), + data: "thisId=" + thisId + "&targetId=" + targetId + "&groupName=" + groupName + "&position=" + position, + success: function(msg){ + //暂不修改页面中div的id + if(groupName != "" && position != "up"){ + //刷新页面 + parent.reloadTreeData(); + } else { + parent.reloadTreeData(false); + } + parent.parentReloadHmtl(true); + },error: function(){ + //调用mian刷新页面 + parent.reloadTreeData(); + } + }); +} + +function editDraggableGroup(node,_this,_target,groupName,position){ + //需要处理 + var _th = jQuery(_this).parent(); + var _ta = _target.parent(); + + + updateDraggableDate(jQuery(_this).attr("id"),jQuery(_target).attr("id"),groupName,position); + +} + +function getGroupName(){ + var ids = _presentObj.attr("id"); + if(ids == ""){ + ids = _presentObj.parent().parent().prev().find("div").attr("id").split("|"); + } else { + ids = ids.split("|"); + } + var val = "newGroup"; + _groupTr.find("div").each(function(i){ + var thisIds = jQuery(this).attr("id").split("|"); + if(thisIds[1] == ids[1]){ + val = jQuery(this).html(); + } + }); + return val; +} + +//获得当前组对应的维度集合 +function getGroupObjTable(groupTdObj){ + var _groupIds = groupTdObj.find("div").attr("id").split("|"); + /*if(!_groupIds || _groupIds == ""){ + //解决最后一个空白区域,应该不会出现 + _groupIds = groupTdObj.prev().find("div").attr("id").split("|"); + }*/ + for(var i = 0 ; i < _tableArray.length ; i++ ){ + var _thisIds = _tableArray[i].find("div").first().attr("id").split("|"); + if(_groupIds[1] == _thisIds[1]){ + return _tableArray[i].parent(); + } + } +} + +function isExistUpVal(obj,target){ + var objVal = obj.html(); + var _targetDiv = target.find("div"); + var targetVal = _targetDiv.html(); + + var objId = obj.attr("id"); + var targetId = _targetDiv.attr("id"); + //是否是同组 + var objIds = objId.split("|"); + + if(targetId == ""){ + var prev = target.prev().find("div").attr("id").split("|"); + if(objIds[1] == prev[1]){ + return false; + } + } + var targetIds = targetId.split("|"); + + if(objIds[1] == targetIds[1]){ + return false; + } + //非同组,当前对象 + if(objVal == targetVal){ + return true; + } + //非同组其他对象 + var isExist = false; + target.siblings().each(function(){ + var _this = jQuery(this).find("div"); + var thisVal = _this.html(); + //var thisId = _this.attr("id"); + if((objVal == thisVal)){ + isExist = true; + return; + } + }); + return isExist; +} + +function clearLikeCss(){ + if(_presentObj){ + if(_position == "right") { + _presentObj.parent().removeClass("likeRight"); + } else if (_position == "left") { + _presentObj.parent().removeClass("likeLeft"); + } else if (_position == "up") { + _presentObj.parent().removeClass("linkUP"); + } else if (_position == "down") { + _presentObj.parent().removeClass("likeDown"); + } + } +} + +function showLikeUp(obj,source){ + if(jQuery(source).attr("id") ==jQuery(obj).parent().parent().prev().find("div").attr("id")){ + _presentObj = ""; + _position = ""; + } else { + jQuery(obj).parent().addClass("linkUP"); + _position = "up"; + _presentObj = jQuery(obj); + } +} + +function showLeftUp(obj,source){ + if(jQuery(source).attr("id") ==jQuery(obj).parent().prev().find("div").attr("id")){ + _presentObj = ""; + _position = ""; + } else { + jQuery(obj).parent().addClass("likeLeft"); + _position = "left"; + _presentObj = jQuery(obj); + } +} + +function showRightUp(obj,source){ + if(jQuery(source).attr("id") ==jQuery(obj).parent().next().find("div").attr("id")){ + _presentObj = ""; + _position = ""; + } else { + jQuery(obj).parent().addClass("likeRight"); + _position = "right"; + _presentObj = jQuery(obj); + } +} + +function draggableMousemove(e){ + //存在拖拽,显示拖拽提示线 + if(_hasDragObj){ + if(_presentObj){ + _presentObj.parent().removeClass("linkUP"); + _presentObj.parent().removeClass("likeDown"); + } + var offset = $(this).offset(); + if(offset){ + //不成功 + var yy = e.pageY - offset.top; + if(yy > ($(this).height() / 2)){ + //jQuery("#displayDiv").html("down"); + jQuery(this).parent().addClass("likeDown"); + position = "down"; + } else { + //jQuery("#displayDiv").html("up"); + jQuery(this).parent().addClass("linkUP"); + position = "up"; + } + _presentObj = $(this); + } + } + //jQuery("#displayDiv").html(e.pageY + "--" +e.pageX); +} + +function draggableDivClickColor(id){ + jQuery(".draggableDiv").removeClass("draggableClick"); + $('#dimIcons').remove(); + var _div = jQuery("div[id=" + id + "]"); + if(_div && _div.length > 0){ + _div.addClass("draggableClick"); + var icons=getDimIcons(id); + jQuery("div[id=" + id + "]").parent().after().append(icons); + } +} + + +/*初始化布局*/ +var _groupTr = ""; //分组的Tr对象,从而确定所有元素 +var _tableArray = []; //缓存所有分组子元素容器 +var _tableHtml = "
                                              "; +var _trHtml = "";//如果使用拷贝这一份 +var _tdHtml = ""; +function initDraggable(data){ + _groupTr = ""; + _tableArray = []; + if(!data||data==''){ + jQuery("[region=center]").html('
                                              '+添加流程分类+'
                                              '); + return false; + } + var maxTr = 0; //最大列数 + var current = 0; + + for( var i = 0 ; i < data.length ; i ++){ + currentTr = data[i].children.length; + if(currentTr > maxTr ){ + maxTr = currentTr; + } + } + + var _table = jQuery("
                                              "); + _table.attr("cellpadding",0); + _table.attr("cellspacing",0); + _table.attr("border",0); + _table.css("padding","5px"); + + //分组 + var _tableObj = jQuery(_tableHtml); + var _trObj = jQuery(_trHtml); + var _tdObj = jQuery(_tdHtml); + _table.append(_trObj.append(_tdObj.append(_tableObj))); + _tableObj.attr("cellpadding",0); + _tableObj.attr("cellspacing",0); + _tableObj.attr("border",0); + _trObj = jQuery(_trHtml); + _tableObj.append(_trObj); + var group = _trObj; _groupTr = _trObj; + //_tableArray.push(_tableObj); + //流程 + //var process ; + _tableObj = jQuery(_tableHtml); + _trObj = jQuery(_trHtml); + _tdObj = jQuery(_tdHtml); + _table.append(_trObj.append(_tdObj.append(_tableObj))); + _tableObj.attr("cellpadding",0); + _tableObj.attr("cellspacing",0); + _tableObj.attr("border",0); + var _tableObjTemp ; + _trObj = jQuery(_trHtml); + for( var i = 0 ; i < data.length ; i ++){ + _tableObjTemp = jQuery(_tableHtml); + _tdObj = jQuery(_tdHtml); + _tdObj.attr("valign","top"); + _tableObj.append(_trObj.append(_tdObj.append(_tableObjTemp))); + _tableObjTemp.attr("cellpadding",0); + _tableObjTemp.attr("cellspacing",0); + _tableObjTemp.attr("border",0); + _tableArray.push(_tableObjTemp); + } + + //测试 + var displayDiv = jQuery("
                                              00000
                                              "); + var displayDiv1 = jQuery("
                                              00000
                                              "); + jQuery("[region=center]").html(_table); + + for( var i = 0 ; i <= data.length ; i ++){ + _tdObj = jQuery(_tdHtml); + _tdObj.addClass("draggableTable"); + if(i != data.length){ + group.append(_tdObj.append(generateDraggableDiv("draggableDivGray",data[i].id,data[i].text))); + var _chilren = data[i].children; + for( var j = 0 ; j <= _chilren.length ; j ++ ){ + _trObj = jQuery(_trHtml); + _tdObj = jQuery(_tdHtml); + _tdObj.addClass("draggableTable"); + if(j != _chilren.length){ + jQuery(_tableArray[i]).append(_trObj.append(_tdObj.append(generateDraggableDiv("draggableDivBlue",_chilren[j].id,_chilren[j].text)))); + } else { + //添加一个空白单元格 + jQuery(_tableArray[i]).append(_trObj.append(_tdObj.append(generateDraggableDiv()))); + } + } + } else { + _tdObj.css("border-right","2px solid #fff"); + var _div = generateDraggableDiv(); + _div.attr("id","-1|-1|-1|Group"); + group.append(_tdObj.append(_div)); + } + + } + autoChangeBlankTd(); +} +//自动化空白区域 +function autoChangeBlankTd(){ + for(var i = 0 ; i < _tableArray.length ; i++){ + var _pTdh = _tableArray[i].parent().height(); + //var sum = 0; + var _children = _tableArray[i].find("td"); + _children.each(function(j){ + //if((_children.length - 1) == j ){ + // jQuery(this).height(_pTdh - sum); + //} else { + // sum += jQuery(this).height(); + //} + if((_children.length - 1) == j ){ + jQuery(this).height("50px"); + } + }); + } +} + +function crateTr(len){ + var _tr = jQuery(""); + for ( var i = 0 ; i < len ; i ++ ){ + var _td = jQuery(" "); // 样式 TODO + _td.addClass("draggableTable"); + //_td.css("border","#FF0000 solid 1px"); + _td.attr("align","center"); + _td.attr("valign","middle"); + //_td.css("padding","5px 0px"); + _tr.append(_td); + } + return _tr; +} + +function getWindowHeight() { + return $(window).height(); +} +function getWindowWidth() { +return $(window).width(); +} +function windowResize() { + var width = getWindowWidth(); + var height = getWindowHeight(); + $('form#frmMain').width(width); + $('form#frmMain').height(height); + $('form#frmMain').layout(); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.language.dimension.main.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.language.dimension.main.js new file mode 100644 index 00000000..cb137731 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.language.dimension.main.js @@ -0,0 +1,653 @@ +var sid = ""; +var pid = ""; //当前节点 +var childrenNodeIds=''; + +//encodeURI(); +var expandTreeNodes = []; +var currentObj = ""; +var _allData; +// var _groupName = ""; + +jQuery(function(){ + jQuery('#dimensionForm').show().dialog({closed:true,modal:true}); + jQuery('#dimensionTree').show().dialog({closed:true,modal:true}); + sid = jQuery("input[name=sid]").val(); + + jQuery('#dimensionProcess').tree({ + + onClick:function(node){ + clickTreeNode(node); + }, + onDrop: function(targetNode, source, point){ + var targetId = jQuery(this).tree('getNode', targetNode).id; + return true; + } + ,onDblClick:function (node){ + dblClickTreeNode(node); + },onBeforeEdit:function (node){ + var n ; + //return false; + },onAfterEdit:function (node) { + if(node.text.length < 1) { + jQuery(this).tree('cancelEdit', node.target); + } + },onContextMenu:function (e, node){ + },onBeforeExpand:function(node){ + if(node.attributes && node.attributes.group){ + addNodeToArr(node.id); + jQuery(this).tree('options').url = encodeURI("./w?sid=" + sid + "&cmd=COE_TEAM_DIMENSION_SELECTPROCESS&id="+ node.id); + initTip(jQuery('*[title]')); + } + },onBeforeCollapse:function(node){ + removeNodeToArr(node.id); + },onLoadSuccess:function(node, data){ + jQuery(this).tree("expandAll"); + } + }); + jQuery("#delProcess").live("click",function(){ + delDimension(); + }); + //自己加载数据 + reloadTreeData(); + clickTreeNode(); + windowResize(); + document.getElementById('dimensionDraggableMain').src = encodeURI('./w?sid='+sid+'&cmd=COE_TEAM_DIMENSION_DRAGGABLE'); +}); + +function cancelButton(){ + jQuery('#dimensionForm').dialog( "close" ); + jQuery("#dimensionName").removeAttr("readonly"); +} +function addNodeToArr(id){ + if(expandTreeNodes && id){ + if(jQuery.inArray(id,expandTreeNodes) == -1 ){ + expandTreeNodes.push(id); //记录站开项 + } + } +} + +function removeNodeToArr(id){ + if(expandTreeNodes && id){ + var _index = jQuery.inArray(id,expandTreeNodes); + if( _index > -1 ){ + expandTreeNodes = expandTreeNodes.slice(0,_index).concat(expandTreeNodes.slice(_index + 1,expandTreeNodes.length)); + } + } +} + +function findNodeById(id){ + return jQuery('#dimensionProcess').tree("find",id); +} + +function selectNodeById(node){ + jQuery('#dimensionProcess').tree("select",node.target); +} + +function searchNodeById(data,id){ + if(data){ + for(var i = 0 ; i < data.length ; i ++){ + if(data[i].id == id){ + return data[i]; + } else { + if( data.children ){ + searchNodeById(data.children,id); + } + } + } + } else { + return null; + } +} + +function clickTreeNode(node){ + + if(!node){return false;} + + if(typeof(eval(dimensionDraggableMain.window.draggableDivClickColor)) == "function"){ + dimensionDraggableMain.window.draggableDivClickColor(node.id); + var childrenNodes = jQuery('#processIds').tree('getChildren', node.target); + if( childrenNodes.length==0){ + childrenNodeIds=""; + } + for (var i=0; i < childrenNodes.length; i++) { + var childrenNode= childrenNodes[i]; + var uuid=childrenNode.id + var versionuuid=uuid.split("|")[0]; + if(i==0){ + childrenNodeIds=versionuuid; + }else{ + childrenNodeIds+=","+versionuuid; + } + } + } + jQuery('#delProcess').remove(); + currentObj = node; + if(node.id == 0){return false;} + if (node.id.length == 65){ + if(node.text.indexOf('img')==-1){ + node.text=node.text+""; + } + jQuery('#dimensionProcess').tree('update', node); + } + +} + +function menuButtonDisable(){ + jQuery('#processMenuButton,#dimessionMenuButton').menubutton({disabled:true}); +} +function menuButtonDisable(){ +} + +function dblClickTreeNode(node){ + if(typeof(eval(dimensionDraggableMain.window.draggableDivClickColor)) == "function"){ + dimensionDraggableMain.window.draggableDivClickColor(node.id); + } + if(node.id == 0){return false;} + if(node.id.length == 65){return false;} + currentObj = node; + editDimension(); +} + +function lickButtonDisable(id){ + jQuery("#" + id).unbind("click"); + jQuery("#" + id).linkbutton('disable'); +} +function lickButtonEnable(id,fun) { + jQuery("#" + id).bind("click",fun); + jQuery("#" + id).linkbutton('enable'); +} + +/*添加维度--使用全局ID*/ +function addDimension(isGrooup){ + + // var node = jQuery('#dimensionProcess').tree("getSelected"); + var node = currentObj,group; + if(node){ + if(node.attributes){ + group = node.attributes.group; + } else { + if(node.id != 0 ){group = node.text;} + } + } + var tmpGroup=!isGrooup?group:''; + //初始化【维度分类】 + resetAddDimensionForm(); + + initDimensionType(tmpGroup); + jQuery('#submitButton').linkbutton({text:添加}); + jQuery('#submitButton').unbind("click").bind("click",addDimensionDo); + jQuery('#cancelButtonId').unbind("click").bind("click",cancelButton); + jQuery('#dimensionForm').dialog({title:添加流程分类}).dialog('open'); + if(!isGrooup){ + jQuery("#dimensionName").focus(); + }else{ + jQuery(".combo-text").focus(); + } +} +function addDimensionDo(){ + var node = currentObj; + var dimenName = jQuery("#dimensionName").val(); + var dimenType = _comboboxObj.combobox('getText'); + dimenType=dimenType.replace(/['"]/g,""); + if(!dimenType || dimenType.length < 1){ + jQuery.messager.window.top.$.simpleAlert(提示,请输入流程大类名称,"info"); + return false; + } + if(dimenType.length > 30){ + jQuery.messager.window.top.$.simpleAlert(提示,流程大类名称不能超过规定字数,"info"); + return false; + } + if(!dimenName || dimenName.length < 1){ + jQuery.messager.window.top.$.simpleAlert(提示,请输入流程小类名称,"info"); + return false; + } + if(dimenName.length > 30){ + jQuery.messager.window.top.$.simpleAlert(提示,流程小类名称不能超过规定字数,"info"); + return false; + } + jQuery.ajax({ + type: "POST", + url: encodeURI("./w?sid=" + sid + "&cmd=COE_TEAM_DIMENSION_ADDDIMEN"), + data: "pid="+projectId+"&dimenName=" + encodeURIComponent(dimenName) + "&dimenType=" + encodeURIComponent(dimenType), + success: function(msg){ + if(msg > 0){ + reloadTreeData(); + jQuery('#dimensionForm').dialog('close'); + parentReloadHmtl(true); + } else { + if(msg == -1){ + jQuery.messager.window.top.$.simpleAlert(提示,保存有误,"error"); + } else if(msg == -2){ + jQuery.messager.window.top.$.simpleAlert(提示,内容已存在,"warning"); + } else { + jQuery.messager.window.top.$.simpleAlert("error",请重新保存,"error"); + } + } + } +}); + +} + +/*编辑维度--使用全局ID*/ +function editDimension(){ + var node = currentObj; + //初始化【维度分类】 + resetUpdateDimensionForm(); + var group ; + if(node.attributes){ + group = node.attributes.group; + jQuery("#dimensionName").val(node.text); + } else { + group = node.text; + jQuery("#dimensionName").parent().parent().hide(); + } + initDimensionType(group); + jQuery("#dimensionId").val(node.id); + + jQuery('#submitButton').linkbutton({text:修改}); + jQuery('#submitButton').unbind("click").bind("click",editDimensionDo); + jQuery('#cancelButtonId').unbind("click").bind("click",cancelButton); + jQuery('#dimensionForm').dialog({title:修改流程分类}).dialog('open'); +} +/*拖拽节点拆分*/ +function editDraggableGroupName(node,_this,_target,position){ + + initDimensionType(node.attributes.group); + jQuery("#dimensionName").val(node.text).attr("readonly","readonly"); + jQuery("#dimensionId").val(node.id); + + jQuery('#submitButton').linkbutton({text:确定}); + if(typeof(eval(dimensionDraggableMain.window.draggableDivClickColor)) == "function"){ + jQuery('#submitButton').unbind("click").bind("click",function(){ + var groupName = _comboboxObj.combobox('getText'); + if(!groupName || groupName.length < 1){ + jQuery.messager.window.top.$.simpleAlert(提示,请输入流程小类名称,"info"); + return false; + } + + + if(groupName.length > 30){ + jQuery.messager.window.top.$.simpleAlert(提示,流程大类不能超过规定字数,"info"); + return false; + } + if(groupName == node.attributes.group){ + jQuery.messager.window.top.$.simpleAlert(提示,已存在当前流程小类名称请重新命名,"info"); + return false; + } + var _comboVals = _comboboxObj.combobox('getData'); + for(var i = 0 ; i < _comboVals.length ; i ++){ + if(_comboVals[i].text == groupName){ + jQuery.messager.window.top.$.simpleAlert(提示,"["+groupName+流程小类名称已经存在,"info"); + return false; + } + } + dimensionDraggableMain.window.editDraggableGroup(node,_this,_target,groupName,position); + jQuery('#dimensionForm').dialog('close'); + jQuery("#dimensionName").removeAttr("readonly"); + }); + } + jQuery('#dimensionForm').dialog({title:编辑小类名称}).dialog('open'); +} + +function editDimensionDo(){ + var node = currentObj; + var dimenId = jQuery("#dimensionId").val(); + var dimenName = jQuery("#dimensionName").val(); + var dimenType = _comboboxObj.combobox('getText'); + dimenType=dimenType.replace(/['"]/g,""); + if(!dimenId || dimenId.length < 1){ + jQuery.messager.window.top.$.simpleAlert(提示,操作对象不存在请重新操作,"error"); + return false; + } + if(!dimenType || dimenType.length < 1){ + jQuery.messager.window.top.$.simpleAlert(提示,请输入流程大类名,"info"); + return false; + } + + if(dimenType.length > 30){ + jQuery.messager.window.top.$.simpleAlert(提示,流程大类名不能超过规定字数,"info"); + return false; + } + if(node.attributes){ + if(!dimenName || dimenName.length < 1){ + jQuery.messager.window.top.$.simpleAlert(提示,请输入流程小类名称,"info"); + return false; + } + if(dimenName.length > 30){ + jQuery.messager.window.top.$.simpleAlert(提示,流程小类名称不能超过规定字数,"info"); + return false; + } + } + jQuery.ajax({ + type: "POST", + url: encodeURI("./w?sid=" + sid + "&cmd=COE_LANGUAGE_DIMENSION_UPDATEDIMEN"), + data: "pid="+projectId+"&dimenId=" + dimenId + "&dimenName=" + encodeURIComponent(dimenName) + "&dimenType=" + encodeURIComponent(dimenType), + success: function(msg){ + if(msg > 0){ + reloadTreeData(); + jQuery('#dimensionForm').dialog('close'); + } else { + if(msg == -1){ + jQuery.messager.window.top.$.simpleAlert(提示,更新有误,"error"); + } else if(msg == -2){ + jQuery.messager.window.top.$.simpleAlert(提示,内容已存在,"warning"); + } else { + jQuery.messager.window.top.$.simpleAlert("error",请重新更新,"error"); + } + } + }}); +} + +/*删除维度--使用全局ID*/ +function delDimension(){ + if(currentObj){ + var _msg = ""; + if(currentObj.attributes){ + //window.top.$.simpleAlert(currentObj.id + "name"); + _msg = 你确定要删除 + currentObj.text + 流程小类吗; + } else if (currentObj.id.length == 65){ + //window.top.$.simpleAlert(currentObj.id + "process"); + var processText= currentObj.text.substring(0,currentObj.text.indexOf('<')); + _msg = 你确定要移走 + processText + 流程吗; + } else { + //window.top.$.simpleAlert(currentObj.id + "group"); + _msg = 你确定要删除 + currentObj.text + 流程大类吗; + } + + jQuery.messager.confirm(提示, _msg,function(b){ + if(!b){return false;} + var attr = currentObj.attributes?currentObj.attributes.group?currentObj.attributes.group:currentObj.attributes:""; + //重置导航 + clickTreeNode(); + jQuery.ajax({ + type: "POST", + url: encodeURI("./w?sid=" + sid + "&cmd=COE_TEAM_DIMENSION_REMOVE"), + data: "id=" + currentObj.id + "&attr=" + attr, + success: function(msg){ + parentReloadHmtl(true); + if(msg > 0){ + reloadTreeData(); + removeNodeToArr(currentObj.id); + currentObj = ""; + } else { + if(msg == -1){ + jQuery.messager.window.top.$.simpleAlert(提示,删除有误,"error"); + } else if(msg == -2){ + jQuery.messager.window.top.$.simpleAlert(提示,内容已存在,"warning"); + } else { + jQuery.messager.window.top.$.simpleAlert("error",请重新删除,"error"); + reloadTreeData(); + } + } + }}); + + }); + } +} + +/*初始化维度类型*/ +var _comboboxObj = ""; +function initDimensionType(group){ + _comboboxObj = jQuery('#dimensionType').combobox({ + url:encodeURI("./w?sid=" + sid + "&cmd=COE_TEAM_DIMENSION_TYPE&projectId="+projectId+"&time=" + new Date()), //如果是编辑需要传递公共ID + valueField:'id', + textField:'text' + }); + if(group){ + _comboboxObj.combobox("select",group); + }else{ + + } + +} +/*初始化业务流程*/ +function initDimensionIds(id){ + treearray=new Array(); + var teamId=parent.$("#coeContent").get(0).contentWindow.$("#projectId").val(); + var wsId=parent.$("#coeContent").get(0).contentWindow.$("#wsId").val(); + jQuery('#processIds').tree({ + checkbox: true, + url: encodeURI('../ajax?sid='+sid+'&cmd=COE_TEAM_PL_TREEJSON&teamId='+teamId+"&wsid="+wsId), + onClick:function(node){ + }, + onBeforeExpand:function(node,param){ + if(!node.checked){ + jQuery(this).tree('options').url =encodeURI('../ajax?sid='+sid+'&cmd=COE_TEAM_PL_TREEJSON&teamId='+teamId+"&wsid="+wsId+"&pid="+node.id+"&ids="+childrenNodeIds); + } + },onLoadSuccess:function(node, data){ + var root = jQuery(this).tree("find","node_0"); + if(root){ + jQuery(this).tree("expand",root.target); + } + if(node){ + jQuery(this).tree("expand",node.target); + } + },onCheck:function(node, checked){ + // if(checked==true) + // { + // getChildNodes(node,id); + // } + } + }); +} +var treearray=new Array(); +function getChildNodes(node,id){ + if (node){ + var children = jQuery('#processIds').tree('getChildren', node.target); + var s = ''; + //查看每个节点的孩子 + for(var i=0; i0) + { + window.top.$.simpleAlert(您好您已经提交成功); + return; + } + cfcount=1; + //获得所选数据 + var nodes = jQuery('#processIds').tree('getChecked'); + var s = ''; + var ss=''; + for(var i=0; i 0){ + _allData = _msg; + jQuery('#dimensionProcess').tree("loadData",_msg); + + expandTreeData(); //展开数据不成功,未知 + if(hasDraggable){ + if(typeof(eval(dimensionDraggableMain.window.initDraggable)) == "function"){ //确定页面加载成功,函数可用 + layoutDimensionMain(); + } + } + if(currentObj && !findNodeById(currentObj.id)){ + clickTreeNode(); + } + initTip(jQuery('*[title]')); + } + } + } + }); + + +} + +function expandTreeData(){ + for ( var i = 0 ; i < expandTreeNodes.length ; i++ ){ + var _node = jQuery('#dimensionProcess').tree("find",expandTreeNodes[i]); + if(_node && _node.attributes){ + jQuery('#dimensionProcess').tree("expand",_node.target); + } + } +} + +/*设置右边拖拽区域*/ +function layoutDimensionMain(){ + if(_allData && _allData.length > 0){ + dimensionDraggableMain.window.initDraggable(_allData[0].children); + } else { + dimensionDraggableMain.window.initDraggable(); + try{ + jQuery('#dimensionType').combobox("setValue",""); + }catch(e){} + try{ + jQuery('#dimensionType').combobox("setText",""); + }catch(e){} + } +} + +function getWindowHeight() { + return (jQuery(window).height()); +} +function getWindowWidth() { +return jQuery(window).width(); +} +function windowResize() { + var width = getWindowWidth(); + var height = getWindowHeight(); + jQuery('form#frmMain').width(width); + jQuery('form#frmMain').height(height); + //jQuery('form#frmMain').layout(); +} +function parentReloadHmtl(type){ + parent.isUpdate=type; +} + + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.language.user.main.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.language.user.main.js new file mode 100644 index 00000000..b50dfcb4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.language.user.main.js @@ -0,0 +1,459 @@ +// 创建表格UI +var lastIndex; +var addresschangeCompany=0; +var userList =[]; + +/* + * 格式化是否创建 + */ + +function isCreateFormatter(value) { + for (var i = 0; i < iscreateoptions.length; i++) { + if (iscreateoptions[i].iscr == value) + return iscreateoptions[i].gridname; + } + return value; +} +/* + * 格式化是否是管理员 + */ + +function isManagerFormatter(value) { + for (var i = 0; i < ismanageroptions.length; i++) { + if (ismanageroptions[i].ism == value) + return ismanageroptions[i].name; + } + return value; +} + +/* + * 格式化是否是管理员 + */ +function isProcessplanningFormatter(value) { + for (var i = 0; i < isprocessplanning.length; i++) { + if (isprocessplanning[i].ispl == value) + return isprocessplanning[i].gridpl; + } + return value; +} +/* + * 格式化标题 + */ + +function isTitleFormatter(value) { + + return "" + value + + ""; +} +/* + * 方法入口 + */ + +$(function() { +window.top.$.simpleAlert("人员添加页面"); + $('#userGrid').datagrid({ + title : 高级用户管理, + iconCls : 'icon_user', + nowrap : false, + striped : true, + pagination : false, + rownumbers : true, // 显示列号 + idField : 'userid', // 指定标识字段 + singleSelect : false,// 指定复选框的选择模式 true 为单选 false 为多选 + url : encodeURI('./w?sid=' + $("#sid").val() + + '&cmd=com.actionsoft.apps.coe.pal_teamuser_grid_data_query'), + columns : [[{ + field : 'ck', + checkbox : true + }, { + field : 'userid', + title : 'ID', + editor : 'text', + width : 180, + hidden : true + }, { + field : 'username', + title : 账户, + align:'left', + editor : { + type : 'text', + + options : {} + + }, + formatter : isTitleFormatter, + width : 335 + }, + + { + field : 'iscreate', + title : 新建小组权限, + align:'left', + editor : { + type : 'combobox', + options : { + valueField : 'iscr', // value + textField : 'gridname', // name + data : iscreateoptions, + required : true, + missingMessage : 此项必须填写 + } + + }, + + width : 119, + formatter : isCreateFormatter + }, { + field : 'ismanager', + title : 控制台管理权限, + align:'left', + editor : { + type : 'combobox', + options : { + valueField : 'ism', // value + textField : 'name', // name + data : ismanageroptions, + required : true, + missingMessage : 此项必须填写 + } + }, + width : 119, + formatter : isManagerFormatter + + }, + { + field : 'isprocessplanning', + title : 流程规划权限, + align:'left', + editor : { + type : 'combobox', + options : { + valueField : 'ispl', // value + textField : 'gridpl', // name + data : isprocessplanning, + required : true, + missingMessage : 此项必须填写 + } + + }, + + width : 100, + formatter : isProcessplanningFormatter + } + + + ]], + toolbar : [{ + text : 增加, + iconCls : 'icon_add', + handler : function() { + var iframes = document.getElementById("showiframe"); + iframes.src = encodeURI('./w?sid=' + + $("#sid").val() + + '&cmd=com.actionsoft.apps.coe.pal_teamuser_grid_show_page&id=0&flag=1'); + + $('#dd').dialog({ + + title : 添加用户, + modal : true, + iconCls : 'icon_user', + buttons : [{ + + text : 保存, + + //iconCls : 'icon_save', + + handler : function() { + saveUserMessage(); + + } + + }, { + + text : "关闭", + + handler : function() { + $('#dd').dialog('close'); + + } + + }] + + }); + } + },'-', { + text : 编辑, + iconCls : 'icon_edit', + handler : function(rows) { + var rows = $('#userGrid').datagrid('getSelections'); + if (rows && rows.length == 1 ) { + editGrid(); + }else if(rows && rows.length >1){ + $.messager.window.top.$.simpleAlert(提示, 编辑状态下只能选择一个_请重新选择 , "info"); + }else{ + $.messager.window.top.$.simpleAlert(提示, 没有选择编辑对象, "info"); + } + } + }, '-', { + text : 删除, + iconCls : 'icon_remove', + handler : function(rows) { + var rows = $('#userGrid').datagrid('getSelections'); + if (rows && rows.length > 0) { + removeGrid(); + } else { + $.messager.window.top.$.simpleAlert(提示, 没有选择删除记录, "info"); + } + } + }], + onBeforeLoad : function() { + $(this).datagrid('rejectChanges'); + }, + onLoadSuccess: function(){ + loadUser(); + }, + // 双击修改 + onDblClickRow : function(rowIndex, rowData) { + var iframes = document.getElementById("showiframe"); + iframes.src = encodeURI('./w?sid=' + $("#sid").val() + + '&cmd=com.actionsoft.apps.coe.pal_teamuser_grid_show_page&id=' + + rowData.userid + '&flag=2'); + $('#dd').dialog({ + + title : 高级用户修改, + modal : true, + iconCls : 'icon_user', + + buttons : [{ + text : 保存, + handler : function() { + saveUserMessage(rowData.username.trim()); + } + }, { + text : "关闭", + handler : function() { + $('#dd').dialog('close'); + + } + + }] + + }); + } + + }); +}); +//保存数据 + function saveUserMessage(select){ + var usernamelength=showiframe.document.getElementById("username").value.length; + if(usernamelength>100){ + $.messager.window.top.$.simpleAlert(提示, 账户名称过长已经超出个字符请重新输入, "info"); + }else{ + var userName = showiframe.document.getElementById("username").value; + if(''== userName.trim()){ + $.messager.window.top.$.simpleAlert(提示, '[账户]不允许为空', "info"); + return false; + } + for(var i=0; i < userList.length; i++){ + var tmpUser = userList[i]; + if(tmpUser.indexOf(userName) != -1){ + if(select && userName == select){ + + }else{ + $.messager.window.top.$.simpleAlert(提示, '[账户]已存在', "info"); + return false; + } + + } + } + var saveData = '_AWSSHEETMODIFYCOUNT{' + 1 + + '}AWSSHEETMODIFYCOUNT_ '; + saveData = saveData + '_AWSSHEETMODIFYRECORD' + 0 + + '{'; + saveData = saveData + + '_id{' + + showiframe.document.getElementById("id").value + + '}id_' + saveData = saveData + + '_username{' + + showiframe.document + .getElementById("username").value + + '}username_' + saveData = saveData + + '_iscreate{' + + showiframe.document + .getElementById("iscreate").value + + '}iscreate_' + saveData = saveData + + '_ismanager{' + + showiframe.document + .getElementById("ismanager").value + + '}ismanager_' + saveData = saveData + + '_isprocessplanning{' + + showiframe.document + .getElementById("isprocessplanning").value + + '}isprocessplanning_' + saveData = saveData + '}AWSSHEETMODIFYRECORD' + 0 + + '_'; + + $.ajax({ + type : "POST", + url : './w?sid='+encodeURI($("#sid").val())+ '&cmd=com.actionsoft.apps.coe.pal_teamuser_grid_save', + data : "saveData=" + saveData, + + success : function(msg) { + + if (msg) { + $.messager.window.top.$.simpleAlert(提示, 保存成功, "info"); + $('#dd').dialog('close'); + $('#userGrid').datagrid("reload"); + + } else { + $.messager.window.top.$.simpleAlert(提示, 保存失败, "info"); + } + + } + }); + } + + } + + + +// 给下拉框赋值 +function fuzhi() { + var isc = $("#isc").val(); + var ism = $("#ism").val(); + var ispl = $("#ispl").val(); + $('#iscreate option:eq(' + isc + ')').attr('selected', 'selected'); + $('#ismanager option:eq(' + ism + ')').attr('selected', 'selected'); + $('#isprocessplanning').val(ispl); +} +// 选择人员 +function openmailtree(mail_target) { + var metaDataMapUUID = 'ORGOPTIONORGUSER.UID'+mail_target+'USER|'; + var mail_user = ''; + var url=encodeURI('./w?sid='+ $('input[name=sid]').val()+ '&cmd=CLIENT_UI_ADVANCEADDRESS_OPEN&groupstyle=0&mail_user='+ mail_user + '&metaDataMapUUID=' + metaDataMapUUID); + window.open(url,'_blank','left=50,top=50,width=360,height=380,location=no,menubar=no,toolbar=no,status=no,directories=no,scrollbars=no,resizable=no'); + return false; +} + +// 保存表格数据 +function saveGridDate(flag) { + + // 恢复到不可编辑状态 + $('#userGrid').datagrid('endEdit', lastIndex); + // 重置下 lastIndex + lastIndex = 9999; + var rows = $('#userGrid').datagrid('getChanges'); + if (rows.length > 0) { + var saveData = '_AWSSHEETMODIFYCOUNT{' + rows.length + + '}AWSSHEETMODIFYCOUNT_ ';; + for (var i = 0; i < rows.length; i++) { + var row = rows[i]; + saveData = saveData + '_AWSSHEETMODIFYRECORD' + i + '{'; + saveData = saveData + '_id{' + row.userid + '}id_' + saveData = saveData + '_username{' + row.username + '}username_' + saveData = saveData + '_iscreate{' + row.iscreate + '}iscreate_' + saveData = saveData + '_ismanager{' + row.ismanager + '}ismanager_' + + saveData = saveData + '_isprocessplanning{' + row.isprocessplanning + '}isprocessplanning_' + + saveData = saveData + '}AWSSHEETMODIFYRECORD' + i + '_'; + } + $.ajax({ + type : "POST", + url : './w?sid=' + encodeURI($("#sid").val())+ '&cmd=com.actionsoft.apps.coe.pal_teamuser_grid_save', + data : "saveData=" + saveData, + success : function(msg) { + $('#userGrid').datagrid('acceptChanges'); + if (flag) { + if (msg) { + $.messager.window.top.$.simpleAlert(提示, 保存成功, "info"); + } else { + $.messager.window.top.$.simpleAlert(提示, 保存失败, "info"); + } + } + } + }); + } +} +// 删除表格数据 +function removeGrid() { + var rows = $('#userGrid').datagrid('getSelections'); + if (rows && rows.length > 0) { + $.messager.confirm(提示, 确认要删除该记录, function(b) { + if (b) { + var ids = ''; + for (var i = 0; i < rows.length; i++) { + var row = rows[i]; + ids = ids + row.userid + ' '; + } + $.ajax({ + type : "POST", + url : './w?sid=' + encodeURI($("#sid").val()) + '&cmd=com.actionsoft.apps.coe.pal_teamuser_grid_remove', + data : "ids=" + ids, + success : function(msg) { + if (msg) { + $('#userGrid').datagrid('acceptChanges'); + for (var i = 0; i < rows.length; i++) { + var row = rows[i]; + var index = $('#userGrid').datagrid( + 'getRowIndex', row); + $('#userGrid').datagrid('deleteRow', index); + } + $.messager.window.top.$.simpleAlert(提示, 删除成功, "ok"); + } else { + $.messager.window.top.$.simpleAlert(提示, 删除失败, "info"); + } + } + }); + } + }); + } +} +// 编辑表格数据 +function editGrid() { + var rows = $('#userGrid').datagrid('getSelections'); + if (rows && rows.length == 1) { + var iframes = document.getElementById("showiframe"); + iframes.src = encodeURI('./w?sid=' + $("#sid").val() + + '&cmd=com.actionsoft.apps.coe.pal_teamuser_grid_show_page&id=' + + rows[0].userid + '&flag=2'); + $('#dd').dialog({ + + title : 高级用户修改, + modal : true, + iconCls : 'icon_user', + + buttons : [{ + text : 保存, + handler : function() { + saveUserMessage(rows[0].username.trim()); + } + }, { + text : "关闭", + handler : function() { + $('#dd').dialog('close'); + + } + + }] + + }); + }else if(rows && rows.length >1){ + $.messager.window.top.$.simpleAlert(提示, 编辑状态下只能选择一个_请重新选择, "info"); + }else{ + $.messager.window.top.$.simpleAlert(提示, 没有选择编辑对象, "info"); + } +} +function loadUser(){ + userList = []; + $('.datagrid-body td[field=username] a').each(function(){ + userList.push($(this).text().trim()); + }); +} +String.prototype.trim = function(){ + return this.replace(/(\ )+$/,'').replace(/^\s+|\s+$/,""); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.login.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.login.js new file mode 100644 index 00000000..768c1ce6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.login.js @@ -0,0 +1,100 @@ +function inCOE() { + document.getElementById('AWSINAdministrator').target = "_self"; + if (document.AWSINAdministrator.userid.value == "") { + $.simpleAlert(getLanguage('fee70b6d6d0577c04beab7541a39edb6'), + 'warning', 2000); + return false; + } + if (document.AWSINAdministrator.pwd.value == "") { + $.simpleAlert(getLanguage('fee70b6d6d0577c04beab7541a39edb6'), + 'warning', 2000); + return false; + } + + $.cookie("coe_userid", document.AWSINAdministrator.userid.value); + $.cookie("coe_pwd", document.AWSINAdministrator.pwd.value); + + /*document.AWSINAdministrator.cmd.value = 'CLIENT_USER_LOGIN'; + var parm = "deviceType=pc" + document.AWSINAdministrator.deviceType.value + + "&lang=cn&sid=" + document.AWSINAdministrator.sid.value + "&pwd=" + + document.AWSINAdministrator.pwd.value+"&userid="+document.AWSINAdministrator.userid.value; + alert(parm) + $.ajax({ + type : "POST", + url : "./r/jd", + dataType : "json", + data :parm, + success : function(r) { + alert(r) + // 将按钮置为可用 + if (typeof(r.data) == 'undefined' + || typeof(r.data.sid) == 'undefined') { + $.simpleAlert(r.msg, r.result, 2000); + } else { + + } + } + }); + return;*/ + + document.AWSINAdministrator.cmd.value = 'com.actionsoft.apps.coe.pal_user_login'; + document.AWSINAdministrator.deviceType.value = 'pc'; + + awsui.ajax.request({ + type : "POST", + url : "../r/jd", + data : $('#AWSINAdministrator').serialize(), + ok : function(r) { + // refresh page,submit to aws console home + document.AWSINAdministrator.cmd.value = "com.actionsoft.apps.coe.pal_user_home_page"; + document.AWSINAdministrator.sid.value = r.data.sid; + document.AWSINAdministrator.action = "../r/w"; + document.AWSINAdministrator.submit(); + return false; + }, + err : function(r) { + } + }); + return false; +} + +function onFocus() { + document.AWSINAdministrator.userid.focus(); + lang = getPortalLang(); + document.AWSINAdministrator.PORTAL_LANG.value = lang; +} +function loadLang() { + + document.getElementById('lang').value = getPortalLang(); + document.getElementById('userid').focus(); + try { + document.getElementById('userid').placeholder = getLanguage('fee70b6d6d61ff476964f3f6737e8ret'); + document.getElementById('pwd').placeholder = getLanguage('fee70b6d6d61ff4768cda2abf128e384'); + document.getElementById('loginCommand').innerHTML = getLanguage('fee70b6d6d61ff4d7422f09cf894bb25'); + document.getElementById('awsCopyRight').innerHTML = getLanguage('fee70b6d6d61ff47139f7ef41dda7711'); + } catch (e) { + } +} + +window.onload = function() { + loadLang(); + +} + +!(function() { + if (langData) { + + } +})(); + +function setDefaultUser() { + var userid = $.cookie("coe_userid"); + var pwd = $.cookie("coe_pwd"); + if (userid != undefined && pwd != undefined) { + $("#userid").val(userid); + $("#pwd").val(pwd); + } else { + $("#userid").val(""); + $("#pwd").val(""); + } +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.nav.channel.default.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.nav.channel.default.js new file mode 100644 index 00000000..3deb76e3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.nav.channel.default.js @@ -0,0 +1,12 @@ +jQuery(function(){ + + $(".nav").children("[classImpl='default']").each(function(){ + $(this).unbind("click.def").bind("click.def",function(){ + var data ={ + "channelUUID" :$(this).attr("id") + }; + reSetSlider(data); + }); + + }); +}); diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.nav.channel.team.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.nav.channel.team.js new file mode 100644 index 00000000..87321888 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.nav.channel.team.js @@ -0,0 +1,34 @@ +jQuery(function(){ + //绑定出发事件 + $(".nav").children("[classImpl='item']").each(function(){ + var chUUID= $(this).attr("id"); + $(this).find('li').each(function(){ + $(this).unbind("click.item").bind("click.item",function(){ + var create = $(this).attr("create"); + if(create == undefined){ //流程小组 + var proUUID = $(this).attr("id"); + var name=$(this).find("a").html(); + var data ={ + "projectUUID":proUUID, + "channelUUID":chUUID + }; + $(".nav").find('.active').removeClass("active"); + $("#"+chUUID).addClass("active"); + $("li#"+proUUID).data(proUUID+"_name",name.replace(">",">")); + reSetSlider(data); + $(".nav_slider_button").data("item_button_project_uuid",proUUID); + } else { //新建 + openCreateProcessTeam(''); + } + + }); + }); + + }); + +}); + +//流程分类再造,【变量需要处理】 +function openEditDimension(){ + openPublicdialogUrl(AWSBPM流程库,"COE_TEAM_DIMENSION_MAIN",("&projectId="+$(".nav_slider_button").data("item_button_project_uuid"))); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.designer.shapes.aws.org.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.designer.shapes.aws.org.js new file mode 100644 index 00000000..32cf7b21 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.designer.shapes.aws.org.js @@ -0,0 +1,527 @@ +var checkedOrgList = {};// 记录最终结果 +var setting = {}; +var checkTree; + +$(document).ready(function() { + initSetting(); + checkedOrgList = checkedList; + checkTree = awsui.tree.init($("#tree"), setting); + // 初始化已选中 + initCheckedList(); + // 初始化搜索 + treeQuickSearch(); +}); + +// 初始化树配置 +function initSetting() { + setting = { + checkbox : refMultiple, + checkInherit : false, + autoHeight: true, + animate: true, + animateTime: 300, + event : { + beforeExpand : loadData, + onCheck : getCurrentCheck, + onClick: clickRadioCheckFileNode + }, + dataModel: { + data: treeData + } + } +} + +function loadData(node) { + if (!checkTree.existsChildren(node.id)) { + var type = node.type; + var uuid = node.uuid; + var params = { + type : type, + uuid : uuid, + pid : node.id, + scope : JSON.stringify(refScope), + multiple : refMultiple + }; + var dataModel = { + url : "./jd?cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_aws_org_tree_node_query&sid=" + $("#sid").val(), + method : "POST", + dataType : "json", + params : params + } + checkTree.refreshNode({ + id : node.id, + dataModel : dataModel + }); + } + // 数据选中设置 + initCheckbox(); +} + +// 初始化多选框选中状态 +function initCheckbox() { + for (var i in checkedOrgList) { + if(checkedOrgList[i].type == 'department') {// 设置选中 + $('#tree').find('input[value=aws_node_department_' + i + ']').attr("checked",true); + } + if(checkedOrgList[i].type == 'user') {// 设置选中 + $('#tree').find('input[value=aws_node_user_' + i + ']').attr("checked",true); + } + if(checkedOrgList[i].type == 'role') {// 设置选中 + $('#tree').find('input[value=aws_node_role_' + i + ']').attr("checked",true); + } + if(checkedOrgList[i].type == 'position') {// 设置选中 + $('#tree').find('input[value=aws_node_position_' + i + ']').attr("checked",true); + } + } +} + +// 单选点击组织架构 +function clickRadioCheckFileNode(node) { + if (!refMultiple && refScope.indexOf(node.type) > -1 && (node.type == 'department' || node.type == 'position' || node.type == 'user' || node.type == 'role')) { + checkedOrgList = {}; + var obj = {}; + obj.id = node.uuid; + obj.type = node.type; + obj.name = node.name; + checkedOrgList[node.uuid] = obj; + // 初始化右侧列表 + initCheckedList(); + } +} + +//多选选中/取消处理 +function getCurrentCheck(dom, node) { + closeProcessSearchDialog(); + // 每次展开都进行数据初始化选中 + // node.type : company,department,user,roleGroup,role + // 不做级联选择 + + if(dom[0].checked == true) {// 选中 + var obj = {}; + obj.id = node.uuid; + obj.type = node.type; + obj.name = node.name; + checkedOrgList[node.uuid] = obj; + } else { + // 无子节点,直接删除 + delete checkedOrgList[node.uuid]; + } + // 初始化右侧列表 + initCheckedList(); +} + +// 初始化右侧数据列表 +function initCheckedList() { + var minLength = 7; + $("#checkedData").empty(); + var html = ''; + var deptHtml = ""; + var positionHtml = ""; + var userHtml = ""; + var roleHtml = ""; + // 按照部门,人员,角色排列 + var arr = []; + for (var i in checkedOrgList) { + arr.push(checkedOrgList[i]); + } + // 排序 + var asc = function(x, y) { + return (x.name > y.name) ? 1 : -1; + } + arr.sort(asc); + for (var i = 0; i < arr.length; i++) { + var checked = arr[i]; + var name = checked.name; + name = name.replace("<", "<").replace(">", ">").replace("\"", """); + var typeName = ''; + if (checked.type == 'department') { + typeName = '部门'; + deptHtml += getCheckedItemHtml(i, checked, name, typeName); + } + if (checked.type == 'position') { + typeName = '岗位'; + positionHtml += getCheckedItemHtml(i, checked, name, typeName); + } + if (checked.type == 'user') { + typeName = '成员'; + userHtml += getCheckedItemHtml(i, checked, name, typeName); + } + if (checked.type == 'role') { + typeName = '角色'; + roleHtml += getCheckedItemHtml(i, checked, name, typeName); + } + } + if (arr.length < minLength) { + for (var j = arr.length; j < minLength; j++) { + html += "
                                            • "; + } + } + $("#checkedData").html(deptHtml); + $("#checkedData").append(userHtml); + $("#checkedData").append(positionHtml); + $("#checkedData").append(roleHtml); + $("#checkedData").append(html); + + $("#checkedData .checked_div").unbind("mouseover").bind("mouseover", function(){ + $(this).find("img").show(); + }); + $("#checkedData .checked_div").unbind("mouseleave").bind("mouseleave", function(){ + $(this).find("img").hide(); + }); + + $("#checkedData img").unbind("click").bind("click", function(){ + deleteCheckedData(this); + }); +} + +function getCheckedItemHtml(i, checked, name, typeName) { + return "
                                            • " + + "
                                              " + + "
                                              " + name + "["+ typeName +"]
                                              " + + " " + + "
                                              " + + "
                                            • "; +} + +function deleteCheckedData(obj) { + closeProcessSearchDialog(); + var id = $(obj).parent().children('div').attr('data-id'); + var type = $(obj).parent().children('div').attr('data-type'); + $('#tree').find('input[value=aws_node_' + type + '_' + id + ']').attr("checked",false); + delete checkedOrgList[id]; + initCheckedList(); +} + +//获取关联组织 +function getRelevanceAwsData() { + return checkedOrgList; +} + +/*******树结构的快速搜索功能****************/ +var autoTime=600;//锟斤拷锟斤拷锟斤拷锟� +var autoInputObj;//input锟斤拷锟斤拷 +var autoCount=0; +var autoCountWait=0; +var autoURL; +var autoVal; +var wing_event_keyCode; +var autoIndex; +var autoLenght; + +$.fn.myAutoInput = function(url) { + autoURL=url; + var obj = $(this); + obj.keyup(function(event){ + wing_event_keyCode=event.keyCode; + autoVal=this.value; + autoInputObj=obj; + var auto = document.getElementById('autoDiv'); + if (wing_event_keyCode == 40 && auto.style.display == 'block') {//锟斤拷锟斤拷锟铰硷拷 + $("#autoDiv"+autoIndex).css("backgroundImage","url('')"); + $("#autoDiv"+autoIndex).css("color","black"); + $("#autoDiv"+autoIndex).css("fontWeight","normal"); + if(autoIndex>=autoLenght-1) + { + $("#autoDiv0").get(0).style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + $("#autoDiv0").css("color","white"); + autoIndex=0; + }else + { + autoIndex++; + $("#autoDiv"+(autoIndex)).get(0).style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + $("#autoDiv"+autoIndex).css("color","white"); + + } + return; + }else if (wing_event_keyCode == 38 && auto.style.display == 'block') {//锟斤拷锟斤拷锟较硷拷 + $("#autoDiv"+autoIndex).css("backgroundImage","url('')"); + $("#autoDiv"+autoIndex).css("color","black"); + $("#autoDiv"+autoIndex).css("fontWeight","normal"); + if(autoIndex<=0) + { + $("#autoDiv"+(autoLenght-1)).get(0).style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + $("#autoDiv"+(autoLenght-1)).css("color","white"); + autoIndex=autoLenght-1; + }else + { + autoIndex--; + $("#autoDiv"+(autoIndex)).get(0).style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + $("#autoDiv"+autoIndex).css("color","white"); + } + + return; + }else if (event.keyCode == 27) {//ESC + document.getElementById('autoDiv').style.display = 'none'; + return; + }else if (event.keyCode == 13)//ENTER + { + setValue($("#autoDiv"+autoIndex).data("value"),$("#autoDiv"+autoIndex).data("name")); + document.getElementById('autoDiv').style.display = 'none'; + return ; + }else + { + autoIndex=-1; + } + if(wing_event_keyCode==8) + { + autoCountWait=autoCount; + } + if(autoVal!=''){ + setTimeout("autoAjaxWaitFn()",autoTime); + autoCount++; + }else{ + document.getElementById("autoDiv").style.display='none'; + } + }); + return obj; +} + +function autoAjaxWaitFn() { + autoCountWait++; + if(autoCountWait!=autoCount) + { + return; + } + if (autoURL == "") { + return; + } + if (autoVal != " ") { + autoVal = autoVal.trim(); + } + if (autoVal == "") { + return; + } + $.post(autoURL, {"autoContent":autoVal,"cmd":"com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_aws_org_tree_query","sid":jQuery("#sid").val(),"wsId":jQuery("#wsId").val(),"ref": JSON.stringify(refObj)},autoajax, "json"); +} + +function autoajax(ro) { + closeProcessSearchDialog(); + $('#processSearchData').empty(); + var msg = ro.data.result; + if (msg == ""){ + return; + } + var tHtml = ''; + var uuidArr = []; + for(var i = 0; i < msg.length; i++) { + var tempArr = msg[i].value.split(','); + var uuid = tempArr[tempArr.length - 1]; + uuidArr.push(uuid); + var type = msg[i].type == 'role' ? '角色' : msg[i].type == 'user' ? '人员' : msg[i].type == 'position' ? '岗位' : '部门'; + tHtml += ''; + if (refMultiple) { + tHtml += ''; + } else { + tHtml += ''; + } + tHtml += '' + type + ''; + tHtml += '' + msg[i].ui + ''; + tHtml += ''; + } + $('#processSearchData').html(tHtml); + if (refMultiple) { + $("#processSearchData .awsui-checkbox").check();// 初始化多选框样式 + // 设置选中状态 + for(var i = 0; i < uuidArr.length; i++) { + var uuid = uuidArr[i]; + if (checkedOrgList[uuid] != undefined) { + $('#data_' + uuid).check("check"); + } + } + addCheckboxEvent();// 绑定多选框事件 + } else { + $("#processSearchData .awsui-radio").check();// 初始化单选框样式 + // 设置选中状态 + for(var i = 0; i < uuidArr.length; i++) { + var uuid = uuidArr[i]; + if (checkedOrgList[uuid] != undefined) { + $('#data_' + uuid).check("check"); + } + } + addRadioEvent();// 绑定单选框事件 + } + + $("#processTreeSearchDialog").dialog({ + title:'', + height:240, + model:false, + draggable : false, + scrollDiv:$("#processSearchList") + }); + $('#processTreeSearchDialog').css('top', '36px'); + $('#processTreeSearchDialog').css('left', '6px'); +} + +function treeQuickSearch() { + $("#queryInput").myAutoInput("./w"); + $("body").prepend("
                                              "); + $("#autoDiv").keydown(function(event){ + if(event.keyCode == 8) + { + event.keyCode=27; + var obj=autoInputObj.get(0); + obj.focus(); + obj.value=obj.value.slice(0,obj.value.length); + } + if (event.keyCode == 27) { + document.getElementById('autoDiv').style.display = 'none'; + } + }); + +} + +function divEvent2() { + try{ + document.getElementById('autoDiv').style.display = 'none'; + }catch(e){ + } +} + +document.onclick = divEvent2; + +function aotu_Move(obj) { + $(".aotuDivcontenr").css({"backgroundImage":"none","color":"black","fontWeight":"normal"}); + obj.style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + autoIndex=obj.id.substring(obj.id.length-1); + obj.style.color="white"; +} + +function aotu_Out(obj) { + obj.style.backgroundImage=""; + obj.style.color="black"; + obj.style.fontWeight="normal"; +} + +function aotu_click(obj) { + obj = obj.parentElement; + var id=obj.id.substring(6+1,obj.id.length); + setValue($("#autoDiv"+id).data("value"),$("#autoDiv"+id).data("name"), $("#autoDiv"+id).data("type")); +} + +function setValue(uuid,name,type) { + if(uuid == null) { + return; + } + var selected = ""; + if (type == 'department' || type == 'user') { + // 展开组织机构 + var dom = checkTree.getNodeDomById('aws_node_org'); + checkTree.expandNode(dom, true); + + var arr = uuid.split(','); + var selected = ""; + for(var i = 0; i < arr.length; i++) { + if (i == 0) { + // 展开单位 + var dom = checkTree.getNodeDomById('aws_node_company_' + arr[i]); + checkTree.expandNode(dom, true); + } else { + if (i < arr.length - 1){ + // 展开部门 + var dom = checkTree.getNodeDomById('aws_node_department_' + arr[i]); + checkTree.expandNode(dom, true); + } else { + selected = arr[i]; + } + } + } + } + if (type == 'role') { + // 展开组织机构 + var dom = checkTree.getNodeDomById('aws_node_role'); + checkTree.expandNode(dom, true); + // 展开角色组 + var arr = uuid.split(','); + var dom2 = checkTree.getNodeDomById('aws_node_roleGroup_' + arr[0]); + checkTree.expandNode(dom2, true); + selected = arr[1]; + } + if (type == 'position') {// 岗位 + // todo + } + setTimeout(function() { + var ele = document.getElementById('tree_li_aws_node_' + type + '_' + selected); + $('#leftData').scrollTop(ele.offsetTop); + checkTree.selectNode('aws_node_' + type + '_' + selected, true); + $("#queryInput").val("");//搜索框清空 + }, 200); +} + +//流程定位 +function positionTarget(uuid, name, type) { + closeProcessSearchDialog(); + setValue(uuid,name, type); +} +/*******树结构的快速搜索功能****************/ + +//关闭流程搜索dialog +function closeProcessSearchDialog() { + if (!$("#processTreeSearchDialog").is(":hidden")) { + $("#processTreeSearchDialog").dialog("close"); // 关闭 + } +} + +//多选框添加事件 +function addCheckboxEvent() { + $('#processSearchData .awsui-checkbox').off("ifChecked").on("ifChecked",function(){// 选中 + var uuids = $(this).attr('value'); + if (uuids == null) { + return; + } + var arr = uuids.split(','); + var uuid = arr[arr.length - 1]; + var type = $(this).attr('data-type'); + var name = $(this).attr('data-name'); + if (checkedOrgList[uuid] == undefined) { + var newObj = { + id : uuid, + name : name, + type : type + }; + checkedOrgList[uuid] = newObj; + } + // 初始化列表 + initCheckedList(); + // 树同步 + $('#tree').find('input[value=aws_node_' + type + '_' + uuid + ']').attr("checked",true); + }); + $('#processSearchData .awsui-checkbox').off("ifUnchecked").on("ifUnchecked",function(){// 取消选中 + var uuids = $(this).attr('value'); + if (uuids == null) { + return; + } + var arr = uuids.split(','); + var uuid = arr[arr.length - 1]; + var type = $(this).attr('data-type'); + if (checkedOrgList[uuid] != undefined) { + delete checkedOrgList[uuid]; + } + // 初始化列表 + initCheckedList(); + // 树同步 + $('#tree').find('input[value=aws_node_' + type + '_' + uuid + ']').attr("checked",false); + }); +} + +// 单选框添加事件 +function addRadioEvent() { + $('#processSearchData .awsui-radio').off("ifChecked").on("ifChecked",function(){// 选中 + var uuids = $(this).attr('value'); + if (uuids == null) { + return; + } + var arr = uuids.split(','); + var uuid = arr[arr.length - 1]; + var type = $(this).attr('data-type'); + var name = $(this).attr('data-name'); + checkedOrgList = {}; + var newObj = { + id : uuid, + name : name, + type : type + }; + checkedOrgList[uuid] = newObj; + // 初始化列表 + initCheckedList(); + }); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.designer.shapes.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.designer.shapes.js new file mode 100644 index 00000000..2c242efd --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.designer.shapes.js @@ -0,0 +1,866 @@ +var shapeIdsArr = []; +var josnArrObj = []; +var unSelectId = []; +var clickNodeId = ""; +var setting1 = {};// 普通关联,例如raci +var setting2 = {};// 流程关联,例如前后置流程 +var setting3 = {};// 关联形状和属性 + +var checkTree; + +function initSetting() { + setting1 = {// 普通关联,例如raci + checkbox : false, + autoHeight: true, + event : { + onClick : clickNode, + beforeExpand : loadData + } + }; + setting2 = {// 流程关联,例如前后置流程 + checkbox : relationMultiple, // true or false 是否启用tree节点的checkbox + checkInherit : false, // 是否启用父子节点选中继承事件,checkbox为true时有效 + autoHeight: true, + event : { + beforeExpand : loadData, + onCheck : getCurrentCheck, // onCheck: 点击checkbox时执行,返回当前节点对象和其数据对象 + onClick: clickRelationFileNode // onClick: 点击节点事件,返回当前点击的节点对象 + } + }; + setting3 = { + checkbox : true, + checkInherit : false, + autoHeight: true, + event : { + beforeExpand : loadData, + onCheck : getCurrentCheck, + onClick: clickNode + } + }; +} + +$(document).ready(function() { + initLayout();// 初始化布局 + initSetting();// 初始化树配置信息 + if (data.length > 1) { + var setting; + if(relationType == "file") {// 前后置流程等关联模型文件 + setting = setting2; + } else if(relationType == "shape"){ + setting = setting1; + } else { + setting = setting3 + } + setting.dataModel = { + data : data + }; + checkTree = awsui.tree.init($("#tree"), setting); + // if(relationType == "file") {// 前后置流程单独处理 + initCheck(); + // } + } + + writeRelationListHtml(); + treeQuickSearch(); +}); + +// 初始化布局 +function initLayout() { + if(relationType == "file") {// 前后置流程等单独处理 + $('.div_left').width('350px'); + $('.div_right').width('345px'); + $('.div_right').css('border-left', 'solid 0px rgb(206, 206, 206)'); + $('#queryInput').width('302px'); + $('#leftData').width('350px'); + $('#relationShapes').width('315px'); + $('.div_left').css('display', 'inline-block'); + $('.div_right').css('display', 'inline-block'); + } else { + $('.div_left').css('display', 'inline-block'); + $('.div_middle').css('display', 'inline-block'); + $('.div_right').css('display', 'inline-block'); + } +} + +// 初始化树结构选择 回显 +function initCheck() { + console.log('relationShapeList',relationShapeList) + if (relationType == 'file') { + for (var i = 0; i < relationShapeList.length; i++) { + let relationFileId = relationShapeList[i].relationFileId; + if ($("#ckb_" + relationFileId) != undefined) { + $("#ckb_" + relationFileId).check("option", "checked", true); + } + } + } else if (relationType == 'shape'){ + // for (var i = 0; i < relationShapeList.length; i++) { + // let relationShapeId = relationShapeList[i].relationShapeId; + // if ($("#ckb_" + relationShapeId) != undefined) { + // $("#ckb_" + relationShapeId).check("option", "checked", true); + // } + // } + } else { + console.log('关联文件和形状回显',relationShapeList) + for (var i = 0; i < relationShapeList.length; i++) { + let relationFileId = relationShapeList[i].relationFileId; + if ($("#ckb_" + relationFileId) != undefined) { + $("#ckb_" + relationFileId).check("option", "checked", true); + } + } + } +} + +// 前后置流程等文件关联 选中/取消选中监听 +function getCurrentCheck(dom, node) { + console.log('relationShapeList',relationShapeList) + closeProcessSearchDialog(); + var id = node.id; + var name = node.name; + if(relationType == 'file' || (relationType == 'shapeAndFile' && relationMultiple)) { // 关联文件 和 关联形状和文件多选 + if(dom[0].checked == true) {// 选中 + var containObj = false; + for (var i = 0; i < relationShapeList.length; i++) { + if (id == relationShapeList[i].relationFileId) { + containObj = true; + break; + } + } + if (!containObj) { + var newRelationObj = { + relationFileId : id, + relationShapeId : ' ', // 空格 + relationShapeText : name + }; + relationShapeList.push(newRelationObj); + } + } + else {// 取消选中 + var index = -1; + for (var i = 0; i < relationShapeList.length; i++) { + if (id == relationShapeList[i].relationFileId) { + index = i; + break; + } + } + if (index != -1) { + relationShapeList.splice(index, 1); + } + } + } else { // 关联形状和文件 单选 + if(dom[0].checked == true) { + var containObj = false; + for (var i = 0; i < relationShapeList.length; i++) { + if (id == relationShapeList[i].relationFileId) { + containObj = true; + break; + } + } + if (!containObj) { + var newRelationObj = { + relationFileId : id, + relationShapeId : ' ', // 空格 + relationShapeText : name + }; + if(relationShapeList.length == 0) { + relationShapeList.push(newRelationObj); + } else{ + for (var i = 0; i < relationShapeList.length; i++) { + let relationFileId = relationShapeList[i].relationFileId; + if ($("#ckb_" + relationFileId) != undefined) { + $("#ckb_" + relationFileId).check("option", "checked", false); + } + } + relationShapeList.length = 0 + relationShapeList.push(newRelationObj); + } + + } + } + else {// 取消选中 + var index = -1; + for (var i = 0; i < relationShapeList.length; i++) { + if (id == relationShapeList[i].relationFileId) { + index = i; + break; + } + } + if (index != -1) { + relationShapeList.splice(index, 1); + } + } + } + + writeRelationListHtml(); +} + +function searchEdit() { + if($("#searchEdit").val().trim().length > 0) {// 显示符合条件的 + var resultArr = []; + var copyArr = $.extend(true, [], josnArrObj); + var text = $("#searchEdit").val().trim().toUpperCase(); + for(var i = 0; i < copyArr.length; i++) { + var obj = copyArr[i]; + if (obj.text.toUpperCase().indexOf(text) != -1) {// 查询到 + resultArr.push(obj); + } + } + if(clickNodeId != "") { + $("#shapesInfo").empty(); + addShapeCheck(resultArr, clickNodeId); + for (var i = 0; i < relationShapeList.length; i++) { + var relationFileId = relationShapeList[i].relationFileId; + var relationShapeId = relationShapeList[i].relationShapeId; + if (relationFileId == clickNodeId && $("#" + relationShapeId) != undefined) { + $("#" + relationShapeId).check("option", "checked", true); + } + } + } + } else {// 全部显示 + if(clickNodeId != "") { + $("#shapesInfo").empty(); + addShapeCheck(josnArrObj, clickNodeId); + for (var i = 0; i < relationShapeList.length; i++) { + var relationFileId = relationShapeList[i].relationFileId; + var relationShapeId = relationShapeList[i].relationShapeId; + if (relationFileId == clickNodeId && $("#" + relationShapeId) != undefined) { + $("#" + relationShapeId).check("option", "checked", true); + } + } + } + } +} + +function loadData(treeNode) { + // 如果是父节点并且存在子节点执行加载 + if (treeNode) { + var url = "com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_tree_node"; + if(relationType == "file") { + url = "com.actionsoft.apps.coe.pal_pl_repository_designer_process_models_tree_node"; + } + var dataModel = { + url : "./w?sid=" + $("#sid").val() + + "&cmd=" + url + "&pid=" + treeNode.id + "&methodScope=" + method + + "&wsId=" + $("#wsid").val(), + method : "POST", + dataType : "json" + } + checkTree.refreshNode({ + id : treeNode.id, + dataModel : dataModel + }); + } + // if(relationType == "file") {// 前后置流程单独处理 + initCheck(); + // } +} + +function toggleRoot() { + $.each(checkTree.getRootNode(), function(i, node) { + checkTree.toggleCheck(node); + }); +} + +// 关联模型文件点击树进行选择 +function clickRelationFileNode(treeNode) { + if (!relationMultiple && treeNode.id.length == 36) {// 单选下点击即选择 + if (method.indexOf('.') > -1) { + if (treeNode.plMethodId != method && treeNode.pid) { + $.simpleAlert("不支持关联的模型", "info", 1000); + return; + } + } else { + if (treeNode.plCategory != method) { + $.simpleAlert("不支持关联的模型", "info", 1000); + return; + } + } + var newRelationObj = { + relationFileId : treeNode.id, + relationShapeId : '', + relationShapeText : treeNode.name + }; + relationShapeList = []; + relationShapeList.push(newRelationObj); + writeRelationListHtml(); + } +} + +// 关联形状节点点击树查询子节点列表 +function clickNode(treeNode) { + $("#shapesInfo").empty(); + $("#searchEdit").val("");//搜索框清空 + var url = treeNode.url; + if (relationType != "file" && parent.chartId && treeNode.id == parent.chartId) { + $.simpleAlert("不支持关联的模型", "info", 1000); + return; + } + if (url == "") { + return; + } + var title = treeNode.name; + $.ajax({ + url : url, + data : { + shapeId : parent.selectShape ? parent.selectShape.id : "", + attrId: attrId + }, + success : function(msg) { + if (msg.result == "ok") { + var josnArr = msg.data.list; + if (josnArr) { + josnArrObj = josnArr; + shapeIdsArr = []; + clickNodeId = treeNode.id; + addShapeCheck(josnArr, treeNode.id); + } + for (var i = 0; i < relationShapeList.length; i++) { + var relationFileId = relationShapeList[i].relationFileId; + var relationShapeId = relationShapeList[i].relationShapeId; + if (relationFileId == treeNode.id && $("#" + relationShapeId) != undefined) { + $("#" + relationShapeId).check("option", "checked", true); + } + } + } + } + }); +} +// 增加形状选项 +function addShapeCheck(josnArr, fileId) { + var str = ''; + var nocheck = false; + var treeNode = checkTree.getNodeById(fileId); + // 关联范围限制 + if (method.indexOf('.') > -1) { + if (treeNode.plMethodId != method && treeNode.pid) { + if (relationType == 'shape') { + nocheck = true; + } + } + } + for (var i = 0; i < josnArr.length; i++) { + if (relationMultiple) { + str += '
                                            • ' + + ' ' + + ' ' + + '
                                            • '; + } else { + str += '
                                            • ' + + ' ' + + ' ' + + '
                                            • '; + } + } + $("#shapesInfo").append(str); + $("#shapesInfo .awsui-checkbox, #shapesInfo .awsui-radio").check(); + $("#shapesInfo .awsui-checkbox, #shapesInfo .awsui-radio").on("ifToggled",function(){ + checkShape($(this)); + }); +} +//选中/不选中某个关联性质 +function checkShape(obj) { + console.log('type',relationType) + console.log('relationShapeList',relationShapeList) + if (!relationMultiple) { + relationShapeList.splice(0, relationShapeList.length); + } + var relationShapeId = obj.attr("id"); + if (obj.prop("checked") == true) { + var containObj = false; + for (var i = 0; i < relationShapeList.length; i++) { + if (relationShapeId == relationShapeList[i].relationShapeId) { + containObj = true; + break; + } + } + if (!containObj) { + var newRelationObj = { + relationFileId : obj.attr("fileId"), + relationShapeId : relationShapeId, + relationShapeText : obj.val() + }; + relationShapeList.push(newRelationObj); + } + + } else { + var index = -1; + for (var i = 0; i < relationShapeList.length; i++) { + if (relationShapeId == relationShapeList[i].relationShapeId) { + index = i; + break; + } + } + if (index != -1) { + relationShapeList.splice(index, 1); + } + } + writeRelationListHtml(); +} + +//右侧关联图形列表 +function writeRelationListHtml() { + var minLength = 7; + $("#relationShapes").empty(); + var html = ""; + for (var i = 0; i < relationShapeList.length; i++) { + var relationShapeText = relationShapeList[i].relationShapeText; + relationShapeText = relationShapeText.replace("<", "<").replace(">", ">").replace("\"", """); + html += "
                                            • " + + "
                                              " + + "
                                              " + relationShapeText + "
                                              " + + " " + + "
                                              " + + "
                                            • "; + } + if (relationShapeList.length < minLength) { + for (var j = relationShapeList.length; j < minLength; j++) { + html += "
                                            • "; + } + } + $("#relationShapes").html(html); + + $("#relationShapes .relation_div").unbind("mouseover").bind("mouseover", function(){ + $(this).find("img").show(); + }); + $("#relationShapes .relation_div").unbind("mouseleave").bind("mouseleave", function(){ + $(this).find("img").hide(); + }); + + $("#relationShapes img").unbind("click").bind("click", function(){ + deleteRelation($(this)); + }); +} + +//删除一条关联关系 +function deleteRelation(obj) { + var index = obj.parent().attr("index"); + relationShapeList.splice(index, 1); + writeRelationListHtml(); + if(relationType == 'file') {// 前后置流程单独处理 + closeProcessSearchDialog(); + let relationFileId = obj.siblings("div").attr("fileId"); + if ($("#ckb_" + relationFileId) != undefined) { + $("#ckb_" + relationFileId).check("option", "checked", false); + } + } else if(relationType == 'shape'){ + let relationShapeId = obj.siblings("div").attr("shapeId"); + if ($("#" + relationShapeId) != undefined) { + $("#" + relationShapeId).check("option", "checked", false); + } + } else { + let relationFileId = obj.siblings("div").attr("fileId"); + let relationShapeId = obj.siblings("div").attr("shapeId"); + if ($("#ckb_" + relationFileId) != undefined) { + $("#ckb_" + relationFileId).check("option", "checked", false); + } + if ($("#" + relationShapeId) != undefined) { + $("#" + relationShapeId).check("option", "checked", false); + } + } +} + +//获取关联信息 +function getRelationShapeInfos() { + var relations = new Array(); + $("#relationShapes div.relation_div").each(function(){ + var obj = { + fileId : parent.ruuid ? parent.ruuid : modelId, + shapeId : parent.selectShape ? parent.selectShape.id : "", + shapeText : parent.selectShape ? parent.selectShape.text : "", + attrId : attrId, + relationFileId : $(this).find("div.text-overflow").attr("fileId"), + relationShapeId : $(this).find("div.text-overflow").attr("shapeId"), + relationShapeText : $(this).find("div.text-overflow").text() + }; + relations.push(obj); + }); + + return relations; +} + +/*******树结构的快速搜索功能****************/ +var autoTime=600;//锟斤拷锟斤拷锟斤拷锟� +var autoInputObj;//input锟斤拷锟斤拷 +var autoCount=0; +var autoCountWait=0; +var autoURL; +var autoVal; +var wing_event_keyCode; +var autoIndex; +var autoLenght; + +$.fn.myAutoInput = function(url) { + autoURL=url; + var obj = $(this); + obj.keyup(function(event){ + wing_event_keyCode=event.keyCode; + autoVal=this.value; + autoInputObj=obj; + var auto = document.getElementById('autoDiv'); + if (wing_event_keyCode == 40 && auto.style.display == 'block') {//锟斤拷锟斤拷锟铰硷拷 + $("#autoDiv"+autoIndex).css("backgroundImage","url('')"); + $("#autoDiv"+autoIndex).css("color","black"); + $("#autoDiv"+autoIndex).css("fontWeight","normal"); + if(autoIndex>=autoLenght-1) + { + $("#autoDiv0").get(0).style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + $("#autoDiv0").css("color","white"); + autoIndex=0; + }else + { + autoIndex++; + $("#autoDiv"+(autoIndex)).get(0).style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + $("#autoDiv"+autoIndex).css("color","white"); + + } + return; + }else if (wing_event_keyCode == 38 && auto.style.display == 'block') {//锟斤拷锟斤拷锟较硷拷 + $("#autoDiv"+autoIndex).css("backgroundImage","url('')"); + $("#autoDiv"+autoIndex).css("color","black"); + $("#autoDiv"+autoIndex).css("fontWeight","normal"); + if(autoIndex<=0) + { + $("#autoDiv"+(autoLenght-1)).get(0).style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + $("#autoDiv"+(autoLenght-1)).css("color","white"); + autoIndex=autoLenght-1; + }else + { + autoIndex--; + $("#autoDiv"+(autoIndex)).get(0).style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + $("#autoDiv"+autoIndex).css("color","white"); + } + + return; + }else if (event.keyCode == 27) {//ESC + document.getElementById('autoDiv').style.display = 'none'; + return; + }else if (event.keyCode == 13)//ENTER + { + setValue($("#autoDiv"+autoIndex).data("value"),$("#autoDiv"+autoIndex).data("name")); + document.getElementById('autoDiv').style.display = 'none'; + return ; + }else + { + autoIndex=-1; + } + if(wing_event_keyCode==8) + { + autoCountWait=autoCount; + } + if(autoVal!=''){ + setTimeout("autoAjaxWaitFn()",autoTime); + autoCount++; + }else{ + document.getElementById("autoDiv").style.display='none'; + } + }); + return obj; +} + +function autoAjaxWaitFn() { + autoCountWait++; + if(autoCountWait!=autoCount) + { + return; + } + if (autoURL == "") { + return; + } + if (autoVal != " ") { + autoVal = autoVal.trim(); + } + if (autoVal == "") { + return; + } + $.post(autoURL, {"autoContent":autoVal,"cmd":"com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_tree_query","sid":jQuery("#sid").val(),"wsId":jQuery("#wsid").val(),"category":category},autoajax, "json"); +} + +function autoajax(ro) { + if(relationType == 'file') {// 前后置流程 + closeProcessSearchDialog(); + $('#processSearchData').empty(); + var msg = ro.data.result; + if (msg == ""){ + return; + } + var tHtml = ''; + var uuidArr = []; + for(var i = 0; i < msg.length; i++) { + var tempArr = msg[i].value.split(','); + var uuid = tempArr[tempArr.length - 1]; + uuidArr.push(uuid); + tHtml += ''; + if (relationMultiple) { + tHtml += ''; + } else { + tHtml += ''; + } + tHtml += '' + msg[i].ui + ''; + tHtml += ''; + } + $('#processSearchData').html(tHtml); + if (relationMultiple) { + $("#processSearchData .awsui-checkbox").check();// 初始化多选框样式 + // 设置选中状态 + for(var i = 0; i < uuidArr.length; i++) { + var uuid = uuidArr[i]; + for (var j = 0; j < relationShapeList.length; j++) { + if (uuid == relationShapeList[j].relationFileId) { + $('#data_' + uuid).check("check"); + break; + } + } + } + addCheckboxEvent();// 绑定多选框事件 + } else { + $("#processSearchData .awsui-radio").check();// 初始化单选框样式 + // 设置选中状态 + for(var i = 0; i < uuidArr.length; i++) { + var uuid = uuidArr[i]; + for (var j = 0; j < relationShapeList.length; j++) { + if (uuid == relationShapeList[j].relationFileId) { + $('#data_' + uuid).check("check"); + break; + } + } + } + addRadioEvent();// 绑定单选框事件 + } + + $("#processTreeSearchDialog").dialog({ + title:'', + height:240, + model:false, + draggable : false, + scrollDiv:$("#processSearchList") + }); + $('#processTreeSearchDialog').css('top', '36px'); + $('#processTreeSearchDialog').css('left', '6px'); + } else { + var msg = ro.data.result; + var isBeyond = ro.data.isBeyond; + $("#autoDiv").html(""); + var auto = document.getElementById('autoDiv'); + var txt = autoInputObj.get(0); + if (msg == ""){ + auto.style.display = 'none'; + // $.simpleAlert('没有相关数据'); + return; + } + autoLenght=msg.length; + if(autoLenght > 10) { + $('#autoDiv').height("250px"); + } else { + var hei = autoLenght * 25 + 10; + $('#autoDiv').height(hei+"px"); + } + for(var i = 0; i < autoLenght; i++){ + var icon; + var margin; + icon = ""; + margin = "margin-left:5px;"; + $("#autoDiv").append("
                                              " + + icon + + "" + msg[i].ui + "" + + "
                                              "); + $("#autoDiv"+i).data("value",msg[i].value); + $("#autoDiv"+i).data("name",msg[i].name); + } + // 锟斤拷锟矫诧拷锟轿伙拷锟� + var x = autoInputObj.offset().left; + var y = autoInputObj.offset().top; + var wing_auto=$(auto); + wing_auto.css("left",x); + wing_auto.css("top",y + txt.offsetHeight); + $("#autoDiv").css("minWidth",txt.offsetWidth); + + // 锟斤拷锟斤拷锟斤拷锟斤拷锟绞撅拷锟� + if (autoLenght == 1 && $("#autoDiv0").data("value") == txt.value) { + auto.style.display = 'none'; + } + else { + auto.style.display = 'block'; + } + } +} + +function treeQuickSearch() { + $("#queryInput").myAutoInput("./w"); + $("body").prepend("
                                              "); + $("#autoDiv").keydown(function(event){ + if(event.keyCode == 8) + { + event.keyCode=27; + var obj=autoInputObj.get(0); + obj.focus(); + obj.value=obj.value.slice(0,obj.value.length); + } + if (event.keyCode == 27) { + document.getElementById('autoDiv').style.display = 'none'; + } + }); + +} + +function divEvent2() { + try{ + document.getElementById('autoDiv').style.display = 'none'; + }catch(e){ + } +} + +document.onclick = divEvent2; + +function aotu_Move(obj) { + $(".aotuDivcontenr").css({"backgroundImage":"none","color":"black","fontWeight":"normal"}); + obj.style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + autoIndex=obj.id.substring(obj.id.length-1); + obj.style.color="white"; +} + +function aotu_Out(obj) { + obj.style.backgroundImage=""; + obj.style.color="black"; + obj.style.fontWeight="normal"; +} + +function aotu_click(obj) { + obj = obj.parentElement; + var id=obj.id.substring(6+1,obj.id.length); + setValue($("#autoDiv"+id).data("value"),$("#autoDiv"+id).data("name")); +} + +function setValue(uuid,name) { + if(uuid == null) { + return; + } + var arr = uuid.split(','); + var selected = ""; + for(var i = 0; i < arr.length; i++) { + var dom = checkTree.getNodeDomById(arr[i]); + checkTree.expandNode(dom, true); + if(i == arr.length -1) { + selected = arr[i]; + } + } + setTimeout(function() { + var ele = document.getElementById('tree_span_' + selected); + $('#leftData').scrollTop(ele.offsetTop); + checkTree.selectNode(selected, true); + clickNode(checkTree.getNodeById(selected)); + $("#queryInput").val("");//搜索框清空 + }, 200); +} + +// 流程定位 +function positionTarget(uuid, name) { + closeProcessSearchDialog(); + setValue(uuid,name); +} + +/*******树结构的快速搜索功能****************/ + +// 关闭流程搜索dialog +function closeProcessSearchDialog() { + if (!$("#processTreeSearchDialog").is(":hidden")) { + $("#processTreeSearchDialog").dialog("close"); // 关闭 + } +} + +// 单选框添加事件 +function addRadioEvent() { + $('#processSearchData .awsui-radio').off("ifChecked").on("ifChecked",function(){// 选中 + var uuids = $(this).attr('value'); + if (uuids == null) { + return; + } + var arr = uuids.split(','); + var uuid = arr[arr.length - 1]; + var name = $(this).attr('data-name'); + var containObj = false; + for (var i = 0; i < relationShapeList.length; i++) { + if (uuid == relationShapeList[i].relationFileId) { + containObj = true; + break; + } + } + if (!containObj) { + var newRelationObj = { + relationFileId : uuid, + relationShapeId : '', + relationShapeText : name + }; + relationShapeList = []; + relationShapeList.push(newRelationObj); + } + // 初始化列表 + writeRelationListHtml(); + // 树同步 + if ($("#ckb_" + uuid) != undefined) { + $("#ckb_" + uuid).check("option", "checked", true); + } + }); +} + +// 多选框添加事件 +function addCheckboxEvent() { + $('#processSearchData .awsui-checkbox').off("ifChecked").on("ifChecked",function(){// 选中 + var uuids = $(this).attr('value'); + if (uuids == null) { + return; + } + var arr = uuids.split(','); + var uuid = arr[arr.length - 1]; + var pid = ''; + if (arr.length == 1) { + pid = 'process'; + } else { + pid = arr[arr.length - 2]; + } + var name = $(this).attr('data-name'); + var containObj = false; + for (var i = 0; i < relationShapeList.length; i++) { + if (uuid == relationShapeList[i].relationFileId) { + containObj = true; + break; + } + } + if (!containObj) { + var newRelationObj = { + relationFileId : uuid, + relationShapeId : '', + relationShapeText : name + }; + relationShapeList.push(newRelationObj); + } + // 初始化列表 + writeRelationListHtml(); + // 树同步 + if ($("#ckb_" + uuid) != undefined) { + $("#ckb_" + uuid).check("option", "checked", true); + } + }); + $('#processSearchData .awsui-checkbox').off("ifUnchecked").on("ifUnchecked",function(){// 取消选中 + var uuids = $(this).attr('value'); + if (uuids == null) { + return; + } + var arr = uuids.split(','); + var uuid = arr[arr.length - 1]; + var index = -1; + for (var i = 0; i < relationShapeList.length; i++) { + if (uuid == relationShapeList[i].relationFileId) { + index = i; + break; + } + } + if (index != -1) { + relationShapeList.splice(index, 1); + } + // 初始化列表 + writeRelationListHtml(); + // 树同步 + if ($("#ckb_" + uuid) != undefined) { + $("#ckb_" + uuid).check("option", "checked", false); + } + }); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.list.main.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.list.main.js new file mode 100644 index 00000000..80d635a8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.list.main.js @@ -0,0 +1,320 @@ +var wsId; +var processLevel=-1; +var plParentid=0; +jQuery(document).ready(function() { + //$('#content_container').height($(window).height() - $('#content_container').offset().top-30); + $('#content_container').height($(window).height() - $('#content_container').offset().top); + //绑定回车事件 + $('#processInstSearchConTable input[type=text],select').bind('keyup', function(event) { + if (event.keyCode == "13") { + processInstSearch(); + } + }); + + $('#goPageNum').bind('keyup', function(event) { + if (event.keyCode == "13") { + trunPage('jump'); + } + }); + $('#goPageNum').bind('focus', function(event) { + $(this).val(pageNO); + }); + $('#goPageNum').bind('mouseup', function(event) { + $(this).select(); + }); + $('#goPageNum').bind('blur', function(event) { + $(this).val(pageNO + '/' + pageNumGlobal); + }); + $("#searchFieldset").bind('click', function(event) { + hiddenAllTr(event); + }); + + jQuery("#content_container").scroll(function(){ + jQuery("span[id^='name']").each(function(){ + jQuery(this).removeClass("pressed"); + jQuery(this).toolbar('hide'); + }); + }); +}) +//全局条件,避免当重新填写条件后,没有点击搜索,直接点击翻页,出现数据错误 +var conditionGlobal = new Array(); +//全局翻页标志 +var flagGlobal = ''; +//全局requestType,param +var requestTypeGlobal = '', paramGlobal = ''; +//当前页码 +var pageNO = 1; +//页条数 +var limit = 100; +var pageNumGlobal = 1; +function processInstSearch(start_p) { + wsId=jQuery("#wsId").val(); + var cond=jQuery("#condition").val(); + if(!cond){ + cond=JSON.stringify({}) + } + var start = 1; + if (start_p != null && start_p != '') { + start = start_p; + } + $.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent($('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_processlevel_griddata", + data : "start=" + start + "&pageSize=" +limit+"&wsId="+wsId+"&conditions="+cond, + success : function(msg) { + //window.top.$.simpleAlert(msg); + $('#processInstListTable').html(msg); + initPin(); + var su=$('#sumData').val(); + var sumData =0; + if(su){ + sumData=parseInt(su) + } + + if (start_p != null && start_p != '') { + if (flagGlobal != '') { + if (flagGlobal == 'first') { + pageNO = 1; + } else if (flagGlobal == 'pre') { + pageNO = pageNO - 1; + } else if (flagGlobal == 'next') { + pageNO = pageNO + 1; + } else if (flagGlobal == 'last') { + var pageNum = sumData % limit == 0 ? sumData / limit : (parseInt(sumData / limit)) + 1; + pageNO = pageNum; + }else if (flagGlobal == 'jump') { + pageNO = parseInt($('#goPageNum').val()); + } + } + } else { + pageNO = 1; + } + + var page = sumData % limit == 0 ? sumData / limit : (parseInt(sumData / limit)) + 1; + if (page == 0) { + page = 1; + } + pageNumGlobal = page; + $('#goPageNum').trigger('blur'); + if (sumData != 0) { + //$('#pageOverview').html('显示从' + start + '到' + ((start + limit - 1) > sumData ? sumData : (start + limit - 1)) + '条,共' + $('#sumData').val() + '条'); + } else { + //$('#pageOverview').html(无记录); + $('#pageOverview').html(""); + } + jQuery("#flowcount").text(sumData); + //设置翻页超链接样式 + setTurnPageStyle(); + } + }); +} +//翻页 +function trunPage(flag) { + var sumData = parseInt($('#sumData').val()); + if (isNaN(sumData)) { + return; + } + var pageNum = sumData % limit == 0 ? sumData / limit : (parseInt(sumData / limit)) + 1; + flagGlobal = flag; + if (flag == 'first') { + if (pageNO != 1) { + processInstSearch(1); + } + } else if (flag == 'pre') { + if (pageNO >= 2) { + processInstSearch(((pageNO - 1) - 1) * limit + 1); + } + } else if (flag == 'next') { + if (pageNO < pageNum) { + processInstSearch(((pageNO + 1) - 1) * limit + 1); + } + } else if (flag == 'last') { + if (pageNO != pageNum) { + processInstSearch((pageNum - 1) * limit + 1); + } + }else if (flag == 'jump') { + var goPageNum = $('#goPageNum').val(); + var regexp = new RegExp(/^[1-9][0-9]*$/); + if (!regexp.test(goPageNum) || parseInt(goPageNum) > pageNumGlobal) { + $('#goPageNum').select(); + window.top.$.simpleAlert(请输入合理页码 + pageNumGlobal); + return; + } else { + processInstSearch(((goPageNum - 1)) * limit + 1); + } + } +} +//设置翻页超链接样式 +function setTurnPageStyle() { + var sumData = parseInt($('#sumData').val()); + if (isNaN(sumData)) { + return; + } + var pageNum = sumData % limit == 0 ? sumData / limit : (parseInt(sumData / limit)) + 1; + if (pageNum == 0) { + pageNum = 1; + } + + $('#firstPage,#prePage,#nextPage,#lastPage').css('color', '#3366cc'); + if (pageNO == 1) { + $('#firstPage').css('color', 'gray'); + $('#prePage').css('color', 'gray'); + } + if (pageNO == pageNum) { + $('#nextPage').css('color', 'gray'); + jQuery('#lastPage').css('color', 'gray'); + } +} +//刷新gird +function reloadGrid(){ + var start= (pageNO-1)*limit+1; + flagGlobal='undefined'; + processInstSearch(start); +} +//设置选中行颜色 +var pre; +function showOpt(level,plpid){ + processLevel=level; + plParentid=plpid; + jQuery("span[id^='name']").each(function(){ + if(jQuery(this).attr('id')!="name_"+plpid){ + jQuery(this).toolbar('hide'); + } + }); + + +} + +function setNewButtonIsUsered(isleaf){ + var newButton=jQuery("#newbutton"); + if(isleaf==1){ + newButton.attr("disabled",true); + }else{ + newButton.attr("disabled",false); + } +} + +//新建层次 打开对话框 +function createProcessLevel(id,type){ + var title=""; + if(processLevel==-1){ + window.top.$.simpleAlert(请选择相应流程分级); + return false; + } + if(id==undefined){ + id=0; + title=新建流程; + }else{ + title=修改流程; + } + if(type==undefined){ + type="tree"; + }else{ + type="grid"; + } + var url="./w?sid="+encodeURIComponent(jQuery('#sid').val())+"&cmd=com.actionsoft.apps.coe.pal_processlevel_create&id="+id+"&type="+type; + parent.parent.asyncbox.open({id:'showOpenProcessLevel',url : url,width : 860,height : 570,title:title,modal:true}); +} +//打开流程图按钮 +function openFlowProcess(url) { + window.open(url,'flowProcess','left=0,top=0,width='+ (screen.availWidth - 10) +',height='+ (screen.availHeight-50) +',scrollbars,resizable=no,toolbar=no'); +} + +//设置流程图 +function openSetProcess(id){ + var url="./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_processlevel_flowchart_page&id="+id+"&type=grid" + parent.parent.asyncbox.open({id:'showOpenFlowChar',url :url,width : 600,height :135,title:设置流程图,modal:true}); +} + +//授权按钮 +function openEmPower(id) { + var url="./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_processlevel_empower&id="+id + parent.parent.asyncbox.open({id:'showOpenProcessLevel',url :url,width : 480,height : 520,title:授权,modal:true}); +} +//删除流程分级 +function deleteProcessLevel(wsId,id){ + if (confirm(确认删除流程分级吗)) { + var params = { + wsid : wsId, + pid : id + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_processlevel_tree_remove", + data : params, + success : function(msg) { + msg = eval('(' + msg + ')').msg; + if (msg == "1") { + window.top.$.simpleAlert(删除层级成功,"ok",2000); + $('#name_'+id).trigger('click'); + reloadGrid(); + + } else { + window.top.$.simpleAlert(删除层级失败请稍后重试); + } + } + }); + } + return false; +} + +//标记颜色 +function openSign(id){ + var url="./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_processlevel_sign&id="+id + parent.parent.asyncbox.open({id:'showOpenProcessListSign',url :url,width : 350,height :150,title:标记颜色,modal:true}); +} + + + +//重置 +function resetVal(){ + jQuery("#plColor").val("-1"); + jQuery("#name").val(""); + jQuery("#execType").val(-1); + jQuery("#systemName").val(-1); + jQuery("#plRd").val(""); + jQuery("#plRp").val(""); + jQuery("#plM").val(-1); + jQuery("#plLevel").val(-1); +} + +//改变工作空间 +function changeWs(){ + resetVal(); + processInstSearch(); +} +//向上 +function up(id,orderIndex,upid,upOrderIndex){ + if (upid!=0) { + var params = { + id : id, + orderIndex : upOrderIndex, + upId:upid, + upOrderIndex:orderIndex + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_processlevel_up", + data : params, + success : function(msg) { + if (msg == "1") { + window.top.$.simpleAlert(移动成功,"ok",2000); + reloadGrid(); + } else { + window.top.$.simpleAlert(移动失败请稍后重试); + } + } + }); + } +} + + + +function hiddenAllTr(event){ + jQuery(".opt").fadeOut(0); +} +function initPin(){ + $('table#processInstListTable').fixedHeaderTable(); +} + + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.login.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.login.js new file mode 100644 index 00000000..b14b5d78 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.login.js @@ -0,0 +1,124 @@ +document.write(''); +function inCOE() { + document.getElementById('AWSINAdministrator').target = "_self"; + if (document.AWSINAdministrator.userid.value == "") { + $.simpleAlert(getLanguage('fee70b6d6d0577c04beab7541a39edb6'), + 'warning', 2000); + return false; + } + if (document.AWSINAdministrator.pwd.value == "") { + $.simpleAlert(getLanguage('fee70b6d6d0577c04beab7541a39edb6'), + 'warning', 2000); + return false; + } + document.AWSINAdministrator.cmd.value = 'com.actionsoft.apps.coe.pal_user_login'; + document.AWSINAdministrator.deviceType.value = 'pc'; + var d = new Date(); + var timeZone = d.getTimezoneOffset() / 60; + //转换成UTC+(-)xx的格式 + if (timeZone < 0) { + timeZone = Math.abs(timeZone); + } else { + timeZone = "-" + timeZone; + } + var param = { + cmd : 'com.actionsoft.apps.coe.pal_user_login', + userid : document.AWSINAdministrator.userid.value, + pwd : rsa_pwd(document.AWSINAdministrator.pwd.value), + pwdEncode: "RSA", + lang: document.AWSINAdministrator.lang.value, + timeZone : timeZone, + loginUrl : encodeURIComponent(window.location.href) + } + awsui.ajax.request({ + type : "POST", + url : "../../r/jd", + data : param, + ok : function(r) { + // refresh page,submit to aws console home + document.AWSINAdministrator.cmd.value = "com.actionsoft.apps.coe.pal_user_home_page"; + document.AWSINAdministrator.sid.value = r.data.sid; + document.AWSINAdministrator.action = "../../r/w"; + $(document.AWSINAdministrator[1]).val(rsa_pwd($(document.AWSINAdministrator[1]).val())); + // document.AWSINAdministrator.submit(); + // vue下不使用submit + var httpUrl = document.URL; + httpUrl = httpUrl.replace('coe/pal', 'r'); + palPostcall('palMain', httpUrl + 'w', {cmd: 'com.actionsoft.apps.coe.pal_user_home_page', sid: r.data.sid}, '_top'); + return false; + }, + err : function(r) { + } + }); + return false; +} + +/** + * pal请求 by sunlh + * @param id + * @param url + * @param params + * @param target + */ +function palPostcall (id, url, params, target) { + // 防止反复添加 + var dom = document.getElementById(id); + if(dom) { + document.body.removeChild(dom); + } + var temp_form = document.createElement("form"); + temp_form .action = url; + temp_form .target = target == undefined ? "_blank" : target; + temp_form .method = "get";// 先用get,用post请求后刷新浏览器不识别url + temp_form .style.display = "none"; + for (var x in params) { + var opt = document.createElement("textarea"); + opt.name = x; + opt.value = params[x]; + temp_form .appendChild(opt); + } + temp_form.setAttribute('id', id); + document.body.appendChild(temp_form); + temp_form.submit(); +} + +function onFocus() { + document.AWSINAdministrator.userid.focus(); + lang = getPortalLang(); + document.AWSINAdministrator.PORTAL_LANG.value = lang; +} +function loadLang() { + + document.getElementById('lang').value = getPortalLang(); + document.getElementById('userid').focus(); + try { + document.getElementById('userid').placeholder = getLanguage('fee70b6d6d61ff476964f3f6737e8ret'); + document.getElementById('pwd').placeholder = getLanguage('fee70b6d6d61ff4768cda2abf128e384'); + document.getElementById('loginCommand').innerHTML = getLanguage('fee70b6d6d61ff4d7422f09cf894bb25'); + document.getElementById('awsCopyRight').innerHTML = getLanguage('fee70b6d6d61ff47139f7ef41dda7711'); + } catch (e) { + } +} + +window.onload = function() { + loadLang(); + +} + +!(function() { + if (langData) { + + } +})(); + +function setDefaultUser() { + var userid = $.cookie("coe_userid"); + var pwd = $.cookie("coe_pwd"); + if (userid != undefined && pwd != undefined) { + $("#userid").val(userid); + $("#pwd").val(pwd); + } else { + $("#userid").val(""); + $("#pwd").val(""); + } +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.processlevel.1.0.main.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.processlevel.1.0.main.js new file mode 100644 index 00000000..7f2ab036 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.processlevel.1.0.main.js @@ -0,0 +1,745 @@ +var plParentid = 0; +var processLevel = 0; +var isLeaf = true; +var parentNodeId; +var orderIndexs = new Array(); +var repositoryTree; +jQuery(function() { + initTree(); + initNetworkTree(); + initPublishTree(); +}); + +function zTreeBeforeAsync(treeId, treeNode) { + +} + +function getParam() { + var wsId = jQuery("#wsId").val(); + var sessionId = jQuery("#sid").val(); + var param = { + sid : sessionId, + cmd : "com.actionsoft.apps.coe.pal_pl_manage_json", + wsid : wsId + }; + return param; +} + +/* 拖拽前回调 */ +function beforeDrag(treeId, treeNodes, targetNode, moveType, isCopy) { + putOrdexIndexs(treeNodes); +} + +// 移动节点前现将所有的 orderindex计入一个集合 +function putOrdexIndexs(treeNodes) { + var node = treeNodes[0].getParentNode(); + var nodes = node.children; + for (var i = 0; i < nodes.length; i++) { + orderIndexs[i] = nodes[i].plOrdexIndex; + } +} + +/* 拖拽前回调 */ +function beforeDrop(treeId, treeNodes, targetNode, moveType) { + var beforeId = treeNodes[0].getParentNode().id; // 获取当前节点父节点id + var isDrop = targetNode.isDrops; + var isLeaf = targetNode.isParent; + if (moveType == "inner" && !isLeaf) { + return false; + } + if (moveType == "inner" && treeNodes[0].level == "1") { + return false; + } + if (targetNode.level == "0") { + return false; + } + if (!confirm("确定移动此文件吗?")) { + return false; + } + if (beforeId) { + parentNodeId = beforeId; + } + +} + +/* 拖拽后事件 */ +function onDrop(event, treeId, treeNodes, targetNode, moveType, isCopy) { + var parentNode = treeNodes[0].getParentNode() + var afterId = parentNode.id; + if (afterId) { + if (parentNodeId != afterId) { + //更新pid + var str = getNewPid(treeNodes, afterId); + updatePid(str); + } else { + //更新orderIndex + var str = getNewOrderIndexStr(parentNode); + updateOrderIndex(str); + } + } +} + +// 同级移动返回更新后的orderIndex +function getNewOrderIndexStr(parentNode) { + var str = ""; + var nodes = parentNode.children; + for (var i = 0; i < nodes.length; i++) { + nodes[i].plOrdexIndex = orderIndexs[i]; + } + for (var i = 0; i < nodes.length; i++) { + if (i == 0) { + str += nodes[i].id + "|" + nodes[i].plOrdexIndex; + } else { + str += "," + nodes[i].id + "|" + nodes[i].plOrdexIndex; + } + } + return str; +} + +// 跨级移动更新pid +function getNewPid(treeNodes, afterId) { + var pids = ""; + for (var i = 0; i < treeNodes.length; i++) { + if (i == 0) { + pids += treeNodes[i].id; + } else { + pids += "|" + treeNodes[i].id; + } + } + pids += "," + afterId; + return pids; +} + +// 异步设置orderindex +function updateOrderIndex(str) { + var param = { + orderIndexs : str + } + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_setploaderindex", + data : param, + success : function(msg) { + if (msg == "-1") { + window.top.$.simpleAlert(拖动失败请稍候重试, "info", 2000); + } else { + refreshParentNode(); + } + } + }); +} + +function updatePid(str) { + var param = { + pids : str + } + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_setplid", + data : param, + success : function(msg) { + if (msg == "-1") { + window.top.$.simpleAlert(拖动失败请稍候重试, "info", 2000); + } else { + refreshParentNode(); + } + } + }); +} + +function setOrderIndexByOutGoing(outgoing, uuid, orderIndex) { + +} + +function setOrderIndexByArray(array, uuid, orderIndex) { + +} + +function initTree() { + var wsId = jQuery("#wsId").val(); + if (wsId) { + var setting = getSetings(); + repositoryTree = awsui.tree.init($("#repositoryTree"), setting); + $("#repositoryTree").css("height", "auto"); + } else { + window.top.$.simpleAlert("请选择流程资产", "info", 2000); + } +} + +function getSetings() { + var setting = { + dblClickToExpand : true, + event : { + onClick : clickNode, + beforeExpand : loadData, + afterLoad : afterLoad + } + // view: { + // addHoverDom: addHoverDom, + // removeHoverDom: removeHoverDom + // }, + // edit : { + // enable : true, + // showRemoveBtn : false, + // showRenameBtn: false, + // drag : { + // prev : true, + // next : true, + // inner : true + // } + // }, + // async: { + // enable: true, + // type: "post", + // url:"./w", + // autoParam: ["id=pid"], + // otherParam:getParam() + // }, + // data:{ + // keep:{ + // parent:true + // } + // }, + // callback : { + // beforeDrag : beforeDrag, + // beforeDrop : beforeDrop, + // beforeAsync:zTreeBeforeAsync, + // onDrop:onDrop, + // //onClick: zTreeOnClick, + // onAsyncSuccess: onAsyncSuccess //异步节点加载成功后回调 + // } + }; + setting.dataModel = { + url : "./w?sid=" + jQuery("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_pl_manage_json&pid=&wsid=" + + jQuery("#wsId").val() + }; + return setting; +} +function loadData(treeNode) { + // 如果是父节点并且存在子节点执行加载 + if (treeNode.open != null && !repositoryTree.exsitsChildren(treeNode.id)) { + var dataModel = { + url : "./w?sid=" + jQuery("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_pl_manage_json&pid=" + treeNode.id + + "&wsid=" + jQuery("#wsId").val(), + method : "POST", + dataType : "json" + } + var data = repositoryTree.getData(dataModel); + repositoryTree.buildChilren(data, treeNode); + } +} +function afterLoad() { + $("a[tabindex=process]").trigger("click.nodeClick"); +} +function clickNode(treeNode) { + unSelectNode("repository"); + + if (treeNode.id == "0") { + return; + } + // 增加内容 + var html = $(""); + $("#simple-right").html(html); + + // 设置值 + setPlParentIDAndProcessLevel(treeNode); +} +// 异步节点加载成功后回调 +function onAsyncSuccess(event, treeId, treeNode, msg) { + var zTree = jQuery.fn.zTree.getZTreeObj("processLevelTree"); + setTimeout(function() { + if (treeNode) { + if (treeNode.level < 1) { // 展开到指定层级 + // console.log("treeNode>>"+treeNode+">>name>>"+treeNode.name); + // console.log("treeNode.children>>"+treeNode.children+">>>"+treeNode.children.length); + // for (var i=0; i < treeNode.children.length; i++) { + // console.log(">>>>treeNode.children[i].name>>"+treeNode.children[i].name); + // }; + if (treeNode.children && treeNode.children.length > 0) { + expandNodes(zTree, treeNode.children); + } + } + } + }, 500); // 加载下级节点 +} + +// function zTreeOnClick(event, treeId, treeNode){ +// setPlParentIDAndProcessLevel(treeNode); +// var nodes; +// try{ +// nodes=treeNode.getParentNode().children; +// }catch(e){} +// var indx=getNodeIndex(nodes,treeNode); +// setUserDefined(treeNode,nodes.length,indx); +// } + +function getNodeIndex(nodes, treeNode) { + var index = 0; + if (nodes && treeNode) { + for (var i = 0; nodes.length; i++) { + if (treeNode.id == nodes[i].id) { + index = i + 1; + break; + } + } + } + return index; +} + +// 设置树节点右侧自定义按钮 +// function setUserDefined(treeNode,count,indx){ +// if(treeNode.plLevel >=0){ +// if(treeNode.isParent){ //父节点显示添加按钮 +// addProcessLevelBtn(treeNode); +// } +// editProcessLevelBtn(treeNode); +// editProcessLevelBtn(treeNode); +// flowProcess(treeNode); +// emPower(treeNode); +// if(treeNode.plLevel >=1){ +// deleteBtn(treeNode); +// } +// } +// } + +function setPlParentIDAndProcessLevel(treeNode) { + if (!treeNode.isParent) { + treeNode.isParent = true; + } + plParentid = treeNode.id; + processLevel = treeNode.plLevel; + isLeaf = treeNode.isParent; +} + +// 展开所有节点 +function expandNodes(zTree, nodes) { + if (!nodes) + return; + for (var i = 0, l = nodes.length; i < l; i++) { + zTree.expandNode(nodes[i], true, false, false); + if (nodes[i].isParent) { + expandNodes(nodes[i].children); + } + } +} + +// 自动展开两级节点 +function expandNodesFirst(zTree, nodes) { + if (!nodes) + return; + for (var i = 0, l = 1; i < l; i++) { + zTree.expandNode(nodes[i], true, false, false); + if (nodes[i].isParent && nodes[i].zAsync) { + expandNodesFirst(nodes[i].children); + } + } +} + +// 自动展开n级节点 +function expandNodesN(zTree, nodes, n) { + if (!nodes) + return; + for (var i = 0, l = n; i < l; i++) { + zTree.expandNode(nodes[i], true, false, false); + if (nodes[i].isParent) { + expandNodesN(zTree, nodes[i].children, n); + } + } +} + +// 刷新指定节点 +function refreshNode(id) { + if (!id) { + id = plParentid; + } + var node = repositoryTree.getNodeById(id); + if (node == null) { + } else if (node.open == null) { + } else { + doLoad(node, "reload"); + } +} +// 刷新树和右侧的页面 +function refresh() { + refreshNode() + document.getElementById("main").src = document.getElementById("main").src; +} +function doLoad(treeNode, type) { + var dataModel = { + url : "./w?sid=" + jQuery("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_pl_manage_json&pid=" + treeNode.id + "&wsid=" + + jQuery("#wsId").val(), + method : "POST", + dataType : "json" + } + var data = repositoryTree.getData(dataModel, treeNode.id); + repositoryTree.buildChilren(data, treeNode, type); +} +// 自定义操作 添加 +function addHoverDom(treeId, treeNode) { + +} + +// 自定义操作 移除图标 +function removeHoverDom(treeId, treeNode) { + if (treeNode.isParent) { + $("#addProcessLevel_" + treeNode.id).unbind().remove(); + } + $("#editProcessLevel_" + treeNode.id).unbind().remove(); + $("#flowProcess_" + treeNode.id).unbind().remove(); + $("#empower_" + treeNode.id).unbind().remove(); + $("#delProcessLevel_" + treeNode.id).unbind().remove(); + $("#upProcessLevel_" + treeNode.id).unbind().remove(); + $("#downProcessLevel_" + treeNode.id).unbind().remove(); +} + +// 自定义添加按钮 +function addProcessLevelBtn(treeNode) { + var sObj = $("#" + treeNode.tId + "_span"); + if (treeNode.editNameFlag + || $("#addProcessLevel_" + treeNode.id).length > 0) + return; + var addProcessLevelStr = ""; + sObj.after(addProcessLevelStr); + var btn = $("#addProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + setPlParentIDAndProcessLevel(treeNode); + + createProcessLevel(); + + return false; + }); +} + +// 自定义修改按钮 +function editProcessLevelBtn(treeNode) { + var sObj = $("#addProcessLevel_" + treeNode.id); + if (sObj.length == 0) { + sObj = $("#" + treeNode.tId + "_span"); + } + if (treeNode.editNameFlag + || $("#editProcessLevel_" + treeNode.id).length > 0) + return; + var editProcessLevelStr = ""; + sObj.after(editProcessLevelStr); + var btn = $("#editProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + setPlParentIDAndProcessLevel(treeNode); + if (treeNode.id) { + createProcessLevel(treeNode.id); + } + return false; + }); +} + +// 显示授权按钮 +function emPower(treeNode) { + var sObj2 = $("#flowProcess_" + treeNode.id); + if (treeNode.editNameFlag || $("#empower_" + treeNode.id).length > 0) + return; + var empowerStr = ""; + sObj2.after(empowerStr); + var empowerbtn = $("#empower_" + treeNode.id); + if (empowerbtn) { + empowerbtn.bind("click", function() { + setPlParentIDAndProcessLevel(treeNode); + var url = "./w?sid=" + + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_empower&id=" + + treeNode.id; + parent.parent.asyncbox.open({ + id : 'showOpenProcessLevel', + url : url, + width : 480, + height : 520, + title : 授权, + modal : true + }); + return false; + }); + } +} + +// 自定义删除按钮 +function deleteBtn(treeNode) { + var sObj = $("#empower_" + treeNode.id); + if (treeNode.editNameFlag + || $("#delProcessLevel_" + treeNode.id).length > 0) + return; + var delProcessLevelStr = ""; + sObj.after(delProcessLevelStr); + var btn = $("#delProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + deleteProcessLevel(treeNode); + return false; + }); +} + +// 自定义向上箭头 + +function upBtn(treeNode) { + var sObj = $("#delProcessLevel_" + treeNode.id); + if (treeNode.editNameFlag || $("#upProcessLevel_" + treeNode.id).length > 0) + return; + var delProcessLevelStr = ""; + sObj.after(delProcessLevelStr); + var btn = $("#upProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + window.top.$.simpleAlert(向上, "info", 2000); + return false; + }); +} +// 自定义向下箭头 +function downBtn(treeNode) { + var sObj = $("#upProcessLevel_" + treeNode.id); + if (sObj.length == 0) { + sObj = $("#delProcessLevel_" + treeNode.id); + } + if (treeNode.editNameFlag + || $("#downProcessLevel_" + treeNode.id).length > 0) + return; + var delProcessLevelStr = ""; + sObj.after(delProcessLevelStr); + var btn = $("#downProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + window.top.$.simpleAlert(向下, "info", 2000); + return false; + }); +} + +// 删除流程分级 +// function deleteProcessLevel(treeNode){ +// var zTree = $.fn.zTree.getZTreeObj("processLevelTree"); +// if (confirm(确认删除流程分级 + treeNode.name + 吗)) { +// zTree.selectNode(treeNode); +// var wsId = jQuery("#wsId").val(); +// var params = { +// wsid : wsId, +// pid : treeNode.id +// }; +// jQuery.ajax({ +// type : "POST", +// url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + +// "&cmd=com.actionsoft.apps.coe.pal_processlevel_tree_remove", +// data : params, +// success : function(msg) { +// if (msg == "1") { +// window.top.$.simpleAlert(删除层级成功, "info", 2000); +// refreshParentNode(); +// } else { +// window.top.$.simpleAlert(删除层级失败请稍后重试, "info", 2000); +// } +// } +// }); +// } +// return false; +// } + +var isExec = true; +function reinitIframe() { + var height = document.documentElement.scrollHeight; + if (height > 540) { + if (isExec) { + parent.document.getElementById("coeContentiframe").height = height + + "px"; + } + } +} + +/***********************************流程团队列表 begin******************************************/ +var networkTree; +var networkSetting = { + dblClickToExpand:true, + showTitle:true, + event : { + onClick : showTeamList + } +}; +//左侧工作网络列表树 +function initNetworkTree() { + $.ajax({ + type: "POST", + url: "./jd?sid="+ encodeURIComponent($('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_teamwork_networklist&wsId=" + $("#wsId").val(), + success: function(msg) { + if (msg.result == "ok") { + var data; + if (typeof(msg) == "string") { + data = eval('(' + msg + ')').msg; + } else { + data = msg.msg; + } + if (data != undefined && data != "") { + if (typeof(data) == 'string') { + data = eval('(' + data + ')'); + } + if (data.length == 0) { + return; + } + networkSetting.dataModel = { + data :data + }; + networkTree = awsui.tree.init($("#networkTree"), networkSetting); + $("#networkTree span[nodeicon]").css({"background-size":"16px"}); + $("#networkTree").show(); + $("#networkTree").css({"height":"auto", "width": $("#networkTree").parent()[0].scrollWidth}); + } + } + } + }) +} + +//点击树节点,页面右侧显示小组列表 +function showTeamList(treeNode) { + unSelectNode("network"); + + if (treeNode.id == "0") { + return; + } + // 显示内容 + var url = "./w?sid=" + encodeURIComponent($('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_teamwork_network_teamlist&networkId=" + treeNode.id + "&wsId=" + $("#wsId").val(); + var html = $(""); + $("#simple-right").html(html); +} +/***********************************流程团队列表 end******************************************/ + +/***********************************流程发布列表 begin****************************************/ +var publishTree; +var publishSetting = { + dblClickToExpand:true, + showTitle:true, + event : { + onClick : showGroupList + } +}; +//左侧工作网络列表树 +function initPublishTree() { + $("#publishTree").empty(); + $.ajax({ + type: "POST", + url: "./jd?sid="+ encodeURIComponent($('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_publish_publishgroup_list&wsId=" + $("#wsId").val(), + success: function(msg) { + if (typeof(msg) == "string") { + data = eval('(' + msg + ')').msg; + } else { + data = msg.msg; + } + if(data != undefined && data != "") { + if (typeof(data) == 'string') { + data = eval('(' + data + ')'); + } + if (data.length == 0) { + return; + } + var set_changyong_resources = { + id:"set_changyong_resources", + name:"常用流程设置", + pid:"_0", + icon: "../apps/com.actionsoft.apps.coe.pal/img/resources_common.png" + }; + var set_theme_resources = { + id:"set_theme_resources", + name:"主题风格", + pid:"_0", + icon: "../apps/com.actionsoft.apps.coe.pal/img/resources_theme.png" + }; + data.push(set_changyong_resources); + data.push(set_theme_resources); + publishSetting.dataModel = { + data :data + }; + publishTree = awsui.tree.init($("#publishTree"), publishSetting); + $("#publishTree").show(); + $("#publishTree").css({"height":"auto", "width": $("#publishTree").parent()[0].scrollWidth}); + } + } + }) +} + +//点击树节点,页面右侧显示小组列表 +function showGroupList(treeNode) { + unSelectNode("publish"); + + if (treeNode.id == "_0") { + return; + } + var category = treeNode.name; + if (category == undefined || treeNode.id == "_1") { + category = ""; + } + // 显示内容 + var url = "./w?sid=" + encodeURIComponent($('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_publish_publishgroup_page&wsId=" + $("#wsId").val() + "&category=" + encodeURIComponent(category); + if(treeNode.id == "set_changyong_resources"){ + url = "./w?sid=" + encodeURIComponent($('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_publish_publishgroup_common_page&wsId=" + $("#wsId").val(); + } + if(treeNode.id == "set_theme_resources") { + url = "./w?sid=" + encodeURIComponent($('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_publish_publishgroup_theme_page&wsId=" + $("#wsId").val(); + } + var html = $(""); + $("#simple-right").html(html); +} +/***********************************流程发布列表 end******************************************/ + +function unSelectNode(type) { + if (type != "repository") { + repositoryTree.cancelSelectNode(); + } + if (type != "network") { + if (networkTree != undefined) { + networkTree.cancelSelectNode(); + } + } + if (type != "publich") { + if (publishTree != undefined) { + publishTree.cancelSelectNode(); + } + } + + $("li.menuli.current").removeClass("current"); +} + +function showBackupList(obj) { + unSelectNode(); + obj.addClass("current"); + + var url = "./w?sid=" + encodeURIComponent($('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_backup_home&wsId=" + $("#wsId").val(); + var html = $(""); + $("#simple-right").html(html); +} + +function showDownloadReportList(obj) { + unSelectNode(); + obj.addClass("current"); + + var url = "./w?sid=" + encodeURIComponent($('#sid').val()) + "&cmd=COE_PAL_DOWNLOAD_REPORT_HOME&wsId=" + $("#wsId").val(); + var html = $(""); + $("#simple-right").html(html); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.shape.attribute.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.shape.attribute.js new file mode 100644 index 00000000..67da0f1d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.shape.attribute.js @@ -0,0 +1,306 @@ +$(document).ready(function() { + //awsui.tree.init($("#tree"), setting); + /*$(window).layout({ + head : { + target : "#simple-head", + height : "50px" + }, + left : { + target : "#simple-left", + title : "属性列表" + }, + right : { + target : "#simple-right" + }, + separater : { + target : "#simple-layout-separater", + width: 0 + } + });*/ + var treeInit = function(){ + awsui.tree.init($('#tree'), setting); + }; + var flag = true; + var collapse = $('#sideBarAttr').sidebarCollapse({ + width: '194',//侧边栏宽度 + height: '100%',//侧边栏高度 + cssStyle:{ //改变侧边栏的展现风格,这里按自己的需求来增加css样式 + border:'1px solid #e9e9e9', + background:'#fff', + position: 'absolute', + 'z-index': 200 + }, + //content: 'accordion内容接受任何布局或组件' + content: '新建属性
                                                ', + initComponent: treeInit, //页面上要引用其它组件时,初始化其它组件的方法 + callback: function(item) { //点击事件的回调函数 + if (flag) { + $("#sideBarAttr").css("width", "0%"); + //$(".awsui-sidebar-collapse").css("width", "0%"); + if ($(".awsui-sidebar-collapse").css("left").indexOf("-") > -1) { + //var tmpLeft = -$(window).width()*0.15; + //$(".awsui-sidebar-collapse").css("left", -$(window).width()*0.15); + } + $("#simple-top").css("width", "100%"); + $("#simple-right").css("width", "100%"); + flag = false; + } else { + $("#sideBarAttr").css("width", "15%"); + $(".awsui-sidebar-collapse").css("width", "15%"); + $("#simple-top").css("width", "85%"); + $("#simple-right").css("width", "85%"); + flag = true; + } + } + }); + //初始化部分元素的宽高 + $("#tree").css("height", "90%"); + $(".awsui-sidebar-collapse").css("width", "15%"); + }); + +// 全部tab页下的tree的配置 +var setting = { + dblClickToExpand : true, + event : { + onClick : clickNode + // , + // beforeExpand : loadData, + // afterLoad : afterLoad + } +}; +setting.dataModel = { + data : data +}; +// 形状的tree的配置 +var setting1 = { + dblClickToExpand : true, + event : { + onClick : clickNode1 + // , + // beforeExpand : loadData, + // afterLoad : afterLoad + } +}; +setting1.dataModel = { + data : data +}; +// 文件的tree的配置 +var setting2 = { + dblClickToExpand : true, + event : { + onClick : clickNode2 + // , + // beforeExpand : loadData, + // afterLoad : afterLoad + } +}; +setting2.dataModel = { + data : data +}; +// 单击事件 +function clickNode(treeNode) { + var html = ""; + $("#simple-right").empty().append(html); + // alert(html); +} +// 单击事件 +function clickNode1(treeNode) { + var url = treeNode.url + "&flag=1&wsid=" + wsid; + var html = ""; + $("#simple-right").empty().append(html); +} +// 单击事件 +function clickNode2(treeNode) { + var url = treeNode.url + "&flag=2&wsid=" + wsid; + var html = ""; + $("#simple-right").empty().append(html); +} +$(function(){ + var url = "./w?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_manage_main_shape_attr&methodId="+methodId+"&type=2&id="; + var html = ""; + $("#simple-right").empty().append(html); + + //tab页的点击事件 + $("#all-tab-title").click(function (){ + $(this).addClass('current'); + $(this).siblings().removeClass('current'); + //展示新建按钮 + $("#createAttr").css("visibility", "visible"); + //$("#all-tab-title").attr("style","margin-left:200px"); + awsui.ajax.post("./jd?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_manage_main_all_attr", { methodId: methodId, type: "0"}, function(data) { + //刷新属性树 + setting.dataModel.data = data; + $("#tree").empty(); + awsui.tree.init($("#tree"), setting); + $("#tree").css("height", "90%"); + }, 'json'); + //刷新属性表格 + var url = "./w?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_manage_main_shape_attr&methodId="+methodId+"&type=2&id="; + var html = ""; + $("#simple-right").empty().append(html); + }); + $("#shape-tab-title").click(function (){ + $(this).addClass('current'); + $(this).siblings().removeClass('current'); + //展示新建按钮 + $("#createAttr").css("visibility", "hidden"); + //$("#all-tab-title").attr("style","margin-left:427px"); + awsui.ajax.post("./jd?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_manage_main_all_attr", { wsid: wsid, methodId: methodId, type: "1"}, function(data) { + //刷新属性树 + setting1.dataModel.data = data; + $("#tree").empty(); + awsui.tree.init($("#tree"), setting1); + $("#tree").css("height", "90%"); + }, 'json'); + //刷新属性表格 + var url = "./w?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_manage_main_shape_attr&wsid="+wsid+"&methodId="+methodId+"&type=3&id=&flag=1"; + var html = ""; + $("#simple-right").empty().append(html); + }); + $("#file-tab-title").click(function (){ + $(this).addClass('current'); + $(this).siblings().removeClass('current'); + //展示新建按钮 + $("#createAttr").css("visibility", "hidden"); + //$("#all-tab-title").attr("style","margin-left:427px"); + awsui.ajax.post("./jd?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_manage_main_all_attr", { wsid: wsid, methodId: methodId, type: "2"}, function(data) { + //刷新属性树 + setting2.dataModel.data = data; + $("#tree").empty(); + awsui.tree.init($("#tree"), setting2); + $("#tree").css("height", "90%"); + }, 'json'); + //刷新属性表格 + var url = "./w?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_manage_main_shape_attr&wsid=" + wsid + "&methodId="+methodId+"&type=4&id=&flag=2"; + var html = ""; + $("#simple-right").empty().append(html); + }); + + //新建属性 + $("#createAttr").click(function (){ + + var dlg = parent.FrmDialog.open({ + title : "新增属性", + width : 780, + height : 440, + url : "./w", + data : { + sid : sid, + cmd : 'com.actionsoft.apps.coe.pal_pl_manage_attr_dialog_page', + methodId : methodId, + type : "add" + }, + id : "addAttribute", + buttons : [{ + text : '确定', + cls : "blue", + handler : function() { + var attrDialog = dlg.win(); + var dialogData = attrDialog.getData(); + var attrCode = dialogData.attrCode; + var attrName = dialogData.attrName; + var fileCkb = dialogData.fileCkb; + var shapeCkb = dialogData.shapeCkb; + var selectShape = dialogData.selectShape; + var type = dialogData.type; + var value = dialogData.value; + var readOnly = dialogData.readOnly; + var groupPath = dialogData.groupPath; + var isValid = dialogData.isValid; + //对于必填项的判断 + if (attrCode.trim().length <= 0){ + parent.$.simpleAlert("[属性代码]不允许为空","info",1500); + return; + } + if (attrName.trim().length <= 0) { + parent.$.simpleAlert("[属性名称]不允许为空", 'info', 1500); + return; + } + if (!(fileCkb || shapeCkb)) { + parent.$.simpleAlert("[作用范围]不允许为空", "info", 1500); + return; + } + if (readOnly) { + readOnly = "true"; + } else { + readOnly = "false"; + } + if (isValid) { + isValid = "true"; + } else { + isValid = "false"; + } + var scope = new Array(); + if (fileCkb == true) { + scope.push("%"); + } + if (shapeCkb == true) { + if (selectShape == null) { + scope.push("*"); + } else { + //将多选选中的图形变为name值,而不是tit + scope.push(selectShape); + } + } + scope = scope.join(","); + //向后端请求(methodId, key, title, type, value, readOnly, groupPath, isValid, scope) + awsui.ajax.post("./jd?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_manage_add_attr", { methodId: methodId, key: attrCode, title: attrName, type: type, value: value, readOnly: readOnly, groupPath: groupPath, isValid: isValid, scope: scope}, function(data) { + if (data.msg == "参数不完整") { + parent.$.simpleAlert("必填项不允许为空","error",1000); + return; + } + if (data.msg == "key重复") { + parent.$.simpleAlert("属性代码不允许重复","error",1000); + return; + } + if (data.msg == "添加成功") { + parent.$.simpleAlert("新增成功", "ok", 1500); + window.location.reload(); + } else { + parent.$.simpleAlert("新增失败!","error",1000); + } + dlg.close(); + }, 'json'); + } + }, { + text : '取消', + handler : function() { + dlg.close(); + } + }] + }); + + }); + //通过所有图形的复选框是否选中来处理具体图形是否显示 + $("#shapeCkb").on("ifChanged", function (){ + if ($(this).prop("checked") == true) { + $("#selectShape").css({"display": "none"}); + } else { + $("#selectShape").css({"display": "block"}); + } + }); + +}); + +//清空数据 +function deleteData(isSwitch) { + $("#attrCode").val(""); + $("#attrName").val(""); + $("#defaultValue").val(""); + $("#types").val(["string"]).trigger("change"); + $("#rdoC1").check( "check"); + $("#groups").val(["process"]).trigger("change"); + isSwitch.changeStatus(true); + $("#fileCkb").check("check"); + $("#shapeCkb").check("uncheck"); + $("#selectShape").css({"display": "block"}); + $("#selectMultiple").val([]).trigger("change"); +} + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.shape.config.query.dialog.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.shape.config.query.dialog.js new file mode 100644 index 00000000..e1f80a6b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.shape.config.query.dialog.js @@ -0,0 +1,640 @@ +$(function(){ + if (type == "commonShapeConfig") { + //查询当前形状的通用配置信息 + awsui.ajax.request({ + url : "./jd", + method : "GET", + data : { + sid: sid, + cmd: "com.actionsoft.apps.coe.pal_pl_manage_shape_config_query", + wsId: wsId, + methodId: methodId, + shapeId: shapeId + }, + error: function () { + $.simpleAlert('网络有问题请求失败', 'info', 2000, {model: true}); + return false; + }, + success: function(data) { + showShapeAllCommonConfig(data); + } + }); + } else { + //展示特殊配置 + showShapeSpecialConfig(commonShapeConfig, specialShapeConfig, attributesJsonArray); + } +}); + +//展示当前形状的所有通用配置信息 +function showShapeAllCommonConfig(data) { + //处理数据 + var dataArray = data; + for (var i = 0; i < dataArray.length; i++) { + var temp = dataArray[i]; + var attribute = JSON.parse(temp.attribute); + var horizontal = attribute.horizontal; + var verity = attribute.verity; + var showType = attribute.showType; + var trHtml = ""; + var tdLocHtml = handleHorizontalAndVerity(horizontal, verity); + trHtml += tdLocHtml; + if (showType == "text") { + var content = attribute.cfgContent; + content = content.replace(//g, ">"); + var tdTextHtml = handleTextContent(showType, content); + trHtml += tdTextHtml; + } + if (showType == "attribute") { + var attrName = attribute.attrName; + var attrValue = ""; + var key = attribute.key; + var isShowAttrName = attribute.isShowAttrName; + var tdAttrHtml = handleAttributeContent(showType, attrName, attrValue, key, isShowAttrName); + trHtml += tdAttrHtml; + } + if (showType == "icon") { + var iconContent = attribute.iconContent; + iconContent = iconContent.replace("&", "&="); + var tdIconHtml = handleIconContent(showType, iconContent); + trHtml += tdIconHtml; + } + var tdEditAndDelHtml = addEditAndDelButton(); + trHtml += tdEditAndDelHtml; + trHtml += ""; + $(".awsui-table").append(trHtml); + } + //dataArray为空 + if (dataArray.length <= 0) { + $("#noData").css("display", "block"); + } +} + +//对于特殊配置的展示的处理 +function showShapeSpecialConfig(commonShapeConfig, specialShapeConfig, attributesJsonArray) { + if (specialShapeConfig.length <= 0) { + //展示当前形状的通用配置 + if (commonShapeConfig.length > 0 ) { + showShapeAllSpecialConfig(commonShapeConfig, attributesJsonArray); + } + } else { + //展示通用配置和特殊配置的混合 + if (commonShapeConfig.length <= 0) { + showShapeAllSpecialConfig(specialShapeConfig, attributesJsonArray); + } else { + var dataArray = []; + var tempArray = []; + //剔除重复的,以特殊配置为准 + for (i = 0; i < commonShapeConfig.length; i++) { + var temp1 = commonShapeConfig[i]; + for (j = 0; j < specialShapeConfig.length; j++) { + var temp2 = specialShapeConfig[j]; + if (temp1.horizontal == temp2.horizontal && temp1.verity == temp2.verity) { + tempArray.push(i); + break; + } + } + } + //剔除commonShapeConfig中的重复 + var tempCommonShapeConfig = []; + if (tempArray.length > 0) { + for (i = 0; i < tempArray.length; i++) { + tempCommonShapeConfig.push(commonShapeConfig[tempArray[i]]); + } + } + if (tempCommonShapeConfig.length > 0) { + tempCommonShapeConfig = commonShapeConfig.concat(tempCommonShapeConfig).filter(function(v, i, arr) {return arr.indexOf(v) === arr.lastIndexOf(v);});; + dataArray = specialShapeConfig.concat(tempCommonShapeConfig); + } else { + dataArray = specialShapeConfig; + } + showShapeAllSpecialConfig(dataArray, attributesJsonArray); + } + } + //commonShapeConfig和specialShapeConfig为空 + if (commonShapeConfig.length <= 0 && specialShapeConfig <= 0) { + $("#noData").css("display", "block"); + } +} +//展示当前形状的所有特殊配置信息 +function showShapeAllSpecialConfig(data, attributesJsonArray) { + //处理数据 + var dataArray = data; + for (var i = 0; i < dataArray.length; i++) { + var temp = dataArray[i]; + var horizontal = temp.horizontal; + var verity = temp.verity; + var showType = temp.showType; + var trHtml = ""; + var tdLocHtml = handleHorizontalAndVerity(horizontal, verity); + trHtml += tdLocHtml; + if (showType == "text") { + var content = temp.cfgContent; + content = content.replace(//g, ">"); + var tdTextHtml = handleTextContent(showType, content); + trHtml += tdTextHtml; + } + if (showType == "attribute") { + var attrName = temp.attrName; + var attrValue = ""; + var key = temp.key; + var attrType = "string"; + var isShowAttrName = temp.isShowAttrName; + if (attributesJsonArray.length > 0) { + for (var j = 0; j < attributesJsonArray.length; j++) { + var attr = attributesJsonArray[j]; + if (attr.key == key) { + attrValue = attr.value; + attrType = attr.type; + break; + } + } + } + attrValue = handleRelationAttrValue(attrType, key, attrValue); + var tdAttrHtml = handleAttributeContent(showType, attrName, attrValue, key, isShowAttrName); + trHtml += tdAttrHtml; + } + if (showType == "icon") { + var iconContent = temp.iconContent; + //iconContent = iconContent.replace("&", "&="); + var tdIconHtml = handleIconContent(showType, iconContent); + trHtml += tdIconHtml; + } + var tdEditAndDelHtml = addEditAndDelButton(); + trHtml += tdEditAndDelHtml; + trHtml += ""; + $(".awsui-table").append(trHtml); + } +} + +function openShapeConfigAdd(obj, wsId, shapeId, category, defaultCategory) { + //获取已选择的位置 + var horVerArray = getSelectedHorAndVerLoc(); + //打开对话框 + var dlg = FrmDialog.open({ + title : "添加", + width : 450, + height : 350, + draggable : false, + url : "./w", + data : { + sid : sid, + cmd : 'com.actionsoft.apps.coe.pal_pl_manage_shape_config_update_dialog_page', + wsId : wsId, + shapeId : shapeId, + category : category, + defaultCategory : defaultCategory, + horVerArray : horVerArray + }, + id : "shapeConfigAdd", + onClose : closeAttrSelectDialog, + buttons : [{ + text : '确定', + cls : "blue", + handler : function() { + var data = dlg.win().getData(); + var showType = data.showType; + var horizontal = data.horizontal; + var verity = data.verity; + //校验必填项和制约 + if (horizontal.trim().length <= 0 || verity.trim().length <= 0) { + $.simpleAlert("显示位置【水平和垂直】不允许为空", "warning"); + return; + } + var trHtml = ""; + var tdLocHtml = handleHorizontalAndVerity(horizontal, verity); + trHtml += tdLocHtml; + if (showType == "text") { + var content = data.textContent; + if (content.indexOf("") >= 0) { + $.simpleAlert("非法输入js脚本", "warning"); + return; + } + //限制文本域字数长度 + if (content.length > 200) { + $.simpleAlert("文本内容长度不能超过200个字符", "warning"); + return; + } + content = content.replace(//g, ">"); + var tdTextHtml = handleTextContent(showType, content); + trHtml += tdTextHtml; + } + if (showType == "attribute") { + var attrName = data.attrSelect; + if (attrName.trim().length <= 0) { + $.simpleAlert("【属性选择】不允许为空", "warning"); + return; + } + var attrValue = ""; + var key = data.key; + var attrType = "string"; + var isShowAttrName = data.isShowAttrName; + if (attributesJsonArray.length > 0) { + for (var j = 0; j < attributesJsonArray.length; j++) { + var attr = attributesJsonArray[j]; + if (attr.key == key) { + attrValue = attr.value; + attrType = attr.type; + break; + } + } + } + attrValue = handleRelationAttrValue(attrType, key, attrValue); + var tdAttrHtml = handleAttributeContent(showType, attrName, attrValue, key, isShowAttrName); + trHtml += tdAttrHtml; + } + if (showType == "icon") { + var iconContent = data.iconContent; + if (iconContent == undefined) { + $.simpleAlert("【图标选择】不允许为空", "warning"); + return; + } + var tdIconHtml = handleIconContent(showType, iconContent); + trHtml += tdIconHtml; + } + var tdEditAndDelHtml = addEditAndDelButton(); + trHtml += tdEditAndDelHtml; + trHtml += ""; + $(".awsui-table").append(trHtml); + dlg.close(); + //隐藏没有数据的提示 + $("#noData").css("display", "none"); + } + }, { + text : '取消', + handler : function() { + dlg.close(); + closeAttrSelectDialog(); + } + }] + }); + //获取所需参数 + +} + +function handleRelationAttrValue(attrType, key, attrValue) { + if (attrType == "relation" && attrValue.length == 0) { + attrValue = ""; + } else if (attrType == "relation" && attrValue.length > 0) { + var shapeIdAttrId = shapeKey + "_" + key; + var relationValue = ""; + for (var j = 0; j < attrValue.length; j++) { + if (j == attrValue.length - 1) { + if (relationData.hasOwnProperty(shapeIdAttrId)) { + var tempRelationValue = relationData[shapeIdAttrId]; + relationValue = relationValue + tempRelationValue; + } + } else if (relationData.hasOwnProperty(shapeIdAttrId)) { + var tempRelationValue = relationData[shapeIdAttrId] + "|"; + relationValue = relationValue + tempRelationValue; + } + } + attrValue = relationValue; + } + return attrValue; +} + +function closeAttrSelectDialog() { + var isShowAttrSelect = $("#attr_dialog-normal_designer").css("display"); + if (isShowAttrSelect == "block") { + $("#attr_dialog-normal_designer").dialog('close'); + } +} + +//处理水平和垂直在查询页面的显示 +function handleHorizontalAndVerity(horizontal, verity) { + var tdLocHtml = "" + var hor = "
                                                水平
                                                "; + var ver = "
                                                垂直
                                                "; + if (horizontal == "mostLeft") { + tdLocHtml += hor; + tdLocHtml += "
                                                "; + } + if (horizontal == "left") { + tdLocHtml += hor; + tdLocHtml += "
                                                "; + } + if (horizontal == "center") { + tdLocHtml += hor; + tdLocHtml += "
                                                "; + } + if (horizontal == "right") { + tdLocHtml += hor; + tdLocHtml += "
                                                "; + } + if (horizontal == "mostRight") { + tdLocHtml += hor; + tdLocHtml += "
                                                "; + } + if (verity == "mostTop") { + tdLocHtml += ver; + tdLocHtml += "
                                                "; + } + if (verity == "top") { + tdLocHtml += ver; + tdLocHtml += "
                                                "; + } + if (verity == "center") { + tdLocHtml += ver; + tdLocHtml += "
                                                "; + } + if (verity == "bottom") { + tdLocHtml += ver; + tdLocHtml += "
                                                "; + } + if (verity == "mostBottom") { + tdLocHtml += ver; + tdLocHtml += "
                                                "; + } + tdLocHtml += ""; + return tdLocHtml; +} +//处理文本规则内容显示在查询页面上 +function handleTextContent(showType, content) { + var tdTextHtml = ""; + tdTextHtml += content; + tdTextHtml += ""; + return tdTextHtml; +} +//处理属性规则内容显示在查询页面上 +function handleAttributeContent(showType, attrName, attrValue, key, isShowAttrName, flag) { + var tdAttrHtml = ""; + tdAttrHtml += "(" + attrName + ")"; + if (isShowAttrName) { + tdAttrHtml += attrValue; + } else { + tdAttrHtml += attrValue; + } + tdAttrHtml += ""; + return tdAttrHtml; +} +//处理icon显示在查询页面上 +function handleIconContent(showType, iconContent) { + var tdIconHtml = ""; + var iconHtml = handleIconHtml(iconContent); + tdIconHtml += iconHtml; + return tdIconHtml; +} +function handleIconHtml(iconContent) { + var liHtml; + var temp = iconContent.replace("=", ""); + var iconColor = temp.split("|"); + liHtml = "" + iconColor[0] + ""; + return liHtml; +} +//添加两个按钮--编辑和删除 +function addEditAndDelButton() { + var tdEditAndDelHtml = ""; + tdEditAndDelHtml += ""; + return tdEditAndDelHtml; +} +//鼠标悬停展示编辑和删除按钮 +function showEditAndDelBtn(obj) { + $(obj).find(".editAndDelBut").css("display", "block"); +} +//鼠标移出隐藏编辑和删除按钮 +function hideEditAndDelBtn(obj) { + $(obj).find(".editAndDelBut").css("display", "none"); +} +//获取当前已经选择的位置 +function getSelectedHorAndVerLoc() { + var horVerArray = []; + var locArray = $(".awsui-table tbody").find(".shapeRule"); + if (locArray.length > 0) { + for (var i = 0; i < locArray.length; i++) { + var trHtml = locArray[i]; + var tdHtml = $(trHtml).find("td").eq(0); + var hor = $(tdHtml).find("div").eq(1).data("loc"); + var ver = $(tdHtml).find("div").eq(3).data("loc"); + var horVer = hor.concat('.', ver); + horVerArray.push(horVer); + } + } + return horVerArray; +} + +//打开配置的修改页面 +function openShapeConfigEdit(obj) { + var type = "update"; + var horizontal = $(obj).parent().parent().parent().find("td").eq(0).find("div").eq(1).data("loc"); + var verity = $(obj).parent().parent().parent().find("td").eq(0).find("div").eq(3).data("loc"); + var showType = $(obj).parent().parent().parent().find("td").eq(1).data("type"); + //获取已选择的位置(除去当前的位置选择) + var horVerArray = getSelectedHorAndVerLoc(); + for (var i = 0; i < horVerArray.length; i++) { + var temp = horVerArray[i]; + var tempHV = horizontal.concat('.', verity); + if (temp == tempHV) { + horVerArray.splice(i, 1); + break; + } + } + if (showType == "text") { + var textContent = $(obj).parent().parent().parent().find("td").eq(1).text(); + openShapeConfigUpdateDialog(obj, type, horizontal, verity, showType, horVerArray, textContent, key, attrName, isShowAttrName, iconContent); + } + if (showType == "attribute") { + var key = $(obj).parent().parent().parent().find("td").eq(1).data("key"); + var attrName = $(obj).parent().parent().parent().find("td").eq(1).data("attrname"); + var isShowAttrName = $(obj).parent().parent().parent().find("td").eq(1).data("isshow"); + //打开对话框 + openShapeConfigUpdateDialog(obj, type, horizontal, verity, showType, horVerArray, textContent, key, attrName, isShowAttrName, iconContent); + } + if (showType == "icon") { + var iconContent = $(obj).parent().parent().parent().find("td").eq(1).data("icon"); + //打开对话框 + openShapeConfigUpdateDialog(obj, type, horizontal, verity, showType, horVerArray, textContent, key, attrName, isShowAttrName, iconContent); + } +} + +function openShapeConfigUpdateDialog(obj, type, horizontal, verity, showType, horVerArray, textContent, key, attrName, isShowAttrName, iconContent) { + //打开对话框 + var dlg = FrmDialog.open({ + title : "修改", + width : 450, + height : 350, + draggable : false, + url : "./w", + data : { + sid : sid, + cmd : 'com.actionsoft.apps.coe.pal_pl_manage_shape_config_update_dialog_page', + wsId : wsId, + shapeId : shapeId, + category : methodId, + defaultCategory : defaultMethodId, + horVerArray : horVerArray, + type : type, + horizontal : horizontal, + verity : verity, + showType : showType, + textContent : textContent, + key : key, + attrName : attrName, + isShowAttrName : isShowAttrName, + iconContent : iconContent + }, + id : "shapeConfigUpdate", + onClose : closeAttrSelectDialog, + buttons : [{ + text : '确定', + cls : "blue", + handler : function() { + var data = dlg.win().getData(); + var result = handleUpdateShapeConfig(obj, data); + if (result == "error") { + return; + } + dlg.close(); + } + }, { + text : '取消', + handler : function() { + dlg.close(); + closeAttrSelectDialog(); + } + }] + }); +} + +function handleUpdateShapeConfig(obj, data) { + var showType = data.showType; + var horizontal = data.horizontal; + var verity = data.verity; + //校验必填项和制约 + if (horizontal.trim().length <= 0 || verity.trim().length <= 0) { + $.simpleAlert("显示位置【水平和垂直】不允许为空", "warning"); + return "error"; + } + //获取当前tr + var trHtml = $(obj).parent().parent().parent(); + var tdLocHtml = handleHorizontalAndVerity(horizontal, verity); + if (showType == "text") { + var content = data.textContent; + if (content.indexOf("") >= 0) { + $.simpleAlert("非法输入js脚本", "warning"); + return "error"; + } + //限制文本域字数长度 + if (content.length > 200) { + $.simpleAlert("文本内容长度不能超过200个字符", "warning"); + return "error"; + } + $(trHtml).empty(); + $(trHtml).append(tdLocHtml); + content = content.replace(//g, ">"); + var tdTextHtml = handleTextContent(showType, content); + $(trHtml).append(tdTextHtml); + } + if (showType == "attribute") { + var attrName = data.attrSelect; + if (attrName.trim().length <= 0) { + $.simpleAlert("【属性选择】不允许为空", "warning"); + return "error"; + } + $(trHtml).empty(); + $(trHtml).append(tdLocHtml); + var attrValue = ""; + var key = data.key; + var attrType = "string"; + var isShowAttrName = data.isShowAttrName; + if (attributesJsonArray.length > 0) { + for (var j = 0; j < attributesJsonArray.length; j++) { + var attr = attributesJsonArray[j]; + if (attr.key == key) { + attrValue = attr.value; + attrType = attr.type; + break; + } + } + } + attrValue = handleRelationAttrValue(attrType, key, attrValue); + var tdAttrHtml = handleAttributeContent(showType, attrName, attrValue, key, isShowAttrName); + $(trHtml).append(tdAttrHtml); + } + if (showType == "icon") { + var iconContent = data.iconContent; + if (iconContent == undefined) { + $.simpleAlert("【图标选择】不允许为空", "warning"); + return "error"; + } + $(trHtml).empty(); + $(trHtml).append(tdLocHtml); + var tdIconHtml = handleIconContent(showType, iconContent); + $(trHtml).append(tdIconHtml); + } + var tdEditAndDelHtml = addEditAndDelButton(); + $(trHtml).append(tdEditAndDelHtml); +} + +//删除配置 +function deleteShapeConfig(obj) { + var options = { + title : "提示", + content:"确定要删除吗?", + onConfirm: function(){ + var trHtml = $(obj).parent().parent().parent(); + $(trHtml).remove(); + //隐藏没有数据的提示 + var trShapeRulesHtml = $(".awsui-table tbody").find(".shapeRule"); + if (trShapeRulesHtml.length <= 0) { + $("#noData").css("display", "block"); + } + }, + onCancel : function(){ + } + }; + $.confirm(options); +} + +//返回数据 +function getConfigData() { + var dataArray = []; + //从页面上获取数据 + var trShapeRulesHtml = $(".awsui-table tbody").find(".shapeRule"); + for (var i = 0; i < trShapeRulesHtml.length; i++) { + var data; + var temp = trShapeRulesHtml[i]; + var horizontal = $(temp).find("td").eq(0).find("div").eq(1).data("loc"); + var verity = $(temp).find("td").eq(0).find("div").eq(3).data("loc"); + var showType = $(temp).find("td").eq(1).data("type"); + var cfgContent; + if (showType == "text") { + cfgContent = $(temp).find("td").eq(1).text(); + data = { + horizontal : horizontal, + verity : verity, + showType : showType, + cfgContent : cfgContent + } + dataArray.push(data); + } + if (showType == "attribute") { + var attrName = $(temp).find("td").eq(1).data("attrname"); + var key = $(temp).find("td").eq(1).data("key"); + var isShowAttrName = $(temp).find("td").eq(1).data("isshow"); + cfgContent = ""; + data = { + horizontal : horizontal, + verity : verity, + showType : showType, + cfgContent : cfgContent, + key : key, + attrName : attrName, + isShowAttrName : isShowAttrName + } + dataArray.push(data); + } + if (showType == "icon") { + var iconContent = $(temp).find("td").eq(1).data("icon"); + iconContent = iconContent.replace("=", ""); + data = { + horizontal : horizontal, + verity : verity, + showType : showType, + iconContent : iconContent + } + dataArray.push(data); + } + } + return dataArray; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.shape.config.update.dialog.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.shape.config.update.dialog.js new file mode 100644 index 00000000..de40011f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.shape.config.update.dialog.js @@ -0,0 +1,562 @@ +$(function(){ + //声明水平和垂直位置的集合 + var horizontals; + var verities; + var icons; + //初始化下拉框 + initSelect(); + //为显示方式下拉框添加切换事件 + changeShowTypeSelect(); + //开关的样式设置 + var executeOpt = { + showtextflag : false, + color : '#82b1ec',//开背景色 + onBtnColor: "#1a73e8", + onColor: "#1a73e8", + secondaryColor : '#bdc1c6',//关背景色 + swwidth : 30,//宽度 + swheight : 12,//高度 + change: function () { + + } + }; + switchAttributeNameBtn = $("#switchAttributeName").switchButton(executeOpt); + //初始化开关新样式 + consolePropertiesListClickEvent.init("#showAttrName"); + + //修改配置-回填 + if (type == "update") { + handleConfigUpdate(horizontal, verity, showType, textContent, key, attrName, isShowAttrName, iconContent); + } +}); +function initSelect() { + var optShowType = { + width : "100%", + data : [] + }; + //为下拉框赋值 + awsui.ajax.request({ + url: './jd', + type: 'get', + async: false, + data: { + sid: sid, + cmd: 'com.actionsoft.apps.coe.pal_pl_manage_shape_config_update_select_content', + }, + error: function () { + $.simpleAlert('网络有问题请求失败', 'info', 2000, {model: true}); + return false; + }, + success: function (data) { + horizontals = data.horizontals; + verities = data.verities; + handleLocMenuContent(horizontals, verities); + icons = data.icons; + //初始化图标菜单内容 + handleIconMenuContent(icons); + var showTypes = data.showTypes; + for (var i = 0; i < showTypes.length; i++) { + var temp = showTypes[i]; + if (temp == "text") { + var type = {id:temp, text:"文本信息"}; + } + if (temp == "attribute") { + var type = {id:temp, text:"属性信息"}; + } + if (temp == "icon") { + var type = {id:temp, text:"图标"}; + } + optShowType.data.push(type); + } + } + }); + + $("#showType").select2(optShowType); + //$("#iconSelect").select2(optIconSelect); +} +//点击显示属性名那行控制开关 +function changeSwitchAttributeName() { + var isChecked = $("#switchAttributeName")[0].checked; + if (isChecked) { + switchAttributeNameBtn.changeStatus(false); + } else { + switchAttributeNameBtn.changeStatus(true); + } +} +//点击展示水平位置选择菜单 +function showHorizontalLoc() { + //处理修改页面位置选择的制约 + var verVal = $("#verity").find(".loc"); + if (verVal.length > 0) { + var locValue = $(verVal).text().trim(); + handleHorizontalLocMenu(locValue); + } + + $("#menuHorizontal").menu({ //初始化菜单 + target:$("#horizontal") + }); + //修改菜单的位置 + $("#menuHorizontal").css("left", ""); + $("#menuHorizontal").css("top", ""); +} +//点击展示垂直位置选择菜单 +function showVerityLoc() { + //处理修改页面位置选择的制约 + var horVal = $("#horizontal").find(".loc"); + if (horVal.length > 0) { + var locValue = $(horVal).text().trim(); + handleVerityLocMenu(locValue); + } + + $("#menuVerity").menu({ //初始化菜单 + target:$("#verity") + }); + //修改菜单的位置 + $("#menuVerity").css("left", ""); + $("#menuVerity").css("top", ""); +} +//点击展示icon菜单 +function showIconMenu() { + handleIconMenuContent(icons); + $("#menuIcon").menu({ + target : $("#iconSelect") + }); + //修改菜单的位置 + $("#menuIcon").css("left", ""); + $("#menuIcon").css("top", ""); +} +function changeShowTypeSelect() { + $("#showType").on("change", function(e) { + var showTypeValue = $("#showType").val(); + if (showTypeValue == "text") { + $("#textBlock").css("display", "block"); + $("#attributeBlock").css("display", "none"); + $("#iconBlock").css("display", "none"); + } + if (showTypeValue == "attribute") { + $("#textBlock").css("display", "none"); + $("#attributeBlock").css("display", "block"); + $("#iconBlock").css("display", "none"); + } + if (showTypeValue == "icon") { + $("#textBlock").css("display", "none"); + $("#attributeBlock").css("display", "none"); + $("#iconBlock").css("display", "block"); + } + }); +} +//选择水平位置 +function selectHorizontalLoc(obj) { + //先清空下拉框中的内容 + $("#horizontal").html(""); + //填写到下拉框中 + var value = $(obj).html(); + var iconHtml = "
                                                " + + "
                                                "; + var content = "
                                                " + value + "
                                                " + iconHtml; + $("#horizontal").html(content); + //关闭菜单 + $("#menuHorizontal").css("display", "none"); + //处理位置制约关系 + var locValue = $(obj).text().trim(); + handleVerityLocMenu(locValue); +} + +//处理选择水平位置之后垂直位置菜单的更新 +function handleVerityLocMenu(locValue) { + var location = translateLoc(locValue, null); + locValue = location.horizontalValue; + var locRelationArray = horVerArray; + var verLocTemp = []; + if (locRelationArray.trim().length > 0) { + var array = locRelationArray.split(","); + for (var i = 0; i < array.length; i++) { + var temp = array[i]; + if (temp.indexOf(locValue) > -1) { + verLocTemp.push(temp.split(".")[1]); + } + } + } + //不同时选中间 + if (locValue == 'center') { + //判断是否已经存在center; + if (!(verLocTemp.indexOf(locValue) >= 0)) { + verLocTemp.push(locValue); + } + } + //更新垂直选择的菜单内容 + var tempVerities = JSON.parse(JSON.stringify(verities)); + for (var j = 0; j < verLocTemp.length; j++) { + for (var k = 0; k < tempVerities.length; k++) { + if (verLocTemp[j] == tempVerities[k]) { + tempVerities.splice(k, 1); + break; + } + } + //tempVerities.splice(tempVerities.findIndex(item => item === verLocTemp[j]), 1) + } + handleLocMenuContent(null, tempVerities); +} + +//处理选择垂直位置之后水平位置菜单的更新 +function handleHorizontalLocMenu(locValue) { + var location = translateLoc(null, locValue); + locValue = location.verityValue; + var locRelationArray = horVerArray; + var verLocTemp = []; + if (locRelationArray.trim().length > 0) { + var array = locRelationArray.split(","); + for (var i = 0; i < array.length; i++) { + var temp = array[i]; + if (temp.indexOf(locValue) > -1) { + verLocTemp.push(temp.split(".")[0]); + } + } + } + //不能同时选择中间 + if (locValue == 'center') { + //判断是否已经存在center; + if (!(verLocTemp.indexOf(locValue) >= 0)) { + verLocTemp.push(locValue); + } + } + //更新垂直选择的菜单内容 + var tempHorizontals = JSON.parse(JSON.stringify(horizontals)); + for (var j = 0; j < verLocTemp.length; j++) { + for (var k = 0; k < tempHorizontals.length; k++) { + if (verLocTemp[j] == tempHorizontals[k]) { + tempHorizontals.splice(k, 1); + break; + } + } + //tempHorizontals.splice(tempHorizontals.findIndex(item => item === verLocTemp[j]), 1) + } + handleLocMenuContent(tempHorizontals, null); +} +//选择垂直位置 +function selectVerityLoc(obj) { + //先清空下拉框中的内容 + $("#verity").html(""); + //填写到下拉框中 + var value = $(obj).html(); + var iconHtml = "
                                                " + + "
                                                "; + var content = "
                                                " + value + "
                                                " + iconHtml; + $("#verity").html(content); + //关闭菜单 + $("#menuVerity").css("display", "none"); + //处理位置制约关系 + var locValue = $(obj).text().trim(); + handleHorizontalLocMenu(locValue); +} +//展示属性选择 +function showAttributeSelect(wsId, shapeId, category, defaultCategory) { + var shapeName = shapeId; + var shapeCategory = category; + var title = "选择属性"; + var conObj = window.parent.$("#attr_content_designer").empty().css({"height": "280px"}); + var str = ''; + conObj.append(str); + window.parent.$("#attr_dialog-normal_designer").attr("title", title); + window.parent.$('#attr_content_iframe_designer').attr( + 'src', + "./w?sid=" + sid + "&cmd=com.actionsoft.apps.coe.pal_pl_more_attribute&type=shapeConfigSelect&wsId=" + wsId + + "&shapeName=" + shapeName + "&category=" + + shapeCategory + "&defaultCategory=" + defaultCategory); + window.parent.$("#attr_dialog-normal_designer").dialog({ + draggable : false, + buttons : [{ + text : '确定', + cls : "blue", + handler : function() { + //回写到属性选择框中 + var nodes = window.parent.attr_content_iframe_designer.checkTree.getCheckedNodes(); + var attrSelect = $(window.document).find("#attrSelect"); + if (nodes.length > 0) { + $(attrSelect).val(nodes[0].name); + $(attrSelect).data("key", nodes[0].key); + } else { + $(attrSelect).val(""); + } + window.parent.$("#attr_dialog-normal_designer").dialog('close'); + } + }, { + text : '取消', + handler : function() { + window.parent.$("#attr_dialog-normal_designer") + .dialog('close'); + } + }] + }); +} + +//处理配置信息回填 +function handleConfigUpdate(horizontal, verity, showType, textContent, key, attrName, isShowAttrName, iconContent) { + $("#showType").val([showType]).trigger("change"); + $("#horizontal").html(""); + var horHtml = getHorizontalHtml(horizontal); + var iconHtml = "
                                                " + + "
                                                "; + var contentH = "
                                                " + horHtml + "
                                                " + iconHtml; + $("#horizontal").html(contentH); + $("#verity").html(""); + var verHtml = getVerityHtml(verity); + var contentV = "
                                                " + verHtml + "
                                                " + iconHtml; + $("#verity").html(contentV); + if (showType == "text") { + $("#textContent").val(textContent); + $("#textBlock").css("display", "block"); + $("#attributeBlock").css("display", "none"); + $("#iconBlock").css("display", "none"); + } + if (showType == "attribute") { + $("#attrSelect").val(attrName); + $("#attrSelect").data("key", key); + if (isShowAttrName == "true") { + switchAttributeNameBtn.changeStatus(true); + } else { + switchAttributeNameBtn.changeStatus(false); + } + $("#textBlock").css("display", "none"); + $("#attributeBlock").css("display", "block"); + $("#iconBlock").css("display", "none"); + } + if (showType == "icon") { + var temp = iconContent.replace("=", "").split("|"); + var liHtml = "" + temp[0] + ""; + $("#iconSelect").empty(); + $("#iconSelect").css("height","36px"); + var iconHtml = "
                                                " + + "
                                                "; + var iconSelectHtml = liHtml + iconHtml; + $("#iconSelect").append(iconSelectHtml); + $("#textBlock").css("display", "none"); + $("#attributeBlock").css("display", "none"); + $("#iconBlock").css("display", "block"); + } +} + +function getData() { + var data; + var horizontalValue = $("#horizontal .loc").text().trim(); + var verityValue = $("#verity .loc").text().trim(); + var showTypeValue = $("#showType").val(); + //处理将水平和垂直中文替换 + var location = translateLoc(horizontalValue, verityValue); + horizontalValue = location.horizontalValue; + verityValue = location.verityValue; + if (showTypeValue == "text") { + var textContent = $("#textContent").val(); + data = { + horizontal : horizontalValue, + verity : verityValue, + showType : showTypeValue, + textContent : textContent + }; + } + if (showTypeValue == "attribute") { + var attrSelectValue = $("#attrSelect").val(); + var keyValue = $("#attrSelect").data("key"); + var isShowAttrName = $("#switchAttributeName")[0].checked; + data = { + horizontal : horizontalValue, + verity : verityValue, + showType : showTypeValue, + attrSelect : attrSelectValue, + key : keyValue, + isShowAttrName : isShowAttrName + }; + } + if (showTypeValue == "icon") { + var iconContent = $("#iconSelect i").data("icon"); + data = { + horizontal : horizontalValue, + verity : verityValue, + showType : showTypeValue, + iconContent : iconContent + }; + } + return data; +} +//转换位置中文 +function translateLoc(horizontalValue, verityValue) { + var location = {}; + if (horizontalValue != null) { + switch (horizontalValue) { + case "左外边": + horizontalValue = "mostLeft"; + break; + case "左内边": + horizontalValue = "left"; + break; + case "中间": + horizontalValue = "center"; + break; + case "右内边": + horizontalValue = "right"; + break; + case "右外边": + horizontalValue = "mostRight"; + break; + } + location.horizontalValue = horizontalValue + } + if (verityValue != null) { + switch (verityValue) { + case "上外边": + verityValue = "mostTop"; + break; + case "上内边": + verityValue = "top"; + break; + case "中间": + verityValue = "center"; + break; + case "下内边": + verityValue = "bottom"; + break; + case "下外边": + verityValue = "mostBottom"; + break; + } + location.verityValue = verityValue; + } + return location; +} +//处理位置菜单内容显示 +function handleLocMenuContent(horizontals, verities) { + if (horizontals != null) { + var horizontalHtml = ""; + for (var i = 0; i < horizontals.length; i++) { + var temp = horizontals[i]; + if (temp == "mostLeft") { + horizontalHtml += "
                                              • "; + horizontalHtml += ""; + horizontalHtml += "
                                                   左外边
                                              • "; + } + if (temp == "left") { + horizontalHtml += "
                                              • "; + horizontalHtml += ""; + horizontalHtml += "
                                                   左内边
                                              • "; + } + if (temp == "center") { + horizontalHtml += "
                                              • "; + horizontalHtml += ""; + horizontalHtml += "
                                                   中间
                                              • "; + } + if (temp == "right") { + horizontalHtml += ""; + } + if (temp == "mostRight") { + horizontalHtml += "
                                              • "; + horizontalHtml += ""; + horizontalHtml += "
                                                   右外边
                                              • "; + } + } + $("#menuHorizontal").html(horizontalHtml); + } + if (verities != null) { + var verityHtml = ""; + for (var i = 0; i < verities.length; i++) { + var temp = verities[i]; + if (temp == "mostTop") { + verityHtml += "
                                              • "; + verityHtml += ""; + verityHtml += "
                                                   上外边
                                              • "; + } + if (temp == "top") { + verityHtml += "
                                              • "; + verityHtml += ""; + verityHtml += "
                                                   上内边
                                              • "; + } + if (temp == "center") { + verityHtml += "
                                              • "; + verityHtml += ""; + verityHtml += "
                                                   中间
                                              • "; + } + if (temp == "bottom") { + verityHtml += "
                                              • "; + verityHtml += ""; + verityHtml += "
                                                   下内边
                                              • "; + } + if (temp == "mostBottom") { + verityHtml += "
                                              • "; + verityHtml += ""; + verityHtml += "
                                                   下外边
                                              • "; + } + } + $("#menuVerity").html(verityHtml); + } +} + +//处理图标选择的菜单初始化 +function handleIconMenuContent(icons) { + var liHtml = "
                                              • " + for (var i = 0; i < icons.length; i++) { + var icon = icons[i]; + var temp = icon.split("|"); + var iconValue = icon.replace("&", "&="); + for (var j = 1; j < temp.length; j++) { + if (i % 10 == 0 && i != 0) { + liHtml += "
                                                "; + } + liHtml += "" + temp[0] + ""; + } + } + liHtml += "
                                              • "; + $("#menuIcon").html(liHtml); +} + +function getIcon(obj) { + $(obj).removeAttr("onclick"); + $("#iconSelect").empty(); + $("#iconSelect").css("height","36px"); + var iconHtml = "
                                                " + + "
                                                "; + var iconContent = obj.outerHTML + iconHtml; + $("#iconSelect").append(iconContent); + $("#iconSelect i").css("margin-left", "10px"); + $("#menuIcon").css("display", "none"); +} + +function getHorizontalHtml(temp) { + var horHtml; + if (temp == "mostLeft") { + horHtml = "
                                                   左外边"; + } + if (temp == "left") { + horHtml = "
                                                   左内边"; + } + if (temp == "center") { + horHtml = "
                                                   中间"; + } + if (temp == "right") { + horHtml = "
                                                   右内边"; + } + if (temp == "mostRight") { + horHtml = "
                                                   右外边"; + } + return horHtml; +} + +function getVerityHtml(temp) { + var verHtml; + if (temp == "mostTop") { + verHtml = "
                                                   上外边"; + } + if (temp == "top") { + verHtml = "
                                                   上内边"; + } + if (temp == "center") { + verHtml = "
                                                   中间"; + } + if (temp == "bottom") { + verHtml = "
                                                   下内边"; + } + if (temp == "mostBottom") { + verHtml = "
                                                   下外边"; + } + return verHtml; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.shape.definition.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.shape.definition.js new file mode 100644 index 00000000..861da209 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.manage.shape.definition.js @@ -0,0 +1,52 @@ +function showShapeConfig(obj) { + //打开对话框 + var sid = $("#sid").val(); + var wsId = $("#wsId").val(); + //获取形状的id和目录 + var trElement = $(obj).parent().parent().parent(); + var shapeId = $(trElement).find("td").eq(3).find("span").text(); + var category = $(trElement).find("td").eq(4).find("span").text(); + var dlg = FrmDialog.open({ + title : "形状数据显示规则", + width : 810, + height : 487.6, + url : "./w", + data : { + sid : sid, + cmd : 'com.actionsoft.apps.coe.pal_pl_manage_shape_config_dialog_page', + wsId : wsId, + type : "commonShapeConfig", + shapeId : shapeId, + category : category + }, + id : "commonShapeConfig", + buttons : [{ + text : '确定', + cls : "blue", + handler : function() { + var dataArray = dlg.win().getConfigData(); + if (dataArray.length <= 0) { + dlg.close(); + return; + } + dataArray = JSON.stringify(dataArray); + //请求后台保存数据 + awsui.ajax.post("./jd?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_manage_shape_config_save", { wsId: wsId, methodId: category, shapeId: shapeId, dataArray: dataArray}, function(data) { + if (data.msg == "saveSuccess") { + $.simpleAlert("保存成功", "ok", 1500); + dlg.close(); + } else { + $.simpleAlert(data.msg,"error"); + } + }, 'json'); + } + }, { + text : '取消', + handler : function() { + dlg.close(); + } + }] + }); + //获取所需参数 + +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.pl.repository.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.pl.repository.js new file mode 100644 index 00000000..0258dd87 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.pl.repository.js @@ -0,0 +1,366 @@ +$(function() { + changeShowType(); + $("#show_style_icon .span_icon").unbind("click").bind("click", function(){ + changeShowType($(this).attr("icontype")); + }); + + // 导航菜单初始化 + // menuFix(); + sid = $("#sid").val(); + uuid = $("#uuid").val(); + initMarkAndAssgin();// 初始化bpn + initLayoutBtnEvent();// 添加事件 + var icon_style = $.cookie("icon_style"); + if (icon_style == "list") { + hideMarkAndAssgin()// 隐藏mark + } else { + showMarkAndAssgin();// 显示mark + } + + $("#createModelButton").on("click", function() { + if ($.cookie("is_first")) { + top.window.closeGuide(3); + top.window.finishGuide(); + } + }) + + initEvent(); + $(window).unbind("click").bind("click", function(){ + $(".layout_tile_edit").hide(); + }) + +}); + +function initEvent() { + $(".layout_tile_div .pal_down").unbind("click").bind("click", function(event){ + var editObj = $(this).parents(".layout_tile_div").find(".layout_tile_edit"); + if (editObj && editObj.is(":visible")) { + editObj.hide(); + } else if (editObj && editObj.is(":hidden")) { + editObj.show(); + } + event.stopPropagation(); + }); + + $("span[id$=edit]").bind("click", function(event){ + + }); + + $("span[id$=del]").bind("click", function(event){ + + }); +} + +var sid = "", uuid = ""; +// 初始化布局按钮事件 +function initLayoutBtnEvent() { + $(".icon-tiles").parent().on("click.mark", showMarkAndAssgin);// 显示mark + $(".icon-lists").parent().on("click.mark", hideMarkAndAssgin);// 隐藏mark +} +function createCoeFile() { + var url = "./w?sid=" + encodeURI(sid) + + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_template"; + $("#ui-dialog").css("width", "960px"); + $("#ui-dialog").css("height", "360px"); + $("#ui-dialog") + .html("
                                                '; + window.top.$("body").append(iframeWindow); + // 根据相应的引用页面,隐藏titile + /** ****************************调整select在不同页面下的样式********************************* */ + if (parent.location.href.indexOf("com.actionsoft.apps.coe.pal_pl_repository_designer") != -1) { + // jQuery("#plNameTr").css("display", "none"); + jQuery("#plDescTD").attr("width", "20%"); + if (Sys.firefox) { + $(".awsui-select").css({ + width : "225px", + height : "21px" + }); + $(".awsui-select-span").css("width", "220px"); + $(".awsui-select-span span").css("width", "218px"); + } else { + $(".awsui-select").css({ + width : "230px", + height : "21px" + }); + $(".awsui-select-span").css("width", "225px"); + $(".awsui-select-span span").css("width", "223px"); + } + } else { + /* + if (Sys.firefox) { + + if (parent.location.href.indexOf("com.actionsoft.apps.network_home") == -1) {// 从流程团队中打开设计器时 + $(".awsui-select").css({ + width : "225px", + height : "21px" + }); + $(".awsui-select-span").css("width", "220px"); + $(".awsui-select-span span").css("width", "218px"); + } else { + $(".awsui-select").css("width", "440px"); + } + } else { + $(".awsui-select").css("width", "448px"); + } + */ + $(".awsui-select").css("width", "448px"); + } + $(".awsui-select").customSelect(); + // 为最顶级窗口添加一个弹窗 + window.top.$("#attr_dialog").remove(); + var iframeWindow = ''; + parent.$("body").append(iframeWindow); + // textarea添加点击事件 + $('#frmMain').find('textarea.awsui-textarea').off("click").on("click", function() { + if (!$("#textarea-dialog").is(":hidden")) { + return; + } + var title = $(this).parent().siblings("td").text(); + openTextareaDialog($(this), title); + }); +}); + +/** + * 调整buttonedit + */ +function initButtonEdit() { + // $("#plRD").buttonedit({ + // onClick : function() { + // openDepartmentTree(frmMain, '', 'plRDId', 'plRD', false, ''); + // } + // }); + // $("#plRP").buttonedit({ + // onClick : function() { + // openAddressBook($("#plRP")); + // } + // }); + $("#plSecurityWName").buttonedit({ + onClick : function() { + openManagerTree('m'); + } + }); + $("#plSecurityRName").buttonedit({ + onClick : function() { + openManagerTree('r'); + } + }); +} + +/** + * 功能:去除字符串中所有空格 传参:需要处理的字符串 返回值:去除空格后的字符串 + */ +function trimSpaces(Str) { + var ResultStr = ""; + Temp = Str.split(/\s/); + for (i = 0; i < Temp.length; i++) { + ResultStr += Temp[i]; + } + return ResultStr; +} + +function getIsHasChildren(id, wsId) { + var params = { + wsid : wsId, + pid : id + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_istreechildren", + data : params, + success : function(msg) { + result = msg; + if (result == 1 || editable == "0") { + jQuery("#plIsBottomLevel").attr("disabled", true); + result = ""; + } else { + jQuery("#plIsBottomLevel").attr("disabled", false); + } + } + }); +} + +function mouseUp(treeNode) { + +} + +// function getChildNo(node, id) { +// var sid=jQuery("#sid").val(); +// if (node) { +// var children = jQuery('#processIds').tree('getChildren', node.target); +// var s = ''; +// //查看每个节点的孩子 +// for (var i = 0; i < children.length; i++) { +// getChildNo(children[i], id); +// } +// //当前节点没有孩子 请求数据 +// if (children.length == 0) { +// if (node.attributes.requestType) { +// if (!treearray[node.id]) { +// jQuery.post("./w", { +// sid : sid, +// cmd : 'COE_TEAM_DIMENSION_TREEJSON', +// requestType : node.attributes.requestType, +// param1 : node.text, +// param2 : id +// }, function getChildNodesHD(nodes) { +// for (var i = 0; i < nodes.length; i++) { +// var n = nodes[i]; +// jQuery('#processIds').tree('append', { +// parent : node.target, +// data : [{ +// id : n.id, +// iconCls : n.iconCls, +// attributes : n.attributes, +// state : n.state, +// text : n.text, +// checked : true +// }] +// }); +// } +// treearray[node.id] = node.id; +// }, "json"); +// } +// } +// } +// } +// } + +function openTree() { + initDimensionId("0"); + // jQuery('#workflowTree').dialog('open'); + +} + +// function closeTreeDialog(){ +// jQuery('#workflowTree').dialog('close'); +// } + +// 关联流程 +function saveAssociationProcess() { + var nodes = jQuery('#processIds').tree('getSelected'); + var s = ''; + var name = ''; + var wfmaster = ""; + if (nodes.attributes.uuid && nodes.attributes.uuid != "") { + s += nodes.attributes.uuid; + name += nodes.text; + wfmaster = nodes.attributes.wfmaster; + } + if (s.length < 1) { + window.top.$.simpleAlert(请选择有效流程); + return false; + } + closeTreeDialog(); + jQuery("#plAwsPidName").val(name); + jQuery("#plAwsPid").val(s); + jQuery("#plRP").val(wfmaster); +} + +// 显示可管理该记录小组树 +function managerTreamTree(m) { + var sid = $("#sid").val(); + var wsId = parent.$("#coeContent").get(0).contentWindow.document + .getElementById("coeContentiframe").contentWindow.$("#wsId").val(); + var ids = ""; + if (m == 'm') { + ids = jQuery("#plSecurityW").val(); + } else { + ids = jQuery("#plSecurityR").val(); + } + jQuery('#teamIds').tree({ + checkbox : true, + url : encodeURI('./w?sid=' + sid + + '&cmd=COE_PAL_PROCESSLEVEL_TREAM_TREEJSON&wsid=' + wsId + + "&ids=" + ids), + onClick : function(node) { + }, + onBeforeExpand : function(node, param) { + if (!node.checked) { + jQuery(this).tree('options').url = encodeURI('./w?sid=' + sid + + '&cmd=COE_PAL_PROCESSLEVEL_TREAM_TREEJSON&wsid=' + + wsId + '&pid=' + node.pid + "&ids=" + ids); + } + }, + onLoadSuccess : function(node, data) { + var root = jQuery(this).tree("find", "0"); + if (root) { + jQuery(this).tree("expand", root.target); + } + if (node) { + jQuery(this).tree("expand", node.target); + } + }, + onCheck : function(node, checked) { + } + }); +} + +// 打开可管理该记录小组树 +function openManagerTree(type) { + managerTreamTree(type); + if (type == 'r') { + jQuery(".panel-title").text(访问该记录的小组); + } else { + jQuery(".panel-title").text(可管理该记录的小组); + } + manager = type; + jQuery('#managerTree').dialog('open'); + +} + +// 设置可管理该记录小组值 +function setValue() { + var nodes = jQuery('#teamIds').tree('getChecked'); + var s = ""; + var name = ''; + if (nodes) { + var mm = 0; + for (var i = 0; i < nodes.length; i++) { + if (nodes[i].id > 0 && nodes[i].id != "" && nodes[i].id != null) { + if (mm == 0) { + s += nodes[i].id; + name += nodes[i].text; + } else { + s += "," + nodes[i].id; + name += "," + nodes[i].text; + } + mm++; + } + } + } + // if (s.length < 1) { + // jQuery.messager.window.top.$.simpleAlert(提示, 请选择小组, "info"); + // return false; + // } + + closeManagerDialog(); + if (manager == "m") { + jQuery("#plSecurityWName").val(name); + jQuery("#plSecurityW").val(s); + } else { + jQuery("#plSecurityRName").val(name); + jQuery("#plSecurityR").val(s); + } +} + +function closeManagerDialog() { + jQuery('#managerTree').dialog('close'); +} + +function openmailtree(form, mail_target) { + form.cmd.value = "CLIENT_UI_ADDRESS_INNER_OPEN"; + form.groupstylevalue.value = ''; + form.groupstyle.value = 0; + form.mail_target.value = mail_target; + // form.mail_user.value = form.stepTogetherUser.value; + var width = window.screen.availWidth; + var height = window.screen.availHeight; + var left = (width - 660) / 2; + var top = (height - 380) / 2; + window.open( + '../commons/wait.htm', + 'openmailtree', + 'left=' + + left + + ',top=' + + top + + ',width=660,height=380,location=no,menubar=no,toolbar=no,status=no,directories=no,scrollbars=no,resizable=no'); + form.target = "openmailtree"; + form.submit(); + return false; +} + +function initCombobox(refs, parentObj) { + var inDesigner = false; + if (parent.location.href.indexOf("com.actionsoft.apps.coe.pal_pl_repository_designer") != -1) { + inDesigner = true; + } else { + inDesigner = false; + } + parentObj.find("input[inputType=select], input[inputType=select_m]").each(function(){ + var objId = $(this).attr("objid"); + var optionData = new Array(); + var ref = refs[objId]; + if (ref == undefined) { + ref = ""; + } + ref = ref.split(","); + for (var i = 0; i < ref.length; i++) { + optionData.push(ref[i]); + } + var options = { + width : 230, + height : 25, + placeholder : "请选择", + editable : false, + sep : ",", + objId : objId, + select: function() { + $("#" + this.objId).val(comboboxs[this.objId].getValue()); + saveContent($("#" + this.objId)); + } + }; + if (inDesigner) { + options.width = 230; + } else { + options.width = 445; + } + options.data = optionData; + + if($(this).attr("inputType") == "select") { + options.multiple = false; + } else { + options.multiple = true; + } + if (options) { + var comboboxObj = $(this).combobox(options); + comboboxs[objId] = comboboxObj; + if (editable == "0") { + comboboxObj.disable(); + } + } + }) +} + +// 替换掉不存在的checkid +function replaceNotExitsId(str, tempArr) { + for (var index = 0; index < tempArr.length; index++) { + if (tempArr[index] != 0 && tempArr[index] != "0" + && tempArr[index] != "") { + str = str.replace(tempArr[index] + "|", ""); + } + } + return str; +} + +// 过滤出当在节点上不选中时的属性 + +function filterNotCheckedAttribute(checkedObj, existTempIds) { + + var exitObj = existTempIds.split("|"); + var result1 = []; + if (checkedObj.length == 0) { + return []; + } else { + var flag = false; + for (var b = 0; b < checkedObj.length; b++) { + var checkedArr1 = checkedObj[b]; + for (var a = 0; a < exitObj.length; a++) { + var exitArr1 = exitObj[a]; + if (exitArr1 == checkedArr1.id) { + result1.push(checkedArr1); + break; + } + } + } + return result1; + } +} + +// 移除图形属性中部分已存在的元素并返回不同元素 + +function removeAttributeAndReturnDifferent(existTempIds, newObj1) { + var exitObj = existTempIds.split("|"); + var result1 = []; + for (var a = 0; a < newObj1.length; a++) { + var obj1 = newObj1[a]; + for (var i = 0, n = 0; i < exitObj.length; i++) { + if (exitObj[i] == obj1.id) { + result1.push(i); + //break; + } + } + } + for (var i = 0; i < result1.length; i++) { + exitObj[result1[i]] = 0; + } + return exitObj; +} + +//获取未选中的元素 +function getNotCheckedAttr(tempArr) { + var str = ""; + for (var index = 0; index < tempArr.length; index++) { + if (tempArr[index] != 0 && tempArr[index] != "0" + && tempArr[index] != "") { + str += "," + tempArr[index]; + } + } + str = str.substring(1); + return str; +} +// 删除没有选中的元素 +function removeNotCheckedAttribute(tempArr, url1, data1) { + var str = ""; + for (var index = 0; index < tempArr.length; index++) { + if (tempArr[index] != 0 && tempArr[index] != "0" + && tempArr[index] != "") { + str += tempArr[index] + "|"; + } + } + if (str != "") { + str = str.substring(0, str.lastIndexOf("|")); + data1 = data1 + "&attrJsonIds=" + str; + jQuery.ajax({ + type : "POST", + url : url1, + data : data1, + success : function(msg) { + for (var index = 0; index < tempArr.length; index++) { + if (tempArr[index] != 0 + && tempArr[index] != "0" + && tempArr[index] != "") { + $("#tr_" + tempArr[index] + "").remove(); + } + } + /*************************************************** + * 发送"删除属性"监听事件 begin + **************************************************/ + var changeItems = { + action : "removeAttribute", + content : { + iframe : "file_attribute", + id : "moreAttr", + value : tempArr, + existIds : existIds + } + }; + var messagesStr = JSON.stringify(changeItems); + sendListenEvent("[" + messagesStr + "]"); + /** ***************发送"删除属性"监听事件 end****************** */ + } + }); + } +} + +function saveDialogTableValue(obj,id) { + let sid = $("#sid").val(); + let uuid = $("#id").val(); + let jsonContent = JSON.stringify(obj) + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_more_attr_content_save", + data : "uuid=" + uuid + "&josnKey=" + encodeURIComponent(id) + + "&josnContent=" + jsonContent, + success : function(msg) { + if(awsui.decode(msg).result == "error") { + $.simpleAlert(awsui.decode(msg).msg, "error"); + } + if(awsui.decode(msg).result == "ok") { + + } + if (msg == "true") { + // 发送"修改属性"监听事件 + var changeItems = { + action : "updateAttribute", + content : { + iframe : "file_attribute", + id : id, + value : jsonContent + } + }; + var messagesStr = JSON.stringify(changeItems); + sendListenEvent("[" + messagesStr + "]"); + } + } + }); + +} +function saveContent(obj) { + var sid = $("#sid").val(); + var uuid = $("#id").val(); + var id = obj.attr("id"); + var jsonContent = obj.val(); + if (jsonContent.indexOf("") > -1) { + $(obj).val(""); + $.simpleAlert("禁止输入js脚本!", "warning"); + return; + } + //原先值与离焦时的值比较,相同则不触发事件 + var originvalue = $(obj).attr("data-originvalue"); + if(originvalue == jsonContent){ + return; + } + if (obj.attr("relationFileId") != undefined) { + jsonContent = { + fileId : uuid, + shapeId : "", + shapeText : "", + attrId : obj.attr("id"), + relationFileId : obj.attr("relationFileId"), + relationShapeId : obj.attr("relationShapeId"), + relationShapeText : obj.val(), + groupPath : obj.attr("groupPath") + } + } + if (typeof(jsonContent) == "object") { + jsonContent = JSON.stringify(jsonContent); + } + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_more_attr_content_save", + data : "uuid=" + uuid + "&josnKey=" + encodeURIComponent(id) + + "&josnContent=" + jsonContent, + success : function(msg) { + if(awsui.decode(msg).result == "error") { + $.simpleAlert(awsui.decode(msg).msg, "error"); + } + if(awsui.decode(msg).result == "ok") { + //修改成功,将data-originvalue更新为最新值 + if(originvalue != jsonContent){ + $(obj).attr("data-originvalue",jsonContent); + } + } + if (msg == "true") { + // 发送"修改属性"监听事件 + var changeItems = { + action : "updateAttribute", + content : { + iframe : "file_attribute", + id : id, + value : jsonContent + } + }; + var messagesStr = JSON.stringify(changeItems); + sendListenEvent("[" + messagesStr + "]"); + } + } + }); + +} +var maskStackCount = 0; +function mask(method) { + var winObj = parent.$("body").find("iframe[name='dialognormaliframe']"); + if (typeof method == "undefined") { + method = "open"; + } + if (method == "open") { + if (maskStackCount <= 0) { + var mask = $("") + .appendTo("body"); + mask.css({ + width : winObj.width() + "px", + height : winObj.height() + "px", + filter : "alpha(opacity=60)" + }).show(); + winObj.on("resize.mask", function() { + mask.css({ + width : winObj.width() + "px", + height : winObj.height() + "px" + }); + }); + } + maskStackCount++; + } else if (method == "close") { + maskStackCount--; + $("#window-mask").remove(); + winObj.off("resize.mask"); + } +} + +// 组合已有和当前窗口选择的属性 +function filterRepeatAttribute(arr1, arr2) { + var result = []; + var exitObj = arr2.split("|"); + for (var a = 0; a < arr1.length; a++) { + var arrEle1 = arr1[a]; + var re = false; + for (var i = 0, n = 0; i < exitObj.length; i++) { + if (exitObj[i] == arrEle1.id) { + re = true; + } + } + if (re) { + if ($("#" + arrEle1.id).val() != undefined) { + arrEle1.value = $("#" + arrEle1.id).val(); + } + } + result.push(arrEle1); + } + + return result; +} + +// function refeshIpad(){ +// // $("select#plM").click(); +// window.top.$.simpleAlert($("#plM").length) +// } + +function openUpFile() { + + if (parent.isParentShow) { + var conObj = parent.$("#upfile-content").empty(); + var str = ''; + conObj.append(str); + parent.$("#upfile-dialog").attr("title", "附件"); + parent.$('#upfile-content-iframe').attr( + 'src', + "./w?sid=" + $("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_upfile_portal_page&pl_uuid=" + + $("#id").val() + "&shape_uuid=" + "&type=file"); + parent.$("#upfile-dialog").dialog({ + buttons : [{ + text : '关闭', + handler : function() { + parent.$("#upfile-dialog").dialog("close"); + } + }] + }); + } else { + var conObj = $("#upfile-content").empty(); + var str = ''; + conObj.append(str); + $("#upfile-dialog").attr("title", "附件"); + $('#upfile-content-iframe').attr( + 'src', + "./w?sid=" + $("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_upfile_portal_page&pl_uuid=" + + $("#id").val() + "&shape_uuid=" + "&type=file"); + $("#upfile-dialog").dialog({ + buttons : [{ + text : '关闭', + handler : function() { + $("#upfile-dialog").dialog("close"); + } + }] + }); + } + +} + +/* + * 发送"修改属性"监听事件 + */ +function sendListenEvent(messagesStr) { + if (parent.CLB) { + var a = { + action : "changeAttribute", + messages : messagesStr, + ignore : "messages" + }; + parent.CLB.cmdList = [{ + "type" : "message", + "cmd" : "com.actionsoft.apps.coe.pal_pl_repository_designer_add_realtimeevents" + }]; + parent.CLB.send(a); + } +} + +// 打开多行文本辅助编辑框 +function openTextareaDialog(obj, title,id) { + if (title == "undefined") { + title = ""; + } + if(title == '') { + title = "请输入"; + } + $(obj).blur(); + if (parent.isParentShow) { + parent.$("#textarea-dialog textarea").val(obj.val()); + parent.$("#textarea-dialog").attr("title", title); + // parent.$("#textarea-dialog textarea").blur(); + parent.$("#textarea-dialog").dialog({ + draggable: true, + buttons : [{ + text : '确定', + cls : "blue", + handler : function() { + obj.val(parent.$("#textarea-dialog textarea").val()); + saveContent($(obj)); + parent.$("#textarea-dialog").dialog("close"); + } + }, { + text : '取消', + handler : function() { + parent.$("#textarea-dialog").dialog("close"); + } + }] + }); + parent.$("#textarea-dialog textarea").focus(); + } else { + $("#textarea-dialog textarea").val(obj.val()); + $("#textarea-dialog").attr("title", title); + // $("#textarea-dialog textarea").blur(); + $("#textarea-dialog").dialog({ + buttons : [{ + text : '确定', + cls : "blue", + handler : function() { + obj.val($("#textarea-dialog textarea").val()); + saveContent($(obj)); + $("#textarea-dialog").dialog("close"); + } + }, { + text : '取消', + handler : function() { + $("#textarea-dialog").dialog("close"); + } + }] + }); + $("#textarea-dialog textarea").focus(); + + } +} + +// 打开文件属性表格弹框 + +function showTableDialog(obj,value,id) { + let tableList = [] + if (JSON.stringify(value) == '{}') { + tableList = [ + { id: 'table_head' ,name: '命名', desc: '描述'} + ] + } else { + tableList = value.table + } + parent.operateList = tableList + let defaultTitle = $("#tableTitle").val() || '未命名表单' + var thead = + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '操作' + + '' + if (parent.isParentShow) { + parent.$('#attribute-table-content1').empty() + parent.$('#attribute-add-content1').empty() + parent.$("#attribute-title-content1").val(defaultTitle) + parent.$('#attribute-table-content1').append(thead) + for ( let i = 1; i < tableList.length; i++) { + let str = + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '删除' + +'' + parent.$('#attribute-table-content1').append(str) + } + parent.$('#attribute-add-content1').append('') + parent.$("#attribute-table-window1").dialog({ + draggable: true, + buttons : [{ + text : '确定', + cls : "blue", + handler : function() { + let name = parent.$("#attribute-title-content1").val() + $("#tableTitle").val(name) + let inputs = parent.$('#attribute-table-content1').find('input') + parent.operateList.forEach((item,index) => { + item.name = inputs[2*index].value + item.desc = inputs[2*index+1].value + }) + let obj = { + name: name, + table: parent.operateList + } + saveDialogTableValue(obj,id) + parent.$("#attribute-table-window1").dialog("close"); + } + }, { + text : '取消', + handler : function() { + parent.$("#attribute-table-window1").dialog("close"); + } + }] + }); + } else { + + } +} + +var operateList = [] +function addTr() { + let newTrId = Date.now().toString(36) + let defaultStr = + ' ' + + '' + + '' + + '删除' + + '' + operateList.push({ id: newTrId ,name: '命名',desc: '描述'}) + $('#attribute-table-content1').append(defaultStr) +} + +function removeTr(obj) { + let removeId = obj.parentNode.id + operateList.splice(operateList.findIndex(item => item.id == removeId), 1) + let tr = obj.parentNode + tr.remove() +} + +//打开对象关联Dialog +function openRelationDialog(obj, callback) { + var title = obj.closest('tr').find('td:first').text(); + if (title == undefined || title == '') { + title = '选择模型对象'; + } + var ref = obj.attr('ref');// 存储关联范围配置 + var relationDlg = parent.FrmDialog.open({ + title: title, + width:710, + height: 400, + url:"./w", + data:{ + sid: $("#sid").val(), + cmd: "com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_tree", + wsId: $("#wsid").val(), + ref: ref, + shapeId: "", + attrId: obj.attr("id"), + relationShapeIds: obj.attr("relationShapeId"), + relationFileIds: obj.attr("relationFileId"), + modelId: $("#id").val(), + ruuid: uuid + }, + id:"relationDialog", + buttons: [ + {text:'确定',cls:"blue",handler:function(){ + var attrId = obj.attr("id"); + var relationFileId = ""; + var relationShapeId = ""; + var relationShapeText = ""; + var relations = relationDlg.win().getRelationShapeInfos(); + if (relations != undefined && relations.length > 0) { + for(var i = 0; i < relations.length; i++) { + var relationShape = relations[i]; + if(i == relations.length -1) { + relationFileId += relationShape.relationFileId; + relationShapeId += relationShape.relationShapeId; + relationShapeText += relationShape.relationShapeText; + } else { + relationFileId += relationShape.relationFileId + ","; + relationShapeId += relationShape.relationShapeId + ","; + relationShapeText += relationShape.relationShapeText + ","; + } + } + } + obj.attr("attrId", attrId); + obj.attr("relationFileId", relationFileId); + obj.attr("relationShapeId", relationShapeId); + obj.val(relationShapeText); + if (callback && callback == "saveContent") { + saveContent(obj); + } + parent.FrmDialog.close("relationDialog"); + }}, + {text:'取消',handler:function(){ + parent.FrmDialog.close("relationDialog"); + }} + ] + }); +} + +function selectAttrTabTag(showContent, selfObj) { + // 操作标签 + var tag = $("#tabUlContainer li"); + var taglength = tag.length; + for (var i = 0; i < taglength; i++) { + tag[i].className = ""; + } + selfObj.parentNode.className = "selectTag"; + // 操作内容 + $('div[data-type=tag]').css('display', 'none'); + $('#' + showContent).css('display', 'block'); + +} + +// 关联bpm组织架构dlg +function openRelationAwsorgDialog(obj) { + var title = obj.closest('tr').find('td:first').text(); + if (title == undefined || title == '') { + title = '添加AWS PaaS平台组织'; + } + var objId = obj.attr("id"); + var ref = obj.attr('ref');// 存储关联范围配置 + var relationAwsorgDialog = parent.FrmDialog.open({ + title: title, + width:710, + height: 400, + url:"./w", + data:{ + sid: $("#sid").val(), + cmd: "com.actionsoft.apps.coe.pal_pl_repository_designer_aws_org_page", + wsId: $("#wsid").val(), + ref: ref, + fileId: uuid, + shapeId: "", + attrId: objId + }, + id:"relationAwsorgDialog", + buttons: [ + {text:'确定',cls:"blue",handler:function(){ + var obj = relationAwsorgDialog.win().getRelevanceAwsData(); + var checkedOrgList = []; + for (var i in obj) { + checkedOrgList.push(obj[i]); + } + // 更新数据库 + saveRelevanceAwsOrgShapesTODB(checkedOrgList, "", "", objId); + parent.FrmDialog.close("relationAwsorgDialog"); + }}, + {text:'取消',handler:function(){ + parent.FrmDialog.close("relationAwsorgDialog"); + }} + ] + }); +} + +//将关联关系保存到数据库(AWS org) +function saveRelevanceAwsOrgShapesTODB(awsorgValueArr, shapeId, shapeName, objId) { + $.ajax({ + type : "POST", + url : "./jd?sid=" + $("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_aws_org_relevance_save", + data : { + relationAwsOrg : JSON.stringify(awsorgValueArr), + shapeId : shapeId, + fileId : uuid, + shapeGroupId : '', + attrId : objId, + shapeText : shapeName + }, + success : function(msg) { + if (msg.result == "ok") { + var name = []; + var name1 = []; + var name2 = []; + var name3 = []; + var name4 = []; + for (var i = 0; i < awsorgValueArr.length; i++) { + if (awsorgValueArr[i].type == 'department') { + name1.push(awsorgValueArr[i].name); + } + if (awsorgValueArr[i].type == 'user') { + name2.push(awsorgValueArr[i].name); + } + if (awsorgValueArr[i].type == 'position') { + name3.push(awsorgValueArr[i].name); + } + if (awsorgValueArr[i].type == 'role') { + name4.push(awsorgValueArr[i].name); + } + } + if (name1.length > 0) { + name = name.concat(name1); + } + if (name2.length > 0) { + name = name.concat(name2); + } + if (name3.length > 0) { + name = name.concat(name3); + } + if (name4.length > 0) { + name = name.concat(name4); + } + $('#' + objId).val(name.join(",")); + $('#' + objId).attr('data-value', awsorgValueArr); + } + } + }); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.empower.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.empower.js new file mode 100644 index 00000000..6f511b59 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.empower.js @@ -0,0 +1,142 @@ +var plW=""; +var plR=""; + +jQuery(function(){ + managerTreamTree("m"); +}); + + +//显示可管理该记录小组树 +function managerTreamTree(m){ + var sid=$("#sid").val(); + var wsId=parent.$("#coeContent").get(0).contentWindow.$("#wsId").val(); + jQuery('#teamIds').tree({ + checkbox: true, + url: encodeURI('./w?sid='+sid+'&cmd=COE_PAL_PROCESSLEVEL_TREAM_TREEJSON&wsid='+wsId+"&ids="+plSecurityW), + onClick:function(node){ + }, + onBeforeExpand:function(node,param){ + if(!node.checked){ + jQuery(this).tree('options').url =encodeURI('./w?sid='+sid+'&cmd=COE_PAL_PROCESSLEVEL_TREAM_TREEJSON&wsid='+wsId+'&pid='+node.pid+"&ids="+plSecurityW); + } + },onLoadSuccess:function(node, data){ + var root = jQuery(this).tree("find","0"); + if(root){ + jQuery(this).tree("expand",root.target); + } + if(node){ + jQuery(this).tree("expand",node.target); + } + },onCheck:function(node, checked){ + } + }); + + jQuery('#teamIds1').tree({ + checkbox: true, + url: encodeURI('./w?sid='+sid+'&cmd=COE_PAL_PROCESSLEVEL_TREAM_TREEJSON&wsid='+wsId+"&ids="+plSecurityR), + onClick:function(node){ + }, + onBeforeExpand:function(node,param){ + if(!node.checked){ + jQuery(this).tree('options').url =encodeURI('./w?sid='+sid+'&cmd=COE_PAL_PROCESSLEVEL_TREAM_TREEJSON&wsid='+wsId+'&pid='+node.pid+"&ids="+plSecurityR); + } + },onLoadSuccess:function(node, data){ + var root = jQuery(this).tree("find","0"); + if(root){ + jQuery(this).tree("expand",root.target); + } + if(node){ + jQuery(this).tree("expand",node.target); + } + },onCheck:function(node, checked){ + } + }); +} + +//设置可访问 和可管理的值 +function setValue(){ + var nodes = jQuery('#teamIds').tree('getChecked'); + var nodes1 = jQuery('#teamIds1').tree('getChecked'); + var s=""; + var name=''; + var s1=""; + var name1=''; + if(nodes){ + var mm=0; + for(var i=0; i0 && nodes[i].id != ""&&nodes[i].id!=null) { + if(mm==0){ + s += nodes[i].id; + }else{ + s +=","+nodes[i].id; + + } + mm++; + } + } + } + if(nodes1){ + var mm1=0; + for(var i=0; i0 && nodes1[i].id != ""&&nodes1[i].id!=null) { + if(mm1==0){ + s1 += nodes1[i].id; + }else{ + s1 +=","+nodes1[i].id; + } + mm1++; + } + } + } + plW=s; + plR=s1; +} + +function saveProcessLevel(){ + var id=jQuery("#id").val(); + var iSappliedW=jQuery("input[name=isLowerLevelW]:checked").val(); + var iSappliedR=jQuery("input[name=isLowerLevelR]:checked").val(); + setValue(); + var newiSappliedR=""; + var plws=plW.split(","); + var plrs=plR.split(","); + var ss=""; + for (var j=0; j < plws.length; j++) { + newiSappliedR=plR.replace(","," ").replace(plws[j],""); + plR= newiSappliedR; + + } + var newplRs=plR.split(" "); + var c=0; + for (var i=0; i < newplRs.length; i++) { + if(newplRs[i]!=""){ + if(c==0){ + ss+=newplRs[i]; + }else{ + ss+=","+newplRs[i]; + } + c++; + } + } + $.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent($('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_processlevel_empower_save", + data : "id=" + id + "&plSecurityR=" +ss +"&plSecurityW="+plW+"&iSappliedR="+iSappliedR+"&iSappliedW="+iSappliedW, + success : function(msg) { + if(msg==1){ + try{ + parent.$("#coeContent").get(0).contentWindow.document.getElementById("coeContentiframe").contentWindow.refreshParentNode(); + // parent.$("#coeContent").get(0).contentWindow.document.getElementById("coeContentiframe").contentWindow.reloadGrid(); + //parent.$("#coeContent").get(0).contentWindow.document.getElementById("coeContentiframe").contentWindow.$("#name_"+id).trigger('click'); + }catch(e){} + parent.parent.jQuery.close('showOpenProcessLevel'); + + }else{ + window.top.$.simpleAlert("error"); + } + } + }); +} + + + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.main.autoajax.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.main.autoajax.js new file mode 100644 index 00000000..a7773986 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.main.autoajax.js @@ -0,0 +1,228 @@ +//锟斤拷锟� +//锟斤拷锟斤拷: $("#test").myAutoInput("Test_test"); 锟斤拷台锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟� autoContent +//锟斤拷止锟�锟斤拷锟斤拷:autocomplete="off" +var autoTime=600;//锟斤拷锟斤拷锟斤拷锟� +/*===================================================================================*/ +var autoInputObj;//input锟斤拷锟斤拷 +var autoCount=0; +var autoCountWait=0; +var autoURL; +var autoVal; +var wing_event_keyCode; +var autoIndex; +var autoLenght; +$.fn.myAutoInput = function(url) { + autoURL=url; + var obj = $(this); + obj.keyup(function(event){ + //alert(event.keyCode); + wing_event_keyCode=event.keyCode; + autoVal=this.value; + autoInputObj=obj; + var auto = document.getElementById('autoDiv'); + if (wing_event_keyCode == 40 && auto.style.display == 'block') {//锟斤拷锟斤拷锟铰硷拷 + $("#autoDiv"+autoIndex).css("backgroundImage","url('')"); + $("#autoDiv"+autoIndex).css("color","black"); + $("#autoDiv"+autoIndex).css("fontWeight","normal"); + if(autoIndex>=autoLenght-1) + { + $("#autoDiv0").get(0).style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + $("#autoDiv0").css("color","white"); + //$("#autoDiv0").css("fontWeight","bold"); + autoIndex=0; + }else + { + autoIndex++; + $("#autoDiv"+(autoIndex)).get(0).style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + $("#autoDiv"+autoIndex).css("color","white"); + //$("#autoDiv"+autoIndex).css("fontWeight","bold"); + + } + //autoInputObj.get(0).value=$("#autoDiv"+autoIndex).data("value"); + return; + }else if (wing_event_keyCode == 38 && auto.style.display == 'block') {//锟斤拷锟斤拷锟较硷拷 + $("#autoDiv"+autoIndex).css("backgroundImage","url('')"); + $("#autoDiv"+autoIndex).css("color","black"); + $("#autoDiv"+autoIndex).css("fontWeight","normal"); + if(autoIndex<=0) + { + $("#autoDiv"+(autoLenght-1)).get(0).style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + $("#autoDiv"+(autoLenght-1)).css("color","white"); + //$("#autoDiv"+(autoLenght-1)).css("fontWeight","bold"); + autoIndex=autoLenght-1; + }else + { + autoIndex--; + $("#autoDiv"+(autoIndex)).get(0).style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + $("#autoDiv"+autoIndex).css("color","white"); + //$("#autoDiv"+autoIndex).css("fontWeight","bold"); + } + //autoInputObj.get(0).value=$("#autoDiv"+autoIndex).data("value"); + + return; + }else if (event.keyCode == 27) {//ESC + document.getElementById('autoDiv').style.display = 'none'; + return; + }else if (event.keyCode == 13)//ENTER + { + //autoInputObj.get(0).value=$("#autoDiv"+autoIndex).data("value"); + setValue($("#autoDiv"+autoIndex).data("value"),$("#autoDiv"+autoIndex).data("name")); + document.getElementById('autoDiv').style.display = 'none'; + return ; + }else + { + autoIndex=-1; + } + //auto.style.display = 'none'; + if(wing_event_keyCode==8) + { + autoCountWait=autoCount; + } + if(autoVal!=''){ + setTimeout("autoAjaxWaitFn()",autoTime); + autoCount++; + }else{ + document.getElementById("autoDiv").style.display='none'; + } + }); + return obj; +} +function autoAjaxWaitFn() +{ + autoCountWait++; + if(autoCountWait!=autoCount) + { + return; + } + if (autoURL == "") { + return; + } + if (autoVal != " ") { + autoVal = autoVal.trim(); + } + if (autoVal == "") { + return; + } + $.post(autoURL, {"autoContent":autoVal,"cmd":"com.actionsoft.apps.coe.pal_processlevel_query","sid":jQuery("#sid").val(),"wsid":jQuery("#wsId").val()},autoajax, "json"); +} + +function autoajax(msg) { + $("#autoDiv").html(""); + var auto = document.getElementById('autoDiv'); + var txt = autoInputObj.get(0); + if (msg == ""){ + auto.style.display = 'none'; + return; + } + autoLenght=msg.length; + for(var i=0;i" + + icon + + "" + msg[i].ui + "" + + "
                                                "); + $("#autoDiv"+i).data("value",msg[i].value); + $("#autoDiv"+i).data("name",msg[i].name); + } + // 锟斤拷锟矫诧拷锟轿伙拷锟� + var x = autoInputObj.offset().left; + var y = autoInputObj.offset().top ; + var wing_auto=$(auto); + wing_auto.css("left",x); + wing_auto.css("top",y + txt.offsetHeight); + $("#autoDiv").css("minWidth",txt.offsetWidth); + + // 锟斤拷锟斤拷锟斤拷锟斤拷锟绞撅拷锟� + if (autoLenght == 1 && $("#autoDiv0").data("value") == txt.value) { + auto.style.display = 'none'; + } + else { + auto.style.display = 'block'; + } +} +$(function(){ + hwTime(); + $("body").prepend("
                                                "); + $("#autoDiv").keydown(function(event){ + if(event.keyCode == 8) + { + event.keyCode=27; + var obj=autoInputObj.get(0); + obj.focus(); + obj.value=obj.value.slice(0,obj.value.length); + } + if (event.keyCode == 27) { + document.getElementById('autoDiv').style.display = 'none'; + } + }); + +}); +function hwTime() +{ + //autoCountWait=autoCount; + //setTimeout("hwTime()",2000); +} +function divEvent2() { + try{ + document.getElementById('autoDiv').style.display = 'none'; + }catch(e){ + } +} +document.onclick = divEvent2; +function aotu_Move(obj) +{ + $(".aotuDivcontenr").css({"backgroundImage":"none","color":"black","fontWeight":"normal"}); + obj.style.backgroundImage="url('../apps/com.actionsoft.apps.coe.pal/img/pl/link.png')"; + autoIndex=obj.id.substring(obj.id.length-1); + obj.style.color="white"; +} +function aotu_Out(obj) +{ + obj.style.backgroundImage=""; + obj.style.color="black"; + obj.style.fontWeight="normal"; +} +function aotu_clike(obj) +{ + //autoInputObj.get(0).value=$("#autoDiv"+obj.id.substring(obj.id.length-1)).data("value"); + obj = obj.parentElement; + var id=obj.id.substring(6+1,obj.id.length); + setValue($("#autoDiv"+id).data("value"),$("#autoDiv"+id).data("name")); +} +function setValue(uuid,name) +{ + //$.post("./w", { cmd: "com.actionsoft.apps.coe.pal_processlevel_query_check", sid: jQuery("#sid").val(),uuid:uuid },setValueHD, "text"); + $.ajax({ + url:'./w?cmd=com.actionsoft.apps.coe.pal_processlevel_query_check&sid='+$('#sid').val()+'&uuid='+uuid, + async:false,//鍚屾锛岄粯璁や负寮傛 + success:function(msg){ + if(msg!="") + { + autoInputObj.get(0).value=""; + var url="./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_portal_page&ruuid=" + msg + "&type=1&wsid=" + jQuery("#wsId").val(); + awsTabs.setTitle("main",name); + document.getElementById("main").src=url; + document.getElementById("main").url=url; + + //var obj = repositoryTree.getNodeDomById(msg); + repositoryTree.selectNode(msg,true); + //window.open('./w?sid='+jQuery("#sid").val()+'&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&uuid='+msg+'&type=1'); + } + } + }) +} + +function open_desginer(obj){ + obj = obj.parentElement; + var id = obj.id.substring(6+1,obj.id.length); + repositoryTree.selectNode($("#autoDiv"+id).data("value"),true); + openDesginer($("#autoDiv"+id).data("value"), '0',$("#autoDiv"+id).data("name"),'', '',''); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.main.iframe.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.main.iframe.js new file mode 100644 index 00000000..30050507 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.main.iframe.js @@ -0,0 +1,293 @@ + jQuery(function(){ + //$('#coeContentiframe').height($(window).height() - $('#coeContentiframe').offset().top-36); + if(openType==undefined){ + openType="1"; + } + var wsId=jQuery("#wsId").val(); + $("#btnSearch").on("click",function(){ + simpleSearch(); + }); + resetVal(); + if(openType=="1"){ + openProcessLevel(); + }else if(openType=="2"){ + var condition=setCondVal() + openProcessLevelList(wsId,undefined,1,condition); + }else if(openType=="3"){ + openProcessLevelCount($("div.content-tbl img:nth-child(2)")); + }else if(openType=="4"){ + openProcessOffice(wsId); + } + initTooltip(); + + $("#processName").bind('keydown', function (e) { + var key = e.which; + if (key == 13) { + simpleSearch(); + return false; + } + }); +}); + + +function simpleSearch(){ + var wsId=jQuery("#wsId").val(); + var name = $("#processName").val(); + resetVal(); + var condition = setCondVal(); + $.extend(condition, { + name : name + }); + $("#condition").val(JSON.stringify(condition)); + checkType = $(".-visited") && $(".-visited").attr("data-original-title"); + if(!checkValue(name,"不能包含|'\"。、,+*/%^=\\!&:;~`#<>$等字符")){ + $("#processName").val(""); + return false; + } + if (checkType == 流程分级 || checkType == 流程清单 || !checkType) { + openProcessLevelList(wsId, $(".-visited"), 1, condition); + } else if (checkType == 统计分析) { + openProcessLevelCount($(".-visited"), 1, condition); + } +} + +//返回流程空间 +function backWorkSpace(){ + var sid=jQuery("#sid").val(); + var url=encodeURI("./w?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_ws_portal"); + parent.jQuery("#coeContent").attr("src",url); + changeIframeHeight(); +} + +//流程清单 +function openProcessLevelList(wsId,obj,type,condition){ + if(typeof type=="undefined"){ + resetVal() + condition=setCondVal() + } + clearClick(); + toggleSelectBar() + $(obj).addClass("-visited").focus(); + var sid=jQuery("#sid").val(); + jQuery("#showLabel").text(流程清单); + if(typeof cond =="undefined")cond="" + var url=encodeURI("./w?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_processlevel_list_portal_page")+"&wsId="+wsId+"&condition="+encodeURIComponent(JSON.stringify(condition)); + jQuery("#coeContentiframe").attr("src",url); + changeIframeHeight(); + jQuery("#coeContentiframe").get(0).contentWindow.isExec=false; + +} +//流程办公室 +function openProcessOffice(wsId,obj){ + clearClick(); + toggleSelectBar("hide") + $(obj).addClass("-visited").focus(); + var sid=jQuery("#sid").val(); + jQuery("#showLabel").text(流程办公室); + var url=encodeURI("./w?sid="+sid+"&cmd=COE_PAL_PROCESSOFFICE&wsId="+wsId); + jQuery("#coeContentiframe").attr("src",url); + changeIframeHeight(); +} + +//流程分级 +function openProcessLevel(obj){ + clearClick(); + toggleSelectBar() + $(obj).addClass("-visited").focus(); + var sid=jQuery("#sid").val(); + var wsId=jQuery("#wsId").val(); + jQuery("#showLabel").text(流程分级); + var url=encodeURI("./w?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_processlevel_tree&wsId="+wsId); + jQuery("#coeContentiframe").attr("src",url); + changeIframeHeight(); + jQuery("#coeContentiframe").get(0).contentWindow.isExec=true; +} + +//流程分级统计 +function openProcessLevelCount(obj,type,condition){ + if(typeof type=="undefined"){ + resetVal() + condition=setCondVal() + } + clearClick(); + toggleSelectBar() + $(obj).addClass("-visited").focus(); + var sid=jQuery("#sid").val(); + var wsId=jQuery("#wsId").val(); + jQuery("#showLabel").text(流程分级统计); + if( typeof cond=="undefined")cond="" + var url=encodeURI("./w?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_count")+"&wsId="+wsId+"&condition="+encodeURIComponent(JSON.stringify(condition)); + jQuery("#coeContentiframe").attr("src",url); + document.getElementById("coeContentiframe").height ="707px"; + $("#coeContentiframe").css("height",707); +} + + +function changeIframeHeight(){ + var s_height=parseInt(window.screen.height) + ,_height=450; + if(s_height==768){ + + }else{ + _height+=s_height-768; + } + if(_height<0){ + _height=450; + } + document.getElementById("coeContentiframe").height =_height+"px"; + $("#coeContentiframe").css("height",""); + $("div.social_left").css("min-height",_height+"px"); +} +function initTooltip(){ + var toggle="[data-toggle*=tooltip]"; + $(toggle).tooltip({placement:"bottom"}); +} +function clearClick(){ + var target="[class*=-visited]"; + $(target).removeClass("-visited"); +} +function toggleSelectBar(option){ + if(option&&option=="hide"){ + $("span.toggle-float").hide(); + }else{ + $("span.toggle-float").show(); + } +} + +//设置条件区域的值 +function setCondVal(){ + var plColor=jQuery("#plColor").val(); + var name=jQuery("#name").val(); + var execType=jQuery("#execType").val(); + var systemName=jQuery("#systemName").val(); + var plRd=jQuery("#plRd").val(); + var plRp=jQuery("#plRp").val(); + var plM=jQuery("#plM").val(); + var plLevel=jQuery("#plLevel").val(); + var json={ + name:name, + plColor:plColor, + execType:execType, + sysName:systemName, + plRd:plRd, + plM:plM, + plRp:plRp, + plLevel:plLevel + }; + return json +} + +function processInstSearch(){ + var isHidden + ,cond + ,checkType + ,condition=setCondVal(); + + var tmp=condition; + var name=tmp.name; + var plLevel=tmp.plLevel; + var plRd=tmp.plRd; + var plRp=tmp.plRp; + if(!checkValue(name,"名称不能包含|'\"。、,+*/%^=\\!&:;~`#<>$等字符")){ + return false; + } + if(!checkValue(plLevel,"流程层次不能包含|'\"。、,+*/%^=\\!&:;~`#<>$等字符")){ + return false; + } + if(!checkValue(plRd,"责任部门不能包含|'\"。、,+*/%^=\\!&:;~`#<>$等字符")){ + return false; + } + if(!checkValue(plRp,"责任人不能包含|'\"。、,+*/%^=\\!&:;~`#<>$等字符")){ + return false; + } + var wsId=jQuery("#wsId").val(); + + clearMenus(); + checkType=$(".-visited")&&$(".-visited").attr("data-original-title"); + if(checkType==流程分级||checkType==流程清单||!checkType){ + openProcessLevelList(jQuery("#wsId").val(),$(".-visited"),1,condition); + }else if(checkType==统计分析){ + openProcessLevelCount($(".-visited"),1,condition); + } + +} + +//导出excel +function expExcel(){ + var wsId=jQuery("#wsId").val(); + var condition=parent.$("#coeContent").get(0).contentWindow.document.getElementById("coeContentiframe").contentWindow.$("#condition").val(); + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_processlevel_expexcel", + data : "wsId="+wsId+"&conditions="+condition, + success : function(msg) { + + if(window.top.isIpad() || window.top.isAndroid() || window.top.isiPhone()){ + downFile(encodeURI(msg)); + }else{ + jQuery("#downloadiframe").attr("src",encodeURI(msg)); + } + } + }); +} +function downFile(src){ + var newWin=getNewTarget(); + window.open(src,newWin); + return false; +} +function getNewTarget(){ + var viewdate =new Date(); + var newWin = viewdate.getTime(); + return "iWork_"+newWin; +} +//重置 +function resetVal(){ + jQuery("#plColor").val("-1"); + jQuery("#name").val(""); + jQuery("#execType").val(-1); + jQuery("#systemName").val(-1); + jQuery("#plRd").val(""); + jQuery("#plRp").val(""); + jQuery("#plM").val(-1); + jQuery("#plLevel").val(-1); +} + +function resetSearch(){ + $("input#processName").val("") +} + +function checkValue(str, info, isNumber, f) { + var flag=false; + if(f){ + flag=f; + } + if (isNumber) { + if (isNaN(str)) { + window.top.$.simpleAlert(不是一个数值); + return false; + } + } + if(f && f.name == "activationCondition"){ + var valid= /[\|\'\"\。\、\,\+\*\/\^\=\\\!\&\:\;\~\`\#\<\>\$]+/; + if(valid.test(str)){ + alertInfo(info); + return false; + } + }else if(flag){ + var valid= /[\|\'\"\。\、\,\*\/\^\=\\\!\&\:\;\~\`\#\<\>\$]+/; + if(valid.test(str)){ + alertInfo(info); + return false; + } + }else{ + if(checkSymbols(str)){ + alertInfo(info); + return false; + } + } + return true; +} + +function alertInfo(info){ + window.top.$.simpleAlert(info); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.main.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.main.js new file mode 100644 index 00000000..4402089c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.main.js @@ -0,0 +1,1166 @@ +var plParentid = 0; +var processLevel = 0; +var isLeaf = true; +var parentNodeId; +var orderIndexs = new Array(); +var repositoryTree; +var copeFileNode = ""; +var drpParentId; +var drpSourceParentId; +var isOpenMainIfranme = false; +$(document).ready(function() { + initTree(); + openDefaultNode(); + }); + +// 默认打开 +function openDefaultNode() { + var tempUrl = repositoryTree.config.data[0].url; + var tempName = repositoryTree.config.data[0].name; + isOpenMainIfranme = true; + // 增加内容 + var html = $(""); + html.appendTo(awsTabs.tabContentPanel); + var newTab = { + item : { + url : tempUrl, + title : tempName, + index : "main" + } + }; + // 增加tab + awsTabs.addTab(newTab); + setPlParentIDAndProcessLevel(repositoryTree.config.data[0]); +} + +// 新建层次 打开对话框 +function createProcessLevel(wd, wsid, parentid, id) { + var title = ""; + if (id == undefined) { + id = 0; + title = "新建文件"; + } else { + title = "设置文件属性"; + } + var url = "./w?sid=" + encodeURIComponent($('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_create&wsid=" + wsid + "&pid=" + + parentid + "&id=" + id; + if (parentid == 0) { + window.top.$.simpleAlert(请先选择根下相应节点, "info", 2000); + } else { + if (isLeaf == true || id != 0 || id != "") { + var wheight = 505; + if (parent.parent.isIpad()) { + wheight = 585; + } + var options = { + buttons : [{ + text : '确定', + cls : "blue", + handler : function() { + window.top.getAwsDialogWindow().saveProcessLevel(null, + wd); + window.top.closeAwsDialog(); + } + }, { + text : '关闭', + handler : function() { + window.top.closeAwsDialog(); + } + }] + }; + window.top.openAwsDialog(url, title, 660, wheight, options); + } else { + window.top.$.simpleAlert(该节点上不可以新建级次 + " " + isLeaf, "info", 2000); + } + } +} +// 新建层次 打开对话框v2 +function createProcessLevelv2(wd, wsid, parentid, plLevel, div_class) { + var title = "新建文件"; + var url = "./w?sid=" + encodeURIComponent($('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_create_v2&wsid=" + wsid + "&id=" + + parentid; + if (parentid == 0) { + window.top.$.simpleAlert(请先选择根下相应节点, "info", 2000); + } else { + if (isLeaf == true || id != 0 || id != "") { + var options = { + buttons : [{ + text : '确定', + cls : "blue", + handler : function() { + var processType = window.top.getAwsDialogWindow().processType; + if (processType == "default") { + var returnProcessJson = window.top + .getAwsDialogWindow().returnProcessJson(); + var defaultMessageJson = window.top + .getAwsDialogWindow().defaultMessageJson; + saveProcessLevel(window); + var node = repositoryTree.getSelectedNode(); + // node = repositoryTree.getNodeById(node.pid); + setPlParentIDAndProcessLevel(node); + refresh(); + } else { + $.ajax({ + url : './w?cmd=com.actionsoft.apps.coe.pal_processlevel_create_save&sid=' + + encodeURIComponent($('#sid').val()) + + '&wsid=' + + wsid + + '&plLevel=' + + (parseInt(plLevel)+1) + + '&plParentId=' + + parentid + + '&category=' + + window.top.getAwsDialogWindow().selectCategoryValue + + '&container=' + + window.top.getAwsDialogWindow().selectContainer, + success : function(msg) { + var url = "./w?sid=" + + encodeURIComponent($('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&uuid=" + + msg + "&openType=0&perms=w,d,v&filePerms=-"; + openTab(msg, url, "未命名文件"); + window.top.closeAwsDialog(); + wd.location.href = wd.location.href; + setTimeout(function() { + // parent.$("#iflowlist").get(0).contentWindow + // .refreshNode(parentid); + var node = repositoryTree + .getSelectedNode(); + // node = + // repositoryTree.getNodeById(node.pid); + setPlParentIDAndProcessLevel(node); + refresh(); + }, 500); + + } + }) + } + } + }, { + text : '关闭', + handler : function() { + window.top.closeAwsDialog(); + } + }] + }; + window.top.openAwsDialog(url, title, 750, 480, options, div_class); + } else { + window.top.$.simpleAlert(该节点上不可以新建级次 + " " + isLeaf, "info", 2000); + } + } +} + +function openNewWindow(url) { + window.open("./w?sid=" + encodeURIComponent($('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&uuid=" + url + + "&openType=0&perms=w,d,v&filePerms=-"); +} + +/** + * 功能:去除字符串中所有空格 传参:需要处理的字符串 返回值:去除空格后的字符串 + */ +function trimSpaces(Str) { + var ResultStr = ""; + Temp = Str.split(/\s/); + for (i = 0; i < Temp.length; i++) { + ResultStr += Temp[i]; + } + return ResultStr; +} +// 流程规划 +function saveProcessLevel(wd) { + var returnProcessJson = eval("(" + + window.top.getAwsDialogWindow().returnProcessJson() + ")"); + // alert(returnProcessJson); + var defaultMessageJson = window.top.getAwsDialogWindow().defaultMessageJson; + // alert(defaultMessageJson.plParentId); + var id = returnProcessJson.id; + var wsId = returnProcessJson.wsId; + var plNo = trimSpaces(returnProcessJson.plNo); + var plName = returnProcessJson.plName; + var plLevel = returnProcessJson.plLevel; + var plParentId = returnProcessJson.plParentId; + var plDesc = returnProcessJson.plDesc; + var plOrderIndex = returnProcessJson.plOrderIndex; + var plIsBottomLevel = returnProcessJson.plIsBottomLevel; + var plRDId = returnProcessJson.plRDId; + var plRP = returnProcessJson.plRP; + /* + * if (plRP == "") { window.top.$.simpleAlert("[责任人]不允许为空"); return; } + */ + var plM = returnProcessJson.plM; + var plExecType = returnProcessJson.plExecType; + var systemName = returnProcessJson.systemName; + var plAwsPid = returnProcessJson.plAwsPid; + var oldPlAwsPid = returnProcessJson.oldPlAwsPid; + var plDiagramUrl = returnProcessJson.plDiagramUrl; + var plColor = returnProcessJson.plColor; + var plSecurityR = returnProcessJson.plSecurityR; + var plSecurityW = returnProcessJson.plSecurityW; + var oldplSecurityW = returnProcessJson.oldplSecurityW; + var oldplSecurityR = returnProcessJson.oldplSecurityR; + var methodId = returnProcessJson.methodId; + var plDutyDept = returnProcessJson.plDutyDept; + var plDutyPerson = returnProcessJson.plDutyPerson; + + if (plName == "") { + window.top.$.simpleAlert("[" + 名称 + "]" + 不允许为空); + return false; + } + if (plNo.length >= 36) { + window.top.$.simpleAlert(编号长度不允许大于36个字符); + return false; + } + if (methodId == "") { + window.top.$.simpleAlert("对不起,没有找到相应的建模方法"); + return false; + } + if (plIsBottomLevel == -1) { + window.top.$.simpleAlert("[" + 层次 + "]" + 不允许为空); + return false; + } + + if (plM == -1) { + $.simpleAlert("[" + 里程碑 + "]" + 不允许为空); + return false; + } + + if (plExecType == -1) { + $.simpleAlert("[" + 执行方式 + "]" + 不允许为空); + return false; + } + + var params = { + id : id, + wsid : wsId, + plLevel : plLevel, + plParentId : plParentId, + plOrderIndex : plOrderIndex, + plIsBottomLevel : plIsBottomLevel, + plExecType : plExecType, + plNo : plNo, + plName : plName.trim(), + plDesc : plDesc, + plRd : plRDId, + plRp : plRP, + plM : plM, + plSystemName : systemName, + plAwsPid : plAwsPid, + oldPlAwsPid : oldPlAwsPid, + plDiagramUrl : plDiagramUrl, + plColor : plColor, + plSecurityW : plSecurityW, + oldplSecurityW : oldplSecurityW, + plSecurityR : plSecurityR, + oldplSecurityR : oldplSecurityR, + methodId : methodId, + plDutyDept : plDutyDept, + plDutyPerson : plDutyPerson + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_save", + data : params, + success : function(msg) { + if (msg.indexOf("-1") == -1) { + parent.$("#iflowlist").get(0).contentWindow.refresh(); + $.simpleAlert("新建成功", "ok", 2000); + window.top.closeAwsDialog(); + } else { + $.simpleAlert("保存流程层级失败请稍后重试"); + } + } + }); +} +// ------------------------ +function zTreeBeforeAsync(treeId, treeNode) { + +} + +function getParam() { + var wsId = jQuery("#wsId").val(); + var sessionId = jQuery("#sid").val(); + var param = { + sid : sessionId, + cmd : "com.actionsoft.apps.coe.pal_processlevel_treejson", + wsid : wsId + }; + return param; +} + +function setOrderIndexByOutGoing(outgoing, uuid, orderIndex) { + +} + +function setOrderIndexByArray(array, uuid, orderIndex) { + +} + +function initTree() { + var wsId = jQuery("#wsId").val(); + if (wsId) { + var setting = getSetings(); + repositoryTree = awsui.tree.init($("#repositoryTree"), setting); + $("#repositoryTree").css("height", "auto"); + } else { + $.simpleAlert("请选择流程资产", "info", 2000); + } +} + +function getSetings() { + var setting = { + sort : true, + dblClickToExpand : true, + showTitle : true, + event : { + beforeDrag : beforeDrag, + beforeDrop : beforeDrop, + onDrop : onDrop, + onClick : clickNode, + beforeExpand : loadData, + afterLoad : afterLoad + } + // view: { + // addHoverDom: addHoverDom, + // removeHoverDom: removeHoverDom + // }, + // edit : { + // enable : true, + // showRemoveBtn : false, + // showRenameBtn: false, + // drag : { + // prev : true, + // next : true, + // inner : true + // } + // }, + // async: { + // enable: true, + // type: "post", + // url:"./w", + // autoParam: ["id=pid"], + // otherParam:getParam() + // }, + // data:{ + // keep:{ + // parent:true + // } + // }, + // callback : { + // beforeDrag : beforeDrag, + // beforeDrop : beforeDrop, + // beforeAsync:zTreeBeforeAsync, + // onDrop:onDrop, + // //onClick: zTreeOnClick, + // onAsyncSuccess: onAsyncSuccess //异步节点加载成功后回调 + // } + }; + setting.contextMenu = { + items : [{ + text : "复制", + tit : "expand", + method : function(obj) { + var node = repositoryTree.getSelectedNode(); + setPlParentIDAndProcessLevel(node); + copeFileNode = node; + $(setting.contextMenu.target).menu("close"); + } + }, { + text : "粘贴", + tit : "close", + method : function(obj) { + if (copeFileNode == null) { + $.simpleAlert("请先复制文件", "info", 2000); + $(setting.contextMenu.target).menu("close"); + return; + } + var node = repositoryTree.getSelectedNode(); + // if(node.id.length<36) + // { + // window.top.$.simpleAlert("对不起,不能粘贴至此处!", "info", + // 2000); + // $(setting.contextMenu.target).menu("close"); + // return; + // } + if (node.plCategory != copeFileNode.plCategory) { + $.simpleAlert("对不起,不能跨文件类型粘贴", "info", + 2000); + $(setting.contextMenu.target).menu("close"); + return; + } + setPlParentIDAndProcessLevel(node); + $.ajax({ + url : './w?cmd=com.actionsoft.apps.coe.pal_processlevel_copy&sid=' + + encodeURIComponent($('#sid') + .val()) + + '&sourceUUID=' + + copeFileNode.id + + '&targetUUID=' + + node.id, + async : false, + success : function(msg) { + refresh(); + $.simpleAlert(msg, "ok", + 2000); + } + }) + $(setting.contextMenu.target).menu("close"); + } + }], + target : "#contextMenu" + }; + // setting.dataModel = { + // url + // :"./w?sid="+jQuery("#sid").val()+"&cmd=com.actionsoft.apps.coe.pal_processlevel_treejson&pid=&wsid="+jQuery("#wsId").val() + // }; + setting.dataModel = { + data : data + }; + return setting; +} +function loadData(treeNode) { + // 如果是父节点并且存在子节点执行加载 + if (treeNode.open != null && !repositoryTree.exsitsChildren(treeNode.id)) { + var dataModel = { + url : "./w?sid=" + jQuery("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_treejson&pid=" + treeNode.id + + "&wsid=" + jQuery("#wsId").val(), + method : "POST", + dataType : "json" + } + var data = repositoryTree.getData(dataModel); + + repositoryTree.buildChilren(data, treeNode); + } +} +function afterLoad() { + $("a[tabindex=process]").trigger("click.nodeClick"); +} +// 拖拽前事件 +function beforeDrag(treeNode) { + putOrdexIndexs(treeNode); + return true; +} +// 移动节点前现将所有的 orderindex计入一个集合 +function putOrdexIndexs(treeNode) { + var nodes = repositoryTree.getChildrenByPid(treeNode.pid); + for (var i = 0; i < nodes.length; i++) { + orderIndexs[i] = nodes[i].plOrdexIndex; + } +} +function beforeDrop(target, source) { + // 不允许放 + if (source.id.length < 36 || source.isSystemFile != 0) { + return false; + } + var beforeId = repositoryTree.getNodeById(source.pid).id; // 获取当前节点父节点id + // var isDrop=target.isDrops; + // var isLeaf=target.isParent; + // if(moveType=="inner"&&!isLeaf){ + // return false; + // } + // if(moveType=="inner"){ + // return false; + // } + if (source.level && source.level == "1") { + return false; + } + // if(target.id.length<36) + // { + // window.top.$.simpleAlert("对不起,不能移动至此处!", "info", 2000); + // return; + // } + if (target.plCategory != source.plCategory) { + $.simpleAlert("对不起,不能跨文件类型移动", "info", 2000); + return; + } + // if(target.level&&target.level=="0"){ + // return false; + // } + // var isConfirm = false; + // var options = { + // title : "提示", + // content:"确认移动此文件吗?", + // model:false, + // onConfirm: function(){ + // if(beforeId){ + // parentNodeId=beforeId; + // } + // isConfirm = true; + // return true; + // } + // }; + // window.top.$.confirm(options); + return confirm("确定移动此文件吗?"); + return false; +} +function onDrop(target, source) { + drpParentId = target.id; + drpSourceParentId = source.pid; + // 拖拽成功后 + var parentNode = repositoryTree.getNodeById(source.pid); + var tempData = repositoryTree.getNodeById(drpParentId); + var afterId = parentNode.id; + if (afterId) { + if (parentNodeId != afterId) { + //更新pid + var str = getNewPid([source], afterId); + updatePid(str); + } else { + //更新orderIndex + var str = getNewOrderIndexStr(parentNode); + updateOrderIndex(str); + } + } + // repositoryTree.refreshNode({id:drpParentId, data:tempData}); + // repositoryTree.refreshNode({id:drpSourceParentId, data:parentNode}); +} +// 同级移动返回更新后的orderIndex +function getNewOrderIndexStr(parentNode) { + var str = ""; + var nodes = repositoryTree.getChildrenByPid(parentNode.id);; + for (var i = 0; i < nodes.length; i++) { + nodes[i].plOrdexIndex = orderIndexs[i]; + } + for (var i = 0; i < nodes.length; i++) { + if (i == 0) { + str += nodes[i].id + "|" + nodes[i].plOrdexIndex; + } else { + str += "," + nodes[i].id + "|" + nodes[i].plOrdexIndex; + } + } + return str; +} + +// 跨级移动更新pid +function getNewPid(treeNodes, afterId) { + var pids = ""; + for (var i = 0; i < treeNodes.length; i++) { + if (i == 0) { + pids += treeNodes[i].id; + } else { + pids += "|" + treeNodes[i].id; + } + } + pids += "," + afterId; + return pids; +} + +// 异步设置orderindex +function updateOrderIndex(str) { + var param = { + orderIndexs : str + } + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_setploaderindex", + data : param, + success : function(msg) { + if (msg == "-1") { + $.simpleAlert(拖动失败请稍候重试, "info", 2000); + } else { + // refresh(drpParentId); + // refresh(drpSourceParentId); + setPlParentIDAndProcessLevel(repositoryTree + .getNodeById(drpParentId)); + refresh(); + window.setTimeout(function() { + setPlParentIDAndProcessLevel(repositoryTree + .getNodeById(drpSourceParentId)); + refresh(); + }, 500); + } + } + }); +} + +function updatePid(str) { + var param = { + pids : str + } + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_setplid", + data : param, + success : function(msg) { + if (msg == "-1") { + $.simpleAlert(拖动失败请稍候重试, "info", 2000); + } else { + // refresh(drpParentId); + // refresh(drpSourceParentId); + setPlParentIDAndProcessLevel(repositoryTree + .getNodeById(drpParentId)); + refresh(); + window.setTimeout(function() { + setPlParentIDAndProcessLevel(repositoryTree + .getNodeById(drpSourceParentId)); + refresh(); + }, 500); + } + } + }); +} + +function clickNode(treeNode) { + if (!isOpenMainIfranme) { + isOpenMainIfranme = true; + // 增加内容 + var html = $(""); + html.appendTo(awsTabs.tabContentPanel); + var newTab = { + item : { + url : treeNode.url, + title : treeNode.name, + index : "main" + } + }; + // 增加tab + awsTabs.addTab(newTab); + } else { + // 更新内容 + awsTabs.setTitle("main", treeNode.name); + if (document.getElementById("main").url != treeNode.url) { + document.getElementById("main").src = treeNode.url; + document.getElementById("main").url = treeNode.url; + } + awsTabs.focusTab("main"); + } + // 设置值 + setPlParentIDAndProcessLevel(treeNode); +} +function openDesginer(uuid, openType, plName, appId, processVersionId, + isOpenDialog) { + var params = { + sid : encodeURIComponent(jQuery('#sid').val()), + cmd : "com.actionsoft.apps.coe.pal_pl_repository_designer", + uuid : uuid, + openType : openType, + processDefId : processVersionId, + perms: "w,d,v", + filePerms: "-" + }, url, options; + if (typeof(isOpenDialog) == "boolean" && isOpenDialog) {// 打开与bpmn关联的多个版本 + params = { + sid : encodeURIComponent(jQuery('#sid').val()), + cmd : "com.actionsoft.apps.coe.pal_pl_repository_version", + uuid : uuid, + appId : appId, + processVersionId : processVersionId + }; + url = "./w?" + connectParams(params); + options = { + buttons : [ // 按钮组 + { + text : '关闭', + handler : function() { + window.top.closeAwsDialog(); + } + }] + } + window.top.openAwsDialog(url, plName, 770, 415, options); + return; + } + openTab(uuid, url = "./w?" + connectParams(params), plName); +} + +function openDesginerFromAttr(uuid, openType, plName, appId, processVersionId, + isOpenDialog, shapeId) { + var params = { + sid : encodeURIComponent(jQuery('#sid').val()), + cmd : "com.actionsoft.apps.coe.pal_pl_repository_designer_open_shape_page", + uuid : uuid, + openType : openType, + processDefId : processVersionId, + shapeId : shapeId + }, url, options; + openTab(uuid, url = "./w?" + connectParams(params), plName); +} + +function connectParams(params) { + var connParms = ""; + if (typeof(params) == "object") { + for (var i in params) { + connParms += i + "=" + params[i] + "&"; + } + } + + return connParms.substring(0, connParms.length - 1); +} + +function changeTabTitle(id, TabTitle, uuid) { + awsTabs.changeIndex(id, uuid); + awsTabs.setTitle(uuid, TabTitle); +} +function closeTabById(index){ +awsTabs.closeTab(index,null); +} + +function openTab(id, url, title) { + var setting = { + item : { + index : id, + title : title + }, + // contextMenu : true, + // contextMenuTarget : "contextMenu1", + close : true, + onCloseTab : function(obj) { + var userId = $("#userId").val(); + var uuid = obj.attr("index"); + var sid = $("#sid").val(); + $.ajax({ + url : "./jd?sid=" + sid + + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_realtime_leave", + data : { + userId : userId, + uuid : uuid + }, + success : function(data) { + } + }); + } + }; + if (awsTabs.existsTab(id)) { + awsTabs.focusTab(id); + } else { + var html = $("").appendTo(awsTabs.tabContentPanel); + awsTabs.addTab(setting); + } +} + +function openTabCustom(id, url, title) { + var setting = { + item : { + index : id, + title : title + }, + close : true, + onCloseTab : function(obj) { + var userId = $("#userId").val(); + var uuid = obj.attr("index"); + var sid = $("#sid").val(); + $.ajax({ + url : "./jd?sid=" + sid + + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_realtime_leave", + data : { + userId : userId, + uuid : uuid + }, + success : function(data) { + } + }); + } + }; + if (awsTabs.existsTab(id)) { + awsTabs.focusTab(id); + } else { + var html = $("").appendTo(awsTabs.tabContentPanel); + awsTabs.addTab(setting); + } +} + +// 异步节点加载成功后回调 +function onAsyncSuccess(event, treeId, treeNode, msg) { + var zTree = jQuery.fn.zTree.getZTreeObj("processLevelTree"); + setTimeout(function() { + if (treeNode) { + if (treeNode.level < 1) { // 展开到指定层级 + // console.log("treeNode>>"+treeNode+">>name>>"+treeNode.name); + // console.log("treeNode.children>>"+treeNode.children+">>>"+treeNode.children.length); + // for (var i=0; i < treeNode.children.length; i++) { + // console.log(">>>>treeNode.children[i].name>>"+treeNode.children[i].name); + // }; + if (treeNode.children && treeNode.children.length > 0) { + expandNodes(zTree, treeNode.children); + } + } + } + }, 500); // 加载下级节点 +} + +// function zTreeOnClick(event, treeId, treeNode){ +// setPlParentIDAndProcessLevel(treeNode); +// var nodes; +// try{ +// nodes=treeNode.getParentNode().children; +// }catch(e){} +// var indx=getNodeIndex(nodes,treeNode); +// setUserDefined(treeNode,nodes.length,indx); +// } + +function getNodeIndex(nodes, treeNode) { + var index = 0; + if (nodes && treeNode) { + for (var i = 0; nodes.length; i++) { + if (treeNode.id == nodes[i].id) { + index = i + 1; + break; + } + } + } + return index; +} + +// 设置树节点右侧自定义按钮 +// function setUserDefined(treeNode,count,indx){ +// if(treeNode.plLevel >=0){ +// if(treeNode.isParent){ //父节点显示添加按钮 +// addProcessLevelBtn(treeNode); +// } +// editProcessLevelBtn(treeNode); +// editProcessLevelBtn(treeNode); +// flowProcess(treeNode); +// emPower(treeNode); +// if(treeNode.plLevel >=1){ +// deleteBtn(treeNode); +// } +// } +// } + +function setPlParentIDAndProcessLevel(treeNode) { + if (!treeNode.isParent) { + treeNode.isParent = true; + } + plParentid = treeNode.id; + processLevel = treeNode.plLevel; + isLeaf = treeNode.isParent; +} + +// 展开所有节点 +function expandNodes(zTree, nodes) { + if (!nodes) + return; + for (var i = 0, l = nodes.length; i < l; i++) { + zTree.expandNode(nodes[i], true, false, false); + if (nodes[i].isParent) { + expandNodes(nodes[i].children); + } + } +} + +// 自动展开两级节点 +function expandNodesFirst(zTree, nodes) { + if (!nodes) + return; + for (var i = 0, l = 1; i < l; i++) { + zTree.expandNode(nodes[i], true, false, false); + if (nodes[i].isParent && nodes[i].zAsync) { + expandNodesFirst(nodes[i].children); + } + } +} + +// 自动展开n级节点 +function expandNodesN(zTree, nodes, n) { + if (!nodes) + return; + for (var i = 0, l = n; i < l; i++) { + zTree.expandNode(nodes[i], true, false, false); + if (nodes[i].isParent) { + expandNodesN(zTree, nodes[i].children, n); + } + } +} + +// 刷新指定节点 +function refreshNode(id) { + if (!id) { + id = plParentid; + } + var node = repositoryTree.getNodeById(id); + if (node == null) { + } else if (node.open == null) { + } else { + node.open = true; + doLoad(node, "reload"); + } +} +// 刷新树和右侧的页面 +function refresh(id) { + refreshNode(id); + document.getElementById("main").src = document.getElementById("main").src; +} +function doLoad(treeNode, type) { + var dataModel = { + url : "./w?sid=" + jQuery("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_treejson&pid=" + treeNode.id + + "&wsid=" + jQuery("#wsId").val(), + method : "POST", + dataType : "json" + } + var data = repositoryTree.getData(dataModel, treeNode.id); + // repositoryTree.buildChilren(data, treeNode, type); + repositoryTree.refreshNode({ + id : treeNode.id, + data : data + }); +} +// 自定义操作 添加 +function addHoverDom(treeId, treeNode) { + +} + +// 自定义操作 移除图标 +function removeHoverDom(treeId, treeNode) { + if (treeNode.isParent) { + $("#addProcessLevel_" + treeNode.id).unbind().remove(); + } + $("#editProcessLevel_" + treeNode.id).unbind().remove(); + $("#flowProcess_" + treeNode.id).unbind().remove(); + $("#empower_" + treeNode.id).unbind().remove(); + $("#delProcessLevel_" + treeNode.id).unbind().remove(); + $("#upProcessLevel_" + treeNode.id).unbind().remove(); + $("#downProcessLevel_" + treeNode.id).unbind().remove(); +} + +// 自定义添加按钮 +function addProcessLevelBtn(treeNode) { + var sObj = $("#" + treeNode.tId + "_span"); + if (treeNode.editNameFlag + || $("#addProcessLevel_" + treeNode.id).length > 0) + return; + var addProcessLevelStr = ""; + sObj.after(addProcessLevelStr); + var btn = $("#addProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + setPlParentIDAndProcessLevel(treeNode); + + createProcessLevel(); + + return false; + }); +} + +// 自定义修改按钮 +function editProcessLevelBtn(treeNode) { + var sObj = $("#addProcessLevel_" + treeNode.id); + if (sObj.length == 0) { + sObj = $("#" + treeNode.tId + "_span"); + } + if (treeNode.editNameFlag + || $("#editProcessLevel_" + treeNode.id).length > 0) + return; + var editProcessLevelStr = ""; + sObj.after(editProcessLevelStr); + var btn = $("#editProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + setPlParentIDAndProcessLevel(treeNode); + if (treeNode.id) { + createProcessLevel(treeNode.id); + } + return false; + }); +} + +// 显示流程图按钮 +// function flowProcess(treeNode) { +// var sObj = $("#editProcessLevel_" +treeNode.id); +// var url= treeNode.plDiagramUrl; +// var flowProcessStr =""; +// var css="button openprocess"; +// var title=打开流程图; +// if(url==""){ +// title=设置流程图; +// css="button setprocess"; +// } +// if (treeNode.editNameFlag || $("#flowProcess_" + treeNode.id).length > 0) +// return; +// var flowProcessStr = ""; +// sObj.after(flowProcessStr); +// var btn = $("#flowProcess_" + treeNode.id); +// if (btn) +// btn.bind("click", function() { +// setPlParentIDAndProcessLevel(treeNode); +// if(url==""){ +// openSetProcess(treeNode.id); +// }else{ +// window.open(treeNode.plDiagramUrl,'flowProcess'); +// } +// return false; +// }); +// } +// +// +// //设置流程图 +// function openSetProcess(id){ +// var url="./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + +// "&cmd=com.actionsoft.apps.coe.pal_processlevel_flowchart_page&id="+id+"&type=tree"; +// parent.parent.asyncbox.open({id:'showOpenFlowChar',url :url,width : +// 600,height :135,title:设置流程图,modal:true}); +// } + +// 显示授权按钮 +function emPower(treeNode) { + var sObj2 = $("#flowProcess_" + treeNode.id); + if (treeNode.editNameFlag || $("#empower_" + treeNode.id).length > 0) + return; + var empowerStr = ""; + sObj2.after(empowerStr); + var empowerbtn = $("#empower_" + treeNode.id); + if (empowerbtn) { + empowerbtn.bind("click", function() { + setPlParentIDAndProcessLevel(treeNode); + var url = "./w?sid=" + + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_empower&id=" + + treeNode.id; + parent.parent.asyncbox.open({ + id : 'showOpenProcessLevel', + url : url, + width : 480, + height : 520, + title : 授权, + modal : true + }); + return false; + }); + } +} + +// 自定义删除按钮 +function deleteBtn(treeNode) { + var sObj = $("#empower_" + treeNode.id); + if (treeNode.editNameFlag + || $("#delProcessLevel_" + treeNode.id).length > 0) + return; + var delProcessLevelStr = ""; + sObj.after(delProcessLevelStr); + var btn = $("#delProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + deleteProcessLevel(treeNode); + return false; + }); +} + +// 自定义向上箭头 + +function upBtn(treeNode) { + var sObj = $("#delProcessLevel_" + treeNode.id); + if (treeNode.editNameFlag || $("#upProcessLevel_" + treeNode.id).length > 0) + return; + var delProcessLevelStr = ""; + sObj.after(delProcessLevelStr); + var btn = $("#upProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + $.simpleAlert(向上, "info", 2000); + return false; + }); +} +// 自定义向下箭头 +function downBtn(treeNode) { + var sObj = $("#upProcessLevel_" + treeNode.id); + if (sObj.length == 0) { + sObj = $("#delProcessLevel_" + treeNode.id); + } + if (treeNode.editNameFlag + || $("#downProcessLevel_" + treeNode.id).length > 0) + return; + var delProcessLevelStr = ""; + sObj.after(delProcessLevelStr); + var btn = $("#downProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + $.simpleAlert(向下, "info", 2000); + return false; + }); +} + +// 删除流程分级 +// function deleteProcessLevel(treeNode){ +// var zTree = $.fn.zTree.getZTreeObj("processLevelTree"); +// if (confirm(确认删除流程分级 + treeNode.name + 吗)) { +// zTree.selectNode(treeNode); +// var wsId = jQuery("#wsId").val(); +// var params = { +// wsid : wsId, +// pid : treeNode.id +// }; +// jQuery.ajax({ +// type : "POST", +// url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + +// "&cmd=com.actionsoft.apps.coe.pal_processlevel_tree_remove", +// data : params, +// success : function(msg) { +// if (msg == "1") { +// window.top.$.simpleAlert(删除层级成功, "info", 2000); +// refreshParentNode(); +// } else { +// window.top.$.simpleAlert(删除层级失败请稍后重试, "info", 2000); +// } +// } +// }); +// } +// return false; +// } +function deleteProcessLevel(wd, name, id, pid) { + var options = { + title : "提示", + content : "确定删除流程" + "[" + name + "]" + "吗?", + model : false, + onConfirm : function() { + var wsId = jQuery("#wsId").val(); + var params = { + wsid : wsId, + pid : id + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_tree_remove", + data : params, + success : function(msg) { + msg = eval('(' + msg + ')').msg; + if (msg == "1") { + $.simpleAlert("删除成功", "ok", 2000); + refreshNode(pid); + wd.location.href = wd.location.href; + } else { + $.simpleAlert("删除失败请稍后重试", "info", + 2000); + } + } + }); + } + }; + $.confirm(options); +} +var isExec = true; +function reinitIframe() { + var height = document.documentElement.scrollHeight; + if (height > 540) { + if (isExec) { + parent.document.getElementById("coeContentiframe").height = height + + "px"; + } + } +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.main.rewrite.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.main.rewrite.js new file mode 100644 index 00000000..12f8975d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.processlevel.main.rewrite.js @@ -0,0 +1,1586 @@ +var plParentid = 0; +var processLevel = 0; +var isLeaf = true; +var parentNodeId; +var orderIndexs = new Array(); +var repositoryTree; +var copeFileNode = ""; +var copyType = "";//复制类型all:当前节点及所有子节点 self:仅当前节点 +var drpParentId; +var drpSourceParentId; +var isOpenMainIfranme = false; +$(document).ready(function() { + initTree(); + openDefaultNode(); + if (MzBrowser.ie && MzBrowser.version == 9) { + $(".awsui-layout-icon.arrow-right").css({ + "display" : "none", + "margin-left" : "10px", + "margin-left" : "-10px" + }); + } + dbclickTree(); +}); + +var indexaa = 1; +function dbclickTree() { + // 树结构双击打开 + $(".tree-items-title").off('dblclick').on('dblclick',function(){ + isdb = true; + var plId = $(this).attr('id').substring(10); + if(plId.length >= 36) { + // 打开流程/编辑文件夹 + // 获取打开流程的参数,页面直接调用现成方法 + $.ajax({ + url : './jd?cmd=com.actionsoft.apps.coe.pal_processlevel_designer_data_query&sid=' + encodeURIComponent($('#sid').val()) + '&t=' + Math.random(), + type : 'POST', + data : { + wsId : $('#wsId').val(), + uuid : plId + }, + success : function(r) { + if (r.result == 'ok') { + eval(r.data.onclick); + } else { + $.simpleAlert('打开失败'); + } + } + }) + } + }); +} + +// 双击/单击处理 +var isdb;// 是否双击 +function clickSet(treeNode) { + isdb = false; + window.setTimeout(function() { + if (isdb) return; + clickNode(treeNode);// 单击 + }, 300); +} +// 默认打开 +function openDefaultNode() { + var tempUrl = repositoryTree.config.data[0].url; + var tempName = repositoryTree.config.data[0].name; + isOpenMainIfranme = true; + // 增加内容 + var html = $(""); + html.appendTo(awsTabs.tabContentPanel); + var newTab = { + item : { + url : tempUrl, + title : tempName, + index : "main" + }, + onClick : function(obj) { + awsTabs.focusTab("main"); + } + }; + // 增加tab + awsTabs.addTab(newTab); + setPlParentIDAndProcessLevel(repositoryTree.config.data[0]); +} + +// 新建层次 打开对话框 +function createProcessLevel(wd, wsid, parentid, id) { + var title = ""; + if (id == undefined) { + id = 0; + title = "新建文件"; + } else { + title = "设置文件属性"; + } + var url = "./w?sid=" + encodeURIComponent($('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_create&wsid=" + wsid + "&pid=" + + parentid + "&id=" + id; + if (parentid == 0) { + window.top.$.simpleAlert(请先选择根下相应节点, "info", 2000); + } else { + if (isLeaf == true || id != 0 || id != "") { + var wheight = 505; + if (parent.parent.isIpad()) { + wheight = 585; + } + var options = { + buttons : [ + { + text : '确定', + cls : "blue", + handler : function() { + var flag = window.top.getAwsDialogWindow() + .saveProcessLevel(null, wd); + if (flag) { + window.top.closeAwsDialog(); + } + } + }, { + text : '关闭', + handler : function() { + window.top.closeAwsDialog(); + } + } ] + }; + window.top.openAwsDialog(url, title, 660, wheight, options); + } else { + window.top.$.simpleAlert(该节点上不可以新建级次 + " " + isLeaf, "info", 2000); + } + } +} +// 新建层次 打开对话框v2 +function createProcessLevelv2(wd, wsid, parentid, plLevel, div_class) { +// parent.closeGuideMask(4); + var title = "新建文件"; + var url = "./w?sid=" + encodeURIComponent($('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_create_v2&wsid=" + wsid + "&id=" + + parentid; + if (parentid == 0) { + window.top.$.simpleAlert(请先选择根下相应节点, "info", 2000); + } else { + if (isLeaf == true || id != 0 || id != "") { + var options = { + buttons : [ + { + text : '确定', + cls : "blue", + handler : function() { + var processType = window.top + .getAwsDialogWindow().processType; + if (processType == "default") { + var returnProcessJson = window.top + .getAwsDialogWindow() + .returnProcessJson(); + var defaultMessageJson = window.top + .getAwsDialogWindow().defaultMessageJson; + saveProcessLevel(window); + var node = repositoryTree.getSelectedNode(); + // node = + // repositoryTree.getNodeById(node.pid); + setPlParentIDAndProcessLevel(node); + refresh(); + } else { + $.ajax({ + url : './jd?cmd=com.actionsoft.apps.coe.pal_processlevel_create_save&sid=' + encodeURIComponent($('#sid').val()) + + '&wsid=' + wsid + + '&plLevel=' + (parseInt(plLevel) + 1) + + '&plParentId=' + parentid + + '&category=' + window.top.getAwsDialogWindow().selectCategoryValue + + '&container=' + window.top.getAwsDialogWindow().selectContainer + + '&t=' + Math.random(), + success : function(msg) { + if (typeof(msg) == "string") { + msg = eval('(' + msg + ')').msg; + } else { + msg = msg.msg; + } + + var url = "./w?sid=" + + encodeURIComponent($('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&uuid=" + + msg + + "&openType=0&perms=w,d,v&filePerms=-"; + openTab(msg, url, "未命名文件"); + window.top.closeAwsDialog(); + wd.location.href = wd.location.href; + setTimeout( + function() { + var node = repositoryTree.getSelectedNode(); + setPlParentIDAndProcessLevel(node); + refresh(); + }, 500); + + } + }) + } + } + }, { + text : '关闭', + handler : function() { + window.top.closeAwsDialog(); + } + } ] + }; + window.top.openAwsDialog(url, title, 650, 440, options, div_class); + } else { + window.top.$.simpleAlert(该节点上不可以新建级次 + " " + isLeaf, "info", 2000); + } + } +} + +//流程导入 +function importProcess(wd, wsId, parentId, level, plCategory) { + var dlg = FrmDialog.open({ + title : "导入模型", + width : 500, + height : 200, + draggable: true, + url : "./w", + data : { + sid : encodeURIComponent($('#sid').val()), + cmd : 'com.actionsoft.apps.coe.pal_pl_import_page' + }, + id : "importProcess", + buttons : [{ + text : '导入', + cls : "green", + handler : function() { + var importFileName = dlg.win().getData(); + if (importFileName == undefined || importFileName.trim() == "") { + $.simpleAlert("请选择导入的文件", "warning"); + return; + } + $.simpleAlert('正在导入', 'loading'); + //请求后台保存数据 + awsui.ajax.post("./jd?sid="+$('#sid').val()+"&cmd=com.actionsoft.apps.coe.pal_pl_import", { fileName: importFileName, wsId: wsId, parentId: parentId, level: level, plCategory: plCategory}, function(data) { + $.simpleAlert("close"); + if (data.result == "ok") { + window.top.$.simpleAlert("导入成功", "ok", 1500); + refresh(); + dlg.close(); + openImportMessageDialog(data.data, importFileName); + } else { + $.simpleAlert(data.msg,"error"); + } + }, 'json'); + } + }, { + text : '取消', + handler : function() { + dlg.close(); + } + }] + }); +} + +function openImportMessageDialog(data, fileName) { + var dlg = window.top.FrmDialog.open({ + title : "导入结果", + width : 700, + height : 400, + draggable: true, + url : "./w", + data : { + sid : encodeURIComponent($('#sid').val()), + cmd : 'com.actionsoft.apps.coe.pal_pl_import_result', + data : JSON.stringify(data) + }, + id : "importPlMessage", + buttons : [{ + text : '导出报告', + cls : "blue", + handler : function() { + //请求后台保存数据 + awsui.ajax.post("./jd?sid="+$('#sid').val()+"&cmd=com.actionsoft.apps.coe.pal_pl_import_result_export", { fileName: fileName}, function(data) { + if (data.result == "ok") { + dlg.close(); + window.location.href = data.data.downLoadUrl; + } else { + $.simpleAlert(data.msg,"error"); + } + }, 'json'); + } + }, { + text : '取消', + handler : function() { + dlg.close(); + } + }] + }); +} + +function openNewWindow(url) { + window.open("./w?sid=" + encodeURIComponent($('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&uuid=" + url + + "&openType=0&perms=w,d,v&filePerms=-"); +} + +/** + * 功能:去除字符串中所有空格 传参:需要处理的字符串 返回值:去除空格后的字符串 + */ +function trimSpaces(Str) { + var ResultStr = ""; + Temp = Str.split(/\s/); + for (i = 0; i < Temp.length; i++) { + ResultStr += Temp[i]; + } + return ResultStr; +} +// 流程规划 +function saveProcessLevel(wd) { + var returnProcessJson = eval("(" + + window.top.getAwsDialogWindow().returnProcessJson() + ")"); + // alert(returnProcessJson); + var defaultMessageJson = window.top.getAwsDialogWindow().defaultMessageJson; + // alert(defaultMessageJson.plParentId); + var id = returnProcessJson.id; + var wsId = returnProcessJson.wsId; + var plNo = trimSpaces(returnProcessJson.plNo); + var plName = returnProcessJson.plName; + var plLevel = returnProcessJson.plLevel; + plLevel = parseInt(plLevel) + 1; + var plParentId = returnProcessJson.plParentId; + var plDesc = returnProcessJson.plDesc; + var plOrderIndex = returnProcessJson.plOrderIndex; + var plIsBottomLevel = returnProcessJson.plIsBottomLevel; + var plRDId = returnProcessJson.plRDId; + var plRP = returnProcessJson.plRP; + /* + * if (plRP == "") { window.top.$.simpleAlert("[责任人]不允许为空"); return; } + */ + var plM = returnProcessJson.plM; + var plExecType = returnProcessJson.plExecType; + var systemName = returnProcessJson.systemName; + var plAwsPid = returnProcessJson.plAwsPid; + var oldPlAwsPid = returnProcessJson.oldPlAwsPid; + var plDiagramUrl = returnProcessJson.plDiagramUrl; + var plColor = returnProcessJson.plColor; + var plSecurityR = returnProcessJson.plSecurityR; + var plSecurityW = returnProcessJson.plSecurityW; + var oldplSecurityW = returnProcessJson.oldplSecurityW; + var oldplSecurityR = returnProcessJson.oldplSecurityR; + var methodId = returnProcessJson.methodId; + var plDutyDept = returnProcessJson.plDutyDept; + var plDutyPerson = returnProcessJson.plDutyPerson; + + if (plName == "") { + window.top.$.simpleAlert("[" + 名称 + "]" + 不允许为空); + return false; + } + if (plName.length > 120) { + window.top.$.simpleAlert("[" + 名称 + "]" + "不允许超过120个字符"); + return false; + } + if (plDesc.length > 1900) { + window.top.$.simpleAlert("[描述]不允许超过2000个字符"); + return false; + } + if (plNo.length >= 36) { + window.top.$.simpleAlert(编号长度不允许超过36个字符); + return false; + } + if (!/^[0-9]*$/.test(plNo)) { + $.simpleAlert("编号只允许为数字类型", "info", 2000); + } + if (methodId == "") { + window.top.$.simpleAlert("对不起,没有找到相应的建模方法"); + return false; + } + if (plIsBottomLevel == -1) { + window.top.$.simpleAlert("[" + 层次 + "]" + 不允许为空); + return false; + } + + if (plM == -1) { + window.top.$.simpleAlert("[" + 里程碑 + "]" + 不允许为空); + return false; + } + + if (plExecType == -1) { + window.top.$.simpleAlert("[" + 执行方式 + "]" + 不允许为空); + return false; + } + + var params = { + id : id, + wsid : wsId, + plLevel : plLevel, + plParentId : plParentId, + plOrderIndex : plOrderIndex, + plIsBottomLevel : plIsBottomLevel, + plExecType : plExecType, + plNo : plNo, + plName : plName.trim(), + plDesc : plDesc, + plRd : plRDId, + plRp : plRP, + plM : plM, + plSystemName : systemName, + plAwsPid : plAwsPid, + oldPlAwsPid : oldPlAwsPid, + plDiagramUrl : plDiagramUrl, + plColor : plColor, + plSecurityW : plSecurityW, + oldplSecurityW : oldplSecurityW, + plSecurityR : plSecurityR, + oldplSecurityR : oldplSecurityR, + methodId : methodId, + plDutyDept : plDutyDept, + plDutyPerson : plDutyPerson + }; + jQuery.ajax({ + type : "POST", + url : "./jd?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_save", + data : params, + success : function(msg) { + if (typeof(msg) == "string") { + msg = eval('(' + msg + ')'); + } + msg = msg.msg; + if (msg.indexOf("-1") == -1) { + parent.$("#iflowlist").get(0).contentWindow.refresh(); + window.top.$.simpleAlert("新建成功", "ok", 2000); + window.top.closeAwsDialog(); + } else { + window.top.$.simpleAlert("保存流程层级失败请稍后重试"); + } + } + }); + return true; +} +// ------------------------ +function zTreeBeforeAsync(treeId, treeNode) { + +} + +function getParam() { + var wsId = jQuery("#wsId").val(); + var sessionId = jQuery("#sid").val(); + var param = { + sid : sessionId, + cmd : "com.actionsoft.apps.coe.pal_processlevel_treejson", + wsid : wsId + }; + return param; +} + +function setOrderIndexByOutGoing(outgoing, uuid, orderIndex) { + +} + +function setOrderIndexByArray(array, uuid, orderIndex) { + +} + +function initTree() { + $("#repositoryTree").empty(); + var wsId = jQuery("#wsId").val(); + if (wsId) { + var setting = getSetings(); + repositoryTree = awsui.tree.init($("#repositoryTree"), setting); + $("#repositoryTree").css("height", "auto"); + } else { + window.top.$.simpleAlert("请选择流程资产", "info", 2000); + } + if (repositoryTree.getSelectedNode() == undefined) { + repositoryTree.selectNode(repositoryTree.config.data[0].id, true); + } + var level0 = repositoryTree.getChildrenByPid("process"); + if (level0.length > 0) { + var guideId = ""; + var level0_obj = $("#tree_li_" + level0[0].id + " a:first"); + guideId = "tree_li_" + level0[0].id; + repositoryTree.expandNode(level0_obj, true); + var level1 = repositoryTree.getChildrenByPid(level0[0].id); + if (level1.length > 0) { + var level1_obj = $("#tree_li_" + level1[0].id + " a:first"); + guideId = "tree_li_" + level1[0].id; + repositoryTree.expandNode(level1_obj, true); + var level2 = repositoryTree.getChildrenByPid(level1[0].id); + if (level2.length > 0) { + guideId = "tree_li_" + level2[0].id; + } + } + top.window.guideContent[2].obj = "$('#main_iframe').contents().find('#iflowlist').contents().find('#" + guideId + "')"; + top.window.guideContent[2].objId = guideId; + top.window.showGuide(2); + } +} + +function getSetings() { + var setting = { + sort : true, + dblClickToExpand : true, + opDefDblClick: true, + event : { + beforeDrag : beforeDrag, + beforeDrop : beforeDrop, + onDrop : onDrop, + onClick : clickSet, + beforeExpand : loadData, + afterLoad : afterLoad + }, + view : { + addHoverDom : addHoverDom, + removeHoverDom : removeHoverDom + }, + edit : { + enable : true, + showRemoveBtn : false, + showRenameBtn : false, + drag : { + prev : true, + next : true, + inner : true + } + }, + async : { + enable : true, + type : "post", + url : "./w", + autoParam : [ "id=pid" ], + otherParam : getParam() + }, + data : { + keep : { + parent : true + } + } + }; + setting.contextMenu = { + items : [ + { + text : "复制", + tit : "copy", + method : function(obj) { + $("#copyTypeDialog").dialog({ + title : '复制选项', + buttons:[ + {text:'确定',cls:"blue",handler:function(){ + if($('#copySelf').prop('checked')) { + copyType = 'self'; + } + if($('#copyAll').prop('checked')) { + copyType = 'all'; + } + var node = repositoryTree.getSelectedNode(); + setPlParentIDAndProcessLevel(node); + copeFileNode = node; + $('#copyTypeDialog').dialog('close'); + }}, + {text:'取消',handler:function(){ + $('#copyTypeDialog').dialog('close'); + }} + ], + onClose : function() { + $("#copySelf").check("option","checked", true); + } + }); + $(setting.contextMenu.target).menu("close"); + } + }, + { + text : "粘贴", + tit : "paste", + method : function(obj) { + if (copeFileNode == null) { + window.top.$.simpleAlert("请先复制文件", "info", 2000); + $(setting.contextMenu.target).menu("close"); + return; + } + var node = repositoryTree.getSelectedNode(); + if (node.plCategory != copeFileNode.plCategory) { + window.top.$.simpleAlert("对不起,不能跨文件类型粘贴", "info", + 2000); + $(setting.contextMenu.target).menu("close"); + return; + } + window.top.$.simpleAlert("请稍等", 'loading','no'); + setPlParentIDAndProcessLevel(node); + $.ajax({ + url : './w?cmd=com.actionsoft.apps.coe.pal_processlevel_copy&sid=' + + encodeURIComponent($('#sid').val()) + + '&sourceUUID=' + copeFileNode.id + + '&targetUUID=' + node.id + + '©Type=' + copyType + + '&t=' + new Date().getTime(), + /*async : false,*/ + success : function(msg) { + if (typeof(msg) == "string") { + msg = eval('(' + msg + ')').data; + } + window.top.$.simpleAlert("close"); + refresh(); + if (msg.success == "true") { + window.top.$.simpleAlert(msg.message, "ok", 2000); + } else { + window.top.$.simpleAlert(msg.message, "error"); + } + } + }) + $(setting.contextMenu.target).menu("close"); + } + } +/* , + { + text: "查询", + tit: "search", + method: function() { + var node = repositoryTree.getSelectedNode(); + var palPath = node.name; + var parentNode = repositoryTree.getParentNodeById(node.id); + while(parentNode != null) { + palPath = parentNode.name + ">" + palPath; + parentNode = repositoryTree.getParentNodeById(parentNode.id); + } + var url = "./w?sid=" + $("#sid").val() + "&cmd=com.actionsoft.apps.coe.pal_pl_search_page&wsId=" + $("#wsId").val() + "&plId=" + node.id + "&palPath=" + palPath; + var searchDlg=FrmDialog.open({ + width:800, + height: 510, + title: "查询", + url:url, + data:{}, + id:"search_dlg" + }); + $(setting.contextMenu.target).menu("close"); + } + }, + { + text: "导入", + tit: "search", + method: function() { + $("#importFileName").val(""); + var node = repositoryTree.getSelectedNode(); + var importDlg = $("#importDlg").dialog({ + title: "导入模型", + draggable: true, + buttons:[ + {text:'关闭',handler:function(){$("#importDlg").dialog("close");}} + ]} + ); + $(setting.contextMenu.target).menu("close"); + //上传文件 + $("#upfileImport").upfile({ + sid:$("#sid").val(), + appId:$("#appId").val(), + groupValue:"_import", + fileValue:"Normal", + filesToFilter : [["xls"]], + repositoryName:"tmp", + numLimit:1, + done:function(e, data){ + var filename = data['result']['files']['name']; + filename = decodeURI(filename); + $("#importFileName").val(filename); + } + }); + //导入 + $("#importFile").off("click").on("click", function(){ + if ($("#importFileName").val() == null) { + $.simpleAlert("请先上传文件", "warning"); + return; + } + $.simpleAlert("正在处理", "loading"); + $.ajax({ + type: "POST", + url: "./jd?sid=" + $("#sid").val() + "&cmd=com.actionsoft.apps.coe.pal_pl_search_import", + data: {wsId: $("#wsId").val(), fileName: $("#importFileName").val(), category: node.category}, + success: function(msg){ + if (msg.result == "ok") { + $.simpleAlert("close"); + $.simpleAlert("导入成功", "ok"); + $("#importDlg").dialog("close"); + } else { + $.simpleAlert("close"); + $.simpleAlert("导入失败," + msg.msg, "error"); + } + } + }) + }) + } + } + */ + ], + target : "#contextMenu" + }; + /* + * setting.dataModel = { url + * :"./w?sid="+jQuery("#sid").val()+"&cmd=com.actionsoft.apps.coe.pal_processlevel_treejson&pid=&wsid="+jQuery("#wsId").val() }; + */ + setting.dataModel = { + data : data + }; + return setting; +} +function loadData(treeNode) { + // 如果是父节点并且存在子节点执行加载 + if (treeNode) { + var dataModel = { + url : "./w?sid=" + jQuery("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_treejson&pid=" + treeNode.id + + "&wsid=" + jQuery("#wsId").val(), + method : "POST", + dataType : "json" + } + repositoryTree.refreshNode({ + id : treeNode.id, + dataModel : dataModel + }); + } + dbclickTree(); +} +function afterLoad() { + $("a[tabindex=process]").trigger("click.nodeClick"); +} +// 拖拽前事件 +function beforeDrag(treeNode) { + return true; +} +// 移动节点前现将所有的 orderindex计入一个集合 +function putOrdexIndexs(treeNode) { + var nodes = repositoryTree.getChildrenByPid(treeNode.pid); + for (var i = 0; i < nodes.length; i++) { + orderIndexs[i] = nodes[i].plOrdexIndex; + } +} + +var dragType = ""; +function beforeDrop(target, source) { + if (target.plCategory != source.plCategory) { + window.top.$.simpleAlert("不允许跨文件类型移动", "info", 2000); + return false; + } + if (repositoryTree.moveObj.find("span:first").hasClass("inner")) { + dragType = "inner"; //插入target内部 + } else { + dragType = "insert"; //插入target后面 + } + return true; +} +function onDrop(target, source, position) { + if(dragType == 'inner' && target.id == source.pid) { + $.simpleAlert('不允许移动到'+ source.name +'自身的父节点内部', 'error'); + return; + } + // 添加特殊情况处理sunlh + var flag = true; + if(dragType == 'insert') { + // 若目标文件为展开状态,增加是放入目标文件的后面或者放入目标文件的内部第一个的判断 + var targetId = target.id; + if($('#tree_ul_' + targetId).length > 0) { //存在加载好的子节点 + if(!$('#tree_ul_' + targetId).is(':hidden')) { // 子节点已展开 + flag = false; + $('#moveDialog').dialog({ + title : '移动选项', + buttons: [ + {text:'确定',cls:"blue",handler:function(){ + if($('#moveInnerFirst').prop('checked')) { + var firstChildId = $('#tree_ul_' + targetId).find('li:first').attr('li_index'); + var targetNode = repositoryTree.getNodeById(firstChildId); + moveTreeNode(targetNode, source, 'above'); + } + if($('#moveInsertBelow').prop('checked')) { + moveTreeNode(target, source, position); + } + $('#moveDialog').dialog('close'); + }}, + {text:'取消',handler:function(){$('#moveDialog').dialog('close');return;}} + ], + onClose: function() { + $('#moveInnerFirst').check('option','checked', true); + } + }); + } + } + } + if(flag) { + moveTreeNode(target, source, position); + } +} + +// 拖动树节点 +function moveTreeNode(target, source, position) { + var sourceParentNode = repositoryTree.getNodeById(source.pid); + var targetParentNode = repositoryTree.getNodeById(target.pid); + if (targetParentNode == undefined) { + targetParentNode = repositoryTree.getNodeById(target.id); + } + var msg = ""; + if(dragType == 'inner') {// 放入里面,默认最后的位置 + msg = "确认将" + source.name + "放入" + target.name + "里面?"; + } + if(dragType == 'insert') {// 放入文件之间 + if(position == 'below') {// 放入target下面 + msg = "确认将" + source.name + "放入" + target.name + "的后面(同级)?"; + } + if(position == 'above') {// 放入target上面 + msg = "确认将" + source.name + "放入" + target.name + "的前面(同级)?"; + } + } + var options = { + title : "提示", + content:msg, + onConfirm: function(){ + // 拖拽成功后 + awsui.ajax.request({ + url : "./jd", + method : "POST", + data : { + sid: $("#sid").val(), + cmd: "com.actionsoft.apps.coe.pal_update_index_or_pid", + sourceId: source.id, + targetId: target.id, + type: dragType, + position: position + }, + ok : function(r) { + //initTree(); + doLoad(sourceParentNode); + doLoad(targetParentNode); + dragType = ""; + }, + err:function(r){ + } + }); + }, + onCancel : function(){ + return true; + } + }; + $.confirm(options); +} + +// 同级移动返回更新后的orderIndex +function getNewOrderIndexStr(parentNode) { + var str = ""; + var nodes = repositoryTree.getChildrenByPid(parentNode.id); + ; + for (var i = 0; i < nodes.length; i++) { + nodes[i].plOrdexIndex = orderIndexs[i]; + } + for (var i = 0; i < nodes.length; i++) { + if (i == 0) { + str += nodes[i].id + "|" + nodes[i].plOrdexIndex; + } else { + str += "," + nodes[i].id + "|" + nodes[i].plOrdexIndex; + } + } + // console.log(str); + return str; +} + +// 跨级移动更新pid +function getNewPid(treeNodes, afterId) { + var pids = ""; + for (var i = 0; i < treeNodes.length; i++) { + if (i == 0) { + pids += treeNodes[i].id; + } else { + pids += "|" + treeNodes[i].id; + } + } + pids += "," + afterId; + return pids; +} + +// 异步设置orderindex +function updateOrderIndex(str, target, source) { + var param = { + orderIndexs : str + } + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_setploaderindex", + data : param, + success : function(msg) { + if (msg == "-1") { + window.top.$.simpleAlert("拖动失败请稍候重试", "info", 2000); + } else { + window.setTimeout(function() { + refreshNode(source.pid); + }, 300); + window.setTimeout(function() { + refreshNode(target.id); + }, 300); + } + } + }); +} + +function updatePid(str, target, source) { + var param = { + pids : str + } + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_setplid", + data : param, + success : function(msg) { + if (msg == "-1") { + window.top.$.simpleAlert("拖动失败请稍候重试", "info", 2000); + } else { + window.setTimeout(function() { + refreshNode(source.pid); + }, 300); + window.setTimeout(function() { + refreshNode(target.id); + }, 300); + } + } + }); +} + +function clickNode(treeNode) { + var id = treeNode.id; + $("#repositoryTree li.background_grey").removeClass("background_grey"); + $("#tree_li_" + id).addClass("background_grey"); + + $("#awsui_tooltip").tooltip("close"); + if (!isOpenMainIfranme) { + isOpenMainIfranme = true; + // 增加内容 + var html = $(""); + html.appendTo(awsTabs.tabContentPanel); + var newTab = { + item : { + url : treeNode.url, + title : treeNode.name, + index : "main" + } + }; + // 增加tab + awsTabs.addTab(newTab); + } else { + // 更新内容 + awsTabs.setTitle("main", treeNode.name); + if (document.getElementById("main").url != treeNode.url) { + document.getElementById("main").src = treeNode.url; + document.getElementById("main").url = treeNode.url; + } + awsTabs.focusTab("main"); + } + // 设置值 + setPlParentIDAndProcessLevel(treeNode); + + //导航设置 + if ($.cookie('is_first')) { + top.window.closeGuide(2); + document.getElementById('main').onload = function() { + document.getElementById('main').contentWindow.showGuide3(); + } + } +} +function openDesginer(uuid, openType, plName, appId, processVersionId, collaboration) { + if(collaboration == undefined || collaboration == null) { + collaboration = "0"; + } + // 关联流程源文件(console端)被删除的处理 + awsui.ajax.request({ + type : "post", + url:"./jd", + data:{ + sid : encodeURIComponent(jQuery('#sid').val()), + cmd : "com.actionsoft.apps.coe.pal_pl_repository_correlateresource_check", + uuid : uuid + }, + ok : function(r) { + var invalidCorrelate = r.data.invalidCorrelate; + if(invalidCorrelate != '') { + var msg = "" + invalidCorrelate + " 在AWS端没有检测到流程源文件,已断开关联,如需要请重新关联!"; + $('#invalidCorrelateDialog').html(msg); + $('#invalidCorrelateDialog').dialog({ + title : '提示', + closable : false, + buttons:[ + {text:'确定',cls:"blue",handler:function(){ + $("#invalidCorrelateDialog").dialog("close"); + // 隐藏树 + if ($('#simple-left').css('display') == 'block') { + $(".awsui-layout-icon.arrow-left").trigger("click"); + } + document.getElementById("main").url = document.getElementById("main").src; + document.getElementById("main").src = document.getElementById("main").src; + processVersionId = ""; + var params = { + sid : encodeURIComponent(jQuery('#sid').val()), + cmd : "com.actionsoft.apps.coe.pal_pl_repository_designer", + uuid : uuid, + openType : openType, + processDefId : processVersionId, + collaboration : collaboration, + teamId : "", + perms: "w,d,v", + filePerms: "-" + }, url, options; + openTab(uuid, url = "./w?" + connectParams(params), plName); + } + } + ] + }); + } else { + // 隐藏树 + if ($('#simple-left').css('display') == 'block') { + $(".awsui-layout-icon.arrow-left").trigger("click"); + } + var params = { + sid : encodeURIComponent(jQuery('#sid').val()), + cmd : "com.actionsoft.apps.coe.pal_pl_repository_designer", + uuid : uuid, + openType : openType, + processDefId : processVersionId, + collaboration : collaboration, + teamId : "", + perms: "w,d,v", + filePerms: "-" + }, url, options; + openTab(uuid, url = "./w?" + connectParams(params), plName); + } + } + }); +} + +function openDesginerFromAttr(uuid, openType, plName, appId, processVersionId, + isOpenDialog, shapeId) { + var params = { + sid : encodeURIComponent(jQuery('#sid').val()), + cmd : "com.actionsoft.apps.coe.pal_pl_repository_designer_open_shape_page", + uuid : uuid, + openType : openType, + processDefId : processVersionId, + shapeId : shapeId, + teamId : "" + }, url, options; + openTab(uuid, url = "./w?" + connectParams(params), plName); +} + +function connectParams(params) { + var connParms = ""; + if (typeof (params) == "object") { + for ( var i in params) { + connParms += i + "=" + params[i] + "&"; + } + } + + return connParms.substring(0, connParms.length - 1); +} + +function changeTabTitle(id, TabTitle, uuid, tabType) { + awsTabs.changeIndex(id, uuid); + if (awsTabs.memory.length > 1) { + var index = -1; + for (var i in awsTabs.memory) { + if (awsTabs.memory[i] == id) { + index = i; + break; + } + } + if (index != -1) { + awsTabs.memory.splice(index, 1); + } + } + awsTabs.setTitle(uuid, TabTitle); + if(tabType) { + $("iframe[index=" + uuid + "]").attr("tabType", tabType); + } else { + $("iframe[index=" + uuid + "]").attr("tabType", ""); + } +} +function closeTabById(index) { + awsTabs.closeTab(index, null); +} + +function openTab(id, url, title) { + + var setting = { + item : { + index : id, + title : title + }, + // contextMenu : true, + // contextMenuTarget : "contextMenu1", + close : true, + onCloseTab : function(obj) { + var isClose = true; + $("iframe").each(function() { + if ($(this).attr("index") == obj.attr("index")) { + if ($(this).attr("tabType") == undefined || $(this).attr("tabType") == "") { + if ($(this)[0].contentWindow.isSavingFile) { + isClose = $(this)[0].contentWindow.isSavingFile(); + } + } + } + }); + if (!isClose) { + if (confirm(title + " 页面内容未保存,您确认关闭页面吗?")) { + leaveThePage(obj) + return true; + } else + return false; + } + leaveThePage(obj); + }, + onClick : function(obj) { + var currentTabIndex = $("div[index][class*=current]").attr("index"); + if (currentTabIndex == obj.index) { + } else { + if ($("iframe[index=" + obj.index + "]") != null && $("iframe[index=" + obj.index + "]")[0].CLB) { + setTimeout(function() { + $("iframe[index=" + obj.index + "]")[0].contentWindow.CLB.listen(); + $("iframe[index=" + obj.index + "]")[0].contentWindow.DesignerCopyPaste.changeTitleListen(); + }, 1000 * 2); + + } + if ($("iframe[index=" + currentTabIndex + "]") != null && $("iframe[index=" + currentTabIndex + "]")[0].CLB) { + leaveThePage($("div[index][class*=current]")); + } + } + + awsTabs.focusTab(obj.index); + } + }; + if (awsTabs.existsTab(id)) { + awsTabs.focusTab(id); + } else { + var html = $("") + .appendTo(awsTabs.tabContentPanel); + awsTabs.addTab(setting); + } +} + +function leaveThePage(obj) { + var userId = $("#userId").val(); + var uuid = obj.attr("index"); + var sid = $("#sid").val(); + if ($("iframe[index=" + uuid + "]").attr("tabType") == undefined || $("iframe[index=" + uuid + "]").attr("tabType") != "custom") { + if ($("iframe[index=" + uuid + "]")[0].contentWindow.CLB) { + $("iframe[index=" + uuid + "]")[0].contentWindow.CLB.stopListen(); + } + } + $.ajax({ + url : "./jd?sid=" + sid + + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_realtime_leave", + data : { + userId : userId, + uuid : uuid + }, + success : function(data) { + } + }); +} + +function openTabCustom(id, url, title) { + var setting = { + item : { + index : id, + title : title + }, + close : true, + onCloseTab : function(obj) { + var userId = $("#userId").val(); + var uuid = obj.attr("index"); + var sid = $("#sid").val(); + $.ajax({ + url : "./jd?sid=" + + sid + + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_realtime_leave", + data : { + userId : userId, + uuid : uuid + }, + success : function(data) { + } + }); + } + }; + if (awsTabs.existsTab(id)) { + awsTabs.focusTab(id); + } else { + var html = $( + "") + .appendTo(awsTabs.tabContentPanel); + awsTabs.addTab(setting); + } +} + +// 异步节点加载成功后回调 +function onAsyncSuccess(event, treeId, treeNode, msg) { + var zTree = jQuery.fn.zTree.getZTreeObj("processLevelTree"); + setTimeout(function() { + if (treeNode) { + if (treeNode.level < 1) { // 展开到指定层级 + if (treeNode.children && treeNode.children.length > 0) { + expandNodes(zTree, treeNode.children); + } + } + } + }, 500); // 加载下级节点 +} + +function getNodeIndex(nodes, treeNode) { + var index = 0; + if (nodes && treeNode) { + for (var i = 0; nodes.length; i++) { + if (treeNode.id == nodes[i].id) { + index = i + 1; + break; + } + } + } + return index; +} + +function setPlParentIDAndProcessLevel(treeNode) { + if (!treeNode.isParent) { + treeNode.isParent = true; + } + plParentid = treeNode.id; + processLevel = treeNode.plLevel; + isLeaf = treeNode.isParent; +} + +// 展开所有节点 +function expandNodes(zTree, nodes) { + if (!nodes) + return; + for (var i = 0, l = nodes.length; i < l; i++) { + zTree.expandNode(nodes[i], true, false, false); + if (nodes[i].isParent) { + expandNodes(nodes[i].children); + } + } +} + +// 自动展开两级节点 +function expandNodesFirst(zTree, nodes) { + if (!nodes) + return; + for (var i = 0, l = 1; i < l; i++) { + zTree.expandNode(nodes[i], true, false, false); + if (nodes[i].isParent && nodes[i].zAsync) { + expandNodesFirst(nodes[i].children); + } + } +} + +// 自动展开n级节点 +function expandNodesN(zTree, nodes, n) { + if (!nodes) + return; + for (var i = 0, l = n; i < l; i++) { + zTree.expandNode(nodes[i], true, false, false); + if (nodes[i].isParent) { + expandNodesN(zTree, nodes[i].children, n); + } + } +} + +// 刷新指定节点 +function refreshNode(id) { + if (!id) { + id = plParentid; + } + var node = repositoryTree.getNodeById(id); + if (node == null) { + } else { + loadData(node); + if (repositoryTree.existsChildren(id)) { + node.open = true; + } else { + delete node.open; + } + doLoad(node, "reload"); + } +} +// 刷新树和右侧的页面 +function refresh(id) { + refreshNode(id); + document.getElementById("main").src = document.getElementById("main").src; +} +function doLoad(treeNode, type) { + var dataModel = { + url : "./jd?sid=" + $("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_treejson&pid=" + treeNode.id + + "&wsid=" + $("#wsId").val(), + method : "POST", + dataType : "json" + } + repositoryTree.refreshNode({ + id : treeNode.id, + dataModel : dataModel + }); +} +// 自定义操作 添加 +function addHoverDom(treeId, treeNode) { + +} + +// 自定义操作 移除图标 +function removeHoverDom(treeId, treeNode) { + if (treeNode.isParent) { + $("#addProcessLevel_" + treeNode.id).unbind().remove(); + } + $("#editProcessLevel_" + treeNode.id).unbind().remove(); + $("#flowProcess_" + treeNode.id).unbind().remove(); + $("#empower_" + treeNode.id).unbind().remove(); + $("#delProcessLevel_" + treeNode.id).unbind().remove(); + $("#upProcessLevel_" + treeNode.id).unbind().remove(); + $("#downProcessLevel_" + treeNode.id).unbind().remove(); +} + +// 自定义添加按钮 +function addProcessLevelBtn(treeNode) { + var sObj = $("#" + treeNode.tId + "_span"); + if (treeNode.editNameFlag + || $("#addProcessLevel_" + treeNode.id).length > 0) + return; + var addProcessLevelStr = ""; + sObj.after(addProcessLevelStr); + var btn = $("#addProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + setPlParentIDAndProcessLevel(treeNode); + + createProcessLevel(); + + return false; + }); +} + +// 自定义修改按钮 +function editProcessLevelBtn(treeNode) { + var sObj = $("#addProcessLevel_" + treeNode.id); + if (sObj.length == 0) { + sObj = $("#" + treeNode.tId + "_span"); + } + if (treeNode.editNameFlag + || $("#editProcessLevel_" + treeNode.id).length > 0) + return; + var editProcessLevelStr = ""; + sObj.after(editProcessLevelStr); + var btn = $("#editProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + setPlParentIDAndProcessLevel(treeNode); + if (treeNode.id) { + createProcessLevel(treeNode.id); + } + return false; + }); +} + +// 显示流程图按钮 +// function flowProcess(treeNode) { +// var sObj = $("#editProcessLevel_" +treeNode.id); +// var url= treeNode.plDiagramUrl; +// var flowProcessStr =""; +// var css="button openprocess"; +// var title=打开流程图; +// if(url==""){ +// title=设置流程图; +// css="button setprocess"; +// } +// if (treeNode.editNameFlag || $("#flowProcess_" + treeNode.id).length > 0) +// return; +// var flowProcessStr = ""; +// sObj.after(flowProcessStr); +// var btn = $("#flowProcess_" + treeNode.id); +// if (btn) +// btn.bind("click", function() { +// setPlParentIDAndProcessLevel(treeNode); +// if(url==""){ +// openSetProcess(treeNode.id); +// }else{ +// window.open(treeNode.plDiagramUrl,'flowProcess'); +// } +// return false; +// }); +// } +// +// +// //设置流程图 +// function openSetProcess(id){ +// var url="./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + +// "&cmd=com.actionsoft.apps.coe.pal_processlevel_flowchart_page&id="+id+"&type=tree"; +// parent.parent.asyncbox.open({id:'showOpenFlowChar',url :url,width : +// 600,height :135,title:设置流程图,modal:true}); +// } + +// 显示授权按钮 +function emPower(treeNode) { + var sObj2 = $("#flowProcess_" + treeNode.id); + if (treeNode.editNameFlag || $("#empower_" + treeNode.id).length > 0) + return; + var empowerStr = ""; + sObj2.after(empowerStr); + var empowerbtn = $("#empower_" + treeNode.id); + if (empowerbtn) { + empowerbtn.bind("click", function() { + setPlParentIDAndProcessLevel(treeNode); + var url = "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_empower&id=" + treeNode.id; + parent.parent.asyncbox.open({ + id : 'showOpenProcessLevel', + url : url, + width : 480, + height : 520, + title : 授权, + modal : true + }); + return false; + }); + } +} + +// 自定义删除按钮 +function deleteBtn(treeNode) { + var sObj = $("#empower_" + treeNode.id); + if (treeNode.editNameFlag + || $("#delProcessLevel_" + treeNode.id).length > 0) + return; + var delProcessLevelStr = ""; + sObj.after(delProcessLevelStr); + var btn = $("#delProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + deleteProcessLevel(treeNode); + return false; + }); +} + +// 自定义向上箭头 + +function upBtn(treeNode) { + var sObj = $("#delProcessLevel_" + treeNode.id); + if (treeNode.editNameFlag || $("#upProcessLevel_" + treeNode.id).length > 0) + return; + var delProcessLevelStr = ""; + sObj.after(delProcessLevelStr); + var btn = $("#upProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + window.top.$.simpleAlert(向上, "info", 2000); + return false; + }); +} +// 自定义向下箭头 +function downBtn(treeNode) { + var sObj = $("#upProcessLevel_" + treeNode.id); + if (sObj.length == 0) { + sObj = $("#delProcessLevel_" + treeNode.id); + } + if (treeNode.editNameFlag + || $("#downProcessLevel_" + treeNode.id).length > 0) + return; + var delProcessLevelStr = ""; + sObj.after(delProcessLevelStr); + var btn = $("#downProcessLevel_" + treeNode.id); + if (btn) + btn.bind("click", function() { + window.top.$.simpleAlert(向下, "info", 2000); + return false; + }); +} + +function deleteProcessLevel(wd, name, id, pid) { + var options = { + title : "提示", + content : "确定删除" + "[" + name + "]" + "吗?", + model : false, + onConfirm : function() { + $.simpleAlert("正在处理", "loading"); + var wsId = jQuery("#wsId").val(); + var params = { + wsid : wsId, + pid : id + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_tree_remove", + data : params, + success : function(msg) { + $.simpleAlert("close"); + msg = eval('(' + msg + ')').msg; + if (msg == "1") { + window.top.$.simpleAlert("删除成功", "ok", 2000); + wd.location.href = wd.location.href; + refreshNode(pid); + if (awsTabs.existsTab(id)) { + awsTabs.closeTab(id); + } + } else { + window.top.$.simpleAlert("删除失败请稍后重试", "info", 2000); + } + } + }); + } + }; + window.top.$.confirm(options); +} +var isExec = true; +function reinitIframe() { + var height = document.documentElement.scrollHeight; + if (height > 540) { + if (isExec) { + parent.document.getElementById("coeContentiframe").height = height + "px"; + } + } +} + +function hidenSimpleLeft() { + // $("#simple-layout-separater").css({"width":"32px","left":"0px;"}).addClass("showIcon").append('').find("span").addClass("showSpan"); + // $("#simple-left").hide(); + // setTimeout(function (){$("#simple-right").addClass("hideDiv");},100); + +} +function getWidthToolbar() { + return $("#simple-right").width(); +} + + +function showTooltip(objId, setting) { + $("#" + objId).tooltip(setting); + $("#awsui_tooltip").css({"padding": 0}); + if (setting.position == "right") { + var left = $(".tooltip-arrow").css("left"); + left = left.substring(0, left.indexOf("px")); + left = parseInt(left); + $(".tooltip-arrow").css({"left": (left + 8) + "px"}); + $(".tooltip-arrow-inner").css({"left": (left + 9) + "px"}); + } +} +function closeTooltip(objId) { + $("#" + objId).tooltip("close"); +} + + +/** + * 导出 + * @param wd + * @param wsId + * @param uuid + */ +function exportPalRepository(wd, wsId, uuid) { + awsui.ajax.request({ + method:"POST", + url:"./jd", + data:{ + sid : encodeURIComponent(jQuery('#sid').val()), + cmd : "com.actionsoft.apps.coe.pal_pl_repository_processlevel_repository_export", + wsId : wsId, + uuid : uuid + }, + ok:function(r) { + var downloadUrl = r.data.downloadUrl; + if (downloadUrl) { + window.location.href = downloadUrl; + } + }, + err:function(r) { + + } + }); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.search.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.search.js new file mode 100644 index 00000000..1841e996 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.search.js @@ -0,0 +1,48 @@ +$(function(){ + initSelectBar() +}) +function initSelectBar(){ + $("ul#search *").addClass("toggle-bar"); + $(document) + // .on("click.pl","li.dropdown :not(span)",function(e){ + // $this=$(this); + // e.stopPropagation(); + // return false; + // }) + .on("click.pl",":not(.toggle-bar)",function(e){ + $this=$(this); + if($(this).hasClass("toggle-p")){ + e.stopPropagation(); + return false; + } + clearMenus() + }) + // .on("click.pl",function(){ + // $this=$(this); + // clearMenus() + // }) + .on('click.pl', '.dropdown form', function (e) { + e.stopPropagation() + }) + .on('click.dropdown-menu', function (e) { + e.stopPropagation() + }) + .on("click.pl","[data-toggle=dropdown2]",function(){ + var data=$(this).data("dropdown2"); + if(!data)$(this).data("dropdown2",$(this)); + var $parent=$("ul#search").parent(); + var isActive=$parent.hasClass("open"); + clearMenus(); + if(!isActive){ + $parent.toggleClass("open"); + } + $(this).focus(); + return false; + + }) +} +function clearMenus() { + var $parent=$("ul#search").parent(); + $parent.removeClass('open'); +} + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.ws.portal.guide.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.ws.portal.guide.js new file mode 100644 index 00000000..e48e5314 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.ws.portal.guide.js @@ -0,0 +1,341 @@ +/** + * 新建引导 + */ +var totalStep = 4; +var guideContent = [ + { + html: "
                                                " + + "
                                                新建流程资产库 1/" + totalStep + + " " + + "
                                                " + + "
                                                " + + " 新建一个流程资产库
                                                在里面可以设计流程架构、建立流程模型、发布审批流程、生成报告手册等。
                                                " + + " " + + "
                                                " + + "
                                                ", + obj: "$('#main_iframe').contents().find('#createButton')", + objId: "createButton", + iframeId: "main_iframe" + }, + { + html: "
                                                " + + "
                                                进入资产库 2/" + totalStep + + " " + + "
                                                " + + "
                                                " + + " 单击资产库图标,进入资产库首页。" + + " " + + "
                                                " + + "
                                                ", + obj: "$('#main_iframe').contents().find('.layout_tile_div:last')", + objId: "using_tile .layout_tile_div:last", + iframeId: "main_iframe" + }, + { + html: "
                                                " + + "
                                                选择流程节点 3/" + totalStep + + " " + + "
                                                " + + "
                                                " + + " 单击流程菜单,选择流程文件。" + + " " + + "
                                                " + + "
                                                ", + obj: "$('#main_iframe').contents().find('#iflowlist').contents().$('#repositoryTree')", + objId: "repositoryTree", + iframeId: "iflowlist", + position: "right", + iframeObj: "window.frames['main_iframe']" + }, + { + html: "
                                                " + + "
                                                新建流程 4/" + totalStep + + " " + + "
                                                " + + "
                                                " + + " 点击新建,创建流程。" + + " " + + "
                                                " + + "
                                                ", + obj: "$('#main_iframe').contents().find('#iflowlist').contents().find('#main').contents().find('#createModelButton')", + objId: "createModelButton", + iframeId: "main", + iframeObj: "window.frames['main_iframe'].frames['iflowlist']" + } +]; + +function beginGuide() { + if ($("#main_iframe").attr("src").indexOf("com.actionsoft.apps.coe.pal_ws_portal") == -1) { + return false; + } + + var date1 = new Date(); + var isShow = true; + if ($.cookie('guide_last_time') != undefined) { + var date2 = new Date($.cookie('guide_last_time')); + var date3 = date1.getTime()-date2.getTime(); + if (date3/(1000*60) > 30) { + isShow = true; + } else { + isShow = false; + } + } else { + isShow = true; + $.cookie('guide_last_time', date1); + } + if (isShow) { + var guideTime = 0; + if ($.cookie('guide_time') != undefined) { + guideTime = parseInt($.cookie("guide_time")); + } + guideTime++; + $.cookie("guide_time", guideTime); + if (guideTime <= 3) { + $.cookie('is_first', true); + showGuide(0); + } else { + $.cookie('is_first', false); + } + + if ($.cookie('is_first') == undefined || $.cookie('is_first') == "true") { + $.cookie("guide_step", 0); + } + } +} + +function showGuide(index) { + $.cookie("guide_step", index); + var isFirst = $.cookie('is_first'); + if (isFirst == "true") { + guideMask("open"); + //关闭其他提示框 + $("#awsui_tooltip").tooltip("close"); + //打开新提示框 + var html = guideContent[index].html; + var obj = guideContent[index].obj; + obj = eval('(' + obj + ')'); + obj.css({"z-index": "3"}); + if (obj.css("position") != "fixed") { + obj.css({"position": "relative"}); + } + + var position = guideContent[index].position ? guideContent[index].position : "bottom"; + var iframeId = guideContent[index].iframeId; + if (iframeId) { + if (guideContent[index].iframeObj == undefined) { + $("#" + iframeId).parent().css("z-index", "3"); + if ($("#" + iframeId).parent().css("position") != "fixed" && $("#" + iframeId).parent().css("position") != "absolute") { + $("#" + iframeId).parent().css({"position": "relative"}); + } + guideMask("open", iframeId); + window.frames[iframeId].showTooltip(guideContent[index].objId, {bordercolor:"#4b4b4b", bgcolor:"#4b4b4b",color:"#fff", text:html, position:position, autoClose: false, maxWidth: 300}); + } else { + var iframeObj = guideContent[index].iframeObj; + iframeObj = eval('(' + iframeObj + ')'); + iframeObj.$("#" + iframeId).parent().css("z-index", "3"); + if (iframeObj.$("#" + iframeId).parent().css("position") != "fixed" && iframeObj.$("#" + iframeId).parent().css("position") != "absolute") { + iframeObj.$("#" + iframeId).parent().css({"position": "relative"}); + } + guideMask("open", iframeId, iframeObj); + iframeObj.window.frames[iframeId].showTooltip(guideContent[index].objId, {bordercolor:"#4b4b4b", bgcolor:"#4b4b4b",color:"#fff", text:html, position:position, autoClose: false, maxWidth: 300}); + } + + } else { + $("#" + guideContent[index].objId).tooltip({bordercolor:"#4b4b4b", bgcolor:"#4b4b4b",color:"#fff", text:html, position:position, autoClose: false, maxWidth: 300}); + $("#awsui_tooltip").css({"padding": 0}); + if (position == "right") { + var left = $(".tooltip-arrow").css("left"); + left = left.substring(0, left.indexOf("px")); + left = parseInt(left); + $(".tooltip-arrow").css({"left": (left + 8) + "px"}); + $(".tooltip-arrow-inner").css({"left": (left + 9) + "px"}); + } + } + + } +} + +function continueGuide() { + $("#guide_bar").remove(); + var index = $.cookie("guide_step"); + index = parseInt(index); + showGuide(index); +} + +//点击引导的叉号,关闭引导 +function closeGuide(index) { + var obj = guideContent[index].obj; + obj = eval('(' + obj + ')'); + var iframeId = guideContent[index].iframeId; + if (iframeId == undefined) { + if($("#awsui_tooltip")) { + obj.tooltip("close"); + } + } else { + if (guideContent[index].iframeObj) { + var iframeObj = guideContent[index].iframeObj; + if (typeof(iframeObj) == "string") { + iframeObj = eval('(' + iframeObj + ')'); + } + iframeObj.window.frames[iframeId].closeTooltip(guideContent[index].objId); + } else { + window.frames[iframeId].closeTooltip(guideContent[index].objId); + } + } + obj.css("z-index", "1"); +} + +function closeGuideMask(index) { + closeGuide(index); + var iframeId = guideContent[index].iframeId; + guideMask("close"); + if (iframeId != undefined) { + guideMask("close", iframeId, guideContent[index].iframeObj); + } + $.cookie('is_first', false); +} + +//结束引导 +function finishGuide() { + $.cookie('is_first', false); + $("#awsui_tooltip").tooltip("close"); + var iframeId = guideContent[2].iframeId; + if (guideContent[2].iframeObj) { + var iframeObj = guideContent[2].iframeObj; + if (typeof(iframeObj) == "string") { + iframeObj = eval('(' + iframeObj + ')'); + } + iframeObj.$("#" + iframeId).parent().css("z-index", "1"); + } else { + $("#" + iframeId).parent().css("z-index", "1"); + } + closeGuideMask(3); +} + +//遮罩 +function guideMask(method, iframeId, iframeObj) { + if ( typeof method == "undefined") { + method = "open"; + } + if (method == "open") { + if (iframeId == undefined) { + if ($("#window-mask_guide").length == 0) { + var mask = $("").appendTo("body"); + mask.css({ + width : $(window).width() + "px", + height : $(window).height() + "px", + filter : "alpha(opacity=60)" + }).show(); + $(window).on("resize.mask", function() { + mask.css({ + width : $(window).width() + "px", + height : $(window).height() + "px" + }); + }); + } + } else { + var obj = window.frames[iframeId]; + if (iframeObj) { + obj = iframeObj.window.frames[iframeId]; + } + if (obj.$("#window-mask_guide").length == 0) { + var mask = $("").appendTo(obj.$("body")); + if (iframeObj) { + mask.css({ + width : iframeObj.$("#" + iframeId).width() + "px", + height : iframeObj.$("#" + iframeId).height() + "px", + filter : "alpha(opacity=60)" + }).show(); + obj.$(window).on("resize.mask", function() { + mask.css({ + width : iframeObj.$("#" + iframeId).width() + "px", + height : iframeObj.$("#" + iframeId).height() + "px" + }); + }); + } else { + mask.css({ + width : $("#" + iframeId).width() + "px", + height : $("#" + iframeId).height() + "px", + filter : "alpha(opacity=60)" + }).show(); + obj.$(window).on("resize.mask", function() { + mask.css({ + width : $("#" + iframeId).width() + "px", + height : $("#" + iframeId).height() + "px" + }); + }); + } + } + } + + } else if (method == "close") { + if (iframeId == undefined) { + $("#window-mask_guide").remove(); + } else { + if (iframeObj) { + if (typeof(iframeObj) == "string") { + iframeObj = eval('(' + iframeObj + ')'); + } + iframeObj.parent.$('iframe').css("z-index", "0"); + iframeObj.$("#window-mask_guide").remove(); + iframeObj.$("#" + iframeId).parent().css("z-index", "0"); + iframeObj.window.frames[iframeId].$("#window-mask_guide").remove(); + } else { + $("#" + iframeId).parent().css("z-index", "0"); + window.frames[iframeId].$("#window-mask_guide").remove(); + } + } + } +} + +/************************************************************全导航相关******************************************************************/ +//展示全部导航 +function showGuideDialog() { + var index = $.cookie("guide_step"); + index = parseInt(index); + closeGuide(index); + + var html = ''; + var guide = $(html).appendTo("body"); + + $("#guide_bar").css({"top": ($(window).height() - $("#guide_bar").height()) / 2, "left": ($(window).width() - $("#guide_bar").width()) / 2}).show(); + + $('#fade').lightSlider({ + minSlide:1, + maxSlide:1, + mode:'fade' + }); + + $("#fade").css({"height": 351, "margin-right": 0}); + var li_width = $("#fade").parent().width(); + $("#fade li").css({"padding-left": "0px", "width": li_width}); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.ws.portal.guide2.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.ws.portal.guide2.js new file mode 100644 index 00000000..eaeb1b85 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.ws.portal.guide2.js @@ -0,0 +1,283 @@ +$(function() { + if ($("#menubar_pal").is(":visible")) { + var date1 = new Date(); + var isShow = true; + if ($.cookie('guide2_last_time') != undefined) { + var date2 = new Date($.cookie('guide2_last_time')); + var date3 = date1.getTime()-date2.getTime(); + if (date3/(1000*60) > 30) { + isShow = true; + } else { + isShow = false; + } + } else { + isShow = true; + $.cookie('guide2_last_time', date1); + } + + var left = "left: 60px;"; + var width = "width: 140px;"; + var padding = ""; + var text = "开始引导"; + if ($("#menu_bar").width() >= 280) { + left = "left: 60px;"; + } else if ($("#menu_bar").width() >= 125) { + left = "left: 0px;"; + width = "width: 110px;"; + } else { + left = "left: 0px;"; + width = "width: 46px;"; + padding = "padding: 5px 3px;"; + text = "引导"; + } + var button_html = '
                                                ' + + ' ' + + '
                                                '; + $("body").append(button_html); + + if (isShow) { + var guideTime = 0; + if ($.cookie('guide2_time') != undefined) { + guideTime = parseInt($.cookie("guide2_time")); + } + guideTime++; + $.cookie('guide2_time', guideTime); + if (guideTime <= 3) { + Guide2.showGuide(0); + $("#begin_guide2_btn").hide(); + } + } else { + $("#begin_guide2_btn").show(); + } + } +}) + +/** + * 功能性引导 + */ +var guide2Content = [ + [ + { + title: "新建流程资产库", + content: "点击新建,创建一个流程资产库", + bg_img: "1.jpg", + top: "15%", + right: "20px" + }, + { + title: "选择分类原则", + content: "常用的流程分类方法供参考,先看三分法吧", + bg_img: "1_1.jpg", + left: "50%", + top: "50%" + }, + { + title: "逐层建立流程模型", + content: "选中左侧生成的三分法流程架构文件,点击新建,建立它的子流程", + bg_img: "1_2.jpg", + top: "20%", + right: "20px" + } + ], + [ + { + title: "绘制详细流程模型", + content: "现在,选择新建文件分类,建立详细流程模型,先看一下这四种不同的模型", + bg_img: "2.jpg", + left: "50%", + top: "50%" + }, + { + title: "EVC模型", + content: "用EVC来描述高阶(一、二、三级)流程模型", + bg_img: "2_1.jpg", + left: "20%" + }, + { + title: "BPMN模型", + content: "用BPMN来绘制末级流程,它可以在BPMS中直接执行", + bg_img: "2_2.jpg", + left: "20%" + }, + { + title: "流程图模型", + content: "也可以用零学习成本的流程图来描述", + bg_img: "2_3.jpg", + left: "20%" + }, + { + title: "EPC模型", + content: "当然也有事件驱动的过程链图", + bg_img: "2_4.jpg", + left: "20%" + } + ], + [ + { + title: "生成流程报告文件", + content: "这里有多种流程报告文件的模板", + bg_img: "3.jpg" + }, + { + title: "一键生成流程文件", + content: "选择报告类型,通过向导即可自动生成文件", + bg_img: "3_1.jpg", + top: "50%" + }, + { + title: "下载文件报告", + content: "下载一个流程报告文件看下", + bg_img: "3_2.jpg", + right: "30%" + } + ] + +]; + +var Guide2 = { + top: "40%", + bottom: "", + left: "45%", + right: "", + currentTab: 0, + + showGuide: function(index) { + var $this = $(this)[0]; + var guideContentObj = guide2Content[$this.currentTab][index]; + if (guideContentObj) { + //提示div的位置 + if (guideContentObj.top) { + $this.top = guideContentObj.top; + } else { + $this.top = "40%"; + } + if (guideContentObj.bottom) { + $this.bottom = guideContentObj.bottom; + $this.top = ""; + } else { + $this.bottom = ""; + } + if (guideContentObj.left) { + $this.left = guideContentObj.left; + } else { + $this.left = "45%"; + } + if (guideContentObj.right) { + $this.right = guideContentObj.right; + $this.left = ""; + } else { + $this.right = ""; + } + } + var dlg_style=""; + if ($this.top != "") { + dlg_style += "top: " + $this.top + "; "; + } else if ($this.bottom != "") { + dlg_style += "bottom: " + $this.bottom + "; "; + } + if ($this.left != "") { + dlg_style += "left: " + $this.left + "; "; + } else if ($this.right != "") { + dlg_style += "right: " + $this.right + "; "; + } + + var button = ''; + var showAgain = ''; + var guideTabObj = guide2Content[$this.currentTab]; + if (guideTabObj.length == (index + 1)) { //某一个tab的最后一步引导 + showAgain = '再看一次'; + if (parseInt($this.currentTab) + 1 == guide2Content.length) { //最后一步引导 + button = ''; + } + } else { + index = index + 1; + $this.showGuide(index); + } + + var html_dlg = '
                                                ' + + '
                                                ' + + '
                                                ' + guideContentObj.title + '
                                                ' + + '
                                                ' + + ' ' + guideContentObj.content + '' + + showAgain + + button + + '
                                                ' + + '
                                                ' + + '
                                                '; + + if ($("#guide_div").length == 0) { + var html = '
                                                ' + + ' ' + + '
                                                ' + + ' 快速建立流程层级' + + ' ' + + ' 绘制详细流程模型' + + ' ' + + ' 导出流程报告文件' + + ' 我想实际操作,退出引导 ' + + '
                                                ' + + html_dlg; + + '
                                                '; + $("body").append(html); + } else { + $("#guide_img").attr("src", "../apps/com.actionsoft.apps.coe.pal/img/guide/" + guideContentObj.bg_img); + $("#guide_div .guide_dlg").remove(); + $("#guide_div").append(html_dlg); + } + }, + + showNext: function(index){ + $this = $(this)[0]; + index = parseInt(index); + var guideTabObj = guide2Content[$this.currentTab]; + if (guideTabObj.length == (index + 1)) { + if (parseInt($this.currentTab) + 1 == guide2Content.length) { + $this.finishGuide(); + } else { + var currentTabIndex = parseInt($this.currentTab) + 1; + $this.clickTab(currentTabIndex); + } + } else { + index = index + 1; + $this.showGuide(index); + } + }, + + clickTab: function(tab_index){ + $this = $(this)[0]; + $this.currentTab = tab_index; + if ($("#guide_div").length != 0) { + var old_tab = $("#guide_div span.guide_head_current").attr("tab_index"); + if (old_tab != $this.currentTab) { + $("#guide_div span.guide_head_current").removeClass("guide_head_current"); + $("#guide_div span[tab_index=" + $this.currentTab + "]").addClass("guide_head_current"); + } + } + $this.showGuide(0); + }, + + finishGuide: function(){ + var top = $("body").height() - 100; + $("#guide_div").animate({ + width: "10px", + height: "0px", + top: top + "px", + left: "50px", + }, 1000, function(){ + $("#guide_div").remove(); + $("#begin_guide2_btn").show(); + beginGuide(); + }); + } +} + +function downloadDemoReport() { + var params = { + 'repositoryName' : 'tmp', + 'groupValue' : 'demo', + 'fileValue' : "Normal", + 'fileName' : 'report.zip', + 'appId' : "com.actionsoft.apps.coe.pal" + }; + window.location.href = './df?sid=' + sid + '&' + $.param(params); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.ws.portal.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.ws.portal.js new file mode 100644 index 00000000..71bca73b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.ws.portal.js @@ -0,0 +1,654 @@ +jQuery(function() { + initWs(); + changeShowType(); + $("#show_style_icon .span_icon").unbind("click").bind("click", function(){ + changeShowType($(this).attr("icontype")); + var width = $("#using_table").width(); + $("div[widthPercent]").each(function(){ + var _$this = $(this); + var percent = parseInt(_$this.attr("widthPercent")); + _$this.css({"width": width * percent/100}); + }) + }); + + if(MzBrowser.safari)$("span[name='styleShowSpan']").css({ + "font-family":"Arial", + "font-size":"12px", + "padding-top":"-30x", + "padding-bottom":"0px" + }); + + $(window).bind("click", function(){ + $(".layout_tile_edit").hide(); + }); + +// if (isEmpty) { +// parent.beginGuide(); +// } else { +// $.cookie('is_first', false); +// } +}); + +window["MzBrowser"]={};(function() { + if(MzBrowser.platform) return; + var ua = window.navigator.userAgent; + MzBrowser.platform = window.navigator.platform; + MzBrowser.firefox = ua.indexOf("Firefox")>0; + MzBrowser.opera = typeof(window.opera)=="object"; + MzBrowser.ie = !MzBrowser.opera && ua.indexOf("MSIE")>0; + MzBrowser.mozilla = window.navigator.product == "Gecko"; + MzBrowser.netscape= window.navigator.vendor=="Netscape"; + MzBrowser.safari= ua.indexOf("Safari")>-1; + if(MzBrowser.firefox) var re = /Firefox(\s|\/)(\d+(\.\d+)?)/; + else if(MzBrowser.ie) var re = /MSIE( )(\d+(\.\d+)?)/; + else if(MzBrowser.opera) var re = /Opera(\s|\/)(\d+(\.\d+)?)/; + else if(MzBrowser.netscape) var re = /Netscape(\s|\/)(\d+(\.\d+)?)/; + else if(MzBrowser.safari) var re = /Version(\/)(\d+(\.\d+)?)/; + else if(MzBrowser.mozilla) var re = /rv(\:)(\d+(\.\d+)?)/; + if("undefined"!=typeof(re)&&re.test(ua)) + MzBrowser.version = parseFloat(RegExp.$2); +})(); + + +function initWs(callback) { + $(".layout_tile, .layout_table tbody").empty(); + + jQuery.ajax({ + type : "POST", + url : "./jd?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_ws_data", + success : function(msg) { + var data = msg.data.result; + var count = msg.data.size; + var using_tile_html = ""; + var using_list_html = ""; + var stop_tile_html = ""; + var stop_list_html = ""; + var using_count = 0; + var stop_count = 0; + + if (count > 0) { + $("#no-pal").hide(); + $("#using_title").show(); + $("#stop_title").show(); + for(var i = 0; i < data.length; i++) { + var obj = data[i]; + if (obj.wsState == "0") { + using_count++; + var descSubstring = obj.wsDesc.length > 120 ? obj.wsDesc.substring(0, 119) + "..." : obj.wsDesc; + /* + using_tile_html += '
                                                ' + + '
                                                ' + + '
                                                ' + obj.wsName + '
                                                ' + + '
                                                ' + obj.orgTypeName + '(范围)
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + obj.wsName + '
                                                ' + + '

                                                ' + obj.wsDesc + '

                                                ' + + '
                                                ' + + '
                                                ' + + ' ' + + '
                                                '; + */ + using_tile_html += '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + obj.wsName + '
                                                ' + + '
                                                ' + + '
                                                ' + + ' ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + obj.orgTypeName + '(范围)
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + obj.wsName + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '' + + '
                                                '; + + + using_list_html += '' + + ' ' + obj.wsName + '' + + '
                                                ' + obj.wsDesc + '
                                                ' + + ' ' + obj.orgTypeName + '' + + ' ' + obj.tcType + '' + + ' ' + + ' ' + + ' ' + + ' ' + + ''; + } else { + stop_count++; + /* + stop_tile_html += '
                                                ' + + '
                                                ' + + '
                                                ' + obj.wsName + '
                                                ' + + '
                                                ' + obj.orgTypeName + '(范围)
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + ' ' + + '
                                                '; + */ + stop_tile_html += '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + obj.wsName + '
                                                ' + + '
                                                ' + + '
                                                ' + + ' ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + obj.orgTypeName + '(范围)
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '
                                                ' + + '' + + '
                                                '; + + stop_list_html += '' + + ' ' + obj.wsName + '' + + '
                                                ' + obj.wsDesc + '
                                                ' + + ' ' + obj.orgTypeName + '' + + ' ' + obj.tcType + '' + + ' ' + + ' ' + + ' ' + + ' ' + + ''; + } + } + } else { + $("#no-pal").show(); + $("#using_title").hide(); + $("#stop_title").hide(); + } + + $("#using_tile").html(using_tile_html); + $("#using_count").html(using_count); + $("#stop_tile").html(stop_tile_html); + $("#stop_count").html(stop_count); + $("#using_table tbody").html(using_list_html); + $("#stop_table tbody").html(stop_list_html); + + var width = $("#using_table").width(); + $("div[widthPercent]").each(function(){ + var _$this = $(this); + var percent = parseInt(_$this.attr("widthPercent")); + _$this.css({"width": width * percent/100}); + }); + + $(".layout_tile_content_hover .description").each(function(i){ + var divH = $(this).height(); + var $p = $("p", $(this)).eq(0); + while ($p.outerHeight() > divH) { + $p.text($p.text().replace(/(\s)*([a-zA-Z0-9]+|\W)(\.\.\.)?$/, "...")); + }; + }); + + // //初始化事件 + initEvent(); + + if (callback) { + callback(); + } + } + }); +} +function initEvent() { + $(".layout_tile_div .pal_down").unbind("click").bind("click", function(event){ + var uuid = $(this).attr("uuid"); + $(".layout_tile_div:not(#" + uuid + ")").find(".layout_tile_edit").hide(); + var editObj = $(this).parents(".layout_tile_div").find(".layout_tile_edit"); + if (editObj && editObj.is(":visible")) { + editObj.hide(); + } else if (editObj && editObj.is(":hidden")) { + editObj.show(); + } + event.stopPropagation(); + }); + + //点击打开资产库详细信息页面 + $(".layout_tile_div, .layout_table tbody tr").on('click', function() { + var wsuuid = $(this).attr("wsuuid"); + var name = $(this).attr("wsName"); + var state = $(this).attr("state"); + if(state=="1"){return ;} + // var header = name + ""; + var header = ''; + parent.setHeadAndIframe("./w?sid=" + $("#sid").val() + "&cmd=com.actionsoft.apps.coe.pal_main_page&wsuuid=" + wsuuid, header, true); + }); + + $("span[id$=edit], img[id$=edit]").bind("click", function(event){ + var wsId = $(this).attr("wsId"); + var wsuuid = $("#" + wsId).attr("wsuuid"); + openCreateDialog(wsuuid); + $(".layout_tile_edit").hide(); + event.stopPropagation(); + }); + + $("span[id$=stop], img[id$=stop]").bind("click", function(event){ + var wsId = $(this).attr("wsId"); + var wsuuid = $("#" + wsId).attr("wsuuid"); + stopCoeWorkSpace(wsuuid, 1); + $(".layout_tile_edit").hide(); + event.stopPropagation(); + }); + + $("span[id$=start], img[id$=start]").bind("click", function(event){ + var wsId = $(this).attr("wsId"); + var wsuuid = $("#" + wsId).attr("wsuuid"); + stopCoeWorkSpace(wsuuid, 0); + $(".layout_tile_edit").hide(); + event.stopPropagation(); + }); + + $("span[id$=del], img[id$=del]").bind("click", function(event){ + var wsId = $(this).attr("wsId"); + var wsuuid = $("#" + wsId).attr("wsuuid"); + delCoeWorkSpace(wsuuid); + $(".layout_tile_edit").hide(); + event.stopPropagation(); + }); +} + +// 打开新建或编辑对话框 +function openCreateDialog(id) { + if($("#awsui_tooltip")) { + parent.closeGuide(0); + } + var t = 新建; + if (id == undefined || id == "0") { + id = 0; + } else { + t = 修改; + } + + var title = t + 流程资产; + var sid = $("#sid").val(); + var url = "./w?sid=" + sid + "&cmd=com.actionsoft.apps.coe.pal_ws_create&id=" + id; + var state = 0; + var options = { + buttons : [{ + text : '确定', + cls : "blue", + handler : function() { + state = 1; + window.top.getAwsDialogWindow().saveCoeWorkspace(); + } + }, { + text : '关闭', + handler : function() { + state = 0; + window.top.closeAwsDialog(); + } + }], + onClose: function(){ + if (state == 0) { + parent.showGuide(0); + } + } + }; + window.top.openAwsDialog(url, title, 800, 360, options); + if (id != 0) { + window.top.$("#dialog-normal div.dialog-button-wrap div.dlg-button").prepend("
                                                ID:"+ id +"
                                                "); + } + +} + +//打开导入对话框 +function openImportDialog() { + var title = "导入流程资产"; + var sid = $("#sid").val(); + var url = "./w?sid=" + sid + "&cmd=com.actionsoft.apps.coe.pal_ws_import"; + var state = 0; + var options = { + buttons : [{ + text : '确定', + cls : "blue", + handler : function() { + this.disabled = true; + state = 1; + window.top.getAwsDialogWindow().importCoeWorkspace(); + } + }, { + text : '关闭', + handler : function() { + state = 0; + window.top.closeAwsDialog(); + } + }], + onClose: function(){ + if (state == 0) { + parent.showGuide(0); + } + } + }; + window.top.openAwsDialog(url, title, 500, 310, options); +} + +//打开关联对话框 +function openCorrelateDialog(){ + if($('#using_count').text() == 0) { + $.simpleAlert('无启用中的资产库,无法关联', 'info', 2000, {model:true}); + } else { + openCorrelateDialog2(); + } +} + +//打开关联对话框 +function openCorrelateDialog2(){ + var title = "关联AWS PaaS平台的流程"; + var sid = $('#sid').val(); + var url = "./w?sid=" + sid + "&cmd=com.actionsoft.apps.coe.pal_processlevel_correlate"; + var state = 0; + var options = { + buttons:[ + {text:'确定',cls:"blue",handler:function(){ + state = 1; + window.top.getAwsDialogWindow().saveCoeCorrelate(); + }}, + {text:'关闭',handler:function(){ + state = 0; + window.top.closeAwsDialog(); + }} + ], + onClose:function(){ + if(state == 0){ + parent.showGuide(0); + } + } + }; + window.top.openAwsDialog(url, title, 800, 400, options); +} + +// 流程版本管理 +function versionsManage(id, sid, wfUUID) { + + if (id == undefined || id == "0") { + id = 0; + } + var title = "资产库版本管理"; + $('#flowVersion').attr( + 'src', + "./w?sid=" + sid + "&cmd=com.actionsoft.apps.coe.pal_ws_version_manage_page&versionId=" + id + + "&wsUsedUUID=" + wfUUID); + var ifr = $('#contentVersionDiv').html(); + window.top.$("#dialog-normal").css({ + width : '800px', + height : '330px' + }); + window.top.$("#dialog-normal").empty().append(ifr); + window.top.$("#dialog-normal").attr("title", title); + window.top.$("#dialog-normal").dialog({buttons:[ + {text:'关闭',handler:function(){window.top.$("#dialog-normal").dialog('close');}} + ]}); + +} + +// 刷新data +function reloadData() { + initWs(); +} +// 地址薄 +function openmailtree(form, mail_target, mycmd) { + form.cmd.value = mycmd; + form.mail_target.value = mail_target; + form.groupstylevalue.value = ''; + window.open( + '../commons/wait.htm', + 'openmailtree', + 'left=50,top=50,width=700,height=400,location=no,menubar=no,toolbar=no,status=no,directories=no,scrollbars=no,resizable=no'); + form.target = "openmailtree"; + form.submit(); + return false; +} +// 停用流程资产 +function stopCoeWorkSpace(id, state) { + var str = 启用; + if (state == 1) { + str = 停用; + } + var options = { + title : "提示", + content : "确定" + str + 该流程资产 + "吗?", + model : false, + onConfirm : function() { + var params = { + id : id, + state : state + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_ws_stoporopen", + data : params, + success : function(msg) { + var data = eval('(' + msg + ')').msg; + if (data == "1") { + // parent.parent.reloadChannel(); + reloadData(); + } else { + window.top.$.simpleAlert(变更状态失败请稍后重试); + } + // parent.document.getElementById("appviewport2-right-content").src=parent.document.getElementById("appviewport2-right-content").src; + // document.getElementById("look_content_iframe").src=document.getElementById("look_content_iframe").src; + } + }); + } + }; + window.top.$.confirm(options); + +} + +// 删除流程资产 +function delCoeWorkSpace(id) { + + var options = { + title : "提示", + content :"删除流程资产会删除该流程资产的备份文件,确定删除该流程资产吗?", + model : false, + onConfirm : function() { + var params = { + id : id + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_ws_remove&versionId=" + + id, + data : params, + success : function(msg) { + var data = eval('(' + msg + ')').msg; + if (data == "1") { + window.top.$.simpleAlert(删除成功, "ok", 2000); + reloadData(); + jQuery("#look_content_iframe").attr("src", ""); + } else if (data == "-1") { + window.top.$.simpleAlert(删除失败请稍后重试, "info", 2000); + } else { + window.top.$.simpleAlert(data); + } + } + }); + } + }; + window.top.$.confirm(options); +} + +function expData(id) { + + var clientType = "other"; + if (window.top.isIpad()) { + clientType = "ipad"; + } + var params = { + id : id, + clientType : clientType + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_ws_exp", + data : params, + success : function(msg) { + if (window.top.isIpad() || window.top.isAndroid() + || window.top.isiPhone()) { + downFile(encodeURI(msg)); + } else { + jQuery("#downloadiframe").attr("src", encodeURI(msg)); + } + + } + }); +} +function downFile(src) { + var newWin = getNewTarget(); + // '../commons/wait.htm' + window.open(src, newWin); + + return false; +} +function getNewTarget() { + var viewdate = new Date(); + var newWin = viewdate.getTime(); + return "iWork_" + newWin; +} +// 上传 +function openUploadDialog() { + var sessionId = document.getElementsByName('sid')[0].value; + var filter = '[["*.epa;","*.epa;"]]'; + FlexWindow.get("CC_Flex_File", { + width : 550, + height : 350 + }).show({ + sid : sessionId, + flag1 : 'Data', + flag2 : 'coeData', + rootDir : "tmp", + maxFileSize : 2 * 1024 * 1024, + maxUpLength : 1, + filesToFilter : filter + }); + return false; +} + +function uploadCallback(name, type, creator, creationDate, modificationDate, + toUploadLength, index) { + var params = { + name : name + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_ws_imp", + data : params, + success : function(msg) { + if (msg == "1") { + window.top.$.simpleAlert(导入空间成功, "ok", 2000); + reloadData(); + } else if (msg.indexOf("-1") > -1) { + window.top.$.simpleAlert(导入空间失败请查看错误日志, "info", 2000); + reloadData(); + } else { + window.top.$.simpleAlert(msg); + reloadData(); + } + } + }); +} + +// 打开流程分级 +function openProcessLevel(wsId, type) { + var sid = jQuery("#sid").val(); + var url = encodeURI("./w?sid=" + sid + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_portal_page&wsId=" + wsId + "&type=" + type); + parent.jQuery("#coeContent").attr("src", url); +} +function getCookie(cookieName) { + if (document.cookie != '') { + var cookieNames = document.cookie.split(';'); + for (i = 0; i < cookieNames.length; i++) { + if (cookieNames[i].indexOf(cookieName) > -1) { + return unescape(cookieNames[i].split('=')[1]); + } + } + } +} +/** + * 设置Cookie + */ +function setCookie(cookieName, cookieValue, expires, path, domain, secure) { + var Days = 30; + var exp = new Date(); + exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000); + document.cookie = cookieName + "=" + escape(cookieValue) + ";expires=" + + exp.toGMTString() + ('https:' == document.location.protocol ? ";secure" : ""); +} + +function initLayoutBtn() { + $(".icons-group span").on("click.open", function() { + var $self = $(this), TILECONST = "icon-tiles", doEvent, isCurrent = $self + .attr("class").indexOf("current") != -1, isTile = $self + .children("i").attr("class") == TILECONST; + if (isCurrent) { + return; + } + doEvent = isTile ? removeEvent : addEvent; + doEvent(); + }); +} + +function addEvent() { + $(".main>ul>li").on("click.list", myfun = function() { + window.open("./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_home_page"); + }); +} +function removeEvent() { + $(".main>ul>li").off("click.list"); +} +//取消冒泡 +function cancelEventBubble(e) { + e.stopPropagation(); +} + +function showTooltip(objId, setting) { + $("#" + objId).tooltip(setting); + $("#awsui_tooltip").css({"padding": 0}); +} +function closeTooltip(objId) { + $("#" + objId).tooltip("close"); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.ws.versionmanage.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.ws.versionmanage.js new file mode 100644 index 00000000..bc0695b7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.pal.ws.versionmanage.js @@ -0,0 +1,128 @@ +//创建新版本 +function createNewVersion(selectVersionId){ + //var selectVersionId = $("input[type='radio']:checked").val(); + var maxVersionNo = $("input[name=maxVersionNo]").val(); + var wsVersionId = $("input[name=wsVersionId]").val(); + var wsUsedUUID = $("input[name=wsUsedUUID]").val(); + + if(selectVersionId==undefined){ + $.simpleAlert("请选中一个源版本", "info", 2000); + return false; + } + $("#wsuuid").val(selectVersionId); + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(sid) + "&cmd=com.actionsoft.apps.coe.pal_ws_version_save", + data : "wsuuid=" + selectVersionId + "&maxVersionNo=" + maxVersionNo + "&wsVersionId=" + wsVersionId + "&wsUsedUUID=" + wsUsedUUID, + success : function(data) { + if(data=="false"){ + $.simpleAlert(提交的数据有误, "warning", 2000); + }else{ + $.simpleAlert(创建成功, "ok", 2000); + $("#innerTable").html(data); + var checkObj = null; + $("input[type='radio']").each(function (){ + if($(this).attr("isuse")=="Y"){ + $(this).attr("checked","checked");; + } + }); + } + } + }); +} +//使用选中版本 +function useSelectedVersion(sid, selectVersionId) { + var wsVersionId = $("#wsVersionId").val(); + // var selectVersionId = $("input[type='radio']:checked").val(); + // alert($("input[type='radio']:checked").val()); + var wsUsedUUID = $("input[name=wsUsedUUID]").val(); + if (selectVersionId == undefined) { + $.simpleAlert(请选中一个要使用的版本, "info", 2000); + return false; + } + var options = { + title : "提示", + content : 确认使用选中的版本吗 + "?", + model : false, + onConfirm : function() { + $("#wsSelectVersionId").val(selectVersionId); + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_ws_version_used", + data : "wsUsedUUID=" + wsVersionId + + "&wsSelectVersionId=" + selectVersionId, + success : function(msg) { + if (msg == "true") { + $.simpleAlert(操作成功, "info", 2000); + // 刷新当前页面 + parent.document + .getElementById("appviewport2-right-content").src = parent.document + .getElementById("appviewport2-right-content").src; + // 关闭弹出框 + window.top.closeAwsDialog(); + } else if (msg == "false") { + $.simpleAlert(提交的数据有误, "info", 2000); + } else { + $.simpleAlert(msg, "warning", 4000); + } + } + }); + } + }; + window.top.$.confirm(options); +} + + +//删除选中的记录 +function deleteWsVersion(id,versionId){ + var wsUsedUUID = $("input[name=wsUsedUUID]").val(); + if (id == wsUsedUUID) { + $.simpleAlert(无法删除正在使用的版本, "warning", 2000); + return false; + } + var options = { + title : "提示", + content:确认删除选中的版本吗 + "?", + model:false, + onConfirm: function(){ + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_ws_version_del", + data : "wsUUID=" + id + "&versionId=" + versionId, + success : function(str) { + var msg = eval("(" + str + ")"); + if (msg.flag == true) { + $.simpleAlert(删除成功, "info", 2000); + $("#maxVersionNo").val(msg.maxVersion); + // window.top.$("#dialog-normal").dialog('close'); + // window.top.closeAwsDialog(); + $("#tr_" + id).remove(); + $(window).trigger('resize'); + } else if (msg.flag == false) { + $.simpleAlert(提交的数据有误, "info", 2000); + } else { + $.simpleAlert(str, "warning", 4000); + } + } + }); + } + }; + window.top.$.confirm(options); +} + +//使多选动作变成单选 +function changeSelect(obj){ + /** + * var aa = document.forms[0].version_checkbox; + for (var i = 0; i < aa.length; i++) { + aa[i].checked = false; + } + obj.checked = true; + * @type + */ + +} + + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.plugs.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.plugs.js new file mode 100644 index 00000000..993ae9aa --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.plugs.js @@ -0,0 +1,100 @@ +function getMaxZIndex(){ + var max = jQuery.data(document.body,"coe_zIndex_max_count"); + if(max == undefined){ + max = 2000; + } + //获得最大zindex值,取出一个,本身+1 + jQuery.data(document.body,"coe_zIndex_max_count",max+1); + return max; +} + +(function($) { + + + + /** 载入 + * 【可以考虑优化,如果存在仅重新定位】 + */ + $.fn.reload = function(options){ + var reloadObj = $(this); + if(typeof options == "string"){ + //关闭 + if(options == "close"){ + reloadObj.mask("close"); + reloadObj.find(".coe_reload_div").remove(); + } + }else{ + var option = $.extend({},$.fn.reload.defaults,options); + var reloadDiv = $("
                                                "); + var reloadImg = $(""); + reloadImg.appendTo(reloadDiv); + reloadDiv.css("position","absolute"); + reloadDiv.appendTo(reloadObj); + if(option.mask){ + reloadObj.mask(); + } + if(option.valign == "middle"){ + reloadDiv.css("top",( reloadObj.height() - reloadDiv.height()) / 2); + } else if (option.valign == "bottom"){ + reloadDiv.css("top",reloadObj.height() - reloadDiv.height()); + } else { + reloadDiv.css("top",reloadObj.offset().top); + } + if(option.align == "left"){ + reloadDiv.css("left","0"); + } else if (option.align == "right"){ + reloadDiv.css("right","0"); + } else { + reloadObj.width(); + reloadDiv.css("left",reloadObj.offset().left + (reloadObj.width() - reloadDiv.width()) / 2); + } + reloadDiv.css("z-index",getMaxZIndex()); + + } + } + + $.fn.reload.defaults = { + mask:true, + valign:'top', + align:'center', + imgSrc:'../aws_img/waiting.gif' + } + + /** 遮罩 + * + */ + $.fn.mask = function(options){ + var maskObj = $(this); + if(typeof options == "string"){ + //关闭 + if(options == "close"){ + maskObj.find(".coe_mask_div").remove(); + } + } else { + var maskDiv = $("
                                                "); + maskDiv.css("width",maskObj.width()); + maskDiv.css("height",maskObj.height()); + + maskDiv.css("filter","alpha(opacity=80)"); + maskDiv.css("-moz-opacity","0.8"); + maskDiv.css("-khtml-opacity","0.8"); + maskDiv.css("opacity","0.8"); + + maskDiv.css("position","absolute"); + maskDiv.css("background-color","#CCCCCC"); + maskDiv.css("top",maskObj.offset().top + parseInt(maskObj.css("border-top-width"))); + maskDiv.css("left",maskObj.offset().left + parseInt(maskObj.css("border-left-width"))); + + maskDiv.css("z-index",getMaxZIndex()); + maskDiv.appendTo(maskObj); + } + } + + $.fn.mask.defaults = { + + } + + +})(jQuery); + + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.public.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.public.js new file mode 100644 index 00000000..915d2ca5 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.public.js @@ -0,0 +1,563 @@ +var sid; +var coePortal; +var isUpdate=false;//用于判断打开窗口关闭的时候,是否需要刷新页面 +$(function(){ + sid = $("#sid").val(); + coePortal = "default"; + + init(); + + //初始化dialog + // $("#coePublicDialogId").fancybox({ + // 'width':950, + // 'type': 'iframe', + // 'scrolling':'no', + // 'onComplete' : function(){ + // if($('#fancybox-frame').attr('src').indexOf('COE_TEAM_PROCESS_CREATE_TEAM_HTML')>0){ + // parent.$("#fancybox-content").height(300); + + // }else if($('#fancybox-frame').attr('src').indexOf('COE_TEAM_DIMENSION_MAIN')>0){ + // parent.$("#fancybox-content").height(500); + + // }else if($('#fancybox-frame').attr('src').indexOf('COE_SOCIAL_PROCESSINFO')>0){ + // parent.$("#fancybox-content").height(450); + + // }else{ + // parent.$("#fancybox-content").height(500); + // } + // $('#fancybox-close').click(function(){ + // reloadSilder(); + // parent.$.fancybox.close(); + // }); + // $.fancybox.center(); + + // } + + // }); + try{ + var titlewidth=$('.container').find('.brand').width()+40; + $('.nav_slider').find('.nav_slider_title').width(titlewidth); + }catch(e){} +}); + +//小组管理 新建小组的打开方法 +function openPublicdialog(title,cmd,params){ + //var url = "./w?sid=" + window.top.getSid() + "&cmd=" + cmd + "&condition=" + JSON.stringify(params).replace(/"/g, "'"); + var url = "./w?sid=" + window.top.getSid() + "&cmd=" + cmd + "&condition=" + JSON.stringify(params); + url=encodeURI(url); + openAwsDialog(url,title,960,370); +} +//社交流打开窗口方法 +function openPublicdialogUrl(title,cmd,params){ + var url = "./w?sid=" + window.top.getSid() + "&cmd=" + cmd +params; + url=encodeURI(url); + if(window.top.$("#dialog-normal").css("display")!="none"){//是否打开了窗口 + //$.reload('showOpen01',url); + //window.top.$("#dialog-normal").html("" + $('div[id='+divId+']').parent(".panel").show(); + $('div[id='+divId+']').html(jQuery(iframeSrc)); +//} +} + +function resumeProjectViewTabs(){ + jQuery('#dimensionProcessTabs').find("span.project-view-tabs-downarrow").remove(); + jQuery('#dimensionProcessTabs').find("li a").unbind('mouseenter mouseleave'); +} +/* 初始化分析报告 显示 */ +function initAnalysisReportTag(){ + jQuery('#dimensionProcessTabs').find("ul li.tabs-selected a").append("  "); + jQuery('#dimensionProcessTabs').find("ul li.tabs-selected a").hover(function(){ + //重新定位 + var offset = jQuery(this).offset(); + var width = jQuery(this).width(); + var height = jQuery(this).height(); + jQuery("#processTabsDivId").css("left",offset.left).css("top",offset.top + height - 4); + //显示div + jQuery("#processTabsDivId").show(); + },function(){ + //隐藏div + jQuery("#processTabsDivId").hide(); + }); + + jQuery("#processTabsDivId").hover(function(){ + jQuery(this).show(); + },function(){ + jQuery(this).hide(); + }); + + + + //初始化再次点击回来 + //jQuery("#processTabsDivId").find(".divTdLeaf").removeClass("divTdLeaf-click"); + //jQuery("#processTabsDivId").find("td[openid=a1]").addClass("divTdLeaf-click"); +} +/* 初始化分析报告 事件 */ +var processTdParentVal = ""; +function initAnalysisReportEvent(){ + + //记录点击事件,因为点击事件已经绑定改变内容,所有采用mouseup + jQuery("#processTabsDivId").find(".divTdLeaf").each(function(){ + jQuery(this).unbind("mouseup").bind("mouseup",function(){ + jQuery("#processTabsDivId").find(".divTdLeaf").removeClass("divTdLeaf-click"); + jQuery(this).addClass("divTdLeaf-click"); + }); + }); + + jQuery("#processTabsDivId").find(".divTable td").each(function(){ + var tdClass = jQuery(this).attr("class"); + if( tdClass == "divTdParent" ){ + processTdParentVal = jQuery(this).text(); + } else { + var leafVal = jQuery(this).text().split(" "); + var leaf = leafVal[leafVal.length - 1]; + jQuery(this).unbind("click").bind("click",function(){ + var kpitype = jQuery(this).attr("kpitype"); + if(!kpitype){ + kpitype = ""; + } + var kpi = {"kpitype":kpitype,"opentype":jQuery(this).attr("openid")}; + var condition = getAnalysisReportInitUrl(); + jQuery.extend(condition, kpi);//为kpitype重新赋值 + var url = encodeURI('./w?sid='+sid+'&cmd=COE_TEAM_BPA_ANALYSIS_PROCESS_MAIN&condition=' + JSON.stringify( condition)); + jQuery("#processTabsDivId").hide(); + jQuery("iframe[name=analysisReport_Frame]").attr("src","../commons/wait.htm"); + setTimeout(function(){ + jQuery("iframe[name=analysisReport_Frame]").attr("src",url); + },200); + }); + } + }); + processTdParentVal = ""; +} +//重新绘制Tabs +function reDrawProcessTabsDiv(){ + var openid = jQuery("#processTabsDivId").find("td.divTdLeaf-click").attr("openid"); + var kpitype = jQuery("#processTabsDivId").find("td.divTdLeaf-click").attr("kpitype"); + if(!openid){ + openid = "a1"; + } + if(!kpitype){ + kpitype = ""; + } + var condition = { + "processUUID":processUUID, + "dimensionUUID":dimensionUUID, + "projectUUID":projectUUID, + "openid":openid, + "kpitype":kpitype + }; + jQuery.ajax({ + type: "POST", + url: encodeURI("./w?sid="+sid+"&cmd=COE_TEAM_BPA_VIEW_PROCESS_REDRAW_TABS"), + data: "condition=" + JSON.stringify(condition), + success: function(msg){ + //jQuery(".processTabsDiv-sub").html("
                                                "+msg+"
                                                "); + //initAnalysisReportTag(); + initAnalysisReportEvent(); + } + }); + + //initAnalysisReportEvent(); +} +/*获得分析报告初始化连接*/ +function getAnalysisReportInitUrl(){ + return { + "processUUID":processUUID, + "dimensionUUID":dimensionUUID, + "projectUUID":projectUUID, + "opentype":"a1", + "ieVersion":ieVersion, + "kpitype":"" + }; +} +/*获得分析报告初始化连接*/ +function getAlarmInitUrl(){ + return { + "processUUID":processUUID, + "dimensionUUID":dimensionUUID, + "projectUUID":projectUUID, + "opentype":"a1" + }; +} + +/* 执行绑定事件,作用:刷新 */ +function executeAnalysisReportEvent(openid){ + jQuery("td[openid="+openid+"]").click(); +} + +/*初始化所有X显示*/ +function initDimension(){ + jQuery(".dimension-tags-ul .light-green .rightDiv > a").hide(); + jQuery(".dimension-tags-ul .light-green").hover(function(){ + jQuery(this).find(".rightDiv > a").show(); + },function(){ + jQuery(this).find(".rightDiv > a").hide(); + }); +} +/*添加维度 弹出层*/ +function addDimensionDialog(){ + +} + +function onlyRemoveAddLi(){ + if(addDimensionLiObj){ + addDimensionLiObj.fadeOut(300, function() { + $(this).remove(); + addDimensionLiObj = null; + }); + } +} +/*添加维度 li*/ +var addDimensionLiObj ; +function addDimensionLi(){ + + var _purpleLength = jQuery(".light-purple").length; + if(_purpleLength < 1) { + var _left = jQuery("
                                                "); + var _right = jQuery("
                                                "); + var _content = jQuery("
                                                ").append(_left).append(_right); + var _li = jQuery("
                                              • ").append(_content); + jQuery(".dimension-tags-ul").append(_li); + addDimensionLiObj = _li; + + jQuery(".dimension-tags-ul .light-purple .tickDiv > a").hide().unbind("click").bind("click",addDimensionHover); + jQuery(".dimension-tags-ul .light-purple").hover(function(){ + jQuery(this).find(".tickDiv > a").show(); + },function(){ + jQuery(this).find(".tickDiv > a").hide(); + }); + + jQuery("#addDimensionInputId").combotree({ + url:encodeURI("./w?sid=" + sid + "&cmd=COE_TEAM_BPA_VIEW_DIMENSION_TYPE&processUUID="+processUUID+"&time=" + new Date()), + checkbox: true, + multiple:true, + cascadeCheck:false, + onlyLeafCheck:true, + editable:true, + panelHeight:100, + onbeforeClick:function(node){ + if(node){ + var is = jQuery(this).tree("isLeaf", node.target ); + if(is){ + //jQuery("#addDimensionInputId").attr("nodeId",node.id); + jQuery("#addDimensionInputId").data("nodeId",node.id); + return true; + } else { + //折叠 + jQuery(this).tree("toggle",node.target); + return false; + } + } else { + return false; + } + },onClick:function(node){ + jQuery("#addDimensionInputId").data("nodeText",node.text); + jQuery(".dimension-tags-ul .light-purple .tickDiv > a").show(); + },onChange:function(newValue , oldValue){ + /*//重新调整高度 + resizeDimensionProcessTabsTools(); + //清空 + jQuery("#dimensionListTabsToolManage").data("addPanelHeight","");*/ + },onShowPanel:function(){ + //重新设置高度,例如,max:200;auto + //jQuery("#addDimensionInputId").combo("panel").panel("resize",{height:"100"}); + var aph = jQuery("#dimensionListTabsToolManage").data("addPanelHeight"); + if( !aph ) { + var panelHeight = $.data(this,"combo").options.panelHeight; + var height = jQuery("#dimensionListTabsToolManage").height(); + jQuery("#dimensionListTabsToolManage").height(panelHeight + height); + jQuery("#dimensionListTabsToolManage").data("addPanelHeight","add"); + } + jQuery("#addDimensionInputId").combo("panel").show(); + },onHidePanel:function(){ + + } + }); + + jQuery("#addDimensionInputId").each(function(){ + return $.data(this,"combo").combo.find(".combo-text").unbind("change").bind("change",function(){ + //如果内容为输入,则将次维度加入默认分组中... + jQuery("#addDimensionInputId").data("nodeNewText",jQuery(this).val()); + }).bind("keyup",function(){ + jQuery(".dimension-tags-ul .light-purple .tickDiv > a").show(); + }); + }); + + function change(){ + + } + + function hasExist(oldValue){ + var exist = false; + jQuery(".dimension-tags-ul li").each(function(){ + var _id = jQuery(this).attr("id"); + if(oldValue == _id){ + exist = true; + return; + } + }); + return exist; + } + } +} + +function loadCss(){ + jQuery("#waitLoad").hide(); + jQuery("#mainInfo").show(); +} + +/*添加*/ +function addDimensionHover(){ + var nodeId = jQuery("#addDimensionInputId").data("nodeId"); + var nodeText = jQuery("#addDimensionInputId").data("nodeText"); + var nodeNewText = jQuery("#addDimensionInputId").data("nodeNewText"); //存在,说明修改过 + var currentText ; + var _data = ""; + if(nodeNewText){ + if(nodeNewText.length){ + if(nodeNewText == nodeText){ + _data = "&dimensionUUID=" + nodeId + "&dimensionName=" + nodeText; + currentText = nodeText; + } else { + _data = "&dimensionUUID=&dimensionName=" + nodeNewText; + currentText = nodeNewText; + } + } else { + window.top.$.simpleAlert(请输入或选择所需的维度名称); + return ; + } + } else { + if(nodeId && nodeId.length > 0){ + _data = "&dimensionUUID=" + nodeId + "&dimensionName=" + nodeText; + currentText = nodeText; + } else { + window.top.$.simpleAlert(请输入或选择所需的维度名称); + return ; + } + } + //添加li + var obj = this; + jQuery(obj).parents("li").find(".leftDiv").html(数据添加中); + jQuery(".dimension-tags-ul .light-purple .tickDiv > a").hide(); + $.ajax({ + type: "POST", + url: encodeURI("./w?sid=" + sid + "&cmd=COE_TEAM_BPA_VIEW_PROCESS_DIMENSION_ADDDIMENSION"), + data: encodeURI("processUUID=" + processUUID + _data), + success: function(msg){ + if(msg != "-1"){ + jQuery(obj).parents("li").before(msg); + initDimension(); + onlyRemoveAddLi(); + setTimeout(function(){ + //添加到导航 + jQuery(".reportViewTabsTools").find(".text").append(" , " + currentText); + addDimensionLi(); //重新添加 + resizeDimensionProcessTabsTools(); + },400); + } + } + }); + + +} + +function deleteDimensionProcess(obj,processUUID,dimensionUUID){ + //jQuery("div[region='center']").hide(); + //var msg = 您确定从+jQuery(obj).parent().prev().attr("title")+维度中移除当前流程吗; + //var v = $.messager.confirm(提示,msg,function(b){ + //jQuery("div[region='center']").show(); + //if(b){ + $(obj).parents("li").fadeOut(200, function() { + $(this).remove(); + }); + $.ajax({ + type: "POST", + url: encodeURI("./w?sid=" + sid + "&cmd=COE_TEAM_BPA_VIEW_PROCESS_DIMENSION_REMOVE"), + data: "processUUID=" + processUUID + "&dimensionUUID=" + dimensionUUID, + success: function(msg){ + //重新绘制导航 + //$(obj).remove(); + setTimeout(function(){ + jQuery(".reportViewTabsTools").find(".text").html(""); + jQuery("#dimensionListTabsToolManage").find("li").each(function(i){ + var thisId = jQuery(this).attr("id"); + if(thisId){ + if(i==0){ + jQuery(".reportViewTabsTools").find(".text").append(jQuery(this).find(".leftDiv").html()); + } else { + jQuery(".reportViewTabsTools").find(".text").append(" , " + jQuery(this).find(".leftDiv").html()); + } + } + }); + resizeDimensionProcessTabsTools(); + + jQuery("#addDimensionInputId").combotree({ + url:encodeURI("./w?sid=" + sid + "&cmd=COE_TEAM_BPA_VIEW_DIMENSION_TYPE&processUUID="+processUUID+"&time=" + new Date()) + }); + },220); + } + }); + //} + //}); +} + +function getWindowHeight() { + return $(window).height(); +} +function getWindowWidth() { +return $(window).width(); +} +function windowResize() { + var width = getWindowWidth(); + var height = getWindowHeight(); + $('form#frmMain').width(width); + $('form#frmMain').height(height); + $('form#frmMain').layout(); + setWidthHeigth(); +} +function setWidthHeigth() +{ + var width="100%"; + var maindiv=$('#dimensionProcessTabs'); + maindiv.css("width",width); + var divs=$('#dimensionProcessTabs div'); + divs.each + ( + function() + { + var obj=$(this); + if(obj.attr("class")=="tabs-header tabs-header-noborder projectViewTabsHeader") + { + obj.css("width",width); + } + if(obj.attr("class")=="tabs-wrap") + { + obj.css("width",width); + } + if(obj.attr("class")=="tabs-panels tabs-panels-noborder") + { + obj.css("width",width); + } + if(obj.attr("class")=="panel") + { + obj.css("width",width); + } + if(obj.attr("class")=="panel-body panel-body-noheader panel-body-noborder") + { + obj.css("width",width); + } + } + ) + //解决谷歌兼容性问题 + jQuery("#processTabsDivId").show(); + jQuery("#processTabsDivId").hide(); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.team.welcome.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.team.welcome.js new file mode 100644 index 00000000..d0808175 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.team.welcome.js @@ -0,0 +1,70 @@ +jQuery(function(){ + //$(".coe_team_user_item_img").live("click",function(){ + // parent.openUserInfoDlg($(this).attr('userid')); + //}); + //$(".coe_team_user_item_img").siblings().bind("click",function(){ + // parent.openUserInfoDlg($(this).siblings("img:first").attr('userid')); + //}); + //jQuery(".coe_team_menu").each(function(){ + // jQuery(this).toggle(function(){ + // jQuery(this).find("img").attr("src","../aws_img/arrow_right_gray.gif"); + // jQuery(this).next().hide(); + // },function(){ + // jQuery(this).find("img").attr("src","../aws_img/arrow_down_gray.gif"); + // jQuery(this).next().show(); + // }); + //}); + for(var i=1;i<=4;i++){ + var data = eval(jQuery("#statisticsContentFlotPie_"+i).html()); + if(data && data.length > 0 ){ + statisticsFlotPie('statisticsContentFlotPie_'+i,data); + } + var dataAlarm = eval(jQuery("#statisticsAlarmFlotPie_"+i).html()); + if(dataAlarm && dataAlarm.length > 0 ){ + statisticsFlotPie('statisticsAlarmFlotPie_'+i,dataAlarm); + } + } + + + +}); + + +function statisticsFlotPie(div,_data){ + $.plot(jQuery("#"+div),_data, + { + series: { + pie: { + show: true, + radius: 1, + label: { + show: true, + radius: 2/3, + formatter: function(label, series){ + var per = series.percent; + if(!label){ + per = 0; + } + return '
                                                '+Math.round(per)+'%
                                                '; + }, + threshold: 0.01 + } + } + }, legend: { + show:true + } + }); + $(".legend").css("border","#fff solid 1px"); + $(".legendLabel").attr("align","left"); +} + +/*维度统计*/ +function statisticsDimensionNew(projectUUID){ + var condition={}; + condition.projectUUID=projectUUID; + //var url = encodeURI("./w?sid=" + parent.sid + "&cmd=COE_TEAM_BPA_DIMENSION_STATISTICS_MAIN&projectId="+_projectId); + var url = encodeURI("./w?sid=" + parent.sid ); + $("#coeContent",parent.document).attr("src",url+ "&cmd=COE_TEAM_PL_DETAIL_MAIN&condition="+JSON.stringify(condition)); +} + + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.teamt.analysis.diykpi.dialog.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.teamt.analysis.diykpi.dialog.js new file mode 100644 index 00000000..c0100747 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.teamt.analysis.diykpi.dialog.js @@ -0,0 +1,31 @@ +var processUUID; +var dimensionUUID; +var sid; +jQuery(function(){ + + processUUID = jQuery("#processUUID").val(); + dimensionUUID = jQuery("#dimensionUUID").val(); + sid = jQuery("input[name=sid]").val(); + + + infoAnalysisDiyKpiDialogRadio(); + +}); + +function infoAnalysisDiyKpiDialogRadio(){ + jQuery("span[name=analysisManageDiyKpiDialogRadio]").each(function(){ + var cla = jQuery(this).attr("class"); + if(cla == "analysisRadioBlack" || cla == "analysisRadioRray" || cla == "analysisRadioWhite"){ + jQuery(this).parent().unbind("click").bind("click",function(){ + var obj = jQuery(this).children(":first"); + var c = obj.attr("class"); + if(c == "analysisRadioWhite"){ + jQuery("span[name=analysisManageDiyKpiDialogRadio]").removeClass(); + jQuery("span[name=analysisManageDiyKpiDialogRadio]").addClass("analysisRadioWhite"); + obj.addClass("analysisRadioBlack"); + } + }); + } + }); +} + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.upload.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.upload.js new file mode 100644 index 00000000..bba90fa6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.upload.js @@ -0,0 +1,63 @@ +var fckInstanceName; +var upFileName; +function upPicAttach(upFileType,instanceName){ + fckInstanceName = instanceName; + var userId = document.getElementsByName('userId')[0].value; + var projectId = document.getElementsByName('projectId')[0].value; + frmMain.upFileType.value=upFileType; + var sessionId = document.getElementsByName('sid')[0].value; + var filter = '[["Images","*.jpg; *.jpeg; *.gif; *.png; *.bmp"]]'; + if(upFileType=='att'){ + filter = '[["All File","*.*"]]'; + } + FlexWindow.get("CC_Flex_File",{width:550,height:350}).show({sid:sessionId , + flag1:userId, + flag2:projectId, + rootDir:"coeHtmlEditor", + maxFileSize:2*1024*1024, + maxUpLength:1, + filesToFilter:filter + }); + + return false; +} +function uploadCallback(name,type,creator,creationDate,modificationDate,toUploadLength,index){ + upFileName = name; +} +function insertAttachToHtmlEdit(form,flag1,flag2,rootDir,httpHead){ + //window.top.$.simpleAlert( CKEDITOR.instances.teamcontent.name ); + var editor = CKEDITOR.instances.teamcontent;//FCKeditorAPI.GetInstance(fckInstanceName); + var url = document.location.href; + var s = url.indexOf("//") + 2; + httpHead = url.substring(url.indexOf('/', s), url.indexOf('workflow') - 1); + var filePath = httpHead+'/workflow/downfile.wf?flag1='+flag1+'&flag2='+flag2+'&sid='+encodeURIComponent(document.getElementsByName('sid')[0].value)+'&rootDir='+rootDir+'&filename='+encodeURIComponent(upFileName); + var oImage; + if(frmMain.upFileType.value=='img'){ + //oImage = editor.CreateElement( 'IMG' ) ; + //oImage.setAttribute( "src" , filePath ) ; + //oImage.setAttribute( "alt" , upFileName) ; + editor.insertHtml( '' ); + }else{ + //oImage = editor.CreateElement('A') ; + //oImage.setAttribute( "href" , filePath ) ; + //oImage.setAttribute( "target" , "_blank" ) ; + //oImage.innerHTML=upFileName; + editor.insertHtml( ''+upFileName+'' ); + } + //editor.InsertHTML(oImage); +} + +//解决ext upload img 在ie9上的bug +(function createContextualFragment(){ + if ((typeof Range !== "undefined") && !Range.prototype.createContextualFragment) + { + Range.prototype.createContextualFragment = function(html) + { + var frag = document.createDocumentFragment(), + div = document.createElement("div"); + frag.appendChild(div); + div.outerHTML = html; + return frag; + }; + } +})(); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.userInfo.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.userInfo.js new file mode 100644 index 00000000..5de0e534 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.userInfo.js @@ -0,0 +1,118 @@ +// $(function(){ +// $('.flowboder').live('mouseover', function() { +// $(this).css("border","#666 solid 2px"); +// $(this).find(".flowconert_buttont").css("display","block"); +// $(this).find(".flowconert_font").css("padding","5px 5px 0 40px"); +// }); +// $('.flowboder').live('mouseout', function() { +// $(this).css("border","#999 solid 2px"); +// $(this).find(".flowconert_buttont").css("display","none"); +// $(this).find(".flowconert_font").css("padding","0px 5px 0 40px"); +// }); +// }); + +function getMyHeadProcessList(listType){ + //$("#content3").reload(); + var url="./w?sid=" + sid + "&cmd=COE_SOCIAL_USERINFO_GETLIST"; + url=encodeURI(url); + $.ajax({ + type: "POST", + url:url , + data: "userId=" +userId+"&listType="+listType, + success: function(msg){ + jQuery("#content3").html(msg); + initTip(jQuery('*[title]')); + }, + error: function (){ + + } + }); +} +function openProcess(processUUID,listType){ + //$("#content3").reload(); + //window.top.$.simpleAlert($('#content3').html()); + var url=encodeURI("./w?sid=" + sid + "&cmd=COE_NAVIGATION_USERINFO_OPENPROCESS"); + $.ajax({ + type: "POST", + url:url , + data: "processUUID=" +processUUID+"&listType="+listType, + success: function(msg){ + //$("#content3").reload("close"); + document.getElementById("content3").innerHTML=msg; + }, + error: function (){ + + } + }); +} + +var curGiveOtherProcessUUID; + +function giveOtherProcessOwner(curprocessUUID){ + curGiveOtherProcessUUID=curprocessUUID; + openmailtree('giveOtherText'); +} +function diyFlexAddress(){ + //$("#content3").reload(); + var url=encodeURI("./w?sid=" + sid + "&cmd=CoE_Navigation_UserInfo_changeProcessOwner"); + $.ajax({ + type: "POST", + url: url, + data: "processUUID=" +curGiveOtherProcessUUID+"&userId="+userId+"&newOwner="+$('#giveOtherText').val(), + success: function(msg){ + document.getElementById("content3").innerHTML=msg; + //$("#content3").reload("close"); + }, + error: function (){ + + } + }); +} +function openmailtree(mail_target) { + var metaDataMapUUID = 'ORGOPTIONORGUSER.UID'+mail_target+'USER|'; + var mail_user = ''; + var url=encodeURI('./w?sid='+sid+ '&cmd=CLIENT_UI_ADVANCEADDRESS_OPEN&groupstyle=0&mail_user='+ mail_user + '&metaDataMapUUID=' + metaDataMapUUID); + window.open(url,'_blank','left=50,top=50,width=360,height=380,location=no,menubar=no,toolbar=no,status=no,directories=no,scrollbars=no,resizable=no'); + return false; +} +function openImg(imgStr,flowName) +{ + var Sys = {}; + var ua = navigator.userAgent.toLowerCase(); + var s; + (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] : + (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] : + (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] : + (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] : + (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0; + asyncbox.open({html : imgStr,width : 960,height:550,title:'流程原图:'+flowName,modal:true}); +} +var pWin=null; +var pWinTimeout=null; +/** 打开流程编辑器 **/ +function openFlexProcessDesigner(workFlowId,flowName){ + var url = "./w?sid=" + sid + "&cmd=AWSFlexProcessDesigner_Portal&wfId=" + workFlowId + "&editable=1"; + pWin = open(url,"wfFlexProcessDesigner"); + pWinTimeout=setTimeout("checkCloseFlexProcessDesigner()",100); +} +/** 检查编辑流程的窗口是否关闭 **/ +function checkCloseFlexProcessDesigner(){ + if(pWin != null){ + //窗口已被打开 + if(pWin.closed==true){ + //子窗口已被关闭 + try{ + if(parent.$.exist('showOpen01')){ +     parent.$.reload('showOpen01');//社交流里流程信息框的流程图查看更新 + }else{ + location.reload();//流程分析力的流程图查看更新 + } + }catch(e){ + location.reload();//流程分析力的流程图查看更新 + } + clearTimeout(pWinTimeout); + }else{ + pWinTimeout=setTimeout("checkCloseFlexProcessDesigner()",100); + } + } +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.correlate.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.correlate.js new file mode 100644 index 00000000..c539981f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.correlate.js @@ -0,0 +1,936 @@ +// init data +var awsCorrelated = []; +var awsNoCorrelate = []; +var wsData = []; +var wsTreeData = []; + +// Tree +var correlatedTree; +var noCorrelateTree; +var wsTree; + +// 快速搜索 +var awsGrid; + +//记录相关数据 +var checkedRecords = [];// 当前未关联流程中的选中项 +var wsCheckedRecord = [];// 当前需要关联的文件 +var currentCorrelation = [];// 记录当前所有关联关系 +var checkboxRecords = [];// 流程组多选框是否只读记录 + +$(document).ready(function(){ + $.simpleAlert("正在加载", "loading", "no", {model:true}); + disableAll(); + awsui.ajax.request({ + url : "./jd?cmd=com.actionsoft.apps.coe.pal_processlevel_correlate_data_json&t=" + Math.random(), + type : "POST", + data : { + sid : jQuery('#sid').val() + }, + ok : function(r) { + var data = r.data; + awsCorrelated = data.awsCorrelated; + awsNoCorrelate = data.awsNoCorrelate; + wsData = data.wsData; + wsTreeData = data.wsTreeData; + initAwsCorrelatedTree();// 已关联AWS模型树 + initAwsNoCorrelateTree();// 未关联AWS模型树 + initWsList();// 流程资产列表 + initWsTree();// 流程资产树 + $.mask("close"); + $.simpleAlert("close"); + enableAll(); + } + }) + +}); + +// 初始化已关联aws流程树 +function initAwsCorrelatedTree() { + var setting = { + animate : true, + checkbox : true, + showTitle : true, + event : { + beforeExpand:loadCorrelatedData + } + }; + setting.dataModel = {data:awsCorrelated}; + correlatedTree = awsui.tree.init($("#correlated"), setting); + $('#correlated').css('height','270px'); +} + +// 初始化未关联aws流程树 +function initAwsNoCorrelateTree() { + var setting = { + animate : true, + checkbox : true, + checkInherit : false, + showTitle : true, + event : { + beforeExpand:loadNoCorrelateData, + onCheck : getCurrentCheck + } + }; + setting.dataModel = {data:awsNoCorrelate}; + noCorrelateTree = awsui.tree.init($("#noCorrelateContent"), setting); + $('#noCorrelate').css('height','270px'); + initSelectAll(); + initSearchEdit(); + +} + +// 快速搜索 +function initSearchEdit() { + $("#searchEdit").buttonedit({ + onLiveSearch : function(e) { + if (window.event) { + key = e.keyCode; + } else if (e.which) { + key = e.which; + } + if (key == 37 || key == 38 || key == 39 || key == 40) { + return false; + } + if (key == "27") { + closeGrid(); + } else { + var val = $("#searchEdit").val().trim(); + if(val == '') { + closeGrid(); + return false; + } + var type = ""; + if($('#content_tab').find('a[tit="tab2"]').hasClass('active')) { + type = "noCorrelate"; + } else { + type = "correlated"; + } + if ($("#grid1").is(":hidden")) { + showGrid(); + } + var initGrid = function() { + var top = $("#searchEdit").offset().top; + var left = $("#searchEdit").offset().left-50; + $("#grid1").css("top", top + 26.5); + $("#grid1").css("left", left); + $('#grid1').css("position",'absolute'); + }; + if (val.length >= 3) { + initGrid(); + initSearchGrid(val, type); + } else if (val.length > 0 && val.length < 3 && key == 13) { + initGrid(); + initSearchGrid(val, type); + } + } + } + }); +} + +function initSearchGrid(serchKey, type){ + if(awsGrid) { + awsGrid.awsGrid("destroy"); + } + createAwsGrid(serchKey, type); + $(document).on("mousedown.initGrid", function(e) { + closeGrid(); + }); + $("#grid1").on("mousedown.initGrid_", function(e) { + e.stopPropagation(); + return false; + }); +} + +function closeGrid() { + $("#grid1").hide(); +} + +function showGrid() { + $("#grid1").show(); +} + +function createAwsGrid(serchKey, type) { + var obj = { + width : 514, + topVisible : false, + numberCellWidth : 30, + flexHeight : true, + scrollModel:{horizontal:false,vertical:false,autoFit:false}, //是否开启水平滚动 + cellClick:function(event, ui) { + cellClick(event, ui); + } + }; + obj.colModel = [ + { title : "应用", + width : 130, + dataType : "string", + align : 'left', + dataIndx : "appName", + sortable : false + }, + { title : "流程组", + width : 150, + dataType : "string", + align : 'left', + dataIndx : "groupName", + sortable : false + },{ + title : "流程", + width : 200, + dataType : "string", + align : 'left', + dataIndx : "processDefName", + sortable : false + } + ]; + + obj.dataModel = { + location: "remote", + sorting: "remote", + paging : "remote", + dataType : "JSON", + method : "POST", + curPage: 1, + rPP: 8, + sortDir: "up", + getUrl : function() { + return { + url : "./w", + data : "sid=" + jQuery("#sid").val() + "&cmd=com.actionsoft.apps.coe.pal_processlevel_correlate_search¤tPage=" + this.curPage + "&limit=" + this.rPP + "&query=" + encodeURI(serchKey) + "&type=" + encodeURI(type) + }; + }, + getData : function(dataJSON) { + return { + curPage : dataJSON.curPage, + totalRecords : dataJSON.totalRecords, + data : dataJSON.data + }; + } + }; + awsGrid = $("#grid1").awsGrid(obj); + + awsGrid.append("
                                                "); +} + +function cellClick(event, ui) { + var dataIndx = ui.dataIndx; + var data = ui.dataModel.data[ui.rowIndxPage]; + var appId = data.appId; + var groupId = data.groupId; + if(groupId == '') { + return; + } + var processDefId = data.processDefId; + + if($('#content_tab').find('a[tit="tab2"]').hasClass('active')) { // 未关联 + if(dataIndx == 'appName') { + var ele = document.getElementById('tree_span_noCorrelate_' + appId + "_BMApps"); + $('#noCorrelateContent').scrollTop(ele.offsetTop); + noCorrelateTree.selectNode("noCorrelate_" + appId + "_BMApps", false); + } + if(dataIndx == 'groupName') { // 流程组 + noCorrelateTree.expandNode(noCorrelateTree.getNodeDomById("noCorrelate_" + appId + "_BMApps"), true); + setTimeout(function() { + var ele = document.getElementById('tree_span_noCorrelate_' + groupId + "_BMPDGroup"); + $('#noCorrelateContent').scrollTop(ele.offsetTop); + noCorrelateTree.selectNode("noCorrelate_" + groupId + "_BMPDGroup", false); + }, 200); + } + if(dataIndx == 'processDefName') { // 流程 + noCorrelateTree.expandNode(noCorrelateTree.getNodeDomById("noCorrelate_" + appId + "_BMApps"), true); + setTimeout(function() { + noCorrelateTree.expandNode(noCorrelateTree.getNodeDomById("noCorrelate_" + groupId + "_BMPDGroup"), true); + setTimeout(function() { + var ele = document.getElementById('tree_span_noCorrelate_' + processDefId + '_BMPD'); + $('#noCorrelateContent').scrollTop(ele.offsetTop); + noCorrelateTree.selectNode("noCorrelate_" + processDefId + "_BMPD", false); + }, 200); + }, 200); + } + } else { // 已关联 + if(dataIndx == 'appName') { + var ele = document.getElementById('tree_span_correlated_' + appId + "_BMApps"); + $('#correlated').scrollTop(ele.offsetTop); + correlatedTree.selectNode("correlated_" + appId + "_BMApps", false); + } + if(dataIndx == 'groupName') { // 流程组 + correlatedTree.expandNode(correlatedTree.getNodeDomById("correlated_" + appId + "_BMApps"), true); + setTimeout(function() { + var ele = document.getElementById('tree_span_correlated_' + groupId + "_BMPDGroup"); + $('#correlated').scrollTop(ele.offsetTop); + correlatedTree.selectNode("correlated_" + groupId + "_BMPDGroup", false); + }, 200); + } + if(dataIndx == 'processDefName') { // 流程 + correlatedTree.expandNode(correlatedTree.getNodeDomById("correlated_" + appId + "_BMApps"), true); + setTimeout(function() { + correlatedTree.expandNode(correlatedTree.getNodeDomById("correlated_" + groupId + "_BMPDGroup"), true); + setTimeout(function() { + var ele = document.getElementById('tree_span_correlated_' + processDefId + '_BMPD'); + $('#correlated').scrollTop(ele.offsetTop); + correlatedTree.selectNode("correlated_" + processDefId + "_BMPD", false); + }, 200); + }, 200); + } + + + if(dataIndx == 'groupName') { // 流程组 + var ele = document.getElementById('tree_span_CORRELATED_' + groupId + "_BMPDGroup"); + $('#correlated').scrollTop(ele.offsetTop); + correlatedTree.selectNode("CORRELATED_" + groupId + "_BMPDGroup", false); + } + if(dataIndx == "processDefName") { // 流程 + correlatedTree.expandNode(correlatedTree.getNodeDomById("CORRELATED_" + groupId + "_BMPDGroup"), true); + setTimeout(function() { + var ele = document.getElementById('tree_span_CORRELATED_' + processDefId + '_BMPD'); + $('#correlated').scrollTop(ele.offsetTop); + correlatedTree.selectNode("CORRELATED_" + processDefId + "_BMPD", false); + }, 200); + } + } +} + +// 初始化未关联中的全选按钮 +function initSelectAll() { + $("#selectAll").on("click",function(){ + var allGroup = []; + for(var i in awsNoCorrelate) { + var temp = awsNoCorrelate[i]; + $.ajax({ + url : "./jd?sid=" + jQuery("#sid").val() + "&cmd=com.actionsoft.apps.coe.pal_processlevel_nocorrelate_tree_data_json&t=" + Math.random(), + data : {pid : temp.id, requestType : temp.type, appId : temp.appId}, + type : "POST", + async : false, + dataType : "json", + success : function(r,status){ + if(status == 'success' && r.length > 0) { + for(var i in r) { + allGroup.push(r[i]); + } + } + } + }); + } + if($(this).prop("checked")){ + // 清空已选中对象 + checkedRecords = []; + for(var i in allGroup) { + var temp = allGroup[i]; + var $input = $('#noCorrelateContent').find('input[value=' + temp.id + ']'); + var flag = $input.prop("disabled"); + if(flag) { // 禁用 + var $allSub = $input.closest('a').next(); + if($allSub.length > 0) { + var $subInput = $allSub.find('input[type=checkbox]'); + $subInput.each(function() { + if(!$(this).prop("disabled")) { + $(this).prop("checked", true); + getCurrentCheck([{checked:true}], noCorrelateTree.getNodeById($(this).val())); + } + }); + } + } else { // 没有禁用 + $input.prop("checked", true); + getCurrentCheck([{checked:true}], temp); + } + } + } else { + for(var i in allGroup) { + var temp = allGroup[i]; + var $input = $('#noCorrelateContent').find('input[value=' + temp.id + ']'); + var flag = $input.prop("disabled"); + if(flag) { // 禁用 + var $allSub = $input.closest('a').next(); + if($allSub.length > 0) { + var $subInput = $allSub.find('input[type=checkbox]'); + $subInput.each(function() { + if(!$(this).prop("disabled")) { + $(this).prop("checked", false); + getCurrentCheck([{checked:false}], noCorrelateTree.getNodeById($(this).val())); + } + }); + } + } else { // 没有禁用 + $input.prop("checked", false); + getCurrentCheck([{checked:false}], temp); + } + } + } + }); +} + +// 加载未关联节点 +function loadNoCorrelateData(node) { + var param = node.name; + if(node.type == "BMPDGroup") { + var obj = {"groupId":node.groupId,"categoryName":node.categoryName}; + param = JSON.stringify(obj); + } + param = encodeURI(param); + var dataModel = { + url : "./jd?sid=" + jQuery("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_nocorrelate_tree_data_json&pid=" + node.id + "&requestType=" + node.type + "&appId=" + node.appId + "¶m=" + param, + method : "POST", + dataType : "json" + }; + noCorrelateTree.refreshNode({ + id : node.id, + dataModel : dataModel + }); + if(node.type == "BMApps") { + var child = noCorrelateTree.getNodeIdsByPid(node.id); + for(var i in child) { + var childNode = noCorrelateTree.getNodeById(child[i]); + var childId = childNode.id; + for(var j in checkboxRecords) { + if(checkboxRecords[j].id == childId && checkboxRecords[j].value) { + $('#noCorrelate').find('input[value=' + child[i] + ']').prop("checked",false); + $('#noCorrelate').find('input[value=' + child[i] + ']').prop("disabled","disabled"); + } + } + } + // 对已经选择的重置为选择状态 + for(var i in checkedRecords) { + $('#noCorrelate').find('input[value=' + checkedRecords[i].id + ']').attr("checked",true); + } + } + if(node.type == "BMPDGroup") { + // 之前选择已经关联到资产库的流程子节点禁用多选框 + for(var i in currentCorrelation) { + if(currentCorrelation[i].oldPid == node.id) { + $('#noCorrelate').find('input[value=' + currentCorrelation[i].id + ']').prop("checked",false); + $('#noCorrelate').find('input[value=' + currentCorrelation[i].id + ']').prop("disabled","disabled"); + } + } + // 对已经选择的重置为选择状态 + for(var i in checkedRecords) { + $('#noCorrelate').find('input[value=' + checkedRecords[i].id + ']').attr("checked",true); + } + } +} + +// 加载已关联节点 +function loadCorrelatedData(node) { + var param = node.name; + if(node.type == "BMPDGroup") { + var obj = {"groupId":node.groupId,"categoryName":node.categoryName}; + param = JSON.stringify(obj); + } + param = encodeURI(param); + var dataModel = { + url : "./jd?sid=" + jQuery("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_correlated_tree_data_json&pid=" + node.id + "&requestType=" + node.type + "&appId=" + node.appId + "¶m=" + param, + method : "POST", + dataType : "json" + } + + correlatedTree.refreshNode({ + id : node.id, + dataModel : dataModel + }); +} + +// 初始化流程资产列表 +function initWsList() { + var wsObject = []; + for(var i in wsData) { + if(wsData[i].checked) { + wsObject.unshift({id : wsData[i].wsId, text : wsData[i].wsName}); + } else { + wsObject.push({id : wsData[i].wsId, text : wsData[i].wsName}); + } + } + var opt1 = { + width : 350, + closeOnSelect : true, + data : wsObject + }; + $("#wsSelect").select2(opt1); +} + +// 刷新资产库数据 +function refreshWsTree() { + // 刷新资产库树结构 + var dataModel = { + url : "./jd?sid=" + jQuery("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_ws_tree_data_json" + + "&wsId=" + $('#wsSelect').val(), + method : "POST", + dataType : "json" + } + wsTree.refresh(dataModel); + + // AWS所有置灰选项取消 + $('#noCorrelateContent').find('input[type=checkbox]').removeProp("disabled"); + // 相关存储变量归零 + wsCheckedRecord = []; + currentCorrelation = []; + checkboxRecords = []; +} + +// 初始化流程资产库树 +function initWsTree() { + var setting = { + animate : true, + checkbox : false, + showTitle : true, + showLine : false, + sort : true, + event : { + beforeExpand : loadWsTreeData, + onClick : getCurrentSelect + + } + }; + setting.dataModel = {data:wsTreeData}; + wsTree = awsui.tree.init($("#wsTree"), setting); +} + +// 加载流程资产库树节点 +function loadWsTreeData(node) { + if(node.isNoCorrelate) { // 当前节点为aws流程组文件 + var childrenNodes = []; + for(var i in currentCorrelation) { + if(currentCorrelation[i].pid == node.id) { + currentCorrelation[i].isNoCorrelate = true; + childrenNodes.splice(childrenNodes.length, 0, currentCorrelation[i]); + } + } + wsTree.refreshNode({ + id : node.id, + data : childrenNodes + }); + } else { // 当前节点为资产库节点 + var dataModel = { + url : "./jd?sid=" + jQuery("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_ws_tree_data_json&pid=" + node.id + + "&wsId=" + $('#wsSelect').val(), + method : "POST", + dataType : "json" + }; + wsTree.refreshNode({ + id : node.id, + dataModel : dataModel + }); + var childrenNodes = wsTree.getChildrenByPid(node.id); + // 删除多余的wsTree数据 + var arr = []; + for(var index = 0, i = 0; index < childrenNodes.length; index++) { + if(childrenNodes[index].pid != node.id) { + continue; + } + if(childrenNodes[index].wsId != $('#wsSelect').val()) { + continue; + } + if(childrenNodes[index].isNoCorrelate != true) { + arr[i++] = childrenNodes[index]; + } + } + childrenNodes = arr; + arr = []; + for(var i in currentCorrelation) { + arr.push(currentCorrelation[i].pid); + if(currentCorrelation[i].pid == node.id) { + currentCorrelation[i].isNoCorrelate = true; + childrenNodes.splice(childrenNodes.length, 0, currentCorrelation[i]); + + } + } + for(var i in childrenNodes) { // 有子流程但是不可展开/关闭的流程设置"+",默认关闭 + if(jQuery.inArray(childrenNodes[i].id, arr) != -1 && childrenNodes[i].open != true) { + childrenNodes[i].open = false; + } + } + wsTree.refreshNode({ + id : node.id, + data : childrenNodes + }); + } +} + +// 添加AWS流程到资产库树结构中 +function addToWsTree() { + if(!validateCorrection()) return; + if(!validateCurrentWsFile("add")) return; + + var node = wsTree.getNodeById(wsCheckedRecord[0].id); + if(node.isNoCorrelate == true) { + alertDialog('请保存后进行此操作'); + return; + } + // 将所有已选中的aws流程分成2组 + var temp1 = [];// aws流程组 + var temp2 = [];// aws具体流程 + for(var i in checkedRecords) { + if(checkedRecords[i].type == 'BMPDGroup') { + temp1.push(checkedRecords[i]); + } + if(checkedRecords[i].type == 'BMPD') { + temp2.push(checkedRecords[i]); + } + } + var arr = []; + for(var i in temp1) { + arr.push(temp1[i].id); + temp1[i].oldPid = temp1[i].pid; + temp1[i].pid = wsCheckedRecord[0].id; + temp1[i].iconFont = ""; + currentCorrelation.push(temp1[i]); + } + + for(var i in temp2) { + temp2[i].oldPid = temp2[i].pid; + if(jQuery.inArray(temp2[i].pid, arr) == -1) { + temp2[i].pid = wsCheckedRecord[0].id; + } + temp2[i].iconFont = ""; + currentCorrelation.push(temp2[i]); + } + // 清空该流程资产库文件下的多余流程(过滤掉关联数据和不相干数据) + arr = []; + var childrenNodes = wsTree.getChildrenByPid(wsCheckedRecord[0].id); + for(var index = 0, i = 0; index < childrenNodes.length; index++) { + if(childrenNodes[index].wsId != $('#wsSelect').val()) { + continue; + } + if(childrenNodes[index].pid != wsCheckedRecord[0].id) { + continue; + } + if(!childrenNodes[index].isNoCorrelate) { + arr[i++] = childrenNodes[index]; + } + } + childrenNodes = arr; + // 新增关联关系中的流程 + for(var i = 0; i < currentCorrelation.length; i++) { + if(currentCorrelation[i].pid == wsCheckedRecord[0].id) { + var checked = currentCorrelation[i]; + checked.isNoCorrelate = true; + if(wsCheckedRecord[0].id == "process") { + checked.plLevel = 1; + } else { + checked.plLevel = wsCheckedRecord[0].plLevel + 1; + } + checked.nocheck = false; + childrenNodes.splice(childrenNodes.length, 0, checked); + } + } + wsTree.refreshNode({ + id : wsCheckedRecord[0].id, + data : childrenNodes + }); + // AWS多选框锁定并放入锁定流程对象 + for(var i = 0; i < checkedRecords.length; i++) { + $('#noCorrelate').find('input[value=' + checkedRecords[i].id + ']').prop("checked",false); + $('#noCorrelate').find('input[value=' + checkedRecords[i].id + ']').prop("disabled","disabled"); + recordCheckbox(checkedRecords[i].id, true); + } + // 流程组多选框锁定 + arr = []; + for(var i in checkedRecords) { + if(checkedRecords[i].type == 'BMPD') { + var flag = true; + for(var j in arr) { + if(arr[j] == checkedRecords[i].oldPid) flag = false; + } + if(flag) arr.push(checkedRecords[i].oldPid); + } + } + for(var i in arr) { + var $list = $('#noCorrelate').find('input[value=' + arr[i] + ']').closest('a').next('ul').find('input'); + var index = 0; + $list.each(function(){ + if($(this).prop('disabled')) index++; + }); + if(index != 0 && $list.length == index) { + $('#noCorrelate').find('input[value=' + arr[i] + ']').prop("disabled","disabled"); + recordCheckbox(arr[i], true); + } + } + // 当前选中的流程对象清空 + checkedRecords = []; + $("#selectAll").prop("checked",false); + $.simpleAlert("添加成功", "ok", 2000); +} + +// 移除未保存关联 +function removeWsTree() { + if(!validateCurrentWsFile("remove")) return; + if(wsCheckedRecord[0].isNoCorrelate != true) { + alertDialog("不允许选择资产库自有流程"); + return; + } + var arr = []; + getAllSub(wsCheckedRecord[0].id, arr); + for(var i in arr) { + for(var j in currentCorrelation) { + if(currentCorrelation[j].id == arr[i]) { + // 流程组节点取消多选禁用 + $('#noCorrelateContent').find('input[value=' + currentCorrelation[j].oldPid + ']').removeProp("disabled"); + recordCheckbox(currentCorrelation[j].oldPid, false); + // 流程取消多选禁用 + $('#noCorrelateContent').find('input[value=' + currentCorrelation[j].id + ']').removeProp("disabled"); + recordCheckbox(currentCorrelation[j].id, false); + // 关联关系中删除该数据 + currentCorrelation.splice(j, 1); + break; + } + } + } + + var node = wsCheckedRecord[0]; + + wsCheckedRecord = []; + var flag = true; + for(var i in currentCorrelation) { + if(currentCorrelation[i].pid == node.pid) { + flag = false; + break; + } + } + var flag2 = false; + if(flag && wsTree.getNodeById(node.pid).type == 'BMPDGroup') { // 父节点是流程组并且没有子流程,则该流程组删除关联 + for(var i in currentCorrelation) { + if(currentCorrelation[i].id == node.pid) { + currentCorrelation.splice(i, 1); + flag2 = true; + break; + } + } + } + for(var i in currentCorrelation) { + $('#noCorrelateContent').find('input[value=' + currentCorrelation[i].id + ']').prop("disabled","disabled"); + recordCheckbox(currentCorrelation[i].id, true); + } + if(flag2) { + loadWsTreeData(wsTree.getNodeById(wsTree.getNodeById(node.pid).pid)); + } else { + loadWsTreeData(wsTree.getNodeById(node.pid)); + } + $("#selectAll").prop("checked",false); +} + +// 递归获取当前id下的子流程id +function getAllSub(id, arr) { + arr.splice(0, 0, id); + for(var i in currentCorrelation) { + if(currentCorrelation[i].pid == id) { + getAllSub(currentCorrelation[i].id, arr); + } + } +} + +// 获取当前选择的流程 +function getCurrentCheck(dom, node) { + if(node.type == 'BMPDGroup') { // 流程组 + if(dom[0].checked == true) {// 选中 + checkedRecords.push(node); + // 所有子节点放入 + var obj = {"groupId":node.groupId,"categoryName":node.categoryName}; + var param = JSON.stringify(obj); + $.ajax({ + url : "./jd?sid=" + jQuery("#sid").val() + "&cmd=com.actionsoft.apps.coe.pal_processlevel_nocorrelate_tree_data_json&t=" + Math.random(), + data : {pid : node.id, requestType : node.type, appId : node.appId, param : param}, + type : "POST", + async : false, + dataType : "json", + success : function(r,status){ + if(status == 'success' && r.length > 0) { + var temp = []; + // 过滤已经在界面进行关联的 + for(var n in r) { + for(var i in currentCorrelation) { + if(currentCorrelation[i].id == r[n].id) temp.push(r[n].id); + } + } + for(var i in r) { + if(jQuery.inArray(r[i].id, temp) == -1) { + var flag = true; + for(var j = 0; j < checkedRecords.length; j++) { + if(r[i].id == checkedRecords[j].id) { + flag = false; + break; + } + } + if(flag) { + checkedRecords.push(r[i]); + $('#noCorrelate').find('input[value=' + r[i].id + ']').prop("checked",true); + } + } + } + } + if(dom[0].type == 'checkbox') { + noCorrelateTree.expandNode(noCorrelateTree.getNodeDomById(node.id),true); + } + } + }); + } else {// 取消选中 + var temp = []; + for(var i = 0; i < checkedRecords.length; i++) { + if(checkedRecords[i].id != node.id && checkedRecords[i].pid != node.id) { + temp.push(checkedRecords[i]); + } + if(checkedRecords[i].pid == node.id) { + $('#noCorrelate').find('input[value=' + checkedRecords[i].id + ']').prop("checked",false); + } + } + checkedRecords = temp; + $("#selectAll").prop("checked",false); + } + } + if(node.type == 'BMPD') { // 流程子节点 + if(dom[0].checked == true) {// 选中 + checkedRecords.push(node); + } else {// 取消选中 + for(var i = 0; i < checkedRecords.length; i++) { + if(checkedRecords[i].id == node.id) { + checkedRecords.splice(i, 1); + break; + } + } + // 同级子节点无选中项,父级(流程组)取消选中 + var flag = true; + for(var i in checkedRecords) { + if(checkedRecords[i].pid == node.pid) { + flag = false; + break; + } + } + if(flag) { + for(var i = 0; i < checkedRecords.length; i++) { + if(checkedRecords[i].id == node.pid) { + $('#noCorrelate').find('input[value=' + checkedRecords[i].id + ']').prop("checked",false); + checkedRecords.splice(i, 1); + break; + } + } + } + $("#selectAll").prop("checked",false); + } + } +} + +// 验证是否选择了待关联流程 +function validateCorrection() { + if(checkedRecords.length == 0) { + alertDialog("请在未关联标签中勾选需要关联的AWS流程"); + return false; + } + return true; +} + +// 验证是否选择了待关联的流程库文件作为父目录 +function validateCurrentWsFile(type) { + if(wsCheckedRecord.length == 0) { + var msg1 = type=="remove"?"取消":""; + var msg2 = type=="remove"?"AWS流程":"资产库文件"; + alertDialog("请从右侧选择需要" + msg1 + "关联的" + msg2); + return false; + } + return true; +} + +// 获取选中的流程资产库文件 +function getCurrentSelect(node) { + wsCheckedRecord = []; + wsCheckedRecord.push(node); +} + +// 保存关联关系 +function saveCoeCorrelate() { + // 验证 + if(currentCorrelation.length == 0) { + alertDialog('无关联数据,请直接点击关闭'); + return; + } + disableAll(); + for(var i in currentCorrelation) { + currentCorrelation[i].type == 'BMPDGroup' ? currentCorrelation[i].category = 'default' : currentCorrelation[i].category = 'process.bpmn2'; + } + var temp1 = []; // 父节点为资产库的流程/流程组 + var temp2 = []; // 父节点为aws流程/流程组的流程/流程组 + for(var i in currentCorrelation) { + if(currentCorrelation[i].pid.indexOf('noCorrelate_obj_') > -1) { + currentCorrelation[i].parentType = "aws"; + temp2.push(currentCorrelation[i]); + } else { + currentCorrelation[i].parentType = "ws"; + temp1.push(currentCorrelation[i]); + } + } + // 设置plLevel级别 + for(var i in temp1) { + var parentNode = wsTree.getNodeById(temp1[i].pid); + if(parentNode.id == "process") { + temp1[i].plLevel = 1; + } else { + temp1[i].plLevel = parentNode.plLevel + 1; + } + } + for(var i in temp2) { + for(var j in currentCorrelation) { + if(currentCorrelation[j].id == temp2[i].pid) { + temp2[i].plLevel = currentCorrelation[j].plLevel + 1; + break; + } + } + } + $.simpleAlert("正在保存", "loading"); + awsui.ajax.request({ + url : "./jd?cmd=com.actionsoft.apps.coe.pal_processlevel_correlate_create_save&t=" + Math.random(), + type : "POST", + cache : false, + traditional : true, + data : { + sid : jQuery('#sid').val(), + wsId : $('#wsSelect').val(), + currentCorrelation : awsui.encode(currentCorrelation) + }, + ok : function(r) { + $.simpleAlert('关联成功', 'ok', 1500, {callback:function(){window.top.closeAwsDialog();}}); + } + }) +} + +// 记录菜单多选框禁用状态 +function recordCheckbox(id, disabled) { + var flag = true; + for(var i in checkboxRecords) { + var obj = checkboxRecords[i]; + if(obj.id == id) { + obj.value = disabled; + flag = false; + break; + } + } + if(flag) checkboxRecords.push({id : id, value : disabled}); +} + +// 按钮禁用,防止多次提交 +function disableAll() { + parent.$(".dlg-button").find('.blue').prop("disabled","disabled").addClass("disable"); +} + +// 按钮取消禁用 +function enableAll() { + parent.$(".dlg-button").find('.blue').removeProp("disabled").removeClass("disable"); +} + +//alert 提示框 +function alertDialog(msg) { + disableAll(); + $('#alertDialog').text(msg); + $('#alertDialog').dialog({ + title : '提示', + closable : false, + buttons:[ + {text:'确定',cls:"blue",handler:function(){ + enableAll(); + $("#alertDialog").dialog("close"); + return; + } + } + ] + }); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.create.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.create.js new file mode 100644 index 00000000..b56e14fc --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.create.js @@ -0,0 +1,168 @@ +jQuery(function() { + $("input[name=tctype][value=" + tctype + "]").check("option", + "checked", true); + + // jQuery("input[name=state][value=" + state + "]").attr("checked", + // true); + // 如果是修改对话框 禁用 顶层分类原则 + var id = jQuery("#id").val(); + if (id != 0) { + $("input[name=tctype]").check("disable"); + } + $("#wsDm").buttonedit({ + onClick : wsDmClisk + }); + $("#wsAdmin").buttonedit({ + onClick : wsAdminClisk + }); + }); +function wsAdminClisk() { + openAddressBook($("#wsAdmin")); +} +function wsDmClisk() { + openAddressBook($("#wsDm")); +} +function trim(str) { // 删除左右两端的空格 + return str.replace(/(^\s*)|(\s*$)/g, ""); +} +function saveCoeWorkspace() { + $("#saveCoeWorkspaceBtn").attr("disabled", "disabled"); + var id = $("#id").val(); + var wsName = $("#wsName").val(); + var wsDm = $("#wsDm").attr("userId"); + var wsAdmin = $("#wsAdmin").attr("userId"); + var wsDesc = $("#wsDesc").val(); + var state = 0; + var tctype = $('input[name=tctype]:checked').val(); + var bgURL = $("#bgURL").val(); + var orderIndex = $("#orderIndex").val(); + var wsOrgType = $("#wsOrgType").val(); + wsName = trim(wsName); + if (wsName == "") { + // alert(流程资产名称不允许为空); + $.simpleAlert("[资产名称]不允许为空", "info", 2000); + $("#wsName").val(""); + return false; + } + if(wsName.indexOf("\'") != -1 || wsName.indexOf("\"") != -1) { + $.simpleAlert("[资产名称]不允许带有\'或\"", "info", 2000); + return false; + } + if (wsName.length > 36) { + // alert(流程资产名称不能超过位); + $.simpleAlert("[资产名称]不允许超过36个字符", "info", 2000); + return false; + } + if (wsDesc.length > 255) { + $.simpleAlert("[资产描述]不允许超过255个字符", "info", 2000); + return false; + } + if (wsDm.length > 255) { + $.simpleAlert("[流程办公室]不允许超过255个字符", "info", 2000); + return false; + } + if (wsAdmin.length > 255) { + $.simpleAlert("[流程管理员]不允许超过255个字符", "info", 2000); + return false; + } + + $.simpleAlert("正在保存", "loading"); + + var params = { + id : id, + state : state, + tctype : tctype, + orderIndex : orderIndex, + wsName : wsName, + wsDm : wsDm, + wsAdmin : wsAdmin, + wsDsc : wsDesc, + wsBgUrl : bgURL, + wsOrgType : wsOrgType + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + + "&cmd=com.actionsoft.apps.coe.pal_ws_save", + data : params, + success : function(msg) { + $.simpleAlert("close"); + var data = eval('(' + msg + ')').msg; + if (data == "1") { + try { + if (id == undefined || id == "") { + window.top.$.simpleAlert("新建成功", "ok", 2000); + window.top.$.mask("close"); + } else { + window.top.$.simpleAlert("修改成功", "ok", 2000); + window.top.$.mask("close"); + } + // 刷新当前数据 + if (parent.document.getElementById("main_iframe") && parent.document.getElementById("main_iframe").contentWindow.initWs) { + parent.document.getElementById("main_iframe").contentWindow.initWs(function(){ + parent.showGuide(1); + }); + } else if (parent.document.getElementById("main_iframe").contentWindow.refreshWsInfo) { + parent.document.getElementById("main_iframe").contentWindow.refreshWsInfo(wsName, wsDesc, wsOrgType); + } + + // 关闭弹出框 + window.top.closeAwsDialog(); + } catch (e) { + window.top.$.simpleAlert(e); + } + + } else { + jQuery("#saveCoeWorkspaceBtn").removeAttr("disabled"); + if (id == 0) { + // alert(创建流程资产失败请稍后重试); + $.simpleAlert(创建流程资产失败请稍后重试, "info", 2000); + } else { + // alert(修改流程资产失败请稍后重试); + $.simpleAlert(修改流程资产失败请稍后重试, "info", 2000); + } + + } + + } + }); +} + +// 打开地址簿 +function openAddressBook(obj) { + var temp = obj.attr("userId"); +// var addresses = obj.val().split('>'); +// var temp = ""; +// for (var i = 0; i < users.length; i++) { +// temp += addresses[i] + ">,"; +// } +// temp = temp.substring(0, temp.lastIndexOf(",")); + var dlg = window.top.FrmDialog.open({ + title : "用户列表", + width : 615, + height : 440, + model : false, + url : "./w", + data : { + sid : $("#sid").val(), + //cmd : 'CLIENT_UI_ADDRESSBOOK', + cmd : 'com.actionsoft.apps.coe.pal_ws_userlist', + //address : temp + users : temp + }, + buttons : [{ + text : '确定', + cls : "blue", + handler : function() { + var selectList = dlg.win().getSelectList(); + obj.val(selectList.selectList).attr("userId", selectList.selectIdList); + dlg.close(); + } + }, { + text : '取消', + handler : function() { + dlg.close(); + } + }] + }); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.import.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.import.js new file mode 100644 index 00000000..5ff4a1f8 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.import.js @@ -0,0 +1,216 @@ +var localChoiceShow = "hide"; //本地文件存在时choice +var remoteChoiceShow = "hide"; //服务器文件存在时choice + +jQuery(function(){ + // 本地上传 + $("#uploadButton").upfile({ + sid: sid, + appId: appId, + groupValue: "Normal", + fileValue: "Normal", + repositoryName: "tmp", + filesToFilter : [["Images ()","*.bak"]], + numLimit: 1, + done:function(e, data){ + $("#wsFileName").val(data.files[0].name); + }, + add:function(e, data){ + var filename = data.files[0].name; + var fileSize = data.files[0].size; + var suffix = filename.substring(filename.lastIndexOf(".")); + if (fileSize == 0) { + $.simpleAlert("空文件不允许上传","info"); + return false; + } + if (fileSize / 1024 / 1024 > 2048) { //文件大于2G + $.simpleAlert("文件过大,请联系管理员将需上传的文件放在在服务器/doccenter/com.actionsoft.apps.coe.pal/tmp/exp/repository目录下使用服务器上传方式上传","warning"); + return false; + } + }, + complete:function() { + var params = { + wsFileName : $("#wsFileName").val(), + source: "local" + }; + $.simpleAlert("正在校验文件,请稍等", "loading"); + awsui.ajax.request({ + method : "POST", + url : "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_ws_is_exist", + data : params, + ok : function(r) { + $.simpleAlert("close"); + var message = r.data.message; + if (message == "exist") { + $("#replaceDiv").show(); + $("#replaceTr").show(); + localChoiceShow = "show"; + } else { + $("#replaceDiv").hide(); + $("#replaceTr").hide(); + localChoiceShow = "hide"; + } + }, + err : function(r) { + $.simpleAlert("close"); + $("#wsFileName").val(""); + } + }); + } + }); + + // 服务器上传 + var opt = { + width : 350, + data : impRepositorys, + minimumResultsForSearch:-1, + placeholder: "请选择" + }; + $("#selectRemote").select2(opt); + //服务器上传校验资产库存在与否 + $("#selectRemote").on("change", function() { + var rm_filename = $("#selectRemote").val(); + if("seat0" == rm_filename) { + return; + } + $.simpleAlert("正在校验文件,请稍等", "loading"); + awsui.ajax.request({ + method : "POST", + url : "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_ws_is_exist", + data : { + wsFileName : rm_filename, + source: "remote" + }, + ok : function(r) { + $.simpleAlert("close"); + var message = r.data.message; + if (message == "exist") { + $("#replaceDiv").show(); + $("#rm_replaceTr").show(); + remoteChoiceShow = "show"; + } else { + $("#replaceDiv").hide(); + $("#rm_replaceTr").hide(); + remoteChoiceShow = "hide"; + } + }, + err : function(r) { + $.simpleAlert("close"); + $("#selectRemote").val(["seat0"]).trigger("change"); + } + }); + }); + + //本地文件上传 服务器文件上传 + $("#fileSource").off("click").on("click",function(){ + wayChain(); + }); +}); + +/* 文件来源 */ +function wayChain() { + var source = $(".awsui-radio[name='wayrio']:checked").val(); + if(source == 'local') { + //使用本地 + $("#localUpload").show(); + $("#remoteUpload").hide(); + //重复提示 + if(localChoiceShow == "show") { + $("#replaceDiv").show(); + $("#replaceTr").show(); + } else { + $("#replaceDiv").hide(); + $("#replaceTr").hide(); + } + $("#rm_replaceTr").hide(); + } else { + //使用服务器 + $("#localUpload").hide(); + $("#remoteUpload").show(); + //重复提示 + if(remoteChoiceShow == "show") { + $("#replaceDiv").show(); + $("#rm_replaceTr").show(); + } else { + $("#replaceDiv").hide(); + $("#rm_replaceTr").hide(); + } + $("#replaceTr").hide(); + } +} + +function importCoeWorkspace() { + // 判断本地上传还是服务器上传 + var source = $(".awsui-radio[name='wayrio']:checked").val(); + var wsFileName = ""; + var wsuuid = ""; + var choice = ""; + if(source == "local") { //本地 + var wsFileName = $("#wsFileName").val(); + + var choice = $(".awsui-radio[name='radiox1']:checked").val(); + } else { //服务器 + var wsFileName = $("#selectRemote").val()=="seat0" ? "" : $("#selectRemote").val(); + var choice = $(".awsui-radio[name='rm_radiox1']:checked").val(); + } + var wsuuid = wsFileName.indexOf("(") > -1 ? wsFileName.substring(0, wsFileName.indexOf("(")) : wsFileName.substring(0, wsFileName.indexOf(".")); + + // 上传 + if (wsFileName == "" || wsFileName == null) { + $.simpleAlert("请上传文件", "info"); + return; + } + $.simpleAlert("正在导入", "loading"); + var params = { + wsFileName : wsFileName, + replaceChoice : choice, + source : source + }; + awsui.ajax.request({ + type : "POST", + url : "./jd?sid=" + encodeURIComponent(sid) + "&cmd=com.actionsoft.apps.coe.pal_ws_save_import", + data : params, + ok : function(r) { + var name = r.data.wsName; + var desc = r.data.wsDesc; + var orgType = r.data.wsOrgType; + try { + $.simpleAlert('close'); + window.top.$.simpleAlert("导入成功", "ok", 2000, {callback:function(){window.top.$.mask("close"); + + // 刷新当前数据 + if (parent.document.getElementById("main_iframe") && parent.document.getElementById("main_iframe").contentWindow.initWs) { + parent.document.getElementById("main_iframe").contentWindow.initWs(function(){ + parent.showGuide(1); + }); + } else if (parent.document.getElementById("main_iframe").contentWindow.refreshWsInfo) { + parent.document.getElementById("main_iframe").contentWindow.refreshWsInfo(wsName, wsDesc, wsOrgType); + } + + // 关闭弹出框 + window.top.closeAwsDialog();}}); + } catch (e) { + $.simpleAlert("close"); + window.top.$.simpleAlert(e); + } + }, + err : function(r) { + $.simpleAlert("close"); + var params = { + id : wsuuid + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_ws_remove&versionId=" + + wsuuid, + data : params, + success : function(msg) { + } + }); + $.simpleAlert("导入失败", "error", 2000); + } + }); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.main.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.main.js new file mode 100644 index 00000000..494bcb01 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.main.js @@ -0,0 +1,266 @@ +var content_container_height; +$(document).ready(function() { + content_container_height=$(window).height() - $('#content_container').offset().top-35 + $('#content_container').height(content_container_height); + initWsList(); +}) + +//初始化列表 +function initWsList(){ + initWs(); +} + +//初始化事件 +function initEvent(){ + jQuery(".ws_item").bind('click', function() { + jQuery(".ws_item").css("backgroundColor","#fff"); + jQuery(".ws_item").css("color","#000"); + var obj=$(this); + if(obj.attr("class").indexOf("ws_item_close")>-1){ + obj.css("backgroundColor","#BEBEC5"); + obj.css("color","#fff"); + }else{ + obj.css("backgroundColor","#3A87AD"); + obj.css("color","#fff"); + } + //预览 + var sid=jQuery("#sid").val(); + var wsId=obj.attr("wsuuid"); + var url=encodeURI("./w?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_ws_preview&wsId="+wsId); + setCookie("wsSelect",wsId); + jQuery("#look_content_iframe").attr("src",url); + }); + jQuery(".ws_item").bind('dblclick', function() { + var obj=$(this); + openProcessLevel(obj.attr("wsuuid"),1); + }); + var wsSelect=getCookie("wsSelect"); + if(wsSelect){ + var wsSelectObj=jQuery("div[wsuuid='"+wsSelect+"']"); + wsSelectObj.trigger("click"); + } +} + +//控制操作按钮是否显示 +function optionButtonIsShow(obj,isShow){ + var id= obj.attr("no"); + if(isShow){ + jQuery("#edit_"+id).css("visibility","visible"); + jQuery("#stop_"+id).css("visibility","visible"); + jQuery("#del_"+id).css("visibility","visible"); + jQuery("#exp_"+id).css("visibility","visible"); + }else{ + jQuery("#edit_"+id).css("visibility","hidden"); + jQuery("#stop_"+id).css("visibility","hidden"); + jQuery("#del_"+id).css("visibility","hidden"); + jQuery("#exp_"+id).css("visibility","hidden"); + } +} + + + +//地址薄 +function openmailtree(form, mail_target, mycmd) { + form.cmd.value = mycmd; + form.mail_target.value = mail_target; + form.groupstylevalue.value = ''; + window.open('../commons/wait.htm', 'openmailtree', 'left=50,top=50,width=700,height=400,location=no,menubar=no,toolbar=no,status=no,directories=no,scrollbars=no,resizable=no'); + form.target = "openmailtree"; + form.submit(); + return false; +} +function initWs() { + $.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_ws_data", + success : function(msg) { + var data=""; + var count=0; + if(msg.indexOf("|")>-1){ + var array=msg.split("|"); + data=array[0]; + count=array[1]; + } + $('div .flowTable').html(data); + $('#count').html(count); + //从新计算高度 + if(document.getElementById("content_container").scrollHeight>content_container_height){ + $('#content_container').height(document.getElementById("content_container").scrollHeight); + } + //初始化事件 + initEvent(); + //初始化提示 + initTip($('*[title]')); + } + }); +} +//打开新建对话框 +function openCreateDialog(id){ + var t=新建; + if(id==undefined){ + id=0; + }else{ + t=修改; + } + //var url="./w?sid="+encodeURIComponent($('#sid').val())+"&cmd=com.actionsoft.apps.coe.pal_ws_create&id="+id; + var title=t+流程资产; + //parent.asyncbox.open({id:'showOpenWs',url : url,width : 860,height : 360,title:title,modal:true}); + window.top.openBox("com.actionsoft.apps.coe.pal_ws_create","&id="+id,title,860,360); +} + +//停用流程资产 +function stopCoeWorkSpace(id,state){ + var str=启用; + if(state==1){ + str=停用; + } + if (confirm("确定" + str + 该流程资产+"吗?")) { + var params = { + id : id, + state : state + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_ws_stoporopen", + data : params, + success : function(msg) { + if (msg == "1") { + parent.parent.reloadChannel(); + reloadData(); + } else { + $.simpleAlert(变更状态失败请稍后重试); + } + document.getElementById("look_content_iframe").src=document.getElementById("look_content_iframe").src; + } + }); + } + +} + +//删除流程资产 +function delCoeWorkSpace(id){ + var options = { + title:"提示", + content:"确定要删除该流程资产吗?", + model:false, + onConfirm: function(){ + var params={ + id:id + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_ws_remove", + data : params, + success : function(msg) { + if(msg=="1"){ + $.simpleAlert(删除成功); + reloadData(); + jQuery("#look_content_iframe").attr("src",""); + }else if(msg=="-1"){ + $.simpleAlert(删除失败请稍后重试); + }else{ + $.simpleAlert(msg); + } + } + }); + } + }; + $.confirm(options); +} + +//刷新data +function reloadData(){ + initWsList(); +} + +function expData(id){ + var clientType="other"; + if(window.top.isIpad()){ + clientType="ipad"; + } + var params={ + id:id, + clientType:clientType + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_ws_exp", + data : params, + success : function(msg) { + if(window.top.isIpad() || window.top.isAndroid() || window.top.isiPhone()){ + downFile(encodeURI(msg)); + }else{ + jQuery("#downloadiframe").attr("src",encodeURI(msg)); + } + + } + }); +} +function downFile(src){ + var newWin=getNewTarget(); + // '../commons/wait.htm' + window.open(src,newWin); + + return false; +} +function getNewTarget(){ + var viewdate =new Date(); + var newWin = viewdate.getTime(); + return "iWork_"+newWin; +} +//上传 +function openUploadDialog(){ + var sessionId = document.getElementsByName('sid')[0].value; + var filter = '[["*.epa;","*.epa;"]]'; + FlexWindow.get("CC_Flex_File",{width:550,height:350}).show({sid:sessionId ,flag1:'Data',flag2:'coeData',rootDir:"tmp",maxFileSize:2*1024*1024,maxUpLength:1,filesToFilter:filter}); + return false; +} + +function uploadCallback(name,type,creator,creationDate,modificationDate,toUploadLength,index){ + var params={ + name:name + }; + jQuery.ajax({ + type : "POST", + url : "./w?sid=" + encodeURIComponent(jQuery('#sid').val()) + "&cmd=com.actionsoft.apps.coe.pal_ws_imp", + data : params, + success : function(msg) { + if(msg=="1"){ + $.simpleAlert(导入空间成功); + reloadData(); + }else if(msg.indexOf("-1")>-1){ + $.simpleAlert(导入空间失败请查看错误日志); + reloadData(); + }else{ + $.simpleAlert(msg); + reloadData(); + } + } + }); +} + +//打开流程分级 +function openProcessLevel(wsId,type){ + var sid=jQuery("#sid").val(); + var url=encodeURI("./w?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_processlevel_portal_page&wsId="+wsId+"&type="+type); + parent.jQuery("#coeContent").attr("src",url); +} +function getCookie (cookieName) { + if(document.cookie!=''){ + var cookieNames = document.cookie.split(';'); + for(i=0;i-1){ + return unescape(cookieNames[i].split('=')[1]); + } + } + } +} +/** + 设置Cookie +*/ +function setCookie (cookieName, cookieValue, expires, path, domain, secure) { + var Days = 30; + var exp = new Date(); + exp.setTime(exp.getTime() + Days*24*60*60*1000); + document.cookie = cookieName + "="+ escape (cookieValue) + ";expires=" + exp.toGMTString() + ('https:' == document.location.protocol ? ";secure" : ""); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.office.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.office.js new file mode 100644 index 00000000..2e003f18 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.office.js @@ -0,0 +1,64 @@ +$(document).ready(function(){ + setUIHeight(); + initTip($('*[title]')); + $("#projectPersonCount").html("("+userCount+""+人+")"); + try{ + if(wsBgUrl!=""){ + $(".officeCenter").css("background","url("+wsBgUrl+") no-repeat"); + $(".officeCenter").css("background-size","cover"); + $(".officeCenter").css("filter","progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+wsBgUrl+"',sizingMethod='scale')"); + + } + }catch(e){ + + } + $(".project").each(function(){ + var curProject = $(this); + var imgs = curProject.find(".imgBox img"); + //头像点击事件 + imgs.each(function(){ + $(this).bind("click",function(){ + parent.parent.openUserInfoDlg(用户信息,$(this).attr('userid')); + }); + }); + if(imgs.length>5){ + curProject.find(".boxslider").show(); + var isDown = true; + curProject.find("button").click(function(){ + if(isDown){ + curProject.find(".imgBox").css("height","auto"); + isDown = false; + $(this).css("background-image","url(../coe/css/images/arrowDoubleUp.gif)"); + }else{ + curProject.find(".imgBox").height(50); + isDown = true; + $(this).css("background-image","url(../coe/css/images/arrowDoubleDown.gif)"); + } + setLineMargin(curProject.parents("li")); + setUIHeight(); + }); + } + }); +}); +function setLineMargin(obj){ + if(!obj)return false; + obj.find(".projectLine").css("margin-top",obj.height()/2+10+"px"); +} +function setUIHeight(){ + var UIHeight = 0; + var lastH = 50; + $("#projectsUl li").each(function(){ + var liH = $(this).height(); + if ($(this).index() == $("#projectsUl li").length - 1) { + liH = liH/2+9; + lastH = liH; + } + UIHeight = UIHeight+liH; + }); + $("#projectsUl").height(UIHeight); + var frameH = $("#workspace").height()+lastH+10; + frameH = frameH<582?582:frameH; + $(".officeCenter").height(frameH); + parent.$("#coeContentiframe").height(frameH); +} + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.preview.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.preview.js new file mode 100644 index 00000000..2f7e2c81 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/coe.ws.preview.js @@ -0,0 +1,74 @@ +var bar = function (id,title,data){ + //展示的id + this.id = ''; + + //标题 + this.title = ''; + + //数据 + this.data = ''; + + //宽 + this.width = "100%"; + + //背景图片位置 + this.bgimg = '../coe/img/plan.gif'; + + //动画速度 + this.speed = 1000; + + //投票总数 + var num_all = 0; + this.show = function (){ + //添加一个table对象 + $("#"+this.id).append("
                                                ") + + $("#"+this.id+" table").append(""+this.title+"") + + //计算总数 + $(this.data).each(function(i,n){ + num_all += parseInt(n[1]); + }) + + var that = this; + + //起始 + var s_img = [0,-52,-104,-156,-208]; + //中间点起始坐标 + var c_img = [-312,-339,-367,-395,-420]; + //结束 + var e_img = [-26,-78,-130,-182,-234]; + var that = this; + var div; + $(this.data).each(function(i,n){ + + //计算比例 + var bili = (n[1]*100/num_all).toFixed(2); + + //计算图片长度, *0.96是为了给前后图片留空间 + var img = parseFloat(bili)*0.75; + + if(img>0) + { + div = "
                                                "; + } + else + { + div=''; + } + $("#"+that.id+" table").append(""+div+" "+n[0]+"["+n[1]+"] ") + }) + + this.play(); + } + + this.play = function (){ + var that = this; + $("#"+this.id+" div").each(function(i,n){ + if($(n).attr('fag')) + { + $(n).animate( { width: $(n).attr('fag')+'%'}, that.speed ) + } + }) + } +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/combobox/images/global-bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/combobox/images/global-bg.png new file mode 100644 index 00000000..cc695ce4 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/combobox/images/global-bg.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/combobox/jQuery.combobox.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/combobox/jQuery.combobox.css new file mode 100644 index 00000000..3ff522e7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/combobox/jQuery.combobox.css @@ -0,0 +1,60 @@ +@charset "utf-8"; + +.combobox-input{ + + float:left; + height:16px; + line-height: 18px; + background:#ffffff; + + /* + padding:2px 5px 2px 4px; + cursor:default; + border:1px solid #ccc; + border-right:0px;*/ + border:1px solid #fff; + -moz-border-radius: 5px 5px 5px 5px; + border-right:0px; + cursor: pointer; + font-size: 14px; +} +.combobox-input-select{ + + float:left; + text-decoration:none; + width:12px; + height:20px; + + /*cursor:default; + border:1px solid #ccc; + border-left:0px;*/ + cursor:pointer; + border:1px solid #fff; + -moz-border-radius: 5px 5px 5px 5px; + +} +.combobox-input-select:hover{ + text-decoration:none; + background:#FDEEB3; + border:1px solid #F1C43F; + /*margin-left:-1px;*/ +} +.combobox-input-select div{ + background:transparent url("images/global-bg.png") -39px -37px no-repeat;/* 50% 50% no-repeat;width:10px;height:5px;margin-top:7px;*/ + width:12px; + height:5px; + margin-top:7px; + +} +.combobox-dropdown{ + border:1px solid #ccc;background:#ffffff;padding:1px;cursor:default;display:none;position:absolute;z-index:1; + overflow:auto;max-height:350px; + box-shadow:4px 4px 8px #ccc;-moz-box-shadow:4px 4px 8px #ccc;-webkit-box-shadow:4px 4px 8px #ccc; + -moz-border-radius: 5px 5px 5px 5px; +} +.combobox-dropdown-item{ + border:1px solid transparent;padding:3px 5px 3px 3px;font-size:12px;color:#333; +} +.combobox-dropdown-item:hover{ + background:#FDEEB3;border:1px solid #F1C43F; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/combobox/jQuery.combobox.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/combobox/jQuery.combobox.js new file mode 100644 index 00000000..05782d2b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/combobox/jQuery.combobox.js @@ -0,0 +1,217 @@ + +$.fn.extend({ + + disable:function(){ + $(this).attr("disabled",true); + for(var i = 0 ; i < $(this).length; i++){ + var dom = $(this)[i]; + if($(dom).hasClass("bar-container")){ + $(dom).removeClass("bar-container"); + $(dom).addClass("bar-container-disable"); + } + $(this).unbind("click"); + } + }, + + enable:function(fn){ + $(this).attr("disabled",false); + for(var i = 0 ; i < $(this).length; i++){ + var dom = $(this)[i]; + if($(dom).hasClass("bar-container-disable")){ + $(dom).removeClass("bar-container-disable"); + $(dom).addClass("bar-container"); + } + } + if(fn){ + fn(); + } + }, + + toggleBar:function(){ + if($(this).attr("class") == "bar-container-select"){ + $(this).attr("class","bar-container"); + }else{ + $(this).attr("class","bar-container-select"); + } + + }, + + combobox:function(options,val){ + if(typeof options == "string"){ + var method = options; + if(method == "setValue"){ + var comboId = $(this).attr("id"); + $(this).val(val); + var text = $(this).find("option:selected").text(); + $("input#"+comboId+"-combobox").val(text); + } else if (method == "getValue") { + return $(this).data("selectValue"); + } else if (method == "getText") { + return $(this).data("selectText"); + } + }else{ + options = options ? options : {}; + var select = $(this); + var text = select.find("[selected]").text(); + var value = select.find("[selected]").attr("value"); + + if(text==""){//解决ie8获取不到selected的bug + var id = $(this).attr("id"); + if(id){ + var obj = document.getElementById(id); + if(obj){ + var index = obj.selectedIndex; + if(index!=-1){ + text = $(select.children()[index]).text(); + value = $(select.children()[index]).attr("value"); + } + } + } + } + + if(text == ""){ + text = $(select.children()[0]).text(); + value = $(select.children()[0]).attr("value"); + } + getComboboxData(select,value,text); + var position = { + left:select.position().left, + top:select.offset().top + select.height()+ 2 + }; + select.hide(); + var width = select.width() ; + var ua = navigator.userAgent; + if(ua.indexOf('Android') > -1){ + + }else{ + width = select.width() - 21; + } + var selectId = select.attr("id")+'-combobox'; + select.after("
                                                ") + var dropDownSelect = $("
                                                ").appendTo("body"); + if(options.editable == false){ + $("input#"+selectId).bind("keydown",function(){ + return false; + }); + } + var items = select.children(); + for(var i = 0 ; i < items.length; i++){ + var item = $(items[i]); + dropDownSelect.append("
                                                "+item.html()+"
                                                "); + } + dropDownSelect.css(position); + $("div#"+selectId+",input#"+selectId).bind("click",function(){ + //重新定位左边,防止出现滚动条等情况 + var _left = jQuery(this).parent().parent().offset().left; + var _top = jQuery(this).parent().parent().offset().top + jQuery(this).parent().height(); + setTimeout(function(){ + dropDownSelect.css("left",_left); + dropDownSelect.css("top",_top); + dropDownSelect.show(); + /*$(document).bind("mouseup",function(){ + dropDownSelect.hide(); + //$(document).unbind("click"); //太危险,可能导致意想不到的结果 + });*/ + setDivTimeOutColse(dropDownSelect); + },100); + + }); + + $("div[name=combobox-dropdown-item-" + selectId + "]").each(function(){ + jQuery(this).unbind("mouseup").bind("mouseup",function(){ + var selectValue = $(this).attr("value"); + var selectText = $(this).text(); + getComboboxData(select,selectValue,selectText); + $("input#processUUID").val(selectValue); + $("input#"+selectId).val(selectText); + if(options.onSelect){ + options.onSelect(selectValue,selectText); + } + dropDownSelect.hide(); + //绑定处理函数 + if(typeof(eval(reloadAnalysisReport)) == "function"){ + reloadAnalysisReport(); + } + }); + }); + } + + function getComboboxData(obj,val,text){ + obj.data("selectValue",val); + obj.data("selectText",text); + } + + + /* 定时关闭指定对象 */ + function setDivTimeOutColse(objId, millisec){ + if(!objId){ + return false; + } + if(!millisec){ + millisec = 500; + } + var dimensionTabsToolsTimeOutId; //定时关闭延时ID + jQuery(objId).unbind("mouseenter").unbind("mouseleave"); + jQuery(objId).hover(function(){ + if(dimensionTabsToolsTimeOutId){ + clearTimeout(dimensionTabsToolsTimeOutId); + dimensionTabsToolsTimeOutId = ""; + } + },function(){ + if(!dimensionTabsToolsTimeOutId){ + dimensionTabsToolsTimeOutId = setTimeout(function(){ + jQuery(objId).hide(); + dimensionTabsToolsTimeOutId = ""; + },millisec); + } + }); + } + + }, + + colorPicker:function(options){ + var picker; + options = options ? options : {}; + if(!$("div#color-picker").length){ + picker = $("
                                                ").appendTo("body"); + }else{ + picker = $("div#color-picker"); + } + var target = $(this); + target.bind("click",function(){ + if(options.position){ + picker.css(options.position); + }else{ + picker.css({ + top:target.offset().top + target.height() + 5 +"px", + left:target.offset().left + }); + } + //扩展菜单 + if(options.extend && options.extend.length > 0){ + for(var extendNum = 0; extendNum < options.extend.length; extendNum ++){ + var ex = options.extend[extendNum]; + $("#color-picker-extendarea").append("
                                                "+ex.title+"
                                                "); + } + }else{ + $("#color-picker-extendarea").empty(); + } + setTimeout(function(){ + picker.show(); + $(document).bind("mouseup", function(){ + picker.hide(); + $(document).unbind("click"); + }); + }, 100); + $(".color-item").unbind("click"); + $(".color-item").bind("click",function(){ + var color16 = $(this).attr("color16"); + var colorHtml = $(this).attr("colorHtml"); + target.find('.bar-color').css("background",colorHtml); + if(options.onPicked){ + options.onPicked(color16, colorHtml); + } + }); + }); + } +}); diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/common/public.pal.tree.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/common/public.pal.tree.js new file mode 100644 index 00000000..f2b22739 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/common/public.pal.tree.js @@ -0,0 +1,207 @@ +//渲染流程树 +var palTree = { + treeData: [], + repositoryTree: {}, + opt: { + checkbox: true, + sources: ["PALID"], //PALNAME, PALID, PALDEPTNAME, PALDEPTID, PALNUM, VERSIONID, WSID + targets: [], + callback: function(){}, + type: "dept", + onlyleaf: false, //是否只有叶子节点可选 + selectLevel: "*", //可以选择的层级,*表示所有都可以选择,多个用逗号隔开 + cannotSelectLevel: "-", //不可以选择的层级,-表示没有不能选择的层级,多个用逗号隔开 + allowRoot: false, + wsId : "" + }, + init : function(obj, options) { + if (options) { + if (options.checkbox != undefined) { + this.opt.checkbox = options.checkbox; + } + if (options.sources != null) { + this.opt.sources = options.sources.split(","); + } + if (options.targets != null) { + this.opt.targets = options.targets.split(","); + } else { + this.opt.targets = [obj.attr("id")]; + } + if (options.callback) { + this.opt.callback = options.callback; + } + if (options.type) { + this.opt.type = options.type; + } + if (options.onlyleaf != undefined) { + this.opt.onlyleaf = options.onlyleaf; + } + if (options.selectLevel != undefined) { + this.opt.selectLevel = options.selectLevel; + } + if (options.cannotSelectLevel != undefined) { + this.opt.cannotSelectLevel = options.cannotSelectLevel; + } + if (options.allowRoot != undefined) { + this.opt.allowRoot = options.allowRoot; + } + if (options.wsId != undefined && options.wsId != "") { + this.opt.wsId = options.wsId; + } + } + var _$this = this; + obj.buttonedit({ + onClick: function(){ + if ($("div#palRepositoryTreeDlg").length == 0) { + var dlgHtml = ""; + $("body").append(dlgHtml); + } else { + $("#palRepositoryTreeUl").empty(); + } + + $("#palRepositoryTreeDlg").dialog({"title": "选择流程", + "buttons": [ + {text:'确定',cls:"blue",handler:function(){ + var nodes = []; + if (_$this.opt.checkbox) { + nodes = _$this.repositoryTree.getCheckedNodes(); + } else { + nodes.push(_$this.repositoryTree.getSelectedNode()); + } + var PALNAME = []; + var PALID = []; + var PALDEPTNAME = []; + var PALDEPTID = []; + var PALNUM = []; + var VERSIONID = []; + var WSID = []; + if (nodes.length > 0) { + for(var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + if (node.id == "process" && !palTree.opt.allowRoot) { + $.simpleAlert("请选择具体流程"); + return false; + } + if (palTree.opt.onlyleaf && node.isBottomLevel == 0) { + $.simpleAlert("请选择底层流程"); + return false; + } + if (palTree.opt.selectLevel != "*") { + var selectLevels = palTree.opt.selectLevel.split(","); + var flag = false; + for (var index = 0; index < selectLevels.length; index++) { + if (Number(selectLevels[index]) == node.plLevel) { + flag = true; + break; + } + } + if (!flag) { + $.simpleAlert("不能选择流程[" + node.name + "]"); + return; + } + } + if (palTree.opt.cannotSelectLevel != "-") { + var cannotSelectLevels = palTree.opt.cannotSelectLevel.split(","); + var flag = true; + for (var index = 0; index < cannotSelectLevels.length; index++) { + if (Number(cannotSelectLevels[index]) == node.plLevel) { + flag = false; + break; + } + } + if (!flag) { + $.simpleAlert("不能选择流程[" + node.name + "]"); + return; + } + } + + PALNAME.push(node.name); + PALID.push(node.id); + PALDEPTNAME.push(node.dutyDeptName); + PALDEPTID.push(node.dutyDeptId); + PALNUM.push(node.plNo); + VERSIONID.push(node.versionId == undefined ? node.id : node.versionId); + WSID.push(node.wsId); + } + } + var targets = _$this.opt.targets; + var sources = _$this.opt.sources; + if (targets.length > 0) { + for (var j = 0; j < targets.length; j++) { + var targetId = targets[j]; + var source = sources[j].trim(); + $("#" + targetId).val(eval(source + ".join(\",\")")); + } + } + if (typeof(_$this.opt.callback) == "function") { + _$this.opt.callback(); + } + }}, + {text:'取消',handler:function(){$("#palRepositoryTreeDlg").dialog("close");}} + ] + }); + + var cmd = "com.actionsoft.apps.coe.pal_repository_get_pal_treedata_by_dept"; + if (_$this.opt.type != "dept") { + cmd = "com.actionsoft.apps.coe.pal_repository_get_pal_treedata"; + } + awsui.ajax.request({ + url : "./jd", + method : "POST", + data : {sid: $("#sid").val(), + cmd: cmd, + wsId : _$this.opt.wsId, + categorys: "process"}, + ok : function(r) { + _$this.treeData = r.data.treeData; + var setting = _$this.getSetting(); + _$this.repositoryTree = awsui.tree.init($("#palRepositoryTreeUl"), setting); + _$this.repositoryTree.expandNode($("a[tbindex=process]"), true); + }, + err:function(r){ + } + }); + } + }); + }, + + getSetting: function(clickEvent) { + var setting = { + checkbox: palTree.opt.checkbox, + checkInherit: false, + sort : true, + dblClickToExpand : true, + event : { + onClick : function(){}, + beforeExpand : palTree.loadPalTreeData, + afterLoad : palTree.afterPalTreeDataLoad + }, + dataModel: { + data : palTree.treeData + } + }; + return setting; + }, + + loadPalTreeData: function(treeNode){ + // 如果是父节点并且存在子节点执行加载 + if (treeNode && (treeNode.id.length == 36 && palTree.opt.type == "dept" || palTree.opt.type == "process")) { + var dataModel = { + url : "./w?sid=" + $("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_treejson&pid=" + treeNode.id + + "&wsid=" + treeNode.wsId, + method : "POST", + dataType : "json" + } + palTree.repositoryTree.refreshNode({ + id : treeNode.id, + dataModel : dataModel + }); + } + }, + + afterPalTreeDataLoad: function(){ + $("a[tabindex=process]").trigger("click.nodeClick"); + } +} + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/datepicker/coe.datepicker.custom.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/datepicker/coe.datepicker.custom.js new file mode 100644 index 00000000..9c5bbb61 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/datepicker/coe.datepicker.custom.js @@ -0,0 +1,531 @@ +var datepickerStartClick = 1; +$(function() { + $( "#datepicker" ).datepicker({ + aws:true, + numberOfMonths: 2, + maxDate: "-1", + onSelect:function(data,inst){ + switch(datepickerStartClick){ + case 1: + //赋值 + var checked =jQuery("#compareDate").attr("checked"); + jQuery("#datepickerStart").val(data); + jQuery("#datepickerEnd").addClass("inputSelect"); + jQuery("#datepickerStart").removeClass("inputSelect"); + if(checked){ + jQuery("#datepickerCompareStart").removeClass("inputSelect"); + jQuery("#datepickerCompareEnd").removeClass("inputSelect"); + } + jQuery("#datepickerEnd").val(data); + getCompareDate(); + datepickerStartClick = 2; + break; + case 2: + if(compareTimeSize(data,jQuery("#datepickerStart").val())){ + var checked =jQuery("#compareDate").attr("checked"); + + if(checked){ + var className = jQuery("#datepickerCompareStart").attr("class"); + if(className.indexOf("default")!=-1){ + jQuery("#datepickerStart").addClass("inputSelect"); + jQuery("#datepickerEnd").removeClass("inputSelect"); + jQuery("#datepickerCompareStart").removeClass("inputSelect"); + jQuery("#datepickerCompareEnd").removeClass("inputSelect"); + datepickerStartClick = 1; + }else{ + jQuery("#datepickerCompareStart").addClass("inputSelect"); + jQuery("#datepickerEnd").removeClass("inputSelect"); + jQuery("#datepickerStart").removeClass("inputSelect"); + jQuery("#datepickerCompareEnd").removeClass("inputSelect"); + datepickerStartClick = 3; + } + + + }else{ + jQuery("#datepickerStart").addClass("inputSelect"); + jQuery("#datepickerEnd").removeClass("inputSelect"); + datepickerStartClick = 1; + } + jQuery("#datepickerEnd").val(data); + //改变颜色 + getCompareDate(); + } + break; + case 3: + jQuery("#datepickerCompareStart").val(data); + jQuery("#datepickerCompareEnd").addClass("inputSelect"); + jQuery("#datepickerCompareStart").removeClass("inputSelect"); + jQuery("#datepickerEnd").removeClass("inputSelect"); + jQuery("#datepickerStart").removeClass("inputSelect"); + jQuery("#datepickerCompareEnd").val(data); + datepickerStartClick = 4; + break; + case 4: + if(compareTimeSize(data,jQuery("#datepickerCompareStart").val())){ + jQuery("#datepickerStart").addClass("inputSelect"); + jQuery("#datepickerCompareEnd").removeClass("inputSelect"); + jQuery("#datepickerCompareStart").removeClass("inputSelect"); + jQuery("#datepickerEnd").removeClass("inputSelect"); + jQuery("#datepickerCompareEnd").val(data); + //改变颜色 + datepickerStartClick = 1; + } + } + changeColor(); + },onAfterUpdateDate:function(){ //自定义事件 + exChangeColor(); + changeColor(); + } + + + }); + /* 绑定input开始事件 */ + jQuery("#datepickerStart").unbind("click").bind("click",function(){ + datepickerStartClick = 1; + jQuery("#datepickerStart").addClass("inputSelect"); + jQuery("#datepickerEnd").removeClass("inputSelect"); + jQuery("#datepickerCompareStart").removeClass("inputSelect"); + jQuery("#datepickerCompareEnd").removeClass("inputSelect"); + }); + /* 绑定input结束事件 */ + jQuery("#datepickerEnd").unbind("click").bind("click",function(){ + datepickerStartClick = 2; + jQuery("#datepickerEnd").addClass("inputSelect"); + jQuery("#datepickerStart").removeClass("inputSelect"); + jQuery("#datepickerCompareStart").removeClass("inputSelect"); + jQuery("#datepickerCompareEnd").removeClass("inputSelect"); + }); + /* 绑定input开始事件 */ + jQuery("#datepickerCompareStart").unbind("click").bind("click",function(){ + datepickerStartClick = 3; + jQuery("#datepickerCompareStart").addClass("inputSelect"); + jQuery("#datepickerCompareEnd").removeClass("inputSelect"); + jQuery("#datepickerStart").removeClass("inputSelect"); + jQuery("#datepickerEnd").removeClass("inputSelect"); + }); + /* 绑定input结束事件 */ + jQuery("#datepickerCompareEnd").unbind("click").bind("click",function(){ + datepickerStartClick = 4; + jQuery("#datepickerCompareEnd").addClass("inputSelect"); + jQuery("#datepickerCompareStart").removeClass("inputSelect"); + jQuery("#datepickerStart").removeClass("inputSelect"); + jQuery("#datepickerEnd").removeClass("inputSelect"); + }); + // 比较日期的focus + jQuery("#datepickerCompareStart").focus(function(){ + jQuery("#compareDiv input.default").removeClass("default"); + }) + jQuery("#datepickerCompareEnd").focus(function(){ + jQuery("#compareDiv input.default").removeClass("default"); + }) + /* 绑定出发事件 */ + jQuery("#navigationInterval").unbind("click").bind("click",function(){ + var disp = jQuery(".navigationDatepickerDivAws").css("display"); + if( disp == "none" ){ + // datepickerStartClick = false; + // jQuery("#datepickerStart").addClass("inputSelect"); + // jQuery("#datepickerEnd").removeClass("inputSelect"); + var offset = jQuery(this).offset(); + jQuery("div.navigationDatepickerDivAws").css("left",offset.left + jQuery(this).width() - jQuery(".navigationDatepickerDivAws").width()); + jQuery("div.navigationDatepickerDivAws").css("top",jQuery(this).height() + offset.top); + //TODO 显示日期设置选择位置 + //setDatepickerGroupPosition(); + jQuery(".navigationDatepickerDivAws").show(); + //改变图标 + jQuery("#navigationInterval").find(".report-navigation-time-interval-downarrow").removeClass("report-navigation-icon-downarrow-black-down").addClass("report-navigation-icon-downarrow-black-up"); + + setDivTimeOutColse(".navigationDatepickerDivAws"); + } else { + jQuery(".navigationDatepickerDivAws").hide(); + jQuery("#navigationInterval").find(".report-navigation-time-interval-downarrow").addClass("report-navigation-icon-downarrow-black-down").removeClass("report-navigation-icon-downarrow-black-up"); + } + + + }); + /* 绑定应用事件 */ + jQuery("#dateButton").unbind("click").bind("click",function(){ + if(!isDateString(jQuery("#datepickerStart").val())) + { + window.top.$.simpleAlert(开始日期格式不正确); + return false + } + if(!isDateString(jQuery("#datepickerEnd").val())) + { + window.top.$.simpleAlert(结束日期格式不正确); + return false + } + var day =compareDate(jQuery("#datepickerStart").val(),jQuery("#datepickerEnd").val()); + if(day<0){ + window.top.$.simpleAlert(开始日期不能大于结束日期); + return false; + } + var checked =jQuery("#compareDate").attr("checked"); + if(checked){ + if(!isDateString(jQuery("#datepickerCompareStart").val())) + { + window.top.$.simpleAlert(开始日期格式不正确); + return false + } + if(!isDateString(jQuery("#datepickerCompareEnd").val())) + { + window.top.$.simpleAlert(结束日期格式不正确); + return false + } + var day =compareDate(jQuery("#datepickerCompareStart").val(),jQuery("#datepickerCompareEnd").val()); + if(day<0){ + window.top.$.simpleAlert(开始日期不能大于结束日期); + return false; + } + } + dateButtonDatepickerSubmit(); + }); + // 比较日期的复选框 + jQuery("#compareDate").unbind("click").bind("click",function(){ + $("#compareDiv").toggleClass("compare-no-active"); + $("#datepickerCompareStart,#datepickerCompareEnd").addClass("default"); + exChangeColor(); + changeColor(); + }); + + exChangeColor(); + changeColor(); + infoDatepickerOptions(); +}); + +function isDateString(sDate) +{ + var mp=/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})/ + + var matchArray = sDate.match(mp); + if (matchArray==null) return false; + var iaMonthDays = [31,28,31,30,31,30,31,31,30,31,30,31]; + var iaDate = new Array(3); + var year, month, day; + + iaDate = sDate.split("-"); + year = parseFloat(iaDate[0]) + month = parseFloat(iaDate[1]) + day=parseFloat(iaDate[2]) + if (year < 1900 || year > 3000) return false; + if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1]=29; + if (month < 1 || month > 12) return false; + if (day < 1 || day > iaMonthDays[month - 1]) return false; + return true; +} + +function setDatepickerGroupPosition(){ + var datepickerEnd = jQuery("#datepickerEnd").val(); + $( "#datepicker" ).datepicker({defaultDate:datepickerEnd}); +} + +/* 初始化所有选项事件 */ +function infoDatepickerOptions(){ + jQuery(".navigationDatepickerDivAws").find(".dateSet").find(".options").find("span").each(function(){ + jQuery(this).unbind("click").bind("click",function(){ + var dateval = jQuery(this).attr("dateval"); + var dates = dateval.split(","); + jQuery("#datepickerStart").val(dates[0]); + jQuery("#datepickerEnd").val(dates[1]); + dateButtonDatepickerSubmit(); + }); + }); +} +/* 初始化 */ +function infoDatepickerInput(){ + //将数据写入 TODO + var niStart = jQuery("#navigationIntervalStart").val(); + var niEnd = jQuery("#navigationIntervalEnd").val(); + if(niStart && niEnd){ + jQuery("#datepickerStart").val(niStart); + jQuery("#datepickerEnd").val(niEnd); + } +} + +/* 提交数据 */ +function dateButtonDatepickerSubmit(){ + var datepickerStart = jQuery("#datepickerStart").val(); + var datepickerEnd = jQuery("#datepickerEnd").val(); + var datepickerCompareStart = ""; + var datepickerCompareEnd = ""; + if($("#compareDate").attr("checked")){ + datepickerCompareStart = jQuery("#datepickerCompareStart").val(); + datepickerCompareEnd = jQuery("#datepickerCompareEnd").val(); + } + $("#dateCompareStart").val(datepickerCompareStart); + $("#dateCompareEnd").val(datepickerCompareEnd); + jQuery("#navigationIntervalStart").text(datepickerStart); + jQuery("#navigationIntervalEnd").text(datepickerEnd); + jQuery(".navigationDatepickerDivAws").hide(); + changeColor(); + //触发表单时间 + reloadAnalysisReport(); +} +// 获得 比较的时间段 +function getCompareDate(){ + var datepickerStart = $("#datepickerStart").val(), + datepickerEnd = $("#datepickerEnd").val(), + start = StringToDate(datepickerStart), + end = StringToDate(datepickerEnd), + diff = start.DateDiff("d",datepickerEnd); + start.setDate(start.getDate()-1); + end.setDate(end.getDate()-2*diff-1); + $("#datepickerCompareStart").val(end.format("yyyy-MM-dd")); + $("#datepickerCompareEnd").val(start.format("yyyy-MM-dd")); +} +//+--------------------------------------------------- +//| 字符串转成日期类型 +//| 格式 MM/dd/YYYY MM-dd-YYYY YYYY/MM/dd YYYY-MM-dd +//+--------------------------------------------------- +function StringToDate(DateStr) +{ + + var converted = Date.parse(DateStr); + var myDate = new Date(converted); + if (isNaN(myDate)) + { + //var delimCahar = DateStr.indexOf('/')!=-1?'/':'-'; + var arys= DateStr.split('-'); + myDate = new Date(arys[0],--arys[1],arys[2]); + } + return myDate; +} +//+--------------------------------------------------- +//| 比较日期差 dtEnd 格式为日期型或者 有效日期格式字符串 +//+--------------------------------------------------- +Date.prototype.DateDiff = function(strInterval, dtEnd) { + var dtStart = this; + if (typeof dtEnd == 'string' )//如果是字符串转换为日期型 + { + dtEnd = StringToDate(dtEnd); + } + switch (strInterval) { + case 's' :return parseInt((dtEnd - dtStart) / 1000); + case 'n' :return parseInt((dtEnd - dtStart) / 60000); + case 'h' :return parseInt((dtEnd - dtStart) / 3600000); + case 'd' :return parseInt((dtEnd - dtStart) / 86400000); + case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7)); + case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1); + case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear(); + } +} + +function compareDate( startDate, endDate){ + var start =StringToDate(startDate); + var end =StringToDate(endDate); + return start.DateDiff("d",end); +} +//+--------------------------------------------------- +//| 字符串转成日期类型 +//| 格式 MM/dd/YYYY MM-dd-YYYY YYYY/MM/dd YYYY-MM-dd +//+--------------------------------------------------- +function StringToDate(DateStr) +{ + + var converted = Date.parse(DateStr); + var myDate = new Date(converted); + if (isNaN(myDate)) + { + //var delimCahar = DateStr.indexOf('/')!=-1?'/':'-'; + var arys= DateStr.split('-'); + myDate = new Date(arys[0],--arys[1],arys[2]); + } + return myDate; +} +//+--------------------------------------------------- +//| 日期输出字符串,重载了系统的toString方法 +//+--------------------------------------------------- +Date.prototype.toString = function(showWeek) +{ + var myDate= this; + var str = myDate.toLocaleDateString(); + if (showWeek) + { + var Week = ['日','一','二','三','四','五','六']; + str += ' 星期' + Week[myDate.getDay()]; + } + return str; +} +Date.prototype.format = function(mask) { + + var d = this; + + var zeroize = function (value, length) { + + if (!length) length = 2; + + value = String(value); + + for (var i = 0, zeros = ''; i < (length - value.length); i++) { + + zeros += '0'; + + } + + return zeros + value; + + }; + + return mask.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])\1?|[lLZ])\b/g, function($0) { + + switch($0) { + + case 'd': return d.getDate(); + + case 'dd': return zeroize(d.getDate()); + + case 'ddd': return ['Sun','Mon','Tue','Wed','Thr','Fri','Sat'][d.getDay()]; + + case 'dddd': return ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'][d.getDay()]; + + case 'M': return d.getMonth() + 1; + + case 'MM': return zeroize(d.getMonth() + 1); + + case 'MMM': return ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'][d.getMonth()]; + + case 'MMMM': return ['January','February','March','April','May','June','July','August','September','October','November','December'][d.getMonth()]; + + case 'yy': return String(d.getFullYear()).substr(2); + + case 'yyyy': return d.getFullYear(); + + case 'h': return d.getHours() % 12 || 12; + + case 'hh': return zeroize(d.getHours() % 12 || 12); + + case 'H': return d.getHours(); + + case 'HH': return zeroize(d.getHours()); + + case 'm': return d.getMinutes(); + + case 'mm': return zeroize(d.getMinutes()); + + case 's': return d.getSeconds(); + + case 'ss': return zeroize(d.getSeconds()); + + case 'l': return zeroize(d.getMilliseconds(), 3); + + case 'L': var m = d.getMilliseconds(); + + if (m > 99) m = Math.round(m / 10); + + return zeroize(m); + + case 'tt': return d.getHours() < 12 ? 'am' : 'pm'; + + case 'TT': return d.getHours() < 12 ? 'AM' : 'PM'; + + case 'Z': return d.toUTCString().match(/[A-Z]+$/); + + // Return quoted strings with the surrounding quotes removed + + default: return $0.substr(1, $0.length - 2); + + } + + }); + +}; +/* 比较时间大小 */ +function compareTimeSize(dataPre,dataEnd){ + var preArr = dataPre.split('-'); + var dataEndArr = dataEnd.split('-'); + + var preY = Number(preArr[0]); + var preM = Number(preArr[1]); + var preD = Number(preArr[2]); + var endY = Number(dataEndArr[0]); + var endM = Number(dataEndArr[1]); + var endD = Number(dataEndArr[2]); + + if(preY > endY){ //不同年 + return true; + } else if (preY < endY) { + return false; + } else { + if(preM > endM){ //不同月 + return true; + } else if (preM < endM) { + return false; + } else { + if(preD >= endD){ //不同月 + return true; + } else { + return false;//相同暂定返回 + } + } + } +} + +/* 改变相应的颜色 */ +function changeColor(){ + jQuery("#datepicker").find("a.state-default").each(function(){ + jQuery(this).removeClass("state-active").removeClass("state-second").removeClass("state-three"); + var datepickerStart = jQuery("#datepickerStart").val(); + var datepickerEnd = jQuery("#datepickerEnd").val(); + if(datepickerStart && datepickerStart != ""){ + var current = jQuery(this).next().val(); + if(compareTimeSize(current,datepickerStart) && compareTimeSize(datepickerEnd,current)) { + jQuery(this).addClass("state-active"); + } + + } + //勾选日期对比 + var $compare = jQuery("#compareDate"); + var $dpCompareS = jQuery("#datepickerCompareStart"); + var $dpCompareE = jQuery("#datepickerCompareEnd"); + if($compare && $compare.attr("checked")){ + var dpCompareS = $dpCompareS.val(), + dpCompareE = $dpCompareE.val(); + if(compareTimeSize(current,dpCompareS) && compareTimeSize(dpCompareE,current)) { + jQuery(this).addClass("state-second"); + } + var className = jQuery(this).attr("class"); + if(className.indexOf("state-active")!=-1 && className.indexOf("state-second")!=-1){ + jQuery(this).addClass("state-three"); + } + } + //jQuery(this).addClass("state-active"); + }); +} + +function clearColor(){ + jQuery("#datepicker").find("a.state-default").each(function(){ + jQuery(this).removeClass("state-active"); + }); +} + +/* 清除所有颜色 */ +function exChangeColor(){ + jQuery("#datepicker").find("a.ui-state-default").each(function(){ + jQuery(this).removeClass(); + jQuery(this).addClass("state-default"); + }); +} + +/* 定时关闭指定对象 */ +function setDivTimeOutColse(objId, millisec){ + if(!objId){ + return false; + } + if(!millisec){ + millisec = 500; + } + var dimensionTabsToolsTimeOutId; //定时关闭延时ID + jQuery(objId).unbind("mouseenter").unbind("mouseleave"); + jQuery(objId).hover(function(){ + if(dimensionTabsToolsTimeOutId){ + clearTimeout(dimensionTabsToolsTimeOutId); + dimensionTabsToolsTimeOutId = ""; + } + },function(){ + if(!dimensionTabsToolsTimeOutId){ + dimensionTabsToolsTimeOutId = setTimeout(function(){ + jQuery(objId).hide(); + dimensionTabsToolsTimeOutId = ""; + },millisec); + } + }); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/datepicker/coe.datepicker.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/datepicker/coe.datepicker.js new file mode 100644 index 00000000..3f54ea8b --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/datepicker/coe.datepicker.js @@ -0,0 +1,285 @@ +var datepickerStartClick = false; +var datepickerEndClick = false; +$(function() { + $( "#datepicker" ).datepicker({ + aws:true, + numberOfMonths: 3, + maxDate: "-1", + onSelect:function(data,inst){ + + if(!datepickerStartClick){ //第一个没值 + + //赋值 + jQuery("#datepickerStart").val(data); + + jQuery("#datepickerEnd").addClass("inputSelect"); + jQuery("#datepickerStart").removeClass("inputSelect"); + jQuery("#datepickerEnd").val(data); + datepickerStartClick = true; + } else { + if(compareTimeSize(data,jQuery("#datepickerStart").val())){ + jQuery("#datepickerStart").addClass("inputSelect"); + jQuery("#datepickerEnd").removeClass("inputSelect"); + jQuery("#datepickerEnd").val(data); + //改变颜色 + datepickerStartClick = false; + } + } + changeColor(); + },onAfterUpdateDate:function(){ //自定义事件 + exChangeColor(); + changeColor(); + } + + + }); + /* 绑定input开始事件 */ + jQuery("#datepickerStart").unbind("click").bind("click",function(){ + datepickerStartClick = false; + jQuery("#datepickerStart").addClass("inputSelect"); + jQuery("#datepickerEnd").removeClass("inputSelect"); + }); + /* 绑定input结束事件 */ + jQuery("#datepickerEnd").unbind("click").bind("click",function(){ + datepickerStartClick = true; + jQuery("#datepickerEnd").addClass("inputSelect"); + jQuery("#datepickerStart").removeClass("inputSelect"); + }); + + /* 绑定出发事件 */ + jQuery("#navigationInterval").unbind("click").bind("click",function(){ + var disp = jQuery(".navigationDatepickerDivAws").css("display"); + if( disp == "none" ){ + datepickerStartClick = false; + jQuery("#datepickerStart").addClass("inputSelect"); + jQuery("#datepickerEnd").removeClass("inputSelect"); + var offset = jQuery(this).offset(); + jQuery("div.navigationDatepickerDivAws").css("left",offset.left + jQuery(this).width() - jQuery(".navigationDatepickerDivAws").width()); + jQuery("div.navigationDatepickerDivAws").css("top",jQuery(this).height() + offset.top); + //TODO 显示日期设置选择位置 + //setDatepickerGroupPosition(); + jQuery(".navigationDatepickerDivAws").show(); + //改变图标 + jQuery("#navigationInterval").find(".report-navigation-time-interval-downarrow").removeClass("report-navigation-icon-downarrow-black-down").addClass("report-navigation-icon-downarrow-black-up"); + + setDivTimeOutColse(".navigationDatepickerDivAws"); + } else { + jQuery(".navigationDatepickerDivAws").hide(); + jQuery("#navigationInterval").find(".report-navigation-time-interval-downarrow").addClass("report-navigation-icon-downarrow-black-down").removeClass("report-navigation-icon-downarrow-black-up"); + } + + + }); + /* 绑定应用事件 */ + jQuery("#dateButton").unbind("click").bind("click",function(){ + if(!isDateString(jQuery("#datepickerStart").val())) + { + window.top.$.simpleAlert(开始日期格式不正确); + return false + } + if(!isDateString(jQuery("#datepickerEnd").val())) + { + window.top.$.simpleAlert(结束日期格式不正确); + return false + } + var day =compareDate(jQuery("#datepickerStart").val(),jQuery("#datepickerEnd").val()); + if(day<0){ + window.top.$.simpleAlert(开始日期不能大于结束日期); + return false; + } + dateButtonDatepickerSubmit(); + }); + exChangeColor(); + changeColor(); + infoDatepickerOptions(); +}); +function isDateString(sDate) +{ + var mp=/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})/ + + var matchArray = sDate.match(mp); + if (matchArray==null) return false; + var iaMonthDays = [31,28,31,30,31,30,31,31,30,31,30,31]; + var iaDate = new Array(3); + var year, month, day; + + iaDate = sDate.split("-"); + year = parseFloat(iaDate[0]) + month = parseFloat(iaDate[1]) + day=parseFloat(iaDate[2]) + if (year < 1900 || year > 3000) return false; + if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1]=29; + if (month < 1 || month > 12) return false; + if (day < 1 || day > iaMonthDays[month - 1]) return false; + return true; +} +function compareDate( startDate, endDate){ + var start =StringToDate(startDate); + var end =StringToDate(endDate); + return start.DateDiff("d",end); +} +//+--------------------------------------------------- +//| 字符串转成日期类型 +//| 格式 MM/dd/YYYY MM-dd-YYYY YYYY/MM/dd YYYY-MM-dd +//+--------------------------------------------------- +function StringToDate(DateStr) +{ + + var converted = Date.parse(DateStr); + var myDate = new Date(converted); + if (isNaN(myDate)) + { + //var delimCahar = DateStr.indexOf('/')!=-1?'/':'-'; + var arys= DateStr.split('-'); + myDate = new Date(arys[0],--arys[1],arys[2]); + } + return myDate; +} + +//+--------------------------------------------------- +//| 比较日期差 dtEnd 格式为日期型或者 有效日期格式字符串 +//+--------------------------------------------------- +Date.prototype.DateDiff = function(strInterval, dtEnd) { + var dtStart = this; + if (typeof dtEnd == 'string' )//如果是字符串转换为日期型 + { + dtEnd = StringToDate(dtEnd); + } + switch (strInterval) { + case 's' :return parseInt((dtEnd - dtStart) / 1000); + case 'n' :return parseInt((dtEnd - dtStart) / 60000); + case 'h' :return parseInt((dtEnd - dtStart) / 3600000); + case 'd' :return parseInt((dtEnd - dtStart) / 86400000); + case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7)); + case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1); + case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear(); + } +} + + +function setDatepickerGroupPosition(){ + var datepickerEnd = jQuery("#datepickerEnd").val(); + $( "#datepicker" ).datepicker({defaultDate:datepickerEnd}); +} + +/* 初始化所有选项事件 */ +function infoDatepickerOptions(){ + jQuery(".navigationDatepickerDivAws").find(".dateSet").find(".options").find("span").each(function(){ + jQuery(this).unbind("click").bind("click",function(){ + var dateval = jQuery(this).attr("dateval"); + var dates = dateval.split(","); + jQuery("#datepickerStart").val(dates[0]); + jQuery("#datepickerEnd").val(dates[1]); + dateButtonDatepickerSubmit(); + }); + }); +} +/* 初始化 */ +function infoDatepickerInput(){ + //将数据写入 TODO + var niStart = jQuery("#navigationIntervalStart").val(); + var niEnd = jQuery("#navigationIntervalEnd").val(); + if(niStart && niEnd){ + jQuery("#datepickerStart").val(niStart); + jQuery("#datepickerEnd").val(niEnd); + } +} + +/* 提交数据 */ +function dateButtonDatepickerSubmit(){ + var datepickerStart = jQuery("#datepickerStart").val(); + var datepickerEnd = jQuery("#datepickerEnd").val(); + jQuery("#navigationIntervalStart").text(datepickerStart); + jQuery("#navigationIntervalEnd").text(datepickerEnd); + jQuery(".navigationDatepickerDivAws").hide(); + changeColor(); + //触发表单时间 + reloadAnalysisReport(); +} + +/* 比较时间大小 */ +function compareTimeSize(dataPre,dataEnd){ + var preArr = dataPre.split('-'); + var dataEndArr = dataEnd.split('-'); + + var preY = Number(preArr[0]); + var preM = Number(preArr[1]); + var preD = Number(preArr[2]); + var endY = Number(dataEndArr[0]); + var endM = Number(dataEndArr[1]); + var endD = Number(dataEndArr[2]); + + if(preY > endY){ //不同年 + return true; + } else if (preY < endY) { + return false; + } else { + if(preM > endM){ //不同月 + return true; + } else if (preM < endM) { + return false; + } else { + if(preD >= endD){ //不同月 + return true; + } else { + return false;//相同暂定返回 + } + } + } +} + +/* 改变相应的颜色 */ +function changeColor(){ + jQuery("#datepicker").find("a.state-default").each(function(){ + jQuery(this).removeClass("state-active"); + var datepickerStart = jQuery("#datepickerStart").val(); + var datepickerEnd = jQuery("#datepickerEnd").val(); + if(datepickerStart && datepickerStart != ""){ + var current = jQuery(this).next().val(); + if(compareTimeSize(current,datepickerStart) && compareTimeSize(datepickerEnd,current)) { + jQuery(this).addClass("state-active"); + } + + } + //jQuery(this).addClass("state-active"); + }); +} + +function clearColor(){ + jQuery("#datepicker").find("a.state-default").each(function(){ + jQuery(this).removeClass("state-active"); + }); +} + +/* 清除所有颜色 */ +function exChangeColor(){ + jQuery("#datepicker").find("a.ui-state-default").each(function(){ + jQuery(this).removeClass(); + jQuery(this).addClass("state-default"); + }); +} + +/* 定时关闭指定对象 */ +function setDivTimeOutColse(objId, millisec){ + if(!objId){ + return false; + } + if(!millisec){ + millisec = 500; + } + var dimensionTabsToolsTimeOutId; //定时关闭延时ID + jQuery(objId).unbind("mouseenter").unbind("mouseleave"); + jQuery(objId).hover(function(){ + if(dimensionTabsToolsTimeOutId){ + clearTimeout(dimensionTabsToolsTimeOutId); + dimensionTabsToolsTimeOutId = ""; + } + },function(){ + if(!dimensionTabsToolsTimeOutId){ + dimensionTabsToolsTimeOutId = setTimeout(function(){ + jQuery(objId).hide(); + dimensionTabsToolsTimeOutId = ""; + },millisec); + } + }); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/datepicker/jquery.ui.datepicker.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/datepicker/jquery.ui.datepicker.js new file mode 100644 index 00000000..7b5f287a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/datepicker/jquery.ui.datepicker.js @@ -0,0 +1,1781 @@ +/* + * jQuery UI Datepicker 1.8.11 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker + * + * Depends: + * jquery.ui.core.js + */ +(function( $, undefined ) { + +$.extend($.ui, { datepicker: { version: "1.8.11" } }); + +var PROP_NAME = 'datepicker'; +var dpuuid = new Date().getTime(); + +/* Date picker manager. + Use the singleton instance of this class, $.datepicker, to interact with the date picker. + Settings for (groups of) date pickers are maintained in an instance object, + allowing multiple different settings on the same page. */ + +function Datepicker() { + this.debug = false; // Change this to true to start debugging + this._curInst = null; // The current instance in use + this._keyEvent = false; // If the last event was a key event + this._disabledInputs = []; // List of date picker inputs that have been disabled + this._datepickerShowing = false; // True if the popup picker is showing , false if not + this._inDialog = false; // True if showing within a "dialog", false if not + this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division + this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class + this._appendClass = 'ui-datepicker-append'; // The name of the append marker class + this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class + this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class + this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class + this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class + this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class + this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class + this.regional = []; // Available regional settings, indexed by language code + this.regional[''] = { // Default regional settings + closeText: 'Done', // Display text for close link + prevText: 'Prev', // Display text for previous month link + nextText: 'Next', // Display text for next month link + currentText: 'Today', // Display text for current month link + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], // Names of months for drop-down and formatting + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday + weekHeader: 'Wk', // Column header for week of the year + dateFormat: 'mm/dd/yy', // See format options on parseDate + firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... + isRTL: false, // True if right-to-left language, false if left-to-right + showMonthAfterYear: false, // True if the year select precedes month, false for month then year + yearSuffix: '' // Additional text to append to the year in the month headers + }; + this._defaults = { // Global defaults for all the date picker instances + showOn: 'focus', // 'focus' for popup on focus, + // 'button' for trigger button, or 'both' for either + showAnim: 'fadeIn', // Name of jQuery animation for popup + showOptions: {}, // Options for enhanced animations + defaultDate: null, // Used when field is blank: actual date, + // +/-number for offset from today, null for today + appendText: '', // Display text following the input box, e.g. showing the format + buttonText: '...', // Text for trigger button + buttonImage: '', // URL for trigger button image + buttonImageOnly: false, // True if the image appears alone, false if it appears on a button + hideIfNoPrevNext: false, // True to hide next/previous month links + // if not applicable, false to just disable them + navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links + gotoCurrent: false, // True if today link goes back to current selection instead + changeMonth: false, // True if month can be selected directly, false if only prev/next + changeYear: false, // True if year can be selected directly, false if only prev/next + yearRange: 'c-10:c+10', // Range of years to display in drop-down, + // either relative to today's year (-nn:+nn), relative to currently displayed year + // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) + showOtherMonths: false, // True to show dates in other months, false to leave blank + selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable + showWeek: false, // True to show week of the year, false to not show it + calculateWeek: this.iso8601Week, // How to calculate the week of the year, + // takes a Date and returns the number of the week for it + shortYearCutoff: '+10', // Short year values < this are in the current century, + // > this are in the previous century, + // string value starting with '+' for current year + value + minDate: null, // The earliest selectable date, or null for no limit + maxDate: null, // The latest selectable date, or null for no limit + duration: 'fast', // Duration of display/closure + beforeShowDay: null, // Function that takes a date and returns an array with + // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '', + // [2] = cell title (optional), e.g. $.datepicker.noWeekends + beforeShow: null, // Function that takes an input field and + // returns a set of custom settings for the date picker + onSelect: null, // Define a callback function when a date is selected + onChangeMonthYear: null, // Define a callback function when the month or year is changed + onClose: null, // Define a callback function when the datepicker is closed + numberOfMonths: 1, // Number of months to show at a time + showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) + stepMonths: 1, // Number of months to step back/forward + stepBigMonths: 12, // Number of months to step back/forward for the big links + altField: '', // Selector for an alternate field to store selected dates into + altFormat: '', // The date format to use for the alternate field + constrainInput: true, // The input is constrained by the current date format + showButtonPanel: false, // True to show button panel, false to not show it + autoSize: false // True to size the input for the date format, false to leave as is + }; + $.extend(this._defaults, this.regional['']); + this.dpDiv = $('
                                                '); +} + +$.extend(Datepicker.prototype, { + /* Class name added to elements to indicate already configured with a date picker. */ + markerClassName: 'hasDatepicker', + + /* Debug logging (if enabled). */ + log: function () { + if (this.debug) + console.log.apply('', arguments); + }, + + // TODO rename to "widget" when switching to widget factory + _widgetDatepicker: function() { + return this.dpDiv; + }, + + /* Override the default settings for all instances of the date picker. + @param settings object - the new settings to use as defaults (anonymous object) + @return the manager object */ + setDefaults: function(settings) { + extendRemove(this._defaults, settings || {}); + return this; + }, + + /* Attach the date picker to a jQuery selection. + @param target element - the target input field or division or span + @param settings object - the new settings to use for this date picker instance (anonymous) */ + _attachDatepicker: function(target, settings) { + // check for settings on the control itself - in namespace 'date:' + var inlineSettings = null; + for (var attrName in this._defaults) { + var attrValue = target.getAttribute('date:' + attrName); + if (attrValue) { + inlineSettings = inlineSettings || {}; + try { + inlineSettings[attrName] = eval(attrValue); + } catch (err) { + inlineSettings[attrName] = attrValue; + } + } + } + var nodeName = target.nodeName.toLowerCase(); + var inline = (nodeName == 'div' || nodeName == 'span'); + if (!target.id) { + this.uuid += 1; + target.id = 'dp' + this.uuid; + } + var inst = this._newInst($(target), inline); + inst.settings = $.extend({}, settings || {}, inlineSettings || {}); + if (nodeName == 'input') { + this._connectDatepicker(target, inst); + } else if (inline) { + this._inlineDatepicker(target, inst); + } + }, + + /* Create a new instance object. */ + _newInst: function(target, inline) { + var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars + return {id: id, input: target, // associated target + selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection + drawMonth: 0, drawYear: 0, // month being drawn + inline: inline, // is datepicker inline or not + dpDiv: (!inline ? this.dpDiv : // presentation div + $('
                                                '))}; + }, + + /* Attach the date picker to an input field. */ + _connectDatepicker: function(target, inst) { + var input = $(target); + inst.append = $([]); + inst.trigger = $([]); + if (input.hasClass(this.markerClassName)) + return; + this._attachments(input, inst); + input.addClass(this.markerClassName).keydown(this._doKeyDown). + keypress(this._doKeyPress).keyup(this._doKeyUp). + bind("setData.datepicker", function(event, key, value) { + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key) { + return this._get(inst, key); + }); + this._autoSize(inst); + $.data(target, PROP_NAME, inst); + }, + + /* Make attachments based on settings. */ + _attachments: function(input, inst) { + var appendText = this._get(inst, 'appendText'); + var isRTL = this._get(inst, 'isRTL'); + if (inst.append) + inst.append.remove(); + if (appendText) { + inst.append = $('' + appendText + ''); + input[isRTL ? 'before' : 'after'](inst.append); + } + input.unbind('focus', this._showDatepicker); + if (inst.trigger) + inst.trigger.remove(); + var showOn = this._get(inst, 'showOn'); + if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field + input.focus(this._showDatepicker); + if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked + var buttonText = this._get(inst, 'buttonText'); + var buttonImage = this._get(inst, 'buttonImage'); + inst.trigger = $(this._get(inst, 'buttonImageOnly') ? + $('').addClass(this._triggerClass). + attr({ src: buttonImage, alt: buttonText, title: buttonText }) : + $('').addClass(this._triggerClass). + html(buttonImage == '' ? buttonText : $('').attr( + { src:buttonImage, alt:buttonText, title:buttonText }))); + input[isRTL ? 'before' : 'after'](inst.trigger); + inst.trigger.click(function() { + if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0]) + $.datepicker._hideDatepicker(); + else + $.datepicker._showDatepicker(input[0]); + return false; + }); + } + }, + + /* Apply the maximum length for the date format. */ + _autoSize: function(inst) { + if (this._get(inst, 'autoSize') && !inst.inline) { + var date = new Date(2009, 12 - 1, 20); // Ensure double digits + var dateFormat = this._get(inst, 'dateFormat'); + if (dateFormat.match(/[DM]/)) { + var findMax = function(names) { + var max = 0; + var maxI = 0; + for (var i = 0; i < names.length; i++) { + if (names[i].length > max) { + max = names[i].length; + maxI = i; + } + } + return maxI; + }; + date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? + 'monthNames' : 'monthNamesShort')))); + date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? + 'dayNames' : 'dayNamesShort'))) + 20 - date.getDay()); + } + inst.input.attr('size', this._formatDate(inst, date).length); + } + }, + + /* Attach an inline date picker to a div. */ + _inlineDatepicker: function(target, inst) { + var divSpan = $(target); + if (divSpan.hasClass(this.markerClassName)) + return; + divSpan.addClass(this.markerClassName).append(inst.dpDiv). + bind("setData.datepicker", function(event, key, value){ + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key){ + return this._get(inst, key); + }); + $.data(target, PROP_NAME, inst); + this._setDate(inst, this._getDefaultDate(inst), true); + this._updateDatepicker(inst); + this._updateAlternate(inst); + inst.dpDiv.show(); + }, + + /* Pop-up the date picker in a "dialog" box. + @param input element - ignored + @param date string or Date - the initial date to display + @param onSelect function - the function to call when a date is selected + @param settings object - update the dialog date picker instance's settings (anonymous object) + @param pos int[2] - coordinates for the dialog's position within the screen or + event - with x/y coordinates or + leave empty for default (screen centre) + @return the manager object */ + _dialogDatepicker: function(input, date, onSelect, settings, pos) { + var inst = this._dialogInst; // internal instance + if (!inst) { + this.uuid += 1; + var id = 'dp' + this.uuid; + this._dialogInput = $(''); + this._dialogInput.keydown(this._doKeyDown); + $('body').append(this._dialogInput); + inst = this._dialogInst = this._newInst(this._dialogInput, false); + inst.settings = {}; + $.data(this._dialogInput[0], PROP_NAME, inst); + } + extendRemove(inst.settings, settings || {}); + date = (date && date.constructor == Date ? this._formatDate(inst, date) : date); + this._dialogInput.val(date); + + this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); + if (!this._pos) { + var browserWidth = document.documentElement.clientWidth; + var browserHeight = document.documentElement.clientHeight; + var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; + var scrollY = document.documentElement.scrollTop || document.body.scrollTop; + this._pos = // should use actual width/height below + [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; + } + + // move input on screen for focus, but hidden behind dialog + this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px'); + inst.settings.onSelect = onSelect; + this._inDialog = true; + this.dpDiv.addClass(this._dialogClass); + this._showDatepicker(this._dialogInput[0]); + if ($.blockUI) + $.blockUI(this.dpDiv); + $.data(this._dialogInput[0], PROP_NAME, inst); + return this; + }, + + /* Detach a datepicker from its control. + @param target element - the target input field or division or span */ + _destroyDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + $.removeData(target, PROP_NAME); + if (nodeName == 'input') { + inst.append.remove(); + inst.trigger.remove(); + $target.removeClass(this.markerClassName). + unbind('focus', this._showDatepicker). + unbind('keydown', this._doKeyDown). + unbind('keypress', this._doKeyPress). + unbind('keyup', this._doKeyUp); + } else if (nodeName == 'div' || nodeName == 'span') + $target.removeClass(this.markerClassName).empty(); + }, + + /* Enable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _enableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = false; + inst.trigger.filter('button'). + each(function() { this.disabled = false; }).end(). + filter('img').css({opacity: '1.0', cursor: ''}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().removeClass('ui-state-disabled'); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + }, + + /* Disable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _disableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = true; + inst.trigger.filter('button'). + each(function() { this.disabled = true; }).end(). + filter('img').css({opacity: '0.5', cursor: 'default'}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().addClass('ui-state-disabled'); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + this._disabledInputs[this._disabledInputs.length] = target; + }, + + /* Is the first field in a jQuery collection disabled as a datepicker? + @param target element - the target input field or division or span + @return boolean - true if disabled, false if enabled */ + _isDisabledDatepicker: function(target) { + if (!target) { + return false; + } + for (var i = 0; i < this._disabledInputs.length; i++) { + if (this._disabledInputs[i] == target) + return true; + } + return false; + }, + + /* Retrieve the instance data for the target control. + @param target element - the target input field or division or span + @return object - the associated instance data + @throws error if a jQuery problem getting data */ + _getInst: function(target) { + try { + return $.data(target, PROP_NAME); + } + catch (err) { + throw 'Missing instance data for this datepicker'; + } + }, + + /* Update or retrieve the settings for a date picker attached to an input field or division. + @param target element - the target input field or division or span + @param name object - the new settings to update or + string - the name of the setting to change or retrieve, + when retrieving also 'all' for all instance settings or + 'defaults' for all global defaults + @param value any - the new value for the setting + (omit if above is an object or to retrieve a value) */ + _optionDatepicker: function(target, name, value) { + var inst = this._getInst(target); + if (arguments.length == 2 && typeof name == 'string') { + return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) : + (inst ? (name == 'all' ? $.extend({}, inst.settings) : + this._get(inst, name)) : null)); + } + var settings = name || {}; + if (typeof name == 'string') { + settings = {}; + settings[name] = value; + } + if (inst) { + if (this._curInst == inst) { + this._hideDatepicker(); + } + var date = this._getDateDatepicker(target, true); + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + extendRemove(inst.settings, settings); + // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided + if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined) + inst.settings.minDate = this._formatDate(inst, minDate); + if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined) + inst.settings.maxDate = this._formatDate(inst, maxDate); + this._attachments($(target), inst); + this._autoSize(inst); + this._setDateDatepicker(target, date); + this._updateDatepicker(inst); + } + }, + + // change method deprecated + _changeDatepicker: function(target, name, value) { + this._optionDatepicker(target, name, value); + }, + + /* Redraw the date picker attached to an input field or division. + @param target element - the target input field or division or span */ + _refreshDatepicker: function(target) { + var inst = this._getInst(target); + if (inst) { + this._updateDatepicker(inst); + } + }, + + /* Set the dates for a jQuery selection. + @param target element - the target input field or division or span + @param date Date - the new date */ + _setDateDatepicker: function(target, date) { + var inst = this._getInst(target); + if (inst) { + this._setDate(inst, date); + this._updateDatepicker(inst); + this._updateAlternate(inst); + } + }, + + /* Get the date(s) for the first entry in a jQuery selection. + @param target element - the target input field or division or span + @param noDefault boolean - true if no default date is to be used + @return Date - the current date */ + _getDateDatepicker: function(target, noDefault) { + var inst = this._getInst(target); + if (inst && !inst.inline) + this._setDateFromField(inst, noDefault); + return (inst ? this._getDate(inst) : null); + }, + + /* Handle keystrokes. */ + _doKeyDown: function(event) { + var inst = $.datepicker._getInst(event.target); + var handled = true; + var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); + inst._keyEvent = true; + if ($.datepicker._datepickerShowing) + switch (event.keyCode) { + case 9: $.datepicker._hideDatepicker(); + handled = false; + break; // hide on tab out + case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + + $.datepicker._currentClass + ')', inst.dpDiv); + if (sel[0]) + $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); + else + $.datepicker._hideDatepicker(); + return false; // don't submit the form + break; // select the value on enter + case 27: $.datepicker._hideDatepicker(); + break; // hide on escape + case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // previous month/year on page up/+ ctrl + case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // next month/year on page down/+ ctrl + case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target); + handled = event.ctrlKey || event.metaKey; + break; // clear on ctrl or command +end + case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target); + handled = event.ctrlKey || event.metaKey; + break; // current on ctrl or command +home + case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); + handled = event.ctrlKey || event.metaKey; + // -1 day on ctrl or command +left + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +left on Mac + break; + case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // -1 week on ctrl or command +up + case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); + handled = event.ctrlKey || event.metaKey; + // +1 day on ctrl or command +right + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +right + break; + case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // +1 week on ctrl or command +down + default: handled = false; + } + else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home + $.datepicker._showDatepicker(this); + else { + handled = false; + } + if (handled) { + event.preventDefault(); + event.stopPropagation(); + } + }, + + /* Filter entered characters - based on date format. */ + _doKeyPress: function(event) { + var inst = $.datepicker._getInst(event.target); + if ($.datepicker._get(inst, 'constrainInput')) { + var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')); + var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode); + return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1); + } + }, + + /* Synchronise manual entry and field/alternate field. */ + _doKeyUp: function(event) { + var inst = $.datepicker._getInst(event.target); + if (inst.input.val() != inst.lastVal) { + try { + var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + (inst.input ? inst.input.val() : null), + $.datepicker._getFormatConfig(inst)); + if (date) { // only if valid + $.datepicker._setDateFromField(inst); + $.datepicker._updateAlternate(inst); + $.datepicker._updateDatepicker(inst); + } + } + catch (event) { + $.datepicker.log(event); + } + } + return true; + }, + + /* Pop-up the date picker for a given input field. + @param input element - the input field attached to the date picker or + event - if triggered by focus */ + _showDatepicker: function(input) { + input = input.target || input; + if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger + input = $('input', input.parentNode)[0]; + if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here + return; + var inst = $.datepicker._getInst(input); + if ($.datepicker._curInst && $.datepicker._curInst != inst) { + $.datepicker._curInst.dpDiv.stop(true, true); + } + var beforeShow = $.datepicker._get(inst, 'beforeShow'); + extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {})); + inst.lastVal = null; + $.datepicker._lastInput = input; + $.datepicker._setDateFromField(inst); + if ($.datepicker._inDialog) // hide cursor + input.value = ''; + if (!$.datepicker._pos) { // position below input + $.datepicker._pos = $.datepicker._findPos(input); + $.datepicker._pos[1] += input.offsetHeight; // add the height + } + var isFixed = false; + $(input).parents().each(function() { + isFixed |= $(this).css('position') == 'fixed'; + return !isFixed; + }); + if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled + $.datepicker._pos[0] -= document.documentElement.scrollLeft; + $.datepicker._pos[1] -= document.documentElement.scrollTop; + } + var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; + $.datepicker._pos = null; + //to avoid flashes on Firefox + inst.dpDiv.empty(); + // determine sizing offscreen + inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'}); + $.datepicker._updateDatepicker(inst); + // fix width for dynamic number of date pickers + // and adjust position before showing + offset = $.datepicker._checkOffset(inst, offset, isFixed); + inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ? + 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', + left: offset.left + 'px', top: offset.top + 'px'}); + if (!inst.inline) { + var showAnim = $.datepicker._get(inst, 'showAnim'); + var duration = $.datepicker._get(inst, 'duration'); + var postProcess = function() { + $.datepicker._datepickerShowing = true; + var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only + if( !! cover.length ){ + var borders = $.datepicker._getBorders(inst.dpDiv); + cover.css({left: -borders[0], top: -borders[1], + width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}); + } + }; + inst.dpDiv.zIndex($(input).zIndex()+1); + if ($.effects && $.effects[showAnim]) + inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess); + if (!showAnim || !duration) + postProcess(); + if (inst.input.is(':visible') && !inst.input.is(':disabled')) + inst.input.focus(); + $.datepicker._curInst = inst; + } + }, + + /* Generate the date picker content. */ + _updateDatepicker: function(inst) { + var self = this; + var borders = $.datepicker._getBorders(inst.dpDiv); + inst.dpDiv.empty().append(this._generateHTML(inst)); + var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only + if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6 + cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}) + } + inst.dpDiv.find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a') + .bind('mouseout', function(){ + $(this).removeClass('ui-state-hover'); + if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover'); + if(this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover'); + }) + .bind('mouseover', function(){ + if (!self._isDisabledDatepicker( inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) { + $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); + $(this).addClass('ui-state-hover'); + if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover'); + if(this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover'); + } + }) + .end() + .find('.' + this._dayOverClass + ' a') + .trigger('mouseover') + .end(); + var numMonths = this._getNumberOfMonths(inst); + var cols = numMonths[1]; + var width = 17; + if (cols > 1) + inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em'); + else + inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width(''); + inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + + 'Class']('ui-datepicker-multi'); + inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + + 'Class']('ui-datepicker-rtl'); + if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input && + // #6694 - don't focus the input if it's already focused + // this breaks the change event in IE + inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement) + inst.input.focus(); + // deffered render of the years select (to avoid flashes on Firefox) + if( inst.yearshtml ){ + var origyearshtml = inst.yearshtml; + setTimeout(function(){ + //assure that inst.yearshtml didn't change. + if( origyearshtml === inst.yearshtml ){ + inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml); + } + origyearshtml = inst.yearshtml = null; + }, 0); + } + }, + + /* Retrieve the size of left and top borders for an element. + @param elem (jQuery object) the element of interest + @return (number[2]) the left and top borders */ + _getBorders: function(elem) { + var convert = function(value) { + return {thin: 1, medium: 2, thick: 3}[value] || value; + }; + return [parseFloat(convert(elem.css('border-left-width'))), + parseFloat(convert(elem.css('border-top-width')))]; + }, + + /* Check positioning to remain on screen. */ + _checkOffset: function(inst, offset, isFixed) { + var dpWidth = inst.dpDiv.outerWidth(); + var dpHeight = inst.dpDiv.outerHeight(); + var inputWidth = inst.input ? inst.input.outerWidth() : 0; + var inputHeight = inst.input ? inst.input.outerHeight() : 0; + var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft(); + var viewHeight = document.documentElement.clientHeight + $(document).scrollTop(); + + offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0); + offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; + offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; + + // now check if datepicker is showing outside window viewport - move to a better place if so. + offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? + Math.abs(offset.left + dpWidth - viewWidth) : 0); + offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? + Math.abs(dpHeight + inputHeight) : 0); + + return offset; + }, + + /* Find an object's position on the screen. */ + _findPos: function(obj) { + var inst = this._getInst(obj); + var isRTL = this._get(inst, 'isRTL'); + while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) { + obj = obj[isRTL ? 'previousSibling' : 'nextSibling']; + } + var position = $(obj).offset(); + return [position.left, position.top]; + }, + + /* Hide the date picker from view. + @param input element - the input field attached to the date picker */ + _hideDatepicker: function(input) { + var inst = this._curInst; + if (!inst || (input && inst != $.data(input, PROP_NAME))) + return; + if (this._datepickerShowing) { + var showAnim = this._get(inst, 'showAnim'); + var duration = this._get(inst, 'duration'); + var postProcess = function() { + $.datepicker._tidyDialog(inst); + this._curInst = null; + }; + if ($.effects && $.effects[showAnim]) + inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' : + (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess); + if (!showAnim) + postProcess(); + var onClose = this._get(inst, 'onClose'); + if (onClose) + onClose.apply((inst.input ? inst.input[0] : null), + [(inst.input ? inst.input.val() : ''), inst]); // trigger custom callback + this._datepickerShowing = false; + this._lastInput = null; + if (this._inDialog) { + this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); + if ($.blockUI) { + $.unblockUI(); + $('body').append(this.dpDiv); + } + } + this._inDialog = false; + } + }, + + /* Tidy up after a dialog display. */ + _tidyDialog: function(inst) { + inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar'); + }, + + /* Close date picker if clicked elsewhere. */ + _checkExternalClick: function(event) { + if (!$.datepicker._curInst) + return; + var $target = $(event.target); + if ($target[0].id != $.datepicker._mainDivId && + $target.parents('#' + $.datepicker._mainDivId).length == 0 && + !$target.hasClass($.datepicker.markerClassName) && + !$target.hasClass($.datepicker._triggerClass) && + $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) + $.datepicker._hideDatepicker(); + }, + + /* Adjust one of the date sub-fields. */ + _adjustDate: function(id, offset, period) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._isDisabledDatepicker(target[0])) { + return; + } + this._adjustInstDate(inst, offset + + (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning + period); + this._updateDatepicker(inst); + var afterUpdate = this._get(inst, 'onAfterUpdateDate'); //by liangt + if (afterUpdate) + afterUpdate.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + }, + + /* Action for current link. */ + _gotoToday: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._get(inst, 'gotoCurrent') && inst.currentDay) { + inst.selectedDay = inst.currentDay; + inst.drawMonth = inst.selectedMonth = inst.currentMonth; + inst.drawYear = inst.selectedYear = inst.currentYear; + } + else { + var date = new Date(); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + } + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a new month/year. */ + _selectMonthYear: function(id, select, period) { + var target = $(id); + var inst = this._getInst(target[0]); + inst._selectingMonthYear = false; + inst['selected' + (period == 'M' ? 'Month' : 'Year')] = + inst['draw' + (period == 'M' ? 'Month' : 'Year')] = + parseInt(select.options[select.selectedIndex].value,10); + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Restore input focus after not changing month/year. */ + _clickMonthYear: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + if (inst.input && inst._selectingMonthYear) { + setTimeout(function() { + inst.input.focus(); + }, 0); + } + inst._selectingMonthYear = !inst._selectingMonthYear; + }, + + /* Action for selecting a day. */ + _selectDay: function(id, month, year, td) { + var target = $(id); + if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { + return; + } + var inst = this._getInst(target[0]); + inst.selectedDay = inst.currentDay = $('a', td).html(); + inst.selectedMonth = inst.currentMonth = month; + inst.selectedYear = inst.currentYear = year; + this._selectDate(id, this._formatDate(inst, + inst.currentDay, inst.currentMonth, inst.currentYear)); + }, + + /* Erase the input field and hide the date picker. */ + _clearDate: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + this._selectDate(target, ''); + }, + + /* Update the input field with the selected date. */ + _selectDate: function(id, dateStr) { + var target = $(id); + var inst = this._getInst(target[0]); + dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); + if (inst.input) + inst.input.val(dateStr); + this._updateAlternate(inst); + var onSelect = this._get(inst, 'onSelect'); + if (onSelect) + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback + else if (inst.input) + inst.input.trigger('change'); // fire the change event + if (inst.inline){ + this._updateDatepicker(inst); + var afterUpdate = this._get(inst, 'onAfterUpdateDate'); //by liangt + if (afterUpdate) + afterUpdate.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + }else { + this._hideDatepicker(); + this._lastInput = inst.input[0]; + if (typeof(inst.input[0]) != 'object') + inst.input.focus(); // restore focus + this._lastInput = null; + } + }, + + /* Update any alternate field to synchronise with the main field. */ + _updateAlternate: function(inst) { + var altField = this._get(inst, 'altField'); + if (altField) { // update alternate field too + var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat'); + var date = this._getDate(inst); + var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); + $(altField).each(function() { $(this).val(dateStr); }); + } + }, + + /* Set as beforeShowDay function to prevent selection of weekends. + @param date Date - the date to customise + @return [boolean, string] - is this date selectable?, what is its CSS class? */ + noWeekends: function(date) { + var day = date.getDay(); + return [(day > 0 && day < 6), '']; + }, + + /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. + @param date Date - the date to get the week for + @return number - the number of the week within the year that contains this date */ + iso8601Week: function(date) { + var checkDate = new Date(date.getTime()); + // Find Thursday of this week starting on Monday + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); + var time = checkDate.getTime(); + checkDate.setMonth(0); // Compare with Jan 1 + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; + }, + + /* Parse a string value into a date object. + See formatDate below for the possible formats. + + @param format string - the expected format of the date + @param value string - the date in the above format + @param settings Object - attributes include: + shortYearCutoff number - the cutoff year for determining the century (optional) + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return Date - the extracted date value or null if value is blank */ + parseDate: function (format, value, settings) { + if (format == null || value == null) + throw 'Invalid arguments'; + value = (typeof value == 'object' ? value.toString() : value + ''); + if (value == '') + return null; + var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + var year = -1; + var month = -1; + var day = -1; + var doy = -1; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Extract a number from the string value + var getNumber = function(match) { + var isDoubled = lookAhead(match); + var size = (match == '@' ? 14 : (match == '!' ? 20 : + (match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2)))); + var digits = new RegExp('^\\d{1,' + size + '}'); + var num = value.substring(iValue).match(digits); + if (!num) + throw 'Missing number at position ' + iValue; + iValue += num[0].length; + return parseInt(num[0], 10); + }; + // Extract a name from the string value and convert to an index + var getName = function(match, shortNames, longNames) { + var names = (lookAhead(match) ? longNames : shortNames); + for (var i = 0; i < names.length; i++) { + if (value.substr(iValue, names[i].length).toLowerCase() == names[i].toLowerCase()) { + iValue += names[i].length; + return i + 1; + } + } + throw 'Unknown name at position ' + iValue; + }; + // Confirm that a literal character matches the string value + var checkLiteral = function() { + if (value.charAt(iValue) != format.charAt(iFormat)) + throw 'Unexpected literal at position ' + iValue; + iValue++; + }; + var iValue = 0; + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + checkLiteral(); + else + switch (format.charAt(iFormat)) { + case 'd': + day = getNumber('d'); + break; + case 'D': + getName('D', dayNamesShort, dayNames); + break; + case 'o': + doy = getNumber('o'); + break; + case 'm': + month = getNumber('m'); + break; + case 'M': + month = getName('M', monthNamesShort, monthNames); + break; + case 'y': + year = getNumber('y'); + break; + case '@': + var date = new Date(getNumber('@')); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case '!': + var date = new Date((getNumber('!') - this._ticksTo1970) / 10000); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case "'": + if (lookAhead("'")) + checkLiteral(); + else + literal = true; + break; + default: + checkLiteral(); + } + } + if (year == -1) + year = new Date().getFullYear(); + else if (year < 100) + year += new Date().getFullYear() - new Date().getFullYear() % 100 + + (year <= shortYearCutoff ? 0 : -100); + if (doy > -1) { + month = 1; + day = doy; + do { + var dim = this._getDaysInMonth(year, month - 1); + if (day <= dim) + break; + month++; + day -= dim; + } while (true); + } + var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); + if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) + throw 'Invalid date'; // E.g. 31/02/* + return date; + }, + + /* Standard date formats. */ + ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601) + COOKIE: 'D, dd M yy', + ISO_8601: 'yy-mm-dd', + RFC_822: 'D, d M y', + RFC_850: 'DD, dd-M-y', + RFC_1036: 'D, d M y', + RFC_1123: 'D, d M yy', + RFC_2822: 'D, d M yy', + RSS: 'D, d M y', // RFC 822 + TICKS: '!', + TIMESTAMP: '@', + W3C: 'yy-mm-dd', // ISO 8601 + + _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), + + /* Format a date object into a string value. + The format can be combinations of the following: + d - day of month (no leading zero) + dd - day of month (two digit) + o - day of year (no leading zeros) + oo - day of year (three digit) + D - day name short + DD - day name long + m - month of year (no leading zero) + mm - month of year (two digit) + M - month name short + MM - month name long + y - year (two digit) + yy - year (four digit) + @ - Unix timestamp (ms since 01/01/1970) + ! - Windows ticks (100ns since 01/01/0001) + '...' - literal text + '' - single quote + + @param format string - the desired format of the date + @param date Date - the date value to format + @param settings Object - attributes include: + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return string - the date in the above format */ + formatDate: function (format, date, settings) { + if (!date) + return ''; + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Format a number, with leading zero if necessary + var formatNumber = function(match, value, len) { + var num = '' + value; + if (lookAhead(match)) + while (num.length < len) + num = '0' + num; + return num; + }; + // Format a name, short or long as requested + var formatName = function(match, value, shortNames, longNames) { + return (lookAhead(match) ? longNames[value] : shortNames[value]); + }; + var output = ''; + var literal = false; + if (date) + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + output += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': + output += formatNumber('d', date.getDate(), 2); + break; + case 'D': + output += formatName('D', date.getDay(), dayNamesShort, dayNames); + break; + case 'o': + output += formatNumber('o', + (date.getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000, 3); + break; + case 'm': + output += formatNumber('m', date.getMonth() + 1, 2); + break; + case 'M': + output += formatName('M', date.getMonth(), monthNamesShort, monthNames); + break; + case 'y': + output += (lookAhead('y') ? date.getFullYear() : + (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); + break; + case '@': + output += date.getTime(); + break; + case '!': + output += date.getTime() * 10000 + this._ticksTo1970; + break; + case "'": + if (lookAhead("'")) + output += "'"; + else + literal = true; + break; + default: + output += format.charAt(iFormat); + } + } + return output; + }, + + /* Extract all possible characters from the date format. */ + _possibleChars: function (format) { + var chars = ''; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + for (var iFormat = 0; iFormat < format.length; iFormat++) + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + chars += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': case 'm': case 'y': case '@': + chars += '0123456789'; + break; + case 'D': case 'M': + return null; // Accept anything + case "'": + if (lookAhead("'")) + chars += "'"; + else + literal = true; + break; + default: + chars += format.charAt(iFormat); + } + return chars; + }, + + /* Get a setting value, defaulting if necessary. */ + _get: function(inst, name) { + return inst.settings[name] !== undefined ? + inst.settings[name] : this._defaults[name]; + }, + + /* Parse existing date and initialise date picker. */ + _setDateFromField: function(inst, noDefault) { + if (inst.input.val() == inst.lastVal) { + return; + } + var dateFormat = this._get(inst, 'dateFormat'); + var dates = inst.lastVal = inst.input ? inst.input.val() : null; + var date, defaultDate; + date = defaultDate = this._getDefaultDate(inst); + var settings = this._getFormatConfig(inst); + try { + date = this.parseDate(dateFormat, dates, settings) || defaultDate; + } catch (event) { + this.log(event); + dates = (noDefault ? '' : dates); + } + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + inst.currentDay = (dates ? date.getDate() : 0); + inst.currentMonth = (dates ? date.getMonth() : 0); + inst.currentYear = (dates ? date.getFullYear() : 0); + this._adjustInstDate(inst); + }, + + /* Retrieve the default date shown on opening. */ + _getDefaultDate: function(inst) { + return this._restrictMinMax(inst, + this._determineDate(inst, this._get(inst, 'defaultDate'), new Date())); + }, + + /* A date may be specified as an exact value or a relative one. */ + _determineDate: function(inst, date, defaultDate) { + var offsetNumeric = function(offset) { + var date = new Date(); + date.setDate(date.getDate() + offset); + return date; + }; + var offsetString = function(offset) { + try { + return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + offset, $.datepicker._getFormatConfig(inst)); + } + catch (e) { + // Ignore + } + var date = (offset.toLowerCase().match(/^c/) ? + $.datepicker._getDate(inst) : null) || new Date(); + var year = date.getFullYear(); + var month = date.getMonth(); + var day = date.getDate(); + var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; + var matches = pattern.exec(offset); + while (matches) { + switch (matches[2] || 'd') { + case 'd' : case 'D' : + day += parseInt(matches[1],10); break; + case 'w' : case 'W' : + day += parseInt(matches[1],10) * 7; break; + case 'm' : case 'M' : + month += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + case 'y': case 'Y' : + year += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + } + matches = pattern.exec(offset); + } + return new Date(year, month, day); + }; + var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) : + (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime())))); + newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate); + if (newDate) { + newDate.setHours(0); + newDate.setMinutes(0); + newDate.setSeconds(0); + newDate.setMilliseconds(0); + } + return this._daylightSavingAdjust(newDate); + }, + + /* Handle switch to/from daylight saving. + Hours may be non-zero on daylight saving cut-over: + > 12 when midnight changeover, but then cannot generate + midnight datetime, so jump to 1AM, otherwise reset. + @param date (Date) the date to check + @return (Date) the corrected date */ + _daylightSavingAdjust: function(date) { + if (!date) return null; + date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); + return date; + }, + + /* Set the date(s) directly. */ + _setDate: function(inst, date, noChange) { + var clear = !date; + var origMonth = inst.selectedMonth; + var origYear = inst.selectedYear; + var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); + inst.selectedDay = inst.currentDay = newDate.getDate(); + inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); + inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); + if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange) + this._notifyChange(inst); + this._adjustInstDate(inst); + if (inst.input) { + inst.input.val(clear ? '' : this._formatDate(inst)); + } + }, + + /* Retrieve the date(s) directly. */ + _getDate: function(inst) { + var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : + this._daylightSavingAdjust(new Date( + inst.currentYear, inst.currentMonth, inst.currentDay))); + return startDate; + }, + + /* Generate the HTML for the current state of the date picker. */ + _generateHTML: function(inst) { + var today = new Date(); + today = this._daylightSavingAdjust( + new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time + var isRTL = this._get(inst, 'isRTL'); + var showButtonPanel = this._get(inst, 'showButtonPanel'); + var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext'); + var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat'); + var numMonths = this._getNumberOfMonths(inst); + var showCurrentAtPos = this._get(inst, 'showCurrentAtPos'); + var stepMonths = this._get(inst, 'stepMonths'); + var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); + var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : + new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var drawMonth = inst.drawMonth - showCurrentAtPos; + var drawYear = inst.drawYear; + if (drawMonth < 0) { + drawMonth += 12; + drawYear--; + } + if (maxDate) { + var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), + maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); + maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); + while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { + drawMonth--; + if (drawMonth < 0) { + drawMonth = 11; + drawYear--; + } + } + } + inst.drawMonth = drawMonth; + inst.drawYear = drawYear; + var prevText = this._get(inst, 'prevText'); + prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), + this._getFormatConfig(inst))); + var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? + '' + prevText + '' : + (hideIfNoPrevNext ? '' : '' + prevText + '')); + var nextText = this._get(inst, 'nextText'); + nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), + this._getFormatConfig(inst))); + var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? + '' + nextText + '' : + (hideIfNoPrevNext ? '' : '' + nextText + '')); + var currentText = this._get(inst, 'currentText'); + var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); + currentText = (!navigationAsDateFormat ? currentText : + this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); + var controls = (!inst.inline ? '' : ''); + var buttonPanel = (showButtonPanel) ? '
                                                ' + (isRTL ? controls : '') + + (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '
                                                ' : ''; + var firstDay = parseInt(this._get(inst, 'firstDay'),10); + firstDay = (isNaN(firstDay) ? 0 : firstDay); + var showWeek = this._get(inst, 'showWeek'); + var dayNames = this._get(inst, 'dayNames'); + var dayNamesShort = this._get(inst, 'dayNamesShort'); + var dayNamesMin = this._get(inst, 'dayNamesMin'); + var monthNames = this._get(inst, 'monthNames'); + var monthNamesShort = this._get(inst, 'monthNamesShort'); + var beforeShowDay = this._get(inst, 'beforeShowDay'); + var showOtherMonths = this._get(inst, 'showOtherMonths'); + var selectOtherMonths = this._get(inst, 'selectOtherMonths'); + var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week; + var defaultDate = this._getDefaultDate(inst); + var html = ''; + for (var row = 0; row < numMonths[0]; row++) { + var group = ''; + for (var col = 0; col < numMonths[1]; col++) { + var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); + var cornerClass = ' ui-corner-all'; + var calender = ''; + if (isMultiMonth) { + calender += '
                                                '; + } + calender += '
                                                ' + + (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') + + (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') + + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, + row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers + '
                                                ' + + ''; + var thead = (showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // days of the week + var day = (dow + firstDay) % 7; + thead += '= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + + '' + dayNamesMin[day] + ''; + } + calender += thead + ''; + var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); + if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) + inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); + var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; + var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate + var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); + for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows + calender += ''; + var tbody = (!showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // create date picker days + var daySettings = (beforeShowDay ? + beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); + var otherMonth = (printDate.getMonth() != drawMonth); + var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || + (minDate && printDate < minDate) || (maxDate && printDate > maxDate); + tbody += ''; // display selectable date + printDate.setDate(printDate.getDate() + 1); + printDate = this._daylightSavingAdjust(printDate); + } + calender += tbody + ''; + } + drawMonth++; + if (drawMonth > 11) { + drawMonth = 0; + drawYear++; + } + calender += '
                                                ' + this._get(inst, 'weekHeader') + '
                                                ' + + this._get(inst, 'calculateWeek')(printDate) + '' + // actions + (otherMonth && !showOtherMonths ? ' ' : // display for other months + (unselectable ? '' + printDate.getDate() + '' : '' + printDate.getDate() + '')) + '
                                                ' + (isMultiMonth ? '
                                                ' + + ((numMonths[0] > 0 && col == numMonths[1]-1) ? '
                                                ' : '') : ''); + group += calender; + } + html += group; + } + html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ? + '' : ''); + inst._keyEvent = false; + return html; + }, + + /* Generate the month and year header. */ + _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, + secondary, monthNames, monthNamesShort) { + var changeMonth = this._get(inst, 'changeMonth'); + var changeYear = this._get(inst, 'changeYear'); + var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); + var html = '
                                                '; + var monthHtml = ''; + // month selection + if (secondary || !changeMonth) + monthHtml += '' + monthNames[drawMonth] + ''; + else { + var inMinYear = (minDate && minDate.getFullYear() == drawYear); + var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); + monthHtml += ''; + } + if (!showMonthAfterYear) + html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); + // year selection + inst.yearshtml = ''; + if (secondary || !changeYear) + html += '' + drawYear + ''; + else { + // determine range of years to display + var years = this._get(inst, 'yearRange').split(':'); + var thisYear = new Date().getFullYear(); + var determineYear = function(value) { + var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : + (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : + parseInt(value, 10))); + return (isNaN(year) ? thisYear : year); + }; + var year = determineYear(years[0]); + var endYear = Math.max(year, determineYear(years[1] || '')); + year = (minDate ? Math.max(year, minDate.getFullYear()) : year); + endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); + inst.yearshtml += ''; + //when showing there is no need for later update + if( ! $.browser.mozilla ){ + html += inst.yearshtml; + inst.yearshtml = null; + } else { + // will be replaced later with inst.yearshtml + html += ''; + } + } + html += this._get(inst, 'yearSuffix'); + if (showMonthAfterYear) + html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; + html += '
                                                '; // Close datepicker_header + return html; + }, + + /* Adjust one of the date sub-fields. */ + _adjustInstDate: function(inst, offset, period) { + var year = inst.drawYear + (period == 'Y' ? offset : 0); + var month = inst.drawMonth + (period == 'M' ? offset : 0); + var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + + (period == 'D' ? offset : 0); + var date = this._restrictMinMax(inst, + this._daylightSavingAdjust(new Date(year, month, day))); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + if (period == 'M' || period == 'Y') + this._notifyChange(inst); + }, + + /* Ensure a date is within any min/max bounds. */ + _restrictMinMax: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var newDate = (minDate && date < minDate ? minDate : date); + newDate = (maxDate && newDate > maxDate ? maxDate : newDate); + return newDate; + }, + + /* Notify change of month/year. */ + _notifyChange: function(inst) { + var onChange = this._get(inst, 'onChangeMonthYear'); + if (onChange) + onChange.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + }, + + /* Determine the number of months to show. */ + _getNumberOfMonths: function(inst) { + var numMonths = this._get(inst, 'numberOfMonths'); + return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); + }, + + /* Determine the current maximum date - ensure no time components are set. */ + _getMinMaxDate: function(inst, minMax) { + return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); + }, + + /* Find the number of days in a given month. */ + _getDaysInMonth: function(year, month) { + return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); + }, + + /* Find the day of the week of the first of a month. */ + _getFirstDayOfMonth: function(year, month) { + return new Date(year, month, 1).getDay(); + }, + + /* Determines if we should allow a "next/prev" month display change. */ + _canAdjustMonth: function(inst, offset, curYear, curMonth) { + var numMonths = this._getNumberOfMonths(inst); + var date = this._daylightSavingAdjust(new Date(curYear, + curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); + if (offset < 0) + date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); + return this._isInRange(inst, date); + }, + + /* Is the given date in the accepted range? */ + _isInRange: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + return ((!minDate || date.getTime() >= minDate.getTime()) && + (!maxDate || date.getTime() <= maxDate.getTime())); + }, + + /* Provide the configuration settings for formatting/parsing. */ + _getFormatConfig: function(inst) { + var shortYearCutoff = this._get(inst, 'shortYearCutoff'); + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + return {shortYearCutoff: shortYearCutoff, + dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), + monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; + }, + + /* Format the given date for display. */ + _formatDate: function(inst, day, month, year) { + if (!day) { + inst.currentDay = inst.selectedDay; + inst.currentMonth = inst.selectedMonth; + inst.currentYear = inst.selectedYear; + } + var date = (day ? (typeof day == 'object' ? day : + this._daylightSavingAdjust(new Date(year, month, day))) : + this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); + } +}); + +/* jQuery extend now ignores nulls! */ +function extendRemove(target, props) { + $.extend(target, props); + for (var name in props) + if (props[name] == null || props[name] == undefined) + target[name] = props[name]; + return target; +}; + +/* Determine whether an object is an array. */ +function isArray(a) { + return (a && (($.browser.safari && typeof a == 'object' && a.length) || + (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); +}; + +/* Invoke the datepicker functionality. + @param options string - a command, optionally followed by additional parameters or + Object - settings for attaching new datepicker functionality + @return jQuery object */ +$.fn.datepicker = function(options){ + + /* Verify an empty collection wasn't passed - Fixes #6976 */ + if ( !this.length ) { + return this; + } + + /* Initialise the date picker. */ + if (!$.datepicker.initialized) { + $(document).mousedown($.datepicker._checkExternalClick). + find('body').append($.datepicker.dpDiv); + $.datepicker.initialized = true; + } + + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + return this.each(function() { + typeof options == 'string' ? + $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this].concat(otherArgs)) : + $.datepicker._attachDatepicker(this, options); + }); +}; + +$.datepicker = new Datepicker(); // singleton instance +$.datepicker.initialized = false; +$.datepicker.uuid = new Date().getTime(); +$.datepicker.version = "1.8.11"; + +// Workaround for #4055 +// Add another global to avoid noConflict issues with inline event handlers +window['DP_jQuery_' + dpuuid] = $; + +})(jQuery); diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/designer.extend.link.tree.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/designer.extend.link.tree.js new file mode 100644 index 00000000..b2cde6b3 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/designer.extend.link.tree.js @@ -0,0 +1,48 @@ +var setting = { + checkbox : false, + event : { + onClick : onClick, + beforeExpand : loadData + } +}; +var checkTree; + +$(document).ready(function() { + setting.dataModel = { + data : data + }; + checkTree = awsui.tree.init($("#tree"), setting); +}); + +function loadData(treeNode) { + // 如果是父节点并且存在子节点执行加载 + // if (treeNode.open != null && !repositoryTree.exsitsChildren(treeNode.id)) + // { + var dataModel = { + url : "./w?sid=" + jQuery("#sid").val() + + "&cmd=com.actionsoft.apps.coe.pal_processlevel_treejson&pid=" + treeNode.id + + "&wsid=" + jQuery("#wsid").val(), + method : "POST", + dataType : "json" + } + checkTree.refreshNode({ + id : treeNode.id, + dataModel : dataModel + }); + // } +} +function onClick(treeNode) { + if(treeNode.plMethodId != undefined && treeNode.plMethodId != ""){ + if (treeNode.plMethodId == "default") { + $.simpleAlert("不可以选择流程规划文件", "info"); + } else { + parent.getLinkFileValue(treeNode); + parent.$('#link_tree_dialog').dialog('close'); + } + } +} +function toggleRoot() { + $.each(checkTree.getRootNode(), function(i, node) { + checkTree.toggleCheck(node); + }); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/designer.plugs.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/designer.plugs.js new file mode 100644 index 00000000..c3af6424 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/designer.plugs.js @@ -0,0 +1,81 @@ + +/** +* Plugs +**/ + +(function($) { + + /** + * 获取相对坐标位置 + * @param {} pageX 相对屏幕的x坐标 + * @param {} pageY 相对屏幕的y坐标 + * @return {} + */ + $.getRelativePos = function(pageX, pageY, related){ + var relatedOffset = related.offset(); + if(relatedOffset == null){ + relatedOffset = {left: 0, top: 0}; + } + return { + x: pageX - relatedOffset.left + related.scrollLeft(), + y: pageY - relatedOffset.top + related.scrollTop() + }; + }; + + $.fn.draggable = function(options){ + if(typeof options == "string"){ + if(options == "disable"){ + $(this).unbind("dragstart"); + $(this).unbind("mousedown.drag"); + } + return; + } + var defaults = { + target: $(this) + }; + var opt = $.extend(defaults, options); + $(this).unbind("dragstart").bind("dragstart", function(){return false;}); + $(this).unbind("mousedown.drag").bind("mousedown.drag", function(downE){ + $(document).bind("selectstart", function(){return false;}); + if(opt.onstart){ + opt.onstart(); + } + var downOffset = { + x: downE.pageX - opt.target.offset().left, + y: downE.pageY - opt.target.offset().top + }; + var mouseMoveParent = $(document); + if(opt.relative){ + mouseMoveParent = opt.relative; + } + mouseMoveParent.bind("mousemove.drag", function(moveE){ + if(opt.relative){ + var moveTo = $.getRelativePos(moveE.pageX - downOffset.x, moveE.pageY - downOffset.y, opt.relative); + opt.target.css({ + left: moveTo.x + "px", + top: moveTo.y + "px" + }); + }else{ + opt.target.offset({ + left: moveE.pageX - downOffset.x, + top: moveE.pageY - downOffset.y + }); + } + if(opt.ondrag){ + opt.ondrag.call(opt.target, moveE.pageX, moveE.pageY); + } + }); + $(document).bind("mouseup.drag", function(upE){ + if(opt.ondrop){ + opt.ondrop.call(opt.target, upE.pageX, upE.pageY); + } + $(document).unbind("selectstart"); + mouseMoveParent.unbind("mousemove.drag"); + $(document).unbind("mouseup.drag"); + }); + }); + }; + + +})(jQuery); + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/blank_theme.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/blank_theme.css new file mode 100644 index 00000000..3b9c7828 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/blank_theme.css @@ -0,0 +1,38 @@ +/** + * Your theme name here + * + * Say something about the theme + * + * Give yourself some credit here + * + */ + +/* Container */ +.dk_mytheme .dk_container {} + .dk_mytheme a {} + +/* Toggle */ +.dk_mytheme .dk_toggle {} + .dk_mytheme .dk_toggle:hover {} + +/* Focus State */ +.dk_mytheme.dk_focus, +.dk_mytheme:focus {} + .dk_mytheme.dk_focus .dk_toggle {} + +/* Open State */ +.dk_mytheme.dk_open {} + .dk_mytheme.dk_open .dk_toggle {} + +/* Options Menu */ +.dk_mytheme .dk_options {} + .dk_mytheme .dk_options a {} + .dk_mytheme .dk_options a:hover, + .dk_mytheme .dk_option_current a {} + +/* Inner options */ +.dk_mytheme .dk_options_inner {} + +/* Set a width property here */ +.dk_mytheme .dk_options_inner, +.dk_mytheme.dk_touch .dk_options {} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/dropkick.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/dropkick.css new file mode 100644 index 00000000..96d9971d --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/dropkick.css @@ -0,0 +1,205 @@ +/** + * Default DropKick theme + * + * Feel free to edit the default theme + * or even add your own. + * + * See the readme for themeing help + * + */ + +/***** Begin Theme, feel free to edit in here! ******/ + +/* One container to bind them... */ +.dk_container { + background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f5f5f5)); + background: -moz-linear-gradient(top, #fff, #f5f5f5); + background: -o-linear-gradient(top, #fff, #f5f5f5); + background-color: #f5f5f5; + font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; + font-size: 16px; + font-weight: bold; + line-height: 24px; + margin-bottom: 18px; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + .dk_container:focus { + outline: 0; + } + .dk_container a { + cursor: pointer; + text-decoration: none; + } + +/* Opens the dropdown and holds the menu label */ +.dk_toggle { + /** + * Help: Arrow image not appearing + * Try updating this property to your correct dk_arrows.png path + */ + background-image: url('images/dk_arrows.png'); + background-repeat: no-repeat; + background-position: 90% center; + border: 1px solid #ccc; + color: #333; + padding: 7px 19px 7px 10px; + text-shadow: #fff 1px 1px 0; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -webkit-transition: border-color .5s; + -moz-transition: border-color .5s; + -o-transition: border-color .5s; + transition: border-color .5s; +} + .dk_toggle:hover { + border-color: #8c8c8c; + } + /* Applied when the dropdown is focused */ + .dk_focus .dk_toggle { + border-color: #40b5e2; + } + .dk_focus .dk_toggle { + box-shadow: 0 0 5px #40b5e2; + -moz-box-shadow: 0 0 5px #40b5e2; + -webkit-box-shadow: 0 0 5px #40b5e2; + } + +/* Applied whenever the dropdown is open */ +.dk_open { + box-shadow: 0 0 5px #40b5e2; + -moz-box-shadow: 0 0 5px #40b5e2; + -webkit-box-shadow: 0 0 5px #40b5e2; + /** + * Help: Dropdown menu is covered by something + * Try setting this value higher + */ + z-index: 10; +} + .dk_open .dk_toggle { + background-color: #ececec; + border-color: #8c8c8c; + color: #ccc; + box-shadow: inset 0 -2px 5px #ccc; + border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + -webkit-border-radius: 3px 3px 0 0; + } + +/* The outer container of the options */ +.dk_options { + box-shadow: rgba(0, 0, 0, .2) 0 2px 8px; + -moz-box-shadow: rgba(0, 0, 0, .2) 0 2px 8px; + -webkit-box-shadow: rgba(0, 0, 0, .2) 0 2px 8px; + border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + -webkit-border-radius: 0 0 3px 3px; +} +.dk_options ul{ + list-style: none outside none; +} + .dk_options a { + background-color: #fff; + border-bottom: 1px solid #999; + font-weight: bold; + padding: 8px 10px; + } + .dk_options li:last-child a { + border-bottom: none; + } + .dk_options a:hover, + .dk_option_current a { + background-color: #0084c7; + border-bottom-color: #004c72; + color: #fff; + text-decoration: none; + text-shadow: rgba(0, 0, 0, .5) 0 1px 0; + } + +/* Inner container for options, this is what makes the scrollbar possible. */ +.dk_options_inner { + border: 1px solid #8c8c8e; + border-bottom-width: 2px; + border-bottom-color: #999; + color: #333; + max-height: 250px; + text-shadow: #fff 0 1px 0; + border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + -webkit-border-radius: 0 0 3px 3px; + padding: 0px; + margin: 0px; +} + +/* Set a max-height on the options inner */ +.dk_options_inner, +.dk_touch .dk_options { + max-height: 250px; +} + +/****** End Theme ******/ + +/***** Critical to the continued enjoyment of working dropdowns ******/ + +.dk_container { + display: none; + float: left; + position: relative; +} + .dk_container a { + outline: 0; + } + +.dk_toggle { + display: -moz-inline-stack; + display: inline-block; + *display: inline; + position: relative; + zoom: 1; +} + +.dk_open { + position: relative; +} + .dk_open .dk_options { + display: block; + } + .dk_open .dk_label { + color: inherit; + } + +.dk_options { + display: none; + margin-top: -1px; + position: absolute; + right: 0; + width: 100%; +} + .dk_options a, + .dk_options a:link, + .dk_options a:visited { + display: block; + } + .dk_options_inner { + overflow: auto; + position: relative; + } + +.dk_touch .dk_options { + overflow: hidden; +} + +.dk_touch .dk_options_inner { + max-height: none; + overflow: visible; +} + +.dk_fouc select { + position: relative; + top: -99999em; + visibility: hidden; +} + +/***** End Critical to the continued enjoyment of working dropdowns ******/ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/images/dk_arrows.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/images/dk_arrows.png new file mode 100644 index 00000000..94545136 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/images/dk_arrows.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/images/dk_arrows_white.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/images/dk_arrows_white.png new file mode 100644 index 00000000..f1a31f02 Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/images/dk_arrows_white.png differ diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/jquery.dropkick-1.0.0.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/jquery.dropkick-1.0.0.js new file mode 100644 index 00000000..df51da45 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/dropkick/jquery.dropkick-1.0.0.js @@ -0,0 +1,402 @@ +/** + * DropKick + * + * Highly customizable element that gets dropkicked + lists = [], + + // Convenience keys for keyboard navigation + keyMap = { + 'left' : 37, + 'up' : 38, + 'right' : 39, + 'down' : 40, + 'enter' : 13 + }, + + // HTML template for the dropdowns + dropdownTemplate = [ + '
                                                ', + '', + '{{ label }}', + '', + '
                                                ', + '
                                                  ', + '
                                                ', + '
                                                ', + '
                                                ' + ].join(''), + + // HTML template for dropdown options + optionTemplate = '
                                              • {{ text }}
                                              • ', + + // Some nice default values + defaults = { + startSpeed : 1000, // I recommend a high value here, I feel it makes the changes less noticeable to the user + theme : false, + change : false + }, + + // Make sure we only bind keydown on the document once + keysBound = false + ; + + // Called by using $('foo').dropkick(); + methods.init = function (settings) { + settings = $.extend({}, defaults, settings); + + return this.each(function () { + var + // The current list and place our new one in front of it + $select.before($dk); + + // Update the reference to $dk + $dk = $('#dk_container_' + id).fadeIn(settings.startSpeed); + + // Save the current theme + theme = settings.theme ? settings.theme : 'default'; + $dk.addClass('dk_theme_' + theme); + data.theme = theme; + + // Save the updated $dk reference into our data object + data.$dk = $dk; + + // Save the dropkick data onto the ";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e),b=e=f=null}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
                                                ",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
                                                t
                                                ";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function"),b=null;return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}})();var e=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!g(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,h=b.nodeType,i=h?d.cache:b,j=h?b[d.expando]:d.expando;if(!i[j])return;if(c){var k=e?i[j][f]:i[j];if(k){delete k[c];if(!g(k))return}}if(e){delete i[j][f];if(!g(i[j]))return}var l=i[j][f];d.support.deleteExpando||i!=a?delete i[j]:i[j]=null,l?(i[j]={},h||(i[j].toJSON=d.noop),i[j][f]=l):h&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var g=this[0].attributes,h;for(var i=0,j=g.length;i-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var k=i?f:0,l=i?f+1:h.length;k=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=k.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&l.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var o=a.getAttributeNode("tabIndex");return o&&o.specified?o.value:m.test(a.nodeName)||n.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var p=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return p===null?b:p}h&&(a[c]=e);return a[c]}});var p=/\.(.*)$/,q=/^(?:textarea|input|select)$/i,r=/\./g,s=/ /g,t=/[^\w\s.|`]/g,u=function(a){return a.replace(t,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=v;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(){return typeof d!=="undefined"&&!d.event.triggered?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=v);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),u).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(p,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=!0,l[m]())}catch(q){}k&&(l["on"+m]=k),d.event.triggered=!1}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},B=function B(a){var c=a.target,e,f;if(q.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=A(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:B,beforedeactivate:B,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&B.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&B.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",A(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in z)d.event.add(this,c+".specialChange",z[c]);return q.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return q.test(this.nodeName)}},z=d.event.special.change.filters,z.focus=z.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function c(a){a=d.event.fix(a),a.type=b;return d.event.handle.call(this,a)}d.event.special[b]={setup:function(){this.addEventListener(a,c,!0)},teardown:function(){this.removeEventListener(a,c,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){return"text"===a.getAttribute("type")},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

                                                ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector,d=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(e){d=!0}b&&(k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(d||!l.match.PSEUDO.test(c)&&!/!=/.test(c))return b.call(a,c)}catch(e){}return k(c,null,null,[a]).length>0})}(),function(){var a=c.createElement("div");a.innerHTML="
                                                ";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(var g=c;g0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=L.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(N(c[0])||N(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=K.call(arguments);G.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!M[a]?d.unique(f):f,(this.length>1||I.test(e))&&H.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var P=/ jQuery\d+="(?:\d+|null)"/g,Q=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,S=/<([\w:]+)/,T=/",""],legend:[1,"
                                                ","
                                                "],thead:[1,"","
                                                "],tr:[2,"","
                                                "],td:[3,"","
                                                "],col:[2,"","
                                                "],area:[1,"",""],_default:[0,"",""]};X.optgroup=X.option,X.tbody=X.tfoot=X.colgroup=X.caption=X.thead,X.th=X.td,d.support.htmlSerialize||(X._default=[1,"div
                                                ","
                                                "]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(P,""):null;if(typeof a!=="string"||V.test(a)||!d.support.leadingWhitespace&&Q.test(a)||X[(S.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(R,"<$1>");try{for(var c=0,e=this.length;c1&&l0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){$(a,e),f=_(a),g=_(e);for(h=0;f[h];++h)$(f[h],g[h])}if(b){Z(a,e);if(c){f=_(a),g=_(e);for(h=0;f[h];++h)Z(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||U.test(i)){if(typeof i==="string"){i=i.replace(R,"<$1>");var j=(S.exec(i)||["",""])[1].toLowerCase(),k=X[j]||X._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=T.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]===""&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&Q.test(i)&&m.insertBefore(b.createTextNode(Q.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bb=/alpha\([^)]*\)/i,bc=/opacity=([^)]*)/,bd=/-([a-z])/ig,be=/([A-Z])/g,bf=/^-?\d+(?:px)?$/i,bg=/^-?\d/,bh={position:"absolute",visibility:"hidden",display:"block"},bi=["Left","Right"],bj=["Top","Bottom"],bk,bl,bm,bn=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bk(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bk)return bk(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bd,bn)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bo(a,b,e):d.swap(a,bh,function(){f=bo(a,b,e)});if(f<=0){f=bk(a,b,b),f==="0px"&&bm&&(f=bm(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bf.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return bc.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bb.test(f)?f.replace(bb,e):c.filter+" "+e}}),c.defaultView&&c.defaultView.getComputedStyle&&(bl=function(a,c,e){var f,g,h;e=e.replace(be,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bm=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bf.test(d)&&bg.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bk=bl||bm,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var bp=/%20/g,bq=/\[\]$/,br=/\r?\n/g,bs=/#.*$/,bt=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bu=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bv=/(?:^file|^widget|\-extension):$/,bw=/^(?:GET|HEAD)$/,bx=/^\/\//,by=/\?/,bz=/)<[^<]*)*<\/script>/gi,bA=/^(?:select|textarea)/i,bB=/\s+/,bC=/([?&])_=[^&]*/,bD=/(^|\-)([a-z])/g,bE=function(a,b,c){return b+c.toUpperCase()},bF=/^([\w\+\.\-]+:)\/\/([^\/?#:]*)(?::(\d+))?/,bG=d.fn.load,bH={},bI={},bJ,bK;try{bJ=c.location.href}catch(bL){bJ=c.createElement("a"),bJ.href="",bJ=bJ.href}bK=bF.exec(bJ.toLowerCase()),d.fn.extend({load:function(a,c,e){if(typeof a!=="string"&&bG)return bG.apply(this,arguments);if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var g=a.slice(f,a.length);a=a.slice(0,f)}var h="GET";c&&(d.isFunction(c)?(e=c,c=b):typeof c==="object"&&(c=d.param(c,d.ajaxSettings.traditional),h="POST"));var i=this;d.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?d("
                                                ").append(c.replace(bz,"")).find(g):c)),e&&i.each(e,[c,b,a])}});return this},serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?d.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bA.test(this.nodeName)||bu.test(this.type))}).map(function(a,b){var c=d(this).val();return c==null?null:d.isArray(c)?d.map(c,function(a,c){return{name:b.name,value:a.replace(br,"\r\n")}}):{name:b.name,value:c.replace(br,"\r\n")}}).get()}}),d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.bind(b,a)}}),d.each(["get","post"],function(a,c){d[c]=function(a,e,f,g){d.isFunction(e)&&(g=g||f,f=e,e=b);return d.ajax({type:c,url:a,data:e,success:f,dataType:g})}}),d.extend({getScript:function(a,c){return d.get(a,b,c,"script")},getJSON:function(a,b,c){return d.get(a,b,c,"json")},ajaxSetup:function(a,b){b?d.extend(!0,a,d.ajaxSettings,b):(b=a,a=d.extend(!0,d.ajaxSettings,b));for(var c in {context:1,url:1})c in b?a[c]=b[c]:c in d.ajaxSettings&&(a[c]=d.ajaxSettings[c]);return a},ajaxSettings:{url:bJ,isLocal:bv.test(bK[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML}},ajaxPrefilter:bM(bH),ajaxTransport:bM(bI),ajax:function(a,c){function v(a,c,l,n){if(r!==2){r=2,p&&clearTimeout(p),o=b,m=n||"",u.readyState=a?4:0;var q,t,v,w=l?bP(e,u,l):b,x,y;if(a>=200&&a<300||a===304){if(e.ifModified){if(x=u.getResponseHeader("Last-Modified"))d.lastModified[k]=x;if(y=u.getResponseHeader("Etag"))d.etag[k]=y}if(a===304)c="notmodified",q=!0;else try{t=bQ(e,w),c="success",q=!0}catch(z){c="parsererror",v=z}}else{v=c;if(!c||a)c="error",a<0&&(a=0)}u.status=a,u.statusText=c,q?h.resolveWith(f,[t,c,u]):h.rejectWith(f,[u,c,v]),u.statusCode(j),j=b,s&&g.trigger("ajax"+(q?"Success":"Error"),[u,e,q?t:v]),i.resolveWith(f,[u,c]),s&&(g.trigger("ajaxComplete",[u,e]),--d.active||d.event.trigger("ajaxStop"))}}typeof a==="object"&&(c=a,a=b),c=c||{};var e=d.ajaxSetup({},c),f=e.context||e,g=f!==e&&(f.nodeType||f instanceof d)?d(f):d.event,h=d.Deferred(),i=d._Deferred(),j=e.statusCode||{},k,l={},m,n,o,p,q,r=0,s,t,u={readyState:0,setRequestHeader:function(a,b){r||(l[a.toLowerCase().replace(bD,bE)]=b);return this},getAllResponseHeaders:function(){return r===2?m:null},getResponseHeader:function(a){var c;if(r===2){if(!n){n={};while(c=bt.exec(m))n[c[1].toLowerCase()]=c[2]}c=n[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){r||(e.mimeType=a);return this},abort:function(a){a=a||"abort",o&&o.abort(a),v(0,a);return this}};h.promise(u),u.success=u.done,u.error=u.fail,u.complete=i.done,u.statusCode=function(a){if(a){var b;if(r<2)for(b in a)j[b]=[j[b],a[b]];else b=a[u.status],u.then(b,b)}return this},e.url=((a||e.url)+"").replace(bs,"").replace(bx,bK[1]+"//"),e.dataTypes=d.trim(e.dataType||"*").toLowerCase().split(bB),e.crossDomain||(q=bF.exec(e.url.toLowerCase()),e.crossDomain=q&&(q[1]!=bK[1]||q[2]!=bK[2]||(q[3]||(q[1]==="http:"?80:443))!=(bK[3]||(bK[1]==="http:"?80:443)))),e.data&&e.processData&&typeof e.data!=="string"&&(e.data=d.param(e.data,e.traditional)),bN(bH,e,c,u);if(r===2)return!1;s=e.global,e.type=e.type.toUpperCase(),e.hasContent=!bw.test(e.type),s&&d.active++===0&&d.event.trigger("ajaxStart");if(!e.hasContent){e.data&&(e.url+=(by.test(e.url)?"&":"?")+e.data),k=e.url;if(e.cache===!1){var w=d.now(),x=e.url.replace(bC,"$1_="+w);e.url=x+(x===e.url?(by.test(e.url)?"&":"?")+"_="+w:"")}}if(e.data&&e.hasContent&&e.contentType!==!1||c.contentType)l["Content-Type"]=e.contentType;e.ifModified&&(k=k||e.url,d.lastModified[k]&&(l["If-Modified-Since"]=d.lastModified[k]),d.etag[k]&&(l["If-None-Match"]=d.etag[k])),l.Accept=e.dataTypes[0]&&e.accepts[e.dataTypes[0]]?e.accepts[e.dataTypes[0]]+(e.dataTypes[0]!=="*"?", */*; q=0.01":""):e.accepts["*"];for(t in e.headers)u.setRequestHeader(t,e.headers[t]);if(e.beforeSend&&(e.beforeSend.call(f,u,e)===!1||r===2)){u.abort();return!1}for(t in {success:1,error:1,complete:1})u[t](e[t]);o=bN(bI,e,c,u);if(o){u.readyState=1,s&&g.trigger("ajaxSend",[u,e]),e.async&&e.timeout>0&&(p=setTimeout(function(){u.abort("timeout")},e.timeout));try{r=1,o.send(l,v)}catch(y){status<2?v(-1,y):d.error(y)}}else v(-1,"No Transport");return u},param:function(a,c){var e=[],f=function(a,b){b=d.isFunction(b)?b():b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(var g in a)bO(g,a[g],c,f);return e.join("&").replace(bp,"+")}}),d.extend({active:0,lastModified:{},etag:{}});var bR=d.now(),bS=/(\=)\?(&|$)|()\?\?()/i;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return d.expando+"_"+bR++}}),d.ajaxPrefilter("json jsonp",function(b,c,e){var f=typeof b.data==="string";if(b.dataTypes[0]==="jsonp"||c.jsonpCallback||c.jsonp!=null||b.jsonp!==!1&&(bS.test(b.url)||f&&bS.test(b.data))){var g,h=b.jsonpCallback=d.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2",m=function(){a[h]=i,g&&d.isFunction(i)&&a[h](g[0])};b.jsonp!==!1&&(j=j.replace(bS,l),b.url===j&&(f&&(k=k.replace(bS,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},e.then(m,m),b.converters["script json"]=function(){g||d.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){d.globalEval(a);return a}}}),d.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),d.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var bT=d.now(),bU,bV;d.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&bX()||bY()}:bX,bV=d.ajaxSettings.xhr(),d.support.ajax=!!bV,d.support.cors=bV&&"withCredentials"in bV,bV=b,d.support.ajax&&d.ajaxTransport(function(a){if(!a.crossDomain||d.support.cors){var c;return{send:function(e,f){var g=a.xhr(),h,i;a.username?g.open(a.type,a.url,a.async,a.username,a.password):g.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)g[i]=a.xhrFields[i];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType),(!a.crossDomain||a.hasContent)&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(i in e)g.setRequestHeader(i,e[i])}catch(j){}g.send(a.hasContent&&a.data||null),c=function(e,i){var j,k,l,m,n;try{if(c&&(i||g.readyState===4)){c=b,h&&(g.onreadystatechange=d.noop,delete bU[h]);if(i)g.readyState!==4&&g.abort();else{j=g.status,l=g.getAllResponseHeaders(),m={},n=g.responseXML,n&&n.documentElement&&(m.xml=n),m.text=g.responseText;try{k=g.statusText}catch(o){k=""}j||!a.isLocal||a.crossDomain?j===1223&&(j=204):j=m.text?200:404}}}catch(p){i||f(-1,p)}m&&f(j,k,m,l)},a.async&&g.readyState!==4?(bU||(bU={},bW()),h=bT++,g.onreadystatechange=bU[h]=c):c()},abort:function(){c&&c(0,1)}}}});var bZ={},b$=/^(?:toggle|show|hide)$/,b_=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,ca,cb=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];d.fn.extend({show:function(a,b,c){var e,f;if(a||a===0)return this.animate(cc("show",3),a,b,c);for(var g=0,h=this.length;g=0;a--)c[a].elem===this&&(b&&c[a](!0),c.splice(a,1))}),b||this.dequeue();return this}}),d.each({slideDown:cc("show",1),slideUp:cc("hide",1),slideToggle:cc("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),d.extend({speed:function(a,b,c){var e=a&&typeof a==="object"?d.extend({},a):{complete:c||!c&&b||d.isFunction(a)&&a,duration:a,easing:c&&b||b&&!d.isFunction(b)&&b};e.duration=d.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in d.fx.speeds?d.fx.speeds[e.duration]:d.fx.speeds._default,e.old=e.complete,e.complete=function(){e.queue!==!1&&d(this).dequeue(),d.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig||(b.orig={})}}),d.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(d.fx.step[this.prop]||d.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=d.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return e.step(a)}var e=this,f=d.fx;this.startTime=d.now(),this.start=a,this.end=b,this.unit=c||this.unit||(d.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&d.timers.push(g)&&!ca&&(ca=setInterval(f.tick,f.interval))},show:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),d(this.elem).show()},hide:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=d.now(),c=!0;if(a||b>=this.options.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),this.options.curAnim[this.prop]=!0;for(var e in this.options.curAnim)this.options.curAnim[e]!==!0&&(c=!1);if(c){if(this.options.overflow!=null&&!d.support.shrinkWrapBlocks){var f=this.elem,g=this.options;d.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]})}this.options.hide&&d(this.elem).hide();if(this.options.hide||this.options.show)for(var h in this.options.curAnim)d.style(this.elem,h,this.options.orig[h]);this.options.complete.call(this.elem)}return!1}var i=b-this.startTime;this.state=i/this.options.duration;var j=this.options.specialEasing&&this.options.specialEasing[this.prop],k=this.options.easing||(d.easing.swing?"swing":"linear");this.pos=d.easing[j||k](this.state,i,0,1,this.options.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update();return!0}},d.extend(d.fx,{tick:function(){var a=d.timers;for(var b=0;b
                                                ";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),a=b=e=f=g=h=null,d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=e==="absolute"&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=cf.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!cf.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=cg(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=cg(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window);(function(a){a.tools=a.tools||{version:"dev"};var b=[],c,d=[75,76,38,39,74,72,40,37],e={};c=a.tools.dateinput={conf:{format:"mm/dd/yy",selectors:!1,yearRange:[-5,5],lang:"en",offset:[0,0],speed:0,firstDay:0,min:undefined,max:undefined,trigger:0,editable:0,css:{prefix:"cal",input:"date",root:0,head:0,title:0,prev:0,next:0,month:0,year:0,days:0,body:0,weeks:0,today:0,current:0,week:0,off:0,sunday:0,focus:0,disabled:0,trigger:0}},localize:function(b,c){a.each(c,function(a,b){c[a]=b.split(",")}),e[b]=c}},c.localize("en",{months:"January,February,March,April,May,June,July,August,September,October,November,December",shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",days:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",shortDays:"Sun,Mon,Tue,Wed,Thu,Fri,Sat"});function f(a,b){return 32-(new Date(a,b,32)).getDate()}function g(a,b){a=""+a,b=b||2;while(a.length");function j(a,b,c){var d=a.getDate(),f=a.getDay(),j=a.getMonth(),k=a.getFullYear(),l={d:d,dd:g(d),ddd:e[c].shortDays[f],dddd:e[c].days[f],m:j+1,mm:g(j+1),mmm:e[c].shortMonths[j],mmmm:e[c].months[j],yy:String(k).slice(2),yyyy:k},m=b.replace(h,function(a){return a in l?l[a]:a.slice(1,a.length-1)});return i.html(m).html()}function k(a){return parseInt(a,10)}function l(a,b){return a.getFullYear()===b.getFullYear()&&a.getMonth()==b.getMonth()&&a.getDate()==b.getDate()}function m(a){if(a!==undefined){if(a.constructor==Date)return a;if(typeof a=="string"){var b=a.split("-");if(b.length==3)return new Date(k(b[0]),k(b[1])-1,k(b[2]));if(!/^-?\d+$/.test(a))return;a=k(a)}var c=new Date;c.setDate(c.getDate()+a);return c}}function n(c,g){var h=this,i=new Date,n=i.getFullYear(),o=g.css,p=e[g.lang],q=a("#"+o.root),r=q.find("#"+o.title),s,t,u,v,w,x,y=c.attr("data-value")||g.value||c.val(),z=c.attr("min")||g.min,A=c.attr("max")||g.max,B,C;z===0&&(z="0"),y=m(y)||i,z=m(z||new Date(n+g.yearRange[0],1,1)),A=m(A||new Date(n+g.yearRange[1]+1,1,-1));if(!p)throw"Dateinput: invalid language: "+g.lang;if(c.attr("type")=="date"){var C=c.clone(),D=C.wrap("
                                                ").parent().html(),E=a(D.replace(/type/i,"type=text data-orig-type"));E.val(g.value),c.replaceWith(E),c=E}c.addClass(o.input);var F=c.add(h);if(!q.length){q=a("
                                                ").hide().css({position:"absolute"}).attr("id",o.root),q.children().eq(0).attr("id",o.head).end().eq(1).attr("id",o.body).children().eq(0).attr("id",o.days).end().eq(1).attr("id",o.weeks).end().end().end().find("a").eq(0).attr("id",o.prev).end().eq(1).attr("id",o.next),r=q.find("#"+o.head).find("div").attr("id",o.title);if(g.selectors){var G=a("").attr("id",o.year);r.html(G.add(H))}var I=q.find("#"+o.days);for(var J=0;J<7;J++)I.append(a("").text(p.shortDays[(J+g.firstDay)%7]));a("body").append(q)}g.trigger&&(s=a("").attr("href","#").addClass(o.trigger).click(function(a){h.show();return a.preventDefault()}).insertAfter(c));var K=q.find("#"+o.weeks);H=q.find("#"+o.year),G=q.find("#"+o.month);function L(b,d,e){y=b,v=b.getFullYear(),w=b.getMonth(),x=b.getDate(),e=e||a.Event("api"),e.type="change",F.trigger(e,[b]);e.isDefaultPrevented()||(c.val(j(b,d.format,d.lang)),c.data("date",b),h.hide(e))}function M(b){b.type="onShow",F.trigger(b),a(document).bind("keydown.d",function(b){if(b.ctrlKey)return!0;var e=b.keyCode;if(e==8){c.val("");return h.hide(b)}if(e==27||e==9)return h.hide(b);if(a(d).index(e)>=0){if(!B){h.show(b);return b.preventDefault()}var f=a("#"+o.weeks+" a"),g=a("."+o.focus),i=f.index(g);g.removeClass(o.focus);if(e==74||e==40)i+=7;else if(e==75||e==38)i-=7;else if(e==76||e==39)i+=1;else if(e==72||e==37)i-=1;i>41?(h.addMonth(),g=a("#"+o.weeks+" a:eq("+(i-42)+")")):i<0?(h.addMonth(-1),g=a("#"+o.weeks+" a:eq("+(i+42)+")")):g=f.eq(i),g.addClass(o.focus);return b.preventDefault()}if(e==34)return h.addMonth();if(e==33)return h.addMonth(-1);if(e==36)return h.today();e==13&&(a(b.target).is("select")||a("."+o.focus).click());return a([16,17,18,9]).index(e)>=0}),a(document).bind("click.d",function(b){var d=b.target;!a(d).parents("#"+o.root).length&&d!=c[0]&&(!s||d!=s[0])&&h.hide(b)})}a.extend(h,{show:function(d){if(!(c.attr("readonly")||c.attr("disabled")||B)){d=d||a.Event(),d.type="onBeforeShow",F.trigger(d);if(d.isDefaultPrevented())return;a.each(b,function(){this.hide()}),B=!0,G.unbind("change").change(function(){h.setValue(H.val(),a(this).val())}),H.unbind("change").change(function(){h.setValue(a(this).val(),G.val())}),t=q.find("#"+o.prev).unbind("click").click(function(a){t.hasClass(o.disabled)||h.addMonth(-1);return!1}),u=q.find("#"+o.next).unbind("click").click(function(a){u.hasClass(o.disabled)||h.addMonth();return!1}),h.setValue(y);var e=c.offset();/iPad/i.test(navigator.userAgent)&&(e.top-=a(window).scrollTop()),q.css({top:e.top+c.outerHeight({margins:!0})+g.offset[0],left:e.left+g.offset[1]}),g.speed?q.show(g.speed,function(){M(d)}):(q.show(),M(d));return h}},setValue:function(b,c,d){var e=k(c)>=-1?new Date(k(b),k(c),k(d||1)):b||y;eA&&(e=A),typeof b=="string"&&(e=m(b)),b=e.getFullYear(),c=e.getMonth(),d=e.getDate(),c==-1?(c=11,b--):c==12&&(c=0,b++);if(!B){L(e,g);return h}w=c,v=b;var j=new Date(b,c,1-g.firstDay),n=j.getDay(),q=f(b,c),s=f(b,c-1),x;if(g.selectors){G.empty(),a.each(p.months,function(c,d){znew Date(b,c,0)&&G.append(a(""),E%7===0&&(x=a("
                                                ").addClass(o.week),K.append(x)),EA&&F.add(u).addClass(o.disabled),F.attr("href","#"+I).text(I).data("date",e),x.append(F);K.find("a").click(function(b){var c=a(this);c.hasClass(o.disabled)||(a("#"+o.current).removeAttr("id"),c.attr("id",o.current),L(c.data("date"),g,b));return!1}),o.sunday&&K.find(o.week).each(function(){var b=g.firstDay?7-g.firstDay:0;a(this).children().slice(b,b+1).addClass(o.sunday)});return h},setMin:function(a,b){z=m(a),b&&yA&&h.setValue(A);return h},today:function(){return h.setValue(i)},addDay:function(a){return this.setValue(v,w,x+(a||1))},addMonth:function(a){return this.setValue(v,w+(a||1),x)},addYear:function(a){return this.setValue(v+(a||1),w,x)},destroy:function(){c.add(document).unbind("click.d").unbind("keydown.d"),q.add(s).remove(),c.removeData("dateinput").removeClass(o.input),C&&c.replaceWith(C)},hide:function(b){if(B){b=a.Event(),b.type="onHide",F.trigger(b),a(document).unbind("click.d").unbind("keydown.d");if(b.isDefaultPrevented())return;q.hide(),B=!1}return h},getConf:function(){return g},getInput:function(){return c},getCalendar:function(){return q},getValue:function(a){return a?j(y,a,g.lang):y},isOpen:function(){return B}}),a.each(["onBeforeShow","onShow","change","onHide"],function(b,c){a.isFunction(g[c])&&a(h).bind(c,g[c]),h[c]=function(b){b&&a(h).bind(c,b);return h}}),g.editable||c.bind("focus.d click.d",h.show).keydown(function(b){var c=b.keyCode;if(!B&&a(d).index(c)>=0){h.show(b);return b.preventDefault()}return b.shiftKey||b.ctrlKey||b.altKey||c==9?!0:b.preventDefault()}),m(c.val())&&L(y,g)}a.expr[":"].date=function(b){var c=b.getAttribute("type");return c&&c=="date"||a(b).data("dateinput")},a.fn.dateinput=function(d){if(this.data("dateinput"))return this;d=a.extend(!0,{},c.conf,d),a.each(d.css,function(a,b){!b&&a!="prefix"&&(d.css[a]=(d.css.prefix||"")+(b||a))});var e;this.each(function(){var c=new n(a(this),d);b.push(c);var f=c.getInput().data("dateinput",c);e=e?e.add(f):f});return e?e:this}})(jQuery); +(function(a){a.tools=a.tools||{version:"dev"},a.tools.overlay={addEffect:function(a,b,d){c[a]=[b,d]},conf:{close:null,closeOnClick:!0,closeOnEsc:!0,closeSpeed:"fast",effect:"default",fixed:!a.browser.msie||a.browser.version>6,left:"center",load:!1,mask:null,oneInstance:!0,speed:"normal",target:null,top:"10%"}};var b=[],c={};a.tools.overlay.addEffect("default",function(b,c){var d=this.getConf(),e=a(window);d.fixed||(b.top+=e.scrollTop(),b.left+=e.scrollLeft()),b.position=d.fixed?"fixed":"absolute",this.getOverlay().css(b).fadeIn(d.speed,c)},function(a){this.getOverlay().fadeOut(this.getConf().closeSpeed,a)});function d(d,e){var f=this,g=d.add(f),h=a(window),i,j,k,l=a.tools.expose&&(e.mask||e.expose),m=Math.random().toString().slice(10);l&&(typeof l=="string"&&(l={color:l}),l.closeOnClick=l.closeOnEsc=!1);var n=e.target||d.attr("rel");j=n?a(n):null||d;if(!j.length)throw"Could not find Overlay: "+n;d&&d.index(j)==-1&&d.click(function(a){f.load(a);return a.preventDefault()}),a.extend(f,{load:function(d){if(f.isOpened())return f;var i=c[e.effect];if(!i)throw"Overlay: cannot find effect : \""+e.effect+"\"";e.oneInstance&&a.each(b,function(){this.close(d)}),d=d||a.Event(),d.type="onBeforeLoad",g.trigger(d);if(d.isDefaultPrevented())return f;k=!0,l&&a(j).expose(l);var n=e.top,o=e.left,p=j.outerWidth({margin:!0}),q=j.outerHeight({margin:!0});typeof n=="string"&&(n=n=="center"?Math.max((h.height()-q)/2,0):parseInt(n,10)/100*h.height()),o=="center"&&(o=Math.max((h.width()-p)/2,0)),i[0].call(f,{top:n,left:o},function(){k&&(d.type="onLoad",g.trigger(d))}),l&&e.closeOnClick&&a.mask.getMask().one("click",f.close),e.closeOnClick&&a(document).bind("click."+m,function(b){a(b.target).parents(j).length||f.close(b)}),e.closeOnEsc&&a(document).bind("keydown."+m,function(a){a.keyCode==27&&f.close(a)});return f},close:function(b){if(!f.isOpened())return f;b=b||a.Event(),b.type="onBeforeClose",g.trigger(b);if(!b.isDefaultPrevented()){k=!1,c[e.effect][1].call(f,function(){b.type="onClose",g.trigger(b)}),a(document).unbind("click."+m).unbind("keydown."+m),l&&a.mask.close();return f}},getOverlay:function(){return j},getTrigger:function(){return d},getClosers:function(){return i},isOpened:function(){return k},getConf:function(){return e}}),a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(b,c){a.isFunction(e[c])&&a(f).bind(c,e[c]),f[c]=function(b){b&&a(f).bind(c,b);return f}}),i=j.find(e.close||".close"),!i.length&&!e.close&&(i=a(""),j.prepend(i)),i.click(function(a){f.close(a)}),e.load&&f.load()}a.fn.overlay=function(c){var e=this.data("overlay");if(e)return e;a.isFunction(c)&&(c={onBeforeLoad:c}),c=a.extend(!0,{},a.tools.overlay.conf,c),this.each(function(){e=new d(a(this),c),b.push(e),a(this).data("overlay",e)});return c.api?e:this}})(jQuery); +(function(a){var b=a.tools.overlay,c=a(window);a.extend(b.conf,{start:{top:null,left:null},fadeInSpeed:"fast",zIndex:9999});function d(a){var b=a.offset();return{top:b.top+a.height()/2,left:b.left+a.width()/2}}var e=function(b,e){var f=this.getOverlay(),g=this.getConf(),h=this.getTrigger(),i=this,j=f.outerWidth({margin:!0}),k=f.data("img"),l=g.fixed?"fixed":"absolute";if(!k){var m=f.css("backgroundImage");if(!m)throw"background-image CSS property not set for overlay";m=m.slice(m.indexOf("(")+1,m.indexOf(")")).replace(/\"/g,""),f.css("backgroundImage","none"),k=a(""),k.css({border:0,display:"none"}).width(j),a("body").append(k),f.data("img",k)}var n=g.start.top||Math.round(c.height()/2),o=g.start.left||Math.round(c.width()/2);if(h){var p=d(h);n=p.top,o=p.left}g.fixed?(n-=c.scrollTop(),o-=c.scrollLeft()):(b.top+=c.scrollTop(),b.left+=c.scrollLeft()),k.css({position:"absolute",top:n,left:o,width:0,zIndex:g.zIndex}).show(),b.position=l,f.css(b),k.animate({top:f.css("top"),left:f.css("left"),width:j},g.speed,function(){f.css("zIndex",g.zIndex+1).fadeIn(g.fadeInSpeed,function(){i.isOpened()&&!a(this).index(f)?e.call():f.hide()})}).css("position",l)},f=function(b){var e=this.getOverlay().hide(),f=this.getConf(),g=this.getTrigger(),h=e.data("img"),i={top:f.start.top,left:f.start.left,width:0};g&&a.extend(i,d(g)),f.fixed&&h.css({position:"absolute"}).animate({top:"+="+c.scrollTop(),left:"+="+c.scrollLeft()},0),h.animate(i,f.closeSpeed,b)};b.addEffect("apple",e,f)})(jQuery); +(function(a){a.tools=a.tools||{version:"dev"};var b;b=a.tools.rangeinput={conf:{min:0,max:100,step:"any",steps:0,value:0,precision:undefined,vertical:0,keyboard:!0,progress:!1,speed:100,css:{input:"range",slider:"slider",progress:"progress",handle:"handle"}}};var c,d;a.fn.drag=function(b){document.ondragstart=function(){return!1},b=a.extend({x:!0,y:!0,drag:!0},b),c=c||a(document).bind("mousedown mouseup",function(e){var f=a(e.target);if(e.type=="mousedown"&&f.data("drag")){var g=f.position(),h=e.pageX-g.left,i=e.pageY-g.top,j=!0;c.bind("mousemove.drag",function(a){var c=a.pageX-h,e=a.pageY-i,g={};b.x&&(g.left=c),b.y&&(g.top=e),j&&(f.trigger("dragStart"),j=!1),b.drag&&f.css(g),f.trigger("drag",[e,c]),d=f}),e.preventDefault()}else try{d&&d.trigger("dragEnd")}finally{c.unbind("mousemove.drag"),d=null}});return this.data("drag",!0)};function e(a,b){var c=Math.pow(10,b);return Math.round(a*c)/c}function f(a,b){var c=parseInt(a.css(b),10);if(c)return c;var d=a[0].currentStyle;return d&&d.width&&parseInt(d.width,10)}function g(a){var b=a.data("events");return b&&b.onSlide}function h(b,c){var d=this,h=c.css,i=a("
                                                ").data("rangeinput",d),j,k,l,m,n;b.before(i);var o=i.addClass(h.slider).find("a").addClass(h.handle),p=i.find("div").addClass(h.progress);a.each("min,max,step,value".split(","),function(a,d){var e=b.attr(d);parseFloat(e)&&(c[d]=parseFloat(e,10))});var q=c.max-c.min,r=c.step=="any"?0:c.step,s=c.precision;if(s===undefined)try{s=r.toString().split(".")[1].length}catch(t){s=0}if(b.attr("type")=="range"){var u=b.clone().wrap("
                                                ").parent().html(),v=a(u.replace(/type/i,"type=text data-orig-type"));v.val(c.value),b.replaceWith(v),b=v}b.addClass(h.input);var w=a(d).add(b),x=!0;function y(a,f,g,h){g===undefined?g=f/m*q:h&&(g-=c.min),r&&(g=Math.round(g/r)*r);if(f===undefined||r)f=g*m/q;if(isNaN(g))return d;f=Math.max(0,Math.min(f,m)),g=f/m*q;if(h||!j)g+=c.min;j&&(h?f=m-f:g=c.max-g),g=e(g,s);var i=a.type=="click";if(x&&k!==undefined&&!i){a.type="onSlide",w.trigger(a,[g,f]);if(a.isDefaultPrevented())return d}var l=i?c.speed:0,t=i?function(){a.type="change",w.trigger(a,[g])}:null;j?(o.animate({top:f},l,t),c.progress&&p.animate({height:m-f+o.width()/2},l)):(o.animate({left:f},l,t),c.progress&&p.animate({width:f+o.width()/2},l)),k=g,n=f,b.val(g);return d}a.extend(d,{getValue:function(){return k},setValue:function(b,c){z();return y(c||a.Event("api"),undefined,b,!0)},getConf:function(){return c},getProgress:function(){return p},getHandle:function(){return o},getInput:function(){return b},step:function(b,e){e=e||a.Event();var f=c.step=="any"?1:c.step;d.setValue(k+f*(b||1),e)},stepUp:function(a){return d.step(a||1)},stepDown:function(a){return d.step(-a||-1)}}),a.each("onSlide,change".split(","),function(b,e){a.isFunction(c[e])&&a(d).bind(e,c[e]),d[e]=function(b){b&&a(d).bind(e,b);return d}}),o.drag({drag:!1}).bind("dragStart",function(){z(),x=g(a(d))||g(b)}).bind("drag",function(a,c,d){if(b.is(":disabled"))return!1;y(a,j?c:d)}).bind("dragEnd",function(a){a.isDefaultPrevented()||(a.type="change",w.trigger(a,[k]))}).click(function(a){return a.preventDefault()}),i.click(function(a){if(b.is(":disabled")||a.target==o[0])return a.preventDefault();z();var c=o.width()/2;y(a,j?m-l-c+a.pageY:a.pageX-l-c)}),c.keyboard&&b.keydown(function(c){if(!b.attr("readonly")){var e=c.keyCode,f=a([75,76,38,33,39]).index(e)!=-1,g=a([74,72,40,34,37]).index(e)!=-1;if((f||g)&&!(c.shiftKey||c.altKey||c.ctrlKey)){f?d.step(e==33?10:1,c):g&&d.step(e==34?-10:-1,c);return c.preventDefault()}}}),b.blur(function(b){var c=a(this).val();c!==k&&d.setValue(c,b)}),a.extend(b[0],{stepUp:d.stepUp,stepDown:d.stepDown});function z(){j=c.vertical||f(i,"height")>f(i,"width"),j?(m=f(i,"height")-f(o,"height"),l=i.offset().top+m):(m=f(i,"width")-f(o,"width"),l=i.offset().left)}function A(){z(),d.setValue(c.value!==undefined?c.value:c.min)}A(),m||a(window).load(A)}a.expr[":"].range=function(b){var c=b.getAttribute("type");return c&&c=="range"||a(b).filter("input").data("rangeinput")},a.fn.rangeinput=function(c){if(this.data("rangeinput"))return this;c=a.extend(!0,{},b.conf,c);var d;this.each(function(){var b=new h(a(this),a.extend(!0,{},c)),e=b.getInput().data("rangeinput",b);d=d?d.add(e):e});return d?d:this}})(jQuery); +(function(a){a.tools=a.tools||{version:"dev"},a.tools.scrollable={conf:{activeClass:"active",circular:!1,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:"> *",items:".items",keyboard:!0,mousewheel:!1,next:".next",prev:".prev",size:1,speed:400,vertical:!1,touch:!0,wheelSpeed:0}};function b(a,b){var c=parseInt(a.css(b),10);if(c)return c;var d=a[0].currentStyle;return d&&d.width&&parseInt(d.width,10)}function c(b,c){var d=a(c);return d.length<2?d:b.parent().find(c)}var d;function e(b,e){var f=this,g=b.add(f),h=b.children(),i=0,j=e.vertical;d||(d=f),h.length>1&&(h=a(e.items,b)),e.size>1&&(e.circular=!1),a.extend(f,{getConf:function(){return e},getIndex:function(){return i},getSize:function(){return f.getItems().size()},getNaviButtons:function(){return n.add(o)},getRoot:function(){return b},getItemWrap:function(){return h},getItems:function(){return h.find(e.item).not("."+e.clonedClass)},move:function(a,b){return f.seekTo(i+a,b)},next:function(a){return f.move(e.size,a)},prev:function(a){return f.move(-e.size,a)},begin:function(a){return f.seekTo(0,a)},end:function(a){return f.seekTo(f.getSize()-1,a)},focus:function(){d=f;return f},addItem:function(b){b=a(b),e.circular?(h.children().last().before(b),h.children().first().replaceWith(b.clone().addClass(e.clonedClass))):(h.append(b),o.removeClass("disabled")),g.trigger("onAddItem",[b]);return f},seekTo:function(b,c,k){b.jquery||(b*=1);if(e.circular&&b===0&&i==-1&&c!==0)return f;if(!e.circular&&b<0||b>f.getSize()||b<-1)return f;var l=b;b.jquery?b=f.getItems().index(b):l=f.getItems().eq(b);var m=a.Event("onBeforeSeek");if(!k){g.trigger(m,[b,c]);if(m.isDefaultPrevented()||!l.length)return f}var n=j?{top:-l.position().top}:{left:-l.position().left};i=b,d=f,c===undefined&&(c=e.speed),h.animate(n,c,e.easing,k||function(){g.trigger("onSeek",[b])});return f}}),a.each(["onBeforeSeek","onSeek","onAddItem"],function(b,c){a.isFunction(e[c])&&a(f).bind(c,e[c]),f[c]=function(b){b&&a(f).bind(c,b);return f}});if(e.circular){var k=f.getItems().slice(-1).clone().prependTo(h),l=f.getItems().eq(1).clone().appendTo(h);k.add(l).addClass(e.clonedClass),f.onBeforeSeek(function(a,b,c){if(!a.isDefaultPrevented()){if(b==-1){f.seekTo(k,c,function(){f.end(0)});return a.preventDefault()}b==f.getSize()&&f.seekTo(l,c,function(){f.begin(0)})}});var m=b.parents().add(b).filter(function(){if(a(this).css("display")==="none")return!0});m.length?(m.show(),f.seekTo(0,0,function(){}),m.hide()):f.seekTo(0,0,function(){})}var n=c(b,e.prev).click(function(){f.prev()}),o=c(b,e.next).click(function(){f.next()});e.circular||(f.onBeforeSeek(function(a,b){setTimeout(function(){a.isDefaultPrevented()||(n.toggleClass(e.disabledClass,b<=0),o.toggleClass(e.disabledClass,b>=f.getSize()-1))},1)}),e.initialIndex||n.addClass(e.disabledClass)),f.getSize()<2&&n.add(o).addClass(e.disabledClass),e.mousewheel&&a.fn.mousewheel&&b.mousewheel(function(a,b){if(e.mousewheel){f.move(b<0?1:-1,e.wheelSpeed||50);return!1}});if(e.touch){var p={};h[0].ontouchstart=function(a){var b=a.touches[0];p.x=b.clientX,p.y=b.clientY},h[0].ontouchmove=function(a){if(a.touches.length==1&&!h.is(":animated")){var b=a.touches[0],c=p.x-b.clientX,d=p.y-b.clientY;f[j&&d>0||!j&&c>0?"next":"prev"](),a.preventDefault()}}}e.keyboard&&a(document).bind("keydown.scrollable",function(b){if(!(!e.keyboard||b.altKey||b.ctrlKey||b.metaKey||a(b.target).is(":input"))){if(e.keyboard!="static"&&d!=f)return;var c=b.keyCode;if(j&&(c==38||c==40)){f.move(c==38?-1:1);return b.preventDefault()}if(!j&&(c==37||c==39)){f.move(c==37?-1:1);return b.preventDefault()}}}),e.initialIndex&&f.seekTo(e.initialIndex,0,function(){})}a.fn.scrollable=function(b){var c=this.data("scrollable");if(c)return c;b=a.extend({},a.tools.scrollable.conf,b),this.each(function(){c=new e(a(this),b),a(this).data("scrollable",c)});return b.api?c:this}})(jQuery); +(function(a){var b=a.tools.scrollable;b.autoscroll={conf:{autoplay:!0,interval:3e3,autopause:!0}},a.fn.autoscroll=function(c){typeof c=="number"&&(c={interval:c});var d=a.extend({},b.autoscroll.conf,c),e;this.each(function(){var b=a(this).data("scrollable");b&&(e=b);var c,f=!0;b.play=function(){c||(f=!1,c=setInterval(function(){b.next()},d.interval))},b.pause=function(){c=clearInterval(c)},b.stop=function(){b.pause(),f=!0},d.autopause&&b.getRoot().add(b.getNaviButtons()).hover(b.pause,b.play),d.autoplay&&b.play()});return d.api?e:this}})(jQuery); +(function(a){var b=a.tools.scrollable;b.navigator={conf:{navi:".navi",naviItem:null,activeClass:"active",indexed:!1,idPrefix:null,history:!1}};function c(b,c){var d=a(c);return d.length<2?d:b.parent().find(c)}a.fn.navigator=function(d){typeof d=="string"&&(d={navi:d}),d=a.extend({},b.navigator.conf,d);var e;this.each(function(){var b=a(this).data("scrollable"),f=d.navi.jquery?d.navi:c(b.getRoot(),d.navi),g=b.getNaviButtons(),h=d.activeClass,i=d.history&&history.pushState,j=b.getConf().size;b&&(e=b),b.getNaviButtons=function(){return g.add(f)},i&&(history.pushState({i:0}),a(window).bind("popstate",function(a){var c=a.originalEvent.state;c&&b.seekTo(c.i)}));function k(a,c,d){b.seekTo(c),d.preventDefault(),i&&history.pushState({i:c})}function l(){return f.find(d.naviItem||"> *")}function m(b){var c=a("<"+(d.naviItem||"a")+"/>").click(function(c){k(a(this),b,c)});b===0&&c.addClass(h),d.indexed&&c.text(b+1),d.idPrefix&&c.attr("id",d.idPrefix+b);return c.appendTo(f)}l().length?l().each(function(b){a(this).click(function(c){k(a(this),b,c)})}):a.each(b.getItems(),function(a){a%j==0&&m(a)}),b.onBeforeSeek(function(a,b){setTimeout(function(){if(!a.isDefaultPrevented()){var c=b/j,d=l().eq(c);d.length&&l().removeClass(h).eq(c).addClass(h)}},1)}),b.onAddItem(function(a,c){var d=b.getItems().index(c);d%j==0&&m(d)})});return d.api?e:this}})(jQuery); +(function(a){a.tools=a.tools||{version:"dev"},a.tools.tabs={conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",rotate:!1,history:!1},addEffect:function(a,c){b[a]=c}};var b={"default":function(a,b){this.getPanes().hide().eq(a).show(),b.call()},fade:function(a,b){var c=this.getConf(),d=c.fadeOutSpeed,e=this.getPanes();d?e.fadeOut(d):e.hide(),e.eq(a).fadeIn(c.fadeInSpeed,b)},slide:function(a,b){this.getPanes().slideUp(200),this.getPanes().eq(a).slideDown(400,b)},ajax:function(a,b){this.getPanes().eq(0).load(this.getTabs().eq(a).attr("href"),b)}},c;a.tools.tabs.addEffect("horizontal",function(b,d){c||(c=this.getPanes().eq(0).width()),this.getCurrentPane().animate({width:0},function(){a(this).hide()}),this.getPanes().eq(b).animate({width:c},function(){a(this).show(),d.call()})});function d(c,d,e){var f=this,g=c.add(this),h=c.find(e.tabs),i=d.jquery?d:c.children(d),j;h.length||(h=c.children()),i.length||(i=c.parent().find(d)),i.length||(i=a(d)),a.extend(this,{click:function(c,d){var i=h.eq(c);typeof c=="string"&&c.replace("#","")&&(i=h.filter("[href*="+c.replace("#","")+"]"),c=Math.max(h.index(i),0));if(e.rotate){var k=h.length-1;if(c<0)return f.click(k,d);if(c>k)return f.click(0,d)}if(!i.length){if(j>=0)return f;c=e.initialIndex,i=h.eq(c)}if(c===j)return f;d=d||a.Event(),d.type="onBeforeClick",g.trigger(d,[c]);if(!d.isDefaultPrevented()){b[e.effect].call(f,c,function(){d.type="onClick",g.trigger(d,[c])}),j=c,h.removeClass(e.current),i.addClass(e.current);return f}},getConf:function(){return e},getTabs:function(){return h},getPanes:function(){return i},getCurrentPane:function(){return i.eq(j)},getCurrentTab:function(){return h.eq(j)},getIndex:function(){return j},next:function(){return f.click(j+1)},prev:function(){return f.click(j-1)},destroy:function(){h.unbind(e.event).removeClass(e.current),i.find("a[href^=#]").unbind("click.T");return f}}),a.each("onBeforeClick,onClick".split(","),function(b,c){a.isFunction(e[c])&&a(f).bind(c,e[c]),f[c]=function(b){b&&a(f).bind(c,b);return f}}),e.history&&a.fn.history&&(a.tools.history.init(h),e.event="history"),h.each(function(b){a(this).bind(e.event,function(a){f.click(b,a);return a.preventDefault()})}),i.find("a[href^=#]").bind("click.T",function(b){f.click(a(this).attr("href"),b)}),location.hash&&e.tabs=="a"&&c.find("[href="+location.hash+"]").length?f.click(location.hash):(e.initialIndex===0||e.initialIndex>0)&&f.click(e.initialIndex)}a.fn.tabs=function(b,c){var e=this.data("tabs");e&&(e.destroy(),this.removeData("tabs")),a.isFunction(c)&&(c={onBeforeClick:c}),c=a.extend({},a.tools.tabs.conf,c),this.each(function(){e=new d(a(this),b,c),a(this).data("tabs",e)});return c.api?e:this}})(jQuery); +(function(a){var b;b=a.tools.tabs.slideshow={conf:{next:".forward",prev:".backward",disabledClass:"disabled",autoplay:!1,autopause:!0,interval:3e3,clickable:!0,api:!1}};function c(b,c){var d=this,e=b.add(this),f=b.data("tabs"),g,h=!0;function i(c){var d=a(c);return d.length<2?d:b.parent().find(c)}var j=i(c.next).click(function(){f.next()}),k=i(c.prev).click(function(){f.prev()});a.extend(d,{getTabs:function(){return f},getConf:function(){return c},play:function(){if(g)return d;var b=a.Event("onBeforePlay");e.trigger(b);if(b.isDefaultPrevented())return d;g=setInterval(f.next,c.interval),h=!1,e.trigger("onPlay");return d},pause:function(){if(!g)return d;var b=a.Event("onBeforePause");e.trigger(b);if(b.isDefaultPrevented())return d;g=clearInterval(g),e.trigger("onPause");return d},stop:function(){d.pause(),h=!0}}),a.each("onBeforePlay,onPlay,onBeforePause,onPause".split(","),function(b,e){a.isFunction(c[e])&&a(d).bind(e,c[e]),d[e]=function(b){return a(d).bind(e,b)}}),c.autopause&&f.getTabs().add(j).add(k).add(f.getPanes()).hover(d.pause,function(){h||d.play()}),c.autoplay&&d.play(),c.clickable&&f.getPanes().click(function(){f.next()});if(!f.getConf().rotate){var l=c.disabledClass;f.getIndex()||k.addClass(l),f.onBeforeClick(function(a,b){k.toggleClass(l,!b),j.toggleClass(l,b==f.getTabs().length-1)})}}a.fn.slideshow=function(d){var e=this.data("slideshow");if(e)return e;d=a.extend({},b.conf,d),this.each(function(){e=new c(a(this),d),a(this).data("slideshow",e)});return d.api?e:this}})(jQuery); +(function(a){a.tools=a.tools||{version:"dev"};var b;b=a.tools.expose={conf:{maskId:"exposeMask",loadSpeed:"slow",closeSpeed:"fast",closeOnClick:!0,closeOnEsc:!0,zIndex:9998,opacity:.8,startOpacity:0,color:"#fff",onLoad:null,onClose:null}};function c(){if(a.browser.msie){var b=a(document).height(),c=a(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,b-c<20?c:b]}return[a(document).width(),a(document).height()]}function d(b){if(b)return b.call(a.mask)}var e,f,g,h,i;a.mask={load:function(j,k){if(g)return this;typeof j=="string"&&(j={color:j}),j=j||h,h=j=a.extend(a.extend({},b.conf),j),e=a("#"+j.maskId),e.length||(e=a("
                                                ").attr("id",j.maskId),a("body").append(e));var l=c();e.css({position:"absolute",top:0,left:0,width:l[0],height:l[1],display:"none",opacity:j.startOpacity,zIndex:j.zIndex}),j.color&&e.css("backgroundColor",j.color);if(d(j.onBeforeLoad)===!1)return this;j.closeOnEsc&&a(document).bind("keydown.mask",function(b){b.keyCode==27&&a.mask.close(b)}),j.closeOnClick&&e.bind("click.mask",function(b){a.mask.close(b)}),a(window).bind("resize.mask",function(){a.mask.fit()}),k&&k.length&&(i=k.eq(0).css("zIndex"),a.each(k,function(){var b=a(this);/relative|absolute|fixed/i.test(b.css("position"))||b.css("position","relative")}),f=k.css({zIndex:Math.max(j.zIndex+1,i=="auto"?0:i)})),e.css({display:"block"}).fadeTo(j.loadSpeed,j.opacity,function(){a.mask.fit(),d(j.onLoad),g="full"}),g=!0;return this},close:function(){if(g){if(d(h.onBeforeClose)===!1)return this;e.fadeOut(h.closeSpeed,function(){d(h.onClose),f&&f.css({zIndex:i}),g=!1}),a(document).unbind("keydown.mask"),e.unbind("click.mask"),a(window).unbind("resize.mask")}return this},fit:function(){if(g){var a=c();e.css({width:a[0],height:a[1]})}},getMask:function(){return e},isLoaded:function(a){return a?g=="full":g},getConf:function(){return h},getExposed:function(){return f}},a.fn.mask=function(b){a.mask.load(b);return this},a.fn.expose=function(b){a.mask.load(b,this);return this}})(jQuery); +(function(){var a=document.all,b="http://www.adobe.com/go/getflashplayer",c=typeof jQuery=="function",d=/(\d+)[^\d]+(\d+)[^\d]*(\d*)/,e={width:"100%",height:"100%",id:"_"+(""+Math.random()).slice(9),allowfullscreen:!0,allowscriptaccess:"always",quality:"high",version:[3,0],onFail:null,expressInstall:null,w3c:!1,cachebusting:!1};window.attachEvent&&window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){},__flash_savedUnloadHandler=function(){}});function f(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function g(a,b){var c=[];for(var d in a)a.hasOwnProperty(d)&&(c[d]=b(a[d]));return c}window.flashembed=function(a,b,c){typeof a=="string"&&(a=document.getElementById(a.replace("#","")));if(a){typeof b=="string"&&(b={src:b});return new j(a,f(f({},e),b),c)}};var h=f(window.flashembed,{conf:e,getVersion:function(){var a,b;try{b=navigator.plugins["Shockwave Flash"].description.slice(16)}catch(c){try{a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"),b=a&&a.GetVariable("$version")}catch(e){try{a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"),b=a&&a.GetVariable("$version")}catch(f){}}}b=d.exec(b);return b?[b[1],b[3]]:[0,0]},asString:function(a){if(a===null||a===undefined)return null;var b=typeof a;b=="object"&&a.push&&(b="array");switch(b){case"string":a=a.replace(new RegExp("([\"\\\\])","g"),"\\$1"),a=a.replace(/^\s?(\d+\.?\d+)%/,"$1pct");return"\""+a+"\"";case"array":return"["+g(a,function(a){return h.asString(a)}).join(",")+"]";case"function":return"\"function()\"";case"object":var c=[];for(var d in a)a.hasOwnProperty(d)&&c.push("\""+d+"\":"+h.asString(a[d]));return"{"+c.join(",")+"}"}return String(a).replace(/\s/g," ").replace(/\'/g,"\"")},getHTML:function(b,c){b=f({},b);var d="";if(b.w3c||a)d+="";b.width=b.height=b.id=b.w3c=b.src=null,b.onFail=b.version=b.expressInstall=null;for(var e in b)b[e]&&(d+="");var g="";if(c){for(var i in c)if(c[i]){var j=c[i];g+=i+"="+(/function|object/.test(typeof j)?h.asString(j):j)+"&"}g=g.slice(0,-1),d+=""}d+="";return d},isSupported:function(a){return i[0]>a[0]||i[0]==a[0]&&i[1]>=a[1]}}),i=h.getVersion();function j(c,d,e){if(h.isSupported(d.version))c.innerHTML=h.getHTML(d,e);else if(d.expressInstall&&h.isSupported([6,65]))c.innerHTML=h.getHTML(f(d,{src:d.expressInstall}),{MMredirectURL:location.href,MMplayerType:"PlugIn",MMdoctitle:document.title});else{c.innerHTML.replace(/\s/g,"")||(c.innerHTML="

                                                Flash version "+d.version+" or greater is required

                                                "+(i[0]>0?"Your version is "+i:"You have no flash plugin installed")+"

                                                "+(c.tagName=="A"?"

                                                Click here to download latest version

                                                ":"

                                                Download latest version from here

                                                "),c.tagName=="A"&&(c.onclick=function(){location.href=b}));if(d.onFail){var g=d.onFail.call(this);typeof g=="string"&&(c.innerHTML=g)}}a&&(window[d.id]=document.getElementById(d.id)),f(this,{getRoot:function(){return c},getOptions:function(){return d},getConf:function(){return e},getApi:function(){return c.firstChild}})}c&&(jQuery.tools=jQuery.tools||{version:"dev"},jQuery.tools.flashembed={conf:e},jQuery.fn.flashembed=function(a,b){return this.each(function(){jQuery(this).data("flashembed",flashembed(this,a,b))})})})(); +(function(a){var b,c,d,e;a.tools=a.tools||{version:"dev"},a.tools.history={init:function(g){e||(a.browser.msie&&a.browser.version<"8"?c||(c=a(""); + $('#previewfrm').attr("src", url); + } + } else { + $.simpleAlert("close"); + $.simpleAlert(msg['msg'], 'info'); + } + }, + err: function (msg) { + $.simpleAlert(msg['msg'], 'info'); + } + }); + }, + downloadReport : function(id, appId) { + var cmd = appId + "_downloadreport"; + var url = "./jd?sid=" + encodeURIComponent(sid) + "&cmd=" + cmd; + var params = { + id : id + }; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + if (msg.result == "ok") { + window.location.href = msg.data.url; + }else { + $.simpleAlert("close"); + $.simpleAlert(msg['msg'], 'info'); + } + } + }); + }, + executeReport : function(id, profileId, obj) { + $(obj).parent().parent().find("td span[attr='ready']").css({ + "color" : "green" + }).text("正在执行"); + var taskId = $(obj).closest("tr[taskid]").attr("taskid"); + $(obj).parent().parent().find("td span[attr='ready']").parent().append(""); + $(obj).parent().find("span").hide(); + var url = "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_execute"; + var params = { + id : id, + wsid : wsid, + profileId : profileId + }; + OutputReport.refreshEvent = window.setInterval(OutputReport._refreshRowData(taskId), 1000); + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + + } + }); + }, + modifyReport : function(id) { + var url = "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_modify"; + $("input[id='complete']").check(); + $("input[id='complete']").check("option", "checked", true); + var params = { + id : id + }; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + if (msg.result == "ok") { + var jsonObj = msg.data; + $("#reportName").val(jsonObj.reportName); + OutputReportWizard.treeRelationNodeIds=jsonObj.relationFileId; + OutputReportWizard.fileTreeNodeIds=jsonObj.targetFileId; + OutputReportWizard.targetShapes = jsonObj.targetShape == undefined ? null : jsonObj.targetShape; + OutputReportWizard.appProfileId =jsonObj.profileId; + if(jsonObj.isItReport){ + $("input[name='reportNameIsItName']").val(jsonObj.reportNameIsItName); + $("input[id='reportTab4']").check(); + $("input[id='reportTab5']").check(); + $("input[id='reportTab4']").check("option", "checked", jsonObj.orderNuberFirst); + $("input[id='reportTab5']").check("option", "checked", jsonObj.orderNametwo); + }else { + $("input[name='reportNameNotItName']").val(jsonObj.reportNameNotItName); + $("input[id='reportTab1']").check(); + $("input[id='reportTab2']").check(); + $("input[id='reportTab3']").check(); + $("input[id='reportTab1']").check("option", "checked", jsonObj.isHaveSub); + $("input[id='reportTab2']").check("option", "checked", jsonObj.orderNumber); + $("input[id='reportTab3']").check("option", "checked", jsonObj.ignoreNumber); + } + OutputReportWizard.isModify=true; + OutputReportWizard.taskId=jsonObj.taskId; + $("#awsui-wizard1").wizard("destroy"); + var wizard = $("#awsui-wizard1").wizard(reportWizardOption); + $("#wizard-dig1").dialog(); + var url = "./w?sid=" + sid + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_json_data&language=" + + $("#selectLanguage option:selected").val() + "&templateOperate=" + templateOperate; + $("#reportTree").attr("src", url); + } + } + }); + }, + _refreshRowData:function (taskId) { + return function(){ + OutputReport.refreshRowData(taskId); + } + }, + refreshRowData:function (taskId){ + var url = "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_execute_refresh"; + var params = { + id :taskId, + teamId : teamId + }; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + if (msg.result == "ok") { + var tdContent = msg.data.tdContent; + $('tr[taskid='+ taskId +']').empty().append(tdContent); + var taskState = msg.data.taskState; + if (taskState != 1) { + window.clearInterval(OutputReport.refreshEvent); + } + } else { + window.clearInterval(OutputReport.refreshEvent); + } + } + }); + } +}; + +function initButton() { + $("#reloadData").bind("click", function() { + OutputReportData.searchData(); + }); + OutputReportWizard.initReportWizard(); + // 搜索按钮初始化 + OutputReportData.buttonInit(); + $("#buttonedit").keydown(function(e){ + if(e.keyCode==13){ + OutputReportData.searchData(); + } + }); +} + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.pal.file.relation.tree.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.pal.file.relation.tree.js new file mode 100644 index 00000000..cad8736f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.pal.file.relation.tree.js @@ -0,0 +1,85 @@ +var setting = { + checkbox : true, + checkInherit : true, + event : { + onClick : onClick, + //beforeExpand : loadData, + afterExpand : function(tree) { + //checkedNodeById(tree); + } + } +}; +var checkTree; + +$(document).ready(function() { + var temp = data; + // 设置全部可选,使用effective标记是否选择有效 + for(var i = 0; i < temp.length; i++) { + if(temp[i].nocheck == false) { + temp[i].effective = true; + } else { + temp[i].effective = false; + } + } + // for(var i = 0; i < temp.length; i++) { + // temp[i].nocheck = false; + // } + + setting.dataModel = { + data : data + }; + checkTree = awsui.tree.init($("#tree"), setting); + checkedNodeById(); +}); + +function loadData(treeNode) { + var url = "./w?sid=" + + parent.sid + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_pal_file_relation_json_data&methodType=" + + parent.OutputReportWizard.treeNodeObj.relationMethodScope + + "&wsid=" + parent.wsid + "&pid=" + treeNode.id + "&teamId="; + var dataModel = { + url : url, + method : "POST", + dataType : "json" + } + checkTree.refreshNode({ + id : treeNode.id, + dataModel : dataModel + }); +} +function onClick(treeNode) { + parent.OutputReportWizard.treeRelationNodeObj = treeNode; +} + +function getCheckedNode() { + return checkTree.getCheckedNodes(); +} +//设置被选中的checkbox + +function checkedNodeById() { + var checkedIds = parent.OutputReportWizard.treeRelationNodeIds; + if (checkedIds != "") { + checkedIds = checkedIds.split(","); + for (var i = 0; i < checkedIds.length; i++) { + if (checkedIds[i] == "") { + continue; + } + var resourceId = checkedIds[i]; + var obj = checkTree.getNodeDomById(resourceId); + if (obj) { + checkTree.expandNodes(obj, true, false, true); + } + var checkboxObj = $("input[type=checkbox][value=" + resourceId + "]"); + if (checkboxObj != undefined) { + checkboxObj.prop("checked", true); + } + + } + } +} + +function checkAll(flag){ + $("#tree input[type=checkbox]").check("option", "checked", flag); + $("#palShapes input[type=checkbox]").check("option", "checked", flag); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.pal.file.tree.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.pal.file.tree.js new file mode 100644 index 00000000..cb079e31 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.pal.file.tree.js @@ -0,0 +1,193 @@ +var setting = { + checkbox : targetMethodType == "" ? true : false, + checkInherit : true, + event : { + onClick : onClick, + afterExpand : function(tree) { + // checkedNodeById(tree); + } + } +}; +var checkTree; +var flag; +var checkTree1; + +$(document).ready(function() { + if (targetMethodType != undefined && targetMethodType != "") { + $("#tree").css("width", "50%"); + $("#palShapes").show(); + } else { + $("#tree").css("width", "100%"); + $("#palShapes").hide(); + } + + $.simpleAlert("正在加载", "loading", 3000, {model:true}); + setTimeout("initTreeData()", 100); +}); + +function initTreeData() { + $("#tree").empty(); + var params = { + versionType: versionType, + wsid: wsid, + teamId: teamId, + methodType: methodType + } + $.ajax({ + url : "./jd?sid=" + encodeURIComponent(sid) + "&cmd=com.actionsoft.apps.coe.pal_outputreport_pal_file_json_data_root_tree_data", + data : params, + type : "post", + success : function(msg) { + var temp = msg; + // 设置全部可选,使用effective标记是否选择有效 + for(var i = 0; i < temp.length; i++) { + if(temp[i].nocheck == false) { + temp[i].effective = true; + } else { + temp[i].effective = false; + } + } + // for(var i = 0; i < temp.length; i++) { + // temp[i].nocheck = false; + // } + + data = temp; + setting.dataModel = { + data : data + }; + checkTree = awsui.tree.init($("#tree"), setting); + $("#tree").css("height", "300px"); + checkedNodeById(); + $.simpleAlert('close'); + } + }); +} + +//返回选中的流程文件 +function getCheckedNode() { + if (targetMethodType == "") { + return checkTree.getCheckedNodes(); + } else { + var checkNode = new Array(); + if (checkTree.getSelectedNode() == undefined) { + } else { + checkNode.push(checkTree.getSelectedNode()); + } + return checkNode; + } +} + +//返回选中的文件元素 +function getCheckedShape() { + var ids = []; + if (flag == 1) { + $("#palShapes input[type=checkbox]").each(function() { + if ($(this).is(":checked")) { + ids.push($(this).attr("id")); + } + }) + } else { + var nodes = checkTree1.getCheckedNodes(); + for (var i = 0; i < nodes.length; i++) { + ids.push(nodes[i].shapeId); + } + } + + return ids; +} +function onClick(treeNode, callback) { + if (treeNode == undefined) { + return; + } + if (targetMethodType != "") { + $("#palShapes").empty(); + var url = "./jd?cmd=com.actionsoft.apps.coe.pal_outputreport_pal_file_shapes&sid=" + sid; + var params = { + uuid : treeNode.id, + type : targetMethodType + }; + $.ajax({ + url : url, + data : params, + type : "post", + success : function(msg) { + var data = msg.data.data; + flag = msg.data.flag; + if (flag == 1) { + var html = ""; + if (data != null && data.length > 0) { + for (var i = 0; i < data.length; i++) { + html += "
                                              • " + + " " + + " " + + "
                                              • "; + } + } + + $("#palShapes").html(html); + $("#palShapes input[type=checkbox]").check(); + } else { + var settingOpt = { + checkbox: true, + showIcon: false, + dataModel: { + data: data + } + }; + checkTree1 = awsui.tree.init($("#palShapes"), settingOpt); + $("#palShapes").css("height", "360px"); + } + + if (callback) { + callback(); + } + } + }) + } +} + +// 设置被选中的checkbox +function checkedNodeById() { + var checkedIds = parent.OutputReportWizard.fileTreeNodeIds; + if (checkedIds != "") { + checkedIds = checkedIds.split(","); + for (var i = 0; i < checkedIds.length; i++) { + if (checkedIds[i] == "") { + continue; + } + var resourceId = checkedIds[i]; + var checkboxObj = $("#tree input[type=checkbox][value=" + resourceId + "]"); + if (checkboxObj != undefined) { + var obj = checkTree.getNodeDomById(resourceId); + if (obj) { + checkTree.expandNodes(obj, true, false, true); + } + if (targetMethodType == "") { + checkboxObj.prop("checked", true); + } else { + checkTree.selectNode(resourceId, true); + onClick(checkTree.getSelectedNode(), function() { + var targetShapes = parent.OutputReportWizard.targetShapes; + if (targetShapes != null && targetShapes != "") { + if (typeof(targetShapes) == "string") { + targetShapes = targetShapes.split(","); + } + + for (var j = 0; j < targetShapes.length; j++) { + if (targetShapes[j] == "") { + continue; + } + var targetShape = targetShapes[j]; + var targetShapeObj = $("#palShapes input[type=checkbox][id=" + targetShape + "]"); + if (targetShapeObj != undefined) { + targetShapeObj.check("option", "checked", true); + } + } + } + }); + } + } + } + } + +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.pal.tree.aws.org.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.pal.tree.aws.org.js new file mode 100644 index 00000000..c8146d79 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.pal.tree.aws.org.js @@ -0,0 +1,72 @@ +var setting = { + checkbox : true, + checkInherit : true, + autoHeight: true +}; +var checkTree; + +$(document).ready(function() { + if (targetMethodType != undefined && targetMethodType != "") { + $("#tree").css("width", "50%"); + $("#palShapes").show(); + } else { + $("#tree").css("width", "100%"); + $("#palShapes").hide(); + } + + $.simpleAlert("正在加载", "loading", 3000, {model:true}); + setTimeout("initTreeData()", 100); +}); + +function initTreeData() { + $("#tree").empty(); + var params = { + wsid: wsid, + teamId: teamId, + methodType: methodType, + type : type + } + $.ajax({ + url : "./jd?sid=" + encodeURIComponent(sid) + "&cmd=com.actionsoft.apps.coe.pal_outputreport_pal_aws_org_tree_data_query", + data : params, + type : "post", + success : function(r) { + if (r.result == 'ok') { + var data = r.data.data; + var temp = data; + // 使用effective标记是否选择有效 + for(var i = 0; i < temp.length; i++) { + if(temp[i].type == 'department' || temp[i].type == 'user' || temp[i].type == 'role' || temp[i].type == 'position') { + temp[i].effective = true; + } else { + temp[i].effective = false; + } + temp[i].isAwsOrg = true; + } + data = temp; + setting.dataModel = { + data : data + }; + checkTree = awsui.tree.init($("#tree"), setting); + $("#tree").css("height", "300px"); + $.simpleAlert('close'); + } + } + }); +} + +//返回选中的流程文件 +function getCheckedNode() { + return checkTree.getCheckedNodes(); +} + +//返回选中的文件元素 +function getCheckedShape() { + var ids = []; + $("#palShapes input[type=checkbox]").each(function() { + if ($(this).is(":checked")) { + ids.push($(this).attr("id")); + } + }) + return ids; +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.portal.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.portal.js new file mode 100644 index 00000000..699c3ca4 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.portal.js @@ -0,0 +1,318 @@ +var showItem = 10; +var pageNumber = 1; +//总行数 +var searchDataValue = ""; + +$(document).ready(function() { + // 初始化绑定 + initButton(); + OutputReportData.loadPagination(0); + OutputReportData.loadOutputData(0, showItem, searchDataValue); +}); +// 分页 +var OutputReportData = { + loadPagination : function(currentpage) { + $("#Pagination").pagination(totalPage, { + pageLimit : showItem, + showItem : 10, + ellipseCount : 0, + ellipseText : "...", + linkTo : "javascript:void(0)", + currentPage : currentpage, + showIfSinglePage : false, + prevShowAlways : true, + nextShowAlways : true, + loadFirstPage : false, + callback : function(pageNum, start) { + OutputReportData.taskPagination(pageNum, showItem); + } + }); + }, + // 展示下一页、上一页数据请求数据 + taskPagination : function(pageNum, showItem) { + // 是否刷新分页插件;(注意:当点击不同的导航栏选项 ,分页不会自动刷新变化总页数) + OutputReportData.loadOutputData(pageNum, showItem, searchDataValue); + }, + buttonInit : function() { + awsui.parse(); + $("#buttonedit").buttonedit({ + onClick : OutputReportData.searchData + }); + }, + searchData : function() { + searchDataValue = $("#buttonedit").val(); + // 搜索的业务逻辑 + var url = "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_home_data_count"; + var params = { + wsid : wsid, + teamId : teamId, + data : searchDataValue + }; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + if (msg.result == "ok") { + totalPage = msg.data.count; + OutputReportData.loadPagination(0); + OutputReportData.loadOutputData(0, showItem, searchDataValue); + } + } + }); + }, + reloadData : function() { + $("#reloadData").attr("disabled","disabled"); + window.setTimeout(function (){ + $("#reloadData").removeAttr("disabled"); + },5000); + $.simpleAlert("刷新成功", "ok"); + OutputReportData.loadOutputData(pageNumber, showItem, searchDataValue, function(){ + $.simpleAlert("刷新成功", "ok"); + }); + }, + loadOutputData : function(start, end, data, callback) { + var url = "./w?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_home_data"; + pageNumber = start; + var params = { + start : start, + end : end, + wsid : wsid, + teamId : teamId, + data : data + }; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + var obj = eval('(' + msg + ')'); + $("#tableContent1").empty().html(obj.data.html); + parent.window.setHeight(); + if (callback != undefined) { + callback(); + } + } + }); + } +}; + +var OutputReport = { + refreshEvent : null, + downloadLog : function(id, appId) { + var cmd = appId + "_downloadlog" + var url = "./jd?sid=" + encodeURIComponent(sid) + "&cmd=" + cmd; + var params = { + id : id + }; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + if (msg.result == "ok") { + window.location.href = msg.data.url; + } + } + }); + + }, + cloneTask : function(id, appId) { + var cmd = appId + "_clonetask" + var url = "./jd?sid=" + encodeURIComponent(sid) + "&cmd=" + cmd; + var params = { + id : id, + teamId : teamId, + wsId : wsid + }; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + if (msg.result == "ok") { + $.simpleAlert("克隆成功", "ok"); + totalPage = msg.data.totalPage; + OutputReportData.loadPagination(0); + OutputReportData.loadOutputData(0, showItem, searchDataValue); + } + } + }); + }, + deleteTask : function(id, profileId) { + var options = { + title : "提示", + content : "确定删除吗?", + model : false, + onConfirm : function() { + var url = "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_delete"; + var params = { + id : id, + wsid : wsid, + teamId : teamId, + profileId : profileId + }; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + if (msg.result == "ok") { + $.simpleAlert("删除成功", "ok"); + totalPage = msg.data.totalPage; + OutputReportData.loadPagination(pageNumber); + OutputReportData.loadOutputData(pageNumber, + showItem, searchDataValue); + } else { + $.simpleAlert("删除失败"); + } + } + }); + + } + }; + $.confirm(options); + }, + settingTopTools: function () { + $("#fslistbtnWord", parent.parent.document).off('click').on('click', function () { + parent.parent.document.getElementById("previewfrm").contentWindow.listShowEvent(); + }); + $('#filepre_backWord', parent.parent.document).click(function () { + $('#fullscreenWrapWord #previewfrm', parent.parent.document).remove();//页面关闭销毁转换请求 + $("#fullscreenWrapWord", parent.parent.document).hide(); + }); + }, + previewReport: function (id, appId) { + OutputReport.settingTopTools(); + var cmd = "com.actionsoft.apps.coe.pal.output.pr_previewreport"; + var url = "./jd?sid=" + encodeURIComponent(sid) + "&cmd=" + cmd; + var params = { + id: id + }; + $.ajax({ + url: url, + async: false, + data: params, + type: "post", + success: function (msg) { + if (msg.result == "ok") { + if (msg['data']) { + var url = msg['data']['url']; + var filename = msg['data']['filename']; + $("#fullscreenWrapWord .toolbar-title", parent.parent.document)[0].innerText = filename; + $('#fullscreenWrapWord', parent.parent.document).show(); + $('#fullscreenWrapWord #previewfrm', parent.parent.document).remove(); + $('#previewpanelWord', parent.parent.document).append(""); + $('#previewfrm', parent.parent.document).attr("src", url); + } + } else { + $.simpleAlert("close"); + $.simpleAlert(msg['msg'], 'info'); + } + }, + err: function (msg) { + $.simpleAlert(msg['msg'], 'info'); + } + }); + }, + downloadReport : function(id, appId) { + var cmd = appId + "_downloadreport"; + var url = "./jd?sid=" + encodeURIComponent(sid) + "&cmd=" + cmd; + var params = { + id : id + }; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + if (msg.result == "ok") { + window.location.href = msg.data.url; + } + } + }); + }, + executeReport : function(id, profileId, obj) { + $(obj).parent().parent().find("td span[attr='ready']").css({ + "color" : "green" + }).text("正在执行"); + var taskId = $(obj).closest("tr[taskid]").attr("taskid"); + $(obj).parent().parent().find("td span[attr='ready']").parent().append(""); + $(obj).parent().find("span").hide(); + var url = "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_execute"; + var params = { + id : id, + wsid : wsid, + profileId : profileId + }; + OutputReport.refreshEvent = window.setInterval(OutputReport._refreshRowData(taskId),1000); + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + + } + }); + }, + _refreshRowData:function (taskId) { + return function(){ + OutputReport.refreshRowData(taskId); + } + }, + refreshRowData:function (taskId){ + var url = "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_execute_refresh"; + console.log(taskId); + var params = { + id : taskId, + teamId : teamId + }; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + if (msg.result == "ok") { + var tdContent = msg.data.tdContent; + $('tr[taskid='+ taskId +']').empty().append(tdContent); + var taskState = msg.data.taskState; + if(taskState != 1) { + window.clearInterval(OutputReport.refreshEvent); + } + } else { + window.clearInterval(OutputReport.refreshEvent); + } + } + }); + } +}; + +function initButton() { + $("#create").on("click",function() { + parent.parent.OutputReportWizard.createDialog(userId,wsid,teamId,versionRange,shapeNumberSort,templateOperate); + }); + $("#reloadData").bind("click", function() { + OutputReportData.searchData(); + }); + //OutputReportWizard.initReportWizard(); + // 搜索按钮初始化 + OutputReportData.buttonInit(); + $("#buttonedit").keydown(function(e){ + if(e.keyCode==13){ + OutputReportData.searchData(); + } + }); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.tree.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.tree.js new file mode 100644 index 00000000..d0cdb3e5 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.tree.js @@ -0,0 +1,239 @@ +$(document).ready(function() { + setting.dataModel = { + data : data + }; + checkTree = awsui.tree.init($("#tree"), setting); + if (templateOperate == '1') { + initTemplatesFileOp(); + } +}); +var checkTree; +var setting = { + checkbox : false, + event : { + onClick : onClick, + afterLoad : function(tree) { + if (parent.OutputReportWizard.appProfileId != "") + tree.selectNode(parent.OutputReportWizard.appProfileId, true); + parent.OutputReportWizard.treeNodeObj = tree.getNodeById(parent.OutputReportWizard.appProfileId); + var treeNode =parent.OutputReportWizard.treeNodeObj ; + if(treeNode){ + if (treeNode.relationMethodScope == "-") { + parent.OutputReportWizard.showRelation(true); + } else { + parent.OutputReportWizard.showRelation(false); + } + } + + } + } +}; +function onClick(treeNode) { + $('#reportName', parent.document).val(treeNode.name); + parent.OutputReportWizard.treeNodeObj = treeNode; + if (treeNode.pid != undefined && treeNode.pid != "") { + if (treeNode.relationMethodScope == "-") { + parent.OutputReportWizard.showRelation(true); + } else { + parent.OutputReportWizard.showRelation(false); + } + } +} + +function initTemplatesFileOp() { + for (var i = 0; i < data.length; i++) { + if (data[i].isDownload) { + var id = data[i].id; + $('#tree_li_' + id).mouseenter(function(){ + var tbindex = $(this).children('a').attr('tbindex'); + // 显示下载模版与上传模版 + var ti = ''; + ti += ''; + ti += ''; + ti += ''; + $(this).children('a').append(ti); + }); + $('#tree_li_' + id).mouseleave(function(){ + $('span[name=templatesOperateButton]').remove(); + }); + } + } + $("#alertPopbox").popBox({ + trigger:'hover', + width:250, + position:'bottom-right', + content:'仅支持zip文件格式,请将doc文件和xml文件压缩为zip文件进行上传,不支持单个doc或者xml文件上传!' + }); +} + +// 下载流程报告模版 +function downloadTemplates (id) { + var currData = null; + for (var i = 0; i < data.length; i++) { + if (data[i].id == id && data[i].isDownload) { + currData = data[i]; + break; + } + } + if (currData != null) { + $.simpleAlert('下载中', 'loading'); + var templates = data[i].templates; + var appId = data[i].appId; + // 获取 + var param = { + appId : appId, + templates : templates + }; + var url = "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_templates_download"; + $.ajax({ + url : url, + async : false, + data : param, + type : "post", + success : function(msg) { + $.simpleAlert('close'); + if (msg.result == "ok") { + window.location.href = msg.data.url; + } else { + $.simpleAlert(msg.msg, 'error'); + } + } + }); + } +} + +function initUpfile() { + var repositoryName ="tmp"; + var groupValue = "outputTemplate"; + var fileValue = "upload" + new Date().getTime(); + $("#uploadButton").upfile({ + sid: sid, + appId: "com.actionsoft.apps.coe.pal", + repositoryName: repositoryName, + groupValue:groupValue, + fileValue:fileValue, + filesToFilter : [["*.zip","*.zip"]], + numLimit : 1, + sizeLimit : 10 * 1024 * 1024, + complete:function(){ + //事件回调函数 + }, + add: function(e, data) { //附件被添加到上传列表时触发,当返回false时,可阻止上传 + if (data.files.length == 0) { + return false; + } else if (data.files[0].size > 10 * 1024 * 1024) { + $.simpleAlert("请上传10M以内文件"); + return false; + } + return true; + }, + done: function(e, data) { //单个附件上传完毕后触发 + var output = data; + if (output.textStatus == "warning") { + $.simpleAlert(output.message, output.type, 2000); + return false; + } else if (output.result.data.result == "ok") { + $('#templateFileName').val(data.files[0].name); + $('#template_repositoryName').val(repositoryName); + $('#template_groupValue').val(groupValue); + $('#template_fileValue').val(fileValue); + $('#template_fileName').val(data.files[0].name); + $.mask(); + } + } + }); +} + +// 清空页面数据 +function clearUploadTemplatesData() { + $('#templateFileName').val(''); + $('#template_repositoryName').val(''); + $('#template_groupValue').val(''); + $('#template_fileValue').val(''); + $('#template_fileName').val(''); +} + +// 上传流程报告模版 +function uploadTemplates(id) { + $('#templateFileName').val(''); + $('#uploadTd').empty(); + $('#uploadTd').html('选择文件'); + initUpfile(); + //初始化上传button + var currData = null; + for (var i = 0; i < data.length; i++) { + if (data[i].id == id && data[i].isDownload) { + currData = data[i]; + break; + } + } + var title = '上传' + currData.name + '模版'; + $("#uploadTemplatesDlg").dialog({ + height:170, + width:400, + title:title, + draggable:false, + buttons:[ + {text:'确定',cls:"blue",handler:function(){ + // 获取参数 + var repositoryName = $('#template_repositoryName').val(); + var groupValue = $('#template_groupValue').val(); + var fileValue = $('#template_fileValue').val(); + var fileName = $('#template_fileName').val(); + if (repositoryName == '' || repositoryName == '' || repositoryName == '' || repositoryName == '') { + $.simpleAlert('请上传文件', 'error'); + return; + } + this.disabled = true; + if (currData != null) { + $.simpleAlert('上传中', 'loading'); + var templates = data[i].templates; + var appId = data[i].appId; + var profileId = data[i].id; + // 获取 + var params = { + appId : appId, + profileId : profileId, + param : JSON.stringify({ + repositoryName : repositoryName, + groupValue : groupValue, + fileValue : fileValue, + fileName : fileName + }) + }; + var url = "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_templates_upload"; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + $.simpleAlert('close'); + if (msg.result == "ok") { + $.simpleAlert("上传成功","ok",1500,{callback:function () { + // 清空 + clearUploadTemplatesData(); + // 关闭dlg + $("#uploadTemplatesDlg").dialog("close"); + }}); + } else { + $('#uploadTemplatesDlg').find('button').removeAttr('disabled'); + $.simpleAlert(msg.msg, 'error'); + $.mask(); + } + } + }); + } + }}, + {text:'取消',handler:function(){ + $("#uploadTemplatesDlg").dialog("close") + } + } + ], + onClose : function() { + clearUploadTemplatesData(); + } + }); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.wizard.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.wizard.js new file mode 100644 index 00000000..c305e7e2 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.wizard.js @@ -0,0 +1,426 @@ +var config = "";// 得到配置 +var OutputReportWizard = { + initReportWizard : function() { + // 第二个弹窗的配置 + var options1 = { + width : 750, + height : 430, + items : [ { + title : "报告类型", + des : "" + }, { + title : "限定目标范围", + des : "" + }, { + title : "限定关联范围", + des : "" + },{ + title : "完成", + des : "" + } ], + onNext : function(options) { + if (options.currentStep == 0) { + return OutputReportWizard.step1(options); + } else if (options.currentStep == 1) { + return OutputReportWizard.step2(options); + } else if (options.currentStep == 2) { + return OutputReportWizard.step3(options); + } else if (options.currentStep == 3) { + return OutputReportWizard.complete(); + } + return true; + + }, + onPrev : function(options) { + var relationMethodScope = OutputReportWizard.treeNodeObj.relationMethodScope; + if (relationMethodScope == "-" && options.currentStep == 3) { + options.currentStep = 2; + } + return true; + }, + onFinish : function(options) { + return OutputReportWizard.complete(); + $.simpleAlert((options.currentStep)); + return true; + } + }; + // 在加载事件中直接配置 + $("#create").on( + "click", + function() { + $("#reportName").val(""); + OutputReportWizard.treeRelationNodeIds=""; + OutputReportWizard.fileTreeNodeIds=""; + OutputReportWizard.appProfileId =""; + $("input[name='reportNameIsItName']").val(""); + $("input[name='reportNameNotItName']").val("%fileName%_%fileVersion%"); + $("input[id='complete']").check(); + $("input[id='complete']").check("option", "checked", true); + OutputReportWizard.isModify=false; + OutputReportWizard.taskId=""; + $("#awsui-wizard1").wizard("destroy"); + var wizard = $("#awsui-wizard1").wizard(options1); + $("#wizard-dig1").dialog(); + var url = "./w?sid=" + sid + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_json_data&language=" + + $("#selectLanguage option:selected").val() + "&templateOperate=" + templateOperate; + $("#reportTree").attr("src", url); + }); + reportWizardOption = options1; + }, + step1 : function(options) { + var reportName = $("#reportName").val(); + if (OutputReportWizard.trimSpaces(reportName) == "") { + $.simpleAlert("[名称]不允许为空"); + options.currentStep = 0; + return false; + } + var reg = /[\\/:*?\"<>|]/; + if (reportName.match(reg)) { + $.simpleAlert("[名称]不允许输入\\ / : * ? \" < > |"); + options.currentStep = 0; + return false; + } + if (OutputReportWizard.trimSpaces(reportName).length > 64) { + $.simpleAlert("[名称]长度不允许超过64个字"); + options.currentStep = 0; + return false; + } + if (OutputReportWizard.treeNodeObj == null + || OutputReportWizard.treeNodeObj.pid == undefined) { + $.simpleAlert("请选择要生成报告的类型"); + options.currentStep = 0; + return false; + } + if ($("#reportNameIsItName").val() == "" || $("#reportNameIsItName").val() == "%shapeName%" || $("#reportNameIsItName").val() == "%fileName%_%fileVersion%") { + if (OutputReportWizard.treeNodeObj.targetMethodType != undefined && OutputReportWizard.treeNodeObj.targetMethodType != "") { + $("#reportNameIsItName").val("%shapeName%"); + } else { + $("#reportNameIsItName").val("%fileName%_%fileVersion%"); + } + + } + if (raciDataType == 'platform' && (OutputReportWizard.treeNodeObj.generClass == 'com.actionsoft.apps.coe.pal.output.raci.report2.Report2Gener' || OutputReportWizard.treeNodeObj.generClass == 'com.actionsoft.apps.coe.pal.output.raci.report3.Report3Gener')) { + OutputReportWizard.selectPlatformRealOrg('department,user,role');// AWS平台组织架构(部门/人员/角色) + } else if (orDataType == 'platform' && (OutputReportWizard.treeNodeObj.generClass == 'com.actionsoft.apps.coe.pal.output.or.report1.Report1Gener' || OutputReportWizard.treeNodeObj.generClass == 'com.actionsoft.apps.coe.pal.output.or.report2.Report2Gener')) { + OutputReportWizard.selectPlatformRealOrg('role');// AWS平台组织架构(角色) + } else { + OutputReportWizard.selectVersion();// PAL模型 + } + return true; + }, + step2 : function(options) { + var relationMethodScope = OutputReportWizard.treeNodeObj.relationMethodScope; + // 筛选有效选项 + var effectived = [];// 有效选择 + var checked = reportPalFileTree.window.getCheckedNode(); + + // 判断当前是否关联的AWS平台的组织架构 + var isAwsOrg = false; + if (checked.length > 0 && checked[0].isAwsOrg == true) { + isAwsOrg = true; + } + + for (var i = 0; i < checked.length; i++) { + if(checked[i].effective) { + effectived.push(checked[i]); + } + } + OutputReportWizard.fileTreeNode = effectived; + if (isAwsOrg) {// raci关联的是aws平台组织处理 + if (OutputReportWizard.fileTreeNode.length == 0) { + $.simpleAlert("请选择限定目标范围内的文件"); + options.currentStep = 1; + return false; + } else { + OutputReportWizard.fileTreeNodeIds = ""; + for (var i = 0; i < OutputReportWizard.fileTreeNode.length; i++) { + var selectedFileNode = OutputReportWizard.fileTreeNode[i]; + OutputReportWizard.fileTreeNodeIds += selectedFileNode.id + ","; + } + } + if (relationMethodScope == "-") { + options.currentStep = 2; + } else { + OutputReportWizard.selectProcessVersion(); + } + if (OutputReportWizard.treeNodeObj.pid == "output_raci") { + $("#tabReportNotIt").attr("data-current", "1"); + $("#tabReportIsIt").attr("data-current", "0"); + } else { + $("#tabReportNotIt").attr("data-current", "0"); + $("#tabReportIsIt").attr("data-current", "1"); + } + } else { + if (OutputReportWizard.fileTreeNode.length == 0) { + $.simpleAlert("请选择限定目标范围内的文件"); + options.currentStep = 1; + return false; + } else { + var containRepository = false; + OutputReportWizard.fileTreeNodeIds = ""; + for (var i = 0; i < OutputReportWizard.fileTreeNode.length; i++) { + var selectedFileNode = OutputReportWizard.fileTreeNode[i]; + if (selectedFileNode.id.length == 36) { + containRepository = true; + OutputReportWizard.fileTreeNodeIds += selectedFileNode.id + ","; + } + } + if (!containRepository) { + $.simpleAlert("请选择限定目标范围内的流程文件"); + options.currentStep = 1; + return false; + } + } + + var targetMethodType = OutputReportWizard.treeNodeObj.targetMethodType; + if (targetMethodType != "") { + OutputReportWizard.targetShapes = reportPalFileTree.window.getCheckedShape(); + if (OutputReportWizard.targetShapes.length == 0) { + $.simpleAlert("请选择限定目标范围内的元素"); + options.currentStep = 1; + return false; + } + } + if (relationMethodScope == "-") { + options.currentStep = 2; + } else { + OutputReportWizard.selectProcessVersion(); + } + if (OutputReportWizard.treeNodeObj.pid == "output_raci") { + $("#tabReportNotIt").attr("data-current", "1"); + $("#tabReportIsIt").attr("data-current", "0"); + } else { + $("#tabReportNotIt").attr("data-current", "0"); + $("#tabReportIsIt").attr("data-current", "1"); + } + } + + return true; + }, + step3 : function(options) { + // 筛选有效选项 + var effectived = [];// 有效选择 + var checked = reportPalFileTreeRelation.window.getCheckedNode(); + for (var i = 0; i < checked.length; i++) { + if(checked[i].effective) { + effectived.push(checked[i]); + } + } + OutputReportWizard.treeRelationNodeObj = effectived; + var relationMethodScope = OutputReportWizard.treeNodeObj.relationMethodScope; + if (relationMethodScope != "-") { + if (OutputReportWizard.treeRelationNodeObj == null || OutputReportWizard.treeRelationNodeObj.length == 0) { + $.simpleAlert("请选择限定关联范围内的文件"); + options.currentStep = 2; + return false; + } else { + var containRepository = false; + OutputReportWizard.treeRelationNodeIds = ""; + for (var i = 0; i < OutputReportWizard.treeRelationNodeObj.length; i++) { + var selectedFileNode = OutputReportWizard.treeRelationNodeObj[i]; + if (selectedFileNode.id.length == 36) { + containRepository = true; + OutputReportWizard.treeRelationNodeIds += selectedFileNode.id + ","; + } + } + if (!containRepository) { + $.simpleAlert("请选择限定关联范围内的流程文件"); + options.currentStep = 2; + return false; + } + } + } + if (OutputReportWizard.treeNodeObj.pid == "output_raci") { + $("#tabReportNotIt").attr("data-current", "1"); + $("#tabReportIsIt").attr("data-current", "0"); + } else { + $("#tabReportNotIt").attr("data-current", "0"); + $("#tabReportIsIt").attr("data-current", "1"); + } + return true; + }, + complete : function() { + config = OutputReportWizard.getConfig();// 得到配置 + if(config == null) { + $.simpleAlert("配置信息错误", "error"); + return false; + } + $.simpleAlert("正在保存", "loading", 30000, {model: true}); + + var isExecute = "N"; + if ($("#complete").is(":checked")) { + isExecute = "Y"; + } + var url = "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_complete"; + + var targetFileId = ""; + var tempArr = []; + var fileTreeArr = OutputReportWizard.fileTreeNode; + for (var index = 0; index < fileTreeArr.length; index++) { + if (fileTreeArr[index].isAwsOrg == true) {// 关联AWS组织的处理 + var tempObj = { + id : fileTreeArr[index].uuid, + name : fileTreeArr[index].name, + type : fileTreeArr[index].type + } + tempArr.push(tempObj); + } else { + targetFileId += "," + fileTreeArr[index].id; + } + } + if (tempArr.length > 0) { + targetFileId = JSON.stringify(tempArr); + } + var relationFileId = ""; + var relationArr = OutputReportWizard.treeRelationNodeObj; + if (relationArr != null) { + for (var index = 0; index < relationArr.length; index++) { + relationFileId += "," + relationArr[index].id; + } + } + var targetShape = ""; + if (OutputReportWizard.targetShapes != null &&OutputReportWizard.targetShapes.length > 0) { + for (var index = 0; index < OutputReportWizard.targetShapes.length; index++) { + targetShape += OutputReportWizard.targetShapes[index] + ","; + } + } + var params = { + profileId : OutputReportWizard.treeNodeObj.id, + teamId : teamId, + wsId : wsid, + taskName : $("#reportName").val(), + userId : userId, + lang : $("#selectLanguage option:selected").val(), + isExecute : isExecute, + targetFileId : targetFileId, + targetShape : targetShape, + relationFileId : relationFileId, + config : config, + isModify : OutputReportWizard.isModify + "", + taskId : OutputReportWizard.taskId + }; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + $.simpleAlert('close'); + if (msg.result == "ok") { + OutputReportWizard.isModify = false; + $.simpleAlert("创建成功", "ok", 1500, {callback : function() { + OutputReportData.loadOutputData(0, showItem); + totalPage = msg.data.totalPage; + OutputReportData.loadPagination(0); + OutputReportWizard.treeNodeObj = null; + $("#wizard-dig1 input[type='text']").val(""); + OutputReportWizard.treeRelationNodeObj = null; + OutputReportWizard.fileTreeNode = null; + OutputReportWizard.targetShapes = null; + $("input[type='checkbox']").check(); + $("input[type='checkbox']").check("option", "checked", false); + + // var obj = $("#" + msg.data.taskId); + OutputReport.refreshEvent = window.setInterval(OutputReport._refreshRowData(msg.data.taskId),1000); + }}); + } else { + $.simpleAlert("创建失败"); + } + } + }); + $("#wizard-dig1").dialog("close"); + + return true; + }, + trimSpaces : function(Str) { + var ResultStr = ""; + Temp = Str.split(/\s/); + for (i = 0; i < Temp.length; i++) { + ResultStr += Temp[i]; + } + return ResultStr; + }, + selectPlatformRealOrg : function(type) {// 关联真实组织架构 + $('#reportPalFileTree').parent().height('380px'); + $('#reportPalFileTree').height('380px'); + var url = "./w?sid=" + + sid + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_pal_aws_org_page&methodType=" + + OutputReportWizard.treeNodeObj.targetMethodScope + "&wsid=" + + wsid + "&teamId="+teamId + + "&type=" + type + + "&targetMethodType=" + OutputReportWizard.treeNodeObj.targetMethodType; + $("#reportPalFileTree").attr("src", url); + }, + selectVersion : function() { + $('#reportPalFileTree').parent().height('380px'); + $('#reportPalFileTree').height('380px'); + var selectVal = "isUsed"; + var url = "./w?sid=" + + sid + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_pal_file_json_data_root&methodType=" + + OutputReportWizard.treeNodeObj.targetMethodScope + "&wsid=" + + wsid + "&versionType=" + selectVal + "&teamId="+teamId + + "&targetMethodType=" + OutputReportWizard.treeNodeObj.targetMethodType; + $("#reportPalFileTree").attr("src", url); + }, + selectProcessVersion : function() { + var selectVal = "isUsed"; + var url = "./w?sid=" + + sid + + "&cmd=com.actionsoft.apps.coe.pal_file_relation_json_data_root&methodType=" + + OutputReportWizard.treeNodeObj.relationMethodScope + + "&wsid=" + wsid + "&teamId="+teamId + "&versionType=" + selectVal; + $("#reportPalFileTreeRelation").attr("src", url); + }, + doChange : function(obj) { + var url = "./w?sid=" + sid+ "&cmd=com.actionsoft.apps.coe.pal_outputreport_json_data&language="+ obj.value + "&templateOperate=" + templateOperate; + $("#reportTree").attr("src", url); + }, + treeNodeid : "", + treeNodeObj : null, + treeRelationNodeObj : null, + showRelation : function(flag) { + if (flag) + $("div[itemindex='2']").find("span,div").hide(); + else { + $("div[itemindex='2']").find("span,div").show(); + } + }, + fileTreeNodeIds : "",// 限定范围内的id + treeRelationNodeIds : "",// 关联范围内的id + appProfileId:"", + isModify : false, + taskId : "", + fileTreeNode : null, + targetShapes : null, + getConfig : function() { + if ($("#tabReportNotIt").attr("data-current") == "1") { + var isNotItReport = "{'isItReport':false,"; + isNotItReport += "'isHaveSub':false,"; + if (shapeNumberSort) { + isNotItReport += "'orderNumber':true,"; + } else { + isNotItReport += "'orderNumber':false,"; + } + isNotItReport += "'ignoreNumber':false,"; + isNotItReport += "'reportNameNotItName':'" + + $("input[name='reportNameNotItName']").val() + "'}"; + return isNotItReport; + } else if ($("#tabReportIsIt").attr("data-current") == "1") { + var isItReport = "{'isItReport':true,"; + if (shapeNumberSort) { + isItReport += "'orderNuberFirst':true,"; + } else { + isItReport += "'orderNuberFirst':false,"; + } + isItReport += "'orderNametwo':false,"; + isItReport += "'reportNameIsItName':'" + $("input[name='reportNameIsItName']").val() + "'}"; + return isItReport; + } else { + return null; + } + } +}; diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.wizard.portal.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.wizard.portal.js new file mode 100644 index 00000000..0100f34c --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.pl.repository.outputreport.wizard.portal.js @@ -0,0 +1,483 @@ +var config = "";// 得到配置 +var reportWizardOption = null; +$(document).ready(function() { + // 初始化绑定 + OutputReportWizard.initReportWizard(); +}); +var coeWsid=""; +var coeTeamId=""; +var coeUserId=""; +var coeVersionRange = ""; +var coeShapeNumberSort = ""; +var OutputReportWizard = { + initReportWizard : function() { + // 第二个弹窗的配置 + var options1 = { + width : 750, + height : 420, + // animate:true, + items : [ { + title : "报告类型", + des : "" + }, { + title : "限定目标范围", + des : "" + }, { + title : "限定关联范围", + des : "" + }, { + title : "完成", + des : "" + } ], + onNext : function(options) { + if (options.currentStep == 0) { + return OutputReportWizard.step1(options); + } else if (options.currentStep == 1) { + return OutputReportWizard.step2(options); + } else if (options.currentStep == 2) { + return OutputReportWizard.step3(options); + } else if (options.currentStep == 3) { + return OutputReportWizard.complete(); + } + return true; + + }, + onPrev : function(options) { + var relationMethodScope = OutputReportWizard.treeNodeObj.relationMethodScope; + if (relationMethodScope == "-" && options.currentStep == 3) { + options.currentStep = 2; + } + return true; + }, + onFinish : function(options) { + return OutputReportWizard.complete(); + $.simpleAlert((options.currentStep)); + return true; + } + }; + // 在加载事件中直接配置 + //$("#create").on( "click", function() {}); + reportWizardOption = options1; + }, + step1 : function(options) { + var reportName = $("#reportName").val(); + if (OutputReportWizard.trimSpaces(reportName) == "") { + $.simpleAlert("[名称]不允许为空"); + options.currentStep = 0; + return false; + } + var reg = /[\\/:*?\"<>|]/; + if (reportName.match(reg)) { + $.simpleAlert("[名称]不允许输入\\ / : * ? \" < > |"); + options.currentStep = 0; + return false; + } + if (OutputReportWizard.trimSpaces(reportName).length > 64) { + $.simpleAlert("[名称]长度不允许超过64个字"); + options.currentStep = 0; + return false; + } + if (OutputReportWizard.treeNodeObj == null + || OutputReportWizard.treeNodeObj.pid == undefined) { + $.simpleAlert("请选择要生成报告的类型"); + options.currentStep = 0; + return false; + } + if ($("#reportNameIsItName").val() == "" || $("#reportNameIsItName").val() == "%shapeName%" || $("#reportNameIsItName").val() == "%fileName%_%fileVersion%") { + if (OutputReportWizard.treeNodeObj.targetMethodType != undefined && OutputReportWizard.treeNodeObj.targetMethodType != "") { + $("#reportNameIsItName").val("%shapeName%"); + } else { + $("#reportNameIsItName").val("%fileName%_%fileVersion%"); + } + + } + if (raciDataType == 'platform' && (OutputReportWizard.treeNodeObj.generClass == 'com.actionsoft.apps.coe.pal.output.raci.report2.Report2Gener' || OutputReportWizard.treeNodeObj.generClass == 'com.actionsoft.apps.coe.pal.output.raci.report3.Report3Gener')) { + OutputReportWizard.selectPlatformRealOrg('department,user,role');// AWS平台组织架构(部门/人员/角色) + } else if (orDataType == 'platform' && (OutputReportWizard.treeNodeObj.generClass == 'com.actionsoft.apps.coe.pal.output.or.report1.Report1Gener' || OutputReportWizard.treeNodeObj.generClass == 'com.actionsoft.apps.coe.pal.output.or.report2.Report2Gener')) { + OutputReportWizard.selectPlatformRealOrg('role');// AWS平台组织架构(角色) + } else { + OutputReportWizard.selectVersion();// PAL模型 + } + return true; + }, + step2 : function(options) { + var relationMethodScope = OutputReportWizard.treeNodeObj.relationMethodScope; + // 筛选有效选项 + var effectived = [];// 有效选择 + var checked = reportPalFileTree.window.getCheckedNode(); + // 判断当前是否关联的AWS平台的组织架构 + var isAwsOrg = false; + if (checked.length > 0 && checked[0].isAwsOrg == true) { + isAwsOrg = true; + } + for (var i = 0; i < checked.length; i++) { + if(checked[i].effective) { + effectived.push(checked[i]); + } + } + OutputReportWizard.fileTreeNode = effectived; + if (isAwsOrg) {// raci关联的是aws平台组织处理 + if (OutputReportWizard.fileTreeNode.length == 0) { + $.simpleAlert("请选择限定目标范围内的文件"); + options.currentStep = 1; + return false; + } else { + OutputReportWizard.fileTreeNodeIds = ""; + for (var i = 0; i < OutputReportWizard.fileTreeNode.length; i++) { + var selectedFileNode = OutputReportWizard.fileTreeNode[i]; + OutputReportWizard.fileTreeNodeIds += selectedFileNode.id + ","; + } + } + if (relationMethodScope == "-") { + options.currentStep = 2; + } else { + OutputReportWizard.selectProcessVersion(); + } + if (OutputReportWizard.treeNodeObj.pid == "output_raci") { + $("#tabReportNotIt").attr("data-current", "1"); + $("#tabReportIsIt").attr("data-current", "0"); + } else { + $("#tabReportNotIt").attr("data-current", "0"); + $("#tabReportIsIt").attr("data-current", "1"); + } + } else { + if (OutputReportWizard.fileTreeNode.length == 0) { + $.simpleAlert("请选择限定目标范围内的文件"); + options.currentStep = 1; + return false; + } else { + var containRepository = false; + OutputReportWizard.fileTreeNodeIds = ""; + for (var i = 0; i < OutputReportWizard.fileTreeNode.length; i++) { + var selectedFileNode = OutputReportWizard.fileTreeNode[i]; + if (selectedFileNode.id.length == 36) { + containRepository = true; + OutputReportWizard.fileTreeNodeIds += selectedFileNode.id + ","; + } + } + if (!containRepository) { + $.simpleAlert("请选择限定目标范围内的流程文件"); + options.currentStep = 1; + return false; + } + } + + var targetMethodType = OutputReportWizard.treeNodeObj.targetMethodType; + if (targetMethodType != "") { + OutputReportWizard.targetShapes = reportPalFileTree.window.getCheckedShape(); + if (OutputReportWizard.targetShapes.length == 0) { + $.simpleAlert("请选择限定目标范围内的元素"); + options.currentStep = 1; + return false; + } + } + if (relationMethodScope == "-") { + options.currentStep = 2; + } else { + OutputReportWizard.selectProcessVersion(); + } + if (OutputReportWizard.treeNodeObj.pid == "output_raci") { + $("#tabReportNotIt").attr("data-current", "1"); + $("#tabReportIsIt").attr("data-current", "0"); + } else { + $("#tabReportNotIt").attr("data-current", "0"); + $("#tabReportIsIt").attr("data-current", "1"); + } + } + return true; + }, + step3 : function(options) { + // 筛选有效选项 + var effectived = [];// 有效选择 + var checked = reportPalFileTreeRelation.window.getCheckedNode(); + for (var i = 0; i < checked.length; i++) { + if(checked[i].effective) { + effectived.push(checked[i]); + } + } + OutputReportWizard.treeRelationNodeObj = effectived; + var relationMethodScope = OutputReportWizard.treeNodeObj.relationMethodScope; + if (relationMethodScope != "-") { + if (OutputReportWizard.treeRelationNodeObj == null + || OutputReportWizard.treeRelationNodeObj.length == 0) { + $.simpleAlert("请选择限定关联范围内的文件"); + options.currentStep = 2; + return false; + } else { + var containRepository = false; + OutputReportWizard.treeRelationNodeIds = ""; + for (var i = 0; i < OutputReportWizard.treeRelationNodeObj.length; i++) { + var selectedFileNode = OutputReportWizard.treeRelationNodeObj[i]; + if (selectedFileNode.id.length == 36) { + containRepository = true; + OutputReportWizard.treeRelationNodeIds += selectedFileNode.id + ","; + } + } + if (!containRepository) { + $.simpleAlert("请选择限定关联范围内的流程文件"); + options.currentStep = 2; + return false; + } + } + } + if (OutputReportWizard.treeNodeObj.pid == "output_raci") { + $("#tabReportNotIt").attr("data-current", "1"); + $("#tabReportIsIt").attr("data-current", "0"); + } else { + $("#tabReportNotIt").attr("data-current", "0"); + $("#tabReportIsIt").attr("data-current", "1"); + } + return true; + }, + complete : function() { + config = OutputReportWizard.getConfig();// 得到配置 + $.simpleAlert("正在保存", "loading"); + disableAll(); + + var isExecute = "N"; + if ($("#complete").is(":checked")) { + isExecute = "Y"; + } + var url = "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_complete"; + + var targetFileId = ""; + var tempArr = []; + var fileTreeArr = OutputReportWizard.fileTreeNode; + for (var index = 0; index < fileTreeArr.length; index++) { + if (fileTreeArr[index].isAwsOrg == true) {// 关联AWS组织的处理 + var tempObj = { + id : fileTreeArr[index].uuid, + name : fileTreeArr[index].name, + type : fileTreeArr[index].type + } + tempArr.push(tempObj); + } else { + targetFileId += "," + fileTreeArr[index].id; + } + } + if (tempArr.length > 0) { + targetFileId = JSON.stringify(tempArr); + } + var relationFileId = ""; + var relationArr = OutputReportWizard.treeRelationNodeObj; + if (relationArr != null) { + for (var index = 0; index < relationArr.length; index++) { + relationFileId += "," + relationArr[index].id; + } + } + var targetShape = ""; + if (OutputReportWizard.targetShapes != null &&OutputReportWizard.targetShapes.length > 0) { + for (var index = 0; index < OutputReportWizard.targetShapes.length; index++) { + targetShape += OutputReportWizard.targetShapes[index] + ","; + } + } + var params = { + profileId : OutputReportWizard.treeNodeObj.id, + teamId : coeTeamId, + wsId : coeWsid, + taskName : $("#reportName").val(), + userId : coeUserId, + lang : $("#selectLanguage option:selected").val(), + isExecute : isExecute, + targetFileId : targetFileId, + targetShape : targetShape, + relationFileId : relationFileId, + config : config, + isModify : OutputReportWizard.isModify + "", + taskId : OutputReportWizard.taskId + }; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + if (msg.result == "ok") { + OutputReportWizard.isModify = false; + + var tit; + var attributes = document.querySelector("#teamAppFrame").contentWindow.document.querySelector(".active").attributes; + for (var i = 0; i < attributes.length; i++) { + if (attributes[i].name == "tit") { + tit = attributes[i].value; + } + } + var _iframeContent = document.querySelector("#teamAppFrame").contentWindow.document.querySelector("#" + tit).contentWindow; + _iframeContent.OutputReportData.loadOutputData(0, 10); + _iframeContent.totalPage = msg.data.totalPage; + _iframeContent.OutputReportData.loadPagination(0); + OutputReportWizard.treeNodeObj = null; + $("#wizard-dig1 input[type='text']").val(""); + OutputReportWizard.treeRelationNodeObj = null; + OutputReportWizard.fileTreeNode = null; + + var obj = document.querySelector("#teamAppFrame").contentWindow.document.querySelector("#" + tit).contentDocument.getElementById(msg.data.taskId); + _iframeContent.OutputReport.refreshEvent = _iframeContent.window.setInterval(_iframeContent.OutputReport._refreshRowData(msg.data.taskId),1000); + + $.simpleAlert('close'); + $.simpleAlert("创建成功", "ok", 2000, {callback:function(){ + $("#wizard-dig1").dialog("close"); + }}); + + } else { + $.simpleAlert('close'); + $.simpleAlert("创建失败"); + enableAll(); + } + } + }); + + return true; + }, + trimSpaces : function(Str) { + var ResultStr = ""; + Temp = Str.split(/\s/); + for (i = 0; i < Temp.length; i++) { + ResultStr += Temp[i]; + } + return ResultStr; + }, + selectPlatformRealOrg : function(type) {// 关联真实组织架构 + $('#reportPalFileTree').parent().height('370px'); + $('#reportPalFileTree').height('370px'); + var url = "./w?sid=" + + sid + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_pal_aws_org_page&methodType=" + + OutputReportWizard.treeNodeObj.targetMethodScope + "&wsid=" + + coeWsid + "&teamId="+coeTeamId + + "&type=" + type + + "&targetMethodType=" + OutputReportWizard.treeNodeObj.targetMethodType; + $("#reportPalFileTree").attr("src", url); + }, + selectVersion : function() { + $('#reportPalFileTree').parent().height('370px'); + $('#reportPalFileTree').height('370px'); + var selectVal = "isUsed"; + var url = "./w?sid=" + + sid + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_pal_file_json_data_root&methodType=" + + OutputReportWizard.treeNodeObj.targetMethodScope + "&wsid=" + + coeWsid + "&versionType=" + selectVal + "&teamId="+coeTeamId + + "&targetMethodType=" + OutputReportWizard.treeNodeObj.targetMethodType; + $("#reportPalFileTree").attr("src", url); + }, + selectProcessVersion : function() { + var selectVal = "isUsed"; + var url = "./w?sid=" + + sid + + "&cmd=com.actionsoft.apps.coe.pal_file_relation_json_data_root&methodType=" + + OutputReportWizard.treeNodeObj.relationMethodScope + + "&wsid=" + coeWsid + "&teamId="+coeTeamId + "&versionType=" + selectVal; + $("#reportPalFileTreeRelation").attr("src", url); + }, + doChange : function(obj) { + var url = "./w?sid=" + sid+ "&cmd=com.actionsoft.apps.coe.pal_outputreport_json_data&language="+ obj.value + "&templateOperate=" + templateOperate; + $("#reportTree").attr("src", url); + }, + treeNodeid : "", + treeNodeObj : null, + treeRelationNodeObj : null, + showRelation : function(flag) { + if (flag) + $("div[itemindex='2']").find("span,div").hide(); + else { + $("div[itemindex='2']").find("span,div").show(); + } + }, + fileTreeNodeIds : "",// 限定范围内的id + treeRelationNodeIds : "",// 关联范围内的id + appProfileId:"", + isModify : false, + taskId : "", + fileTreeNode : null, + targetShapes : null, + getConfig : function() { + if ($("#tabReportNotIt").attr("data-current") == "1") { + var isNotItReport = "{'isItReport':false,"; + isNotItReport += "'isHaveSub':false,"; + if (coeShapeNumberSort) { + isNotItReport += "'orderNumber':true,"; + } else { + isNotItReport += "'orderNumber':false,"; + } + isNotItReport += "'ignoreNumber':false,"; + isNotItReport += "'reportNameNotItName':'" + + $("input[name='reportNameNotItName']").val() + "'}"; + return isNotItReport; + } else if ($("#tabReportIsIt").attr("data-current") == "1") { + var isItReport = "{'isItReport':true,"; + if (coeShapeNumberSort) { + isItReport += "'orderNuberFirst':true,"; + } else { + isItReport += "'orderNuberFirst':false,"; + } + isItReport += "'orderNametwo':false,"; + isItReport += "'reportNameIsItName':'" + $("input[name='reportNameIsItName']").val() + "'}"; + return isItReport; + } else { + return null; + } + }, + createDialog:function (userId, wsid,teamId,versionRange,shapeNumberSort,templateOperate){//新建对话框 + coeUserId = userId; + coeWsid=wsid; + coeTeamId=teamId; + coeVersionRange = versionRange; + coeShapeNumberSort = shapeNumberSort; + $("#reportName").val(""); + OutputReportWizard.treeRelationNodeIds=""; + OutputReportWizard.fileTreeNodeIds=""; + OutputReportWizard.appProfileId =""; + $("input[name='reportNameIsItName']").val(""); + $("input[name='reportNameNotItName']").val("%fileName%_%fileVersion%"); + $("input[id='complete']").check("option", "checked", true); + OutputReportWizard.isModify=false; + OutputReportWizard.taskId=""; + $("#awsui-wizard1").wizard("destroy"); + var wizard = $("#awsui-wizard1").wizard(reportWizardOption); + $("#wizard-dig1").dialog(); + var url = "./w?sid=" + sid + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_json_data&language=" + + $("#selectLanguage option:selected").val() + "&templateOperate=" + templateOperate; + $("#reportTree").attr("src", url); + }, + modifyReport : function(id, wsid, teamId) { + coeWsid=wsid; + coeTeamId=teamId; + var url = "./jd?sid=" + encodeURIComponent(sid) + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_modify"; + var params = { + id : id + }; + $.ajax({ + url : url, + async : false, + data : params, + type : "post", + success : function(msg) { + if (msg.result == "ok") { + var jsonObj = msg.data; + $("#reportName").val(jsonObj.reportName); + OutputReportWizard.treeRelationNodeIds=jsonObj.relationFileId; + OutputReportWizard.fileTreeNodeIds=jsonObj.targetFileId; + OutputReportWizard.appProfileId =jsonObj.profileId; + if(jsonObj.isItReport){ + $("input[name='reportNameIsItName']").val(jsonObj.reportNameIsItName); + }else { + $("input[name='reportNameNotItName']").val(jsonObj.reportNameNotItName); + } + OutputReportWizard.isModify=true; + OutputReportWizard.taskId=jsonObj.taskId; + $("#awsui-wizard1").wizard("destroy"); + var wizard = $("#awsui-wizard1").wizard(reportWizardOption); + $("#wizard-dig1").dialog(); + var url = "./w?sid=" + sid + + "&cmd=com.actionsoft.apps.coe.pal_outputreport_json_data&language=" + + $("#selectLanguage option:selected").val() + "&wsid=" + wsid + "&templateOperate=" + templateOperate; + $("#reportTree").attr("src", url); + } + } + }); + }, +}; \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.recycle.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.recycle.js new file mode 100644 index 00000000..0479992e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/pal.recycle.js @@ -0,0 +1,243 @@ +$(function($){ + initPagination(); +}) + +var pageLimit = 20; +var currentPageNum = 0; +function initPagination(){ + if (currentPageNum >= totalNum / pageLimit) { + currentPageNum = parseInt(totalNum / pageLimit); + } + $("#Pagination").pagination(totalNum, { + pageLimit:pageLimit, + showItem:5, + currentPage:currentPageNum, + ellipseCount:0, + linkTo:"#", + prevText:"上一页", + nextText:"下一页", + ellipseText:"...", + prevShowAlways:true, + nextShowAlways:true, + showIfSinglePage:false, + loadFirstPage:true, + showDisplay:true, + callback:function(pageNum, start, dom){ + if (pageNum < 1) { + pageNum++; + } + loadData(pageNum, start, dom); + currentPageNum = pageNum; + } + }); +} + +function loadData(pageNum, start, dom) { + $("#buttons").hide(); + $("#content_table tbody").empty(); + awsui.ajax.request({ + url : "./jd", + method : "POST", + data : { + sid: sid, + cmd: "com.actionsoft.apps.coe.pal_recycle_data_query", + start: (pageNum-1) * pageLimit, + limit: pageLimit + }, + ok : function(r) { + var list = r.data.list; + var html = ""; + if (list.length == 0) { + disableAll("bar"); + } else { + enableAll("bar"); + } + if (list.length == 0 && currentPageNum > 0) { + if(currentPageNum > 1) { + currentPageNum -= 1; + initPagination(); + } + } else { + for (var i = 0; i < list.length; i++) { + var obj = list[i]; + html += '' + + ' ' + + ' ' + obj.resourceName + '' + + '
                                                ' + obj.wsName + '
                                                ' + + ' ' + obj.removeTime + '' + + ' ' + obj.removeUserName + '' + + ' ' + + ' ' + + ' ' + + ' ' + + ''; + } + $("#content_table tbody").html(html); + $("input[type=checkbox]").check(); + } + }, + err:function(r){ + } + }); +} + +//选中checkbox后,显示删除和还原按钮 +function checkCallback(obj) { + if ($("#content_table tbody input[type=checkbox]:checked").length > 0) { + $("#buttons").show(); + } else { + $("#buttons").hide(); + } +} + +//删除流程模型 +function deleteModel(ids) { + $.simpleAlert("正在删除", "loading"); + awsui.ajax.request({ + url : "./jd", + method : "POST", + data : { + sid: sid, + cmd: "com.actionsoft.apps.coe.pal_recycle_delete", + removeIds: ids + }, + ok : function(r) { + $.simpleAlert("close"); + totalNum = r.data.totalNum; + initPagination(); + }, + err:function(r){ + $.simpleAlert("close"); + } + }); +} + +//多选后删除流程模型 +function deleteModelsOnButton() { + if ($("#content_table tbody input[type=checkbox]:checked").length == 0) { + $.simpleAlert("请选择要删除的模型"); + return false; + } + var options = { + title : "提示", + content:"回收站中的数据删除后无法恢复,是否确定删除?", + model:false, + secondaryConfirm: false, //是否支持二次确认 + onConfirm: function(){ + var ids = ""; + $("#content_table tbody input[type=checkbox]:checked").each(function(){ + ids += "'" + $(this).parents("tr").attr("id") + "',"; + }); + if (ids.indexOf(",") > 0) { + ids = ids.substring(0, ids.lastIndexOf(",")); + } + deleteModel(ids); + $("#all1").check("uncheck"); + } + }; + $.confirm(options); +} + +//点击图标删除流程模型 +function deleteModelOnIcon(id) { + var options = { + title : "提示", + content:"回收站中的数据删除后无法恢复,是否确定删除?", + model:false, + secondaryConfirm: false, //是否支持二次确认 + onConfirm: function(){ + deleteModel("'" + id + "'"); + } + }; + $.confirm(options); +} + +//清空回收站 +function deleteAllModes() { + var options = { + title : "提示", + content:"回收站中的数据删除后无法恢复,是否确定删除?", + model:false, + secondaryConfirm: true, //是否支持二次确认 + onConfirm: function() { + awsui.ajax.request({ + url : "./jd", + method : "POST", + data : { + sid: sid, + cmd: "com.actionsoft.apps.coe.pal_recycle_all_delete" + }, + ok : function(r) { + totalNum = 0; + currentPageNum = 0; + initPagination(); + $("#all1").check("uncheck"); + }, + err:function(r){ + } + }); + } + }; + $.confirm(options); +} + +//还原流程模型 +function restoreModel(ids) { + $.simpleAlert("正在还原", "loading"); + awsui.ajax.request({ + url : "./jd", + method : "POST", + data : { + sid: sid, + cmd: "com.actionsoft.apps.coe.pal_recycle_restore", + removeIds: ids + }, + ok : function(r) { + $.simpleAlert("close"); + totalNum = r.data.totalNum; + initPagination(); + }, + err:function(r){ + $.simpleAlert("close"); + } + }); +} + +//多选后还原流程模型 +function restoreModelsOnButton() { + if ($("#content_table tbody input[type=checkbox]:checked").length == 0) { + $.simpleAlert("请选择要还原的模型"); + return false; + } + var options = { + title : "提示", + content:"确定要还原这些模型吗?", + model:false, + secondaryConfirm: false, //是否支持二次确认 + onConfirm: function(){ + var ids = ""; + $("#content_table tbody input[type=checkbox]:checked").each(function(){ + ids += $(this).parents("tr").attr("id") + ","; + }); + if (ids.indexOf(",") > 0) { + ids = ids.substring(0, ids.lastIndexOf(",")); + } + restoreModel(ids); + } + }; + $.confirm(options); +} + +//点击图标还原流程模型 +function restoreModelOnIcon(id) { + var options = { + title : "提示", + content:"确定要还原该模型吗?", + model:false, + secondaryConfirm: false, //是否支持二次确认 + onConfirm: function(){ + restoreModel("'" + id + "'"); + } + }; + $.confirm(options); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/portal.header.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/portal.header.js new file mode 100644 index 00000000..ad38b23f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/portal.header.js @@ -0,0 +1,58 @@ +$(function($){ + $("#appviewport2-top-right").off("mouseenter").on("mouseenter", function () { + $('#appviewport2-top-right-dialog').show(); + }).off("mouseleave").on("mouseleave", function () { + $('#appviewport2-top-right-dialog').hide(); + }); + //点击左侧菜单,修改右侧的显示 + $("#menu_bar li").bind("click", function(){ + var _$this = $(this); + if (_$this.attr("target") == "_blank") { + var href = _$this.attr("href"); + window.open(href, "_blank"); + } else { + $("#menu_bar li.current").removeClass("current"); + _$this.addClass("current"); + + var awsuiQtip = _$this.attr("awsui-qtip"); + var headerText = awsui.decode("{" + awsuiQtip + "}").text; + var hasTab = _$this.attr("has_tab"); + var src = _$this.attr('href'); + if (hasTab) { + setHeadAndIframe(src, headerText, true); + } else { + setHeadAndIframe(src, headerText, false); + } + } + }) + + $("#menu_bar li:visible:first").trigger('click'); +}); + +function setHeadAndIframe(src, headerText, hasTab) { + $('#header_left1', parent.document).show(); + $('#header_right1', parent.document).show(); + $('#header_left2', parent.document).hide(); + $('#header_right2', parent.document).hide(); + $('#main').css('top', '70px'); + + $("#main_iframe").attr('src', src); + $("#header_text").html(headerText); + /* + if (hasTab) { + $("#header").css({"z-index": "0"}); + } else { + $("#header").css({"z-index": "2"}); + } + */ + if (hasTab) { + $("#header").css("box-shadow","none"); + } else { + $("#header").css("box-shadow","rgba(170, 170, 170, 0.3) -3px 3px 5px 0px"); + } + $("#header").css({"z-index": "10"}); +} + +function callIframeFunction(functionName) { + eval('window.frames["main_iframe"].' + functionName); +} diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/coe.tip.config.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/coe.tip.config.js new file mode 100644 index 00000000..f0d697c6 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/coe.tip.config.js @@ -0,0 +1,25 @@ +function initTip(jq){ + jq.qtip(//头像提示优化 + { + content: { + attr: 'title' // Use the ALT attribute of the area map for the content + }, + position: { + at: "bottom center",//va1 :top bottom left right va2: left right center ;count: 12 + my: "top center",//idem + viewport: $(window), + adjust: { + method: $('#adjust_method').val(), + x: 0, + y: -1|| 0 + } + }, + style: { + classes: 'qtip-tipsy custom-font12 ',//qtip-tipsy qtip-shadow + tip: { + corner: true + } + }, + ajax: true + }); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/coe.ws.tip.config.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/coe.ws.tip.config.js new file mode 100644 index 00000000..d9c1d5fe --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/coe.ws.tip.config.js @@ -0,0 +1,28 @@ +function initTip(jq){ + if(window.top.isIpad()||window.top.isiPhone()||window.top.isAndroid()){ + return; + } + jq.qtip(//头像提示优化 + { + content: { + attr: 'title' // Use the ALT attribute of the area map for the content + }, + position: { + at: "bottom center",//va1 :top bottom left right va2: left right center ;count: 12 + my: "top center",//idem + viewport: $(window), + adjust: { + method: $('#adjust_method').val(), + x: 0, + y: -1|| 0 + } + }, + style: { + classes: 'qtip-tipsy custom-font12 ',//qtip-tipsy qtip-shadow + tip: { + corner: true + } + }, + ajax: true + }); +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/basic/jquery.qtip.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/basic/jquery.qtip.css new file mode 100644 index 00000000..066c874f --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/basic/jquery.qtip.css @@ -0,0 +1,232 @@ +/*! + * qTip2 - Pretty powerful tooltips - v2.0.1-4-g + * http://qtip2.com + * + * Copyright (c) 2013 Craig Michael Thompson + * Released under the MIT, GPL licenses + * http://jquery.org/license + * + * Date: Fri Jan 4 2013 04:05 GMT+0000 + * Plugins: svg ajax tips modal viewport imagemap ie6 + * Styles: basic css3 + */ + +/* Core qTip styles */ +.qtip, .qtip{ + position: absolute; + left: -28000px; + top: -28000px; + display: none; + + max-width: 280px; + min-width: 50px; + + font-size: 10.5px; + line-height: 12px; + + direction: ltr; +} + + .qtip-content{ + position: relative; + padding: 5px 9px; + overflow: hidden; + + text-align: left; + word-wrap: break-word; + } + + .qtip-titlebar{ + position: relative; + padding: 5px 35px 5px 10px; + overflow: hidden; + + border-width: 0 0 1px; + font-weight: bold; + } + + .qtip-titlebar + .qtip-content{ border-top-width: 0 !important; } + + /* Default close button class */ + .qtip-close{ + position: absolute; + right: -9px; top: -9px; + + cursor: pointer; + outline: medium none; + + border-width: 1px; + border-style: solid; + border-color: transparent; + } + + .qtip-titlebar .qtip-close{ + right: 4px; top: 50%; + margin-top: -9px; + } + + * html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */ + + .qtip-titlebar .ui-icon, + .qtip-icon .ui-icon{ + display: block; + text-indent: -1000em; + direction: ltr; + vertical-align: middle; + } + + .qtip-icon, .qtip-icon .ui-icon{ + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + text-decoration: none; + } + + .qtip-icon .ui-icon{ + width: 18px; + height: 14px; + + text-align: center; + text-indent: 0; + font: normal bold 10px/13px Tahoma,sans-serif; + + color: inherit; + background: transparent none no-repeat -100em -100em; + } + + +/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */ +.qtip-focus{} + +/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */ +.qtip-hover{} + +/* Default tooltip style */ +.qtip-default{ + border-width: 1px; + border-style: solid; + border-color: #F1D031; + + background-color: #FFFFA3; + color: #555; +} + + .qtip-default .qtip-titlebar{ + background-color: #FFEF93; + } + + .qtip-default .qtip-icon{ + border-color: #CCC; + background: #F1F1F1; + color: #777; + } + + .qtip-default .qtip-titlebar .qtip-close{ + border-color: #AAA; + color: #111; + } + + +/*! Light tooltip style */ +.qtip-light{ + background-color: white; + border-color: #E2E2E2; + color: #454545; +} + + .qtip-light .qtip-titlebar{ + background-color: #f1f1f1; + } + + +/*! Dark tooltip style */ +.qtip-dark{ + background-color: #505050; + border-color: #303030; + color: #f3f3f3; +} + + .qtip-dark .qtip-titlebar{ + background-color: #404040; + } + + .qtip-dark .qtip-icon{ + border-color: #444; + } + + .qtip-dark .qtip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/*! Cream tooltip style */ +.qtip-cream{ + background-color: #FBF7AA; + border-color: #F9E98E; + color: #A27D35; +} + + .qtip-cream .qtip-titlebar{ + background-color: #F0DE7D; + } + + .qtip-cream .qtip-close .qtip-icon{ + background-position: -82px 0; + } + + +/*! Red tooltip style */ +.qtip-red{ + background-color: #F78B83; + border-color: #D95252; + color: #912323; +} + + .qtip-red .qtip-titlebar{ + background-color: #F06D65; + } + + .qtip-red .qtip-close .qtip-icon{ + background-position: -102px 0; + } + + .qtip-red .qtip-icon{ + border-color: #D95252; + } + + .qtip-red .qtip-titlebar .ui-state-hover{ + border-color: #D95252; + } + + +/*! Green tooltip style */ +.qtip-green{ + background-color: #CAED9E; + border-color: #90D93F; + color: #3F6219; +} + + .qtip-green .qtip-titlebar{ + background-color: #B0DE78; + } + + .qtip-green .qtip-close .qtip-icon{ + background-position: -42px 0; + } + + +/*! Blue tooltip style */ +.qtip-blue{ + background-color: #E5F6FE; + border-color: #ADD9ED; + color: #5E99BD; +} + + .qtip-blue .qtip-titlebar{ + background-color: #D0E9F5; + } + + .qtip-blue .qtip-close .qtip-icon{ + background-position: -2px 0; + } + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/basic/jquery.qtip.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/basic/jquery.qtip.js new file mode 100644 index 00000000..22d39d8a --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/basic/jquery.qtip.js @@ -0,0 +1,1819 @@ +/*! + * qTip2 - Pretty powerful tooltips - v2.0.1-4-g + * http://qtip2.com + * + * Copyright (c) 2013 Craig Michael Thompson + * Released under the MIT, GPL licenses + * http://jquery.org/license + * + * Date: Fri Jan 4 2013 04:05 GMT+0000 + * Plugins: svg ajax tips modal viewport imagemap ie6 + * Styles: basic css3 + */ + +/*jslint browser: true, onevar: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: true */ +/*global window: false, jQuery: false, console: false, define: false */ + +/* Cache window, document, undefined */ +(function( window, document, undefined ) { + +// Uses AMD or browser globals to create a jQuery plugin. +(function( factory ) { + "use strict"; + if(typeof define === 'function' && define.amd) { + define(['jquery'], factory); + } + else if(jQuery && !jQuery.fn.qtip) { + factory(jQuery); + } +} +(function($) { + /* This currently causes issues with Safari 6, so for it's disabled */ + //"use strict"; // (Dis)able ECMAScript "strict" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ + + // Munge the primitives - Paul Irish tip + var TRUE = true, + FALSE = false, + NULL = null, + + // Side names and other stuff + X = 'x', Y = 'y', + WIDTH = 'width', + HEIGHT = 'height', + TOP = 'top', + LEFT = 'left', + BOTTOM = 'bottom', + RIGHT = 'right', + CENTER = 'center', + FLIP = 'flip', + FLIPINVERT = 'flipinvert', + SHIFT = 'shift', + + // Shortcut vars + QTIP, PLUGINS, MOUSE, + NAMESPACE = 'qtip', + usedIDs = {}, + widget = ['ui-widget', 'ui-tooltip'], + selector = 'div.qtip.'+NAMESPACE, + defaultClass = NAMESPACE + '-default', + focusClass = NAMESPACE + '-focus', + hoverClass = NAMESPACE + '-hover', + replaceSuffix = '_replacedByqTip', + oldtitle = 'oldtitle', + trackingBound; + + // Store mouse coordinates + function storeMouse(event) + { + MOUSE = { + pageX: event.pageX, + pageY: event.pageY, + type: 'mousemove', + scrollX: window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft, + scrollY: window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop + }; + } +// Option object sanitizer +function sanitizeOptions(opts) +{ + var invalid = function(a) { return a === NULL || 'object' !== typeof a; }, + invalidContent = function(c) { return !$.isFunction(c) && ((!c && !c.attr) || c.length < 1 || ('object' === typeof c && !c.jquery && !c.then)); }; + + if(!opts || 'object' !== typeof opts) { return FALSE; } + + if(invalid(opts.metadata)) { + opts.metadata = { type: opts.metadata }; + } + + if('content' in opts) { + if(invalid(opts.content) || opts.content.jquery) { + opts.content = { text: opts.content }; + } + + if(invalidContent(opts.content.text || FALSE)) { + opts.content.text = FALSE; + } + + if('title' in opts.content) { + if(invalid(opts.content.title)) { + opts.content.title = { text: opts.content.title }; + } + + if(invalidContent(opts.content.title.text || FALSE)) { + opts.content.title.text = FALSE; + } + } + } + + if('position' in opts && invalid(opts.position)) { + opts.position = { my: opts.position, at: opts.position }; + } + + if('show' in opts && invalid(opts.show)) { + opts.show = opts.show.jquery ? { target: opts.show } : { event: opts.show }; + } + + if('hide' in opts && invalid(opts.hide)) { + opts.hide = opts.hide.jquery ? { target: opts.hide } : { event: opts.hide }; + } + + if('style' in opts && invalid(opts.style)) { + opts.style = { classes: opts.style }; + } + + // Sanitize plugin options + $.each(PLUGINS, function() { + if(this.sanitize) { this.sanitize(opts); } + }); + + return opts; +} + +/* +* Core plugin implementation +*/ +function QTip(target, options, id, attr) +{ + // Declare this reference + var self = this, + docBody = document.body, + tooltipID = NAMESPACE + '-' + id, + isPositioning = 0, + isDrawing = 0, + tooltip = $(), + namespace = '.qtip-' + id, + disabledClass = 'qtip-disabled', + elements, cache; + + // Setup class attributes + self.id = id; + self.rendered = FALSE; + self.destroyed = FALSE; + self.elements = elements = { target: target }; + self.timers = { img: {} }; + self.options = options; + self.checks = {}; + self.plugins = {}; + self.cache = cache = { + event: {}, + target: $(), + disabled: FALSE, + attr: attr, + onTarget: FALSE, + lastClass: '' + }; + + function convertNotation(notation) + { + var i = 0, obj, option = options, + + // Split notation into array + levels = notation.split('.'); + + // Loop through + while( option = option[ levels[i++] ] ) { + if(i < levels.length) { obj = option; } + } + + return [obj || options, levels.pop()]; + } + + function createWidgetClass(cls) + { + return widget.concat('').join(cls ? '-'+cls+' ' : ' '); + } + + function setWidget() + { + var on = options.style.widget, + disabled = tooltip.hasClass(disabledClass); + + tooltip.removeClass(disabledClass); + disabledClass = on ? 'ui-state-disabled' : 'qtip-disabled'; + tooltip.toggleClass(disabledClass, disabled); + + tooltip.toggleClass('ui-helper-reset '+createWidgetClass(), on).toggleClass(defaultClass, options.style.def && !on); + + if(elements.content) { + elements.content.toggleClass( createWidgetClass('content'), on); + } + if(elements.titlebar) { + elements.titlebar.toggleClass( createWidgetClass('header'), on); + } + if(elements.button) { + elements.button.toggleClass(NAMESPACE+'-icon', !on); + } + } + + function removeTitle(reposition) + { + if(elements.title) { + elements.titlebar.remove(); + elements.titlebar = elements.title = elements.button = NULL; + + // Reposition if enabled + if(reposition !== FALSE) { self.reposition(); } + } + } + + function createButton() + { + var button = options.content.title.button, + isString = typeof button === 'string', + close = isString ? button : 'Close tooltip'; + + if(elements.button) { elements.button.remove(); } + + // Use custom button if one was supplied by user, else use default + if(button.jquery) { + elements.button = button; + } + else { + elements.button = $('', { + 'class': 'qtip-close ' + (options.style.widget ? '' : NAMESPACE+'-icon'), + 'title': close, + 'aria-label': close + }) + .prepend( + $('', { + 'class': 'ui-icon ui-icon-close', + 'html': '×' + }) + ); + } + + // Create button and setup attributes + elements.button.appendTo(elements.titlebar || tooltip) + .attr('role', 'button') + .click(function(event) { + if(!tooltip.hasClass(disabledClass)) { self.hide(event); } + return FALSE; + }); + } + + function createTitle() + { + var id = tooltipID+'-title'; + + // Destroy previous title element, if present + if(elements.titlebar) { removeTitle(); } + + // Create title bar and title elements + elements.titlebar = $('
                                                ', { + 'class': NAMESPACE + '-titlebar ' + (options.style.widget ? createWidgetClass('header') : '') + }) + .append( + elements.title = $('
                                                ', { + 'id': id, + 'class': NAMESPACE + '-title', + 'aria-atomic': TRUE + }) + ) + .insertBefore(elements.content) + + // Button-specific events + .delegate('.qtip-close', 'mousedown keydown mouseup keyup mouseout', function(event) { + $(this).toggleClass('ui-state-active ui-state-focus', event.type.substr(-4) === 'down'); + }) + .delegate('.qtip-close', 'mouseover mouseout', function(event){ + $(this).toggleClass('ui-state-hover', event.type === 'mouseover'); + }); + + // Create button if enabled + if(options.content.title.button) { createButton(); } + } + + function updateButton(button) + { + var elem = elements.button; + + // Make sure tooltip is rendered and if not, return + if(!self.rendered) { return FALSE; } + + if(!button) { + elem.remove(); + } + else { + createButton(); + } + } + + function updateTitle(content, reposition) + { + var elem = elements.title; + + // Make sure tooltip is rendered and if not, return + if(!self.rendered || !content) { return FALSE; } + + // Use function to parse content + if($.isFunction(content)) { + content = content.call(target, cache.event, self); + } + + // Remove title if callback returns false or null/undefined (but not '') + if(content === FALSE || (!content && content !== '')) { return removeTitle(FALSE); } + + // Append new content if its a DOM array and show it if hidden + else if(content.jquery && content.length > 0) { + elem.empty().append(content.css({ display: 'block' })); + } + + // Content is a regular string, insert the new content + else { elem.html(content); } + + // Reposition if rnedered + if(reposition !== FALSE && self.rendered && tooltip[0].offsetWidth > 0) { + self.reposition(cache.event); + } + } + + function deferredContent(deferred) + { + if(deferred && $.isFunction(deferred.done)) { + deferred.done(function(c) { + updateContent(c, null, FALSE); + }); + } + } + + function updateContent(content, reposition, checkDeferred) + { + var elem = elements.content; + + // Make sure tooltip is rendered and content is defined. If not return + if(!self.rendered || !content) { return FALSE; } + + // Use function to parse content + if($.isFunction(content)) { + content = content.call(target, cache.event, self) || ''; + } + + // Handle deferred content + if(checkDeferred !== FALSE) { + deferredContent(options.content.deferred); + } + + // Append new content if its a DOM array and show it if hidden + if(content.jquery && content.length > 0) { + elem.empty().append(content.css({ display: 'block' })); + } + + // Content is a regular string, insert the new content + else { elem.html(content); } + + // Image detection + function detectImages(next) { + var images, srcs = {}; + + function imageLoad(image) { + // Clear src from object and any timers and events associated with the image + if(image) { + delete srcs[image.src]; + clearTimeout(self.timers.img[image.src]); + $(image).unbind(namespace); + } + + // If queue is empty after image removal, update tooltip and continue the queue + if($.isEmptyObject(srcs)) { + if(reposition !== FALSE) { + self.reposition(cache.event); + } + + next(); + } + } + + // Find all content images without dimensions, and if no images were found, continue + if((images = elem.find('img[src]:not([height]):not([width])')).length === 0) { return imageLoad(); } + + // Apply timer to each image to poll for dimensions + images.each(function(i, elem) { + // Skip if the src is already present + if(srcs[elem.src] !== undefined) { return; } + + // Keep track of how many times we poll for image dimensions. + // If it doesn't return in a reasonable amount of time, it's better + // to display the tooltip, rather than hold up the queue. + var iterations = 0, maxIterations = 3; + + (function timer(){ + // When the dimensions are found, remove the image from the queue + if(elem.height || elem.width || (iterations > maxIterations)) { return imageLoad(elem); } + + // Increase iterations and restart timer + iterations += 1; + self.timers.img[elem.src] = setTimeout(timer, 700); + }()); + + // Also apply regular load/error event handlers + $(elem).bind('error'+namespace+' load'+namespace, function(){ imageLoad(this); }); + + // Store the src and element in our object + srcs[elem.src] = elem; + }); + } + + /* + * If we're still rendering... insert into 'fx' queue our image dimension + * checker which will halt the showing of the tooltip until image dimensions + * can be detected properly. + */ + if(self.rendered < 0) { tooltip.queue('fx', detectImages); } + + // We're fully rendered, so reset isDrawing flag and proceed without queue delay + else { isDrawing = 0; detectImages($.noop); } + + return self; + } + + function assignEvents() + { + var posOptions = options.position, + targets = { + show: options.show.target, + hide: options.hide.target, + viewport: $(posOptions.viewport), + document: $(document), + body: $(document.body), + window: $(window) + }, + events = { + show: $.trim('' + options.show.event).split(' '), + hide: $.trim('' + options.hide.event).split(' ') + }, + IE6 = $.browser.msie && parseInt($.browser.version, 10) === 6; + + // Define show event method + function showMethod(event) + { + if(tooltip.hasClass(disabledClass)) { return FALSE; } + + // Clear hide timers + clearTimeout(self.timers.show); + clearTimeout(self.timers.hide); + + // Start show timer + var callback = function(){ self.toggle(TRUE, event); }; + if(options.show.delay > 0) { + self.timers.show = setTimeout(callback, options.show.delay); + } + else{ callback(); } + } + + // Define hide method + function hideMethod(event) + { + if(tooltip.hasClass(disabledClass) || isPositioning || isDrawing) { return FALSE; } + + // Check if new target was actually the tooltip element + var relatedTarget = $(event.relatedTarget || event.target), + ontoTooltip = relatedTarget.closest(selector)[0] === tooltip[0], + ontoTarget = relatedTarget[0] === targets.show[0]; + + // Clear timers and stop animation queue + clearTimeout(self.timers.show); + clearTimeout(self.timers.hide); + + // Prevent hiding if tooltip is fixed and event target is the tooltip. Or if mouse positioning is enabled and cursor momentarily overlaps + if((posOptions.target === 'mouse' && ontoTooltip) || (options.hide.fixed && ((/mouse(out|leave|move)/).test(event.type) && (ontoTooltip || ontoTarget)))) { + try { event.preventDefault(); event.stopImmediatePropagation(); } catch(e) {} return; + } + + // If tooltip has displayed, start hide timer + if(options.hide.delay > 0) { + self.timers.hide = setTimeout(function(){ self.hide(event); }, options.hide.delay); + } + else{ self.hide(event); } + } + + // Define inactive method + function inactiveMethod(event) + { + if(tooltip.hasClass(disabledClass)) { return FALSE; } + + // Clear timer + clearTimeout(self.timers.inactive); + self.timers.inactive = setTimeout(function(){ self.hide(event); }, options.hide.inactive); + } + + function repositionMethod(event) { + if(self.rendered && tooltip[0].offsetWidth > 0) { self.reposition(event); } + } + + // On mouseenter/mouseleave... + tooltip.bind('mouseenter'+namespace+' mouseleave'+namespace, function(event) { + var state = event.type === 'mouseenter'; + + // Focus the tooltip on mouseenter (z-index stacking) + if(state) { self.focus(event); } + + // Add hover class + tooltip.toggleClass(hoverClass, state); + }); + + // If using mouseout/mouseleave as a hide event... + if(/mouse(out|leave)/i.test(options.hide.event)) { + // Hide tooltips when leaving current window/frame (but not select/option elements) + if(options.hide.leave === 'window') { + targets.window.bind('mouseout'+namespace+' blur'+namespace, function(event) { + if(!/select|option/.test(event.target.nodeName) && !event.relatedTarget) { self.hide(event); } + }); + } + } + + // Enable hide.fixed + if(options.hide.fixed) { + // Add tooltip as a hide target + targets.hide = targets.hide.add(tooltip); + + // Clear hide timer on tooltip hover to prevent it from closing + tooltip.bind('mouseover'+namespace, function() { + if(!tooltip.hasClass(disabledClass)) { clearTimeout(self.timers.hide); } + }); + } + + /* + * Make sure hoverIntent functions properly by using mouseleave to clear show timer if + * mouseenter/mouseout is used for show.event, even if it isn't in the users options. + */ + else if(/mouse(over|enter)/i.test(options.show.event)) { + targets.hide.bind('mouseleave'+namespace, function(event) { + clearTimeout(self.timers.show); + }); + } + + // Hide tooltip on document mousedown if unfocus events are enabled + if(('' + options.hide.event).indexOf('unfocus') > -1) { + posOptions.container.closest('html').bind('mousedown'+namespace+' touchstart'+namespace, function(event) { + var elem = $(event.target), + enabled = self.rendered && !tooltip.hasClass(disabledClass) && tooltip[0].offsetWidth > 0, + isAncestor = elem.parents(selector).filter(tooltip[0]).length > 0; + + if(elem[0] !== target[0] && elem[0] !== tooltip[0] && !isAncestor && + !target.has(elem[0]).length && !elem.attr('disabled') + ) { + self.hide(event); + } + }); + } + + // Check if the tooltip hides when inactive + if('number' === typeof options.hide.inactive) { + // Bind inactive method to target as a custom event + targets.show.bind('qtip-'+id+'-inactive', inactiveMethod); + + // Define events which reset the 'inactive' event handler + $.each(QTIP.inactiveEvents, function(index, type){ + targets.hide.add(elements.tooltip).bind(type+namespace+'-inactive', inactiveMethod); + }); + } + + // Apply hide events + $.each(events.hide, function(index, type) { + var showIndex = $.inArray(type, events.show), + targetHide = $(targets.hide); + + // Both events and targets are identical, apply events using a toggle + if((showIndex > -1 && targetHide.add(targets.show).length === targetHide.length) || type === 'unfocus') + { + targets.show.bind(type+namespace, function(event) { + if(tooltip[0].offsetWidth > 0) { hideMethod(event); } + else { showMethod(event); } + }); + + // Don't bind the event again + delete events.show[ showIndex ]; + } + + // Events are not identical, bind normally + else { targets.hide.bind(type+namespace, hideMethod); } + }); + + // Apply show events + $.each(events.show, function(index, type) { + targets.show.bind(type+namespace, showMethod); + }); + + // Check if the tooltip hides when mouse is moved a certain distance + if('number' === typeof options.hide.distance) { + // Bind mousemove to target to detect distance difference + targets.show.add(tooltip).bind('mousemove'+namespace, function(event) { + var origin = cache.origin || {}, + limit = options.hide.distance, + abs = Math.abs; + + // Check if the movement has gone beyond the limit, and hide it if so + if(abs(event.pageX - origin.pageX) >= limit || abs(event.pageY - origin.pageY) >= limit) { + self.hide(event); + } + }); + } + + // Mouse positioning events + if(posOptions.target === 'mouse') { + // Cache mousemove coords on show targets + targets.show.bind('mousemove'+namespace, storeMouse); + + // If mouse adjustment is on... + if(posOptions.adjust.mouse) { + // Apply a mouseleave event so we don't get problems with overlapping + if(options.hide.event) { + // Hide when we leave the tooltip and not onto the show target + tooltip.bind('mouseleave'+namespace, function(event) { + if((event.relatedTarget || event.target) !== targets.show[0]) { self.hide(event); } + }); + + // Track if we're on the target or not + elements.target.bind('mouseenter'+namespace+' mouseleave'+namespace, function(event) { + cache.onTarget = event.type === 'mouseenter'; + }); + } + + // Update tooltip position on mousemove + targets.document.bind('mousemove'+namespace, function(event) { + // Update the tooltip position only if the tooltip is visible and adjustment is enabled + if(self.rendered && cache.onTarget && !tooltip.hasClass(disabledClass) && tooltip[0].offsetWidth > 0) { + self.reposition(event || MOUSE); + } + }); + } + } + + // Adjust positions of the tooltip on window resize if enabled + if(posOptions.adjust.resize || targets.viewport.length) { + ($.event.special.resize ? targets.viewport : targets.window).bind('resize'+namespace, repositionMethod); + } + + // Adjust tooltip position on scroll of the window or viewport element if present + targets.window.add(posOptions.container).bind('scroll'+namespace, repositionMethod); + } + + function unassignEvents() + { + var targets = [ + options.show.target[0], + options.hide.target[0], + self.rendered && elements.tooltip[0], + options.position.container[0], + options.position.viewport[0], + options.position.container.closest('html')[0], // unfocus + window, + document + ]; + + // Check if tooltip is rendered + if(self.rendered) { + $([]).pushStack( $.grep(targets, function(i){ return typeof i === 'object'; }) ).unbind(namespace); + } + + // Tooltip isn't yet rendered, remove render event + else { options.show.target.unbind(namespace+'-create'); } + } + + // Setup builtin .set() option checks + self.checks.builtin = { + // Core checks + '^id$': function(obj, o, v) { + var id = v === TRUE ? QTIP.nextid : v, + tooltipID = NAMESPACE + '-' + id; + + if(id !== FALSE && id.length > 0 && !$('#'+tooltipID).length) { + tooltip[0].id = tooltipID; + elements.content[0].id = tooltipID + '-content'; + elements.title[0].id = tooltipID + '-title'; + } + }, + + // Content checks + '^content.text$': function(obj, o, v) { updateContent(options.content.text); }, + '^content.deferred$': function(obj, o, v) { deferredContent(options.content.deferred); }, + '^content.title.text$': function(obj, o, v) { + // Remove title if content is null + if(!v) { return removeTitle(); } + + // If title isn't already created, create it now and update + if(!elements.title && v) { createTitle(); } + updateTitle(v); + }, + '^content.title.button$': function(obj, o, v){ updateButton(v); }, + + // Position checks + '^position.(my|at)$': function(obj, o, v){ + // Parse new corner value into Corner objecct + if('string' === typeof v) { + obj[o] = new PLUGINS.Corner(v); + } + }, + '^position.container$': function(obj, o, v){ + if(self.rendered) { tooltip.appendTo(v); } + }, + + // Show checks + '^show.ready$': function() { + if(!self.rendered) { self.render(1); } + else { self.toggle(TRUE); } + }, + + // Style checks + '^style.classes$': function(obj, o, v) { + tooltip.attr('class', NAMESPACE + ' qtip ' + v); + }, + '^style.width|height': function(obj, o, v) { + tooltip.css(o, v); + }, + '^style.widget|content.title': setWidget, + + // Events check + '^events.(render|show|move|hide|focus|blur)$': function(obj, o, v) { + tooltip[($.isFunction(v) ? '' : 'un') + 'bind']('tooltip'+o, v); + }, + + // Properties which require event reassignment + '^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)': function() { + var posOptions = options.position; + + // Set tracking flag + tooltip.attr('tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse); + + // Reassign events + unassignEvents(); assignEvents(); + } + }; + + $.extend(self, { + /* + * Psuedo-private API methods + */ + _triggerEvent: function(type, args, event) + { + var callback = $.Event('tooltip'+type); + callback.originalEvent = (event ? $.extend({}, event) : NULL) || cache.event || NULL; + tooltip.trigger(callback, [self].concat(args || [])); + + return !callback.isDefaultPrevented(); + }, + + /* + * Public API methods + */ + render: function(show) + { + if(self.rendered) { return self; } // If tooltip has already been rendered, exit + + var text = options.content.text, + title = options.content.title, + posOptions = options.position; + + // Add ARIA attributes to target + $.attr(target[0], 'aria-describedby', tooltipID); + + // Create tooltip element + tooltip = elements.tooltip = $('
                                                ', { + 'id': tooltipID, + 'class': [ NAMESPACE, defaultClass, options.style.classes, NAMESPACE + '-pos-' + options.position.my.abbrev() ].join(' '), + 'width': options.style.width || '', + 'height': options.style.height || '', + 'tracking': posOptions.target === 'mouse' && posOptions.adjust.mouse, + + /* ARIA specific attributes */ + 'role': 'alert', + 'aria-live': 'polite', + 'aria-atomic': FALSE, + 'aria-describedby': tooltipID + '-content', + 'aria-hidden': TRUE + }) + .toggleClass(disabledClass, cache.disabled) + .data('qtip', self) + .appendTo(options.position.container) + .append( + // Create content element + elements.content = $('
                                                ', { + 'class': NAMESPACE + '-content', + 'id': tooltipID + '-content', + 'aria-atomic': TRUE + }) + ); + + // Set rendered flag and prevent redundant reposition calls for now + self.rendered = -1; + isPositioning = 1; + + // Create title... + if(title.text) { + createTitle(); + + // Update title only if its not a callback (called in toggle if so) + if(!$.isFunction(title.text)) { updateTitle(title.text, FALSE); } + } + + // Create button + else if(title.button) { createButton(); } + + // Set proper rendered flag and update content if not a callback function (called in toggle) + if(!$.isFunction(text) || text.then) { updateContent(text, FALSE); } + self.rendered = TRUE; + + // Setup widget classes + setWidget(); + + // Assign passed event callbacks (before plugins!) + $.each(options.events, function(name, callback) { + if($.isFunction(callback)) { + tooltip.bind(name === 'toggle' ? 'tooltipshow tooltiphide' : 'tooltip'+name, callback); + } + }); + + // Initialize 'render' plugins + $.each(PLUGINS, function() { + if(this.initialize === 'render') { this(self); } + }); + + // Assign events + assignEvents(); + + /* Queue this part of the render process in our fx queue so we can + * load images before the tooltip renders fully. + * + * See: updateContent method + */ + tooltip.queue('fx', function(next) { + // tooltiprender event + self._triggerEvent('render'); + + // Reset flags + isPositioning = 0; + + // Show tooltip if needed + if(options.show.ready || show) { + self.toggle(TRUE, cache.event, FALSE); + } + + next(); // Move on to next method in queue + }); + + return self; + }, + + get: function(notation) + { + var result, o; + + switch(notation.toLowerCase()) + { + case 'dimensions': + result = { + height: tooltip.outerHeight(FALSE), + width: tooltip.outerWidth(FALSE) + }; + break; + + case 'offset': + result = PLUGINS.offset(tooltip, options.position.container); + break; + + default: + o = convertNotation(notation.toLowerCase()); + result = o[0][ o[1] ]; + result = result.precedance ? result.string() : result; + break; + } + + return result; + }, + + set: function(option, value) + { + var rmove = /^position\.(my|at|adjust|target|container)|style|content|show\.ready/i, + rdraw = /^content\.(title|attr)|style/i, + reposition = FALSE, + checks = self.checks, + name; + + function callback(notation, args) { + var category, rule, match; + + for(category in checks) { + for(rule in checks[category]) { + if(match = (new RegExp(rule, 'i')).exec(notation)) { + args.push(match); + checks[category][rule].apply(self, args); + } + } + } + } + + // Convert singular option/value pair into object form + if('string' === typeof option) { + name = option; option = {}; option[name] = value; + } + else { option = $.extend(TRUE, {}, option); } + + // Set all of the defined options to their new values + $.each(option, function(notation, value) { + var obj = convertNotation( notation.toLowerCase() ), previous; + + // Set new obj value + previous = obj[0][ obj[1] ]; + obj[0][ obj[1] ] = 'object' === typeof value && value.nodeType ? $(value) : value; + + // Set the new params for the callback + option[notation] = [obj[0], obj[1], value, previous]; + + // Also check if we need to reposition + reposition = rmove.test(notation) || reposition; + }); + + // Re-sanitize options + sanitizeOptions(options); + + /* + * Execute any valid callbacks for the set options + * Also set isPositioning/isDrawing so we don't get loads of redundant repositioning calls. + */ + isPositioning = 1; $.each(option, callback); isPositioning = 0; + + // Update position if needed + if(self.rendered && tooltip[0].offsetWidth > 0 && reposition) { + self.reposition( options.position.target === 'mouse' ? NULL : cache.event ); + } + + return self; + }, + + toggle: function(state, event) + { + // Try to prevent flickering when tooltip overlaps show element + if(event) { + if((/over|enter/).test(event.type) && (/out|leave/).test(cache.event.type) && + options.show.target.add(event.target).length === options.show.target.length && + tooltip.has(event.relatedTarget).length) { + return self; + } + + // Cache event + cache.event = $.extend({}, event); + } + + // Render the tooltip if showing and it isn't already + if(!self.rendered) { return state ? self.render(1) : self; } + + var type = state ? 'show' : 'hide', + opts = options[type], + otherOpts = options[ !state ? 'show' : 'hide' ], + posOptions = options.position, + contentOptions = options.content, + visible = tooltip[0].offsetWidth > 0, + animate = state || opts.target.length === 1, + sameTarget = !event || opts.target.length < 2 || cache.target[0] === event.target, + showEvent, delay; + + // Detect state if valid one isn't provided + if((typeof state).search('boolean|number')) { state = !visible; } + + // Return if element is already in correct state + if(!tooltip.is(':animated') && visible === state && sameTarget) { return self; } + + // tooltipshow/tooltiphide events + if(!self._triggerEvent(type, [90])) { return self; } + + // Set ARIA hidden status attribute + $.attr(tooltip[0], 'aria-hidden', !!!state); + + // Execute state specific properties + if(state) { + // Store show origin coordinates + cache.origin = $.extend({}, MOUSE); + + // Focus the tooltip + self.focus(event); + + // Update tooltip content & title if it's a dynamic function + if($.isFunction(contentOptions.text)) { updateContent(contentOptions.text, FALSE); } + if($.isFunction(contentOptions.title.text)) { updateTitle(contentOptions.title.text, FALSE); } + + // Cache mousemove events for positioning purposes (if not already tracking) + if(!trackingBound && posOptions.target === 'mouse' && posOptions.adjust.mouse) { + $(document).bind('mousemove.qtip', storeMouse); + trackingBound = TRUE; + } + + // Update the tooltip position + self.reposition(event, arguments[2]); + + // Hide other tooltips if tooltip is solo + if(!!opts.solo) { + (typeof opts.solo === 'string' ? $(opts.solo) : $(selector, opts.solo)) + .not(tooltip).not(opts.target).qtip('hide', $.Event('tooltipsolo')); + } + } + else { + // Clear show timer if we're hiding + clearTimeout(self.timers.show); + + // Remove cached origin on hide + delete cache.origin; + + // Remove mouse tracking event if not needed (all tracking qTips are hidden) + if(trackingBound && !$(selector+'[tracking="true"]:visible', opts.solo).not(tooltip).length) { + $(document).unbind('mousemove.qtip'); + trackingBound = FALSE; + } + + // Blur the tooltip + self.blur(event); + } + + // Define post-animation, state specific properties + function after() { + if(state) { + // Prevent antialias from disappearing in IE by removing filter + if($.browser.msie) { tooltip[0].style.removeAttribute('filter'); } + + // Remove overflow setting to prevent tip bugs + tooltip.css('overflow', ''); + + // Autofocus elements if enabled + if('string' === typeof opts.autofocus) { + $(opts.autofocus, tooltip).focus(); + } + + // If set, hide tooltip when inactive for delay period + opts.target.trigger('qtip-'+id+'-inactive'); + } + else { + // Reset CSS states + tooltip.css({ + display: '', + visibility: '', + opacity: '', + left: '', + top: '' + }); + } + + // tooltipvisible/tooltiphidden events + self._triggerEvent(state ? 'visible' : 'hidden'); + } + + // If no effect type is supplied, use a simple toggle + if(opts.effect === FALSE || animate === FALSE) { + tooltip[ type ](); + after.call(tooltip); + } + + // Use custom function if provided + else if($.isFunction(opts.effect)) { + tooltip.stop(1, 1); + opts.effect.call(tooltip, self); + tooltip.queue('fx', function(n){ after(); n(); }); + } + + // Use basic fade function by default + else { tooltip.fadeTo(90, state ? 1 : 0, after); } + + // If inactive hide method is set, active it + if(state) { opts.target.trigger('qtip-'+id+'-inactive'); } + + return self; + }, + + show: function(event){ return self.toggle(TRUE, event); }, + + hide: function(event){ return self.toggle(FALSE, event); }, + + focus: function(event) + { + if(!self.rendered) { return self; } + + var qtips = $(selector), + curIndex = parseInt(tooltip[0].style.zIndex, 10), + newIndex = QTIP.zindex + qtips.length, + cachedEvent = $.extend({}, event), + focusedElem; + + // Only update the z-index if it has changed and tooltip is not already focused + if(!tooltip.hasClass(focusClass)) + { + // tooltipfocus event + if(self._triggerEvent('focus', [newIndex], cachedEvent)) { + // Only update z-index's if they've changed + if(curIndex !== newIndex) { + // Reduce our z-index's and keep them properly ordered + qtips.each(function() { + if(this.style.zIndex > curIndex) { + this.style.zIndex = this.style.zIndex - 1; + } + }); + + // Fire blur event for focused tooltip + qtips.filter('.' + focusClass).qtip('blur', cachedEvent); + } + + // Set the new z-index + tooltip.addClass(focusClass)[0].style.zIndex = newIndex; + } + } + + return self; + }, + + blur: function(event) { + // Set focused status to FALSE + tooltip.removeClass(focusClass); + + // tooltipblur event + self._triggerEvent('blur', [tooltip.css('zIndex')], event); + + return self; + }, + + reposition: function(event, effect) + { + if(!self.rendered || isPositioning) { return self; } + + // Set positioning flag + isPositioning = 1; + + var target = options.position.target, + posOptions = options.position, + my = posOptions.my, + at = posOptions.at, + adjust = posOptions.adjust, + method = adjust.method.split(' '), + elemWidth = tooltip.outerWidth(FALSE), + elemHeight = tooltip.outerHeight(FALSE), + targetWidth = 0, + targetHeight = 0, + type = tooltip.css('position'), + viewport = posOptions.viewport, + position = { left: 0, top: 0 }, + container = posOptions.container, + visible = tooltip[0].offsetWidth > 0, + isScroll = event && event.type === 'scroll', + win = $(window), + adjusted, offset; + + // Check if absolute position was passed + if($.isArray(target) && target.length === 2) { + // Force left top and set position + at = { x: LEFT, y: TOP }; + position = { left: target[0], top: target[1] }; + } + + // Check if mouse was the target + else if(target === 'mouse' && ((event && event.pageX) || cache.event.pageX)) { + // Force left top to allow flipping + at = { x: LEFT, y: TOP }; + + // Use cached event if one isn't available for positioning + event = MOUSE && MOUSE.pageX && (adjust.mouse || !event || !event.pageX) ? { pageX: MOUSE.pageX, pageY: MOUSE.pageY } : + (event && (event.type === 'resize' || event.type === 'scroll') ? cache.event : + event && event.pageX && event.type === 'mousemove' ? event : + (!adjust.mouse || options.show.distance) && cache.origin && cache.origin.pageX ? cache.origin : + event) || event || cache.event || MOUSE || {}; + + // Use event coordinates for position + if(type !== 'static') { position = container.offset(); } + position = { left: event.pageX - position.left, top: event.pageY - position.top }; + + // Scroll events are a pain, some browsers + if(adjust.mouse && isScroll) { + position.left -= MOUSE.scrollX - win.scrollLeft(); + position.top -= MOUSE.scrollY - win.scrollTop(); + } + } + + // Target wasn't mouse or absolute... + else { + // Check if event targetting is being used + if(target === 'event' && event && event.target && event.type !== 'scroll' && event.type !== 'resize') { + cache.target = $(event.target); + } + else if(target !== 'event'){ + cache.target = $(target.jquery ? target : elements.target); + } + target = cache.target; + + // Parse the target into a jQuery object and make sure there's an element present + target = $(target).eq(0); + if(target.length === 0) { return self; } + + // Check if window or document is the target + else if(target[0] === document || target[0] === window) { + targetWidth = PLUGINS.iOS ? window.innerWidth : target.width(); + targetHeight = PLUGINS.iOS ? window.innerHeight : target.height(); + + if(target[0] === window) { + position = { + top: (viewport || target).scrollTop(), + left: (viewport || target).scrollLeft() + }; + } + } + + // Use Imagemap/SVG plugins if needed + else if(PLUGINS.imagemap && target.is('area')) { + adjusted = PLUGINS.imagemap(self, target, at, PLUGINS.viewport ? method : FALSE); + } + else if(PLUGINS.svg && target[0].ownerSVGElement) { + adjusted = PLUGINS.svg(self, target, at, PLUGINS.viewport ? method : FALSE); + } + + else { + targetWidth = target.outerWidth(FALSE); + targetHeight = target.outerHeight(FALSE); + + position = PLUGINS.offset(target, container); + } + + // Parse returned plugin values into proper variables + if(adjusted) { + targetWidth = adjusted.width; + targetHeight = adjusted.height; + offset = adjusted.offset; + position = adjusted.position; + } + + // Adjust for position.fixed tooltips (and also iOS scroll bug in v3.2-4.0 & v4.3-4.3.2) + if((PLUGINS.iOS > 3.1 && PLUGINS.iOS < 4.1) || + (PLUGINS.iOS >= 4.3 && PLUGINS.iOS < 4.33) || + (!PLUGINS.iOS && type === 'fixed') + ){ + position.left -= win.scrollLeft(); + position.top -= win.scrollTop(); + } + + // Adjust position relative to target + position.left += at.x === RIGHT ? targetWidth : at.x === CENTER ? targetWidth / 2 : 0; + position.top += at.y === BOTTOM ? targetHeight : at.y === CENTER ? targetHeight / 2 : 0; + } + + // Adjust position relative to tooltip + position.left += adjust.x + (my.x === RIGHT ? -elemWidth : my.x === CENTER ? -elemWidth / 2 : 0); + position.top += adjust.y + (my.y === BOTTOM ? -elemHeight : my.y === CENTER ? -elemHeight / 2 : 0); + + // Use viewport adjustment plugin if enabled + if(PLUGINS.viewport) { + position.adjusted = PLUGINS.viewport( + self, position, posOptions, targetWidth, targetHeight, elemWidth, elemHeight + ); + + // Apply offsets supplied by positioning plugin (if used) + if(offset && position.adjusted.left) { position.left += offset.left; } + if(offset && position.adjusted.top) { position.top += offset.top; } + } + + // Viewport adjustment is disabled, set values to zero + else { position.adjusted = { left: 0, top: 0 }; } + + // tooltipmove event + if(!self._triggerEvent('move', [position, viewport.elem || viewport], event)) { return self; } + delete position.adjusted; + + // If effect is disabled, target it mouse, no animation is defined or positioning gives NaN out, set CSS directly + if(effect === FALSE || !visible || isNaN(position.left) || isNaN(position.top) || target === 'mouse' || !$.isFunction(posOptions.effect)) { + tooltip.css(position); + } + + // Use custom function if provided + else if($.isFunction(posOptions.effect)) { + posOptions.effect.call(tooltip, self, $.extend({}, position)); + tooltip.queue(function(next) { + // Reset attributes to avoid cross-browser rendering bugs + $(this).css({ opacity: '', height: '' }); + if($.browser.msie) { this.style.removeAttribute('filter'); } + + next(); + }); + } + + // Set positioning flagwtf + isPositioning = 0; + + return self; + }, + + disable: function(state) + { + if('boolean' !== typeof state) { + state = !(tooltip.hasClass(disabledClass) || cache.disabled); + } + + if(self.rendered) { + tooltip.toggleClass(disabledClass, state); + $.attr(tooltip[0], 'aria-disabled', state); + } + else { + cache.disabled = !!state; + } + + return self; + }, + + enable: function() { return self.disable(FALSE); }, + + destroy: function() + { + var t = target[0], + title = $.attr(t, oldtitle), + elemAPI = target.data('qtip'); + + // Set flag the signify destroy is taking place to plugins + self.destroyed = TRUE; + + // Destroy tooltip and any associated plugins if rendered + if(self.rendered) { + tooltip.stop(1,0).remove(); + + $.each(self.plugins, function() { + if(this.destroy) { this.destroy(); } + }); + } + + // Clear timers and remove bound events + clearTimeout(self.timers.show); + clearTimeout(self.timers.hide); + unassignEvents(); + + // If the API if actually this qTip API... + if(!elemAPI || self === elemAPI) { + // Remove api object + $.removeData(t, 'qtip'); + + // Reset old title attribute if removed + if(options.suppress && title) { + $.attr(t, 'title', title); + target.removeAttr(oldtitle); + } + + // Remove ARIA attributes + target.removeAttr('aria-describedby'); + } + + // Remove qTip events associated with this API + target.unbind('.qtip-'+id); + + // Remove ID from sued id object + delete usedIDs[self.id]; + + return target; + } + }); +} + +// Initialization method +function init(id, opts) +{ + var obj, posOptions, attr, config, title, + + // Setup element references + elem = $(this), + docBody = $(document.body), + + // Use document body instead of document element if needed + newTarget = this === document ? docBody : elem, + + // Grab metadata from element if plugin is present + metadata = (elem.metadata) ? elem.metadata(opts.metadata) : NULL, + + // If metadata type if HTML5, grab 'name' from the object instead, or use the regular data object otherwise + metadata5 = opts.metadata.type === 'html5' && metadata ? metadata[opts.metadata.name] : NULL, + + // Grab data from metadata.name (or data-qtipopts as fallback) using .data() method, + html5 = elem.data(opts.metadata.name || 'qtipopts'); + + // If we don't get an object returned attempt to parse it manualyl without parseJSON + try { html5 = typeof html5 === 'string' ? $.parseJSON(html5) : html5; } catch(e) {} + + // Merge in and sanitize metadata + config = $.extend(TRUE, {}, QTIP.defaults, opts, + typeof html5 === 'object' ? sanitizeOptions(html5) : NULL, + sanitizeOptions(metadata5 || metadata)); + + // Re-grab our positioning options now we've merged our metadata and set id to passed value + posOptions = config.position; + config.id = id; + + // Setup missing content if none is detected + if('boolean' === typeof config.content.text) { + attr = elem.attr(config.content.attr); + + // Grab from supplied attribute if available + if(config.content.attr !== FALSE && attr) { config.content.text = attr; } + + // No valid content was found, abort render + else { return FALSE; } + } + + // Setup target options + if(!posOptions.container.length) { posOptions.container = docBody; } + if(posOptions.target === FALSE) { posOptions.target = newTarget; } + if(config.show.target === FALSE) { config.show.target = newTarget; } + if(config.show.solo === TRUE) { config.show.solo = posOptions.container.closest('body'); } + if(config.hide.target === FALSE) { config.hide.target = newTarget; } + if(config.position.viewport === TRUE) { config.position.viewport = posOptions.container; } + + // Ensure we only use a single container + posOptions.container = posOptions.container.eq(0); + + // Convert position corner values into x and y strings + posOptions.at = new PLUGINS.Corner(posOptions.at); + posOptions.my = new PLUGINS.Corner(posOptions.my); + + // Destroy previous tooltip if overwrite is enabled, or skip element if not + if($.data(this, 'qtip')) { + if(config.overwrite) { + elem.qtip('destroy'); + } + else if(config.overwrite === FALSE) { + return FALSE; + } + } + + // Remove title attribute and store it if present + if(config.suppress && (title = $.attr(this, 'title'))) { + // Final attr call fixes event delegatiom and IE default tooltip showing problem + $(this).removeAttr('title').attr(oldtitle, title).attr('title', ''); + } + + // Initialize the tooltip and add API reference + obj = new QTip(elem, config, id, !!attr); + $.data(this, 'qtip', obj); + + // Catch remove/removeqtip events on target element to destroy redundant tooltip + elem.bind('remove.qtip-'+id+' removeqtip.qtip-'+id, function(){ obj.destroy(); }); + + return obj; +} + +// jQuery $.fn extension method +QTIP = $.fn.qtip = function(options, notation, newValue) +{ + var command = ('' + options).toLowerCase(), // Parse command + returned = NULL, + args = $.makeArray(arguments).slice(1), + event = args[args.length - 1], + opts = this[0] ? $.data(this[0], 'qtip') : NULL; + + // Check for API request + if((!arguments.length && opts) || command === 'api') { + return opts; + } + + // Execute API command if present + else if('string' === typeof options) + { + this.each(function() + { + var api = $.data(this, 'qtip'); + if(!api) { return TRUE; } + + // Cache the event if possible + if(event && event.timeStamp) { api.cache.event = event; } + + // Check for specific API commands + if((command === 'option' || command === 'options') && notation) { + if($.isPlainObject(notation) || newValue !== undefined) { + api.set(notation, newValue); + } + else { + returned = api.get(notation); + return FALSE; + } + } + + // Execute API command + else if(api[command]) { + api[command].apply(api[command], args); + } + }); + + return returned !== NULL ? returned : this; + } + + // No API commands. validate provided options and setup qTips + else if('object' === typeof options || !arguments.length) + { + opts = sanitizeOptions($.extend(TRUE, {}, options)); + + // Bind the qTips + return QTIP.bind.call(this, opts, event); + } +}; + +// $.fn.qtip Bind method +QTIP.bind = function(opts, event) +{ + return this.each(function(i) { + var options, targets, events, namespace, api, id; + + // Find next available ID, or use custom ID if provided + id = $.isArray(opts.id) ? opts.id[i] : opts.id; + id = !id || id === FALSE || id.length < 1 || usedIDs[id] ? QTIP.nextid++ : (usedIDs[id] = id); + + // Setup events namespace + namespace = '.qtip-'+id+'-create'; + + // Initialize the qTip and re-grab newly sanitized options + api = init.call(this, id, opts); + if(api === FALSE) { return TRUE; } + options = api.options; + + // Initialize plugins + $.each(PLUGINS, function() { + if(this.initialize === 'initialize') { this(api); } + }); + + // Determine hide and show targets + targets = { show: options.show.target, hide: options.hide.target }; + events = { + show: $.trim('' + options.show.event).replace(/ /g, namespace+' ') + namespace, + hide: $.trim('' + options.hide.event).replace(/ /g, namespace+' ') + namespace + }; + + /* + * Make sure hoverIntent functions properly by using mouseleave as a hide event if + * mouseenter/mouseout is used for show.event, even if it isn't in the users options. + */ + if(/mouse(over|enter)/i.test(events.show) && !/mouse(out|leave)/i.test(events.hide)) { + events.hide += ' mouseleave' + namespace; + } + + /* + * Also make sure initial mouse targetting works correctly by caching mousemove coords + * on show targets before the tooltip has rendered. + * + * Also set onTarget when triggered to keep mouse tracking working + */ + targets.show.bind('mousemove'+namespace, function(event) { + storeMouse(event); + api.cache.onTarget = TRUE; + }); + + // Define hoverIntent function + function hoverIntent(event) { + function render() { + // Cache mouse coords,render and render the tooltip + api.render(typeof event === 'object' || options.show.ready); + + // Unbind show and hide events + targets.show.add(targets.hide).unbind(namespace); + } + + // Only continue if tooltip isn't disabled + if(api.cache.disabled) { return FALSE; } + + // Cache the event data + api.cache.event = $.extend({}, event); + api.cache.target = event ? $(event.target) : [undefined]; + + // Start the event sequence + if(options.show.delay > 0) { + clearTimeout(api.timers.show); + api.timers.show = setTimeout(render, options.show.delay); + if(events.show !== events.hide) { + targets.hide.bind(events.hide, function() { clearTimeout(api.timers.show); }); + } + } + else { render(); } + } + + // Bind show events to target + targets.show.bind(events.show, hoverIntent); + + // Prerendering is enabled, create tooltip now + if(options.show.ready || options.prerender) { hoverIntent(event); } + }) + .attr('data-hasqtip', TRUE); +}; + +// Setup base plugins +PLUGINS = QTIP.plugins = { + // Corner object parser + Corner: function(corner) { + corner = ('' + corner).replace(/([A-Z])/, ' $1').replace(/middle/gi, CENTER).toLowerCase(); + this.x = (corner.match(/left|right/i) || corner.match(/center/) || ['inherit'])[0].toLowerCase(); + this.y = (corner.match(/top|bottom|center/i) || ['inherit'])[0].toLowerCase(); + + var f = corner.charAt(0); this.precedance = (f === 't' || f === 'b' ? Y : X); + + this.string = function() { return this.precedance === Y ? this.y+this.x : this.x+this.y; }; + this.abbrev = function() { + var x = this.x.substr(0,1), y = this.y.substr(0,1); + return x === y ? x : this.precedance === Y ? y + x : x + y; + }; + + this.invertx = function(center) { this.x = this.x === LEFT ? RIGHT : this.x === RIGHT ? LEFT : center || this.x; }; + this.inverty = function(center) { this.y = this.y === TOP ? BOTTOM : this.y === BOTTOM ? TOP : center || this.y; }; + + this.clone = function() { + return { + x: this.x, y: this.y, precedance: this.precedance, + string: this.string, abbrev: this.abbrev, clone: this.clone, + invertx: this.invertx, inverty: this.inverty + }; + }; + }, + + // Custom (more correct for qTip!) offset calculator + offset: function(elem, container) { + var pos = elem.offset(), + docBody = elem.closest('body'), + quirks = $.browser.msie && document.compatMode !== 'CSS1Compat', + parent = container, scrolled, + coffset, overflow; + + function scroll(e, i) { + pos.left += i * e.scrollLeft(); + pos.top += i * e.scrollTop(); + } + + if(parent) { + // Compensate for non-static containers offset + do { + if(parent.css('position') !== 'static') { + coffset = parent.position(); + + // Account for element positioning, borders and margins + pos.left -= coffset.left + (parseInt(parent.css('borderLeftWidth'), 10) || 0) + (parseInt(parent.css('marginLeft'), 10) || 0); + pos.top -= coffset.top + (parseInt(parent.css('borderTopWidth'), 10) || 0) + (parseInt(parent.css('marginTop'), 10) || 0); + + // If this is the first parent element with an overflow of "scroll" or "auto", store it + if(!scrolled && (overflow = parent.css('overflow')) !== 'hidden' && overflow !== 'visible') { scrolled = parent; } + } + } + while((parent = $(parent[0].offsetParent)).length); + + // Compensate for containers scroll if it also has an offsetParent (or in IE quirks mode) + if(scrolled && scrolled[0] !== docBody[0] || quirks) { + scroll( scrolled || docBody, 1 ); + } + } + + return pos; + }, + + /* + * iOS version detection + */ + iOS: parseFloat( + ('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0,''])[1]) + .replace('undefined', '3_2').replace('_', '.').replace('_', '') + ) || FALSE, + + /* + * jQuery-specific $.fn overrides + */ + fn: { + /* Allow other plugins to successfully retrieve the title of an element with a qTip applied */ + attr: function(attr, val) { + if(this.length) { + var self = this[0], + title = 'title', + api = $.data(self, 'qtip'); + + if(attr === title && api && 'object' === typeof api && api.options.suppress) { + if(arguments.length < 2) { + return $.attr(self, oldtitle); + } + + // If qTip is rendered and title was originally used as content, update it + if(api && api.options.content.attr === title && api.cache.attr) { + api.set('content.text', val); + } + + // Use the regular attr method to set, then cache the result + return this.attr(oldtitle, val); + } + } + + return $.fn['attr'+replaceSuffix].apply(this, arguments); + }, + + /* Allow clone to correctly retrieve cached title attributes */ + clone: function(keepData) { + var titles = $([]), title = 'title', + + // Clone our element using the real clone method + elems = $.fn['clone'+replaceSuffix].apply(this, arguments); + + // Grab all elements with an oldtitle set, and change it to regular title attribute, if keepData is false + if(!keepData) { + elems.filter('['+oldtitle+']').attr('title', function() { + return $.attr(this, oldtitle); + }) + .removeAttr(oldtitle); + } + + return elems; + } + } +}; + +// Apply the fn overrides above +$.each(PLUGINS.fn, function(name, func) { + if(!func || $.fn[name+replaceSuffix]) { return TRUE; } + + var old = $.fn[name+replaceSuffix] = $.fn[name]; + $.fn[name] = function() { + return func.apply(this, arguments) || old.apply(this, arguments); + }; +}); + +/* Fire off 'removeqtip' handler in $.cleanData if jQuery UI not present (it already does similar). + * This snippet is taken directly from jQuery UI source code found here: + * http://code.jquery.com/ui/jquery-ui-git.js + */ +if(!$.ui) { + $['cleanData'+replaceSuffix] = $.cleanData; + $.cleanData = function( elems ) { + for(var i = 0, elem; (elem = elems[i]) !== undefined; i++) { + try { $( elem ).triggerHandler('removeqtip'); } + catch( e ) {} + } + $['cleanData'+replaceSuffix]( elems ); + }; +} + +// Set global qTip properties +QTIP.version = '2.0.1-4-g'; +QTIP.nextid = 0; +QTIP.inactiveEvents = 'click dblclick mousedown mouseup mousemove mouseleave mouseenter'.split(' '); +QTIP.zindex = 15000; + +// Define configuration defaults +QTIP.defaults = { + prerender: FALSE, + id: FALSE, + overwrite: TRUE, + suppress: TRUE, + content: { + text: TRUE, + attr: 'title', + deferred: FALSE, + title: { + text: FALSE, + button: FALSE + } + }, + position: { + my: 'top left', + at: 'bottom right', + target: FALSE, + container: FALSE, + viewport: FALSE, + adjust: { + x: 0, y: 0, + mouse: TRUE, + resize: TRUE, + method: 'flipinvert flipinvert' + }, + effect: function(api, pos, viewport) { + $(this).animate(pos, { + duration: 200, + queue: FALSE + }); + } + }, + show: { + target: FALSE, + event: 'mouseenter', + effect: TRUE, + delay: 90, + solo: FALSE, + ready: FALSE, + autofocus: FALSE + }, + hide: { + target: FALSE, + event: 'mouseleave', + effect: TRUE, + delay: 0, + fixed: FALSE, + inactive: FALSE, + leave: 'window', + distance: FALSE + }, + style: { + classes: '', + widget: FALSE, + width: FALSE, + height: FALSE, + def: TRUE + }, + events: { + render: NULL, + move: NULL, + show: NULL, + hide: NULL, + toggle: NULL, + visible: NULL, + hidden: NULL, + focus: NULL, + blur: NULL + } +}; + + +})); +}( window, document )); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/basic/jquery.qtip.min.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/basic/jquery.qtip.min.css new file mode 100644 index 00000000..d22f4d1e --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/basic/jquery.qtip.min.css @@ -0,0 +1 @@ +/*! qTip2 v2.0.1-4-g (includes: svg ajax tips modal viewport imagemap ie6 / basic css3) | qtip2.com | Licensed MIT, GPL | Fri Jan 04 2013 04:05:40 */.qtip,.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;cursor:pointer;outline:medium none;border-width:1px;border-style:solid;border-color:transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-titlebar .ui-icon,.qtip-icon .ui-icon{display:block;text-indent:-1000em;direction:ltr;vertical-align:middle}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;text-align:center;text-indent:0;font:normal bold 10px/13px Tahoma,sans-serif;color:inherit;background:transparent none no-repeat -100em -100em}.qtip-focus{}.qtip-hover{}.qtip-default{border-width:1px;border-style:solid;border-color:#F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}/*! Light tooltip style */.qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}/*! Dark tooltip style */.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}/*! Cream tooltip style */.qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}/*! Red tooltip style */.qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon{border-color:#D95252}.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252}/*! Green tooltip style */.qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}/*! Blue tooltip style */.qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/basic/jquery.qtip.min.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/basic/jquery.qtip.min.js new file mode 100644 index 00000000..8dba2bbc --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/basic/jquery.qtip.min.js @@ -0,0 +1,2 @@ +/*! qTip2 v2.0.1-4-g (includes: svg ajax tips modal viewport imagemap ie6 / basic css3) | qtip2.com | Licensed MIT, GPL | Fri Jan 04 2013 04:05:39 */ +(function(e,t,n){(function(e){"use strict";typeof define=="function"&&define.amd?define(["jquery"],e):jQuery&&!jQuery.fn.qtip&&e(jQuery)})(function(r){function _(n){E={pageX:n.pageX,pageY:n.pageY,type:"mousemove",scrollX:e.pageXOffset||t.body.scrollLeft||t.documentElement.scrollLeft,scrollY:e.pageYOffset||t.body.scrollTop||t.documentElement.scrollTop}}function D(e){var t=function(e){return e===o||"object"!=typeof e},n=function(e){return!r.isFunction(e)&&(!e&&!e.attr||e.length<1||"object"==typeof e&&!e.jquery&&!e.then)};if(!e||"object"!=typeof e)return s;t(e.metadata)&&(e.metadata={type:e.metadata});if("content"in e){if(t(e.content)||e.content.jquery)e.content={text:e.content};n(e.content.text||s)&&(e.content.text=s),"title"in e.content&&(t(e.content.title)&&(e.content.title={text:e.content.title}),n(e.content.title.text||s)&&(e.content.title.text=s))}return"position"in e&&t(e.position)&&(e.position={my:e.position,at:e.position}),"show"in e&&t(e.show)&&(e.show=e.show.jquery?{target:e.show}:{event:e.show}),"hide"in e&&t(e.hide)&&(e.hide=e.hide.jquery?{target:e.hide}:{event:e.hide}),"style"in e&&t(e.style)&&(e.style={classes:e.style}),r.each(w,function(){this.sanitize&&this.sanitize(e)}),e}function P(u,a,f,l){function q(e){var t=0,n,r=a,i=e.split(".");while(r=r[i[t++]])t",{"class":"qtip-close "+(a.style.widget?"":S+"-icon"),title:n,"aria-label":n}).prepend(r("",{"class":"ui-icon ui-icon-close",html:"×"})),F.button.appendTo(F.titlebar||H).attr("role","button").click(function(e){return H.hasClass(j)||m.hide(e),s})}function X(){var e=y+"-title";F.titlebar&&z(),F.titlebar=r("
                                                ",{"class":S+"-titlebar "+(a.style.widget?R("header"):"")}).append(F.title=r("
                                                ",{id:e,"class":S+"-title","aria-atomic":i})).insertBefore(F.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(e){r(this).toggleClass("ui-state-active ui-state-focus",e.type.substr(-4)==="down")}).delegate(".qtip-close","mouseover mouseout",function(e){r(this).toggleClass("ui-state-hover",e.type==="mouseover")}),a.content.title.button&&W()}function V(e){var t=F.button;if(!m.rendered)return s;e?W():t.remove()}function J(e,t){var n=F.title;if(!m.rendered||!e)return s;r.isFunction(e)&&(e=e.call(u,I.event,m));if(e===s||!e&&e!=="")return z(s);e.jquery&&e.length>0?n.empty().append(e.css({display:"block"})):n.html(e),t!==s&&m.rendered&&H[0].offsetWidth>0&&m.reposition(I.event)}function K(e){e&&r.isFunction(e.done)&&e.done(function(e){Q(e,null,s)})}function Q(e,t,i){function f(e){function a(n){n&&(delete u[n.src],clearTimeout(m.timers.img[n.src]),r(n).unbind(B)),r.isEmptyObject(u)&&(t!==s&&m.reposition(I.event),e())}var i,u={};if((i=o.find("img[src]:not([height]):not([width])")).length===0)return a();i.each(function(e,t){if(u[t.src]!==n)return;var i=0,s=3;(function o(){if(t.height||t.width||i>s)return a(t);i+=1,m.timers.img[t.src]=setTimeout(o,700)})(),r(t).bind("error"+B+" load"+B,function(){a(this)}),u[t.src]=t})}var o=F.content;return!m.rendered||!e?s:(r.isFunction(e)&&(e=e.call(u,I.event,m)||""),i!==s&&K(a.content.deferred),e.jquery&&e.length>0?o.empty().append(e.css({display:"block"})):o.html(e),m.rendered<0?H.queue("fx",f):(P=0,f(r.noop)),m)}function G(){function h(e){if(H.hasClass(j))return s;clearTimeout(m.timers.show),clearTimeout(m.timers.hide);var t=function(){m.toggle(i,e)};a.show.delay>0?m.timers.show=setTimeout(t,a.show.delay):t()}function p(e){if(H.hasClass(j)||A||P)return s;var t=r(e.relatedTarget||e.target),i=t.closest(N)[0]===H[0],u=t[0]===o.show[0];clearTimeout(m.timers.show),clearTimeout(m.timers.hide);if(n.target==="mouse"&&i||a.hide.fixed&&/mouse(out|leave|move)/.test(e.type)&&(i||u)){try{e.preventDefault(),e.stopImmediatePropagation()}catch(f){}return}a.hide.delay>0?m.timers.hide=setTimeout(function(){m.hide(e)},a.hide.delay):m.hide(e)}function d(e){if(H.hasClass(j))return s;clearTimeout(m.timers.inactive),m.timers.inactive=setTimeout(function(){m.hide(e)},a.hide.inactive)}function v(e){m.rendered&&H[0].offsetWidth>0&&m.reposition(e)}var n=a.position,o={show:a.show.target,hide:a.hide.target,viewport:r(n.viewport),document:r(t),body:r(t.body),window:r(e)},l={show:r.trim(""+a.show.event).split(" "),hide:r.trim(""+a.hide.event).split(" ")},c=r.browser.msie&&parseInt(r.browser.version,10)===6;H.bind("mouseenter"+B+" mouseleave"+B,function(e){var t=e.type==="mouseenter";t&&m.focus(e),H.toggleClass(L,t)}),/mouse(out|leave)/i.test(a.hide.event)&&a.hide.leave==="window"&&o.window.bind("mouseout"+B+" blur"+B,function(e){!/select|option/.test(e.target.nodeName)&&!e.relatedTarget&&m.hide(e)}),a.hide.fixed?(o.hide=o.hide.add(H),H.bind("mouseover"+B,function(){H.hasClass(j)||clearTimeout(m.timers.hide)})):/mouse(over|enter)/i.test(a.show.event)&&o.hide.bind("mouseleave"+B,function(e){clearTimeout(m.timers.show)}),(""+a.hide.event).indexOf("unfocus")>-1&&n.container.closest("html").bind("mousedown"+B+" touchstart"+B,function(e){var t=r(e.target),n=m.rendered&&!H.hasClass(j)&&H[0].offsetWidth>0,i=t.parents(N).filter(H[0]).length>0;t[0]!==u[0]&&t[0]!==H[0]&&!i&&!u.has(t[0]).length&&!t.attr("disabled")&&m.hide(e)}),"number"==typeof a.hide.inactive&&(o.show.bind("qtip-"+f+"-inactive",d),r.each(b.inactiveEvents,function(e,t){o.hide.add(F.tooltip).bind(t+B+"-inactive",d)})),r.each(l.hide,function(e,t){var n=r.inArray(t,l.show),i=r(o.hide);n>-1&&i.add(o.show).length===i.length||t==="unfocus"?(o.show.bind(t+B,function(e){H[0].offsetWidth>0?p(e):h(e)}),delete l.show[n]):o.hide.bind(t+B,p)}),r.each(l.show,function(e,t){o.show.bind(t+B,h)}),"number"==typeof a.hide.distance&&o.show.add(H).bind("mousemove"+B,function(e){var t=I.origin||{},n=a.hide.distance,r=Math.abs;(r(e.pageX-t.pageX)>=n||r(e.pageY-t.pageY)>=n)&&m.hide(e)}),n.target==="mouse"&&(o.show.bind("mousemove"+B,_),n.adjust.mouse&&(a.hide.event&&(H.bind("mouseleave"+B,function(e){(e.relatedTarget||e.target)!==o.show[0]&&m.hide(e)}),F.target.bind("mouseenter"+B+" mouseleave"+B,function(e){I.onTarget=e.type==="mouseenter"})),o.document.bind("mousemove"+B,function(e){m.rendered&&I.onTarget&&!H.hasClass(j)&&H[0].offsetWidth>0&&m.reposition(e||E)}))),(n.adjust.resize||o.viewport.length)&&(r.event.special.resize?o.viewport:o.window).bind("resize"+B,v),o.window.add(n.container).bind("scroll"+B,v)}function Y(){var n=[a.show.target[0],a.hide.target[0],m.rendered&&F.tooltip[0],a.position.container[0],a.position.viewport[0],a.position.container.closest("html")[0],e,t];m.rendered?r([]).pushStack(r.grep(n,function(e){return typeof e=="object"})).unbind(B):a.show.target.unbind(B+"-create")}var m=this,g=t.body,y=S+"-"+f,A=0,P=0,H=r(),B=".qtip-"+f,j="qtip-disabled",F,I;m.id=f,m.rendered=s,m.destroyed=s,m.elements=F={target:u},m.timers={img:{}},m.options=a,m.checks={},m.plugins={},m.cache=I={event:{},target:r(),disabled:s,attr:l,onTarget:s,lastClass:""},m.checks.builtin={"^id$":function(e,t,n){var o=n===i?b.nextid:n,u=S+"-"+o;o!==s&&o.length>0&&!r("#"+u).length&&(H[0].id=u,F.content[0].id=u+"-content",F.title[0].id=u+"-title")},"^content.text$":function(e,t,n){Q(a.content.text)},"^content.deferred$":function(e,t,n){K(a.content.deferred)},"^content.title.text$":function(e,t,n){if(!n)return z();!F.title&&n&&X(),J(n)},"^content.title.button$":function(e,t,n){V(n)},"^position.(my|at)$":function(e,t,n){"string"==typeof n&&(e[t]=new w.Corner(n))},"^position.container$":function(e,t,n){m.rendered&&H.appendTo(n)},"^show.ready$":function(){m.rendered?m.toggle(i):m.render(1)},"^style.classes$":function(e,t,n){H.attr("class",S+" qtip "+n)},"^style.width|height":function(e,t,n){H.css(t,n)},"^style.widget|content.title":U,"^events.(render|show|move|hide|focus|blur)$":function(e,t,n){H[(r.isFunction(n)?"":"un")+"bind"]("tooltip"+t,n)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){var e=a.position;H.attr("tracking",e.target==="mouse"&&e.adjust.mouse),Y(),G()}},r.extend(m,{_triggerEvent:function(e,t,n){var i=r.Event("tooltip"+e);return i.originalEvent=(n?r.extend({},n):o)||I.event||o,H.trigger(i,[m].concat(t||[])),!i.isDefaultPrevented()},render:function(e){if(m.rendered)return m;var t=a.content.text,n=a.content.title,o=a.position;return r.attr(u[0],"aria-describedby",y),H=F.tooltip=r("
                                                ",{id:y,"class":[S,C,a.style.classes,S+"-pos-"+a.position.my.abbrev()].join(" "),width:a.style.width||"",height:a.style.height||"",tracking:o.target==="mouse"&&o.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":s,"aria-describedby":y+"-content","aria-hidden":i}).toggleClass(j,I.disabled).data("qtip",m).appendTo(a.position.container).append(F.content=r("
                                                ",{"class":S+"-content",id:y+"-content","aria-atomic":i})),m.rendered=-1,A=1,n.text?(X(),r.isFunction(n.text)||J(n.text,s)):n.button&&W(),(!r.isFunction(t)||t.then)&&Q(t,s),m.rendered=i,U(),r.each(a.events,function(e,t){r.isFunction(t)&&H.bind(e==="toggle"?"tooltipshow tooltiphide":"tooltip"+e,t)}),r.each(w,function(){this.initialize==="render"&&this(m)}),G(),H.queue("fx",function(t){m._triggerEvent("render"),A=0,(a.show.ready||e)&&m.toggle(i,I.event,s),t()}),m},get:function(e){var t,n;switch(e.toLowerCase()){case"dimensions":t={height:H.outerHeight(s),width:H.outerWidth(s)};break;case"offset":t=w.offset(H,a.position.container);break;default:n=q(e.toLowerCase()),t=n[0][n[1]],t=t.precedance?t.string():t}return t},set:function(e,t){function h(e,t){var n,r,i;for(n in l)for(r in l[n])if(i=(new RegExp(r,"i")).exec(e))t.push(i),l[n][r].apply(m,t)}var n=/^position\.(my|at|adjust|target|container)|style|content|show\.ready/i,u=/^content\.(title|attr)|style/i,f=s,l=m.checks,c;return"string"==typeof e?(c=e,e={},e[c]=t):e=r.extend(i,{},e),r.each(e,function(t,i){var s=q(t.toLowerCase()),o;o=s[0][s[1]],s[0][s[1]]="object"==typeof i&&i.nodeType?r(i):i,e[t]=[s[0],s[1],i,o],f=n.test(t)||f}),D(a),A=1,r.each(e,h),A=0,m.rendered&&H[0].offsetWidth>0&&f&&m.reposition(a.position.target==="mouse"?o:I.event),m},toggle:function(e,n){function b(){e?(r.browser.msie&&H[0].style.removeAttribute("filter"),H.css("overflow",""),"string"==typeof u.autofocus&&r(u.autofocus,H).focus(),u.target.trigger("qtip-"+f+"-inactive")):H.css({display:"",visibility:"",opacity:"",left:"",top:""}),m._triggerEvent(e?"visible":"hidden")}if(n){if(/over|enter/.test(n.type)&&/out|leave/.test(I.event.type)&&a.show.target.add(n.target).length===a.show.target.length&&H.has(n.relatedTarget).length)return m;I.event=r.extend({},n)}if(!m.rendered)return e?m.render(1):m;var o=e?"show":"hide",u=a[o],l=a[e?"hide":"show"],c=a.position,h=a.content,p=H[0].offsetWidth>0,d=e||u.target.length===1,v=!n||u.target.length<2||I.target[0]===n.target,g,y;return(typeof e).search("boolean|number")&&(e=!p),!H.is(":animated")&&p===e&&v?m:m._triggerEvent(o,[90])?(r.attr(H[0],"aria-hidden",!e),e?(I.origin=r.extend({},E),m.focus(n),r.isFunction(h.text)&&Q(h.text,s),r.isFunction(h.title.text)&&J(h.title.text,s),!M&&c.target==="mouse"&&c.adjust.mouse&&(r(t).bind("mousemove.qtip",_),M=i),m.reposition(n,arguments[2]),!u.solo||(typeof u.solo=="string"?r(u.solo):r(N,u.solo)).not(H).not(u.target).qtip("hide",r.Event("tooltipsolo"))):(clearTimeout(m.timers.show),delete I.origin,M&&!r(N+'[tracking="true"]:visible',u.solo).not(H).length&&(r(t).unbind("mousemove.qtip"),M=s),m.blur(n)),u.effect===s||d===s?(H[o](),b.call(H)):r.isFunction(u.effect)?(H.stop(1,1),u.effect.call(H,m),H.queue("fx",function(e){b(),e()})):H.fadeTo(90,e?1:0,b),e&&u.target.trigger("qtip-"+f+"-inactive"),m):m},show:function(e){return m.toggle(i,e)},hide:function(e){return m.toggle(s,e)},focus:function(e){if(!m.rendered)return m;var t=r(N),n=parseInt(H[0].style.zIndex,10),i=b.zindex+t.length,s=r.extend({},e),o;return H.hasClass(k)||m._triggerEvent("focus",[i],s)&&(n!==i&&(t.each(function(){this.style.zIndex>n&&(this.style.zIndex=this.style.zIndex-1)}),t.filter("."+k).qtip("blur",s)),H.addClass(k)[0].style.zIndex=i),m},blur:function(e){return H.removeClass(k),m._triggerEvent("blur",[H.css("zIndex")],e),m},reposition:function(n,i){if(!m.rendered||A)return m;A=1;var o=a.position.target,u=a.position,f=u.my,l=u.at,g=u.adjust,y=g.method.split(" "),b=H.outerWidth(s),S=H.outerHeight(s),x=0,T=0,N=H.css("position"),C=u.viewport,k={left:0,top:0},L=u.container,O=H[0].offsetWidth>0,M=n&&n.type==="scroll",_=r(e),D,P;if(r.isArray(o)&&o.length===2)l={x:h,y:c},k={left:o[0],top:o[1]};else if(o==="mouse"&&(n&&n.pageX||I.event.pageX))l={x:h,y:c},n=E&&E.pageX&&(g.mouse||!n||!n.pageX)?{pageX:E.pageX,pageY:E.pageY}:(!n||n.type!=="resize"&&n.type!=="scroll"?n&&n.pageX&&n.type==="mousemove"?n:(!g.mouse||a.show.distance)&&I.origin&&I.origin.pageX?I.origin:n:I.event)||n||I.event||E||{},N!=="static"&&(k=L.offset()),k={left:n.pageX-k.left,top:n.pageY-k.top},g.mouse&&M&&(k.left-=E.scrollX-_.scrollLeft(),k.top-=E.scrollY-_.scrollTop());else{o==="event"&&n&&n.target&&n.type!=="scroll"&&n.type!=="resize"?I.target=r(n.target):o!=="event"&&(I.target=r(o.jquery?o:F.target)),o=I.target,o=r(o).eq(0);if(o.length===0)return m;o[0]===t||o[0]===e?(x=w.iOS?e.innerWidth:o.width(),T=w.iOS?e.innerHeight:o.height(),o[0]===e&&(k={top:(C||o).scrollTop(),left:(C||o).scrollLeft()})):w.imagemap&&o.is("area")?D=w.imagemap(m,o,l,w.viewport?y:s):w.svg&&o[0].ownerSVGElement?D=w.svg(m,o,l,w.viewport?y:s):(x=o.outerWidth(s),T=o.outerHeight(s),k=w.offset(o,L)),D&&(x=D.width,T=D.height,P=D.offset,k=D.position);if(w.iOS>3.1&&w.iOS<4.1||w.iOS>=4.3&&w.iOS<4.33||!w.iOS&&N==="fixed")k.left-=_.scrollLeft(),k.top-=_.scrollTop();k.left+=l.x===d?x:l.x===v?x/2:0,k.top+=l.y===p?T:l.y===v?T/2:0}return k.left+=g.x+(f.x===d?-b:f.x===v?-b/2:0),k.top+=g.y+(f.y===p?-S:f.y===v?-S/2:0),w.viewport?(k.adjusted=w.viewport(m,k,u,x,T,b,S),P&&k.adjusted.left&&(k.left+=P.left),P&&k.adjusted.top&&(k.top+=P.top)):k.adjusted={left:0,top:0},m._triggerEvent("move",[k,C.elem||C],n)?(delete k.adjusted,i===s||!O||isNaN(k.left)||isNaN(k.top)||o==="mouse"||!r.isFunction(u.effect)?H.css(k):r.isFunction(u.effect)&&(u.effect.call(H,m,r.extend({},k)),H.queue(function(e){r(this).css({opacity:"",height:""}),r.browser.msie&&this.style.removeAttribute("filter"),e()})),A=0,m):m},disable:function(e){return"boolean"!=typeof e&&(e=!H.hasClass(j)&&!I.disabled),m.rendered?(H.toggleClass(j,e),r.attr(H[0],"aria-disabled",e)):I.disabled=!!e,m},enable:function(){return m.disable(s)},destroy:function(){var e=u[0],t=r.attr(e,O),n=u.data("qtip");m.destroyed=i,m.rendered&&(H.stop(1,0).remove(),r.each(m.plugins,function(){this.destroy&&this.destroy()})),clearTimeout(m.timers.show),clearTimeout(m.timers.hide),Y();if(!n||m===n)r.removeData(e,"qtip"),a.suppress&&t&&(r.attr(e,"title",t),u.removeAttr(O)),u.removeAttr("aria-describedby");return u.unbind(".qtip-"+f),delete x[m.id],u}})}function H(e,n){var u,a,f,l,c,h=r(this),p=r(t.body),d=this===t?p:h,v=h.metadata?h.metadata(n.metadata):o,m=n.metadata.type==="html5"&&v?v[n.metadata.name]:o,g=h.data(n.metadata.name||"qtipopts");try{g=typeof g=="string"?r.parseJSON(g):g}catch(y){}l=r.extend(i,{},b.defaults,n,typeof g=="object"?D(g):o,D(m||v)),a=l.position,l.id=e;if("boolean"==typeof l.content.text){f=h.attr(l.content.attr);if(l.content.attr===s||!f)return s;l.content.text=f}a.container.length||(a.container=p),a.target===s&&(a.target=d),l.show.target===s&&(l.show.target=d),l.show.solo===i&&(l.show.solo=a.container.closest("body")),l.hide.target===s&&(l.hide.target=d),l.position.viewport===i&&(l.position.viewport=a.container),a.container=a.container.eq(0),a.at=new w.Corner(a.at),a.my=new w.Corner(a.my);if(r.data(this,"qtip"))if(l.overwrite)h.qtip("destroy");else if(l.overwrite===s)return s;return l.suppress&&(c=r.attr(this,"title"))&&r(this).removeAttr("title").attr(O,c).attr("title",""),u=new P(h,l,e,!!f),r.data(this,"qtip",u),h.bind("remove.qtip-"+e+" removeqtip.qtip-"+e,function(){u.destroy()}),u}var i=!0,s=!1,o=null,u="x",a="y",f="width",l="height",c="top",h="left",p="bottom",d="right",v="center",m="flip",g="flipinvert",y="shift",b,w,E,S="qtip",x={},T=["ui-widget","ui-tooltip"],N="div.qtip."+S,C=S+"-default",k=S+"-focus",L=S+"-hover",A="_replacedByqTip",O="oldtitle",M;b=r.fn.qtip=function(e,t,u){var a=(""+e).toLowerCase(),f=o,l=r.makeArray(arguments).slice(1),c=l[l.length-1],h=this[0]?r.data(this[0],"qtip"):o;if(!arguments.length&&h||a==="api")return h;if("string"==typeof e)return this.each(function(){var e=r.data(this,"qtip");if(!e)return i;c&&c.timeStamp&&(e.cache.event=c);if(a!=="option"&&a!=="options"||!t)e[a]&&e[a].apply(e[a],l);else{if(!r.isPlainObject(t)&&u===n)return f=e.get(t),s;e.set(t,u)}}),f!==o?f:this;if("object"==typeof e||!arguments.length)return h=D(r.extend(i,{},e)),b.bind.call(this,h,c)},b.bind=function(e,t){return this.each(function(o){function p(e){function t(){c.render(typeof e=="object"||u.show.ready),a.show.add(a.hide).unbind(l)}if(c.cache.disabled)return s;c.cache.event=r.extend({},e),c.cache.target=e?r(e.target):[n],u.show.delay>0?(clearTimeout(c.timers.show),c.timers.show=setTimeout(t,u.show.delay),f.show!==f.hide&&a.hide.bind(f.hide,function(){clearTimeout(c.timers.show)})):t()}var u,a,f,l,c,h;h=r.isArray(e.id)?e.id[o]:e.id,h=!h||h===s||h.length<1||x[h]?b.nextid++:x[h]=h,l=".qtip-"+h+"-create",c=H.call(this,h,e);if(c===s)return i;u=c.options,r.each(w,function(){this.initialize==="initialize"&&this(c)}),a={show:u.show.target,hide:u.hide.target},f={show:r.trim(""+u.show.event).replace(/ /g,l+" ")+l,hide:r.trim(""+u.hide.event).replace(/ /g,l+" ")+l},/mouse(over|enter)/i.test(f.show)&&!/mouse(out|leave)/i.test(f.hide)&&(f.hide+=" mouseleave"+l),a.show.bind("mousemove"+l,function(e){_(e),c.cache.onTarget=i}),a.show.bind(f.show,p),(u.show.ready||u.prerender)&&p(t)}).attr("data-hasqtip",i)},w=b.plugins={Corner:function(e){e=(""+e).replace(/([A-Z])/," $1").replace(/middle/gi,v).toLowerCase(),this.x=(e.match(/left|right/i)||e.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(e.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase();var t=e.charAt(0);this.precedance=t==="t"||t==="b"?a:u,this.string=function(){return this.precedance===a?this.y+this.x:this.x+this.y},this.abbrev=function(){var e=this.x.substr(0,1),t=this.y.substr(0,1);return e===t?e:this.precedance===a?t+e:e+t},this.invertx=function(e){this.x=this.x===h?d:this.x===d?h:e||this.x},this.inverty=function(e){this.y=this.y===c?p:this.y===p?c:e||this.y},this.clone=function(){return{x:this.x,y:this.y,precedance:this.precedance,string:this.string,abbrev:this.abbrev,clone:this.clone,invertx:this.invertx,inverty:this.inverty}}},offset:function(e,n){function c(e,t){i.left+=t*e.scrollLeft(),i.top+=t*e.scrollTop()}var i=e.offset(),s=e.closest("body"),o=r.browser.msie&&t.compatMode!=="CSS1Compat",u=n,a,f,l;if(u){do u.css("position")!=="static"&&(f=u.position(),i.left-=f.left+(parseInt(u.css("borderLeftWidth"),10)||0)+(parseInt(u.css("marginLeft"),10)||0),i.top-=f.top+(parseInt(u.css("borderTopWidth"),10)||0)+(parseInt(u.css("marginTop"),10)||0),!a&&(l=u.css("overflow"))!=="hidden"&&l!=="visible"&&(a=u));while((u=r(u[0].offsetParent)).length);(a&&a[0]!==s[0]||o)&&c(a||s,1)}return i},iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||s,fn:{attr:function(e,t){if(this.length){var n=this[0],i="title",s=r.data(n,"qtip");if(e===i&&s&&"object"==typeof s&&s.options.suppress)return arguments.length<2?r.attr(n,O):(s&&s.options.content.attr===i&&s.cache.attr&&s.set("content.text",t),this.attr(O,t))}return r.fn["attr"+A].apply(this,arguments)},clone:function(e){var t=r([]),n="title",i=r.fn["clone"+A].apply(this,arguments);return e||i.filter("["+O+"]").attr("title",function(){return r.attr(this,O)}).removeAttr(O),i}}},r.each(w.fn,function(e,t){if(!t||r.fn[e+A])return i;var n=r.fn[e+A]=r.fn[e];r.fn[e]=function(){return t.apply(this,arguments)||n.apply(this,arguments)}}),r.ui||(r["cleanData"+A]=r.cleanData,r.cleanData=function(e){for(var t=0,i;(i=e[t])!==n;t++)try{r(i).triggerHandler("removeqtip")}catch(s){}r["cleanData"+A](e)}),b.version="2.0.1-4-g",b.nextid=0,b.inactiveEvents="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),b.zindex=15e3,b.defaults={prerender:s,id:s,overwrite:i,suppress:i,content:{text:i,attr:"title",deferred:s,title:{text:s,button:s}},position:{my:"top left",at:"bottom right",target:s,container:s,viewport:s,adjust:{x:0,y:0,mouse:i,resize:i,method:"flipinvert flipinvert"},effect:function(e,t,n){r(this).animate(t,{duration:200,queue:s})}},show:{target:s,event:"mouseenter",effect:i,delay:90,solo:s,ready:s,autofocus:s},hide:{target:s,event:"mouseleave",effect:i,delay:0,fixed:s,inactive:s,leave:"window",distance:s},style:{classes:"",widget:s,width:s,height:s,def:i},events:{render:o,move:o,show:o,hide:o,toggle:o,visible:o,hidden:o,focus:o,blur:o}}})})(window,document); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery-migrate-1.0.0.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery-migrate-1.0.0.js new file mode 100644 index 00000000..cc842341 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery-migrate-1.0.0.js @@ -0,0 +1,498 @@ +/*! + * jQuery Migrate - v1.0.0 - 2013-01-14 + * https://github.com/jquery/jquery-migrate + * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT + */ +(function( jQuery, window, undefined ) { +"use strict"; + + +var warnedAbout = {}; + +// List of warnings already given; public read only +jQuery.migrateWarnings = []; + +// Set to true to prevent console output; migrateWarnings still maintained +// jQuery.migrateMute = false; + +// Forget any warnings we've already given; public +jQuery.migrateReset = function() { + warnedAbout = {}; + jQuery.migrateWarnings.length = 0; +}; + +function migrateWarn( msg) { + if ( !warnedAbout[ msg ] ) { + warnedAbout[ msg ] = true; + jQuery.migrateWarnings.push( msg ); + if ( window.console && console.warn && !jQuery.migrateMute ) { + console.warn( "JQMIGRATE: " + msg ); + } + } +} + +function migrateWarnProp( obj, prop, value, msg ) { + if ( Object.defineProperty ) { + // On ES5 browsers (non-oldIE), warn if the code tries to get prop; + // allow property to be overwritten in case some other plugin wants it + try { + Object.defineProperty( obj, prop, { + configurable: true, + enumerable: true, + get: function() { + migrateWarn( msg ); + return value; + }, + set: function( newValue ) { + migrateWarn( msg ); + value = newValue; + } + }); + return; + } catch( err ) { + // IE8 is a dope about Object.defineProperty, can't warn there + } + } + + // Non-ES5 (or broken) browser; just set the property + jQuery._definePropertyBroken = true; + obj[ prop ] = value; +} + +if ( document.compatMode === "BackCompat" ) { + // jQuery has never supported or tested Quirks Mode + migrateWarn( "jQuery is not compatible with Quirks Mode" ); +} + + +var attrFn = {}, + attr = jQuery.attr, + valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get || + function() { return null; }, + valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set || + function() { return undefined; }, + rnoType = /^(?:input|button)$/i, + rnoAttrNodeType = /^[238]$/, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + ruseDefault = /^(?:checked|selected)$/i; + +// jQuery.attrFn +migrateWarnProp( jQuery, "attrFn", attrFn, "jQuery.attrFn is deprecated" ); + +jQuery.attr = function( elem, name, value, pass ) { + var lowerName = name.toLowerCase(), + nType = elem && elem.nodeType; + + if ( pass ) { + migrateWarn("jQuery.fn.attr( props, pass ) is deprecated"); + if ( elem && !rnoAttrNodeType.test( nType ) && jQuery.isFunction( jQuery.fn[ name ] ) ) { + return jQuery( elem )[ name ]( value ); + } + } + + // Warn if user tries to set `type` since it breaks on IE 6/7/8 + if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) ) { + migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8"); + } + + // Restore boolHook for boolean property/attribute synchronization + if ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) { + jQuery.attrHooks[ lowerName ] = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && + ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } + }; + + // Warn only for attributes that can remain distinct from their properties post-1.9 + if ( ruseDefault.test( lowerName ) ) { + migrateWarn( "jQuery.fn.attr(" + lowerName + ") may use property instead of attribute" ); + } + } + + return attr.call( jQuery, elem, name, value ); +}; + +// attrHooks: value +jQuery.attrHooks.value = { + get: function( elem, name ) { + var nodeName = ( elem.nodeName || "" ).toLowerCase(); + if ( nodeName === "button" ) { + return valueAttrGet.apply( this, arguments ); + } + if ( nodeName !== "input" && nodeName !== "option" ) { + migrateWarn("property-based jQuery.fn.attr('value') is deprecated"); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value ) { + var nodeName = ( elem.nodeName || "" ).toLowerCase(); + if ( nodeName === "button" ) { + return valueAttrSet.apply( this, arguments ); + } + if ( nodeName !== "input" && nodeName !== "option" ) { + migrateWarn("property-based jQuery.fn.attr('value', val) is deprecated"); + } + // Does not return so that setAttribute is also used + elem.value = value; + } +}; + + +var matched, browser, + oldInit = jQuery.fn.init, + // Note this does NOT include the # XSS fix from 1.7! + rquickExpr = /^(?:.*(<[\w\W]+>)[^>]*|#([\w\-]*))$/; + +// $(html) "looks like html" rule change +jQuery.fn.init = function( selector, context, rootjQuery ) { + var match; + + if ( selector && typeof selector === "string" && !jQuery.isPlainObject( context ) && + (match = rquickExpr.exec( selector )) && match[1] ) { + // This is an HTML string according to the "old" rules; is it still? + if ( selector.charAt( 0 ) !== "<" ) { + migrateWarn("$(html) HTML strings must start with '<' character"); + } + // Now process using loose rules; let pre-1.8 play too + if ( context && context.context ) { + // jQuery object as context; parseHTML expects a DOM object + context = context.context; + } + if ( jQuery.parseHTML ) { + return oldInit.call( this, jQuery.parseHTML( jQuery.trim(selector), context, true ), + context, rootjQuery ); + } + } + return oldInit.apply( this, arguments ); +}; +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.uaMatch = function( ua ) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || + /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; +}; + +matched = jQuery.uaMatch( navigator.userAgent ); +browser = {}; + +if ( matched.browser ) { + browser[ matched.browser ] = true; + browser.version = matched.version; +} + +// Chrome is Webkit, but Webkit is also Safari. +if ( browser.chrome ) { + browser.webkit = true; +} else if ( browser.webkit ) { + browser.safari = true; +} + +jQuery.browser = browser; + +// Warn if the code tries to get jQuery.browser +migrateWarnProp( jQuery, "browser", browser, "jQuery.browser is deprecated" ); + +jQuery.sub = function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + migrateWarn( "jQuery.sub() is deprecated" ); + return jQuerySub; +}; + + +var oldFnData = jQuery.fn.data; + +jQuery.fn.data = function( name ) { + var ret, evt, + elem = this[0]; + + // Handles 1.7 which has this behavior and 1.8 which doesn't + if ( elem && name === "events" && arguments.length === 1 ) { + ret = jQuery.data( elem, name ); + evt = jQuery._data( elem, name ); + if ( ( ret === undefined || ret === evt ) && evt !== undefined ) { + migrateWarn("Use of jQuery.fn.data('events') is deprecated"); + return evt; + } + } + return oldFnData.apply( this, arguments ); +}; + + +var rscriptType = /\/(java|ecma)script/i, + oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack, + oldFragment = jQuery.buildFragment; + +jQuery.fn.andSelf = function() { + migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"); + return oldSelf.apply( this, arguments ); +}; + +// Since jQuery.clean is used internally on older versions, we only shim if it's missing +if ( !jQuery.clean ) { + jQuery.clean = function( elems, context, fragment, scripts ) { + // Set context per 1.8 logic + context = context || document; + context = !context.nodeType && context[0] || context; + context = context.ownerDocument || context; + + migrateWarn("jQuery.clean() is deprecated"); + + var i, elem, handleScript, jsTags, + ret = []; + + jQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes ); + + // Complex logic lifted directly from jQuery 1.8 + if ( fragment ) { + // Special handling of each script element + handleScript = function( elem ) { + // Check if we consider it executable + if ( !elem.type || rscriptType.test( elem.type ) ) { + // Detach the script and store it in the scripts array (if provided) or the fragment + // Return truthy to indicate that it has been handled + return scripts ? + scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) : + fragment.appendChild( elem ); + } + }; + + for ( i = 0; (elem = ret[i]) != null; i++ ) { + // Check if we're done after handling an executable script + if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) { + // Append to fragment and handle embedded scripts + fragment.appendChild( elem ); + if ( typeof elem.getElementsByTagName !== "undefined" ) { + // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration + jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript ); + + // Splice the scripts into ret after their former ancestor and advance our index beyond them + ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); + i += jsTags.length; + } + } + } + } + + return ret; + }; +} + +jQuery.buildFragment = function( elems, context, scripts, selection ) { + var ret, + warning = "jQuery.buildFragment() is deprecated"; + + // Set context per 1.8 logic + context = context || document; + context = !context.nodeType && context[0] || context; + context = context.ownerDocument || context; + + try { + ret = oldFragment.call( jQuery, elems, context, scripts, selection ); + + // jQuery < 1.8 required arrayish context; jQuery 1.9 fails on it + } catch( x ) { + ret = oldFragment.call( jQuery, elems, context.nodeType ? [ context ] : context[ 0 ], scripts, selection ); + + // Success from tweaking context means buildFragment was called by the user + migrateWarn( warning ); + } + + // jQuery < 1.9 returned an object instead of the fragment itself + if ( !ret.fragment ) { + migrateWarnProp( ret, "fragment", ret, warning ); + migrateWarnProp( ret, "cacheable", false, warning ); + } + + return ret; +}; + +var eventAdd = jQuery.event.add, + eventRemove = jQuery.event.remove, + eventTrigger = jQuery.event.trigger, + oldToggle = jQuery.fn.toggle, + oldLive = jQuery.fn.live, + oldDie = jQuery.fn.die, + ajaxEvents = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess", + rajaxEvent = new RegExp( "\\b(?:" + ajaxEvents + ")\\b" ), + rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, + hoverHack = function( events ) { + if ( typeof( events ) != "string" || jQuery.event.special.hover ) { + return events; + } + if ( rhoverHack.test( events ) ) { + migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"); + } + return events && events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +// Event props removed in 1.9, put them back if needed; no practical way to warn them +if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) { + jQuery.event.props.unshift( "attrChange", "attrName", "relatedNode", "srcElement" ); +} + +// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7 +migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" ); + +// Support for 'hover' pseudo-event and ajax event warnings +jQuery.event.add = function( elem, types, handler, data, selector ){ + if ( elem !== document && rajaxEvent.test( types ) ) { + migrateWarn( "AJAX events should be attached to document: " + types ); + } + eventAdd.call( this, elem, hoverHack( types || "" ), handler, data, selector ); +}; +jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){ + eventRemove.call( this, elem, hoverHack( types ) || "", handler, selector, mappedTypes ); +}; + +jQuery.fn.error = function() { + var args = Array.prototype.slice.call( arguments, 0); + migrateWarn("jQuery.fn.error() is deprecated"); + args.splice( 0, 0, "error" ); + if ( arguments.length ) { + return this.bind.apply( this, args ); + } + // error event should not bubble to window, although it does pre-1.7 + this.triggerHandler.apply( this, args ); + return this; +}; + +jQuery.fn.toggle = function( fn, fn2 ) { + + // Don't mess with animation or css toggles + if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) { + return oldToggle.apply( this, arguments ); + } + migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated"); + + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); +}; + +jQuery.fn.live = function( types, data, fn ) { + migrateWarn("jQuery.fn.live() is deprecated"); + if ( oldLive ) { + return oldLive.apply( this, arguments ); + } + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; +}; + +jQuery.fn.die = function( types, fn ) { + migrateWarn("jQuery.fn.die() is deprecated"); + if ( oldDie ) { + return oldDie.apply( this, arguments ); + } + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; +}; + +// Turn global events into document-triggered events +jQuery.event.trigger = function( event, data, elem, onlyHandlers ){ + if ( !elem & !rajaxEvent.test( event ) ) { + migrateWarn( "Global events are undocumented and deprecated" ); + } + return eventTrigger.call( this, event, data, elem || document, onlyHandlers ); +}; +jQuery.each( ajaxEvents.split("|"), + function( _, name ) { + jQuery.event.special[ name ] = { + setup: function() { + var elem = this; + + // The document needs no shimming; must be !== for oldIE + if ( elem !== document ) { + jQuery.event.add( document, name + "." + jQuery.guid, function() { + jQuery.event.trigger( name, null, elem, true ); + }); + jQuery._data( this, name, jQuery.guid++ ); + } + return false; + }, + teardown: function() { + if ( this !== document ) { + jQuery.event.remove( document, name + "." + jQuery._data( this, name ) ); + } + return false; + } + }; + } +); + + +})( jQuery, window ); diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery.qtip.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery.qtip.css new file mode 100644 index 00000000..c2cc4dc0 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery.qtip.css @@ -0,0 +1,614 @@ +/*! + * qTip2 - Pretty powerful tooltips - v2.0.1-4-g + * http://qtip2.com + * + * Copyright (c) 2013 Craig Michael Thompson + * Released under the MIT, GPL licenses + * http://jquery.org/license + * + * Date: Fri Jan 4 2013 04:05 GMT+0000 + * Plugins: svg ajax tips modal viewport imagemap ie6 + * Styles: basic css3 + */ + +/* Core qTip styles */ +.qtip, .qtip{ + position: absolute; + left: -28000px; + top: -28000px; + display: none; + + max-width: 280px; + min-width: 50px; + + font-size: 10.5px; + line-height: 12px; + + direction: ltr; +} + + .qtip-content{ + position: relative; + padding: 5px 9px; + overflow: hidden; + + text-align: left; + word-wrap: break-word; + } + + .qtip-titlebar{ + position: relative; + padding: 5px 35px 5px 10px; + overflow: hidden; + + border-width: 0 0 1px; + font-weight: bold; + } + + .qtip-titlebar + .qtip-content{ border-top-width: 0 !important; } + + /* Default close button class */ + .qtip-close{ + position: absolute; + right: -9px; top: -9px; + + cursor: pointer; + outline: medium none; + + border-width: 1px; + border-style: solid; + border-color: transparent; + } + + .qtip-titlebar .qtip-close{ + right: 4px; top: 50%; + margin-top: -9px; + } + + * html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */ + + .qtip-titlebar .ui-icon, + .qtip-icon .ui-icon{ + display: block; + text-indent: -1000em; + direction: ltr; + vertical-align: middle; + } + + .qtip-icon, .qtip-icon .ui-icon{ + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + text-decoration: none; + } + + .qtip-icon .ui-icon{ + width: 18px; + height: 14px; + + text-align: center; + text-indent: 0; + font: normal bold 10px/13px Tahoma,sans-serif; + + color: inherit; + background: transparent none no-repeat -100em -100em; + } + + +/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */ +.qtip-focus{} + +/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */ +.qtip-hover{} + +/* Default tooltip style */ +.qtip-default{ + border-width: 1px; + border-style: solid; + border-color: #F1D031; + + background-color: #FFFFA3; + color: #555; +} + + .qtip-default .qtip-titlebar{ + background-color: #FFEF93; + } + + .qtip-default .qtip-icon{ + border-color: #CCC; + background: #F1F1F1; + color: #777; + } + + .qtip-default .qtip-titlebar .qtip-close{ + border-color: #AAA; + color: #111; + } + + +/*! Light tooltip style */ +.qtip-light{ + background-color: white; + border-color: #E2E2E2; + color: #454545; +} + + .qtip-light .qtip-titlebar{ + background-color: #f1f1f1; + } + + +/*! Dark tooltip style */ +.qtip-dark{ + background-color: #505050; + border-color: #303030; + color: #f3f3f3; +} + + .qtip-dark .qtip-titlebar{ + background-color: #404040; + } + + .qtip-dark .qtip-icon{ + border-color: #444; + } + + .qtip-dark .qtip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/*! Cream tooltip style */ +.qtip-cream{ + background-color: #FBF7AA; + border-color: #F9E98E; + color: #A27D35; +} + + .qtip-cream .qtip-titlebar{ + background-color: #F0DE7D; + } + + .qtip-cream .qtip-close .qtip-icon{ + background-position: -82px 0; + } + + +/*! Red tooltip style */ +.qtip-red{ + background-color: #F78B83; + border-color: #D95252; + color: #912323; +} + + .qtip-red .qtip-titlebar{ + background-color: #F06D65; + } + + .qtip-red .qtip-close .qtip-icon{ + background-position: -102px 0; + } + + .qtip-red .qtip-icon{ + border-color: #D95252; + } + + .qtip-red .qtip-titlebar .ui-state-hover{ + border-color: #D95252; + } + + +/*! Green tooltip style */ +.qtip-green{ + background-color: #CAED9E; + border-color: #90D93F; + color: #3F6219; +} + + .qtip-green .qtip-titlebar{ + background-color: #B0DE78; + } + + .qtip-green .qtip-close .qtip-icon{ + background-position: -42px 0; + } + + +/*! Blue tooltip style */ +.qtip-blue{ + background-color: #E5F6FE; + border-color: #ADD9ED; + color: #5E99BD; +} + + .qtip-blue .qtip-titlebar{ + background-color: #D0E9F5; + } + + .qtip-blue .qtip-close .qtip-icon{ + background-position: -2px 0; + } + + +/* Add shadows to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ +.qtip-shadow{ + -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); + box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); +} + +/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ +.qtip-rounded, +.qtip-tipsy, +.qtip-bootstrap{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +.qtip-rounded .qtip-titlebar{ + -moz-border-radius: 5px 5px 0 0; + -webkit-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} + +/* Youtube tooltip style */ +.qtip-youtube{ + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + + -webkit-box-shadow: 0 0 3px #333; + -moz-box-shadow: 0 0 3px #333; + box-shadow: 0 0 3px #333; + + color: white; + border-width: 0; + + background: #4A4A4A; + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black)); + background-image: -webkit-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -moz-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -ms-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%); +} + + .qtip-youtube .qtip-titlebar{ + background-color: #4A4A4A; + background-color: rgba(0,0,0,0); + } + + .qtip-youtube .qtip-content{ + padding: .75em; + font: 12px arial,sans-serif; + + filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000); + -ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"; + } + + .qtip-youtube .qtip-icon{ + border-color: #222; + } + + .qtip-youtube .qtip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/* jQuery TOOLS Tooltip style */ +.qtip-jtools{ + background: #232323; + background: rgba(0, 0, 0, 0.7); + background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323)); + background-image: -moz-linear-gradient(top, #717171, #232323); + background-image: -webkit-linear-gradient(top, #717171, #232323); + background-image: -ms-linear-gradient(top, #717171, #232323); + background-image: -o-linear-gradient(top, #717171, #232323); + + border: 2px solid #ddd; + border: 2px solid rgba(241,241,241,1); + + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + + -webkit-box-shadow: 0 0 12px #333; + -moz-box-shadow: 0 0 12px #333; + box-shadow: 0 0 12px #333; +} + + /* IE Specific */ + .qtip-jtools .qtip-titlebar{ + background-color: transparent; + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"; + } + .qtip-jtools .qtip-content{ + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"; + } + + .qtip-jtools .qtip-titlebar, + .qtip-jtools .qtip-content{ + background: transparent; + color: white; + border: 0 dashed transparent; + } + + .qtip-jtools .qtip-icon{ + border-color: #555; + } + + .qtip-jtools .qtip-titlebar .ui-state-hover{ + border-color: #333; + } + + +/* Cluetip style */ +.qtip-cluetip{ + -webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + -moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + + background-color: #D9D9C2; + color: #111; + border: 0 dashed transparent; +} + + .qtip-cluetip .qtip-titlebar{ + background-color: #87876A; + color: white; + border: 0 dashed transparent; + } + + .qtip-cluetip .qtip-icon{ + border-color: #808064; + } + + .qtip-cluetip .qtip-titlebar .ui-state-hover{ + border-color: #696952; + color: #696952; + } + + +/* Tipsy style */ +.qtip-tipsy{ + background: black; + background: rgba(0, 0, 0, .87); + + color: white; + border: 0 solid transparent; + + font-size: 11px; + font-family: 'Lucida Grande', sans-serif; + font-weight: bold; + line-height: 16px; + text-shadow: 0 1px black; +} + + .qtip-tipsy .qtip-titlebar{ + padding: 6px 35px 0 10; + background-color: transparent; + } + + .qtip-tipsy .qtip-content{ + padding: 6px 10; + } + + .qtip-tipsy .qtip-icon{ + border-color: #222; + text-shadow: none; + } + + .qtip-tipsy .qtip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/* Tipped style */ +.qtip-tipped{ + border: 3px solid #959FA9; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + + background-color: #F9F9F9; + color: #454545; + + font-weight: normal; + font-family: serif; +} + + .qtip-tipped .qtip-titlebar{ + border-bottom-width: 0; + + color: white; + background: #3A79B8; + background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D)); + background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D); + background-image: -moz-linear-gradient(top, #3A79B8, #2E629D); + background-image: -ms-linear-gradient(top, #3A79B8, #2E629D); + background-image: -o-linear-gradient(top, #3A79B8, #2E629D); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"; + } + + .qtip-tipped .qtip-icon{ + border: 2px solid #285589; + background: #285589; + } + + .qtip-tipped .qtip-icon .ui-icon{ + background-color: #FBFBFB; + color: #555; + } + + +/** + * Twitter Bootstrap style. + * + * Tested with IE 8, IE 9, Chrome 18, Firefox 9, Opera 11. + * Does not work with IE 7. + */ +.qtip-bootstrap{ + /** Taken from Bootstrap body */ + font-size: 14px; + line-height: 20px; + color: #333333; + + /** Taken from Bootstrap .popover */ + padding: 1px; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + + .qtip-bootstrap .qtip-titlebar{ + /** Taken from Bootstrap .popover-title */ + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; + } + + .qtip-bootstrap .qtip-titlebar .qtip-close{ + /** + * Overrides qTip2: + * .qtip-titlebar .qtip-close{ + * [...] + * right: 4px; + * top: 50%; + * [...] + * border-style: solid; + * } + */ + right: 11px; + top: 45%; + border-style: none; + } + + .qtip-bootstrap .qtip-content{ + /** Taken from Bootstrap .popover-content */ + padding: 9px 14px; + } + + .qtip-bootstrap .qtip-icon{ + /** + * Overrides qTip2: + * .qtip-default .qtip-icon { + * border-color: #CCC; + * background: #F1F1F1; + * color: #777; + * } + */ + background: transparent; + } + + .qtip-bootstrap .qtip-icon .ui-icon{ + /** + * Overrides qTip2: + * .qtip-icon .ui-icon{ + * width: 18px; + * height: 14px; + * } + */ + width: auto; + height: auto; + + /* Taken from Bootstrap .close */ + float: right; + font-size: 20px; + font-weight: bold; + line-height: 18px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); + } + + .qtip-bootstrap .qtip-icon .ui-icon:hover{ + /* Taken from Bootstrap .close:hover */ + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); + } + + +/* IE9 fix - removes all filters */ +.qtip:not(.ie9haxors) div.qtip-content, +.qtip:not(.ie9haxors) div.qtip-titlebar{ + filter: none; + -ms-filter: none; +} + + +/* Tips plugin */ +.qtip .qtip-tip{ + margin: 0 auto; + overflow: hidden; + z-index: 10; +} + + .qtip .qtip-tip, + .qtip .qtip-tip .qtip-vml{ + position: absolute; + + color: #123456; + background: transparent; + border: 0 dashed transparent; + } + + .qtip .qtip-tip canvas{ top: 0; left: 0; } + + .qtip .qtip-tip .qtip-vml{ + behavior: url(#default#VML); + display: inline-block; + visibility: visible; + } +/* Modal plugin */ +#qtip-overlay{ + position: fixed; + left: -10000em; + top: -10000em; +} + + /* Applied to modals with show.modal.blur set to true */ + #qtip-overlay.blurs{ cursor: pointer; } + + /* Change opacity of overlay here */ + #qtip-overlay div{ + position: absolute; + left: 0; top: 0; + width: 100%; height: 100%; + + background-color: black; + + opacity: 0.7; + filter:alpha(opacity=70); + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + } + + +/* IE6 Modal plugin fix */ +.qtipmodal-ie6fix{ + position: absolute !important; +} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery.qtip.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery.qtip.js new file mode 100644 index 00000000..204790c9 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery.qtip.js @@ -0,0 +1,3413 @@ +/*! + * qTip2 - Pretty powerful tooltips - v2.0.1-4-g + * http://qtip2.com + * + * Copyright (c) 2013 Craig Michael Thompson + * Released under the MIT, GPL licenses + * http://jquery.org/license + * + * Date: Fri Jan 4 2013 04:05 GMT+0000 + * Plugins: svg ajax tips modal viewport imagemap ie6 + * Styles: basic css3 + */ + +/*jslint browser: true, onevar: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: true */ +/*global window: false, jQuery: false, console: false, define: false */ + +/* Cache window, document, undefined */ +(function( window, document, undefined ) { + +// Uses AMD or browser globals to create a jQuery plugin. +(function( factory ) { + "use strict"; + if(typeof define === 'function' && define.amd) { + define(['jquery'], factory); + } + else if(jQuery && !jQuery.fn.qtip) { + factory(jQuery); + } +} +(function($) { + /* This currently causes issues with Safari 6, so for it's disabled */ + //"use strict"; // (Dis)able ECMAScript "strict" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ + + // Munge the primitives - Paul Irish tip + var TRUE = true, + FALSE = false, + NULL = null, + + // Side names and other stuff + X = 'x', Y = 'y', + WIDTH = 'width', + HEIGHT = 'height', + TOP = 'top', + LEFT = 'left', + BOTTOM = 'bottom', + RIGHT = 'right', + CENTER = 'center', + FLIP = 'flip', + FLIPINVERT = 'flipinvert', + SHIFT = 'shift', + + // Shortcut vars + QTIP, PLUGINS, MOUSE, + NAMESPACE = 'qtip', + usedIDs = {}, + widget = ['ui-widget', 'ui-tooltip'], + selector = 'div.qtip.'+NAMESPACE, + defaultClass = NAMESPACE + '-default', + focusClass = NAMESPACE + '-focus', + hoverClass = NAMESPACE + '-hover', + replaceSuffix = '_replacedByqTip', + oldtitle = 'oldtitle', + trackingBound; + + // Store mouse coordinates + function storeMouse(event) + { + MOUSE = { + pageX: event.pageX, + pageY: event.pageY, + type: 'mousemove', + scrollX: window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft, + scrollY: window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop + }; + } +// Option object sanitizer +function sanitizeOptions(opts) +{ + var invalid = function(a) { return a === NULL || 'object' !== typeof a; }, + invalidContent = function(c) { return !$.isFunction(c) && ((!c && !c.attr) || c.length < 1 || ('object' === typeof c && !c.jquery && !c.then)); }; + + if(!opts || 'object' !== typeof opts) { return FALSE; } + + if(invalid(opts.metadata)) { + opts.metadata = { type: opts.metadata }; + } + + if('content' in opts) { + if(invalid(opts.content) || opts.content.jquery) { + opts.content = { text: opts.content }; + } + + if(invalidContent(opts.content.text || FALSE)) { + opts.content.text = FALSE; + } + + if('title' in opts.content) { + if(invalid(opts.content.title)) { + opts.content.title = { text: opts.content.title }; + } + + if(invalidContent(opts.content.title.text || FALSE)) { + opts.content.title.text = FALSE; + } + } + } + + if('position' in opts && invalid(opts.position)) { + opts.position = { my: opts.position, at: opts.position }; + } + + if('show' in opts && invalid(opts.show)) { + opts.show = opts.show.jquery ? { target: opts.show } : { event: opts.show }; + } + + if('hide' in opts && invalid(opts.hide)) { + opts.hide = opts.hide.jquery ? { target: opts.hide } : { event: opts.hide }; + } + + if('style' in opts && invalid(opts.style)) { + opts.style = { classes: opts.style }; + } + + // Sanitize plugin options + $.each(PLUGINS, function() { + if(this.sanitize) { this.sanitize(opts); } + }); + + return opts; +} + +/* +* Core plugin implementation +*/ +function QTip(target, options, id, attr) +{ + // Declare this reference + var self = this, + docBody = document.body, + tooltipID = NAMESPACE + '-' + id, + isPositioning = 0, + isDrawing = 0, + tooltip = $(), + namespace = '.qtip-' + id, + disabledClass = 'qtip-disabled', + elements, cache; + + // Setup class attributes + self.id = id; + self.rendered = FALSE; + self.destroyed = FALSE; + self.elements = elements = { target: target }; + self.timers = { img: {} }; + self.options = options; + self.checks = {}; + self.plugins = {}; + self.cache = cache = { + event: {}, + target: $(), + disabled: FALSE, + attr: attr, + onTarget: FALSE, + lastClass: '' + }; + + function convertNotation(notation) + { + var i = 0, obj, option = options, + + // Split notation into array + levels = notation.split('.'); + + // Loop through + while( option = option[ levels[i++] ] ) { + if(i < levels.length) { obj = option; } + } + + return [obj || options, levels.pop()]; + } + + function createWidgetClass(cls) + { + return widget.concat('').join(cls ? '-'+cls+' ' : ' '); + } + + function setWidget() + { + var on = options.style.widget, + disabled = tooltip.hasClass(disabledClass); + + tooltip.removeClass(disabledClass); + disabledClass = on ? 'ui-state-disabled' : 'qtip-disabled'; + tooltip.toggleClass(disabledClass, disabled); + + tooltip.toggleClass('ui-helper-reset '+createWidgetClass(), on).toggleClass(defaultClass, options.style.def && !on); + + if(elements.content) { + elements.content.toggleClass( createWidgetClass('content'), on); + } + if(elements.titlebar) { + elements.titlebar.toggleClass( createWidgetClass('header'), on); + } + if(elements.button) { + elements.button.toggleClass(NAMESPACE+'-icon', !on); + } + } + + function removeTitle(reposition) + { + if(elements.title) { + elements.titlebar.remove(); + elements.titlebar = elements.title = elements.button = NULL; + + // Reposition if enabled + if(reposition !== FALSE) { self.reposition(); } + } + } + + function createButton() + { + var button = options.content.title.button, + isString = typeof button === 'string', + close = isString ? button : 'Close tooltip'; + + if(elements.button) { elements.button.remove(); } + + // Use custom button if one was supplied by user, else use default + if(button.jquery) { + elements.button = button; + } + else { + elements.button = $('', { + 'class': 'qtip-close ' + (options.style.widget ? '' : NAMESPACE+'-icon'), + 'title': close, + 'aria-label': close + }) + .prepend( + $('', { + 'class': 'ui-icon ui-icon-close', + 'html': '×' + }) + ); + } + + // Create button and setup attributes + elements.button.appendTo(elements.titlebar || tooltip) + .attr('role', 'button') + .click(function(event) { + if(!tooltip.hasClass(disabledClass)) { self.hide(event); } + return FALSE; + }); + } + + function createTitle() + { + var id = tooltipID+'-title'; + + // Destroy previous title element, if present + if(elements.titlebar) { removeTitle(); } + + // Create title bar and title elements + elements.titlebar = $('
                                                ', { + 'class': NAMESPACE + '-titlebar ' + (options.style.widget ? createWidgetClass('header') : '') + }) + .append( + elements.title = $('
                                                ', { + 'id': id, + 'class': NAMESPACE + '-title', + 'aria-atomic': TRUE + }) + ) + .insertBefore(elements.content) + + // Button-specific events + .delegate('.qtip-close', 'mousedown keydown mouseup keyup mouseout', function(event) { + $(this).toggleClass('ui-state-active ui-state-focus', event.type.substr(-4) === 'down'); + }) + .delegate('.qtip-close', 'mouseover mouseout', function(event){ + $(this).toggleClass('ui-state-hover', event.type === 'mouseover'); + }); + + // Create button if enabled + if(options.content.title.button) { createButton(); } + } + + function updateButton(button) + { + var elem = elements.button; + + // Make sure tooltip is rendered and if not, return + if(!self.rendered) { return FALSE; } + + if(!button) { + elem.remove(); + } + else { + createButton(); + } + } + + function updateTitle(content, reposition) + { + var elem = elements.title; + + // Make sure tooltip is rendered and if not, return + if(!self.rendered || !content) { return FALSE; } + + // Use function to parse content + if($.isFunction(content)) { + content = content.call(target, cache.event, self); + } + + // Remove title if callback returns false or null/undefined (but not '') + if(content === FALSE || (!content && content !== '')) { return removeTitle(FALSE); } + + // Append new content if its a DOM array and show it if hidden + else if(content.jquery && content.length > 0) { + elem.empty().append(content.css({ display: 'block' })); + } + + // Content is a regular string, insert the new content + else { elem.html(content); } + + // Reposition if rnedered + if(reposition !== FALSE && self.rendered && tooltip[0].offsetWidth > 0) { + self.reposition(cache.event); + } + } + + function deferredContent(deferred) + { + if(deferred && $.isFunction(deferred.done)) { + deferred.done(function(c) { + updateContent(c, null, FALSE); + }); + } + } + + function updateContent(content, reposition, checkDeferred) + { + var elem = elements.content; + + // Make sure tooltip is rendered and content is defined. If not return + if(!self.rendered || !content) { return FALSE; } + + // Use function to parse content + if($.isFunction(content)) { + content = content.call(target, cache.event, self) || ''; + } + + // Handle deferred content + if(checkDeferred !== FALSE) { + deferredContent(options.content.deferred); + } + + // Append new content if its a DOM array and show it if hidden + if(content.jquery && content.length > 0) { + elem.empty().append(content.css({ display: 'block' })); + } + + // Content is a regular string, insert the new content + else { elem.html(content); } + + // Image detection + function detectImages(next) { + var images, srcs = {}; + + function imageLoad(image) { + // Clear src from object and any timers and events associated with the image + if(image) { + delete srcs[image.src]; + clearTimeout(self.timers.img[image.src]); + $(image).unbind(namespace); + } + + // If queue is empty after image removal, update tooltip and continue the queue + if($.isEmptyObject(srcs)) { + if(reposition !== FALSE) { + self.reposition(cache.event); + } + + next(); + } + } + + // Find all content images without dimensions, and if no images were found, continue + if((images = elem.find('img[src]:not([height]):not([width])')).length === 0) { return imageLoad(); } + + // Apply timer to each image to poll for dimensions + images.each(function(i, elem) { + // Skip if the src is already present + if(srcs[elem.src] !== undefined) { return; } + + // Keep track of how many times we poll for image dimensions. + // If it doesn't return in a reasonable amount of time, it's better + // to display the tooltip, rather than hold up the queue. + var iterations = 0, maxIterations = 3; + + (function timer(){ + // When the dimensions are found, remove the image from the queue + if(elem.height || elem.width || (iterations > maxIterations)) { return imageLoad(elem); } + + // Increase iterations and restart timer + iterations += 1; + self.timers.img[elem.src] = setTimeout(timer, 700); + }()); + + // Also apply regular load/error event handlers + $(elem).bind('error'+namespace+' load'+namespace, function(){ imageLoad(this); }); + + // Store the src and element in our object + srcs[elem.src] = elem; + }); + } + + /* + * If we're still rendering... insert into 'fx' queue our image dimension + * checker which will halt the showing of the tooltip until image dimensions + * can be detected properly. + */ + if(self.rendered < 0) { tooltip.queue('fx', detectImages); } + + // We're fully rendered, so reset isDrawing flag and proceed without queue delay + else { isDrawing = 0; detectImages($.noop); } + + return self; + } + + function assignEvents() + { + var posOptions = options.position, + targets = { + show: options.show.target, + hide: options.hide.target, + viewport: $(posOptions.viewport), + document: $(document), + body: $(document.body), + window: $(window) + }, + events = { + show: $.trim('' + options.show.event).split(' '), + hide: $.trim('' + options.hide.event).split(' ') + }, + IE6 = $.browser.msie && parseInt($.browser.version, 10) === 6; + + // Define show event method + function showMethod(event) + { + if(tooltip.hasClass(disabledClass)) { return FALSE; } + + // Clear hide timers + clearTimeout(self.timers.show); + clearTimeout(self.timers.hide); + + // Start show timer + var callback = function(){ self.toggle(TRUE, event); }; + if(options.show.delay > 0) { + self.timers.show = setTimeout(callback, options.show.delay); + } + else{ callback(); } + } + + // Define hide method + function hideMethod(event) + { + if(tooltip.hasClass(disabledClass) || isPositioning || isDrawing) { return FALSE; } + + // Check if new target was actually the tooltip element + var relatedTarget = $(event.relatedTarget || event.target), + ontoTooltip = relatedTarget.closest(selector)[0] === tooltip[0], + ontoTarget = relatedTarget[0] === targets.show[0]; + + // Clear timers and stop animation queue + clearTimeout(self.timers.show); + clearTimeout(self.timers.hide); + + // Prevent hiding if tooltip is fixed and event target is the tooltip. Or if mouse positioning is enabled and cursor momentarily overlaps + if((posOptions.target === 'mouse' && ontoTooltip) || (options.hide.fixed && ((/mouse(out|leave|move)/).test(event.type) && (ontoTooltip || ontoTarget)))) { + try { event.preventDefault(); event.stopImmediatePropagation(); } catch(e) {} return; + } + + // If tooltip has displayed, start hide timer + if(options.hide.delay > 0) { + self.timers.hide = setTimeout(function(){ self.hide(event); }, options.hide.delay); + } + else{ self.hide(event); } + } + + // Define inactive method + function inactiveMethod(event) + { + if(tooltip.hasClass(disabledClass)) { return FALSE; } + + // Clear timer + clearTimeout(self.timers.inactive); + self.timers.inactive = setTimeout(function(){ self.hide(event); }, options.hide.inactive); + } + + function repositionMethod(event) { + if(self.rendered && tooltip[0].offsetWidth > 0) { self.reposition(event); } + } + + // On mouseenter/mouseleave... + tooltip.bind('mouseenter'+namespace+' mouseleave'+namespace, function(event) { + var state = event.type === 'mouseenter'; + + // Focus the tooltip on mouseenter (z-index stacking) + if(state) { self.focus(event); } + + // Add hover class + tooltip.toggleClass(hoverClass, state); + }); + + // If using mouseout/mouseleave as a hide event... + if(/mouse(out|leave)/i.test(options.hide.event)) { + // Hide tooltips when leaving current window/frame (but not select/option elements) + if(options.hide.leave === 'window') { + targets.window.bind('mouseout'+namespace+' blur'+namespace, function(event) { + if(!/select|option/.test(event.target.nodeName) && !event.relatedTarget) { self.hide(event); } + }); + } + } + + // Enable hide.fixed + if(options.hide.fixed) { + // Add tooltip as a hide target + targets.hide = targets.hide.add(tooltip); + + // Clear hide timer on tooltip hover to prevent it from closing + tooltip.bind('mouseover'+namespace, function() { + if(!tooltip.hasClass(disabledClass)) { clearTimeout(self.timers.hide); } + }); + } + + /* + * Make sure hoverIntent functions properly by using mouseleave to clear show timer if + * mouseenter/mouseout is used for show.event, even if it isn't in the users options. + */ + else if(/mouse(over|enter)/i.test(options.show.event)) { + targets.hide.bind('mouseleave'+namespace, function(event) { + clearTimeout(self.timers.show); + }); + } + + // Hide tooltip on document mousedown if unfocus events are enabled + if(('' + options.hide.event).indexOf('unfocus') > -1) { + posOptions.container.closest('html').bind('mousedown'+namespace+' touchstart'+namespace, function(event) { + var elem = $(event.target), + enabled = self.rendered && !tooltip.hasClass(disabledClass) && tooltip[0].offsetWidth > 0, + isAncestor = elem.parents(selector).filter(tooltip[0]).length > 0; + + if(elem[0] !== target[0] && elem[0] !== tooltip[0] && !isAncestor && + !target.has(elem[0]).length && !elem.attr('disabled') + ) { + self.hide(event); + } + }); + } + + // Check if the tooltip hides when inactive + if('number' === typeof options.hide.inactive) { + // Bind inactive method to target as a custom event + targets.show.bind('qtip-'+id+'-inactive', inactiveMethod); + + // Define events which reset the 'inactive' event handler + $.each(QTIP.inactiveEvents, function(index, type){ + targets.hide.add(elements.tooltip).bind(type+namespace+'-inactive', inactiveMethod); + }); + } + + // Apply hide events + $.each(events.hide, function(index, type) { + var showIndex = $.inArray(type, events.show), + targetHide = $(targets.hide); + + // Both events and targets are identical, apply events using a toggle + if((showIndex > -1 && targetHide.add(targets.show).length === targetHide.length) || type === 'unfocus') + { + targets.show.bind(type+namespace, function(event) { + if(tooltip[0].offsetWidth > 0) { hideMethod(event); } + else { showMethod(event); } + }); + + // Don't bind the event again + delete events.show[ showIndex ]; + } + + // Events are not identical, bind normally + else { targets.hide.bind(type+namespace, hideMethod); } + }); + + // Apply show events + $.each(events.show, function(index, type) { + targets.show.bind(type+namespace, showMethod); + }); + + // Check if the tooltip hides when mouse is moved a certain distance + if('number' === typeof options.hide.distance) { + // Bind mousemove to target to detect distance difference + targets.show.add(tooltip).bind('mousemove'+namespace, function(event) { + var origin = cache.origin || {}, + limit = options.hide.distance, + abs = Math.abs; + + // Check if the movement has gone beyond the limit, and hide it if so + if(abs(event.pageX - origin.pageX) >= limit || abs(event.pageY - origin.pageY) >= limit) { + self.hide(event); + } + }); + } + + // Mouse positioning events + if(posOptions.target === 'mouse') { + // Cache mousemove coords on show targets + targets.show.bind('mousemove'+namespace, storeMouse); + + // If mouse adjustment is on... + if(posOptions.adjust.mouse) { + // Apply a mouseleave event so we don't get problems with overlapping + if(options.hide.event) { + // Hide when we leave the tooltip and not onto the show target + tooltip.bind('mouseleave'+namespace, function(event) { + if((event.relatedTarget || event.target) !== targets.show[0]) { self.hide(event); } + }); + + // Track if we're on the target or not + elements.target.bind('mouseenter'+namespace+' mouseleave'+namespace, function(event) { + cache.onTarget = event.type === 'mouseenter'; + }); + } + + // Update tooltip position on mousemove + targets.document.bind('mousemove'+namespace, function(event) { + // Update the tooltip position only if the tooltip is visible and adjustment is enabled + if(self.rendered && cache.onTarget && !tooltip.hasClass(disabledClass) && tooltip[0].offsetWidth > 0) { + self.reposition(event || MOUSE); + } + }); + } + } + + // Adjust positions of the tooltip on window resize if enabled + if(posOptions.adjust.resize || targets.viewport.length) { + ($.event.special.resize ? targets.viewport : targets.window).bind('resize'+namespace, repositionMethod); + } + + // Adjust tooltip position on scroll of the window or viewport element if present + targets.window.add(posOptions.container).bind('scroll'+namespace, repositionMethod); + } + + function unassignEvents() + { + var targets = [ + options.show.target[0], + options.hide.target[0], + self.rendered && elements.tooltip[0], + options.position.container[0], + options.position.viewport[0], + options.position.container.closest('html')[0], // unfocus + window, + document + ]; + + // Check if tooltip is rendered + if(self.rendered) { + $([]).pushStack( $.grep(targets, function(i){ return typeof i === 'object'; }) ).unbind(namespace); + } + + // Tooltip isn't yet rendered, remove render event + else { options.show.target.unbind(namespace+'-create'); } + } + + // Setup builtin .set() option checks + self.checks.builtin = { + // Core checks + '^id$': function(obj, o, v) { + var id = v === TRUE ? QTIP.nextid : v, + tooltipID = NAMESPACE + '-' + id; + + if(id !== FALSE && id.length > 0 && !$('#'+tooltipID).length) { + tooltip[0].id = tooltipID; + elements.content[0].id = tooltipID + '-content'; + elements.title[0].id = tooltipID + '-title'; + } + }, + + // Content checks + '^content.text$': function(obj, o, v) { updateContent(options.content.text); }, + '^content.deferred$': function(obj, o, v) { deferredContent(options.content.deferred); }, + '^content.title.text$': function(obj, o, v) { + // Remove title if content is null + if(!v) { return removeTitle(); } + + // If title isn't already created, create it now and update + if(!elements.title && v) { createTitle(); } + updateTitle(v); + }, + '^content.title.button$': function(obj, o, v){ updateButton(v); }, + + // Position checks + '^position.(my|at)$': function(obj, o, v){ + // Parse new corner value into Corner objecct + if('string' === typeof v) { + obj[o] = new PLUGINS.Corner(v); + } + }, + '^position.container$': function(obj, o, v){ + if(self.rendered) { tooltip.appendTo(v); } + }, + + // Show checks + '^show.ready$': function() { + if(!self.rendered) { self.render(1); } + else { self.toggle(TRUE); } + }, + + // Style checks + '^style.classes$': function(obj, o, v) { + tooltip.attr('class', NAMESPACE + ' qtip ' + v); + }, + '^style.width|height': function(obj, o, v) { + tooltip.css(o, v); + }, + '^style.widget|content.title': setWidget, + + // Events check + '^events.(render|show|move|hide|focus|blur)$': function(obj, o, v) { + tooltip[($.isFunction(v) ? '' : 'un') + 'bind']('tooltip'+o, v); + }, + + // Properties which require event reassignment + '^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)': function() { + var posOptions = options.position; + + // Set tracking flag + tooltip.attr('tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse); + + // Reassign events + unassignEvents(); assignEvents(); + } + }; + + $.extend(self, { + /* + * Psuedo-private API methods + */ + _triggerEvent: function(type, args, event) + { + var callback = $.Event('tooltip'+type); + callback.originalEvent = (event ? $.extend({}, event) : NULL) || cache.event || NULL; + tooltip.trigger(callback, [self].concat(args || [])); + + return !callback.isDefaultPrevented(); + }, + + /* + * Public API methods + */ + render: function(show) + { + if(self.rendered) { return self; } // If tooltip has already been rendered, exit + + var text = options.content.text, + title = options.content.title, + posOptions = options.position; + + // Add ARIA attributes to target + $.attr(target[0], 'aria-describedby', tooltipID); + + // Create tooltip element + tooltip = elements.tooltip = $('
                                                ', { + 'id': tooltipID, + 'class': [ NAMESPACE, defaultClass, options.style.classes, NAMESPACE + '-pos-' + options.position.my.abbrev() ].join(' '), + 'width': options.style.width || '', + 'height': options.style.height || '', + 'tracking': posOptions.target === 'mouse' && posOptions.adjust.mouse, + + /* ARIA specific attributes */ + 'role': 'alert', + 'aria-live': 'polite', + 'aria-atomic': FALSE, + 'aria-describedby': tooltipID + '-content', + 'aria-hidden': TRUE + }) + .toggleClass(disabledClass, cache.disabled) + .data('qtip', self) + .appendTo(options.position.container) + .append( + // Create content element + elements.content = $('
                                                ', { + 'class': NAMESPACE + '-content', + 'id': tooltipID + '-content', + 'aria-atomic': TRUE + }) + ); + + // Set rendered flag and prevent redundant reposition calls for now + self.rendered = -1; + isPositioning = 1; + + // Create title... + if(title.text) { + createTitle(); + + // Update title only if its not a callback (called in toggle if so) + if(!$.isFunction(title.text)) { updateTitle(title.text, FALSE); } + } + + // Create button + else if(title.button) { createButton(); } + + // Set proper rendered flag and update content if not a callback function (called in toggle) + if(!$.isFunction(text) || text.then) { updateContent(text, FALSE); } + self.rendered = TRUE; + + // Setup widget classes + setWidget(); + + // Assign passed event callbacks (before plugins!) + $.each(options.events, function(name, callback) { + if($.isFunction(callback)) { + tooltip.bind(name === 'toggle' ? 'tooltipshow tooltiphide' : 'tooltip'+name, callback); + } + }); + + // Initialize 'render' plugins + $.each(PLUGINS, function() { + if(this.initialize === 'render') { this(self); } + }); + + // Assign events + assignEvents(); + + /* Queue this part of the render process in our fx queue so we can + * load images before the tooltip renders fully. + * + * See: updateContent method + */ + tooltip.queue('fx', function(next) { + // tooltiprender event + self._triggerEvent('render'); + + // Reset flags + isPositioning = 0; + + // Show tooltip if needed + if(options.show.ready || show) { + self.toggle(TRUE, cache.event, FALSE); + } + + next(); // Move on to next method in queue + }); + + return self; + }, + + get: function(notation) + { + var result, o; + + switch(notation.toLowerCase()) + { + case 'dimensions': + result = { + height: tooltip.outerHeight(FALSE), + width: tooltip.outerWidth(FALSE) + }; + break; + + case 'offset': + result = PLUGINS.offset(tooltip, options.position.container); + break; + + default: + o = convertNotation(notation.toLowerCase()); + result = o[0][ o[1] ]; + result = result.precedance ? result.string() : result; + break; + } + + return result; + }, + + set: function(option, value) + { + var rmove = /^position\.(my|at|adjust|target|container)|style|content|show\.ready/i, + rdraw = /^content\.(title|attr)|style/i, + reposition = FALSE, + checks = self.checks, + name; + + function callback(notation, args) { + var category, rule, match; + + for(category in checks) { + for(rule in checks[category]) { + if(match = (new RegExp(rule, 'i')).exec(notation)) { + args.push(match); + checks[category][rule].apply(self, args); + } + } + } + } + + // Convert singular option/value pair into object form + if('string' === typeof option) { + name = option; option = {}; option[name] = value; + } + else { option = $.extend(TRUE, {}, option); } + + // Set all of the defined options to their new values + $.each(option, function(notation, value) { + var obj = convertNotation( notation.toLowerCase() ), previous; + + // Set new obj value + previous = obj[0][ obj[1] ]; + obj[0][ obj[1] ] = 'object' === typeof value && value.nodeType ? $(value) : value; + + // Set the new params for the callback + option[notation] = [obj[0], obj[1], value, previous]; + + // Also check if we need to reposition + reposition = rmove.test(notation) || reposition; + }); + + // Re-sanitize options + sanitizeOptions(options); + + /* + * Execute any valid callbacks for the set options + * Also set isPositioning/isDrawing so we don't get loads of redundant repositioning calls. + */ + isPositioning = 1; $.each(option, callback); isPositioning = 0; + + // Update position if needed + if(self.rendered && tooltip[0].offsetWidth > 0 && reposition) { + self.reposition( options.position.target === 'mouse' ? NULL : cache.event ); + } + + return self; + }, + + toggle: function(state, event) + { + // Try to prevent flickering when tooltip overlaps show element + if(event) { + if((/over|enter/).test(event.type) && (/out|leave/).test(cache.event.type) && + options.show.target.add(event.target).length === options.show.target.length && + tooltip.has(event.relatedTarget).length) { + return self; + } + + // Cache event + cache.event = $.extend({}, event); + } + + // Render the tooltip if showing and it isn't already + if(!self.rendered) { return state ? self.render(1) : self; } + + var type = state ? 'show' : 'hide', + opts = options[type], + otherOpts = options[ !state ? 'show' : 'hide' ], + posOptions = options.position, + contentOptions = options.content, + visible = tooltip[0].offsetWidth > 0, + animate = state || opts.target.length === 1, + sameTarget = !event || opts.target.length < 2 || cache.target[0] === event.target, + showEvent, delay; + + // Detect state if valid one isn't provided + if((typeof state).search('boolean|number')) { state = !visible; } + + // Return if element is already in correct state + if(!tooltip.is(':animated') && visible === state && sameTarget) { return self; } + + // tooltipshow/tooltiphide events + if(!self._triggerEvent(type, [90])) { return self; } + + // Set ARIA hidden status attribute + $.attr(tooltip[0], 'aria-hidden', !!!state); + + // Execute state specific properties + if(state) { + // Store show origin coordinates + cache.origin = $.extend({}, MOUSE); + + // Focus the tooltip + self.focus(event); + + // Update tooltip content & title if it's a dynamic function + if($.isFunction(contentOptions.text)) { updateContent(contentOptions.text, FALSE); } + if($.isFunction(contentOptions.title.text)) { updateTitle(contentOptions.title.text, FALSE); } + + // Cache mousemove events for positioning purposes (if not already tracking) + if(!trackingBound && posOptions.target === 'mouse' && posOptions.adjust.mouse) { + $(document).bind('mousemove.qtip', storeMouse); + trackingBound = TRUE; + } + + // Update the tooltip position + self.reposition(event, arguments[2]); + + // Hide other tooltips if tooltip is solo + if(!!opts.solo) { + (typeof opts.solo === 'string' ? $(opts.solo) : $(selector, opts.solo)) + .not(tooltip).not(opts.target).qtip('hide', $.Event('tooltipsolo')); + } + } + else { + // Clear show timer if we're hiding + clearTimeout(self.timers.show); + + // Remove cached origin on hide + delete cache.origin; + + // Remove mouse tracking event if not needed (all tracking qTips are hidden) + if(trackingBound && !$(selector+'[tracking="true"]:visible', opts.solo).not(tooltip).length) { + $(document).unbind('mousemove.qtip'); + trackingBound = FALSE; + } + + // Blur the tooltip + self.blur(event); + } + + // Define post-animation, state specific properties + function after() { + if(state) { + // Prevent antialias from disappearing in IE by removing filter + if($.browser.msie) { tooltip[0].style.removeAttribute('filter'); } + + // Remove overflow setting to prevent tip bugs + tooltip.css('overflow', ''); + + // Autofocus elements if enabled + if('string' === typeof opts.autofocus) { + $(opts.autofocus, tooltip).focus(); + } + + // If set, hide tooltip when inactive for delay period + opts.target.trigger('qtip-'+id+'-inactive'); + } + else { + // Reset CSS states + tooltip.css({ + display: '', + visibility: '', + opacity: '', + left: '', + top: '' + }); + } + + // tooltipvisible/tooltiphidden events + self._triggerEvent(state ? 'visible' : 'hidden'); + } + + // If no effect type is supplied, use a simple toggle + if(opts.effect === FALSE || animate === FALSE) { + tooltip[ type ](); + after.call(tooltip); + } + + // Use custom function if provided + else if($.isFunction(opts.effect)) { + tooltip.stop(1, 1); + opts.effect.call(tooltip, self); + tooltip.queue('fx', function(n){ after(); n(); }); + } + + // Use basic fade function by default + else { tooltip.fadeTo(90, state ? 1 : 0, after); } + + // If inactive hide method is set, active it + if(state) { opts.target.trigger('qtip-'+id+'-inactive'); } + + return self; + }, + + show: function(event){ return self.toggle(TRUE, event); }, + + hide: function(event){ return self.toggle(FALSE, event); }, + + focus: function(event) + { + if(!self.rendered) { return self; } + + var qtips = $(selector), + curIndex = parseInt(tooltip[0].style.zIndex, 10), + newIndex = QTIP.zindex + qtips.length, + cachedEvent = $.extend({}, event), + focusedElem; + + // Only update the z-index if it has changed and tooltip is not already focused + if(!tooltip.hasClass(focusClass)) + { + // tooltipfocus event + if(self._triggerEvent('focus', [newIndex], cachedEvent)) { + // Only update z-index's if they've changed + if(curIndex !== newIndex) { + // Reduce our z-index's and keep them properly ordered + qtips.each(function() { + if(this.style.zIndex > curIndex) { + this.style.zIndex = this.style.zIndex - 1; + } + }); + + // Fire blur event for focused tooltip + qtips.filter('.' + focusClass).qtip('blur', cachedEvent); + } + + // Set the new z-index + tooltip.addClass(focusClass)[0].style.zIndex = newIndex; + } + } + + return self; + }, + + blur: function(event) { + // Set focused status to FALSE + tooltip.removeClass(focusClass); + + // tooltipblur event + self._triggerEvent('blur', [tooltip.css('zIndex')], event); + + return self; + }, + + reposition: function(event, effect) + { + if(!self.rendered || isPositioning) { return self; } + + // Set positioning flag + isPositioning = 1; + + var target = options.position.target, + posOptions = options.position, + my = posOptions.my, + at = posOptions.at, + adjust = posOptions.adjust, + method = adjust.method.split(' '), + elemWidth = tooltip.outerWidth(FALSE), + elemHeight = tooltip.outerHeight(FALSE), + targetWidth = 0, + targetHeight = 0, + type = tooltip.css('position'), + viewport = posOptions.viewport, + position = { left: 0, top: 0 }, + container = posOptions.container, + visible = tooltip[0].offsetWidth > 0, + isScroll = event && event.type === 'scroll', + win = $(window), + adjusted, offset; + + // Check if absolute position was passed + if($.isArray(target) && target.length === 2) { + // Force left top and set position + at = { x: LEFT, y: TOP }; + position = { left: target[0], top: target[1] }; + } + + // Check if mouse was the target + else if(target === 'mouse' && ((event && event.pageX) || cache.event.pageX)) { + // Force left top to allow flipping + at = { x: LEFT, y: TOP }; + + // Use cached event if one isn't available for positioning + event = MOUSE && MOUSE.pageX && (adjust.mouse || !event || !event.pageX) ? { pageX: MOUSE.pageX, pageY: MOUSE.pageY } : + (event && (event.type === 'resize' || event.type === 'scroll') ? cache.event : + event && event.pageX && event.type === 'mousemove' ? event : + (!adjust.mouse || options.show.distance) && cache.origin && cache.origin.pageX ? cache.origin : + event) || event || cache.event || MOUSE || {}; + + // Use event coordinates for position + if(type !== 'static') { position = container.offset(); } + position = { left: event.pageX - position.left, top: event.pageY - position.top }; + + // Scroll events are a pain, some browsers + if(adjust.mouse && isScroll) { + position.left -= MOUSE.scrollX - win.scrollLeft(); + position.top -= MOUSE.scrollY - win.scrollTop(); + } + } + + // Target wasn't mouse or absolute... + else { + // Check if event targetting is being used + if(target === 'event' && event && event.target && event.type !== 'scroll' && event.type !== 'resize') { + cache.target = $(event.target); + } + else if(target !== 'event'){ + cache.target = $(target.jquery ? target : elements.target); + } + target = cache.target; + + // Parse the target into a jQuery object and make sure there's an element present + target = $(target).eq(0); + if(target.length === 0) { return self; } + + // Check if window or document is the target + else if(target[0] === document || target[0] === window) { + targetWidth = PLUGINS.iOS ? window.innerWidth : target.width(); + targetHeight = PLUGINS.iOS ? window.innerHeight : target.height(); + + if(target[0] === window) { + position = { + top: (viewport || target).scrollTop(), + left: (viewport || target).scrollLeft() + }; + } + } + + // Use Imagemap/SVG plugins if needed + else if(PLUGINS.imagemap && target.is('area')) { + adjusted = PLUGINS.imagemap(self, target, at, PLUGINS.viewport ? method : FALSE); + } + else if(PLUGINS.svg && target[0].ownerSVGElement) { + adjusted = PLUGINS.svg(self, target, at, PLUGINS.viewport ? method : FALSE); + } + + else { + targetWidth = target.outerWidth(FALSE); + targetHeight = target.outerHeight(FALSE); + + position = PLUGINS.offset(target, container); + } + + // Parse returned plugin values into proper variables + if(adjusted) { + targetWidth = adjusted.width; + targetHeight = adjusted.height; + offset = adjusted.offset; + position = adjusted.position; + } + + // Adjust for position.fixed tooltips (and also iOS scroll bug in v3.2-4.0 & v4.3-4.3.2) + if((PLUGINS.iOS > 3.1 && PLUGINS.iOS < 4.1) || + (PLUGINS.iOS >= 4.3 && PLUGINS.iOS < 4.33) || + (!PLUGINS.iOS && type === 'fixed') + ){ + position.left -= win.scrollLeft(); + position.top -= win.scrollTop(); + } + + // Adjust position relative to target + position.left += at.x === RIGHT ? targetWidth : at.x === CENTER ? targetWidth / 2 : 0; + position.top += at.y === BOTTOM ? targetHeight : at.y === CENTER ? targetHeight / 2 : 0; + } + + // Adjust position relative to tooltip + position.left += adjust.x + (my.x === RIGHT ? -elemWidth : my.x === CENTER ? -elemWidth / 2 : 0); + position.top += adjust.y + (my.y === BOTTOM ? -elemHeight : my.y === CENTER ? -elemHeight / 2 : 0); + + // Use viewport adjustment plugin if enabled + if(PLUGINS.viewport) { + position.adjusted = PLUGINS.viewport( + self, position, posOptions, targetWidth, targetHeight, elemWidth, elemHeight + ); + + // Apply offsets supplied by positioning plugin (if used) + if(offset && position.adjusted.left) { position.left += offset.left; } + if(offset && position.adjusted.top) { position.top += offset.top; } + } + + // Viewport adjustment is disabled, set values to zero + else { position.adjusted = { left: 0, top: 0 }; } + + // tooltipmove event + if(!self._triggerEvent('move', [position, viewport.elem || viewport], event)) { return self; } + delete position.adjusted; + + // If effect is disabled, target it mouse, no animation is defined or positioning gives NaN out, set CSS directly + if(effect === FALSE || !visible || isNaN(position.left) || isNaN(position.top) || target === 'mouse' || !$.isFunction(posOptions.effect)) { + tooltip.css(position); + } + + // Use custom function if provided + else if($.isFunction(posOptions.effect)) { + posOptions.effect.call(tooltip, self, $.extend({}, position)); + tooltip.queue(function(next) { + // Reset attributes to avoid cross-browser rendering bugs + $(this).css({ opacity: '', height: '' }); + if($.browser.msie) { this.style.removeAttribute('filter'); } + + next(); + }); + } + + // Set positioning flagwtf + isPositioning = 0; + + return self; + }, + + disable: function(state) + { + if('boolean' !== typeof state) { + state = !(tooltip.hasClass(disabledClass) || cache.disabled); + } + + if(self.rendered) { + tooltip.toggleClass(disabledClass, state); + $.attr(tooltip[0], 'aria-disabled', state); + } + else { + cache.disabled = !!state; + } + + return self; + }, + + enable: function() { return self.disable(FALSE); }, + + destroy: function() + { + var t = target[0], + title = $.attr(t, oldtitle), + elemAPI = target.data('qtip'); + + // Set flag the signify destroy is taking place to plugins + self.destroyed = TRUE; + + // Destroy tooltip and any associated plugins if rendered + if(self.rendered) { + tooltip.stop(1,0).remove(); + + $.each(self.plugins, function() { + if(this.destroy) { this.destroy(); } + }); + } + + // Clear timers and remove bound events + clearTimeout(self.timers.show); + clearTimeout(self.timers.hide); + unassignEvents(); + + // If the API if actually this qTip API... + if(!elemAPI || self === elemAPI) { + // Remove api object + $.removeData(t, 'qtip'); + + // Reset old title attribute if removed + if(options.suppress && title) { + $.attr(t, 'title', title); + target.removeAttr(oldtitle); + } + + // Remove ARIA attributes + target.removeAttr('aria-describedby'); + } + + // Remove qTip events associated with this API + target.unbind('.qtip-'+id); + + // Remove ID from sued id object + delete usedIDs[self.id]; + + return target; + } + }); +} + +// Initialization method +function init(id, opts) +{ + var obj, posOptions, attr, config, title, + + // Setup element references + elem = $(this), + docBody = $(document.body), + + // Use document body instead of document element if needed + newTarget = this === document ? docBody : elem, + + // Grab metadata from element if plugin is present + metadata = (elem.metadata) ? elem.metadata(opts.metadata) : NULL, + + // If metadata type if HTML5, grab 'name' from the object instead, or use the regular data object otherwise + metadata5 = opts.metadata.type === 'html5' && metadata ? metadata[opts.metadata.name] : NULL, + + // Grab data from metadata.name (or data-qtipopts as fallback) using .data() method, + html5 = elem.data(opts.metadata.name || 'qtipopts'); + + // If we don't get an object returned attempt to parse it manualyl without parseJSON + try { html5 = typeof html5 === 'string' ? $.parseJSON(html5) : html5; } catch(e) {} + + // Merge in and sanitize metadata + config = $.extend(TRUE, {}, QTIP.defaults, opts, + typeof html5 === 'object' ? sanitizeOptions(html5) : NULL, + sanitizeOptions(metadata5 || metadata)); + + // Re-grab our positioning options now we've merged our metadata and set id to passed value + posOptions = config.position; + config.id = id; + + // Setup missing content if none is detected + if('boolean' === typeof config.content.text) { + attr = elem.attr(config.content.attr); + + // Grab from supplied attribute if available + if(config.content.attr !== FALSE && attr) { config.content.text = attr; } + + // No valid content was found, abort render + else { return FALSE; } + } + + // Setup target options + if(!posOptions.container.length) { posOptions.container = docBody; } + if(posOptions.target === FALSE) { posOptions.target = newTarget; } + if(config.show.target === FALSE) { config.show.target = newTarget; } + if(config.show.solo === TRUE) { config.show.solo = posOptions.container.closest('body'); } + if(config.hide.target === FALSE) { config.hide.target = newTarget; } + if(config.position.viewport === TRUE) { config.position.viewport = posOptions.container; } + + // Ensure we only use a single container + posOptions.container = posOptions.container.eq(0); + + // Convert position corner values into x and y strings + posOptions.at = new PLUGINS.Corner(posOptions.at); + posOptions.my = new PLUGINS.Corner(posOptions.my); + + // Destroy previous tooltip if overwrite is enabled, or skip element if not + if($.data(this, 'qtip')) { + if(config.overwrite) { + elem.qtip('destroy'); + } + else if(config.overwrite === FALSE) { + return FALSE; + } + } + + // Remove title attribute and store it if present + if(config.suppress && (title = $.attr(this, 'title'))) { + // Final attr call fixes event delegatiom and IE default tooltip showing problem + $(this).removeAttr('title').attr(oldtitle, title).attr('title', ''); + } + + // Initialize the tooltip and add API reference + obj = new QTip(elem, config, id, !!attr); + $.data(this, 'qtip', obj); + + // Catch remove/removeqtip events on target element to destroy redundant tooltip + elem.bind('remove.qtip-'+id+' removeqtip.qtip-'+id, function(){ obj.destroy(); }); + + return obj; +} + +// jQuery $.fn extension method +QTIP = $.fn.qtip = function(options, notation, newValue) +{ + var command = ('' + options).toLowerCase(), // Parse command + returned = NULL, + args = $.makeArray(arguments).slice(1), + event = args[args.length - 1], + opts = this[0] ? $.data(this[0], 'qtip') : NULL; + + // Check for API request + if((!arguments.length && opts) || command === 'api') { + return opts; + } + + // Execute API command if present + else if('string' === typeof options) + { + this.each(function() + { + var api = $.data(this, 'qtip'); + if(!api) { return TRUE; } + + // Cache the event if possible + if(event && event.timeStamp) { api.cache.event = event; } + + // Check for specific API commands + if((command === 'option' || command === 'options') && notation) { + if($.isPlainObject(notation) || newValue !== undefined) { + api.set(notation, newValue); + } + else { + returned = api.get(notation); + return FALSE; + } + } + + // Execute API command + else if(api[command]) { + api[command].apply(api[command], args); + } + }); + + return returned !== NULL ? returned : this; + } + + // No API commands. validate provided options and setup qTips + else if('object' === typeof options || !arguments.length) + { + opts = sanitizeOptions($.extend(TRUE, {}, options)); + + // Bind the qTips + return QTIP.bind.call(this, opts, event); + } +}; + +// $.fn.qtip Bind method +QTIP.bind = function(opts, event) +{ + return this.each(function(i) { + var options, targets, events, namespace, api, id; + + // Find next available ID, or use custom ID if provided + id = $.isArray(opts.id) ? opts.id[i] : opts.id; + id = !id || id === FALSE || id.length < 1 || usedIDs[id] ? QTIP.nextid++ : (usedIDs[id] = id); + + // Setup events namespace + namespace = '.qtip-'+id+'-create'; + + // Initialize the qTip and re-grab newly sanitized options + api = init.call(this, id, opts); + if(api === FALSE) { return TRUE; } + options = api.options; + + // Initialize plugins + $.each(PLUGINS, function() { + if(this.initialize === 'initialize') { this(api); } + }); + + // Determine hide and show targets + targets = { show: options.show.target, hide: options.hide.target }; + events = { + show: $.trim('' + options.show.event).replace(/ /g, namespace+' ') + namespace, + hide: $.trim('' + options.hide.event).replace(/ /g, namespace+' ') + namespace + }; + + /* + * Make sure hoverIntent functions properly by using mouseleave as a hide event if + * mouseenter/mouseout is used for show.event, even if it isn't in the users options. + */ + if(/mouse(over|enter)/i.test(events.show) && !/mouse(out|leave)/i.test(events.hide)) { + events.hide += ' mouseleave' + namespace; + } + + /* + * Also make sure initial mouse targetting works correctly by caching mousemove coords + * on show targets before the tooltip has rendered. + * + * Also set onTarget when triggered to keep mouse tracking working + */ + targets.show.bind('mousemove'+namespace, function(event) { + storeMouse(event); + api.cache.onTarget = TRUE; + }); + + // Define hoverIntent function + function hoverIntent(event) { + function render() { + // Cache mouse coords,render and render the tooltip + api.render(typeof event === 'object' || options.show.ready); + + // Unbind show and hide events + targets.show.add(targets.hide).unbind(namespace); + } + + // Only continue if tooltip isn't disabled + if(api.cache.disabled) { return FALSE; } + + // Cache the event data + api.cache.event = $.extend({}, event); + api.cache.target = event ? $(event.target) : [undefined]; + + // Start the event sequence + if(options.show.delay > 0) { + clearTimeout(api.timers.show); + api.timers.show = setTimeout(render, options.show.delay); + if(events.show !== events.hide) { + targets.hide.bind(events.hide, function() { clearTimeout(api.timers.show); }); + } + } + else { render(); } + } + + // Bind show events to target + targets.show.bind(events.show, hoverIntent); + + // Prerendering is enabled, create tooltip now + if(options.show.ready || options.prerender) { hoverIntent(event); } + }) + .attr('data-hasqtip', TRUE); +}; + +// Setup base plugins +PLUGINS = QTIP.plugins = { + // Corner object parser + Corner: function(corner) { + corner = ('' + corner).replace(/([A-Z])/, ' $1').replace(/middle/gi, CENTER).toLowerCase(); + this.x = (corner.match(/left|right/i) || corner.match(/center/) || ['inherit'])[0].toLowerCase(); + this.y = (corner.match(/top|bottom|center/i) || ['inherit'])[0].toLowerCase(); + + var f = corner.charAt(0); this.precedance = (f === 't' || f === 'b' ? Y : X); + + this.string = function() { return this.precedance === Y ? this.y+this.x : this.x+this.y; }; + this.abbrev = function() { + var x = this.x.substr(0,1), y = this.y.substr(0,1); + return x === y ? x : this.precedance === Y ? y + x : x + y; + }; + + this.invertx = function(center) { this.x = this.x === LEFT ? RIGHT : this.x === RIGHT ? LEFT : center || this.x; }; + this.inverty = function(center) { this.y = this.y === TOP ? BOTTOM : this.y === BOTTOM ? TOP : center || this.y; }; + + this.clone = function() { + return { + x: this.x, y: this.y, precedance: this.precedance, + string: this.string, abbrev: this.abbrev, clone: this.clone, + invertx: this.invertx, inverty: this.inverty + }; + }; + }, + + // Custom (more correct for qTip!) offset calculator + offset: function(elem, container) { + var pos = elem.offset(), + docBody = elem.closest('body'), + quirks = $.browser.msie && document.compatMode !== 'CSS1Compat', + parent = container, scrolled, + coffset, overflow; + + function scroll(e, i) { + pos.left += i * e.scrollLeft(); + pos.top += i * e.scrollTop(); + } + + if(parent) { + // Compensate for non-static containers offset + do { + if(parent.css('position') !== 'static') { + coffset = parent.position(); + + // Account for element positioning, borders and margins + pos.left -= coffset.left + (parseInt(parent.css('borderLeftWidth'), 10) || 0) + (parseInt(parent.css('marginLeft'), 10) || 0); + pos.top -= coffset.top + (parseInt(parent.css('borderTopWidth'), 10) || 0) + (parseInt(parent.css('marginTop'), 10) || 0); + + // If this is the first parent element with an overflow of "scroll" or "auto", store it + if(!scrolled && (overflow = parent.css('overflow')) !== 'hidden' && overflow !== 'visible') { scrolled = parent; } + } + } + while((parent = $(parent[0].offsetParent)).length); + + // Compensate for containers scroll if it also has an offsetParent (or in IE quirks mode) + if(scrolled && scrolled[0] !== docBody[0] || quirks) { + scroll( scrolled || docBody, 1 ); + } + } + + return pos; + }, + + /* + * iOS version detection + */ + iOS: parseFloat( + ('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0,''])[1]) + .replace('undefined', '3_2').replace('_', '.').replace('_', '') + ) || FALSE, + + /* + * jQuery-specific $.fn overrides + */ + fn: { + /* Allow other plugins to successfully retrieve the title of an element with a qTip applied */ + attr: function(attr, val) { + if(this.length) { + var self = this[0], + title = 'title', + api = $.data(self, 'qtip'); + + if(attr === title && api && 'object' === typeof api && api.options.suppress) { + if(arguments.length < 2) { + return $.attr(self, oldtitle); + } + + // If qTip is rendered and title was originally used as content, update it + if(api && api.options.content.attr === title && api.cache.attr) { + api.set('content.text', val); + } + + // Use the regular attr method to set, then cache the result + return this.attr(oldtitle, val); + } + } + + return $.fn['attr'+replaceSuffix].apply(this, arguments); + }, + + /* Allow clone to correctly retrieve cached title attributes */ + clone: function(keepData) { + var titles = $([]), title = 'title', + + // Clone our element using the real clone method + elems = $.fn['clone'+replaceSuffix].apply(this, arguments); + + // Grab all elements with an oldtitle set, and change it to regular title attribute, if keepData is false + if(!keepData) { + elems.filter('['+oldtitle+']').attr('title', function() { + return $.attr(this, oldtitle); + }) + .removeAttr(oldtitle); + } + + return elems; + } + } +}; + +// Apply the fn overrides above +$.each(PLUGINS.fn, function(name, func) { + if(!func || $.fn[name+replaceSuffix]) { return TRUE; } + + var old = $.fn[name+replaceSuffix] = $.fn[name]; + $.fn[name] = function() { + return func.apply(this, arguments) || old.apply(this, arguments); + }; +}); + +/* Fire off 'removeqtip' handler in $.cleanData if jQuery UI not present (it already does similar). + * This snippet is taken directly from jQuery UI source code found here: + * http://code.jquery.com/ui/jquery-ui-git.js + */ +if(!$.ui) { + $['cleanData'+replaceSuffix] = $.cleanData; + $.cleanData = function( elems ) { + for(var i = 0, elem; (elem = elems[i]) !== undefined; i++) { + try { $( elem ).triggerHandler('removeqtip'); } + catch( e ) {} + } + $['cleanData'+replaceSuffix]( elems ); + }; +} + +// Set global qTip properties +QTIP.version = '2.0.1-4-g'; +QTIP.nextid = 0; +QTIP.inactiveEvents = 'click dblclick mousedown mouseup mousemove mouseleave mouseenter'.split(' '); +QTIP.zindex = 15000; + +// Define configuration defaults +QTIP.defaults = { + prerender: FALSE, + id: FALSE, + overwrite: TRUE, + suppress: TRUE, + content: { + text: TRUE, + attr: 'title', + deferred: FALSE, + title: { + text: FALSE, + button: FALSE + } + }, + position: { + my: 'top left', + at: 'bottom right', + target: FALSE, + container: FALSE, + viewport: FALSE, + adjust: { + x: 0, y: 0, + mouse: TRUE, + resize: TRUE, + method: 'flipinvert flipinvert' + }, + effect: function(api, pos, viewport) { + $(this).animate(pos, { + duration: 200, + queue: FALSE + }); + } + }, + show: { + target: FALSE, + event: 'mouseenter', + effect: TRUE, + delay: 90, + solo: FALSE, + ready: FALSE, + autofocus: FALSE + }, + hide: { + target: FALSE, + event: 'mouseleave', + effect: TRUE, + delay: 0, + fixed: FALSE, + inactive: FALSE, + leave: 'window', + distance: FALSE + }, + style: { + classes: '', + widget: FALSE, + width: FALSE, + height: FALSE, + def: TRUE + }, + events: { + render: NULL, + move: NULL, + show: NULL, + hide: NULL, + toggle: NULL, + visible: NULL, + hidden: NULL, + focus: NULL, + blur: NULL + } +}; + + +PLUGINS.svg = function(api, svg, corner, adjustMethod) +{ + var doc = $(document), + elem = svg[0], + result = { + width: 0, height: 0, + position: { top: 1e10, left: 1e10 } + }, + box, mtx, root, point, tPoint; + + // Ascend the parentNode chain until we find an element with getBBox() + while(!elem.getBBox) { elem = elem.parentNode; } + + // Check for a valid bounding box method + if (elem.getBBox && elem.parentNode) { + box = elem.getBBox(); + mtx = elem.getScreenCTM(); + root = elem.farthestViewportElement || elem; + + // Return if no method is found + if(!root.createSVGPoint) { return result; } + + // Create our point var + point = root.createSVGPoint(); + + // Adjust top and left + point.x = box.x; + point.y = box.y; + tPoint = point.matrixTransform(mtx); + result.position.left = tPoint.x; + result.position.top = tPoint.y; + + // Adjust width and height + point.x += box.width; + point.y += box.height; + tPoint = point.matrixTransform(mtx); + result.width = tPoint.x - result.position.left; + result.height = tPoint.y - result.position.top; + + // Adjust by scroll offset + result.position.left += doc.scrollLeft(); + result.position.top += doc.scrollTop(); + } + + return result; +}; + + +function Ajax(api) +{ + var self = this, + tooltip = api.elements.tooltip, + opts = api.options.content.ajax, + defaults = QTIP.defaults.content.ajax, + namespace = '.qtip-ajax', + rscript = /)<[^<]*)*<\/script>/gi, + first = TRUE, + stop = FALSE, + xhr; + + api.checks.ajax = { + '^content.ajax': function(obj, name, v) { + // If content.ajax object was reset, set our local var + if(name === 'ajax') { opts = v; } + + if(name === 'once') { + self.init(); + } + else if(opts && opts.url) { + self.load(); + } + else { + tooltip.unbind(namespace); + } + } + }; + + $.extend(self, { + init: function() { + // Make sure ajax options are enabled and bind event + if(opts && opts.url) { + tooltip.unbind(namespace)[ opts.once ? 'one' : 'bind' ]('tooltipshow'+namespace, self.load); + } + + return self; + }, + + load: function(event) { + if(stop) {stop = FALSE; return; } + + var hasSelector = opts.url.lastIndexOf(' '), + url = opts.url, + selector, + hideFirst = !opts.loading && first; + + // If loading option is disabled, prevent the tooltip showing until we've completed the request + if(hideFirst) { try{ event.preventDefault(); } catch(e) {} } + + // Make sure default event hasn't been prevented + else if(event && event.isDefaultPrevented()) { return self; } + + // Cancel old request + if(xhr && xhr.abort) { xhr.abort(); } + + // Check if user delcared a content selector like in .load() + if(hasSelector > -1) { + selector = url.substr(hasSelector); + url = url.substr(0, hasSelector); + } + + // Define common after callback for both success/error handlers + function after() { + var complete; + + // Don't proceed if tooltip is destroyed + if(api.destroyed) { return; } + + // Set first flag to false + first = FALSE; + + // Re-display tip if loading and first time, and reset first flag + if(hideFirst) { stop = TRUE; api.show(event.originalEvent); } + + // Call users complete method if it was defined + if((complete = defaults.complete || opts.complete) && $.isFunction(complete)) { + complete.apply(opts.context || api, arguments); + } + } + + // Define success handler + function successHandler(content, status, jqXHR) { + var success; + + // Don't proceed if tooltip is destroyed + if(api.destroyed) { return; } + + // If URL contains a selector + if(selector && 'string' === typeof content) { + // Create a dummy div to hold the results and grab the selector element + content = $('
                                                ') + // inject the contents of the document in, removing the scripts + // to avoid any 'Permission Denied' errors in IE + .append(content.replace(rscript, "")) + + // Locate the specified elements + .find(selector); + } + + // Call the success function if one is defined + if((success = defaults.success || opts.success) && $.isFunction(success)) { + success.call(opts.context || api, content, status, jqXHR); + } + + // Otherwise set the content + else { api.set('content.text', content); } + } + + // Error handler + function errorHandler(xhr, status, error) { + if(api.destroyed || xhr.status === 0) { return; } + api.set('content.text', status + ': ' + error); + } + + // Setup $.ajax option object and process the request + xhr = $.ajax( + $.extend({ + error: defaults.error || errorHandler, + context: api + }, + opts, { url: url, success: successHandler, complete: after }) + ); + }, + + destroy: function() { + // Cancel ajax request if possible + if(xhr && xhr.abort) { xhr.abort(); } + + // Set api.destroyed flag + api.destroyed = TRUE; + } + }); + + self.init(); +} + + +PLUGINS.ajax = function(api) +{ + var self = api.plugins.ajax; + + return 'object' === typeof self ? self : (api.plugins.ajax = new Ajax(api)); +}; + +PLUGINS.ajax.initialize = 'render'; + +// Setup plugin sanitization +PLUGINS.ajax.sanitize = function(options) +{ + var content = options.content, opts; + if(content && 'ajax' in content) { + opts = content.ajax; + if(typeof opts !== 'object') { opts = options.content.ajax = { url: opts }; } + if('boolean' !== typeof opts.once && opts.once) { opts.once = !!opts.once; } + } +}; + +// Extend original api defaults +$.extend(TRUE, QTIP.defaults, { + content: { + ajax: { + loading: TRUE, + once: TRUE + } + } +}); + + +// Tip coordinates calculator +function calculateTip(corner, width, height) +{ + var width2 = Math.ceil(width / 2), height2 = Math.ceil(height / 2), + + // Define tip coordinates in terms of height and width values + tips = { + bottomright: [[0,0], [width,height], [width,0]], + bottomleft: [[0,0], [width,0], [0,height]], + topright: [[0,height], [width,0], [width,height]], + topleft: [[0,0], [0,height], [width,height]], + topcenter: [[0,height], [width2,0], [width,height]], + bottomcenter: [[0,0], [width,0], [width2,height]], + rightcenter: [[0,0], [width,height2], [0,height]], + leftcenter: [[width,0], [width,height], [0,height2]] + }; + + // Set common side shapes + tips.lefttop = tips.bottomright; tips.righttop = tips.bottomleft; + tips.leftbottom = tips.topright; tips.rightbottom = tips.topleft; + + return tips[ corner.string() ]; +} + + +function Tip(qTip, command) +{ + var self = this, + opts = qTip.options.style.tip, + elems = qTip.elements, + tooltip = elems.tooltip, + cache = { top: 0, left: 0 }, + size = { + width: opts.width, + height: opts.height + }, + color = { }, + border = opts.border || 0, + namespace = '.qtip-tip', + hasCanvas = !!($('')[0] || {}).getContext, + tiphtml; + + self.corner = NULL; + self.mimic = NULL; + self.border = border; + self.offset = opts.offset; + self.size = size; + + // Add new option checks for the plugin + qTip.checks.tip = { + '^position.my|style.tip.(corner|mimic|border)$': function() { + // Make sure a tip can be drawn + if(!self.init()) { + self.destroy(); + } + + // Reposition the tooltip + qTip.reposition(); + }, + '^style.tip.(height|width)$': function() { + // Re-set dimensions and redraw the tip + size = { + width: opts.width, + height: opts.height + }; + self.create(); + self.update(); + + // Reposition the tooltip + qTip.reposition(); + }, + '^content.title.text|style.(classes|widget)$': function() { + if(elems.tip && elems.tip.length) { + self.update(); + } + } + }; + + function whileVisible(callback) { + var visible = tooltip.is(':visible'); + tooltip.show(); callback(); tooltip.toggle(visible); + } + + function swapDimensions() { + size.width = opts.height; + size.height = opts.width; + } + + function resetDimensions() { + size.width = opts.width; + size.height = opts.height; + } + + function reposition(event, api, pos, viewport) { + if(!elems.tip) { return; } + + var newCorner = self.corner.clone(), + adjust = pos.adjusted, + method = qTip.options.position.adjust.method.split(' '), + horizontal = method[0], + vertical = method[1] || method[0], + shift = { left: FALSE, top: FALSE, x: 0, y: 0 }, + offset, css = {}, props; + + // If our tip position isn't fixed e.g. doesn't adjust with viewport... + if(self.corner.fixed !== TRUE) { + // Horizontal - Shift or flip method + if(horizontal === SHIFT && newCorner.precedance === X && adjust.left && newCorner.y !== CENTER) { + newCorner.precedance = newCorner.precedance === X ? Y : X; + } + else if(horizontal !== SHIFT && adjust.left){ + newCorner.x = newCorner.x === CENTER ? (adjust.left > 0 ? LEFT : RIGHT) : (newCorner.x === LEFT ? RIGHT : LEFT); + } + + // Vertical - Shift or flip method + if(vertical === SHIFT && newCorner.precedance === Y && adjust.top && newCorner.x !== CENTER) { + newCorner.precedance = newCorner.precedance === Y ? X : Y; + } + else if(vertical !== SHIFT && adjust.top) { + newCorner.y = newCorner.y === CENTER ? (adjust.top > 0 ? TOP : BOTTOM) : (newCorner.y === TOP ? BOTTOM : TOP); + } + + // Update and redraw the tip if needed (check cached details of last drawn tip) + if(newCorner.string() !== cache.corner.string() && (cache.top !== adjust.top || cache.left !== adjust.left)) { + self.update(newCorner, FALSE); + } + } + + // Setup tip offset properties + offset = self.position(newCorner, adjust); + offset[ newCorner.x ] += parseWidth(newCorner, newCorner.x); + offset[ newCorner.y ] += parseWidth(newCorner, newCorner.y); + + // Readjust offset object to make it left/top + if(offset.right !== undefined) { offset.left = -offset.right; } + if(offset.bottom !== undefined) { offset.top = -offset.bottom; } + offset.user = Math.max(0, opts.offset); + + // Viewport "shift" specific adjustments + if(shift.left = (horizontal === SHIFT && !!adjust.left)) { + if(newCorner.x === CENTER) { + css['margin-left'] = shift.x = offset['margin-left']; + } + else { + props = offset.right !== undefined ? + [ adjust.left, -offset.left ] : [ -adjust.left, offset.left ]; + + if( (shift.x = Math.max(props[0], props[1])) > props[0] ) { + pos.left -= adjust.left; + shift.left = FALSE; + } + + css[ offset.right !== undefined ? RIGHT : LEFT ] = shift.x; + } + } + if(shift.top = (vertical === SHIFT && !!adjust.top)) { + if(newCorner.y === CENTER) { + css['margin-top'] = shift.y = offset['margin-top']; + } + else { + props = offset.bottom !== undefined ? + [ adjust.top, -offset.top ] : [ -adjust.top, offset.top ]; + + if( (shift.y = Math.max(props[0], props[1])) > props[0] ) { + pos.top -= adjust.top; + shift.top = FALSE; + } + + css[ offset.bottom !== undefined ? BOTTOM : TOP ] = shift.y; + } + } + + /* + * If the tip is adjusted in both dimensions, or in a + * direction that would cause it to be anywhere but the + * outer border, hide it! + */ + elems.tip.css(css).toggle( + !((shift.x && shift.y) || (newCorner.x === CENTER && shift.y) || (newCorner.y === CENTER && shift.x)) + ); + + // Adjust position to accomodate tip dimensions + pos.left -= offset.left.charAt ? offset.user : horizontal !== SHIFT || shift.top || !shift.left && !shift.top ? offset.left : 0; + pos.top -= offset.top.charAt ? offset.user : vertical !== SHIFT || shift.left || !shift.left && !shift.top ? offset.top : 0; + + // Cache details + cache.left = adjust.left; cache.top = adjust.top; + cache.corner = newCorner.clone(); + } + + function parseCorner() { + var corner = opts.corner, + posOptions = qTip.options.position, + at = posOptions.at, + my = posOptions.my.string ? posOptions.my.string() : posOptions.my; + + // Detect corner and mimic properties + if(corner === FALSE || (my === FALSE && at === FALSE)) { + return FALSE; + } + else { + if(corner === TRUE) { + self.corner = new PLUGINS.Corner(my); + } + else if(!corner.string) { + self.corner = new PLUGINS.Corner(corner); + self.corner.fixed = TRUE; + } + } + + // Cache it + cache.corner = new PLUGINS.Corner( self.corner.string() ); + + return self.corner.string() !== 'centercenter'; + } + + /* border width calculator */ + function parseWidth(corner, side, use) { + side = !side ? corner[corner.precedance] : side; + + var isTitleTop = elems.titlebar && corner.y === TOP, + elem = isTitleTop ? elems.titlebar : tooltip, + borderSide = 'border-' + side + '-width', + css = function(elem) { return parseInt(elem.css(borderSide), 10); }, + val; + + // Grab the border-width value (make tooltip visible first) + whileVisible(function() { + val = (use ? css(use) : (css(elems.content) || css(elem) || css(tooltip))) || 0; + }); + return val; + } + + function parseRadius(corner) { + var isTitleTop = elems.titlebar && corner.y === TOP, + elem = isTitleTop ? elems.titlebar : elems.content, + moz = $.browser.mozilla, + prefix = moz ? '-moz-' : $.browser.webkit ? '-webkit-' : '', + nonStandard = 'border-radius-' + corner.y + corner.x, + standard = 'border-' + corner.y + '-' + corner.x + '-radius', + css = function(c) { return parseInt(elem.css(c), 10) || parseInt(tooltip.css(c), 10); }, + val; + + whileVisible(function() { + val = css(standard) || css(prefix + standard) || css(prefix + nonStandard) || css(nonStandard) || 0; + }); + return val; + } + + function parseColours(actual) { + var i, fill, border, + tip = elems.tip.css('cssText', ''), + corner = actual || self.corner, + invalid = /rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i, + borderSide = 'border-' + corner[ corner.precedance ] + '-color', + bgColor = 'background-color', + transparent = 'transparent', + important = ' !important', + + titlebar = elems.titlebar, + useTitle = titlebar && (corner.y === TOP || (corner.y === CENTER && tip.position().top + (size.height / 2) + opts.offset < titlebar.outerHeight(TRUE))), + colorElem = useTitle ? titlebar : elems.content; + + function css(elem, prop, compare) { + var val = elem.css(prop) || transparent; + if(compare && val === elem.css(compare)) { return FALSE; } + else { return invalid.test(val) ? FALSE : val; } + } + + // Ensure tooltip is visible then... + whileVisible(function() { + // Attempt to detect the background colour from various elements, left-to-right precedance + color.fill = css(tip, bgColor) || css(colorElem, bgColor) || css(elems.content, bgColor) || + css(tooltip, bgColor) || tip.css(bgColor); + + // Attempt to detect the correct border side colour from various elements, left-to-right precedance + color.border = css(tip, borderSide, 'color') || css(colorElem, borderSide, 'color') || + css(elems.content, borderSide, 'color') || css(tooltip, borderSide, 'color') || tooltip.css(borderSide); + + // Reset background and border colours + $('*', tip).add(tip).css('cssText', bgColor+':'+transparent+important+';border:0'+important+';'); + }); + } + + function calculateSize(corner) { + var y = corner.precedance === Y, + width = size [ y ? WIDTH : HEIGHT ], + height = size [ y ? HEIGHT : WIDTH ], + isCenter = corner.string().indexOf(CENTER) > -1, + base = width * (isCenter ? 0.5 : 1), + pow = Math.pow, + round = Math.round, + bigHyp, ratio, result, + + smallHyp = Math.sqrt( pow(base, 2) + pow(height, 2) ), + + hyp = [ + (border / base) * smallHyp, (border / height) * smallHyp + ]; + hyp[2] = Math.sqrt( pow(hyp[0], 2) - pow(border, 2) ); + hyp[3] = Math.sqrt( pow(hyp[1], 2) - pow(border, 2) ); + + bigHyp = smallHyp + hyp[2] + hyp[3] + (isCenter ? 0 : hyp[0]); + ratio = bigHyp / smallHyp; + + result = [ round(ratio * height), round(ratio * width) ]; + return { height: result[ y ? 0 : 1 ], width: result[ y ? 1 : 0 ] }; + } + + function createVML(tag, props, style) { + return ''; + } + + $.extend(self, { + init: function() + { + var enabled = parseCorner() && (hasCanvas || $.browser.msie); + + // Determine tip corner and type + if(enabled) { + // Create a new tip and draw it + self.create(); + self.update(); + + // Bind update events + tooltip.unbind(namespace).bind('tooltipmove'+namespace, reposition); + } + + return enabled; + }, + + create: function() + { + var width = size.width, + height = size.height, + vml; + + // Remove previous tip element if present + if(elems.tip) { elems.tip.remove(); } + + // Create tip element and prepend to the tooltip + elems.tip = $('
                                                ', { 'class': 'qtip-tip' }).css({ width: width, height: height }).prependTo(tooltip); + + // Create tip drawing element(s) + if(hasCanvas) { + // save() as soon as we create the canvas element so FF2 doesn't bork on our first restore()! + $('').appendTo(elems.tip)[0].getContext('2d').save(); + } + else { + vml = createVML('shape', 'coordorigin="0,0"', 'position:absolute;'); + elems.tip.html(vml + vml); + + // Prevent mousing down on the tip since it causes problems with .live() handling in IE due to VML + $('*', elems.tip).bind('click mousedown', function(event) { event.stopPropagation(); }); + } + }, + + update: function(corner, position) + { + var tip = elems.tip, + inner = tip.children(), + width = size.width, + height = size.height, + mimic = opts.mimic, + round = Math.round, + precedance, context, coords, translate, newSize; + + // Re-determine tip if not already set + if(!corner) { corner = cache.corner || self.corner; } + + // Use corner property if we detect an invalid mimic value + if(mimic === FALSE) { mimic = corner; } + + // Otherwise inherit mimic properties from the corner object as necessary + else { + mimic = new PLUGINS.Corner(mimic); + mimic.precedance = corner.precedance; + + if(mimic.x === 'inherit') { mimic.x = corner.x; } + else if(mimic.y === 'inherit') { mimic.y = corner.y; } + else if(mimic.x === mimic.y) { + mimic[ corner.precedance ] = corner[ corner.precedance ]; + } + } + precedance = mimic.precedance; + + // Ensure the tip width.height are relative to the tip position + if(corner.precedance === X) { swapDimensions(); } + else { resetDimensions(); } + + // Set the tip dimensions + elems.tip.css({ + width: (width = size.width), + height: (height = size.height) + }); + + // Update our colours + parseColours(corner); + + // Detect border width, taking into account colours + if(color.border !== 'transparent') { + // Grab border width + border = parseWidth(corner, NULL); + + // If border width isn't zero, use border color as fill (1.0 style tips) + if(opts.border === 0 && border > 0) { color.fill = color.border; } + + // Set border width (use detected border width if opts.border is true) + self.border = border = opts.border !== TRUE ? opts.border : border; + } + + // Border colour was invalid, set border to zero + else { self.border = border = 0; } + + // Calculate coordinates + coords = calculateTip(mimic, width , height); + + // Determine tip size + self.size = newSize = calculateSize(corner); + tip.css(newSize).css('line-height', newSize.height+'px'); + + // Calculate tip translation + if(corner.precedance === Y) { + translate = [ + round(mimic.x === LEFT ? border : mimic.x === RIGHT ? newSize.width - width - border : (newSize.width - width) / 2), + round(mimic.y === TOP ? newSize.height - height : 0) + ]; + } + else { + translate = [ + round(mimic.x === LEFT ? newSize.width - width : 0), + round(mimic.y === TOP ? border : mimic.y === BOTTOM ? newSize.height - height - border : (newSize.height - height) / 2) + ]; + } + + // Canvas drawing implementation + if(hasCanvas) { + // Set the canvas size using calculated size + inner.attr(newSize); + + // Grab canvas context and clear/save it + context = inner[0].getContext('2d'); + context.restore(); context.save(); + context.clearRect(0,0,3000,3000); + + // Set properties + context.fillStyle = color.fill; + context.strokeStyle = color.border; + context.lineWidth = border * 2; + context.lineJoin = 'miter'; + context.miterLimit = 100; + + // Translate origin + context.translate(translate[0], translate[1]); + + // Draw the tip + context.beginPath(); + context.moveTo(coords[0][0], coords[0][1]); + context.lineTo(coords[1][0], coords[1][1]); + context.lineTo(coords[2][0], coords[2][1]); + context.closePath(); + + // Apply fill and border + if(border) { + // Make sure transparent borders are supported by doing a stroke + // of the background colour before the stroke colour + if(tooltip.css('background-clip') === 'border-box') { + context.strokeStyle = color.fill; + context.stroke(); + } + context.strokeStyle = color.border; + context.stroke(); + } + context.fill(); + } + + // VML (IE Proprietary implementation) + else { + // Setup coordinates string + coords = 'm' + coords[0][0] + ',' + coords[0][1] + ' l' + coords[1][0] + + ',' + coords[1][1] + ' ' + coords[2][0] + ',' + coords[2][1] + ' xe'; + + // Setup VML-specific offset for pixel-perfection + translate[2] = border && /^(r|b)/i.test(corner.string()) ? + parseFloat($.browser.version, 10) === 8 ? 2 : 1 : 0; + + // Set initial CSS + inner.css({ + coordsize: (width+border) + ' ' + (height+border), + antialias: ''+(mimic.string().indexOf(CENTER) > -1), + left: translate[0], + top: translate[1], + width: width + border, + height: height + border + }) + .each(function(i) { + var $this = $(this); + + // Set shape specific attributes + $this[ $this.prop ? 'prop' : 'attr' ]({ + coordsize: (width+border) + ' ' + (height+border), + path: coords, + fillcolor: color.fill, + filled: !!i, + stroked: !i + }) + .toggle(!!(border || i)); + + // Check if border is enabled and add stroke element + if(!i && $this.html() === '') { + $this.html( + createVML('stroke', 'weight="'+(border*2)+'px" color="'+color.border+'" miterlimit="1000" joinstyle="miter"') + ); + } + }); + } + + // Position if needed + if(position !== FALSE) { self.position(corner); } + }, + + // Tip positioning method + position: function(corner) + { + var tip = elems.tip, + position = {}, + userOffset = Math.max(0, opts.offset), + precedance, dimensions, corners; + + // Return if tips are disabled or tip is not yet rendered + if(opts.corner === FALSE || !tip) { return FALSE; } + + // Inherit corner if not provided + corner = corner || self.corner; + precedance = corner.precedance; + + // Determine which tip dimension to use for adjustment + dimensions = calculateSize(corner); + + // Setup corners and offset array + corners = [ corner.x, corner.y ]; + if(precedance === X) { corners.reverse(); } + + // Calculate tip position + $.each(corners, function(i, side) { + var b, bc, br; + + if(side === CENTER) { + b = precedance === Y ? LEFT : TOP; + position[ b ] = '50%'; + position['margin-' + b] = -Math.round(dimensions[ precedance === Y ? WIDTH : HEIGHT ] / 2) + userOffset; + } + else { + b = parseWidth(corner, side); + bc = parseWidth(corner, side, elems.content); + br = parseRadius(corner); + + position[ side ] = i ? bc : (userOffset + (br > b ? br : -b)); + } + }); + + // Adjust for tip dimensions + position[ corner[precedance] ] -= dimensions[ precedance === X ? WIDTH : HEIGHT ]; + + // Set and return new position + tip.css({ top: '', bottom: '', left: '', right: '', margin: '' }).css(position); + return position; + }, + + destroy: function() + { + // Remove the tip element + if(elems.tip) { elems.tip.remove(); } + elems.tip = false; + + // Unbind events + tooltip.unbind(namespace); + } + }); + + self.init(); +} + +PLUGINS.tip = function(api) +{ + var self = api.plugins.tip; + + return 'object' === typeof self ? self : (api.plugins.tip = new Tip(api)); +}; + +// Initialize tip on render +PLUGINS.tip.initialize = 'render'; + +// Setup plugin sanitization options +PLUGINS.tip.sanitize = function(options) +{ + var style = options.style, opts; + if(style && 'tip' in style) { + opts = options.style.tip; + if(typeof opts !== 'object'){ options.style.tip = { corner: opts }; } + if(!(/string|boolean/i).test(typeof opts['corner'])) { opts['corner'] = TRUE; } + if(typeof opts.width !== 'number'){ delete opts.width; } + if(typeof opts.height !== 'number'){ delete opts.height; } + if(typeof opts.border !== 'number' && opts.border !== TRUE){ delete opts.border; } + if(typeof opts.offset !== 'number'){ delete opts.offset; } + } +}; + +// Extend original qTip defaults +$.extend(TRUE, QTIP.defaults, { + style: { + tip: { + corner: TRUE, + mimic: FALSE, + width: 6, + height: 6, + border: TRUE, + offset: 0 + } + } +}); + + +function Modal(api) +{ + var self = this, + options = api.options.show.modal, + elems = api.elements, + tooltip = elems.tooltip, + overlaySelector = '#qtip-overlay', + globalNamespace = '.qtipmodal', + namespace = globalNamespace + api.id, + attr = 'is-modal-qtip', + docBody = $(document.body), + focusableSelector = PLUGINS.modal.focusable.join(','), + focusableElems = {}, overlay; + + // Setup option set checks + api.checks.modal = { + '^show.modal.(on|blur)$': function() { + // Initialise + self.init(); + + // Show the modal if not visible already and tooltip is visible + elems.overlay.toggle( tooltip.is(':visible') ); + }, + '^content.text$': function() { + updateFocusable(); + } + }; + + function updateFocusable() { + focusableElems = $(focusableSelector, tooltip).not('[disabled]').map(function() { + return typeof this.focus === 'function' ? this : null; + }); + } + + function focusInputs(blurElems) { + // Blurring body element in IE causes window.open windows to unfocus! + if(focusableElems.length < 1 && blurElems.length) { blurElems.not('body').blur(); } + + // Focus the inputs + else { focusableElems.first().focus(); } + } + + function stealFocus(event) { + var target = $(event.target), + container = target.closest('.qtip'), + targetOnTop; + + // Determine if input container target is above this + targetOnTop = container.length < 1 ? FALSE : + (parseInt(container[0].style.zIndex, 10) > parseInt(tooltip[0].style.zIndex, 10)); + + // If we're showing a modal, but focus has landed on an input below + // this modal, divert focus to the first visible input in this modal + // or if we can't find one... the tooltip itself + if(!targetOnTop && ($(event.target).closest(selector)[0] !== tooltip[0])) { + focusInputs(target); + } + } + + $.extend(self, { + init: function() + { + // If modal is disabled... return + if(!options.on) { return self; } + + // Create the overlay if needed + overlay = self.create(); + + // Add unique attribute so we can grab modal tooltips easily via a selector + tooltip.attr(attr, TRUE) + + // Set z-index + .css('z-index', PLUGINS.modal.zindex + $(selector+'['+attr+']').length) + + // Remove previous bound events in globalNamespace + .unbind(globalNamespace).unbind(namespace) + + // Apply our show/hide/focus modal events + .bind('tooltipshow'+globalNamespace+' tooltiphide'+globalNamespace, function(event, api, duration) { + var oEvent = event.originalEvent; + + // Make sure mouseout doesn't trigger a hide when showing the modal and mousing onto backdrop + if(event.target === tooltip[0]) { + if(oEvent && event.type === 'tooltiphide' && /mouse(leave|enter)/.test(oEvent.type) && $(oEvent.relatedTarget).closest(overlay[0]).length) { + try { event.preventDefault(); } catch(e) {} + } + else if(!oEvent || (oEvent && !oEvent.solo)) { + self[ event.type.replace('tooltip', '') ](event, duration); + } + } + }) + + // Adjust modal z-index on tooltip focus + .bind('tooltipfocus'+globalNamespace, function(event) { + // If focus was cancelled before it reearch us, don't do anything + if(event.isDefaultPrevented() || event.target !== tooltip[0]) { return; } + + var qtips = $(selector).filter('['+attr+']'), + + // Keep the modal's lower than other, regular qtips + newIndex = PLUGINS.modal.zindex + qtips.length, + curIndex = parseInt(tooltip[0].style.zIndex, 10); + + // Set overlay z-index + overlay[0].style.zIndex = newIndex - 2; + + // Reduce modal z-index's and keep them properly ordered + qtips.each(function() { + if(this.style.zIndex > curIndex) { + this.style.zIndex -= 1; + } + }); + + // Fire blur event for focused tooltip + qtips.end().filter('.' + focusClass).qtip('blur', event.originalEvent); + + // Set the new z-index + tooltip.addClass(focusClass)[0].style.zIndex = newIndex; + + // Prevent default handling + try { event.preventDefault(); } catch(e) {} + }) + + // Focus any other visible modals when this one hides + .bind('tooltiphide'+globalNamespace, function(event) { + if(event.target === tooltip[0]) { + $('[' + attr + ']').filter(':visible').not(tooltip).last().qtip('focus', event); + } + }); + + // Apply keyboard "Escape key" close handler + if(options.escape) { + $(document).unbind(namespace).bind('keydown'+namespace, function(event) { + if(event.keyCode === 27 && tooltip.hasClass(focusClass)) { + api.hide(event); + } + }); + } + + // Apply click handler for blur option + if(options.blur) { + elems.overlay.unbind(namespace).bind('click'+namespace, function(event) { + if(tooltip.hasClass(focusClass)) { api.hide(event); } + }); + } + + // Update focusable elements + updateFocusable(); + + return self; + }, + + create: function() + { + var elem = $(overlaySelector), win = $(window); + + // Return if overlay is already rendered + if(elem.length) { + // Modal overlay should always be below all tooltips if possible + return (elems.overlay = elem.insertAfter( $(selector).last() )); + } + + // Create document overlay + overlay = elems.overlay = $('
                                                ', { + id: overlaySelector.substr(1), + html: '
                                                ', + mousedown: function() { return FALSE; } + }) + .hide() + .insertAfter( $(selector).last() ); + + // Update position on window resize or scroll + function resize() { + overlay.css({ + height: win.height(), + width: win.width() + }); + } + win.unbind(globalNamespace).bind('resize'+globalNamespace, resize); + resize(); // Fire it initially too + + return overlay; + }, + + toggle: function(event, state, duration) + { + // Make sure default event hasn't been prevented + if(event && event.isDefaultPrevented()) { return self; } + + var effect = options.effect, + type = state ? 'show': 'hide', + visible = overlay.is(':visible'), + modals = $('[' + attr + ']').filter(':visible').not(tooltip), + zindex; + + // Create our overlay if it isn't present already + if(!overlay) { overlay = self.create(); } + + // Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible + if((overlay.is(':animated') && visible === state && overlay.data('toggleState') !== FALSE) || (!state && modals.length)) { + return self; + } + + // State specific... + if(state) { + // Set position + overlay.css({ left: 0, top: 0 }); + + // Toggle backdrop cursor style on show + overlay.toggleClass('blurs', options.blur); + + // IF the modal can steal the focus + if(options.stealfocus !== FALSE) { + // Make sure we can't focus anything outside the tooltip + docBody.bind('focusin'+namespace, stealFocus); + + // Blur the current item and focus anything in the modal we an + focusInputs( $('body :focus') ); + } + } + else { + // Undelegate focus handler + docBody.unbind('focusin'+namespace); + } + + // Stop all animations + overlay.stop(TRUE, FALSE).data('toggleState', state); + + // Use custom function if provided + if($.isFunction(effect)) { + effect.call(overlay, state); + } + + // If no effect type is supplied, use a simple toggle + else if(effect === FALSE) { + overlay[ type ](); + } + + // Use basic fade function + else { + overlay.fadeTo( parseInt(duration, 10) || 90, state ? 1 : 0, function() { + if(!state) { $(this).hide(); } + }); + } + + // Reset position on hide + if(!state) { + overlay.queue(function(next) { + overlay.css({ left: '', top: '' }).removeData('toggleState'); + next(); + }); + } + + return self; + }, + + show: function(event, duration) { return self.toggle(event, TRUE, duration); }, + hide: function(event, duration) { return self.toggle(event, FALSE, duration); }, + + destroy: function() + { + var delBlanket = overlay; + + if(delBlanket) { + // Check if any other modal tooltips are present + delBlanket = $('[' + attr + ']').not(tooltip).length < 1; + + // Remove overlay if needed + if(delBlanket) { + elems.overlay.remove(); + $(document).unbind(globalNamespace); + } + else { + elems.overlay.unbind(globalNamespace+api.id); + } + + // Undelegate focus handler + docBody.unbind('focusin'+namespace); + } + + // Remove bound events + return tooltip.removeAttr(attr).unbind(globalNamespace); + } + }); + + self.init(); +} + +PLUGINS.modal = function(api) { + var self = api.plugins.modal; + + return 'object' === typeof self ? self : (api.plugins.modal = new Modal(api)); +}; + +// Plugin needs to be initialized on render +PLUGINS.modal.initialize = 'render'; + +// Setup sanitiztion rules +PLUGINS.modal.sanitize = function(opts) { + if(opts.show) { + if(typeof opts.show.modal !== 'object') { opts.show.modal = { on: !!opts.show.modal }; } + else if(typeof opts.show.modal.on === 'undefined') { opts.show.modal.on = TRUE; } + } +}; + +// Base z-index for all modal tooltips (use qTip core z-index as a base) +PLUGINS.modal.zindex = QTIP.zindex - 200; + +// Defines the selector used to select all 'focusable' elements within the modal when using the show.modal.stealfocus option. +// Selectors initially taken from http://stackoverflow.com/questions/7668525/is-there-a-jquery-selector-to-get-all-elements-that-can-get-focus +PLUGINS.modal.focusable = ['a[href]', 'area[href]', 'input', 'select', 'textarea', 'button', 'iframe', 'object', 'embed', '[tabindex]', '[contenteditable]']; + +// Extend original api defaults +$.extend(TRUE, QTIP.defaults, { + show: { + modal: { + on: FALSE, + effect: TRUE, + blur: TRUE, + stealfocus: TRUE, + escape: TRUE + } + } +}); + + +PLUGINS.viewport = function(api, position, posOptions, targetWidth, targetHeight, elemWidth, elemHeight) +{ + var target = posOptions.target, + tooltip = api.elements.tooltip, + my = posOptions.my, + at = posOptions.at, + adjust = posOptions.adjust, + method = adjust.method.split(' '), + methodX = method[0], + methodY = method[1] || method[0], + viewport = posOptions.viewport, + container = posOptions.container, + cache = api.cache, + tip = api.plugins.tip, + adjusted = { left: 0, top: 0 }, + fixed, newMy, newClass; + + // If viewport is not a jQuery element, or it's the window/document or no adjustment method is used... return + if(!viewport.jquery || target[0] === window || target[0] === document.body || adjust.method === 'none') { + return adjusted; + } + + // Cache our viewport details + fixed = tooltip.css('position') === 'fixed'; + viewport = { + elem: viewport, + height: viewport[ (viewport[0] === window ? 'h' : 'outerH') + 'eight' ](), + width: viewport[ (viewport[0] === window ? 'w' : 'outerW') + 'idth' ](), + scrollleft: fixed ? 0 : viewport.scrollLeft(), + scrolltop: fixed ? 0 : viewport.scrollTop(), + offset: viewport.offset() || { left: 0, top: 0 } + }; + container = { + elem: container, + scrollLeft: container.scrollLeft(), + scrollTop: container.scrollTop(), + offset: container.offset() || { left: 0, top: 0 } + }; + + // Generic calculation method + function calculate(side, otherSide, type, adjust, side1, side2, lengthName, targetLength, elemLength) { + var initialPos = position[side1], + mySide = my[side], atSide = at[side], + isShift = type === SHIFT, + viewportScroll = -container.offset[side1] + viewport.offset[side1] + viewport['scroll'+side1], + myLength = mySide === side1 ? elemLength : mySide === side2 ? -elemLength : -elemLength / 2, + atLength = atSide === side1 ? targetLength : atSide === side2 ? -targetLength : -targetLength / 2, + tipLength = tip && tip.size ? tip.size[lengthName] || 0 : 0, + tipAdjust = tip && tip.corner && tip.corner.precedance === side && !isShift ? tipLength : 0, + overflow1 = viewportScroll - initialPos + tipAdjust, + overflow2 = initialPos + elemLength - viewport[lengthName] - viewportScroll + tipAdjust, + offset = myLength - (my.precedance === side || mySide === my[otherSide] ? atLength : 0) - (atSide === CENTER ? targetLength / 2 : 0); + + // shift + if(isShift) { + tipAdjust = tip && tip.corner && tip.corner.precedance === otherSide ? tipLength : 0; + offset = (mySide === side1 ? 1 : -1) * myLength - tipAdjust; + + // Adjust position but keep it within viewport dimensions + position[side1] += overflow1 > 0 ? overflow1 : overflow2 > 0 ? -overflow2 : 0; + position[side1] = Math.max( + -container.offset[side1] + viewport.offset[side1] + (tipAdjust && tip.corner[side] === CENTER ? tip.offset : 0), + initialPos - offset, + Math.min( + Math.max(-container.offset[side1] + viewport.offset[side1] + viewport[lengthName], initialPos + offset), + position[side1] + ) + ); + } + + // flip/flipinvert + else { + // Update adjustment amount depending on if using flipinvert or flip + adjust *= (type === FLIPINVERT ? 2 : 0); + + // Check for overflow on the left/top + if(overflow1 > 0 && (mySide !== side1 || overflow2 > 0)) { + position[side1] -= offset + adjust; + newMy['invert'+side](side1); + } + + // Check for overflow on the bottom/right + else if(overflow2 > 0 && (mySide !== side2 || overflow1 > 0) ) { + position[side1] -= (mySide === CENTER ? -offset : offset) + adjust; + newMy['invert'+side](side2); + } + + // Make sure we haven't made things worse with the adjustment and reset if so + if(position[side1] < viewportScroll && -position[side1] > overflow2) { + position[side1] = initialPos; newMy = my.clone(); + } + } + + return position[side1] - initialPos; + } + + // Set newMy if using flip or flipinvert methods + if(methodX !== 'shift' || methodY !== 'shift') { newMy = my.clone(); } + + // Adjust position based onviewport and adjustment options + adjusted = { + left: methodX !== 'none' ? calculate( X, Y, methodX, adjust.x, LEFT, RIGHT, WIDTH, targetWidth, elemWidth ) : 0, + top: methodY !== 'none' ? calculate( Y, X, methodY, adjust.y, TOP, BOTTOM, HEIGHT, targetHeight, elemHeight ) : 0 + }; + + // Set tooltip position class if it's changed + if(newMy && cache.lastClass !== (newClass = NAMESPACE + '-pos-' + newMy.abbrev())) { + tooltip.removeClass(api.cache.lastClass).addClass( (api.cache.lastClass = newClass) ); + } + + return adjusted; +}; +PLUGINS.imagemap = function(api, area, corner, adjustMethod) +{ + if(!area.jquery) { area = $(area); } + + var cache = (api.cache.areas = {}), + shape = (area[0].shape || area.attr('shape')).toLowerCase(), + coordsString = area[0].coords || area.attr('coords'), + baseCoords = coordsString.split(','), + coords = [], + image = $('img[usemap="#'+area.parent('map').attr('name')+'"]'), + imageOffset = image.offset(), + result = { + width: 0, height: 0, + position: { + top: 1e10, right: 0, + bottom: 0, left: 1e10 + } + }, + i = 0, next = 0, dimensions; + + // POLY area coordinate calculator + // Special thanks to Ed Cradock for helping out with this. + // Uses a binary search algorithm to find suitable coordinates. + function polyCoordinates(result, coords, corner) + { + var i = 0, + compareX = 1, compareY = 1, + realX = 0, realY = 0, + newWidth = result.width, + newHeight = result.height; + + // Use a binary search algorithm to locate most suitable coordinate (hopefully) + while(newWidth > 0 && newHeight > 0 && compareX > 0 && compareY > 0) + { + newWidth = Math.floor(newWidth / 2); + newHeight = Math.floor(newHeight / 2); + + if(corner.x === LEFT){ compareX = newWidth; } + else if(corner.x === RIGHT){ compareX = result.width - newWidth; } + else{ compareX += Math.floor(newWidth / 2); } + + if(corner.y === TOP){ compareY = newHeight; } + else if(corner.y === BOTTOM){ compareY = result.height - newHeight; } + else{ compareY += Math.floor(newHeight / 2); } + + i = coords.length; while(i--) + { + if(coords.length < 2){ break; } + + realX = coords[i][0] - result.position.left; + realY = coords[i][1] - result.position.top; + + if((corner.x === LEFT && realX >= compareX) || + (corner.x === RIGHT && realX <= compareX) || + (corner.x === CENTER && (realX < compareX || realX > (result.width - compareX))) || + (corner.y === TOP && realY >= compareY) || + (corner.y === BOTTOM && realY <= compareY) || + (corner.y === CENTER && (realY < compareY || realY > (result.height - compareY)))) { + coords.splice(i, 1); + } + } + } + + return { left: coords[0][0], top: coords[0][1] }; + } + + // Make sure we account for padding and borders on the image + imageOffset.left += Math.ceil((image.outerWidth() - image.width()) / 2); + imageOffset.top += Math.ceil((image.outerHeight() - image.height()) / 2); + + // Parse coordinates into proper array + if(shape === 'poly') { + i = baseCoords.length; while(i--) + { + next = [ parseInt(baseCoords[--i], 10), parseInt(baseCoords[i+1], 10) ]; + + if(next[0] > result.position.right){ result.position.right = next[0]; } + if(next[0] < result.position.left){ result.position.left = next[0]; } + if(next[1] > result.position.bottom){ result.position.bottom = next[1]; } + if(next[1] < result.position.top){ result.position.top = next[1]; } + + coords.push(next); + } + } + else { + i = -1; while(i++ < baseCoords.length) { + coords.push( parseInt(baseCoords[i], 10) ); + } + } + + // Calculate details + switch(shape) + { + case 'rect': + result = { + width: Math.abs(coords[2] - coords[0]), + height: Math.abs(coords[3] - coords[1]), + position: { + left: Math.min(coords[0], coords[2]), + top: Math.min(coords[1], coords[3]) + } + }; + break; + + case 'circle': + result = { + width: coords[2] + 2, + height: coords[2] + 2, + position: { left: coords[0], top: coords[1] } + }; + break; + + case 'poly': + result.width = Math.abs(result.position.right - result.position.left); + result.height = Math.abs(result.position.bottom - result.position.top); + + if(corner.abbrev() === 'c') { + result.position = { + left: result.position.left + (result.width / 2), + top: result.position.top + (result.height / 2) + }; + } + else { + // Calculate if we can't find a cached value + if(!cache[corner+coordsString]) { + result.position = polyCoordinates(result, coords.slice(), corner); + + // If flip adjustment is enabled, also calculate the closest opposite point + if(adjustMethod && (adjustMethod[0] === 'flip' || adjustMethod[1] === 'flip')) { + result.offset = polyCoordinates(result, coords.slice(), { + x: corner.x === LEFT ? RIGHT : corner.x === RIGHT ? LEFT : CENTER, + y: corner.y === TOP ? BOTTOM : corner.y === BOTTOM ? TOP : CENTER + }); + + result.offset.left -= result.position.left; + result.offset.top -= result.position.top; + } + + // Store the result + cache[corner+coordsString] = result; + } + + // Grab the cached result + result = cache[corner+coordsString]; + } + + result.width = result.height = 0; + break; + } + + // Add image position to offset coordinates + result.position.left += imageOffset.left; + result.position.top += imageOffset.top; + + return result; +}; + + +/* + * BGIFrame adaption (http://plugins.jquery.com/project/bgiframe) + * Special thanks to Brandon Aaron + */ +function IE6(api) +{ + var self = this, + elems = api.elements, + options = api.options, + tooltip = elems.tooltip, + namespace = '.ie6-' + api.id, + bgiframe = $('select, object').length < 1, + isDrawing = 0, + modalProcessed = FALSE, + redrawContainer; + + api.checks.ie6 = { + '^content|style$': function(obj, o, v){ redraw(); } + }; + + $.extend(self, { + init: function() + { + var win = $(window), scroll; + + // Create the BGIFrame element if needed + if(bgiframe) { + elems.bgiframe = $(''); + + // Append the new element to the tooltip + elems.bgiframe.appendTo(tooltip); + + // Update BGIFrame on tooltip move + tooltip.bind('tooltipmove'+namespace, self.adjustBGIFrame); + } + + // redraw() container for width/height calculations + redrawContainer = $('
                                                ', { id: 'qtip-rcontainer' }) + .appendTo(document.body); + + // Set dimensions + self.redraw(); + + // Fixup modal plugin if present too + if(elems.overlay && !modalProcessed) { + scroll = function() { + elems.overlay[0].style.top = win.scrollTop() + 'px'; + }; + win.bind('scroll.qtip-ie6, resize.qtip-ie6', scroll); + scroll(); // Fire it initially too + + elems.overlay.addClass('qtipmodal-ie6fix'); // Add fix class + + modalProcessed = TRUE; // Set flag + } + }, + + adjustBGIFrame: function() + { + var dimensions = api.get('dimensions'), // Determine current tooltip dimensions + plugin = api.plugins.tip, + tip = elems.tip, + tipAdjust, offset; + + // Adjust border offset + offset = parseInt(tooltip.css('border-left-width'), 10) || 0; + offset = { left: -offset, top: -offset }; + + // Adjust for tips plugin + if(plugin && tip) { + tipAdjust = (plugin.corner.precedance === 'x') ? ['width', 'left'] : ['height', 'top']; + offset[ tipAdjust[1] ] -= tip[ tipAdjust[0] ](); + } + + // Update bgiframe + elems.bgiframe.css(offset).css(dimensions); + }, + + // Max/min width simulator function + redraw: function() + { + if(api.rendered < 1 || isDrawing) { return self; } + + var style = options.style, + container = options.position.container, + perc, width, max, min; + + // Set drawing flag + isDrawing = 1; + + // If tooltip has a set height/width, just set it... like a boss! + if(style.height) { tooltip.css(HEIGHT, style.height); } + if(style.width) { tooltip.css(WIDTH, style.width); } + + // Simulate max/min width if not set width present... + else { + // Reset width and add fluid class + tooltip.css(WIDTH, '').appendTo(redrawContainer); + + // Grab our tooltip width (add 1 if odd so we don't get wrapping problems.. huzzah!) + width = tooltip.width(); + if(width % 2 < 1) { width += 1; } + + // Grab our max/min properties + max = tooltip.css('max-width') || ''; + min = tooltip.css('min-width') || ''; + + // Parse into proper pixel values + perc = (max + min).indexOf('%') > -1 ? container.width() / 100 : 0; + max = ((max.indexOf('%') > -1 ? perc : 1) * parseInt(max, 10)) || width; + min = ((min.indexOf('%') > -1 ? perc : 1) * parseInt(min, 10)) || 0; + + // Determine new dimension size based on max/min/current values + width = max + min ? Math.min(Math.max(width, min), max) : width; + + // Set the newly calculated width and remvoe fluid class + tooltip.css(WIDTH, Math.round(width)).appendTo(container); + } + + // Set drawing flag + isDrawing = 0; + + return self; + }, + + destroy: function() + { + // Remove iframe + if(bgiframe) { elems.bgiframe.remove(); } + + // Remove bound events + tooltip.unbind(namespace); + } + }); + + self.init(); +} + +PLUGINS.ie6 = function(api) +{ + var browser = $.browser, + self = api.plugins.ie6; + + // Proceed only if the browser is IE6 + if(!(browser.msie && (''+browser.version).charAt(0) === '6')) { + return FALSE; + } + + return 'object' === typeof self ? self : (api.plugins.ie6 = new IE6(api)); +}; + +// Plugin needs to be initialized on render +PLUGINS.ie6.initialize = 'render'; + + +})); +}( window, document )); \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery.qtip.min.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery.qtip.min.css new file mode 100644 index 00000000..7cf08fe7 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery.qtip.min.css @@ -0,0 +1 @@ +/*! qTip2 v2.0.1-4-g (includes: svg ajax tips modal viewport imagemap ie6 / basic css3) | qtip2.com | Licensed MIT, GPL | Fri Jan 04 2013 04:05:40 */.qtip,.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;cursor:pointer;outline:medium none;border-width:1px;border-style:solid;border-color:transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-titlebar .ui-icon,.qtip-icon .ui-icon{display:block;text-indent:-1000em;direction:ltr;vertical-align:middle}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;text-align:center;text-indent:0;font:normal bold 10px/13px Tahoma,sans-serif;color:inherit;background:transparent none no-repeat -100em -100em}.qtip-focus{}.qtip-hover{}.qtip-default{border-width:1px;border-style:solid;border-color:#F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}/*! Light tooltip style */.qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}/*! Dark tooltip style */.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}/*! Cream tooltip style */.qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}/*! Red tooltip style */.qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon{border-color:#D95252}.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252}/*! Green tooltip style */.qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}/*! Blue tooltip style */.qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-rounded,.qtip-tipsy,.qtip-bootstrap{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-rounded .qtip-titlebar{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border-width:0;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black));background-image:-webkit-linear-gradient(top,#4A4A4A 0,black 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,black 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,black 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,black 100%)}.qtip-youtube .qtip-titlebar{background-color:#4A4A4A;background-color:rgba(0,0,0,0)}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323)"}.qtip-jtools .qtip-titlebar,.qtip-jtools .qtip-content{background:transparent;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px black}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:transparent}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml{position:absolute;color:#123456;background:transparent;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:-10000em;top:-10000em}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important} \ No newline at end of file diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery.qtip.min.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery.qtip.min.js new file mode 100644 index 00000000..228a3515 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/dist/jquery.qtip.min.js @@ -0,0 +1,2 @@ +/*! qTip2 v2.0.1-4-g (includes: svg ajax tips modal viewport imagemap ie6 / basic css3) | qtip2.com | Licensed MIT, GPL | Fri Jan 04 2013 04:05:40 */ +(function(e,t,n){(function(e){"use strict";typeof define=="function"&&define.amd?define(["jquery"],e):jQuery&&!jQuery.fn.qtip&&e(jQuery)})(function(r){function _(n){E={pageX:n.pageX,pageY:n.pageY,type:"mousemove",scrollX:e.pageXOffset||t.body.scrollLeft||t.documentElement.scrollLeft,scrollY:e.pageYOffset||t.body.scrollTop||t.documentElement.scrollTop}}function D(e){var t=function(e){return e===o||"object"!=typeof e},n=function(e){return!r.isFunction(e)&&(!e&&!e.attr||e.length<1||"object"==typeof e&&!e.jquery&&!e.then)};if(!e||"object"!=typeof e)return s;t(e.metadata)&&(e.metadata={type:e.metadata});if("content"in e){if(t(e.content)||e.content.jquery)e.content={text:e.content};n(e.content.text||s)&&(e.content.text=s),"title"in e.content&&(t(e.content.title)&&(e.content.title={text:e.content.title}),n(e.content.title.text||s)&&(e.content.title.text=s))}return"position"in e&&t(e.position)&&(e.position={my:e.position,at:e.position}),"show"in e&&t(e.show)&&(e.show=e.show.jquery?{target:e.show}:{event:e.show}),"hide"in e&&t(e.hide)&&(e.hide=e.hide.jquery?{target:e.hide}:{event:e.hide}),"style"in e&&t(e.style)&&(e.style={classes:e.style}),r.each(w,function(){this.sanitize&&this.sanitize(e)}),e}function P(u,a,f,l){function q(e){var t=0,n,r=a,i=e.split(".");while(r=r[i[t++]])t",{"class":"qtip-close "+(a.style.widget?"":S+"-icon"),title:n,"aria-label":n}).prepend(r("",{"class":"ui-icon ui-icon-close",html:"×"})),F.button.appendTo(F.titlebar||H).attr("role","button").click(function(e){return H.hasClass(j)||m.hide(e),s})}function X(){var e=y+"-title";F.titlebar&&z(),F.titlebar=r("
                                                ",{"class":S+"-titlebar "+(a.style.widget?R("header"):"")}).append(F.title=r("
                                                ",{id:e,"class":S+"-title","aria-atomic":i})).insertBefore(F.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(e){r(this).toggleClass("ui-state-active ui-state-focus",e.type.substr(-4)==="down")}).delegate(".qtip-close","mouseover mouseout",function(e){r(this).toggleClass("ui-state-hover",e.type==="mouseover")}),a.content.title.button&&W()}function V(e){var t=F.button;if(!m.rendered)return s;e?W():t.remove()}function J(e,t){var n=F.title;if(!m.rendered||!e)return s;r.isFunction(e)&&(e=e.call(u,I.event,m));if(e===s||!e&&e!=="")return z(s);e.jquery&&e.length>0?n.empty().append(e.css({display:"block"})):n.html(e),t!==s&&m.rendered&&H[0].offsetWidth>0&&m.reposition(I.event)}function K(e){e&&r.isFunction(e.done)&&e.done(function(e){Q(e,null,s)})}function Q(e,t,i){function f(e){function a(n){n&&(delete u[n.src],clearTimeout(m.timers.img[n.src]),r(n).unbind(B)),r.isEmptyObject(u)&&(t!==s&&m.reposition(I.event),e())}var i,u={};if((i=o.find("img[src]:not([height]):not([width])")).length===0)return a();i.each(function(e,t){if(u[t.src]!==n)return;var i=0,s=3;(function o(){if(t.height||t.width||i>s)return a(t);i+=1,m.timers.img[t.src]=setTimeout(o,700)})(),r(t).bind("error"+B+" load"+B,function(){a(this)}),u[t.src]=t})}var o=F.content;return!m.rendered||!e?s:(r.isFunction(e)&&(e=e.call(u,I.event,m)||""),i!==s&&K(a.content.deferred),e.jquery&&e.length>0?o.empty().append(e.css({display:"block"})):o.html(e),m.rendered<0?H.queue("fx",f):(P=0,f(r.noop)),m)}function G(){function h(e){if(H.hasClass(j))return s;clearTimeout(m.timers.show),clearTimeout(m.timers.hide);var t=function(){m.toggle(i,e)};a.show.delay>0?m.timers.show=setTimeout(t,a.show.delay):t()}function p(e){if(H.hasClass(j)||A||P)return s;var t=r(e.relatedTarget||e.target),i=t.closest(N)[0]===H[0],u=t[0]===o.show[0];clearTimeout(m.timers.show),clearTimeout(m.timers.hide);if(n.target==="mouse"&&i||a.hide.fixed&&/mouse(out|leave|move)/.test(e.type)&&(i||u)){try{e.preventDefault(),e.stopImmediatePropagation()}catch(f){}return}a.hide.delay>0?m.timers.hide=setTimeout(function(){m.hide(e)},a.hide.delay):m.hide(e)}function d(e){if(H.hasClass(j))return s;clearTimeout(m.timers.inactive),m.timers.inactive=setTimeout(function(){m.hide(e)},a.hide.inactive)}function v(e){m.rendered&&H[0].offsetWidth>0&&m.reposition(e)}var n=a.position,o={show:a.show.target,hide:a.hide.target,viewport:r(n.viewport),document:r(t),body:r(t.body),window:r(e)},l={show:r.trim(""+a.show.event).split(" "),hide:r.trim(""+a.hide.event).split(" ")},c=r.browser.msie&&parseInt(r.browser.version,10)===6;H.bind("mouseenter"+B+" mouseleave"+B,function(e){var t=e.type==="mouseenter";t&&m.focus(e),H.toggleClass(L,t)}),/mouse(out|leave)/i.test(a.hide.event)&&a.hide.leave==="window"&&o.window.bind("mouseout"+B+" blur"+B,function(e){!/select|option/.test(e.target.nodeName)&&!e.relatedTarget&&m.hide(e)}),a.hide.fixed?(o.hide=o.hide.add(H),H.bind("mouseover"+B,function(){H.hasClass(j)||clearTimeout(m.timers.hide)})):/mouse(over|enter)/i.test(a.show.event)&&o.hide.bind("mouseleave"+B,function(e){clearTimeout(m.timers.show)}),(""+a.hide.event).indexOf("unfocus")>-1&&n.container.closest("html").bind("mousedown"+B+" touchstart"+B,function(e){var t=r(e.target),n=m.rendered&&!H.hasClass(j)&&H[0].offsetWidth>0,i=t.parents(N).filter(H[0]).length>0;t[0]!==u[0]&&t[0]!==H[0]&&!i&&!u.has(t[0]).length&&!t.attr("disabled")&&m.hide(e)}),"number"==typeof a.hide.inactive&&(o.show.bind("qtip-"+f+"-inactive",d),r.each(b.inactiveEvents,function(e,t){o.hide.add(F.tooltip).bind(t+B+"-inactive",d)})),r.each(l.hide,function(e,t){var n=r.inArray(t,l.show),i=r(o.hide);n>-1&&i.add(o.show).length===i.length||t==="unfocus"?(o.show.bind(t+B,function(e){H[0].offsetWidth>0?p(e):h(e)}),delete l.show[n]):o.hide.bind(t+B,p)}),r.each(l.show,function(e,t){o.show.bind(t+B,h)}),"number"==typeof a.hide.distance&&o.show.add(H).bind("mousemove"+B,function(e){var t=I.origin||{},n=a.hide.distance,r=Math.abs;(r(e.pageX-t.pageX)>=n||r(e.pageY-t.pageY)>=n)&&m.hide(e)}),n.target==="mouse"&&(o.show.bind("mousemove"+B,_),n.adjust.mouse&&(a.hide.event&&(H.bind("mouseleave"+B,function(e){(e.relatedTarget||e.target)!==o.show[0]&&m.hide(e)}),F.target.bind("mouseenter"+B+" mouseleave"+B,function(e){I.onTarget=e.type==="mouseenter"})),o.document.bind("mousemove"+B,function(e){m.rendered&&I.onTarget&&!H.hasClass(j)&&H[0].offsetWidth>0&&m.reposition(e||E)}))),(n.adjust.resize||o.viewport.length)&&(r.event.special.resize?o.viewport:o.window).bind("resize"+B,v),o.window.add(n.container).bind("scroll"+B,v)}function Y(){var n=[a.show.target[0],a.hide.target[0],m.rendered&&F.tooltip[0],a.position.container[0],a.position.viewport[0],a.position.container.closest("html")[0],e,t];m.rendered?r([]).pushStack(r.grep(n,function(e){return typeof e=="object"})).unbind(B):a.show.target.unbind(B+"-create")}var m=this,g=t.body,y=S+"-"+f,A=0,P=0,H=r(),B=".qtip-"+f,j="qtip-disabled",F,I;m.id=f,m.rendered=s,m.destroyed=s,m.elements=F={target:u},m.timers={img:{}},m.options=a,m.checks={},m.plugins={},m.cache=I={event:{},target:r(),disabled:s,attr:l,onTarget:s,lastClass:""},m.checks.builtin={"^id$":function(e,t,n){var o=n===i?b.nextid:n,u=S+"-"+o;o!==s&&o.length>0&&!r("#"+u).length&&(H[0].id=u,F.content[0].id=u+"-content",F.title[0].id=u+"-title")},"^content.text$":function(e,t,n){Q(a.content.text)},"^content.deferred$":function(e,t,n){K(a.content.deferred)},"^content.title.text$":function(e,t,n){if(!n)return z();!F.title&&n&&X(),J(n)},"^content.title.button$":function(e,t,n){V(n)},"^position.(my|at)$":function(e,t,n){"string"==typeof n&&(e[t]=new w.Corner(n))},"^position.container$":function(e,t,n){m.rendered&&H.appendTo(n)},"^show.ready$":function(){m.rendered?m.toggle(i):m.render(1)},"^style.classes$":function(e,t,n){H.attr("class",S+" qtip "+n)},"^style.width|height":function(e,t,n){H.css(t,n)},"^style.widget|content.title":U,"^events.(render|show|move|hide|focus|blur)$":function(e,t,n){H[(r.isFunction(n)?"":"un")+"bind"]("tooltip"+t,n)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){var e=a.position;H.attr("tracking",e.target==="mouse"&&e.adjust.mouse),Y(),G()}},r.extend(m,{_triggerEvent:function(e,t,n){var i=r.Event("tooltip"+e);return i.originalEvent=(n?r.extend({},n):o)||I.event||o,H.trigger(i,[m].concat(t||[])),!i.isDefaultPrevented()},render:function(e){if(m.rendered)return m;var t=a.content.text,n=a.content.title,o=a.position;return r.attr(u[0],"aria-describedby",y),H=F.tooltip=r("
                                                ",{id:y,"class":[S,C,a.style.classes,S+"-pos-"+a.position.my.abbrev()].join(" "),width:a.style.width||"",height:a.style.height||"",tracking:o.target==="mouse"&&o.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":s,"aria-describedby":y+"-content","aria-hidden":i}).toggleClass(j,I.disabled).data("qtip",m).appendTo(a.position.container).append(F.content=r("
                                                ",{"class":S+"-content",id:y+"-content","aria-atomic":i})),m.rendered=-1,A=1,n.text?(X(),r.isFunction(n.text)||J(n.text,s)):n.button&&W(),(!r.isFunction(t)||t.then)&&Q(t,s),m.rendered=i,U(),r.each(a.events,function(e,t){r.isFunction(t)&&H.bind(e==="toggle"?"tooltipshow tooltiphide":"tooltip"+e,t)}),r.each(w,function(){this.initialize==="render"&&this(m)}),G(),H.queue("fx",function(t){m._triggerEvent("render"),A=0,(a.show.ready||e)&&m.toggle(i,I.event,s),t()}),m},get:function(e){var t,n;switch(e.toLowerCase()){case"dimensions":t={height:H.outerHeight(s),width:H.outerWidth(s)};break;case"offset":t=w.offset(H,a.position.container);break;default:n=q(e.toLowerCase()),t=n[0][n[1]],t=t.precedance?t.string():t}return t},set:function(e,t){function h(e,t){var n,r,i;for(n in l)for(r in l[n])if(i=(new RegExp(r,"i")).exec(e))t.push(i),l[n][r].apply(m,t)}var n=/^position\.(my|at|adjust|target|container)|style|content|show\.ready/i,u=/^content\.(title|attr)|style/i,f=s,l=m.checks,c;return"string"==typeof e?(c=e,e={},e[c]=t):e=r.extend(i,{},e),r.each(e,function(t,i){var s=q(t.toLowerCase()),o;o=s[0][s[1]],s[0][s[1]]="object"==typeof i&&i.nodeType?r(i):i,e[t]=[s[0],s[1],i,o],f=n.test(t)||f}),D(a),A=1,r.each(e,h),A=0,m.rendered&&H[0].offsetWidth>0&&f&&m.reposition(a.position.target==="mouse"?o:I.event),m},toggle:function(e,n){function b(){e?(r.browser.msie&&H[0].style.removeAttribute("filter"),H.css("overflow",""),"string"==typeof u.autofocus&&r(u.autofocus,H).focus(),u.target.trigger("qtip-"+f+"-inactive")):H.css({display:"",visibility:"",opacity:"",left:"",top:""}),m._triggerEvent(e?"visible":"hidden")}if(n){if(/over|enter/.test(n.type)&&/out|leave/.test(I.event.type)&&a.show.target.add(n.target).length===a.show.target.length&&H.has(n.relatedTarget).length)return m;I.event=r.extend({},n)}if(!m.rendered)return e?m.render(1):m;var o=e?"show":"hide",u=a[o],l=a[e?"hide":"show"],c=a.position,h=a.content,p=H[0].offsetWidth>0,d=e||u.target.length===1,v=!n||u.target.length<2||I.target[0]===n.target,g,y;return(typeof e).search("boolean|number")&&(e=!p),!H.is(":animated")&&p===e&&v?m:m._triggerEvent(o,[90])?(r.attr(H[0],"aria-hidden",!e),e?(I.origin=r.extend({},E),m.focus(n),r.isFunction(h.text)&&Q(h.text,s),r.isFunction(h.title.text)&&J(h.title.text,s),!M&&c.target==="mouse"&&c.adjust.mouse&&(r(t).bind("mousemove.qtip",_),M=i),m.reposition(n,arguments[2]),!u.solo||(typeof u.solo=="string"?r(u.solo):r(N,u.solo)).not(H).not(u.target).qtip("hide",r.Event("tooltipsolo"))):(clearTimeout(m.timers.show),delete I.origin,M&&!r(N+'[tracking="true"]:visible',u.solo).not(H).length&&(r(t).unbind("mousemove.qtip"),M=s),m.blur(n)),u.effect===s||d===s?(H[o](),b.call(H)):r.isFunction(u.effect)?(H.stop(1,1),u.effect.call(H,m),H.queue("fx",function(e){b(),e()})):H.fadeTo(90,e?1:0,b),e&&u.target.trigger("qtip-"+f+"-inactive"),m):m},show:function(e){return m.toggle(i,e)},hide:function(e){return m.toggle(s,e)},focus:function(e){if(!m.rendered)return m;var t=r(N),n=parseInt(H[0].style.zIndex,10),i=b.zindex+t.length,s=r.extend({},e),o;return H.hasClass(k)||m._triggerEvent("focus",[i],s)&&(n!==i&&(t.each(function(){this.style.zIndex>n&&(this.style.zIndex=this.style.zIndex-1)}),t.filter("."+k).qtip("blur",s)),H.addClass(k)[0].style.zIndex=i),m},blur:function(e){return H.removeClass(k),m._triggerEvent("blur",[H.css("zIndex")],e),m},reposition:function(n,i){if(!m.rendered||A)return m;A=1;var o=a.position.target,u=a.position,f=u.my,l=u.at,g=u.adjust,y=g.method.split(" "),b=H.outerWidth(s),S=H.outerHeight(s),x=0,T=0,N=H.css("position"),C=u.viewport,k={left:0,top:0},L=u.container,O=H[0].offsetWidth>0,M=n&&n.type==="scroll",_=r(e),D,P;if(r.isArray(o)&&o.length===2)l={x:h,y:c},k={left:o[0],top:o[1]};else if(o==="mouse"&&(n&&n.pageX||I.event.pageX))l={x:h,y:c},n=E&&E.pageX&&(g.mouse||!n||!n.pageX)?{pageX:E.pageX,pageY:E.pageY}:(!n||n.type!=="resize"&&n.type!=="scroll"?n&&n.pageX&&n.type==="mousemove"?n:(!g.mouse||a.show.distance)&&I.origin&&I.origin.pageX?I.origin:n:I.event)||n||I.event||E||{},N!=="static"&&(k=L.offset()),k={left:n.pageX-k.left,top:n.pageY-k.top},g.mouse&&M&&(k.left-=E.scrollX-_.scrollLeft(),k.top-=E.scrollY-_.scrollTop());else{o==="event"&&n&&n.target&&n.type!=="scroll"&&n.type!=="resize"?I.target=r(n.target):o!=="event"&&(I.target=r(o.jquery?o:F.target)),o=I.target,o=r(o).eq(0);if(o.length===0)return m;o[0]===t||o[0]===e?(x=w.iOS?e.innerWidth:o.width(),T=w.iOS?e.innerHeight:o.height(),o[0]===e&&(k={top:(C||o).scrollTop(),left:(C||o).scrollLeft()})):w.imagemap&&o.is("area")?D=w.imagemap(m,o,l,w.viewport?y:s):w.svg&&o[0].ownerSVGElement?D=w.svg(m,o,l,w.viewport?y:s):(x=o.outerWidth(s),T=o.outerHeight(s),k=w.offset(o,L)),D&&(x=D.width,T=D.height,P=D.offset,k=D.position);if(w.iOS>3.1&&w.iOS<4.1||w.iOS>=4.3&&w.iOS<4.33||!w.iOS&&N==="fixed")k.left-=_.scrollLeft(),k.top-=_.scrollTop();k.left+=l.x===d?x:l.x===v?x/2:0,k.top+=l.y===p?T:l.y===v?T/2:0}return k.left+=g.x+(f.x===d?-b:f.x===v?-b/2:0),k.top+=g.y+(f.y===p?-S:f.y===v?-S/2:0),w.viewport?(k.adjusted=w.viewport(m,k,u,x,T,b,S),P&&k.adjusted.left&&(k.left+=P.left),P&&k.adjusted.top&&(k.top+=P.top)):k.adjusted={left:0,top:0},m._triggerEvent("move",[k,C.elem||C],n)?(delete k.adjusted,i===s||!O||isNaN(k.left)||isNaN(k.top)||o==="mouse"||!r.isFunction(u.effect)?H.css(k):r.isFunction(u.effect)&&(u.effect.call(H,m,r.extend({},k)),H.queue(function(e){r(this).css({opacity:"",height:""}),r.browser.msie&&this.style.removeAttribute("filter"),e()})),A=0,m):m},disable:function(e){return"boolean"!=typeof e&&(e=!H.hasClass(j)&&!I.disabled),m.rendered?(H.toggleClass(j,e),r.attr(H[0],"aria-disabled",e)):I.disabled=!!e,m},enable:function(){return m.disable(s)},destroy:function(){var e=u[0],t=r.attr(e,O),n=u.data("qtip");m.destroyed=i,m.rendered&&(H.stop(1,0).remove(),r.each(m.plugins,function(){this.destroy&&this.destroy()})),clearTimeout(m.timers.show),clearTimeout(m.timers.hide),Y();if(!n||m===n)r.removeData(e,"qtip"),a.suppress&&t&&(r.attr(e,"title",t),u.removeAttr(O)),u.removeAttr("aria-describedby");return u.unbind(".qtip-"+f),delete x[m.id],u}})}function H(e,n){var u,a,f,l,c,h=r(this),p=r(t.body),d=this===t?p:h,v=h.metadata?h.metadata(n.metadata):o,m=n.metadata.type==="html5"&&v?v[n.metadata.name]:o,g=h.data(n.metadata.name||"qtipopts");try{g=typeof g=="string"?r.parseJSON(g):g}catch(y){}l=r.extend(i,{},b.defaults,n,typeof g=="object"?D(g):o,D(m||v)),a=l.position,l.id=e;if("boolean"==typeof l.content.text){f=h.attr(l.content.attr);if(l.content.attr===s||!f)return s;l.content.text=f}a.container.length||(a.container=p),a.target===s&&(a.target=d),l.show.target===s&&(l.show.target=d),l.show.solo===i&&(l.show.solo=a.container.closest("body")),l.hide.target===s&&(l.hide.target=d),l.position.viewport===i&&(l.position.viewport=a.container),a.container=a.container.eq(0),a.at=new w.Corner(a.at),a.my=new w.Corner(a.my);if(r.data(this,"qtip"))if(l.overwrite)h.qtip("destroy");else if(l.overwrite===s)return s;return l.suppress&&(c=r.attr(this,"title"))&&r(this).removeAttr("title").attr(O,c).attr("title",""),u=new P(h,l,e,!!f),r.data(this,"qtip",u),h.bind("remove.qtip-"+e+" removeqtip.qtip-"+e,function(){u.destroy()}),u}function B(e){var t=this,n=e.elements.tooltip,o=e.options.content.ajax,u=b.defaults.content.ajax,a=".qtip-ajax",f=/)<[^<]*)*<\/script>/gi,l=i,c=s,h;e.checks.ajax={"^content.ajax":function(e,r,i){r==="ajax"&&(o=i),r==="once"?t.init():o&&o.url?t.load():n.unbind(a)}},r.extend(t,{init:function(){return o&&o.url&&n.unbind(a)[o.once?"one":"bind"]("tooltipshow"+a,t.load),t},load:function(n){function g(){var t;if(e.destroyed)return;l=s,v&&(c=i,e.show(n.originalEvent)),(t=u.complete||o.complete)&&r.isFunction(t)&&t.apply(o.context||e,arguments)}function y(t,n,i){var s;if(e.destroyed)return;d&&"string"==typeof t&&(t=r("
                                                ").append(t.replace(f,"")).find(d)),(s=u.success||o.success)&&r.isFunction(s)?s.call(o.context||e,t,n,i):e.set("content.text",t)}function b(t,n,r){if(e.destroyed||t.status===0)return;e.set("content.text",n+": "+r)}if(c){c=s;return}var a=o.url.lastIndexOf(" "),p=o.url,d,v=!o.loading&&l;if(v)try{n.preventDefault()}catch(m){}else if(n&&n.isDefaultPrevented())return t;h&&h.abort&&h.abort(),a>-1&&(d=p.substr(a),p=p.substr(0,a)),h=r.ajax(r.extend({error:u.error||b,context:e},o,{url:p,success:y,complete:g}))},destroy:function(){h&&h.abort&&h.abort(),e.destroyed=i}}),t.init()}function j(e,t,n){var r=Math.ceil(t/2),i=Math.ceil(n/2),s={bottomright:[[0,0],[t,n],[t,0]],bottomleft:[[0,0],[t,0],[0,n]],topright:[[0,n],[t,0],[t,n]],topleft:[[0,0],[0,n],[t,n]],topcenter:[[0,n],[r,0],[t,n]],bottomcenter:[[0,0],[t,0],[r,n]],rightcenter:[[0,0],[t,i],[0,n]],leftcenter:[[t,0],[t,n],[0,i]]};return s.lefttop=s.bottomright,s.righttop=s.bottomleft,s.leftbottom=s.topright,s.rightbottom=s.topleft,s[e.string()]}function F(e,t){function A(e){var t=E.is(":visible");E.show(),e(),E.toggle(t)}function O(){x.width=g.height,x.height=g.width}function M(){x.width=g.width,x.height=g.height}function _(t,r,o,f){if(!b.tip)return;var l=m.corner.clone(),w=o.adjusted,E=e.options.position.adjust.method.split(" "),x=E[0],T=E[1]||E[0],N={left:s,top:s,x:0,y:0},C,k={},L;m.corner.fixed!==i&&(x===y&&l.precedance===u&&w.left&&l.y!==v?l.precedance=l.precedance===u?a:u:x!==y&&w.left&&(l.x=l.x===v?w.left>0?h:d:l.x===h?d:h),T===y&&l.precedance===a&&w.top&&l.x!==v?l.precedance=l.precedance===a?u:a:T!==y&&w.top&&(l.y=l.y===v?w.top>0?c:p:l.y===c?p:c),l.string()!==S.corner.string()&&(S.top!==w.top||S.left!==w.left)&&m.update(l,s)),C=m.position(l,w),C[l.x]+=P(l,l.x),C[l.y]+=P(l,l.y),C.right!==n&&(C.left=-C.right),C.bottom!==n&&(C.top=-C.bottom),C.user=Math.max(0,g.offset);if(N.left=x===y&&!!w.left)l.x===v?k["margin-left"]=N.x=C["margin-left"]:(L=C.right!==n?[w.left,-C.left]:[-w.left,C.left],(N.x=Math.max(L[0],L[1]))>L[0]&&(o.left-=w.left,N.left=s),k[C.right!==n?d:h]=N.x);if(N.top=T===y&&!!w.top)l.y===v?k["margin-top"]=N.y=C["margin-top"]:(L=C.bottom!==n?[w.top,-C.top]:[-w.top,C.top],(N.y=Math.max(L[0],L[1]))>L[0]&&(o.top-=w.top,N.top=s),k[C.bottom!==n?p:c]=N.y);b.tip.css(k).toggle(!(N.x&&N.y||l.x===v&&N.y||l.y===v&&N.x)),o.left-=C.left.charAt?C.user:x!==y||N.top||!N.left&&!N.top?C.left:0,o.top-=C.top.charAt?C.user:T!==y||N.left||!N.left&&!N.top?C.top:0,S.left=w.left,S.top=w.top,S.corner=l.clone()}function D(){var t=g.corner,n=e.options.position,r=n.at,o=n.my.string?n.my.string():n.my;return t===s||o===s&&r===s?s:(t===i?m.corner=new w.Corner(o):t.string||(m.corner=new w.Corner(t),m.corner.fixed=i),S.corner=new w.Corner(m.corner.string()),m.corner.string()!=="centercenter")}function P(e,t,n){t=t?t:e[e.precedance];var r=b.titlebar&&e.y===c,i=r?b.titlebar:E,s="border-"+t+"-width",o=function(e){return parseInt(e.css(s),10)},u;return A(function(){u=(n?o(n):o(b.content)||o(i)||o(E))||0}),u}function H(e){var t=b.titlebar&&e.y===c,n=t?b.titlebar:b.content,i=r.browser.mozilla,s=i?"-moz-":r.browser.webkit?"-webkit-":"",o="border-radius-"+e.y+e.x,u="border-"+e.y+"-"+e.x+"-radius",a=function(e){return parseInt(n.css(e),10)||parseInt(E.css(e),10)},f;return A(function(){f=a(u)||a(s+u)||a(s+o)||a(o)||0}),f}function B(e){function N(e,t,n){var r=e.css(t)||p;return n&&r===e.css(n)?s:f.test(r)?s:r}var t,n,o,u=b.tip.css("cssText",""),a=e||m.corner,f=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,l="border-"+a[a.precedance]+"-color",h="background-color",p="transparent",d=" !important",y=b.titlebar,w=y&&(a.y===c||a.y===v&&u.position().top+x.height/2+g.offset-1,s=n*(i?.5:1),o=Math.pow,u=Math.round,c,h,p,d=Math.sqrt(o(s,2)+o(r,2)),m=[N/s*d,N/r*d];return m[2]=Math.sqrt(o(m[0],2)-o(N,2)),m[3]=Math.sqrt(o(m[1],2)-o(N,2)),c=d+m[2]+m[3]+(i?0:m[0]),h=c/d,p=[u(h*r),u(h*n)],{height:p[t?0:1],width:p[t?1:0]}}function I(e,t,n){return"'}var m=this,g=e.options.style.tip,b=e.elements,E=b.tooltip,S={top:0,left:0},x={width:g.width,height:g.height},T={},N=g.border||0,C=".qtip-tip",k=!!(r("")[0]||{}).getContext,L;m.corner=o,m.mimic=o,m.border=N,m.offset=g.offset,m.size=x,e.checks.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){m.init()||m.destroy(),e.reposition()},"^style.tip.(height|width)$":function(){x={width:g.width,height:g.height},m.create(),m.update(),e.reposition()},"^content.title.text|style.(classes|widget)$":function(){b.tip&&b.tip.length&&m.update()}},r.extend(m,{init:function(){var e=D()&&(k||r.browser.msie);return e&&(m.create(),m.update(),E.unbind(C).bind("tooltipmove"+C,_)),e},create:function(){var e=x.width,t=x.height,n;b.tip&&b.tip.remove(),b.tip=r("
                                                ",{"class":"qtip-tip"}).css({width:e,height:t}).prependTo(E),k?r("").appendTo(b.tip)[0].getContext("2d").save():(n=I("shape",'coordorigin="0,0"',"position:absolute;"),b.tip.html(n+n),r("*",b.tip).bind("click mousedown",function(e){e.stopPropagation()}))},update:function(e,t){var n=b.tip,f=n.children(),l=x.width,y=x.height,C=g.mimic,L=Math.round,A,_,D,H,q;e||(e=S.corner||m.corner),C===s?C=e:(C=new w.Corner(C),C.precedance=e.precedance,C.x==="inherit"?C.x=e.x:C.y==="inherit"?C.y=e.y:C.x===C.y&&(C[e.precedance]=e[e.precedance])),A=C.precedance,e.precedance===u?O():M(),b.tip.css({width:l=x.width,height:y=x.height}),B(e),T.border!=="transparent"?(N=P(e,o),g.border===0&&N>0&&(T.fill=T.border),m.border=N=g.border!==i?g.border:N):m.border=N=0,D=j(C,l,y),m.size=q=F(e),n.css(q).css("line-height",q.height+"px"),e.precedance===a?H=[L(C.x===h?N:C.x===d?q.width-l-N:(q.width-l)/2),L(C.y===c?q.height-y:0)]:H=[L(C.x===h?q.width-l:0),L(C.y===c?N:C.y===p?q.height-y-N:(q.height-y)/2)],k?(f.attr(q),_=f[0].getContext("2d"),_.restore(),_.save(),_.clearRect(0,0,3e3,3e3),_.fillStyle=T.fill,_.strokeStyle=T.border,_.lineWidth=N*2,_.lineJoin="miter",_.miterLimit=100,_.translate(H[0],H[1]),_.beginPath(),_.moveTo(D[0][0],D[0][1]),_.lineTo(D[1][0],D[1][1]),_.lineTo(D[2][0],D[2][1]),_.closePath(),N&&(E.css("background-clip")==="border-box"&&(_.strokeStyle=T.fill,_.stroke()),_.strokeStyle=T.border,_.stroke()),_.fill()):(D="m"+D[0][0]+","+D[0][1]+" l"+D[1][0]+","+D[1][1]+" "+D[2][0]+","+D[2][1]+" xe",H[2]=N&&/^(r|b)/i.test(e.string())?parseFloat(r.browser.version,10)===8?2:1:0,f.css({coordsize:l+N+" "+(y+N),antialias:""+(C.string().indexOf(v)>-1),left:H[0],top:H[1],width:l+N,height:y+N}).each(function(e){var t=r(this);t[t.prop?"prop":"attr"]({coordsize:l+N+" "+(y+N),path:D,fillcolor:T.fill,filled:!!e,stroked:!e}).toggle(!!N||!!e),!e&&t.html()===""&&t.html(I("stroke",'weight="'+N*2+'px" color="'+T.border+'" miterlimit="1000" joinstyle="miter"'))})),t!==s&&m.position(e)},position:function(e){var t=b.tip,n={},i=Math.max(0,g.offset),o,p,d;return g.corner===s||!t?s:(e=e||m.corner,o=e.precedance,p=F(e),d=[e.x,e.y],o===u&&d.reverse(),r.each(d,function(t,r){var s,u,d;r===v?(s=o===a?h:c,n[s]="50%",n["margin-"+s]=-Math.round(p[o===a?f:l]/2)+i):(s=P(e,r),u=P(e,r,b.content),d=H(e),n[r]=t?u:i+(d>s?d:-s))}),n[e[o]]-=p[o===u?f:l],t.css({top:"",bottom:"",left:"",right:"",margin:""}).css(n),n)},destroy:function(){b.tip&&b.tip.remove(),b.tip=!1,E.unbind(C)}}),m.init()}function I(n){function y(){m=r(v,f).not("[disabled]").map(function(){return typeof this.focus=="function"?this:null})}function b(e){m.length<1&&e.length?e.not("body").blur():m.first().focus()}function E(e){var t=r(e.target),n=t.closest(".qtip"),i;i=n.length<1?s:parseInt(n[0].style.zIndex,10)>parseInt(f[0].style.zIndex,10),!i&&r(e.target).closest(N)[0]!==f[0]&&b(t)}var o=this,u=n.options.show.modal,a=n.elements,f=a.tooltip,l="#qtip-overlay",c=".qtipmodal",h=c+n.id,p="is-modal-qtip",d=r(t.body),v=w.modal.focusable.join(","),m={},g;n.checks.modal={"^show.modal.(on|blur)$":function(){o.init(),a.overlay.toggle(f.is(":visible"))},"^content.text$":function(){y()}},r.extend(o,{init:function(){return u.on?(g=o.create(),f.attr(p,i).css("z-index",w.modal.zindex+r(N+"["+p+"]").length).unbind(c).unbind(h).bind("tooltipshow"+c+" tooltiphide"+c,function(e,t,n){var i=e.originalEvent;if(e.target===f[0])if(i&&e.type==="tooltiphide"&&/mouse(leave|enter)/.test(i.type)&&r(i.relatedTarget).closest(g[0]).length)try{e.preventDefault()}catch(s){}else(!i||i&&!i.solo)&&o[e.type.replace("tooltip","")](e,n)}).bind("tooltipfocus"+c,function(e){if(e.isDefaultPrevented()||e.target!==f[0])return;var t=r(N).filter("["+p+"]"),n=w.modal.zindex+t.length,i=parseInt(f[0].style.zIndex,10);g[0].style.zIndex=n-2,t.each(function(){this.style.zIndex>i&&(this.style.zIndex-=1)}),t.end().filter("."+k).qtip("blur",e.originalEvent),f.addClass(k)[0].style.zIndex=n;try{e.preventDefault()}catch(s){}}).bind("tooltiphide"+c,function(e){e.target===f[0]&&r("["+p+"]").filter(":visible").not(f).last().qtip("focus",e)}),u.escape&&r(t).unbind(h).bind("keydown"+h,function(e){e.keyCode===27&&f.hasClass(k)&&n.hide(e)}),u.blur&&a.overlay.unbind(h).bind("click"+h,function(e){f.hasClass(k)&&n.hide(e)}),y(),o):o},create:function(){function i(){g.css({height:n.height(),width:n.width()})}var t=r(l),n=r(e);return t.length?a.overlay=t.insertAfter(r(N).last()):(g=a.overlay=r("
                                                ",{id:l.substr(1),html:"
                                                ",mousedown:function(){return s}}).hide().insertAfter(r(N).last()),n.unbind(c).bind("resize"+c,i),i(),g)},toggle:function(e,t,n){if(e&&e.isDefaultPrevented())return o;var a=u.effect,l=t?"show":"hide",c=g.is(":visible"),v=r("["+p+"]").filter(":visible").not(f),m;return g||(g=o.create()),g.is(":animated")&&c===t&&g.data("toggleState")!==s||!t&&v.length?o:(t?(g.css({left:0,top:0}),g.toggleClass("blurs",u.blur),u.stealfocus!==s&&(d.bind("focusin"+h,E),b(r("body :focus")))):d.unbind("focusin"+h),g.stop(i,s).data("toggleState",t),r.isFunction(a)?a.call(g,t):a===s?g[l]():g.fadeTo(parseInt(n,10)||90,t?1:0,function(){t||r(this).hide()}),t||g.queue(function(e){g.css({left:"",top:""}).removeData("toggleState"),e()}),o)},show:function(e,t){return o.toggle(e,i,t)},hide:function(e,t){return o.toggle(e,s,t)},destroy:function(){var e=g;return e&&(e=r("["+p+"]").not(f).length<1,e?(a.overlay.remove(),r(t).unbind(c)):a.overlay.unbind(c+n.id),d.unbind("focusin"+h)),f.removeAttr(p).unbind(c)}}),o.init()}function q(n){var o=this,u=n.elements,a=n.options,c=u.tooltip,h=".ie6-"+n.id,p=r("select, object").length<1,d=0,v=s,m;n.checks.ie6={"^content|style$":function(e,t,n){redraw()}},r.extend(o,{init:function(){var n=r(e),s;p&&(u.bgiframe=r(''),u.bgiframe.appendTo(c),c.bind("tooltipmove"+h,o.adjustBGIFrame)),m=r("
                                                ",{id:"qtip-rcontainer"}).appendTo(t.body),o.redraw(),u.overlay&&!v&&(s=function(){u.overlay[0].style.top=n.scrollTop()+"px"},n.bind("scroll.qtip-ie6, resize.qtip-ie6",s),s(),u.overlay.addClass("qtipmodal-ie6fix"),v=i)},adjustBGIFrame:function(){var e=n.get("dimensions"),t=n.plugins.tip,r=u.tip,i,s;s=parseInt(c.css("border-left-width"),10)||0,s={left:-s,top:-s},t&&r&&(i=t.corner.precedance==="x"?["width","left"]:["height","top"],s[i[1]]-=r[i[0]]()),u.bgiframe.css(s).css(e)},redraw:function(){if(n.rendered<1||d)return o;var e=a.style,t=a.position.container,r,i,s,u;return d=1,e.height&&c.css(l,e.height),e.width?c.css(f,e.width):(c.css(f,"").appendTo(m),i=c.width(),i%2<1&&(i+=1),s=c.css("max-width")||"",u=c.css("min-width")||"",r=(s+u).indexOf("%")>-1?t.width()/100:0,s=(s.indexOf("%")>-1?r:1)*parseInt(s,10)||i,u=(u.indexOf("%")>-1?r:1)*parseInt(u,10)||0,i=s+u?Math.min(Math.max(i,u),s):i,c.css(f,Math.round(i)).appendTo(t)),d=0,o},destroy:function(){p&&u.bgiframe.remove(),c.unbind(h)}}),o.init()}var i=!0,s=!1,o=null,u="x",a="y",f="width",l="height",c="top",h="left",p="bottom",d="right",v="center",m="flip",g="flipinvert",y="shift",b,w,E,S="qtip",x={},T=["ui-widget","ui-tooltip"],N="div.qtip."+S,C=S+"-default",k=S+"-focus",L=S+"-hover",A="_replacedByqTip",O="oldtitle",M;b=r.fn.qtip=function(e,t,u){var a=(""+e).toLowerCase(),f=o,l=r.makeArray(arguments).slice(1),c=l[l.length-1],h=this[0]?r.data(this[0],"qtip"):o;if(!arguments.length&&h||a==="api")return h;if("string"==typeof e)return this.each(function(){var e=r.data(this,"qtip");if(!e)return i;c&&c.timeStamp&&(e.cache.event=c);if(a!=="option"&&a!=="options"||!t)e[a]&&e[a].apply(e[a],l);else{if(!r.isPlainObject(t)&&u===n)return f=e.get(t),s;e.set(t,u)}}),f!==o?f:this;if("object"==typeof e||!arguments.length)return h=D(r.extend(i,{},e)),b.bind.call(this,h,c)},b.bind=function(e,t){return this.each(function(o){function p(e){function t(){c.render(typeof e=="object"||u.show.ready),a.show.add(a.hide).unbind(l)}if(c.cache.disabled)return s;c.cache.event=r.extend({},e),c.cache.target=e?r(e.target):[n],u.show.delay>0?(clearTimeout(c.timers.show),c.timers.show=setTimeout(t,u.show.delay),f.show!==f.hide&&a.hide.bind(f.hide,function(){clearTimeout(c.timers.show)})):t()}var u,a,f,l,c,h;h=r.isArray(e.id)?e.id[o]:e.id,h=!h||h===s||h.length<1||x[h]?b.nextid++:x[h]=h,l=".qtip-"+h+"-create",c=H.call(this,h,e);if(c===s)return i;u=c.options,r.each(w,function(){this.initialize==="initialize"&&this(c)}),a={show:u.show.target,hide:u.hide.target},f={show:r.trim(""+u.show.event).replace(/ /g,l+" ")+l,hide:r.trim(""+u.hide.event).replace(/ /g,l+" ")+l},/mouse(over|enter)/i.test(f.show)&&!/mouse(out|leave)/i.test(f.hide)&&(f.hide+=" mouseleave"+l),a.show.bind("mousemove"+l,function(e){_(e),c.cache.onTarget=i}),a.show.bind(f.show,p),(u.show.ready||u.prerender)&&p(t)}).attr("data-hasqtip",i)},w=b.plugins={Corner:function(e){e=(""+e).replace(/([A-Z])/," $1").replace(/middle/gi,v).toLowerCase(),this.x=(e.match(/left|right/i)||e.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(e.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase();var t=e.charAt(0);this.precedance=t==="t"||t==="b"?a:u,this.string=function(){return this.precedance===a?this.y+this.x:this.x+this.y},this.abbrev=function(){var e=this.x.substr(0,1),t=this.y.substr(0,1);return e===t?e:this.precedance===a?t+e:e+t},this.invertx=function(e){this.x=this.x===h?d:this.x===d?h:e||this.x},this.inverty=function(e){this.y=this.y===c?p:this.y===p?c:e||this.y},this.clone=function(){return{x:this.x,y:this.y,precedance:this.precedance,string:this.string,abbrev:this.abbrev,clone:this.clone,invertx:this.invertx,inverty:this.inverty}}},offset:function(e,n){function c(e,t){i.left+=t*e.scrollLeft(),i.top+=t*e.scrollTop()}var i=e.offset(),s=e.closest("body"),o=r.browser.msie&&t.compatMode!=="CSS1Compat",u=n,a,f,l;if(u){do u.css("position")!=="static"&&(f=u.position(),i.left-=f.left+(parseInt(u.css("borderLeftWidth"),10)||0)+(parseInt(u.css("marginLeft"),10)||0),i.top-=f.top+(parseInt(u.css("borderTopWidth"),10)||0)+(parseInt(u.css("marginTop"),10)||0),!a&&(l=u.css("overflow"))!=="hidden"&&l!=="visible"&&(a=u));while((u=r(u[0].offsetParent)).length);(a&&a[0]!==s[0]||o)&&c(a||s,1)}return i},iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||s,fn:{attr:function(e,t){if(this.length){var n=this[0],i="title",s=r.data(n,"qtip");if(e===i&&s&&"object"==typeof s&&s.options.suppress)return arguments.length<2?r.attr(n,O):(s&&s.options.content.attr===i&&s.cache.attr&&s.set("content.text",t),this.attr(O,t))}return r.fn["attr"+A].apply(this,arguments)},clone:function(e){var t=r([]),n="title",i=r.fn["clone"+A].apply(this,arguments);return e||i.filter("["+O+"]").attr("title",function(){return r.attr(this,O)}).removeAttr(O),i}}},r.each(w.fn,function(e,t){if(!t||r.fn[e+A])return i;var n=r.fn[e+A]=r.fn[e];r.fn[e]=function(){return t.apply(this,arguments)||n.apply(this,arguments)}}),r.ui||(r["cleanData"+A]=r.cleanData,r.cleanData=function(e){for(var t=0,i;(i=e[t])!==n;t++)try{r(i).triggerHandler("removeqtip")}catch(s){}r["cleanData"+A](e)}),b.version="2.0.1-4-g",b.nextid=0,b.inactiveEvents="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),b.zindex=15e3,b.defaults={prerender:s,id:s,overwrite:i,suppress:i,content:{text:i,attr:"title",deferred:s,title:{text:s,button:s}},position:{my:"top left",at:"bottom right",target:s,container:s,viewport:s,adjust:{x:0,y:0,mouse:i,resize:i,method:"flipinvert flipinvert"},effect:function(e,t,n){r(this).animate(t,{duration:200,queue:s})}},show:{target:s,event:"mouseenter",effect:i,delay:90,solo:s,ready:s,autofocus:s},hide:{target:s,event:"mouseleave",effect:i,delay:0,fixed:s,inactive:s,leave:"window",distance:s},style:{classes:"",widget:s,width:s,height:s,def:i},events:{render:o,move:o,show:o,hide:o,toggle:o,visible:o,hidden:o,focus:o,blur:o}},w.svg=function(e,n,i,s){var o=r(t),u=n[0],a={width:0,height:0,position:{top:1e10,left:1e10}},f,l,c,h,p;while(!u.getBBox)u=u.parentNode;if(u.getBBox&&u.parentNode){f=u.getBBox(),l=u.getScreenCTM(),c=u.farthestViewportElement||u;if(!c.createSVGPoint)return a;h=c.createSVGPoint(),h.x=f.x,h.y=f.y,p=h.matrixTransform(l),a.position.left=p.x,a.position.top=p.y,h.x+=f.width,h.y+=f.height,p=h.matrixTransform(l),a.width=p.x-a.position.left,a.height=p.y-a.position.top,a.position.left+=o.scrollLeft(),a.position.top+=o.scrollTop()}return a},w.ajax=function(e){var t=e.plugins.ajax;return"object"==typeof t?t:e.plugins.ajax=new B(e)},w.ajax.initialize="render",w.ajax.sanitize=function(e){var t=e.content,n;t&&"ajax"in t&&(n=t.ajax,typeof n!="object"&&(n=e.content.ajax={url:n}),"boolean"!=typeof n.once&&n.once&&(n.once=!!n.once))},r.extend(i,b.defaults,{content:{ajax:{loading:i,once:i}}}),w.tip=function(e){var t=e.plugins.tip;return"object"==typeof t?t:e.plugins.tip=new F(e)},w.tip.initialize="render",w.tip.sanitize=function(e){var t=e.style,n;t&&"tip"in t&&(n=e.style.tip,typeof n!="object"&&(e.style.tip={corner:n}),/string|boolean/i.test(typeof n.corner)||(n.corner=i),typeof n.width!="number"&&delete n.width,typeof n.height!="number"&&delete n.height,typeof n.border!="number"&&n.border!==i&&delete n.border,typeof n.offset!="number"&&delete n.offset)},r.extend(i,b.defaults,{style:{tip:{corner:i,mimic:s,width:6,height:6,border:i,offset:0}}}),w.modal=function(e){var t=e.plugins.modal;return"object"==typeof t?t:e.plugins.modal=new I(e)},w.modal.initialize="render",w.modal.sanitize=function(e){e.show&&(typeof e.show.modal!="object"?e.show.modal={on:!!e.show.modal}:typeof e.show.modal.on=="undefined"&&(e.show.modal.on=i))},w.modal.zindex=b.zindex-200,w.modal.focusable=["a[href]","area[href]","input","select","textarea","button","iframe","object","embed","[tabindex]","[contenteditable]"],r.extend(i,b.defaults,{show:{modal:{on:s,effect:i,blur:i,stealfocus:i,escape:i}}}),w.viewport=function(n,r,i,s,o,m,b){function j(e,t,n,i,s,o,u,a,f){var l=r[s],c=x[e],h=T[e],p=n===y,d=-O.offset[s]+A.offset[s]+A["scroll"+s],m=c===s?f:c===o?-f:-f/2,b=h===s?a:h===o?-a:-a/2,w=_&&_.size?_.size[u]||0:0,E=_&&_.corner&&_.corner.precedance===e&&!p?w:0,S=d-l+E,N=l+f-A[u]-d+E,C=m-(x.precedance===e||c===x[t]?b:0)-(h===v?a/2:0);return p?(E=_&&_.corner&&_.corner.precedance===t?w:0,C=(c===s?1:-1)*m-E,r[s]+=S>0?S:N>0?-N:0,r[s]=Math.max(-O.offset[s]+A.offset[s]+(E&&_.corner[e]===v?_.offset:0),l-C,Math.min(Math.max(-O.offset[s]+A.offset[s]+A[u],l+C),r[s]))):(i*=n===g?2:0,S>0&&(c!==s||N>0)?(r[s]-=C+i,H["invert"+e](s)):N>0&&(c!==o||S>0)&&(r[s]-=(c===v?-C:C)+i,H["invert"+e](o)),r[s]N&&(r[s]=l,H=x.clone())),r[s]-l}var w=i.target,E=n.elements.tooltip,x=i.my,T=i.at,N=i.adjust,C=N.method.split(" "),k=C[0],L=C[1]||C[0],A=i.viewport,O=i.container,M=n.cache,_=n.plugins.tip,D={left:0,top:0},P,H,B;if(!A.jquery||w[0]===e||w[0]===t.body||N.method==="none")return D;P=E.css("position")==="fixed",A={elem:A,height:A[(A[0]===e?"h":"outerH")+"eight"](),width:A[(A[0]===e?"w":"outerW")+"idth"](),scrollleft:P?0:A.scrollLeft(),scrolltop:P?0:A.scrollTop(),offset:A.offset()||{left:0,top:0}},O={elem:O,scrollLeft:O.scrollLeft(),scrollTop:O.scrollTop(),offset:O.offset()||{left:0,top:0}};if(k!=="shift"||L!=="shift")H=x.clone();return D={left:k!=="none"?j(u,a,k,N.x,h,d,f,s,m):0,top:L!=="none"?j(a,u,L,N.y,c,p,l,o,b):0},H&&M.lastClass!==(B=S+"-pos-"+H.abbrev())&&E.removeClass(n.cache.lastClass).addClass(n.cache.lastClass=B),D},w.imagemap=function(e,t,n,i){function E(e,t,n){var r=0,i=1,s=1,o=0,u=0,a=e.width,f=e.height;while(a>0&&f>0&&i>0&&s>0){a=Math.floor(a/2),f=Math.floor(f/2),n.x===h?i=a:n.x===d?i=e.width-a:i+=Math.floor(a/2),n.y===c?s=f:n.y===p?s=e.height-f:s+=Math.floor(f/2),r=t.length;while(r--){if(t.length<2)break;o=t[r][0]-e.position.left,u=t[r][1]-e.position.top,(n.x===h&&o>=i||n.x===d&&o<=i||n.x===v&&(oe.width-i)||n.y===c&&u>=s||n.y===p&&u<=s||n.y===v&&(ue.height-s))&&t.splice(r,1)}}return{left:t[0][0],top:t[0][1]}}t.jquery||(t=r(t));var s=e.cache.areas={},o=(t[0].shape||t.attr("shape")).toLowerCase(),u=t[0].coords||t.attr("coords"),a=u.split(","),f=[],l=r('img[usemap="#'+t.parent("map").attr("name")+'"]'),m=l.offset(),g={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10}},y=0,b=0,w;m.left+=Math.ceil((l.outerWidth()-l.width())/2),m.top+=Math.ceil((l.outerHeight()-l.height())/2);if(o==="poly"){y=a.length;while(y--)b=[parseInt(a[--y],10),parseInt(a[y+1],10)],b[0]>g.position.right&&(g.position.right=b[0]),b[0]g.position.bottom&&(g.position.bottom=b[1]),b[1]'); +}()); diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/libs/jquery/jquery.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/libs/jquery/jquery.js new file mode 100644 index 00000000..3774ff98 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/qTip2/libs/jquery/jquery.js @@ -0,0 +1,9404 @@ +/*! + * jQuery JavaScript Library v1.7.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Wed Mar 21 12:46:34 2012 -0700 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context ? context.ownerDocument || context : document ); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.7.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).off( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery.Callbacks( "once memory" ); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array, i ) { + var len; + + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && array[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; + +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; + } + return object; +} + +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + fired = true; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + return this; + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for ( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; + } + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for ( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; + } +}); + + + + +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + tds, + events, + eventName, + i, + isSupported, + div = document.createElement( "div" ), + documentElement = document.documentElement; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
                                                a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + pixelMargin: true + }; + + // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead + jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: 1, + change: 1, + focusin: 1 + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + fragment.removeChild( div ); + + // Null elements to avoid leaks in IE + fragment = select = opt = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, + paddingMarginBorderVisibility, paddingMarginBorder, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + paddingMarginBorder = "padding:0;margin:0;border:"; + positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; + paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; + html = "
                                                " + + "" + + "
                                                "; + + container = document.createElement("div"); + container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
                                                t
                                                "; + tds = div.getElementsByTagName( "td" ); + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + div.innerHTML = ""; + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.width = div.style.padding = "1px"; + div.style.border = 0; + div.style.overflow = "hidden"; + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
                                                "; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + } + + div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + if ( window.getComputedStyle ) { + div.style.marginTop = "1%"; + support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; + } + + if ( typeof container.style.zoom !== "undefined" ) { + container.style.zoom = 1; + } + + body.removeChild( container ); + marginDiv = div = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + return support; +})(); + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ internalKey ] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ internalKey ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + } else { + elem[ internalKey ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise( object ); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = ( value || "" ).split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + attrNames = value.toLowerCase().split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.nodeValue = value + "" ); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); + + + + +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /(?:^|\s)hover(\.\S+)?\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + var attrs = elem.attributes || {}; + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || (attrs.id || {}).value === m[2]) && + (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + quick: selector && quickParse( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, origType, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + old = null; + for ( ; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = [], + i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process events on disabled elements (#6911, #8165) + if ( cur.disabled !== true ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + ret; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context, seed ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set, seed ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + filter = Expr.filter[ type ]; + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + pass = not ^ found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + !type && Sizzle.attr ? + result != null : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} +// Expose origPOS +// "global" as in regardless of relation to brackets/parens +Expr.match.globalPOS = origPOS; + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

                                                "; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
                                                "; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context, seed ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet, seed ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.globalPOS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /]", "i"), + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*", "" ], + legend: [ 1, "
                                                ", "
                                                " ], + thead: [ 1, "", "
                                                " ], + tr: [ 2, "", "
                                                " ], + td: [ 3, "", "
                                                " ], + col: [ 2, "", "
                                                " ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and + + + + + + +
                                                +
                                                +

                                                Toolbar.Js

                                                +

                                                A jQuery plugin that creates tooltip style toolbars

                                                +

                                                +
                                                +
                                                +

                                                Toolbar allows you to quickly create tooltip style toolbars for use in web applications and websites. The toolbar is easily customisable using the twitter bootstrap icons and provides flexibility around the toolbars display and number of icons.

                                                +
                                                + +
                                                +

                                                Features

                                                +
                                                  +
                                                • Straightforward implementation with simple options
                                                • +
                                                • Can run as many toolbars as required
                                                • +
                                                • Toolbars can be attached to any element required
                                                • +
                                                • Toobar icons are easily customised through the popular twitter bootstrap framework
                                                • +
                                                • Toolbars are responsive and follow the element on resize
                                                • +
                                                +
                                                + +
                                                +

                                                Examples

                                                + +
                                                +

                                                Horizontal toolbar (top)

                                                +
                                                +
                                                +
                                                +
                                                +JS +
                                                +$('#user-toolbar').toolbar({
                                                +	content: '#user-toolbar-options',
                                                +	position: 'top'
                                                +});
                                                +HTML +
                                                +<div id="user-toolbar-options">
                                                +	<a href="#"><i class="icon-user"></i></a>
                                                +	<a href="#"><i class="icon-star"></i></a>
                                                +	<a href="#"><i class="icon-edit"></i></a>
                                                +	<a href="#"><i class="icon-delete"></i></a>
                                                +	<a href="#"><i class="icon-ban"></i></a>
                                                +</div>
                                                +
                                                + +
                                                +
                                                +
                                                + + +
                                                +

                                                Horizontal toolbar (bottom)

                                                +
                                                +
                                                +
                                                +
                                                +JS +
                                                +$('#user-toolbar').toolbar({
                                                +	content: '#user-toolbar-options',
                                                +	position: 'bottom'
                                                +});
                                                +HTML +
                                                +<div id="user-toolbar-options">
                                                +	<a href="#"><i class="icon-user"></i></a>
                                                +	<a href="#"><i class="icon-star"></i></a>
                                                +	<a href="#"><i class="icon-edit"></i></a>
                                                +	<a href="#"><i class="icon-delete"></i></a>
                                                +	<a href="#"><i class="icon-ban"></i></a>
                                                +</div>
                                                +
                                                + +
                                                +
                                                +
                                                + +
                                                +

                                                Horizontal toolbar with three items

                                                +
                                                +
                                                +
                                                +
                                                +JS +
                                                +$('#format-toolbar').toolbar({
                                                +	content: '#format-toolbar-options',
                                                +	position: 'top',
                                                +	hideOnClick: true
                                                +});
                                                + +HTML +
                                                +<div id="format-toolbar-options">
                                                +	<a href="#"><i class="icon-align-left"></i></a>
                                                +	<a href="#"><i class="icon-align-center"></i></a>
                                                +	<a href="#"><i class="icon-align-right"></i></a>
                                                +</div>
                                                +
                                                + +
                                                +
                                                +
                                                + + +
                                                +

                                                Vertical toolbar (left)

                                                + +
                                                + + +
                                                +
                                                +JS +
                                                +$('#vertical-toolbar').toolbar({
                                                +	content: '#user-toolbar-options',
                                                +	position: 'left'
                                                +});
                                                + +HTML +
                                                +<div id="user-toolbar-options">
                                                +	<a href="#"><i class="icon-user"></i></a>
                                                +	<a href="#"><i class="icon-star"></i></a>
                                                +	<a href="#"><i class="icon-edit"></i></a>
                                                +	<a href="#"><i class="icon-delete"></i></a>
                                                +	<a href="#"><i class="icon-ban"></i></a>
                                                +</div>
                                                +
                                                +
                                                +
                                                +
                                                + +
                                                +

                                                Vertical toolbar (right)

                                                + +
                                                + + +
                                                +
                                                +JS +
                                                +$('#vertical-toolbar').toolbar({
                                                +	content: '#user-toolbar-options',
                                                +	position: 'right'
                                                +});
                                                + +HTML +
                                                +<div id="user-toolbar-options">
                                                +	<a href="#"><i class="icon-user"></i></a>
                                                +	<a href="#"><i class="icon-star"></i></a>
                                                +	<a href="#"><i class="icon-edit"></i></a>
                                                +	<a href="#"><i class="icon-delete"></i></a>
                                                +	<a href="#"><i class="icon-ban"></i></a>
                                                +</div>
                                                +
                                                +
                                                +
                                                +
                                                + +
                                                +

                                                Horizontal toolbar triggered by a link

                                                +
                                                + Options +
                                                +
                                                +JS +
                                                +$('#normal-button').toolbar({
                                                +	content: '#user-options',
                                                +	position: 'top'
                                                +});
                                                +HTML +
                                                +<div id="user-toolbar-options">
                                                +	<a href="#"><i class="icon-user"></i></a>
                                                +	<a href="#"><i class="icon-star"></i></a>
                                                +	<a href="#"><i class="icon-edit"></i></a>
                                                +	<a href="#"><i class="icon-delete"></i></a>
                                                +	<a href="#"><i class="icon-ban"></i></a>
                                                +</div>
                                                +
                                                + +
                                                +
                                                +
                                                +
                                                +
                                                + +

                                                Usage

                                                + +Include the plugin javascript file along with jquery +
                                                +<script src="jquery.min.js"></script>
                                                +<script src="jquery.toolbar.js"></script>
                                                +
                                                +
                                                + +Include the css files +
                                                +<link href="jquery.toolbar.css" rel="stylesheet" />
                                                +<link href="bootstrap.icons.css" rel="stylesheet" />
                                                +
                                                +
                                                + +Define your toolbar HTML +
                                                +<div id="user-toolbar-options">
                                                +	<a href="#"><i class="icon-user"></i></a>
                                                +	<a href="#"><i class="icon-star"></i></a>
                                                +	<a href="#"><i class="icon-edit"></i></a>
                                                +	<a href="#"><i class="icon-delete"></i></a>
                                                +	<a href="#"><i class="icon-ban"></i></a>
                                                +</div>
                                                +
                                                +
                                                + +Attach the toolbar to an element passing in your options as an object. Available options are detailed below. +
                                                +$('#element').toolbar( options );
                                                +
                                                + +
                                                + +

                                                Notes

                                                + +
                                                  +
                                                • The element that triggers the toolbar will gain the class .pressed when the toolbar is visible.
                                                • +
                                                • Define any javascript for icon actions before calling the toolbar.
                                                • +
                                                + +
                                                + +
                                                +

                                                Options

                                                + + + + + + + + + + + + + + + + + + + + + +
                                                OptionDescription
                                                contentThe id of the element containing the icons HTML.
                                                positionIndicates the display position of the toobar relative to the element its attached agaisnt. Select either 'top', 'bottom', 'left' or 'right. Default: top.
                                                hideOnClickChoose if you want the toolbar to hide when anywhere outside the toolbar is clicked. Default: false.
                                                + +
                                                +

                                                Methods

                                                +

                                                Below is a list of methods available on the elements that already have a toolbar instantiated

                                                + + + + + + + + + + + + + + + +
                                                MethodArgumentsDescription
                                                getToolbarElementNoneObtain the element that wraps every tool button
                                                + +
                                                +

                                                Events

                                                +

                                                Below are a list of events that are triggered when certain events happen with the toolbar. You can listen for these events using the .on method.

                                                +For example. +
                                                +$('#element').on('toolbarShown',
                                                +	function( event ) {
                                                +		// this: the element the toolbar is attached to
                                                +	}
                                                +);
                                                +
                                                + +
                                                + + + + + + + + + + + + + + + + + + + + + +
                                                EventDescription
                                                toolbarShownTriggered when the toolbar is shown.
                                                toolbarHiddenTriggered when the toolbar is hidden.
                                                toolbarItemClickTriggered when a button in the toolbar is clicked. The toolbar item clicked is also passed through for this event.
                                                + +
                                                + +
                                                + + +
                                                + + + + + + diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/documentation/js/prettify.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/documentation/js/prettify.js new file mode 100644 index 00000000..ac895e79 --- /dev/null +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/documentation/js/prettify.js @@ -0,0 +1,1477 @@ +// Copyright (C) 2006 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview + * some functions for browser-side pretty printing of code contained in html. + * + *

                                                + * For a fairly comprehensive set of languages see the + * README + * file that came with this source. At a minimum, the lexer should work on a + * number of languages including C and friends, Java, Python, Bash, SQL, HTML, + * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk + * and a subset of Perl, but, because of commenting conventions, doesn't work on + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. + *

                                                + * Usage:

                                                  + *
                                                1. include this source file in an html page via + * {@code } + *
                                                2. define style rules. See the example page for examples. + *
                                                3. mark the {@code
                                                  } and {@code } tags in your source with
                                                  + *    {@code class=prettyprint.}
                                                  + *    You can also use the (html deprecated) {@code } tag, but the pretty
                                                  + *    printer needs to do more substantial DOM manipulations to support that, so
                                                  + *    some css styles may not be preserved.
                                                  + * </ol>
                                                  + * That's it.  I wanted to keep the API as simple as possible, so there's no
                                                  + * need to specify which language the code is in, but if you wish, you can add
                                                  + * another class to the {@code <pre>} or {@code <code>} element to specify the
                                                  + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
                                                  + * starts with "lang-" followed by a file extension, specifies the file type.
                                                  + * See the "lang-*.js" files in this directory for code that implements
                                                  + * per-language file handlers.
                                                  + * <p>
                                                  + * Change log:<br>
                                                  + * cbeust, 2006/08/22
                                                  + * <blockquote>
                                                  + *   Java annotations (start with "@") are now captured as literals ("lit")
                                                  + * </blockquote>
                                                  + * @requires console
                                                  + */
                                                  +
                                                  +// JSLint declarations
                                                  +/*global console, document, navigator, setTimeout, window */
                                                  +
                                                  +/**
                                                  + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
                                                  + * UI events.
                                                  + * If set to {@code false}, {@code prettyPrint()} is synchronous.
                                                  + */
                                                  +window['PR_SHOULD_USE_CONTINUATION'] = true;
                                                  +
                                                  +(function () {
                                                  +  // Keyword lists for various languages.
                                                  +  // We use things that coerce to strings to make them compact when minified
                                                  +  // and to defeat aggressive optimizers that fold large string constants.
                                                  +  var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"];
                                                  +  var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," + 
                                                  +      "double,enum,extern,float,goto,int,long,register,short,signed,sizeof," +
                                                  +      "static,struct,switch,typedef,union,unsigned,void,volatile"];
                                                  +  var COMMON_KEYWORDS = [C_KEYWORDS,"catch,class,delete,false,import," +
                                                  +      "new,operator,private,protected,public,this,throw,true,try,typeof"];
                                                  +  var CPP_KEYWORDS = [COMMON_KEYWORDS,"alignof,align_union,asm,axiom,bool," +
                                                  +      "concept,concept_map,const_cast,constexpr,decltype," +
                                                  +      "dynamic_cast,explicit,export,friend,inline,late_check," +
                                                  +      "mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast," +
                                                  +      "template,typeid,typename,using,virtual,where"];
                                                  +  var JAVA_KEYWORDS = [COMMON_KEYWORDS,
                                                  +      "abstract,boolean,byte,extends,final,finally,implements,import," +
                                                  +      "instanceof,null,native,package,strictfp,super,synchronized,throws," +
                                                  +      "transient"];
                                                  +  var CSHARP_KEYWORDS = [JAVA_KEYWORDS,
                                                  +      "as,base,by,checked,decimal,delegate,descending,dynamic,event," +
                                                  +      "fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock," +
                                                  +      "object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed," +
                                                  +      "stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];
                                                  +  var COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally," +
                                                  +      "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," +
                                                  +      "true,try,unless,until,when,while,yes";
                                                  +  var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS,
                                                  +      "debugger,eval,export,function,get,null,set,undefined,var,with," +
                                                  +      "Infinity,NaN"];
                                                  +  var PERL_KEYWORDS = "caller,delete,die,do,dump,elsif,eval,exit,foreach,for," +
                                                  +      "goto,if,import,last,local,my,next,no,our,print,package,redo,require," +
                                                  +      "sub,undef,unless,until,use,wantarray,while,BEGIN,END";
                                                  +  var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "and,as,assert,class,def,del," +
                                                  +      "elif,except,exec,finally,from,global,import,in,is,lambda," +
                                                  +      "nonlocal,not,or,pass,print,raise,try,with,yield," +
                                                  +      "False,True,None"];
                                                  +  var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "alias,and,begin,case,class," +
                                                  +      "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," +
                                                  +      "rescue,retry,self,super,then,true,undef,unless,until,when,yield," +
                                                  +      "BEGIN,END"];
                                                  +  var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "case,done,elif,esac,eval,fi," +
                                                  +      "function,in,local,set,then,until"];
                                                  +  var ALL_KEYWORDS = [
                                                  +      CPP_KEYWORDS, CSHARP_KEYWORDS, JSCRIPT_KEYWORDS, PERL_KEYWORDS +
                                                  +      PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS];
                                                  +  var C_TYPES = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;
                                                  +
                                                  +  // token style names.  correspond to css classes
                                                  +  /**
                                                  +   * token style for a string literal
                                                  +   * @const
                                                  +   */
                                                  +  var PR_STRING = 'str';
                                                  +  /**
                                                  +   * token style for a keyword
                                                  +   * @const
                                                  +   */
                                                  +  var PR_KEYWORD = 'kwd';
                                                  +  /**
                                                  +   * token style for a comment
                                                  +   * @const
                                                  +   */
                                                  +  var PR_COMMENT = 'com';
                                                  +  /**
                                                  +   * token style for a type
                                                  +   * @const
                                                  +   */
                                                  +  var PR_TYPE = 'typ';
                                                  +  /**
                                                  +   * token style for a literal value.  e.g. 1, null, true.
                                                  +   * @const
                                                  +   */
                                                  +  var PR_LITERAL = 'lit';
                                                  +  /**
                                                  +   * token style for a punctuation string.
                                                  +   * @const
                                                  +   */
                                                  +  var PR_PUNCTUATION = 'pun';
                                                  +  /**
                                                  +   * token style for a punctuation string.
                                                  +   * @const
                                                  +   */
                                                  +  var PR_PLAIN = 'pln';
                                                  +
                                                  +  /**
                                                  +   * token style for an sgml tag.
                                                  +   * @const
                                                  +   */
                                                  +  var PR_TAG = 'tag';
                                                  +  /**
                                                  +   * token style for a markup declaration such as a DOCTYPE.
                                                  +   * @const
                                                  +   */
                                                  +  var PR_DECLARATION = 'dec';
                                                  +  /**
                                                  +   * token style for embedded source.
                                                  +   * @const
                                                  +   */
                                                  +  var PR_SOURCE = 'src';
                                                  +  /**
                                                  +   * token style for an sgml attribute name.
                                                  +   * @const
                                                  +   */
                                                  +  var PR_ATTRIB_NAME = 'atn';
                                                  +  /**
                                                  +   * token style for an sgml attribute value.
                                                  +   * @const
                                                  +   */
                                                  +  var PR_ATTRIB_VALUE = 'atv';
                                                  +
                                                  +  /**
                                                  +   * A class that indicates a section of markup that is not code, e.g. to allow
                                                  +   * embedding of line numbers within code listings.
                                                  +   * @const
                                                  +   */
                                                  +  var PR_NOCODE = 'nocode';
                                                  +
                                                  +
                                                  +
                                                  +/**
                                                  + * A set of tokens that can precede a regular expression literal in
                                                  + * javascript
                                                  + * http://web.archive.org/web/20070717142515/http://www.mozilla.org/js/language/js20/rationale/syntax.html
                                                  + * has the full list, but I've removed ones that might be problematic when
                                                  + * seen in languages that don't support regular expression literals.
                                                  + *
                                                  + * <p>Specifically, I've removed any keywords that can't precede a regexp
                                                  + * literal in a syntactically legal javascript program, and I've removed the
                                                  + * "in" keyword since it's not a keyword in many languages, and might be used
                                                  + * as a count of inches.
                                                  + *
                                                  + * <p>The link a above does not accurately describe EcmaScript rules since
                                                  + * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
                                                  + * very well in practice.
                                                  + *
                                                  + * @private
                                                  + * @const
                                                  + */
                                                  +var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*';
                                                  +
                                                  +// CAVEAT: this does not properly handle the case where a regular
                                                  +// expression immediately follows another since a regular expression may
                                                  +// have flags for case-sensitivity and the like.  Having regexp tokens
                                                  +// adjacent is not valid in any language I'm aware of, so I'm punting.
                                                  +// TODO: maybe style special characters inside a regexp as punctuation.
                                                  +
                                                  +
                                                  +  /**
                                                  +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
                                                  +   * matches the union of the sets of strings matched by the input RegExp.
                                                  +   * Since it matches globally, if the input strings have a start-of-input
                                                  +   * anchor (/^.../), it is ignored for the purposes of unioning.
                                                  +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
                                                  +   * @return {RegExp} a global regex.
                                                  +   */
                                                  +  function combinePrefixPatterns(regexs) {
                                                  +    var capturedGroupIndex = 0;
                                                  +  
                                                  +    var needToFoldCase = false;
                                                  +    var ignoreCase = false;
                                                  +    for (var i = 0, n = regexs.length; i < n; ++i) {
                                                  +      var regex = regexs[i];
                                                  +      if (regex.ignoreCase) {
                                                  +        ignoreCase = true;
                                                  +      } else if (/[a-z]/i.test(regex.source.replace(
                                                  +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
                                                  +        needToFoldCase = true;
                                                  +        ignoreCase = false;
                                                  +        break;
                                                  +      }
                                                  +    }
                                                  +  
                                                  +    var escapeCharToCodeUnit = {
                                                  +      'b': 8,
                                                  +      't': 9,
                                                  +      'n': 0xa,
                                                  +      'v': 0xb,
                                                  +      'f': 0xc,
                                                  +      'r': 0xd
                                                  +    };
                                                  +  
                                                  +    function decodeEscape(charsetPart) {
                                                  +      var cc0 = charsetPart.charCodeAt(0);
                                                  +      if (cc0 !== 92 /* \\ */) {
                                                  +        return cc0;
                                                  +      }
                                                  +      var c1 = charsetPart.charAt(1);
                                                  +      cc0 = escapeCharToCodeUnit[c1];
                                                  +      if (cc0) {
                                                  +        return cc0;
                                                  +      } else if ('0' <= c1 && c1 <= '7') {
                                                  +        return parseInt(charsetPart.substring(1), 8);
                                                  +      } else if (c1 === 'u' || c1 === 'x') {
                                                  +        return parseInt(charsetPart.substring(2), 16);
                                                  +      } else {
                                                  +        return charsetPart.charCodeAt(1);
                                                  +      }
                                                  +    }
                                                  +  
                                                  +    function encodeEscape(charCode) {
                                                  +      if (charCode < 0x20) {
                                                  +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
                                                  +      }
                                                  +      var ch = String.fromCharCode(charCode);
                                                  +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
                                                  +        ch = '\\' + ch;
                                                  +      }
                                                  +      return ch;
                                                  +    }
                                                  +  
                                                  +    function caseFoldCharset(charSet) {
                                                  +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
                                                  +          new RegExp(
                                                  +              '\\\\u[0-9A-Fa-f]{4}'
                                                  +              + '|\\\\x[0-9A-Fa-f]{2}'
                                                  +              + '|\\\\[0-3][0-7]{0,2}'
                                                  +              + '|\\\\[0-7]{1,2}'
                                                  +              + '|\\\\[\\s\\S]'
                                                  +              + '|-'
                                                  +              + '|[^-\\\\]',
                                                  +              'g'));
                                                  +      var groups = [];
                                                  +      var ranges = [];
                                                  +      var inverse = charsetParts[0] === '^';
                                                  +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
                                                  +        var p = charsetParts[i];
                                                  +        if (/\\[bdsw]/i.test(p)) {  // Don't muck with named groups.
                                                  +          groups.push(p);
                                                  +        } else {
                                                  +          var start = decodeEscape(p);
                                                  +          var end;
                                                  +          if (i + 2 < n && '-' === charsetParts[i + 1]) {
                                                  +            end = decodeEscape(charsetParts[i + 2]);
                                                  +            i += 2;
                                                  +          } else {
                                                  +            end = start;
                                                  +          }
                                                  +          ranges.push([start, end]);
                                                  +          // If the range might intersect letters, then expand it.
                                                  +          // This case handling is too simplistic.
                                                  +          // It does not deal with non-latin case folding.
                                                  +          // It works for latin source code identifiers though.
                                                  +          if (!(end < 65 || start > 122)) {
                                                  +            if (!(end < 65 || start > 90)) {
                                                  +              ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
                                                  +            }
                                                  +            if (!(end < 97 || start > 122)) {
                                                  +              ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
                                                  +            }
                                                  +          }
                                                  +        }
                                                  +      }
                                                  +  
                                                  +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
                                                  +      // -> [[1, 12], [14, 14], [16, 17]]
                                                  +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
                                                  +      var consolidatedRanges = [];
                                                  +      var lastRange = [NaN, NaN];
                                                  +      for (var i = 0; i < ranges.length; ++i) {
                                                  +        var range = ranges[i];
                                                  +        if (range[0] <= lastRange[1] + 1) {
                                                  +          lastRange[1] = Math.max(lastRange[1], range[1]);
                                                  +        } else {
                                                  +          consolidatedRanges.push(lastRange = range);
                                                  +        }
                                                  +      }
                                                  +  
                                                  +      var out = ['['];
                                                  +      if (inverse) { out.push('^'); }
                                                  +      out.push.apply(out, groups);
                                                  +      for (var i = 0; i < consolidatedRanges.length; ++i) {
                                                  +        var range = consolidatedRanges[i];
                                                  +        out.push(encodeEscape(range[0]));
                                                  +        if (range[1] > range[0]) {
                                                  +          if (range[1] + 1 > range[0]) { out.push('-'); }
                                                  +          out.push(encodeEscape(range[1]));
                                                  +        }
                                                  +      }
                                                  +      out.push(']');
                                                  +      return out.join('');
                                                  +    }
                                                  +  
                                                  +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
                                                  +      // Split into character sets, escape sequences, punctuation strings
                                                  +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
                                                  +      // include any of the above.
                                                  +      var parts = regex.source.match(
                                                  +          new RegExp(
                                                  +              '(?:'
                                                  +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
                                                  +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
                                                  +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
                                                  +              + '|\\\\[0-9]+'  // a back-reference or octal escape
                                                  +              + '|\\\\[^ux0-9]'  // other escape sequence
                                                  +              + '|\\(\\?[:!=]'  // start of a non-capturing group
                                                  +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
                                                  +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
                                                  +              + ')',
                                                  +              'g'));
                                                  +      var n = parts.length;
                                                  +  
                                                  +      // Maps captured group numbers to the number they will occupy in
                                                  +      // the output or to -1 if that has not been determined, or to
                                                  +      // undefined if they need not be capturing in the output.
                                                  +      var capturedGroups = [];
                                                  +  
                                                  +      // Walk over and identify back references to build the capturedGroups
                                                  +      // mapping.
                                                  +      for (var i = 0, groupIndex = 0; i < n; ++i) {
                                                  +        var p = parts[i];
                                                  +        if (p === '(') {
                                                  +          // groups are 1-indexed, so max group index is count of '('
                                                  +          ++groupIndex;
                                                  +        } else if ('\\' === p.charAt(0)) {
                                                  +          var decimalValue = +p.substring(1);
                                                  +          if (decimalValue && decimalValue <= groupIndex) {
                                                  +            capturedGroups[decimalValue] = -1;
                                                  +          }
                                                  +        }
                                                  +      }
                                                  +  
                                                  +      // Renumber groups and reduce capturing groups to non-capturing groups
                                                  +      // where possible.
                                                  +      for (var i = 1; i < capturedGroups.length; ++i) {
                                                  +        if (-1 === capturedGroups[i]) {
                                                  +          capturedGroups[i] = ++capturedGroupIndex;
                                                  +        }
                                                  +      }
                                                  +      for (var i = 0, groupIndex = 0; i < n; ++i) {
                                                  +        var p = parts[i];
                                                  +        if (p === '(') {
                                                  +          ++groupIndex;
                                                  +          if (capturedGroups[groupIndex] === undefined) {
                                                  +            parts[i] = '(?:';
                                                  +          }
                                                  +        } else if ('\\' === p.charAt(0)) {
                                                  +          var decimalValue = +p.substring(1);
                                                  +          if (decimalValue && decimalValue <= groupIndex) {
                                                  +            parts[i] = '\\' + capturedGroups[groupIndex];
                                                  +          }
                                                  +        }
                                                  +      }
                                                  +  
                                                  +      // Remove any prefix anchors so that the output will match anywhere.
                                                  +      // ^^ really does mean an anchored match though.
                                                  +      for (var i = 0, groupIndex = 0; i < n; ++i) {
                                                  +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
                                                  +      }
                                                  +  
                                                  +      // Expand letters to groups to handle mixing of case-sensitive and
                                                  +      // case-insensitive patterns if necessary.
                                                  +      if (regex.ignoreCase && needToFoldCase) {
                                                  +        for (var i = 0; i < n; ++i) {
                                                  +          var p = parts[i];
                                                  +          var ch0 = p.charAt(0);
                                                  +          if (p.length >= 2 && ch0 === '[') {
                                                  +            parts[i] = caseFoldCharset(p);
                                                  +          } else if (ch0 !== '\\') {
                                                  +            // TODO: handle letters in numeric escapes.
                                                  +            parts[i] = p.replace(
                                                  +                /[a-zA-Z]/g,
                                                  +                function (ch) {
                                                  +                  var cc = ch.charCodeAt(0);
                                                  +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
                                                  +                });
                                                  +          }
                                                  +        }
                                                  +      }
                                                  +  
                                                  +      return parts.join('');
                                                  +    }
                                                  +  
                                                  +    var rewritten = [];
                                                  +    for (var i = 0, n = regexs.length; i < n; ++i) {
                                                  +      var regex = regexs[i];
                                                  +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
                                                  +      rewritten.push(
                                                  +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
                                                  +    }
                                                  +  
                                                  +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
                                                  +  }
                                                  +
                                                  +
                                                  +  /**
                                                  +   * Split markup into a string of source code and an array mapping ranges in
                                                  +   * that string to the text nodes in which they appear.
                                                  +   *
                                                  +   * <p>
                                                  +   * The HTML DOM structure:</p>
                                                  +   * <pre>
                                                  +   * (Element   "p"
                                                  +   *   (Element "b"
                                                  +   *     (Text  "print "))       ; #1
                                                  +   *   (Text    "'Hello '")      ; #2
                                                  +   *   (Element "br")            ; #3
                                                  +   *   (Text    "  + 'World';")) ; #4
                                                  +   * </pre>
                                                  +   * <p>
                                                  +   * corresponds to the HTML
                                                  +   * {@code <p><b>print </b>'Hello '<br>  + 'World';</p>}.</p>
                                                  +   *
                                                  +   * <p>
                                                  +   * It will produce the output:</p>
                                                  +   * <pre>
                                                  +   * {
                                                  +   *   sourceCode: "print 'Hello '\n  + 'World';",
                                                  +   *   //                 1         2
                                                  +   *   //       012345678901234 5678901234567
                                                  +   *   spans: [0, #1, 6, #2, 14, #3, 15, #4]
                                                  +   * }
                                                  +   * </pre>
                                                  +   * <p>
                                                  +   * where #1 is a reference to the {@code "print "} text node above, and so
                                                  +   * on for the other text nodes.
                                                  +   * </p>
                                                  +   *
                                                  +   * <p>
                                                  +   * The {@code} spans array is an array of pairs.  Even elements are the start
                                                  +   * indices of substrings, and odd elements are the text nodes (or BR elements)
                                                  +   * that contain the text for those substrings.
                                                  +   * Substrings continue until the next index or the end of the source.
                                                  +   * </p>
                                                  +   *
                                                  +   * @param {Node} node an HTML DOM subtree containing source-code.
                                                  +   * @return {Object} source code and the text nodes in which they occur.
                                                  +   */
                                                  +  function extractSourceSpans(node) {
                                                  +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
                                                  +  
                                                  +    var chunks = [];
                                                  +    var length = 0;
                                                  +    var spans = [];
                                                  +    var k = 0;
                                                  +  
                                                  +    var whitespace;
                                                  +    if (node.currentStyle) {
                                                  +      whitespace = node.currentStyle.whiteSpace;
                                                  +    } else if (window.getComputedStyle) {
                                                  +      whitespace = document.defaultView.getComputedStyle(node, null)
                                                  +          .getPropertyValue('white-space');
                                                  +    }
                                                  +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
                                                  +  
                                                  +    function walk(node) {
                                                  +      switch (node.nodeType) {
                                                  +        case 1:  // Element
                                                  +          if (nocode.test(node.className)) { return; }
                                                  +          for (var child = node.firstChild; child; child = child.nextSibling) {
                                                  +            walk(child);
                                                  +          }
                                                  +          var nodeName = node.nodeName;
                                                  +          if ('BR' === nodeName || 'LI' === nodeName) {
                                                  +            chunks[k] = '\n';
                                                  +            spans[k << 1] = length++;
                                                  +            spans[(k++ << 1) | 1] = node;
                                                  +          }
                                                  +          break;
                                                  +        case 3: case 4:  // Text
                                                  +          var text = node.nodeValue;
                                                  +          if (text.length) {
                                                  +            if (!isPreformatted) {
                                                  +              text = text.replace(/[ \t\r\n]+/g, ' ');
                                                  +            } else {
                                                  +              text = text.replace(/\r\n?/g, '\n');  // Normalize newlines.
                                                  +            }
                                                  +            // TODO: handle tabs here?
                                                  +            chunks[k] = text;
                                                  +            spans[k << 1] = length;
                                                  +            length += text.length;
                                                  +            spans[(k++ << 1) | 1] = node;
                                                  +          }
                                                  +          break;
                                                  +      }
                                                  +    }
                                                  +  
                                                  +    walk(node);
                                                  +  
                                                  +    return {
                                                  +      sourceCode: chunks.join('').replace(/\n$/, ''),
                                                  +      spans: spans
                                                  +    };
                                                  +  }
                                                  +
                                                  +
                                                  +  /**
                                                  +   * Apply the given language handler to sourceCode and add the resulting
                                                  +   * decorations to out.
                                                  +   * @param {number} basePos the index of sourceCode within the chunk of source
                                                  +   *    whose decorations are already present on out.
                                                  +   */
                                                  +  function appendDecorations(basePos, sourceCode, langHandler, out) {
                                                  +    if (!sourceCode) { return; }
                                                  +    var job = {
                                                  +      sourceCode: sourceCode,
                                                  +      basePos: basePos
                                                  +    };
                                                  +    langHandler(job);
                                                  +    out.push.apply(out, job.decorations);
                                                  +  }
                                                  +
                                                  +  var notWs = /\S/;
                                                  +
                                                  +  /**
                                                  +   * Given an element, if it contains only one child element and any text nodes
                                                  +   * it contains contain only space characters, return the sole child element.
                                                  +   * Otherwise returns undefined.
                                                  +   * <p>
                                                  +   * This is meant to return the CODE element in {@code <pre><code ...>} when
                                                  +   * there is a single child element that contains all the non-space textual
                                                  +   * content, but not to return anything where there are multiple child elements
                                                  +   * as in {@code <pre><code>...</code><code>...</code></pre>} or when there
                                                  +   * is textual content.
                                                  +   */
                                                  +  function childContentWrapper(element) {
                                                  +    var wrapper = undefined;
                                                  +    for (var c = element.firstChild; c; c = c.nextSibling) {
                                                  +      var type = c.nodeType;
                                                  +      wrapper = (type === 1)  // Element Node
                                                  +          ? (wrapper ? element : c)
                                                  +          : (type === 3)  // Text Node
                                                  +          ? (notWs.test(c.nodeValue) ? element : wrapper)
                                                  +          : wrapper;
                                                  +    }
                                                  +    return wrapper === element ? undefined : wrapper;
                                                  +  }
                                                  +
                                                  +  /** Given triples of [style, pattern, context] returns a lexing function,
                                                  +    * The lexing function interprets the patterns to find token boundaries and
                                                  +    * returns a decoration list of the form
                                                  +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
                                                  +    * where index_n is an index into the sourceCode, and style_n is a style
                                                  +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
                                                  +    * all characters in sourceCode[index_n-1:index_n].
                                                  +    *
                                                  +    * The stylePatterns is a list whose elements have the form
                                                  +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
                                                  +    *
                                                  +    * Style is a style constant like PR_PLAIN, or can be a string of the
                                                  +    * form 'lang-FOO', where FOO is a language extension describing the
                                                  +    * language of the portion of the token in $1 after pattern executes.
                                                  +    * E.g., if style is 'lang-lisp', and group 1 contains the text
                                                  +    * '(hello (world))', then that portion of the token will be passed to the
                                                  +    * registered lisp handler for formatting.
                                                  +    * The text before and after group 1 will be restyled using this decorator
                                                  +    * so decorators should take care that this doesn't result in infinite
                                                  +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
                                                  +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
                                                  +    * '<script>foo()<\/script>', which would cause the current decorator to
                                                  +    * be called with '<script>' which would not match the same rule since
                                                  +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
                                                  +    * the generic tag rule.  The handler registered for the 'js' extension would
                                                  +    * then be called with 'foo()', and finally, the current decorator would
                                                  +    * be called with '<\/script>' which would not match the original rule and
                                                  +    * so the generic tag rule would identify it as a tag.
                                                  +    *
                                                  +    * Pattern must only match prefixes, and if it matches a prefix, then that
                                                  +    * match is considered a token with the same style.
                                                  +    *
                                                  +    * Context is applied to the last non-whitespace, non-comment token
                                                  +    * recognized.
                                                  +    *
                                                  +    * Shortcut is an optional string of characters, any of which, if the first
                                                  +    * character, gurantee that this pattern and only this pattern matches.
                                                  +    *
                                                  +    * @param {Array} shortcutStylePatterns patterns that always start with
                                                  +    *   a known character.  Must have a shortcut string.
                                                  +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
                                                  +    *   order if the shortcut ones fail.  May have shortcuts.
                                                  +    *
                                                  +    * @return {function (Object)} a
                                                  +    *   function that takes source code and returns a list of decorations.
                                                  +    */
                                                  +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
                                                  +    var shortcuts = {};
                                                  +    var tokenizer;
                                                  +    (function () {
                                                  +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
                                                  +      var allRegexs = [];
                                                  +      var regexKeys = {};
                                                  +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
                                                  +        var patternParts = allPatterns[i];
                                                  +        var shortcutChars = patternParts[3];
                                                  +        if (shortcutChars) {
                                                  +          for (var c = shortcutChars.length; --c >= 0;) {
                                                  +            shortcuts[shortcutChars.charAt(c)] = patternParts;
                                                  +          }
                                                  +        }
                                                  +        var regex = patternParts[1];
                                                  +        var k = '' + regex;
                                                  +        if (!regexKeys.hasOwnProperty(k)) {
                                                  +          allRegexs.push(regex);
                                                  +          regexKeys[k] = null;
                                                  +        }
                                                  +      }
                                                  +      allRegexs.push(/[\0-\uffff]/);
                                                  +      tokenizer = combinePrefixPatterns(allRegexs);
                                                  +    })();
                                                  +
                                                  +    var nPatterns = fallthroughStylePatterns.length;
                                                  +
                                                  +    /**
                                                  +     * Lexes job.sourceCode and produces an output array job.decorations of
                                                  +     * style classes preceded by the position at which they start in
                                                  +     * job.sourceCode in order.
                                                  +     *
                                                  +     * @param {Object} job an object like <pre>{
                                                  +     *    sourceCode: {string} sourceText plain text,
                                                  +     *    basePos: {int} position of job.sourceCode in the larger chunk of
                                                  +     *        sourceCode.
                                                  +     * }</pre>
                                                  +     */
                                                  +    var decorate = function (job) {
                                                  +      var sourceCode = job.sourceCode, basePos = job.basePos;
                                                  +      /** Even entries are positions in source in ascending order.  Odd enties
                                                  +        * are style markers (e.g., PR_COMMENT) that run from that position until
                                                  +        * the end.
                                                  +        * @type {Array.<number|string>}
                                                  +        */
                                                  +      var decorations = [basePos, PR_PLAIN];
                                                  +      var pos = 0;  // index into sourceCode
                                                  +      var tokens = sourceCode.match(tokenizer) || [];
                                                  +      var styleCache = {};
                                                  +
                                                  +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
                                                  +        var token = tokens[ti];
                                                  +        var style = styleCache[token];
                                                  +        var match = void 0;
                                                  +
                                                  +        var isEmbedded;
                                                  +        if (typeof style === 'string') {
                                                  +          isEmbedded = false;
                                                  +        } else {
                                                  +          var patternParts = shortcuts[token.charAt(0)];
                                                  +          if (patternParts) {
                                                  +            match = token.match(patternParts[1]);
                                                  +            style = patternParts[0];
                                                  +          } else {
                                                  +            for (var i = 0; i < nPatterns; ++i) {
                                                  +              patternParts = fallthroughStylePatterns[i];
                                                  +              match = token.match(patternParts[1]);
                                                  +              if (match) {
                                                  +                style = patternParts[0];
                                                  +                break;
                                                  +              }
                                                  +            }
                                                  +
                                                  +            if (!match) {  // make sure that we make progress
                                                  +              style = PR_PLAIN;
                                                  +            }
                                                  +          }
                                                  +
                                                  +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
                                                  +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
                                                  +            isEmbedded = false;
                                                  +            style = PR_SOURCE;
                                                  +          }
                                                  +
                                                  +          if (!isEmbedded) { styleCache[token] = style; }
                                                  +        }
                                                  +
                                                  +        var tokenStart = pos;
                                                  +        pos += token.length;
                                                  +
                                                  +        if (!isEmbedded) {
                                                  +          decorations.push(basePos + tokenStart, style);
                                                  +        } else {  // Treat group 1 as an embedded block of source code.
                                                  +          var embeddedSource = match[1];
                                                  +          var embeddedSourceStart = token.indexOf(embeddedSource);
                                                  +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
                                                  +          if (match[2]) {
                                                  +            // If embeddedSource can be blank, then it would match at the
                                                  +            // beginning which would cause us to infinitely recurse on the
                                                  +            // entire token, so we catch the right context in match[2].
                                                  +            embeddedSourceEnd = token.length - match[2].length;
                                                  +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
                                                  +          }
                                                  +          var lang = style.substring(5);
                                                  +          // Decorate the left of the embedded source
                                                  +          appendDecorations(
                                                  +              basePos + tokenStart,
                                                  +              token.substring(0, embeddedSourceStart),
                                                  +              decorate, decorations);
                                                  +          // Decorate the embedded source
                                                  +          appendDecorations(
                                                  +              basePos + tokenStart + embeddedSourceStart,
                                                  +              embeddedSource,
                                                  +              langHandlerForExtension(lang, embeddedSource),
                                                  +              decorations);
                                                  +          // Decorate the right of the embedded section
                                                  +          appendDecorations(
                                                  +              basePos + tokenStart + embeddedSourceEnd,
                                                  +              token.substring(embeddedSourceEnd),
                                                  +              decorate, decorations);
                                                  +        }
                                                  +      }
                                                  +      job.decorations = decorations;
                                                  +    };
                                                  +    return decorate;
                                                  +  }
                                                  +
                                                  +  /** returns a function that produces a list of decorations from source text.
                                                  +    *
                                                  +    * This code treats ", ', and ` as string delimiters, and \ as a string
                                                  +    * escape.  It does not recognize perl's qq() style strings.
                                                  +    * It has no special handling for double delimiter escapes as in basic, or
                                                  +    * the tripled delimiters used in python, but should work on those regardless
                                                  +    * although in those cases a single string literal may be broken up into
                                                  +    * multiple adjacent string literals.
                                                  +    *
                                                  +    * It recognizes C, C++, and shell style comments.
                                                  +    *
                                                  +    * @param {Object} options a set of optional parameters.
                                                  +    * @return {function (Object)} a function that examines the source code
                                                  +    *     in the input job and builds the decoration list.
                                                  +    */
                                                  +  function sourceDecorator(options) {
                                                  +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
                                                  +    if (options['tripleQuotedStrings']) {
                                                  +      // '''multi-line-string''', 'single-line-string', and double-quoted
                                                  +      shortcutStylePatterns.push(
                                                  +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
                                                  +           null, '\'"']);
                                                  +    } else if (options['multiLineStrings']) {
                                                  +      // 'multi-line-string', "multi-line-string"
                                                  +      shortcutStylePatterns.push(
                                                  +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
                                                  +           null, '\'"`']);
                                                  +    } else {
                                                  +      // 'single-line-string', "single-line-string"
                                                  +      shortcutStylePatterns.push(
                                                  +          [PR_STRING,
                                                  +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
                                                  +           null, '"\'']);
                                                  +    }
                                                  +    if (options['verbatimStrings']) {
                                                  +      // verbatim-string-literal production from the C# grammar.  See issue 93.
                                                  +      fallthroughStylePatterns.push(
                                                  +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
                                                  +    }
                                                  +    var hc = options['hashComments'];
                                                  +    if (hc) {
                                                  +      if (options['cStyleComments']) {
                                                  +        if (hc > 1) {  // multiline hash comments
                                                  +          shortcutStylePatterns.push(
                                                  +              [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);
                                                  +        } else {
                                                  +          // Stop C preprocessor declarations at an unclosed open comment
                                                  +          shortcutStylePatterns.push(
                                                  +              [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
                                                  +               null, '#']);
                                                  +        }
                                                  +        fallthroughStylePatterns.push(
                                                  +            [PR_STRING,
                                                  +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
                                                  +             null]);
                                                  +      } else {
                                                  +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
                                                  +      }
                                                  +    }
                                                  +    if (options['cStyleComments']) {
                                                  +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
                                                  +      fallthroughStylePatterns.push(
                                                  +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
                                                  +    }
                                                  +    if (options['regexLiterals']) {
                                                  +      /**
                                                  +       * @const
                                                  +       */
                                                  +      var REGEX_LITERAL = (
                                                  +          // A regular expression literal starts with a slash that is
                                                  +          // not followed by * or / so that it is not confused with
                                                  +          // comments.
                                                  +          '/(?=[^/*])'
                                                  +          // and then contains any number of raw characters,
                                                  +          + '(?:[^/\\x5B\\x5C]'
                                                  +          // escape sequences (\x5C),
                                                  +          +    '|\\x5C[\\s\\S]'
                                                  +          // or non-nesting character sets (\x5B\x5D);
                                                  +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
                                                  +          // finally closed by a /.
                                                  +          + '/');
                                                  +      fallthroughStylePatterns.push(
                                                  +          ['lang-regex',
                                                  +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
                                                  +           ]);
                                                  +    }
                                                  +
                                                  +    var types = options['types'];
                                                  +    if (types) {
                                                  +      fallthroughStylePatterns.push([PR_TYPE, types]);
                                                  +    }
                                                  +
                                                  +    var keywords = ("" + options['keywords']).replace(/^ | $/g, '');
                                                  +    if (keywords.length) {
                                                  +      fallthroughStylePatterns.push(
                                                  +          [PR_KEYWORD,
                                                  +           new RegExp('^(?:' + keywords.replace(/[\s,]+/g, '|') + ')\\b'),
                                                  +           null]);
                                                  +    }
                                                  +
                                                  +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
                                                  +    fallthroughStylePatterns.push(
                                                  +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
                                                  +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
                                                  +        [PR_TYPE,        /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/, null],
                                                  +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
                                                  +        [PR_LITERAL,
                                                  +         new RegExp(
                                                  +             '^(?:'
                                                  +             // A hex number
                                                  +             + '0x[a-f0-9]+'
                                                  +             // or an octal or decimal number,
                                                  +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
                                                  +             // possibly in scientific notation
                                                  +             + '(?:e[+\\-]?\\d+)?'
                                                  +             + ')'
                                                  +             // with an optional modifier like UL for unsigned long
                                                  +             + '[a-z]*', 'i'),
                                                  +         null, '0123456789'],
                                                  +        // Don't treat escaped quotes in bash as starting strings.  See issue 144.
                                                  +        [PR_PLAIN,       /^\\[\s\S]?/, null],
                                                  +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]);
                                                  +
                                                  +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
                                                  +  }
                                                  +
                                                  +  var decorateSource = sourceDecorator({
                                                  +        'keywords': ALL_KEYWORDS,
                                                  +        'hashComments': true,
                                                  +        'cStyleComments': true,
                                                  +        'multiLineStrings': true,
                                                  +        'regexLiterals': true
                                                  +      });
                                                  +
                                                  +  /**
                                                  +   * Given a DOM subtree, wraps it in a list, and puts each line into its own
                                                  +   * list item.
                                                  +   *
                                                  +   * @param {Node} node modified in place.  Its content is pulled into an
                                                  +   *     HTMLOListElement, and each line is moved into a separate list item.
                                                  +   *     This requires cloning elements, so the input might not have unique
                                                  +   *     IDs after numbering.
                                                  +   */
                                                  +  function numberLines(node, opt_startLineNum) {
                                                  +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
                                                  +    var lineBreak = /\r\n?|\n/;
                                                  +  
                                                  +    var document = node.ownerDocument;
                                                  +  
                                                  +    var whitespace;
                                                  +    if (node.currentStyle) {
                                                  +      whitespace = node.currentStyle.whiteSpace;
                                                  +    } else if (window.getComputedStyle) {
                                                  +      whitespace = document.defaultView.getComputedStyle(node, null)
                                                  +          .getPropertyValue('white-space');
                                                  +    }
                                                  +    // If it's preformatted, then we need to split lines on line breaks
                                                  +    // in addition to <BR>s.
                                                  +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
                                                  +  
                                                  +    var li = document.createElement('LI');
                                                  +    while (node.firstChild) {
                                                  +      li.appendChild(node.firstChild);
                                                  +    }
                                                  +    // An array of lines.  We split below, so this is initialized to one
                                                  +    // un-split line.
                                                  +    var listItems = [li];
                                                  +  
                                                  +    function walk(node) {
                                                  +      switch (node.nodeType) {
                                                  +        case 1:  // Element
                                                  +          if (nocode.test(node.className)) { break; }
                                                  +          if ('BR' === node.nodeName) {
                                                  +            breakAfter(node);
                                                  +            // Discard the <BR> since it is now flush against a </LI>.
                                                  +            if (node.parentNode) {
                                                  +              node.parentNode.removeChild(node);
                                                  +            }
                                                  +          } else {
                                                  +            for (var child = node.firstChild; child; child = child.nextSibling) {
                                                  +              walk(child);
                                                  +            }
                                                  +          }
                                                  +          break;
                                                  +        case 3: case 4:  // Text
                                                  +          if (isPreformatted) {
                                                  +            var text = node.nodeValue;
                                                  +            var match = text.match(lineBreak);
                                                  +            if (match) {
                                                  +              var firstLine = text.substring(0, match.index);
                                                  +              node.nodeValue = firstLine;
                                                  +              var tail = text.substring(match.index + match[0].length);
                                                  +              if (tail) {
                                                  +                var parent = node.parentNode;
                                                  +                parent.insertBefore(
                                                  +                    document.createTextNode(tail), node.nextSibling);
                                                  +              }
                                                  +              breakAfter(node);
                                                  +              if (!firstLine) {
                                                  +                // Don't leave blank text nodes in the DOM.
                                                  +                node.parentNode.removeChild(node);
                                                  +              }
                                                  +            }
                                                  +          }
                                                  +          break;
                                                  +      }
                                                  +    }
                                                  +  
                                                  +    // Split a line after the given node.
                                                  +    function breakAfter(lineEndNode) {
                                                  +      // If there's nothing to the right, then we can skip ending the line
                                                  +      // here, and move root-wards since splitting just before an end-tag
                                                  +      // would require us to create a bunch of empty copies.
                                                  +      while (!lineEndNode.nextSibling) {
                                                  +        lineEndNode = lineEndNode.parentNode;
                                                  +        if (!lineEndNode) { return; }
                                                  +      }
                                                  +  
                                                  +      function breakLeftOf(limit, copy) {
                                                  +        // Clone shallowly if this node needs to be on both sides of the break.
                                                  +        var rightSide = copy ? limit.cloneNode(false) : limit;
                                                  +        var parent = limit.parentNode;
                                                  +        if (parent) {
                                                  +          // We clone the parent chain.
                                                  +          // This helps us resurrect important styling elements that cross lines.
                                                  +          // E.g. in <i>Foo<br>Bar</i>
                                                  +          // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.
                                                  +          var parentClone = breakLeftOf(parent, 1);
                                                  +          // Move the clone and everything to the right of the original
                                                  +          // onto the cloned parent.
                                                  +          var next = limit.nextSibling;
                                                  +          parentClone.appendChild(rightSide);
                                                  +          for (var sibling = next; sibling; sibling = next) {
                                                  +            next = sibling.nextSibling;
                                                  +            parentClone.appendChild(sibling);
                                                  +          }
                                                  +        }
                                                  +        return rightSide;
                                                  +      }
                                                  +  
                                                  +      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
                                                  +  
                                                  +      // Walk the parent chain until we reach an unattached LI.
                                                  +      for (var parent;
                                                  +           // Check nodeType since IE invents document fragments.
                                                  +           (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
                                                  +        copiedListItem = parent;
                                                  +      }
                                                  +      // Put it on the list of lines for later processing.
                                                  +      listItems.push(copiedListItem);
                                                  +    }
                                                  +  
                                                  +    // Split lines while there are lines left to split.
                                                  +    for (var i = 0;  // Number of lines that have been split so far.
                                                  +         i < listItems.length;  // length updated by breakAfter calls.
                                                  +         ++i) {
                                                  +      walk(listItems[i]);
                                                  +    }
                                                  +  
                                                  +    // Make sure numeric indices show correctly.
                                                  +    if (opt_startLineNum === (opt_startLineNum|0)) {
                                                  +      listItems[0].setAttribute('value', opt_startLineNum);
                                                  +    }
                                                  +  
                                                  +    var ol = document.createElement('OL');
                                                  +    ol.className = 'linenums';
                                                  +    var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0;
                                                  +    for (var i = 0, n = listItems.length; i < n; ++i) {
                                                  +      li = listItems[i];
                                                  +      // Stick a class on the LIs so that stylesheets can
                                                  +      // color odd/even rows, or any other row pattern that
                                                  +      // is co-prime with 10.
                                                  +      li.className = 'L' + ((i + offset) % 10);
                                                  +      if (!li.firstChild) {
                                                  +        li.appendChild(document.createTextNode('\xA0'));
                                                  +      }
                                                  +      ol.appendChild(li);
                                                  +    }
                                                  +  
                                                  +    node.appendChild(ol);
                                                  +  }
                                                  +
                                                  +  /**
                                                  +   * Breaks {@code job.sourceCode} around style boundaries in
                                                  +   * {@code job.decorations} and modifies {@code job.sourceNode} in place.
                                                  +   * @param {Object} job like <pre>{
                                                  +   *    sourceCode: {string} source as plain text,
                                                  +   *    spans: {Array.<number|Node>} alternating span start indices into source
                                                  +   *       and the text node or element (e.g. {@code <BR>}) corresponding to that
                                                  +   *       span.
                                                  +   *    decorations: {Array.<number|string} an array of style classes preceded
                                                  +   *       by the position at which they start in job.sourceCode in order
                                                  +   * }</pre>
                                                  +   * @private
                                                  +   */
                                                  +  function recombineTagsAndDecorations(job) {
                                                  +    var isIE = /\bMSIE\b/.test(navigator.userAgent);
                                                  +    var newlineRe = /\n/g;
                                                  +  
                                                  +    var source = job.sourceCode;
                                                  +    var sourceLength = source.length;
                                                  +    // Index into source after the last code-unit recombined.
                                                  +    var sourceIndex = 0;
                                                  +  
                                                  +    var spans = job.spans;
                                                  +    var nSpans = spans.length;
                                                  +    // Index into spans after the last span which ends at or before sourceIndex.
                                                  +    var spanIndex = 0;
                                                  +  
                                                  +    var decorations = job.decorations;
                                                  +    var nDecorations = decorations.length;
                                                  +    // Index into decorations after the last decoration which ends at or before
                                                  +    // sourceIndex.
                                                  +    var decorationIndex = 0;
                                                  +  
                                                  +    // Remove all zero-length decorations.
                                                  +    decorations[nDecorations] = sourceLength;
                                                  +    var decPos, i;
                                                  +    for (i = decPos = 0; i < nDecorations;) {
                                                  +      if (decorations[i] !== decorations[i + 2]) {
                                                  +        decorations[decPos++] = decorations[i++];
                                                  +        decorations[decPos++] = decorations[i++];
                                                  +      } else {
                                                  +        i += 2;
                                                  +      }
                                                  +    }
                                                  +    nDecorations = decPos;
                                                  +  
                                                  +    // Simplify decorations.
                                                  +    for (i = decPos = 0; i < nDecorations;) {
                                                  +      var startPos = decorations[i];
                                                  +      // Conflate all adjacent decorations that use the same style.
                                                  +      var startDec = decorations[i + 1];
                                                  +      var end = i + 2;
                                                  +      while (end + 2 <= nDecorations && decorations[end + 1] === startDec) {
                                                  +        end += 2;
                                                  +      }
                                                  +      decorations[decPos++] = startPos;
                                                  +      decorations[decPos++] = startDec;
                                                  +      i = end;
                                                  +    }
                                                  +  
                                                  +    nDecorations = decorations.length = decPos;
                                                  +  
                                                  +    var decoration = null;
                                                  +    while (spanIndex < nSpans) {
                                                  +      var spanStart = spans[spanIndex];
                                                  +      var spanEnd = spans[spanIndex + 2] || sourceLength;
                                                  +  
                                                  +      var decStart = decorations[decorationIndex];
                                                  +      var decEnd = decorations[decorationIndex + 2] || sourceLength;
                                                  +  
                                                  +      var end = Math.min(spanEnd, decEnd);
                                                  +  
                                                  +      var textNode = spans[spanIndex + 1];
                                                  +      var styledText;
                                                  +      if (textNode.nodeType !== 1  // Don't muck with <BR>s or <LI>s
                                                  +          // Don't introduce spans around empty text nodes.
                                                  +          && (styledText = source.substring(sourceIndex, end))) {
                                                  +        // This may seem bizarre, and it is.  Emitting LF on IE causes the
                                                  +        // code to display with spaces instead of line breaks.
                                                  +        // Emitting Windows standard issue linebreaks (CRLF) causes a blank
                                                  +        // space to appear at the beginning of every line but the first.
                                                  +        // Emitting an old Mac OS 9 line separator makes everything spiffy.
                                                  +        if (isIE) { styledText = styledText.replace(newlineRe, '\r'); }
                                                  +        textNode.nodeValue = styledText;
                                                  +        var document = textNode.ownerDocument;
                                                  +        var span = document.createElement('SPAN');
                                                  +        span.className = decorations[decorationIndex + 1];
                                                  +        var parentNode = textNode.parentNode;
                                                  +        parentNode.replaceChild(span, textNode);
                                                  +        span.appendChild(textNode);
                                                  +        if (sourceIndex < spanEnd) {  // Split off a text node.
                                                  +          spans[spanIndex + 1] = textNode
                                                  +              // TODO: Possibly optimize by using '' if there's no flicker.
                                                  +              = document.createTextNode(source.substring(end, spanEnd));
                                                  +          parentNode.insertBefore(textNode, span.nextSibling);
                                                  +        }
                                                  +      }
                                                  +  
                                                  +      sourceIndex = end;
                                                  +  
                                                  +      if (sourceIndex >= spanEnd) {
                                                  +        spanIndex += 2;
                                                  +      }
                                                  +      if (sourceIndex >= decEnd) {
                                                  +        decorationIndex += 2;
                                                  +      }
                                                  +    }
                                                  +  }
                                                  +
                                                  +
                                                  +  /** Maps language-specific file extensions to handlers. */
                                                  +  var langHandlerRegistry = {};
                                                  +  /** Register a language handler for the given file extensions.
                                                  +    * @param {function (Object)} handler a function from source code to a list
                                                  +    *      of decorations.  Takes a single argument job which describes the
                                                  +    *      state of the computation.   The single parameter has the form
                                                  +    *      {@code {
                                                  +    *        sourceCode: {string} as plain text.
                                                  +    *        decorations: {Array.<number|string>} an array of style classes
                                                  +    *                     preceded by the position at which they start in
                                                  +    *                     job.sourceCode in order.
                                                  +    *                     The language handler should assigned this field.
                                                  +    *        basePos: {int} the position of source in the larger source chunk.
                                                  +    *                 All positions in the output decorations array are relative
                                                  +    *                 to the larger source chunk.
                                                  +    *      } }
                                                  +    * @param {Array.<string>} fileExtensions
                                                  +    */
                                                  +  function registerLangHandler(handler, fileExtensions) {
                                                  +    for (var i = fileExtensions.length; --i >= 0;) {
                                                  +      var ext = fileExtensions[i];
                                                  +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
                                                  +        langHandlerRegistry[ext] = handler;
                                                  +      } else if (window['console']) {
                                                  +        console['warn']('cannot override language handler %s', ext);
                                                  +      }
                                                  +    }
                                                  +  }
                                                  +  function langHandlerForExtension(extension, source) {
                                                  +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
                                                  +      // Treat it as markup if the first non whitespace character is a < and
                                                  +      // the last non-whitespace character is a >.
                                                  +      extension = /^\s*</.test(source)
                                                  +          ? 'default-markup'
                                                  +          : 'default-code';
                                                  +    }
                                                  +    return langHandlerRegistry[extension];
                                                  +  }
                                                  +  registerLangHandler(decorateSource, ['default-code']);
                                                  +  registerLangHandler(
                                                  +      createSimpleLexer(
                                                  +          [],
                                                  +          [
                                                  +           [PR_PLAIN,       /^[^<?]+/],
                                                  +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
                                                  +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
                                                  +           // Unescaped content in an unknown language
                                                  +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
                                                  +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
                                                  +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
                                                  +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
                                                  +           // Unescaped content in javascript.  (Or possibly vbscript).
                                                  +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
                                                  +           // Contains unescaped stylesheet content
                                                  +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
                                                  +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
                                                  +          ]),
                                                  +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
                                                  +  registerLangHandler(
                                                  +      createSimpleLexer(
                                                  +          [
                                                  +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
                                                  +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
                                                  +           ],
                                                  +          [
                                                  +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
                                                  +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
                                                  +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
                                                  +           [PR_PUNCTUATION,  /^[=<>\/]+/],
                                                  +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
                                                  +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
                                                  +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
                                                  +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
                                                  +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
                                                  +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
                                                  +           ]),
                                                  +      ['in.tag']);
                                                  +  registerLangHandler(
                                                  +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
                                                  +  registerLangHandler(sourceDecorator({
                                                  +          'keywords': CPP_KEYWORDS,
                                                  +          'hashComments': true,
                                                  +          'cStyleComments': true,
                                                  +          'types': C_TYPES
                                                  +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
                                                  +  registerLangHandler(sourceDecorator({
                                                  +          'keywords': 'null,true,false'
                                                  +        }), ['json']);
                                                  +  registerLangHandler(sourceDecorator({
                                                  +          'keywords': CSHARP_KEYWORDS,
                                                  +          'hashComments': true,
                                                  +          'cStyleComments': true,
                                                  +          'verbatimStrings': true,
                                                  +          'types': C_TYPES
                                                  +        }), ['cs']);
                                                  +  registerLangHandler(sourceDecorator({
                                                  +          'keywords': JAVA_KEYWORDS,
                                                  +          'cStyleComments': true
                                                  +        }), ['java']);
                                                  +  registerLangHandler(sourceDecorator({
                                                  +          'keywords': SH_KEYWORDS,
                                                  +          'hashComments': true,
                                                  +          'multiLineStrings': true
                                                  +        }), ['bsh', 'csh', 'sh']);
                                                  +  registerLangHandler(sourceDecorator({
                                                  +          'keywords': PYTHON_KEYWORDS,
                                                  +          'hashComments': true,
                                                  +          'multiLineStrings': true,
                                                  +          'tripleQuotedStrings': true
                                                  +        }), ['cv', 'py']);
                                                  +  registerLangHandler(sourceDecorator({
                                                  +          'keywords': PERL_KEYWORDS,
                                                  +          'hashComments': true,
                                                  +          'multiLineStrings': true,
                                                  +          'regexLiterals': true
                                                  +        }), ['perl', 'pl', 'pm']);
                                                  +  registerLangHandler(sourceDecorator({
                                                  +          'keywords': RUBY_KEYWORDS,
                                                  +          'hashComments': true,
                                                  +          'multiLineStrings': true,
                                                  +          'regexLiterals': true
                                                  +        }), ['rb']);
                                                  +  registerLangHandler(sourceDecorator({
                                                  +          'keywords': JSCRIPT_KEYWORDS,
                                                  +          'cStyleComments': true,
                                                  +          'regexLiterals': true
                                                  +        }), ['js']);
                                                  +  registerLangHandler(sourceDecorator({
                                                  +          'keywords': COFFEE_KEYWORDS,
                                                  +          'hashComments': 3,  // ### style block comments
                                                  +          'cStyleComments': true,
                                                  +          'multilineStrings': true,
                                                  +          'tripleQuotedStrings': true,
                                                  +          'regexLiterals': true
                                                  +        }), ['coffee']);
                                                  +  registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
                                                  +
                                                  +  function applyDecorator(job) {
                                                  +    var opt_langExtension = job.langExtension;
                                                  +
                                                  +    try {
                                                  +      // Extract tags, and convert the source code to plain text.
                                                  +      var sourceAndSpans = extractSourceSpans(job.sourceNode);
                                                  +      /** Plain text. @type {string} */
                                                  +      var source = sourceAndSpans.sourceCode;
                                                  +      job.sourceCode = source;
                                                  +      job.spans = sourceAndSpans.spans;
                                                  +      job.basePos = 0;
                                                  +
                                                  +      // Apply the appropriate language handler
                                                  +      langHandlerForExtension(opt_langExtension, source)(job);
                                                  +
                                                  +      // Integrate the decorations and tags back into the source code,
                                                  +      // modifying the sourceNode in place.
                                                  +      recombineTagsAndDecorations(job);
                                                  +    } catch (e) {
                                                  +      if ('console' in window) {
                                                  +        console['log'](e && e['stack'] ? e['stack'] : e);
                                                  +      }
                                                  +    }
                                                  +  }
                                                  +
                                                  +  /**
                                                  +   * @param sourceCodeHtml {string} The HTML to pretty print.
                                                  +   * @param opt_langExtension {string} The language name to use.
                                                  +   *     Typically, a filename extension like 'cpp' or 'java'.
                                                  +   * @param opt_numberLines {number|boolean} True to number lines,
                                                  +   *     or the 1-indexed number of the first line in sourceCodeHtml.
                                                  +   */
                                                  +  function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
                                                  +    var container = document.createElement('PRE');
                                                  +    // This could cause images to load and onload listeners to fire.
                                                  +    // E.g. <img onerror="window.top.$.simpleAlert(1337)" src="nosuchimage.png">.
                                                  +    // We assume that the inner HTML is from a trusted source.
                                                  +    container.innerHTML = sourceCodeHtml;
                                                  +    if (opt_numberLines) {
                                                  +      numberLines(container, opt_numberLines);
                                                  +    }
                                                  +
                                                  +    var job = {
                                                  +      langExtension: opt_langExtension,
                                                  +      numberLines: opt_numberLines,
                                                  +      sourceNode: container
                                                  +    };
                                                  +    applyDecorator(job);
                                                  +    return container.innerHTML;
                                                  +  }
                                                  +
                                                  +  function prettyPrint(opt_whenDone) {
                                                  +    function byTagName(tn) { return document.getElementsByTagName(tn); }
                                                  +    // fetch a list of nodes to rewrite
                                                  +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
                                                  +    var elements = [];
                                                  +    for (var i = 0; i < codeSegments.length; ++i) {
                                                  +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
                                                  +        elements.push(codeSegments[i][j]);
                                                  +      }
                                                  +    }
                                                  +    codeSegments = null;
                                                  +
                                                  +    var clock = Date;
                                                  +    if (!clock['now']) {
                                                  +      clock = { 'now': function () { return +(new Date); } };
                                                  +    }
                                                  +
                                                  +    // The loop is broken into a series of continuations to make sure that we
                                                  +    // don't make the browser unresponsive when rewriting a large page.
                                                  +    var k = 0;
                                                  +    var prettyPrintingJob;
                                                  +
                                                  +    var langExtensionRe = /\blang(?:uage)?-([\w.]+)(?!\S)/;
                                                  +    var prettyPrintRe = /\bprettyprint\b/;
                                                  +
                                                  +    function doWork() {
                                                  +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
                                                  +                     clock['now']() + 250 /* ms */ :
                                                  +                     Infinity);
                                                  +      for (; k < elements.length && clock['now']() < endTime; k++) {
                                                  +        var cs = elements[k];
                                                  +        var className = cs.className;
                                                  +        if (className.indexOf('prettyprint') >= 0) {
                                                  +          // If the classes includes a language extensions, use it.
                                                  +          // Language extensions can be specified like
                                                  +          //     <pre class="prettyprint lang-cpp">
                                                  +          // the language extension "cpp" is used to find a language handler as
                                                  +          // passed to PR.registerLangHandler.
                                                  +          // HTML5 recommends that a language be specified using "language-"
                                                  +          // as the prefix instead.  Google Code Prettify supports both.
                                                  +          // http://dev.w3.org/html5/spec-author-view/the-code-element.html
                                                  +          var langExtension = className.match(langExtensionRe);
                                                  +          // Support <pre class="prettyprint"><code class="language-c">
                                                  +          var wrapper;
                                                  +          if (!langExtension && (wrapper = childContentWrapper(cs))
                                                  +              && "CODE" === wrapper.tagName) {
                                                  +            langExtension = wrapper.className.match(langExtensionRe);
                                                  +          }
                                                  +
                                                  +          if (langExtension) {
                                                  +            langExtension = langExtension[1];
                                                  +          }
                                                  +
                                                  +          // make sure this is not nested in an already prettified element
                                                  +          var nested = false;
                                                  +          for (var p = cs.parentNode; p; p = p.parentNode) {
                                                  +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
                                                  +                 p.tagName === 'xmp') &&
                                                  +                p.className && p.className.indexOf('prettyprint') >= 0) {
                                                  +              nested = true;
                                                  +              break;
                                                  +            }
                                                  +          }
                                                  +          if (!nested) {
                                                  +            // Look for a class like linenums or linenums:<n> where <n> is the
                                                  +            // 1-indexed number of the first line.
                                                  +            var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/);
                                                  +            lineNums = lineNums
                                                  +                  ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true
                                                  +                  : false;
                                                  +            if (lineNums) { numberLines(cs, lineNums); }
                                                  +
                                                  +            // do the pretty printing
                                                  +            prettyPrintingJob = {
                                                  +              langExtension: langExtension,
                                                  +              sourceNode: cs,
                                                  +              numberLines: lineNums
                                                  +            };
                                                  +            applyDecorator(prettyPrintingJob);
                                                  +          }
                                                  +        }
                                                  +      }
                                                  +      if (k < elements.length) {
                                                  +        // finish up in a continuation
                                                  +        setTimeout(doWork, 250);
                                                  +      } else if (opt_whenDone) {
                                                  +        opt_whenDone();
                                                  +      }
                                                  +    }
                                                  +
                                                  +    doWork();
                                                  +  }
                                                  +
                                                  +   /**
                                                  +    * Find all the {@code <pre>} and {@code <code>} tags in the DOM with
                                                  +    * {@code class=prettyprint} and prettify them.
                                                  +    *
                                                  +    * @param {Function?} opt_whenDone if specified, called when the last entry
                                                  +    *     has been finished.
                                                  +    */
                                                  +  window['prettyPrintOne'] = prettyPrintOne;
                                                  +   /**
                                                  +    * Pretty print a chunk of code.
                                                  +    *
                                                  +    * @param {string} sourceCodeHtml code as html
                                                  +    * @return {string} code as html, but prettier
                                                  +    */
                                                  +  window['prettyPrint'] = prettyPrint;
                                                  +   /**
                                                  +    * Contains functions for creating and registering new language handlers.
                                                  +    * @type {Object}
                                                  +    */
                                                  +  window['PR'] = {
                                                  +        'createSimpleLexer': createSimpleLexer,
                                                  +        'registerLangHandler': registerLangHandler,
                                                  +        'sourceDecorator': sourceDecorator,
                                                  +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
                                                  +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
                                                  +        'PR_COMMENT': PR_COMMENT,
                                                  +        'PR_DECLARATION': PR_DECLARATION,
                                                  +        'PR_KEYWORD': PR_KEYWORD,
                                                  +        'PR_LITERAL': PR_LITERAL,
                                                  +        'PR_NOCODE': PR_NOCODE,
                                                  +        'PR_PLAIN': PR_PLAIN,
                                                  +        'PR_PUNCTUATION': PR_PUNCTUATION,
                                                  +        'PR_SOURCE': PR_SOURCE,
                                                  +        'PR_STRING': PR_STRING,
                                                  +        'PR_TAG': PR_TAG,
                                                  +        'PR_TYPE': PR_TYPE
                                                  +      };
                                                  +})();
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/glyphicons-halflings.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/glyphicons-halflings.png
                                                  new file mode 100644
                                                  index 00000000..a9969993
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/glyphicons-halflings.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/jquery.toolbar.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/jquery.toolbar.js
                                                  new file mode 100644
                                                  index 00000000..e635fb81
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/jquery.toolbar.js
                                                  @@ -0,0 +1,238 @@
                                                  +/**
                                                  + * Toolbar.js
                                                  + *
                                                  + * @fileoverview  jQuery plugin that creates tooltip style toolbars.
                                                  + * @link          http://paulkinzett.github.com/toolbar/
                                                  + * @author        Paul Kinzett (http://kinzett.co.nz/)
                                                  + * @version       1.0.4
                                                  + * @requires      jQuery 1.7+
                                                  + *
                                                  + * @license jQuery Toolbar Plugin v1.0.4
                                                  + * http://paulkinzett.github.com/toolbar/
                                                  + * Copyright 2013 Paul Kinzett (http://kinzett.co.nz/)
                                                  + * Released under the MIT license.
                                                  + * <https://raw.github.com/paulkinzett/toolbar/master/LICENSE.txt>
                                                  + */
                                                  +
                                                  +if ( typeof Object.create !== 'function' ) {
                                                  +    Object.create = function( obj ) {
                                                  +        function F() {}
                                                  +        F.prototype = obj;
                                                  +        return new F();
                                                  +    };
                                                  +}
                                                  +
                                                  +(function( $, window, document, undefined ) {
                                                  +
                                                  +    var ToolBar = {
                                                  +        init: function( options, elem ) {
                                                  +            var self = this;
                                                  +            self.elem = elem;
                                                  +            self.$elem = $( elem );
                                                  +            self.options = $.extend( {}, $.fn.toolbar.options, options );
                                                  +            self.toolbar = $('<div class="tool-container gradient" />')
                                                  +                .addClass('tool-'+self.options.position)
                                                  +                .addClass('tool-rounded')
                                                  +                .append('<div class="tool-items" />')
                                                  +                .append('<div class="arrow" />')
                                                  +                .appendTo('body')
                                                  +                .css('opacity', 0)
                                                  +                .hide();
                                                  +            self.toolbar_arrow = self.toolbar.find('.arrow');
                                                  +            self.initializeToolbar();
                                                  +        },
                                                  +
                                                  +        initializeToolbar: function() {
                                                  +            var self = this;
                                                  +            self.populateContent();
                                                  +            self.setTrigger();
                                                  +            self.toolbarWidth = self.toolbar.width();
                                                  +        },
                                                  +
                                                  +        setTrigger: function() {
                                                  +            var self = this;
                                                  +            self.$elem.on('click', function(event) {
                                                  +                event.preventDefault();
                                                  +                if(self.$elem.hasClass('pressed')) {
                                                  +                    self.hide();
                                                  +                } else {
                                                  +                    self.show();
                                                  +                }
                                                  +            });
                                                  +
                                                  +            if (self.options.hideOnClick) {
                                                  +                $('html').on("click.toolbar", function ( event ) {
                                                  +                    if (event.target != self.elem &&
                                                  +                        self.$elem.has(event.target).length === 0 &&
                                                  +                        self.toolbar.has(event.target).length === 0 &&
                                                  +                        self.toolbar.is(":visible")) {
                                                  +                        self.hide();
                                                  +                    }
                                                  +                });
                                                  +            }
                                                  +
                                                  +            $(window).resize(function( event ) {
                                                  +                event.stopPropagation();
                                                  +                if ( self.toolbar.is(":visible") ) {
                                                  +                    self.toolbarCss = self.getCoordinates(self.options.position, 20);
                                                  +                    self.collisionDetection();
                                                  +                    self.toolbar.css( self.toolbarCss );
                                                  +                    self.toolbar_arrow.css( self.arrowCss );
                                                  +                }
                                                  +            });
                                                  +        },
                                                  +
                                                  +        populateContent: function() {
                                                  +            var self = this;
                                                  +            var location = self.toolbar.find('.tool-items');
                                                  +            var content = $(self.options.content).clone( true ).find('a').addClass('tool-item gradient');
                                                  +            location.html(content);
                                                  +            location.find('.tool-item').on('click', function(event) {
                                                  +                event.preventDefault();
                                                  +                self.$elem.trigger('toolbarItemClick', this);
                                                  +            });
                                                  +        },
                                                  +
                                                  +        calculatePosition: function() {
                                                  +            var self = this;
                                                  +                self.arrowCss = {};
                                                  +                self.toolbarCss = self.getCoordinates(self.options.position, 0);
                                                  +                self.toolbarCss.position = 'absolute';
                                                  +                self.toolbarCss.zIndex = self.options.zIndex;
                                                  +                self.collisionDetection();
                                                  +                self.toolbar.css(self.toolbarCss);
                                                  +                self.toolbar_arrow.css(self.arrowCss);
                                                  +        },
                                                  +
                                                  +        getCoordinates: function( position, adjustment ) {
                                                  +            var self = this;
                                                  +            self.coordinates = self.$elem.offset();
                                                  +
                                                  +            if (self.options.adjustment && self.options.adjustment[self.options.position])
                                                  +                adjustment = self.options.adjustment[self.options.position];
                                                  +
                                                  +            switch(self.options.position) {
                                                  +                case 'top':
                                                  +                    return {
                                                  +                        left: self.coordinates.left-(self.toolbar.width()/2)+(self.$elem.width()/2),
                                                  +                        top: self.coordinates.top-self.$elem.height()-adjustment,
                                                  +                        right: 'auto'
                                                  +                    };
                                                  +                case 'left':
                                                  +                    return {
                                                  +                        left: self.coordinates.left-(self.toolbar.width()/2)-(self.$elem.width()/2)-adjustment,
                                                  +                        top: self.coordinates.top-(self.toolbar.height()/2)+(self.$elem.height()/2),
                                                  +                        right: 'auto'
                                                  +                    };
                                                  +                case 'right':
                                                  +                    return {
                                                  +                        left: self.coordinates.left+(self.toolbar.width()/2)+(self.$elem.width()/3)+adjustment,
                                                  +                        top: self.coordinates.top-(self.toolbar.height()/2)+(self.$elem.height()/2),
                                                  +                        right: 'auto'
                                                  +                    };
                                                  +                case 'bottom':
                                                  +                    return {
                                                  +                        left: self.coordinates.left-(self.toolbar.width()/2)+(self.$elem.width()/2),
                                                  +                        top: self.coordinates.top+self.$elem.height()+adjustment,
                                                  +                        right: 'auto'
                                                  +                    };
                                                  +            }
                                                  +        },
                                                  +
                                                  +        collisionDetection: function() {
                                                  +            var self = this;
                                                  +            var edgeOffset = 20;
                                                  +            if(self.options.position == 'top' || self.options.position == 'bottom') {
                                                  +                self.arrowCss = {left: '50%', right: '50%'};
                                                  +                if( self.toolbarCss.left < edgeOffset ) {
                                                  +                    self.toolbarCss.left = edgeOffset;
                                                  +                    self.arrowCss.left = self.$elem.offset().left + self.$elem.width()/2-(edgeOffset);
                                                  +                }
                                                  +                else if(($(window).width() - (self.toolbarCss.left + self.toolbarWidth)) < edgeOffset) {
                                                  +                    self.toolbarCss.right = edgeOffset;
                                                  +                    self.toolbarCss.left = 'auto';
                                                  +                    self.arrowCss.left = 'auto';
                                                  +                    self.arrowCss.right = ($(window).width()-self.$elem.offset().left)-(self.$elem.width()/2)-(edgeOffset)-5;
                                                  +                }
                                                  +            }
                                                  +        },
                                                  +
                                                  +        show: function() {
                                                  +            var self = this;
                                                  +            var animation = {'opacity': 1};
                                                  +
                                                  +            self.$elem.addClass('pressed');
                                                  +            self.calculatePosition();
                                                  +
                                                  +            switch(self.options.position) {
                                                  +                case 'top':
                                                  +                    animation.top = '-=20';
                                                  +                    break;
                                                  +                case 'left':
                                                  +                    animation.left = '-=20';
                                                  +                    break;
                                                  +                case 'right':
                                                  +                    animation.left = '+=20';
                                                  +                    break;
                                                  +                case 'bottom':
                                                  +                    animation.top = '+=20';
                                                  +                    break;
                                                  +            }
                                                  +
                                                  +            self.toolbar.show().animate(animation, 200 );
                                                  +            self.$elem.trigger('toolbarShown');
                                                  +        },
                                                  +
                                                  +        hide: function() {
                                                  +            var self = this;
                                                  +            var animation = {'opacity': 0};
                                                  +            self.$elem.removeClass('pressed');
                                                  +            switch(self.options.position) {
                                                  +                case 'top':
                                                  +                    animation.top = '+=20';
                                                  +                    break;
                                                  +                case 'left':
                                                  +                    animation.left = '+=20';
                                                  +                    break;
                                                  +                case 'right':
                                                  +                    animation.left = '-=20';
                                                  +                    break;
                                                  +                case 'bottom':
                                                  +                    animation.top = '-=20';
                                                  +                    break;
                                                  +            }
                                                  +
                                                  +            self.toolbar.animate(animation, 200, function() {
                                                  +                self.toolbar.hide();
                                                  +            });
                                                  +
                                                  +            self.$elem.trigger('toolbarHidden');
                                                  +        },
                                                  +
                                                  +        getToolbarElement: function () {
                                                  +            return this.toolbar.find('.tool-items');
                                                  +        }
                                                  +    };
                                                  +
                                                  +    $.fn.toolbar = function( options ) {
                                                  +        if ($.isPlainObject( options )) {
                                                  +            return this.each(function() {
                                                  +                var toolbarObj = Object.create( ToolBar );
                                                  +                toolbarObj.init( options, this );
                                                  +                $(this).data('toolbarObj', toolbarObj);
                                                  +            });
                                                  +        } else if ( typeof options === 'string' && options.indexOf('_') !== 0 ) {
                                                  +            var toolbarObj = $(this).data('toolbarObj');
                                                  +            var method = toolbarObj[options];
                                                  +            return method.apply(toolbarObj, $.makeArray(arguments).slice(1));
                                                  +        }
                                                  +    };
                                                  +
                                                  +    $.fn.toolbar.options = {
                                                  +        content: '#myContent',
                                                  +        position: 'top',
                                                  +        hideOnClick: false,
                                                  +        zIndex: 120
                                                  +    };
                                                  +
                                                  +}) ( jQuery, window, document );
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/jquery.toolbar.min.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/jquery.toolbar.min.js
                                                  new file mode 100644
                                                  index 00000000..34b54203
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/jquery.toolbar.min.js
                                                  @@ -0,0 +1 @@
                                                  +if(typeof Object.create!=="function"){Object.create=function(b){function a(){}a.prototype=b;return new a()}}(function(d,c,b,e){var a={init:function(g,h){var f=this;f.elem=h;f.$elem=d(h);f.options=d.extend({},d.fn.toolbar.options,g);f.toolbar=d('<div class="tool-container gradient" />').addClass("tool-"+f.options.position).addClass("tool-rounded").append('<div class="tool-items" />').append('<div class="arrow" />').appendTo("body").css("opacity",0).hide();f.toolbar_arrow=f.toolbar.find(".arrow");f.initializeToolbar()},initializeToolbar:function(){var f=this;f.populateContent();f.setTrigger();f.toolbarWidth=f.toolbar.width()},setTrigger:function(){var f=this;f.$elem.on("click",function(g){g.preventDefault();g.stopPropagation();if(f.$elem.hasClass("pressed")){f.hide()}else{f.show()}});d(c).resize(function(g){g.stopPropagation();if(f.toolbar.is(":visible")){f.toolbarCss=f.getCoordinates(f.options.position,20);f.collistionDetection();f.toolbar.css(f.toolbarCss);f.toolbar_arrow.css(f.arrowCss)}})},populateContent:function(){var g=this;var f=g.toolbar.find(".tool-items");var h=d(g.options.content).clone(true).find("a").addClass("tool-item gradient");f.html(h);f.find(".tool-item").on("click",function(i){i.preventDefault();g.$elem.trigger("toolbarItemClick",this)})},calculatePosition:function(){var f=this;f.arrowCss={};f.toolbarCss=f.getCoordinates(f.options.position,0);f.toolbarCss.position="absolute";f.toolbarCss.zIndex=f.options.zIndex;f.collistionDetection();f.toolbar.css(f.toolbarCss);f.toolbar_arrow.css(f.arrowCss)},getCoordinates:function(f,h){var g=this;g.coordinates=g.$elem.offset();switch(g.options.position){case"top":return{left:g.coordinates.left-(g.toolbar.width()/2)+(g.$elem.width()/2),top:g.coordinates.top-g.$elem.height()-h,right:"auto"};case"left":return{left:g.coordinates.left-(g.toolbar.width()/2)-(g.$elem.width()/2)-h,top:g.coordinates.top-(g.toolbar.height()/2)+(g.$elem.height()/2),right:"auto"};case"right":return{left:g.coordinates.left+(g.toolbar.width()/2)+(g.$elem.width()/3)+h,top:g.coordinates.top-(g.toolbar.height()/2)+(g.$elem.height()/2),right:"auto"};case"bottom":return{left:g.coordinates.left-(g.toolbar.width()/2)+(g.$elem.width()/2),top:g.coordinates.top+g.$elem.height()+h,right:"auto"}}},collistionDetection:function(){var f=this;var g=20;if(f.options.position=="top"||f.options.position=="bottom"){f.arrowCss={left:"50%",right:"50%"};if(f.toolbarCss.left<g){f.toolbarCss.left=g;f.arrowCss.left=f.$elem.offset().left+f.$elem.width()/2-(g)}else{if((d(c).width()-(f.toolbarCss.left+f.toolbarWidth))<g){f.toolbarCss.right=g;f.toolbarCss.left="auto";f.arrowCss.left="auto";f.arrowCss.right=(d(c).width()-f.$elem.offset().left)-(f.$elem.width()/2)-(g)-5}}}},show:function(){var f=this;var g={opacity:1};f.$elem.addClass("pressed");f.calculatePosition();switch(f.options.position){case"top":g.top="-=20";break;case"left":g.left="-=20";break;case"right":g.left="+=20";break;case"bottom":g.top="+=20";break}f.bindHideEvent();f.toolbar.show().animate(g,200);f.$elem.trigger("toolbarShown")},bindHideEvent:function(){var f=this;var g="click.toolbar";if(f.options.hideOnClick){d("html").off(g).on(g,function(h){if(f.toolbar.has(h.target).length===0){f.hide()}})}},hide:function(){var f=this;var g={opacity:0};f.$elem.removeClass("pressed");switch(f.options.position){case"top":g.top="+=20";break;case"left":g.left="+=20";break;case"right":g.left="-=20";break;case"bottom":g.top="-=20";break}f.toolbar.animate(g,200,function(){f.toolbar.hide()});f.$elem.trigger("toolbarHidden")},getToolbarElement:function(){return this.toolbar.find(".tool-items")}};d.fn.toolbar=function(g){if(d.isPlainObject(g)){return this.each(function(){var i=Object.create(a);i.init(g,this);d(this).data("toolbarObj",i)})}else{if(typeof g==="string"&&g.indexOf("_")!==0){var f=d(this).data("toolbarObj");var h=f[g];return h.apply(f,d.makeArray(arguments).slice(1))}}};d.fn.toolbar.options={content:"#myContent",position:"top",hideOnClick:false,zIndex:120}})(jQuery,window,document);
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/jquery.toolbars.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/jquery.toolbars.css
                                                  new file mode 100644
                                                  index 00000000..fb6c1338
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/jquery.toolbars.css
                                                  @@ -0,0 +1,133 @@
                                                  +
                                                  +.tool-container {
                                                  +	background-color: #d0cbcb;
                                                  +	background: -webkit-gradient(linear, left top, left bottom, color-stop(14%, #d0cbcb), color-stop(100%, #e9e5e5));
                                                  +	background: -moz-linear-gradient(top, #d0cbcb 14%, #e9e5e5 100%);
                                                  +	background: -ms-linear-gradient(top, #d0cbcb 14%,#e9e5e5 100%);
                                                  +	background: linear-gradient(to bottom, #d0cbcb 14%,#e9e5e5 100%);
                                                  +	background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIxNCUiIHN0b3AtY29sb3I9IiNkMGNiY2IiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjZTllNWU1IiBzdG9wLW9wYWNpdHk9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9InVybCgjZ3JhZC11Y2dnLWdlbmVyYXRlZCkiIC8+Cjwvc3ZnPg==);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#d0cbcb', endColorstr='#e9e5e5',GradientType=0 );
                                                  +	border-radius: 3px;
                                                  +	box-shadow: 0px 0px 15px #000;
                                                  +	position: absolute;				
                                                  +}
                                                  +
                                                  +.tool-container.tool-top, .tool-container.tool-bottom {
                                                  +	height: 34px;
                                                  +	border-bottom: 1px solid #beb8b8 ; /* #B1A9A9 */
                                                  +}
                                                  +
                                                  +.tool-items {
                                                  +	height: 100%;	
                                                  +}
                                                  +
                                                  +.tool-top .tool-item, .tool-bottom .tool-item {
                                                  +	float: left;
                                                  +	border-right: 1px solid #e2dfdf;
                                                  +	border-left: 1px solid #9f9898;
                                                  +}
                                                  +
                                                  +.tool-left .tool-item, .tool-right .tool-item {
                                                  +	height: 34px;
                                                  +	border-top: 1px solid #e2dfdf;
                                                  +	border-bottom: 1px solid #9f9898;
                                                  +}
                                                  +
                                                  +
                                                  +.tool-item {
                                                  +	height: 100%;
                                                  +	display: block;				
                                                  +	width: 44px;
                                                  +	text-align: center;
                                                  +}
                                                  +
                                                  +.tool-item:first-child {
                                                  +	border-left: none;
                                                  +}
                                                  +
                                                  +.tool-left .tool-item:first-child, .tool-right .tool-item:first-child {
                                                  +	border-top: 1px solid transparent;
                                                  +}
                                                  +
                                                  +.tool-item:last-child {
                                                  +	border-right: none;
                                                  +	border-bottom: none;
                                                  +}
                                                  +
                                                  +.tool-item.selected, .tool-item:hover  {
                                                  +	background: #a79f9f;
                                                  +	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #a79f9f), color-stop(93%, #e2dfdf));
                                                  +	background: -moz-linear-gradient(top, #a79f9f 0%, #e2dfdf 93%);
                                                  +	background: -ms-linear-gradient(top, #a79f9f 0%, #e2dfdf 93%);
                                                  +	background: linear-gradient(to bottom, #a79f9f 0%, #e2dfdf 93%);
                                                  +	background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E3OWY5ZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjkzJSIgc3RvcC1jb2xvcj0iI2UyZGZkZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a79f9f', endColorstr='#e2dfdf',GradientType=0 );
                                                  +}
                                                  +
                                                  +.tool-top .tool-item:last-child:hover, .tool-bottom .tool-item:last-child:hover {
                                                  +	border-top-right-radius: 4px;
                                                  +	border-bottom-right-radius: 4px;
                                                  +}
                                                  +
                                                  +.tool-top  .tool-item:first-child:hover, .tool-bottom  .tool-item:first-child:hover {
                                                  +	border-top-left-radius: 4px;
                                                  +	border-bottom-left-radius: 4px;
                                                  +}
                                                  +
                                                  +.tool-left .tool-item:last-child:hover, .tool-right .tool-item:last-child:hover {
                                                  +	border-bottom-right-radius: 4px;
                                                  +	border-bottom-left-radius: 4px;
                                                  +}
                                                  +
                                                  +.tool-left .tool-item:first-child:hover, .tool-right .tool-item:first-child:hover {
                                                  +	border-top-right-radius: 4px;
                                                  +	border-top-left-radius: 4px;
                                                  +}
                                                  +
                                                  +.tool-container .arrow {
                                                  +	width:0;
                                                  +	height:0;
                                                  +	position: absolute;	
                                                  +	border-width:7px;
                                                  +	border-style:solid;
                                                  +}
                                                  +
                                                  +.tool-container.tool-top .arrow {
                                                  +	border-color: #e9e5e5 transparent transparent; 
                                                  +	left: 50%;  
                                                  +	bottom: -14px;
                                                  +	margin-left: -7px;
                                                  +}
                                                  +
                                                  +.tool-container.tool-bottom .arrow {
                                                  +	border-color: transparent transparent #e9e5e5; 
                                                  +	left: 50%;  
                                                  +	top: -14px;
                                                  +	margin-left: -7px;
                                                  +}
                                                  +
                                                  +.tool-container.tool-left .arrow {
                                                  +	border-color: transparent transparent transparent #E9E5E5;
                                                  +	top: 50%;
                                                  +	right: -14px;
                                                  +	margin-top: -7px;
                                                  +}
                                                  +
                                                  +.tool-container.tool-right .arrow {
                                                  +	border-color: transparent #E9E5E5 transparent transparent;
                                                  +	top: 50%;
                                                  +	left: -14px;
                                                  +	margin-top: -7px;
                                                  +}
                                                  +
                                                  +.demo-link {
                                                  +	color: #89CDE4;
                                                  +	text-decoration: underline;
                                                  +	cursor: pointer;
                                                  +	margin-left: 30px;
                                                  +}
                                                  +
                                                  +.demo-link:hover {
                                                  +	text-decoration: none;
                                                  +	cursor: pointer;
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/toolbar.jquery.json b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/toolbar.jquery.json
                                                  new file mode 100644
                                                  index 00000000..a754ee5e
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/toolbar/toolbar.jquery.json
                                                  @@ -0,0 +1,25 @@
                                                  +{
                                                  +    "name": "toolbar",
                                                  +    "title": "Toolbar",
                                                  +    "description": "A jQuery plugin that creates tooltip style toolbars.",
                                                  +    "keywords": [
                                                  +        "toolbar",
                                                  +        "tooltip"
                                                  +    ],
                                                  +    "version": "1.0.0",
                                                  +    "author": {
                                                  +        "name": "Paul Kinzett",
                                                  +        "url": "http://kinzett.co.nz"
                                                  +    },
                                                  +    "licenses": [
                                                  +        {
                                                  +            "type": "MIT",
                                                  +            "url": "http://github.com/paulkinzett/toolbar/blob/master/LICENSE.txt"
                                                  +        }
                                                  +    ],
                                                  +    "homepage": "http://paulkinzett.github.com/toolbar",
                                                  +    "docs": "http://paulkinzett.github.com/toolbar",
                                                  +    "dependencies": {
                                                  +        "jquery": ">=1.7"
                                                  +    }
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/util.plugs.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/util.plugs.js
                                                  new file mode 100644
                                                  index 00000000..746a982f
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/js/util.plugs.js
                                                  @@ -0,0 +1,490 @@
                                                  +
                                                  +/**
                                                  +* Plugs
                                                  +**/
                                                  +
                                                  +(function($) {
                                                  +	
                                                  +	/**
                                                  +	 * 打开一个遮罩
                                                  +	 * @param {Object} method
                                                  +	 */
                                                  +	var maskStackCount = 0;
                                                  +	$.mask = function(method){
                                                  +		if(typeof method == "undefined"){
                                                  +			method="open";
                                                  +		}
                                                  +		if (method == "open") {
                                                  +			if (maskStackCount == 0) {
                                                  +				var mask = $("<div id='window-mask' class='window-mask' style='display:none'></div>").appendTo("body");
                                                  +				mask.css({
                                                  +					width: $(window).width() + "px",
                                                  +					height: $(window).height() + "px",
                                                  +					filter: "alpha(opacity=60)"
                                                  +				}).show();
                                                  +				$(window).bind("resize.mask", function(){
                                                  +					mask.css({
                                                  +						width: $(window).width() + "px",
                                                  +						height: $(window).height() + "px"
                                                  +					});
                                                  +				});
                                                  +			}
                                                  +			maskStackCount++;
                                                  +		}
                                                  +		else if(method == "close"){
                                                  +			maskStackCount--;
                                                  +			if(maskStackCount == 0){
                                                  +				$("#window-mask").remove();
                                                  +				$(window).unbind("resize.mask");
                                                  +			}
                                                  +		}
                                                  +		
                                                  +	};
                                                  +	/**
                                                  +	 * 弹出窗口
                                                  +	 * ---options---
                                                  +	 * width
                                                  +	 * heiht
                                                  +	 * title
                                                  +	 * onClose
                                                  +	 */
                                                  +	$.fn.dialog = function(options){
                                                  +		var dialogWin = $(this);
                                                  +		//如果是字符串类型,则调用方法
                                                  +		if(typeof options == "string"){
                                                  +			//关闭
                                                  +			if(options == "close"){
                                                  +				dialogWin.find(".dialog_close").trigger("click");
                                                  +				if($("#window-mask") != null){
                                                  +					$("#window-mask").hide();
                                                  +					if ($.browser.msie) {
                                                  +                        $("#canvas").show();
                                                  +                    }
                                                  +				}
                                                  +			}
                                                  +		}else{
                                                  +			var defaults = {
                                                  +				fixed: true,
                                                  +				closable: true,
                                                  +				mask: true
                                                  +			};
                                                  +			options = $.extend(defaults, options);
                                                  +			//初始化,打开
                                                  +			if(!options){
                                                  +				options = {};
                                                  +			}
                                                  +			var dialogWidth = dialogWin.width();
                                                  +			if(options.width){
                                                  +				dialogWidth = options.width;
                                                  +			}
                                                  +			var dialogHeight = dialogWin.height();
                                                  +			if(options.height){
                                                  +				dialogHeight = options.height;
                                                  +			}
                                                  +			var title = "";
                                                  +			if(options.title){
                                                  +				title = options.title;
                                                  +			}else if(dialogWin.attr("title")){
                                                  +				title = dialogWin.attr("title");
                                                  +				dialogWin.attr("title", "");
                                                  +			}
                                                  +			dialogWin.css({
                                                  +				"width": dialogWidth,
                                                  +				"height": dialogHeight
                                                  +			})
                                                  +			.addClass("dialog_box")
                                                  +			.show();
                                                  +			var dialogClose = $("<div class='dialog_close'></div>")
                                                  +				.appendTo(dialogWin);
                                                  +			dialogClose.bind("click", function(){
                                                  +				if(options.onClose){
                                                  +					if(options.onClose() == false){
                                                  +						return;
                                                  +					}
                                                  +				}
                                                  +				$.mask("close");
                                                  +				dialogWin.hide();
                                                  +				dialogWin.removeClass("dialog_box").find(".dialog_close").remove();
                                                  +				var title = dialogWin.find(".dialog_title");
                                                  +				dialogWin.attr("title",title.text());
                                                  +				title.remove();
                                                  +				$(window).unbind("resize.dialog");
                                                  +				if ($.browser.msie) {
                                                  +                    $("#canvas").show();
                                                  +                 }
                                                  +			});
                                                  +			if(options.closable){
                                                  +				dialogClose.show();
                                                  +			}
                                                  +			if(title != ""){
                                                  +				dialogWin.prepend("<h2 class='dialog_title'>"+title+"</h2>");
                                                  +			}
                                                  +			//遮罩
                                                  +			if(options.mask){
                                                  +				$.mask();
                                                  +			}
                                                  +			$(window).bind("resize.dialog", function(){
                                                  +				var top = 0;
                                                  +				if(options.fixed){
                                                  +					dialogWin.css("position", "fixed");
                                                  +					top = ($(window).height() - dialogHeight - 30) / 2 + "px";
                                                  +				}else{
                                                  +					dialogWin.css("position", "absolute");
                                                  +					top = ($(window).height() - dialogHeight - 30) / 2 + $(document).scrollTop() + "px";
                                                  +				}
                                                  +				var left = ($(window).width() - dialogWidth - 30) / 2 + "px";
                                                  +				dialogWin.css({
                                                  +					top: top,
                                                  +					left: left
                                                  +				});
                                                  +			});
                                                  +			$(window).trigger("resize.dialog");
                                                  +			dialogWin.find(".dialog_title").draggables({target:dialogWin});
                                                  +			if ($.browser.msie) {
                                                  +				//$("#canvas").hide();
                                                  +            }
                                                  +		}
                                                  +	};
                                                  +	
                                                  +	$.confirm = function(options){
                                                  +		var confirmWin = $("#global_confirm_window");
                                                  +		if(!confirmWin.length){
                                                  +			confirmWin = $("<div id='global_confirm_window' title='提示'><div class='msg'></div><div class='buttons'><a href='javascript:' class='button default okbtn'>确定</a>&nbsp;&nbsp;<a href='javascript:' class='button cancelbtn'>关闭</a></div></div>").appendTo("body");
                                                  +		}
                                                  +		confirmWin.find(".msg").html(options.content);
                                                  +		if(options.width){
                                                  +			confirmWin.css("width", options.width);
                                                  +		}
                                                  +		if(options.height){
                                                  +		    confirmWin.css("height", confirmWin.height()-($("#global_confirm_window .msg").height()-options.height));
                                                  +			$("#global_confirm_window .msg").css("height", options.height);
                                                  +		}
                                                  +		confirmWin.dialog();
                                                  +		confirmWin.find(".okbtn").unbind().bind("click", function(){
                                                  +			confirmWin.dialog("close");
                                                  +			if(options.onConfirm){
                                                  +				options.onConfirm();
                                                  +			}
                                                  +		});
                                                  +		confirmWin.find(".cancelbtn").unbind().bind("click", function(){
                                                  +			confirmWin.dialog("close");
                                                  +			if(options.onCancel){
                                                  +				options.onCancel();
                                                  +			}
                                                  +		});
                                                  +	};
                                                  +	
                                                  +	/**
                                                  +	 * 下拉菜单
                                                  +	 * @param options{
                                                  +	 * 	position: left, center, right
                                                  +	 * 	offsetX 左偏移
                                                  +	 * 	offsetY 上下偏移
                                                  +	 * 	zindex zindex值,默认2
                                                  +	 * 	autoClose 是否点击其他区域后自动关闭
                                                  +	 * 	closeAfterClick 点击后是否自动关闭
                                                  +	 * 	target 相对的某个元素弹出
                                                  +	 * 	onClose 关闭时执行的函数
                                                  +	 *  autoPosition 是否当显示位置超出浏览器窗口时,自动移动
                                                  +	 * }
                                                  +	 */
                                                  +	$.fn.popMenu = function(options){
                                                  +		var menu = $(this);
                                                  +		if(typeof options == "string"){
                                                  +			//关闭
                                                  +			if(options == "close"){
                                                  +				menu.hide().removeClass("popover");
                                                  +				$(window).unbind("resize.popmenu");
                                                  +			}
                                                  +			return;
                                                  +		}
                                                  +		var defaults = {
                                                  +				position: "left",
                                                  +				offsetX: 0,
                                                  +				offsetY: 0,
                                                  +				zindex: 2,
                                                  +				autoClose: true,
                                                  +				closeAfterClick: false,
                                                  +				autoPosition: true
                                                  +		};
                                                  +		var opt = $.extend(defaults, options);
                                                  +		var target = $(opt.target);
                                                  +		menu.addClass("popover").css("z-index", opt.zindex);
                                                  +		if(opt.autoClose){
                                                  +			if(opt.closeAfterClick == false){
                                                  +				menu.unbind("mouseup.popmenu").bind("mouseup.popmenu", function(e){
                                                  +					e.stopPropagation();
                                                  +				});
                                                  +			}
                                                  +			$(document).bind("mouseup.popmenu", function(){
                                                  +				menu.popMenu("close");
                                                  +				$(document).unbind("mouseup.popmenu");
                                                  +				if(opt.onClose){
                                                  +					opt.onClose();
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +		$(window).bind("resize.popmenu", function(){
                                                  +			menu.popMenu(options);
                                                  +		});
                                                  +		menu.show();
                                                  +		var left = 0;
                                                  +		if(opt.position == "center"){
                                                  +			left = target.offset().left + target.outerWidth() / 2 - menu.outerWidth() / 2;
                                                  +		}else if(opt.position == "right"){
                                                  +			left = target.offset().left + target.outerWidth() - menu.outerWidth();
                                                  +		}else{
                                                  +			left = target.offset().left;
                                                  +		}
                                                  +		if(left + menu.outerWidth() > $(window).width()){
                                                  +			left = $(window).width() - menu.outerWidth();
                                                  +		}
                                                  +		var top = target.offset().top + target.outerHeight();
                                                  +		if(opt.autoPosition && top + opt.offsetY + menu.outerHeight() > $(window).height() + $(document).scrollTop()){
                                                  +			menu.css({
                                                  +				top:$(window).height() - menu.outerHeight() + $(document).scrollTop(),
                                                  +				left:left + opt.offsetX
                                                  +			});
                                                  +		}else{
                                                  +			menu.css({
                                                  +				top:top + opt.offsetY,
                                                  +				left:left + opt.offsetX
                                                  +			});
                                                  +		}
                                                  +	};
                                                  +	
                                                  +	/**
                                                  +	 * 短提示,2000毫秒关闭
                                                  +	 * @param {Object} msg
                                                  +	 * @param {Object} type  [info,error,ok]
                                                  +	 */
                                                  +	$.simpleAlert=function(msg,type,delay){
                                                  +		if(msg == "close"){
                                                  +			$("#simplealert").remove();
                                                  +			return;
                                                  +		}
                                                  +		if($("#simplealert").length){
                                                  +			$("#simplealert").remove();
                                                  +		}
                                                  +		var alertType="simplealert-icon-info";
                                                  +		if(type){
                                                  +			alertType = "simplealert-icon-" + type;
                                                  +		}
                                                  +		var simpleAlert = $("<div id='simplealert' class='simplealert'></div>").appendTo("body");
                                                  +		var html = "<div class='"+alertType+"'>";
                                                  +		if(type == "loading"){
                                                  +			html += "<img src='../aws_img/designer/v2/designer/loading.gif' style='margin:10px 0px 0px 12px'/>";
                                                  +		}
                                                  +		html += "</div><div class='simplealert-msg'>"+msg+"</div><div class='simplealert-right'></div>";
                                                  +		simpleAlert.html(html);
                                                  +		simpleAlert.css("top", ( $(window).height() - simpleAlert.height() ) / 2+$(window).scrollTop() + "px"); 
                                                  +	    simpleAlert.css("left", ( $(window).width() - simpleAlert.width() ) / 2+$(window).scrollLeft() + "px");
                                                  +		simpleAlert.show();
                                                  +		if(delay != "no"){
                                                  +			setTimeout(function(){
                                                  +				simpleAlert.fadeOut(200);
                                                  +			},delay ? delay : 3500);
                                                  +		}
                                                  +	};
                                                  +	
                                                  +	/**
                                                  +	 * 默认的Tooltip
                                                  +	 * @param {Object} options
                                                  +	 */
                                                  +	$.fn.tooltip = function(content, type, fade){
                                                  +		var tip;
                                                  +		type = type ? type : "warning";
                                                  +		if(type != "none"){
                                                  +			content = "<img src='../aws_img/designer/icon/ico-"+type+".png' style='vertical-align:middle;margin-right:5px;'/><span>" 
                                                  +				+ content + "</span>";
                                                  +		}
                                                  +		if($("p#p_toolTip").length){
                                                  +			$("p#p_toolTip").remove();
                                                  +		}
                                                  +		$('body').append( '<p id="p_toolTip" class="radius3"><img id="img_toolTip_Arrow" src="../aws_img/designer/icon/arrow-left.png" />'+content+'</p>' );
                                                  +		tip =   $('p#p_toolTip');
                                                  +		$('p#p_toolTip #img_toolTip_Arrow').css({"position": "absolute", "top": "5px", "left": "-13px"});
                                                  +		if(!fade){
                                                  +			tip.show();
                                                  +		}else{
                                                  +			tip.fadeIn("fast");
                                                  +		}
                                                  +		tip.css({
                                                  +			left:$(this).offset().left + $(this).width() + 18,
                                                  +			top:$(this).offset().top - 16
                                                  +		});
                                                  +	};
                                                  +
                                                  +	/**
                                                  +	 * 关闭Tooltip
                                                  +	 */
                                                  +	$.closeTooltip = function(){
                                                  +		$("p#p_toolTip").remove();
                                                  +	};
                                                  +	
                                                  +	$.fn.draggables = function(options){
                                                  +		var defaults = {
                                                  +			target:$(this)
                                                  +		};
                                                  +		var opt = $.extend(defaults, options);
                                                  +		$(this).unbind("dragstart").bind("dragstart", function(){return false;});
                                                  +		$(this).unbind("mousedown.drag").bind("mousedown.drag", function(e){
                                                  +			$(document).bind("selectstart", function(){return false;});
                                                  +			var downX = e.pageX;
                                                  +			var downY = e.pageY;
                                                  +			var downLeft = opt.target.offset().left;
                                                  +			var downTop = opt.target.offset().top;
                                                  +			$(document).bind("mousemove.drag", function(e){
                                                  +				var left = e.pageX - downX + downLeft;
                                                  +				var top = e.pageY - downY + downTop;
                                                  +				if(opt.bounding){
                                                  +					var boundingleft = opt.bounding.offset().left;
                                                  +					var boundingtop = opt.bounding.offset().top;
                                                  +					if(left > boundingleft && top > boundingtop
                                                  +						&& left < boundingleft + opt.bounding.outerWidth() - opt.target.outerWidth()
                                                  +						&& top < boundingtop + opt.bounding.outerHeight() - opt.target.outerHeight()){
                                                  +						opt.target.offset({
                                                  +							left: left,
                                                  +							top: top
                                                  +						});
                                                  +					}
                                                  +				}else{
                                                  +				    if(top<0){
                                                  +				        top=0;
                                                  +				    }
                                                  +					opt.target.offset({
                                                  +						left: left,
                                                  +						top: top
                                                  +					});
                                                  +				}
                                                  +			});
                                                  +			$(document).bind("mouseup.drag", function(e){
                                                  +				$(document).unbind("selectstart");
                                                  +				$(document).unbind("mousemove.drag");
                                                  +				$(document).unbind("mouseup.drag");
                                                  +			});
                                                  +		});
                                                  +	};
                                                  +	
                                                  +	$.fn.suggest = function(options){
                                                  +		var target = $(this);
                                                  +		var defaults = {
                                                  +			valueField: "value",
                                                  +			width: target.outerWidth(),
                                                  +			format: function(item){
                                                  +				return item.text;
                                                  +			}
                                                  +		};
                                                  +		var opt = $.extend(defaults, options);
                                                  +		if(!target.data("suggest")){
                                                  +			var menu = $("<ul class='suggest_menu'></ul>").appendTo("body");
                                                  +			menu.width(opt.width);
                                                  +			target.data("suggest", menu);
                                                  +		}
                                                  +		var index = -1;
                                                  +		var last = "";
                                                  +		target.unbind("keydown.suggest").bind("keydown.suggest", function(e){
                                                  +			var suggest = target.data("suggest");
                                                  +			if(e.keyCode == 40){
                                                  +				//向下
                                                  +				e.preventDefault();
                                                  +				if(index < suggest.children().length - 1){
                                                  +					index ++;
                                                  +					suggest.find(".selected").removeClass("selected");
                                                  +					suggest.find("li[index=" + index + "]").addClass("selected");
                                                  +				}
                                                  +			}else if(e.keyCode == 38){
                                                  +				//向上
                                                  +				e.preventDefault();
                                                  +				suggest.find(".selected").removeClass("selected");
                                                  +				if(index >= 0){
                                                  +					index --;
                                                  +					suggest.find("li[index=" + index + "]").addClass("selected");
                                                  +				}
                                                  +			}else if(e.keyCode == 13){
                                                  +				var selected = suggest.find(".selected");
                                                  +				if(selected.length){
                                                  +					target.val(selected.attr("val"));
                                                  +				}
                                                  +				if(opt.onEnter){
                                                  +					opt.onEnter(target);
                                                  +				}
                                                  +				suggest.empty().popMenu("close");
                                                  +			}
                                                  +		}).unbind("keyup.suggest").bind("keyup.suggest", function(e){
                                                  +			var suggest = target.data("suggest");
                                                  +			var value = target.val();
                                                  +			if(value == ""){
                                                  +				suggest.empty().popMenu("close");
                                                  +			}else if(value != last){
                                                  +				index = -1;
                                                  +				$.get(opt.url, {q: value}, function(data){
                                                  +					suggest.empty();
                                                  +					var items = data.items;
                                                  +					if(items.length == 0){
                                                  +						suggest.empty().popMenu("close");
                                                  +					}else{
                                                  +						for(var i = 0; i < items.length; i++){
                                                  +							var item = items[i];
                                                  +							var itemHtml = "<li index='" + i + "' class='suggest_item' val='" + item[opt.valueField] + "'>";
                                                  +							itemHtml += opt.format(item);
                                                  +							itemHtml += "</li>";
                                                  +							suggest.append(itemHtml);
                                                  +						}
                                                  +						suggest.popMenu({
                                                  +							target: target,
                                                  +							zindex: 4
                                                  +						});
                                                  +						suggest.find(".suggest_item").bind("mousedown", function(e){
                                                  +							e.preventDefault();
                                                  +							target.val($(this).attr("val"));
                                                  +							if(opt.onEnter){
                                                  +								opt.onEnter(target);
                                                  +							}
                                                  +							suggest.empty().popMenu("close");
                                                  +						});
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +			last = value;
                                                  +		}).unbind("blur.suggest").bind("blur.suggest", function(e){
                                                  +			var suggest = target.data("suggest");
                                                  +			suggest.empty().popMenu("close");
                                                  +		});
                                                  +	};
                                                  +	/**************启动Title自定义提示***************/
                                                  +  //  $("[title],[original-title]").live("mouseover", function(){
                                                  + //       var target = $(this);
                                                  +  //      if(target.attr("title")){
                                                  +  //          target.attr("original-title", target.attr("title"));
                                                  +  //          target.removeAttr("title");
                                                  +   //     }
                                                  +   //     if(!target.attr("original-title")){
                                                  +   //         return;
                                                  +   //     }
                                                  +   //     var title = target.attr("original-title");
                                                  +   //     var tip = $("#hover_tip");
                                                  +   //     if(tip.length == 0){
                                                  +   //         tip = $("<div id='hover_tip'><div class='tip_arrow'></div><div class='tip_content radius3'></div></div>").appendTo("body");
                                                  +    //    }
                                                  +    //    $(".tip_content").text(title);
                                                  +    //    $("#hover_tip").show();
                                                  +   //     if(target.attr("title_pos") == "right"){
                                                  +    //        tip.css({
                                                  +     //           left: target.offset().left + target.outerWidth() + 7,
                                                  +     //           top: target.offset().top + target.outerHeight()/2 - tip.outerHeight()/2
                                                  +     //       });
                                                  +      //      $(".tip_arrow").addClass("tip_right").css("top", tip.outerHeight()/2 - 7);
                                                  +      //  }else{
                                                  +      //      tip.css({
                                                  +       //         left: target.offset().left + target.outerWidth()/2 - tip.outerWidth()/2,
                                                  +      //          top: target.offset().top + target.outerHeight()
                                                  +      //      });
                                                  +       //     $(".tip_arrow").removeClass("tip_right");
                                                  +      //  }
                                                  +    //}).live("mouseout", function(){
                                                  +    //    $("#hover_tip").hide();
                                                  +  //  });
                                                  +
                                                  +})(jQuery);
                                                  +
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/css/coe.font.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/css/coe.font.css
                                                  new file mode 100644
                                                  index 00000000..8407ad11
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/css/coe.font.css
                                                  @@ -0,0 +1,76 @@
                                                  +/*
                                                  +** create by renmm
                                                  +** date 2013/10/28 16:03;
                                                  +*/
                                                  +
                                                  +/*引入字体*/
                                                  +@font-face{
                                                  +	font-family:'ConceptboardDingbats';
                                                  +	src:url('../font/conceptboarddingbats-regular-webfont.eot');
                                                  +	src:url('../font/conceptboarddingbats-regular-webfont.eot?#iefix') format('embedded-opentype'),
                                                  +	url('../font/conceptboarddingbats-regular-webfont.woff') format('woff'),
                                                  +	url('../font/conceptboarddingbats-regular-webfont.ttf') format('truetype'),
                                                  +	url('../font/conceptboarddingbats-regular-webfont.svg#ConceptboardDingbats') format('svg');
                                                  +	font-weight:normal;font-style:normal
                                                  +}
                                                  +
                                                  +[class^="icon-"]:before,[class*="icon-"]:before{
                                                  +	font-family:ConceptboardDingbats;
                                                  +	font-weight:normal;
                                                  +	font-style:normal;
                                                  +	display:inline-block;
                                                  +	text-decoration:inherit;
                                                  +	text-decoration:none;
                                                  +	font-size:1.25em
                                                  +}
                                                  +
                                                  +/*
                                                  +**tiles:瓷砖
                                                  +**lists:列;
                                                  +*/
                                                  +.icons-group{
                                                  +	margin: 0;
                                                  +	padding: 0;
                                                  +}
                                                  +.icons-group .button2:first-child{
                                                  +	border-top-left-radius:3px;
                                                  +	border-bottom-left-radius:3px;
                                                  +}
                                                  +.icons-group .button2:last-child{
                                                  +	border-top-right-radius: 3px;
                                                  +	border-bottom-right-radius: 3px;
                                                  +}
                                                  +.icons-group span {
                                                  +    float: left;
                                                  +}
                                                  +.icon-tiles:before{content:"\e046";}
                                                  +.icon-lists:before{content:"\e061";}
                                                  +.button2{
                                                  +	border: 1px solid #BBBBBB;
                                                  +    cursor: pointer;
                                                  +}
                                                  +
                                                  +.current {
                                                  +    background: none repeat scroll 0 0 #E6E6E6;
                                                  +    box-shadow: 0 1px 3px 1px rgba(1, 1, 1, 0.15) inset;
                                                  +}
                                                  +
                                                  +.default {
                                                  +    background: none repeat scroll 0 0 #F4F4F4;
                                                  +    box-shadow: 0 1px 0 #FFFFFF inset;
                                                  +}
                                                  +.default:hover{
                                                  +	background: #fff;
                                                  +}
                                                  +
                                                  +.square {
                                                  +    font-size: 16px;
                                                  +    height: 28px;
                                                  +    line-height: 26px;
                                                  +    padding: 0 7px;
                                                  +    text-align: center;
                                                  +}
                                                  +.button.clean {
                                                  +    color: #404040;
                                                  +    text-shadow: none;
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/css/contentpane.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/css/contentpane.css
                                                  new file mode 100644
                                                  index 00000000..43046d3c
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/css/contentpane.css
                                                  @@ -0,0 +1,234 @@
                                                  +/*公共css*/
                                                  +html,body, div, dl, dt, dd, ul,li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, textarea, p, blockquote, th, td {
                                                  +	margin: 0;
                                                  +	padding: 0;
                                                  +}
                                                  +ul, li {
                                                  +    list-style-type: none;
                                                  +}
                                                  +body{
                                                  +	/**background: url("../img/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8;**/
                                                  +}
                                                  +.right{
                                                  +	float: right;
                                                  +}
                                                  +.Mr-10{
                                                  +	margin-right:10px; 
                                                  +}
                                                  +.toolbar,.main{
                                                  +	margin: 25px 25px 0px 25px;
                                                  +	min-width: 337px;
                                                  +}
                                                  +.toolbar{
                                                  +	/**
                                                  +	background: #fff url(../img/app-toolbar-bg.png);
                                                  +	**/
                                                  +	width: auto;
                                                  +	min-height: 30px;
                                                  +	border-bottom: 1px solid #bbb;
                                                  +	padding-bottom: 10px;
                                                  +}
                                                  +/*module*/
                                                  +.layout-list:after,.layout-tile:after{
                                                  +	clear: both;
                                                  +    content: ".";
                                                  +    display: block;
                                                  +    height: 0;
                                                  +    visibility: hidden;
                                                  +}
                                                  +
                                                  +/*ie8 hack*/
                                                  +@media \0screen {
                                                  +   ul[class *="layout-"]>li{
                                                  +		border: 1px solid #E4E2E2;
                                                  +	}
                                                  +} 
                                                  +/*.entity{
                                                  +	overflow: hidden;
                                                  +}*/
                                                  +/*css ie hack*/
                                                  +@media screen and (min-width:0\0) {
                                                  + .affiliate{
                                                  + 	transition: none\9;
                                                  + }	
                                                  +}
                                                  +
                                                  +
                                                  +.affiliate li:first-child{
                                                  +	font-weight: bold;
                                                  +}
                                                  +
                                                  +.layout-tile>li,.layout-list>li {
                                                  +	background: none repeat scroll 0 0 #FFFFFF;
                                                  +    border-radius: 3px 3px 3px 3px;
                                                  +    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
                                                  +    cursor: pointer;
                                                  +    overflow: hidden;
                                                  +}
                                                  +.layout-tile>li{
                                                  +	width: 194px;
                                                  +	height: 166px;
                                                  +	float: left;
                                                  +	margin: 20px  20px 0px 0px;
                                                  +}
                                                  +.layout-tile>li:hover{
                                                  +	outline: 2px solid #107fc9;
                                                  +	z-index: 100;
                                                  +}
                                                  +.layout-tile .entity{
                                                  +	height: 180px;
                                                  +}
                                                  +.layout-tile .entity > div{
                                                  +	border-radius: 4px 4px 4px 4px;
                                                  +    min-height: 130px;
                                                  +    overflow: hidden;
                                                  +    position: relative;
                                                  +    text-align: center;
                                                  +}
                                                  +.layout-tile .entity > div img{
                                                  +	min-width: 80px;
                                                  +	max-width: 200px;
                                                  +}
                                                  +.layout-tile .affiliate{
                                                  +	background: url("../img/noise-dark_195x195.png") repeat scroll 0 0 #F4F4F4;
                                                  +    margin-bottom: -73px;
                                                  +    border-top: 1px solid #DDDDDD;
                                                  +    overflow: hidden;
                                                  +    position: relative;
                                                  +    transition: margin 200ms ease 0s;
                                                  +}
                                                  +.layout-tile .affiliate:hover{
                                                  +   border-top: 1px solid #b7b7b7;
                                                  +   margin: -73px 0 0;
                                                  +}
                                                  +
                                                  +.layout-tile .affiliate li{
                                                  +	background: inherit;
                                                  +    padding: 8px 5px 0 9px;
                                                  +} 
                                                  +
                                                  +.layout-tile .affiliate li.attr{
                                                  +	max-width: 200px;
                                                  +}
                                                  +.layout-tile .icons div:last-child{
                                                  +	padding-bottom: 3px;
                                                  +}
                                                  +
                                                  +.layout-list>li{
                                                  +	padding: 2px;
                                                  +	margin: 20px 0px 0px;
                                                  +}
                                                  +.layout-list>li:hover{
                                                  +	background: #f4f4f4;
                                                  +}
                                                  +.layout-list div > img{
                                                  +	display: none;
                                                  +}
                                                  +.layout-list .affiliate li{
                                                  +	float: left;
                                                  +}
                                                  +.layout-list .affiliate li.icons{
                                                  +	float: right;
                                                  +}
                                                  +.layout-list .affiliate li:last-child{
                                                  +	float: right;
                                                  +}
                                                  +.layout-list .icons div{
                                                  +	float: right;
                                                  +}
                                                  +
                                                  +.layout-list .affiliate li{
                                                  +	background: inherit;
                                                  +    padding: 15px 5px 0 9px;
                                                  +} 
                                                  +
                                                  +.layout-list .affiliate li.attr{
                                                  +	max-width: 400px;
                                                  +}
                                                  +.icons div{
                                                  +	margin-bottom: 3px;
                                                  +	height: 30px;
                                                  +	width: 180px;
                                                  +}
                                                  +.icons img{
                                                  +	width: 18px;
                                                  +	height: 18px;
                                                  +}
                                                  +.processBtn{
                                                  +	padding: 5px;
                                                  +	width: 18px;
                                                  +	height: 18px;
                                                  +	line-height: 11px;
                                                  +	margin-right: 8px; 
                                                  +	display: inline-block;
                                                  +}
                                                  +.processBtn:hover{
                                                  +	border-radius: 3px;
                                                  +	border: 1px solid #ddd;
                                                  +	background-color: #fff;
                                                  +	padding: 4px;
                                                  +}
                                                  +.disable{
                                                  +	opacity: 0.3;
                                                  +}
                                                  +
                                                  +.small{
                                                  +	height: 18px;
                                                  +	width: 18px;
                                                  +}
                                                  +
                                                  +/*-----------------字体----------------------*/
                                                  +
                                                  +
                                                  +ul[class^="layout-"] li{
                                                  +	position: relative;
                                                  +}
                                                  +
                                                  +/*@font-face {
                                                  +  font-family: 'FontAwesome';
                                                  +  src: url('../lib/easyFont/font/eightyshades.eot?v=3.2.1');
                                                  +  src: url('../lib/easyFont/font/eightyshades.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../lib/easyFont/font/eightyshades.woff?v=3.2.1') format('woff'), url('../lib/easyFont/font/eightyshades.ttf?v=3.2.1') format('truetype'), url('../lib/easyFont/font/eightyshades.svg#fontawesomeregular?v=3.2.1') format('svg');
                                                  +  font-weight: normal;
                                                  +  font-style: normal;
                                                  +}*/
                                                  +
                                                  +@font-face {
                                                  +  font-family: 'EasyFont';
                                                  +  src: url('../lib/easyFont/font/eightyshades.eot?v=3.2.1');
                                                  +  src: url('../lib/easyFont/font/eightyshades.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../lib/easyFont/font/eightyshades.woff?v=3.2.1') format('woff'), url('../lib/easyFont/font/eightyshades.ttf?v=3.2.1') format('truetype'), url('../lib/easyFont/font/eightyshades.svg#fontawesomeregular?v=3.2.1') format('svg');
                                                  +  font-weight: normal;
                                                  +  font-style: normal;
                                                  +}
                                                  +
                                                  +.mark,.assign{
                                                  +	font-family: EasyFont;
                                                  +	font-weight: normal;
                                                  +	font-style: normal;
                                                  +	display: inline-block;
                                                  +}
                                                  +
                                                  +i.mark,i.assign{
                                                  +	height: 24px;
                                                  +	width: 24px;
                                                  +	position: absolute;
                                                  +	right: 4px;
                                                  +}
                                                  +
                                                  +/*空心三角*/
                                                  +.mark:before {
                                                  +	content: "\e027";
                                                  +	font-size: 24px;
                                                  +	color: #13130F;
                                                  +	z-index: 1002;
                                                  +	position: absolute;
                                                  +	right: 4px;
                                                  +}
                                                  +/*实心三角*/
                                                  +.assign:before{
                                                  +	content: "\e027";
                                                  +	font-size: 24px;
                                                  +	color: #999;
                                                  +	z-index: 1003;
                                                  +	position: absolute;
                                                  +	right: 4px;
                                                  +};
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/css/navigate.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/css/navigate.css
                                                  new file mode 100644
                                                  index 00000000..1ab3cbd6
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/css/navigate.css
                                                  @@ -0,0 +1,74 @@
                                                  +#nav { 
                                                  +list-style-type: none;  float:left;
                                                  +} 
                                                  +#nav a { 
                                                  +display: block; width: 60px; text-align:center; 
                                                  +} 
                                                  +#nav a:link { 
                                                  +color:#333333; text-decoration:none; 
                                                  +} 
                                                  +#nav a:visited { 
                                                  +color:#333333;text-decoration:none; 
                                                  +} 
                                                  +#nav a:hover { 
                                                  +color:#FFF;text-decoration:none;font-weight:bold; 
                                                  +} 
                                                  +#nav li { 
                                                  +float: left; width: 60px; 
                                                  +} 
                                                  +#nav li a:hover{ 
                                                  +background:#C7C7C7; 
                                                  +} 
                                                  +#nav li ul { 
                                                  +line-height: 27px; list-style-type: none;text-align:left; 
                                                  +left: -999em; width: 60px; position: absolute; 
                                                  +} 
                                                  +#nav li ul li{ 
                                                  +float: left; width: 60px; 
                                                  +background: #F6F6F6; 
                                                  +} 
                                                  +#nav li ul a{ wedisplay: block; width: 42px;text-align:left;padding-left:18px; 
                                                  +} 
                                                  +#nav li ul a:link { 
                                                  +color:#333333; text-decoration:none; 
                                                  +} 
                                                  +#nav li ul a:visited { 
                                                  +color:#333333;text-decoration:none; 
                                                  +} 
                                                  +#nav li ul a:hover { 
                                                  +color:#F3F3F3;text-decoration:none;font-weight:normal; 
                                                  +
                                                  +} 
                                                  +#nav li:hover ul { 
                                                  +left: auto; 
                                                  +} 
                                                  +#nav li.sfhover ul { 
                                                  +left: auto; 
                                                  +} 
                                                  +#content { 
                                                  +clear: left; 
                                                  +} 
                                                  +.navigate{ 
                                                  +-moz-border-bottom-colors: none;
                                                  +-moz-border-left-colors: none;
                                                  +-moz-border-right-colors: none;
                                                  +-moz-border-top-colors: none;
                                                  +background-color: #FFFFFF;
                                                  +border-color: #D0D0D0 #D0D0D0 #CCCCCC;
                                                  +border-image: none;
                                                  +border-radius: 2px;
                                                  +border-style: solid;
                                                  +border-width: 1px;
                                                  +color: #333333;
                                                  +cursor: pointer;
                                                  +display: inline-block;
                                                  +font-family: Arial,sans-serif;
                                                  +font-size: 13px;
                                                  +line-height: 16px;
                                                  +margin-right: 1px;
                                                  +outline: medium none;
                                                  +padding: 4px 0px;
                                                  +text-align: center;
                                                  +vertical-align: middle;
                                                  +}
                                                  +    
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/demo/img/1.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/demo/img/1.png
                                                  new file mode 100644
                                                  index 00000000..3193d498
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/demo/img/1.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/font/conceptboarddingbats-regular-webfont.eot b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/font/conceptboarddingbats-regular-webfont.eot
                                                  new file mode 100644
                                                  index 00000000..1b087f77
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/font/conceptboarddingbats-regular-webfont.eot differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/font/conceptboarddingbats-regular-webfont.svg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/font/conceptboarddingbats-regular-webfont.svg
                                                  new file mode 100644
                                                  index 00000000..53412c09
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/font/conceptboarddingbats-regular-webfont.svg
                                                  @@ -0,0 +1,489 @@
                                                  +<?xml version="1.0" standalone="no"?>
                                                  +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
                                                  +<svg xmlns="http://www.w3.org/2000/svg">
                                                  +<metadata>
                                                  +Created by FontPrep 20130207 at Tue Oct  8 18:14:12 2013
                                                  + By Florian Kutschera
                                                  +copyright missing
                                                  +</metadata>
                                                  +<defs>
                                                  +<font id="97694b0e4dd8984279d9716133994f81" horiz-adv-x='1024' >
                                                  +  <font-face 
                                                  +    font-family="ConceptboardDingbats-Regular"
                                                  +    font-weight="400"
                                                  +    font-stretch="normal"
                                                  +    units-per-em="2048"
                                                  +    panose-1="0 0 5 0 0 0 0 0 0 0"
                                                  +    ascent="1638"
                                                  +    descent="-410"
                                                  +    bbox="-20 -140 1888 1574.64"
                                                  +    underline-thickness="100"
                                                  +    underline-position="-100"
                                                  +    unicode-range="U+E001-E12B"
                                                  +  />
                                                  +<missing-glyph horiz-adv-x="1000" 
                                                  +d="M100 1210v-1020l340 510zM160 100h680l-340 510zM560 700l340 -510v1020zM500 790l340 510h-680zM0 0v1400h1000v-1400h-1000z" />
                                                  +    <glyph glyph-name=".notdef" horiz-adv-x="1000" 
                                                  +d="M100 1210v-1020l340 510zM160 100h680l-340 510zM560 700l340 -510v1020zM500 790l340 510h-680zM0 0v1400h1000v-1400h-1000z" />
                                                  +    <glyph glyph-name=".null" horiz-adv-x="0" 
                                                  + />
                                                  +    <glyph glyph-name="nonmarkingreturn" horiz-adv-x="682" 
                                                  + />
                                                  +    <glyph glyph-name="uniE001" unicode="&#xe001;" horiz-adv-x="1534" 
                                                  +d="M1534 644v-182h-228v-228h-182v228h-228v182h228v230h182v-230h228zM598 1148q122 0 185 -57t69 -115q6 -20 2 -48l-18 -112q22 -8 23 -45t-7 -53q-50 0 -85 -35t-35 -85v-140q0 -44 27 -76t67 -42q34 -20 74 -35t42 -17v-40q0 -50 35 -85t85 -35h138v-128h-1200v136
                                                  +q0 26 70 72q86 44 198 85t157 86t45 123q0 34 -28 58q-22 12 -42 96q-4 22 -22 28q-35 17 -37 90q-1 34 19 40l4 2q-14 84 -18 112q0 60 26 104q38 72 122 100q40 16 104 16z" />
                                                  +    <glyph glyph-name="uniE002" unicode="&#xe002;" horiz-adv-x="1700" 
                                                  +d="M1434 0v172q0 46 -21 75t-100 71t-101 50q50 36 50 96q0 22 -4 28q-26 22 -32 54t-14 34t-16 16q-12 32 -6 49t12 17l2 2q-10 40 -12 74t29 82t116 48t114 -45t29 -91l-6 -68q18 -12 4 -68q-6 -14 -12 -14q-16 -6 -19 -32t-29 -58q-6 -8 -6 -41t25 -61t91 -58
                                                  +q58 -20 108 -46q34 -22 48 -44t16 -242h-266zM288 451q0 33 -6 41q-26 32 -29 58t-19 32q-6 0 -12 14q-14 56 4 68l-6 68q0 46 29 91t114 45t116 -48t29 -82t-12 -74l2 -2q6 0 12 -17t-6 -49q-8 -14 -16 -16t-14 -34t-32 -54q-4 -6 -4 -28q0 -60 50 -96q-22 -8 -101 -50
                                                  +t-99 -68q-22 -34 -22 -78v-172h-266q2 220 14 242q16 22 50 44q50 26 108 46q66 30 91 58t25 61zM848 1016h4q71 0 104 -24q34 -24 36 -24q58 -74 48 -134q-4 -62 -12 -96q11 -7 16 -14q10 -42 -1 -66t-19 -28q-18 -4 -20 -24q-10 -30 -12 -41t-15 -29t-21 -30t-8 -32
                                                  +q0 -60 33 -96t90 -60t64 -25q32 -7 131 -67q56 -30 56 -70v-156h-942v156q0 40 47 67q97 56 121 63q24 8 81 32t90 60t33 96q0 20 -7 30t-12 18t-12 16t-17 32q-6 30 -8 43t-20 17q-8 4 -19 28t-1 66l10 10l6 4q-8 34 -14 96t50 134q48 48 140 48z" />
                                                  +    <glyph glyph-name="uniE003" unicode="&#xe003;" horiz-adv-x="1640" 
                                                  +d="M1640 386q0 -160 -114 -273t-276 -113h-296v312h176l-316 374l-312 -374h170v-312h-374q-122 0 -210 87t-88 205t88 203t210 85h34q-4 52 -4 60q0 176 130 302t291 126t277 -85t160 -219l64 6q162 0 276 -112t114 -272z" />
                                                  +    <glyph glyph-name="uniE004" unicode="&#xe004;" horiz-adv-x="1420" 
                                                  +d="M710 214q-108 0 -180 74t-72 177t74 177t178 74t177 -75t73 -176t-71 -176t-179 -75zM1078 467q0 153 -107 260t-258 107t-262 -107t-111 -260t110 -263t263 -110t259 110t106 263zM0 840q0 36 26 62t62 26h284l44 100q16 32 52 55t72 23h340q36 0 73 -23t51 -55l44 -100
                                                  +h282q38 0 64 -26t26 -62v-752q0 -36 -26 -62t-64 -26h-1242q-36 0 -62 26t-26 62v752z" />
                                                  +    <glyph glyph-name="uniE005" unicode="&#xe005;" 
                                                  +d="M472 0q-156 194 -472 510l106 110l294 -256l284 278q97 93 210 192l134 112q60 48 76 58l22 16q4 0 36 -29t38 -43q-250 -222 -612 -764z" />
                                                  +    <glyph glyph-name="uniE006" unicode="&#xe006;" 
                                                  +d="M1200 962l-362 -362l362 -360l-240 -240l-360 362l-362 -362l-238 240l360 360l-360 362l238 238l362 -360l360 360z" />
                                                  +    <glyph glyph-name="uniE007" unicode="&#xe007;" horiz-adv-x="1500" 
                                                  +d="M148 984v-676h976v82l148 128v-282q0 -30 -21 -53t-51 -23h-1126q-30 0 -52 22t-22 54v824q0 32 22 55t52 23h432q-98 -76 -148 -132l-18 -22h-192zM1004 832q-140 0 -218 -12t-147 -50t-121 -98t-124 -178q0 19 23 140q23 120 91 225t174 161q134 76 322 76v234
                                                  +l496 -374l-496 -392v268z" />
                                                  +    <glyph glyph-name="uniE008" unicode="&#xe008;" horiz-adv-x="1072" 
                                                  +d="M372 906h328v148q0 88 -43 134t-121 46t-121 -46t-43 -134v-148zM866 906h108q32 0 65 -31t33 -67v-640q0 -32 -24 -65t-56 -41l-58 -32q-46 -26 -162 -26h-476q-114 0 -160 26l-60 32q-30 10 -53 42t-23 64v640q0 36 25 67t57 31h126v116q0 184 83 281t245 97t246 -98
                                                  +t84 -280v-116z" />
                                                  +    <glyph glyph-name="uniE009" unicode="&#xe009;" horiz-adv-x="1090" 
                                                  +d="M866 906h108q32 0 65 -31t33 -67v-640q0 -32 -24 -65t-56 -41l-58 -32q-46 -26 -162 -26h-476q-114 0 -160 26l-60 32q-30 10 -53 42t-23 64v640q0 36 25 67t57 31h618v148q0 88 -43 134t-121 46q-144 0 -162 -142h-162q32 308 324 308q162 0 246 -98t84 -280v-116z" />
                                                  +    <glyph glyph-name="uniE00A" unicode="&#xe00a;" horiz-adv-x="1190" 
                                                  +d="M144 724q0 -134 101 -236t235 -102t229 94t95 229t-101 236t-234 101t-229 -94t-96 -228zM1051 0q-31 0 -51 20l-286 286q-112 -64 -236 -64t-234 66t-177 177t-67 239q0 194 136 329t330 135q126 0 238 -65t177 -176t65 -238t-66 -241l282 -286q50 -46 10 -90l-70 -72
                                                  +q-20 -20 -51 -20z" />
                                                  +    <glyph glyph-name="uniE00B" unicode="&#xe00b;" horiz-adv-x="1368" 
                                                  +d="M1212 62q0 -62 -46 -62h-308v570h-312v-570h-298q-44 0 -52 20q-8 14 -8 42v568h-130q-34 0 -42 18t16 40l612 612q20 26 56 26t56 -26l610 -612q26 -22 18 -40t-42 -18h-130v-568z" />
                                                  +    <glyph glyph-name="uniE00C" unicode="&#xe00c;" horiz-adv-x="1500" 
                                                  +d="M736 1318q24 0 42 -38l198 -400l444 -66q40 -6 47 -30t-21 -52l-320 -314l74 -440q8 -40 -13 -55t-55 5l-398 206l-396 -206q-38 -20 -58 -5t-12 55l76 440l-320 314q-30 28 -22 52t46 30l446 66l196 400q22 38 46 38z" />
                                                  +    <glyph glyph-name="uniE00D" unicode="&#xe00d;" horiz-adv-x="1500" 
                                                  +d="M586 750l-332 -48l188 -184l54 -50l-58 -332l230 124l66 32l66 -32l230 -124l-42 260l-14 72l242 234l-260 36l-72 12l-150 300zM734 1316q26 0 42 -36l200 -404l442 -62q40 -6 48 -31t-20 -51l-320 -314l74 -440q12 -62 -34 -62q-10 0 -34 10l-398 208l-396 -208
                                                  +q-24 -10 -34 -10q-46 0 -36 62l76 440l-320 314q-30 28 -22 52t48 30l444 62l198 404q16 36 42 36z" />
                                                  +    <glyph glyph-name="uniE00E" unicode="&#xe00e;" horiz-adv-x="1300" 
                                                  +d="M653 290q7 0 13 6l154 128l422 -420l-12 -4h-1164l-8 4l424 420l152 -128q12 -6 19 -6zM1300 90q0 -12 -2 -14l-420 416l420 352q2 -4 2 -18v-736zM0 90v736q0 14 2 18l420 -352l-420 -416q-2 2 -2 14zM70 936h1160q8 0 10 -2l-590 -490l-588 490q4 2 8 2z" />
                                                  +    <glyph glyph-name="uniE010" unicode="&#xe010;" 
                                                  +d="M832 598q0 96 -68 164t-163 68t-163 -68t-68 -164t68 -162t163 -66t163 66t68 162zM1154 692q18 0 32 -14t14 -32v-92q0 -20 -14 -33t-32 -13h-56q-46 0 -58 -44l-34 -78q-10 -16 -6 -38t18 -36l38 -36q14 -14 14 -34t-14 -34l-64 -64q-14 -14 -34 -14t-34 14l-36 38
                                                  +q-14 14 -36 18t-38 -6l-78 -34q-44 -12 -44 -58v-56q0 -18 -13 -32t-33 -14h-92q-18 0 -32 14t-14 32v56q0 46 -44 58l-78 34q-42 22 -72 -12l-38 -38q-14 -14 -34 -14t-34 14l-64 64q-14 14 -14 34t14 34l38 36q14 14 18 36t-6 38l-34 78q-2 18 -20 31t-38 13h-54
                                                  +q-20 0 -34 13t-14 33v92q0 18 14 32t34 14h54q20 0 38 13t20 31l34 78q22 42 -12 72l-38 38q-14 14 -14 34t14 34l64 64q14 14 34 14t34 -14l38 -38q30 -34 72 -12l78 34q18 2 31 20t13 38v54q0 20 14 34t32 14h92q20 0 33 -14t13 -34v-54q0 -20 13 -38t31 -20l78 -34
                                                  +q16 -10 38 -6t36 18l36 38q14 14 34 14t34 -14l64 -64q14 -14 14 -34t-14 -34l-38 -38q-34 -30 -12 -72l34 -78q12 -44 58 -44h56z" />
                                                  +    <glyph glyph-name="uniE011" unicode="&#xe011;" 
                                                  +d="M1048 230q0 32 -23 55t-55 23t-55 -23t-23 -55t23 -54t55 -22t55 22t23 54zM1008 38v-14q0 -24 -24 -24h-30q-22 0 -22 24v14q0 16 -38 38q-18 8 -32 -8l-12 -10q-16 -20 -32 0l-22 22q-20 16 0 30q16 22 16 39t-6 25q-10 20 -30 20h-14q-24 0 -24 22v30q0 22 24 22h14
                                                  +q16 0 38 38q4 6 2 17t-10 15l-10 14q-20 14 0 30l22 22q16 20 32 0l12 -10q14 -18 50 0q20 8 20 30v14q0 24 22 24h30q24 0 24 -24v-14q0 -16 36 -38q20 -10 34 8l12 10q16 20 32 0l20 -22q20 -16 0 -30q-16 -22 -16 -39t6 -25q10 -20 30 -20h16q22 0 22 -22v-30
                                                  +q0 -22 -22 -22h-16q-16 0 -38 -38q-10 -20 8 -32l10 -14q20 -14 0 -30l-20 -22q-16 -20 -32 0q-19 16 -38 16q-44 0 -44 -36zM460 632q82 0 144 58q56 60 56 141t-56 143q-62 58 -144 58t-140 -60t-58 -142t58 -140t140 -58zM844 910h32q20 0 34 -14t14 -34v-62
                                                  +q0 -20 -14 -33t-34 -13h-32q-16 0 -39 -26t-31 -48q-22 -30 14 -66l22 -22q14 -12 14 -32t-14 -34l-44 -44q-14 -12 -33 -12t-31 12l-24 24q-10 14 -33 12t-69 -12q-38 -14 -38 -58v-32q0 -46 -46 -46h-62q-20 0 -33 13t-13 33v32q0 10 -28 42q-28 22 -44 30q-40 18 -68 -14
                                                  +l-24 -24q-12 -12 -31 -12t-33 12l-44 44q-14 18 -14 35t14 31l24 22q10 12 9 35t-1 33q0 38 -30 62q-16 10 -36 10h-32q-20 0 -33 13t-13 33v64q0 18 13 32t33 14h32q14 0 42 28q20 24 32 49t-16 63l-24 22q-12 12 -12 30t12 34l44 44q18 14 34 14t30 -14l24 -22
                                                  +q14 -14 50 -10q90 0 90 66v34q0 18 13 32t33 14h62q20 0 33 -14t13 -32v-34q0 -29 79 -75q29 -17 61 19l24 22q14 14 30 14t34 -14l44 -44q14 -14 14 -33t-14 -31l-22 -22q-14 -14 -10 -50q0 -90 66 -90z" />
                                                  +    <glyph glyph-name="uniE012" unicode="&#xe012;" horiz-adv-x="704" 
                                                  +d="M704 350q0 -124 -72 -220q-98 -130 -280 -130t-280 130q-72 96 -72 220v704l6 42q2 30 26 80q62 128 220 128t220 -128q24 -50 26 -80l4 -42v-654q0 -56 -38 -103t-112 -47t-112 47t-38 103v452q0 50 50 50t50 -50v-452q0 -50 50 -50t50 52v652q0 50 -20 84
                                                  +q-38 66 -130 66t-132 -72q-18 -39 -18 -78v-704q0 -137 110 -214q52 -36 150 -36t163 61t79 167v776q0 50 50 50q20 0 35 -14t15 -36v-754z" />
                                                  +    <glyph glyph-name="uniE013" unicode="&#xe013;" horiz-adv-x="1400" 
                                                  +d="M1284 1166q48 0 82 -33t34 -83v-642q0 -46 -34 -80t-82 -34h-468v-236h62q58 0 58 -58h-470q0 58 60 58h58v236h-468q-46 0 -81 34t-35 80v642q0 48 34 82t82 34h1168z" />
                                                  +    <glyph glyph-name="uniE014" unicode="&#xe014;" horiz-adv-x="1404" 
                                                  +d="M532 714q76 0 129 46t67 111t-10 105q-16 22 -36 28l-46 14q-60 14 -68 38q-6 12 -6 21t12 15q100 56 168 98t112 66l42 -84q102 -201 162 -222l24 20q2 66 53 109t111 43q120 0 152 -144q28 -138 -76 -166q-50 -14 -99 -17t-85 -29l82 -160q14 -28 80 -162
                                                  +q-24 -14 -104 -67t-114 -70t-72 -25q-22 8 -22 30q12 72 -5 130t-57 86q-90 62 -224 -74q-42 -46 -42 -88q0 -62 96 -126l64 -42q26 -18 24 -32q-68 -46 -140 -86t-138 -80q-62 102 -190 306l-36 -18q-24 -68 -76 -117t-110 -49q-94 0 -140 138q-14 40 -14 76q0 82 90 110
                                                  +q40 14 80 16l80 6l22 18l-174 322l292 172q28 -28 32 -104q0 -84 12 -110q22 -52 98 -52z" />
                                                  +    <glyph glyph-name="uniE015" unicode="&#xe015;" horiz-adv-x="1240" 
                                                  +d="M620 310q78 0 134 28l226 -222q-162 -116 -359 -116t-359 116l226 222q54 -28 132 -28zM930 618q0 74 -28 136l224 226q114 -162 114 -361t-114 -357l-224 224q28 58 28 132zM310 619q0 -71 32 -133l-226 -224q-116 162 -116 358t116 360l226 -226q-32 -64 -32 -135z
                                                  +M619 930q-63 0 -131 -28l-226 224q158 114 358 114t360 -114l-226 -224q-72 28 -135 28z" />
                                                  +    <glyph glyph-name="uniE016" unicode="&#xe016;" horiz-adv-x="1380" 
                                                  +d="M998 1214q152 0 267 -117t115 -289t-136 -334q-96 -114 -264 -242q-224 -160 -290 -232q-24 26 -36 36t-31 26q-30 25 -51 41l-28 21q-16 12 -65 47t-213 171q-148 130 -228 288q-38 80 -38 174q0 178 114 294t270 116q186 0 306 -176q120 176 308 176z" />
                                                  +    <glyph glyph-name="uniE017" unicode="&#xe017;" horiz-adv-x="852" 
                                                  +d="M0 678q0 34 26 60l592 596q26 26 60 26t60 -26l88 -90q26 -26 26 -59t-26 -59l-448 -444l448 -448q26 -26 26 -60t-26 -60l-88 -88q-26 -26 -60 -26t-60 26l-592 592q-26 26 -26 60z" />
                                                  +    <glyph glyph-name="uniE018" unicode="&#xe018;" horiz-adv-x="852" 
                                                  +d="M0 174q0 34 26 60l448 448l-448 444q-26 26 -26 59t26 59l88 90q26 26 60 26t60 -26l592 -596q26 -26 26 -60t-26 -60l-592 -592q-26 -26 -60 -26t-60 26l-88 88q-26 26 -26 60z" />
                                                  +    <glyph glyph-name="uniE019" unicode="&#xe019;" 
                                                  +d="M684 146q128 0 180 26v154q-66 -42 -111 -42t-73 16t-28 30v328h220v142h-222v218h-132q-4 -84 -44 -142l-10 -18q-18 -32 -28 -38q-22 -18 -90 -18h-18v-144l108 -4v-364q0 -92 68 -122q52 -22 126 -22h54zM0 1094q0 44 31 75t75 31h988q44 0 75 -31t31 -75v-988
                                                  +q0 -44 -31 -75t-75 -31h-988q-44 0 -75 31t-31 75v988z" />
                                                  +    <glyph glyph-name="uniE01A" unicode="&#xe01a;" 
                                                  +d="M254 381q0 53 47 83t109 30t107 -30t45 -79t-50 -83t-110 -34t-104 30t-44 83zM306 854q0 110 76 110q50 0 82 -52t32 -112q0 -102 -78 -102q-48 0 -80 52t-32 104zM658 1004q0 16 -25 14t-129 -1t-170 -19t-107 -72t-41 -129t53 -129t137 -52h6q0 -54 10 -54q4 -4 8 -6
                                                  +q8 -8 10 -18q-150 0 -224 -72q-46 -40 -46 -119t70 -126t180 -47t189 57t79 152t-76 159t-76 82t58 64t58 141t-52 133q88 0 88 42zM844 892h-134v-96h134v-134h96v134h132v96h-132v134h-96v-134zM0 1094q0 44 31 75t75 31h988q44 0 75 -31t31 -75v-988q0 -44 -31 -75
                                                  +t-75 -31h-988q-44 0 -75 31t-31 75v988z" />
                                                  +    <glyph glyph-name="uniE01B" unicode="&#xe01b;" 
                                                  +d="M650 756h-96v-138h96v-480h178v480h142l10 138h-152v108q0 50 70 50q38 0 78 -12l24 142q-52 18 -172 18q-178 0 -178 -212v-94zM0 1094q0 44 31 75t75 31h988q44 0 75 -31t31 -75v-988q0 -44 -31 -75t-75 -31h-988q-44 0 -75 31t-31 75v988z" />
                                                  +    <glyph glyph-name="uniE01C" unicode="&#xe01c;" horiz-adv-x="750" 
                                                  +d="M750 450h-290l156 -354l-208 -96l-168 366l-240 -228v1062z" />
                                                  +    <glyph glyph-name="uniE01D" unicode="&#xe01d;" horiz-adv-x="1126" 
                                                  +d="M482 852q0 42 -4 112t2 78q8 84 52 102q60 26 82 -46q14 -32 18 -142t10 -195t9 -93t22 -6t23 12q20 66 20 100l6 76q7 153 11 171q3 17 4 22q10 50 44 58q35 9 57 -17t25 -62t-1 -88v-114q0 -46 -2 -74q-12 -92 18 -100q14 -6 32 11t22 28t14 51t20 58q30 74 62 104
                                                  +q32 24 64 10q34 -12 34 -54q-2 -72 -31 -161t-50 -209t-31 -138t-64 -86t-58 -102q-18 -100 -10 -158h-484q0 88 -48 136q-52 44 -88 86q-10 8 -34 35t-34 47t-16 26q-10 22 -44 66q-18 34 -48 72q-52 52 -62 72q-52 76 2 130q42 36 114 -14q52 -34 98 -102q48 -58 80 -58
                                                  +q28 0 6 62q-6 16 -21 69t-31 85t-70 168q-14 44 -20 56q-14 52 -12 82t27 47t49 8t36 -20q14 -13 53 -95t59 -142t33 -96t16 -46t16 -20t27 -4q4 2 4 28l-4 92q-4 40 -4 82z" />
                                                  +    <glyph glyph-name="uniE01E" unicode="&#xe01e;" horiz-adv-x="1502" 
                                                  +d="M0 1138h910q0 -124 -8 -196l-14 -170h-76l-40 258h-216v-920q24 -8 63 -16t66 -19t29 -11v-64h-518v64q34 6 76 26q66 18 84 20v920h-218l-38 -258h-72l-20 170q-8 133 -8 196zM1218 72v-70h-208v70h208zM1218 72v996h70v-996h214v-70h-214v70h-70zM1288 1068v72h214v-72
                                                  +h-214zM1218 1068h-208v72h208v-72z" />
                                                  +    <glyph glyph-name="uniE020" unicode="&#xe020;" horiz-adv-x="1102" 
                                                  +d="M978 198q0 -28 9 -40t39 -20l76 -14v-124h-452v124l82 14q30 4 39 17t9 43v314h-456v-314q0 -30 9 -43t39 -17l78 -14v-124h-450v124l72 14q30 8 38 19t8 41v740q0 32 -8 43t-38 15l-72 18v126h450v-126l-78 -18q-30 -2 -39 -14t-9 -44v-262h456v262q0 32 -9 44t-39 14
                                                  +l-82 18v126h452v-126l-76 -18q-30 -4 -39 -16t-9 -42v-740z" />
                                                  +    <glyph glyph-name="uniE021" unicode="&#xe021;" 
                                                  +d="M128 948v-680h946v680h-946zM1200 140h-1200v936h1200v-936z" />
                                                  +    <glyph glyph-name="uniE022" unicode="&#xe022;" horiz-adv-x="1148" 
                                                  +d="M80 742h992q60 0 73 -32t-29 -88l-444 -548q-44 -56 -96 -56t-96 56l-458 548q-34 56 -17 88t75 32z" />
                                                  +    <glyph glyph-name="uniE023" unicode="&#xe023;" horiz-adv-x="1148" 
                                                  +d="M1072 0h-992q-58 0 -75 32t17 88l458 548q44 56 96 56t96 -56l444 -548q42 -56 29 -88t-73 -32z" />
                                                  +    <glyph glyph-name="uniE024" unicode="&#xe024;" 
                                                  +d="M504 230q0 -8 7 -16t15 -8h124q22 0 22 24v118q0 22 -22 22h-124q-8 0 -15 -7t-7 -15v-118zM591 814q77 0 77 -67q0 -33 -56 -80t-74 -77q-34 -48 -34 -108v-48q0 -8 7 -15t15 -7h124q22 0 22 22v40q0 38 57 87t83 85q34 60 34 120q0 98 -74 158q-74 52 -162 52t-152 -38
                                                  +q-26 -14 -46 -34q-28 -20 -12 -36l70 -88q22 -12 32 -2q52 36 89 36zM0 600q0 248 176 424t424 176t424 -176t176 -424t-176 -424t-424 -176t-424 176t-176 424z" />
                                                  +    <glyph glyph-name="uniE025" unicode="&#xe025;" 
                                                  +d="M430 668q0 -22 22 -22h64v-306h-58q-22 0 -22 -24v-104q0 -24 22 -24h302q22 0 22 24v104q0 24 -22 24h-58v432q0 24 -22 24h-228q-22 0 -22 -24v-104zM516 888q0 -24 24 -24h140q22 0 22 24v124q0 22 -22 22h-140q-24 0 -24 -22v-124zM0 600q0 248 176 424t424 176
                                                  +t424 -176t176 -424t-176 -424t-424 -176t-424 176t-176 424z" />
                                                  +    <glyph glyph-name="uniE026" unicode="&#xe026;" 
                                                  +d="M510 200q0 -22 22 -22h136q24 0 24 22v132q0 22 -24 22h-136q-22 0 -22 -22v-132zM540 404h120q24 0 24 22l10 554q2 10 -5 17t-17 7h-144q-22 0 -22 -24l10 -554q0 -22 24 -22zM0 600q0 248 176 424t424 176t424 -176t176 -424t-176 -424t-424 -176t-424 176t-176 424z
                                                  +" />
                                                  +    <glyph glyph-name="uniE027" unicode="&#xe027;" 
                                                  +d="M988 601q0 25 -16 45l-272 272q-30 28 -50 20t-20 -48v-142h-370q-38 0 -38 -38v-220q0 -38 38 -38h370v-142q0 -40 20 -48t50 20l272 272q16 22 16 47zM1200 600q0 -248 -176 -424t-424 -176t-424 176t-176 424t176 424t424 176t424 -176t176 -424z" />
                                                  +    <glyph glyph-name="uniE028" unicode="&#xe028;" horiz-adv-x="1640" 
                                                  +d="M838 272l408 212v-196l-408 -244l-426 244v196zM820 918q-66 0 -66 -66q0 -24 21 -44t45 -20q66 0 66 64q0 38 -14 52t-52 14zM266 449q0 -113 12 -182t-1 -150t-29 -117h-18q-12 0 -23 18t-11 32q-4 8 -7 18q-9 30 -25 30h-16q-110 -48 -130 -48h-18q0 12 2 14t16 2
                                                  +q146 178 146 230q32 114 32 378l-178 80l820 346l802 -346l-802 -394l-558 264q-14 -62 -14 -175z" />
                                                  +    <glyph glyph-name="uniE029" unicode="&#xe029;" horiz-adv-x="864" 
                                                  +d="M824 180v748q0 28 -16 54t-36 36l-566 232q-70 0 -128 -38l-14 -28q-12 -24 -12 -38h26l334 -152q-36 -20 -36 -92l10 -258l66 52l88 -130v284q0 52 26 78l52 -26q30 -8 48 -34t18 -56v-720l76 62h52q12 0 12 26zM658 14q-14 0 -14 -10v-4l-26 14l-540 232q-30 10 -54 42
                                                  +t-24 62v770q0 38 52 118q72 68 154 50h14l566 -232q36 -10 57 -48t21 -80v-748q0 -50 -26 -62l-37 -6q-9 0 -15 6l-116 -92q0 -12 -10 -12h-2z" />
                                                  +    <glyph glyph-name="uniE02A" unicode="&#xe02a;" horiz-adv-x="1366" 
                                                  +d="M148 824v-676h976v322l148 128v-522q0 -30 -21 -53t-51 -23h-1126q-30 0 -52 22t-22 54v824q0 32 22 55t52 23h652q-98 -76 -148 -132l-18 -22h-412zM1206 852l-494 -500l-252 -84l80 254l502 498zM1224 1176q32 0 52 -20l36 -32l34 -38q18 -20 19 -48t-19 -52l-72 -70
                                                  +l-168 168l66 72q20 20 52 20z" />
                                                  +    <glyph glyph-name="uniE02B" unicode="&#xe02b;" horiz-adv-x="1240" 
                                                  +d="M0 106q0 22 15 37t39 15h772q20 0 35 -16t15 -36v-56q0 -20 -15 -35t-35 -15h-772q-24 0 -39 15t-15 35v56zM0 392q0 22 15 37t39 15h1032q20 0 35 -16t15 -36v-58q0 -22 -15 -37t-35 -15h-1032q-24 0 -39 15t-15 37v58zM0 678q0 20 15 34t39 14h724q20 0 35 -14t15 -34
                                                  +v-58q0 -22 -15 -38t-35 -16h-724q-24 0 -39 16t-15 38v58zM0 958q0 24 15 39t39 15h1134q22 0 37 -15t15 -39v-56q0 -22 -15 -37t-37 -15h-1134q-24 0 -39 15t-15 37v56z" />
                                                  +    <glyph glyph-name="uniE02C" unicode="&#xe02c;" horiz-adv-x="1240" 
                                                  +d="M258 106q0 22 15 37t39 15h620q20 0 35 -16t15 -36v-56q0 -20 -15 -35t-35 -15h-620q-24 0 -39 15t-15 35v56zM52 392q0 22 15 37t39 15h1032q20 0 35 -16t15 -36v-58q0 -22 -15 -37t-35 -15h-1032q-24 0 -39 15t-15 37v58zM206 678q0 20 15 34t39 14h724q20 0 35 -14
                                                  +t15 -34v-58q0 -22 -15 -38t-35 -16h-724q-24 0 -39 16t-15 38v58zM0 958q0 24 15 39t39 15h1134q22 0 37 -15t15 -39v-56q0 -22 -15 -37t-37 -15h-1134q-24 0 -39 15t-15 37v56z" />
                                                  +    <glyph glyph-name="uniE02D" unicode="&#xe02d;" horiz-adv-x="1240" 
                                                  +d="M1240 50q0 -20 -15 -35t-39 -15h-724q-20 0 -35 15t-15 35v56q0 20 15 36t35 16h724q24 0 39 -15t15 -37v-56zM1240 334q0 -22 -15 -37t-39 -15h-1032q-20 0 -35 15t-15 37v58q0 20 15 36t35 16h1032q24 0 39 -15t15 -37v-58zM1240 620q0 -22 -15 -38t-39 -16h-724
                                                  +q-20 0 -35 16t-15 38v58q0 20 15 34t35 14h724q24 0 39 -14t15 -34v-58zM1240 902q0 -22 -15 -37t-39 -15h-1134q-22 0 -37 15t-15 37v56q0 24 15 39t37 15h1134q24 0 39 -15t15 -39v-56z" />
                                                  +    <glyph glyph-name="uniE02E" unicode="&#xe02e;" horiz-adv-x="1300" 
                                                  +d="M1300 1188q0 -34 -28 -66l-92 -94l-202 204l96 94q28 28 63 28t67 -28l44 -44l24 -28q28 -32 28 -66zM818 190q0 38 -14 60q12 22 -4 42q-10 24 -58 78q-54 56 -78 76l-26 28l-328 -338l-310 -124l108 330l334 342l-78 84q-24 34 -78 82q-24 28 -88 22q-2 0 -51 7t-63 23
                                                  +t-43 54t-37 46q-4 8 -2 30t6 24q0 32 12 50q18 -8 73 -49t85 -49q44 30 97 103t51 109q-42 40 -138 94q20 22 50 42q104 22 158 -26q82 -72 76 -146q0 -116 9 -146t61 -70l82 -98l296 302l198 -202l-308 -318l98 -116q2 -2 28 -30t44 -43t43 -17t52 2t41 2q20 -10 65 -55
                                                  +t50 -87t-11 -68q-14 -2 -52 36q-12 6 -36 27t-30 25q-22 -2 -77 -55t-63 -67t-11 -23q-14 -41 -1 -47q24 -30 44 -43t37 -30t39 -23q-40 -40 -118 -40q-40 20 -56 33t-36 41t-22 42l-18 26q-2 10 -2 48z" />
                                                  +    <glyph glyph-name="uniE030" unicode="&#xe030;" horiz-adv-x="1300" 
                                                  +d="M732 922h486q34 0 58 -24t24 -58v-758q0 -34 -24 -58t-58 -24h-1136q-34 0 -58 24t-24 58v266h318v-154q0 -28 18 -38t42 4l484 314q24 14 24 34t-24 34l-484 314q-24 14 -42 4t-18 -38v-162h-318v342q0 34 24 57t58 23h486q34 0 58 -23t24 -57t24 -57t58 -23z" />
                                                  +    <glyph glyph-name="uniE031" unicode="&#xe031;" horiz-adv-x="1610" 
                                                  +d="M1042 922h486q34 0 58 -24t24 -58v-758q0 -34 -24 -58t-58 -24h-1136q-34 0 -58 24t-24 58v206l200 -128q24 -14 41 -4t17 38v154h460q28 0 48 21t20 49v178q0 26 -20 45t-48 19h-460v162q0 28 -17 38t-41 -4l-200 -130v276q0 34 24 57t58 23h486q34 0 58 -23t24 -57
                                                  +t24 -57t58 -23zM0 508q0 20 24 34l286 184v-438l-286 186q-24 14 -24 34z" />
                                                  +    <glyph glyph-name="uniE032" unicode="&#xe032;" horiz-adv-x="724" 
                                                  +d="M0 106v992q0 60 32 73t88 -29l546 -444q58 -46 58 -96t-58 -96l-546 -458q-56 -34 -88 -17t-32 75z" />
                                                  +    <glyph glyph-name="uniE033" unicode="&#xe033;" horiz-adv-x="724" 
                                                  +d="M724 1098v-992q0 -58 -32 -75t-88 17l-546 458q-58 46 -58 96t58 96l546 444q56 42 88 29t32 -73z" />
                                                  +    <glyph glyph-name="uniE035" unicode="&#xe035;" horiz-adv-x="1288" 
                                                  +d="M848 209q0 -37 28 -63t71 -26t87 32q32 26 40 57t8 83v34q-60 -16 -117 -28t-87 -32t-30 -57zM676 179q0 134 100 177q52 26 157 45t149 39v16q0 50 -24 71t-81 21t-83 -17t-44 -65l-156 30q26 92 90 138t187 46q204 0 257 -96q22 -44 22 -154l-2 -202q0 -137 40 -214
                                                  +h-170q-2 6 -8 20t-10 30q-2 16 -6 22q-81 -86 -192 -86q-110 0 -168 54t-58 125zM296 262q0 -30 42 -36l74 -14v-116h-412v120l50 10q30 6 43 18t27 52l314 888h180l150 -414q-40 -18 -80 -46t-76 -84l-78 224l-20 78l-14 -74l-100 -294h178q-10 -26 -19 -64t21 -84h-230
                                                  +l-42 -128q-8 -18 -8 -36z" />
                                                  +    <glyph glyph-name="uniE036" unicode="&#xe036;" 
                                                  +d="M1032 568h-852v-86h852v86zM1032 730h-852v-86h852v86zM1032 892h-852v-86h852v86zM178 1104h854q126 0 147 -22t21 -156v-490q0 -138 -23 -161t-161 -23h-398l-260 -238q-14 -14 -31 -8t-17 28v218h-132q-134 0 -156 21t-22 147v506q0 138 20 158t158 20z" />
                                                  +    <glyph glyph-name="uniE037" unicode="&#xe037;" horiz-adv-x="1422" 
                                                  +d="M143 136l-1 2q0 -2 1 -2zM232 754l2 -4q-2 2 -2 4zM1068 896l178 -184l-540 -546l-274 -94l86 278zM184 96l50 -22h2q2 -2 7 -2l37 -6q8 -4 34 -4t38 -8t2 -22q-26 -32 -78 -32q-108 0 -174 36q-94 48 -86 130q6 52 47 103t97 103l20 18q2 2 4 5t7 7t9 10q26 26 40 48
                                                  +t14 24l2 2l4 6l12 30q10 36 10 64q0 78 -46 162q-40 64 -100 112l-30 24l-8 4h-2q-21 21 -68 36q-46 15 -4 48q44 26 82 12q126 -48 208 -150q90 -118 84 -238q-6 -68 -40 -120t-104 -118l-48 -48q-4 -6 -10 -10l-20 -24q-2 -6 -10 -15t-11 -15t-13 -24t-10 -42t15 -47
                                                  +t35 -35zM1267 1066q35 0 55 -22l42 -36l36 -42q48 -52 0 -110l-80 -74l-182 182l72 80q22 22 57 22z" />
                                                  +    <glyph glyph-name="uniE03A" unicode="&#xe03a;" horiz-adv-x="1220" 
                                                  +d="M610 1086q-196 0 -336 -140t-140 -337t140 -337t336 -140t336 140t140 337t-140 337t-336 140zM610 0q-122 0 -238 46q-114 50 -192 132q-180 172 -180 430q0 260 180 432q80 84 193 131t238 47t236 -47t193 -131q88 -84 134 -200t46 -232t-46 -231t-134 -199
                                                  +q-80 -82 -194 -130t-236 -48z" />
                                                  +    <glyph glyph-name="uniE03B" unicode="&#xe03b;" horiz-adv-x="1150" 
                                                  +d="M1150 1050l-1056 -1050l-94 94l1056 1052z" />
                                                  +    <glyph glyph-name="uniE03C" unicode="&#xe03c;" horiz-adv-x="1294" 
                                                  +d="M498 390l202 -202l-700 -188l188 700l212 -210l796 796l98 -100z" />
                                                  +    <glyph glyph-name="uniE03D" unicode="&#xe03d;" 
                                                  +d="M158 236l210 -136l-66 -98l-302 -2zM744 214l-118 78l-102 -156l-386 256l104 154l-106 70l456 688l608 -402z" />
                                                  +    <glyph glyph-name="uniE03E" unicode="&#xe03e;" horiz-adv-x="1208" 
                                                  +d="M918 0h-236l170 162h28l38 -82v-80zM632 162v-162h-632v162h632zM632 448v-162h-632v162h632zM1208 468h-168l90 -206l-120 -56l-98 212l-138 -132v616zM632 674v-100h-632v330h632v-100h-532v-130h532zM918 1028h-918v162h918v-162z" />
                                                  +    <glyph glyph-name="uniE040" unicode="&#xe040;" horiz-adv-x="1600" 
                                                  +d="M0 573q0 77 54 135t132 64v-402q-76 10 -131 68t-55 135zM1600 1138v-1138h-396v70q-114 64 -334 121t-382 81l-162 26v538q235 34 499 103q265 69 379 133v66h396z" />
                                                  +    <glyph glyph-name="uniE041" unicode="&#xe041;" horiz-adv-x="1600" 
                                                  +d="M266 712v-292l-266 104v82zM1600 962v-788h-396l-802 148v494l802 146h396z" />
                                                  +    <glyph glyph-name="uniE042" unicode="&#xe042;" horiz-adv-x="1600" 
                                                  +d="M0 644h246v-142h-246v142zM1600 974v-794h-460q-26 0 -45 19t-19 43v82h-416q-56 54 -130 96t-118 56l-46 14v172q166 46 294 168h416v82q0 26 19 44t45 18h460z" />
                                                  +    <glyph glyph-name="uniE043" unicode="&#xe043;" horiz-adv-x="1100" 
                                                  +d="M154 946v-792h796v792h-796zM1100 0h-1100v1100h1100v-1100z" />
                                                  +    <glyph glyph-name="uniE044" unicode="&#xe044;" horiz-adv-x="1100" 
                                                  +d="M1100 0h-1100v1100h1100v-1100z" />
                                                  +    <glyph glyph-name="uniE045" unicode="&#xe045;" horiz-adv-x="1100" 
                                                  +d="M1100 0h-94l94 94v-94zM568 0l532 532v-170l-362 -362h-170zM1100 970v-170l-800 -800h-170zM526 1100l-526 -526v170l356 356h170zM0 1100h88l-88 -88v88zM964 1100l-964 -964v170l794 794h170z" />
                                                  +    <glyph glyph-name="uniE046" unicode="&#xe046;" horiz-adv-x="1500" 
                                                  +d="M0 406q0 26 18 44t46 18h292q24 0 42 -18t18 -44v-182q0 -26 -18 -45t-42 -19h-292q-28 0 -46 18t-18 46v182zM1084 566q0 26 18 44t44 18h292q26 0 44 -18t18 -44v-262q0 -26 -18 -45t-44 -19h-292q-26 0 -44 19t-18 45v262zM542 566q0 26 18 44t46 18h290q26 0 44 -18
                                                  +t18 -44v-502q0 -26 -18 -45t-44 -19h-290q-26 0 -45 18t-19 46v502zM1084 1038q0 26 18 44t44 18h292q26 0 44 -18t18 -44v-222q0 -26 -18 -44t-44 -18h-292q-26 0 -44 18t-18 44v222zM542 1038q0 26 19 44t45 18h290q26 0 44 -18t18 -44v-222q0 -26 -18 -44t-44 -18h-290
                                                  +q-26 0 -45 18t-19 44v222zM0 1038q0 26 19 44t45 18h292q60 0 60 -62v-382q0 -26 -18 -44t-42 -18h-292q-26 0 -45 18t-19 44v382z" />
                                                  +    <glyph glyph-name="uniE047" unicode="&#xe047;" horiz-adv-x="1500" 
                                                  +d="M1324 512h-494v-122h494v122zM1324 740h-494v-128h494v128zM682 740h-480v-482h34q-2 4 -2 14q0 48 33 87t87 59q-46 38 -46 90t36 88t88 36t89 -36t37 -89t-46 -89q54 -20 88 -60t34 -86q0 -10 -2 -14h50v482zM1500 932v-932h-210q-2 44 -37 73t-87 29t-88 -29t-38 -73
                                                  +h-558q-2 44 -38 73t-87 29t-87 -29t-36 -73h-234v932h1500z" />
                                                  +    <glyph glyph-name="uniE048" unicode="&#xe048;" 
                                                  +d="M598 1148q122 0 185 -57t69 -115q6 -20 2 -48l-18 -112q22 -8 23 -45t-7 -53q-4 -20 -28 -34q-18 -6 -22 -28q-16 -82 -42 -96q-28 -28 -28 -58q0 -78 44 -123t153 -84t201 -87q70 -46 70 -72v-136h-1200v136q0 26 70 72q86 44 198 85t157 86t45 123q0 34 -28 58
                                                  +q-22 12 -42 96q-4 22 -22 28q-35 17 -37 90q-1 34 19 40l4 2q-14 84 -18 112q0 60 26 104q38 72 122 100q40 16 104 16z" />
                                                  +    <glyph glyph-name="uniE049" unicode="&#xe049;" horiz-adv-x="1360" 
                                                  +d="M677 852q35 0 61 -26l596 -592q26 -26 26 -60t-26 -60l-90 -88q-22 -26 -57 -26t-61 26l-442 448l-450 -448q-24 -26 -61 -26t-59 26l-88 88q-26 22 -26 59t26 63l590 590q26 26 61 26z" />
                                                  +    <glyph glyph-name="uniE04A" unicode="&#xe04a;" horiz-adv-x="1360" 
                                                  +d="M0 679q0 37 26 59l88 88q22 26 59 26t61 -26l450 -448l442 448q26 26 61 26t57 -26l90 -88q26 -26 26 -60t-26 -60l-596 -592q-26 -26 -61 -26t-61 26l-590 590q-26 26 -26 63z" />
                                                  +    <glyph glyph-name="uniE04B" unicode="&#xe04b;" horiz-adv-x="1518" 
                                                  +d="M1754 876v-252h-344v-346h-250v346h-342v252h342v346h250v-346h344zM1000 278h-300l-356 -250q-28 -22 -33 -18t-5 42v226h-158q-62 0 -105 44t-43 106v644q0 62 43 106t105 44h852v-186h-182q-66 0 -113 -47t-47 -113v-252q0 -66 47 -113t113 -47h182v-186z" />
                                                  +    <glyph glyph-name="uniE04C" unicode="&#xe04c;" horiz-adv-x="1280" 
                                                  +d="M1152 256h-128v-128h128v128zM896 256h-128v-128h128v128zM512 256h-128v-128h128v128zM256 256h-128v-128h128v128zM1152 512h-128v-128h128v128zM896 512h-128v-128h128v128zM512 512h-128v-128h128v128zM256 512h-128v-128h128v128zM512 768h-128v-128h128v128z
                                                  +M256 768h-128v-128h128v128zM512 1024h-128v-128h128v128zM256 1024h-128v-128h128v128zM1280 640v-640h-1280v1152h640v-512h640z" />
                                                  +    <glyph glyph-name="uniE04D" unicode="&#xe04d;" horiz-adv-x="1300" 
                                                  +d="M732 922h486q34 0 58 -24t24 -58v-758q0 -34 -24 -58t-58 -24h-1136q-34 0 -58 24t-24 58v920q0 34 24 57t58 23h486q34 0 58 -23t24 -57t24 -57t58 -23z" />
                                                  +    <glyph glyph-name="uniE04E" unicode="&#xe04e;" horiz-adv-x="1732" 
                                                  +d="M1732 556v-210h-286v-286h-208v286h-286v210h286v288h208v-288h286zM1056 0h-974q-34 0 -58 24t-24 58v920q0 34 24 57t58 23h486q34 0 58 -23t24 -57t24 -57t58 -23h324v-198h-130q-66 0 -113 -47t-47 -113v-224q0 -66 47 -113t113 -47h130v-180z" />
                                                  +    <glyph glyph-name="uniE050" unicode="&#xe050;" horiz-adv-x="1620" 
                                                  +d="M636 1006h900q84 0 84 -96v-676q0 -96 -84 -96h-900q-44 0 -70 26t-26 70v676q0 44 26 70t70 26zM1080 1126h-444q-140 0 -178 -38t-38 -178v-436l-140 -2h-184q-44 0 -70 26t-26 70v676q0 44 26 70t70 26h900q84 0 84 -96v-118z" />
                                                  +    <glyph glyph-name="uniE051" unicode="&#xe051;" horiz-adv-x="1300" 
                                                  +d="M148 1222h1004q62 0 105 -44t43 -106v-644q0 -62 -43 -106t-105 -44h-452l-356 -250q-28 -22 -33 -18t-5 42v226h-158q-62 0 -105 44t-43 106v644q0 62 43 106t105 44z" />
                                                  +    <glyph glyph-name="uniE052" unicode="&#xe052;" horiz-adv-x="1034" 
                                                  +d="M508 1132h104q40 0 64 -32l350 -500q22 -32 0 -66l-350 -500q-26 -34 -64 -34h-102q-16 0 -22 10t2 26l282 496q20 36 0 70l-284 496q-8 14 -2 24t22 10zM24 1132h108q40 0 64 -32l344 -500q22 -32 0 -66l-344 -500q-26 -34 -64 -34h-108q-16 0 -22 10t4 26l286 496
                                                  +q22 36 0 70l-286 496q-10 14 -4 24t22 10z" />
                                                  +    <glyph glyph-name="uniE053" unicode="&#xe053;" horiz-adv-x="1036" 
                                                  +d="M1012 0h-108q-38 0 -64 34l-344 500q-22 34 0 66l344 500q24 32 64 32h108q16 0 22 -10t-4 -24l-286 -496q-20 -34 0 -70l286 -496q10 -16 4 -26t-22 -10zM526 0h-102q-38 0 -64 34l-350 500q-26 34 0 66l350 500q24 32 64 32h104q16 0 22 -10t-2 -24l-284 -496
                                                  +q-20 -34 0 -70l282 -496q8 -16 2 -26t-22 -10z" />
                                                  +    <glyph glyph-name="uniE054" unicode="&#xe054;" 
                                                  +d="M1200 158v-158h-1200v1200h158v-1042h1042z" />
                                                  +    <glyph glyph-name="uniE055" unicode="&#xe055;" horiz-adv-x="914" 
                                                  +d="M914 1162v-1122h-250v464l-544 -456q-56 -34 -88 -17t-32 75v992q0 60 32 73t88 -29l544 -442v462h250z" />
                                                  +    <glyph glyph-name="uniE056" unicode="&#xe056;" horiz-adv-x="914" 
                                                  +d="M914 1098v-992q0 -58 -32 -75t-88 17l-544 456v-464h-250v1122h250v-462l544 442q56 42 88 29t32 -73z" />
                                                  +    <glyph glyph-name="uniE057" unicode="&#xe057;" horiz-adv-x="1300" 
                                                  +d="M814 498v194h276l86 -98l-86 -96h-276zM814 808v258h368l118 -128l-118 -130h-368zM712 1066v-1066h-200v1066h200zM402 1066v-258h-286l-116 130l116 128h286zM668 1266l44 -114h-200l42 114h114z" />
                                                  +    <glyph glyph-name="uniE058" unicode="&#xe058;" horiz-adv-x="1400" 
                                                  +d="M1104 894h-94v-286h-528v100l-254 -150l254 -142v96h622v382zM144 1078h1112q144 0 144 -150v-684q0 -68 -38 -106t-106 -38h-1112q-144 0 -144 144v684q0 150 144 150z" />
                                                  +    <glyph glyph-name="uniE059" unicode="&#xe059;" 
                                                  +d="M1065 616q31 0 53 -23t22 -53v-290q0 -60 -44 -105t-104 -45h-842q-62 0 -106 45t-44 105v632q0 60 44 105t106 45h456q32 0 54 -23t22 -54t-21 -53t-55 -22h-454v-628h836v288q0 30 23 53t54 23zM1300 1112v-378q0 -50 -38 -69t-76 3t-38 72v190q-90 -94 -138 -138
                                                  +q-144 -144 -208 -209t-108 -37t-43 64t29 66l180 180q120 120 182 180h-184q-50 0 -79 37t1 83q14 21 29 25q15 3 19 4q12 3 105 3h198q105 0 115 -2q54 -22 54 -74z" />
                                                  +    <glyph glyph-name="uniE05A" unicode="&#xe05a;" horiz-adv-x="1440" 
                                                  +d="M570 778q0 28 18 38t42 -4l340 -196q24 -14 24 -34t-24 -34l-340 -198q-24 -14 -42 -3t-18 39v392zM218 984q-32 0 -55 -23t-23 -57v-644q0 -34 22 -57t56 -23h1004q34 0 56 23t22 57v644q0 34 -23 57t-55 23h-1004zM218 40q-94 0 -156 64t-62 156v644q0 92 64 156
                                                  +t154 64h1004q90 0 154 -64t64 -156v-644q0 -92 -62 -156t-156 -64h-1004z" />
                                                  +    <glyph glyph-name="uniE05B" unicode="&#xe05b;" horiz-adv-x="1718" 
                                                  +d="M0 694v206h642l2 172l418 -280l-418 -278l-2 180h-642zM1718 1124v-644q0 -86 -60 -150q-64 -60 -148 -60h-434l-338 -238q-40 -32 -65 -32t-44 16t-22 36t-3 52v166h-98q-84 0 -148 60q-60 64 -60 150v54h120v-54q0 -38 25 -64t63 -26h218v-222l316 222h470q38 0 63 26
                                                  +t25 64v644q0 38 -25 64t-63 26h-1004q-38 0 -63 -26t-25 -64v-60h-120v60q0 84 60 148q62 62 148 62h1004q86 0 148 -62q60 -64 60 -148z" />
                                                  +    <glyph glyph-name="uniE05C" unicode="&#xe05c;" 
                                                  +d="M1200 764v-324h-440v-440h-320v440h-440v324h440v442h320v-442h440z" />
                                                  +    <glyph glyph-name="uniE05D" unicode="&#xe05d;" 
                                                  +d="M601 150q187 0 318 132t131 319t-131 318t-318 131t-319 -131t-132 -318t132 -319t319 -132zM600 1200q248 0 424 -176t176 -424t-176 -424t-424 -176t-424 176t-176 424t176 424t424 176z" />
                                                  +    <glyph glyph-name="uniE05E" unicode="&#xe05e;" 
                                                  +d="M686 0h-200q-30 0 -30 30v186q0 30 30 30h200q30 0 30 -30v-186q0 -30 -30 -30zM686 420h-200q-30 0 -30 30v578q0 30 30 30h200q30 0 30 -30v-578q0 -30 -30 -30z" />
                                                  +    <glyph glyph-name="uniE061" unicode="&#xe061;" 
                                                  +d="M388 228q-10 0 -15 1t-5 67v76q0 14 2 17t18 3h796q16 0 16 -20v-112q0 -24 -1 -28t-15 -4h-796zM0 360q0 26 1 29t17 3h148q16 0 16 -20v-112q0 -24 -1 -28t-15 -4h-148q-8 0 -13 1t-5 31v100zM388 532q-10 0 -15 1t-5 67v76q0 14 2 17t18 3h796q16 0 16 -20v-112
                                                  +q0 -24 -1 -28t-15 -4h-796zM0 664q0 26 1 29t17 3h148q16 0 16 -20v-112q0 -24 -1 -28t-15 -4h-148q-8 0 -13 1t-5 31v100zM388 836q-10 0 -15 1t-5 67v76q0 14 2 17t18 3h796q16 0 16 -20v-112q0 -24 -1 -28t-15 -4h-796zM0 968q0 26 1 29t17 3h148q16 0 16 -20v-112
                                                  +q0 -24 -1 -28t-15 -4h-148q-8 0 -13 1t-5 31v100z" />
                                                  +    <glyph glyph-name="uniE062" unicode="&#xe062;" 
                                                  +d="M350 752q497 0 687 -156q163 -134 163 -398q0 -50 -6 -98q-25 157 -123 215q-39 23 -68 38t-86 25t-94 16q-62 10 -204 10h-269v-228l-350 402l350 402v-228z" />
                                                  +    <glyph glyph-name="uniE063" unicode="&#xe063;" 
                                                  +d="M834 972q106 0 174 -78q78 16 156 60q-30 -88 -108 -132q80 10 144 36q-62 -82 -120 -126v-36q0 -124 -48 -246t-134 -223t-222 -164t-318 -63t-358 108h60q176 0 306 102q-80 0 -143 48t-91 126q18 -6 57 -6t57 6q-86 18 -142 87t-56 159q60 -30 114 -30q-50 32 -82 87
                                                  +t-32 122t36 121q192 -240 504 -258l-6 54q0 102 73 174t179 72z" />
                                                  +    <glyph glyph-name="uniE064" unicode="&#xe064;" horiz-adv-x="556" 
                                                  +d="M0 748q0 12 9 20t19 8h88v74q0 250 256 250q94 0 162 -22q22 -6 22 -28l-20 -142q-2 -8 -10 -20q-10 -4 -38 3t-73 7t-54 -11t-9 -49v-62h156q26 0 26 -32l-10 -144q0 -22 -26 -22h-146v-550q0 -10 -9 -19t-19 -9h-180q-12 0 -20 9t-8 19v550h-88q-10 0 -19 8t-9 20v142z
                                                  +" />
                                                  +    <glyph glyph-name="uniE065" unicode="&#xe065;" horiz-adv-x="1136" 
                                                  +d="M118 231q0 -85 72 -128t163 -43t148 36t57 105t-52 115q-24 28 -98 76q-12 2 -40 2q-102 0 -164 -36q-86 -42 -86 -127zM366 616q116 0 116 144q0 80 -40 164q-50 92 -121 92t-103 -48q-32 -38 -32 -112t52 -157t128 -83zM1136 928v-110h-144v-146h-112v146h-148v110h148
                                                  +v146h112v-146h144zM668 264q0 -134 -130 -220q-102 -64 -232 -64t-216 46q-110 66 -110 170q0 134 144 204q78 38 210 50q-22 40 -22 64t4 44h-18q-104 0 -174 70q-74 64 -74 163t65 177t142 95t141 17h348l-150 -88h-38q60 -66 60 -173t-93 -191q-11 -10 -18 -18t-19 -19
                                                  +t-12 -32t24 -43q100 -84 134 -134q34 -44 34 -118z" />
                                                  +    <glyph glyph-name="uniE066" unicode="&#xe066;" horiz-adv-x="1414" 
                                                  +d="M882 232q-64 0 -122 34q-70 -166 -235 -166t-231 170q-200 -12 -270 140q-30 70 -12 144q18 98 108 158l-4 16q-38 112 13 215t161 141l54 12h66l12 -4q70 -12 128 -54q12 -8 40 -42q106 76 221 55t181 -117q88 28 162 16q116 -14 191 -105t71 -209t-89 -202t-203 -90
                                                  +l-24 -12q-88 -100 -218 -100z" />
                                                  +    <glyph glyph-name="uniE067" unicode="&#xe067;" 
                                                  +d="M928 982h-114l-22 -832h102zM672 982h-138l16 -832h106zM418 150l-20 832h-114l32 -832h102zM710 1232h-214v-98h214v98zM1200 1134v-154h-100l-60 -980h-876l-64 980h-100v154h342v226h516v-226h342z" />
                                                  +    <glyph glyph-name="uniE068" unicode="&#xe068;" horiz-adv-x="1428" 
                                                  +d="M516 406l-122 66q36 14 64 32q34 16 62 42zM748 422l32 136q46 -60 102 -102zM1152 178q0 -64 -31 -73q-17 -5 -47 -5h-900q-78 0 -78 78v510l140 -236v-212h776v188l140 120v-370zM406 984h598l-132 -140h-376zM858 530l-60 72l410 410l130 -128l-410 -412l-2 2
                                                  +q-30 20 -68 56zM514 592l-76 -54q-48 -28 -80 -38h-2l-294 500l158 92zM1378 1078l24 -26q18 -18 24 -46t-4 -38l-50 -52l-130 130l52 50q8 10 37 5t47 -23zM72 1198q22 14 51 12t35 -14l38 -62l-158 -94l-36 62q-8 14 5 40t33 38z" />
                                                  +    <glyph glyph-name="uniE069" unicode="&#xe069;" horiz-adv-x="848" 
                                                  +d="M590 666v-606h-334v606h-256l426 494l422 -494h-258z" />
                                                  +    <glyph glyph-name="uniE06A" unicode="&#xe06a;" horiz-adv-x="848" 
                                                  +d="M258 554v606h334v-606h256l-426 -494l-422 494h258z" />
                                                  +    <glyph glyph-name="uniE06B" unicode="&#xe06b;" horiz-adv-x="882" 
                                                  +d="M734 822l-464 -674l-270 -148l38 306l476 674zM800 908l-226 158l62 96q18 28 57 34t61 -14l50 -28l44 -40q24 -18 32 -50t-10 -64z" />
                                                  +    <glyph glyph-name="uniE06C" unicode="&#xe06c;" horiz-adv-x="550" 
                                                  +d="M526 0h-108q-38 0 -64 34l-344 500q-26 34 0 66l344 500q24 32 64 32h108q16 0 22 -10t-4 -24l-286 -496q-22 -34 0 -70l286 -496q8 -16 3 -26t-21 -10z" />
                                                  +    <glyph glyph-name="uniE06D" unicode="&#xe06d;" horiz-adv-x="552" 
                                                  +d="M24 1132h108q40 0 64 -32l344 -500q12 -14 12 -33t-12 -33l-344 -500q-26 -34 -64 -34h-108q-16 0 -22 10t4 26l286 496q22 36 0 70l-286 496q-10 14 -4 24t22 10z" />
                                                  +    <glyph glyph-name="uniE06E" unicode="&#xe06e;" horiz-adv-x="1298" 
                                                  +d="M1298 164q0 -44 -46 -44q-20 0 -32 14l-288 278v-140q0 -92 -20 -114t-116 -22h-660q-94 0 -115 22t-21 114v456q0 94 22 116q24 22 114 22h660q92 0 114 -22t22 -116v-142l288 282q12 12 25 12q53 0 53 -46v-670z" />
                                                  +    <glyph glyph-name="uniE071" unicode="&#xe071;" horiz-adv-x="1420" 
                                                  +d="M1028 38v354q82 112 140 188v-600q0 -34 -24 -58t-58 -24h-1004q-34 0 -58 24t-24 58v1006q0 34 24 58t58 24h916l-48 -42h-2l-70 -64q-6 -6 -19 -17t-19 -17h-700v-890h888zM692 160q-156 194 -472 510l106 110l294 -256l284 278q97 93 210 192l134 112q60 48 76 58
                                                  +l22 16q4 0 36 -29t38 -43q-250 -222 -612 -764z" />
                                                  +    <glyph glyph-name="uniE072" unicode="&#xe072;" horiz-adv-x="1420" 
                                                  +d="M140 928v-890h890v890h-890zM82 -102q-34 0 -58 25t-24 57v1006q0 34 24 58t58 24h1006q34 0 58 -24t24 -58v-1006q0 -32 -25 -57t-57 -25h-1006z" />
                                                  +    <glyph glyph-name="uniE073" unicode="&#xe073;" 
                                                  +d="M4 170v122q0 14 2 17t18 3h1156q16 0 16 -20v-112q0 -24 -1 -28t-15 -4h-1156q-20 0 -20 22zM4 514v122q0 14 2 17t18 3h1156q16 0 16 -20v-112q0 -26 -1 -29t-15 -3h-1156q-20 0 -20 22zM24 836q-10 0 -15 1t-5 67v76q0 14 2 17t18 3h1156q16 0 16 -20v-112
                                                  +q0 -24 -1 -28t-15 -4h-1156z" />
                                                  +    <glyph glyph-name="uniE074" unicode="&#xe074;" horiz-adv-x="1296" 
                                                  +d="M1168 562l108 -108l-160 -162l160 -160l-108 -110l-162 162l-160 -162l-110 110l162 160l-162 162l108 110l162 -164zM598 1148q122 0 185 -57t69 -115q6 -20 2 -48l-18 -112q36 -12 18 -92h-10q-60 0 -100 -42l-128 -130q-40 -40 -40 -98t40 -98l64 -62l-62 -62
                                                  +q-42 -40 -42 -99t40 -99l34 -34h-650v136q0 26 70 72q86 44 198 85t157 86t45 123q0 34 -28 58q-22 12 -42 96q-4 22 -22 28q-35 17 -37 90q-1 34 19 40l4 2q-14 84 -18 112q0 60 26 104q38 72 122 100q40 16 104 16z" />
                                                  +    <glyph glyph-name="uniE075" unicode="&#xe075;" horiz-adv-x="1300" 
                                                  +d="M1300 124q0 -52 -35 -88t-89 -36h-1054q-50 0 -86 37t-36 87v784q0 48 36 85t86 37h654q-2 -20 -2 -56t2 -58h-654q-8 0 -8 -8q0 -130 98 -196l288 -230q104 -98 154 -98q32 0 89 45t67 53l156 124q12 -8 46 -28t52 -32q-78 -56 -210 -170q-134 -100 -194 -100t-95 21
                                                  +t-75 49t-44 30q-78 68 -300 246q-28 14 -32 30v-528q0 -18 8 -18h1054q18 0 18 18v400q12 -10 38 -10l68 12v-402zM1264 1110h-64l-74 -42v-68l74 38v-258h64v330zM1570 860l-96 -32l30 -102l-110 6l-10 -100l-90 50l-58 -90l-64 78l-82 -50l-28 98l-96 -20l14 102l-98 28
                                                  +l56 84l-84 64l90 56l-50 94l104 10l-12 102l106 -28l36 92l78 -64l66 78l50 -92l94 38l4 -104l102 -2l-40 -94l94 -52l-72 -66z" />
                                                  +    <glyph glyph-name="uniE076" unicode="&#xe076;" horiz-adv-x="1300" 
                                                  +d="M898 452q-6 0 -22 4l-238 98q-22 4 -37 21t-15 41v358q0 26 19 44t45 18t44 -18t18 -44v-316l210 -84q24 -10 34 -34t-2 -56t-56 -32zM650 148q206 0 354 148t148 354t-148 354t-354 148t-354 -148t-148 -354t148 -354t354 -148zM650 1300q268 0 459 -191t191 -459
                                                  +t-191 -459t-459 -191t-459 191t-191 459t191 459t459 191z" />
                                                  +    <glyph glyph-name="uniE077" unicode="&#xe077;" horiz-adv-x="1300" 
                                                  +d="M558 372v92h184v-92h-184zM1300 464v-376q0 -48 -20 -68t-68 -20h-1124q-48 0 -68 20t-20 68v376h488v-116q0 -20 13 -33t33 -13h232q20 0 33 13t13 33v116h488zM836 1022h-372v-94h372v94zM0 534v308q0 48 20 67t68 19h284v132q0 54 54 54h448q54 0 54 -54v-132h284
                                                  +q48 0 68 -19t20 -67v-308h-1300z" />
                                                  +    <glyph glyph-name="uniE078" unicode="&#xe078;" 
                                                  +d="M1020 599q0 23 -18 49l-70 72l-286 282q-20 16 -46 16t-48 -16l-70 -74q-18 -22 -18 -49t18 -43l162 -120h-394q-24 0 -45 -20t-21 -46v-100q0 -26 21 -46t45 -20h394l-162 -120q-18 -16 -18 -42t18 -52l72 -72q20 -16 46 -16t48 16l284 282l70 74q18 22 18 45zM1200 600
                                                  +q0 -248 -176 -424t-424 -176t-424 176t-176 424t176 424t424 176t424 -176t176 -424z" />
                                                  +    <glyph glyph-name="uniE079" unicode="&#xe079;" horiz-adv-x="1600" 
                                                  +d="M1276 50q14 0 25 10t11 25t-10 25t-26 10q-34 0 -34 -36q0 -14 10 -24t24 -10zM1046 704v-522h464v522h-464zM1540 798q22 0 41 -19t19 -43v-676q0 -20 -20 -40t-40 -20h-524q-64 0 -64 60v676q0 62 64 62h524zM856 166h-78q0 -72 54 -146h-344q62 96 62 146h-518
                                                  +q-12 0 -22 9t-10 21v904q0 12 10 21t22 9h1266q10 0 21 -10t11 -20v-224h-108v150h-1116v-662h750v-198z" />
                                                  +    <glyph glyph-name="uniE07A" unicode="&#xe07a;" horiz-adv-x="1400" 
                                                  +d="M964 52q0 -20 -16 -34q-12 -16 -31 -16t-39 16l-128 128v-96q0 -22 -15 -36t-35 -14t-34 15t-14 35v96l-130 -128q-16 -16 -33 -16t-35 15t-18 35t16 34l168 168h160l168 -168q16 -14 16 -34zM1322 984v-650q0 -26 -28 -26h-1188q-28 0 -28 26v650h104v-556h1038v556h102
                                                  +zM1372 1158q28 0 28 -28v-48q0 -28 -28 -28h-1344q-28 0 -28 28v48q0 28 28 28h594q2 28 25 47t51 19t49 -19t27 -47h598z" />
                                                  +    <glyph glyph-name="uniE07B" unicode="&#xe07b;" 
                                                  +d="M850 404h-209q-202 0 -252 -8q-49 -8 -106 -18t-86 -25q-101 -52 -128 -91q-48 -69 -63 -162q-6 48 -6 98q0 386 350 493q199 61 500 61v228l350 -402l-350 -402v228z" />
                                                  +    <glyph glyph-name="uniE07C" unicode="&#xe07c;" 
                                                  +d="M504 230v118q0 8 7 15t15 7h124q22 0 22 -22v-118q0 -24 -22 -24h-124q-8 0 -15 8t-7 16zM591 978q107 0 181 -52q74 -60 74 -158q0 -109 -116 -207q-58 -49 -58 -87v-40q0 -22 -22 -22h-124q-8 0 -15 7t-7 15v48q0 60 34 108q18 32 74 79t56 80q0 67 -72 67
                                                  +q-42 0 -94 -36q-10 -10 -32 2l-70 88q-16 16 12 36q72 72 179 72z" />
                                                  +    <glyph glyph-name="uniE07D" unicode="&#xe07d;" 
                                                  +d="M486 962v-204q132 -8 267 29t207 87t89 108t-51 112q146 -32 184 -187t-78 -341q-144 -232 -436 -324q-86 -26 -182 -38v-204l-486 484z" />
                                                  +    <glyph glyph-name="uniE07E" unicode="&#xe07e;" horiz-adv-x="1300" 
                                                  +d="M880 0h-478v478l478 2v-480zM0 849q0 107 76 184t183 77t184 -77t77 -184t-77 -184t-184 -77t-183 77t-76 184zM882 1036l166 170l36 -238l216 -106l-216 -104l-34 -238l-168 170l-236 -42l110 212l-110 214z" />
                                                  +    <glyph glyph-name="uniE080" unicode="&#xe080;" 
                                                  +d="M828 406l-290 290l-456 -456q-18 -18 0 -34l144 -144h258zM1192 712q0 -36 -28 -64l-648 -648h-324l-158 158q-26 26 -26 64t26 64l746 746q28 28 64 28t64 -28l256 -256q28 -28 28 -64z" />
                                                  +    <glyph glyph-name="uniE081" unicode="&#xe081;" horiz-adv-x="1300" 
                                                  +d="M584 34v-114h-112v114h112zM358 34v-114h-114v114h114zM114 34v-114h-114v114h114zM114 274v-114h-114v114h114zM1300 500v-114h-114v114h114zM114 500v-114h-114v114h114zM1222 134h-176l96 -216l-128 -58l-98 222l-146 -138v642zM1300 726v-114h-114v114h114zM114 726
                                                  +v-114h-114v114h114zM1300 952v-114h-114v114h114zM1056 952v-114h-114v114h114zM828 952v-114h-112v114h112zM584 952v-114h-112v114h112zM358 952v-114h-114v114h114zM114 952v-114h-114v114h114z" />
                                                  +    <glyph glyph-name="uniE082" unicode="&#xe082;" horiz-adv-x="814" 
                                                  +d="M814 442v-442h-814v442h50q46 82 79 240t43 274l8 118h436q56 -464 150 -632h48zM410 1400q82 0 144 -61t62 -135h-414q4 74 65 135t143 61z" />
                                                  +    <glyph glyph-name="uniE083" unicode="&#xe083;" horiz-adv-x="814" 
                                                  +d="M814 0h-814v172l154 902h508l152 -902v-172zM556 1204h-302l108 196h84z" />
                                                  +    <glyph glyph-name="uniE084" unicode="&#xe084;" horiz-adv-x="814" 
                                                  +d="M666 312h84q28 0 46 -19t18 -45v-248h-814v248q0 26 19 45t45 19h84v428q56 58 98 141t58 139l14 54h176q59 -217 172 -334v-428zM476 1204h-146v196h146v-196z" />
                                                  +    <glyph glyph-name="uniE085" unicode="&#xe085;" horiz-adv-x="1600" 
                                                  +d="M1254 674h-720v-108h720v108zM1472 898h-938v-108h938v108zM522 1042h962q48 0 82 -34t34 -82v-476q0 -50 -34 -84t-82 -34h-962q-46 0 -81 34t-35 84v228l-204 -408l88 -42l-290 -228l6 372l88 -48l328 662q36 56 100 56z" />
                                                  +    <glyph glyph-name="uniE086" unicode="&#xe086;" horiz-adv-x="1300" 
                                                  +d="M1300 206h-140v220h-808v-280l-352 352l352 348v-280h808v220h140v-580z" />
                                                  +    <glyph glyph-name="uniE087" unicode="&#xe087;" horiz-adv-x="814" 
                                                  +d="M0 792h160l-4 120h520l-4 -120h142v-790l-814 -2v792zM616 1042l-384 -6v174l384 190v-358z" />
                                                  +    <glyph glyph-name="uniE088" unicode="&#xe088;" horiz-adv-x="1592" 
                                                  +d="M990 336q0 -110 84 -110h190v-226h-786v560h606v-120q-8 -4 -34 -12q-60 -19 -60 -92zM356 678v-406q-152 22 -254 139t-102 281t122 287t292 123t293 -124t123 -294v-6h-474zM1356 1018v-602l104 -30v-62h-338v62l102 30v602h-140l-26 -150h-66l2 240h594l4 -240h-68
                                                  +l-26 150h-142z" />
                                                  +    <glyph glyph-name="uniE089" unicode="&#xe089;" 
                                                  +d="M814 386h272l-272 -272v272zM150 766v-128h896v128h-896zM150 1046v-128h896v128h-896zM1158 500h-418q-16 0 -28 -12t-12 -28v-418q0 -16 -12 -28t-28 -12l-620 -2q-16 0 -28 12t-12 28v1120q0 16 12 28t28 12h1120q16 0 28 -12t12 -28l-2 -620q0 -16 -12 -28t-28 -12z
                                                  +" />
                                                  +    <glyph glyph-name="uniE08A" unicode="&#xe08a;" horiz-adv-x="1434" 
                                                  +d="M1040 932l-542 -542l202 -202l-700 -188l188 700l212 -210l540 540l-206 208l700 188l-188 -700z" />
                                                  +    <glyph glyph-name="uniE08B" unicode="&#xe08b;" horiz-adv-x="1294" 
                                                  +d="M796 896l-202 202l700 188l-188 -700l-212 210l-796 -796l-98 100z" />
                                                  +    <glyph glyph-name="uniE08C" unicode="&#xe08c;" 
                                                  +d="M180 270l90 -90l-180 -180l-90 88zM498 588l90 -90l-180 -180l-90 90zM816 906l90 -90l-180 -180l-90 90zM1134 1224l90 -90l-180 -180l-90 90z" />
                                                  +    <glyph glyph-name="uniE08D" unicode="&#xe08d;" 
                                                  +d="M600 1200q248 0 424 -176t176 -424t-176 -424t-424 -176t-424 176t-176 424t176 424t424 176z" />
                                                  +    <glyph glyph-name="uniE08E" unicode="&#xe08e;" horiz-adv-x="1312" 
                                                  +d="M1246 188q-2 -72 66 -208q-176 32 -258 84q-140 -34 -257 0t-187 116q222 -2 392 103t244 273q68 -88 66 -189t-66 -179zM0 788q0 204 170 343t401 139t402 -138t171 -344q0 -108 -57 -208t-159 -168t-241 -93t-305 15q-122 -76 -380 -122q98 198 94 306q-96 114 -96 270
                                                  +z" />
                                                  +    <glyph glyph-name="uniE090" unicode="&#xe090;" horiz-adv-x="1300" 
                                                  +d="M1038 808h212q20 0 35 -15t15 -35t-15 -36t-35 -16h-168l-128 -662q-2 -20 -17 -32t-33 -12t-32 14t-16 32l-206 1130l-150 -690q-4 -14 -19 -26t-30 -13t-31 10t-20 27l-96 284l-10 -28q-16 -34 -48 -34h-194q-20 0 -36 16t-16 36t16 35t36 15h158l46 132q16 34 50 34
                                                  +v-8q14 6 28 -4t18 -24l86 -250l168 760q4 16 18 29t32 13t32 -14t16 -32l202 -1110l80 424q0 18 16 34t36 16z" />
                                                  +    <glyph glyph-name="uniE091" unicode="&#xe091;" horiz-adv-x="1140" 
                                                  +d="M1142 1039q0 -35 -24 -61t-56 -26q-156 -6 -258 -34t-130 -108q-10 -28 2 -54t58 -76q38 -48 53 -67t36 -68t23 -97q10 -70 -42 -114t-131 -51t-144 2q-142 20 -212 36q-70 17 -93 19q-22 2 -34 -18q-22 -22 -20 -68q20 -86 46 -116q18 -28 13 -65t-35 -55
                                                  +q-32 -26 -67 -13t-49 35q-62 82 -74 192q-18 128 64 214q76 70 186 64q22 0 112 -24q250 -54 308 -30q-10 42 -52 91t-50 59t-27 38q-21 31 -39 89q-18 59 4 135q60 156 254 218q94 28 292 36q34 0 60 -24t26 -59z" />
                                                  +    <glyph glyph-name="uniE092" unicode="&#xe092;" 
                                                  +d="M740 348v-166h-158v166h158zM740 780v-162h-158v162h158zM1064 170v740l-152 -72l-20 122l172 98h136v-888h-136zM178 170v740l-154 -72l-24 122l178 98h128v-888h-128z" />
                                                  +    <glyph glyph-name="uniE093" unicode="&#xe093;" horiz-adv-x="1300" 
                                                  +d="M1072 978h152q30 0 53 -21t23 -53v-808q0 -28 -24 -52t-52 -24h-828q-32 0 -53 24t-21 52v130h116v-90h746v726h-112v116zM958 394q0 -30 -21 -52t-53 -22h-808q-28 0 -52 23t-24 51v806q0 32 24 54t52 22h808q34 0 54 -21t20 -55v-806z" />
                                                  +    <glyph glyph-name="uniE094" unicode="&#xe094;" horiz-adv-x="1300" 
                                                  +d="M1128 934h100q30 0 51 -22t21 -52v-786q0 -30 -21 -52t-51 -22h-786q-30 0 -52 22t-22 52v80h672q56 0 72 17t16 73v690zM124 1182q-22 0 -22 -22v-786q0 -22 22 -22h786q22 0 22 22v786q0 22 -22 22h-786zM124 250q-52 0 -88 36t-36 88v786q0 52 36 88t88 36h786
                                                  +q50 0 87 -36t37 -88v-786q0 -50 -37 -87t-87 -37h-786z" />
                                                  +    <glyph glyph-name="uniE095" unicode="&#xe095;" horiz-adv-x="1300" 
                                                  +d="M1030 818h-456q-18 -68 -88 -92v-454q72 -18 98 -92h448q22 68 92 90v454q-74 20 -94 94zM406 514v208q-46 12 -74 49t-28 89t40 92t91 40t87 -26t50 -68h236v162q-82 16 -108 92h-432q-26 -72 -100 -90v-444q84 -20 104 -104h134zM1300 132q0 -52 -40 -92t-92 -40
                                                  +t-89 28t-49 72h-446q-12 -44 -48 -72t-88 -28t-93 40t-41 91q0 102 92 137v166h-140q-16 -38 -51 -63t-85 -25t-90 41t-40 91t25 85t65 51v454q-40 14 -65 49t-25 85t40 91t93 41t90 -29t47 -73h428q12 44 48 73t89 29t93 -41t40 -97q0 -88 -82 -126v-172h146q14 42 50 68
                                                  +t87 26t91 -40t40 -91t-27 -87t-71 -50v-456q44 -12 71 -48t27 -88z" />
                                                  +    <glyph glyph-name="uniE096" unicode="&#xe096;" horiz-adv-x="1300" 
                                                  +d="M137 282q57 0 98 -40t41 -97t-41 -98t-98 -41t-97 41t-40 98t40 97t97 40zM484 800v-604q0 -16 16 -16h530q20 66 90 90v530q0 4 -6 10t-10 6h-604q-16 0 -16 -16zM406 512v288q0 38 27 66t67 28h304v238q0 4 -6 10t-10 6h-524q-16 -70 -96 -90v-528q0 -18 18 -18h220z
                                                  +M1165 1052q-55 0 -95 41t-40 98t40 97t95 40t95 -40t40 -97t-40 -98t-95 -41zM1198 800v-530q42 -12 69 -50t27 -89t-40 -91t-92 -40t-88 29t-50 73h-524q-42 0 -68 26t-26 68v238h-220q-42 0 -69 26t-27 70v534q-38 12 -64 48t-26 86t40 90t92 40t89 -29t49 -73h518
                                                  +q38 0 67 -28t29 -66v-238h220q38 0 66 -28t28 -66z" />
                                                  +    <glyph glyph-name="uniE097" unicode="&#xe097;" 
                                                  +d="M1184 392q14 0 15 -3t1 -29v-100q0 -30 -4 -31t-12 -1h-610l112 164h498zM182 360v-100q0 -30 -4 -31t-12 -1h-148q-16 0 -17 4t-1 28v100q12 30 18 32h148q14 0 15 -3t1 -29zM1184 696q14 0 15 -3t1 -29v-100q0 -30 -4 -31t-12 -1h-404l112 164h292zM166 532h-148
                                                  +q-16 0 -17 4t-1 28v100q12 30 18 32h148q14 0 15 -3t1 -29v-100q0 -30 -4 -31t-12 -1zM1200 968v-100q0 -30 -4 -31t-12 -1h-196l112 164h84q14 0 15 -3t1 -29zM166 836h-148q-16 0 -17 4t-1 28v100q12 30 18 32h148q14 0 15 -3t1 -29v-100q0 -30 -4 -31t-12 -1zM988 1056
                                                  +q0 -4 -10 -18l-648 -950q-12 -16 -14 -19t-6 -1t-5 2t-7 5t-10 7l-84 56q-22 14 -23 17t13 25l238 352h-44q-14 0 -17 3t-3 14v115q0 28 4 30t16 2h156l96 140h-252q-14 0 -17 3t-3 14v115q0 28 4 30t16 2h364l90 130q10 14 14 16t11 -3t9 -7t6 -4l84 -58q4 -4 13 -9t9 -9z
                                                  +" />
                                                  +    <glyph glyph-name="uniE098" unicode="&#xe098;" 
                                                  +d="M950 240q0 8 -11 20t-21 12q0 10 -22 16q-10 0 -20 -8q-6 -2 -4 -4q-14 14 -22 18h-6l-2 2h-4t-10 6t-12 6l-4 -4q-12 -4 -12 -15t-2 -13q-6 6 0 17t1 15q-7 5 -39 -16q-12 -5 -22 -30q0 2 -4 10q-10 0 -12 2q1 -8 4 -12q-2 -2 2 -11t2 -20t1 -21t-11 -38h-2l-2 -4
                                                  +q-28 -28 -20 -44q0 -4 5 -6t5 0q0 -10 -10 -22q2 0 4 -2q-14 0 -8 -10q156 26 276 140h-4l8 6q-6 10 -22 10zM932 876q-8 -4 -8 4zM566 1018q-5 0 -14 2h10zM596 1044l-6 4q6 0 14 -2l-6 -4zM614 568l42 -18q4 0 6 6q10 -16 15 -35t9 -21l8 -4h4q4 0 4 14t-2 18v28
                                                  +q-30 6 -14 26q6 12 24 22q40 14 30 38q8 0 10 8l-10 8h-4q8 6 0 14q6 4 6 10q2 6 8 8q6 -12 15 -4t3 16l34 16q6 0 6 4v6q0 4 4 12q6 6 24 12l14 10l2 2q25 0 26 11q2 11 -6 17q2 4 -3 7t-13 5h8q12 0 15 5t-7 7q-12 12 -40 -8l-4 -2q-12 -12 -20 -16q12 16 4 18q7 0 18 7
                                                  +q12 7 12 9h2q4 2 6 2h8q54 22 70 0q18 24 30 24q12 6 14 6l4 2v18q-16 0 -20 24l-4 -8q0 8 -10 8q-7 -7 -12 -2q-4 0 -16 12q-6 12 -10 12q8 0 4 6l-6 4q2 6 -1 8t-7 0q-2 6 -2 10q-6 0 -8 8t-5 8t-7 -5t-4 -7l-6 -6q-10 6 -18 -8h-14q14 6 3 9t-17 1q20 10 -2 24h4l2 -2
                                                  +q0 9 -35 23t-55 7q-9 -9 0 -18l4 -22q-4 -2 -10 -8t8 -14q28 -22 -10 -41q-10 -5 -8 -13v-4q0 -12 8 -17t-12 -17l-14 -2q0 8 -8 15t-10 23q0 20 -22 20q-10 0 -14 -4q0 13 -32 20q-32 8 -52 6q8 2 0 13t-16 9q-6 22 -4 26t9 14q7 12 19 14t12 8t-10 8q40 -6 50 14q4 8 4 10
                                                  +h2q12 0 4 12q18 6 22 6l16 -8q14 -2 17 8t-1 13t-3 5t1 4q0 8 -4 16q-4 2 -10 2t-12 2l-2 -2h-6q-4 0 -4 -4t4 -4l4 -2h2q-5 -5 -2 -8l-28 -16l-2 -2h-4v4q-8 8 -8 22q-2 2 -8 2t-12 -14q2 8 -9 14t-21 6q14 12 -6 24h-2q-28 -4 -34 -4q-2 -6 2 -10h1q3 0 3 -8l-4 8
                                                  +q0 -6 4 -8h10q10 0 10 -4q10 0 10 -8q-10 -10 -17 -11t-9 -3t1 -11t-1 -13q-8 8 -8 22h-4q-10 0 -24 2h-8q-6 0 -10 -2h-14q-2 0 -9 2t-13 2q4 10 4 20q4 0 6 2l-6 2l-18 -8l6 -6q4 -8 6 -10q-14 4 -20 0q0 -4 -8 0q-28 0 -12 -16v-6q-22 14 -24 18q-136 -66 -216 -194
                                                  +q2 -2 3 -9t11 -3q6 -10 2 -16q4 4 35 -23t11 -35v8q-2 0 -14 4q-7 -7 8 -26q-10 -23 -10 -42v-22h2q-4 -12 4 -30t20 -16q-6 -12 2 -16q0 -8 20 -28q20 -8 27 -17t13 -24t12 -21l16 -36h-2q0 -2 -2 -2q4 -6 16 -13t12 -16t2 -12t8 -1q0 22 -22 52l-14 24l-4 14q0 4 -2 8v4
                                                  +q20 -8 20 -10q-4 -10 10 -28t23 -25t15 -25l4 -4q-4 0 -4 -4q34 -17 40 -42v-12q0 -28 36 -40l8 -4q24 -24 39 -24t33 6q12 0 24 -14q8 -14 28 -23t34 -3q0 -12 18 -30q0 -8 15 -19t17 -15q6 2 8 8q10 -28 17 -28t7 6v-4q4 8 4 20q8 8 5 10t-5 -4q-24 -14 -36 16q-6 6 -9 17
                                                  +t2 11h9l4 2l-6 20q-2 4 -2 10l-20 22q-4 -8 -13 -7t-13 9v-6q-2 -2 -2 -6q-12 0 -14 2l10 44q18 25 10 29q-8 5 -21 4t-19 -17q-2 -2 -6 -14t-29 -12q-47 0 -47 60l4 44l-4 20l16 16q0 2 4 2h4q2 0 6 6l-6 6h46q12 -12 18 2v8q-2 4 -2 12q4 -24 26 -8zM1200 602
                                                  +q0 -164 -80 -302t-217 -219t-301 -81t-302 80t-219 217t-81 301t80 302t217 219t301 81t302 -80t219 -217t81 -301zM952 892l-16 -16h-4q4 2 10 8t10 8zM604 1046q16 8 16 -4q-4 4 -16 4zM677 1077l-1 1z" />
                                                  +    <glyph glyph-name="uniE099" unicode="&#xe099;" 
                                                  +d="M0 604q0 214 179 360t421 146t421 -145t179 -361q0 -114 -60 -219t-167 -176t-253 -97t-320 16q-126 -78 -398 -128q102 206 98 320q-100 122 -100 284z" />
                                                  +    <glyph glyph-name="uniE100" unicode="&#xe100;" 
                                                  +d="M898 436h-600v-108h600v108zM898 634h-600v-108h600v108zM898 832h-600v-108h600v108zM1200 0h-1200v1474h840l360 -360v-1114z" />
                                                  +    <glyph glyph-name="uniE101" unicode="&#xe101;" horiz-adv-x="1328" 
                                                  +d="M702 246q0 -34 -48 -34q-22 0 -34 6l6 22q12 -8 29 -8t17 11t-18 19q-32 10 -32 34q0 34 44 34q22 0 30 -6l-6 -20q-12 4 -27 4t-15 -10t27 -19t27 -33zM1106 628v-24h-86v116h84v-24h-58v-22h54v-20h-54v-26h60zM248 604v2l-28 114h24l18 -76l18 76h22l20 -76l18 76h24
                                                  +l-28 -116h-26l-20 76l-16 -76h-26zM732 664q0 28 -20 48q-22 20 -50 20t-49 -20t-21 -48t21 -48t50 -20t49 20t20 48zM978 980l-158 -298q8 -74 -44 -130q-56 -52 -130 -46l-302 -162l160 304q-6 72 46 130q56 54 130 44zM638 988h-24v114h24l44 -74v74h26v-114h-28l-42 74
                                                  +v-74zM1214 664q0 226 -155 381t-357 167l-38 -66l-38 66q-202 -12 -357 -167t-155 -381t162 -388t388 -162t388 162t162 388zM664 1380q-42 0 -52 -54q18 2 52 2t52 -2q-10 54 -52 54zM1328 664q0 -272 -194 -470q-198 -194 -470 -194t-470 194q-194 198 -194 470t194 470
                                                  +q150 148 350 184q4 58 38 92t82 34t82 -34t38 -92q200 -36 350 -184q194 -198 194 -470z" />
                                                  +    <glyph glyph-name="uniE102" unicode="&#xe102;" horiz-adv-x="1120" 
                                                  +d="M549 82q46 -7 67 44l-104 -18q12 -22 37 -26zM774 256v20l-406 -64q52 -32 104 -26l140 24q48 4 102 14t57 14t3 18zM346 312v-20l428 68v42q-168 -24 -264 -41t-126 -21t-34 -9t-4 -19zM752 482h-410q4 -14 4 -64q272 44 406 64zM611 916l-45 -10q-14 0 -38 7t-32 -1
                                                  +q-34 -12 -54 -5t-24 8t-12 2t-9 -2t0 -7t27 -52t30 -72l18 -136q8 -56 8 -76q2 -6 24 -6h136l18 148q8 76 29 118t31 63t-12 21q-8 -2 -32 -4l-34 -4zM332 566h66v4q-2 20 -5 61t-8 75t-13 62t-23 60t-37 71t-31 57t-11 36t8 33t31 15t34 -13t13 -31q0 -28 22 16l2 8
                                                  +q16 20 40 16t31 -25t11 -21t10 19t27 26t30 0t15 -20t14 -25t17 13t18 32t29 1q10 -4 21 -26t15 -22t15 22q23 45 58 20q17 -12 17 -34q2 -18 34 34q30 22 53 1t19 -36t-5 -19l-15 -34q-86 -156 -86 -178l-24 -198h74q19 0 34 30q14 30 17 36t27 41t32 49t27 45t40 71t37 89
                                                  +t19 118t-14 143t-74 142t-163 117t-248 43t-256 -76q-140 -86 -181 -253t75 -369q24 -42 62 -100t47 -72t13 -22t5 -12t9 -12t26 -8zM856 446v-162q0 -80 -16 -104t-62 -48t-64 -34t-23 -16t-21 -30q-38 -50 -101 -54t-107 40q-20 20 -32 46q-28 16 -70 37t-67 43
                                                  +q-45 39 -33 170l4 68q0 56 -19 103t-68 120t-59 89q-154 252 -108 466q24 112 99 199t181 137q308 123 568 -12q138 -72 208 -202q160 -294 -131 -685q-79 -106 -79 -171z" />
                                                  +    <glyph glyph-name="uniE103" unicode="&#xe103;" horiz-adv-x="1228" 
                                                  +d="M426 246q50 0 83 33t33 82t-33 83t-83 34t-81 -31t-35 -78t31 -85t85 -38zM401 180q-61 8 -97 44t-52 75t-8 94t56 103t123 49t123 -45t58 -92q2 -8 13 -4t17 4q74 22 131 86t57 200q-2 -4 -11 -15t-15 -19t-20 -22t-32 -10t-23 23t7 33l114 132q24 14 42 -12l100 -122
                                                  +q22 -24 -3 -47t-50 8t-41 49q0 -118 -40 -190q-58 -108 -174 -150q-40 -16 -53 -17t-15 -6t-3 -13t-3 -12q-65 -142 -201 -124zM420 732l-70 -72q-26 -22 -49 2t1 48l70 70l-70 70q-24 24 -1 48t49 2l70 -72l70 72q26 22 49 -2t-1 -48l-70 -70l70 -70q24 -24 1 -48t-49 -2z
                                                  +M1064 1000h-898v-826q0 -34 24 -58t58 -24h734q34 0 58 24t24 58v826zM614 1326q-26 0 -46 -19t-20 -47t20 -47t46 -19t46 19t20 47t-20 47t-46 19zM1228 1044q0 -18 -10 -31t-48 -13v-898q0 -42 -30 -72t-72 -30h-912q-42 0 -72 30t-30 72v898h-4q-50 0 -50 44v160
                                                  +q19 75 110 86h340q16 54 61 88t103 34t104 -34t62 -88h338q91 -11 110 -86v-160z" />
                                                  +    <glyph glyph-name="uniE104" unicode="&#xe104;" 
                                                  +d="M599 1194q247 0 424 -176t177 -421t-177 -421t-417 -176t-414 162t-186 416l148 28q4 -208 139 -333t314 -125t312 132t133 316t-133 317t-317 133t-318 -122l110 -108l-394 -72l72 394l108 -110q172 166 419 166z" />
                                                  +    <glyph glyph-name="uniE105" unicode="&#xe105;" 
                                                  +d="M350 934v-440h212l-284 -414l-278 414h218v564h982v-124h-850z" />
                                                  +    <glyph glyph-name="uniE106" unicode="&#xe106;" 
                                                  +d="M994 318l206 -202l-116 -116l-202 206l-86 -86l-24 308l308 -24zM318 212l-202 -206l-110 110l206 202l-92 92l314 24l-24 -314zM500 601q0 37 31 68t68 31t66 -31t29 -68t-29 -66t-66 -29t-68 29t-31 66zM882 988l202 206l110 -110l-206 -202l92 -92l-314 -24l24 314z
                                                  +M206 882l-206 202l116 116l202 -206l86 86l24 -308l-308 24z" />
                                                  +    <glyph glyph-name="uniE107" unicode="&#xe107;" 
                                                  +d="M600 150q188 0 319 132t131 318q0 146 -84 262l-626 -628q120 -84 260 -84zM600 1050q-184 0 -316 -131t-132 -319q0 -144 82 -260l626 628q-116 82 -260 82zM600 1200q248 0 424 -176t176 -424t-176 -424t-424 -176t-424 176t-176 424t176 424t424 176z" />
                                                  +    <glyph glyph-name="uniE108" unicode="&#xe108;" horiz-adv-x="1150" 
                                                  +d="M14 742h248v-742h-248v742zM860 762q134 0 212 -85t78 -253v-424h-244v396q0 166 -128 166q-44 0 -78 -22q-36 -36 -46 -61t-10 -65v-414h-246v742h246v-104q82 124 216 124zM137 844q-61 0 -99 37t-38 93t40 88q38 38 100 38t99 -36t38 -91t-37 -93q-42 -36 -103 -36z
                                                  +" />
                                                  +    <glyph glyph-name="uniE109" unicode="&#xe109;" horiz-adv-x="1100" 
                                                  +d="M300 150q0 -62 -44 -106t-106 -44t-106 44t-44 106t44 106t106 44t106 -44t44 -106zM650 0h-106q-16 0 -32 12q-16 20 -18 32q-14 182 -140 310q-128 126 -310 140q-12 2 -32 18q-12 16 -12 32v106q0 22 16 36t34 14h4q251 -17 440 -206t206 -440q0 -24 -14 -39t-36 -15z
                                                  +M1050 0h-112q-22 0 -34 16q-16 16 -16 30q-8 168 -78 322q-74 154 -178 264q-110 104 -264 176t-322 80q-14 2 -30 18t-16 32v112q0 22 16 36t34 14h4q198 -8 384 -92t338 -232q148 -152 232 -338t92 -384q0 -24 -14 -39t-36 -15z" />
                                                  +    <glyph glyph-name="uniE10A" unicode="&#xe10a;" 
                                                  +d="M600 58q12 0 12 11t-26 11t-58 32t-32 58t-11 26t-11 -12q0 -52 37 -89t89 -37zM924 924q0 -412 276 -648q0 -38 -28 -65t-64 -27h-324q0 -76 -56 -130t-128 -54t-130 54q-54 54 -54 130h-324q-36 0 -64 30q-28 22 -28 62q276 236 276 648q0 114 70 190q68 68 190 84
                                                  +q-6 24 -6 39t20 35q22 20 50 20t49 -20t21 -35t-6 -39q122 -16 190 -84q70 -76 70 -190z" />
                                                  +    <glyph glyph-name="uniE10B" unicode="&#xe10b;" 
                                                  +d="M601 812q-89 0 -151 -62t-62 -150t62 -150t150 -62t150 62t62 150t-61 150t-150 62zM600 1202q248 0 424 -176t176 -425t-176 -425t-424 -176t-424 176t-176 425t176 425t424 176z" />
                                                  +    <glyph glyph-name="uniE10C" unicode="&#xe10c;" 
                                                  +d="M1008 760q0 18 -16 34l-70 70q-14 14 -34 14t-38 -14l-318 -316l-174 174q-16 16 -38 16t-34 -16l-70 -68q-16 -20 -16 -36t16 -36l282 -282q18 -14 36 -14t36 14l422 422q16 20 16 38zM600 1202q248 0 424 -176t176 -425t-176 -425t-424 -176t-424 176t-176 425t176 425
                                                  +t424 176z" />
                                                  +    <glyph glyph-name="uniE10D" unicode="&#xe10d;" 
                                                  +d="M912 794q0 16 -16 32l-70 70q-22 16 -37 16t-37 -16l-152 -152l-152 152q-21 16 -39 16q-17 0 -33 -16l-72 -70q-16 -16 -16 -32t16 -40l154 -154l-154 -152q-16 -24 -16 -40t16 -32l70 -70q22 -16 37 -16t37 16l152 152l152 -152q21 -16 39 -16q17 0 33 16l72 70
                                                  +q16 16 16 32t-16 40l-154 152l154 154q16 24 16 40zM600 1202q248 0 424 -176t176 -425t-176 -425t-424 -176t-424 176t-176 425t176 425t424 176z" />
                                                  +    <glyph glyph-name="uniE10E" unicode="&#xe10e;" 
                                                  +d="M964 712h-54l-32 -156l-32 156h-52l-32 -156l-34 156h-52l50 -204h66l28 140l28 -140h66zM636 554h-66v38h62v44h-62v32h66v44h-120v-204h120v46zM454 712h-48v-142l-74 142h-72v-204h48l-2 144l76 -144h72v204zM1190 446l-160 -54l50 -168l-182 8l-18 -164l-148 80
                                                  +l-96 -148l-108 130l-136 -84l-46 162l-158 -32l20 170l-162 46l94 140l-140 106l148 94l-80 156l172 16l-22 168l178 -44l60 152l130 -108l108 130l84 -150l156 62l6 -174l172 -2l-68 -158l156 -86l-120 -108z" />
                                                  +    <glyph glyph-name="uniE110" unicode="&#xe110;" 
                                                  +d="M1190 446l-160 -54l50 -168l-182 8l-18 -164l-148 80l-96 -148l-108 130l-136 -84l-46 162l-158 -32l20 170l-162 46l94 140l-140 106l148 94l-80 156l172 16l-22 168l178 -44l60 152l130 -108l108 130l84 -150l156 62l6 -174l172 -2l-68 -158l156 -86l-120 -108z" />
                                                  +    <glyph glyph-name="uniE111" unicode="&#xe111;" 
                                                  +d="M808 539q0 15 -20 27l-262 152q-18 12 -33 4t-15 -28v-308q0 -22 15 -30t33 4l262 154q20 10 20 25zM2 242v602q0 120 120 120h960q120 0 120 -120v-602q0 -120 -120 -120h-960q-120 0 -120 120z" />
                                                  +    <glyph glyph-name="uniE112" unicode="&#xe112;" horiz-adv-x="1888" 
                                                  +d="M1432 176q22 0 22 20v124q0 6 -6 12q-2 8 -16 8h-122q-10 0 -12 -8q-8 -8 -8 -12v-124q0 -6 8 -14q2 -6 12 -6h122zM1444 830h-144q-4 0 -16 -4q-4 -8 -4 -10l10 -400q0 -4 6 -10t18 -6h116q8 0 16 4l8 12l10 400l-6 10q-8 4 -14 4zM86 830v-668l366 362zM68 0
                                                  +q-28 0 -48 20t-20 48v862q0 28 20 48t48 20h954q-50 -36 -88 -72l-16 -18h-780l512 -426l108 90q-4 -56 -4 -89t2 -53l-92 -76q-6 -6 -11 -6t-17 6l-132 110l-368 -364l10 -4h746q51 -59 98 -96h-922zM1372 1018q214 0 365 -151t151 -364t-150 -365t-366 -152t-366 152
                                                  +t-150 365t151 364t365 151z" />
                                                  +    <glyph glyph-name="uniE113" unicode="&#xe113;" 
                                                  +d="M1200 150v-150h-1200v150h1200zM1200 600v-300h-1200v300h1200zM1200 1200v-450h-1200v450h1200z" />
                                                  +    <glyph glyph-name="uniE114" unicode="&#xe114;" 
                                                  +d="M1200 300v-300h-300v300h300zM750 300v-300h-300v300h300zM300 300v-300h-300v300h300zM1200 750v-300h-524v300h524zM526 750v-300h-526v300h526zM1200 1200v-300h-1200v300h1200z" />
                                                  +    <glyph glyph-name="uniE115" unicode="&#xe115;" 
                                                  +d="M1088 530q26 0 69 -105t43 -153t-33 -81t-79 -33t-79 33t-33 81t43 153t69 105zM604 828v-74h-302l-150 -150h788l-396 394l-168 -170h228zM498 8q-38 0 -66 28l-396 396q-28 28 -28 66t28 64l192 192h-218v74h294l248 246l522 -524l-512 -514q-26 -28 -64 -28z" />
                                                  +    <glyph glyph-name="uniE116" unicode="&#xe116;" 
                                                  +d="M600 300v230q0 30 21 50t49 20h230v300h-300v-230q0 -28 -20 -49t-50 -21h-230v-300h300zM976 600h154q30 0 50 -20t20 -50v-460q0 -28 -20 -49t-50 -21h-460q-28 0 -49 21t-21 49v156h-300q-32 0 -53 21t-21 53v300h-156q-28 0 -49 21t-21 49v460q0 30 21 50t49 20h460
                                                  +q30 0 50 -20t20 -50v-154h300q32 0 54 -22t22 -54v-300z" />
                                                  +    <glyph glyph-name="uniE117" unicode="&#xe117;" horiz-adv-x="1300" 
                                                  +d="M1300 1064v-644q0 -62 -43 -106t-105 -44h-452l-356 -250q-28 -22 -33 -18t-5 42v226h-158q-62 0 -105 44t-43 106v644q0 62 43 106t105 44h1004q34 0 66 -16l-142 -100l-142 -112l-194 -170l-176 180l-72 -66q196 -230 276 -346l84 110q236 310 418 460q30 -38 30 -90z
                                                  +" />
                                                  +    <glyph glyph-name="uniE118" unicode="&#xe118;" 
                                                  +d="M664 2q-144 0 -260 78l628 628q72 -156 80 -256q14 -182 -123 -316t-325 -134zM664 1268q26 0 88 -77t132 -195l204 204l112 -110l-1090 -1090l-110 110l222 222q-14 54 -8 120q10 116 104 315t199 350t147 151z" />
                                                  +    <glyph glyph-name="uniE119" unicode="&#xe119;" 
                                                  +d="M1120 820l58 -58q22 -22 0 -44l-556 -556q-22 -22 -44 0l-556 556q-22 22 -2 44l56 58q22 22 44 0l480 -476l476 476q22 22 44 0z" />
                                                  +    <glyph glyph-name="uniE12A" unicode="&#xe12a;" horiz-adv-x="1320" 
                                                  +d="M188 318v60h226v-60h-226zM604 496v-58h-416v58h416zM1226 482l-54 54l-166 -168l-72 74l-54 -54l126 -126zM1052 674q110 0 189 -80t79 -190t-79 -188t-189 -78t-189 78t-79 189t79 190t189 79zM94 138q-38 0 -66 28t-28 68v634q0 40 28 67t66 27h1012q40 0 67 -27
                                                  +t27 -67v-134q-40 22 -94 28v74q0 14 -9 23t-21 9h-950q-32 0 -32 -32v-86h846q-138 -46 -204 -170h-642v-316q0 -30 32 -30h606q30 -56 76 -96h-714z" />
                                                  +    <glyph glyph-name="uniE12B" unicode="&#xe12b;" horiz-adv-x="1280" 
                                                  +d="M353 840q83 0 111 -47t27 -79t-11 -72l2 -2q6 0 12 -15t-6 -49q-8 -12 -16 -14t-14 -34t-30 -52q-4 -6 -4 -26q0 -58 48 -94q-44 -18 -94 -48q-84 -44 -100 -66q-22 -34 -22 -76v-166h-256q2 212 17 236q25 39 149 86q64 28 88 55t24 58t-6 41q-24 36 -27 59t-19 29
                                                  +q-18 0 -16 36t8 42l-6 66q0 44 29 88t112 44zM820 984h4q68 0 101 -24t35 -24q56 -61 47 -141q-5 -45 -13 -81q11 -7 16 -14q10 -40 -1 -63t-19 -27q-16 -4 -18 -24q-10 -30 -12 -40t-15 -27t-15 -25q-12 -16 -12 -36q0 -101 119 -151q55 -23 57 -23l20 -10q62 -26 112 -56
                                                  +q54 -28 54 -68v-150h-896v124q0 66 52 94l140 74q84 36 118 72t34 94q0 20 -7 29t-12 18t-10 14t-17 33q-6 30 -6 34q-4 20 -22 24q-8 4 -19 27t-1 63l10 10l6 4q-8 36 -13 82q-9 82 51 142q54 46 132 46z" />
                                                  +    <glyph glyph-name="unbenannt" 
                                                  + />
                                                  +  </font>
                                                  +</defs></svg>
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/font/conceptboarddingbats-regular-webfont.ttf b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/font/conceptboarddingbats-regular-webfont.ttf
                                                  new file mode 100644
                                                  index 00000000..ba2ebfc3
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/font/conceptboarddingbats-regular-webfont.ttf differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/font/conceptboarddingbats-regular-webfont.woff b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/font/conceptboarddingbats-regular-webfont.woff
                                                  new file mode 100644
                                                  index 00000000..bdc296ba
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/font/conceptboarddingbats-regular-webfont.woff differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/noise-dark_195x195.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/noise-dark_195x195.png
                                                  new file mode 100644
                                                  index 00000000..fa405f42
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/noise-dark_195x195.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/process.chart.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/process.chart.png
                                                  new file mode 100644
                                                  index 00000000..4051cff4
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/process.chart.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/process.list.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/process.list.png
                                                  new file mode 100644
                                                  index 00000000..725f171e
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/process.list.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/process.org.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/process.org.png
                                                  new file mode 100644
                                                  index 00000000..e19590cb
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/process.org.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/process.tree.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/process.tree.png
                                                  new file mode 100644
                                                  index 00000000..311b0156
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/process.tree.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/star.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/star.png
                                                  new file mode 100644
                                                  index 00000000..dfecc37f
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/img/star.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/index.html b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/index.html
                                                  new file mode 100644
                                                  index 00000000..a04674d5
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/index.html
                                                  @@ -0,0 +1,93 @@
                                                  +<!doctype html>
                                                  +<html lang="en">
                                                  +<head>
                                                  +	<meta charset="UTF-8">
                                                  +	<title>Document</title>
                                                  +	<link rel="stylesheet" type='text/css' href="css/coe.font.css">
                                                  +	<link rel="stylesheet" href="css/contentpane.css">
                                                  +	
                                                  +</head>
                                                  +<body>
                                                  +		<div class="toolbar">
                                                  +						<span style="font-size: 15px;margin-left: 2px; color: #222;  float:left">全部流程资产(<span id="count">17</span>)</span>
                                                  +						<span class="icons-group right">
                                                  +						    <span title="平铺" class="button2 current square clean"><i class="icon-tiles"></i></span>
                                                  +						    <span title="流式" class="button2 default square clean"><i class="icon-lists"></i></span>
                                                  +						</span>
                                                  +	</div>
                                                  +	<div class="main">
                                                  +	<ul class="layout-tile">
                                                  +		<li>	
                                                  +			<span class="entity">
                                                  +				<i class="mark" title="已标记"></i>
                                                  +				<div wsuuid="c2451ee52e016c4835fb434369471d0f" title="单击打开">
                                                  +					<img src="demo/img/1.png">
                                                  +				</div>
                                                  +				<ul class="affiliate">
                                                  +					<li class="title">AAA</li>
                                                  +					<li class="attr"><span>desc 测试 流程架构</span></li>
                                                  +					<li class="icons">
                                                  +						<div>
                                                  +							<span class="processBtn" onclick="">
                                                  +								<img title="设置" src="img/tools.png">
                                                  +							</span>
                                                  +							<span class="processBtn" onclick="">
                                                  +								<img title="停用" src="img/switch.png">
                                                  +							</span>
                                                  +							<span class="processBtn" onclick="">
                                                  +								<img title="导出" src="img/import.png">
                                                  +							</span>
                                                  +						</div>
                                                  +						<div>
                                                  +							<span class="processBtn">
                                                  +								<img title="流程分级" src="img/process.tree.png">
                                                  +							</span>
                                                  +							<span class="processBtn">
                                                  +								<img title="流程清单" src="img/process.list.png">
                                                  +							</span>
                                                  +							<span class="processBtn">
                                                  +								<img title="统计分析" src="img/process.chart.png">
                                                  +							</span>
                                                  +							<span class="processBtn disable">
                                                  +								<img title="流程办公室" src="img/process.org.png">
                                                  +							</span>
                                                  +						</div>
                                                  +					</li>
                                                  +				</ul>
                                                  +			</span>
                                                  +		</li>
                                                  +		<li>	
                                                  +			<span class="entity ">
                                                  +				<i class="assign" title="已分配"></i>
                                                  +				<div wsuuid="c2451ee52e016c4835fb434369471d0f" title="单击打开">
                                                  +					<img src="demo/img/1.png">
                                                  +				</div>
                                                  +				<ul class="affiliate">
                                                  +					<li class="title">AAA</li>
                                                  +					<li class="attr"><span>desc 测试 流程架构</span></li>
                                                  +					<li class="icons">
                                                  +						<div>
                                                  +							<span class="processBtn">
                                                  +								<img title="流程分级" src="img/process.tree.png">
                                                  +							</span>
                                                  +							<span class="processBtn">
                                                  +								<img title="流程清单" src="img/process.list.png">
                                                  +							</span>
                                                  +							<span class="processBtn">
                                                  +								<img title="统计分析" src="img/process.chart.png">
                                                  +							</span>
                                                  +							<span class="processBtn disable">
                                                  +								<img title="流程办公室" src="img/process.org.png">
                                                  +							</span>
                                                  +						</div>
                                                  +					</li>
                                                  +				</ul>
                                                  +			</span>
                                                  +		</li>
                                                  +	</ul>
                                                  +
                                                  +</div>
                                                  +	<script src="../../../../commons/js/jquery/scripts/jquery.js"></script>
                                                  +	<script src="js/contentpane.js"></script>
                                                  +</body>
                                                  +</html>
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/js/contentpane.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/js/contentpane.js
                                                  new file mode 100644
                                                  index 00000000..ac757837
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/js/contentpane.js
                                                  @@ -0,0 +1,55 @@
                                                  +jQuery(function(){
                                                  +    pane.initLayoutBtn();//初始化布局按钮
                                                  +});
                                                  +function getCookie (cookieName) {
                                                  +    if(document.cookie!=''){
                                                  +        var cookieNames = document.cookie.split(';');
                                                  +        for(i=0;i<cookieNames.length;i++){
                                                  +            if(cookieNames[i].indexOf(cookieName)>-1){
                                                  +                return unescape(cookieNames[i].split('=')[1]);
                                                  +            }
                                                  +        }
                                                  +    }
                                                  +}
                                                  +/**
                                                  +  设置Cookie
                                                  +*/
                                                  +function setCookie (cookieName, cookieValue, expires, path, domain, secure) {
                                                  +    var Days = 30;  
                                                  +    var exp = new Date();   
                                                  +    exp.setTime(exp.getTime() + Days*24*60*60*1000);  
                                                  +    document.cookie = cookieName + "="+ escape (cookieValue) + ";expires=" + exp.toGMTString();  
                                                  +}
                                                  +
                                                  +var pane={
                                                  +    initLayoutBtn : function() {
                                                  +		$(".icons-group span").on("click.icon", function() {
                                                  +			var $self = $(this), TILECONST = "icon-tiles", call, isCurrent = $self
                                                  +					.attr("class").indexOf("current") != -1, isTile = $self
                                                  +					.children("i").attr("class") == TILECONST;
                                                  +			if (isCurrent) {
                                                  +				return;
                                                  +			}
                                                  +			$self.removeClass("default").addClass("current").siblings()
                                                  +					.removeClass("current").addClass("default");
                                                  +			call = isTile ? pane.tilelayout : pane.listlayout;
                                                  +			call();
                                                  +		});
                                                  +		//判定cookie中保存的显示格式
                                                  +		var icon_style = getCookie("icon_style");
                                                  +		if(icon_style == "list") {
                                                  +			$(".icons-group span i.icon-lists").click();
                                                  +		} else {
                                                  +			$(".icons-group span i.icon-tiles").click();
                                                  +		}
                                                  +		$("#ayoutContent").show();
                                                  +	},
                                                  +	listlayout : function() {
                                                  +		$(".main > ul").removeClass("layout-tile").addClass("layout-list");
                                                  +		setCookie("icon_style", "list");
                                                  +	},
                                                  +	tilelayout : function() {
                                                  +		$(".main > ul").removeClass("layout-list").addClass("layout-tile");
                                                  +		setCookie("icon_style", "tile");
                                                  +	}
                                                  +};
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/css/font-awesome-ie7.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/css/font-awesome-ie7.css
                                                  new file mode 100644
                                                  index 00000000..507ebeb3
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/css/font-awesome-ie7.css
                                                  @@ -0,0 +1,1203 @@
                                                  +/*!
                                                  + *  Font Awesome 3.2.1
                                                  + *  the iconic font designed for Bootstrap
                                                  + *  ------------------------------------------------------------------------------
                                                  + *  The full suite of pictographic icons, examples, and documentation can be
                                                  + *  found at http://fontawesome.io.  Stay up to date on Twitter at
                                                  + *  http://twitter.com/fontawesome.
                                                  + *
                                                  + *  License
                                                  + *  ------------------------------------------------------------------------------
                                                  + *  - The Font Awesome font is licensed under SIL OFL 1.1 -
                                                  + *    http://scripts.sil.org/OFL
                                                  + *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -
                                                  + *    http://opensource.org/licenses/mit-license.html
                                                  + *  - Font Awesome documentation licensed under CC BY 3.0 -
                                                  + *    http://creativecommons.org/licenses/by/3.0/
                                                  + *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
                                                  + *    "Font Awesome by Dave Gandy - http://fontawesome.io"
                                                  + *
                                                  + *  Author - Dave Gandy
                                                  + *  ------------------------------------------------------------------------------
                                                  + *  Email: dave@fontawesome.io
                                                  + *  Twitter: http://twitter.com/byscuits
                                                  + *  Work: Lead Product Designer @ Kyruus - http://kyruus.com
                                                  + */
                                                  +.icon-large {
                                                  +  font-size: 1.3333333333333333em;
                                                  +  margin-top: -4px;
                                                  +  padding-top: 3px;
                                                  +  margin-bottom: -4px;
                                                  +  padding-bottom: 3px;
                                                  +  vertical-align: middle;
                                                  +}
                                                  +.nav [class^="icon-"],
                                                  +.nav [class*=" icon-"] {
                                                  +  vertical-align: inherit;
                                                  +  margin-top: -4px;
                                                  +  padding-top: 3px;
                                                  +  margin-bottom: -4px;
                                                  +  padding-bottom: 3px;
                                                  +}
                                                  +.nav [class^="icon-"].icon-large,
                                                  +.nav [class*=" icon-"].icon-large {
                                                  +  vertical-align: -25%;
                                                  +}
                                                  +.nav-pills [class^="icon-"].icon-large,
                                                  +.nav-tabs [class^="icon-"].icon-large,
                                                  +.nav-pills [class*=" icon-"].icon-large,
                                                  +.nav-tabs [class*=" icon-"].icon-large {
                                                  +  line-height: .75em;
                                                  +  margin-top: -7px;
                                                  +  padding-top: 5px;
                                                  +  margin-bottom: -5px;
                                                  +  padding-bottom: 4px;
                                                  +}
                                                  +.btn [class^="icon-"].pull-left,
                                                  +.btn [class*=" icon-"].pull-left,
                                                  +.btn [class^="icon-"].pull-right,
                                                  +.btn [class*=" icon-"].pull-right {
                                                  +  vertical-align: inherit;
                                                  +}
                                                  +.btn [class^="icon-"].icon-large,
                                                  +.btn [class*=" icon-"].icon-large {
                                                  +  margin-top: -0.5em;
                                                  +}
                                                  +a [class^="icon-"],
                                                  +a [class*=" icon-"] {
                                                  +  cursor: pointer;
                                                  +}
                                                  +.icon-glass {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf000;');
                                                  +}
                                                  +.icon-music {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf001;');
                                                  +}
                                                  +.icon-search {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf002;');
                                                  +}
                                                  +.icon-envelope-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf003;');
                                                  +}
                                                  +.icon-heart {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf004;');
                                                  +}
                                                  +.icon-star {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf005;');
                                                  +}
                                                  +.icon-star-empty {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf006;');
                                                  +}
                                                  +.icon-user {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf007;');
                                                  +}
                                                  +.icon-film {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf008;');
                                                  +}
                                                  +.icon-th-large {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf009;');
                                                  +}
                                                  +.icon-th {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00a;');
                                                  +}
                                                  +.icon-th-list {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00b;');
                                                  +}
                                                  +.icon-ok {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00c;');
                                                  +}
                                                  +.icon-remove {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00d;');
                                                  +}
                                                  +.icon-zoom-in {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00e;');
                                                  +}
                                                  +.icon-zoom-out {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf010;');
                                                  +}
                                                  +.icon-off {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf011;');
                                                  +}
                                                  +.icon-power-off {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf011;');
                                                  +}
                                                  +.icon-signal {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf012;');
                                                  +}
                                                  +.icon-cog {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf013;');
                                                  +}
                                                  +.icon-gear {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf013;');
                                                  +}
                                                  +.icon-trash {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf014;');
                                                  +}
                                                  +.icon-home {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf015;');
                                                  +}
                                                  +.icon-file-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf016;');
                                                  +}
                                                  +.icon-time {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf017;');
                                                  +}
                                                  +.icon-road {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf018;');
                                                  +}
                                                  +.icon-download-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf019;');
                                                  +}
                                                  +.icon-download {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01a;');
                                                  +}
                                                  +.icon-upload {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01b;');
                                                  +}
                                                  +.icon-inbox {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01c;');
                                                  +}
                                                  +.icon-play-circle {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01d;');
                                                  +}
                                                  +.icon-repeat {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01e;');
                                                  +}
                                                  +.icon-rotate-right {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01e;');
                                                  +}
                                                  +.icon-refresh {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf021;');
                                                  +}
                                                  +.icon-list-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf022;');
                                                  +}
                                                  +.icon-lock {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf023;');
                                                  +}
                                                  +.icon-flag {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf024;');
                                                  +}
                                                  +.icon-headphones {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf025;');
                                                  +}
                                                  +.icon-volume-off {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf026;');
                                                  +}
                                                  +.icon-volume-down {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf027;');
                                                  +}
                                                  +.icon-volume-up {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf028;');
                                                  +}
                                                  +.icon-qrcode {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf029;');
                                                  +}
                                                  +.icon-barcode {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02a;');
                                                  +}
                                                  +.icon-tag {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02b;');
                                                  +}
                                                  +.icon-tags {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02c;');
                                                  +}
                                                  +.icon-book {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02d;');
                                                  +}
                                                  +.icon-bookmark {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02e;');
                                                  +}
                                                  +.icon-print {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02f;');
                                                  +}
                                                  +.icon-camera {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf030;');
                                                  +}
                                                  +.icon-font {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf031;');
                                                  +}
                                                  +.icon-bold {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf032;');
                                                  +}
                                                  +.icon-italic {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf033;');
                                                  +}
                                                  +.icon-text-height {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf034;');
                                                  +}
                                                  +.icon-text-width {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf035;');
                                                  +}
                                                  +.icon-align-left {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf036;');
                                                  +}
                                                  +.icon-align-center {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf037;');
                                                  +}
                                                  +.icon-align-right {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf038;');
                                                  +}
                                                  +.icon-align-justify {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf039;');
                                                  +}
                                                  +.icon-list {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03a;');
                                                  +}
                                                  +.icon-indent-left {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03b;');
                                                  +}
                                                  +.icon-indent-right {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03c;');
                                                  +}
                                                  +.icon-facetime-video {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03d;');
                                                  +}
                                                  +.icon-picture {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03e;');
                                                  +}
                                                  +.icon-pencil {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf040;');
                                                  +}
                                                  +.icon-map-marker {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf041;');
                                                  +}
                                                  +.icon-adjust {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf042;');
                                                  +}
                                                  +.icon-tint {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf043;');
                                                  +}
                                                  +.icon-edit {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf044;');
                                                  +}
                                                  +.icon-share {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf045;');
                                                  +}
                                                  +.icon-check {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf046;');
                                                  +}
                                                  +.icon-move {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf047;');
                                                  +}
                                                  +.icon-step-backward {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf048;');
                                                  +}
                                                  +.icon-fast-backward {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf049;');
                                                  +}
                                                  +.icon-backward {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04a;');
                                                  +}
                                                  +.icon-play {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04b;');
                                                  +}
                                                  +.icon-pause {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04c;');
                                                  +}
                                                  +.icon-stop {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04d;');
                                                  +}
                                                  +.icon-forward {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04e;');
                                                  +}
                                                  +.icon-fast-forward {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf050;');
                                                  +}
                                                  +.icon-step-forward {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf051;');
                                                  +}
                                                  +.icon-eject {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf052;');
                                                  +}
                                                  +.icon-chevron-left {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf053;');
                                                  +}
                                                  +.icon-chevron-right {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf054;');
                                                  +}
                                                  +.icon-plus-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf055;');
                                                  +}
                                                  +.icon-minus-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf056;');
                                                  +}
                                                  +.icon-remove-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf057;');
                                                  +}
                                                  +.icon-ok-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf058;');
                                                  +}
                                                  +.icon-question-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf059;');
                                                  +}
                                                  +.icon-info-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05a;');
                                                  +}
                                                  +.icon-screenshot {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05b;');
                                                  +}
                                                  +.icon-remove-circle {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05c;');
                                                  +}
                                                  +.icon-ok-circle {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05d;');
                                                  +}
                                                  +.icon-ban-circle {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05e;');
                                                  +}
                                                  +.icon-arrow-left {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf060;');
                                                  +}
                                                  +.icon-arrow-right {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf061;');
                                                  +}
                                                  +.icon-arrow-up {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf062;');
                                                  +}
                                                  +.icon-arrow-down {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf063;');
                                                  +}
                                                  +.icon-share-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf064;');
                                                  +}
                                                  +.icon-mail-forward {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf064;');
                                                  +}
                                                  +.icon-resize-full {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf065;');
                                                  +}
                                                  +.icon-resize-small {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf066;');
                                                  +}
                                                  +.icon-plus {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf067;');
                                                  +}
                                                  +.icon-minus {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf068;');
                                                  +}
                                                  +.icon-asterisk {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf069;');
                                                  +}
                                                  +.icon-exclamation-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06a;');
                                                  +}
                                                  +.icon-gift {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06b;');
                                                  +}
                                                  +.icon-leaf {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06c;');
                                                  +}
                                                  +.icon-fire {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06d;');
                                                  +}
                                                  +.icon-eye-open {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06e;');
                                                  +}
                                                  +.icon-eye-close {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf070;');
                                                  +}
                                                  +.icon-warning-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf071;');
                                                  +}
                                                  +.icon-plane {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf072;');
                                                  +}
                                                  +.icon-calendar {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf073;');
                                                  +}
                                                  +.icon-random {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf074;');
                                                  +}
                                                  +.icon-comment {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf075;');
                                                  +}
                                                  +.icon-magnet {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf076;');
                                                  +}
                                                  +.icon-chevron-up {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf077;');
                                                  +}
                                                  +.icon-chevron-down {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf078;');
                                                  +}
                                                  +.icon-retweet {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf079;');
                                                  +}
                                                  +.icon-shopping-cart {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07a;');
                                                  +}
                                                  +.icon-folder-close {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07b;');
                                                  +}
                                                  +.icon-folder-open {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07c;');
                                                  +}
                                                  +.icon-resize-vertical {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07d;');
                                                  +}
                                                  +.icon-resize-horizontal {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07e;');
                                                  +}
                                                  +.icon-bar-chart {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf080;');
                                                  +}
                                                  +.icon-twitter-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf081;');
                                                  +}
                                                  +.icon-facebook-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf082;');
                                                  +}
                                                  +.icon-camera-retro {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf083;');
                                                  +}
                                                  +.icon-key {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf084;');
                                                  +}
                                                  +.icon-cogs {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf085;');
                                                  +}
                                                  +.icon-gears {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf085;');
                                                  +}
                                                  +.icon-comments {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf086;');
                                                  +}
                                                  +.icon-thumbs-up-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf087;');
                                                  +}
                                                  +.icon-thumbs-down-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf088;');
                                                  +}
                                                  +.icon-star-half {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf089;');
                                                  +}
                                                  +.icon-heart-empty {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08a;');
                                                  +}
                                                  +.icon-signout {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08b;');
                                                  +}
                                                  +.icon-linkedin-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08c;');
                                                  +}
                                                  +.icon-pushpin {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08d;');
                                                  +}
                                                  +.icon-external-link {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08e;');
                                                  +}
                                                  +.icon-signin {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf090;');
                                                  +}
                                                  +.icon-trophy {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf091;');
                                                  +}
                                                  +.icon-github-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf092;');
                                                  +}
                                                  +.icon-upload-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf093;');
                                                  +}
                                                  +.icon-lemon {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf094;');
                                                  +}
                                                  +.icon-phone {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf095;');
                                                  +}
                                                  +.icon-check-empty {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf096;');
                                                  +}
                                                  +.icon-unchecked {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf096;');
                                                  +}
                                                  +.icon-bookmark-empty {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf097;');
                                                  +}
                                                  +.icon-phone-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf098;');
                                                  +}
                                                  +.icon-twitter {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf099;');
                                                  +}
                                                  +.icon-facebook {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09a;');
                                                  +}
                                                  +.icon-github {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09b;');
                                                  +}
                                                  +.icon-unlock {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09c;');
                                                  +}
                                                  +.icon-credit-card {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09d;');
                                                  +}
                                                  +.icon-rss {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09e;');
                                                  +}
                                                  +.icon-hdd {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a0;');
                                                  +}
                                                  +.icon-bullhorn {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a1;');
                                                  +}
                                                  +.icon-bell {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a2;');
                                                  +}
                                                  +.icon-certificate {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a3;');
                                                  +}
                                                  +.icon-hand-right {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a4;');
                                                  +}
                                                  +.icon-hand-left {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a5;');
                                                  +}
                                                  +.icon-hand-up {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a6;');
                                                  +}
                                                  +.icon-hand-down {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a7;');
                                                  +}
                                                  +.icon-circle-arrow-left {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a8;');
                                                  +}
                                                  +.icon-circle-arrow-right {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a9;');
                                                  +}
                                                  +.icon-circle-arrow-up {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0aa;');
                                                  +}
                                                  +.icon-circle-arrow-down {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ab;');
                                                  +}
                                                  +.icon-globe {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ac;');
                                                  +}
                                                  +.icon-wrench {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ad;');
                                                  +}
                                                  +.icon-tasks {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ae;');
                                                  +}
                                                  +.icon-filter {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b0;');
                                                  +}
                                                  +.icon-briefcase {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b1;');
                                                  +}
                                                  +.icon-fullscreen {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b2;');
                                                  +}
                                                  +.icon-group {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c0;');
                                                  +}
                                                  +.icon-link {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c1;');
                                                  +}
                                                  +.icon-cloud {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c2;');
                                                  +}
                                                  +.icon-beaker {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c3;');
                                                  +}
                                                  +.icon-cut {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c4;');
                                                  +}
                                                  +.icon-copy {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c5;');
                                                  +}
                                                  +.icon-paper-clip {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c6;');
                                                  +}
                                                  +.icon-paperclip {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c6;');
                                                  +}
                                                  +.icon-save {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c7;');
                                                  +}
                                                  +.icon-sign-blank {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c8;');
                                                  +}
                                                  +.icon-reorder {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c9;');
                                                  +}
                                                  +.icon-list-ul {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ca;');
                                                  +}
                                                  +.icon-list-ol {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cb;');
                                                  +}
                                                  +.icon-strikethrough {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cc;');
                                                  +}
                                                  +.icon-underline {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cd;');
                                                  +}
                                                  +.icon-table {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ce;');
                                                  +}
                                                  +.icon-magic {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d0;');
                                                  +}
                                                  +.icon-truck {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d1;');
                                                  +}
                                                  +.icon-pinterest {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d2;');
                                                  +}
                                                  +.icon-pinterest-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d3;');
                                                  +}
                                                  +.icon-google-plus-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d4;');
                                                  +}
                                                  +.icon-google-plus {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d5;');
                                                  +}
                                                  +.icon-money {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d6;');
                                                  +}
                                                  +.icon-caret-down {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d7;');
                                                  +}
                                                  +.icon-caret-up {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d8;');
                                                  +}
                                                  +.icon-caret-left {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d9;');
                                                  +}
                                                  +.icon-caret-right {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0da;');
                                                  +}
                                                  +.icon-columns {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0db;');
                                                  +}
                                                  +.icon-sort {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dc;');
                                                  +}
                                                  +.icon-sort-down {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dd;');
                                                  +}
                                                  +.icon-sort-up {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0de;');
                                                  +}
                                                  +.icon-envelope {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e0;');
                                                  +}
                                                  +.icon-linkedin {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e1;');
                                                  +}
                                                  +.icon-undo {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e2;');
                                                  +}
                                                  +.icon-rotate-left {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e2;');
                                                  +}
                                                  +.icon-legal {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e3;');
                                                  +}
                                                  +.icon-dashboard {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e4;');
                                                  +}
                                                  +.icon-comment-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e5;');
                                                  +}
                                                  +.icon-comments-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e6;');
                                                  +}
                                                  +.icon-bolt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e7;');
                                                  +}
                                                  +.icon-sitemap {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e8;');
                                                  +}
                                                  +.icon-umbrella {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e9;');
                                                  +}
                                                  +.icon-paste {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ea;');
                                                  +}
                                                  +.icon-lightbulb {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0eb;');
                                                  +}
                                                  +.icon-exchange {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ec;');
                                                  +}
                                                  +.icon-cloud-download {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ed;');
                                                  +}
                                                  +.icon-cloud-upload {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ee;');
                                                  +}
                                                  +.icon-user-md {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f0;');
                                                  +}
                                                  +.icon-stethoscope {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f1;');
                                                  +}
                                                  +.icon-suitcase {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f2;');
                                                  +}
                                                  +.icon-bell-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f3;');
                                                  +}
                                                  +.icon-coffee {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f4;');
                                                  +}
                                                  +.icon-food {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f5;');
                                                  +}
                                                  +.icon-file-text-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f6;');
                                                  +}
                                                  +.icon-building {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f7;');
                                                  +}
                                                  +.icon-hospital {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f8;');
                                                  +}
                                                  +.icon-ambulance {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f9;');
                                                  +}
                                                  +.icon-medkit {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fa;');
                                                  +}
                                                  +.icon-fighter-jet {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fb;');
                                                  +}
                                                  +.icon-beer {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fc;');
                                                  +}
                                                  +.icon-h-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fd;');
                                                  +}
                                                  +.icon-plus-sign-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fe;');
                                                  +}
                                                  +.icon-double-angle-left {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf100;');
                                                  +}
                                                  +.icon-double-angle-right {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf101;');
                                                  +}
                                                  +.icon-double-angle-up {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf102;');
                                                  +}
                                                  +.icon-double-angle-down {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf103;');
                                                  +}
                                                  +.icon-angle-left {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf104;');
                                                  +}
                                                  +.icon-angle-right {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf105;');
                                                  +}
                                                  +.icon-angle-up {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf106;');
                                                  +}
                                                  +.icon-angle-down {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf107;');
                                                  +}
                                                  +.icon-desktop {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf108;');
                                                  +}
                                                  +.icon-laptop {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf109;');
                                                  +}
                                                  +.icon-tablet {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10a;');
                                                  +}
                                                  +.icon-mobile-phone {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10b;');
                                                  +}
                                                  +.icon-circle-blank {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10c;');
                                                  +}
                                                  +.icon-quote-left {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10d;');
                                                  +}
                                                  +.icon-quote-right {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10e;');
                                                  +}
                                                  +.icon-spinner {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf110;');
                                                  +}
                                                  +.icon-circle {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf111;');
                                                  +}
                                                  +.icon-reply {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf112;');
                                                  +}
                                                  +.icon-mail-reply {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf112;');
                                                  +}
                                                  +.icon-github-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf113;');
                                                  +}
                                                  +.icon-folder-close-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf114;');
                                                  +}
                                                  +.icon-folder-open-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf115;');
                                                  +}
                                                  +.icon-expand-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf116;');
                                                  +}
                                                  +.icon-collapse-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf117;');
                                                  +}
                                                  +.icon-smile {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf118;');
                                                  +}
                                                  +.icon-frown {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf119;');
                                                  +}
                                                  +.icon-meh {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11a;');
                                                  +}
                                                  +.icon-gamepad {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11b;');
                                                  +}
                                                  +.icon-keyboard {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11c;');
                                                  +}
                                                  +.icon-flag-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11d;');
                                                  +}
                                                  +.icon-flag-checkered {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11e;');
                                                  +}
                                                  +.icon-terminal {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf120;');
                                                  +}
                                                  +.icon-code {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf121;');
                                                  +}
                                                  +.icon-reply-all {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf122;');
                                                  +}
                                                  +.icon-mail-reply-all {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf122;');
                                                  +}
                                                  +.icon-star-half-empty {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf123;');
                                                  +}
                                                  +.icon-star-half-full {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf123;');
                                                  +}
                                                  +.icon-location-arrow {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf124;');
                                                  +}
                                                  +.icon-crop {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf125;');
                                                  +}
                                                  +.icon-code-fork {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf126;');
                                                  +}
                                                  +.icon-unlink {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf127;');
                                                  +}
                                                  +.icon-question {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf128;');
                                                  +}
                                                  +.icon-info {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf129;');
                                                  +}
                                                  +.icon-exclamation {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12a;');
                                                  +}
                                                  +.icon-superscript {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12b;');
                                                  +}
                                                  +.icon-subscript {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12c;');
                                                  +}
                                                  +.icon-eraser {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12d;');
                                                  +}
                                                  +.icon-puzzle-piece {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12e;');
                                                  +}
                                                  +.icon-microphone {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf130;');
                                                  +}
                                                  +.icon-microphone-off {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf131;');
                                                  +}
                                                  +.icon-shield {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf132;');
                                                  +}
                                                  +.icon-calendar-empty {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf133;');
                                                  +}
                                                  +.icon-fire-extinguisher {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf134;');
                                                  +}
                                                  +.icon-rocket {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf135;');
                                                  +}
                                                  +.icon-maxcdn {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf136;');
                                                  +}
                                                  +.icon-chevron-sign-left {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf137;');
                                                  +}
                                                  +.icon-chevron-sign-right {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf138;');
                                                  +}
                                                  +.icon-chevron-sign-up {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf139;');
                                                  +}
                                                  +.icon-chevron-sign-down {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13a;');
                                                  +}
                                                  +.icon-html5 {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13b;');
                                                  +}
                                                  +.icon-css3 {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13c;');
                                                  +}
                                                  +.icon-anchor {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13d;');
                                                  +}
                                                  +.icon-unlock-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13e;');
                                                  +}
                                                  +.icon-bullseye {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf140;');
                                                  +}
                                                  +.icon-ellipsis-horizontal {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf141;');
                                                  +}
                                                  +.icon-ellipsis-vertical {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf142;');
                                                  +}
                                                  +.icon-rss-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf143;');
                                                  +}
                                                  +.icon-play-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf144;');
                                                  +}
                                                  +.icon-ticket {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf145;');
                                                  +}
                                                  +.icon-minus-sign-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf146;');
                                                  +}
                                                  +.icon-check-minus {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf147;');
                                                  +}
                                                  +.icon-level-up {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf148;');
                                                  +}
                                                  +.icon-level-down {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf149;');
                                                  +}
                                                  +.icon-check-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14a;');
                                                  +}
                                                  +.icon-edit-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14b;');
                                                  +}
                                                  +.icon-external-link-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14c;');
                                                  +}
                                                  +.icon-share-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14d;');
                                                  +}
                                                  +.icon-compass {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14e;');
                                                  +}
                                                  +.icon-collapse {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf150;');
                                                  +}
                                                  +.icon-collapse-top {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf151;');
                                                  +}
                                                  +.icon-expand {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf152;');
                                                  +}
                                                  +.icon-eur {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf153;');
                                                  +}
                                                  +.icon-euro {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf153;');
                                                  +}
                                                  +.icon-gbp {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf154;');
                                                  +}
                                                  +.icon-usd {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf155;');
                                                  +}
                                                  +.icon-dollar {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf155;');
                                                  +}
                                                  +.icon-inr {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf156;');
                                                  +}
                                                  +.icon-rupee {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf156;');
                                                  +}
                                                  +.icon-jpy {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf157;');
                                                  +}
                                                  +.icon-yen {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf157;');
                                                  +}
                                                  +.icon-cny {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf158;');
                                                  +}
                                                  +.icon-renminbi {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf158;');
                                                  +}
                                                  +.icon-krw {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf159;');
                                                  +}
                                                  +.icon-won {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf159;');
                                                  +}
                                                  +.icon-btc {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15a;');
                                                  +}
                                                  +.icon-bitcoin {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15a;');
                                                  +}
                                                  +.icon-file {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15b;');
                                                  +}
                                                  +.icon-file-text {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15c;');
                                                  +}
                                                  +.icon-sort-by-alphabet {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15d;');
                                                  +}
                                                  +.icon-sort-by-alphabet-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15e;');
                                                  +}
                                                  +.icon-sort-by-attributes {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf160;');
                                                  +}
                                                  +.icon-sort-by-attributes-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf161;');
                                                  +}
                                                  +.icon-sort-by-order {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf162;');
                                                  +}
                                                  +.icon-sort-by-order-alt {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf163;');
                                                  +}
                                                  +.icon-thumbs-up {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf164;');
                                                  +}
                                                  +.icon-thumbs-down {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf165;');
                                                  +}
                                                  +.icon-youtube-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf166;');
                                                  +}
                                                  +.icon-youtube {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf167;');
                                                  +}
                                                  +.icon-xing {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf168;');
                                                  +}
                                                  +.icon-xing-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf169;');
                                                  +}
                                                  +.icon-youtube-play {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16a;');
                                                  +}
                                                  +.icon-dropbox {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16b;');
                                                  +}
                                                  +.icon-stackexchange {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16c;');
                                                  +}
                                                  +.icon-instagram {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16d;');
                                                  +}
                                                  +.icon-flickr {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16e;');
                                                  +}
                                                  +.icon-adn {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf170;');
                                                  +}
                                                  +.icon-bitbucket {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf171;');
                                                  +}
                                                  +.icon-bitbucket-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf172;');
                                                  +}
                                                  +.icon-tumblr {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf173;');
                                                  +}
                                                  +.icon-tumblr-sign {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf174;');
                                                  +}
                                                  +.icon-long-arrow-down {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf175;');
                                                  +}
                                                  +.icon-long-arrow-up {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf176;');
                                                  +}
                                                  +.icon-long-arrow-left {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf177;');
                                                  +}
                                                  +.icon-long-arrow-right {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf178;');
                                                  +}
                                                  +.icon-apple {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf179;');
                                                  +}
                                                  +.icon-windows {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17a;');
                                                  +}
                                                  +.icon-android {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17b;');
                                                  +}
                                                  +.icon-linux {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17c;');
                                                  +}
                                                  +.icon-dribbble {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17d;');
                                                  +}
                                                  +.icon-skype {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17e;');
                                                  +}
                                                  +.icon-foursquare {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf180;');
                                                  +}
                                                  +.icon-trello {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf181;');
                                                  +}
                                                  +.icon-female {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf182;');
                                                  +}
                                                  +.icon-male {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf183;');
                                                  +}
                                                  +.icon-gittip {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf184;');
                                                  +}
                                                  +.icon-sun {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf185;');
                                                  +}
                                                  +.icon-moon {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf186;');
                                                  +}
                                                  +.icon-archive {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf187;');
                                                  +}
                                                  +.icon-bug {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf188;');
                                                  +}
                                                  +.icon-vk {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf189;');
                                                  +}
                                                  +.icon-weibo {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf18a;');
                                                  +}
                                                  +.icon-renren {
                                                  +  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf18b;');
                                                  +}
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/css/font-awesome-ie7.min.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/css/font-awesome-ie7.min.css
                                                  new file mode 100644
                                                  index 00000000..d3dae63b
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/css/font-awesome-ie7.min.css
                                                  @@ -0,0 +1,384 @@
                                                  +.icon-large{font-size:1.3333333333333333em;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;vertical-align:middle;}
                                                  +.nav [class^="icon-"],.nav [class*=" icon-"]{vertical-align:inherit;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;}.nav [class^="icon-"].icon-large,.nav [class*=" icon-"].icon-large{vertical-align:-25%;}
                                                  +.nav-pills [class^="icon-"].icon-large,.nav-tabs [class^="icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large{line-height:.75em;margin-top:-7px;padding-top:5px;margin-bottom:-5px;padding-bottom:4px;}
                                                  +.btn [class^="icon-"].pull-left,.btn [class*=" icon-"].pull-left,.btn [class^="icon-"].pull-right,.btn [class*=" icon-"].pull-right{vertical-align:inherit;}
                                                  +.btn [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large{margin-top:-0.5em;}
                                                  +a [class^="icon-"],a [class*=" icon-"]{cursor:pointer;}
                                                  +.icon-glass{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf000;');}
                                                  +.icon-music{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf001;');}
                                                  +.icon-search{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf002;');}
                                                  +.icon-envelope-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf003;');}
                                                  +.icon-heart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf004;');}
                                                  +.icon-star{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf005;');}
                                                  +.icon-star-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf006;');}
                                                  +.icon-user{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf007;');}
                                                  +.icon-film{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf008;');}
                                                  +.icon-th-large{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf009;');}
                                                  +.icon-th{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00a;');}
                                                  +.icon-th-list{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00b;');}
                                                  +.icon-ok{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00c;');}
                                                  +.icon-remove{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00d;');}
                                                  +.icon-zoom-in{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00e;');}
                                                  +.icon-zoom-out{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf010;');}
                                                  +.icon-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf011;');}
                                                  +.icon-power-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf011;');}
                                                  +.icon-signal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf012;');}
                                                  +.icon-cog{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf013;');}
                                                  +.icon-gear{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf013;');}
                                                  +.icon-trash{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf014;');}
                                                  +.icon-home{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf015;');}
                                                  +.icon-file-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf016;');}
                                                  +.icon-time{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf017;');}
                                                  +.icon-road{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf018;');}
                                                  +.icon-download-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf019;');}
                                                  +.icon-download{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01a;');}
                                                  +.icon-upload{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01b;');}
                                                  +.icon-inbox{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01c;');}
                                                  +.icon-play-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01d;');}
                                                  +.icon-repeat{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01e;');}
                                                  +.icon-rotate-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01e;');}
                                                  +.icon-refresh{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf021;');}
                                                  +.icon-list-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf022;');}
                                                  +.icon-lock{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf023;');}
                                                  +.icon-flag{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf024;');}
                                                  +.icon-headphones{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf025;');}
                                                  +.icon-volume-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf026;');}
                                                  +.icon-volume-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf027;');}
                                                  +.icon-volume-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf028;');}
                                                  +.icon-qrcode{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf029;');}
                                                  +.icon-barcode{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02a;');}
                                                  +.icon-tag{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02b;');}
                                                  +.icon-tags{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02c;');}
                                                  +.icon-book{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02d;');}
                                                  +.icon-bookmark{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02e;');}
                                                  +.icon-print{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02f;');}
                                                  +.icon-camera{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf030;');}
                                                  +.icon-font{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf031;');}
                                                  +.icon-bold{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf032;');}
                                                  +.icon-italic{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf033;');}
                                                  +.icon-text-height{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf034;');}
                                                  +.icon-text-width{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf035;');}
                                                  +.icon-align-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf036;');}
                                                  +.icon-align-center{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf037;');}
                                                  +.icon-align-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf038;');}
                                                  +.icon-align-justify{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf039;');}
                                                  +.icon-list{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03a;');}
                                                  +.icon-indent-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03b;');}
                                                  +.icon-indent-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03c;');}
                                                  +.icon-facetime-video{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03d;');}
                                                  +.icon-picture{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03e;');}
                                                  +.icon-pencil{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf040;');}
                                                  +.icon-map-marker{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf041;');}
                                                  +.icon-adjust{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf042;');}
                                                  +.icon-tint{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf043;');}
                                                  +.icon-edit{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf044;');}
                                                  +.icon-share{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf045;');}
                                                  +.icon-check{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf046;');}
                                                  +.icon-move{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf047;');}
                                                  +.icon-step-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf048;');}
                                                  +.icon-fast-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf049;');}
                                                  +.icon-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04a;');}
                                                  +.icon-play{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04b;');}
                                                  +.icon-pause{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04c;');}
                                                  +.icon-stop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04d;');}
                                                  +.icon-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04e;');}
                                                  +.icon-fast-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf050;');}
                                                  +.icon-step-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf051;');}
                                                  +.icon-eject{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf052;');}
                                                  +.icon-chevron-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf053;');}
                                                  +.icon-chevron-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf054;');}
                                                  +.icon-plus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf055;');}
                                                  +.icon-minus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf056;');}
                                                  +.icon-remove-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf057;');}
                                                  +.icon-ok-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf058;');}
                                                  +.icon-question-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf059;');}
                                                  +.icon-info-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05a;');}
                                                  +.icon-screenshot{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05b;');}
                                                  +.icon-remove-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05c;');}
                                                  +.icon-ok-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05d;');}
                                                  +.icon-ban-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05e;');}
                                                  +.icon-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf060;');}
                                                  +.icon-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf061;');}
                                                  +.icon-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf062;');}
                                                  +.icon-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf063;');}
                                                  +.icon-share-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf064;');}
                                                  +.icon-mail-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf064;');}
                                                  +.icon-resize-full{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf065;');}
                                                  +.icon-resize-small{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf066;');}
                                                  +.icon-plus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf067;');}
                                                  +.icon-minus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf068;');}
                                                  +.icon-asterisk{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf069;');}
                                                  +.icon-exclamation-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06a;');}
                                                  +.icon-gift{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06b;');}
                                                  +.icon-leaf{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06c;');}
                                                  +.icon-fire{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06d;');}
                                                  +.icon-eye-open{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06e;');}
                                                  +.icon-eye-close{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf070;');}
                                                  +.icon-warning-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf071;');}
                                                  +.icon-plane{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf072;');}
                                                  +.icon-calendar{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf073;');}
                                                  +.icon-random{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf074;');}
                                                  +.icon-comment{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf075;');}
                                                  +.icon-magnet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf076;');}
                                                  +.icon-chevron-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf077;');}
                                                  +.icon-chevron-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf078;');}
                                                  +.icon-retweet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf079;');}
                                                  +.icon-shopping-cart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07a;');}
                                                  +.icon-folder-close{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07b;');}
                                                  +.icon-folder-open{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07c;');}
                                                  +.icon-resize-vertical{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07d;');}
                                                  +.icon-resize-horizontal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07e;');}
                                                  +.icon-bar-chart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf080;');}
                                                  +.icon-twitter-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf081;');}
                                                  +.icon-facebook-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf082;');}
                                                  +.icon-camera-retro{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf083;');}
                                                  +.icon-key{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf084;');}
                                                  +.icon-cogs{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf085;');}
                                                  +.icon-gears{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf085;');}
                                                  +.icon-comments{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf086;');}
                                                  +.icon-thumbs-up-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf087;');}
                                                  +.icon-thumbs-down-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf088;');}
                                                  +.icon-star-half{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf089;');}
                                                  +.icon-heart-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08a;');}
                                                  +.icon-signout{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08b;');}
                                                  +.icon-linkedin-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08c;');}
                                                  +.icon-pushpin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08d;');}
                                                  +.icon-external-link{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08e;');}
                                                  +.icon-signin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf090;');}
                                                  +.icon-trophy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf091;');}
                                                  +.icon-github-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf092;');}
                                                  +.icon-upload-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf093;');}
                                                  +.icon-lemon{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf094;');}
                                                  +.icon-phone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf095;');}
                                                  +.icon-check-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf096;');}
                                                  +.icon-unchecked{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf096;');}
                                                  +.icon-bookmark-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf097;');}
                                                  +.icon-phone-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf098;');}
                                                  +.icon-twitter{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf099;');}
                                                  +.icon-facebook{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09a;');}
                                                  +.icon-github{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09b;');}
                                                  +.icon-unlock{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09c;');}
                                                  +.icon-credit-card{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09d;');}
                                                  +.icon-rss{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09e;');}
                                                  +.icon-hdd{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a0;');}
                                                  +.icon-bullhorn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a1;');}
                                                  +.icon-bell{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a2;');}
                                                  +.icon-certificate{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a3;');}
                                                  +.icon-hand-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a4;');}
                                                  +.icon-hand-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a5;');}
                                                  +.icon-hand-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a6;');}
                                                  +.icon-hand-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a7;');}
                                                  +.icon-circle-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a8;');}
                                                  +.icon-circle-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a9;');}
                                                  +.icon-circle-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0aa;');}
                                                  +.icon-circle-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ab;');}
                                                  +.icon-globe{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ac;');}
                                                  +.icon-wrench{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ad;');}
                                                  +.icon-tasks{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ae;');}
                                                  +.icon-filter{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b0;');}
                                                  +.icon-briefcase{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b1;');}
                                                  +.icon-fullscreen{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b2;');}
                                                  +.icon-group{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c0;');}
                                                  +.icon-link{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c1;');}
                                                  +.icon-cloud{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c2;');}
                                                  +.icon-beaker{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c3;');}
                                                  +.icon-cut{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c4;');}
                                                  +.icon-copy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c5;');}
                                                  +.icon-paper-clip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c6;');}
                                                  +.icon-paperclip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c6;');}
                                                  +.icon-save{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c7;');}
                                                  +.icon-sign-blank{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c8;');}
                                                  +.icon-reorder{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c9;');}
                                                  +.icon-list-ul{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ca;');}
                                                  +.icon-list-ol{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cb;');}
                                                  +.icon-strikethrough{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cc;');}
                                                  +.icon-underline{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cd;');}
                                                  +.icon-table{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ce;');}
                                                  +.icon-magic{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d0;');}
                                                  +.icon-truck{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d1;');}
                                                  +.icon-pinterest{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d2;');}
                                                  +.icon-pinterest-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d3;');}
                                                  +.icon-google-plus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d4;');}
                                                  +.icon-google-plus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d5;');}
                                                  +.icon-money{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d6;');}
                                                  +.icon-caret-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d7;');}
                                                  +.icon-caret-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d8;');}
                                                  +.icon-caret-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d9;');}
                                                  +.icon-caret-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0da;');}
                                                  +.icon-columns{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0db;');}
                                                  +.icon-sort{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dc;');}
                                                  +.icon-sort-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dd;');}
                                                  +.icon-sort-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0de;');}
                                                  +.icon-envelope{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e0;');}
                                                  +.icon-linkedin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e1;');}
                                                  +.icon-undo{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e2;');}
                                                  +.icon-rotate-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e2;');}
                                                  +.icon-legal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e3;');}
                                                  +.icon-dashboard{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e4;');}
                                                  +.icon-comment-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e5;');}
                                                  +.icon-comments-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e6;');}
                                                  +.icon-bolt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e7;');}
                                                  +.icon-sitemap{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e8;');}
                                                  +.icon-umbrella{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e9;');}
                                                  +.icon-paste{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ea;');}
                                                  +.icon-lightbulb{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0eb;');}
                                                  +.icon-exchange{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ec;');}
                                                  +.icon-cloud-download{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ed;');}
                                                  +.icon-cloud-upload{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ee;');}
                                                  +.icon-user-md{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f0;');}
                                                  +.icon-stethoscope{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f1;');}
                                                  +.icon-suitcase{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f2;');}
                                                  +.icon-bell-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f3;');}
                                                  +.icon-coffee{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f4;');}
                                                  +.icon-food{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f5;');}
                                                  +.icon-file-text-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f6;');}
                                                  +.icon-building{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f7;');}
                                                  +.icon-hospital{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f8;');}
                                                  +.icon-ambulance{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f9;');}
                                                  +.icon-medkit{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fa;');}
                                                  +.icon-fighter-jet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fb;');}
                                                  +.icon-beer{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fc;');}
                                                  +.icon-h-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fd;');}
                                                  +.icon-plus-sign-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fe;');}
                                                  +.icon-double-angle-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf100;');}
                                                  +.icon-double-angle-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf101;');}
                                                  +.icon-double-angle-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf102;');}
                                                  +.icon-double-angle-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf103;');}
                                                  +.icon-angle-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf104;');}
                                                  +.icon-angle-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf105;');}
                                                  +.icon-angle-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf106;');}
                                                  +.icon-angle-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf107;');}
                                                  +.icon-desktop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf108;');}
                                                  +.icon-laptop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf109;');}
                                                  +.icon-tablet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10a;');}
                                                  +.icon-mobile-phone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10b;');}
                                                  +.icon-circle-blank{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10c;');}
                                                  +.icon-quote-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10d;');}
                                                  +.icon-quote-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10e;');}
                                                  +.icon-spinner{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf110;');}
                                                  +.icon-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf111;');}
                                                  +.icon-reply{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf112;');}
                                                  +.icon-mail-reply{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf112;');}
                                                  +.icon-github-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf113;');}
                                                  +.icon-folder-close-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf114;');}
                                                  +.icon-folder-open-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf115;');}
                                                  +.icon-expand-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf116;');}
                                                  +.icon-collapse-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf117;');}
                                                  +.icon-smile{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf118;');}
                                                  +.icon-frown{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf119;');}
                                                  +.icon-meh{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11a;');}
                                                  +.icon-gamepad{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11b;');}
                                                  +.icon-keyboard{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11c;');}
                                                  +.icon-flag-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11d;');}
                                                  +.icon-flag-checkered{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11e;');}
                                                  +.icon-terminal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf120;');}
                                                  +.icon-code{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf121;');}
                                                  +.icon-reply-all{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf122;');}
                                                  +.icon-mail-reply-all{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf122;');}
                                                  +.icon-star-half-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf123;');}
                                                  +.icon-star-half-full{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf123;');}
                                                  +.icon-location-arrow{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf124;');}
                                                  +.icon-crop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf125;');}
                                                  +.icon-code-fork{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf126;');}
                                                  +.icon-unlink{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf127;');}
                                                  +.icon-question{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf128;');}
                                                  +.icon-info{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf129;');}
                                                  +.icon-exclamation{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12a;');}
                                                  +.icon-superscript{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12b;');}
                                                  +.icon-subscript{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12c;');}
                                                  +.icon-eraser{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12d;');}
                                                  +.icon-puzzle-piece{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12e;');}
                                                  +.icon-microphone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf130;');}
                                                  +.icon-microphone-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf131;');}
                                                  +.icon-shield{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf132;');}
                                                  +.icon-calendar-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf133;');}
                                                  +.icon-fire-extinguisher{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf134;');}
                                                  +.icon-rocket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf135;');}
                                                  +.icon-maxcdn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf136;');}
                                                  +.icon-chevron-sign-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf137;');}
                                                  +.icon-chevron-sign-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf138;');}
                                                  +.icon-chevron-sign-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf139;');}
                                                  +.icon-chevron-sign-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13a;');}
                                                  +.icon-html5{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13b;');}
                                                  +.icon-css3{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13c;');}
                                                  +.icon-anchor{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13d;');}
                                                  +.icon-unlock-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13e;');}
                                                  +.icon-bullseye{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf140;');}
                                                  +.icon-ellipsis-horizontal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf141;');}
                                                  +.icon-ellipsis-vertical{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf142;');}
                                                  +.icon-rss-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf143;');}
                                                  +.icon-play-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf144;');}
                                                  +.icon-ticket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf145;');}
                                                  +.icon-minus-sign-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf146;');}
                                                  +.icon-check-minus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf147;');}
                                                  +.icon-level-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf148;');}
                                                  +.icon-level-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf149;');}
                                                  +.icon-check-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14a;');}
                                                  +.icon-edit-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14b;');}
                                                  +.icon-external-link-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14c;');}
                                                  +.icon-share-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14d;');}
                                                  +.icon-compass{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14e;');}
                                                  +.icon-collapse{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf150;');}
                                                  +.icon-collapse-top{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf151;');}
                                                  +.icon-expand{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf152;');}
                                                  +.icon-eur{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf153;');}
                                                  +.icon-euro{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf153;');}
                                                  +.icon-gbp{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf154;');}
                                                  +.icon-usd{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf155;');}
                                                  +.icon-dollar{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf155;');}
                                                  +.icon-inr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf156;');}
                                                  +.icon-rupee{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf156;');}
                                                  +.icon-jpy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf157;');}
                                                  +.icon-yen{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf157;');}
                                                  +.icon-cny{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf158;');}
                                                  +.icon-renminbi{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf158;');}
                                                  +.icon-krw{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf159;');}
                                                  +.icon-won{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf159;');}
                                                  +.icon-btc{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15a;');}
                                                  +.icon-bitcoin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15a;');}
                                                  +.icon-file{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15b;');}
                                                  +.icon-file-text{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15c;');}
                                                  +.icon-sort-by-alphabet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15d;');}
                                                  +.icon-sort-by-alphabet-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15e;');}
                                                  +.icon-sort-by-attributes{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf160;');}
                                                  +.icon-sort-by-attributes-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf161;');}
                                                  +.icon-sort-by-order{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf162;');}
                                                  +.icon-sort-by-order-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf163;');}
                                                  +.icon-thumbs-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf164;');}
                                                  +.icon-thumbs-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf165;');}
                                                  +.icon-youtube-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf166;');}
                                                  +.icon-youtube{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf167;');}
                                                  +.icon-xing{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf168;');}
                                                  +.icon-xing-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf169;');}
                                                  +.icon-youtube-play{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16a;');}
                                                  +.icon-dropbox{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16b;');}
                                                  +.icon-stackexchange{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16c;');}
                                                  +.icon-instagram{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16d;');}
                                                  +.icon-flickr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16e;');}
                                                  +.icon-adn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf170;');}
                                                  +.icon-bitbucket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf171;');}
                                                  +.icon-bitbucket-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf172;');}
                                                  +.icon-tumblr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf173;');}
                                                  +.icon-tumblr-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf174;');}
                                                  +.icon-long-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf175;');}
                                                  +.icon-long-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf176;');}
                                                  +.icon-long-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf177;');}
                                                  +.icon-long-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf178;');}
                                                  +.icon-apple{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf179;');}
                                                  +.icon-windows{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17a;');}
                                                  +.icon-android{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17b;');}
                                                  +.icon-linux{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17c;');}
                                                  +.icon-dribbble{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17d;');}
                                                  +.icon-skype{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17e;');}
                                                  +.icon-foursquare{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf180;');}
                                                  +.icon-trello{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf181;');}
                                                  +.icon-female{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf182;');}
                                                  +.icon-male{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf183;');}
                                                  +.icon-gittip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf184;');}
                                                  +.icon-sun{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf185;');}
                                                  +.icon-moon{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf186;');}
                                                  +.icon-archive{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf187;');}
                                                  +.icon-bug{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf188;');}
                                                  +.icon-vk{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf189;');}
                                                  +.icon-weibo{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf18a;');}
                                                  +.icon-renren{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf18b;');}
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/css/font-awesome.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/css/font-awesome.css
                                                  new file mode 100644
                                                  index 00000000..30a96b22
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/css/font-awesome.css
                                                  @@ -0,0 +1,1479 @@
                                                  +/*!
                                                  + *  Font Awesome 3.2.1
                                                  + *  the iconic font designed for Bootstrap
                                                  + *  ------------------------------------------------------------------------------
                                                  + *  The full suite of pictographic icons, examples, and documentation can be
                                                  + *  found at http://fontawesome.io.  Stay up to date on Twitter at
                                                  + *  http://twitter.com/fontawesome.
                                                  + *
                                                  + *  License
                                                  + *  ------------------------------------------------------------------------------
                                                  + *  - The Font Awesome font is licensed under SIL OFL 1.1 -
                                                  + *    http://scripts.sil.org/OFL
                                                  + *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -
                                                  + *    http://opensource.org/licenses/mit-license.html
                                                  + *  - Font Awesome documentation licensed under CC BY 3.0 -
                                                  + *    http://creativecommons.org/licenses/by/3.0/
                                                  + *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
                                                  + *    "Font Awesome by Dave Gandy - http://fontawesome.io"
                                                  + *
                                                  + *  Author - Dave Gandy
                                                  + *  ------------------------------------------------------------------------------
                                                  + *  Email: dave@fontawesome.io
                                                  + *  Twitter: http://twitter.com/byscuits
                                                  + *  Work: Lead Product Designer @ Kyruus - http://kyruus.com
                                                  + */
                                                  +/* FONT PATH
                                                  + * -------------------------- */
                                                  +@font-face {
                                                  +  font-family: 'FontAwesome';
                                                  +  src: url('../font/fontawesome-webfont.eot?v=3.2.1');
                                                  +  src: url('../font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../font/fontawesome-webfont.woff?v=3.2.1') format('woff'), url('../font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'), url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');
                                                  +  font-weight: normal;
                                                  +  font-style: normal;
                                                  +}
                                                  +/* FONT AWESOME CORE
                                                  + * -------------------------- */
                                                  +[class^="icon-"],
                                                  +[class*=" icon-"] {
                                                  +  font-family: FontAwesome;
                                                  +  font-weight: normal;
                                                  +  font-style: normal;
                                                  +  text-decoration: inherit;
                                                  +  -webkit-font-smoothing: antialiased;
                                                  +  *margin-right: .3em;
                                                  +}
                                                  +[class^="icon-"]:before,
                                                  +[class*=" icon-"]:before {
                                                  +  text-decoration: inherit;
                                                  +  display: inline-block;
                                                  +  speak: none;
                                                  +}
                                                  +/* makes the font 33% larger relative to the icon container */
                                                  +.icon-large:before {
                                                  +  vertical-align: -10%;
                                                  +  font-size: 1.3333333333333333em;
                                                  +}
                                                  +/* makes sure icons active on rollover in links */
                                                  +a [class^="icon-"],
                                                  +a [class*=" icon-"] {
                                                  +  display: inline;
                                                  +}
                                                  +/* increased font size for icon-large */
                                                  +[class^="icon-"].icon-fixed-width,
                                                  +[class*=" icon-"].icon-fixed-width {
                                                  +  display: inline-block;
                                                  +  width: 1.1428571428571428em;
                                                  +  text-align: right;
                                                  +  padding-right: 0.2857142857142857em;
                                                  +}
                                                  +[class^="icon-"].icon-fixed-width.icon-large,
                                                  +[class*=" icon-"].icon-fixed-width.icon-large {
                                                  +  width: 1.4285714285714286em;
                                                  +}
                                                  +.icons-ul {
                                                  +  margin-left: 2.142857142857143em;
                                                  +  list-style-type: none;
                                                  +}
                                                  +.icons-ul > li {
                                                  +  position: relative;
                                                  +}
                                                  +.icons-ul .icon-li {
                                                  +  position: absolute;
                                                  +  left: -2.142857142857143em;
                                                  +  width: 2.142857142857143em;
                                                  +  text-align: center;
                                                  +  line-height: inherit;
                                                  +}
                                                  +[class^="icon-"].hide,
                                                  +[class*=" icon-"].hide {
                                                  +  display: none;
                                                  +}
                                                  +.icon-muted {
                                                  +  color: #eeeeee;
                                                  +}
                                                  +.icon-light {
                                                  +  color: #ffffff;
                                                  +}
                                                  +.icon-dark {
                                                  +  color: #333333;
                                                  +}
                                                  +.icon-border {
                                                  +  border: solid 1px #eeeeee;
                                                  +  padding: .2em .25em .15em;
                                                  +  -webkit-border-radius: 3px;
                                                  +  -moz-border-radius: 3px;
                                                  +  border-radius: 3px;
                                                  +}
                                                  +.icon-2x {
                                                  +  font-size: 2em;
                                                  +}
                                                  +.icon-2x.icon-border {
                                                  +  border-width: 2px;
                                                  +  -webkit-border-radius: 4px;
                                                  +  -moz-border-radius: 4px;
                                                  +  border-radius: 4px;
                                                  +}
                                                  +.icon-3x {
                                                  +  font-size: 3em;
                                                  +}
                                                  +.icon-3x.icon-border {
                                                  +  border-width: 3px;
                                                  +  -webkit-border-radius: 5px;
                                                  +  -moz-border-radius: 5px;
                                                  +  border-radius: 5px;
                                                  +}
                                                  +.icon-4x {
                                                  +  font-size: 4em;
                                                  +}
                                                  +.icon-4x.icon-border {
                                                  +  border-width: 4px;
                                                  +  -webkit-border-radius: 6px;
                                                  +  -moz-border-radius: 6px;
                                                  +  border-radius: 6px;
                                                  +}
                                                  +.icon-5x {
                                                  +  font-size: 5em;
                                                  +}
                                                  +.icon-5x.icon-border {
                                                  +  border-width: 5px;
                                                  +  -webkit-border-radius: 7px;
                                                  +  -moz-border-radius: 7px;
                                                  +  border-radius: 7px;
                                                  +}
                                                  +.pull-right {
                                                  +  float: right;
                                                  +}
                                                  +.pull-left {
                                                  +  float: left;
                                                  +}
                                                  +[class^="icon-"].pull-left,
                                                  +[class*=" icon-"].pull-left {
                                                  +  margin-right: .3em;
                                                  +}
                                                  +[class^="icon-"].pull-right,
                                                  +[class*=" icon-"].pull-right {
                                                  +  margin-left: .3em;
                                                  +}
                                                  +/* BOOTSTRAP SPECIFIC CLASSES
                                                  + * -------------------------- */
                                                  +/* Bootstrap 2.0 sprites.less reset */
                                                  +[class^="icon-"],
                                                  +[class*=" icon-"] {
                                                  +  display: inline;
                                                  +  width: auto;
                                                  +  height: auto;
                                                  +  line-height: normal;
                                                  +  vertical-align: baseline;
                                                  +  background-image: none;
                                                  +  background-position: 0% 0%;
                                                  +  background-repeat: repeat;
                                                  +  margin-top: 0;
                                                  +}
                                                  +/* more sprites.less reset */
                                                  +.icon-white,
                                                  +.nav-pills > .active > a > [class^="icon-"],
                                                  +.nav-pills > .active > a > [class*=" icon-"],
                                                  +.nav-list > .active > a > [class^="icon-"],
                                                  +.nav-list > .active > a > [class*=" icon-"],
                                                  +.navbar-inverse .nav > .active > a > [class^="icon-"],
                                                  +.navbar-inverse .nav > .active > a > [class*=" icon-"],
                                                  +.dropdown-menu > li > a:hover > [class^="icon-"],
                                                  +.dropdown-menu > li > a:hover > [class*=" icon-"],
                                                  +.dropdown-menu > .active > a > [class^="icon-"],
                                                  +.dropdown-menu > .active > a > [class*=" icon-"],
                                                  +.dropdown-submenu:hover > a > [class^="icon-"],
                                                  +.dropdown-submenu:hover > a > [class*=" icon-"] {
                                                  +  background-image: none;
                                                  +}
                                                  +/* keeps Bootstrap styles with and without icons the same */
                                                  +.btn [class^="icon-"].icon-large,
                                                  +.nav [class^="icon-"].icon-large,
                                                  +.btn [class*=" icon-"].icon-large,
                                                  +.nav [class*=" icon-"].icon-large {
                                                  +  line-height: .9em;
                                                  +}
                                                  +.btn [class^="icon-"].icon-spin,
                                                  +.nav [class^="icon-"].icon-spin,
                                                  +.btn [class*=" icon-"].icon-spin,
                                                  +.nav [class*=" icon-"].icon-spin {
                                                  +  display: inline-block;
                                                  +}
                                                  +.nav-tabs [class^="icon-"],
                                                  +.nav-pills [class^="icon-"],
                                                  +.nav-tabs [class*=" icon-"],
                                                  +.nav-pills [class*=" icon-"],
                                                  +.nav-tabs [class^="icon-"].icon-large,
                                                  +.nav-pills [class^="icon-"].icon-large,
                                                  +.nav-tabs [class*=" icon-"].icon-large,
                                                  +.nav-pills [class*=" icon-"].icon-large {
                                                  +  line-height: .9em;
                                                  +}
                                                  +.btn [class^="icon-"].pull-left.icon-2x,
                                                  +.btn [class*=" icon-"].pull-left.icon-2x,
                                                  +.btn [class^="icon-"].pull-right.icon-2x,
                                                  +.btn [class*=" icon-"].pull-right.icon-2x {
                                                  +  margin-top: .18em;
                                                  +}
                                                  +.btn [class^="icon-"].icon-spin.icon-large,
                                                  +.btn [class*=" icon-"].icon-spin.icon-large {
                                                  +  line-height: .8em;
                                                  +}
                                                  +.btn.btn-small [class^="icon-"].pull-left.icon-2x,
                                                  +.btn.btn-small [class*=" icon-"].pull-left.icon-2x,
                                                  +.btn.btn-small [class^="icon-"].pull-right.icon-2x,
                                                  +.btn.btn-small [class*=" icon-"].pull-right.icon-2x {
                                                  +  margin-top: .25em;
                                                  +}
                                                  +.btn.btn-large [class^="icon-"],
                                                  +.btn.btn-large [class*=" icon-"] {
                                                  +  margin-top: 0;
                                                  +}
                                                  +.btn.btn-large [class^="icon-"].pull-left.icon-2x,
                                                  +.btn.btn-large [class*=" icon-"].pull-left.icon-2x,
                                                  +.btn.btn-large [class^="icon-"].pull-right.icon-2x,
                                                  +.btn.btn-large [class*=" icon-"].pull-right.icon-2x {
                                                  +  margin-top: .05em;
                                                  +}
                                                  +.btn.btn-large [class^="icon-"].pull-left.icon-2x,
                                                  +.btn.btn-large [class*=" icon-"].pull-left.icon-2x {
                                                  +  margin-right: .2em;
                                                  +}
                                                  +.btn.btn-large [class^="icon-"].pull-right.icon-2x,
                                                  +.btn.btn-large [class*=" icon-"].pull-right.icon-2x {
                                                  +  margin-left: .2em;
                                                  +}
                                                  +/* Fixes alignment in nav lists */
                                                  +.nav-list [class^="icon-"],
                                                  +.nav-list [class*=" icon-"] {
                                                  +  line-height: inherit;
                                                  +}
                                                  +/* EXTRAS
                                                  + * -------------------------- */
                                                  +/* Stacked and layered icon */
                                                  +.icon-stack {
                                                  +  position: relative;
                                                  +  display: inline-block;
                                                  +  width: 2em;
                                                  +  height: 2em;
                                                  +  line-height: 2em;
                                                  +  vertical-align: -35%;
                                                  +}
                                                  +.icon-stack [class^="icon-"],
                                                  +.icon-stack [class*=" icon-"] {
                                                  +  display: block;
                                                  +  text-align: center;
                                                  +  position: absolute;
                                                  +  width: 100%;
                                                  +  height: 100%;
                                                  +  font-size: 1em;
                                                  +  line-height: inherit;
                                                  +  *line-height: 2em;
                                                  +}
                                                  +.icon-stack .icon-stack-base {
                                                  +  font-size: 2em;
                                                  +  *line-height: 1em;
                                                  +}
                                                  +/* Animated rotating icon */
                                                  +.icon-spin {
                                                  +  display: inline-block;
                                                  +  -moz-animation: spin 2s infinite linear;
                                                  +  -o-animation: spin 2s infinite linear;
                                                  +  -webkit-animation: spin 2s infinite linear;
                                                  +  animation: spin 2s infinite linear;
                                                  +}
                                                  +/* Prevent stack and spinners from being taken inline when inside a link */
                                                  +a .icon-stack,
                                                  +a .icon-spin {
                                                  +  display: inline-block;
                                                  +  text-decoration: none;
                                                  +}
                                                  +@-moz-keyframes spin {
                                                  +  0% {
                                                  +    -moz-transform: rotate(0deg);
                                                  +  }
                                                  +  100% {
                                                  +    -moz-transform: rotate(359deg);
                                                  +  }
                                                  +}
                                                  +@-webkit-keyframes spin {
                                                  +  0% {
                                                  +    -webkit-transform: rotate(0deg);
                                                  +  }
                                                  +  100% {
                                                  +    -webkit-transform: rotate(359deg);
                                                  +  }
                                                  +}
                                                  +@-o-keyframes spin {
                                                  +  0% {
                                                  +    -o-transform: rotate(0deg);
                                                  +  }
                                                  +  100% {
                                                  +    -o-transform: rotate(359deg);
                                                  +  }
                                                  +}
                                                  +@-ms-keyframes spin {
                                                  +  0% {
                                                  +    -ms-transform: rotate(0deg);
                                                  +  }
                                                  +  100% {
                                                  +    -ms-transform: rotate(359deg);
                                                  +  }
                                                  +}
                                                  +@keyframes spin {
                                                  +  0% {
                                                  +    transform: rotate(0deg);
                                                  +  }
                                                  +  100% {
                                                  +    transform: rotate(359deg);
                                                  +  }
                                                  +}
                                                  +/* Icon rotations and mirroring */
                                                  +.icon-rotate-90:before {
                                                  +  -webkit-transform: rotate(90deg);
                                                  +  -moz-transform: rotate(90deg);
                                                  +  -ms-transform: rotate(90deg);
                                                  +  -o-transform: rotate(90deg);
                                                  +  transform: rotate(90deg);
                                                  +  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
                                                  +}
                                                  +.icon-rotate-180:before {
                                                  +  -webkit-transform: rotate(180deg);
                                                  +  -moz-transform: rotate(180deg);
                                                  +  -ms-transform: rotate(180deg);
                                                  +  -o-transform: rotate(180deg);
                                                  +  transform: rotate(180deg);
                                                  +  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
                                                  +}
                                                  +.icon-rotate-270:before {
                                                  +  -webkit-transform: rotate(270deg);
                                                  +  -moz-transform: rotate(270deg);
                                                  +  -ms-transform: rotate(270deg);
                                                  +  -o-transform: rotate(270deg);
                                                  +  transform: rotate(270deg);
                                                  +  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
                                                  +}
                                                  +.icon-flip-horizontal:before {
                                                  +  -webkit-transform: scale(-1, 1);
                                                  +  -moz-transform: scale(-1, 1);
                                                  +  -ms-transform: scale(-1, 1);
                                                  +  -o-transform: scale(-1, 1);
                                                  +  transform: scale(-1, 1);
                                                  +}
                                                  +.icon-flip-vertical:before {
                                                  +  -webkit-transform: scale(1, -1);
                                                  +  -moz-transform: scale(1, -1);
                                                  +  -ms-transform: scale(1, -1);
                                                  +  -o-transform: scale(1, -1);
                                                  +  transform: scale(1, -1);
                                                  +}
                                                  +/* ensure rotation occurs inside anchor tags */
                                                  +a .icon-rotate-90:before,
                                                  +a .icon-rotate-180:before,
                                                  +a .icon-rotate-270:before,
                                                  +a .icon-flip-horizontal:before,
                                                  +a .icon-flip-vertical:before {
                                                  +  display: inline-block;
                                                  +}
                                                  +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
                                                  +   readers do not read off random characters that represent icons */
                                                  +.icon-glass:before {
                                                  +  content: "\f000";
                                                  +}
                                                  +.icon-music:before {
                                                  +  content: "\f001";
                                                  +}
                                                  +.icon-search:before {
                                                  +  content: "\f002";
                                                  +}
                                                  +.icon-envelope-alt:before {
                                                  +  content: "\f003";
                                                  +}
                                                  +.icon-heart:before {
                                                  +  content: "\f004";
                                                  +}
                                                  +.icon-star:before {
                                                  +  content: "\f005";
                                                  +}
                                                  +.icon-star-empty:before {
                                                  +  content: "\f006";
                                                  +}
                                                  +.icon-user:before {
                                                  +  content: "\f007";
                                                  +}
                                                  +.icon-film:before {
                                                  +  content: "\f008";
                                                  +}
                                                  +.icon-th-large:before {
                                                  +  content: "\f009";
                                                  +}
                                                  +.icon-th:before {
                                                  +  content: "\f00a";
                                                  +}
                                                  +.icon-th-list:before {
                                                  +  content: "\f00b";
                                                  +}
                                                  +.icon-ok:before {
                                                  +  content: "\f00c";
                                                  +}
                                                  +.icon-remove:before {
                                                  +  content: "\f00d";
                                                  +}
                                                  +.icon-zoom-in:before {
                                                  +  content: "\f00e";
                                                  +}
                                                  +.icon-zoom-out:before {
                                                  +  content: "\f010";
                                                  +}
                                                  +.icon-power-off:before,
                                                  +.icon-off:before {
                                                  +  content: "\f011";
                                                  +}
                                                  +.icon-signal:before {
                                                  +  content: "\f012";
                                                  +}
                                                  +.icon-gear:before,
                                                  +.icon-cog:before {
                                                  +  content: "\f013";
                                                  +}
                                                  +.icon-trash:before {
                                                  +  content: "\f014";
                                                  +}
                                                  +.icon-home:before {
                                                  +  content: "\f015";
                                                  +}
                                                  +.icon-file-alt:before {
                                                  +  content: "\f016";
                                                  +}
                                                  +.icon-time:before {
                                                  +  content: "\f017";
                                                  +}
                                                  +.icon-road:before {
                                                  +  content: "\f018";
                                                  +}
                                                  +.icon-download-alt:before {
                                                  +  content: "\f019";
                                                  +}
                                                  +.icon-download:before {
                                                  +  content: "\f01a";
                                                  +}
                                                  +.icon-upload:before {
                                                  +  content: "\f01b";
                                                  +}
                                                  +.icon-inbox:before {
                                                  +  content: "\f01c";
                                                  +}
                                                  +.icon-play-circle:before {
                                                  +  content: "\f01d";
                                                  +}
                                                  +.icon-rotate-right:before,
                                                  +.icon-repeat:before {
                                                  +  content: "\f01e";
                                                  +}
                                                  +.icon-refresh:before {
                                                  +  content: "\f021";
                                                  +}
                                                  +.icon-list-alt:before {
                                                  +  content: "\f022";
                                                  +}
                                                  +.icon-lock:before {
                                                  +  content: "\f023";
                                                  +}
                                                  +.icon-flag:before {
                                                  +  content: "\f024";
                                                  +}
                                                  +.icon-headphones:before {
                                                  +  content: "\f025";
                                                  +}
                                                  +.icon-volume-off:before {
                                                  +  content: "\f026";
                                                  +}
                                                  +.icon-volume-down:before {
                                                  +  content: "\f027";
                                                  +}
                                                  +.icon-volume-up:before {
                                                  +  content: "\f028";
                                                  +}
                                                  +.icon-qrcode:before {
                                                  +  content: "\f029";
                                                  +}
                                                  +.icon-barcode:before {
                                                  +  content: "\f02a";
                                                  +}
                                                  +.icon-tag:before {
                                                  +  content: "\f02b";
                                                  +}
                                                  +.icon-tags:before {
                                                  +  content: "\f02c";
                                                  +}
                                                  +.icon-book:before {
                                                  +  content: "\f02d";
                                                  +}
                                                  +.icon-bookmark:before {
                                                  +  content: "\f02e";
                                                  +}
                                                  +.icon-print:before {
                                                  +  content: "\f02f";
                                                  +}
                                                  +.icon-camera:before {
                                                  +  content: "\f030";
                                                  +}
                                                  +.icon-font:before {
                                                  +  content: "\f031";
                                                  +}
                                                  +.icon-bold:before {
                                                  +  content: "\f032";
                                                  +}
                                                  +.icon-italic:before {
                                                  +  content: "\f033";
                                                  +}
                                                  +.icon-text-height:before {
                                                  +  content: "\f034";
                                                  +}
                                                  +.icon-text-width:before {
                                                  +  content: "\f035";
                                                  +}
                                                  +.icon-align-left:before {
                                                  +  content: "\f036";
                                                  +}
                                                  +.icon-align-center:before {
                                                  +  content: "\f037";
                                                  +}
                                                  +.icon-align-right:before {
                                                  +  content: "\f038";
                                                  +}
                                                  +.icon-align-justify:before {
                                                  +  content: "\f039";
                                                  +}
                                                  +.icon-list:before {
                                                  +  content: "\f03a";
                                                  +}
                                                  +.icon-indent-left:before {
                                                  +  content: "\f03b";
                                                  +}
                                                  +.icon-indent-right:before {
                                                  +  content: "\f03c";
                                                  +}
                                                  +.icon-facetime-video:before {
                                                  +  content: "\f03d";
                                                  +}
                                                  +.icon-picture:before {
                                                  +  content: "\f03e";
                                                  +}
                                                  +.icon-pencil:before {
                                                  +  content: "\f040";
                                                  +}
                                                  +.icon-map-marker:before {
                                                  +  content: "\f041";
                                                  +}
                                                  +.icon-adjust:before {
                                                  +  content: "\f042";
                                                  +}
                                                  +.icon-tint:before {
                                                  +  content: "\f043";
                                                  +}
                                                  +.icon-edit:before {
                                                  +  content: "\f044";
                                                  +}
                                                  +.icon-share:before {
                                                  +  content: "\f045";
                                                  +}
                                                  +.icon-check:before {
                                                  +  content: "\f046";
                                                  +}
                                                  +.icon-move:before {
                                                  +  content: "\f047";
                                                  +}
                                                  +.icon-step-backward:before {
                                                  +  content: "\f048";
                                                  +}
                                                  +.icon-fast-backward:before {
                                                  +  content: "\f049";
                                                  +}
                                                  +.icon-backward:before {
                                                  +  content: "\f04a";
                                                  +}
                                                  +.icon-play:before {
                                                  +  content: "\f04b";
                                                  +}
                                                  +.icon-pause:before {
                                                  +  content: "\f04c";
                                                  +}
                                                  +.icon-stop:before {
                                                  +  content: "\f04d";
                                                  +}
                                                  +.icon-forward:before {
                                                  +  content: "\f04e";
                                                  +}
                                                  +.icon-fast-forward:before {
                                                  +  content: "\f050";
                                                  +}
                                                  +.icon-step-forward:before {
                                                  +  content: "\f051";
                                                  +}
                                                  +.icon-eject:before {
                                                  +  content: "\f052";
                                                  +}
                                                  +.icon-chevron-left:before {
                                                  +  content: "\f053";
                                                  +}
                                                  +.icon-chevron-right:before {
                                                  +  content: "\f054";
                                                  +}
                                                  +.icon-plus-sign:before {
                                                  +  content: "\f055";
                                                  +}
                                                  +.icon-minus-sign:before {
                                                  +  content: "\f056";
                                                  +}
                                                  +.icon-remove-sign:before {
                                                  +  content: "\f057";
                                                  +}
                                                  +.icon-ok-sign:before {
                                                  +  content: "\f058";
                                                  +}
                                                  +.icon-question-sign:before {
                                                  +  content: "\f059";
                                                  +}
                                                  +.icon-info-sign:before {
                                                  +  content: "\f05a";
                                                  +}
                                                  +.icon-screenshot:before {
                                                  +  content: "\f05b";
                                                  +}
                                                  +.icon-remove-circle:before {
                                                  +  content: "\f05c";
                                                  +}
                                                  +.icon-ok-circle:before {
                                                  +  content: "\f05d";
                                                  +}
                                                  +.icon-ban-circle:before {
                                                  +  content: "\f05e";
                                                  +}
                                                  +.icon-arrow-left:before {
                                                  +  content: "\f060";
                                                  +}
                                                  +.icon-arrow-right:before {
                                                  +  content: "\f061";
                                                  +}
                                                  +.icon-arrow-up:before {
                                                  +  content: "\f062";
                                                  +}
                                                  +.icon-arrow-down:before {
                                                  +  content: "\f063";
                                                  +}
                                                  +.icon-mail-forward:before,
                                                  +.icon-share-alt:before {
                                                  +  content: "\f064";
                                                  +}
                                                  +.icon-resize-full:before {
                                                  +  content: "\f065";
                                                  +}
                                                  +.icon-resize-small:before {
                                                  +  content: "\f066";
                                                  +}
                                                  +.icon-plus:before {
                                                  +  content: "\f067";
                                                  +}
                                                  +.icon-minus:before {
                                                  +  content: "\f068";
                                                  +}
                                                  +.icon-asterisk:before {
                                                  +  content: "\f069";
                                                  +}
                                                  +.icon-exclamation-sign:before {
                                                  +  content: "\f06a";
                                                  +}
                                                  +.icon-gift:before {
                                                  +  content: "\f06b";
                                                  +}
                                                  +.icon-leaf:before {
                                                  +  content: "\f06c";
                                                  +}
                                                  +.icon-fire:before {
                                                  +  content: "\f06d";
                                                  +}
                                                  +.icon-eye-open:before {
                                                  +  content: "\f06e";
                                                  +}
                                                  +.icon-eye-close:before {
                                                  +  content: "\f070";
                                                  +}
                                                  +.icon-warning-sign:before {
                                                  +  content: "\f071";
                                                  +}
                                                  +.icon-plane:before {
                                                  +  content: "\f072";
                                                  +}
                                                  +.icon-calendar:before {
                                                  +  content: "\f073";
                                                  +}
                                                  +.icon-random:before {
                                                  +  content: "\f074";
                                                  +}
                                                  +.icon-comment:before {
                                                  +  content: "\f075";
                                                  +}
                                                  +.icon-magnet:before {
                                                  +  content: "\f076";
                                                  +}
                                                  +.icon-chevron-up:before {
                                                  +  content: "\f077";
                                                  +}
                                                  +.icon-chevron-down:before {
                                                  +  content: "\f078";
                                                  +}
                                                  +.icon-retweet:before {
                                                  +  content: "\f079";
                                                  +}
                                                  +.icon-shopping-cart:before {
                                                  +  content: "\f07a";
                                                  +}
                                                  +.icon-folder-close:before {
                                                  +  content: "\f07b";
                                                  +}
                                                  +.icon-folder-open:before {
                                                  +  content: "\f07c";
                                                  +}
                                                  +.icon-resize-vertical:before {
                                                  +  content: "\f07d";
                                                  +}
                                                  +.icon-resize-horizontal:before {
                                                  +  content: "\f07e";
                                                  +}
                                                  +.icon-bar-chart:before {
                                                  +  content: "\f080";
                                                  +}
                                                  +.icon-twitter-sign:before {
                                                  +  content: "\f081";
                                                  +}
                                                  +.icon-facebook-sign:before {
                                                  +  content: "\f082";
                                                  +}
                                                  +.icon-camera-retro:before {
                                                  +  content: "\f083";
                                                  +}
                                                  +.icon-key:before {
                                                  +  content: "\f084";
                                                  +}
                                                  +.icon-gears:before,
                                                  +.icon-cogs:before {
                                                  +  content: "\f085";
                                                  +}
                                                  +.icon-comments:before {
                                                  +  content: "\f086";
                                                  +}
                                                  +.icon-thumbs-up-alt:before {
                                                  +  content: "\f087";
                                                  +}
                                                  +.icon-thumbs-down-alt:before {
                                                  +  content: "\f088";
                                                  +}
                                                  +.icon-star-half:before {
                                                  +  content: "\f089";
                                                  +}
                                                  +.icon-heart-empty:before {
                                                  +  content: "\f08a";
                                                  +}
                                                  +.icon-signout:before {
                                                  +  content: "\f08b";
                                                  +}
                                                  +.icon-linkedin-sign:before {
                                                  +  content: "\f08c";
                                                  +}
                                                  +.icon-pushpin:before {
                                                  +  content: "\f08d";
                                                  +}
                                                  +.icon-external-link:before {
                                                  +  content: "\f08e";
                                                  +}
                                                  +.icon-signin:before {
                                                  +  content: "\f090";
                                                  +}
                                                  +.icon-trophy:before {
                                                  +  content: "\f091";
                                                  +}
                                                  +.icon-github-sign:before {
                                                  +  content: "\f092";
                                                  +}
                                                  +.icon-upload-alt:before {
                                                  +  content: "\f093";
                                                  +}
                                                  +.icon-lemon:before {
                                                  +  content: "\f094";
                                                  +}
                                                  +.icon-phone:before {
                                                  +  content: "\f095";
                                                  +}
                                                  +.icon-unchecked:before,
                                                  +.icon-check-empty:before {
                                                  +  content: "\f096";
                                                  +}
                                                  +.icon-bookmark-empty:before {
                                                  +  content: "\f097";
                                                  +}
                                                  +.icon-phone-sign:before {
                                                  +  content: "\f098";
                                                  +}
                                                  +.icon-twitter:before {
                                                  +  content: "\f099";
                                                  +}
                                                  +.icon-facebook:before {
                                                  +  content: "\f09a";
                                                  +}
                                                  +.icon-github:before {
                                                  +  content: "\f09b";
                                                  +}
                                                  +.icon-unlock:before {
                                                  +  content: "\f09c";
                                                  +}
                                                  +.icon-credit-card:before {
                                                  +  content: "\f09d";
                                                  +}
                                                  +.icon-rss:before {
                                                  +  content: "\f09e";
                                                  +}
                                                  +.icon-hdd:before {
                                                  +  content: "\f0a0";
                                                  +}
                                                  +.icon-bullhorn:before {
                                                  +  content: "\f0a1";
                                                  +}
                                                  +.icon-bell:before {
                                                  +  content: "\f0a2";
                                                  +}
                                                  +.icon-certificate:before {
                                                  +  content: "\f0a3";
                                                  +}
                                                  +.icon-hand-right:before {
                                                  +  content: "\f0a4";
                                                  +}
                                                  +.icon-hand-left:before {
                                                  +  content: "\f0a5";
                                                  +}
                                                  +.icon-hand-up:before {
                                                  +  content: "\f0a6";
                                                  +}
                                                  +.icon-hand-down:before {
                                                  +  content: "\f0a7";
                                                  +}
                                                  +.icon-circle-arrow-left:before {
                                                  +  content: "\f0a8";
                                                  +}
                                                  +.icon-circle-arrow-right:before {
                                                  +  content: "\f0a9";
                                                  +}
                                                  +.icon-circle-arrow-up:before {
                                                  +  content: "\f0aa";
                                                  +}
                                                  +.icon-circle-arrow-down:before {
                                                  +  content: "\f0ab";
                                                  +}
                                                  +.icon-globe:before {
                                                  +  content: "\f0ac";
                                                  +}
                                                  +.icon-wrench:before {
                                                  +  content: "\f0ad";
                                                  +}
                                                  +.icon-tasks:before {
                                                  +  content: "\f0ae";
                                                  +}
                                                  +.icon-filter:before {
                                                  +  content: "\f0b0";
                                                  +}
                                                  +.icon-briefcase:before {
                                                  +  content: "\f0b1";
                                                  +}
                                                  +.icon-fullscreen:before {
                                                  +  content: "\f0b2";
                                                  +}
                                                  +.icon-group:before {
                                                  +  content: "\f0c0";
                                                  +}
                                                  +.icon-link:before {
                                                  +  content: "\f0c1";
                                                  +}
                                                  +.icon-cloud:before {
                                                  +  content: "\f0c2";
                                                  +}
                                                  +.icon-beaker:before {
                                                  +  content: "\f0c3";
                                                  +}
                                                  +.icon-cut:before {
                                                  +  content: "\f0c4";
                                                  +}
                                                  +.icon-copy:before {
                                                  +  content: "\f0c5";
                                                  +}
                                                  +.icon-paperclip:before,
                                                  +.icon-paper-clip:before {
                                                  +  content: "\f0c6";
                                                  +}
                                                  +.icon-save:before {
                                                  +  content: "\f0c7";
                                                  +}
                                                  +.icon-sign-blank:before {
                                                  +  content: "\f0c8";
                                                  +}
                                                  +.icon-reorder:before {
                                                  +  content: "\f0c9";
                                                  +}
                                                  +.icon-list-ul:before {
                                                  +  content: "\f0ca";
                                                  +}
                                                  +.icon-list-ol:before {
                                                  +  content: "\f0cb";
                                                  +}
                                                  +.icon-strikethrough:before {
                                                  +  content: "\f0cc";
                                                  +}
                                                  +.icon-underline:before {
                                                  +  content: "\f0cd";
                                                  +}
                                                  +.icon-table:before {
                                                  +  content: "\f0ce";
                                                  +}
                                                  +.icon-magic:before {
                                                  +  content: "\f0d0";
                                                  +}
                                                  +.icon-truck:before {
                                                  +  content: "\f0d1";
                                                  +}
                                                  +.icon-pinterest:before {
                                                  +  content: "\f0d2";
                                                  +}
                                                  +.icon-pinterest-sign:before {
                                                  +  content: "\f0d3";
                                                  +}
                                                  +.icon-google-plus-sign:before {
                                                  +  content: "\f0d4";
                                                  +}
                                                  +.icon-google-plus:before {
                                                  +  content: "\f0d5";
                                                  +}
                                                  +.icon-money:before {
                                                  +  content: "\f0d6";
                                                  +}
                                                  +.icon-caret-down:before {
                                                  +  content: "\f0d7";
                                                  +}
                                                  +.icon-caret-up:before {
                                                  +  content: "\f0d8";
                                                  +}
                                                  +.icon-caret-left:before {
                                                  +  content: "\f0d9";
                                                  +}
                                                  +.icon-caret-right:before {
                                                  +  content: "\f0da";
                                                  +}
                                                  +.icon-columns:before {
                                                  +  content: "\f0db";
                                                  +}
                                                  +.icon-sort:before {
                                                  +  content: "\f0dc";
                                                  +}
                                                  +.icon-sort-down:before {
                                                  +  content: "\f0dd";
                                                  +}
                                                  +.icon-sort-up:before {
                                                  +  content: "\f0de";
                                                  +}
                                                  +.icon-envelope:before {
                                                  +  content: "\f0e0";
                                                  +}
                                                  +.icon-linkedin:before {
                                                  +  content: "\f0e1";
                                                  +}
                                                  +.icon-rotate-left:before,
                                                  +.icon-undo:before {
                                                  +  content: "\f0e2";
                                                  +}
                                                  +.icon-legal:before {
                                                  +  content: "\f0e3";
                                                  +}
                                                  +.icon-dashboard:before {
                                                  +  content: "\f0e4";
                                                  +}
                                                  +.icon-comment-alt:before {
                                                  +  content: "\f0e5";
                                                  +}
                                                  +.icon-comments-alt:before {
                                                  +  content: "\f0e6";
                                                  +}
                                                  +.icon-bolt:before {
                                                  +  content: "\f0e7";
                                                  +}
                                                  +.icon-sitemap:before {
                                                  +  content: "\f0e8";
                                                  +}
                                                  +.icon-umbrella:before {
                                                  +  content: "\f0e9";
                                                  +}
                                                  +.icon-paste:before {
                                                  +  content: "\f0ea";
                                                  +}
                                                  +.icon-lightbulb:before {
                                                  +  content: "\f0eb";
                                                  +}
                                                  +.icon-exchange:before {
                                                  +  content: "\f0ec";
                                                  +}
                                                  +.icon-cloud-download:before {
                                                  +  content: "\f0ed";
                                                  +}
                                                  +.icon-cloud-upload:before {
                                                  +  content: "\f0ee";
                                                  +}
                                                  +.icon-user-md:before {
                                                  +  content: "\f0f0";
                                                  +}
                                                  +.icon-stethoscope:before {
                                                  +  content: "\f0f1";
                                                  +}
                                                  +.icon-suitcase:before {
                                                  +  content: "\f0f2";
                                                  +}
                                                  +.icon-bell-alt:before {
                                                  +  content: "\f0f3";
                                                  +}
                                                  +.icon-coffee:before {
                                                  +  content: "\f0f4";
                                                  +}
                                                  +.icon-food:before {
                                                  +  content: "\f0f5";
                                                  +}
                                                  +.icon-file-text-alt:before {
                                                  +  content: "\f0f6";
                                                  +}
                                                  +.icon-building:before {
                                                  +  content: "\f0f7";
                                                  +}
                                                  +.icon-hospital:before {
                                                  +  content: "\f0f8";
                                                  +}
                                                  +.icon-ambulance:before {
                                                  +  content: "\f0f9";
                                                  +}
                                                  +.icon-medkit:before {
                                                  +  content: "\f0fa";
                                                  +}
                                                  +.icon-fighter-jet:before {
                                                  +  content: "\f0fb";
                                                  +}
                                                  +.icon-beer:before {
                                                  +  content: "\f0fc";
                                                  +}
                                                  +.icon-h-sign:before {
                                                  +  content: "\f0fd";
                                                  +}
                                                  +.icon-plus-sign-alt:before {
                                                  +  content: "\f0fe";
                                                  +}
                                                  +.icon-double-angle-left:before {
                                                  +  content: "\f100";
                                                  +}
                                                  +.icon-double-angle-right:before {
                                                  +  content: "\f101";
                                                  +}
                                                  +.icon-double-angle-up:before {
                                                  +  content: "\f102";
                                                  +}
                                                  +.icon-double-angle-down:before {
                                                  +  content: "\f103";
                                                  +}
                                                  +.icon-angle-left:before {
                                                  +  content: "\f104";
                                                  +}
                                                  +.icon-angle-right:before {
                                                  +  content: "\f105";
                                                  +}
                                                  +.icon-angle-up:before {
                                                  +  content: "\f106";
                                                  +}
                                                  +.icon-angle-down:before {
                                                  +  content: "\f107";
                                                  +}
                                                  +.icon-desktop:before {
                                                  +  content: "\f108";
                                                  +}
                                                  +.icon-laptop:before {
                                                  +  content: "\f109";
                                                  +}
                                                  +.icon-tablet:before {
                                                  +  content: "\f10a";
                                                  +}
                                                  +.icon-mobile-phone:before {
                                                  +  content: "\f10b";
                                                  +}
                                                  +.icon-circle-blank:before {
                                                  +  content: "\f10c";
                                                  +}
                                                  +.icon-quote-left:before {
                                                  +  content: "\f10d";
                                                  +}
                                                  +.icon-quote-right:before {
                                                  +  content: "\f10e";
                                                  +}
                                                  +.icon-spinner:before {
                                                  +  content: "\f110";
                                                  +}
                                                  +.icon-circle:before {
                                                  +  content: "\f111";
                                                  +}
                                                  +.icon-mail-reply:before,
                                                  +.icon-reply:before {
                                                  +  content: "\f112";
                                                  +}
                                                  +.icon-github-alt:before {
                                                  +  content: "\f113";
                                                  +}
                                                  +.icon-folder-close-alt:before {
                                                  +  content: "\f114";
                                                  +}
                                                  +.icon-folder-open-alt:before {
                                                  +  content: "\f115";
                                                  +}
                                                  +.icon-expand-alt:before {
                                                  +  content: "\f116";
                                                  +}
                                                  +.icon-collapse-alt:before {
                                                  +  content: "\f117";
                                                  +}
                                                  +.icon-smile:before {
                                                  +  content: "\f118";
                                                  +}
                                                  +.icon-frown:before {
                                                  +  content: "\f119";
                                                  +}
                                                  +.icon-meh:before {
                                                  +  content: "\f11a";
                                                  +}
                                                  +.icon-gamepad:before {
                                                  +  content: "\f11b";
                                                  +}
                                                  +.icon-keyboard:before {
                                                  +  content: "\f11c";
                                                  +}
                                                  +.icon-flag-alt:before {
                                                  +  content: "\f11d";
                                                  +}
                                                  +.icon-flag-checkered:before {
                                                  +  content: "\f11e";
                                                  +}
                                                  +.icon-terminal:before {
                                                  +  content: "\f120";
                                                  +}
                                                  +.icon-code:before {
                                                  +  content: "\f121";
                                                  +}
                                                  +.icon-reply-all:before {
                                                  +  content: "\f122";
                                                  +}
                                                  +.icon-mail-reply-all:before {
                                                  +  content: "\f122";
                                                  +}
                                                  +.icon-star-half-full:before,
                                                  +.icon-star-half-empty:before {
                                                  +  content: "\f123";
                                                  +}
                                                  +.icon-location-arrow:before {
                                                  +  content: "\f124";
                                                  +}
                                                  +.icon-crop:before {
                                                  +  content: "\f125";
                                                  +}
                                                  +.icon-code-fork:before {
                                                  +  content: "\f126";
                                                  +}
                                                  +.icon-unlink:before {
                                                  +  content: "\f127";
                                                  +}
                                                  +.icon-question:before {
                                                  +  content: "\f128";
                                                  +}
                                                  +.icon-info:before {
                                                  +  content: "\f129";
                                                  +}
                                                  +.icon-exclamation:before {
                                                  +  content: "\f12a";
                                                  +}
                                                  +.icon-superscript:before {
                                                  +  content: "\f12b";
                                                  +}
                                                  +.icon-subscript:before {
                                                  +  content: "\f12c";
                                                  +}
                                                  +.icon-eraser:before {
                                                  +  content: "\f12d";
                                                  +}
                                                  +.icon-puzzle-piece:before {
                                                  +  content: "\f12e";
                                                  +}
                                                  +.icon-microphone:before {
                                                  +  content: "\f130";
                                                  +}
                                                  +.icon-microphone-off:before {
                                                  +  content: "\f131";
                                                  +}
                                                  +.icon-shield:before {
                                                  +  content: "\f132";
                                                  +}
                                                  +.icon-calendar-empty:before {
                                                  +  content: "\f133";
                                                  +}
                                                  +.icon-fire-extinguisher:before {
                                                  +  content: "\f134";
                                                  +}
                                                  +.icon-rocket:before {
                                                  +  content: "\f135";
                                                  +}
                                                  +.icon-maxcdn:before {
                                                  +  content: "\f136";
                                                  +}
                                                  +.icon-chevron-sign-left:before {
                                                  +  content: "\f137";
                                                  +}
                                                  +.icon-chevron-sign-right:before {
                                                  +  content: "\f138";
                                                  +}
                                                  +.icon-chevron-sign-up:before {
                                                  +  content: "\f139";
                                                  +}
                                                  +.icon-chevron-sign-down:before {
                                                  +  content: "\f13a";
                                                  +}
                                                  +.icon-html5:before {
                                                  +  content: "\f13b";
                                                  +}
                                                  +.icon-css3:before {
                                                  +  content: "\f13c";
                                                  +}
                                                  +.icon-anchor:before {
                                                  +  content: "\f13d";
                                                  +}
                                                  +.icon-unlock-alt:before {
                                                  +  content: "\f13e";
                                                  +}
                                                  +.icon-bullseye:before {
                                                  +  content: "\f140";
                                                  +}
                                                  +.icon-ellipsis-horizontal:before {
                                                  +  content: "\f141";
                                                  +}
                                                  +.icon-ellipsis-vertical:before {
                                                  +  content: "\f142";
                                                  +}
                                                  +.icon-rss-sign:before {
                                                  +  content: "\f143";
                                                  +}
                                                  +.icon-play-sign:before {
                                                  +  content: "\f144";
                                                  +}
                                                  +.icon-ticket:before {
                                                  +  content: "\f145";
                                                  +}
                                                  +.icon-minus-sign-alt:before {
                                                  +  content: "\f146";
                                                  +}
                                                  +.icon-check-minus:before {
                                                  +  content: "\f147";
                                                  +}
                                                  +.icon-level-up:before {
                                                  +  content: "\f148";
                                                  +}
                                                  +.icon-level-down:before {
                                                  +  content: "\f149";
                                                  +}
                                                  +.icon-check-sign:before {
                                                  +  content: "\f14a";
                                                  +}
                                                  +.icon-edit-sign:before {
                                                  +  content: "\f14b";
                                                  +}
                                                  +.icon-external-link-sign:before {
                                                  +  content: "\f14c";
                                                  +}
                                                  +.icon-share-sign:before {
                                                  +  content: "\f14d";
                                                  +}
                                                  +.icon-compass:before {
                                                  +  content: "\f14e";
                                                  +}
                                                  +.icon-collapse:before {
                                                  +  content: "\f150";
                                                  +}
                                                  +.icon-collapse-top:before {
                                                  +  content: "\f151";
                                                  +}
                                                  +.icon-expand:before {
                                                  +  content: "\f152";
                                                  +}
                                                  +.icon-euro:before,
                                                  +.icon-eur:before {
                                                  +  content: "\f153";
                                                  +}
                                                  +.icon-gbp:before {
                                                  +  content: "\f154";
                                                  +}
                                                  +.icon-dollar:before,
                                                  +.icon-usd:before {
                                                  +  content: "\f155";
                                                  +}
                                                  +.icon-rupee:before,
                                                  +.icon-inr:before {
                                                  +  content: "\f156";
                                                  +}
                                                  +.icon-yen:before,
                                                  +.icon-jpy:before {
                                                  +  content: "\f157";
                                                  +}
                                                  +.icon-renminbi:before,
                                                  +.icon-cny:before {
                                                  +  content: "\f158";
                                                  +}
                                                  +.icon-won:before,
                                                  +.icon-krw:before {
                                                  +  content: "\f159";
                                                  +}
                                                  +.icon-bitcoin:before,
                                                  +.icon-btc:before {
                                                  +  content: "\f15a";
                                                  +}
                                                  +.icon-file:before {
                                                  +  content: "\f15b";
                                                  +}
                                                  +.icon-file-text:before {
                                                  +  content: "\f15c";
                                                  +}
                                                  +.icon-sort-by-alphabet:before {
                                                  +  content: "\f15d";
                                                  +}
                                                  +.icon-sort-by-alphabet-alt:before {
                                                  +  content: "\f15e";
                                                  +}
                                                  +.icon-sort-by-attributes:before {
                                                  +  content: "\f160";
                                                  +}
                                                  +.icon-sort-by-attributes-alt:before {
                                                  +  content: "\f161";
                                                  +}
                                                  +.icon-sort-by-order:before {
                                                  +  content: "\f162";
                                                  +}
                                                  +.icon-sort-by-order-alt:before {
                                                  +  content: "\f163";
                                                  +}
                                                  +.icon-thumbs-up:before {
                                                  +  content: "\f164";
                                                  +}
                                                  +.icon-thumbs-down:before {
                                                  +  content: "\f165";
                                                  +}
                                                  +.icon-youtube-sign:before {
                                                  +  content: "\f166";
                                                  +}
                                                  +.icon-youtube:before {
                                                  +  content: "\f167";
                                                  +}
                                                  +.icon-xing:before {
                                                  +  content: "\f168";
                                                  +}
                                                  +.icon-xing-sign:before {
                                                  +  content: "\f169";
                                                  +}
                                                  +.icon-youtube-play:before {
                                                  +  content: "\f16a";
                                                  +}
                                                  +.icon-dropbox:before {
                                                  +  content: "\f16b";
                                                  +}
                                                  +.icon-stackexchange:before {
                                                  +  content: "\f16c";
                                                  +}
                                                  +.icon-instagram:before {
                                                  +  content: "\f16d";
                                                  +}
                                                  +.icon-flickr:before {
                                                  +  content: "\f16e";
                                                  +}
                                                  +.icon-adn:before {
                                                  +  content: "\f170";
                                                  +}
                                                  +.icon-bitbucket:before {
                                                  +  content: "\f171";
                                                  +}
                                                  +.icon-bitbucket-sign:before {
                                                  +  content: "\f172";
                                                  +}
                                                  +.icon-tumblr:before {
                                                  +  content: "\f173";
                                                  +}
                                                  +.icon-tumblr-sign:before {
                                                  +  content: "\f174";
                                                  +}
                                                  +.icon-long-arrow-down:before {
                                                  +  content: "\f175";
                                                  +}
                                                  +.icon-long-arrow-up:before {
                                                  +  content: "\f176";
                                                  +}
                                                  +.icon-long-arrow-left:before {
                                                  +  content: "\f177";
                                                  +}
                                                  +.icon-long-arrow-right:before {
                                                  +  content: "\f178";
                                                  +}
                                                  +.icon-apple:before {
                                                  +  content: "\f179";
                                                  +}
                                                  +.icon-windows:before {
                                                  +  content: "\f17a";
                                                  +}
                                                  +.icon-android:before {
                                                  +  content: "\f17b";
                                                  +}
                                                  +.icon-linux:before {
                                                  +  content: "\f17c";
                                                  +}
                                                  +.icon-dribbble:before {
                                                  +  content: "\f17d";
                                                  +}
                                                  +.icon-skype:before {
                                                  +  content: "\f17e";
                                                  +}
                                                  +.icon-foursquare:before {
                                                  +  content: "\f180";
                                                  +}
                                                  +.icon-trello:before {
                                                  +  content: "\f181";
                                                  +}
                                                  +.icon-female:before {
                                                  +  content: "\f182";
                                                  +}
                                                  +.icon-male:before {
                                                  +  content: "\f183";
                                                  +}
                                                  +.icon-gittip:before {
                                                  +  content: "\f184";
                                                  +}
                                                  +.icon-sun:before {
                                                  +  content: "\f185";
                                                  +}
                                                  +.icon-moon:before {
                                                  +  content: "\f186";
                                                  +}
                                                  +.icon-archive:before {
                                                  +  content: "\f187";
                                                  +}
                                                  +.icon-bug:before {
                                                  +  content: "\f188";
                                                  +}
                                                  +.icon-vk:before {
                                                  +  content: "\f189";
                                                  +}
                                                  +.icon-weibo:before {
                                                  +  content: "\f18a";
                                                  +}
                                                  +.icon-renren:before {
                                                  +  content: "\f18b";
                                                  +}
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/css/font-awesome.min.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/css/font-awesome.min.css
                                                  new file mode 100644
                                                  index 00000000..866437fa
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/css/font-awesome.min.css
                                                  @@ -0,0 +1,403 @@
                                                  +@font-face{font-family:'FontAwesome';src:url('../font/fontawesome-webfont.eot?v=3.2.1');src:url('../font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'),url('../font/fontawesome-webfont.woff?v=3.2.1') format('woff'),url('../font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'),url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');font-weight:normal;font-style:normal;}[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;}
                                                  +[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none;}
                                                  +.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em;}
                                                  +a [class^="icon-"],a [class*=" icon-"]{display:inline;}
                                                  +[class^="icon-"].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.1428571428571428em;text-align:right;padding-right:0.2857142857142857em;}[class^="icon-"].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.4285714285714286em;}
                                                  +.icons-ul{margin-left:2.142857142857143em;list-style-type:none;}.icons-ul>li{position:relative;}
                                                  +.icons-ul .icon-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;text-align:center;line-height:inherit;}
                                                  +[class^="icon-"].hide,[class*=" icon-"].hide{display:none;}
                                                  +.icon-muted{color:#eeeeee;}
                                                  +.icon-light{color:#ffffff;}
                                                  +.icon-dark{color:#333333;}
                                                  +.icon-border{border:solid 1px #eeeeee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
                                                  +.icon-2x{font-size:2em;}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
                                                  +.icon-3x{font-size:3em;}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
                                                  +.icon-4x{font-size:4em;}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}
                                                  +.icon-5x{font-size:5em;}.icon-5x.icon-border{border-width:5px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px;}
                                                  +.pull-right{float:right;}
                                                  +.pull-left{float:left;}
                                                  +[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em;}
                                                  +[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em;}
                                                  +[class^="icon-"],[class*=" icon-"]{display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0% 0%;background-repeat:repeat;margin-top:0;}
                                                  +.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:none;}
                                                  +.btn [class^="icon-"].icon-large,.nav [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large,.nav [class*=" icon-"].icon-large{line-height:.9em;}
                                                  +.btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block;}
                                                  +.nav-tabs [class^="icon-"],.nav-pills [class^="icon-"],.nav-tabs [class*=" icon-"],.nav-pills [class*=" icon-"],.nav-tabs [class^="icon-"].icon-large,.nav-pills [class^="icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large{line-height:.9em;}
                                                  +.btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.18em;}
                                                  +.btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{line-height:.8em;}
                                                  +.btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.25em;}
                                                  +.btn.btn-large [class^="icon-"],.btn.btn-large [class*=" icon-"]{margin-top:0;}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.05em;}
                                                  +.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x{margin-right:.2em;}
                                                  +.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-left:.2em;}
                                                  +.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{line-height:inherit;}
                                                  +.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%;}.icon-stack [class^="icon-"],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em;}
                                                  +.icon-stack .icon-stack-base{font-size:2em;*line-height:1em;}
                                                  +.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;}
                                                  +a .icon-stack,a .icon-spin{display:inline-block;text-decoration:none;}
                                                  +@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);} 100%{-moz-transform:rotate(359deg);}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);} 100%{-webkit-transform:rotate(359deg);}}@-o-keyframes spin{0%{-o-transform:rotate(0deg);} 100%{-o-transform:rotate(359deg);}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg);} 100%{-ms-transform:rotate(359deg);}}@keyframes spin{0%{transform:rotate(0deg);} 100%{transform:rotate(359deg);}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);}
                                                  +.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);}
                                                  +.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);}
                                                  +.icon-flip-horizontal:before{-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1);}
                                                  +.icon-flip-vertical:before{-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1);}
                                                  +a .icon-rotate-90:before,a .icon-rotate-180:before,a .icon-rotate-270:before,a .icon-flip-horizontal:before,a .icon-flip-vertical:before{display:inline-block;}
                                                  +.icon-glass:before{content:"\f000";}
                                                  +.icon-music:before{content:"\f001";}
                                                  +.icon-search:before{content:"\f002";}
                                                  +.icon-envelope-alt:before{content:"\f003";}
                                                  +.icon-heart:before{content:"\f004";}
                                                  +.icon-star:before{content:"\f005";}
                                                  +.icon-star-empty:before{content:"\f006";}
                                                  +.icon-user:before{content:"\f007";}
                                                  +.icon-film:before{content:"\f008";}
                                                  +.icon-th-large:before{content:"\f009";}
                                                  +.icon-th:before{content:"\f00a";}
                                                  +.icon-th-list:before{content:"\f00b";}
                                                  +.icon-ok:before{content:"\f00c";}
                                                  +.icon-remove:before{content:"\f00d";}
                                                  +.icon-zoom-in:before{content:"\f00e";}
                                                  +.icon-zoom-out:before{content:"\f010";}
                                                  +.icon-power-off:before,.icon-off:before{content:"\f011";}
                                                  +.icon-signal:before{content:"\f012";}
                                                  +.icon-gear:before,.icon-cog:before{content:"\f013";}
                                                  +.icon-trash:before{content:"\f014";}
                                                  +.icon-home:before{content:"\f015";}
                                                  +.icon-file-alt:before{content:"\f016";}
                                                  +.icon-time:before{content:"\f017";}
                                                  +.icon-road:before{content:"\f018";}
                                                  +.icon-download-alt:before{content:"\f019";}
                                                  +.icon-download:before{content:"\f01a";}
                                                  +.icon-upload:before{content:"\f01b";}
                                                  +.icon-inbox:before{content:"\f01c";}
                                                  +.icon-play-circle:before{content:"\f01d";}
                                                  +.icon-rotate-right:before,.icon-repeat:before{content:"\f01e";}
                                                  +.icon-refresh:before{content:"\f021";}
                                                  +.icon-list-alt:before{content:"\f022";}
                                                  +.icon-lock:before{content:"\f023";}
                                                  +.icon-flag:before{content:"\f024";}
                                                  +.icon-headphones:before{content:"\f025";}
                                                  +.icon-volume-off:before{content:"\f026";}
                                                  +.icon-volume-down:before{content:"\f027";}
                                                  +.icon-volume-up:before{content:"\f028";}
                                                  +.icon-qrcode:before{content:"\f029";}
                                                  +.icon-barcode:before{content:"\f02a";}
                                                  +.icon-tag:before{content:"\f02b";}
                                                  +.icon-tags:before{content:"\f02c";}
                                                  +.icon-book:before{content:"\f02d";}
                                                  +.icon-bookmark:before{content:"\f02e";}
                                                  +.icon-print:before{content:"\f02f";}
                                                  +.icon-camera:before{content:"\f030";}
                                                  +.icon-font:before{content:"\f031";}
                                                  +.icon-bold:before{content:"\f032";}
                                                  +.icon-italic:before{content:"\f033";}
                                                  +.icon-text-height:before{content:"\f034";}
                                                  +.icon-text-width:before{content:"\f035";}
                                                  +.icon-align-left:before{content:"\f036";}
                                                  +.icon-align-center:before{content:"\f037";}
                                                  +.icon-align-right:before{content:"\f038";}
                                                  +.icon-align-justify:before{content:"\f039";}
                                                  +.icon-list:before{content:"\f03a";}
                                                  +.icon-indent-left:before{content:"\f03b";}
                                                  +.icon-indent-right:before{content:"\f03c";}
                                                  +.icon-facetime-video:before{content:"\f03d";}
                                                  +.icon-picture:before{content:"\f03e";}
                                                  +.icon-pencil:before{content:"\f040";}
                                                  +.icon-map-marker:before{content:"\f041";}
                                                  +.icon-adjust:before{content:"\f042";}
                                                  +.icon-tint:before{content:"\f043";}
                                                  +.icon-edit:before{content:"\f044";}
                                                  +.icon-share:before{content:"\f045";}
                                                  +.icon-check:before{content:"\f046";}
                                                  +.icon-move:before{content:"\f047";}
                                                  +.icon-step-backward:before{content:"\f048";}
                                                  +.icon-fast-backward:before{content:"\f049";}
                                                  +.icon-backward:before{content:"\f04a";}
                                                  +.icon-play:before{content:"\f04b";}
                                                  +.icon-pause:before{content:"\f04c";}
                                                  +.icon-stop:before{content:"\f04d";}
                                                  +.icon-forward:before{content:"\f04e";}
                                                  +.icon-fast-forward:before{content:"\f050";}
                                                  +.icon-step-forward:before{content:"\f051";}
                                                  +.icon-eject:before{content:"\f052";}
                                                  +.icon-chevron-left:before{content:"\f053";}
                                                  +.icon-chevron-right:before{content:"\f054";}
                                                  +.icon-plus-sign:before{content:"\f055";}
                                                  +.icon-minus-sign:before{content:"\f056";}
                                                  +.icon-remove-sign:before{content:"\f057";}
                                                  +.icon-ok-sign:before{content:"\f058";}
                                                  +.icon-question-sign:before{content:"\f059";}
                                                  +.icon-info-sign:before{content:"\f05a";}
                                                  +.icon-screenshot:before{content:"\f05b";}
                                                  +.icon-remove-circle:before{content:"\f05c";}
                                                  +.icon-ok-circle:before{content:"\f05d";}
                                                  +.icon-ban-circle:before{content:"\f05e";}
                                                  +.icon-arrow-left:before{content:"\f060";}
                                                  +.icon-arrow-right:before{content:"\f061";}
                                                  +.icon-arrow-up:before{content:"\f062";}
                                                  +.icon-arrow-down:before{content:"\f063";}
                                                  +.icon-mail-forward:before,.icon-share-alt:before{content:"\f064";}
                                                  +.icon-resize-full:before{content:"\f065";}
                                                  +.icon-resize-small:before{content:"\f066";}
                                                  +.icon-plus:before{content:"\f067";}
                                                  +.icon-minus:before{content:"\f068";}
                                                  +.icon-asterisk:before{content:"\f069";}
                                                  +.icon-exclamation-sign:before{content:"\f06a";}
                                                  +.icon-gift:before{content:"\f06b";}
                                                  +.icon-leaf:before{content:"\f06c";}
                                                  +.icon-fire:before{content:"\f06d";}
                                                  +.icon-eye-open:before{content:"\f06e";}
                                                  +.icon-eye-close:before{content:"\f070";}
                                                  +.icon-warning-sign:before{content:"\f071";}
                                                  +.icon-plane:before{content:"\f072";}
                                                  +.icon-calendar:before{content:"\f073";}
                                                  +.icon-random:before{content:"\f074";}
                                                  +.icon-comment:before{content:"\f075";}
                                                  +.icon-magnet:before{content:"\f076";}
                                                  +.icon-chevron-up:before{content:"\f077";}
                                                  +.icon-chevron-down:before{content:"\f078";}
                                                  +.icon-retweet:before{content:"\f079";}
                                                  +.icon-shopping-cart:before{content:"\f07a";}
                                                  +.icon-folder-close:before{content:"\f07b";}
                                                  +.icon-folder-open:before{content:"\f07c";}
                                                  +.icon-resize-vertical:before{content:"\f07d";}
                                                  +.icon-resize-horizontal:before{content:"\f07e";}
                                                  +.icon-bar-chart:before{content:"\f080";}
                                                  +.icon-twitter-sign:before{content:"\f081";}
                                                  +.icon-facebook-sign:before{content:"\f082";}
                                                  +.icon-camera-retro:before{content:"\f083";}
                                                  +.icon-key:before{content:"\f084";}
                                                  +.icon-gears:before,.icon-cogs:before{content:"\f085";}
                                                  +.icon-comments:before{content:"\f086";}
                                                  +.icon-thumbs-up-alt:before{content:"\f087";}
                                                  +.icon-thumbs-down-alt:before{content:"\f088";}
                                                  +.icon-star-half:before{content:"\f089";}
                                                  +.icon-heart-empty:before{content:"\f08a";}
                                                  +.icon-signout:before{content:"\f08b";}
                                                  +.icon-linkedin-sign:before{content:"\f08c";}
                                                  +.icon-pushpin:before{content:"\f08d";}
                                                  +.icon-external-link:before{content:"\f08e";}
                                                  +.icon-signin:before{content:"\f090";}
                                                  +.icon-trophy:before{content:"\f091";}
                                                  +.icon-github-sign:before{content:"\f092";}
                                                  +.icon-upload-alt:before{content:"\f093";}
                                                  +.icon-lemon:before{content:"\f094";}
                                                  +.icon-phone:before{content:"\f095";}
                                                  +.icon-unchecked:before,.icon-check-empty:before{content:"\f096";}
                                                  +.icon-bookmark-empty:before{content:"\f097";}
                                                  +.icon-phone-sign:before{content:"\f098";}
                                                  +.icon-twitter:before{content:"\f099";}
                                                  +.icon-facebook:before{content:"\f09a";}
                                                  +.icon-github:before{content:"\f09b";}
                                                  +.icon-unlock:before{content:"\f09c";}
                                                  +.icon-credit-card:before{content:"\f09d";}
                                                  +.icon-rss:before{content:"\f09e";}
                                                  +.icon-hdd:before{content:"\f0a0";}
                                                  +.icon-bullhorn:before{content:"\f0a1";}
                                                  +.icon-bell:before{content:"\f0a2";}
                                                  +.icon-certificate:before{content:"\f0a3";}
                                                  +.icon-hand-right:before{content:"\f0a4";}
                                                  +.icon-hand-left:before{content:"\f0a5";}
                                                  +.icon-hand-up:before{content:"\f0a6";}
                                                  +.icon-hand-down:before{content:"\f0a7";}
                                                  +.icon-circle-arrow-left:before{content:"\f0a8";}
                                                  +.icon-circle-arrow-right:before{content:"\f0a9";}
                                                  +.icon-circle-arrow-up:before{content:"\f0aa";}
                                                  +.icon-circle-arrow-down:before{content:"\f0ab";}
                                                  +.icon-globe:before{content:"\f0ac";}
                                                  +.icon-wrench:before{content:"\f0ad";}
                                                  +.icon-tasks:before{content:"\f0ae";}
                                                  +.icon-filter:before{content:"\f0b0";}
                                                  +.icon-briefcase:before{content:"\f0b1";}
                                                  +.icon-fullscreen:before{content:"\f0b2";}
                                                  +.icon-group:before{content:"\f0c0";}
                                                  +.icon-link:before{content:"\f0c1";}
                                                  +.icon-cloud:before{content:"\f0c2";}
                                                  +.icon-beaker:before{content:"\f0c3";}
                                                  +.icon-cut:before{content:"\f0c4";}
                                                  +.icon-copy:before{content:"\f0c5";}
                                                  +.icon-paperclip:before,.icon-paper-clip:before{content:"\f0c6";}
                                                  +.icon-save:before{content:"\f0c7";}
                                                  +.icon-sign-blank:before{content:"\f0c8";}
                                                  +.icon-reorder:before{content:"\f0c9";}
                                                  +.icon-list-ul:before{content:"\f0ca";}
                                                  +.icon-list-ol:before{content:"\f0cb";}
                                                  +.icon-strikethrough:before{content:"\f0cc";}
                                                  +.icon-underline:before{content:"\f0cd";}
                                                  +.icon-table:before{content:"\f0ce";}
                                                  +.icon-magic:before{content:"\f0d0";}
                                                  +.icon-truck:before{content:"\f0d1";}
                                                  +.icon-pinterest:before{content:"\f0d2";}
                                                  +.icon-pinterest-sign:before{content:"\f0d3";}
                                                  +.icon-google-plus-sign:before{content:"\f0d4";}
                                                  +.icon-google-plus:before{content:"\f0d5";}
                                                  +.icon-money:before{content:"\f0d6";}
                                                  +.icon-caret-down:before{content:"\f0d7";}
                                                  +.icon-caret-up:before{content:"\f0d8";}
                                                  +.icon-caret-left:before{content:"\f0d9";}
                                                  +.icon-caret-right:before{content:"\f0da";}
                                                  +.icon-columns:before{content:"\f0db";}
                                                  +.icon-sort:before{content:"\f0dc";}
                                                  +.icon-sort-down:before{content:"\f0dd";}
                                                  +.icon-sort-up:before{content:"\f0de";}
                                                  +.icon-envelope:before{content:"\f0e0";}
                                                  +.icon-linkedin:before{content:"\f0e1";}
                                                  +.icon-rotate-left:before,.icon-undo:before{content:"\f0e2";}
                                                  +.icon-legal:before{content:"\f0e3";}
                                                  +.icon-dashboard:before{content:"\f0e4";}
                                                  +.icon-comment-alt:before{content:"\f0e5";}
                                                  +.icon-comments-alt:before{content:"\f0e6";}
                                                  +.icon-bolt:before{content:"\f0e7";}
                                                  +.icon-sitemap:before{content:"\f0e8";}
                                                  +.icon-umbrella:before{content:"\f0e9";}
                                                  +.icon-paste:before{content:"\f0ea";}
                                                  +.icon-lightbulb:before{content:"\f0eb";}
                                                  +.icon-exchange:before{content:"\f0ec";}
                                                  +.icon-cloud-download:before{content:"\f0ed";}
                                                  +.icon-cloud-upload:before{content:"\f0ee";}
                                                  +.icon-user-md:before{content:"\f0f0";}
                                                  +.icon-stethoscope:before{content:"\f0f1";}
                                                  +.icon-suitcase:before{content:"\f0f2";}
                                                  +.icon-bell-alt:before{content:"\f0f3";}
                                                  +.icon-coffee:before{content:"\f0f4";}
                                                  +.icon-food:before{content:"\f0f5";}
                                                  +.icon-file-text-alt:before{content:"\f0f6";}
                                                  +.icon-building:before{content:"\f0f7";}
                                                  +.icon-hospital:before{content:"\f0f8";}
                                                  +.icon-ambulance:before{content:"\f0f9";}
                                                  +.icon-medkit:before{content:"\f0fa";}
                                                  +.icon-fighter-jet:before{content:"\f0fb";}
                                                  +.icon-beer:before{content:"\f0fc";}
                                                  +.icon-h-sign:before{content:"\f0fd";}
                                                  +.icon-plus-sign-alt:before{content:"\f0fe";}
                                                  +.icon-double-angle-left:before{content:"\f100";}
                                                  +.icon-double-angle-right:before{content:"\f101";}
                                                  +.icon-double-angle-up:before{content:"\f102";}
                                                  +.icon-double-angle-down:before{content:"\f103";}
                                                  +.icon-angle-left:before{content:"\f104";}
                                                  +.icon-angle-right:before{content:"\f105";}
                                                  +.icon-angle-up:before{content:"\f106";}
                                                  +.icon-angle-down:before{content:"\f107";}
                                                  +.icon-desktop:before{content:"\f108";}
                                                  +.icon-laptop:before{content:"\f109";}
                                                  +.icon-tablet:before{content:"\f10a";}
                                                  +.icon-mobile-phone:before{content:"\f10b";}
                                                  +.icon-circle-blank:before{content:"\f10c";}
                                                  +.icon-quote-left:before{content:"\f10d";}
                                                  +.icon-quote-right:before{content:"\f10e";}
                                                  +.icon-spinner:before{content:"\f110";}
                                                  +.icon-circle:before{content:"\f111";}
                                                  +.icon-mail-reply:before,.icon-reply:before{content:"\f112";}
                                                  +.icon-github-alt:before{content:"\f113";}
                                                  +.icon-folder-close-alt:before{content:"\f114";}
                                                  +.icon-folder-open-alt:before{content:"\f115";}
                                                  +.icon-expand-alt:before{content:"\f116";}
                                                  +.icon-collapse-alt:before{content:"\f117";}
                                                  +.icon-smile:before{content:"\f118";}
                                                  +.icon-frown:before{content:"\f119";}
                                                  +.icon-meh:before{content:"\f11a";}
                                                  +.icon-gamepad:before{content:"\f11b";}
                                                  +.icon-keyboard:before{content:"\f11c";}
                                                  +.icon-flag-alt:before{content:"\f11d";}
                                                  +.icon-flag-checkered:before{content:"\f11e";}
                                                  +.icon-terminal:before{content:"\f120";}
                                                  +.icon-code:before{content:"\f121";}
                                                  +.icon-reply-all:before{content:"\f122";}
                                                  +.icon-mail-reply-all:before{content:"\f122";}
                                                  +.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123";}
                                                  +.icon-location-arrow:before{content:"\f124";}
                                                  +.icon-crop:before{content:"\f125";}
                                                  +.icon-code-fork:before{content:"\f126";}
                                                  +.icon-unlink:before{content:"\f127";}
                                                  +.icon-question:before{content:"\f128";}
                                                  +.icon-info:before{content:"\f129";}
                                                  +.icon-exclamation:before{content:"\f12a";}
                                                  +.icon-superscript:before{content:"\f12b";}
                                                  +.icon-subscript:before{content:"\f12c";}
                                                  +.icon-eraser:before{content:"\f12d";}
                                                  +.icon-puzzle-piece:before{content:"\f12e";}
                                                  +.icon-microphone:before{content:"\f130";}
                                                  +.icon-microphone-off:before{content:"\f131";}
                                                  +.icon-shield:before{content:"\f132";}
                                                  +.icon-calendar-empty:before{content:"\f133";}
                                                  +.icon-fire-extinguisher:before{content:"\f134";}
                                                  +.icon-rocket:before{content:"\f135";}
                                                  +.icon-maxcdn:before{content:"\f136";}
                                                  +.icon-chevron-sign-left:before{content:"\f137";}
                                                  +.icon-chevron-sign-right:before{content:"\f138";}
                                                  +.icon-chevron-sign-up:before{content:"\f139";}
                                                  +.icon-chevron-sign-down:before{content:"\f13a";}
                                                  +.icon-html5:before{content:"\f13b";}
                                                  +.icon-css3:before{content:"\f13c";}
                                                  +.icon-anchor:before{content:"\f13d";}
                                                  +.icon-unlock-alt:before{content:"\f13e";}
                                                  +.icon-bullseye:before{content:"\f140";}
                                                  +.icon-ellipsis-horizontal:before{content:"\f141";}
                                                  +.icon-ellipsis-vertical:before{content:"\f142";}
                                                  +.icon-rss-sign:before{content:"\f143";}
                                                  +.icon-play-sign:before{content:"\f144";}
                                                  +.icon-ticket:before{content:"\f145";}
                                                  +.icon-minus-sign-alt:before{content:"\f146";}
                                                  +.icon-check-minus:before{content:"\f147";}
                                                  +.icon-level-up:before{content:"\f148";}
                                                  +.icon-level-down:before{content:"\f149";}
                                                  +.icon-check-sign:before{content:"\f14a";}
                                                  +.icon-edit-sign:before{content:"\f14b";}
                                                  +.icon-external-link-sign:before{content:"\f14c";}
                                                  +.icon-share-sign:before{content:"\f14d";}
                                                  +.icon-compass:before{content:"\f14e";}
                                                  +.icon-collapse:before{content:"\f150";}
                                                  +.icon-collapse-top:before{content:"\f151";}
                                                  +.icon-expand:before{content:"\f152";}
                                                  +.icon-euro:before,.icon-eur:before{content:"\f153";}
                                                  +.icon-gbp:before{content:"\f154";}
                                                  +.icon-dollar:before,.icon-usd:before{content:"\f155";}
                                                  +.icon-rupee:before,.icon-inr:before{content:"\f156";}
                                                  +.icon-yen:before,.icon-jpy:before{content:"\f157";}
                                                  +.icon-renminbi:before,.icon-cny:before{content:"\f158";}
                                                  +.icon-won:before,.icon-krw:before{content:"\f159";}
                                                  +.icon-bitcoin:before,.icon-btc:before{content:"\f15a";}
                                                  +.icon-file:before{content:"\f15b";}
                                                  +.icon-file-text:before{content:"\f15c";}
                                                  +.icon-sort-by-alphabet:before{content:"\f15d";}
                                                  +.icon-sort-by-alphabet-alt:before{content:"\f15e";}
                                                  +.icon-sort-by-attributes:before{content:"\f160";}
                                                  +.icon-sort-by-attributes-alt:before{content:"\f161";}
                                                  +.icon-sort-by-order:before{content:"\f162";}
                                                  +.icon-sort-by-order-alt:before{content:"\f163";}
                                                  +.icon-thumbs-up:before{content:"\f164";}
                                                  +.icon-thumbs-down:before{content:"\f165";}
                                                  +.icon-youtube-sign:before{content:"\f166";}
                                                  +.icon-youtube:before{content:"\f167";}
                                                  +.icon-xing:before{content:"\f168";}
                                                  +.icon-xing-sign:before{content:"\f169";}
                                                  +.icon-youtube-play:before{content:"\f16a";}
                                                  +.icon-dropbox:before{content:"\f16b";}
                                                  +.icon-stackexchange:before{content:"\f16c";}
                                                  +.icon-instagram:before{content:"\f16d";}
                                                  +.icon-flickr:before{content:"\f16e";}
                                                  +.icon-adn:before{content:"\f170";}
                                                  +.icon-bitbucket:before{content:"\f171";}
                                                  +.icon-bitbucket-sign:before{content:"\f172";}
                                                  +.icon-tumblr:before{content:"\f173";}
                                                  +.icon-tumblr-sign:before{content:"\f174";}
                                                  +.icon-long-arrow-down:before{content:"\f175";}
                                                  +.icon-long-arrow-up:before{content:"\f176";}
                                                  +.icon-long-arrow-left:before{content:"\f177";}
                                                  +.icon-long-arrow-right:before{content:"\f178";}
                                                  +.icon-apple:before{content:"\f179";}
                                                  +.icon-windows:before{content:"\f17a";}
                                                  +.icon-android:before{content:"\f17b";}
                                                  +.icon-linux:before{content:"\f17c";}
                                                  +.icon-dribbble:before{content:"\f17d";}
                                                  +.icon-skype:before{content:"\f17e";}
                                                  +.icon-foursquare:before{content:"\f180";}
                                                  +.icon-trello:before{content:"\f181";}
                                                  +.icon-female:before{content:"\f182";}
                                                  +.icon-male:before{content:"\f183";}
                                                  +.icon-gittip:before{content:"\f184";}
                                                  +.icon-sun:before{content:"\f185";}
                                                  +.icon-moon:before{content:"\f186";}
                                                  +.icon-archive:before{content:"\f187";}
                                                  +.icon-bug:before{content:"\f188";}
                                                  +.icon-vk:before{content:"\f189";}
                                                  +.icon-weibo:before{content:"\f18a";}
                                                  +.icon-renren:before{content:"\f18b";}
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/FontAwesome.otf b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/FontAwesome.otf
                                                  new file mode 100644
                                                  index 00000000..70125459
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/FontAwesome.otf differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/fontawesome-webfont.eot b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/fontawesome-webfont.eot
                                                  new file mode 100644
                                                  index 00000000..0662cb96
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/fontawesome-webfont.eot differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/fontawesome-webfont.svg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/fontawesome-webfont.svg
                                                  new file mode 100644
                                                  index 00000000..2edb4ec3
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/fontawesome-webfont.svg
                                                  @@ -0,0 +1,399 @@
                                                  +<?xml version="1.0" standalone="no"?>
                                                  +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
                                                  +<svg xmlns="http://www.w3.org/2000/svg">
                                                  +<metadata></metadata>
                                                  +<defs>
                                                  +<font id="fontawesomeregular" horiz-adv-x="1536" >
                                                  +<font-face units-per-em="1792" ascent="1536" descent="-256" />
                                                  +<missing-glyph horiz-adv-x="448" />
                                                  +<glyph unicode=" "  horiz-adv-x="448" />
                                                  +<glyph unicode="&#x09;" horiz-adv-x="448" />
                                                  +<glyph unicode="&#xa0;" horiz-adv-x="448" />
                                                  +<glyph unicode="&#xa8;" horiz-adv-x="1792" />
                                                  +<glyph unicode="&#xa9;" horiz-adv-x="1792" />
                                                  +<glyph unicode="&#xae;" horiz-adv-x="1792" />
                                                  +<glyph unicode="&#xb4;" horiz-adv-x="1792" />
                                                  +<glyph unicode="&#xc6;" horiz-adv-x="1792" />
                                                  +<glyph unicode="&#x2000;" horiz-adv-x="768" />
                                                  +<glyph unicode="&#x2001;" />
                                                  +<glyph unicode="&#x2002;" horiz-adv-x="768" />
                                                  +<glyph unicode="&#x2003;" />
                                                  +<glyph unicode="&#x2004;" horiz-adv-x="512" />
                                                  +<glyph unicode="&#x2005;" horiz-adv-x="384" />
                                                  +<glyph unicode="&#x2006;" horiz-adv-x="256" />
                                                  +<glyph unicode="&#x2007;" horiz-adv-x="256" />
                                                  +<glyph unicode="&#x2008;" horiz-adv-x="192" />
                                                  +<glyph unicode="&#x2009;" horiz-adv-x="307" />
                                                  +<glyph unicode="&#x200a;" horiz-adv-x="85" />
                                                  +<glyph unicode="&#x202f;" horiz-adv-x="307" />
                                                  +<glyph unicode="&#x205f;" horiz-adv-x="384" />
                                                  +<glyph unicode="&#x2122;" horiz-adv-x="1792" />
                                                  +<glyph unicode="&#x221e;" horiz-adv-x="1792" />
                                                  +<glyph unicode="&#x2260;" horiz-adv-x="1792" />
                                                  +<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
                                                  +<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
                                                  +<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
                                                  +<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
                                                  +<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
                                                  +<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
                                                  +<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
                                                  +<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
                                                  +<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
                                                  +<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
                                                  +<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
                                                  +<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
                                                  +<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
                                                  +<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
                                                  +<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
                                                  +<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
                                                  +<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
                                                  +<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
                                                  +<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
                                                  +<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
                                                  +<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
                                                  +<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
                                                  +<glyph unicode="&#xf016;" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " />
                                                  +<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
                                                  +<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
                                                  +<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
                                                  +<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
                                                  +<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
                                                  +<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
                                                  +<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
                                                  +<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
                                                  +<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
                                                  +<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
                                                  +<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
                                                  +<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
                                                  +<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
                                                  +<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
                                                  +<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
                                                  +<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
                                                  +<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
                                                  +<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" />
                                                  +<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" />
                                                  +<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" />
                                                  +<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" />
                                                  +<glyph unicode="&#xf035;" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" />
                                                  +<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
                                                  +<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
                                                  +<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
                                                  +<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
                                                  +<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
                                                  +<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
                                                  +<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
                                                  +<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
                                                  +<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
                                                  +<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
                                                  +<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
                                                  +<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
                                                  +<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
                                                  +<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
                                                  +<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
                                                  +<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
                                                  +<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
                                                  +<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
                                                  +<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
                                                  +<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
                                                  +<glyph unicode="&#xf053;" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
                                                  +<glyph unicode="&#xf054;" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
                                                  +<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
                                                  +<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
                                                  +<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
                                                  +<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
                                                  +<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
                                                  +<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
                                                  +<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
                                                  +<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
                                                  +<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
                                                  +<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
                                                  +<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
                                                  +<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
                                                  +<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
                                                  +<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
                                                  +<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
                                                  +<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
                                                  +<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
                                                  +<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
                                                  +<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
                                                  +<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
                                                  +<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
                                                  +<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
                                                  +<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf077;" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
                                                  +<glyph unicode="&#xf078;" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
                                                  +<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
                                                  +<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
                                                  +<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
                                                  +<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
                                                  +<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
                                                  +<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
                                                  +<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf082;" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
                                                  +<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
                                                  +<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
                                                  +<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
                                                  +<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
                                                  +<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
                                                  +<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
                                                  +<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
                                                  +<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
                                                  +<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
                                                  +<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
                                                  +<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
                                                  +<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
                                                  +<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
                                                  +<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
                                                  +<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
                                                  +<glyph unicode="&#xf09a;" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" />
                                                  +<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
                                                  +<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
                                                  +<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
                                                  +<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
                                                  +<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
                                                  +<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
                                                  +<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
                                                  +<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
                                                  +<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
                                                  +<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
                                                  +<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
                                                  +<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
                                                  +<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
                                                  +<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
                                                  +<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
                                                  +<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
                                                  +<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
                                                  +<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
                                                  +<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
                                                  +<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
                                                  +<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
                                                  +<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
                                                  +<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
                                                  +<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
                                                  +<glyph unicode="&#xf0c8;" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
                                                  +<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
                                                  +<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
                                                  +<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
                                                  +<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
                                                  +<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
                                                  +<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
                                                  +<glyph unicode="&#xf0d4;" d="M678 -57q0 -38 -10 -71h-380q-95 0 -171.5 56.5t-103.5 147.5q24 45 69 77.5t100 49.5t107 24t107 7q32 0 49 -2q6 -4 30.5 -21t33 -23t31 -23t32 -25.5t27.5 -25.5t26.5 -29.5t21 -30.5t17.5 -34.5t9.5 -36t4.5 -40.5zM385 294q-234 -7 -385 -85v433q103 -118 273 -118 q32 0 70 5q-21 -61 -21 -86q0 -67 63 -149zM558 805q0 -100 -43.5 -160.5t-140.5 -60.5q-51 0 -97 26t-78 67.5t-56 93.5t-35.5 104t-11.5 99q0 96 51.5 165t144.5 69q66 0 119 -41t84 -104t47 -130t16 -128zM1536 896v-736q0 -119 -84.5 -203.5t-203.5 -84.5h-468 q39 73 39 157q0 66 -22 122.5t-55.5 93t-72 71t-72 59.5t-55.5 54.5t-22 59.5q0 36 23 68t56 61.5t65.5 64.5t55.5 93t23 131t-26.5 145.5t-75.5 118.5q-6 6 -14 11t-12.5 7.5t-10 9.5t-10.5 17h135l135 64h-437q-138 0 -244.5 -38.5t-182.5 -133.5q0 126 81 213t207 87h960 q119 0 203.5 -84.5t84.5 -203.5v-96h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" />
                                                  +<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M876 71q0 21 -4.5 40.5t-9.5 36t-17.5 34.5t-21 30.5t-26.5 29.5t-27.5 25.5t-32 25.5t-31 23t-33 23t-30.5 21q-17 2 -50 2q-54 0 -106 -7t-108 -25t-98 -46t-69 -75t-27 -107q0 -68 35.5 -121.5t93 -84t120.5 -45.5t127 -15q59 0 112.5 12.5t100.5 39t74.5 73.5 t27.5 110zM756 933q0 60 -16.5 127.5t-47 130.5t-84 104t-119.5 41q-93 0 -144 -69t-51 -165q0 -47 11.5 -99t35.5 -104t56 -93.5t78 -67.5t97 -26q97 0 140.5 60.5t43.5 160.5zM625 1408h437l-135 -79h-135q71 -45 110 -126t39 -169q0 -74 -23 -131.5t-56 -92.5t-66 -64.5 t-56 -61t-23 -67.5q0 -26 16.5 -51t43 -48t58.5 -48t64 -55.5t58.5 -66t43 -85t16.5 -106.5q0 -160 -140 -282q-152 -131 -420 -131q-59 0 -119.5 10t-122 33.5t-108.5 58t-77 89t-30 121.5q0 61 37 135q32 64 96 110.5t145 71t155 36t150 13.5q-64 83 -64 149q0 12 2 23.5 t5 19.5t8 21.5t7 21.5q-40 -5 -70 -5q-149 0 -255.5 98t-106.5 246q0 140 95 250.5t234 141.5q94 20 187 20zM1664 1152v-128h-256v-256h-128v256h-256v128h256v256h128v-256h256z" />
                                                  +<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
                                                  +<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
                                                  +<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
                                                  +<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
                                                  +<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
                                                  +<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
                                                  +<glyph unicode="&#xf0e1;" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
                                                  +<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
                                                  +<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
                                                  +<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
                                                  +<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
                                                  +<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
                                                  +<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
                                                  +<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
                                                  +<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
                                                  +<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
                                                  +<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
                                                  +<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
                                                  +<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
                                                  +<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
                                                  +<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
                                                  +<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
                                                  +<glyph unicode="&#xf0f3;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1664 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5 q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
                                                  +<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
                                                  +<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf0f6;" horiz-adv-x="1280" d="M1024 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1024 608v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280z M768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z" />
                                                  +<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
                                                  +<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
                                                  +<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
                                                  +<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
                                                  +<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
                                                  +<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
                                                  +<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
                                                  +<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
                                                  +<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
                                                  +<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
                                                  +<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
                                                  +<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
                                                  +<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
                                                  +<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
                                                  +<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
                                                  +<glyph unicode="&#xf10c;" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
                                                  +<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
                                                  +<glyph unicode="&#xf110;" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" />
                                                  +<glyph unicode="&#xf111;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
                                                  +<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
                                                  +<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
                                                  +<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
                                                  +<glyph unicode="&#xf116;" horiz-adv-x="1152" d="M896 608v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h224q14 0 23 -9t9 -23zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28 t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68zM1152 928v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704q93 0 158.5 -65.5t65.5 -158.5z" />
                                                  +<glyph unicode="&#xf117;" horiz-adv-x="1152" d="M928 1152q93 0 158.5 -65.5t65.5 -158.5v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68z M864 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576z" />
                                                  +<glyph unicode="&#xf118;" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf119;" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf11a;" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
                                                  +<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
                                                  +<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
                                                  +<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
                                                  +<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
                                                  +<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
                                                  +<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
                                                  +<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
                                                  +<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
                                                  +<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
                                                  +<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
                                                  +<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
                                                  +<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
                                                  +<glyph unicode="&#xf129;" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
                                                  +<glyph unicode="&#xf12b;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
                                                  +<glyph unicode="&#xf12c;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
                                                  +<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
                                                  +<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
                                                  +<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
                                                  +<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
                                                  +<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
                                                  +<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
                                                  +<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
                                                  +<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1708 881l-188 -881h-304l181 849q4 21 1 43q-4 20 -16 35q-10 14 -28 24q-18 9 -40 9h-197l-205 -960h-303l204 960h-304l-205 -960h-304l272 1280h1139q157 0 245 -118q86 -116 52 -281z" />
                                                  +<glyph unicode="&#xf137;" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf138;" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf139;" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf13a;" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
                                                  +<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
                                                  +<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
                                                  +<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
                                                  +<glyph unicode="&#xf140;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
                                                  +<glyph unicode="&#xf142;" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
                                                  +<glyph unicode="&#xf143;" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf144;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
                                                  +<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
                                                  +<glyph unicode="&#xf146;" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf148;" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
                                                  +<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
                                                  +<glyph unicode="&#xf14a;" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf14b;" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf14c;" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf14d;" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf14e;" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf150;" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf151;" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf152;" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf153;" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
                                                  +<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
                                                  +<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
                                                  +<glyph unicode="&#xf156;" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
                                                  +<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
                                                  +<glyph unicode="&#xf158;" horiz-adv-x="1664" d="M1664 352v-32q0 -132 -94 -226t-226 -94h-128q-132 0 -226 94t-94 226v480h-224q-2 -102 -14.5 -190.5t-30.5 -156t-48.5 -126.5t-57 -99.5t-67.5 -77.5t-69.5 -58.5t-74 -44t-69 -32t-65.5 -25.5q-4 -2 -32 -13q-8 -2 -12 -2q-22 0 -30 20l-71 178q-5 13 0 25t17 17 q7 3 20 7.5t18 6.5q31 12 46.5 18.5t44.5 20t45.5 26t42 32.5t40.5 42.5t34.5 53.5t30.5 68.5t22.5 83.5t17 103t6.5 123h-256q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h1216q14 0 23 -9t9 -23v-160q0 -14 -9 -23t-23 -9h-224v-512q0 -26 19 -45t45 -19h128q26 0 45 19t19 45 v64q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1280 1376v-160q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h960q14 0 23 -9t9 -23z" />
                                                  +<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
                                                  +<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
                                                  +<glyph unicode="&#xf15b;" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
                                                  +<glyph unicode="&#xf15c;" horiz-adv-x="1280" d="M1024 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1024 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28 t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
                                                  +<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
                                                  +<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
                                                  +<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
                                                  +<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
                                                  +<glyph unicode="&#xf162;" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
                                                  +<glyph unicode="&#xf163;" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
                                                  +<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
                                                  +<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
                                                  +<glyph unicode="&#xf166;" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf167;" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
                                                  +<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
                                                  +<glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
                                                  +<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
                                                  +<glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
                                                  +<glyph unicode="&#xf16d;" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
                                                  +<glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
                                                  +<glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
                                                  +<glyph unicode="&#xf172;" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf173;" horiz-adv-x="1024" d="M390 1408h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170v217q91 30 155 84q64 55 103 132q39 78 54 196z " />
                                                  +<glyph unicode="&#xf174;" d="M1123 127v181q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
                                                  +<glyph unicode="&#xf175;" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
                                                  +<glyph unicode="&#xf176;" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
                                                  +<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
                                                  +<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
                                                  +<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
                                                  +<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
                                                  +<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
                                                  +<glyph unicode="&#xf17c;" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
                                                  +<glyph unicode="&#xf17d;" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf17e;" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
                                                  +<glyph unicode="&#xf180;" horiz-adv-x="1664" d="M1483 512l-587 -587q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128t53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41 l619 619l2 -3q53 -53 53 -128t-53 -128zM1406 1138l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15v0q-4 0 -6 1q-18 2 -30 14l-407 408q-14 15 -14 36t14 35l121 120q13 15 35 15t36 -15l252 -252l574 575q15 15 36 15t36 -15z" />
                                                  +<glyph unicode="&#xf181;" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
                                                  +<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
                                                  +<glyph unicode="&#xf184;" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
                                                  +<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
                                                  +<glyph unicode="&#xf186;" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
                                                  +<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
                                                  +<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
                                                  +<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
                                                  +<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
                                                  +<glyph unicode="&#xf18b;" horiz-adv-x="1920" d="M805 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM453 1176v-344q0 -179 -89.5 -326t-234.5 -217q-129 152 -129 351q0 200 129.5 352t323.5 184zM958 991q-128 -152 -128 -351q0 -201 128 -351q-145 70 -234.5 218t-89.5 328 v341q196 -33 324 -185zM1638 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM1286 1176v-344q0 -179 -91 -326t-237 -217v0q133 154 133 351q0 195 -133 351q129 151 328 185zM1920 640q0 -201 -129 -351q-145 70 -234.5 218 t-89.5 328v341q194 -32 323.5 -184t129.5 -352z" />
                                                  +<glyph unicode="&#xf18c;" horiz-adv-x="1792" />
                                                  +<glyph unicode="&#xf18d;" horiz-adv-x="1792" />
                                                  +<glyph unicode="&#xf18e;" horiz-adv-x="1792" />
                                                  +<glyph unicode="&#xf500;" horiz-adv-x="1792" />
                                                  +</font>
                                                  +</defs></svg> 
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/fontawesome-webfont.ttf b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/fontawesome-webfont.ttf
                                                  new file mode 100644
                                                  index 00000000..d3659246
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/fontawesome-webfont.ttf differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/fontawesome-webfont.woff b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/fontawesome-webfont.woff
                                                  new file mode 100644
                                                  index 00000000..b9bd17e1
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/Font-Awesome/font/fontawesome-webfont.woff differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.dev.svg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.dev.svg
                                                  new file mode 100644
                                                  index 00000000..f0937f9c
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.dev.svg
                                                  @@ -0,0 +1,375 @@
                                                  +<?xml version="1.0" standalone="no"?>
                                                  +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
                                                  +<svg xmlns="http://www.w3.org/2000/svg">
                                                  +<metadata>
                                                  +This is a custom SVG font generated by IcoMoon.
                                                  +<iconset grid="16"></iconset>
                                                  +</metadata>
                                                  +<defs>
                                                  +<font id="eightyshades" horiz-adv-x="512" >
                                                  +<font-face units-per-em="512" ascent="480" descent="-32" />
                                                  +<missing-glyph horiz-adv-x="512" />
                                                  +<glyph unicode="&#xe000;" d="M 480.00,32.00l-32.00,0.00 l0.00,64.00 c0.00,17.672-14.312,32.00-32.00,32.00s-32.00-14.328-32.00-32.00l0.00-64.00 L 128.00,32.00 l0.00,64.00 
                                                  +			c0.00,17.672-14.312,32.00-32.00,32.00s-32.00-14.328-32.00-32.00l0.00-64.00 L 32.00,32.00 c-17.688,0.00-32.00-14.328-32.00-32.00s 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.328, 32.00,32.00
                                                  +			S 497.688,32.00, 480.00,32.00z M 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.672,0.00,448.00l0.00-192.00 c0.00-35.344, 28.656-64.00, 64.00-64.00s 64.00,28.656, 64.00,64.00c0.00-35.344, 28.656-64.00, 64.00-64.00
                                                  +			s 64.00,28.656, 64.00,64.00c0.00-35.344, 28.656-64.00, 64.00-64.00s 64.00,28.656, 64.00,64.00c0.00-35.344, 28.656-64.00, 64.00-64.00s 64.00,28.656, 64.00,64.00L 512.00,448.00 
                                                  +			C 512.00,465.672, 497.688,480.00, 480.00,480.00z" data-tags="store" />
                                                  +<glyph unicode="&#xe001;" d="M 480.00,256.00c-17.688,0.00-32.00-14.328-32.00-32.00l0.00-192.00 L 64.00,32.00 L 64.00,224.00 c0.00,17.672-14.312,32.00-32.00,32.00
                                                  +		S0.00,241.672,0.00,224.00l0.00-224.00 c0.00-17.672, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.328, 32.00,32.00L 512.00,224.00 C 512.00,241.672, 497.688,256.00, 480.00,256.00zM 224.00,160.00c0.00-17.672, 14.312-32.00, 32.00-32.00s 32.00,14.328, 32.00,32.00L 288.00,352.00 l 96.00,0.00 L 256.00,480.00L 128.00,352.00l 96.00,0.00 L 224.00,160.00 z
                                                  +		" data-tags="out" />
                                                  +<glyph unicode="&#xe002;" d="M 480.00,256.00c-17.688,0.00-32.00-14.328-32.00-32.00l0.00-192.00 L 64.00,32.00 L 64.00,224.00 c0.00,17.672-14.312,32.00-32.00,32.00
                                                  +	S0.00,241.672,0.00,224.00l0.00-224.00 c0.00-17.672, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.328, 32.00,32.00L 512.00,224.00 C 512.00,241.672, 497.688,256.00, 480.00,256.00zM 288.00,256.00L 288.00,451.909 C 288.00,467.422, 273.688,480.00, 256.00,480.00s-32.00-12.578-32.00-28.091L 224.00,256.00 l-96.00,0.00 l 128.00-128.00
                                                  +	l 128.00,128.00L 288.00,256.00 z" data-tags="in" />
                                                  +<glyph unicode="&#xe003;" d="M 480.00,480.00L 256.00,480.00 c-17.688,0.00-32.00-14.328-32.00-32.00s 14.312-32.00, 32.00-32.00l 192.00,0.00 l0.00-384.00 L 256.00,32.00 
                                                  +		c-17.688,0.00-32.00-14.328-32.00-32.00s 14.312-32.00, 32.00-32.00l 224.00,0.00 c 17.688,0.00, 32.00,14.328, 32.00,32.00L 512.00,448.00 C 512.00,465.672, 497.688,480.00, 480.00,480.00zM 224.00,96.00l 128.00,128.00L 224.00,352.00l0.00-96.00 L 28.591,256.00 C 12.788,256.00,0.00,241.672,0.00,224.00
                                                  +		s 12.788-32.00, 28.591-32.00L 224.00,192.00 L 224.00,96.00 z" data-tags="in (alt)" />
                                                  +<glyph unicode="&#xe004;" d="M 502.688,281.516L 313.579,470.609c-7.217,7.248-16.901,10.044-26.368,9.263l-62.422,0.00 
                                                  +	c-9.466,0.781-19.151-2.015-26.368-9.263l-38.396-38.397L 160.025,479.872 L 64.049,479.872 l0.00-143.636 L 9.312,281.516
                                                  +	c-7.248-7.248-10.028-16.917-9.247-26.368l0.00-63.202 c0.00-17.668, 14.309-31.993, 31.991-31.993l 31.992,0.00 l0.00-159.959 
                                                  +	c0.00-17.668, 14.309-31.992, 31.992-31.992L 415.96-31.998 c 17.683,0.00, 31.992,14.324, 31.992,31.992L 447.952,159.952 l 31.991,0.00 
                                                  +	c 17.684,0.00, 31.992,14.325, 31.992,31.993l0.00,63.202 C 512.717,264.599, 509.937,274.268, 502.688,281.516z M 447.952,223.937l-63.984,0.00 l0.00-191.951 
                                                  +	l-63.983,0.00 L 319.985,159.952 L 192.017,159.952 l0.00-127.967 l-63.984,0.00 L 128.033,223.937 L 64.049,223.937 l0.00,17.746 L 238.255,415.889l 35.491,0.00 l 174.206-174.206L 447.952,223.937 z" data-tags="home" />
                                                  +<glyph unicode="&#xe005;" d="M 272.00,480.00l-32.00,0.00 C 142.781,480.00, 64.00,401.203, 64.00,304.00c0.00-68.398, 39.009-127.682, 96.00-156.812L 160.00,128.00 
                                                  +	c0.00-17.672, 14.312-32.00, 32.00-32.00l 128.00,0.00 c 17.688,0.00, 32.00,14.328, 32.00,32.00l0.00,19.195 c 56.982,29.133, 96.00,88.412, 96.00,156.805C 448.00,401.203, 369.188,480.00, 272.00,480.00z
                                                  +	 M 288.00,193.143L 288.00,160.00 l-64.00,0.00 l0.00,33.143 c-54.267,7.766-96.00,54.433-96.00,110.857c0.00,61.859, 50.156,112.00, 112.00,112.00l 32.00,0.00 c 61.844,0.00, 112.00-50.141, 112.00-112.00
                                                  +	C 384.00,247.575, 342.267,200.908, 288.00,193.143zM 208.00,64.00l 96.00,0.00 c 8.844,0.00, 16.00-7.172, 16.00-16.00s-7.156-16.00-16.00-16.00l-96.00,0.00 c-8.844,0.00-16.00,7.172-16.00,16.00
                                                  +	S 199.156,64.00, 208.00,64.00zM 240.00,0.00l 32.00,0.00 c 8.844,0.00, 16.00-7.172, 16.00-16.00s-7.156-16.00-16.00-16.00l-32.00,0.00 c-8.844,0.00-16.00,7.172-16.00,16.00
                                                  +	S 231.156,0.00, 240.00,0.00z" data-tags="light bulb" />
                                                  +<glyph unicode="&#xe006;" d="M 472.934,71.086C 425.871,7.322, 343.936-32.739, 256.00-31.989
                                                  +	c-87.936-0.75-169.872,39.312-216.934,103.075L 0.005,32.009L 0.005,160.006 l 127.997,0.00 l-35.187-35.17
                                                  +	c 28.219-46.719, 75.437-80.296, 131.185-89.812L 224.00,228.537 c-55.123,14.265-95.998,63.889-95.998,123.466C 128.002,422.688, 185.314,480.00, 256.00,480.00
                                                  +	c 70.685,0.00, 127.998-57.312, 127.998-127.998c0.00-59.577-40.875-109.201-95.998-123.466l0.00-193.512 
                                                  +	c 55.748,9.516, 102.967,43.093, 131.184,89.812l-35.186,35.17l 127.996,0.00 l0.00-127.997 L 472.934,71.086z M 319.998,352.002
                                                  +	c0.00,35.343-28.654,63.999-63.998,63.999c-35.344,0.00-63.999-28.656-63.999-63.999c0.00-35.343, 28.655-63.999, 63.999-63.999
                                                  +	C 291.344,288.004, 319.998,316.66, 319.998,352.002z" data-tags="anchor" />
                                                  +<glyph unicode="&#xe007;" d="M 433.206,437.378c-17.889,9.862-67.20,34.145-99.369,40.817
                                                  +	c-33.414,6.938-83.13-123.527-98.935-124.103C 209.267,353.175, 231.791,443.164, 256.151,480.00c-38.019-25.387-105.561-59.47-121.365-98.67
                                                  +	c-30.552-75.756, 56.622-212.086, 10.111-219.926c-14.498-2.442-54.663,94.019-65.085,123.449
                                                  +	c-29.463-56.312-7.28-109.029, 17.08-174.893l0.00-4.09 c-0.934-3.562-1.742-6.97-2.583-10.438l 2.583,0.00 l0.00-95.574 
                                                  +	c0.00-17.609, 14.249-31.858, 31.857-31.858c 17.609,0.00, 31.858,14.249, 31.858,31.858l0.00,95.574 l0.00,1.011 
                                                  +	c 59.454,6.689, 87.423-12.802, 128.147,64.416c-24.857-10.281-74.48,21.047-64.183,35.841c 20.689,29.773, 105.281-1.681, 159.197,89.834
                                                  +	c-85.339-22.742-95.419,9.862-96.228,21.747c-1.711,24.608, 85.308,11.573, 124.975,45.78
                                                  +	C 435.509,373.895, 463.073,420.889, 433.206,437.378z" data-tags="feather" />
                                                  +<glyph unicode="&#xe008;" d="M 178.375,192.188L 73.094,86.906L 32.00,128.00c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-96.00 
                                                  +			c0.00-17.688, 14.312-32.00, 32.00-32.00l 96.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00l-41.094,41.062l 105.281,105.312L 178.375,192.188z M 480.00,480.00l-96.00,0.00 
                                                  +			c-17.688,0.00-32.00-14.328-32.00-32.00l 41.094-41.094L 287.812,301.625l 45.812-45.812l 105.281,105.266L 480.00,320.00c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 
                                                  +			C 512.00,465.672, 497.688,480.00, 480.00,480.00z M 480.00,128.00l-41.094-41.094L 333.625,192.188l-45.812-45.812l 105.281-105.312L 352.00,0.00
                                                  +			c0.00-17.688, 14.312-32.00, 32.00-32.00l 96.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00l0.00,96.00 C 512.00,113.688, 497.688,128.00, 480.00,128.00z M 160.00,448.00c0.00,17.672-14.312,32.00-32.00,32.00
                                                  +			L 32.00,480.00 C 14.312,480.00,0.00,465.672,0.00,448.00l0.00-96.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 41.094,41.078l 105.281-105.266l 45.812,45.812L 118.906,406.906L 160.00,448.00z" data-tags="expand" />
                                                  +<glyph unicode="&#xe009;" d="M 480.00,320.00l-41.094,41.078L 333.625,255.812l-45.812,45.812L 393.094,406.906L 352.00,448.00
                                                  +	c0.00,17.672, 14.312,32.00, 32.00,32.00l 96.00,0.00 c 17.688,0.00, 32.00-14.328, 32.00-32.00l0.00-96.00 C 512.00,334.312, 497.688,320.00, 480.00,320.00z M 160.00,0.00c0.00-17.688-14.312-32.00-32.00-32.00L 32.00-32.00 
                                                  +	c-17.688,0.00-32.00,14.312-32.00,32.00l0.00,96.00 c0.00,17.688, 14.312,32.00, 32.00,32.00l 41.094-41.094l 105.281,105.281l 45.812-45.812L 118.906,41.062L 160.00,0.00z" data-tags="maximize" />
                                                  +<glyph unicode="&#xe00a;" d="M 497.914-17.913c-18.783-18.782-49.225-18.782-68.008,0.00l-84.863,84.863
                                                  +	c-34.888-22.382-76.13-35.717-120.659-35.717C 100.469,31.233,0.00,131.687,0.00,255.617S 100.469,480.00, 224.384,480.00
                                                  +	c 123.931,0.00, 224.384-100.452, 224.384-224.383c0.00-44.514-13.352-85.771-35.718-120.676l 84.864-84.863
                                                  +	C 516.695,31.296, 516.695,0.869, 497.914-17.913z M 224.384,415.891c-88.511,0.00-160.274-71.747-160.274-160.273
                                                  +	s 71.763-160.274, 160.274-160.274c 88.526,0.00, 160.274,71.748, 160.274,160.274S 312.91,415.891, 224.384,415.891z" data-tags="search" />
                                                  +<glyph unicode="&#xe00b;" d="M 497.914-17.914c-18.783-18.781-49.226-18.781-68.008,0.00l-84.863,84.864
                                                  +	c-34.889-22.366-76.131-35.718-120.66-35.718C 100.468,31.232,0.00,131.686,0.00,255.616S 100.468,480.00, 224.383,480.00
                                                  +	c 123.931,0.00, 224.384-100.453, 224.384-224.384c0.00-44.529-13.352-85.771-35.718-120.675l 84.864-84.848
                                                  +	C 516.695,31.311, 516.695,0.869, 497.914-17.914z M 224.383,415.89c-88.511,0.00-160.274-71.763-160.274-160.274
                                                  +	c0.00-88.526, 71.763-160.274, 160.274-160.274c 88.527,0.00, 160.274,71.748, 160.274,160.274C 384.657,344.127, 312.91,415.89, 224.383,415.89z
                                                  +	 M 256.438,159.452l-64.109,0.00 l0.00,64.109 l-64.109,0.00 l0.00,64.109 l 64.109,0.00 l0.00,64.11 l 64.109,0.00 l0.00-64.11 l 64.11,0.00 l0.00-64.109 l-64.11,0.00 L 256.438,159.452 z" data-tags="zoom in" />
                                                  +<glyph unicode="&#xe00c;" d="M 497.914,50.094l-84.864,84.848c 22.366,34.903, 35.718,76.146, 35.718,120.675
                                                  +			C 448.768,379.547, 348.314,480.00, 224.383,480.00C 100.468,480.00,0.00,379.547,0.00,255.616s 100.468-224.384, 224.383-224.384
                                                  +			c 44.529,0.00, 85.771,13.352, 120.66,35.718l 84.863-84.864c 18.782-18.781, 49.225-18.781, 68.008,0.00
                                                  +			C 516.695,0.869, 516.695,31.311, 497.914,50.094z M 224.383,95.342c-88.511,0.00-160.274,71.748-160.274,160.274
                                                  +			c0.00,88.511, 71.763,160.274, 160.274,160.274c 88.527,0.00, 160.274-71.763, 160.274-160.274
                                                  +			C 384.657,167.09, 312.91,95.342, 224.383,95.342z M 128.219,223.562l 192.329,0.00 l0.00,64.109 L 128.219,287.671 L 128.219,223.562 z" data-tags="zoom out" />
                                                  +<glyph unicode="&#xe00d;" d="M 256.00-32.00C 114.625-32.00,0.00,82.609,0.00,224.00S 114.625,480.00, 256.00,480.00
                                                  +	c 141.391,0.00, 256.00-114.609, 256.00-256.00S 397.391-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00
                                                  +	c 106.047,0.00, 192.00,85.969, 192.00,192.00S 362.047,416.00, 256.00,416.00z M 288.00,96.00l-64.00,0.00 l0.00,96.00 l-96.00,0.00 l0.00,64.00 l 96.00,0.00 l0.00,96.00 l 64.00,0.00 l0.00-96.00 l 96.00,0.00 l0.00-64.00 l-96.00,0.00 L 288.00,96.00 z" data-tags="add" />
                                                  +<glyph unicode="&#xe00e;" d="M 256.00,480.00C 114.625,480.00,0.00,365.375,0.00,224.00c0.00-141.391, 114.625-256.00, 256.00-256.00
                                                  +			c 141.391,0.00, 256.00,114.609, 256.00,256.00C 512.00,365.375, 397.391,480.00, 256.00,480.00z M 256.00,32.00c-106.031,0.00-192.00,85.969-192.00,192.00S 149.969,416.00, 256.00,416.00
                                                  +			c 106.047,0.00, 192.00-85.969, 192.00-192.00S 362.047,32.00, 256.00,32.00z M 128.00,192.00l 256.00,0.00 l0.00,64.00 L 128.00,256.00 L 128.00,192.00 z" data-tags="subtract" />
                                                  +<glyph unicode="&#xe00f;" d="M 256.00-32.00C 114.625-32.00,0.00,82.609,0.00,224.00C0.00,365.375, 114.625,480.00, 256.00,480.00
                                                  +	s 256.00-114.625, 256.00-256.00C 512.00,82.609, 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00
                                                  +	s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00z M 224.00,160.00l 64.00,0.00 l0.00-64.00 l-64.00,0.00 L 224.00,160.00 z M 224.00,352.00l 64.00,0.00 l0.00-160.00 l-64.00,0.00 L 224.00,352.00 z" data-tags="exclamation" />
                                                  +<glyph unicode="&#xe010;" d="M 256.00-32.00C 114.625-32.00,0.00,82.609,0.00,224.00C0.00,365.375, 114.625,480.00, 256.00,480.00
                                                  +	s 256.00-114.625, 256.00-256.00C 512.00,82.609, 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00
                                                  +	s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00zM 256.00,352.00c-53.031,0.00-96.00-42.984-96.00-96.00l 64.00,0.00 c0.00,17.672, 14.312,32.00, 32.00,32.00s 32.00-14.328, 32.00-32.00
                                                  +	s-14.312-32.00-32.00-32.00c-1.225,0.00-5.108,0.00-16.00,0.00c-8.844,0.00-16.00-7.172-16.00-16.00l0.00-48.00 l 64.00,0.00 l0.00,5.875 c 37.188,13.219, 64.00,48.391, 64.00,90.125
                                                  +	C 352.00,309.016, 309.031,352.00, 256.00,352.00zM 256.00,128.00L 224.00,128.00L 224.00,96.00L 256.00,96.00L 288.00,96.00L 288.00,128.00 z" data-tags="question" />
                                                  +<glyph unicode="&#xe011;" d="M 74.966,42.987c-99.97,99.97-99.97,262.066,0.00,362.037
                                                  +	c 100.002,99.97, 262.067,99.97, 362.068,0.00c 99.97-99.971, 99.97-262.067,0.00-362.037C 337.033-56.998, 174.968-56.998, 74.966,42.987z
                                                  +	 M 391.783,359.773c-75.001,74.985-196.565,74.985-271.535,0.00c-75.001-74.985-75.001-196.55,0.00-271.535
                                                  +	c 74.97-74.986, 196.534-74.986, 271.535,0.00C 466.754,163.224, 466.754,284.788, 391.783,359.773z M 188.124,110.863l-45.251,45.266
                                                  +	l 67.876,67.877l-67.876,67.876l 45.251,45.267L 256.00,269.257l 67.877,67.892l 45.25-45.267l-67.876-67.876l 67.876-67.877l-45.25-45.266
                                                  +	L 256.00,178.755L 188.124,110.863z" data-tags="close" />
                                                  +<glyph unicode="&#xe012;" d="M 400.00,192.00c-17.25,0.00-33.406-4.219-48.00-11.188l0.00,86.375 
                                                  +	C 366.594,260.219, 382.75,256.00, 400.00,256.00c 61.844,0.00, 112.00,50.141, 112.00,112.00S 461.844,480.00, 400.00,480.00S 288.00,429.859, 288.00,368.00l0.00-48.00 l-64.00,0.00 l0.00,48.00 
                                                  +	C 224.00,429.859, 173.844,480.00, 112.00,480.00S0.00,429.859,0.00,368.00s 50.156-112.00, 112.00-112.00c 17.25,0.00, 33.406,4.219, 48.00,11.188l0.00-86.375 
                                                  +	C 145.406,187.781, 129.25,192.00, 112.00,192.00C 50.156,192.00,0.00,141.859,0.00,80.00s 50.156-112.00, 112.00-112.00s 112.00,50.141, 112.00,112.00l0.00,48.00 l 64.00,0.00 l0.00-48.00 
                                                  +	c0.00-61.859, 50.156-112.00, 112.00-112.00s 112.00,50.141, 112.00,112.00S 461.844,192.00, 400.00,192.00z M 400.00,416.00c 26.50,0.00, 48.00-21.484, 48.00-48.00s-21.50-48.00-48.00-48.00
                                                  +	s-48.00,21.484-48.00,48.00S 373.50,416.00, 400.00,416.00z M 112.00,32.00c-26.50,0.00-48.00,21.484-48.00,48.00s 21.50,48.00, 48.00,48.00s 48.00-21.484, 48.00-48.00S 138.50,32.00, 112.00,32.00z M 112.00,320.00
                                                  +	c-26.50,0.00-48.00,21.484-48.00,48.00s 21.50,48.00, 48.00,48.00s 48.00-21.484, 48.00-48.00S 138.50,320.00, 112.00,320.00z M 288.00,192.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 L 288.00,192.00 z M 400.00,32.00
                                                  +	c-26.50,0.00-48.00,21.484-48.00,48.00s 21.50,48.00, 48.00,48.00s 48.00-21.484, 48.00-48.00S 426.50,32.00, 400.00,32.00z" data-tags="cmd" />
                                                  +<glyph unicode="&#xe013;" d="M 256.00-32.00C 114.625-32.00,0.00,82.625,0.00,224.00C0.00,365.391, 114.625,480.00, 256.00,480.00
                                                  +	s 256.00-114.609, 256.00-256.00C 512.00,82.625, 397.375-32.00, 256.00-32.00z M 64.00,224.00c0.00-41.312, 13.312-79.312, 35.531-110.656L 366.656,380.484
                                                  +	C 335.344,402.672, 297.312,416.00, 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00z M 412.469,334.656L 145.344,67.50
                                                  +	C 176.656,45.312, 214.688,32.00, 256.00,32.00c 106.031,0.00, 192.00,85.969, 192.00,192.00C 448.00,265.312, 434.688,303.328, 412.469,334.656z" data-tags="forbid" />
                                                  +<glyph unicode="&#xe014;" d="M 256.00,384.00L 64.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.672,0.00,448.00l0.00-352.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 224.00-96.00
                                                  +	l 224.00,96.00c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 c0.00,17.672-14.312,32.00-32.00,32.00l-32.00,0.00  M 224.00,48.00L 64.00,128.00L 64.00,384.00 l 160.00-53.328L 224.00,48.00 z M 448.00,128.00l-160.00-80.00L 288.00,330.672 
                                                  +	L 448.00,384.00L 448.00,128.00 z" data-tags="forbid" />
                                                  +<glyph unicode="&#xe015;" d="M 480.00,192.00l-64.00,0.00 c-17.688,0.00-32.00,14.312-32.00,32.00s 14.312,32.00, 32.00,32.00l 64.00,0.00 
                                                  +	c 17.688,0.00, 32.00-14.312, 32.00-32.00S 497.688,192.00, 480.00,192.00z M 391.75,314.50c-12.50-12.50-32.75-12.50-45.25,0.00s-12.50,32.75,0.00,45.25L 391.75,405.00
                                                  +	c 12.50,12.50, 32.75,12.50, 45.25,0.00s 12.50-32.75,0.00-45.25L 391.75,314.50z M 256.00-32.00c-17.688,0.00-32.00,14.312-32.00,32.00l0.00,64.00 c0.00,17.688, 14.312,32.00, 32.00,32.00
                                                  +	s 32.00-14.312, 32.00-32.00l0.00-64.00 C 288.00-17.688, 273.688-32.00, 256.00-32.00z M 256.00,352.00c-17.688,0.00-32.00,14.312-32.00,32.00L 224.00,448.00 c0.00,17.688, 14.312,32.00, 32.00,32.00
                                                  +	s 32.00-14.312, 32.00-32.00l0.00-64.00 C 288.00,366.312, 273.688,352.00, 256.00,352.00z M 120.25,43.00c-12.50-12.50-32.75-12.50-45.25,0.00c-12.50,12.469-12.50,32.75,0.00,45.25
                                                  +	l 45.25,45.25c 12.50,12.50, 32.75,12.50, 45.25,0.00s 12.50-32.75,0.00-45.25L 120.25,43.00z M 120.25,314.50L 75.00,359.75C 62.50,372.25, 62.50,392.50, 75.00,405.00
                                                  +	s 32.75,12.50, 45.25,0.00l 45.25-45.25c 12.50-12.50, 12.50-32.75,0.00-45.25S 132.75,302.00, 120.25,314.50z M 128.00,224.00c0.00-17.688-14.312-32.00-32.00-32.00L 32.00,192.00 
                                                  +	c-17.688,0.00-32.00,14.312-32.00,32.00s 14.312,32.00, 32.00,32.00l 64.00,0.00 C 113.688,256.00, 128.00,241.688, 128.00,224.00z M 391.75,133.50L 437.00,88.25
                                                  +	c 12.50-12.50, 12.50-32.781,0.00-45.25c-12.50-12.50-32.75-12.50-45.25,0.00l-45.25,45.25c-12.50,12.50-12.50,32.75,0.00,45.25S 379.25,146.00, 391.75,133.50
                                                  +	z" data-tags="spinner" />
                                                  +<glyph unicode="&#xe016;" d="M 256.00-32.00C 114.625-32.00,0.00,82.625,0.00,224.00C0.00,365.391, 114.625,480.00, 256.00,480.00
                                                  +	s 256.00-114.609, 256.00-256.00C 512.00,82.625, 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00
                                                  +	s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00z M 192.00,320.00l 160.00-96.00l-160.00-96.00L 192.00,320.00 z" data-tags="play" />
                                                  +<glyph unicode="&#xe017;" d="M 256.00-32.00C 114.625-32.00,0.00,82.625,0.00,224.00C0.00,365.391, 114.625,480.00, 256.00,480.00
                                                  +	s 256.00-114.609, 256.00-256.00C 512.00,82.625, 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00
                                                  +	s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00z M 192.00,288.00l 128.00,0.00 l0.00-128.00 L 192.00,160.00 L 192.00,288.00 z" data-tags="stop" />
                                                  +<glyph unicode="&#xe018;" d="M 256.00,480.00C 114.625,480.00,0.00,365.391,0.00,224.00c0.00-141.375, 114.625-256.00, 256.00-256.00
                                                  +			s 256.00,114.625, 256.00,256.00C 512.00,365.391, 397.375,480.00, 256.00,480.00z M 256.00,32.00c-106.031,0.00-192.00,85.969-192.00,192.00S 149.969,416.00, 256.00,416.00s 192.00-85.969, 192.00-192.00
                                                  +			S 362.031,32.00, 256.00,32.00z M 160.00,160.00l 64.00,0.00 L 224.00,288.00 l-64.00,0.00 L 160.00,160.00 z M 288.00,160.00l 64.00,0.00 L 352.00,288.00 l-64.00,0.00 L 288.00,160.00 z" data-tags="pause" />
                                                  +<glyph unicode="&#xe019;" d="M 256.00,480.00C 114.625,480.00,0.00,365.391,0.00,224.00c0.00-141.375, 114.625-256.00, 256.00-256.00
                                                  +			s 256.00,114.625, 256.00,256.00C 512.00,365.391, 397.375,480.00, 256.00,480.00z M 256.00,32.00c-106.031,0.00-192.00,85.969-192.00,192.00S 149.969,416.00, 256.00,416.00s 192.00-85.969, 192.00-192.00
                                                  +			S 362.031,32.00, 256.00,32.00zM 384.00,224.00L 256.00,320.00L 256.00,248.00L 160.00,320.00L 160.00,128.00L 256.00,200.00L 256.00,128.00 z" data-tags="forward" />
                                                  +<glyph unicode="&#xe01a;" d="M 256.00,480.00C 114.625,480.00,0.00,365.375,0.00,224.00c0.00-141.391, 114.625-256.00, 256.00-256.00
                                                  +			s 256.00,114.609, 256.00,256.00C 512.00,365.375, 397.375,480.00, 256.00,480.00z M 256.00,32.00c-106.031,0.00-192.00,85.969-192.00,192.00S 149.969,416.00, 256.00,416.00s 192.00-85.969, 192.00-192.00
                                                  +			S 362.031,32.00, 256.00,32.00zM 128.00,224.00L 256.00,128.00L 256.00,200.00L 352.00,128.00L 352.00,320.00L 256.00,248.00L 256.00,320.00 z" data-tags="rewind" />
                                                  +<glyph unicode="&#xe01b;" d="M 408.208,329.356c-12.985-12.954-33.994-12.954-46.98,0.00
                                                  +	c-12.955,12.955-12.955,33.995,0.00,46.981l 93.931,93.931c 12.986,12.955, 33.995,12.955, 46.981,0.00c 12.954-12.955, 12.954-33.995,0.00-46.98
                                                  +	L 408.208,329.356z M 255.871-31.727L 128.008,96.137L 32.11,96.137 c-17.669,0.00-31.966,14.298-31.966,31.967L 0.144,319.898 
                                                  +	c0.00,17.668, 14.297,31.966, 31.966,31.966l 95.897,0.00 L 255.871,479.728c0.00,0.00, 31.966,3.996, 31.966-31.966c0.00-191.233,0.00-478.926,0.00-447.522
                                                  +	C 287.837-35.722, 255.871-31.727, 255.871-31.727z M 223.905,351.864l-63.932-63.932L 64.076,287.932 l0.00-127.863 l 95.897,0.00 l 63.932-63.933L 223.905,351.864 z
                                                  +	 M 383.734,192.035c-17.669,0.00-31.966,14.297-31.966,31.966c0.00,17.668, 14.297,31.966, 31.966,31.966l 95.897,0.00 
                                                  +	c 17.669,0.00, 31.966-14.298, 31.966-31.966c0.00-17.669-14.297-31.966-31.966-31.966L 383.734,192.035 z M 408.208,118.645l 93.932-93.931
                                                  +	c 12.954-12.986, 12.954-34.026,0.00-46.981c-12.986-12.955-33.995-12.955-46.981,0.00l-93.931,93.931
                                                  +	c-12.955,12.986-12.955,34.026,0.00,46.981C 374.214,131.60, 395.223,131.60, 408.208,118.645z" data-tags="sound" />
                                                  +<glyph unicode="&#xe01c;" d="M 319.967-23.497l0.00,67.34 C 394.335,70.267, 447.90,140.543, 447.90,224.00
                                                  +	c0.00,83.426-53.565,153.732-127.934,180.156L 319.966,471.497 C 430.254,443.012, 511.868,343.188, 511.868,224.00S 430.254,4.957, 319.967-23.497z
                                                  +	 M 256.00-31.868L 128.066,96.065L 32.115,96.065 c-17.678,0.00-31.983,14.306-31.983,31.983L 0.132,319.95 c0.00,17.679, 14.306,31.983, 31.983,31.983l 95.951,0.00 
                                                  +	L 256.00,479.867c0.00,0.00, 31.983,3.998, 31.983-31.983c0.00-72.899,0.00-382.053,0.00-447.769C 287.983-35.866, 256.00-31.868, 256.00-31.868z
                                                  +	 M 224.017,351.934l-63.967-63.967L 64.099,287.967 l0.00-127.934 l 95.951,0.00 l 63.967-63.968L 224.017,351.934 z M 415.917,224.00
                                                  +	c0.00-59.532-40.854-109.132-95.95-123.405l0.00,68.309 C 339.02,179.991, 351.95,200.387, 351.95,224.00c0.00,23.612-12.931,44.008-31.983,55.097
                                                  +	l0.00,68.308 C 375.063,333.131, 415.917,283.531, 415.917,224.00z" data-tags="sound (alt)" />
                                                  +<glyph unicode="&#xe01d;" d="M 511.603,176.274l-47.694-47.726l-47.726,47.726l-47.725-47.726l-47.694,47.726
                                                  +	L 368.458,224.00l-47.694,47.725l 47.694,47.726l 47.725-47.726l 47.726,47.726l 47.694-47.726L 463.908,224.00L 511.603,176.274z
                                                  +	 M 256.266-31.868L 128.332,96.065L 32.381,96.065 c-17.678,0.00-31.983,14.306-31.983,31.983L 0.398,319.95 c0.00,17.679, 14.306,31.983, 31.983,31.983
                                                  +	l 95.951,0.00 L 256.266,479.867c0.00,0.00, 31.983,3.998, 31.983-31.983c0.00-173.535,0.00-425.718,0.00-447.769
                                                  +	C 288.249-35.866, 256.266-31.868, 256.266-31.868z M 224.282,351.934l-63.967-63.967L 64.364,287.967 l0.00-127.934 l 95.951,0.00 l 63.967-63.968L 224.282,351.934 z" data-tags="sound off" />
                                                  +<glyph unicode="&#xe01e;" d="M 325.719,352.375L 229.094,248.75L 184.812,296.219L 144.00,252.438L 230.781,160.094L 367.938,307.125 zM 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 
                                                  +	c 17.688,0.00, 32.00,14.312, 32.00,32.00l0.00,96.00 L 512.00,352.00 L 512.00,448.00 C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,128.00l-96.00,0.00 l0.00-96.00 L 160.00,32.00 l0.00,96.00 L 64.00,128.00 L 64.00,320.00 L 64.00,416.00 l 96.00,0.00 l 192.00,0.00 l 96.00,0.00 L 448.00,128.00 z" data-tags="task" />
                                                  +<glyph unicode="&#xe01f;" d="M 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 
                                                  +	c 17.688,0.00, 32.00,14.312, 32.00,32.00l0.00,96.00 L 512.00,352.00 L 512.00,448.00 C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,128.00l-96.00,0.00 l0.00-96.00 L 160.00,32.00 l0.00,96.00 L 64.00,128.00 L 64.00,320.00 L 64.00,416.00 l 96.00,0.00 l 192.00,0.00 l 96.00,0.00 L 448.00,128.00 zM 128.00,256.00L 384.00,256.00L 384.00,192.00L 128.00,192.00zM 128.00,352.00L 384.00,352.00L 384.00,288.00L 128.00,288.00z" data-tags="inbox" />
                                                  +<glyph unicode="&#xe020;" d="M 384.00,480.00L 128.00,480.00 L0.00,224.00l0.00-224.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 448.00,0.00 c 17.672,0.00, 32.00,14.312, 32.00,32.00
                                                  +			L 512.00,224.00 L 384.00,480.00z M 448.00,32.00L 64.00,32.00 L 64.00,224.00 l 96.00,192.00l 192.00,0.00 l 96.00-192.00L 448.00,32.00 zM 320.00,352.00L 192.00,352.00L 128.00,224.00L 192.00,224.00L 192.00,160.00L 320.00,160.00L 320.00,224.00L 384.00,224.00 z" data-tags="inbox (alt)" />
                                                  +<glyph unicode="&#xe021;" d="M 479.999,416.00L 32.00,416.00 C 14.329,416.00,0.00,401.688,0.00,384.00l0.00-320.00 c0.00-17.688, 14.329-32.00, 32.00-32.00l 447.999,0.00 
                                                  +	C 497.671,32.00, 512.00,46.312, 512.00,64.00L 512.00,384.00 C 512.00,401.688, 497.671,416.00, 479.999,416.00z M 416.00,352.00L 256.00,224.00L 96.00,352.00L 416.00,352.00 z M 448.00,96.00L 64.00,96.00 L 64.00,320.00 l 192.00-160.00
                                                  +	l 192.00,160.00L 448.00,96.00 z" data-tags="envelope" />
                                                  +<glyph unicode="&#xe022;" d="M 480.00-32.00L 32.00-32.00 c-17.672,0.00-32.00,14.312-32.00,32.00L0.00,448.00 C0.00,465.688, 14.328,480.00, 32.00,480.00l 320.00,0.00 l-64.00-64.00L 64.00,416.00 
                                                  +	l0.00-384.00 l 384.00,0.00 L 448.00,256.00 l 64.00,64.00l0.00-320.00 C 512.00-17.688, 497.672-32.00, 480.00-32.00z M 128.00,96.00l0.00,96.00 L 416.00,480.00l 32.00,0.00 l 64.00-64.00l0.00-32.00 L 224.00,96.00L 128.00,96.00 z M 272.00,208.00L 448.00,384.00l-32.00,32.00
                                                  +	L 240.00,240.00L 272.00,208.00z M 192.00,192.00l-32.00-32.00l0.00-32.00 l 32.00,0.00 l 32.00,32.00L 192.00,192.00z" data-tags="compose" />
                                                  +<glyph unicode="&#xe023;" d="M 128.00,128.00L 288.00,128.00L 288.00,96.00L 128.00,96.00zM 128.00,192.00L 288.00,192.00L 288.00,160.00L 128.00,160.00zM 128.00,352.00L 288.00,352.00L 288.00,224.00L 128.00,224.00zM 480.00,416.00l-96.00,0.00 L 384.00,480.00 L 32.00,480.00 C 14.312,480.00,0.00,465.672,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,384.00 
                                                  +		C 512.00,401.672, 497.688,416.00, 480.00,416.00z M 448.00,32.00L 64.00,32.00 L 64.00,416.00 l 288.00,0.00 l0.00-320.00 l 32.00,0.00 L 384.00,352.00 l 64.00,0.00 L 448.00,32.00 z" data-tags="newspaper" />
                                                  +<glyph unicode="&#xe024;" d="M 480.00,480.00L 96.00,480.00 C 78.312,480.00, 64.00,465.672, 64.00,448.00l0.00-32.00 L 32.00,416.00 C 14.312,416.00,0.00,401.672,0.00,384.00l0.00-384.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 
                                                  +		c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 C 512.00,465.672, 497.688,480.00, 480.00,480.00z M 128.00,32.00L 64.00,32.00 L 64.00,352.00 l 64.00,0.00 L 128.00,32.00 z M 448.00,32.00L 192.00,32.00 l0.00,32.00 L 192.00,352.00 L 192.00,416.00 l 256.00,0.00 L 448.00,32.00 zM 256.00,352.00L 384.00,352.00L 384.00,288.00L 256.00,288.00zM 256.00,160.00L 384.00,160.00L 384.00,96.00L 256.00,96.00zM 256.00,256.00L 384.00,256.00L 384.00,192.00L 256.00,192.00z" data-tags="newspaper (alt)" />
                                                  +<glyph unicode="&#xe025;" d="M 480.00-32.00L 32.00-32.00 c-17.688,0.00-32.00,14.312-32.00,32.00L0.00,448.00 C0.00,465.672, 14.312,480.00, 32.00,480.00l 64.00,0.00 l0.00-64.00 L 64.00,416.00 l0.00-384.00 
                                                  +	l 384.00,0.00 L 448.00,416.00 l-32.00,0.00 L 416.00,480.00 l 64.00,0.00 c 17.688,0.00, 32.00-14.328, 32.00-32.00l0.00-448.00 C 512.00-17.688, 497.688-32.00, 480.00-32.00z M 128.00,352.00l 32.00,0.00 L 160.00,448.00 l 64.00,0.00 L 224.00,480.00 l 64.00,0.00 l0.00-32.00 l 64.00,0.00 l0.00-96.00 l 32.00,0.00 l0.00-256.00 L 128.00,96.00 L 128.00,352.00 z
                                                  +	 M 288.00,416.00l-64.00,0.00 l0.00-32.00 l 64.00,0.00 L 288.00,416.00 z M 192.00,160.00l 128.00,0.00 L 320.00,288.00 L 192.00,288.00 L 192.00,160.00 z" data-tags="clipboard" />
                                                  +<glyph unicode="&#xe026;" d="M 416.00,480.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 L 416.00,480.00 z M 480.00,480.00l-32.00,0.00 l0.00-96.00 L 320.00,384.00 L 320.00,480.00 L 192.00,480.00 l0.00-96.00 L 64.00,384.00 L 64.00,480.00 L 32.00,480.00 C 14.312,480.00,0.00,465.672,0.00,448.00
                                                  +			l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 C 512.00,465.672, 497.688,480.00, 480.00,480.00z M 448.00,32.00L 64.00,32.00 L 64.00,320.00 l 384.00,0.00 L 448.00,32.00 z M 160.00,480.00L 96.00,480.00 
                                                  +			l0.00-64.00 l 64.00,0.00 L 160.00,480.00 z M 288.00,256.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 L 288.00,256.00 z M 384.00,256.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 L 384.00,256.00 z M 192.00,160.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 L 192.00,160.00 z M 192.00,256.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 L 192.00,256.00 z M 288.00,160.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 
                                                  +			L 288.00,160.00 z M 384.00,160.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 L 384.00,160.00 z" data-tags="calendar" />
                                                  +<glyph unicode="&#xe027;" d="M 503.466,347.732L 379.733,471.466c-11.38,11.379-29.855,11.379-41.234,0.00
                                                  +		L 214.767,347.732c-11.411-11.379-11.411-29.854,0.00-41.265l 20.601-20.601L 359.101,409.599l 82.499-82.499L 317.867,203.367
                                                  +		l 20.632-20.632c 11.379-11.38, 29.854-11.38, 41.234,0.00l 123.732,123.732C 514.845,317.878, 514.845,336.354, 503.466,347.732zM 276.633,162.134L 152.90,38.40l-82.499,82.499l 123.732,123.733l-20.632,20.632
                                                  +		c-11.379,11.38-29.854,11.38-41.233,0.00L 8.534,141.532c-11.379-11.41-11.379-29.886,0.00-41.265l 123.733-123.733
                                                  +		c 11.379-11.379, 29.854-11.379, 41.233,0.00l 123.733,123.733c 11.41,11.379, 11.41,29.854,0.00,41.265L 276.633,162.134zM 173.501,141.532c 11.411-11.41, 29.854-11.41, 41.266,0.00l 123.732,123.732
                                                  +		c 11.379,11.38, 11.379,29.824,0.00,41.203c-11.41,11.41-29.854,11.41-41.265,0.00L 173.501,182.735
                                                  +		C 162.122,171.355, 162.122,152.911, 173.501,141.532z" data-tags="hyperlink" />
                                                  +<glyph unicode="&#xe028;" d="M 288.00,256.00L 352.00,256.00L 352.00,96.00L 288.00,96.00zM 480.00,384.00L 352.00,384.00 L 352.00,448.00 c0.00,17.688-14.312,32.00-32.00,32.00L 192.00,480.00 c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-64.00 L 32.00,384.00 c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-32.00 l 32.00,0.00 l0.00-320.00 
                                                  +		c0.00-17.688, 14.312-32.00, 32.00-32.00l 384.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 480.00,320.00 l 32.00,0.00 l0.00,32.00 C 512.00,369.688, 497.688,384.00, 480.00,384.00z M 224.00,416.00l 64.00,0.00 l0.00-32.00 l-64.00,0.00 L 224.00,416.00 z
                                                  +		 M 416.00,32.00L 96.00,32.00 L 96.00,320.00 l 320.00,0.00 L 416.00,32.00 zM 160.00,256.00L 224.00,256.00L 224.00,96.00L 160.00,96.00z" data-tags="trash" />
                                                  +<glyph unicode="&#xe029;" d="M 480.00,384.00L 352.00,384.00 L 352.00,448.00 c0.00,17.688-14.312,32.00-32.00,32.00L 192.00,480.00 c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-64.00 L 32.00,384.00 
                                                  +	c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-32.00 l 64.00,0.00 l0.00-320.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 320.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 448.00,320.00 l 64.00,0.00 l0.00,32.00 
                                                  +	C 512.00,369.688, 497.688,384.00, 480.00,384.00z M 224.00,416.00l 64.00,0.00 l0.00-32.00 l-64.00,0.00 L 224.00,416.00 z M 384.00,32.00L 128.00,32.00 L 128.00,320.00 l 256.00,0.00 L 384.00,32.00 z" data-tags="trash (alt)" />
                                                  +<glyph unicode="&#xe02a;" d="M 192.00,192.00L 32.00,192.00 c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-160.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 160.00,0.00 
                                                  +			c 17.688,0.00, 32.00,14.312, 32.00,32.00L 224.00,160.00 C 224.00,177.688, 209.688,192.00, 192.00,192.00z M 160.00,32.00L 64.00,32.00 l0.00,96.00 l 96.00,0.00 L 160.00,32.00 z M 192.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-160.00 
                                                  +			c0.00-17.688, 14.312-32.00, 32.00-32.00l 160.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 224.00,448.00 C 224.00,465.688, 209.688,480.00, 192.00,480.00z M 160.00,320.00L 64.00,320.00 L 64.00,416.00 l 96.00,0.00 L 160.00,320.00 z M 480.00,192.00L 320.00,192.00 
                                                  +			c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-160.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 160.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,160.00 C 512.00,177.688, 497.688,192.00, 480.00,192.00z
                                                  +			 M 448.00,32.00l-96.00,0.00 l0.00,96.00 l 96.00,0.00 L 448.00,32.00 z M 480.00,480.00L 320.00,480.00 c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-160.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 160.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 
                                                  +			C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,320.00l-96.00,0.00 L 352.00,416.00 l 96.00,0.00 L 448.00,320.00 z" data-tags="grid" />
                                                  +<glyph unicode="&#xe02b;" d="M 480.00-32.00L 32.00-32.00 c-17.688,0.00-32.00,14.312-32.00,32.00L0.00,448.00 C0.00,465.688, 14.312,480.00, 32.00,480.00l 448.00,0.00 
                                                  +	c 17.688,0.00, 32.00-14.312, 32.00-32.00l0.00-448.00 C 512.00-17.688, 497.688-32.00, 480.00-32.00z M 448.00,416.00L 64.00,416.00 l0.00-384.00 l 384.00,0.00 L 448.00,416.00 z M 224.00,256.00l-96.00,0.00 l0.00,96.00 l 96.00,0.00 L 224.00,256.00 z M 224.00,96.00l-96.00,0.00 l0.00,96.00 
                                                  +	l 96.00,0.00 L 224.00,96.00 z M 384.00,256.00l-96.00,0.00 l0.00,96.00 l 96.00,0.00 L 384.00,256.00 z M 384.00,96.00l-96.00,0.00 l0.00,96.00 l 96.00,0.00 L 384.00,96.00 z" data-tags="grid (alt)" />
                                                  +<glyph unicode="&#xe02c;" d="M 128.00,160.00L 384.00,160.00L 384.00,96.00L 128.00,96.00zM 128.00,256.00L 384.00,256.00L 384.00,192.00L 128.00,192.00zM 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 
                                                  +		C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,32.00L 64.00,32.00 L 64.00,416.00 l 384.00,0.00 L 448.00,32.00 zM 128.00,352.00L 384.00,352.00L 384.00,288.00L 128.00,288.00z" data-tags="menu" />
                                                  +<glyph unicode="&#xe02d;" d="M 128.00,352.00L 192.00,352.00L 192.00,288.00L 128.00,288.00zM 128.00,256.00L 192.00,256.00L 192.00,192.00L 128.00,192.00zM 128.00,160.00L 192.00,160.00L 192.00,96.00L 128.00,96.00zM 256.00,160.00L 384.00,160.00L 384.00,96.00L 256.00,96.00zM 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 
                                                  +		C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,32.00L 64.00,32.00 L 64.00,416.00 l 384.00,0.00 L 448.00,32.00 zM 256.00,256.00L 384.00,256.00L 384.00,192.00L 256.00,192.00zM 256.00,352.00L 384.00,352.00L 384.00,288.00L 256.00,288.00z" data-tags="list" />
                                                  +<glyph unicode="&#xe02e;" d="M 480.00,480.00L 224.00,480.00 c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-256.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 256.00,0.00 
                                                  +			c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,224.00L 256.00,224.00 L 256.00,416.00 l 192.00,0.00 L 448.00,224.00 z M 256.00,32.00L 64.00,32.00 L 64.00,224.00 l 64.00,0.00 l0.00,64.00 L 32.00,288.00 
                                                  +			c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-256.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 256.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00l0.00,96.00 l-64.00,0.00 L 256.00,32.00 z" data-tags="gallery" />
                                                  +<glyph unicode="&#xe02f;" d="M 448.00,480.00L 64.00,480.00 C 46.312,480.00, 32.00,465.688, 32.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 384.00,0.00 
                                                  +			c 17.688,0.00, 32.00,14.312, 32.00,32.00L 480.00,448.00 C 480.00,465.688, 465.688,480.00, 448.00,480.00z M 160.00,32.00L 96.00,32.00 l0.00,64.00 l 64.00,0.00 L 160.00,32.00 z M 160.00,128.00L 96.00,128.00 l0.00,64.00 l 64.00,0.00 L 160.00,128.00 z M 160.00,224.00L 96.00,224.00 l0.00,64.00 l 64.00,0.00 
                                                  +			L 160.00,224.00 z M 288.00,32.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 L 288.00,32.00 z M 288.00,128.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 L 288.00,128.00 z M 288.00,224.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 L 288.00,224.00 z M 416.00,32.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 L 416.00,32.00 z M 416.00,128.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 
                                                  +			L 416.00,128.00 z M 416.00,224.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 L 416.00,224.00 z M 416.00,352.00L 96.00,352.00 L 96.00,416.00 l 320.00,0.00 L 416.00,352.00 z" data-tags="calculator" />
                                                  +<glyph unicode="&#xe030;" d="M 480.00,96.00l-32.00,0.00 L 448.00,416.00 L 128.00,416.00 L 128.00,448.00 c0.00,17.688, 14.312,32.00, 32.00,32.00l 320.00,0.00 c 17.688,0.00, 32.00-14.312, 32.00-32.00
                                                  +	l0.00-320.00 C 512.00,110.312, 497.688,96.00, 480.00,96.00z M 416.00,352.00l0.00-352.00 c0.00-17.688-14.312-32.00-32.00-32.00L 32.00-32.00 c-17.688,0.00-32.00,14.312-32.00,32.00L0.00,352.00 
                                                  +	c0.00,17.688, 14.312,32.00, 32.00,32.00l 352.00,0.00 C 401.688,384.00, 416.00,369.688, 416.00,352.00z M 352.00,320.00L 64.00,320.00 l0.00-96.00 l 288.00,0.00 L 352.00,320.00 z M 352.00,160.00L 64.00,160.00 l0.00-128.00 l 288.00,0.00 L 352.00,160.00 z M 128.00,256.00L 96.00,256.00 l0.00,32.00 
                                                  +	l 32.00,0.00 L 128.00,256.00 z M 192.00,256.00l-32.00,0.00 l0.00,32.00 l 32.00,0.00 L 192.00,256.00 z M 320.00,256.00l-96.00,0.00 l0.00,32.00 l 96.00,0.00 L 320.00,256.00 z" data-tags="windows" />
                                                  +<glyph unicode="&#xe031;" d="M 480.00-32.00L 32.00-32.00 c-17.688,0.00-32.00,14.312-32.00,32.00L0.00,448.00 C0.00,465.688, 14.312,480.00, 32.00,480.00l 448.00,0.00 
                                                  +	c 17.688,0.00, 32.00-14.312, 32.00-32.00l0.00-448.00 C 512.00-17.688, 497.688-32.00, 480.00-32.00z M 448.00,416.00L 64.00,416.00 l0.00-96.00 l 384.00,0.00 L 448.00,416.00 z M 448.00,256.00L 64.00,256.00 l0.00-224.00 l 384.00,0.00 L 448.00,256.00 z M 128.00,352.00L 96.00,352.00 L 96.00,384.00 l 32.00,0.00 
                                                  +	L 128.00,352.00 z M 192.00,352.00l-32.00,0.00 L 160.00,384.00 l 32.00,0.00 L 192.00,352.00 z M 416.00,352.00L 224.00,352.00 L 224.00,384.00 l 192.00,0.00 L 416.00,352.00 z" data-tags="browser" />
                                                  +<glyph unicode="&#xe032;" d="M 448.035,223.953c0.00,106.051-85.953,192.035-192.035,192.035
                                                  +		c-106.051,0.00-192.035-85.984-192.035-192.035c0.00-66.687, 34.005-125.43, 85.613-159.857l-53.482-53.463L 138.666-32.00l 69.842,69.843
                                                  +		c 15.19-3.865, 31.10-5.925, 47.492-5.925c 16.394,0.00, 32.305,2.059, 47.493,5.923L 373.334-32.00l 42.57,42.633l-53.477,53.457
                                                  +		C 414.039,98.517, 448.035,157.264, 448.035,223.953z M 256.00,95.93c-70.70,0.00-128.023,57.322-128.023,128.023
                                                  +		c0.00,70.70, 57.323,128.023, 128.023,128.023s 128.023-57.323, 128.023-128.023C 384.023,153.252, 326.70,95.93, 256.00,95.93zM 448.035,480.00c-35.351,0.00-64.012-28.662-64.012-64.012
                                                  +		c0.00-2.909, 0.213-5.768, 0.589-8.574c 21.307-14.963, 39.885-33.542, 54.849-54.849c 2.807-0.376, 5.665-0.588, 8.574-0.588
                                                  +		c 35.351,0.00, 64.012,28.661, 64.012,64.012C 512.047,451.338, 483.386,480.00, 448.035,480.00zM 72.539,352.565c 14.963,21.307, 33.542,39.886, 54.849,54.849
                                                  +		c 0.376,2.807, 0.588,5.665, 0.588,8.574C 127.977,451.338, 99.315,480.00, 63.965,480.00S-0.047,451.338-0.047,415.988
                                                  +		c0.00-35.351, 28.661-64.012, 64.012-64.012C 66.874,351.977, 69.732,352.189, 72.539,352.565zM 288.006,255.959L 288.006,319.971L 223.994,319.971L 223.994,191.947L 320.012,191.947L 320.012,255.959 	z" data-tags="alarm" />
                                                  +<glyph unicode="&#xe033;" d="M 288.00,256.00L 288.00,352.00L 224.00,352.00L 224.00,192.00L 352.00,192.00L 352.00,256.00 zM 256.00,480.00C 114.625,480.00,0.00,365.375,0.00,224.00s 114.625-256.00, 256.00-256.00s 256.00,114.625, 256.00,256.00
                                                  +	S 397.375,480.00, 256.00,480.00z M 256.00,32.00c-106.031,0.00-192.00,85.969-192.00,192.00S 149.969,416.00, 256.00,416.00s 192.00-85.969, 192.00-192.00S 362.031,32.00, 256.00,32.00z" data-tags="clock" />
                                                  +<glyph unicode="&#xe034;" d="M 288.00-28.781L 288.00-32.00 l-64.00,0.00 l0.00,3.219 C 115.562-13.125, 32.00,79.25, 32.00,192.00L 32.00,320.00 
                                                  +	C 32.00,408.375, 103.625,480.00, 192.00,480.00c 77.406,0.00, 145.156-54.969, 160.00-128.00l0.00,0.00l0.00-160.00 c0.00-53.031-43.00-96.00-96.00-96.00s-96.00,42.969-96.00,96.00L 160.00,320.00 
                                                  +	c0.00,17.688, 14.312,32.00, 32.00,32.00s 32.00-14.312, 32.00-32.00l0.00-128.00 c0.00-17.688, 14.312-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00L 288.00,352.00 c0.00,0.00-20.656,64.00-96.00,64.00
                                                  +	c-53.00,0.00-96.00-42.969-96.00-96.00l0.00-128.00 c0.00-88.375, 71.625-160.00, 160.00-160.00l0.00,0.00c 88.375,0.00, 160.00,71.625, 160.00,160.00L 416.00,448.00 c0.00,17.688, 14.312,32.00, 32.00,32.00
                                                  +	s 32.00-14.312, 32.00-32.00l0.00-256.00 C 480.00,79.25, 396.438-13.125, 288.00-28.781z" data-tags="attachment" />
                                                  +<glyph unicode="&#xe035;" d="M 512.00,256.00l0.00-64.00 l-66.906,0.00 c-4.781-28.344-16.047-54.375-31.828-77.031l 67.109-58.344
                                                  +	l-46.188-57.062l-73.984,64.344c-21.547-14.00-45.812-24.219-72.203-28.688L 288.00-32.00 l-64.00,0.00 l0.00,66.906 c-26.469,4.469-50.766,14.781-72.328,28.906
                                                  +	l-73.859-64.25l-46.188,57.062l 67.219,58.469C 83.188,137.719, 72.00,163.688, 67.219,192.00L0.00,192.00 l0.00,64.00 l 66.906,0.00 
                                                  +	c 4.781,28.344, 16.047,54.375, 31.828,77.031L 31.625,391.375l 46.188,57.062l 73.984-64.344c 21.547,14.00, 45.812,24.219, 72.203,28.688L 224.00,480.00 l 64.00,0.00 
                                                  +	l0.00-67.219 c 26.391-4.469, 50.656-14.688, 72.203-28.688l 73.984,64.344l 46.188-57.062l-67.109-58.344
                                                  +	c 15.781-22.656, 27.047-48.688, 31.828-77.031L 512.00,256.00 z M 256.00,320.00c-53.016,0.00-96.00-42.969-96.00-96.00s 42.984-96.00, 96.00-96.00s 96.00,42.969, 96.00,96.00
                                                  +	S 309.016,320.00, 256.00,320.00z" data-tags="settings" />
                                                  +<glyph unicode="&#xe036;" d="M 480.00,384.00L 352.00,384.00 L 352.00,448.00 c0.00,17.688-14.328,32.00-32.00,32.00L 192.00,480.00 c-17.672,0.00-32.00-14.312-32.00-32.00l0.00-64.00 L 32.00,384.00 
                                                  +	c-17.672,0.00-32.00-14.312-32.00-32.00l0.00-352.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 448.00,0.00 c 17.672,0.00, 32.00,14.312, 32.00,32.00L 512.00,352.00 C 512.00,369.688, 497.672,384.00, 480.00,384.00z M 224.00,416.00
                                                  +	l 64.00,0.00 l0.00-32.00 l-64.00,0.00 L 224.00,416.00 z M 448.00,32.00L 64.00,32.00 L 64.00,160.00 l 128.00,0.00 l0.00-32.00 l 128.00,0.00 l0.00,32.00 l 128.00,0.00 L 448.00,32.00 z M 448.00,192.00L 320.00,192.00 l0.00,32.00 L 192.00,224.00 l0.00-32.00 L 64.00,192.00 L 64.00,320.00 l 128.00,0.00 l 128.00,0.00 l 128.00,0.00 L 448.00,192.00 z" data-tags="portfolio" />
                                                  +<glyph unicode="&#xe037;" d="M 381.844,234.594C 383.031,241.562, 384.00,248.656, 384.00,256.00l0.00,96.00 
                                                  +	C 384.00,422.688, 326.688,480.00, 256.00,480.00S 128.00,422.688, 128.00,352.00l0.00-96.00 c0.00-7.344, 0.969-14.438, 2.156-21.406C 52.719,207.094,0.00,155.625,0.00,96.00l0.00-96.00 
                                                  +	c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00l0.00,96.00 C 512.00,155.625, 459.281,207.094, 381.844,234.594z M 192.00,352.00
                                                  +	c0.00,35.344, 28.656,64.00, 64.00,64.00s 64.00-28.656, 64.00-64.00l0.00-96.00 c0.00-35.344-28.656-64.00-64.00-64.00s-64.00,28.656-64.00,64.00L 192.00,352.00 z M 448.00,32.00L 64.00,32.00 l0.00,64.00 
                                                  +	c0.00,34.562, 36.812,64.594, 91.594,81.50C 179.031,147.562, 215.062,128.00, 256.00,128.00s 76.969,19.562, 100.406,49.50
                                                  +	C 411.188,160.594, 448.00,130.562, 448.00,96.00L 448.00,32.00 z" data-tags="user" />
                                                  +<glyph unicode="&#xe038;" d="M 288.00,174.25L 288.00,256.00 c0.00,53.031-42.969,96.00-96.00,96.00s-96.00-42.969-96.00-96.00l0.00-81.75 C 38.844,152.062,0.00,111.25,0.00,64.00c0.00-5.656,0.00-64.00,0.00-64.00
                                                  +		c0.00-17.688, 14.312-32.00, 32.00-32.00l 320.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00c0.00,0.00,0.00,58.344,0.00,64.00C 384.00,111.25, 345.156,152.062, 288.00,174.25z M 160.00,256.00
                                                  +		c0.00,17.688, 14.312,32.00, 32.00,32.00s 32.00-14.312, 32.00-32.00l0.00-96.00 c0.00-17.688-14.312-32.00-32.00-32.00s-32.00,14.312-32.00,32.00L 160.00,256.00 z M 320.00,32.00L 64.00,32.00 l0.00,32.00 
                                                  +		c0.00,19.438, 17.719,36.656, 45.094,48.406C 125.688,83.594, 156.406,64.00, 192.00,64.00s 66.312,19.594, 82.906,48.406
                                                  +		C 302.281,100.656, 320.00,83.438, 320.00,64.00L 320.00,32.00 zM 416.00,302.25L 416.00,384.00 c0.00,53.031-42.969,96.00-96.00,96.00s-96.00-42.969-96.00-96.00l0.00-4.531 c 25.281-6.531, 47.312-20.531, 64.00-39.625L 288.00,384.00 
                                                  +		c0.00,17.688, 14.312,32.00, 32.00,32.00s 32.00-14.312, 32.00-32.00l0.00-96.00 c0.00-17.688-14.312-32.00-32.00-32.00l0.00-64.00 c 35.594,0.00, 66.312,19.594, 82.906,48.406
                                                  +		C 430.281,228.656, 448.00,211.438, 448.00,192.00l0.00-32.00 L 331.219,160.00 c 32.219-16.594, 56.969-38.50, 71.062-64.00L 480.00,96.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00
                                                  +		c0.00,0.00,0.00,58.344,0.00,64.00C 512.00,239.25, 473.156,280.062, 416.00,302.25z" data-tags="users" />
                                                  +<glyph unicode="&#xe039;" d="M 512.00,288.00c0.00-141.969-256.00-320.00-256.00-320.00S0.00,146.031,0.00,288.00
                                                  +	c-0.281,14.156, 1.188,30.031,0.00,48.00C-5.281,415.344, 64.469,480.00, 144.00,480.00c 45.531,0.00, 85.625-31.031, 112.00-64.00c 26.375,32.969, 66.469,64.00, 112.00,64.00
                                                  +	c 79.531,0.00, 149.281-64.656, 144.00-144.00C 510.812,318.031, 512.281,302.156, 512.00,288.00z M 448.00,336.00c 3.969,44.00-35.812,80.00-80.00,80.00
                                                  +	c-82.906,0.00-80.00-64.00-80.00-64.00c0.00-17.688-14.312-32.00-32.00-32.00s-32.00,14.312-32.00,32.00c0.00,0.00, 2.906,64.00-80.00,64.00c-44.188,0.00-83.969-36.00-80.00-80.00
                                                  +	c 1.625-18.062-1.031-34.625, 0.438-48.00c-0.031,0.00-0.375,0.00-0.438,0.00c 2.00,0.469-11.00-94.281, 191.625-239.219
                                                  +	c 0.156,0.094, 0.25,0.188, 0.375,0.281c 0.125-0.094, 0.219-0.188, 0.375-0.281C 459.00,193.719, 446.00,288.469, 448.00,288.00
                                                  +	c-0.062,0.00-0.406,0.00-0.438,0.00C 449.031,301.375, 446.375,317.938, 448.00,336.00z" data-tags="heart" />
                                                  +<glyph unicode="&#xe03a;" d="M 304.00,480.00l-96.00,0.00 C 93.125,480.00,0.00,386.875,0.00,272.00c0.00-74.438, 39.406-139.25, 98.188-176.00L 96.00,96.00 l0.00-128.00 
                                                  +	l 144.00,96.00l 64.00,0.00 c 114.875,0.00, 208.00,93.125, 208.00,208.00S 418.875,480.00, 304.00,480.00z M 304.00,128.00l-64.00,0.00 l-80.00-48.00l0.00,56.812 C 104.188,156.656, 64.00,209.406, 64.00,272.00
                                                  +	c0.00,79.531, 64.469,144.00, 144.00,144.00l 96.00,0.00 c 79.531,0.00, 144.00-64.469, 144.00-144.00S 383.531,128.00, 304.00,128.00z" data-tags="chat" />
                                                  +<glyph unicode="&#xe03b;" d="M 128.00,256.00L 384.00,256.00L 384.00,192.00L 128.00,192.00zM 128.00,352.00L 384.00,352.00L 384.00,288.00L 128.00,288.00zM 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-352.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 64.00,0.00 l0.00-96.00 l 144.00,96.00l 240.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 
                                                  +		C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,128.00L 240.00,128.00 l-80.00-48.00l0.00,48.00 L 64.00,128.00 L 64.00,416.00 l 384.00,0.00 L 448.00,128.00 z" data-tags="comments" />
                                                  +<glyph unicode="&#xe03c;" d="M 480.00,480.00L 32.00,480.00 C 14.328,480.00,0.00,465.688,0.00,448.00l0.00-352.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 192.00,0.00 l0.00-32.00 l-96.00,0.00 
                                                  +	c-17.672,0.00-32.00-14.312-32.00-32.00l0.00-32.00 l 320.00,0.00 l0.00,32.00 c0.00,17.688-14.328,32.00-32.00,32.00l-96.00,0.00 l0.00,32.00 l 192.00,0.00 c 17.672,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 
                                                  +	C 512.00,465.688, 497.672,480.00, 480.00,480.00z M 448.00,128.00L 64.00,128.00 L 64.00,416.00 l 384.00,0.00 L 448.00,128.00 z" data-tags="screen" />
                                                  +<glyph unicode="&#xe03d;" d="M 416.00,480.00L 96.00,480.00 C 78.328,480.00, 64.00,465.688, 64.00,448.00l0.00-448.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 320.00,0.00 
                                                  +	c 17.672,0.00, 32.00,14.312, 32.00,32.00L 448.00,448.00 C 448.00,465.688, 433.672,480.00, 416.00,480.00z M 384.00,96.00L 128.00,96.00 L 128.00,416.00 l 256.00,0.00 L 384.00,96.00 z" data-tags="iphone" />
                                                  +<glyph unicode="&#xe03e;" d="M 480.00,480.00L 32.00,480.00 C 14.328,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 448.00,0.00 
                                                  +			c 17.672,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 C 512.00,465.688, 497.672,480.00, 480.00,480.00z M 448.00,96.00L 64.00,96.00 L 64.00,416.00 l 384.00,0.00 L 448.00,96.00 z" data-tags="ipad" />
                                                  +<glyph unicode="&#xe03f;" d="M 224.00,480.00c-17.672,0.00-32.00-14.312-32.00-32.00l0.00-160.00 l-32.00,0.00 L 160.00,448.00 c0.00,17.688-14.328,32.00-32.00,32.00S 96.00,465.688, 96.00,448.00l0.00-160.00 L 64.00,288.00 L 64.00,448.00 C 64.00,465.688, 49.672,480.00, 32.00,480.00
                                                  +		S0.00,465.688,0.00,448.00l0.00-192.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 64.00,0.00 l0.00-224.00 c0.00-17.688, 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00L 160.00,224.00 l 64.00,0.00 c 17.672,0.00, 32.00,14.312, 32.00,32.00L 256.00,448.00 
                                                  +		C 256.00,465.688, 241.672,480.00, 224.00,480.00zM 416.00,480.00c-53.016,0.00-96.00-42.969-96.00-96.00c0.00-41.75, 26.797-76.906, 64.00-90.125L 384.00,0.00 c0.00-17.688, 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00L 448.00,293.875 
                                                  +		c 37.203,13.219, 64.00,48.375, 64.00,90.125C 512.00,437.031, 469.016,480.00, 416.00,480.00z" data-tags="fork and spoon" />
                                                  +<glyph unicode="&#xe040;" d="M 224.00,480.00c-17.672,0.00-32.00-14.312-32.00-32.00l0.00-160.00 l-32.00,0.00 L 160.00,448.00 c0.00,17.688-14.328,32.00-32.00,32.00S 96.00,465.688, 96.00,448.00l0.00-160.00 L 64.00,288.00 L 64.00,448.00 C 64.00,465.688, 49.672,480.00, 32.00,480.00
                                                  +		S0.00,465.688,0.00,448.00l0.00-192.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 64.00,0.00 l0.00-224.00 c0.00-17.688, 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00L 160.00,224.00 l 64.00,0.00 c 17.672,0.00, 32.00,14.312, 32.00,32.00L 256.00,448.00 
                                                  +		C 256.00,465.688, 241.672,480.00, 224.00,480.00zM 448.00,480.00c0.00,0.00-64.00-20.656-64.00-96.00l0.00-64.00 c0.00-41.75, 26.797-76.906, 64.00-90.125L 448.00,0.00 
                                                  +	c0.00-17.688, 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00L 512.00,474.125 L 512.00,480.00 L 448.00,480.00 z" data-tags="fork and knife" />
                                                  +<glyph unicode="&#xe041;" d="M 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 
                                                  +	c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 192.00,224.00c0.00,0.00, 5.062,64.00, 64.00,64.00s 64.00-64.00, 64.00-64.00s 1.844-64.00-64.00-64.00S 192.00,224.00, 192.00,224.00
                                                  +	z M 448.00,32.00L 64.00,32.00 L 64.00,256.00 l 64.00,0.00 l 4.531,0.00 c-2.656-10.281-4.531-20.875-4.531-32.00c0.00-70.688, 57.312-128.00, 128.00-128.00s 128.00,57.312, 128.00,128.00
                                                  +	c0.00,11.125-1.875,21.719-4.531,32.00L 384.00,256.00 l 64.00,0.00 L 448.00,32.00 z M 448.00,320.00l-96.00,0.00 L 352.00,416.00 l 96.00,0.00 L 448.00,320.00 z" data-tags="instagram" />
                                                  +<glyph unicode="&#xe042;" d="M 480.00-32.00L 32.00-32.00 c-17.688,0.00-32.00,14.312-32.00,32.00L0.00,448.00 C0.00,465.688, 14.312,480.00, 32.00,480.00l 448.00,0.00 
                                                  +	c 17.688,0.00, 32.00-14.312, 32.00-32.00l0.00-448.00 C 512.00-17.688, 497.688-32.00, 480.00-32.00z M 448.00,416.00L 64.00,416.00 l0.00-384.00 l 384.00,0.00 L 448.00,416.00 z M 256.00,288.00c0.00,35.281, 29.188,64.00, 59.438,64.00L 352.00,352.00 
                                                  +	l0.00-64.00 l-32.00,0.00 l0.00-32.00 l 32.00,0.00 l0.00-64.00 l-32.00,0.00 l0.00-96.00 l-64.00,0.00 l0.00,96.00 l-32.00,0.00 l0.00,64.00 l 32.00,0.00 L 256.00,288.00 z" data-tags="facebook" />
                                                  +<glyph unicode="&#xe043;" d="M 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 
                                                  +			c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,32.00L 256.00,32.00 L 256.00,224.00 L 64.00,224.00 L 64.00,416.00 l 192.00,0.00 l0.00-192.00 l 192.00,0.00 L 448.00,32.00 z" data-tags="delicious" />
                                                  +<glyph unicode="&#xe044;" d="M 64.00,192.00L0.00,192.00 l0.00-192.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 192.00,0.00 l0.00,64.00 L 64.00,32.00 L 64.00,192.00 zM 64.00,416.00l 160.00,0.00 L 224.00,480.00 L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-192.00 l 64.00,0.00 L 64.00,416.00 zM 448.00,32.00L 288.00,32.00 l0.00-64.00 l 192.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,192.00 l-64.00,0.00 L 448.00,32.00 zM 480.00,480.00L 288.00,480.00 l0.00-64.00 l 160.00,0.00 l0.00-160.00 l 64.00,0.00 L 512.00,448.00 C 512.00,465.688, 497.688,480.00, 480.00,480.00zM 288.00,256.00L 288.00,352.00L 224.00,352.00L 224.00,256.00L 128.00,256.00L 128.00,192.00L 224.00,192.00L 224.00,96.00L 288.00,96.00L 288.00,192.00L 384.00,192.00L 384.00,256.00 	z" data-tags="googleplus" />
                                                  +<glyph unicode="&#xe045;" d="M 256.00,480.00C 114.615,480.00,0.00,365.385,0.00,224.00s 114.615-256.00, 256.00-256.00s 256.00,114.615, 256.00,256.00
                                                  +	S 397.385,480.00, 256.00,480.00z M 256.00,428.812c 47.562,0.00, 90.812-16.906, 125.562-44.125c-16.156-13.938-50.875-40.375-103.938-65.438
                                                  +	c-19.562,34.531-42.594,69.531-70.125,103.156C 223.125,426.219, 239.219,428.812, 256.00,428.812z M 168.938,408.719
                                                  +	c 15.50-21.062, 41.00-58.375, 67.906-106.00c-57.469-18.844-123.875-19.469-175.25-15.344C 79.25,341.00, 118.375,384.812, 168.938,408.719z
                                                  +	 M 253.25,272.719c 7.188-13.75, 14.281-28.562, 21.281-43.594c-107.312-23.531-157.562-93.969-177.656-132.594
                                                  +	c-28.156,35.062-45.688,79.00-45.688,127.469c0.00,9.062, 0.812,17.906, 1.969,26.625C 93.531,245.031, 165.00,242.844, 253.25,272.719z
                                                  +	 M 292.281,187.812c 19.156-46.812, 35.969-97.531, 45.781-151.25c-25.156-11.031-52.844-17.375-82.062-17.375
                                                  +	c-48.594,0.00-92.625,17.656-127.75,45.906C 179.094,135.781, 238.031,171.438, 292.281,187.812z M 374.719,57.656
                                                  +	c-2.594,14.656-13.781,69.438-40.281,139.562c 62.031,9.188, 111.25-2.938, 123.312-6.438
                                                  +	C 448.719,136.031, 418.062,88.656, 374.719,57.656z M 318.969,235.469c-7.438,17.281-15.438,34.938-24.781,53.125
                                                  +	c 37.062,16.031, 76.438,37.938, 117.219,67.375c 30.375-35.719, 49.406-81.406, 49.406-131.969
                                                  +	C 406.188,236.125, 359.438,238.781, 318.969,235.469z" data-tags="dribbble" />
                                                  +<glyph unicode="&#xe046;" d="M 256.00,480.00C 149.969,480.00, 64.00,394.031, 64.00,288.00s 192.00-320.00, 192.00-320.00s 192.00,213.969, 192.00,320.00
                                                  +			S 362.031,480.00, 256.00,480.00z M 256.00,160.00c-70.688,0.00-128.00,57.312-128.00,128.00S 185.312,416.00, 256.00,416.00s 128.00-57.312, 128.00-128.00S 326.688,160.00, 256.00,160.00z" data-tags="pin" />
                                                  +<glyph unicode="&#xe047;" d="M 256.00,480.00C 149.969,480.00, 64.00,394.031, 64.00,288.00s 192.00-320.00, 192.00-320.00s 192.00,213.969, 192.00,320.00
                                                  +			S 362.031,480.00, 256.00,480.00z M 256.00,160.00c-70.688,0.00-128.00,57.312-128.00,128.00S 185.312,416.00, 256.00,416.00s 128.00-57.312, 128.00-128.00S 326.688,160.00, 256.00,160.00z M 256.00,352.00
                                                  +			c-35.344,0.00-64.00-28.656-64.00-64.00s 28.656-64.00, 64.00-64.00s 64.00,28.656, 64.00,64.00S 291.344,352.00, 256.00,352.00z" data-tags="pin (alt)" />
                                                  +<glyph unicode="&#xe048;" d="M 480.00,384.00L 352.00,384.00 L 352.00,448.00 c0.00,17.656-14.328,32.00-32.00,32.00L 192.00,480.00 c-17.672,0.00-32.00-14.344-32.00-32.00l0.00-64.00 L 96.00,384.00 L 96.00,416.00 L 32.00,416.00 l0.00-32.00 c-17.672,0.00-32.00-14.344-32.00-32.00l0.00-352.00 
                                                  +		c0.00-17.688, 14.328-32.00, 32.00-32.00l 448.00,0.00 c 17.672,0.00, 32.00,14.312, 32.00,32.00L 512.00,352.00 C 512.00,369.656, 497.672,384.00, 480.00,384.00z M 224.00,416.00l 64.00,0.00 l0.00-32.00 l-64.00,0.00 L 224.00,416.00 z M 448.00,32.00L 64.00,32.00 
                                                  +		L 64.00,320.00 l 384.00,0.00 L 448.00,32.00 zM 256.00,96.00c 53.016,0.00, 96.00,42.969, 96.00,96.00s-42.984,96.00-96.00,96.00s-96.00-42.969-96.00-96.00S 202.984,96.00, 256.00,96.00z M 256.00,224.00
                                                  +		c 17.672,0.00, 32.00-14.312, 32.00-32.00s-14.328-32.00-32.00-32.00s-32.00,14.312-32.00,32.00S 238.328,224.00, 256.00,224.00z" data-tags="camera" />
                                                  +<glyph unicode="&#xe049;" d="M 32.00,256.00c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00
                                                  +			S 49.672,256.00, 32.00,256.00z M 96.00,352.00c 17.672,0.00, 32.00,14.312, 32.00,32.00s-14.328,32.00-32.00,32.00S 64.00,401.688, 64.00,384.00S 78.328,352.00, 96.00,352.00z M 256.00,416.00
                                                  +			c 17.672,0.00, 32.00,14.312, 32.00,32.00c0.00,17.656-14.328,32.00-32.00,32.00s-32.00-14.344-32.00-32.00C 224.00,430.312, 238.328,416.00, 256.00,416.00z M 96.00,96.00
                                                  +			c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00S 113.672,96.00, 96.00,96.00z M 416.00,96.00c-17.672,0.00-32.00-14.312-32.00-32.00
                                                  +			s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00S 433.672,96.00, 416.00,96.00z M 256.00,352.00c-70.688,0.00-128.00-57.312-128.00-128.00s 57.312-128.00, 128.00-128.00
                                                  +			s 128.00,57.312, 128.00,128.00S 326.688,352.00, 256.00,352.00z M 256.00,160.00c-35.344,0.00-64.00,28.656-64.00,64.00s 28.656,64.00, 64.00,64.00s 64.00-28.656, 64.00-64.00
                                                  +			S 291.344,160.00, 256.00,160.00z M 480.00,256.00c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00S 497.672,256.00, 480.00,256.00z M 256.00,32.00
                                                  +			c-17.672,0.00-32.00-14.344-32.00-32.00c0.00-17.688, 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00C 288.00,17.656, 273.672,32.00, 256.00,32.00z M 416.00,352.00
                                                  +			c 17.672,0.00, 32.00,14.312, 32.00,32.00s-14.328,32.00-32.00,32.00s-32.00-14.312-32.00-32.00S 398.328,352.00, 416.00,352.00z" data-tags="brightness" />
                                                  +<glyph unicode="&#xe04a;" d="M 256.00,352.00c-70.688,0.00-128.00-57.312-128.00-128.00s 57.312-128.00, 128.00-128.00s 128.00,57.312, 128.00,128.00
                                                  +		S 326.688,352.00, 256.00,352.00z M 256.00,160.00c-35.344,0.00-64.00,28.656-64.00,64.00s 28.656,64.00, 64.00,64.00L 256.00,160.00 zM 256.00,416.00c 17.672,0.00, 32.00,14.312, 32.00,32.00c0.00,17.656-14.328,32.00-32.00,32.00s-32.00-14.344-32.00-32.00
                                                  +		C 224.00,430.312, 238.328,416.00, 256.00,416.00zM 96.00,352.00c 17.672,0.00, 32.00,14.312, 32.00,32.00s-14.328,32.00-32.00,32.00S 64.00,401.688, 64.00,384.00
                                                  +		S 78.328,352.00, 96.00,352.00zM 32.00,256.00c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00
                                                  +		S 49.672,256.00, 32.00,256.00zM 96.00,96.00c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00
                                                  +		S 113.672,96.00, 96.00,96.00zM 256.00,32.00c-17.672,0.00-32.00-14.344-32.00-32.00c0.00-17.688, 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00
                                                  +		C 288.00,17.656, 273.672,32.00, 256.00,32.00zM 416.00,96.00c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00
                                                  +		S 433.672,96.00, 416.00,96.00zM 480.00,256.00c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00
                                                  +		S 497.672,256.00, 480.00,256.00zM 416.00,352.00c 17.672,0.00, 32.00,14.312, 32.00,32.00s-14.328,32.00-32.00,32.00s-32.00-14.312-32.00-32.00
                                                  +		S 398.328,352.00, 416.00,352.00z" data-tags="brightness-half" />
                                                  +<glyph unicode="&#xe04b;" d="M 255.843,367.964c 0.062-79.524, 64.464-143.988, 143.987-143.988
                                                  +	c 42.684,0.00, 80.649,18.936, 108.615,62.745c 4.719-0.844, 3.688-43.309, 3.375-62.745c-2.281-141.363-114.615-255.978-255.978-255.978
                                                  +	c-141.363,0.00-255.979,114.615-255.979,255.978S 114.479,478.079, 255.843,479.954c 16.874,0.219, 34.653-0.312, 63.433-1.719
                                                  +	C 301.37,459.956, 255.812,415.616, 255.843,367.964z M 191.848,319.968c0.00,34.591, 11.218,66.401, 29.873,92.555
                                                  +	c-89.68-16.155-157.861-94.21-157.861-188.546c0.00-106.021, 85.961-191.984, 191.983-191.984c 94.335,0.00, 172.392,68.182, 188.546,157.861
                                                  +	c-26.154-18.654-57.963-29.871-92.555-29.871C 263.467,159.982, 191.848,231.601, 191.848,319.968z" data-tags="moon" />
                                                  +<glyph unicode="&#xe04c;" d="M 400.00,352.00c-5.594,0.00-10.844-1.125-16.312-1.656C 346.875,408.844, 282.219,448.00, 208.00,448.00
                                                  +	C 93.125,448.00,0.00,354.875,0.00,240.00l0.00-32.00 c0.00-109.406, 84.75-199.719, 192.00-208.00l 224.00,0.00 c 89.594,8.188, 160.00,84.281, 160.00,176.00
                                                  +	C 576.00,273.188, 497.188,352.00, 400.00,352.00z M 416.00,64.00L 192.00,64.00 c-17.906,2.00-34.656,8.75-49.969,16.688c-0.312,0.156-0.594,0.344-0.906,0.50
                                                  +	c-7.156,3.781-13.938,8.031-20.312,12.938c-0.938,0.688-1.781,1.469-2.688,2.188c-5.625,4.531-11.00,9.312-15.906,14.656
                                                  +	c-1.562,1.656-2.875,3.531-4.344,5.281C 93.906,121.00, 90.00,125.812, 86.656,131.062c-1.969,3.062-3.469,6.375-5.188,9.562
                                                  +	c-2.406,4.50-4.938,8.844-6.844,13.594c-2.00,4.844-3.25,10.00-4.688,15.094c-1.031,3.594-2.375,7.00-3.125,10.719
                                                  +	C 65.031,189.062, 64.00,198.406, 64.00,208.00l0.00,32.00 c0.00,79.531, 64.469,144.00, 144.00,144.00c 10.75,0.00, 21.156-1.375, 31.25-3.625
                                                  +	c 2.062-0.469, 4.00-1.312, 6.031-1.875c 8.188-2.188, 16.125-4.938, 23.656-8.469c 1.281-0.625, 2.469-1.375, 3.75-2.031
                                                  +	c 8.281-4.188, 16.031-9.125, 23.312-14.781c 0.344-0.281, 0.688-0.562, 1.062-0.844c 24.531-19.50, 42.562-46.531, 50.312-77.938
                                                  +	C 363.062,282.938, 380.875,288.00, 400.00,288.00c 61.844,0.00, 112.00-50.156, 112.00-112.00C 512.00,119.625, 470.219,71.812, 416.00,64.00z" horiz-adv-x="576" data-tags="cloud" />
                                                  +<glyph unicode="&#xe04d;" d="M 256.00-32.00C 114.625-32.00,0.00,82.625,0.00,224.00S 114.625,480.00, 256.00,480.00s 256.00-114.625, 256.00-256.00
                                                  +	S 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00z M 256.00,96.00
                                                  +	c-70.688,0.00-128.00,57.312-128.00,128.00s 57.312,128.00, 128.00,128.00s 128.00-57.312, 128.00-128.00S 326.688,96.00, 256.00,96.00z" data-tags="circle-full" />
                                                  +<glyph unicode="&#xe04e;" d="M 256.00-32.00C 114.625-32.00,0.00,82.625,0.00,224.00S 114.625,480.00, 256.00,480.00s 256.00-114.625, 256.00-256.00
                                                  +	S 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00z M 128.00,224.00
                                                  +	c0.00,70.688, 57.312,128.00, 128.00,128.00l0.00-256.00 C 185.312,96.00, 128.00,153.312, 128.00,224.00z" data-tags="circle-half" />
                                                  +<glyph unicode="&#xe04f;" d="M 256.00-32.00C 114.625-32.00,0.00,82.625,0.00,224.00S 114.625,480.00, 256.00,480.00s 256.00-114.625, 256.00-256.00
                                                  +	S 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00z
                                                  +	 M 350.094,108.594l-5.625-3.281l-16.25-9.906l-9.594-6.969c-7.125-3.406-14.562-6.094-22.25-8.375L 296.375,89.50 l-2.719,21.719
                                                  +	c0.00,0.00-1.344,12.531-3.375,15.812c-2.031,3.312-6.781,7.938-11.531,9.906s-8.125,1.969-10.844,5.25c-2.719,3.312-4.75,9.25-8.125,14.50
                                                  +	c-3.406,5.281-7.469,10.562-7.469,13.188s0.00,29.656,0.00,29.656l 3.406,25.031l 7.438,5.281l 8.812,9.875l 6.094,1.969l 21.00-3.938l 14.906,0.00 
                                                  +	l 6.125-12.531l 14.219-11.188l 8.812-13.844l 11.50-3.938L 367.50,196.248 l 8.812-10.562l 5.438-11.188l 2.031-7.906l0.00-13.188 l-1.406-7.781
                                                  +	C 373.781,131.531, 362.875,119.125, 350.094,108.594z M 297.719,335.938l-14.906-7.906l-5.406-15.156l-8.812-7.906l-29.156,0.00 
                                                  +	l-13.531-5.281l-0.688-10.531l-5.406-8.562l-1.375-9.25l 2.719-7.906l 3.375-7.906c0.00,0.00, 8.156-9.219,0.00-15.812
                                                  +	c0.00,0.00-10.156,0.00-12.188,3.312c-2.031,3.281-16.938,12.50-19.656,15.156c-2.688,2.625-11.50,5.25-11.50,5.25l-10.844,3.969l-10.156,0.656
                                                  +	l 0.656,13.844l-0.656,11.844l-4.094,8.562l-11.50,8.594l-0.688,9.219l 1.406,5.125c 27.438,26.531, 65.25,42.969, 107.00,42.969
                                                  +	c 23.562,0.00, 45.594-5.656, 65.50-14.969l-0.438-3.469L 297.719,335.938z" data-tags="globe" />
                                                  +<glyph unicode="&#x20;" horiz-adv-x="256" />
                                                  +<glyph class="hidden" unicode="&#xf000;" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" />
                                                  +</font></defs></svg>
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.eot b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.eot
                                                  new file mode 100644
                                                  index 00000000..6c438c26
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.eot differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.svg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.svg
                                                  new file mode 100644
                                                  index 00000000..1cc9a07b
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.svg
                                                  @@ -0,0 +1,375 @@
                                                  +<?xml version="1.0" standalone="no"?>
                                                  +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
                                                  +<svg xmlns="http://www.w3.org/2000/svg">
                                                  +<metadata>
                                                  +This is a custom SVG font generated by IcoMoon.
                                                  +<iconset grid="16"></iconset>
                                                  +</metadata>
                                                  +<defs>
                                                  +<font id="eightyshades" horiz-adv-x="512" >
                                                  +<font-face units-per-em="512" ascent="480" descent="-32" />
                                                  +<missing-glyph horiz-adv-x="512" />
                                                  +<glyph unicode="&#xe000;" d="M 480.00,32.00l-32.00,0.00 l0.00,64.00 c0.00,17.672-14.312,32.00-32.00,32.00s-32.00-14.328-32.00-32.00l0.00-64.00 L 128.00,32.00 l0.00,64.00 
                                                  +			c0.00,17.672-14.312,32.00-32.00,32.00s-32.00-14.328-32.00-32.00l0.00-64.00 L 32.00,32.00 c-17.688,0.00-32.00-14.328-32.00-32.00s 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.328, 32.00,32.00
                                                  +			S 497.688,32.00, 480.00,32.00z M 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.672,0.00,448.00l0.00-192.00 c0.00-35.344, 28.656-64.00, 64.00-64.00s 64.00,28.656, 64.00,64.00c0.00-35.344, 28.656-64.00, 64.00-64.00
                                                  +			s 64.00,28.656, 64.00,64.00c0.00-35.344, 28.656-64.00, 64.00-64.00s 64.00,28.656, 64.00,64.00c0.00-35.344, 28.656-64.00, 64.00-64.00s 64.00,28.656, 64.00,64.00L 512.00,448.00 
                                                  +			C 512.00,465.672, 497.688,480.00, 480.00,480.00z"  />
                                                  +<glyph unicode="&#xe001;" d="M 480.00,256.00c-17.688,0.00-32.00-14.328-32.00-32.00l0.00-192.00 L 64.00,32.00 L 64.00,224.00 c0.00,17.672-14.312,32.00-32.00,32.00
                                                  +		S0.00,241.672,0.00,224.00l0.00-224.00 c0.00-17.672, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.328, 32.00,32.00L 512.00,224.00 C 512.00,241.672, 497.688,256.00, 480.00,256.00zM 224.00,160.00c0.00-17.672, 14.312-32.00, 32.00-32.00s 32.00,14.328, 32.00,32.00L 288.00,352.00 l 96.00,0.00 L 256.00,480.00L 128.00,352.00l 96.00,0.00 L 224.00,160.00 z
                                                  +		"  />
                                                  +<glyph unicode="&#xe002;" d="M 480.00,256.00c-17.688,0.00-32.00-14.328-32.00-32.00l0.00-192.00 L 64.00,32.00 L 64.00,224.00 c0.00,17.672-14.312,32.00-32.00,32.00
                                                  +	S0.00,241.672,0.00,224.00l0.00-224.00 c0.00-17.672, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.328, 32.00,32.00L 512.00,224.00 C 512.00,241.672, 497.688,256.00, 480.00,256.00zM 288.00,256.00L 288.00,451.909 C 288.00,467.422, 273.688,480.00, 256.00,480.00s-32.00-12.578-32.00-28.091L 224.00,256.00 l-96.00,0.00 l 128.00-128.00
                                                  +	l 128.00,128.00L 288.00,256.00 z"  />
                                                  +<glyph unicode="&#xe003;" d="M 480.00,480.00L 256.00,480.00 c-17.688,0.00-32.00-14.328-32.00-32.00s 14.312-32.00, 32.00-32.00l 192.00,0.00 l0.00-384.00 L 256.00,32.00 
                                                  +		c-17.688,0.00-32.00-14.328-32.00-32.00s 14.312-32.00, 32.00-32.00l 224.00,0.00 c 17.688,0.00, 32.00,14.328, 32.00,32.00L 512.00,448.00 C 512.00,465.672, 497.688,480.00, 480.00,480.00zM 224.00,96.00l 128.00,128.00L 224.00,352.00l0.00-96.00 L 28.591,256.00 C 12.788,256.00,0.00,241.672,0.00,224.00
                                                  +		s 12.788-32.00, 28.591-32.00L 224.00,192.00 L 224.00,96.00 z"  />
                                                  +<glyph unicode="&#xe004;" d="M 502.688,281.516L 313.579,470.609c-7.217,7.248-16.901,10.044-26.368,9.263l-62.422,0.00 
                                                  +	c-9.466,0.781-19.151-2.015-26.368-9.263l-38.396-38.397L 160.025,479.872 L 64.049,479.872 l0.00-143.636 L 9.312,281.516
                                                  +	c-7.248-7.248-10.028-16.917-9.247-26.368l0.00-63.202 c0.00-17.668, 14.309-31.993, 31.991-31.993l 31.992,0.00 l0.00-159.959 
                                                  +	c0.00-17.668, 14.309-31.992, 31.992-31.992L 415.96-31.998 c 17.683,0.00, 31.992,14.324, 31.992,31.992L 447.952,159.952 l 31.991,0.00 
                                                  +	c 17.684,0.00, 31.992,14.325, 31.992,31.993l0.00,63.202 C 512.717,264.599, 509.937,274.268, 502.688,281.516z M 447.952,223.937l-63.984,0.00 l0.00-191.951 
                                                  +	l-63.983,0.00 L 319.985,159.952 L 192.017,159.952 l0.00-127.967 l-63.984,0.00 L 128.033,223.937 L 64.049,223.937 l0.00,17.746 L 238.255,415.889l 35.491,0.00 l 174.206-174.206L 447.952,223.937 z"  />
                                                  +<glyph unicode="&#xe005;" d="M 272.00,480.00l-32.00,0.00 C 142.781,480.00, 64.00,401.203, 64.00,304.00c0.00-68.398, 39.009-127.682, 96.00-156.812L 160.00,128.00 
                                                  +	c0.00-17.672, 14.312-32.00, 32.00-32.00l 128.00,0.00 c 17.688,0.00, 32.00,14.328, 32.00,32.00l0.00,19.195 c 56.982,29.133, 96.00,88.412, 96.00,156.805C 448.00,401.203, 369.188,480.00, 272.00,480.00z
                                                  +	 M 288.00,193.143L 288.00,160.00 l-64.00,0.00 l0.00,33.143 c-54.267,7.766-96.00,54.433-96.00,110.857c0.00,61.859, 50.156,112.00, 112.00,112.00l 32.00,0.00 c 61.844,0.00, 112.00-50.141, 112.00-112.00
                                                  +	C 384.00,247.575, 342.267,200.908, 288.00,193.143zM 208.00,64.00l 96.00,0.00 c 8.844,0.00, 16.00-7.172, 16.00-16.00s-7.156-16.00-16.00-16.00l-96.00,0.00 c-8.844,0.00-16.00,7.172-16.00,16.00
                                                  +	S 199.156,64.00, 208.00,64.00zM 240.00,0.00l 32.00,0.00 c 8.844,0.00, 16.00-7.172, 16.00-16.00s-7.156-16.00-16.00-16.00l-32.00,0.00 c-8.844,0.00-16.00,7.172-16.00,16.00
                                                  +	S 231.156,0.00, 240.00,0.00z"  />
                                                  +<glyph unicode="&#xe006;" d="M 472.934,71.086C 425.871,7.322, 343.936-32.739, 256.00-31.989
                                                  +	c-87.936-0.75-169.872,39.312-216.934,103.075L 0.005,32.009L 0.005,160.006 l 127.997,0.00 l-35.187-35.17
                                                  +	c 28.219-46.719, 75.437-80.296, 131.185-89.812L 224.00,228.537 c-55.123,14.265-95.998,63.889-95.998,123.466C 128.002,422.688, 185.314,480.00, 256.00,480.00
                                                  +	c 70.685,0.00, 127.998-57.312, 127.998-127.998c0.00-59.577-40.875-109.201-95.998-123.466l0.00-193.512 
                                                  +	c 55.748,9.516, 102.967,43.093, 131.184,89.812l-35.186,35.17l 127.996,0.00 l0.00-127.997 L 472.934,71.086z M 319.998,352.002
                                                  +	c0.00,35.343-28.654,63.999-63.998,63.999c-35.344,0.00-63.999-28.656-63.999-63.999c0.00-35.343, 28.655-63.999, 63.999-63.999
                                                  +	C 291.344,288.004, 319.998,316.66, 319.998,352.002z"  />
                                                  +<glyph unicode="&#xe007;" d="M 433.206,437.378c-17.889,9.862-67.20,34.145-99.369,40.817
                                                  +	c-33.414,6.938-83.13-123.527-98.935-124.103C 209.267,353.175, 231.791,443.164, 256.151,480.00c-38.019-25.387-105.561-59.47-121.365-98.67
                                                  +	c-30.552-75.756, 56.622-212.086, 10.111-219.926c-14.498-2.442-54.663,94.019-65.085,123.449
                                                  +	c-29.463-56.312-7.28-109.029, 17.08-174.893l0.00-4.09 c-0.934-3.562-1.742-6.97-2.583-10.438l 2.583,0.00 l0.00-95.574 
                                                  +	c0.00-17.609, 14.249-31.858, 31.857-31.858c 17.609,0.00, 31.858,14.249, 31.858,31.858l0.00,95.574 l0.00,1.011 
                                                  +	c 59.454,6.689, 87.423-12.802, 128.147,64.416c-24.857-10.281-74.48,21.047-64.183,35.841c 20.689,29.773, 105.281-1.681, 159.197,89.834
                                                  +	c-85.339-22.742-95.419,9.862-96.228,21.747c-1.711,24.608, 85.308,11.573, 124.975,45.78
                                                  +	C 435.509,373.895, 463.073,420.889, 433.206,437.378z"  />
                                                  +<glyph unicode="&#xe008;" d="M 178.375,192.188L 73.094,86.906L 32.00,128.00c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-96.00 
                                                  +			c0.00-17.688, 14.312-32.00, 32.00-32.00l 96.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00l-41.094,41.062l 105.281,105.312L 178.375,192.188z M 480.00,480.00l-96.00,0.00 
                                                  +			c-17.688,0.00-32.00-14.328-32.00-32.00l 41.094-41.094L 287.812,301.625l 45.812-45.812l 105.281,105.266L 480.00,320.00c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 
                                                  +			C 512.00,465.672, 497.688,480.00, 480.00,480.00z M 480.00,128.00l-41.094-41.094L 333.625,192.188l-45.812-45.812l 105.281-105.312L 352.00,0.00
                                                  +			c0.00-17.688, 14.312-32.00, 32.00-32.00l 96.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00l0.00,96.00 C 512.00,113.688, 497.688,128.00, 480.00,128.00z M 160.00,448.00c0.00,17.672-14.312,32.00-32.00,32.00
                                                  +			L 32.00,480.00 C 14.312,480.00,0.00,465.672,0.00,448.00l0.00-96.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 41.094,41.078l 105.281-105.266l 45.812,45.812L 118.906,406.906L 160.00,448.00z"  />
                                                  +<glyph unicode="&#xe009;" d="M 480.00,320.00l-41.094,41.078L 333.625,255.812l-45.812,45.812L 393.094,406.906L 352.00,448.00
                                                  +	c0.00,17.672, 14.312,32.00, 32.00,32.00l 96.00,0.00 c 17.688,0.00, 32.00-14.328, 32.00-32.00l0.00-96.00 C 512.00,334.312, 497.688,320.00, 480.00,320.00z M 160.00,0.00c0.00-17.688-14.312-32.00-32.00-32.00L 32.00-32.00 
                                                  +	c-17.688,0.00-32.00,14.312-32.00,32.00l0.00,96.00 c0.00,17.688, 14.312,32.00, 32.00,32.00l 41.094-41.094l 105.281,105.281l 45.812-45.812L 118.906,41.062L 160.00,0.00z"  />
                                                  +<glyph unicode="&#xe00a;" d="M 497.914-17.913c-18.783-18.782-49.225-18.782-68.008,0.00l-84.863,84.863
                                                  +	c-34.888-22.382-76.13-35.717-120.659-35.717C 100.469,31.233,0.00,131.687,0.00,255.617S 100.469,480.00, 224.384,480.00
                                                  +	c 123.931,0.00, 224.384-100.452, 224.384-224.383c0.00-44.514-13.352-85.771-35.718-120.676l 84.864-84.863
                                                  +	C 516.695,31.296, 516.695,0.869, 497.914-17.913z M 224.384,415.891c-88.511,0.00-160.274-71.747-160.274-160.273
                                                  +	s 71.763-160.274, 160.274-160.274c 88.526,0.00, 160.274,71.748, 160.274,160.274S 312.91,415.891, 224.384,415.891z"  />
                                                  +<glyph unicode="&#xe00b;" d="M 497.914-17.914c-18.783-18.781-49.226-18.781-68.008,0.00l-84.863,84.864
                                                  +	c-34.889-22.366-76.131-35.718-120.66-35.718C 100.468,31.232,0.00,131.686,0.00,255.616S 100.468,480.00, 224.383,480.00
                                                  +	c 123.931,0.00, 224.384-100.453, 224.384-224.384c0.00-44.529-13.352-85.771-35.718-120.675l 84.864-84.848
                                                  +	C 516.695,31.311, 516.695,0.869, 497.914-17.914z M 224.383,415.89c-88.511,0.00-160.274-71.763-160.274-160.274
                                                  +	c0.00-88.526, 71.763-160.274, 160.274-160.274c 88.527,0.00, 160.274,71.748, 160.274,160.274C 384.657,344.127, 312.91,415.89, 224.383,415.89z
                                                  +	 M 256.438,159.452l-64.109,0.00 l0.00,64.109 l-64.109,0.00 l0.00,64.109 l 64.109,0.00 l0.00,64.11 l 64.109,0.00 l0.00-64.11 l 64.11,0.00 l0.00-64.109 l-64.11,0.00 L 256.438,159.452 z"  />
                                                  +<glyph unicode="&#xe00c;" d="M 497.914,50.094l-84.864,84.848c 22.366,34.903, 35.718,76.146, 35.718,120.675
                                                  +			C 448.768,379.547, 348.314,480.00, 224.383,480.00C 100.468,480.00,0.00,379.547,0.00,255.616s 100.468-224.384, 224.383-224.384
                                                  +			c 44.529,0.00, 85.771,13.352, 120.66,35.718l 84.863-84.864c 18.782-18.781, 49.225-18.781, 68.008,0.00
                                                  +			C 516.695,0.869, 516.695,31.311, 497.914,50.094z M 224.383,95.342c-88.511,0.00-160.274,71.748-160.274,160.274
                                                  +			c0.00,88.511, 71.763,160.274, 160.274,160.274c 88.527,0.00, 160.274-71.763, 160.274-160.274
                                                  +			C 384.657,167.09, 312.91,95.342, 224.383,95.342z M 128.219,223.562l 192.329,0.00 l0.00,64.109 L 128.219,287.671 L 128.219,223.562 z"  />
                                                  +<glyph unicode="&#xe00d;" d="M 256.00-32.00C 114.625-32.00,0.00,82.609,0.00,224.00S 114.625,480.00, 256.00,480.00
                                                  +	c 141.391,0.00, 256.00-114.609, 256.00-256.00S 397.391-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00
                                                  +	c 106.047,0.00, 192.00,85.969, 192.00,192.00S 362.047,416.00, 256.00,416.00z M 288.00,96.00l-64.00,0.00 l0.00,96.00 l-96.00,0.00 l0.00,64.00 l 96.00,0.00 l0.00,96.00 l 64.00,0.00 l0.00-96.00 l 96.00,0.00 l0.00-64.00 l-96.00,0.00 L 288.00,96.00 z"  />
                                                  +<glyph unicode="&#xe00e;" d="M 256.00,480.00C 114.625,480.00,0.00,365.375,0.00,224.00c0.00-141.391, 114.625-256.00, 256.00-256.00
                                                  +			c 141.391,0.00, 256.00,114.609, 256.00,256.00C 512.00,365.375, 397.391,480.00, 256.00,480.00z M 256.00,32.00c-106.031,0.00-192.00,85.969-192.00,192.00S 149.969,416.00, 256.00,416.00
                                                  +			c 106.047,0.00, 192.00-85.969, 192.00-192.00S 362.047,32.00, 256.00,32.00z M 128.00,192.00l 256.00,0.00 l0.00,64.00 L 128.00,256.00 L 128.00,192.00 z"  />
                                                  +<glyph unicode="&#xe00f;" d="M 256.00-32.00C 114.625-32.00,0.00,82.609,0.00,224.00C0.00,365.375, 114.625,480.00, 256.00,480.00
                                                  +	s 256.00-114.625, 256.00-256.00C 512.00,82.609, 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00
                                                  +	s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00z M 224.00,160.00l 64.00,0.00 l0.00-64.00 l-64.00,0.00 L 224.00,160.00 z M 224.00,352.00l 64.00,0.00 l0.00-160.00 l-64.00,0.00 L 224.00,352.00 z"  />
                                                  +<glyph unicode="&#xe010;" d="M 256.00-32.00C 114.625-32.00,0.00,82.609,0.00,224.00C0.00,365.375, 114.625,480.00, 256.00,480.00
                                                  +	s 256.00-114.625, 256.00-256.00C 512.00,82.609, 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00
                                                  +	s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00zM 256.00,352.00c-53.031,0.00-96.00-42.984-96.00-96.00l 64.00,0.00 c0.00,17.672, 14.312,32.00, 32.00,32.00s 32.00-14.328, 32.00-32.00
                                                  +	s-14.312-32.00-32.00-32.00c-1.225,0.00-5.108,0.00-16.00,0.00c-8.844,0.00-16.00-7.172-16.00-16.00l0.00-48.00 l 64.00,0.00 l0.00,5.875 c 37.188,13.219, 64.00,48.391, 64.00,90.125
                                                  +	C 352.00,309.016, 309.031,352.00, 256.00,352.00zM 256.00,128.00L 224.00,128.00L 224.00,96.00L 256.00,96.00L 288.00,96.00L 288.00,128.00 z"  />
                                                  +<glyph unicode="&#xe011;" d="M 74.966,42.987c-99.97,99.97-99.97,262.066,0.00,362.037
                                                  +	c 100.002,99.97, 262.067,99.97, 362.068,0.00c 99.97-99.971, 99.97-262.067,0.00-362.037C 337.033-56.998, 174.968-56.998, 74.966,42.987z
                                                  +	 M 391.783,359.773c-75.001,74.985-196.565,74.985-271.535,0.00c-75.001-74.985-75.001-196.55,0.00-271.535
                                                  +	c 74.97-74.986, 196.534-74.986, 271.535,0.00C 466.754,163.224, 466.754,284.788, 391.783,359.773z M 188.124,110.863l-45.251,45.266
                                                  +	l 67.876,67.877l-67.876,67.876l 45.251,45.267L 256.00,269.257l 67.877,67.892l 45.25-45.267l-67.876-67.876l 67.876-67.877l-45.25-45.266
                                                  +	L 256.00,178.755L 188.124,110.863z"  />
                                                  +<glyph unicode="&#xe012;" d="M 400.00,192.00c-17.25,0.00-33.406-4.219-48.00-11.188l0.00,86.375 
                                                  +	C 366.594,260.219, 382.75,256.00, 400.00,256.00c 61.844,0.00, 112.00,50.141, 112.00,112.00S 461.844,480.00, 400.00,480.00S 288.00,429.859, 288.00,368.00l0.00-48.00 l-64.00,0.00 l0.00,48.00 
                                                  +	C 224.00,429.859, 173.844,480.00, 112.00,480.00S0.00,429.859,0.00,368.00s 50.156-112.00, 112.00-112.00c 17.25,0.00, 33.406,4.219, 48.00,11.188l0.00-86.375 
                                                  +	C 145.406,187.781, 129.25,192.00, 112.00,192.00C 50.156,192.00,0.00,141.859,0.00,80.00s 50.156-112.00, 112.00-112.00s 112.00,50.141, 112.00,112.00l0.00,48.00 l 64.00,0.00 l0.00-48.00 
                                                  +	c0.00-61.859, 50.156-112.00, 112.00-112.00s 112.00,50.141, 112.00,112.00S 461.844,192.00, 400.00,192.00z M 400.00,416.00c 26.50,0.00, 48.00-21.484, 48.00-48.00s-21.50-48.00-48.00-48.00
                                                  +	s-48.00,21.484-48.00,48.00S 373.50,416.00, 400.00,416.00z M 112.00,32.00c-26.50,0.00-48.00,21.484-48.00,48.00s 21.50,48.00, 48.00,48.00s 48.00-21.484, 48.00-48.00S 138.50,32.00, 112.00,32.00z M 112.00,320.00
                                                  +	c-26.50,0.00-48.00,21.484-48.00,48.00s 21.50,48.00, 48.00,48.00s 48.00-21.484, 48.00-48.00S 138.50,320.00, 112.00,320.00z M 288.00,192.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 L 288.00,192.00 z M 400.00,32.00
                                                  +	c-26.50,0.00-48.00,21.484-48.00,48.00s 21.50,48.00, 48.00,48.00s 48.00-21.484, 48.00-48.00S 426.50,32.00, 400.00,32.00z"  />
                                                  +<glyph unicode="&#xe013;" d="M 256.00-32.00C 114.625-32.00,0.00,82.625,0.00,224.00C0.00,365.391, 114.625,480.00, 256.00,480.00
                                                  +	s 256.00-114.609, 256.00-256.00C 512.00,82.625, 397.375-32.00, 256.00-32.00z M 64.00,224.00c0.00-41.312, 13.312-79.312, 35.531-110.656L 366.656,380.484
                                                  +	C 335.344,402.672, 297.312,416.00, 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00z M 412.469,334.656L 145.344,67.50
                                                  +	C 176.656,45.312, 214.688,32.00, 256.00,32.00c 106.031,0.00, 192.00,85.969, 192.00,192.00C 448.00,265.312, 434.688,303.328, 412.469,334.656z"  />
                                                  +<glyph unicode="&#xe014;" d="M 256.00,384.00L 64.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.672,0.00,448.00l0.00-352.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 224.00-96.00
                                                  +	l 224.00,96.00c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 c0.00,17.672-14.312,32.00-32.00,32.00l-32.00,0.00  M 224.00,48.00L 64.00,128.00L 64.00,384.00 l 160.00-53.328L 224.00,48.00 z M 448.00,128.00l-160.00-80.00L 288.00,330.672 
                                                  +	L 448.00,384.00L 448.00,128.00 z"  />
                                                  +<glyph unicode="&#xe015;" d="M 480.00,192.00l-64.00,0.00 c-17.688,0.00-32.00,14.312-32.00,32.00s 14.312,32.00, 32.00,32.00l 64.00,0.00 
                                                  +	c 17.688,0.00, 32.00-14.312, 32.00-32.00S 497.688,192.00, 480.00,192.00z M 391.75,314.50c-12.50-12.50-32.75-12.50-45.25,0.00s-12.50,32.75,0.00,45.25L 391.75,405.00
                                                  +	c 12.50,12.50, 32.75,12.50, 45.25,0.00s 12.50-32.75,0.00-45.25L 391.75,314.50z M 256.00-32.00c-17.688,0.00-32.00,14.312-32.00,32.00l0.00,64.00 c0.00,17.688, 14.312,32.00, 32.00,32.00
                                                  +	s 32.00-14.312, 32.00-32.00l0.00-64.00 C 288.00-17.688, 273.688-32.00, 256.00-32.00z M 256.00,352.00c-17.688,0.00-32.00,14.312-32.00,32.00L 224.00,448.00 c0.00,17.688, 14.312,32.00, 32.00,32.00
                                                  +	s 32.00-14.312, 32.00-32.00l0.00-64.00 C 288.00,366.312, 273.688,352.00, 256.00,352.00z M 120.25,43.00c-12.50-12.50-32.75-12.50-45.25,0.00c-12.50,12.469-12.50,32.75,0.00,45.25
                                                  +	l 45.25,45.25c 12.50,12.50, 32.75,12.50, 45.25,0.00s 12.50-32.75,0.00-45.25L 120.25,43.00z M 120.25,314.50L 75.00,359.75C 62.50,372.25, 62.50,392.50, 75.00,405.00
                                                  +	s 32.75,12.50, 45.25,0.00l 45.25-45.25c 12.50-12.50, 12.50-32.75,0.00-45.25S 132.75,302.00, 120.25,314.50z M 128.00,224.00c0.00-17.688-14.312-32.00-32.00-32.00L 32.00,192.00 
                                                  +	c-17.688,0.00-32.00,14.312-32.00,32.00s 14.312,32.00, 32.00,32.00l 64.00,0.00 C 113.688,256.00, 128.00,241.688, 128.00,224.00z M 391.75,133.50L 437.00,88.25
                                                  +	c 12.50-12.50, 12.50-32.781,0.00-45.25c-12.50-12.50-32.75-12.50-45.25,0.00l-45.25,45.25c-12.50,12.50-12.50,32.75,0.00,45.25S 379.25,146.00, 391.75,133.50
                                                  +	z"  />
                                                  +<glyph unicode="&#xe016;" d="M 256.00-32.00C 114.625-32.00,0.00,82.625,0.00,224.00C0.00,365.391, 114.625,480.00, 256.00,480.00
                                                  +	s 256.00-114.609, 256.00-256.00C 512.00,82.625, 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00
                                                  +	s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00z M 192.00,320.00l 160.00-96.00l-160.00-96.00L 192.00,320.00 z"  />
                                                  +<glyph unicode="&#xe017;" d="M 256.00-32.00C 114.625-32.00,0.00,82.625,0.00,224.00C0.00,365.391, 114.625,480.00, 256.00,480.00
                                                  +	s 256.00-114.609, 256.00-256.00C 512.00,82.625, 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00
                                                  +	s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00z M 192.00,288.00l 128.00,0.00 l0.00-128.00 L 192.00,160.00 L 192.00,288.00 z"  />
                                                  +<glyph unicode="&#xe018;" d="M 256.00,480.00C 114.625,480.00,0.00,365.391,0.00,224.00c0.00-141.375, 114.625-256.00, 256.00-256.00
                                                  +			s 256.00,114.625, 256.00,256.00C 512.00,365.391, 397.375,480.00, 256.00,480.00z M 256.00,32.00c-106.031,0.00-192.00,85.969-192.00,192.00S 149.969,416.00, 256.00,416.00s 192.00-85.969, 192.00-192.00
                                                  +			S 362.031,32.00, 256.00,32.00z M 160.00,160.00l 64.00,0.00 L 224.00,288.00 l-64.00,0.00 L 160.00,160.00 z M 288.00,160.00l 64.00,0.00 L 352.00,288.00 l-64.00,0.00 L 288.00,160.00 z"  />
                                                  +<glyph unicode="&#xe019;" d="M 256.00,480.00C 114.625,480.00,0.00,365.391,0.00,224.00c0.00-141.375, 114.625-256.00, 256.00-256.00
                                                  +			s 256.00,114.625, 256.00,256.00C 512.00,365.391, 397.375,480.00, 256.00,480.00z M 256.00,32.00c-106.031,0.00-192.00,85.969-192.00,192.00S 149.969,416.00, 256.00,416.00s 192.00-85.969, 192.00-192.00
                                                  +			S 362.031,32.00, 256.00,32.00zM 384.00,224.00L 256.00,320.00L 256.00,248.00L 160.00,320.00L 160.00,128.00L 256.00,200.00L 256.00,128.00 z"  />
                                                  +<glyph unicode="&#xe01a;" d="M 256.00,480.00C 114.625,480.00,0.00,365.375,0.00,224.00c0.00-141.391, 114.625-256.00, 256.00-256.00
                                                  +			s 256.00,114.609, 256.00,256.00C 512.00,365.375, 397.375,480.00, 256.00,480.00z M 256.00,32.00c-106.031,0.00-192.00,85.969-192.00,192.00S 149.969,416.00, 256.00,416.00s 192.00-85.969, 192.00-192.00
                                                  +			S 362.031,32.00, 256.00,32.00zM 128.00,224.00L 256.00,128.00L 256.00,200.00L 352.00,128.00L 352.00,320.00L 256.00,248.00L 256.00,320.00 z"  />
                                                  +<glyph unicode="&#xe01b;" d="M 408.208,329.356c-12.985-12.954-33.994-12.954-46.98,0.00
                                                  +	c-12.955,12.955-12.955,33.995,0.00,46.981l 93.931,93.931c 12.986,12.955, 33.995,12.955, 46.981,0.00c 12.954-12.955, 12.954-33.995,0.00-46.98
                                                  +	L 408.208,329.356z M 255.871-31.727L 128.008,96.137L 32.11,96.137 c-17.669,0.00-31.966,14.298-31.966,31.967L 0.144,319.898 
                                                  +	c0.00,17.668, 14.297,31.966, 31.966,31.966l 95.897,0.00 L 255.871,479.728c0.00,0.00, 31.966,3.996, 31.966-31.966c0.00-191.233,0.00-478.926,0.00-447.522
                                                  +	C 287.837-35.722, 255.871-31.727, 255.871-31.727z M 223.905,351.864l-63.932-63.932L 64.076,287.932 l0.00-127.863 l 95.897,0.00 l 63.932-63.933L 223.905,351.864 z
                                                  +	 M 383.734,192.035c-17.669,0.00-31.966,14.297-31.966,31.966c0.00,17.668, 14.297,31.966, 31.966,31.966l 95.897,0.00 
                                                  +	c 17.669,0.00, 31.966-14.298, 31.966-31.966c0.00-17.669-14.297-31.966-31.966-31.966L 383.734,192.035 z M 408.208,118.645l 93.932-93.931
                                                  +	c 12.954-12.986, 12.954-34.026,0.00-46.981c-12.986-12.955-33.995-12.955-46.981,0.00l-93.931,93.931
                                                  +	c-12.955,12.986-12.955,34.026,0.00,46.981C 374.214,131.60, 395.223,131.60, 408.208,118.645z"  />
                                                  +<glyph unicode="&#xe01c;" d="M 319.967-23.497l0.00,67.34 C 394.335,70.267, 447.90,140.543, 447.90,224.00
                                                  +	c0.00,83.426-53.565,153.732-127.934,180.156L 319.966,471.497 C 430.254,443.012, 511.868,343.188, 511.868,224.00S 430.254,4.957, 319.967-23.497z
                                                  +	 M 256.00-31.868L 128.066,96.065L 32.115,96.065 c-17.678,0.00-31.983,14.306-31.983,31.983L 0.132,319.95 c0.00,17.679, 14.306,31.983, 31.983,31.983l 95.951,0.00 
                                                  +	L 256.00,479.867c0.00,0.00, 31.983,3.998, 31.983-31.983c0.00-72.899,0.00-382.053,0.00-447.769C 287.983-35.866, 256.00-31.868, 256.00-31.868z
                                                  +	 M 224.017,351.934l-63.967-63.967L 64.099,287.967 l0.00-127.934 l 95.951,0.00 l 63.967-63.968L 224.017,351.934 z M 415.917,224.00
                                                  +	c0.00-59.532-40.854-109.132-95.95-123.405l0.00,68.309 C 339.02,179.991, 351.95,200.387, 351.95,224.00c0.00,23.612-12.931,44.008-31.983,55.097
                                                  +	l0.00,68.308 C 375.063,333.131, 415.917,283.531, 415.917,224.00z"  />
                                                  +<glyph unicode="&#xe01d;" d="M 511.603,176.274l-47.694-47.726l-47.726,47.726l-47.725-47.726l-47.694,47.726
                                                  +	L 368.458,224.00l-47.694,47.725l 47.694,47.726l 47.725-47.726l 47.726,47.726l 47.694-47.726L 463.908,224.00L 511.603,176.274z
                                                  +	 M 256.266-31.868L 128.332,96.065L 32.381,96.065 c-17.678,0.00-31.983,14.306-31.983,31.983L 0.398,319.95 c0.00,17.679, 14.306,31.983, 31.983,31.983
                                                  +	l 95.951,0.00 L 256.266,479.867c0.00,0.00, 31.983,3.998, 31.983-31.983c0.00-173.535,0.00-425.718,0.00-447.769
                                                  +	C 288.249-35.866, 256.266-31.868, 256.266-31.868z M 224.282,351.934l-63.967-63.967L 64.364,287.967 l0.00-127.934 l 95.951,0.00 l 63.967-63.968L 224.282,351.934 z"  />
                                                  +<glyph unicode="&#xe01e;" d="M 325.719,352.375L 229.094,248.75L 184.812,296.219L 144.00,252.438L 230.781,160.094L 367.938,307.125 zM 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 
                                                  +	c 17.688,0.00, 32.00,14.312, 32.00,32.00l0.00,96.00 L 512.00,352.00 L 512.00,448.00 C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,128.00l-96.00,0.00 l0.00-96.00 L 160.00,32.00 l0.00,96.00 L 64.00,128.00 L 64.00,320.00 L 64.00,416.00 l 96.00,0.00 l 192.00,0.00 l 96.00,0.00 L 448.00,128.00 z"  />
                                                  +<glyph unicode="&#xe01f;" d="M 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 
                                                  +	c 17.688,0.00, 32.00,14.312, 32.00,32.00l0.00,96.00 L 512.00,352.00 L 512.00,448.00 C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,128.00l-96.00,0.00 l0.00-96.00 L 160.00,32.00 l0.00,96.00 L 64.00,128.00 L 64.00,320.00 L 64.00,416.00 l 96.00,0.00 l 192.00,0.00 l 96.00,0.00 L 448.00,128.00 zM 128.00,256.00L 384.00,256.00L 384.00,192.00L 128.00,192.00zM 128.00,352.00L 384.00,352.00L 384.00,288.00L 128.00,288.00z"  />
                                                  +<glyph unicode="&#xe020;" d="M 384.00,480.00L 128.00,480.00 L0.00,224.00l0.00-224.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 448.00,0.00 c 17.672,0.00, 32.00,14.312, 32.00,32.00
                                                  +			L 512.00,224.00 L 384.00,480.00z M 448.00,32.00L 64.00,32.00 L 64.00,224.00 l 96.00,192.00l 192.00,0.00 l 96.00-192.00L 448.00,32.00 zM 320.00,352.00L 192.00,352.00L 128.00,224.00L 192.00,224.00L 192.00,160.00L 320.00,160.00L 320.00,224.00L 384.00,224.00 z"  />
                                                  +<glyph unicode="&#xe021;" d="M 479.999,416.00L 32.00,416.00 C 14.329,416.00,0.00,401.688,0.00,384.00l0.00-320.00 c0.00-17.688, 14.329-32.00, 32.00-32.00l 447.999,0.00 
                                                  +	C 497.671,32.00, 512.00,46.312, 512.00,64.00L 512.00,384.00 C 512.00,401.688, 497.671,416.00, 479.999,416.00z M 416.00,352.00L 256.00,224.00L 96.00,352.00L 416.00,352.00 z M 448.00,96.00L 64.00,96.00 L 64.00,320.00 l 192.00-160.00
                                                  +	l 192.00,160.00L 448.00,96.00 z"  />
                                                  +<glyph unicode="&#xe022;" d="M 480.00-32.00L 32.00-32.00 c-17.672,0.00-32.00,14.312-32.00,32.00L0.00,448.00 C0.00,465.688, 14.328,480.00, 32.00,480.00l 320.00,0.00 l-64.00-64.00L 64.00,416.00 
                                                  +	l0.00-384.00 l 384.00,0.00 L 448.00,256.00 l 64.00,64.00l0.00-320.00 C 512.00-17.688, 497.672-32.00, 480.00-32.00z M 128.00,96.00l0.00,96.00 L 416.00,480.00l 32.00,0.00 l 64.00-64.00l0.00-32.00 L 224.00,96.00L 128.00,96.00 z M 272.00,208.00L 448.00,384.00l-32.00,32.00
                                                  +	L 240.00,240.00L 272.00,208.00z M 192.00,192.00l-32.00-32.00l0.00-32.00 l 32.00,0.00 l 32.00,32.00L 192.00,192.00z"  />
                                                  +<glyph unicode="&#xe023;" d="M 128.00,128.00L 288.00,128.00L 288.00,96.00L 128.00,96.00zM 128.00,192.00L 288.00,192.00L 288.00,160.00L 128.00,160.00zM 128.00,352.00L 288.00,352.00L 288.00,224.00L 128.00,224.00zM 480.00,416.00l-96.00,0.00 L 384.00,480.00 L 32.00,480.00 C 14.312,480.00,0.00,465.672,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,384.00 
                                                  +		C 512.00,401.672, 497.688,416.00, 480.00,416.00z M 448.00,32.00L 64.00,32.00 L 64.00,416.00 l 288.00,0.00 l0.00-320.00 l 32.00,0.00 L 384.00,352.00 l 64.00,0.00 L 448.00,32.00 z"  />
                                                  +<glyph unicode="&#xe024;" d="M 480.00,480.00L 96.00,480.00 C 78.312,480.00, 64.00,465.672, 64.00,448.00l0.00-32.00 L 32.00,416.00 C 14.312,416.00,0.00,401.672,0.00,384.00l0.00-384.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 
                                                  +		c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 C 512.00,465.672, 497.688,480.00, 480.00,480.00z M 128.00,32.00L 64.00,32.00 L 64.00,352.00 l 64.00,0.00 L 128.00,32.00 z M 448.00,32.00L 192.00,32.00 l0.00,32.00 L 192.00,352.00 L 192.00,416.00 l 256.00,0.00 L 448.00,32.00 zM 256.00,352.00L 384.00,352.00L 384.00,288.00L 256.00,288.00zM 256.00,160.00L 384.00,160.00L 384.00,96.00L 256.00,96.00zM 256.00,256.00L 384.00,256.00L 384.00,192.00L 256.00,192.00z"  />
                                                  +<glyph unicode="&#xe025;" d="M 480.00-32.00L 32.00-32.00 c-17.688,0.00-32.00,14.312-32.00,32.00L0.00,448.00 C0.00,465.672, 14.312,480.00, 32.00,480.00l 64.00,0.00 l0.00-64.00 L 64.00,416.00 l0.00-384.00 
                                                  +	l 384.00,0.00 L 448.00,416.00 l-32.00,0.00 L 416.00,480.00 l 64.00,0.00 c 17.688,0.00, 32.00-14.328, 32.00-32.00l0.00-448.00 C 512.00-17.688, 497.688-32.00, 480.00-32.00z M 128.00,352.00l 32.00,0.00 L 160.00,448.00 l 64.00,0.00 L 224.00,480.00 l 64.00,0.00 l0.00-32.00 l 64.00,0.00 l0.00-96.00 l 32.00,0.00 l0.00-256.00 L 128.00,96.00 L 128.00,352.00 z
                                                  +	 M 288.00,416.00l-64.00,0.00 l0.00-32.00 l 64.00,0.00 L 288.00,416.00 z M 192.00,160.00l 128.00,0.00 L 320.00,288.00 L 192.00,288.00 L 192.00,160.00 z"  />
                                                  +<glyph unicode="&#xe026;" d="M 416.00,480.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 L 416.00,480.00 z M 480.00,480.00l-32.00,0.00 l0.00-96.00 L 320.00,384.00 L 320.00,480.00 L 192.00,480.00 l0.00-96.00 L 64.00,384.00 L 64.00,480.00 L 32.00,480.00 C 14.312,480.00,0.00,465.672,0.00,448.00
                                                  +			l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 C 512.00,465.672, 497.688,480.00, 480.00,480.00z M 448.00,32.00L 64.00,32.00 L 64.00,320.00 l 384.00,0.00 L 448.00,32.00 z M 160.00,480.00L 96.00,480.00 
                                                  +			l0.00-64.00 l 64.00,0.00 L 160.00,480.00 z M 288.00,256.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 L 288.00,256.00 z M 384.00,256.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 L 384.00,256.00 z M 192.00,160.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 L 192.00,160.00 z M 192.00,256.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 L 192.00,256.00 z M 288.00,160.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 
                                                  +			L 288.00,160.00 z M 384.00,160.00l-64.00,0.00 l0.00-64.00 l 64.00,0.00 L 384.00,160.00 z"  />
                                                  +<glyph unicode="&#xe027;" d="M 503.466,347.732L 379.733,471.466c-11.38,11.379-29.855,11.379-41.234,0.00
                                                  +		L 214.767,347.732c-11.411-11.379-11.411-29.854,0.00-41.265l 20.601-20.601L 359.101,409.599l 82.499-82.499L 317.867,203.367
                                                  +		l 20.632-20.632c 11.379-11.38, 29.854-11.38, 41.234,0.00l 123.732,123.732C 514.845,317.878, 514.845,336.354, 503.466,347.732zM 276.633,162.134L 152.90,38.40l-82.499,82.499l 123.732,123.733l-20.632,20.632
                                                  +		c-11.379,11.38-29.854,11.38-41.233,0.00L 8.534,141.532c-11.379-11.41-11.379-29.886,0.00-41.265l 123.733-123.733
                                                  +		c 11.379-11.379, 29.854-11.379, 41.233,0.00l 123.733,123.733c 11.41,11.379, 11.41,29.854,0.00,41.265L 276.633,162.134zM 173.501,141.532c 11.411-11.41, 29.854-11.41, 41.266,0.00l 123.732,123.732
                                                  +		c 11.379,11.38, 11.379,29.824,0.00,41.203c-11.41,11.41-29.854,11.41-41.265,0.00L 173.501,182.735
                                                  +		C 162.122,171.355, 162.122,152.911, 173.501,141.532z"  />
                                                  +<glyph unicode="&#xe028;" d="M 288.00,256.00L 352.00,256.00L 352.00,96.00L 288.00,96.00zM 480.00,384.00L 352.00,384.00 L 352.00,448.00 c0.00,17.688-14.312,32.00-32.00,32.00L 192.00,480.00 c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-64.00 L 32.00,384.00 c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-32.00 l 32.00,0.00 l0.00-320.00 
                                                  +		c0.00-17.688, 14.312-32.00, 32.00-32.00l 384.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 480.00,320.00 l 32.00,0.00 l0.00,32.00 C 512.00,369.688, 497.688,384.00, 480.00,384.00z M 224.00,416.00l 64.00,0.00 l0.00-32.00 l-64.00,0.00 L 224.00,416.00 z
                                                  +		 M 416.00,32.00L 96.00,32.00 L 96.00,320.00 l 320.00,0.00 L 416.00,32.00 zM 160.00,256.00L 224.00,256.00L 224.00,96.00L 160.00,96.00z"  />
                                                  +<glyph unicode="&#xe029;" d="M 480.00,384.00L 352.00,384.00 L 352.00,448.00 c0.00,17.688-14.312,32.00-32.00,32.00L 192.00,480.00 c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-64.00 L 32.00,384.00 
                                                  +	c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-32.00 l 64.00,0.00 l0.00-320.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 320.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 448.00,320.00 l 64.00,0.00 l0.00,32.00 
                                                  +	C 512.00,369.688, 497.688,384.00, 480.00,384.00z M 224.00,416.00l 64.00,0.00 l0.00-32.00 l-64.00,0.00 L 224.00,416.00 z M 384.00,32.00L 128.00,32.00 L 128.00,320.00 l 256.00,0.00 L 384.00,32.00 z"  />
                                                  +<glyph unicode="&#xe02a;" d="M 192.00,192.00L 32.00,192.00 c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-160.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 160.00,0.00 
                                                  +			c 17.688,0.00, 32.00,14.312, 32.00,32.00L 224.00,160.00 C 224.00,177.688, 209.688,192.00, 192.00,192.00z M 160.00,32.00L 64.00,32.00 l0.00,96.00 l 96.00,0.00 L 160.00,32.00 z M 192.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-160.00 
                                                  +			c0.00-17.688, 14.312-32.00, 32.00-32.00l 160.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 224.00,448.00 C 224.00,465.688, 209.688,480.00, 192.00,480.00z M 160.00,320.00L 64.00,320.00 L 64.00,416.00 l 96.00,0.00 L 160.00,320.00 z M 480.00,192.00L 320.00,192.00 
                                                  +			c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-160.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 160.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,160.00 C 512.00,177.688, 497.688,192.00, 480.00,192.00z
                                                  +			 M 448.00,32.00l-96.00,0.00 l0.00,96.00 l 96.00,0.00 L 448.00,32.00 z M 480.00,480.00L 320.00,480.00 c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-160.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 160.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 
                                                  +			C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,320.00l-96.00,0.00 L 352.00,416.00 l 96.00,0.00 L 448.00,320.00 z"  />
                                                  +<glyph unicode="&#xe02b;" d="M 480.00-32.00L 32.00-32.00 c-17.688,0.00-32.00,14.312-32.00,32.00L0.00,448.00 C0.00,465.688, 14.312,480.00, 32.00,480.00l 448.00,0.00 
                                                  +	c 17.688,0.00, 32.00-14.312, 32.00-32.00l0.00-448.00 C 512.00-17.688, 497.688-32.00, 480.00-32.00z M 448.00,416.00L 64.00,416.00 l0.00-384.00 l 384.00,0.00 L 448.00,416.00 z M 224.00,256.00l-96.00,0.00 l0.00,96.00 l 96.00,0.00 L 224.00,256.00 z M 224.00,96.00l-96.00,0.00 l0.00,96.00 
                                                  +	l 96.00,0.00 L 224.00,96.00 z M 384.00,256.00l-96.00,0.00 l0.00,96.00 l 96.00,0.00 L 384.00,256.00 z M 384.00,96.00l-96.00,0.00 l0.00,96.00 l 96.00,0.00 L 384.00,96.00 z"  />
                                                  +<glyph unicode="&#xe02c;" d="M 128.00,160.00L 384.00,160.00L 384.00,96.00L 128.00,96.00zM 128.00,256.00L 384.00,256.00L 384.00,192.00L 128.00,192.00zM 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 
                                                  +		C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,32.00L 64.00,32.00 L 64.00,416.00 l 384.00,0.00 L 448.00,32.00 zM 128.00,352.00L 384.00,352.00L 384.00,288.00L 128.00,288.00z"  />
                                                  +<glyph unicode="&#xe02d;" d="M 128.00,352.00L 192.00,352.00L 192.00,288.00L 128.00,288.00zM 128.00,256.00L 192.00,256.00L 192.00,192.00L 128.00,192.00zM 128.00,160.00L 192.00,160.00L 192.00,96.00L 128.00,96.00zM 256.00,160.00L 384.00,160.00L 384.00,96.00L 256.00,96.00zM 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 
                                                  +		C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,32.00L 64.00,32.00 L 64.00,416.00 l 384.00,0.00 L 448.00,32.00 zM 256.00,256.00L 384.00,256.00L 384.00,192.00L 256.00,192.00zM 256.00,352.00L 384.00,352.00L 384.00,288.00L 256.00,288.00z"  />
                                                  +<glyph unicode="&#xe02e;" d="M 480.00,480.00L 224.00,480.00 c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-256.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 256.00,0.00 
                                                  +			c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,224.00L 256.00,224.00 L 256.00,416.00 l 192.00,0.00 L 448.00,224.00 z M 256.00,32.00L 64.00,32.00 L 64.00,224.00 l 64.00,0.00 l0.00,64.00 L 32.00,288.00 
                                                  +			c-17.688,0.00-32.00-14.312-32.00-32.00l0.00-256.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 256.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00l0.00,96.00 l-64.00,0.00 L 256.00,32.00 z"  />
                                                  +<glyph unicode="&#xe02f;" d="M 448.00,480.00L 64.00,480.00 C 46.312,480.00, 32.00,465.688, 32.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 384.00,0.00 
                                                  +			c 17.688,0.00, 32.00,14.312, 32.00,32.00L 480.00,448.00 C 480.00,465.688, 465.688,480.00, 448.00,480.00z M 160.00,32.00L 96.00,32.00 l0.00,64.00 l 64.00,0.00 L 160.00,32.00 z M 160.00,128.00L 96.00,128.00 l0.00,64.00 l 64.00,0.00 L 160.00,128.00 z M 160.00,224.00L 96.00,224.00 l0.00,64.00 l 64.00,0.00 
                                                  +			L 160.00,224.00 z M 288.00,32.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 L 288.00,32.00 z M 288.00,128.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 L 288.00,128.00 z M 288.00,224.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 L 288.00,224.00 z M 416.00,32.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 L 416.00,32.00 z M 416.00,128.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 
                                                  +			L 416.00,128.00 z M 416.00,224.00l-64.00,0.00 l0.00,64.00 l 64.00,0.00 L 416.00,224.00 z M 416.00,352.00L 96.00,352.00 L 96.00,416.00 l 320.00,0.00 L 416.00,352.00 z"  />
                                                  +<glyph unicode="&#xe030;" d="M 480.00,96.00l-32.00,0.00 L 448.00,416.00 L 128.00,416.00 L 128.00,448.00 c0.00,17.688, 14.312,32.00, 32.00,32.00l 320.00,0.00 c 17.688,0.00, 32.00-14.312, 32.00-32.00
                                                  +	l0.00-320.00 C 512.00,110.312, 497.688,96.00, 480.00,96.00z M 416.00,352.00l0.00-352.00 c0.00-17.688-14.312-32.00-32.00-32.00L 32.00-32.00 c-17.688,0.00-32.00,14.312-32.00,32.00L0.00,352.00 
                                                  +	c0.00,17.688, 14.312,32.00, 32.00,32.00l 352.00,0.00 C 401.688,384.00, 416.00,369.688, 416.00,352.00z M 352.00,320.00L 64.00,320.00 l0.00-96.00 l 288.00,0.00 L 352.00,320.00 z M 352.00,160.00L 64.00,160.00 l0.00-128.00 l 288.00,0.00 L 352.00,160.00 z M 128.00,256.00L 96.00,256.00 l0.00,32.00 
                                                  +	l 32.00,0.00 L 128.00,256.00 z M 192.00,256.00l-32.00,0.00 l0.00,32.00 l 32.00,0.00 L 192.00,256.00 z M 320.00,256.00l-96.00,0.00 l0.00,32.00 l 96.00,0.00 L 320.00,256.00 z"  />
                                                  +<glyph unicode="&#xe031;" d="M 480.00-32.00L 32.00-32.00 c-17.688,0.00-32.00,14.312-32.00,32.00L0.00,448.00 C0.00,465.688, 14.312,480.00, 32.00,480.00l 448.00,0.00 
                                                  +	c 17.688,0.00, 32.00-14.312, 32.00-32.00l0.00-448.00 C 512.00-17.688, 497.688-32.00, 480.00-32.00z M 448.00,416.00L 64.00,416.00 l0.00-96.00 l 384.00,0.00 L 448.00,416.00 z M 448.00,256.00L 64.00,256.00 l0.00-224.00 l 384.00,0.00 L 448.00,256.00 z M 128.00,352.00L 96.00,352.00 L 96.00,384.00 l 32.00,0.00 
                                                  +	L 128.00,352.00 z M 192.00,352.00l-32.00,0.00 L 160.00,384.00 l 32.00,0.00 L 192.00,352.00 z M 416.00,352.00L 224.00,352.00 L 224.00,384.00 l 192.00,0.00 L 416.00,352.00 z"  />
                                                  +<glyph unicode="&#xe032;" d="M 448.035,223.953c0.00,106.051-85.953,192.035-192.035,192.035
                                                  +		c-106.051,0.00-192.035-85.984-192.035-192.035c0.00-66.687, 34.005-125.43, 85.613-159.857l-53.482-53.463L 138.666-32.00l 69.842,69.843
                                                  +		c 15.19-3.865, 31.10-5.925, 47.492-5.925c 16.394,0.00, 32.305,2.059, 47.493,5.923L 373.334-32.00l 42.57,42.633l-53.477,53.457
                                                  +		C 414.039,98.517, 448.035,157.264, 448.035,223.953z M 256.00,95.93c-70.70,0.00-128.023,57.322-128.023,128.023
                                                  +		c0.00,70.70, 57.323,128.023, 128.023,128.023s 128.023-57.323, 128.023-128.023C 384.023,153.252, 326.70,95.93, 256.00,95.93zM 448.035,480.00c-35.351,0.00-64.012-28.662-64.012-64.012
                                                  +		c0.00-2.909, 0.213-5.768, 0.589-8.574c 21.307-14.963, 39.885-33.542, 54.849-54.849c 2.807-0.376, 5.665-0.588, 8.574-0.588
                                                  +		c 35.351,0.00, 64.012,28.661, 64.012,64.012C 512.047,451.338, 483.386,480.00, 448.035,480.00zM 72.539,352.565c 14.963,21.307, 33.542,39.886, 54.849,54.849
                                                  +		c 0.376,2.807, 0.588,5.665, 0.588,8.574C 127.977,451.338, 99.315,480.00, 63.965,480.00S-0.047,451.338-0.047,415.988
                                                  +		c0.00-35.351, 28.661-64.012, 64.012-64.012C 66.874,351.977, 69.732,352.189, 72.539,352.565zM 288.006,255.959L 288.006,319.971L 223.994,319.971L 223.994,191.947L 320.012,191.947L 320.012,255.959 	z"  />
                                                  +<glyph unicode="&#xe033;" d="M 288.00,256.00L 288.00,352.00L 224.00,352.00L 224.00,192.00L 352.00,192.00L 352.00,256.00 zM 256.00,480.00C 114.625,480.00,0.00,365.375,0.00,224.00s 114.625-256.00, 256.00-256.00s 256.00,114.625, 256.00,256.00
                                                  +	S 397.375,480.00, 256.00,480.00z M 256.00,32.00c-106.031,0.00-192.00,85.969-192.00,192.00S 149.969,416.00, 256.00,416.00s 192.00-85.969, 192.00-192.00S 362.031,32.00, 256.00,32.00z"  />
                                                  +<glyph unicode="&#xe034;" d="M 288.00-28.781L 288.00-32.00 l-64.00,0.00 l0.00,3.219 C 115.562-13.125, 32.00,79.25, 32.00,192.00L 32.00,320.00 
                                                  +	C 32.00,408.375, 103.625,480.00, 192.00,480.00c 77.406,0.00, 145.156-54.969, 160.00-128.00l0.00,0.00l0.00-160.00 c0.00-53.031-43.00-96.00-96.00-96.00s-96.00,42.969-96.00,96.00L 160.00,320.00 
                                                  +	c0.00,17.688, 14.312,32.00, 32.00,32.00s 32.00-14.312, 32.00-32.00l0.00-128.00 c0.00-17.688, 14.312-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00L 288.00,352.00 c0.00,0.00-20.656,64.00-96.00,64.00
                                                  +	c-53.00,0.00-96.00-42.969-96.00-96.00l0.00-128.00 c0.00-88.375, 71.625-160.00, 160.00-160.00l0.00,0.00c 88.375,0.00, 160.00,71.625, 160.00,160.00L 416.00,448.00 c0.00,17.688, 14.312,32.00, 32.00,32.00
                                                  +	s 32.00-14.312, 32.00-32.00l0.00-256.00 C 480.00,79.25, 396.438-13.125, 288.00-28.781z"  />
                                                  +<glyph unicode="&#xe035;" d="M 512.00,256.00l0.00-64.00 l-66.906,0.00 c-4.781-28.344-16.047-54.375-31.828-77.031l 67.109-58.344
                                                  +	l-46.188-57.062l-73.984,64.344c-21.547-14.00-45.812-24.219-72.203-28.688L 288.00-32.00 l-64.00,0.00 l0.00,66.906 c-26.469,4.469-50.766,14.781-72.328,28.906
                                                  +	l-73.859-64.25l-46.188,57.062l 67.219,58.469C 83.188,137.719, 72.00,163.688, 67.219,192.00L0.00,192.00 l0.00,64.00 l 66.906,0.00 
                                                  +	c 4.781,28.344, 16.047,54.375, 31.828,77.031L 31.625,391.375l 46.188,57.062l 73.984-64.344c 21.547,14.00, 45.812,24.219, 72.203,28.688L 224.00,480.00 l 64.00,0.00 
                                                  +	l0.00-67.219 c 26.391-4.469, 50.656-14.688, 72.203-28.688l 73.984,64.344l 46.188-57.062l-67.109-58.344
                                                  +	c 15.781-22.656, 27.047-48.688, 31.828-77.031L 512.00,256.00 z M 256.00,320.00c-53.016,0.00-96.00-42.969-96.00-96.00s 42.984-96.00, 96.00-96.00s 96.00,42.969, 96.00,96.00
                                                  +	S 309.016,320.00, 256.00,320.00z"  />
                                                  +<glyph unicode="&#xe036;" d="M 480.00,384.00L 352.00,384.00 L 352.00,448.00 c0.00,17.688-14.328,32.00-32.00,32.00L 192.00,480.00 c-17.672,0.00-32.00-14.312-32.00-32.00l0.00-64.00 L 32.00,384.00 
                                                  +	c-17.672,0.00-32.00-14.312-32.00-32.00l0.00-352.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 448.00,0.00 c 17.672,0.00, 32.00,14.312, 32.00,32.00L 512.00,352.00 C 512.00,369.688, 497.672,384.00, 480.00,384.00z M 224.00,416.00
                                                  +	l 64.00,0.00 l0.00-32.00 l-64.00,0.00 L 224.00,416.00 z M 448.00,32.00L 64.00,32.00 L 64.00,160.00 l 128.00,0.00 l0.00-32.00 l 128.00,0.00 l0.00,32.00 l 128.00,0.00 L 448.00,32.00 z M 448.00,192.00L 320.00,192.00 l0.00,32.00 L 192.00,224.00 l0.00-32.00 L 64.00,192.00 L 64.00,320.00 l 128.00,0.00 l 128.00,0.00 l 128.00,0.00 L 448.00,192.00 z"  />
                                                  +<glyph unicode="&#xe037;" d="M 381.844,234.594C 383.031,241.562, 384.00,248.656, 384.00,256.00l0.00,96.00 
                                                  +	C 384.00,422.688, 326.688,480.00, 256.00,480.00S 128.00,422.688, 128.00,352.00l0.00-96.00 c0.00-7.344, 0.969-14.438, 2.156-21.406C 52.719,207.094,0.00,155.625,0.00,96.00l0.00-96.00 
                                                  +	c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00l0.00,96.00 C 512.00,155.625, 459.281,207.094, 381.844,234.594z M 192.00,352.00
                                                  +	c0.00,35.344, 28.656,64.00, 64.00,64.00s 64.00-28.656, 64.00-64.00l0.00-96.00 c0.00-35.344-28.656-64.00-64.00-64.00s-64.00,28.656-64.00,64.00L 192.00,352.00 z M 448.00,32.00L 64.00,32.00 l0.00,64.00 
                                                  +	c0.00,34.562, 36.812,64.594, 91.594,81.50C 179.031,147.562, 215.062,128.00, 256.00,128.00s 76.969,19.562, 100.406,49.50
                                                  +	C 411.188,160.594, 448.00,130.562, 448.00,96.00L 448.00,32.00 z"  />
                                                  +<glyph unicode="&#xe038;" d="M 288.00,174.25L 288.00,256.00 c0.00,53.031-42.969,96.00-96.00,96.00s-96.00-42.969-96.00-96.00l0.00-81.75 C 38.844,152.062,0.00,111.25,0.00,64.00c0.00-5.656,0.00-64.00,0.00-64.00
                                                  +		c0.00-17.688, 14.312-32.00, 32.00-32.00l 320.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00c0.00,0.00,0.00,58.344,0.00,64.00C 384.00,111.25, 345.156,152.062, 288.00,174.25z M 160.00,256.00
                                                  +		c0.00,17.688, 14.312,32.00, 32.00,32.00s 32.00-14.312, 32.00-32.00l0.00-96.00 c0.00-17.688-14.312-32.00-32.00-32.00s-32.00,14.312-32.00,32.00L 160.00,256.00 z M 320.00,32.00L 64.00,32.00 l0.00,32.00 
                                                  +		c0.00,19.438, 17.719,36.656, 45.094,48.406C 125.688,83.594, 156.406,64.00, 192.00,64.00s 66.312,19.594, 82.906,48.406
                                                  +		C 302.281,100.656, 320.00,83.438, 320.00,64.00L 320.00,32.00 zM 416.00,302.25L 416.00,384.00 c0.00,53.031-42.969,96.00-96.00,96.00s-96.00-42.969-96.00-96.00l0.00-4.531 c 25.281-6.531, 47.312-20.531, 64.00-39.625L 288.00,384.00 
                                                  +		c0.00,17.688, 14.312,32.00, 32.00,32.00s 32.00-14.312, 32.00-32.00l0.00-96.00 c0.00-17.688-14.312-32.00-32.00-32.00l0.00-64.00 c 35.594,0.00, 66.312,19.594, 82.906,48.406
                                                  +		C 430.281,228.656, 448.00,211.438, 448.00,192.00l0.00-32.00 L 331.219,160.00 c 32.219-16.594, 56.969-38.50, 71.062-64.00L 480.00,96.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00
                                                  +		c0.00,0.00,0.00,58.344,0.00,64.00C 512.00,239.25, 473.156,280.062, 416.00,302.25z"  />
                                                  +<glyph unicode="&#xe039;" d="M 512.00,288.00c0.00-141.969-256.00-320.00-256.00-320.00S0.00,146.031,0.00,288.00
                                                  +	c-0.281,14.156, 1.188,30.031,0.00,48.00C-5.281,415.344, 64.469,480.00, 144.00,480.00c 45.531,0.00, 85.625-31.031, 112.00-64.00c 26.375,32.969, 66.469,64.00, 112.00,64.00
                                                  +	c 79.531,0.00, 149.281-64.656, 144.00-144.00C 510.812,318.031, 512.281,302.156, 512.00,288.00z M 448.00,336.00c 3.969,44.00-35.812,80.00-80.00,80.00
                                                  +	c-82.906,0.00-80.00-64.00-80.00-64.00c0.00-17.688-14.312-32.00-32.00-32.00s-32.00,14.312-32.00,32.00c0.00,0.00, 2.906,64.00-80.00,64.00c-44.188,0.00-83.969-36.00-80.00-80.00
                                                  +	c 1.625-18.062-1.031-34.625, 0.438-48.00c-0.031,0.00-0.375,0.00-0.438,0.00c 2.00,0.469-11.00-94.281, 191.625-239.219
                                                  +	c 0.156,0.094, 0.25,0.188, 0.375,0.281c 0.125-0.094, 0.219-0.188, 0.375-0.281C 459.00,193.719, 446.00,288.469, 448.00,288.00
                                                  +	c-0.062,0.00-0.406,0.00-0.438,0.00C 449.031,301.375, 446.375,317.938, 448.00,336.00z"  />
                                                  +<glyph unicode="&#xe03a;" d="M 304.00,480.00l-96.00,0.00 C 93.125,480.00,0.00,386.875,0.00,272.00c0.00-74.438, 39.406-139.25, 98.188-176.00L 96.00,96.00 l0.00-128.00 
                                                  +	l 144.00,96.00l 64.00,0.00 c 114.875,0.00, 208.00,93.125, 208.00,208.00S 418.875,480.00, 304.00,480.00z M 304.00,128.00l-64.00,0.00 l-80.00-48.00l0.00,56.812 C 104.188,156.656, 64.00,209.406, 64.00,272.00
                                                  +	c0.00,79.531, 64.469,144.00, 144.00,144.00l 96.00,0.00 c 79.531,0.00, 144.00-64.469, 144.00-144.00S 383.531,128.00, 304.00,128.00z"  />
                                                  +<glyph unicode="&#xe03b;" d="M 128.00,256.00L 384.00,256.00L 384.00,192.00L 128.00,192.00zM 128.00,352.00L 384.00,352.00L 384.00,288.00L 128.00,288.00zM 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-352.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 64.00,0.00 l0.00-96.00 l 144.00,96.00l 240.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 
                                                  +		C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,128.00L 240.00,128.00 l-80.00-48.00l0.00,48.00 L 64.00,128.00 L 64.00,416.00 l 384.00,0.00 L 448.00,128.00 z"  />
                                                  +<glyph unicode="&#xe03c;" d="M 480.00,480.00L 32.00,480.00 C 14.328,480.00,0.00,465.688,0.00,448.00l0.00-352.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 192.00,0.00 l0.00-32.00 l-96.00,0.00 
                                                  +	c-17.672,0.00-32.00-14.312-32.00-32.00l0.00-32.00 l 320.00,0.00 l0.00,32.00 c0.00,17.688-14.328,32.00-32.00,32.00l-96.00,0.00 l0.00,32.00 l 192.00,0.00 c 17.672,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 
                                                  +	C 512.00,465.688, 497.672,480.00, 480.00,480.00z M 448.00,128.00L 64.00,128.00 L 64.00,416.00 l 384.00,0.00 L 448.00,128.00 z"  />
                                                  +<glyph unicode="&#xe03d;" d="M 416.00,480.00L 96.00,480.00 C 78.328,480.00, 64.00,465.688, 64.00,448.00l0.00-448.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 320.00,0.00 
                                                  +	c 17.672,0.00, 32.00,14.312, 32.00,32.00L 448.00,448.00 C 448.00,465.688, 433.672,480.00, 416.00,480.00z M 384.00,96.00L 128.00,96.00 L 128.00,416.00 l 256.00,0.00 L 384.00,96.00 z"  />
                                                  +<glyph unicode="&#xe03e;" d="M 480.00,480.00L 32.00,480.00 C 14.328,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 448.00,0.00 
                                                  +			c 17.672,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 C 512.00,465.688, 497.672,480.00, 480.00,480.00z M 448.00,96.00L 64.00,96.00 L 64.00,416.00 l 384.00,0.00 L 448.00,96.00 z"  />
                                                  +<glyph unicode="&#xe03f;" d="M 224.00,480.00c-17.672,0.00-32.00-14.312-32.00-32.00l0.00-160.00 l-32.00,0.00 L 160.00,448.00 c0.00,17.688-14.328,32.00-32.00,32.00S 96.00,465.688, 96.00,448.00l0.00-160.00 L 64.00,288.00 L 64.00,448.00 C 64.00,465.688, 49.672,480.00, 32.00,480.00
                                                  +		S0.00,465.688,0.00,448.00l0.00-192.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 64.00,0.00 l0.00-224.00 c0.00-17.688, 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00L 160.00,224.00 l 64.00,0.00 c 17.672,0.00, 32.00,14.312, 32.00,32.00L 256.00,448.00 
                                                  +		C 256.00,465.688, 241.672,480.00, 224.00,480.00zM 416.00,480.00c-53.016,0.00-96.00-42.969-96.00-96.00c0.00-41.75, 26.797-76.906, 64.00-90.125L 384.00,0.00 c0.00-17.688, 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00L 448.00,293.875 
                                                  +		c 37.203,13.219, 64.00,48.375, 64.00,90.125C 512.00,437.031, 469.016,480.00, 416.00,480.00z"  />
                                                  +<glyph unicode="&#xe040;" d="M 224.00,480.00c-17.672,0.00-32.00-14.312-32.00-32.00l0.00-160.00 l-32.00,0.00 L 160.00,448.00 c0.00,17.688-14.328,32.00-32.00,32.00S 96.00,465.688, 96.00,448.00l0.00-160.00 L 64.00,288.00 L 64.00,448.00 C 64.00,465.688, 49.672,480.00, 32.00,480.00
                                                  +		S0.00,465.688,0.00,448.00l0.00-192.00 c0.00-17.688, 14.328-32.00, 32.00-32.00l 64.00,0.00 l0.00-224.00 c0.00-17.688, 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00L 160.00,224.00 l 64.00,0.00 c 17.672,0.00, 32.00,14.312, 32.00,32.00L 256.00,448.00 
                                                  +		C 256.00,465.688, 241.672,480.00, 224.00,480.00zM 448.00,480.00c0.00,0.00-64.00-20.656-64.00-96.00l0.00-64.00 c0.00-41.75, 26.797-76.906, 64.00-90.125L 448.00,0.00 
                                                  +	c0.00-17.688, 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00L 512.00,474.125 L 512.00,480.00 L 448.00,480.00 z"  />
                                                  +<glyph unicode="&#xe041;" d="M 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 
                                                  +	c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 192.00,224.00c0.00,0.00, 5.062,64.00, 64.00,64.00s 64.00-64.00, 64.00-64.00s 1.844-64.00-64.00-64.00S 192.00,224.00, 192.00,224.00
                                                  +	z M 448.00,32.00L 64.00,32.00 L 64.00,256.00 l 64.00,0.00 l 4.531,0.00 c-2.656-10.281-4.531-20.875-4.531-32.00c0.00-70.688, 57.312-128.00, 128.00-128.00s 128.00,57.312, 128.00,128.00
                                                  +	c0.00,11.125-1.875,21.719-4.531,32.00L 384.00,256.00 l 64.00,0.00 L 448.00,32.00 z M 448.00,320.00l-96.00,0.00 L 352.00,416.00 l 96.00,0.00 L 448.00,320.00 z"  />
                                                  +<glyph unicode="&#xe042;" d="M 480.00-32.00L 32.00-32.00 c-17.688,0.00-32.00,14.312-32.00,32.00L0.00,448.00 C0.00,465.688, 14.312,480.00, 32.00,480.00l 448.00,0.00 
                                                  +	c 17.688,0.00, 32.00-14.312, 32.00-32.00l0.00-448.00 C 512.00-17.688, 497.688-32.00, 480.00-32.00z M 448.00,416.00L 64.00,416.00 l0.00-384.00 l 384.00,0.00 L 448.00,416.00 z M 256.00,288.00c0.00,35.281, 29.188,64.00, 59.438,64.00L 352.00,352.00 
                                                  +	l0.00-64.00 l-32.00,0.00 l0.00-32.00 l 32.00,0.00 l0.00-64.00 l-32.00,0.00 l0.00-96.00 l-64.00,0.00 l0.00,96.00 l-32.00,0.00 l0.00,64.00 l 32.00,0.00 L 256.00,288.00 z"  />
                                                  +<glyph unicode="&#xe043;" d="M 480.00,480.00L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-448.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 448.00,0.00 
                                                  +			c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,448.00 C 512.00,465.688, 497.688,480.00, 480.00,480.00z M 448.00,32.00L 256.00,32.00 L 256.00,224.00 L 64.00,224.00 L 64.00,416.00 l 192.00,0.00 l0.00-192.00 l 192.00,0.00 L 448.00,32.00 z"  />
                                                  +<glyph unicode="&#xe044;" d="M 64.00,192.00L0.00,192.00 l0.00-192.00 c0.00-17.688, 14.312-32.00, 32.00-32.00l 192.00,0.00 l0.00,64.00 L 64.00,32.00 L 64.00,192.00 zM 64.00,416.00l 160.00,0.00 L 224.00,480.00 L 32.00,480.00 C 14.312,480.00,0.00,465.688,0.00,448.00l0.00-192.00 l 64.00,0.00 L 64.00,416.00 zM 448.00,32.00L 288.00,32.00 l0.00-64.00 l 192.00,0.00 c 17.688,0.00, 32.00,14.312, 32.00,32.00L 512.00,192.00 l-64.00,0.00 L 448.00,32.00 zM 480.00,480.00L 288.00,480.00 l0.00-64.00 l 160.00,0.00 l0.00-160.00 l 64.00,0.00 L 512.00,448.00 C 512.00,465.688, 497.688,480.00, 480.00,480.00zM 288.00,256.00L 288.00,352.00L 224.00,352.00L 224.00,256.00L 128.00,256.00L 128.00,192.00L 224.00,192.00L 224.00,96.00L 288.00,96.00L 288.00,192.00L 384.00,192.00L 384.00,256.00 	z"  />
                                                  +<glyph unicode="&#xe045;" d="M 256.00,480.00C 114.615,480.00,0.00,365.385,0.00,224.00s 114.615-256.00, 256.00-256.00s 256.00,114.615, 256.00,256.00
                                                  +	S 397.385,480.00, 256.00,480.00z M 256.00,428.812c 47.562,0.00, 90.812-16.906, 125.562-44.125c-16.156-13.938-50.875-40.375-103.938-65.438
                                                  +	c-19.562,34.531-42.594,69.531-70.125,103.156C 223.125,426.219, 239.219,428.812, 256.00,428.812z M 168.938,408.719
                                                  +	c 15.50-21.062, 41.00-58.375, 67.906-106.00c-57.469-18.844-123.875-19.469-175.25-15.344C 79.25,341.00, 118.375,384.812, 168.938,408.719z
                                                  +	 M 253.25,272.719c 7.188-13.75, 14.281-28.562, 21.281-43.594c-107.312-23.531-157.562-93.969-177.656-132.594
                                                  +	c-28.156,35.062-45.688,79.00-45.688,127.469c0.00,9.062, 0.812,17.906, 1.969,26.625C 93.531,245.031, 165.00,242.844, 253.25,272.719z
                                                  +	 M 292.281,187.812c 19.156-46.812, 35.969-97.531, 45.781-151.25c-25.156-11.031-52.844-17.375-82.062-17.375
                                                  +	c-48.594,0.00-92.625,17.656-127.75,45.906C 179.094,135.781, 238.031,171.438, 292.281,187.812z M 374.719,57.656
                                                  +	c-2.594,14.656-13.781,69.438-40.281,139.562c 62.031,9.188, 111.25-2.938, 123.312-6.438
                                                  +	C 448.719,136.031, 418.062,88.656, 374.719,57.656z M 318.969,235.469c-7.438,17.281-15.438,34.938-24.781,53.125
                                                  +	c 37.062,16.031, 76.438,37.938, 117.219,67.375c 30.375-35.719, 49.406-81.406, 49.406-131.969
                                                  +	C 406.188,236.125, 359.438,238.781, 318.969,235.469z"  />
                                                  +<glyph unicode="&#xe046;" d="M 256.00,480.00C 149.969,480.00, 64.00,394.031, 64.00,288.00s 192.00-320.00, 192.00-320.00s 192.00,213.969, 192.00,320.00
                                                  +			S 362.031,480.00, 256.00,480.00z M 256.00,160.00c-70.688,0.00-128.00,57.312-128.00,128.00S 185.312,416.00, 256.00,416.00s 128.00-57.312, 128.00-128.00S 326.688,160.00, 256.00,160.00z"  />
                                                  +<glyph unicode="&#xe047;" d="M 256.00,480.00C 149.969,480.00, 64.00,394.031, 64.00,288.00s 192.00-320.00, 192.00-320.00s 192.00,213.969, 192.00,320.00
                                                  +			S 362.031,480.00, 256.00,480.00z M 256.00,160.00c-70.688,0.00-128.00,57.312-128.00,128.00S 185.312,416.00, 256.00,416.00s 128.00-57.312, 128.00-128.00S 326.688,160.00, 256.00,160.00z M 256.00,352.00
                                                  +			c-35.344,0.00-64.00-28.656-64.00-64.00s 28.656-64.00, 64.00-64.00s 64.00,28.656, 64.00,64.00S 291.344,352.00, 256.00,352.00z"  />
                                                  +<glyph unicode="&#xe048;" d="M 480.00,384.00L 352.00,384.00 L 352.00,448.00 c0.00,17.656-14.328,32.00-32.00,32.00L 192.00,480.00 c-17.672,0.00-32.00-14.344-32.00-32.00l0.00-64.00 L 96.00,384.00 L 96.00,416.00 L 32.00,416.00 l0.00-32.00 c-17.672,0.00-32.00-14.344-32.00-32.00l0.00-352.00 
                                                  +		c0.00-17.688, 14.328-32.00, 32.00-32.00l 448.00,0.00 c 17.672,0.00, 32.00,14.312, 32.00,32.00L 512.00,352.00 C 512.00,369.656, 497.672,384.00, 480.00,384.00z M 224.00,416.00l 64.00,0.00 l0.00-32.00 l-64.00,0.00 L 224.00,416.00 z M 448.00,32.00L 64.00,32.00 
                                                  +		L 64.00,320.00 l 384.00,0.00 L 448.00,32.00 zM 256.00,96.00c 53.016,0.00, 96.00,42.969, 96.00,96.00s-42.984,96.00-96.00,96.00s-96.00-42.969-96.00-96.00S 202.984,96.00, 256.00,96.00z M 256.00,224.00
                                                  +		c 17.672,0.00, 32.00-14.312, 32.00-32.00s-14.328-32.00-32.00-32.00s-32.00,14.312-32.00,32.00S 238.328,224.00, 256.00,224.00z"  />
                                                  +<glyph unicode="&#xe049;" d="M 32.00,256.00c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00
                                                  +			S 49.672,256.00, 32.00,256.00z M 96.00,352.00c 17.672,0.00, 32.00,14.312, 32.00,32.00s-14.328,32.00-32.00,32.00S 64.00,401.688, 64.00,384.00S 78.328,352.00, 96.00,352.00z M 256.00,416.00
                                                  +			c 17.672,0.00, 32.00,14.312, 32.00,32.00c0.00,17.656-14.328,32.00-32.00,32.00s-32.00-14.344-32.00-32.00C 224.00,430.312, 238.328,416.00, 256.00,416.00z M 96.00,96.00
                                                  +			c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00S 113.672,96.00, 96.00,96.00z M 416.00,96.00c-17.672,0.00-32.00-14.312-32.00-32.00
                                                  +			s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00S 433.672,96.00, 416.00,96.00z M 256.00,352.00c-70.688,0.00-128.00-57.312-128.00-128.00s 57.312-128.00, 128.00-128.00
                                                  +			s 128.00,57.312, 128.00,128.00S 326.688,352.00, 256.00,352.00z M 256.00,160.00c-35.344,0.00-64.00,28.656-64.00,64.00s 28.656,64.00, 64.00,64.00s 64.00-28.656, 64.00-64.00
                                                  +			S 291.344,160.00, 256.00,160.00z M 480.00,256.00c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00S 497.672,256.00, 480.00,256.00z M 256.00,32.00
                                                  +			c-17.672,0.00-32.00-14.344-32.00-32.00c0.00-17.688, 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00C 288.00,17.656, 273.672,32.00, 256.00,32.00z M 416.00,352.00
                                                  +			c 17.672,0.00, 32.00,14.312, 32.00,32.00s-14.328,32.00-32.00,32.00s-32.00-14.312-32.00-32.00S 398.328,352.00, 416.00,352.00z"  />
                                                  +<glyph unicode="&#xe04a;" d="M 256.00,352.00c-70.688,0.00-128.00-57.312-128.00-128.00s 57.312-128.00, 128.00-128.00s 128.00,57.312, 128.00,128.00
                                                  +		S 326.688,352.00, 256.00,352.00z M 256.00,160.00c-35.344,0.00-64.00,28.656-64.00,64.00s 28.656,64.00, 64.00,64.00L 256.00,160.00 zM 256.00,416.00c 17.672,0.00, 32.00,14.312, 32.00,32.00c0.00,17.656-14.328,32.00-32.00,32.00s-32.00-14.344-32.00-32.00
                                                  +		C 224.00,430.312, 238.328,416.00, 256.00,416.00zM 96.00,352.00c 17.672,0.00, 32.00,14.312, 32.00,32.00s-14.328,32.00-32.00,32.00S 64.00,401.688, 64.00,384.00
                                                  +		S 78.328,352.00, 96.00,352.00zM 32.00,256.00c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00
                                                  +		S 49.672,256.00, 32.00,256.00zM 96.00,96.00c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00
                                                  +		S 113.672,96.00, 96.00,96.00zM 256.00,32.00c-17.672,0.00-32.00-14.344-32.00-32.00c0.00-17.688, 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00
                                                  +		C 288.00,17.656, 273.672,32.00, 256.00,32.00zM 416.00,96.00c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00
                                                  +		S 433.672,96.00, 416.00,96.00zM 480.00,256.00c-17.672,0.00-32.00-14.312-32.00-32.00s 14.328-32.00, 32.00-32.00s 32.00,14.312, 32.00,32.00
                                                  +		S 497.672,256.00, 480.00,256.00zM 416.00,352.00c 17.672,0.00, 32.00,14.312, 32.00,32.00s-14.328,32.00-32.00,32.00s-32.00-14.312-32.00-32.00
                                                  +		S 398.328,352.00, 416.00,352.00z"  />
                                                  +<glyph unicode="&#xe04b;" d="M 255.843,367.964c 0.062-79.524, 64.464-143.988, 143.987-143.988
                                                  +	c 42.684,0.00, 80.649,18.936, 108.615,62.745c 4.719-0.844, 3.688-43.309, 3.375-62.745c-2.281-141.363-114.615-255.978-255.978-255.978
                                                  +	c-141.363,0.00-255.979,114.615-255.979,255.978S 114.479,478.079, 255.843,479.954c 16.874,0.219, 34.653-0.312, 63.433-1.719
                                                  +	C 301.37,459.956, 255.812,415.616, 255.843,367.964z M 191.848,319.968c0.00,34.591, 11.218,66.401, 29.873,92.555
                                                  +	c-89.68-16.155-157.861-94.21-157.861-188.546c0.00-106.021, 85.961-191.984, 191.983-191.984c 94.335,0.00, 172.392,68.182, 188.546,157.861
                                                  +	c-26.154-18.654-57.963-29.871-92.555-29.871C 263.467,159.982, 191.848,231.601, 191.848,319.968z"  />
                                                  +<glyph unicode="&#xe04c;" d="M 400.00,352.00c-5.594,0.00-10.844-1.125-16.312-1.656C 346.875,408.844, 282.219,448.00, 208.00,448.00
                                                  +	C 93.125,448.00,0.00,354.875,0.00,240.00l0.00-32.00 c0.00-109.406, 84.75-199.719, 192.00-208.00l 224.00,0.00 c 89.594,8.188, 160.00,84.281, 160.00,176.00
                                                  +	C 576.00,273.188, 497.188,352.00, 400.00,352.00z M 416.00,64.00L 192.00,64.00 c-17.906,2.00-34.656,8.75-49.969,16.688c-0.312,0.156-0.594,0.344-0.906,0.50
                                                  +	c-7.156,3.781-13.938,8.031-20.312,12.938c-0.938,0.688-1.781,1.469-2.688,2.188c-5.625,4.531-11.00,9.312-15.906,14.656
                                                  +	c-1.562,1.656-2.875,3.531-4.344,5.281C 93.906,121.00, 90.00,125.812, 86.656,131.062c-1.969,3.062-3.469,6.375-5.188,9.562
                                                  +	c-2.406,4.50-4.938,8.844-6.844,13.594c-2.00,4.844-3.25,10.00-4.688,15.094c-1.031,3.594-2.375,7.00-3.125,10.719
                                                  +	C 65.031,189.062, 64.00,198.406, 64.00,208.00l0.00,32.00 c0.00,79.531, 64.469,144.00, 144.00,144.00c 10.75,0.00, 21.156-1.375, 31.25-3.625
                                                  +	c 2.062-0.469, 4.00-1.312, 6.031-1.875c 8.188-2.188, 16.125-4.938, 23.656-8.469c 1.281-0.625, 2.469-1.375, 3.75-2.031
                                                  +	c 8.281-4.188, 16.031-9.125, 23.312-14.781c 0.344-0.281, 0.688-0.562, 1.062-0.844c 24.531-19.50, 42.562-46.531, 50.312-77.938
                                                  +	C 363.062,282.938, 380.875,288.00, 400.00,288.00c 61.844,0.00, 112.00-50.156, 112.00-112.00C 512.00,119.625, 470.219,71.812, 416.00,64.00z" horiz-adv-x="576"  />
                                                  +<glyph unicode="&#xe04d;" d="M 256.00-32.00C 114.625-32.00,0.00,82.625,0.00,224.00S 114.625,480.00, 256.00,480.00s 256.00-114.625, 256.00-256.00
                                                  +	S 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00z M 256.00,96.00
                                                  +	c-70.688,0.00-128.00,57.312-128.00,128.00s 57.312,128.00, 128.00,128.00s 128.00-57.312, 128.00-128.00S 326.688,96.00, 256.00,96.00z"  />
                                                  +<glyph unicode="&#xe04e;" d="M 256.00-32.00C 114.625-32.00,0.00,82.625,0.00,224.00S 114.625,480.00, 256.00,480.00s 256.00-114.625, 256.00-256.00
                                                  +	S 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00z M 128.00,224.00
                                                  +	c0.00,70.688, 57.312,128.00, 128.00,128.00l0.00-256.00 C 185.312,96.00, 128.00,153.312, 128.00,224.00z"  />
                                                  +<glyph unicode="&#xe04f;" d="M 256.00-32.00C 114.625-32.00,0.00,82.625,0.00,224.00S 114.625,480.00, 256.00,480.00s 256.00-114.625, 256.00-256.00
                                                  +	S 397.375-32.00, 256.00-32.00z M 256.00,416.00C 149.969,416.00, 64.00,330.031, 64.00,224.00s 85.969-192.00, 192.00-192.00s 192.00,85.969, 192.00,192.00S 362.031,416.00, 256.00,416.00z
                                                  +	 M 350.094,108.594l-5.625-3.281l-16.25-9.906l-9.594-6.969c-7.125-3.406-14.562-6.094-22.25-8.375L 296.375,89.50 l-2.719,21.719
                                                  +	c0.00,0.00-1.344,12.531-3.375,15.812c-2.031,3.312-6.781,7.938-11.531,9.906s-8.125,1.969-10.844,5.25c-2.719,3.312-4.75,9.25-8.125,14.50
                                                  +	c-3.406,5.281-7.469,10.562-7.469,13.188s0.00,29.656,0.00,29.656l 3.406,25.031l 7.438,5.281l 8.812,9.875l 6.094,1.969l 21.00-3.938l 14.906,0.00 
                                                  +	l 6.125-12.531l 14.219-11.188l 8.812-13.844l 11.50-3.938L 367.50,196.248 l 8.812-10.562l 5.438-11.188l 2.031-7.906l0.00-13.188 l-1.406-7.781
                                                  +	C 373.781,131.531, 362.875,119.125, 350.094,108.594z M 297.719,335.938l-14.906-7.906l-5.406-15.156l-8.812-7.906l-29.156,0.00 
                                                  +	l-13.531-5.281l-0.688-10.531l-5.406-8.562l-1.375-9.25l 2.719-7.906l 3.375-7.906c0.00,0.00, 8.156-9.219,0.00-15.812
                                                  +	c0.00,0.00-10.156,0.00-12.188,3.312c-2.031,3.281-16.938,12.50-19.656,15.156c-2.688,2.625-11.50,5.25-11.50,5.25l-10.844,3.969l-10.156,0.656
                                                  +	l 0.656,13.844l-0.656,11.844l-4.094,8.562l-11.50,8.594l-0.688,9.219l 1.406,5.125c 27.438,26.531, 65.25,42.969, 107.00,42.969
                                                  +	c 23.562,0.00, 45.594-5.656, 65.50-14.969l-0.438-3.469L 297.719,335.938z"  />
                                                  +<glyph unicode="&#x20;" horiz-adv-x="256" />
                                                  +<glyph class="hidden" unicode="&#xf000;" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" />
                                                  +</font></defs></svg>
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.ttf b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.ttf
                                                  new file mode 100644
                                                  index 00000000..0f35e76c
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.ttf differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.woff b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.woff
                                                  new file mode 100644
                                                  index 00000000..da24b2df
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/contentpane/lib/easyFont/font/eightyshades.woff differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/designer.extend.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/designer.extend.css
                                                  new file mode 100644
                                                  index 00000000..3aeaf005
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/designer.extend.css
                                                  @@ -0,0 +1,459 @@
                                                  +#checkoutTip {
                                                  +	display: none;
                                                  +	position: absolute;
                                                  +	left: 75px;
                                                  +	top: 60px;
                                                  +	z-index: 1000;
                                                  +	width: 407px;
                                                  +	height: 40px;
                                                  +	line-height: 18px;
                                                  +	padding-top:3px;
                                                  +	background-color: #FFF8DC;
                                                  +	border-radius: 8px;
                                                  +	border: #bfbfbf solid 0px;
                                                  +	-moz-user-select: none;
                                                  +	-webkit-text-size-adjust: none;
                                                  +	opacity: 0.8;
                                                  +}
                                                  +
                                                  +.dock_view{
                                                  +	background: #f5f5f5;
                                                  +	border: 1px solid #999;
                                                  +	-webkit-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.33);
                                                  +	-moz-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.33);
                                                  +	box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.33);
                                                  +	z-index: 0;
                                                  +	position: absolute;
                                                  +	top: 10px;
                                                  +	display: none;
                                                  +	width: 220px;
                                                  +	max-height: 510px;
                                                  +}
                                                  +
                                                  +.dock_content{
                                                  +	padding: 5px 10px 10px;
                                                  +	position: relative;
                                                  +	max-height: 470px;
                                                  +	overflow-y:auto;
                                                  +}
                                                  +
                                                  +#history_versions{
                                                  +	overflow-y: auto;
                                                  +	min-height: 140px;
                                                  +	position: relative;
                                                  +	max-height: 390px;
                                                  +}
                                                  +
                                                  +.dlg_info{
                                                  +	height: 32px;
                                                  +	line-height: 32px;
                                                  +	float: left;
                                                  +	padding-top:10px;
                                                  +	text-align:left;
                                                  +}
                                                  +
                                                  +.toolbar {
                                                  +	padding-left: 5px;
                                                  +	padding-right: 5px;
                                                  +	background-color: #f3f3f3;
                                                  +	border-top: 1px solid #cbcccc;
                                                  +	height: 36px;
                                                  +	font-size: 12px;
                                                  +	min-width: 975px;
                                                  +}
                                                  +
                                                  +.toolbar_info {
                                                  +	float: right;
                                                  +	height: 24px;
                                                  +	margin-top: 5px;
                                                  +}
                                                  +
                                                  +.info {
                                                  +	float: left;
                                                  +	margin-left: 5px;
                                                  +	height: 24px;
                                                  +	line-height: 24px;
                                                  +	border-radius: 8px;
                                                  +	border: #bfbfbf solid 0px;
                                                  +	-webkit-text-size-adjust: none;
                                                  +	-moz-user-select:none;
                                                  +	-webkit-user-select:none;
                                                  +	-ms-user-select:none;
                                                  +	-khtml-user-select:none;
                                                  +	user-select:none;
                                                  +	/*cursor: pointer;*/
                                                  +}
                                                  +.versioninfo {
                                                  +	float: left;
                                                  +	padding: 0 10px;
                                                  +	margin-left: 5px;
                                                  +	height: 24px;
                                                  +	line-height: 24px;
                                                  +	border-radius: 8px;
                                                  +	border: #bfbfbf solid 0px;
                                                  +	-webkit-text-size-adjust: none;
                                                  +	-moz-user-select:none;
                                                  +	-webkit-user-select:none;
                                                  +	-ms-user-select:none;
                                                  +	-khtml-user-select:none;
                                                  +	user-select:none;
                                                  +	cursor: pointer;
                                                  +	box-shadow: inset 0 0 10px rgba(0,0,0,0.2);
                                                  +}
                                                  +.version {
                                                  +	color: #808080;
                                                  +	background-color: #FFFFFF;
                                                  +	font-weight: bold;
                                                  +}
                                                  +.version-1 {
                                                  +	color: #808080;
                                                  +	background-color: #DFDFDF;
                                                  +}
                                                  +.version0 {
                                                  +	color: #ffffff;
                                                  +	background-color: #F38F0E;
                                                  +}
                                                  +.version1 {
                                                  +	color: #ffffff;
                                                  +	background-color: #7FB93C;
                                                  +}
                                                  +.options_menu li .ico_aws{
                                                  +	position: absolute;
                                                  +	top: 1px;
                                                  +	left: 5px;
                                                  +}
                                                  +
                                                  +.ico_check_aws{
                                                  +	background: url(../images/check_aws.png?3) no-repeat;
                                                  +	margin: 2px;
                                                  +	height: 20px;
                                                  +	width: 20px;
                                                  +	margin-top:3px;
                                                  +}
                                                  +.ico_aws{
                                                  +	background: url(../images/sprite_aws.png?3) no-repeat;
                                                  +	margin: 2px;
                                                  +	height: 20px;
                                                  +	width: 20px;
                                                  +	opacity: 0.7;
                                                  +}
                                                  +.disabled .ico_aws{
                                                  +	background-image: url(../images/sprite_disabled_aws.png?3);
                                                  +}
                                                  +
                                                  +.ico_aws.save{
                                                  +	background-position: 0px 0px;
                                                  +}
                                                  +
                                                  +.ico_aws.plug{
                                                  +	background-position: 0px 0px;
                                                  +	background: url(../images/plug.png) no-repeat;
                                                  +}
                                                  +
                                                  +.ico_aws.locked {
                                                  +	background-position: 0px 0px;
                                                  +	background: url(../images/locked.png) no-repeat;
                                                  +	background-size: contain;
                                                  +}
                                                  +
                                                  +.ico_aws.unlock {
                                                  +	background-position: 0px 0px;
                                                  +	background: url(../images/unlock.png) no-repeat;
                                                  +	background-size: contain;
                                                  +}
                                                  +
                                                  +.ico_aws.lightning{
                                                  +	background-position: 0px 0px;
                                                  +	background: url(../images/lightning16.png) no-repeat center;
                                                  +}
                                                  +.ico_aws.incorrelate{
                                                  +	background-position: 0px 0px;
                                                  +	background: url(../images/incorrelate16.png) no-repeat center;
                                                  +}
                                                  +.ico_aws.view{
                                                  +	background-position: 0px -20px;
                                                  +}
                                                  +.ico_aws.insert{
                                                  +	background-position: 0px -40px;
                                                  +}
                                                  +.ico_aws.node_properties{
                                                  +	background-position: 0px -60px;
                                                  +}
                                                  +.ico_aws.doc{
                                                  +	background-position: 0px -80px;
                                                  +}
                                                  +.ico_aws.proces_properties{
                                                  +	background-position: 0px -100px;
                                                  +}
                                                  +.ico_aws.run{
                                                  +	background-position: 0px -120px;
                                                  +}
                                                  +.ico_aws.bpmn{
                                                  +	background-position: 0px -140px;
                                                  +}
                                                  +.ico_aws.validate{
                                                  +	background-position: 0px -160px;
                                                  +}
                                                  +.ico_aws.expimg{
                                                  +	background-position: 0px -180px;
                                                  +}
                                                  +
                                                  +.ico.extend_activityNo{
                                                  +	background-position: 0px 0px;
                                                  +	background: url(../images/activityNo.png) no-repeat;
                                                  +	background-size: contain;
                                                  +}
                                                  +
                                                  +.ico.extend_activityNoDisable{
                                                  +	background-position: 0px 0px;
                                                  +	background: url(../images/activityNoDisable.png) no-repeat;
                                                  +	background-size: contain;
                                                  +}
                                                  +
                                                  +/*时间轴*/
                                                  +ul.timeline {
                                                  +	background: url("../images/version_line.png") repeat-y scroll 28px 0 transparent;
                                                  +	list-style-type: none;
                                                  +	margin: 0 0;
                                                  +	padding: 0;
                                                  +}
                                                  +ul.timeline li {
                                                  +	background: url("../images/version_line.png") repeat-y scroll 28px 0 transparent;
                                                  +	position: relative;
                                                  +	min-height: 60px;
                                                  +}
                                                  +ul.timeline li .time {
                                                  +	margin-left: 56px;
                                                  +}
                                                  +ul.timeline li .version {
                                                  +	position: absolute;
                                                  +	width: 290px;
                                                  +	text-align: right;
                                                  +	left: -200px;
                                                  +	top: 30px;
                                                  +	font-size: 40px;
                                                  +	line-height: 50px;
                                                  +	color: #3594cb;
                                                  +	overflow: hidden;
                                                  +}
                                                  +ul.timeline li .number {
                                                  +	position: absolute;
                                                  +	background: url("../images/version_dot.png") no-repeat scroll 0 0 transparent;
                                                  +	width: 56px;
                                                  +	height: 56px;
                                                  +	left: 5px;
                                                  +	top: 5px;
                                                  +	line-height: 56px;
                                                  +	text-align: center;
                                                  +	color: #fff;
                                                  +	font-size: 18px;
                                                  +}
                                                  +ul.timeline li.alt .number {
                                                  +	background-image: url("../images/version_dot_alt.png");
                                                  +}
                                                  +ul.timeline li .content {
                                                  +	margin-left: 56px;
                                                  +}
                                                  +ul.timeline li .content pre {
                                                  +	background-color: #3594cb;
                                                  +	padding: 20px;
                                                  +	color: #fff;
                                                  +	font-size: 13px;
                                                  +	line-height: 20px;
                                                  +}
                                                  +ul.timeline li.alt .content pre {
                                                  +	background-color: #43B1F1;
                                                  +}
                                                  +
                                                  +/*重写历史列表*/
                                                  +.edit_container textarea{
                                                  +	width: 133px;
                                                  +	height: 36px;
                                                  +}
                                                  +#history_versions .selected {
                                                  +	background: #e6e6e6 url("../images/version_line.png") repeat-y scroll 28px 0;
                                                  +}
                                                  +#history_versions li:hover{
                                                  +	background: #e6e6e6 url("../images/version_line.png") repeat-y scroll 28px 0;
                                                  +}
                                                  +#history_versions .selected:hover{
                                                  +	background: #e6e6e6 url("../images/version_line.png") repeat-y scroll 28px 0;
                                                  +}
                                                  +#history_versions .selected .time{
                                                  +	color: #d14836;
                                                  +	font-weight: bold;
                                                  +}
                                                  +
                                                  +.IDInput {
                                                  +	width: 340px;
                                                  +	font-family: Consolas;
                                                  +	font-size:16px;
                                                  +	border: 0;
                                                  +}
                                                  +
                                                  +#fullscreen_tip{
                                                  +	position: absolute;
                                                  +	bottom: -60px;
                                                  +	right: 0px;
                                                  +	display: none;
                                                  +	white-space:nowrap;
                                                  +}
                                                  +
                                                  +/* 修改按钮最小宽度*/
                                                  +/*
                                                  +.button, .button:visited {
                                                  +    display: inline-block;
                                                  +    line-height: 28px;
                                                  +    border: 1px solid rgb(198, 198, 198);
                                                  +    padding: 0px 10px;
                                                  +    text-align: center;
                                                  +    background-color: rgb(248, 248, 248);
                                                  +	background-image: -moz-linear-gradient(center top , rgb(248, 248, 248), rgb(241, 241, 241));
                                                  +    color: rgb(51, 51, 51);
                                                  +    cursor: pointer;
                                                  +    text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.5);
                                                  +    border-radius: 2px;
                                                  +    box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);
                                                  +    min-width: 58px;
                                                  +}
                                                  +*/
                                                  +/* 连接弹窗上面的鼠标经过 时的颜色 */
                                                  +#link-content span:hover{
                                                  +	border:1px solid #cbcbcb;
                                                  +	background:#f0f0f0;
                                                  +	color:red;
                                                  +}
                                                  +#tabUlContainer {
                                                  +	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 10px; WIDTH: 100%px; PADDING-TOP: 0px; HEIGHT: 23px
                                                  +}
                                                  +#tabUlContainer LI {
                                                  +	BACKGROUND: url(../images/tagleft.gif) no-repeat left bottom; FLOAT: left; MARGIN-RIGHT: 1px; LIST-STYLE-TYPE: none; HEIGHT: 23px
                                                  +}
                                                  +#tabUlContainer LI A {
                                                  +	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: url(../images/tagright.gif) no-repeat right bottom; FLOAT: left; PADDING-BOTTOM: 0px; COLOR: #999; LINE-HEIGHT: 23px; PADDING-TOP: 0px; HEIGHT: 23px; TEXT-DECORATION: none
                                                  +}
                                                  +#tabUlContainer LI.emptyTag {
                                                  +	BACKGROUND: none transparent scroll repeat 0% 0%; WIDTH: 4px
                                                  +}
                                                  +#tabUlContainer LI.selectTag {
                                                  +	BACKGROUND-POSITION: left top; MARGIN-BOTTOM: -2px; POSITION: relative; HEIGHT: 25px
                                                  +}
                                                  +#tabUlContainer LI.selectTag A {
                                                  +	BACKGROUND-POSITION: right top; COLOR: #000; LINE-HEIGHT: 25px; HEIGHT: 25px
                                                  +}
                                                  +#tagContent {
                                                  +	BORDER-RIGHT: #aecbd4 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #aecbd4 1px solid; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; BORDER-LEFT: #aecbd4 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: #aecbd4 1px solid; BACKGROUND-COLOR: #fff
                                                  +}
                                                  +.tagContent {
                                                  +	PADDING-RIGHT: 10px; DISPLAY: none; PADDING-LEFT: 10px; BACKGROUND: url(../images/bg.gif); PADDING-BOTTOM: 10px; WIDTH:100%; COLOR: #474747; PADDING-TOP: 10px; HEIGHT: 300px
                                                  +}
                                                  +#tagContent DIV.selectTag {
                                                  +	DISPLAY: block;
                                                  +}
                                                  +.tagContentTableTr{
                                                  +height: 25px;
                                                  +}
                                                  +.tagContentTableTrFirst{
                                                  +background-color: #949494;
                                                  +height: 25px;
                                                  +}
                                                  +
                                                  +.tagContentTableTbody tr td{
                                                  +	border:1px solid #ccc;
                                                  +	padding:0 5px;
                                                  +    white-space: normal;
                                                  +}
                                                  +.dialogTableTbody tr td{
                                                  +	color: #666666;
                                                  +    border:1px solid #ccc;
                                                  +    padding:0 5px;
                                                  +    white-space: normal;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.dialogTableHead {
                                                  +	font-size: 15px;
                                                  +	font-weight: bold;
                                                  +}
                                                  +.dialogTableTbody .dialogTableDelete {
                                                  +	color: red;
                                                  +	text-decoration-line: underline;
                                                  +}
                                                  +/*.attr_more {
                                                  +    padding-top:22px;
                                                  +    text-align: right;
                                                  +    padding-right:10px;
                                                  +    padding-bottom:10px;
                                                  +    cursor:pointer;
                                                  +}
                                                  +.attr_no_more_attribute{
                                                  +    padding-top:30 0;
                                                  +    text-align: center;
                                                  +}*/
                                                  +.attribute_input_css{
                                                  +border-bottom-width: 0;
                                                  +border-left-width: 0;
                                                  +border-right-width: 0;
                                                  +border-top-width: 0;
                                                  +height: 22px;
                                                  +width: 100%;
                                                  +padding-left:0;
                                                  +float: left;
                                                  +background-color: rgb(255, 255, 255);
                                                  +}
                                                  +.required_input_css::-webkit-input-placeholder {
                                                  +  color: red;
                                                  +}
                                                  +.dialog_table_input_css {
                                                  +	border-bottom-width: 0;
                                                  +	border-left-width: 0;
                                                  +	border-right-width: 0;
                                                  +	border-top-width: 0;
                                                  +	height: 22px;
                                                  +	width: 100%;
                                                  +	padding-left:0;
                                                  +	float: left;
                                                  +	background-color: rgb(255, 255, 255);
                                                  +	text-overflow: ellipsis;
                                                  +	cursor: pointer;
                                                  +}
                                                  +
                                                  +.tagContentTableTrTd{
                                                  +background-color:#ffffff;
                                                  +}
                                                  +.ico_attribute_delete {
                                                  +    cursor: pointer;
                                                  +    display: none;
                                                  +    float: left;
                                                  +	margin-left:-25px;
                                                  +    z-index: 1;
                                                  +    background: url("../images/close_attr.jpg") no-repeat scroll 0 0 rgba(0, 0, 0, 0);
                                                  +    height: 21px;
                                                  +    opacity: 0.7;
                                                  +    width: 23px;
                                                  +}
                                                  +.attr_bg_color_tr{
                                                  +  background: url("../images/attr_bg_color.jpg");
                                                  +}
                                                  +.attribute_td_div_css{
                                                  +border-bottom-width: 0;
                                                  +border-left-width: 0;
                                                  +border-right-width: 0;
                                                  +border-top-width: 0;
                                                  +height: 22px;
                                                  +width: 100%;
                                                  +padding-left:0;
                                                  +float: left;
                                                  +}
                                                  +.links_history_tr span{
                                                  +line-height:22px;
                                                  +color: #4183C4;
                                                  +    cursor: pointer;
                                                  +    font-size: 13px;
                                                  +    text-decoration: none;
                                                  +}
                                                  +.links_history_tr a{
                                                  +line-height:22px;
                                                  +max-width:230px;
                                                  +overflow:hidden;
                                                  +white-space:nowrap;
                                                  +}
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/designer.properties.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/designer.properties.css
                                                  new file mode 100644
                                                  index 00000000..0894fcdb
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/css/designer.properties.css
                                                  @@ -0,0 +1,194 @@
                                                  +html body {
                                                  +	margin: 0px;
                                                  +	padding: 0px;
                                                  +	font-family: Arial, Helvetica, sans-serif;
                                                  +	font-size: 12px;
                                                  +	background-repeat: repeat;
                                                  +}
                                                  +input, textarea, div {
                                                  +	resize: none;
                                                  +	outline: none;
                                                  +	font-size: 12px;
                                                  +}
                                                  +.toolbar-tab-box {
                                                  +	width: 100%;
                                                  +	border: 0px;
                                                  +	height: 39px;
                                                  +	border-bottom: 1px solid #CCC;
                                                  +	background: #F2F2F2;
                                                  +}
                                                  +
                                                  +.toolbar-tabs {
                                                  +	padding-top:10px;
                                                  +	padding-left:10px;
                                                  +	list-style: none;
                                                  +	float: left;
                                                  +	-moz-user-select: none;
                                                  +	-khtml-user-select: none;
                                                  +	-webkit-user-select: none;
                                                  +	-ms-user-select: none;
                                                  +	-o-user-select: none;
                                                  +	user-select: none;
                                                  +}
                                                  +.toolbar-tabs li {
                                                  +	float: left;
                                                  +	cursor: pointer;
                                                  +	/*width: 100px;*/
                                                  +	height:22px;
                                                  +	line-height:22px;
                                                  +	text-align: center;
                                                  +	border-right: 1px solid #C3C3C3;
                                                  +	border-left: 1px solid #E5E5E5;
                                                  +}
                                                  +.tab-active {
                                                  +	background: #FFFFFF;
                                                  +	color: #23272C;
                                                  +	padding: 4px 19px 4px 19px;
                                                  +	border-left: none !important;
                                                  +}
                                                  +.tab-normal {
                                                  +	color: #444;
                                                  +	padding: 4px 19px 3px 19px;
                                                  +	background: #D7D7D7;
                                                  +}
                                                  +.tab-normal:hover {
                                                  +	background: #CCC;
                                                  +}
                                                  +.toolbar-items-container {
                                                  +	width: 100%;
                                                  +	/*background: url(images/designer/toolbar-item-bg.png) repeat-x left bottom;*/
                                                  +	/*-moz-user-select: none;
                                                  +	-khtml-user-select: none;
                                                  +	-webkit-user-select: none;
                                                  +	-ms-user-select: none;
                                                  +	-o-user-select: none;
                                                  +	user-select: none;*/
                                                  +}
                                                  +.fieldset {
                                                  +	padding: 10px;
                                                  +	margin: 10px;
                                                  +	color: #333;
                                                  +	border: #06c solid 1px;
                                                  +}
                                                  +.legend {
                                                  +	color: #06c;
                                                  +	font-weight: 800;
                                                  +	background: #fff;
                                                  +	border: #b6b6b6 solid 1px;
                                                  +	padding: 3px 6px;
                                                  +}
                                                  +.data_attr_win .item_container .txt {
                                                  +	padding: 3px;
                                                  +	width: 95%;
                                                  +}
                                                  +.data_attr_win .item_container select.txt {
                                                  +	padding: 2px;
                                                  +}
                                                  +/*输入框*/
                                                  +input[type="text"] {
                                                  +	border: 1px solid #D9D9D9;
                                                  +	border-top: 1px solid silver;
                                                  +	padding: 4px;
                                                  +	width: 180px;
                                                  +	background-color: #FFFFFF;
                                                  +	border-radius: 2px;
                                                  +	width: 135px;
                                                  +	height: 14px;
                                                  +	padding-left: 5px;
                                                  +	vertical-align: middle;
                                                  +}
                                                  +input[type="text"]:hover {
                                                  +	border: 1px solid #B8B8B8;
                                                  +	border-top: 1px solid #A1A1A1;
                                                  +}
                                                  +input[type="text"]:focus {
                                                  +	border: 1px solid #3da2ea;
                                                  +	box-shadow: inset 0px 1px 2px rgba(0,0,0,0.2);
                                                  +}
                                                  +select {
                                                  +	border: 1px solid #D9D9D9;
                                                  +	border-top: 1px solid silver;
                                                  +	padding: 2px 4px;
                                                  +	width: 180px;
                                                  +	background-color: #FFFFFF;
                                                  +	border-radius: 2px;
                                                  +	width: 146px;
                                                  +	height: 25px;
                                                  +	padding-left: 5px;
                                                  +	vertical-align: middle;
                                                  +	line-height:25px;
                                                  +}
                                                  +select:hover {
                                                  +	border: 1px solid #B8B8B8;
                                                  +	border-top: 1px solid #A1A1A1;
                                                  +}
                                                  +option {
                                                  +	padding-left: 8px;
                                                  +	height: 18px;
                                                  +    vertical-align: middle;
                                                  +	line-height:25px;
                                                  +	padding-top:4px;
                                                  +}
                                                  +/* CSS Document */
                                                  +.auditMenuListTable {
                                                  +	width: 100%;
                                                  +	padding: 0;
                                                  +	margin: 0;
                                                  +	background:#FFF;
                                                  +	
                                                  +}
                                                  +.auditMenuListTable caption {
                                                  +	padding: 0 0 5px 0;
                                                  +	width: 700px;
                                                  +	font: italic 12px;
                                                  +	text-align: right;
                                                  +}
                                                  +.auditMenuListTable th {
                                                  +	font:bold 12px;
                                                  +	color: #4f6b72;
                                                  +	border-right: 1px solid #C1DAD7;
                                                  +	border-bottom: 1px solid #C1DAD7;
                                                  +	border-top: 1px solid #C1DAD7;
                                                  +	letter-spacing: 2px;
                                                  +	text-transform: uppercase;
                                                  +	text-align: left;
                                                  +	padding: 6px 6px 6px 12px;
                                                  +}
                                                  +/*power by www.winshell.cn*/
                                                  +.auditMenuListTable th.nobg {
                                                  +	border-top: 0;
                                                  +	border-left: 0;
                                                  +	border-right: 1px solid #C1DAD7;
                                                  +	background: none;
                                                  +}
                                                  +.auditMenuListTable td {
                                                  +	border-right: 1px solid #C1DAD7;
                                                  +	border-bottom: 1px solid #C1DAD7;
                                                  +	background: #fff;
                                                  +	font-size:12px;
                                                  +	padding: 6px 6px 6px 12px;
                                                  +	color: #4f6b72;
                                                  +}
                                                  +/*power by www.winshell.cn*/
                                                  +
                                                  + .auditMenuListTable td.alt {
                                                  +	background: #F5FAFA;
                                                  +	color: #797268;
                                                  +}
                                                  +.auditMenuListTable th.spec {
                                                  +	border-left: 1px solid #C1DAD7;
                                                  +	border-top: 0;
                                                  +	background: #fff no-repeat;
                                                  +	font: bold 12px;
                                                  +}
                                                  +th.specalt {
                                                  +	border-left: 1px solid #C1DAD7;
                                                  +	border-top: 0;
                                                  +	background: #E6EAE9;
                                                  +	font: bold 12px;
                                                  +	color: #797268;
                                                  +}
                                                  +/*---------for IE 5.x bug*/
                                                  +.auditMenuListTable td {
                                                  +	font-size:12px;
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/activityNo.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/activityNo.png
                                                  new file mode 100644
                                                  index 00000000..07a2ee7f
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/activityNo.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/activityNoDisable.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/activityNoDisable.png
                                                  new file mode 100644
                                                  index 00000000..a083705f
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/activityNoDisable.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/attr_bg_color.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/attr_bg_color.jpg
                                                  new file mode 100644
                                                  index 00000000..213d4df6
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/attr_bg_color.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/bg.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/bg.gif
                                                  new file mode 100644
                                                  index 00000000..51a41e05
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/bg.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/check_aws.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/check_aws.png
                                                  new file mode 100644
                                                  index 00000000..5b8d8c69
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/check_aws.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/check_aws_hui.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/check_aws_hui.png
                                                  new file mode 100644
                                                  index 00000000..be6e729c
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/check_aws_hui.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/close.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/close.jpg
                                                  new file mode 100644
                                                  index 00000000..03ba345e
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/close.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/close_attr.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/close_attr.jpg
                                                  new file mode 100644
                                                  index 00000000..bb86e476
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/close_attr.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/incorrelate.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/incorrelate.png
                                                  new file mode 100644
                                                  index 00000000..77244370
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/incorrelate.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/incorrelate16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/incorrelate16.png
                                                  new file mode 100644
                                                  index 00000000..7d9264ee
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/incorrelate16.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/lightning.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/lightning.png
                                                  new file mode 100644
                                                  index 00000000..a5ff5fbe
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/lightning.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/lightning16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/lightning16.png
                                                  new file mode 100644
                                                  index 00000000..49afce96
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/lightning16.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/lock.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/lock.png
                                                  new file mode 100644
                                                  index 00000000..a1dfc144
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/lock.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/locked.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/locked.png
                                                  new file mode 100644
                                                  index 00000000..0faa5534
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/locked.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/plug.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/plug.png
                                                  new file mode 100644
                                                  index 00000000..a6177f68
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/plug.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/save.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/save.png
                                                  new file mode 100644
                                                  index 00000000..717291f4
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/save.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/sprite_aws.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/sprite_aws.png
                                                  new file mode 100644
                                                  index 00000000..821f7534
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/sprite_aws.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/sprite_aws.psd b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/sprite_aws.psd
                                                  new file mode 100644
                                                  index 00000000..c24e63d2
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/sprite_aws.psd differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/sprite_disabled_aws.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/sprite_disabled_aws.png
                                                  new file mode 100644
                                                  index 00000000..7e9cb630
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/sprite_disabled_aws.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/tagleft.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/tagleft.gif
                                                  new file mode 100644
                                                  index 00000000..f9af12c3
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/tagleft.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/tagright.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/tagright.gif
                                                  new file mode 100644
                                                  index 00000000..f7920972
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/tagright.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/unlock.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/unlock.png
                                                  new file mode 100644
                                                  index 00000000..912498ec
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/unlock.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/version_dot.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/version_dot.png
                                                  new file mode 100644
                                                  index 00000000..d309519f
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/version_dot.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/version_dot.psd b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/version_dot.psd
                                                  new file mode 100644
                                                  index 00000000..88b9c2cc
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/version_dot.psd differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/version_dot_alt.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/version_dot_alt.png
                                                  new file mode 100644
                                                  index 00000000..11de0193
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/version_dot_alt.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/version_line.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/version_line.png
                                                  new file mode 100644
                                                  index 00000000..4f3e3763
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/images/version_line.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/img/save.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/img/save.png
                                                  new file mode 100644
                                                  index 00000000..717291f4
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/img/save.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/bpmn.designer.biz.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/bpmn.designer.biz.js
                                                  new file mode 100644
                                                  index 00000000..3cc74a68
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/bpmn.designer.biz.js
                                                  @@ -0,0 +1,1876 @@
                                                  +
                                                  +/** 该js中存放与业务相关的方法*/
                                                  +/**
                                                  + * 当前选择的节点,全局变量
                                                  + */
                                                  +var node;
                                                  +var haveSaved; //是否已经保存
                                                  +var createNewVersionFlag = false;
                                                  +var createNewVersion_afterSaveCallback;
                                                  +var createNewVersion_op;
                                                  +var curentErrors = "";
                                                  +var lastedErrors = "";
                                                  +//uuid-color|uuid-color
                                                  +var hashMap = new HashMap();
                                                  +
                                                  +var passedLinkerArray = new Array();
                                                  +
                                                  +var BPMNBiz = {
                                                  +	intervalInd : 0,
                                                  +	/* 属性相关 begin */
                                                  +	getPools: function () {
                                                  +		var pools = [];
                                                  +		for (var shapeId in Model.define.elements) {
                                                  +			var node = Model.getShapeById(shapeId);
                                                  +			if (node.name && node.name != "linker") {
                                                  +				if (node.name == "verticalPool" || node.name == "horizontalPool") {
                                                  +					pools.push(node);
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		return pools;
                                                  +	},
                                                  +	getTasksList: function (filterNames) {
                                                  +		var filterNode = [];
                                                  +		var nodes = Model.define.elements;
                                                  +		if (filterNames == undefined) {
                                                  +			return BPMNBiz.getALLTasksList();
                                                  +		}
                                                  +		var filterNameArr = [];
                                                  +		if (filterNames.indexOf(",") > -1) {
                                                  +			filterNameArr = filterNames.split(",");
                                                  +		} else {
                                                  +			filterNameArr = [filterNames];
                                                  +		}
                                                  +		for (var shapeId in Model.define.elements) {
                                                  +			var node = Model.getShapeById(shapeId);
                                                  +			// var node=nodes[i];
                                                  +			if (node.name) {
                                                  +				if (node.name != "linker") {
                                                  +					for (var i = 0; i < filterNameArr.length; i++) {
                                                  +						var nodeName = filterNameArr[i];
                                                  +						if (node.name == nodeName) {
                                                  +							filterNode.push(node);
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		return filterNode;
                                                  +	},
                                                  +	getALLTasksList: function () {
                                                  +		var filterNode = [];
                                                  +		for (var shapeId in Model.define.elements) {
                                                  +			var node = Model.getShapeById(shapeId);
                                                  +			if (node.bpmnName) {
                                                  +				if (node.bpmnName != "linker") {
                                                  +					if (node.bpmnName.indexOf("Task") > -1) {
                                                  +						filterNode.push(node);
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		return filterNode;
                                                  +	},
                                                  +	/* 打开流程属性或者形状属性dialog */
                                                  +	showPropertiesDialog : function(isProcess, node) {
                                                  +		if(!process.title) {
                                                  +			process.title = frmFileName;
                                                  +		}
                                                  +		frmFileName = process.title;
                                                  +		
                                                  +		if ($("#dialog_properties").is(":visible")) {//如果已经打开则直接跳出
                                                  +			return;
                                                  +		}
                                                  +		var width;
                                                  +		var height;
                                                  +		var css;
                                                  +		var url;
                                                  +		var title;
                                                  +		$("#dialog_properties .dlg_buttons").show();
                                                  +		var processProperties = Model.define.processProperties;
                                                  +		var schemaName;
                                                  +		var elementId;
                                                  +		var elementName;
                                                  +		var extendParamJson;
                                                  +		var url = './w';
                                                  +		var html = '';
                                                  +		var nodes = Utils.getSelected();
                                                  +		if (nodes.length == 0 && node != undefined) {
                                                  +			currentNode = node;
                                                  +			nodes.push(node);
                                                  +		}
                                                  +		var processDefId = process.processDefId;
                                                  +		//var processDefTitle = process.title;
                                                  +		var processDefTitle = process.title;
                                                  +		var isNoBorder = false;
                                                  +		var getMaxWidth = function () {
                                                  +			var widht;
                                                  +			if ($.browser.msie) {
                                                  +				width = window.screen.availWidth < 1100 ? (window.screen.availWidth - 90) : (window.screen.availWidth - 200);
                                                  +			} else {
                                                  +				width = $(window).width() - ($(window).width() > 1000 ? 200 : 50);
                                                  +			}
                                                  +			width = width > 1200 ? 1200 : width;
                                                  +			return width;
                                                  +		};
                                                  +		//获取选中的节点图形
                                                  +		if (!isProcess && nodes.length > 1) {
                                                  +			$.simpleAlert(请选择一个图形, "info", 2000);
                                                  +			return;
                                                  +		} else if (nodes.length == 0 || isProcess) {
                                                  +			width = getMaxWidth();
                                                  +			height = $(window).height() - 50;
                                                  +			schemaName = "process";
                                                  +			elementId = process.processDefId;
                                                  +			var nodeList = BPMNBiz.getTasksList();
                                                  +			extendParamJson = JSON.stringify({
                                                  +				processDefId: processDefId,
                                                  +				processName: processDefTitle,
                                                  +				processProperties: processProperties,
                                                  +				nodeList: nodeList
                                                  +			});
                                                  +			title = "流程";
                                                  +			isNoBorder = true;
                                                  +		} else if (nodes.length == 1) {
                                                  +			var dataAttrs = [];
                                                  +			var awsProperties;
                                                  +			var index = -1;
                                                  +			dataAttrs = nodes[0].dataAttributes;
                                                  +			//获取该节点的所有aws属性
                                                  +			for (var i = 0; i < dataAttrs.length; i++) {
                                                  +				var attr = dataAttrs[i];
                                                  +				var name = attr.name;
                                                  +				if (name == "AWSProperties") {
                                                  +					awsProperties = attr;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +			var elementProperties;
                                                  +			if (awsProperties) {
                                                  +				elementProperties = awsProperties.value;
                                                  +			}
                                                  +			var noProp = function (elementId) {
                                                  +				$.simpleAlert("无属性" + '\n<input type="text" class="IDInput" onclick="$(this).select();" readonly="readonly" value="' + elementId + '">', 'info', 'no');
                                                  +			}
                                                  +			node = nodes[0];
                                                  +			schemaName = node.name;
                                                  +			//bpmnName
                                                  +			elementId = node.id;
                                                  +			elementName = node.text;
                                                  +			var outLinkerOrderIndex = BPMNBiz.getOutLinkerOrderIndex(node);
                                                  +			var outLinkers = BPMNBiz.getNodeOutLinker(node);
                                                  +			var inLinkers = BPMNBiz.getNodeInLinker(node);
                                                  +			switch (schemaName) {
                                                  +				case AWS_ELEMENT_START_EVENT_MESSAGE_EVENT_DEFINITION:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = messageStartEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case AWS_ELEMENT_START_EVENT_SIGNAL_EVENT_DEFINITION:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = signalStartEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_SIGNAL_EVENT_DEFINITION:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = signalIntermediateCatchEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_SIGNAL_EVENT_DEFINITION:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = signalIntermediateThrowingEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case AWS_ELEMENT_BOUNDARY_EVENT_SIGNAL_EVENT_DEFINITION:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = signalBoundaryInterrputingEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case AWS_ELEMENT_END_EVENT_SIGNAL_EVENT_DEFINITION:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = signalEndEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case AWS_ELEMENT_START_EVENT_TIMER_EVENT_DEFINITION:
                                                  +					title = timerStartEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_TIMER_EVENT_DEFINITION:
                                                  +					title = timerIntermediateCatchEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						outLinkers: outLinkers,
                                                  +						inLinkers: inLinkers,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case AWS_ELEMENT_BOUNDARY_EVENT_TIMER_EVENT_DEFINITION:
                                                  +					title = timerBoundaryInterrputingEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case AWS_ELEMENT_BOUNDARY_EVENT_COMPENSATE_EVENT_DEFINITION:
                                                  +					noProp(elementId);
                                                  +					return;
                                                  +					break;
                                                  +				case AWS_ELEMENT_INTERMEDIATE_CATCH_EVENT_MESSAGE_EVENT_DEFINITION:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = messageIntermediateCatchEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_MESSAGE_EVENT_DEFINITION:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = messageIntermediateThrowingEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case BPMN_TYPE_INTERMEDIATE_CATCH_EVENT:
                                                  +					title = intermediateCatchEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case AWS_ELEMENT_END_EVENT_COMPENSATE_EVENT_DEFINITION:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = AWS_ELEMENT_END_EVENT_COMPENSATE_EVENT_DEFINITION_TITLE;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case AWS_ELEMENT_INTERMEDIATE_THROW_EVENT_COMPENSATE_EVENT_DEFINITION:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = compensateIntermediateThrowingEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case AWS_ELEMENT_BOUNDARY_EVENT_ERROR_EVENT_DEFINITION:
                                                  +					title = errorBoundaryInterrputingEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case AWS_ELEMENT_BOUNDARY_EVENT_MESSAGE_EVENT_DEFINITION:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = messageBoundaryInterrputingEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case BPMN_TYPE_END_EVENT:
                                                  +					title = endEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = 900;
                                                  +					height = $(window).height() * 0.8;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case AWS_ELEMENT_END_EVENT_TERMINATE_EVENT_DEFINITION:
                                                  +					title = terminateEndEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = 900;
                                                  +					height = $(window).height() * 0.8;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case AWS_ELEMENT_END_EVENT_MESSAGE_EVENT_DEFINITION:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = messageEndEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case AWS_ELEMENT_END_EVENT_ERROR_EVENT_DEFINITION:
                                                  +					title = errorEndEventText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case BPMN_TYPE_GATEWAY:
                                                  +					title = gatewayText;
                                                  +					// width = getMaxWidth();
                                                  +					// height = $(window).height() - 10;
                                                  +					width = 700;
                                                  +					height = 500;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case BPMN_TYPE_EXCLUSIVE_GATEWAY:
                                                  +					title = exclusiveGatewayText;//该变量定义来自designer.extend.userdefine.js
                                                  +					// width = getMaxWidth();
                                                  +					// height = $(window).height() - 10;
                                                  +					// width = 700;
                                                  +					width = 730;
                                                  +					height = 430;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						array: outLinkerOrderIndex,
                                                  +						defaultSequenceFlow: node.defaultLine
                                                  +					});
                                                  +					break;
                                                  +				case BPMN_TYPE_INCLUSIVE_GATEWAY:
                                                  +					title = inclusiveGatewayText;//该变量定义来自designer.extend.userdefine.js
                                                  +					// width = getMaxWidth();
                                                  +					// height = $(window).height() - 10;
                                                  +					width = 700;
                                                  +					height = 500;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						array: outLinkerOrderIndex,
                                                  +						defaultSequenceFlow: node.defaultLine
                                                  +					});
                                                  +					break;
                                                  +				case BPMN_TYPE_PARALLEL_GATEWAY:
                                                  +					noProp(elementId);
                                                  +					return;
                                                  +					title = parallelGatewayText;//该变量定义来自designer.extend.userdefine.js
                                                  +					// width = getMaxWidth();
                                                  +					// height = $(window).height() - 10;
                                                  +					width = 700;
                                                  +					height = 500;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case BPMN_TYPE_COMPLEX_GATEWAY:
                                                  +					//$.simpleAlert('无属性','info',500);
                                                  +					//return;
                                                  +					title = complexGatewayText;//该变量定义来自designer.extend.userdefine.js
                                                  +					// width = getMaxWidth();
                                                  +					// height = $(window).height() - 10;
                                                  +					width = 700;
                                                  +					height = 500;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						array: outLinkerOrderIndex,
                                                  +						defaultSequenceFlow: node.defaultLine
                                                  +					});
                                                  +					break;
                                                  +				case BPMN_TYPE_EVENTBASED_GATEWAY:
                                                  +					noProp(elementId);
                                                  +					return;
                                                  +					title = eventBasedGatewayText;//该变量定义来自designer.extend.userdefine.js
                                                  +					// width = getMaxWidth();
                                                  +					// height = $(window).height() - 10;
                                                  +					width = 700;
                                                  +					height = 500;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case BPMN_TYPE_TASK:
                                                  +					title = taskText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case BPMN_TYPE_BUSINESSRULE_TASK:
                                                  +					title = businessRuleTaskText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						outLinkers: outLinkers,
                                                  +						inLinkers: inLinkers,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case BPMN_TYPE_SEND_TASK:
                                                  +					noProp(elementId);
                                                  +					return;
                                                  +					title = sendTaskText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case BPMN_TYPE_RECEIVE_TASK:
                                                  +					noProp(elementId);
                                                  +					return;
                                                  +					title = receiveTaskText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case BPMN_TYPE_SCRIPT_TASK:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = scriptTaskText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						outLinkers: outLinkers,
                                                  +						inLinkers: inLinkers,
                                                  +						no: node.orderIndex,
                                                  +						nodeList: nodeList
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case BPMN_TYPE_MANUAL_TASK:
                                                  +					title = manualTaskText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						outLinkers: outLinkers,
                                                  +						inLinkers: inLinkers,
                                                  +						no: node.orderIndex
                                                  +					});
                                                  +					break;
                                                  +				case BPMN_TYPE_USER_TASK:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = "[" + elementName + "]" + userTaskText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 50;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList,
                                                  +						no: node.orderIndex,
                                                  +						outLinkers: outLinkers,
                                                  +						inLinkers: inLinkers,
                                                  +						type: 'process'
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case BPMN_TYPE_SERVICE_TASK:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = serviceTaskText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList,
                                                  +						outLinkers: outLinkers,
                                                  +						inLinkers: inLinkers,
                                                  +						no: node.orderIndex
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case BPMN_TYPE_CALL_ACTIVITY_CALLING_PROCESS:
                                                  +					var nodeList = BPMNBiz.getTasksList();
                                                  +					title = callActivityCallingProcessText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 60;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList,
                                                  +						no: node.orderIndex
                                                  +					});
                                                  +					isNoBorder = true;
                                                  +					break;
                                                  +				case BPMN_TYPE_SUB_PROCESS:
                                                  +					title = subProcessText;//该变量定义来自designer.extend.userdefine.js
                                                  +					width = getMaxWidth();
                                                  +					height = $(window).height() - 10;
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties
                                                  +					});
                                                  +					break;
                                                  +				case BPMN_TYPE_SEQUENCE_FLOW:
                                                  +					title = 连线条件;
                                                  +					width = 850;
                                                  +					height = $(window).height() - 10;
                                                  +					var isUsertaskOrExclusiveGateway = false;
                                                  +					var targetId = node.to.id;
                                                  +					var sourceId = node.from.id;
                                                  +					//如果该连线是孤立的、连线的target是注释、Group、事务块、泳道(当前无法连接泳道),不提供属性窗口
                                                  +					if ((targetId == null && sourceId == null)) {
                                                  +						$.simpleAlert(无属性, 'info', 500);
                                                  +						return;
                                                  +					}
                                                  +					var targetElement = Model.getShapeById(targetId);
                                                  +					if (targetElement != null && (targetElement.name == 'textAnnotation' || targetElement.name == 'group' || targetElement.name == 'transaction')) {
                                                  +						$.simpleAlert(无属性, 'info', 500);
                                                  +						return;
                                                  +					}
                                                  +					var nodeList = new Array();
                                                  +					var sourceElement = Model.getShapeById(sourceId);
                                                  +					passedLinkerArray = [];
                                                  +					if (sourceElement != null && (sourceElement.name == 'exclusiveGateway' || sourceElement.name == 'inclusiveGateway' || sourceElement.name == 'userTask')) {
                                                  +						isUsertaskOrExclusiveGateway = true;
                                                  +						var userTaskListJson = BPMNBiz.getTasksList();
                                                  +						var validUsertaskIdArray = new Array();
                                                  +						if (sourceElement.bpmnName == 'userTask') {
                                                  +							validUsertaskIdArray.push(sourceElement.id);
                                                  +						}
                                                  +						BPMNBiz.pushValidUsertaskIdsArray(validUsertaskIdArray, sourceElement);
                                                  +						for (var i = 0; i < userTaskListJson.length; i++) {
                                                  +							var userTask = userTaskListJson[i];
                                                  +							if (validUsertaskIdArray.inArray(userTask.id)) {
                                                  +								nodeList.push(userTask);
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +					extendParamJson = JSON.stringify({
                                                  +						processDefId: processDefId,
                                                  +						processName: processDefTitle,
                                                  +						elementName: elementName,
                                                  +						sourceId: node.from,
                                                  +						targetId: node.to,
                                                  +						processProperties: processProperties,
                                                  +						elementProperties: elementProperties,
                                                  +						nodeList: nodeList,
                                                  +						isUsertaskOrExclusiveGateway: isUsertaskOrExclusiveGateway,
                                                  +						orderIndex: node.orderIndex
                                                  +					});
                                                  +					break;
                                                  +				default:
                                                  +					noProp(elementId);
                                                  +					return;
                                                  +			}
                                                  +		}
                                                  +		$("#dialog_properties .dlg-info").html("<span class='IDSpan'>ID:<input type='text' class='IDInput' onclick='$(this).select();' readonly='readonly' value='" + elementId + "' /></span>");
                                                  +		if ((width + 40) > $(window).width()) {
                                                  +			width = $(window).width() - 50;
                                                  +		}
                                                  +		if (height + 40 > $(window).height()) {
                                                  +			height = $(window).height() - 50;
                                                  +		}
                                                  +		css = {
                                                  +			height: (height - (window.screen.availHeight < 900 ? 90 : 150)) + "px"
                                                  +		};
                                                  +		$("#dialog_properties_area").css(css);
                                                  +		$("#dialog_properties").dialog({
                                                  +			width: width,
                                                  +			title: title + "属性",
                                                  +			onClose: function () {
                                                  +				$("#properties_frame").attr("src", "");
                                                  +			}
                                                  +		});
                                                  +		if (isNoBorder) {
                                                  +			$(".awsui-dialog .dlg-content").css({
                                                  +				"borderWidth": "0"
                                                  +			});
                                                  +		} else {
                                                  +			$(".awsui-dialog .dlg-content").css({
                                                  +				"borderWidth": "1px",
                                                  +				"borderColor": "#D9D9D9",
                                                  +				"borderStyle": "solid",
                                                  +				"marginTop": "20px"
                                                  +			});
                                                  +		}
                                                  +		html += '<html>';
                                                  +		html += '<head>';
                                                  +		html += '<title>loading...</title>';
                                                  +		html += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
                                                  +		html += '<body style="overflow:hidden;">';
                                                  +		html += '<div id="propertiesMaker" style="position:absolute;top:0px;left:0px;height:100%;width:100%;background-color: #fff;z-index:789;user-select: none;"><div style="position: absolute;top: 45%;left: 47%;"><img src=\'../commons/img/waiting.gif\' style="width:60px;"/></div></div>'
                                                  +		html += "<form action='" + url + "' method='post' target='_self' id='postData_form'>";
                                                  +		html += "<input id='appId' name='appId' type='hidden' value='" + jQuery("#appId").val() + "'/>";
                                                  +		html += "<input id='sid' name='sid' type='hidden' value='" + sessionId + "'/>";
                                                  +		html += "<input id='cmd' name='cmd' type='hidden' value='com.actionsoft.apps.coe.pal_m_process_designer_properties_page'/>";
                                                  +		html += "<input id='propertyType' name='propertyType' type='hidden' value='" + schemaName + "'/>";
                                                  +		html += "<input id='operateType' name='operateType' type='hidden' value='" + "edit" + "'/>";  //operateType为edit
                                                  +		html += "<input id='processDefId' name='processDefId' type='hidden' value='" + process.processDefId + "'/>";
                                                  +		html += "<input id='elementId' name='elementId' type='hidden' value='" + elementId + "'/>";
                                                  +		html += "<input id='extendParamJson' name='extendParamJson' type='hidden' value='" + escape(extendParamJson) + "'/>";
                                                  +		html += "<input id='schemeId' name='schemeId' type='hidden' value='" + schemeId + "'/>"; 
                                                  +		html += "</form>";
                                                  +		html += '</body>';
                                                  +		html += '</html>';
                                                  +		document.getElementById('properties_frame').contentWindow.document.write(html);
                                                  +		setTimeout(function () {
                                                  +			document.getElementById('properties_frame').contentWindow.document.getElementById('postData_form').submit();
                                                  +		}, 100);
                                                  +		
                                                  +	},
                                                  +	/* 属性相关 end */
                                                  +	storeProcessProperties: function(){
                                                  +		//封装流程组相关信息
                                                  +		Model.define.processName =$("#title_container span").text();
                                                  +	},
                                                  +	getALLTasksListAndActivity : function() {
                                                  +		var filterNode = [];
                                                  +		for (var shapeId in Model.define.elements) {
                                                  +			var node = Model.getShapeById(shapeId);
                                                  +			if(node.bpmnName){
                                                  +			if (node.name != "linker") {
                                                  +				if (node.bpmnName.indexOf("Task") > -1||node.bpmnName.indexOf("Activity")>-1) {
                                                  +					filterNode.push(node);
                                                  +				}
                                                  +			}
                                                  +			}
                                                  +		}
                                                  +		return filterNode;
                                                  +	},
                                                  +	getValidateInfoHTML : function(jsonList) {
                                                  +		var info = '';
                                                  +		for (var i = 0; i < jsonList.length; i++) {
                                                  +			var jsonObj = jsonList[i];
                                                  +			var uuid = jsonObj.id;
                                                  +			var name = jsonObj.name;
                                                  +			var serror = jsonObj.errorMes;
                                                  +			var errorSuggest;
                                                  +			var error;
                                                  +			if (serror.indexOf("&nbsp;&nbsp;") > -1) {
                                                  +				error = serror.split("&nbsp;&nbsp;")[0];
                                                  +				errorSuggest = serror.split("&nbsp;&nbsp;")[1];
                                                  +			}else{
                                                  +			    error = serror;
                                                  +			}
                                                  +			var errorCode = jsonObj.errorCode;
                                                  +			var img = "";
                                                  +			var icon = "";
                                                  +			if (name != "") {
                                                  +				//name = name + " : ";
                                                  +			}
                                                  +			if (errorCode.indexOf('ERROR') > -1) {
                                                  +				icon = "delete1_16.png";
                                                  +			} else if (errorCode.indexOf('WARNING') > -1) {
                                                  +				icon = "warning_16.gif";
                                                  +			} else if (errorCode.indexOf('INFO') > -1) {
                                                  +				icon = "info_16.gif";
                                                  +			}
                                                  +			if (icon != "") {
                                                  +				img = "<img src='../commons/img/" + icon + "'/>";
                                                  +			}
                                                  +
                                                  +			info += '<table width="100%" border="0" cellspacing="1" cellpadding="1" style="padding-top:2px;border-bottom:1px solid #ddd;">';
                                                  +
                                                  +			if (name != "") {
                                                  +				info += '<tr>';
                                                  +				info += '<td width="16">' + img + '</td>';
                                                  +				info += '<td align="left">' + name + '</td>';
                                                  +				info += '</tr>';
                                                  +
                                                  +				if (error != "") {
                                                  +					info += '<tr>';
                                                  +					info += '<td width="16">&nbsp;</td>';
                                                  +					info += '<td>' + error + '</td>';
                                                  +					info += '</tr>';
                                                  +				}
                                                  +			} else {
                                                  +				info += '<tr>';
                                                  +				info += '<td width="16">' + img + '</td>';
                                                  +				info += '<td>' + error + '</td>';
                                                  +				info += '</tr>';
                                                  +
                                                  +			}
                                                  +
                                                  +			if (errorSuggest&&errorSuggest!=" ") {
                                                  +				info += '<tr>';
                                                  +				info += '<td>&nbsp;</td>';
                                                  +				info += '<td>' + errorSuggest + '</td>';
                                                  +				info += '</tr>';
                                                  +			}
                                                  +			info += '</table>';
                                                  +
                                                  +			//向map中put当前uuid
                                                  +			if (uuid != "") {
                                                  +				setLastedUUidAndColor(uuid);
                                                  +			}
                                                  +		}
                                                  +		return info;
                                                  +	},
                                                  +	checkLockState: function () {
                                                  +		var params = {
                                                  +			sid: sessionId,
                                                  +			cmd: "com.actionsoft.apps.coe.pal_pl_repository_process_lock_state_check",
                                                  +			uuid: ruuid
                                                  +		};
                                                  +		Util.ajax({
                                                  +			url: "./jd",
                                                  +			data: params,
                                                  +			success: function (data) {
                                                  +				if (data.result == 'ok') {
                                                  +					var canSave = data.data.canSave;
                                                  +					var lockUser = data.data.lockUser;
                                                  +					if (!canSave) {
                                                  +						$.simpleAlert("该流程已被" + lockUser + "锁定");
                                                  +						BPMNBiz.refreshDesigner();//刷新
                                                  +						return false;
                                                  +					}
                                                  +				} else {
                                                  +					$.simpleAlert(data.msg, 'error', 1500, {callback:function() {
                                                  +							BPMNBiz.refreshDesigner();//刷新
                                                  +						}});
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	saveDesigner: function (callback, isMask, op, isOnlySave, link) {
                                                  +		var params = {
                                                  +			sid: sessionId,
                                                  +			cmd: "com.actionsoft.apps.coe.pal_pl_repository_process_lock_state_check",
                                                  +			uuid: ruuid
                                                  +		};
                                                  +		Util.ajax({
                                                  +			url: "./jd",
                                                  +			data: params,
                                                  +			success: function (data) {
                                                  +				if (data.result == 'ok') {
                                                  +					var canSave = data.data.canSave;
                                                  +					var lockUser = data.data.lockUser;
                                                  +					if (!canSave) {
                                                  +						$.simpleAlert("该流程已被" + lockUser + "锁定");
                                                  +						BPMNBiz.refreshDesigner();//刷新
                                                  +					} else {
                                                  +						saveFun();
                                                  +					}
                                                  +				} else {
                                                  +					$.simpleAlert(data.msg, 'error', 1500, {callback:function() {
                                                  +							BPMNBiz.refreshDesigner();//刷新
                                                  +						}});
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +
                                                  +		function saveFun() {
                                                  +			if (link == undefined) {
                                                  +				link = false;
                                                  +			}
                                                  +			// if(!myMessage){
                                                  +			// 	$.simpleAlert("文件没有修改,不需要保存", "warning", 1000);
                                                  +			// 	return;
                                                  +			// }
                                                  +			if (typeof (isMask) == 'undefined' || isMask != false) {
                                                  +				$.mask();
                                                  +				$.simpleAlert("正在保存", "loading");
                                                  +				// $("#simplealert>.msg").css("top", "15px");
                                                  +			}
                                                  +			//封装流程组相关信息
                                                  +			BPMNBiz.storeProcessProperties();
                                                  +			if (isAutoSave == "0") {
                                                  +				$("#saving_tip").text("文件已修改,未保存");
                                                  +			} else {
                                                  +				$("#saving_tip").text("正在保存...");
                                                  +			}
                                                  +			if(process.title) {
                                                  +				Model.define.processName = process.title;
                                                  +			} else {
                                                  +				Model.define.processName = frmFileName;
                                                  +			}
                                                  +			var data = {
                                                  +				sid: sid,
                                                  +				cmd: "com.actionsoft.apps.coe.pal_pl_repository_designer_save",
                                                  +				appId: appId,
                                                  +				ruuid: ruuid,
                                                  +				processDefId: process.processDefId,
                                                  +				op: op,
                                                  +				define: JSON.stringify(Model.define),
                                                  +				messages: JSON.stringify(myMessage)
                                                  +			};
                                                  +			Util.ajax({
                                                  +				url: "./jd",
                                                  +				data: data,
                                                  +				success: function (r) {
                                                  +					var data = r.data;
                                                  +					if (data.result == "notexists") {
                                                  +						$("#saving_tip").text("流程定义文件不存在或已经被删除");
                                                  +					} else if (data.result == "success") {
                                                  +						try {
                                                  +							window.opener.window.top.document.getElementById("iflowlist").contentWindow.refresh();
                                                  +						} catch (e) {
                                                  +							try {
                                                  +								window.opener.parent.window.top.document.getElementById("iflowlist").contentWindow.refresh();
                                                  +							} catch (e) {
                                                  +								try {
                                                  +									parent.window.top.document.getElementById("iflowlist").contentWindow.refresh();
                                                  +								} catch (e) {
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +						if (!link) {
                                                  +							$("#saving_tip").text("您的文件已经成功保存");
                                                  +							haveSaved = true;
                                                  +						}
                                                  +						try {
                                                  +							if (isOnlySave == undefined) {
                                                  +								closeErrorWin();
                                                  +							}
                                                  +						} catch (e) {
                                                  +						}
                                                  +						if (typeof (op) != 'undefined' && op.indexOf("new") == 0) {
                                                  +							var ver = op.split("|")[2];
                                                  +							if (ver == undefined) {
                                                  +								ver = 0;
                                                  +							}
                                                  +							processVersion = parseInt(ver) + 1;
                                                  +							operateType = "edit";
                                                  +						}
                                                  +						if (operateType == "new") {
                                                  +							operateType = "edit";
                                                  +						}
                                                  +						if (callback) {
                                                  +							callback(data.processDefId, sid, ruuid);
                                                  +						}
                                                  +						validateBPMN(false);
                                                  +						process.processDefId = data.processDefId;
                                                  +						processDefVersionId = data.processDefVersionId;
                                                  +						process.versionStatus = data.versionStatus;
                                                  +						//将服务器返回的完整流程属性赋值回去
                                                  +						Model.define.processProperties = data.processProperties;
                                                  +						$("#dialog_wf_version .dlg_info").html("<span style='font-family: Consolas;font-size:16px;'>Version ID:" + processDefVersionId + "</span>");
                                                  +					} else if (data.result == "failure") {
                                                  +						$.mask("close");
                                                  +						$.simpleAlert("close");
                                                  +						process.processDefId = data.processDefId;
                                                  +						processDefVersionId = data.processDefVersionId;
                                                  +						if (data.validate) {
                                                  +							//curentErrors="";
                                                  +							$("#saving_tip").text("您的文件校验失败,请查看右侧校验信息列表");
                                                  +							$.simpleAlert("您的文件校验失败,请查看右侧校验信息列表", "error", 2000);
                                                  +							// $("#simplealert>.msg").css("top", "15px");
                                                  +							//$("#validate_win").show();
                                                  +							//弹出验证的信息窗口
                                                  +							var info = '';
                                                  +							var jsonList = data.jsonList;
                                                  +							//设置为原来的颜色
                                                  +							setColorForOriginalColor();
                                                  +							//根据错误信息构造html片段
                                                  +							info = BPMNBiz.getValidateInfoHTML(jsonList);
                                                  +							showValidateDock(info, jsonList.length);
                                                  +							return false;
                                                  +						}
                                                  +						if (!data.validate) {
                                                  +							$("#saving_tip").text(data.errorInfo);
                                                  +						}
                                                  +					}
                                                  +					$("#saving_tip").text("您的文件已经成功保存");
                                                  +					$.mask("close");
                                                  +					$.simpleAlert("close");
                                                  +					if (typeof (op) != 'undefined' && op.indexOf("new") == 0) {
                                                  +					} else {
                                                  +						//创建新版本提示此信息
                                                  +						if (!link) {
                                                  +							$.simpleAlert("保存成功", "ok", 2500);
                                                  +							// $("#simplealert>.msg").css("top", "15px");
                                                  +						}
                                                  +					}
                                                  +					myMessage = undefined; //重置消息缓存
                                                  +					if (isOnlySave == undefined) {
                                                  +						closeErrorWin();
                                                  +					}
                                                  +					isSave = true;
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +	},
                                                  +	createNewVersion : function(processDefId, versionId, ver, beforeSaveCallback, afterSaveCallback) {
                                                  +		var operateType = "newversion|" + versionId + "|" + ver;
                                                  +		Util.get("./jd", {
                                                  +			sid : sessionId,
                                                  +			cmd : "CLIENT_M_PROCESS_DESIGNER_DEFINE_DATA_JSON",
                                                  +			appId:appId,
                                                  +			processDefId : processDefId,
                                                  +			operateType : operateType,
                                                  +			t : Math.random()
                                                  +		}, function(response) {
                                                  +			if (response.result == "error") {
                                                  +				$.simpleAlert(data.errorInfo, "error", "no");
                                                  +				// $("#simplealert>.msg").css("top","15px");
                                                  +			} else if (response != "") {
                                                  +				$.mask();
                                                  +				createNewVersionFlag = true;
                                                  +				Designer.open(response.data);
                                                  +				setTimeout(function() {
                                                  +					if (beforeSaveCallback) {
                                                  +						beforeSaveCallback();
                                                  +					}
                                                  +					if (versionId == "") {
                                                  +						operateType = "new";
                                                  +					}
                                                  +					saveDesigner(afterSaveCallback, false, operateType);
                                                  +				}, 2000);
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	validateBPMN : function(isSave, callback) {
                                                  +		$.mask();
                                                  +		$.simpleAlert("开始校验...", "loading", "no");
                                                  +		// $("#simplealert>.msg").css("top","15px");
                                                  +		var define = JSON.stringify(Model.define);
                                                  +		if (define == "") {
                                                  +			$.simpleAlert("获取设计器数据定义时出现异常!请关闭后打开重试", "error", "no");
                                                  +			// $("#simplealert>.msg").css("top","15px");
                                                  +			return;
                                                  +		}
                                                  +		var url = "./jd";
                                                  +		var params = {
                                                  +			sid : sessionId,
                                                  +			cmd : "com.actionsoft.apps.coe.pal_pl_repository_designer_bpmn_validate",
                                                  +			type : type,
                                                  +			chartId : chartId,
                                                  +			processDefId : ( typeof (op) == 'undefined') ? process.processDefId : "",
                                                  +			define : define
                                                  +		};
                                                  +		Util.ajax({
                                                  +			url : url,
                                                  +			data : params,
                                                  +			success : function(r) {
                                                  +				var data = r.data;
                                                  +				if (data.result == "failure") {
                                                  +					$.mask("close");
                                                  +					$.simpleAlert("close");
                                                  +					process.processDefId = data.processDefId;
                                                  +					processDefVersionId = data.processDefVersionId;
                                                  +					if (data.validate) {
                                                  +						curentErrors = "";
                                                  +						if (isSave) {
                                                  +							$.simpleAlert("您的文件校验失败,请查看右侧校验信息列表", "error", 2000);
                                                  +							// $("#simplealert>.msg").css("top","15px");
                                                  +						}
                                                  +						//弹出验证的信息窗口
                                                  +						var info = '';
                                                  +						var jsonList = data.jsonList;
                                                  +						//设置为原来的颜色
                                                  +						setColorForOriginalColor();
                                                  +						//根据错误信息构造html片段
                                                  +						info = BPMNBiz.getValidateInfoHTML(jsonList);
                                                  +						showValidateDock(info, jsonList.length);
                                                  +					}
                                                  +					if (!data.validate) {
                                                  +						$.simpleAlert(data.errorInfo, "error", 5000);
                                                  +						// $("#simplealert>.msg").css("top","15px");
                                                  +					}
                                                  +				} else if (data.result == "success") {
                                                  +					$.mask("close");
                                                  +					$.simpleAlert("close");
                                                  +					var time = 1500;
                                                  +//					$.simpleAlert("文件校验成功", "ok", 1500);
                                                  +//					$("#simplealert>.msg").css("top","15px");
                                                  +					closeErrorWin();
                                                  +					if (callback) {
                                                  +						callback();
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	lockOrUnlockProcess: function (optype, uuid) {//锁定  解锁流程
                                                  +		$.post("./jd", {
                                                  +			cmd: "com.actionsoft.apps.coe.pal_pl_repository_lock_or_unlock_process",
                                                  +			sid: sid,
                                                  +			uuid: uuid,
                                                  +			optype: optype
                                                  +		}, function t(msg) {
                                                  +			if (msg.result == 'ok') {
                                                  +				if (optype == 'unlockpro') {
                                                  +					$.simpleAlert("文件已解锁", 'ok', 500, {callback: BPMNBiz.refreshDesigner});
                                                  +				} else {
                                                  +					$.simpleAlert("文件已锁定", 'ok', 500, {callback: BPMNBiz.refreshDesigner});
                                                  +				}
                                                  +			} else {
                                                  +				BPMNBiz.refreshDesigner();
                                                  +			}
                                                  +		}, "json");
                                                  +	},
                                                  +	setLastedUUidAndColor : function(uuid) {
                                                  +		var color = getNodeStyle('line', uuid);
                                                  +		//调用设计器获取图形的颜色信息
                                                  +		hashMap.put(uuid, color);
                                                  +	},
                                                  +	showValidateDock : function(info, count) {
                                                  +		$("#validate_count").html("错误个数:<b>" + count + "</b>");
                                                  +		$("#validate_container").html(info);
                                                  +		Dock.showView('validate');
                                                  +	},
                                                  +	closeErrorWin : function() {
                                                  +		//setColorForOriginalColor();
                                                  +		//将颜色设置为原始色
                                                  +		$("#validate_count").html("");
                                                  +		$("#validate_container").html("");
                                                  +		Dock.showView('navigator');
                                                  +	},
                                                  +	setColorForOriginalColor : function() {
                                                  +		var keys = hashMap.keys();
                                                  +		for (var i = 0; i < keys.length; i++) {
                                                  +			var key = keys[i];
                                                  +			var color = hashMap.get(key);
                                                  +			setNodeStyle('line', color, key);
                                                  +		}
                                                  +	},
                                                  +	getNodeStyle : function(styleCategory, uuid) {
                                                  +		var color = "";
                                                  +		if ( typeof (uuid) == "undefined") {
                                                  +			uuid = "";
                                                  +		}
                                                  +		var shape = Model.getShapeById(uuid);
                                                  +		if (styleCategory == "fill") {
                                                  +			color = shape.fillStyle;
                                                  +		} else if (styleCategory == "line") {
                                                  +			color = shape.lineStyle;
                                                  +		}
                                                  +		return color;
                                                  +	},
                                                  +	setNodeStyle : function(styleCategory, value, uuid) {
                                                  +		if ( typeof (uuid) == "undefined") {
                                                  +			uuid = "";
                                                  +		}
                                                  +		if (styleCategory == "fill") {
                                                  +			var shape = Model.getShapeById(id);
                                                  +			var type = shape.fillStyle.type;
                                                  +			Designer.setFillStyleById(uuid, value);
                                                  +		} else if (styleCategory == "line") {
                                                  +			Designer.setLineStyleById(uuid, value);
                                                  +		}
                                                  +	},
                                                  +	selectElement : function(elementId) {
                                                  +		//设置为原来的颜色
                                                  +		setColorForOriginalColor();
                                                  +		var shape = Model.getShapeById(elementId);
                                                  +		Designer.op.shapeSelectable(shape);
                                                  +		setNodeStyle('line', {
                                                  +			'lineStyle' : 'Solid',
                                                  +			'lineWidth' : 2,
                                                  +			'lineColor' : '255,51,51',
                                                  +			'beginArrowStyle' : 'none',
                                                  +			'endArrowStyle' : 'solidArrow'
                                                  +		}, elementId);
                                                  +	},
                                                  +	setTitle : function(t) {
                                                  +		var title = $("#title_edit_field").val();
                                                  +		if ( typeof (t) == "undefined") {
                                                  +			if (title == "") {
                                                  +				$("#title_edit_field").focus();
                                                  +				return;
                                                  +			}
                                                  +		}
                                                  +		if (t) {
                                                  +			title = t;
                                                  +		}
                                                  +		if (!checkValue(title, "流程名称不能包含|'\"。、,+*/%^=\\!&:;~`#<>$等字符", false)) {
                                                  +			return;
                                                  +		}
                                                  +		if (title.length > 64) {
                                                  +			alert("流程名不能过长!");
                                                  +			return;
                                                  +		}
                                                  +		process.title = title;
                                                  +		Model.define.title = title;
                                                  +		$("#title_field").text(title);
                                                  +		if ( typeof (t) == "undefined") {
                                                  +			$("#dlg_titleedit").dialog("close");
                                                  +		}
                                                  +	},
                                                  +	setDesignerModifyStatus : function() {
                                                  +		//设为修改
                                                  +		$(".toolbar-tabs").show();
                                                  +		if (role == "viewer") {
                                                  +			$("#canvas").css({
                                                  +				height : $("#canvas").height() - 133
                                                  +			});
                                                  +		}
                                                  +		$(".header-bar").show();
                                                  +		$(".header-right").show();
                                                  +		$("#toolbar-slide").show();
                                                  +		$("#toolbar-showgrid").show();
                                                  +		$("#toolbar-func-collapse").show();
                                                  +		$("#title_field").css("cursor", "pointer").unbind("click").bind("click", function() {
                                                  +			showTitleEdit();
                                                  +		});
                                                  +		role = "owner";
                                                  +	},
                                                  +	getOutLinkerOrderIndex : function(targetNode) {
                                                  +		var array = [];
                                                  +		if (targetNode.name.indexOf("Gateway") > -1) {//当前节点为网关
                                                  +			var nodes = Model.define.elements;
                                                  +			for (var shapeId in nodes) {
                                                  +				var node = Model.getShapeById(shapeId);
                                                  +				if (node.name == "linker") {
                                                  +					if (targetNode.id == node.from.id) {//当前元素为gateway的出线
                                                  +						var uuid = node.id;
                                                  +						var title = node.text;
                                                  +						var orderIndex = node.orderIndex;
                                                  +						var AWSProperties = "";
                                                  +						var dataAttributes = node.dataAttributes;
                                                  +						for (var i = 0; i < dataAttributes.length; i++) {
                                                  +							var dataElement = dataAttributes[i];
                                                  +							if (dataElement.name == "AWSProperties") {
                                                  +								AWSProperties = dataElement.value;
                                                  +							}
                                                  +						}
                                                  +						var toShape = Model.getShapeById(node.to.id);
                                                  +						if (toShape) {
                                                  +							var toNodeModelID = toShape.id;
                                                  +							var toNodeModelTitle = toShape.text;
                                                  +							var item = {
                                                  +								AWSProperties : AWSProperties,
                                                  +								orderIndex : orderIndex,
                                                  +								title : title,
                                                  +								uuid : uuid,
                                                  +								toNodeModelID : toNodeModelID,
                                                  +								toNodeModelTitle : toNodeModelTitle
                                                  +							};
                                                  +							array.push(item);
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		return array;
                                                  +	},
                                                  +	//返回节点的出线
                                                  +	getNodeOutLinker: function (targetNode) {
                                                  +		var array = [];
                                                  +		var nodes = Model.define.elements;
                                                  +		for (var shapeId in nodes) {
                                                  +			var node = Model.getShapeById(shapeId);
                                                  +			if (node.name == "linker") {
                                                  +				if (targetNode.id == node.from.id) {//当前元素为gateway的出线
                                                  +					var toShape = Model.getShapeById(node.to.id);
                                                  +					array.push(node);
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		return array;
                                                  +	},
                                                  +	//返回节点的入线
                                                  +	getNodeInLinker: function (targetNode) {
                                                  +		var array = [];
                                                  +		var nodes = Model.define.elements;
                                                  +		for (var shapeId in nodes) {
                                                  +			var node = Model.getShapeById(shapeId);
                                                  +			if (node.name == "linker") {
                                                  +				if (targetNode.id == node.to.id) {//当前元素为gateway的出线
                                                  +					array.push(node);
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		return array;
                                                  +	},
                                                  +	saveProcessDocument : function(){
                                                  +		isSave=false;
                                                  +	    jQuery('#wf_doc_frame').contents().find('#process_doc_frame')[0].contentWindow.saveWfDocument();
                                                  +	    $('#dialog_wf_doc').dialog('close');
                                                  +	},
                                                  +	getInLinkerOrderIndex : function(targetNode) {
                                                  +		var array = [];
                                                  +		var nodes = Model.define.elements;
                                                  +		for (var shapeId in nodes) {
                                                  +			var node = Model.getShapeById(shapeId);
                                                  +			if (node.name == "linker") {
                                                  +				if (targetNode.id == node.to.id) {//当前元素为目标节点的入线
                                                  +					var id = node.id;
                                                  +					var title = node.text;
                                                  +					var orderIndex = node.orderIndex;
                                                  +					var AWSProperties = "";
                                                  +					var dataAttributes = node.dataAttributes;
                                                  +					for (var i = 0; i < dataAttributes.length; i++) {
                                                  +						var dataElement = dataAttributes[i];
                                                  +						if (dataElement.name == "AWSProperties") {
                                                  +							AWSProperties = dataElement.value;
                                                  +						}
                                                  +					}
                                                  +					var fromShape = Model.getShapeById(node.from.id);
                                                  +					var fromNodeModelID = fromShape.id;
                                                  +					var fromNodeModelTitle = fromShape.text;
                                                  +					var item = {
                                                  +						AWSProperties : AWSProperties,
                                                  +						orderIndex : orderIndex,
                                                  +						title : title,
                                                  +						id : id,
                                                  +						fromNodeModelID : fromNodeModelID,
                                                  +						fromNodeModelTitle : fromNodeModelTitle
                                                  +					};
                                                  +					array.push(item);
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		return array;
                                                  +	},
                                                  +	setDefaultLine : function(elementId, defaultSequenceFlow) {
                                                  +		var shape = Model.getShapeById(elementId);
                                                  +		shape.defultLine = defaultSequenceFlow;
                                                  +	},
                                                  +	setLinkerOrderIndex : function(id, orderIndex) {
                                                  +		var shape = Model.getShapeById(id);
                                                  +		shape.orderIndex = orderIndex;
                                                  +	},
                                                  +	saveAWSProperties : function() {
                                                  +		$("#properties_frame")[0].contentWindow.saveProperties();
                                                  +	},
                                                  +	refreshVersion : function(versionNo,versionStatus) {
                                                  +	    if(versionNo != 0){
                                                  +            jQuery('#toolbar_designer_version_no').html('V'+versionNo);
                                                  +        }
                                                  +        var versionText = '';
                                                  +        if(versionStatus == '-1'){
                                                  +            versionText = '停用';
                                                  +        }else if(versionStatus == '0'){
                                                  +            versionText = '设计';
                                                  +        }else if(versionStatus == '1'){
                                                  +            versionText = '运行';
                                                  +        }
                                                  +        jQuery('#toolbar_wfversion_info_status').html(versionText);
                                                  +        jQuery('#toolbar_wfversion_info_status').removeClass();
                                                  +        jQuery('#toolbar_wfversion_info_status').addClass("info version"+versionStatus);
                                                  +	},
                                                  +	downLoadBigImg : function() {
                                                  +		var params = {
                                                  +			sid : sessionId,
                                                  +			cmd : "CONSOLE_M_PROCESS_DESIGNER_PNG_URL_QUERY",
                                                  +			processDefId : process.processDefId,
                                                  +			versionId : ""
                                                  +		};
                                                  +		Util.ajax({
                                                  +			url : "./w",
                                                  +			data : params,
                                                  +			success : function(data) {
                                                  +				var iframe = $("#downloadImgIframe");
                                                  +				iframe.attr("src", "./" + data);
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	//定时刷新
                                                  +	intervalRefresh : function() {
                                                  +		//每隔5秒发送请求 检查当前用户是否发生变化
                                                  +		BPMNBiz.intervalInd = setInterval(function() {
                                                  +			var data = {
                                                  +				appId : jQuery("#appId").val(),
                                                  +				sid : sessionId,
                                                  +				cmd : "CONSOLE_M_PROCESS_DESIGNER_GET_CHECKOUT_INFO",
                                                  +				processDefId : process.processDefId
                                                  +			};
                                                  +			Util.ajax({
                                                  +				url : "./jd",
                                                  +				data : data,
                                                  +				dataType : "json",
                                                  +				success : function(r) {
                                                  +					var data = r.data;
                                                  +					//data=JSON.parse(data);
                                                  +					var checkoutJson = data.checkoutJSON;
                                                  +					var versionStatus = data.versionStatus;
                                                  +					var fileUser = checkoutJson.CheckOutUser;
                                                  +					var checkOutState = checkoutJson.CheckOutState;
                                                  +					//从文件中获取的用户名
                                                  +					//如果发生变动提示文件被xxx强行检出刷新页面进入只读
                                                  +					if (fileUser) {
                                                  +						if (fileUser != "" && checkoutuser != "") {
                                                  +							if (fileUser.indexOf("DOC") == -1) {
                                                  +								if (fileUser != checkoutuser) {
                                                  +									//alert("文件被"+fileUser+"强行检出");
                                                  +									BPMNBiz.refreshDesigner();
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +						if (fileUser == "" && checkOutState == "IDLE") {
                                                  +							BPMNBiz.refreshDesigner();
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			});
                                                  +		}, 5000);
                                                  +	},
                                                  +	//强行获取编辑权
                                                  +	getCheckoutRight : function() {
                                                  +		var data = {
                                                  +			sid : sessionId,
                                                  +			cmd : "CLIENT_M_PROCESS_DESIGNER_GET_CHECKOUT_RIGHT",
                                                  +			appId : appId,
                                                  +			processDefId : process.processDefId
                                                  +		};
                                                  +		Util.ajax({
                                                  +			url : "./w",
                                                  +			data : data,
                                                  +			success : function(data) {
                                                  +				if (data == "1") {
                                                  +					BPMNBiz.refreshDesigner();
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	refreshDesigner : function() {
                                                  +		//刷新当前页面
                                                  +		if (top.location != self.location) {
                                                  +			location.href = location.href;
                                                  +		} else {
                                                  +			window.location.reload();
                                                  +		}
                                                  +	},
                                                  +	checkstate:function(){
                                                  +		alert("刷新了");
                                                  +	},
                                                  +	setDesignerStatus:function(status){
                                                  +		if (status == "running") {
                                                  +			role = "running";
                                                  +		}
                                                  +	    Designer.status = status;
                                                  +	    if (status == "readonly") {
                                                  +	    	Designer.setReadonly(true);
                                                  +	    }
                                                  +        Designer.init();
                                                  +        UI.init();
                                                  +        Dock.init();
                                                  +        Navigator.init();
                                                  +	}
                                                  +};
                                                  +
                                                  +/**
                                                  + * 下载图片
                                                  + */
                                                  +function downLoadImg() {
                                                  +	BPMNBiz.downLoadBigImg();
                                                  +}
                                                  +
                                                  +/**
                                                  + * 显示属性对话框
                                                  + */
                                                  +function showPropertiesDialog(isProcess) {
                                                  +	BPMNBiz.showPropertiesDialog(isProcess);
                                                  +}
                                                  +
                                                  +function pushValidUsertaskIdsArray(validUsertaskIdArray, sourceElement) {
                                                  +	BPMNBiz.pushValidUsertaskIdsArray(validUsertaskIdArray, sourceElement);
                                                  +}
                                                  +
                                                  +//获取节点列表
                                                  +function getTasksList(filterNames) {
                                                  +	return BPMNBiz.getTasksList(filterNames);
                                                  +}
                                                  +
                                                  +//获取节点列表
                                                  +function getALLTasksList() {
                                                  +	return BPMNBiz.getALLTasksList();
                                                  +}
                                                  +
                                                  +//设计器保存
                                                  +function saveDesigner(callback, isMask, op, isOnlySave, link) {
                                                  +	BPMNBiz.saveDesigner(callback, isMask, op, isOnlySave, link);
                                                  +}
                                                  +
                                                  +//保存aws属性
                                                  +function saveAWSProperties() {
                                                  +	BPMNBiz.saveAWSProperties();
                                                  +}
                                                  +
                                                  +//设计器内部运行按钮
                                                  +function runProcess() {
                                                  +	BPMNBiz.runProcess();
                                                  +}
                                                  +
                                                  +//打开版本管理对话框
                                                  +function showWfVersionDialog() {
                                                  +	BPMNBiz.showWfVersionDialog();
                                                  +}
                                                  +
                                                  +//查看bpmn文件
                                                  +function showBPMNTextDialog() {
                                                  +	BPMNBiz.showBPMNTextDialog();
                                                  +}
                                                  +
                                                  +//编写流程文档
                                                  +function showWfDocDialog() {
                                                  +	BPMNBiz.showWfDocDialog();
                                                  +}
                                                  +
                                                  +//创建新版本
                                                  +function createNewVersion(processDefId, versionId, ver, beforeSaveCallback, afterSaveCallback) {
                                                  +	BPMNBiz.createNewVersion(processDefId, versionId, ver, beforeSaveCallback, afterSaveCallback);
                                                  +}
                                                  +
                                                  +//存放原始颜色
                                                  +function setLastedUUidAndColor(uuid) {
                                                  +	BPMNBiz.setLastedUUidAndColor(uuid);
                                                  +}
                                                  +
                                                  +/**校验bpmn*/
                                                  +function validateBPMN(isSave) {
                                                  +	BPMNBiz.validateBPMN(isSave);
                                                  +}
                                                  +
                                                  +//显示校验错误信息
                                                  +function showValidateDock(info, count) {
                                                  +	BPMNBiz.showValidateDock(info, count);
                                                  +}
                                                  +
                                                  +//关闭校验错误信息窗口
                                                  +function closeErrorWin() {
                                                  +	BPMNBiz.closeErrorWin();
                                                  +}
                                                  +
                                                  +//设置为原来的颜色
                                                  +function setColorForOriginalColor() {
                                                  +	BPMNBiz.setColorForOriginalColor();
                                                  +}
                                                  +
                                                  +function getNodeStyle(styleCategory, uuid) {
                                                  +	return BPMNBiz.getNodeStyle(styleCategory, uuid);
                                                  +}
                                                  +
                                                  +//锁定 解锁当前流程模型
                                                  +function lockOrUnlockProcess(optype, uuid) {
                                                  +	return BPMNBiz.lockOrUnlockProcess(optype, uuid);
                                                  +}
                                                  +
                                                  +/**
                                                  + * 修改图元样式
                                                  + *
                                                  + * @param {Object}
                                                  + *            styleCategory 样式类型 : fill linker line image font
                                                  + * @param {Object}
                                                  + *            value 值
                                                  + */
                                                  +function setNodeStyle(styleCategory, value, uuid) {
                                                  +	BPMNBiz.setNodeStyle(styleCategory, value, uuid);
                                                  +}
                                                  +
                                                  +//获取节元素并设置颜色
                                                  +function selectElement(elementId) {
                                                  +	BPMNBiz.selectElement(elementId);
                                                  +}
                                                  +
                                                  +//设置标题
                                                  +function setTitle(t) {
                                                  +	BPMNBiz.setTitle(t);
                                                  +}
                                                  +
                                                  +//修改设计器显示状态
                                                  +function setDesignerModifyStatus() {
                                                  +	BPMNBiz.setDesignerModifyStatus();
                                                  +}
                                                  +
                                                  +//获取网关出线orderindex结构
                                                  +function getOutLinkerOrderIndex(targetNode) {
                                                  +	return BPMNBiz.getOutLinkerOrderIndex(targetNode);
                                                  +}
                                                  +
                                                  +//设置网关默认连线
                                                  +function setDefaultLine(elementId, defaultSequenceFlow) {
                                                  +	BPMNBiz.setDefaultLine(elementId, defaultSequenceFlow);
                                                  +}
                                                  +
                                                  +//设置连线的orderIndex 改变一下z-index的值
                                                  +function setLinkerOrderIndex(id, orderIndex) {
                                                  +	BPMNBiz.setLinkerOrderIndex(id, orderIndex);
                                                  +}
                                                  +
                                                  +//取消AWS流程关联
                                                  +function cancelCorrelate(uuid) {
                                                  +	var options = {
                                                  +		title : "提示",
                                                  +		content : "确定取消与AWS流程的关联吗?",
                                                  +		model : false,
                                                  +		onConfirm : function(){
                                                  +			var params = {
                                                  +				cmd : "com.actionsoft.apps.coe.pal_pl_repository_cancelcorrelate",
                                                  +				sid : encodeURI(sid),
                                                  +				uuid : uuid
                                                  +			};
                                                  +			if ($("#saving_tip").text() != "已保存成功" && $("#saving_tip").text() != "保存成功" && $("#saving_tip").text() != "您的文件已经成功保存" && $("#saving_tip").text() != "") {
                                                  +				$.simpleAlert("页面中有未保存的内容,请先保存", "info", 2000);
                                                  +				return;
                                                  +			}
                                                  +			$.mask();
                                                  +			awsui.ajax.request({
                                                  +				type : "POST",
                                                  +				url : "./jd",
                                                  +				data : params,
                                                  +				ok : function(r) {
                                                  +					if(r.result=="ok") {
                                                  +						$.simpleAlert('取消成功', 'ok', 2000, {callback: function(){
                                                  +							$.simpleAlert('正在重新打开', 'loading', 'no', {model:true});
                                                  +							parent.document.getElementById("main").src = parent.document.getElementById("main").src;
                                                  +							parent.document.getElementById("main").url = parent.document.getElementById("main").src;
                                                  +							var href = "./w";
                                                  +							href += "?sid=" + encodeURI(sid);
                                                  +							href += "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer";
                                                  +							href += "&uuid=" + uuid;
                                                  +							href += "&openType=0&processDefId=" + '';
                                                  +							href += "&teamId=" + '',
                                                  +							href += "&perms=" + 'w,d,v',
                                                  +							href += "&filePerms=" + '-';
                                                  +							location.href = href;
                                                  +						}});
                                                  +					}
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +	};
                                                  +	window.top.$.confirm(options);
                                                  +}
                                                  +
                                                  +//标记bpmn图形
                                                  +function mark(uuid, op){
                                                  +	var options = {
                                                  +        title : "提示",
                                                  +        content:"确定在BPM运行吗?",
                                                  +        model:false,
                                                  +        onConfirm: function(){
                                                  +        	BPMNBiz.validateBPMN(false, function(){mark_op(uuid)});
                                                  +        }
                                                  +    };
                                                  +    window.top.$.confirm(options);
                                                  +}
                                                  +function mark_op(uuid) {
                                                  +	var params = {
                                                  +		cmd:"com.actionsoft.apps.coe.pal_pl_repository_mark",
                                                  +		sid:encodeURI(sid),
                                                  +		uuid:uuid
                                                  +	};
                                                  +	if ($("#saving_tip").text() != "已保存成功" && $("#saving_tip").text() != "保存成功" && $("#saving_tip").text() != "您的文件已经成功保存" && $("#saving_tip").text() != "") {
                                                  +		$.simpleAlert("页面中有未保存的内容,请先保存", "info", 2000);
                                                  +		return;
                                                  +	}
                                                  +	jQuery.ajax({
                                                  +		type : "POST",
                                                  +		url : "./jd",
                                                  +		data : params,
                                                  +		success : function(r) {
                                                  +			if(typeof(r.data.sid) == 'undefined'){//提交失败
                                                  +            		window.top.$.simpleAlert(r.msg, r.result, 2000);
                                                  +	        }else{
                                                  +	            window.top.$.simpleAlert(r.msg, r.result, 2000);
                                                  +				var href = window.location.href;
                                                  +				if(href.substring(href.length-2) == "/w") {
                                                  +					// 不是子页面
                                                  +					href = "./w";
                                                  +					href += "?sid=" + encodeURI(sid);
                                                  +					href += "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer";
                                                  +					href += "&uuid=" + uuid;
                                                  +					href += "&openType=0&processDefId=" + '';
                                                  +					href += "&teamId=" + '',
                                                  +					href += "&perms=" + 'w,d,v',
                                                  +					href += "&filePerms=" + '-';
                                                  +					location.href = href;
                                                  +				} else {
                                                  +					// 是子页面
                                                  +					window.location.href = href;
                                                  +				}
                                                  +				try{
                                                  +					window.opener.window.top.document.getElementById("iflowlist").contentWindow.refresh();
                                                  +				} catch(e) {
                                                  +					try{
                                                  +						window.opener.parent.window.top.document.getElementById("iflowlist").contentWindow.refresh();
                                                  +					} catch(e) {
                                                  +						try{
                                                  +							parent.window.top.document.getElementById("iflowlist").contentWindow.refresh();
                                                  +						} catch(e) {
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +	       	 }
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +//取消标记
                                                  +function rmark(uuid) {
                                                  +	var options = {
                                                  +        title : "提示",
                                                  +        content:"确定取消在BPM运行吗?",
                                                  +        model:false,
                                                  +        onConfirm: function(){
                                                  +			var params = {
                                                  +				cmd:"com.actionsoft.apps.coe.pal_pl_repository_rmark",
                                                  +				sid:encodeURI(sid),
                                                  +				uuid:uuid
                                                  +			};
                                                  +			if ($("#saving_tip").text() != "已保存成功" && $("#saving_tip").text() != "保存成功" && $("#saving_tip").text() != "您的文件已经成功保存" && $("#saving_tip").text() != "") {
                                                  +				$.simpleAlert("页面中有未保存的内容,请先保存", "info", 2000);
                                                  +				return;
                                                  +			}
                                                  +			$.mask();
                                                  +			jQuery.ajax({
                                                  +				type : "POST",
                                                  +				url : "./jd",
                                                  +				data : params,
                                                  +				success : function(r) {
                                                  +					if(r.result=="ok") {
                                                  +						$.simpleAlert('取消成功', 'ok', 2000, {callback: function(){
                                                  +							$.simpleAlert('正在重新打开', 'loading', 'no', {model:true});
                                                  +							var targetUuid = r.data.newUUId;
                                                  +							if (parent.repositoryTree ) {
                                                  +								var tree = parent.repositoryTree;
                                                  +								var targetNode = tree.getNodeById(uuid);
                                                  +								if (targetNode) {
                                                  +									var treeData = tree.config.data;
                                                  +									for (var treeIndex in treeData) {
                                                  +										var sourceData = treeData[treeIndex];
                                                  +										if (sourceData.id == uuid) {
                                                  +											sourceData.id = targetUuid;
                                                  +											if (sourceData.url) {
                                                  +												sourceData.url = sourceData['url'].replace(uuid, targetUuid);
                                                  +											}
                                                  +											break;
                                                  +										}
                                                  +									}
                                                  +									var treeNodes = tree.config.nodes;
                                                  +									var sourceObj = treeNodes[uuid];
                                                  +									var targetObj = sourceObj;
                                                  +									targetObj['id'] = targetUuid;
                                                  +									targetObj['url'] = targetObj['url'].replace(uuid, targetUuid);
                                                  +									treeNodes[targetUuid] = targetObj;
                                                  +									delete targetObj[uuid];
                                                  +									var targetDom = tree.getNodeDomById(uuid);
                                                  +									targetDom.attr("tbindex", targetUuid);
                                                  +									targetDom.find("span").each(function(){
                                                  +										var _thisId = $(this).attr("id");
                                                  +										if (_thisId) {
                                                  +											$(this).attr("id", _thisId.replace(uuid, targetUuid));
                                                  +										}
                                                  +									});
                                                  +									var sepDiv = targetDom.find("div.tree-items-sep");
                                                  +									sepDiv.attr("sep-index", targetUuid);
                                                  +									var targetLiDom = tree.getNodeLiDomById(uuid);
                                                  +									targetLiDom.attr("tbindex", targetUuid);
                                                  +									targetLiDom.attr("li_index", targetUuid);
                                                  +									var liDomId = targetLiDom.attr("id");
                                                  +									targetLiDom.attr("id", liDomId.replace(uuid, targetUuid));
                                                  +									tree.refreshNodeById(targetUuid);
                                                  +								}
                                                  +							}
                                                  +							// 刷新右侧列表数据
                                                  +								try {
                                                  +									var mainHref = parent.document.getElementById("main").src;
                                                  +									parent.document.getElementById("main").src = mainHref.replace(new RegExp(uuid, "gm"), targetUuid);
                                                  +									parent.document.getElementById("main").url = mainHref.replace(new RegExp(uuid, "gm"), targetUuid);
                                                  +								} catch (e) {
                                                  +								}
                                                  +							// 刷新tab
                                                  +							if(uuid != targetUuid) {
                                                  +								try {
                                                  +									parent.openDesginer(targetUuid, 0, r.data.name, "", "");
                                                  +									parent.closeTabById(uuid);
                                                  +								} catch (e) {
                                                  +								}
                                                  +							} else { // 已经推送但是aws平台没有接收的情况
                                                  +								var href = "./w";
                                                  +								href += "?sid=" + encodeURI(sid);
                                                  +								href += "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer";
                                                  +								href += "&uuid=" + uuid;
                                                  +								href += "&openType=0&processDefId=" + '';
                                                  +								href += "&teamId=" + '',
                                                  +								href += "&perms=" + 'w,d,v',
                                                  +								href += "&filePerms=" + '-';
                                                  +								location.href = href;
                                                  +							}
                                                  +							}});
                                                  +					} else {
                                                  +						$.simpleAlert(r.msg,'error');
                                                  +					}
                                                  +				}
                                                  +			});
                                                  +        }
                                                  +    };
                                                  +    window.top.$.confirm(options);
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/bpmn.designer.extend.core.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/bpmn.designer.extend.core.js
                                                  new file mode 100644
                                                  index 00000000..8a1af530
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/bpmn.designer.extend.core.js
                                                  @@ -0,0 +1,72 @@
                                                  +MessageSource.submit = function(opt) {
                                                  +	if (opt == "restoreVersion") {//如果当操作为恢复版本,则先执行保存操作 在执行输入新列表操作
                                                  +		saveDesigner(undefined, undefined, undefined, true);
                                                  +		//最后一个参数设置为true表示为单纯保存 不去关闭版本列表
                                                  +	}
                                                  +	if (MessageSource.batchSize == 0 && MessageSource.messages.length != 0) {
                                                  +		//更新Dock窗口
                                                  +		if (MessageSource.withDock) {
                                                  +			Dock.update(true);
                                                  +		}
                                                  +		if (MessageSource.withMessage == false) {
                                                  +			//如果不需要发送消息,比如在接收别人发来的消息时
                                                  +			MessageSource.messages = [];
                                                  +			return;
                                                  +		}
                                                  +		//当没有活动的批处理时,才提交
                                                  +		if (MessageSource.withUndo) {
                                                  +			//将事件压入撤销堆栈
                                                  +			MessageSource.undoStack.push(MessageSource.messages);
                                                  +		}
                                                  +		if (chartId != "" && isNeedPutMessage) {
                                                  +			var messagesStr = JSON.stringify(MessageSource.messages);
                                                  +			putMessage(MessageSource.messages);
                                                  +			var a = {
                                                  +				action: "command",
                                                  +				messages: messagesStr,
                                                  +				ignore: "messages",
                                                  +				name: userName
                                                  +			};
                                                  +			CLB.cmdList = [{"type":"message","cmd":"com.actionsoft.apps.coe.pal_pl_repository_designer_add_realtimeevents"}];
                                                  +			CLB.send(a);
                                                  +		}
                                                  +		
                                                  +		$("#saving_tip").css("color","red").text("文件被修改请手动保存");
                                                  +
                                                  +		for (var indexMessage = 0; indexMessage < MessageSource.messages.length; indexMessage++) {
                                                  +            var mess = MessageSource.messages[indexMessage];
                                                  +            if (mess.action == 'create' || mess.action == 'remove') {
                                                  +                //处理形状拖动后属性初始化
                                                  +                var content = mess.content;
                                                  +                handleShapeAttrInitInLane(mess.action, content);
                                                  +            } else if (mess.action == 'update') {
                                                  +                var content = mess.content;// object
                                                  +                var updates = content.updates;// array
                                                  +                //处理形状拖动后属性初始化
                                                  +                //是否开启了isLaneForceRefreshShapeAttr这个参数
                                                  +                var isForce = false;
                                                  +                isShowError = false;
                                                  +                if (!isLaneForceRefreshShapeAttr) {
                                                  +                    var shapes = content.shapes;
                                                  +                    var shapeOld = shapes[0];
                                                  +                    var updateNew = updates[0];
                                                  +                    if (shapeOld.props.x == updateNew.props.x && shapeOld.props.y == updateNew.props.y) {
                                                  +                        isForce = true;
                                                  +                    }
                                                  +                } else {
                                                  +                    var shapes = content.shapes;
                                                  +                    var shapeOld = shapes[0];
                                                  +                    var updateNew = updates[0];
                                                  +                    if (shapeOld.props.x == updateNew.props.x && shapeOld.props.y == updateNew.props.y) {
                                                  +                        isShowError = true;
                                                  +                    }
                                                  +                }
                                                  +                handleShapeAttrInitInLane(mess.action, content, isForce);
                                                  +            }
                                                  +        }
                                                  +
                                                  +		isSave = false;
                                                  +		isNeedPutMessage = true;
                                                  +		MessageSource.messages = [];
                                                  +	}
                                                  +};
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/bpmn.designer.extend.events.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/bpmn.designer.extend.events.js
                                                  new file mode 100644
                                                  index 00000000..1804a45e
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/bpmn.designer.extend.events.js
                                                  @@ -0,0 +1,365 @@
                                                  +/** 该js中存放重写designer.events.js的相关方�?/
                                                  +
                                                  +// 存放多泳池时泳池�?key uuid value map(存放task�? activity�?信息)
                                                  +var  processMap=new HashMap();
                                                  +//存放包括 task 类和 activity类的orderindex 
                                                  +var orderIndexs = new HashMap();
                                                  +//存放网关连线的orderindex
                                                  +var linkerOrderindexs=new HashMap();
                                                  +
                                                  +
                                                  +/**
                                                  + * 连接线创建后
                                                  + */
                                                  +Designer.events.addEventListener("linkerCreated", function(linker){
                                                  +});
                                                  +
                                                  +/**
                                                  + * 图形创建�?
                                                  + */
                                                  +Designer.events.addEventListener("created", function(shape){
                                                  +	if(Designer.status == "demo" && !demoCreatedTiped){
                                                  +		UI.showStartStep("created", $("#" + shape.id));
                                                  +		demoCreatedTiped = true;
                                                  +	}
                                                  +	//定义元素颜色
                                                  +	if(shape){
                                                  +		ExtCorolUtil.setShapeLineStyle(shape);
                                                  +		ExtCorolUtil.setShapeFillStyle(shape);
                                                  +	}
                                                  +	
                                                  +	OrderIndexOpt.putOrderIndexToMap(shape); //给task�?�?activity类的元素设置orderindex
                                                  +});
                                                  +
                                                  +/**
                                                  + * 删除前事�?
                                                  + */
                                                  +Designer.events.addEventListener("beforeRemove", function(shapes){
                                                  +	var temp = {};
                                                  +	for(var i = 0; i < shapes.length; i++){
                                                  +		var shape = shapes[i];
                                                  +		temp[shape.id] = shape;
                                                  +	}
                                                  +	var addIds = []; //添加的图形id,比如删除分隔符,可能会删除分隔符标题栏
                                                  +	for(var i = 0; i < shapes.length; i++){
                                                  +		var shape = shapes[i];
                                                  +		
                                                  +//		$.ajax({
                                                  +//			url : encodeURI("./w?sid=" + sessionId + "&cmd=CONSOLE_M_PROCESS_CHECK_ELEMENT_INSTANCE&appId=&elementId=" + shape.id),
                                                  +//			data : {
                                                  +//				chartId : chartId
                                                  +//			},
                                                  +//			dataType : "text",
                                                  +//			success : function(data) {
                                                  +//			}
                                                  +//		}); 
                                                  +
                                                  +		if(shape.name == "verticalSeparatorBar" && !temp[shape.parent] && addIds.indexOf(shape.id) < 0){
                                                  +			delete temp[shape.id];
                                                  +		}else if(shape.name == "horizontalSeparatorBar" && !temp[shape.parent] && addIds.indexOf(shape.id) < 0){
                                                  +			delete temp[shape.id];
                                                  +		}else if(shape.name == "horizontalSeparator"){
                                                  +			//删除水平分隔符,查找删除后,是否还存在分隔符,否则把标题栏删�?
                                                  +			var parent = Model.getShapeById(shape.parent);
                                                  +			var bar = null;
                                                  +			var leftCount = 0; //剩下的分隔符数量
                                                  +			for (var j = 0; j < parent.children.length; j++) {
                                                  +				var childId = parent.children[j];
                                                  +				var child = Model.getShapeById(childId);
                                                  +				if(child.name == "horizontalSeparator" && !temp[childId]){
                                                  +					leftCount += 1;
                                                  +				}else if(child.name == "verticalSeparatorBar"){
                                                  +					bar = child;
                                                  +				}
                                                  +			}
                                                  +			if(leftCount == 0 && bar != null){
                                                  +				//删除后没有剩余的分隔符,并且没有添加过标题栏,则添加进去,一起删�?
                                                  +				temp[bar.id] = bar;
                                                  +				if(addIds.indexOf(bar.id) < 0){
                                                  +					addIds.push(bar.id);
                                                  +				}
                                                  +			}
                                                  +		}else if(shape.name == "verticalSeparator"){
                                                  +			//删除水平分隔符,查找删除后,是否还存在分隔符,否则把标题栏删�?
                                                  +			var parent = Model.getShapeById(shape.parent);
                                                  +			var bar = null;
                                                  +			var leftCount = 0; //剩下的分隔符数量
                                                  +			for (var j = 0; j < parent.children.length; j++) {
                                                  +				var childId = parent.children[j];
                                                  +				var child = Model.getShapeById(childId);
                                                  +				if(child.name == "verticalSeparator" && !temp[childId]){
                                                  +					leftCount += 1;
                                                  +				}else if(child.name == "horizontalSeparatorBar"){
                                                  +					bar = child;
                                                  +				}
                                                  +			}
                                                  +			if(leftCount == 0 && bar != null){
                                                  +				//删除后没有剩余的分隔符,并且没有添加过标题栏,则添加进去,一起删�?
                                                  +				temp[bar.id] = bar;
                                                  +				if(addIds.indexOf(bar.id) < 0){
                                                  +					addIds.push(bar.id);
                                                  +				}
                                                  +			}
                                                  +		}else if(shape.name == "classAttribute" || shape.name == "classOperation"
                                                  +			|| shape.name == "interfaceOperation" || shape.name == "packageAttribute"
                                                  +			|| shape.name == "fragmentTitle"){
                                                  +			//删除子图形,同时删除父图�?
                                                  +			if(!temp[shape.parent]){
                                                  +				var parent = Model.getShapeById(shape.parent);
                                                  +				for(var ci = 0; ci < parent.children.length; ci++){
                                                  +					var id = parent.children[ci];
                                                  +					if(!temp[id]){
                                                  +						temp[id] = Model.getShapeById(id);
                                                  +					}
                                                  +				}
                                                  +				temp[shape.parent] = Model.getShapeById(shape.parent);
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	shapes = [];
                                                  +	for(var id in temp){
                                                  +		shapes.push(temp[id]);
                                                  +	}
                                                  +	return shapes;
                                                  +});
                                                  +
                                                  +
                                                  +/**
                                                  + * 删除后事�?
                                                  + */
                                                  +Designer.events.addEventListener("removed", function(event){
                                                  +	var shapes = event.shapes;
                                                  +	var range = event.range;
                                                  +	var changedIds = event.changedIds;
                                                  +	var changed = [];
                                                  +	var relatedParent = [];
                                                  +	for (var i = 0; i < shapes.length; i++) {
                                                  +		var shape = shapes[i];
                                                  +		if(shape.name == "verticalLane" && range.indexOf(shape.parent) < 0 && relatedParent.indexOf(shape.parent) < 0){
                                                  +			//删除泳道,�?且不删除�?��的泳�?
                                                  +			relatedParent.push(shape.parent);
                                                  +		}else if(shape.name == "horizontalLane" && range.indexOf(shape.parent) < 0 && relatedParent.indexOf(shape.parent) < 0){
                                                  +			relatedParent.push(shape.parent);
                                                  +		}else if(shape.name == "verticalSeparatorBar" && range.indexOf(shape.parent) < 0){
                                                  +			var parent = Model.getShapeById(shape.parent);
                                                  +			parent.props.w -= shape.props.w;
                                                  +			parent.props.x += shape.props.w;
                                                  +			Designer.painter.renderShape(parent);
                                                  +			if(changedIds.indexOf(shape.parent) < 0){
                                                  +				changedIds.push(shape.parent);
                                                  +				changed.push(parent);
                                                  +			}
                                                  +		}else if(shape.name == "horizontalSeparatorBar" && range.indexOf(shape.parent) < 0){
                                                  +			var parent = Model.getShapeById(shape.parent);
                                                  +			parent.props.y += shape.props.h;
                                                  +			parent.props.h -= shape.props.h;
                                                  +			Designer.painter.renderShape(parent);
                                                  +			if(changedIds.indexOf(shape.parent) < 0){
                                                  +				changedIds.push(shape.parent);
                                                  +				changed.push(parent);
                                                  +			}
                                                  +		}else if(shape.name == "horizontalSeparator" && range.indexOf(shape.parent) < 0 && relatedParent.indexOf(shape.parent) < 0){
                                                  +			relatedParent.push(shape.parent);
                                                  +		}else if(shape.name == "verticalSeparator" && range.indexOf(shape.parent) < 0 && relatedParent.indexOf(shape.parent) < 0){
                                                  +			relatedParent.push(shape.parent);
                                                  +		}
                                                  +	}
                                                  +	for (var index = 0; index < relatedParent.length; index++) {
                                                  +		var parentId = relatedParent[index];
                                                  +		var parent = Model.getShapeById(parentId);
                                                  +		if(parent.name == "verticalPool"){
                                                  +			//计算泳道宽度
                                                  +			var w = 0;
                                                  +			var laneCount = 0;
                                                  +			for (var i = 0; i < parent.children.length; i++) {
                                                  +				var childId = parent.children[i];
                                                  +				var child = Model.getShapeById(childId);
                                                  +				if(child.name == "verticalLane"){
                                                  +					laneCount++;
                                                  +					w += child.props.w;
                                                  +				}else if(child.name == "verticalSeparatorBar"){
                                                  +					w += child.props.w;
                                                  +				}
                                                  +			}
                                                  +			if(laneCount > 0){
                                                  +				parent.props.w = w;
                                                  +				Designer.painter.renderShape(parent);
                                                  +				if(changedIds.indexOf(parentId) < 0){
                                                  +					changedIds.push(parentId);
                                                  +					changed.push(parent);
                                                  +				}
                                                  +				var childrenChanged = Utils.rangeChildren(parent);
                                                  +				changed = changed.concat(childrenChanged);
                                                  +			}
                                                  +		}else if(parent.name == "horizontalPool"){
                                                  +			//计算泳道高度
                                                  +			var h = 0;
                                                  +			var laneCount = 0;
                                                  +			for (var i = 0; i < parent.children.length; i++) {
                                                  +				var childId = parent.children[i];
                                                  +				var child = Model.getShapeById(childId);
                                                  +				if(child.name == "horizontalLane"){
                                                  +					laneCount++;
                                                  +					h += child.props.h;
                                                  +				}else if(child.name == "horizontalSeparatorBar"){
                                                  +					h += child.props.h;
                                                  +				}
                                                  +			}
                                                  +			if(laneCount > 0){
                                                  +				parent.props.h = h;
                                                  +				Designer.painter.renderShape(parent);
                                                  +				if(changedIds.indexOf(parentId) < 0){
                                                  +					changedIds.push(parentId);
                                                  +					changed.push(parent);
                                                  +				}
                                                  +				var childrenChanged = Utils.rangeChildren(parent);
                                                  +				changed = changed.concat(childrenChanged);
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	//AWS增加的内�?
                                                  +	OrderIndexOpt.removeOrderIndexToMap(shapes); // 移除元素之后更新task 和activity节点的orderindex
                                                  +	OutLinkerOrderIndexOpt.removeLinderOrderIndexToMap(shapes); //移除元素之后更新 线的orderindex
                                                  +	return changed;
                                                  +});
                                                  +
                                                  +var OrderIndexOpt = {
                                                  +	init:function(){
                                                  +		var tasks=BPMNBiz.getALLTasksListAndActivity();
                                                  +		for(var i=0;i<tasks.length;i++){
                                                  +			tasks[i].orderIndex=i+1;
                                                  +			orderIndexs.put(tasks[i].id, tasks[i]);
                                                  +		}
                                                  +	},
                                                  +	putOrderIndexToMap : function(node) {
                                                  +		if (node.name != "linker") {
                                                  +			if (node.name.indexOf("Task") > -1 || node.name.indexOf("Activity") > -1) {
                                                  +				orderIndexs.put(node.id, node);
                                                  +				node.orderIndex=OrderIndexOpt.getOrderIndexsMapSize(); //添加后给shape的orderindex赋�?
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	removeOrderIndexToMap : function(nodes) {
                                                  +		for(var i=0;i<nodes.length;i++){
                                                  +			var node=nodes[i];
                                                  +			if (node.name != "linker") {
                                                  +				if (node.name.indexOf("Task") > -1 || node.name.indexOf("Activity") > -1) {
                                                  +					orderIndexs.remove(node.id);
                                                  +					OrderIndexOpt.modifyRemoveAfterOrderIndex();
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	getOrderIndexsMap:function(){
                                                  +		return orderIndexs;
                                                  +	},
                                                  +	getOrderIndexsMapSize:function(){
                                                  +		return orderIndexs.size();
                                                  +	},
                                                  +	modifyRemoveAfterOrderIndex:function(){
                                                  +		var array=orderIndexs.values();
                                                  +		for(var i=0;i<array.length; i++){
                                                  +			var node=array[i];
                                                  +			node.orderIndex=i+1;
                                                  +		}
                                                  +	},
                                                  +	putOrderIndexMapToProcessMap:function(processUUid){
                                                  +		//此处多泳池时�?��调整
                                                  +		processMap.put(uuid,orderIndexs);
                                                  +	}
                                                  +}; 
                                                  +
                                                  +var OutLinkerOrderIndexOpt={
                                                  +	init:function(){
                                                  +		//初始化目前画布上存在的连�?
                                                  +		if(operateType=="new"){
                                                  +		  //alert(1);
                                                  +			var linkerArray=OutLinkerOrderIndexOpt.getCavasAllLinkers();
                                                  +				for(var i=0;i<linkerArray.length;i++){
                                                  +				linkerArray[i].orderIndex=i+1;
                                                  +				linkerOrderindexs.put(linkerArray[i].id, linkerArray[i]);
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	getCavasAllLinkers:function(){
                                                  +		//返回�?��线的数组
                                                  +		var linkers=[];
                                                  +		for (var shapeId in Model.define.elements) {
                                                  +			var node = Model.getShapeById(shapeId);
                                                  +			if (node.name== "linker") {
                                                  +				linkers.push(node);
                                                  +			}
                                                  +		}
                                                  +		return linkers;
                                                  +	},
                                                  +	putLinderOrderIndexToMap : function(node) {
                                                  +		linkerOrderindexs.put(node.id, node);
                                                  +		node.orderIndex=OutLinkerOrderIndexOpt.getLinkerOrderIndexsMapSize(); //添加后给Linder的orderindex赋�?
                                                  +	},
                                                  +	removeLinderOrderIndexToMap : function(nodes) {
                                                  +		for(var i=0;i<nodes.length;i++){
                                                  +			var node=nodes[i];
                                                  +			if (node.name == "linker") {
                                                  +					linkerOrderindexs.remove(node.id);
                                                  +					OutLinkerOrderIndexOpt.modifyLinkerRemoveAfterOrderIndex();
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	getLinkerOrderIndexsMap:function(){
                                                  +		return linkerOrderindexs;
                                                  +	},
                                                  +	getLinkerOrderIndexsMapSize:function(){
                                                  +		return linkerOrderindexs.size();
                                                  +	},
                                                  +	modifyLinkerRemoveAfterOrderIndex:function(){
                                                  +		var array=linkerOrderindexs.values();
                                                  +		for(var i=0;i<array.length; i++){
                                                  +			var node=array[i];
                                                  +			node.orderIndex=i+1;
                                                  +		}
                                                  +	}
                                                  +};
                                                  +
                                                  +
                                                  +/**
                                                  + * 分组图形改变后事�?
                                                  + */
                                                  +Designer.events.addEventListener("shapeChanged", function(event){
                                                  +	var shape = event.shape;
                                                  +	var changeName = event.name;
                                                  +	var changed = [];
                                                  +	if((shape.name == "choreographyTask" || shape.name == "subChoreography")
                                                  +		&& (changeName == "callChoreographyGlobal" || changeName == "callChoreography")){
                                                  +		for (var i = 0; i < shape.children.length; i++) {
                                                  +			var childId = shape.children[i];
                                                  +			var child = Model.getShapeById(childId);
                                                  +			
                                                  +			if(child.name == "participantA"){
                                                  +				Model.changeShape(child, "callParticipantA");
                                                  +			}else{
                                                  +				Model.changeShape(child, "callParticipantB");
                                                  +			}
                                                  +			changed.push(child);
                                                  +		}
                                                  +	}else if((shape.name == "callChoreographyGlobal" || shape.name == "callChoreography")
                                                  +		&& (changeName == "choreographyTask" || changeName == "subChoreography")){
                                                  +		for (var i = 0; i < shape.children.length; i++) {
                                                  +			var childId = shape.children[i];
                                                  +			var child = Model.getShapeById(childId);
                                                  +			if(child.name == "callParticipantA"){
                                                  +				Model.changeShape(child, "participantA");
                                                  +			}else{
                                                  +				Model.changeShape(child, "participantB");
                                                  +			}
                                                  +			changed.push(child);
                                                  +		}
                                                  +	}
                                                  +	//AWS增加的内�?
                                                  +	//定义元素颜色
                                                  +	if(shape){
                                                  +		ExtCorolUtil.setShapeLineStyle(shape,changeName);
                                                  +		ExtCorolUtil.setShapeFillStyle(shape,changeName);
                                                  +	}
                                                  +	return changed;
                                                  +});
                                                  +
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/bpmn.designer.ui.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/bpmn.designer.ui.js
                                                  new file mode 100644
                                                  index 00000000..95c5c4c0
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/bpmn.designer.ui.js
                                                  @@ -0,0 +1,211 @@
                                                  +/** 该js中存放与设计器相关的方法*/
                                                  +
                                                  +var designerLayoutHeight;
                                                  +var windowHeight;
                                                  +
                                                  +$(function(){
                                                  +	var params = {
                                                  +		sid: sessionId,
                                                  +		cmd: "com.actionsoft.apps.coe.pal_pl_repository_process_lock_state_check",
                                                  +		uuid: ruuid
                                                  +	};
                                                  +	//保存
                                                  +	$("#bar_save").bind("click", function() {
                                                  +		var op = "edit|"+processDefVersionId ;
                                                  +		saveDesigner(null, true, op, true);
                                                  +	});
                                                  +	//在BPM运行
                                                  +	$("#bar_mark").bind("click", function(){
                                                  +		var op = "edit|"+processDefVersionId ;
                                                  +		Util.ajax({
                                                  +			url: "./jd",
                                                  +			data: params,
                                                  +			success: function (data) {
                                                  +				if (data.result == 'ok') {
                                                  +					var canSave = data.data.canSave;
                                                  +					var lockUser = data.data.lockUser;
                                                  +					if (!canSave) {
                                                  +						BPMNBiz.refreshDesigner();//刷新
                                                  +					} else {
                                                  +						mark(ruuid, op);
                                                  +					}
                                                  +				} else {
                                                  +					$.simpleAlert(data.msg, 'error', 1500, {callback:function() {
                                                  +							BPMNBiz.refreshDesigner();//刷新
                                                  +						}});
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	});
                                                  +	//取消在BPM运行
                                                  +	$("#bar_rmark").bind("click", function(){
                                                  +		Util.ajax({
                                                  +			url: "./jd",
                                                  +			data: params,
                                                  +			success: function (data) {
                                                  +				var canSave = data.data.canSave;
                                                  +				var lockUser = data.data.lockUser;
                                                  +				if (!canSave) {
                                                  +					BPMNBiz.refreshDesigner();//刷新
                                                  +				} else {
                                                  +					rmark(ruuid);
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	});
                                                  +	
                                                  +	//取消BPM流程关联
                                                  +	$('#bar_cancel_aws_correlate').bind('click', function() {
                                                  +		Util.ajax({
                                                  +			url: "./jd",
                                                  +			data: params,
                                                  +			success: function (data) {
                                                  +				var canSave = data.data.canSave;
                                                  +				var lockUser = data.data.lockUser;
                                                  +				if (!canSave) {
                                                  +					BPMNBiz.refreshDesigner();//刷新
                                                  +				} else {
                                                  +					cancelCorrelate(ruuid);
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	})
                                                  +	
                                                  +	//验证
                                                  +	$("#bar_check_aws").bind("click", function(){
                                                  +		Util.ajax({
                                                  +			url: "./jd",
                                                  +			data: params,
                                                  +			success: function (data) {
                                                  +				var canSave = data.data.canSave;
                                                  +				var lockUser = data.data.lockUser;
                                                  +				if (!canSave) {
                                                  +					BPMNBiz.refreshDesigner();//刷新
                                                  +				} else {
                                                  +					validateBPMN(false);
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	});
                                                  +	
                                                  +	$("#dock_btn_validate").bind("click", function(){
                                                  +		Util.ajax({
                                                  +			url: "./jd",
                                                  +			data: params,
                                                  +			success: function (data) {
                                                  +				var canSave = data.data.canSave;
                                                  +				var lockUser = data.data.lockUser;
                                                  +				if (!canSave) {
                                                  +					BPMNBiz.refreshDesigner();//刷新
                                                  +				} else {
                                                  +					validateBPMN(false);
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	});
                                                  +	//锁定 解锁流程
                                                  +	// $(".lockorunlock").off('click').on('click', function () {
                                                  +	// 	if ($(this).hasClass("disabled")) {
                                                  +	// 		return false;
                                                  +	// 	}
                                                  +	// 	if ($("#saving_tip")[0].innerText == "文件已修改,未保存") {
                                                  +	// 		$.simpleAlert("请先保存文件", 'info');
                                                  +	// 		return false;
                                                  +	// 	}
                                                  +	// 	var type = $(this).attr("name");
                                                  +	// 	lockOrUnlockProcess(type, ruuid);
                                                  +	// });
                                                  +
                                                  +	if(process.processDefId){//流程id存在
                                                  +		//设置获取编辑权是否可见
                                                  +		BpmnUI.isShowCheckoutTip();
                                                  +//		//启动注册定时器 5秒钟轮询一次
                                                  +//		BPMNBiz.intervalRefresh();
                                                  +		//初始化节点的orderindex
                                                  +		OrderIndexOpt.init();
                                                  +		//初始化线的orderindex
                                                  +		OutLinkerOrderIndexOpt.init();
                                                  +	}
                                                  +	
                                                  +
                                                  +});
                                                  +
                                                  +var BpmnUI={
                                                  +	setNavigationVisible:function(isShow) {
                                                  +		if (isShow) {
                                                  +			$("#shape_panel").removeClass("readonly");
                                                  +			$("#designer_viewport").removeClass("readonly");
                                                  +			$("#dock").removeClass("readonly");
                                                  +		} else {
                                                  +			$("#shape_panel").addClass("readonly");
                                                  +			$("#designer_viewport").addClass("readonly");
                                                  +			$("#dock").addClass("readonly");
                                                  +			//隐藏ui
                                                  +			BpmnUI.hideUI();
                                                  +		}
                                                  +		//$(window).unbind("resize.designer");
                                                  +	},
                                                  +	initNavigationEye:function(){
                                                  +		var layoutW = $("#designer_layout").width();
                                                  +		var desiger = $("#designer").width();
                                                  +		var designerHeight = $("#designer").height();
                                                  +		var viewHeight = $("#navigation_view").height();
                                                  +		//总宽度减去可视区域的宽度,得到滚动条宽度
                                                  +		var navleft =0;//layoutW-desiger;
                                                  +		var navtop=designerHeight-viewHeight;
                                                  +		var dockLeft = navleft-164;
                                                  +		var dockTop = navtop-2;
                                                  +		$("#navigation_view").css("left", dockLeft);
                                                  +		$("#navigation_view").css("top", dockTop);
                                                  +		$("#navigation_view").css("width", 162);
                                                  +		$("#navigation_view").css("height", 250);
                                                  +		
                                                  +		Dock.showView("navigator");
                                                  +	},
                                                  +	getIsDesignerSave:function(){
                                                  +		return isSave;
                                                  +	},
                                                  +	isShowCheckoutTip:function(){
                                                  +		if(checkoutuser!=""){
                                                  +			if(user!=checkoutuser || !editable){
                                                  +				$("#checkoutTip").show();
                                                  +				BpmnUI.setNavigationVisible(false);
                                                  +			}else{
                                                  +				$("#checkoutTip").hide();
                                                  +				BpmnUI.setNavigationVisible(true);
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	changeTitle:function(title){
                                                  +		var params = {
                                                  +			sid : sessionId,
                                                  +			cmd : "BPMN_DESIGNER_Change_Title",
                                                  +			processDefId : process.processDefId,
                                                  +			title : title
                                                  +		};
                                                  +		Util.ajax({
                                                  +			url : "./w",
                                                  +			data : params,
                                                  +			success : function(data) {
                                                  +				 //alert(data);
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	hideUI:function(){//隐藏UI
                                                  +		$(".diagram_title").addClass("readonly");//只读title
                                                  +		//$(".row.row2.menubar").hide();//隐藏菜单栏
                                                  +		//$(".toolbar").hide();//隐藏工具栏
                                                  +		$("#dock .owner").hide();//隐藏右边侧边栏
                                                  +		$("#designer_footer").hide();//隐藏脚部
                                                  +		var h = $(window).outerHeight() - $("#designer_header").outerHeight();
                                                  +		$("#designer_layout").outerHeight(h);
                                                  +	},
                                                  +	lockOrLuckFun: function (type) {
                                                  +		if ($("#saving_tip")[0].innerText == "文件已修改,未保存") {
                                                  +			$.simpleAlert("请先保存文件", 'info');
                                                  +			return false;
                                                  +		}
                                                  +		lockOrUnlockProcess(type, ruuid);
                                                  +	}
                                                  +};
                                                  +
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/coe.designer.extend.events.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/coe.designer.extend.events.js
                                                  new file mode 100644
                                                  index 00000000..a78697c0
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/coe.designer.extend.events.js
                                                  @@ -0,0 +1,17 @@
                                                  +/**
                                                  + * 选择改变事件重写
                                                  + */
                                                  +Designer.events.addEventListener("selectChanged", function(a) {
                                                  +	UI.update();
                                                  +	Dock.update();
                                                  +	if(Utils.getSelected().length==0)
                                                  +	{
                                                  +		$("#attr_no_more_attribute_id").show();
                                                  +		$("#dock_content_attribute").hide();
                                                  +		$("#dock_view_header_title").html("文件属性");
                                                  +	}else{
                                                  +		$("#dock_content_attribute").show();
                                                  +		$("#attr_no_more_attribute_id").hide();
                                                  +		$("#dock_view_header_title").html("数据属性");
                                                  +	}
                                                  +});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.biz.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.biz.js
                                                  new file mode 100644
                                                  index 00000000..b49b3db2
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.biz.js
                                                  @@ -0,0 +1,151 @@
                                                  +$(function(){
                                                  +	var openType = $("#openType").val();
                                                  +	if(openType ==1){//默认打开版本管理
                                                  +		//coeBiz.openDesignerVersionManager();
                                                  +		coeBiz.refreshParent();//刷新父页面
                                                  +	}
                                                  +	if(process.processDefId != "" && process.processDefId != "undefined"){
                                                  +		var versionStatus = jQuery('#toolbar_wfversion_info_status').text();
                                                  +		var versionText = '';
                                                  +        if(versionStatus == '-1'){
                                                  +            versionText = '停用';
                                                  +        }else if(versionStatus == '0'){
                                                  +            versionText = '设计';
                                                  +        }else if(versionStatus == '1'){
                                                  +            versionText = '运行';
                                                  +        }
                                                  +        jQuery('#toolbar_wfversion_info_status').html(versionText);
                                                  +        jQuery('#toolbar_wfversion_info_status').removeClass();
                                                  +        jQuery('#toolbar_wfversion_info_status').addClass("info version"+versionStatus);
                                                  +        jQuery('#toolbar_wfversion_info_status').attr("awsui-qtip", versionText);
                                                  +        if (versionText != '') {
                                                  +        	jQuery('#toolbar_wfversion_info_status').show();
                                                  +        } else {
                                                  +        	jQuery('#toolbar_wfversion_info_status').hide();
                                                  +        }
                                                  +		
                                                  +	}
                                                  +});
                                                  +
                                                  +var coeBiz ={
                                                  +	restoreVersion : function(ver){
                                                  +		var params = {
                                                  +			sid : $("#sid").val(),
                                                  +			chartId: chartId,
                                                  +			type: type,
                                                  +			appId: appId,
                                                  +			processDefId:process.processDefId,
                                                  +			ver : ver,
                                                  +			cmd:"com.actionsoft.apps.coe.pal_pl_repository_designer_history_restore_version"
                                                  +		};
                                                  +		var msgCoe ="正在恢复历史版本...";
                                                  +		var msgBpmn ="正在使用该历史版本创建新版本...";
                                                  +		var msgCoeS ="文件恢复成功";
                                                  +		var msgBpmnS ="新版本创建成功";
                                                  +		var msgCoeF ="文件恢复失败";
                                                  +		var msgBpmnF ="新版本创建失败";
                                                  +		var msgTip="",msgS,msgF;
                                                  +		$.mask();
                                                  +		if(process.processDefId == ""){
                                                  +			msgTip = msgCoe;
                                                  +			msgS = msgCoeS;
                                                  +			msgF = msgCoeF;
                                                  +		}else{
                                                  +			msgTip = msgBpmn;
                                                  +			msgS = msgBpmnS;
                                                  +			msgF = msgBpmnF;
                                                  +		}
                                                  +		$.simpleAlert(msgTip, "loading", "no");
                                                  +		$("#saving_tip").text(msgTip);
                                                  +		Util.ajax({
                                                  +			type: "POST",
                                                  +			url: "./w",
                                                  +			data: params,
                                                  +			success: function(msg){
                                                  +				$.mask("close");
                                                  +				$.simpleAlert("close");
                                                  +				if(msg.result = "ok"){
                                                  +					Dock.currentDefinition =Model.historyDefine;
                                                  +					$("#saving_tip").text(msgS);
                                                  +					myMessage=undefined; //重置消息缓存
                                                  +					$.simpleAlert(msgS, "ok", 2500);
                                                  +				}else{
                                                  +					$("#saving_tip").text(msgF);
                                                  +					$.simpleAlert(msgF, "error", 2000);
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	openDesignerVersionManager: function(){//打开版本管理界面
                                                  +		if(process.processDefId){
                                                  +			var url = "./w?sid=" + sessionId + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager&plId="+ruuid+"&chartId="+chartId+"&appId="+appId+"&processDefId="+process.processDefId;
                                                  +			$("#wf_version_frame").attr("src", url);
                                                  +			$("#dialog_wf_version").dialog({
                                                  +			    title:'流程版本管理',
                                                  +				onClose : function() {
                                                  +					$("#wf_version_frame").attr("src", "");
                                                  +				}
                                                  +			});
                                                  +			return ;
                                                  +		}
                                                  +		
                                                  +		$("#designer-version-manager").dialog({
                                                  +			title:'版本管理'
                                                  +		});
                                                  +		$('#designerManager').attr('src',"./w?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager&plId="+ruuid+"&chartId="+chartId+"&appId="+appId+"&processDefId="+process.processDefId);
                                                  +	}
                                                  +	,refresh:function(srcUuid, targetUuid){
                                                  +		var href = location.href;
                                                  +		if (href.indexOf(srcUuid) > -1) {
                                                  +			href = href.replace(srcUuid,targetUuid);
                                                  +			href = href.replace("openType=0","openType=1");
                                                  +			coeBiz.refreshChartId(targetUuid);
                                                  +			location.href=href;
                                                  +		} else {
                                                  +			if (window.opener && window.opener.openDesginer) {
                                                  +				window.opener.openDesginer({id: targetUuid, processDefId:process.processDefId});
                                                  +				window.close();
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	refreshParent:function(){
                                                  +		if (parent.window.top.document.getElementById("iflowlist")) {
                                                  +			parent.window.top.document.getElementById("iflowlist").contentWindow.refresh();
                                                  +		}
                                                  +	},
                                                  +	refreshChartId:function(targetUuid){
                                                  +		chartId =targetUuid;
                                                  +	}
                                                  +	
                                                  +};
                                                  +
                                                  +
                                                  +function openDesignerVersionManager(){
                                                  +	coeBiz.openDesignerVersionManager();
                                                  +	// 下方判断锁机制有问题,注释掉
                                                  +	/*
                                                  +	var params = {
                                                  +		sid: sessionId,
                                                  +		cmd: "com.actionsoft.apps.coe.pal_pl_repository_process_lock_state_check",
                                                  +		uuid: ruuid
                                                  +	};
                                                  +	Util.ajax({
                                                  +		url: "./jd",
                                                  +		data: params,
                                                  +		success: function (data) {
                                                  +			debugger;
                                                  +			var canSave = data.data.canSave;
                                                  +			var lockUser = data.data.lockUser;
                                                  +			if (!canSave) {
                                                  +				BPMNBiz.refreshDesigner();//刷新
                                                  +			} else {
                                                  +				coeBiz.openDesignerVersionManager();
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +	*/
                                                  +}
                                                  +
                                                  +function refresh(srcUuid, targetUuid){
                                                  +	coeBiz.refresh(srcUuid, targetUuid);
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.biz.version.manager.bpmn.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.biz.version.manager.bpmn.js
                                                  new file mode 100644
                                                  index 00000000..767318ba
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.biz.version.manager.bpmn.js
                                                  @@ -0,0 +1,624 @@
                                                  +var p;
                                                  +var versionGrid;
                                                  +$(document).ready(function() {
                                                  +	createGrid();
                                                  +});
                                                  +
                                                  +function createGrid() {
                                                  +	var obj = {
                                                  +		width : parent.$("#dialog_wf_version").width() - 2,
                                                  +		topVisible : false,
                                                  +		flexHeight : true, //与height互斥 默认false
                                                  +		bottomVisible : false,
                                                  +		scrollModel : {
                                                  +			horizontal : false
                                                  +		},
                                                  +		selectionModel : {
                                                  +			type : "row",
                                                  +			mode : "single"
                                                  +		}
                                                  +	};
                                                  +
                                                  +	obj.colModel = [{
                                                  +		title : "版本",
                                                  +		width : 50,
                                                  +		dataType : "string",
                                                  +		dataIndx : "version",
                                                  +		align : "left"
                                                  +	}, {
                                                  +		title : "流程名称",
                                                  +		width : 220,
                                                  +		dataType : "string",
                                                  +		dataIndx : "processName",
                                                  +		align : "left"
                                                  +	}, {
                                                  +		title : "发布时间",
                                                  +		width : 150,
                                                  +		dataType : "string",
                                                  +		hidden : false,
                                                  +		dataIndx : "releaseTime",
                                                  +		align : "center"
                                                  +	}, {
                                                  +		title : "状态(BPMS)",
                                                  +		width : 75,
                                                  +		dataType : "string",
                                                  +		hidden : false,
                                                  +		dataIndx : "newVersionStatus",
                                                  +		align : "center"
                                                  +	}, {
                                                  +		title : "状态(PAL)",
                                                  +		width : 75,
                                                  +		dataType : "string",
                                                  +		hidden : false,
                                                  +		dataIndx : "palVersionStatus",
                                                  +		align : "center"
                                                  +	}, {
                                                  +		title : "UUID",
                                                  +		width : 271,
                                                  +		dataType : "string",
                                                  +		hidden : false,
                                                  +		dataIndx : "ID",
                                                  +		align : "center",
                                                  +		render : function(ui) {
                                                  +			var rowData = ui.rowData, dataIndx = ui.dataIndx, cellData = rowData[dataIndx];
                                                  +			return "<span style='font-family: \"Courier New\";'>"+cellData+"</span>";
                                                  +		}
                                                  +	}, {
                                                  +		title : "isFirst",
                                                  +		width : 0,
                                                  +		dataType : "string",
                                                  +		hidden : true,
                                                  +		dataIndx : "isFirst"
                                                  +	}];
                                                  +	// 创建时间
                                                  +	obj.colModel.splice(2, 1, {
                                                  +		title : "创建时间",
                                                  +		width : 150,
                                                  +		hidden : false,
                                                  +		dataIndx : "correlateBpm",
                                                  +		align : "center",
                                                  +		render: function(ui) {
                                                  +			var record = ui.rowData;
                                                  +			var status = palStatus[relations[record.ID]];
                                                  +			if (status != undefined) {
                                                  +				return status.createDate != undefined ? status.createDate : "";
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +	if (isPalManage) {
                                                  +		// BPMS状态
                                                  +		obj.colModel.splice(3, 1, {
                                                  +			title : "在BPM运行",
                                                  +			width : 80,
                                                  +			hidden : false,
                                                  +			dataIndx : "correlateBpm",
                                                  +			align : "center",
                                                  +			render: function(ui) {
                                                  +				var record = ui.rowData;
                                                  +				var status = palStatus[relations[record.ID]];
                                                  +				if (status != undefined) {
                                                  +					return status.isCorrelate ? '是' : '否';
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +		// ID
                                                  +		obj.colModel.splice(5, 1, {
                                                  +			title : "UUID",
                                                  +			width : 271,
                                                  +			dataType : "string",
                                                  +			hidden : false,
                                                  +			dataIndx : "ID",
                                                  +			align : "center",
                                                  +			render : function(ui) {
                                                  +				var rowData = ui.rowData, dataIndx = ui.dataIndx, cellData = rowData[dataIndx];
                                                  +				var status = palStatus[relations[rowData.ID]];
                                                  +				if (status != undefined && status.isCorrelate) {
                                                  +					return "<span style='font-family: \"Courier New\";'>"+cellData+"</span>";
                                                  +				} else {
                                                  +					return "";
                                                  +				}
                                                  +				
                                                  +			}
                                                  +		});
                                                  +	}
                                                  +
                                                  +	obj.dataModel = {
                                                  +		location : "remote",
                                                  +		sorting : "remote",
                                                  +		paging : "remote",
                                                  +		dataType : "JSON",
                                                  +		method : "POST",
                                                  +		curPage : 1, //当前页
                                                  +		rPP : 10, //页数
                                                  +		sortDir : "up", //排序规则
                                                  +		getUrl : function() {
                                                  +			return {
                                                  +				url : "./jd",
                                                  +				data : 'appId=' + appId + '&sid=' + sessionId + "&cmd=CLIENT_M_PROCESS_VERSION_MANAGER_DATA_JSON&processDefId=" + processDefId
                                                  +			};
                                                  +		},
                                                  +		getData : function(r) {
                                                  +			var totalRecords = r.data.totalRecords;
                                                  +			var data = r.data.data;
                                                  +			var tempData = [];
                                                  +			var index = 0;
                                                  +			for(x in data) {
                                                  +				var versionId = data[x].ID;
                                                  +				var palVersionStatus = '';
                                                  +				var status = palStatus[relations[versionId]];
                                                  +				if (status != undefined) {
                                                  +					if (status.isApproval) {
                                                  +						palVersionStatus = '<span style="color:red">审批中</span>';
                                                  +					} else if (status.isPublish) {
                                                  +						palVersionStatus = '<span style="color:green">已发布</span>';
                                                  +					} else if (status.isStop) {
                                                  +						palVersionStatus = '<span style="color:red">已停用</span>';
                                                  +					} else if (status.isUse) {
                                                  +						palVersionStatus = '<span style="color:blue">设计中</span>';
                                                  +					} else {
                                                  +						palVersionStatus = '<span style="color:blue">设计</span>';
                                                  +					}
                                                  +				}
                                                  +				data[x].palVersionStatus = palVersionStatus;
                                                  +				// 修改onclick函数
                                                  +				var name = data[x].processName;
                                                  +				var fromIndex = name.indexOf('onclick');
                                                  +				var endIndex = name.indexOf(';',fromIndex);
                                                  +				if(isCorrelate == "false" ? false : true) { // 关联
                                                  +					if(relations[versionId] != undefined) {
                                                  +						var str = "onclick=\"openDesginer('" + relations[versionId] + "','" + versionId + "')";
                                                  +						data[x].processName = name.replace(name.substring(fromIndex, endIndex), str);
                                                  +						tempData.push(data[x]);
                                                  +						index++;
                                                  +					}
                                                  +				} else { // 推送
                                                  +					var str = "onclick=\"openDesginer('" + relations.plId + "','" + versionId + "')";
                                                  +					data[x].processName = name.replace(name.substring(fromIndex, endIndex), str);
                                                  +					tempData.push(data[x]);
                                                  +					index++;
                                                  +				}
                                                  +			}
                                                  +			data = tempData;
                                                  +			totalRecords = index;
                                                  +			return {
                                                  +				curPage : r.data.curPage,
                                                  +				totalRecords : totalRecords,
                                                  +				data : data
                                                  +			};
                                                  +		}
                                                  +	};
                                                  +	versionGrid = $("#grid").awsGrid(obj);
                                                  +	versionGrid.on("awsgridrowselect", function(evt, ui) {
                                                  +		var rowIndx = ui.rowIndx, data = ui.dataModel.data;
                                                  +		data[rowIndx][1] = true;
                                                  +		versionGrid.awsGrid("refreshCell", {
                                                  +			rowIndx : rowIndx,
                                                  +			dataIndx : 1
                                                  +		});
                                                  +	});
                                                  +	versionGrid.on("awsgridrowunselect", function(evt, ui) {
                                                  +		var rowIndx = ui.rowIndx, data = ui.dataModel.data;
                                                  +		data[rowIndx][1] = false;
                                                  +		versionGrid.awsGrid("refreshCell", {
                                                  +			rowIndx : rowIndx,
                                                  +			dataIndx : 1
                                                  +		});
                                                  +
                                                  +	});
                                                  +	versionGrid.on("awsgridcellclick", function(evt, ui) {
                                                  +		var rowIndx = ui.rowIndx, colIndx = ui.colIndx, column = ui.column, dataModel = ui.dataModel, data = dataModel.data;
                                                  +		var check = ui.$td.find("input[type=checkbox]");
                                                  +		if (column && column.dataIndx == 1) {
                                                  +			if (data[rowIndx]["selectedRow"]) {
                                                  +				versionGrid.awsGrid("selection", {
                                                  +					type : 'row',
                                                  +					method : 'remove',
                                                  +					rowIndx : rowIndx
                                                  +				});
                                                  +			} else {
                                                  +				versionGrid.awsGrid("selection", {
                                                  +					type : 'row',
                                                  +					method : 'add',
                                                  +					rowIndx : rowIndx
                                                  +				});
                                                  +			}
                                                  +			evt.stopPropagation();
                                                  +			return false;
                                                  +		}
                                                  +	});
                                                  +
                                                  +	$(".ui-grid-toolbar span").each(function() {
                                                  +		if ($(this).html() != "") {
                                                  +			$(this).css("marginTop", 5);
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +// 切换版本
                                                  +function openDesginer(targetUuid, targetDefId, param) {
                                                  +	if(parent.process.processDefId == targetDefId && param != 'create') {
                                                  +		$.simpleAlert('当前版本不需要切换', 'info', 2000);
                                                  +		return;
                                                  +	}
                                                  +	$.simpleAlert('正在切换', 'loading', 'no');
                                                  +	awsui.ajax.request({
                                                  +		method:"POST",
                                                  +		url:"./jd",
                                                  +		data:{
                                                  +			sid : encodeURI(parent.jQuery('#sid').val()),
                                                  +			cmd : "com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager_bpmn_use",
                                                  +			targetUuid : targetUuid,
                                                  +			targetDefId : targetDefId
                                                  +		},
                                                  +		ok: function(r) {
                                                  +			try{
                                                  +				if(r.data.status == 1){
                                                  +					$.simpleAlert('正在切换', 'loading', 'no');
                                                  +					var uuid = parent.ruuid;
                                                  +					if(r.data.type == 'correlation') {
                                                  +						if (parent.parent.repositoryTree ) {
                                                  +							var tree = parent.parent.repositoryTree;
                                                  +							var targetNode = tree.getNodeById(uuid);
                                                  +							if (targetNode) {
                                                  +								var treeData = tree.config.data;
                                                  +								for (var treeIndex in treeData) {
                                                  +									var sourceData = treeData[treeIndex];
                                                  +									if (sourceData.id == uuid) {
                                                  +										sourceData.id = targetUuid;
                                                  +										if (sourceData.url) {
                                                  +											sourceData.url = sourceData['url'].replace(uuid, targetUuid);
                                                  +										}
                                                  +										break;
                                                  +									}
                                                  +								}
                                                  +								var treeNodes = tree.config.nodes;
                                                  +								var sourceObj = treeNodes[uuid];
                                                  +								var targetObj = sourceObj;
                                                  +								targetObj['id'] = targetUuid;
                                                  +								targetObj['url'] = targetObj['url'].replace(uuid, targetUuid);
                                                  +								treeNodes[targetUuid] = targetObj;
                                                  +								delete targetObj[uuid];
                                                  +								var targetDom = tree.getNodeDomById(uuid);
                                                  +								targetDom.attr("tbindex", targetUuid);
                                                  +								targetDom.find("span").each(function(){
                                                  +									var _thisId = $(this).attr("id");
                                                  +									if (_thisId) {
                                                  +										$(this).attr("id", _thisId.replace(uuid, targetUuid));
                                                  +									}
                                                  +								});
                                                  +								var sepDiv = targetDom.find("div.tree-items-sep");
                                                  +								sepDiv.attr("sep-index", targetUuid);
                                                  +								var targetLiDom = tree.getNodeLiDomById(uuid);
                                                  +								targetLiDom.attr("tbindex", targetUuid);
                                                  +								targetLiDom.attr("li_index", targetUuid);
                                                  +								var liDomId = targetLiDom.attr("id");
                                                  +								targetLiDom.attr("id", liDomId.replace(uuid, targetUuid));
                                                  +								tree.refreshNodeById(targetUuid);
                                                  +							}
                                                  +						}
                                                  +						if(parent.parent.document.getElementById("main") != null) {
                                                  +							// 刷新右侧列表数据
                                                  +							var mainHref = parent.parent.document.getElementById("main").src;
                                                  +							parent.parent.document.getElementById("main").src = mainHref.replace(new RegExp(uuid,"gm"), targetUuid);
                                                  +							parent.parent.document.getElementById("main").url = mainHref.replace(new RegExp(uuid,"gm"), targetUuid);
                                                  +							// 刷新tab
                                                  +							parent.parent.openDesginer(targetUuid, 0, r.data.name, r.data.appId, targetDefId);
                                                  +							parent.parent.closeTabById(uuid);							
                                                  +						} else {
                                                  +							var obj = {};
                                                  +							obj.id = targetUuid;
                                                  +							obj.processDefId = targetDefId;
                                                  +							parent.opener.openDesginer(obj);
                                                  +							parent.close();
                                                  +						}
                                                  +					}
                                                  +					if(r.data.type == 'relation') { // 推送流程切换版本
                                                  +						if(parent.parent.document.getElementById("main") != null) {
                                                  +							parent.parent.document.getElementById("main").src = parent.parent.document.getElementById("main").src;
                                                  +							parent.parent.document.getElementById("main").url = parent.parent.document.getElementById("main").src;
                                                  +							var href = "./w";
                                                  +							href += "?sid=" + parent.jQuery('#sid').val();
                                                  +							href += "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer";
                                                  +							href += "&uuid=" + uuid;
                                                  +							href += "&openType=0&processDefId=" + targetDefId;
                                                  +							parent.window.location.href = href;
                                                  +						} else {
                                                  +							var href = "./w";
                                                  +							href += "?sid=" + parent.jQuery('#sid').val();
                                                  +							href += "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer";
                                                  +							href += "&uuid=" + uuid;
                                                  +							href += "&openType=0&processDefId=" + targetDefId;
                                                  +							parent.window.location.href = href;
                                                  +							/*var obj = {};
                                                  +							obj.id = uuid;
                                                  +							obj.processDefId = targetDefId;
                                                  +							parent.opener.openDesginer(obj);*/
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}catch(e){
                                                  +				$.simpleAlert("提交失败,请检查网络","error",2000);
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +//新建操作
                                                  +function add() {
                                                  +	var rows = versionGrid.awsGrid("getRows");
                                                  +	if (rows.length == 0) {
                                                  +		$.simpleAlert("请选择相应的流程创建新版本", "info", 2000);
                                                  +		return false;
                                                  +	}
                                                  +	var rs = versionGrid.awsGrid("getData");
                                                  +	var tmp = rs[0].versionNo;
                                                  +	//截取最大版本号
                                                  +	var versionNo = tmp;
                                                  +	var versionId = parent.processDefVersionId;
                                                  +	if (versionId == "") {
                                                  +		versionId = rows[0].ID;
                                                  +	}
                                                  +	if (getSelected()) {
                                                  +		$.confirm({
                                                  +			title : "提示",
                                                  +			content : "确定将选中的版本流程为模板创建新版本流程并切换?",
                                                  +			width : 300,
                                                  +			onConfirm : function() {
                                                  +				$.mask();
                                                  +				$.simpleAlert("正在创建版本...", "loading", "no");
                                                  +				var defId = getSelected();
                                                  +				parent.BPMNBiz.createNewVersion(defId, versionId, versionNo, null, function(newDefId, sid, id) {
                                                  +						awsui.ajax.request({
                                                  +							type: "POST",
                                                  +							url: "./jd?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_pl_id&t=" + new Date().getTime(),
                                                  +							data: {newDefId : newDefId},
                                                  +							async: false,
                                                  +							ok : function(r) {
                                                  +								if(r.data.plId != "") { // 该流程为关联流程
                                                  +									id = r.data.plId;
                                                  +								}
                                                  +								// 切换流程
                                                  +								openDesginer(id, newDefId, "create");
                                                  +							}
                                                  +						});
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +	}
                                                  +}
                                                  +
                                                  +function createNewVersion(defId,callBack){
                                                  +	var params = {
                                                  +			sid : sessionId,
                                                  +			cmd : "com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager_create",
                                                  +			uuid:"",
                                                  +			appId: appId,
                                                  +			processDefId : defId
                                                  +	};
                                                  +	$.ajax({
                                                  +		type:"post",
                                                  +		url:"./jd",
                                                  +		data:params,
                                                  +		success:function(resObj){
                                                  +				if(typeof callBack == "function"){
                                                  +					callBack(resObj);
                                                  +				}
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +function getSelected() {
                                                  +	var v = "";
                                                  +	var rows = versionGrid.awsGrid("getRows");
                                                  +	if (rows.length == 0 || rows == undefined) {
                                                  +		$.simpleAlert("请选择流程", "info", 2000);
                                                  +		return;
                                                  +	}
                                                  +	v = rows[0].ID;
                                                  +	return v;
                                                  +}
                                                  +
                                                  +function changeCurWfName(processDefId) {
                                                  +	var params = {
                                                  +		sid : sessionId,
                                                  +		cmd : "CONSOLE_M_PROCESS_VERSION_MANAGER_GETWFNAME",
                                                  +		processDefId : processDefId
                                                  +	};
                                                  +	parent.Util.ajax({
                                                  +		url : "./w",
                                                  +		data : params,
                                                  +		success : function(data) {
                                                  +			var res = response.responseText;
                                                  +			if (res != '') {
                                                  +				try {
                                                  +					parent.parent.setCurrentTabName(res, '');
                                                  +				} catch (e) {
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +//刷新操作
                                                  +function refreshGrid() {
                                                  +	$("#grid").awsGrid("refreshDataAndView");
                                                  +}
                                                  +
                                                  +function supports_canvas() {
                                                  +	return !!document.createElement('canvas').getContext;
                                                  +}
                                                  +
                                                  +//发布操作
                                                  +function publishVersion(com, grid) {
                                                  +	var versionStatus = '0';
                                                  +	var v;
                                                  +	var pName = "";
                                                  +	if (getSelected()) {
                                                  +		var rows = versionGrid.awsGrid("getRows");
                                                  +		if (rows.length == 0) {
                                                  +			$.simpleAlert("请选择要发布的流程", "info", 2000);
                                                  +			return false;
                                                  +		}
                                                  +		versionStatus = rows[0].versionStatus;
                                                  +		v = rows[0].ID;
                                                  +		//pName=rows[0].
                                                  +		if (versionStatus == '1') {
                                                  +			$.simpleAlert("版本已经是发布状态", "info", 2000);
                                                  +			return false;
                                                  +		}
                                                  +		$.confirm({
                                                  +			title : "提示",
                                                  +			content : "确定将选中的流程设置为运行版本?一旦设定成功将无法再转回到设计状态",
                                                  +			height : 140,
                                                  +			width : 300,
                                                  +			onConfirm : function() {
                                                  +				$.mask();
                                                  +				$.simpleAlert("正在发布流程...", "loading", "no");
                                                  +				var params = {
                                                  +					sid : sessionId,
                                                  +					cmd : "CONSOLE_M_PROCESS_VERSION_MANAGER_PUBLISH",
                                                  +					processDefId : v
                                                  +				};
                                                  +				parent.Util.ajax({
                                                  +					url : "./w",
                                                  +					data : params,
                                                  +					success : function(data) {
                                                  +						if (data != "") {
                                                  +							$.mask("close");
                                                  +							$.simpleAlert(data, "ok", 2500);
                                                  +							refreshGrid();
                                                  +							if (parent.process.processDefId == v) {
                                                  +								//parent.BPMNBiz.setDesignerStatus('running');
                                                  +								//parent.BPMNBiz.refreshVersion(0, '1');
                                                  +								//var name = parent.process.title + " v" + parent.process.version + ".0(运行)";
                                                  +								//parent.parent.setCurrentTabName(name);
                                                  +							}
                                                  +
                                                  +							var newsrc = "./w?sid=" + sessionId + "&cmd=CONSOLE_M_PROCESS_DESIGNER_PORTAL";
                                                  +							newsrc += "&processDefId=" + v;
                                                  +							newsrc += "&categoryName=" + encodeURI(parent.categoryName);
                                                  +							newsrc += "&processGroupId=" + parent.processGroupId;
                                                  +							newsrc += "&processGroupName=" + encodeURI(parent.processGroupName);
                                                  +							newsrc += "&isSupport=" + supports_canvas();
                                                  +							newsrc += "&appId=" + appId;
                                                  +
                                                  +							parent.window.location.href = newsrc;
                                                  +							//parent.parent.document.getElementById('bm_navigation').contentWindow.openProcessDefCard(v,'GatewayProcess v1.0(设计)','iconBMWF','com.actionsoft.apps.poc.api');
                                                  +							parent.BPMNBiz.refreshNavAndList();
                                                  +						}
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +	}
                                                  +}
                                                  +
                                                  +function copy() {
                                                  +	if (getSelected()) {
                                                  +		$("#dlg_title").dialog();
                                                  +	}
                                                  +}
                                                  +
                                                  +function doCopy() {
                                                  +	var newFlowName = $.trim($('#newProcessName').val());
                                                  +	if (newFlowName == '') {
                                                  +		$.simpleAlert("新流程名称不能为空", "info", 2000);
                                                  +		return false;
                                                  +	}
                                                  +	var newGroupName = $.trim($("#newGroupName").val());
                                                  +	if (newGroupName == '') {
                                                  +		$.simpleAlert("新流程组名称不能为空", "info", 2000);
                                                  +		return false;
                                                  +	}
                                                  +
                                                  +	if (!checkValues(newFlowName, "新流程名称不能出现特殊符号")) {
                                                  +		return;
                                                  +	}
                                                  +	if (!checkValues(newGroupName, "新流程组名称不能出现特殊符号")) {
                                                  +		return;
                                                  +	}
                                                  +	var defId = getSelected();
                                                  +	$.mask();
                                                  +	$.simpleAlert("正在处理请求...", "loading", "no");
                                                  +	//复制流程
                                                  +	parent.BPMNBiz.createNewVersion(defId, "", "", function() {
                                                  +		$.mask("close");
                                                  +		var processProperties = parent.Model.define.processProperties;
                                                  +		processProperties.processGroupName = newGroupName;
                                                  +		processProperties.categoryName = parent.categoryName;
                                                  +		parent.BPMNBiz.setTitle(newFlowName);
                                                  +
                                                  +		parent.$('#dialog_wf_version').dialog('close');
                                                  +		parent.parent.refreshNavAndList(newGroupName);
                                                  +		parent.BPMNBiz.refreshVersion(1, '0');
                                                  +
                                                  +		parent.processGroupName = newGroupName;
                                                  +		parent.BPMNBiz.setDesignerModifyStatus();
                                                  +	}, function() {
                                                  +		parent.BPMNBiz.setDesignerStatus('owner');
                                                  +	});
                                                  +}
                                                  +
                                                  +function checkValues(str, info, isNumber) {
                                                  +	if (isNumber) {
                                                  +		if (isNaN(str)) {
                                                  +			$.simpleAlert("不是一个数值", "info", 2000);
                                                  +			return false;
                                                  +		}
                                                  +	}
                                                  +	if (str.indexOf(">") > -1) {
                                                  +		alertInfos(info);
                                                  +		return false;
                                                  +	}
                                                  +	if (str.indexOf("<") > -1) {
                                                  +		alertInfos(info);
                                                  +		return false;
                                                  +	}
                                                  +	if (str.indexOf("[") > -1) {
                                                  +		alertInfos(info);
                                                  +		return false;
                                                  +	}
                                                  +	if (str.indexOf("]") > -1) {
                                                  +		alertInfos(info);
                                                  +		return false;
                                                  +	}
                                                  +	if (str.indexOf("{") > -1) {
                                                  +		alertInfos(info);
                                                  +		return false;
                                                  +	}
                                                  +	if (str.indexOf("}") > -1) {
                                                  +		alertInfos(info);
                                                  +		return false;
                                                  +	}
                                                  +	if (str.indexOf("\\") > -1) {
                                                  +		alertInfos(info);
                                                  +		return false;
                                                  +	}
                                                  +	if (str.indexOf('/') > -1) {
                                                  +		alertInfos(info);
                                                  +		return false;
                                                  +	}
                                                  +	if (str.indexOf("'") > -1) {
                                                  +		alertInfos(info);
                                                  +		return false;
                                                  +	}
                                                  +	if (str.indexOf('"') > -1) {
                                                  +		alertInfos(info);
                                                  +		return false;
                                                  +	}
                                                  +	if (str.indexOf('&') > -1) {
                                                  +		alertInfos(info);
                                                  +		return false;
                                                  +	}
                                                  +	if (str.indexOf('%') > -1) {
                                                  +		alertInfos(info);
                                                  +		return false;
                                                  +	}
                                                  +	return true;
                                                  +}
                                                  +
                                                  +function alertInfos(info) {
                                                  +	if (info) {
                                                  +		$.simpleAlert(info, "info", 2000);
                                                  +	}
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.biz.version.manager.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.biz.version.manager.js
                                                  new file mode 100644
                                                  index 00000000..86f23528
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.biz.version.manager.js
                                                  @@ -0,0 +1,316 @@
                                                  +var sid;
                                                  +var appId;
                                                  +var processDefVersionId;
                                                  +var perms = window.parent.perms;
                                                  +var isView = window.parent.isView;
                                                  +var defaultUUid;
                                                  +var versionGrid;
                                                  +$(function(){
                                                  +	sid = $("#sid").val();
                                                  +	appId =$("#appId").val();
                                                  +	processDefVersionId =$("#processDefVersionId").val();
                                                  +	defaultUUid = $("#uuid").val();
                                                  +	initGrid();
                                                  +	selectionRow();
                                                  +	if (isView) {
                                                  +		//如果浏览模式打开,不显示删除和新增、使用版本
                                                  +		$("a[id^=delete_]").parent().hide();
                                                  +		$("#createNewVersion").hide();
                                                  +		if (perms.indexOf("v") == -1) {
                                                  +			$("#useSelectVersion").hide();
                                                  +		}
                                                  +	} else {
                                                  +		//如果没有版本管理权限,不显示使用版本
                                                  +		if (perms.indexOf("v") == -1) {
                                                  +			$("#useSelectVersion").hide();
                                                  +		}
                                                  +		//如果没有写权限,不显示新增
                                                  +		if (perms.indexOf("w") == -1) {
                                                  +			$("#createNewVersion").hide();
                                                  +		}
                                                  +		//如果没有删除权限,不显示删除
                                                  +		if (perms.indexOf("d") == -1) {
                                                  +			$("a[id^=delete_]").parent().hide();
                                                  +		}
                                                  +	}
                                                  +});
                                                  +
                                                  +function initGrid() {
                                                  +	var obj = {
                                                  +			width: parent.$("#designer-version-manager").width() - 2,           //宽度设为100%
                                                  +	 		title: "数据展示",
                                                  +	 		height: 174,
                                                  +			wrap:true,
                                                  +			nowrapTitle:true,
                                                  +			topVisible:false,
                                                  +			flexWidth:true,
                                                  +			bottomVisible:false,
                                                  +			numberCell:true,
                                                  +	 		flexHeight:false,			//与height互斥 默认false
                                                  +	 		scrollModel:{horizontal:false},   //是否开启水平滚动
                                                  +	 		editable:false,
                                                  +	 		sortable:false,
                                                  +	 		selectionModel : {
                                                  +				type : "row",
                                                  +				mode : "single"
                                                  +			}
                                                  +	};
                                                  +	var data = versionData;
                                                  +	obj.colModel = [{
                                                  +		title : "版本",
                                                  +	    width : 50,
                                                  +	    dataType : "string",
                                                  +	    dataIndx : "version",
                                                  +	    align : "left"
                                                  +	}, {
                                                  +		title : "文件名称",
                                                  +		width : 200,
                                                  +		dataType : "string",
                                                  +		dataIndx : "palName",
                                                  +		align : "left"
                                                  +	}, {
                                                  +		title : "创建时间",
                                                  +		width : 140,
                                                  +		dataType : "string",
                                                  +		dataIndx : "createDate",
                                                  +		align : "center"
                                                  +	}, {
                                                  +		title : "状态",
                                                  +		width : 80,
                                                  +		hidden : false,
                                                  +		dataIndx : "versionStatus",
                                                  +		align : "center",
                                                  +		render: function(ui) {
                                                  +			var record = ui.rowData;
                                                  +			var dataIndx = ui.dataIndx;
                                                  +			var value = record[dataIndx];
                                                  +			var rowIndx = ui.rowIndx;
                                                  +			var colIndx = ui.colIndx;
                                                  +			if (record['isApproval']) {
                                                  +				return '<span style="color:red">审批中</span>';
                                                  +			} else if (record['isPublish']) {
                                                  +				return '<span style="color:#1AA47D">已发布</span>';
                                                  +			} else if (record['isStop']) {
                                                  +				return '<span style="color:red">已停用</span>';
                                                  +			} else if (record['isUse']) {
                                                  +				return '<span>设计中</span>';
                                                  +			} else {
                                                  +				return '<span>设计</span>';
                                                  +			}
                                                  +		}
                                                  +	}, {
                                                  +		title : "操作", 
                                                  +		width : 70, 
                                                  +		sortable : true, 
                                                  +		editable : false, 
                                                  +		dataIndx : "operate",
                                                  +		align : "center",
                                                  +		render: function(ui){
                                                  +			var record = ui.rowData;
                                                  +			var dataIndx = ui.dataIndx;
                                                  +			var value = record[dataIndx];
                                                  +			var rowIndx = ui.rowIndx;
                                                  +			var colIndx = ui.colIndx;
                                                  +			if (!record['isUse'] && !record['isPublish'] && !record['isStop']) {
                                                  +				return "<a id=\"delete_"+record['uuid'] +"\" style=\"color: rgb(102, 102, 102);\" onclick='deleteDesginerVersion(\"" + record['uuid'] + "\");' href=\"javascript:void(0)\">删除</a>	";
                                                  +			}
                                                  +		}
                                                  +	}];
                                                  +	obj.dataModel = {
                                                  +   	        data: data,
                                                  +   	        location: "local",
                                                  +   	        sorting: "local"
                                                  +   	    };
                                                  +	versionGrid = $("#grid_array").awsGrid(obj);
                                                  +}
                                                  +
                                                  +function selectionRow() {
                                                  +	var rowData = versionGrid.awsGrid("getData");
                                                  +	for (var i = 0; i < rowData.length; i++) {
                                                  +		if (rowData[i]['isUse']) {
                                                  +			versionGrid.awsGrid("setSelection", {rowIndx:i});
                                                  +		}
                                                  +	}
                                                  +	
                                                  +}
                                                  +
                                                  +function createNewVersion(){	
                                                  +	var $selectRowData = versionGrid.awsGrid("getRows");
                                                  +	if($selectRowData.length != 1){
                                                  +		$.simpleAlert("请选择相应的流程创建新版本", "info", 2000);
                                                  +		// $("#simplealert>.msg").css("top", "15px");
                                                  +		return false;
                                                  +	}
                                                  +	var targetUuid = $selectRowData[0]['uuid'];
                                                  +	var isUse = $selectRowData[0]['isUse'];
                                                  +	$.confirm({
                                                  +	    title:"提示", 
                                                  +	    content:"确定将选中的版本流程为模板创建新版本流程?", 
                                                  +	    onConfirm:function(){
                                                  +	    	awsui.ajax.request({
                                                  +	    		method:"POST",
                                                  +	    		url: "./jd",
                                                  +	    		async: false,
                                                  +	    		data:{
                                                  +	    			sid : encodeURI(sid),
                                                  +	    			cmd : "com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager_create",
                                                  +	    			uuid : targetUuid,
                                                  +	    			appId : appId,
                                                  +	    			processDefVersionId : processDefVersionId
                                                  +	    		},
                                                  +	    		ok: function(r) {
                                                  +	    			var newObj = r.data.newObj;
                                                  +					var newRowData = {
                                                  +							uuid:newObj['uuid'], 
                                                  +							isApproval: newObj['isApproval'],
                                                  +							isUse: newObj['isUse'], 
                                                  +							isPublish: newObj['isPublish'], 
                                                  +							version: newObj['version'],
                                                  +							palName: newObj['palName'],
                                                  +							createDate: newObj['createDate'],
                                                  +							versionStatus: newObj['versionStatus'],
                                                  +							operate: newObj['operate']
                                                  +					};
                                                  +					versionGrid.awsGrid("addRow", newRowData, 'top');
                                                  +					// 清除选中
                                                  +					versionGrid.awsGrid("setSelection", null);
                                                  +					if (isView) {
                                                  +						//如果浏览模式打开,不显示删除
                                                  +						$("a[id^=delete_]").parent().hide();
                                                  +					} else {
                                                  +						//如果没有删除权限,不显示删除
                                                  +						if (perms.indexOf("d") == -1) {
                                                  +							$("a[id^=delete_]").parent().hide();
                                                  +						}
                                                  +					}
                                                  +	    		},
                                                  +	    		err: function(r) {
                                                  +	    			
                                                  +	    		}
                                                  +	    	});
                                                  +	    }
                                                  +	});
                                                  +	
                                                  +}
                                                  +function deleteDesginerVersion(uuid){
                                                  +	if(defaultUUid == uuid){
                                                  +		$.simpleAlert("无法删除正在使用的版本","warning",2000);
                                                  +		// $("#simplealert>.msg").css("top", "15px");
                                                  +		return;
                                                  +	}
                                                  +	$.confirm({
                                                  +		title:"提示",
                                                  +		content:"确定要删除吗?",
                                                  +		onConfirm:function(){
                                                  +			awsui.ajax.request({
                                                  +				method:"POST",
                                                  +				url:"./jd",
                                                  +				async: false,
                                                  +				data:{
                                                  +					sid : encodeURI(sid),
                                                  +					cmd : "com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager_delete",
                                                  +					uuid : uuid
                                                  +				},
                                                  +				ok:function(r) {
                                                  +					var $selectRow = versionGrid.awsGrid("getRows");
                                                  +					if ($selectRow[0]['uuid'] == uuid) {
                                                  +						versionGrid.awsGrid("deleteRows", $selectRow[0]);
                                                  +					}
                                                  +				},
                                                  +				err:function(r){
                                                  +					
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +	});
                                                  +}
                                                  +function useSelectedVersion(uuid){
                                                  +	var $selectRowData = versionGrid.awsGrid("getRows");
                                                  +	if($selectRowData.length != 1){
                                                  +		$.simpleAlert("选中版本", "info", 2000);
                                                  +		// $("#simplealert>.msg").css("top", "15px");
                                                  +		return false;
                                                  +	}
                                                  +	var targetUuid = $selectRowData[0]['uuid'];
                                                  +	var isUse = $selectRowData[0]['isUse'];
                                                  +	if (isUse) {
                                                  +		return;
                                                  +	}
                                                  +	awsui.ajax.request({
                                                  +		method:"POST",
                                                  +		url:"./jd",
                                                  +		data:{
                                                  +			sid : encodeURI(sid),
                                                  +			cmd : "com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager_use",
                                                  +			uuid : targetUuid
                                                  +		},
                                                  +		ok: function(r) {
                                                  +			try{
                                                  +				if(r.data.status == 1){
                                                  +					$("#desginerContent tbody").empty().append(r.data.html);
                                                  +					if (parent.parent.repositoryTree ) {
                                                  +						var tree = parent.parent.repositoryTree;
                                                  +						var targetNode = tree.getNodeById(uuid);
                                                  +						if (targetNode) {
                                                  +							var treeData = tree.config.data;
                                                  +							for (var treeIndex in treeData) {
                                                  +								var sourceData = treeData[treeIndex];
                                                  +								if (sourceData.id == uuid) {
                                                  +									sourceData.id = targetUuid;
                                                  +									if (sourceData.url) {
                                                  +										sourceData.url = sourceData['url'].replace(uuid, targetUuid);
                                                  +									}
                                                  +									break;
                                                  +								}
                                                  +							}
                                                  +							var treeNodes = tree.config.nodes;
                                                  +							var sourceObj = treeNodes[uuid];
                                                  +							var targetObj = sourceObj;
                                                  +							targetObj['id'] = targetUuid;
                                                  +							targetObj['url'] = targetObj['url'].replace(uuid, targetUuid);
                                                  +							treeNodes[targetUuid] = targetObj;
                                                  +							delete targetObj[uuid];
                                                  +							var targetDom = tree.getNodeDomById(uuid);
                                                  +							targetDom.attr("tbindex", targetUuid);
                                                  +							targetDom.find("span").each(function(){
                                                  +								var _thisId = $(this).attr("id");
                                                  +								if (_thisId) {
                                                  +									$(this).attr("id", _thisId.replace(uuid, targetUuid));
                                                  +								}
                                                  +							});
                                                  +							var sepDiv = targetDom.find("div.tree-items-sep");
                                                  +							sepDiv.attr("sep-index", targetUuid);
                                                  +							var targetLiDom = tree.getNodeLiDomById(uuid);
                                                  +							targetLiDom.attr("tbindex", targetUuid);
                                                  +							targetLiDom.attr("li_index", targetUuid);
                                                  +							var liDomId = targetLiDom.attr("id");
                                                  +							targetLiDom.attr("id", liDomId.replace(uuid, targetUuid));
                                                  +							tree.refreshNodeById(targetUuid);
                                                  +						}
                                                  +					}
                                                  +					if(parent.parent.document.getElementById("main") != null) {
                                                  +						// 刷新右侧列表数据
                                                  +						var mainHref = parent.parent.document.getElementById("main").src;
                                                  +						parent.parent.document.getElementById("main").src = mainHref.replace(new RegExp(uuid,"gm"), targetUuid);
                                                  +						parent.parent.document.getElementById("main").url = mainHref.replace(new RegExp(uuid,"gm"), targetUuid);
                                                  +						
                                                  +						// 刷新tab
                                                  +						parent.parent.openDesginer(targetUuid, 0, r.data.name, "", "");
                                                  +						parent.parent.closeTabById(uuid);						
                                                  +					} else {
                                                  +						var obj = {};
                                                  +						obj.id = targetUuid;
                                                  +						obj.processDefId = "";
                                                  +						parent.opener.openDesginer(obj);
                                                  +						parent.close();
                                                  +					}
                                                  +				}
                                                  +			}catch(e){
                                                  +				console.log(e);
                                                  +				$.simpleAlert("提交失败,请检查网络","error",2000);
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.core.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.core.js
                                                  new file mode 100644
                                                  index 00000000..fa25881e
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.core.js
                                                  @@ -0,0 +1,2286 @@
                                                  +// 右键菜单添加"属性"和"流程属性" 功能
                                                  +Designer.contextMenu.show = function(x, y) {
                                                  +	this.menuPos.x = x;
                                                  +	this.menuPos.y = y;
                                                  +	var menu = $("#designer_contextmenu");
                                                  +	var currentFocus = Utils.getShapeByPosition(x, y, false);
                                                  +	menu.children().hide();
                                                  +	menu.children("li[ac=selectall]").show();
                                                  +	menu.children(".devi_selectall").show();
                                                  +	menu.children("li[ac=drawline]").show();
                                                  +	menu.children("li[ac=processAttribute]").show();
                                                  +	var clipLen = Designer.clipboard.elements.length;
                                                  +	if (currentFocus == null) {
                                                  +		// 画布
                                                  +		if (clipLen > 0) {
                                                  +			// if (DesignerCopyPaste.isAppearPaste) {
                                                  +			// menu.children("li[ac=appearPaste]").show();
                                                  +			// } else {
                                                  +			menu.children("li[ac=paste]").show();
                                                  +			// }
                                                  +			menu.children(".devi_clip").show();
                                                  +		}
                                                  +	} else {
                                                  +		var shape = currentFocus.shape;
                                                  +		this.menuPos.shape = shape;
                                                  +		// 形状
                                                  +		if (shape.locked) {
                                                  +			// 如果形状是锁定的
                                                  +			if (clipLen > 0) {
                                                  +				// if (DesignerCopyPaste.isAppearPaste) {
                                                  +				// menu.children("li[ac=appearPaste]").show();
                                                  +				// } else {
                                                  +				menu.children("li[ac=paste]").show();
                                                  +				// }
                                                  +				menu.children(".devi_clip").show();
                                                  +			}
                                                  +			menu.children("li[ac=unlock]").show();
                                                  +			menu.children(".devi_shape").show();
                                                  +		} else {
                                                  +			menu.children("li[ac=cut]").show();
                                                  +			menu.children("li[ac=copy]").show();
                                                  +			menu.children("li[ac=appearCopy]").show();
                                                  +			menu.children("li[ac=duplicate]").show();
                                                  +			if (clipLen > 0) {
                                                  +				// if (DesignerCopyPaste.isAppearPaste) {
                                                  +				// menu.children("li[ac=appearPaste]").show();
                                                  +				// } else {
                                                  +				menu.children("li[ac=paste]").show();
                                                  +				// }
                                                  +			}
                                                  +			menu.children(".devi_clip").show();
                                                  +			menu.children("li[ac=front]").show();
                                                  +			menu.children("li[ac=back]").show();
                                                  +			menu.children("li[ac=lock]").show();
                                                  +			var selectedIds = Utils.getSelectedIds();
                                                  +			var count = selectedIds.length;
                                                  +			if (count >= 2) {
                                                  +				menu.children("li[ac=group]").show();
                                                  +				$("#ctxmenu_align").show();
                                                  +			}
                                                  +			var groupCount = Utils.getSelectedGroups().length;
                                                  +			if (groupCount >= 1) {
                                                  +				menu.children("li[ac=ungroup]").show();
                                                  +			}
                                                  +			menu.children(".devi_shape").show();
                                                  +			if (count == 1 && shape.name != "linker" && shape.link) {
                                                  +				menu.children("li[ac=changelink]").show();
                                                  +			}
                                                  +			if (shape.name == "linker" || shape.attribute.editable) {
                                                  +				menu.children("li[ac=edit]").show();
                                                  +			}
                                                  +			menu.children("li[ac=dataconfig]").show();
                                                  +			menu.children("li[ac=delete]").show();
                                                  +			menu.children(".devi_del").show();
                                                  +		}
                                                  +		// 自定义模板 显示或隐藏
                                                  +		if (shape && methodId != "process.bpmn2" && isAdmin && isCustomDefine == "1") {
                                                  +			var selectShapes = Utils.getSelected();
                                                  +			if (selectShapes != null && selectShapes.length == 1) {
                                                  +				menu.children(".devi_custom").show();
                                                  +				menu.children("li[ac=customdefine]").show();
                                                  +			}
                                                  +		}
                                                  +
                                                  +	}
                                                  +	if (Designer.status == "running") {
                                                  +		menu.children("li[ac=cut]").hide();
                                                  +		menu.children("li[ac=copy]").hide();
                                                  +		menu.children("li[ac=duplicate]").hide();
                                                  +		menu.children("li[ac=paste]").hide();
                                                  +		menu.children("li[ac=appearCopy]").hide();
                                                  +		// menu.children("li[ac=appearPaste]").hide();
                                                  +		$(".devi_clip").hide();
                                                  +	}
                                                  +	menu.css({
                                                  +		display : "block",
                                                  +		"z-index" : Model.orderList.length + 3,
                                                  +		left : x,
                                                  +		top : y
                                                  +	});
                                                  +	$(document).bind("mousedown.ctxmenu", function() {
                                                  +		Designer.contextMenu.hide();
                                                  +	});
                                                  +};
                                                  +
                                                  +// 右键菜单中添加"属性"和"流程属性"功能
                                                  +Designer.contextMenu.execAction = function(item) {
                                                  +	var action = item.attr("ac");
                                                  +	if (action == "cut") {
                                                  +		Designer.clipboard.cut();
                                                  +		DesignerCopyPaste.customCopyToServer();
                                                  +		Designer.op.removeShape();
                                                  +		DesignerCopyPaste.isCut = true;
                                                  +	} else if (action == "copy") {
                                                  +		// DesignerCopyPaste.generalCopy();
                                                  +		DesignerCopyPaste.customCopyToServer();
                                                  +		isAppearCopy = false;
                                                  +	} else if (action == "appearCopy") {
                                                  +		DesignerCopyPaste.copyElement();
                                                  +		// DesignerCopyPaste.isAppearPaste = true;
                                                  +		isAppearCopy = true;
                                                  +	} else if (action == "paste") {
                                                  +		if (DesignerCopyPaste.isCut) {
                                                  +			DesignerCopyPaste.requestCustomPasteContent();
                                                  +			// Designer.clipboard.paste(this.menuPos.x, this.menuPos.y);
                                                  +			DesignerCopyPaste.isCut = false;
                                                  +		} else
                                                  +			DesignerCopyPaste.pasteSelect(null);
                                                  +		// Designer.clipboard.paste(this.menuPos.x, this.menuPos.y);
                                                  +		// DesignerCopyPaste.requestCustomPasteContent();
                                                  +	} else if (action == "appearPaste") {// 出现粘贴的已被隐藏
                                                  +		// DesignerCopyPaste.pasteElement();
                                                  +	} else if (action == "duplicate") {
                                                  +		Designer.clipboard.duplicate();
                                                  +	} else if (action == "front") {
                                                  +		Designer.layerShapes("front");
                                                  +	} else if (action == "back") {
                                                  +		Designer.layerShapes("back");
                                                  +	} else if (action == "lock") {
                                                  +		Designer.lockShapes();
                                                  +	} else if (action == "unlock") {
                                                  +		Designer.unlockShapes();
                                                  +	} else if (action == "group") {
                                                  +		Designer.group();
                                                  +	} else if (action == "ungroup") {
                                                  +		Designer.ungroup();
                                                  +	} else if (action == "align_shape") {
                                                  +		var align = item.attr("al");
                                                  +		Designer.alignShapes(align);
                                                  +	} else if (action == "edit") {
                                                  +		Designer.op.editShapeText(this.menuPos.shape);
                                                  +	} else if (action == "delete") {
                                                  +		Designer.op.removeShape();
                                                  +	} else if (action == "selectall") {
                                                  +		Designer.selectAll();
                                                  +	} else if (action == "drawline") {
                                                  +		Designer.op.changeState("creating_free_linker");
                                                  +	} else if (action == "changelink") {
                                                  +		UI.showInsertLink();
                                                  +	} else if (action == "attribute") {
                                                  +		showPropertiesDialog();
                                                  +	} else if (action == "processAttribute") {
                                                  +		showPropertiesDialog(true);
                                                  +	} else if (action == "customdefine") {
                                                  +		openCustomDefineDialog();
                                                  +	}
                                                  +};
                                                  +
                                                  +/**
                                                  + * 更换图形 (变换图形时同步bpmnname)
                                                  + *
                                                  + * @param {}
                                                  + *            targetShape
                                                  + * @param {}
                                                  + *            shapeName
                                                  + */
                                                  +Model.changeShape = function(targetShape, shapeName) {
                                                  +	var schemaShape = Schema.shapes[shapeName];
                                                  +	targetShape.name = shapeName;
                                                  +	targetShape.title = schemaShape.title;
                                                  +	targetShape.attribute = schemaShape.attribute;
                                                  +	targetShape.dataAttributes = schemaShape.dataAttributes;
                                                  +	targetShape.path = schemaShape.path;
                                                  +	targetShape.textBlock = schemaShape.textBlock;
                                                  +	targetShape.textBlockFinal = schemaShape.textBlockFinal;
                                                  +	targetShape.anchors = schemaShape.anchors;
                                                  +
                                                  +	// AWS增加的内容开始
                                                  +	// 更新bpmnName属性
                                                  +	targetShape.bpmnName = shapeName;
                                                  +	// 变更名称
                                                  +	targetShape.text = schemaShape.text;
                                                  +	// 变更样式
                                                  +	targetShape.lineStyle = schemaShape.lineStyle;
                                                  +	targetShape.fillStyle = schemaShape.fillStyle;
                                                  +	// AWS增加的内容结束
                                                  +
                                                  +	Schema.initShapeFunctions(targetShape);
                                                  +	Designer.painter.renderShape(targetShape);
                                                  +};
                                                  +
                                                  +/**
                                                  + * 添加多个形状
                                                  + *
                                                  + * @param {}
                                                  + *            shapes
                                                  + */
                                                  +Model.addMulti = function(shapes, popMsg) {
                                                  +	if (typeof popMsg == "undefined") {
                                                  +		popMsg = true;
                                                  +	}
                                                  +	var addShapes = [];
                                                  +	for (var i = 0; i < shapes.length; i++) {
                                                  +		var shape = shapes[i];
                                                  +		if (shape.name != "linker") {
                                                  +			//shape.textBlock = shape.getTextBlock();
                                                  +			shape.textBlockFinal = shape.getTextBlock();
                                                  +		}
                                                  +		addShapes.push(Utils.copy(shape));
                                                  +		this.define.elements[shape.id] = Utils.copy(shape);
                                                  +		// 重新创建,以免互相影响
                                                  +		this.persistence.elements[shape.id] = Utils.copy(shape);
                                                  +	}
                                                  +	this.build();
                                                  +	if (popMsg) {
                                                  +		MessageSource.send("create", addShapes);
                                                  +	}
                                                  +};
                                                  +
                                                  +//判断是否显示错误提示在泳道已经强制刷新形状属性
                                                  +var isShowError;
                                                  +
                                                  +MessageSource.submit = function(opt) {
                                                  +	if (opt == "restoreVersion") {// 如果当操作为恢复版本,则先执行保存操作 在执行输入新列表操作
                                                  +		saveDesigner(undefined, undefined, undefined, true);
                                                  +		// 最后一个参数设置为true表示为单纯保存 不去关闭版本列表
                                                  +	}
                                                  +	if (MessageSource.batchSize == 0 && MessageSource.messages.length != 0) {
                                                  +		// 更新Dock窗口
                                                  +		if (MessageSource.withDock) {
                                                  +			Dock.update(true);
                                                  +		}
                                                  +		if(isAutoSave == "0") {// 手工保存下记录所有的图形变更操作
                                                  +			for (var indexMessage = 0; indexMessage < MessageSource.messages.length; indexMessage++) {
                                                  +				var mess = MessageSource.messages[indexMessage];
                                                  +				if (mess.action == 'create' || mess.action == 'remove') {
                                                  +					var content = mess.content;// array
                                                  +					for (var i = 0; i < content.length; i++) {
                                                  +						var tempShape = content[i];
                                                  +						if (tempShape .name == 'linker') continue;
                                                  +						var obj = {};
                                                  +						obj.action = mess.action;
                                                  +						obj.name = tempShape.text;
                                                  +						messageArrayForSave[tempShape.id] = obj;
                                                  +					}
                                                  +					//处理形状拖动后属性初始化
                                                  +					handleShapeAttrInitInLane(mess.action, content);
                                                  +				} else if (mess.action == 'update') {
                                                  +					var content = mess.content;// object
                                                  +					var updates = content.updates;// array
                                                  +					for (var i = 0; i < updates.length; i++) {
                                                  +						var tempShape = updates[i];
                                                  +						if (tempShape .name == 'linker') continue;
                                                  +						var obj = {};
                                                  +						obj.action = mess.action;
                                                  +						obj.name = tempShape.text;
                                                  +						messageArrayForSave[tempShape.id] = obj;
                                                  +					}
                                                  +					//处理形状拖动后属性初始化
                                                  +					//是否开启了isLaneForceRefreshShapeAttr这个参数
                                                  +					var isForce = false;
                                                  +					isShowError = false;
                                                  +					if (!isLaneForceRefreshShapeAttr) {
                                                  +						var shapes = content.shapes;
                                                  +						var shapeOld = shapes[0];
                                                  +						var updateNew = updates[0];
                                                  +						if (shapeOld.props.x == updateNew.props.x && shapeOld.props.y == updateNew.props.y) {
                                                  +							isForce = true;
                                                  +						}
                                                  +					} else {
                                                  +						var shapes = content.shapes;
                                                  +						var shapeOld = shapes[0];
                                                  +						var updateNew = updates[0];
                                                  +						if (shapeOld.props.x == updateNew.props.x && shapeOld.props.y == updateNew.props.y) {
                                                  +							isShowError = true;
                                                  +						}
                                                  +					}
                                                  +					handleShapeAttrInitInLane(mess.action, content, isForce);
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		if (MessageSource.withMessage == false) {
                                                  +			// 如果不需要发送消息,比如在接收别人发来的消息时
                                                  +			MessageSource.messages = [];
                                                  +			return;
                                                  +		}
                                                  +		// 当没有活动的批处理时,才提交
                                                  +		if (MessageSource.withUndo) {
                                                  +			// 将事件压入撤销堆栈
                                                  +			MessageSource.undoStack.push(MessageSource.messages);
                                                  +		}
                                                  +		if (chartId != "" && isNeedPutMessage) {
                                                  +			var messagesStr = JSON.stringify(MessageSource.messages);
                                                  +			putMessage(MessageSource.messages);
                                                  +			if (role != "trial") {
                                                  +				$("#saving_tip").css("color", "rgb(255, 0, 0)");
                                                  +				$("#saving_tip").text("文件已修改,未保存");
                                                  +			}
                                                  +			var a = {
                                                  +				action : "command",
                                                  +				messages : messagesStr,
                                                  +				ignore : "messages",
                                                  +				name : userName
                                                  +			};
                                                  +			if (isAutoSave == "1") {
                                                  +				CLB.send(a, function() {
                                                  +					if (role != "trial") {
                                                  +						$("#saving_tip").text("已保存成功");
                                                  +						// Dock.loadHistorys();
                                                  +						// parent.window.top.document.getElementById("iflowlist").contentWindow.refresh();
                                                  +						// parent.window.document.getElementById("main").src=DesignerCopyPaste.refreshIframe+"&date="+new
                                                  +						// Date().getTime();
                                                  +					}
                                                  +				})
                                                  +			}
                                                  +		}
                                                  +		isSave = false;
                                                  +		isNeedPutMessage = true;
                                                  +		MessageSource.messages = [];
                                                  +	}
                                                  +};
                                                  +
                                                  +Model.create = function(l, h, j) {
                                                  +	var m = Utils.newId();
                                                  +	var o = Utils.copy(Schema.shapes[l]);
                                                  +	o.id = m;
                                                  +	o.props.x = h;
                                                  +	o.props.y = j;
                                                  +	o.props.zindex = Model.maxZIndex + 1;
                                                  +	o.props = $.extend(true, {},
                                                  +		Schema.shapeDefaults.props, o.props);
                                                  +	for (var k = 0; k < o.dataAttributes.length; k++) {
                                                  +		var i = o.dataAttributes[k];
                                                  +		i.id = Utils.newId();
                                                  +		if (i.attributesJsonArray) {
                                                  +			if (Model.define.localAttribute != undefined && Model.define.localAttribute[o.name] != undefined && Model.define.localAttribute[o.name] != null && Model.define.localAttribute[o.name].length > 0) {
                                                  +				for (var n in Model.define.localAttribute[o.name]) {
                                                  +					i.attributesJsonArray.push(Utils.copy(Model.define.localAttribute[o.name][n]));
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	Designer.events.push("create", o);
                                                  +	handleShapeAttrInitInLane("creating", [o]);
                                                  +	return o
                                                  +}
                                                  +
                                                  +function handleShapeAttrInitInLane(action, content, isForce) {
                                                  +	//删除操作不处理
                                                  +	if (action == "remove") {
                                                  +		return;
                                                  +	}
                                                  +	var selectedShape
                                                  +	if (action == "creating") {
                                                  +		selectedShape = content[0];
                                                  +	} else {
                                                  +		selectedShape = Utils.getSelected()[0];
                                                  +	}
                                                  +	if (selectedShape == undefined) {
                                                  +		return;
                                                  +	}
                                                  +	if (selectedShape.name == "linker") {
                                                  +		return;
                                                  +	}
                                                  +	//添加一个规避处理的条件,对于一些不必要处理的情况
                                                  +	//1.拖动的形状非泳池泳道
                                                  +	//2.拖动的是泳道(看泳道的属性是否已经配置和初始化了)
                                                  +	//3.给泳道初始化属性值时对泳道内的形状的属性处理
                                                  +	var allShape = [];
                                                  +	var lanes = [];
                                                  +	for (var i = 0; i < Model.orderList.length; i++) {
                                                  +		var e = Model.orderList[i].id;
                                                  +		var c = Model.getShapeById(e);
                                                  +		if (c.name == "linker") {
                                                  +			continue;
                                                  +		}
                                                  +		//获取所有的泳道和非泳池泳道的形状
                                                  +		if (c.title.indexOf("泳道") > -1) {
                                                  +			lanes.push(c);
                                                  +		} else if (c.title.indexOf("泳池") < 0 && c.title.indexOf("分隔") < 0) {//对于flowchart再看是否需要添加条件
                                                  +			allShape.push(c);
                                                  +		}
                                                  +	}
                                                  +	if (selectedShape.title.indexOf("泳道") > -1) {
                                                  +		handleMoveLane(lanes, selectedShape, allShape, isForce);
                                                  +	} else if (selectedShape.title.indexOf("泳池") > -1) {//对于flowchart再看是否需要添加条件
                                                  +		handleMovePool(lanes, selectedShape, allShape, isForce);
                                                  +	} else {
                                                  +		var shapeInLanes = [];
                                                  +		var rotatedProps = Utils.getShapeBox(selectedShape);
                                                  +		for (var j = 0; lanes.length > 0 && j < lanes.length; j++) {
                                                  +			if (Utils.rectInRect(rotatedProps, lanes[j].props)) {
                                                  +				shapeInLanes.push(lanes[j]);
                                                  +			}
                                                  +		}
                                                  +		if (shapeInLanes.length > 0) {
                                                  +			handleMoveShape(shapeInLanes, selectedShape, isForce);
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +//处理拖动是泳道
                                                  +function handleMoveLane(lanes, selectedShape, allShape, isForce) {
                                                  +	//拖动泳道其实和拖动泳池一样的效果
                                                  +	if (selectedShape.parent == undefined || selectedShape.parent == "") {
                                                  +		return;
                                                  +	}
                                                  +	var pool = Model.getShapeById(selectedShape.parent);
                                                  +	handleMovePool(lanes, pool, allShape, isForce);
                                                  +}
                                                  +
                                                  +//处理拖动是泳池
                                                  +function handleMovePool(lanes, selectedShape, allShape, isForce) {
                                                  +	if (lanes.length == 0 || allShape.length == 0) {
                                                  +		return;
                                                  +	}
                                                  +	//看泳池中是否有泳道
                                                  +	var isCurLane = true;
                                                  +	var tmpLanes = [];
                                                  +	var otherLanes = [];
                                                  +	for (var j = 0; j < lanes.length; j++) {
                                                  +		if (lanes[j].parent == selectedShape.id) {
                                                  +			tmpLanes.push(lanes[j]);
                                                  +			isCurLane = false;
                                                  +		} else {
                                                  +			otherLanes.push(lanes[j]);
                                                  +		}
                                                  +	}
                                                  +	if (isCurLane) {
                                                  +		return;
                                                  +	} else {
                                                  +		//对在泳池中泳道内形状的处理
                                                  +		for (var k = 0; tmpLanes.length > k; k++) {
                                                  +			//看泳道的属性是否已经配置和初始化了
                                                  +			if (tmpLanes[k].dataAttributes.length == 0) {
                                                  +				continue;
                                                  +			}
                                                  +			var attributesJsonArray = tmpLanes[k].dataAttributes[0].attributesJsonArray;
                                                  +			if (attributesJsonArray == undefined || attributesJsonArray.length == 0) {
                                                  +				continue;
                                                  +			}
                                                  +			var shapes = [];
                                                  +			for (var i = 0; i < allShape.length; i++) {
                                                  +				var rotatedProps = Utils.getShapeBox(allShape[i]);
                                                  +				if (Utils.rectInRect(rotatedProps, tmpLanes[k].props)) {
                                                  +					shapes.push(allShape[i]);
                                                  +				}
                                                  +			}
                                                  +			if (shapes.length == 0) {
                                                  +				return;
                                                  +			}
                                                  +			//处理一个形状处在多个不同泳道中
                                                  +			if (otherLanes.length > 0) {
                                                  +				for (var p = 0; p < shapes.length; p++) {
                                                  +					var shapeInLanes = [];
                                                  +					for (var m = 0; m < otherLanes.length; m++) {
                                                  +						var rotatedProps = Utils.getShapeBox(shapes[p]);
                                                  +						if (Utils.rectInRect(rotatedProps, otherLanes[m].props)) {
                                                  +							shapeInLanes.push(otherLanes[m]);
                                                  +						}
                                                  +					}
                                                  +					shapeInLanes.push(tmpLanes[k]);
                                                  +					handleMoveShape(shapeInLanes, shapes[p], isForce);
                                                  +				}
                                                  +			} else {
                                                  +				handleShapeAttrValue(tmpLanes[k], shapes, 0, isForce);
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +//处理拖动非泳池泳道
                                                  +function handleMoveShape(lanes, selectedShape, isForce) {
                                                  +	var timerCount = lanes.length;
                                                  +	for (var i = 0; i < lanes.length; i++) {
                                                  +		//看泳道的属性是否已经配置和初始化了
                                                  +		if (lanes[i].dataAttributes.length == 0) {
                                                  +			continue;
                                                  +		}
                                                  +		var attributesJsonArray = lanes[i].dataAttributes[0].attributesJsonArray;
                                                  +		if (attributesJsonArray == undefined || attributesJsonArray.length == 0) {
                                                  +			continue;
                                                  +		}
                                                  +		var shapes = [];
                                                  +		shapes.push(selectedShape);
                                                  +		timerCount--;
                                                  +		handleShapeAttrValue(lanes[i], shapes, timerCount, isForce);
                                                  +	}
                                                  +}
                                                  +
                                                  +//统一的逻辑处理对泳道中的形状
                                                  +function handleShapeAttrValue(lane, shapes, timerCount, isForce) {
                                                  +	//获取lane中的attributesJsonArray
                                                  +	var attributesJsonArray = lane.dataAttributes[0].attributesJsonArray;
                                                  +	for (var i = 0; i < attributesJsonArray.length; i++) {
                                                  +		var attr = attributesJsonArray[i]
                                                  +		//处理每一个属性
                                                  +		if (true) {
                                                  +			//泳道属性值不存在跳过
                                                  +			if (attr.value == undefined || attr.value == "" || attr.value == null) {
                                                  +				continue;
                                                  +			}
                                                  +			for (var p = 0; p < shapes.length; p++) {
                                                  +				//获取shape的attributesJsonArray
                                                  +				var dataAttributes = shapes[p].dataAttributes;
                                                  +				var shapeName = shapes[p].name;
                                                  +				//attr的scope是否包含当前形状
                                                  +				var scope = attr.scope;
                                                  +				if (scope.indexOf("*") < 0 && scope.indexOf(shapeName) < 0) {
                                                  +					continue;
                                                  +				}
                                                  +				for (var m = 0; m < dataAttributes.length; m++) {
                                                  +					if (dataAttributes[m].attributesJsonArray != undefined && dataAttributes[m].attributesJsonArray != null) {
                                                  +						var shapeAttrsJsonArray = dataAttributes[m].attributesJsonArray;
                                                  +						if (shapeAttrsJsonArray.length > 0) {
                                                  +							var flag = false;
                                                  +							var tmpShapeAttrJson;
                                                  +							for (var k = 0; k < shapeAttrsJsonArray.length; k++) {
                                                  +								if (shapeAttrsJsonArray[k].id == attr.id) {
                                                  +									flag = true;
                                                  +									tmpShapeAttrJson = shapeAttrsJsonArray[k];
                                                  +									continue;
                                                  +								}
                                                  +							}
                                                  +							//shapes中已经存在了lane中的属性
                                                  +							if (flag) {
                                                  +								handleShapeAttrInLane(attr, tmpShapeAttrJson, lane.id, shapes[p].id, shapes[p].text, timerCount, isForce);
                                                  +							} else {//shapes中不存在了lane中的属性
                                                  +								handleShapeAttrNotInLane(attr, shapeAttrsJsonArray, shapeName, lane.id, shapes[p].id, shapes[p].text, timerCount);
                                                  +							}
                                                  +						} else {
                                                  +							//shapes中不存在lane中的属性
                                                  +							handleShapeAttrNotInLane(attr, shapeAttrsJsonArray, shapeName, lane.id, shapes[p].id, shapes[p].text, timerCount);
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +//处理shapes中已经存在了lane中的属性
                                                  +var isForceShowError;
                                                  +var tmpAttrIdValue = [];
                                                  +function handleShapeAttrInLane(attr, shapeAttrJson, laneId, shapeId, shapeText, timerCount, isForce) {
                                                  +	//关联类型数据
                                                  +	if (shapeAttrJson.type == "relation") {
                                                  +		if (shapeAttrJson.value == "") {
                                                  +			shapeAttrJson.value = [];
                                                  +		}
                                                  +		//保存数据库(timerCount使用与取属性值的并集来决定什么时候插入数据库)
                                                  +		if (isForce != undefined && isForce) {
                                                  +			return;
                                                  +		} else {
                                                  +			if (isLaneForceRefreshShapeAttr && isShowError) {
                                                  +				isForceShowError = true;
                                                  +				tmpAttrIdValue.push(attr.id);
                                                  +				isShowError = false;
                                                  +			}
                                                  +			/*var tmpValue = attr.value.concat(shapeAttrJson.value);
                                                  +            //去重
                                                  +            var finalValue = tmpValue.unique();
                                                  +            shapeAttrJson.value = finalValue;*/
                                                  +		}
                                                  +		saveRelationAttrToDB(laneId, shapeAttrJson.id, shapeId, shapeText, shapeAttrJson, timerCount);
                                                  +	} else if (shapeAttrJson.type == "awsorg") {
                                                  +		if (shapeAttrJson.value == "") {
                                                  +			shapeAttrJson.value = [];
                                                  +		}
                                                  +		//保存数据库(timerCount使用与取属性值的并集来决定什么时候插入数据库)
                                                  +		if (isForce != undefined && isForce) {
                                                  +			return;
                                                  +		} else {
                                                  +			if (isLaneForceRefreshShapeAttr && isShowError) {
                                                  +				isForceShowError = true;
                                                  +				tmpAttrIdValue.push(attr.id);
                                                  +				isShowError = false;
                                                  +			}
                                                  +			/*var tmpValue = attr.value.concat(shapeAttrJson.value);
                                                  +            //去重
                                                  +            var finalValue = tmpValue.unique();
                                                  +            shapeAttrJson.value = finalValue;*/
                                                  +		}
                                                  +		saveAwsorgAttrToDB(laneId, shapeAttrJson.id, shapeId, shapeText, shapeAttrJson, timerCount);
                                                  +	} else {
                                                  +		shapeAttrJson.value = attr.value;
                                                  +	}
                                                  +}
                                                  +
                                                  +//处理shapes中不存在lane中的属性
                                                  +function handleShapeAttrNotInLane(attr, shapeAttrsJsonArray, shapeName, laneId, shapeId, shapeText, timerCount) {
                                                  +	var tmpAttr = JSON.parse(JSON.stringify(attr));
                                                  +	tmpAttr.shapeName = shapeName;
                                                  +	shapeAttrsJsonArray.push(tmpAttr);
                                                  +	//关联类型数据保存数据库
                                                  +	if (tmpAttr.type == "relation") {
                                                  +		saveRelationAttrToDB(laneId, tmpAttr.id, shapeId, shapeText, null, timerCount);
                                                  +	}
                                                  +	if (tmpAttr.type == "awsorg") {
                                                  +		saveAwsorgAttrToDB(laneId, tmpAttr.id, shapeId, shapeText, null, timerCount);
                                                  +	}
                                                  +}
                                                  +
                                                  +function handleLaneTextValue(lane) {
                                                  +	var attributesJsonArray = lane.dataAttributes[0].attributesJsonArray;
                                                  +	var tmpValue = [];
                                                  +	var flag = true;
                                                  +	for (var i = 0; i < attributesJsonArray.length; i++) {
                                                  +		var attr = attributesJsonArray[i]
                                                  +		if (attr.value == undefined || attr.value == "" || attr.value == null) {
                                                  +			continue;
                                                  +		} else {
                                                  +			if (attr.type == "relation") {
                                                  +				//flag是用于防止多次查询同样的值导致数据重复
                                                  +				if (flag) {
                                                  +					flag = false;
                                                  +					$.ajax({
                                                  +						type : "POST",
                                                  +						async : false,
                                                  +						url : "./jd?sid="
                                                  +							+ CLB.sid
                                                  +							+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_name",
                                                  +						data : {
                                                  +							fileId : ruuid,
                                                  +							shapeId : lane.id,
                                                  +							shapeName: lane.name,
                                                  +							shapeCategory: lane.category == 'lane' ? methodId : lane.category
                                                  +						},
                                                  +						success : function(msg) {
                                                  +							if (msg.result == "ok") {
                                                  +								var listData = msg.data.relationModelList;
                                                  +								for (var i = 0; i < listData.length; i++) {
                                                  +									tmpValue.push(listData[i].relationShapeText);
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +					});
                                                  +				}
                                                  +			} else if (attr.type == "awsorg") {
                                                  +				if (flag) {
                                                  +					flag = false;
                                                  +					$.ajax({
                                                  +						type : "POST",
                                                  +						async : false,
                                                  +						url : "./jd?sid="
                                                  +							+ CLB.sid
                                                  +							+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_aws_org_relevance_name_query",
                                                  +						data : {
                                                  +							fileId : ruuid,
                                                  +							shapeId : lane.id,
                                                  +							shapeName: lane.name,
                                                  +							shapeCategory: lane.category == 'lane' ? methodId : lane.category
                                                  +						},
                                                  +						success : function(msg) {
                                                  +							if (msg.result == "ok") {
                                                  +								var listData = msg.data.attrData[attr.id];
                                                  +								for (var i = 0; i < listData.length; i++) {
                                                  +									tmpValue.push(listData[i].name);
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +					});
                                                  +				}
                                                  +			} else {
                                                  +				tmpValue.push(attr.value);
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	if (tmpValue.length > 0) {
                                                  +		tmpValue.unique();
                                                  +		var tmp = tmpValue.join(",");
                                                  +		lane.text = tmp;
                                                  +	} /*else {
                                                  +		lane.text = lane.title;
                                                  +	}*/
                                                  +}
                                                  +
                                                  +function saveRelationAttrToDB(laneId, attrId, shapeId, shapeText, shapeAttrJson, timerCount) {
                                                  +	var lane = Model.define.elements[laneId];
                                                  +	var shapesObj = [];
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		async : false,
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_name",
                                                  +		data : {
                                                  +			fileId : ruuid,
                                                  +			shapeId : laneId,
                                                  +			shapeName: lane.name,
                                                  +			shapeCategory: lane.category == 'lane' ? methodId : lane.category
                                                  +		},
                                                  +		success : function(msg) {
                                                  +			if (msg.result == "ok") {
                                                  +				var listData = msg.data.relationModelList;
                                                  +				for (var i = 0; i < listData.length; i++) {
                                                  +					var tmp = {};
                                                  +					tmp.attrId = attrId;
                                                  +					tmp.fileId = ruuid;
                                                  +					tmp.relationFileId = listData[i].relationFileId;
                                                  +					tmp.relationShapeId = listData[i].relationShapeId;
                                                  +					tmp.relationShapeText = listData[i].relationShapeText;
                                                  +					tmp.shapeId = shapeId;
                                                  +					tmp.shapeText = shapeText;
                                                  +					shapesObj.push(tmp);
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +	if (timerCount != undefined && timerCount != null) {
                                                  +		if (timerCount == 0) {
                                                  +			operateDB(shapesObj, shapeId, attrId, shapeAttrJson);
                                                  +		}
                                                  +	} else {
                                                  +		operateDB(shapesObj, shapeId, attrId, shapeAttrJson);
                                                  +	}
                                                  +}
                                                  +
                                                  +function saveAwsorgAttrToDB(laneId, attrId, shapeId, shapeText, shapeAttrJson, timerCount) {
                                                  +	//var objArray = attr_content_iframe_relevance_aws.getRelevanceAwsData();
                                                  +	var lane = Model.define.elements[laneId];
                                                  +	var shapesObj = [];
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		async : false,
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_aws_org_relevance_name_query",
                                                  +		data : {
                                                  +			fileId : ruuid,
                                                  +			shapeId : laneId,
                                                  +			shapeName: lane.name,
                                                  +			shapeCategory: lane.category == 'lane' ? methodId : lane.category
                                                  +		},
                                                  +		success : function(msg) {
                                                  +			if (msg.result == "ok") {
                                                  +				var listData = msg.data.attrData[attrId];
                                                  +				shapesObj = listData;
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +	/*for (var i in objArray) {
                                                  +        shapesObj.push(objArray[i]);
                                                  +    }*/
                                                  +	if (timerCount != undefined && timerCount != null) {
                                                  +		if (timerCount == 0) {
                                                  +			operateAwsorgDB(shapesObj, shapeId, shapeText, attrId, shapeAttrJson);
                                                  +		}
                                                  +	} else {
                                                  +		operateAwsorgDB(shapesObj, shapeId, shapeText, attrId, shapeAttrJson);
                                                  +	}
                                                  +}
                                                  +
                                                  +function operateAwsorgDB(shapesObj, shapeId, shapeText, attrId, shapeAttrJson) {
                                                  +	var shapeGroupId = "";
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		async : false,
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_aws_org_relevance_save",
                                                  +		data : {
                                                  +			relationAwsOrg : json2String(shapesObj),
                                                  +			shapeId : shapeId,
                                                  +			fileId : ruuid,
                                                  +			shapeGroupId : shapeGroupId,
                                                  +			attrId : attrId,
                                                  +			shapeText : shapeText
                                                  +		},
                                                  +		success : function(msg) {
                                                  +			if (msg.result == "ok") {
                                                  +
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +	//处理数据属性及时显示问题
                                                  +	var tmpShape = Utils.getSelected()[0];
                                                  +	var tmpTitle = tmpShape.title;
                                                  +	if (tmpShape.name == "linker") {
                                                  +		return;
                                                  +	}
                                                  +	if (tmpTitle.indexOf("泳道") > -1 || tmpTitle.indexOf("泳池") > -1 || tmpTitle.indexOf("分隔") > -1) {
                                                  +		return;
                                                  +	}
                                                  +	var tmpAttributesJsonArray;
                                                  +	var tmpDataAttributes = tmpShape.dataAttributes;
                                                  +	for (var m = 0; m < tmpDataAttributes.length; m++) {
                                                  +		if (tmpDataAttributes[m].attributesJsonArray != undefined && tmpDataAttributes[m].attributesJsonArray != null) {
                                                  +			tmpAttributesJsonArray = tmpDataAttributes[m].attributesJsonArray;
                                                  +		}
                                                  +	}
                                                  +	getPrivateAttributeHtml(tmpAttributesJsonArray, "tagContentTable0", tmpShape);
                                                  +}
                                                  +function operateDB(shapesObj, shapeId, attrId, shapeAttrJson) {
                                                  +	//添加关联属性时,更新relationShapeModelObject的值
                                                  +	if (shapesObj.length > 0) {
                                                  +		for (var i = 0; i < shapesObj.length; i++) {
                                                  +			var temp = shapesObj[i];
                                                  +			var shapeIdAttrId = temp.shapeId + "_" + temp.attrId;
                                                  +			relationShapeModelObject[shapeIdAttrId] = temp.relationShapeText;
                                                  +		}
                                                  +	}
                                                  +	var shapeGroupId = "";
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		async : false,
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_save",
                                                  +		data : {
                                                  +			relationShapes : json2String(shapesObj),
                                                  +			shapeId : shapeId,
                                                  +			fileUUID : ruuid,
                                                  +			shapeGroupId : shapeGroupId,
                                                  +			attrId : attrId,
                                                  +			ref: shapeAttrJson.ref
                                                  +		},
                                                  +		success : function(msg) {
                                                  +			if (msg.result == "ok") {
                                                  +				var dataList = msg.data.list;
                                                  +				if (shapeAttrJson != null) {
                                                  +					var tmp = [];
                                                  +					for (var i = 0; i < dataList.length; i++) {
                                                  +						tmp.push(dataList[i].relationShapeId);
                                                  +					}
                                                  +					shapeAttrJson.value = tmp;
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +	//处理数据属性及时显示问题
                                                  +	var tmpShape = Utils.getSelected()[0];
                                                  +	var tmpTitle = tmpShape.title;
                                                  +	if (tmpShape.name == "linker") {
                                                  +		return;
                                                  +	}
                                                  +	if (tmpTitle.indexOf("泳道") > -1 || tmpTitle.indexOf("泳池") > -1 || tmpTitle.indexOf("分隔") > -1) {
                                                  +		return;
                                                  +	}
                                                  +	var tmpAttributesJsonArray;
                                                  +	var tmpDataAttributes = tmpShape.dataAttributes;
                                                  +	for (var m = 0; m < tmpDataAttributes.length; m++) {
                                                  +		if (tmpDataAttributes[m].attributesJsonArray != undefined && tmpDataAttributes[m].attributesJsonArray != null) {
                                                  +			tmpAttributesJsonArray = tmpDataAttributes[m].attributesJsonArray;
                                                  +		}
                                                  +	}
                                                  +	getPrivateAttributeHtml(tmpAttributesJsonArray, "tagContentTable0", tmpShape);
                                                  +}
                                                  +
                                                  +/**
                                                  + * 更新多个形状定义
                                                  + *
                                                  + * @param {}
                                                  + *            shapes
                                                  + */
                                                  +Model.updateMulti = function(shapes) {
                                                  +	if (isAutoSave == "0" ){
                                                  +		$("#saving_tip").css("color", "rgb(255, 0, 0)");
                                                  +		$("#saving_tip").text("文件已修改,未保存");
                                                  +	}
                                                  +	var updateShapes = [];
                                                  +	var oriShapes = [];
                                                  +	//根据属性值来修改泳道名称
                                                  +	var selectedShape = Utils.getSelected()[0];
                                                  +	if (selectedShape != undefined && selectedShape.name != "linker" && selectedShape.title.indexOf("泳道") > -1) {
                                                  +		handleLaneTextValue(selectedShape);
                                                  +	}
                                                  +	for (var i = 0; i < shapes.length; i++) {
                                                  +		var shape = shapes[i];
                                                  +		if (shape.name != "linker") {
                                                  +			//shape.textBlock = shape.getTextBlock();
                                                  +			shape.textBlockFinal = shape.getTextBlock();
                                                  +		}
                                                  +		if (this.define.elements[shape.id]) {
                                                  +			// 判断更新的图形是否还存在,可能有在修改过程中被他人删除的情况
                                                  +			this.define.elements[shape.id] = Utils.copy(shape);
                                                  +			// 添加更新以前的图形
                                                  +			oriShapes.push(Utils.copy(this.getPersistenceById(shape.id)));
                                                  +			// 添加更新后的图形
                                                  +			updateShapes.push(Utils.copy(shape));
                                                  +			// 持久化图形
                                                  +			this.persistence.elements[shape.id] = Utils.copy(shape);
                                                  +		}
                                                  +	}
                                                  +	this.build();
                                                  +	var msgContent = {
                                                  +		shapes : oriShapes,
                                                  +		updates : updateShapes
                                                  +	};
                                                  +	if (isAutoSave == "1" ){
                                                  +		CLB.cmdList = [{
                                                  +			"type" : "message",
                                                  +			"cmd" : "com.actionsoft.apps.coe.pal_pl_repository_designer_message"
                                                  +		}];
                                                  +	}
                                                  +	MessageSource.send("update", msgContent);
                                                  +};
                                                  +
                                                  +// 重写快捷键
                                                  +Designer.hotkey.init = function() {
                                                  +	// 初始化快捷键
                                                  +	var movingShapes = null;
                                                  +	// 在外围定义movingShapes变量,目的是在移动形状时,不重复获取
                                                  +	$(document).unbind("keydown.hotkey").bind("keydown.hotkey", function(e) {
                                                  +		if (e.ctrlKey && e.keyCode == 18 && 46) {
                                                  +			return;
                                                  +		}
                                                  +		// if(e.ctrlKey){}
                                                  +		if (e.ctrlKey && e.keyCode == 65) {
                                                  +			// 全选ctrl+a
                                                  +			Designer.selectAll();
                                                  +			e.preventDefault();
                                                  +		} else if (e.keyCode == 46 || e.keyCode == 8) {
                                                  +			// 删除 Delete或者Backspace
                                                  +			Designer.op.removeShape();
                                                  +			e.preventDefault();
                                                  +		} else if (e.ctrlKey && e.keyCode == 82) {
                                                  +			//数据配置 Ctrl+R
                                                  +			showShapeConfig();
                                                  +			e.preventDefault();
                                                  +		} else if (e.ctrlKey && e.keyCode == 90) {
                                                  +			// 撤销ctrl+z
                                                  +			MessageSource.undo();
                                                  +			e.preventDefault();
                                                  +		} else if (e.ctrlKey && e.keyCode == 89) {
                                                  +			// 恢复ctrl+y
                                                  +			MessageSource.redo();
                                                  +			e.preventDefault();
                                                  +		} else if (e.ctrlKey && !e.shiftKey && e.keyCode == 67) {
                                                  +			// 复制Ctrl+C
                                                  +//			if (!$("#designer_shape_copy_paste").is(":hidden")) {
                                                  +//				return;
                                                  +//			}
                                                  +			var selecteds = Utils.getSelected();
                                                  +			if (selecteds.length > 0) {
                                                  +				/*
                                                  +				 * var options = { title : "复制选项", content :
                                                  +				 * "当前为普通复制,确定要进行普通复制吗?进行出现复制请点取消", model : false, onConfirm :
                                                  +				 * function() {// 普通复制 DesignerCopyPaste.generalCopy(); },
                                                  +				 * onCancel : function() {// 出现复制
                                                  +				 * DesignerCopyPaste.copyElement(e);
                                                  +				 * DesignerCopyPaste.isAppearPaste = true; } };
                                                  +				 */
                                                  +				// $.confirm(options);
                                                  +//				$("#designer_shape_copy_paste").attr("title", "复制选项");
                                                  +//				$("#designer_shape_copy_paste").dialog({
                                                  +//					buttons : [{
                                                  +//						text : '确定',
                                                  +//						cls : "blue",
                                                  +//						handler : function() {
                                                  +//							DesignerCopyPaste.propsX = 0;
                                                  +//							DesignerCopyPaste.propsY = 0;
                                                  +//							var valueRadio = $("input[type='radio'][name='shape_radio']:checked").val();
                                                  +//							if (valueRadio == "copy") {
                                                  +//								// DesignerCopyPaste.generalCopy();
                                                  +				DesignerCopyPaste.customCopyToServer();
                                                  +				isAppearCopy = false;
                                                  +//							} else if (valueRadio == "appearCopy") {
                                                  +//								DesignerCopyPaste.copyElement(e);
                                                  +//								// DesignerCopyPaste.isAppearPaste = true;
                                                  +//								isAppearCopy = true;
                                                  +//							}
                                                  +//							$("#designer_shape_copy_paste").dialog('close');
                                                  +//						}
                                                  +//					}, {
                                                  +//						text : '关闭',
                                                  +//						handler : function() {
                                                  +//							$("#designer_shape_copy_paste").dialog('close');
                                                  +//						}
                                                  +//					}]
                                                  +//				});
                                                  +			} else {
                                                  +				$.simpleAlert("请选择要复制的内容");
                                                  +			}
                                                  +			e.preventDefault();
                                                  +		} else if (e.ctrlKey && e.keyCode == 88) {
                                                  +			// 剪切ctrl+x
                                                  +			// 包含task类型时,禁用快捷键
                                                  +			if (checkSeletedNodeType()) {
                                                  +				return;
                                                  +			}
                                                  +			Designer.clipboard.cut();
                                                  +			DesignerCopyPaste.customCopyToServer();
                                                  +			Designer.op.removeShape();
                                                  +			DesignerCopyPaste.isCut = true;
                                                  +			e.preventDefault();
                                                  +		} else if (e.ctrlKey && e.keyCode == 86) {
                                                  +			if (role == "viewer") {
                                                  +				$.simpleAlert("只读文件不允许进行该操作");
                                                  +				return;
                                                  +			}
                                                  +			if (DesignerCopyPaste.isCut) {
                                                  +				DesignerCopyPaste.requestCustomPasteContent();
                                                  +				// Designer.clipboard.paste();// DesignerCopyPaste.requestCustomPasteContent()中已包含
                                                  +				DesignerCopyPaste.isCut = false;
                                                  +			} else
                                                  +				// 粘贴ctrl+v
                                                  +				// 包含task类型时,禁用快捷键
                                                  +				DesignerCopyPaste.pasteSelect(e);
                                                  +			/*
                                                  +			 * $("#designer_shape_custom_paste").attr("title", "粘贴选项");
                                                  +			 * $("#designer_shape_custom_paste").dialog({ buttons : [{ text :
                                                  +			 * '确定', cls : "blue", handler : function() { var valueRadio =
                                                  +			 * $("input[type='radio'][name='shape_radio_paste']:checked").val();
                                                  +			 * if (valueRadio == "paste") {
                                                  +			 * DesignerCopyPaste.requestCustomPasteContent(); } else if
                                                  +			 * (valueRadio == "appearPaste") { DesignerCopyPaste.pasteElement();
                                                  +			 * e.preventDefault(); }
                                                  +			 * $("#designer_shape_custom_paste").dialog('close'); } }, { text :
                                                  +			 * '关闭', handler : function() {
                                                  +			 * $("#designer_shape_custom_paste").dialog('close'); } }] }); if
                                                  +			 * (DesignerCopyPaste.isAppearPaste) {
                                                  +			 * DesignerCopyPaste.pasteElement(e); e.preventDefault(); } else {
                                                  +			 * Designer.clipboard.paste(); }
                                                  +			 */} else if (e.ctrlKey && e.keyCode == 68) {
                                                  +			// 复用ctrl+d
                                                  +			// 包含task类型时,禁用快捷键
                                                  +			if (checkSeletedNodeType()) {
                                                  +				return;
                                                  +			}
                                                  +			Designer.clipboard.duplicate();
                                                  +			e.preventDefault();
                                                  +		} else if (e.ctrlKey && e.shiftKey && e.keyCode == 66) {
                                                  +			// 格式刷ctrl+b
                                                  +			Designer.clipboard.brush();
                                                  +			e.preventDefault();
                                                  +		} else if (e.ctrlKey && e.keyCode == 190) {
                                                  +			// 放大ctrl+ >
                                                  +			Designer.zoomIn();
                                                  +			e.preventDefault();
                                                  +		} else if (e.ctrlKey && e.keyCode == 188) {
                                                  +			// 缩小ctrl+ <
                                                  +			Designer.zoomOut();
                                                  +			e.preventDefault();
                                                  +		} else if (e.keyCode >= 37 && e.keyCode <= 40) {
                                                  +			// 移动选中的图形,上下左右
                                                  +			if (movingShapes == null) {
                                                  +				var selected = Utils.getSelected();
                                                  +				// 先获取形状的家族图形,一起移动,父级、子级、兄弟
                                                  +				var familyShapes = Utils.getFamilyShapes(selected);
                                                  +				selected = selected.concat(familyShapes);
                                                  +				// 获取包含的图形,一起移动
                                                  +				var containedShapes = Utils.getContainedShapes(selected);
                                                  +				selected = selected.concat(containedShapes);
                                                  +				// 获取吸附的图形,一起移动
                                                  +				var attachedShapes = Utils.getAttachedShapes(selected);
                                                  +				selected = selected.concat(attachedShapes);
                                                  +				// 获取选中形状上的连接线
                                                  +				var outlinkers = Utils.getOutlinkers(selected);
                                                  +				movingShapes = selected.concat(outlinkers);
                                                  +			}
                                                  +			if (movingShapes.length > 0) {
                                                  +				e.preventDefault();
                                                  +				// 步长为10,如果按着ctrl,为微调,步长为1
                                                  +				var step = 10;
                                                  +				if (e.ctrlKey) {
                                                  +					step = 1;
                                                  +				}
                                                  +				if (e.keyCode == 37) {
                                                  +					// 左移
                                                  +					Designer.op.moveShape(movingShapes, {
                                                  +						x : -step,
                                                  +						y : 0
                                                  +					});
                                                  +				} else if (e.keyCode == 38) {
                                                  +					// 上移
                                                  +					Designer.op.moveShape(movingShapes, {
                                                  +						x : 0,
                                                  +						y : -step
                                                  +					});
                                                  +				} else if (e.keyCode == 39) {
                                                  +					// 右移
                                                  +					Designer.op.moveShape(movingShapes, {
                                                  +						x : step,
                                                  +						y : 0
                                                  +					});
                                                  +				} else if (e.keyCode == 40) {
                                                  +					// 下移
                                                  +					Designer.op.moveShape(movingShapes, {
                                                  +						x : 0,
                                                  +						y : step
                                                  +					});
                                                  +				}
                                                  +				$(document).unbind("keyup.moveshape").bind("keyup.moveshape",
                                                  +					function() {
                                                  +						// 发生了拖动,修改定义
                                                  +						Model.updateMulti(movingShapes);
                                                  +						movingShapes = null;
                                                  +						$(document).unbind("keyup.moveshape");
                                                  +						Designer.op.hideTip();
                                                  +						if (isAutoSave == "1" ){
                                                  +							$("#saving_tip").css("color", "rgb(255, 0, 0)");
                                                  +							$("#saving_tip").text("文件已修改,未保存");
                                                  +						}
                                                  +					});
                                                  +			}
                                                  +		} else if (e.keyCode == 221 && e.ctrlKey) {
                                                  +			// 顶层、上移一层ctrl+]
                                                  +			var type = "front";
                                                  +			if (e.shiftKey) {
                                                  +				type = "forward";
                                                  +			}
                                                  +			Designer.layerShapes(type);
                                                  +		} else if (e.keyCode == 219 && e.ctrlKey) {
                                                  +			// 底层、下移一层ctrl+[
                                                  +			var type = "back";
                                                  +			if (e.shiftKey) {
                                                  +				type = "backward";
                                                  +			}
                                                  +			Designer.layerShapes(type);
                                                  +		} else if (e.keyCode == 71 && e.ctrlKey) {
                                                  +			/*
                                                  +			 * e.preventDefault(); //组合、取消组合ctrl+G if (e.shiftKey) {
                                                  +			 * Designer.ungroup(); } else { Designer.group(); }
                                                  +			 */
                                                  +		} else if (e.keyCode == 76 && e.ctrlKey) {
                                                  +			e.preventDefault();
                                                  +			// 锁定、解锁ctrl+L
                                                  +			if (e.shiftKey) {
                                                  +				Designer.unlockShapes();
                                                  +			} else {
                                                  +				Designer.lockShapes();
                                                  +			}
                                                  +		} else if (e.keyCode == 18) {
                                                  +			// Alt,可拖动画布
                                                  +			Designer.op.changeState("drag_canvas");
                                                  +		} else if (e.keyCode == 27) {
                                                  +			// Esc
                                                  +			if (!Designer.op.state) {
                                                  +				Utils.unselect();
                                                  +				$(".menu.list").hide();
                                                  +				$(".menu").hide();
                                                  +				$(".color_picker").hide();
                                                  +				// AWS添加的内容
                                                  +				$(".dock_view").hide();
                                                  +				// 强制显示导航小窗口
                                                  +				// $(".dock_view_navigator").show();
                                                  +			} else if (Designer.op.state == "creating_free_text"
                                                  +				|| Designer.op.state == "creating_free_linker") {
                                                  +				Designer.op.resetState();
                                                  +			}
                                                  +
                                                  +			/** 关闭窗口属性窗口* */
                                                  +			/*if ($('#dialog_wf_version').dialog()) {
                                                  +				$('#dialog_wf_version').dialog('close');
                                                  +			}*/
                                                  +
                                                  +		} else if (e.keyCode == 84 && !e.ctrlKey) {
                                                  +			// T,插入文本
                                                  +			$(".menu.list").hide();
                                                  +			Designer.op.changeState("creating_free_text");
                                                  +		} else if (e.keyCode == 73 && !e.ctrlKey) {
                                                  +			// I,插入图片
                                                  +			// $(".menu.list").hide();
                                                  +			// UI.showImageSelect(function(fileId, w, h) {
                                                  +			// UI.insertImage(fileId, w, h);
                                                  +			// });
                                                  +			// $("#designer_contextmenu").hide();
                                                  +		} else if (e.keyCode == 76 && !e.ctrlKey) {
                                                  +			// T,插入文本
                                                  +			$(".menu.list").hide();
                                                  +			Designer.op.changeState("creating_free_linker");
                                                  +			$("#designer_contextmenu").hide();
                                                  +		} else if (e.keyCode == 66 && e.ctrlKey) {
                                                  +			// Ctrl + B,加粗
                                                  +			var selectedIds = Utils.getSelectedIds();
                                                  +			if (selectedIds.length > 0) {
                                                  +				var shape = Model.getShapeById(selectedIds[0]);
                                                  +				Designer.setFontStyle({
                                                  +					bold : !shape.fontStyle.bold
                                                  +				});
                                                  +				UI.update();
                                                  +			}
                                                  +		} else if (e.keyCode == 73 && e.ctrlKey) {
                                                  +			// Ctrl + I,斜体
                                                  +			var selectedIds = Utils.getSelectedIds();
                                                  +			if (selectedIds.length > 0) {
                                                  +				var shape = Model.getShapeById(selectedIds[0]);
                                                  +				Designer.setFontStyle({
                                                  +					italic : !shape.fontStyle.italic
                                                  +				});
                                                  +				UI.update();
                                                  +			}
                                                  +		} else if (e.keyCode == 85 && e.ctrlKey) {
                                                  +			// Ctrl + U,下划线
                                                  +			var selectedIds = Utils.getSelectedIds();
                                                  +			if (selectedIds.length > 0) {
                                                  +				var shape = Model.getShapeById(selectedIds[0]);
                                                  +				Designer.setFontStyle({
                                                  +					underline : !shape.fontStyle.underline
                                                  +				});
                                                  +				UI.update();
                                                  +			}
                                                  +			e.preventDefault();
                                                  +		} else if (e.keyCode == 32 && !e.ctrlKey) {
                                                  +			// 空格,编辑文本
                                                  +			var selectedIds = Utils.getSelectedIds();
                                                  +			if (selectedIds.length == 1) {
                                                  +				var shape = Model.getShapeById(selectedIds[0]);
                                                  +				Designer.op.editShapeText(shape);
                                                  +			}
                                                  +			e.preventDefault();
                                                  +		} else if (e.shiftKey && e.keyCode == 80) {
                                                  +			// 添加打开全局属性的和节点属性的快捷键 Shift+P
                                                  +			BPMNBiz.showPropertiesDialog();
                                                  +		} else if (e.keyCode == 121) {
                                                  +			// F10,进入演示视图
                                                  +			e.preventDefault();
                                                  +			Dock.enterPresentation();
                                                  +		}  else if (e.ctrlKey && e.shiftKey && e.keyCode == 72 && installBatch) {
                                                  +			// 批量替换
                                                  +			UI.batchReplace();
                                                  +			e.preventDefault();
                                                  +		}
                                                  +	});
                                                  +	$("input,textarea,select").die().live("keydown.hotkey", function(e) {
                                                  +		// 阻止冒泡
                                                  +		e.stopPropagation();
                                                  +	});
                                                  +};
                                                  +
                                                  +/**
                                                  + * 获取容器图形中包含的图形(未选中的)
                                                  + *
                                                  + * @param {}
                                                  + *            shapes
                                                  + */
                                                  +Utils.getContainedShapes = function(shapes) {
                                                  +	var containedShapes = [];
                                                  +	var containedIds = [];
                                                  +	for (var i = 0; i < shapes.length; i++) {
                                                  +		var shape = shapes[i];
                                                  +		if (shape != undefined && shape.name != "linker" && shape.attribute
                                                  +			&& shape.attribute.container) {
                                                  +			var shapeContained = getContained(shape);
                                                  +			containedShapes = containedShapes.concat(shapeContained);
                                                  +		}
                                                  +	}
                                                  +	/**
                                                  +	 * 获取一个容器图形包含的图形
                                                  +	 */
                                                  +	function getContained(shape) {
                                                  +		var contained = [];
                                                  +		for (var i = Model.orderList.length - 1; i >= 0; i--) {
                                                  +			var shapeId = Model.orderList[i].id;
                                                  +			// 不是自己,并且没有选中,并且不是容器
                                                  +			if (shape.id != shapeId && !Utils.isSelected(shapeId)
                                                  +				&& containedIds.indexOf(shapeId) < 0) {
                                                  +				var testShape = Model.getShapeById(shapeId);
                                                  +				// 并且不是容器
                                                  +				if (!testShape.attribute
                                                  +					|| typeof testShape.attribute.container == "undefined"
                                                  +					|| testShape.attribute.container == false || testShape.name == 'callActivityCallingProcess' || testShape.name == 'group') { //callActivityCallingProcess调用子流程,group组
                                                  +					// 并且不是家族图形
                                                  +					if (!Utils.isFamilyShape(testShape, shape)) {
                                                  +						// 被判断图形的中心为依据
                                                  +						var rotatedProps = Utils.getShapeBox(testShape);
                                                  +						if (Utils.rectInRect(rotatedProps, shape.props)) {
                                                  +							contained.push(testShape);
                                                  +							containedIds.push(shapeId);
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		return contained;
                                                  +	}
                                                  +
                                                  +	return containedShapes;
                                                  +};
                                                  +// 设置cookie
                                                  +function setCookie(name, value) {
                                                  +	var today = new Date()
                                                  +	var expires = new Date()
                                                  +	expires.setTime(today.getTime() + 1000 * 60 * 60 * 24 * 365)
                                                  +	document.cookie = name + "=" + escape(value) + "; expires="
                                                  +		+ expires.toGMTString()
                                                  +}
                                                  +
                                                  +function getCookie(Name) {
                                                  +	var search = Name + "=";
                                                  +	if (document.cookie.length > 0) {
                                                  +		offset = document.cookie.indexOf(search);
                                                  +		if (offset != -1) {
                                                  +			offset += search.length;
                                                  +			end = document.cookie.indexOf(";", offset);
                                                  +			if (end == -1)
                                                  +				end = document.cookie.length;
                                                  +			return unescape(document.cookie.substring(offset, end));
                                                  +		} else
                                                  +			return "";
                                                  +	}
                                                  +}
                                                  +// 复制出现的相关js,将图形的信息存储在服务器的缓存上
                                                  +var DesignerCopyPaste = {
                                                  +	isCopy : false,
                                                  +	isPaste : false,
                                                  +	copyAndSaveToServer : function(message, shapeId, callback) {// 复制操作将信息更新到服务器的缓存中
                                                  +		var shapeGroupId = "shapeGroupId" + Utils.newId();
                                                  +		var shapeArr = [];
                                                  +		for (var j = 0; j < message.length; j++) {
                                                  +			var shape = message[j];
                                                  +			var gId = "shapeGroupId" + Utils.newId();
                                                  +			for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +				var attr = shape.dataAttributes[i];
                                                  +				if (!attr.shapeGroupId || attr.shapeGroupId == "") {
                                                  +					attr.shapeGroupId = gId;
                                                  +					attr.isCopy = "Y";
                                                  +				}
                                                  +			}
                                                  +			shapeArr.push(shape);
                                                  +		}
                                                  +		$.ajax({
                                                  +			type : "POST",
                                                  +			url : "./w?sid="
                                                  +				+ CLB.sid
                                                  +				+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_copy",
                                                  +			data : {
                                                  +				clientId : CLB.clientId,
                                                  +				userId : userId,
                                                  +				subject : chartId,
                                                  +				type : type,
                                                  +				ver : ver,
                                                  +				shapeId : shapeId,
                                                  +				messageJson : JSON.stringify(message),
                                                  +				shapeGroupId : shapeGroupId
                                                  +			},
                                                  +			success : function(msg) {
                                                  +				Model.updateMulti(shapeArr);
                                                  +			}
                                                  +		});
                                                  +		DesignerCopyPaste.isCopy = false;
                                                  +	},
                                                  +	requestPasteContent : function() {// 从服务器缓存中获取图形的数据
                                                  +		var data = "userId=" + userId + "&clientId=" + CLB.clientId
                                                  +			+ "&subject=" + chartId + "&action=command&type=" + type
                                                  +			+ "&ver=" + ver;
                                                  +		$.ajax({
                                                  +			type : "POST",
                                                  +			url : "./w?sid="
                                                  +				+ CLB.sid
                                                  +				+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_paste_ajax",
                                                  +			data : data,
                                                  +			success : function(data) {
                                                  +				var msg = eval("(" + data + ")");
                                                  +				if (msg.data.result == "ok") {
                                                  +					var tempCheckShape = msg.data.shape[0];
                                                  +					if (tempCheckShape.category == "bpmn") {
                                                  +						tempCheckShape.category = "process_bpmn2";
                                                  +					}
                                                  +					if ($("#panel_" + tempCheckShape.category + "") == null
                                                  +						|| $("#panel_" + tempCheckShape.category + "").length == 0) {
                                                  +						$.simpleAlert("不支持的形状,请确认已加载该类形状的解析器", "info", 2000);
                                                  +						return;
                                                  +					}
                                                  +					var json = msg.data.shape;
                                                  +					for (var i = 0; i < json.length; i++) {// 针对图形的函数进行初始化
                                                  +						var s = json[i];
                                                  +						s.props.x += DesignerCopyPaste.propsX;
                                                  +						s.props.y += DesignerCopyPaste.propsY;
                                                  +						DesignerCopyPaste.propsX += 20;
                                                  +						DesignerCopyPaste.propsY += 20;
                                                  +						if (s.name != "linker") {
                                                  +							Schema.initShapeFunctions(s);
                                                  +							for (var j = 0; j < s.dataAttributes.length; j++) {
                                                  +								var attr = s.dataAttributes[j];
                                                  +								attr.isCopy = "N";
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +					Designer.clipboard.copy(json);// 将图形信息复制到剪切板
                                                  +					Designer.clipboard.paste();// 粘贴图形
                                                  +					DesignerCopyPaste.pasteToDB(Utils.getSelected());// 更新到数据库
                                                  +				} else if (msg.data.result == "noShape"
                                                  +					|| msg.data.result == "error") {
                                                  +					$.simpleAlert("不支持的形状,请确认已加载该类形状的解析器", "info", 2000);
                                                  +					$("#simplealert>.msg").css("top", "15px");
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	propsX : 40,
                                                  +	propsY : 40,
                                                  +	unique : function(data) {
                                                  +		data = data || [];
                                                  +		var a = {};
                                                  +		for (var i = 0; i < data.length; i++) {
                                                  +			var v = data[i];
                                                  +			if (typeof(a[v]) == 'undefined') {
                                                  +				a[v] = 1;
                                                  +			}
                                                  +		};
                                                  +		data.length = 0;
                                                  +		for (var i in a) {
                                                  +			data[data.length] = i;
                                                  +		}
                                                  +		return data.length;
                                                  +	},
                                                  +	pasteToDB : function(message) {
                                                  +		$.ajax({
                                                  +			type : "POST",
                                                  +			url : "./w?sid="
                                                  +				+ CLB.sid
                                                  +				+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_paste",
                                                  +			data : {
                                                  +				clientId : CLB.clientId,
                                                  +				userId : userId,
                                                  +				subject : chartId,
                                                  +				messageJson : JSON.stringify(message)
                                                  +			},
                                                  +			success : function(msg) {
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	changeTitleListen : function(onError) {// 对复制出现过的图形进行监听
                                                  +		if (isAutoSave == "1" ){
                                                  +			var data = "userId=" + userId + "&clientId=" + CLB.clientId
                                                  +				+ "&subject=" + chartId + "&name=&listenTime=";
                                                  +			/*$.ajax({
                                                  +					url : "./jd?sid="
                                                  +							+ CLB.sid
                                                  +							+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_realtion_listen",
                                                  +					data : data,
                                                  +					type : "post",
                                                  +					success : function(msg) {
                                                  +						if (msg.data.result == "ok") {
                                                  +							DesignerCopyPaste.updateShapes(msg.data.shapes);
                                                  +						}
                                                  +						if ($("div[index=" + ruuid + "]", parent.document) != undefined) {
                                                  +							DesignerCopyPaste.changeTitleListen();
                                                  +						}
                                                  +					},
                                                  +					error : function(e) {
                                                  +						if (!(e.status == 0 && e.statusText == "abort")) {
                                                  +							// 发生错误,断开了,重连一次,如果连不上,提示错误
                                                  +							if (onError) {
                                                  +								onError();
                                                  +							} else {
                                                  +								if (DesignerCopyPaste) {
                                                  +									DesignerCopyPaste.changeTitleListen(
                                                  +											function() {
                                                  +											});
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +				});*/
                                                  +		}
                                                  +	},
                                                  +	updateShapes : function(k) {// 同步内容和属性的同步
                                                  +		if (!k) {
                                                  +			return;
                                                  +		}
                                                  +		/*
                                                  +		 * var arr = []; for (var j = 0; j < k.length; j++) { var b = k[j]; if
                                                  +		 * (b.id == DesignerCopyPaste.selectedShapeId) { continue; }
                                                  +		 * arr.push(b); }
                                                  +		 */
                                                  +		var arr = [];
                                                  +		for (var h = 0; h < k.length; h++) {
                                                  +			var d = k[h];
                                                  +			if (d.name != "linker") {
                                                  +				Schema.initShapeFunctions(d);
                                                  +				arr.push(d);
                                                  +				Designer.painter.renderShape(d);
                                                  +			}
                                                  +		}
                                                  +		DesignerCopyPaste.updateMulti(arr);
                                                  +		// var a = Utils.getSelectedIds();
                                                  +		// Utils.unselect();
                                                  +		// Utils.selectShape(a);
                                                  +		DesignerCopyPaste.selectedShapeId = "";
                                                  +	},
                                                  +	updateMulti : function(c) {
                                                  +		var a = [];
                                                  +		var b = [];
                                                  +		for (var e = 0; e < c.length; e++) {
                                                  +			var d = c[e];
                                                  +			if (Model.define.elements[d.id]) {
                                                  +				Model.define.elements[d.id] = Utils.copy(d);
                                                  +				b.push(Utils.copy(Model.getPersistenceById(d.id)));
                                                  +				a.push(Utils.copy(d));
                                                  +				Model.persistence.elements[d.id] = Utils.copy(d)
                                                  +			}
                                                  +		}
                                                  +		Model.build();
                                                  +	},
                                                  +	selectElement : function(elementId) {
                                                  +		// 设置为原来的颜色
                                                  +		// setColorForOriginalColor();
                                                  +		var shape = Model.getShapeById(elementId);
                                                  +		Designer.op.shapeSelectable(shape);
                                                  +		DesignerCopyPaste.setNodeStyle('line', {
                                                  +			'lineStyle' : 'Solid',
                                                  +			'lineWidth' : 2,
                                                  +			'lineColor' : '255,51,51',
                                                  +			'beginArrowStyle' : 'none',
                                                  +			'endArrowStyle' : 'solidArrow'
                                                  +		}, elementId);
                                                  +	},
                                                  +	setColorForOriginalColor : function() {
                                                  +		var keys = hashMap.keys();
                                                  +		for (var i = 0; i < keys.length; i++) {
                                                  +			var key = keys[i];
                                                  +			var color = hashMap.get(key);
                                                  +			setNodeStyle('line', color, key);
                                                  +		}
                                                  +	},
                                                  +	setNodeStyle : function(styleCategory, value, uuid) {
                                                  +		if (typeof(uuid) == "undefined") {
                                                  +			uuid = "";
                                                  +		}
                                                  +		if (styleCategory == "fill") {
                                                  +			var shape = Model.getShapeById(id);
                                                  +			var type = shape.fillStyle.type;
                                                  +			Designer.setFillStyleById(uuid, value);
                                                  +		} else if (styleCategory == "line") {
                                                  +			Designer.setLineStyleById(uuid, value);
                                                  +		}
                                                  +	},
                                                  +	selectedShapeId : "",
                                                  +	copyElement : function() {
                                                  +		// 复制ctrl+c
                                                  +		// 包含task类型时,禁用快捷键
                                                  +		if (Designer.status == "running") {
                                                  +			var selecteds = Utils.getSelected();
                                                  +			for (var i = 0; i < selecteds.length; i++) {
                                                  +				var task = selecteds[i];
                                                  +				if (task.groupName == "task") {
                                                  +					return;
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		Designer.clipboard.copy();
                                                  +		var jsonElements = Designer.clipboard.elements;
                                                  +		var isNot = false;
                                                  +		for (var i = 0; i < jsonElements.length; i++) {// 针对图形的函数进行初始化
                                                  +			var s = jsonElements[i];
                                                  +			if (s.name == "linker") {
                                                  +				isNot = true;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		DesignerCopyPaste.isCopy = true;// 表示是复制出现
                                                  +		var kkk = Utils.getSelected();
                                                  +		DesignerCopyPaste.copyAndSaveToServer(Utils.getSelected(),
                                                  +			jsonElements[0].id, function() {
                                                  +			});
                                                  +	},
                                                  +	pasteElement : function() {
                                                  +		// 粘贴ctrl+v
                                                  +		// 包含task类型时,禁用快捷键
                                                  +		if (checkSeletedNodeType()) {
                                                  +			return;
                                                  +		}
                                                  +		DesignerCopyPaste.isPaste = true;// 表示是粘贴出现
                                                  +		DesignerCopyPaste.requestPasteContent();
                                                  +	},
                                                  +	isAppearPaste : isExistCopy,
                                                  +	generalCopy : function() {// 普通复制
                                                  +		Designer.clipboard.copy();
                                                  +		var jsonElements = Designer.clipboard.elements;
                                                  +		for (var j = 0; j < jsonElements.length; j++) {
                                                  +			var shape = jsonElements[j];
                                                  +			var gId = "";
                                                  +			for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +				var attr = shape.dataAttributes[i];
                                                  +				if (attr.isCopy != "Y") {
                                                  +					attr.shapeGroupId = gId;
                                                  +					attr.isCopy = "";
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		DesignerCopyPaste.isAppearPaste = false;
                                                  +	},
                                                  +	customCopyToServer : function() {// 复制操作将信息更新到服务器的缓存中
                                                  +		// 复制ctrl+c
                                                  +		// 包含task类型时,禁用快捷键
                                                  +		if (Designer.status == "running") {
                                                  +			var selecteds = Utils.getSelected();
                                                  +			for (var i = 0; i < selecteds.length; i++) {
                                                  +				var task = selecteds[i];
                                                  +				if (task.groupName == "task") {
                                                  +					return;
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		Designer.clipboard.copy();
                                                  +		var jsonElements = Designer.clipboard.elements;
                                                  +		var isNot = false;
                                                  +		DesignerCopyPaste.isCopy = false;// 表示是复制出现
                                                  +		var jsonElements = Utils.getSelected();
                                                  +		for (var j = 0; j < jsonElements.length; j++) {
                                                  +			var shape = jsonElements[j];
                                                  +			for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +				var attr = shape.dataAttributes[i];
                                                  +				if (attr.isCopy != "Y") {
                                                  +					attr.shapeGroupId = "";
                                                  +					attr.isCopy = "";
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		$.ajax({
                                                  +			type : "POST",
                                                  +			url : "./w?sid="
                                                  +				+ CLB.sid
                                                  +				+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_custom_copy",
                                                  +			data : {
                                                  +				clientId : CLB.clientId,
                                                  +				userId : userId,
                                                  +				subject : chartId,
                                                  +				type : type,
                                                  +				ver : ver,
                                                  +				shapeId : "",
                                                  +				messageJson : JSON.stringify(jsonElements),
                                                  +				shapeGroupId : ""
                                                  +			},
                                                  +			success : function(msg) {
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	requestCustomPasteContent : function() {// 对于自定义的复制粘贴
                                                  +		var data = "userId=" + userId + "&clientId=" + CLB.clientId
                                                  +			+ "&subject=" + chartId + "&action=command&type=" + type
                                                  +			+ "&ver=" + ver;
                                                  +		$.ajax({
                                                  +			type : "POST",
                                                  +			url : "./jd?sid="
                                                  +				+ CLB.sid
                                                  +				+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_custom_paste_ajax",
                                                  +			data : data,
                                                  +			success : function(data) {
                                                  +				var msg = data;
                                                  +				if (typeof(data) == "string") {
                                                  +					msg = eval("(" + data + ")");
                                                  +				}
                                                  +				if (msg.data.result == "ok") {
                                                  +					if(typeof(msg.data.shape) == 'string') {
                                                  +						msg.data.shape = eval("(" + msg.data.shape + ")");
                                                  +					}
                                                  +					var tempCheckShape = msg.data.shape[0];
                                                  +
                                                  +					var shapeArr = msg.data.shape;
                                                  +					for(var i = 0; i < shapeArr.length; i++) {
                                                  +						if(shapeArr[i].name == 'linker' || shapeArr[i].category == 'standard' ) {
                                                  +							continue;
                                                  +						}
                                                  +						tempCheckShape = shapeArr[i];// 避免取到箭头或文本导致验证失败
                                                  +						break;
                                                  +					}
                                                  +
                                                  +					if (tempCheckShape.category == "bpmn") {
                                                  +						tempCheckShape.category = "process_bpmn2";
                                                  +					}
                                                  +
                                                  +					var flag = false;// 粘贴的图形集合中若是只有箭头或插入的文本或者只包含这两者,不进行形状验证
                                                  +					var linkerCount = 0;
                                                  +					var textCount = 0;
                                                  +					for (var i = 0; i < shapeArr.length; i ++) {
                                                  +						if(shapeArr[i].name == 'linker') linkerCount++;
                                                  +						if(shapeArr[i].category == 'standard') textCount++;
                                                  +					}
                                                  +					if((linkerCount + textCount) == shapeArr.length) {
                                                  +						flag = true;
                                                  +					}
                                                  +
                                                  +					if ($("#panel_" + tempCheckShape.category + "") == null
                                                  +						|| $("#panel_" + tempCheckShape.category + "").length == 0) {
                                                  +						if(flag) {
                                                  +
                                                  +						} else {
                                                  +							$.simpleAlert("不支持的形状,请确认已加载该类形状的解析器", "info", 2000);
                                                  +							$("#simplealert>.msg").css("top", "15px");
                                                  +							return;
                                                  +						}
                                                  +					}
                                                  +
                                                  +					if (msg.data.copyContent == "shapeCustomCopyContent") {
                                                  +						var json = msg.data.shape;
                                                  +						if (json.length == 1) {
                                                  +							var s = json[0];
                                                  +							s.props.x += DesignerCopyPaste.propsX;
                                                  +							s.props.y += DesignerCopyPaste.propsY;
                                                  +							DesignerCopyPaste.propsX += 20;
                                                  +							DesignerCopyPaste.propsY += 20;
                                                  +							if (s.name != "linker") {
                                                  +								Schema.initShapeFunctions(s);
                                                  +							}
                                                  +						} else {
                                                  +							for (var i = 0; i < json.length; i++) {// 针对图形的函数进行初始化
                                                  +								var s = json[i];
                                                  +								// s.props.x += DesignerCopyPaste.propsX;
                                                  +								// s.props.y += DesignerCopyPaste.propsY;
                                                  +								// DesignerCopyPaste.propsX += 20;
                                                  +								// DesignerCopyPaste.propsY += 20;
                                                  +								if (s.name != "linker") {
                                                  +									Schema.initShapeFunctions(s);
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +
                                                  +						var newJson = json;
                                                  +						for (var j = 0; j < json.length; j++) {
                                                  +							var newJsonObj = newJson[j];
                                                  +
                                                  +							for (var i = 0; i < newJsonObj.dataAttributes.length; i++) {
                                                  +								var attr = newJsonObj.dataAttributes[i];
                                                  +								attr.shapeGroupId = "";
                                                  +								attr.isCopy = "";
                                                  +							}
                                                  +						}
                                                  +						newJson = initPasteShapesNumber(newJson);// 对粘贴的图形进行编号重置,该方法在designer.extend.link.js中
                                                  +						Designer.clipboard.copy(newJson);// 将图形信息复制到剪切板
                                                  +						var shapeMap = Designer.clipboard.paste();// 粘贴图形
                                                  +						if(shapeMap.length > 0) {
                                                  +							// 图形附件粘贴操作
                                                  +							$.ajax({
                                                  +								url : "./jd?sid=" + sid + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_custom_paste_shape_file_save",
                                                  +								type : "POST",
                                                  +								data : {shapeMap:JSON.stringify(shapeMap)},
                                                  +								success : function(msg) {
                                                  +									// 处理完成附件复制任务后,重新刷新图形,绘制附件下标
                                                  +									var u = Utils.getSelected();
                                                  +									for (var t = 0; t < u.length; t++) {
                                                  +										var q = u[t];
                                                  +										if (q == undefined) {
                                                  +											continue
                                                  +										}
                                                  +										if (q.name == "linker") {
                                                  +											//
                                                  +										} else {
                                                  +											Designer.painter.renderShape(q); //重绘新粘贴的图形
                                                  +										}
                                                  +									}
                                                  +								}
                                                  +							});
                                                  +						}
                                                  +						var pasteRelation = false;
                                                  +						if(msg.data.relationShape.length > 0) {
                                                  +							$.confirm({
                                                  +								title : "提示",
                                                  +								content:"是否粘贴图形的关联关系",
                                                  +								onConfirm: function(){
                                                  +									pasteRelation = true;
                                                  +									//创建关联关系(包括主动关联数据和被动关联数据)
                                                  +									var params = {"shapeMap" : JSON.stringify(shapeMap), "relationShape" : JSON.stringify(msg.data.relationShape), "pasteRelation" : pasteRelation};
                                                  +									console.log("relationData:");
                                                  +									console.log(params);
                                                  +									$.ajax({
                                                  +										url : "./jd?sid=" + sid + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_custom_paste_shape_relation_save",
                                                  +										data : params,
                                                  +										success : function(msg) {
                                                  +											console.log(msg);
                                                  +											if(msg.result == 'error') {
                                                  +												$.simpleAlert(msg.msg, 'error');
                                                  +											}
                                                  +										}
                                                  +									});
                                                  +								},
                                                  +								onCancel : function(){
                                                  +									//创建关联关系(包括主动关联数据和被动关联数据)
                                                  +									var params = {"shapeMap" : JSON.stringify(shapeMap), "relationShape" : JSON.stringify(msg.data.relationShape), "pasteRelation" : pasteRelation};
                                                  +									console.log("relationData:");
                                                  +									console.log(params);
                                                  +									$.ajax({
                                                  +										url : "./jd?sid=" + sid + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_custom_paste_shape_relation_save",
                                                  +										data : params,
                                                  +										success : function(msg) {
                                                  +											if(msg.result == 'error') {
                                                  +												console.log(msg);
                                                  +												$.simpleAlert(msg.msg, 'error');
                                                  +											}
                                                  +										}
                                                  +									});
                                                  +								}
                                                  +							});
                                                  +						} else {
                                                  +							//创建关联关系(包括主动关联数据)
                                                  +							var params = {"shapeMap" : JSON.stringify(shapeMap), "relationShape" : JSON.stringify(msg.data.relationShape), "pasteRelation" : pasteRelation};
                                                  +							console.log("relationData:");
                                                  +							console.log(params);
                                                  +							$.ajax({
                                                  +								url : "./jd?sid=" + sid + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_custom_paste_shape_relation_save",
                                                  +								data : params,
                                                  +								success : function(msg) {
                                                  +									if(msg.result == 'error') {
                                                  +										console.log(msg);
                                                  +										$.simpleAlert(msg.msg, 'error');
                                                  +									}
                                                  +								}
                                                  +							});
                                                  +						}
                                                  +					} else if (msg.data.copyContent == "shapeCopyContent") {
                                                  +						// 粘贴ctrl+v
                                                  +						// 包含task类型时,禁用快捷键
                                                  +						if (checkSeletedNodeType()) {
                                                  +							return;
                                                  +						}
                                                  +						DesignerCopyPaste.isPaste = true;// 表示是粘贴出现
                                                  +						var json = msg.data.shape;
                                                  +						if (json.length == 1) {
                                                  +							var s = json[0];
                                                  +							s.props.x += DesignerCopyPaste.propsX;
                                                  +							s.props.y += DesignerCopyPaste.propsY;
                                                  +							DesignerCopyPaste.propsX += 20;
                                                  +							DesignerCopyPaste.propsY += 20;
                                                  +							if (s.name != "linker") {
                                                  +								Schema.initShapeFunctions(s);
                                                  +							}
                                                  +						} else {
                                                  +							for (var i = 0; i < json.length; i++) {// 针对图形的函数进行初始化
                                                  +								var s = json[i];
                                                  +								// s.props.x += DesignerCopyPaste.propsX;
                                                  +								// s.props.y += DesignerCopyPaste.propsY;
                                                  +								// DesignerCopyPaste.propsX += 20;
                                                  +								// DesignerCopyPaste.propsY += 20;
                                                  +								if (s.name != "linker") {
                                                  +									Schema.initShapeFunctions(s);
                                                  +									for (var j = 0; j < s.dataAttributes.length; j++) {
                                                  +										var attr = s.dataAttributes[j];
                                                  +										attr.isCopy = "N";
                                                  +									}
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +
                                                  +						Designer.clipboard.copy(json);// 将图形信息复制到剪切板
                                                  +						Designer.clipboard.paste();// 粘贴图形
                                                  +						DesignerCopyPaste.pasteToDB(Utils.getSelected());// 更新到数据库
                                                  +					}
                                                  +				} else if (msg.data.result == "noShape"
                                                  +					|| msg.data.result == "error") {
                                                  +					$.simpleAlert("不支持的形状,请确认已加载该类形状的解析器", "info", 2000);
                                                  +					$("#simplealert>.msg").css("top", "15px");
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	pasteSelect : function(e) {
                                                  +		DesignerCopyPaste.requestCustomPasteContent();
                                                  +		if (e)
                                                  +			e.preventDefault();
                                                  +	},
                                                  +	checkHasUsedShape : function() {
                                                  +		var data = "userId=" + userId;
                                                  +		$.ajax({
                                                  +			type : "POST",
                                                  +			url : "./w?sid="
                                                  +				+ CLB.sid
                                                  +				+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_used_paste",
                                                  +			data : data,
                                                  +			success : function(msg) {
                                                  +				eval("var f=" + msg);
                                                  +				isAppearCopy = f;
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	refreshIframe : parent.window.document.getElementById("main")?parent.window.document.getElementById("main").src : null,
                                                  +	isCut : false
                                                  +};
                                                  +
                                                  +
                                                  +Designer.op.editShapeText = function(o) {
                                                  +	if (o.name == "linker") {
                                                  +		this.editLinkerText(o);
                                                  +		return
                                                  +	}
                                                  +	var j = $("#shape_text_edit");
                                                  +	if (j.length == 0) {
                                                  +		j = $("<textarea id='shape_text_edit'></textarea>").appendTo("#designer_canvas")
                                                  +	}
                                                  +	var k = $("#shape_text_ruler");
                                                  +	if (k.length == 0) {
                                                  +		k = $("<textarea id='shape_text_ruler'></textarea>").appendTo("#designer_canvas")
                                                  +	}
                                                  +	$(".text_canvas[forshape=" + o.id + "]").hide();
                                                  +	var l = o.fontStyle;
                                                  +	var p = o.getTextBlock();
                                                  +	if (l.orientation == "horizontal") {
                                                  +		var m = {
                                                  +			x: p.x + p.w / 2,
                                                  +			y: p.y + p.h / 2
                                                  +		};
                                                  +		p = {
                                                  +			x: m.x - p.h / 2,
                                                  +			y: m.y - p.w / 2,
                                                  +			w: p.h,
                                                  +			h: p.w
                                                  +		}
                                                  +	}
                                                  +	var n = {
                                                  +		width: p.w + "px",
                                                  +		"z-index": Model.orderList.length + 2,
                                                  +		"line-height": Math.round(l.size * 1.25) + "px",
                                                  +		"font-size": l.size + "px",
                                                  +		"font-family": l.fontFamily,
                                                  +		"font-weight": l.bold ? "bold": "normal",
                                                  +		"font-style": l.italic ? "italic": "normal",
                                                  +		"text-align": l.textAlign,
                                                  +		color: "rgb(" + l.color + ")",
                                                  +		"text-decoration": l.underline ? "underline": "none"
                                                  +	};
                                                  +	j.css(n);
                                                  +	k.css(n);
                                                  +	j.show();
                                                  +	p.x += o.props.x;
                                                  +	p.y += o.props.y;
                                                  +	j.val(o.text);
                                                  +	$("#shape_text_edit").unbind().bind("keyup",
                                                  +		function() {
                                                  +			var a = $(this).val();
                                                  +			k.val(a);
                                                  +			k.scrollTop(99999);
                                                  +			var h = k.scrollTop();
                                                  +			j.css({
                                                  +				height: h
                                                  +			});
                                                  +			var g = {
                                                  +				x: p.x + p.w / 2,
                                                  +				y: p.y + p.h / 2
                                                  +			};
                                                  +			var f = 0;
                                                  +			var d = 0;
                                                  +			var w = p.h;
                                                  +			if (o.fontStyle.vAlign == "middle") {
                                                  +				if (h > w) {
                                                  +					w = h;
                                                  +					f = (g.y - w / 2);
                                                  +					d = 0
                                                  +				} else {
                                                  +					f = (g.y - p.h / 2);
                                                  +					d = (p.h - h) / 2;
                                                  +					w = p.h - d
                                                  +				}
                                                  +			} else {
                                                  +				if (o.fontStyle.vAlign == "bottom") {
                                                  +					if (h > w) {
                                                  +						w = h;
                                                  +						f = (g.y + p.h / 2 - w);
                                                  +						d = 0
                                                  +					} else {
                                                  +						f = (g.y - p.h / 2);
                                                  +						d = p.h - h;
                                                  +						w = p.h - d
                                                  +					}
                                                  +				} else {
                                                  +					f = (g.y - p.h / 2);
                                                  +					d = 0;
                                                  +					if (h > w) {
                                                  +						w = h
                                                  +					} else {
                                                  +						w = p.h
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +			var x = d + w;
                                                  +			var b = {
                                                  +				x: p.x + p.w / 2,
                                                  +				y: f + x / 2
                                                  +			};
                                                  +			var c = o.props.angle;
                                                  +			if (c != 0) {
                                                  +				var v = {
                                                  +					x: o.props.x + o.props.w / 2,
                                                  +					y: o.props.y + o.props.h / 2
                                                  +				};
                                                  +				b = Utils.getRotated(v, b, c)
                                                  +			}
                                                  +			if (l.orientation == "horizontal") {
                                                  +				c = (Math.PI * 1.5 + c) % (Math.PI * 2)
                                                  +			}
                                                  +			var u = Math.round(c / (Math.PI * 2) * 360);
                                                  +			var e = "rotate(" + u + "deg) scale(" + Designer.config.scale + ")";
                                                  +			j.css({
                                                  +				width: p.w,
                                                  +				height: w,
                                                  +				"padding-top": d,
                                                  +				left: b.x.toScale() - p.w / 2 - 2,
                                                  +				top: b.y.toScale() - x / 2 - 2,
                                                  +				"-webkit-transform": e,
                                                  +				"-ms-transform": e,
                                                  +				"-o-transform": e,
                                                  +				"-moz-transform": e,
                                                  +				transform: e
                                                  +			})
                                                  +		}).bind("keydown",
                                                  +		function(a) {
                                                  +			var d = $(this);
                                                  +			if (a.keyCode == 13 && a.ctrlKey) {
                                                  +				i();
                                                  +				return false
                                                  +			} else {
                                                  +				if (a.keyCode == 27) {
                                                  +					d.unbind().remove();
                                                  +					$(".text_canvas[forshape=" + o.id + "]").show()
                                                  +				} else {
                                                  +					if (a.keyCode == 66 && a.ctrlKey) {
                                                  +						var c = !o.fontStyle.bold;
                                                  +						o.fontStyle.bold = c;
                                                  +						Model.update(o);
                                                  +						var b = c ? "bold": "normal";
                                                  +						$(this).css("font-weight", b);
                                                  +						k.css("font-weight", b);
                                                  +						UI.update()
                                                  +					} else {
                                                  +						if (a.keyCode == 73 && a.ctrlKey) {
                                                  +							var c = !o.fontStyle.italic;
                                                  +							o.fontStyle.italic = c;
                                                  +							Model.update(o);
                                                  +							var b = c ? "italic": "normal";
                                                  +							$(this).css("font-style", b);
                                                  +							k.css("font-style", b);
                                                  +							UI.update()
                                                  +						} else {
                                                  +							if (a.keyCode == 85 && a.ctrlKey) {
                                                  +								var c = !o.fontStyle.underline;
                                                  +								o.fontStyle.underline = c;
                                                  +								Model.update(o);
                                                  +								var b = c ? "underline": "none";
                                                  +								$(this).css("text-decoration", b);
                                                  +								k.css("text-decoration", b);
                                                  +								a.preventDefault();
                                                  +								UI.update()
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}).bind("blur",
                                                  +		function(a) {
                                                  +			i()
                                                  +		}).bind("mousemove",
                                                  +		function(a) {
                                                  +			a.stopPropagation()
                                                  +		}).bind("mousedown",
                                                  +		function(a) {
                                                  +			a.stopPropagation()
                                                  +		}).bind("mouseenter",
                                                  +		function(a) {
                                                  +			Designer.op.destroy()
                                                  +		});
                                                  +	$("#shape_text_edit").trigger("keyup");
                                                  +	j.select();
                                                  +	function i() {
                                                  +		var a = $("#shape_text_edit").val();
                                                  +		if (!(sameNameCheck && !(a == o.title))) { // 不进行名称校验
                                                  +			if ($("#shape_text_edit").length && $("#shape_text_edit").is(":visible")) {
                                                  +				if (a != o.text) {
                                                  +					o.text = a;
                                                  +					Model.update(o);
                                                  +					awsui.ajax.request({
                                                  +						type: "POST",
                                                  +						url: "./jd",
                                                  +						data: {
                                                  +							sid: CLB.sid,
                                                  +							cmd: "com.actionsoft.apps.coe.pal_repository_designer_shape_update_text_or_delete",
                                                  +							uuid: ruuid,
                                                  +							shapeId: o.id,
                                                  +							shapeText: o.text,
                                                  +							type: 1
                                                  +						}
                                                  +					});
                                                  +				}
                                                  +				Designer.painter.renderShape(o);
                                                  +				$("#shape_text_edit").remove();
                                                  +			}
                                                  +		} else {// 校验同名模型并显示
                                                  +			awsui.ajax.request({
                                                  +				type : "POST",
                                                  +				url : "./jd",
                                                  +				data : {
                                                  +					sid : CLB.sid,
                                                  +					cmd : "com.actionsoft.apps.coe.pal_repository_designer_shape_same_text_check",
                                                  +					uuid : ruuid,
                                                  +					shapeId : o.id,
                                                  +					shapeText : a
                                                  +				},
                                                  +				success : function(r) {
                                                  +					var ro = r.data;
                                                  +					if(ro == undefined) {
                                                  +						if ($("#shape_text_edit").length && $("#shape_text_edit").is(":visible")) {
                                                  +							if (a != o.text) {
                                                  +								o.text = a;
                                                  +								Model.update(o);
                                                  +								awsui.ajax.request({
                                                  +									type: "POST",
                                                  +									url: "./jd",
                                                  +									data: {
                                                  +										sid: CLB.sid,
                                                  +										cmd: "com.actionsoft.apps.coe.pal_repository_designer_shape_update_text_or_delete",
                                                  +										uuid: ruuid,
                                                  +										shapeId: o.id,
                                                  +										shapeText: o.text,
                                                  +										type: 1
                                                  +									}
                                                  +								});
                                                  +							}
                                                  +							Designer.painter.renderShape(o);
                                                  +							$("#shape_text_edit").remove();
                                                  +						}
                                                  +					} else {
                                                  +						$('#sameShapeNameAlert').html('<div style="padding-left:5px;">名称<b>"' + a + '"</b>在以下模型中被使用</div><div style="height:85px;overflow:auto;padding:5px;" id="sameShapeNameAlertScrollDiv">' + ro.result + '</div>');
                                                  +						var options = {
                                                  +							title : '提示',
                                                  +							closable : false,
                                                  +							buttons:[
                                                  +								{text:'修改名称',cls:"blue",handler:function(){
                                                  +										Designer.op.editShapeText(o);
                                                  +										$("#sameShapeNameAlert").dialog("close");
                                                  +									}},
                                                  +								{text:'忽略',handler:function(){
                                                  +										$("#sameShapeNameAlert").dialog("close");
                                                  +										if ($("#shape_text_edit").length && $("#shape_text_edit").is(":visible")) {
                                                  +											if (a != o.text) {
                                                  +												o.text = a;
                                                  +												Model.update(o);
                                                  +												awsui.ajax.request({
                                                  +													type: "POST",
                                                  +													url: "./jd",
                                                  +													data: {
                                                  +														sid: CLB.sid,
                                                  +														cmd: "com.actionsoft.apps.coe.pal_repository_designer_shape_update_text_or_delete",
                                                  +														uuid: ruuid,
                                                  +														shapeId: o.id,
                                                  +														shapeText: o.text,
                                                  +														type: 1
                                                  +													}
                                                  +												});
                                                  +											}
                                                  +											Designer.painter.renderShape(o);
                                                  +											$("#shape_text_edit").remove();
                                                  +										}
                                                  +									}}
                                                  +							],
                                                  +							scrollDiv:$("#sameShapeNameAlertScrollDiv"),height:200
                                                  +						};
                                                  +						$("#sameShapeNameAlert").dialog(options);
                                                  +					}
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +Designer.op.removeShape = function() {
                                                  +	var d = Utils.getSelected();
                                                  +	if (d.length > 0) {
                                                  +		Utils.unselect();
                                                  +		var e = Utils.getAttachedShapes(d);
                                                  +		d = d.concat(e);
                                                  +		var c = [];
                                                  +		for (var b = 0; b < d.length; b++) {
                                                  +			var a = Utils.getChildrenShapes(d[b]);
                                                  +			c = c.concat(a)
                                                  +		}
                                                  +		d = d.concat(c);
                                                  +		// 如果存在泳池,获取泳池内所有形状连线,一并删除
                                                  +		var pools = [];// 泳池
                                                  +		var lanes = [];// 泳道
                                                  +		for (var i = 0; i < d.length; i++) {
                                                  +			if (d[i].name == 'verticalPool' || d[i].name == 'horizontalPool') {
                                                  +				pools.push(d[i]);
                                                  +			}
                                                  +			if (d[i].name == 'verticalLane' || d[i].name == 'horizontalLane') {
                                                  +				lanes.push(d[i]);
                                                  +			}
                                                  +		}
                                                  +		if (pools.length > 0) {// 存在泳池,获取泳池内所有形状,一并删除
                                                  +			var m = Utils.getContainedShapes(pools);// 所有形状
                                                  +			m = m.concat(Utils.getOutlinkers(m));
                                                  +			d = d.concat(m);
                                                  +		} else if (lanes.length > 0) {// 不存在泳池,存在泳道,判断泳道是否包含形状,包含形状不允许删除
                                                  +			for (var i = 0; i < lanes.length; i++) {
                                                  +				var m = Utils.getContainedShapes([lanes[i]]);
                                                  +				if (m.length > 0) {
                                                  +					$.simpleAlert('泳道中存在形状,不允许删除', 'warning');
                                                  +					return false;
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		if (d.length > 0) {
                                                  +			var shapeIds = [];
                                                  +			for (var index = 0; index < d.length; index++) {
                                                  +				if (d[index].name != "linker") {
                                                  +					shapeIds.push(d[index].id)
                                                  +				}
                                                  +			}
                                                  +			if (shapeIds.length > 0 && isAutoSave != "0") {
                                                  +				$.ajax({
                                                  +					url: "./jd?sid=" + $("#sid").val() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_search",
                                                  +					data: {
                                                  +						shapeIds: shapeIds.join(","),
                                                  +						fileId: ruuid
                                                  +					},
                                                  +					success: function(msg) {
                                                  +						if (typeof(msg) == "string") {
                                                  +							msg = eval("(" + msg + ")")
                                                  +						}
                                                  +						var relationShapes = msg.data.relationShapes;
                                                  +						if (relationShapes.length > 0) {
                                                  +							var options = {
                                                  +								title: "提示",
                                                  +								content: "图形[" + relationShapes + "]被关联,确定删除关联关系吗?<br/><span style='color: red;'>注:关联关系删除不可撤销,请谨慎操作</span>",
                                                  +								onConfirm: function() {
                                                  +									awsui.ajax.request({
                                                  +										type: "POST",
                                                  +										url: "./jd",
                                                  +										data: {
                                                  +											sid: CLB.sid,
                                                  +											cmd: "com.actionsoft.apps.coe.pal_repository_designer_shape_update_text_or_delete",
                                                  +											uuid: ruuid,
                                                  +											shapeId: shapeIds.join(','),
                                                  +											type: 2
                                                  +										}
                                                  +									});
                                                  +									Model.remove(d);
                                                  +								}
                                                  +							};
                                                  +							$.confirm(options)
                                                  +						} else {
                                                  +							awsui.ajax.request({
                                                  +								type: "POST",
                                                  +								url: "./jd",
                                                  +								data: {
                                                  +									sid: CLB.sid,
                                                  +									cmd: "com.actionsoft.apps.coe.pal_repository_designer_shape_update_text_or_delete",
                                                  +									uuid: ruuid,
                                                  +									shapeId: shapeIds.join(','),
                                                  +									type: 2
                                                  +								}
                                                  +							});
                                                  +							Model.remove(d);
                                                  +						}
                                                  +					}
                                                  +				})
                                                  +			} else {
                                                  +				//拼接日志内容
                                                  +				var delnode = "";
                                                  +				for (var index = 0; index < d.length; index++) {
                                                  +					var delnodeid = d[index].id;
                                                  +					var delnodetext = d[index].text;
                                                  +					delnode = delnode + delnodetext + "[" + delnodeid + "]; ";
                                                  +				}
                                                  +				//发送删除日志
                                                  +				awsui.ajax.request({
                                                  +					type: "POST",
                                                  +					url: "./jd",
                                                  +					data: {
                                                  +						sid: CLB.sid,
                                                  +						cmd: "com.actionsoft.apps.coe.pal_pl_repository_designer_shape_log_record_noop_delete",
                                                  +						uuid: ruuid,
                                                  +						delnode: delnode,
                                                  +						delnum: d.length
                                                  +					}
                                                  +				});
                                                  +				Model.remove(d);
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +}
                                                  +Designer.op.shapeEditable = function (shape) {
                                                  +	var canvas = $("#designer_canvas");
                                                  +	if (shape.attribute.editable == false) {
                                                  +		return;
                                                  +	}
                                                  +	canvas.unbind("dblclick.edit").bind("dblclick.edit", function () {
                                                  +		var toolbarShapeAttr = $("#toolbar-shape-attr.toolbar_button")[0];
                                                  +		//AWS修改,流程设计器在运行时刻需要隐藏节点
                                                  +		if(schemeId && shape.name == "userTask" && toolbarShapeAttr) { //可调用BPM属性的人工任务
                                                  +			BPMNBiz.showPropertiesDialog(false, shape);
                                                  +		} else {
                                                  +			Designer.op.editShapeText(shape);
                                                  +		}
                                                  +		canvas.unbind("dblclick.edit");
                                                  +	});
                                                  +};
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.events.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.events.js
                                                  new file mode 100644
                                                  index 00000000..f548f7b1
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.events.js
                                                  @@ -0,0 +1,365 @@
                                                  +/** 该js中存放重写designer.events.js的相关方法*/
                                                  +
                                                  +// 存放多泳池时泳池的 key uuid value map(存放task类  activity类 信息)
                                                  +var  processMap=new HashMap();
                                                  +//存放包括 task 类和 activity类的orderindex 
                                                  +var orderIndexs = new HashMap();
                                                  +//存放网关连线的orderindex
                                                  +var linkerOrderindexs=new HashMap();
                                                  +
                                                  +
                                                  +/**
                                                  + * 连接线创建后
                                                  + */
                                                  +Designer.events.addEventListener("linkerCreated", function(linker){
                                                  +});
                                                  +
                                                  +/**
                                                  + * 图形创建后
                                                  + */
                                                  +Designer.events.addEventListener("created", function(shape){
                                                  +	if(Designer.status == "demo" && !demoCreatedTiped){
                                                  +		UI.showStartStep("created", $("#" + shape.id));
                                                  +		demoCreatedTiped = true;
                                                  +	}
                                                  +	//定义元素颜色
                                                  +	if(shape){
                                                  +		ExtCorolUtil.setShapeLineStyle(shape);
                                                  +		ExtCorolUtil.setShapeFillStyle(shape);
                                                  +	}
                                                  +	
                                                  +	OrderIndexOpt.putOrderIndexToMap(shape); //给task类 和 activity类的元素设置orderindex
                                                  +});
                                                  +
                                                  +/**
                                                  + * 删除前事件
                                                  + */
                                                  +Designer.events.addEventListener("beforeRemove", function(shapes){
                                                  +	var temp = {};
                                                  +	for(var i = 0; i < shapes.length; i++){
                                                  +		var shape = shapes[i];
                                                  +		temp[shape.id] = shape;
                                                  +	}
                                                  +	var addIds = []; //添加的图形id,比如删除分隔符,可能会删除分隔符标题栏
                                                  +	for(var i = 0; i < shapes.length; i++){
                                                  +		var shape = shapes[i];
                                                  +		
                                                  +//		$.ajax({
                                                  +//			url : encodeURI("./w?sid=" + sessionId + "&cmd=CONSOLE_M_PROCESS_CHECK_ELEMENT_INSTANCE&appId=&elementId=" + shape.id),
                                                  +//			data : {
                                                  +//				chartId : chartId
                                                  +//			},
                                                  +//			dataType : "text",
                                                  +//			success : function(data) {
                                                  +//			}
                                                  +//		}); 
                                                  +
                                                  +		if(shape.name == "verticalSeparatorBar" && !temp[shape.parent] && addIds.indexOf(shape.id) < 0){
                                                  +			delete temp[shape.id];
                                                  +		}else if(shape.name == "horizontalSeparatorBar" && !temp[shape.parent] && addIds.indexOf(shape.id) < 0){
                                                  +			delete temp[shape.id];
                                                  +		}else if(shape.name == "horizontalSeparator"){
                                                  +			//删除水平分隔符,查找删除后,是否还存在分隔符,否则把标题栏删掉
                                                  +			var parent = Model.getShapeById(shape.parent);
                                                  +			var bar = null;
                                                  +			var leftCount = 0; //剩下的分隔符数量
                                                  +			for (var j = 0; j < parent.children.length; j++) {
                                                  +				var childId = parent.children[j];
                                                  +				var child = Model.getShapeById(childId);
                                                  +				if(child.name == "horizontalSeparator" && !temp[childId]){
                                                  +					leftCount += 1;
                                                  +				}else if(child.name == "verticalSeparatorBar"){
                                                  +					bar = child;
                                                  +				}
                                                  +			}
                                                  +			if(leftCount == 0 && bar != null){
                                                  +				//删除后没有剩余的分隔符,并且没有添加过标题栏,则添加进去,一起删除
                                                  +				temp[bar.id] = bar;
                                                  +				if(addIds.indexOf(bar.id) < 0){
                                                  +					addIds.push(bar.id);
                                                  +				}
                                                  +			}
                                                  +		}else if(shape.name == "verticalSeparator"){
                                                  +			//删除水平分隔符,查找删除后,是否还存在分隔符,否则把标题栏删掉
                                                  +			var parent = Model.getShapeById(shape.parent);
                                                  +			var bar = null;
                                                  +			var leftCount = 0; //剩下的分隔符数量
                                                  +			for (var j = 0; j < parent.children.length; j++) {
                                                  +				var childId = parent.children[j];
                                                  +				var child = Model.getShapeById(childId);
                                                  +				if(child.name == "verticalSeparator" && !temp[childId]){
                                                  +					leftCount += 1;
                                                  +				}else if(child.name == "horizontalSeparatorBar"){
                                                  +					bar = child;
                                                  +				}
                                                  +			}
                                                  +			if(leftCount == 0 && bar != null){
                                                  +				//删除后没有剩余的分隔符,并且没有添加过标题栏,则添加进去,一起删除
                                                  +				temp[bar.id] = bar;
                                                  +				if(addIds.indexOf(bar.id) < 0){
                                                  +					addIds.push(bar.id);
                                                  +				}
                                                  +			}
                                                  +		}else if(shape.name == "classAttribute" || shape.name == "classOperation"
                                                  +			|| shape.name == "interfaceOperation" || shape.name == "packageAttribute"
                                                  +			|| shape.name == "fragmentTitle"){
                                                  +			//删除子图形,同时删除父图形
                                                  +			if(!temp[shape.parent]){
                                                  +				var parent = Model.getShapeById(shape.parent);
                                                  +				for(var ci = 0; ci < parent.children.length; ci++){
                                                  +					var id = parent.children[ci];
                                                  +					if(!temp[id]){
                                                  +						temp[id] = Model.getShapeById(id);
                                                  +					}
                                                  +				}
                                                  +				temp[shape.parent] = Model.getShapeById(shape.parent);
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	shapes = [];
                                                  +	for(var id in temp){
                                                  +		shapes.push(temp[id]);
                                                  +	}
                                                  +	return shapes;
                                                  +});
                                                  +
                                                  +
                                                  +/**
                                                  + * 删除后事件
                                                  + */
                                                  +Designer.events.addEventListener("removed", function(event){
                                                  +	var shapes = event.shapes;
                                                  +	var range = event.range;
                                                  +	var changedIds = event.changedIds;
                                                  +	var changed = [];
                                                  +	var relatedParent = [];
                                                  +	for (var i = 0; i < shapes.length; i++) {
                                                  +		var shape = shapes[i];
                                                  +		if(shape.name == "verticalLane" && range.indexOf(shape.parent) < 0 && relatedParent.indexOf(shape.parent) < 0){
                                                  +			//删除泳道,而且不删除所在的泳池
                                                  +			relatedParent.push(shape.parent);
                                                  +		}else if(shape.name == "horizontalLane" && range.indexOf(shape.parent) < 0 && relatedParent.indexOf(shape.parent) < 0){
                                                  +			relatedParent.push(shape.parent);
                                                  +		}else if(shape.name == "verticalSeparatorBar" && range.indexOf(shape.parent) < 0){
                                                  +			var parent = Model.getShapeById(shape.parent);
                                                  +			parent.props.w -= shape.props.w;
                                                  +			parent.props.x += shape.props.w;
                                                  +			Designer.painter.renderShape(parent);
                                                  +			if(changedIds.indexOf(shape.parent) < 0){
                                                  +				changedIds.push(shape.parent);
                                                  +				changed.push(parent);
                                                  +			}
                                                  +		}else if(shape.name == "horizontalSeparatorBar" && range.indexOf(shape.parent) < 0){
                                                  +			var parent = Model.getShapeById(shape.parent);
                                                  +			parent.props.y += shape.props.h;
                                                  +			parent.props.h -= shape.props.h;
                                                  +			Designer.painter.renderShape(parent);
                                                  +			if(changedIds.indexOf(shape.parent) < 0){
                                                  +				changedIds.push(shape.parent);
                                                  +				changed.push(parent);
                                                  +			}
                                                  +		}else if(shape.name == "horizontalSeparator" && range.indexOf(shape.parent) < 0 && relatedParent.indexOf(shape.parent) < 0){
                                                  +			relatedParent.push(shape.parent);
                                                  +		}else if(shape.name == "verticalSeparator" && range.indexOf(shape.parent) < 0 && relatedParent.indexOf(shape.parent) < 0){
                                                  +			relatedParent.push(shape.parent);
                                                  +		}
                                                  +	}
                                                  +	for (var index = 0; index < relatedParent.length; index++) {
                                                  +		var parentId = relatedParent[index];
                                                  +		var parent = Model.getShapeById(parentId);
                                                  +		if(parent.name == "verticalPool"){
                                                  +			//计算泳道宽度
                                                  +			var w = 0;
                                                  +			var laneCount = 0;
                                                  +			for (var i = 0; i < parent.children.length; i++) {
                                                  +				var childId = parent.children[i];
                                                  +				var child = Model.getShapeById(childId);
                                                  +				if(child.name == "verticalLane"){
                                                  +					laneCount++;
                                                  +					w += child.props.w;
                                                  +				}else if(child.name == "verticalSeparatorBar"){
                                                  +					w += child.props.w;
                                                  +				}
                                                  +			}
                                                  +			if(laneCount > 0){
                                                  +				parent.props.w = w;
                                                  +				Designer.painter.renderShape(parent);
                                                  +				if(changedIds.indexOf(parentId) < 0){
                                                  +					changedIds.push(parentId);
                                                  +					changed.push(parent);
                                                  +				}
                                                  +				var childrenChanged = Utils.rangeChildren(parent);
                                                  +				changed = changed.concat(childrenChanged);
                                                  +			}
                                                  +		}else if(parent.name == "horizontalPool"){
                                                  +			//计算泳道高度
                                                  +			var h = 0;
                                                  +			var laneCount = 0;
                                                  +			for (var i = 0; i < parent.children.length; i++) {
                                                  +				var childId = parent.children[i];
                                                  +				var child = Model.getShapeById(childId);
                                                  +				if(child.name == "horizontalLane"){
                                                  +					laneCount++;
                                                  +					h += child.props.h;
                                                  +				}else if(child.name == "horizontalSeparatorBar"){
                                                  +					h += child.props.h;
                                                  +				}
                                                  +			}
                                                  +			if(laneCount > 0){
                                                  +				parent.props.h = h;
                                                  +				Designer.painter.renderShape(parent);
                                                  +				if(changedIds.indexOf(parentId) < 0){
                                                  +					changedIds.push(parentId);
                                                  +					changed.push(parent);
                                                  +				}
                                                  +				var childrenChanged = Utils.rangeChildren(parent);
                                                  +				changed = changed.concat(childrenChanged);
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	//AWS增加的内容
                                                  +	OrderIndexOpt.removeOrderIndexToMap(shapes); // 移除元素之后更新task 和activity节点的orderindex
                                                  +	OutLinkerOrderIndexOpt.removeLinderOrderIndexToMap(shapes); //移除元素之后更新 线的orderindex
                                                  +	return changed;
                                                  +});
                                                  +
                                                  +var OrderIndexOpt = {
                                                  +	init:function(){
                                                  +		var tasks=BPMNBiz.getALLTasksListAndActivity();
                                                  +		for(var i=0;i<tasks.length;i++){
                                                  +			tasks[i].orderIndex=i+1;
                                                  +			orderIndexs.put(tasks[i].id, tasks[i]);
                                                  +		}
                                                  +	},
                                                  +	putOrderIndexToMap : function(node) {
                                                  +		if (node.name != "linker") {
                                                  +			if (node.name.indexOf("Task") > -1 || node.name.indexOf("Activity") > -1) {
                                                  +				orderIndexs.put(node.id, node);
                                                  +				node.orderIndex=OrderIndexOpt.getOrderIndexsMapSize(); //添加后给shape的orderindex赋值
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	removeOrderIndexToMap : function(nodes) {
                                                  +		for(var i=0;i<nodes.length;i++){
                                                  +			var node=nodes[i];
                                                  +			if (node.name != "linker") {
                                                  +				if (node.name.indexOf("Task") > -1 || node.name.indexOf("Activity") > -1) {
                                                  +					orderIndexs.remove(node.id);
                                                  +					OrderIndexOpt.modifyRemoveAfterOrderIndex();
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	getOrderIndexsMap:function(){
                                                  +		return orderIndexs;
                                                  +	},
                                                  +	getOrderIndexsMapSize:function(){
                                                  +		return orderIndexs.size();
                                                  +	},
                                                  +	modifyRemoveAfterOrderIndex:function(){
                                                  +		var array=orderIndexs.values();
                                                  +		for(var i=0;i<array.length; i++){
                                                  +			var node=array[i];
                                                  +			node.orderIndex=i+1;
                                                  +		}
                                                  +	},
                                                  +	putOrderIndexMapToProcessMap:function(processUUid){
                                                  +		//此处多泳池时需要调整
                                                  +		processMap.put(uuid,orderIndexs);
                                                  +	}
                                                  +}; 
                                                  +
                                                  +var OutLinkerOrderIndexOpt={
                                                  +	init:function(){
                                                  +		//初始化目前画布上存在的连线
                                                  +		if(operateType=="new"){
                                                  +		  //alert(1);
                                                  +			var linkerArray=OutLinkerOrderIndexOpt.getCavasAllLinkers();
                                                  +				for(var i=0;i<linkerArray.length;i++){
                                                  +				linkerArray[i].orderIndex=i+1;
                                                  +				linkerOrderindexs.put(linkerArray[i].id, linkerArray[i]);
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	getCavasAllLinkers:function(){
                                                  +		//返回所有线的数组
                                                  +		var linkers=[];
                                                  +		for (var shapeId in Model.define.elements) {
                                                  +			var node = Model.getShapeById(shapeId);
                                                  +			if (node.name== "linker") {
                                                  +				linkers.push(node);
                                                  +			}
                                                  +		}
                                                  +		return linkers;
                                                  +	},
                                                  +	putLinderOrderIndexToMap : function(node) {
                                                  +		linkerOrderindexs.put(node.id, node);
                                                  +		node.orderIndex=OutLinkerOrderIndexOpt.getLinkerOrderIndexsMapSize(); //添加后给Linder的orderindex赋值
                                                  +	},
                                                  +	removeLinderOrderIndexToMap : function(nodes) {
                                                  +		for(var i=0;i<nodes.length;i++){
                                                  +			var node=nodes[i];
                                                  +			if (node.name == "linker") {
                                                  +					linkerOrderindexs.remove(node.id);
                                                  +					OutLinkerOrderIndexOpt.modifyLinkerRemoveAfterOrderIndex();
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	getLinkerOrderIndexsMap:function(){
                                                  +		return linkerOrderindexs;
                                                  +	},
                                                  +	getLinkerOrderIndexsMapSize:function(){
                                                  +		return linkerOrderindexs.size();
                                                  +	},
                                                  +	modifyLinkerRemoveAfterOrderIndex:function(){
                                                  +		var array=linkerOrderindexs.values();
                                                  +		for(var i=0;i<array.length; i++){
                                                  +			var node=array[i];
                                                  +			node.orderIndex=i+1;
                                                  +		}
                                                  +	}
                                                  +};
                                                  +
                                                  +
                                                  +/**
                                                  + * 分组图形改变后事件
                                                  + */
                                                  +Designer.events.addEventListener("shapeChanged", function(event){
                                                  +	var shape = event.shape;
                                                  +	var changeName = event.name;
                                                  +	var changed = [];
                                                  +	if((shape.name == "choreographyTask" || shape.name == "subChoreography")
                                                  +		&& (changeName == "callChoreographyGlobal" || changeName == "callChoreography")){
                                                  +		for (var i = 0; i < shape.children.length; i++) {
                                                  +			var childId = shape.children[i];
                                                  +			var child = Model.getShapeById(childId);
                                                  +			
                                                  +			if(child.name == "participantA"){
                                                  +				Model.changeShape(child, "callParticipantA");
                                                  +			}else{
                                                  +				Model.changeShape(child, "callParticipantB");
                                                  +			}
                                                  +			changed.push(child);
                                                  +		}
                                                  +	}else if((shape.name == "callChoreographyGlobal" || shape.name == "callChoreography")
                                                  +		&& (changeName == "choreographyTask" || changeName == "subChoreography")){
                                                  +		for (var i = 0; i < shape.children.length; i++) {
                                                  +			var childId = shape.children[i];
                                                  +			var child = Model.getShapeById(childId);
                                                  +			if(child.name == "callParticipantA"){
                                                  +				Model.changeShape(child, "participantA");
                                                  +			}else{
                                                  +				Model.changeShape(child, "participantB");
                                                  +			}
                                                  +			changed.push(child);
                                                  +		}
                                                  +	}
                                                  +	//AWS增加的内容
                                                  +	//定义元素颜色
                                                  +	if(shape){
                                                  +		ExtCorolUtil.setShapeLineStyle(shape,changeName);
                                                  +		ExtCorolUtil.setShapeFillStyle(shape,changeName);
                                                  +	}
                                                  +	return changed;
                                                  +});
                                                  +
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.js
                                                  new file mode 100644
                                                  index 00000000..1f1f1614
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.js
                                                  @@ -0,0 +1,223 @@
                                                  +/**全局扩展方法**/
                                                  +
                                                  +
                                                  +//生成uuid
                                                  +$(function() {
                                                  +	Utils.newId = function() {
                                                  +		var newuuid = new UUID();
                                                  +		return "obj_" + newuuid;
                                                  +	};
                                                  +
                                                  +	$(".ico_dock_collapse").unbind("click").bind("click", function() {
                                                  +		$(".dock_view").hide();
                                                  +		setCookie(chartId, Dock.currentView +",false");
                                                  +		$(".dock_buttons").children().removeClass("selected");
                                                  +		if (Dock.currentView == "history") {
                                                  +			Dock.closeHistory();
                                                  +		}
                                                  +		Dock.currentView = "";
                                                  +		//AWS增加的内容
                                                  +		//强制显示导航小窗口
                                                  +		//$(".dock_view_navigator").show();
                                                  +	}); 
                                                  +
                                                  +});
                                                  +
                                                  +var myMessage;
                                                  +
                                                  +function putMessage(mes){
                                                  +	var model={
                                                  +		chartId:"",
                                                  +		updateTime:"",
                                                  +		definitionId:"",
                                                  +		versionId:"",
                                                  +		remark:"",
                                                  +		messages:[],
                                                  +		userIds:[],
                                                  +		userNames:""
                                                  +	};
                                                  +	//首先检查myMessage是否存放了动作信息
                                                  +	if(mes){
                                                  +		var mesArray=[];
                                                  +		var ids=[];
                                                  +		mesArray.push(mes);
                                                  +		ids.push(user);
                                                  +		model.chartId=chartId;
                                                  +		model.definitionId=chartId;
                                                  +		model.processDefId = process.processDefId;
                                                  +		model.processVersionId=process.processVersionId;
                                                  +		model.messages=mesArray;
                                                  +		model.userNames=currentUserName;
                                                  +		model.userIds=ids;
                                                  +	}
                                                  +	if(myMessage){
                                                  +		var m=myMessage.messages;
                                                  +		var newArray=[];
                                                  +		for (var i=0; i < m.length; i++) {
                                                  +			var item=m[i];
                                                  +		   newArray.push(item);
                                                  +		};
                                                  +		if(mes){
                                                  +			newArray.push(mes);
                                                  +		}
                                                  +		myMessage.messages=newArray;
                                                  +	}else{
                                                  +		myMessage=model;
                                                  +	}
                                                  +}
                                                  +
                                                  +
                                                  +//CLB.listen = function(onError) {
                                                  +//	// if(CLB.connection != null){
                                                  +//	// return;
                                                  +//	// }
                                                  +//	// CLB.connection = $.ajax({
                                                  +//	// url: "/diagraming/listen",
                                                  +//	// data: {
                                                  +//	// clientId: CLB.clientId,
                                                  +//	// userId: userId,
                                                  +//	// name: userName,
                                                  +//	// subject: chartId,
                                                  +//	// listenTime: CLB.listenTime
                                                  +//	// },
                                                  +//	// type: "get",
                                                  +//	// success: function(data){
                                                  +//	// CLB.connection = null;
                                                  +//	// CLB.onMessage(data.events);
                                                  +//	// if(typeof data.onlineUsers != "undefined"){
                                                  +//	// CLB.manageOnlineUsers(data.onlineUsers)
                                                  +//	// }
                                                  +//	// },
                                                  +//	// error: function(e){
                                                  +//	// CLB.connection = null;
                                                  +//	// if(!(e.status == 0 && e.statusText == "abort")){
                                                  +//	// //发生错误,断开了,重连一次,如果连不上,提示错误
                                                  +//	// if(onError){
                                                  +//	// onError();
                                                  +//	// }else{
                                                  +//	// CLB.listen(function(){
                                                  +//	// CLB.showDisconnected();
                                                  +//	// });
                                                  +//	// }
                                                  +//	// }
                                                  +//	// }
                                                  +//	// });
                                                  +//};
                                                  +
                                                  +
                                                  +//获取选中图形数组
                                                  +function getSelectedArray(id) {
                                                  +	var selected = [];
                                                  +	var shape = Model.getShapeById(id);
                                                  +	if (shape) {
                                                  +		selected.push(shape);
                                                  +	}
                                                  +	return selected;
                                                  +}
                                                  +//获取选中图形数组
                                                  +function putShapeToArray(shape) {
                                                  +	var selected = [];
                                                  +	if (shape) {
                                                  +		selected.push(shape);
                                                  +	}
                                                  +	return selected;
                                                  +}
                                                  +
                                                  +//运行时刻检查所选图形是否包含不能创建的类型
                                                  +function checkSeletedNodeType() {
                                                  +	if (Designer.status == "running") {
                                                  +		var selecteds = Utils.getSelected();
                                                  +		for (var i = 0; i < selecteds.length; i++) {
                                                  +			var task = selecteds[i];
                                                  +			if (task.groupName == "task" || task.name == "callActivityCallingProcess" || task.name == "transaction") {
                                                  +				return true;
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	return false;
                                                  +}
                                                  +
                                                  +//运行时刻初始化Dashboard的时候判断是否包含不能创建的类型
                                                  +function initRunningDashboard(board) {
                                                  +	//判断一下设计器当前配置所支持的类型
                                                  +	var boardId = board.attr("id");
                                                  +	if (boardId.indexOf("process_bpmn2") > -1) {
                                                  +		board.children().hide();
                                                  +		if (BPMNSupport == "level0") {//如果level0时,出现在level1中和level2中的图形过滤掉
                                                  +			initBPMNLevel0(board, true);
                                                  +			initBPMNLevel1(board, false);
                                                  +			initBPMNLevel2(board, false);
                                                  +		} else if (BPMNSupport == "level1") {//如果level1时,出现在level2中的图形过滤掉
                                                  +			initBPMNLevel0(board, true);
                                                  +			initBPMNLevel1(board, true);
                                                  +			initBPMNLevel2(board, false);
                                                  +		} else if (BPMNSupport == "level2") {//如果level1时,出现在level2中的图形过滤掉
                                                  +			initBPMNLevel0(board, true);
                                                  +			initBPMNLevel1(board, true);
                                                  +			initBPMNLevel2(board, true);
                                                  +		}
                                                  +	}
                                                  +	if (Designer.status == "running") {
                                                  +		board.children(".dashboard_box[shapeName=userTask]").hide();
                                                  +		board.children(".dashboard_box[shapeName=callActivityCallingProcess]").hide();
                                                  +		board.children(".dashboard_box[shapeName=transaction]").hide();
                                                  +	} else {
                                                  +		board.children(".dashboard_box[shapeName=userTask]").show();
                                                  +		board.children(".dashboard_box[shapeName=callActivityCallingProcess]").show();
                                                  +		board.children(".dashboard_box[shapeName=transaction]").show();
                                                  +	}
                                                  +}
                                                  +
                                                  +//运行时刻初始化左侧图形面板的时候判断是否包含不能创建的类型
                                                  +function checkRunningTimeShape(shape) {
                                                  +	//判断一下设计器当前配置所支持的类型
                                                  +	var support = "";
                                                  +	if (BPMNSupport == "level0") {//如果level0时,出现在level1中和level2中的图形过滤掉
                                                  +		support = BPMNLevel0;
                                                  +	} else if (BPMNSupport == "level1") {//如果level1时,出现在level2中的图形过滤掉
                                                  +		support = BPMNLevel0 + "," + BPMNLevel1;
                                                  +	} else if (BPMNSupport == "level2") {//如果level1时,出现在level2中的图形过滤掉
                                                  +		support = BPMNLevel0 + "," + BPMNLevel1 + "," + BPMNLevel2;
                                                  +	}
                                                  +	if (support.indexOf(shape.name) == -1) {
                                                  +		return true;
                                                  +	}
                                                  +	if (Designer.status == "running") {
                                                  +		if (shape.groupName == "task" || shape.name == "callActivityCallingProcess" || shape.name == "transaction") {
                                                  +			return true;
                                                  +		}
                                                  +	}
                                                  +	return false;
                                                  +}
                                                  +
                                                  +
                                                  +function initBPMNLevel0(board, isShow) {
                                                  +	var arr = BPMNLevel0.split(",");
                                                  +	for (var i=0; i < arr.length; i++) {
                                                  +		initBoardShapeVisible(board, arr[i], isShow);
                                                  +	};
                                                  +}
                                                  +
                                                  +function initBPMNLevel1(board, isShow) {
                                                  +	var arr = BPMNLevel1.split(",");
                                                  +	for (var i=0; i < arr.length; i++) {
                                                  +		initBoardShapeVisible(board, arr[i], isShow);
                                                  +	};
                                                  +}
                                                  +
                                                  +function initBPMNLevel2(board, isShow) {
                                                  +	var arr = BPMNLevel2.split(",");
                                                  +	for (var i=0; i < arr.length; i++) {
                                                  +		initBoardShapeVisible(board, arr[i], isShow);
                                                  +	};
                                                  +}
                                                  +
                                                  +function initBoardShapeVisible(board, shapeName, isShow) {
                                                  +	if (isShow) {
                                                  +		board.children(".dashboard_box[shapename='" + shapeName + "']").show();
                                                  +	} else {
                                                  +		board.children(".dashboard_box[shapename='" + shapeName + "']").hide();
                                                  +	}
                                                  +}
                                                  +
                                                  +
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.js
                                                  new file mode 100644
                                                  index 00000000..7a9508e9
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.js
                                                  @@ -0,0 +1,4092 @@
                                                  +/**
                                                  + * @author wangyh 与插入链接,属性,关系相关的js内容
                                                  + */
                                                  +var selectedShapes = [];
                                                  +var linkType; // 链接类型:custom:自定义链接;file:文件链接
                                                  +$(document).ready(function() {
                                                  +	showPainting();
                                                  +	setDivHeight();
                                                  +	// awsui.parse();
                                                  +	$("#linkto_file").buttonedit({
                                                  +		onClick : showLinkTree
                                                  +	});
                                                  +
                                                  +	setTimeout(function() {
                                                  +		Designer.hotkey.init();// 解决快捷健绑定不成功
                                                  +		// DesignerCopyPaste.checkHasUsedShape();
                                                  +//				if (window.opener && window.opener.document.getElementById("teamId").value != "") {
                                                  +//					//如果从“流程团队”中打开设计器,则不进行复制粘贴同步监听
                                                  +//				} else {
                                                  +//					DesignerCopyPaste.changeTitleListen();// 复制粘贴形状内容同步的监听
                                                  +//				}
                                                  +		DesignerCopyPaste.changeTitleListen();
                                                  +		if (selectedElementId && selectedElementId != "") {
                                                  +			Utils.selectShape(selectedElementId);
                                                  +		}// 复制粘贴形状内容同步的监听
                                                  +	}, 1000);
                                                  +
                                                  +	//初始化visio导入的fileUpload
                                                  +	initVisioImportFileUpload();
                                                  +	//初始化更多特性按钮
                                                  +	initMoreAttrRight();
                                                  +	//初始化节点附件上传事件
                                                  +	addShapeFile();
                                                  +});
                                                  +
                                                  +function initMoreAttrRight() {
                                                  +	if($('#moreAttrRight').val() == "false") {
                                                  +		$("#showMoreAttrUL").remove();
                                                  +	}
                                                  +}
                                                  +
                                                  +/**
                                                  + * 判断是否正在保存
                                                  + */
                                                  +function isSavingFile() {
                                                  +	if ($("#saving_tip").text() == "已保存成功" || $("#saving_tip").text() == "保存成功" || $("#saving_tip").text() == "您的文件已经成功保存" || $("#saving_tip").text() == "")
                                                  +		return true;
                                                  +	else
                                                  +		return false;
                                                  +}
                                                  +
                                                  +/**
                                                  + * 兼容1024*768画布显示
                                                  + *
                                                  + * @param {}
                                                  + *
                                                  + */
                                                  +
                                                  +function showPainting() {
                                                  +	var width = screen.width;
                                                  +	if (width == 1024) {
                                                  +		$("#toolbar_wfversion_info").addClass("showPainting");
                                                  +		if (parent.getWidthToolbar() > 750) {
                                                  +			$(".toolbar").removeClass("heightCssToolbar")
                                                  +				.addClass("toolbarExtend");
                                                  +			$("#bar_back").removeClass("cssToolbar");
                                                  +
                                                  +		} else {
                                                  +			$(".toolbar").addClass("heightCssToolbar")
                                                  +				.removeClass("toolbarExtend");
                                                  +			$("#bar_back").addClass("cssToolbar");
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +/**
                                                  + * 重写单击图形时的触发的事件
                                                  + *
                                                  + * @param {}
                                                  + *
                                                  + * @returns {}
                                                  + */
                                                  +Designer.op.shapeSelectable = function(a) {
                                                  +	var b = $("#designer_canvas");
                                                  +	b.bind("mousedown.select", function(d) {
                                                  +		Designer.op.changeState("seelcting_shapes");
                                                  +		var e = a.id;
                                                  +		var c = [];
                                                  +		if (d.ctrlKey) {
                                                  +			var c = Utils.getSelectedIds();
                                                  +			if (Utils.isSelected(e)) {
                                                  +				Utils.removeFromArray(c, e);
                                                  +			} else {
                                                  +				c.push(e);
                                                  +			}
                                                  +
                                                  +			if ($("#dock_content_attribute").is(":visible")) {
                                                  +				$("#tagContent1 :focus").blur();
                                                  +			}
                                                  +
                                                  +			Utils.unselect();
                                                  +			if (c.length > 0) {
                                                  +				Utils.selectShape(c);
                                                  +			}
                                                  +		} else {
                                                  +			if (Utils.selectIds.indexOf(e) < 0) {
                                                  +
                                                  +				if ($("#dock_content_attribute").is(":visible")) {
                                                  +					$("#tagContent1 :focus").blur();
                                                  +				}
                                                  +
                                                  +				Utils.unselect();
                                                  +				Utils.selectShape(e);
                                                  +			}
                                                  +		}
                                                  +		$(document).bind("mouseup.select", function() {
                                                  +			Designer.op.resetState();
                                                  +			b.unbind("mousedown.select");
                                                  +			$(document).unbind("mouseup.select");
                                                  +		});
                                                  +		// selectedShapes
                                                  +		DesignerCopyPaste.selectedShapeId = Utils.getSelected()[0].id;
                                                  +		if ($("div.dock_view_attribute").is(":visible")) {
                                                  +			showShapeRelationTab(null);
                                                  +			attributeShowTabContent(null);
                                                  +			shapeCopyAndPasteCount(null);
                                                  +			showRelevanceShapesContent();
                                                  +		}
                                                  +		var tmpArray = getTmpArray(isLaneAttrConfig);
                                                  +		if (Utils.getSelected()[0].category == "basic") {
                                                  +			$("#showMoreAttrUL").hide();
                                                  +		} else if ($.inArray(Utils.getSelected()[0].name, tmpArray) != -1) {// 泳池泳道隐藏
                                                  +			$('#showMoreAttrUL').hide();
                                                  +		} else {
                                                  +			if ($("#tabLiContainnerAttribute").hasClass("selectTag")) {
                                                  +				$("#dock_content_attribute #showMoreAttrUL").show();
                                                  +			} else {
                                                  +				$("#dock_content_attribute #showMoreAttrUL").hide();
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +};
                                                  +//根据isLaneAttrConfig来判断数组的数据
                                                  +function getTmpArray(isLaneAttrConfig) {
                                                  +	var tmpArray1 = ['verticalPool', 'verticalLane', 'horizontalPool', 'horizontalLane'];
                                                  +	var tmpArray2 = ['verticalPool', 'horizontalPool'];
                                                  +	if (isLaneAttrConfig) {
                                                  +		return tmpArray2;
                                                  +	} else {
                                                  +		return tmpArray1;
                                                  +	}
                                                  +}
                                                  +// 重写
                                                  +Designer.linkClickable = function(a, c) {/*
                                                  +											 * var b = $("#link_spot"); if
                                                  +											 * (b.length == 0) { b = $("<a
                                                  +											 * id='link_spot' target='_blank'
                                                  +											 * onclick='openLink(this);'></a>")
                                                  +											 * .appendTo("#designer_canvas"); }
                                                  +											 * if
                                                  +											 * (a.trim().toLowerCase().indexOf("http") ==
                                                  +											 * -1) { a = "http://" + a; }
                                                  +											 * b.show().css({ left : c.x - 50,
                                                  +											 * top : c.y - 50, "z-index" :
                                                  +											 * Model.orderList.length + 1 });
                                                  +											 */
                                                  +};
                                                  +var myshapeLink = "";
                                                  +var linkIndex = 0;
                                                  +var selectShape = Utils.getSelected()[0];
                                                  +/**
                                                  + * 功能:去除字符串中所有空格 传参:需要处理的字符串 返回值:去除空格后的字符串
                                                  + */
                                                  +function trimSpaces(Str) {
                                                  +	var ResultStr = "";
                                                  +	Temp = Str.split(/\s/);
                                                  +	for (i = 0; i < Temp.length; i++) {
                                                  +		ResultStr += Temp[i];
                                                  +	}
                                                  +	return ResultStr;
                                                  +}
                                                  +
                                                  +/**
                                                  + * 重写插入链接事件
                                                  + *
                                                  + * @returns {}
                                                  + */
                                                  +UI.showInsertLink = function() {
                                                  +	var ua = navigator.userAgent.toLowerCase();
                                                  +	if (ua.match(/chrome\/([\d.]+)/)) {
                                                  +		$("#link_custom_target1").css({"width" : "264px"});
                                                  +		$("#link_custom_target1").siblings("span.awsui-select-span").css({"width" : "252px"});
                                                  +		$("#link_custom_target2").css({"width" : "262px"});
                                                  +		$("#link_custom_target2").siblings("span.awsui-select-span").css({"width" : "250px"});
                                                  +	}
                                                  +
                                                  +	$("#link_dialog").dialog({
                                                  +		title: "插入链接",
                                                  +		buttons:[
                                                  +			{text:'确定',cls:"blue",handler:function(){UI.setLink();}},
                                                  +			{text:'关闭',handler:function(){$('#link_dialog').dialog('close');}}
                                                  +		]
                                                  +	});
                                                  +	$(".awsui-simple-tab").find("a[tit=file]").trigger('click');
                                                  +	$("#linksHistory").empty();
                                                  +	$("#linksFileHistory").empty();
                                                  +	var addr = Utils.getSelected()[0].linksArray;
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.linksArray) {
                                                  +			addr = attr.linksArray;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	if (!addr) {
                                                  +		addr = new Array();
                                                  +	}
                                                  +	var links_file = new Array();
                                                  +	var links_custom = new Array();
                                                  +	for (var i = 0; i < addr.length; i++) {
                                                  +		var link = addr[i];
                                                  +		if (link.type == "file") {
                                                  +			links_file.push(link);
                                                  +		} else {
                                                  +			links_custom.push(link);
                                                  +		}
                                                  +	}
                                                  +
                                                  +	if (links_custom.length == 0) {
                                                  +		$("#linksHistoryDiv").hide();
                                                  +	} else {
                                                  +		$("#linksHistoryDiv").show();
                                                  +	}
                                                  +	if (links_file.length == 0) {
                                                  +		$("#linksFileHistoryDiv").hide();
                                                  +	} else {
                                                  +		$("#linksFileHistoryDiv").show();
                                                  +	}
                                                  +
                                                  +	$("#linkto_addr").val("");
                                                  +	$("#linkto_addr_name").val("");
                                                  +	$("#linkto_file").val("");
                                                  +	$("#linkto_file_name").val("");
                                                  +	writeLinksHistory("linksHistory", links_custom);
                                                  +	writeLinksHistory("linksFileHistory", links_file);
                                                  +
                                                  +	$("#linkto_addr").unbind().bind("keydown", function(e) {
                                                  +		if (e.keyCode == 13) {
                                                  +			UI.setLink();
                                                  +		}
                                                  +	});
                                                  +	setDivHeight();
                                                  +};
                                                  +
                                                  +//风险控制
                                                  +UI.showRiskDlg = function(){
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	var number;
                                                  +	if (shape.dataAttributes != undefined) {
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			if (shape.dataAttributes[i].privateAttributeContent != null) {
                                                  +				var privateAttributeContent = shape.dataAttributes[i].privateAttributeContent;
                                                  +				if (typeof(privateAttributeContent) == "string") {
                                                  +					privateAttributeContent = eval("(" + privateAttributeContent + ")");
                                                  +				}
                                                  +				number = privateAttributeContent.number;
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	if (number == undefined || number == "") {
                                                  +		$.simpleAlert("请先维护该节点编号");
                                                  +		return;
                                                  +	}
                                                  +	var riskDlg = FrmDialog.open({
                                                  +		width:800,
                                                  +		height:700,
                                                  +		url:"./w?sid=" + $("#sid").val() + "&cmd=com.actionsoft.apps.coe.pal.risk_pal_designer_risk",
                                                  +		data:{"plId":ruuid, "taskId": shape.id, "taskNum": number}
                                                  +	});
                                                  +}
                                                  +
                                                  +//流程节点的风险控制不为空,重新渲染shape
                                                  +function renderShapeRisks(risk, control) {
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	if (shape.dataAttributes != undefined) {
                                                  +		var riskFlag = false;
                                                  +		var controlFlag = false;
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			if (shape.dataAttributes[i].risk != undefined) {
                                                  +				shape.dataAttributes[i].risk = risk;
                                                  +				riskFlag = true;
                                                  +			}
                                                  +			if (shape.dataAttributes[i].control != undefined) {
                                                  +				shape.dataAttributes[i].control = control;
                                                  +				controlFlag = true;
                                                  +			}
                                                  +		}
                                                  +		if (!riskFlag) {
                                                  +			var index = shape.dataAttributes.length -1;
                                                  +			shape.dataAttributes[index].risk = risk;
                                                  +		}
                                                  +		if (!controlFlag) {
                                                  +			var index = shape.dataAttributes.length -1;
                                                  +			shape.dataAttributes[index].control = control;
                                                  +		}
                                                  +	}
                                                  +	Designer.painter.renderShape(shape);
                                                  +}
                                                  +
                                                  +//visio导入-打开dialog
                                                  +UI.showImportDlg = function() {
                                                  +	if (processOnIsInstall == "false") {
                                                  +		$.simpleAlert("[ProcessOn]应用未安装");
                                                  +		return;
                                                  +	}
                                                  +	if (processOnIsActive == "false") {
                                                  +		$.simpleAlert("[ProcessOn]应用未启动");
                                                  +		return;
                                                  +	}
                                                  +	$("#visio_import_input").empty();
                                                  +	$("#visio_import_input").val("");
                                                  +	$("#visio_import_dlg").dialog({
                                                  +		width: 400,
                                                  +		height: 200,
                                                  +		buttons:[
                                                  +			{text:'导入',cls:"blue",handler:function(){
                                                  +					importVisio();
                                                  +				}},
                                                  +			{text:'取消',handler:function(){$("#visio_import_dlg").dialog("close");}}
                                                  +		]
                                                  +	});
                                                  +}
                                                  +//初始化visio导入的fileupload组件
                                                  +function initVisioImportFileUpload() {
                                                  +	$("#visio_import_upfile").upfile({
                                                  +		sid:$("#sid").val(),
                                                  +		appId:"com.actionsoft.apps.coe.pal",
                                                  +		groupValue:"_import",
                                                  +		fileValue:"Normal",
                                                  +		filesToFilter : [[]],
                                                  +		repositoryName:"tmp",
                                                  +		numLimit:1,
                                                  +		add: function(e, data) {
                                                  +			var filename = data['files'][0].name;
                                                  +			var suffix = filename.substring(filename.lastIndexOf("."));
                                                  +			if (suffix != ".vsd" && suffix != ".vdx" && suffix != ".vsdx") {
                                                  +				$.simpleAlert("请上传后缀为vsd、vdx或者vsdx格式的visio文件", "warning");
                                                  +				return false;
                                                  +			}
                                                  +		},
                                                  +		done:function(e, data){
                                                  +			var filename = data['result']['files']['name'];
                                                  +			filename = decodeURI(filename);
                                                  +			$("#visio_import_input").val(filename);
                                                  +			$.mask();
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +//visio导入-执行导入
                                                  +function importVisio() {
                                                  +	if ($("#visio_import_input").val() == null || $("#visio_import_input").val() == "") {
                                                  +		$.simpleAlert("请先上传文件", "warning");
                                                  +		return;
                                                  +	}
                                                  +	$.simpleAlert("正在处理", "loading");
                                                  +	$.ajax({
                                                  +		type: "POST",
                                                  +		url: "./jd",
                                                  +		data : {
                                                  +			sid: sid,
                                                  +			cmd: "com.actionsoft.apps.coe.pal.processon_designer_import_visio",
                                                  +			wsId: $("#wsId").val(),
                                                  +			plId: ruuid,
                                                  +			fileName: $("#visio_import_input").val()
                                                  +		},
                                                  +		success: function(msg){
                                                  +			if (msg.result == "ok") {
                                                  +				$.simpleAlert("close");
                                                  +				$.simpleAlert("导入成功", "ok");
                                                  +				setTimeout(function(){
                                                  +					parent.refresh();
                                                  +					$("#visio_import_dlg").dialog("close");
                                                  +					window.location.reload();
                                                  +				}, 1000);
                                                  +
                                                  +			} else {
                                                  +				$.simpleAlert("close");
                                                  +				$.simpleAlert("导入失败," + msg.msg, "error");
                                                  +			}
                                                  +		}
                                                  +	})
                                                  +}
                                                  +
                                                  +function writeLinksHistory(table_id, data) {
                                                  +	var html = "";
                                                  +	// 列出所有的链接
                                                  +	for (var k = 0; k < data.length; k++) {
                                                  +		var ele = data[k];
                                                  +		var strTarget = "0";
                                                  +		var name_qtip = ele.name;
                                                  +		var url_qtip = ele.value;
                                                  +		var typeBlank = "新窗口";
                                                  +		if (ele.target == "_seft") {
                                                  +			typeBlank = "当前窗口";
                                                  +		} else if (ele.target == "newTab") {
                                                  +			typeBlank = "新页签";
                                                  +		}
                                                  +		var con = '<tr class="links_history_tr"><td>'
                                                  +			+ '<div style="text-align:left;width:110px;;text-overflow:ellipsis;overflow: hidden;white-space: nowrap;"  class="awsui-qtip" awsui-qtip="'
                                                  +			+ name_qtip
                                                  +			+ '">'
                                                  +			+ ele.name
                                                  +			+ '</div>'
                                                  +			+ '</td><td><span style="float:left;margin-left:0px;text-align:left;"><a  target="'
                                                  +			+ ele.target
                                                  +			+ '" onclick="openLinkUrlRewrite(\''
                                                  +			+ ele.type
                                                  +			+ '\',\''
                                                  +			+ ele.url
                                                  +			+ '\',\''
                                                  +			+ strTarget
                                                  +			+ '\',\''
                                                  +			+ ele.uuid
                                                  +			+ '\',this,\''
                                                  +			+ ele.name
                                                  +			+ '\')">'
                                                  +			+ '<div style="width:110px;;text-overflow:ellipsis;overflow: hidden;white-space: nowrap;"  class="awsui-qtip" awsui-qtip="'
                                                  +			+ url_qtip
                                                  +			+ '">'
                                                  +			+ ele.value
                                                  +			+ '</div>'
                                                  +			+ '</a></span></td>'
                                                  +			+ '<td><div >'
                                                  +			+ typeBlank
                                                  +			+ '</div></td>'
                                                  +			+ '<td><span style="float:center;" vl="'
                                                  +			+ ele.url
                                                  +			+ '" onclick="removeLinkHistoryByLink(this)">删除</span></td></tr>';
                                                  +		html += con;
                                                  +	}
                                                  +	$("#" + table_id).html(html);
                                                  +	setDivHeight();
                                                  +}
                                                  +
                                                  +/**
                                                  + * 设置连接
                                                  + *
                                                  + * @param {}
                                                  + *            type
                                                  + * @param {}
                                                  + *            url
                                                  + * @param {}
                                                  + *            target
                                                  + * @param {}
                                                  + *            uuid
                                                  + */
                                                  +function editLinkTargetType(obj) {
                                                  +	var target = $(obj).parent().siblings().find("a").attr("target");
                                                  +	$(obj).hide().siblings().show().find("select option[value='" + target
                                                  +		+ "']").attr("selected", "true");
                                                  +}
                                                  +
                                                  +// 打开链接,如果是自定义链接,直接打开;如果是文件链接,
                                                  +function openLinkUrl(type, url, target, uuid, obj) {
                                                  +	if (target == "0") {
                                                  +		target = $(obj).attr("target");
                                                  +	}
                                                  +	if (type == "custom") {
                                                  +		$("#link-dialog-normal_contextmenu").hide();
                                                  +		window.open(url, target);
                                                  +	} else {
                                                  +		$.ajax({
                                                  +			async : false,
                                                  +			url : encodeURI("./w?sid=" + sid
                                                  +				+ "&cmd=com.actionsoft.apps.coe.pal_pl_using_plid_query&uuid=" + uuid),
                                                  +			success : function(data) {
                                                  +				if (data != "") {
                                                  +					url = "./w?sid="
                                                  +						+ sid
                                                  +						+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&uuid="
                                                  +						+ data + "&openType=0&perms=" + perms + "&filePerms=" + filePerms;
                                                  +					$("#link-dialog-normal_contextmenu").hide();
                                                  +					window.open(url, target);
                                                  +				} else {
                                                  +					$.simpleAlert("链接文件已被删除", "info");
                                                  +					//$("#simplealert>.msg").css("top", "15px");
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	}
                                                  +}
                                                  +
                                                  +function openLinkUrlRewrite(type, url, target, uuid, obj, fileName, inspected) {
                                                  +	if (target == "0") {
                                                  +		target = $(obj).attr("target");
                                                  +	}
                                                  +	if (type == "custom") {
                                                  +		$("#link-dialog-normal_contextmenu").hide();
                                                  +		if (target == "newTab" && parent.openTabCustom != undefined) {
                                                  +			parent.openTabCustom(uuid, url, fileName);
                                                  +		} else if (target == "_seft") {
                                                  +			if (parent.changeTabTitle) {
                                                  +				parent.changeTabTitle(chartId, fileName, uuid, "custom");
                                                  +			}
                                                  +			window.location.href = url;
                                                  +		} else {
                                                  +			window.open(url, target);
                                                  +		}
                                                  +	} else {
                                                  +		if (inspected) { //已经进行过权限判断,不需要再判断
                                                  +			openFileLink(uuid, target, fileName);
                                                  +		} else {
                                                  +			var openerAppId = parent.window.$("#appId").val();
                                                  +			var params = {
                                                  +				sid : $("#sid").val(),
                                                  +				cmd: "com.actionsoft.apps.coe.pal_pl_repository_designer_viewer_link_perm",
                                                  +				uuids: uuid,
                                                  +				filePerms: filePerms
                                                  +			}
                                                  +			if (window.opener) {
                                                  +				params.modelType = "used";
                                                  +			} else if (openerAppId != undefined && openerAppId != "com.actionsoft.apps.coe.pal" && openerAppId != "") {
                                                  +				params.modelType = "published";
                                                  +			}
                                                  +
                                                  +			awsui.ajax.request({
                                                  +				url : "./jd",
                                                  +				method : "POST",
                                                  +				data : params,
                                                  +				success : function(msg) {
                                                  +					if (msg.result == "ok") {
                                                  +						var data = msg.data.uuids;
                                                  +						if (data.length > 0) {
                                                  +							openFileLink(data[0].uuid, target, fileName);
                                                  +						} else {
                                                  +							$.simpleAlert("链接文件已被删除", "info");
                                                  +							//$("#simplealert>.msg").css("top", "15px");
                                                  +						}
                                                  +					}
                                                  +
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +function openFileLink(uuid, target, linkModelName) {
                                                  +	var cmd = "com.actionsoft.apps.coe.pal_pl_repository_designer";
                                                  +	//如果从流程团队中只读打开,则只读打开链接文件
                                                  +	if (role == "viewer") {
                                                  +		cmd = "com.actionsoft.apps.coe.pal_pl_repository_designer_viewer";
                                                  +	}
                                                  +	var url = "./w?sid="
                                                  +		+ sid
                                                  +		+ "&cmd=" + cmd + "&uuid="
                                                  +		+ uuid + "&openType=0"
                                                  +		+ "&perms=" + encodeURIComponent(perms)
                                                  +		+ "&openAppType=" + openAppType;
                                                  +
                                                  +	$("#link-dialog-normal_contextmenu").hide();
                                                  +	if (target == "newTab" && parent.openDesginerFromAttr != undefined) {
                                                  +		parent.openDesginerFromAttr(uuid, 0, linkModelName, '', '', false, '');
                                                  +	} else if (target == "_seft") {
                                                  +		$("#openNewModelForm").attr("action", url).attr("target", "_self");
                                                  +		$("#openNewModelForm").submit();
                                                  +		parent.changeTabTitle(chartId, linkModelName, uuid);
                                                  +	} else {
                                                  +		$("#openNewModelForm").attr("action", url);
                                                  +		$("#openNewModelForm").submit();
                                                  +	}
                                                  +}
                                                  +
                                                  +/**
                                                  + * 链接确定的鼠标单击事件
                                                  + */
                                                  +UI.setLink = function() {
                                                  +	var addrName;
                                                  +	var addrLink;
                                                  +	var newLink;// 121
                                                  +	// var linkto_addr_name =document.getElementById("linkto_addr_name").value;
                                                  +	var linkType = $("#link_dialog div.awsui-simple-tab").find("a.active").attr("tit");
                                                  +	if (linkType == "custom") {
                                                  +		addrName = trimSpaces($("#linkto_addr_name")[0].value);
                                                  +		addrLink = trimSpaces($("#linkto_addr").val());
                                                  +		if (addrName == "") {
                                                  +			$.simpleAlert("[链接名称]不允许为空", "info", 2000);
                                                  +			//$("#simplealert>.msg").css("top", "15px");
                                                  +			return;
                                                  +		}
                                                  +		if (addrLink == "") {
                                                  +			$.simpleAlert("[链接地址]不允许为空", "info", 2000);
                                                  +			//$("#simplealert>.msg").css("top", "15px");
                                                  +			return;
                                                  +		}
                                                  +		if (addrName.length > 30) {
                                                  +			$.simpleAlert("[链接名称]不允许超过30个字符", "info", 2000);
                                                  +			//$("#simplealert>.msg").css("top", "15px");
                                                  +			return;
                                                  +		}
                                                  +		// 判断url是否合法
                                                  +		/***********************************************************************
                                                  +		 * var strRegex = "^((https|http|ftp|rtsp|mms)?://)" +
                                                  +		 * "?(([0-9a-z_!~*'().&amp;=+$%-]+: )?[0-9a-z_!~*'().&amp;=+$%-]+@)?" //
                                                  +		 * ftp的user@ + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL-
                                                  +		 * 199.194.52.184 + "|" // 允许IP和DOMAIN(域名) + "([0-9a-z_!~*'()-]+\.)*" //
                                                  +		 * 域名- www. + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名 +
                                                  +		 * "[a-z]{2,6})" // first level domain- .com or .museum +
                                                  +		 * "(:[0-9]{1,4})?" // 端口- :80 + "((/?)|" // a slash isn't required if
                                                  +		 * there is no file name + "(/[0-9a-z_!~*'().;?:@&amp;=+$,%#-]+)+/?)$";
                                                  +		 **********************************************************************/
                                                  +		var tomatch = /(http:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3})|([A-Za-z0-9\.-]{3,}\.[A-Za-z0-9]{3,})/;
                                                  +		// var re = new RegExp(strRegex);
                                                  +		newLink = $("#linkto_addr").val();
                                                  +		if (addrLink.substring(0, 16) == "./w?sid=@sid&cmd"
                                                  +			|| addrLink.substring(0, 17) == "./jd?sid=@sid&cmd"
                                                  +			|| addrLink.substring(0, 17) == "./xd?sid=@sid&cmd"
                                                  +			|| addrLink.substring(0, 17) == "./df?sid=@sid&cmd"
                                                  +			|| addrLink.substring(0, 17) == "./uf?sid=@sid&cmd") {
                                                  +			if (newLink.indexOf("sid") > 0) {
                                                  +				newLink = newLink.replace("@sid", sid);
                                                  +			}
                                                  +		} else if (!tomatch.test(addrLink)) {
                                                  +			$.simpleAlert("链接地址不合法", "info", 2000);
                                                  +			//$("#simplealert>.msg").css("top", "15px");
                                                  +			return;
                                                  +		} else if (newLink.indexOf("http") == -1
                                                  +			&& newLink.indexOf("sid") == -1) {
                                                  +			newLink = "http://" + newLink;
                                                  +		}
                                                  +	} else {
                                                  +		addrName = trimSpaces($("#linkto_file_name").val());
                                                  +		addrLink = trimSpaces($("#linkto_file").val());
                                                  +		if (addrName == "") {
                                                  +			$.simpleAlert("[链接名称]不允许为空", "info", 2000);
                                                  +			//$("#simplealert>.msg").css("top", "15px");
                                                  +			return;
                                                  +		}
                                                  +		if (addrName.length > 30) {
                                                  +			$.simpleAlert("[链接名称]不允许超过30个字符", "info", 2000);
                                                  +			//$("#simplealert>.msg").css("top", "15px");
                                                  +			return;
                                                  +		}
                                                  +		if (addrLink == "") {
                                                  +			$.simpleAlert("[链接文件]不允许为空", "info", 2000);
                                                  +			//$("#simplealert>.msg").css("top", "15px");
                                                  +			return;
                                                  +		}
                                                  +		newLink = $("#linkto_file").val();
                                                  +	}
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	if (linkType != "custom") {
                                                  +		//选择文件链接时,将节点名称改为所链接的文件名称
                                                  +		//shape.text = trimSpaces($("#linkto_file_name").val());
                                                  +	}
                                                  +	myshapeLink = shape;
                                                  +	var linkArr = [];
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.linksArray) {
                                                  +			linkArr = attr.linksArray;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	if (!isArray(linkArr)) {
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var attr = shape.dataAttributes[i];
                                                  +			if (attr.linksArray) {
                                                  +				linkArr = new Array();
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		// shape.linksArray = new Array();
                                                  +	}
                                                  +	var uuid = new Date().getTime() + "";
                                                  +	var url = linkType == "custom"
                                                  +		? $("#linkto_addr").val()
                                                  +		: $("#linkto_file").attr("url");
                                                  +
                                                  +	if (!checkLink(url)) {
                                                  +		if (linkType == "custom") {
                                                  +			$("#linksHistoryDiv").show();
                                                  +			shape.link = $("#linkto_addr").val();
                                                  +			url = newLink;
                                                  +		} else {
                                                  +			$("#linksFileHistoryDiv").show();
                                                  +			shape.link = $("#linkto_file").val();
                                                  +			uuid = $("#linkto_file").attr("uuid");
                                                  +			url = $("#linkto_file").attr("url");
                                                  +		}
                                                  +		var divObj = $("div[tit='" + linkType + "']");
                                                  +		var openType = divObj.find("select option:selected").val();
                                                  +		linksHistoryShowAndAdd(shape, addrName, newLink, openType, uuid, url);
                                                  +	} else {
                                                  +		$.simpleAlert("链接已存在 ", "info", 2000);
                                                  +		//$("#simplealert>.msg").css("top", "15px");
                                                  +	}
                                                  +	Designer.painter.renderShape(shape);
                                                  +};
                                                  +
                                                  +/**
                                                  + * 在插入链接的弹窗中动态增加行信息
                                                  + */
                                                  +
                                                  +function linksHistoryShowAndAdd(shape, name, value, target, uuid, url) {
                                                  +	var linkType = $("#link_dialog div.awsui-simple-tab").find("a.active").attr("tit");
                                                  +	var json = setCondVal(name, value, target, linkType, uuid, url);
                                                  +	if (!json) {
                                                  +		json = JSON.stringify({})
                                                  +	}
                                                  +	json = JSON.stringify(json);
                                                  +	json = eval("(" + json + ")");
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.linksArray) {
                                                  +			attr.linksArray.push(json);
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	Model.update(shape);
                                                  +	var name_qtip = name;
                                                  +	var url_qtip = value;
                                                  +	var typeBlank = "新窗口";
                                                  +	if (target == "_seft") {
                                                  +		typeBlank = "当前窗口";
                                                  +	} else if (target == "newTab") {
                                                  +		typeBlank = "新页签";
                                                  +	}
                                                  +	var strTarget = "0";
                                                  +	var con = '<tr class="links_history_tr">'
                                                  +		+ '	<td>'
                                                  +		+ '		<div style="text-align:left;;width:110px;text-overflow:ellipsis;overflow: hidden;white-space: nowrap;"  class="awsui-qtip" awsui-qtip="' + name_qtip + '">'
                                                  +		+ 			name
                                                  +		+ '		</div>'
                                                  +		+ '	</td>'
                                                  +		+ '	<td>'
                                                  +		+ '		<span style="float:left;margin-left:0px;text-align:left;">'
                                                  +		+ '			<a target="' + target + '" onclick="openLinkUrlRewrite(\'' + linkType + '\',\'' + url + '\',\'' + strTarget + '\',\'' + uuid + '\',this,\'' + name + '\')">'
                                                  +		+ '				<div style="width:110px;;text-overflow:ellipsis;overflow: hidden;white-space: nowrap;"  class="awsui-qtip" awsui-qtip="' + url_qtip + '">'
                                                  +		+ 					value
                                                  +		+ '				</div>'
                                                  +		+ '			</a>'
                                                  +		+ '		</span>'
                                                  +		+ '	</td>'
                                                  +		+ '	<td>'
                                                  +		+ '		<div>' + typeBlank + '</div>'
                                                  +		+ '	</td>'
                                                  +		+ '	<td>'
                                                  +		+ '		<span style="float:center;" vl="' + url + '" onclick="removeLinkHistoryByLink(this)">删除</span>'
                                                  +		+ '	</td>'
                                                  +		+ '</tr>';
                                                  +
                                                  +	if (linkType == "custom") {
                                                  +		$("#linksHistory").append(con);
                                                  +	} else {
                                                  +		$("#linksFileHistory").append(con);
                                                  +	}
                                                  +	var hieghtH = $("#linksHistory").height();
                                                  +	var hieghtHF = $("#linksFileHistory").height();
                                                  +	if (hieghtH < 200 || hieghtHF < 200) {
                                                  +		$("#linksHistory").css({
                                                  +			"overflow-y" : "hidden",
                                                  +			"overflow-x" : "hidden"
                                                  +		});
                                                  +		$("#linksFileHistory").css({
                                                  +			"overflow-y" : "hidden",
                                                  +			"overflow-x" : "hidden"
                                                  +		});
                                                  +	}
                                                  +	if (myshapeLink.category == "process_bpmn2") {
                                                  +		$.simpleAlert("添加成功", "ok", 2000);
                                                  +	} else {
                                                  +		$.simpleAlert("添加成功", "ok", 2000);
                                                  +	}
                                                  +	//$("#simplealert>.msg").css("top", "15px");
                                                  +	$("#linkto_addr_name").val("");
                                                  +	$("#linkto_addr").val("");
                                                  +	$("#linkto_file_name").val("");
                                                  +	$("#linkto_file").val("");
                                                  +	setDivHeight();
                                                  +}
                                                  +
                                                  +function setCondVal(name, value, target, linkType, uuid, url) {
                                                  +	var json = {
                                                  +		name : name,
                                                  +		value : value,
                                                  +		target : target,
                                                  +		type : linkType,
                                                  +		uuid : uuid,
                                                  +		url : url
                                                  +	};
                                                  +	return json
                                                  +}
                                                  +
                                                  +/**
                                                  + * 设置链接打开的方式
                                                  + */
                                                  +
                                                  +function setLinkTargetType(obj) {
                                                  +	var url = $(obj).attr("vl");
                                                  +	var value = $(obj).find("option:selected").val();
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	var linksArray = [];
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.linksArray) {
                                                  +			linksArray = attr.linksArray;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	var arr = [];
                                                  +	for (var a = 0; a < linksArray.length; a++) {
                                                  +		var el = linksArray[a];
                                                  +		if (el.url == url)
                                                  +			el.target = value;
                                                  +		arr.push(el);
                                                  +	}
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.linksArray) {
                                                  +			attr.linksArray = arr;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +
                                                  +	$(obj).parent().parent().prev().find("a").attr("target", value);
                                                  +	var els = $(obj).parent().find("a");
                                                  +	Model.update(shape);
                                                  +	// $(obj).hide();
                                                  +	$(obj).parent().hide().siblings().show().text($(obj)
                                                  +		.find("option:selected").text());
                                                  +}
                                                  +// 判断给定的对象是不是数组
                                                  +
                                                  +function isArray(o) {
                                                  +	return Object.prototype.toString.call(o) === '[object Array]';
                                                  +}
                                                  +
                                                  +/**
                                                  + * 链接的单击事件
                                                  + *
                                                  + * @param {}
                                                  + *            obj
                                                  + * @returns {}
                                                  + */
                                                  +
                                                  +function openLink(obj) {
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	myshapeLink = shape;
                                                  +	if (shape != undefined) {
                                                  +		var x = shape.props['x'];
                                                  +		var y = shape.props['y'];
                                                  +		var menu = $("#link-dialog-normal_contextmenu");
                                                  +		menu.empty();
                                                  +		var linksArr = [];
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var attr = shape.dataAttributes[i];
                                                  +			if (attr.linksArray) {
                                                  +				linksArr = attr.linksArray;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		if (linksArr.length == 1) {
                                                  +			openLinkUrlRewrite(linksArr[0].type, linksArr[0].url,
                                                  +				linksArr[0].target, linksArr[0].uuid, '', linksArr[0].name);
                                                  +		} else {
                                                  +			var tempA = [];
                                                  +			for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +				var attr = shape.dataAttributes[i];
                                                  +				if (attr.linksArray) {
                                                  +					tempA = attr.linksArray;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +			for (var index = 0; index < tempA.length; index++) {
                                                  +				linkIndex++;
                                                  +				var array_element = tempA[index];
                                                  +				var content = '<li id="linkLi_' + linkIndex
                                                  +					+ '" ac="cut"><a target="' + array_element.target
                                                  +					+ '"   onclick="openLinkUrlRewrite(\''
                                                  +					+ array_element.type + '\',\'' + array_element.url
                                                  +					+ '\',\'' + array_element.target + '\',\''
                                                  +					+ array_element.uuid + '\',\''
                                                  +				'\',\''
                                                  +				+ array_element.name
                                                  +				+ '\')">'
                                                  +				+ array_element.name
                                                  +				+ '</a><div class="extend" style="cursor:pointer;color:#4183C4;" ><div onclick="deleteTheLinkNode(\''
                                                  +				+ array_element.url + '\',\'' + linkIndex
                                                  +				+ '\')">删除</div></div></li>';
                                                  +				menu.append(content);
                                                  +			}
                                                  +		}
                                                  +		var currentFocus = Utils.getShapeByPosition(x, y, false);
                                                  +		// menu.children().hide();
                                                  +		var clipLen = Designer.clipboard.elements.length;
                                                  +		if (currentFocus == null) {
                                                  +			// 画布
                                                  +			if (clipLen > 0) {
                                                  +				menu.children("li[ac=paste]").show();
                                                  +				menu.children(".devi_clip").show();
                                                  +			}
                                                  +		} else {
                                                  +			var shape = currentFocus.shape;
                                                  +			menu.children("li[ac=cut]").show();
                                                  +		}
                                                  +		menu.css({
                                                  +			display : "block",
                                                  +			"z-index" : Model.orderList.length + 3,
                                                  +			left : x,
                                                  +			top : y
                                                  +		});
                                                  +		$(document)
                                                  +			.on(
                                                  +				"mousedown.link",
                                                  +				":not(#link-dialog-normal_contextmenu li):not(#link-dialog-normal_contextmenu ul):not(#link-dialog-normal_contextmenu a):not(#link-dialog-normal_contextmenu div)",
                                                  +				function(e) {
                                                  +					if (this.id == "link-dialog-normal_contextmenu") {
                                                  +						// e.stoppropagation();
                                                  +						return false;
                                                  +					}
                                                  +					menu.hide();
                                                  +				});
                                                  +	}
                                                  +}
                                                  +
                                                  +/**
                                                  + * 插入链接时的重复行检查
                                                  + *
                                                  + * @param {}
                                                  + *            str
                                                  + * @returns {}
                                                  + */
                                                  +
                                                  +function checkLink(str) {
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	var linkArr = [];
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.linksArray) {
                                                  +			linkArr = attr.linksArray;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	var flag = false;
                                                  +	for (var index = 0; index < linkArr.length; index++) {
                                                  +		var ele = linkArr[index];
                                                  +		if (ele.url == str) {
                                                  +			flag = true;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	return flag;
                                                  +}
                                                  +// 隐藏链接重复提示
                                                  +
                                                  +function removerWarning() {
                                                  +	$("#warningContent").text("");
                                                  +}
                                                  +// 删除所选 链接
                                                  +
                                                  +function deleteTheLinkNode(str, index) {
                                                  +	window.top.$.mask();
                                                  +	var options = {
                                                  +		title : "提示",
                                                  +		content : "确定删除所选链接吗?",
                                                  +		model : false,
                                                  +		onConfirm : function() {
                                                  +			var arr = myshapeLink.linksArray;
                                                  +			for (var i = 0; i < myshapeLink.dataAttributes.length; i++) {
                                                  +				var attr = myshapeLink.dataAttributes[i];
                                                  +				if (attr.linksArray) {
                                                  +					arr = attr.linksArray;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +			arr.remove(arr.getIndexByValue(str));
                                                  +			for (var i = 0; i < myshapeLink.dataAttributes.length; i++) {
                                                  +				var attr = myshapeLink.dataAttributes[i];
                                                  +				if (attr.linksArray) {
                                                  +					attr.linksArray = arr;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +			if (arr.length == 0) {
                                                  +				myshapeLink.link = "";
                                                  +			}
                                                  +			Designer.painter.renderShape(myshapeLink);
                                                  +			Model.update(myshapeLink);
                                                  +			$("#linkLi_" + index).remove();
                                                  +			$.simpleAlert("删除成功", "ok", 2000);
                                                  +			//$("#simplealert>.msg").css("top", "15px");
                                                  +			window.top.$.mask("close");
                                                  +		},
                                                  +		onCancel : function() {
                                                  +			window.top.$.mask("close");
                                                  +		},
                                                  +		onClose : function() {
                                                  +			window.top.$.mask("close");
                                                  +		}
                                                  +	};
                                                  +	window.top.$.confirm(options);
                                                  +}
                                                  +
                                                  +function removeLinkHistoryByLink(obj) {
                                                  +	var linkType = $("#link_dialog div.awsui-simple-tab").find("a.active").attr("tit");
                                                  +	window.top.$.mask();
                                                  +	myshapeLink = Utils.getSelected()[0]
                                                  +	var options = {
                                                  +		title : "提示",
                                                  +		content : "确定删除所选链接吗?",
                                                  +		model : false,
                                                  +		onConfirm : function() {
                                                  +			var arr = myshapeLink.linksArray;
                                                  +			for (var i = 0; i < myshapeLink.dataAttributes.length; i++) {
                                                  +				var attr = myshapeLink.dataAttributes[i];
                                                  +				if (attr.linksArray) {
                                                  +					arr = attr.linksArray;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +			arr.remove(arr.getIndexByValue($(obj).attr("vl")));
                                                  +			for (var i = 0; i < myshapeLink.dataAttributes.length; i++) {
                                                  +				var attr = myshapeLink.dataAttributes[i];
                                                  +				if (attr.linksArray) {
                                                  +					attr.linksArray = arr;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +			if (arr.length == 0) {
                                                  +				myshapeLink.link = "";
                                                  +			}
                                                  +			Model.update(myshapeLink);
                                                  +			Designer.painter.renderShape(myshapeLink);
                                                  +			$(obj).parent().parent().remove();
                                                  +			if (linkType == "custom") {
                                                  +				if ($.trim($("#linksHistoryDiv").text()).length == 0)
                                                  +					$("#linksHistoryDiv").hide();
                                                  +			} else {
                                                  +				if ($.trim($("#linksFileHistoryDiv").text()).length == 0)
                                                  +					$("#linksFileHistoryDiv").hide();
                                                  +			}
                                                  +			if (myshapeLink.category == "process_bpmn2") {
                                                  +				$.simpleAlert("删除成功", "ok", 2000);
                                                  +			} else {
                                                  +				$.simpleAlert("删除成功", "ok", 2000);
                                                  +			}
                                                  +			//$("#simplealert>.msg").css("top", "15px");
                                                  +			window.top.$.mask("close");
                                                  +		},
                                                  +		onCancel : function() {
                                                  +			window.top.$.mask("close");
                                                  +		},
                                                  +		onClose : function() {
                                                  +			window.top.$.mask("close");
                                                  +		}
                                                  +	};
                                                  +	window.top.$.confirm(options);
                                                  +
                                                  +}
                                                  +// 显示链接历史的删除
                                                  +
                                                  +function showRemoveTrLinkHistory(obj) {
                                                  +	$(obj).children("td").children("span::contains('删除')").show();
                                                  +	$(obj).children("td").children("span").children("select").show();
                                                  +}
                                                  +// 隐藏链接历史的删除按钮
                                                  +
                                                  +function hideRemoveTrLinkHistory(obj) {
                                                  +	$(obj).children("td").children("span::contains('删除')").hide();
                                                  +}
                                                  +
                                                  +function showLinkTree() {
                                                  +	var dlg=FrmDialog.open({
                                                  +		width:320,
                                                  +		height:380,
                                                  +		url:"./w?sid=" + $("#sid").val()
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_link_tree&wsid="
                                                  +			+ $("#wsId").val() +  "&palId=" + ruuid,
                                                  +		id:"link_tree_iframe",
                                                  +		buttons:[
                                                  +			{
                                                  +				text:'确定',
                                                  +				cls:"blue",
                                                  +				handler:function(){
                                                  +					var selectNode = window.frames[dlg.name()].getSelectTreeNode();
                                                  +					if (selectNode) {
                                                  +						getLinkFileValue(selectNode);
                                                  +						dlg.close();
                                                  +					}
                                                  +				}
                                                  +			},
                                                  +			{
                                                  +				text:'取消',
                                                  +				handler:function(){
                                                  +					dlg.close();
                                                  +				}
                                                  +			}
                                                  +		]
                                                  +	});
                                                  +
                                                  +}
                                                  +
                                                  +// 点击链接树后,为文件链接赋值
                                                  +function getLinkFileValue(treeNode) {
                                                  +	if ($("#linkto_file_name").val() == "") {
                                                  +		$("#linkto_file_name").val(treeNode.name);
                                                  +	}
                                                  +	$("#linkto_file").val(treeNode.name);
                                                  +	$("#linkto_file").attr("uuid", treeNode.id);
                                                  +	var url = "./w?sid=" + sid + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&uuid="
                                                  +		+ treeNode.id + "&openType=0&perms=" + encodeURIComponent(perms) + "&filePerms=" + encodeURIComponent(filePerms);
                                                  +	$("#linkto_file").attr("url", url);
                                                  +}
                                                  +
                                                  +// 数属性tab页面效果js
                                                  +
                                                  +function selectAttrTabTag(showContent, selfObj) {
                                                  +	// 操作标签
                                                  +	var tag = $("#tabUlContainer li");
                                                  +	var taglength = tag.length;
                                                  +	for (var i = 0; i < taglength; i++) {
                                                  +		tag[i].className = "";
                                                  +	}
                                                  +	selfObj.parentNode.className = "selectTag";
                                                  +	// 操作内容
                                                  +	for (i = 0; j = document.getElementById("tagContent" + i); i++) {
                                                  +		j.style.display = "none";
                                                  +	}
                                                  +	document.getElementById(showContent).style.display = "block";
                                                  +	// 操作选中的tab页的内容
                                                  +	// 拿 到选中的model对象
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	if (shape) {
                                                  +		showShapeRelationTab(null);
                                                  +		attributeShowTabContent(null);
                                                  +		shapeCopyAndPasteCount(shape);
                                                  +		showRelevanceShapesContent();
                                                  +	}
                                                  +	if ($("#tagContent0").is(":visible") || $("#tagContent2").is(":visible")
                                                  +		|| $("#tagContent3").is(":visible")) {
                                                  +		$("#showMoreAttrUL").hide();
                                                  +	} else {
                                                  +		$("#showMoreAttrUL").show();
                                                  +		$("#upfile").show();
                                                  +		$("#relevanceShapes").hide();
                                                  +	}
                                                  +	if (showContent != "tagContent1") {
                                                  +		$("#upfile").hide();
                                                  +		$("#showMoreAttrUL").hide();
                                                  +	}
                                                  +	if (showContent == "tagContent3") {
                                                  +		$("#relevanceShapes").show();
                                                  +	} else {
                                                  +		$("#relevanceShapes").hide();
                                                  +	}
                                                  +	if(role == "viewer") {
                                                  +		$("#dock_page_attribute table input").prop("disabled", true);
                                                  +		$("#tagContent1 table input, #tagContent1 table textarea").prop("disabled", true);
                                                  +	}
                                                  +}
                                                  +
                                                  +// 出现复制图形的统计
                                                  +
                                                  +function shapeCopyAndPasteCount(shape) {
                                                  +	if (!$("#tagContent2").is(":visible")) {
                                                  +		return;
                                                  +	}
                                                  +	if (shape == null)
                                                  +		shape = Utils.getSelected()[0];
                                                  +	$("#tagContentTableTitleContent2").empty();
                                                  +	var shapeGroupId = "";
                                                  +	var isCopy = "";
                                                  +	var shapeId = shape.id;
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.shapeGroupId) {
                                                  +			shapeGroupId = attr.shapeGroupId;
                                                  +			isCopy = attr.isCopy;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	var data = "shapeGroupId=" + shapeGroupId + "&shapeId=" + shapeId
                                                  +		+ "&isCopy=" + isCopy;
                                                  +	/*$.ajax({
                                                  +		type : "POST",
                                                  +		url : "./w?sid=" + CLB.sid
                                                  +				+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_count",
                                                  +		data : data,
                                                  +		success : function(data) {
                                                  +			var msg = eval("(" + data + ")");
                                                  +			if (msg.data.result == "ok") {
                                                  +				var list = msg.data.list;
                                                  +				for (var i = 0; i < list.length; i++) {
                                                  +					var json = list[i];
                                                  +					if (json.palRepositoryId == chartId) {
                                                  +						continue;
                                                  +					}
                                                  +					var onclick = "";
                                                  +					var style = "";
                                                  +					if (editable) {
                                                  +						onclick = 'parent.openDesginerFromAttr(\''
                                                  +							+ json.palRepositoryId
                                                  +							+ '\',0,\''
                                                  +							+ json.fileName
                                                  +							+ '\',\'\',\'\',false,\''
                                                  +							+ json.shapeId
                                                  +							+ '\')';
                                                  +						style = "cursor:pointer;color:blue;";
                                                  +					}
                                                  +					var content = '<tr class="tagContentTableTr"><td style="' + style + '" onclick="' + onclick + '">'
                                                  +							+ json.fileName
                                                  +							+ '&nbsp;('
                                                  +							+ json.ver
                                                  +							+ ')</td><td >' + json.type + '</td></tr>';
                                                  +					$("#tagContentTableTitleContent2").append(content);
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	});*/
                                                  +}
                                                  +
                                                  +function showRelevanceShapesContent() {
                                                  +	if (!$("#tagContent3").is(":visible")) {
                                                  +		return;
                                                  +	}
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_show",
                                                  +		data : {
                                                  +			shapeId : Utils.getSelected()[0].id,
                                                  +			fileId: ruuid
                                                  +		},
                                                  +		success : function(msg) {
                                                  +			$("#tagContentTableTitleContent3").empty();
                                                  +			if (msg.data.result == "ok") {
                                                  +				var shapesObj = msg.data.list;
                                                  +				var mouseover = "onmouseout=\"hideRemoveTrAttribute(this);\"";
                                                  +				var mouseout = "onmouseover=\"showRemoveTrAttribute(this);\"";
                                                  +				if (role == "viewer") {
                                                  +					mouseover = "";
                                                  +					mouseout = "";
                                                  +				}
                                                  +				for (var i = 0; i < shapesObj.length; i++) {
                                                  +					var style = "";
                                                  +					var onclick = "";
                                                  +					if (editable || filePerms == "-" || filePerms.indexOf(shapesObj[i].fileVersionId) > -1) {
                                                  +						style = "cursor:pointer;color:blue;";
                                                  +						if (parent.openDesginerFromAttr) {
                                                  +							onclick = 'parent.openDesginerFromAttr(\''
                                                  +								+ shapesObj[i].fileId
                                                  +								+ '\',0,\''
                                                  +								+ shapesObj[i].fileName
                                                  +								+ '\',\'\',\'\',false,\''
                                                  +								+ shapesObj[i].shapeId
                                                  +								+ '\')';
                                                  +						} else if (window.opener.openDesginer) {
                                                  +							var obj = {
                                                  +								id: shapesObj[i].fileId,
                                                  +								processDefId: ''
                                                  +							}
                                                  +							onclick = 'window.opener.openDesginer({id:\'' + shapesObj[i].fileId + '\', processDefId:\'\'})';
                                                  +						}else if (parent.openLinkUrl){
                                                  +							if (shapesObj[i].url){
                                                  +								onclick = 'parent.openLinkUrl(\'custom\',\''
                                                  +									+ shapesObj[i].url
                                                  +									+ '\',0,\''
                                                  +									+ shapesObj[i].fileId
                                                  +									+ '\',\'this\')';
                                                  +							}else {
                                                  +								onclick = 'noPermissionMsg()';
                                                  +							}
                                                  +
                                                  +						}
                                                  +
                                                  +					}
                                                  +					var content = '<tr ' + mouseout + mouseover + ' objid="'
                                                  +						+ shapesObj[i].id
                                                  +						+ '" class="tagContentTableTr"><td style="' + style + '" onclick="' + onclick + '">'
                                                  +						+ '<div style="line-height:22px;height:22px;overflow:hidden;" class="attribute_td_div_css">'
                                                  +						+ shapesObj[i].fileName
                                                  +						+ '(V ' + shapesObj[i].fileVersion + '.0)'
                                                  +						+ '</div>'
                                                  +						+ '</td><td><div style="line-height:22px;height:22px;overflow:hidden;" class="attribute_td_div_css">'
                                                  +						+ shapesObj[i].shapeText
                                                  +						+ '</div></td></tr>';
                                                  +
                                                  +					$("#tagContentTableTitleContent3").append(content);
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +
                                                  +}
                                                  +function noPermissionMsg(){
                                                  +	$.simpleAlert("暂无该模型权限","warning",1500);
                                                  +}
                                                  +
                                                  +// 属性的动态切换
                                                  +
                                                  +function attributeShowTabContent(currentShape) {
                                                  +	// 属性弹出层显示的内容
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	if (!shape) {
                                                  +		return;
                                                  +	}
                                                  +	if (currentShape) {
                                                  +		shape = currentShape
                                                  +	}
                                                  +	if (shape.name === "linker") {
                                                  +		$(".clearfix").hide();
                                                  +	} else {
                                                  +		$(".clearfix").show();
                                                  +	}
                                                  +	var attributesJsonArray = "";
                                                  +	$("#tagContentTable0").empty();
                                                  +	var currentAttributesJsonArray = [];
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.attributesJsonArray) {
                                                  +			currentAttributesJsonArray = attr.attributesJsonArray;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	if (shape && currentAttributesJsonArray) {
                                                  +
                                                  +		selectShape = shape;
                                                  +		// 参见 这个js中的Designer.events.addEventListener("created", function(a)
                                                  +		// {}函数,改为图形创建时增加私有属性
                                                  +		attributesJsonArray = currentAttributesJsonArray;
                                                  +		if (shape.name === "linker") {
                                                  +			$("#attribute_name_td_content").html("连线");
                                                  +		} else {
                                                  +			$("#attribute_name_td_content").html(shape.title);
                                                  +		}
                                                  +		if (shape.text == "") {
                                                  +			$("span[name=attribute_desc_input]").text(shape.title);
                                                  +		} else {
                                                  +			if (shape.text.length > 15) {
                                                  +				var tempText = shape.text;
                                                  +				tempText = tempText.substring(0, 15)
                                                  +				$("span[name=attribute_desc_input]").text(shape.text).attr(
                                                  +					"awsui-qtip", shape.text);
                                                  +			} else {
                                                  +				$("span[name=attribute_desc_input]").text(shape.text);
                                                  +			}
                                                  +		}
                                                  +		// 此处遍历attributesJsonArray输入 内容
                                                  +		if (attributesJsonArray.length != 0) {
                                                  +			getPrivateAttributeHtml(attributesJsonArray, "tagContentTable0", shape);
                                                  +		}
                                                  +	} else {
                                                  +		if (shape.name === "linker") {
                                                  +			$("#attribute_name_td_content").html("连线");
                                                  +		} else {
                                                  +			$("#attribute_name_td_content").html(shape.title);
                                                  +		}
                                                  +		if (shape.text.length > 15) {
                                                  +			var tempText = shape.text;
                                                  +			tempText = tempText.substring(0, 15)
                                                  +			$("span[name=attribute_desc_input]").text(shape.text).attr(
                                                  +				"awsui-qtip", shape.text);
                                                  +		} else {
                                                  +			$("span[name=attribute_desc_input]").text(shape.text);
                                                  +		}
                                                  +		// $("#attribute_name_td_desc").val(shape.shapeDesc);
                                                  +	}
                                                  +	$("#dock_content_attribute").show();
                                                  +	$("#attr_no_more_attribute_id").hide();
                                                  +	$("#dock_view_header_title").html("数据属性");
                                                  +}
                                                  +
                                                  +var dialogTableList = []
                                                  +function getPrivateAttributeHtml(attributesJsonArray, tbodyId, shape) {
                                                  +	// 属性排序
                                                  +	var defaultMoreAttr = $('#defaultMoreAttrSort').val();
                                                  +	if (shape.category != undefined) {
                                                  +		var category = shape.category.replace("_", ".");
                                                  +		if("bpmn"==category) {
                                                  +			category = "process.bpmn2";
                                                  +		}
                                                  +		if (defaultMoreAttr.length == 0) {
                                                  +			attributesJsonArray = [];
                                                  +		}
                                                  +		if(methodId === category) {
                                                  +			var arr = defaultMoreAttr.split('|');
                                                  +			var tempAttrArray = [];
                                                  +			for(var i = 0; i < arr.length; i++) {
                                                  +				for(var j = 0; j < attributesJsonArray.length; j++) {
                                                  +					if(attributesJsonArray[j] == undefined || attributesJsonArray[j] == null) {
                                                  +						continue;
                                                  +					}
                                                  +					if(arr[i] == attributesJsonArray[j].id) {
                                                  +						tempAttrArray.push(attributesJsonArray[j]);
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +			attributesJsonArray = tempAttrArray;
                                                  +		}
                                                  +	}
                                                  +	var flag = false;
                                                  +	var awsOrg = false;
                                                  +	var awsObjIds = [];
                                                  +	var objIds = [];
                                                  +	var selectFlag = false;
                                                  +	var selectValues = [];
                                                  +	var booleanFlag = false;
                                                  +	var booleanValues = [];
                                                  +	var mouseover = "onmouseout=\"hideRemoveTrAttribute(this);\"";
                                                  +	var mouseout = "onmouseover=\"showRemoveTrAttribute(this);\"";
                                                  +	if (role == "viewer") {
                                                  +		mouseover = "";
                                                  +		mouseout = "";
                                                  +	}
                                                  +	$("#" + tbodyId).empty();
                                                  +	console.log('attributesJsonArray',attributesJsonArray)
                                                  +	for (var index = 0; index < attributesJsonArray.length; index++) {
                                                  +		var obj = attributesJsonArray[index];
                                                  +		if (obj != null && obj != undefined && obj.value != undefined) {
                                                  +			var objName = obj.name;
                                                  +			var objType = obj.type;
                                                  +			var objReadonly = obj.readonly;
                                                  +			var objRequired = obj.required;
                                                  +			if (attrDefineObj[obj.id]) {
                                                  +				var attr = attrDefineObj[obj.id];
                                                  +				objName = attr.name;
                                                  +				objType = attr.type;
                                                  +				objReadonly = attr.readonly;
                                                  +				objRequired = attr.readonly;
                                                  +			}
                                                  +			var requiredSpan = ''
                                                  +			if(obj.isRequired !== null && obj.isRequired) {
                                                  +			    requiredSpan = '<span style="color: #f04134;float:right">*</span>'
                                                  +			}
                                                  +
                                                  +			var constr = '<tr ' + mouseout + mouseover + ' objid="' + obj.id + '" class="tagContentTableTr">'
                                                  +				+ '	<td>' + objName + '</td>'
                                                  +				+ '	<td>'
                                                  +				+ '		<div class="attribute_td_div_css">' + obj.value + '</div>'
                                                  +				+ '	</td></tr>';
                                                  +			if ((!objReadonly && objType == "string") || (!objReadonly && objType == "list") || (!objReadonly && objType == "link")) {
                                                  +				// 目前支持到文本的输入 ,需求定下了再改
                                                  +				constr = '<tr ' + mouseout + mouseover + ' objid="' + obj.id + '" class="tagContentTableTr">'
                                                  +					+ '	<td>' + objName + requiredSpan +  '</td>'
                                                  +					+ '	<td class="tagContentTableTrTd">'
                                                  +					+ ' <input placeholder="' + obj.desc + '"  objid="' + obj.id + '" class="attribute_input_css" name="attribute_name_input_' + obj.id + '" value="' + obj.value + '"  onblur="saveInputContent(this,' + JSON.stringify(obj).replace(/\"/g,"'") +');" onclick="showEditButton(this);" data-shapeId="' + shape.id + '"/>'
                                                  +					+ '	</td></tr>';
                                                  +			} else if (!objReadonly && objType == "number") {
                                                  +				constr = '<tr ' + mouseout + mouseover + ' objid="' + obj.id + '" class="tagContentTableTr">'
                                                  +					+ '	<td>' + objName + requiredSpan +   '</td>'
                                                  +					+ '	<td class="tagContentTableTrTd">'
                                                  +					+ '		<input placeholder="' + obj.desc + '"   inputType="number"  objid="' + obj.id + '" class="attribute_input_css" name="attribute_name_input_' + obj.id + '" value="' + obj.value + '" onblur="saveInputContent(this,' + JSON.stringify(obj).replace(/\"/g,"'") +');" data-shapeId="' + shape.id + '"/>'
                                                  +					//+ '		<div objid="' + obj.id + '" onclick="removeTrAttribute(this)" id= "ico_attribute_delete_"' + obj.id + ' class="ico_attribute_delete"></div>'
                                                  +					+ '</td></tr>';
                                                  +			} else if (!objReadonly && objType == "boolean") {
                                                  +				booleanFlag = true;
                                                  +				var booleanValue = {	"objId" : obj.id,
                                                  +					"objValue" : obj.value,
                                                  +					"objOptions" : obj.ref,
                                                  +					"objType": objType};
                                                  +				booleanValues.push(booleanValue);
                                                  +				constr = '<tr ' + mouseout + mouseover + ' objid="' + obj.id + '" class="tagContentTableTr">'
                                                  +					+ '	<td>' + objName + '</td>'
                                                  +					+ '	<td class="tagContentTableTrTd">'
                                                  +					+ '<select id="attribute_name_input_' + obj.id+ '" style="width:244px;"></select>'
                                                  +					/*+ '		<input inputType="select" objid="' + obj.id + '" name="attribute_name_input_' + obj.id + '" onblur="saveInputContent(this);" '
                                                  +                    + '			id="attribute_name_input_' + obj.id + '" class="awsui-combobox" value=""></input>'*/
                                                  +
                                                  +					//+ '		<div objid="' + obj.id + '" onclick="removeTrAttribute(this)" id= "ico_attribute_delete_"' + obj.id + ' class="ico_attribute_delete"></div>'
                                                  +					+ '	</td>'
                                                  +					+ '</tr>';
                                                  +			} else if (!objReadonly && objType == "textarea") {
                                                  +				constr = '<tr ' + mouseout + mouseover + ' objid="' + obj.id + '" class="tagContentTableTr">'
                                                  +					+ '<td>' + objName + requiredSpan + '</td>'
                                                  +					+ '<td class="tagContentTableTrTd">'
                                                  +					+ '<textarea placeholder="' + obj.desc + '"  objid="' + obj.id + '" class="awsui-textarea" style="float:left; width: 95%;" rows="3" name="attribute_name_input_' + obj.id + ' " value="' + obj.value
                                                  +					+ '" onblur="saveInputContent(this);" onclick="showAttributedEditWindow(this);" data-shapeId="' + shape.id + '">' + obj.value + '</textarea>'
                                                  +					//+ '<div objid="' + obj.id + '" onclick="removeTrAttribute(this)" id= "ico_attribute_delete_"' + obj.id + ' class="ico_attribute_delete"></div>'
                                                  +					+ '</td>'
                                                  +					+ '</tr>';
                                                  +			} else if (objType == "relation") {
                                                  +				flag = true;
                                                  +				// 形状的关联
                                                  +				objIds.push(obj.id);
                                                  +				constr = '<tr ' + mouseout + mouseover + ' objid="' + obj.id + '" class="tagContentTableTr">'
                                                  +					+ '	<td>' + objName + requiredSpan + '</td>'
                                                  +					+ '	<td class="tagContentTableTrTd">'
                                                  +					+ '		<input placeholder="' + obj.desc + '"  objid="' + obj.id + '" class="attribute_input_css" name="attribute_name_input_' + obj.id + '" value="" scope="' + obj.groupPath + '" onclick="openRelationDig(this);" />'
                                                  +					+ '		<input placeholder="' + obj.desc + '"  ref="" value="' + obj.value + '" style="border:1px solid #ccc;margin-left:-55px;width: 25px;height: 23px;display: none;" objid_shapeId="' + obj.id + '" />'
                                                  +					+ '</td></tr>';
                                                  +
                                                  +			} else if (objType == "select" || objType == "select_m") {
                                                  +				selectFlag = true;
                                                  +				var selectValue = {	"objId" : obj.id,
                                                  +					"objValue" : obj.value,
                                                  +					"objType": objType};
                                                  +				selectValues.push(selectValue);
                                                  +
                                                  +				constr = '<tr ' + mouseout + mouseover + ' objid="' + obj.id + '" class="tagContentTableTr">'
                                                  +					+ '	<td>' + objName  + requiredSpan +  '</td>'
                                                  +					+ '	<td class="tagContentTableTrTd">'
                                                  +					+ '<select id="attribute_name_input_' + obj.id+ '" style="width:244px;"></select>'
                                                  +					/*+ '		<input inputType="select" objid="' + obj.id + '" name="attribute_name_input_' + obj.id + '" onblur="saveInputContent(this);" '
                                                  +                    + '			id="attribute_name_input_' + obj.id + '" class="awsui-combobox" value=""></input>'*/
                                                  +
                                                  +					//+ '		<div objid="' + obj.id + '" onclick="removeTrAttribute(this)" id= "ico_attribute_delete_"' + obj.id + ' class="ico_attribute_delete"></div>'
                                                  +					+ '	</td>'
                                                  +					+ '</tr>';
                                                  +			} else if (objType == "awsorg") {// 平台组织架构(部门、岗位、人员、角色)
                                                  +				awsOrg = true;
                                                  +				awsObjIds.push(obj.id);
                                                  +				constr = '<tr ' + mouseout + mouseover + ' objid="' + obj.id + '" class="tagContentTableTr">'
                                                  +					+ '	<td>' + objName  + requiredSpan +  '</td>'
                                                  +					+ '	<td class="tagContentTableTrTd">'
                                                  +					+ '		<input placeholder="' + obj.desc + '"  objid="' + obj.id + '" class="attribute_input_css" name="attribute_name_input_' + obj.id + '" value="" scope="' + obj.groupPath + '" onclick="openOrganizationRelationDig(this);" />'
                                                  +					+ '		<input placeholder="' + obj.desc + '"  ref="" value="' + obj.value + '" style="border:1px solid #ccc;margin-left:-55px;width: 25px;height: 23px;display: none;" objid_shapeId="' + obj.id + '" />'
                                                  +					+ '</td></tr>';
                                                  +			} else if (objReadonly && objType == "hidden") {
                                                  +				constr = '<tr ' + mouseout + mouseover + ' objid="' + obj.id + '" class="tagContentTableTr" style="display:none;">'
                                                  +					+ '	<td>' + objName + requiredSpan +  '</td>'
                                                  +					+ '	<td class="tagContentTableTrTd">'
                                                  +					+ '		<input placeholder="' + obj.desc + '"   objid="' + obj.id + '" class="attribute_input_css" name="attribute_name_input_' + obj.id + '" value="'+obj.value +'" scope="' + obj.groupPath + '" readonly="'+objReadonly+'"  />'
                                                  +					//+ '<div objid="' + obj.id + '" onclick="removeTrAttribute(this)" id= "ico_attribute_delete_"' + obj.id + ' class="ico_attribute_delete"></div>'
                                                  +					+ '</td></tr>';
                                                  +			} else if (!objReadonly && objType == "DateTimePicker") {
                                                  +                constr = '<tr ' + mouseout + mouseover + ' objid="' + obj.id + '" class="tagContentTableTr">'
                                                  +                    + '	<td>' + objName + requiredSpan +  '</td>'
                                                  +                    + '	<td class="tagContentTableTrTd">'
                                                  +                    + ' <input type="text" id="dateTimePicker" objid="' + obj.id + '"  placeholder="请选择日期"   onblur="saveInputContent(this);"  value="' + obj.value + '"  class="attribute_input_css" data-shapeId="' + shape.id + '"/>'
                                                  +                    + ' </td></tr>';
                                                  +            } else if (!objReadonly && objType == "table") {
                                                  +				 let objTableName = obj.value.name == undefined ? '未命名表单' : obj.value.name;
                                                  +				 dialogTableList = obj.value.table == undefined ?  [ { id: Utils.newId() ,name: '命名', desc: '描述'} ] : obj.value.table;
                                                  +                 constr = '<tr ' + mouseout + mouseover + '  class="tagContentTableTr">'
                                                  +                     + ' <td>' + objName + requiredSpan +   '</td>'
                                                  +                     + ' <td class="tagContentTableTrTd">'
                                                  +                     + '<span class="awsui-input-wrapper">'
                                                  +                     + '    <input type="text"  placeholder="请输入表单名"  id="tableName"  value="' + objTableName + '"  class="attribute_input_css"  data-shapeId="' + shape.id + '"/>'
                                                  +                     + '    <span class="awsui-input-suffix" objid="' + obj.id + '" onclick="openTableDialog(this)">'
                                                  +                     + '	    <i class="awsui-iconfont" >&#xe7ff;</i>'
                                                  +                     + '    </span>'
                                                  +                     + '</span>'
                                                  +                     + ' </td></tr>';
                                                  +            }
                                                  +			$("#" + tbodyId).append(constr);
                                                  +			$("#dateTimePicker").datepicker({dateFmt:"yyyy-MM-dd HH:mm:ss"});
                                                  +		}
                                                  +	}
                                                  +	if (flag) {
                                                  +		getRelevanceShapeNameByShapeId(objIds, shape.id);
                                                  +	}
                                                  +	if (selectFlag) {
                                                  +		getSelectOptions(shape.category, selectValues, shape.id);	//处理select类型
                                                  +	}
                                                  +	if (booleanFlag) {
                                                  +		getBooleanSelectOptions(booleanValues, shape.id);
                                                  +	}
                                                  +	// awsOrg
                                                  +	if (awsOrg) {
                                                  +		getRelevanceAwsOrgNameByShapeId(awsObjIds, shape.id);
                                                  +	}
                                                  +}
                                                  +
                                                  +// 得到关联形状
                                                  +function getRelevanceShapes(objId) {
                                                  +	$("#attr_dialog_normal_relevance_shapes_div").dialog('close');
                                                  +	selectShape = Utils.getSelected()[0];
                                                  +	var shape = selectShape;
                                                  +	if (!shape) {
                                                  +		return;
                                                  +	}
                                                  +	var relationShapes = attr_content_iframe_relevance_shapes.getRelationShapeInfos();
                                                  +
                                                  +	var shapeGroupId = "";
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.shapeGroupId != undefined && attr.shapeGroupId != "") {
                                                  +			shapeGroupId = attr.shapeGroupId;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	shape = getAttributeByAttrId(shape, objId, relationShapes);
                                                  +	saveRelevanceShapesTODB(relationShapes, shape.id, shape.text, $("title").text(), shapeGroupId, objId, shape);
                                                  +}
                                                  +
                                                  +Array.prototype.unique = function(){
                                                  +	var res = [];
                                                  +	var json = {};
                                                  +	for(var i = 0; i < this.length; i++){
                                                  +		if(!json[this[i]]){
                                                  +			res.push(this[i]);
                                                  +			json[this[i]] = 1;
                                                  +		}
                                                  +	}
                                                  +	return res;
                                                  +}
                                                  +
                                                  +
                                                  +// 得到不同属性值关联的形状
                                                  +function getAttributeByAttrId(shape, objId, relationShapes) {
                                                  +	//objId 属性的key值
                                                  +	var exitAttributesJsonArray = [];
                                                  +	var attrArr = [];	//修改后的属性值
                                                  +
                                                  +	for (var i = 0; i < relationShapes.length; i++) {
                                                  +		var shapeObjT = relationShapes[i];
                                                  +		attrArr.push(shapeObjT.relationShapeId);
                                                  +	}
                                                  +	attrArr = attrArr.unique();	//属性值去重
                                                  +	if (attrArr.length > 0) {
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var attr = shape.dataAttributes[i];
                                                  +			if (attr.attributesJsonArray) {
                                                  +				exitAttributesJsonArray = attr.attributesJsonArray;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		for (var c = 0; c < exitAttributesJsonArray.length; c++) {
                                                  +			var el = exitAttributesJsonArray[c];
                                                  +			if(el == null) continue;
                                                  +			if (el.id == objId) {
                                                  +				el.value = attrArr.join(",");
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var attr = shape.dataAttributes[i];
                                                  +			if (attr.attributesJsonArray) {
                                                  +				attr.attributesJsonArray = exitAttributesJsonArray;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		for (var j = 0, len = attrArr.length; j < len; j++) {
                                                  +			var attrShapeId = attrArr[j];
                                                  +			relationShapesObject[attrShapeId] = {"relationShapeId" : attrShapeId};
                                                  +		}
                                                  +		$("input[objid_shapeId='" + objId + "']").val(attrArr.join(","));
                                                  +	} else {
                                                  +		$("input[objid_shapeId='" + objId + "']").val("");
                                                  +	}
                                                  +
                                                  +	return shape;
                                                  +}
                                                  +Array.prototype.notDistinct = function() {
                                                  +	var newArr = [], obj = {};
                                                  +	for (var i = 0, len = this.length; i < len; i++) {
                                                  +		if (!obj[this[i]]) {
                                                  +			newArr.push(this[i]);
                                                  +			obj[this[i]] = 'new';
                                                  +		}
                                                  +	}
                                                  +	return newArr;
                                                  +}
                                                  +
                                                  +// 删除掉关联形状
                                                  +function removeTrRelevanceShapes(obj) {
                                                  +	var options = {
                                                  +		title : "提示",
                                                  +		content : "确定删除吗?",
                                                  +		model : false,
                                                  +		onConfirm : function() {
                                                  +			// 确定删除
                                                  +			var shape = Utils.getSelected()[0];
                                                  +			var tempArray = new Array();
                                                  +			var count = 0;
                                                  +			if (shape) {
                                                  +				var relevanceShapes = [];
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.relevanceShapes) {
                                                  +						relevanceShapes = attr.relevanceShapes;
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +				for (var index = 0; index < relevanceShapes.length; index++) {
                                                  +					var tempObj = relevanceShapes[index];
                                                  +					if (tempObj.id == $(obj).attr("objid")) {
                                                  +						continue;
                                                  +					}
                                                  +					tempArray[count++] = tempObj;
                                                  +				}
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.relevanceShapes) {
                                                  +						attr.relevanceShapes = tempArray;
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +				Model.update(shape);
                                                  +			}
                                                  +			$(obj).hide();
                                                  +			$(obj).parent().parent().remove();
                                                  +			$.ajax({
                                                  +				type : "POST",
                                                  +				url : "./jd?sid="
                                                  +					+ CLB.sid
                                                  +					+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_remove",
                                                  +				data : {
                                                  +					uuid : $(obj).attr("objid"),
                                                  +				},
                                                  +				success : function(msg) {
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +	};
                                                  +	window.top.$.confirm(options);
                                                  +}
                                                  +
                                                  +// 过虑 掉重复的图形
                                                  +function filterRepeatShapes(arr1, shape) {
                                                  +	var arr2 = [];
                                                  +	var arr = [];
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.relevanceShapes) {
                                                  +			arr2 = attr.relevanceShapes;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	var flag = false;
                                                  +	for (var a = 0; a < arr1.length; a++) {
                                                  +		var arrEle1 = arr1[a];
                                                  +		for (var b = 0; b < arr2.length; b++) {
                                                  +			var arrEle2 = arr2[b];
                                                  +			if (arrEle1.id == arrEle2.id) {
                                                  +				flag = true;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		if (flag) {
                                                  +			flag = false;
                                                  +			continue;
                                                  +		}
                                                  +		arr2.push(arrEle1);
                                                  +	}
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.relevanceShapes) {
                                                  +			attr.relevanceShapes = arr2;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +
                                                  +	return shape;
                                                  +}
                                                  +
                                                  +function updateModelElementsAttribute(selectedShape, nodes) {
                                                  +	var shapes = Model.define.elements;
                                                  +	for (var shapeId in shapes) {
                                                  +		var obj = nodes;
                                                  +		var shape = shapes[shapeId];
                                                  +		if(shape.name != "linker" && shape.id != selectedShape.id && shape.name == selectedShape.name){
                                                  +			var exitAttributesJsonArray = [];
                                                  +			var attrIndex = 0;
                                                  +			for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +				var attr = shape.dataAttributes[i];
                                                  +				if (attr.attributesJsonArray) {
                                                  +					exitAttributesJsonArray = attr.attributesJsonArray;
                                                  +					attrIndex = i;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +			var arrJsontemp = [];
                                                  +			for (var t = 0; t < exitAttributesJsonArray.length; t++) {
                                                  +				if(exitAttributesJsonArray[t] == null) {
                                                  +					continue;
                                                  +				}
                                                  +				arrJsontemp.push(exitAttributesJsonArray[t]);
                                                  +			}
                                                  +			obj = filterRepeatAttribute(obj, exitAttributesJsonArray, shape.dataAttributes[attrIndex].attributesJsonArray);
                                                  +			for (var a = 0; a < obj.length; a++) {
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.attributesJsonArray) {
                                                  +						attr.attributesJsonArray.push(obj[a]);
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +			if (arrJsontemp.length != 0) {
                                                  +				var tempArr = removeShepeAttributeAndReturnDifferent(arrJsontemp, filterNotCheckedAttribute(nodes, arrJsontemp));
                                                  +				var tempArray = new Array();
                                                  +				for (var e = 0; e < tempArr.length; e++) {
                                                  +					if (tempArr[e] != 0 && tempArr[e] != "0") {
                                                  +						removeNotCheckedAttribute(shape, tempArr[e]);
                                                  +					}
                                                  +				}
                                                  +				if (tempArray.length != 0) {
                                                  +					shape.attributesJsonArray = tempArray;
                                                  +					for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +						var attr = shape.dataAttributes[i];
                                                  +						if (attr.attributesJsonArray) {
                                                  +							attr.attributesJsonArray = tempArray;
                                                  +							break;
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +			Model.update(shape);
                                                  +			//修改属性时,后台查询是否有关联属性,如果删除的属性有关联属性,需要删除关联表中的数据
                                                  +			var attrIds = ",";
                                                  +			if (nodes != undefined) {
                                                  +				for (var i = 0; i < nodes.length; i++) {
                                                  +					if (nodes[i].type) {
                                                  +						attrIds += nodes[i].id + ",";
                                                  +					}
                                                  +				}
                                                  +				awsui.ajax.request({
                                                  +					url : "./jd",
                                                  +					method : "POST",
                                                  +					data : {
                                                  +						sid:sid,
                                                  +						cmd:"com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_check",
                                                  +						fileId: ruuid,
                                                  +						shapeId: shape.id,
                                                  +						attrIds: attrIds
                                                  +					},
                                                  +					ok : function(r) {
                                                  +					},
                                                  +					err:function(r){
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +// 过虑出当在节点上不选中时的属性
                                                  +
                                                  +function filterNotCheckedAttribute(checkedObj, exitObj) {
                                                  +	var result1 = [];
                                                  +	if (checkedObj.length == 0) {
                                                  +		return [];
                                                  +	} else {
                                                  +		var flag = false;
                                                  +		for (var b = 0; b < checkedObj.length; b++) {
                                                  +			var checkedArr1 = checkedObj[b];
                                                  +			for (var a = 0; a < exitObj.length; a++) {
                                                  +				var exitArr1 = exitObj[a];
                                                  +				if (exitArr1.id == checkedArr1.id) {
                                                  +					result1.push(checkedArr1);
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		return result1;
                                                  +	}
                                                  +}
                                                  +
                                                  +// 移除图形属性中部分已存在的元素并返回不同元素
                                                  +
                                                  +function removeShepeAttributeAndReturnDifferent(exitObj, newObj1) {
                                                  +	var result1 = [];
                                                  +	for (var a = 0; a < newObj1.length; a++) {
                                                  +		var obj1 = newObj1[a];
                                                  +		for (var i = 0, n = 0; i < exitObj.length; i++) {
                                                  +			if (exitObj[i].id == obj1.id) {
                                                  +				result1.push(i);
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	for (var i = 0; i < result1.length; i++) {
                                                  +		exitObj[result1[i]] = 0;
                                                  +	}
                                                  +	return exitObj;
                                                  +}
                                                  +// 删除没有选中的元素
                                                  +
                                                  +function removeNotCheckedAttribute(shape, obj1) {
                                                  +	var tempArray = new Array();
                                                  +	var attributesJsonArray1 = [];
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.attributesJsonArray) {
                                                  +			attributesJsonArray1 = attr.attributesJsonArray;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	for (var index = 0; index < attributesJsonArray1.length; index++) {
                                                  +		if(attributesJsonArray1[index] == null) {
                                                  +			continue;
                                                  +		}
                                                  +		var tempObj1 = attributesJsonArray1[index];
                                                  +		if (tempObj1.id == obj1.id) {
                                                  +			continue;
                                                  +		}
                                                  +		tempArray.push(tempObj1);
                                                  +	}
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.attributesJsonArray) {
                                                  +			attr.attributesJsonArray = tempArray;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	// shape.attributesJsonArray = tempArray;
                                                  +	// Model.update(shape);
                                                  +	$("#tagContentTable0 tr[objid='" + obj1.id + "']").remove();
                                                  +}
                                                  +// 过滤掉重复的属性生成新的数组
                                                  +
                                                  +function filterRepeatAttribute(arr1, arr2, shape) {
                                                  +	var result = [];
                                                  +	var flag = false;
                                                  +	for (var a = 0; a < arr1.length; a++) {
                                                  +		var arrEle1 = arr1[a];
                                                  +		for (var b = 0; b < arr2.length; b++) {
                                                  +			var arrEle2 = arr2[b];
                                                  +			if(arrEle2 == null) {
                                                  +				continue;
                                                  +			}
                                                  +			if (arrEle1.id == arrEle2.id) {
                                                  +				shape[b].name = arrEle1.name;
                                                  +				flag = true;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		if (flag) {
                                                  +			flag = false;
                                                  +			continue;
                                                  +		}
                                                  +		result.push(arrEle1);
                                                  +	}
                                                  +
                                                  +	return result;
                                                  +}
                                                  +
                                                  +// 当属性为可编辑时,编辑时自动保存
                                                  +
                                                  +function showEditButton(obj) {
                                                  +	// $(obj).siblings("span::contains('...')").show();
                                                  +}
                                                  +
                                                  +var inputUpdate = false;
                                                  +function saveInputContent(obj,value) {
                                                  +	// 按钮
                                                  +	// $(obj).siblings("span::contains('...')").hide();
                                                  +	inputUpdate = true;
                                                  +	var objValue = $(obj).val();
                                                  +	if (objValue.indexOf("</script>") > -1) {
                                                  +		$(obj).val("");
                                                  +		$.simpleAlert("禁止输入js脚本!", "warning");
                                                  +		return;
                                                  +	}
                                                  +	if(value !== undefined && value.isRequired  && objValue == '') {
                                                  +	    $(obj).attr('placeholder',value.name + '不能为空')
                                                  +	    $(obj).addClass("required_input_css");
                                                  +	    return;
                                                  +	}
                                                  +	if ($(obj).attr("inputType") == "number") {
                                                  +		var val = $(obj).val();
                                                  +		if (/\D/.test(val)) {
                                                  +			$.simpleAlert("此处只能输入数字", "info", 2000);
                                                  +			//$("#simplealert>.msg").css("top", "15px");
                                                  +			return;
                                                  +		}
                                                  +	}
                                                  +	updateAttributeById($(obj).attr("objid"), objValue, $(obj).attr('data-shapeId'));
                                                  +	inputUpdate = false;
                                                  +}
                                                  +
                                                  +function saveSelectContent(objAttr,objValue, shapeId){
                                                  +	updateAttributeById(objAttr, objValue, shapeId);
                                                  +}
                                                  +
                                                  +// 显示select下拉框
                                                  +
                                                  +function showSelectOption(obj) {
                                                  +	var str = $(obj).attr("ty");
                                                  +	if (str == "td") {
                                                  +		$(obj).children("select").show();
                                                  +		$(obj).children("span").hide();
                                                  +	} else {
                                                  +		updateAttributeById($(obj).attr("objid"), $(obj)
                                                  +			.find("option:selected").text());
                                                  +		$(obj).hide();
                                                  +		$(obj).siblings("span").text($(obj).find("option:selected").text())
                                                  +			.show();
                                                  +	}
                                                  +}
                                                  +
                                                  +// 属性编辑打开窗口
                                                  +
                                                  +function showAttributedEditWindow(obj) {
                                                  +	var objId = $(obj).attr("objid");
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	var windowTitle = '提示';
                                                  +	let objValue = {}
                                                  +	if (shape) {
                                                  +		var attributesJsonArray = [];
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var attr = shape.dataAttributes[i];
                                                  +			if (attr.attributesJsonArray) {
                                                  +				attributesJsonArray = attr.attributesJsonArray;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		for (var index = 0; index < attributesJsonArray.length; index++) {
                                                  +			var tempObj = attributesJsonArray[index];
                                                  +			if (tempObj.id == objId) {
                                                  +			    objValue = tempObj
                                                  +				windowTitle = tempObj.name;
                                                  +				// $("#attribute-edit-title").text(tempObj.name);
                                                  +				$("#attribute-edit-content").val(tempObj.value);
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	$("#attribute-edit-window").dialog({
                                                  +		title: windowTitle,
                                                  +		draggable: true,
                                                  +		buttons : [{
                                                  +			text : '确定',
                                                  +			cls : "blue",
                                                  +			handler : function() {
                                                  +				var str = $("#attribute-edit-content").val();
                                                  +				if (str.indexOf("</script>") > -1) {
                                                  +					$("#attribute-edit-content").val("");
                                                  +					$.simpleAlert("禁止输入js脚本!", "warning");
                                                  +					return;
                                                  +				}
                                                  +				if(objValue.isRequired  && str == '') {
                                                  +                    $("#attribute-edit-content").attr('placeholder',objValue.name + '不能为空')
                                                  +                    $("#attribute-edit-content").addClass("required_input_css");
                                                  +                    return
                                                  +                }
                                                  +				updateAttributeById($(obj).attr("objid"), str);
                                                  +				$(obj).val(str);
                                                  +				$("#attribute-edit-window").dialog('close');
                                                  +			}
                                                  +		}, {
                                                  +			text : '取消',
                                                  +			handler : function() {
                                                  +				$("#attribute-edit-window").dialog('close');
                                                  +			}
                                                  +		}]
                                                  +	});
                                                  +	$("#attribute-edit-content").focus();
                                                  +}
                                                  +
                                                  +// table表格
                                                  +function openTableDialog(obj) {
                                                  +   var tableName = $("#tableName").val() || '未命名表单'
                                                  +   $("#attribute-title-content").val(tableName)
                                                  +	$('#attribute-table-content').empty()
                                                  +	$('#attribute-add-content').empty()
                                                  +   var thead =
                                                  +             '<tr id="' + dialogTableList[0].id + '">'
                                                  +        +      '<td style="width: 100px;" class="dialogTableHead">'
                                                  +	   	+         '<input style="" class="dialog_table_input_css" value="' + dialogTableList[0].name + '"/>'
                                                  +	    +      '</td>'
                                                  +	   	+    '<td style="width: 235px;" class="dialogTableHead">'
                                                  +	    +         '<input class="dialog_table_input_css" value="' + dialogTableList[0].desc + '"/>'
                                                  +	    +    '</td>'
                                                  +        +    '<td style="width: 100px;" class="dialogTableHead">操作</td>'
                                                  +        +    '</tr>'
                                                  +	$('#attribute-table-content').append(thead)
                                                  +	for ( let i = 1; i < dialogTableList.length; i++) {
                                                  +		let str =
                                                  +			'<tr id="' + dialogTableList[i].id + '">'
                                                  +			+   '<td style="width: 100px;">'
                                                  +			+       '<input class="dialog_table_input_css" value="' + dialogTableList[i].name + '"/>'
                                                  +			+   '</td>'
                                                  +			+   '<td style="width: 235px;">'
                                                  +			+       '<input class="dialog_table_input_css" value="' + dialogTableList[i].desc + '"/>'
                                                  +			+   '</td>'
                                                  +			+    '<td style="width: 100px;" class="dialogTableDelete" onclick="removeTableTr(this)">删除</td>'
                                                  +			+'</tr>'
                                                  +		$('#attribute-table-content').append(str)
                                                  +	}
                                                  +	$('#attribute-add-content').append('<button onclick="addTableTr(this)">新增</button>')
                                                  +
                                                  +    $("#attribute-table-window").dialog({
                                                  +        draggable: true,
                                                  +        buttons : [{
                                                  +            text : '确定',
                                                  +            cls : "blue",
                                                  +            handler : function() {
                                                  +                var title = $("#attribute-title-content").val()
                                                  +                $("#tableName").val(title)
                                                  +				let inputs = $('#attribute-table-content').find('input')
                                                  +				dialogTableList.forEach((item,index) => {
                                                  +					item.name = inputs[2*index].value
                                                  +					item.desc = inputs[2*index+1].value
                                                  +				})
                                                  +				let tableObj = {
                                                  +					name: title,
                                                  +					table: dialogTableList
                                                  +				}
                                                  +				updateAttributeById($(obj).attr("objid"), tableObj);
                                                  +				$("#attribute-table-window").dialog('close');
                                                  +            }
                                                  +        }, {
                                                  +            text : '取消',
                                                  +            handler : function() {
                                                  +                $("#attribute-table-window").dialog('close');
                                                  +            }
                                                  +        }]
                                                  +    })
                                                  +}
                                                  +
                                                  +function addTableTr(obj) {
                                                  +	let newTrId = Utils.newId()
                                                  +	let defaultStr =
                                                  +		'	  <tr id="'+ newTrId + '">'
                                                  +		+        '<td style="width: 100px;"><input class="dialog_table_input_css" value="命名"/></td>'
                                                  +		+        '<td style="width: 235px;"><input class="dialog_table_input_css" value="描述"/></td>'
                                                  +		+        '<td style="width: 100px;" class="dialogTableDelete" onclick="removeTableTr(this)">删除</td>'
                                                  +		+    '</tr>'
                                                  +	dialogTableList.push({ id: newTrId ,name: '命名',desc: '描述'})
                                                  +	$('#attribute-table-content').append(defaultStr)
                                                  +}
                                                  +
                                                  +function removeTableTr(obj) {
                                                  +	let removeId = obj.parentNode.getAttribute('id')
                                                  +	dialogTableList.splice(dialogTableList.findIndex(item => item.id == removeId), 1)
                                                  +	let tr = obj.parentNode
                                                  +	tr.remove()
                                                  +}
                                                  +
                                                  +// 对单个属性的更新操作
                                                  +
                                                  +function updateAttributeById(objId, va, shapeId) {
                                                  +	var shape = undefined;
                                                  +	if (shapeId) {
                                                  +		shape = Model.getShapeById(shapeId);
                                                  +	} else {
                                                  +		shape = Utils.getSelected()[0];
                                                  +		selectShape = shape;
                                                  +	}
                                                  +	var tempArray = new Array();
                                                  +	var count = 0;
                                                  +	if (shape) {
                                                  +		/*
                                                  +		 * for (var i = 0; i < shape.dataAttributes.length; i++) { var attr =
                                                  +		 * shape.dataAttributes[i]; if (attr.attributesContent) {
                                                  +		 * attr.attributesContent = $("#tagContentTable0").html(); break; } }
                                                  +		 */
                                                  +		var attributesJsonArray = shape.attributesJsonArray;
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {    // 获取当前形状的属性
                                                  +			var attr = shape.dataAttributes[i];
                                                  +			if (attr.attributesJsonArray) {
                                                  +				attributesJsonArray = attr.attributesJsonArray;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		for (var index = 0; index < attributesJsonArray.length; index++) {
                                                  +			var tempObj = attributesJsonArray[index];
                                                  +			if(tempObj == null) {
                                                  +				continue;
                                                  +			}
                                                  +			if (tempObj.id == objId) {
                                                  +				tempObj.value = va;
                                                  +				tempArray[count++] = tempObj;
                                                  +				continue;
                                                  +			}
                                                  +			tempArray[count++] = tempObj;
                                                  +		}
                                                  +		if (tempArray.length > 0) {
                                                  +			shape.attributesJsonArray = tempArray;
                                                  +			for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +				var attr = shape.dataAttributes[i];
                                                  +				if (attr.attributesJsonArray) {
                                                  +					attr.attributesJsonArray = tempArray;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +			if ("isAutoSave" == 1) {
                                                  +				CLB.cmdList = [{
                                                  +					"type" : "message",
                                                  +					"cmd" : "com.actionsoft.apps.coe.pal_pl_repository_designer_message"
                                                  +				}];
                                                  +			}
                                                  +			Model.update(shape);
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +// 删除行上的属性
                                                  +function removeTrAttribute(obj) {
                                                  +	var options = {
                                                  +		title : "提示",
                                                  +		content : "确定删除吗?",
                                                  +		model : false,
                                                  +		onConfirm : function() {
                                                  +			// 确定删除
                                                  +			var shape = Utils.getSelected()[0];
                                                  +			var tempArray = new Array();
                                                  +			var count = 0;
                                                  +			if (shape) {
                                                  +				// shape.attributesContent = $("#tagContentTable0").html();
                                                  +				var attributesJsonArray = [];
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.attributesJsonArray) {
                                                  +						attributesJsonArray = attr.attributesJsonArray;
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +				for (var index = 0; index < attributesJsonArray.length; index++) {
                                                  +					var tempObj = attributesJsonArray[index];
                                                  +					if (tempObj.id == $(obj).attr("objid")) {
                                                  +						continue;
                                                  +					}
                                                  +					tempArray[count++] = tempObj;
                                                  +				}
                                                  +				// if (tempArray.length >= 0) {
                                                  +				shape.attributesJsonArray = tempArray;
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.attributesJsonArray) {
                                                  +						attr.attributesJsonArray = tempArray;
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +				Model.update(shape);
                                                  +				// }
                                                  +			}
                                                  +			$(obj).hide();
                                                  +			$(obj).parent().parent().remove();
                                                  +			$.ajax({
                                                  +				type : "POST",
                                                  +				url : "./jd?sid="
                                                  +					+ CLB.sid
                                                  +					+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_remove",
                                                  +				data : {
                                                  +					uuid : $(obj).attr("objid"),
                                                  +					shapeId : Utils.getSelected()[0].id,
                                                  +					fileId : ruuid
                                                  +				},
                                                  +				success : function(msg) {
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +	};
                                                  +	window.top.$.confirm(options);
                                                  +}
                                                  +// 显示删除按钮
                                                  +
                                                  +function showRemoveTrAttribute(obj) {
                                                  +	$(obj).addClass("attr_bg_color_tr");
                                                  +	$("input[name=attribute_name_input_" + $(obj).attr("objid") + "]")
                                                  +		.addClass("attr_bg_color_tr");
                                                  +	$("input[name=attribute_name_input_" + $(obj).attr("objid") + "]").parent()
                                                  +		.addClass("attr_bg_color_tr");
                                                  +	$(obj).children("td").children(".ico_attribute_delete").show();
                                                  +	if ($(obj).attr("ty") == "sel") {
                                                  +		$(obj).children("td").children("select").show();
                                                  +		$(obj).children("td").children("span").hide();
                                                  +	}
                                                  +}
                                                  +// 隐藏删除按钮
                                                  +
                                                  +function hideRemoveTrAttribute(obj) {
                                                  +	$(obj).removeClass("attr_bg_color_tr");
                                                  +	$("input[name=attribute_name_input_" + $(obj).attr("objid") + "]")
                                                  +		.removeClass("attr_bg_color_tr");
                                                  +	$("input[name=attribute_name_input_" + $(obj).attr("objid") + "]").parent()
                                                  +		.removeClass("attr_bg_color_tr");
                                                  +	$(obj).children("td").children(".ico_attribute_delete").hide();
                                                  +	if ($(obj).attr("ty") == "sel") {
                                                  +		$(obj).children("td").children("select").hide();
                                                  +		$(obj).children("td").children("span").show();
                                                  +	}
                                                  +}
                                                  +// 经常用的是通过遍历,重构数组.
                                                  +Array.prototype.remove = function(dx) {
                                                  +	if (isNaN(dx) || dx > this.length) {
                                                  +		return false;
                                                  +	}
                                                  +	for (var i = 0, n = 0; i < this.length; i++) {
                                                  +		if (this[i] != this[dx]) {
                                                  +			this[n++] = this[i];
                                                  +		}
                                                  +	}
                                                  +	this.length -= 1;
                                                  +};
                                                  +function removeElementFromArr(dx, obj) {
                                                  +	if (isNaN(dx) || dx > obj.length) {
                                                  +		return false;
                                                  +	}
                                                  +	for (var i = 0, n = 0; i < obj.length; i++) {
                                                  +		if (obj[i] != obj[dx]) {
                                                  +			obj[n++] = obj[i];
                                                  +		}
                                                  +	}
                                                  +	obj.length -= 1;
                                                  +	return obj;
                                                  +}
                                                  +
                                                  +// 在数组中获取指定值的元素索引
                                                  +Array.prototype.getIndexByValue = function(value) {
                                                  +	var index = -1;
                                                  +	for (var i = 0; i < this.length; i++) {
                                                  +		if (this[i].url == value) {
                                                  +			index = i;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	return index;
                                                  +};
                                                  +Array.prototype.getIndexByValueById = function(value) {
                                                  +	var index = -1;
                                                  +	for (var i = 0; i < this.length; i++) {
                                                  +		if (this[i] == value) {
                                                  +			index = i;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	return index;
                                                  +};
                                                  +// 重写链接创建后的事件
                                                  +Designer.events.addEventListener("linkerCreated", function(linker) {
                                                  +	/**
                                                  +	 * var toId = linker.to.id; //当前选中的图形 var fromShape =
                                                  +	 * Utils.getSelected()[0]; //目标图形 var toShape =
                                                  +	 * Model.getShapeById(toId); var toShapeTemp = []; for (var index =
                                                  +	 * 0; index < linkerRelationship.length; index++) { var shapes =
                                                  +	 * linkerRelationship[index]; var fromShapeId = shapes.fromShapeId;
                                                  +	 * var toShapeIds = shapes.toShapeId; if (fromShape.name ==
                                                  +	 * fromShapeId) { if (toShapeIds != "*") { //判断是针对哪些图形有效 if
                                                  +	 * (toShapeIds.indexOf(",") > 0) { toShapeTemp =
                                                  +	 * toShapeIds.split(","); } else { toShapeTemp.push(toShapeIds); } } } }
                                                  +	 * if (toShapeTemp.length != 0) { for (var index = 0; index <
                                                  +	 * toShapeTemp.length; index++) { var tempShapeId =
                                                  +	 * toShapeTemp[index]; //删除这条线 if (toShape.name != tempShapeId) {
                                                  +	 * $.simpleAlert("不支持所选对象与目标对象的这种关系", "error", 2500); //待续未完
                                                  +	 * deleteLinkerSelected(linker); } } } // if (toShape.name == "xxx") { //
                                                  +	 * linker.to.id = null; //} //获取选中的链接线 var outlinkers =
                                                  +	 * Utils.getOutlinkers(fromShape); var l = linker; //
                                                  +	 * consloe.log(l);
                                                  +	 */
                                                  +	// 判断是不是支持这种关系类型
                                                  +	// isObjectRelationshipModel(linker, true);
                                                  +	// showShapeRelationTab(null);
                                                  +	// attributeShowTabContent(null);
                                                  +	// showRelevanceShapesContent();
                                                  +	// shapeCopyAndPasteCount(null);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 图形创建后重写
                                                  + */
                                                  +Designer.events.addEventListener("created", function(shape) {
                                                  +	if (Designer.status == "demo" && !demoCreatedTiped) {
                                                  +		UI.showStartStep("created", $("#" + shape.id));
                                                  +		demoCreatedTiped = true;
                                                  +	}
                                                  +	/***************************************************************************
                                                  +	 * var selectedShape = Utils.getSelected()[0]; var linkerIds =
                                                  +	 * Model.getShapeLinkers(selectedShape.id);
                                                  +	 * if(linkerIds&&linkerIds.length>0){ var linker =
                                                  +	 * Model.getShapeById(linkerIds[0]); isObjectRelationshipModel(linker,
                                                  +	 * true); }
                                                  +	 **************************************************************************/
                                                  +	showShapeRelationTab(shape);
                                                  +	if(shape.category == "control_risk") {
                                                  +		initPrivateAttribute(shape, "control_risk"); // 创建节点后编号提供默认值
                                                  +	}
                                                  +	if(shape.category == "process_flowchart" || shape.category == "process_bpmn2") {// 流程flowchar编号初始化编号
                                                  +		if (!IsGroupChild(shape)) {// 不在组内部或者新建立的节点为组节点
                                                  +			// 获取最大编号
                                                  +			initPrivateAttribute(shape, shape.category);
                                                  +		}
                                                  +		if(shape.name == "group") {// 组置于最底层
                                                  +			// Designer.layerShapes("back");
                                                  +			if (Model.orderList[0] != undefined) {
                                                  +				var start = Model.orderList[0].zindex; //取到最小的zindex
                                                  +				start -= 1;
                                                  +				shape.props.zindex = start;
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	attributeShowTabContent(shape);
                                                  +
                                                  +	var tmpArray = getTmpArray(isLaneAttrConfig);
                                                  +	if ($.inArray(shape.name, tmpArray) != -1) {// 泳池泳道隐藏
                                                  +		$('#showMoreAttrUL').hide();
                                                  +	}
                                                  +	// shapeCopyAndPasteCount(shape);
                                                  +});
                                                  +
                                                  +// 设置编号属性默认值
                                                  +function initPrivateAttribute(newShape, type) {
                                                  +	var shapes = Model.define.elements;
                                                  +	var max = 0;
                                                  +	for (var shapeId in shapes) {
                                                  +		var shape = shapes[shapeId];
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var attrArr = shape.dataAttributes[i];
                                                  +			if (attrArr.attributesJsonArray && attrArr.attributesJsonArray.length > 0) {
                                                  +				for (var j = 0; j < attrArr.attributesJsonArray.length; j++) {
                                                  +					var attr = attrArr.attributesJsonArray[j];
                                                  +					if (attr != null && attr.id && attr.id == 'number') {
                                                  +						var number = attr.value;
                                                  +						if(typeof number == 'string') number = number.replace(/^\s+|\s+$/g,"");
                                                  +						if(!isNaN(number)) if(number > max) max = number;
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	max = Math.floor(max) + 1;
                                                  +	for (var i = 0; i < newShape.dataAttributes.length; i++) {
                                                  +		var attrArr = newShape.dataAttributes[i];
                                                  +		if (attrArr.attributesJsonArray && attrArr.attributesJsonArray.length > 0) {
                                                  +			for (var j = 0; j < attrArr.attributesJsonArray.length; j++) {
                                                  +				var attr = attrArr.attributesJsonArray[j];
                                                  +				if (attr != null && attr.id && attr.id == 'number') {
                                                  +					attr.value = max;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +//判断新建立的节点是否在shapeName为group的组内部
                                                  +function IsGroupChild(newShape) {
                                                  +	var result = false;
                                                  +	var newObj = newShape.props;
                                                  +	var x2 = parseInt(newObj.x);
                                                  +	var y2 = parseInt(newObj.y);
                                                  +	var w2 = parseInt(newObj.w);
                                                  +	var h2 = parseInt(newObj.h);
                                                  +	if (newShape.name == "group") {
                                                  +		return false;
                                                  +	} else { // 是否在组内部
                                                  +		var shapes = Model.define.elements;
                                                  +		for (var shapeId in shapes) {
                                                  +			if (newShape.id == shapeId) continue;
                                                  +			var shape = shapes[shapeId];
                                                  +			if (shape.name == "group") {// 存在组节点
                                                  +				var obj = shape.props;
                                                  +				var x1 = parseInt(obj.x);
                                                  +				var y1 = parseInt(obj.y);
                                                  +				var w1 = parseInt(obj.w);
                                                  +				var h1 = parseInt(obj.h);
                                                  +				if (x1<x2 && y1<y2 && y1+h1>y2+h2 && x1+w1>x2+w2 && x1+w1>x2+w2 && y1+h1>y2+h2) { // 新建立节点在组内部
                                                  +					result = true;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	return result;
                                                  +}
                                                  +
                                                  +// 对粘贴的图形进行编号重置
                                                  +function initPasteShapesNumber(newJson) {
                                                  +	// 获取最大编号
                                                  +	var shapes = Model.define.elements;
                                                  +	var max = 0;
                                                  +	for (var shapeId in shapes) {
                                                  +		var shape = shapes[shapeId];
                                                  +		if (shape.dataAttributes != undefined) {
                                                  +			for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +				if (shape.dataAttributes[i].privateAttributeContent != null) {
                                                  +					var privateAttributeContent = shape.dataAttributes[i].privateAttributeContent;
                                                  +					if (typeof(privateAttributeContent) == "string") {
                                                  +						privateAttributeContent = eval("(" + privateAttributeContent + ")");
                                                  +					}
                                                  +					var number = privateAttributeContent.number;
                                                  +					if(number != undefined && number != null && number != "") {
                                                  +						if(typeof number == 'string') number = number.replace(/^\s+|\s+$/g,"");
                                                  +						if(!isNaN(number)) {
                                                  +							if (typeof number != 'number') {
                                                  +								number = parseInt(number);
                                                  +							}
                                                  +							if(number > max) max = number;
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +
                                                  +	var resultJson = [];
                                                  +	for (var m = 0; m < newJson.length; m++) {
                                                  +		var newShape = newJson[m];
                                                  +		if(newShape.category == "process_flowchart" || newShape.category == "process_bpmn2") {
                                                  +			// 设置最大编号为max+1
                                                  +			var json = "{'number':'编号'}";
                                                  +			max = parseInt(max)+1;
                                                  +			var json2 = "{'number':'" + max + "'}";
                                                  +			var shapeName = newShape.name;
                                                  +			if (shapeName.indexOf("_custom") > -1) {
                                                  +				shapeName = shapeName.substring(0, shapeName.indexOf("_"));
                                                  +			}
                                                  +			if (shapeName == "control" || shapeName == "risk" || shapeName == "item"
                                                  +				|| shapeName == "regulation" || shapeName == "procedure"
                                                  +				|| shapeName == "method" || shapeName == "manualOperation"
                                                  +				|| shapeName == "predefinedProcess"
                                                  +				|| shapeName == "callActivityCallingProcess"
                                                  +				|| shapeName == "businessRuleTask" || shapeName == "scriptTask"
                                                  +				|| shapeName == "sendTask" || shapeName == "userTask"
                                                  +				|| shapeName == "serviceTask" || shapeName == "manualTask"
                                                  +				|| shapeName == "receiveTask" || shapeName == "process"
                                                  +				|| shapeName == "decision" || shapeName == "group") {
                                                  +				for (var i = 0; i < newShape.dataAttributes.length; i++) {
                                                  +					var attr = newShape.dataAttributes[i];
                                                  +					if (attr.privateAttribute) {
                                                  +						attr.privateAttribute = json;
                                                  +					}
                                                  +					if(attr.privateAttributeContent) {
                                                  +						attr.privateAttributeContent = json2;
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		resultJson.push(newShape);
                                                  +	}
                                                  +	console.log('对粘贴的图形进行编号重置');
                                                  +	return newJson;
                                                  +}
                                                  +
                                                  +
                                                  +// 当不符合配置的关系时删除链接线
                                                  +
                                                  +function deleteLinkerSelected(linker) {
                                                  +	// moveShape移除图片 moveLinker移除链线 shapeMultiSelectable图形选中事件 designer.core.js
                                                  +	var d = linker;
                                                  +	if (d.length > 0) {
                                                  +		Utils.unselect();
                                                  +		var e = Utils.getAttachedShapes(d);
                                                  +		d = d.concat(e);
                                                  +		var c = [];
                                                  +		for (var b = 0; b < d.length; b++) {
                                                  +			var a = Utils.getChildrenShapes(d[b]);
                                                  +			c = c.concat(a)
                                                  +		}
                                                  +		d = d.concat(c);
                                                  +		Model.remove(d)
                                                  +	}
                                                  +}
                                                  +// 显示图形关系特性
                                                  +
                                                  +function showShapeRelationTab(currentShape) {
                                                  +	if (!$("#tagContent0").is(":visible")) {
                                                  +		return;
                                                  +	}
                                                  +	// 拿到所选的图形
                                                  +	var selectedShape = Utils.getSelected()[0];
                                                  +	if (!selectedShape)
                                                  +		return;
                                                  +	if (currentShape) {
                                                  +		selectedShape = currentShape
                                                  +	}
                                                  +	var linkers = Model.getShapeLinkers(selectedShape.id);
                                                  +	var outlinkers = Utils.getOutlinkers(Utils.getSelected());
                                                  +	var l = linkers;
                                                  +	$("#tagContentTable1").empty();
                                                  +	if (linkers != undefined) {
                                                  +		for (var a = 0; a < linkers.length; a++) {
                                                  +			// 根据连线的id拿到连线图形这个对象,再根据这个对象来找到他所关联的图形
                                                  +			var element = linkers[a];
                                                  +			var linkerObjs = Model.getShapeById(element);
                                                  +			// 来自哪个图形 的id
                                                  +			var fromId = linkerObjs.from.id;
                                                  +			var toId = linkerObjs.to.id;
                                                  +			var fromShape = Model.getShapeById(fromId);
                                                  +			var toShape = Model.getShapeById(toId);
                                                  +			if (fromShape != undefined && toShape != undefined) {
                                                  +				// 此处判断的是从本图形出去的连线
                                                  +				if (fromShape.id == selectedShape.id) {
                                                  +					for (var b = 0; b < linkerRelationship.length; b++) {
                                                  +						var shapes = linkerRelationship[b];
                                                  +						var fromShapeId = shapes.fromShapeId;
                                                  +						var toShapeIds = shapes.toShapeId;
                                                  +						if (fromShape.name == fromShapeId) {
                                                  +							if (toShapeIds != "*") {
                                                  +								// 判断是针对哪些图形有效
                                                  +								if (toShapeIds.indexOf(",") > 0) {
                                                  +									var toShapeTemp = toShapeIds.split(",");
                                                  +									for (var c = 0; c < toShapeTemp.length; c++) {
                                                  +										var josnShapeId = toShapeTemp[c];
                                                  +										if (josnShapeId == toShape.name) {
                                                  +											addtagContentTableContent(
                                                  +												fromShape,
                                                  +												shapes.outcomingName,
                                                  +												toShape);
                                                  +										}
                                                  +									}
                                                  +								} else {
                                                  +									if (toShapeIds == toShape.name) {
                                                  +										addtagContentTableContent(fromShape,
                                                  +											shapes.outcomingName, toShape);
                                                  +									}
                                                  +								}
                                                  +							} else {
                                                  +								// 当没有限制的时候
                                                  +								addtagContentTableContent(fromShape,
                                                  +									shapes.outcomingName, toShape);
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +				} else if (toShape.id == selectedShape.id) {
                                                  +					// 此处需要完善当不扶持 对像关系类型时下面的代码 不执行
                                                  +					// 判断进来的链线开始
                                                  +					for (var b = 0; b < linkerRelationship.length; b++) {
                                                  +						var shapes = linkerRelationship[b];
                                                  +						var fromShapeId = shapes.fromShapeId;
                                                  +						var toShapeIds = shapes.toShapeId;
                                                  +						// if (toShape.name == fromShapeId) {
                                                  +						// 判断这两种图形中是否有这种关系
                                                  +						// if (isObjectRelationshipModel(linkerObjs, false))
                                                  +						// addtagContentTableContent(fromShape,
                                                  +						// shapes.incomingName);
                                                  +						// }
                                                  +						if (fromShape.name == fromShapeId) {
                                                  +							if (toShapeIds != "*") {
                                                  +								// 判断是针对哪些图形有效
                                                  +								if (toShapeIds.indexOf(",") > 0) {
                                                  +									var toShapeTemp = toShapeIds.split(",");
                                                  +									for (var c = 0; c < toShapeTemp.length; c++) {
                                                  +										var josnShapeId = toShapeTemp[c];
                                                  +										if (josnShapeId == selectedShape.name) {
                                                  +											addtagContentTableContent(toShape,
                                                  +												shapes.incomingName,
                                                  +												fromShape);
                                                  +										}
                                                  +									}
                                                  +								} else {
                                                  +									if (toShapeIds == selectedShape.name) {
                                                  +										addtagContentTableContent(toShape,
                                                  +											shapes.incomingName, fromShape);
                                                  +									}
                                                  +								}
                                                  +							} else {
                                                  +								// 当没有限制的时候
                                                  +								addtagContentTableContent(toShape,
                                                  +									shapes.incomingName, fromShape);
                                                  +							}
                                                  +
                                                  +						}
                                                  +
                                                  +					}
                                                  +					// 判断进来的线结束
                                                  +				}
                                                  +			}
                                                  +			var e = element;
                                                  +		}
                                                  +	}
                                                  +}
                                                  +// 给关系类型增加内容
                                                  +
                                                  +function addtagContentTableContent(shape1, str, obj) {
                                                  +	if (obj.text == "") {
                                                  +		obj.text = obj.title;
                                                  +	}
                                                  +	var constr = '<tr onmouseout="hideRemoveTrAttribute(this);" onmouseover="showRemoveTrAttribute(this);" class="tagContentTableTr"><td>'
                                                  +		// + shape1.text
                                                  +		+ str
                                                  +		+ '</td><td><div class="attribute_td_div_css">'
                                                  +		+ obj.text
                                                  +		+ '</div> </td></tr>';
                                                  +	$("#tagContentTable1").append(constr);
                                                  +}
                                                  +// 判断是不是支持对象的关系类型
                                                  +
                                                  +function isObjectRelationshipModel(linker, isAlert) {
                                                  +	var flag = false;
                                                  +	var toId = linker.to.id;
                                                  +	if (toId == null)
                                                  +		return false;
                                                  +	// 当前选中的图形
                                                  +	var fromShape = Utils.getSelected()[0];
                                                  +	// 目标图形
                                                  +	var toShape = Model.getShapeById(toId);
                                                  +	var toShapeTemp = [];
                                                  +	for (var index = 0; index < linkerRelationship.length; index++) {
                                                  +		var shapes = linkerRelationship[index];
                                                  +		var fromShapeId = shapes.fromShapeId;
                                                  +		var toShapeIds = shapes.toShapeId;
                                                  +		if (fromShape) {
                                                  +			if (fromShape.name == fromShapeId) {
                                                  +				if (toShapeIds != "*") {
                                                  +					// 判断是针对哪些图形有效
                                                  +					if (toShapeIds.indexOf(",") > 0) {
                                                  +						toShapeTemp = toShapeIds.split(",");
                                                  +					} else {
                                                  +						toShapeTemp.push(toShapeIds);
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	if (toShapeTemp.length != 0) {
                                                  +		for (var index = 0; index < toShapeTemp.length; index++) {
                                                  +			var tempShapeId = toShapeTemp[index];
                                                  +			// 删除这条线
                                                  +			if (toShape && toShape.name == tempShapeId) {
                                                  +				// 画线时的操作
                                                  +				// 显示关系类型里的操作
                                                  +				flag = true;
                                                  +				break;
                                                  +				// 待续未完
                                                  +			}
                                                  +		}
                                                  +	} else {
                                                  +		flag = true;
                                                  +	}
                                                  +	if (!flag) {
                                                  +		if (isAlert) {
                                                  +			// $.simpleAlert("不支持所选对象与目标对象的这种关系", "error", 2000);
                                                  +			// deleteLinkerSelected(linker);
                                                  +		}
                                                  +	}
                                                  +	return flag;
                                                  +}
                                                  +
                                                  +// 设置链接的div的高度,当超过一定高度时才显示滚动条
                                                  +function setDivHeight() {/*
                                                  +							 * var linksHistoryDivH =
                                                  +							 * $("#linksHistoryDiv").height(); var
                                                  +							 * linksFileHistoryDivH =
                                                  +							 * $("#linksFileHistoryDiv").height(); if
                                                  +							 * (linksHistoryDivH < 140)
                                                  +							 * $("#linksHistoryDiv").css("overflow-y",
                                                  +							 * "hidden"); else
                                                  +							 * $("#linksHistoryDiv").removeAttr("style").css({
                                                  +							 * "padding-bottom:" : "0px", "text-align:" :
                                                  +							 * "center", "max-height" : "120px", "overflow-y" :
                                                  +							 * "scroll", "overflow-x" : "hidden" }); if
                                                  +							 * (linksFileHistoryDivH <140)
                                                  +							 * $("#linksFileHistoryDiv").css("overflow-y",
                                                  +							 * "hidden"); else
                                                  +							 * $("#linksFileHistoryDiv").removeAttr("style").css({
                                                  +							 * "padding-bottom:" : "0px", "text-align:" :
                                                  +							 * "center", "max-height" : "120px", "overflow-y" :
                                                  +							 * "scroll", "overflow-x" : "hidden" });
                                                  +							 */
                                                  +}
                                                  +
                                                  +function changeArributeByShape() {
                                                  +	if (Utils.getSelected()[0] == null) {
                                                  +		$("#dock_content_attribute").hide();
                                                  +		$("#attr_no_more_attribute_id").show();
                                                  +	} else {
                                                  +		// 属性弹出层显示的内容
                                                  +		var shape = Utils.getSelected()[0];
                                                  +		if (shape.name === "linker") {
                                                  +			$(".clearfix").hide();
                                                  +		} else {
                                                  +			$(".clearfix").show();
                                                  +		}
                                                  +		var attributesJsonArray = "";
                                                  +		var attributesJsonArrayT = [];
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var attr = shape.dataAttributes[i];
                                                  +			if (attr.attributesJsonArray) {
                                                  +				attributesJsonArrayT = attr.attributesJsonArray;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		// 属性排序
                                                  +		var defaultMoreAttr = $('#defaultMoreAttrSort').val();
                                                  +		if (shape.category != undefined) {
                                                  +			var category = shape.category.replace("_", ".");
                                                  +			if(methodId === category && defaultMoreAttr.length > 0) {
                                                  +				var arr = defaultMoreAttr.split('|');
                                                  +				var tempAttrArray = [];
                                                  +				for(var i = 0; i < arr.length; i++) {
                                                  +					for(var j = 0; j < attributesJsonArrayT.length; j++) {
                                                  +						if(attributesJsonArrayT[j] == undefined || attributesJsonArrayT[j] == null) {
                                                  +							continue;
                                                  +						}
                                                  +						if(arr[i] == attributesJsonArrayT[j].id) {
                                                  +							tempAttrArray.push(attributesJsonArrayT[j]);
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +				//过滤无效属性
                                                  +				for(var j = 0; j < attributesJsonArray.length; j++) {
                                                  +					var flag = true;
                                                  +					for(var i = 0; i < arr.length; i++) {
                                                  +						if (attributesJsonArray[j].id == arr[i]) {
                                                  +							flag = false;
                                                  +						}
                                                  +					}
                                                  +					if (flag) {
                                                  +						attributesJsonArray.splice(j,1);
                                                  +					}
                                                  +				}
                                                  +				//取新添加的属性
                                                  +				if (tempAttrArray.length > 0) {
                                                  +					var newAttrArray = [];
                                                  +					newAttrArray = tempAttrArray.concat(attributesJsonArrayT).filter(function(v, i, arr) {
                                                  +						return arr.indexOf(v) === arr.lastIndexOf(v);
                                                  +					});;
                                                  +					attributesJsonArrayT = tempAttrArray.concat(newAttrArray);
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +
                                                  +		if (shape && attributesJsonArrayT) {
                                                  +			// 参见 这个js中的Designer.events.addEventListener("created", function(a)
                                                  +			// {}函数,改为图形创建时增加私有属性
                                                  +			$("#tagContentTable0").empty();
                                                  +			attributesJsonArray = attributesJsonArrayT;
                                                  +			// $("#attribute_name_td_content").html(shape.title);
                                                  +			// $("input[name=attribute_desc_input]").val(shape.text);
                                                  +			var shapeTitle = shape.title == undefined ? "" : shape.title;
                                                  +			if (shape.name === "linker") {
                                                  +				$("#attribute_name_td_content").html("连线");
                                                  +			} else {
                                                  +				$("#attribute_name_td_content").html(shapeTitle);
                                                  +			}
                                                  +			if (shape.text == "") {
                                                  +				$("span[name=attribute_desc_input]").text(shapeTitle);
                                                  +			} else {
                                                  +				if (shape.text.length > 15) {
                                                  +					var tempText = shape.text;
                                                  +					tempText = tempText.substring(0, 15)
                                                  +					$("span[name=attribute_desc_input]").text(shape.text).attr(
                                                  +						"awsui-qtip", shape.text);
                                                  +				} else {
                                                  +					$("span[name=attribute_desc_input]").text(shape.text);
                                                  +				}
                                                  +			}
                                                  +			// $("input[name=attribute_desc_input]").val(shape.text);
                                                  +			// $("#attribute_name_td_desc").val(shape.shapeDesc);
                                                  +			// 此处遍历attributesJsonArray输入 内容
                                                  +			if (attributesJsonArray.length != 0) {
                                                  +				getPrivateAttributeHtml(attributesJsonArray, "tagContentTable0", shape);
                                                  +			}
                                                  +		}
                                                  +		$("#dock_content_attribute").show();
                                                  +		$("#attr_no_more_attribute_id").hide();
                                                  +	}
                                                  +}
                                                  +function initUserAddressForShape(objIds, shapeId, shapeName) {
                                                  +	$.each(objIds, function(key, value){
                                                  +		var objId = value;
                                                  +		var inputId = "attribute_name_input_"+objId;
                                                  +		var option = {
                                                  +			callback: function(){
                                                  +				var inputValue = $("#" + inputId).val();
                                                  +				updateAttributeById(objId, inputValue);
                                                  +				// 保存数据库
                                                  +				saveAddressShapeData(shapeId, objId, 'userAddress', inputValue, shapeName);
                                                  +				// 绑定单个删除事件
                                                  +				deleteAddress(inputId);
                                                  +			},
                                                  +			clearCallback: function(){
                                                  +				var inputValue = $("#" + inputId).val();
                                                  +				updateAttributeById(objId, inputValue);
                                                  +				// 保存数据库
                                                  +				saveAddressShapeData(shapeId, objId, 'userAddress', inputValue, shapeName);
                                                  +			},
                                                  +			filter : {
                                                  +				"addressSetting" : {
                                                  +					"delimiter" : " ",
                                                  +					"filterClass" : "",
                                                  +					"isDisplayMap" : false,
                                                  +					"isDisplayOtherMap" : false,
                                                  +					"layerFrom" : "",
                                                  +					"layerTo" : "",
                                                  +					"leafType" : "user",
                                                  +					"choiceType": "multiple",
                                                  +					"range" : "department|role|team",
                                                  +					"rootDetpId" : ""
                                                  +				},
                                                  +				"addressType" : "user",
                                                  +				"isAdvMode" : true,
                                                  +				"sourceField" : "UID",
                                                  +				"targetField" : inputId
                                                  +			},
                                                  +			inDialog : true
                                                  +		};
                                                  +		$("#" + inputId).address(option);
                                                  +		// 单个元素删除事件
                                                  +		deleteAddress(inputId);
                                                  +	});
                                                  +}
                                                  +
                                                  +function getRelationAddress(userObjIds, shapeId) {
                                                  +	// 查询关联数据
                                                  +	$.ajax({
                                                  +		type : 'POST',
                                                  +		url:"./jd",
                                                  +		async:false,
                                                  +		data:{
                                                  +			sid : CLB.sid,
                                                  +			cmd : "com.actionsoft.apps.coe.pal_pl_repository_designer_address_shape_query",
                                                  +			uuid : ruuid,
                                                  +			objIds : JSON.stringify(userObjIds),
                                                  +			shapeId : shapeId
                                                  +		},
                                                  +		success : function(r) {
                                                  +			$.each(userObjIds, function(key, value) {
                                                  +				var objId = value;
                                                  +				var inputId = "attribute_name_input_"+objId;
                                                  +				$("#" + inputId).val(r.data.data[objId]).trigger("change");
                                                  +				deleteAddress(inputId);
                                                  +			});
                                                  +		}
                                                  +	});
                                                  +
                                                  +}
                                                  +
                                                  +function getRelationAddressNames(objIds, shapeId, type) {
                                                  +	// 查询关联数据
                                                  +	$.ajax({
                                                  +		type : 'POST',
                                                  +		url:"./jd",
                                                  +		async:false,
                                                  +		data:{
                                                  +			sid : CLB.sid,
                                                  +			cmd : "com.actionsoft.apps.coe.pal_pl_repository_designer_address_names_shape_query",
                                                  +			uuid : ruuid,
                                                  +			objIds : JSON.stringify(objIds),
                                                  +			shapeId : shapeId,
                                                  +			type : type
                                                  +		},
                                                  +		success : function(r) {
                                                  +			$.each(objIds, function(key, value) {
                                                  +				var objId = value;
                                                  +				var inputId = "attribute_name_input_"+objId;
                                                  +				$("#" + inputId).val(r.data.data[objId]);
                                                  +			});
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +function initDeptAddressForShape(objIds, shapeId, shapeName) {
                                                  +	$.each(objIds, function(key, value) {
                                                  +		var objId = value;
                                                  +		var inputId = "attribute_name_input_"+objId;
                                                  +		var inputHiddenId = "attribute_name_input_"+objId+"_hidden";
                                                  +		var targetField = inputId + "," + inputHiddenId;
                                                  +
                                                  +		var options = {
                                                  +			callback : function() {
                                                  +				var inputValue = $('#' + inputId).val();
                                                  +				updateAttributeById(objId, inputValue);
                                                  +				// 保存数据库
                                                  +				saveAddressShapeData(shapeId, objId, 'deptAddress', inputValue, shapeName);
                                                  +				// 单个删除删除
                                                  +				deleteAddress(inputId);
                                                  +			},
                                                  +			clearCallback : function() {
                                                  +				var inputValue = $('#' + inputId).val();
                                                  +				updateAttributeById(objId, inputValue);
                                                  +				// 保存数据库
                                                  +				saveAddressShapeData(shapeId, objId, 'deptAddress', inputValue, shapeName);
                                                  +			},
                                                  +			filter : {
                                                  +				addressType: "dept",//地址簿类型
                                                  +				addressSetting: {
                                                  +					range: "department",//department:部门,role:角色,team:团队
                                                  +					delimiter: " ",
                                                  +					choiceType: "multiple",//single:单选; multiple:多选
                                                  +					leafType: "dept"//叶子节点类型,user:用户;dept:部门
                                                  +				},
                                                  +				//字典的数据源字段,通常是orguser表中的字段 ,多个用逗号隔开;回填值选择:
                                                  +				deptSourceField : "DEPTID",
                                                  +				deptTargetField : inputId
                                                  +			},
                                                  +			valueType : 0, //0:aliasname; 1:uid; 2:username
                                                  +			separator : " "//逗号 空格……分隔符
                                                  +		};
                                                  +		$("#" + inputId).address(options);
                                                  +	});
                                                  +}
                                                  +
                                                  +// 地址簿单个元素删除
                                                  +function deleteAddress(inputId) {
                                                  +	// 单个删除删除
                                                  +	var id = 'awsui-address-' + inputId;
                                                  +	$('#' + id+ ' .awsui-item-del').off('mousedown').mousedown(function(){
                                                  +		var div = $(this).parent();
                                                  +		var deleteValue = div.attr("value") || div.attr("id");
                                                  +		// 保存数据库
                                                  +		var $input = div.parent().find('input:first');
                                                  +		var inputValue = $input.val();
                                                  +		var shapeId = $input.attr('shapeId');
                                                  +		var shapeName = '';
                                                  +		var inputType = $input.attr('inputtype');
                                                  +		var objId = $input.attr('objid');
                                                  +		// 获取节点名称
                                                  +		var elements =  Model.define.elements;
                                                  +		for (var i in elements) {
                                                  +			if (i == shapeId) {
                                                  +				shapeName = elements[i].text;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		var tempArr = inputValue.split(' ');
                                                  +		var value = '';
                                                  +		for (var i = 0; i < tempArr.length; i++) {
                                                  +			if (tempArr[i] == deleteValue) continue;
                                                  +			value += tempArr[i];
                                                  +			if (i < tempArr.length - 1) {
                                                  +				value += ' ';
                                                  +			}
                                                  +		}
                                                  +		saveAddressShapeData(shapeId, objId, inputType, value, shapeName);
                                                  +	});
                                                  +}
                                                  +
                                                  +// 保存地址簿选中的数据
                                                  +function saveAddressShapeData(shapeId, objId, addressType, value, shapeText) {
                                                  +	$.ajax({
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_address_shape_data_save",
                                                  +		type : 'POST',
                                                  +		async : false,
                                                  +		data : {
                                                  +			data : JSON.stringify({
                                                  +				uuid : ruuid,
                                                  +				shapeId : shapeId,
                                                  +				attrId : objId,
                                                  +				addressType : addressType,
                                                  +				value : value,
                                                  +				shapeText : shapeText
                                                  +			})
                                                  +		},
                                                  +		success : function(r) {
                                                  +			var inputId = "attribute_name_input_"+objId;
                                                  +			$("#" + inputId).val(value).trigger("change");
                                                  +			deleteAddress(inputId);
                                                  +		}
                                                  +	})
                                                  +}
                                                  +
                                                  +//获取关联形状文本
                                                  +function getRelevanceShapeNameByShapeId(objIds, shapeId) {
                                                  +	var elements =  Model.define.elements;
                                                  +	var shapeName = '';
                                                  +	var shapeCategory = '';
                                                  +	for (var i in elements) {
                                                  +		if (i == shapeId) {
                                                  +			shapeName = elements[i].name;
                                                  +			shapeCategory = elements[i].category;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	if (shapeName == '') {
                                                  +		return;
                                                  +	}
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_name",
                                                  +		data : {
                                                  +			fileId : ruuid,
                                                  +			shapeId : shapeId,
                                                  +			shapeName: shapeName,
                                                  +			shapeCategory: shapeCategory == 'lane' ? methodId : shapeCategory
                                                  +		},
                                                  +		success : function(msg) {
                                                  +			if (msg.result == "ok") {
                                                  +				var list = msg.data.relationModelList;
                                                  +				var shapeRefObj = msg.data.shapeRefObj;
                                                  +				for (var i = 0; i < objIds.length; i++) {
                                                  +					var objId = objIds[i];
                                                  +					var shapeNames = [];
                                                  +					var shapeRelationValue = [];
                                                  +					var ref = shapeRefObj[objId];
                                                  +					var relationType = ref.type
                                                  +					for (var j = 0; j < list.length; j++) {
                                                  +						if (list[j].attrId == objId) {
                                                  +							shapeNames.push(list[j].relationShapeText);
                                                  +							if (relationType == 'file') {
                                                  +								shapeRelationValue.push(list[j].relationFileId);
                                                  +							} else {
                                                  +								shapeRelationValue.push(list[j].relationShapeId);
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +					$("input[objid='" + objId + "']").val(shapeNames.join(","));
                                                  +					$("input[objid_shapeId='" + objId + "']").val(shapeRelationValue.join(","));
                                                  +					$("input[objid_shapeId='" + objId + "']").attr('ref', JSON.stringify(ref));
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +// 关联aws组织
                                                  +function openOrganizationRelationDig(obj) {
                                                  +	var shapeAwsOrgValue = $("input[objid_shapeId='" + $(obj).attr("objid") + "']").val();
                                                  +	var ref = $("input[objid_shapeId='" + $(obj).attr("objid") + "']").attr("ref");
                                                  +	var id = sid;
                                                  +	var wsId = $("#wsId").val();
                                                  +	selectShape = Utils.getSelected()[0];
                                                  +	var shape = selectShape;
                                                  +	var title = "添加AWS PaaS平台组织";
                                                  +	var conObj = $("#attr_dialog_normal_relevance_aws_div").empty();
                                                  +	var str = '<iframe width="100%" id="attr_content_iframe_relevance_aws" name="attr_content_iframe_relevance_aws" frameBorder="0" style="width: 100%; height: 318px;"></iframe>';
                                                  +	conObj.append(str);
                                                  +	$("#attr_dialog_normal_relevance_aws_div").attr("title", title);
                                                  +	$('#attr_content_iframe_relevance_aws').attr(
                                                  +		'src', "./w?sid=" + id
                                                  +		+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_aws_org_page"
                                                  +		+ "&wsId=" + wsId
                                                  +		+ "&ref=" + encodeURI(ref)
                                                  +		+ "&fileId=" + ruuid
                                                  +		+ "&shapeId=" + shape.id
                                                  +		+ "&attrId=" + $(obj).attr("objid"));
                                                  +	$("#attr_dialog_normal_relevance_aws_div").dialog({
                                                  +		buttons : [{
                                                  +			text : '确定',
                                                  +			cls : "blue",
                                                  +			handler : function() {
                                                  +				//getRelevanceAwsOrgData($(obj).attr("objid"));
                                                  +				var tmpObjId = $(obj).attr("objid");
                                                  +				getRelevanceAwsOrgData(tmpObjId);
                                                  +				var tmpShape = Utils.getSelected()[0];
                                                  +				var tmpTitle = tmpShape.title;
                                                  +				if (tmpShape.name == "linker") {
                                                  +					return;
                                                  +				}
                                                  +				if (tmpTitle.indexOf("泳道") > -1 || tmpTitle.indexOf("泳池") > -1 || tmpTitle.indexOf("分隔") > -1) {
                                                  +					return;
                                                  +				}
                                                  +				if (isForceShowError && tmpAttrIdValue.indexOf(tmpObjId) > -1) {
                                                  +					$.simpleAlert("已设置不允许修改,请在应用参数中设置", 'error');
                                                  +					isForceShowError = false;
                                                  +				}
                                                  +				tmpAttrIdValue = [];
                                                  +			}
                                                  +		}, {
                                                  +			text : '关闭',
                                                  +			handler : function() {
                                                  +				$("#attr_dialog_normal_relevance_aws_div").dialog('close');
                                                  +			}
                                                  +		}]
                                                  +	});
                                                  +}
                                                  +
                                                  +//得到关联的平台组织
                                                  +function getRelevanceAwsOrgData(objId) {
                                                  +	$("#attr_dialog_normal_relevance_aws_div").dialog('close');
                                                  +	selectShape = Utils.getSelected()[0];
                                                  +	var shape = selectShape;
                                                  +	if (!shape) {
                                                  +		return;
                                                  +	}
                                                  +	var obj = attr_content_iframe_relevance_aws.getRelevanceAwsData();
                                                  +	var checkedOrgList = [];
                                                  +	for (var i in obj) {
                                                  +		checkedOrgList.push(obj[i]);
                                                  +	}
                                                  +
                                                  +
                                                  +	var shapesObj = [];
                                                  +	var relevanceShapes = [];
                                                  +
                                                  +	var shapeGroupId = "";
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.shapeGroupId != undefined && attr.shapeGroupId != "") {
                                                  +			shapeGroupId = attr.shapeGroupId;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	shape = getAwsOrgAttributeByAttrId(shape, objId, checkedOrgList);
                                                  +	// 更新数据库
                                                  +	saveRelevanceAwsOrgShapesTODB(checkedOrgList, shape.id, shape.text, $("title").text(), shapeGroupId, objId, shape);
                                                  +}
                                                  +
                                                  +//得到不同属性值关联的形状
                                                  +function getAwsOrgAttributeByAttrId(shape, objId, checkedOrgList) {
                                                  +	//objId 属性的key值
                                                  +	var exitAttributesJsonArray = [];
                                                  +	var attrArr = [];	//修改后的属性值
                                                  +
                                                  +	for (var i = 0; i < checkedOrgList.length; i++) {
                                                  +		var shapeObjT = checkedOrgList[i];
                                                  +		attrArr.push(shapeObjT.id);
                                                  +	}
                                                  +	attrArr = attrArr.unique();	//属性值去重
                                                  +	if (attrArr.length > 0) {
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var attr = shape.dataAttributes[i];
                                                  +			if (attr.attributesJsonArray) {
                                                  +				exitAttributesJsonArray = attr.attributesJsonArray;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		for (var c = 0; c < exitAttributesJsonArray.length; c++) {
                                                  +			var el = exitAttributesJsonArray[c];
                                                  +			if(el == null) continue;
                                                  +			if (el.id == objId) {
                                                  +				el.value = attrArr.join(",");
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var attr = shape.dataAttributes[i];
                                                  +			if (attr.attributesJsonArray) {
                                                  +				attr.attributesJsonArray = exitAttributesJsonArray;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		for (var j = 0, len = attrArr.length; j < len; j++) {
                                                  +			var attrShapeId = attrArr[j];
                                                  +			relationShapesObject[attrShapeId] = {"relationAwsOrg" : attrShapeId};
                                                  +		}
                                                  +		$("input[objid_shapeId='" + objId + "']").val(attrArr.join(","));
                                                  +	} else {
                                                  +		$("input[objid_shapeId='" + objId + "']").val("");
                                                  +	}
                                                  +	return shape;
                                                  +}
                                                  +
                                                  +//将关联关系保存到数据库(AWS org)
                                                  +function saveRelevanceAwsOrgShapesTODB(shapesObj, shapeId, shapeName, fileName, shapeGroupId, objId, shape) {
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_aws_org_relevance_save",
                                                  +		data : {
                                                  +			relationAwsOrg : json2String(shapesObj),
                                                  +			shapeId : shapeId,
                                                  +			fileId : ruuid,
                                                  +			shapeGroupId : shapeGroupId,
                                                  +			attrId : objId,
                                                  +			shapeText : shapeName
                                                  +		},
                                                  +		success : function(msg) {
                                                  +			if (msg.result == "ok") {
                                                  +				var name = [];
                                                  +				var name1 = [];
                                                  +				var name2 = [];
                                                  +				var name3 = [];
                                                  +				var name4 = [];
                                                  +				for (var i = 0; i < shapesObj.length; i++) {
                                                  +					if (shapesObj[i].type == 'department') {
                                                  +						name1.push(shapesObj[i].name);
                                                  +					}
                                                  +					if (shapesObj[i].type == 'user') {
                                                  +						name2.push(shapesObj[i].name);
                                                  +					}
                                                  +					if (shapesObj[i].type == 'position') {
                                                  +						name3.push(shapesObj[i].name);
                                                  +					}
                                                  +					if (shapesObj[i].type == 'role') {
                                                  +						name4.push(shapesObj[i].name);
                                                  +					}
                                                  +				}
                                                  +				if (name1.length > 0) {
                                                  +					name = name.concat(name1);
                                                  +				}
                                                  +				if (name2.length > 0) {
                                                  +					name = name.concat(name2);
                                                  +				}
                                                  +				if (name3.length > 0) {
                                                  +					name = name.concat(name3);
                                                  +				}
                                                  +				if (name4.length > 0) {
                                                  +					name = name.concat(name4);
                                                  +				}
                                                  +				$("input[objid='" + objId + "']").val(name.join(","));
                                                  +				var relationShapeIds = $("input[objid_shapeId='" + objId + "']").val();
                                                  +				if (relationShapeIds.indexOf(",")) {
                                                  +					relationShapeIds = relationShapeIds.split(",");
                                                  +				}
                                                  +				//修改文件中保存的属性值
                                                  +				var tempArray = new Array();
                                                  +				var count = 0;
                                                  +				var attributesJsonArray = [];
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.attributesJsonArray) {
                                                  +						attributesJsonArray = attr.attributesJsonArray;
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +				for (var index = 0; index < attributesJsonArray.length; index++) {
                                                  +					var tempObj = attributesJsonArray[index];
                                                  +					if(tempObj == null) continue;
                                                  +					if (tempObj.id == objId) {
                                                  +						tempObj.value = relationShapeIds;
                                                  +					}
                                                  +					tempArray[count++] = tempObj;
                                                  +				}
                                                  +
                                                  +				shape.attributesJsonArray = tempArray;
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.attributesJsonArray) {
                                                  +						attr.attributesJsonArray = tempArray;
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +			Model.update(shape);
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +//获取关联形状文本
                                                  +function getRelevanceAwsOrgNameByShapeId(objIds, shapeId) {
                                                  +	var elements =  Model.define.elements;
                                                  +	var shapeName = '';
                                                  +	var shapeCategory = '';
                                                  +	for (var i in elements) {
                                                  +		if (i == shapeId) {
                                                  +			shapeName = elements[i].name;
                                                  +			shapeCategory = elements[i].category;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	if (shapeName == '') {
                                                  +		return;
                                                  +	}
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_aws_org_relevance_name_query",
                                                  +		data : {
                                                  +			fileId : ruuid,
                                                  +			shapeId : shapeId,
                                                  +			shapeName: shapeName,
                                                  +			shapeCategory: shapeCategory == 'lane' ? methodId : shapeCategory
                                                  +		},
                                                  +		success : function(msg) {
                                                  +			if (msg.result == 'ok') {
                                                  +				var data = msg.data.attrData;
                                                  +				var shapeRefObj = msg.data.shapeRefObj;
                                                  +				for (var i = 0; i < objIds.length; i++) {
                                                  +					var objId = objIds[i];
                                                  +					var ref = shapeRefObj[objId];
                                                  +					if (data[objId] != undefined)	 {
                                                  +						// 按照部门人员角色排序
                                                  +						var tempArr = data[objId];
                                                  +						var name = [];
                                                  +						var name1 = [];
                                                  +						var name2 = [];
                                                  +						var name3 = [];
                                                  +						var name4 = [];
                                                  +						for (var j = 0; j < tempArr.length; j++) {
                                                  +							if (tempArr[j].type == 'department') {
                                                  +								name1.push(tempArr[j].name);
                                                  +							}
                                                  +							if (tempArr[j].type == 'user') {
                                                  +								name2.push(tempArr[j].name);
                                                  +							}
                                                  +							if (tempArr[j].type == 'position') {
                                                  +								name3.push(tempArr[j].name);
                                                  +							}
                                                  +							if (tempArr[j].type == 'role') {
                                                  +								name4.push(tempArr[j].name);
                                                  +							}
                                                  +						}
                                                  +						if (name1.length > 0) {
                                                  +							name = name.concat(name1);
                                                  +						}
                                                  +						if (name2.length > 0) {
                                                  +							name = name.concat(name2);
                                                  +						}
                                                  +						if (name3.length > 0) {
                                                  +							name = name.concat(name3);
                                                  +						}
                                                  +						if (name4.length > 0) {
                                                  +							name = name.concat(name4);
                                                  +						}
                                                  +						$("input[objid='" + objId + "']").val(name.join(","));
                                                  +					}
                                                  +					$("input[objid_shapeId='" + objId + "']").attr('ref', JSON.stringify(ref));
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +// 形状关联弹窗
                                                  +function openRelationDig(obj) {
                                                  +	var shapeRelationValue = $("input[objid_shapeId='" + $(obj).attr("objid") + "']").val();
                                                  +	var ref = $("input[objid_shapeId='" + $(obj).attr("objid") + "']").attr("ref");   // shape  file  shapeAndFile
                                                  +	var relationShapeIds = '';
                                                  +	var relationFileIds = '';
                                                  +	if (JSON.parse(ref).type == 'file') {
                                                  +		relationFileIds = shapeRelationValue;
                                                  +	} else {
                                                  +		relationShapeIds = shapeRelationValue;
                                                  +	}
                                                  +	var id = sid;
                                                  +	var wsId = $("#wsId").val();
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	var title = $(obj).closest('tr').find('td:first').text().replace('*','');
                                                  +	if (title == undefined || title == '') {
                                                  +		title = "添加关联形状";
                                                  +	}
                                                  +	var conObj = $("#attr_dialog_normal_relevance_shapes_div").empty();
                                                  +	var str = '<iframe width="100%" id="attr_content_iframe_relevance_shapes" name="attr_content_iframe_relevance_shapes" frameBorder="0" style="width: 100%; height: 318px;"></iframe>';
                                                  +	conObj.append(str);
                                                  +	$("#attr_dialog_normal_relevance_shapes_div").attr("title", title);
                                                  +	$('#attr_content_iframe_relevance_shapes').attr(
                                                  +		'src', "./w?sid=" + id
                                                  +		+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_shapes_tree"
                                                  +		+ "&wsId=" + wsId
                                                  +		+ "&ref=" + ref
                                                  +		+ "&shapeId=" + shape.id
                                                  +		+ "&attrId=" + $(obj).attr("objid")
                                                  +		+ "&relationShapeIds=" + relationShapeIds
                                                  +		+ "&relationFileIds=" + relationFileIds
                                                  +		+ "&ruuid=" + ruuid);
                                                  +	$("#attr_dialog_normal_relevance_shapes_div").dialog({
                                                  +		buttons : [{
                                                  +			text : '确定',
                                                  +			cls : "blue",
                                                  +			handler : function() {
                                                  +				var tmpObjId = $(obj).attr("objid");
                                                  +				getRelevanceShapes(tmpObjId);
                                                  +				var tmpShape = Utils.getSelected()[0];
                                                  +				var tmpTitle = tmpShape.title;
                                                  +				if (tmpShape.name == "linker") {
                                                  +					return;
                                                  +				}
                                                  +				if (tmpTitle.indexOf("泳道") > -1 || tmpTitle.indexOf("泳池") > -1 || tmpTitle.indexOf("分隔") > -1) {
                                                  +					return;
                                                  +				}
                                                  +				if (isForceShowError && tmpAttrIdValue.indexOf(tmpObjId) > -1) {
                                                  +					$.simpleAlert("已设置不允许修改,请在应用参数中设置", 'error');
                                                  +					isForceShowError = false;
                                                  +				}
                                                  +				tmpAttrIdValue = [];
                                                  +			}
                                                  +		}, {
                                                  +			text : '关闭',
                                                  +			handler : function() {
                                                  +				$("#attr_dialog_normal_relevance_shapes_div").dialog('close');
                                                  +			}
                                                  +		}]
                                                  +	});
                                                  +}
                                                  +
                                                  +// 将关联关系保存到数据库
                                                  +function saveRelevanceShapesTODB(shapesObj, shapeId, shapeName, fileName,
                                                  +								 shapeGroupId, objId, shape) {
                                                  +	//itsystem(it系统)加新建的角标(SAP OA ERP HR等分类)
                                                  +	/*if("itsystem" == objId) {
                                                  +		var itsystemFlag = {
                                                  +			"w":30,
                                                  +			"h":30,
                                                  +			"textw": 20,
                                                  +			"texth": 17,
                                                  +			"imgT": 0,
                                                  +			"category":"custom",
                                                  +			"icon":"",
                                                  +			"name":"itsystem_mark_unique", //it系统区分其他属性的角标的标识
                                                  +			"showName":false,
                                                  +			"showType":"text", //text  icon
                                                  +			"type":"string",
                                                  +			"value":"SAP",
                                                  +			"horizontal":"right",
                                                  +			"vertical":"mosttop",
                                                  +			"radius":5,
                                                  +			"title":""};
                                                  +		var needMark = false; //是否需要角标
                                                  +		var markName = "";
                                                  +		if(shapesObj && shapesObj.length > 0) {
                                                  +			needMark = true;
                                                  +			markName = shapesObj[0].relationShapeText;
                                                  +			if(shapesObj.length > 1) {
                                                  +				markName += "...";
                                                  +			}
                                                  +		}
                                                  +		var haveCornerMark = false;  //之前是否已经存在角标
                                                  +		if(!shape.dataAttributes){
                                                  +			shape.dataAttributes = [];
                                                  +		}
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var dataAttribute = shape.dataAttributes[i];
                                                  +			if(dataAttribute.name && dataAttribute.name == "itsystem_mark_unique") {//寻找it系统区分其他属性的角标的标识
                                                  +				itsystemFlag = dataAttribute; //从存在的图形中取角标
                                                  +				haveCornerMark = true;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +
                                                  +		/*这样判断之前是否存在角标的方法不准确var attributesJsonArray = shape.attributesJsonArray;
                                                  +		if(attributesJsonArray) {
                                                  +			for(var i = 0; i < attributesJsonArray.length; i++) {
                                                  +				var nodeAttrObj = attributesJsonArray[i];
                                                  +				if(nodeAttrObj != null && nodeAttrObj.key == "itsystem") {
                                                  +					if(nodeAttrObj.value) {
                                                  +						haveCornerMark = true;
                                                  +					}
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +		} * /
                                                  +
                                                  +		if(haveCornerMark) {
                                                  +			//之前有角标
                                                  +			if(needMark) { //需要角标
                                                  +				itsystemFlag.value = markName;
                                                  +				Designer.updateDataAttributeById(shapeId, itsystemFlag);
                                                  +			} else {//不需要角标
                                                  +				itsystemFlag.value = "";
                                                  +				Designer.updateDataAttributeById(shapeId, itsystemFlag);
                                                  +			}
                                                  +		} else {
                                                  +			//之前无角标
                                                  +			if(needMark) {//需要角标
                                                  +				itsystemFlag.value = markName;
                                                  +				Designer.addDataAttributeById(shapeId, itsystemFlag);
                                                  +			} else {//不需要角标
                                                  +				//
                                                  +			}
                                                  +		}
                                                  +	}*/
                                                  +
                                                  +	//添加关联属性时,更新relationShapeModelObject的值
                                                  +	if (shapesObj.length > 0) {
                                                  +		for (var i = 0; i < shapesObj.length; i++) {
                                                  +			var temp = shapesObj[i];
                                                  +			var shapeIdAttrId = temp.shapeId + "_" + temp.attrId;
                                                  +			relationShapeModelObject[shapeIdAttrId] = temp.relationShapeText;
                                                  +		}
                                                  +	}
                                                  +	var ref = $("input[objid_shapeId='" + objId + "']").attr("ref");
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_save",
                                                  +		data : {
                                                  +			relationShapes : json2String(shapesObj),
                                                  +			shapeId : shapeId,
                                                  +			fileUUID : ruuid,
                                                  +			shapeGroupId : shapeGroupId,
                                                  +			attrId : objId,
                                                  +			ref : ref
                                                  +		},
                                                  +		success : function(msg) {
                                                  +			if (msg.result == "ok") {
                                                  +				var list = msg.data.list;
                                                  +				var shapeNames = [];
                                                  +				var shapeRelationValue = [];
                                                  +				var relationType = JSON.parse(ref).type;
                                                  +				for (var j = 0; j < list.length; j++) {
                                                  +					if (list[j].attrId == objId) {
                                                  +						shapeNames.push(list[j].relationShapeText);
                                                  +						if (relationType == 'file') {
                                                  +							shapeRelationValue.push(list[j].relationFileId);
                                                  +						} else {
                                                  +							shapeRelationValue.push(list[j].relationShapeId);
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +				$("input[objid='" + objId + "']").val(shapeNames.join(","));
                                                  +				$("input[objid_shapeId='" + objId + "']").val(shapeRelationValue.join(","));
                                                  +
                                                  +				// var relationShapeIds = $("input[objid_shapeId='" + objId + "']").val();
                                                  +				// var shapeNames = [];
                                                  +				// if (relationShapeIds.indexOf(",")) {
                                                  +				// 	relationShapeIds = relationShapeIds.split(",");
                                                  +				// 	for (var k = 0; k < msg.data.list.length; k++) {
                                                  +				// 		var list = msg.data.list[k];
                                                  +				// 		for (var p = 0; p < relationShapeIds.length; p++) {
                                                  +				// 			if (list.relationShapeId == relationShapeIds[p]) {
                                                  +				// 				shapeNames.push(list.relationShapeText);
                                                  +				// 			}
                                                  +				// 		}
                                                  +				// 	}
                                                  +				// 	$("input[objid='" + objId + "']").val(shapeNames.join(","));
                                                  +				// }
                                                  +				//修改文件中保存的属性值
                                                  +				var tempArray = new Array();
                                                  +				var count = 0;
                                                  +				var attributesJsonArray = [];
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.attributesJsonArray) {
                                                  +						attributesJsonArray = attr.attributesJsonArray;
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +				for (var index = 0; index < attributesJsonArray.length; index++) {
                                                  +					var tempObj = attributesJsonArray[index];
                                                  +					if(tempObj == null) continue;
                                                  +					if (tempObj.id == objId) {
                                                  +						tempObj.value = shapeRelationValue;
                                                  +					}
                                                  +					tempArray[count++] = tempObj;
                                                  +				}
                                                  +
                                                  +				shape.attributesJsonArray = tempArray;
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.attributesJsonArray) {
                                                  +						attr.attributesJsonArray = tempArray;
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +			Model.update(shape);
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +// 获取boolean类型属性的option
                                                  +var booleanComboboxs = [];
                                                  +function getBooleanSelectOptions(booleanValues, shapeId) {
                                                  +	for (var i = 0; i < booleanValues.length; i++) {
                                                  +		var objId = booleanValues[i].objId;
                                                  +		var objValue = booleanValues[i].objValue;
                                                  +		var objType = booleanValues[i].objType;
                                                  +		var objOptions = booleanValues[i].objOptions;
                                                  +		var multiple = false;
                                                  +		var closeSelect = true;
                                                  +		var optionsData = objOptions;
                                                  +		if (optionsData) {
                                                  +			optionsData = optionsData.split(",");
                                                  +			var selectData = [];
                                                  +			var selectedData = [];
                                                  +			if(objValue != null && objValue != ''){
                                                  +				var selectedArr = objValue.split(',');
                                                  +			}
                                                  +			var y = 0;
                                                  +			selectData.push({id: '', text: '请选择'});// 默认一个空值
                                                  +			if (optionsData.length > 0) {
                                                  +				for (var j = 0, len = optionsData.length; j < len; j++) {
                                                  +					var dataObj = {
                                                  +						id : j,
                                                  +						text : optionsData[j]
                                                  +					};
                                                  +					selectData.push(dataObj);
                                                  +					if(objValue != null && objValue != ''){
                                                  +						for(var x = 0; x < selectedArr.length; x++){
                                                  +							if(selectedArr[x] == optionsData[j]){
                                                  +								selectedData[y] = j;
                                                  +								y++;
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +			$.fn.select2.defaults.set("language", "zh-CN");
                                                  +			var opt1 = {
                                                  +				width : 244,
                                                  +				multiple:multiple,
                                                  +				closeOnSelect:closeSelect,
                                                  +				placeholder:'请选择...',
                                                  +				minimumResultsForSearch: -1
                                                  +			};
                                                  +			opt1.data = selectData;
                                                  +			$("#attribute_name_input_" + objId).parent().css("padding-left", "0px");
                                                  +			var $obj = $("#attribute_name_input_" + objId).select2(opt1);
                                                  +			if(selectedData != null && selectedData != ''){
                                                  +				$("#attribute_name_input_" + objId).val(selectedData[0]).trigger("change");
                                                  +			}
                                                  +			$obj.off("select2:close").on("select2:close", function(e){
                                                  +				// var type = this.id.substring(this.id.lastIndexOf('_')+1);
                                                  +				var type = this.id.substr('attribute_name_input_'.length);
                                                  +				var selectValue = [];
                                                  +				var selected = $('#' + this.id).select2('data');
                                                  +				for(var j = 0; j < selected.length; j++){
                                                  +					selectValue[j] = selected[j].text;
                                                  +				}
                                                  +				booleanComboboxs[type] = selectValue.join(',');
                                                  +				saveSelectContent(type,booleanComboboxs[type], shapeId);
                                                  +			});
                                                  +			$("#attribute_name_input_" + objId + "_Tip").css({"float" : "left", "border" : "0"});
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +//获取select类型属性的option
                                                  +var comboboxs = [];
                                                  +function getSelectOptions(category, selectValues, shapeId) {
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_pl_attribute_option",
                                                  +		data : {
                                                  +			category : category
                                                  +		},
                                                  +		success : function(msg) {
                                                  +			if (msg.result == "ok") {
                                                  +				var data = msg.data.data;
                                                  +				for (var i = 0; i < selectValues.length; i++) {
                                                  +					var objId = selectValues[i].objId;
                                                  +					var objValue = selectValues[i].objValue;
                                                  +					var objType = selectValues[i].objType;
                                                  +					var multiple = false;
                                                  +					var closeSelect = true;
                                                  +					if (objType == "select_m") {
                                                  +						multiple = true;
                                                  +						// closeSelect = false;
                                                  +					}
                                                  +					var optionsData = data[objId];
                                                  +					if (optionsData) {
                                                  +						optionsData = optionsData.split(",");
                                                  +
                                                  +						/*var options = {
                                                  +							arrow:true,
                                                  +							width:239,
                                                  +							height:22,
                                                  +							autoHeight:false,
                                                  +							menuMaxHeight:230,
                                                  +							multiple:multiple,
                                                  +							placeholder:"请选择...",
                                                  +							seperator:",",
                                                  +							editable : false,
                                                  +							selectVal:objValue,
                                                  +							objId:objId,
                                                  +							select: function() {
                                                  +								$("#attribute_name_input_" + this.objId).val(comboboxs[this.objId].getValue());
                                                  +								saveInputContent($("#attribute_name_input_" + this.objId));
                                                  +							}
                                                  +						};
                                                  +						options.data = optionsData;
                                                  +						comboboxs[objId] = $("#attribute_name_input_" + objId).combobox(options);
                                                  +						$("#attribute_name_input_" + objId + "_Tip").css({"float" : "left", "border" : "0"});*/
                                                  +
                                                  +						var selectData = [];
                                                  +						var selectedData = [];
                                                  +						if(objValue != null && objValue != ''){
                                                  +							var selectedArr = objValue.split(',');
                                                  +						}
                                                  +						var y = 0;
                                                  +						if (objType == "select") {// 单选默认为空
                                                  +							selectData.push({id: '', text: '请选择'});
                                                  +						}
                                                  +						if (optionsData.length > 0) {
                                                  +							for (var j = 0, len = optionsData.length; j < len; j++) {
                                                  +								var dataObj = {
                                                  +									id : j,
                                                  +									text : optionsData[j]
                                                  +								};
                                                  +								selectData.push(dataObj);
                                                  +								if(objValue != null && objValue != ''){
                                                  +									for(var x = 0; x < selectedArr.length; x++){
                                                  +										if(selectedArr[x] == optionsData[j]){
                                                  +											selectedData[y] = j;
                                                  +											y++;
                                                  +										}
                                                  +									}
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +						$.fn.select2.defaults.set("language", "zh-CN");
                                                  +						var opt1 = {
                                                  +							width : 244,
                                                  +							multiple:multiple,
                                                  +							closeOnSelect:closeSelect,
                                                  +							/*templateResult:formatState,
                                                  +							templateSelection:formatRepoSelection,*/
                                                  +							placeholder:'请选择...'
                                                  +						};
                                                  +						opt1.data = selectData;
                                                  +						$("#attribute_name_input_" + objId).parent().css("padding-left", "0px");
                                                  +						var $obj = $("#attribute_name_input_" + objId).select2(opt1);
                                                  +						if(multiple){//多选
                                                  +							$("#attribute_name_input_" + objId).val(selectedData).trigger("change");
                                                  +						} else {//单选
                                                  +							if(selectedData != null && selectedData != ''){
                                                  +								$("#attribute_name_input_" + objId).val(selectedData[0]).trigger("change");
                                                  +							}
                                                  +						}
                                                  +						// $obj.off("select2:close").on("select2:close", function(e){//只能在关闭多选框时触发事件,close与unselect事件冲突,待完善
                                                  +						// 	// var type = this.id.substring(this.id.lastIndexOf('_')+1);
                                                  +						// 	var type = this.id.substr('attribute_name_input_'.length);
                                                  +						// 	var selectValue = [];
                                                  +						// 	var selected = $('#' + this.id).select2('data');
                                                  +						// 	for(var j = 0; j < selected.length; j++){
                                                  +						// 		selectValue[j] = selected[j].text;
                                                  +						// 	}
                                                  +						// 	comboboxs[type] = selectValue.join(',');
                                                  +						// 	saveSelectContent(type,comboboxs[type], shapeId);
                                                  +						// });
                                                  +						/*
                                                  +						下拉框方案:
                                                  +						1.select+unselect:选中与取消选中结合,每次选中值和取消选中值时都会刷新当前属性,导致多选框下拉框关闭,优势是可以在未展开下拉框的情况下监听点击"x"进行某项内容的取消
                                                  +						2.close+unselect:结合closeOnSelect(false),可以实现在下拉框关闭时才更新属性存储,可以实现在未展开下拉框的情况下监听点击"x"进行某项内容的取消,但是在展开下拉框时进行取消选中,会导致unselect事件被触发导致下拉框关闭
                                                  +						3.close:结合closeOnSelect(false),可以实现在下拉框关闭时才更新属性存储,选中与取消选中某项时都正常,但是在未展开下拉框的情况下进行某项内容的取消操作无效,因为没有unselect事件监听
                                                  +						 */
                                                  +						// 只能使用选中和取消选中事件,并且选中一项后因为内容要刷新会导致下拉框窗口关闭,如果使用下拉框close事件,如果是close+unselect结合,则则不支持在未展开下拉框的情况下取消选中
                                                  +						$obj.off("select2:select").on("select2:select",function(e){
                                                  +							var type = this.id.substr('attribute_name_input_'.length);
                                                  +							var selectValue = [];
                                                  +							var selected = $('#' + this.id).select2('data');
                                                  +							for(var j = 0; j < selected.length; j++){
                                                  +								selectValue[j] = selected[j].text;
                                                  +							}
                                                  +							comboboxs[type] = selectValue.join(',');
                                                  +							saveSelectContent(type,comboboxs[type], shapeId);
                                                  +						});
                                                  +						$obj.off("select2:unselect").on("select2:unselect", function (e) {
                                                  +							var type = this.id.substr('attribute_name_input_'.length);
                                                  +							var selectValue = [];
                                                  +							var selected = $('#' + this.id).select2('data');
                                                  +							for(var j = 0; j < selected.length; j++){
                                                  +								selectValue[j] = selected[j].text;
                                                  +							}
                                                  +							comboboxs[type] = selectValue.join(',');
                                                  +							saveSelectContent(type,comboboxs[type], shapeId);
                                                  +						});
                                                  +						$("#attribute_name_input_" + objId + "_Tip").css({"float" : "left", "border" : "0"});
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +function getScreenResolution() {
                                                  +	if (screen.width == 1024) {
                                                  +
                                                  +	}
                                                  +}
                                                  +/**
                                                  + * 图形创建后事件
                                                  + */
                                                  +/*
                                                  + * Designer.events.addEventListener("created", function(a) { //alert(a.name)
                                                  + * if(a.name != "linker"){ attributeShowTabContent(null); //Model.update(a); }
                                                  + * if (Designer.status == "demo" && !demoCreatedTiped) {
                                                  + * UI.showStartStep("created", $("#" + a.id)); demoCreatedTiped = true } });
                                                  + */
                                                  +
                                                  +// 重新流程手册导出并预览事件
                                                  +UI.doOutputProcess = function() {
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_outputreport_output_process_check",
                                                  +		data : {
                                                  +			fileId : ruuid
                                                  +		},
                                                  +		success : function(r) {
                                                  +			if (r.result == "ok") {
                                                  +				var data = r.data.data;
                                                  +				if (data.length == 0) {
                                                  +					$.simpleAlert('无相关应用', 'error');
                                                  +				} else {
                                                  +					outputReport();
                                                  +				}
                                                  +			} else {
                                                  +				$.simpleAlert('流程不存在', 'error');
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +//导出流程手册
                                                  +function outputReport() {
                                                  +	$.simpleAlert('正在创建流程手册', 'loading');
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_outputreport_output_process_create",
                                                  +		data : {
                                                  +			wsId : $('#wsId').val(),
                                                  +			teamId : $('#teamId').val(),
                                                  +			fileId : ruuid
                                                  +		},
                                                  +		success : function(r) {
                                                  +			if(r.result == "ok") {
                                                  +				$.simpleAlert('正在打开', 'loading');
                                                  +				setTimeout(function(){
                                                  +					$.ajax({
                                                  +						type : "POST",
                                                  +						url : "./jd?sid="
                                                  +							+ CLB.sid
                                                  +							+ "&cmd=com.actionsoft.apps.coe.pal_outputreport_output_process_preview",
                                                  +						data : {
                                                  +							taskId : r.data.taskId
                                                  +						},
                                                  +						success : function(msg) {
                                                  +							if (msg.result == "ok") {
                                                  +								$.simpleAlert("close");
                                                  +								if (msg['data']) {
                                                  +									var url = msg['data']['url'];
                                                  +									window.open(url);
                                                  +								}
                                                  +							} else {
                                                  +								$.simpleAlert("close");
                                                  +								$.simpleAlert(msg['msg'], 'info');
                                                  +							}
                                                  +						}
                                                  +					});
                                                  +				},2000);
                                                  +			} else {
                                                  +				$.simpleAlert('流程手册创建失败', 'error');
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +//根据附件创建节点-打开dialog
                                                  +UI.showImportShapeDlg = function() {
                                                  +	// 判断是否保存
                                                  +	if ($("#saving_tip").text() != "已保存成功" && $("#saving_tip").text() != "保存成功" && $("#saving_tip").text() != "您的文件已经成功保存" && $("#saving_tip").text() != "") {
                                                  +		$.simpleAlert('页面中有未保存的内容,请先保存');
                                                  +		return;
                                                  +	}
                                                  +	$("#shape_import_dlg").dialog({
                                                  +		width: 570,
                                                  +		height: 380,
                                                  +		buttons:[
                                                  +			{text:'确定',cls:"blue",handler:function(){
                                                  +					importShapeFile();
                                                  +				}},
                                                  +			{text:'取消',handler:function(){$("#shape_import_dlg").dialog("close");}}
                                                  +		],
                                                  +		onClose:delShapeFiles
                                                  +	});
                                                  +}
                                                  +
                                                  +var updatedShapeFileList = [];// 已上传的附件列表名称
                                                  +
                                                  +// 保存附件
                                                  +function importShapeFile() {
                                                  +	if(updatedShapeFileList.length == 0) {
                                                  +		$.simpleAlert('没有上传的附件,请点击取消或直接关闭');
                                                  +		return;
                                                  +	}
                                                  +
                                                  +	$.simpleAlert('正在保存', 'loading');
                                                  +	if (methodId == "data.form") {
                                                  +		type = "form";
                                                  +	} else if (methodId == "control.policy") {
                                                  +		type = "regulation";
                                                  +	} else {
                                                  +		$.simpleAlert('获取所需参数失败,请联系系统管理员', 'error');
                                                  +	}
                                                  +
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		url : "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_processlevel_shape_upfile_save",
                                                  +		data : {
                                                  +			sid: sid,
                                                  +			appId: "com.actionsoft.apps.coe.pal",
                                                  +			repositoryName: "tmp",
                                                  +			groupValue:"shapeFile",
                                                  +			ruuid:ruuid,
                                                  +			fileNames:JSON.stringify(updatedShapeFileList),
                                                  +			type:type
                                                  +		},
                                                  +		success : function(r) {
                                                  +			if(r.result == "ok") {
                                                  +				delShapeFiles();//清空界面数据
                                                  +				$.simpleAlert("close");
                                                  +				$.simpleAlert("保存成功", 'ok');
                                                  +				// 刷新页面
                                                  +				location.reload();
                                                  +				// if (parent.document.getElementById("main") != null) {// 流程资产库中刷新tab
                                                  +				// 	$.simpleAlert("保存成功,正在加载...","ok",1000,{callback:function() {
                                                  +				// 			parent.openDesginer(ruuid, 0, r.data.name, "", "");
                                                  +				// 			parent.closeTabById(ruuid);
                                                  +				// 		}});
                                                  +				//
                                                  +				// } else {// 流程团队中
                                                  +				// 	$.simpleAlert("保存成功,正在加载...","ok",1000,{callback:function() {
                                                  +				// 			var obj = {};
                                                  +				// 			obj.id = ruuid;
                                                  +				// 			obj.processDefId = "";
                                                  +				// 			parent.opener.openDesginer(obj);
                                                  +				// 			parent.close();
                                                  +				// 		}});
                                                  +				// }
                                                  +			} else {
                                                  +				$.simpleAlert("close");
                                                  +				console.log(r);
                                                  +				$.simpleAlert('保存失败', 'error');
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +function delShapeFiles() {
                                                  +	$('#shapeFileTbody').empty();
                                                  +	updatedShapeFileList = [];
                                                  +	$.simpleAlert("close")
                                                  +}
                                                  +
                                                  +// 删除附件
                                                  +function delShapeFile(obj) {
                                                  +	var $tr = $(obj).closest('tr');
                                                  +	var name = $tr.find('div[name="shapeFileName"]').text();
                                                  +	var options = {
                                                  +		title: "提示",
                                                  +		content: "删除 [" + name + "] ?",
                                                  +		onConfirm: function() {
                                                  +			$.simpleAlert('正在删除', 'loading');
                                                  +			$.ajax({
                                                  +				type : "POST",
                                                  +				url : "./jd?sid="
                                                  +					+ CLB.sid
                                                  +					+ "&cmd=com.actionsoft.apps.coe.pal_processlevel_shape_upfile_del",
                                                  +				data : {
                                                  +					sid: sid,
                                                  +					appId: "com.actionsoft.apps.coe.pal",
                                                  +					repositoryName: "tmp",
                                                  +					groupValue:"shapeFile",
                                                  +					ruuid:ruuid,
                                                  +					fileName:name
                                                  +				},
                                                  +				success : function(r) {
                                                  +					if(r.result == "ok") {
                                                  +						// 列表中删除
                                                  +						$tr.remove();
                                                  +						// 记录数组删除
                                                  +						var index = updatedShapeFileList.indexOf(name);
                                                  +						if (index > -1) {
                                                  +							updatedShapeFileList.splice(index, 1);
                                                  +						}
                                                  +						$.simpleAlert("close");
                                                  +						$.simpleAlert("删除成功", 'ok');
                                                  +					} else {
                                                  +						$.simpleAlert("close");
                                                  +						$.simpleAlert('删除失败', 'error');
                                                  +					}
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +	};
                                                  +	$.confirm(options);
                                                  +}
                                                  +
                                                  +// 新增上传附件
                                                  +function addShapeFile() {
                                                  +	//初始化上传button
                                                  +	$("#upShapeFile").upfile({
                                                  +		sid: sid,
                                                  +		appId: "com.actionsoft.apps.coe.pal",
                                                  +		groupValue:"shapeFile",
                                                  +		fileValue:ruuid,
                                                  +		filesToFilter: [["Images (*.jpg; *.jpeg; *.gif; *.png; *.bmp)","*.jpg; *.jpeg; *.gif; *.png; *.bmp; *.pdf; *.doc; *.docx; *.xls; *.xlsx; *.ppt; *.pptx; *.txt"]],
                                                  +		repositoryName: "tmp",
                                                  +		numLimit : 0,
                                                  +		sizeLimit : 10 * 1024 * 1024,
                                                  +		complete:function(){
                                                  +			//事件回调函数
                                                  +			$.simpleAlert('close');
                                                  +			$.mask();
                                                  +		},
                                                  +		add: function(e, data) { //附件被添加到上传列表时触发,当返回false时,可阻止上传
                                                  +			if (data.files.length == 0) {
                                                  +				return false;
                                                  +			} else if (data.files[0].size > 10 * 1024 * 1024) {
                                                  +				$.simpleAlert("文件过大");
                                                  +				return false;
                                                  +			}
                                                  +			// 不能添加名称相同的附件
                                                  +			var fileName = data.files[0].name;
                                                  +			if (jQuery.inArray(fileName, updatedShapeFileList) == -1) {
                                                  +				updatedShapeFileList.push(fileName);
                                                  +			} else {
                                                  +				$.simpleAlert("不允许添加重名文件");
                                                  +				return false;
                                                  +			}
                                                  +			return true;
                                                  +		},
                                                  +		done: function(e, data) { //单个附件上传完毕后触发
                                                  +			var output = data;
                                                  +			if (output.textStatus == "warning") {
                                                  +				$.simpleAlert(output.message, output.type, 2000);
                                                  +				return false;
                                                  +			} else if (output.result.data.result == "error") {
                                                  +				$.simpleAlert(data.files[0].name + "上传错误", "error", 2000);
                                                  +				return false;
                                                  +			} else if (output.result.data.result == "ok") {
                                                  +				// 加载到列表
                                                  +				var html = '';
                                                  +				html += '<tr>';
                                                  +				html += '<td>';
                                                  +				html += '<div name="shapeFileName" class="text_overflow" widthpercent="60" style="width: 302.4px;">' + data.files[0].name + '</div>';
                                                  +				html += '</td>';
                                                  +				html += '<td style="text-align: center;">';
                                                  +				html += '<img src="../apps/com.actionsoft.apps.coe.pal/img/icon/pal_delete.png" onclick="delShapeFile(this)" awsui-qtip="删除">';
                                                  +				html += '</td>';
                                                  +				html += '</tr>';
                                                  +				$('#shapeFileTbody').append(html);
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.tree.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.tree.js
                                                  new file mode 100644
                                                  index 00000000..d947ccb4
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.tree.js
                                                  @@ -0,0 +1,68 @@
                                                  +var setting = {
                                                  +	checkbox : false,
                                                  +	event : {
                                                  +			onClick : onClick,
                                                  +			beforeExpand : loadData
                                                  +		}
                                                  +};
                                                  +var checkTree;
                                                  +
                                                  +$(document).ready(function() {
                                                  +	setting.dataModel = {
                                                  +		data : data
                                                  +	};
                                                  +	checkTree = awsui.tree.init($("#tree"), setting);
                                                  +	if (expendIds.length > 0) {
                                                  +		for (var i = 0; i < expendIds.length; i++) {
                                                  +			var dom = checkTree.getNodeDomById(expendIds[i]);
                                                  +			checkTree.expandNode(dom, true);
                                                  +		}
                                                  +	}
                                                  +});
                                                  +
                                                  +function loadData(treeNode) {
                                                  +	var teamId = $("#teamId").val();
                                                  +	if (teamId != null && teamId != "") {
                                                  +	} else {
                                                  +		var dataModel = {
                                                  +			url : "./w?sid=" + jQuery("#sid").val()
                                                  +					+ "&cmd=com.actionsoft.apps.coe.pal_processlevel_treejson&pid=" + treeNode.id
                                                  +					+ "&wsid=" + jQuery("#wsid").val(),
                                                  +			method : "POST",
                                                  +			dataType : "json"
                                                  +		}
                                                  +		checkTree.refreshNode({
                                                  +					id : treeNode.id,
                                                  +					dataModel : dataModel
                                                  +				});
                                                  +	}
                                                  +}
                                                  +function onClick(treeNode) {
                                                  +	if(treeNode.plMethodId != undefined && treeNode.plMethodId != ""){
                                                  +		if (treeNode.plMethodId == "default") {
                                                  +			$.simpleAlert("不允许选择流程规划文件", "info");
                                                  +		} else {
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +function getSelectTreeNode() {
                                                  +	var treeNode = checkTree.getSelectedNode();
                                                  +	if (treeNode.plMethodId == undefined || treeNode.plMethodId == "") {
                                                  +		$.simpleAlert("不允许选择根节点", "info");
                                                  +		return false;
                                                  +	} else {
                                                  +		if (treeNode.plMethodId == "default") {
                                                  +			$.simpleAlert("不允许选择流程规划文件", "info");
                                                  +			return false;
                                                  +		} else {
                                                  +			return treeNode;
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +function toggleRoot() {
                                                  +	$.each(checkTree.getRootNode(), function(i, node) {
                                                  +				checkTree.toggleCheck(node);
                                                  +			});
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.tree.search.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.tree.search.js
                                                  new file mode 100644
                                                  index 00000000..87ab0bb8
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.tree.search.js
                                                  @@ -0,0 +1,68 @@
                                                  +/**
                                                  + * @author wangyh 自定义文件链接文件的搜索功能
                                                  + */
                                                  +$(document).ready(function() {
                                                  +			awsui.parse();
                                                  +			$("#buttonedit").buttonedit({
                                                  +						iconCls : "forms-icon search",
                                                  +						onClick : function() {
                                                  +							$.simpleAlert("searching.....", "loading");
                                                  +							// 单击事件
                                                  +							searchByName();
                                                  +
                                                  +						}
                                                  +					});
                                                  +			// 回车事件
                                                  +			$('#buttonedit').keydown(function(e) {
                                                  +						if (e.keyCode == 13) {
                                                  +							$.simpleAlert("searching.....", "loading");
                                                  +							searchByName();
                                                  +						}
                                                  +					});
                                                  +		});
                                                  +
                                                  +/**
                                                  + * 功能:去除字符串中所有空格 传参:需要处理的字符串 返回值:去除空格后的字符串
                                                  + */
                                                  +function trimSpaces(Str) {
                                                  +	var ResultStr = "";
                                                  +	Temp = Str.split(/\s/);
                                                  +	for (i = 0; i < Temp.length; i++) {
                                                  +		ResultStr += Temp[i];
                                                  +	}
                                                  +	return ResultStr;
                                                  +}
                                                  +
                                                  +// 搜索事件
                                                  +function searchByName() {
                                                  +	var seachName = $("#buttonedit").val();
                                                  +	var wsid = $("#wsid").val();
                                                  +	var sid = $("#sid").val();
                                                  +	var params = {
                                                  +		seachName : seachName,
                                                  +		wsid : wsid
                                                  +	};
                                                  +	jQuery.ajax({
                                                  +				type : "POST",
                                                  +				url : "./jd?sid="
                                                  +						+ encodeURIComponent(sid)
                                                  +						+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_link_tree_search",
                                                  +				data : params,
                                                  +				success : function(resObj) {
                                                  +					if (resObj.result == "ok") {
                                                  +						var jsonArr = resObj.data.jsonArr;
                                                  +						searchSuccess(jsonArr);
                                                  +					}
                                                  +				}
                                                  +			});
                                                  +}
                                                  +/**
                                                  + * 搜索成功后节点展开
                                                  + */
                                                  +function searchSuccess(jsonArr) {
                                                  +	for (var i = 0; i < jsonArr.length; i++) {
                                                  +		var node = checkTree.getNodeDomById(jsonArr[i].id);
                                                  +		checkTree.expandNodes(node, true, true);
                                                  +	}
                                                  +
                                                  +}
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.view.portal.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.view.portal.js
                                                  new file mode 100644
                                                  index 00000000..44bb5453
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.view.portal.js
                                                  @@ -0,0 +1,1903 @@
                                                  +/**
                                                  + * @author wangyh 与插入链接,属性,关系相关的js内容
                                                  + */
                                                  +var selectedShapes = [];
                                                  +var linkType; // 链接类型:custom:自定义链接;file:文件链接
                                                  +$(document).ready(function() {
                                                  +	showPainting();
                                                  +
                                                  +	setTimeout(function() {
                                                  +				Designer.hotkey.init();// 解决快捷健绑定不成功
                                                  +				DesignerCopyPaste.changeTitleListen();
                                                  +				if (selectedElementId && selectedElementId != "") {
                                                  +					Utils.selectShape(selectedElementId);
                                                  +				}// 复制粘贴形状内容同步的监听
                                                  +			}, 1000);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 兼容1024*768画布显示
                                                  + * 
                                                  + * @param {}
                                                  + *            
                                                  + */
                                                  +
                                                  +function showPainting() {
                                                  +	var width = screen.width;
                                                  +	if (width == 1024) {
                                                  +		$("#toolbar_wfversion_info").addClass("showPainting");
                                                  +		if (parent.getWidthToolbar() > 750) {
                                                  +			$(".toolbar").removeClass("heightCssToolbar")
                                                  +					.addClass("toolbarExtend");
                                                  +			$("#bar_back").removeClass("cssToolbar");
                                                  +
                                                  +		} else {
                                                  +			$(".toolbar").addClass("heightCssToolbar")
                                                  +					.removeClass("toolbarExtend");
                                                  +			$("#bar_back").addClass("cssToolbar");
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +/**
                                                  + * 重写单击图形时的触发的事件
                                                  + * 
                                                  + * @param {}
                                                  + *            
                                                  + * @returns {}
                                                  + */
                                                  +Designer.op.shapeSelectable = function(a) {
                                                  +	var b = $("#designer_canvas");
                                                  +	b.bind("mousedown.select", function(d) {
                                                  +				Designer.op.changeState("seelcting_shapes");
                                                  +				var e = a.id;
                                                  +				var c = [];
                                                  +				if (d.ctrlKey) {
                                                  +					var c = Utils.getSelectedIds();
                                                  +					if (Utils.isSelected(e)) {
                                                  +						Utils.removeFromArray(c, e);
                                                  +					} else {
                                                  +						c.push(e);
                                                  +					}
                                                  +				    
                                                  +					Utils.unselect();
                                                  +					if (c.length > 0) {
                                                  +						Utils.selectShape(c);
                                                  +					}
                                                  +				} else {
                                                  +					if (Utils.selectIds.indexOf(e) < 0) {
                                                  +					    
                                                  +						Utils.unselect();
                                                  +						Utils.selectShape(e);
                                                  +					}
                                                  +				}
                                                  +				$(document).bind("mouseup.select", function() {
                                                  +							Designer.op.resetState();
                                                  +							b.unbind("mousedown.select");
                                                  +							$(document).unbind("mouseup.select");
                                                  +						});
                                                  +				// selectedShapes
                                                  +				DesignerCopyPaste.selectedShapeId = Utils.getSelected()[0].id;
                                                  +				if ($("div.dock_view_attribute").is(":visible")) {
                                                  +					showShapeRelationTab(null);
                                                  +					attributeShowTabContent(null);
                                                  +					shapeCopyAndPasteCount(null);
                                                  +					showRelevanceShapesContent();
                                                  +				}
                                                  +			});
                                                  +};
                                                  +var myshapeLink = "";
                                                  +var linkIndex = 0;
                                                  +var selectShape = Utils.getSelected()[0];
                                                  +/**
                                                  + * 功能:去除字符串中所有空格 传参:需要处理的字符串 返回值:去除空格后的字符串
                                                  + */
                                                  +function trimSpaces(Str) {
                                                  +	var ResultStr = "";
                                                  +	Temp = Str.split(/\s/);
                                                  +	for (i = 0; i < Temp.length; i++) {
                                                  +		ResultStr += Temp[i];
                                                  +	}
                                                  +	return ResultStr;
                                                  +}
                                                  +
                                                  +//风险控制
                                                  +UI.showRiskDlg = function(){
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	var number;
                                                  +	if (shape.dataAttributes != undefined) {
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			if (shape.dataAttributes[i].privateAttributeContent != null) {
                                                  +				var privateAttributeContent = shape.dataAttributes[i].privateAttributeContent;
                                                  +				if (typeof(privateAttributeContent) == "string") {
                                                  +					privateAttributeContent = eval("(" + privateAttributeContent + ")");
                                                  +				}
                                                  +				number = privateAttributeContent.number;
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	if (number == undefined || number == "") {
                                                  +		$.simpleAlert("请先维护该节点编号");
                                                  +		return;
                                                  +	}
                                                  +	var riskDlg = FrmDialog.open({
                                                  +	    width:800,
                                                  +	    height:700,
                                                  +	    url:"./w?sid=" + $("#sid").val() + "&cmd=com.actionsoft.apps.coe.pal.risk_pal_designer_risk",
                                                  +	    data:{"plId":ruuid, "taskId": shape.id, "taskNum": number}
                                                  +	});
                                                  +}
                                                  +
                                                  +//流程节点的风险控制不为空,重新渲染shape
                                                  +function renderShapeRisks(risk, control) {
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	if (shape.dataAttributes != undefined) {
                                                  +		var riskFlag = false;
                                                  +		var controlFlag = false;
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			if (shape.dataAttributes[i].risk != undefined) {
                                                  +				shape.dataAttributes[i].risk = risk;
                                                  +				riskFlag = true;
                                                  +			}
                                                  +			if (shape.dataAttributes[i].control != undefined) {
                                                  +				shape.dataAttributes[i].control = control;
                                                  +				controlFlag = true;
                                                  +			}
                                                  +		}
                                                  +		if (!riskFlag) {
                                                  +			var index = shape.dataAttributes.length -1;
                                                  +			shape.dataAttributes[index].risk = risk;
                                                  +		}
                                                  +		if (!controlFlag) {
                                                  +			var index = shape.dataAttributes.length -1;
                                                  +			shape.dataAttributes[index].control = control;
                                                  +		}
                                                  +	}
                                                  +	Designer.painter.renderShape(shape);
                                                  +}
                                                  +
                                                  +// 判断给定的对象是不是数组
                                                  +function isArray(o) {
                                                  +	return Object.prototype.toString.call(o) === '[object Array]';
                                                  +}
                                                  +
                                                  +
                                                  +// 出现复制图形的统计
                                                  +
                                                  +function shapeCopyAndPasteCount(shape) {
                                                  +	if (!$("#tagContent2").is(":visible")) {
                                                  +		return;
                                                  +	}
                                                  +	if (shape == null)
                                                  +		shape = Utils.getSelected()[0];
                                                  +	$("#tagContentTableTitleContent2").empty();
                                                  +	var shapeGroupId = "";
                                                  +	var isCopy = "";
                                                  +	var shapeId = shape.id;
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.shapeGroupId) {
                                                  +			shapeGroupId = attr.shapeGroupId;
                                                  +			isCopy = attr.isCopy;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	var data = "shapeGroupId=" + shapeGroupId + "&shapeId=" + shapeId
                                                  +			+ "&isCopy=" + isCopy;
                                                  +}
                                                  +
                                                  +function showRelevanceShapesContent() {
                                                  +	if (!$("#tagContent3").is(":visible")) {
                                                  +		return;
                                                  +	}
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		url : "./jd?sid="
                                                  +				+ CLB.sid
                                                  +				+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_show",
                                                  +		data : {
                                                  +			shapeId : Utils.getSelected()[0].id,
                                                  +			fileId: ruuid
                                                  +		},
                                                  +		success : function(msg) {
                                                  +			$("#tagContentTableTitleContent3").empty();
                                                  +			if (msg.data.result == "ok") {
                                                  +				var shapesObj = msg.data.list;
                                                  +				var mouseover = "onmouseout=\"hideRemoveTrAttribute(this);\"";
                                                  +				var mouseout = "onmouseover=\"showRemoveTrAttribute(this);\"";
                                                  +				if (role == "viewer") {
                                                  +					mouseover = "";
                                                  +					mouseout = "";
                                                  +				}
                                                  +				for (var i = 0; i < shapesObj.length; i++) {
                                                  +					var style = "";
                                                  +					var onclick = "";
                                                  +					if (editable || filePerms == "-" || filePerms.indexOf(shapesObj[i].fileVersionId) > -1) {
                                                  +						style = "cursor:pointer;color:blue;";
                                                  +						if (parent.openDesginerFromAttr) {
                                                  +							onclick = 'parent.openDesginerFromAttr(\''
                                                  +									+ shapesObj[i].fileId
                                                  +									+ '\',0,\''
                                                  +									+ shapesObj[i].fileName
                                                  +									+ '\',\'\',\'\',false,\''
                                                  +									+ shapesObj[i].shapeId
                                                  +									+ '\')';
                                                  +						} else if (window.opener.openDesginer) {
                                                  +							var obj = {
                                                  +								id: shapesObj[i].fileId,
                                                  +								processDefId: ''
                                                  +							}
                                                  +							onclick = 'window.opener.openDesginer({id:\'' + shapesObj[i].fileId + '\', processDefId:\'\'})';
                                                  +						}
                                                  +						
                                                  +					}
                                                  +					var content = '<tr ' + mouseout + mouseover + ' objid="'
                                                  +							+ shapesObj[i].id
                                                  +							+ '" class="tagContentTableTr"><td style="' + style + '" onclick="' + onclick + '">'
                                                  +							+ '<div style="line-height:22px;height:22px;overflow:hidden;" class="attribute_td_div_css">'
                                                  +							+ shapesObj[i].fileName
                                                  +							+ '(V ' + shapesObj[i].fileVersion + '.0)'
                                                  +							+ '</div>'
                                                  +							+ '</td><td><div style="line-height:22px;height:22px;overflow:hidden;" class="attribute_td_div_css">'
                                                  +							+ shapesObj[i].shapeText
                                                  +							+ '</div></td></tr>';
                                                  +					
                                                  +					$("#tagContentTableTitleContent3").append(content);
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +
                                                  +}
                                                  +
                                                  +function getPrivateAttributeHtml(attributesJsonArray, tbodyId, shape) {
                                                  +	// 属性排序
                                                  +	var defaultMoreAttr = $('#defaultMoreAttrSort').val();
                                                  +	if(defaultMoreAttr.length > 0) {
                                                  +		var arr = defaultMoreAttr.split('|');
                                                  +		var tempAttrArray = [];
                                                  +		for(var i = 0; i < arr.length; i++) {
                                                  +			for(var j = 0; j < attributesJsonArray.length; j++) {
                                                  +				if(attributesJsonArray[j] == undefined || attributesJsonArray[j] == null) {
                                                  +					continue;
                                                  +				}
                                                  +				if(arr[i] == attributesJsonArray[j].id) {
                                                  +					tempAttrArray.push(attributesJsonArray[j]);
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		//取新添加的属性
                                                  +        if (tempAttrArray.length > 0) {
                                                  +            var newAttrArray = [];
                                                  +               newAttrArray = tempAttrArray.concat(attributesJsonArray).filter(function(v, i, arr) {
                                                  +                                          return arr.indexOf(v) === arr.lastIndexOf(v);
                                                  +                                      });;
                                                  +               attributesJsonArray = tempAttrArray.concat(newAttrArray);
                                                  +        }
                                                  +	}
                                                  +	var flag = false;
                                                  +	var objIds = [];
                                                  +	var selectFlag = false;
                                                  +	var selectValues = [];
                                                  +	var mouseover = "onmouseout=\"hideRemoveTrAttribute(this);\"";
                                                  +	var mouseout = "onmouseover=\"showRemoveTrAttribute(this);\"";
                                                  +	if (role == "viewer") {
                                                  +		mouseover = "";
                                                  +		mouseout = "";
                                                  +	}
                                                  +	var userAddress = false;
                                                  +	var deptAddress = false;
                                                  +	var userObjIds = new Array();
                                                  +	var deptObjIds = new Array();
                                                  +	var deptIds = "";
                                                  +	for (var index = 0; index < attributesJsonArray.length; index++) {
                                                  +		var obj = attributesJsonArray[index];
                                                  +		if (obj != null && obj != undefined && obj.value != undefined) {
                                                  +			var constr = '<tr>';
                                                  +			constr += '<td style="padding-left:20px;" class="tableContent">' + obj.name + '</td>';
                                                  +			constr += '<td colspan="2" class="tableContent">' + obj.value + '</td>';
                                                  +			constr += '</tr>';
                                                  +			if ((!obj.readonly && obj.type == "string")
                                                  +					|| (!obj.readonly && obj.type == "list")) {
                                                  +				// 目前支持到文本的输入 ,需求定下了再改
                                                  +				constr = '<tr>';
                                                  +				constr += '<td style="padding-left:20px;" class="tableContent">' + obj.name + '</td>';
                                                  +				constr += '<td id="' + shape.id + obj.id + '" colspan="2" class="tableContent">' + obj.value + '</td>';
                                                  +				constr += '</tr>';
                                                  +			}  else if(!obj.readonly && obj.type == "link") {
                                                  +				constr = '<tr>';
                                                  +				constr += '<td style="padding-left:20px;" class="tableContent">' + obj.name + '</td>';
                                                  +				// constr += '<td id="' + shape.id + obj.id + '" colspan="2" class="tableContent">' + obj.value + '</td>';
                                                  +				constr += '<td id="' + shape.id + obj.id + '" colspan="2" class="tableContent">' + '<a href="' + obj.value + '" target="_blank">' + obj.value + '</a>' + '</td>';
                                                  +				constr += '</tr>';
                                                  +			} else if (!obj.readonly && obj.type == "number") {
                                                  +				constr = '<tr>';
                                                  +				constr += '<td style="padding-left:20px;" class="tableContent">' + obj.name + '</td>';
                                                  +				constr += '<td id="' + shape.id + obj.id + '" colspan="2" class="tableContent">' + obj.value + '</td>';
                                                  +				constr += '</tr>';
                                                  +			} else if (!obj.readonly && obj.type == "boolean") {
                                                  +				constr = '<tr>';
                                                  +				constr += '<td style="padding-left:20px;" class="tableContent">' + obj.name + '</td>';
                                                  +				constr += '<td id="' + shape.id + obj.id + '" colspan="2" class="tableContent"></td>';
                                                  +				constr += '</tr>';
                                                  +			} else if (!obj.readonly && obj.type == "textarea") {
                                                  +				constr = '<tr>';
                                                  +				constr += '<td style="padding-left:20px;" class="tableContent">' + obj.name + '</td>';
                                                  +				if (obj.value == undefined) {
                                                  +					obj.value = '';
                                                  +				}
                                                  +				constr += '<td id="' + shape.id + obj.id + '" colspan="2" class="tableContent">' + obj.value.replace(/\n/g,'<br>') + '</td>';
                                                  +				constr += '</tr>';
                                                  +			} else if (obj.readonly && obj.type == "relation") {
                                                  +				var relationValue = "";
                                                  +				if(relationShapesData[shape.id] !==null && relationShapesData[shape.id][obj.id] != null) {
                                                  +					relationValue = relationShapesData[shape.id][obj.id];
                                                  +				}
                                                  +				constr = '<tr>';
                                                  +				constr += '<td style="padding-left:20px;" class="tableContent">' + obj.name + '</td>';
                                                  +				constr += '<td id="' + shape.id + obj.id + '" colspan="2" class="tableContent">' + relationValue + '</td>';
                                                  +				constr += '</tr>';
                                                  +			} else if (obj.type == "select" || obj.type == "select_m") {
                                                  +				constr = '<tr>';
                                                  +				constr += '<td style="padding-left:20px;" class="tableContent">' + obj.name + '</td>';
                                                  +				constr += '<td id="' + shape.id + obj.id + '" colspan="2" class="tableContent">' + obj.value + '</td>';
                                                  +				constr += '</tr>';
                                                  +				
                                                  +				selectFlag = true;
                                                  +				var selectValue = {	"objId" : obj.id,
                                                  +									"objValue" : obj.value,
                                                  +									"objType": obj.type};
                                                  +				selectValues.push(selectValue);
                                                  +			}else if (obj.readonly && obj.type == "userAddress") {
                                                  +				userAddress = true;
                                                  +				userObjIds.push(obj.id);
                                                  +				var relationValue = "";
                                                  +				if(relationShapesData[shape.id] !==null && relationShapesData[shape.id][obj.id] != null) {
                                                  +					relationValue = relationShapesData[shape.id][obj.id];
                                                  +				}
                                                  +				constr = '<tr>';
                                                  +				constr += '<td style="padding-left:20px;" class="tableContent">' + obj.name + '</td>';
                                                  +				constr += '<td id="' + shape.id + obj.id + '" colspan="2" class="tableContent">' + relationValue + '</td>';
                                                  +				constr += '</tr>';
                                                  +			} else if (obj.readonly && obj.type == "deptAddress") {
                                                  +				deptAddress = true;
                                                  +				deptObjIds.push(obj.id);
                                                  +				deptIds += "," + obj.value;
                                                  +				var relationValue = "";
                                                  +				if(relationShapesData[shape.id] !==null && relationShapesData[shape.id][obj.id] != null) {
                                                  +					relationValue = relationShapesData[shape.id][obj.id];
                                                  +				}
                                                  +				constr = '<tr>';
                                                  +				constr += '<td style="padding-left:20px;" class="tableContent">' + obj.name + '</td>';
                                                  +				constr += '<td id="' + shape.id + obj.id + '" colspan="2" class="tableContent">' + relationValue + '</td>';
                                                  +				constr += '</tr>';
                                                  +			} else if (obj.readonly && obj.type == "awsorg") {
                                                  +				var relationValue = "";
                                                  +				if(relationShapesData[shape.id] !==null && relationShapesData[shape.id][obj.id] != null) {
                                                  +					relationValue = relationShapesData[shape.id][obj.id];
                                                  +				}
                                                  +				constr = '<tr>';
                                                  +				constr += '<td style="padding-left:20px;" class="tableContent">' + obj.name + '</td>';
                                                  +				constr += '<td id="' + shape.id + obj.id + '" colspan="2" class="tableContent">' + relationValue + '</td>';
                                                  +				constr += '</tr>';
                                                  +			} else if (obj.readonly && obj.type == "hidden") {
                                                  +				constr = '<tr ' + mouseout + mouseover + ' objid="' + obj.id + '" class="tagContentTableTr" style="display:none;">' 
                                                  +				+ '	<td>' + obj.name + '</td>' 
                                                  +				+ '	<td class="tagContentTableTrTd">' 
                                                  +				+ '		<input  objid="' + obj.id + '" class="attribute_input_css" name="attribute_name_input_' + obj.id + '" value="'+obj.value +'" scope="' + obj.groupPath + '" readonly="'+obj.readonly+'"  />' 
                                                  +				//+ '<div objid="' + obj.id + '" onclick="removeTrAttribute(this)" id= "ico_attribute_delete_"' + obj.id + ' class="ico_attribute_delete"></div>' 
                                                  +				+ '</td></tr>';
                                                  +			} else if (obj.type == "table") {
                                                  +				constr = '<tr>';
                                                  +				constr += '<td style="padding-left:20px;" class="tableContent">' + obj.name + '</td>';
                                                  +				constr += '<td id="' + shape.id + obj.id + '" colspan="2" class="tableContent">' + '<span id="'+ obj.id +' " onclick="openTableDialog(' + JSON.stringify(obj.value).replace(/\"/g,"'") +')"> ' + obj.value.name + '</span>' + '</td>';
                                                  +				constr += '</tr>';
                                                  +			}
                                                  +			$('#' + tbodyId + ' table[name=' + shape.id + ']').append(constr);
                                                  +		}
                                                  +	}
                                                  +	if (selectFlag) {
                                                  +		getSelectOptions(shape.category, selectValues);	//处理select类型
                                                  +	}
                                                  +}
                                                  +
                                                  +// table表格
                                                  +function openTableDialog(obj) {
                                                  +	let tableName = obj.name
                                                  +	let dialogTable = obj.table
                                                  +	$("#attribute-table-content").empty()
                                                  +	let thead =
                                                  +		'<tr id="' + dialogTable[0].id + '" >'
                                                  +		+   '<td style="width: 30%;" class="dialogTableHead">' + dialogTable[0].name + '</td>'
                                                  +		+   '<td style="width: 70%;" class="dialogTableHead">' + dialogTable[0].desc + '</td>'
                                                  +		+'</tr>'
                                                  +	$('#attribute-table-content').append(thead)
                                                  +	for ( let i = 1; i < dialogTable.length; i++) {
                                                  +		let str =
                                                  +			'<tr id="' + dialogTable[i].id + '">'
                                                  +			+   '<td style="width: 30%;">' + dialogTable[i].name + '</td>'
                                                  +			+   '<td style="width: 70%;">' + dialogTable[i].desc + '</td>'
                                                  +			+'</tr>'
                                                  +		$('#attribute-table-content').append(str)
                                                  +	}
                                                  +
                                                  +	$("#attribute-table-window").dialog({
                                                  +		title: tableName,
                                                  +		draggable: true,
                                                  +		buttons : [{
                                                  +			text : '确定',
                                                  +			cls : "blue",
                                                  +			handler : function() {
                                                  +				$("#attribute-table-window").dialog('close');
                                                  +			}
                                                  +		}, {
                                                  +			text : '取消',
                                                  +			handler : function() {
                                                  +				$("#attribute-table-window").dialog('close');
                                                  +			}
                                                  +		}]
                                                  +	})
                                                  +}
                                                  +
                                                  +Array.prototype.unique = function(){
                                                  +	var res = [];
                                                  +	var json = {};
                                                  +	for(var i = 0; i < this.length; i++){
                                                  +		if(!json[this[i]]){
                                                  +			res.push(this[i]);
                                                  +			json[this[i]] = 1;
                                                  +		}
                                                  +	}
                                                  +	return res;
                                                  +}  
                                                  +
                                                  + 
                                                  +// 得到不同属性值关联的形状
                                                  +function getAttributeByAttrId(shape, objId, relationShapes) {
                                                  +	//objId 属性的key值
                                                  +	var exitAttributesJsonArray = [];
                                                  +	var attrArr = [];	//修改后的属性值
                                                  +
                                                  +	for (var i = 0; i < relationShapes.length; i++) {
                                                  +		var shapeObjT = relationShapes[i];
                                                  +		attrArr.push(shapeObjT.relationShapeId);
                                                  +	}
                                                  +	attrArr = attrArr.unique();	//属性值去重
                                                  +	if (attrArr.length > 0) {
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var attr = shape.dataAttributes[i];
                                                  +			if (attr.attributesJsonArray) {
                                                  +				exitAttributesJsonArray = attr.attributesJsonArray;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		for (var c = 0; c < exitAttributesJsonArray.length; c++) {
                                                  +			var el = exitAttributesJsonArray[c];
                                                  +			if(el == null) continue;
                                                  +			if (el.id == objId) {
                                                  +				el.value = attrArr.join(",");
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var attr = shape.dataAttributes[i];
                                                  +			if (attr.attributesJsonArray) {
                                                  +				attr.attributesJsonArray = exitAttributesJsonArray;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		for (var j = 0, len = attrArr.length; j < len; j++) {
                                                  +			var attrShapeId = attrArr[j];
                                                  +			relationShapesObject[attrShapeId] = {"relationShapeId" : attrShapeId};
                                                  +		}
                                                  +		$("input[objid_shapeId='" + objId + "']").val(attrArr.join(","));
                                                  +	} else {
                                                  +		$("input[objid_shapeId='" + objId + "']").val("");
                                                  +	}
                                                  +
                                                  +	return shape;
                                                  +}
                                                  +Array.prototype.notDistinct = function() {
                                                  +	var newArr = [], obj = {};
                                                  +	for (var i = 0, len = this.length; i < len; i++) {
                                                  +		if (!obj[this[i]]) {
                                                  +			newArr.push(this[i]);
                                                  +			obj[this[i]] = 'new';
                                                  +		}
                                                  +	}
                                                  +	return newArr;
                                                  +}
                                                  +
                                                  +// 删除掉关联形状
                                                  +function removeTrRelevanceShapes(obj) {
                                                  +	var options = {
                                                  +		title : "提示",
                                                  +		content : "确定删除吗?",
                                                  +		model : false,
                                                  +		onConfirm : function() {
                                                  +			// 确定删除
                                                  +			var shape = Utils.getSelected()[0];
                                                  +			var tempArray = new Array();
                                                  +			var count = 0;
                                                  +			if (shape) {
                                                  +				var relevanceShapes = [];
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.relevanceShapes) {
                                                  +						relevanceShapes = attr.relevanceShapes;
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +				for (var index = 0; index < relevanceShapes.length; index++) {
                                                  +					var tempObj = relevanceShapes[index];
                                                  +					if (tempObj.id == $(obj).attr("objid")) {
                                                  +						continue;
                                                  +					}
                                                  +					tempArray[count++] = tempObj;
                                                  +				}
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.relevanceShapes) {
                                                  +						attr.relevanceShapes = tempArray;
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +				Model.update(shape);
                                                  +			}
                                                  +			$(obj).hide();
                                                  +			$(obj).parent().parent().remove();
                                                  +			$.ajax({
                                                  +				type : "POST",
                                                  +				url : "./jd?sid="
                                                  +						+ CLB.sid
                                                  +						+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_remove",
                                                  +				data : {
                                                  +					uuid : $(obj).attr("objid"),
                                                  +				},
                                                  +				success : function(msg) {
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +	};
                                                  +	window.top.$.confirm(options);
                                                  +}
                                                  +
                                                  +// 过虑 掉重复的图形
                                                  +function filterRepeatShapes(arr1, shape) {
                                                  +	var arr2 = [];
                                                  +	var arr = [];
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.relevanceShapes) {
                                                  +			arr2 = attr.relevanceShapes;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	var flag = false;
                                                  +	for (var a = 0; a < arr1.length; a++) {
                                                  +		var arrEle1 = arr1[a];
                                                  +		for (var b = 0; b < arr2.length; b++) {
                                                  +			var arrEle2 = arr2[b];
                                                  +			if (arrEle1.id == arrEle2.id) {
                                                  +				flag = true;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		if (flag) {
                                                  +			flag = false;
                                                  +			continue;
                                                  +		}
                                                  +		arr2.push(arrEle1);
                                                  +	}
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.relevanceShapes) {
                                                  +			attr.relevanceShapes = arr2;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +
                                                  +	return shape;
                                                  +}
                                                  +
                                                  +function updateModelElementsAttribute(selectedShape, nodes) {
                                                  +	var shapes = Model.define.elements;
                                                  +	for (var shapeId in shapes) {
                                                  +		var obj = nodes;
                                                  +		var shape = shapes[shapeId];
                                                  +		if(shape.name != "linker" && shape.id != selectedShape.id && shape.name == selectedShape.name){
                                                  +			var exitAttributesJsonArray = [];
                                                  +			var attrIndex = 0;
                                                  +			for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +				var attr = shape.dataAttributes[i];
                                                  +				if (attr.attributesJsonArray) {
                                                  +					exitAttributesJsonArray = attr.attributesJsonArray;
                                                  +					attrIndex = i;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +			var arrJsontemp = [];
                                                  +			for (var t = 0; t < exitAttributesJsonArray.length; t++) {
                                                  +				if(exitAttributesJsonArray[t] == null) {
                                                  +					continue;
                                                  +				}
                                                  +				arrJsontemp.push(exitAttributesJsonArray[t]);
                                                  +			}
                                                  +			obj = filterRepeatAttribute(obj, exitAttributesJsonArray, shape.dataAttributes[attrIndex].attributesJsonArray);
                                                  +			for (var a = 0; a < obj.length; a++) {
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.attributesJsonArray) {
                                                  +						attr.attributesJsonArray.push(obj[a]);
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +			if (arrJsontemp.length != 0) {
                                                  +				var tempArr = removeShepeAttributeAndReturnDifferent(arrJsontemp, filterNotCheckedAttribute(nodes, arrJsontemp));
                                                  +				var tempArray = new Array();
                                                  +				for (var e = 0; e < tempArr.length; e++) {
                                                  +					if (tempArr[e] != 0 && tempArr[e] != "0") {
                                                  +						removeNotCheckedAttribute(shape, tempArr[e]);
                                                  +					}
                                                  +				}
                                                  +				if (tempArray.length != 0) {
                                                  +					shape.attributesJsonArray = tempArray;
                                                  +					for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +						var attr = shape.dataAttributes[i];
                                                  +						if (attr.attributesJsonArray) {
                                                  +							attr.attributesJsonArray = tempArray;
                                                  +							break;
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +			Model.update(shape);
                                                  +			//修改属性时,后台查询是否有关联属性,如果删除的属性有关联属性,需要删除关联表中的数据
                                                  +			var attrIds = ",";
                                                  +			if (nodes != undefined) {
                                                  +				for (var i = 0; i < nodes.length; i++) {
                                                  +					if (nodes[i].type) {
                                                  +						attrIds += nodes[i].id + ",";
                                                  +					}
                                                  +				}
                                                  +				awsui.ajax.request({
                                                  +				    url : "./jd",
                                                  +				    method : "POST",
                                                  +				    data : {
                                                  +				    		sid:sid,
                                                  +				    		cmd:"com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_check",
                                                  +				    		fileId: ruuid,
                                                  +				    		shapeId: shape.id,
                                                  +				    		attrIds: attrIds
                                                  +				    	},
                                                  +				    ok : function(r) {
                                                  +				    },
                                                  +				    err:function(r){
                                                  +				    }
                                                  +				});
                                                  +			}
                                                  + 		}
                                                  +	}
                                                  +}
                                                  +
                                                  +// 过虑出当在节点上不选中时的属性
                                                  +
                                                  +function filterNotCheckedAttribute(checkedObj, exitObj) {
                                                  +	var result1 = [];
                                                  +	if (checkedObj.length == 0) {
                                                  +		return [];
                                                  +	} else {
                                                  +		var flag = false;
                                                  +		for (var b = 0; b < checkedObj.length; b++) {
                                                  +			var checkedArr1 = checkedObj[b];
                                                  +			for (var a = 0; a < exitObj.length; a++) {
                                                  +				var exitArr1 = exitObj[a];
                                                  +				if (exitArr1.id == checkedArr1.id) {
                                                  +					result1.push(checkedArr1);
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		return result1;
                                                  +	}
                                                  +}
                                                  +
                                                  +// 移除图形属性中部分已存在的元素并返回不同元素
                                                  +
                                                  +function removeShepeAttributeAndReturnDifferent(exitObj, newObj1) {
                                                  +	var result1 = [];
                                                  +	for (var a = 0; a < newObj1.length; a++) {
                                                  +		var obj1 = newObj1[a];
                                                  +		for (var i = 0, n = 0; i < exitObj.length; i++) {
                                                  +			if (exitObj[i].id == obj1.id) {
                                                  +				result1.push(i);
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	for (var i = 0; i < result1.length; i++) {
                                                  +		exitObj[result1[i]] = 0;
                                                  +	}
                                                  +	return exitObj;
                                                  +}
                                                  +// 删除没有选中的元素
                                                  +
                                                  +function removeNotCheckedAttribute(shape, obj1) {
                                                  +	var tempArray = new Array();
                                                  +	var attributesJsonArray1 = [];
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.attributesJsonArray) {
                                                  +			attributesJsonArray1 = attr.attributesJsonArray;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	for (var index = 0; index < attributesJsonArray1.length; index++) {
                                                  +		if(attributesJsonArray1[index] == null) {
                                                  +			continue;
                                                  +		}
                                                  +		var tempObj1 = attributesJsonArray1[index];
                                                  +		if (tempObj1.id == obj1.id) {
                                                  +			continue;
                                                  +		}
                                                  +		tempArray.push(tempObj1);
                                                  +	}
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if (attr.attributesJsonArray) {
                                                  +			attr.attributesJsonArray = tempArray;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	// shape.attributesJsonArray = tempArray;
                                                  +	// Model.update(shape);
                                                  +	$("#" + shape.id + " name=[tagContentTable0] tr[objid='" + obj1.id + "']").remove();
                                                  +}
                                                  +// 过滤掉重复的属性生成新的数组
                                                  +
                                                  +function filterRepeatAttribute(arr1, arr2, shape) {
                                                  +	var result = [];
                                                  +	var flag = false;
                                                  +	for (var a = 0; a < arr1.length; a++) {
                                                  +		var arrEle1 = arr1[a];
                                                  +		for (var b = 0; b < arr2.length; b++) {
                                                  +			var arrEle2 = arr2[b];
                                                  +			if(arrEle2 == null) {
                                                  +				continue;
                                                  +			}
                                                  +			if (arrEle1.id == arrEle2.id) {
                                                  +				shape[b].name = arrEle1.name;
                                                  +				flag = true;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		if (flag) {
                                                  +			flag = false;
                                                  +			continue;
                                                  +		}
                                                  +		result.push(arrEle1);
                                                  +	}
                                                  +
                                                  +	return result;
                                                  +}
                                                  +
                                                  +// 当属性为可编辑时,编辑时自动保存
                                                  +
                                                  +function showEditButton(obj) {
                                                  +	$(obj).siblings("span::contains('...')").show();
                                                  +}
                                                  +
                                                  +function saveInputContent(obj) {
                                                  +	// 按钮
                                                  +	// $(obj).siblings("span::contains('...')").hide();
                                                  +	var objValue = $(obj).val();
                                                  +	if ($(obj).attr("inputType") == "number") {
                                                  +		var val = $(obj).val();
                                                  +		if (/\D/.test(val)) {
                                                  +			$.simpleAlert("此处只能输入数字", "info", 2000);
                                                  +			$("#simplealert>.msg").css("top", "15px");
                                                  +			return;
                                                  +		}
                                                  +	}
                                                  +	updateAttributeById($(obj).attr("objid"), objValue);
                                                  +}
                                                  +
                                                  +function saveSelectContent(objAttr,objValue){
                                                  +	updateAttributeById(objAttr, objValue);
                                                  +}
                                                  +
                                                  +// 显示select下拉框
                                                  +
                                                  +function showSelectOption(obj) {
                                                  +	var str = $(obj).attr("ty");
                                                  +	if (str == "td") {
                                                  +		$(obj).children("select").show();
                                                  +		$(obj).children("span").hide();
                                                  +	} else {
                                                  +		updateAttributeById($(obj).attr("objid"), $(obj)
                                                  +						.find("option:selected").text());
                                                  +		$(obj).hide();
                                                  +		$(obj).siblings("span").text($(obj).find("option:selected").text())
                                                  +				.show();
                                                  +	}
                                                  +}
                                                  +
                                                  +// 属性编辑打开窗口
                                                  +
                                                  +function showAttributedEditWindow(obj) {
                                                  +	var objId = $(obj).attr("objid");
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	if (shape) {
                                                  +		if (objId == "desc") {
                                                  +			for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +				var attr = shape.dataAttributes[i];
                                                  +				if (attr.shapeDesc != undefined) {
                                                  +					$("#attribute-edit-title").text("描述/定义");
                                                  +					$("#attribute-edit-content").html(attr.shapeDesc == undefined ? "" : attr.shapeDesc.replace(/\n/g,'<br>'));
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +		} else {
                                                  +			var attributesJsonArray = [];
                                                  +			for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +				var attr = shape.dataAttributes[i];
                                                  +				if (attr.attributesJsonArray) {
                                                  +					attributesJsonArray = attr.attributesJsonArray;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +			for (var index = 0; index < attributesJsonArray.length; index++) {
                                                  +				var tempObj = attributesJsonArray[index];
                                                  +				if (tempObj.id == objId) {
                                                  +					$("#attribute-edit-title").text(tempObj.name);
                                                  +					$("#attribute-edit-content").val(tempObj.value);
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	$("#attribute-edit-window").dialog({
                                                  +				draggable: false,
                                                  +				buttons : [{
                                                  +							text : '确定',
                                                  +							cls : "blue",
                                                  +							handler : function() {
                                                  +								var str = $("#attribute-edit-content").val();
                                                  +								if (objId == "desc") {
                                                  +									for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +										var attr = shape.dataAttributes[i];
                                                  +										if (attr.shapeDesc != undefined) {
                                                  +											shape.dataAttributes[i].shapeDesc = str;
                                                  +											break;
                                                  +										}
                                                  +									}
                                                  +									Model.update(shape);
                                                  +								} else {
                                                  +									updateAttributeById($(obj).attr("objid"), str);
                                                  +								}
                                                  +								$(obj).val(str);
                                                  +								$("#attribute-edit-window").dialog('close');
                                                  +							}
                                                  +						}, {
                                                  +							text : '关闭',
                                                  +							handler : function() {
                                                  +								$("#attribute-edit-window").dialog('close');
                                                  +							}
                                                  +						}]
                                                  +			});
                                                  +}
                                                  +
                                                  +// 对单个属性的更新操作
                                                  +
                                                  +function updateAttributeById(objId, va) {
                                                  +	// var shape = Utils.getSelected()[0];
                                                  +	var shape = selectShape;
                                                  +	var tempArray = new Array();
                                                  +	var count = 0;
                                                  +	if (shape) {
                                                  +		/*
                                                  +		 * for (var i = 0; i < shape.dataAttributes.length; i++) { var attr =
                                                  +		 * shape.dataAttributes[i]; if (attr.attributesContent) {
                                                  +		 * attr.attributesContent = $("#" + shape.id + " tbody[name=tagContentTable0]").html(); break; } }
                                                  +		 */
                                                  +		var attributesJsonArray = shape.attributesJsonArray;
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var attr = shape.dataAttributes[i];
                                                  +			if (attr.attributesJsonArray) {
                                                  +				attributesJsonArray = attr.attributesJsonArray;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		for (var index = 0; index < attributesJsonArray.length; index++) {
                                                  +			var tempObj = attributesJsonArray[index];
                                                  +			if(tempObj == null) {
                                                  +				continue;
                                                  +			}
                                                  +			if (tempObj.id == objId) {
                                                  +				tempObj.value = va;
                                                  +				tempArray[count++] = tempObj;
                                                  +				continue;
                                                  +			}
                                                  +			tempArray[count++] = tempObj;
                                                  +		}
                                                  +		if (tempArray.length > 0) {
                                                  +			shape.attributesJsonArray = tempArray;
                                                  +			for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +				var attr = shape.dataAttributes[i];
                                                  +				if (attr.attributesJsonArray) {
                                                  +					attr.attributesJsonArray = tempArray;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +			if ("isAutoSave" == 1) {
                                                  +				CLB.cmdList = [{
                                                  +							"type" : "message",
                                                  +							"cmd" : "com.actionsoft.apps.coe.pal_pl_repository_designer_message"
                                                  +						}];
                                                  +			}
                                                  +			Model.update(shape);
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +// 删除行上的属性
                                                  +function removeTrAttribute(obj) {
                                                  +	var options = {
                                                  +		title : "提示",
                                                  +		content : "确定删除吗?",
                                                  +		model : false,
                                                  +		onConfirm : function() {
                                                  +			// 确定删除
                                                  +			var shape = Utils.getSelected()[0];
                                                  +			var tempArray = new Array();
                                                  +			var count = 0;
                                                  +			if (shape) {
                                                  +				// shape.attributesContent = $("#" + shape.id + " tbody[name=tagContentTable0]").html();
                                                  +				var attributesJsonArray = [];
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.attributesJsonArray) {
                                                  +						attributesJsonArray = attr.attributesJsonArray;
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +				for (var index = 0; index < attributesJsonArray.length; index++) {
                                                  +					var tempObj = attributesJsonArray[index];
                                                  +					if (tempObj.id == $(obj).attr("objid")) {
                                                  +						continue;
                                                  +					}
                                                  +					tempArray[count++] = tempObj;
                                                  +				}
                                                  +				// if (tempArray.length >= 0) {
                                                  +				shape.attributesJsonArray = tempArray;
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.attributesJsonArray) {
                                                  +						attr.attributesJsonArray = tempArray;
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +				Model.update(shape);
                                                  +				// }
                                                  +			}
                                                  +			$(obj).hide();
                                                  +			$(obj).parent().parent().remove();
                                                  +			$.ajax({
                                                  +				type : "POST",
                                                  +				url : "./jd?sid="
                                                  +						+ CLB.sid
                                                  +						+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_shape_relevance_remove",
                                                  +				data : {
                                                  +					uuid : $(obj).attr("objid"),
                                                  +					shapeId : Utils.getSelected()[0].id,
                                                  +					fileId : ruuid
                                                  +				},
                                                  +				success : function(msg) {
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +	};
                                                  +	window.top.$.confirm(options);
                                                  +}
                                                  +// 显示删除按钮
                                                  +
                                                  +function showRemoveTrAttribute(obj) {
                                                  +	$(obj).addClass("attr_bg_color_tr");
                                                  +	$("input[name=attribute_name_input_" + $(obj).attr("objid") + "]")
                                                  +			.addClass("attr_bg_color_tr");
                                                  +	$("input[name=attribute_name_input_" + $(obj).attr("objid") + "]").parent()
                                                  +			.addClass("attr_bg_color_tr");
                                                  +	$(obj).children("td").children(".ico_attribute_delete").show();
                                                  +	if ($(obj).attr("ty") == "sel") {
                                                  +		$(obj).children("td").children("select").show();
                                                  +		$(obj).children("td").children("span").hide();
                                                  +	}
                                                  +}
                                                  +// 隐藏删除按钮
                                                  +
                                                  +function hideRemoveTrAttribute(obj) {
                                                  +	$(obj).removeClass("attr_bg_color_tr");
                                                  +	$("input[name=attribute_name_input_" + $(obj).attr("objid") + "]")
                                                  +			.removeClass("attr_bg_color_tr");
                                                  +	$("input[name=attribute_name_input_" + $(obj).attr("objid") + "]").parent()
                                                  +			.removeClass("attr_bg_color_tr");
                                                  +	$(obj).children("td").children(".ico_attribute_delete").hide();
                                                  +	if ($(obj).attr("ty") == "sel") {
                                                  +		$(obj).children("td").children("select").hide();
                                                  +		$(obj).children("td").children("span").show();
                                                  +	}
                                                  +}
                                                  +// 经常用的是通过遍历,重构数组.
                                                  +Array.prototype.remove = function(dx) {
                                                  +	if (isNaN(dx) || dx > this.length) {
                                                  +		return false;
                                                  +	}
                                                  +	for (var i = 0, n = 0; i < this.length; i++) {
                                                  +		if (this[i] != this[dx]) {
                                                  +			this[n++] = this[i];
                                                  +		}
                                                  +	}
                                                  +	this.length -= 1;
                                                  +};
                                                  +function removeElementFromArr(dx, obj) {
                                                  +	if (isNaN(dx) || dx > obj.length) {
                                                  +		return false;
                                                  +	}
                                                  +	for (var i = 0, n = 0; i < obj.length; i++) {
                                                  +		if (obj[i] != obj[dx]) {
                                                  +			obj[n++] = obj[i];
                                                  +		}
                                                  +	}
                                                  +	obj.length -= 1;
                                                  +	return obj;
                                                  +}
                                                  +
                                                  +// 在数组中获取指定值的元素索引
                                                  +Array.prototype.getIndexByValue = function(value) {
                                                  +	var index = -1;
                                                  +	for (var i = 0; i < this.length; i++) {
                                                  +		if (this[i].url == value) {
                                                  +			index = i;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	return index;
                                                  +};
                                                  +Array.prototype.getIndexByValueById = function(value) {
                                                  +	var index = -1;
                                                  +	for (var i = 0; i < this.length; i++) {
                                                  +		if (this[i] == value) {
                                                  +			index = i;
                                                  +			break;
                                                  +		}
                                                  +	}
                                                  +	return index;
                                                  +};
                                                  +// 重写链接创建后的事件
                                                  +Designer.events.addEventListener("linkerCreated", function(linker) {
                                                  +			/**
                                                  +			 * var toId = linker.to.id; //当前选中的图形 var fromShape =
                                                  +			 * Utils.getSelected()[0]; //目标图形 var toShape =
                                                  +			 * Model.getShapeById(toId); var toShapeTemp = []; for (var index =
                                                  +			 * 0; index < linkerRelationship.length; index++) { var shapes =
                                                  +			 * linkerRelationship[index]; var fromShapeId = shapes.fromShapeId;
                                                  +			 * var toShapeIds = shapes.toShapeId; if (fromShape.name ==
                                                  +			 * fromShapeId) { if (toShapeIds != "*") { //判断是针对哪些图形有效 if
                                                  +			 * (toShapeIds.indexOf(",") > 0) { toShapeTemp =
                                                  +			 * toShapeIds.split(","); } else { toShapeTemp.push(toShapeIds); } } } }
                                                  +			 * if (toShapeTemp.length != 0) { for (var index = 0; index <
                                                  +			 * toShapeTemp.length; index++) { var tempShapeId =
                                                  +			 * toShapeTemp[index]; //删除这条线 if (toShape.name != tempShapeId) {
                                                  +			 * $.simpleAlert("不支持所选对象与目标对象的这种关系", "error", 2500); //待续未完
                                                  +			 * deleteLinkerSelected(linker); } } } // if (toShape.name == "xxx") { //
                                                  +			 * linker.to.id = null; //} //获取选中的链接线 var outlinkers =
                                                  +			 * Utils.getOutlinkers(fromShape); var l = linker; //
                                                  +			 * consloe.log(l);
                                                  +			 */
                                                  +			// 判断是不是支持这种关系类型
                                                  +			// isObjectRelationshipModel(linker, true);
                                                  +			// showShapeRelationTab(null);
                                                  +			// attributeShowTabContent(null);
                                                  +			// showRelevanceShapesContent();
                                                  +			// shapeCopyAndPasteCount(null);
                                                  +		});
                                                  +
                                                  +/**
                                                  + * 图形创建后重写
                                                  + */
                                                  +Designer.events.addEventListener("created", function(shape) {
                                                  +	if (Designer.status == "demo" && !demoCreatedTiped) {
                                                  +		UI.showStartStep("created", $("#" + shape.id));
                                                  +		demoCreatedTiped = true;
                                                  +	}
                                                  +	/***************************************************************************
                                                  +	 * var selectedShape = Utils.getSelected()[0]; var linkerIds =
                                                  +	 * Model.getShapeLinkers(selectedShape.id);
                                                  +	 * if(linkerIds&&linkerIds.length>0){ var linker =
                                                  +	 * Model.getShapeById(linkerIds[0]); isObjectRelationshipModel(linker,
                                                  +	 * true); }
                                                  +	 **************************************************************************/
                                                  +	showShapeRelationTab(shape);
                                                  +	if(shape.category == "control_risk") {
                                                  +		initPrivateAttribute(shape, "control_risk"); // 创建节点后编号提供默认值
                                                  +	}
                                                  +	if(shape.category == "process_flowchart" || shape.category == "process_bpmn2") {// 流程flowchar编号初始化编号
                                                  +		if (!IsGroupChild(shape)) {// 不在组内部或者新建立的节点为组节点
                                                  +			// 获取最大编号
                                                  +			initPrivateAttribute(shape, shape.category);
                                                  +		}
                                                  +		if(shape.name == "group") {// 组置于最底层
                                                  +			// Designer.layerShapes("back");
                                                  +			var start = Model.orderList[0].zindex; //取到最小的zindex
                                                  +			start -= 1;
                                                  +			shape.props.zindex = start;
                                                  +		}
                                                  +	}
                                                  +	attributeShowTabContent(shape);
                                                  +		// shapeCopyAndPasteCount(shape);
                                                  +	});
                                                  +
                                                  +// 设置编号属性默认值
                                                  +function initPrivateAttribute(newShape, type) {
                                                  +	if (type == "control_risk") {
                                                  +		var shapes = Model.define.elements;
                                                  +		var max = 0;
                                                  +		for (var shapeId in shapes) {
                                                  +			var shape = shapes[shapeId];
                                                  +			if(shape.category == "control_risk") { // 过滤其他模型图形
                                                  +				var dataAttr = shape.dataAttributes[0];
                                                  +				var number = typeof dataAttr.privateAttributeContent == "string" ? JSON.parse(dataAttr.privateAttributeContent.replace(/'/g,'"')).number : dataAttr.privateAttributeContent.number;
                                                  +				if(typeof number == 'string') number = number.replace(/^\s+|\s+$/g,"");
                                                  +				if(!isNaN(number)) if(number > max) max = number;
                                                  +			}
                                                  +		}
                                                  +		max = Math.floor(max) + 1;
                                                  +		newShape.dataAttributes[0].privateAttributeContent = {'number': max };
                                                  +	} else {
                                                  +		var shapes = Model.define.elements;
                                                  +		var max = 0;
                                                  +		for (var shapeId in shapes) {
                                                  +			var shape = shapes[shapeId];
                                                  +			if (shape.dataAttributes != undefined) {
                                                  +	    		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +	    			if (shape.dataAttributes[i].privateAttributeContent != null) {
                                                  +	    				var privateAttributeContent = shape.dataAttributes[i].privateAttributeContent;
                                                  +	    				if (typeof(privateAttributeContent) == "string") {
                                                  +	    					privateAttributeContent = eval("(" + privateAttributeContent + ")");
                                                  +	    				}
                                                  +	    				var number = privateAttributeContent.number;
                                                  +	    				if(number != undefined && number != null && number != "") {
                                                  +	    					if(typeof number == 'string') number = number.replace(/^\s+|\s+$/g,"");
                                                  +	    					if(!isNaN(number)) if(parseInt(number) > parseInt(max)) max = number;
                                                  +	    				}
                                                  +	    			}
                                                  +	    		}
                                                  +	    	}
                                                  +		}
                                                  +		// 设置最大编号为max+1
                                                  +
                                                  +		var json = "{'number':'编号'}";
                                                  +		// var json2 = "{'number':'" + (parseInt(max)+1) + "'}";
                                                  +		String.prototype.padLeft = Number.prototype.padLeft = function(total, pad) {
                                                  +  		  	return (Array(total).join(pad || 0) + this).slice(-total);
                                                  +		}
                                                  +		var no = ((parseInt(parseInt(max)/10) + 1)*10);
                                                  +		if(no < 1000) {
                                                  +        	no = no.padLeft(3);
                                                  +        }
                                                  +		var json2 = "{'number':'" + no + "'}";
                                                  +		var shapeName = newShape.name;
                                                  +		if (shapeName.indexOf("_custom") > -1) {
                                                  +			shapeName = shapeName.substring(0, shapeName.indexOf("_"));
                                                  +		}
                                                  +		if (shapeName == "control" || shapeName == "risk" || shapeName == "item"
                                                  +				|| shapeName == "regulation" || shapeName == "procedure"
                                                  +				|| shapeName == "method" || shapeName == "manualOperation"
                                                  +				|| shapeName == "predefinedProcess"
                                                  +				|| shapeName == "callActivityCallingProcess"
                                                  +				|| shapeName == "businessRuleTask" || shapeName == "scriptTask"
                                                  +				|| shapeName == "sendTask" || shapeName == "userTask"
                                                  +				|| shapeName == "serviceTask" || shapeName == "manualTask"
                                                  +				|| shapeName == "receiveTask" || shapeName == "process" 
                                                  +				|| shapeName == "decision" || shapeName == "group") {
                                                  +			for (var i = 0; i < newShape.dataAttributes.length; i++) {
                                                  +				var attr = newShape.dataAttributes[i];
                                                  +				if (attr.privateAttribute) {
                                                  +					attr.privateAttribute = json;
                                                  +				}
                                                  +				if(attr.privateAttributeContent) {
                                                  +					attr.privateAttributeContent = json2;					
                                                  +				}
                                                  +			}
                                                  +	}
                                                  +	}
                                                  +}
                                                  +
                                                  +//判断新建立的节点是否在shapeName为group的组内部
                                                  +function IsGroupChild(newShape) {
                                                  +	var result = false;
                                                  +	var newObj = newShape.props;
                                                  +	var x2 = parseInt(newObj.x);
                                                  +	var y2 = parseInt(newObj.y);
                                                  +	var w2 = parseInt(newObj.w);
                                                  +	var h2 = parseInt(newObj.h);
                                                  +	if (newShape.name == "group") {
                                                  +		return false;
                                                  +	} else { // 是否在组内部
                                                  +		var shapes = Model.define.elements;
                                                  +		for (var shapeId in shapes) {
                                                  +			if (newShape.id == shapeId) continue;
                                                  +			var shape = shapes[shapeId];
                                                  +			if (shape.name == "group") {// 存在组节点
                                                  +				var obj = shape.props;
                                                  +				var x1 = parseInt(obj.x);
                                                  +				var y1 = parseInt(obj.y);
                                                  +				var w1 = parseInt(obj.w);
                                                  +				var h1 = parseInt(obj.h);
                                                  +				if (x1<x2 && y1<y2 && y1+h1>y2+h2 && x1+w1>x2+w2 && x1+w1>x2+w2 && y1+h1>y2+h2) { // 新建立节点在组内部
                                                  +					result = true;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	return result;
                                                  +}
                                                  +
                                                  +// 当不符合配置的关系时删除链接线
                                                  +
                                                  +function deleteLinkerSelected(linker) {
                                                  +	// moveShape移除图片 moveLinker移除链线 shapeMultiSelectable图形选中事件 designer.core.js
                                                  +	var d = linker;
                                                  +	if (d.length > 0) {
                                                  +		Utils.unselect();
                                                  +		var e = Utils.getAttachedShapes(d);
                                                  +		d = d.concat(e);
                                                  +		var c = [];
                                                  +		for (var b = 0; b < d.length; b++) {
                                                  +			var a = Utils.getChildrenShapes(d[b]);
                                                  +			c = c.concat(a)
                                                  +		}
                                                  +		d = d.concat(c);
                                                  +		Model.remove(d)
                                                  +	}
                                                  +}
                                                  +// 显示图形关系特性
                                                  +
                                                  +function showShapeRelationTab(currentShape) {
                                                  +	if (!$("#tagContent0").is(":visible")) {
                                                  +		return;
                                                  +	}
                                                  +	// 拿到所选的图形
                                                  +	var selectedShape = Utils.getSelected()[0];
                                                  +	if (!selectedShape)
                                                  +		return;
                                                  +	if (currentShape) {
                                                  +		selectedShape = currentShape
                                                  +	}
                                                  +	var linkers = Model.getShapeLinkers(selectedShape.id);
                                                  +	var outlinkers = Utils.getOutlinkers(Utils.getSelected());
                                                  +	var l = linkers;
                                                  +	$("#tagContentTable1").empty();
                                                  +	if (linkers != undefined) {
                                                  +		for (var a = 0; a < linkers.length; a++) {
                                                  +			// 根据连线的id拿到连线图形这个对象,再根据这个对象来找到他所关联的图形
                                                  +			var element = linkers[a];
                                                  +			var linkerObjs = Model.getShapeById(element);
                                                  +			// 来自哪个图形 的id
                                                  +			var fromId = linkerObjs.from.id;
                                                  +			var toId = linkerObjs.to.id;
                                                  +			var fromShape = Model.getShapeById(fromId);
                                                  +			var toShape = Model.getShapeById(toId);
                                                  +			if (fromShape != undefined && toShape != undefined) {
                                                  +				// 此处判断的是从本图形出去的连线
                                                  +				if (fromShape.id == selectedShape.id) {
                                                  +					for (var b = 0; b < linkerRelationship.length; b++) {
                                                  +						var shapes = linkerRelationship[b];
                                                  +						var fromShapeId = shapes.fromShapeId;
                                                  +						var toShapeIds = shapes.toShapeId;
                                                  +						if (fromShape.name == fromShapeId) {
                                                  +							if (toShapeIds != "*") {
                                                  +								// 判断是针对哪些图形有效
                                                  +								if (toShapeIds.indexOf(",") > 0) {
                                                  +									var toShapeTemp = toShapeIds.split(",");
                                                  +									for (var c = 0; c < toShapeTemp.length; c++) {
                                                  +										var josnShapeId = toShapeTemp[c];
                                                  +										if (josnShapeId == toShape.name) {
                                                  +											addtagContentTableContent(
                                                  +													fromShape,
                                                  +													shapes.outcomingName,
                                                  +													toShape);
                                                  +										}
                                                  +									}
                                                  +								} else {
                                                  +									if (toShapeIds == toShape.name) {
                                                  +										addtagContentTableContent(fromShape,
                                                  +												shapes.outcomingName, toShape);
                                                  +									}
                                                  +								}
                                                  +							} else {
                                                  +								// 当没有限制的时候
                                                  +								addtagContentTableContent(fromShape,
                                                  +										shapes.outcomingName, toShape);
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +				} else if (toShape.id == selectedShape.id) {
                                                  +					// 此处需要完善当不扶持 对像关系类型时下面的代码 不执行
                                                  +					// 判断进来的链线开始
                                                  +					for (var b = 0; b < linkerRelationship.length; b++) {
                                                  +						var shapes = linkerRelationship[b];
                                                  +						var fromShapeId = shapes.fromShapeId;
                                                  +						var toShapeIds = shapes.toShapeId;
                                                  +						// if (toShape.name == fromShapeId) {
                                                  +						// 判断这两种图形中是否有这种关系
                                                  +						// if (isObjectRelationshipModel(linkerObjs, false))
                                                  +						// addtagContentTableContent(fromShape,
                                                  +						// shapes.incomingName);
                                                  +						// }
                                                  +						if (fromShape.name == fromShapeId) {
                                                  +							if (toShapeIds != "*") {
                                                  +								// 判断是针对哪些图形有效
                                                  +								if (toShapeIds.indexOf(",") > 0) {
                                                  +									var toShapeTemp = toShapeIds.split(",");
                                                  +									for (var c = 0; c < toShapeTemp.length; c++) {
                                                  +										var josnShapeId = toShapeTemp[c];
                                                  +										if (josnShapeId == selectedShape.name) {
                                                  +											addtagContentTableContent(toShape,
                                                  +													shapes.incomingName,
                                                  +													fromShape);
                                                  +										}
                                                  +									}
                                                  +								} else {
                                                  +									if (toShapeIds == selectedShape.name) {
                                                  +										addtagContentTableContent(toShape,
                                                  +												shapes.incomingName, fromShape);
                                                  +									}
                                                  +								}
                                                  +							} else {
                                                  +								// 当没有限制的时候
                                                  +								addtagContentTableContent(toShape,
                                                  +										shapes.incomingName, fromShape);
                                                  +							}
                                                  +
                                                  +						}
                                                  +
                                                  +					}
                                                  +					// 判断进来的线结束
                                                  +				}
                                                  +			}
                                                  +			var e = element;
                                                  +		}
                                                  +	}
                                                  +}
                                                  +// 给关系类型增加内容
                                                  +
                                                  +function addtagContentTableContent(shape1, str, obj) {
                                                  +	if (obj.text == "") {
                                                  +		obj.text = obj.title;
                                                  +	}
                                                  +	var constr = '<tr onmouseout="hideRemoveTrAttribute(this);" onmouseover="showRemoveTrAttribute(this);" class="tagContentTableTr"><td>'
                                                  +			// + shape1.text
                                                  +			+ str
                                                  +			+ '</td><td><div class="attribute_td_div_css">'
                                                  +			+ obj.text
                                                  +			+ '</div> </td></tr>';
                                                  +	$("#tagContentTable1").append(constr);
                                                  +}
                                                  +// 判断是不是支持对象的关系类型
                                                  +
                                                  +function isObjectRelationshipModel(linker, isAlert) {
                                                  +	var flag = false;
                                                  +	var toId = linker.to.id;
                                                  +	if (toId == null)
                                                  +		return false;
                                                  +	// 当前选中的图形
                                                  +	var fromShape = Utils.getSelected()[0];
                                                  +	// 目标图形
                                                  +	var toShape = Model.getShapeById(toId);
                                                  +	var toShapeTemp = [];
                                                  +	for (var index = 0; index < linkerRelationship.length; index++) {
                                                  +		var shapes = linkerRelationship[index];
                                                  +		var fromShapeId = shapes.fromShapeId;
                                                  +		var toShapeIds = shapes.toShapeId;
                                                  +		if (fromShape) {
                                                  +			if (fromShape.name == fromShapeId) {
                                                  +				if (toShapeIds != "*") {
                                                  +					// 判断是针对哪些图形有效
                                                  +					if (toShapeIds.indexOf(",") > 0) {
                                                  +						toShapeTemp = toShapeIds.split(",");
                                                  +					} else {
                                                  +						toShapeTemp.push(toShapeIds);
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	if (toShapeTemp.length != 0) {
                                                  +		for (var index = 0; index < toShapeTemp.length; index++) {
                                                  +			var tempShapeId = toShapeTemp[index];
                                                  +			// 删除这条线
                                                  +			if (toShape && toShape.name == tempShapeId) {
                                                  +				// 画线时的操作
                                                  +				// 显示关系类型里的操作
                                                  +				flag = true;
                                                  +				break;
                                                  +				// 待续未完
                                                  +			}
                                                  +		}
                                                  +	} else {
                                                  +		flag = true;
                                                  +	}
                                                  +	if (!flag) {
                                                  +		if (isAlert) {
                                                  +			// $.simpleAlert("不支持所选对象与目标对象的这种关系", "error", 2000);
                                                  +			// deleteLinkerSelected(linker);
                                                  +		}
                                                  +	}
                                                  +	return flag;
                                                  +}
                                                  +
                                                  +// 文件属性的处理
                                                  +function initProcessDesc() {
                                                  +	var length = Object.keys(processDesc).length;
                                                  +	var t = '';
                                                  +	for(var i = 1; i <= length; i++) {
                                                  +		var obj = processDesc[i];
                                                  +		t += '<tr>';
                                                  +		t += '<td style="padding-left:20px;" class="tableContent">' + obj.name + '</td>';
                                                  +		var value = obj.value;
                                                  +		if (value == undefined) {
                                                  +			value = '';
                                                  +		} else {
                                                  +			value = value.replace(/\n/g,'<br>')
                                                  +		}
                                                  +		t += '<td colspan="2" class="tableContent">' + value + '</td>';
                                                  +		t += '</tr>';
                                                  +	}
                                                  +	$('#portalDescDock').find('table').append(t);
                                                  +	// $('#portalDescDock').append('<table class="awsui-table"><tr><td>&nbsp;</td></tr></table>');
                                                  +}
                                                  +
                                                  +function autoClickAttr() {
                                                  +	// 属性自动切换
                                                  +	if ($('#openTab').is(':hidden')) {
                                                  +		var name = '';
                                                  +		if (Utils.getSelected()[0] == null) {
                                                  +			name = 'processDesc';
                                                  +		} else {
                                                  +			name = 'processAttr';
                                                  +		}
                                                  +    	$('#tab').find('div').removeClass('selected');
                                                  +    	$('#' + name).addClass('selected');
                                                  +    	$('.portalAttr').hide();
                                                  +    	if(name == "processDesc") {
                                                  +    		dockShowView('portalDescShow');
                                                  +    	}
                                                  +		if(name == "processAttr") {
                                                  +			dockShowView('portalAttrShow');
                                                  +		}
                                                  +		if(name == "processFile") {
                                                  +			dockShowView('portalFileShow');
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +function dockShowView(name) {
                                                  +	if ($("#dock_btn_" + name).button("isDisabled")) {
                                                  +		return;
                                                  +	}
                                                  +	$(".dock_view").hide();
                                                  +	$(".dock_view_" + name).show();
                                                  +	$(".dock_buttons").children().removeClass("selected");
                                                  +	$("#dock_btn_" + name).addClass("selected");
                                                  +	if (Dock.currentView == "history" && name != "history") {
                                                  +		Dock.closeHistory();
                                                  +	}
                                                  +	Dock.currentView = name;
                                                  +}
                                                  +
                                                  +// 点击页面时变更显示内容
                                                  +function changeArributeByShape() {
                                                  +	if(!isClickTab) {
                                                  +		autoClickAttr();
                                                  +	}
                                                  +	isClickTab = false;
                                                  +	var lastTable = '<table name="lastTable" class="awsui-table"><tr><td>&nbsp;</td></tr></table>';
                                                  +	//节点属性和附件的处理,文件属性见initProcessDesc()
                                                  +	if (Utils.getSelected()[0] == null) {
                                                  +		initShapeAttribute('0');
                                                  +		initUpfileData('0');
                                                  +		
                                                  +		$('table[name=lastTable]').remove();
                                                  +		if($('#portalAttrDock').children('table').length > 0) {
                                                  +			// $('#portalAttrDock').append(lastTable);
                                                  +		}
                                                  +		if($('#portalFileDock').children('table').length > 0) {
                                                  +			// $('#portalFileDock').append(lastTable);
                                                  +		}
                                                  +	} else {
                                                  +		selectShape = Utils.getSelected()[0];
                                                  +		initShapeAttribute(Utils.getSelected()[0].id);
                                                  +		initUpfileData(Utils.getSelected()[0].id);
                                                  +		
                                                  +		$('table[name=lastTable]').remove();
                                                  +		if ($('#portalAttrDock table[name=' + Utils.getSelected()[0].id + ']').length > 0) {
                                                  +			// $('#portalAttrDock').append(lastTable);
                                                  +		}
                                                  +		if ($('#portalFileDock table[name=' + Utils.getSelected()[0].id + ']').length > 0) {
                                                  +			// $('#portalFileDock').append(lastTable);
                                                  +		}
                                                  +	}
                                                  +}
                                                  +
                                                  +// 初始化上传附件
                                                  +function initUpfileData(obj) {
                                                  +	$('#alertMessage').remove();
                                                  +	if (obj == undefined || obj == '0') {
                                                  +		$('#portalFileDock').empty();
                                                  +		var t = '';
                                                  +		var processFile = upfileData['file'];
                                                  +		if(processFile.length > 0) {
                                                  +			t += '<table name="file" class="awsui-table">';
                                                  +			t += '<tr>';
                                                  +			t += '<td class="tableHeader">流程相关</td>';
                                                  +			t += '</tr>';
                                                  +			for(var i = 0; i < processFile.length; i++) {
                                                  +				var obj = processFile[i];
                                                  +				t += '<tr>';
                                                  +				t += '<td class="tableContent" style="padding-left:20px;"><a href="javascript:void(0);" onclick="readFile(\''+ obj.id +'\')">'+ obj.name +'</a></td>';
                                                  +				t += '</tr>';
                                                  +			}
                                                  +			t += '</table>';
                                                  +		}
                                                  +		var elements = Model.define.elements;
                                                  +		for(var e in elements) {
                                                  +			var ele = elements[e];
                                                  +			if(ele.name == 'linker') {
                                                  +				continue;
                                                  +			}
                                                  +			var processShape = upfileData[ele.id];
                                                  +			if(processShape != null && processShape.length > 0) {
                                                  +				t += '<table name="' + ele.id + '" class="awsui-table">';
                                                  +				t += '<tr>';
                                                  +				t += '<td class="tableHeader">' + ele.text + '</td>';
                                                  +				t += '</tr>';
                                                  +				for(var i = 0; i < processShape.length; i++) {
                                                  +					var obj = processShape[i];
                                                  +					t += '<tr>';
                                                  +					t += '<td class="tableContent" style="padding-left:20px;"><a href="javascript:void(0);" onclick="readFile(\''+ obj.id +'\')">'+ obj.name +'</a></td>';
                                                  +					t += '</tr>';
                                                  +				}
                                                  +				t += '</table>';
                                                  +			}
                                                  +		}
                                                  +		$('#portalFileDock').append(t);
                                                  +	} else {
                                                  +		$('#portalFileDock table').hide();
                                                  +		$('#portalFileDock table[name=' + obj + ']').show();
                                                  +	}
                                                  +	var isHidden = true;
                                                  +	$('#portalFileDock table').each(function(){
                                                  +		console.log($(this).css('display'));
                                                  +		if ($(this).css('display') != 'none') {
                                                  +			isHidden = false;
                                                  +		}
                                                  +	});
                                                  +	if (isHidden) {
                                                  +		var $noContent = $('#noContent').clone(true);
                                                  +		$noContent.attr('id', 'alertMessage');
                                                  +		$('#portalFileDock').append($noContent);
                                                  +		$('#alertMessage').show();
                                                  +	}
                                                  +}
                                                  +
                                                  +//附件在线预览
                                                  +function readFile(uuid) {
                                                  +	$.simpleAlert("文件正在处理", "loading");
                                                  +	awsui.ajax.request({
                                                  +        type: "POST",
                                                  +        url: "./jd?sid=" + encodeURIComponent(sid) + "&cmd=com.actionsoft.apps.coe.pal_processlevel_upfile_read",
                                                  +        data: {uuid: uuid},
                                                  +        ok: function(msg) {
                                                  +        	$.simpleAlert("close");
                                                  +        	var url = msg.data.url;
                                                  +        	if (msg.data.noSupport) {
                                                  +        		window.location.href = url;
                                                  +        	} else {
                                                  +        		window.open(url);
                                                  +        	}
                                                  +        },
                                                  +        err: function(msg) {
                                                  +        }
                                                  +    });
                                                  +}
                                                  +
                                                  +function sortModelByNumber() {
                                                  +	// 序号升序,无序号在后面
                                                  +	var recordId = [];
                                                  +	var hasNumArr = [];
                                                  +	for (var shapeId in Model.define.elements) {
                                                  +		var shape = Model.define.elements[shapeId];
                                                  +		for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +			var attrArr = shape.dataAttributes[i];
                                                  +			if (attrArr.attributesJsonArray && attrArr.attributesJsonArray.length > 0) {
                                                  +				for (var j = 0; j < attrArr.attributesJsonArray.length; j++) {
                                                  +					var attr = attrArr.attributesJsonArray[j];
                                                  +					if (attr != null && attr.id && attr.id == 'number') {
                                                  +						var number = attr.value;
                                                  +						if(typeof number == 'string') {
                                                  +							number = number.replace(/^\s+|\s+$/g,"")
                                                  +						};
                                                  +						if(number != undefined && number != null && number != "") {
                                                  +							var obj = {};
                                                  +							obj.text = shape.text;
                                                  +							obj.id = shapeId;
                                                  +							obj.orderIndex = number;
                                                  +							hasNumArr.push(obj);
                                                  +							recordId.push(shapeId);
                                                  +						}
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	// 有序号的元素升序排序
                                                  +	var compare = function (obj1, obj2) {
                                                  +	    var val1 = obj1.orderIndex;
                                                  +	    var val2 = obj2.orderIndex;
                                                  +	    if (val1 < val2) {
                                                  +	        return -1;
                                                  +	    } else if (val1 > val2) {
                                                  +	        return 1;
                                                  +	    } else {
                                                  +	        return 0;
                                                  +	    }            
                                                  +	}
                                                  +	hasNumArr.sort(compare);
                                                  +	for (var shapeId in Model.define.elements) {
                                                  +		if($.inArray(shapeId, recordId) == -1) {
                                                  +			var obj = {};
                                                  +			obj.id = shapeId;
                                                  +			hasNumArr.push(obj);
                                                  +		}
                                                  +	}
                                                  +	return hasNumArr;
                                                  +}
                                                  +
                                                  +
                                                  +
                                                  +
                                                  +// 初始化流程步骤说明
                                                  +function initShapeAttribute(obj) {
                                                  +	if (obj == undefined || obj == '0') {
                                                  +		$('#portalAttrDock').empty();
                                                  +		var elements = Model.define.elements;
                                                  +		var sortNumShapeArr = sortModelByNumber();
                                                  +		for(var sortIndex = 0; sortIndex < sortNumShapeArr.length; sortIndex++) {
                                                  +			var temp = sortNumShapeArr[sortIndex];
                                                  +			var shape = elements[temp.id];
                                                  +			if(shape.name == 'linker') {
                                                  +				continue;
                                                  +			}
                                                  +			
                                                  +			// 属性弹出层显示的内容
                                                  +			var attributesJsonArray = "";
                                                  +			var attributesJsonArrayT = [];
                                                  +			for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +				var attr = shape.dataAttributes[i];
                                                  +				if (attr.attributesJsonArray) {
                                                  +					attributesJsonArrayT = attr.attributesJsonArray;
                                                  +					break;
                                                  +				}
                                                  +			}
                                                  +			// 属性排序
                                                  +			var defaultMoreAttr = $('#defaultMoreAttrSort').val();
                                                  +			if(defaultMoreAttr.length > 0) {
                                                  +				var arr = defaultMoreAttr.split('|');
                                                  +				var tempAttrArray = [];
                                                  +				for(var i = 0; i < arr.length; i++) {
                                                  +					for(var j = 0; j < attributesJsonArrayT.length; j++) {
                                                  +						if(attributesJsonArrayT[j] == undefined || attributesJsonArrayT[j] == null) {
                                                  +							continue;
                                                  +						}
                                                  +						if(arr[i] == attributesJsonArrayT[j].id) {
                                                  +							tempAttrArray.push(attributesJsonArrayT[j]);
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +				//取新添加的属性
                                                  +                if (tempAttrArray.length > 0) {
                                                  +                    var newAttrArray = [];
                                                  +                       newAttrArray = tempAttrArray.concat(attributesJsonArrayT).filter(function(v, i, arr) {
                                                  +                                                  return arr.indexOf(v) === arr.lastIndexOf(v);
                                                  +                                              });;
                                                  +                       attributesJsonArrayT = tempAttrArray.concat(newAttrArray);
                                                  +                }
                                                  +			}
                                                  +			var t = '';
                                                  +			t += '<table class="awsui-table awsui-table-bordered" name="' + shape.id + '">';
                                                  +			t += '<tr name="trHeader">';
                                                  +			t += '<td class="tableHeader" colspan="3">' + shape.text + '</td>';
                                                  +			t += '</tr>';
                                                  +			t += '<tr>';
                                                  +			t += '<td style="padding-left:20px;" class="tableContent">类型</td>';
                                                  +			t += '<td id="' + shape.id + 'type" colspan="2" class="tableContent"></td>';
                                                  +			t += '</tr>';
                                                  +			t += '</table>';
                                                  +			$('#portalAttrDock').append(t);
                                                  +			if (shape && attributesJsonArrayT) {
                                                  +				// {}函数,改为图形创建时增加私有属性
                                                  +				attributesJsonArray = attributesJsonArrayT;
                                                  +				var shapeTitle = shape.title == undefined ? "" : shape.title;
                                                  +				$("#" + shape.id + "type").text(shapeTitle);
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					var attr = shape.dataAttributes[i];
                                                  +					if (attr.shapeDesc) {
                                                  +						$("#" + shape.id + "desc").html(attr.shapeDesc == undefined ? "" : attr.shapeDesc.replace(/\n/g,'<br>'));
                                                  +						break;
                                                  +					}
                                                  +				}
                                                  +				// 此处遍历attributesJsonArray输入 内容
                                                  +				if (attributesJsonArray.length != 0) {
                                                  +					getPrivateAttributeHtml(attributesJsonArray, "portalAttrDock", shape);
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	} else {
                                                  +		$('#portalAttrDock table').hide();
                                                  +		$('#portalAttrDock table[name=' + obj + ']').show();
                                                  +	}
                                                  +}
                                                  +
                                                  +//获取select类型属性的option
                                                  +var comboboxs = [];
                                                  +function getSelectOptions(category, selectValues) {
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		url : "./jd?sid="
                                                  +				+ CLB.sid
                                                  +				+ "&cmd=com.actionsoft.apps.coe.pal_pl_attribute_option",
                                                  +		data : {
                                                  +			category : category
                                                  +		},
                                                  +		success : function(msg) {
                                                  +			if (msg.result == "ok") {
                                                  +				var data = msg.data.data;
                                                  +				for (var i = 0; i < selectValues.length; i++) {
                                                  +					var objId = selectValues[i].objId;
                                                  +					var objValue = selectValues[i].objValue;
                                                  +					var objType = selectValues[i].objType;
                                                  +					var multiple = false;
                                                  +					var closeSelect = true;
                                                  +					if (objType == "select_m") {
                                                  +						multiple = true;
                                                  +						closeSelect = false;
                                                  +					}
                                                  +					var optionsData = data[objId];
                                                  +					if (optionsData) {
                                                  +						optionsData = optionsData.split(",");	
                                                  +						var selectData = [];
                                                  +						var selectedData = [];
                                                  +						if(objValue != null && objValue != ''){
                                                  +							var selectedArr = objValue.split(',');
                                                  +						}
                                                  +							var y = 0;
                                                  +						if (optionsData.length > 0) {
                                                  +							for (var j = 0, len = optionsData.length; j < len; j++) {
                                                  +								var dataObj = {
                                                  +										id : j,
                                                  +										text : optionsData[j]
                                                  +								};
                                                  +								selectData.push(dataObj);
                                                  +								if(objValue != null && objValue != ''){
                                                  +									for(var x = 0; x < selectedArr.length; x++){
                                                  +										if(selectedArr[x] == optionsData[j]){
                                                  +											selectedData[y] = j;
                                                  +											y++;
                                                  +										}
                                                  +									}									
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +						$.fn.select2.defaults.set("language", "zh-CN");
                                                  +						var opt1 = {
                                                  +							width : 244,
                                                  +							multiple:multiple,
                                                  +							closeOnSelect:closeSelect,
                                                  +							/*templateResult:formatState,
                                                  +							templateSelection:formatRepoSelection,*/
                                                  +							placeholder:'请选择...'
                                                  +						};
                                                  +						opt1.data = selectData;
                                                  +						$("#attribute_name_input_" + objId).parent().css("padding-left", "0px");
                                                  +						var $obj = $("#attribute_name_input_" + objId).select2(opt1);
                                                  +						if(multiple){//多选
                                                  +							$("#attribute_name_input_" + objId).val(selectedData).trigger("change");													
                                                  +						} else {//单选
                                                  +							if(selectedData != null && selectedData != ''){
                                                  +								$("#attribute_name_input_" + objId).val(selectedData[0]).trigger("change");								
                                                  +							}
                                                  +						}
                                                  +						$obj.off("select2:close").on("select2:close", function(e){//只能在关闭多选框时触发事件,close与unselect事件冲突,待完善
                                                  +							var type = this.id.substring(this.id.lastIndexOf('_')+1);
                                                  +							var selectValue = [];
                                                  +							var selected = $('#' + this.id).select2('data');
                                                  +							for(var j = 0; j < selected.length; j++){
                                                  +								selectValue[j] = selected[j].text;
                                                  +							}
                                                  +							comboboxs[type] = selectValue.join(',');
                                                  +							saveSelectContent(type,comboboxs[type]);
                                                  +						});
                                                  +						$("#attribute_name_input_" + objId + "_Tip").css({"float" : "left", "border" : "0"});
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +}
                                                  +
                                                  +function getScreenResolution() {
                                                  +	if (screen.width == 1024) {
                                                  +
                                                  +	}
                                                  +}
                                                  +/**
                                                  + * 图形创建后事件
                                                  + */
                                                  +/*
                                                  + * Designer.events.addEventListener("created", function(a) { //alert(a.name)
                                                  + * if(a.name != "linker"){ attributeShowTabContent(null); //Model.update(a); }
                                                  + * if (Designer.status == "demo" && !demoCreatedTiped) {
                                                  + * UI.showStartStep("created", $("#" + a.id)); demoCreatedTiped = true } });
                                                  + */
                                                  +
                                                  +// 重构
                                                  +function openLinkUrlRewrite(type, url, target, uuid, obj, fileName, inspected) {
                                                  +	if (type == "custom") {
                                                  +		$("#link-dialog-normal_contextmenu").hide();
                                                  +		if (target == "newTab" && parent.openTabCustom != undefined) {
                                                  +			parent.openTabCustom(uuid, url, fileName);
                                                  +		} else if (target == "_seft") {
                                                  +			if (parent.changeTabTitle) {
                                                  +				parent.changeTabTitle(chartId, fileName, uuid, "custom");
                                                  +			}
                                                  +			window.location.href = url;
                                                  +		} else {
                                                  +			window.open(url, target);
                                                  +		}
                                                  +	} else {
                                                  +		// 判断权限,判断是否存在文件
                                                  +		// uuid 要打开的目标文件
                                                  +		$.ajax({
                                                  +			type:'POST',
                                                  +			url:'./jd?cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_viewer_portal_link_perm_check',
                                                  +			dataType : "JSON",
                                                  +			data:{
                                                  +				sid : $("#sid").val(),
                                                  +				uuid:uuid
                                                  +			},
                                                  +			success:function(r) {
                                                  +				switch(r.data.data) {
                                                  +					case 'ok':
                                                  +						window.open("./w?cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_viewer_portal_open_page&uuid=" + uuid + "&sid=" + sid);
                                                  +						break;
                                                  +					case 'noPerm':
                                                  +						$.simpleAlert('无权限访问', 'info');
                                                  +						break;
                                                  +					case 'notFound':
                                                  +						$.simpleAlert('文件未找到', 'info');
                                                  +						break;
                                                  +					case 'notPublish':
                                                  +						$.simpleAlert('文件未发布,无法访问', 'info');
                                                  +						break;
                                                  +					default:
                                                  +						break;
                                                  +				}
                                                  +			}
                                                  +		})
                                                  +	}
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.methods.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.methods.js
                                                  new file mode 100644
                                                  index 00000000..9c0b5b4a
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.methods.js
                                                  @@ -0,0 +1,211 @@
                                                  +/**designer.methods.js**/
                                                  +/** 添加设置设计器线条样式方法*/
                                                  +Designer.addFunction("setLineStyleById", function(id, style,isValidate,shape) {
                                                  +	var selected = getSelectedArray(id);
                                                  +	if(isValidate!=undefined){
                                                  +		selected=putShapeToArray(shape);
                                                  +	}
                                                  +	if (selected.length == 0) {
                                                  +		return;
                                                  +	}
                                                  +	var familyShapes = Utils.getFamilyShapes(selected);
                                                  +	selected = selected.concat(familyShapes);
                                                  +	for (var i = 0; i < selected.length; i++) {
                                                  +		var shape = selected[i];
                                                  +		//重新赋一下,因为有些新建的图形可能没有lineStyle属性
                                                  +		shape.lineStyle = Utils.copy(shape.lineStyle);
                                                  +		if ( typeof style.lineWidth != "undefined") {
                                                  +			shape.lineStyle.lineWidth = style.lineWidth;
                                                  +		}
                                                  +		if ( typeof style.lineColor != "undefined") {
                                                  +			shape.lineStyle.lineColor = style.lineColor;
                                                  +		}
                                                  +		if ( typeof style.lineStyle != "undefined") {
                                                  +			shape.lineStyle.lineStyle = style.lineStyle;
                                                  +		}
                                                  +		//连接线和形状不同的样式
                                                  +		if (shape.name == "linker") {
                                                  +			//如果是连接线
                                                  +			if ( typeof style.beginArrowStyle != "undefined") {
                                                  +				shape.lineStyle.beginArrowStyle = style.beginArrowStyle;
                                                  +				Schema.linkerDefaults.lineStyle.beginArrowStyle = style.beginArrowStyle;
                                                  +			}
                                                  +			if ( typeof style.endArrowStyle != "undefined") {
                                                  +				shape.lineStyle.endArrowStyle = style.endArrowStyle;
                                                  +				Schema.linkerDefaults.lineStyle.endArrowStyle = style.endArrowStyle;
                                                  +			}
                                                  +			//连接线线条不可以为0
                                                  +			if (shape.lineStyle.lineWidth == 0) {
                                                  +				shape.lineStyle.lineWidth = 1;
                                                  +			}
                                                  +			Designer.painter.renderLinker(shape);
                                                  +		} else {
                                                  +			Designer.painter.renderShape(shape);
                                                  +		}
                                                  +	}
                                                  +	Model.updateMulti(selected);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:修改填充样式
                                                  + */
                                                  +Designer.addFunction("setFillStyleById", function(id, style,isValidate,shape) {
                                                  +	var selected = getSelectedArray(id);
                                                  +	if(isValidate!=undefined){
                                                  +		selected=putShapeToArray(shape);
                                                  +	}
                                                  +	if (selected.length == 0) {
                                                  +		return;
                                                  +	}
                                                  +	var changed = [];
                                                  +	for (var i = 0; i < selected.length; i++) {
                                                  +		var shape = selected[i];
                                                  +		if (shape.name != "linker") {
                                                  +			//重新赋一下,因为有些新建的图形可能没有fillStyle属性
                                                  +			shape.fillStyle = Utils.copy(shape.fillStyle);
                                                  +			var type = shape.fillStyle.type;
                                                  +			if ( typeof style.type != "undefined") {
                                                  +				//如果要修改填充类型,则要进行初始化
                                                  +				changeFillType(shape, style.type);
                                                  +				type = style.type;
                                                  +			}
                                                  +			if ( typeof style.color != "undefined") {
                                                  +				if (type == "solid") {
                                                  +					//纯色,只可以修改color属性
                                                  +					shape.fillStyle.color = style.color;
                                                  +				} else if (type == "gradient") {
                                                  +					shape.fillStyle.beginColor = GradientHelper.getLighterColor(style.color);
                                                  +					shape.fillStyle.endColor = GradientHelper.getDarkerColor(style.color);
                                                  +				}
                                                  +			}
                                                  +			if (type == "gradient") {
                                                  +				//渐变的,可修改渐变色等属性
                                                  +				if ( typeof style.beginColor != "undefined") {
                                                  +					shape.fillStyle.beginColor = style.beginColor;
                                                  +				}
                                                  +				if ( typeof style.endColor != "undefined") {
                                                  +					shape.fillStyle.endColor = style.endColor;
                                                  +				}
                                                  +				if ( typeof style.gradientType != "undefined") {
                                                  +					shape.fillStyle.gradientType = style.gradientType;
                                                  +					if (style.gradientType == "linear") {
                                                  +						delete shape.fillStyle.radius;
                                                  +						shape.fillStyle.angle = 0;
                                                  +					} else {
                                                  +						delete shape.fillStyle.angle;
                                                  +						shape.fillStyle.radius = 0.75;
                                                  +					}
                                                  +				}
                                                  +				if ( typeof style.radius != "undefined") {
                                                  +					shape.fillStyle.radius = style.radius;
                                                  +				}
                                                  +				if ( typeof style.angle != "undefined") {
                                                  +					shape.fillStyle.angle = style.angle;
                                                  +				}
                                                  +
                                                  +			}
                                                  +			if (type == "image") {
                                                  +				//图片类型
                                                  +				if ( typeof style.display != "undefined") {
                                                  +					shape.fillStyle.display = style.display;
                                                  +				}
                                                  +				if ( typeof style.fileId != "undefined") {
                                                  +					//如果要修改图片地址,删除原有的图片元素,绘制时重新加载
                                                  +					shape.fillStyle.fileId = style.fileId;
                                                  +				}
                                                  +				if ( typeof style.imageW != "undefined") {
                                                  +					shape.fillStyle.imageW = style.imageW;
                                                  +				}
                                                  +				if ( typeof style.imageH != "undefined") {
                                                  +					shape.fillStyle.imageH = style.imageH;
                                                  +				}
                                                  +			}
                                                  +			Designer.painter.renderShape(shape);
                                                  +			changed.push(shape);
                                                  +		}
                                                  +	}
                                                  +	Model.updateMulti(changed);
                                                  +	/**
                                                  +	 * 修改一个图形的填充类型
                                                  +	 */
                                                  +	function changeFillType(shape, type) {
                                                  +		//只有图形具有填充样式
                                                  +		var oldStyle = shape.fillStyle;
                                                  +		if (oldStyle.type != type) {
                                                  +			var newStyle = {
                                                  +				type : type
                                                  +			};
                                                  +			//只调整不是此类型的图形
                                                  +			if (type == "solid") {
                                                  +				//改成纯色
                                                  +				if (oldStyle.type == "gradient") {
                                                  +					//以前是渐变的
                                                  +					var newColor = GradientHelper.getDarkerColor(oldStyle.beginColor);
                                                  +					newStyle.color = newColor;
                                                  +				} else {
                                                  +					newStyle.color = "255,255,255";
                                                  +				}
                                                  +			} else if (type == "gradient") {
                                                  +				//改成渐变的
                                                  +				var oldColor = oldStyle.color;
                                                  +				if (oldStyle.type != "solid") {
                                                  +					//如果以前不是纯色的
                                                  +					oldColor = "255,255,255";
                                                  +				}
                                                  +				newStyle.gradientType = "linear";
                                                  +				newStyle.angle = 0;
                                                  +				newStyle.beginColor = GradientHelper.getLighterColor(oldColor);
                                                  +				newStyle.endColor = GradientHelper.getDarkerColor(oldColor);
                                                  +			} else if (type == "image") {
                                                  +				newStyle.fileId = "";
                                                  +				newStyle.display = "fill";
                                                  +				newStyle.imageW = 10;
                                                  +				newStyle.imageH = 10;
                                                  +			}
                                                  +			shape.fillStyle = newStyle;
                                                  +		}
                                                  +	}
                                                  +});
                                                  +
                                                  +/**
                                                  + * 通过Name获取一条数据属性
                                                  + */
                                                  +Designer.addFunction("addDataAttributeById", function(elementId, attr){
                                                  +	var shape = Model.getShapeById(elementId);
                                                  +	if(!shape.dataAttributes){
                                                  +		shape.dataAttributes = [];
                                                  +	}
                                                  +	attr.id = Utils.newId();
                                                  +	attr.category = "custom";
                                                  +	shape.dataAttributes.push(attr);
                                                  +	MessageSource.doWithoutUpdateDock(function(){
                                                  +		Model.update(shape);
                                                  +	});
                                                  +	Designer.painter.renderShape(shape);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 添加数据属性
                                                  + */
                                                  +Designer.addFunction("updateDataAttributeById", function(elementId, newAttr){
                                                  +	var shape = Model.getShapeById(elementId);
                                                  +	if(!shape.dataAttributes){
                                                  +		shape.dataAttributes = [];
                                                  +	}
                                                  +	var changed = false;
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if(attr.id == newAttr.id){
                                                  +			shape.dataAttributes[i] = newAttr;
                                                  +			changed = true;
                                                  +		}
                                                  +	}
                                                  +	if(!changed){
                                                  +		return;
                                                  +	}
                                                  +	MessageSource.doWithoutUpdateDock(function(){
                                                  +		Model.update(shape);
                                                  +	});
                                                  +	Designer.painter.renderShape(shape);
                                                  +});
                                                  +
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.ui.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.ui.js
                                                  new file mode 100644
                                                  index 00000000..809717e5
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.ui.js
                                                  @@ -0,0 +1,490 @@
                                                  +$(function() {
                                                  +			// 版本管理
                                                  +			// if ((isView == 1 || isView == true) && perms.indexOf("w") == -1 && process.processDefId == "") {
                                                  +			// 	$("#toolbar_designer_version_no").off("click.coe.openVersion").css({"cursor": "default"});
                                                  +			// 	$("#toolbar_wfversion_info_status").off("click.coe.openVersion").css({"cursor": "default"});
                                                  +			// } else {
                                                  +			// 	$("#toolbar_designer_version_no").on("click.coe.openVersion",function() {openDesignerVersionManager();});
                                                  +			// 	$("#toolbar_wfversion_info_status").on("click.coe.openVersion",function() {openDesignerVersionManager();});
                                                  +			// }
                                                  +
                                                  +			$("div.selected").removeClass("selected");
                                                  +			
                                                  +			//形状属性
                                                  +			$("#toolbar-shape-attr").unbind("click").bind("click", function() {
                                                  +				if($("#toolbar-shape-attr").hasClass("disabled")) {
                                                  +					//
                                                  +				} else {
                                                  +					BPMNBiz.showPropertiesDialog(); //打开形状属性
                                                  +				}
                                                  +				
                                                  +			});
                                                  +			//流程属性
                                                  +			$("#toolbar-global-prop").unbind("click").bind("click", function() {
                                                  +				BPMNBiz.showPropertiesDialog(true);  //打开流程属性
                                                  +			});
                                                  +});
                                                  +
                                                  +/**
                                                  + * 打开一个历史版本
                                                  + */
                                                  +Dock.openHistory = function(definition) {
                                                  +	if (this.currentDefinition == null) {
                                                  +		this.currentDefinition = $.extend(true, {}, Model.define);
                                                  +	}
                                                  +	Utils.unselect();
                                                  +	Model.historyDefine = definition;
                                                  +	Designer.open(definition);
                                                  +
                                                  +	// 取消快捷键
                                                  +	Designer.hotkey.cancel();
                                                  +	Designer.op.cancel();
                                                  +	$("#menu_bar").children().addClass("readonly");
                                                  +	$(".diagram_title").addClass("readonly");
                                                  +	$(".dock_buttons").children().addClass("disabled");
                                                  +	$("#dock_btn_history").removeClass("disabled");
                                                  +	$(".panel_box").addClass("readonly");
                                                  +
                                                  +	// 禁用保存
                                                  +	$("#bar_save").button("disable");
                                                  +	$("#bar_save").unbind("click");
                                                  +	// 禁用插入和视图
                                                  +	$("#bar_view").button("disable");
                                                  +	$("#bar_insert").button("disable");
                                                  +	// 禁用校验
                                                  +	$("#dock_btn_validate").unbind("click");
                                                  +	// 中止监听
                                                  +	// CLB.stopListen();
                                                  +};
                                                  +
                                                  +/**
                                                  + * 关闭历史版本
                                                  + */
                                                  +Dock.closeHistory = function() {
                                                  +	if (this.currentDefinition != null) {
                                                  +		Designer.open(this.currentDefinition);
                                                  +		this.currentDefinition = null;
                                                  +		this.activeOperation();
                                                  +	}
                                                  +
                                                  +	// 激活保存事件
                                                  +	$("#bar_save").button("enable");
                                                  +	$("#bar_save").unbind("click").bind("click", function() {
                                                  +				saveDesigner();
                                                  +			});
                                                  +	// 激活视图和插入
                                                  +	$("#bar_view").button("enable");
                                                  +	$("#bar_insert").button("enable");
                                                  +	$("#moreShapes").removeAttr("disabled");
                                                  +	// //激活校验事件
                                                  +	// $("#dock_btn_validate").bind("click", function() {
                                                  +	// validateBPMN(false);
                                                  +	// });
                                                  +};
                                                  +
                                                  +/**
                                                  + * 加载历史版本
                                                  + */
                                                  +/**太费时间,暂时先注掉,后期优化
                                                  +Dock.loadHistorys = function() {
                                                  +
                                                  +	$("#spinner_play_speed").spinner({
                                                  +				min : 0.5,
                                                  +				max : 3.0,
                                                  +				unit : "s",
                                                  +				step : 0.5,
                                                  +				value : 5,
                                                  +				onChange : function(val) {
                                                  +
                                                  +				}
                                                  +			});
                                                  +
                                                  +	$("#spinner_play_speed").spinner("setValue", "0.5s");
                                                  +
                                                  +	if (chartId == "") {
                                                  +		$("#history_container")
                                                  +				.html("<div style='padding: 20px 10px;'>没有历史</div>");
                                                  +		return;
                                                  +	}
                                                  +	// if($("#history_versions li").length > 0) {
                                                  +	// return;
                                                  +	// }
                                                  +	$.ajax({
                                                  +		url : encodeURI("./jd?sid="
                                                  +				+ $("#sid").val()
                                                  +				+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_history_version_json_data"),
                                                  +		// 发送获取versions的请求
                                                  +		data : {
                                                  +			type : type,
                                                  +			appId : appId,
                                                  +			chartId : chartId,
                                                  +			processDefId : process.processDefId
                                                  +		},
                                                  +		dataType : "json",
                                                  +		success : function(resObj) {
                                                  +			if (resObj.result != "ok") {
                                                  +				// $.simpleAlert("历史版本获取失败", "error", 2000);
                                                  +			}
                                                  +			var data = resObj.data;
                                                  +			Dock.historyVersions = data;
                                                  +
                                                  +			if (data.versions.length == 0) {
                                                  +				$("#history_container")
                                                  +						.html('<div style="padding: 20px 10px;">没有历史</div>');
                                                  +			} else {
                                                  +				$("#history_container")
                                                  +						.html('<ul class="timeline" id="history_versions"></ul>');
                                                  +				var users = data.users;
                                                  +				for (var i = 0, k = data.versions.length; i < data.versions.length; i++, k--) {
                                                  +					var v = data.versions[i];
                                                  +					var num = i == 0 ? 0 : k;
                                                  +					var newVersion = $('<li vid="' + v.versionId + '" def="'
                                                  +							+ v.definitionId + '" ind="' + i + '" number="'
                                                  +							+ num + '" >' + '<div class="time">'
                                                  +							+ v.updateTimeAlias
                                                  +							+ (v.interval ? ('&nbsp;持续 ' + v.interval) : '')
                                                  +							+ '</div>' + '<div class="number">' + k + '</div>'
                                                  +							+ '<div class="content">'
                                                  +							+ '<div class="version_name"></div>' + '</div>'
                                                  +							+ '</li>').appendTo($("#history_versions"));
                                                  +					var nameContainer = newVersion.children(".content")
                                                  +							.children(".version_name");
                                                  +					for (var j = 0; j < v.userIds.length; j++) {
                                                  +						var userId = v.userIds[j];
                                                  +						nameContainer.append("<div>" + v.userNames + "</div>"); // users[userId]
                                                  +					}
                                                  +					// var remarkContainer = $("<div class='history_remark'><div
                                                  +					// class='remark_container'><div
                                                  +					// class='remark_text'></div><a
                                                  +					// onclick='Dock.editHistoryRemark(event, \"" + v.versionId
                                                  +					// + "\")' href='javascript:'>注释</a></div></div>")
                                                  +					// .appendTo($("li[vid="+v.versionId+"] .content"));
                                                  +					// if (v.remark) {
                                                  +					// remarkContainer.find(".remark_text").text(v.remark);
                                                  +					// }
                                                  +					// remarkContainer.append("<div
                                                  +					// class='edit_container'><textarea class='input_text'
                                                  +					// onclick='event.stopPropagation()'></textarea><a
                                                  +					// href='javascript:' class='save'>保存</a>&nbsp;&nbsp;<a
                                                  +					// href='javascript:' class='cancel'>取消</a></div>");
                                                  +				}
                                                  +				Dock.resetVersions();
                                                  +			}
                                                  +		},
                                                  +		beforeSend : function(xhr) {
                                                  +			// 显示正在加载的图片
                                                  +			$("#history_container")
                                                  +					.html('<img style="position:absolute;left:42%;top:35%" src="../apps/_bpm.platform/js/designer/themes/default/images/designer/loading.gif">');
                                                  +		}
                                                  +	});
                                                  +};
                                                  +
                                                  +
                                                  +**/
                                                  +/* 显示右侧窗口 */
                                                  +Dock.showView = function(name) {
                                                  +	if (name == "attribute") {
                                                  +		changeArributeByShape();
                                                  +	}
                                                  +	if ($("#dock_btn_" + name).button("isDisabled")) {
                                                  +		return;
                                                  +	}
                                                  +	$(".dock_view").hide();
                                                  +	$(".dock_view_" + name).show();
                                                  +	// 记录页面用户的操作
                                                  +	$(".dock_buttons").children().removeClass("selected");
                                                  +	$("#dock_btn_" + name).addClass("selected");
                                                  +	if (Dock.currentView == "history" && name != "history") {
                                                  +		Dock.closeHistory();
                                                  +	}
                                                  +	if (name == "history") {
                                                  +		//Dock.loadHistorys();
                                                  +	}
                                                  +	// if (name != "attribute") {
                                                  +	// this.currentView = name;
                                                  +	// }
                                                  +	this.currentView = name;
                                                  +	// setCookie(chartId, name+",true");
                                                  +	this.update(true);
                                                  +	// AWS增加的内容
                                                  +	// 强制显示导航小窗口
                                                  +	// $(".dock_view_navigator").show();
                                                  +};
                                                  +
                                                  +/**
                                                  + * 展示历史版本
                                                  + */
                                                  +Dock.showHistoryVersion = function(defId) {
                                                  +	// AWS增加的内容开始
                                                  +	var versionNo = $("#history_versions").children(".selected").attr("number");
                                                  +	// AWS增加的内容结束
                                                  +	$("#spinner_play_speed").button("disable");
                                                  +	$("#btn_history_play").button("disable");
                                                  +	$("#btn_history_restore").button("disable");
                                                  +	$("#moreShapes").attr("disabled", "disabled");
                                                  +	Dock.cancelHistoryRemark();
                                                  +	$.ajax({
                                                  +		url : encodeURI("./w?sid="
                                                  +				+ sessionId
                                                  +				+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_history_define_json_data"),
                                                  +		data : {
                                                  +			type : type,
                                                  +			chartId : chartId,
                                                  +			appId : appId,
                                                  +			processDefId : process.processDefId,
                                                  +			ver : versionNo
                                                  +		},
                                                  +		dataType : "json",
                                                  +		success : function(resObj) {
                                                  +			if (resObj.result != "ok") {
                                                  +				// $.simpleAlert("历史版本获取失败", "error", 2000);
                                                  +			}
                                                  +			var definition = resObj.data;
                                                  +			Dock.openHistory(definition);
                                                  +			if ($("#history_versions").children(".selected").attr("ind") != "0") {
                                                  +				$("#spinner_play_speed").button("enable");
                                                  +				$("#btn_history_play").button("enable");
                                                  +				$("#btn_history_restore").button("enable");
                                                  +				$("#moreShapes").removeAttr("disabled");
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +};
                                                  +
                                                  +/**
                                                  + * 播放一个版本
                                                  + */
                                                  +Dock.playOneVersion = function(index, msgIndex) {
                                                  +	var current = $("#history_versions").children("li[ind=" + index + "]");
                                                  +	$("#history_versions").children(".selected").removeClass("selected");
                                                  +	current.addClass("selected").addClass("playing");
                                                  +	$(".ico_playing").remove();
                                                  +	current.append("<div class='ico ico_playing'></div>");
                                                  +
                                                  +	var top = current.position().top;
                                                  +	if (top < 0) {
                                                  +		$("#history_versions").scrollTop($("#history_versions").scrollTop()
                                                  +				+ top);
                                                  +	}
                                                  +
                                                  +	var time = $("#spinner_play_speed").spinner("getValue") * 1000;
                                                  +	var version = Dock.historyVersions.versions[index];
                                                  +	if (version.messages.length != 0) {
                                                  +		var messageStr = version.messages[msgIndex];
                                                  +		var messages = messageStr;
                                                  +		// JSON.parse(messageStr);
                                                  +		MessageSource.receive(messages);
                                                  +		if (index == 0 && msgIndex == version.messages.length - 1) {
                                                  +			this.pauseVersions();
                                                  +		} else {
                                                  +			if (msgIndex < version.messages.length - 1) {
                                                  +				msgIndex++;
                                                  +			} else {
                                                  +				index = index - 1;
                                                  +				msgIndex = 0;
                                                  +			}
                                                  +			this.playingTimeout = setTimeout(function() {
                                                  +						Dock.playOneVersion(index, msgIndex);
                                                  +					}, time);
                                                  +		}
                                                  +	} else { // 如果不存在操作message(用户打开设计器后没有操作,直接保存)
                                                  +		if (index == 0) {
                                                  +			this.pauseVersions();
                                                  +		} else {
                                                  +			index = index - 1;
                                                  +			this.playingTimeout = setTimeout(function() {
                                                  +						Dock.playOneVersion(index, msgIndex);
                                                  +					}, time);
                                                  +		}
                                                  +	}
                                                  +
                                                  +};
                                                  +
                                                  +/**
                                                  + * 编辑版本注释
                                                  + * 
                                                  + * @param {}
                                                  + *            event
                                                  + */
                                                  +Dock.editHistoryRemark = function(event, versionId) {
                                                  +	event.stopPropagation();
                                                  +	var versionDom = $("#history_versions").children("li[vid=" + versionId
                                                  +			+ "]");
                                                  +	versionDom.find(".remark_container").hide();
                                                  +	var currentRemark = versionDom.find(".remark_text").text();
                                                  +	var editContainer = versionDom.find(".edit_container");
                                                  +	editContainer.show();
                                                  +	editContainer.children("textarea").val(currentRemark).select();
                                                  +	editContainer.children(".save").bind("click", function(e) {
                                                  +		e.stopPropagation();
                                                  +		var newRemark = editContainer.children("textarea").val();
                                                  +		versionDom.find(".remark_text").text(newRemark);
                                                  +		versionDom.find(".remark_container").show();
                                                  +		editContainer.hide();
                                                  +		if (newRemark != currentRemark) {
                                                  +			$.ajax({
                                                  +				url : encodeURI("./w?sid=" + sessionId
                                                  +						+ "&appId=" + $("#appId").val()
                                                  +						+ "&cmd=CONSOLE_M_PROCESS_DESIGNER_REMARK_UPDATE"
                                                  +						+ "&processDefId=" + process.processDefId
                                                  +						+ "&versionId=" + versionId
                                                  +						+ "&remark=" + newRemark),
                                                  +				success : function(data) {
                                                  +
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +	});
                                                  +	editContainer.children(".cancel").bind("click", function(e) {
                                                  +				e.stopPropagation();
                                                  +				Dock.cancelHistoryRemark();
                                                  +			});
                                                  +};
                                                  +/**
                                                  + * 恢复版本
                                                  + */
                                                  +Dock.restoreVersion = function() {
                                                  +	$.confirm({
                                                  +				content : "确定将选中的历史记录恢复为新的版本吗?",
                                                  +
                                                  +				onConfirm : function() {
                                                  +					var selected = $("#history_versions").children(".selected");
                                                  +					if (selected.length) {
                                                  +						coeBiz.restoreVersion(selected.attr("number"));
                                                  +					}
                                                  +				}
                                                  +			});
                                                  +};
                                                  +
                                                  +/**
                                                  + * 进入演示视图
                                                  + */
                                                  +Dock.enterPresentation = function() {
                                                  +	if (document.fullscreenElement || document.webkitFullscreenElement
                                                  +			|| document.mozFullScreenElement) {
                                                  +		$.simpleAlert("当前为全屏状态不能进入演示,请退出全屏状态后重试", "info", 2000);
                                                  +		$("#simplealert>.msg").css("top", "15px");
                                                  +		return;
                                                  +	}
                                                  +	$("#designer").bind('webkitfullscreenchange', function(e) {
                                                  +				Dock.manageFullScreen(true);
                                                  +			});
                                                  +	$(document).bind('mozfullscreenchange', function(e) {
                                                  +				Dock.manageFullScreen(true);
                                                  +			}).bind('fullscreenchange', function(e) {
                                                  +				Dock.manageFullScreen(true);
                                                  +			});
                                                  +	Dock.fullScreen(Utils.getDomById("designer"), true);
                                                  +
                                                  +};
                                                  +
                                                  +/**
                                                  + * 进入全屏视图
                                                  + */
                                                  +Dock.enterFullScreen = function() {
                                                  +	if (document.fullscreenElement || document.webkitFullscreenElement
                                                  +			|| document.mozFullScreenElement) {
                                                  +		$.simpleAlert("当前已为全屏状态", "info", 2000);
                                                  +		$("#simplealert>.msg").css("top", "15px");
                                                  +		return;
                                                  +	}
                                                  +	Dock.fullScreen(document.documentElement);
                                                  +};
                                                  +
                                                  +Dock.manageFullScreen = function(presentation) {
                                                  +	var designer = Utils.getDomById("designer");
                                                  +	if (document.fullscreenElement || document.webkitFullscreenElement
                                                  +			|| document.mozFullScreenElement) {
                                                  +		// 如果进入全屏状态
                                                  +		$("#shape_panel").addClass("readonly");
                                                  +		$("#designer_viewport").addClass("readonly");
                                                  +		$(window).unbind("resize.designer");
                                                  +		$("#designer_layout").height(window.screen.height);
                                                  +		// 取消快捷键
                                                  +		Designer.hotkey.cancel();
                                                  +		Designer.op.cancel();
                                                  +		// 隐藏Dock
                                                  +		$("#dock").hide();
                                                  +		$(".dock_view").hide();
                                                  +		Designer.contextMenu.destroy();
                                                  +		Designer.op.canvasFreeDraggable();
                                                  +
                                                  +		if (presentation) {
                                                  +			$("#dock").show();
                                                  +			$("#dock_btn_validate").hide();
                                                  +			$("#btn_history_restore").hide();
                                                  +		}
                                                  +	} else {
                                                  +		$("#shape_panel").removeClass("readonly");
                                                  +		$("#designer_viewport").removeClass("readonly");
                                                  +		Designer.initialize.initLayout();
                                                  +		Designer.hotkey.init();
                                                  +		Designer.op.init();
                                                  +		$("#dock").show();
                                                  +		if (Dock.currentView != "") {
                                                  +			Dock.showView(Dock.currentView);
                                                  +		}
                                                  +		Designer.contextMenu.init();
                                                  +		$("#designer").unbind('webkitfullscreenchange');
                                                  +		$(document).unbind('mozfullscreenchange').unbind('fullscreenchange');
                                                  +		if (presentation) {
                                                  +			$("#dock_btn_validate").show();
                                                  +			$("#btn_history_restore").show();
                                                  +		}
                                                  +	}
                                                  +};
                                                  +
                                                  +/**
                                                  + * 进入全屏
                                                  + */
                                                  +Dock.fullScreen = function(element, presentation) {
                                                  +	if (element.requestFullscreen) {
                                                  +		element.requestFullscreen();
                                                  +	} else if (element.mozRequestFullScreen) {
                                                  +		element.mozRequestFullScreen();
                                                  +	} else if (element.webkitRequestFullscreen) {
                                                  +		element.webkitRequestFullscreen();
                                                  +	} else if (element.msRequestFullscreen) {
                                                  +	    element.msRequestFullscreen();
                                                  +	} else {
                                                  +		// 无法进入全屏,提示错误
                                                  +		if (presentation) {
                                                  +			$("#fullscreen_tip").find(".t").text("由于您的浏览器限制,无法进入演示视图。");
                                                  +		} else {
                                                  +			$("#fullscreen_tip").find(".t").text("无法进入全屏视图,您可以按(F11)进入。");
                                                  +		}
                                                  +		$("#fullscreen_tip").fadeIn();
                                                  +	}
                                                  +};
                                                  +
                                                  +// coeUI修改
                                                  +var CoeUI = {
                                                  +	initNavigationEye : function() {
                                                  +		var layoutW = $("#designer_layout").width();
                                                  +		var desiger = $("#designer").width();
                                                  +		var designerHeight = $("#designer").height();
                                                  +		var viewHeight = $("#navigation_view").height();
                                                  +		// 总宽度减去可视区域的宽度,得到滚动条宽度
                                                  +		var navleft = 0;// layoutW-desiger;
                                                  +		var navtop = designerHeight - viewHeight;
                                                  +		var dockLeft = navleft - 164;
                                                  +		var dockTop = navtop - 2;
                                                  +		$("#navigation_view").css("left", dockLeft);
                                                  +		$("#navigation_view").css("top", dockTop);
                                                  +		$("#navigation_view").css("width", 162);
                                                  +		$("#navigation_view").css("height", 255);
                                                  +
                                                  +		// Dock.showView("navigator");
                                                  +	}
                                                  +}
                                                  +
                                                  +// UI更多图形管理
                                                  +// UI.showShapesManage = function(){
                                                  +// $("#shapes_dialog").dialog({
                                                  +// buttons:[
                                                  +// {text:'确定',cls:"blue",handler:function(){alert(88);}},
                                                  +// {text:'取消',handler:function(){alert(22);}}
                                                  +// ]
                                                  +// });
                                                  +// }
                                                  +
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.userdefined.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.userdefined.js
                                                  new file mode 100644
                                                  index 00000000..8ba0ac02
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.userdefined.js
                                                  @@ -0,0 +1,311 @@
                                                  +//**元素默认的名称,统一定义,方便国际化**//
                                                  +var startEventText="开始事件";
                                                  +var messageStartEventText="消息开始事件";
                                                  +var timerStartEventText="时间开始事件";
                                                  +var signalStartEventText="信号开始事件";
                                                  +var endEventText="结束事件";
                                                  +var terminateEndEventText="终止事件";
                                                  +var messageEndEventText="消息结束事件";
                                                  +var signalEndEventText="信号结束事件";
                                                  +var errorEndEventText="错误结束事件";
                                                  +var taskText="任务";
                                                  +var userTaskText="人工任务";
                                                  +var serviceTaskText="系统任务";
                                                  +var scriptTaskText="脚本任务";
                                                  +var manualTaskText="手工任务";
                                                  +var businessRuleTaskText="业务规则任务";
                                                  +var sendTaskText="发送任务";
                                                  +var receiveTaskText="接收任务";
                                                  +var gatewayText="网关";
                                                  +var parallelGatewayText="并行网关";
                                                  +var inclusiveGatewayText="包容网关";
                                                  +var exclusiveGatewayText="排他网关";
                                                  +var eventBasedGatewayText="事件网关";
                                                  +var complexGatewayText="复杂网关";
                                                  +var intermediateCatchEventText="捕获中间事件";
                                                  +var timerIntermediateCatchEventText="捕获时间事件";
                                                  +var messageIntermediateCatchEventText="捕获消息事件";
                                                  +var signalIntermediateCatchEventText="捕获信号事件";
                                                  +var messageIntermediateThrowingEventText="抛出消息事件";
                                                  +var signalIntermediateThrowingEventText="抛出信号事件";
                                                  +var intermediateThrowingEventText="抛出中间事件";
                                                  +var boundaryinterrputingeventText="边界事件";
                                                  +var compensationBoundaryInterrputingEventText="边界补偿事件";
                                                  +var errorBoundaryInterrputingEventText="边界错误事件";
                                                  +var messageBoundaryInterrputingEventText="边界消息事件";
                                                  +var signalBoundaryInterrputingEventText="边界信号事件";
                                                  +var callActivityCallingProcessText="调用子流程";
                                                  +var subProcessText="子流程";
                                                  +var transactionText="事务块";
                                                  +var textAnnotationText="注释";
                                                  +var groupText="组";
                                                  +var horizontalPoolText="泳池";
                                                  +var horizontalLaneText="泳道";
                                                  +var verticalPoolText="泳池";
                                                  +var verticalLaneText="泳道";
                                                  +
                                                  +//default color
                                                  +
                                                  +var startEventLineColor = "0,100,0";
                                                  +var startEventFillStyleBeginColor = "0,255,0";
                                                  +var startEventFillStyleBndColor = "0,180,0";
                                                  +var startEventContentColor = "145,255,145";
                                                  +
                                                  +//边界事件
                                                  +/*var boundaryEventLineColor = "47,79,0";
                                                  +var boundaryEventFillStyleBeginColor = "170,255,43";
                                                  +var boundaryEventFillStyleBndColor = "146,242,0";
                                                  +var boundaryEventContentColor = "230,255,191";*/
                                                  +
                                                  +var boundaryEventLineColor = "100,0,0";
                                                  +var boundaryEventFillStyleBeginColor = "241,113,99";
                                                  +var boundaryEventFillStyleBndColor = "150,28,14";
                                                  +var boundaryEventContentColor = "242,124,110";
                                                  +
                                                  +
                                                  +//捕获时间事件
                                                  +/*var intermediateCatchEventLineColor = "47,79,0";
                                                  +var intermediateCatchEventFillStyleBeginColor = "170,255,43";
                                                  +var intermediateCatchEventFillStyleBndColor = "146,242,0";
                                                  +var intermediateCatchEventContentColor = "230,255,191";
                                                  +
                                                  +var intermediateCatchEventLineColor = "84,60,18";
                                                  +var intermediateCatchEventFillStyleBeginColor = "255,204,120";
                                                  +var intermediateCatchEventFillStyleBndColor = "255,204,0";
                                                  +var intermediateCatchEventContentColor =  "240,230,140";
                                                  +*/
                                                  +var intermediateCatchEventLineColor = "47,79,0";
                                                  +var intermediateCatchEventFillStyleBeginColor = "170,255,43";
                                                  +var intermediateCatchEventFillStyleBndColor = "146,242,0";
                                                  +var intermediateCatchEventContentColor =  "190,250,101";
                                                  +
                                                  +
                                                  +var intermediateThrowingEventLineColor = "98,81,0";
                                                  +var intermediateThrowingEventFillStyleBeginColor = "255,226,183";
                                                  +var intermediateThrowingEventFillStyleBndColor = "255,221,170";
                                                  +var intermediateThrowingEventContentColor = "230,255,191";
                                                  +
                                                  +
                                                  +var userTaskLineColor = "0,100,0";
                                                  +var userTaskFillStyleBeginColor = "153,255,100";
                                                  +var userTaskFillStyleBndColor = "116,218,116";
                                                  +var userTaskContentColor = "";
                                                  +
                                                  +var servicesTaskLineColor = "79,63,0";
                                                  +var servicesTaskFillStyleBeginColor = "255,204,120";
                                                  +var servicesTaskFillStyleBndColor = "255,204,0 ";
                                                  +var servicesTaskContentColor = "145,255,145";
                                                  +
                                                  +var taskLineColor = servicesTaskLineColor;
                                                  +var taskFillStyleBeginColor = servicesTaskFillStyleBeginColor;
                                                  +var taskFillStyleBndColor = servicesTaskFillStyleBndColor;
                                                  +var taskContentColor = servicesTaskContentColor;
                                                  +
                                                  +
                                                  +var gatewayLineColor = "11,108,195";
                                                  +var gatewayFillStyleBeginColor = "157,215,237";
                                                  +var gatewayFillStyleBndColor = "137,157,192";
                                                  +var gatewayContentColor = "193,214,230";
                                                  +
                                                  +var endEventLineColor = "100,0,0";
                                                  +var endEventFillStyleBeginColor = "255,0,0";
                                                  +var endEventFillStyleBndColor = "160,0,0";
                                                  +var endEventContentColor = "";
                                                  +
                                                  +/** 该js中存放扩展设计器功能的相关方法*/
                                                  +
                                                  +var ExtColor = {
                                                  +	//开始节点的颜色
                                                  +	startEventColor : {
                                                  +		lineStyle : {
                                                  +			lineStyle : "solid",
                                                  +			lineColor : "0,100,0" //255,255,255
                                                  +		},
                                                  +		fillStyle : {
                                                  +			type : "gradient",
                                                  +			color : "255,255,255",
                                                  +			gradientType : "linear",
                                                  +			beginColor : "0,255,0",
                                                  +			endColor : "0,180,0",
                                                  +			angle : 0
                                                  +		}
                                                  +	},
                                                  +	endEventColor : {
                                                  +		lineStyle : {
                                                  +			lineStyle : "solid",
                                                  +			lineColor : "100,0,0" //255,255,255
                                                  +		},
                                                  +		fillStyle : {
                                                  +			type : "gradient",
                                                  +			color : "255,255,255",
                                                  +			gradientType : "linear",
                                                  +			beginColor : "255,0,0",
                                                  +			endColor : "160,0,0",
                                                  +			angle : 0
                                                  +		}
                                                  +	},
                                                  +	boundaryEventColor : {
                                                  +		lineStyle : {
                                                  +			lineStyle : "solid",
                                                  +			lineColor : "0,0,0" //255,255,255
                                                  +		},
                                                  +		fillStyle : {
                                                  +			type : "gradient",
                                                  +			color : "255,255,255",
                                                  +			gradientType : "linear",
                                                  +			beginColor : "255,102,51",
                                                  +			endColor : "255,102,51",
                                                  +			angle : 0
                                                  +		}
                                                  +	},
                                                  +	throwingEventColor : {
                                                  +		lineStyle : {
                                                  +			lineStyle : "solid",
                                                  +			lineColor : "0,0,0" //255,255,255
                                                  +		},
                                                  +		fillStyle : {
                                                  +			type : "gradient",
                                                  +			color : "255,255,255",
                                                  +			gradientType : "linear",
                                                  +			beginColor : "255,255,153",
                                                  +			endColor : "255,255,0",
                                                  +			angle : 0
                                                  +		}
                                                  +	},
                                                  +	catchEventColor : {
                                                  +		lineStyle : {
                                                  +			lineStyle : "solid",
                                                  +			lineColor : "0,0,0" //255,255,255
                                                  +		},
                                                  +		fillStyle : {
                                                  +			type : "gradient",
                                                  +			color : "255,255,255",
                                                  +			gradientType : "linear",
                                                  +			beginColor : "153,0,255",
                                                  +			endColor : "153,0,200",
                                                  +			angle : 0
                                                  +		}
                                                  +	},
                                                  +	userTaskColor : {
                                                  +		lineStyle : {
                                                  +			lineStyle : "solid",
                                                  +			lineColor : "0,100,0" //255,255,255
                                                  +		},
                                                  +		fillStyle : {
                                                  +			type : "gradient",
                                                  +			color : "255,255,255",
                                                  +			gradientType : "linear",
                                                  +			beginColor : "153,255,100",
                                                  +			endColor : "116,218,116",
                                                  +			angle : 0
                                                  +		}
                                                  +	},
                                                  +	serviceTaskColor : {
                                                  +		lineStyle : {
                                                  +			lineStyle : "solid",
                                                  +			lineColor : "0,0,0" //255,255,255
                                                  +		},
                                                  +		fillStyle : {
                                                  +			type : "gradient",
                                                  +			color : "255,255,255",
                                                  +			gradientType : "linear",
                                                  +			beginColor : "255,204,120",
                                                  +			endColor : "255,204,0 ",
                                                  +			angle : 0
                                                  +		}
                                                  +	},
                                                  +	taskColor : {
                                                  +		lineStyle : {
                                                  +			lineStyle : "solid",
                                                  +			lineColor : "0,0,0" //255,255,255
                                                  +		},
                                                  +		fillStyle : {
                                                  +			type : "gradient",
                                                  +			color : "255,255,255",
                                                  +			gradientType : "linear",
                                                  +			beginColor : "255,210,140",
                                                  +			endColor : "255,210,110",
                                                  +			angle : 0
                                                  +		}
                                                  +	},
                                                  +	gatewayColor : {
                                                  +		lineStyle : {
                                                  +			lineStyle : "solid",
                                                  +			lineColor : "11,108,195"
                                                  +		},
                                                  +		fillStyle : {
                                                  +			type : "gradient",
                                                  +			color : "255,255,255",
                                                  +			gradientType : "linear",
                                                  +			beginColor : "157,215,237",
                                                  +			endColor : "137,157,192",
                                                  +			angle : 0
                                                  +		}
                                                  +	},
                                                  +	callingprocessColor : {
                                                  +		lineStyle : {
                                                  +			lineStyle : "solid",
                                                  +			lineColor : "0,0,0"
                                                  +		},
                                                  +		fillStyle : {
                                                  +			type : "gradient",
                                                  +			color : "255,255,255",
                                                  +			gradientType : "linear",
                                                  +			beginColor : "201,201,252",
                                                  +			endColor : "160,160,211",
                                                  +			angle : 0
                                                  +		}
                                                  +	}
                                                  +};
                                                  +
                                                  +//操作颜色工具类
                                                  +var ExtCorolUtil = {
                                                  +	setShapeLineStyle : function(shape,name) {
                                                  +		var type = ExtCorolUtil.getShapeType(shape,name);
                                                  +		if (type != "") {
                                                  +			Designer.setLineStyleById(shape.id, eval(type).lineStyle, true, shape);
                                                  +		}
                                                  +	},
                                                  +	setShapeFillStyle : function(shape,name) {
                                                  +		var type = ExtCorolUtil.getShapeType(shape,name);
                                                  +		if (type != "") {
                                                  +			Designer.setFillStyleById(shape.id, eval(type).fillStyle, true, shape);
                                                  +		}
                                                  +	},
                                                  +	getShapeType : function(shape,name) {
                                                  +		var type = "";
                                                  +		if (shape) {
                                                  +			if (shape.name) {
                                                  +				var shapeType = shape.name;
                                                  +				if(name){
                                                  +					shapeType=name;
                                                  +				}
                                                  +				shapeType = shapeType.toLocaleLowerCase();
                                                  +				return type;
                                                  +				//已经作废了,上边定义了颜色,直接修改的bpmn.js文件的定义
                                                  +				if (shapeType.indexOf("startevent") > -1) {//开始事件类
                                                  +					return "ExtColor.startEventColor";
                                                  +				} else if (shapeType.indexOf("endevent") > -1 || shapeType == "terminate") {//结束节点
                                                  +					return "ExtColor.endEventColor";
                                                  +				} else if (shapeType.indexOf("boundary") > -1) {//边界事件
                                                  +					return "ExtColor.boundaryEventColor";
                                                  +				} else if (shapeType.indexOf("throwingevent") > -1) {//中间抛出事件
                                                  +					return "ExtColor.throwingEventColor";
                                                  +				} else if (shapeType.indexOf("catchevent") > -1) {//中间捕获事件
                                                  +					return "ExtColor.catchEventColor";
                                                  +				} else if (shapeType == "usertask") {//UserTask
                                                  +					return "ExtColor.userTaskColor";
                                                  +				} else if (shapeType == "servicetask") {//serviceTask
                                                  +					return "ExtColor.serviceTaskColor";
                                                  +				}else if (shapeType.indexOf("gateway")>-1) {//gateway
                                                  +					return "ExtColor.gatewayColor";
                                                  +				}else if(shapeType.indexOf("callingprocess")>-1){
                                                  +					return "ExtColor.callingprocessColor";
                                                  +				}else if(shapeType.indexOf("task")>-1){
                                                  +					return "ExtColor.taskColor";
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		return type;
                                                  +	}
                                                  +};
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.schema.customdefine.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.schema.customdefine.js
                                                  new file mode 100644
                                                  index 00000000..cd8765b6
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.schema.customdefine.js
                                                  @@ -0,0 +1,168 @@
                                                  +function openCustomDefineDialog() {
                                                  +	var shape = Utils.getSelected()[0];
                                                  +	var shapeName = shape.name;
                                                  +	var schemaName = shapeName;
                                                  +	var shapeNameCustom = "";
                                                  +	if (shapeName.indexOf("_custom") != -1) {
                                                  +		schemaName = shapeName.substring(0, shapeName.indexOf("_"));
                                                  +		shapeNameCustom = shapeName.substring(shapeName.indexOf("_") + 1, shapeName.lastIndexOf("_"));
                                                  +	}
                                                  +	
                                                  +	$("#custom_define_name").val(schemaName);
                                                  +	$("#custom_define_name_custom").val(shapeNameCustom);
                                                  +	$("#custom_define_title").val(shape.title);
                                                  +	$("#custom_define_text").val(shape.text);
                                                  +	$("#custom_define_w").val(shape.props.w);
                                                  +	$("#custom_define_h").val(shape.props.h);
                                                  +	var schemaShape;
                                                  +	if (Schema.shapes[schemaName + "_" + shapeNameCustom + "_custom"] != undefined) {
                                                  +		schemaShape = Schema.shapes[schemaName + "_" + shapeNameCustom + "_custom"];
                                                  +	} else {
                                                  +		schemaShape = Schema.shapes[schemaName];
                                                  +	}
                                                  +	if (schemaShape == undefined || schemaShape.resizeable == undefined) {
                                                  +		$("#custom_define_resizeable_1").check("option", "checked", true);
                                                  +	} else if (schemaShape.resizeable == "1") {
                                                  +		$("#custom_define_resizeable_1").check("option", "checked", true);
                                                  +	} else {
                                                  +		$("#custom_define_resizeable_0").check("option", "checked", true);
                                                  +	}
                                                  +	
                                                  +	$("#custom_define_dialog").dialog({
                                                  +		draggable : false,
                                                  +		buttons : [{
                                                  +			text : '保存',
                                                  +			cls : "blue",
                                                  +			handler : function() {
                                                  +				var customShapeNameCustom = $("#custom_define_name_custom").val();
                                                  +				if (customShapeNameCustom == undefined || customShapeNameCustom == "") {
                                                  +					$.simpleAlert("customName不允许为空", "info");
                                                  +					return;
                                                  +				}
                                                  +				var customShapeTitle = $("#custom_define_title").val();
                                                  +				if (customShapeTitle == undefined || customShapeTitle == "") {
                                                  +					$.simpleAlert("title不允许为空", "info");
                                                  +					return;
                                                  +				}
                                                  +				var customShapeText = $("#custom_define_text").val();
                                                  +				if (customShapeText == undefined || customShapeText == "") {
                                                  +					$.simpleAlert("text不允许为空", "info");
                                                  +					return;
                                                  +				}
                                                  +				var customShapeW = $("#custom_define_w").val();
                                                  +				if (customShapeW == undefined || customShapeW == "") {
                                                  +					$.simpleAlert("宽度不允许为空", "info");
                                                  +					return;
                                                  +				}
                                                  +				var customShapeH = $("#custom_define_h").val();
                                                  +				if (customShapeH == undefined || customShapeH == "") {
                                                  +					$.simpleAlert("高度不允许为空", "info");
                                                  +					return;
                                                  +				}
                                                  +			
                                                  +				if (Schema.shapes[schemaName + "_" + customShapeNameCustom + "_custom"] != undefined) {
                                                  +					var options = {
                                                  +						title : "提示",
                                                  +						content:"该图形已存在,确定覆盖图形[" + schemaName + "_" + customShapeNameCustom + "]吗?",
                                                  +						model:false,
                                                  +						onConfirm: function(){
                                                  +							saveCustomSchema(shape);
                                                  +						},
                                                  +						onCancel : function(){
                                                  +						}
                                                  +					};
                                                  +					$.confirm(options);
                                                  +				} else {
                                                  +					saveCustomSchema(shape);
                                                  +				}
                                                  +			}
                                                  +		}, {
                                                  +			text : '删除',
                                                  +			handler : function() {
                                                  +				var newSchemaName = $("#custom_define_name").val() + "_" + $("#custom_define_name_custom").val() + "_custom";
                                                  +				if (Schema.shapes[newSchemaName] == undefined) {
                                                  +					$.simpleAlert("该模板还未定义", "info");
                                                  +					return;
                                                  +				}
                                                  +				$.ajax({
                                                  +					type : "POST",
                                                  +					url : "./jd?sid="
                                                  +							+ CLB.sid
                                                  +							+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_schema_remove",
                                                  +					data : {
                                                  +						schemaName : newSchemaName,
                                                  +						methodId : methodId
                                                  +					},
                                                  +					success : function(msg) {
                                                  +						if (msg.result == "ok") {
                                                  +							$.simpleAlert("删除成功", "ok");
                                                  +							delete Schema.shapes[newSchemaName];
                                                  +							Designer.initialize.initShapes();
                                                  +						} else {
                                                  +							if (msg.msg == "0" || msg.msg == "1") {
                                                  +								$.simpleAlert("该模板还未定义", "error");
                                                  +							} else {
                                                  +								$.simpleAlert("删除失败", "error");
                                                  +							}
                                                  +							
                                                  +						}
                                                  +						$("#custom_define_dialog").dialog('close');
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		}, {
                                                  +			text : '关闭',
                                                  +			handler : function() {
                                                  +				$("#custom_define_dialog").dialog('close');
                                                  +			}
                                                  +		}]
                                                  +	});
                                                  +}
                                                  +
                                                  +function saveCustomSchema(shape) {
                                                  +	var schemaShape = Schema.shapes[shape.name];
                                                  +	var schemaShapeName = $("#custom_define_name").val();
                                                  +	
                                                  +	if (schemaShape == undefined) {
                                                  +		schemaShape = Schema.shapes[schemaShapeName];
                                                  +	}
                                                  +				
                                                  +	var customShape = {
                                                  +		name : schemaShapeName + "_" + $("#custom_define_name_custom").val() + "_custom",
                                                  +		title : $("#custom_define_title").val(),
                                                  +		text : $("#custom_define_text").val(),
                                                  +		category : methodId.replace(".", "_"),
                                                  +		props : {w:parseInt($("#custom_define_w").val()), h:parseInt($("#custom_define_h").val())},
                                                  +		textBlock : schemaShape.textBlock,
                                                  +		textBlockFinal : schemaShape.textBlockFinal,
                                                  +		lineStyle : shape.lineStyle,
                                                  +		fillStyle : shape.fillStyle,
                                                  +		anchors : schemaShape.anchors,
                                                  +		path : schemaShape.path,
                                                  +		resizeable : $("input[name=custom_define_resizeable]:checked").val()
                                                  +	};
                                                  +	if (schemaShape.drawIcon != undefined) {
                                                  +		customShape.drawIcon = schemaShape.drawIcon
                                                  +	}
                                                  +	$.ajax({
                                                  +		type : "POST",
                                                  +		url : "./jd?sid="
                                                  +				+ CLB.sid
                                                  +				+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_schema_save",
                                                  +		data : {
                                                  +			schema : JSON.stringify(customShape),
                                                  +			methodId : methodId,
                                                  +			category : JSON.stringify(CategoryMapping[schemaShapeName])
                                                  +		},
                                                  +		success : function(msg) {
                                                  +			if (msg.result == "ok") {
                                                  +				eval(msg.msg);
                                                  +				Schema.init(customShape);
                                                  +				Designer.initialize.initShapes();
                                                  +			} else {
                                                  +				$.simpleAlert("保存失败", "error");
                                                  +			}
                                                  +			$("#custom_define_dialog").dialog('close');
                                                  +		}
                                                  +	});
                                                  +}
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/flexigrid/flexigrid.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/flexigrid/flexigrid.js
                                                  new file mode 100644
                                                  index 00000000..f4f6a691
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/flexigrid/flexigrid.js
                                                  @@ -0,0 +1,1314 @@
                                                  +/*
                                                  + * Flexigrid for jQuery -  v1.1
                                                  + *
                                                  + * Copyright (c) 2008 Paulo P. Marinas (code.google.com/p/flexigrid/)
                                                  + * Dual licensed under the MIT or GPL Version 2 licenses.
                                                  + * http://jquery.org/license
                                                  + *
                                                  + */
                                                  +(function ($) {
                                                  +	$.addFlex = function (t, p) {
                                                  +		if (t.grid) return false; //return if already exist
                                                  +		p = $.extend({ //apply default properties
                                                  +			height: 200, //default height
                                                  +			width: 'auto', //auto width
                                                  +			striped: true, //apply odd even stripes
                                                  +			novstripe: false,
                                                  +			minwidth: 30, //min width of columns
                                                  +			minheight: 80, //min height of columns
                                                  +			resizable: true, //allow table resizing
                                                  +			url: false, //URL if using data from AJAX
                                                  +			method: 'POST', //data sending method
                                                  +			dataType: 'xml', //type of data for AJAX, either xml or json
                                                  +			errormsg: 'Connection Error',
                                                  +			usepager: false,
                                                  +			nowrap: true,
                                                  +			page: 1, //current page
                                                  +			total: 1, //total pages
                                                  +			useRp: true, //use the results per page select box
                                                  +			rp: 15, //results per page
                                                  +			rpOptions: [10, 15, 20, 30, 50], //allowed per-page values 
                                                  +			title: false,
                                                  +			pagestat: 'Displaying {from} to {to} of {total} items',
                                                  +			pagetext: 'Page',
                                                  +			outof: 'of',
                                                  +			findtext: 'Find',
                                                  +			procmsg: 'Processing, please wait ...',
                                                  +			query: '',
                                                  +			qtype: '',
                                                  +			nomsg: 'No items',
                                                  +			minColToggle: 1, //minimum allowed column to be hidden
                                                  +			showToggleBtn: true, //show or hide column toggle popup
                                                  +			hideOnSubmit: true,
                                                  +			autoload: true,
                                                  +			blockOpacity: 0.5,
                                                  +			preProcess: false,
                                                  +			onDragCol: false,
                                                  +			onToggleCol: false,
                                                  +			onChangeSort: false,
                                                  +			onSuccess: false,
                                                  +			onError: false,
                                                  +			onSubmit: false //using a custom populate function
                                                  +		}, p);
                                                  +		$(t).show() //show if hidden
                                                  +			.attr({
                                                  +				cellPadding: 0,
                                                  +				cellSpacing: 0,
                                                  +				border: 0
                                                  +			}) //remove padding and spacing
                                                  +			.removeAttr('width'); //remove width properties
                                                  +		//create grid class
                                                  +		var g = {
                                                  +			hset: {},
                                                  +			rePosDrag: function () {
                                                  +				var cdleft = 0 - this.hDiv.scrollLeft;
                                                  +				if (this.hDiv.scrollLeft > 0) cdleft -= Math.floor(p.cgwidth / 2);
                                                  +				$(g.cDrag).css({
                                                  +					top: g.hDiv.offsetTop + 1
                                                  +				});
                                                  +				var cdpad = this.cdpad;
                                                  +				$('div', g.cDrag).hide();
                                                  +				$('thead tr:first th:visible', this.hDiv).each(function () {
                                                  +					var n = $('thead tr:first th:visible', g.hDiv).index(this);
                                                  +					var cdpos = parseInt($('div', this).width());
                                                  +					if (cdleft == 0) cdleft -= Math.floor(p.cgwidth / 2);
                                                  +					cdpos = cdpos + cdleft + cdpad;
                                                  +					if (isNaN(cdpos)) {
                                                  +						cdpos = 0;
                                                  +					}
                                                  +					if (p.checkbox) {
                                                  +	                	$('div:eq('+n+')',g.cDrag).css({'left':cdpos+22+'px'}).show();
                                                  +	                }else{
                                                  +	                	$('div:eq('+n+')',g.cDrag).css({'left':cdpos+'px'}).show();
                                                  +	                }
                                                  +					cdleft = cdpos;
                                                  +				});
                                                  +			},
                                                  +			fixHeight: function (newH) {
                                                  +				newH = false;
                                                  +				if (!newH) newH = $(g.bDiv).height();
                                                  +				var hdHeight = $(this.hDiv).height();
                                                  +				$('div', this.cDrag).each(
                                                  +					function () {
                                                  +						$(this).height(newH + hdHeight);
                                                  +					}
                                                  +				);
                                                  +				var nd = parseInt($(g.nDiv).height());
                                                  +				if (nd > newH) $(g.nDiv).height(newH).width(200);
                                                  +				else $(g.nDiv).height('auto').width('auto');
                                                  +				$(g.block).css({
                                                  +					height: newH,
                                                  +					marginBottom: (newH * -1)
                                                  +				});
                                                  +				var hrH = g.bDiv.offsetTop + newH;
                                                  +				if (p.height != 'auto' && p.resizable) hrH = g.vDiv.offsetTop;
                                                  +				$(g.rDiv).css({
                                                  +					height: hrH
                                                  +				});
                                                  +			},
                                                  +			dragStart: function (dragtype, e, obj) { //default drag function start
                                                  +				if (dragtype == 'colresize') {//column resize
                                                  +					$(g.nDiv).hide();
                                                  +					$(g.nBtn).hide();
                                                  +					var n = $('div', this.cDrag).index(obj);
                                                  +					var ow = $('th:visible div:eq(' + n + ')', this.hDiv).width();
                                                  +					$(obj).addClass('dragging').siblings().hide();
                                                  +					$(obj).prev().addClass('dragging').show();
                                                  +					this.colresize = {
                                                  +						startX: e.pageX,
                                                  +						ol: parseInt(obj.style.left),
                                                  +						ow: ow,
                                                  +						n: n
                                                  +					};
                                                  +					$('body').css('cursor', 'col-resize');
                                                  +				} else if (dragtype == 'vresize') {//table resize
                                                  +					var hgo = false;
                                                  +					$('body').css('cursor', 'row-resize');
                                                  +					if (obj) {
                                                  +						hgo = true;
                                                  +						$('body').css('cursor', 'col-resize');
                                                  +					}
                                                  +					this.vresize = {
                                                  +						h: p.height,
                                                  +						sy: e.pageY,
                                                  +						w: p.width,
                                                  +						sx: e.pageX,
                                                  +						hgo: hgo
                                                  +					};
                                                  +				} else if (dragtype == 'colMove') {//column header drag
                                                  +					$(g.nDiv).hide();
                                                  +					$(g.nBtn).hide();
                                                  +					this.hset = $(this.hDiv).offset();
                                                  +					this.hset.right = this.hset.left + $('table', this.hDiv).width();
                                                  +					this.hset.bottom = this.hset.top + $('table', this.hDiv).height();
                                                  +					this.dcol = obj;
                                                  +					this.dcoln = $('th', this.hDiv).index(obj);
                                                  +					this.colCopy = document.createElement("div");
                                                  +					this.colCopy.className = "colCopy";
                                                  +					this.colCopy.innerHTML = obj.innerHTML;
                                                  +					if ($.browser.msie) {
                                                  +						this.colCopy.className = "colCopy ie";
                                                  +					}
                                                  +					$(this.colCopy).css({
                                                  +						position:'absolute'/*,
                                                  +						float:'left',
                                                  +						display:'none',
                                                  +						textAlign: obj.align*/
                                                  +					});
                                                  +					$('body').append(this.colCopy);
                                                  +					$(this.cDrag).hide();
                                                  +				}
                                                  +				$('body').noSelect();
                                                  +			},
                                                  +			dragMove: function (e) {
                                                  +				if (this.colresize) {//column resize
                                                  +					var n = this.colresize.n;
                                                  +					var diff = e.pageX - this.colresize.startX;
                                                  +					var nleft = this.colresize.ol + diff;
                                                  +					var nw = this.colresize.ow + diff;
                                                  +					if (nw > p.minwidth) {
                                                  +						$('div:eq(' + n + ')', this.cDrag).css('left', nleft);
                                                  +						this.colresize.nw = nw;
                                                  +					}
                                                  +				} else if (this.vresize) {//table resize
                                                  +					var v = this.vresize;
                                                  +					var y = e.pageY;
                                                  +					var diff = y - v.sy;
                                                  +					if (!p.defwidth) p.defwidth = p.width;
                                                  +					if (p.width != 'auto' && !p.nohresize && v.hgo) {
                                                  +						var x = e.pageX;
                                                  +						var xdiff = x - v.sx;
                                                  +						var newW = v.w + xdiff;
                                                  +						if (newW > p.defwidth) {
                                                  +							this.gDiv.style.width = newW + 'px';
                                                  +							p.width = newW;
                                                  +						}
                                                  +					}
                                                  +					var newH = v.h + diff;
                                                  +					if ((newH > p.minheight || p.height < p.minheight) && !v.hgo) {
                                                  +						this.bDiv.style.height = newH + 'px';
                                                  +						p.height = newH;
                                                  +						this.fixHeight(newH);
                                                  +					}
                                                  +					v = null;
                                                  +				} else if (this.colCopy) {
                                                  +					$(this.dcol).addClass('thMove').removeClass('thOver');
                                                  +					if (e.pageX > this.hset.right || e.pageX < this.hset.left || e.pageY > this.hset.bottom || e.pageY < this.hset.top) {
                                                  +						//this.dragEnd();
                                                  +						$('body').css('cursor', 'move');
                                                  +					} else {
                                                  +						$('body').css('cursor', 'pointer');
                                                  +					}
                                                  +					$(this.colCopy).css({
                                                  +						top: e.pageY + 10,
                                                  +						left: e.pageX + 20,
                                                  +						display: 'block'
                                                  +					});
                                                  +				}
                                                  +			},
                                                  +			dragEnd: function () {
                                                  +				if (this.colresize) {
                                                  +					var n = this.colresize.n;
                                                  +					var nw = this.colresize.nw;
                                                  +					$('th:visible div:eq(' + n + ')', this.hDiv).css('width', nw);
                                                  +					$('tr', this.bDiv).each(
                                                  +						function () {
                                                  +							$('td:visible div:eq(' + n + ')', this).css('width', nw);
                                                  +						}
                                                  +					);
                                                  +					this.hDiv.scrollLeft = this.bDiv.scrollLeft;
                                                  +					$('div:eq(' + n + ')', this.cDrag).siblings().show();
                                                  +					$('.dragging', this.cDrag).removeClass('dragging');
                                                  +					this.rePosDrag();
                                                  +					this.fixHeight();
                                                  +					this.colresize = false;
                                                  +				} else if (this.vresize) {
                                                  +					this.vresize = false;
                                                  +				} else if (this.colCopy) {
                                                  +					$(this.colCopy).remove();
                                                  +					if (this.dcolt != null) {
                                                  +						if (this.dcoln > this.dcolt) $('th:eq(' + this.dcolt + ')', this.hDiv).before(this.dcol);
                                                  +						else $('th:eq(' + this.dcolt + ')', this.hDiv).after(this.dcol);
                                                  +						this.switchCol(this.dcoln, this.dcolt);
                                                  +						$(this.cdropleft).remove();
                                                  +						$(this.cdropright).remove();
                                                  +						this.rePosDrag();
                                                  +						if (p.onDragCol) {
                                                  +							p.onDragCol(this.dcoln, this.dcolt);
                                                  +						}
                                                  +					}
                                                  +					this.dcol = null;
                                                  +					this.hset = null;
                                                  +					this.dcoln = null;
                                                  +					this.dcolt = null;
                                                  +					this.colCopy = null;
                                                  +					$('.thMove', this.hDiv).removeClass('thMove');
                                                  +					$(this.cDrag).show();
                                                  +				}
                                                  +				$('body').css('cursor', 'default');
                                                  +				$('body').noSelect(false);
                                                  +			},
                                                  +			toggleCol: function (cid, visible) {
                                                  +				var ncol = $("th[axis='col" + cid + "']", this.hDiv)[0];
                                                  +				var n = $('thead th', g.hDiv).index(ncol);
                                                  +				var cb = $('input[value=' + cid + ']', g.nDiv)[0];
                                                  +				if (visible == null) {
                                                  +					visible = ncol.hidden;
                                                  +				}
                                                  +				if ($('input:checked', g.nDiv).length < p.minColToggle && !visible) {
                                                  +					return false;
                                                  +				}
                                                  +				if (visible) {
                                                  +					ncol.hidden = false;
                                                  +					$(ncol).show();
                                                  +					cb.checked = true;
                                                  +				} else {
                                                  +					ncol.hidden = true;
                                                  +					$(ncol).hide();
                                                  +					cb.checked = false;
                                                  +				}
                                                  +				$('tbody tr', t).each(
                                                  +					function () {
                                                  +						if (visible) {
                                                  +							$('td:eq(' + n + ')', this).show();
                                                  +						} else {
                                                  +							$('td:eq(' + n + ')', this).hide();
                                                  +						}
                                                  +					}
                                                  +				);
                                                  +				this.rePosDrag();
                                                  +				if (p.onToggleCol) {
                                                  +					p.onToggleCol(cid, visible);
                                                  +				}
                                                  +				return visible;
                                                  +			},
                                                  +			switchCol: function (cdrag, cdrop) { //switch columns
                                                  +				$('tbody tr', t).each(
                                                  +					function () {
                                                  +						if (cdrag > cdrop) $('td:eq(' + cdrop + ')', this).before($('td:eq(' + cdrag + ')', this));
                                                  +						else $('td:eq(' + cdrop + ')', this).after($('td:eq(' + cdrag + ')', this));
                                                  +					}
                                                  +				);
                                                  +				//switch order in nDiv
                                                  +				if (cdrag > cdrop) {
                                                  +					$('tr:eq(' + cdrop + ')', this.nDiv).before($('tr:eq(' + cdrag + ')', this.nDiv));
                                                  +				} else {
                                                  +					$('tr:eq(' + cdrop + ')', this.nDiv).after($('tr:eq(' + cdrag + ')', this.nDiv));
                                                  +				}
                                                  +				if ($.browser.msie && $.browser.version < 7.0) {
                                                  +					$('tr:eq(' + cdrop + ') input', this.nDiv)[0].checked = true;
                                                  +				}
                                                  +				this.hDiv.scrollLeft = this.bDiv.scrollLeft;
                                                  +			},
                                                  +			scroll: function () {
                                                  +				this.hDiv.scrollLeft = this.bDiv.scrollLeft;
                                                  +				this.rePosDrag();
                                                  +			},
                                                  +			addData: function (data) { //parse data
                                                  +				if (p.dataType == 'json') {
                                                  +					data = $.extend({rows: [], page: 0, total: 0}, data);
                                                  +				}
                                                  +				if (p.preProcess) {
                                                  +					data = p.preProcess(data);
                                                  +				}
                                                  +				$('.pReload', this.pDiv).removeClass('loading');
                                                  +				this.loading = false;
                                                  +				if (!data) {
                                                  +					$('.pPageStat', this.pDiv).html(p.errormsg);
                                                  +					return false;
                                                  +				}
                                                  +				if (p.dataType == 'xml') {
                                                  +					p.total = +$('rows total', data).text();
                                                  +				} else {
                                                  +					p.total = data.total;
                                                  +				}
                                                  +				if (p.total == 0) {
                                                  +					$('tr, a, td, div', t).unbind();
                                                  +					$(t).empty();
                                                  +					p.pages = 1;
                                                  +					p.page = 1;
                                                  +					this.buildpager();
                                                  +					$('.pPageStat', this.pDiv).html(p.nomsg);
                                                  +					return false;
                                                  +				}
                                                  +				p.pages = Math.ceil(p.total / p.rp);
                                                  +				if (p.dataType == 'xml') {
                                                  +					p.page = +$('rows page', data).text();
                                                  +				} else {
                                                  +					p.page = data.page;
                                                  +				}
                                                  +				this.buildpager();
                                                  +				//build new body
                                                  +				var tbody = document.createElement('tbody');
                                                  +				if (p.dataType == 'json') {
                                                  +					$.each(data.rows, function (i, row) {
                                                  +						var tr = document.createElement('tr');
                                                  +						if (i % 2 && p.striped) {
                                                  +							tr.className = 'erow';
                                                  +						}
                                                  +						if (row.id) {
                                                  +							tr.id = 'row' + row.id;
                                                  +						}
                                                  +						//add cell
                                                  +						if (p.checkbox) {
                                                  +							var cth = $('<th/>');
                                                  +							var cthch = $('<input type="checkbox" value="' + $(
                                                  +									tr).attr('id') + '"/>');
                                                  +							var objTr = $(tr);
                                                  +							cthch.addClass("noborder").click(function() {
                                                  +								if (this.checked) {
                                                  +									objTr.addClass('trSelected');
                                                  +								} else {
                                                  +									objTr.removeClass('trSelected');
                                                  +								}
                                                  +							})
                                                  +							cth.addClass("cth").attr( {
                                                  +								width : "22",
                                                  +								align : "center"
                                                  +							}).append(cthch);
                                                  +							$(tr).prepend(cth);
                                                  +						}
                                                  +						$('thead tr:first th', g.hDiv).each(
                                                  +							function () {
                                                  +								var td = document.createElement('td');
                                                  +								var idx = $(this).attr('axis').substr(3);
                                                  +								td.align = this.align;
                                                  +								// If the json elements aren't named (which is typical), use numeric order
                                                  +								if (typeof row.cell[idx] != "undefined") {
                                                  +									td.innerHTML = (row.cell[idx] != null) ? row.cell[idx] : '';//null-check for Opera-browser
                                                  +								} else {
                                                  +									td.innerHTML = row.cell[p.colModel[idx].name];
                                                  +								}
                                                  +								$(td).attr('abbr', $(this).attr('abbr'));
                                                  +								$(tr).append(td);
                                                  +								td = null;
                                                  +							}
                                                  +						);
                                                  +						if ($('thead', this.gDiv).length < 1) {//handle if grid has no headers
                                                  +							for (idx = 0; idx < cell.length; idx++) {
                                                  +								var td = document.createElement('td');
                                                  +								// If the json elements aren't named (which is typical), use numeric order
                                                  +								if (typeof row.cell[idx] != "undefined") {
                                                  +									td.innerHTML = (row.cell[idx] != null) ? row.cell[idx] : '';//null-check for Opera-browser
                                                  +								} else {
                                                  +									td.innerHTML = row.cell[p.colModel[idx].name];
                                                  +								}
                                                  +								$(tr).append(td);
                                                  +								td = null;
                                                  +							}
                                                  +						}
                                                  +						$(tbody).append(tr);
                                                  +						tr = null;
                                                  +					});
                                                  +				} else if (p.dataType == 'xml') {
                                                  +					var i = 1;
                                                  +					$("rows row", data).each(function () {
                                                  +						i++;
                                                  +						var tr = document.createElement('tr');
                                                  +						if (i % 2 && p.striped) {
                                                  +							tr.className = 'erow';
                                                  +						}
                                                  +						var nid = $(this).attr('id');
                                                  +						if (nid) {
                                                  +							tr.id = 'row' + nid;
                                                  +						}
                                                  +						nid = null;
                                                  +						var robj = this;
                                                  +						$('thead tr:first th', g.hDiv).each(function () {
                                                  +							var td = document.createElement('td');
                                                  +							var idx = $(this).attr('axis').substr(3);
                                                  +							td.align = this.align;
                                                  +							td.innerHTML = $("cell:eq(" + idx + ")", robj).text();
                                                  +							$(td).attr('abbr', $(this).attr('abbr'));
                                                  +							$(tr).append(td);
                                                  +							td = null;
                                                  +						});
                                                  +						if ($('thead', this.gDiv).length < 1) {//handle if grid has no headers
                                                  +							$('cell', this).each(function () {
                                                  +								var td = document.createElement('td');
                                                  +								td.innerHTML = $(this).text();
                                                  +								$(tr).append(td);
                                                  +								td = null;
                                                  +							});
                                                  +						}
                                                  +						$(tbody).append(tr);
                                                  +						tr = null;
                                                  +						robj = null;
                                                  +					});
                                                  +				}
                                                  +				$('tr', t).unbind();
                                                  +				$(t).empty();
                                                  +				$(t).append(tbody);
                                                  +				this.addCellProp();
                                                  +				this.addRowProp();
                                                  +				this.rePosDrag();
                                                  +				tbody = null;
                                                  +				data = null;
                                                  +				i = null;
                                                  +				if (p.onSuccess) {
                                                  +					p.onSuccess(this);
                                                  +				}
                                                  +				if (p.hideOnSubmit) {
                                                  +					$(g.block).remove();
                                                  +				}
                                                  +				this.hDiv.scrollLeft = this.bDiv.scrollLeft;
                                                  +				if ($.browser.opera) {
                                                  +					$(t).css('visibility', 'visible');
                                                  +				}
                                                  +			},
                                                  +			changeSort: function (th) { //change sortorder
                                                  +				if (this.loading) {
                                                  +					return true;
                                                  +				}
                                                  +				$(g.nDiv).hide();
                                                  +				$(g.nBtn).hide();
                                                  +				if (p.sortname == $(th).attr('abbr')) {
                                                  +					if (p.sortorder == 'asc') {
                                                  +						p.sortorder = 'desc';
                                                  +					} else {
                                                  +						p.sortorder = 'asc';
                                                  +					}
                                                  +				}
                                                  +				$(th).addClass('sorted').siblings().removeClass('sorted');
                                                  +				$('.sdesc', this.hDiv).removeClass('sdesc');
                                                  +				$('.sasc', this.hDiv).removeClass('sasc');
                                                  +				$('div', th).addClass('s' + p.sortorder);
                                                  +				p.sortname = $(th).attr('abbr');
                                                  +				if (p.onChangeSort) {
                                                  +					p.onChangeSort(p.sortname, p.sortorder);
                                                  +				} else {
                                                  +					this.populate();
                                                  +				}
                                                  +			},
                                                  +			buildpager: function () { //rebuild pager based on new properties
                                                  +				$('.pcontrol input', this.pDiv).val(p.page);
                                                  +				$('.pcontrol span', this.pDiv).html(p.pages);
                                                  +				var r1 = (p.page - 1) * p.rp + 1;
                                                  +				var r2 = r1 + p.rp - 1;
                                                  +				if (p.total < r2) {
                                                  +					r2 = p.total;
                                                  +				}
                                                  +				var stat = p.pagestat;
                                                  +				stat = stat.replace(/{from}/, r1);
                                                  +				stat = stat.replace(/{to}/, r2);
                                                  +				stat = stat.replace(/{total}/, p.total);
                                                  +				$('.pPageStat', this.pDiv).html(stat);
                                                  +			},
                                                  +			populate: function () { //get latest data
                                                  +				if (this.loading) {
                                                  +					return true;
                                                  +				}
                                                  +				if (p.onSubmit) {
                                                  +					var gh = p.onSubmit();
                                                  +					if (!gh) {
                                                  +						return false;
                                                  +					}
                                                  +				}
                                                  +				this.loading = true;
                                                  +				if (!p.url) {
                                                  +					return false;
                                                  +				}
                                                  +				$('.pPageStat', this.pDiv).html(p.procmsg);
                                                  +				$('.pReload', this.pDiv).addClass('loading');
                                                  +				$(g.block).css({
                                                  +					top: g.bDiv.offsetTop
                                                  +				});
                                                  +				if (p.hideOnSubmit) {
                                                  +					$(this.gDiv).prepend(g.block);
                                                  +				}
                                                  +				if ($.browser.opera) {
                                                  +					$(t).css('visibility', 'hidden');
                                                  +				}
                                                  +				if (!p.newp) {
                                                  +					p.newp = 1;
                                                  +				}
                                                  +				if (p.page > p.pages) {
                                                  +					p.page = p.pages;
                                                  +				}
                                                  +				var param = [{
                                                  +					name: 'page',
                                                  +					value: p.newp
                                                  +				}, {
                                                  +					name: 'rp',
                                                  +					value: p.rp
                                                  +				}, {
                                                  +					name: 'sortname',
                                                  +					value: p.sortname
                                                  +				}, {
                                                  +					name: 'sortorder',
                                                  +					value: p.sortorder
                                                  +				}, {
                                                  +					name: 'query',
                                                  +					value: p.query
                                                  +				}, {
                                                  +					name: 'qtype',
                                                  +					value: p.qtype
                                                  +				}];
                                                  +				if (p.params) {
                                                  +					for (var pi = 0; pi < p.params.length; pi++) {
                                                  +						param[param.length] = p.params[pi];
                                                  +					}
                                                  +				}
                                                  +				$.ajax({
                                                  +					type: p.method,
                                                  +					url: p.url,
                                                  +					data: param,
                                                  +					dataType: p.dataType,
                                                  +					success: function (data) {
                                                  +						g.addData(data);
                                                  +					},
                                                  +					error: function (XMLHttpRequest, textStatus, errorThrown) {
                                                  +						try {
                                                  +							if (p.onError) p.onError(XMLHttpRequest, textStatus, errorThrown);
                                                  +						} catch (e) {}
                                                  +					}
                                                  +				});
                                                  +			},
                                                  +			doSearch: function () {
                                                  +				p.query = $('input[name=q]', g.sDiv).val();
                                                  +				p.qtype = $('select[name=qtype]', g.sDiv).val();
                                                  +				p.newp = 1;
                                                  +				this.populate();
                                                  +			},
                                                  +			changePage: function (ctype) { //change page
                                                  +				if (this.loading) {
                                                  +					return true;
                                                  +				}
                                                  +				switch (ctype) {
                                                  +					case 'first':
                                                  +						p.newp = 1;
                                                  +						break;
                                                  +					case 'prev':
                                                  +						if (p.page > 1) {
                                                  +							p.newp = parseInt(p.page) - 1;
                                                  +						}
                                                  +						break;
                                                  +					case 'next':
                                                  +						if (p.page < p.pages) {
                                                  +							p.newp = parseInt(p.page) + 1;
                                                  +						}
                                                  +						break;
                                                  +					case 'last':
                                                  +						p.newp = p.pages;
                                                  +						break;
                                                  +					case 'input':
                                                  +						var nv = parseInt($('.pcontrol input', this.pDiv).val());
                                                  +						if (isNaN(nv)) {
                                                  +							nv = 1;
                                                  +						}
                                                  +						if (nv < 1) {
                                                  +							nv = 1;
                                                  +						} else if (nv > p.pages) {
                                                  +							nv = p.pages;
                                                  +						}
                                                  +						$('.pcontrol input', this.pDiv).val(nv);
                                                  +						p.newp = nv;
                                                  +						break;
                                                  +				}
                                                  +				if (p.newp == p.page) {
                                                  +					return false;
                                                  +				}
                                                  +				if (p.onChangePage) {
                                                  +					p.onChangePage(p.newp);
                                                  +				} else {
                                                  +					this.populate();
                                                  +				}
                                                  +			},
                                                  +			addCellProp: function () {
                                                  +				$('tbody tr td', g.bDiv).each(function () {
                                                  +					var tdDiv = document.createElement('div');
                                                  +					var n = $('td', $(this).parent()).index(this);
                                                  +					var pth = $('th:eq(' + n + ')', g.hDiv).get(0);
                                                  +					if (pth != null) {
                                                  +						if (p.sortname == $(pth).attr('abbr') && p.sortname) {
                                                  +							this.className = 'sorted';
                                                  +						}
                                                  +						$(tdDiv).css({
                                                  +							textAlign: pth.align,
                                                  +							width: $('div:first', pth)[0].style.width
                                                  +						});
                                                  +						if (pth.hidden) {
                                                  +							$(this).css('display', 'none');
                                                  +						}
                                                  +					}
                                                  +					if (p.nowrap == false) {
                                                  +						$(tdDiv).css('white-space', 'normal');
                                                  +					}
                                                  +					if (this.innerHTML == '') {
                                                  +						this.innerHTML = '&nbsp;';
                                                  +					}
                                                  +					tdDiv.innerHTML = this.innerHTML;
                                                  +					var prnt = $(this).parent()[0];
                                                  +					var pid = false;
                                                  +					if (prnt.id) {
                                                  +						pid = prnt.id.substr(3);
                                                  +					}
                                                  +					if (pth != null) {
                                                  +						if (pth.process) pth.process(tdDiv, pid);
                                                  +					}
                                                  +					$(this).empty().append(tdDiv).removeAttr('width'); //wrap content
                                                  +				});
                                                  +			},
                                                  +			getCellDim: function (obj) {// get cell prop for editable event
                                                  +				var ht = parseInt($(obj).height());
                                                  +				var pht = parseInt($(obj).parent().height());
                                                  +				var wt = parseInt(obj.style.width);
                                                  +				var pwt = parseInt($(obj).parent().width());
                                                  +				var top = obj.offsetParent.offsetTop;
                                                  +				var left = obj.offsetParent.offsetLeft;
                                                  +				var pdl = parseInt($(obj).css('paddingLeft'));
                                                  +				var pdt = parseInt($(obj).css('paddingTop'));
                                                  +				return {
                                                  +					ht: ht,
                                                  +					wt: wt,
                                                  +					top: top,
                                                  +					left: left,
                                                  +					pdl: pdl,
                                                  +					pdt: pdt,
                                                  +					pht: pht,
                                                  +					pwt: pwt
                                                  +				};
                                                  +			},
                                                  +			addRowProp: function () {
                                                  +				$('tbody tr', g.bDiv).each(function () {
                                                  +					$(this).dblclick(   
                                                  +				        function (e) {   
                                                  +				            var rowData = new Object();   
                                                  +				             $.each($(this).find('div'),function(i){   
                                                  +				                 $(rowData).data(p.colModel[i].name,$(this).text());   
                                                  +				             });   
                                                  +				            if (p.onRowDblclick) p.onRowDblclick($(rowData));   
                                                  +				         }   
                                                  +				    )   
                                                  +					.click(function (e) {
                                                  +					       //modify by wangshibao 单选修改
                                                  +						  var obj = (e.target || e.srcElement);
                                                  +                            if (obj.href || obj.type) return true;
                                                  +                            if (e.ctrlKey || e.metaKey) {
                                                  +                                // mousedown already took care of this case
                                                  +                                return;
                                                  +                            }
                                                  +                            $(this).toggleClass('trSelected');
                                                  +                            if (p.singleSelect && ! g.multisel) {
                                                  +                                $(this).siblings().removeClass('trSelected');
                                                  +                            }
                                                  +					}).mousedown(function (e) {
                                                  +						if (e.shiftKey) {
                                                  +							$(this).toggleClass('trSelected');
                                                  +							g.multisel = true;
                                                  +							this.focus();
                                                  +							$(g.gDiv).noSelect();
                                                  +						}
                                                  +					}).mouseup(function () {
                                                  +						if (g.multisel) {
                                                  +							g.multisel = false;
                                                  +							$(g.gDiv).noSelect(false);
                                                  +						}
                                                  +					}).hover(function (e) {
                                                  +						if (g.multisel) {
                                                  +							$(this).toggleClass('trSelected');
                                                  +						}
                                                  +					}, function () {});
                                                  +					if ($.browser.msie && $.browser.version < 7.0) {
                                                  +						$(this).hover(function () {
                                                  +							$(this).addClass('trOver');
                                                  +						}, function () {
                                                  +							$(this).removeClass('trOver');
                                                  +						});
                                                  +					}
                                                  +				});
                                                  +			},
                                                  +			pager: 0
                                                  +		};
                                                  +		if (p.colModel) { //create model if any
                                                  +			thead = document.createElement('thead');
                                                  +			var tr = document.createElement('tr');
                                                  +			for (var i = 0; i < p.colModel.length; i++) {
                                                  +				var cm = p.colModel[i];
                                                  +				var th = document.createElement('th');
                                                  +				th.innerHTML = cm.display;
                                                  +				if (cm.name && cm.sortable) {
                                                  +					$(th).attr('abbr', cm.name);
                                                  +				}
                                                  +				$(th).attr('axis', 'col' + i);
                                                  +				if (cm.align) {
                                                  +					th.align = cm.align;
                                                  +				}
                                                  +				if (cm.width) {
                                                  +					$(th).attr('width', cm.width);
                                                  +				}
                                                  +				if ($(cm).attr('hide')) {
                                                  +					th.hidden = true;
                                                  +				}
                                                  +				if (cm.process) {
                                                  +					th.process = cm.process;
                                                  +				}
                                                  +				$(tr).append(th);
                                                  +			}
                                                  +			$(thead).append(tr);
                                                  +			$(t).prepend(thead);
                                                  +		} // end if p.colmodel
                                                  +		//init divs
                                                  +		g.gDiv = document.createElement('div'); //create global container
                                                  +		g.mDiv = document.createElement('div'); //create title container
                                                  +		g.hDiv = document.createElement('div'); //create header container
                                                  +		g.bDiv = document.createElement('div'); //create body container
                                                  +		g.vDiv = document.createElement('div'); //create grip
                                                  +		g.rDiv = document.createElement('div'); //create horizontal resizer
                                                  +		g.cDrag = document.createElement('div'); //create column drag
                                                  +		g.block = document.createElement('div'); //creat blocker
                                                  +		g.nDiv = document.createElement('div'); //create column show/hide popup
                                                  +		g.nBtn = document.createElement('div'); //create column show/hide button
                                                  +		g.iDiv = document.createElement('div'); //create editable layer
                                                  +		g.tDiv = document.createElement('div'); //create toolbar
                                                  +		g.sDiv = document.createElement('div');
                                                  +		g.pDiv = document.createElement('div'); //create pager container
                                                  +		if (!p.usepager) {
                                                  +			g.pDiv.style.display = 'none';
                                                  +		}
                                                  +		g.hTable = document.createElement('table');
                                                  +		g.gDiv.className = 'flexigrid';
                                                  +		if (p.width != 'auto') {
                                                  +			g.gDiv.style.width = p.width + 'px';
                                                  +		}
                                                  +		//add conditional classes
                                                  +		if ($.browser.msie) {
                                                  +			$(g.gDiv).addClass('ie');
                                                  +		}
                                                  +		if (p.novstripe) {
                                                  +			$(g.gDiv).addClass('novstripe');
                                                  +		}
                                                  +		$(t).before(g.gDiv);
                                                  +		$(g.gDiv).append(t);
                                                  +		//set toolbar
                                                  +		if (p.buttons) {
                                                  +			g.tDiv.className = 'tDiv';
                                                  +			var tDiv2 = document.createElement('div');
                                                  +			tDiv2.className = 'tDiv2';
                                                  +			for (var i = 0; i < p.buttons.length; i++) {
                                                  +				var btn = p.buttons[i];
                                                  +				if (!btn.separator) {
                                                  +					var btnDiv = document.createElement('div');
                                                  +					btnDiv.className = 'fbutton';
                                                  +					btnDiv.innerHTML = "<div><span>" + btn.name + "</span></div>";
                                                  +					if (btn.bclass) $('span', btnDiv).addClass(btn.bclass).css({
                                                  +						paddingLeft: 20
                                                  +					});
                                                  +					btnDiv.onpress = btn.onpress;
                                                  +					btnDiv.name = btn.name;
                                                  +					if (btn.onpress) {
                                                  +						$(btnDiv).click(function () {
                                                  +							this.onpress(this.name, g.gDiv);
                                                  +						});
                                                  +					}
                                                  +					$(tDiv2).append(btnDiv);
                                                  +					if ($.browser.msie && $.browser.version < 7.0) {
                                                  +						$(btnDiv).hover(function () {
                                                  +							$(this).addClass('fbOver');
                                                  +						}, function () {
                                                  +							$(this).removeClass('fbOver');
                                                  +						});
                                                  +					}
                                                  +				} else {
                                                  +					$(tDiv2).append("<div class='btnseparator'></div>");
                                                  +				}
                                                  +			}
                                                  +			$(g.tDiv).append(tDiv2);
                                                  +			$(g.tDiv).append("<div style='clear:both'></div>");
                                                  +			$(g.gDiv).prepend(g.tDiv);
                                                  +		}
                                                  +		g.hDiv.className = 'hDiv';
                                                  +		$(t).before(g.hDiv);
                                                  +		g.hTable.cellPadding = 0;
                                                  +		g.hTable.cellSpacing = 0;
                                                  +		$(g.hDiv).append('<div class="hDivBox"></div>');
                                                  +		$('div', g.hDiv).append(g.hTable);
                                                  +		var thead = $("thead:first", t).get(0);
                                                  +		if (thead) $(g.hTable).append(thead);
                                                  +		thead = null;
                                                  +		if (!p.colmodel) var ci = 0;
                                                  +		$('thead tr:first th', g.hDiv).each(function () {
                                                  +			var thdiv = document.createElement('div');
                                                  +			if ($(this).attr('abbr')) {
                                                  +				$(this).click(function (e) {
                                                  +					if (!$(this).hasClass('thOver')) return false;
                                                  +					var obj = (e.target || e.srcElement);
                                                  +					if (obj.href || obj.type) return true;
                                                  +					g.changeSort(this);
                                                  +				});
                                                  +				if ($(this).attr('abbr') == p.sortname) {
                                                  +					this.className = 'sorted';
                                                  +					thdiv.className = 's' + p.sortorder;
                                                  +				}
                                                  +			}
                                                  +			if (this.hidden) {
                                                  +				$(this).hide();
                                                  +			}
                                                  +			if (!p.colmodel) {
                                                  +				$(this).attr('axis', 'col' + ci++);
                                                  +			}
                                                  +			$(thdiv).css({
                                                  +				textAlign: this.align,
                                                  +				width: this.width + 'px'
                                                  +			});
                                                  +			thdiv.innerHTML = this.innerHTML;
                                                  +			$(this).empty().append(thdiv).removeAttr('width').mousedown(function (e) {
                                                  +				g.dragStart('colMove', e, this);
                                                  +			}).hover(function () {
                                                  +				if (!g.colresize && !$(this).hasClass('thMove') && !g.colCopy) {
                                                  +					$(this).addClass('thOver');
                                                  +				}
                                                  +				if ($(this).attr('abbr') != p.sortname && !g.colCopy && !g.colresize && $(this).attr('abbr')) {
                                                  +					$('div', this).addClass('s' + p.sortorder);
                                                  +				} else if ($(this).attr('abbr') == p.sortname && !g.colCopy && !g.colresize && $(this).attr('abbr')) {
                                                  +					var no = (p.sortorder == 'asc') ? 'desc' : 'asc';
                                                  +					$('div', this).removeClass('s' + p.sortorder).addClass('s' + no);
                                                  +				}
                                                  +				if (g.colCopy) {
                                                  +					var n = $('th', g.hDiv).index(this);
                                                  +					if (n == g.dcoln) {
                                                  +						return false;
                                                  +					}
                                                  +					if (n < g.dcoln) {
                                                  +						$(this).append(g.cdropleft);
                                                  +					} else {
                                                  +						$(this).append(g.cdropright);
                                                  +					}
                                                  +					g.dcolt = n;
                                                  +				} else if (!g.colresize) {
                                                  +					var nv = $('th:visible', g.hDiv).index(this);
                                                  +					var onl = parseInt($('div:eq(' + nv + ')', g.cDrag).css('left'));
                                                  +					var nw = jQuery(g.nBtn).outerWidth();
                                                  +					var nl = onl - nw + Math.floor(p.cgwidth / 2);
                                                  +					$(g.nDiv).hide();
                                                  +					$(g.nBtn).hide();
                                                  +					$(g.nBtn).css({
                                                  +						'left': nl,
                                                  +						top: g.hDiv.offsetTop
                                                  +					}).show();
                                                  +					var ndw = parseInt($(g.nDiv).width());
                                                  +					$(g.nDiv).css({
                                                  +						top: g.bDiv.offsetTop
                                                  +					});
                                                  +					if ((nl + ndw) > $(g.gDiv).width()) {
                                                  +						$(g.nDiv).css('left', onl - ndw + 1);
                                                  +					} else {
                                                  +						$(g.nDiv).css('left', nl);
                                                  +					}
                                                  +					if ($(this).hasClass('sorted')) {
                                                  +						$(g.nBtn).addClass('srtd');
                                                  +					} else {
                                                  +						$(g.nBtn).removeClass('srtd');
                                                  +					}
                                                  +				}
                                                  +			}, function () {
                                                  +				$(this).removeClass('thOver');
                                                  +				if ($(this).attr('abbr') != p.sortname) {
                                                  +					$('div', this).removeClass('s' + p.sortorder);
                                                  +				} else if ($(this).attr('abbr') == p.sortname) {
                                                  +					var no = (p.sortorder == 'asc') ? 'desc' : 'asc';
                                                  +					$('div', this).addClass('s' + p.sortorder).removeClass('s' + no);
                                                  +				}
                                                  +				if (g.colCopy) {
                                                  +					$(g.cdropleft).remove();
                                                  +					$(g.cdropright).remove();
                                                  +					g.dcolt = null;
                                                  +				}
                                                  +			}); //wrap content
                                                  +		});
                                                  +		//set bDiv
                                                  +		g.bDiv.className = 'bDiv';
                                                  +		$(t).before(g.bDiv);
                                                  +		$(g.bDiv).css({
                                                  +			height: (p.height == 'auto') ? 'auto' : p.height + "px"
                                                  +		}).scroll(function (e) {
                                                  +			g.scroll()
                                                  +		}).append(t);
                                                  +		if (p.height == 'auto') {
                                                  +			$('table', g.bDiv).addClass('autoht');
                                                  +		}
                                                  +		//add td & row properties
                                                  +		g.addCellProp();
                                                  +		g.addRowProp();
                                                  +		//set cDrag
                                                  +		var cdcol = $('thead tr:first th:first', g.hDiv).get(0);
                                                  +		if (cdcol != null) {
                                                  +			g.cDrag.className = 'cDrag';
                                                  +			g.cdpad = 0;
                                                  +			g.cdpad += (isNaN(parseInt($('div', cdcol).css('borderLeftWidth'))) ? 0 : parseInt($('div', cdcol).css('borderLeftWidth')));
                                                  +			g.cdpad += (isNaN(parseInt($('div', cdcol).css('borderRightWidth'))) ? 0 : parseInt($('div', cdcol).css('borderRightWidth')));
                                                  +			g.cdpad += (isNaN(parseInt($('div', cdcol).css('paddingLeft'))) ? 0 : parseInt($('div', cdcol).css('paddingLeft')));
                                                  +			g.cdpad += (isNaN(parseInt($('div', cdcol).css('paddingRight'))) ? 0 : parseInt($('div', cdcol).css('paddingRight')));
                                                  +			g.cdpad += (isNaN(parseInt($(cdcol).css('borderLeftWidth'))) ? 0 : parseInt($(cdcol).css('borderLeftWidth')));
                                                  +			g.cdpad += (isNaN(parseInt($(cdcol).css('borderRightWidth'))) ? 0 : parseInt($(cdcol).css('borderRightWidth')));
                                                  +			g.cdpad += (isNaN(parseInt($(cdcol).css('paddingLeft'))) ? 0 : parseInt($(cdcol).css('paddingLeft')));
                                                  +			g.cdpad += (isNaN(parseInt($(cdcol).css('paddingRight'))) ? 0 : parseInt($(cdcol).css('paddingRight')));
                                                  +			$(g.bDiv).before(g.cDrag);
                                                  +			var cdheight = $(g.bDiv).height();
                                                  +			var hdheight = $(g.hDiv).height();
                                                  +			$(g.cDrag).css({
                                                  +				top: -hdheight + 'px'
                                                  +			});
                                                  +			$('thead tr:first th', g.hDiv).each(function () {
                                                  +				var cgDiv = document.createElement('div');
                                                  +				$(g.cDrag).append(cgDiv);
                                                  +				if (!p.cgwidth) {
                                                  +					p.cgwidth = $(cgDiv).width();
                                                  +				}
                                                  +				$(cgDiv).css({
                                                  +					height: cdheight + hdheight
                                                  +				}).mousedown(function (e) {
                                                  +					g.dragStart('colresize', e, this);
                                                  +				});
                                                  +				if ($.browser.msie && $.browser.version < 7.0) {
                                                  +					g.fixHeight($(g.gDiv).height());
                                                  +					$(cgDiv).hover(function () {
                                                  +						g.fixHeight();
                                                  +						$(this).addClass('dragging')
                                                  +					}, function () {
                                                  +						if (!g.colresize) $(this).removeClass('dragging')
                                                  +					});
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +		//add strip
                                                  +		if (p.striped) {
                                                  +			$('tbody tr:odd', g.bDiv).addClass('erow');
                                                  +		}
                                                  +		if (p.resizable && p.height != 'auto') {
                                                  +			g.vDiv.className = 'vGrip';
                                                  +			$(g.vDiv).mousedown(function (e) {
                                                  +				g.dragStart('vresize', e)
                                                  +			}).html('<span></span>');
                                                  +			$(g.bDiv).after(g.vDiv);
                                                  +		}
                                                  +		if (p.resizable && p.width != 'auto' && !p.nohresize) {
                                                  +			g.rDiv.className = 'hGrip';
                                                  +			$(g.rDiv).mousedown(function (e) {
                                                  +				g.dragStart('vresize', e, true);
                                                  +			}).html('<span></span>').css('height', $(g.gDiv).height());
                                                  +			if ($.browser.msie && $.browser.version < 7.0) {
                                                  +				$(g.rDiv).hover(function () {
                                                  +					$(this).addClass('hgOver');
                                                  +				}, function () {
                                                  +					$(this).removeClass('hgOver');
                                                  +				});
                                                  +			}
                                                  +			$(g.gDiv).append(g.rDiv);
                                                  +		}
                                                  +		// add pager
                                                  +		if (p.usepager) {
                                                  +			g.pDiv.className = 'pDiv';
                                                  +			g.pDiv.innerHTML = '<div class="pDiv2"></div>';
                                                  +			$(g.bDiv).after(g.pDiv);
                                                  +			var html = ' <div class="pGroup"> <div class="pFirst pButton"><span></span></div><div class="pPrev pButton"><span></span></div> </div> <div class="btnseparator"></div> <div class="pGroup"><span class="pcontrol">' + p.pagetext + ' <input type="text" size="4" value="1" /> ' + p.outof + ' <span> 1 </span></span></div> <div class="btnseparator"></div> <div class="pGroup"> <div class="pNext pButton"><span></span></div><div class="pLast pButton"><span></span></div> </div> <div class="btnseparator"></div> <div class="pGroup"> <div class="pReload pButton"><span></span></div> </div> <div class="btnseparator"></div> <div class="pGroup"><span class="pPageStat"></span></div>';
                                                  +			$('div', g.pDiv).html(html);
                                                  +			$('.pReload', g.pDiv).click(function () {
                                                  +				g.populate()
                                                  +			});
                                                  +			$('.pFirst', g.pDiv).click(function () {
                                                  +				g.changePage('first')
                                                  +			});
                                                  +			$('.pPrev', g.pDiv).click(function () {
                                                  +				g.changePage('prev')
                                                  +			});
                                                  +			$('.pNext', g.pDiv).click(function () {
                                                  +				g.changePage('next')
                                                  +			});
                                                  +			$('.pLast', g.pDiv).click(function () {
                                                  +				g.changePage('last')
                                                  +			});
                                                  +			$('.pcontrol input', g.pDiv).keydown(function (e) {
                                                  +				if (e.keyCode == 13) g.changePage('input')
                                                  +			});
                                                  +			if ($.browser.msie && $.browser.version < 7) $('.pButton', g.pDiv).hover(function () {
                                                  +				$(this).addClass('pBtnOver');
                                                  +			}, function () {
                                                  +				$(this).removeClass('pBtnOver');
                                                  +			});
                                                  +			if (p.useRp) {
                                                  +				var opt = '',
                                                  +					sel = '';
                                                  +				for (var nx = 0; nx < p.rpOptions.length; nx++) {
                                                  +					if (p.rp == p.rpOptions[nx]) sel = 'selected="selected"';
                                                  +					else sel = '';
                                                  +					opt += "<option value='" + p.rpOptions[nx] + "' " + sel + " >" + p.rpOptions[nx] + "&nbsp;&nbsp;</option>";
                                                  +				}
                                                  +				$('.pDiv2', g.pDiv).prepend("<div class='pGroup'><select name='rp'>" + opt + "</select></div> <div class='btnseparator'></div>");
                                                  +				$('select', g.pDiv).change(function () {
                                                  +					if (p.onRpChange) {
                                                  +						p.onRpChange(+this.value);
                                                  +					} else {
                                                  +						p.newp = 1;
                                                  +						p.rp = +this.value;
                                                  +						g.populate();
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +			//add search button
                                                  +			if (p.searchitems) {
                                                  +				$('.pDiv2', g.pDiv).prepend("<div class='pGroup'> <div class='pSearch pButton'><span></span></div> </div>  <div class='btnseparator'></div>");
                                                  +				$('.pSearch', g.pDiv).click(function () {
                                                  +					$(g.sDiv).slideToggle('fast', function () {
                                                  +						$('.sDiv:visible input:first', g.gDiv).trigger('focus');
                                                  +					});
                                                  +				});
                                                  +				//add search box
                                                  +				g.sDiv.className = 'sDiv';
                                                  +				var sitems = p.searchitems;
                                                  +				var sopt = '', sel = '';
                                                  +				for (var s = 0; s < sitems.length; s++) {
                                                  +					if (p.qtype == '' && sitems[s].isdefault == true) {
                                                  +						p.qtype = sitems[s].name;
                                                  +						sel = 'selected="selected"';
                                                  +					} else {
                                                  +						sel = '';
                                                  +					}
                                                  +					sopt += "<option value='" + sitems[s].name + "' " + sel + " >" + sitems[s].display + "&nbsp;&nbsp;</option>";
                                                  +				}
                                                  +				if (p.qtype == '') {
                                                  +					p.qtype = sitems[0].name;
                                                  +				}
                                                  +				$(g.sDiv).append("<div class='sDiv2'>" + p.findtext + 
                                                  +						" <input type='text' value='" + p.query +"' size='30' name='q' class='qsbox' /> "+
                                                  +						" <select name='qtype'>" + sopt + "</select></div>");
                                                  +				//Split into separate selectors because of bug in jQuery 1.3.2
                                                  +				$('input[name=q]', g.sDiv).keydown(function (e) {
                                                  +					if (e.keyCode == 13) {
                                                  +						g.doSearch();
                                                  +					}
                                                  +				});
                                                  +				$('select[name=qtype]', g.sDiv).keydown(function (e) {
                                                  +					if (e.keyCode == 13) {
                                                  +						g.doSearch();
                                                  +					}
                                                  +				});
                                                  +				$('input[value=Clear]', g.sDiv).click(function () {
                                                  +					$('input[name=q]', g.sDiv).val('');
                                                  +					p.query = '';
                                                  +					g.doSearch();
                                                  +				});
                                                  +				$(g.bDiv).after(g.sDiv);
                                                  +			}
                                                  +		}
                                                  +		$(g.pDiv, g.sDiv).append("<div style='clear:both'></div>");
                                                  +		// add title
                                                  +		if (p.title) {
                                                  +			g.mDiv.className = 'mDiv';
                                                  +			g.mDiv.innerHTML = '<div class="ftitle">' + p.title + '</div>';
                                                  +			$(g.gDiv).prepend(g.mDiv);
                                                  +			if (p.showTableToggleBtn) {
                                                  +				$(g.mDiv).append('<div class="ptogtitle" title="Minimize/Maximize Table"><span></span></div>');
                                                  +				$('div.ptogtitle', g.mDiv).click(function () {
                                                  +					$(g.gDiv).toggleClass('hideBody');
                                                  +					$(this).toggleClass('vsble');
                                                  +				});
                                                  +			}
                                                  +		}
                                                  +		//setup cdrops
                                                  +		g.cdropleft = document.createElement('span');
                                                  +		g.cdropleft.className = 'cdropleft';
                                                  +		g.cdropright = document.createElement('span');
                                                  +		g.cdropright.className = 'cdropright';
                                                  +		//add block
                                                  +		g.block.className = 'gBlock';
                                                  +		var gh = $(g.bDiv).height();
                                                  +		var gtop = g.bDiv.offsetTop;
                                                  +		$(g.block).css({
                                                  +			width: g.bDiv.style.width,
                                                  +			height: gh,
                                                  +			background: 'white',
                                                  +			position: 'relative',
                                                  +			marginBottom: (gh * -1),
                                                  +			zIndex: 1,
                                                  +			top: gtop,
                                                  +			left: '0px'
                                                  +		});
                                                  +		$(g.block).fadeTo(0, p.blockOpacity);
                                                  +		// add column control
                                                  +		if ($('th', g.hDiv).length) {
                                                  +			g.nDiv.className = 'nDiv';
                                                  +			g.nDiv.innerHTML = "<table cellpadding='0' cellspacing='0'><tbody></tbody></table>";
                                                  +			$(g.nDiv).css({
                                                  +				marginBottom: (gh * -1),
                                                  +				display: 'none',
                                                  +				top: gtop
                                                  +			}).noSelect();
                                                  +			var cn = 0;
                                                  +			$('th div', g.hDiv).each(function () {
                                                  +				var kcol = $("th[axis='col" + cn + "']", g.hDiv)[0];
                                                  +				var chk = 'checked="checked"';
                                                  +				if (kcol.style.display == 'none') {
                                                  +					chk = '';
                                                  +				}
                                                  +				$('tbody', g.nDiv).append('<tr><td class="ndcol1"><input type="checkbox" ' + chk + ' class="togCol" value="' + cn + '" /></td><td class="ndcol2">' + this.innerHTML + '</td></tr>');
                                                  +				cn++;
                                                  +			});
                                                  +			 if (p.checkbox) {
                                                  +         		$('tr', g.hDiv).each(
                                                  +                 	function () {
                                                  +                     var cth = $('<td/>');
                                                  +                     //modify by wangshibao
                                                  +                     if(!p.singleSelect){
                                                  +                        var cthch = $('<input type="checkbox"/>');
                                                  +                     }else{
                                                  +                        var cthch = $('<input type="checkbox" style="display:none"/>');
                                                  +                     }
                                                  +                     cthch.click(function () {
                                                  +                         if (this.checked) {
                                                  +                             $('tbody tr', g.bDiv).each(function () {
                                                  +                                 $(this).addClass('trSelected').find('input')[0].checked = true;
                                                  +                             })
                                                  +                         }
                                                  +                         else {
                                                  +                             $('tbody tr', g.bDiv).each(function () {
                                                  +                                 $(this).removeClass('trSelected').find('input')[0].checked = false;
                                                  +                             })
                                                  +                         }
                                                  +                     })
                                                  +                     //modify by wangshibao
                                                  +                     if(!p.singleSelect){
                                                  +                        cth.addClass("cth").attr({ width: "22",align:"center" }).append(cthch);
                                                  +                     }else{
                                                  +                        cth.addClass("cth").attr({ width: "22",align:"center",style:"padding-right:22px" }).append(cthch);
                                                  +                     }
                                                  +                     $(this).prepend(cth);
                                                  +                 })
                                                  +     		};
                                                  +			if ($.browser.msie && $.browser.version < 7.0) $('tr', g.nDiv).hover(function () {
                                                  +				$(this).addClass('ndcolover');
                                                  +			}, function () {
                                                  +				$(this).removeClass('ndcolover');
                                                  +			});
                                                  +			$('td.ndcol2', g.nDiv).click(function () {
                                                  +				if ($('input:checked', g.nDiv).length <= p.minColToggle && $(this).prev().find('input')[0].checked) return false;
                                                  +				return g.toggleCol($(this).prev().find('input').val());
                                                  +			});
                                                  +			$('input.togCol', g.nDiv).click(function () {
                                                  +				if ($('input:checked', g.nDiv).length < p.minColToggle && this.checked == false) return false;
                                                  +				$(this).parent().next().trigger('click');
                                                  +			});
                                                  +			$(g.gDiv).prepend(g.nDiv);
                                                  +			$(g.nBtn).addClass('nBtn')
                                                  +				.html('<div></div>')
                                                  +				.attr('title', '隐藏列/显示列')
                                                  +				.click(function () {
                                                  +					$(g.nDiv).toggle();
                                                  +					return true;
                                                  +				}
                                                  +			);
                                                  +			if (p.showToggleBtn) {
                                                  +				$(g.gDiv).prepend(g.nBtn);
                                                  +			}
                                                  +		}
                                                  +		// add date edit layer
                                                  +		$(g.iDiv).addClass('iDiv').css({
                                                  +			display: 'none'
                                                  +		});
                                                  +		$(g.bDiv).append(g.iDiv);
                                                  +		// add flexigrid events
                                                  +		$(g.bDiv).hover(function () {
                                                  +			$(g.nDiv).hide();
                                                  +			$(g.nBtn).hide();
                                                  +		}, function () {
                                                  +			if (g.multisel) {
                                                  +				g.multisel = false;
                                                  +			}
                                                  +		});
                                                  +		$(g.gDiv).hover(function () {}, function () {
                                                  +			$(g.nDiv).hide();
                                                  +			$(g.nBtn).hide();
                                                  +		});
                                                  +		//add document events
                                                  +		$(document).mousemove(function (e) {
                                                  +			g.dragMove(e)
                                                  +		}).mouseup(function (e) {
                                                  +			g.dragEnd()
                                                  +		}).hover(function () {}, function () {
                                                  +			g.dragEnd()
                                                  +		});
                                                  +		//browser adjustments
                                                  +		if ($.browser.msie && $.browser.version < 7.0) {
                                                  +			$('.hDiv,.bDiv,.mDiv,.pDiv,.vGrip,.tDiv, .sDiv', g.gDiv).css({
                                                  +				width: '100%'
                                                  +			});
                                                  +			$(g.gDiv).addClass('ie6');
                                                  +			if (p.width != 'auto') {
                                                  +				$(g.gDiv).addClass('ie6fullwidthbug');
                                                  +			}
                                                  +		}
                                                  +		g.rePosDrag();
                                                  +		g.fixHeight();
                                                  +		//make grid functions accessible
                                                  +		t.p = p;
                                                  +		t.grid = g;
                                                  +		// load data
                                                  +		if (p.url && p.autoload) {
                                                  +			g.populate();
                                                  +		}
                                                  +		return t;
                                                  +	};
                                                  +	var docloaded = false;
                                                  +	$(document).ready(function () {
                                                  +		docloaded = true
                                                  +	});
                                                  +	$.fn.flexigrid = function (p) {
                                                  +		return this.each(function () {
                                                  +			if (!docloaded) {
                                                  +				$(this).hide();
                                                  +				var t = this;
                                                  +				$(document).ready(function () {
                                                  +					$.addFlex(t, p);
                                                  +				});
                                                  +			} else {
                                                  +				$.addFlex(this, p);
                                                  +			}
                                                  +		});
                                                  +		
                                                  +	}; //end flexigrid
                                                  +	$.fn.flexReload = function (p) { // function to reload grid
                                                  +		return this.each(function () {
                                                  +			this.p.url=p.url; //�˴��޸�Դ�� ��̬�ı�url
                                                  +			if (this.grid && this.p.url) this.grid.populate();
                                                  +		});
                                                  +	}; //end flexReload
                                                  +	$.fn.flexOptions = function (p) { //function to update general options
                                                  +		return this.each(function () {
                                                  +			if (this.grid) $.extend(this.p, p);
                                                  +		});
                                                  +	}; //end flexOptions
                                                  +	$.fn.flexToggleCol = function (cid, visible) { // function to reload grid
                                                  +		return this.each(function () {
                                                  +			if (this.grid) this.grid.toggleCol(cid, visible);
                                                  +		});
                                                  +	}; //end flexToggleCol
                                                  +	$.fn.flexAddData = function (data) { // function to add data to grid
                                                  +		return this.each(function () {
                                                  +			if (this.grid) this.grid.addData(data);
                                                  +		});
                                                  +	};
                                                  +	$.fn.noSelect = function (p) { //no select plugin by me :-)
                                                  +		var prevent = (p == null) ? true : p;
                                                  +		if (prevent) {
                                                  +			return this.each(function () {
                                                  +				if ($.browser.msie || $.browser.safari) $(this).bind('selectstart', function () {
                                                  +					return false;
                                                  +				});
                                                  +				else if ($.browser.mozilla) {
                                                  +					$(this).css('MozUserSelect', 'none');
                                                  +					$('body').trigger('focus');
                                                  +				} else if ($.browser.opera) $(this).bind('mousedown', function () {
                                                  +					return false;
                                                  +				});
                                                  +				else $(this).attr('unselectable', 'on');
                                                  +			});
                                                  +		} else {
                                                  +			return this.each(function () {
                                                  +				if ($.browser.msie || $.browser.safari) $(this).unbind('selectstart');
                                                  +				else if ($.browser.mozilla) $(this).css('MozUserSelect', 'inherit');
                                                  +				else if ($.browser.opera) $(this).unbind('mousedown');
                                                  +				else $(this).removeAttr('unselectable', 'on');
                                                  +			});
                                                  +		}
                                                  +	}; //end noSelect
                                                  +})(jQuery);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/flexigrid/jquery.cookie.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/flexigrid/jquery.cookie.js
                                                  new file mode 100644
                                                  index 00000000..8e8e1d9e
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/flexigrid/jquery.cookie.js
                                                  @@ -0,0 +1,92 @@
                                                  +/**
                                                  + * Cookie plugin
                                                  + *
                                                  + * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
                                                  + * Dual licensed under the MIT and GPL licenses:
                                                  + * http://www.opensource.org/licenses/mit-license.php
                                                  + * http://www.gnu.org/licenses/gpl.html
                                                  + *
                                                  + */
                                                  +
                                                  +/**
                                                  + * Create a cookie with the given name and value and other optional parameters.
                                                  + *
                                                  + * @example $.cookie('the_cookie', 'the_value');
                                                  + * @desc Set the value of a cookie.
                                                  + * @example $.cookie('the_cookie', 'the_value', {expires: 7, path: '/', domain: 'jquery.com', secure: true});
                                                  + * @desc Create a cookie with all available options.
                                                  + * @example $.cookie('the_cookie', 'the_value');
                                                  + * @desc Create a session cookie.
                                                  + * @example $.cookie('the_cookie', null);
                                                  + * @desc Delete a cookie by passing null as value.
                                                  + *
                                                  + * @param String name The name of the cookie.
                                                  + * @param String value The value of the cookie.
                                                  + * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
                                                  + * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
                                                  + *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
                                                  + *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
                                                  + *                             when the the browser exits.
                                                  + * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
                                                  + * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
                                                  + * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
                                                  + *                        require a secure protocol (like HTTPS).
                                                  + * @type undefined
                                                  + *
                                                  + * @name $.cookie
                                                  + * @cat Plugins/Cookie
                                                  + * @author Klaus Hartl/klaus.hartl@stilbuero.de
                                                  + */
                                                  +
                                                  +/**
                                                  + * Get the value of a cookie with the given name.
                                                  + *
                                                  + * @example $.cookie('the_cookie');
                                                  + * @desc Get the value of a cookie.
                                                  + *
                                                  + * @param String name The name of the cookie.
                                                  + * @return The value of the cookie.
                                                  + * @type String
                                                  + *
                                                  + * @name $.cookie
                                                  + * @cat Plugins/Cookie
                                                  + * @author Klaus Hartl/klaus.hartl@stilbuero.de
                                                  + */
                                                  +jQuery.cookie = function(name, value, options) {
                                                  +    if (typeof value != 'undefined') { // name and value given, set cookie
                                                  +        options = options || {};
                                                  +        if (value === null) {
                                                  +            value = '';
                                                  +            options.expires = -1;
                                                  +        }
                                                  +        var expires = '';
                                                  +        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
                                                  +            var date;
                                                  +            if (typeof options.expires == 'number') {
                                                  +                date = new Date();
                                                  +                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
                                                  +            } else {
                                                  +                date = options.expires;
                                                  +            }
                                                  +            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
                                                  +        }
                                                  +        var path = options.path ? '; path=' + options.path : '';
                                                  +        var domain = options.domain ? '; domain=' + options.domain : '';
                                                  +        var secure = options.secure ? '; secure' : '';
                                                  +        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
                                                  +    } else { // only name given, get cookie
                                                  +        var cookieValue = null;
                                                  +        if (document.cookie && document.cookie != '') {
                                                  +            var cookies = document.cookie.split(';');
                                                  +            for (var i = 0; i < cookies.length; i++) {
                                                  +                var cookie = jQuery.trim(cookies[i]);
                                                  +                // Does this cookie string begin with the name we want?
                                                  +                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                                                  +                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                                                  +                    break;
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        return cookieValue;
                                                  +    }
                                                  +};
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/Base64.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/Base64.js
                                                  new file mode 100644
                                                  index 00000000..69da4d63
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/Base64.js
                                                  @@ -0,0 +1,223 @@
                                                  +/**
                                                  + *create by 2012-08-25 pm 17:48
                                                  + *@author hexinglun@gmail.com
                                                  + *http://code.google.com/p/lazycode/
                                                  + *BASE64 Encode and Decode By UTF-8 unicode
                                                  + *可以和java的BASE64编码和解码互相转化
                                                  + */
                                                  +(function(){
                                                  +	var BASE64_MAPPING = [
                                                  +		'A','B','C','D','E','F','G','H',
                                                  +		'I','J','K','L','M','N','O','P',
                                                  +		'Q','R','S','T','U','V','W','X',
                                                  +		'Y','Z','a','b','c','d','e','f',
                                                  +		'g','h','i','j','k','l','m','n',
                                                  +		'o','p','q','r','s','t','u','v',
                                                  +		'w','x','y','z','0','1','2','3',
                                                  +		'4','5','6','7','8','9','+','/'
                                                  +	];
                                                  +
                                                  +	/**
                                                  +	 *ascii convert to binary
                                                  +	 */
                                                  +	var _toBinary = function(ascii){
                                                  +		var binary = new Array();
                                                  +		while(ascii > 0){
                                                  +			var b = ascii%2;
                                                  +			ascii = Math.floor(ascii/2);
                                                  +			binary.push(b);
                                                  +		}
                                                  +		/*
                                                  +		var len = binary.length;
                                                  +		if(6-len > 0){
                                                  +			for(var i = 6-len ; i > 0 ; --i){
                                                  +				binary.push(0);
                                                  +			}
                                                  +		}*/
                                                  +		binary.reverse();
                                                  +		return binary;
                                                  +	};
                                                  +
                                                  +	/**
                                                  +	 *binary convert to decimal
                                                  +	 */
                                                  +	var _toDecimal  = function(binary){
                                                  +		var dec = 0;
                                                  +		var p = 0;
                                                  +		for(var i = binary.length-1 ; i >= 0 ; --i){
                                                  +			var b = binary[i];
                                                  +			if(b == 1){
                                                  +				dec += Math.pow(2 , p);
                                                  +			}
                                                  +			++p;
                                                  +		}
                                                  +		return dec;
                                                  +	};
                                                  +
                                                  +	/**
                                                  +	 *unicode convert to utf-8
                                                  +	 */
                                                  +	var _toUTF8Binary = function(c , binaryArray){
                                                  +		var mustLen = (8-(c+1)) + ((c-1)*6);
                                                  +		var fatLen = binaryArray.length;
                                                  +		var diff = mustLen - fatLen;
                                                  +		while(--diff >= 0){
                                                  +			binaryArray.unshift(0);
                                                  +		}
                                                  +		var binary = [];
                                                  +		var _c = c;
                                                  +		while(--_c >= 0){
                                                  +			binary.push(1);
                                                  +		}
                                                  +		binary.push(0);
                                                  +		var i = 0 , len = 8 - (c+1);
                                                  +		for(; i < len ; ++i){
                                                  +			binary.push(binaryArray[i]);
                                                  +		}
                                                  +
                                                  +		for(var j = 0 ; j < c-1 ; ++j){
                                                  +			binary.push(1);
                                                  +			binary.push(0);
                                                  +			var sum = 6;
                                                  +			while(--sum >= 0){
                                                  +				binary.push(binaryArray[i++]);
                                                  +			}
                                                  +		}
                                                  +		return binary;
                                                  +	};
                                                  +
                                                  +	var __BASE64 = {
                                                  +			/**
                                                  +			 *BASE64 Encode
                                                  +			 */
                                                  +			encoder:function(str){
                                                  +				var base64_Index = [];
                                                  +				var binaryArray = [];
                                                  +				for(var i = 0 , len = str.length ; i < len ; ++i){
                                                  +					var unicode = str.charCodeAt(i);
                                                  +					var _tmpBinary = _toBinary(unicode);
                                                  +					if(unicode < 0x80){
                                                  +						var _tmpdiff = 8 - _tmpBinary.length;
                                                  +						while(--_tmpdiff >= 0){
                                                  +							_tmpBinary.unshift(0);
                                                  +						}
                                                  +						binaryArray = binaryArray.concat(_tmpBinary);
                                                  +					}else if(unicode >= 0x80 && unicode <= 0x7FF){
                                                  +						binaryArray = binaryArray.concat(_toUTF8Binary(2 , _tmpBinary));
                                                  +					}else if(unicode >= 0x800 && unicode <= 0xFFFF){//UTF-8 3byte
                                                  +						binaryArray = binaryArray.concat(_toUTF8Binary(3 , _tmpBinary));
                                                  +					}else if(unicode >= 0x10000 && unicode <= 0x1FFFFF){//UTF-8 4byte
                                                  +						binaryArray = binaryArray.concat(_toUTF8Binary(4 , _tmpBinary));	
                                                  +					}else if(unicode >= 0x200000 && unicode <= 0x3FFFFFF){//UTF-8 5byte
                                                  +						binaryArray = binaryArray.concat(_toUTF8Binary(5 , _tmpBinary));
                                                  +					}else if(unicode >= 4000000 && unicode <= 0x7FFFFFFF){//UTF-8 6byte
                                                  +						binaryArray = binaryArray.concat(_toUTF8Binary(6 , _tmpBinary));
                                                  +					}
                                                  +				}
                                                  +
                                                  +				var extra_Zero_Count = 0;
                                                  +				for(var i = 0 , len = binaryArray.length ; i < len ; i+=6){
                                                  +					var diff = (i+6)-len;
                                                  +					if(diff == 2){
                                                  +						extra_Zero_Count = 2;
                                                  +					}else if(diff == 4){
                                                  +						extra_Zero_Count = 4;
                                                  +					}
                                                  +					//if(extra_Zero_Count > 0){
                                                  +					//	len += extra_Zero_Count+1;
                                                  +					//}
                                                  +					var _tmpExtra_Zero_Count = extra_Zero_Count;
                                                  +					while(--_tmpExtra_Zero_Count >= 0){
                                                  +						binaryArray.push(0);
                                                  +					}
                                                  +					base64_Index.push(_toDecimal(binaryArray.slice(i , i+6)));
                                                  +				}
                                                  +
                                                  +				var base64 = '';
                                                  +				for(var i = 0 , len = base64_Index.length ; i < len ; ++i){
                                                  +					base64 += BASE64_MAPPING[base64_Index[i]];
                                                  +				}
                                                  +
                                                  +				for(var i = 0 , len = extra_Zero_Count/2 ; i < len ; ++i){
                                                  +					base64 += '=';
                                                  +				}
                                                  +				return base64;
                                                  +			},
                                                  +			/**
                                                  +			 *BASE64  Decode for UTF-8 
                                                  +			 */
                                                  +			decoder : function(_base64Str){
                                                  +				var _len = _base64Str.length;
                                                  +				var extra_Zero_Count = 0;
                                                  +				/**
                                                  +				 *计算在进行BASE64编码的时候,补了几个0
                                                  +				 */
                                                  +				if(_base64Str.charAt(_len-1) == '='){
                                                  +					//alert(_base64Str.charAt(_len-1));
                                                  +					//alert(_base64Str.charAt(_len-2));
                                                  +					if(_base64Str.charAt(_len-2) == '='){//两个等号说明补了4个0
                                                  +						extra_Zero_Count = 4;
                                                  +						_base64Str = _base64Str.substring(0 , _len-2);
                                                  +					}else{//一个等号说明补了2个0
                                                  +						extra_Zero_Count = 2;
                                                  +						_base64Str = _base64Str.substring(0 , _len - 1);
                                                  +					}
                                                  +				}
                                                  +
                                                  +				var binaryArray = [];
                                                  +				for(var i = 0 , len = _base64Str.length; i < len ; ++i){
                                                  +					var c = _base64Str.charAt(i);
                                                  +					for(var j = 0 , size = BASE64_MAPPING.length ; j < size ; ++j){
                                                  +						if(c == BASE64_MAPPING[j]){
                                                  +							var _tmp = _toBinary(j);
                                                  +							/*不足6位的补0*/
                                                  +							var _tmpLen = _tmp.length;
                                                  +							if(6-_tmpLen > 0){
                                                  +								for(var k = 6-_tmpLen ; k > 0 ; --k){
                                                  +									_tmp.unshift(0);
                                                  +								}
                                                  +							}
                                                  +							binaryArray = binaryArray.concat(_tmp);
                                                  +							break;
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +
                                                  +				if(extra_Zero_Count > 0){
                                                  +					binaryArray = binaryArray.slice(0 , binaryArray.length - extra_Zero_Count);
                                                  +				}
                                                  +
                                                  +				var unicode = [];
                                                  +				var unicodeBinary = [];
                                                  +				for(var i = 0 , len = binaryArray.length ; i < len ; ){
                                                  +					if(binaryArray[i] == 0){
                                                  +						unicode=unicode.concat(_toDecimal(binaryArray.slice(i,i+8)));
                                                  +						i += 8;
                                                  +					}else{
                                                  +						var sum = 0;
                                                  +						while(i < len){
                                                  +							if(binaryArray[i] == 1){
                                                  +								++sum;
                                                  +							}else{
                                                  +								break;
                                                  +							}
                                                  +							++i;
                                                  +						}
                                                  +						unicodeBinary = unicodeBinary.concat(binaryArray.slice(i+1 , i+8-sum));
                                                  +						i += 8 - sum;
                                                  +						while(sum > 1){
                                                  +							unicodeBinary = unicodeBinary.concat(binaryArray.slice(i+2 , i+8));
                                                  +							i += 8;
                                                  +							--sum;
                                                  +						}
                                                  +						unicode = unicode.concat(_toDecimal(unicodeBinary));
                                                  +						unicodeBinary = [];
                                                  +					}
                                                  +				}
                                                  +				return unicode;
                                                  +			}
                                                  +	};
                                                  +
                                                  +	window.BASE64 = __BASE64;
                                                  +})
                                                  +();
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/json.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/json.js
                                                  new file mode 100644
                                                  index 00000000..b4c02d3f
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/json.js
                                                  @@ -0,0 +1,480 @@
                                                  +/*
                                                  +    http://www.JSON.org/json2.js
                                                  +    2011-02-23
                                                  +
                                                  +    Public Domain.
                                                  +
                                                  +    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
                                                  +
                                                  +    See http://www.JSON.org/js.html
                                                  +
                                                  +
                                                  +    This code should be minified before deployment.
                                                  +    See http://javascript.crockford.com/jsmin.html
                                                  +
                                                  +    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
                                                  +    NOT CONTROL.
                                                  +
                                                  +
                                                  +    This file creates a global JSON object containing two methods: stringify
                                                  +    and parse.
                                                  +
                                                  +        JSON.stringify(value, replacer, space)
                                                  +            value       any JavaScript value, usually an object or array.
                                                  +
                                                  +            replacer    an optional parameter that determines how object
                                                  +                        values are stringified for objects. It can be a
                                                  +                        function or an array of strings.
                                                  +
                                                  +            space       an optional parameter that specifies the indentation
                                                  +                        of nested structures. If it is omitted, the text will
                                                  +                        be packed without extra whitespace. If it is a number,
                                                  +                        it will specify the number of spaces to indent at each
                                                  +                        level. If it is a string (such as '\t' or '&nbsp;'),
                                                  +                        it contains the characters used to indent at each level.
                                                  +
                                                  +            This method produces a JSON text from a JavaScript value.
                                                  +
                                                  +            When an object value is found, if the object contains a toJSON
                                                  +            method, its toJSON method will be called and the result will be
                                                  +            stringified. A toJSON method does not serialize: it returns the
                                                  +            value represented by the name/value pair that should be serialized,
                                                  +            or undefined if nothing should be serialized. The toJSON method
                                                  +            will be passed the key associated with the value, and this will be
                                                  +            bound to the value
                                                  +
                                                  +            For example, this would serialize Dates as ISO strings.
                                                  +
                                                  +                Date.prototype.toJSON = function (key) {
                                                  +                    function f(n) {
                                                  +                        // Format integers to have at least two digits.
                                                  +                        return n < 10 ? '0' + n : n;
                                                  +                    }
                                                  +
                                                  +                    return this.getUTCFullYear()   + '-' +
                                                  +                         f(this.getUTCMonth() + 1) + '-' +
                                                  +                         f(this.getUTCDate())      + 'T' +
                                                  +                         f(this.getUTCHours())     + ':' +
                                                  +                         f(this.getUTCMinutes())   + ':' +
                                                  +                         f(this.getUTCSeconds())   + 'Z';
                                                  +                };
                                                  +
                                                  +            You can provide an optional replacer method. It will be passed the
                                                  +            key and value of each member, with this bound to the containing
                                                  +            object. The value that is returned from your method will be
                                                  +            serialized. If your method returns undefined, then the member will
                                                  +            be excluded from the serialization.
                                                  +
                                                  +            If the replacer parameter is an array of strings, then it will be
                                                  +            used to select the members to be serialized. It filters the results
                                                  +            such that only members with keys listed in the replacer array are
                                                  +            stringified.
                                                  +
                                                  +            Values that do not have JSON representations, such as undefined or
                                                  +            functions, will not be serialized. Such values in objects will be
                                                  +            dropped; in arrays they will be replaced with null. You can use
                                                  +            a replacer function to replace those with JSON values.
                                                  +            JSON.stringify(undefined) returns undefined.
                                                  +
                                                  +            The optional space parameter produces a stringification of the
                                                  +            value that is filled with line breaks and indentation to make it
                                                  +            easier to read.
                                                  +
                                                  +            If the space parameter is a non-empty string, then that string will
                                                  +            be used for indentation. If the space parameter is a number, then
                                                  +            the indentation will be that many spaces.
                                                  +
                                                  +            Example:
                                                  +
                                                  +            text = JSON.stringify(['e', {pluribus: 'unum'}]);
                                                  +            // text is '["e",{"pluribus":"unum"}]'
                                                  +
                                                  +
                                                  +            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
                                                  +            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
                                                  +
                                                  +            text = JSON.stringify([new Date()], function (key, value) {
                                                  +                return this[key] instanceof Date ?
                                                  +                    'Date(' + this[key] + ')' : value;
                                                  +            });
                                                  +            // text is '["Date(---current time---)"]'
                                                  +
                                                  +
                                                  +        JSON.parse(text, reviver)
                                                  +            This method parses a JSON text to produce an object or array.
                                                  +            It can throw a SyntaxError exception.
                                                  +
                                                  +            The optional reviver parameter is a function that can filter and
                                                  +            transform the results. It receives each of the keys and values,
                                                  +            and its return value is used instead of the original value.
                                                  +            If it returns what it received, then the structure is not modified.
                                                  +            If it returns undefined then the member is deleted.
                                                  +
                                                  +            Example:
                                                  +
                                                  +            // Parse the text. Values that look like ISO date strings will
                                                  +            // be converted to Date objects.
                                                  +
                                                  +            myData = JSON.parse(text, function (key, value) {
                                                  +                var a;
                                                  +                if (typeof value === 'string') {
                                                  +                    a =
                                                  +/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
                                                  +                    if (a) {
                                                  +                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
                                                  +                            +a[5], +a[6]));
                                                  +                    }
                                                  +                }
                                                  +                return value;
                                                  +            });
                                                  +
                                                  +            myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
                                                  +                var d;
                                                  +                if (typeof value === 'string' &&
                                                  +                        value.slice(0, 5) === 'Date(' &&
                                                  +                        value.slice(-1) === ')') {
                                                  +                    d = new Date(value.slice(5, -1));
                                                  +                    if (d) {
                                                  +                        return d;
                                                  +                    }
                                                  +                }
                                                  +                return value;
                                                  +            });
                                                  +
                                                  +
                                                  +    This is a reference implementation. You are free to copy, modify, or
                                                  +    redistribute.
                                                  +*/
                                                  +
                                                  +/*jslint evil: true, strict: false, regexp: false */
                                                  +
                                                  +/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
                                                  +    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
                                                  +    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
                                                  +    lastIndex, length, parse, prototype, push, replace, slice, stringify,
                                                  +    test, toJSON, toString, valueOf
                                                  +*/
                                                  +
                                                  +
                                                  +// Create a JSON object only if one does not already exist. We create the
                                                  +// methods in a closure to avoid creating global variables.
                                                  +
                                                  +var JSON;
                                                  +if (!JSON) {
                                                  +    JSON = {};
                                                  +}
                                                  +
                                                  +(function () {
                                                  +    "use strict";
                                                  +
                                                  +    function f(n) {
                                                  +        // Format integers to have at least two digits.
                                                  +        return n < 10 ? '0' + n : n;
                                                  +    }
                                                  +
                                                  +    if (typeof Date.prototype.toJSON !== 'function') {
                                                  +
                                                  +        Date.prototype.toJSON = function (key) {
                                                  +
                                                  +            return isFinite(this.valueOf()) ?
                                                  +                this.getUTCFullYear()     + '-' +
                                                  +                f(this.getUTCMonth() + 1) + '-' +
                                                  +                f(this.getUTCDate())      + 'T' +
                                                  +                f(this.getUTCHours())     + ':' +
                                                  +                f(this.getUTCMinutes())   + ':' +
                                                  +                f(this.getUTCSeconds())   + 'Z' : null;
                                                  +        };
                                                  +
                                                  +        String.prototype.toJSON      =
                                                  +            Number.prototype.toJSON  =
                                                  +            Boolean.prototype.toJSON = function (key) {
                                                  +                return this.valueOf();
                                                  +            };
                                                  +    }
                                                  +
                                                  +    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
                                                  +        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
                                                  +        gap,
                                                  +        indent,
                                                  +        meta = {    // table of character substitutions
                                                  +            '\b': '\\b',
                                                  +            '\t': '\\t',
                                                  +            '\n': '\\n',
                                                  +            '\f': '\\f',
                                                  +            '\r': '\\r',
                                                  +            '"' : '\\"',
                                                  +            '\\': '\\\\'
                                                  +        },
                                                  +        rep;
                                                  +
                                                  +
                                                  +    function quote(string) {
                                                  +
                                                  +// If the string contains no control characters, no quote characters, and no
                                                  +// backslash characters, then we can safely slap some quotes around it.
                                                  +// Otherwise we must also replace the offending characters with safe escape
                                                  +// sequences.
                                                  +
                                                  +        escapable.lastIndex = 0;
                                                  +        return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
                                                  +            var c = meta[a];
                                                  +            return typeof c === 'string' ? c :
                                                  +                '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                                                  +        }) + '"' : '"' + string + '"';
                                                  +    }
                                                  +
                                                  +
                                                  +    function str(key, holder) {
                                                  +
                                                  +// Produce a string from holder[key].
                                                  +
                                                  +        var i,          // The loop counter.
                                                  +            k,          // The member key.
                                                  +            v,          // The member value.
                                                  +            length,
                                                  +            mind = gap,
                                                  +            partial,
                                                  +            value = holder[key];
                                                  +
                                                  +// If the value has a toJSON method, call it to obtain a replacement value.
                                                  +
                                                  +        if (value && typeof value === 'object' &&
                                                  +                typeof value.toJSON === 'function') {
                                                  +            value = value.toJSON(key);
                                                  +        }
                                                  +
                                                  +// If we were called with a replacer function, then call the replacer to
                                                  +// obtain a replacement value.
                                                  +
                                                  +        if (typeof rep === 'function') {
                                                  +            value = rep.call(holder, key, value);
                                                  +        }
                                                  +
                                                  +// What happens next depends on the value's type.
                                                  +
                                                  +        switch (typeof value) {
                                                  +        case 'string':
                                                  +            return quote(value);
                                                  +
                                                  +        case 'number':
                                                  +
                                                  +// JSON numbers must be finite. Encode non-finite numbers as null.
                                                  +
                                                  +            return isFinite(value) ? String(value) : 'null';
                                                  +
                                                  +        case 'boolean':
                                                  +        case 'null':
                                                  +
                                                  +// If the value is a boolean or null, convert it to a string. Note:
                                                  +// typeof null does not produce 'null'. The case is included here in
                                                  +// the remote chance that this gets fixed someday.
                                                  +
                                                  +            return String(value);
                                                  +
                                                  +// If the type is 'object', we might be dealing with an object or an array or
                                                  +// null.
                                                  +
                                                  +        case 'object':
                                                  +
                                                  +// Due to a specification blunder in ECMAScript, typeof null is 'object',
                                                  +// so watch out for that case.
                                                  +
                                                  +            if (!value) {
                                                  +                return 'null';
                                                  +            }
                                                  +
                                                  +// Make an array to hold the partial results of stringifying this object value.
                                                  +
                                                  +            gap += indent;
                                                  +            partial = [];
                                                  +
                                                  +// Is the value an array?
                                                  +
                                                  +            if (Object.prototype.toString.apply(value) === '[object Array]') {
                                                  +
                                                  +// The value is an array. Stringify every element. Use null as a placeholder
                                                  +// for non-JSON values.
                                                  +
                                                  +                length = value.length;
                                                  +                for (i = 0; i < length; i += 1) {
                                                  +                    partial[i] = str(i, value) || 'null';
                                                  +                }
                                                  +
                                                  +// Join all of the elements together, separated with commas, and wrap them in
                                                  +// brackets.
                                                  +
                                                  +                v = partial.length === 0 ? '[]' : gap ?
                                                  +                    '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
                                                  +                    '[' + partial.join(',') + ']';
                                                  +                gap = mind;
                                                  +                return v;
                                                  +            }
                                                  +
                                                  +// If the replacer is an array, use it to select the members to be stringified.
                                                  +
                                                  +            if (rep && typeof rep === 'object') {
                                                  +                length = rep.length;
                                                  +                for (i = 0; i < length; i += 1) {
                                                  +                    if (typeof rep[i] === 'string') {
                                                  +                        k = rep[i];
                                                  +                        v = str(k, value);
                                                  +                        if (v) {
                                                  +                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            } else {
                                                  +
                                                  +// Otherwise, iterate through all of the keys in the object.
                                                  +
                                                  +                for (k in value) {
                                                  +                    if (Object.prototype.hasOwnProperty.call(value, k)) {
                                                  +                        v = str(k, value);
                                                  +                        if (v) {
                                                  +                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +
                                                  +// Join all of the member texts together, separated with commas,
                                                  +// and wrap them in braces.
                                                  +
                                                  +            v = partial.length === 0 ? '{}' : gap ?
                                                  +                '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
                                                  +                '{' + partial.join(',') + '}';
                                                  +            gap = mind;
                                                  +            return v;
                                                  +        }
                                                  +    }
                                                  +
                                                  +// If the JSON object does not yet have a stringify method, give it one.
                                                  +
                                                  +    if (typeof JSON.stringify !== 'function') {
                                                  +        JSON.stringify = function (value, replacer, space) {
                                                  +
                                                  +// The stringify method takes a value and an optional replacer, and an optional
                                                  +// space parameter, and returns a JSON text. The replacer can be a function
                                                  +// that can replace values, or an array of strings that will select the keys.
                                                  +// A default replacer method can be provided. Use of the space parameter can
                                                  +// produce text that is more easily readable.
                                                  +
                                                  +            var i;
                                                  +            gap = '';
                                                  +            indent = '';
                                                  +
                                                  +// If the space parameter is a number, make an indent string containing that
                                                  +// many spaces.
                                                  +
                                                  +            if (typeof space === 'number') {
                                                  +                for (i = 0; i < space; i += 1) {
                                                  +                    indent += ' ';
                                                  +                }
                                                  +
                                                  +// If the space parameter is a string, it will be used as the indent string.
                                                  +
                                                  +            } else if (typeof space === 'string') {
                                                  +                indent = space;
                                                  +            }
                                                  +
                                                  +// If there is a replacer, it must be a function or an array.
                                                  +// Otherwise, throw an error.
                                                  +
                                                  +            rep = replacer;
                                                  +            if (replacer && typeof replacer !== 'function' &&
                                                  +                    (typeof replacer !== 'object' ||
                                                  +                    typeof replacer.length !== 'number')) {
                                                  +                throw new Error('JSON.stringify');
                                                  +            }
                                                  +
                                                  +// Make a fake root object containing our value under the key of ''.
                                                  +// Return the result of stringifying the value.
                                                  +
                                                  +            return str('', {'': value});
                                                  +        };
                                                  +    }
                                                  +
                                                  +
                                                  +// If the JSON object does not yet have a parse method, give it one.
                                                  +
                                                  +    if (typeof JSON.parse !== 'function') {
                                                  +        JSON.parse = function (text, reviver) {
                                                  +
                                                  +// The parse method takes a text and an optional reviver function, and returns
                                                  +// a JavaScript value if the text is a valid JSON text.
                                                  +
                                                  +            var j;
                                                  +
                                                  +            function walk(holder, key) {
                                                  +
                                                  +// The walk method is used to recursively walk the resulting structure so
                                                  +// that modifications can be made.
                                                  +
                                                  +                var k, v, value = holder[key];
                                                  +                if (value && typeof value === 'object') {
                                                  +                    for (k in value) {
                                                  +                        if (Object.prototype.hasOwnProperty.call(value, k)) {
                                                  +                            v = walk(value, k);
                                                  +                            if (v !== undefined) {
                                                  +                                value[k] = v;
                                                  +                            } else {
                                                  +                                delete value[k];
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                return reviver.call(holder, key, value);
                                                  +            }
                                                  +
                                                  +
                                                  +// Parsing happens in four stages. In the first stage, we replace certain
                                                  +// Unicode characters with escape sequences. JavaScript handles many characters
                                                  +// incorrectly, either silently deleting them, or treating them as line endings.
                                                  +
                                                  +            text = String(text);
                                                  +            cx.lastIndex = 0;
                                                  +            if (cx.test(text)) {
                                                  +                text = text.replace(cx, function (a) {
                                                  +                    return '\\u' +
                                                  +                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                                                  +                });
                                                  +            }
                                                  +
                                                  +// In the second stage, we run the text against regular expressions that look
                                                  +// for non-JSON patterns. We are especially concerned with '()' and 'new'
                                                  +// because they can cause invocation, and '=' because it can cause mutation.
                                                  +// But just to be safe, we want to reject all unexpected forms.
                                                  +
                                                  +// We split the second stage into 4 regexp operations in order to work around
                                                  +// crippling inefficiencies in IE's and Safari's regexp engines. First we
                                                  +// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
                                                  +// replace all simple value tokens with ']' characters. Third, we delete all
                                                  +// open brackets that follow a colon or comma or that begin the text. Finally,
                                                  +// we look to see that the remaining characters are only whitespace or ']' or
                                                  +// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
                                                  +
                                                  +            if (/^[\],:{}\s]*$/
                                                  +                    .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
                                                  +                        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
                                                  +                        .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
                                                  +
                                                  +// In the third stage we use the eval function to compile the text into a
                                                  +// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
                                                  +// in JavaScript: it can begin a block or an object literal. We wrap the text
                                                  +// in parens to eliminate the ambiguity.
                                                  +
                                                  +                j = eval('(' + text + ')');
                                                  +
                                                  +// In the optional fourth stage, we recursively walk the new structure, passing
                                                  +// each name/value pair to a reviver function for possible transformation.
                                                  +
                                                  +                return typeof reviver === 'function' ?
                                                  +                    walk({'': j}, '') : j;
                                                  +            }
                                                  +
                                                  +// If the text is not JSON parseable, then a SyntaxError is thrown.
                                                  +
                                                  +            throw new SyntaxError('JSON.parse');
                                                  +        };
                                                  +    }
                                                  +}());
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/map.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/map.js
                                                  new file mode 100644
                                                  index 00000000..d548e5e0
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/map.js
                                                  @@ -0,0 +1,62 @@
                                                  +function HashMap() {
                                                  +	/**Map大小**/
                                                  +	var size = 0;
                                                  +	/**对象**/
                                                  +	var entry = new Object();
                                                  +	/**Map的存put方法**/
                                                  +	this.put = function(key, value) {
                                                  +		if (!this.containsKey(key)) {
                                                  +			size++;
                                                  +			entry[key] = value;
                                                  +		}
                                                  +	};
                                                  +	/**Map取get方法**/
                                                  +	this.get = function(key) {
                                                  +		return this.containsKey(key) ? entry[key] : null;
                                                  +	};
                                                  +	/**Map删除remove方法**/
                                                  +	this.remove = function(key) {
                                                  +		if (this.containsKey(key) && (
                                                  +		delete entry[key] )) {
                                                  +			size--;
                                                  +		}
                                                  +	};
                                                  +	/**是否包含Key**/
                                                  +	this.containsKey = function(key) {
                                                  +		return ( key in entry);
                                                  +	};
                                                  +	/**是否包含Value**/
                                                  +	this.containsValue = function(value) {
                                                  +		for (var prop in entry) {
                                                  +			if (entry[prop] == value) {
                                                  +				return true;
                                                  +			}
                                                  +		}
                                                  +		return false;
                                                  +	};
                                                  +	/**所有的Value**/
                                                  +	this.values = function() {
                                                  +		var values = new Array();
                                                  +		for (var prop in entry) {
                                                  +			values.push(entry[prop]);
                                                  +		}
                                                  +		return values;
                                                  +	};
                                                  +	/**所有的 Key**/
                                                  +	this.keys = function() {
                                                  +		var keys = new Array();
                                                  +		for (var prop in entry) {
                                                  +			keys.push(prop);
                                                  +		}
                                                  +		return keys;
                                                  +	};
                                                  +	/**Map size**/
                                                  +	this.size = function() {
                                                  +		return size;
                                                  +	};
                                                  +	/**清空Map**/
                                                  +	this.clear = function() {
                                                  +		size = 0;
                                                  +		entry = new Object();
                                                  +	};
                                                  +} 
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/multi_drop_list.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/multi_drop_list.js
                                                  new file mode 100644
                                                  index 00000000..27f11f17
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/multi_drop_list.js
                                                  @@ -0,0 +1,120 @@
                                                  +/*############################################## 多选下拉列表 ############################################
                                                  +*使用方法
                                                  +*1,准备好所要渲染的Input[text],例如id为multi_drop_list_input
                                                  +*2,调用MultDropList方法
                                                  +*      参数含义:data为下拉列表的数据源,格式{k:"id",v:"text"}|{k:"id",v:"text"}|{k:"id",v:"text"}...
                                                  +*              selectedIdsInput为Input[text],值为选中的checkbox的id字符串,格式id,id,id...
                                                  +*              width为下拉列表的宽度(默认是渲染的inut[text]的宽度),height为下拉列表的高度.下拉列表默认最小高度20px,最大200px
                                                  +*              isSingleSelect 是否为单选,默认多选
                                                  +*/
                                                  +
                                                  +document.write("<sty"+"le>");
                                                  +document.write(".wraper { position: relative; z-index:1;}");
                                                  +document.write(".list { min-height:20px; max-height:200px; overflow: auto; position: absolute; border: 1px solid #3da2ea; display: none; background: none repeat scroll 0 0 #fff; float: left;}");
                                                  +document.write(".list ul li { padding-left: 0px; padding-top: 2px; padding-bottom: 2px;}");
                                                  +document.write("ul { list-style: none outside none; padding: 3px;}");
                                                  +document.write("</sty"+"le>");
                                                  +
                                                  +(function($) {
                                                  +	$.fn.extend({
                                                  +		MultDropList : function(options) {
                                                  +			var op = $.extend({
                                                  +				data : "",
                                                  +				selectedIdsInput : "",
                                                  +				width : "",
                                                  +				height : "",
                                                  +				isSingleSelect : false
                                                  +			}, options);
                                                  +			return this.each(function() {
                                                  +				var thisInput = $(this);
                                                  +				var wraper = thisInput.wrapAll("<div><div></div></div>").parent().parent().addClass('wraper');
                                                  +
                                                  +				var listDiv = $('<div class="list" id="MultDropListDiv"></div>').appendTo(wraper);
                                                  +				if(op.width == ""){
                                                  +					op.width = $(this).css('width');
                                                  +				}
                                                  +				listDiv.css({
                                                  +					"width" : op.width,
                                                  +					"height" : op.height
                                                  +				});
                                                  +				
                                                  +				//控制弹出页面的显示与隐藏
                                                  +				thisInput.click(function(e) {
                                                  +					listDiv.toggle();
                                                  +					e.stopPropagation();
                                                  +				});
                                                  +				$(document).click(function() {
                                                  +					listDiv.hide();
                                                  +				});
                                                  +				listDiv.filter("*").click(function(e) {
                                                  +					e.stopPropagation();
                                                  +				});
                                                  +				
                                                  +				//加载默认数据
                                                  +				//listDiv.append('<ul></ul>');
                                                  +				var listArr = op.data.split("|");
                                                  +				if (listArr.length == 0 || (listArr.length == 1 && listArr[0] == '')) {
                                                  +					listDiv.append('<ul><li><span style="padding-left:5px;color:red">无</span></li></ul>');
                                                  +				} else {
                                                  +					if(op.isSingleSelect == false){
                                                  +						listDiv.append('<ul><li><input type="checkbox" class="selectAll" value="selectAll" /><span style="padding-left:5px">全部</span></li></ul>');
                                                  +					}else{
                                                  +						listDiv.append('<ul></ul>');
                                                  +					}
                                                  +				}
                                                  +				var $ul = listDiv.find("ul");
                                                  +
                                                  +				//初始化下拉列表
                                                  +				var jsonData;
                                                  +				for (var i = 0; i < listArr.length; i++) {
                                                  +					if (listArr[i] == "") {
                                                  +						continue;
                                                  +					}
                                                  +					jsonData = eval("(" + listArr[i] + ")");
                                                  +					$ul.append('<li><input type="checkbox" name="ck" id="ck'+i+'" value="' + jsonData.k + '" /><span style="padding-left:5px">' + (jsonData.v == '' ? jsonData.k : jsonData.v) + '</span></li>');
                                                  +				}
                                                  +
                                                  +				//选中
                                                  +				var seledArr = op.selectedIdsInput.val().split(",");
                                                  +				$.each(seledArr, function(index) {
                                                  +					$("li input[value='" + seledArr[index] + "']", $ul).attr("checked", "checked");
                                                  +					var vArr = new Array();
                                                  +					$("input[class!='selectAll']:checked", $ul).each(function(index) {
                                                  +						vArr[index] = $(this).next().text();
                                                  +					});
                                                  +					thisInput.val(vArr.join(","));
                                                  +				});
                                                  +				
                                                  +				//全部选择或全不选
                                                  +				$("li:first input", $ul).click(function() {
                                                  +					if ($(this).attr("checked")) {
                                                  +						$("li input", $ul).attr("checked", "checked");
                                                  +					} else {
                                                  +						$("li input", $ul).removeAttr("checked");
                                                  +					}
                                                  +				});
                                                  +				
                                                  +				//点击其它复选框时,更新隐藏控件值,文本框的值
                                                  +				$("input", $ul).click(function() {
                                                  +					var objId = $(this).attr('id');
                                                  +					if(op.isSingleSelect == true && jQuery(this).attr("checked") == "checked"){
                                                  +						$("li input[id!="+objId+"]", $ul).removeAttr("checked");
                                                  +					}
                                                  +					var kArr = new Array();
                                                  +					var vArr = new Array();
                                                  +					$("input[class!='selectAll']:checked", $ul).each(function(index) {
                                                  +						kArr[index] = $(this).val();
                                                  +						vArr[index] = $(this).next().text();
                                                  +					});
                                                  +					op.selectedIdsInput.val(kArr.join(","));
                                                  +					thisInput.val(vArr.join(","));
                                                  +				});
                                                  +			});
                                                  +		}
                                                  +	});
                                                  +	$.fn.extend({
                                                  +	    MultDropListRemove : function(options) {
                                                  +	        $(this).parent().parent().find('#MultDropListDiv:first').remove();
                                                  +	    }
                                                  +	});
                                                  +})(jQuery);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/uuid.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/uuid.js
                                                  new file mode 100644
                                                  index 00000000..b14be498
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/util/uuid.js
                                                  @@ -0,0 +1,78 @@
                                                  +// JavaScript Document// On creation of a UUID object, set it's initial value
                                                  +function UUID(){
                                                  +    this.id = this.createUUID().toLowerCase();
                                                  +}
                                                  +
                                                  + 
                                                  +
                                                  +// When asked what this Object is, lie and return it's value
                                                  +UUID.prototype.valueOf = function(){ return this.id; };
                                                  +UUID.prototype.toString = function(){ return this.id; };
                                                  +
                                                  + 
                                                  +
                                                  +//
                                                  +// INSTANCE SPECIFIC METHODS
                                                  +//
                                                  +UUID.prototype.createUUID = function(){
                                                  +    //
                                                  +    // Loose interpretation of the specification DCE 1.1: Remote Procedure Call
                                                  +    // since JavaScript doesn't allow access to internal systems, the last 48 bits
                                                  +    // of the node section is made up using a series of random numbers (6 octets long).
                                                  +    // 
                                                  +    var dg = new Date(1582, 10, 15, 0, 0, 0, 0);
                                                  +    var dc = new Date();
                                                  +    var t = dc.getTime() - dg.getTime();
                                                  +    var tl = UUID.getIntegerBits(t,0,31);
                                                  +    var tm = UUID.getIntegerBits(t,32,47);
                                                  +    var thv = UUID.getIntegerBits(t,48,59) + '1'; // version 1, security version is 2
                                                  +    var csar = UUID.getIntegerBits(UUID.rand(4095),0,7);
                                                  +    var csl = UUID.getIntegerBits(UUID.rand(4095),0,7);
                                                  +
                                                  +    // since detection of anything about the machine/browser is far to buggy,
                                                  +    // include some more random numbers here
                                                  +    // if NIC or an IP can be obtained reliably, that should be put in
                                                  +    // here instead.
                                                  +    var n = UUID.getIntegerBits(UUID.rand(8191),0,7) +
                                                  +            UUID.getIntegerBits(UUID.rand(8191),8,15) +
                                                  +            UUID.getIntegerBits(UUID.rand(8191),0,7) +
                                                  +            UUID.getIntegerBits(UUID.rand(8191),8,15) +
                                                  +            UUID.getIntegerBits(UUID.rand(8191),0,15); // this last number is two octets long
                                                  +    return tl + tm  + thv  + csar + csl + n;
                                                  +};
                                                  +
                                                  + 
                                                  +
                                                  +//Pull out only certain bits from a very large integer, used to get the time
                                                  +//code information for the first part of a UUID. Will return zero's if there
                                                  +//aren't enough bits to shift where it needs to.
                                                  +UUID.getIntegerBits = function(val,start,end){
                                                  + var base16 = UUID.returnBase(val,16);
                                                  + var quadArray = new Array();
                                                  + var quadString = '';
                                                  + var i = 0;
                                                  + for(i=0;i<base16.length;i++){
                                                  +     quadArray.push(base16.substring(i,i+1));   
                                                  + }
                                                  + for(i=Math.floor(start/4);i<=Math.floor(end/4);i++){
                                                  +     if(!quadArray[i] || quadArray[i] == '') quadString += '0';
                                                  +     else quadString += quadArray[i];
                                                  + }
                                                  + return quadString;
                                                  +};
                                                  +
                                                  + 
                                                  +
                                                  +//Replaced from the original function to leverage the built in methods in
                                                  +//JavaScript. Thanks to Robert Kieffer for pointing this one out
                                                  +UUID.returnBase = function(number, base){
                                                  + return (number).toString(base).toUpperCase();
                                                  +};
                                                  +
                                                  + 
                                                  +
                                                  +//pick a random number within a range of numbers
                                                  +//int b rand(int a); where 0 <= b <= a
                                                  +UUID.rand = function(max){
                                                  + return Math.floor(Math.random() * (max + 1));
                                                  +};
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/1_close.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/1_close.png
                                                  new file mode 100644
                                                  index 00000000..68ccb3c3
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/1_close.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/1_open.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/1_open.png
                                                  new file mode 100644
                                                  index 00000000..d6ff36d3
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/1_open.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/2.png
                                                  new file mode 100644
                                                  index 00000000..9eff506b
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/2.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/3.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/3.png
                                                  new file mode 100644
                                                  index 00000000..d7ba6d0c
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/3.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/4.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/4.png
                                                  new file mode 100644
                                                  index 00000000..753e2bfd
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/4.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/5.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/5.png
                                                  new file mode 100644
                                                  index 00000000..0c5eccd5
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/5.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/6.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/6.png
                                                  new file mode 100644
                                                  index 00000000..070b8352
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/6.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/7.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/7.png
                                                  new file mode 100644
                                                  index 00000000..532b037f
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/7.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/8.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/8.png
                                                  new file mode 100644
                                                  index 00000000..a8f3a86e
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/8.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/9.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/9.png
                                                  new file mode 100644
                                                  index 00000000..4db73cd4
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/diy/9.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/line_conn.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/line_conn.gif
                                                  new file mode 100644
                                                  index 00000000..d561d36a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/line_conn.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/loading.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/loading.gif
                                                  new file mode 100644
                                                  index 00000000..e8c28929
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/loading.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/zTreeStandard.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/zTreeStandard.gif
                                                  new file mode 100644
                                                  index 00000000..50c94fd4
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/zTreeStandard.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/zTreeStandard.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/zTreeStandard.png
                                                  new file mode 100644
                                                  index 00000000..ffda01ef
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/img/zTreeStandard.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/jquery.ztree.core-3.4.min.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/jquery.ztree.core-3.4.min.js
                                                  new file mode 100644
                                                  index 00000000..1cb3fdd2
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/jquery.ztree.core-3.4.min.js
                                                  @@ -0,0 +1,69 @@
                                                  +/*
                                                  + * JQuery zTree core 3.4
                                                  + * http://zTree.me/
                                                  + *
                                                  + * Copyright (c) 2010 Hunter.z
                                                  + *
                                                  + * Licensed same as jquery - MIT License
                                                  + * http://www.opensource.org/licenses/mit-license.php
                                                  + *
                                                  + * email: hunter.z@263.net
                                                  + * Date: 2012-09-03
                                                  + */
                                                  +(function(k){var F,G,H,I,J,K,s={},L={},t={},M={treeId:"",treeObj:null,view:{addDiyDom:null,autoCancelSelected:!0,dblClickExpand:!0,expandSpeed:"fast",fontCss:{},nameIsHTML:!1,selectedMulti:!0,showIcon:!0,showLine:!0,showTitle:!0},data:{key:{children:"children",name:"name",title:"",url:"url"},simpleData:{enable:!1,idKey:"id",pIdKey:"pId",rootPId:null},keep:{parent:!1,leaf:!1}},async:{enable:!1,contentType:"application/x-www-form-urlencoded",type:"post",dataType:"text",url:"",autoParam:[],otherParam:[],
                                                  +dataFilter:null},callback:{beforeAsync:null,beforeClick:null,beforeRightClick:null,beforeMouseDown:null,beforeMouseUp:null,beforeExpand:null,beforeCollapse:null,beforeRemove:null,onAsyncError:null,onAsyncSuccess:null,onNodeCreated:null,onClick:null,onRightClick:null,onMouseDown:null,onMouseUp:null,onExpand:null,onCollapse:null,onRemove:null}},u=[function(b){var a=b.treeObj,c=e.event;a.bind(c.NODECREATED,function(a,c,h){j.apply(b.callback.onNodeCreated,[a,c,h])});a.bind(c.CLICK,function(a,c,h,l,g){j.apply(b.callback.onClick,
                                                  +[c,h,l,g])});a.bind(c.EXPAND,function(a,c,h){j.apply(b.callback.onExpand,[a,c,h])});a.bind(c.COLLAPSE,function(a,c,h){j.apply(b.callback.onCollapse,[a,c,h])});a.bind(c.ASYNC_SUCCESS,function(a,c,h,l){j.apply(b.callback.onAsyncSuccess,[a,c,h,l])});a.bind(c.ASYNC_ERROR,function(a,c,h,l,g,e){j.apply(b.callback.onAsyncError,[a,c,h,l,g,e])})}],v=[function(b){var a=e.event;b.treeObj.unbind(a.NODECREATED).unbind(a.CLICK).unbind(a.EXPAND).unbind(a.COLLAPSE).unbind(a.ASYNC_SUCCESS).unbind(a.ASYNC_ERROR)}],
                                                  +w=[function(b){var a=g.getCache(b);a||(a={},g.setCache(b,a));a.nodes=[];a.doms=[]}],x=[function(b,a,c,d,f,h){if(c){var l=g.getRoot(b),e=b.data.key.children;c.level=a;c.tId=b.treeId+"_"+ ++l.zId;c.parentTId=d?d.tId:null;if(c[e]&&c[e].length>0){if(typeof c.open=="string")c.open=j.eqs(c.open,"true");c.open=!!c.open;c.isParent=!0;c.zAsync=!0}else{c.open=!1;if(typeof c.isParent=="string")c.isParent=j.eqs(c.isParent,"true");c.isParent=!!c.isParent;c.zAsync=!c.isParent}c.isFirstNode=f;c.isLastNode=h;c.getParentNode=
                                                  +function(){return g.getNodeCache(b,c.parentTId)};c.getPreNode=function(){return g.getPreNode(b,c)};c.getNextNode=function(){return g.getNextNode(b,c)};c.isAjaxing=!1;g.fixPIdKeyValue(b,c)}}],y=[function(b){var a=b.target,c=g.getSetting(b.data.treeId),d="",f=null,h="",l="",i=null,n=null,r=null;if(j.eqs(b.type,"mousedown"))l="mousedown";else if(j.eqs(b.type,"mouseup"))l="mouseup";else if(j.eqs(b.type,"contextmenu"))l="contextmenu";else if(j.eqs(b.type,"click"))if(j.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+
                                                  +e.id.SWITCH)!==null)d=(k(a).parent("li").get(0)||k(a).parentsUntil("li").parent().get(0)).id,h="switchNode";else{if(r=j.getMDom(c,a,[{tagName:"a",attrName:"treeNode"+e.id.A}]))d=(k(r).parent("li").get(0)||k(r).parentsUntil("li").parent().get(0)).id,h="clickNode"}else if(j.eqs(b.type,"dblclick")&&(l="dblclick",r=j.getMDom(c,a,[{tagName:"a",attrName:"treeNode"+e.id.A}])))d=(k(r).parent("li").get(0)||k(r).parentsUntil("li").parent().get(0)).id,h="switchNode";if(l.length>0&&d.length==0&&(r=j.getMDom(c,
                                                  +a,[{tagName:"a",attrName:"treeNode"+e.id.A}])))d=(k(r).parent("li").get(0)||k(r).parentsUntil("li").parent().get(0)).id;if(d.length>0)switch(f=g.getNodeCache(c,d),h){case "switchNode":f.isParent?j.eqs(b.type,"click")||j.eqs(b.type,"dblclick")&&j.apply(c.view.dblClickExpand,[c.treeId,f],c.view.dblClickExpand)?i=F:h="":h="";break;case "clickNode":i=G}switch(l){case "mousedown":n=H;break;case "mouseup":n=I;break;case "dblclick":n=J;break;case "contextmenu":n=K}return{stop:!1,node:f,nodeEventType:h,nodeEventCallback:i,
                                                  +treeEventType:l,treeEventCallback:n}}],z=[function(b){var a=g.getRoot(b);a||(a={},g.setRoot(b,a));a[b.data.key.children]=[];a.expandTriggerFlag=!1;a.curSelectedList=[];a.noSelection=!0;a.createdNodes=[];a.zId=0}],A=[],B=[],C=[],D=[],E=[],g={addNodeCache:function(b,a){g.getCache(b).nodes[g.getNodeCacheId(a.tId)]=a},getNodeCacheId:function(b){return b.substring(b.lastIndexOf("_")+1)},addAfterA:function(b){B.push(b)},addBeforeA:function(b){A.push(b)},addInnerAfterA:function(b){D.push(b)},addInnerBeforeA:function(b){C.push(b)},
                                                  +addInitBind:function(b){u.push(b)},addInitUnBind:function(b){v.push(b)},addInitCache:function(b){w.push(b)},addInitNode:function(b){x.push(b)},addInitProxy:function(b){y.push(b)},addInitRoot:function(b){z.push(b)},addNodesData:function(b,a,c){var d=b.data.key.children;a[d]||(a[d]=[]);if(a[d].length>0)a[d][a[d].length-1].isLastNode=!1,i.setNodeLineIcos(b,a[d][a[d].length-1]);a.isParent=!0;a[d]=a[d].concat(c)},addSelectedNode:function(b,a){var c=g.getRoot(b);g.isSelectedNode(b,a)||c.curSelectedList.push(a)},
                                                  +addCreatedNode:function(b,a){(b.callback.onNodeCreated||b.view.addDiyDom)&&g.getRoot(b).createdNodes.push(a)},addZTreeTools:function(b){E.push(b)},exSetting:function(b){k.extend(!0,M,b)},fixPIdKeyValue:function(b,a){b.data.simpleData.enable&&(a[b.data.simpleData.pIdKey]=a.parentTId?a.getParentNode()[b.data.simpleData.idKey]:b.data.simpleData.rootPId)},getAfterA:function(b,a,c){for(var d=0,f=B.length;d<f;d++)B[d].apply(this,arguments)},getBeforeA:function(b,a,c){for(var d=0,f=A.length;d<f;d++)A[d].apply(this,
                                                  +arguments)},getInnerAfterA:function(b,a,c){for(var d=0,f=D.length;d<f;d++)D[d].apply(this,arguments)},getInnerBeforeA:function(b,a,c){for(var d=0,f=C.length;d<f;d++)C[d].apply(this,arguments)},getCache:function(b){return t[b.treeId]},getNextNode:function(b,a){if(!a)return null;for(var c=b.data.key.children,d=a.parentTId?a.getParentNode():g.getRoot(b),f=0,h=d[c].length-1;f<=h;f++)if(d[c][f]===a)return f==h?null:d[c][f+1];return null},getNodeByParam:function(b,a,c,d){if(!a||!c)return null;for(var f=
                                                  +b.data.key.children,h=0,l=a.length;h<l;h++){if(a[h][c]==d)return a[h];var e=g.getNodeByParam(b,a[h][f],c,d);if(e)return e}return null},getNodeCache:function(b,a){if(!a)return null;var c=t[b.treeId].nodes[g.getNodeCacheId(a)];return c?c:null},getNodeName:function(b,a){return""+a[b.data.key.name]},getNodeTitle:function(b,a){return""+a[b.data.key.title===""?b.data.key.name:b.data.key.title]},getNodes:function(b){return g.getRoot(b)[b.data.key.children]},getNodesByParam:function(b,a,c,d){if(!a||!c)return[];
                                                  +for(var f=b.data.key.children,h=[],l=0,e=a.length;l<e;l++)a[l][c]==d&&h.push(a[l]),h=h.concat(g.getNodesByParam(b,a[l][f],c,d));return h},getNodesByParamFuzzy:function(b,a,c,d){if(!a||!c)return[];for(var f=b.data.key.children,h=[],l=0,e=a.length;l<e;l++)typeof a[l][c]=="string"&&a[l][c].indexOf(d)>-1&&h.push(a[l]),h=h.concat(g.getNodesByParamFuzzy(b,a[l][f],c,d));return h},getNodesByFilter:function(b,a,c,d,f){if(!a)return d?null:[];for(var h=b.data.key.children,l=d?null:[],e=0,i=a.length;e<i;e++){if(j.apply(c,
                                                  +[a[e],f],!1)){if(d)return a[e];l.push(a[e])}var k=g.getNodesByFilter(b,a[e][h],c,d,f);if(d&&k)return k;l=d?k:l.concat(k)}return l},getPreNode:function(b,a){if(!a)return null;for(var c=b.data.key.children,d=a.parentTId?a.getParentNode():g.getRoot(b),f=0,h=d[c].length;f<h;f++)if(d[c][f]===a)return f==0?null:d[c][f-1];return null},getRoot:function(b){return b?L[b.treeId]:null},getSetting:function(b){return s[b]},getSettings:function(){return s},getZTreeTools:function(b){return(b=this.getRoot(this.getSetting(b)))?
                                                  +b.treeTools:null},initCache:function(b){for(var a=0,c=w.length;a<c;a++)w[a].apply(this,arguments)},initNode:function(b,a,c,d,f,h){for(var l=0,e=x.length;l<e;l++)x[l].apply(this,arguments)},initRoot:function(b){for(var a=0,c=z.length;a<c;a++)z[a].apply(this,arguments)},isSelectedNode:function(b,a){for(var c=g.getRoot(b),d=0,f=c.curSelectedList.length;d<f;d++)if(a===c.curSelectedList[d])return!0;return!1},removeNodeCache:function(b,a){var c=b.data.key.children;if(a[c])for(var d=0,f=a[c].length;d<f;d++)arguments.callee(b,
                                                  +a[c][d]);g.getCache(b).nodes[g.getNodeCacheId(a.tId)]=null},removeSelectedNode:function(b,a){for(var c=g.getRoot(b),d=0,f=c.curSelectedList.length;d<f;d++)if(a===c.curSelectedList[d]||!g.getNodeCache(b,c.curSelectedList[d].tId))c.curSelectedList.splice(d,1),d--,f--},setCache:function(b,a){t[b.treeId]=a},setRoot:function(b,a){L[b.treeId]=a},setZTreeTools:function(b,a){for(var c=0,d=E.length;c<d;c++)E[c].apply(this,arguments)},transformToArrayFormat:function(b,a){if(!a)return[];var c=b.data.key.children,
                                                  +d=[];if(j.isArray(a))for(var f=0,h=a.length;f<h;f++)d.push(a[f]),a[f][c]&&(d=d.concat(g.transformToArrayFormat(b,a[f][c])));else d.push(a),a[c]&&(d=d.concat(g.transformToArrayFormat(b,a[c])));return d},transformTozTreeFormat:function(b,a){var c,d,f=b.data.simpleData.idKey,h=b.data.simpleData.pIdKey,l=b.data.key.children;if(!f||f==""||!a)return[];if(j.isArray(a)){var e=[],g=[];for(c=0,d=a.length;c<d;c++)g[a[c][f]]=a[c];for(c=0,d=a.length;c<d;c++)g[a[c][h]]&&a[c][f]!=a[c][h]?(g[a[c][h]][l]||(g[a[c][h]][l]=
                                                  +[]),g[a[c][h]][l].push(a[c])):e.push(a[c]);return e}else return[a]}},m={bindEvent:function(b){for(var a=0,c=u.length;a<c;a++)u[a].apply(this,arguments)},unbindEvent:function(b){for(var a=0,c=v.length;a<c;a++)v[a].apply(this,arguments)},bindTree:function(b){var a={treeId:b.treeId},b=b.treeObj;b.bind("click",a,m.proxy);b.bind("dblclick",a,m.proxy);b.bind("mouseover",a,m.proxy);b.bind("mouseout",a,m.proxy);b.bind("mousedown",a,m.proxy);b.bind("mouseup",a,m.proxy);b.bind("contextmenu",a,m.proxy)},unbindTree:function(b){b.treeObj.unbind("click",
                                                  +m.proxy).unbind("dblclick",m.proxy).unbind("mouseover",m.proxy).unbind("mouseout",m.proxy).unbind("mousedown",m.proxy).unbind("mouseup",m.proxy).unbind("contextmenu",m.proxy)},doProxy:function(b){for(var a=[],c=0,d=y.length;c<d;c++){var f=y[c].apply(this,arguments);a.push(f);if(f.stop)break}return a},proxy:function(b){var a=g.getSetting(b.data.treeId);if(!j.uCanDo(a,b))return!0;for(var c=m.doProxy(b),d=!0,f=!1,h=0,e=c.length;h<e;h++){var i=c[h];i.nodeEventCallback&&(f=!0,d=i.nodeEventCallback.apply(i,
                                                  +[b,i.node])&&d);i.treeEventCallback&&(f=!0,d=i.treeEventCallback.apply(i,[b,i.node])&&d)}try{f&&k("input:focus").length==0&&j.noSel(a)}catch(n){}return d}};F=function(b,a){var c=g.getSetting(b.data.treeId);if(a.open){if(j.apply(c.callback.beforeCollapse,[c.treeId,a],!0)==!1)return!0}else if(j.apply(c.callback.beforeExpand,[c.treeId,a],!0)==!1)return!0;g.getRoot(c).expandTriggerFlag=!0;i.switchNode(c,a);return!0};G=function(b,a){var c=g.getSetting(b.data.treeId),d=c.view.autoCancelSelected&&b.ctrlKey&&
                                                  +g.isSelectedNode(c,a)?0:c.view.autoCancelSelected&&b.ctrlKey&&c.view.selectedMulti?2:1;if(j.apply(c.callback.beforeClick,[c.treeId,a,d],!0)==!1)return!0;d===0?i.cancelPreSelectedNode(c,a):i.selectNode(c,a,d===2);c.treeObj.trigger(e.event.CLICK,[b,c.treeId,a,d]);return!0};H=function(b,a){var c=g.getSetting(b.data.treeId);j.apply(c.callback.beforeMouseDown,[c.treeId,a],!0)&&j.apply(c.callback.onMouseDown,[b,c.treeId,a]);return!0};I=function(b,a){var c=g.getSetting(b.data.treeId);j.apply(c.callback.beforeMouseUp,
                                                  +[c.treeId,a],!0)&&j.apply(c.callback.onMouseUp,[b,c.treeId,a]);return!0};J=function(b,a){var c=g.getSetting(b.data.treeId);j.apply(c.callback.beforeDblClick,[c.treeId,a],!0)&&j.apply(c.callback.onDblClick,[b,c.treeId,a]);return!0};K=function(b,a){var c=g.getSetting(b.data.treeId);j.apply(c.callback.beforeRightClick,[c.treeId,a],!0)&&j.apply(c.callback.onRightClick,[b,c.treeId,a]);return typeof c.callback.onRightClick!="function"};var j={apply:function(b,a,c){return typeof b=="function"?b.apply(N,
                                                  +a?a:[]):c},canAsync:function(b,a){var c=b.data.key.children;return b.async.enable&&a&&a.isParent&&!(a.zAsync||a[c]&&a[c].length>0)},clone:function(b){var a;if(b instanceof Array){a=[];for(var c=b.length;c--;)a[c]=arguments.callee(b[c]);return a}else if(typeof b=="function")return b;else if(b instanceof Object){a={};for(c in b)a[c]=arguments.callee(b[c]);return a}else return b},eqs:function(b,a){return b.toLowerCase()===a.toLowerCase()},isArray:function(b){return Object.prototype.toString.apply(b)===
                                                  +"[object Array]"},getMDom:function(b,a,c){if(!a)return null;for(;a&&a.id!==b.treeId;){for(var d=0,f=c.length;a.tagName&&d<f;d++)if(j.eqs(a.tagName,c[d].tagName)&&a.getAttribute(c[d].attrName)!==null)return a;a=a.parentNode}return null},noSel:function(b){if(g.getRoot(b).noSelection)try{window.getSelection?window.getSelection().removeAllRanges():document.selection.empty()}catch(a){}},uCanDo:function(){return!0}},i={addNodes:function(b,a,c,d){if(!b.data.keep.leaf||!a||a.isParent)if(j.isArray(c)||(c=
                                                  +[c]),b.data.simpleData.enable&&(c=g.transformTozTreeFormat(b,c)),a){var f=k("#"+a.tId+e.id.SWITCH),h=k("#"+a.tId+e.id.ICON),l=k("#"+a.tId+e.id.UL);if(!a.open)i.replaceSwitchClass(a,f,e.folder.CLOSE),i.replaceIcoClass(a,h,e.folder.CLOSE),a.open=!1,l.css({display:"none"});g.addNodesData(b,a,c);i.createNodes(b,a.level+1,c,a);d||i.expandCollapseParentNode(b,a,!0)}else g.addNodesData(b,g.getRoot(b),c),i.createNodes(b,0,c,null)},appendNodes:function(b,a,c,d,f,h){if(!c)return[];for(var e=[],j=b.data.key.children,
                                                  +k=0,m=c.length;k<m;k++){var o=c[k];if(f){var q=(d?d:g.getRoot(b))[j].length==c.length&&k==0;g.initNode(b,a,o,d,q,k==c.length-1,h);g.addNodeCache(b,o)}q=[];o[j]&&o[j].length>0&&(q=i.appendNodes(b,a+1,o[j],o,f,h&&o.open));h&&(i.makeDOMNodeMainBefore(e,b,o),i.makeDOMNodeLine(e,b,o),g.getBeforeA(b,o,e),i.makeDOMNodeNameBefore(e,b,o),g.getInnerBeforeA(b,o,e),i.makeDOMNodeIcon(e,b,o),g.getInnerAfterA(b,o,e),i.makeDOMNodeNameAfter(e,b,o),g.getAfterA(b,o,e),o.isParent&&o.open&&i.makeUlHtml(b,o,e,q.join("")),
                                                  +i.makeDOMNodeMainAfter(e,b,o),g.addCreatedNode(b,o))}return e},appendParentULDom:function(b,a){var c=[],d=k("#"+a.tId),f=k("#"+a.tId+e.id.UL),h=i.appendNodes(b,a.level+1,a[b.data.key.children],a,!1,!0);i.makeUlHtml(b,a,c,h.join(""));!d.get(0)&&a.parentTId&&(i.appendParentULDom(b,a.getParentNode()),d=k("#"+a.tId));f.get(0)&&f.remove();d.append(c.join(""))},asyncNode:function(b,a,c,d){var f,h;if(a&&!a.isParent)return j.apply(d),!1;else if(a&&a.isAjaxing)return!1;else if(j.apply(b.callback.beforeAsync,
                                                  +[b.treeId,a],!0)==!1)return j.apply(d),!1;if(a)a.isAjaxing=!0,k("#"+a.tId+e.id.ICON).attr({style:"","class":"button ico_loading"});var g=b.async.contentType=="application/json",p=g?"{":"",n="";for(f=0,h=b.async.autoParam.length;a&&f<h;f++){var m=b.async.autoParam[f].split("="),o=m;m.length>1&&(o=m[1],m=m[0]);g?(n=typeof a[m]=="string"?'"':"",p+='"'+o+('":'+n+a[m]).replace(/'/g,"\\'")+n+","):p+=o+("="+a[m]).replace(/&/g,"%26")+"&"}if(j.isArray(b.async.otherParam))for(f=0,h=b.async.otherParam.length;f<
                                                  +h;f+=2)g?(n=typeof b.async.otherParam[f+1]=="string"?'"':"",p+='"'+b.async.otherParam[f]+('":'+n+b.async.otherParam[f+1]).replace(/'/g,"\\'")+n+","):p+=b.async.otherParam[f]+("="+b.async.otherParam[f+1]).replace(/&/g,"%26")+"&";else for(var q in b.async.otherParam)g?(n=typeof b.async.otherParam[q]=="string"?'"':"",p+='"'+q+('":'+n+b.async.otherParam[q]).replace(/'/g,"\\'")+n+","):p+=q+("="+b.async.otherParam[q]).replace(/&/g,"%26")+"&";p.length>1&&(p=p.substring(0,p.length-1));g&&(p+="}");k.ajax({contentType:b.async.contentType,
                                                  +type:b.async.type,url:j.apply(b.async.url,[b.treeId,a],b.async.url),data:p,dataType:b.async.dataType,success:function(f){var h=[];try{h=!f||f.length==0?[]:typeof f=="string"?eval("("+f+")"):f}catch(g){h=f}if(a)a.isAjaxing=null,a.zAsync=!0;i.setNodeLineIcos(b,a);h&&h!==""?(h=j.apply(b.async.dataFilter,[b.treeId,a,h],h),i.addNodes(b,a,h?j.clone(h):[],!!c)):i.addNodes(b,a,[],!!c);b.treeObj.trigger(e.event.ASYNC_SUCCESS,[b.treeId,a,f]);j.apply(d)},error:function(c,d,f){if(a)a.isAjaxing=null;i.setNodeLineIcos(b,
                                                  +a);b.treeObj.trigger(e.event.ASYNC_ERROR,[b.treeId,a,c,d,f])}});return!0},cancelPreSelectedNode:function(b,a){for(var c=g.getRoot(b).curSelectedList,d=c.length-1;d>=0;d--)if(!a||a===c[d])if(k("#"+c[d].tId+e.id.A).removeClass(e.node.CURSELECTED),i.setNodeName(b,c[d]),a){g.removeSelectedNode(b,a);break}if(!a)g.getRoot(b).curSelectedList=[]},createNodeCallback:function(b){if(b.callback.onNodeCreated||b.view.addDiyDom)for(var a=g.getRoot(b);a.createdNodes.length>0;){var c=a.createdNodes.shift();j.apply(b.view.addDiyDom,
                                                  +[b.treeId,c]);b.callback.onNodeCreated&&b.treeObj.trigger(e.event.NODECREATED,[b.treeId,c])}},createNodes:function(b,a,c,d){if(c&&c.length!=0){var f=g.getRoot(b),h=b.data.key.children,h=!d||d.open||!!k("#"+d[h][0].tId).get(0);f.createdNodes=[];a=i.appendNodes(b,a,c,d,!0,h);d?(d=k("#"+d.tId+e.id.UL),d.get(0)&&d.append(a.join(""))):b.treeObj.append(a.join(""));i.createNodeCallback(b)}},destroy:function(b){b&&(g.initCache(b),g.initRoot(b),m.unbindTree(b),m.unbindEvent(b),b.treeObj.empty())},expandCollapseNode:function(b,
                                                  +a,c,d,f){var h=g.getRoot(b),l=b.data.key.children;if(a){if(h.expandTriggerFlag){var p=f,f=function(){p&&p();a.open?b.treeObj.trigger(e.event.EXPAND,[b.treeId,a]):b.treeObj.trigger(e.event.COLLAPSE,[b.treeId,a])};h.expandTriggerFlag=!1}if(a.open==c)j.apply(f,[]);else{if(!a.open&&a.isParent&&(!k("#"+a.tId+e.id.UL).get(0)||a[l]&&a[l].length>0&&!k("#"+a[l][0].tId).get(0)))i.appendParentULDom(b,a),i.createNodeCallback(b);var c=k("#"+a.tId+e.id.UL),h=k("#"+a.tId+e.id.SWITCH),n=k("#"+a.tId+e.id.ICON);a.isParent?
                                                  +(a.open=!a.open,a.iconOpen&&a.iconClose&&n.attr("style",i.makeNodeIcoStyle(b,a)),a.open?(i.replaceSwitchClass(a,h,e.folder.OPEN),i.replaceIcoClass(a,n,e.folder.OPEN),d==!1||b.view.expandSpeed==""?(c.show(),j.apply(f,[])):a[l]&&a[l].length>0?c.slideDown(b.view.expandSpeed,f):(c.show(),j.apply(f,[]))):(i.replaceSwitchClass(a,h,e.folder.CLOSE),i.replaceIcoClass(a,n,e.folder.CLOSE),d==!1||b.view.expandSpeed==""||!(a[l]&&a[l].length>0)?(c.hide(),j.apply(f,[])):c.slideUp(b.view.expandSpeed,f))):j.apply(f,
                                                  +[])}}else j.apply(f,[])},expandCollapseParentNode:function(b,a,c,d,f){a&&(a.parentTId?(i.expandCollapseNode(b,a,c,d),a.parentTId&&i.expandCollapseParentNode(b,a.getParentNode(),c,d,f)):i.expandCollapseNode(b,a,c,d,f))},expandCollapseSonNode:function(b,a,c,d,f){var h=g.getRoot(b),e=b.data.key.children,h=a?a[e]:h[e],e=a?!1:d,j=g.getRoot(b).expandTriggerFlag;g.getRoot(b).expandTriggerFlag=!1;if(h)for(var k=0,m=h.length;k<m;k++)h[k]&&i.expandCollapseSonNode(b,h[k],c,e);g.getRoot(b).expandTriggerFlag=
                                                  +j;i.expandCollapseNode(b,a,c,d,f)},makeDOMNodeIcon:function(b,a,c){var d=g.getNodeName(a,c),d=a.view.nameIsHTML?d:d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");b.push("<span id='",c.tId,e.id.ICON,"' title='' treeNode",e.id.ICON," class='",i.makeNodeIcoClass(a,c),"' style='",i.makeNodeIcoStyle(a,c),"'></span><span id='",c.tId,e.id.SPAN,"'>",d,"</span>")},makeDOMNodeLine:function(b,a,c){b.push("<span id='",c.tId,e.id.SWITCH,"' title='' class='",i.makeNodeLineClass(a,c),"' treeNode",
                                                  +e.id.SWITCH,"></span>")},makeDOMNodeMainAfter:function(b){b.push("</li>")},makeDOMNodeMainBefore:function(b,a,c){b.push("<li id='",c.tId,"' class='level",c.level,"' tabindex='0' hidefocus='true' treenode>")},makeDOMNodeNameAfter:function(b){b.push("</a>")},makeDOMNodeNameBefore:function(b,a,c){var d=g.getNodeTitle(a,c),f=i.makeNodeUrl(a,c),h=i.makeNodeFontCss(a,c),l=[],k;for(k in h)l.push(k,":",h[k],";");b.push("<a id='",c.tId,e.id.A,"' class='level",c.level,"' treeNode",e.id.A,' onclick="',c.click||
                                                  +"",'" ',f!=null&&f.length>0?"href='"+f+"'":""," target='",i.makeNodeTarget(c),"' style='",l.join(""),"'");j.apply(a.view.showTitle,[a.treeId,c],a.view.showTitle)&&d&&b.push("title='",d.replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),"'");b.push(">")},makeNodeFontCss:function(b,a){var c=j.apply(b.view.fontCss,[b.treeId,a],b.view.fontCss);return c&&typeof c!="function"?c:{}},makeNodeIcoClass:function(b,a){var c=["ico"];a.isAjaxing||(c[0]=(a.iconSkin?a.iconSkin+"_":"")+c[0],a.isParent?
                                                  +c.push(a.open?e.folder.OPEN:e.folder.CLOSE):c.push(e.folder.DOCU));return"button "+c.join("_")},makeNodeIcoStyle:function(b,a){var c=[];if(!a.isAjaxing){var d=a.isParent&&a.iconOpen&&a.iconClose?a.open?a.iconOpen:a.iconClose:a.icon;d&&c.push("background:url(",d,") 0 0 no-repeat;");(b.view.showIcon==!1||!j.apply(b.view.showIcon,[b.treeId,a],!0))&&c.push("width:0px;height:0px;")}return c.join("")},makeNodeLineClass:function(b,a){var c=[];b.view.showLine?a.level==0&&a.isFirstNode&&a.isLastNode?c.push(e.line.ROOT):
                                                  +a.level==0&&a.isFirstNode?c.push(e.line.ROOTS):a.isLastNode?c.push(e.line.BOTTOM):c.push(e.line.CENTER):c.push(e.line.NOLINE);a.isParent?c.push(a.open?e.folder.OPEN:e.folder.CLOSE):c.push(e.folder.DOCU);return i.makeNodeLineClassEx(a)+c.join("_")},makeNodeLineClassEx:function(b){return"button level"+b.level+" switch "},makeNodeTarget:function(b){return b.target||"_blank"},makeNodeUrl:function(b,a){var c=b.data.key.url;return a[c]?a[c]:null},makeUlHtml:function(b,a,c,d){c.push("<ul id='",a.tId,e.id.UL,
                                                  +"' class='level",a.level," ",i.makeUlLineClass(b,a),"' style='display:",a.open?"block":"none","'>");c.push(d);c.push("</ul>")},makeUlLineClass:function(b,a){return b.view.showLine&&!a.isLastNode?e.line.LINE:""},removeChildNodes:function(b,a){if(a){var c=b.data.key.children,d=a[c];if(d){for(var f=0,h=d.length;f<h;f++)g.removeNodeCache(b,d[f]);g.removeSelectedNode(b);delete a[c];b.data.keep.parent?k("#"+a.tId+e.id.UL).empty():(a.isParent=!1,a.open=!1,c=k("#"+a.tId+e.id.SWITCH),d=k("#"+a.tId+e.id.ICON),
                                                  +i.replaceSwitchClass(a,c,e.folder.DOCU),i.replaceIcoClass(a,d,e.folder.DOCU),k("#"+a.tId+e.id.UL).remove())}}},setFirstNode:function(b,a){var c=b.data.key.children;if(a[c].length>0)a[c][0].isFirstNode=!0},setLastNode:function(b,a){var c=b.data.key.children,d=a[c].length;if(d>0)a[c][d-1].isLastNode=!0},removeNode:function(b,a){var c=g.getRoot(b),d=b.data.key.children,f=a.parentTId?a.getParentNode():c;a.isFirstNode=!1;a.isLastNode=!1;a.getPreNode=function(){return null};a.getNextNode=function(){return null};
                                                  +if(g.getNodeCache(b,a.tId)){k("#"+a.tId).remove();g.removeNodeCache(b,a);g.removeSelectedNode(b,a);for(var h=0,l=f[d].length;h<l;h++)if(f[d][h].tId==a.tId){f[d].splice(h,1);break}i.setFirstNode(b,f);i.setLastNode(b,f);var j,h=f[d].length;if(!b.data.keep.parent&&h==0)f.isParent=!1,f.open=!1,h=k("#"+f.tId+e.id.UL),l=k("#"+f.tId+e.id.SWITCH),j=k("#"+f.tId+e.id.ICON),i.replaceSwitchClass(f,l,e.folder.DOCU),i.replaceIcoClass(f,j,e.folder.DOCU),h.css("display","none");else if(b.view.showLine&&h>0){var n=
                                                  +f[d][h-1],h=k("#"+n.tId+e.id.UL),l=k("#"+n.tId+e.id.SWITCH);j=k("#"+n.tId+e.id.ICON);f==c?f[d].length==1?i.replaceSwitchClass(n,l,e.line.ROOT):(c=k("#"+f[d][0].tId+e.id.SWITCH),i.replaceSwitchClass(f[d][0],c,e.line.ROOTS),i.replaceSwitchClass(n,l,e.line.BOTTOM)):i.replaceSwitchClass(n,l,e.line.BOTTOM);h.removeClass(e.line.LINE)}}},replaceIcoClass:function(b,a,c){if(a&&!b.isAjaxing&&(b=a.attr("class"),b!=void 0)){b=b.split("_");switch(c){case e.folder.OPEN:case e.folder.CLOSE:case e.folder.DOCU:b[b.length-
                                                  +1]=c}a.attr("class",b.join("_"))}},replaceSwitchClass:function(b,a,c){if(a){var d=a.attr("class");if(d!=void 0){d=d.split("_");switch(c){case e.line.ROOT:case e.line.ROOTS:case e.line.CENTER:case e.line.BOTTOM:case e.line.NOLINE:d[0]=i.makeNodeLineClassEx(b)+c;break;case e.folder.OPEN:case e.folder.CLOSE:case e.folder.DOCU:d[1]=c}a.attr("class",d.join("_"));c!==e.folder.DOCU?a.removeAttr("disabled"):a.attr("disabled","disabled")}}},selectNode:function(b,a,c){c||i.cancelPreSelectedNode(b);k("#"+a.tId+
                                                  +e.id.A).addClass(e.node.CURSELECTED);g.addSelectedNode(b,a)},setNodeFontCss:function(b,a){var c=k("#"+a.tId+e.id.A),d=i.makeNodeFontCss(b,a);d&&c.css(d)},setNodeLineIcos:function(b,a){if(a){var c=k("#"+a.tId+e.id.SWITCH),d=k("#"+a.tId+e.id.UL),f=k("#"+a.tId+e.id.ICON),h=i.makeUlLineClass(b,a);h.length==0?d.removeClass(e.line.LINE):d.addClass(h);c.attr("class",i.makeNodeLineClass(b,a));a.isParent?c.removeAttr("disabled"):c.attr("disabled","disabled");f.removeAttr("style");f.attr("style",i.makeNodeIcoStyle(b,
                                                  +a));f.attr("class",i.makeNodeIcoClass(b,a))}},setNodeName:function(b,a){var c=g.getNodeTitle(b,a),d=k("#"+a.tId+e.id.SPAN);d.empty();b.view.nameIsHTML?d.html(g.getNodeName(b,a)):d.text(g.getNodeName(b,a));j.apply(b.view.showTitle,[b.treeId,a],b.view.showTitle)&&k("#"+a.tId+e.id.A).attr("title",!c?"":c)},setNodeTarget:function(b){k("#"+b.tId+e.id.A).attr("target",i.makeNodeTarget(b))},setNodeUrl:function(b,a){var c=k("#"+a.tId+e.id.A),d=i.makeNodeUrl(b,a);d==null||d.length==0?c.removeAttr("href"):
                                                  +c.attr("href",d)},switchNode:function(b,a){a.open||!j.canAsync(b,a)?i.expandCollapseNode(b,a,!a.open):b.async.enable?i.asyncNode(b,a)||i.expandCollapseNode(b,a,!a.open):a&&i.expandCollapseNode(b,a,!a.open)}};k.fn.zTree={consts:{event:{NODECREATED:"ztree_nodeCreated",CLICK:"ztree_click",EXPAND:"ztree_expand",COLLAPSE:"ztree_collapse",ASYNC_SUCCESS:"ztree_async_success",ASYNC_ERROR:"ztree_async_error"},id:{A:"_a",ICON:"_ico",SPAN:"_span",SWITCH:"_switch",UL:"_ul"},line:{ROOT:"root",ROOTS:"roots",CENTER:"center",
                                                  +BOTTOM:"bottom",NOLINE:"noline",LINE:"line"},folder:{OPEN:"open",CLOSE:"close",DOCU:"docu"},node:{CURSELECTED:"curSelectedNode"}},_z:{tools:j,view:i,event:m,data:g},getZTreeObj:function(b){return(b=g.getZTreeTools(b))?b:null},destroy:function(b){if(b&&b.length>0)i.destroy(g.getSetting(b));else for(var a in s)i.destroy(s[a])},init:function(b,a,c){var d=j.clone(M);k.extend(!0,d,a);d.treeId=b.attr("id");d.treeObj=b;d.treeObj.empty();s[d.treeId]=d;if(k.browser.msie&&parseInt(k.browser.version)<7)d.view.expandSpeed=
                                                  +"";g.initRoot(d);b=g.getRoot(d);a=d.data.key.children;c=c?j.clone(j.isArray(c)?c:[c]):[];b[a]=d.data.simpleData.enable?g.transformTozTreeFormat(d,c):c;g.initCache(d);m.unbindTree(d);m.bindTree(d);m.unbindEvent(d);m.bindEvent(d);c={setting:d,addNodes:function(a,b,c){function e(){i.addNodes(d,a,g,c==!0)}if(!b)return null;a||(a=null);if(a&&!a.isParent&&d.data.keep.leaf)return null;var g=j.clone(j.isArray(b)?b:[b]);j.canAsync(d,a)?i.asyncNode(d,a,c,e):e();return g},cancelSelectedNode:function(a){i.cancelPreSelectedNode(this.setting,
                                                  +a)},destroy:function(){i.destroy(this.setting)},expandAll:function(a){a=!!a;i.expandCollapseSonNode(this.setting,null,a,!0);return a},expandNode:function(a,b,c,e,m){if(!a||!a.isParent)return null;b!==!0&&b!==!1&&(b=!a.open);if((m=!!m)&&b&&j.apply(d.callback.beforeExpand,[d.treeId,a],!0)==!1)return null;else if(m&&!b&&j.apply(d.callback.beforeCollapse,[d.treeId,a],!0)==!1)return null;b&&a.parentTId&&i.expandCollapseParentNode(this.setting,a.getParentNode(),b,!1);if(b===a.open&&!c)return null;g.getRoot(d).expandTriggerFlag=
                                                  +m;c?i.expandCollapseSonNode(this.setting,a,b,!0,function(){e!==!1&&k("#"+a.tId).focus().blur()}):(a.open=!b,i.switchNode(this.setting,a),e!==!1&&k("#"+a.tId).focus().blur());return b},getNodes:function(){return g.getNodes(this.setting)},getNodeByParam:function(a,b,c){return!a?null:g.getNodeByParam(this.setting,c?c[this.setting.data.key.children]:g.getNodes(this.setting),a,b)},getNodeByTId:function(a){return g.getNodeCache(this.setting,a)},getNodesByParam:function(a,b,c){return!a?null:g.getNodesByParam(this.setting,
                                                  +c?c[this.setting.data.key.children]:g.getNodes(this.setting),a,b)},getNodesByParamFuzzy:function(a,b,c){return!a?null:g.getNodesByParamFuzzy(this.setting,c?c[this.setting.data.key.children]:g.getNodes(this.setting),a,b)},getNodesByFilter:function(a,b,c,d){b=!!b;return!a||typeof a!="function"?b?null:[]:g.getNodesByFilter(this.setting,c?c[this.setting.data.key.children]:g.getNodes(this.setting),a,b,d)},getNodeIndex:function(a){if(!a)return null;for(var b=d.data.key.children,c=a.parentTId?a.getParentNode():
                                                  +g.getRoot(this.setting),e=0,i=c[b].length;e<i;e++)if(c[b][e]==a)return e;return-1},getSelectedNodes:function(){for(var a=[],b=g.getRoot(this.setting).curSelectedList,c=0,d=b.length;c<d;c++)a.push(b[c]);return a},isSelectedNode:function(a){return g.isSelectedNode(this.setting,a)},reAsyncChildNodes:function(a,b,c){if(this.setting.async.enable){var d=!a;d&&(a=g.getRoot(this.setting));b=="refresh"&&(a[this.setting.data.key.children]=[],d?this.setting.treeObj.empty():k("#"+a.tId+e.id.UL).empty());i.asyncNode(this.setting,
                                                  +d?null:a,!!c)}},refresh:function(){this.setting.treeObj.empty();var a=g.getRoot(this.setting),b=a[this.setting.data.key.children];g.initRoot(this.setting);a[this.setting.data.key.children]=b;g.initCache(this.setting);i.createNodes(this.setting,0,a[this.setting.data.key.children])},removeChildNodes:function(a){if(!a)return null;var b=a[d.data.key.children];i.removeChildNodes(d,a);return b?b:null},removeNode:function(a,b){a&&(b=!!b,b&&j.apply(d.callback.beforeRemove,[d.treeId,a],!0)==!1||(i.removeNode(d,
                                                  +a),b&&this.setting.treeObj.trigger(e.event.REMOVE,[d.treeId,a])))},selectNode:function(a,b){a&&j.uCanDo(this.setting)&&(b=d.view.selectedMulti&&b,a.parentTId?i.expandCollapseParentNode(this.setting,a.getParentNode(),!0,!1,function(){k("#"+a.tId).focus().blur()}):k("#"+a.tId).focus().blur(),i.selectNode(this.setting,a,b))},transformTozTreeNodes:function(a){return g.transformTozTreeFormat(this.setting,a)},transformToArray:function(a){return g.transformToArrayFormat(this.setting,a)},updateNode:function(a){a&&
                                                  +k("#"+a.tId).get(0)&&j.uCanDo(this.setting)&&(i.setNodeName(this.setting,a),i.setNodeTarget(a),i.setNodeUrl(this.setting,a),i.setNodeLineIcos(this.setting,a),i.setNodeFontCss(this.setting,a))}};b.treeTools=c;g.setZTreeTools(d,c);b[a]&&b[a].length>0?i.createNodes(d,0,b[a]):d.async.enable&&d.async.url&&d.async.url!==""&&i.asyncNode(d);return c}};var N=k.fn.zTree,e=N.consts})(jQuery);
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/jquery.ztree.excheck-3.4.min.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/jquery.ztree.excheck-3.4.min.js
                                                  new file mode 100644
                                                  index 00000000..a3fc4c13
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/jquery.ztree.excheck-3.4.min.js
                                                  @@ -0,0 +1,33 @@
                                                  +/*
                                                  + * JQuery zTree excheck 3.4
                                                  + * http://zTree.me/
                                                  + *
                                                  + * Copyright (c) 2010 Hunter.z
                                                  + *
                                                  + * Licensed same as jquery - MIT License
                                                  + * http://www.opensource.org/licenses/mit-license.php
                                                  + *
                                                  + * email: hunter.z@263.net
                                                  + * Date: 2012-09-03
                                                  + */
                                                  +(function(m){var p,q,r,n={event:{CHECK:"ztree_check"},id:{CHECK:"_check"},checkbox:{STYLE:"checkbox",DEFAULT:"chk",DISABLED:"disable",FALSE:"false",TRUE:"true",FULL:"full",PART:"part",FOCUS:"focus"},radio:{STYLE:"radio",TYPE_ALL:"all",TYPE_LEVEL:"level"}},v={check:{enable:!1,autoCheckTrigger:!1,chkStyle:n.checkbox.STYLE,nocheckInherit:!1,radioType:n.radio.TYPE_LEVEL,chkboxType:{Y:"ps",N:"ps"}},data:{key:{checked:"checked"}},callback:{beforeCheck:null,onCheck:null}};p=function(c,a){if(a.chkDisabled===
                                                  +!0)return!1;var b=f.getSetting(c.data.treeId),d=b.data.key.checked;if(k.apply(b.callback.beforeCheck,[b.treeId,a],!0)==!1)return!0;a[d]=!a[d];e.checkNodeRelation(b,a);d=m("#"+a.tId+j.id.CHECK);e.setChkClass(b,d,a);e.repairParentChkClassWithSelf(b,a);b.treeObj.trigger(j.event.CHECK,[b.treeId,a]);return!0};q=function(c,a){if(a.chkDisabled===!0)return!1;var b=f.getSetting(c.data.treeId),d=m("#"+a.tId+j.id.CHECK);a.check_Focus=!0;e.setChkClass(b,d,a);return!0};r=function(c,a){if(a.chkDisabled===!0)return!1;
                                                  +var b=f.getSetting(c.data.treeId),d=m("#"+a.tId+j.id.CHECK);a.check_Focus=!1;e.setChkClass(b,d,a);return!0};m.extend(!0,m.fn.zTree.consts,n);m.extend(!0,m.fn.zTree._z,{tools:{},view:{checkNodeRelation:function(c,a){var b,d,g,l=c.data.key.children,h=c.data.key.checked;b=j.radio;if(c.check.chkStyle==b.STYLE){var i=f.getRadioCheckedList(c);if(a[h])if(c.check.radioType==b.TYPE_ALL){for(d=i.length-1;d>=0;d--)b=i[d],b[h]=!1,i.splice(d,1),e.setChkClass(c,m("#"+b.tId+j.id.CHECK),b),b.parentTId!=a.parentTId&&
                                                  +e.repairParentChkClassWithSelf(c,b);i.push(a)}else{i=a.parentTId?a.getParentNode():f.getRoot(c);for(d=0,g=i[l].length;d<g;d++)b=i[l][d],b[h]&&b!=a&&(b[h]=!1,e.setChkClass(c,m("#"+b.tId+j.id.CHECK),b))}else if(c.check.radioType==b.TYPE_ALL)for(d=0,g=i.length;d<g;d++)if(a==i[d]){i.splice(d,1);break}}else a[h]&&(!a[l]||a[l].length==0||c.check.chkboxType.Y.indexOf("s")>-1)&&e.setSonNodeCheckBox(c,a,!0),!a[h]&&(!a[l]||a[l].length==0||c.check.chkboxType.N.indexOf("s")>-1)&&e.setSonNodeCheckBox(c,a,!1),
                                                  +a[h]&&c.check.chkboxType.Y.indexOf("p")>-1&&e.setParentNodeCheckBox(c,a,!0),!a[h]&&c.check.chkboxType.N.indexOf("p")>-1&&e.setParentNodeCheckBox(c,a,!1)},makeChkClass:function(c,a){var b=c.data.key.checked,d=j.checkbox,g=j.radio,e="",e=a.chkDisabled===!0?d.DISABLED:a.halfCheck?d.PART:c.check.chkStyle==g.STYLE?a.check_Child_State<1?d.FULL:d.PART:a[b]?a.check_Child_State===2||a.check_Child_State===-1?d.FULL:d.PART:a.check_Child_State<1?d.FULL:d.PART,b=c.check.chkStyle+"_"+(a[b]?d.TRUE:d.FALSE)+"_"+
                                                  +e,b=a.check_Focus&&a.chkDisabled!==!0?b+"_"+d.FOCUS:b;return"button "+d.DEFAULT+" "+b},repairAllChk:function(c,a){if(c.check.enable&&c.check.chkStyle===j.checkbox.STYLE)for(var b=c.data.key.checked,d=c.data.key.children,g=f.getRoot(c),l=0,h=g[d].length;l<h;l++){var i=g[d][l];i.nocheck!==!0&&(i[b]=a);e.setSonNodeCheckBox(c,i,a)}},repairChkClass:function(c,a){if(a){f.makeChkFlag(c,a);var b=m("#"+a.tId+j.id.CHECK);e.setChkClass(c,b,a)}},repairParentChkClass:function(c,a){if(a&&a.parentTId){var b=a.getParentNode();
                                                  +e.repairChkClass(c,b);e.repairParentChkClass(c,b)}},repairParentChkClassWithSelf:function(c,a){if(a){var b=c.data.key.children;a[b]&&a[b].length>0?e.repairParentChkClass(c,a[b][0]):e.repairParentChkClass(c,a)}},repairSonChkDisabled:function(c,a,b){if(a){var d=c.data.key.children;if(a.chkDisabled!=b)a.chkDisabled=b,a.nocheck!==!0&&e.repairChkClass(c,a);if(a[d])for(var g=0,l=a[d].length;g<l;g++)e.repairSonChkDisabled(c,a[d][g],b)}},repairParentChkDisabled:function(c,a,b){if(a){if(a.chkDisabled!=b)a.chkDisabled=
                                                  +b,a.nocheck!==!0&&e.repairChkClass(c,a);e.repairParentChkDisabled(c,a.getParentNode(),b)}},setChkClass:function(c,a,b){a&&(b.nocheck===!0?a.hide():a.show(),a.removeClass(),a.addClass(e.makeChkClass(c,b)))},setParentNodeCheckBox:function(c,a,b,d){var g=c.data.key.children,l=c.data.key.checked,h=m("#"+a.tId+j.id.CHECK);d||(d=a);f.makeChkFlag(c,a);a.nocheck!==!0&&a.chkDisabled!==!0&&(a[l]=b,e.setChkClass(c,h,a),c.check.autoCheckTrigger&&a!=d&&a.nocheck!==!0&&c.treeObj.trigger(j.event.CHECK,[c.treeId,
                                                  +a]));if(a.parentTId){h=!0;if(!b)for(var g=a.getParentNode()[g],i=0,o=g.length;i<o;i++)if(g[i].nocheck!==!0&&g[i][l]||g[i].nocheck===!0&&g[i].check_Child_State>0){h=!1;break}h&&e.setParentNodeCheckBox(c,a.getParentNode(),b,d)}},setSonNodeCheckBox:function(c,a,b,d){if(a){var g=c.data.key.children,l=c.data.key.checked,h=m("#"+a.tId+j.id.CHECK);d||(d=a);var i=!1;if(a[g])for(var o=0,k=a[g].length;o<k&&a.chkDisabled!==!0;o++){var n=a[g][o];e.setSonNodeCheckBox(c,n,b,d);n.chkDisabled===!0&&(i=!0)}if(a!=
                                                  +f.getRoot(c)&&a.chkDisabled!==!0){i&&a.nocheck!==!0&&f.makeChkFlag(c,a);if(a.nocheck!==!0){if(a[l]=b,!i)a.check_Child_State=a[g]&&a[g].length>0?b?2:0:-1}else a.check_Child_State=-1;e.setChkClass(c,h,a);c.check.autoCheckTrigger&&a!=d&&a.nocheck!==!0&&c.treeObj.trigger(j.event.CHECK,[c.treeId,a])}}}},event:{},data:{getRadioCheckedList:function(c){for(var a=f.getRoot(c).radioCheckedList,b=0,d=a.length;b<d;b++)f.getNodeCache(c,a[b].tId)||(a.splice(b,1),b--,d--);return a},getCheckStatus:function(c,a){if(!c.check.enable||
                                                  +a.nocheck)return null;var b=c.data.key.checked;return{checked:a[b],half:a.halfCheck?a.halfCheck:c.check.chkStyle==j.radio.STYLE?a.check_Child_State===2:a[b]?a.check_Child_State>-1&&a.check_Child_State<2:a.check_Child_State>0}},getTreeCheckedNodes:function(c,a,b,d){if(!a)return[];for(var g=c.data.key.children,e=c.data.key.checked,h=b&&c.check.chkStyle==j.radio.STYLE&&c.check.radioType==j.radio.TYPE_ALL,d=!d?[]:d,i=0,o=a.length;i<o;i++){if(a[i].nocheck!==!0&&a[i][e]==b&&(d.push(a[i]),h))break;f.getTreeCheckedNodes(c,
                                                  +a[i][g],b,d);if(h&&d.length>0)break}return d},getTreeChangeCheckedNodes:function(c,a,b){if(!a)return[];for(var d=c.data.key.children,g=c.data.key.checked,b=!b?[]:b,e=0,h=a.length;e<h;e++)a[e].nocheck!==!0&&a[e][g]!=a[e].checkedOld&&b.push(a[e]),f.getTreeChangeCheckedNodes(c,a[e][d],b);return b},makeChkFlag:function(c,a){if(a){var b=c.data.key.children,d=c.data.key.checked,g=-1;if(a[b])for(var e=!1,h=0,i=a[b].length;h<i;h++){var f=a[b][h],k=-1;if(c.check.chkStyle==j.radio.STYLE)if(k=f.nocheck===!0?
                                                  +f.check_Child_State:f.halfCheck===!0?2:f.nocheck!==!0&&f[d]?2:f.check_Child_State>0?2:0,k==2){g=2;break}else k==0&&(g=0);else if(c.check.chkStyle==j.checkbox.STYLE){k=f.nocheck===!0?f.check_Child_State:f.halfCheck===!0?1:f.nocheck!==!0&&f[d]?f.check_Child_State===-1||f.check_Child_State===2?2:1:f.check_Child_State>0?1:0;if(k===1){g=1;break}else if(k===2&&e&&k!==g){g=1;break}else if(g===2&&k>-1&&k<2){g=1;break}else k>-1&&(g=k);e||(e=f.nocheck!==!0)}}a.check_Child_State=g}}}});var n=m.fn.zTree,k=n._z.tools,
                                                  +j=n.consts,e=n._z.view,f=n._z.data;f.exSetting(v);f.addInitBind(function(c){c.treeObj.bind(j.event.CHECK,function(a,b,d){k.apply(c.callback.onCheck,[a,b,d])})});f.addInitUnBind(function(c){c.treeObj.unbind(j.event.CHECK)});f.addInitCache(function(){});f.addInitNode(function(c,a,b,d){if(b){a=c.data.key.checked;typeof b[a]=="string"&&(b[a]=k.eqs(b[a],"true"));b[a]=!!b[a];b.checkedOld=b[a];if(typeof b.nocheck=="string")b.nocheck=k.eqs(b.nocheck,"true");b.nocheck=!!b.nocheck||c.check.nocheckInherit&&
                                                  +d&&!!d.nocheck;if(typeof b.chkDisabled=="string")b.chkDisabled=k.eqs(b.chkDisabled,"true");b.chkDisabled=!!b.chkDisabled||d&&!!d.chkDisabled;if(typeof b.halfCheck=="string")b.halfCheck=k.eqs(b.halfCheck,"true");b.halfCheck=!!b.halfCheck;b.check_Child_State=-1;b.check_Focus=!1;b.getCheckStatus=function(){return f.getCheckStatus(c,b)}}});f.addInitProxy(function(c){var a=c.target,b=f.getSetting(c.data.treeId),d="",e=null,l="",h=null;if(k.eqs(c.type,"mouseover")){if(b.check.enable&&k.eqs(a.tagName,"span")&&
                                                  +a.getAttribute("treeNode"+j.id.CHECK)!==null)d=a.parentNode.id,l="mouseoverCheck"}else if(k.eqs(c.type,"mouseout")){if(b.check.enable&&k.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+j.id.CHECK)!==null)d=a.parentNode.id,l="mouseoutCheck"}else if(k.eqs(c.type,"click")&&b.check.enable&&k.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+j.id.CHECK)!==null)d=a.parentNode.id,l="checkNode";if(d.length>0)switch(e=f.getNodeCache(b,d),l){case "checkNode":h=p;break;case "mouseoverCheck":h=q;break;case "mouseoutCheck":h=
                                                  +r}return{stop:!1,node:e,nodeEventType:l,nodeEventCallback:h,treeEventType:"",treeEventCallback:null}});f.addInitRoot(function(c){f.getRoot(c).radioCheckedList=[]});f.addBeforeA(function(c,a,b){var d=c.data.key.checked;c.check.enable&&(f.makeChkFlag(c,a),c.check.chkStyle==j.radio.STYLE&&c.check.radioType==j.radio.TYPE_ALL&&a[d]&&f.getRoot(c).radioCheckedList.push(a),b.push("<span ID='",a.tId,j.id.CHECK,"' class='",e.makeChkClass(c,a),"' treeNode",j.id.CHECK,a.nocheck===!0?" style='display:none;'":
                                                  +"","></span>"))});f.addZTreeTools(function(c,a){a.checkNode=function(a,b,f,h){var i=this.setting.data.key.checked;if(a.chkDisabled!==!0&&(b!==!0&&b!==!1&&(b=!a[i]),h=!!h,(a[i]!==b||f)&&!(h&&k.apply(this.setting.callback.beforeCheck,[this.setting.treeId,a],!0)==!1)&&k.uCanDo(this.setting)&&this.setting.check.enable&&a.nocheck!==!0))a[i]=b,b=m("#"+a.tId+j.id.CHECK),(f||this.setting.check.chkStyle===j.radio.STYLE)&&e.checkNodeRelation(this.setting,a),e.setChkClass(this.setting,b,a),e.repairParentChkClassWithSelf(this.setting,
                                                  +a),h&&c.treeObj.trigger(j.event.CHECK,[c.treeId,a])};a.checkAllNodes=function(a){e.repairAllChk(this.setting,!!a)};a.getCheckedNodes=function(a){var b=this.setting.data.key.children;return f.getTreeCheckedNodes(this.setting,f.getRoot(c)[b],a!==!1)};a.getChangeCheckedNodes=function(){var a=this.setting.data.key.children;return f.getTreeChangeCheckedNodes(this.setting,f.getRoot(c)[a])};a.setChkDisabled=function(a,b){b=!!b;e.repairSonChkDisabled(this.setting,a,b);b||e.repairParentChkDisabled(this.setting,
                                                  +a,b)};var b=a.updateNode;a.updateNode=function(c,f){b&&b.apply(a,arguments);if(c&&this.setting.check.enable&&m("#"+c.tId).get(0)&&k.uCanDo(this.setting)){var l=m("#"+c.tId+j.id.CHECK);(f==!0||this.setting.check.chkStyle===j.radio.STYLE)&&e.checkNodeRelation(this.setting,c);e.setChkClass(this.setting,l,c);e.repairParentChkClassWithSelf(this.setting,c)}}});var s=e.createNodes;e.createNodes=function(c,a,b,d){s&&s.apply(e,arguments);b&&e.repairParentChkClassWithSelf(c,d)};var t=e.removeNode;e.removeNode=
                                                  +function(c,a){var b=a.getParentNode();t&&t.apply(e,arguments);a&&b&&(e.repairChkClass(c,b),e.repairParentChkClass(c,b))};var u=e.appendNodes;e.appendNodes=function(c,a,b,d,g,j){var h="";u&&(h=u.apply(e,arguments));d&&f.makeChkFlag(c,d);return h}})(jQuery);
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/jquery.ztree.exedit-3.4.min.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/jquery.ztree.exedit-3.4.min.js
                                                  new file mode 100644
                                                  index 00000000..8eb313a1
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/jquery.ztree.exedit-3.4.min.js
                                                  @@ -0,0 +1,52 @@
                                                  +/*
                                                  + * JQuery zTree exedit 3.4
                                                  + * http://zTree.me/
                                                  + *
                                                  + * Copyright (c) 2010 Hunter.z
                                                  + *
                                                  + * Licensed same as jquery - MIT License
                                                  + * http://www.opensource.org/licenses/mit-license.php
                                                  + *
                                                  + * email: hunter.z@263.net
                                                  + * Date: 2012-09-03
                                                  + */
                                                  +(function(k){var F={event:{DRAG:"ztree_drag",DROP:"ztree_drop",REMOVE:"ztree_remove",RENAME:"ztree_rename"},id:{EDIT:"_edit",INPUT:"_input",REMOVE:"_remove"},move:{TYPE_INNER:"inner",TYPE_PREV:"prev",TYPE_NEXT:"next"},node:{CURSELECTED_EDIT:"curSelectedNode_Edit",TMPTARGET_TREE:"tmpTargetzTree",TMPTARGET_NODE:"tmpTargetNode"}},D={onHoverOverNode:function(b,a){var c=p.getSetting(b.data.treeId),d=p.getRoot(c);if(d.curHoverNode!=a)D.onHoverOutNode(b);d.curHoverNode=a;f.addHoverDom(c,a)},onHoverOutNode:function(b){var b=
                                                  +p.getSetting(b.data.treeId),a=p.getRoot(b);if(a.curHoverNode&&!p.isSelectedNode(b,a.curHoverNode))f.removeTreeDom(b,a.curHoverNode),a.curHoverNode=null},onMousedownNode:function(b,a){function c(b){if(z.dragFlag==0&&Math.abs(K-b.clientX)<g.edit.drag.minMoveSize&&Math.abs(L-b.clientY)<g.edit.drag.minMoveSize)return!0;var a,c,e,j,l;l=g.data.key.children;h.noSel(g);k("body").css("cursor","pointer");if(z.dragFlag==0){if(h.apply(g.callback.beforeDrag,[g.treeId,m],!0)==!1)return q(b),!0;for(a=0,c=m.length;a<
                                                  +c;a++){if(a==0)z.dragNodeShowBefore=[];e=m[a];e.isParent&&e.open?(f.expandCollapseNode(g,e,!e.open),z.dragNodeShowBefore[e.tId]=!0):z.dragNodeShowBefore[e.tId]=!1}z.dragFlag=1;z.showHoverDom=!1;h.showIfameMask(g,!0);e=!0;j=-1;if(m.length>1){var s=m[0].parentTId?m[0].getParentNode()[l]:p.getNodes(g);l=[];for(a=0,c=s.length;a<c;a++)if(z.dragNodeShowBefore[s[a].tId]!==void 0&&(e&&j>-1&&j+1!==a&&(e=!1),l.push(s[a]),j=a),m.length===l.length){m=l;break}}e&&(D=m[0].getPreNode(),E=m[m.length-1].getNextNode());
                                                  +y=k("<ul class='zTreeDragUL'></ul>");for(a=0,c=m.length;a<c;a++)if(e=m[a],e.editNameFlag=!1,f.selectNode(g,e,a>0),f.removeTreeDom(g,e),j=k("<li id='"+e.tId+"_tmp'></li>"),j.append(k("#"+e.tId+d.id.A).clone()),j.css("padding","0"),j.children("#"+e.tId+d.id.A).removeClass(d.node.CURSELECTED),y.append(j),a==g.edit.drag.maxShowNodeNum-1){j=k("<li id='"+e.tId+"_moretmp'><a>  ...  </a></li>");y.append(j);break}y.attr("id",m[0].tId+d.id.UL+"_tmp");y.addClass(g.treeObj.attr("class"));y.appendTo("body");t=
                                                  +k("<span class='tmpzTreeMove_arrow'></span>");t.attr("id","zTreeMove_arrow_tmp");t.appendTo("body");g.treeObj.trigger(d.event.DRAG,[b,g.treeId,m])}if(z.dragFlag==1){r&&t.attr("id")==b.target.id&&u&&b.clientX+x.scrollLeft()+2>k("#"+u+d.id.A,r).offset().left?(e=k("#"+u+d.id.A,r),b.target=e.length>0?e.get(0):b.target):r&&(r.removeClass(d.node.TMPTARGET_TREE),u&&k("#"+u+d.id.A,r).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+F.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+
                                                  +"_"+F.move.TYPE_INNER));u=r=null;G=!1;i=g;e=p.getSettings();for(var B in e)if(e[B].treeId&&e[B].edit.enable&&e[B].treeId!=g.treeId&&(b.target.id==e[B].treeId||k(b.target).parents("#"+e[B].treeId).length>0))G=!0,i=e[B];B=x.scrollTop();j=x.scrollLeft();l=i.treeObj.offset();a=i.treeObj.get(0).scrollHeight;e=i.treeObj.get(0).scrollWidth;c=b.clientY+B-l.top;var o=i.treeObj.height()+l.top-b.clientY-B,n=b.clientX+j-l.left,H=i.treeObj.width()+l.left-b.clientX-j;l=c<g.edit.drag.borderMax&&c>g.edit.drag.borderMin;
                                                  +var s=o<g.edit.drag.borderMax&&o>g.edit.drag.borderMin,I=n<g.edit.drag.borderMax&&n>g.edit.drag.borderMin,C=H<g.edit.drag.borderMax&&H>g.edit.drag.borderMin,o=c>g.edit.drag.borderMin&&o>g.edit.drag.borderMin&&n>g.edit.drag.borderMin&&H>g.edit.drag.borderMin,n=l&&i.treeObj.scrollTop()<=0,H=s&&i.treeObj.scrollTop()+i.treeObj.height()+10>=a,M=I&&i.treeObj.scrollLeft()<=0,N=C&&i.treeObj.scrollLeft()+i.treeObj.width()+10>=e;if(b.target.id&&i.treeObj.find("#"+b.target.id).length>0){for(var A=b.target;A&&
                                                  +A.tagName&&!h.eqs(A.tagName,"li")&&A.id!=i.treeId;)A=A.parentNode;var O=!0;for(a=0,c=m.length;a<c;a++)if(e=m[a],A.id===e.tId){O=!1;break}else if(k("#"+e.tId).find("#"+A.id).length>0){O=!1;break}if(O&&b.target.id&&(b.target.id==A.id+d.id.A||k(b.target).parents("#"+A.id+d.id.A).length>0))r=k(A),u=A.id}e=m[0];if(o&&(b.target.id==i.treeId||k(b.target).parents("#"+i.treeId).length>0)){if(!r&&(b.target.id==i.treeId||n||H||M||N)&&(G||!G&&e.parentTId))r=i.treeObj;l?i.treeObj.scrollTop(i.treeObj.scrollTop()-
                                                  +10):s&&i.treeObj.scrollTop(i.treeObj.scrollTop()+10);I?i.treeObj.scrollLeft(i.treeObj.scrollLeft()-10):C&&i.treeObj.scrollLeft(i.treeObj.scrollLeft()+10);r&&r!=i.treeObj&&r.offset().left<i.treeObj.offset().left&&i.treeObj.scrollLeft(i.treeObj.scrollLeft()+r.offset().left-i.treeObj.offset().left)}y.css({top:b.clientY+B+3+"px",left:b.clientX+j+3+"px"});l=a=0;if(r&&r.attr("id")!=i.treeId){var w=u==null?null:p.getNodeCache(i,u);c=b.ctrlKey&&g.edit.drag.isMove&&g.edit.drag.isCopy||!g.edit.drag.isMove&&
                                                  +g.edit.drag.isCopy;a=!!(D&&u===D.tId);l=!!(E&&u===E.tId);j=e.parentTId&&e.parentTId==u;e=(c||!l)&&h.apply(i.edit.drag.prev,[i.treeId,m,w],!!i.edit.drag.prev);a=(c||!a)&&h.apply(i.edit.drag.next,[i.treeId,m,w],!!i.edit.drag.next);C=(c||!j)&&!(i.data.keep.leaf&&!w.isParent)&&h.apply(i.edit.drag.inner,[i.treeId,m,w],!!i.edit.drag.inner);if(!e&&!a&&!C){if(r=null,u="",v=d.move.TYPE_INNER,t.css({display:"none"}),window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null}else{c=
                                                  +k("#"+u+d.id.A,r);l=w.isLastNode?null:k("#"+w.getNextNode().tId+d.id.A,r.next());s=c.offset().top;j=c.offset().left;I=e?C?0.25:a?0.5:1:-1;C=a?C?0.75:e?0.5:0:-1;b=(b.clientY+B-s)/c.height();(I==1||b<=I&&b>=-0.2)&&e?(a=1-t.width(),l=s-t.height()/2,v=d.move.TYPE_PREV):(C==0||b>=C&&b<=1.2)&&a?(a=1-t.width(),l=l==null||w.isParent&&w.open?s+c.height()-t.height()/2:l.offset().top-t.height()/2,v=d.move.TYPE_NEXT):(a=5-t.width(),l=s,v=d.move.TYPE_INNER);t.css({display:"block",top:l+"px",left:j+a+"px"});c.addClass(d.node.TMPTARGET_NODE+
                                                  +"_"+v);if(P!=u||Q!=v)J=(new Date).getTime();if(w&&w.isParent&&v==d.move.TYPE_INNER&&(b=!0,window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId!==w.tId?(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null):window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId===w.tId&&(b=!1),b))window.zTreeMoveTimer=setTimeout(function(){v==d.move.TYPE_INNER&&w&&w.isParent&&!w.open&&(new Date).getTime()-J>i.edit.drag.autoOpenTime&&h.apply(i.callback.beforeDragOpen,[i.treeId,w],!0)&&(f.switchNode(i,
                                                  +w),i.edit.drag.autoExpandTrigger&&i.treeObj.trigger(d.event.EXPAND,[i.treeId,w]))},i.edit.drag.autoOpenTime+50),window.zTreeMoveTargetNodeTId=w.tId}}else if(v=d.move.TYPE_INNER,r&&h.apply(i.edit.drag.inner,[i.treeId,m,null],!!i.edit.drag.inner)?r.addClass(d.node.TMPTARGET_TREE):r=null,t.css({display:"none"}),window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null;P=u;Q=v}return!1}function q(b){if(window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=
                                                  +null;Q=P=null;x.unbind("mousemove",c);x.unbind("mouseup",q);x.unbind("selectstart",e);k("body").css("cursor","auto");r&&(r.removeClass(d.node.TMPTARGET_TREE),u&&k("#"+u+d.id.A,r).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+F.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+F.move.TYPE_INNER));h.showIfameMask(g,!1);z.showHoverDom=!0;if(z.dragFlag!=0){z.dragFlag=0;var a,l,j;for(a=0,l=m.length;a<l;a++)j=m[a],j.isParent&&z.dragNodeShowBefore[j.tId]&&
                                                  +!j.open&&(f.expandCollapseNode(g,j,!j.open),delete z.dragNodeShowBefore[j.tId]);y&&y.remove();t&&t.remove();var o=b.ctrlKey&&g.edit.drag.isMove&&g.edit.drag.isCopy||!g.edit.drag.isMove&&g.edit.drag.isCopy;!o&&r&&u&&m[0].parentTId&&u==m[0].parentTId&&v==d.move.TYPE_INNER&&(r=null);if(r){var n=u==null?null:p.getNodeCache(i,u);if(h.apply(g.callback.beforeDrop,[i.treeId,m,n,v,o],!0)!=!1){var s=o?h.clone(m):m;a=function(){if(G){if(!o)for(var b=0,a=m.length;b<a;b++)f.removeNode(g,m[b]);if(v==d.move.TYPE_INNER)f.addNodes(i,
                                                  +n,s);else if(f.addNodes(i,n.getParentNode(),s),v==d.move.TYPE_PREV)for(b=0,a=s.length;b<a;b++)f.moveNode(i,n,s[b],v,!1);else for(b=-1,a=s.length-1;b<a;a--)f.moveNode(i,n,s[a],v,!1)}else if(o&&v==d.move.TYPE_INNER)f.addNodes(i,n,s);else if(o&&f.addNodes(i,n.getParentNode(),s),v==d.move.TYPE_PREV)for(b=0,a=s.length;b<a;b++)f.moveNode(i,n,s[b],v,!1);else for(b=-1,a=s.length-1;b<a;a--)f.moveNode(i,n,s[a],v,!1);for(b=0,a=s.length;b<a;b++)f.selectNode(i,s[b],b>0);k("#"+s[0].tId).focus().blur()};v==d.move.TYPE_INNER&&
                                                  +h.canAsync(i,n)?f.asyncNode(i,n,!1,a):a();g.treeObj.trigger(d.event.DROP,[b,i.treeId,s,n,v,o])}}else{for(a=0,l=m.length;a<l;a++)f.selectNode(i,m[a],a>0);g.treeObj.trigger(d.event.DROP,[b,g.treeId,m,null,null,null])}}}function e(){return!1}var l,j,g=p.getSetting(b.data.treeId),z=p.getRoot(g);if(b.button==2||!g.edit.enable||!g.edit.drag.isCopy&&!g.edit.drag.isMove)return!0;var o=b.target,n=p.getRoot(g).curSelectedList,m=[];if(p.isSelectedNode(g,a))for(l=0,j=n.length;l<j;l++){if(n[l].editNameFlag&&h.eqs(o.tagName,
                                                  +"input")&&o.getAttribute("treeNode"+d.id.INPUT)!==null)return!0;m.push(n[l]);if(m[0].parentTId!==n[l].parentTId){m=[a];break}}else m=[a];f.editNodeBlur=!0;f.cancelCurEditNode(g,null,!0);var x=k(document),y,t,r,G=!1,i=g,D,E,P=null,Q=null,u=null,v=d.move.TYPE_INNER,K=b.clientX,L=b.clientY,J=(new Date).getTime();h.uCanDo(g)&&x.bind("mousemove",c);x.bind("mouseup",q);x.bind("selectstart",e);b.preventDefault&&b.preventDefault();return!0}};k.extend(!0,k.fn.zTree.consts,F);k.extend(!0,k.fn.zTree._z,{tools:{getAbs:function(b){b=
                                                  +b.getBoundingClientRect();return[b.left,b.top]},inputFocus:function(b){b.get(0)&&(b.focus(),h.setCursorPosition(b.get(0),b.val().length))},inputSelect:function(b){b.get(0)&&(b.focus(),b.select())},setCursorPosition:function(b,a){if(b.setSelectionRange)b.focus(),b.setSelectionRange(a,a);else if(b.createTextRange){var c=b.createTextRange();c.collapse(!0);c.moveEnd("character",a);c.moveStart("character",a);c.select()}},showIfameMask:function(b,a){for(var c=p.getRoot(b);c.dragMaskList.length>0;)c.dragMaskList[0].remove(),
                                                  +c.dragMaskList.shift();if(a)for(var d=k("iframe"),e=0,f=d.length;e<f;e++){var j=d.get(e),g=h.getAbs(j),j=k("<div id='zTreeMask_"+e+"' class='zTreeMask' style='top:"+g[1]+"px; left:"+g[0]+"px; width:"+j.offsetWidth+"px; height:"+j.offsetHeight+"px;'></div>");j.appendTo("body");c.dragMaskList.push(j)}}},view:{addEditBtn:function(b,a){if(!(a.editNameFlag||k("#"+a.tId+d.id.EDIT).length>0)&&h.apply(b.edit.showRenameBtn,[b.treeId,a],b.edit.showRenameBtn)){var c=k("#"+a.tId+d.id.A),q="<span class='button edit' id='"+
                                                  +a.tId+d.id.EDIT+"' title='"+h.apply(b.edit.renameTitle,[b.treeId,a],b.edit.renameTitle)+"' treeNode"+d.id.EDIT+" style='display:none;'></span>";c.append(q);k("#"+a.tId+d.id.EDIT).bind("click",function(){if(!h.uCanDo(b)||h.apply(b.callback.beforeEditName,[b.treeId,a],!0)==!1)return!1;f.editNode(b,a);return!1}).show()}},addRemoveBtn:function(b,a){if(!(a.editNameFlag||k("#"+a.tId+d.id.REMOVE).length>0)&&h.apply(b.edit.showRemoveBtn,[b.treeId,a],b.edit.showRemoveBtn)){var c=k("#"+a.tId+d.id.A),q="<span class='button remove' id='"+
                                                  +a.tId+d.id.REMOVE+"' title='"+h.apply(b.edit.removeTitle,[b.treeId,a],b.edit.removeTitle)+"' treeNode"+d.id.REMOVE+" style='display:none;'></span>";c.append(q);k("#"+a.tId+d.id.REMOVE).bind("click",function(){if(!h.uCanDo(b)||h.apply(b.callback.beforeRemove,[b.treeId,a],!0)==!1)return!1;f.removeNode(b,a);b.treeObj.trigger(d.event.REMOVE,[b.treeId,a]);return!1}).bind("mousedown",function(){return!0}).show()}},addHoverDom:function(b,a){if(p.getRoot(b).showHoverDom)a.isHover=!0,b.edit.enable&&(f.addEditBtn(b,
                                                  +a),f.addRemoveBtn(b,a)),h.apply(b.view.addHoverDom,[b.treeId,a])},cancelCurEditNode:function(b,a){var c=p.getRoot(b),q=b.data.key.name,e=c.curEditNode;if(e){var l=c.curEditInput,j=a?a:l.val();if(!a&&h.apply(b.callback.beforeRename,[b.treeId,e,j],!0)===!1)return e.editNameFlag=!0,!1;else e[q]=j?j:l.val(),a||b.treeObj.trigger(d.event.RENAME,[b.treeId,e]);k("#"+e.tId+d.id.A).removeClass(d.node.CURSELECTED_EDIT);l.unbind();f.setNodeName(b,e);e.editNameFlag=!1;c.curEditNode=null;c.curEditInput=null;f.selectNode(b,
                                                  +e,!1)}return c.noSelection=!0},editNode:function(b,a){var c=p.getRoot(b);f.editNodeBlur=!1;if(p.isSelectedNode(b,a)&&c.curEditNode==a&&a.editNameFlag)setTimeout(function(){h.inputFocus(c.curEditInput)},0);else{var q=b.data.key.name;a.editNameFlag=!0;f.removeTreeDom(b,a);f.cancelCurEditNode(b);f.selectNode(b,a,!1);k("#"+a.tId+d.id.SPAN).html("<input type=text class='rename' id='"+a.tId+d.id.INPUT+"' treeNode"+d.id.INPUT+" >");var e=k("#"+a.tId+d.id.INPUT);e.attr("value",a[q]);b.edit.editNameSelectAll?
                                                  +h.inputSelect(e):h.inputFocus(e);e.bind("blur",function(){f.editNodeBlur||f.cancelCurEditNode(b)}).bind("keydown",function(c){c.keyCode=="13"?(f.editNodeBlur=!0,f.cancelCurEditNode(b,null,!0)):c.keyCode=="27"&&f.cancelCurEditNode(b,a[q])}).bind("click",function(){return!1}).bind("dblclick",function(){return!1});k("#"+a.tId+d.id.A).addClass(d.node.CURSELECTED_EDIT);c.curEditInput=e;c.noSelection=!1;c.curEditNode=a}},moveNode:function(b,a,c,q,e,l){var j=p.getRoot(b),g=b.data.key.children;if(a!=c&&(!b.data.keep.leaf||
                                                  +!a||a.isParent||q!=d.move.TYPE_INNER)){var h=c.parentTId?c.getParentNode():j,o=a===null||a==j;o&&a===null&&(a=j);if(o)q=d.move.TYPE_INNER;j=a.parentTId?a.getParentNode():j;if(q!=d.move.TYPE_PREV&&q!=d.move.TYPE_NEXT)q=d.move.TYPE_INNER;if(q==d.move.TYPE_INNER)if(o)c.parentTId=null;else{if(!a.isParent)a.isParent=!0,a.open=!!a.open,f.setNodeLineIcos(b,a);c.parentTId=a.tId}var n;o?n=o=b.treeObj:(!l&&q==d.move.TYPE_INNER?f.expandCollapseNode(b,a,!0,!1):l||f.expandCollapseNode(b,a.getParentNode(),!0,!1),
                                                  +o=k("#"+a.tId),n=k("#"+a.tId+d.id.UL),o.get(0)&&!n.get(0)&&(n=[],f.makeUlHtml(b,a,n,""),o.append(n.join(""))),n=k("#"+a.tId+d.id.UL));var m=k("#"+c.tId);m.get(0)?o.get(0)||m.remove():m=f.appendNodes(b,c.level,[c],null,!1,!0).join("");n.get(0)&&q==d.move.TYPE_INNER?n.append(m):o.get(0)&&q==d.move.TYPE_PREV?o.before(m):o.get(0)&&q==d.move.TYPE_NEXT&&o.after(m);var x=-1,y=0,t=null,o=null,r=c.level;if(c.isFirstNode){if(x=0,h[g].length>1)t=h[g][1],t.isFirstNode=!0}else if(c.isLastNode)x=h[g].length-1,
                                                  +t=h[g][x-1],t.isLastNode=!0;else for(n=0,m=h[g].length;n<m;n++)if(h[g][n].tId==c.tId){x=n;break}x>=0&&h[g].splice(x,1);if(q!=d.move.TYPE_INNER)for(n=0,m=j[g].length;n<m;n++)j[g][n].tId==a.tId&&(y=n);if(q==d.move.TYPE_INNER){a[g]||(a[g]=[]);if(a[g].length>0)o=a[g][a[g].length-1],o.isLastNode=!1;a[g].splice(a[g].length,0,c);c.isLastNode=!0;c.isFirstNode=a[g].length==1}else a.isFirstNode&&q==d.move.TYPE_PREV?(j[g].splice(y,0,c),o=a,o.isFirstNode=!1,c.parentTId=a.parentTId,c.isFirstNode=!0,c.isLastNode=
                                                  +!1):a.isLastNode&&q==d.move.TYPE_NEXT?(j[g].splice(y+1,0,c),o=a,o.isLastNode=!1,c.parentTId=a.parentTId,c.isFirstNode=!1,c.isLastNode=!0):(q==d.move.TYPE_PREV?j[g].splice(y,0,c):j[g].splice(y+1,0,c),c.parentTId=a.parentTId,c.isFirstNode=!1,c.isLastNode=!1);p.fixPIdKeyValue(b,c);p.setSonNodeLevel(b,c.getParentNode(),c);f.setNodeLineIcos(b,c);f.repairNodeLevelClass(b,c,r);!b.data.keep.parent&&h[g].length<1?(h.isParent=!1,h.open=!1,a=k("#"+h.tId+d.id.UL),q=k("#"+h.tId+d.id.SWITCH),g=k("#"+h.tId+d.id.ICON),
                                                  +f.replaceSwitchClass(h,q,d.folder.DOCU),f.replaceIcoClass(h,g,d.folder.DOCU),a.css("display","none")):t&&f.setNodeLineIcos(b,t);o&&f.setNodeLineIcos(b,o);b.check&&b.check.enable&&f.repairChkClass&&(f.repairChkClass(b,h),f.repairParentChkClassWithSelf(b,h),h!=c.parent&&f.repairParentChkClassWithSelf(b,c));l||f.expandCollapseParentNode(b,c.getParentNode(),!0,e)}},removeEditBtn:function(b){k("#"+b.tId+d.id.EDIT).unbind().remove()},removeRemoveBtn:function(b){k("#"+b.tId+d.id.REMOVE).unbind().remove()},
                                                  +removeTreeDom:function(b,a){a.isHover=!1;f.removeEditBtn(a);f.removeRemoveBtn(a);h.apply(b.view.removeHoverDom,[b.treeId,a])},repairNodeLevelClass:function(b,a,c){if(c!==a.level){var b=k("#"+a.tId),f=k("#"+a.tId+d.id.A),e=k("#"+a.tId+d.id.UL),c="level"+c,a="level"+a.level;b.removeClass(c);b.addClass(a);f.removeClass(c);f.addClass(a);e.removeClass(c);e.addClass(a)}}},event:{},data:{setSonNodeLevel:function(b,a,c){if(c){var d=b.data.key.children;c.level=a?a.level+1:0;if(c[d])for(var a=0,e=c[d].length;a<
                                                  +e;a++)c[d][a]&&p.setSonNodeLevel(b,c,c[d][a])}}}});var E=k.fn.zTree,h=E._z.tools,d=E.consts,f=E._z.view,p=E._z.data;p.exSetting({edit:{enable:!1,editNameSelectAll:!1,showRemoveBtn:!0,showRenameBtn:!0,removeTitle:"remove",renameTitle:"rename",drag:{autoExpandTrigger:!1,isCopy:!0,isMove:!0,prev:!0,next:!0,inner:!0,minMoveSize:5,borderMax:10,borderMin:-5,maxShowNodeNum:5,autoOpenTime:500}},view:{addHoverDom:null,removeHoverDom:null},callback:{beforeDrag:null,beforeDragOpen:null,beforeDrop:null,beforeEditName:null,
                                                  +beforeRename:null,onDrag:null,onDrop:null,onRename:null}});p.addInitBind(function(b){var a=b.treeObj,c=d.event;a.bind(c.RENAME,function(a,c,d){h.apply(b.callback.onRename,[a,c,d])});a.bind(c.REMOVE,function(a,c,d){h.apply(b.callback.onRemove,[a,c,d])});a.bind(c.DRAG,function(a,c,d,f){h.apply(b.callback.onDrag,[c,d,f])});a.bind(c.DROP,function(a,c,d,f,g,k,o){h.apply(b.callback.onDrop,[c,d,f,g,k,o])})});p.addInitUnBind(function(b){var b=b.treeObj,a=d.event;b.unbind(a.RENAME);b.unbind(a.REMOVE);b.unbind(a.DRAG);
                                                  +b.unbind(a.DROP)});p.addInitCache(function(){});p.addInitNode(function(b,a,c){if(c)c.isHover=!1,c.editNameFlag=!1});p.addInitProxy(function(b){var a=b.target,c=p.getSetting(b.data.treeId),f=b.relatedTarget,e="",l=null,j="",g=null,k=null;if(h.eqs(b.type,"mouseover")){if(k=h.getMDom(c,a,[{tagName:"a",attrName:"treeNode"+d.id.A}]))e=k.parentNode.id,j="hoverOverNode"}else if(h.eqs(b.type,"mouseout"))k=h.getMDom(c,f,[{tagName:"a",attrName:"treeNode"+d.id.A}]),k||(e="remove",j="hoverOutNode");else if(h.eqs(b.type,
                                                  +"mousedown")&&(k=h.getMDom(c,a,[{tagName:"a",attrName:"treeNode"+d.id.A}])))e=k.parentNode.id,j="mousedownNode";if(e.length>0)switch(l=p.getNodeCache(c,e),j){case "mousedownNode":g=D.onMousedownNode;break;case "hoverOverNode":g=D.onHoverOverNode;break;case "hoverOutNode":g=D.onHoverOutNode}return{stop:!1,node:l,nodeEventType:j,nodeEventCallback:g,treeEventType:"",treeEventCallback:null}});p.addInitRoot(function(b){b=p.getRoot(b);b.curEditNode=null;b.curEditInput=null;b.curHoverNode=null;b.dragFlag=
                                                  +0;b.dragNodeShowBefore=[];b.dragMaskList=[];b.showHoverDom=!0});p.addZTreeTools(function(b,a){a.cancelEditName=function(a){var d=p.getRoot(b),e=b.data.key.name,h=d.curEditNode;d.curEditNode&&f.cancelCurEditNode(b,a?a:h[e])};a.copyNode=function(a,k,e,l){if(!k)return null;if(a&&!a.isParent&&b.data.keep.leaf&&e===d.move.TYPE_INNER)return null;var j=h.clone(k);if(!a)a=null,e=d.move.TYPE_INNER;e==d.move.TYPE_INNER?(k=function(){f.addNodes(b,a,[j],l)},h.canAsync(b,a)?f.asyncNode(b,a,l,k):k()):(f.addNodes(b,
                                                  +a.parentNode,[j],l),f.moveNode(b,a,j,e,!1,l));return j};a.editName=function(a){a&&a.tId&&a===p.getNodeCache(b,a.tId)&&(a.parentTId&&f.expandCollapseParentNode(b,a.getParentNode(),!0),f.editNode(b,a))};a.moveNode=function(a,q,e,l){function j(){f.moveNode(b,a,q,e,!1,l)}if(!q)return q;if(a&&!a.isParent&&b.data.keep.leaf&&e===d.move.TYPE_INNER)return null;else if(a&&(q.parentTId==a.tId&&e==d.move.TYPE_INNER||k("#"+q.tId).find("#"+a.tId).length>0))return null;else a||(a=null);h.canAsync(b,a)?f.asyncNode(b,
                                                  +a,l,j):j();return q};a.setEditable=function(a){b.edit.enable=a;return this.refresh()}});var K=f.cancelPreSelectedNode;f.cancelPreSelectedNode=function(b,a){for(var c=p.getRoot(b).curSelectedList,d=0,e=c.length;d<e;d++)if(!a||a===c[d])if(f.removeTreeDom(b,c[d]),a)break;K&&K.apply(f,arguments)};var L=f.createNodes;f.createNodes=function(b,a,c,d){L&&L.apply(f,arguments);c&&f.repairParentChkClassWithSelf&&f.repairParentChkClassWithSelf(b,d)};f.makeNodeUrl=function(b,a){return a.url&&!b.edit.enable?a.url:
                                                  +null};var J=f.removeNode;f.removeNode=function(b,a){var c=p.getRoot(b);if(c.curEditNode===a)c.curEditNode=null;J&&J.apply(f,arguments)};var M=f.selectNode;f.selectNode=function(b,a,c){var d=p.getRoot(b);if(p.isSelectedNode(b,a)&&d.curEditNode==a&&a.editNameFlag)return!1;M&&M.apply(f,arguments);f.addHoverDom(b,a);return!0};var N=h.uCanDo;h.uCanDo=function(b,a){var c=p.getRoot(b);return a&&(h.eqs(a.type,"mouseover")||h.eqs(a.type,"mouseout")||h.eqs(a.type,"mousedown")||h.eqs(a.type,"mouseup"))?!0:!c.curEditNode&&
                                                  +(N?N.apply(f,arguments):!0)}})(jQuery);
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/jquery.ztree.exhide-3.4.min.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/jquery.ztree.exhide-3.4.min.js
                                                  new file mode 100644
                                                  index 00000000..264aa5b6
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/jquery.ztree.exhide-3.4.min.js
                                                  @@ -0,0 +1,22 @@
                                                  +/*
                                                  + * JQuery zTree exHideNodes 3.4
                                                  + * http://zTree.me/
                                                  + *
                                                  + * Copyright (c) 2010 Hunter.z
                                                  + *
                                                  + * Licensed same as jquery - MIT License
                                                  + * http://www.opensource.org/licenses/mit-license.php
                                                  + *
                                                  + * email: hunter.z@263.net
                                                  + * Date: 2012-09-03
                                                  + */
                                                  +(function(i){i.extend(!0,i.fn.zTree._z,{view:{clearOldFirstNode:function(c,b){for(var a=b.getNextNode();a;){if(a.isFirstNode){a.isFirstNode=!1;f.setNodeLineIcos(c,a);break}if(a.isLastNode)break;a=a.getNextNode()}},clearOldLastNode:function(c,b){for(var a=b.getPreNode();a;){if(a.isLastNode){a.isLastNode=!1;f.setNodeLineIcos(c,a);break}if(a.isFirstNode)break;a=a.getPreNode()}},makeDOMNodeMainBefore:function(c,b,a){c.push("<li ",a.isHidden?"style='display:none;' ":"","id='",a.tId,"' class='level",a.level,
                                                  +"' tabindex='0' hidefocus='true' treenode>")},showNode:function(c,b){b.isHidden=!1;e.initShowForExCheck(c,b);i("#"+b.tId).show()},showNodes:function(c,b,a){if(b&&b.length!=0){var d={},h,j;for(h=0,j=b.length;h<j;h++){var g=b[h];if(!d[g.parentTId]){var i=g.getParentNode();d[g.parentTId]=i===null?e.getRoot(c):g.getParentNode()}f.showNode(c,g,a)}for(var k in d)b=d[k][c.data.key.children],f.setFirstNodeForShow(c,b),f.setLastNodeForShow(c,b)}},hideNode:function(c,b){b.isHidden=!0;b.isFirstNode=!1;b.isLastNode=
                                                  +!1;e.initHideForExCheck(c,b);f.cancelPreSelectedNode(c,b);i("#"+b.tId).hide()},hideNodes:function(c,b,a){if(b&&b.length!=0){var d={},h,j;for(h=0,j=b.length;h<j;h++){var g=b[h];if((g.isFirstNode||g.isLastNode)&&!d[g.parentTId]){var i=g.getParentNode();d[g.parentTId]=i===null?e.getRoot(c):g.getParentNode()}f.hideNode(c,g,a)}for(var k in d)b=d[k][c.data.key.children],f.setFirstNodeForHide(c,b),f.setLastNodeForHide(c,b)}},setFirstNode:function(c,b){var a=c.data.key.children,d=b[a].length;d>0&&!b[a][0].isHidden?
                                                  +b[a][0].isFirstNode=!0:d>0&&f.setFirstNodeForHide(c,b[a])},setLastNode:function(c,b){var a=c.data.key.children,d=b[a].length;d>0&&!b[a][0].isHidden?b[a][d-1].isLastNode=!0:d>0&&f.setLastNodeForHide(c,b[a])},setFirstNodeForHide:function(c,b){var a,d,h;for(d=0,h=b.length;d<h;d++){a=b[d];if(a.isFirstNode)break;if(!a.isHidden&&!a.isFirstNode){a.isFirstNode=!0;f.setNodeLineIcos(c,a);break}else a=null}return a},setFirstNodeForShow:function(c,b){var a,d,h,e,g;for(d=0,h=b.length;d<h;d++)if(a=b[d],!e&&!a.isHidden&&
                                                  +a.isFirstNode){e=a;break}else if(!e&&!a.isHidden&&!a.isFirstNode)a.isFirstNode=!0,e=a,f.setNodeLineIcos(c,a);else if(e&&a.isFirstNode){a.isFirstNode=!1;g=a;f.setNodeLineIcos(c,a);break}return{"new":e,old:g}},setLastNodeForHide:function(c,b){var a,d;for(d=b.length-1;d>=0;d--){a=b[d];if(a.isLastNode)break;if(!a.isHidden&&!a.isLastNode){a.isLastNode=!0;f.setNodeLineIcos(c,a);break}else a=null}return a},setLastNodeForShow:function(c,b){var a,d,e,j;for(d=b.length-1;d>=0;d--)if(a=b[d],!e&&!a.isHidden&&
                                                  +a.isLastNode){e=a;break}else if(!e&&!a.isHidden&&!a.isLastNode)a.isLastNode=!0,e=a,f.setNodeLineIcos(c,a);else if(e&&a.isLastNode){a.isLastNode=!1;j=a;f.setNodeLineIcos(c,a);break}return{"new":e,old:j}}},data:{initHideForExCheck:function(c,b){if(b.isHidden&&c.check&&c.check.enable)b._nocheck=!!b.nocheck,b.nocheck=!0,b.check_Child_State=-1,f.repairParentChkClassWithSelf&&f.repairParentChkClassWithSelf(c,b)},initShowForExCheck:function(c,b){if(!b.isHidden&&c.check&&c.check.enable){b.nocheck=b._nocheck;
                                                  +delete b._nocheck;if(f.setChkClass){var a=i("#"+b.tId+r.id.CHECK);f.setChkClass(c,a,b)}f.repairParentChkClassWithSelf&&f.repairParentChkClassWithSelf(c,b)}}}});var k=i.fn.zTree,s=k._z.tools,r=k.consts,f=k._z.view,e=k._z.data;e.addInitNode(function(c,b,a){if(typeof a.isHidden=="string")a.isHidden=s.eqs(a.isHidden,"true");a.isHidden=!!a.isHidden;e.initHideForExCheck(c,a)});e.addBeforeA(function(){});e.addZTreeTools(function(c,b){b.showNodes=function(a,b){f.showNodes(c,a,b)};b.showNode=function(a,b){a&&
                                                  +f.showNodes(c,[a],b)};b.hideNodes=function(a,b){f.hideNodes(c,a,b)};b.hideNode=function(a,b){a&&f.hideNodes(c,[a],b)};var a=b.checkNode;if(a)b.checkNode=function(c,e,f,g){(!c||!c.isHidden)&&a.apply(b,arguments)}});var l=e.initNode;e.tmpHideParent=-1;e.initNode=function(c,b,a,d,h,j,g){if(e.tmpHideParent!==d){e.tmpHideParent=d;var i=(d?d:e.getRoot(c))[c.data.key.children];e.tmpHideFirstNode=f.setFirstNodeForHide(c,i);e.tmpHideLastNode=f.setLastNodeForHide(c,i);f.setNodeLineIcos(c,e.tmpHideFirstNode);
                                                  +f.setNodeLineIcos(c,e.tmpHideLastNode)}h=e.tmpHideFirstNode===a;j=e.tmpHideLastNode===a;l&&l.apply(e,arguments);j&&f.clearOldLastNode(c,a)};var m=e.makeChkFlag;if(m)e.makeChkFlag=function(c,b){(!b||!b.isHidden)&&m.apply(e,arguments)};var n=e.getTreeCheckedNodes;if(n)e.getTreeCheckedNodes=function(c,b,a,d){if(b&&b.length>0){var f=b[0].getParentNode();if(f&&f.isHidden)return[]}return n.apply(e,arguments)};var o=e.getTreeChangeCheckedNodes;if(o)e.getTreeChangeCheckedNodes=function(c,b,a){if(b&&b.length>
                                                  +0){var d=b[0].getParentNode();if(d&&d.isHidden)return[]}return o.apply(e,arguments)};var p=f.setSonNodeCheckBox;if(p)f.setSonNodeCheckBox=function(c,b,a,d){(!b||!b.isHidden)&&p.apply(f,arguments)};var q=f.repairParentChkClassWithSelf;if(q)f.repairParentChkClassWithSelf=function(c,b){(!b||!b.isHidden)&&q.apply(f,arguments)}})(jQuery);
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/zTreeStyle.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/zTreeStyle.css
                                                  new file mode 100644
                                                  index 00000000..f06554e3
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/ztree/zTreeStyle.css
                                                  @@ -0,0 +1,97 @@
                                                  +/*-------------------------------------
                                                  +zTree Style
                                                  +
                                                  +version:	3.4
                                                  +author:		Hunter.z
                                                  +email:		hunter.z@263.net
                                                  +website:	http://code.google.com/p/jquerytree/
                                                  +
                                                  +-------------------------------------*/
                                                  +
                                                  +.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}
                                                  +.ztree {margin:0; padding:5px; color:#333}
                                                  +.ztree li{padding:0; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap; outline:0}
                                                  +.ztree li ul{ margin:0; padding:0 0 0 18px}
                                                  +.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;}
                                                  +
                                                  +.ztree li a {padding:1px 3px 0 0; margin:0; cursor:pointer; height:17px; color:#333; background-color: transparent;
                                                  +	text-decoration:none; vertical-align:top; display: inline-block}
                                                  +.ztree li a:hover {text-decoration:underline}
                                                  +.ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}
                                                  +.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}
                                                  +.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#316AC5; color:white; height:16px; border:1px #316AC5 solid;
                                                  +	opacity:0.8; filter:alpha(opacity=80)}
                                                  +.ztree li a.tmpTargetNode_prev {}
                                                  +.ztree li a.tmpTargetNode_next {}
                                                  +.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;
                                                  +	font-size:12px; border:1px #7EC4CC solid; *border:0px}
                                                  +.ztree li span {line-height:16px; margin-right:2px}
                                                  +.ztree li span.button {line-height:0; margin:0; width:16px; height:16px; display: inline-block; vertical-align:middle;
                                                  +	border:0 none; cursor: pointer;outline:none;
                                                  +	background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
                                                  +	background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")}
                                                  +
                                                  +.ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto}
                                                  +.ztree li span.button.chk.checkbox_false_full {background-position:0 0}
                                                  +.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px}
                                                  +.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px}
                                                  +.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px}
                                                  +.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px}
                                                  +.ztree li span.button.chk.checkbox_true_full {background-position:-14px 0}
                                                  +.ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px}
                                                  +.ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px}
                                                  +.ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px}
                                                  +.ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px}
                                                  +.ztree li span.button.chk.radio_false_full {background-position:-28px 0}
                                                  +.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px}
                                                  +.ztree li span.button.chk.radio_false_part {background-position:-28px -28px}
                                                  +.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px}
                                                  +.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px}
                                                  +.ztree li span.button.chk.radio_true_full {background-position:-42px 0}
                                                  +.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px}
                                                  +.ztree li span.button.chk.radio_true_part {background-position:-42px -28px}
                                                  +.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px}
                                                  +.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px}
                                                  +
                                                  +.ztree li span.button.switch {width:18px; height:18px}
                                                  +.ztree li span.button.root_open{background-position:-92px -54px}
                                                  +.ztree li span.button.root_close{background-position:-74px -54px}
                                                  +.ztree li span.button.roots_open{background-position:-92px 0}
                                                  +.ztree li span.button.roots_close{background-position:-74px 0}
                                                  +.ztree li span.button.center_open{background-position:-92px -18px}
                                                  +.ztree li span.button.center_close{background-position:-74px -18px}
                                                  +.ztree li span.button.bottom_open{background-position:-92px -36px}
                                                  +.ztree li span.button.bottom_close{background-position:-74px -36px}
                                                  +.ztree li span.button.noline_open{background-position:-92px -72px}
                                                  +.ztree li span.button.noline_close{background-position:-74px -72px}
                                                  +.ztree li span.button.root_docu{ background:none;}
                                                  +.ztree li span.button.roots_docu{background-position:-56px 0}
                                                  +.ztree li span.button.center_docu{background-position:-56px -18px}
                                                  +.ztree li span.button.bottom_docu{background-position:-56px -36px}
                                                  +.ztree li span.button.noline_docu{ background:none;}
                                                  +
                                                  +.ztree li span.button.ico_open{margin-right:2px; background-position:-110px -16px; vertical-align:top; *vertical-align:middle}
                                                  +.ztree li span.button.ico_close{margin-right:2px; background-position:-110px 0; vertical-align:top; *vertical-align:middle}
                                                  +.ztree li span.button.ico_docu{margin-right:2px; background-position:-110px -32px; vertical-align:top; *vertical-align:middle}
                                                  +.ztree li span.button.edit {margin-right:2px; background-position:-110px -48px; vertical-align:top; *vertical-align:middle}
                                                  +.ztree li span.button.remove {margin-right:2px; background-position:-110px -64px; vertical-align:top; *vertical-align:middle}
                                                  +
                                                  +.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
                                                  +
                                                  +ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}
                                                  +
                                                  +span.tmpzTreeMove_arrow {width:16px; height:16px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;
                                                  +	background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
                                                  +	background-position:-110px -80px; background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")}
                                                  +
                                                  +ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)}
                                                  +.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}
                                                  +
                                                  +/* level style*/
                                                  +/*.ztree li span.button.level0 {
                                                  +	display:none;
                                                  +}
                                                  +.ztree li ul.level0 {
                                                  +	padding:0;
                                                  +	background:none;
                                                  +}*/
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/collaboration.debug.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/collaboration.debug.js
                                                  new file mode 100644
                                                  index 00000000..645c0efc
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/collaboration.debug.js
                                                  @@ -0,0 +1,427 @@
                                                  +/**
                                                  + * 新版图形设计器聊天窗口-(协作)-JS
                                                  + */
                                                  +$(function () {
                                                  +	if (chartId == "" || userId == "" || sid == "") {
                                                  +		return;
                                                  +	}
                                                  +	CLB.sid = encodeURI(sid);
                                                  +	if (editable == 1) {
                                                  +		CLB.init();
                                                  +	}
                                                  +});
                                                  +/**
                                                  + * 协作对象
                                                  + *
                                                  + * @type {}
                                                  + */
                                                  +var CLB = {
                                                  +	/**
                                                  +	 * WebSocket对象
                                                  +	 *
                                                  +	 * @type {}
                                                  +	 */
                                                  +	socket: null,
                                                  +	/**
                                                  +	 * 客户端ID
                                                  +	 *
                                                  +	 * @type {}
                                                  +	 */
                                                  +	clientId: null,
                                                  +	/**
                                                  +	 * Socket连接的地址
                                                  +	 *
                                                  +	 * @type {String}
                                                  +	 */
                                                  +	url: "./w?",
                                                  +	/**
                                                  +	 * sid
                                                  +	 *
                                                  +	 * @type {String}
                                                  +	 */
                                                  +	sid: null,
                                                  +	/**
                                                  +	 * 存放cmd的数组
                                                  +	 *
                                                  +	 * @type {}
                                                  +	 */
                                                  +	cmdList: [{
                                                  +		"type": "message",
                                                  +		"cmd": "com.actionsoft.apps.coe.pal_pl_repository_designer_message"
                                                  +	}],
                                                  +	/**
                                                  +	 * 监听的时间
                                                  +	 *
                                                  +	 * @type {String}
                                                  +	 */
                                                  +	listenTime: "",
                                                  +	/**
                                                  +	 * 初始化
                                                  +	 */
                                                  +	init: function () {
                                                  +		// 随机一个clientId
                                                  +		var random = Math.random();
                                                  +		var newId = (random + new Date().getTime());
                                                  +		this.clientId = newId.toString(16).replace(".", "");
                                                  +		this.listenTime = time;
                                                  +		// this.url = "ws://" + window.location.host +
                                                  +		// "/collaboration/msg?subject=" + chartId + "&clientId=" +
                                                  +		// this.clientId + "&userId=" + userId;
                                                  +		//2秒钟之后再开始监听,防止误点
                                                  +		setTimeout(function () {
                                                  +			CLB.listen();
                                                  +		}, 1000 * 2);
                                                  +		// //发送心跳消息
                                                  +		// setInterval(function(){
                                                  +		// CLB.send({"action": "heardbeat"});
                                                  +		// }, 30 * 1000);
                                                  +	},
                                                  +	connection: null,
                                                  +	/**
                                                  +	 * 连接
                                                  +	 */
                                                  +	listen: function (onError) {
                                                  +		if (isCollaboration == false || role == "viewer") {
                                                  +			return;
                                                  +		}
                                                  +		if (CLB.connection != null) {
                                                  +			return;
                                                  +		}
                                                  +		CLB.connection = $.ajax({
                                                  +			url: "./jd?sid="
                                                  +			+ CLB.sid
                                                  +			+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_realtime_listen",
                                                  +			data: {
                                                  +				clientId: CLB.clientId,
                                                  +				userId: userId,
                                                  +				name: userName,
                                                  +				subject: chartId,
                                                  +				listenTime: CLB.listenTime
                                                  +			},
                                                  +			type: "get",
                                                  +			success: function (data) {
                                                  +				CLB.connection = null;
                                                  +				CLB.onMessage(data.data.events);
                                                  +				if (typeof data.onlineUsers != "undefined") {
                                                  +					CLB.manageOnlineUsers(data.onlineUsers)
                                                  +				}
                                                  +			},
                                                  +			error: function (e) {
                                                  +				if (CLB) {
                                                  +					CLB.connection = null;
                                                  +				}
                                                  +				if (!(e.status == 0 && e.statusText == "abort")) {
                                                  +					// 发生错误,断开了,重连一次,如果连不上,提示错误
                                                  +					if (onError) {
                                                  +						onError();
                                                  +					} else {
                                                  +						if (CLB) {
                                                  +							CLB.listen(function () {
                                                  +								CLB.showDisconnected();
                                                  +							});
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 停止监听
                                                  +	 */
                                                  +	stopListen: function () {
                                                  +		if (CLB.connection) {
                                                  +			CLB.connection.abort();
                                                  +		}
                                                  +		CLB.connection = null;
                                                  +	},
                                                  +	/**
                                                  +	 * 发送消息
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            msg
                                                  +	 */
                                                  +	send: function (msg, callback) {
                                                  +		var params = {
                                                  +			sid: CLB.sid,
                                                  +			cmd: "com.actionsoft.apps.coe.pal_pl_repository_process_lock_state_check",
                                                  +			uuid: chartId
                                                  +		};
                                                  +		Util.ajax({
                                                  +			url: "./jd",
                                                  +			data: params,
                                                  +			success: function (data) {
                                                  +				if (data.result == 'ok') {
                                                  +					var canSave = data.data.canSave;
                                                  +					var lockUser = data.data.lockUser;
                                                  +					if (!canSave) {
                                                  +						$.simpleAlert("该流程已被" + lockUser + "锁定");
                                                  +						if (top.location != self.location) {
                                                  +							location.href = location.href;
                                                  +						} else {
                                                  +							window.location.reload();
                                                  +						}
                                                  +						return false;
                                                  +					} else {
                                                  +						var params = {
                                                  +							userId: userId,
                                                  +							clientId: CLB.clientId,
                                                  +							uuid: chartId,
                                                  +							type: type,
                                                  +							ver: ver,
                                                  +							teamId: $("#teamId").val(),
                                                  +							lockUser: lockUser
                                                  +						};
                                                  +						var data = $.extend(params, msg);
                                                  +						$.ajax({
                                                  +							type: "POST",
                                                  +							url: "./jd?sid=" + CLB.sid + "&cmd=" + CLB.cmdList[0].cmd,
                                                  +							data: data,
                                                  +							success: function (msg) {
                                                  +								if (typeof(msg) == "object") {
                                                  +									msg = msg.msg;
                                                  +								}
                                                  +								if (msg.indexOf("<div") == -1) {
                                                  +									$("#imgPath").val(msg);
                                                  +								}
                                                  +								if (callback) {
                                                  +									callback();
                                                  +								}
                                                  +							}
                                                  +						});
                                                  +					}
                                                  +				} else {
                                                  +					$.simpleAlert(data.msg, 'error', 1500, {callback:function() {
                                                  +							if (top.location != self.location) {
                                                  +								location.href = location.href;
                                                  +							} else {
                                                  +								window.location.reload();
                                                  +							}
                                                  +							return false;
                                                  +						}});
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 处理消息
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            msg
                                                  +	 */
                                                  +	onMessage: function (messages) {
                                                  +		if (messages == null || messages == undefined
                                                  +			|| messages == "undefined") {
                                                  +			return;
                                                  +		}
                                                  +		for (var i = 0; i < messages.length; i++) {
                                                  +			var msg = messages[i];
                                                  +			var action = msg.action;
                                                  +			if (action == "refresh") {
                                                  +				CLB.listenTime = msg.time;
                                                  +				if ($("div[index=" + ruuid + "]", parent.document) != undefined) {
                                                  +					var className = $("div[index=" + ruuid + "]", parent.document).attr("class");
                                                  +					if (className != undefined && className.indexOf("current") != -1) {
                                                  +						CLB.listen();
                                                  +					}
                                                  +				}
                                                  +			} else if (action == "join") {
                                                  +				// 加入的消息
                                                  +				if ($("#chat_user_" + msg.userId).length == 0) {
                                                  +					$("#collaborators").append("<img id='chat_user_"
                                                  +						+ msg.userId + "' src='" + msg.photoUrl
                                                  +						+ "' style='margin-left:10px;' awsui-qtip='"
                                                  +						+ msg.messages.name + "' userNum='1'/>");
                                                  +					$("#collaborators_message")
                                                  +						.append(msg.messages.name + "加入");
                                                  +					setTimeout(function () {
                                                  +						$("#collaborators_message").html("")
                                                  +					}, 1000 * 2);
                                                  +				} else {
                                                  +					var userNum = $("#chat_user_" + msg.userId).attr("userNum");
                                                  +					$("#chat_user_" + msg.userId).attr("userNum", userNum++);
                                                  +				}
                                                  +			} else if (action == "leave") {
                                                  +				var userNum = $("#chat_user_" + msg.userId).attr("userNum") - 1;
                                                  +				if (userNum > 0) {
                                                  +					$("#chat_user_" + msg.userId).attr("userNum", userNum);
                                                  +				} else {
                                                  +					$("#chat_user_" + msg.userId).remove();
                                                  +					//$("#collaborators_message").append(msg.messages.name + "离开");
                                                  +					setTimeout(function () {
                                                  +						$("#collaborators_message").html("")
                                                  +					}, 1000 * 2);
                                                  +				}
                                                  +			} else if (action == "changeTitle") {
                                                  +				if (msg.clientId != this.clientId) {
                                                  +					$(".diagram_title").text(msg.title);
                                                  +					top.window.$("#main_iframe").get(0).contentWindow.$("#iflowlist").get(0).contentWindow.refresh();
                                                  +					parent.awsTabs.setTitle(ruuid, msg.title);
                                                  +				}
                                                  +			} else if (action == "chat") {
                                                  +				if (msg.clientId != this.clientId) {
                                                  +					this.appendChatMsg(msg.name, msg.message, true);
                                                  +				}
                                                  +			} else if (action == "changeSchema") {
                                                  +				if (msg.clientId != this.clientId) {
                                                  +					if (msg.categories == "") {
                                                  +						Designer.setSchema([]);
                                                  +					} else {
                                                  +						Designer.setSchema(msg.categories.split(","));
                                                  +					}
                                                  +				}
                                                  +			} else if (action == "command") {
                                                  +				if (msg.clientId != this.clientId) {
                                                  +					var cmdMsg = msg.messages;
                                                  +					MessageSource.receive(cmdMsg);
                                                  +				}
                                                  +				if (Dock.historyVersions != null) {
                                                  +					// 更新右侧Dock的版本历史
                                                  +					if (msg.newVersion) {
                                                  +						// 如果有新的版本生成
                                                  +						Dock.loadHistorys(true);
                                                  +					} else {
                                                  +						// 修改版本时间,并添加消息
                                                  +						var firstVersion = $("#history_versions")
                                                  +							.children("li:eq(0)");
                                                  +						firstVersion.attr("def", msg.definitionId);
                                                  +						firstVersion.children(".version_time").text(msg.time);
                                                  +						Dock.historyVersions.versions[0].messages
                                                  +							.push(msg.messages);
                                                  +					}
                                                  +				}
                                                  +			} else if (action == "versionRemark") {
                                                  +				if (Dock.historyVersions != null
                                                  +					&& msg.clientId != this.clientId) {
                                                  +					// 修改版本的备注
                                                  +					var versionDom = $("#history_versions").children("li[vid="
                                                  +						+ msg.versionId + "]");
                                                  +					versionDom.find(".remark_text").text(msg.remark);
                                                  +				}
                                                  +			} else if (action == "changeAttribute") {
                                                  +				if (msg.clientId != this.clientId) {
                                                  +					var content = msg.messages[0].content;
                                                  +					var msg_action = msg.messages[0].action;
                                                  +					var id = content.id;
                                                  +					var iframe = content.iframe;
                                                  +					if (msg_action == "updateAttribute") { // 修改属性值
                                                  +						var obj = $("#" + iframe).contents().find("#" + id);
                                                  +						obj.val(content.value);
                                                  +						if (obj.hasClass("awsui-select")) {
                                                  +							obj.customSelect(content.value);
                                                  +						}
                                                  +						if (content.callback != "undefined"
                                                  +							&& content.callback != "") {
                                                  +							eval("window.frames['" + iframe + "']."
                                                  +								+ content.callback);
                                                  +						}
                                                  +					} else if (msg_action == "addAttribute") { // 增加属性
                                                  +						$("#" + iframe).contents().find("#" + id)
                                                  +							.append(content.value);
                                                  +						$("#" + iframe).contents().find("#existIds").val(content.existIds);
                                                  +					} else if (msg_action == "removeAttribute") {
                                                  +						var tempArr = content.value;
                                                  +						for (var index in tempArr) { // 删除属性
                                                  +							if (tempArr[index] != 0 && tempArr[index] != "0"
                                                  +								&& tempArr[index] != "") {
                                                  +								$("#" + iframe).contents().find("#tr_"
                                                  +									+ tempArr[index] + "").remove();
                                                  +							}
                                                  +						}
                                                  +						$("#" + iframe).contents().find("#existIds").val(content.existIds);
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	/**
                                                  +	 * 提醒用户连接已断开
                                                  +	 */
                                                  +	showDisconnected: function () {
                                                  +		$("#disconnected").dlg({
                                                  +			closable: false
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 管理在线用户
                                                  +	 */
                                                  +	manageOnlineUsers: function (onlineUsers) {
                                                  +		$("#collaborators").children().removeClass("online");
                                                  +		for (var i = 0; i < onlineUsers.length; i++) {
                                                  +			var online = onlineUsers[i];
                                                  +			if ($("#chat_user_" + online.userId).length == 0) {
                                                  +				$("#collaborators").append("<img id='chat_user_"
                                                  +					+ online.userId + "' src='" + online.photoUrl
                                                  +					+ "' title='" + online.name + "' title_pos='top'/>");
                                                  +			}
                                                  +			$("#chat_user_" + online.userId).addClass("online");
                                                  +		}
                                                  +		$("#collaborators").children("img[class!=online]").remove();
                                                  +	},
                                                  +	/**
                                                  +	 * 打开聊天
                                                  +	 */
                                                  +	showChatWin: function () {
                                                  +		if ($("#open_chat_btn").button("isSelected")) {
                                                  +			CLB.closeChatWin();
                                                  +			return;
                                                  +		}
                                                  +		$("#open_chat_btn").button("select");
                                                  +		$("#chattingbox").css("left", $("#shape_panel").outerWidth()).show();
                                                  +		$("#chatting_edit").focus().unbind().bind("keydown", function (e) {
                                                  +			if (e.ctrlKey && e.keyCode == 13) {
                                                  +				CLB.sendChatMsg();
                                                  +			}
                                                  +		});
                                                  +		$("#chat_prompt").hide().text("0");
                                                  +	},
                                                  +	/**
                                                  +	 * 关闭聊天
                                                  +	 */
                                                  +	closeChatWin: function () {
                                                  +		$("#chattingbox").hide();
                                                  +		$("#open_chat_btn").button("unselect");
                                                  +	},
                                                  +	/**
                                                  +	 * 发送聊天消息
                                                  +	 */
                                                  +	sendChatMsg: function () {
                                                  +		var msg = $("#chatting_edit").val();
                                                  +		if (msg == "") {
                                                  +			$("#chatting_edit").focus();
                                                  +			return;
                                                  +		}
                                                  +		var msgObj = {
                                                  +			action: "chat",
                                                  +			message: msg,
                                                  +			name: userName
                                                  +		};
                                                  +		CLB.send(msgObj);
                                                  +		this.appendChatMsg(userName, msg, false);
                                                  +		$("#chatting_edit").val("").focus();
                                                  +	},
                                                  +	/**
                                                  +	 * 向聊天窗口添加聊天信息
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            name
                                                  +	 * @param {}
                                                  +	 *            msg
                                                  +	 * @param {}
                                                  +	 *            isOther 是否是别人发的
                                                  +	 */
                                                  +	appendChatMsg: function (name, msg, isOther) {
                                                  +		msg = msg.replace(/\n/g, "<br/>")
                                                  +		$("#chat_messages").append("<li><span>" + name + "</span>:&nbsp;" + msg
                                                  +			+ "</li>");
                                                  +		$("#chat_messages").scrollTop(9999999);
                                                  +		if (isOther && !$("#open_chat_btn").button("isSelected")) {
                                                  +			// 如果是别人发的消息,并且没有打开聊天窗口
                                                  +			var unread = parseInt($("#chat_prompt").text()) + 1;
                                                  +			$("#chat_prompt").show().text(unread).animate({
                                                  +				"top": "-15px"
                                                  +			}, 200).animate({
                                                  +				"top": "-9px"
                                                  +			}, 200);
                                                  +		}
                                                  +	}
                                                  +};
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/collaboration.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/collaboration.js
                                                  new file mode 100644
                                                  index 00000000..5355a0b5
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/collaboration.js
                                                  @@ -0,0 +1 @@
                                                  +$(function(){if(chartId==""||userId==""||sid==""){return}CLB.sid=encodeURI(sid);if(editable==1){CLB.init()}});var CLB={socket:null,clientId:null,url:"./w?",sid:null,cmdList:[{"type":"message","cmd":"com.actionsoft.apps.coe.pal_pl_repository_designer_message"}],listenTime:"",init:function(){var b=Math.random();var a=(b+new Date().getTime());this.clientId=a.toString(16).replace(".","");this.listenTime=time;setTimeout(function(){CLB.listen()},1000*2)},connection:null,listen:function(a){if(isCollaboration==false||role=="viewer"){return}if(CLB.connection!=null){return}CLB.connection=$.ajax({url:"./jd?sid="+CLB.sid+"&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_realtime_listen",data:{clientId:CLB.clientId,userId:userId,name:userName,subject:chartId,listenTime:CLB.listenTime},type:"get",success:function(b){CLB.connection=null;CLB.onMessage(b.data.events);if(typeof b.onlineUsers!="undefined"){CLB.manageOnlineUsers(b.onlineUsers)}},error:function(b){if(CLB){CLB.connection=null}if(!(b.status==0&&b.statusText=="abort")){if(a){a()}else{if(CLB){CLB.listen(function(){CLB.showDisconnected()})}}}}})},stopListen:function(){if(CLB.connection){CLB.connection.abort()}CLB.connection=null},send:function(b,c){var a={sid:CLB.sid,cmd:"com.actionsoft.apps.coe.pal_pl_repository_process_lock_state_check",uuid:chartId};Util.ajax({url:"./jd",data:a,success:function(f){if(f.result=="ok"){var d=f.data.canSave;var e=f.data.lockUser;if(!d){$.simpleAlert("该流程已被"+e+"锁定");if(top.location!=self.location){location.href=location.href}else{window.location.reload()}return false}else{var g={userId:userId,clientId:CLB.clientId,uuid:chartId,type:type,ver:ver,teamId:$("#teamId").val(),lockUser:e};var f=$.extend(g,b);$.ajax({type:"POST",url:"./jd?sid="+CLB.sid+"&cmd="+CLB.cmdList[0].cmd,data:f,success:function(h){if(typeof(h)=="object"){h=h.msg}if(h.indexOf("<div")==-1){$("#imgPath").val(h)}if(c){c()}}})}}else{$.simpleAlert(f.msg,"error",1500,{callback:function(){if(top.location!=self.location){location.href=location.href}else{window.location.reload()}return false}})}}})},onMessage:function(messages){if(messages==null||messages==undefined||messages=="undefined"){return}for(var i=0;i<messages.length;i++){var msg=messages[i];var action=msg.action;if(action=="refresh"){CLB.listenTime=msg.time;if($("div[index="+ruuid+"]",parent.document)!=undefined){var className=$("div[index="+ruuid+"]",parent.document).attr("class");if(className!=undefined&&className.indexOf("current")!=-1){CLB.listen()}}}else{if(action=="join"){if($("#chat_user_"+msg.userId).length==0){$("#collaborators").append("<img id='chat_user_"+msg.userId+"' src='"+msg.photoUrl+"' style='margin-left:10px;' awsui-qtip='"+msg.messages.name+"' userNum='1'/>");$("#collaborators_message").append(msg.messages.name+"加入");setTimeout(function(){$("#collaborators_message").html("")},1000*2)}else{var userNum=$("#chat_user_"+msg.userId).attr("userNum");$("#chat_user_"+msg.userId).attr("userNum",userNum++)}}else{if(action=="leave"){var userNum=$("#chat_user_"+msg.userId).attr("userNum")-1;if(userNum>0){$("#chat_user_"+msg.userId).attr("userNum",userNum)}else{$("#chat_user_"+msg.userId).remove();setTimeout(function(){$("#collaborators_message").html("")},1000*2)}}else{if(action=="changeTitle"){if(msg.clientId!=this.clientId){$(".diagram_title").text(msg.title);top.window.$("#main_iframe").get(0).contentWindow.$("#iflowlist").get(0).contentWindow.refresh();parent.awsTabs.setTitle(ruuid,msg.title)}}else{if(action=="chat"){if(msg.clientId!=this.clientId){this.appendChatMsg(msg.name,msg.message,true)}}else{if(action=="changeSchema"){if(msg.clientId!=this.clientId){if(msg.categories==""){Designer.setSchema([])}else{Designer.setSchema(msg.categories.split(","))}}}else{if(action=="command"){if(msg.clientId!=this.clientId){var cmdMsg=msg.messages;MessageSource.receive(cmdMsg)}if(Dock.historyVersions!=null){if(msg.newVersion){Dock.loadHistorys(true)}else{var firstVersion=$("#history_versions").children("li:eq(0)");firstVersion.attr("def",msg.definitionId);firstVersion.children(".version_time").text(msg.time);Dock.historyVersions.versions[0].messages.push(msg.messages)}}}else{if(action=="versionRemark"){if(Dock.historyVersions!=null&&msg.clientId!=this.clientId){var versionDom=$("#history_versions").children("li[vid="+msg.versionId+"]");versionDom.find(".remark_text").text(msg.remark)}}else{if(action=="changeAttribute"){if(msg.clientId!=this.clientId){var content=msg.messages[0].content;var msg_action=msg.messages[0].action;var id=content.id;var iframe=content.iframe;if(msg_action=="updateAttribute"){var obj=$("#"+iframe).contents().find("#"+id);obj.val(content.value);if(obj.hasClass("awsui-select")){obj.customSelect(content.value)}if(content.callback!="undefined"&&content.callback!=""){eval("window.frames['"+iframe+"']."+content.callback)}}else{if(msg_action=="addAttribute"){$("#"+iframe).contents().find("#"+id).append(content.value);$("#"+iframe).contents().find("#existIds").val(content.existIds)}else{if(msg_action=="removeAttribute"){var tempArr=content.value;for(var index in tempArr){if(tempArr[index]!=0&&tempArr[index]!="0"&&tempArr[index]!=""){$("#"+iframe).contents().find("#tr_"+tempArr[index]+"").remove()}}$("#"+iframe).contents().find("#existIds").val(content.existIds)}}}}}}}}}}}}}}},showDisconnected:function(){$("#disconnected").dlg({closable:false})},manageOnlineUsers:function(b){$("#collaborators").children().removeClass("online");for(var c=0;c<b.length;c++){var a=b[c];if($("#chat_user_"+a.userId).length==0){$("#collaborators").append("<img id='chat_user_"+a.userId+"' src='"+a.photoUrl+"' title='"+a.name+"' title_pos='top'/>")}$("#chat_user_"+a.userId).addClass("online")}$("#collaborators").children("img[class!=online]").remove()},showChatWin:function(){if($("#open_chat_btn").button("isSelected")){CLB.closeChatWin();return}$("#open_chat_btn").button("select");$("#chattingbox").css("left",$("#shape_panel").outerWidth()).show();$("#chatting_edit").focus().unbind().bind("keydown",function(a){if(a.ctrlKey&&a.keyCode==13){CLB.sendChatMsg()}});$("#chat_prompt").hide().text("0")},closeChatWin:function(){$("#chattingbox").hide();$("#open_chat_btn").button("unselect")},sendChatMsg:function(){var b=$("#chatting_edit").val();if(b==""){$("#chatting_edit").focus();return}var a={action:"chat",message:b,name:userName};CLB.send(a);this.appendChatMsg(userName,b,false);$("#chatting_edit").val("").focus()},appendChatMsg:function(c,d,b){d=d.replace(/\n/g,"<br/>");$("#chat_messages").append("<li><span>"+c+"</span>:&nbsp;"+d+"</li>");$("#chat_messages").scrollTop(9999999);if(b&&!$("#open_chat_btn").button("isSelected")){var a=parseInt($("#chat_prompt").text())+1;$("#chat_prompt").show().text(a).animate({"top":"-15px"},200).animate({"top":"-9px"},200)}}};
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.chatting.collaboration.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.chatting.collaboration.js
                                                  new file mode 100644
                                                  index 00000000..67ebc84f
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.chatting.collaboration.js
                                                  @@ -0,0 +1 @@
                                                  +$(function(){if(chartId==""||userId==""){return}var d=ChartCollaboration.initCollaboration();d.find(".chatting_header").off().on("click",function(){if(d.find(".chatting_main").is(":visible")){DesigerChattingBox.minChattingBox(d)}else{DesigerChattingBox.maxChattingBox(d)}});$(".share_container").find(".open_chatting_border").unbind().bind("click",function(){if($(".collaboration_users").find("img[id^='chat_user_']").length>1){DesigerChattingBox.openChattingBox(d)}});d.find(".chatting_header").find(".close-icon").off().on("click",function(a){DesigerChattingBox.closeChattingBox(d);a.stopPropagation()});d.find("#chatting_edit").keyup(function(a){var b=DesigerChattingBox.limitTextAreaWords(a);if((a.keyCode||a.which||a.charCode)==13&&a.ctrlKey&&!$(".chatting_bottom").find(".designer_button").is(":disabled")){ChartCollaboration.sendChatMsg(b)}});$("body").keyup(function(a){DesigerChattingBox.escMinChattingBox(d,a)});$("#chat_users").mouseenter(function(a){var b=function(h){var e=0;var h=h||window.event;if(h.wheelDelta){e=h.wheelDelta/120;if(window.opera){e=-e}}else{if(h.detail){e=-h.detail/3}}if(e){DesigerChattingBox.scrollUsersList(e)}if(h.stopPropagation){h.stopPropagation()}h.cancelBubble=true};if(window.addEventListener){window.addEventListener("DOMMouseScroll",b,false)}window.onmousewheel=document.onmousewheel=b});d.find(".chatting_bottom").find(".designer_button").off().on("click",function(){var a=$.trim($("#chatting_edit").val());if(a!=""){ChartCollaboration.sendChatMsg(a)}else{$("#chatting_edit").val("").focus();$(".chatting_bottom").find(".mun").html(0)}});var c=$(window).width()-$(".share_container").offset().left+37;$(".collaboration_users").css({right:c+"px"})});var ChartCollaboration={initCollaboration:function(){var b=DesigerChattingBox.getChattingBox();this.listen("");return b},listen:function(b){Util.ajax({url:"/collaboration/listen",data:{sessionId:userId,name:userName,subject:chartId,listenTime:b},type:"get",success:function(a){ChartCollaboration.doEvents(a.events);if(typeof a.onlineUsers!="undefined"){ChartCollaboration.manageOnlineUsers(a.onlineUsers)}},error:function(){}})},manageOnlineUsers:function(d){this.increaseUserCount(d.length-1);$(".collaboration_users").find("img[id^='chat_user_']").remove();for(var f=0;f<d.length;f++){var e=d[f];if($("#chat_user_"+e.sessionId).length==0){if(e.sessionId!=userId){$(".collaboration_users").append("<img id='chat_user_"+e.sessionId+"' src='"+e.photoUrl+"' class='' title='"+e.name+"'/>")}else{$(".collaboration_users").prepend("<img id='chat_user_"+e.sessionId+"' src='"+e.photoUrl+"' class='' title='"+e.name+"'/>")}}}if($(".collaboration_users").find("img[id^='chat_user_']").length<=1){$(".share_container").find(".open_chatting_border").removeClass("dt").attr("title","<@i18n resource='diagraming.collaboation_no_one_in_signed_to_chat' />")}else{$(".share_container").find(".open_chatting_border").addClass("dt").attr("title","<@i18n resource='diagraming.collaboation_open_chatting_box' />")}},doEvents:function(n){for(var h=0;h<n.length;h++){var m=n[h];if(m.action=="refresh"){this.listen(m.listenTime)}else{if(m.action=="command"){if(m.from!=userId){var k=JSON.parse(m.msg);MessageSource.receive(k)}}else{if(m.action=="chat"){if(m.from!=userId){DesigerChattingBox.sendMessage(m.name,m.msg);if(!$("#desiger_chattingbox").is(":visible")){$("#desiger_chattingbox").show()}if(!$("#desiger_chattingbox").find(".chatting_main").is(":visible")){DesigerChattingBox.newMsgShake($("#desiger_chattingbox"))}}}else{if(m.action=="join"){if(m.from!=userId){var l=$("#chat_user_"+m.from);if(!l.length){}}}else{if(m.action=="changeTitle"){var j=$.trim(m.msg);if(m.from!=userId){var i=$('<span id="diagram_title" style="position: absolute;padding:0px 10px;margin-top:20px;display:block;opacity:0;filter:alpha(opacity=0);">'+(j!=""?j:"Untitled Diagram")+"</span>").appendTo("#title_container");$("#title_container").queue("ct",function(a){$(this).find(":first-child").animate({"margin-top":"-20px",opacity:"0"},{duration:300,queue:false});a()}).delay(300,"ct").queue("ct",function(a){$(this).find(":first-child").remove();a()}).delay(100,"ct").queue("ct",function(a){i.animate({"margin-top":"10px",opacity:"1"},{duration:300,queue:false});a()}).dequeue("ct")}}}}}}}},publish:function(d,f){var e={subject:chartId,from:userId};d=$.extend(e,d);Util.ajax({url:"/collaboration/send",data:d,success:function(a){if(f){f(a)}}})},sendChatMsg:function(b){this.publish({action:"chat",name:userName,msg:b});DesigerChattingBox.sendMessage("<@i18n resource='message.chat_me'/> ",b)},increaseUserCount:function(b){if(parseInt($("#users_count").text())==0&&b<0){return}else{$("#users_count").text(b)}}};
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.chatting.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.chatting.js
                                                  new file mode 100644
                                                  index 00000000..73625b60
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.chatting.js
                                                  @@ -0,0 +1 @@
                                                  +$(function(){if(chartId==""||userId==""){return}var a=ChartCollaboration.initCollaboration();a.find(".chatting_header").off().on("click",function(){if(a.find(".chatting_main").is(":visible")){DesigerChattingBox.minChattingBox(a)}else{DesigerChattingBox.maxChattingBox(a)}});$(".share_container").find(".open_chatting_border").unbind().bind("click",function(){if($(".collaboration_users").find("img[id^='chat_user_']").length>1){DesigerChattingBox.openChattingBox(a)}});a.find(".chatting_header").find(".close-icon").off().on("click",function(c){DesigerChattingBox.closeChattingBox(a);c.stopPropagation()});a.find("#chatting_edit").keyup(function(d){var c=DesigerChattingBox.limitTextAreaWords(d);if((d.keyCode||d.which||d.charCode)==13&&d.ctrlKey&&!$(".chatting_bottom").find(".designer_button").is(":disabled")){ChartCollaboration.sendChatMsg(c)}});$("body").keyup(function(c){DesigerChattingBox.escMinChattingBox(a,c)});$("#chat_users").mouseenter(function(d){var c=function(f){var g=0;var f=f||window.event;if(f.wheelDelta){g=f.wheelDelta/120;if(window.opera){g=-g}}else{if(f.detail){g=-f.detail/3}}if(g){DesigerChattingBox.scrollUsersList(g)}if(f.stopPropagation){f.stopPropagation()}f.cancelBubble=true};if(window.addEventListener){window.addEventListener("DOMMouseScroll",c,false)}window.onmousewheel=document.onmousewheel=c});a.find(".chatting_bottom").find(".designer_button").off().on("click",function(){var c=$.trim($("#chatting_edit").val());if(c!=""){ChartCollaboration.sendChatMsg(c)}else{$("#chatting_edit").val("").focus();$(".chatting_bottom").find(".mun").html(0)}});var b=$(window).width()-$(".share_container").offset().left+37;$(".collaboration_users").css({right:b+"px"})});var ChartCollaboration={initCollaboration:function(){var a=DesigerChattingBox.getChattingBox();this.listen("");return a},listen:function(a){Util.ajax({url:"/collaboration/listen",data:{sessionId:userId,name:userName,subject:chartId,listenTime:a},type:"get",success:function(b){ChartCollaboration.doEvents(b.events);if(typeof b.onlineUsers!="undefined"){ChartCollaboration.manageOnlineUsers(b.onlineUsers)}},error:function(){}})},manageOnlineUsers:function(c){this.increaseUserCount(c.length-1);$(".collaboration_users").find("img[id^='chat_user_']").remove();for(var a=0;a<c.length;a++){var b=c[a];if($("#chat_user_"+b.sessionId).length==0){if(b.sessionId!=userId){$(".collaboration_users").append("<img id='chat_user_"+b.sessionId+"' src='"+b.photoUrl+"' class='' title='"+b.name+"'/>")}else{$(".collaboration_users").prepend("<img id='chat_user_"+b.sessionId+"' src='"+b.photoUrl+"' class='' title='"+b.name+"'/>")}}}if($(".collaboration_users").find("img[id^='chat_user_']").length<=1){$(".share_container").find(".open_chatting_border").removeClass("dt").attr("title","<@i18n resource='diagraming.collaboation_no_one_in_signed_to_chat' />")}else{$(".share_container").find(".open_chatting_border").addClass("dt").attr("title","<@i18n resource='diagraming.collaboation_open_chatting_box' />")}},doEvents:function(g){for(var f=0;f<g.length;f++){var a=g[f];if(a.action=="refresh"){this.listen(a.listenTime)}else{if(a.action=="command"){if(a.from!=userId){var c=JSON.parse(a.msg);MessageSource.receive(c)}}else{if(a.action=="chat"){if(a.from!=userId){DesigerChattingBox.sendMessage(a.name,a.msg);if(!$("#desiger_chattingbox").is(":visible")){$("#desiger_chattingbox").show()}if(!$("#desiger_chattingbox").find(".chatting_main").is(":visible")){DesigerChattingBox.newMsgShake($("#desiger_chattingbox"))}}}else{if(a.action=="join"){if(a.from!=userId){var b=$("#chat_user_"+a.from);if(!b.length){}}}else{if(a.action=="changeTitle"){var d=$.trim(a.msg);if(a.from!=userId){var e=$('<span id="diagram_title" style="position: absolute;padding:0px 10px;margin-top:20px;display:block;opacity:0;filter:alpha(opacity=0);">'+(d!=""?d:"Untitled Diagram")+"</span>").appendTo("#title_container");$("#title_container").queue("ct",function(h){$(this).find(":first-child").animate({"margin-top":"-20px",opacity:"0"},{duration:300,queue:false});h()}).delay(300,"ct").queue("ct",function(h){$(this).find(":first-child").remove();h()}).delay(100,"ct").queue("ct",function(h){e.animate({"margin-top":"10px",opacity:"1"},{duration:300,queue:false});h()}).dequeue("ct")}}}}}}}},publish:function(c,a){var b={subject:chartId,from:userId};c=$.extend(b,c);Util.ajax({url:"/collaboration/send",data:c,success:function(d){if(a){a(d)}}})},sendChatMsg:function(a){this.publish({action:"chat",name:userName,msg:a});DesigerChattingBox.sendMessage("<@i18n resource='message.chat_me'/> ",a)},increaseUserCount:function(a){if(parseInt($("#users_count").text())==0&&a<0){return}else{$("#users_count").text(a)}}};
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.core.debug.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.core.debug.js
                                                  new file mode 100644
                                                  index 00000000..48338709
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.core.debug.js
                                                  @@ -0,0 +1,9340 @@
                                                  +Schema.init(true);
                                                  +Schema.initMarkers();
                                                  +$(function() {
                                                  +    if (role == "trial") {
                                                  +        Designer.status = "demo"
                                                  +    } else {
                                                  +        if (role == "viewer") {
                                                  +            Designer.status = "readonly"
                                                  +        } else {
                                                  +            if (role == "running") {
                                                  +                Designer.status = "running"
                                                  +            }
                                                  +        }
                                                  +    }
                                                  +    Designer.init();
                                                  +    UI.init();
                                                  +    Dock.init();
                                                  +    Navigator.init();
                                                  +    if (Designer.status == "readonly") {
                                                  +        Designer.setReadonly(true);
                                                  +        $("#moreShapes").hide();
                                                  +        Customize.init();
                                                  +        return
                                                  +    }
                                                  +    if (Designer.status == "demo") {
                                                  +        UI.gettingStart()
                                                  +    }
                                                  +});
                                                  +var Designer = {
                                                  +    config: {
                                                  +        panelItemWidth: 30,
                                                  +        panelItemHeight: 30,
                                                  +        pageMargin: 10,
                                                  +        anchorSize: 8,
                                                  +        rotaterSize: 9,
                                                  +        anchorColor: "#833",
                                                  +        selectorColor: "#833",
                                                  +        scale: 1
                                                  +    },
                                                  +    status: "",
                                                  +    initialize: {
                                                  +        initialized: false,
                                                  +        initLayout: function() {
                                                  +            $(window).bind("resize.designer",
                                                  +                function() {
                                                  +                    showPainting();
                                                  +                    var b = $(window).height() - $("#designer_header").outerHeight() - $("#designer_footer").outerHeight();
                                                  +                    $(".layout").height(b);
                                                  +                    if ($("#demo_signup").length) {
                                                  +                        $("#designer_layout").height(b - $("#demo_signup").outerHeight())
                                                  +                    }
                                                  +                });
                                                  +            $(window).trigger("resize.designer")
                                                  +        },
                                                  +        initModel: function() {
                                                  +            Model.define = {
                                                  +                page: Utils.copy(Schema.pageDefaults),
                                                  +                elements: {}
                                                  +            };
                                                  +            if (definition != undefined && definition.localAttribute != undefined) {
                                                  +                Model.define.localAttribute = definition.localAttribute
                                                  +            } else {
                                                  +                Model.define.localAttribute = {}
                                                  +            }
                                                  +            if (definition != undefined && definition.commonShapeConfig != undefined) {
                                                  +                Model.define.commonShapeConfig = definition.commonShapeConfig
                                                  +            } else {
                                                  +                Model.define.commonShapeConfig = {}
                                                  +            }
                                                  +            Model.persistence = {
                                                  +                page: Utils.copy(Schema.pageDefaults),
                                                  +                elements: {},
                                                  +                localAttribute: {},
                                                  +                commonShapeConfig: {}
                                                  +            }
                                                  +        },
                                                  +        initCanvas: function() {
                                                  +            var q = Model.define.page.width.toScale();
                                                  +            var v = Model.define.page.height.toScale();
                                                  +            var B = Model.define.page.backgroundColor;
                                                  +            var s = Utils.getDarkerColor(B);
                                                  +            var A = Utils.getDarkestColor(B);
                                                  +            $("#designer_canvas").css({
                                                  +                "background-color": "rgb(" + s + ")"
                                                  +            });
                                                  +            var w = $("#designer_grids");
                                                  +            w.attr({
                                                  +                width: q,
                                                  +                height: v
                                                  +            });
                                                  +            var h = w[0].getContext("2d");
                                                  +            h.clearRect(0, 0, q, v);
                                                  +            var r = Model.define.page.padding.toScale();
                                                  +            var y = q - r * 2;
                                                  +            var p = v - r * 2;
                                                  +            h.fillStyle = "rgb(" + B + ")";
                                                  +            h.beginPath();
                                                  +            h.rect(r, r, y, p);
                                                  +            h.fill();
                                                  +            var x = Math.round(Model.define.page.gridSize.toScale());
                                                  +            if (x < 10) {
                                                  +                x = 10
                                                  +            }
                                                  +            if (Model.define.page.showGrid) {
                                                  +                h.translate(r, r);
                                                  +                h.lineWidth = 1;
                                                  +                h.save();
                                                  +                var t = 0.5;
                                                  +                var u = 0;
                                                  +                while (t <= p) {
                                                  +                    h.restore();
                                                  +                    if (u % 4 == 0) {
                                                  +                        h.strokeStyle = "rgb(" + A + ")"
                                                  +                    } else {
                                                  +                        h.strokeStyle = "rgb(" + s + ")"
                                                  +                    }
                                                  +                    h.beginPath();
                                                  +                    h.moveTo(0, t);
                                                  +                    h.lineTo(y, t);
                                                  +                    t += x;
                                                  +                    u++;
                                                  +                    h.stroke()
                                                  +                }
                                                  +                t = 0.5;
                                                  +                u = 0;
                                                  +                while (t <= y) {
                                                  +                    h.restore();
                                                  +                    if (u % 4 == 0) {
                                                  +                        h.strokeStyle = "rgb(" + A + ")"
                                                  +                    } else {
                                                  +                        h.strokeStyle = "rgb(" + s + ")"
                                                  +                    }
                                                  +                    h.beginPath();
                                                  +                    h.moveTo(t, 0);
                                                  +                    h.lineTo(t, p);
                                                  +                    t += x;
                                                  +                    u++;
                                                  +                    h.stroke()
                                                  +                }
                                                  +            }
                                                  +            $("#canvas_container").css({
                                                  +                width: q,
                                                  +                height: v,
                                                  +                padding: Designer.config.pageMargin
                                                  +            });
                                                  +            if (!this.initialized) {
                                                  +                $("#designer_layout").scrollTop(Designer.config.pageMargin - 10);
                                                  +                $("#designer_layout").scrollLeft(Designer.config.pageMargin - 10)
                                                  +            }
                                                  +            var z = $("#bar_list_page").children("li[ac=set_page_showgrid]");
                                                  +            z.menuitem("unselect");
                                                  +            if (Model.define.page.showGrid) {
                                                  +                z.menuitem("select")
                                                  +            }
                                                  +        },
                                                  +        initShapes: function() {
                                                  +            $("#shape_panel").empty();
                                                  +            for (var o = 0; o < Schema.categories.length; o++) {
                                                  +                var n = Schema.categories[o];
                                                  +                if (n.name == "standard") {
                                                  +                    continue
                                                  +                }
                                                  +                $("#shape_panel").append("<div class='panel_container'><h3 class='panel_title'><div class='ico ico_accordion'></div>" + n.text + "</h3><div id='panel_" + n.name + "' class='content'></div></div>")
                                                  +            }
                                                  +            $(".panel_title").unbind().bind("click",
                                                  +                function() {
                                                  +                    $(this).parent().toggleClass("panel_collapsed")
                                                  +                });
                                                  +            for (var s in Schema.shapes) {
                                                  +                var l = Schema.shapes[s];
                                                  +                if (l.attribute.visible && l.category != "standard") {
                                                  +                    if ((l.category == "process_bpmn2" || l.category == "process.bpmn2" || l.category == "bpmn") && checkRunningTimeShape(l)) {
                                                  +                        continue;
                                                  +                    }
                                                  +                    if (!l.groupName) {
                                                  +                        p(l)
                                                  +                    } else {
                                                  +                        var i = SchemaGroup.getGroup(l.groupName);
                                                  +                        if (i[0] == s) {
                                                  +                            p(l, l.groupName)
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            function p(b, d) {
                                                  +                b = Utils.copy(b);
                                                  +                var e = "<div class='panel_box' shapeName='" + b.name + "'><canvas class='panel_item' width='" + (Designer.config.panelItemWidth) + "' height='" + (Designer.config.panelItemHeight) + "'></canvas></div>";
                                                  +                var c = $(e).appendTo("#panel_" + b.category);
                                                  +                if (d) {
                                                  +                    c.append("<div class='group_icon' onmousedown='Designer.op.showPanelGroup(\"" + d + "\", event, this)'></div>")
                                                  +                }
                                                  +                var a = c.children()[0];
                                                  +                c.bind("mouseenter",
                                                  +                    function() {
                                                  +                        if ($(this).hasClass("readonly")) {
                                                  +                            return
                                                  +                        }
                                                  +                        var h = $("#shape_thumb");
                                                  +                        h.children("div").text(b.title);
                                                  +                        var j = h.children("canvas")[0].getContext("2d");
                                                  +                        var A = {
                                                  +                            x: 0,
                                                  +                            y: 0,
                                                  +                            w: b.props.w,
                                                  +                            h: b.props.h,
                                                  +                            angle: b.props.angle
                                                  +                        };
                                                  +                        var y = 160;
                                                  +                        var k = 160;
                                                  +                        j.clearRect(0, 0, y, k);
                                                  +                        if (b.props.w >= b.props.h) {
                                                  +                            if (b.props.w > y) {
                                                  +                                A.w = y;
                                                  +                                A.h = parseInt(b.props.h / b.props.w * A.w)
                                                  +                            }
                                                  +                        } else {
                                                  +                            if (b.props.h > k) {
                                                  +                                A.h = k;
                                                  +                                A.w = parseInt(b.props.w / b.props.h * A.h)
                                                  +                            }
                                                  +                        }
                                                  +                        h.children("canvas").attr({
                                                  +                            width: y + 20,
                                                  +                            height: A.h + 20
                                                  +                        });
                                                  +                        h.show();
                                                  +                        b.props = A;
                                                  +                        j.save();
                                                  +                        if (b.name != "text" && b.name != "umlText") {
                                                  +                            j.globalAlpha = b.shapeStyle.alpha;
                                                  +                            var f = (y + 20 - A.w) / 2;
                                                  +                            var g = 10;
                                                  +                            j.translate(f, g);
                                                  +                            j.translate(A.w / 2, A.h / 2);
                                                  +                            j.rotate(A.angle);
                                                  +                            j.translate( - (A.w / 2), -(A.h / 2));
                                                  +                            Designer.painter.renderShapePath(j, b, true);
                                                  +                            Designer.painter.renderMarkers(j, b, true)
                                                  +                        } else {
                                                  +                            j.translate(y / 2 + 10, A.h / 2 + 10);
                                                  +                            j.textBaseline = "middle";
                                                  +                            j.textAlign = "center";
                                                  +                            var B = "";
                                                  +                            if (b.fontStyle.italic) {
                                                  +                                B += "italic "
                                                  +                            } else {
                                                  +                                B += "normal "
                                                  +                            }
                                                  +                            if (b.fontStyle.bold) {
                                                  +                                B += "bold "
                                                  +                            } else {
                                                  +                                B += "normal "
                                                  +                            }
                                                  +                            B += b.fontStyle.size + "pt ";
                                                  +                            B += b.fontStyle.fontFamily;
                                                  +                            j.font = B;
                                                  +                            j.fillStyle = "rgb(" + b.fontStyle.color + ")";
                                                  +                            j.fillText(b.text, 0, 0)
                                                  +                        }
                                                  +                        j.restore();
                                                  +                        var z = c.offset().top - $("#designer_header").outerHeight() + c.height() / 2 - h.outerHeight() / 2;
                                                  +                        if (z < 5) {
                                                  +                            z = 5
                                                  +                        } else {
                                                  +                            if (z + h.outerHeight() > $("#designer_viewport").height() - 5) {
                                                  +                                z = $("#designer_viewport").height() - 5 - h.outerHeight()
                                                  +                            }
                                                  +                        }
                                                  +                        h.css("top", z)
                                                  +                    }).bind("mouseleave",
                                                  +                    function() {
                                                  +                        $("#shape_thumb").hide()
                                                  +                    });
                                                  +                Designer.painter.drawPanelItem(a, b.name)
                                                  +            }
                                                  +            r();
                                                  +            function r() {
                                                  +                $(".panel_box").die().live("mousedown",
                                                  +                    function(j) {
                                                  +                        var c = $(this);
                                                  +                        if (c.hasClass("readonly")) {
                                                  +                            return
                                                  +                        }
                                                  +                        var h = c.attr("shapeName");
                                                  +                        var a = [];
                                                  +                        Designer.op.changeState("creating_from_panel");
                                                  +                        var g = null;
                                                  +                        var b = null;
                                                  +                        var d = $("#designer_canvas");
                                                  +                        var f = t(h);
                                                  +                        $("#designer").bind("mousemove.creating",
                                                  +                            function(k) {
                                                  +                                m(f, k)
                                                  +                            });
                                                  +                        $("#canvas_container").bind("mousemove.create",
                                                  +                            function(B) {
                                                  +                                var D = Utils.getRelativePos(B.pageX, B.pageY, d);
                                                  +                                if (g == null) {
                                                  +                                    g = q(h, D.x, D.y);
                                                  +                                    b = $("#" + g.id);
                                                  +                                    b.attr("class", "shape_box_creating")
                                                  +                                }
                                                  +                                b.css({
                                                  +                                    left: D.x - b.width() / 2 + "px",
                                                  +                                    top: D.y - b.height() / 2 + "px",
                                                  +                                    "z-index": Model.orderList.length
                                                  +                                });
                                                  +                                g.props.x = D.x.restoreScale() - g.props.w / 2;
                                                  +                                g.props.y = D.y.restoreScale() - g.props.h / 2;
                                                  +                                var G = g.props;
                                                  +                                var H = Designer.op.snapLine(G, [g.id], true, g);
                                                  +                                if (H.attach) {
                                                  +                                    g.attachTo = H.attach.id
                                                  +                                } else {
                                                  +                                    delete g.attachTo
                                                  +                                }
                                                  +                                b.css({
                                                  +                                    left: (g.props.x - 10).toScale() + "px",
                                                  +                                    top: (g.props.y - 10).toScale() + "px",
                                                  +                                    "z-index": Model.orderList.length
                                                  +                                });
                                                  +                                a = Utils.getShapeAnchorInLinker(g);
                                                  +                                Designer.op.hideLinkPoint();
                                                  +                                for (var C = 0; C < a.length; C++) {
                                                  +                                    var E = a[C];
                                                  +                                    for (var F = 0; F < E.anchors.length; F++) {
                                                  +                                        var k = E.anchors[F];
                                                  +                                        Designer.op.showLinkPoint(Utils.toScale(k))
                                                  +                                    }
                                                  +                                }
                                                  +                            });
                                                  +                        var e = false;
                                                  +                        $("#canvas_container").bind("mouseup.create",
                                                  +                            function(k) {
                                                  +                                e = true
                                                  +                            });
                                                  +                        $(document).bind("mouseup.create",
                                                  +                            function() {
                                                  +                                $(this).unbind("mouseup.create");
                                                  +                                $("#designer").unbind("mousemove.creating");
                                                  +                                $("#creating_shape_container").hide();
                                                  +                                Designer.op.hideLinkPoint();
                                                  +                                Designer.op.hideSnapLine();
                                                  +                                $("#canvas_container").unbind("mouseup.create").unbind("mousemove.create");
                                                  +                                if (g != null) {
                                                  +                                    if (e == false) {
                                                  +                                        b.remove()
                                                  +                                    } else {
                                                  +                                        MessageSource.beginBatch();
                                                  +                                        if (g.onCreated) {
                                                  +                                            var P = g.onCreated();
                                                  +                                            if (P == false) {
                                                  +                                                b.remove();
                                                  +                                                MessageSource.commit();
                                                  +                                                return
                                                  +                                            }
                                                  +                                        }
                                                  +                                        b.attr("class", "shape_box");
                                                  +                                        Designer.events.push("created", g);
                                                  +                                        Model.add(g);
                                                  +                                        var S = Utils.getShapeContext(g.id);
                                                  +                                        var Q = b.position();
                                                  +                                        var K = 7;
                                                  +                                        for (var N = 0; N < a.length; N++) {
                                                  +                                            var W = a[N];
                                                  +                                            var M = W.linker;
                                                  +                                            if (W.type == "line") {
                                                  +                                                var Y = Utils.copy(M);
                                                  +                                                var Z = Utils.copy(M);
                                                  +                                                Z.id = Utils.newId();
                                                  +                                                if (W.anchors.length == 1) {
                                                  +                                                    var O = W.anchors[0];
                                                  +                                                    var U = Utils.getPointAngle(g.id, O.x, O.y, K);
                                                  +                                                    M.to = {
                                                  +                                                        id: g.id,
                                                  +                                                        x: O.x,
                                                  +                                                        y: O.y,
                                                  +                                                        angle: U
                                                  +                                                    };
                                                  +                                                    Z.from = {
                                                  +                                                        id: g.id,
                                                  +                                                        x: O.x,
                                                  +                                                        y: O.y,
                                                  +                                                        angle: U
                                                  +                                                    }
                                                  +                                                } else {
                                                  +                                                    if (W.anchors.length == 2) {
                                                  +                                                        var R = W.anchors[0];
                                                  +                                                        var T = W.anchors[1];
                                                  +                                                        var k = Utils.measureDistance(M.from, R);
                                                  +                                                        var L = Utils.measureDistance(M.from, T);
                                                  +                                                        var X, V;
                                                  +                                                        if (k < L) {
                                                  +                                                            X = R;
                                                  +                                                            V = T
                                                  +                                                        } else {
                                                  +                                                            X = T;
                                                  +                                                            V = R
                                                  +                                                        }
                                                  +                                                        var U = Utils.getPointAngle(g.id, X.x, X.y, K);
                                                  +                                                        M.to = {
                                                  +                                                            id: g.id,
                                                  +                                                            x: X.x,
                                                  +                                                            y: X.y,
                                                  +                                                            angle: U
                                                  +                                                        };
                                                  +                                                        U = Utils.getPointAngle(g.id, V.x, V.y, K);
                                                  +                                                        Z.from = {
                                                  +                                                            id: g.id,
                                                  +                                                            x: V.x,
                                                  +                                                            y: V.y,
                                                  +                                                            angle: U
                                                  +                                                        }
                                                  +                                                    }
                                                  +                                                }
                                                  +                                                if (W.anchors.length <= 2) {
                                                  +                                                    Designer.painter.renderLinker(M, true);
                                                  +                                                    Model.update(M);
                                                  +                                                    Designer.painter.renderLinker(Z, true);
                                                  +                                                    Z.props.zindex = Model.maxZIndex + 1;
                                                  +                                                    Model.add(Z);
                                                  +                                                    Designer.events.push("linkerCreated", Z)
                                                  +                                                }
                                                  +                                            } else {
                                                  +                                                var O = W.anchors[0];
                                                  +                                                var U = Utils.getPointAngle(g.id, O.x, O.y, K);
                                                  +                                                if (W.type == "from") {
                                                  +                                                    M.from = {
                                                  +                                                        id: g.id,
                                                  +                                                        x: O.x,
                                                  +                                                        y: O.y,
                                                  +                                                        angle: U
                                                  +                                                    }
                                                  +                                                } else {
                                                  +                                                    M.to = {
                                                  +                                                        id: g.id,
                                                  +                                                        x: O.x,
                                                  +                                                        y: O.y,
                                                  +                                                        angle: U
                                                  +                                                    }
                                                  +                                                }
                                                  +                                                Designer.painter.renderLinker(M, true);
                                                  +                                                Model.update(M)
                                                  +                                            }
                                                  +                                        }
                                                  +                                        Utils.unselect();
                                                  +                                        Utils.selectShape(g.id);
                                                  +                                        MessageSource.commit();
                                                  +                                        if (g.attribute.editable) {
                                                  +                                            Designer.op.editShapeText(g)
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                                c.css({
                                                  +                                    left: "0px",
                                                  +                                    top: "0px"
                                                  +                                });
                                                  +                                Designer.op.resetState()
                                                  +                            })
                                                  +                    })
                                                  +            }
                                                  +            function t(a) {
                                                  +                var b = $("#creating_shape_canvas");
                                                  +                var c = $("#creating_shape_container");
                                                  +                if (b.length == 0) {
                                                  +                    c = $("<div id='creating_shape_container'></div>").appendTo("#designer");
                                                  +                    b = $("<canvas id='creating_shape_canvas' width='" + (Designer.config.panelItemWidth) + "' height='" + (Designer.config.panelItemHeight) + "'></canvas>").appendTo(c)
                                                  +                }
                                                  +                c.css({
                                                  +                    left: "0px",
                                                  +                    top: "0px",
                                                  +                    width: $(".panel_container").width(),
                                                  +                    height: $("#shape_panel").outerHeight()
                                                  +                });
                                                  +                Designer.painter.drawPanelItem(b[0], a);
                                                  +                return b
                                                  +            }
                                                  +            function m(b, a) {
                                                  +                $("#creating_shape_container").show();
                                                  +                var c = Utils.getRelativePos(a.pageX, a.pageY, $("#creating_shape_container"));
                                                  +                b.css({
                                                  +                    left: c.x - Designer.config.panelItemWidth / 2,
                                                  +                    top: c.y - Designer.config.panelItemHeight / 2
                                                  +                })
                                                  +            }
                                                  +            function q(g, e, f) {
                                                  +                var h = Utils.newId();
                                                  +                var b = Schema.shapes[g];
                                                  +                var c = e.restoreScale() - b.props.w / 2;
                                                  +                var d = f.restoreScale() - b.props.h / 2;
                                                  +                var a = Model.create(g, c, d);
                                                  +                Designer.painter.renderShape(a);
                                                  +                return a
                                                  +            }
                                                  +        }
                                                  +    },
                                                  +    hotkey: {
                                                  +        init: function() {
                                                  +            var b = null;
                                                  +            $(document).unbind("keydown.hotkey").bind("keydown.hotkey",
                                                  +                function(n) {
                                                  +                    if (n.ctrlKey && n.keyCode == 65) {
                                                  +                        Designer.selectAll();
                                                  +                        n.preventDefault()
                                                  +                    } else {
                                                  +                        if (n.keyCode == 46 || n.keyCode == 8) {
                                                  +                            Designer.op.removeShape();
                                                  +                            n.preventDefault()
                                                  +                        } else {
                                                  +                            if (n.ctrlKey && n.keyCode == 90) {
                                                  +                                MessageSource.undo();
                                                  +                                n.preventDefault()
                                                  +                            } else {
                                                  +                                if (n.ctrlKey && n.keyCode == 89) {
                                                  +                                    MessageSource.redo();
                                                  +                                    n.preventDefault()
                                                  +                                } else {
                                                  +                                    if (n.ctrlKey && !n.shiftKey && n.keyCode == 67) {
                                                  +                                        Designer.clipboard.copy();
                                                  +                                        n.preventDefault()
                                                  +                                    } else {
                                                  +                                        if (n.ctrlKey && n.keyCode == 88) {
                                                  +                                            Designer.clipboard.cut();
                                                  +                                            n.preventDefault()
                                                  +                                        } else {
                                                  +                                            if (n.ctrlKey && n.keyCode == 86) {
                                                  +                                                Designer.clipboard.paste();
                                                  +                                                n.preventDefault()
                                                  +                                            } else {
                                                  +                                                if (n.ctrlKey && n.keyCode == 68) {
                                                  +                                                    Designer.clipboard.duplicate();
                                                  +                                                    n.preventDefault()
                                                  +                                                } else {
                                                  +                                                    if (n.ctrlKey && n.shiftKey && n.keyCode == 66) {
                                                  +                                                        Designer.clipboard.brush();
                                                  +                                                        n.preventDefault()
                                                  +                                                    } else {
                                                  +                                                        if (n.ctrlKey && n.keyCode == 190) {
                                                  +                                                            Designer.zoomIn();
                                                  +                                                            n.preventDefault()
                                                  +                                                        } else {
                                                  +                                                            if (n.ctrlKey && n.keyCode == 188) {
                                                  +                                                                Designer.zoomOut();
                                                  +                                                                n.preventDefault()
                                                  +                                                            } else {
                                                  +                                                                if (n.keyCode >= 37 && n.keyCode <= 40) {
                                                  +                                                                    if (b == null) {
                                                  +                                                                        var s = Utils.getSelected();
                                                  +                                                                        var m = Utils.getFamilyShapes(s);
                                                  +                                                                        s = s.concat(m);
                                                  +                                                                        var q = Utils.getContainedShapes(s);
                                                  +                                                                        s = s.concat(q);
                                                  +                                                                        var r = Utils.getAttachedShapes(s);
                                                  +                                                                        s = s.concat(r);
                                                  +                                                                        var a = Utils.getOutlinkers(s);
                                                  +                                                                        b = s.concat(a)
                                                  +                                                                    }
                                                  +                                                                    if (b.length > 0) {
                                                  +                                                                        n.preventDefault();
                                                  +                                                                        var t = 10;
                                                  +                                                                        if (n.ctrlKey) {
                                                  +                                                                            t = 1
                                                  +                                                                        }
                                                  +                                                                        Utils.hideLinkerCursor();
                                                  +                                                                        if (n.keyCode == 37) {
                                                  +                                                                            Designer.op.moveShape(b, {
                                                  +                                                                                x: -t,
                                                  +                                                                                y: 0
                                                  +                                                                            })
                                                  +                                                                        } else {
                                                  +                                                                            if (n.keyCode == 38) {
                                                  +                                                                                Designer.op.moveShape(b, {
                                                  +                                                                                    x: 0,
                                                  +                                                                                    y: -t
                                                  +                                                                                })
                                                  +                                                                            } else {
                                                  +                                                                                if (n.keyCode == 39) {
                                                  +                                                                                    Designer.op.moveShape(b, {
                                                  +                                                                                        x: t,
                                                  +                                                                                        y: 0
                                                  +                                                                                    })
                                                  +                                                                                } else {
                                                  +                                                                                    if (n.keyCode == 40) {
                                                  +                                                                                        Designer.op.moveShape(b, {
                                                  +                                                                                            x: 0,
                                                  +                                                                                            y: t
                                                  +                                                                                        })
                                                  +                                                                                    }
                                                  +                                                                                }
                                                  +                                                                            }
                                                  +                                                                        }
                                                  +                                                                        $(document).unbind("keyup.moveshape").bind("keyup.moveshape",
                                                  +                                                                            function() {
                                                  +                                                                                Model.updateMulti(b);
                                                  +                                                                                b = null;
                                                  +                                                                                $(document).unbind("keyup.moveshape");
                                                  +                                                                                Designer.op.hideTip();
                                                  +                                                                                Utils.showLinkerCursor()
                                                  +                                                                            })
                                                  +                                                                    }
                                                  +                                                                } else {
                                                  +                                                                    if (n.keyCode == 221 && n.ctrlKey) {
                                                  +                                                                        var e = "front";
                                                  +                                                                        if (n.shiftKey) {
                                                  +                                                                            e = "forward"
                                                  +                                                                        }
                                                  +                                                                        Designer.layerShapes(e)
                                                  +                                                                    } else {
                                                  +                                                                        if (n.keyCode == 219 && n.ctrlKey) {
                                                  +                                                                            var e = "back";
                                                  +                                                                            if (n.shiftKey) {
                                                  +                                                                                e = "backward"
                                                  +                                                                            }
                                                  +                                                                            Designer.layerShapes(e)
                                                  +                                                                        } else {
                                                  +                                                                            if (n.keyCode == 71 && n.ctrlKey) {
                                                  +                                                                                n.preventDefault();
                                                  +                                                                                if (n.shiftKey) {
                                                  +                                                                                    Designer.ungroup()
                                                  +                                                                                } else {
                                                  +                                                                                    Designer.group()
                                                  +                                                                                }
                                                  +                                                                            } else {
                                                  +                                                                                if (n.keyCode == 76 && n.ctrlKey) {
                                                  +                                                                                    n.preventDefault();
                                                  +                                                                                    if (n.shiftKey) {
                                                  +                                                                                        Designer.unlockShapes()
                                                  +                                                                                    } else {
                                                  +                                                                                        Designer.lockShapes()
                                                  +                                                                                    }
                                                  +                                                                                } else {
                                                  +                                                                                    if (n.keyCode == 18) {
                                                  +                                                                                        Designer.op.changeState("drag_canvas")
                                                  +                                                                                    } else {
                                                  +                                                                                        if (n.keyCode == 27) {
                                                  +                                                                                            if (!Designer.op.state) {
                                                  +                                                                                                Utils.unselect();
                                                  +                                                                                                $(".menu.list").hide();
                                                  +                                                                                                $(".menu").hide();
                                                  +                                                                                                $(".color_picker").hide()
                                                  +                                                                                            } else {
                                                  +                                                                                                if (Designer.op.state == "creating_free_text" || Designer.op.state == "creating_free_linker") {
                                                  +                                                                                                    Designer.op.resetState()
                                                  +                                                                                                }
                                                  +                                                                                            }
                                                  +                                                                                        } else {
                                                  +                                                                                            if (n.keyCode == 84 && !n.ctrlKey) {
                                                  +                                                                                                $(".menu.list").hide();
                                                  +                                                                                                Designer.op.changeState("creating_free_text")
                                                  +                                                                                            } else {
                                                  +                                                                                                if (n.keyCode == 73 && !n.ctrlKey) {
                                                  +                                                                                                    $(".menu.list").hide();
                                                  +                                                                                                    UI.showImageSelect(function(c, d, f) {
                                                  +                                                                                                        UI.insertImage(c, d, f)
                                                  +                                                                                                    });
                                                  +                                                                                                    $("#designer_contextmenu").hide()
                                                  +                                                                                                } else {
                                                  +                                                                                                    if (n.keyCode == 76 && !n.ctrlKey) {
                                                  +                                                                                                        $(".menu.list").hide();
                                                  +                                                                                                        Designer.op.changeState("creating_free_linker");
                                                  +                                                                                                        $("#designer_contextmenu").hide()
                                                  +                                                                                                    } else {
                                                  +                                                                                                        if (n.keyCode == 66 && n.ctrlKey) {
                                                  +                                                                                                            var o = Utils.getSelectedIds();
                                                  +                                                                                                            if (o.length > 0) {
                                                  +                                                                                                                var p = Model.getShapeById(o[0]);
                                                  +                                                                                                                Designer.setFontStyle({
                                                  +                                                                                                                    bold: !p.fontStyle.bold
                                                  +                                                                                                                });
                                                  +                                                                                                                UI.update()
                                                  +                                                                                                            }
                                                  +                                                                                                        } else {
                                                  +                                                                                                            if (n.keyCode == 73 && n.ctrlKey) {
                                                  +                                                                                                                var o = Utils.getSelectedIds();
                                                  +                                                                                                                if (o.length > 0) {
                                                  +                                                                                                                    var p = Model.getShapeById(o[0]);
                                                  +                                                                                                                    Designer.setFontStyle({
                                                  +                                                                                                                        italic: !p.fontStyle.italic
                                                  +                                                                                                                    });
                                                  +                                                                                                                    UI.update()
                                                  +                                                                                                                }
                                                  +                                                                                                            } else {
                                                  +                                                                                                                if (n.keyCode == 85 && n.ctrlKey) {
                                                  +                                                                                                                    var o = Utils.getSelectedIds();
                                                  +                                                                                                                    if (o.length > 0) {
                                                  +                                                                                                                        var p = Model.getShapeById(o[0]);
                                                  +                                                                                                                        Designer.setFontStyle({
                                                  +                                                                                                                            underline: !p.fontStyle.underline
                                                  +                                                                                                                        });
                                                  +                                                                                                                        UI.update()
                                                  +                                                                                                                    }
                                                  +                                                                                                                    n.preventDefault()
                                                  +                                                                                                                } else {
                                                  +                                                                                                                    if (n.keyCode == 32 && !n.ctrlKey) {
                                                  +                                                                                                                        var o = Utils.getSelectedIds();
                                                  +                                                                                                                        if (o.length == 1) {
                                                  +                                                                                                                            var p = Model.getShapeById(o[0]);
                                                  +                                                                                                                            Designer.op.editShapeText(p)
                                                  +                                                                                                                        }
                                                  +                                                                                                                        n.preventDefault()
                                                  +                                                                                                                    } else {
                                                  +                                                                                                                        if (n.keyCode == 121) {
                                                  +                                                                                                                            n.preventDefault();
                                                  +                                                                                                                            Dock.enterPresentation()
                                                  +                                                                                                                        }
                                                  +                                                                                                                    }
                                                  +                                                                                                                }
                                                  +                                                                                                            }
                                                  +                                                                                                        }
                                                  +                                                                                                    }
                                                  +                                                                                                }
                                                  +                                                                                            }
                                                  +                                                                                        }
                                                  +                                                                                    }
                                                  +                                                                                }
                                                  +                                                                            }
                                                  +                                                                        }
                                                  +                                                                    }
                                                  +                                                                }
                                                  +                                                            }
                                                  +                                                        }
                                                  +                                                    }
                                                  +                                                }
                                                  +                                            }
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                });
                                                  +            $("input,textarea,select").die().live("keydown.hotkey",
                                                  +                function(a) {
                                                  +                    a.stopPropagation()
                                                  +                })
                                                  +        },
                                                  +        cancel: function() {
                                                  +            $(document).unbind("keydown.hotkey")
                                                  +        }
                                                  +    },
                                                  +    contextMenu: {
                                                  +        init: function() {
                                                  +            $("#designer_contextmenu").unbind("mousedown").bind("mousedown",
                                                  +                function(b) {
                                                  +                    b.stopPropagation()
                                                  +                });
                                                  +            $("#designer_contextmenu").find("li:not(.devider)").unbind("click").bind("click",
                                                  +                function() {
                                                  +                    var b = $(this);
                                                  +                    if (!b.menuitem("isDisabled") && b.children(".extend_menu").length == 0) {
                                                  +                        Designer.contextMenu.execAction(b);
                                                  +                        Designer.contextMenu.hide()
                                                  +                    }
                                                  +                });
                                                  +            $("#canvas_container").unbind("contextmenu").bind("contextmenu",
                                                  +                function(d) {
                                                  +                    d.preventDefault();
                                                  +                    var e = $("#designer_canvas");
                                                  +                    var f = Utils.getRelativePos(d.pageX, d.pageY, e);
                                                  +                    Designer.contextMenu.show(f.x, f.y)
                                                  +                })
                                                  +        },
                                                  +        destroy: function() {
                                                  +            $("#canvas_container").unbind("contextmenu");
                                                  +            this.hide()
                                                  +        },
                                                  +        menuPos: {
                                                  +            x: 0,
                                                  +            y: 0,
                                                  +            shape: null
                                                  +        },
                                                  +        show: function(k, l) {
                                                  +            this.menuPos.x = k;
                                                  +            this.menuPos.y = l;
                                                  +            var p = $("#designer_contextmenu");
                                                  +            var r = Utils.getShapeByPosition(k, l, false);
                                                  +            p.children().hide();
                                                  +            p.children("li[ac=selectall]").show();
                                                  +            p.children(".devi_selectall").show();
                                                  +            p.children("li[ac=drawline]").show();
                                                  +            var q = Designer.clipboard.elements.length;
                                                  +            if (r == null) {
                                                  +                if (q > 0) {
                                                  +                    p.children("li[ac=paste]").show();
                                                  +                    p.children(".devi_clip").show()
                                                  +                }
                                                  +            } else {
                                                  +                var n = r.shape;
                                                  +                this.menuPos.shape = n;
                                                  +                if (n.locked) {
                                                  +                    if (q > 0) {
                                                  +                        p.children("li[ac=paste]").show();
                                                  +                        p.children(".devi_clip").show()
                                                  +                    }
                                                  +                    p.children("li[ac=unlock]").show();
                                                  +                    p.children(".devi_shape").show()
                                                  +                } else {
                                                  +                    p.children("li[ac=cut]").show();
                                                  +                    p.children("li[ac=copy]").show();
                                                  +                    p.children("li[ac=duplicate]").show();
                                                  +                    if (q > 0) {
                                                  +                        p.children("li[ac=paste]").show()
                                                  +                    }
                                                  +                    p.children(".devi_clip").show();
                                                  +                    p.children("li[ac=front]").show();
                                                  +                    p.children("li[ac=back]").show();
                                                  +                    p.children("li[ac=lock]").show();
                                                  +                    var m = Utils.getSelectedIds();
                                                  +                    var o = m.length;
                                                  +                    if (o >= 2) {
                                                  +                        p.children("li[ac=group]").show();
                                                  +                        $("#ctxmenu_align").show()
                                                  +                    }
                                                  +                    var j = Utils.getSelectedGroups().length;
                                                  +                    if (j >= 1) {
                                                  +                        p.children("li[ac=ungroup]").show()
                                                  +                    }
                                                  +                    p.children(".devi_shape").show();
                                                  +                    if (o == 1 && n.name != "linker" && n.link) {
                                                  +                        p.children("li[ac=changelink]").show()
                                                  +                    }
                                                  +                    if (n.name == "linker" || n.attribute.editable) {
                                                  +                        p.children("li[ac=edit]").show()
                                                  +                    }
                                                  +                    p.children("li[ac=delete]").show();
                                                  +                    p.children(".devi_del").show()
                                                  +                }
                                                  +            }
                                                  +            p.css({
                                                  +                display: "block",
                                                  +                "z-index": Model.orderList.length + 3,
                                                  +                left: k,
                                                  +                top: l
                                                  +            });
                                                  +            $(document).bind("mousedown.ctxmenu",
                                                  +                function() {
                                                  +                    Designer.contextMenu.hide()
                                                  +                })
                                                  +        },
                                                  +        hide: function() {
                                                  +            $("#designer_contextmenu").hide();
                                                  +            $(document).unbind("mousedown.ctxmenu")
                                                  +        },
                                                  +        execAction: function(e) {
                                                  +            var d = e.attr("ac");
                                                  +            if (d == "cut") {
                                                  +                Designer.clipboard.cut()
                                                  +            } else {
                                                  +                if (d == "copy") {
                                                  +                    Designer.clipboard.copy()
                                                  +                } else {
                                                  +                    if (d == "paste") {
                                                  +                        Designer.clipboard.paste(this.menuPos.x, this.menuPos.y)
                                                  +                    } else {
                                                  +                        if (d == "duplicate") {
                                                  +                            Designer.clipboard.duplicate()
                                                  +                        } else {
                                                  +                            if (d == "front") {
                                                  +                                Designer.layerShapes("front")
                                                  +                            } else {
                                                  +                                if (d == "back") {
                                                  +                                    Designer.layerShapes("back")
                                                  +                                } else {
                                                  +                                    if (d == "lock") {
                                                  +                                        Designer.lockShapes()
                                                  +                                    } else {
                                                  +                                        if (d == "unlock") {
                                                  +                                            Designer.unlockShapes()
                                                  +                                        } else {
                                                  +                                            if (d == "group") {
                                                  +                                                Designer.group()
                                                  +                                            } else {
                                                  +                                                if (d == "ungroup") {
                                                  +                                                    Designer.ungroup()
                                                  +                                                } else {
                                                  +                                                    if (d == "align_shape") {
                                                  +                                                        var f = e.attr("al");
                                                  +                                                        Designer.alignShapes(f)
                                                  +                                                    } else {
                                                  +                                                        if (d == "edit") {
                                                  +                                                            Designer.op.editShapeText(this.menuPos.shape)
                                                  +                                                        } else {
                                                  +                                                            if (d == "delete") {
                                                  +                                                                Designer.op.removeShape()
                                                  +                                                            } else {
                                                  +                                                                if (d == "selectall") {
                                                  +                                                                    Designer.selectAll()
                                                  +                                                                } else {
                                                  +                                                                    if (d == "drawline") {
                                                  +                                                                        Designer.op.changeState("creating_free_linker")
                                                  +                                                                    } else {
                                                  +                                                                        if (d == "changelink") {
                                                  +                                                                            UI.showInsertLink()
                                                  +                                                                        }
                                                  +                                                                    }
                                                  +                                                                }
                                                  +                                                            }
                                                  +                                                        }
                                                  +                                                    }
                                                  +                                                }
                                                  +                                            }
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +    },
                                                  +    init: function() {
                                                  +        this.initialize.initLayout();
                                                  +        this.initialize.initModel();
                                                  +        this.initialize.initCanvas();
                                                  +        this.initialize.initShapes();
                                                  +        this.hotkey.init();
                                                  +        this.contextMenu.init();
                                                  +        Designer.op.init();
                                                  +        this.initialize.initialized = true;
                                                  +        Designer.events.push("initialized");
                                                  +        $("#designer_layout").on("scroll",
                                                  +            function() {
                                                  +                $(document).trigger("mouseup.multiselect")
                                                  +            })
                                                  +    },
                                                  +    op: {
                                                  +        init: function() {
                                                  +            var c = $("#designer_canvas");
                                                  +            var d = $("#canvas_container");
                                                  +            d.unbind("mousemove.operate").bind("mousemove.operate",
                                                  +                function(a) {
                                                  +                    if (Designer.op.state != null) {
                                                  +                        return
                                                  +                    }
                                                  +                    Designer.op.destroy();
                                                  +                    var b = Utils.getRelativePos(a.pageX, a.pageY, c);
                                                  +                    var j = Utils.getShapeByPosition(b.x, b.y);
                                                  +                    if (j != null) {
                                                  +                        if (j.type == "dataAttribute") {} else {
                                                  +                            if (j.type == "linker") {
                                                  +                                d.css("cursor", "pointer");
                                                  +                                Designer.op.shapeSelectable(j.shape);
                                                  +                                var h = j.shape;
                                                  +                                var i = j.pointIndex;
                                                  +                                if (h.linkerType == "broken" && i > 1 && i <= h.points.length) {
                                                  +                                    Designer.op.brokenLinkerChangable(h, i - 1)
                                                  +                                } else {
                                                  +                                    if (h.from.id == null && h.to.id == null) {
                                                  +                                        d.css("cursor", "move");
                                                  +                                        Designer.op.shapeDraggable()
                                                  +                                    }
                                                  +                                }
                                                  +                                Designer.op.linkerEditable(h)
                                                  +                            } else {
                                                  +                                if (j.type == "linker_point") {
                                                  +                                    d.css("cursor", "move");
                                                  +                                    Designer.op.shapeSelectable(j.shape);
                                                  +                                    Designer.op.linkerDraggable(j.shape, j.point);
                                                  +                                    Designer.op.linkerEditable(j.shape)
                                                  +                                } else {
                                                  +                                    if (j.type == "linker_text") {
                                                  +                                        d.css("cursor", "text");
                                                  +                                        Designer.op.shapeSelectable(j.shape);
                                                  +                                        Designer.op.linkerEditable(j.shape)
                                                  +                                    } else {
                                                  +                                        if (j.type == "shape") {
                                                  +                                            if (j.shape.locked) {
                                                  +                                                d.css("cursor", "default");
                                                  +                                                Designer.op.shapeSelectable(j.shape)
                                                  +                                            } else {
                                                  +                                                d.css("cursor", "move");
                                                  +                                                Designer.op.shapeSelectable(j.shape);
                                                  +                                                Designer.op.shapeEditable(j.shape);
                                                  +                                                Designer.op.shapeDraggable();
                                                  +                                                if (j.shape.link) {}
                                                  +                                            }
                                                  +                                        } else {
                                                  +                                            d.css("cursor", "crosshair");
                                                  +                                            Designer.op.shapeSelectable(j.shape);
                                                  +                                            Designer.op.shapeLinkable(j.shape, j.linkPoint)
                                                  +                                        }
                                                  +                                        if (j.shape.parent) {
                                                  +                                            Utils.showAnchors(Model.getShapeById(j.shape.parent))
                                                  +                                        } else {
                                                  +                                            Utils.showAnchors(j.shape)
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    } else {
                                                  +                        d.css("cursor", "default");
                                                  +                        Designer.op.shapeMultiSelectable()
                                                  +                    }
                                                  +                })
                                                  +        },
                                                  +        cancel: function() {
                                                  +            $("#canvas_container").unbind("mousemove.operate").css("cursor", "default");
                                                  +            this.destroy()
                                                  +        },
                                                  +        destroy: function() {
                                                  +            $("#designer_canvas").unbind("mousedown.drag").unbind("dblclick.edit").unbind("mousedown.draglinker").unbind("mousedown.select").unbind("mousedown.brokenLinker").unbind("dblclick.edit_linker");
                                                  +            $("#canvas_container").unbind("mousedown.link").unbind("mousedown.create_text").unbind("mousedown.drag_canvas");
                                                  +            $("#designer_layout").unbind("mousedown.multiselect");
                                                  +            Utils.hideAnchors();
                                                  +            $("#link_spot").hide()
                                                  +        },
                                                  +        state: null,
                                                  +        changeState: function(b) {
                                                  +            this.state = b;
                                                  +            if (b == "creating_free_text") {
                                                  +                this.destroy();
                                                  +                $("#canvas_container").css("cursor", "crosshair");
                                                  +                this.textCreatable()
                                                  +            } else {
                                                  +                if (b == "creating_free_linker") {
                                                  +                    this.destroy();
                                                  +                    $("#canvas_container").css("cursor", "crosshair");
                                                  +                    this.shapeLinkable()
                                                  +                } else {
                                                  +                    if (b == "drag_canvas") {
                                                  +                        this.destroy();
                                                  +                        this.canvasDraggable()
                                                  +                    } else {
                                                  +                        if (b == "changing_curve") {
                                                  +                            this.destroy()
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        },
                                                  +        resetState: function() {
                                                  +            this.state = null;
                                                  +            $("#canvas_container").css("cursor", "default")
                                                  +        },
                                                  +        shapeSelectable: function(d) {
                                                  +            var c = $("#designer_canvas");
                                                  +            c.bind("mousedown.select",
                                                  +                function(b) {
                                                  +                    Designer.op.changeState("seelcting_shapes");
                                                  +                    var a = d.id;
                                                  +                    var f = [];
                                                  +                    if (b.ctrlKey) {
                                                  +                        var f = Utils.getSelectedIds();
                                                  +                        if (Utils.isSelected(a)) {
                                                  +                            Utils.removeFromArray(f, a)
                                                  +                        } else {
                                                  +                            f.push(a)
                                                  +                        }
                                                  +                        Utils.unselect();
                                                  +                        if (f.length > 0) {
                                                  +                            Utils.selectShape(f)
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (Utils.selectIds.indexOf(a) < 0) {
                                                  +                            Utils.unselect();
                                                  +                            Utils.selectShape(a)
                                                  +                        }
                                                  +                    }
                                                  +                    $(document).bind("mouseup.select",
                                                  +                        function() {
                                                  +                            Designer.op.resetState();
                                                  +                            c.unbind("mousedown.select");
                                                  +                            $(document).unbind("mouseup.select")
                                                  +                        })
                                                  +                })
                                                  +        },
                                                  +        shapeDraggable: function() {
                                                  +            var c = $("#designer_canvas");
                                                  +            var d = $("#canvas_container");
                                                  +            c.bind("mousedown.drag",
                                                  +                function(b) {
                                                  +                    Utils.hideLinkerCursor();
                                                  +                    Utils.hideLinkerControls();
                                                  +                    Designer.op.changeState("dragging");
                                                  +                    var x = Utils.getRelativePos(b.pageX, b.pageY, c);
                                                  +                    var u = Utils.getSelected();
                                                  +                    var w = true;
                                                  +                    if (u.length == 1 && u[0].name == "linker") {
                                                  +                        w = false
                                                  +                    }
                                                  +                    var z = null;
                                                  +                    if (w) {
                                                  +                        z = Utils.getShapesBounding(u)
                                                  +                    }
                                                  +                    var i = Utils.getFamilyShapes(u);
                                                  +                    u = u.concat(i);
                                                  +                    var r = Utils.getContainedShapes(u);
                                                  +                    u = u.concat(r);
                                                  +                    var s = Utils.getAttachedShapes(u);
                                                  +                    u = u.concat(s);
                                                  +                    var y = [];
                                                  +                    if (w) {
                                                  +                        for (var t = 0; t < u.length; t++) {
                                                  +                            var q = u[t];
                                                  +                            if (q == undefined) {
                                                  +                                continue
                                                  +                            }
                                                  +                            if (q.name == "linker") {
                                                  +                                if (q.from.id && y.indexOf(q.from.id) < 0) {
                                                  +                                    y.push(q.from.id)
                                                  +                                }
                                                  +                                if (q.to.id && y.indexOf(q.to.id) < 0) {
                                                  +                                    y.push(q.to.id)
                                                  +                                }
                                                  +                            }
                                                  +                            if (y.indexOf(q.id) < 0) {
                                                  +                                y.push(q.id)
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    var v = u;
                                                  +                    var a = Utils.getOutlinkers(u);
                                                  +                    u = u.concat(a);
                                                  +                    d.bind("mousemove.drag",
                                                  +                        function(j) {
                                                  +                            $("#link_spot").hide();
                                                  +                            var f = Utils.getRelativePos(j.pageX, j.pageY, c);
                                                  +                            var g = {
                                                  +                                x: f.x - x.x,
                                                  +                                y: f.y - x.y
                                                  +                            };
                                                  +                            if (w) {
                                                  +                                var e = Utils.copy(z);
                                                  +                                e.x += g.x;
                                                  +                                e.y += g.y;
                                                  +                                var h = Designer.op.snapLine(e, y);
                                                  +                                g = {
                                                  +                                    x: e.x - z.x,
                                                  +                                    y: e.y - z.y
                                                  +                                };
                                                  +                                f = {
                                                  +                                    x: x.x + g.x,
                                                  +                                    y: x.y + g.y
                                                  +                                };
                                                  +                                z.x += g.x;
                                                  +                                z.y += g.y;
                                                  +                                if (v.length == 1 && v[0].groupName == "boundaryEvent") {
                                                  +                                    if (h.attach) {
                                                  +                                        v[0].attachTo = h.attach.id
                                                  +                                    } else {
                                                  +                                        delete u[0].attachTo
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                            if (g.x == 0 && g.y == 0) {
                                                  +                                return
                                                  +                            }
                                                  +                            Designer.op.moveShape(u, g);
                                                  +                            x = f;
                                                  +                            $(document).unbind("mouseup.drop").bind("mouseup.drop",
                                                  +                                function() {
                                                  +                                    Model.updateMulti(u);
                                                  +                                    $(document).unbind("mouseup.drop")
                                                  +                                })
                                                  +                        });
                                                  +                    $(document).bind("mouseup.drag",
                                                  +                        function() {
                                                  +                            Designer.op.resetState();
                                                  +                            d.unbind("mousemove.drag");
                                                  +                            c.unbind("mousedown.drag");
                                                  +                            $(document).unbind("mouseup.drag");
                                                  +                            Designer.op.hideTip();
                                                  +                            Designer.op.hideSnapLine();
                                                  +                            Utils.showLinkerCursor();
                                                  +                            Utils.showLinkerControls();
                                                  +                            if (isAutoSave == "0") {
                                                  +                                $("#saving_tip").css("color", "rgb(255, 0, 0)");
                                                  +                                $("#saving_tip").text("文件已修改,未保存");
                                                  +                            }
                                                  +                        })
                                                  +                })
                                                  +        },
                                                  +        shapeResizable: function() {
                                                  +            $(".shape_controller").bind("mousedown",
                                                  +                function(ab) {
                                                  +                    if (!isAdmin && isCustomDefine == "1") {
                                                  +                        var ae = Utils.getSelected();
                                                  +                        var P = true;
                                                  +                        for (var p = 0; p < ae.length; p++) {
                                                  +                            var V = ae[p].name;
                                                  +                            var i = Schema.shapes[V];
                                                  +                            if (i.resizeable == "0") {
                                                  +                                return
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    Utils.hideLinkerCursor();
                                                  +                    if ($("#shape_text_edit").length) {
                                                  +                        $("#shape_text_edit").trigger("blur")
                                                  +                    }
                                                  +                    var S = $("#canvas_container");
                                                  +                    var Y = $("#designer_canvas");
                                                  +                    ab.stopPropagation();
                                                  +                    var D = Utils.getRelativePos(ab.pageX, ab.pageY, Y);
                                                  +                    var Q = $(this);
                                                  +                    Designer.op.changeState("resizing");
                                                  +                    var U = Utils.getSelectedIds();
                                                  +                    var K = Utils.getSelected();
                                                  +                    var M;
                                                  +                    if (U.length == 1) {
                                                  +                        var aa = Model.getShapeById(U[0]);
                                                  +                        M = Utils.copy(aa.props)
                                                  +                    } else {
                                                  +                        M = Utils.getControlBox(U);
                                                  +                        M.angle = 0
                                                  +                    }
                                                  +                    var C = {
                                                  +                        x: M.x + M.w / 2,
                                                  +                        y: M.y + M.h / 2
                                                  +                    };
                                                  +                    var N = Q.attr("resizeDir");
                                                  +                    var E = {};
                                                  +                    if (N.indexOf("l") >= 0) {
                                                  +                        E.x = M.x + M.w
                                                  +                    } else {
                                                  +                        if (N.indexOf("r") >= 0) {
                                                  +                            E.x = M.x
                                                  +                        } else {
                                                  +                            E.x = M.x + M.w / 2
                                                  +                        }
                                                  +                    }
                                                  +                    if (N.indexOf("t") >= 0) {
                                                  +                        E.y = M.y + M.h
                                                  +                    } else {
                                                  +                        if (N.indexOf("b") >= 0) {
                                                  +                            E.y = M.y
                                                  +                        } else {
                                                  +                            E.y = M.y + M.h / 2
                                                  +                        }
                                                  +                    }
                                                  +                    E = Utils.getRotated(C, E, M.angle);
                                                  +                    function G(a, b) {
                                                  +                        if (a.id == null) {
                                                  +                            if (b) {
                                                  +                                return {
                                                  +                                    type: "box",
                                                  +                                    x: (a.x - M.x) / M.w,
                                                  +                                    y: (a.y - M.y) / M.h
                                                  +                                }
                                                  +                            } else {
                                                  +                                return {
                                                  +                                    type: "fixed"
                                                  +                                }
                                                  +                            }
                                                  +                        } else {
                                                  +                            if (Utils.isSelected(a.id)) {
                                                  +                                var e = Model.getShapeById(a.id);
                                                  +                                var d = {
                                                  +                                    x: e.props.x + e.props.w / 2,
                                                  +                                    y: e.props.y + e.props.h / 2
                                                  +                                };
                                                  +                                var c = Utils.getRotated(d, a, -e.props.angle);
                                                  +                                return {
                                                  +                                    type: "shape",
                                                  +                                    x: (c.x - e.props.x) / e.props.w,
                                                  +                                    y: (c.y - e.props.y) / e.props.h
                                                  +                                }
                                                  +                            } else {
                                                  +                                return {
                                                  +                                    type: "fixed"
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    var W = [];
                                                  +                    var ac = {};
                                                  +                    var Z = [];
                                                  +                    var L = Utils.getAttachedShapes(K);
                                                  +                    K = K.concat(L);
                                                  +                    var J = [];
                                                  +                    for (var H = 0; H < K.length; H++) {
                                                  +                        var aa = K[H];
                                                  +                        J.push(aa.id);
                                                  +                        if (aa.parent) {
                                                  +                            J.push(aa.parent)
                                                  +                        }
                                                  +                        if (aa.name == "linker") {
                                                  +                            if (Z.indexOf(aa.id) == -1) {
                                                  +                                Z.push(aa.id)
                                                  +                            }
                                                  +                        } else {
                                                  +                            W.push(aa);
                                                  +                            if (aa.attachTo && !Utils.isSelected(aa.id)) {
                                                  +                                ac[aa.id] = {
                                                  +                                    type: "attached",
                                                  +                                    x: (aa.props.x + aa.props.w / 2 - M.x) / M.w,
                                                  +                                    y: (aa.props.y + aa.props.h / 2 - M.y) / M.h
                                                  +                                }
                                                  +                            } else {
                                                  +                                ac[aa.id] = {
                                                  +                                    x: (aa.props.x - M.x) / M.w,
                                                  +                                    y: (aa.props.y - M.y) / M.h,
                                                  +                                    w: aa.props.w / M.w,
                                                  +                                    h: aa.props.h / M.h
                                                  +                                }
                                                  +                            }
                                                  +                            var I = Model.getShapeLinkers(aa.id);
                                                  +                            if (I && I.length > 0) {
                                                  +                                for (var T = 0; T < I.length; T++) {
                                                  +                                    var O = I[T];
                                                  +                                    if (Z.indexOf(O) == -1) {
                                                  +                                        Z.push(O)
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    for (var H = 0; H < Z.length; H++) {
                                                  +                        var O = Z[H];
                                                  +                        var R = Model.getShapeById(O);
                                                  +                        W.push(R);
                                                  +                        var K = Utils.isSelected(O);
                                                  +                        ac[R.id] = {
                                                  +                            from: G(R.from, K),
                                                  +                            to: G(R.to, K)
                                                  +                        }
                                                  +                    }
                                                  +                    var X = Q.css("cursor");
                                                  +                    S.css("cursor", X);
                                                  +                    var F = [];
                                                  +                    var ad = {
                                                  +                        w: 20,
                                                  +                        h: 20
                                                  +                    };
                                                  +                    Designer.events.push("beforeResize", {
                                                  +                        minSize: ad,
                                                  +                        shapes: W,
                                                  +                        dir: N
                                                  +                    });
                                                  +                    S.bind("mousemove.resize",
                                                  +                        function(a) {
                                                  +                            F = [];
                                                  +                            var t = Utils.getRelativePos(a.pageX, a.pageY, Y);
                                                  +                            t = Utils.restoreScale(t);
                                                  +                            var k = Utils.getRotated(E, t, -M.angle);
                                                  +                            var w = Utils.copy(M);
                                                  +                            if (N.indexOf("r") >= 0) {
                                                  +                                w.w = k.x - E.x
                                                  +                            } else {
                                                  +                                if (N.indexOf("l") >= 0) {
                                                  +                                    w.w = E.x - k.x
                                                  +                                }
                                                  +                            }
                                                  +                            if (N.indexOf("b") >= 0) {
                                                  +                                w.h = k.y - E.y
                                                  +                            } else {
                                                  +                                if (N.indexOf("t") >= 0) {
                                                  +                                    w.h = E.y - k.y
                                                  +                                }
                                                  +                            }
                                                  +                            if (a.ctrlKey && N.length == 2) {
                                                  +                                if (M.w >= M.h) {
                                                  +                                    w.h = M.h / M.w * w.w;
                                                  +                                    if (w.h < ad.h) {
                                                  +                                        w.h = ad.h;
                                                  +                                        w.w = M.w / M.h * w.h
                                                  +                                    }
                                                  +                                } else {
                                                  +                                    w.w = M.w / M.h * w.h;
                                                  +                                    if (w.w < ad.w) {
                                                  +                                        w.w = ad.w;
                                                  +                                        w.h = M.h / M.w * w.w
                                                  +                                    }
                                                  +                                }
                                                  +                            } else {
                                                  +                                if (w.w < ad.w) {
                                                  +                                    w.w = ad.w
                                                  +                                }
                                                  +                                if (w.h < ad.h) {
                                                  +                                    w.h = ad.h
                                                  +                                }
                                                  +                            }
                                                  +                            var d = {};
                                                  +                            if (N.indexOf("r") >= 0) {
                                                  +                                d.x = E.x + w.w
                                                  +                            } else {
                                                  +                                if (N.indexOf("l") >= 0) {
                                                  +                                    d.x = E.x - w.w
                                                  +                                } else {
                                                  +                                    d.x = E.x
                                                  +                                }
                                                  +                            }
                                                  +                            if (N.indexOf("b") >= 0) {
                                                  +                                d.y = E.y + w.h
                                                  +                            } else {
                                                  +                                if (N.indexOf("t") >= 0) {
                                                  +                                    d.y = E.y - w.h
                                                  +                                } else {
                                                  +                                    d.y = E.y
                                                  +                                }
                                                  +                            }
                                                  +                            var o = Utils.getRotated(E, d, M.angle);
                                                  +                            var m = {
                                                  +                                x: 0.5 * E.x + 0.5 * o.x,
                                                  +                                y: 0.5 * E.y + 0.5 * o.y
                                                  +                            };
                                                  +                            var f = Utils.getRotated(m, E, -M.angle);
                                                  +                            if (N.indexOf("r") >= 0) {
                                                  +                                w.x = f.x
                                                  +                            } else {
                                                  +                                if (N.indexOf("l") >= 0) {
                                                  +                                    w.x = f.x - w.w
                                                  +                                } else {
                                                  +                                    w.x = f.x - w.w / 2
                                                  +                                }
                                                  +                            }
                                                  +                            if (N.indexOf("b") >= 0) {
                                                  +                                w.y = f.y
                                                  +                            } else {
                                                  +                                if (N.indexOf("t") >= 0) {
                                                  +                                    w.y = f.y - w.h
                                                  +                                } else {
                                                  +                                    w.y = f.y - w.h / 2
                                                  +                                }
                                                  +                            }
                                                  +                            if (w.angle == 0) {
                                                  +                                var y = W[0];
                                                  +                                var h = Designer.op.snapResizeLine(w, J, N)
                                                  +                            }
                                                  +                            Utils.removeAnchors();
                                                  +                            for (var e = 0; e < W.length; e++) {
                                                  +                                var u = W[e];
                                                  +                                var j = ac[u.id];
                                                  +                                if (u.name == "linker") {
                                                  +                                    if (j.from.type == "box") {
                                                  +                                        u.from.x = w.x + w.w * j.from.x;
                                                  +                                        u.from.y = w.y + w.h * j.from.y
                                                  +                                    } else {
                                                  +                                        if (j.from.type == "shape") {
                                                  +                                            var c = Model.getShapeById(u.from.id);
                                                  +                                            var g = {
                                                  +                                                x: c.props.x + c.props.w * j.from.x,
                                                  +                                                y: c.props.y + c.props.h * j.from.y
                                                  +                                            };
                                                  +                                            var b = {
                                                  +                                                x: c.props.x + c.props.w / 2,
                                                  +                                                y: c.props.y + c.props.h / 2
                                                  +                                            };
                                                  +                                            var s = Utils.getRotated(b, g, c.props.angle);
                                                  +                                            u.from.x = s.x;
                                                  +                                            u.from.y = s.y
                                                  +                                        }
                                                  +                                    }
                                                  +                                    if (j.to.type == "box") {
                                                  +                                        u.to.x = w.x + w.w * j.to.x;
                                                  +                                        u.to.y = w.y + w.h * j.to.y
                                                  +                                    } else {
                                                  +                                        if (j.to.type == "shape") {
                                                  +                                            var c = Model.getShapeById(u.to.id);
                                                  +                                            var g = {
                                                  +                                                x: c.props.x + c.props.w * j.to.x,
                                                  +                                                y: c.props.y + c.props.h * j.to.y
                                                  +                                            };
                                                  +                                            var b = {
                                                  +                                                x: c.props.x + c.props.w / 2,
                                                  +                                                y: c.props.y + c.props.h / 2
                                                  +                                            };
                                                  +                                            var s = Utils.getRotated(b, g, c.props.angle);
                                                  +                                            u.to.x = s.x;
                                                  +                                            u.to.y = s.y
                                                  +                                        }
                                                  +                                    }
                                                  +                                    Designer.painter.renderLinker(u, true)
                                                  +                                } else {
                                                  +                                    if (j.type == "attached") {
                                                  +                                        u.props.x = w.x + w.w * j.x - u.props.w / 2;
                                                  +                                        u.props.y = w.y + w.h * j.y - u.props.h / 2
                                                  +                                    } else {
                                                  +                                        var x = Utils.copy(u.props);
                                                  +                                        u.props.x = w.x + w.w * j.x;
                                                  +                                        u.props.y = w.y + w.h * j.y;
                                                  +                                        u.props.w = w.w * j.w;
                                                  +                                        u.props.h = w.h * j.h;
                                                  +                                        var v = Model.getShapeById(u.id).props;
                                                  +                                        v.x = w.x + w.w * j.x;
                                                  +                                        v.y = w.y + w.h * j.y;
                                                  +                                        v.w = w.w * j.w;
                                                  +                                        v.h = w.h * j.h;
                                                  +                                        var q = {
                                                  +                                            x: u.props.x - x.x,
                                                  +                                            y: u.props.y - x.y,
                                                  +                                            w: u.props.w - x.w,
                                                  +                                            h: u.props.h - x.h
                                                  +                                        };
                                                  +                                        var l = {
                                                  +                                            shape: u,
                                                  +                                            offset: q,
                                                  +                                            dir: N
                                                  +                                        };
                                                  +                                        var n = Designer.events.push("resizing", l);
                                                  +                                        if (n) {
                                                  +                                            F = F.concat(n)
                                                  +                                        }
                                                  +                                    }
                                                  +                                    Designer.painter.renderShape(u);
                                                  +                                    Utils.showAnchors(u)
                                                  +                                }
                                                  +                            }
                                                  +                            Designer.painter.drawControls(U);
                                                  +                            var r = "W: " + Math.round(w.w) + "&nbsp;&nbsp;H: " + Math.round(w.h);
                                                  +                            if (w.x != M.x) {
                                                  +                                r = "X: " + Math.round(w.x) + "&nbsp;&nbsp;Y: " + Math.round(w.y) + "<br/>" + r
                                                  +                            }
                                                  +                            Designer.op.showTip(r);
                                                  +                            $(document).unbind("mouseup.resize_ok").bind("mouseup.resize_ok",
                                                  +                                function() {
                                                  +                                    if (F.length > 0) {
                                                  +                                        W = W.concat(F)
                                                  +                                    }
                                                  +                                    Model.updateMulti(W);
                                                  +                                    $(document).unbind("mouseup.resize_ok")
                                                  +                                })
                                                  +                        });
                                                  +                    $(document).bind("mouseup.resize",
                                                  +                        function() {
                                                  +                            S.css("cursor", "default");
                                                  +                            Designer.op.resetState();
                                                  +                            S.unbind("mousemove.resize");
                                                  +                            $(document).unbind("mouseup.resize");
                                                  +                            Designer.op.hideTip();
                                                  +                            Utils.showLinkerCursor();
                                                  +                            Designer.op.hideSnapLine()
                                                  +                        })
                                                  +                })
                                                  +        },
                                                  +        shapeRotatable: function() {
                                                  +            $(".shape_rotater").bind("mousemove",
                                                  +                function(i) {
                                                  +                    var j = $(this);
                                                  +                    var g = i.pageX - j.offset().left;
                                                  +                    var h = i.pageY - j.offset().top;
                                                  +                    var e = j[0].getContext("2d");
                                                  +                    j.unbind("mousedown");
                                                  +                    j.removeClass("rotate_enable");
                                                  +                    if (e.isPointInPath(g, h)) {
                                                  +                        j.addClass("rotate_enable");
                                                  +                        j.bind("mousedown",
                                                  +                            function(b) {
                                                  +                                Utils.hideLinkerCursor();
                                                  +                                if ($("#shape_text_edit").length) {
                                                  +                                    $("#shape_text_edit").trigger("blur")
                                                  +                                }
                                                  +                                b.stopPropagation();
                                                  +                                Designer.op.changeState("rotating");
                                                  +                                var r = Utils.getSelectedIds();
                                                  +                                var c;
                                                  +                                var s;
                                                  +                                if (r.length == 1) {
                                                  +                                    var f = Model.getShapeById(r[0]);
                                                  +                                    c = f.props;
                                                  +                                    s = f.props.angle
                                                  +                                } else {
                                                  +                                    c = Utils.getControlBox(r);
                                                  +                                    s = 0
                                                  +                                }
                                                  +                                var x = {
                                                  +                                    x: c.x + c.w / 2,
                                                  +                                    y: c.y + c.h / 2
                                                  +                                };
                                                  +                                var d = Utils.toScale(x);
                                                  +                                var w = $("#designer_canvas");
                                                  +                                var u = Utils.getSelected();
                                                  +                                var t = Utils.getAttachedShapes(u);
                                                  +                                u = u.concat(t);
                                                  +                                var a = Utils.getOutlinkers(u);
                                                  +                                u = u.concat(a);
                                                  +                                var v = s;
                                                  +                                $(document).bind("mousemove.rotate",
                                                  +                                    function(l) {
                                                  +                                        var m = Utils.getRelativePos(l.pageX, l.pageY, w);
                                                  +                                        var H = Math.atan(Math.abs(m.x - d.x) / Math.abs(d.y - m.y));
                                                  +                                        if (m.x >= d.x && m.y >= d.y) {
                                                  +                                            H = Math.PI - H
                                                  +                                        } else {
                                                  +                                            if (m.x <= d.x && m.y >= d.y) {
                                                  +                                                H = Math.PI + H
                                                  +                                            } else {
                                                  +                                                if (m.x <= d.x && m.y <= d.y) {
                                                  +                                                    H = Math.PI * 2 - H
                                                  +                                                }
                                                  +                                            }
                                                  +                                        }
                                                  +                                        H = H % (Math.PI * 2);
                                                  +                                        var k = Math.PI / 36;
                                                  +                                        var o = Math.round(H / k);
                                                  +                                        H = k * o;
                                                  +                                        if (H == v) {
                                                  +                                            return
                                                  +                                        }
                                                  +                                        v = H;
                                                  +                                        Designer.op.showTip(o * 5 % 360 + "°");
                                                  +                                        Designer.painter.rotateControls(c, H);
                                                  +                                        Utils.removeAnchors();
                                                  +                                        var L = H - s;
                                                  +                                        for (var G = 0; G < u.length; G++) {
                                                  +                                            var q = u[G];
                                                  +                                            var I = Model.getPersistenceById(q.id);
                                                  +                                            if (q.name != "linker") {
                                                  +                                                q.props.angle = Math.abs((L + I.props.angle) % (Math.PI * 2));
                                                  +                                                var F = {
                                                  +                                                    x: I.props.x + I.props.w / 2,
                                                  +                                                    y: I.props.y + I.props.h / 2
                                                  +                                                };
                                                  +                                                var n = Utils.getRotated(x, F, L);
                                                  +                                                q.props.x = n.x - q.props.w / 2;
                                                  +                                                q.props.y = n.y - q.props.h / 2;
                                                  +                                                Designer.painter.renderShape(q);
                                                  +                                                Utils.showAnchors(q)
                                                  +                                            } else {
                                                  +                                                var p = false;
                                                  +                                                if ((Utils.isSelected(q.id) && q.from.id == null) || Utils.isSelected(q.from.id)) {
                                                  +                                                    var K = Utils.getRotated(x, I.from, L);
                                                  +                                                    q.from.x = K.x;
                                                  +                                                    q.from.y = K.y;
                                                  +                                                    if (q.from.angle != null) {
                                                  +                                                        q.from.angle = Math.abs((I.from.angle + L) % (Math.PI * 2))
                                                  +                                                    }
                                                  +                                                    p = true
                                                  +                                                }
                                                  +                                                var J = false;
                                                  +                                                if ((Utils.isSelected(q.id) && q.to.id == null) || Utils.isSelected(q.to.id)) {
                                                  +                                                    var K = Utils.getRotated(x, I.to, L);
                                                  +                                                    q.to.x = K.x;
                                                  +                                                    q.to.y = K.y;
                                                  +                                                    if (q.to.angle != null) {
                                                  +                                                        q.to.angle = Math.abs((I.to.angle + L) % (Math.PI * 2))
                                                  +                                                    }
                                                  +                                                    J = true
                                                  +                                                }
                                                  +                                                if (p || J) {
                                                  +                                                    Designer.painter.renderLinker(q, true)
                                                  +                                                }
                                                  +                                            }
                                                  +                                        }
                                                  +                                    }).bind("mouseup.rotate",
                                                  +                                    function() {
                                                  +                                        $(document).unbind("mousemove.rotate").unbind("mouseup.rotate");
                                                  +                                        Designer.op.resetState();
                                                  +                                        Model.updateMulti(u);
                                                  +                                        Designer.painter.drawControls(r);
                                                  +                                        Designer.op.hideTip();
                                                  +                                        Utils.showLinkerCursor()
                                                  +                                    })
                                                  +                            })
                                                  +                    } else {
                                                  +                        j.removeClass("rotate_enable");
                                                  +                        j.unbind("mousedown")
                                                  +                    }
                                                  +                })
                                                  +        },
                                                  +        groupShapeChangable: function() {
                                                  +            $(".change_shape_icon").bind("mousedown",
                                                  +                function(l) {
                                                  +                    l.stopPropagation();
                                                  +                    var i = Utils.getSelected()[0];
                                                  +                    var j = i.groupName;
                                                  +                    var m = $(this).parent();
                                                  +                    var k = m.position();
                                                  +                    var n = k.left + m.width();
                                                  +                    var e = k.top + m.height() + 10;
                                                  +                    Designer.op.groupDashboard(j, n, e,
                                                  +                        function(c) {
                                                  +                            if (i.name != c) {
                                                  +                                var b = Designer.events.push("shapeChanged", {
                                                  +                                    shape: i,
                                                  +                                    name: c
                                                  +                                });
                                                  +                                var b1 = Utils.copy(i); //保留源节点信息(AttributesJsonArray)
                                                  +                                var b2 = Utils.copy(i); //重新保留源节点信息(AttributesJsonArray)
                                                  +                                Model.changeShape(i, c); //重画节点后会把节点信息抹去
                                                  +                                //将源节点b2内的AttributesJsonArray加入默认属性,并且替换源节点有值并且为目标节点默认属性的属性。
                                                  +                                for(var x = 0; x < b2.dataAttributes.length; x++) {
                                                  +                                    var b2x = b2.dataAttributes[x];
                                                  +                                    if(b2x.attributesJsonArray) {
                                                  +                                        var attributesJsonArray = b2x.attributesJsonArray.splice(0); //源节点的属性
                                                  +                                        //加入默认属性
                                                  +                                        if (Model.define.localAttribute != undefined && Model.define.localAttribute[c] != undefined && Model.define.localAttribute[c] != null && Model.define.localAttribute[c].length > 0) {
                                                  +                                            for(var b2xi in Model.define.localAttribute[c]) {
                                                  +                                                b2x.attributesJsonArray.push(Utils.copy(Model.define.localAttribute[c][b2xi]));
                                                  +                                            }
                                                  +                                        }
                                                  +                                        //替换源节点有值的属性
                                                  +                                        for(var pj = 0; pj < attributesJsonArray.length; pj++) {
                                                  +                                            var hasValue = ( attributesJsonArray[pj].value || attributesJsonArray[pj].value === false ) && attributesJsonArray[pj].value !==[];
                                                  +                                            if(attributesJsonArray[pj] && attributesJsonArray[pj].id && hasValue) {
                                                  +                                                var flag = false;
                                                  +                                                for(var b2xj = 0; b2xj < b2x.attributesJsonArray.length; b2xj++) {
                                                  +                                                    if(b2x.attributesJsonArray[b2xj] && b2x.attributesJsonArray[b2xj].id == attributesJsonArray[pj].id) {
                                                  +                                                        b2x.attributesJsonArray[b2xj] = attributesJsonArray[pj];
                                                  +                                                        flag = true;
                                                  +                                                        break;
                                                  +                                                    }
                                                  +                                                }
                                                  +                                            }
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                                i.dataAttributes = b2.dataAttributes; //重新加入默认属性并且加入源节点带值的属性
                                                  +                                var a = [i];
                                                  +                                if (b && b.length > 0) {
                                                  +                                    a = a.concat(b)
                                                  +                                }
                                                  +                                Model.updateMulti(a)
                                                  +                            }
                                                  +                        })
                                                  +                })
                                                  +        },
                                                  +        shapeMultiSelectable: function() {
                                                  +            var d = $("#designer_canvas");
                                                  +            var c = $("#designer_layout");
                                                  +            c.unbind("mousedown.multiselect").bind("mousedown.multiselect",
                                                  +                function(a) {
                                                  +                    var b = null;
                                                  +                    if (!a.ctrlKey) {
                                                  +                        Utils.unselect()
                                                  +                    }
                                                  +                    var f = Utils.getRelativePos(a.pageX, a.pageY, d);
                                                  +                    Designer.op.changeState("multi_selecting");
                                                  +                    c.bind("mousemove.multiselect",
                                                  +                        function(i) {
                                                  +                            if (b == null) {
                                                  +                                b = $("<div id='selecting_box'></div>").appendTo(d)
                                                  +                            }
                                                  +                            var j = Utils.getRelativePos(i.pageX, i.pageY, d);
                                                  +                            var e = {
                                                  +                                "z-index": Model.orderList.length,
                                                  +                                left: j.x,
                                                  +                                top: j.y
                                                  +                            };
                                                  +                            if (j.x > f.x) {
                                                  +                                e.left = f.x
                                                  +                            }
                                                  +                            if (j.y > f.y) {
                                                  +                                e.top = f.y
                                                  +                            }
                                                  +                            e.width = Math.abs(j.x - f.x);
                                                  +                            e.height = Math.abs(j.y - f.y);
                                                  +                            b.css(e)
                                                  +                        });
                                                  +                    $(document).unbind("mouseup.multiselect").bind("mouseup.multiselect",
                                                  +                        function(j) {
                                                  +                            if (b != null) {
                                                  +                                var l = {
                                                  +                                    x: b.position().left.restoreScale(),
                                                  +                                    y: b.position().top.restoreScale(),
                                                  +                                    w: b.width().restoreScale(),
                                                  +                                    h: b.height().restoreScale()
                                                  +                                };
                                                  +                                var e = Utils.getShapesByRange(l);
                                                  +                                if (j.ctrlKey) {
                                                  +                                    var k = Utils.getSelectedIds();
                                                  +                                    Utils.mergeArray(e, k)
                                                  +                                }
                                                  +                                Utils.unselect();
                                                  +                                Utils.selectShape(e);
                                                  +                                b.remove()
                                                  +                            }
                                                  +                            Designer.op.resetState();
                                                  +                            $(document).unbind("mouseup.multiselect");
                                                  +                            c.unbind("mousemove.multiselect")
                                                  +                        });
                                                  +                    c.unbind("mousedown.multiselect")
                                                  +                })
                                                  +        },
                                                  +        shapeEditable: function(d) {
                                                  +            var c = $("#designer_canvas");
                                                  +            if (d.attribute.editable == false) {
                                                  +                return
                                                  +            }
                                                  +            c.unbind("dblclick.edit").bind("dblclick.edit",
                                                  +                function() {
                                                  +                    Designer.op.editShapeText(d);
                                                  +                    c.unbind("dblclick.edit")
                                                  +                })
                                                  +        },
                                                  +        editShapeText: function(o) {
                                                  +            if (o.name == "linker") {
                                                  +                this.editLinkerText(o);
                                                  +                return
                                                  +            }
                                                  +            var j = $("#shape_text_edit");
                                                  +            if (j.length == 0) {
                                                  +                j = $("<textarea id='shape_text_edit'></textarea>").appendTo("#designer_canvas")
                                                  +            }
                                                  +            var k = $("#shape_text_ruler");
                                                  +            if (k.length == 0) {
                                                  +                k = $("<textarea id='shape_text_ruler'></textarea>").appendTo("#designer_canvas")
                                                  +            }
                                                  +            $(".text_canvas[forshape=" + o.id + "]").hide();
                                                  +            var l = o.fontStyle;
                                                  +            var p = o.getTextBlock();
                                                  +            if (l.orientation == "horizontal") {
                                                  +                var m = {
                                                  +                    x: p.x + p.w / 2,
                                                  +                    y: p.y + p.h / 2
                                                  +                };
                                                  +                p = {
                                                  +                    x: m.x - p.h / 2,
                                                  +                    y: m.y - p.w / 2,
                                                  +                    w: p.h,
                                                  +                    h: p.w
                                                  +                }
                                                  +            }
                                                  +            var n = {
                                                  +                width: p.w + "px",
                                                  +                "z-index": Model.orderList.length + 2,
                                                  +                "line-height": Math.round(l.size * 1.25) + "px",
                                                  +                "font-size": l.size + "px",
                                                  +                "font-family": l.fontFamily,
                                                  +                "font-weight": l.bold ? "bold": "normal",
                                                  +                "font-style": l.italic ? "italic": "normal",
                                                  +                "text-align": l.textAlign,
                                                  +                color: "rgb(" + l.color + ")",
                                                  +                "text-decoration": l.underline ? "underline": "none"
                                                  +            };
                                                  +            j.css(n);
                                                  +            k.css(n);
                                                  +            j.show();
                                                  +            p.x += o.props.x;
                                                  +            p.y += o.props.y;
                                                  +            j.val(o.text);
                                                  +            $("#shape_text_edit").unbind().bind("keyup",
                                                  +                function() {
                                                  +                    var a = $(this).val();
                                                  +                    k.val(a);
                                                  +                    k.scrollTop(99999);
                                                  +                    var h = k.scrollTop();
                                                  +                    j.css({
                                                  +                        height: h
                                                  +                    });
                                                  +                    var g = {
                                                  +                        x: p.x + p.w / 2,
                                                  +                        y: p.y + p.h / 2
                                                  +                    };
                                                  +                    var f = 0;
                                                  +                    var d = 0;
                                                  +                    var w = p.h;
                                                  +                    if (o.fontStyle.vAlign == "middle") {
                                                  +                        if (h > w) {
                                                  +                            w = h;
                                                  +                            f = (g.y - w / 2);
                                                  +                            d = 0
                                                  +                        } else {
                                                  +                            f = (g.y - p.h / 2);
                                                  +                            d = (p.h - h) / 2;
                                                  +                            w = p.h - d
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (o.fontStyle.vAlign == "bottom") {
                                                  +                            if (h > w) {
                                                  +                                w = h;
                                                  +                                f = (g.y + p.h / 2 - w);
                                                  +                                d = 0
                                                  +                            } else {
                                                  +                                f = (g.y - p.h / 2);
                                                  +                                d = p.h - h;
                                                  +                                w = p.h - d
                                                  +                            }
                                                  +                        } else {
                                                  +                            f = (g.y - p.h / 2);
                                                  +                            d = 0;
                                                  +                            if (h > w) {
                                                  +                                w = h
                                                  +                            } else {
                                                  +                                w = p.h
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    var x = d + w;
                                                  +                    var b = {
                                                  +                        x: p.x + p.w / 2,
                                                  +                        y: f + x / 2
                                                  +                    };
                                                  +                    var c = o.props.angle;
                                                  +                    if (c != 0) {
                                                  +                        var v = {
                                                  +                            x: o.props.x + o.props.w / 2,
                                                  +                            y: o.props.y + o.props.h / 2
                                                  +                        };
                                                  +                        b = Utils.getRotated(v, b, c)
                                                  +                    }
                                                  +                    if (l.orientation == "horizontal") {
                                                  +                        c = (Math.PI * 1.5 + c) % (Math.PI * 2)
                                                  +                    }
                                                  +                    var u = Math.round(c / (Math.PI * 2) * 360);
                                                  +                    var e = "rotate(" + u + "deg) scale(" + Designer.config.scale + ")";
                                                  +                    j.css({
                                                  +                        width: p.w,
                                                  +                        height: w,
                                                  +                        "padding-top": d,
                                                  +                        left: b.x.toScale() - p.w / 2 - 2,
                                                  +                        top: b.y.toScale() - x / 2 - 2,
                                                  +                        "-webkit-transform": e,
                                                  +                        "-ms-transform": e,
                                                  +                        "-o-transform": e,
                                                  +                        "-moz-transform": e,
                                                  +                        transform: e
                                                  +                    })
                                                  +                }).bind("keydown",
                                                  +                function(a) {
                                                  +                    var d = $(this);
                                                  +                    if (a.keyCode == 13 && a.ctrlKey) {
                                                  +                        i();
                                                  +                        return false
                                                  +                    } else {
                                                  +                        if (a.keyCode == 27) {
                                                  +                            d.unbind().remove();
                                                  +                            $(".text_canvas[forshape=" + o.id + "]").show()
                                                  +                        } else {
                                                  +                            if (a.keyCode == 66 && a.ctrlKey) {
                                                  +                                var c = !o.fontStyle.bold;
                                                  +                                o.fontStyle.bold = c;
                                                  +                                Model.update(o);
                                                  +                                var b = c ? "bold": "normal";
                                                  +                                $(this).css("font-weight", b);
                                                  +                                k.css("font-weight", b);
                                                  +                                UI.update()
                                                  +                            } else {
                                                  +                                if (a.keyCode == 73 && a.ctrlKey) {
                                                  +                                    var c = !o.fontStyle.italic;
                                                  +                                    o.fontStyle.italic = c;
                                                  +                                    Model.update(o);
                                                  +                                    var b = c ? "italic": "normal";
                                                  +                                    $(this).css("font-style", b);
                                                  +                                    k.css("font-style", b);
                                                  +                                    UI.update()
                                                  +                                } else {
                                                  +                                    if (a.keyCode == 85 && a.ctrlKey) {
                                                  +                                        var c = !o.fontStyle.underline;
                                                  +                                        o.fontStyle.underline = c;
                                                  +                                        Model.update(o);
                                                  +                                        var b = c ? "underline": "none";
                                                  +                                        $(this).css("text-decoration", b);
                                                  +                                        k.css("text-decoration", b);
                                                  +                                        a.preventDefault();
                                                  +                                        UI.update()
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }).bind("blur",
                                                  +                function(a) {
                                                  +                    i()
                                                  +                }).bind("mousemove",
                                                  +                function(a) {
                                                  +                    a.stopPropagation()
                                                  +                }).bind("mousedown",
                                                  +                function(a) {
                                                  +                    a.stopPropagation()
                                                  +                }).bind("mouseenter",
                                                  +                function(a) {
                                                  +                    Designer.op.destroy()
                                                  +                });
                                                  +            $("#shape_text_edit").trigger("keyup");
                                                  +            j.select();
                                                  +            function i() {
                                                  +                var a = $("#shape_text_edit").val();
                                                  +                if ($("#shape_text_edit").length && $("#shape_text_edit").is(":visible")) {
                                                  +                    if (a != o.text) {
                                                  +                        o.text = a;
                                                  +                        Model.update(o)
                                                  +                    }
                                                  +                    Designer.painter.renderShape(o);
                                                  +                    $("#shape_text_edit").remove()
                                                  +                }
                                                  +            }
                                                  +        },
                                                  +        shapeLinkable: function(j, g) {
                                                  +            var i = $("#designer_canvas");
                                                  +            var f = $("#canvas_container");
                                                  +            f.unbind("mousedown.link").bind("mousedown.link",
                                                  +                function(c) {
                                                  +                    Designer.op.changeState("linking_from_shape");
                                                  +                    var e = null;
                                                  +                    var d = null;
                                                  +                    var a;
                                                  +                    if (!j) {
                                                  +                        var b = Utils.getRelativePos(c.pageX, c.pageY, i);
                                                  +                        a = {
                                                  +                            x: b.x.restoreScale(),
                                                  +                            y: b.y.restoreScale(),
                                                  +                            id: null,
                                                  +                            angle: null
                                                  +                        }
                                                  +                    } else {
                                                  +                        a = g;
                                                  +                        a.id = j.id
                                                  +                    }
                                                  +                    f.bind("mousemove.link",
                                                  +                        function(m) {
                                                  +                            f.css("cursor", "default");
                                                  +                            var n = Utils.getRelativePos(m.pageX, m.pageY, i);
                                                  +                            if (d == null) {
                                                  +                                d = h(a, n);
                                                  +                                Designer.events.push("linkerCreating", d)
                                                  +                            }
                                                  +                            Designer.op.moveLinker(d, "to", n.x, n.y);
                                                  +                            $(document).unbind("mouseup.droplinker").bind("mouseup.droplinker",
                                                  +                                function() {
                                                  +                                    if (Math.abs(n.x - a.x) > 20 || Math.abs(n.y - a.y) > 20) {
                                                  +                                        Model.add(d);
                                                  +                                        Designer.events.push("linkerCreated", d);
                                                  +                                        if (d.to.id == null && d.from.id != null) {
                                                  +                                            Designer.op.linkDashboard(d)
                                                  +                                        }
                                                  +                                        Utils.showLinkerCursor()
                                                  +                                    } else {
                                                  +                                        $("#" + d.id).remove()
                                                  +                                    }
                                                  +                                    $(document).unbind("mouseup.droplinker")
                                                  +                                })
                                                  +                        });
                                                  +                    $(document).bind("mouseup.link",
                                                  +                        function() {
                                                  +                            Designer.op.hideLinkPoint();
                                                  +                            Designer.op.resetState();
                                                  +                            f.unbind("mousedown.link");
                                                  +                            f.unbind("mousemove.link");
                                                  +                            $(document).unbind("mouseup.link")
                                                  +                        })
                                                  +                });
                                                  +            function h(a, b) {
                                                  +                var d = Utils.newId();
                                                  +                var c = Utils.copy(Schema.linkerDefaults);
                                                  +                c.from = a;
                                                  +                c.to = {
                                                  +                    id: null,
                                                  +                    x: b.x,
                                                  +                    y: b.y,
                                                  +                    angle: null
                                                  +                };
                                                  +                c.props = {
                                                  +                    zindex: Model.maxZIndex + 1
                                                  +                };
                                                  +                c.id = d;
                                                  +                return c
                                                  +            }
                                                  +        },
                                                  +        linkerEditable: function(c) {
                                                  +            var d = $("#designer_canvas");
                                                  +            d.unbind("dblclick.edit_linker").bind("dblclick.edit_linker",
                                                  +                function() {
                                                  +                    Designer.op.editLinkerText(c);
                                                  +                    d.unbind("dblclick.edit_linker")
                                                  +                })
                                                  +        },
                                                  +        editLinkerText: function(n) {
                                                  +            Designer.contextMenu.hide();
                                                  +            var o = Designer.painter.getLinkerMidpoint(n);
                                                  +            var k = $("#" + n.id).find(".text_canvas");
                                                  +            var i = $("#linker_text_edit");
                                                  +            if (i.length == 0) {
                                                  +                i = $("<textarea id='linker_text_edit'></textarea>").appendTo("#designer_canvas")
                                                  +            }
                                                  +            $("#" + n.id).find(".text_canvas").hide();
                                                  +            var l = n.fontStyle;
                                                  +            var m = "scale(" + Designer.config.scale + ")";
                                                  +            var j = Math.round(l.size * 1.25);
                                                  +            i.css({
                                                  +                "z-index": Model.orderList.length,
                                                  +                "line-height": j + "px",
                                                  +                "font-size": l.size + "px",
                                                  +                "font-family": l.fontFamily,
                                                  +                "font-weight": l.bold ? "bold": "normal",
                                                  +                "font-style": l.italic ? "italic": "normal",
                                                  +                "text-align": l.textAlign,
                                                  +                color: "rgb(" + l.color + ")",
                                                  +                "text-decoration": l.underline ? "underline": "none",
                                                  +                "-webkit-transform": m,
                                                  +                "-ms-transform": m,
                                                  +                "-o-transform": m,
                                                  +                "-moz-transform": m,
                                                  +                transform: m
                                                  +            });
                                                  +            i.val(n.text).show().select();
                                                  +            i.unbind().bind("keyup",
                                                  +                function() {
                                                  +                    var b = $(this).val();
                                                  +                    var a = b.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\n/g, "<br/>");
                                                  +                    k.html(a + "<br/>");
                                                  +                    var d = k.width();
                                                  +                    if (d < 50) {
                                                  +                        d = 50
                                                  +                    }
                                                  +                    var c = k.height();
                                                  +                    if (c < j) {
                                                  +                        c = j
                                                  +                    }
                                                  +                    i.css({
                                                  +                        left: o.x.toScale() - d / 2 - 2,
                                                  +                        top: o.y.toScale() - c / 2 - 2,
                                                  +                        width: d,
                                                  +                        height: c
                                                  +                    })
                                                  +                }).bind("mousedown",
                                                  +                function(a) {
                                                  +                    a.stopPropagation()
                                                  +                }).bind("keydown",
                                                  +                function(a) {
                                                  +                    if (a.keyCode == 13 && a.ctrlKey) {
                                                  +                        p();
                                                  +                        return false
                                                  +                    } else {
                                                  +                        if (a.keyCode == 27) {
                                                  +                            i.unbind().remove();
                                                  +                            Designer.painter.renderLinkerText(n)
                                                  +                        } else {
                                                  +                            if (a.keyCode == 66 && a.ctrlKey) {
                                                  +                                var c = !n.fontStyle.bold;
                                                  +                                n.fontStyle.bold = c;
                                                  +                                Model.update(n);
                                                  +                                var b = c ? "bold": "normal";
                                                  +                                $(this).css("font-weight", b);
                                                  +                                k.css("font-weight", b);
                                                  +                                UI.update()
                                                  +                            } else {
                                                  +                                if (a.keyCode == 73 && a.ctrlKey) {
                                                  +                                    var c = !n.fontStyle.italic;
                                                  +                                    n.fontStyle.italic = c;
                                                  +                                    Model.update(n);
                                                  +                                    var b = c ? "italic": "normal";
                                                  +                                    $(this).css("font-style", b);
                                                  +                                    k.css("font-style", b);
                                                  +                                    UI.update()
                                                  +                                } else {
                                                  +                                    if (a.keyCode == 85 && a.ctrlKey) {
                                                  +                                        var c = !n.fontStyle.underline;
                                                  +                                        n.fontStyle.underline = c;
                                                  +                                        Model.update(n);
                                                  +                                        var b = c ? "underline": "none";
                                                  +                                        $(this).css("text-decoration", b);
                                                  +                                        k.css("text-decoration", b);
                                                  +                                        a.preventDefault();
                                                  +                                        UI.update()
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }).bind("blur",
                                                  +                function() {
                                                  +                    p()
                                                  +                });
                                                  +            i.trigger("keyup");
                                                  +            function p() {
                                                  +                var b = $("#linker_text_edit");
                                                  +                if (b.length && b.is(":visible")) {
                                                  +                    var a = b.val();
                                                  +                    if (a != n.text) {
                                                  +                        n.text = a;
                                                  +                        Model.update(n)
                                                  +                    }
                                                  +                    Designer.painter.renderLinker(n);
                                                  +                    b.remove()
                                                  +                }
                                                  +            }
                                                  +        },
                                                  +        linkerDraggable: function(g, f) {
                                                  +            var h = $("#designer_canvas");
                                                  +            var e = $("#canvas_container");
                                                  +            h.bind("mousedown.draglinker",
                                                  +                function(b) {
                                                  +                    Utils.hideLinkerControls();
                                                  +                    Designer.op.changeState("dragging_linker");
                                                  +                    var c = Utils.getSelectedIds();
                                                  +                    var a = false;
                                                  +                    if (c.length > 1) {
                                                  +                        a = true
                                                  +                    }
                                                  +                    e.bind("mousemove.draglinker",
                                                  +                        function(d) {
                                                  +                            e.css("cursor", "default");
                                                  +                            var j = Utils.getRelativePos(d.pageX, d.pageY, h);
                                                  +                            Designer.op.moveLinker(g, f, j.x, j.y);
                                                  +                            if (a) {
                                                  +                                Designer.painter.drawControls(c)
                                                  +                            }
                                                  +                            $(document).unbind("mouseup.droplinker").bind("mouseup.droplinker",
                                                  +                                function() {
                                                  +                                    $(document).unbind("mouseup.droplinker");
                                                  +                                    Model.update(g);
                                                  +                                    Utils.showLinkerControls()
                                                  +                                })
                                                  +                        });
                                                  +                    $(document).bind("mouseup.draglinker",
                                                  +                        function() {
                                                  +                            Designer.op.hideLinkPoint();
                                                  +                            Designer.op.resetState();
                                                  +                            h.unbind("mousedown.draglinker");
                                                  +                            e.unbind("mousemove.draglinker");
                                                  +                            $(document).unbind("mouseup.draglinker");
                                                  +                            Utils.showLinkerControls()
                                                  +                        })
                                                  +                })
                                                  +        },
                                                  +        linkClickable: function(e, f) {
                                                  +            var d = $("#link_spot");
                                                  +            if (d.length == 0) {
                                                  +                d = $("<a id='link_spot' target='_blank' onclick='openLink(this);'></a>").appendTo("#designer_canvas")
                                                  +            }
                                                  +            if (e.trim().toLowerCase().indexOf("http") == -1) {
                                                  +                e = "http://" + e
                                                  +            }
                                                  +            d.show().css({
                                                  +                left: f.x - 50,
                                                  +                top: f.y - 50,
                                                  +                "z-index": Model.orderList.length + 1
                                                  +            })
                                                  +        },
                                                  +        textCreatable: function() {
                                                  +            var c = $("#designer_canvas");
                                                  +            var d = $("#canvas_container");
                                                  +            d.unbind("mousedown.create_text").bind("mousedown.create_text",
                                                  +                function(a) {
                                                  +                    var g = null;
                                                  +                    if (!a.ctrlKey) {
                                                  +                        Utils.unselect()
                                                  +                    }
                                                  +                    var h = Utils.getRelativePos(a.pageX, a.pageY, c);
                                                  +                    var b = null;
                                                  +                    d.bind("mousemove.create_text",
                                                  +                        function(f) {
                                                  +                            if (g == null) {
                                                  +                                g = $("<div id='texting_box'></div>").appendTo(c)
                                                  +                            }
                                                  +                            var e = Utils.getRelativePos(f.pageX, f.pageY, c);
                                                  +                            b = {
                                                  +                                "z-index": Model.orderList.length,
                                                  +                                left: e.x - 1,
                                                  +                                top: e.y - 1
                                                  +                            };
                                                  +                            if (e.x > h.x) {
                                                  +                                b.left = h.x - 1
                                                  +                            }
                                                  +                            if (e.y > h.y) {
                                                  +                                b.top = h.y - 1
                                                  +                            }
                                                  +                            b.width = Math.abs(e.x - h.x - 2);
                                                  +                            b.height = Math.abs(e.y - h.y - 2);
                                                  +                            g.css(b)
                                                  +                        });
                                                  +                    $(document).unbind("mouseup.create_text").bind("mouseup.create_text",
                                                  +                        function(e) {
                                                  +                            if (b != null && b.width >= 20 && b.height >= 20) {
                                                  +                                var f = Model.create("standardText", b.left.restoreScale(), b.top.restoreScale());
                                                  +                                f.props.w = b.width.restoreScale();
                                                  +                                f.props.h = b.height.restoreScale();
                                                  +                                Model.add(f);
                                                  +                                Designer.painter.renderShape(f);
                                                  +                                Designer.op.editShapeText(f);
                                                  +                                Utils.unselect();
                                                  +                                Utils.selectShape(f.id)
                                                  +                            }
                                                  +                            g.remove();
                                                  +                            Designer.op.resetState();
                                                  +                            $(document).unbind("mouseup.create_text");
                                                  +                            d.unbind("mousemove.create_text")
                                                  +                        });
                                                  +                    d.unbind("mousedown.create_text")
                                                  +                })
                                                  +        },
                                                  +        canvasDragTimeout: null,
                                                  +        canvasDraggable: function() {
                                                  +            var b = $("#canvas_container");
                                                  +            b.css("cursor", "url(../apps/_bpm.platform/js/designer/themes/default/images/diagraming/cursor_hand.png) 8 8, auto");
                                                  +            if (this.canvasDragTimeout) {
                                                  +                clearTimeout(this.canvasDragTimeout)
                                                  +            }
                                                  +            this.canvasDragTimeout = setTimeout(function() {
                                                  +                    b.unbind("mousedown.drag_canvas");
                                                  +                    Designer.op.resetState();
                                                  +                    b.unbind("mousemove.drag_canvas");
                                                  +                    $(document).unbind("mouseup.drag_canvas")
                                                  +                },
                                                  +                500);
                                                  +            b.unbind("mousedown.drag_canvas").bind("mousedown.drag_canvas",
                                                  +                function(e) {
                                                  +                    var f = $("#designer_layout").scrollTop();
                                                  +                    var a = $("#designer_layout").scrollLeft();
                                                  +                    b.bind("mousemove.drag_canvas",
                                                  +                        function(d) {
                                                  +                            var h = d.pageX - e.pageX;
                                                  +                            var c = d.pageY - e.pageY;
                                                  +                            $("#designer_layout").scrollLeft(a - h);
                                                  +                            $("#designer_layout").scrollTop(f - c)
                                                  +                        });
                                                  +                    $(document).unbind("mouseup.drag_canvas").bind("mouseup.drag_canvas",
                                                  +                        function(c) {
                                                  +                            b.unbind("mousemove.drag_canvas");
                                                  +                            $(document).unbind("mouseup.drag_canvas")
                                                  +                        })
                                                  +                });
                                                  +            $(document).unbind("keyup.drag_canvas").bind("keyup.drag_canvas",
                                                  +                function(a) {
                                                  +                    b.unbind("mousedown.drag_canvas");
                                                  +                    Designer.op.resetState();
                                                  +                    $(document).unbind("mouseup.drag_canvas");
                                                  +                    a.preventDefault();
                                                  +                    clearTimeout(this.canvasDragTimeout);
                                                  +                    b.unbind("mousemove.drag_canvas")
                                                  +                })
                                                  +        },
                                                  +        canvasFreeDraggable: function() {
                                                  +            var b = $("#canvas_container");
                                                  +            b.css("cursor", "url(../apps/_bpm.platform/js/designer/themes/default/images/diagraming/cursor_hand.png) 8 8, auto");
                                                  +            b.unbind("mousedown.drag_canvas").bind("mousedown.drag_canvas",
                                                  +                function(e) {
                                                  +                    var f = $("#designer_layout").scrollTop();
                                                  +                    var a = $("#designer_layout").scrollLeft();
                                                  +                    b.bind("mousemove.drag_canvas",
                                                  +                        function(d) {
                                                  +                            var h = d.pageX - e.pageX;
                                                  +                            var c = d.pageY - e.pageY;
                                                  +                            $("#designer_layout").scrollLeft(a - h);
                                                  +                            $("#designer_layout").scrollTop(f - c)
                                                  +                        });
                                                  +                    $(document).unbind("mouseup.drag_canvas").bind("mouseup.drag_canvas",
                                                  +                        function(c) {
                                                  +                            b.unbind("mousemove.drag_canvas");
                                                  +                            $(document).unbind("mouseup.drag_canvas")
                                                  +                        })
                                                  +                })
                                                  +        },
                                                  +        moveShape: function(A, H) {
                                                  +            var z = [];
                                                  +            for (var x = 0; x < A.length; x++) {
                                                  +                var M = A[x];
                                                  +                z.push(M.id)
                                                  +            }
                                                  +            var i = Utils.restoreScale(H);
                                                  +            for (var x = 0; x < A.length; x++) {
                                                  +                var M = A[x];
                                                  +                if (M.name == "linker") {
                                                  +                    var D = M;
                                                  +                    var y = D.from;
                                                  +                    var L = D.to;
                                                  +                    var G = false;
                                                  +                    var C = false;
                                                  +                    if (!Utils.isSelected(D.id)) {
                                                  +                        if (y.id != null && z.indexOf(y.id) >= 0) {
                                                  +                            D.from.x += i.x;
                                                  +                            D.from.y += i.y;
                                                  +                            G = true
                                                  +                        }
                                                  +                        if (L.id != null && z.indexOf(L.id) >= 0) {
                                                  +                            D.to.x += i.x;
                                                  +                            D.to.y += i.y;
                                                  +                            C = true
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (y.id == null || z.indexOf(y.id) >= 0) {
                                                  +                            D.from.x += i.x;
                                                  +                            D.from.y += i.y;
                                                  +                            G = true
                                                  +                        }
                                                  +                        if (L.id == null || z.indexOf(L.id) >= 0) {
                                                  +                            D.to.x += i.x;
                                                  +                            D.to.y += i.y;
                                                  +                            C = true
                                                  +                        }
                                                  +                    }
                                                  +                    if (G && C) {
                                                  +                        for (var w = 0; w < D.points.length; w++) {
                                                  +                            var B = D.points[w];
                                                  +                            B.x += i.x;
                                                  +                            B.y += i.y
                                                  +                        }
                                                  +                        var p = $("#" + M.id);
                                                  +                        var J = p.position();
                                                  +                        p.css({
                                                  +                            left: J.left += H.x,
                                                  +                            top: J.top += H.y
                                                  +                        })
                                                  +                    } else {
                                                  +                        if (G || C) {
                                                  +                            Designer.painter.renderLinker(D, true)
                                                  +                        }
                                                  +                    }
                                                  +                } else {
                                                  +                    N(M);
                                                  +                    $(".shape_contour[forshape=" + M.id + "]").css({
                                                  +                        left: M.props.x.toScale(),
                                                  +                        top: M.props.y.toScale()
                                                  +                    })
                                                  +                }
                                                  +            }
                                                  +            var K = Utils.getSelectedLinkerIds();
                                                  +            if (A.length == 1 && K.length == 1) {
                                                  +                return
                                                  +            }
                                                  +            if (K.length > 0) {
                                                  +                var I = Utils.getSelectedIds();
                                                  +                Designer.painter.drawControls(I)
                                                  +            } else {
                                                  +                var E = $("#shape_controls");
                                                  +                E.css({
                                                  +                    left: parseFloat(E.css("left")) + H.x,
                                                  +                    top: parseFloat(E.css("top")) + H.y
                                                  +                })
                                                  +            }
                                                  +            var F = $("#shape_controls").position();
                                                  +            if (F && Utils.getSelected().length > 0) {
                                                  +                Designer.op.showTip("X: " + Math.round(F.left.restoreScale()) + "&nbsp;&nbsp;Y: " + Math.round(F.top.restoreScale()));
                                                  +            }
                                                  +            function N(a) {
                                                  +                a.props.x += i.x;
                                                  +                a.props.y += i.y;
                                                  +                var b = $("#" + a.id);
                                                  +                b.css({
                                                  +                    left: parseFloat(b.css("left")) + H.x,
                                                  +                    top: parseFloat(b.css("top")) + H.y
                                                  +                })
                                                  +            }
                                                  +        },
                                                  +        moveLinker: function(D, w, G, H) {
                                                  +            var K = null;
                                                  +            var C = null;
                                                  +            var z = Utils.getShapeByPosition(G, H, true);
                                                  +            Designer.op.hideLinkPoint();
                                                  +            if (z != null) {
                                                  +                var L = z.shape;
                                                  +                Utils.showAnchors(L);
                                                  +                C = L.id;
                                                  +                if (z.type == "bounding") {
                                                  +                    K = z.linkPoint;
                                                  +                    Designer.op.showLinkPoint(Utils.toScale(K))
                                                  +                } else {
                                                  +                    if (z.type == "shape") {
                                                  +                        var u;
                                                  +                        var I;
                                                  +                        if (w == "from") {
                                                  +                            u = {
                                                  +                                x: D.to.x,
                                                  +                                y: D.to.y
                                                  +                            };
                                                  +                            I = D.to.id
                                                  +                        } else {
                                                  +                            u = {
                                                  +                                x: D.from.x,
                                                  +                                y: D.from.y
                                                  +                            };
                                                  +                            I = D.from.id
                                                  +                        }
                                                  +                        if (L.id == I) {
                                                  +                            Designer.op.hideLinkPoint();
                                                  +                            K = {
                                                  +                                x: G.restoreScale(),
                                                  +                                y: H.restoreScale()
                                                  +                            };
                                                  +                            K.angle = null;
                                                  +                            C = null
                                                  +                        } else {
                                                  +                            var B = L.getAnchors();
                                                  +                            var E = -1;
                                                  +                            var A;
                                                  +                            var t = {
                                                  +                                x: L.props.x + L.props.w / 2,
                                                  +                                y: L.props.y + L.props.h / 2
                                                  +                            };
                                                  +                            for (var v = 0; v < B.length; v++) {
                                                  +                                var y = B[v];
                                                  +                                var F = Utils.getRotated(t, {
                                                  +                                        x: L.props.x + y.x,
                                                  +                                        y: L.props.y + y.y
                                                  +                                    },
                                                  +                                    L.props.angle);
                                                  +                                var x = Utils.measureDistance(F, u);
                                                  +                                if (E == -1 || x < E) {
                                                  +                                    E = x;
                                                  +                                    A = F
                                                  +                                }
                                                  +                            }
                                                  +                            var J = Utils.getPointAngle(L.id, A.x, A.y, 7);
                                                  +                            K = {
                                                  +                                x: A.x,
                                                  +                                y: A.y,
                                                  +                                angle: J
                                                  +                            };
                                                  +                            Designer.op.showLinkPoint(Utils.toScale(K))
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            } else {
                                                  +                Designer.op.hideLinkPoint();
                                                  +                Utils.hideAnchors();
                                                  +                K = {
                                                  +                    x: G.restoreScale(),
                                                  +                    y: H.restoreScale()
                                                  +                };
                                                  +                K.angle = null;
                                                  +                C = null
                                                  +            }
                                                  +            if (w == "from") {
                                                  +                D.from.id = C;
                                                  +                D.from.x = K.x;
                                                  +                D.from.y = K.y;
                                                  +                D.from.angle = K.angle;
                                                  +                if (C == null) {
                                                  +                    if (K.x >= D.to.x - 6 && K.x <= D.to.x + 6) {
                                                  +                        D.from.x = D.to.x
                                                  +                    }
                                                  +                    if (K.y >= D.to.y - 6 && K.y <= D.to.y + 6) {
                                                  +                        D.from.y = D.to.y
                                                  +                    }
                                                  +                }
                                                  +            } else {
                                                  +                D.to.x = K.x;
                                                  +                D.to.y = K.y;
                                                  +                D.to.id = C;
                                                  +                D.to.angle = K.angle;
                                                  +                if (C == null) {
                                                  +                    if (K.x >= D.from.x - 6 && K.x <= D.from.x + 6) {
                                                  +                        D.to.x = D.from.x
                                                  +                    }
                                                  +                    if (K.y >= D.from.y - 6 && K.y <= D.from.y + 6) {
                                                  +                        D.to.y = D.from.y
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            Designer.painter.renderLinker(D, true)
                                                  +        },
                                                  +        showLinkPoint: function(e) {
                                                  +            var f = $("<canvas class='link_point_canvas' width=32 height=32></canvas>").appendTo($("#designer_canvas"));
                                                  +            var d = f[0].getContext("2d");
                                                  +            d.translate(1, 1);
                                                  +            d.lineWidth = 1;
                                                  +            d.globalAlpha = 0.3;
                                                  +            d.strokeStyle = Designer.config.anchorColor;
                                                  +            d.fillStyle = Designer.config.anchorColor;
                                                  +            d.beginPath();
                                                  +            d.moveTo(0, 15);
                                                  +            d.bezierCurveTo(0, -5, 30, -5, 30, 15);
                                                  +            d.bezierCurveTo(30, 35, 0, 35, 0, 15);
                                                  +            d.closePath();
                                                  +            d.fill();
                                                  +            d.stroke();
                                                  +            f.css({
                                                  +                left: e.x - 16,
                                                  +                top: e.y - 16,
                                                  +                "z-index": Model.orderList.length
                                                  +            }).show()
                                                  +        },
                                                  +        hideLinkPoint: function() {
                                                  +            $(".link_point_canvas").hide()
                                                  +        },
                                                  +        brokenLinkerChangable: function(k, l) {
                                                  +            var h = $("#canvas_container");
                                                  +            var g = $("#designer_canvas");
                                                  +            var i = k.points[l - 1];
                                                  +            var j = k.points[l];
                                                  +            if (i.x == j.x) {
                                                  +                h.css("cursor", "e-resize")
                                                  +            } else {
                                                  +                h.css("cursor", "n-resize")
                                                  +            }
                                                  +            g.bind("mousedown.brokenLinker",
                                                  +                function(a) {
                                                  +                    Designer.op.changeState("changing_broken_linker");
                                                  +                    var b = Utils.getRelativePos(a.pageX, a.pageY, g);
                                                  +                    var c = Utils.getSelectedIds();
                                                  +                    h.bind("mousemove.brokenLinker",
                                                  +                        function(e) {
                                                  +                            var f = Utils.getRelativePos(e.pageX, e.pageY, g);
                                                  +                            var d = {
                                                  +                                x: f.x - b.x,
                                                  +                                y: f.y - b.y
                                                  +                            };
                                                  +                            d = Utils.restoreScale(d);
                                                  +                            if (i.x == j.x) {
                                                  +                                i.x += d.x;
                                                  +                                j.x += d.x
                                                  +                            } else {
                                                  +                                i.y += d.y;
                                                  +                                j.y += d.y
                                                  +                            }
                                                  +                            Designer.painter.renderLinker(k);
                                                  +                            if (c.length > 1) {
                                                  +                                Designer.painter.drawControls(c)
                                                  +                            }
                                                  +                            b = f;
                                                  +                            $(document).unbind("mouseup.changed").bind("mouseup.changed",
                                                  +                                function() {
                                                  +                                    Model.update(k);
                                                  +                                    $(document).unbind("mouseup.changed")
                                                  +                                })
                                                  +                        });
                                                  +                    $(document).bind("mouseup.brokenLinker",
                                                  +                        function() {
                                                  +                            Designer.op.resetState();
                                                  +                            h.unbind("mousemove.brokenLinker");
                                                  +                            g.unbind("mousedown.brokenLinker");
                                                  +                            $(document).unbind("mouseup.brokenLinker")
                                                  +                        })
                                                  +                })
                                                  +        },
                                                  +        removeShape: function() {// 在designer.extend.core.js重写
                                                  +            var d = Utils.getSelected();
                                                  +            if (d.length > 0) {
                                                  +                Utils.unselect();
                                                  +                var e = Utils.getAttachedShapes(d);
                                                  +                d = d.concat(e);
                                                  +                var c = [];
                                                  +                for (var b = 0; b < d.length; b++) {
                                                  +                    var a = Utils.getChildrenShapes(d[b]);
                                                  +                    c = c.concat(a)
                                                  +                }
                                                  +                d = d.concat(c);
                                                  +                if (d.length > 0) {
                                                  +                    var shapeIds = [];
                                                  +                    for (var index = 0; index < d.length; index++) {
                                                  +                        if (d[index].name != "linker") {
                                                  +                            shapeIds.push(d[index].id)
                                                  +                        }
                                                  +                    }
                                                  +                    if (shapeIds.length > 0) {
                                                  +                        $.ajax({
                                                  +                            url: "./jd?sid=" + $("#sid").val() + "&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_search",
                                                  +                            data: {
                                                  +                                shapeIds: shapeIds.join(","),
                                                  +                                fileId: ruuid
                                                  +                            },
                                                  +                            success: function(msg) {
                                                  +                                if (typeof(msg) == "string") {
                                                  +                                    msg = eval("(" + msg + ")")
                                                  +                                }
                                                  +                                var relationShapes = msg.data.relationShapes;
                                                  +                                if (relationShapes.length > 0) {
                                                  +                                    var options = {
                                                  +                                        title: "提示",
                                                  +                                        content: "图形[" + relationShapes + "]被关联,确定删除吗?",
                                                  +                                        onConfirm: function() {
                                                  +                                            Model.remove(d)
                                                  +                                        }
                                                  +                                    };
                                                  +                                    $.confirm(options)
                                                  +                                } else {
                                                  +                                    Model.remove(d)
                                                  +                                }
                                                  +                            }
                                                  +                        })
                                                  +                    } else {
                                                  +                        Model.remove(d)
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        },
                                                  +        showTip: function(h) {
                                                  +            var f = $("#designer_op_tip");
                                                  +            if (f.length == 0) {
                                                  +                f = $("<div id='designer_op_tip'></div>").appendTo("#designer_canvas")
                                                  +            }
                                                  +            f.stop().html(h);
                                                  +            var e = $("#shape_controls");
                                                  +            var g = e.position();
                                                  +            f.css({
                                                  +                top: g.top + e.height() + 5,
                                                  +                left: g.left + e.width() / 2 - f.outerWidth() / 2,
                                                  +                "z-index": Model.orderList.length
                                                  +            }).show()
                                                  +        },
                                                  +        hideTip: function() {
                                                  +            $("#designer_op_tip").fadeOut(100)
                                                  +        },
                                                  +        snapLine: function(R, Q, S, ae) {
                                                  +            var U = R.y;
                                                  +            var J = R.y + R.h / 2;
                                                  +            var ad = R.y + R.h;
                                                  +            var af = R.x;
                                                  +            var T = R.x + R.w / 2;
                                                  +            var X = R.x + R.w;
                                                  +            var ag = 2;
                                                  +            var ab = {
                                                  +                v: null,
                                                  +                h: null,
                                                  +                attach: null
                                                  +            };
                                                  +            var W = null;
                                                  +            if (S) {
                                                  +                W = ae
                                                  +            } else {
                                                  +                W = Model.getShapeById(Q[0])
                                                  +            }
                                                  +            if (Q.length == 1 && W.groupName == "boundaryEvent") {
                                                  +                for (var K = Model.orderList.length - 1; K >= 0; K--) {
                                                  +                    var P = Model.orderList[K].id;
                                                  +                    var ai = Model.getShapeById(P);
                                                  +                    if (ai.name != "linker" && ai.id != W.id) {
                                                  +                        var O = ai.props;
                                                  +                        if (ab.attach == null && O.angle == 0 && (ai.groupName == "task" || ai.groupName == "callActivity" || ai.groupName == "subProcess")) {
                                                  +                            var p = {
                                                  +                                x: O.x - ag,
                                                  +                                y: O.y - ag,
                                                  +                                w: O.w + ag * 2,
                                                  +                                h: O.h + ag * 2
                                                  +                            };
                                                  +                            if (Utils.pointInRect(T, J, p)) {
                                                  +                                var aj = O.y;
                                                  +                                var ac = O.y + O.h;
                                                  +                                var M = O.x;
                                                  +                                var L = O.x + O.w;
                                                  +                                var V = false;
                                                  +                                var aa = false;
                                                  +                                if (aj >= J - ag && aj <= J + ag) {
                                                  +                                    R.y = aj - R.h / 2;
                                                  +                                    aa = true
                                                  +                                } else {
                                                  +                                    if (ac >= J - ag && ac <= J + ag) {
                                                  +                                        R.y = ac - R.h / 2;
                                                  +                                        aa = true
                                                  +                                    }
                                                  +                                }
                                                  +                                if (M >= T - ag && M <= T + ag) {
                                                  +                                    R.x = M - R.w / 2;
                                                  +                                    V = true
                                                  +                                } else {
                                                  +                                    if (L >= T - ag && L <= T + ag) {
                                                  +                                        R.x = L - R.w / 2;
                                                  +                                        V = true
                                                  +                                    }
                                                  +                                }
                                                  +                                if (V || aa) {
                                                  +                                    ab.attach = ai
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            if (ab.attach == null) {
                                                  +                for (var K = Model.orderList.length - 1; K >= 0; K--) {
                                                  +                    var P = Model.orderList[K].id;
                                                  +                    var ai = Model.getShapeById(P);
                                                  +                    if (ai.name == "linker" || Q.indexOf(P) >= 0 || ai.parent) {
                                                  +                        continue
                                                  +                    }
                                                  +                    var O = ai.props;
                                                  +                    if (ab.h == null) {
                                                  +                        var aj = O.y;
                                                  +                        var ak = O.y + O.h / 2;
                                                  +                        var ac = O.y + O.h;
                                                  +                        if (ak >= J - ag && ak <= J + ag) {
                                                  +                            ab.h = {
                                                  +                                type: "middle",
                                                  +                                y: ak
                                                  +                            };
                                                  +                            R.y = ak - R.h / 2
                                                  +                        } else {
                                                  +                            if (aj >= U - ag && aj <= U + ag) {
                                                  +                                ab.h = {
                                                  +                                    type: "top",
                                                  +                                    y: aj
                                                  +                                };
                                                  +                                R.y = aj
                                                  +                            } else {
                                                  +                                if (ac >= ad - ag && ac <= ad + ag) {
                                                  +                                    ab.h = {
                                                  +                                        type: "bottom",
                                                  +                                        y: ac
                                                  +                                    };
                                                  +                                    R.y = ac - R.h
                                                  +                                } else {
                                                  +                                    if (ac >= U - ag && ac <= U + ag) {
                                                  +                                        ab.h = {
                                                  +                                            type: "top",
                                                  +                                            y: ac
                                                  +                                        };
                                                  +                                        R.y = ac
                                                  +                                    } else {
                                                  +                                        if (aj >= ad - ag && aj <= ad + ag) {
                                                  +                                            ab.h = {
                                                  +                                                type: "bottom",
                                                  +                                                y: aj
                                                  +                                            };
                                                  +                                            R.y = aj - R.h
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    if (ab.v == null) {
                                                  +                        var M = O.x;
                                                  +                        var N = O.x + O.w / 2;
                                                  +                        var L = O.x + O.w;
                                                  +                        if (N >= T - ag && N <= T + ag) {
                                                  +                            ab.v = {
                                                  +                                type: "center",
                                                  +                                x: N
                                                  +                            };
                                                  +                            R.x = N - R.w / 2
                                                  +                        } else {
                                                  +                            if (M >= af - ag && M <= af + ag) {
                                                  +                                ab.v = {
                                                  +                                    type: "left",
                                                  +                                    x: M
                                                  +                                };
                                                  +                                R.x = M
                                                  +                            } else {
                                                  +                                if (L >= X - ag && L <= X + ag) {
                                                  +                                    ab.v = {
                                                  +                                        type: "right",
                                                  +                                        x: L
                                                  +                                    };
                                                  +                                    R.x = L - R.w
                                                  +                                } else {
                                                  +                                    if (L >= af - ag && L <= af + ag) {
                                                  +                                        ab.v = {
                                                  +                                            type: "left",
                                                  +                                            x: L
                                                  +                                        };
                                                  +                                        R.x = L
                                                  +                                    } else {
                                                  +                                        if (M >= X - ag && M <= X + ag) {
                                                  +                                            ab.v = {
                                                  +                                                type: "right",
                                                  +                                                x: M
                                                  +                                            };
                                                  +                                            R.x = M - R.w
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    if (ab.h != null && ab.v != null) {
                                                  +                        break
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            this.hideSnapLine();
                                                  +            var ah = $("#designer_canvas");
                                                  +            if (ab.attach != null) {
                                                  +                var Y = $("#designer_op_snapline_attach");
                                                  +                if (Y.length == 0) {
                                                  +                    Y = $("<div id='designer_op_snapline_attach'></div>").appendTo(ah)
                                                  +                }
                                                  +                var I = ab.attach;
                                                  +                var al = I.lineStyle.lineWidth;
                                                  +                Y.css({
                                                  +                    width: (I.props.w + al).toScale(),
                                                  +                    height: (I.props.h + al).toScale(),
                                                  +                    left: (I.props.x - al / 2).toScale() - 2,
                                                  +                    top: (I.props.y - al / 2).toScale() - 2,
                                                  +                    "z-index": $("#" + I.id).css("z-index")
                                                  +                }).show()
                                                  +            }
                                                  +            if (ab.h != null) {
                                                  +                var i = $("#designer_op_snapline_h");
                                                  +                if (i.length == 0) {
                                                  +                    i = $("<div id='designer_op_snapline_h'></div>").appendTo(ah)
                                                  +                }
                                                  +                i.css({
                                                  +                    width: ah.width() + Designer.config.pageMargin * 2,
                                                  +                    left: -Designer.config.pageMargin,
                                                  +                    top: Math.round(ab.h.y.toScale()),
                                                  +                    "z-index": Model.orderList.length + 1
                                                  +                }).show()
                                                  +            }
                                                  +            if (ab.v != null) {
                                                  +                var Z = $("#designer_op_snapline_v");
                                                  +                if (Z.length == 0) {
                                                  +                    Z = $("<div id='designer_op_snapline_v'></div>").appendTo(ah)
                                                  +                }
                                                  +                Z.css({
                                                  +                    height: ah.height() + Designer.config.pageMargin * 2,
                                                  +                    top: -Designer.config.pageMargin,
                                                  +                    left: Math.round(ab.v.x.toScale()),
                                                  +                    "z-index": Model.orderList.length + 1
                                                  +                }).show()
                                                  +            }
                                                  +            return ab
                                                  +        },
                                                  +        snapResizeLine: function(K, I, J) {
                                                  +            var L = K.y;
                                                  +            var i = K.y + K.h / 2;
                                                  +            var P = K.y + K.h;
                                                  +            var Q = K.x;
                                                  +            var C = K.x + K.w / 2;
                                                  +            var D = K.x + K.w;
                                                  +            var R = 2;
                                                  +            var N = {
                                                  +                v: null,
                                                  +                h: null
                                                  +            };
                                                  +            for (var F = Model.orderList.length - 1; F >= 0; F--) {
                                                  +                var B = Model.orderList[F].id;
                                                  +                var U = Model.getShapeById(B);
                                                  +                if (U.name == "linker" || I.indexOf(B) >= 0 || U.parent) {
                                                  +                    continue
                                                  +                }
                                                  +                var H = U.props;
                                                  +                if (N.h == null && (J.indexOf("t") >= 0 || J.indexOf("b") >= 0)) {
                                                  +                    var T = H.y;
                                                  +                    var V = H.y + H.h / 2;
                                                  +                    var O = H.y + H.h;
                                                  +                    if (V >= i - R && V <= i + R) {
                                                  +                        N.h = {
                                                  +                            type: "middle",
                                                  +                            y: V
                                                  +                        };
                                                  +                        if (J.indexOf("t") >= 0) {
                                                  +                            K.h = (P - V) * 2;
                                                  +                            K.y = P - K.h
                                                  +                        } else {
                                                  +                            K.h = (V - K.y) * 2
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (J.indexOf("t") >= 0 && T >= L - R && T <= L + R) {
                                                  +                            N.h = {
                                                  +                                type: "top",
                                                  +                                y: T
                                                  +                            };
                                                  +                            K.y = T;
                                                  +                            K.h = P - T
                                                  +                        } else {
                                                  +                            if (J.indexOf("b") >= 0 && O >= P - R && O <= P + R) {
                                                  +                                N.h = {
                                                  +                                    type: "bottom",
                                                  +                                    y: O
                                                  +                                };
                                                  +                                K.h = O - L
                                                  +                            } else {
                                                  +                                if (J.indexOf("t") >= 0 && O >= L - R && O <= L + R) {
                                                  +                                    N.h = {
                                                  +                                        type: "top",
                                                  +                                        y: O
                                                  +                                    };
                                                  +                                    K.y = O;
                                                  +                                    K.h = P - O
                                                  +                                } else {
                                                  +                                    if (J.indexOf("b") >= 0 && T >= P - R && T <= P + R) {
                                                  +                                        N.h = {
                                                  +                                            type: "bottom",
                                                  +                                            y: T
                                                  +                                        };
                                                  +                                        K.h = T - K.y
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                if (N.v == null && (J.indexOf("l") >= 0 || J.indexOf("r") >= 0)) {
                                                  +                    var p = H.x;
                                                  +                    var A = H.x + H.w / 2;
                                                  +                    var G = H.x + H.w;
                                                  +                    if (A >= C - R && A <= C + R) {
                                                  +                        N.v = {
                                                  +                            type: "center",
                                                  +                            x: A
                                                  +                        };
                                                  +                        if (J.indexOf("l") >= 0) {
                                                  +                            K.w = (D - A) * 2;
                                                  +                            K.x = D - K.w
                                                  +                        } else {
                                                  +                            K.w = (A - K.x) * 2
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (J.indexOf("l") >= 0 && p >= Q - R && p <= Q + R) {
                                                  +                            N.v = {
                                                  +                                type: "left",
                                                  +                                x: p
                                                  +                            };
                                                  +                            K.x = p;
                                                  +                            K.w = D - p
                                                  +                        } else {
                                                  +                            if (J.indexOf("r") >= 0 && G >= D - R && G <= D + R) {
                                                  +                                N.v = {
                                                  +                                    type: "right",
                                                  +                                    x: G
                                                  +                                };
                                                  +                                K.w = G - K.x
                                                  +                            } else {
                                                  +                                if (J.indexOf("l") >= 0 && G >= Q - R && G <= Q + R) {
                                                  +                                    N.v = {
                                                  +                                        type: "left",
                                                  +                                        x: G
                                                  +                                    };
                                                  +                                    K.x = G;
                                                  +                                    K.w = D - G
                                                  +                                } else {
                                                  +                                    if (J.indexOf("r") >= 0 && p >= D - R && p <= D + R) {
                                                  +                                        N.v = {
                                                  +                                            type: "right",
                                                  +                                            x: p
                                                  +                                        };
                                                  +                                        K.w = p - K.x
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                if (N.h != null && N.v != null) {
                                                  +                    break
                                                  +                }
                                                  +            }
                                                  +            this.hideSnapLine();
                                                  +            var S = $("#designer_canvas");
                                                  +            if (N.h != null) {
                                                  +                var E = $("#designer_op_snapline_h");
                                                  +                if (E.length == 0) {
                                                  +                    E = $("<div id='designer_op_snapline_h'></div>").appendTo(S)
                                                  +                }
                                                  +                E.css({
                                                  +                    width: S.width() + Designer.config.pageMargin * 2,
                                                  +                    left: -Designer.config.pageMargin,
                                                  +                    top: Math.round(N.h.y.toScale()),
                                                  +                    "z-index": Model.orderList.length + 1
                                                  +                }).show()
                                                  +            }
                                                  +            if (N.v != null) {
                                                  +                var M = $("#designer_op_snapline_v");
                                                  +                if (M.length == 0) {
                                                  +                    M = $("<div id='designer_op_snapline_v'></div>").appendTo(S)
                                                  +                }
                                                  +                M.css({
                                                  +                    height: S.height() + Designer.config.pageMargin * 2,
                                                  +                    top: -Designer.config.pageMargin,
                                                  +                    left: Math.round(N.v.x.toScale()),
                                                  +                    "z-index": Model.orderList.length + 1
                                                  +                }).show()
                                                  +            }
                                                  +            return N
                                                  +        },
                                                  +        hideSnapLine: function() {
                                                  +            $("#designer_op_snapline_h").hide();
                                                  +            $("#designer_op_snapline_v").hide();
                                                  +            $("#designer_op_snapline_attach").hide()
                                                  +        },
                                                  +        linkDashboard: function(q) {
                                                  +            var m = Model.getShapeById(q.from.id);
                                                  +            var t = m.category;
                                                  +            if ($("#panel_" + t).length != 0) {
                                                  +                var p = $("#shape_dashboard_" + t);
                                                  +                if (p.length == 0) {
                                                  +                    p = $("<div id='shape_dashboard_" + t + "' class='shape_dashboard menu'></div>").appendTo("#designer_canvas");
                                                  +                    function r(b, d) {
                                                  +                        var e = "<div class='dashboard_box' shapeName='" + b.name + "'><canvas title='" + b.title + "' title_pos='right' class='panel_item' width='" + (Designer.config.panelItemWidth) + "' height='" + (Designer.config.panelItemHeight) + "'></canvas></div>";
                                                  +                        var c = $(e).appendTo(p);
                                                  +                        if (d) {
                                                  +                            c.append("<div class='group_icon link_shape_icon' group='" + d + "'></div>")
                                                  +                        }
                                                  +                        var a = c.children()[0];
                                                  +                        Designer.painter.drawPanelItem(a, b.name)
                                                  +                    }
                                                  +                    for (var l in Schema.shapes) {
                                                  +                        var o = Schema.shapes[l];
                                                  +                        if ((o.category == "process_bpmn2" || o.category == "process.bpmn2" || o.category == "bpmn") && checkRunningTimeShape(o)) {
                                                  +                            continue;
                                                  +                        }
                                                  +                        if (o.category == t) {
                                                  +                            var s = o.attribute;
                                                  +                            if (s.visible && s.linkable) {
                                                  +                                if (!o.groupName) {
                                                  +                                    r(o)
                                                  +                                } else {
                                                  +                                    var k = SchemaGroup.getGroup(o.groupName);
                                                  +                                    if (k[0] == o.name) {
                                                  +                                        r(o, o.groupName)
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    p.bind("mousemove",
                                                  +                        function(a) {
                                                  +                            a.stopPropagation()
                                                  +                        }).bind("mousedown",
                                                  +                        function(a) {
                                                  +                            a.stopPropagation()
                                                  +                        })
                                                  +                }
                                                  +                p.css({
                                                  +                    left: q.to.x.toScale(),
                                                  +                    top: q.to.y.toScale(),
                                                  +                    "z-index": Model.orderList.length
                                                  +                }).show();
                                                  +                p.find(".link_shape_icon").unbind().bind("mousedown",
                                                  +                    function(f) {
                                                  +                        f.stopPropagation();
                                                  +                        var a = $(this).attr("group");
                                                  +                        var d = $(this).parent().position();
                                                  +                        var e = p.position();
                                                  +                        var b = d.left + e.left + $(this).parent().outerWidth() - 10;
                                                  +                        var c = d.top + e.top + $(this).parent().outerHeight();
                                                  +                        Designer.op.groupDashboard(a, b, c,
                                                  +                            function(g) {
                                                  +                                n(g);
                                                  +                                p.hide();
                                                  +                                $(document).unbind("mousedown.dashboard")
                                                  +                            })
                                                  +                    }).bind("click",
                                                  +                    function(a) {
                                                  +                        a.stopPropagation()
                                                  +                    });
                                                  +                p.children(".dashboard_box").unbind().bind("click",
                                                  +                    function() {
                                                  +                        p.hide();
                                                  +                        $(document).unbind("mousedown.dashboard");
                                                  +                        var a = $(this);
                                                  +                        var b = a.attr("shapeName");
                                                  +                        n(b)
                                                  +                    });
                                                  +                initRunningDashboard(p);
                                                  +                $(document).bind("mousedown.dashboard",
                                                  +                    function() {
                                                  +                        p.hide();
                                                  +                        $(document).unbind("mousedown.dashboard")
                                                  +                    });
                                                  +                function n(e) {
                                                  +                    var y = Schema.shapes[e];
                                                  +                    var d = Utils.getEndpointAngle(q, "to");
                                                  +                    var b = Utils.getAngleDir(d);
                                                  +                    var f = y.getAnchors();
                                                  +                    var A;
                                                  +                    if (b == 1) {
                                                  +                        var c = null;
                                                  +                        for (var j = 0; j < f.length; j++) {
                                                  +                            var z = f[j];
                                                  +                            if (c == null || z.y < c) {
                                                  +                                c = z.y;
                                                  +                                A = z
                                                  +                            }
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (b == 2) {
                                                  +                            var g = null;
                                                  +                            for (var j = 0; j < f.length; j++) {
                                                  +                                var z = f[j];
                                                  +                                if (g == null || z.x > g) {
                                                  +                                    g = z.x;
                                                  +                                    A = z
                                                  +                                }
                                                  +                            }
                                                  +                        } else {
                                                  +                            if (b == 3) {
                                                  +                                var h = null;
                                                  +                                for (var j = 0; j < f.length; j++) {
                                                  +                                    var z = f[j];
                                                  +                                    if (h == null || z.y > h) {
                                                  +                                        h = z.y;
                                                  +                                        A = z
                                                  +                                    }
                                                  +                                }
                                                  +                            } else {
                                                  +                                if (b == 4) {
                                                  +                                    var B = null;
                                                  +                                    for (var j = 0; j < f.length; j++) {
                                                  +                                        var z = f[j];
                                                  +                                        if (B == null || z.x < B) {
                                                  +                                            B = z.x;
                                                  +                                            A = z
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    var i = Model.create(e, q.to.x - A.x, q.to.y - A.y);
                                                  +                    Designer.painter.renderShape(i);
                                                  +                    MessageSource.beginBatch();
                                                  +                    if (i.onCreated) {
                                                  +                        i.onCreated()
                                                  +                    }
                                                  +                    Designer.events.push("created", i);
                                                  +                    Model.add(i);
                                                  +                    var a = Utils.getPointAngle(i.id, q.to.x, q.to.y, 7);
                                                  +                    q.to.id = i.id;
                                                  +                    q.to.angle = a;
                                                  +                    Designer.painter.renderLinker(q, true);
                                                  +                    Model.update(q);
                                                  +                    MessageSource.commit();
                                                  +                    Utils.unselect();
                                                  +                    Utils.selectShape(i.id);
                                                  +                    Designer.op.editShapeText(i)
                                                  +                }
                                                  +            }
                                                  +        },
                                                  +        groupDashboard: function(m, s, n, t) {
                                                  +            $(".group_dashboard").hide();
                                                  +            var o = $("#shape_group_dashboard_" + m);
                                                  +            if (o.length == 0) {
                                                  +                o = $("<div id='shape_group_dashboard_" + m + "' class='group_dashboard menu'></div>").appendTo("#designer_canvas");
                                                  +                var i = SchemaGroup.getGroup(m);
                                                  +                for (var r = 0; r < i.length; r++) {
                                                  +                    var v = i[r];
                                                  +                    var p = Schema.shapes[v];
                                                  +                    if ((p.category == "process_bpmn2" || p.category == "process.bpmn2" ||  p.category == "bpmn") && checkRunningTimeShape(p)) {
                                                  +                        continue;
                                                  +                    }
                                                  +                    if (p.attribute.visible) {
                                                  +                        var q = $("<div class='dashboard_box' shapeName='" + v + "'><canvas title='" + p.title + "' title_pos='right' width='" + (Designer.config.panelItemWidth) + "' height='" + (Designer.config.panelItemHeight) + "'></canvas></div>").appendTo(o);
                                                  +                        var u = q.children("canvas")[0];
                                                  +                        Designer.painter.drawPanelItem(u, p.name)
                                                  +                    }
                                                  +                }
                                                  +                o.bind("mousedown",
                                                  +                    function(a) {
                                                  +                        a.stopPropagation()
                                                  +                    })
                                                  +            }
                                                  +            o.css({
                                                  +                left: s,
                                                  +                top: n,
                                                  +                "z-index": Model.orderList.length + 1
                                                  +            }).show();
                                                  +            $(".dashboard_box").unbind().bind("click",
                                                  +                function() {
                                                  +                    var a = $(this).attr("shapeName");
                                                  +                    t(a);
                                                  +                    o.hide();
                                                  +                    $(document).unbind("mousedown.group_dashboard")
                                                  +                });
                                                  +            $(document).bind("mousedown.group_dashboard",
                                                  +                function() {
                                                  +                    o.hide();
                                                  +                    $(document).unbind("mousedown.group_dashboard")
                                                  +                });
                                                  +            return o
                                                  +        },
                                                  +        showPanelGroup: function(o, z, t) {
                                                  +            z.stopPropagation();
                                                  +            var s = $("#group_dashboard_" + o);
                                                  +            $(".group_dashboard").hide();
                                                  +            if (s.length == 0) {
                                                  +                s = $("<div id='group_dashboard_" + o + "' class='group_dashboard menu'></div>").appendTo("#designer");
                                                  +                var i = SchemaGroup.getGroup(o);
                                                  +                for (var v = 0; v < i.length; v++) {
                                                  +                    var y = i[v];
                                                  +                    var r = Schema.shapes[y];
                                                  +                    if ((r.category == "process_bpmn2" || r.category == "process.bpmn2" ||  r.category == "bpmn") && checkRunningTimeShape(r)) {
                                                  +                        continue;
                                                  +                    }
                                                  +                    if (r.attribute.visible) {
                                                  +                        var u = $("<div class='panel_box' shapeName='" + y + "'><canvas title='" + r.title + "' title_pos='right' width='" + (Designer.config.panelItemWidth) + "' height='" + (Designer.config.panelItemHeight) + "'></canvas></div>").appendTo(s);
                                                  +                        var x = u.children("canvas")[0];
                                                  +                        Designer.painter.drawPanelItem(x, r.name)
                                                  +                    }
                                                  +                }
                                                  +                s.css("position", "fixed")
                                                  +            }
                                                  +            var p = $(t).parent();
                                                  +            var w = p.offset();
                                                  +            s.show();
                                                  +            var q = w.top + p.height();
                                                  +            if (q + s.outerHeight() > $(window).height()) {
                                                  +                q = $(window).height() - s.outerHeight()
                                                  +            }
                                                  +            s.css({
                                                  +                left: w.left - 7,
                                                  +                top: q
                                                  +            });
                                                  +            $(document).bind("mousedown.group_board",
                                                  +                function() {
                                                  +                    s.hide();
                                                  +                    $(document).unbind("mousedown.group_board")
                                                  +                })
                                                  +        },
                                                  +        changeShapeProps: function(j, o) {
                                                  +            function p(e) {
                                                  +                if (typeof o.x != "undefined") {
                                                  +                    e.x += (o.x - j.props.x)
                                                  +                }
                                                  +                if (typeof o.y != "undefined") {
                                                  +                    e.y += (o.y - j.props.y)
                                                  +                }
                                                  +                if (typeof o.w != "undefined" || typeof o.h != "undefined" || typeof o.angle != "undefined") {
                                                  +                    var f = $.extend({},
                                                  +                        j.props, o);
                                                  +                    var g = {
                                                  +                        x: j.props.x + j.props.w / 2,
                                                  +                        y: j.props.y + j.props.h / 2
                                                  +                    };
                                                  +                    var b = Utils.getRotated(g, e, -j.props.angle);
                                                  +                    var c = j.props.w;
                                                  +                    var h = j.props.h;
                                                  +                    if (typeof o.w != "undefined") {
                                                  +                        e.x = j.props.x + (b.x - j.props.x) / j.props.w * o.w;
                                                  +                        c = o.w
                                                  +                    } else {
                                                  +                        e.x = b.x
                                                  +                    }
                                                  +                    if (typeof o.h != "undefined") {
                                                  +                        e.y = j.props.y + (b.y - j.props.y) / j.props.h * o.h;
                                                  +                        h = o.h
                                                  +                    } else {
                                                  +                        e.y = b.y
                                                  +                    }
                                                  +                    var d = {
                                                  +                        x: j.props.x + c / 2,
                                                  +                        y: j.props.y + h / 2
                                                  +                    };
                                                  +                    var a = Utils.getRotated(d, e, f.angle);
                                                  +                    e.x = a.x;
                                                  +                    e.y = a.y
                                                  +                }
                                                  +                if (typeof o.angle != "undefined") {
                                                  +                    e.angle += o.angle - j.props.angle
                                                  +                }
                                                  +            }
                                                  +            var m = [];
                                                  +            var l = Model.getShapeLinkers(j.id);
                                                  +            if (l && l.length > 0) {
                                                  +                for (var i = 0; i < l.length; i++) {
                                                  +                    var k = l[i];
                                                  +                    var n = Model.getShapeById(k);
                                                  +                    if (j.id == n.from.id) {
                                                  +                        p(n.from)
                                                  +                    }
                                                  +                    if (j.id == n.to.id) {
                                                  +                        p(n.to)
                                                  +                    }
                                                  +                }
                                                  +                m = l
                                                  +            }
                                                  +            $.extend(j.props, o);
                                                  +            Designer.painter.renderShape(j);
                                                  +            Utils.showLinkerCursor();
                                                  +            return m
                                                  +        }
                                                  +    },
                                                  +    events: {
                                                  +        push: function(f, e) {
                                                  +            var d = this.listeners[f];
                                                  +            if (d) {
                                                  +                return d(e)
                                                  +            }
                                                  +            return null
                                                  +        },
                                                  +        listeners: {},
                                                  +        addEventListener: function(c, d) {
                                                  +            this.listeners[c] = d
                                                  +        }
                                                  +    },
                                                  +    clipboard: {
                                                  +        elements: [],
                                                  +        presetedIds: {},
                                                  +        presetIds: function() {
                                                  +            this.presetedIds = {};
                                                  +            for (var c = 0; c < this.elements.length; c++) {
                                                  +                var d = this.elements[c];
                                                  +                this.presetedIds[d.id] = Utils.newId();
                                                  +                if (d.group && !this.presetedIds[d.group]) {
                                                  +                    this.presetedIds[d.group] = Utils.newId()
                                                  +                }
                                                  +            }
                                                  +        },
                                                  +        plus: true,
                                                  +        copy: function(g) {
                                                  +            this.elements = [];
                                                  +            var j;
                                                  +            var k;
                                                  +            if (g) {
                                                  +                j = g
                                                  +            } else {
                                                  +                j = Utils.getSelected();
                                                  +                k = Utils.getFamilyShapes(j);
                                                  +                j = j.concat(k)
                                                  +            }
                                                  +            j.sort(function i(a, b) {
                                                  +                return a.props.zindex - b.props.zindex
                                                  +            });
                                                  +            for (var f = 0; f < j.length; f++) {
                                                  +                var h = Utils.copy(j[f]);
                                                  +                if (h.name == "linker") {
                                                  +                    if (h.from.id != null) {
                                                  +                        if (!Utils.isSelected(h.from.id) && g == undefined) {
                                                  +                            h.from.id = null;
                                                  +                            h.from.angle = null
                                                  +                        }
                                                  +                    }
                                                  +                    if (h.to.id != null) {
                                                  +                        if (!Utils.isSelected(h.to.id) && g == undefined) {
                                                  +                            h.to.id = null;
                                                  +                            h.to.angle = null
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                this.elements.push(h)
                                                  +            }
                                                  +            this.elements.sort(function i(a, b) {
                                                  +                return a.props.zindex - b.props.zindex
                                                  +            });
                                                  +            this.presetIds();
                                                  +            this.plus = true;
                                                  +            Designer.events.push("clipboardChanged", this.elements.length)
                                                  +        },
                                                  +        cut: function() {
                                                  +            this.copy();
                                                  +            // Designer.op.removeShape();// 重复删除,造成异常
                                                  +            this.plus = true;
                                                  +        },
                                                  +        paste: function(F, G) {
                                                  +            if (this.elements.length == 0) {
                                                  +                return
                                                  +            }
                                                  +            var w = 20;
                                                  +            var x = 20;
                                                  +            if (typeof F != "undefined") {
                                                  +                var I = Utils.getShapesBounding(this.elements);
                                                  +                w = F - I.x - I.w / 2;
                                                  +                x = G - I.y - I.h / 2
                                                  +            }
                                                  +            var H = [];
                                                  +            var K = [];
                                                  +            var j = [];
                                                  +            for (var y = 0; y < this.elements.length; y++) {
                                                  +                var L = this.elements[y];
                                                  +                if (L.name != "linker") {
                                                  +                    var v;
                                                  +                    var L = this.elements[y];
                                                  +                    L.props.zindex = Model.maxZIndex + (y + 1);
                                                  +                    var D = this.presetedIds[L.id];
                                                  +                    if (this.plus || typeof F != "undefined") {
                                                  +                        L.props.x += w;
                                                  +                        L.props.y += x
                                                  +                    }
                                                  +                    v = Utils.copy(L);
                                                  +                    for (var A = 0; A < v.dataAttributes.length; A++) {
                                                  +                        var B = v.dataAttributes[A];
                                                  +                        B.id = Utils.newId()
                                                  +                    }
                                                  +                    v.id = D;
                                                  +                    if (v.children) {
                                                  +                        for (var E = 0; E < v.children.length; E++) {
                                                  +                            var z = v.children[E];
                                                  +                            v.children[E] = this.presetedIds[z]
                                                  +                        }
                                                  +                    }
                                                  +                    if (v.parent) {
                                                  +                        v.parent = this.presetedIds[v.parent]
                                                  +                    }
                                                  +                    H.push(v);
                                                  +                    K.push(D);
                                                  +                    if (L.group) {
                                                  +                        var J = this.presetedIds[L.group];
                                                  +                        v.group = J
                                                  +                    }
                                                  +                    var i = {};
                                                  +                    i.copyShapeId = L.id;
                                                  +                    i.pasteShapeId = v.id;
                                                  +                    i.pasteFileId = ruuid;
                                                  +                    j.push(i)
                                                  +                }
                                                  +            }
                                                  +            for (var y = 0; y < this.elements.length; y++) {
                                                  +                var L = this.elements[y];
                                                  +                if (L.name == "linker") {
                                                  +                    var v;
                                                  +                    L.props.zindex = Model.maxZIndex + (y + 1);
                                                  +                    var D = this.presetedIds[L.id];
                                                  +                    if (this.plus || typeof F != "undefined") {
                                                  +                        L.from.x += w;
                                                  +                        L.from.y += x;
                                                  +                        L.to.x += w;
                                                  +                        L.to.y += x;
                                                  +                        for (var p = 0; p < L.points.length; p++) {
                                                  +                            var C = L.points[p];
                                                  +                            C.x += w;
                                                  +                            C.y += x
                                                  +                        }
                                                  +                    }
                                                  +                    v = Utils.copy(L);
                                                  +                    if (!v.dataAttributes) {
                                                  +                        v.dataAttributes = []
                                                  +                    }
                                                  +                    for (var A = 0; A < v.dataAttributes.length; A++) {
                                                  +                        var B = v.dataAttributes[A];
                                                  +                        B.id = Utils.newId()
                                                  +                    }
                                                  +                    if (L.from.id != null) {
                                                  +                        v.from.id = this.presetedIds[L.from.id]
                                                  +                    }
                                                  +                    if (L.to.id != null) {
                                                  +                        v.to.id = this.presetedIds[L.to.id]
                                                  +                    }
                                                  +                    v.id = D;
                                                  +                    H.push(v);
                                                  +                    K.push(D);
                                                  +                    if (L.group) {
                                                  +                        var J = this.presetedIds[L.group];
                                                  +                        v.group = J
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            Model.addMulti(H);
                                                  +            for (var y = 0; y < H.length; y++) {
                                                  +                var L = H[y];
                                                  +                Designer.painter.renderShape(L)
                                                  +            }
                                                  +            Model.build();
                                                  +            this.presetIds();
                                                  +            Utils.unselect();
                                                  +            Utils.selectShape(K);
                                                  +            this.plus = true;
                                                  +            return j
                                                  +        },
                                                  +        duplicate: function() {
                                                  +            this.copy();
                                                  +            this.paste()
                                                  +        },
                                                  +        brush: function() {
                                                  +            var h = Utils.getSelected();
                                                  +            if (h.length == 0) {
                                                  +                return
                                                  +            }
                                                  +            var g = {
                                                  +                fontStyle: {},
                                                  +                lineStyle: {},
                                                  +                fillStyle: null,
                                                  +                shapeStyle: null
                                                  +            };
                                                  +            for (var i = 0; i < h.length; i++) {
                                                  +                var f = h[i];
                                                  +                if (f.name == "linker") {
                                                  +                    $.extend(g.lineStyle, f.lineStyle);
                                                  +                    $.extend(g.fontStyle, f.fontStyle)
                                                  +                } else {
                                                  +                    if (g.fillStyle == null) {
                                                  +                        g.fillStyle = {}
                                                  +                    }
                                                  +                    if (g.shapeStyle == null) {
                                                  +                        g.shapeStyle = {}
                                                  +                    }
                                                  +                    $.extend(g.lineStyle, f.lineStyle);
                                                  +                    $.extend(g.fontStyle, f.fontStyle);
                                                  +                    $.extend(g.shapeStyle, f.shapeStyle);
                                                  +                    $.extend(g.fillStyle, f.fillStyle)
                                                  +                }
                                                  +            }
                                                  +            $("#bar_brush").button("select");
                                                  +            var j = $("#designer_op_help");
                                                  +            if (j.length == 0) {
                                                  +                j = $("<div id='designer_op_help'></div>").appendTo("#designer_viewport")
                                                  +            }
                                                  +            j.html("选择目标图形并使用格式刷样式<br/>Esc取消").show();
                                                  +            $(document).unbind("keydown.cancelbrush").bind("keydown.cancelbrush",
                                                  +                function(a) {
                                                  +                    if (a.keyCode == 27) {
                                                  +                        $("#bar_brush").button("unselect");
                                                  +                        j.hide();
                                                  +                        $(document).unbind("keydown.cancelbrush");
                                                  +                        Utils.selectCallback = null;
                                                  +                        $("#bar_brush").button("disable")
                                                  +                    }
                                                  +                });
                                                  +            Utils.selectCallback = function() {
                                                  +                var b = Utils.getSelected();
                                                  +                for (var a = 0; a < b.length; a++) {
                                                  +                    var c = b[a];
                                                  +                    var d = c.fontStyle.orientation;
                                                  +                    $.extend(c.lineStyle, g.lineStyle);
                                                  +                    $.extend(c.fontStyle, g.fontStyle);
                                                  +                    if (c.name != "linker") {
                                                  +                        c.lineStyle = g.lineStyle;
                                                  +                        delete c.lineStyle.beginArrowStyle;
                                                  +                        delete c.lineStyle.endArrowStyle;
                                                  +                        c.fontStyle.orientation = d;
                                                  +                        if (g.fillStyle != null) {
                                                  +                            c.fillStyle = g.fillStyle
                                                  +                        }
                                                  +                        if (g.shapeStyle != null) {
                                                  +                            c.shapeStyle = g.shapeStyle
                                                  +                        }
                                                  +                    } else {
                                                  +                        delete c.fontStyle.orientation;
                                                  +                        delete c.fontStyle.vAlign
                                                  +                    }
                                                  +                    Designer.painter.renderShape(c)
                                                  +                }
                                                  +                Model.updateMulti(b)
                                                  +            }
                                                  +        }
                                                  +    },
                                                  +    addFunction: function(c, d) {
                                                  +        if (Designer[c]) {
                                                  +            throw "Duplicate function name!"
                                                  +        } else {
                                                  +            this[c] = d
                                                  +        }
                                                  +    },
                                                  +    painter: {
                                                  +        actions: {
                                                  +            move: function(b) {
                                                  +                this.moveTo(b.x, b.y);
                                                  +                this.prePoint = b;
                                                  +                if (this.beginPoint == null) {
                                                  +                    this.beginPoint = b
                                                  +                }
                                                  +            },
                                                  +            line: function(d) {
                                                  +                if (typeof this.webkitLineDash != "undefined" && typeof this.lineDashOffset == "undefined" && this.lineWidth != 0) {
                                                  +                    var f = this.webkitLineDash;
                                                  +                    var c = this.prePoint;
                                                  +                    var h = Utils.measureDistance(c, d);
                                                  +                    var k = 0;
                                                  +                    var b = 1 / h;
                                                  +                    var j = c;
                                                  +                    var e = 0;
                                                  +                    var g = true;
                                                  +                    while (k < 1) {
                                                  +                        k += b;
                                                  +                        if (k > 1) {
                                                  +                            k = 1
                                                  +                        }
                                                  +                        var i = {
                                                  +                            x: (1 - k) * c.x + k * d.x,
                                                  +                            y: (1 - k) * c.y + k * d.y
                                                  +                        };
                                                  +                        var a = Utils.measureDistance(j, i);
                                                  +                        if (a >= f[e] || k >= 1) {
                                                  +                            if (g) {
                                                  +                                this.lineTo(i.x, i.y)
                                                  +                            } else {
                                                  +                                this.moveTo(i.x, i.y)
                                                  +                            }
                                                  +                            g = !g;
                                                  +                            j = i;
                                                  +                            e++;
                                                  +                            if (e >= f.length) {
                                                  +                                e = 0
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    this.moveTo(d.x, d.y)
                                                  +                } else {
                                                  +                    this.lineTo(d.x, d.y)
                                                  +                }
                                                  +                this.prePoint = d;
                                                  +                if (this.beginPoint == null) {
                                                  +                    this.beginPoint = d
                                                  +                }
                                                  +            },
                                                  +            curve: function(e) {
                                                  +                if (typeof this.webkitLineDash != "undefined" && typeof this.lineDashOffset == "undefined" && this.lineWidth != 0) {
                                                  +                    var g = this.webkitLineDash;
                                                  +                    var d = this.prePoint;
                                                  +                    var i = Utils.measureDistance(d, e);
                                                  +                    var n = 0;
                                                  +                    var b = 1 / i;
                                                  +                    var l = d;
                                                  +                    var f = 0;
                                                  +                    var h = true;
                                                  +                    var c = 0;
                                                  +                    while (n < 1) {
                                                  +                        n += b;
                                                  +                        if (n > 1) {
                                                  +                            n = 1
                                                  +                        }
                                                  +                        var k = {
                                                  +                            x: d.x * Math.pow((1 - n), 3) + e.x1 * n * Math.pow((1 - n), 2) * 3 + e.x2 * Math.pow(n, 2) * (1 - n) * 3 + e.x * Math.pow(n, 3),
                                                  +                            y: d.y * Math.pow((1 - n), 3) + e.y1 * n * Math.pow((1 - n), 2) * 3 + e.y2 * Math.pow(n, 2) * (1 - n) * 3 + e.y * Math.pow(n, 3)
                                                  +                        };
                                                  +                        var a = Utils.measureDistance(l, k);
                                                  +                        if (a >= g[f] || n >= 1) {
                                                  +                            if (h) {
                                                  +                                var m = c + (n - c) / 2;
                                                  +                                var j = {
                                                  +                                    x: d.x * Math.pow((1 - m), 3) + e.x1 * m * Math.pow((1 - m), 2) * 3 + e.x2 * Math.pow(m, 2) * (1 - m) * 3 + e.x * Math.pow(m, 3),
                                                  +                                    y: d.y * Math.pow((1 - m), 3) + e.y1 * m * Math.pow((1 - m), 2) * 3 + e.y2 * Math.pow(m, 2) * (1 - m) * 3 + e.y * Math.pow(m, 3)
                                                  +                                };
                                                  +                                this.lineTo(j.x, j.y);
                                                  +                                this.lineTo(k.x, k.y)
                                                  +                            } else {
                                                  +                                this.moveTo(k.x, k.y)
                                                  +                            }
                                                  +                            h = !h;
                                                  +                            l = k;
                                                  +                            c = n;
                                                  +                            f++;
                                                  +                            if (f >= g.length) {
                                                  +                                f = 0
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    this.moveTo(e.x, e.y)
                                                  +                } else {
                                                  +                    this.bezierCurveTo(e.x1, e.y1, e.x2, e.y2, e.x, e.y)
                                                  +                }
                                                  +                this.prePoint = e;
                                                  +                if (this.beginPoint == null) {
                                                  +                    this.beginPoint = e
                                                  +                }
                                                  +            },
                                                  +            quadraticCurve: function(e) {
                                                  +                if (typeof this.webkitLineDash != "undefined" && typeof this.lineDashOffset == "undefined" && this.lineWidth != 0) {
                                                  +                    var g = this.webkitLineDash;
                                                  +                    var d = this.prePoint;
                                                  +                    var i = Utils.measureDistance(d, e);
                                                  +                    var n = 0;
                                                  +                    var b = 1 / i;
                                                  +                    var l = d;
                                                  +                    var f = 0;
                                                  +                    var h = true;
                                                  +                    var c = 0;
                                                  +                    while (n < 1) {
                                                  +                        n += b;
                                                  +                        if (n > 1) {
                                                  +                            n = 1
                                                  +                        }
                                                  +                        var k = {
                                                  +                            x: d.x * Math.pow((1 - n), 2) + e.x1 * n * (1 - n) * 2 + e.x * Math.pow(n, 2),
                                                  +                            y: d.y * Math.pow((1 - n), 2) + e.y1 * n * (1 - n) * 2 + e.y * Math.pow(n, 2)
                                                  +                        };
                                                  +                        var a = Utils.measureDistance(l, k);
                                                  +                        if (a >= g[f] || n >= 1) {
                                                  +                            if (h) {
                                                  +                                var m = c + (n - c) / 2;
                                                  +                                var j = {
                                                  +                                    x: d.x * Math.pow((1 - m), 2) + e.x1 * m * (1 - m) * 2 + e.x * Math.pow(m, 2),
                                                  +                                    y: d.y * Math.pow((1 - m), 2) + e.y1 * m * (1 - m) * 2 + e.y * Math.pow(m, 2)
                                                  +                                };
                                                  +                                this.lineTo(j.x, j.y);
                                                  +                                this.lineTo(k.x, k.y)
                                                  +                            } else {
                                                  +                                this.moveTo(k.x, k.y)
                                                  +                            }
                                                  +                            h = !h;
                                                  +                            l = k;
                                                  +                            c = n;
                                                  +                            f++;
                                                  +                            if (f >= g.length) {
                                                  +                                f = 0
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    this.moveTo(e.x, e.y)
                                                  +                } else {
                                                  +                    this.quadraticCurveTo(e.x1, e.y1, e.x, e.y)
                                                  +                }
                                                  +                this.prePoint = e;
                                                  +                if (this.beginPoint == null) {
                                                  +                    this.beginPoint = e
                                                  +                }
                                                  +            },
                                                  +            close: function() {
                                                  +                if (typeof this.webkitLineDash != "undefined" && typeof this.lineDashOffset == "undefined" && this.lineWidth != 0) {
                                                  +                    var f = this.webkitLineDash;
                                                  +                    var c = this.prePoint;
                                                  +                    var d = this.beginPoint;
                                                  +                    var h = Utils.measureDistance(c, d);
                                                  +                    var k = 0;
                                                  +                    var b = 1 / h;
                                                  +                    var j = c;
                                                  +                    var e = 0;
                                                  +                    var g = true;
                                                  +                    while (k < 1) {
                                                  +                        k += b;
                                                  +                        if (k > 1) {
                                                  +                            k = 1
                                                  +                        }
                                                  +                        var i = {
                                                  +                            x: (1 - k) * c.x + k * d.x,
                                                  +                            y: (1 - k) * c.y + k * d.y
                                                  +                        };
                                                  +                        var a = Utils.measureDistance(j, i);
                                                  +                        if (a >= f[e] || k >= 1) {
                                                  +                            if (g) {
                                                  +                                this.lineTo(i.x, i.y)
                                                  +                            } else {
                                                  +                                this.moveTo(i.x, i.y)
                                                  +                            }
                                                  +                            g = !g;
                                                  +                            j = i;
                                                  +                            e++;
                                                  +                            if (e >= f.length) {
                                                  +                                e = 0
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                this.closePath()
                                                  +            }
                                                  +        },
                                                  +        setLineDash: function(d, c) {
                                                  +            if (!d.setLineDash) {
                                                  +                d.setLineDash = function() {}
                                                  +            }
                                                  +            d.setLineDash(c);
                                                  +            d.mozDash = c;
                                                  +            d.webkitLineDash = c
                                                  +        },
                                                  +        renderShapePath: function(f, e, h) {
                                                  +            var g;
                                                  +            if (h && e.drawIcon) {
                                                  +                g = e.drawIcon(e.props.w, e.props.h)
                                                  +            } else {
                                                  +                g = e.getPath()
                                                  +            }
                                                  +            this.renderPath(f, e, g, h)
                                                  +        },
                                                  +        renderPath: function(m, o, i, t) {
                                                  +            for (var q = 0; q < i.length; q++) {
                                                  +                var s = i[q];
                                                  +                m.save();
                                                  +                m.beginPath();
                                                  +                var p = $.extend({},
                                                  +                    o.lineStyle, s.lineStyle);
                                                  +                var n = $.extend({},
                                                  +                    o.fillStyle, s.fillStyle);
                                                  +                for (var r = 0; r < s.actions.length; r++) {
                                                  +                    var j = s.actions[r];
                                                  +                    this.actions[j.action].call(m, j)
                                                  +                }
                                                  +                this.fillShape(o, m, n);
                                                  +                if (p.lineWidth) {
                                                  +                    m.lineWidth = p.lineWidth;
                                                  +                    m.strokeStyle = "rgb(" + p.lineColor + ")";
                                                  +                    if (p.lineStyle == "dashed") {
                                                  +                        if (t) {
                                                  +                            this.setLineDash(m, [p.lineWidth * 4, p.lineWidth * 2])
                                                  +                        } else {
                                                  +                            this.setLineDash(m, [p.lineWidth * 6, p.lineWidth * 3])
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (p.lineStyle == "dot") {
                                                  +                            this.setLineDash(m, [p.lineWidth, p.lineWidth * 2])
                                                  +                        } else {
                                                  +                            if (p.lineStyle == "dashdot") {
                                                  +                                this.setLineDash(m, [p.lineWidth * 6, p.lineWidth * 2, p.lineWidth, p.lineWidth * 2])
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    m.stroke()
                                                  +                }
                                                  +                m.restore()
                                                  +            }
                                                  +        },
                                                  +        drawPanelItem: function(n, m) {
                                                  +            var i = n.getContext("2d");
                                                  +            var h = Utils.copy(Schema.shapes[m]);
                                                  +            var l = {
                                                  +                x: 0,
                                                  +                y: 0,
                                                  +                w: h.props.w,
                                                  +                h: h.props.h,
                                                  +                angle: h.props.angle
                                                  +            };
                                                  +            i.clearRect(0, 0, Designer.config.panelItemWidth, Designer.config.panelItemHeight);
                                                  +            if (l.w >= Designer.config.panelItemWidth || l.h >= Designer.config.panelItemWidth) {
                                                  +                if (h.props.w >= h.props.h) {
                                                  +                    l.w = Designer.config.panelItemWidth - h.lineStyle.lineWidth * 2;
                                                  +                    l.h = parseInt(h.props.h / h.props.w * l.w)
                                                  +                } else {
                                                  +                    l.h = Designer.config.panelItemHeight - h.lineStyle.lineWidth * 2;
                                                  +                    l.w = parseInt(h.props.w / h.props.h * l.h)
                                                  +                }
                                                  +            }
                                                  +            h.props = l;
                                                  +            i.save();
                                                  +            i.lineJoin = "round";
                                                  +            i.globalAlpha = h.shapeStyle.alpha;
                                                  +            var j = (Designer.config.panelItemWidth - l.w) / 2;
                                                  +            var k = (Designer.config.panelItemHeight - l.h) / 2;
                                                  +            i.translate(j, k);
                                                  +            i.translate(l.w / 2, l.h / 2);
                                                  +            i.rotate(l.angle);
                                                  +            i.translate( - (l.w / 2), -(l.h / 2));
                                                  +            this.renderShapePath(i, h, true,
                                                  +                function() {
                                                  +                    Designer.painter.drawPanelItem(n, m)
                                                  +                });
                                                  +            this.renderMarkers(i, h, true);
                                                  +            i.restore()
                                                  +        },
                                                  +        handleShapeConfigData: function(dataArray, q, attributesJsonArray) {
                                                  +            //先去除重复的配置--在拼装数据前,先删除数据
                                                  +            var temp1;
                                                  +            for (var i = q.dataAttributes.length - 1; i >= 0 ; i--) {
                                                  +                temp1 = q.dataAttributes[i];
                                                  +                var hor = temp1.horizontal;
                                                  +                var ver = temp1.vertical;
                                                  +                if (temp1.hasOwnProperty("attributesJsonArray")) {
                                                  +                    var temp2 = temp1.dataShowConfig;
                                                  +                    if (temp2 != undefined) {
                                                  +                        temp2.value = [];
                                                  +                    }
                                                  +                    break
                                                  +                }
                                                  +            }
                                                  +            var key = q.name;
                                                  +            for (var i = 0; i < dataArray.length; i++) {
                                                  +                var temp = dataArray[i];
                                                  +                var showType = temp.showType;
                                                  +                var horizontal = temp.horizontal;
                                                  +                horizontal = horizontal.toLowerCase();
                                                  +                var verity = temp.verity;
                                                  +                verity = verity.toLowerCase();
                                                  +                if (verity == "center") {verity = "middle";}
                                                  +                if (showType == "text" || showType == "attribute") {
                                                  +                    var cfgContent = temp.cfgContent;
                                                  +                    var params = {
                                                  +                        "w":30,
                                                  +                        "h":30,
                                                  +                        "textw": 20,
                                                  +                        "texth": 17,
                                                  +                        "imgT": 0,
                                                  +                        "category":"custom",
                                                  +                        "icon":"",
                                                  +                        "name":key,
                                                  +                        "showName":false,
                                                  +                        "showType":"text", //text  icon
                                                  +                        "type":"string",
                                                  +                        "value":cfgContent,
                                                  +                        "horizontal":horizontal,
                                                  +                        "vertical":verity,
                                                  +                        "radius":5,
                                                  +                        "title":""
                                                  +                    };
                                                  +                    if (showType == "attribute") {
                                                  +                        var attrId = temp.key;
                                                  +                        var attrType = "string";
                                                  +                        if (attributesJsonArray.length > 0) {
                                                  +                            for (var j = 0; j < attributesJsonArray.length; j++) {
                                                  +                                var attr = attributesJsonArray[j];
                                                  +                                if (attr.key == attrId) {
                                                  +                                    attrType = attr.type;
                                                  +                                    cfgContent = attr.value;
                                                  +                                    break;
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                        var attrTypeArray = ['string', 'select', 'select_m', 'textarea'];
                                                  +                        if (temp.isShowAttrName && attrTypeArray.indexOf(attrType) >= 0 && (cfgContent + '').trim().length > 0) {
                                                  +                            cfgContent = "(" + temp.attrName + ")" +cfgContent;
                                                  +                        }
                                                  +                        if (attrType == "relation" && cfgContent.length == 0) {
                                                  +                            cfgContent = "";
                                                  +                        } else if (attrType == "relation" && cfgContent.length > 0) {
                                                  +                            var shapeIdAttrId = q.id + "_" + attrId;
                                                  +                            var relationData = relationShapeModelObject;
                                                  +                            var relationValue = "";
                                                  +                            for (var j = 0; j < cfgContent.length; j++) {
                                                  +                                if (j == cfgContent.length - 1) {
                                                  +                                    if (relationData.hasOwnProperty(shapeIdAttrId)) {
                                                  +                                        var tempRelationValue = relationData[shapeIdAttrId];
                                                  +                                        relationValue = relationValue + tempRelationValue;
                                                  +                                    }
                                                  +                                } else if (relationData.hasOwnProperty(shapeIdAttrId)) {
                                                  +                                    var tempRelationValue = relationData[shapeIdAttrId] + "|";
                                                  +                                    relationValue = relationValue + tempRelationValue;
                                                  +                                }
                                                  +                            }
                                                  +                            cfgContent = relationValue;
                                                  +                            if (temp.isShowAttrName) {
                                                  +                                cfgContent = "(" + temp.attrName + ")" + cfgContent;
                                                  +                            }
                                                  +                        }
                                                  +                        params.showType = "attr";
                                                  +                        params.value = cfgContent;
                                                  +                    }
                                                  +                    if(!q.dataAttributes){
                                                  +                        q.dataAttributes = [];
                                                  +                    }
                                                  +                    params.id = Utils.newId();
                                                  +                    params.category = "custom";
                                                  +                    if (!temp1.dataShowConfig){
                                                  +                        temp1.dataShowConfig = {};
                                                  +                        if (!temp1.dataShowConfig.value) {
                                                  +                            temp1.dataShowConfig.value = [];
                                                  +                        }
                                                  +                    }
                                                  +                    temp1.dataShowConfig.value.push(params);
                                                  +                    //Model.updateMulti([q]);
                                                  +                } else {
                                                  +                    var iconContent = temp.iconContent;
                                                  +                    var params = {
                                                  +                        "w":16,
                                                  +                        "h":16,
                                                  +                        "textw": 20,
                                                  +                        "texth": 17,
                                                  +                        "imgT": 0,
                                                  +                        "category":"custom",
                                                  +                        "icon":iconContent,
                                                  +                        "name":key,
                                                  +                        "showName":false,
                                                  +                        "showType":"icon", //text  icon
                                                  +                        "type":"string",
                                                  +                        "value":"",
                                                  +                        "horizontal":horizontal,
                                                  +                        "vertical":verity
                                                  +                    };
                                                  +                    if(!q.dataAttributes){
                                                  +                        q.dataAttributes = [];
                                                  +                    }
                                                  +                    params.id = Utils.newId();
                                                  +                    params.category = "custom";
                                                  +                    if (!temp1.dataShowConfig){
                                                  +                        temp1.dataShowConfig = {};
                                                  +                        if (!temp1.dataShowConfig.value) {
                                                  +                            temp1.dataShowConfig.value = [];
                                                  +                        }
                                                  +                    }
                                                  +                    temp1.dataShowConfig.value.push(params);
                                                  +                    //Model.updateMulti([q]);
                                                  +                }
                                                  +            }
                                                  +        },
                                                  +        renderShape: function(q) {
                                                  +            if (q.name == "linker") {
                                                  +                this.renderLinker(q);
                                                  +                return
                                                  +            }
                                                  +            var commonShapeConfig = Utils.copy(Model.define.commonShapeConfig);
                                                  +            var specialShapeConfig;
                                                  +            var attributesJsonArray;
                                                  +            var dataAttributes = q.dataAttributes;
                                                  +            for (var i = 0; i < dataAttributes.length; i++) {
                                                  +                var temp = dataAttributes[i];
                                                  +                if (temp.hasOwnProperty("attributesJsonArray")) {
                                                  +                    if (temp.dataShowConfig) {
                                                  +                        specialShapeConfig = temp.dataShowConfig.config;
                                                  +                    }
                                                  +                    attributesJsonArray = temp.attributesJsonArray;
                                                  +                    break;
                                                  +                }
                                                  +            }
                                                  +            var key = q.name;
                                                  +            if (specialShapeConfig == undefined) {
                                                  +                if (commonShapeConfig != undefined && commonShapeConfig[key] != undefined) {
                                                  +                    commonShapeConfig = commonShapeConfig[key];
                                                  +                    this.handleShapeConfigData(commonShapeConfig, q, attributesJsonArray);
                                                  +                }
                                                  +            } else {
                                                  +                if (commonShapeConfig == undefined) {
                                                  +                    this.handleShapeConfigData(Utils.copy(specialShapeConfig), q, attributesJsonArray);
                                                  +                } else {
                                                  +                    commonShapeConfig = commonShapeConfig[key];
                                                  +                    var tempCommonShapeConfig = [];
                                                  +                    if (commonShapeConfig != undefined) {
                                                  +                        var dataArray = [];
                                                  +                        var tempArray = [];
                                                  +                        for (i = 0; i < commonShapeConfig.length; i++) {
                                                  +                            var temp1 = commonShapeConfig[i];
                                                  +                            for (j = 0; j < specialShapeConfig.length; j++) {
                                                  +                                var temp2 = specialShapeConfig[j];
                                                  +                                if (temp1.horizontal == temp2.horizontal && temp1.verity == temp2.verity) {
                                                  +                                    tempArray.push(i);
                                                  +                                    break;
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                        if (tempArray.length > 0) {
                                                  +                            for (i = 0; i < commonShapeConfig.length; i++) {
                                                  +                                if (!(tempArray.indexOf(i) >= 0)) {
                                                  +                                    tempCommonShapeConfig.push(commonShapeConfig[i]);
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    if (tempCommonShapeConfig.length > 0) {
                                                  +                        dataArray = specialShapeConfig.concat(tempCommonShapeConfig);
                                                  +                    } else {
                                                  +                        dataArray = specialShapeConfig;
                                                  +                    }
                                                  +                    this.handleShapeConfigData(dataArray, q, attributesJsonArray);
                                                  +                }
                                                  +            }
                                                  +            var o = $("#" + q.id);
                                                  +            if (o.length == 0) {
                                                  +                var v = $("#designer_canvas");
                                                  +                o = $("<div id='" + q.id + "' class='shape_box'><canvas class='shape_canvas'></canvas></div>").appendTo(v)
                                                  +            }
                                                  +            var t = Utils.getShapeBox(q);
                                                  +            var w = (t.w + 20).toScale();
                                                  +            var s = (t.h + 20).toScale();
                                                  +            o.find(".shape_canvas").attr({
                                                  +                width: w,
                                                  +                height: s
                                                  +            });
                                                  +            o.css({
                                                  +                left: (t.x - 10).toScale() + "px",
                                                  +                top: (t.y - 10).toScale() + "px",
                                                  +                width: w,
                                                  +                height: s
                                                  +            });
                                                  +            var n = o.find(".shape_canvas")[0].getContext("2d");
                                                  +            n.clearRect(0, 0, q.props.w + 20, q.props.h + 20);
                                                  +            n.scale(Designer.config.scale, Designer.config.scale);
                                                  +            n.translate(10, 10);
                                                  +            n.translate(q.props.x - t.x, q.props.y - t.y);
                                                  +            n.translate(q.props.w / 2, q.props.h / 2);
                                                  +            n.rotate(q.props.angle);
                                                  +            n.translate( - (q.props.w / 2), -(q.props.h / 2));
                                                  +            var x = q.lineStyle;
                                                  +            n.globalAlpha = q.shapeStyle.alpha;
                                                  +            n.lineJoin = "round";
                                                  +            this.renderShapePath(n, q);
                                                  +            this.renderMarkers(n, q);
                                                  +            var m = q.getPath();
                                                  +            var p = Utils.copy(m[m.length - 1]);
                                                  +            p.fillStyle = {
                                                  +                type: "none"
                                                  +            };
                                                  +            p.lineStyle = {
                                                  +                lineWidth: 0
                                                  +            };
                                                  +            var u = [p];
                                                  +            this.renderPath(n, q, u);
                                                  +            this.renderText(q, t);
                                                  +            this.renderDataAttributes(q, t);
                                                  +            Designer.painter.renderShapeLink(o, q);  //节点链接
                                                  +            Designer.painter.renderSahpeAttachment(o, q); //节点附件
                                                  +            if (q.attributesJsonArray != undefined && q.attributesJsonArray.length > 0) {
                                                  +                o.find(".shape_danger").remove();
                                                  +                o.find(".shape_regulate").remove();
                                                  +                var A = false;
                                                  +                var z = false;
                                                  +                for (var r in q.attributesJsonArray) {
                                                  +                    var l = q.attributesJsonArray[r];
                                                  +                    if (l != undefined && l.key == "danger" && l.value != undefined && l.value != "" && relationShapesObject != undefined) {
                                                  +                        if (typeof l.value == 'object' && l.value.constructor == Array) {
                                                  +                            for (var m =0; m < l.value.length; m++) {
                                                  +                                if (relationShapesObject[l.value[m]] != undefined) {
                                                  +                                    A = true;
                                                  +                                    break;
                                                  +                                }
                                                  +                            }
                                                  +                        } else if (relationShapesObject[l.value] != undefined) {
                                                  +                            A = true;
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (l != undefined && l.key == "regulate" && l.value != undefined && l.value != "" && relationShapesObject != undefined) {
                                                  +                            if (typeof l.value == 'object' && l.value.constructor == Array) {
                                                  +                                for (var m =0; m < l.value.length; m++) {
                                                  +                                    if (relationShapesObject[l.value[m]] != undefined) {
                                                  +                                        z = true;
                                                  +                                        break;
                                                  +                                    }
                                                  +                                }
                                                  +                            } else if (relationShapesObject[l.value] != undefined) {
                                                  +                                z = true;
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                if (A) {
                                                  +                    var y = $("<div class='shape_danger' style='position: absolute; left: 0px; bottom: 0px; width: 20px; height: 20px;  background-image: url(../apps/com.actionsoft.apps.coe.pal/img/pl/danger.png);'></div>").appendTo(o)
                                                  +                }
                                                  +                // 伊利项目需求 控制角标不显示
                                                  +                // if (z) {
                                                  +                //     var y = $("<div class='shape_regulate' style='position: absolute; left: 0px; bottom: 0px; width: 20px; height: 20px;  background-image: url(../apps/com.actionsoft.apps.coe.pal/img/pl/regulate.png);'></div>").appendTo(o)
                                                  +                // }
                                                  +            }
                                                  +        },
                                                  +        fillShape: function(n, i, h) {
                                                  +            i.save();
                                                  +            if (h.type == "solid") {
                                                  +                i.fillStyle = "rgb(" + h.color + ")";
                                                  +                i.fill()
                                                  +            } else {
                                                  +                if (h.type == "gradient") {
                                                  +                    var j;
                                                  +                    if (h.gradientType == "linear") {
                                                  +                        j = GradientHelper.createLinearGradient(n, i, h)
                                                  +                    } else {
                                                  +                        j = GradientHelper.createRadialGradient(n, i, h)
                                                  +                    }
                                                  +                    i.fillStyle = j;
                                                  +                    i.fill()
                                                  +                } else {
                                                  +                    if (h.type == "image") {
                                                  +                        var m = h.fileId;
                                                  +                        var k = $(".shape_img[src='" + m + "']");
                                                  +                        if (k.length == 0) {
                                                  +                            k = $("<img class='shape_img' loaded='0' src=''/>").appendTo("#shape_img_container");
                                                  +                            k.bind("load.drawshape",
                                                  +                                function() {
                                                  +                                    var b = (Designer.config.panelItemWidth - n.props.w) / 2;
                                                  +                                    var a = (Designer.config.panelItemHeight - n.props.h) / 2;
                                                  +                                    i.translate(b, a);
                                                  +                                    l(k);
                                                  +                                    i.restore();
                                                  +                                    $(this).attr("loaded", "1")
                                                  +                                });
                                                  +                            k.attr("src", m)
                                                  +                        } else {
                                                  +                            if (k.attr("loaded") == "0") {
                                                  +                                k.bind("load.drawshape",
                                                  +                                    function() {
                                                  +                                        // var b = (Designer.config.panelItemWidth - n.props.w) / 2;
                                                  +                                        // var a = (Designer.config.panelItemHeight - n.props.h) / 2;
                                                  +                                        var b = 0;// by sunlh 20200716 svg shape
                                                  +                                        var a = 0;
                                                  +                                        i.translate(b, a);
                                                  +                                        l(k);
                                                  +                                        i.restore()
                                                  +                                    })
                                                  +                            } else {
                                                  +                                l(k)
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            i.restore();
                                                  +            function l(r) {
                                                  +                i.save();
                                                  +                i.clip();
                                                  +                if (h.display == "fit") {
                                                  +                    var d = r.width();
                                                  +                    var q = r.height();
                                                  +                    var a = d / q;
                                                  +                    var e = n.props.w / n.props.h;
                                                  +                    if (a > e) {
                                                  +                        var g = n.props.w;
                                                  +                        var b = 0;
                                                  +                        var s = g / a;
                                                  +                        var c = n.props.h / 2 - s / 2;
                                                  +                        i.drawImage(r[0], b, c, g, s)
                                                  +                    } else {
                                                  +                        var s = n.props.h;
                                                  +                        var c = 0;
                                                  +                        var g = s * a;
                                                  +                        var b = n.props.w / 2 - g / 2;
                                                  +                        i.drawImage(r[0], b, c, g, s)
                                                  +                    }
                                                  +                } else {
                                                  +                    if (h.display == "stretch") {
                                                  +                        i.drawImage(r[0], 0, 0, n.props.w, n.props.h)
                                                  +                    } else {
                                                  +                        if (h.display == "original") {
                                                  +                            var d = r.width();
                                                  +                            var q = r.height();
                                                  +                            var b = n.props.w / 2 - d / 2;
                                                  +                            var c = n.props.h / 2 - q / 2;
                                                  +                            i.drawImage(r[0], b, c, d, q)
                                                  +                        } else {
                                                  +                            if (h.display == "tile") {
                                                  +                                var b = 0;
                                                  +                                var d = r.width();
                                                  +                                var q = r.height();
                                                  +                                while (b < n.props.w) {
                                                  +                                    var c = 0;
                                                  +                                    while (c < n.props.h) {
                                                  +                                        i.drawImage(r[0], b, c, d, q);
                                                  +                                        c += q
                                                  +                                    }
                                                  +                                    b += d
                                                  +                                }
                                                  +                            } else {
                                                  +                                if (h.display == "static") {
                                                  +                                    var u = 0;
                                                  +                                    var t = r.width();
                                                  +                                    var f = r.height();
                                                  +                                    i.drawImage(r[0], h.imageX, h.imageY, t, f)
                                                  +                                } else {
                                                  +                                    if (h.display == "zoom") {
                                                  +                                        var u = 0;
                                                  +                                        var t = r.width();
                                                  +                                        var f = r.height();
                                                  +                                        i.drawImage(r[0], h.imageX, h.imageY, t, f, h.canvasX, h.canvasY, h.canvasW, h.canvasH)
                                                  +                                    } else {
                                                  +                                        var d = r.width();
                                                  +                                        var q = r.height();
                                                  +                                        var a = d / q;
                                                  +                                        var e = n.props.w / n.props.h;
                                                  +                                        if (a > e) {
                                                  +                                            var s = n.props.h;
                                                  +                                            var c = 0;
                                                  +                                            var g = s * a;
                                                  +                                            var b = n.props.w / 2 - g / 2;
                                                  +                                            i.drawImage(r[0], b, c, g, s)
                                                  +                                        } else {
                                                  +                                            var g = n.props.w;
                                                  +                                            var b = 0;
                                                  +                                            var s = g / a;
                                                  +                                            var c = n.props.h / 2 - s / 2;
                                                  +                                            i.drawImage(r[0], b, c, g, s)
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                i.restore()
                                                  +            }
                                                  +        },
                                                  +        renderText: function(z, r) {
                                                  +            var B = $("#" + z.id);
                                                  +            var v = B.find(".text_canvas[forshape=" + z.id + "]");
                                                  +            if (v.length == 0) {
                                                  +                v = $("<textarea class='text_canvas' forshape='" + z.id + "'></textarea>").appendTo(B);
                                                  +                v.bind("focus",
                                                  +                    function() {
                                                  +                        $(this).blur()
                                                  +                    })
                                                  +            }
                                                  +            v.attr("readonly", "readonly");
                                                  +            if (z.text == null || z.text.trim() == "") {
                                                  +                v.css({
                                                  +                    height: "0px",
                                                  +                    width: "0px"
                                                  +                }).hide();
                                                  +                return
                                                  +            }
                                                  +            var C = z.fontStyle;
                                                  +            var G = {
                                                  +                "line-height": Math.round(C.size * 1.25) + "px",
                                                  +                "font-size": C.size + "px",
                                                  +                "font-family": C.fontFamily,
                                                  +                "font-weight": C.bold ? "bold": "normal",
                                                  +                "font-style": C.italic ? "italic": "normal",
                                                  +                "text-align": C.textAlign,
                                                  +                color: "rgb(" + C.color + ")",
                                                  +                "text-decoration": C.underline ? "underline": "none",
                                                  +                opacity: z.shapeStyle.alpha
                                                  +            };
                                                  +            v.css(G);
                                                  +            v.show();
                                                  +            var s = z.getTextBlock();
                                                  +            if (z.fontStyle.orientation == "horizontal") {
                                                  +                var D = {
                                                  +                    x: s.x + s.w / 2,
                                                  +                    y: s.y + s.h / 2
                                                  +                };
                                                  +                s = {
                                                  +                    x: D.x - s.h / 2,
                                                  +                    y: D.y - s.w / 2,
                                                  +                    w: s.h,
                                                  +                    h: s.w
                                                  +                }
                                                  +            }
                                                  +            v.css({
                                                  +                width: s.w
                                                  +            });
                                                  +            v.height(0);
                                                  +            v.val(z.text);
                                                  +            v.scrollTop(99999);
                                                  +            var E = v.scrollTop();
                                                  +            var y = 0;
                                                  +            if (C.vAlign == "middle") {
                                                  +                y = (s.y + s.h / 2 - E / 2)
                                                  +            } else {
                                                  +                if (z.fontStyle.vAlign == "bottom") {
                                                  +                    y = (s.y + s.h - E)
                                                  +                } else {
                                                  +                    y = s.y
                                                  +                }
                                                  +            }
                                                  +            var t = {
                                                  +                x: s.x + s.w / 2,
                                                  +                y: y + E / 2
                                                  +            };
                                                  +            var w = z.props.angle;
                                                  +            if (w != 0) {
                                                  +                var H = {
                                                  +                    x: z.props.w / 2,
                                                  +                    y: z.props.h / 2
                                                  +                };
                                                  +                t = Utils.getRotated(H, t, w)
                                                  +            }
                                                  +            if (C.orientation == "horizontal") {
                                                  +                w = (Math.PI * 1.5 + w) % (Math.PI * 2)
                                                  +            }
                                                  +            var F = Math.round(w / (Math.PI * 2) * 360);
                                                  +            var x = "rotate(" + F + "deg) scale(" + Designer.config.scale + ")";
                                                  +            var A = s.w;
                                                  +            var u = E;
                                                  +            v.css({
                                                  +                width: A,
                                                  +                height: u,
                                                  +                left: (t.x + (z.props.x - r.x) + 10).toScale() - s.w / 2,
                                                  +                top: (t.y + (z.props.y - r.y) + 10).toScale() - E / 2,
                                                  +                "-webkit-transform": x,
                                                  +                "-ms-transform": x,
                                                  +                "-o-transform": x,
                                                  +                "-moz-transform": x,
                                                  +                transform: x
                                                  +            })
                                                  +        },
                                                  +        calculateTextLines: function(D, i, z) {
                                                  +            var E = i.w;
                                                  +            var w = i.h;
                                                  +            var J = [];
                                                  +            var H = D.split(/\n/);
                                                  +            for (var x = 0; x < H.length; x++) {
                                                  +                var B = H[x];
                                                  +                var A = z.measureText(B);
                                                  +                if (A.width <= E) {
                                                  +                    J.push(B)
                                                  +                } else {
                                                  +                    var C = B.split(/\s/);
                                                  +                    var F = "";
                                                  +                    for (var y = 0; y < C.length; y++) {
                                                  +                        var j = C[y];
                                                  +                        if (y != C.length - 1) {
                                                  +                            j += " "
                                                  +                        }
                                                  +                        var h = z.measureText(j).width;
                                                  +                        if (h > E) {
                                                  +                            for (var I = 0; I < j.length; I++) {
                                                  +                                var p = F + j[I];
                                                  +                                var G = z.measureText(p).width;
                                                  +                                if (G > E) {
                                                  +                                    J.push(F);
                                                  +                                    F = j[I]
                                                  +                                } else {
                                                  +                                    F = p
                                                  +                                }
                                                  +                            }
                                                  +                        } else {
                                                  +                            var p = F + j;
                                                  +                            var G = z.measureText(p).width;
                                                  +                            if (G > E) {
                                                  +                                J.push(F);
                                                  +                                F = j
                                                  +                            } else {
                                                  +                                F = p
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    if (F != "") {
                                                  +                        J.push(F)
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            return J
                                                  +        },
                                                  +        renderMarkers: function(n, r, v) {
                                                  +            if (r.attribute && r.attribute.markers && r.attribute.markers.length > 0) {
                                                  +                var u = r.attribute.markers;
                                                  +                var i = Schema.config.markerSize;
                                                  +                var q = 4;
                                                  +                if (v) {
                                                  +                    i = 10
                                                  +                }
                                                  +                var t = r.attribute.markerOffset;
                                                  +                if (v) {
                                                  +                    t = 5
                                                  +                }
                                                  +                var w = u.length * i + (u.length - 1) * q;
                                                  +                var p = r.props.w / 2 - w / 2;
                                                  +                for (var s = 0; s < u.length; s++) {
                                                  +                    var o = u[s];
                                                  +                    n.save();
                                                  +                    n.translate(p, r.props.h - i - t);
                                                  +                    var x = Schema.markers[o].call(r, i);
                                                  +                    this.renderPath(n, r, x);
                                                  +                    n.restore();
                                                  +                    p += i + q
                                                  +                }
                                                  +            }
                                                  +        },
                                                  +        renderDataAttributes: function(i, k) {
                                                  +            $("#" + i.id).children(".attr_canvas").remove();
                                                  +            if (!i.dataAttributes || i.dataAttributes.length == 0) {
                                                  +                return
                                                  +            }
                                                  +            var n = {
                                                  +                x: i.props.w / 2,
                                                  +                y: i.props.h / 2
                                                  +            };
                                                  +            for (var p = 0; p < i.dataAttributes.length; p++) {
                                                  +                var j = i.dataAttributes[p];
                                                  +                if (j.hasOwnProperty("attributesJsonArray")) {
                                                  +                    if (!j.dataShowConfig) {
                                                  +                        continue
                                                  +                    }
                                                  +                    var jj = j.dataShowConfig.value;
                                                  +                    if (jj && jj.length > 0) {
                                                  +                        for (var n = 0; n < jj.length; n++) {
                                                  +                            var jjj = jj[n];
                                                  +                            var l = "";
                                                  +                            var o = "";
                                                  +                            if (jjj.showName) {
                                                  +                                l = j.name + ": "
                                                  +                            }
                                                  +                            if (jjj.showType == "text" || jjj.showType == "attr") {
                                                  +                                l += jjj.value
                                                  +                            } else {
                                                  +                                if (jjj.showType == "icon") {
                                                  +                                    o = jjj.icon
                                                  +                                }
                                                  +                            }
                                                  +                            if (l == "" && o == "") {
                                                  +                                continue
                                                  +                            }
                                                  +                            m(jjj, l, o)
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                /*if (j.showType == "none") {
                                                  +                    continue
                                                  +                }
                                                  +                var l = "";
                                                  +                var o = "";
                                                  +                if (j.showName) {
                                                  +                    l = j.name + ": "
                                                  +                }
                                                  +                if (j.showType == "text" || j.showType == "attr") {
                                                  +                    l += j.value
                                                  +                } else {
                                                  +                    if (j.showType == "icon") {
                                                  +                        o = j.icon
                                                  +                    }
                                                  +                }
                                                  +                if (l == "" && o == "") {
                                                  +                    continue
                                                  +                }
                                                  +                m(j, l, o)*/
                                                  +            }
                                                  +            function m(c, y, x) {
                                                  +                var h = c.horizontal;
                                                  +                var I = c.vertical;
                                                  +                var H = $("<canvas id='attr_canvas_" + c.id + "' class='attr_canvas'></canvas>").appendTo($("#" + i.id));
                                                  +                var b = H[0].getContext("2d");
                                                  +                var w = "12px ";
                                                  +                w += i.fontStyle.fontFamily;
                                                  +                b.font = w;
                                                  +                var D = b.measureText(y).width;
                                                  +                var a = 20;
                                                  +                if (x != "") {
                                                  +                    D += 20
                                                  +                }
                                                  +                var E, F;
                                                  +                if (h == "mostleft") {
                                                  +                    E = -D - 2
                                                  +                } else {
                                                  +                    if (h == "leftedge") {
                                                  +                        E = -D / 2
                                                  +                    } else {
                                                  +                        if (h == "left") {
                                                  +                            E = 2
                                                  +                        } else {
                                                  +                            if (h == "center") {
                                                  +                                E = (i.props.w - D) / 2;
                                                  +                            } else {
                                                  +                                if (h == "right") {
                                                  +                                    E = i.props.w - D - 2;
                                                  +                                    if (h == "rightedge") {
                                                  +                                        E = i.props.w - D / 2
                                                  +                                    } else {
                                                  +                                        E = i.props.w + 2
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                if (I == "mosttop") {
                                                  +                    F = -a
                                                  +                } else {
                                                  +                    if (I == "topedge") {
                                                  +                        F = -a / 2
                                                  +                    } else {
                                                  +                        if (I == "top") {
                                                  +                            F = 0
                                                  +                        } else {
                                                  +                            if (I == "middle") {
                                                  +                                F = (i.props.h - a) / 2
                                                  +                            } else {
                                                  +                                if (I == "bottom") {
                                                  +                                    F = i.props.h - a
                                                  +                                } else {
                                                  +                                    if (I == "bottomedge") {
                                                  +                                        F = i.props.h - a / 2
                                                  +                                    } else {
                                                  +                                        F = i.props.h
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                var g = {
                                                  +                    x: E,
                                                  +                    y: F,
                                                  +                    w: D,
                                                  +                    h: a
                                                  +                };
                                                  +                var G = Utils.getRotatedBox(g, i.props.angle, n);
                                                  +                H.attr({
                                                  +                    width: G.w.toScale(),
                                                  +                    height: G.h.toScale()
                                                  +                });
                                                  +                b.font = w;
                                                  +                var d = (G.x + (i.props.x - k.x) + 10).toScale();
                                                  +                var e = (G.y + (i.props.y - k.y) + 10).toScale();
                                                  +                if (h != "mostleft" || h == "left" || h != "right") {
                                                  +                    H.css({
                                                  +                        left: d,
                                                  +                        top: e
                                                  +                    });
                                                  +                }
                                                  +                b.scale(Designer.config.scale, Designer.config.scale);
                                                  +                b.translate(G.w / 2, G.h / 2);
                                                  +                b.rotate(i.props.angle);
                                                  +                b.translate( - G.w / 2, -G.h / 2);
                                                  +                b.translate((G.w - g.w) / 2, (G.h - g.h) / 2);
                                                  +                b.globalAlpha = i.shapeStyle.alpha;
                                                  +                if (c.type == "link") {
                                                  +                    b.fillStyle = "#4183C4"
                                                  +                } else {
                                                  +                    b.fillStyle = "#333"
                                                  +                }
                                                  +                if (c.showType == "text") {
                                                  +                    b.fillStyle = "#696969";
                                                  +                }
                                                  +                if (c.showType == "attr") {
                                                  +                    b.fillStyle = "#191970";
                                                  +                }
                                                  +                b.textBaseline = "middle";
                                                  +                if (D > i.props.w) {
                                                  +                    var tempShapeWidth = i.props.w;
                                                  +                    if (tempShapeWidth < 100) {
                                                  +                        tempShapeWidth = 100;
                                                  +                    }
                                                  +                    H[0].width = tempShapeWidth + 10;
                                                  +                    H[0].height = Math.ceil(D / tempShapeWidth) * 10 + 15;
                                                  +                    for (var v = 0; v < Math.ceil(D / tempShapeWidth); v++) {
                                                  +                        var tempL = (v + 1) * tempShapeWidth;
                                                  +                        var tempX = 0;
                                                  +                        if (c.showType == "text") {
                                                  +                            b.fillStyle = "#A1A1A1";
                                                  +                        }
                                                  +                        if (c.showType == "attr") {
                                                  +                            b.fillStyle = "#6666FF";
                                                  +                        }
                                                  +                        var tempY = a / 2 + v * 12;
                                                  +                        if (tempL < D) {
                                                  +                            b.fillText(y.substring(v * tempShapeWidth / (D / y.length), tempL / (D / y.length)), tempX, tempY);
                                                  +                        } else {
                                                  +                            b.fillText(y.substring(v * tempShapeWidth / (D / y.length), D / (D / y.length)), tempX, tempY);
                                                  +                        }
                                                  +                    }
                                                  +                    if (h == "mostleft") {
                                                  +                        d = -tempShapeWidth + tempShapeWidth*0.2;
                                                  +                        H.css({
                                                  +                            left: d,
                                                  +                            top: e
                                                  +                        });
                                                  +                    }
                                                  +                    if (h == "left") {
                                                  +                        H.css({
                                                  +                            left: d,
                                                  +                            top: e - 5
                                                  +                        });
                                                  +                    }
                                                  +                    if (h == "left" && I != "bottom") {
                                                  +                        H.css({
                                                  +                            left: d,
                                                  +                            top: e
                                                  +                        });
                                                  +                    }
                                                  +                    if (h == "right") {
                                                  +                        d = tempShapeWidth / 4;
                                                  +                        H.css({
                                                  +                            left: d,
                                                  +                            top: e - 5
                                                  +                        });
                                                  +                    }
                                                  +                    if (I == "mosttop" || I == "bottom") {
                                                  +                        e = e - Math.ceil(D / tempShapeWidth) * 5;
                                                  +                        H.css({
                                                  +                            left: d,
                                                  +                            top: e
                                                  +                        });
                                                  +                    }
                                                  +                    if (h == "center" && Math.ceil(D / tempShapeWidth) > 1) {
                                                  +                        H.css({
                                                  +                            left: 15,
                                                  +                            top: e
                                                  +                        });
                                                  +                    }
                                                  +                    if (h == "right" && I != "mosttop" && I != "bottom") {
                                                  +                        d = tempShapeWidth / 4;
                                                  +                        H.css({
                                                  +                            left: d,
                                                  +                            top: e
                                                  +                        });
                                                  +                    }
                                                  +                } else {
                                                  +                    if (h == "mostleft") {
                                                  +                        d = -D;
                                                  +                        H.css({
                                                  +                            left: d,
                                                  +                            top: e
                                                  +                        });
                                                  +                    }
                                                  +                    if (h == "right") {
                                                  +                        d = i.props.w - D;
                                                  +                        H.css({
                                                  +                            left: d,
                                                  +                            top: e
                                                  +                        });
                                                  +                    }
                                                  +                    b.fillText(y, 0, a / 2);
                                                  +                }
                                                  +                if (x != "") {
                                                  +                    if (x.indexOf("&#x") >= 0) {
                                                  +                        var icon = x.split("|")[0];
                                                  +                        var iconColor = x.split("|")[1];
                                                  +                        b.font = "19px awsui-iconfont";
                                                  +                        icon = eval("('"+icon.replace('&#x','\\u').replace(';','')+"')");
                                                  +                        b.fillStyle = iconColor;
                                                  +                        b.fillText(icon, 0, a/2);
                                                  +                        iconCavCode = H[0].toDataURL("image/png");
                                                  +                        c.iconCavCode = iconCavCode;
                                                  +                    } else {
                                                  +                        var J = "/images/data-attr/" + x + ".png";
                                                  +                        var f = $(".shape_img[src='" + J + "']");
                                                  +                        if (f.length == 0) {
                                                  +                            f = $("<img class='shape_img' loaded='false' src='" + J + "'/>").appendTo("#shape_img_container")
                                                  +                        }
                                                  +                        if (f.attr("loaded") == "true") {
                                                  +                            b.drawImage(f[0], g.w - 20, 0, 20, 20)
                                                  +                        } else {
                                                  +                            f.bind("load.drawshape",
                                                  +                                function() {
                                                  +                                    $(this).attr("loaded", "true");
                                                  +                                    b.drawImage(f[0], g.w - 20, 0, 20, 20)
                                                  +                                })
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                b.beginPath();
                                                  +                b.rect(0, 0, D, a);
                                                  +                b.closePath()
                                                  +            }
                                                  +        },
                                                  +        renderLinker: function(h, k) {
                                                  +            if (k) {
                                                  +                h.points = Utils.getLinkerPoints(h)
                                                  +            }
                                                  +            if (h.linkerType == "curve" || h.linkerType == "broken") {
                                                  +                if (!h.points || h.points.length == 0) {
                                                  +                    h.points = Utils.getLinkerPoints(h)
                                                  +                }
                                                  +            }
                                                  +            var q = h.points;
                                                  +            var o = Utils.copy(h.from);
                                                  +            var a = Utils.copy(h.to);
                                                  +            if (h.attribute && h.attribute.collapseBy) {
                                                  +                $("#" + h.id).hide();
                                                  +                return
                                                  +            } else {
                                                  +                $("#" + h.id).show()
                                                  +            }
                                                  +            var p = Utils.getEndpointAngle(h, "from");
                                                  +            var d = Utils.getEndpointAngle(h, "to");
                                                  +            var b = Utils.getLinkerLineStyle(h.lineStyle);
                                                  +            l(o, h, b.beginArrowStyle, p);
                                                  +            l(a, h, b.endArrowStyle, d);
                                                  +            var B = a.x;
                                                  +            var x = a.y;
                                                  +            var y = o.x;
                                                  +            var w = o.y;
                                                  +            if (a.x < o.x) {
                                                  +                B = a.x;
                                                  +                y = o.x
                                                  +            } else {
                                                  +                B = o.x;
                                                  +                y = a.x
                                                  +            }
                                                  +            if (a.y < o.y) {
                                                  +                x = a.y;
                                                  +                w = o.y
                                                  +            } else {
                                                  +                x = o.y;
                                                  +                w = a.y
                                                  +            }
                                                  +            for (var r = 0; r < q.length; r++) {
                                                  +                var n = q[r];
                                                  +                if (n.x < B) {
                                                  +                    B = n.x
                                                  +                } else {
                                                  +                    if (n.x > y) {
                                                  +                        y = n.x
                                                  +                    }
                                                  +                }
                                                  +                if (n.y < x) {
                                                  +                    x = n.y
                                                  +                } else {
                                                  +                    if (n.y > w) {
                                                  +                        w = n.y
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            var f = {
                                                  +                x: B,
                                                  +                y: x,
                                                  +                w: y - B,
                                                  +                h: w - x
                                                  +            };
                                                  +            var C = $("#" + h.id);
                                                  +            if (C.length == 0) {
                                                  +                var g = $("#designer_canvas");
                                                  +                C = $("<div id='" + h.id + "' class='shape_box linker_box'><canvas class='shape_canvas'></canvas></div>").appendTo(g)
                                                  +            }
                                                  +            if (!Model.getShapeById(h.id)) {
                                                  +                C.css("z-index", Model.orderList.length + 1)
                                                  +            }
                                                  +            var A = C.find(".shape_canvas");
                                                  +            A.attr({
                                                  +                width: (f.w + 20).toScale(),
                                                  +                height: (f.h + 20).toScale()
                                                  +            });
                                                  +            C.css({
                                                  +                left: (f.x - 10).toScale(),
                                                  +                top: (f.y - 10).toScale(),
                                                  +                width: (f.w + 20).toScale(),
                                                  +                height: (f.h + 20).toScale()
                                                  +            });
                                                  +            var m = A[0].getContext("2d");
                                                  +            m.scale(Designer.config.scale, Designer.config.scale);
                                                  +            m.translate(10, 10);
                                                  +            var s = Utils.getLinkerLineStyle(h.lineStyle);
                                                  +            m.lineWidth = s.lineWidth;
                                                  +            m.strokeStyle = "rgb(" + s.lineColor + ")";
                                                  +            m.fillStyle = "rgb(" + s.lineColor + ")";
                                                  +            m.save();
                                                  +            var z = {
                                                  +                x: o.x - f.x,
                                                  +                y: o.y - f.y
                                                  +            };
                                                  +            var c = {
                                                  +                x: a.x - f.x,
                                                  +                y: a.y - f.y
                                                  +            };
                                                  +            m.save();
                                                  +            if (s.lineStyle == "dashed") {
                                                  +                this.setLineDash(m, [s.lineWidth * 5, s.lineWidth * 2])
                                                  +            } else {
                                                  +                if (s.lineStyle == "dot") {
                                                  +                    this.setLineDash(m, [s.lineWidth, s.lineWidth * 1.5])
                                                  +                } else {
                                                  +                    if (s.lineStyle == "dashdot") {
                                                  +                        this.setLineDash(m, [s.lineWidth * 5, s.lineWidth * 2, s.lineWidth, s.lineWidth * 2])
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            m.lineJoin = "round";
                                                  +            m.beginPath();
                                                  +            this.actions.move.call(m, z);
                                                  +            if (h.linkerType == "curve") {
                                                  +                var v = q[0];
                                                  +                var u = q[1];
                                                  +                var t = {
                                                  +                    x1: v.x - f.x,
                                                  +                    y1: v.y - f.y,
                                                  +                    x2: u.x - f.x,
                                                  +                    y2: u.y - f.y,
                                                  +                    x: c.x,
                                                  +                    y: c.y
                                                  +                };
                                                  +                this.actions.curve.call(m, t)
                                                  +            } else {
                                                  +                for (var r = 0; r < q.length; r++) {
                                                  +                    var D = q[r];
                                                  +                    this.actions.line.call(m, {
                                                  +                        x: D.x - f.x,
                                                  +                        y: D.y - f.y
                                                  +                    })
                                                  +                }
                                                  +                this.actions.line.call(m, c)
                                                  +            }
                                                  +            var j = Utils.isSelected(h.id);
                                                  +            if (j) {
                                                  +                m.shadowBlur = 4;
                                                  +                m.shadowColor = "#833";
                                                  +                if (h.linkerType == "curve" && Utils.getSelectedIds().length == 1) {}
                                                  +            }
                                                  +            m.stroke();
                                                  +            m.restore();
                                                  +            delete m.webkitLineDash;
                                                  +            e(z, p, o.id, s.beginArrowStyle, h, o.angle);
                                                  +            e(c, d, a.id, s.endArrowStyle, h, a.angle);
                                                  +            m.restore();
                                                  +            this.renderLinkerText(h);
                                                  +
                                                  +            function l(M, H, i, J) {
                                                  +                if (M.id) {
                                                  +                    var E = Model.getShapeById(M.id);
                                                  +                    if (E) {
                                                  +                        var G = {
                                                  +                            x: 0,
                                                  +                            y: 0
                                                  +                        };
                                                  +                        var I = Utils.getShapeLineStyle(E.lineStyle);
                                                  +                        var L = Utils.getLinkerLineStyle(H.lineStyle);
                                                  +                        if (i == "none" || i == "cross") {
                                                  +                            G.x = -I.lineWidth / 2
                                                  +                        } else {
                                                  +                            if (i == "solidArrow" || i == "dashedArrow") {
                                                  +                                G.x = -I.lineWidth / 2 - L.lineWidth * 1.3
                                                  +                            } else {
                                                  +                                if (i == "solidDiamond" || i == "dashedDiamond") {
                                                  +                                    G.x = -I.lineWidth / 2 - L.lineWidth
                                                  +                                } else {
                                                  +                                    G.x = -I.lineWidth / 2 - L.lineWidth / 2
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                        var K = {
                                                  +                            x: 0,
                                                  +                            y: 0
                                                  +                        };
                                                  +                        var F = Utils.getRotated(K, G, J);
                                                  +                        M.x += F.x;
                                                  +                        M.y += F.y
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            function e(W, M, Q, Y, R, E) {
                                                  +                if (Y == "normal") {
                                                  +                    var S = 12;
                                                  +                    var ac = Math.PI / 5;
                                                  +                    var V = S / Math.cos(ac);
                                                  +                    var L = W.x - V * Math.cos(M - ac);
                                                  +                    var K = W.y - V * Math.sin(M - ac);
                                                  +                    var O = W.x - V * Math.sin(Math.PI / 2 - M - ac);
                                                  +                    var N = W.y - V * Math.cos(Math.PI / 2 - M - ac);
                                                  +                    m.beginPath();
                                                  +                    m.moveTo(L, K);
                                                  +                    m.lineTo(W.x, W.y);
                                                  +                    m.lineTo(O, N);
                                                  +                    m.stroke()
                                                  +                } else {
                                                  +                    if (Y == "solidArrow") {
                                                  +                        var S = 12;
                                                  +                        var ac = Math.PI / 10;
                                                  +                        var V = S / Math.cos(ac);
                                                  +                        var L = W.x - V * Math.cos(M - ac);
                                                  +                        var K = W.y - V * Math.sin(M - ac);
                                                  +                        var O = W.x - V * Math.sin(Math.PI / 2 - M - ac);
                                                  +                        var N = W.y - V * Math.cos(Math.PI / 2 - M - ac);
                                                  +                        m.beginPath();
                                                  +                        m.moveTo(W.x, W.y);
                                                  +                        m.lineTo(L, K);
                                                  +                        m.lineTo(O, N);
                                                  +                        m.lineTo(W.x, W.y);
                                                  +                        m.closePath();
                                                  +                        m.fill();
                                                  +                        m.stroke()
                                                  +                    } else {
                                                  +                        if (Y == "dashedArrow") {
                                                  +                            m.save();
                                                  +                            var S = 12;
                                                  +                            var ac = Math.PI / 10;
                                                  +                            var V = S / Math.cos(ac);
                                                  +                            var L = W.x - V * Math.cos(M - ac);
                                                  +                            var K = W.y - V * Math.sin(M - ac);
                                                  +                            var O = W.x - V * Math.sin(Math.PI / 2 - M - ac);
                                                  +                            var N = W.y - V * Math.cos(Math.PI / 2 - M - ac);
                                                  +                            m.beginPath();
                                                  +                            m.moveTo(W.x, W.y);
                                                  +                            m.lineTo(L, K);
                                                  +                            m.lineTo(O, N);
                                                  +                            m.lineTo(W.x, W.y);
                                                  +                            m.closePath();
                                                  +                            m.fillStyle = "white";
                                                  +                            m.fill();
                                                  +                            m.stroke();
                                                  +                            m.restore()
                                                  +                        } else {
                                                  +                            if (Y == "solidCircle") {
                                                  +                                m.save();
                                                  +                                var i = 4;
                                                  +                                var J = W.x - i * Math.cos(M);
                                                  +                                var I = W.y - i * Math.sin(M);
                                                  +                                m.beginPath();
                                                  +                                m.arc(J, I, i, 0, Math.PI * 2, false);
                                                  +                                m.closePath();
                                                  +                                m.fill();
                                                  +                                m.stroke();
                                                  +                                m.restore()
                                                  +                            } else {
                                                  +                                if (Y == "dashedCircle") {
                                                  +                                    m.save();
                                                  +                                    var i = 4;
                                                  +                                    var J = W.x - i * Math.cos(M);
                                                  +                                    var I = W.y - i * Math.sin(M);
                                                  +                                    m.beginPath();
                                                  +                                    m.arc(J, I, i, 0, Math.PI * 2, false);
                                                  +                                    m.closePath();
                                                  +                                    m.fillStyle = "white";
                                                  +                                    m.fill();
                                                  +                                    m.stroke();
                                                  +                                    m.restore()
                                                  +                                } else {
                                                  +                                    if (Y == "solidDiamond") {
                                                  +                                        m.save();
                                                  +                                        var S = 8;
                                                  +                                        var ac = Math.PI / 7;
                                                  +                                        var V = S / Math.cos(ac);
                                                  +                                        var L = W.x - V * Math.cos(M - ac);
                                                  +                                        var K = W.y - V * Math.sin(M - ac);
                                                  +                                        var O = W.x - V * Math.sin(Math.PI / 2 - M - ac);
                                                  +                                        var N = W.y - V * Math.cos(Math.PI / 2 - M - ac);
                                                  +                                        var U = W.x - S * 2 * Math.cos(M);
                                                  +                                        var T = W.y - S * 2 * Math.sin(M);
                                                  +                                        m.beginPath();
                                                  +                                        m.moveTo(W.x, W.y);
                                                  +                                        m.lineTo(L, K);
                                                  +                                        m.lineTo(U, T);
                                                  +                                        m.lineTo(O, N);
                                                  +                                        m.lineTo(W.x, W.y);
                                                  +                                        m.closePath();
                                                  +                                        m.fill();
                                                  +                                        m.stroke();
                                                  +                                        m.restore()
                                                  +                                    } else {
                                                  +                                        if (Y == "dashedDiamond") {
                                                  +                                            m.save();
                                                  +                                            var S = 8;
                                                  +                                            var ac = Math.PI / 7;
                                                  +                                            var V = S / Math.cos(ac);
                                                  +                                            var L = W.x - V * Math.cos(M - ac);
                                                  +                                            var K = W.y - V * Math.sin(M - ac);
                                                  +                                            var O = W.x - V * Math.sin(Math.PI / 2 - M - ac);
                                                  +                                            var N = W.y - V * Math.cos(Math.PI / 2 - M - ac);
                                                  +                                            var U = W.x - S * 2 * Math.cos(M);
                                                  +                                            var T = W.y - S * 2 * Math.sin(M);
                                                  +                                            m.beginPath();
                                                  +                                            m.moveTo(W.x, W.y);
                                                  +                                            m.lineTo(L, K);
                                                  +                                            m.lineTo(U, T);
                                                  +                                            m.lineTo(O, N);
                                                  +                                            m.lineTo(W.x, W.y);
                                                  +                                            m.closePath();
                                                  +                                            m.fillStyle = "white";
                                                  +                                            m.fill();
                                                  +                                            m.stroke();
                                                  +                                            m.restore()
                                                  +                                        } else {
                                                  +                                            if (Y == "cross") {
                                                  +                                                var H = 6;
                                                  +                                                var P = 14;
                                                  +                                                var ab = H * Math.cos(Math.PI / 2 - M);
                                                  +                                                var aa = H * Math.sin(Math.PI / 2 - M);
                                                  +                                                var Z = W.x + ab;
                                                  +                                                var G = W.y - aa;
                                                  +                                                var U = W.x - P * Math.cos(M);
                                                  +                                                var T = W.y - P * Math.sin(M);
                                                  +                                                var X = U - ab;
                                                  +                                                var F = T + aa;
                                                  +                                                m.beginPath();
                                                  +                                                m.moveTo(Z, G);
                                                  +                                                m.lineTo(X, F);
                                                  +                                                m.stroke()
                                                  +                                            }
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        },
                                                  +        renderLinkerText: function(l) {
                                                  +            var m = $("#" + l.id);
                                                  +            var q = m.find(".text_canvas");
                                                  +            if (q.length == 0) {
                                                  +                q = $("<div class='text_canvas linker_text'></div>").appendTo(m)
                                                  +            }
                                                  +            var n = l.fontStyle;
                                                  +            var p = "scale(" + Designer.config.scale + ")";
                                                  +            var r = {
                                                  +                "line-height": Math.round(n.size * 1.25) + "px",
                                                  +                "font-size": n.size + "px",
                                                  +                "font-family": n.fontFamily,
                                                  +                "font-weight": n.bold ? "bold": "normal",
                                                  +                "font-style": n.italic ? "italic": "normal",
                                                  +                "text-align": n.textAlign,
                                                  +                color: "rgb(" + n.color + ")",
                                                  +                "text-decoration": n.underline ? "underline": "none",
                                                  +                "-webkit-transform": p,
                                                  +                "-ms-transform": p,
                                                  +                "-o-transform": p,
                                                  +                "-moz-transform": p,
                                                  +                transform: p
                                                  +            };
                                                  +            q.css(r);
                                                  +            if (l.text == null || l.text == "") {
                                                  +                q.hide();
                                                  +                return
                                                  +            }
                                                  +            q.show();
                                                  +            var k = l.text.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\n/g, "<br/>");
                                                  +            q.html(k + "<br/>");
                                                  +            var j = this.getLinkerMidpoint(l);
                                                  +            var o = m.position();
                                                  +            q.css({
                                                  +                left: j.x.toScale() - o.left - q.width() / 2,
                                                  +                top: j.y.toScale() - o.top - q.height() / 2
                                                  +            })
                                                  +        },
                                                  +        getLinkerMidpoint: function(z) {
                                                  +            var w = {};
                                                  +            if (z.linkerType == "normal") {
                                                  +                w = {
                                                  +                    x: 0.5 * z.from.x + 0.5 * z.to.x,
                                                  +                    y: 0.5 * z.from.y + 0.5 * z.to.y
                                                  +                }
                                                  +            } else {
                                                  +                if (z.linkerType == "curve") {
                                                  +                    var d = z.from;
                                                  +                    var q = z.points[0];
                                                  +                    var v = z.points[1];
                                                  +                    var x = z.to;
                                                  +                    w = {
                                                  +                        x: d.x * 0.125 + q.x * 0.375 + v.x * 0.375 + x.x * 0.125,
                                                  +                        y: d.y * 0.125 + q.y * 0.375 + v.y * 0.375 + x.y * 0.125
                                                  +                    }
                                                  +                } else {
                                                  +                    var u = [];
                                                  +                    u.push(z.from);
                                                  +                    u = u.concat(z.points);
                                                  +                    u.push(z.to);
                                                  +                    var r = 0;
                                                  +                    for (var A = 1; A < u.length; A++) {
                                                  +                        var q = u[A - 1];
                                                  +                        var v = u[A];
                                                  +                        var y = Utils.measureDistance(q, v);
                                                  +                        r += y
                                                  +                    }
                                                  +                    var s = r / 2;
                                                  +                    var B = 0;
                                                  +                    for (var A = 1; A < u.length; A++) {
                                                  +                        var q = u[A - 1];
                                                  +                        var v = u[A];
                                                  +                        var y = Utils.measureDistance(q, v);
                                                  +                        var t = B + y;
                                                  +                        if (t > s) {
                                                  +                            var p = (s - B) / y;
                                                  +                            w = {
                                                  +                                x: (1 - p) * q.x + p * v.x,
                                                  +                                y: (1 - p) * q.y + p * v.y
                                                  +                            };
                                                  +                            break
                                                  +                        }
                                                  +                        B = t
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            return w
                                                  +        },
                                                  +        controlStatus: {
                                                  +            resizeDir: [],
                                                  +            rotatable: true
                                                  +        },
                                                  +        drawControls: function(m) {
                                                  +            var n = $("#shape_controls");
                                                  +            if (n.length == 0) {
                                                  +                var r = $("#designer_canvas");
                                                  +                n = $("<div id='shape_controls'></div>").appendTo(r);
                                                  +                n.append("<canvas id='controls_bounding'></canvas>");
                                                  +                n.append("<div class='shape_controller' index='0' resizeDir='tl'></div>");
                                                  +                n.append("<div class='shape_controller' index='1' resizeDir='tr'></div>");
                                                  +                n.append("<div class='shape_controller' index='2' resizeDir='br'></div>");
                                                  +                n.append("<div class='shape_controller' index='3' resizeDir='bl'></div>");
                                                  +                n.append("<div class='shape_controller' resizeDir='l'></div>");
                                                  +                n.append("<div class='shape_controller' resizeDir='t'></div>");
                                                  +                n.append("<div class='shape_controller' resizeDir='r'></div>");
                                                  +                n.append("<div class='shape_controller' resizeDir='b'></div>");
                                                  +                Designer.op.shapeResizable();
                                                  +                n.append("<canvas class='shape_rotater' width='41px' height='40px'></canvas>");
                                                  +                Designer.op.shapeRotatable();
                                                  +                n.append("<div class='group_icon change_shape_icon'></div>");
                                                  +                Designer.op.groupShapeChangable();
                                                  +                $(".shape_controller").css({
                                                  +                    "border-color": Designer.config.anchorColor,
                                                  +                    width: Designer.config.anchorSize - 2,
                                                  +                    height: Designer.config.anchorSize - 2
                                                  +                })
                                                  +            }
                                                  +            $(".shape_controller").css({
                                                  +                "z-index": Model.orderList.length
                                                  +            });
                                                  +            $(".change_shape_icon").hide();
                                                  +            n.show();
                                                  +            var p = 0;
                                                  +            var i;
                                                  +            var q;
                                                  +            if (m.length == 1) {
                                                  +                var l = Model.getShapeById(m[0]);
                                                  +                i = l.props;
                                                  +                p = l.props.angle;
                                                  +                q = l.resizeDir;
                                                  +                if (l.groupName && SchemaGroup.groupExists(l.groupName)) {
                                                  +                    $(".change_shape_icon").show()
                                                  +                }
                                                  +            } else {
                                                  +                i = Utils.getControlBox(m);
                                                  +                q = ["tl", "tr", "br", "bl"]
                                                  +            }
                                                  +            var t = true;
                                                  +            for (var o = 0; o < m.length; o++) {
                                                  +                var s = m[o];
                                                  +                var l = Model.getShapeById(s);
                                                  +                if (l.attribute && l.attribute.rotatable == false) {
                                                  +                    t = false
                                                  +                }
                                                  +                if ((l.resizeDir && l.resizeDir.length == 0) || (l.parent && m.length > 1)) {
                                                  +                    q = []
                                                  +                }
                                                  +            }
                                                  +            this.controlStatus.rotatable = t;
                                                  +            this.controlStatus.resizeDir = q;
                                                  +            this.rotateControls(i, p);
                                                  +            return n
                                                  +        },
                                                  +        rotateControls: function(R, E) {
                                                  +            var O = $("#shape_controls");
                                                  +            var N = Utils.getRotatedBox(R, E);
                                                  +            var i = N.w.toScale();
                                                  +            var Q = N.h.toScale();
                                                  +            O.css({
                                                  +                left: N.x.toScale(),
                                                  +                top: N.y.toScale(),
                                                  +                width: i,
                                                  +                height: Q,
                                                  +                "z-index": Model.orderList.length
                                                  +            });
                                                  +            var P = i + 20;
                                                  +            var K = Q + 20;
                                                  +            var S = $("#controls_bounding");
                                                  +            S.attr({
                                                  +                width: P,
                                                  +                height: K
                                                  +            });
                                                  +            var J = S[0].getContext("2d");
                                                  +            J.lineJoin = "round";
                                                  +            if (this.controlStatus.resizeDir.length == 0) {
                                                  +                J.lineWidth = 2;
                                                  +                J.strokeStyle = Designer.config.selectorColor;
                                                  +                J.globalAlpha = 0.8
                                                  +            } else {
                                                  +                J.lineWidth = 1;
                                                  +                J.strokeStyle = Designer.config.selectorColor;
                                                  +                J.globalAlpha = 0.5
                                                  +            }
                                                  +            J.save();
                                                  +            J.clearRect(0, 0, P, K);
                                                  +            J.translate(P / 2, K / 2);
                                                  +            J.rotate(E);
                                                  +            J.translate( - P / 2, -K / 2);
                                                  +            J.translate(9.5, 9.5);
                                                  +            var W = {
                                                  +                x: Math.round((R.x - N.x).toScale()),
                                                  +                y: Math.round((R.y - N.y).toScale()),
                                                  +                w: Math.floor(R.w.toScale() + 1),
                                                  +                h: Math.floor(R.h.toScale() + 1)
                                                  +            };
                                                  +            J.strokeRect(W.x, W.y, W.w, W.h);
                                                  +            J.restore();
                                                  +            var A = 0 - Designer.config.anchorSize / 2;
                                                  +            var G = {};
                                                  +            R = Utils.toScale(R);
                                                  +            N = Utils.toScale(N);
                                                  +            var D = {
                                                  +                x: (R.x + R.w / 2),
                                                  +                y: R.y + R.h / 2
                                                  +            };
                                                  +            O.children(".shape_controller").hide();
                                                  +            for (var H = 0; H < this.controlStatus.resizeDir.length; H++) {
                                                  +                var L = this.controlStatus.resizeDir[H];
                                                  +                var X = $(".shape_controller[resizeDir=" + L + "]");
                                                  +                X.show();
                                                  +                var U, V;
                                                  +                if (L.indexOf("l") >= 0) {
                                                  +                    U = R.x
                                                  +                } else {
                                                  +                    if (L.indexOf("r") >= 0) {
                                                  +                        U = R.x + R.w
                                                  +                    } else {
                                                  +                        U = R.x + R.w / 2
                                                  +                    }
                                                  +                }
                                                  +                if (L.indexOf("t") >= 0) {
                                                  +                    V = R.y
                                                  +                } else {
                                                  +                    if (L.indexOf("b") >= 0) {
                                                  +                        V = R.y + R.h
                                                  +                    } else {
                                                  +                        V = R.y + R.h / 2
                                                  +                    }
                                                  +                }
                                                  +                var T = Utils.getRotated(D, {
                                                  +                        x: U,
                                                  +                        y: V
                                                  +                    },
                                                  +                    E);
                                                  +                X.css({
                                                  +                    left: T.x - N.x + A,
                                                  +                    top: T.y - N.y + A
                                                  +                })
                                                  +            }
                                                  +            var M = Math.PI / 8;
                                                  +            O.children(".shape_controller").removeClass("s n e w");
                                                  +            if (E > M && E <= M * 3) {
                                                  +                O.children("div[resizeDir=tl]").addClass("n");
                                                  +                O.children("div[resizeDir=tr]").addClass("e");
                                                  +                O.children("div[resizeDir=br]").addClass("s");
                                                  +                O.children("div[resizeDir=bl]").addClass("w");
                                                  +                O.children("div[resizeDir=l]").addClass("n w");
                                                  +                O.children("div[resizeDir=r]").addClass("s e");
                                                  +                O.children("div[resizeDir=b]").addClass("s w");
                                                  +                O.children("div[resizeDir=t]").addClass("n e")
                                                  +            } else {
                                                  +                if (E > M * 3 && E <= M * 5) {
                                                  +                    O.children("div[resizeDir=tl]").addClass("n e");
                                                  +                    O.children("div[resizeDir=tr]").addClass("s e");
                                                  +                    O.children("div[resizeDir=br]").addClass("s w");
                                                  +                    O.children("div[resizeDir=bl]").addClass("n w");
                                                  +                    O.children("div[resizeDir=l]").addClass("n");
                                                  +                    O.children("div[resizeDir=r]").addClass("s");
                                                  +                    O.children("div[resizeDir=b]").addClass("w");
                                                  +                    O.children("div[resizeDir=t]").addClass("e")
                                                  +                } else {
                                                  +                    if (E > M * 5 && E <= M * 7) {
                                                  +                        O.children("div[resizeDir=tl]").addClass("e");
                                                  +                        O.children("div[resizeDir=tr]").addClass("s");
                                                  +                        O.children("div[resizeDir=br]").addClass("w");
                                                  +                        O.children("div[resizeDir=bl]").addClass("n");
                                                  +                        O.children("div[resizeDir=l]").addClass("n e");
                                                  +                        O.children("div[resizeDir=r]").addClass("s w");
                                                  +                        O.children("div[resizeDir=b]").addClass("n w");
                                                  +                        O.children("div[resizeDir=t]").addClass("s e")
                                                  +                    } else {
                                                  +                        if (E > M * 7 && E <= M * 9) {
                                                  +                            O.children("div[resizeDir=tl]").addClass("s e");
                                                  +                            O.children("div[resizeDir=tr]").addClass("s w");
                                                  +                            O.children("div[resizeDir=br]").addClass("n w");
                                                  +                            O.children("div[resizeDir=bl]").addClass("n e");
                                                  +                            O.children("div[resizeDir=l]").addClass("e");
                                                  +                            O.children("div[resizeDir=r]").addClass("w");
                                                  +                            O.children("div[resizeDir=b]").addClass("n");
                                                  +                            O.children("div[resizeDir=t]").addClass("s")
                                                  +                        } else {
                                                  +                            if (E > M * 9 && E <= M * 11) {
                                                  +                                O.children("div[resizeDir=tl]").addClass("s");
                                                  +                                O.children("div[resizeDir=tr]").addClass("w");
                                                  +                                O.children("div[resizeDir=br]").addClass("n");
                                                  +                                O.children("div[resizeDir=bl]").addClass("e");
                                                  +                                O.children("div[resizeDir=l]").addClass("s e");
                                                  +                                O.children("div[resizeDir=r]").addClass("n w");
                                                  +                                O.children("div[resizeDir=b]").addClass("n e");
                                                  +                                O.children("div[resizeDir=t]").addClass("s w")
                                                  +                            } else {
                                                  +                                if (E > M * 11 && E <= M * 13) {
                                                  +                                    O.children("div[resizeDir=tl]").addClass("s w");
                                                  +                                    O.children("div[resizeDir=tr]").addClass("n w");
                                                  +                                    O.children("div[resizeDir=br]").addClass("n e");
                                                  +                                    O.children("div[resizeDir=bl]").addClass("s e");
                                                  +                                    O.children("div[resizeDir=l]").addClass("s");
                                                  +                                    O.children("div[resizeDir=r]").addClass("n");
                                                  +                                    O.children("div[resizeDir=b]").addClass("e");
                                                  +                                    O.children("div[resizeDir=t]").addClass("w")
                                                  +                                } else {
                                                  +                                    if (E > M * 13 && E <= M * 15) {
                                                  +                                        O.children("div[resizeDir=tl]").addClass("w");
                                                  +                                        O.children("div[resizeDir=tr]").addClass("n");
                                                  +                                        O.children("div[resizeDir=br]").addClass("e");
                                                  +                                        O.children("div[resizeDir=bl]").addClass("s");
                                                  +                                        O.children("div[resizeDir=l]").addClass("s w");
                                                  +                                        O.children("div[resizeDir=r]").addClass("n e");
                                                  +                                        O.children("div[resizeDir=b]").addClass("s e");
                                                  +                                        O.children("div[resizeDir=t]").addClass("n w")
                                                  +                                    } else {
                                                  +                                        O.children("div[resizeDir=tl]").addClass("n w");
                                                  +                                        O.children("div[resizeDir=tr]").addClass("n e");
                                                  +                                        O.children("div[resizeDir=br]").addClass("s e");
                                                  +                                        O.children("div[resizeDir=bl]").addClass("s w");
                                                  +                                        O.children("div[resizeDir=l]").addClass("w");
                                                  +                                        O.children("div[resizeDir=r]").addClass("e");
                                                  +                                        O.children("div[resizeDir=b]").addClass("s");
                                                  +                                        O.children("div[resizeDir=t]").addClass("n")
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            if (this.controlStatus.rotatable) {
                                                  +                var B = O.find(".shape_rotater");
                                                  +                B.show();
                                                  +                var C = {
                                                  +                    x: R.x + R.w / 2,
                                                  +                    y: R.y - 20
                                                  +                };
                                                  +                var F = Utils.getRotated(D, C, E);
                                                  +                B.css({
                                                  +                    top: F.y - 20 - N.y,
                                                  +                    left: F.x - 20.5 - N.x
                                                  +                });
                                                  +                var I = B[0].getContext("2d");
                                                  +                I.lineWidth = 1;
                                                  +                I.strokeStyle = Designer.config.selectorColor;
                                                  +                I.fillStyle = "white";
                                                  +                I.save();
                                                  +                I.clearRect(0, 0, 41, 40);
                                                  +                I.translate(20.5, 20);
                                                  +                I.rotate(E);
                                                  +                I.translate( - 20.5, -20);
                                                  +                I.beginPath();
                                                  +                I.moveTo(20.5, 20);
                                                  +                I.lineTo(20.5, 40);
                                                  +                I.stroke();
                                                  +                I.beginPath();
                                                  +                I.arc(20.5, 20, Designer.config.rotaterSize / 2, 0, Math.PI * 2);
                                                  +                I.closePath();
                                                  +                I.fill();
                                                  +                I.stroke();
                                                  +                I.restore()
                                                  +            } else {
                                                  +                O.find(".shape_rotater").hide()
                                                  +            }
                                                  +        },
                                                  +        renderShapeLink : function(o, q) {
                                                  +            //图形的链接
                                                  +            o.find(".shape_link_point").remove();
                                                  +            if (q.link) {
                                                  +                var y = $("<div class='shape_link_point' style='cursor: pointer; position: absolute; right: -14px; bottom: -0px; width: 10px; height: 10px; color: #515151;'>" +
                                                  +                    "<i class='awsui-iconfont' awsui-qtip='链接' style='cursor: pointer; font-size: 13px;'>&#xe7d7;</i>" +
                                                  +                    "</div>").appendTo(o);
                                                  +                y.on("mousedown.link",
                                                  +                    function(I) {
                                                  +                        I.stopPropagation();
                                                  +                        var c = Model.getShapeById($(this).parent().attr("id"));
                                                  +                        myshapeLink = c;
                                                  +                        if (c != undefined) {
                                                  +                            var k = c.props.x;
                                                  +                            var j = c.props.y;
                                                  +                            var B = c.props.w;
                                                  +                            var H = c.props.h;
                                                  +                            var b = $("#link-dialog-normal_contextmenu");
                                                  +                            b.empty();
                                                  +                            var D = [];
                                                  +                            for (var G = 0; G < c.dataAttributes.length; G++) {
                                                  +                                var E = c.dataAttributes[G];
                                                  +                                if (E.linksArray) {
                                                  +                                    D = E.linksArray;
                                                  +                                    break
                                                  +                                }
                                                  +                            }
                                                  +                            var d = "";
                                                  +                            for (var f = 0; f < D.length; f++) {
                                                  +                                if (D[f].type == "file") {
                                                  +                                    d += D[f].uuid + ","
                                                  +                                }
                                                  +                            }
                                                  +                            if (D.length > 0 && window.opener) {
                                                  +                                var a = parent.window.$("#appId").val();
                                                  +                                var K = {
                                                  +                                    sid: $("#sid").val(),
                                                  +                                    cmd: "com.actionsoft.apps.coe.pal_pl_repository_designer_viewer_link_perm",
                                                  +                                    uuids: d,
                                                  +                                    filePerms: filePerms
                                                  +                                };
                                                  +                                if (window.opener) {
                                                  +                                    K.modelType = "used"
                                                  +                                } else {
                                                  +                                    if (a != undefined && a != "com.actionsoft.apps.coe.pal" && a != "") {
                                                  +                                        K.modelType = "published"
                                                  +                                    }
                                                  +                                }
                                                  +                                awsui.ajax.request({
                                                  +                                    url: "./jd",
                                                  +                                    method: "POST",
                                                  +                                    data: K,
                                                  +                                    async: false,
                                                  +                                    ok: function(L) {
                                                  +                                        var N = [];
                                                  +                                        var M = L.data.uuids;
                                                  +                                        // M = M.split(",");
                                                  +                                        for (var e = 0; e < D.length; e++) {
                                                  +                                            var h = false;
                                                  +                                            var i = D[e].uuid;
                                                  +                                            if (D[e].type == "file") {
                                                  +                                                for (var O = 0; O < M.length; O++) {
                                                  +                                                    if (M[O].linkUUID == D[e].uuid) {
                                                  +                                                        h = true;
                                                  +                                                        break
                                                  +                                                    }
                                                  +                                                }
                                                  +                                            } else {
                                                  +                                                h = true
                                                  +                                            }
                                                  +                                            if (h) {
                                                  +                                                D[e].uuid = i;
                                                  +                                                N.push(D[e])
                                                  +                                            }
                                                  +                                        }
                                                  +                                        D = N
                                                  +                                    }
                                                  +                                })
                                                  +                            }
                                                  +                            if (D.length == 0) {
                                                  +                                b.hide();
                                                  +                                $.simpleAlert("没有链接权限", "error");
                                                  +                                return
                                                  +                            } else {
                                                  +                                if (D.length == 1) {
                                                  +                                    b.hide();
                                                  +                                    openLinkUrlRewrite(D[0].type, D[0].url, D[0].target, D[0].uuid, "", D[0].name, true);
                                                  +                                    return
                                                  +                                } else {
                                                  +                                    for (var f = 0; f < D.length; f++) {
                                                  +                                        linkIndex++;
                                                  +                                        var C = D[f];
                                                  +                                        var F = '<li id="linkLi_' + linkIndex + '" ac="cut"><a target="' + C.target + '"   onclick="openLinkUrlRewrite(\'' + C.type + "','" + C.url + "','" + C.target + "','" + C.uuid + "','" + C.uuid + "','" + C.name + "', true)\">" + C.name + "</a>";
                                                  +                                        if (role == "owner") {
                                                  +                                            F += '<div class="extend" style="cursor:pointer;color:#4183C4;" ><div onclick="deleteTheLinkNode(\'' + C.url + "','" + linkIndex + "')\">删除</div></div>"
                                                  +                                        }
                                                  +                                        F += "</li>";
                                                  +                                        b.append(F)
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                            var g = Utils.getShapeByPosition(k, j, false);
                                                  +                            var J = Designer.clipboard.elements.length;
                                                  +                            if (g == null) {
                                                  +                                if (J > 0) {
                                                  +                                    b.children("li[ac=paste]").show();
                                                  +                                    b.children(".devi_clip").show()
                                                  +                                }
                                                  +                            } else {
                                                  +                                var c = g.shape;
                                                  +                                b.children("li[ac=cut]").show()
                                                  +                            }
                                                  +                            b.css({
                                                  +                                display: "block",
                                                  +                                "z-index": Model.orderList.length + 3,
                                                  +                                left: k + B + 10,
                                                  +                                top: j + H
                                                  +                            });
                                                  +                            $(document).on("mousedown.link", ":not(#link-dialog-normal_contextmenu li):not(#link-dialog-normal_contextmenu ul):not(#link-dialog-normal_contextmenu a):not(#link-dialog-normal_contextmenu div)",
                                                  +                                function(h) {
                                                  +                                    if (this.id == "link-dialog-normal_contextmenu") {
                                                  +                                        return false
                                                  +                                    }
                                                  +                                    b.hide()
                                                  +                                })
                                                  +                        }
                                                  +                        I.stopPropagation()
                                                  +                    })
                                                  +            }
                                                  +        },
                                                  +        renderSahpeAttachment: function(o, q) {
                                                  +            // 图形的附件
                                                  +            o.find(".shape_attachment_point").remove();
                                                  +            var selflist = []; //自身附件
                                                  +            var relatelist = []; //关联附件
                                                  +            var reqComplete = false; //是否请求完成
                                                  +            // 封装请求后台方法.参数控制是否异步请求
                                                  +            var reqMethod_renderSahpeAttachment = function(isAsync) {
                                                  +                // 请求后台的自身附件
                                                  +                $.ajax({
                                                  +                    method: "POST",
                                                  +                    async: isAsync,
                                                  +                    url: "./jd?sid=" + encodeURIComponent(sid) + "&cmd=com.actionsoft.apps.coe.pal_processlevel_upfile_load",
                                                  +                    data: {pl_uuid: ruuid, uuids: q.id},
                                                  +                    success: function(msg) {
                                                  +                        selflist = msg.data.list;
                                                  +                        // 请求后台的关联附件
                                                  +                        $.ajax({
                                                  +                            method: "POST",
                                                  +                            async: isAsync,
                                                  +                            url: "./jd?sid=" + encodeURIComponent(sid) + "&cmd=com.actionsoft.apps.coe.pal_processlevel_relation_upfile_load",
                                                  +                            data: {pl_uuid: ruuid, shape_uuid: q.id},
                                                  +                            success: function(msg) {
                                                  +                                relatelist = msg.data.list;
                                                  +                                reqComplete = true;
                                                  +                            }
                                                  +                        });
                                                  +                    }
                                                  +                });
                                                  +            };
                                                  +            // 使用请求
                                                  +            reqMethod_renderSahpeAttachment(true);
                                                  +            // 使用定时器,异步控制节点的附件角标的出现
                                                  +            var startTime = new Date().getTime();
                                                  +            var intervalClr = window.setInterval(function(){
                                                  +                // 5秒内请求完毕则处理,5秒内请求不完则不再处理
                                                  +                var endTime = new Date().getTime();
                                                  +                if(endTime - startTime > 5000 || reqComplete == true) {
                                                  +                    // 取消此定时器
                                                  +                    window.clearInterval(intervalClr);
                                                  +                    // 图形有附件,增加右下角图标 --begin
                                                  +                    if ( (selflist && selflist.length > 0) || (relatelist && relatelist.length > 0) ) {
                                                  +                        var y = $("<div class='shape_attachment_point' style='cursor: pointer; position: absolute; right: -14px; bottom: 16px; width: 10px; height: 10px;'>" +
                                                  +                            "<i class='awsui-iconfont' awsui-qtip='附件' style='cursor: pointer; font-size: 12px;'>&#xe705;</i>" +
                                                  +                            "</div>").appendTo(o);
                                                  +                        //将此节点的z-index置于靠顶的位置,以便鼠标可以点击到
                                                  +                        /*当连线挡住节点导致不能点击时,置于顶层,但此时每次进入设计器都会提示设计器已修改
                                                  +                        var start = Model.maxZIndex + 1;
                                                  +                        q.props.zindex = start; //q为当前shape
                                                  +                        Model.updateMulti([q]);*/
                                                  +                        // 重画节点 Designer.painter.renderShape(q);
                                                  +                        y.on("mousedown.attachment",
                                                  +                            function(I) {
                                                  +                                I.stopPropagation();
                                                  +                                // 每次点击节点附件下标再次请求后台,使用最新附件列表
                                                  +                                reqMethod_renderSahpeAttachment(false);
                                                  +                                var c = Model.getShapeById($(this).parent().attr("id")); //设计器上的图形
                                                  +                                myshapeLink = c;
                                                  +                                if (c != undefined) {
                                                  +                                    var k = c.props.x;
                                                  +                                    var j = c.props.y;
                                                  +                                    var B = c.props.w;
                                                  +                                    var H = c.props.h;
                                                  +                                    var b = $("#attachment-dialog-normal_contextmenu");
                                                  +                                    b.empty();
                                                  +                                    b.append('<iframe id="shape_attachment" name="shape_attachment" style="display:none;"></iframe>'); //用于提供下载窗口
                                                  +                                    for(var s = 0; s < 2; s++) { //循环附件和关联附件
                                                  +                                        var attalist = selflist; //统一处理附件或者关联附件
                                                  +                                        var attaTypeName = "附件"; //附件or关联附件
                                                  +                                        if(s==0) { //自身附件
                                                  +                                            //
                                                  +                                        } else { //关联附件
                                                  +                                            attalist = relatelist;
                                                  +                                            attaTypeName = "关联附件";
                                                  +                                        }
                                                  +                                        if(attalist.length > 0) {
                                                  +                                            b.append('<li  style="font-weight:500;padding-left:20px;padding-right:60px;"><span>' + attaTypeName + '</span></li>');
                                                  +                                            for(var f = 0; f < attalist.length; f++) {
                                                  +                                                var atta = attalist[f];
                                                  +                                                // 是否允许下载的逻辑判断 1.支持下载 or 2.当前用户为上传用户 or admin用户
                                                  +                                                var createUser = atta.createUser;
                                                  +                                                var download = atta.download;
                                                  +                                                var downloadPerm = false;
                                                  +                                                if(s==0) {
                                                  +                                                    // 附件 可以下载的条件: 1.支持下载 2.当前用户为上传用户
                                                  +                                                    if(download == 1 || user == createUser) {
                                                  +                                                        downloadPerm = true;
                                                  +                                                    }
                                                  +                                                } else {
                                                  +                                                    // 关联附件 可以下载的条件: 1.支持下载
                                                  +                                                    if(download == 1) {
                                                  +                                                        downloadPerm = true;
                                                  +                                                    }
                                                  +                                                }
                                                  +                                                // 拼接展示框
                                                  +                                                var F = '<li id="attachmentLi_' + f + '" ac="cut" style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:50px;"><span>' + atta.fileName + '</span>';
                                                  +                                                if( downloadPerm ) {
                                                  +                                                    F += '<div class="extend" style="cursor:pointer;color:#4183C4;padding-right:20px;"><div onclick="document.getElementById(\'shape_attachment\').contentWindow.location.href=\'' + atta.url +'\'">下载</div></div>';
                                                  +                                                }
                                                  +                                                F += "</li>";
                                                  +                                                b.append(F)
                                                  +                                            }
                                                  +                                        }
                                                  +                                    }
                                                  +                                    // 如果其他人操作致使没有附件可展示,则给出无附件的展示
                                                  +                                    if(selflist.length == 0 && relatelist.length == 0) {
                                                  +                                        b.append('<li  style="font-weight:500;padding-left:20px;padding-right:60px;"><span>' + '无附件' + '</span></li>');
                                                  +                                    }
                                                  +                                    // 控制展示与否
                                                  +                                    var g = Utils.getShapeByPosition(k, j, false);
                                                  +                                    var J = Designer.clipboard.elements.length;
                                                  +                                    if (g == null) {
                                                  +                                        if (J > 0) {
                                                  +                                            b.children("li[ac=paste]").show();
                                                  +                                            b.children(".devi_clip").show()
                                                  +                                        }
                                                  +                                    } else {
                                                  +                                        var c = g.shape;
                                                  +                                        b.children("li[ac=cut]").show()
                                                  +                                    }
                                                  +                                    b.css({
                                                  +                                        display: "block",
                                                  +                                        "z-index": Model.orderList.length + 3,
                                                  +                                        left: k + B + 10,
                                                  +                                        top: j + H
                                                  +                                    });
                                                  +                                    $(document).on("mousedown.attachment", ":not(#attachment-dialog-normal_contextmenu span):not(#attachment-dialog-normal_contextmenu li):not(#attachment-dialog-normal_contextmenu ul):not(#attachment-dialog-normal_contextmenu a):not(#attachment-dialog-normal_contextmenu div)",
                                                  +                                        function(h) {
                                                  +                                            if (this.id == "attachment-dialog-normal_contextmenu") {
                                                  +                                                return false;
                                                  +                                            }
                                                  +                                            b.hide();
                                                  +                                        });
                                                  +                                }
                                                  +                                I.stopPropagation()
                                                  +                            });
                                                  +                    }
                                                  +                    // 图形有附件,增加右下角图标 --end
                                                  +                }
                                                  +            },100); // end setInterval
                                                  +        }, // end renderSahpeAttachment
                                                  +    }
                                                  +};
                                                  +var Model = {
                                                  +    define: {},
                                                  +    persistence: {},
                                                  +    orderList: [],
                                                  +    maxZIndex: 0,
                                                  +    linkerMap: {
                                                  +        map: {},
                                                  +        add: function(c, d) {
                                                  +            if (!this.map[c]) {
                                                  +                this.map[c] = []
                                                  +            }
                                                  +            if (this.map[c].indexOf(d) < 0) {
                                                  +                this.map[c].push(d)
                                                  +            }
                                                  +        },
                                                  +        remove: function(c, d) {
                                                  +            if (this.map[c]) {
                                                  +                Utils.removeFromArray(this.map[c], d)
                                                  +            }
                                                  +        },
                                                  +        empty: function() {
                                                  +            this.map = {}
                                                  +        }
                                                  +    },
                                                  +    groupMap: {
                                                  +        map: {},
                                                  +        add: function(d, c) {
                                                  +            this.map[d] = c
                                                  +        },
                                                  +        push: function(d, c) {
                                                  +            if (!this.map[d]) {
                                                  +                this.map[d] = []
                                                  +            }
                                                  +            this.map[d].push(c)
                                                  +        },
                                                  +        remove: function(b) {
                                                  +            delete this.map[b]
                                                  +        },
                                                  +        empty: function() {
                                                  +            this.map = {}
                                                  +        }
                                                  +    },
                                                  +    create: function(l, h, j) {// designer.extend.core.js重写
                                                  +        var m = Utils.newId();
                                                  +        var o = Utils.copy(Schema.shapes[l]);
                                                  +        o.id = m;
                                                  +        o.props.x = h;
                                                  +        o.props.y = j;
                                                  +        o.props.zindex = Model.maxZIndex + 1;
                                                  +        o.props = $.extend(true, {},
                                                  +            Schema.shapeDefaults.props, o.props);
                                                  +        for (var k = 0; k < o.dataAttributes.length; k++) {
                                                  +            var i = o.dataAttributes[k];
                                                  +            i.id = Utils.newId();
                                                  +            if (i.attributesJsonArray) {
                                                  +                if (Model.define.localAttribute != undefined && Model.define.localAttribute[o.name] != undefined && Model.define.localAttribute[o.name] != null && Model.define.localAttribute[o.name].length > 0) {
                                                  +                    for (var n in Model.define.localAttribute[o.name]) {
                                                  +                        i.attributesJsonArray.push(Utils.copy(Model.define.localAttribute[o.name][n]));
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        Designer.events.push("create", o);
                                                  +        return o
                                                  +    },
                                                  +    add: function(d, c) {
                                                  +        this.addMulti([d], c)
                                                  +    },
                                                  +    addMulti: function(f, h) {
                                                  +        if (typeof h == "undefined") {
                                                  +            h = true
                                                  +        }
                                                  +        var g = [];
                                                  +        for (var i = 0; i < f.length; i++) {
                                                  +            var j = f[i];
                                                  +            g.push(Utils.copy(j));
                                                  +            this.define.elements[j.id] = Utils.copy(j);
                                                  +            this.persistence.elements[j.id] = Utils.copy(j)
                                                  +        }
                                                  +        this.build();
                                                  +        if (h) {
                                                  +            MessageSource.send("create", g)
                                                  +        }
                                                  +    },
                                                  +    update: function(b) {
                                                  +        this.updateMulti([b]);
                                                  +        Designer.painter.renderShape(b)
                                                  +    },
                                                  +    updateMulti: function(l) {
                                                  +        var h = [];
                                                  +        var g = [];
                                                  +        for (var j = 0; j < l.length; j++) {
                                                  +            var k = l[j];
                                                  +            if (this.define.elements[k.id]) {
                                                  +                this.define.elements[k.id] = Utils.copy(k);
                                                  +                g.push(Utils.copy(this.getPersistenceById(k.id)));
                                                  +                h.push(Utils.copy(k));
                                                  +                this.persistence.elements[k.id] = Utils.copy(k)
                                                  +            }
                                                  +        }
                                                  +        this.build();
                                                  +        var i = {
                                                  +            shapes: g,
                                                  +            updates: h
                                                  +        };
                                                  +        MessageSource.send("update", i)
                                                  +    },
                                                  +    remove: function(C, u) {
                                                  +        if (typeof u == "undefined") {
                                                  +            u = true
                                                  +        }
                                                  +        if (u) {
                                                  +            C = Designer.events.push("beforeRemove", C)
                                                  +        }
                                                  +        var w = [];
                                                  +        var r = [];
                                                  +        var z = [];
                                                  +        var q = [];
                                                  +        var A = [];
                                                  +        if (C.length == 0) {
                                                  +            return false
                                                  +        }
                                                  +        for (var y = 0; y < C.length; y++) {
                                                  +            var v = C[y];
                                                  +            if (v.name == "linker") {
                                                  +                A.push(v.id)
                                                  +            } else {
                                                  +                q.push(v.id)
                                                  +            }
                                                  +        }
                                                  +        for (var y = 0; y < C.length; y++) {
                                                  +            var v = C[y];
                                                  +            w.push(Utils.copy(v));
                                                  +            $("#" + v.id).remove();
                                                  +            delete this.define.elements[v.id];
                                                  +            delete this.persistence.elements[v.id];
                                                  +            this.groupMap.remove(v.group);
                                                  +            if (v.name == "linker") {
                                                  +                if (v.from.id != null) {
                                                  +                    this.linkerMap.remove(v.from.id, v.id)
                                                  +                }
                                                  +                if (v.to.id != null) {
                                                  +                    this.linkerMap.remove(v.to.id, v.id)
                                                  +                }
                                                  +            } else {
                                                  +                if (v.parent && q.indexOf(v.parent) < 0) {
                                                  +                    var t = Model.getShapeById(v.parent);
                                                  +                    if (t) {
                                                  +                        Utils.removeFromArray(t.children, v.id);
                                                  +                        if (r.indexOf(v.parent) < 0) {
                                                  +                            r.push(v.parent);
                                                  +                            z.push(t)
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                var i = this.getShapeLinkers(v.id);
                                                  +                if (i && i.length > 0) {
                                                  +                    for (var x = 0; x < i.length; x++) {
                                                  +                        var D = i[x];
                                                  +                        if (A.indexOf(D) < 0) {
                                                  +                            var B = this.getShapeById(D);
                                                  +                            if (B.from.id != null && B.from.id == v.id) {
                                                  +                                B.from.id = null;
                                                  +                                B.from.angle = null
                                                  +                            }
                                                  +                            if (B.to.id != null && B.to.id == v.id) {
                                                  +                                B.to.id = null;
                                                  +                                B.to.angle = null
                                                  +                            }
                                                  +                            if (r.indexOf(D) < 0) {
                                                  +                                r.push(D);
                                                  +                                z.push(B)
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                delete this.linkerMap.map[v.id]
                                                  +            }
                                                  +        }
                                                  +        this.build();
                                                  +        MessageSource.beginBatch();
                                                  +        MessageSource.send("remove", w);
                                                  +        if (u) {
                                                  +            var s = Designer.events.push("removed", {
                                                  +                shapes: C,
                                                  +                changedIds: r,
                                                  +                range: q
                                                  +            });
                                                  +            if (s && s.length) {
                                                  +                z = z.concat(s)
                                                  +            }
                                                  +        }
                                                  +        if (z.length > 0) {
                                                  +            this.updateMulti(z)
                                                  +        }
                                                  +        MessageSource.commit();
                                                  +        return true
                                                  +    },
                                                  +    updatePage: function(f, h) {
                                                  +        var e = $.extend(Model.define.page, f);
                                                  +        var g = {
                                                  +            page: Utils.copy(Model.persistence.page),
                                                  +            update: Utils.copy(e)
                                                  +        };
                                                  +        Model.persistence.page = Utils.copy(e);
                                                  +        MessageSource.send("updatePage", g);
                                                  +        Designer.initialize.initCanvas()
                                                  +    },
                                                  +    updateLocalAttribute: function(e) {
                                                  +        var c = $.extend(Model.define.localAttribute, e);
                                                  +        var f = {
                                                  +            localAttribute: Utils.copy(Model.persistence.localAttribute),
                                                  +            update: Utils.copy(c)
                                                  +        };
                                                  +        Model.persistence.localAttribute = Utils.copy(c);
                                                  +        MessageSource.send("updateLocalAttribute", f)
                                                  +    },
                                                  +    getShapeById: function(b) {
                                                  +        return this.define.elements[b]
                                                  +    },
                                                  +    getPersistenceById: function(b) {
                                                  +        return this.persistence.elements[b]
                                                  +    },
                                                  +    build: function() {
                                                  +        this.orderList = [];
                                                  +        this.linkerMap.empty();
                                                  +        for (var h in Model.define.elements) {
                                                  +            var g = Model.getShapeById(h);
                                                  +            this.orderList.push({
                                                  +                id: g.id,
                                                  +                zindex: g.props.zindex
                                                  +            });
                                                  +            if (g.name == "linker") {
                                                  +                if (g.from.id != null) {
                                                  +                    this.linkerMap.add(g.from.id, g.id)
                                                  +                }
                                                  +                if (g.to.id != null) {
                                                  +                    this.linkerMap.add(g.to.id, g.id)
                                                  +                }
                                                  +            }
                                                  +            if (g.group) {
                                                  +                this.groupMap.push(g.group, g.id)
                                                  +            }
                                                  +        }
                                                  +        this.orderList.sort(function i(a, b) {
                                                  +            return a.zindex - b.zindex;
                                                  +        });
                                                  +        for (var j = 0; j < Model.orderList.length; j++) {
                                                  +            var h = Model.orderList[j].id;
                                                  +            var g = Model.getShapeById(h);
                                                  +            $("#" + h).css("z-index", j);
                                                  +        }
                                                  +        var f = 0;
                                                  +        if (this.orderList.length > 0) {
                                                  +            f = this.orderList[this.orderList.length - 1].zindex
                                                  +        }
                                                  +        this.maxZIndex = f
                                                  +    },
                                                  +    getShapeLinkers: function(b) {
                                                  +        return this.linkerMap.map[b]
                                                  +    },
                                                  +    getGroupShapes: function(b) {
                                                  +        return this.groupMap.map[b]
                                                  +    },
                                                  +    changeShape: function(e, f) {
                                                  +        var d = Schema.shapes[f];
                                                  +        e.name = f;
                                                  +        e.title = d.shapeName;
                                                  +        e.attribute = d.attribute;
                                                  +        e.dataAttributes = d.dataAttributes;
                                                  +        e.path = d.path;
                                                  +        e.textBlock = d.textBlock;
                                                  +        e.anchors = d.anchors;
                                                  +        Schema.initShapeFunctions(e);
                                                  +        Designer.painter.renderShape(e)
                                                  +    }
                                                  +};
                                                  +var Utils = {
                                                  +    getDomById: function(b) {
                                                  +        return document.getElementById(b)
                                                  +    },
                                                  +    newId: function() {
                                                  +        var c = Math.random();
                                                  +        var d = (c + new Date().getTime());
                                                  +        return d.toString(16).replace(".", "")
                                                  +    },
                                                  +    getShapeByPosition: function(V, W, ab) {
                                                  +        var at = [];
                                                  +        for (var x = Model.orderList.length - 1; x >= 0; x--) {
                                                  +            var S = Model.orderList[x].id;
                                                  +            var i = $("#" + S);
                                                  +            var am = Model.getShapeById(S);
                                                  +            var ak = i.position();
                                                  +            var ac = V - ak.left;
                                                  +            var ad = W - ak.top;
                                                  +            var R = {
                                                  +                x: ak.left,
                                                  +                y: ak.top,
                                                  +                w: i.width(),
                                                  +                h: i.height()
                                                  +            };
                                                  +            var y = i.find(".shape_canvas")[0];
                                                  +            var av = y.getContext("2d");
                                                  +            var aB = this.pointInRect(V, W, R);
                                                  +            if (am.name == "linker") {
                                                  +                if (!aB) {
                                                  +                    continue
                                                  +                }
                                                  +                if (ab) {
                                                  +                    continue
                                                  +                }
                                                  +                var U = 10;
                                                  +                U = U.toScale();
                                                  +                var ae = {
                                                  +                    x: V - U,
                                                  +                    y: W - U,
                                                  +                    w: U * 2,
                                                  +                    h: U * 2
                                                  +                };
                                                  +                if (this.pointInRect(am.to.x.toScale(), am.to.y.toScale(), ae)) {
                                                  +                    var al = {
                                                  +                        type: "linker_point",
                                                  +                        point: "end",
                                                  +                        shape: am
                                                  +                    };
                                                  +                    at.push(al);
                                                  +                    continue
                                                  +                } else {
                                                  +                    if (this.pointInRect(am.from.x.toScale(), am.from.y.toScale(), ae)) {
                                                  +                        var al = {
                                                  +                            type: "linker_point",
                                                  +                            point: "from",
                                                  +                            shape: am
                                                  +                        };
                                                  +                        at.push(al);
                                                  +                        continue
                                                  +                    } else {
                                                  +                        var aj = i.find(".text_canvas");
                                                  +                        var ah = aj.position();
                                                  +                        var ae = {
                                                  +                            x: ah.left,
                                                  +                            y: ah.top,
                                                  +                            w: aj.width(),
                                                  +                            h: aj.height()
                                                  +                        };
                                                  +                        if (this.pointInRect(ac, ad, ae)) {
                                                  +                            var al = {
                                                  +                                type: "linker_text",
                                                  +                                shape: am
                                                  +                            };
                                                  +                            at.push(al);
                                                  +                            continue
                                                  +                        }
                                                  +                        U = 7;
                                                  +                        U = U.toScale();
                                                  +                        var ag = this.pointInLinker({
                                                  +                                x: V.restoreScale(),
                                                  +                                y: W.restoreScale()
                                                  +                            },
                                                  +                            am, U);
                                                  +                        if (ag > -1) {
                                                  +                            var al = {
                                                  +                                type: "linker",
                                                  +                                shape: am,
                                                  +                                pointIndex: ag
                                                  +                            };
                                                  +                            at.push(al);
                                                  +                            continue
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            } else {
                                                  +                if (aB && am.locked && !ab) {
                                                  +                    if (av.isPointInPath(ac, ad)) {
                                                  +                        var al = {
                                                  +                            type: "shape",
                                                  +                            shape: am
                                                  +                        };
                                                  +                        at.push(al)
                                                  +                    }
                                                  +                    continue
                                                  +                }
                                                  +                var U = 7;
                                                  +                if (aB) {
                                                  +                    U = U.toScale();
                                                  +                    var ae = {
                                                  +                        x: V - U,
                                                  +                        y: W - U,
                                                  +                        w: U * 2,
                                                  +                        h: U * 2
                                                  +                    };
                                                  +                    var Z = {
                                                  +                        x: am.props.x + am.props.w / 2,
                                                  +                        y: am.props.y + am.props.h / 2
                                                  +                    };
                                                  +                    var ao = am.getAnchors();
                                                  +                    var al = null;
                                                  +                    for (var aw = 0; aw < ao.length; aw++) {
                                                  +                        var ay = ao[aw];
                                                  +                        ay = this.getRotated(Z, {
                                                  +                                x: am.props.x + ay.x,
                                                  +                                y: am.props.y + ay.y
                                                  +                            },
                                                  +                            am.props.angle);
                                                  +                        if (Utils.pointInRect(ay.x.toScale(), ay.y.toScale(), ae)) {
                                                  +                            var an = Utils.getPointAngle(S, ay.x, ay.y, U);
                                                  +                            ay.angle = an;
                                                  +                            al = {
                                                  +                                type: "bounding",
                                                  +                                shape: am,
                                                  +                                linkPoint: ay
                                                  +                            };
                                                  +                            if (av.isPointInPath(ac, ad)) {
                                                  +                                al.inPath = true
                                                  +                            }
                                                  +                            break
                                                  +                        }
                                                  +                    }
                                                  +                    if (al != null) {
                                                  +                        at.push(al);
                                                  +                        continue
                                                  +                    }
                                                  +                }
                                                  +                if (am.dataAttributes) {
                                                  +                    var al = null;
                                                  +                    for (var au = 0; au < am.dataAttributes.length; au++) {
                                                  +                        var ap = am.dataAttributes[au];
                                                  +                        if (ap.type == "link" && ap.showType && ap.showType != "none") {
                                                  +                            var af = i.children("#attr_canvas_" + ap.id);
                                                  +                            if (af.length > 0) {
                                                  +                                var ai = af.position();
                                                  +                                var X = ac - ai.left;
                                                  +                                var Y = ad - ai.top;
                                                  +                                var ar = af[0].getContext("2d");
                                                  +                                if (ar.isPointInPath(X, Y)) {
                                                  +                                    al = {
                                                  +                                        type: "dataAttribute",
                                                  +                                        shape: am,
                                                  +                                        attribute: ap
                                                  +                                    };
                                                  +                                    break
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    if (al != null) {
                                                  +                        at.push(al);
                                                  +                        continue
                                                  +                    }
                                                  +                }
                                                  +                if (!aB) {
                                                  +                    continue
                                                  +                }
                                                  +                if (av.isPointInPath(ac, ad)) {
                                                  +                    if (ab) {
                                                  +                        var ao = am.getAnchors();
                                                  +                        if (ao && ao.length) {
                                                  +                            var al = {
                                                  +                                type: "shape",
                                                  +                                shape: am
                                                  +                            };
                                                  +                            at.push(al);
                                                  +                            continue
                                                  +                        } else {
                                                  +                            continue
                                                  +                        }
                                                  +                    } else {
                                                  +                        var al = {
                                                  +                            type: "shape",
                                                  +                            shape: am
                                                  +                        };
                                                  +                        at.push(al);
                                                  +                        continue
                                                  +                    }
                                                  +                } else {
                                                  +                    if (!am.attribute || typeof am.attribute.linkable == "undefined" || am.attribute.linkable) {
                                                  +                        var an = Utils.getPointAngle(S, V.restoreScale(), W.restoreScale(), U);
                                                  +                        if (an != null) {
                                                  +                            var al = null;
                                                  +                            var aC = {
                                                  +                                angle: an
                                                  +                            };
                                                  +                            for (var aa = 1; aa <= U; aa++) {
                                                  +                                if (an == 0) {
                                                  +                                    aC.x = ac + aa;
                                                  +                                    aC.y = ad
                                                  +                                } else {
                                                  +                                    if (an < Math.PI / 2) {
                                                  +                                        aC.x = ac + aa * Math.cos(an);
                                                  +                                        aC.y = ad + aa * Math.sin(an)
                                                  +                                    } else {
                                                  +                                        if (an == Math.PI / 2) {
                                                  +                                            aC.x = ac;
                                                  +                                            aC.y = ad + aa
                                                  +                                        } else {
                                                  +                                            if (an < Math.PI) {
                                                  +                                                aC.x = ac - aa * Math.sin(an - Math.PI / 2);
                                                  +                                                aC.y = ad + aa * Math.cos(an - Math.PI / 2)
                                                  +                                            } else {
                                                  +                                                if (an == Math.PI / 2) {
                                                  +                                                    aC.x = ac - aa;
                                                  +                                                    aC.y = ad
                                                  +                                                } else {
                                                  +                                                    if (an < Math.PI / 2 * 3) {
                                                  +                                                        aC.x = ac - aa * Math.cos(an - Math.PI);
                                                  +                                                        aC.y = ad - aa * Math.sin(an - Math.PI)
                                                  +                                                    } else {
                                                  +                                                        if (an == Math.PI / 2 * 3) {
                                                  +                                                            aC.x = ac;
                                                  +                                                            aC.y = ad - aa
                                                  +                                                        } else {
                                                  +                                                            aC.x = ac + aa * Math.sin(an - Math.PI / 2 * 3);
                                                  +                                                            aC.y = ad - aa * Math.cos(an - Math.PI / 2 * 3)
                                                  +                                                        }
                                                  +                                                    }
                                                  +                                                }
                                                  +                                            }
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                                if (av.isPointInPath(aC.x, aC.y)) {
                                                  +                                    aC.x += ak.left;
                                                  +                                    aC.y += ak.top;
                                                  +                                    aC.x = aC.x.restoreScale();
                                                  +                                    aC.y = aC.y.restoreScale();
                                                  +                                    al = {
                                                  +                                        type: "bounding",
                                                  +                                        shape: am,
                                                  +                                        linkPoint: aC
                                                  +                                    };
                                                  +                                    break
                                                  +                                }
                                                  +                            }
                                                  +                            if (al != null) {
                                                  +                                at.push(al);
                                                  +                                continue
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        var al = null;
                                                  +        if (at.length == 1) {
                                                  +            al = at[0]
                                                  +        }
                                                  +        if (at.length > 1 && ab) {
                                                  +            al = at[0]
                                                  +        } else {
                                                  +            if (at.length > 1) {
                                                  +                var ax = at[0];
                                                  +                if (ax.type == "bounding" && ax.type != "linker_point" && ax.type != "linker") {
                                                  +                    return ax
                                                  +                }
                                                  +                var ag = [];
                                                  +                var aA = [];
                                                  +                var aq = [];
                                                  +                for (var x = 0; x < at.length; x++) {
                                                  +                    var T = at[x];
                                                  +                    if (T.type == "bounding") {
                                                  +                        aq.push(T)
                                                  +                    } else {
                                                  +                        if (T.type == "linker") {
                                                  +                            ag.push(T)
                                                  +                        } else {
                                                  +                            if (T.type == "linker_point") {
                                                  +                                aA.push(T)
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                if (aq.length > 0 && aA.length > 0) {
                                                  +                    for (var x = 0; x < aq.length; x++) {
                                                  +                        var T = aq[x];
                                                  +                        if (T.inPath) {
                                                  +                            al = T;
                                                  +                            break
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                if (al == null && aA.length > 0) {
                                                  +                    aA.sort(function az(a, b) {
                                                  +                        if (Utils.isSelected(a.shape.id) && !Utils.isSelected(b.shape.id)) {
                                                  +                            return - 1
                                                  +                        } else {
                                                  +                            if (!Utils.isSelected(a.shape.id) && Utils.isSelected(b.shape.id)) {
                                                  +                                return 1
                                                  +                            } else {
                                                  +                                return b.shape.props.zindex - a.shape.props.zindex
                                                  +                            }
                                                  +                        }
                                                  +                    });
                                                  +                    al = aA[0]
                                                  +                }
                                                  +                if (al == null && ag.length > 0) {
                                                  +                    ag.sort(function az(a, b) {
                                                  +                        if (Utils.isSelected(a.shape.id) && !Utils.isSelected(b.shape.id)) {
                                                  +                            return - 1
                                                  +                        } else {
                                                  +                            if (!Utils.isSelected(a.shape.id) && Utils.isSelected(b.shape.id)) {
                                                  +                                return 1
                                                  +                            } else {
                                                  +                                return b.shape.props.zindex - a.shape.props.zindex
                                                  +                            }
                                                  +                        }
                                                  +                    });
                                                  +                    al = ag[0]
                                                  +                }
                                                  +                if (al == null) {
                                                  +                    al = at[0]
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        return al
                                                  +    },
                                                  +    checkCross: function(k, m, n, o) {
                                                  +        var j = false;
                                                  +        var l = (m.x - k.x) * (o.y - n.y) - (m.y - k.y) * (o.x - n.x);
                                                  +        if (l != 0) {
                                                  +            var p = ((k.y - n.y) * (o.x - n.x) - (k.x - n.x) * (o.y - n.y)) / l;
                                                  +            var d = ((k.y - n.y) * (m.x - k.x) - (k.x - n.x) * (m.y - k.y)) / l;
                                                  +            if ((p >= 0) && (p <= 1) && (d >= 0) && (d <= 1)) {
                                                  +                j = true
                                                  +            }
                                                  +        }
                                                  +        return j
                                                  +    },
                                                  +    rectCross: function(m, n) {
                                                  +        var q = m.x;
                                                  +        var o = m.x + m.w;
                                                  +        var k = m.y;
                                                  +        var s = m.y + m.h;
                                                  +        var r = n.x;
                                                  +        var p = n.x + n.w;
                                                  +        var l = n.y;
                                                  +        var t = n.y + n.h;
                                                  +        if (((q < p) && (r < o)) && ((k < t) && (l < s))) {
                                                  +            return true
                                                  +        } else {
                                                  +            return false
                                                  +        }
                                                  +    },
                                                  +    rectInRect: function(l, h) {
                                                  +        var i = {
                                                  +            x: l.x,
                                                  +            y: l.y
                                                  +        };
                                                  +        var j = {
                                                  +            x: l.x + l.w,
                                                  +            y: l.y
                                                  +        };
                                                  +        var k = {
                                                  +            x: l.x + l.w,
                                                  +            y: l.y + l.h
                                                  +        };
                                                  +        var g = {
                                                  +            x: l.x,
                                                  +            y: l.y + l.h
                                                  +        };
                                                  +        if (this.pointInRect(i.x, i.y, h) && this.pointInRect(j.x, j.y, h) && this.pointInRect(k.x, k.y, h) && this.pointInRect(g.x, g.y, h)) {
                                                  +            return true
                                                  +        } else {
                                                  +            return false
                                                  +        }
                                                  +    },
                                                  +    pointInPolygon: function(j, p) {
                                                  +        var k, l, m, n;
                                                  +        k = j;
                                                  +        l = {
                                                  +            x: -1000000,
                                                  +            y: j.y
                                                  +        };
                                                  +        var o = 0;
                                                  +        for (var i = 0; i < p.length - 1; i++) {
                                                  +            m = p[i];
                                                  +            n = p[i + 1];
                                                  +            if (Utils.checkCross(k, l, m, n) == true) {
                                                  +                o++
                                                  +            }
                                                  +        }
                                                  +        m = p[p.length - 1];
                                                  +        n = p[0];
                                                  +        if (Utils.checkCross(k, l, m, n) == true) {
                                                  +            o++
                                                  +        }
                                                  +        return (o % 2 == 0) ? false: true
                                                  +    },
                                                  +    pointInRect: function(d, e, f) {
                                                  +        if (d >= f.x && d <= f.x + f.w && e >= f.y && e <= f.y + f.h) {
                                                  +            return true
                                                  +        }
                                                  +        return false
                                                  +    },
                                                  +    pointInLinker: function(q, t, s) {
                                                  +        var o = this.getLinkerLinePoints(t);
                                                  +        var v = {
                                                  +            x: q.x - s,
                                                  +            y: q.y
                                                  +        };
                                                  +        var w = {
                                                  +            x: q.x + s,
                                                  +            y: q.y
                                                  +        };
                                                  +        var x = {
                                                  +            x: q.x,
                                                  +            y: q.y - s
                                                  +        };
                                                  +        var m = {
                                                  +            x: q.x,
                                                  +            y: q.y + s
                                                  +        };
                                                  +        for (var u = 1; u < o.length; u++) {
                                                  +            var n = o[u - 1];
                                                  +            var p = o[u];
                                                  +            var r = this.checkCross(v, w, n, p);
                                                  +            if (r) {
                                                  +                return u
                                                  +            }
                                                  +            r = this.checkCross(x, m, n, p);
                                                  +            if (r) {
                                                  +                return u
                                                  +            }
                                                  +        }
                                                  +        return - 1
                                                  +    },
                                                  +    getLinkerLength: function(n) {
                                                  +        var d = this.getLinkerLinePoints(n);
                                                  +        var i = 0;
                                                  +        for (var l = 1; l < d.length; l++) {
                                                  +            var j = d[l - 1];
                                                  +            var m = d[l];
                                                  +            var k = Utils.measureDistance(j, m);
                                                  +            i += k
                                                  +        }
                                                  +        return i
                                                  +    },
                                                  +    getShapesByRange: function(j) {
                                                  +        var g = [];
                                                  +        for (var h in Model.define.elements) {
                                                  +            var f = Model.getShapeById(h);
                                                  +            var i = f.props;
                                                  +            if (f.name == "linker") {
                                                  +                i = this.getLinkerBox(f)
                                                  +            } else {
                                                  +                i = this.getShapeBox(f)
                                                  +            }
                                                  +            if (this.pointInRect(i.x, i.y, j) && this.pointInRect(i.x + i.w, i.y, j) && this.pointInRect(i.x + i.w, i.y + i.h, j) && this.pointInRect(i.x, i.y + i.h, j)) {
                                                  +                g.push(f.id)
                                                  +            }
                                                  +        }
                                                  +        return g
                                                  +    },
                                                  +    getControlBox: function(l) {
                                                  +        var j = {
                                                  +            x1: null,
                                                  +            y1: null,
                                                  +            x2: null,
                                                  +            y2: null
                                                  +        };
                                                  +        for (var h = 0; h < l.length; h++) {
                                                  +            var k = l[h];
                                                  +            var i = Model.getShapeById(k);
                                                  +            var m;
                                                  +            if (i.name == "linker") {
                                                  +                m = this.getLinkerBox(i)
                                                  +            } else {
                                                  +                m = this.getShapeBox(i)
                                                  +            }
                                                  +            if (j.x1 == null || m.x < j.x1) {
                                                  +                j.x1 = m.x
                                                  +            }
                                                  +            if (j.y1 == null || m.y < j.y1) {
                                                  +                j.y1 = m.y
                                                  +            }
                                                  +            if (j.x2 == null || m.x + m.w > j.x2) {
                                                  +                j.x2 = m.x + m.w
                                                  +            }
                                                  +            if (j.y2 == null || m.y + m.h > j.y2) {
                                                  +                j.y2 = m.y + m.h
                                                  +            }
                                                  +        }
                                                  +        var n = {
                                                  +            x: j.x1,
                                                  +            y: j.y1,
                                                  +            w: j.x2 - j.x1,
                                                  +            h: j.y2 - j.y1
                                                  +        };
                                                  +        return n
                                                  +    },
                                                  +    getShapesBounding: function(h) {
                                                  +        var i = {
                                                  +            x1: null,
                                                  +            y1: null,
                                                  +            x2: null,
                                                  +            y2: null
                                                  +        };
                                                  +        for (var l = 0; l < h.length; l++) {
                                                  +            var g = h[l];
                                                  +            var k;
                                                  +            if (g.name == "linker") {
                                                  +                k = this.getLinkerBox(g)
                                                  +            } else {
                                                  +                k = g.props
                                                  +            }
                                                  +            if (i.x1 == null || k.x < i.x1) {
                                                  +                i.x1 = k.x
                                                  +            }
                                                  +            if (i.y1 == null || k.y < i.y1) {
                                                  +                i.y1 = k.y
                                                  +            }
                                                  +            if (i.x2 == null || k.x + k.w > i.x2) {
                                                  +                i.x2 = k.x + k.w
                                                  +            }
                                                  +            if (i.y2 == null || k.y + k.h > i.y2) {
                                                  +                i.y2 = k.y + k.h
                                                  +            }
                                                  +        }
                                                  +        var j = {
                                                  +            x: i.x1,
                                                  +            y: i.y1,
                                                  +            w: i.x2 - i.x1,
                                                  +            h: i.y2 - i.y1
                                                  +        };
                                                  +        return j
                                                  +    },
                                                  +    getShapeContext: function(c) {
                                                  +        var d = Utils.getDomById(c);
                                                  +        return d.getElementsByTagName("canvas")[0].getContext("2d")
                                                  +    },
                                                  +    selectIds: [],
                                                  +    selectShape: function(s, w) {
                                                  +        if (typeof s == "string") {
                                                  +            var o = s;
                                                  +            s = [];
                                                  +            s.push(o)
                                                  +        }
                                                  +        if (s.length <= 0) {
                                                  +            return
                                                  +        }
                                                  +        var r = Utils.mergeArray([], s);
                                                  +        for (var u = 0; u < s.length; u++) {
                                                  +            var p = Model.getShapeById(s[u]);
                                                  +            if (p && p.group) {
                                                  +                var x = Model.getGroupShapes(p.group);
                                                  +                Utils.mergeArray(r, x)
                                                  +            }
                                                  +        }
                                                  +        var z = [];
                                                  +        for (var u = 0; u < r.length; u++) {
                                                  +            var y = r[u];
                                                  +            var p = Model.getShapeById(y);
                                                  +            if (p && p.parent && p.resizeDir.length == 0 && z.indexOf(p.parent) < 0) {
                                                  +                z.push(p.parent)
                                                  +            } else {
                                                  +                if (z.indexOf(y) < 0) {
                                                  +                    z.push(y)
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        s = z;
                                                  +        Utils.removeAnchors();
                                                  +        Utils.selectIds = [];
                                                  +        for (var q = 0; q < s.length; q++) {
                                                  +            var o = s[q];
                                                  +            var p = Model.getShapeById(o);
                                                  +            Utils.selectIds.push(o);
                                                  +            if (p && p.name == "linker") {
                                                  +                if (this.isLocked(p.id)) {
                                                  +                    Utils.showLockers(p)
                                                  +                } else {
                                                  +                    Designer.painter.renderLinker(p)
                                                  +                }
                                                  +            } else {
                                                  +                if (p && this.isLocked(p.id)) {
                                                  +                    Utils.showLockers(p)
                                                  +                } else {
                                                  +                    Utils.showAnchors(p)
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        var z = Utils.getSelectedIds();
                                                  +        var i = false;
                                                  +        if (z.length == 1) {
                                                  +            var t = Model.getShapeById(z[0]);
                                                  +            if (t.name == "linker") {
                                                  +                i = true;
                                                  +                Utils.showLinkerControls()
                                                  +            }
                                                  +        }
                                                  +        if (z.length > 0 && !i) {
                                                  +            var v = Designer.painter.drawControls(z)
                                                  +        }
                                                  +        if (typeof w == "undefined") {
                                                  +            w = true
                                                  +        }
                                                  +        if (this.selectCallback && w) {
                                                  +            this.selectCallback()
                                                  +        }
                                                  +        Designer.events.push("selectChanged");
                                                  +        this.showLinkerCursor()
                                                  +    },
                                                  +    selectCallback: null,
                                                  +    unselect: function() {
                                                  +        var h = this.selectIds;
                                                  +        this.selectIds = [];
                                                  +        for (var e = 0; e < h.length; e++) {
                                                  +            var g = h[e];
                                                  +            var f = Model.getShapeById(g);
                                                  +            if (f.name == "linker") {
                                                  +                Designer.painter.renderLinker(f)
                                                  +            }
                                                  +        }
                                                  +        $("#shape_controls").hide();
                                                  +        Utils.removeLockers();
                                                  +        Utils.removeAnchors();
                                                  +        if ($("#dock_content_attribute").is(":visible")) {
                                                  +            $("#tagContent1 :focus").blur()
                                                  +        }
                                                  +        Designer.events.push("selectChanged");
                                                  +        this.hideLinkerCursor();
                                                  +        this.hideLinkerControls()
                                                  +    },
                                                  +    getSelected: function() {
                                                  +        var f = [];
                                                  +        for (var e = 0; e < this.selectIds.length; e++) {
                                                  +            var g = this.selectIds[e];
                                                  +            if (!Utils.isLocked(g)) {
                                                  +                var h = Model.getShapeById(g);
                                                  +                f.push(h)
                                                  +            }
                                                  +        }
                                                  +        return f
                                                  +    },
                                                  +    getSelectedIds: function() {
                                                  +        var e = [];
                                                  +        for (var d = 0; d < this.selectIds.length; d++) {
                                                  +            var f = this.selectIds[d];
                                                  +            if (!Utils.isLocked(f)) {
                                                  +                e.push(f)
                                                  +            }
                                                  +        }
                                                  +        return e
                                                  +    },
                                                  +    getSelectedLinkers: function() {
                                                  +        var f = [];
                                                  +        for (var e = 0; e < this.selectIds.length; e++) {
                                                  +            var g = this.selectIds[e];
                                                  +            if (!Utils.isLocked(g)) {
                                                  +                var h = Model.getShapeById(g);
                                                  +                if (h.name == "linker") {
                                                  +                    f.push(h)
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        return f
                                                  +    },
                                                  +    getSelectedLinkerIds: function() {
                                                  +        var f = [];
                                                  +        for (var e = 0; e < this.selectIds.length; e++) {
                                                  +            var g = this.selectIds[e];
                                                  +            if (!Utils.isLocked(g)) {
                                                  +                var h = Model.getShapeById(g);
                                                  +                if (h.name == "linker") {
                                                  +                    f.push(g)
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        return f
                                                  +    },
                                                  +    getSelectedShapeIds: function() {
                                                  +        var f = [];
                                                  +        for (var e = 0; e < this.selectIds.length; e++) {
                                                  +            var g = this.selectIds[e];
                                                  +            if (!Utils.isLocked(g)) {
                                                  +                var h = Model.getShapeById(g);
                                                  +                if (h.name != "linker") {
                                                  +                    f.push(g)
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        return f
                                                  +    },
                                                  +    getSelectedLockedIds: function() {
                                                  +        var e = [];
                                                  +        for (var d = 0; d < this.selectIds.length; d++) {
                                                  +            var f = this.selectIds[d];
                                                  +            if (Utils.isLocked(f)) {
                                                  +                e.push(f)
                                                  +            }
                                                  +        }
                                                  +        return e
                                                  +    },
                                                  +    getSelectedGroups: function() {
                                                  +        var f = [];
                                                  +        for (var h = 0; h < this.selectIds.length; h++) {
                                                  +            var g = this.selectIds[h];
                                                  +            var e = Model.getShapeById(g);
                                                  +            if (e.group && f.indexOf(e.group) < 0) {
                                                  +                f.push(e.group)
                                                  +            }
                                                  +        }
                                                  +        return f
                                                  +    },
                                                  +    isSelected: function(b) {
                                                  +        if (this.selectIds.indexOf(b) >= 0 && !this.isLocked(b)) {
                                                  +            return true
                                                  +        }
                                                  +        return false
                                                  +    },
                                                  +    isLocked: function(b) {
                                                  +        if (Model.getShapeById(b).locked) {
                                                  +            return true
                                                  +        } else {
                                                  +            return false
                                                  +        }
                                                  +    },
                                                  +    linkerCursorTimer: null,
                                                  +    showLinkerCursor: function() {
                                                  +        this.hideLinkerCursor();
                                                  +        var C = Utils.getSelectedIds();
                                                  +        if (C.length == 1) {
                                                  +            var J = Model.getShapeById(C[0]);
                                                  +            if (J.name != "linker") {
                                                  +                var H = Model.linkerMap.map[J.id];
                                                  +                if (H && H.length) {
                                                  +                    var B = [];
                                                  +                    for (var z = 0; z < H.length; z++) {
                                                  +                        var d = H[z];
                                                  +                        var E = Model.getShapeById(d);
                                                  +                        if (J.id != E.from.id || !E.to.id) {
                                                  +                            continue
                                                  +                        }
                                                  +                        var y = this.getLinkerLength(E).toScale();
                                                  +                        var A = [];
                                                  +                        if (E.linkerType == "broken") {
                                                  +                            A.push({
                                                  +                                x: E.from.x.toScale(),
                                                  +                                y: E.from.y.toScale(),
                                                  +                                t: 0
                                                  +                            });
                                                  +                            for (var p = 0; p < E.points.length; p++) {
                                                  +                                var D = E.points[p];
                                                  +                                A.push({
                                                  +                                    x: D.x.toScale(),
                                                  +                                    y: D.y.toScale()
                                                  +                                })
                                                  +                            }
                                                  +                            A.push({
                                                  +                                x: E.to.x.toScale(),
                                                  +                                y: E.to.y.toScale()
                                                  +                            });
                                                  +                            var w = 0;
                                                  +                            for (var p = 1; p < A.length; p++) {
                                                  +                                var K = A[p - 1];
                                                  +                                var L = A[p];
                                                  +                                w += Utils.measureDistance(K, L);
                                                  +                                L.t = w / y
                                                  +                            }
                                                  +                        }
                                                  +                        var F = Math.floor(y / 120) + 1;
                                                  +                        var I = 3 / y;
                                                  +                        var i = (Math.ceil(y / 120) * 120) / y;
                                                  +                        var x = 0;
                                                  +                        while (x < y) {
                                                  +                            var G = {
                                                  +                                t: x / y,
                                                  +                                step: I,
                                                  +                                linker: E,
                                                  +                                points: A,
                                                  +                                maxT: i
                                                  +                            };
                                                  +                            B.push(G);
                                                  +                            x += 120
                                                  +                        }
                                                  +                    }
                                                  +                    this.playLinkerCursor(B)
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +    },
                                                  +    playLinkerCursor: function(l) {
                                                  +        for (var h = 0; h < l.length; h++) {
                                                  +            var j = l[h];
                                                  +            var k = $("<div class='linker_cursor'></div>").appendTo("#designer_canvas");
                                                  +            var m = j.linker;
                                                  +            var i = (m.lineStyle.lineWidth + 2).toScale();
                                                  +            if (i < 5) {
                                                  +                i = 5
                                                  +            }
                                                  +            var n = i / 2;
                                                  +            j.half = n;
                                                  +            j.dom = k;
                                                  +            k.css({
                                                  +                width: i,
                                                  +                height: i,
                                                  +                "-webkit-border-radius": n,
                                                  +                "-moz-border-radius": n,
                                                  +                "-ms-border-radius": n,
                                                  +                "-o-border-radius": n,
                                                  +                "border-radius": n,
                                                  +                "z-index": $("#" + m.id).css("z-index")
                                                  +            })
                                                  +        }
                                                  +        this.linkerCursorTimer = setInterval(function() {
                                                  +                for (var w = 0; w < l.length; w++) {
                                                  +                    var c = l[w];
                                                  +                    var t = c.linker;
                                                  +                    if (c.t >= c.maxT) {
                                                  +                        c.t = 0;
                                                  +                        c.dom.show()
                                                  +                    }
                                                  +                    var y = c.t;
                                                  +                    if (t.linkerType == "broken") {
                                                  +                        for (var v = 1; v < c.points.length; v++) {
                                                  +                            var b = c.points[v - 1];
                                                  +                            var d = c.points[v];
                                                  +                            if (y >= b.t && y < d.t) {
                                                  +                                var x = (y - b.t) / (d.t - b.t);
                                                  +                                var f = (1 - x) * b.x + x * d.x;
                                                  +                                var g = (1 - x) * b.y + x * d.y;
                                                  +                                c.dom.css({
                                                  +                                    left: f - c.half,
                                                  +                                    top: g - c.half
                                                  +                                });
                                                  +                                break
                                                  +                            }
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (t.linkerType == "curve") {
                                                  +                            var a = t.from;
                                                  +                            var b = t.points[0];
                                                  +                            var d = t.points[1];
                                                  +                            var e = t.to;
                                                  +                            var f = a.x.toScale() * Math.pow((1 - y), 3) + b.x.toScale() * y * Math.pow((1 - y), 2) * 3 + d.x.toScale() * Math.pow(y, 2) * (1 - y) * 3 + e.x.toScale() * Math.pow(y, 3);
                                                  +                            var g = a.y.toScale() * Math.pow((1 - y), 3) + b.y.toScale() * y * Math.pow((1 - y), 2) * 3 + d.y.toScale() * Math.pow(y, 2) * (1 - y) * 3 + e.y.toScale() * Math.pow(y, 3);
                                                  +                            c.dom.css({
                                                  +                                left: f - c.half,
                                                  +                                top: g - c.half
                                                  +                            })
                                                  +                        } else {
                                                  +                            var f = (1 - y) * t.from.x.toScale() + y * t.to.x.toScale();
                                                  +                            var g = (1 - y) * t.from.y.toScale() + y * t.to.y.toScale();
                                                  +                            c.dom.css({
                                                  +                                left: f - c.half,
                                                  +                                top: g - c.half
                                                  +                            })
                                                  +                        }
                                                  +                    }
                                                  +                    c.t += c.step;
                                                  +                    if (c.t >= 1) {
                                                  +                        c.dom.hide()
                                                  +                    }
                                                  +                }
                                                  +            },
                                                  +            30)
                                                  +    },
                                                  +    hideLinkerCursor: function() {
                                                  +        if (this.linkerCursorTimer) {
                                                  +            clearInterval(this.linkerCursorTimer)
                                                  +        }
                                                  +        $(".linker_cursor").remove()
                                                  +    },
                                                  +    showLinkerControls: function() {
                                                  +        this.hideLinkerControls();
                                                  +        var e = Utils.getSelectedIds();
                                                  +        var h = null;
                                                  +        if (e.length == 1) {
                                                  +            var f = Model.getShapeById(e[0]);
                                                  +            if (f.name == "linker" && f.linkerType == "curve") {
                                                  +                h = f
                                                  +            }
                                                  +        }
                                                  +        if (h == null) {
                                                  +            return
                                                  +        }
                                                  +        function g(r, s) {
                                                  +            var t = null;
                                                  +            var b = null;
                                                  +            if (s == "from") {
                                                  +                t = r.from;
                                                  +                b = r.points[0]
                                                  +            } else {
                                                  +                t = r.to;
                                                  +                b = r.points[1]
                                                  +            }
                                                  +            var q = Utils.measureDistance(t, b).toScale() - 6;
                                                  +            var c = {
                                                  +                x: (0.5 * t.x + 0.5 * b.x).toScale(),
                                                  +                y: (0.5 * t.y + 0.5 * b.y).toScale()
                                                  +            };
                                                  +            var u = Utils.getAngle(t, b) + Math.PI / 2;
                                                  +            var a = $("<div class='linker_control_line'></div>").appendTo("#designer_canvas");
                                                  +            var d = $("<div class='linker_control_point'></div>").appendTo("#designer_canvas");
                                                  +            var v = Math.round(u / (Math.PI * 2) * 360);
                                                  +            var p = "rotate(" + v + "deg)";
                                                  +            a.css({
                                                  +                left: c.x,
                                                  +                top: c.y - q / 2,
                                                  +                height: q,
                                                  +                "z-index": Model.orderList.length,
                                                  +                "-webkit-transform": p,
                                                  +                "-ms-transform": p,
                                                  +                "-o-transform": p,
                                                  +                "-moz-transform": p,
                                                  +                transform: p
                                                  +            });
                                                  +            d.css({
                                                  +                left: b.x.toScale() - 4,
                                                  +                top: b.y.toScale() - 4,
                                                  +                "z-index": Model.orderList.length
                                                  +            });
                                                  +            d.attr("ty", s);
                                                  +            d.unbind().bind("mousedown",
                                                  +                function(j) {
                                                  +                    r = Model.getShapeById(r.id);
                                                  +                    var i = null;
                                                  +                    if (s == "from") {
                                                  +                        i = r.points[0]
                                                  +                    } else {
                                                  +                        i = r.points[1]
                                                  +                    }
                                                  +                    j.stopPropagation();
                                                  +                    d.addClass("moving");
                                                  +                    Designer.op.changeState("changing_curve");
                                                  +                    $(document).bind("mousemove.change_curve",
                                                  +                        function(l) {
                                                  +                            var k = Utils.getRelativePos(l.pageX, l.pageY, $("#designer_canvas"));
                                                  +                            i.x = k.x;
                                                  +                            i.y = k.y;
                                                  +                            Designer.painter.renderLinker(r);
                                                  +                            Model.define.elements[r.id] = r;
                                                  +                            Utils.showLinkerControls();
                                                  +                            $(".linker_control_point[ty=" + d.attr("ty") + "]").addClass("moving");
                                                  +                            $(document).unbind("mouseup.changed_curve").bind("mouseup.changed_curve",
                                                  +                                function(m) {
                                                  +                                    Model.update(r);
                                                  +                                    $(document).unbind("mouseup.changed_curve")
                                                  +                                })
                                                  +                        });
                                                  +                    $(document).unbind("mouseup.change_curve").bind("mouseup.change_curve",
                                                  +                        function(k) {
                                                  +                            $(document).unbind("mouseup.change_curve");
                                                  +                            $(document).unbind("mousemove.change_curve");
                                                  +                            $(".linker_control_point").removeClass("moving");
                                                  +                            Designer.op.resetState()
                                                  +                        })
                                                  +                });
                                                  +            return d
                                                  +        }
                                                  +        g(h, "from");
                                                  +        g(h, "to")
                                                  +    },
                                                  +    hideLinkerControls: function() {
                                                  +        $(".linker_control_line").remove();
                                                  +        $(".linker_control_point").remove()
                                                  +    },
                                                  +    showAnchors: function(n) {
                                                  +        if ($(".shape_contour[forshape=" + n.id + "]").length > 0) {
                                                  +            return
                                                  +        }
                                                  +        var q = $("<div class='shape_contour' forshape='" + n.id + "'></div>").appendTo($("#designer_canvas"));
                                                  +        q.css({
                                                  +            left: n.props.x.toScale(),
                                                  +            top: n.props.y.toScale(),
                                                  +            "z-index": Model.orderList.length + 1
                                                  +        });
                                                  +        if (!Utils.isSelected(n.id)) {
                                                  +            q.addClass("hovered_contour")
                                                  +        }
                                                  +        var t = Designer.config.anchorSize - 2;
                                                  +        var u = {
                                                  +            "border-color": Designer.config.anchorColor,
                                                  +            "border-radius": Designer.config.anchorSize / 2,
                                                  +            width: t,
                                                  +            height: t
                                                  +        };
                                                  +        var v = n.getAnchors();
                                                  +        var o = {
                                                  +            x: n.props.w / 2,
                                                  +            y: n.props.h / 2
                                                  +        };
                                                  +        var r = n.props.angle;
                                                  +        for (var m = 0; m < v.length; m++) {
                                                  +            var p = v[m];
                                                  +            var l = $("<div class='shape_anchor'></div>").appendTo(q);
                                                  +            var s = this.getRotated(o, p, r);
                                                  +            u.left = s.x.toScale() - Designer.config.anchorSize / 2;
                                                  +            u.top = s.y.toScale() - Designer.config.anchorSize / 2;
                                                  +            l.css(u)
                                                  +        }
                                                  +    },
                                                  +    hideAnchors: function() {
                                                  +        $(".hovered_contour").remove()
                                                  +    },
                                                  +    removeAnchors: function() {
                                                  +        $(".shape_contour").remove()
                                                  +    },
                                                  +    showLockers: function(s) {
                                                  +        var m = $("#" + s.id);
                                                  +        var q = m.position();
                                                  +        function t() {
                                                  +            var c = $("<canvas class='shape_locker' width='10px' height='10px'></canvas>").appendTo(m);
                                                  +            var a = c[0].getContext("2d");
                                                  +            a.strokeStyle = "#777";
                                                  +            a.lineWidth = 1;
                                                  +            var b = 9;
                                                  +            a.beginPath();
                                                  +            a.moveTo(2, 2);
                                                  +            a.lineTo(b, b);
                                                  +            a.moveTo(2, b);
                                                  +            a.lineTo(b, 2);
                                                  +            a.stroke();
                                                  +            return c
                                                  +        }
                                                  +        function r(b) {
                                                  +            var a = t();
                                                  +            a.css({
                                                  +                left: b.x.toScale() - q.left - 5,
                                                  +                top: b.y.toScale() - q.top - 5
                                                  +            })
                                                  +        }
                                                  +        if (s.name != "linker") {
                                                  +            var u = s.props;
                                                  +            var v = {
                                                  +                x: u.x + u.w / 2,
                                                  +                y: u.y + u.h / 2
                                                  +            };
                                                  +            var l = this.getRotated(v, {
                                                  +                    x: u.x,
                                                  +                    y: u.y
                                                  +                },
                                                  +                s.props.angle);
                                                  +            r(l);
                                                  +            var n = this.getRotated(v, {
                                                  +                    x: u.x + u.w,
                                                  +                    y: u.y
                                                  +                },
                                                  +                s.props.angle);
                                                  +            r(n);
                                                  +            var o = this.getRotated(v, {
                                                  +                    x: u.x + u.w,
                                                  +                    y: u.y + u.h
                                                  +                },
                                                  +                s.props.angle);
                                                  +            r(o);
                                                  +            var p = this.getRotated(v, {
                                                  +                    x: u.x,
                                                  +                    y: u.y + u.h
                                                  +                },
                                                  +                s.props.angle);
                                                  +            r(p)
                                                  +        } else {
                                                  +            r(s.from);
                                                  +            r(s.to)
                                                  +        }
                                                  +    },
                                                  +    removeLockers: function() {
                                                  +        $(".shape_locker").remove()
                                                  +    },
                                                  +    measureDistance: function(g, h) {
                                                  +        var e = h.y - g.y;
                                                  +        var f = h.x - g.x;
                                                  +        return Math.sqrt(Math.pow(e, 2) + Math.pow(f, 2))
                                                  +    },
                                                  +    removeFromArray: function(f, d) {
                                                  +        var e = f.indexOf(d);
                                                  +        if (e >= 0) {
                                                  +            f.splice(e, 1)
                                                  +        }
                                                  +        return f
                                                  +    },
                                                  +    addToArray: function(f, d) {
                                                  +        var e = f.indexOf(d);
                                                  +        if (e < 0) {
                                                  +            f.push(d)
                                                  +        }
                                                  +        return f
                                                  +    },
                                                  +    mergeArray: function(e, f) {
                                                  +        for (var h = 0; h < f.length; h++) {
                                                  +            var g = f[h];
                                                  +            if (e.indexOf(g) < 0) {
                                                  +                e.push(g)
                                                  +            }
                                                  +        }
                                                  +        return e
                                                  +    },
                                                  +    getCirclePoints: function(j, k, n) {
                                                  +        var l = Math.PI / 18;
                                                  +        var o = [];
                                                  +        for (var p = 0; p < 36; p++) {
                                                  +            var i = l * p;
                                                  +            var m = {
                                                  +                x: j - Math.cos(i) * n,
                                                  +                y: k - Math.sin(i) * n,
                                                  +                angle: i
                                                  +            };
                                                  +            o.push(m)
                                                  +        }
                                                  +        return o
                                                  +    },
                                                  +    getPointAngle: function(r, i, p, F) {
                                                  +        var x = $("#" + r).position();
                                                  +        var y = Utils.getShapeContext(r);
                                                  +        i = i.toScale() - x.left;
                                                  +        p = p.toScale() - x.top;
                                                  +        var E = this.getCirclePoints(i, p, F);
                                                  +        var u = E.length;
                                                  +        var G = false;
                                                  +        for (var w = 0; w < u; w++) {
                                                  +            var D = E[w];
                                                  +            if (y.isPointInPath(D.x, D.y)) {
                                                  +                D.inPath = true;
                                                  +                G = true
                                                  +            } else {
                                                  +                D.inPath = false
                                                  +            }
                                                  +        }
                                                  +        if (G == false) {
                                                  +            return null
                                                  +        }
                                                  +        var C = null;
                                                  +        var z = null;
                                                  +        for (var w = 0; w < u; w++) {
                                                  +            var D = E[w];
                                                  +            if (!D.inPath) {
                                                  +                if (C == null) {
                                                  +                    var A = E[(w - 1 + u) % u];
                                                  +                    if (A.inPath) {
                                                  +                        C = D.angle
                                                  +                    }
                                                  +                }
                                                  +                if (z == null) {
                                                  +                    var v = E[(w + 1 + u) % u];
                                                  +                    if (v.inPath) {
                                                  +                        z = D.angle
                                                  +                    }
                                                  +                }
                                                  +                if (C != null && z != null) {
                                                  +                    break
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        var H = (Math.PI * 2 + z - C) % (Math.PI * 2) / 2;
                                                  +        var B = (C + H) % (Math.PI * 2);
                                                  +        return B
                                                  +    },
                                                  +    getAngleDir: function(c) {
                                                  +        var d = Math.PI;
                                                  +        if (c >= d / 4 && c < d / 4 * 3) {
                                                  +            return 1
                                                  +        } else {
                                                  +            if (c >= d / 4 * 3 && c < d / 4 * 5) {
                                                  +                return 2
                                                  +            } else {
                                                  +                if (c >= d / 4 * 5 && c < d / 4 * 7) {
                                                  +                    return 3
                                                  +                } else {
                                                  +                    return 4
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +    },
                                                  +    getLinkerPoints: function(G) {
                                                  +        var O = [];
                                                  +        if (G.linkerType == "broken") {
                                                  +            var J = Math.PI;
                                                  +            var y = G.from;
                                                  +            var aa = G.to;
                                                  +            var R = Math.abs(aa.x - y.x);
                                                  +            var I = Math.abs(aa.y - y.y);
                                                  +            var K = 30;
                                                  +            if (y.id != null && aa.id != null) {
                                                  +                var ab = this.getAngleDir(y.angle);
                                                  +                var ac = this.getAngleDir(aa.angle);
                                                  +                var X, V, S;
                                                  +                if (ab == 1 && ac == 1) {
                                                  +                    if (y.y < aa.y) {
                                                  +                        X = y;
                                                  +                        V = aa;
                                                  +                        S = false
                                                  +                    } else {
                                                  +                        X = aa;
                                                  +                        V = y;
                                                  +                        S = true
                                                  +                    }
                                                  +                    var W = Model.getShapeById(X.id).props;
                                                  +                    var E = Model.getShapeById(V.id).props;
                                                  +                    if (V.x >= W.x - K && V.x <= W.x + W.w + K) {
                                                  +                        var P;
                                                  +                        if (V.x < W.x + W.w / 2) {
                                                  +                            P = W.x - K
                                                  +                        } else {
                                                  +                            P = W.x + W.w + K
                                                  +                        }
                                                  +                        var Q = X.y - K;
                                                  +                        O.push({
                                                  +                            x: X.x,
                                                  +                            y: Q
                                                  +                        });
                                                  +                        O.push({
                                                  +                            x: P,
                                                  +                            y: Q
                                                  +                        });
                                                  +                        Q = V.y - K;
                                                  +                        O.push({
                                                  +                            x: P,
                                                  +                            y: Q
                                                  +                        });
                                                  +                        O.push({
                                                  +                            x: V.x,
                                                  +                            y: Q
                                                  +                        })
                                                  +                    } else {
                                                  +                        var Q = X.y - K;
                                                  +                        O.push({
                                                  +                            x: X.x,
                                                  +                            y: Q
                                                  +                        });
                                                  +                        O.push({
                                                  +                            x: V.x,
                                                  +                            y: Q
                                                  +                        })
                                                  +                    }
                                                  +                } else {
                                                  +                    if (ab == 3 && ac == 3) {
                                                  +                        if (y.y > aa.y) {
                                                  +                            X = y;
                                                  +                            V = aa;
                                                  +                            S = false
                                                  +                        } else {
                                                  +                            X = aa;
                                                  +                            V = y;
                                                  +                            S = true
                                                  +                        }
                                                  +                        var W = Model.getShapeById(X.id).props;
                                                  +                        var E = Model.getShapeById(V.id).props;
                                                  +                        if (V.x >= W.x - K && V.x <= W.x + W.w + K) {
                                                  +                            var Q = X.y + K;
                                                  +                            var P;
                                                  +                            if (V.x < W.x + W.w / 2) {
                                                  +                                P = W.x - K
                                                  +                            } else {
                                                  +                                P = W.x + W.w + K
                                                  +                            }
                                                  +                            O.push({
                                                  +                                x: X.x,
                                                  +                                y: Q
                                                  +                            });
                                                  +                            O.push({
                                                  +                                x: P,
                                                  +                                y: Q
                                                  +                            });
                                                  +                            Q = V.y + K;
                                                  +                            O.push({
                                                  +                                x: P,
                                                  +                                y: Q
                                                  +                            });
                                                  +                            O.push({
                                                  +                                x: V.x,
                                                  +                                y: Q
                                                  +                            })
                                                  +                        } else {
                                                  +                            var Q = X.y + K;
                                                  +                            O.push({
                                                  +                                x: X.x,
                                                  +                                y: Q
                                                  +                            });
                                                  +                            O.push({
                                                  +                                x: V.x,
                                                  +                                y: Q
                                                  +                            })
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (ab == 2 && ac == 2) {
                                                  +                            if (y.x > aa.x) {
                                                  +                                X = y;
                                                  +                                V = aa;
                                                  +                                S = false
                                                  +                            } else {
                                                  +                                X = aa;
                                                  +                                V = y;
                                                  +                                S = true
                                                  +                            }
                                                  +                            var W = Model.getShapeById(X.id).props;
                                                  +                            var E = Model.getShapeById(V.id).props;
                                                  +                            if (V.y >= W.y - K && V.y <= W.y + W.h + K) {
                                                  +                                var P = X.x + K;
                                                  +                                var Q;
                                                  +                                if (V.y < W.y + W.h / 2) {
                                                  +                                    Q = W.y - K
                                                  +                                } else {
                                                  +                                    Q = W.y + W.h + K
                                                  +                                }
                                                  +                                O.push({
                                                  +                                    x: P,
                                                  +                                    y: X.y
                                                  +                                });
                                                  +                                O.push({
                                                  +                                    x: P,
                                                  +                                    y: Q
                                                  +                                });
                                                  +                                P = V.x + K;
                                                  +                                O.push({
                                                  +                                    x: P,
                                                  +                                    y: Q
                                                  +                                });
                                                  +                                O.push({
                                                  +                                    x: P,
                                                  +                                    y: V.y
                                                  +                                })
                                                  +                            } else {
                                                  +                                var P = X.x + K;
                                                  +                                O.push({
                                                  +                                    x: P,
                                                  +                                    y: X.y
                                                  +                                });
                                                  +                                O.push({
                                                  +                                    x: P,
                                                  +                                    y: V.y
                                                  +                                })
                                                  +                            }
                                                  +                        } else {
                                                  +                            if (ab == 4 && ac == 4) {
                                                  +                                if (y.x < aa.x) {
                                                  +                                    X = y;
                                                  +                                    V = aa;
                                                  +                                    S = false
                                                  +                                } else {
                                                  +                                    X = aa;
                                                  +                                    V = y;
                                                  +                                    S = true
                                                  +                                }
                                                  +                                var W = Model.getShapeById(X.id).props;
                                                  +                                var E = Model.getShapeById(V.id).props;
                                                  +                                if (V.y >= W.y - K && V.y <= W.y + W.h + K) {
                                                  +                                    var P = X.x - K;
                                                  +                                    var Q;
                                                  +                                    if (V.y < W.y + W.h / 2) {
                                                  +                                        Q = W.y - K
                                                  +                                    } else {
                                                  +                                        Q = W.y + W.h + K
                                                  +                                    }
                                                  +                                    O.push({
                                                  +                                        x: P,
                                                  +                                        y: X.y
                                                  +                                    });
                                                  +                                    O.push({
                                                  +                                        x: P,
                                                  +                                        y: Q
                                                  +                                    });
                                                  +                                    P = V.x - K;
                                                  +                                    O.push({
                                                  +                                        x: P,
                                                  +                                        y: Q
                                                  +                                    });
                                                  +                                    O.push({
                                                  +                                        x: P,
                                                  +                                        y: V.y
                                                  +                                    })
                                                  +                                } else {
                                                  +                                    var P = X.x - K;
                                                  +                                    O.push({
                                                  +                                        x: P,
                                                  +                                        y: X.y
                                                  +                                    });
                                                  +                                    O.push({
                                                  +                                        x: P,
                                                  +                                        y: V.y
                                                  +                                    })
                                                  +                                }
                                                  +                            } else {
                                                  +                                if ((ab == 1 && ac == 3) || (ab == 3 && ac == 1)) {
                                                  +                                    if (ab == 1) {
                                                  +                                        X = y;
                                                  +                                        V = aa;
                                                  +                                        S = false
                                                  +                                    } else {
                                                  +                                        X = aa;
                                                  +                                        V = y;
                                                  +                                        S = true
                                                  +                                    }
                                                  +                                    var W = Model.getShapeById(X.id).props;
                                                  +                                    var E = Model.getShapeById(V.id).props;
                                                  +                                    if (V.y <= X.y) {
                                                  +                                        var Q = X.y - I / 2;
                                                  +                                        O.push({
                                                  +                                            x: X.x,
                                                  +                                            y: Q
                                                  +                                        });
                                                  +                                        O.push({
                                                  +                                            x: V.x,
                                                  +                                            y: Q
                                                  +                                        })
                                                  +                                    } else {
                                                  +                                        var ad = W.x + W.w;
                                                  +                                        var U = E.x + E.w;
                                                  +                                        var Q = X.y - K;
                                                  +                                        var P;
                                                  +                                        if (U >= W.x && E.x <= ad) {
                                                  +                                            var x = W.x + W.w / 2;
                                                  +                                            if (V.x < x) {
                                                  +                                                P = W.x < E.x ? W.x - K: E.x - K
                                                  +                                            } else {
                                                  +                                                P = ad > U ? ad + K: U + K
                                                  +                                            }
                                                  +                                            if (E.y < X.y) {
                                                  +                                                Q = E.y - K
                                                  +                                            }
                                                  +                                        } else {
                                                  +                                            if (V.x < X.x) {
                                                  +                                                P = U + (W.x - U) / 2
                                                  +                                            } else {
                                                  +                                                P = ad + (E.x - ad) / 2
                                                  +                                            }
                                                  +                                        }
                                                  +                                        O.push({
                                                  +                                            x: X.x,
                                                  +                                            y: Q
                                                  +                                        });
                                                  +                                        O.push({
                                                  +                                            x: P,
                                                  +                                            y: Q
                                                  +                                        });
                                                  +                                        Q = V.y + K;
                                                  +                                        O.push({
                                                  +                                            x: P,
                                                  +                                            y: Q
                                                  +                                        });
                                                  +                                        O.push({
                                                  +                                            x: V.x,
                                                  +                                            y: Q
                                                  +                                        })
                                                  +                                    }
                                                  +                                } else {
                                                  +                                    if ((ab == 2 && ac == 4) || (ab == 4 && ac == 2)) {
                                                  +                                        if (ab == 2) {
                                                  +                                            X = y;
                                                  +                                            V = aa;
                                                  +                                            S = false
                                                  +                                        } else {
                                                  +                                            X = aa;
                                                  +                                            V = y;
                                                  +                                            S = true
                                                  +                                        }
                                                  +                                        var W = Model.getShapeById(X.id).props;
                                                  +                                        var E = Model.getShapeById(V.id).props;
                                                  +                                        if (V.x > X.x) {
                                                  +                                            var P = X.x + R / 2;
                                                  +                                            O.push({
                                                  +                                                x: P,
                                                  +                                                y: X.y
                                                  +                                            });
                                                  +                                            O.push({
                                                  +                                                x: P,
                                                  +                                                y: V.y
                                                  +                                            })
                                                  +                                        } else {
                                                  +                                            var F = W.y + W.h;
                                                  +                                            var N = E.y + E.h;
                                                  +                                            var P = X.x + K;
                                                  +                                            var Q;
                                                  +                                            if (N >= W.y && E.y <= F) {
                                                  +                                                var x = W.y + W.h / 2;
                                                  +                                                if (V.y < x) {
                                                  +                                                    Q = W.y < E.y ? W.y - K: E.y - K
                                                  +                                                } else {
                                                  +                                                    Q = F > N ? F + K: N + K
                                                  +                                                }
                                                  +                                                if (E.x + E.w > X.x) {
                                                  +                                                    P = E.x + E.w + K
                                                  +                                                }
                                                  +                                            } else {
                                                  +                                                if (V.y < X.y) {
                                                  +                                                    Q = N + (W.y - N) / 2
                                                  +                                                } else {
                                                  +                                                    Q = F + (E.y - F) / 2
                                                  +                                                }
                                                  +                                            }
                                                  +                                            O.push({
                                                  +                                                x: P,
                                                  +                                                y: X.y
                                                  +                                            });
                                                  +                                            O.push({
                                                  +                                                x: P,
                                                  +                                                y: Q
                                                  +                                            });
                                                  +                                            P = V.x - K;
                                                  +                                            O.push({
                                                  +                                                x: P,
                                                  +                                                y: Q
                                                  +                                            });
                                                  +                                            O.push({
                                                  +                                                x: P,
                                                  +                                                y: V.y
                                                  +                                            })
                                                  +                                        }
                                                  +                                    } else {
                                                  +                                        if ((ab == 1 && ac == 2) || (ab == 2 && ac == 1)) {
                                                  +                                            if (ab == 2) {
                                                  +                                                X = y;
                                                  +                                                V = aa;
                                                  +                                                S = false
                                                  +                                            } else {
                                                  +                                                X = aa;
                                                  +                                                V = y;
                                                  +                                                S = true
                                                  +                                            }
                                                  +                                            var W = Model.getShapeById(X.id).props;
                                                  +                                            var E = Model.getShapeById(V.id).props;
                                                  +                                            if (V.x > X.x && V.y > X.y) {
                                                  +                                                O.push({
                                                  +                                                    x: V.x,
                                                  +                                                    y: X.y
                                                  +                                                })
                                                  +                                            } else {
                                                  +                                                if (V.x > X.x && E.x > X.x) {
                                                  +                                                    var P;
                                                  +                                                    if (E.x - X.x < K * 2) {
                                                  +                                                        P = X.x + (E.x - X.x) / 2
                                                  +                                                    } else {
                                                  +                                                        P = X.x + K
                                                  +                                                    }
                                                  +                                                    var Q = V.y - K;
                                                  +                                                    O.push({
                                                  +                                                        x: P,
                                                  +                                                        y: X.y
                                                  +                                                    });
                                                  +                                                    O.push({
                                                  +                                                        x: P,
                                                  +                                                        y: Q
                                                  +                                                    });
                                                  +                                                    O.push({
                                                  +                                                        x: V.x,
                                                  +                                                        y: Q
                                                  +                                                    })
                                                  +                                                } else {
                                                  +                                                    if (V.x <= X.x && V.y > W.y + W.h) {
                                                  +                                                        var F = W.y + W.h;
                                                  +                                                        var P = X.x + K;
                                                  +                                                        var Q;
                                                  +                                                        if (V.y - F < K * 2) {
                                                  +                                                            Q = F + (V.y - F) / 2
                                                  +                                                        } else {
                                                  +                                                            Q = V.y - K
                                                  +                                                        }
                                                  +                                                        O.push({
                                                  +                                                            x: P,
                                                  +                                                            y: X.y
                                                  +                                                        });
                                                  +                                                        O.push({
                                                  +                                                            x: P,
                                                  +                                                            y: Q
                                                  +                                                        });
                                                  +                                                        O.push({
                                                  +                                                            x: V.x,
                                                  +                                                            y: Q
                                                  +                                                        })
                                                  +                                                    } else {
                                                  +                                                        var P;
                                                  +                                                        var U = E.x + E.w;
                                                  +                                                        if (U > X.x) {
                                                  +                                                            P = U + K
                                                  +                                                        } else {
                                                  +                                                            P = X.x + K
                                                  +                                                        }
                                                  +                                                        var Q;
                                                  +                                                        if (V.y < W.y) {
                                                  +                                                            Q = V.y - K
                                                  +                                                        } else {
                                                  +                                                            Q = W.y - K
                                                  +                                                        }
                                                  +                                                        O.push({
                                                  +                                                            x: P,
                                                  +                                                            y: X.y
                                                  +                                                        });
                                                  +                                                        O.push({
                                                  +                                                            x: P,
                                                  +                                                            y: Q
                                                  +                                                        });
                                                  +                                                        O.push({
                                                  +                                                            x: V.x,
                                                  +                                                            y: Q
                                                  +                                                        })
                                                  +                                                    }
                                                  +                                                }
                                                  +                                            }
                                                  +                                        } else {
                                                  +                                            if ((ab == 1 && ac == 4) || (ab == 4 && ac == 1)) {
                                                  +                                                if (ab == 4) {
                                                  +                                                    X = y;
                                                  +                                                    V = aa;
                                                  +                                                    S = false
                                                  +                                                } else {
                                                  +                                                    X = aa;
                                                  +                                                    V = y;
                                                  +                                                    S = true
                                                  +                                                }
                                                  +                                                var W = Model.getShapeById(X.id).props;
                                                  +                                                var E = Model.getShapeById(V.id).props;
                                                  +                                                var U = E.x + E.w;
                                                  +                                                if (V.x < X.x && V.y > X.y) {
                                                  +                                                    O.push({
                                                  +                                                        x: V.x,
                                                  +                                                        y: X.y
                                                  +                                                    })
                                                  +                                                } else {
                                                  +                                                    if (V.x < X.x && U < X.x) {
                                                  +                                                        var P;
                                                  +                                                        if (X.x - U < K * 2) {
                                                  +                                                            P = U + (X.x - U) / 2
                                                  +                                                        } else {
                                                  +                                                            P = X.x - K
                                                  +                                                        }
                                                  +                                                        var Q = V.y - K;
                                                  +                                                        O.push({
                                                  +                                                            x: P,
                                                  +                                                            y: X.y
                                                  +                                                        });
                                                  +                                                        O.push({
                                                  +                                                            x: P,
                                                  +                                                            y: Q
                                                  +                                                        });
                                                  +                                                        O.push({
                                                  +                                                            x: V.x,
                                                  +                                                            y: Q
                                                  +                                                        })
                                                  +                                                    } else {
                                                  +                                                        if (V.x >= X.x && V.y > W.y + W.h) {
                                                  +                                                            var F = W.y + W.h;
                                                  +                                                            var P = X.x - K;
                                                  +                                                            var Q;
                                                  +                                                            if (V.y - F < K * 2) {
                                                  +                                                                Q = F + (V.y - F) / 2
                                                  +                                                            } else {
                                                  +                                                                Q = V.y - K
                                                  +                                                            }
                                                  +                                                            O.push({
                                                  +                                                                x: P,
                                                  +                                                                y: X.y
                                                  +                                                            });
                                                  +                                                            O.push({
                                                  +                                                                x: P,
                                                  +                                                                y: Q
                                                  +                                                            });
                                                  +                                                            O.push({
                                                  +                                                                x: V.x,
                                                  +                                                                y: Q
                                                  +                                                            })
                                                  +                                                        } else {
                                                  +                                                            var P;
                                                  +                                                            if (E.x < X.x) {
                                                  +                                                                P = E.x - K
                                                  +                                                            } else {
                                                  +                                                                P = X.x - K
                                                  +                                                            }
                                                  +                                                            var Q;
                                                  +                                                            if (V.y < W.y) {
                                                  +                                                                Q = V.y - K
                                                  +                                                            } else {
                                                  +                                                                Q = W.y - K
                                                  +                                                            }
                                                  +                                                            O.push({
                                                  +                                                                x: P,
                                                  +                                                                y: X.y
                                                  +                                                            });
                                                  +                                                            O.push({
                                                  +                                                                x: P,
                                                  +                                                                y: Q
                                                  +                                                            });
                                                  +                                                            O.push({
                                                  +                                                                x: V.x,
                                                  +                                                                y: Q
                                                  +                                                            })
                                                  +                                                        }
                                                  +                                                    }
                                                  +                                                }
                                                  +                                            } else {
                                                  +                                                if ((ab == 2 && ac == 3) || (ab == 3 && ac == 2)) {
                                                  +                                                    if (ab == 2) {
                                                  +                                                        X = y;
                                                  +                                                        V = aa;
                                                  +                                                        S = false
                                                  +                                                    } else {
                                                  +                                                        X = aa;
                                                  +                                                        V = y;
                                                  +                                                        S = true
                                                  +                                                    }
                                                  +                                                    var W = Model.getShapeById(X.id).props;
                                                  +                                                    var E = Model.getShapeById(V.id).props;
                                                  +                                                    if (V.x > X.x && V.y < X.y) {
                                                  +                                                        O.push({
                                                  +                                                            x: V.x,
                                                  +                                                            y: X.y
                                                  +                                                        })
                                                  +                                                    } else {
                                                  +                                                        if (V.x > X.x && E.x > X.x) {
                                                  +                                                            var P;
                                                  +                                                            if (E.x - X.x < K * 2) {
                                                  +                                                                P = X.x + (E.x - X.x) / 2
                                                  +                                                            } else {
                                                  +                                                                P = X.x + K
                                                  +                                                            }
                                                  +                                                            var Q = V.y + K;
                                                  +                                                            O.push({
                                                  +                                                                x: P,
                                                  +                                                                y: X.y
                                                  +                                                            });
                                                  +                                                            O.push({
                                                  +                                                                x: P,
                                                  +                                                                y: Q
                                                  +                                                            });
                                                  +                                                            O.push({
                                                  +                                                                x: V.x,
                                                  +                                                                y: Q
                                                  +                                                            })
                                                  +                                                        } else {
                                                  +                                                            if (V.x <= X.x && V.y < W.y) {
                                                  +                                                                var P = X.x + K;
                                                  +                                                                var Q;
                                                  +                                                                if (W.y - V.y < K * 2) {
                                                  +                                                                    Q = V.y + (W.y - V.y) / 2
                                                  +                                                                } else {
                                                  +                                                                    Q = V.y + K
                                                  +                                                                }
                                                  +                                                                O.push({
                                                  +                                                                    x: P,
                                                  +                                                                    y: X.y
                                                  +                                                                });
                                                  +                                                                O.push({
                                                  +                                                                    x: P,
                                                  +                                                                    y: Q
                                                  +                                                                });
                                                  +                                                                O.push({
                                                  +                                                                    x: V.x,
                                                  +                                                                    y: Q
                                                  +                                                                })
                                                  +                                                            } else {
                                                  +                                                                var P;
                                                  +                                                                var U = E.x + E.w;
                                                  +                                                                if (U > X.x) {
                                                  +                                                                    P = U + K
                                                  +                                                                } else {
                                                  +                                                                    P = X.x + K
                                                  +                                                                }
                                                  +                                                                var Q;
                                                  +                                                                if (V.y > W.y + W.h) {
                                                  +                                                                    Q = V.y + K
                                                  +                                                                } else {
                                                  +                                                                    Q = W.y + W.h + K
                                                  +                                                                }
                                                  +                                                                O.push({
                                                  +                                                                    x: P,
                                                  +                                                                    y: X.y
                                                  +                                                                });
                                                  +                                                                O.push({
                                                  +                                                                    x: P,
                                                  +                                                                    y: Q
                                                  +                                                                });
                                                  +                                                                O.push({
                                                  +                                                                    x: V.x,
                                                  +                                                                    y: Q
                                                  +                                                                })
                                                  +                                                            }
                                                  +                                                        }
                                                  +                                                    }
                                                  +                                                } else {
                                                  +                                                    if ((ab == 3 && ac == 4) || (ab == 4 && ac == 3)) {
                                                  +                                                        if (ab == 4) {
                                                  +                                                            X = y;
                                                  +                                                            V = aa;
                                                  +                                                            S = false
                                                  +                                                        } else {
                                                  +                                                            X = aa;
                                                  +                                                            V = y;
                                                  +                                                            S = true
                                                  +                                                        }
                                                  +                                                        var W = Model.getShapeById(X.id).props;
                                                  +                                                        var E = Model.getShapeById(V.id).props;
                                                  +                                                        var U = E.x + E.w;
                                                  +                                                        if (V.x < X.x && V.y < X.y) {
                                                  +                                                            O.push({
                                                  +                                                                x: V.x,
                                                  +                                                                y: X.y
                                                  +                                                            })
                                                  +                                                        } else {
                                                  +                                                            if (V.x < X.x && U < X.x) {
                                                  +                                                                var P;
                                                  +                                                                if (X.x - U < K * 2) {
                                                  +                                                                    P = U + (X.x - U) / 2
                                                  +                                                                } else {
                                                  +                                                                    P = X.x - K
                                                  +                                                                }
                                                  +                                                                var Q = V.y + K;
                                                  +                                                                O.push({
                                                  +                                                                    x: P,
                                                  +                                                                    y: X.y
                                                  +                                                                });
                                                  +                                                                O.push({
                                                  +                                                                    x: P,
                                                  +                                                                    y: Q
                                                  +                                                                });
                                                  +                                                                O.push({
                                                  +                                                                    x: V.x,
                                                  +                                                                    y: Q
                                                  +                                                                })
                                                  +                                                            } else {
                                                  +                                                                if (V.x >= X.x && V.y < W.y) {
                                                  +                                                                    var P = X.x - K;
                                                  +                                                                    var Q;
                                                  +                                                                    if (W.y - V.y < K * 2) {
                                                  +                                                                        Q = V.y + (W.y - V.y) / 2
                                                  +                                                                    } else {
                                                  +                                                                        Q = V.y + K
                                                  +                                                                    }
                                                  +                                                                    O.push({
                                                  +                                                                        x: P,
                                                  +                                                                        y: X.y
                                                  +                                                                    });
                                                  +                                                                    O.push({
                                                  +                                                                        x: P,
                                                  +                                                                        y: Q
                                                  +                                                                    });
                                                  +                                                                    O.push({
                                                  +                                                                        x: V.x,
                                                  +                                                                        y: Q
                                                  +                                                                    })
                                                  +                                                                } else {
                                                  +                                                                    var P;
                                                  +                                                                    if (E.x < X.x) {
                                                  +                                                                        P = E.x - K
                                                  +                                                                    } else {
                                                  +                                                                        P = X.x - K
                                                  +                                                                    }
                                                  +                                                                    var Q;
                                                  +                                                                    if (V.y > W.y + W.h) {
                                                  +                                                                        Q = V.y + K
                                                  +                                                                    } else {
                                                  +                                                                        Q = W.y + W.h + K
                                                  +                                                                    }
                                                  +                                                                    O.push({
                                                  +                                                                        x: P,
                                                  +                                                                        y: X.y
                                                  +                                                                    });
                                                  +                                                                    O.push({
                                                  +                                                                        x: P,
                                                  +                                                                        y: Q
                                                  +                                                                    });
                                                  +                                                                    O.push({
                                                  +                                                                        x: V.x,
                                                  +                                                                        y: Q
                                                  +                                                                    })
                                                  +                                                                }
                                                  +                                                            }
                                                  +                                                        }
                                                  +                                                    }
                                                  +                                                }
                                                  +                                            }
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                if (S) {
                                                  +                    O.reverse()
                                                  +                }
                                                  +            } else {
                                                  +                if (y.id != null || aa.id != null) {
                                                  +                    var X, V, S, M;
                                                  +                    if (y.id != null) {
                                                  +                        X = y;
                                                  +                        V = aa;
                                                  +                        S = false;
                                                  +                        M = y.angle
                                                  +                    } else {
                                                  +                        X = aa;
                                                  +                        V = y;
                                                  +                        S = true;
                                                  +                        M = aa.angle
                                                  +                    }
                                                  +                    var Z = Model.getShapeById(X.id).props;
                                                  +                    if (M >= J / 4 && M < J / 4 * 3) {
                                                  +                        if (V.y < X.y) {
                                                  +                            if (R >= I) {
                                                  +                                O.push({
                                                  +                                    x: X.x,
                                                  +                                    y: V.y
                                                  +                                })
                                                  +                            } else {
                                                  +                                var x = I / 2;
                                                  +                                O.push({
                                                  +                                    x: X.x,
                                                  +                                    y: X.y - x
                                                  +                                });
                                                  +                                O.push({
                                                  +                                    x: V.x,
                                                  +                                    y: X.y - x
                                                  +                                })
                                                  +                            }
                                                  +                        } else {
                                                  +                            O.push({
                                                  +                                x: X.x,
                                                  +                                y: X.y - K
                                                  +                            });
                                                  +                            if (R >= I) {
                                                  +                                if (V.x >= Z.x - K && V.x <= Z.x + Z.w + K) {
                                                  +                                    var L = Z.x + Z.w / 2;
                                                  +                                    if (V.x < L) {
                                                  +                                        O.push({
                                                  +                                            x: Z.x - K,
                                                  +                                            y: X.y - K
                                                  +                                        });
                                                  +                                        O.push({
                                                  +                                            x: Z.x - K,
                                                  +                                            y: V.y
                                                  +                                        })
                                                  +                                    } else {
                                                  +                                        O.push({
                                                  +                                            x: Z.x + Z.w + K,
                                                  +                                            y: X.y - K
                                                  +                                        });
                                                  +                                        O.push({
                                                  +                                            x: Z.x + Z.w + K,
                                                  +                                            y: V.y
                                                  +                                        })
                                                  +                                    }
                                                  +                                } else {
                                                  +                                    if (V.x < Z.x) {
                                                  +                                        O.push({
                                                  +                                            x: V.x + K,
                                                  +                                            y: X.y - K
                                                  +                                        });
                                                  +                                        O.push({
                                                  +                                            x: V.x + K,
                                                  +                                            y: V.y
                                                  +                                        })
                                                  +                                    } else {
                                                  +                                        O.push({
                                                  +                                            x: V.x - K,
                                                  +                                            y: X.y - K
                                                  +                                        });
                                                  +                                        O.push({
                                                  +                                            x: V.x - K,
                                                  +                                            y: V.y
                                                  +                                        })
                                                  +                                    }
                                                  +                                }
                                                  +                            } else {
                                                  +                                if (V.x >= Z.x - K && V.x <= Z.x + Z.w + K) {
                                                  +                                    var L = Z.x + Z.w / 2;
                                                  +                                    if (V.x < L) {
                                                  +                                        O.push({
                                                  +                                            x: Z.x - K,
                                                  +                                            y: X.y - K
                                                  +                                        });
                                                  +                                        O.push({
                                                  +                                            x: Z.x - K,
                                                  +                                            y: V.y - K
                                                  +                                        });
                                                  +                                        O.push({
                                                  +                                            x: V.x,
                                                  +                                            y: V.y - K
                                                  +                                        })
                                                  +                                    } else {
                                                  +                                        O.push({
                                                  +                                            x: Z.x + Z.w + K,
                                                  +                                            y: X.y - K
                                                  +                                        });
                                                  +                                        O.push({
                                                  +                                            x: Z.x + Z.w + K,
                                                  +                                            y: V.y - K
                                                  +                                        });
                                                  +                                        O.push({
                                                  +                                            x: V.x,
                                                  +                                            y: V.y - K
                                                  +                                        })
                                                  +                                    }
                                                  +                                } else {
                                                  +                                    O.push({
                                                  +                                        x: V.x,
                                                  +                                        y: X.y - K
                                                  +                                    })
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (M >= J / 4 * 3 && M < J / 4 * 5) {
                                                  +                            if (V.x > X.x) {
                                                  +                                if (R >= I) {
                                                  +                                    var x = R / 2;
                                                  +                                    O.push({
                                                  +                                        x: X.x + x,
                                                  +                                        y: X.y
                                                  +                                    });
                                                  +                                    O.push({
                                                  +                                        x: X.x + x,
                                                  +                                        y: V.y
                                                  +                                    })
                                                  +                                } else {
                                                  +                                    O.push({
                                                  +                                        x: V.x,
                                                  +                                        y: X.y
                                                  +                                    })
                                                  +                                }
                                                  +                            } else {
                                                  +                                O.push({
                                                  +                                    x: X.x + K,
                                                  +                                    y: X.y
                                                  +                                });
                                                  +                                if (R >= I) {
                                                  +                                    if (V.y >= Z.y - K && V.y <= Z.y + Z.h + K) {
                                                  +                                        var L = Z.y + Z.h / 2;
                                                  +                                        if (V.y < L) {
                                                  +                                            O.push({
                                                  +                                                x: X.x + K,
                                                  +                                                y: Z.y - K
                                                  +                                            });
                                                  +                                            O.push({
                                                  +                                                x: V.x + K,
                                                  +                                                y: Z.y - K
                                                  +                                            });
                                                  +                                            O.push({
                                                  +                                                x: V.x + K,
                                                  +                                                y: V.y
                                                  +                                            })
                                                  +                                        } else {
                                                  +                                            O.push({
                                                  +                                                x: X.x + K,
                                                  +                                                y: Z.y + Z.h + K
                                                  +                                            });
                                                  +                                            O.push({
                                                  +                                                x: V.x + K,
                                                  +                                                y: Z.y + Z.h + K
                                                  +                                            });
                                                  +                                            O.push({
                                                  +                                                x: V.x + K,
                                                  +                                                y: V.y
                                                  +                                            })
                                                  +                                        }
                                                  +                                    } else {
                                                  +                                        O.push({
                                                  +                                            x: X.x + K,
                                                  +                                            y: V.y
                                                  +                                        })
                                                  +                                    }
                                                  +                                } else {
                                                  +                                    if (V.y >= Z.y - K && V.y <= Z.y + Z.h + K) {
                                                  +                                        var L = Z.y + Z.h / 2;
                                                  +                                        if (V.y < L) {
                                                  +                                            O.push({
                                                  +                                                x: X.x + K,
                                                  +                                                y: Z.y - K
                                                  +                                            });
                                                  +                                            O.push({
                                                  +                                                x: V.x,
                                                  +                                                y: Z.y - K
                                                  +                                            })
                                                  +                                        } else {
                                                  +                                            O.push({
                                                  +                                                x: X.x + K,
                                                  +                                                y: Z.y + Z.h + K
                                                  +                                            });
                                                  +                                            O.push({
                                                  +                                                x: V.x,
                                                  +                                                y: Z.y + Z.h + K
                                                  +                                            })
                                                  +                                        }
                                                  +                                    } else {
                                                  +                                        if (V.y < X.y) {
                                                  +                                            O.push({
                                                  +                                                x: X.x + K,
                                                  +                                                y: V.y + K
                                                  +                                            });
                                                  +                                            O.push({
                                                  +                                                x: V.x,
                                                  +                                                y: V.y + K
                                                  +                                            })
                                                  +                                        } else {
                                                  +                                            O.push({
                                                  +                                                x: X.x + K,
                                                  +                                                y: V.y - K
                                                  +                                            });
                                                  +                                            O.push({
                                                  +                                                x: V.x,
                                                  +                                                y: V.y - K
                                                  +                                            })
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        } else {
                                                  +                            if (M >= J / 4 * 5 && M < J / 4 * 7) {
                                                  +                                if (V.y > X.y) {
                                                  +                                    if (R >= I) {
                                                  +                                        O.push({
                                                  +                                            x: X.x,
                                                  +                                            y: V.y
                                                  +                                        })
                                                  +                                    } else {
                                                  +                                        var x = I / 2;
                                                  +                                        O.push({
                                                  +                                            x: X.x,
                                                  +                                            y: X.y + x
                                                  +                                        });
                                                  +                                        O.push({
                                                  +                                            x: V.x,
                                                  +                                            y: X.y + x
                                                  +                                        })
                                                  +                                    }
                                                  +                                } else {
                                                  +                                    O.push({
                                                  +                                        x: X.x,
                                                  +                                        y: X.y + K
                                                  +                                    });
                                                  +                                    if (R >= I) {
                                                  +                                        if (V.x >= Z.x - K && V.x <= Z.x + Z.w + K) {
                                                  +                                            var L = Z.x + Z.w / 2;
                                                  +                                            if (V.x < L) {
                                                  +                                                O.push({
                                                  +                                                    x: Z.x - K,
                                                  +                                                    y: X.y + K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: Z.x - K,
                                                  +                                                    y: V.y
                                                  +                                                })
                                                  +                                            } else {
                                                  +                                                O.push({
                                                  +                                                    x: Z.x + Z.w + K,
                                                  +                                                    y: X.y + K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: Z.x + Z.w + K,
                                                  +                                                    y: V.y
                                                  +                                                })
                                                  +                                            }
                                                  +                                        } else {
                                                  +                                            if (V.x < Z.x) {
                                                  +                                                O.push({
                                                  +                                                    x: V.x + K,
                                                  +                                                    y: X.y + K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: V.x + K,
                                                  +                                                    y: V.y
                                                  +                                                })
                                                  +                                            } else {
                                                  +                                                O.push({
                                                  +                                                    x: V.x - K,
                                                  +                                                    y: X.y + K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: V.x - K,
                                                  +                                                    y: V.y
                                                  +                                                })
                                                  +                                            }
                                                  +                                        }
                                                  +                                    } else {
                                                  +                                        if (V.x >= Z.x - K && V.x <= Z.x + Z.w + K) {
                                                  +                                            var L = Z.x + Z.w / 2;
                                                  +                                            if (V.x < L) {
                                                  +                                                O.push({
                                                  +                                                    x: Z.x - K,
                                                  +                                                    y: X.y + K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: Z.x - K,
                                                  +                                                    y: V.y + K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: V.x,
                                                  +                                                    y: V.y + K
                                                  +                                                })
                                                  +                                            } else {
                                                  +                                                O.push({
                                                  +                                                    x: Z.x + Z.w + K,
                                                  +                                                    y: X.y + K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: Z.x + Z.w + K,
                                                  +                                                    y: V.y + K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: V.x,
                                                  +                                                    y: V.y + K
                                                  +                                                })
                                                  +                                            }
                                                  +                                        } else {
                                                  +                                            O.push({
                                                  +                                                x: V.x,
                                                  +                                                y: X.y + K
                                                  +                                            })
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            } else {
                                                  +                                if (V.x < X.x) {
                                                  +                                    if (R >= I) {
                                                  +                                        var x = R / 2;
                                                  +                                        O.push({
                                                  +                                            x: X.x - x,
                                                  +                                            y: X.y
                                                  +                                        });
                                                  +                                        O.push({
                                                  +                                            x: X.x - x,
                                                  +                                            y: V.y
                                                  +                                        })
                                                  +                                    } else {
                                                  +                                        O.push({
                                                  +                                            x: V.x,
                                                  +                                            y: X.y
                                                  +                                        })
                                                  +                                    }
                                                  +                                } else {
                                                  +                                    O.push({
                                                  +                                        x: X.x - K,
                                                  +                                        y: X.y
                                                  +                                    });
                                                  +                                    if (R >= I) {
                                                  +                                        if (V.y >= Z.y - K && V.y <= Z.y + Z.h + K) {
                                                  +                                            var L = Z.y + Z.h / 2;
                                                  +                                            if (V.y < L) {
                                                  +                                                O.push({
                                                  +                                                    x: X.x - K,
                                                  +                                                    y: Z.y - K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: V.x - K,
                                                  +                                                    y: Z.y - K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: V.x - K,
                                                  +                                                    y: V.y
                                                  +                                                })
                                                  +                                            } else {
                                                  +                                                O.push({
                                                  +                                                    x: X.x - K,
                                                  +                                                    y: Z.y + Z.h + K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: V.x - K,
                                                  +                                                    y: Z.y + Z.h + K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: V.x - K,
                                                  +                                                    y: V.y
                                                  +                                                })
                                                  +                                            }
                                                  +                                        } else {
                                                  +                                            O.push({
                                                  +                                                x: X.x - K,
                                                  +                                                y: V.y
                                                  +                                            })
                                                  +                                        }
                                                  +                                    } else {
                                                  +                                        if (V.y >= Z.y - K && V.y <= Z.y + Z.h + K) {
                                                  +                                            var L = Z.y + Z.h / 2;
                                                  +                                            if (V.y < L) {
                                                  +                                                O.push({
                                                  +                                                    x: X.x - K,
                                                  +                                                    y: Z.y - K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: V.x,
                                                  +                                                    y: Z.y - K
                                                  +                                                })
                                                  +                                            } else {
                                                  +                                                O.push({
                                                  +                                                    x: X.x - K,
                                                  +                                                    y: Z.y + Z.h + K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: V.x,
                                                  +                                                    y: Z.y + Z.h + K
                                                  +                                                })
                                                  +                                            }
                                                  +                                        } else {
                                                  +                                            if (V.y < X.y) {
                                                  +                                                O.push({
                                                  +                                                    x: X.x - K,
                                                  +                                                    y: V.y + K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: V.x,
                                                  +                                                    y: V.y + K
                                                  +                                                })
                                                  +                                            } else {
                                                  +                                                O.push({
                                                  +                                                    x: X.x - K,
                                                  +                                                    y: V.y - K
                                                  +                                                });
                                                  +                                                O.push({
                                                  +                                                    x: V.x,
                                                  +                                                    y: V.y - K
                                                  +                                                })
                                                  +                                            }
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    if (S) {
                                                  +                        O.reverse()
                                                  +                    }
                                                  +                } else {
                                                  +                    if (R >= I) {
                                                  +                        var x = (aa.x - y.x) / 2;
                                                  +                        O.push({
                                                  +                            x: y.x + x,
                                                  +                            y: y.y
                                                  +                        });
                                                  +                        O.push({
                                                  +                            x: y.x + x,
                                                  +                            y: aa.y
                                                  +                        })
                                                  +                    } else {
                                                  +                        var x = (aa.y - y.y) / 2;
                                                  +                        O.push({
                                                  +                            x: y.x,
                                                  +                            y: y.y + x
                                                  +                        });
                                                  +                        O.push({
                                                  +                            x: aa.x,
                                                  +                            y: y.y + x
                                                  +                        })
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        } else {
                                                  +            if (G.linkerType == "curve") {
                                                  +                var y = G.from;
                                                  +                var aa = G.to;
                                                  +                var Y = this.measureDistance(y, aa);
                                                  +                var T = Y * 0.4;
                                                  +                function H(e, d) {
                                                  +                    if (e.id != null) {
                                                  +                        return {
                                                  +                            x: e.x - T * Math.cos(e.angle),
                                                  +                            y: e.y - T * Math.sin(e.angle)
                                                  +                        }
                                                  +                    } else {
                                                  +                        var c = Math.abs(e.y - d.y);
                                                  +                        var f = Math.abs(e.x - d.x);
                                                  +                        var b = Math.atan(c / f);
                                                  +                        var a = {};
                                                  +                        if (e.x <= d.x) {
                                                  +                            a.x = e.x + T * Math.cos(b)
                                                  +                        } else {
                                                  +                            a.x = e.x - T * Math.cos(b)
                                                  +                        }
                                                  +                        if (e.y <= d.y) {
                                                  +                            a.y = e.y + T * Math.sin(b)
                                                  +                        } else {
                                                  +                            a.y = e.y - T * Math.sin(b)
                                                  +                        }
                                                  +                        return a
                                                  +                    }
                                                  +                }
                                                  +                O.push(H(y, aa));
                                                  +                O.push(H(aa, y))
                                                  +            }
                                                  +        }
                                                  +        return O
                                                  +    },
                                                  +    getLinkerLinePoints: function(i) {
                                                  +        var f = [];
                                                  +        if (i.linkerType != "curve") {
                                                  +            f.push(i.from);
                                                  +            f = f.concat(i.points)
                                                  +        } else {
                                                  +            var j = 0.05;
                                                  +            var g = 0;
                                                  +            while (g <= 1) {
                                                  +                var h = {
                                                  +                    x: (1 - g) * (1 - g) * (1 - g) * i.from.x + 3 * (1 - g) * (1 - g) * g * i.points[0].x + 3 * (1 - g) * g * g * i.points[1].x + g * g * g * i.to.x,
                                                  +                    y: (1 - g) * (1 - g) * (1 - g) * i.from.y + 3 * (1 - g) * (1 - g) * g * i.points[0].y + 3 * (1 - g) * g * g * i.points[1].y + g * g * g * i.to.y
                                                  +                };
                                                  +                f.push(h);
                                                  +                g += j
                                                  +            }
                                                  +        }
                                                  +        f.push(i.to);
                                                  +        return f
                                                  +    },
                                                  +    getLinkerBox: function(l) {
                                                  +        var i = this.getLinkerLinePoints(l);
                                                  +        var o = i[0].x;
                                                  +        var p = i[0].y;
                                                  +        var q = i[0].x;
                                                  +        var r = i[0].y;
                                                  +        for (var n = 0; n < i.length; n++) {
                                                  +            var k = i[n];
                                                  +            if (k.x < o) {
                                                  +                o = k.x
                                                  +            } else {
                                                  +                if (k.x > q) {
                                                  +                    q = k.x
                                                  +                }
                                                  +            }
                                                  +            if (k.y < p) {
                                                  +                p = k.y
                                                  +            } else {
                                                  +                if (k.y > r) {
                                                  +                    r = k.y
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        var m = {
                                                  +            x: o,
                                                  +            y: p,
                                                  +            w: q - o,
                                                  +            h: r - p
                                                  +        };
                                                  +        return m
                                                  +    },
                                                  +    getShapeBox: function(e) {
                                                  +        var d = e.props;
                                                  +        var f = e.props.angle;
                                                  +        return this.getRotatedBox(d, f)
                                                  +    },
                                                  +    getRotatedBox: function(p, r, u) {
                                                  +        if (r == 0) {
                                                  +            return p
                                                  +        } else {
                                                  +            if (!u) {
                                                  +                u = {
                                                  +                    x: p.x + p.w / 2,
                                                  +                    y: p.y + p.h / 2
                                                  +                }
                                                  +            }
                                                  +            var l = this.getRotated(u, {
                                                  +                    x: p.x,
                                                  +                    y: p.y
                                                  +                },
                                                  +                r);
                                                  +            var m = this.getRotated(u, {
                                                  +                    x: p.x + p.w,
                                                  +                    y: p.y
                                                  +                },
                                                  +                r);
                                                  +            var n = this.getRotated(u, {
                                                  +                    x: p.x + p.w,
                                                  +                    y: p.y + p.h
                                                  +                },
                                                  +                r);
                                                  +            var o = this.getRotated(u, {
                                                  +                    x: p.x,
                                                  +                    y: p.y + p.h
                                                  +                },
                                                  +                r);
                                                  +            var q = Math.min(l.x, m.x, n.x, o.x);
                                                  +            var t = Math.max(l.x, m.x, n.x, o.x);
                                                  +            var s = Math.min(l.y, m.y, n.y, o.y);
                                                  +            var v = Math.max(l.y, m.y, n.y, o.y);
                                                  +            return {
                                                  +                x: q,
                                                  +                y: s,
                                                  +                w: t - q,
                                                  +                h: v - s
                                                  +            }
                                                  +        }
                                                  +    },
                                                  +    getRotated: function(n, h, j) {
                                                  +        var k = this.measureDistance(n, h);
                                                  +        if (k == 0 || j == 0) {
                                                  +            return h
                                                  +        }
                                                  +        var m = Math.atan(Math.abs(h.x - n.x) / Math.abs(n.y - h.y));
                                                  +        if (h.x >= n.x && h.y >= n.y) {
                                                  +            m = Math.PI - m
                                                  +        } else {
                                                  +            if (h.x <= n.x && h.y >= n.y) {
                                                  +                m = Math.PI + m
                                                  +            } else {
                                                  +                if (h.x <= n.x && h.y <= n.y) {
                                                  +                    m = Math.PI * 2 - m
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        m = m % (Math.PI * 2);
                                                  +        var l = (m + j) % (Math.PI * 2);
                                                  +        var i = {
                                                  +            x: n.x + Math.sin(l) * k,
                                                  +            y: n.y - Math.cos(l) * k
                                                  +        };
                                                  +        return i
                                                  +    },
                                                  +    getShapeAnchorInLinker: function(H) {
                                                  +        var A = H.getAnchors();
                                                  +        var G = [];
                                                  +        var t = {
                                                  +            x: H.props.x + H.props.w / 2,
                                                  +            y: H.props.y + H.props.h / 2
                                                  +        };
                                                  +        for (var v = 0; v < A.length; v++) {
                                                  +            var y = A[v];
                                                  +            var x = {
                                                  +                x: y.x + H.props.x,
                                                  +                y: y.y + H.props.y
                                                  +            };
                                                  +            var E = this.getRotated(t, x, H.props.angle);
                                                  +            G.push(E)
                                                  +        }
                                                  +        var C = [];
                                                  +        var F = 2;
                                                  +        for (var w = Model.orderList.length - 1; w >= 0; w--) {
                                                  +            var z = Model.orderList[w].id;
                                                  +            var i = Model.getShapeById(z);
                                                  +            if (i.name != "linker") {
                                                  +                continue
                                                  +            }
                                                  +            var B = i;
                                                  +            var u = null;
                                                  +            F = 3;
                                                  +            for (var v = 0; v < G.length; v++) {
                                                  +                var J = G[v];
                                                  +                var I = {
                                                  +                    x: J.x - F,
                                                  +                    y: J.y - F,
                                                  +                    w: F * 2,
                                                  +                    h: F * 2
                                                  +                };
                                                  +                if (B.from.id == null && this.pointInRect(B.from.x, B.from.y, I)) {
                                                  +                    u = {
                                                  +                        linker: B,
                                                  +                        anchors: [J],
                                                  +                        type: "from"
                                                  +                    };
                                                  +                    break
                                                  +                }
                                                  +                if (B.to.id == null && this.pointInRect(B.to.x, B.to.y, I)) {
                                                  +                    u = {
                                                  +                        linker: B,
                                                  +                        anchors: [J],
                                                  +                        type: "to"
                                                  +                    };
                                                  +                    break
                                                  +                }
                                                  +            }
                                                  +            F = 2;
                                                  +            if (u == null) {
                                                  +                for (var v = 0; v < G.length; v++) {
                                                  +                    var J = G[v];
                                                  +                    var D = Utils.pointInLinker(J, B, F);
                                                  +                    if (D > -1) {
                                                  +                        if (u == null) {
                                                  +                            u = {
                                                  +                                linker: B,
                                                  +                                anchors: [],
                                                  +                                type: "line"
                                                  +                            }
                                                  +                        }
                                                  +                        u.anchors.push(J)
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            if (u != null) {
                                                  +                C.push(u)
                                                  +            }
                                                  +        }
                                                  +        return C
                                                  +    },
                                                  +    getEndpointAngle: function(m, k) {
                                                  +        var i;
                                                  +        if (k == "from") {
                                                  +            i = m.from
                                                  +        } else {
                                                  +            i = m.to
                                                  +        }
                                                  +        var n;
                                                  +        if (m.linkerType == "normal") {
                                                  +            if (k == "from") {
                                                  +                n = m.to
                                                  +            } else {
                                                  +                n = m.from
                                                  +            }
                                                  +        } else {
                                                  +            if (m.linkerType == "broken") {
                                                  +                if (k == "from") {
                                                  +                    n = m.points[0]
                                                  +                } else {
                                                  +                    n = m.points[m.points.length - 1]
                                                  +                }
                                                  +            } else {
                                                  +                var l = 12;
                                                  +                var h;
                                                  +                var j = Utils.measureDistance(m.from, m.to);
                                                  +                if (k == "from") {
                                                  +                    h = l / j
                                                  +                } else {
                                                  +                    h = 1 - l / j
                                                  +                }
                                                  +                n = {
                                                  +                    x: (1 - h) * (1 - h) * (1 - h) * m.from.x + 3 * (1 - h) * (1 - h) * h * m.points[0].x + 3 * (1 - h) * h * h * m.points[1].x + h * h * h * m.to.x,
                                                  +                    y: (1 - h) * (1 - h) * (1 - h) * m.from.y + 3 * (1 - h) * (1 - h) * h * m.points[0].y + 3 * (1 - h) * h * h * m.points[1].y + h * h * h * m.to.y
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        return this.getAngle(n, i)
                                                  +    },
                                                  +    getAngle: function(f, e) {
                                                  +        var d = Math.atan(Math.abs(f.y - e.y) / Math.abs(f.x - e.x));
                                                  +        if (e.x <= f.x && e.y > f.y) {
                                                  +            d = Math.PI - d
                                                  +        } else {
                                                  +            if (e.x < f.x && e.y <= f.y) {
                                                  +                d = Math.PI + d
                                                  +            } else {
                                                  +                if (e.x >= f.x && e.y < f.y) {
                                                  +                    d = Math.PI * 2 - d
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        return d
                                                  +    },
                                                  +    getDarkerColor: function(q, m) {
                                                  +        if (!m) {
                                                  +            m = 13
                                                  +        }
                                                  +        var n = q.split(",");
                                                  +        var r = parseInt(n[0]);
                                                  +        var o = parseInt(n[1]);
                                                  +        var l = parseInt(n[2]);
                                                  +        var p = Math.round(r - r / 255 * m);
                                                  +        if (p < 0) {
                                                  +            p = 0
                                                  +        }
                                                  +        var g = Math.round(o - o / 255 * m);
                                                  +        if (g < 0) {
                                                  +            g = 0
                                                  +        }
                                                  +        var b = Math.round(l - l / 255 * m);
                                                  +        if (b < 0) {
                                                  +            b = 0
                                                  +        }
                                                  +        return p + "," + g + "," + b
                                                  +    },
                                                  +    getDarkestColor: function(b) {
                                                  +        return this.getDarkerColor(b, 26)
                                                  +    },
                                                  +    toScale: function(f) {
                                                  +        var e = {};
                                                  +        for (var d in f) {
                                                  +            e[d] = f[d];
                                                  +            if (typeof f[d] == "number") {
                                                  +                e[d] = e[d].toScale()
                                                  +            }
                                                  +        }
                                                  +        return e
                                                  +    },
                                                  +    restoreScale: function(f) {
                                                  +        var e = {};
                                                  +        for (var d in f) {
                                                  +            e[d] = f[d];
                                                  +            if (typeof f[d] == "number") {
                                                  +                e[d] = e[d].restoreScale()
                                                  +            }
                                                  +        }
                                                  +        return e
                                                  +    },
                                                  +    getOutlinkers: function(i) {
                                                  +        var l = [];
                                                  +        var j = [];
                                                  +        for (var n = 0; n < i.length; n++) {
                                                  +            var p = i[n];
                                                  +            if (p != undefined && p.name != "linker") {
                                                  +                var m = Model.getShapeLinkers(p.id);
                                                  +                if (m && m.length > 0) {
                                                  +                    for (var o = 0; o < m.length; o++) {
                                                  +                        var k = m[o];
                                                  +                        if (!this.isSelected(k) && j.indexOf(k) < 0) {
                                                  +                            l.push(Model.getShapeById(k));
                                                  +                            j.push(k)
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        return l
                                                  +    },
                                                  +    getFamilyShapes: function(i) {
                                                  +        var j = [];
                                                  +        for (var m = 0; m < i.length; m++) {
                                                  +            var h = i[m];
                                                  +            if (h.name != "linker") {
                                                  +                if (h.parent) {
                                                  +                    var k = Model.getShapeById(h.parent);
                                                  +                    if (!Utils.isSelected(h.parent)) {
                                                  +                        j.push(k)
                                                  +                    }
                                                  +                    var l = this.getChildrenShapes(k);
                                                  +                    j = j.concat(l)
                                                  +                }
                                                  +                var n = this.getChildrenShapes(h);
                                                  +                j = j.concat(n)
                                                  +            }
                                                  +        }
                                                  +        return j
                                                  +    },
                                                  +    getChildrenShapes: function(f) {
                                                  +        var h = [];
                                                  +        if (f.children && f.children.length > 0) {
                                                  +            for (var e = 0; e < f.children.length; e++) {
                                                  +                var g = f.children[e];
                                                  +                if (!Utils.isSelected(g)) {
                                                  +                    h.push(Model.getShapeById(g))
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        return h
                                                  +    },
                                                  +    isFamilyShape: function(c, d) {
                                                  +        if (c.parent == d.id) {
                                                  +            return true
                                                  +        } else {
                                                  +            if (c.id == d.parent) {
                                                  +                return true
                                                  +            } else {
                                                  +                if (c.parent && c.parent == d.parent) {
                                                  +                    return true
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        return false
                                                  +    },
                                                  +    getContainedShapes: function(n) {
                                                  +        var h = [];
                                                  +        var l = [];
                                                  +        for (var k = 0; k < n.length; k++) {
                                                  +            var m = n[k];
                                                  +            if (m.name != "linker" && m.attribute && m.attribute.container) {
                                                  +                var j = i(m);
                                                  +                h = h.concat(j)
                                                  +            }
                                                  +        }
                                                  +        function i(e) {
                                                  +            var b = [];
                                                  +            for (var c = Model.orderList.length - 1; c >= 0; c--) {
                                                  +                var f = Model.orderList[c].id;
                                                  +                if (e.id != f && !Utils.isSelected(f) && l.indexOf(f) < 0) {
                                                  +                    var d = Model.getShapeById(f);
                                                  +                    if (!d.attribute || typeof d.attribute.container == "undefined" || d.attribute.container == false) {
                                                  +                        if (!Utils.isFamilyShape(d, e)) {
                                                  +                            var a = Utils.getShapeBox(d);
                                                  +                            if (Utils.rectInRect(a, e.props)) {
                                                  +                                b.push(d);
                                                  +                                l.push(f)
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            return b
                                                  +        }
                                                  +        return h
                                                  +    },
                                                  +    getAttachedShapes: function(p) {
                                                  +        var r = [];
                                                  +        for (var m = 0; m < p.length; m++) {
                                                  +            if (p[m] != undefined) {
                                                  +                r.push(p[m].id)
                                                  +            }
                                                  +        }
                                                  +        var l = [];
                                                  +        for (var m = 0; m < p.length; m++) {
                                                  +            var j = p[m];
                                                  +            if (j != undefined && (j.groupName == "task" || j.groupName == "callActivity" || j.groupName == "subProcess")) {
                                                  +                var q = [];
                                                  +                for (var o = Model.orderList.length - 1; o >= 0; o--) {
                                                  +                    var i = Model.orderList[o].id;
                                                  +                    var n = Model.getShapeById(i);
                                                  +                    if (n.attachTo == j.id && !Utils.isSelected(i) && r.indexOf(i) < 0) {
                                                  +                        q.push(n)
                                                  +                    }
                                                  +                }
                                                  +                l = l.concat(q)
                                                  +            }
                                                  +        }
                                                  +        return l
                                                  +    },
                                                  +    copy: function(b) {
                                                  +        return $.extend(true, {},
                                                  +            b)
                                                  +    },
                                                  +    rangeChildren: function(s) {
                                                  +        var v = [];
                                                  +        if (s.children && s.children.length > 0) {
                                                  +            if (s.name == "verticalPool") {
                                                  +                var h = [];
                                                  +                var y = [];
                                                  +                for (var u = 0; u < s.children.length; u++) {
                                                  +                    var w = s.children[u];
                                                  +                    var x = Model.getShapeById(w);
                                                  +                    if (x.name == "horizontalSeparator") {
                                                  +                        y.push(x)
                                                  +                    } else {
                                                  +                        h.push(x)
                                                  +                    }
                                                  +                }
                                                  +                h.sort(function(a, b) {
                                                  +                    return a.props.x - b.props.x
                                                  +                });
                                                  +                var q = s.props.x;
                                                  +                for (var u = 0; u < h.length; u++) {
                                                  +                    var x = h[u];
                                                  +                    if (x.name == 'verticalLane' && x.props.x != q) {
                                                  +                        var m = Utils.getContainedShapes([x]);
                                                  +                        var p = Utils.getOutlinkers(m);
                                                  +                        m = m.concat(p);
                                                  +                        Designer.op.moveShape(m, {
                                                  +                            x : (q-x.props.x) * Designer.config.scale,
                                                  +                            y : 0
                                                  +                        });
                                                  +                        var linkers = [];
                                                  +                        for (var i = 0; i < v.length; i++) {
                                                  +                            if (v[i].name == 'linker') {
                                                  +                                linkers.push(v[i].id);
                                                  +                            }
                                                  +                        }
                                                  +                        for (var i = 0; i < m.length; i++) {
                                                  +                            if (linkers.indexOf(m[i].id) > -1) {
                                                  +                                continue;
                                                  +                            }
                                                  +                            v.push(m[i]);
                                                  +                        }
                                                  +                    }
                                                  +                    x.props.x = q;
                                                  +                    Designer.painter.renderShape(x);
                                                  +                    v.push(x);
                                                  +                    q += x.props.w;
                                                  +                }
                                                  +                y.sort(function(a, b) {
                                                  +                    return a.props.y - b.props.y
                                                  +                });
                                                  +                var r = s.props.y + 40;
                                                  +                for (var u = 0; u < y.length; u++) {
                                                  +                    var x = y[u];
                                                  +                    var z = x.props.y + x.props.h;
                                                  +                    x.props.w = s.props.w;
                                                  +                    x.props.y = r;
                                                  +                    var t = z - r;
                                                  +                    x.props.h = t;
                                                  +                    Designer.painter.renderShape(x);
                                                  +                    v.push(x);
                                                  +                    r += t
                                                  +                }
                                                  +            } else {
                                                  +                if (s.name == "horizontalPool") {
                                                  +                    var h = [];
                                                  +                    var y = [];
                                                  +                    for (var u = 0; u < s.children.length; u++) {
                                                  +                        var w = s.children[u];
                                                  +                        var x = Model.getShapeById(w);
                                                  +                        if (x.name == "verticalSeparator") {
                                                  +                            y.push(x)
                                                  +                        } else {
                                                  +                            h.push(x)
                                                  +                        }
                                                  +                    }
                                                  +                    h.sort(function(a, b) {
                                                  +                        return a.props.y - b.props.y
                                                  +                    });
                                                  +                    var r = s.props.y;
                                                  +                    for (var u = 0; u < h.length; u++) {
                                                  +                        var x = h[u];
                                                  +                        if (x.name == 'horizontalLane' && x.props.y != r) {
                                                  +                            var m = Utils.getContainedShapes([x]);
                                                  +                            var p = Utils.getOutlinkers(m);
                                                  +                            m = m.concat(p);
                                                  +                            Designer.op.moveShape(m, {
                                                  +                                x : 0,
                                                  +                                y : (r-x.props.y) * Designer.config.scale
                                                  +                            });
                                                  +                            var linkers = [];
                                                  +                            for (var i = 0; i < v.length; i++) {
                                                  +                                if (v[i].name == 'linker') {
                                                  +                                    linkers.push(v[i].id);
                                                  +                                }
                                                  +                            }
                                                  +                            for (var i = 0; i < m.length; i++) {
                                                  +                                if (linkers.indexOf(m[i].id) > -1) {
                                                  +                                    continue;
                                                  +                                }
                                                  +                                v.push(m[i]);
                                                  +                            }
                                                  +                        }
                                                  +                        x.props.y = r;
                                                  +                        Designer.painter.renderShape(x);
                                                  +                        v.push(x);
                                                  +                        r += x.props.h
                                                  +                    }
                                                  +                    y.sort(function(a, b) {
                                                  +                        return a.props.x - b.props.x
                                                  +                    });
                                                  +                    var q = s.props.x + 40;
                                                  +                    for (var u = 0; u < y.length; u++) {
                                                  +                        var x = y[u];
                                                  +                        var i = x.props.x + x.props.w;
                                                  +                        x.props.h = s.props.h;
                                                  +                        x.props.x = q;
                                                  +                        var p = i - q;
                                                  +                        x.props.w = p;
                                                  +                        Designer.painter.renderShape(x);
                                                  +                        v.push(x);
                                                  +                        q += p
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        return v
                                                  +    },
                                                  +    getRelativePos: function(h, e, g) {
                                                  +        var f = g.offset();
                                                  +        if (f == null) {
                                                  +            f = {
                                                  +                left: 0,
                                                  +                top: 0
                                                  +            }
                                                  +        }
                                                  +        return {
                                                  +            x: h - f.left + g.scrollLeft(),
                                                  +            y: e - f.top + g.scrollTop()
                                                  +        }
                                                  +    },
                                                  +    getCollapsedShapes: function(b) {
                                                  +        var k = [];
                                                  +        var a = [];
                                                  +        for (var e = 0; e < b.length; e++) {
                                                  +            var f = b[e];
                                                  +            if (f.attribute && f.attribute.collapsed) {
                                                  +                var h = [];
                                                  +                for (var c = Model.orderList.length - 1; c >= 0; c--) {
                                                  +                    var g = Model.orderList[c].id;
                                                  +                    var d = Model.getShapeById(g);
                                                  +                    if (d.attribute && d.attribute.collapseBy == f.id && a.indexOf(g) < 0) {
                                                  +                        h.push(d)
                                                  +                    }
                                                  +                }
                                                  +                k = k.concat(h)
                                                  +            }
                                                  +        }
                                                  +        return k
                                                  +    },
                                                  +    getCollapsedShapesById: function(e) {
                                                  +        var a = [];
                                                  +        for (var c = Model.orderList.length - 1; c >= 0; c--) {
                                                  +            var d = Model.orderList[c].id;
                                                  +            var b = Model.getShapeById(d);
                                                  +            if (b.attribute && b.attribute.collapseBy == e) {
                                                  +                a.push(b)
                                                  +            }
                                                  +        }
                                                  +        return a
                                                  +    },
                                                  +    getShapeLineStyle: function(a, b) {
                                                  +        if (b == false || !Model.define.theme || !Model.define.theme.shape) {
                                                  +            return $.extend({}, Schema.shapeDefaults.lineStyle, a)
                                                  +        } else {
                                                  +            return $.extend({}, Schema.shapeDefaults.lineStyle, Model.define.theme.shape.lineStyle, a)
                                                  +        }
                                                  +    },
                                                  +    getLinkerLineStyle: function(a, b) {
                                                  +        if (b == false || !Model.define.theme || !Model.define.theme.linker) {
                                                  +            return $.extend({}, Schema.linkerDefaults.lineStyle, a)
                                                  +        } else {
                                                  +            return $.extend({}, Schema.linkerDefaults.lineStyle, Model.define.theme.linker.lineStyle, a)
                                                  +        }
                                                  +    },
                                                  +    getShapeFontStyle: function(b, a) {
                                                  +        if (a == false || !Model.define.theme || !Model.define.theme.shape) {
                                                  +            return $.extend({}, Schema.shapeDefaults.fontStyle, b)
                                                  +        } else {
                                                  +            return $.extend({}, Schema.shapeDefaults.fontStyle, Model.define.theme.shape.fontStyle, b)
                                                  +        }
                                                  +    },
                                                  +    getLinkerFontStyle: function(b, a) {
                                                  +        if (a == false || !Model.define.theme || !Model.define.theme.linker) {
                                                  +            return $.extend({}, Schema.linkerDefaults.fontStyle, b)
                                                  +        } else {
                                                  +            return $.extend({}, Schema.linkerDefaults.fontStyle, Model.define.theme.linker.fontStyle, b)
                                                  +        }
                                                  +    },
                                                  +    getShapeFillStyle: function(a, b) {
                                                  +        if (b == false || !Model.define.theme || !Model.define.theme.shape) {
                                                  +            return $.extend({}, Schema.shapeDefaults.fillStyle, a)
                                                  +        } else {
                                                  +            return $.extend({}, Schema.shapeDefaults.fillStyle, Model.define.theme.shape.fillStyle, a)
                                                  +        }
                                                  +    },
                                                  +    containsChinese: function(a) {
                                                  +        if (escape(a).indexOf("%u") >= 0) {
                                                  +            return true
                                                  +        } else {
                                                  +            return false
                                                  +        }
                                                  +    },
                                                  +    filterXss: function(a) {
                                                  +        a = a.toString();
                                                  +        a = a.replace(/</g, "&lt;");
                                                  +        a = a.replace(/%3C/g, "&lt;");
                                                  +        a = a.replace(/>/g, "&gt;");
                                                  +        a = a.replace(/%3E/g, "&gt;");
                                                  +        a = a.replace(/'/g, "&#39;");
                                                  +        a = a.replace(/"/g, "&quot;");
                                                  +        return a
                                                  +    }
                                                  +};
                                                  +var GradientHelper = {
                                                  +    createLinearGradient: function(m, j, k) {
                                                  +        var q = m.props;
                                                  +        var p;
                                                  +        var n;
                                                  +        var o;
                                                  +        if (q.w > q.h) {
                                                  +            p = {
                                                  +                x: 0,
                                                  +                y: q.h / 2
                                                  +            };
                                                  +            n = {
                                                  +                x: q.w,
                                                  +                y: q.h / 2
                                                  +            };
                                                  +            o = (k.angle + Math.PI / 2) % (Math.PI * 2)
                                                  +        } else {
                                                  +            p = {
                                                  +                x: q.w / 2,
                                                  +                y: 0
                                                  +            };
                                                  +            n = {
                                                  +                x: q.w / 2,
                                                  +                y: q.h
                                                  +            };
                                                  +            o = k.angle
                                                  +        }
                                                  +        if (o != 0) {
                                                  +            var r = {
                                                  +                x: q.w / 2,
                                                  +                y: q.h / 2
                                                  +            };
                                                  +            p = Utils.getRotated(r, p, o);
                                                  +            n = Utils.getRotated(r, n, o);
                                                  +            if (p.x < 0) {
                                                  +                p.x = 0
                                                  +            }
                                                  +            if (p.x > m.props.w) {
                                                  +                p.x = m.props.w
                                                  +            }
                                                  +            if (p.y < 0) {
                                                  +                p.y = 0
                                                  +            }
                                                  +            if (p.y > m.props.h) {
                                                  +                p.y = m.props.h
                                                  +            }
                                                  +            if (n.x < 0) {
                                                  +                n.x = 0
                                                  +            }
                                                  +            if (n.x > m.props.w) {
                                                  +                n.x = m.props.w
                                                  +            }
                                                  +            if (n.y < 0) {
                                                  +                n.y = 0
                                                  +            }
                                                  +            if (n.y > m.props.h) {
                                                  +                n.y = m.props.h
                                                  +            }
                                                  +        }
                                                  +        var l = j.createLinearGradient(p.x, p.y, n.x, n.y);
                                                  +        l.addColorStop(0, "rgb(" + k.beginColor + ")");
                                                  +        l.addColorStop(1, "rgb(" + k.endColor + ")");
                                                  +        return l
                                                  +    },
                                                  +    createRadialGradient: function(l, h, g) {
                                                  +        var i = l.props;
                                                  +        var k = i.h;
                                                  +        if (i.w < i.h) {
                                                  +            k = i.w
                                                  +        }
                                                  +        var j = h.createRadialGradient(i.w / 2, i.h / 2, 10, i.w / 2, i.h / 2, k * g.radius);
                                                  +        j.addColorStop(0, "rgb(" + g.beginColor + ")");
                                                  +        j.addColorStop(1, "rgb(" + g.endColor + ")");
                                                  +        return j
                                                  +    },
                                                  +    getLighterColor: function(q) {
                                                  +        var m = 60;
                                                  +        var n = q.split(",");
                                                  +        var r = parseInt(n[0]);
                                                  +        var o = parseInt(n[1]);
                                                  +        var l = parseInt(n[2]);
                                                  +        var p = Math.round(r + (255 - r) / 255 * m);
                                                  +        if (p > 255) {
                                                  +            p = 255
                                                  +        }
                                                  +        var g = Math.round(o + (255 - o) / 255 * m);
                                                  +        if (g > 255) {
                                                  +            g = 255
                                                  +        }
                                                  +        var b = Math.round(l + (255 - l) / 255 * m);
                                                  +        if (b > 255) {
                                                  +            b = 255
                                                  +        }
                                                  +        return p + "," + g + "," + b
                                                  +    },
                                                  +    getDarkerColor: function(q) {
                                                  +        var m = 60;
                                                  +        var n = q.split(",");
                                                  +        var r = parseInt(n[0]);
                                                  +        var o = parseInt(n[1]);
                                                  +        var l = parseInt(n[2]);
                                                  +        var p = Math.round(r - r / 255 * m);
                                                  +        if (p < 0) {
                                                  +            p = 0
                                                  +        }
                                                  +        var g = Math.round(o - o / 255 * m);
                                                  +        if (g < 0) {
                                                  +            g = 0
                                                  +        }
                                                  +        var b = Math.round(l - l / 255 * m);
                                                  +        if (b < 0) {
                                                  +            b = 0
                                                  +        }
                                                  +        return p + "," + g + "," + b
                                                  +    }
                                                  +};
                                                  +var MessageSource = {
                                                  +    batchSize: 0,
                                                  +    messages: [],
                                                  +    withUndo: true,
                                                  +    withMessage: true,
                                                  +    withDock: true,
                                                  +    undoStack: {
                                                  +        stack: [],
                                                  +        push: function(c, d) {
                                                  +            this.stack.push(c);
                                                  +            if (typeof d == "undefined") {
                                                  +                d = true
                                                  +            }
                                                  +            if (d) {
                                                  +                MessageSource.redoStack.stack = []
                                                  +            }
                                                  +            Designer.events.push("undoStackChanged", this.stack.length)
                                                  +        },
                                                  +        pop: function() {
                                                  +            var c = this.stack.length;
                                                  +            if (c == 0) {
                                                  +                return null
                                                  +            }
                                                  +            var d = this.stack[c - 1];
                                                  +            this.stack.splice(c - 1, 1);
                                                  +            MessageSource.redoStack.push(d);
                                                  +            Designer.events.push("undoStackChanged", this.stack.length);
                                                  +            return d
                                                  +        }
                                                  +    },
                                                  +    redoStack: {
                                                  +        stack: [],
                                                  +        push: function(b) {
                                                  +            this.stack.push(b);
                                                  +            Designer.events.push("redoStackChanged", this.stack.length)
                                                  +        },
                                                  +        pop: function() {
                                                  +            var c = this.stack.length;
                                                  +            if (c == 0) {
                                                  +                return null
                                                  +            }
                                                  +            var d = this.stack[c - 1];
                                                  +            this.stack.splice(c - 1, 1);
                                                  +            MessageSource.undoStack.push(d, false);
                                                  +            Designer.events.push("redoStackChanged", this.stack.length);
                                                  +            return d
                                                  +        }
                                                  +    },
                                                  +    beginBatch: function() {
                                                  +        this.batchSize++
                                                  +    },
                                                  +    commit: function() {
                                                  +        this.batchSize--;
                                                  +        this.submit()
                                                  +    },
                                                  +    submit: function() {
                                                  +        if (this.batchSize == 0 && this.messages.length != 0) {
                                                  +            if (this.withDock) {
                                                  +                Dock.update(true)
                                                  +            }
                                                  +            if (this.withMessage == false) {
                                                  +                this.messages = [];
                                                  +                return
                                                  +            }
                                                  +            if (this.withUndo) {
                                                  +                this.undoStack.push(this.messages)
                                                  +            }
                                                  +            if (chartId != "") {
                                                  +                var c = JSON.stringify(this.messages);
                                                  +                if (role != "trial") {
                                                  +                    $("#saving_tip").text("<@i18n resource='diagraming.saving'/>")
                                                  +                }
                                                  +                var d = {
                                                  +                    action: "command",
                                                  +                    messages: c,
                                                  +                    ignore: "messages",
                                                  +                    name: userName
                                                  +                };
                                                  +                CLB.send(d,
                                                  +                    function() {
                                                  +                        if (role != "trial") {
                                                  +                            $("#saving_tip").text("<@i18n resource='diagraming.saved'/>")
                                                  +                        }
                                                  +                    })
                                                  +            }
                                                  +            this.messages = []
                                                  +        }
                                                  +    },
                                                  +    send: function(c, d) {
                                                  +
                                                  +        this.messages.push({
                                                  +            action: c,
                                                  +            content: d
                                                  +        });
                                                  +        this.submit()
                                                  +    },
                                                  +    receive: function(b) {
                                                  +        this.doWithoutMessage(function() {
                                                  +            MessageSource.executeMessages(b, true);
                                                  +            Utils.showLinkerControls();
                                                  +            Utils.showLinkerCursor()
                                                  +        })
                                                  +    },
                                                  +    undo: function() {
                                                  +        var b = this.undoStack.pop();
                                                  +        if (b == null) {
                                                  +            return
                                                  +        }
                                                  +        this.doWithoutUndo(function() {
                                                  +            MessageSource.beginBatch();
                                                  +            for (var k = 0; k < b.length; k++) {
                                                  +                var h = b[k];
                                                  +                if (h.action == "create") {
                                                  +                    Utils.unselect();
                                                  +                    Model.remove(h.content, false)
                                                  +                } else {
                                                  +                    if (h.action == "update") {
                                                  +                        var a = h.content.shapes;
                                                  +                        Model.updateMulti(a);
                                                  +                        for (var l = 0; l < a.length; l++) {
                                                  +                            var i = a[l];
                                                  +                            Designer.painter.renderShape(i)
                                                  +                        }
                                                  +                        var j = Utils.getSelectedIds();
                                                  +                        Utils.unselect();
                                                  +                        Utils.selectShape(j, false)
                                                  +                    } else {
                                                  +                        if (h.action == "remove") {
                                                  +                            var a = h.content;
                                                  +                            Model.addMulti(a);
                                                  +                            for (var l = 0; l < a.length; l++) {
                                                  +                                var i = a[l];
                                                  +                                Designer.painter.renderShape(i)
                                                  +                            }
                                                  +                        } else {
                                                  +                            if (h.action == "updatePage") {
                                                  +                                Model.updatePage(h.content.page)
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            MessageSource.commit()
                                                  +        })
                                                  +    },
                                                  +    redo: function() {
                                                  +        var b = this.redoStack.pop();
                                                  +        if (b == null) {
                                                  +            return
                                                  +        }
                                                  +        this.doWithoutUndo(function() {
                                                  +            MessageSource.executeMessages(b, false)
                                                  +        })
                                                  +    },
                                                  +    executeMessages: function(p, l) {
                                                  +        MessageSource.beginBatch();
                                                  +        for (var o = 0; o < p.length; o++) {
                                                  +            var r = p[o];
                                                  +            if (r.action == "create") {
                                                  +                var s = r.content;
                                                  +                if (l) {
                                                  +                    for (var m = 0; m < s.length; m++) {
                                                  +                        var n = s[m];
                                                  +                        if (n.name != "linker") {
                                                  +                            Schema.initShapeFunctions(n)
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                Model.addMulti(s);
                                                  +                for (var m = 0; m < s.length; m++) {
                                                  +                    var n = s[m];
                                                  +                    Designer.painter.renderShape(n)
                                                  +                }
                                                  +                Model.build()
                                                  +            } else {
                                                  +                if (r.action == "update") {
                                                  +                    var i = r.content.updates;
                                                  +                    for (var m = 0; m < i.length; m++) {
                                                  +                        var q = i[m];
                                                  +                        if (l && q.name != "linker") {
                                                  +                            Schema.initShapeFunctions(q)
                                                  +                        }
                                                  +                        Designer.painter.renderShape(q)
                                                  +                    }
                                                  +                    Model.updateMulti(i);
                                                  +                    var t = Utils.getSelectedIds();
                                                  +                    Utils.unselect();
                                                  +                    Utils.selectShape(t)
                                                  +                } else {
                                                  +                    if (r.action == "remove") {
                                                  +                        Utils.unselect();
                                                  +                        Model.remove(r.content)
                                                  +                    } else {
                                                  +                        if (r.action == "updatePage") {
                                                  +                            Model.updatePage(r.content.update)
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +        MessageSource.commit()
                                                  +    },
                                                  +    doWithoutUndo: function(b) {
                                                  +        this.withUndo = false;
                                                  +        b();
                                                  +        this.withUndo = true
                                                  +    },
                                                  +    doWithoutMessage: function(b) {
                                                  +        this.withMessage = false;
                                                  +        b();
                                                  +        this.withMessage = true
                                                  +    },
                                                  +    doWithoutUpdateDock: function(b) {
                                                  +        this.withDock = false;
                                                  +        b();
                                                  +        this.withDock = true
                                                  +    }
                                                  +};
                                                  +Number.prototype.toScale = function() {
                                                  +    return this * Designer.config.scale
                                                  +};
                                                  +Number.prototype.restoreScale = function() {
                                                  +    return this / Designer.config.scale
                                                  +};
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.core.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.core.js
                                                  new file mode 100644
                                                  index 00000000..00f38db0
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.core.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.init(true);Schema.initMarkers();$(function(){if(role=="trial"){Designer.status="demo"}else{if(role=="viewer"){Designer.status="readonly"}else{if(role=="running"){Designer.status="running"}}}Designer.init();UI.init();Dock.init();Navigator.init();if(Designer.status=="readonly"){Designer.setReadonly(true);$("#moreShapes").hide();Customize.init();return}if(Designer.status=="demo"){UI.gettingStart()}});var Designer={config:{panelItemWidth:30,panelItemHeight:30,pageMargin:10,anchorSize:8,rotaterSize:9,anchorColor:"#833",selectorColor:"#833",scale:1},status:"",initialize:{initialized:false,initLayout:function(){$(window).bind("resize.designer",function(){showPainting();var a=$(window).height()-$("#designer_header").outerHeight()-$("#designer_footer").outerHeight();$(".layout").height(a);if($("#demo_signup").length){$("#designer_layout").height(a-$("#demo_signup").outerHeight())}});$(window).trigger("resize.designer")},initModel:function(){Model.define={page:Utils.copy(Schema.pageDefaults),elements:{}};if(definition!=undefined&&definition.localAttribute!=undefined){Model.define.localAttribute=definition.localAttribute}else{Model.define.localAttribute={}}if(definition!=undefined&&definition.commonShapeConfig!=undefined){Model.define.commonShapeConfig=definition.commonShapeConfig}else{Model.define.commonShapeConfig={}}Model.persistence={page:Utils.copy(Schema.pageDefaults),elements:{},localAttribute:{},commonShapeConfig:{}}},initCanvas:function(){var b=Model.define.page.width.toScale();var m=Model.define.page.height.toScale();var d=Model.define.page.backgroundColor;var C=Utils.getDarkerColor(d);var e=Utils.getDarkestColor(d);$("#designer_canvas").css({"background-color":"rgb("+C+")"});var l=$("#designer_grids");l.attr({width:b,height:m});var f=l[0].getContext("2d");f.clearRect(0,0,b,m);var a=Model.define.page.padding.toScale();var i=b-a*2;var c=m-a*2;f.fillStyle="rgb("+d+")";f.beginPath();f.rect(a,a,i,c);f.fill();var k=Math.round(Model.define.page.gridSize.toScale());if(k<10){k=10}if(Model.define.page.showGrid){f.translate(a,a);f.lineWidth=1;f.save();var o=0.5;var n=0;while(o<=c){f.restore();if(n%4==0){f.strokeStyle="rgb("+e+")"}else{f.strokeStyle="rgb("+C+")"}f.beginPath();f.moveTo(0,o);f.lineTo(i,o);o+=k;n++;f.stroke()}o=0.5;n=0;while(o<=i){f.restore();if(n%4==0){f.strokeStyle="rgb("+e+")"}else{f.strokeStyle="rgb("+C+")"}f.beginPath();f.moveTo(o,0);f.lineTo(o,c);o+=k;n++;f.stroke()}}$("#canvas_container").css({width:b,height:m,padding:Designer.config.pageMargin});if(!this.initialized){$("#designer_layout").scrollTop(Designer.config.pageMargin-10);$("#designer_layout").scrollLeft(Designer.config.pageMargin-10)}var g=$("#bar_list_page").children("li[ac=set_page_showgrid]");g.menuitem("unselect");if(Model.define.page.showGrid){g.menuitem("select")}},initShapes:function(){$("#shape_panel").empty();for(var d=0;d<Schema.categories.length;d++){var e=Schema.categories[d];if(e.name=="standard"){continue}$("#shape_panel").append("<div class='panel_container'><h3 class='panel_title'><div class='ico ico_accordion'></div>"+e.text+"</h3><div id='panel_"+e.name+"' class='content'></div></div>")}$(".panel_title").unbind().bind("click",function(){$(this).parent().toggleClass("panel_collapsed")});for(var u in Schema.shapes){var g=Schema.shapes[u];if(g.attribute.visible&&g.category!="standard"){if((g.category=="process_bpmn2"||g.category=="process.bpmn2"||g.category=="bpmn")&&checkRunningTimeShape(g)){continue}if(!g.groupName){c(g)}else{var h=SchemaGroup.getGroup(g.groupName);if(h[0]==u){c(g,g.groupName)}}}}function c(i,n){i=Utils.copy(i);var m="<div class='panel_box' shapeName='"+i.name+"'><canvas class='panel_item' width='"+(Designer.config.panelItemWidth)+"' height='"+(Designer.config.panelItemHeight)+"'></canvas></div>";var o=$(m).appendTo("#panel_"+i.category);if(n){o.append("<div class='group_icon' onmousedown='Designer.op.showPanelGroup(\""+n+"\", event, this)'></div>")}var l=o.children()[0];o.bind("mouseenter",function(){if($(this).hasClass("readonly")){return}var t=$("#shape_thumb");t.children("div").text(i.title);var s=t.children("canvas")[0].getContext("2d");var q={x:0,y:0,w:i.props.w,h:i.props.h,angle:i.props.angle};var C=160;var r=160;s.clearRect(0,0,C,r);if(i.props.w>=i.props.h){if(i.props.w>C){q.w=C;q.h=parseInt(i.props.h/i.props.w*q.w)}}else{if(i.props.h>r){q.h=r;q.w=parseInt(i.props.w/i.props.h*q.h)}}t.children("canvas").attr({width:C+20,height:q.h+20});t.show();i.props=q;s.save();if(i.name!="text"&&i.name!="umlText"){s.globalAlpha=i.shapeStyle.alpha;var w=(C+20-q.w)/2;var v=10;s.translate(w,v);s.translate(q.w/2,q.h/2);s.rotate(q.angle);s.translate(-(q.w/2),-(q.h/2));Designer.painter.renderShapePath(s,i,true);Designer.painter.renderMarkers(s,i,true)}else{s.translate(C/2+10,q.h/2+10);s.textBaseline="middle";s.textAlign="center";var p="";if(i.fontStyle.italic){p+="italic "}else{p+="normal "}if(i.fontStyle.bold){p+="bold "}else{p+="normal "}p+=i.fontStyle.size+"pt ";p+=i.fontStyle.fontFamily;s.font=p;s.fillStyle="rgb("+i.fontStyle.color+")";s.fillText(i.text,0,0)}s.restore();var x=o.offset().top-$("#designer_header").outerHeight()+o.height()/2-t.outerHeight()/2;if(x<5){x=5}else{if(x+t.outerHeight()>$("#designer_viewport").height()-5){x=$("#designer_viewport").height()-5-t.outerHeight()}}t.css("top",x)}).bind("mouseleave",function(){$("#shape_thumb").hide()});Designer.painter.drawPanelItem(l,i.name)}a();function a(){$(".panel_box").die().live("mousedown",function(i){var q=$(this);if(q.hasClass("readonly")){return}var l=q.attr("shapeName");var s=[];Designer.op.changeState("creating_from_panel");var m=null;var r=null;var p=$("#designer_canvas");var n=k(l);$("#designer").bind("mousemove.creating",function(t){f(n,t)});$("#canvas_container").bind("mousemove.create",function(I){var z=Utils.getRelativePos(I.pageX,I.pageY,p);if(m==null){m=b(l,z.x,z.y);r=$("#"+m.id);r.attr("class","shape_box_creating")}r.css({left:z.x-r.width()/2+"px",top:z.y-r.height()/2+"px","z-index":Model.orderList.length});m.props.x=z.x.restoreScale()-m.props.w/2;m.props.y=z.y.restoreScale()-m.props.h/2;var w=m.props;var v=Designer.op.snapLine(w,[m.id],true,m);if(v.attach){m.attachTo=v.attach.id}else{delete m.attachTo}r.css({left:(m.props.x-10).toScale()+"px",top:(m.props.y-10).toScale()+"px","z-index":Model.orderList.length});s=Utils.getShapeAnchorInLinker(m);Designer.op.hideLinkPoint();for(var A=0;A<s.length;A++){var y=s[A];for(var x=0;x<y.anchors.length;x++){var t=y.anchors[x];Designer.op.showLinkPoint(Utils.toScale(t))}}});var o=false;$("#canvas_container").bind("mouseup.create",function(t){o=true});$(document).bind("mouseup.create",function(){$(this).unbind("mouseup.create");$("#designer").unbind("mousemove.creating");$("#creating_shape_container").hide();Designer.op.hideLinkPoint();Designer.op.hideSnapLine();$("#canvas_container").unbind("mouseup.create").unbind("mousemove.create");if(m!=null){if(o==false){r.remove()}else{MessageSource.beginBatch();if(m.onCreated){var F=m.onCreated();if(F==false){r.remove();MessageSource.commit();return}}r.attr("class","shape_box");Designer.events.push("created",m);Model.add(m);var C=Utils.getShapeContext(m.id);var E=r.position();var aa=7;for(var H=0;H<s.length;H++){var x=s[H];var I=x.linker;if(x.type=="line"){var v=Utils.copy(I);var t=Utils.copy(I);t.id=Utils.newId();if(x.anchors.length==1){var G=x.anchors[0];var z=Utils.getPointAngle(m.id,G.x,G.y,aa);I.to={id:m.id,x:G.x,y:G.y,angle:z};t.from={id:m.id,x:G.x,y:G.y,angle:z}}else{if(x.anchors.length==2){var D=x.anchors[0];var B=x.anchors[1];var A=Utils.measureDistance(I.from,D);var J=Utils.measureDistance(I.from,B);var w,y;if(A<J){w=D;y=B}else{w=B;y=D}var z=Utils.getPointAngle(m.id,w.x,w.y,aa);I.to={id:m.id,x:w.x,y:w.y,angle:z};z=Utils.getPointAngle(m.id,y.x,y.y,aa);t.from={id:m.id,x:y.x,y:y.y,angle:z}}}if(x.anchors.length<=2){Designer.painter.renderLinker(I,true);Model.update(I);Designer.painter.renderLinker(t,true);t.props.zindex=Model.maxZIndex+1;Model.add(t);Designer.events.push("linkerCreated",t)}}else{var G=x.anchors[0];var z=Utils.getPointAngle(m.id,G.x,G.y,aa);if(x.type=="from"){I.from={id:m.id,x:G.x,y:G.y,angle:z}}else{I.to={id:m.id,x:G.x,y:G.y,angle:z}}Designer.painter.renderLinker(I,true);Model.update(I)}}Utils.unselect();Utils.selectShape(m.id);MessageSource.commit();if(m.attribute.editable){Designer.op.editShapeText(m)}}}q.css({left:"0px",top:"0px"});Designer.op.resetState()})})}function k(l){var i=$("#creating_shape_canvas");var m=$("#creating_shape_container");if(i.length==0){m=$("<div id='creating_shape_container'></div>").appendTo("#designer");i=$("<canvas id='creating_shape_canvas' width='"+(Designer.config.panelItemWidth)+"' height='"+(Designer.config.panelItemHeight)+"'></canvas>").appendTo(m)}m.css({left:"0px",top:"0px",width:$(".panel_container").width(),height:$("#shape_panel").outerHeight()});Designer.painter.drawPanelItem(i[0],l);return i}function f(i,l){$("#creating_shape_container").show();var m=Utils.getRelativePos(l.pageX,l.pageY,$("#creating_shape_container"));i.css({left:m.x-Designer.config.panelItemWidth/2,top:m.y-Designer.config.panelItemHeight/2})}function b(n,p,o){var m=Utils.newId();var i=Schema.shapes[n];var r=p.restoreScale()-i.props.w/2;var q=o.restoreScale()-i.props.h/2;var l=Model.create(n,r,q);Designer.painter.renderShape(l);return l}}},hotkey:{init:function(){var a=null;$(document).unbind("keydown.hotkey").bind("keydown.hotkey",function(g){if(g.ctrlKey&&g.keyCode==65){Designer.selectAll();g.preventDefault()}else{if(g.keyCode==46||g.keyCode==8){Designer.op.removeShape();g.preventDefault()}else{if(g.ctrlKey&&g.keyCode==90){MessageSource.undo();g.preventDefault()}else{if(g.ctrlKey&&g.keyCode==89){MessageSource.redo();g.preventDefault()}else{if(g.ctrlKey&&!g.shiftKey&&g.keyCode==67){Designer.clipboard.copy();g.preventDefault()}else{if(g.ctrlKey&&g.keyCode==88){Designer.clipboard.cut();g.preventDefault()}else{if(g.ctrlKey&&g.keyCode==86){Designer.clipboard.paste();g.preventDefault()}else{if(g.ctrlKey&&g.keyCode==68){Designer.clipboard.duplicate();g.preventDefault()}else{if(g.ctrlKey&&g.shiftKey&&g.keyCode==66){Designer.clipboard.brush();g.preventDefault()}else{if(g.ctrlKey&&g.keyCode==190){Designer.zoomIn();g.preventDefault()}else{if(g.ctrlKey&&g.keyCode==188){Designer.zoomOut();g.preventDefault()}else{if(g.keyCode>=37&&g.keyCode<=40){if(a==null){var u=Utils.getSelected();var h=Utils.getFamilyShapes(u);u=u.concat(h);var c=Utils.getContainedShapes(u);u=u.concat(c);var b=Utils.getAttachedShapes(u);u=u.concat(b);var k=Utils.getOutlinkers(u);a=u.concat(k)}if(a.length>0){g.preventDefault();var l=10;if(g.ctrlKey){l=1}Utils.hideLinkerCursor();if(g.keyCode==37){Designer.op.moveShape(a,{x:-l,y:0})}else{if(g.keyCode==38){Designer.op.moveShape(a,{x:0,y:-l})}else{if(g.keyCode==39){Designer.op.moveShape(a,{x:l,y:0})}else{if(g.keyCode==40){Designer.op.moveShape(a,{x:0,y:l})}}}}$(document).unbind("keyup.moveshape").bind("keyup.moveshape",function(){Model.updateMulti(a);a=null;$(document).unbind("keyup.moveshape");Designer.op.hideTip();Utils.showLinkerCursor()})}}else{if(g.keyCode==221&&g.ctrlKey){var i="front";if(g.shiftKey){i="forward"}Designer.layerShapes(i)}else{if(g.keyCode==219&&g.ctrlKey){var i="back";if(g.shiftKey){i="backward"}Designer.layerShapes(i)}else{if(g.keyCode==71&&g.ctrlKey){g.preventDefault();if(g.shiftKey){Designer.ungroup()}else{Designer.group()}}else{if(g.keyCode==76&&g.ctrlKey){g.preventDefault();if(g.shiftKey){Designer.unlockShapes()}else{Designer.lockShapes()}}else{if(g.keyCode==18){Designer.op.changeState("drag_canvas")}else{if(g.keyCode==27){if(!Designer.op.state){Utils.unselect();$(".menu.list").hide();$(".menu").hide();$(".color_picker").hide()}else{if(Designer.op.state=="creating_free_text"||Designer.op.state=="creating_free_linker"){Designer.op.resetState()}}}else{if(g.keyCode==84&&!g.ctrlKey){$(".menu.list").hide();Designer.op.changeState("creating_free_text")}else{if(g.keyCode==73&&!g.ctrlKey){$(".menu.list").hide();UI.showImageSelect(function(n,m,e){UI.insertImage(n,m,e)});$("#designer_contextmenu").hide()}else{if(g.keyCode==76&&!g.ctrlKey){$(".menu.list").hide();Designer.op.changeState("creating_free_linker");$("#designer_contextmenu").hide()}else{if(g.keyCode==66&&g.ctrlKey){var f=Utils.getSelectedIds();if(f.length>0){var d=Model.getShapeById(f[0]);Designer.setFontStyle({bold:!d.fontStyle.bold});UI.update()}}else{if(g.keyCode==73&&g.ctrlKey){var f=Utils.getSelectedIds();if(f.length>0){var d=Model.getShapeById(f[0]);Designer.setFontStyle({italic:!d.fontStyle.italic});UI.update()}}else{if(g.keyCode==85&&g.ctrlKey){var f=Utils.getSelectedIds();if(f.length>0){var d=Model.getShapeById(f[0]);Designer.setFontStyle({underline:!d.fontStyle.underline});UI.update()}g.preventDefault()}else{if(g.keyCode==32&&!g.ctrlKey){var f=Utils.getSelectedIds();if(f.length==1){var d=Model.getShapeById(f[0]);Designer.op.editShapeText(d)}g.preventDefault()}else{if(g.keyCode==121){g.preventDefault();Dock.enterPresentation()}}}}}}}}}}}}}}}}}}}}}}}}}}});$("input,textarea,select").die().live("keydown.hotkey",function(b){b.stopPropagation()})},cancel:function(){$(document).unbind("keydown.hotkey")}},contextMenu:{init:function(){$("#designer_contextmenu").unbind("mousedown").bind("mousedown",function(a){a.stopPropagation()});$("#designer_contextmenu").find("li:not(.devider)").unbind("click").bind("click",function(){var a=$(this);if(!a.menuitem("isDisabled")&&a.children(".extend_menu").length==0){Designer.contextMenu.execAction(a);Designer.contextMenu.hide()}});$("#canvas_container").unbind("contextmenu").bind("contextmenu",function(c){c.preventDefault();var b=$("#designer_canvas");var a=Utils.getRelativePos(c.pageX,c.pageY,b);Designer.contextMenu.show(a.x,a.y)})},destroy:function(){$("#canvas_container").unbind("contextmenu");this.hide()},menuPos:{x:0,y:0,shape:null},show:function(h,g){this.menuPos.x=h;this.menuPos.y=g;var c=$("#designer_contextmenu");var a=Utils.getShapeByPosition(h,g,false);c.children().hide();c.children("li[ac=selectall]").show();c.children(".devi_selectall").show();c.children("li[ac=drawline]").show();var b=Designer.clipboard.elements.length;if(a==null){if(b>0){c.children("li[ac=paste]").show();c.children(".devi_clip").show()}}else{var e=a.shape;this.menuPos.shape=e;if(e.locked){if(b>0){c.children("li[ac=paste]").show();c.children(".devi_clip").show()}c.children("li[ac=unlock]").show();c.children(".devi_shape").show()}else{c.children("li[ac=cut]").show();c.children("li[ac=copy]").show();c.children("li[ac=duplicate]").show();if(b>0){c.children("li[ac=paste]").show()}c.children(".devi_clip").show();c.children("li[ac=front]").show();c.children("li[ac=back]").show();c.children("li[ac=lock]").show();var f=Utils.getSelectedIds();var d=f.length;if(d>=2){c.children("li[ac=group]").show();$("#ctxmenu_align").show()}var i=Utils.getSelectedGroups().length;if(i>=1){c.children("li[ac=ungroup]").show()}c.children(".devi_shape").show();if(d==1&&e.name!="linker"&&e.link){c.children("li[ac=changelink]").show()}if(e.name=="linker"||e.attribute.editable){c.children("li[ac=edit]").show()}c.children("li[ac=delete]").show();c.children(".devi_del").show()}}c.css({display:"block","z-index":Model.orderList.length+3,left:h,top:g});$(document).bind("mousedown.ctxmenu",function(){Designer.contextMenu.hide()})},hide:function(){$("#designer_contextmenu").hide();$(document).unbind("mousedown.ctxmenu")},execAction:function(b){var c=b.attr("ac");if(c=="cut"){Designer.clipboard.cut()}else{if(c=="copy"){Designer.clipboard.copy()}else{if(c=="paste"){Designer.clipboard.paste(this.menuPos.x,this.menuPos.y)}else{if(c=="duplicate"){Designer.clipboard.duplicate()}else{if(c=="front"){Designer.layerShapes("front")}else{if(c=="back"){Designer.layerShapes("back")}else{if(c=="lock"){Designer.lockShapes()}else{if(c=="unlock"){Designer.unlockShapes()}else{if(c=="group"){Designer.group()}else{if(c=="ungroup"){Designer.ungroup()}else{if(c=="align_shape"){var a=b.attr("al");Designer.alignShapes(a)}else{if(c=="edit"){Designer.op.editShapeText(this.menuPos.shape)}else{if(c=="delete"){Designer.op.removeShape()}else{if(c=="selectall"){Designer.selectAll()}else{if(c=="drawline"){Designer.op.changeState("creating_free_linker")}else{if(c=="changelink"){UI.showInsertLink()}}}}}}}}}}}}}}}}}},init:function(){this.initialize.initLayout();this.initialize.initModel();this.initialize.initCanvas();this.initialize.initShapes();this.hotkey.init();this.contextMenu.init();Designer.op.init();this.initialize.initialized=true;Designer.events.push("initialized");$("#designer_layout").on("scroll",function(){$(document).trigger("mouseup.multiselect")})},op:{init:function(){var b=$("#designer_canvas");var a=$("#canvas_container");a.unbind("mousemove.operate").bind("mousemove.operate",function(d){if(Designer.op.state!=null){return}Designer.op.destroy();var c=Utils.getRelativePos(d.pageX,d.pageY,b);var e=Utils.getShapeByPosition(c.x,c.y);if(e!=null){if(e.type=="dataAttribute"){}else{if(e.type=="linker"){a.css("cursor","pointer");Designer.op.shapeSelectable(e.shape);var g=e.shape;var f=e.pointIndex;if(g.linkerType=="broken"&&f>1&&f<=g.points.length){Designer.op.brokenLinkerChangable(g,f-1)}else{if(g.from.id==null&&g.to.id==null){a.css("cursor","move");Designer.op.shapeDraggable()}}Designer.op.linkerEditable(g)}else{if(e.type=="linker_point"){a.css("cursor","move");Designer.op.shapeSelectable(e.shape);Designer.op.linkerDraggable(e.shape,e.point);Designer.op.linkerEditable(e.shape)}else{if(e.type=="linker_text"){a.css("cursor","text");Designer.op.shapeSelectable(e.shape);Designer.op.linkerEditable(e.shape)}else{if(e.type=="shape"){if(e.shape.locked){a.css("cursor","default");Designer.op.shapeSelectable(e.shape)}else{a.css("cursor","move");Designer.op.shapeSelectable(e.shape);Designer.op.shapeEditable(e.shape);Designer.op.shapeDraggable();if(e.shape.link){}}}else{a.css("cursor","crosshair");Designer.op.shapeSelectable(e.shape);Designer.op.shapeLinkable(e.shape,e.linkPoint)}if(e.shape.parent){Utils.showAnchors(Model.getShapeById(e.shape.parent))}else{Utils.showAnchors(e.shape)}}}}}}else{a.css("cursor","default");Designer.op.shapeMultiSelectable()}})},cancel:function(){$("#canvas_container").unbind("mousemove.operate").css("cursor","default");this.destroy()},destroy:function(){$("#designer_canvas").unbind("mousedown.drag").unbind("dblclick.edit").unbind("mousedown.draglinker").unbind("mousedown.select").unbind("mousedown.brokenLinker").unbind("dblclick.edit_linker");$("#canvas_container").unbind("mousedown.link").unbind("mousedown.create_text").unbind("mousedown.drag_canvas");$("#designer_layout").unbind("mousedown.multiselect");Utils.hideAnchors();$("#link_spot").hide()},state:null,changeState:function(a){this.state=a;if(a=="creating_free_text"){this.destroy();$("#canvas_container").css("cursor","crosshair");this.textCreatable()}else{if(a=="creating_free_linker"){this.destroy();$("#canvas_container").css("cursor","crosshair");this.shapeLinkable()}else{if(a=="drag_canvas"){this.destroy();this.canvasDraggable()}else{if(a=="changing_curve"){this.destroy()}}}}},resetState:function(){this.state=null;$("#canvas_container").css("cursor","default")},shapeSelectable:function(a){var b=$("#designer_canvas");b.bind("mousedown.select",function(c){Designer.op.changeState("seelcting_shapes");var d=a.id;var e=[];if(c.ctrlKey){var e=Utils.getSelectedIds();if(Utils.isSelected(d)){Utils.removeFromArray(e,d)}else{e.push(d)}Utils.unselect();if(e.length>0){Utils.selectShape(e)}}else{if(Utils.selectIds.indexOf(d)<0){Utils.unselect();Utils.selectShape(d)}}$(document).bind("mouseup.select",function(){Designer.op.resetState();b.unbind("mousedown.select");$(document).unbind("mouseup.select")})})},shapeDraggable:function(){var b=$("#designer_canvas");var a=$("#canvas_container");b.bind("mousedown.drag",function(h){Utils.hideLinkerCursor();Utils.hideLinkerControls();Designer.op.changeState("dragging");var l=Utils.getRelativePos(h.pageX,h.pageY,b);var o=Utils.getSelected();var m=true;if(o.length==1&&o[0].name=="linker"){m=false}var f=null;if(m){f=Utils.getShapesBounding(o)}var e=Utils.getFamilyShapes(o);o=o.concat(e);var c=Utils.getContainedShapes(o);o=o.concat(c);var A=Utils.getAttachedShapes(o);o=o.concat(A);var g=[];if(m){for(var p=0;p<o.length;p++){var d=o[p];if(d==undefined){continue}if(d.name=="linker"){if(d.from.id&&g.indexOf(d.from.id)<0){g.push(d.from.id)}if(d.to.id&&g.indexOf(d.to.id)<0){g.push(d.to.id)}}if(g.indexOf(d.id)<0){g.push(d.id)}}}var n=o;var k=Utils.getOutlinkers(o);o=o.concat(k);a.bind("mousemove.drag",function(i){$("#link_spot").hide();var s=Utils.getRelativePos(i.pageX,i.pageY,b);var r={x:s.x-l.x,y:s.y-l.y};if(m){var t=Utils.copy(f);t.x+=r.x;t.y+=r.y;var q=Designer.op.snapLine(t,g);r={x:t.x-f.x,y:t.y-f.y};s={x:l.x+r.x,y:l.y+r.y};f.x+=r.x;f.y+=r.y;if(n.length==1&&n[0].groupName=="boundaryEvent"){if(q.attach){n[0].attachTo=q.attach.id}else{delete o[0].attachTo}}}if(r.x==0&&r.y==0){return}Designer.op.moveShape(o,r);l=s;$(document).unbind("mouseup.drop").bind("mouseup.drop",function(){Model.updateMulti(o);$(document).unbind("mouseup.drop")})});$(document).bind("mouseup.drag",function(){Designer.op.resetState();a.unbind("mousemove.drag");b.unbind("mousedown.drag");$(document).unbind("mouseup.drag");Designer.op.hideTip();Designer.op.hideSnapLine();Utils.showLinkerCursor();Utils.showLinkerControls();if(isAutoSave=="0"){$("#saving_tip").css("color","rgb(255, 0, 0)");$("#saving_tip").text("文件已修改,未保存")}})})},shapeResizable:function(){$(".shape_controller").bind("mousedown",function(aj){if(!isAdmin&&isCustomDefine=="1"){var ag=Utils.getSelected();var m=true;for(var B=0;B<ag.length;B++){var e=ag[B].name;var af=Schema.shapes[e];if(af.resizeable=="0"){return}}}Utils.hideLinkerCursor();if($("#shape_text_edit").length){$("#shape_text_edit").trigger("blur")}var h=$("#canvas_container");var b=$("#designer_canvas");aj.stopPropagation();var z=Utils.getRelativePos(aj.pageX,aj.pageY,b);var l=$(this);Designer.op.changeState("resizing");var f=Utils.getSelectedIds();var s=Utils.getSelected();var q;if(f.length==1){var ak=Model.getShapeById(f[0]);q=Utils.copy(ak.props)}else{q=Utils.getControlBox(f);q.angle=0}var A={x:q.x+q.w/2,y:q.y+q.h/2};var o=l.attr("resizeDir");var y={};if(o.indexOf("l")>=0){y.x=q.x+q.w}else{if(o.indexOf("r")>=0){y.x=q.x}else{y.x=q.x+q.w/2}}if(o.indexOf("t")>=0){y.y=q.y+q.h}else{if(o.indexOf("b")>=0){y.y=q.y}else{y.y=q.y+q.h/2}}y=Utils.getRotated(A,y,q.angle);function w(p,i){if(p.id==null){if(i){return{type:"box",x:(p.x-q.x)/q.w,y:(p.y-q.y)/q.h}}else{return{type:"fixed"}}}else{if(Utils.isSelected(p.id)){var C=Model.getShapeById(p.id);var D={x:C.props.x+C.props.w/2,y:C.props.y+C.props.h/2};var E=Utils.getRotated(D,p,-C.props.angle);return{type:"shape",x:(E.x-C.props.x)/C.props.w,y:(E.y-C.props.y)/C.props.h}}else{return{type:"fixed"}}}}var d=[];var ai={};var a=[];var r=Utils.getAttachedShapes(s);s=s.concat(r);var t=[];for(var v=0;v<s.length;v++){var ak=s[v];t.push(ak.id);if(ak.parent){t.push(ak.parent)}if(ak.name=="linker"){if(a.indexOf(ak.id)==-1){a.push(ak.id)}}else{d.push(ak);if(ak.attachTo&&!Utils.isSelected(ak.id)){ai[ak.id]={type:"attached",x:(ak.props.x+ak.props.w/2-q.x)/q.w,y:(ak.props.y+ak.props.h/2-q.y)/q.h}}else{ai[ak.id]={x:(ak.props.x-q.x)/q.w,y:(ak.props.y-q.y)/q.h,w:ak.props.w/q.w,h:ak.props.h/q.h}}var u=Model.getShapeLinkers(ak.id);if(u&&u.length>0){for(var g=0;g<u.length;g++){var n=u[g];if(a.indexOf(n)==-1){a.push(n)}}}}}for(var v=0;v<a.length;v++){var n=a[v];var k=Model.getShapeById(n);d.push(k);var s=Utils.isSelected(n);ai[k.id]={from:w(k.from,s),to:w(k.to,s)}}var c=l.css("cursor");h.css("cursor",c);var x=[];var ah={w:20,h:20};Designer.events.push("beforeResize",{minSize:ah,shapes:d,dir:o});h.bind("mousemove.resize",function(W){x=[];var F=Utils.getRelativePos(W.pageX,W.pageY,b);F=Utils.restoreScale(F);var N=Utils.getRotated(y,F,-q.angle);var C=Utils.copy(q);if(o.indexOf("r")>=0){C.w=N.x-y.x}else{if(o.indexOf("l")>=0){C.w=y.x-N.x}}if(o.indexOf("b")>=0){C.h=N.y-y.y}else{if(o.indexOf("t")>=0){C.h=y.y-N.y}}if(W.ctrlKey&&o.length==2){if(q.w>=q.h){C.h=q.h/q.w*C.w;if(C.h<ah.h){C.h=ah.h;C.w=q.w/q.h*C.h}}else{C.w=q.w/q.h*C.h;if(C.w<ah.w){C.w=ah.w;C.h=q.h/q.w*C.w}}}else{if(C.w<ah.w){C.w=ah.w}if(C.h<ah.h){C.h=ah.h}}var T={};if(o.indexOf("r")>=0){T.x=y.x+C.w}else{if(o.indexOf("l")>=0){T.x=y.x-C.w}else{T.x=y.x}}if(o.indexOf("b")>=0){T.y=y.y+C.h}else{if(o.indexOf("t")>=0){T.y=y.y-C.h}else{T.y=y.y}}var J=Utils.getRotated(y,T,q.angle);var L={x:0.5*y.x+0.5*J.x,y:0.5*y.y+0.5*J.y};var R=Utils.getRotated(L,y,-q.angle);if(o.indexOf("r")>=0){C.x=R.x}else{if(o.indexOf("l")>=0){C.x=R.x-C.w}else{C.x=R.x-C.w/2}}if(o.indexOf("b")>=0){C.y=R.y}else{if(o.indexOf("t")>=0){C.y=R.y-C.h}else{C.y=R.y-C.h/2}}if(C.angle==0){var i=d[0];var P=Designer.op.snapResizeLine(C,t,o)}Utils.removeAnchors();for(var S=0;S<d.length;S++){var E=d[S];var O=ai[E.id];if(E.name=="linker"){if(O.from.type=="box"){E.from.x=C.x+C.w*O.from.x;E.from.y=C.y+C.h*O.from.y}else{if(O.from.type=="shape"){var U=Model.getShapeById(E.from.id);var Q={x:U.props.x+U.props.w*O.from.x,y:U.props.y+U.props.h*O.from.y};var V={x:U.props.x+U.props.w/2,y:U.props.y+U.props.h/2};var G=Utils.getRotated(V,Q,U.props.angle);E.from.x=G.x;E.from.y=G.y}}if(O.to.type=="box"){E.to.x=C.x+C.w*O.to.x;E.to.y=C.y+C.h*O.to.y}else{if(O.to.type=="shape"){var U=Model.getShapeById(E.to.id);var Q={x:U.props.x+U.props.w*O.to.x,y:U.props.y+U.props.h*O.to.y};var V={x:U.props.x+U.props.w/2,y:U.props.y+U.props.h/2};var G=Utils.getRotated(V,Q,U.props.angle);E.to.x=G.x;E.to.y=G.y}}Designer.painter.renderLinker(E,true)}else{if(O.type=="attached"){E.props.x=C.x+C.w*O.x-E.props.w/2;E.props.y=C.y+C.h*O.y-E.props.h/2}else{var p=Utils.copy(E.props);E.props.x=C.x+C.w*O.x;E.props.y=C.y+C.h*O.y;E.props.w=C.w*O.w;E.props.h=C.h*O.h;var D=Model.getShapeById(E.id).props;D.x=C.x+C.w*O.x;D.y=C.y+C.h*O.y;D.w=C.w*O.w;D.h=C.h*O.h;var I={x:E.props.x-p.x,y:E.props.y-p.y,w:E.props.w-p.w,h:E.props.h-p.h};var M={shape:E,offset:I,dir:o};var K=Designer.events.push("resizing",M);if(K){x=x.concat(K)}}Designer.painter.renderShape(E);Utils.showAnchors(E)}}Designer.painter.drawControls(f);var H="W: "+Math.round(C.w)+"&nbsp;&nbsp;H: "+Math.round(C.h);if(C.x!=q.x){H="X: "+Math.round(C.x)+"&nbsp;&nbsp;Y: "+Math.round(C.y)+"<br/>"+H}Designer.op.showTip(H);$(document).unbind("mouseup.resize_ok").bind("mouseup.resize_ok",function(){if(x.length>0){d=d.concat(x)}Model.updateMulti(d);$(document).unbind("mouseup.resize_ok")})});$(document).bind("mouseup.resize",function(){h.css("cursor","default");Designer.op.resetState();h.unbind("mousemove.resize");$(document).unbind("mouseup.resize");Designer.op.hideTip();Utils.showLinkerCursor();Designer.op.hideSnapLine()})})},shapeRotatable:function(){$(".shape_rotater").bind("mousemove",function(b){var a=$(this);var d=b.pageX-a.offset().left;var c=b.pageY-a.offset().top;var f=a[0].getContext("2d");a.unbind("mousedown");a.removeClass("rotate_enable");if(f.isPointInPath(d,c)){a.addClass("rotate_enable");a.bind("mousedown",function(k){Utils.hideLinkerCursor();if($("#shape_text_edit").length){$("#shape_text_edit").trigger("blur")}k.stopPropagation();Designer.op.changeState("rotating");var e=Utils.getSelectedIds();var i;var y;if(e.length==1){var g=Model.getShapeById(e[0]);i=g.props;y=g.props.angle}else{i=Utils.getControlBox(e);y=0}var m={x:i.x+i.w/2,y:i.y+i.h/2};var h=Utils.toScale(m);var n=$("#designer_canvas");var p=Utils.getSelected();var q=Utils.getAttachedShapes(p);p=p.concat(q);var l=Utils.getOutlinkers(p);p=p.concat(l);var o=y;$(document).bind("mousemove.rotate",function(w){var v=Utils.getRelativePos(w.pageX,w.pageY,n);var D=Math.atan(Math.abs(v.x-h.x)/Math.abs(h.y-v.y));if(v.x>=h.x&&v.y>=h.y){D=Math.PI-D}else{if(v.x<=h.x&&v.y>=h.y){D=Math.PI+D}else{if(v.x<=h.x&&v.y<=h.y){D=Math.PI*2-D}}}D=D%(Math.PI*2);var x=Math.PI/36;var t=Math.round(D/x);D=x*t;if(D==o){return}o=D;Designer.op.showTip(t*5%360+"°");Designer.painter.rotateControls(i,D);Utils.removeAnchors();var z=D-y;for(var E=0;E<p.length;E++){var r=p[E];var C=Model.getPersistenceById(r.id);if(r.name!="linker"){r.props.angle=Math.abs((z+C.props.angle)%(Math.PI*2));var M={x:C.props.x+C.props.w/2,y:C.props.y+C.props.h/2};var u=Utils.getRotated(m,M,z);r.props.x=u.x-r.props.w/2;r.props.y=u.y-r.props.h/2;Designer.painter.renderShape(r);Utils.showAnchors(r)}else{var s=false;if((Utils.isSelected(r.id)&&r.from.id==null)||Utils.isSelected(r.from.id)){var A=Utils.getRotated(m,C.from,z);r.from.x=A.x;r.from.y=A.y;if(r.from.angle!=null){r.from.angle=Math.abs((C.from.angle+z)%(Math.PI*2))}s=true}var B=false;if((Utils.isSelected(r.id)&&r.to.id==null)||Utils.isSelected(r.to.id)){var A=Utils.getRotated(m,C.to,z);r.to.x=A.x;r.to.y=A.y;if(r.to.angle!=null){r.to.angle=Math.abs((C.to.angle+z)%(Math.PI*2))}B=true}if(s||B){Designer.painter.renderLinker(r,true)}}}}).bind("mouseup.rotate",function(){$(document).unbind("mousemove.rotate").unbind("mouseup.rotate");Designer.op.resetState();Model.updateMulti(p);Designer.painter.drawControls(e);Designer.op.hideTip();Utils.showLinkerCursor()})})}else{a.removeClass("rotate_enable");a.unbind("mousedown")}})},groupShapeChangable:function(){$(".change_shape_icon").bind("mousedown",function(b){b.stopPropagation();var f=Utils.getSelected()[0];var d=f.groupName;var a=$(this).parent();var c=a.position();var h=c.left+a.width();var g=c.top+a.height()+10;Designer.op.groupDashboard(d,h,g,function(l){if(f.name!=l){var o=Designer.events.push("shapeChanged",{shape:f,name:l});var q=Utils.copy(f);var n=Utils.copy(f);Model.changeShape(f,l);for(var r=0;r<n.dataAttributes.length;r++){var m=n.dataAttributes[r];if(m.attributesJsonArray){var i=m.attributesJsonArray.splice(0);if(Model.define.localAttribute!=undefined&&Model.define.localAttribute[l]!=undefined&&Model.define.localAttribute[l]!=null&&Model.define.localAttribute[l].length>0){for(var u in Model.define.localAttribute[l]){m.attributesJsonArray.push(Utils.copy(Model.define.localAttribute[l][u]))}}for(var e=0;e<i.length;e++){var t=(i[e].value||i[e].value===false)&&i[e].value!==[];if(i[e]&&i[e].id&&t){var k=false;for(var s=0;s<m.attributesJsonArray.length;s++){if(m.attributesJsonArray[s]&&m.attributesJsonArray[s].id==i[e].id){m.attributesJsonArray[s]=i[e];k=true;break}}}}}}f.dataAttributes=n.dataAttributes;var p=[f];if(o&&o.length>0){p=p.concat(o)}Model.updateMulti(p)}})})},shapeMultiSelectable:function(){var a=$("#designer_canvas");var b=$("#designer_layout");b.unbind("mousedown.multiselect").bind("mousedown.multiselect",function(d){var c=null;if(!d.ctrlKey){Utils.unselect()}var e=Utils.getRelativePos(d.pageX,d.pageY,a);Designer.op.changeState("multi_selecting");b.bind("mousemove.multiselect",function(g){if(c==null){c=$("<div id='selecting_box'></div>").appendTo(a)}var f=Utils.getRelativePos(g.pageX,g.pageY,a);var h={"z-index":Model.orderList.length,left:f.x,top:f.y};if(f.x>e.x){h.left=e.x}if(f.y>e.y){h.top=e.y}h.width=Math.abs(f.x-e.x);h.height=Math.abs(f.y-e.y);c.css(h)});$(document).unbind("mouseup.multiselect").bind("mouseup.multiselect",function(h){if(c!=null){var f={x:c.position().left.restoreScale(),y:c.position().top.restoreScale(),w:c.width().restoreScale(),h:c.height().restoreScale()};var i=Utils.getShapesByRange(f);if(h.ctrlKey){var g=Utils.getSelectedIds();Utils.mergeArray(i,g)}Utils.unselect();Utils.selectShape(i);c.remove()}Designer.op.resetState();$(document).unbind("mouseup.multiselect");b.unbind("mousemove.multiselect")});b.unbind("mousedown.multiselect")})},shapeEditable:function(a){var b=$("#designer_canvas");if(a.attribute.editable==false){return}b.unbind("dblclick.edit").bind("dblclick.edit",function(){Designer.op.editShapeText(a);b.unbind("dblclick.edit")})},editShapeText:function(g){if(g.name=="linker"){this.editLinkerText(g);return}var d=$("#shape_text_edit");if(d.length==0){d=$("<textarea id='shape_text_edit'></textarea>").appendTo("#designer_canvas")}var c=$("#shape_text_ruler");if(c.length==0){c=$("<textarea id='shape_text_ruler'></textarea>").appendTo("#designer_canvas")}$(".text_canvas[forshape="+g.id+"]").hide();var b=g.fontStyle;var f=g.getTextBlock();if(b.orientation=="horizontal"){var a={x:f.x+f.w/2,y:f.y+f.h/2};f={x:a.x-f.h/2,y:a.y-f.w/2,w:f.h,h:f.w}}var h={width:f.w+"px","z-index":Model.orderList.length+2,"line-height":Math.round(b.size*1.25)+"px","font-size":b.size+"px","font-family":b.fontFamily,"font-weight":b.bold?"bold":"normal","font-style":b.italic?"italic":"normal","text-align":b.textAlign,color:"rgb("+b.color+")","text-decoration":b.underline?"underline":"none"};d.css(h);c.css(h);d.show();f.x+=g.props.x;f.y+=g.props.y;d.val(g.text);$("#shape_text_edit").unbind().bind("keyup",function(){var q=$(this).val();c.val(q);c.scrollTop(99999);var i=c.scrollTop();d.css({height:i});var k={x:f.x+f.w/2,y:f.y+f.h/2};var l=0;var n=0;var s=f.h;if(g.fontStyle.vAlign=="middle"){if(i>s){s=i;l=(k.y-s/2);n=0}else{l=(k.y-f.h/2);n=(f.h-i)/2;s=f.h-n}}else{if(g.fontStyle.vAlign=="bottom"){if(i>s){s=i;l=(k.y+f.h/2-s);n=0}else{l=(k.y-f.h/2);n=f.h-i;s=f.h-n}}else{l=(k.y-f.h/2);n=0;if(i>s){s=i}else{s=f.h}}}var r=n+s;var p={x:f.x+f.w/2,y:l+r/2};var o=g.props.angle;if(o!=0){var t={x:g.props.x+g.props.w/2,y:g.props.y+g.props.h/2};p=Utils.getRotated(t,p,o)}if(b.orientation=="horizontal"){o=(Math.PI*1.5+o)%(Math.PI*2)}var y=Math.round(o/(Math.PI*2)*360);var m="rotate("+y+"deg) scale("+Designer.config.scale+")";d.css({width:f.w,height:s,"padding-top":n,left:p.x.toScale()-f.w/2-2,top:p.y.toScale()-r/2-2,"-webkit-transform":m,"-ms-transform":m,"-o-transform":m,"-moz-transform":m,transform:m})}).bind("keydown",function(k){var l=$(this);if(k.keyCode==13&&k.ctrlKey){e();return false}else{if(k.keyCode==27){l.unbind().remove();$(".text_canvas[forshape="+g.id+"]").show()}else{if(k.keyCode==66&&k.ctrlKey){var m=!g.fontStyle.bold;g.fontStyle.bold=m;Model.update(g);var i=m?"bold":"normal";$(this).css("font-weight",i);c.css("font-weight",i);UI.update()}else{if(k.keyCode==73&&k.ctrlKey){var m=!g.fontStyle.italic;g.fontStyle.italic=m;Model.update(g);var i=m?"italic":"normal";$(this).css("font-style",i);c.css("font-style",i);UI.update()}else{if(k.keyCode==85&&k.ctrlKey){var m=!g.fontStyle.underline;g.fontStyle.underline=m;Model.update(g);var i=m?"underline":"none";$(this).css("text-decoration",i);c.css("text-decoration",i);k.preventDefault();UI.update()}}}}}}).bind("blur",function(i){e()}).bind("mousemove",function(i){i.stopPropagation()}).bind("mousedown",function(i){i.stopPropagation()}).bind("mouseenter",function(i){Designer.op.destroy()});$("#shape_text_edit").trigger("keyup");d.select();function e(){var i=$("#shape_text_edit").val();if($("#shape_text_edit").length&&$("#shape_text_edit").is(":visible")){if(i!=g.text){g.text=i;Model.update(g)}Designer.painter.renderShape(g);$("#shape_text_edit").remove()}}},shapeLinkable:function(a,d){var b=$("#designer_canvas");var e=$("#canvas_container");e.unbind("mousedown.link").bind("mousedown.link",function(k){Designer.op.changeState("linking_from_shape");var h=null;var i=null;var g;if(!a){var f=Utils.getRelativePos(k.pageX,k.pageY,b);g={x:f.x.restoreScale(),y:f.y.restoreScale(),id:null,angle:null}}else{g=d;g.id=a.id}e.bind("mousemove.link",function(l){e.css("cursor","default");var o=Utils.getRelativePos(l.pageX,l.pageY,b);if(i==null){i=c(g,o);Designer.events.push("linkerCreating",i)}Designer.op.moveLinker(i,"to",o.x,o.y);$(document).unbind("mouseup.droplinker").bind("mouseup.droplinker",function(){if(Math.abs(o.x-g.x)>20||Math.abs(o.y-g.y)>20){Model.add(i);Designer.events.push("linkerCreated",i);if(i.to.id==null&&i.from.id!=null){Designer.op.linkDashboard(i)}Utils.showLinkerCursor()}else{$("#"+i.id).remove()}$(document).unbind("mouseup.droplinker")})});$(document).bind("mouseup.link",function(){Designer.op.hideLinkPoint();Designer.op.resetState();e.unbind("mousedown.link");e.unbind("mousemove.link");$(document).unbind("mouseup.link")})});function c(g,f){var h=Utils.newId();var i=Utils.copy(Schema.linkerDefaults);i.from=g;i.to={id:null,x:f.x,y:f.y,angle:null};i.props={zindex:Model.maxZIndex+1};i.id=h;return i}},linkerEditable:function(b){var a=$("#designer_canvas");a.unbind("dblclick.edit_linker").bind("dblclick.edit_linker",function(){Designer.op.editLinkerText(b);a.unbind("dblclick.edit_linker")})},editLinkerText:function(h){Designer.contextMenu.hide();var g=Designer.painter.getLinkerMidpoint(h);var c=$("#"+h.id).find(".text_canvas");var e=$("#linker_text_edit");if(e.length==0){e=$("<textarea id='linker_text_edit'></textarea>").appendTo("#designer_canvas")}$("#"+h.id).find(".text_canvas").hide();var b=h.fontStyle;var a="scale("+Designer.config.scale+")";var d=Math.round(b.size*1.25);e.css({"z-index":Model.orderList.length,"line-height":d+"px","font-size":b.size+"px","font-family":b.fontFamily,"font-weight":b.bold?"bold":"normal","font-style":b.italic?"italic":"normal","text-align":b.textAlign,color:"rgb("+b.color+")","text-decoration":b.underline?"underline":"none","-webkit-transform":a,"-ms-transform":a,"-o-transform":a,"-moz-transform":a,transform:a});e.val(h.text).show().select();e.unbind().bind("keyup",function(){var i=$(this).val();var k=i.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\n/g,"<br/>");c.html(k+"<br/>");var l=c.width();if(l<50){l=50}var m=c.height();if(m<d){m=d}e.css({left:g.x.toScale()-l/2-2,top:g.y.toScale()-m/2-2,width:l,height:m})}).bind("mousedown",function(i){i.stopPropagation()}).bind("keydown",function(k){if(k.keyCode==13&&k.ctrlKey){f();return false}else{if(k.keyCode==27){e.unbind().remove();Designer.painter.renderLinkerText(h)}else{if(k.keyCode==66&&k.ctrlKey){var l=!h.fontStyle.bold;h.fontStyle.bold=l;Model.update(h);var i=l?"bold":"normal";$(this).css("font-weight",i);c.css("font-weight",i);UI.update()}else{if(k.keyCode==73&&k.ctrlKey){var l=!h.fontStyle.italic;h.fontStyle.italic=l;Model.update(h);var i=l?"italic":"normal";$(this).css("font-style",i);c.css("font-style",i);UI.update()}else{if(k.keyCode==85&&k.ctrlKey){var l=!h.fontStyle.underline;h.fontStyle.underline=l;Model.update(h);var i=l?"underline":"none";$(this).css("text-decoration",i);c.css("text-decoration",i);k.preventDefault();UI.update()}}}}}}).bind("blur",function(){f()});e.trigger("keyup");function f(){var i=$("#linker_text_edit");if(i.length&&i.is(":visible")){var k=i.val();if(k!=h.text){h.text=k;Model.update(h)}Designer.painter.renderLinker(h);i.remove()}}},linkerDraggable:function(b,c){var a=$("#designer_canvas");var d=$("#canvas_container");a.bind("mousedown.draglinker",function(e){Utils.hideLinkerControls();Designer.op.changeState("dragging_linker");var g=Utils.getSelectedIds();var f=false;if(g.length>1){f=true}d.bind("mousemove.draglinker",function(i){d.css("cursor","default");var h=Utils.getRelativePos(i.pageX,i.pageY,a);Designer.op.moveLinker(b,c,h.x,h.y);if(f){Designer.painter.drawControls(g)}$(document).unbind("mouseup.droplinker").bind("mouseup.droplinker",function(){$(document).unbind("mouseup.droplinker");Model.update(b);Utils.showLinkerControls()})});$(document).bind("mouseup.draglinker",function(){Designer.op.hideLinkPoint();Designer.op.resetState();a.unbind("mousedown.draglinker");d.unbind("mousemove.draglinker");$(document).unbind("mouseup.draglinker");Utils.showLinkerControls()})})},linkClickable:function(b,a){var c=$("#link_spot");if(c.length==0){c=$("<a id='link_spot' target='_blank' onclick='openLink(this);'></a>").appendTo("#designer_canvas")}if(b.trim().toLowerCase().indexOf("http")==-1){b="http://"+b}c.show().css({left:a.x-50,top:a.y-50,"z-index":Model.orderList.length+1})},textCreatable:function(){var b=$("#designer_canvas");var a=$("#canvas_container");a.unbind("mousedown.create_text").bind("mousedown.create_text",function(d){var f=null;if(!d.ctrlKey){Utils.unselect()}var e=Utils.getRelativePos(d.pageX,d.pageY,b);var c=null;a.bind("mousemove.create_text",function(g){if(f==null){f=$("<div id='texting_box'></div>").appendTo(b)}var h=Utils.getRelativePos(g.pageX,g.pageY,b);c={"z-index":Model.orderList.length,left:h.x-1,top:h.y-1};if(h.x>e.x){c.left=e.x-1}if(h.y>e.y){c.top=e.y-1}c.width=Math.abs(h.x-e.x-2);c.height=Math.abs(h.y-e.y-2);f.css(c)});$(document).unbind("mouseup.create_text").bind("mouseup.create_text",function(h){if(c!=null&&c.width>=20&&c.height>=20){var g=Model.create("standardText",c.left.restoreScale(),c.top.restoreScale());g.props.w=c.width.restoreScale();g.props.h=c.height.restoreScale();Model.add(g);Designer.painter.renderShape(g);Designer.op.editShapeText(g);Utils.unselect();Utils.selectShape(g.id)}f.remove();Designer.op.resetState();$(document).unbind("mouseup.create_text");a.unbind("mousemove.create_text")});a.unbind("mousedown.create_text")})},canvasDragTimeout:null,canvasDraggable:function(){var a=$("#canvas_container");a.css("cursor","url(../apps/_bpm.platform/js/designer/themes/default/images/diagraming/cursor_hand.png) 8 8, auto");if(this.canvasDragTimeout){clearTimeout(this.canvasDragTimeout)}this.canvasDragTimeout=setTimeout(function(){a.unbind("mousedown.drag_canvas");Designer.op.resetState();a.unbind("mousemove.drag_canvas");$(document).unbind("mouseup.drag_canvas")},500);a.unbind("mousedown.drag_canvas").bind("mousedown.drag_canvas",function(d){var c=$("#designer_layout").scrollTop();var b=$("#designer_layout").scrollLeft();a.bind("mousemove.drag_canvas",function(f){var e=f.pageX-d.pageX;var g=f.pageY-d.pageY;$("#designer_layout").scrollLeft(b-e);$("#designer_layout").scrollTop(c-g)});$(document).unbind("mouseup.drag_canvas").bind("mouseup.drag_canvas",function(e){a.unbind("mousemove.drag_canvas");$(document).unbind("mouseup.drag_canvas")})});$(document).unbind("keyup.drag_canvas").bind("keyup.drag_canvas",function(b){a.unbind("mousedown.drag_canvas");Designer.op.resetState();$(document).unbind("mouseup.drag_canvas");b.preventDefault();clearTimeout(this.canvasDragTimeout);a.unbind("mousemove.drag_canvas")})},canvasFreeDraggable:function(){var a=$("#canvas_container");a.css("cursor","url(../apps/_bpm.platform/js/designer/themes/default/images/diagraming/cursor_hand.png) 8 8, auto");a.unbind("mousedown.drag_canvas").bind("mousedown.drag_canvas",function(d){var c=$("#designer_layout").scrollTop();var b=$("#designer_layout").scrollLeft();a.bind("mousemove.drag_canvas",function(f){var e=f.pageX-d.pageX;var g=f.pageY-d.pageY;$("#designer_layout").scrollLeft(b-e);$("#designer_layout").scrollTop(c-g)});$(document).unbind("mouseup.drag_canvas").bind("mouseup.drag_canvas",function(e){a.unbind("mousemove.drag_canvas");$(document).unbind("mouseup.drag_canvas")})})},moveShape:function(u,l){var e=[];for(var k=0;k<u.length;k++){var b=u[k];e.push(b.id)}var O=Utils.restoreScale(l);for(var k=0;k<u.length;k++){var b=u[k];if(b.name=="linker"){var r=b;var g=r.from;var c=r.to;var n=false;var s=false;if(!Utils.isSelected(r.id)){if(g.id!=null&&e.indexOf(g.id)>=0){r.from.x+=O.x;r.from.y+=O.y;n=true}if(c.id!=null&&e.indexOf(c.id)>=0){r.to.x+=O.x;r.to.y+=O.y;s=true}}else{if(g.id==null||e.indexOf(g.id)>=0){r.from.x+=O.x;r.from.y+=O.y;n=true}if(c.id==null||e.indexOf(c.id)>=0){r.to.x+=O.x;r.to.y+=O.y;s=true}}if(n&&s){for(var m=0;m<r.points.length;m++){var t=r.points[m];t.x+=O.x;t.y+=O.y}var v=$("#"+b.id);var f=v.position();v.css({left:f.left+=l.x,top:f.top+=l.y})}else{if(n||s){Designer.painter.renderLinker(r,true)}}}else{a(b);$(".shape_contour[forshape="+b.id+"]").css({left:b.props.x.toScale(),top:b.props.y.toScale()})}}var d=Utils.getSelectedLinkerIds();if(u.length==1&&d.length==1){return}if(d.length>0){var h=Utils.getSelectedIds();Designer.painter.drawControls(h)}else{var q=$("#shape_controls");q.css({left:parseFloat(q.css("left"))+l.x,top:parseFloat(q.css("top"))+l.y})}var o=$("#shape_controls").position();if(o&&Utils.getSelected().length>0){Designer.op.showTip("X: "+Math.round(o.left.restoreScale())+"&nbsp;&nbsp;Y: "+Math.round(o.top.restoreScale()))}function a(p){p.props.x+=O.x;p.props.y+=O.y;var i=$("#"+p.id);i.css({left:parseFloat(i.css("left"))+l.x,top:parseFloat(i.css("top"))+l.y})}},moveLinker:function(q,i,k,h){var b=null;var r=null;var c=Utils.getShapeByPosition(k,h,true);Designer.op.hideLinkPoint();if(c!=null){var a=c.shape;Utils.showAnchors(a);r=a.id;if(c.type=="bounding"){b=c.linkPoint;Designer.op.showLinkPoint(Utils.toScale(b))}else{if(c.type=="shape"){var n;var g;if(i=="from"){n={x:q.to.x,y:q.to.y};g=q.to.id}else{n={x:q.from.x,y:q.from.y};g=q.from.id}if(a.id==g){Designer.op.hideLinkPoint();b={x:k.restoreScale(),y:h.restoreScale()};b.angle=null;r=null}else{var s=a.getAnchors();var o=-1;var M;var p={x:a.props.x+a.props.w/2,y:a.props.y+a.props.h/2};for(var l=0;l<s.length;l++){var e=s[l];var m=Utils.getRotated(p,{x:a.props.x+e.x,y:a.props.y+e.y},a.props.angle);var f=Utils.measureDistance(m,n);if(o==-1||f<o){o=f;M=m}}var d=Utils.getPointAngle(a.id,M.x,M.y,7);b={x:M.x,y:M.y,angle:d};Designer.op.showLinkPoint(Utils.toScale(b))}}}}else{Designer.op.hideLinkPoint();Utils.hideAnchors();b={x:k.restoreScale(),y:h.restoreScale()};b.angle=null;r=null}if(i=="from"){q.from.id=r;q.from.x=b.x;q.from.y=b.y;q.from.angle=b.angle;if(r==null){if(b.x>=q.to.x-6&&b.x<=q.to.x+6){q.from.x=q.to.x}if(b.y>=q.to.y-6&&b.y<=q.to.y+6){q.from.y=q.to.y}}}else{q.to.x=b.x;q.to.y=b.y;q.to.id=r;q.to.angle=b.angle;if(r==null){if(b.x>=q.from.x-6&&b.x<=q.from.x+6){q.to.x=q.from.x}if(b.y>=q.from.y-6&&b.y<=q.from.y+6){q.to.y=q.from.y}}}Designer.painter.renderLinker(q,true)},showLinkPoint:function(b){var a=$("<canvas class='link_point_canvas' width=32 height=32></canvas>").appendTo($("#designer_canvas"));var c=a[0].getContext("2d");c.translate(1,1);c.lineWidth=1;c.globalAlpha=0.3;c.strokeStyle=Designer.config.anchorColor;c.fillStyle=Designer.config.anchorColor;c.beginPath();c.moveTo(0,15);c.bezierCurveTo(0,-5,30,-5,30,15);c.bezierCurveTo(30,35,0,35,0,15);c.closePath();c.fill();c.stroke();a.css({left:b.x-16,top:b.y-16,"z-index":Model.orderList.length}).show()},hideLinkPoint:function(){$(".link_point_canvas").hide()},brokenLinkerChangable:function(b,a){var e=$("#canvas_container");var f=$("#designer_canvas");var d=b.points[a-1];var c=b.points[a];if(d.x==c.x){e.css("cursor","e-resize")}else{e.css("cursor","n-resize")}f.bind("mousedown.brokenLinker",function(h){Designer.op.changeState("changing_broken_linker");var g=Utils.getRelativePos(h.pageX,h.pageY,f);var i=Utils.getSelectedIds();e.bind("mousemove.brokenLinker",function(l){var k=Utils.getRelativePos(l.pageX,l.pageY,f);var m={x:k.x-g.x,y:k.y-g.y};m=Utils.restoreScale(m);if(d.x==c.x){d.x+=m.x;c.x+=m.x}else{d.y+=m.y;c.y+=m.y}Designer.painter.renderLinker(b);if(i.length>1){Designer.painter.drawControls(i)}g=k;$(document).unbind("mouseup.changed").bind("mouseup.changed",function(){Model.update(b);$(document).unbind("mouseup.changed")})});$(document).bind("mouseup.brokenLinker",function(){Designer.op.resetState();e.unbind("mousemove.brokenLinker");f.unbind("mousedown.brokenLinker");$(document).unbind("mouseup.brokenLinker")})})},removeShape:function(){var d=Utils.getSelected();if(d.length>0){Utils.unselect();var e=Utils.getAttachedShapes(d);d=d.concat(e);var c=[];for(var b=0;b<d.length;b++){var a=Utils.getChildrenShapes(d[b]);c=c.concat(a)}d=d.concat(c);if(d.length>0){var shapeIds=[];for(var index=0;index<d.length;index++){if(d[index].name!="linker"){shapeIds.push(d[index].id)}}if(shapeIds.length>0){$.ajax({url:"./jd?sid="+$("#sid").val()+"&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_relation_search",data:{shapeIds:shapeIds.join(","),fileId:ruuid},success:function(msg){if(typeof(msg)=="string"){msg=eval("("+msg+")")}var relationShapes=msg.data.relationShapes;if(relationShapes.length>0){var options={title:"提示",content:"图形["+relationShapes+"]被关联,确定删除吗?",onConfirm:function(){Model.remove(d)}};$.confirm(options)}else{Model.remove(d)}}})}else{Model.remove(d)}}}},showTip:function(a){var c=$("#designer_op_tip");if(c.length==0){c=$("<div id='designer_op_tip'></div>").appendTo("#designer_canvas")}c.stop().html(a);var d=$("#shape_controls");var b=d.position();c.css({top:b.top+d.height()+5,left:b.left+d.width()/2-c.outerWidth()/2,"z-index":Model.orderList.length}).show()},hideTip:function(){$("#designer_op_tip").fadeOut(100)},snapLine:function(k,l,h,E){var f=k.y;var t=k.y+k.h/2;var F=k.y+k.h;var D=k.x;var g=k.x+k.w/2;var c=k.x+k.w;var C=2;var H={v:null,h:null,attach:null};var d=null;if(h){d=E}else{d=Model.getShapeById(l[0])}if(l.length==1&&d.groupName=="boundaryEvent"){for(var s=Model.orderList.length-1;s>=0;s--){var m=Model.orderList[s].id;var A=Model.getShapeById(m);if(A.name!="linker"&&A.id!=d.id){var n=A.props;if(H.attach==null&&n.angle==0&&(A.groupName=="task"||A.groupName=="callActivity"||A.groupName=="subProcess")){var v={x:n.x-C,y:n.y-C,w:n.w+C*2,h:n.h+C*2};if(Utils.pointInRect(g,t,v)){var z=n.y;var G=n.y+n.h;var q=n.x;var r=n.x+n.w;var e=false;var ab=false;if(z>=t-C&&z<=t+C){k.y=z-k.h/2;ab=true}else{if(G>=t-C&&G<=t+C){k.y=G-k.h/2;ab=true}}if(q>=g-C&&q<=g+C){k.x=q-k.w/2;e=true}else{if(r>=g-C&&r<=g+C){k.x=r-k.w/2;e=true}}if(e||ab){H.attach=A}}}}}}if(H.attach==null){for(var s=Model.orderList.length-1;s>=0;s--){var m=Model.orderList[s].id;var A=Model.getShapeById(m);if(A.name=="linker"||l.indexOf(m)>=0||A.parent){continue}var n=A.props;if(H.h==null){var z=n.y;var x=n.y+n.h/2;var G=n.y+n.h;if(x>=t-C&&x<=t+C){H.h={type:"middle",y:x};k.y=x-k.h/2}else{if(z>=f-C&&z<=f+C){H.h={type:"top",y:z};k.y=z}else{if(G>=F-C&&G<=F+C){H.h={type:"bottom",y:G};k.y=G-k.h}else{if(G>=f-C&&G<=f+C){H.h={type:"top",y:G};k.y=G}else{if(z>=F-C&&z<=F+C){H.h={type:"bottom",y:z};k.y=z-k.h}}}}}}if(H.v==null){var q=n.x;var o=n.x+n.w/2;var r=n.x+n.w;if(o>=g-C&&o<=g+C){H.v={type:"center",x:o};k.x=o-k.w/2}else{if(q>=D-C&&q<=D+C){H.v={type:"left",x:q};k.x=q}else{if(r>=c-C&&r<=c+C){H.v={type:"right",x:r};k.x=r-k.w}else{if(r>=D-C&&r<=D+C){H.v={type:"left",x:r};k.x=r}else{if(q>=c-C&&q<=c+C){H.v={type:"right",x:q};k.x=q-k.w}}}}}}if(H.h!=null&&H.v!=null){break}}}this.hideSnapLine();var B=$("#designer_canvas");if(H.attach!=null){var b=$("#designer_op_snapline_attach");if(b.length==0){b=$("<div id='designer_op_snapline_attach'></div>").appendTo(B)}var u=H.attach;var w=u.lineStyle.lineWidth;b.css({width:(u.props.w+w).toScale(),height:(u.props.h+w).toScale(),left:(u.props.x-w/2).toScale()-2,top:(u.props.y-w/2).toScale()-2,"z-index":$("#"+u.id).css("z-index")}).show()}if(H.h!=null){var y=$("#designer_op_snapline_h");if(y.length==0){y=$("<div id='designer_op_snapline_h'></div>").appendTo(B)}y.css({width:B.width()+Designer.config.pageMargin*2,left:-Designer.config.pageMargin,top:Math.round(H.h.y.toScale()),"z-index":Model.orderList.length+1}).show()}if(H.v!=null){var a=$("#designer_op_snapline_v");if(a.length==0){a=$("<div id='designer_op_snapline_v'></div>").appendTo(B)}a.css({height:B.height()+Designer.config.pageMargin*2,top:-Designer.config.pageMargin,left:Math.round(H.v.x.toScale()),"z-index":Model.orderList.length+1}).show()}return H},snapResizeLine:function(n,q,o){var m=n.y;var W=n.y+n.h/2;var g=n.y+n.h;var f=n.x;var w=n.x+n.w/2;var v=n.x+n.w;var e=2;var k={v:null,h:null};for(var t=Model.orderList.length-1;t>=0;t--){var x=Model.orderList[t].id;var b=Model.getShapeById(x);if(b.name=="linker"||q.indexOf(x)>=0||b.parent){continue}var r=b.props;if(k.h==null&&(o.indexOf("t")>=0||o.indexOf("b")>=0)){var c=r.y;var a=r.y+r.h/2;var h=r.y+r.h;if(a>=W-e&&a<=W+e){k.h={type:"middle",y:a};if(o.indexOf("t")>=0){n.h=(g-a)*2;n.y=g-n.h}else{n.h=(a-n.y)*2}}else{if(o.indexOf("t")>=0&&c>=m-e&&c<=m+e){k.h={type:"top",y:c};n.y=c;n.h=g-c}else{if(o.indexOf("b")>=0&&h>=g-e&&h<=g+e){k.h={type:"bottom",y:h};n.h=h-m}else{if(o.indexOf("t")>=0&&h>=m-e&&h<=m+e){k.h={type:"top",y:h};n.y=h;n.h=g-h}else{if(o.indexOf("b")>=0&&c>=g-e&&c<=g+e){k.h={type:"bottom",y:c};n.h=c-n.y}}}}}}if(k.v==null&&(o.indexOf("l")>=0||o.indexOf("r")>=0)){var z=r.x;var y=r.x+r.w/2;var s=r.x+r.w;if(y>=w-e&&y<=w+e){k.v={type:"center",x:y};if(o.indexOf("l")>=0){n.w=(v-y)*2;n.x=v-n.w}else{n.w=(y-n.x)*2}}else{if(o.indexOf("l")>=0&&z>=f-e&&z<=f+e){k.v={type:"left",x:z};n.x=z;n.w=v-z}else{if(o.indexOf("r")>=0&&s>=v-e&&s<=v+e){k.v={type:"right",x:s};n.w=s-n.x}else{if(o.indexOf("l")>=0&&s>=f-e&&s<=f+e){k.v={type:"left",x:s};n.x=s;n.w=v-s}else{if(o.indexOf("r")>=0&&z>=v-e&&z<=v+e){k.v={type:"right",x:z};n.w=z-n.x}}}}}}if(k.h!=null&&k.v!=null){break}}this.hideSnapLine();var d=$("#designer_canvas");if(k.h!=null){var u=$("#designer_op_snapline_h");if(u.length==0){u=$("<div id='designer_op_snapline_h'></div>").appendTo(d)}u.css({width:d.width()+Designer.config.pageMargin*2,left:-Designer.config.pageMargin,top:Math.round(k.h.y.toScale()),"z-index":Model.orderList.length+1}).show()}if(k.v!=null){var l=$("#designer_op_snapline_v");if(l.length==0){l=$("<div id='designer_op_snapline_v'></div>").appendTo(d)}l.css({height:d.height()+Designer.config.pageMargin*2,top:-Designer.config.pageMargin,left:Math.round(k.v.x.toScale()),"z-index":Model.orderList.length+1}).show()}return k},hideSnapLine:function(){$("#designer_op_snapline_h").hide();$("#designer_op_snapline_v").hide();$("#designer_op_snapline_attach").hide()},linkDashboard:function(b){var f=Model.getShapeById(b.from.id);var i=f.category;if($("#panel_"+i).length!=0){var c=$("#shape_dashboard_"+i);if(c.length==0){c=$("<div id='shape_dashboard_"+i+"' class='shape_dashboard menu'></div>").appendTo("#designer_canvas");function a(k,n){var m="<div class='dashboard_box' shapeName='"+k.name+"'><canvas title='"+k.title+"' title_pos='right' class='panel_item' width='"+(Designer.config.panelItemWidth)+"' height='"+(Designer.config.panelItemHeight)+"'></canvas></div>";var o=$(m).appendTo(c);if(n){o.append("<div class='group_icon link_shape_icon' group='"+n+"'></div>")}var l=o.children()[0];Designer.painter.drawPanelItem(l,k.name)}for(var g in Schema.shapes){var d=Schema.shapes[g];if((d.category=="process_bpmn2"||d.category=="process.bpmn2"||d.category=="bpmn")&&checkRunningTimeShape(d)){continue}if(d.category==i){var u=d.attribute;if(u.visible&&u.linkable){if(!d.groupName){a(d)}else{var h=SchemaGroup.getGroup(d.groupName);if(h[0]==d.name){a(d,d.groupName)}}}}}c.bind("mousemove",function(k){k.stopPropagation()}).bind("mousedown",function(k){k.stopPropagation()})}c.css({left:b.to.x.toScale(),top:b.to.y.toScale(),"z-index":Model.orderList.length}).show();c.find(".link_shape_icon").unbind().bind("mousedown",function(m){m.stopPropagation();var l=$(this).attr("group");var o=$(this).parent().position();var n=c.position();var k=o.left+n.left+$(this).parent().outerWidth()-10;var p=o.top+n.top+$(this).parent().outerHeight();Designer.op.groupDashboard(l,k,p,function(q){e(q);c.hide();$(document).unbind("mousedown.dashboard")})}).bind("click",function(k){k.stopPropagation()});c.children(".dashboard_box").unbind().bind("click",function(){c.hide();$(document).unbind("mousedown.dashboard");var l=$(this);var k=l.attr("shapeName");e(k)});initRunningDashboard(c);$(document).bind("mousedown.dashboard",function(){c.hide();$(document).unbind("mousedown.dashboard")});function e(r){var w=Schema.shapes[r];var s=Utils.getEndpointAngle(b,"to");var x=Utils.getAngleDir(s);var q=w.getAnchors();var l;if(x==1){var v=null;for(var m=0;m<q.length;m++){var t=q[m];if(v==null||t.y<v){v=t.y;l=t}}}else{if(x==2){var p=null;for(var m=0;m<q.length;m++){var t=q[m];if(p==null||t.x>p){p=t.x;l=t}}}else{if(x==3){var o=null;for(var m=0;m<q.length;m++){var t=q[m];if(o==null||t.y>o){o=t.y;l=t}}}else{if(x==4){var k=null;for(var m=0;m<q.length;m++){var t=q[m];if(k==null||t.x<k){k=t.x;l=t}}}}}}var n=Model.create(r,b.to.x-l.x,b.to.y-l.y);Designer.painter.renderShape(n);MessageSource.beginBatch();if(n.onCreated){n.onCreated()}Designer.events.push("created",n);Model.add(n);var C=Utils.getPointAngle(n.id,b.to.x,b.to.y,7);b.to.id=n.id;b.to.angle=C;Designer.painter.renderLinker(b,true);Model.update(b);MessageSource.commit();Utils.unselect();Utils.selectShape(n.id);Designer.op.editShapeText(n)}}},groupDashboard:function(f,w,e,l){$(".group_dashboard").hide();var d=$("#shape_group_dashboard_"+f);if(d.length==0){d=$("<div id='shape_group_dashboard_"+f+"' class='group_dashboard menu'></div>").appendTo("#designer_canvas");var g=SchemaGroup.getGroup(f);for(var a=0;a<g.length;a++){var h=g[a];var c=Schema.shapes[h];if((c.category=="process_bpmn2"||c.category=="process.bpmn2"||c.category=="bpmn")&&checkRunningTimeShape(c)){continue}if(c.attribute.visible){var b=$("<div class='dashboard_box' shapeName='"+h+"'><canvas title='"+c.title+"' title_pos='right' width='"+(Designer.config.panelItemWidth)+"' height='"+(Designer.config.panelItemHeight)+"'></canvas></div>").appendTo(d);var k=b.children("canvas")[0];Designer.painter.drawPanelItem(k,c.name)}}d.bind("mousedown",function(i){i.stopPropagation()})}d.css({left:w,top:e,"z-index":Model.orderList.length+1}).show();$(".dashboard_box").unbind().bind("click",function(){var i=$(this).attr("shapeName");l(i);d.hide();$(document).unbind("mousedown.group_dashboard")});$(document).bind("mousedown.group_dashboard",function(){d.hide();$(document).unbind("mousedown.group_dashboard")});return d},showPanelGroup:function(d,f,n){f.stopPropagation();var A=$("#group_dashboard_"+d);$(".group_dashboard").hide();if(A.length==0){A=$("<div id='group_dashboard_"+d+"' class='group_dashboard menu'></div>").appendTo("#designer");var e=SchemaGroup.getGroup(d);for(var l=0;l<e.length;l++){var g=e[l];var a=Schema.shapes[g];if((a.category=="process_bpmn2"||a.category=="process.bpmn2"||a.category=="bpmn")&&checkRunningTimeShape(a)){continue}if(a.attribute.visible){var m=$("<div class='panel_box' shapeName='"+g+"'><canvas title='"+a.title+"' title_pos='right' width='"+(Designer.config.panelItemWidth)+"' height='"+(Designer.config.panelItemHeight)+"'></canvas></div>").appendTo(A);var h=m.children("canvas")[0];Designer.painter.drawPanelItem(h,a.name)}}A.css("position","fixed")}var c=$(n).parent();var k=c.offset();A.show();var b=k.top+c.height();if(b+A.outerHeight()>$(window).height()){b=$(window).height()-A.outerHeight()}A.css({left:k.left-7,top:b});$(document).bind("mousedown.group_board",function(){A.hide();$(document).unbind("mousedown.group_board")})},changeShapeProps:function(d,g){function f(o){if(typeof g.x!="undefined"){o.x+=(g.x-d.props.x)}if(typeof g.y!="undefined"){o.y+=(g.y-d.props.y)}if(typeof g.w!="undefined"||typeof g.h!="undefined"||typeof g.angle!="undefined"){var n=$.extend({},d.props,g);var m={x:d.props.x+d.props.w/2,y:d.props.y+d.props.h/2};var i=Utils.getRotated(m,o,-d.props.angle);var q=d.props.w;var l=d.props.h;if(typeof g.w!="undefined"){o.x=d.props.x+(i.x-d.props.x)/d.props.w*g.w;q=g.w}else{o.x=i.x}if(typeof g.h!="undefined"){o.y=d.props.y+(i.y-d.props.y)/d.props.h*g.h;l=g.h}else{o.y=i.y}var p={x:d.props.x+q/2,y:d.props.y+l/2};var k=Utils.getRotated(p,o,n.angle);o.x=k.x;o.y=k.y}if(typeof g.angle!="undefined"){o.angle+=g.angle-d.props.angle}}var a=[];var b=Model.getShapeLinkers(d.id);if(b&&b.length>0){for(var e=0;e<b.length;e++){var c=b[e];var h=Model.getShapeById(c);if(d.id==h.from.id){f(h.from)}if(d.id==h.to.id){f(h.to)}}a=b}$.extend(d.props,g);Designer.painter.renderShape(d);Utils.showLinkerCursor();return a}},events:{push:function(a,b){var c=this.listeners[a];if(c){return c(b)}return null},listeners:{},addEventListener:function(b,a){this.listeners[b]=a}},clipboard:{elements:[],presetedIds:{},presetIds:function(){this.presetedIds={};for(var b=0;b<this.elements.length;b++){var a=this.elements[b];this.presetedIds[a.id]=Utils.newId();if(a.group&&!this.presetedIds[a.group]){this.presetedIds[a.group]=Utils.newId()}}},plus:true,copy:function(e){this.elements=[];var b;var a;if(e){b=e}else{b=Utils.getSelected();a=Utils.getFamilyShapes(b);b=b.concat(a)}b.sort(function c(g,f){return g.props.zindex-f.props.zindex});for(var l=0;l<b.length;l++){var d=Utils.copy(b[l]);if(d.name=="linker"){if(d.from.id!=null){if(!Utils.isSelected(d.from.id)&&e==undefined){d.from.id=null;d.from.angle=null}}if(d.to.id!=null){if(!Utils.isSelected(d.to.id)&&e==undefined){d.to.id=null;d.to.angle=null}}}this.elements.push(d)}this.elements.sort(function c(g,f){return g.props.zindex-f.props.zindex});this.presetIds();this.plus=true;Designer.events.push("clipboardChanged",this.elements.length)},cut:function(){this.copy();this.plus=true},paste:function(n,l){if(this.elements.length==0){return}var k=20;var g=20;if(typeof n!="undefined"){var f=Utils.getShapesBounding(this.elements);k=n-f.x-f.w/2;g=l-f.y-f.h/2}var h=[];var b=[];var M=[];for(var e=0;e<this.elements.length;e++){var a=this.elements[e];if(a.name!="linker"){var m;var a=this.elements[e];a.props.zindex=Model.maxZIndex+(e+1);var q=this.presetedIds[a.id];if(this.plus||typeof n!="undefined"){a.props.x+=k;a.props.y+=g}m=Utils.copy(a);for(var u=0;u<m.dataAttributes.length;u++){var s=m.dataAttributes[u];s.id=Utils.newId()}m.id=q;if(m.children){for(var o=0;o<m.children.length;o++){var c=m.children[o];m.children[o]=this.presetedIds[c]}}if(m.parent){m.parent=this.presetedIds[m.parent]}h.push(m);b.push(q);if(a.group){var d=this.presetedIds[a.group];m.group=d}var N={};N.copyShapeId=a.id;N.pasteShapeId=m.id;N.pasteFileId=ruuid;M.push(N)}}for(var e=0;e<this.elements.length;e++){var a=this.elements[e];if(a.name=="linker"){var m;a.props.zindex=Model.maxZIndex+(e+1);var q=this.presetedIds[a.id];if(this.plus||typeof n!="undefined"){a.from.x+=k;a.from.y+=g;a.to.x+=k;a.to.y+=g;for(var t=0;t<a.points.length;t++){var r=a.points[t];r.x+=k;r.y+=g}}m=Utils.copy(a);if(!m.dataAttributes){m.dataAttributes=[]}for(var u=0;u<m.dataAttributes.length;u++){var s=m.dataAttributes[u];s.id=Utils.newId()}if(a.from.id!=null){m.from.id=this.presetedIds[a.from.id]}if(a.to.id!=null){m.to.id=this.presetedIds[a.to.id]}m.id=q;h.push(m);b.push(q);if(a.group){var d=this.presetedIds[a.group];m.group=d}}}Model.addMulti(h);for(var e=0;e<h.length;e++){var a=h[e];Designer.painter.renderShape(a)}Model.build();this.presetIds();Utils.unselect();Utils.selectShape(b);this.plus=true;return M},duplicate:function(){this.copy();this.paste()},brush:function(){var c=Utils.getSelected();if(c.length==0){return}var d={fontStyle:{},lineStyle:{},fillStyle:null,shapeStyle:null};for(var b=0;b<c.length;b++){var e=c[b];if(e.name=="linker"){$.extend(d.lineStyle,e.lineStyle);$.extend(d.fontStyle,e.fontStyle)}else{if(d.fillStyle==null){d.fillStyle={}}if(d.shapeStyle==null){d.shapeStyle={}}$.extend(d.lineStyle,e.lineStyle);$.extend(d.fontStyle,e.fontStyle);$.extend(d.shapeStyle,e.shapeStyle);$.extend(d.fillStyle,e.fillStyle)}}$("#bar_brush").button("select");var a=$("#designer_op_help");if(a.length==0){a=$("<div id='designer_op_help'></div>").appendTo("#designer_viewport")}a.html("选择目标图形并使用格式刷样式<br/>Esc取消").show();$(document).unbind("keydown.cancelbrush").bind("keydown.cancelbrush",function(f){if(f.keyCode==27){$("#bar_brush").button("unselect");a.hide();$(document).unbind("keydown.cancelbrush");Utils.selectCallback=null;$("#bar_brush").button("disable")}});Utils.selectCallback=function(){var f=Utils.getSelected();for(var g=0;g<f.length;g++){var i=f[g];var h=i.fontStyle.orientation;$.extend(i.lineStyle,d.lineStyle);$.extend(i.fontStyle,d.fontStyle);if(i.name!="linker"){i.lineStyle=d.lineStyle;delete i.lineStyle.beginArrowStyle;delete i.lineStyle.endArrowStyle;i.fontStyle.orientation=h;if(d.fillStyle!=null){i.fillStyle=d.fillStyle}if(d.shapeStyle!=null){i.shapeStyle=d.shapeStyle}}else{delete i.fontStyle.orientation;delete i.fontStyle.vAlign}Designer.painter.renderShape(i)}Model.updateMulti(f)}}},addFunction:function(b,a){if(Designer[b]){throw"Duplicate function name!"}else{this[b]=a}},painter:{actions:{move:function(a){this.moveTo(a.x,a.y);this.prePoint=a;if(this.beginPoint==null){this.beginPoint=a}},line:function(s){if(typeof this.webkitLineDash!="undefined"&&typeof this.lineDashOffset=="undefined"&&this.lineWidth!=0){var q=this.webkitLineDash;var t=this.prePoint;var o=Utils.measureDistance(t,s);var l=0;var u=1/o;var m=t;var r=0;var p=true;while(l<1){l+=u;if(l>1){l=1}var n={x:(1-l)*t.x+l*s.x,y:(1-l)*t.y+l*s.y};var v=Utils.measureDistance(m,n);if(v>=q[r]||l>=1){if(p){this.lineTo(n.x,n.y)}else{this.moveTo(n.x,n.y)}p=!p;m=n;r++;if(r>=q.length){r=0}}}this.moveTo(s.x,s.y)}else{this.lineTo(s.x,s.y)}this.prePoint=s;if(this.beginPoint==null){this.beginPoint=s}},curve:function(x){if(typeof this.webkitLineDash!="undefined"&&typeof this.lineDashOffset=="undefined"&&this.lineWidth!=0){var v=this.webkitLineDash;var y=this.prePoint;var t=Utils.measureDistance(y,x);var o=0;var A=1/t;var q=y;var w=0;var u=true;var z=0;while(o<1){o+=A;if(o>1){o=1}var r={x:y.x*Math.pow((1-o),3)+x.x1*o*Math.pow((1-o),2)*3+x.x2*Math.pow(o,2)*(1-o)*3+x.x*Math.pow(o,3),y:y.y*Math.pow((1-o),3)+x.y1*o*Math.pow((1-o),2)*3+x.y2*Math.pow(o,2)*(1-o)*3+x.y*Math.pow(o,3)};var B=Utils.measureDistance(q,r);if(B>=v[w]||o>=1){if(u){var p=z+(o-z)/2;var s={x:y.x*Math.pow((1-p),3)+x.x1*p*Math.pow((1-p),2)*3+x.x2*Math.pow(p,2)*(1-p)*3+x.x*Math.pow(p,3),y:y.y*Math.pow((1-p),3)+x.y1*p*Math.pow((1-p),2)*3+x.y2*Math.pow(p,2)*(1-p)*3+x.y*Math.pow(p,3)};this.lineTo(s.x,s.y);this.lineTo(r.x,r.y)}else{this.moveTo(r.x,r.y)}u=!u;q=r;z=o;w++;if(w>=v.length){w=0}}}this.moveTo(x.x,x.y)}else{this.bezierCurveTo(x.x1,x.y1,x.x2,x.y2,x.x,x.y)}this.prePoint=x;if(this.beginPoint==null){this.beginPoint=x}},quadraticCurve:function(x){if(typeof this.webkitLineDash!="undefined"&&typeof this.lineDashOffset=="undefined"&&this.lineWidth!=0){var v=this.webkitLineDash;var y=this.prePoint;var t=Utils.measureDistance(y,x);var o=0;var A=1/t;var q=y;var w=0;var u=true;var z=0;while(o<1){o+=A;if(o>1){o=1}var r={x:y.x*Math.pow((1-o),2)+x.x1*o*(1-o)*2+x.x*Math.pow(o,2),y:y.y*Math.pow((1-o),2)+x.y1*o*(1-o)*2+x.y*Math.pow(o,2)};var B=Utils.measureDistance(q,r);if(B>=v[w]||o>=1){if(u){var p=z+(o-z)/2;var s={x:y.x*Math.pow((1-p),2)+x.x1*p*(1-p)*2+x.x*Math.pow(p,2),y:y.y*Math.pow((1-p),2)+x.y1*p*(1-p)*2+x.y*Math.pow(p,2)};this.lineTo(s.x,s.y);this.lineTo(r.x,r.y)}else{this.moveTo(r.x,r.y)}u=!u;q=r;z=o;w++;if(w>=v.length){w=0}}}this.moveTo(x.x,x.y)}else{this.quadraticCurveTo(x.x1,x.y1,x.x,x.y)}this.prePoint=x;if(this.beginPoint==null){this.beginPoint=x}},close:function(){if(typeof this.webkitLineDash!="undefined"&&typeof this.lineDashOffset=="undefined"&&this.lineWidth!=0){var q=this.webkitLineDash;var t=this.prePoint;var s=this.beginPoint;var o=Utils.measureDistance(t,s);var l=0;var u=1/o;var m=t;var r=0;var p=true;while(l<1){l+=u;if(l>1){l=1}var n={x:(1-l)*t.x+l*s.x,y:(1-l)*t.y+l*s.y};var v=Utils.measureDistance(m,n);if(v>=q[r]||l>=1){if(p){this.lineTo(n.x,n.y)}else{this.moveTo(n.x,n.y)}p=!p;m=n;r++;if(r>=q.length){r=0}}}}this.closePath()}},setLineDash:function(a,b){if(!a.setLineDash){a.setLineDash=function(){}}a.setLineDash(b);a.mozDash=b;a.webkitLineDash=b},renderShapePath:function(c,d,a){var b;if(a&&d.drawIcon){b=d.drawIcon(d.props.w,d.props.h)}else{b=d.getPath()}this.renderPath(c,d,b,a)},renderPath:function(f,d,h,k){for(var b=0;b<h.length;b++){var l=h[b];f.save();f.beginPath();var c=$.extend({},d.lineStyle,l.lineStyle);var e=$.extend({},d.fillStyle,l.fillStyle);for(var a=0;a<l.actions.length;a++){var g=l.actions[a];this.actions[g.action].call(f,g)}this.fillShape(d,f,e);if(c.lineWidth){f.lineWidth=c.lineWidth;f.strokeStyle="rgb("+c.lineColor+")";if(c.lineStyle=="dashed"){if(k){this.setLineDash(f,[c.lineWidth*4,c.lineWidth*2])}else{this.setLineDash(f,[c.lineWidth*6,c.lineWidth*3])}}else{if(c.lineStyle=="dot"){this.setLineDash(f,[c.lineWidth,c.lineWidth*2])}else{if(c.lineStyle=="dashdot"){this.setLineDash(f,[c.lineWidth*6,c.lineWidth*2,c.lineWidth,c.lineWidth*2])}}}f.stroke()}f.restore()}},drawPanelItem:function(g,a){var e=g.getContext("2d");var f=Utils.copy(Schema.shapes[a]);var b={x:0,y:0,w:f.props.w,h:f.props.h,angle:f.props.angle};e.clearRect(0,0,Designer.config.panelItemWidth,Designer.config.panelItemHeight);if(b.w>=Designer.config.panelItemWidth||b.h>=Designer.config.panelItemWidth){if(f.props.w>=f.props.h){b.w=Designer.config.panelItemWidth-f.lineStyle.lineWidth*2;b.h=parseInt(f.props.h/f.props.w*b.w)}else{b.h=Designer.config.panelItemHeight-f.lineStyle.lineWidth*2;b.w=parseInt(f.props.w/f.props.h*b.h)}}f.props=b;e.save();e.lineJoin="round";e.globalAlpha=f.shapeStyle.alpha;var d=(Designer.config.panelItemWidth-b.w)/2;var c=(Designer.config.panelItemHeight-b.h)/2;e.translate(d,c);e.translate(b.w/2,b.h/2);e.rotate(b.angle);e.translate(-(b.w/2),-(b.h/2));this.renderShapePath(e,f,true,function(){Designer.painter.drawPanelItem(g,a)});this.renderMarkers(e,f,true);e.restore()},handleShapeConfigData:function(A,f,e){var B;for(var l=f.dataAttributes.length-1;l>=0;l--){B=f.dataAttributes[l];var u=B.horizontal;var b=B.vertical;if(B.hasOwnProperty("attributesJsonArray")){var x=B.dataShowConfig;if(x!=undefined){x.value=[]}break}}var z=f.name;for(var l=0;l<A.length;l++){var r=A[l];var h=r.showType;var s=r.horizontal;s=s.toLowerCase();var n=r.verity;n=n.toLowerCase();if(n=="center"){n="middle"}if(h=="text"||h=="attribute"){var o=r.cfgContent;var t={"w":30,"h":30,"textw":20,"texth":17,"imgT":0,"category":"custom","icon":"","name":z,"showName":false,"showType":"text","type":"string","value":o,"horizontal":s,"vertical":n,"radius":5,"title":""};if(h=="attribute"){var d=r.key;var w="string";if(e.length>0){for(var k=0;k<e.length;k++){var g=e[k];if(g.key==d){w=g.type;o=g.value;break}}}var c=["string","select","select_m","textarea"];if(r.isShowAttrName&&c.indexOf(w)>=0&&(o+"").trim().length>0){o="("+r.attrName+")"+o}if(w=="relation"&&o.length==0){o=""}else{if(w=="relation"&&o.length>0){var p=f.id+"_"+d;var a=relationShapeModelObject;var y="";for(var k=0;k<o.length;k++){if(k==o.length-1){if(a.hasOwnProperty(p)){var v=a[p];y=y+v}}else{if(a.hasOwnProperty(p)){var v=a[p]+"|";y=y+v}}}o=y;if(r.isShowAttrName){o="("+r.attrName+")"+o}}}t.showType="attr";t.value=o}if(!f.dataAttributes){f.dataAttributes=[]}t.id=Utils.newId();t.category="custom";if(!B.dataShowConfig){B.dataShowConfig={};if(!B.dataShowConfig.value){B.dataShowConfig.value=[]}}B.dataShowConfig.value.push(t)}else{var m=r.iconContent;var t={"w":16,"h":16,"textw":20,"texth":17,"imgT":0,"category":"custom","icon":m,"name":z,"showName":false,"showType":"icon","type":"string","value":"","horizontal":s,"vertical":n};if(!f.dataAttributes){f.dataAttributes=[]}t.id=Utils.newId();t.category="custom";if(!B.dataShowConfig){B.dataShowConfig={};if(!B.dataShowConfig.value){B.dataShowConfig.value=[]}}B.dataShowConfig.value.push(t)}}},renderShape:function(F){if(F.name=="linker"){this.renderLinker(F);return}var M=Utils.copy(Model.define.commonShapeConfig);var N;var D;var a=F.dataAttributes;for(var O=0;O<a.length;O++){var P=a[O];if(P.hasOwnProperty("attributesJsonArray")){if(P.dataShowConfig){N=P.dataShowConfig.config}D=P.attributesJsonArray;break}}var R=F.name;if(N==undefined){if(M!=undefined&&M[R]!=undefined){M=M[R];this.handleShapeConfigData(M,F,D)}}else{if(M==undefined){this.handleShapeConfigData(Utils.copy(N),F,D)}else{M=M[R];var E=[];if(M!=undefined){var S=[];var B=[];for(O=0;O<M.length;O++){var T=M[O];for(j=0;j<N.length;j++){var Q=N[j];if(T.horizontal==Q.horizontal&&T.verity==Q.verity){B.push(O);break}}}if(B.length>0){for(O=0;O<M.length;O++){if(!(B.indexOf(O)>=0)){E.push(M[O])}}}}if(E.length>0){S=N.concat(E)}else{S=N}this.handleShapeConfigData(S,F,D)}}var I=$("#"+F.id);if(I.length==0){var f=$("#designer_canvas");I=$("<div id='"+F.id+"' class='shape_box'><canvas class='shape_canvas'></canvas></div>").appendTo(f)}var h=Utils.getShapeBox(F);var e=(h.w+20).toScale();var k=(h.h+20).toScale();I.find(".shape_canvas").attr({width:e,height:k});I.css({left:(h.x-10).toScale()+"px",top:(h.y-10).toScale()+"px",width:e,height:k});var J=I.find(".shape_canvas")[0].getContext("2d");J.clearRect(0,0,F.props.w+20,F.props.h+20);J.scale(Designer.config.scale,Designer.config.scale);J.translate(10,10);J.translate(F.props.x-h.x,F.props.y-h.y);J.translate(F.props.w/2,F.props.h/2);J.rotate(F.props.angle);J.translate(-(F.props.w/2),-(F.props.h/2));var d=F.lineStyle;J.globalAlpha=F.shapeStyle.alpha;J.lineJoin="round";this.renderShapePath(J,F);this.renderMarkers(J,F);var K=F.getPath();var H=Utils.copy(K[K.length-1]);H.fillStyle={type:"none"};H.lineStyle={lineWidth:0};var g=[H];this.renderPath(J,F,g);this.renderText(F,h);this.renderDataAttributes(F,h);Designer.painter.renderShapeLink(I,F);Designer.painter.renderSahpeAttachment(I,F);if(F.attributesJsonArray!=undefined&&F.attributesJsonArray.length>0){I.find(".shape_danger").remove();I.find(".shape_regulate").remove();var G=false;var b=false;for(var C in F.attributesJsonArray){var L=F.attributesJsonArray[C];if(L!=undefined&&L.key=="danger"&&L.value!=undefined&&L.value!=""&&relationShapesObject!=undefined){if(typeof L.value=="object"&&L.value.constructor==Array){for(var K=0;K<L.value.length;K++){if(relationShapesObject[L.value[K]]!=undefined){G=true;break}}}else{if(relationShapesObject[L.value]!=undefined){G=true}}}else{if(L!=undefined&&L.key=="regulate"&&L.value!=undefined&&L.value!=""&&relationShapesObject!=undefined){if(typeof L.value=="object"&&L.value.constructor==Array){for(var K=0;K<L.value.length;K++){if(relationShapesObject[L.value[K]]!=undefined){b=true;break}}}else{if(relationShapesObject[L.value]!=undefined){b=true}}}}}if(G){var c=$("<div class='shape_danger' style='position: absolute; left: 0px; bottom: 0px; width: 20px; height: 20px;  background-image: url(../apps/com.actionsoft.apps.coe.pal/img/pl/danger.png);'></div>").appendTo(I)}}},fillShape:function(g,e,f){e.save();if(f.type=="solid"){e.fillStyle="rgb("+f.color+")";e.fill()}else{if(f.type=="gradient"){var d;if(f.gradientType=="linear"){d=GradientHelper.createLinearGradient(g,e,f)}else{d=GradientHelper.createRadialGradient(g,e,f)}e.fillStyle=d;e.fill()}else{if(f.type=="image"){var a=f.fileId;var c=$(".shape_img[src='"+a+"']");if(c.length==0){c=$("<img class='shape_img' loaded='0' src=''/>").appendTo("#shape_img_container");c.bind("load.drawshape",function(){var h=(Designer.config.panelItemWidth-g.props.w)/2;var i=(Designer.config.panelItemHeight-g.props.h)/2;e.translate(h,i);b(c);e.restore();$(this).attr("loaded","1")});c.attr("src",a)}else{if(c.attr("loaded")=="0"){c.bind("load.drawshape",function(){var h=0;var i=0;e.translate(h,i);b(c);e.restore()})}else{b(c)}}}}}e.restore();function b(h){e.save();e.clip();if(f.display=="fit"){var n=h.width();var i=h.height();var v=n/i;var m=g.props.w/g.props.h;if(v>m){var k=g.props.w;var p=0;var y=k/v;var o=g.props.h/2-y/2;e.drawImage(h[0],p,o,k,y)}else{var y=g.props.h;var o=0;var k=y*v;var p=g.props.w/2-k/2;e.drawImage(h[0],p,o,k,y)}}else{if(f.display=="stretch"){e.drawImage(h[0],0,0,g.props.w,g.props.h)}else{if(f.display=="original"){var n=h.width();var i=h.height();var p=g.props.w/2-n/2;var o=g.props.h/2-i/2;e.drawImage(h[0],p,o,n,i)}else{if(f.display=="tile"){var p=0;var n=h.width();var i=h.height();while(p<g.props.w){var o=0;while(o<g.props.h){e.drawImage(h[0],p,o,n,i);o+=i}p+=n}}else{if(f.display=="static"){var w=0;var x=h.width();var l=h.height();e.drawImage(h[0],f.imageX,f.imageY,x,l)}else{if(f.display=="zoom"){var w=0;var x=h.width();var l=h.height();e.drawImage(h[0],f.imageX,f.imageY,x,l,f.canvasX,f.canvasY,f.canvasW,f.canvasH)}else{var n=h.width();var i=h.height();var v=n/i;var m=g.props.w/g.props.h;if(v>m){var y=g.props.h;var o=0;var k=y*v;var p=g.props.w/2-k/2;e.drawImage(h[0],p,o,k,y)}else{var k=g.props.w;var p=0;var y=k/v;var o=g.props.h/2-y/2;e.drawImage(h[0],p,o,k,y)}}}}}}}e.restore()}},renderText:function(f,b){var d=$("#"+f.id);var l=d.find(".text_canvas[forshape="+f.id+"]");if(l.length==0){l=$("<textarea class='text_canvas' forshape='"+f.id+"'></textarea>").appendTo(d);l.bind("focus",function(){$(this).blur()})}l.attr("readonly","readonly");if(f.text==null||f.text.trim()==""){l.css({height:"0px",width:"0px"}).hide();return}var c=f.fontStyle;var n={"line-height":Math.round(c.size*1.25)+"px","font-size":c.size+"px","font-family":c.fontFamily,"font-weight":c.bold?"bold":"normal","font-style":c.italic?"italic":"normal","text-align":c.textAlign,color:"rgb("+c.color+")","text-decoration":c.underline?"underline":"none",opacity:f.shapeStyle.alpha};l.css(n);l.show();var I=f.getTextBlock();if(f.fontStyle.orientation=="horizontal"){var a={x:I.x+I.w/2,y:I.y+I.h/2};I={x:a.x-I.h/2,y:a.y-I.w/2,w:I.h,h:I.w}}l.css({width:I.w});l.height(0);l.val(f.text);l.scrollTop(99999);var q=l.scrollTop();var g=0;if(c.vAlign=="middle"){g=(I.y+I.h/2-q/2)}else{if(f.fontStyle.vAlign=="bottom"){g=(I.y+I.h-q)}else{g=I.y}}var p={x:I.x+I.w/2,y:g+q/2};var i=f.props.angle;if(i!=0){var k={x:f.props.w/2,y:f.props.h/2};p=Utils.getRotated(k,p,i)}if(c.orientation=="horizontal"){i=(Math.PI*1.5+i)%(Math.PI*2)}var o=Math.round(i/(Math.PI*2)*360);var h="rotate("+o+"deg) scale("+Designer.config.scale+")";var e=I.w;var m=q;l.css({width:e,height:m,left:(p.x+(f.props.x-b.x)+10).toScale()-I.w/2,top:(p.y+(f.props.y-b.y)+10).toScale()-q/2,"-webkit-transform":h,"-ms-transform":h,"-o-transform":h,"-moz-transform":h,transform:h})},calculateTextLines:function(n,u,a){var m=u.w;var g=u.h;var b=[];var f=n.split(/\n/);for(var e=0;e<f.length;e++){var q=f[e];var r=a.measureText(q);if(r.width<=m){b.push(q)}else{var o=q.split(/\s/);var l="";for(var c=0;c<o.length;c++){var t=o[c];if(c!=o.length-1){t+=" "}var v=a.measureText(t).width;if(v>m){for(var d=0;d<t.length;d++){var s=l+t[d];var k=a.measureText(s).width;if(k>m){b.push(l);l=t[d]}else{l=s}}}else{var s=l+t;var k=a.measureText(s).width;if(k>m){b.push(l);l=t}else{l=s}}}if(l!=""){b.push(l)}}}return b},renderMarkers:function(e,a,k){if(a.attribute&&a.attribute.markers&&a.attribute.markers.length>0){var l=a.attribute.markers;var f=Schema.config.markerSize;var b=4;if(k){f=10}var m=a.attribute.markerOffset;if(k){m=5}var h=l.length*f+(l.length-1)*b;var c=a.props.w/2-h/2;for(var y=0;y<l.length;y++){var d=l[y];e.save();e.translate(c,a.props.h-f-m);var g=Schema.markers[d].call(a,f);this.renderPath(e,a,g);e.restore();c+=f+b}}},renderDataAttributes:function(i,k){$("#"+i.id).children(".attr_canvas").remove();if(!i.dataAttributes||i.dataAttributes.length==0){return}var n={x:i.props.w/2,y:i.props.h/2};for(var p=0;p<i.dataAttributes.length;p++){var j=i.dataAttributes[p];if(j.hasOwnProperty("attributesJsonArray")){if(!j.dataShowConfig){continue}var jj=j.dataShowConfig.value;if(jj&&jj.length>0){for(var n=0;n<jj.length;n++){var jjj=jj[n];var l="";var o="";if(jjj.showName){l=j.name+": "}if(jjj.showType=="text"||jjj.showType=="attr"){l+=jjj.value}else{if(jjj.showType=="icon"){o=jjj.icon}}if(l==""&&o==""){continue}m(jjj,l,o)}}}}function m(c,y,x){var h=c.horizontal;var I=c.vertical;var H=$("<canvas id='attr_canvas_"+c.id+"' class='attr_canvas'></canvas>").appendTo($("#"+i.id));var b=H[0].getContext("2d");var w="12px ";w+=i.fontStyle.fontFamily;b.font=w;var D=b.measureText(y).width;var a=20;if(x!=""){D+=20}var E,F;if(h=="mostleft"){E=-D-2}else{if(h=="leftedge"){E=-D/2}else{if(h=="left"){E=2}else{if(h=="center"){E=(i.props.w-D)/2}else{if(h=="right"){E=i.props.w-D-2;if(h=="rightedge"){E=i.props.w-D/2}else{E=i.props.w+2}}}}}}if(I=="mosttop"){F=-a}else{if(I=="topedge"){F=-a/2}else{if(I=="top"){F=0}else{if(I=="middle"){F=(i.props.h-a)/2}else{if(I=="bottom"){F=i.props.h-a}else{if(I=="bottomedge"){F=i.props.h-a/2}else{F=i.props.h}}}}}}var g={x:E,y:F,w:D,h:a};var G=Utils.getRotatedBox(g,i.props.angle,n);H.attr({width:G.w.toScale(),height:G.h.toScale()});b.font=w;var d=(G.x+(i.props.x-k.x)+10).toScale();var e=(G.y+(i.props.y-k.y)+10).toScale();if(h!="mostleft"||h=="left"||h!="right"){H.css({left:d,top:e})}b.scale(Designer.config.scale,Designer.config.scale);b.translate(G.w/2,G.h/2);b.rotate(i.props.angle);b.translate(-G.w/2,-G.h/2);b.translate((G.w-g.w)/2,(G.h-g.h)/2);b.globalAlpha=i.shapeStyle.alpha;if(c.type=="link"){b.fillStyle="#4183C4"}else{b.fillStyle="#333"}if(c.showType=="text"){b.fillStyle="#696969"}if(c.showType=="attr"){b.fillStyle="#191970"}b.textBaseline="middle";if(D>i.props.w){var tempShapeWidth=i.props.w;if(tempShapeWidth<100){tempShapeWidth=100}H[0].width=tempShapeWidth+10;H[0].height=Math.ceil(D/tempShapeWidth)*10+15;for(var v=0;v<Math.ceil(D/tempShapeWidth);v++){var tempL=(v+1)*tempShapeWidth;var tempX=0;if(c.showType=="text"){b.fillStyle="#A1A1A1"}if(c.showType=="attr"){b.fillStyle="#6666FF"}var tempY=a/2+v*12;if(tempL<D){b.fillText(y.substring(v*tempShapeWidth/(D/y.length),tempL/(D/y.length)),tempX,tempY)}else{b.fillText(y.substring(v*tempShapeWidth/(D/y.length),D/(D/y.length)),tempX,tempY)}}if(h=="mostleft"){d=-tempShapeWidth+tempShapeWidth*0.2;H.css({left:d,top:e})}if(h=="left"){H.css({left:d,top:e-5})}if(h=="left"&&I!="bottom"){H.css({left:d,top:e})}if(h=="right"){d=tempShapeWidth/4;H.css({left:d,top:e-5})}if(I=="mosttop"||I=="bottom"){e=e-Math.ceil(D/tempShapeWidth)*5;H.css({left:d,top:e})}if(h=="center"&&Math.ceil(D/tempShapeWidth)>1){H.css({left:15,top:e})}if(h=="right"&&I!="mosttop"&&I!="bottom"){d=tempShapeWidth/4;H.css({left:d,top:e})}}else{if(h=="mostleft"){d=-D;H.css({left:d,top:e})}if(h=="right"){d=i.props.w-D;H.css({left:d,top:e})}b.fillText(y,0,a/2)}if(x!=""){if(x.indexOf("&#x")>=0){var icon=x.split("|")[0];var iconColor=x.split("|")[1];b.font="19px awsui-iconfont";icon=eval("('"+icon.replace("&#x","\\u").replace(";","")+"')");b.fillStyle=iconColor;b.fillText(icon,0,a/2);iconCavCode=H[0].toDataURL("image/png");c.iconCavCode=iconCavCode}else{var J="/images/data-attr/"+x+".png";var f=$(".shape_img[src='"+J+"']");if(f.length==0){f=$("<img class='shape_img' loaded='false' src='"+J+"'/>").appendTo("#shape_img_container")}if(f.attr("loaded")=="true"){b.drawImage(f[0],g.w-20,0,20,20)}else{f.bind("load.drawshape",function(){$(this).attr("loaded","true");b.drawImage(f[0],g.w-20,0,20,20)})}}}b.beginPath();b.rect(0,0,D,a);b.closePath()}},renderLinker:function(Y,W){if(W){Y.points=Utils.getLinkerPoints(Y)}if(Y.linkerType=="curve"||Y.linkerType=="broken"){if(!Y.points||Y.points.length==0){Y.points=Utils.getLinkerPoints(Y)}}var P=Y.points;var S=Utils.copy(Y.from);var af=Utils.copy(Y.to);if(Y.attribute&&Y.attribute.collapseBy){$("#"+Y.id).hide();return}else{$("#"+Y.id).show()}var R=Utils.getEndpointAngle(Y,"from");var ac=Utils.getEndpointAngle(Y,"to");var ae=Utils.getLinkerLineStyle(Y.lineStyle);V(S,Y,ae.beginArrowStyle,R);V(af,Y,ae.endArrowStyle,ac);var O=af.x;var F=af.y;var E=S.x;var G=S.y;if(af.x<S.x){O=af.x;E=S.x}else{O=S.x;E=af.x}if(af.y<S.y){F=af.y;G=S.y}else{F=S.y;G=af.y}for(var N=0;N<P.length;N++){var T=P[N];if(T.x<O){O=T.x}else{if(T.x>E){E=T.x}}if(T.y<F){F=T.y}else{if(T.y>G){G=T.y}}}var aa={x:O,y:F,w:E-O,h:G-F};var M=$("#"+Y.id);if(M.length==0){var Z=$("#designer_canvas");M=$("<div id='"+Y.id+"' class='shape_box linker_box'><canvas class='shape_canvas'></canvas></div>").appendTo(Z)}if(!Model.getShapeById(Y.id)){M.css("z-index",Model.orderList.length+1)}var Q=M.find(".shape_canvas");Q.attr({width:(aa.w+20).toScale(),height:(aa.h+20).toScale()});M.css({left:(aa.x-10).toScale(),top:(aa.y-10).toScale(),width:(aa.w+20).toScale(),height:(aa.h+20).toScale()});var U=Q[0].getContext("2d");U.scale(Designer.config.scale,Designer.config.scale);U.translate(10,10);var L=Utils.getLinkerLineStyle(Y.lineStyle);U.lineWidth=L.lineWidth;U.strokeStyle="rgb("+L.lineColor+")";U.fillStyle="rgb("+L.lineColor+")";U.save();var i={x:S.x-aa.x,y:S.y-aa.y};var ad={x:af.x-aa.x,y:af.y-aa.y};U.save();if(L.lineStyle=="dashed"){this.setLineDash(U,[L.lineWidth*5,L.lineWidth*2])}else{if(L.lineStyle=="dot"){this.setLineDash(U,[L.lineWidth,L.lineWidth*1.5])}else{if(L.lineStyle=="dashdot"){this.setLineDash(U,[L.lineWidth*5,L.lineWidth*2,L.lineWidth,L.lineWidth*2])}}}U.lineJoin="round";U.beginPath();this.actions.move.call(U,i);if(Y.linkerType=="curve"){var H=P[0];var I=P[1];var J={x1:H.x-aa.x,y1:H.y-aa.y,x2:I.x-aa.x,y2:I.y-aa.y,x:ad.x,y:ad.y};this.actions.curve.call(U,J)}else{for(var N=0;N<P.length;N++){var K=P[N];this.actions.line.call(U,{x:K.x-aa.x,y:K.y-aa.y})}this.actions.line.call(U,ad)}var X=Utils.isSelected(Y.id);if(X){U.shadowBlur=4;U.shadowColor="#833";if(Y.linkerType=="curve"&&Utils.getSelectedIds().length==1){}}U.stroke();U.restore();delete U.webkitLineDash;ab(i,R,S.id,L.beginArrowStyle,Y,S.angle);ab(ad,ac,af.id,L.endArrowStyle,Y,af.angle);U.restore();this.renderLinkerText(Y);function V(b,g,a,e){if(b.id){var l=Model.getShapeById(b.id);if(l){var h={x:0,y:0};var f=Utils.getShapeLineStyle(l.lineStyle);var c=Utils.getLinkerLineStyle(g.lineStyle);if(a=="none"||a=="cross"){h.x=-f.lineWidth/2}else{if(a=="solidArrow"||a=="dashedArrow"){h.x=-f.lineWidth/2-c.lineWidth*1.3}else{if(a=="solidDiamond"||a=="dashedDiamond"){h.x=-f.lineWidth/2-c.lineWidth}else{h.x=-f.lineWidth/2-c.lineWidth/2}}}var d={x:0,y:0};var k=Utils.getRotated(d,h,e);b.x+=k.x;b.y+=k.y}}}function ab(d,p,l,b,k,x){if(b=="normal"){var h=12;var z=Math.PI/5;var e=h/Math.cos(z);var q=d.x-e*Math.cos(p-z);var r=d.y-e*Math.sin(p-z);var n=d.x-e*Math.sin(Math.PI/2-p-z);var o=d.y-e*Math.cos(Math.PI/2-p-z);U.beginPath();U.moveTo(q,r);U.lineTo(d.x,d.y);U.lineTo(n,o);U.stroke()}else{if(b=="solidArrow"){var h=12;var z=Math.PI/10;var e=h/Math.cos(z);var q=d.x-e*Math.cos(p-z);var r=d.y-e*Math.sin(p-z);var n=d.x-e*Math.sin(Math.PI/2-p-z);var o=d.y-e*Math.cos(Math.PI/2-p-z);U.beginPath();U.moveTo(d.x,d.y);U.lineTo(q,r);U.lineTo(n,o);U.lineTo(d.x,d.y);U.closePath();U.fill();U.stroke()}else{if(b=="dashedArrow"){U.save();var h=12;var z=Math.PI/10;var e=h/Math.cos(z);var q=d.x-e*Math.cos(p-z);var r=d.y-e*Math.sin(p-z);var n=d.x-e*Math.sin(Math.PI/2-p-z);var o=d.y-e*Math.cos(Math.PI/2-p-z);U.beginPath();U.moveTo(d.x,d.y);U.lineTo(q,r);U.lineTo(n,o);U.lineTo(d.x,d.y);U.closePath();U.fillStyle="white";U.fill();U.stroke();U.restore()}else{if(b=="solidCircle"){U.save();var y=4;var s=d.x-y*Math.cos(p);var t=d.y-y*Math.sin(p);U.beginPath();U.arc(s,t,y,0,Math.PI*2,false);U.closePath();U.fill();U.stroke();U.restore()}else{if(b=="dashedCircle"){U.save();var y=4;var s=d.x-y*Math.cos(p);var t=d.y-y*Math.sin(p);U.beginPath();U.arc(s,t,y,0,Math.PI*2,false);U.closePath();U.fillStyle="white";U.fill();U.stroke();U.restore()}else{if(b=="solidDiamond"){U.save();var h=8;var z=Math.PI/7;var e=h/Math.cos(z);var q=d.x-e*Math.cos(p-z);var r=d.y-e*Math.sin(p-z);var n=d.x-e*Math.sin(Math.PI/2-p-z);var o=d.y-e*Math.cos(Math.PI/2-p-z);var f=d.x-h*2*Math.cos(p);var g=d.y-h*2*Math.sin(p);U.beginPath();U.moveTo(d.x,d.y);U.lineTo(q,r);U.lineTo(f,g);U.lineTo(n,o);U.lineTo(d.x,d.y);U.closePath();U.fill();U.stroke();U.restore()}else{if(b=="dashedDiamond"){U.save();var h=8;var z=Math.PI/7;var e=h/Math.cos(z);var q=d.x-e*Math.cos(p-z);var r=d.y-e*Math.sin(p-z);var n=d.x-e*Math.sin(Math.PI/2-p-z);var o=d.y-e*Math.cos(Math.PI/2-p-z);var f=d.x-h*2*Math.cos(p);var g=d.y-h*2*Math.sin(p);U.beginPath();U.moveTo(d.x,d.y);U.lineTo(q,r);U.lineTo(f,g);U.lineTo(n,o);U.lineTo(d.x,d.y);U.closePath();U.fillStyle="white";U.fill();U.stroke();U.restore()}else{if(b=="cross"){var u=6;var m=14;var A=u*Math.cos(Math.PI/2-p);var B=u*Math.sin(Math.PI/2-p);var a=d.x+A;var v=d.y-B;var f=d.x-m*Math.cos(p);var g=d.y-m*Math.sin(p);var c=f-A;var w=g+B;U.beginPath();U.moveTo(a,v);U.lineTo(c,w);U.stroke()}}}}}}}}}},renderLinkerText:function(g){var f=$("#"+g.id);var b=f.find(".text_canvas");if(b.length==0){b=$("<div class='text_canvas linker_text'></div>").appendTo(f)}var e=g.fontStyle;var c="scale("+Designer.config.scale+")";var a={"line-height":Math.round(e.size*1.25)+"px","font-size":e.size+"px","font-family":e.fontFamily,"font-weight":e.bold?"bold":"normal","font-style":e.italic?"italic":"normal","text-align":e.textAlign,color:"rgb("+e.color+")","text-decoration":e.underline?"underline":"none","-webkit-transform":c,"-ms-transform":c,"-o-transform":c,"-moz-transform":c,transform:c};b.css(a);if(g.text==null||g.text==""){b.hide();return}b.show();var h=g.text.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\n/g,"<br/>");b.html(h+"<br/>");var i=this.getLinkerMidpoint(g);var d=f.position();b.css({left:i.x.toScale()-d.left-b.width()/2,top:i.y.toScale()-d.top-b.height()/2})},getLinkerMidpoint:function(h){var l={};if(h.linkerType=="normal"){l={x:0.5*h.from.x+0.5*h.to.x,y:0.5*h.from.y+0.5*h.to.y}}else{if(h.linkerType=="curve"){var g=h.from;var b=h.points[0];var m=h.points[1];var k=h.to;l={x:g.x*0.125+b.x*0.375+m.x*0.375+k.x*0.125,y:g.y*0.125+b.y*0.375+m.y*0.375+k.y*0.125}}else{var n=[];n.push(h.from);n=n.concat(h.points);n.push(h.to);var a=0;for(var f=1;f<n.length;f++){var b=n[f-1];var m=n[f];var i=Utils.measureDistance(b,m);a+=i}var C=a/2;var e=0;for(var f=1;f<n.length;f++){var b=n[f-1];var m=n[f];var i=Utils.measureDistance(b,m);var o=e+i;if(o>C){var c=(C-e)/i;l={x:(1-c)*b.x+c*m.x,y:(1-c)*b.y+c*m.y};break}e=o}}}return l},controlStatus:{resizeDir:[],rotatable:true},drawControls:function(f){var e=$("#shape_controls");if(e.length==0){var a=$("#designer_canvas");e=$("<div id='shape_controls'></div>").appendTo(a);e.append("<canvas id='controls_bounding'></canvas>");e.append("<div class='shape_controller' index='0' resizeDir='tl'></div>");e.append("<div class='shape_controller' index='1' resizeDir='tr'></div>");e.append("<div class='shape_controller' index='2' resizeDir='br'></div>");e.append("<div class='shape_controller' index='3' resizeDir='bl'></div>");e.append("<div class='shape_controller' resizeDir='l'></div>");e.append("<div class='shape_controller' resizeDir='t'></div>");e.append("<div class='shape_controller' resizeDir='r'></div>");e.append("<div class='shape_controller' resizeDir='b'></div>");Designer.op.shapeResizable();e.append("<canvas class='shape_rotater' width='41px' height='40px'></canvas>");Designer.op.shapeRotatable();e.append("<div class='group_icon change_shape_icon'></div>");Designer.op.groupShapeChangable();$(".shape_controller").css({"border-color":Designer.config.anchorColor,width:Designer.config.anchorSize-2,height:Designer.config.anchorSize-2})}$(".shape_controller").css({"z-index":Model.orderList.length});$(".change_shape_icon").hide();e.show();var c=0;var h;var b;if(f.length==1){var g=Model.getShapeById(f[0]);h=g.props;c=g.props.angle;b=g.resizeDir;if(g.groupName&&SchemaGroup.groupExists(g.groupName)){$(".change_shape_icon").show()}}else{h=Utils.getControlBox(f);b=["tl","tr","br","bl"]}var k=true;for(var d=0;d<f.length;d++){var u=f[d];var g=Model.getShapeById(u);if(g.attribute&&g.attribute.rotatable==false){k=false}if((g.resizeDir&&g.resizeDir.length==0)||(g.parent&&f.length>1)){b=[]}}this.controlStatus.rotatable=k;this.controlStatus.resizeDir=b;this.rotateControls(h,c);return e},rotateControls:function(g,v){var l=$("#shape_controls");var m=Utils.getRotatedBox(g,v);var Y=m.w.toScale();var h=m.h.toScale();l.css({left:m.x.toScale(),top:m.y.toScale(),width:Y,height:h,"z-index":Model.orderList.length});var k=Y+20;var p=h+20;var f=$("#controls_bounding");f.attr({width:k,height:p});var q=f[0].getContext("2d");q.lineJoin="round";if(this.controlStatus.resizeDir.length==0){q.lineWidth=2;q.strokeStyle=Designer.config.selectorColor;q.globalAlpha=0.8}else{q.lineWidth=1;q.strokeStyle=Designer.config.selectorColor;q.globalAlpha=0.5}q.save();q.clearRect(0,0,k,p);q.translate(k/2,p/2);q.rotate(v);q.translate(-k/2,-p/2);q.translate(9.5,9.5);var b={x:Math.round((g.x-m.x).toScale()),y:Math.round((g.y-m.y).toScale()),w:Math.floor(g.w.toScale()+1),h:Math.floor(g.h.toScale()+1)};q.strokeRect(b.x,b.y,b.w,b.h);q.restore();var z=0-Designer.config.anchorSize/2;var t={};g=Utils.toScale(g);m=Utils.toScale(m);var w={x:(g.x+g.w/2),y:g.y+g.h/2};l.children(".shape_controller").hide();for(var s=0;s<this.controlStatus.resizeDir.length;s++){var o=this.controlStatus.resizeDir[s];var a=$(".shape_controller[resizeDir="+o+"]");a.show();var d,c;if(o.indexOf("l")>=0){d=g.x}else{if(o.indexOf("r")>=0){d=g.x+g.w}else{d=g.x+g.w/2}}if(o.indexOf("t")>=0){c=g.y}else{if(o.indexOf("b")>=0){c=g.y+g.h}else{c=g.y+g.h/2}}var e=Utils.getRotated(w,{x:d,y:c},v);a.css({left:e.x-m.x+z,top:e.y-m.y+z})}var n=Math.PI/8;l.children(".shape_controller").removeClass("s n e w");if(v>n&&v<=n*3){l.children("div[resizeDir=tl]").addClass("n");l.children("div[resizeDir=tr]").addClass("e");l.children("div[resizeDir=br]").addClass("s");l.children("div[resizeDir=bl]").addClass("w");l.children("div[resizeDir=l]").addClass("n w");l.children("div[resizeDir=r]").addClass("s e");l.children("div[resizeDir=b]").addClass("s w");l.children("div[resizeDir=t]").addClass("n e")}else{if(v>n*3&&v<=n*5){l.children("div[resizeDir=tl]").addClass("n e");l.children("div[resizeDir=tr]").addClass("s e");l.children("div[resizeDir=br]").addClass("s w");l.children("div[resizeDir=bl]").addClass("n w");l.children("div[resizeDir=l]").addClass("n");l.children("div[resizeDir=r]").addClass("s");l.children("div[resizeDir=b]").addClass("w");l.children("div[resizeDir=t]").addClass("e")}else{if(v>n*5&&v<=n*7){l.children("div[resizeDir=tl]").addClass("e");l.children("div[resizeDir=tr]").addClass("s");l.children("div[resizeDir=br]").addClass("w");l.children("div[resizeDir=bl]").addClass("n");l.children("div[resizeDir=l]").addClass("n e");l.children("div[resizeDir=r]").addClass("s w");l.children("div[resizeDir=b]").addClass("n w");l.children("div[resizeDir=t]").addClass("s e")}else{if(v>n*7&&v<=n*9){l.children("div[resizeDir=tl]").addClass("s e");l.children("div[resizeDir=tr]").addClass("s w");l.children("div[resizeDir=br]").addClass("n w");l.children("div[resizeDir=bl]").addClass("n e");l.children("div[resizeDir=l]").addClass("e");l.children("div[resizeDir=r]").addClass("w");l.children("div[resizeDir=b]").addClass("n");l.children("div[resizeDir=t]").addClass("s")}else{if(v>n*9&&v<=n*11){l.children("div[resizeDir=tl]").addClass("s");l.children("div[resizeDir=tr]").addClass("w");l.children("div[resizeDir=br]").addClass("n");l.children("div[resizeDir=bl]").addClass("e");l.children("div[resizeDir=l]").addClass("s e");l.children("div[resizeDir=r]").addClass("n w");l.children("div[resizeDir=b]").addClass("n e");l.children("div[resizeDir=t]").addClass("s w")}else{if(v>n*11&&v<=n*13){l.children("div[resizeDir=tl]").addClass("s w");l.children("div[resizeDir=tr]").addClass("n w");l.children("div[resizeDir=br]").addClass("n e");l.children("div[resizeDir=bl]").addClass("s e");l.children("div[resizeDir=l]").addClass("s");l.children("div[resizeDir=r]").addClass("n");l.children("div[resizeDir=b]").addClass("e");l.children("div[resizeDir=t]").addClass("w")}else{if(v>n*13&&v<=n*15){l.children("div[resizeDir=tl]").addClass("w");l.children("div[resizeDir=tr]").addClass("n");l.children("div[resizeDir=br]").addClass("e");l.children("div[resizeDir=bl]").addClass("s");l.children("div[resizeDir=l]").addClass("s w");l.children("div[resizeDir=r]").addClass("n e");l.children("div[resizeDir=b]").addClass("s e");l.children("div[resizeDir=t]").addClass("n w")}else{l.children("div[resizeDir=tl]").addClass("n w");l.children("div[resizeDir=tr]").addClass("n e");l.children("div[resizeDir=br]").addClass("s e");l.children("div[resizeDir=bl]").addClass("s w");l.children("div[resizeDir=l]").addClass("w");l.children("div[resizeDir=r]").addClass("e");l.children("div[resizeDir=b]").addClass("s");l.children("div[resizeDir=t]").addClass("n")}}}}}}}if(this.controlStatus.rotatable){var y=l.find(".shape_rotater");y.show();var x={x:g.x+g.w/2,y:g.y-20};var u=Utils.getRotated(w,x,v);y.css({top:u.y-20-m.y,left:u.x-20.5-m.x});var r=y[0].getContext("2d");r.lineWidth=1;r.strokeStyle=Designer.config.selectorColor;r.fillStyle="white";r.save();r.clearRect(0,0,41,40);r.translate(20.5,20);r.rotate(v);r.translate(-20.5,-20);r.beginPath();r.moveTo(20.5,20);r.lineTo(20.5,40);r.stroke();r.beginPath();r.arc(20.5,20,Designer.config.rotaterSize/2,0,Math.PI*2);r.closePath();r.fill();r.stroke();r.restore()}else{l.find(".shape_rotater").hide()}},renderShapeLink:function(b,a){b.find(".shape_link_point").remove();if(a.link){var c=$("<div class='shape_link_point' style='cursor: pointer; position: absolute; right: -14px; bottom: -0px; width: 10px; height: 10px; color: #515151;'>"+"<i class='awsui-iconfont' awsui-qtip='链接' style='cursor: pointer; font-size: 13px;'>&#xe7d7;</i>"+"</div>").appendTo(b);c.on("mousedown.link",function(i){i.stopPropagation();var x=Model.getShapeById($(this).parent().attr("id"));myshapeLink=x;if(x!=undefined){var s=x.props.x;var t=x.props.y;var r=x.props.w;var l=x.props.h;var y=$("#link-dialog-normal_contextmenu");y.empty();var p=[];for(var m=0;m<x.dataAttributes.length;m++){var o=x.dataAttributes[m];if(o.linksArray){p=o.linksArray;break}}var w="";for(var v=0;v<p.length;v++){if(p[v].type=="file"){w+=p[v].uuid+","}}if(p.length>0&&window.opener){var z=parent.window.$("#appId").val();var e={sid:$("#sid").val(),cmd:"com.actionsoft.apps.coe.pal_pl_repository_designer_viewer_link_perm",uuids:w,filePerms:filePerms};if(window.opener){e.modelType="used"}else{if(z!=undefined&&z!="com.actionsoft.apps.coe.pal"&&z!=""){e.modelType="published"}}awsui.ajax.request({url:"./jd",method:"POST",data:e,async:false,ok:function(d){var B=[];var C=d.data.uuids;for(var A=0;A<p.length;A++){var g=false;var f=p[A].uuid;if(p[A].type=="file"){for(var k=0;k<C.length;k++){if(C[k].linkUUID==p[A].uuid){g=true;break}}}else{g=true}if(g){p[A].uuid=f;B.push(p[A])}}p=B}})}if(p.length==0){y.hide();$.simpleAlert("没有链接权限","error");return}else{if(p.length==1){y.hide();openLinkUrlRewrite(p[0].type,p[0].url,p[0].target,p[0].uuid,"",p[0].name,true);return}else{for(var v=0;v<p.length;v++){linkIndex++;var q=p[v];var n='<li id="linkLi_'+linkIndex+'" ac="cut"><a target="'+q.target+'"   onclick="openLinkUrlRewrite(\''+q.type+"','"+q.url+"','"+q.target+"','"+q.uuid+"','"+q.uuid+"','"+q.name+"', true)\">"+q.name+"</a>";if(role=="owner"){n+='<div class="extend" style="cursor:pointer;color:#4183C4;" ><div onclick="deleteTheLinkNode(\''+q.url+"','"+linkIndex+"')\">删除</div></div>"}n+="</li>";y.append(n)}}}var u=Utils.getShapeByPosition(s,t,false);var h=Designer.clipboard.elements.length;if(u==null){if(h>0){y.children("li[ac=paste]").show();y.children(".devi_clip").show()}}else{var x=u.shape;y.children("li[ac=cut]").show()}y.css({display:"block","z-index":Model.orderList.length+3,left:s+r+10,top:t+l});$(document).on("mousedown.link",":not(#link-dialog-normal_contextmenu li):not(#link-dialog-normal_contextmenu ul):not(#link-dialog-normal_contextmenu a):not(#link-dialog-normal_contextmenu div)",function(d){if(this.id=="link-dialog-normal_contextmenu"){return false}y.hide()})}i.stopPropagation()})}},renderSahpeAttachment:function(h,f){h.find(".shape_attachment_point").remove();var e=[];var g=[];var a=false;var d=function(i){$.ajax({method:"POST",async:i,url:"./jd?sid="+encodeURIComponent(sid)+"&cmd=com.actionsoft.apps.coe.pal_processlevel_upfile_load",data:{pl_uuid:ruuid,uuids:f.id},success:function(k){e=k.data.list;$.ajax({method:"POST",async:i,url:"./jd?sid="+encodeURIComponent(sid)+"&cmd=com.actionsoft.apps.coe.pal_processlevel_relation_upfile_load",data:{pl_uuid:ruuid,shape_uuid:f.id},success:function(l){g=l.data.list;a=true}})}})};d(true);var c=new Date().getTime();var b=window.setInterval(function(){var i=new Date().getTime();if(i-c>5000||a==true){window.clearInterval(b);if((e&&e.length>0)||(g&&g.length>0)){var k=$("<div class='shape_attachment_point' style='cursor: pointer; position: absolute; right: -14px; bottom: 16px; width: 10px; height: 10px;'>"+"<i class='awsui-iconfont' awsui-qtip='附件' style='cursor: pointer; font-size: 12px;'>&#xe705;</i>"+"</div>").appendTo(h);k.on("mousedown.attachment",function(q){q.stopPropagation();d(false);var A=Model.getShapeById($(this).parent().attr("id"));myshapeLink=A;if(A!=undefined){var w=A.props.x;var x=A.props.y;var v=A.props.w;var r=A.props.h;var D=$("#attachment-dialog-normal_contextmenu");D.empty();D.append('<iframe id="shape_attachment" name="shape_attachment" style="display:none;"></iframe>');for(var u=0;u<2;u++){var C=e;var E="附件";if(u==0){}else{C=g;E="关联附件"}if(C.length>0){D.append('<li  style="font-weight:500;padding-left:20px;padding-right:60px;"><span>'+E+"</span></li>");for(var z=0;z<C.length;z++){var l=C[z];var o=l.createUser;var n=l.download;var m=false;if(u==0){if(n==1||user==o){m=true}}else{if(n==1){m=true}}var t='<li id="attachmentLi_'+z+'" ac="cut" style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:50px;"><span>'+l.fileName+"</span>";if(m){t+='<div class="extend" style="cursor:pointer;color:#4183C4;padding-right:20px;"><div onclick="document.getElementById(\'shape_attachment\').contentWindow.location.href=\''+l.url+"'\">下载</div></div>"}t+="</li>";D.append(t)}}}if(e.length==0&&g.length==0){D.append('<li  style="font-weight:500;padding-left:20px;padding-right:60px;"><span>'+"无附件"+"</span></li>")}var y=Utils.getShapeByPosition(w,x,false);var p=Designer.clipboard.elements.length;if(y==null){if(p>0){D.children("li[ac=paste]").show();D.children(".devi_clip").show()}}else{var A=y.shape;D.children("li[ac=cut]").show()}D.css({display:"block","z-index":Model.orderList.length+3,left:w+v+10,top:x+r});$(document).on("mousedown.attachment",":not(#attachment-dialog-normal_contextmenu span):not(#attachment-dialog-normal_contextmenu li):not(#attachment-dialog-normal_contextmenu ul):not(#attachment-dialog-normal_contextmenu a):not(#attachment-dialog-normal_contextmenu div)",function(s){if(this.id=="attachment-dialog-normal_contextmenu"){return false}D.hide()})}q.stopPropagation()})}}},100)},}};var Model={define:{},persistence:{},orderList:[],maxZIndex:0,linkerMap:{map:{},add:function(b,a){if(!this.map[b]){this.map[b]=[]}if(this.map[b].indexOf(a)<0){this.map[b].push(a)}},remove:function(b,a){if(this.map[b]){Utils.removeFromArray(this.map[b],a)}},empty:function(){this.map={}}},groupMap:{map:{},add:function(a,b){this.map[a]=b},push:function(a,b){if(!this.map[a]){this.map[a]=[]}this.map[a].push(b)},remove:function(a){delete this.map[a]},empty:function(){this.map={}}},create:function(b,f,d){var a=Utils.newId();var g=Utils.copy(Schema.shapes[b]);g.id=a;g.props.x=f;g.props.y=d;g.props.zindex=Model.maxZIndex+1;g.props=$.extend(true,{},Schema.shapeDefaults.props,g.props);for(var c=0;c<g.dataAttributes.length;c++){var e=g.dataAttributes[c];e.id=Utils.newId();if(e.attributesJsonArray){if(Model.define.localAttribute!=undefined&&Model.define.localAttribute[g.name]!=undefined&&Model.define.localAttribute[g.name]!=null&&Model.define.localAttribute[g.name].length>0){for(var p in Model.define.localAttribute[g.name]){e.attributesJsonArray.push(Utils.copy(Model.define.localAttribute[g.name][p]))}}}}Designer.events.push("create",g);return g},add:function(a,b){this.addMulti([a],b)},addMulti:function(e,c){if(typeof c=="undefined"){c=true}var d=[];for(var b=0;b<e.length;b++){var a=e[b];d.push(Utils.copy(a));this.define.elements[a.id]=Utils.copy(a);this.persistence.elements[a.id]=Utils.copy(a)}this.build();if(c){MessageSource.send("create",d)}},update:function(a){this.updateMulti([a]);Designer.painter.renderShape(a)},updateMulti:function(a){var e=[];var f=[];for(var c=0;c<a.length;c++){var b=a[c];if(this.define.elements[b.id]){this.define.elements[b.id]=Utils.copy(b);f.push(Utils.copy(this.getPersistenceById(b.id)));e.push(Utils.copy(b));this.persistence.elements[b.id]=Utils.copy(b)}}this.build();var d={shapes:f,updates:e};MessageSource.send("update",d)},remove:function(c,o){if(typeof o=="undefined"){o=true}if(o){c=Designer.events.push("beforeRemove",c)}var m=[];var b=[];var h=[];var d=[];var f=[];if(c.length==0){return false}for(var k=0;k<c.length;k++){var n=c[k];if(n.name=="linker"){f.push(n.id)}else{d.push(n.id)}}for(var k=0;k<c.length;k++){var n=c[k];m.push(Utils.copy(n));$("#"+n.id).remove();delete this.define.elements[n.id];delete this.persistence.elements[n.id];this.groupMap.remove(n.group);if(n.name=="linker"){if(n.from.id!=null){this.linkerMap.remove(n.from.id,n.id)}if(n.to.id!=null){this.linkerMap.remove(n.to.id,n.id)}}else{if(n.parent&&d.indexOf(n.parent)<0){var p=Model.getShapeById(n.parent);if(p){Utils.removeFromArray(p.children,n.id);if(b.indexOf(n.parent)<0){b.push(n.parent);h.push(p)}}}var g=this.getShapeLinkers(n.id);if(g&&g.length>0){for(var l=0;l<g.length;l++){var a=g[l];if(f.indexOf(a)<0){var e=this.getShapeById(a);if(e.from.id!=null&&e.from.id==n.id){e.from.id=null;e.from.angle=null}if(e.to.id!=null&&e.to.id==n.id){e.to.id=null;e.to.angle=null}if(b.indexOf(a)<0){b.push(a);h.push(e)}}}}delete this.linkerMap.map[n.id]}}this.build();MessageSource.beginBatch();MessageSource.send("remove",m);if(o){var E=Designer.events.push("removed",{shapes:c,changedIds:b,range:d});if(E&&E.length){h=h.concat(E)}}if(h.length>0){this.updateMulti(h)}MessageSource.commit();return true},updatePage:function(c,a){var d=$.extend(Model.define.page,c);var b={page:Utils.copy(Model.persistence.page),update:Utils.copy(d)};Model.persistence.page=Utils.copy(d);MessageSource.send("updatePage",b);Designer.initialize.initCanvas()},updateLocalAttribute:function(b){var d=$.extend(Model.define.localAttribute,b);var a={localAttribute:Utils.copy(Model.persistence.localAttribute),update:Utils.copy(d)};Model.persistence.localAttribute=Utils.copy(d);MessageSource.send("updateLocalAttribute",a)},getShapeById:function(a){return this.define.elements[a]},getPersistenceById:function(a){return this.persistence.elements[a]},build:function(){this.orderList=[];this.linkerMap.empty();for(var c in Model.define.elements){var d=Model.getShapeById(c);this.orderList.push({id:d.id,zindex:d.props.zindex});if(d.name=="linker"){if(d.from.id!=null){this.linkerMap.add(d.from.id,d.id)}if(d.to.id!=null){this.linkerMap.add(d.to.id,d.id)}}if(d.group){this.groupMap.push(d.group,d.id)}}this.orderList.sort(function b(g,f){return g.zindex-f.zindex});for(var a=0;a<Model.orderList.length;a++){var c=Model.orderList[a].id;var d=Model.getShapeById(c);$("#"+c).css("z-index",a)}var e=0;if(this.orderList.length>0){e=this.orderList[this.orderList.length-1].zindex}this.maxZIndex=e},getShapeLinkers:function(a){return this.linkerMap.map[a]},getGroupShapes:function(a){return this.groupMap.map[a]},changeShape:function(b,a){var c=Schema.shapes[a];b.name=a;b.title=c.shapeName;b.attribute=c.attribute;b.dataAttributes=c.dataAttributes;b.path=c.path;b.textBlock=c.textBlock;b.anchors=c.anchors;Schema.initShapeFunctions(b);Designer.painter.renderShape(b)}};var Utils={getDomById:function(a){return document.getElementById(a)},newId:function(){var b=Math.random();var a=(b+new Date().getTime());return a.toString(16).replace(".","")},getShapeByPosition:function(k,g,K){var p=[];for(var Q=Model.orderList.length-1;Q>=0;Q--){var q=Model.orderList[Q].id;var aa=$("#"+q);var z=Model.getShapeById(q);var B=aa.position();var J=k-B.left;var I=g-B.top;var r={x:B.left,y:B.top,w:aa.width(),h:aa.height()};var P=aa.find(".shape_canvas")[0];var l=P.getContext("2d");var N=this.pointInRect(k,g,r);if(z.name=="linker"){if(!N){continue}if(K){continue}var m=10;m=m.toScale();var H={x:k-m,y:g-m,w:m*2,h:m*2};if(this.pointInRect(z.to.x.toScale(),z.to.y.toScale(),H)){var A={type:"linker_point",point:"end",shape:z};p.push(A);continue}else{if(this.pointInRect(z.from.x.toScale(),z.from.y.toScale(),H)){var A={type:"linker_point",point:"from",shape:z};p.push(A);continue}else{var C=aa.find(".text_canvas");var E=C.position();var H={x:E.left,y:E.top,w:C.width(),h:C.height()};if(this.pointInRect(J,I,H)){var A={type:"linker_text",shape:z};p.push(A);continue}m=7;m=m.toScale();var F=this.pointInLinker({x:k.restoreScale(),y:g.restoreScale()},z,m);if(F>-1){var A={type:"linker",shape:z,pointIndex:F};p.push(A);continue}}}}else{if(N&&z.locked&&!K){if(l.isPointInPath(J,I)){var A={type:"shape",shape:z};p.push(A)}continue}var m=7;if(N){m=m.toScale();var H={x:k-m,y:g-m,w:m*2,h:m*2};var a={x:z.props.x+z.props.w/2,y:z.props.y+z.props.h/2};var v=z.getAnchors();var A=null;for(var h=0;h<v.length;h++){var d=v[h];d=this.getRotated(a,{x:z.props.x+d.x,y:z.props.y+d.y},z.props.angle);if(Utils.pointInRect(d.x.toScale(),d.y.toScale(),H)){var w=Utils.getPointAngle(q,d.x,d.y,m);d.angle=w;A={type:"bounding",shape:z,linkPoint:d};if(l.isPointInPath(J,I)){A.inPath=true}break}}if(A!=null){p.push(A);continue}}if(z.dataAttributes){var A=null;for(var o=0;o<z.dataAttributes.length;o++){var u=z.dataAttributes[o];if(u.type=="link"&&u.showType&&u.showType!="none"){var G=aa.children("#attr_canvas_"+u.id);if(G.length>0){var D=G.position();var e=J-D.left;var c=I-D.top;var s=G[0].getContext("2d");if(s.isPointInPath(e,c)){A={type:"dataAttribute",shape:z,attribute:u};break}}}}if(A!=null){p.push(A);continue}}if(!N){continue}if(l.isPointInPath(J,I)){if(K){var v=z.getAnchors();if(v&&v.length){var A={type:"shape",shape:z};p.push(A);continue}else{continue}}else{var A={type:"shape",shape:z};p.push(A);continue}}else{if(!z.attribute||typeof z.attribute.linkable=="undefined"||z.attribute.linkable){var w=Utils.getPointAngle(q,k.restoreScale(),g.restoreScale(),m);if(w!=null){var A=null;var M={angle:w};for(var L=1;L<=m;L++){if(w==0){M.x=J+L;M.y=I}else{if(w<Math.PI/2){M.x=J+L*Math.cos(w);M.y=I+L*Math.sin(w)}else{if(w==Math.PI/2){M.x=J;M.y=I+L}else{if(w<Math.PI){M.x=J-L*Math.sin(w-Math.PI/2);M.y=I+L*Math.cos(w-Math.PI/2)}else{if(w==Math.PI/2){M.x=J-L;M.y=I}else{if(w<Math.PI/2*3){M.x=J-L*Math.cos(w-Math.PI);M.y=I-L*Math.sin(w-Math.PI)}else{if(w==Math.PI/2*3){M.x=J;M.y=I-L}else{M.x=J+L*Math.sin(w-Math.PI/2*3);M.y=I-L*Math.cos(w-Math.PI/2*3)}}}}}}}if(l.isPointInPath(M.x,M.y)){M.x+=B.left;M.y+=B.top;M.x=M.x.restoreScale();M.y=M.y.restoreScale();A={type:"bounding",shape:z,linkPoint:M};break}}if(A!=null){p.push(A);continue}}}}}}var A=null;if(p.length==1){A=p[0]}if(p.length>1&&K){A=p[0]}else{if(p.length>1){var f=p[0];if(f.type=="bounding"&&f.type!="linker_point"&&f.type!="linker"){return f}var F=[];var O=[];var t=[];for(var Q=0;Q<p.length;Q++){var n=p[Q];if(n.type=="bounding"){t.push(n)}else{if(n.type=="linker"){F.push(n)}else{if(n.type=="linker_point"){O.push(n)}}}}if(t.length>0&&O.length>0){for(var Q=0;Q<t.length;Q++){var n=t[Q];if(n.inPath){A=n;break}}}if(A==null&&O.length>0){O.sort(function b(x,i){if(Utils.isSelected(x.shape.id)&&!Utils.isSelected(i.shape.id)){return -1}else{if(!Utils.isSelected(x.shape.id)&&Utils.isSelected(i.shape.id)){return 1}else{return i.shape.props.zindex-x.shape.props.zindex}}});A=O[0]}if(A==null&&F.length>0){F.sort(function b(x,i){if(Utils.isSelected(x.shape.id)&&!Utils.isSelected(i.shape.id)){return -1}else{if(!Utils.isSelected(x.shape.id)&&Utils.isSelected(i.shape.id)){return 1}else{return i.shape.props.zindex-x.shape.props.zindex}}});A=F[0]}if(A==null){A=p[0]}}}return A},checkCross:function(c,a,i,h){var e=false;var b=(a.x-c.x)*(h.y-i.y)-(a.y-c.y)*(h.x-i.x);if(b!=0){var f=((c.y-i.y)*(h.x-i.x)-(c.x-i.x)*(h.y-i.y))/b;var g=((c.y-i.y)*(a.x-c.x)-(c.x-i.x)*(a.y-c.y))/b;if((f>=0)&&(f<=1)&&(g>=0)&&(g<=1)){e=true}}return e},rectCross:function(f,e){var b=f.x;var d=f.x+f.w;var h=f.y;var u=f.y+f.h;var a=e.x;var c=e.x+e.w;var g=e.y;var i=e.y+e.h;if(((b<c)&&(a<d))&&((h<i)&&(g<u))){return true}else{return false}},rectInRect:function(a,e){var d={x:a.x,y:a.y};var c={x:a.x+a.w,y:a.y};var b={x:a.x+a.w,y:a.y+a.h};var f={x:a.x,y:a.y+a.h};if(this.pointInRect(d.x,d.y,e)&&this.pointInRect(c.x,c.y,e)&&this.pointInRect(b.x,b.y,e)&&this.pointInRect(f.x,f.y,e)){return true}else{return false}},pointInPolygon:function(d,f){var c,b,a,h;c=d;b={x:-1000000,y:d.y};var g=0;for(var e=0;e<f.length-1;e++){a=f[e];h=f[e+1];if(Utils.checkCross(c,b,a,h)==true){g++}}a=f[f.length-1];h=f[0];if(Utils.checkCross(c,b,a,h)==true){g++}return(g%2==0)?false:true},pointInRect:function(c,b,a){if(c>=a.x&&c<=a.x+a.w&&b>=a.y&&b<=a.y+a.h){return true}return false},pointInLinker:function(b,l,y){var d=this.getLinkerLinePoints(l);var i={x:b.x-y,y:b.y};var h={x:b.x+y,y:b.y};var g={x:b.x,y:b.y-y};var f={x:b.x,y:b.y+y};for(var k=1;k<d.length;k++){var e=d[k-1];var c=d[k];var a=this.checkCross(i,h,e,c);if(a){return k}a=this.checkCross(g,f,e,c);if(a){return k}}return -1},getLinkerLength:function(h){var g=this.getLinkerLinePoints(h);var f=0;for(var b=1;b<g.length;b++){var e=g[b-1];var a=g[b];var c=Utils.measureDistance(e,a);f+=c}return f},getShapesByRange:function(a){var d=[];for(var c in Model.define.elements){var e=Model.getShapeById(c);var b=e.props;if(e.name=="linker"){b=this.getLinkerBox(e)}else{b=this.getShapeBox(e)}if(this.pointInRect(b.x,b.y,a)&&this.pointInRect(b.x+b.w,b.y,a)&&this.pointInRect(b.x+b.w,b.y+b.h,a)&&this.pointInRect(b.x,b.y+b.h,a)){d.push(e.id)}}return d},getControlBox:function(b){var d={x1:null,y1:null,x2:null,y2:null};for(var f=0;f<b.length;f++){var c=b[f];var e=Model.getShapeById(c);var a;if(e.name=="linker"){a=this.getLinkerBox(e)}else{a=this.getShapeBox(e)}if(d.x1==null||a.x<d.x1){d.x1=a.x}if(d.y1==null||a.y<d.y1){d.y1=a.y}if(d.x2==null||a.x+a.w>d.x2){d.x2=a.x+a.w}if(d.y2==null||a.y+a.h>d.y2){d.y2=a.y+a.h}}var g={x:d.x1,y:d.y1,w:d.x2-d.x1,h:d.y2-d.y1};return g},getShapesBounding:function(e){var d={x1:null,y1:null,x2:null,y2:null};for(var a=0;a<e.length;a++){var f=e[a];var b;if(f.name=="linker"){b=this.getLinkerBox(f)}else{b=f.props}if(d.x1==null||b.x<d.x1){d.x1=b.x}if(d.y1==null||b.y<d.y1){d.y1=b.y}if(d.x2==null||b.x+b.w>d.x2){d.x2=b.x+b.w}if(d.y2==null||b.y+b.h>d.y2){d.y2=b.y+b.h}}var c={x:d.x1,y:d.y1,w:d.x2-d.x1,h:d.y2-d.y1};return c},getShapeContext:function(b){var a=Utils.getDomById(b);return a.getElementsByTagName("canvas")[0].getContext("2d")},selectIds:[],selectShape:function(A,k){if(typeof A=="string"){var d=A;A=[];A.push(d)}if(A.length<=0){return}var a=Utils.mergeArray([],A);for(var m=0;m<A.length;m++){var c=Model.getShapeById(A[m]);if(c&&c.group){var h=Model.getGroupShapes(c.group);Utils.mergeArray(a,h)}}var f=[];for(var m=0;m<a.length;m++){var g=a[m];var c=Model.getShapeById(g);if(c&&c.parent&&c.resizeDir.length==0&&f.indexOf(c.parent)<0){f.push(c.parent)}else{if(f.indexOf(g)<0){f.push(g)}}}A=f;Utils.removeAnchors();Utils.selectIds=[];for(var b=0;b<A.length;b++){var d=A[b];var c=Model.getShapeById(d);Utils.selectIds.push(d);if(c&&c.name=="linker"){if(this.isLocked(c.id)){Utils.showLockers(c)}else{Designer.painter.renderLinker(c)}}else{if(c&&this.isLocked(c.id)){Utils.showLockers(c)}else{Utils.showAnchors(c)}}}var f=Utils.getSelectedIds();var e=false;if(f.length==1){var n=Model.getShapeById(f[0]);if(n.name=="linker"){e=true;Utils.showLinkerControls()}}if(f.length>0&&!e){var l=Designer.painter.drawControls(f)}if(typeof k=="undefined"){k=true}if(this.selectCallback&&k){this.selectCallback()}Designer.events.push("selectChanged");this.showLinkerCursor()},selectCallback:null,unselect:function(){var a=this.selectIds;this.selectIds=[];for(var d=0;d<a.length;d++){var b=a[d];var c=Model.getShapeById(b);if(c.name=="linker"){Designer.painter.renderLinker(c)}}$("#shape_controls").hide();Utils.removeLockers();Utils.removeAnchors();if($("#dock_content_attribute").is(":visible")){$("#tagContent1 :focus").blur()}Designer.events.push("selectChanged");this.hideLinkerCursor();this.hideLinkerControls()},getSelected:function(){var c=[];for(var d=0;d<this.selectIds.length;d++){var b=this.selectIds[d];if(!Utils.isLocked(b)){var a=Model.getShapeById(b);c.push(a)}}return c},getSelectedIds:function(){var b=[];for(var c=0;c<this.selectIds.length;c++){var a=this.selectIds[c];if(!Utils.isLocked(a)){b.push(a)}}return b},getSelectedLinkers:function(){var c=[];for(var d=0;d<this.selectIds.length;d++){var b=this.selectIds[d];if(!Utils.isLocked(b)){var a=Model.getShapeById(b);if(a.name=="linker"){c.push(a)}}}return c},getSelectedLinkerIds:function(){var c=[];for(var d=0;d<this.selectIds.length;d++){var b=this.selectIds[d];if(!Utils.isLocked(b)){var a=Model.getShapeById(b);if(a.name=="linker"){c.push(b)}}}return c},getSelectedShapeIds:function(){var c=[];for(var d=0;d<this.selectIds.length;d++){var b=this.selectIds[d];if(!Utils.isLocked(b)){var a=Model.getShapeById(b);if(a.name!="linker"){c.push(b)}}}return c},getSelectedLockedIds:function(){var b=[];for(var c=0;c<this.selectIds.length;c++){var a=this.selectIds[c];if(Utils.isLocked(a)){b.push(a)}}return b},getSelectedGroups:function(){var c=[];for(var a=0;a<this.selectIds.length;a++){var b=this.selectIds[a];var d=Model.getShapeById(b);if(d.group&&c.indexOf(d.group)<0){c.push(d.group)}}return c},isSelected:function(a){if(this.selectIds.indexOf(a)>=0&&!this.isLocked(a)){return true}return false},isLocked:function(a){if(Model.getShapeById(a).locked){return true}else{return false}},linkerCursorTimer:null,showLinkerCursor:function(){this.hideLinkerCursor();var r=Utils.getSelectedIds();if(r.length==1){var e=Model.getShapeById(r[0]);if(e.name!="linker"){var k=Model.linkerMap.map[e.id];if(k&&k.length){var s=[];for(var c=0;c<k.length;c++){var M=k[c];var o=Model.getShapeById(M);if(e.id!=o.from.id||!o.to.id){continue}var f=this.getLinkerLength(o).toScale();var t=[];if(o.linkerType=="broken"){t.push({x:o.from.x.toScale(),y:o.from.y.toScale(),t:0});for(var u=0;u<o.points.length;u++){var q=o.points[u];t.push({x:q.x.toScale(),y:q.y.toScale()})}t.push({x:o.to.x.toScale(),y:o.to.y.toScale()});var l=0;for(var u=1;u<t.length;u++){var b=t[u-1];var a=t[u];l+=Utils.measureDistance(b,a);a.t=l/f}}var n=Math.floor(f/120)+1;var h=3/f;var v=(Math.ceil(f/120)*120)/f;var g=0;while(g<f){var m={t:g/f,step:h,linker:o,points:t,maxT:v};s.push(m);g+=120}}this.playLinkerCursor(s)}}}},playLinkerCursor:function(b){for(var f=0;f<b.length;f++){var d=b[f];var c=$("<div class='linker_cursor'></div>").appendTo("#designer_canvas");var a=d.linker;var e=(a.lineStyle.lineWidth+2).toScale();if(e<5){e=5}var g=e/2;d.half=g;d.dom=c;c.css({width:e,height:e,"-webkit-border-radius":g,"-moz-border-radius":g,"-ms-border-radius":g,"-o-border-radius":g,"border-radius":g,"z-index":$("#"+a.id).css("z-index")})}this.linkerCursorTimer=setInterval(function(){for(var r=0;r<b.length;r++){var m=b[r];var u=m.linker;if(m.t>=m.maxT){m.t=0;m.dom.show()}var n=m.t;if(u.linkerType=="broken"){for(var s=1;s<m.points.length;s++){var o=m.points[s-1];var l=m.points[s];if(n>=o.t&&n<l.t){var q=(n-o.t)/(l.t-o.t);var i=(1-q)*o.x+q*l.x;var h=(1-q)*o.y+q*l.y;m.dom.css({left:i-m.half,top:h-m.half});break}}}else{if(u.linkerType=="curve"){var p=u.from;var o=u.points[0];var l=u.points[1];var k=u.to;var i=p.x.toScale()*Math.pow((1-n),3)+o.x.toScale()*n*Math.pow((1-n),2)*3+l.x.toScale()*Math.pow(n,2)*(1-n)*3+k.x.toScale()*Math.pow(n,3);var h=p.y.toScale()*Math.pow((1-n),3)+o.y.toScale()*n*Math.pow((1-n),2)*3+l.y.toScale()*Math.pow(n,2)*(1-n)*3+k.y.toScale()*Math.pow(n,3);m.dom.css({left:i-m.half,top:h-m.half})}else{var i=(1-n)*u.from.x.toScale()+n*u.to.x.toScale();var h=(1-n)*u.from.y.toScale()+n*u.to.y.toScale();m.dom.css({left:i-m.half,top:h-m.half})}}m.t+=m.step;if(m.t>=1){m.dom.hide()}}},30)},hideLinkerCursor:function(){if(this.linkerCursorTimer){clearInterval(this.linkerCursorTimer)}$(".linker_cursor").remove()},showLinkerControls:function(){this.hideLinkerControls();var d=Utils.getSelectedIds();var a=null;if(d.length==1){var c=Model.getShapeById(d[0]);if(c.name=="linker"&&c.linkerType=="curve"){a=c}}if(a==null){return}function b(e,w){var o=null;var k=null;if(w=="from"){o=e.from;k=e.points[0]}else{o=e.to;k=e.points[1]}var f=Utils.measureDistance(o,k).toScale()-6;var i={x:(0.5*o.x+0.5*k.x).toScale(),y:(0.5*o.y+0.5*k.y).toScale()};var n=Utils.getAngle(o,k)+Math.PI/2;var l=$("<div class='linker_control_line'></div>").appendTo("#designer_canvas");var h=$("<div class='linker_control_point'></div>").appendTo("#designer_canvas");var m=Math.round(n/(Math.PI*2)*360);var g="rotate("+m+"deg)";l.css({left:i.x,top:i.y-f/2,height:f,"z-index":Model.orderList.length,"-webkit-transform":g,"-ms-transform":g,"-o-transform":g,"-moz-transform":g,transform:g});h.css({left:k.x.toScale()-4,top:k.y.toScale()-4,"z-index":Model.orderList.length});h.attr("ty",w);h.unbind().bind("mousedown",function(p){e=Model.getShapeById(e.id);var q=null;if(w=="from"){q=e.points[0]}else{q=e.points[1]}p.stopPropagation();h.addClass("moving");Designer.op.changeState("changing_curve");$(document).bind("mousemove.change_curve",function(r){var s=Utils.getRelativePos(r.pageX,r.pageY,$("#designer_canvas"));q.x=s.x;q.y=s.y;Designer.painter.renderLinker(e);Model.define.elements[e.id]=e;Utils.showLinkerControls();$(".linker_control_point[ty="+h.attr("ty")+"]").addClass("moving");$(document).unbind("mouseup.changed_curve").bind("mouseup.changed_curve",function(t){Model.update(e);$(document).unbind("mouseup.changed_curve")})});$(document).unbind("mouseup.change_curve").bind("mouseup.change_curve",function(r){$(document).unbind("mouseup.change_curve");$(document).unbind("mousemove.change_curve");$(".linker_control_point").removeClass("moving");Designer.op.resetState()})});return h}b(a,"from");b(a,"to")},hideLinkerControls:function(){$(".linker_control_line").remove();$(".linker_control_point").remove()},showAnchors:function(e){if($(".shape_contour[forshape="+e.id+"]").length>0){return}var b=$("<div class='shape_contour' forshape='"+e.id+"'></div>").appendTo($("#designer_canvas"));b.css({left:e.props.x.toScale(),top:e.props.y.toScale(),"z-index":Model.orderList.length+1});if(!Utils.isSelected(e.id)){b.addClass("hovered_contour")}var k=Designer.config.anchorSize-2;var i={"border-color":Designer.config.anchorColor,"border-radius":Designer.config.anchorSize/2,width:k,height:k};var h=e.getAnchors();var d={x:e.props.w/2,y:e.props.h/2};var a=e.props.angle;for(var f=0;f<h.length;f++){var c=h[f];var g=$("<div class='shape_anchor'></div>").appendTo(b);var w=this.getRotated(d,c,a);i.left=w.x.toScale()-Designer.config.anchorSize/2;i.top=w.y.toScale()-Designer.config.anchorSize/2;g.css(i)}},hideAnchors:function(){$(".hovered_contour").remove()},removeAnchors:function(){$(".shape_contour").remove()},showLockers:function(w){var f=$("#"+w.id);var b=f.position();function k(){var n=$("<canvas class='shape_locker' width='10px' height='10px'></canvas>").appendTo(f);var m=n[0].getContext("2d");m.strokeStyle="#777";m.lineWidth=1;var l=9;m.beginPath();m.moveTo(2,2);m.lineTo(l,l);m.moveTo(2,l);m.lineTo(l,2);m.stroke();return n}function a(l){var m=k();m.css({left:l.x.toScale()-b.left-5,top:l.y.toScale()-b.top-5})}if(w.name!="linker"){var i=w.props;var h={x:i.x+i.w/2,y:i.y+i.h/2};var g=this.getRotated(h,{x:i.x,y:i.y},w.props.angle);a(g);var e=this.getRotated(h,{x:i.x+i.w,y:i.y},w.props.angle);a(e);var d=this.getRotated(h,{x:i.x+i.w,y:i.y+i.h},w.props.angle);a(d);var c=this.getRotated(h,{x:i.x,y:i.y+i.h},w.props.angle);a(c)}else{a(w.from);a(w.to)}},removeLockers:function(){$(".shape_locker").remove()},measureDistance:function(b,a){var d=a.y-b.y;var c=a.x-b.x;return Math.sqrt(Math.pow(d,2)+Math.pow(c,2))},removeFromArray:function(a,c){var b=a.indexOf(c);if(b>=0){a.splice(b,1)}return a},addToArray:function(a,c){var b=a.indexOf(c);if(b<0){a.push(c)}return a},mergeArray:function(d,c){for(var a=0;a<c.length;a++){var b=c[a];if(d.indexOf(b)<0){d.push(b)}}return d},getCirclePoints:function(d,c,h){var b=Math.PI/18;var g=[];for(var f=0;f<36;f++){var e=b*f;var a={x:d-Math.cos(e)*h,y:c-Math.sin(e)*h,angle:e};g.push(a)}return g},getPointAngle:function(b,g,e,t){var l=$("#"+b).position();var k=Utils.getShapeContext(b);g=g.toScale()-l.left;e=e.toScale()-l.top;var I=this.getCirclePoints(g,e,t);var s=I.length;var q=false;for(var m=0;m<s;m++){var a=I[m];if(k.isPointInPath(a.x,a.y)){a.inPath=true;q=true}else{a.inPath=false}}if(q==false){return null}var c=null;var h=null;for(var m=0;m<s;m++){var a=I[m];if(!a.inPath){if(c==null){var f=I[(m-1+s)%s];if(f.inPath){c=a.angle}}if(h==null){var o=I[(m+1+s)%s];if(o.inPath){h=a.angle}}if(c!=null&&h!=null){break}}}var n=(Math.PI*2+h-c)%(Math.PI*2)/2;var d=(c+n)%(Math.PI*2);return d},getAngleDir:function(b){var a=Math.PI;if(b>=a/4&&b<a/4*3){return 1}else{if(b>=a/4*3&&b<a/4*5){return 2}else{if(b>=a/4*5&&b<a/4*7){return 3}else{return 4}}}},getLinkerPoints:function(w){var m=[];if(w.linkerType=="broken"){var r=Math.PI;var s=w.from;var ab=w.to;var i=Math.abs(ab.x-s.x);var u=Math.abs(ab.y-s.y);var q=30;if(s.id!=null&&ab.id!=null){var D=this.getAngleDir(s.angle);var C=this.getAngleDir(ab.angle);var c,e,h;if(D==1&&C==1){if(s.y<ab.y){c=s;e=ab;h=false}else{c=ab;e=s;h=true}var d=Model.getShapeById(c.id).props;var A=Model.getShapeById(e.id).props;if(e.x>=d.x-q&&e.x<=d.x+d.w+q){var l;if(e.x<d.x+d.w/2){l=d.x-q}else{l=d.x+d.w+q}var k=c.y-q;m.push({x:c.x,y:k});m.push({x:l,y:k});k=e.y-q;m.push({x:l,y:k});m.push({x:e.x,y:k})}else{var k=c.y-q;m.push({x:c.x,y:k});m.push({x:e.x,y:k})}}else{if(D==3&&C==3){if(s.y>ab.y){c=s;e=ab;h=false}else{c=ab;e=s;h=true}var d=Model.getShapeById(c.id).props;var A=Model.getShapeById(e.id).props;if(e.x>=d.x-q&&e.x<=d.x+d.w+q){var k=c.y+q;var l;if(e.x<d.x+d.w/2){l=d.x-q}else{l=d.x+d.w+q}m.push({x:c.x,y:k});m.push({x:l,y:k});k=e.y+q;m.push({x:l,y:k});m.push({x:e.x,y:k})}else{var k=c.y+q;m.push({x:c.x,y:k});m.push({x:e.x,y:k})}}else{if(D==2&&C==2){if(s.x>ab.x){c=s;e=ab;h=false}else{c=ab;e=s;h=true}var d=Model.getShapeById(c.id).props;var A=Model.getShapeById(e.id).props;if(e.y>=d.y-q&&e.y<=d.y+d.h+q){var l=c.x+q;var k;if(e.y<d.y+d.h/2){k=d.y-q}else{k=d.y+d.h+q}m.push({x:l,y:c.y});m.push({x:l,y:k});l=e.x+q;m.push({x:l,y:k});m.push({x:l,y:e.y})}else{var l=c.x+q;m.push({x:l,y:c.y});m.push({x:l,y:e.y})}}else{if(D==4&&C==4){if(s.x<ab.x){c=s;e=ab;h=false}else{c=ab;e=s;h=true}var d=Model.getShapeById(c.id).props;var A=Model.getShapeById(e.id).props;if(e.y>=d.y-q&&e.y<=d.y+d.h+q){var l=c.x-q;var k;if(e.y<d.y+d.h/2){k=d.y-q}else{k=d.y+d.h+q}m.push({x:l,y:c.y});m.push({x:l,y:k});l=e.x-q;m.push({x:l,y:k});m.push({x:l,y:e.y})}else{var l=c.x-q;m.push({x:l,y:c.y});m.push({x:l,y:e.y})}}else{if((D==1&&C==3)||(D==3&&C==1)){if(D==1){c=s;e=ab;h=false}else{c=ab;e=s;h=true}var d=Model.getShapeById(c.id).props;var A=Model.getShapeById(e.id).props;if(e.y<=c.y){var k=c.y-u/2;m.push({x:c.x,y:k});m.push({x:e.x,y:k})}else{var B=d.x+d.w;var f=A.x+A.w;var k=c.y-q;var l;if(f>=d.x&&A.x<=B){var t=d.x+d.w/2;if(e.x<t){l=d.x<A.x?d.x-q:A.x-q}else{l=B>f?B+q:f+q}if(A.y<c.y){k=A.y-q}}else{if(e.x<c.x){l=f+(d.x-f)/2}else{l=B+(A.x-B)/2}}m.push({x:c.x,y:k});m.push({x:l,y:k});k=e.y+q;m.push({x:l,y:k});m.push({x:e.x,y:k})}}else{if((D==2&&C==4)||(D==4&&C==2)){if(D==2){c=s;e=ab;h=false}else{c=ab;e=s;h=true}var d=Model.getShapeById(c.id).props;var A=Model.getShapeById(e.id).props;if(e.x>c.x){var l=c.x+i/2;m.push({x:l,y:c.y});m.push({x:l,y:e.y})}else{var z=d.y+d.h;var n=A.y+A.h;var l=c.x+q;var k;if(n>=d.y&&A.y<=z){var t=d.y+d.h/2;if(e.y<t){k=d.y<A.y?d.y-q:A.y-q}else{k=z>n?z+q:n+q}if(A.x+A.w>c.x){l=A.x+A.w+q}}else{if(e.y<c.y){k=n+(d.y-n)/2}else{k=z+(A.y-z)/2}}m.push({x:l,y:c.y});m.push({x:l,y:k});l=e.x-q;m.push({x:l,y:k});m.push({x:l,y:e.y})}}else{if((D==1&&C==2)||(D==2&&C==1)){if(D==2){c=s;e=ab;h=false}else{c=ab;e=s;h=true}var d=Model.getShapeById(c.id).props;var A=Model.getShapeById(e.id).props;if(e.x>c.x&&e.y>c.y){m.push({x:e.x,y:c.y})}else{if(e.x>c.x&&A.x>c.x){var l;if(A.x-c.x<q*2){l=c.x+(A.x-c.x)/2}else{l=c.x+q}var k=e.y-q;m.push({x:l,y:c.y});m.push({x:l,y:k});m.push({x:e.x,y:k})}else{if(e.x<=c.x&&e.y>d.y+d.h){var z=d.y+d.h;var l=c.x+q;var k;if(e.y-z<q*2){k=z+(e.y-z)/2}else{k=e.y-q}m.push({x:l,y:c.y});m.push({x:l,y:k});m.push({x:e.x,y:k})}else{var l;var f=A.x+A.w;if(f>c.x){l=f+q}else{l=c.x+q}var k;if(e.y<d.y){k=e.y-q}else{k=d.y-q}m.push({x:l,y:c.y});m.push({x:l,y:k});m.push({x:e.x,y:k})}}}}else{if((D==1&&C==4)||(D==4&&C==1)){if(D==4){c=s;e=ab;h=false}else{c=ab;e=s;h=true}var d=Model.getShapeById(c.id).props;var A=Model.getShapeById(e.id).props;var f=A.x+A.w;if(e.x<c.x&&e.y>c.y){m.push({x:e.x,y:c.y})}else{if(e.x<c.x&&f<c.x){var l;if(c.x-f<q*2){l=f+(c.x-f)/2}else{l=c.x-q}var k=e.y-q;m.push({x:l,y:c.y});m.push({x:l,y:k});m.push({x:e.x,y:k})}else{if(e.x>=c.x&&e.y>d.y+d.h){var z=d.y+d.h;var l=c.x-q;var k;if(e.y-z<q*2){k=z+(e.y-z)/2}else{k=e.y-q}m.push({x:l,y:c.y});m.push({x:l,y:k});m.push({x:e.x,y:k})}else{var l;if(A.x<c.x){l=A.x-q}else{l=c.x-q}var k;if(e.y<d.y){k=e.y-q}else{k=d.y-q}m.push({x:l,y:c.y});m.push({x:l,y:k});m.push({x:e.x,y:k})}}}}else{if((D==2&&C==3)||(D==3&&C==2)){if(D==2){c=s;e=ab;h=false}else{c=ab;e=s;h=true}var d=Model.getShapeById(c.id).props;var A=Model.getShapeById(e.id).props;if(e.x>c.x&&e.y<c.y){m.push({x:e.x,y:c.y})}else{if(e.x>c.x&&A.x>c.x){var l;if(A.x-c.x<q*2){l=c.x+(A.x-c.x)/2}else{l=c.x+q}var k=e.y+q;m.push({x:l,y:c.y});m.push({x:l,y:k});m.push({x:e.x,y:k})}else{if(e.x<=c.x&&e.y<d.y){var l=c.x+q;var k;if(d.y-e.y<q*2){k=e.y+(d.y-e.y)/2}else{k=e.y+q}m.push({x:l,y:c.y});m.push({x:l,y:k});m.push({x:e.x,y:k})}else{var l;var f=A.x+A.w;if(f>c.x){l=f+q}else{l=c.x+q}var k;if(e.y>d.y+d.h){k=e.y+q}else{k=d.y+d.h+q}m.push({x:l,y:c.y});m.push({x:l,y:k});m.push({x:e.x,y:k})}}}}else{if((D==3&&C==4)||(D==4&&C==3)){if(D==4){c=s;e=ab;h=false}else{c=ab;e=s;h=true}var d=Model.getShapeById(c.id).props;var A=Model.getShapeById(e.id).props;var f=A.x+A.w;if(e.x<c.x&&e.y<c.y){m.push({x:e.x,y:c.y})}else{if(e.x<c.x&&f<c.x){var l;if(c.x-f<q*2){l=f+(c.x-f)/2}else{l=c.x-q}var k=e.y+q;m.push({x:l,y:c.y});m.push({x:l,y:k});m.push({x:e.x,y:k})}else{if(e.x>=c.x&&e.y<d.y){var l=c.x-q;var k;if(d.y-e.y<q*2){k=e.y+(d.y-e.y)/2}else{k=e.y+q}m.push({x:l,y:c.y});m.push({x:l,y:k});m.push({x:e.x,y:k})}else{var l;if(A.x<c.x){l=A.x-q}else{l=c.x-q}var k;if(e.y>d.y+d.h){k=e.y+q}else{k=d.y+d.h+q}m.push({x:l,y:c.y});m.push({x:l,y:k});m.push({x:e.x,y:k})}}}}}}}}}}}}}if(h){m.reverse()}}else{if(s.id!=null||ab.id!=null){var c,e,h,o;if(s.id!=null){c=s;e=ab;h=false;o=s.angle}else{c=ab;e=s;h=true;o=ab.angle}var a=Model.getShapeById(c.id).props;if(o>=r/4&&o<r/4*3){if(e.y<c.y){if(i>=u){m.push({x:c.x,y:e.y})}else{var t=u/2;m.push({x:c.x,y:c.y-t});m.push({x:e.x,y:c.y-t})}}else{m.push({x:c.x,y:c.y-q});if(i>=u){if(e.x>=a.x-q&&e.x<=a.x+a.w+q){var p=a.x+a.w/2;if(e.x<p){m.push({x:a.x-q,y:c.y-q});m.push({x:a.x-q,y:e.y})}else{m.push({x:a.x+a.w+q,y:c.y-q});m.push({x:a.x+a.w+q,y:e.y})}}else{if(e.x<a.x){m.push({x:e.x+q,y:c.y-q});m.push({x:e.x+q,y:e.y})}else{m.push({x:e.x-q,y:c.y-q});m.push({x:e.x-q,y:e.y})}}}else{if(e.x>=a.x-q&&e.x<=a.x+a.w+q){var p=a.x+a.w/2;if(e.x<p){m.push({x:a.x-q,y:c.y-q});m.push({x:a.x-q,y:e.y-q});m.push({x:e.x,y:e.y-q})}else{m.push({x:a.x+a.w+q,y:c.y-q});m.push({x:a.x+a.w+q,y:e.y-q});m.push({x:e.x,y:e.y-q})}}else{m.push({x:e.x,y:c.y-q})}}}}else{if(o>=r/4*3&&o<r/4*5){if(e.x>c.x){if(i>=u){var t=i/2;m.push({x:c.x+t,y:c.y});m.push({x:c.x+t,y:e.y})}else{m.push({x:e.x,y:c.y})}}else{m.push({x:c.x+q,y:c.y});if(i>=u){if(e.y>=a.y-q&&e.y<=a.y+a.h+q){var p=a.y+a.h/2;if(e.y<p){m.push({x:c.x+q,y:a.y-q});m.push({x:e.x+q,y:a.y-q});m.push({x:e.x+q,y:e.y})}else{m.push({x:c.x+q,y:a.y+a.h+q});m.push({x:e.x+q,y:a.y+a.h+q});m.push({x:e.x+q,y:e.y})}}else{m.push({x:c.x+q,y:e.y})}}else{if(e.y>=a.y-q&&e.y<=a.y+a.h+q){var p=a.y+a.h/2;if(e.y<p){m.push({x:c.x+q,y:a.y-q});m.push({x:e.x,y:a.y-q})}else{m.push({x:c.x+q,y:a.y+a.h+q});m.push({x:e.x,y:a.y+a.h+q})}}else{if(e.y<c.y){m.push({x:c.x+q,y:e.y+q});m.push({x:e.x,y:e.y+q})}else{m.push({x:c.x+q,y:e.y-q});m.push({x:e.x,y:e.y-q})}}}}}else{if(o>=r/4*5&&o<r/4*7){if(e.y>c.y){if(i>=u){m.push({x:c.x,y:e.y})}else{var t=u/2;m.push({x:c.x,y:c.y+t});m.push({x:e.x,y:c.y+t})}}else{m.push({x:c.x,y:c.y+q});if(i>=u){if(e.x>=a.x-q&&e.x<=a.x+a.w+q){var p=a.x+a.w/2;if(e.x<p){m.push({x:a.x-q,y:c.y+q});m.push({x:a.x-q,y:e.y})}else{m.push({x:a.x+a.w+q,y:c.y+q});m.push({x:a.x+a.w+q,y:e.y})}}else{if(e.x<a.x){m.push({x:e.x+q,y:c.y+q});m.push({x:e.x+q,y:e.y})}else{m.push({x:e.x-q,y:c.y+q});m.push({x:e.x-q,y:e.y})}}}else{if(e.x>=a.x-q&&e.x<=a.x+a.w+q){var p=a.x+a.w/2;if(e.x<p){m.push({x:a.x-q,y:c.y+q});m.push({x:a.x-q,y:e.y+q});m.push({x:e.x,y:e.y+q})}else{m.push({x:a.x+a.w+q,y:c.y+q});m.push({x:a.x+a.w+q,y:e.y+q});m.push({x:e.x,y:e.y+q})}}else{m.push({x:e.x,y:c.y+q})}}}}else{if(e.x<c.x){if(i>=u){var t=i/2;m.push({x:c.x-t,y:c.y});m.push({x:c.x-t,y:e.y})}else{m.push({x:e.x,y:c.y})}}else{m.push({x:c.x-q,y:c.y});if(i>=u){if(e.y>=a.y-q&&e.y<=a.y+a.h+q){var p=a.y+a.h/2;if(e.y<p){m.push({x:c.x-q,y:a.y-q});m.push({x:e.x-q,y:a.y-q});m.push({x:e.x-q,y:e.y})}else{m.push({x:c.x-q,y:a.y+a.h+q});m.push({x:e.x-q,y:a.y+a.h+q});m.push({x:e.x-q,y:e.y})}}else{m.push({x:c.x-q,y:e.y})}}else{if(e.y>=a.y-q&&e.y<=a.y+a.h+q){var p=a.y+a.h/2;if(e.y<p){m.push({x:c.x-q,y:a.y-q});m.push({x:e.x,y:a.y-q})}else{m.push({x:c.x-q,y:a.y+a.h+q});m.push({x:e.x,y:a.y+a.h+q})}}else{if(e.y<c.y){m.push({x:c.x-q,y:e.y+q});m.push({x:e.x,y:e.y+q})}else{m.push({x:c.x-q,y:e.y-q});m.push({x:e.x,y:e.y-q})}}}}}}}if(h){m.reverse()}}else{if(i>=u){var t=(ab.x-s.x)/2;m.push({x:s.x+t,y:s.y});m.push({x:s.x+t,y:ab.y})}else{var t=(ab.y-s.y)/2;m.push({x:s.x,y:s.y+t});m.push({x:ab.x,y:s.y+t})}}}}else{if(w.linkerType=="curve"){var s=w.from;var ab=w.to;var b=this.measureDistance(s,ab);var g=b*0.4;function v(F,G){if(F.id!=null){return{x:F.x-g*Math.cos(F.angle),y:F.y-g*Math.sin(F.angle)}}else{var H=Math.abs(F.y-G.y);var E=Math.abs(F.x-G.x);var x=Math.atan(H/E);var y={};if(F.x<=G.x){y.x=F.x+g*Math.cos(x)}else{y.x=F.x-g*Math.cos(x)}if(F.y<=G.y){y.y=F.y+g*Math.sin(x)}else{y.y=F.y-g*Math.sin(x)}return y}}m.push(v(s,ab));m.push(v(ab,s))}}return m},getLinkerLinePoints:function(b){var e=[];if(b.linkerType!="curve"){e.push(b.from);e=e.concat(b.points)}else{var a=0.05;var d=0;while(d<=1){var c={x:(1-d)*(1-d)*(1-d)*b.from.x+3*(1-d)*(1-d)*d*b.points[0].x+3*(1-d)*d*d*b.points[1].x+d*d*d*b.to.x,y:(1-d)*(1-d)*(1-d)*b.from.y+3*(1-d)*(1-d)*d*b.points[0].y+3*(1-d)*d*d*b.points[1].y+d*d*d*b.to.y};e.push(c);d+=a}}e.push(b.to);return e},getLinkerBox:function(g){var s=this.getLinkerLinePoints(g);var d=s[0].x;var c=s[0].y;var b=s[0].x;var a=s[0].y;for(var e=0;e<s.length;e++){var h=s[e];if(h.x<d){d=h.x}else{if(h.x>b){b=h.x}}if(h.y<c){c=h.y}else{if(h.y>a){a=h.y}}}var f={x:d,y:c,w:b-d,h:a-c};return f},getShapeBox:function(b){var c=b.props;var a=b.props.angle;return this.getRotatedBox(c,a)},getRotatedBox:function(c,a,i){if(a==0){return c}else{if(!i){i={x:c.x+c.w/2,y:c.y+c.h/2}}var g=this.getRotated(i,{x:c.x,y:c.y},a);var f=this.getRotated(i,{x:c.x+c.w,y:c.y},a);var e=this.getRotated(i,{x:c.x+c.w,y:c.y+c.h},a);var d=this.getRotated(i,{x:c.x,y:c.y+c.h},a);var b=Math.min(g.x,f.x,e.x,d.x);var k=Math.max(g.x,f.x,e.x,d.x);var w=Math.min(g.y,f.y,e.y,d.y);var h=Math.max(g.y,f.y,e.y,d.y);return{x:b,y:w,w:k-b,h:h-w}}},getRotated:function(g,f,d){var c=this.measureDistance(g,f);if(c==0||d==0){return f}var a=Math.atan(Math.abs(f.x-g.x)/Math.abs(g.y-f.y));if(f.x>=g.x&&f.y>=g.y){a=Math.PI-a}else{if(f.x<=g.x&&f.y>=g.y){a=Math.PI+a}else{if(f.x<=g.x&&f.y<=g.y){a=Math.PI*2-a}}}a=a%(Math.PI*2);var b=(a+d)%(Math.PI*2);var e={x:g.x+Math.sin(b)*c,y:g.y-Math.cos(b)*c};return e},getShapeAnchorInLinker:function(f){var s=f.getAnchors();var h=[];var o={x:f.props.x+f.props.w/2,y:f.props.y+f.props.h/2};for(var k=0;k<s.length;k++){var c=s[k];var e={x:c.x+f.props.x,y:c.y+f.props.y};var n=this.getRotated(o,e,f.props.angle);h.push(n)}var q=[];var l=2;for(var g=Model.orderList.length-1;g>=0;g--){var a=Model.orderList[g].id;var K=Model.getShapeById(a);if(K.name!="linker"){continue}var r=K;var m=null;l=3;for(var k=0;k<h.length;k++){var b=h[k];var d={x:b.x-l,y:b.y-l,w:l*2,h:l*2};if(r.from.id==null&&this.pointInRect(r.from.x,r.from.y,d)){m={linker:r,anchors:[b],type:"from"};break}if(r.to.id==null&&this.pointInRect(r.to.x,r.to.y,d)){m={linker:r,anchors:[b],type:"to"};break}}l=2;if(m==null){for(var k=0;k<h.length;k++){var b=h[k];var p=Utils.pointInLinker(b,r,l);if(p>-1){if(m==null){m={linker:r,anchors:[],type:"line"}}m.anchors.push(b)}}}if(m!=null){q.push(m)}}return q},getEndpointAngle:function(a,c){var e;if(c=="from"){e=a.from}else{e=a.to}var g;if(a.linkerType=="normal"){if(c=="from"){g=a.to}else{g=a.from}}else{if(a.linkerType=="broken"){if(c=="from"){g=a.points[0]}else{g=a.points[a.points.length-1]}}else{var b=12;var f;var d=Utils.measureDistance(a.from,a.to);if(c=="from"){f=b/d}else{f=1-b/d}g={x:(1-f)*(1-f)*(1-f)*a.from.x+3*(1-f)*(1-f)*f*a.points[0].x+3*(1-f)*f*f*a.points[1].x+f*f*f*a.to.x,y:(1-f)*(1-f)*(1-f)*a.from.y+3*(1-f)*(1-f)*f*a.points[0].y+3*(1-f)*f*f*a.points[1].y+f*f*f*a.to.y}}}return this.getAngle(g,e)},getAngle:function(a,b){var c=Math.atan(Math.abs(a.y-b.y)/Math.abs(a.x-b.x));if(b.x<=a.x&&b.y>a.y){c=Math.PI-c}else{if(b.x<a.x&&b.y<=a.y){c=Math.PI+c}else{if(b.x>=a.x&&b.y<a.y){c=Math.PI*2-c}}}return c},getDarkerColor:function(c,h){if(!h){h=13}var f=c.split(",");var a=parseInt(f[0]);var e=parseInt(f[1]);var i=parseInt(f[2]);var d=Math.round(a-a/255*h);if(d<0){d=0}var k=Math.round(e-e/255*h);if(k<0){k=0}var s=Math.round(i-i/255*h);if(s<0){s=0}return d+","+k+","+s},getDarkestColor:function(a){return this.getDarkerColor(a,26)},toScale:function(a){var b={};for(var c in a){b[c]=a[c];if(typeof a[c]=="number"){b[c]=b[c].toScale()}}return b},restoreScale:function(a){var b={};for(var c in a){b[c]=a[c];if(typeof a[c]=="number"){b[c]=b[c].restoreScale()}}return b},getOutlinkers:function(e){var b=[];var d=[];for(var h=0;h<e.length;h++){var f=e[h];if(f!=undefined&&f.name!="linker"){var a=Model.getShapeLinkers(f.id);if(a&&a.length>0){for(var g=0;g<a.length;g++){var c=a[g];if(!this.isSelected(c)&&d.indexOf(c)<0){b.push(Model.getShapeById(c));d.push(c)}}}}}return b},getFamilyShapes:function(e){var d=[];for(var a=0;a<e.length;a++){var f=e[a];if(f.name!="linker"){if(f.parent){var c=Model.getShapeById(f.parent);if(!Utils.isSelected(f.parent)){d.push(c)}var b=this.getChildrenShapes(c);d=d.concat(b)}var g=this.getChildrenShapes(f);d=d.concat(g)}}return d},getChildrenShapes:function(c){var a=[];if(c.children&&c.children.length>0){for(var d=0;d<c.children.length;d++){var b=c.children[d];if(!Utils.isSelected(b)){a.push(Model.getShapeById(b))}}}return a},isFamilyShape:function(b,a){if(b.parent==a.id){return true}else{if(b.id==a.parent){return true}else{if(b.parent&&b.parent==a.parent){return true}}}return false},getContainedShapes:function(g){var f=[];var b=[];for(var c=0;c<g.length;c++){var a=g[c];if(a.name!="linker"&&a.attribute&&a.attribute.container){var d=e(a);f=f.concat(d)}}function e(l){var h=[];for(var n=Model.orderList.length-1;n>=0;n--){var k=Model.orderList[n].id;if(l.id!=k&&!Utils.isSelected(k)&&b.indexOf(k)<0){var m=Model.getShapeById(k);if(!m.attribute||typeof m.attribute.container=="undefined"||m.attribute.container==false){if(!Utils.isFamilyShape(m,l)){var i=Utils.getShapeBox(m);if(Utils.rectInRect(i,l.props)){h.push(m);b.push(k)}}}}}return h}return f},getAttachedShapes:function(c){var a=[];for(var f=0;f<c.length;f++){if(c[f]!=undefined){a.push(c[f].id)}}var g=[];for(var f=0;f<c.length;f++){var h=c[f];if(h!=undefined&&(h.groupName=="task"||h.groupName=="callActivity"||h.groupName=="subProcess")){var b=[];for(var d=Model.orderList.length-1;d>=0;d--){var k=Model.orderList[d].id;var e=Model.getShapeById(k);if(e.attachTo==h.id&&!Utils.isSelected(k)&&a.indexOf(k)<0){b.push(e)}}g=g.concat(b)}}return g},copy:function(a){return $.extend(true,{},a)},rangeChildren:function(D){var A=[];if(D.children&&D.children.length>0){if(D.name=="verticalPool"){var f=[];var l=[];for(var B=0;B<D.children.length;B++){var o=D.children[B];var n=Model.getShapeById(o);if(n.name=="horizontalSeparator"){l.push(n)}else{f.push(n)}}f.sort(function(i,h){return i.props.x-h.props.x});var b=D.props.x;for(var B=0;B<f.length;B++){var n=f[B];if(n.name=="verticalLane"&&n.props.x!=b){var d=Utils.getContainedShapes([n]);var c=Utils.getOutlinkers(d);d=d.concat(c);Designer.op.moveShape(d,{x:(b-n.props.x)*Designer.config.scale,y:0});var k=[];for(var e=0;e<A.length;e++){if(A[e].name=="linker"){k.push(A[e].id)}}for(var e=0;e<d.length;e++){if(k.indexOf(d[e].id)>-1){continue}A.push(d[e])}}n.props.x=b;Designer.painter.renderShape(n);A.push(n);b+=n.props.w}l.sort(function(i,h){return i.props.y-h.props.y});var a=D.props.y+40;for(var B=0;B<l.length;B++){var n=l[B];var g=n.props.y+n.props.h;n.props.w=D.props.w;n.props.y=a;var C=g-a;n.props.h=C;Designer.painter.renderShape(n);A.push(n);a+=C}}else{if(D.name=="horizontalPool"){var f=[];var l=[];for(var B=0;B<D.children.length;B++){var o=D.children[B];var n=Model.getShapeById(o);if(n.name=="verticalSeparator"){l.push(n)}else{f.push(n)}}f.sort(function(i,h){return i.props.y-h.props.y});var a=D.props.y;for(var B=0;B<f.length;B++){var n=f[B];if(n.name=="horizontalLane"&&n.props.y!=a){var d=Utils.getContainedShapes([n]);var c=Utils.getOutlinkers(d);d=d.concat(c);Designer.op.moveShape(d,{x:0,y:(a-n.props.y)*Designer.config.scale});var k=[];for(var e=0;e<A.length;e++){if(A[e].name=="linker"){k.push(A[e].id)}}for(var e=0;e<d.length;e++){if(k.indexOf(d[e].id)>-1){continue}A.push(d[e])}}n.props.y=a;Designer.painter.renderShape(n);A.push(n);a+=n.props.h}l.sort(function(i,h){return i.props.x-h.props.x});var b=D.props.x+40;for(var B=0;B<l.length;B++){var n=l[B];var e=n.props.x+n.props.w;n.props.h=D.props.h;n.props.x=b;var c=e-b;n.props.w=c;Designer.painter.renderShape(n);A.push(n);b+=c}}}}return A},getRelativePos:function(a,d,b){var c=b.offset();if(c==null){c={left:0,top:0}}return{x:a-c.left+b.scrollLeft(),y:d-c.top+b.scrollTop()}},getCollapsedShapes:function(r){var i=[];var s=[];for(var o=0;o<r.length;o++){var n=r[o];if(n.attribute&&n.attribute.collapsed){var l=[];for(var q=Model.orderList.length-1;q>=0;q--){var m=Model.orderList[q].id;var p=Model.getShapeById(m);if(p.attribute&&p.attribute.collapseBy==n.id&&s.indexOf(m)<0){l.push(p)}}i=i.concat(l)}}return i},getCollapsedShapesById:function(h){var g=[];for(var k=Model.orderList.length-1;k>=0;k--){var i=Model.orderList[k].id;var f=Model.getShapeById(i);if(f.attribute&&f.attribute.collapseBy==h){g.push(f)}}return g},getShapeLineStyle:function(d,c){if(c==false||!Model.define.theme||!Model.define.theme.shape){return $.extend({},Schema.shapeDefaults.lineStyle,d)}else{return $.extend({},Schema.shapeDefaults.lineStyle,Model.define.theme.shape.lineStyle,d)}},getLinkerLineStyle:function(d,c){if(c==false||!Model.define.theme||!Model.define.theme.linker){return $.extend({},Schema.linkerDefaults.lineStyle,d)}else{return $.extend({},Schema.linkerDefaults.lineStyle,Model.define.theme.linker.lineStyle,d)}},getShapeFontStyle:function(c,d){if(d==false||!Model.define.theme||!Model.define.theme.shape){return $.extend({},Schema.shapeDefaults.fontStyle,c)}else{return $.extend({},Schema.shapeDefaults.fontStyle,Model.define.theme.shape.fontStyle,c)}},getLinkerFontStyle:function(c,d){if(d==false||!Model.define.theme||!Model.define.theme.linker){return $.extend({},Schema.linkerDefaults.fontStyle,c)}else{return $.extend({},Schema.linkerDefaults.fontStyle,Model.define.theme.linker.fontStyle,c)}},getShapeFillStyle:function(d,c){if(c==false||!Model.define.theme||!Model.define.theme.shape){return $.extend({},Schema.shapeDefaults.fillStyle,d)}else{return $.extend({},Schema.shapeDefaults.fillStyle,Model.define.theme.shape.fillStyle,d)}},containsChinese:function(b){if(escape(b).indexOf("%u")>=0){return true}else{return false}},filterXss:function(b){b=b.toString();b=b.replace(/</g,"&lt;");b=b.replace(/%3C/g,"&lt;");b=b.replace(/>/g,"&gt;");b=b.replace(/%3E/g,"&gt;");b=b.replace(/'/g,"&#39;");b=b.replace(/"/g,"&quot;");return b}};var GradientHelper={createLinearGradient:function(f,i,h){var b=f.props;var c;var e;var d;if(b.w>b.h){c={x:0,y:b.h/2};e={x:b.w,y:b.h/2};d=(h.angle+Math.PI/2)%(Math.PI*2)}else{c={x:b.w/2,y:0};e={x:b.w/2,y:b.h};d=h.angle}if(d!=0){var a={x:b.w/2,y:b.h/2};c=Utils.getRotated(a,c,d);e=Utils.getRotated(a,e,d);if(c.x<0){c.x=0}if(c.x>f.props.w){c.x=f.props.w}if(c.y<0){c.y=0}if(c.y>f.props.h){c.y=f.props.h}if(e.x<0){e.x=0}if(e.x>f.props.w){e.x=f.props.w}if(e.y<0){e.y=0}if(e.y>f.props.h){e.y=f.props.h}}var g=i.createLinearGradient(c.x,c.y,e.x,e.y);g.addColorStop(0,"rgb("+h.beginColor+")");g.addColorStop(1,"rgb("+h.endColor+")");return g},createRadialGradient:function(a,e,f){var d=a.props;var b=d.h;if(d.w<d.h){b=d.w}var c=e.createRadialGradient(d.w/2,d.h/2,10,d.w/2,d.h/2,b*f.radius);c.addColorStop(0,"rgb("+f.beginColor+")");c.addColorStop(1,"rgb("+f.endColor+")");return c},getLighterColor:function(c){var h=60;var f=c.split(",");var a=parseInt(f[0]);var e=parseInt(f[1]);var i=parseInt(f[2]);var d=Math.round(a+(255-a)/255*h);if(d>255){d=255}var k=Math.round(e+(255-e)/255*h);if(k>255){k=255}var s=Math.round(i+(255-i)/255*h);if(s>255){s=255}return d+","+k+","+s},getDarkerColor:function(c){var h=60;var f=c.split(",");var a=parseInt(f[0]);var e=parseInt(f[1]);var i=parseInt(f[2]);var d=Math.round(a-a/255*h);if(d<0){d=0}var k=Math.round(e-e/255*h);if(k<0){k=0}var s=Math.round(i-i/255*h);if(s<0){s=0}return d+","+k+","+s}};var MessageSource={batchSize:0,messages:[],withUndo:true,withMessage:true,withDock:true,undoStack:{stack:[],push:function(b,a){this.stack.push(b);if(typeof a=="undefined"){a=true}if(a){MessageSource.redoStack.stack=[]}Designer.events.push("undoStackChanged",this.stack.length)},pop:function(){var b=this.stack.length;if(b==0){return null}var a=this.stack[b-1];this.stack.splice(b-1,1);MessageSource.redoStack.push(a);Designer.events.push("undoStackChanged",this.stack.length);return a}},redoStack:{stack:[],push:function(a){this.stack.push(a);Designer.events.push("redoStackChanged",this.stack.length)},pop:function(){var b=this.stack.length;if(b==0){return null}var a=this.stack[b-1];this.stack.splice(b-1,1);MessageSource.undoStack.push(a,false);Designer.events.push("redoStackChanged",this.stack.length);return a}},beginBatch:function(){this.batchSize++},commit:function(){this.batchSize--;this.submit()},submit:function(){if(this.batchSize==0&&this.messages.length!=0){if(this.withDock){Dock.update(true)}if(this.withMessage==false){this.messages=[];return}if(this.withUndo){this.undoStack.push(this.messages)}if(chartId!=""){var b=JSON.stringify(this.messages);if(role!="trial"){$("#saving_tip").text("<@i18n resource='diagraming.saving'/>")}var a={action:"command",messages:b,ignore:"messages",name:userName};CLB.send(a,function(){if(role!="trial"){$("#saving_tip").text("<@i18n resource='diagraming.saved'/>")}})}this.messages=[]}},send:function(b,a){this.messages.push({action:b,content:a});this.submit()},receive:function(a){this.doWithoutMessage(function(){MessageSource.executeMessages(a,true);Utils.showLinkerControls();Utils.showLinkerCursor()})},undo:function(){var a=this.undoStack.pop();if(a==null){return}this.doWithoutUndo(function(){MessageSource.beginBatch();for(var d=0;d<a.length;d++){var g=a[d];if(g.action=="create"){Utils.unselect();Model.remove(g.content,false)}else{if(g.action=="update"){var c=g.content.shapes;Model.updateMulti(c);for(var b=0;b<c.length;b++){var f=c[b];Designer.painter.renderShape(f)}var e=Utils.getSelectedIds();Utils.unselect();Utils.selectShape(e,false)}else{if(g.action=="remove"){var c=g.content;Model.addMulti(c);for(var b=0;b<c.length;b++){var f=c[b];Designer.painter.renderShape(f)}}else{if(g.action=="updatePage"){Model.updatePage(g.content.page)}}}}}MessageSource.commit()})},redo:function(){var a=this.redoStack.pop();if(a==null){return}this.doWithoutUndo(function(){MessageSource.executeMessages(a,false)})},executeMessages:function(c,g){MessageSource.beginBatch();for(var d=0;d<c.length;d++){var a=c[d];if(a.action=="create"){var u=a.content;if(g){for(var f=0;f<u.length;f++){var e=u[f];if(e.name!="linker"){Schema.initShapeFunctions(e)}}}Model.addMulti(u);for(var f=0;f<u.length;f++){var e=u[f];Designer.painter.renderShape(e)}Model.build()}else{if(a.action=="update"){var h=a.content.updates;for(var f=0;f<h.length;f++){var b=h[f];if(g&&b.name!="linker"){Schema.initShapeFunctions(b)}Designer.painter.renderShape(b)}Model.updateMulti(h);var k=Utils.getSelectedIds();Utils.unselect();Utils.selectShape(k)}else{if(a.action=="remove"){Utils.unselect();Model.remove(a.content)}else{if(a.action=="updatePage"){Model.updatePage(a.content.update)}}}}}MessageSource.commit()},doWithoutUndo:function(a){this.withUndo=false;a();this.withUndo=true},doWithoutMessage:function(a){this.withMessage=false;a();this.withMessage=true},doWithoutUpdateDock:function(a){this.withDock=false;a();this.withDock=true}};Number.prototype.toScale=function(){return this*Designer.config.scale};Number.prototype.restoreScale=function(){return this/Designer.config.scale};
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.customize.debug.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.customize.debug.js
                                                  new file mode 100644
                                                  index 00000000..ee86ea99
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.customize.debug.js
                                                  @@ -0,0 +1,49 @@
                                                  +/**
                                                  + * 用户二次开发自定义JS
                                                  + */
                                                  +
                                                  +var Customize = {
                                                  +	/**
                                                  +	 * 初始化
                                                  +	 */
                                                  +	init : function() {
                                                  +		Designer.hotkey.init = function() {
                                                  +			$(document).unbind("keydown.hotkey").bind("keydown.hotkey", function(e) {
                                                  +				return;
                                                  +			})
                                                  +		}
                                                  +		Customize.selectShape();
                                                  +	},
                                                  +	/**
                                                  +	 * 选择图形
                                                  +	 */
                                                  +	selectShape:function(){
                                                  +    	$("#designer_canvas").off("mousedown.selectcustomize").on("mousedown.selectcustomize", function(g){
                                                  +	    	if (Designer.op.state != null) {
                                                  +	          return;
                                                  +	        }
                                                  +	        var b = $("#designer_canvas");
                                                  +     		var a = $("#canvas_container");
                                                  +    		Designer.op.destroy();
                                                  +	        var f = Utils.getRelativePos(g.pageX, g.pageY, b);
                                                  +	        var c = Utils.getShapeByPosition(f.x, f.y);
                                                  +	        if (c != null) {
                                                  +	        	if (c.type == "dataAttribute") {
                                                  +	          	} else {
                                                  +	            	if (c.type != "linker") {
                                                  +	            		Utils.unselect();
                                                  +	            		Utils.selectShape(c.shape.id);
                                                  +	            		$("div.group_icon.change_shape_icon").hide();
                                                  +	            		$(".shape_controller").unbind("mousedown");
                                                  +	            		$("#tagContent1 input, #tagContent1 textarea").prop("disabled", true).css({"background-color": "#fff"});
                                                  +	            		$("#dock_content_attribute ul #showMoreAttrUL").hide();
                                                  +	            		$("#tagContent td[onclick]").attr("onclick", "return false;").css({"cursor": "default", "color": "#000"});
                                                  +	            	}
                                                  +	           	}
                                                  +	        } else {
                                                  +	        	Utils.unselect();
                                                  +	        }
                                                  +	        
                                                  +    	});
                                                  +	}
                                                  +};
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.customize.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.customize.js
                                                  new file mode 100644
                                                  index 00000000..9eef735b
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.customize.js
                                                  @@ -0,0 +1 @@
                                                  +var Customize={init:function(){Designer.hotkey.init=function(){$(document).unbind("keydown.hotkey").bind("keydown.hotkey",function(a){return})};Customize.selectShape()},selectShape:function(){$("#designer_canvas").off("mousedown.selectcustomize").on("mousedown.selectcustomize",function(h){if(Designer.op.state!=null){return}var d=$("#designer_canvas");var e=$("#canvas_container");Designer.op.destroy();var i=Utils.getRelativePos(h.pageX,h.pageY,d);var j=Utils.getShapeByPosition(i.x,i.y);if(j!=null){if(j.type=="dataAttribute"){}else{if(j.type!="linker"){Utils.unselect();Utils.selectShape(j.shape.id);$("div.group_icon.change_shape_icon").hide();$(".shape_controller").unbind("mousedown");$("#tagContent1 input, #tagContent1 textarea").prop("disabled",true).css({"background-color":"#fff"});$("#dock_content_attribute ul #showMoreAttrUL").hide();$("#tagContent td[onclick]").attr("onclick","return false;").css({cursor:"default",color:"#000"})}}}else{Utils.unselect()}})}};
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.events.debug.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.events.debug.js
                                                  new file mode 100644
                                                  index 00000000..a828a118
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.events.debug.js
                                                  @@ -0,0 +1,1000 @@
                                                  +Designer.events.addEventListener("initialized", function() {
                                                  +	Designer.open(definition)
                                                  +});
                                                  +Designer.events.addEventListener("create", function(a) {
                                                  +});
                                                  +var demoCreatedTiped = false;
                                                  +Designer.events.addEventListener("created", function(a) {
                                                  +	if (Designer.status == "demo" && !demoCreatedTiped) {
                                                  +		UI.showStartStep("created", $("#" + a.id));
                                                  +		demoCreatedTiped = true
                                                  +	}
                                                  +});
                                                  +Designer.events.addEventListener("linkerCreating", function(a) {
                                                  +});
                                                  +Designer.events.addEventListener("linkerCreated", function(a) {
                                                  +});
                                                  +Designer.events.addEventListener("selectChanged", function(a) {
                                                  +	UI.update();
                                                  +	Dock.update()
                                                  +});
                                                  +Designer.events.addEventListener("clipboardChanged", function(a) {
                                                  +	if (a > 0) {
                                                  +		$("#bar_list_edit").children("li[ac=paste]").menuitem("enable")
                                                  +	} else {
                                                  +		$("#bar_list_edit").children("li[ac=paste]")
                                                  +			.menuitem("disable")
                                                  +	}
                                                  +});
                                                  +Designer.events.addEventListener("undoStackChanged", function(a) {
                                                  +	if (a == 0) {
                                                  +		$("#bar_list_edit").children("li[ac=undo]").menuitem("disable");
                                                  +		$("#bar_undo").button("disable")
                                                  +	} else {
                                                  +		$("#bar_list_edit").children("li[ac=undo]").menuitem("enable");
                                                  +		$("#bar_undo").button("enable")
                                                  +	}
                                                  +});
                                                  +Designer.events.addEventListener("redoStackChanged", function(a) {
                                                  +	if (a == 0) {
                                                  +		$("#bar_list_edit").children("li[ac=redo]").menuitem("disable");
                                                  +		$("#bar_redo").button("disable")
                                                  +	} else {
                                                  +		$("#bar_list_edit").children("li[ac=redo]").menuitem("enable");
                                                  +		$("#bar_redo").button("enable")
                                                  +	}
                                                  +});
                                                  +Designer.events.addEventListener("beforeResize", function(a) {
                                                  +	var c = a.shapes;
                                                  +	var b = a.minSize;
                                                  +	var f = a.dir;
                                                  +	if (c.length == 1) {
                                                  +		var l = c[0];
                                                  +		if (l.name == "verticalPool") {
                                                  +			if (f == "b") {
                                                  +				var n = 0;
                                                  +				for (var j = 0; j < l.children.length; j++) {
                                                  +					var h = l.children[j];
                                                  +					var d = Model.getShapeById(h);
                                                  +					if (d != undefined && d.name == "horizontalSeparator") {
                                                  +						n += d.props.h
                                                  +					}
                                                  +				}
                                                  +				if (n == 0) {
                                                  +					n = 90
                                                  +				} else {
                                                  +					n += 40
                                                  +				}
                                                  +				b.h = n
                                                  +			} else {
                                                  +				if (f == "l" || f == "r") {
                                                  +					var g = 20;
                                                  +					var e = null;
                                                  +					var m = 0;
                                                  +					for (var j = 0; j < l.children.length; j++) {
                                                  +						var h = l.children[j];
                                                  +						var d = Model.getShapeById(h);
                                                  +						if (d.name == "horizontalSeparator") {
                                                  +							m++
                                                  +						} else {
                                                  +							if (d.name == "verticalLane") {
                                                  +								if (e == null
                                                  +									|| (d.props.x < e.props.x && f == "l")
                                                  +									|| (d.props.x > e.props.x && f == "r")) {
                                                  +									e = d
                                                  +								}
                                                  +								g += d.props.w
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +					if (e != null) {
                                                  +						g -= e.props.w
                                                  +					}
                                                  +					if (m > 0) {
                                                  +						g += 20
                                                  +					}
                                                  +					b.w = g
                                                  +				}
                                                  +			}
                                                  +		} else {
                                                  +			if (l.name == "verticalLane" && f == "b") {
                                                  +				var n = 0;
                                                  +				var e = l;
                                                  +				var k = Model.getShapeById(e.parent);
                                                  +				for (var j = 0; j < k.children.length; j++) {
                                                  +					var h = k.children[j];
                                                  +					var d = Model.getShapeById(h);
                                                  +					if (d.name == "horizontalSeparator") {
                                                  +						n += d.props.h
                                                  +					}
                                                  +				}
                                                  +				if (n == 0) {
                                                  +					n = 50
                                                  +				}
                                                  +				b.h = n
                                                  +			} else {
                                                  +				if (l.name == "horizontalPool") {
                                                  +					if (f == "r") {
                                                  +						var g = 0;
                                                  +						for (var j = 0; j < l.children.length; j++) {
                                                  +							var h = l.children[j];
                                                  +							var d = Model.getShapeById(h);
                                                  +							if (d.name == "verticalSeparator") {
                                                  +								g += d.props.w
                                                  +							}
                                                  +						}
                                                  +						if (g == 0) {
                                                  +							g = 90
                                                  +						} else {
                                                  +							g += 40
                                                  +						}
                                                  +						b.w = g
                                                  +					} else {
                                                  +						if (f == "t" || f == "b") {
                                                  +							var n = 20;
                                                  +							var e = null;
                                                  +							var m = 0;
                                                  +							for (var j = 0; j < l.children.length; j++) {
                                                  +								var h = l.children[j];
                                                  +								var d = Model.getShapeById(h);
                                                  +								if (d.name == "verticalSeparator") {
                                                  +									m++
                                                  +								} else {
                                                  +									if (d.name == "horizontalLane") {
                                                  +										if (e == null
                                                  +											|| (d.props.y < e.props.y && f == "t")
                                                  +											|| (d.props.y > e.props.y && f == "b")) {
                                                  +											e = d
                                                  +										}
                                                  +										n += d.props.h
                                                  +									}
                                                  +								}
                                                  +							}
                                                  +							if (e != null) {
                                                  +								n -= e.props.h
                                                  +							}
                                                  +							if (m > 0) {
                                                  +								n += 20
                                                  +							}
                                                  +							b.h = n
                                                  +						}
                                                  +					}
                                                  +				} else {
                                                  +					if (l.name == "horizontalLane" && f == "r") {
                                                  +						var g = 0;
                                                  +						var e = l;
                                                  +						var k = Model.getShapeById(e.parent);
                                                  +						for (var j = 0; j < k.children.length; j++) {
                                                  +							var h = k.children[j];
                                                  +							var d = Model.getShapeById(h);
                                                  +							if (d.name == "verticalSeparator") {
                                                  +								g += d.props.w
                                                  +							}
                                                  +						}
                                                  +						if (g == 0) {
                                                  +							g = 50
                                                  +						}
                                                  +						b.w = g
                                                  +					} else {
                                                  +						if (l.name == "cls" || l.name == "interface"
                                                  +							|| l.name == "package"
                                                  +							|| l.name == "combinedFragment") {
                                                  +							b.h = 50
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +});
                                                  +Designer.events.addEventListener("resizing", function(b) {
                                                  +	var o = b.shape;
                                                  +	var e = b.dir;
                                                  +	var g = b.offset;
                                                  +	var h = [];
                                                  +	if (o.name == "verticalPool") {
                                                  +		if (e == "b") {
                                                  +			for (var j = 0; j < o.children.length; j++) {
                                                  +				var f = o.children[j];
                                                  +				var c = Model.getShapeById(f);
                                                  +				if (c != undefined && (c.name == "verticalLane"
                                                  +					|| c.name == "verticalSeparatorBar")) {
                                                  +					c.props.h = o.props.h - 40;
                                                  +					Designer.painter.renderShape(c);
                                                  +					h.push(c)
                                                  +				}
                                                  +			}
                                                  +		} else {
                                                  +			if (e == "r") {
                                                  +				if (o.children && o.children.length > 0) {
                                                  +					var d = null;
                                                  +					for (var j = 0; j < o.children.length; j++) {
                                                  +						var f = o.children[j];
                                                  +						var c = Model.getShapeById(f);
                                                  +						if (c.name == "horizontalSeparator") {
                                                  +							c.props.w = o.props.w;
                                                  +							Designer.painter.renderShape(c);
                                                  +							h.push(c)
                                                  +						}
                                                  +						if (c.name == "verticalLane"
                                                  +							&& (d == null || c.props.x > d.props.x)) {
                                                  +							d = c
                                                  +						}
                                                  +					}
                                                  +					if (d != null) {
                                                  +						d.props.w += g.w;
                                                  +						Designer.painter.renderShape(d);
                                                  +						h.push(d)
                                                  +					}
                                                  +				}
                                                  +			} else {
                                                  +				if (e == "l") {
                                                  +					if (o.children && o.children.length > 0) {
                                                  +						var d = null;
                                                  +						for (var j = 0; j < o.children.length; j++) {
                                                  +							var f = o.children[j];
                                                  +							var c = Model.getShapeById(f);
                                                  +							if (c.name == "horizontalSeparator") {
                                                  +								c.props.x += g.x;
                                                  +								c.props.w += g.w;
                                                  +								Designer.painter.renderShape(c);
                                                  +								h.push(c)
                                                  +							} else {
                                                  +								if (c.name == "verticalSeparatorBar") {
                                                  +									c.props.x += g.x;
                                                  +									Designer.painter.renderShape(c);
                                                  +									h.push(c)
                                                  +								}
                                                  +							}
                                                  +							if (c.name == "verticalLane"
                                                  +								&& (d == null || c.props.x < d.props.x)) {
                                                  +								d = c
                                                  +							}
                                                  +						}
                                                  +						if (d != null) {
                                                  +							d.props.w += g.w;
                                                  +							d.props.x += g.x;
                                                  +							Designer.painter.renderShape(d);
                                                  +							h.push(d)
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	} else {
                                                  +		if (o.name == "verticalLane") {
                                                  +			var n = Model.getShapeById(o.parent);
                                                  +			h = [n];
                                                  +			n.props.w += g.w;
                                                  +			n.props.h = o.props.h + 40;
                                                  +			n.props.x += g.x;
                                                  +			Designer.painter.renderShape(n);
                                                  +			if (e == "r") {
                                                  +				var p = [];
                                                  +				var l = Model.getPersistenceById(o.id);
                                                  +				for (var j = 0; j < n.children.length; j++) {
                                                  +					var f = n.children[j];
                                                  +					if (f != o.id) {
                                                  +						var a = Model.getPersistenceById(f);
                                                  +						var c = Model.getShapeById(f);
                                                  +						if (c.name == "horizontalSeparator") {
                                                  +							c.props.w += g.w;
                                                  +							Designer.painter.renderShape(c);
                                                  +							h.push(c)
                                                  +						} else {
                                                  +							if (a.props.x >= l.props.x
                                                  +								&& a.name == "verticalLane") {
                                                  +								p.push(c)
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +				if (p.length > 0) {
                                                  +					var m = Utils.getContainedShapes(p);
                                                  +					console.log(';;;;;;;;;;;;')
                                                  +					for (let i = 0; i < m.length; i++) {
                                                  +						console.log(m[i].text);
                                                  +					}
                                                  +					var q = Utils.getOutlinkers(m);
                                                  +					m = m.concat(q);
                                                  +					p = p.concat(m);
                                                  +					Designer.op.moveShape(p, {
                                                  +						x : g.w * Designer.config.scale,
                                                  +						y : 0
                                                  +					});
                                                  +					h = h.concat(p)
                                                  +				}
                                                  +			} else {
                                                  +				if (e == "b") {
                                                  +					for (var j = 0; j < n.children.length; j++) {
                                                  +						var f = n.children[j];
                                                  +						if (f != o.id) {
                                                  +							var c = Model.getShapeById(f);
                                                  +							if (c.name == "verticalLane"
                                                  +								|| c.name == "verticalSeparatorBar") {
                                                  +								c.props.h = o.props.h;
                                                  +								Designer.painter.renderShape(c);
                                                  +								h.push(c)
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +				} else {
                                                  +					if (e == "l") {
                                                  +						var p = [];
                                                  +						var l = Model.getPersistenceById(o.id);
                                                  +						for (var j = 0; j < n.children.length; j++) {
                                                  +							var f = n.children[j];
                                                  +							if (f != o.id) {
                                                  +								var a = Model.getPersistenceById(f);
                                                  +								var c = Model.getShapeById(f);
                                                  +								if (c.name == "horizontalSeparator") {
                                                  +									c.props.x += g.x;
                                                  +									c.props.w += g.w;
                                                  +									Designer.painter.renderShape(c);
                                                  +									h.push(c)
                                                  +								} else {
                                                  +									if (c.name == "verticalSeparatorBar") {
                                                  +										c.props.x += g.x;
                                                  +										Designer.painter.renderShape(c);
                                                  +										h.push(c)
                                                  +									} else {
                                                  +										// if (a.props.x <= l.props.x
                                                  +										if ((a.props.x + a.props.w) <= l.props.x
                                                  +											&& a.name == "verticalLane") {
                                                  +											p.push(c)
                                                  +										}
                                                  +									}
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +						if (p.length > 0) {
                                                  +							var m = Utils.getContainedShapes(p);
                                                  +							var q = Utils.getOutlinkers(m);
                                                  +							m = m.concat(q);
                                                  +							p = p.concat(m);
                                                  +							Designer.op.moveShape(p, {
                                                  +								x : g.x * Designer.config.scale,
                                                  +								y : 0
                                                  +							});
                                                  +							h = h.concat(p)
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		} else {
                                                  +			if (o.name == "horizontalSeparator") {
                                                  +				var n = Model.getShapeById(o.parent);
                                                  +				h = [n];
                                                  +				n.props.h += g.h;
                                                  +				Designer.painter.renderShape(n);
                                                  +				var p = [];
                                                  +				for (var j = 0; j < n.children.length; j++) {
                                                  +					var f = n.children[j];
                                                  +					var c = Model.getShapeById(f);
                                                  +					if (f == o.id) {
                                                  +						continue
                                                  +					}
                                                  +					if (c != undefined && c.name != "horizontalSeparator") {
                                                  +						c.props.h += g.h;
                                                  +						Designer.painter.renderShape(c);
                                                  +						h.push(c);
                                                  +						p.push(Utils.copy(c));
                                                  +					} else {
                                                  +						if (c != undefined && c.props.y > o.props.y) {
                                                  +							c.props.y += g.h;
                                                  +							Designer.painter.renderShape(c);
                                                  +							h.push(c);
                                                  +							p.push(Utils.copy(c));
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +				var m = Utils.getContainedShapes(p);// 泳道
                                                  +				var m2 = [];
                                                  +				var m3 = [];
                                                  +				var oo = Model.getPersistenceById(o.id);
                                                  +				// console.log('oo ' + oo.text + JSON.stringify(oo.props));
                                                  +				console.log('o ' + o.text + JSON.stringify(o.props));
                                                  +				for (var i = 0; i < m.length; i++) {
                                                  +					var s = m[i];
                                                  +					if (s != undefined) {
                                                  +						if ((s.props.x >= o.props.x || (s.props.x + s.props.w) <= o.props.x)) {
                                                  +							if (s.props.y > (o.props.y + o.props.h)) {
                                                  +								console.log('m2 ' + s.text);
                                                  +								// s.props.y += g.h;
                                                  +								Designer.painter.renderShape(s);
                                                  +								m2.push(s);
                                                  +							} else if (s.props.y == (o.props.y + o.props.h)) {
                                                  +								// s.props.y = o.props.y + o.props.h;
                                                  +								console.log('m3 ' + s.text);
                                                  +								Designer.painter.renderShape(s);
                                                  +								m3.push(s);
                                                  +							} else if (s.props.y == (o.props.y + o.props.h - g.h)) {
                                                  +								// s.props.y = o.props.y + o.props.h;
                                                  +								console.log('m4 ' + s.text);
                                                  +								Designer.painter.renderShape(s);
                                                  +								m3.push(s);
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +				if (m2.length > 0) {
                                                  +					var q2 = Utils.getOutlinkers(m2);
                                                  +					m2 = m2.concat(q2);
                                                  +					Designer.op.moveShape(m2, {
                                                  +						x : 0,
                                                  +						y : g.h * Designer.config.scale
                                                  +					});
                                                  +					m = m.concat(m2);
                                                  +				}
                                                  +				if (m3.length > 0) {
                                                  +					var q3 = Utils.getOutlinkers(m3);
                                                  +					m3 = m3.concat(q3);
                                                  +					Designer.op.moveShape(m3, {
                                                  +						x : 0,
                                                  +						y : ((o.props.y + o.props.h) - m3[0].props.y) * Designer.config.scale
                                                  +					});
                                                  +					m = m.concat(m3);
                                                  +				}
                                                  +
                                                  +
                                                  +
                                                  +
                                                  +				// m = m2;
                                                  +				// var q = Utils.getOutlinkers(m);// 连线
                                                  +				// m = m.concat(q);
                                                  +				// Designer.op.moveShape(m, {
                                                  +				//     x : 0,
                                                  +				//     y : g.h * Designer.config.scale
                                                  +				// });
                                                  +
                                                  +				p = p.concat(m);
                                                  +
                                                  +				// h = h.concat(p);
                                                  +				h = p;
                                                  +				h.push(n);
                                                  +
                                                  +
                                                  +
                                                  +
                                                  +			} else {
                                                  +				if (o.name == "horizontalPool") {
                                                  +					if (e == "r") {
                                                  +						for (var j = 0; j < o.children.length; j++) {
                                                  +							var f = o.children[j];
                                                  +							var c = Model.getShapeById(f);
                                                  +							if (c.name == "horizontalLane"
                                                  +								|| c.name == "horizontalSeparatorBar") {
                                                  +								c.props.w = o.props.w - 40;
                                                  +								Designer.painter.renderShape(c);
                                                  +								h.push(c)
                                                  +							}
                                                  +						}
                                                  +					} else {
                                                  +						if (e == "b") {
                                                  +							if (o.children && o.children.length > 0) {
                                                  +								var d = null;
                                                  +								for (var j = 0; j < o.children.length; j++) {
                                                  +									var f = o.children[j];
                                                  +									var c = Model.getShapeById(f);
                                                  +									if (c.name == "verticalSeparator") {
                                                  +										c.props.h = o.props.h;
                                                  +										Designer.painter.renderShape(c);
                                                  +										h.push(c)
                                                  +									}
                                                  +									if (c.name == "horizontalLane"
                                                  +										&& (d == null || c.props.y > d.props.y)) {
                                                  +										d = c
                                                  +									}
                                                  +								}
                                                  +								if (d != null) {
                                                  +									d.props.h += g.h;
                                                  +									Designer.painter.renderShape(d);
                                                  +									h.push(d)
                                                  +								}
                                                  +							}
                                                  +						} else {
                                                  +							if (e == "t") {
                                                  +								if (o.children && o.children.length > 0) {
                                                  +									var d = null;
                                                  +									for (var j = 0; j < o.children.length; j++) {
                                                  +										var f = o.children[j];
                                                  +										var c = Model.getShapeById(f);
                                                  +										if (c.name == "verticalSeparator") {
                                                  +											c.props.y += g.y;
                                                  +											c.props.h += g.h;
                                                  +											Designer.painter.renderShape(c);
                                                  +											h.push(c)
                                                  +										} else {
                                                  +											if (c.name == "horizontalSeparatorBar") {
                                                  +												c.props.y += g.y;
                                                  +												Designer.painter.renderShape(c);
                                                  +												h.push(c)
                                                  +											}
                                                  +										}
                                                  +										if (c.name == "horizontalLane"
                                                  +											&& (d == null || c.props.y < d.props.y)) {
                                                  +											d = c
                                                  +										}
                                                  +									}
                                                  +									if (d != null) {
                                                  +										d.props.h += g.h;
                                                  +										d.props.y += g.y;
                                                  +										Designer.painter.renderShape(d);
                                                  +										h.push(d)
                                                  +									}
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +				} else {
                                                  +					if (o.name == "horizontalLane") {
                                                  +						var n = Model.getShapeById(o.parent);
                                                  +						h = [n];
                                                  +						n.props.h += g.h;
                                                  +						n.props.w += g.w;
                                                  +						n.props.y += g.y;
                                                  +						Designer.painter.renderShape(n);
                                                  +						if (e == "r") {
                                                  +							for (var j = 0; j < n.children.length; j++) {
                                                  +								var f = n.children[j];
                                                  +								if (f != o.id) {
                                                  +									var c = Model.getShapeById(f);
                                                  +									if (c.name == "horizontalLane"
                                                  +										|| c.name == "horizontalSeparatorBar") {
                                                  +										c.props.w = o.props.w;
                                                  +										Designer.painter.renderShape(c);
                                                  +										h.push(c)
                                                  +									}
                                                  +								}
                                                  +							}
                                                  +						} else {
                                                  +							if (e == "b") {
                                                  +								var p = [];
                                                  +								var l = Model.getPersistenceById(o.id);
                                                  +								for (var j = 0; j < n.children.length; j++) {
                                                  +									var f = n.children[j];
                                                  +									if (f != o.id) {
                                                  +										var a = Model.getPersistenceById(f);
                                                  +										var c = Model.getShapeById(f);
                                                  +										if (c.name == "verticalSeparator") {
                                                  +											c.props.h += g.h;
                                                  +											Designer.painter.renderShape(c);
                                                  +											h.push(c)
                                                  +										} else {
                                                  +											if (a.props.y >= l.props.y
                                                  +												&& a.name == "horizontalLane") {
                                                  +												p.push(c)
                                                  +											}
                                                  +										}
                                                  +									}
                                                  +								}
                                                  +								if (p.length > 0) {
                                                  +									var m = Utils.getContainedShapes(p);
                                                  +									var q = Utils.getOutlinkers(m);
                                                  +									m = m.concat(q);
                                                  +									p = p.concat(m);
                                                  +									Designer.op.moveShape(p, {
                                                  +										x : 0,
                                                  +										y : g.h * Designer.config.scale
                                                  +									});
                                                  +									h = h.concat(p)
                                                  +								}
                                                  +							} else {
                                                  +								if (e == "t") {
                                                  +									var p = [];
                                                  +									var l = Model.getPersistenceById(o.id);
                                                  +									for (var j = 0; j < n.children.length; j++) {
                                                  +										var f = n.children[j];
                                                  +										if (f != o.id) {
                                                  +											var a = Model.getPersistenceById(f);
                                                  +											var c = Model.getShapeById(f);
                                                  +											if (c.name == "verticalSeparator") {
                                                  +												c.props.y += g.y;
                                                  +												c.props.h += g.h;
                                                  +												Designer.painter.renderShape(c);
                                                  +												h.push(c)
                                                  +											} else {
                                                  +												if (c.name == "horizontalSeparatorBar") {
                                                  +													c.props.y += g.y;
                                                  +													Designer.painter
                                                  +														.renderShape(c);
                                                  +													h.push(c)
                                                  +												} else {
                                                  +													// if (a.props.y <= l.props.y
                                                  +													if ((a.props.y + a.props.h) <= l.props.y
                                                  +														&& a.name == "horizontalLane") {
                                                  +														p.push(c)
                                                  +													}
                                                  +												}
                                                  +											}
                                                  +										}
                                                  +									}
                                                  +									if (p.length > 0) {
                                                  +										var m = Utils.getContainedShapes(p);
                                                  +										var q = Utils.getOutlinkers(m);
                                                  +										m = m.concat(q);
                                                  +										p = p.concat(m);
                                                  +										Designer.op.moveShape(p, {
                                                  +											x : 0,
                                                  +											y : g.y * Designer.config.scale
                                                  +										});
                                                  +										h = h.concat(p)
                                                  +									}
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +					} else {
                                                  +						if (o.name == "verticalSeparator") {
                                                  +							var n = Model.getShapeById(o.parent);
                                                  +							h = [n];
                                                  +							n.props.w += g.w;
                                                  +							Designer.painter.renderShape(n);
                                                  +							for (var j = 0; j < n.children.length; j++) {
                                                  +								var f = n.children[j];
                                                  +								var c = Model.getShapeById(f);
                                                  +								if (f == o.id) {
                                                  +									continue
                                                  +								}
                                                  +								if (c.name != "verticalSeparator") {
                                                  +									c.props.w += g.w;
                                                  +									Designer.painter.renderShape(c);
                                                  +									h.push(c)
                                                  +								} else {
                                                  +									if (c.props.x > o.props.x) {
                                                  +										c.props.x += g.w;
                                                  +										Designer.painter.renderShape(c);
                                                  +										h.push(c)
                                                  +									}
                                                  +								}
                                                  +							}
                                                  +						} else {
                                                  +							if (o.name == "choreographyTask"
                                                  +								|| o.name == "subChoreography"
                                                  +								|| o.name == "callChoreographyGlobal"
                                                  +								|| o.name == "callChoreography") {
                                                  +								for (var j = 0; j < o.children.length; j++) {
                                                  +									var f = o.children[j];
                                                  +									var c = Model.getShapeById(f);
                                                  +									c.props.x = o.props.x;
                                                  +									c.props.w = o.props.w;
                                                  +									if (c.name == "participantA"
                                                  +										|| c.name == "callParticipantA") {
                                                  +										if (e.indexOf("t") >= 0) {
                                                  +											c.props.y += g.y
                                                  +										}
                                                  +									}
                                                  +									if (c.name == "participantB"
                                                  +										|| c.name == "callParticipantB") {
                                                  +										if (e.indexOf("b") >= 0) {
                                                  +											c.props.y += g.h
                                                  +										}
                                                  +									}
                                                  +									Designer.painter.renderShape(c);
                                                  +									h.push(c)
                                                  +								}
                                                  +							} else {
                                                  +								if (o.name == "cls") {
                                                  +									var k = o.props.h / 2 - 15;
                                                  +									for (var j = 0; j < o.children.length; j++) {
                                                  +										var f = o.children[j];
                                                  +										var c = Model.getShapeById(f);
                                                  +										if (c.name == "classAttribute") {
                                                  +											c.props.y = o.props.y + 30
                                                  +										} else {
                                                  +											c.props.y = o.props.y + k + 30
                                                  +										}
                                                  +										c.props.x = o.props.x;
                                                  +										c.props.w = o.props.w;
                                                  +										c.props.h = k;
                                                  +										Designer.painter.renderShape(c);
                                                  +										h.push(c)
                                                  +									}
                                                  +								} else {
                                                  +									if (o.name == "interface") {
                                                  +										for (var j = 0; j < o.children.length; j++) {
                                                  +											var f = o.children[j];
                                                  +											var c = Model.getShapeById(f);
                                                  +											c.props.x = o.props.x;
                                                  +											c.props.y = o.props.y + 30;
                                                  +											c.props.w = o.props.w;
                                                  +											c.props.h = o.props.h - 30;
                                                  +											Designer.painter.renderShape(c);
                                                  +											h.push(c)
                                                  +										}
                                                  +									} else {
                                                  +										if (o.name == "package") {
                                                  +											for (var j = 0; j < o.children.length; j++) {
                                                  +												var f = o.children[j];
                                                  +												var c = Model.getShapeById(f);
                                                  +												c.props.x = o.props.x;
                                                  +												c.props.y = o.props.y + 25;
                                                  +												c.props.w = o.props.w;
                                                  +												c.props.h = o.props.h - 25;
                                                  +												Designer.painter.renderShape(c);
                                                  +												h.push(c)
                                                  +											}
                                                  +										} else {
                                                  +											if (o.name == "combinedFragment") {
                                                  +												for (var j = 0; j < o.children.length; j++) {
                                                  +													var f = o.children[j];
                                                  +													var c = Model
                                                  +														.getShapeById(f);
                                                  +													c.props.x = o.props.x;
                                                  +													c.props.y = o.props.y;
                                                  +													c.props.w = o.props.w * 0.3
                                                  +														+ 8;
                                                  +													Designer.painter
                                                  +														.renderShape(c);
                                                  +													h.push(c)
                                                  +												}
                                                  +											}
                                                  +										}
                                                  +									}
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	return h
                                                  +});
                                                  +Designer.events.addEventListener("beforeRemove", function(c) {
                                                  +	var n = {};
                                                  +	for (var g = 0; g < c.length; g++) {
                                                  +		var k = c[g];
                                                  +		n[k.id] = k
                                                  +	}
                                                  +	var a = [];
                                                  +	for (var g = 0; g < c.length; g++) {
                                                  +		var k = c[g];
                                                  +		if (k.name == "verticalSeparatorBar" && !n[k.parent]
                                                  +			&& a.indexOf(k.id) < 0) {
                                                  +			delete n[k.id]
                                                  +		} else {
                                                  +			if (k.name == "horizontalSeparatorBar" && !n[k.parent]
                                                  +				&& a.indexOf(k.id) < 0) {
                                                  +				delete n[k.id]
                                                  +			} else {
                                                  +				if (k.name == "horizontalSeparator") {
                                                  +					var m = Model.getShapeById(k.parent);
                                                  +					var h = null;
                                                  +					var l = 0;
                                                  +					for (var f = 0; f < m.children.length; f++) {
                                                  +						var e = m.children[f];
                                                  +						var d = Model.getShapeById(e);
                                                  +						if (d.name == "horizontalSeparator" && !n[e]) {
                                                  +							l += 1
                                                  +						} else {
                                                  +							if (d.name == "verticalSeparatorBar") {
                                                  +								h = d
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +					if (l == 0 && h != null) {
                                                  +						n[h.id] = h;
                                                  +						if (a.indexOf(h.id) < 0) {
                                                  +							a.push(h.id)
                                                  +						}
                                                  +					}
                                                  +				} else {
                                                  +					if (k.name == "verticalSeparator") {
                                                  +						var m = Model.getShapeById(k.parent);
                                                  +						var h = null;
                                                  +						var l = 0;
                                                  +						for (var f = 0; f < m.children.length; f++) {
                                                  +							var e = m.children[f];
                                                  +							var d = Model.getShapeById(e);
                                                  +							if (d.name == "verticalSeparator" && !n[e]) {
                                                  +								l += 1
                                                  +							} else {
                                                  +								if (d.name == "horizontalSeparatorBar") {
                                                  +									h = d
                                                  +								}
                                                  +							}
                                                  +						}
                                                  +						if (l == 0 && h != null) {
                                                  +							n[h.id] = h;
                                                  +							if (a.indexOf(h.id) < 0) {
                                                  +								a.push(h.id)
                                                  +							}
                                                  +						}
                                                  +					} else {
                                                  +						if (k.name == "classAttribute"
                                                  +							|| k.name == "classOperation"
                                                  +							|| k.name == "interfaceOperation"
                                                  +							|| k.name == "packageAttribute"
                                                  +							|| k.name == "fragmentTitle") {
                                                  +							if (!n[k.parent]) {
                                                  +								var m = Model.getShapeById(k.parent);
                                                  +								for (var o = 0; o < m.children.length; o++) {
                                                  +									var b = m.children[o];
                                                  +									if (!n[b]) {
                                                  +										n[b] = Model.getShapeById(b)
                                                  +									}
                                                  +								}
                                                  +								n[k.parent] = Model
                                                  +									.getShapeById(k.parent)
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	c = [];
                                                  +	for (var b in n) {
                                                  +		c.push(n[b])
                                                  +	}
                                                  +	return c
                                                  +});
                                                  +Designer.events.addEventListener("removed", function(b) {
                                                  +	var c = b.shapes;
                                                  +	var m = b.range;
                                                  +	var s = b.changedIds;
                                                  +	var g = [];
                                                  +	var r = [];
                                                  +	for (var j = 0; j < c.length; j++) {
                                                  +		var o = c[j];
                                                  +		if (o.name == "verticalLane" && m.indexOf(o.parent) < 0
                                                  +			&& r.indexOf(o.parent) < 0) {
                                                  +			r.push(o.parent)
                                                  +		} else {
                                                  +			if (o.name == "horizontalLane" && m.indexOf(o.parent) < 0
                                                  +				&& r.indexOf(o.parent) < 0) {
                                                  +				r.push(o.parent)
                                                  +			} else {
                                                  +				if (o.name == "verticalSeparatorBar" && m.indexOf(o.parent) < 0) {
                                                  +					var q = Model.getShapeById(o.parent);
                                                  +					q.props.w -= o.props.w;
                                                  +					q.props.x += o.props.w;
                                                  +					Designer.painter.renderShape(q);
                                                  +					if (s.indexOf(o.parent) < 0) {
                                                  +						s.push(o.parent);
                                                  +						g.push(q)
                                                  +					}
                                                  +				} else {
                                                  +					if (o.name == "horizontalSeparatorBar"
                                                  +						&& m.indexOf(o.parent) < 0) {
                                                  +						var q = Model.getShapeById(o.parent);
                                                  +						q.props.y += o.props.h;
                                                  +						q.props.h -= o.props.h;
                                                  +						Designer.painter.renderShape(q);
                                                  +						if (s.indexOf(o.parent) < 0) {
                                                  +							s.push(o.parent);
                                                  +							g.push(q)
                                                  +						}
                                                  +					} else {
                                                  +						if (o.name == "horizontalSeparator"
                                                  +							&& m.indexOf(o.parent) < 0
                                                  +							&& r.indexOf(o.parent) < 0) {
                                                  +							r.push(o.parent)
                                                  +						} else {
                                                  +							if (o.name == "verticalSeparator"
                                                  +								&& m.indexOf(o.parent) < 0
                                                  +								&& r.indexOf(o.parent) < 0) {
                                                  +								r.push(o.parent)
                                                  +							}
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	for (var n = 0; n < r.length; n++) {
                                                  +		var l = r[n];
                                                  +		var q = Model.getShapeById(l);
                                                  +		if (q.name == "verticalPool") {
                                                  +			var p = 0;
                                                  +			var e = 0;
                                                  +			for (var j = 0; j < q.children.length; j++) {
                                                  +				var f = q.children[j];
                                                  +				var d = Model.getShapeById(f);
                                                  +				if (d.name == "verticalLane") {
                                                  +					e++;
                                                  +					p += d.props.w
                                                  +				} else {
                                                  +					if (d.name == "verticalSeparatorBar") {
                                                  +						p += d.props.w
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +			if (e > 0) {
                                                  +				q.props.w = p;
                                                  +				Designer.painter.renderShape(q);
                                                  +				if (s.indexOf(l) < 0) {
                                                  +					s.push(l);
                                                  +					g.push(q)
                                                  +				}
                                                  +				var a = Utils.rangeChildren(q);
                                                  +				g = g.concat(a)
                                                  +			}
                                                  +		} else {
                                                  +			if (q.name == "horizontalPool") {
                                                  +				var k = 0;
                                                  +				var e = 0;
                                                  +				for (var j = 0; j < q.children.length; j++) {
                                                  +					var f = q.children[j];
                                                  +					var d = Model.getShapeById(f);
                                                  +					if (d.name == "horizontalLane") {
                                                  +						e++;
                                                  +						k += d.props.h
                                                  +					} else {
                                                  +						if (d.name == "horizontalSeparatorBar") {
                                                  +							k += d.props.h
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +				if (e > 0) {
                                                  +					q.props.h = k;
                                                  +					Designer.painter.renderShape(q);
                                                  +					if (s.indexOf(l) < 0) {
                                                  +						s.push(l);
                                                  +						g.push(q)
                                                  +					}
                                                  +					var a = Utils.rangeChildren(q);
                                                  +					g = g.concat(a)
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	return g
                                                  +});
                                                  +Designer.events.addEventListener("shapeChanged", function(c) {
                                                  +	var a = c.shape;
                                                  +	var f = c.name;
                                                  +	var e = [];
                                                  +	if ((a.name == "choreographyTask" || a.name == "subChoreography")
                                                  +		&& (f == "callChoreographyGlobal" || f == "callChoreography")) {
                                                  +		for (var b = 0; b < a.children.length; b++) {
                                                  +			var d = a.children[b];
                                                  +			var g = Model.getShapeById(d);
                                                  +			if (g.name == "participantA") {
                                                  +				Model.changeShape(g, "callParticipantA")
                                                  +			} else {
                                                  +				Model.changeShape(g, "callParticipantB")
                                                  +			}
                                                  +			e.push(g)
                                                  +		}
                                                  +	} else {
                                                  +		if ((a.name == "callChoreographyGlobal" || a.name == "callChoreography")
                                                  +			&& (f == "choreographyTask" || f == "subChoreography")) {
                                                  +			for (var b = 0; b < a.children.length; b++) {
                                                  +				var d = a.children[b];
                                                  +				var g = Model.getShapeById(d);
                                                  +				if (g.name == "callParticipantA") {
                                                  +					Model.changeShape(g, "participantA")
                                                  +				} else {
                                                  +					Model.changeShape(g, "participantB")
                                                  +				}
                                                  +				e.push(g)
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	return e
                                                  +});
                                                  +Designer.events.addEventListener("settingFillStyle", function(a) {
                                                  +	var c = {};
                                                  +	for (var d = 0; d < a.length; d++) {
                                                  +		var b = a[d];
                                                  +		c[b.id] = b
                                                  +	}
                                                  +	for (var d = 0; d < a.length; d++) {
                                                  +		var b = a[d];
                                                  +		if (b.name == "classAttribute" || b.name == "classOperation"
                                                  +			|| b.name == "interfaceOperation"
                                                  +			|| b.name == "packageAttribute"
                                                  +			|| b.name == "fragmentTitle") {
                                                  +			delete c[b.id];
                                                  +			if (!c[b.parent]) {
                                                  +				c[b.parent] = Model.getShapeById(b.parent)
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	a = [];
                                                  +	for (var e in c) {
                                                  +		a.push(c[e])
                                                  +	}
                                                  +	return a
                                                  +});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.events.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.events.js
                                                  new file mode 100644
                                                  index 00000000..67192e29
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.events.js
                                                  @@ -0,0 +1,1000 @@
                                                  +Designer.events.addEventListener("initialized", function() {
                                                  +    Designer.open(definition)
                                                  +});
                                                  +Designer.events.addEventListener("create", function(a) {
                                                  +});
                                                  +var demoCreatedTiped = false;
                                                  +Designer.events.addEventListener("created", function(a) {
                                                  +    if (Designer.status == "demo" && !demoCreatedTiped) {
                                                  +        UI.showStartStep("created", $("#" + a.id));
                                                  +        demoCreatedTiped = true
                                                  +    }
                                                  +});
                                                  +Designer.events.addEventListener("linkerCreating", function(a) {
                                                  +});
                                                  +Designer.events.addEventListener("linkerCreated", function(a) {
                                                  +});
                                                  +Designer.events.addEventListener("selectChanged", function(a) {
                                                  +    UI.update();
                                                  +    Dock.update()
                                                  +});
                                                  +Designer.events.addEventListener("clipboardChanged", function(a) {
                                                  +    if (a > 0) {
                                                  +        $("#bar_list_edit").children("li[ac=paste]").menuitem("enable")
                                                  +    } else {
                                                  +        $("#bar_list_edit").children("li[ac=paste]")
                                                  +            .menuitem("disable")
                                                  +    }
                                                  +});
                                                  +Designer.events.addEventListener("undoStackChanged", function(a) {
                                                  +    if (a == 0) {
                                                  +        $("#bar_list_edit").children("li[ac=undo]").menuitem("disable");
                                                  +        $("#bar_undo").button("disable")
                                                  +    } else {
                                                  +        $("#bar_list_edit").children("li[ac=undo]").menuitem("enable");
                                                  +        $("#bar_undo").button("enable")
                                                  +    }
                                                  +});
                                                  +Designer.events.addEventListener("redoStackChanged", function(a) {
                                                  +    if (a == 0) {
                                                  +        $("#bar_list_edit").children("li[ac=redo]").menuitem("disable");
                                                  +        $("#bar_redo").button("disable")
                                                  +    } else {
                                                  +        $("#bar_list_edit").children("li[ac=redo]").menuitem("enable");
                                                  +        $("#bar_redo").button("enable")
                                                  +    }
                                                  +});
                                                  +Designer.events.addEventListener("beforeResize", function(a) {
                                                  +    var c = a.shapes;
                                                  +    var b = a.minSize;
                                                  +    var f = a.dir;
                                                  +    if (c.length == 1) {
                                                  +        var l = c[0];
                                                  +        if (l.name == "verticalPool") {
                                                  +            if (f == "b") {
                                                  +                var n = 0;
                                                  +                for (var j = 0; j < l.children.length; j++) {
                                                  +                    var h = l.children[j];
                                                  +                    var d = Model.getShapeById(h);
                                                  +                    if (d != undefined && d.name == "horizontalSeparator") {
                                                  +                        n += d.props.h
                                                  +                    }
                                                  +                }
                                                  +                if (n == 0) {
                                                  +                    n = 90
                                                  +                } else {
                                                  +                    n += 40
                                                  +                }
                                                  +                b.h = n
                                                  +            } else {
                                                  +                if (f == "l" || f == "r") {
                                                  +                    var g = 20;
                                                  +                    var e = null;
                                                  +                    var m = 0;
                                                  +                    for (var j = 0; j < l.children.length; j++) {
                                                  +                        var h = l.children[j];
                                                  +                        var d = Model.getShapeById(h);
                                                  +                        if (d.name == "horizontalSeparator") {
                                                  +                            m++
                                                  +                        } else {
                                                  +                            if (d.name == "verticalLane") {
                                                  +                                if (e == null
                                                  +                                    || (d.props.x < e.props.x && f == "l")
                                                  +                                    || (d.props.x > e.props.x && f == "r")) {
                                                  +                                    e = d
                                                  +                                }
                                                  +                                g += d.props.w
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    if (e != null) {
                                                  +                        g -= e.props.w
                                                  +                    }
                                                  +                    if (m > 0) {
                                                  +                        g += 20
                                                  +                    }
                                                  +                    b.w = g
                                                  +                }
                                                  +            }
                                                  +        } else {
                                                  +            if (l.name == "verticalLane" && f == "b") {
                                                  +                var n = 0;
                                                  +                var e = l;
                                                  +                var k = Model.getShapeById(e.parent);
                                                  +                for (var j = 0; j < k.children.length; j++) {
                                                  +                    var h = k.children[j];
                                                  +                    var d = Model.getShapeById(h);
                                                  +                    if (d.name == "horizontalSeparator") {
                                                  +                        n += d.props.h
                                                  +                    }
                                                  +                }
                                                  +                if (n == 0) {
                                                  +                    n = 50
                                                  +                }
                                                  +                b.h = n
                                                  +            } else {
                                                  +                if (l.name == "horizontalPool") {
                                                  +                    if (f == "r") {
                                                  +                        var g = 0;
                                                  +                        for (var j = 0; j < l.children.length; j++) {
                                                  +                            var h = l.children[j];
                                                  +                            var d = Model.getShapeById(h);
                                                  +                            if (d.name == "verticalSeparator") {
                                                  +                                g += d.props.w
                                                  +                            }
                                                  +                        }
                                                  +                        if (g == 0) {
                                                  +                            g = 90
                                                  +                        } else {
                                                  +                            g += 40
                                                  +                        }
                                                  +                        b.w = g
                                                  +                    } else {
                                                  +                        if (f == "t" || f == "b") {
                                                  +                            var n = 20;
                                                  +                            var e = null;
                                                  +                            var m = 0;
                                                  +                            for (var j = 0; j < l.children.length; j++) {
                                                  +                                var h = l.children[j];
                                                  +                                var d = Model.getShapeById(h);
                                                  +                                if (d.name == "verticalSeparator") {
                                                  +                                    m++
                                                  +                                } else {
                                                  +                                    if (d.name == "horizontalLane") {
                                                  +                                        if (e == null
                                                  +                                            || (d.props.y < e.props.y && f == "t")
                                                  +                                            || (d.props.y > e.props.y && f == "b")) {
                                                  +                                            e = d
                                                  +                                        }
                                                  +                                        n += d.props.h
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                            if (e != null) {
                                                  +                                n -= e.props.h
                                                  +                            }
                                                  +                            if (m > 0) {
                                                  +                                n += 20
                                                  +                            }
                                                  +                            b.h = n
                                                  +                        }
                                                  +                    }
                                                  +                } else {
                                                  +                    if (l.name == "horizontalLane" && f == "r") {
                                                  +                        var g = 0;
                                                  +                        var e = l;
                                                  +                        var k = Model.getShapeById(e.parent);
                                                  +                        for (var j = 0; j < k.children.length; j++) {
                                                  +                            var h = k.children[j];
                                                  +                            var d = Model.getShapeById(h);
                                                  +                            if (d.name == "verticalSeparator") {
                                                  +                                g += d.props.w
                                                  +                            }
                                                  +                        }
                                                  +                        if (g == 0) {
                                                  +                            g = 50
                                                  +                        }
                                                  +                        b.w = g
                                                  +                    } else {
                                                  +                        if (l.name == "cls" || l.name == "interface"
                                                  +                            || l.name == "package"
                                                  +                            || l.name == "combinedFragment") {
                                                  +                            b.h = 50
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +    }
                                                  +});
                                                  +Designer.events.addEventListener("resizing", function(b) {
                                                  +    var o = b.shape;
                                                  +    var e = b.dir;
                                                  +    var g = b.offset;
                                                  +    var h = [];
                                                  +    if (o.name == "verticalPool") {
                                                  +        if (e == "b") {
                                                  +            for (var j = 0; j < o.children.length; j++) {
                                                  +                var f = o.children[j];
                                                  +                var c = Model.getShapeById(f);
                                                  +                if (c != undefined && (c.name == "verticalLane"
                                                  +                    || c.name == "verticalSeparatorBar")) {
                                                  +                    c.props.h = o.props.h - 40;
                                                  +                    Designer.painter.renderShape(c);
                                                  +                    h.push(c)
                                                  +                }
                                                  +            }
                                                  +        } else {
                                                  +            if (e == "r") {
                                                  +                if (o.children && o.children.length > 0) {
                                                  +                    var d = null;
                                                  +                    for (var j = 0; j < o.children.length; j++) {
                                                  +                        var f = o.children[j];
                                                  +                        var c = Model.getShapeById(f);
                                                  +                        if (c.name == "horizontalSeparator") {
                                                  +                            c.props.w = o.props.w;
                                                  +                            Designer.painter.renderShape(c);
                                                  +                            h.push(c)
                                                  +                        }
                                                  +                        if (c.name == "verticalLane"
                                                  +                            && (d == null || c.props.x > d.props.x)) {
                                                  +                            d = c
                                                  +                        }
                                                  +                    }
                                                  +                    if (d != null) {
                                                  +                        d.props.w += g.w;
                                                  +                        Designer.painter.renderShape(d);
                                                  +                        h.push(d)
                                                  +                    }
                                                  +                }
                                                  +            } else {
                                                  +                if (e == "l") {
                                                  +                    if (o.children && o.children.length > 0) {
                                                  +                        var d = null;
                                                  +                        for (var j = 0; j < o.children.length; j++) {
                                                  +                            var f = o.children[j];
                                                  +                            var c = Model.getShapeById(f);
                                                  +                            if (c.name == "horizontalSeparator") {
                                                  +                                c.props.x += g.x;
                                                  +                                c.props.w += g.w;
                                                  +                                Designer.painter.renderShape(c);
                                                  +                                h.push(c)
                                                  +                            } else {
                                                  +                                if (c.name == "verticalSeparatorBar") {
                                                  +                                    c.props.x += g.x;
                                                  +                                    Designer.painter.renderShape(c);
                                                  +                                    h.push(c)
                                                  +                                }
                                                  +                            }
                                                  +                            if (c.name == "verticalLane"
                                                  +                                && (d == null || c.props.x < d.props.x)) {
                                                  +                                d = c
                                                  +                            }
                                                  +                        }
                                                  +                        if (d != null) {
                                                  +                            d.props.w += g.w;
                                                  +                            d.props.x += g.x;
                                                  +                            Designer.painter.renderShape(d);
                                                  +                            h.push(d)
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +    } else {
                                                  +        if (o.name == "verticalLane") {
                                                  +            var n = Model.getShapeById(o.parent);
                                                  +            h = [n];
                                                  +            n.props.w += g.w;
                                                  +            n.props.h = o.props.h + 40;
                                                  +            n.props.x += g.x;
                                                  +            Designer.painter.renderShape(n);
                                                  +            if (e == "r") {
                                                  +                var p = [];
                                                  +                var l = Model.getPersistenceById(o.id);
                                                  +                for (var j = 0; j < n.children.length; j++) {
                                                  +                    var f = n.children[j];
                                                  +                    if (f != o.id) {
                                                  +                        var a = Model.getPersistenceById(f);
                                                  +                        var c = Model.getShapeById(f);
                                                  +                        if (c.name == "horizontalSeparator") {
                                                  +                            c.props.w += g.w;
                                                  +                            Designer.painter.renderShape(c);
                                                  +                            h.push(c)
                                                  +                        } else {
                                                  +                            if (a.props.x >= l.props.x
                                                  +                                && a.name == "verticalLane") {
                                                  +                                p.push(c)
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                if (p.length > 0) {
                                                  +                    var m = Utils.getContainedShapes(p);
                                                  +                    console.log(';;;;;;;;;;;;')
                                                  +                    for (let i = 0; i < m.length; i++) {
                                                  +                        console.log(m[i].text);
                                                  +                    }
                                                  +                    var q = Utils.getOutlinkers(m);
                                                  +                    m = m.concat(q);
                                                  +                    p = p.concat(m);
                                                  +                    Designer.op.moveShape(p, {
                                                  +                        x : g.w * Designer.config.scale,
                                                  +                        y : 0
                                                  +                    });
                                                  +                    h = h.concat(p)
                                                  +                }
                                                  +            } else {
                                                  +                if (e == "b") {
                                                  +                    for (var j = 0; j < n.children.length; j++) {
                                                  +                        var f = n.children[j];
                                                  +                        if (f != o.id) {
                                                  +                            var c = Model.getShapeById(f);
                                                  +                            if (c.name == "verticalLane"
                                                  +                                || c.name == "verticalSeparatorBar") {
                                                  +                                c.props.h = o.props.h;
                                                  +                                Designer.painter.renderShape(c);
                                                  +                                h.push(c)
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                } else {
                                                  +                    if (e == "l") {
                                                  +                        var p = [];
                                                  +                        var l = Model.getPersistenceById(o.id);
                                                  +                        for (var j = 0; j < n.children.length; j++) {
                                                  +                            var f = n.children[j];
                                                  +                            if (f != o.id) {
                                                  +                                var a = Model.getPersistenceById(f);
                                                  +                                var c = Model.getShapeById(f);
                                                  +                                if (c.name == "horizontalSeparator") {
                                                  +                                    c.props.x += g.x;
                                                  +                                    c.props.w += g.w;
                                                  +                                    Designer.painter.renderShape(c);
                                                  +                                    h.push(c)
                                                  +                                } else {
                                                  +                                    if (c.name == "verticalSeparatorBar") {
                                                  +                                        c.props.x += g.x;
                                                  +                                        Designer.painter.renderShape(c);
                                                  +                                        h.push(c)
                                                  +                                    } else {
                                                  +                                        // if (a.props.x <= l.props.x
                                                  +                                        if ((a.props.x + a.props.w) <= l.props.x
                                                  +                                            && a.name == "verticalLane") {
                                                  +                                            p.push(c)
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                        if (p.length > 0) {
                                                  +                            var m = Utils.getContainedShapes(p);
                                                  +                            var q = Utils.getOutlinkers(m);
                                                  +                            m = m.concat(q);
                                                  +                            p = p.concat(m);
                                                  +                            Designer.op.moveShape(p, {
                                                  +                                x : g.x * Designer.config.scale,
                                                  +                                y : 0
                                                  +                            });
                                                  +                            h = h.concat(p)
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        } else {
                                                  +            if (o.name == "horizontalSeparator") {
                                                  +                var n = Model.getShapeById(o.parent);
                                                  +                h = [n];
                                                  +                n.props.h += g.h;
                                                  +                Designer.painter.renderShape(n);
                                                  +                var p = [];
                                                  +                for (var j = 0; j < n.children.length; j++) {
                                                  +                    var f = n.children[j];
                                                  +                    var c = Model.getShapeById(f);
                                                  +                    if (f == o.id) {
                                                  +                        continue
                                                  +                    }
                                                  +                    if (c != undefined && c.name != "horizontalSeparator") {
                                                  +                        c.props.h += g.h;
                                                  +                        Designer.painter.renderShape(c);
                                                  +                        h.push(c);
                                                  +                        p.push(Utils.copy(c));
                                                  +                    } else {
                                                  +                        if (c != undefined && c.props.y > o.props.y) {
                                                  +                            c.props.y += g.h;
                                                  +                            Designer.painter.renderShape(c);
                                                  +                            h.push(c);
                                                  +                            p.push(Utils.copy(c));
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                var m = Utils.getContainedShapes(p);// 泳道
                                                  +                var m2 = [];
                                                  +                var m3 = [];
                                                  +                var oo = Model.getPersistenceById(o.id);
                                                  +                // console.log('oo ' + oo.text + JSON.stringify(oo.props));
                                                  +                console.log('o ' + o.text + JSON.stringify(o.props));
                                                  +                for (var i = 0; i < m.length; i++) {
                                                  +                    var s = m[i];
                                                  +                    if (s != undefined) {
                                                  +                        if ((s.props.x >= o.props.x || (s.props.x + s.props.w) <= o.props.x)) {
                                                  +                            if (s.props.y > (o.props.y + o.props.h)) {
                                                  +                                console.log('m2 ' + s.text);
                                                  +                                // s.props.y += g.h;
                                                  +                                Designer.painter.renderShape(s);
                                                  +                                m2.push(s);
                                                  +                            } else if (s.props.y == (o.props.y + o.props.h)) {
                                                  +                                // s.props.y = o.props.y + o.props.h;
                                                  +                                console.log('m3 ' + s.text);
                                                  +                                Designer.painter.renderShape(s);
                                                  +                                m3.push(s);
                                                  +                            } else if (s.props.y == (o.props.y + o.props.h - g.h)) {
                                                  +                                // s.props.y = o.props.y + o.props.h;
                                                  +                                console.log('m4 ' + s.text);
                                                  +                                Designer.painter.renderShape(s);
                                                  +                                m3.push(s);
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                if (m2.length > 0) {
                                                  +                    var q2 = Utils.getOutlinkers(m2);
                                                  +                    m2 = m2.concat(q2);
                                                  +                    Designer.op.moveShape(m2, {
                                                  +                        x : 0,
                                                  +                        y : g.h * Designer.config.scale
                                                  +                    });
                                                  +                    m = m.concat(m2);
                                                  +                }
                                                  +                if (m3.length > 0) {
                                                  +                    var q3 = Utils.getOutlinkers(m3);
                                                  +                    m3 = m3.concat(q3);
                                                  +                    Designer.op.moveShape(m3, {
                                                  +                        x : 0,
                                                  +                        y : ((o.props.y + o.props.h) - m3[0].props.y) * Designer.config.scale
                                                  +                    });
                                                  +                    m = m.concat(m3);
                                                  +                }
                                                  +
                                                  +
                                                  +
                                                  +
                                                  +                // m = m2;
                                                  +                // var q = Utils.getOutlinkers(m);// 连线
                                                  +                // m = m.concat(q);
                                                  +                // Designer.op.moveShape(m, {
                                                  +                //     x : 0,
                                                  +                //     y : g.h * Designer.config.scale
                                                  +                // });
                                                  +
                                                  +                p = p.concat(m);
                                                  +
                                                  +                // h = h.concat(p);
                                                  +                h = p;
                                                  +                h.push(n);
                                                  +
                                                  +
                                                  +
                                                  +
                                                  +            } else {
                                                  +                if (o.name == "horizontalPool") {
                                                  +                    if (e == "r") {
                                                  +                        for (var j = 0; j < o.children.length; j++) {
                                                  +                            var f = o.children[j];
                                                  +                            var c = Model.getShapeById(f);
                                                  +                            if (c.name == "horizontalLane"
                                                  +                                || c.name == "horizontalSeparatorBar") {
                                                  +                                c.props.w = o.props.w - 40;
                                                  +                                Designer.painter.renderShape(c);
                                                  +                                h.push(c)
                                                  +                            }
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (e == "b") {
                                                  +                            if (o.children && o.children.length > 0) {
                                                  +                                var d = null;
                                                  +                                for (var j = 0; j < o.children.length; j++) {
                                                  +                                    var f = o.children[j];
                                                  +                                    var c = Model.getShapeById(f);
                                                  +                                    if (c.name == "verticalSeparator") {
                                                  +                                        c.props.h = o.props.h;
                                                  +                                        Designer.painter.renderShape(c);
                                                  +                                        h.push(c)
                                                  +                                    }
                                                  +                                    if (c.name == "horizontalLane"
                                                  +                                        && (d == null || c.props.y > d.props.y)) {
                                                  +                                        d = c
                                                  +                                    }
                                                  +                                }
                                                  +                                if (d != null) {
                                                  +                                    d.props.h += g.h;
                                                  +                                    Designer.painter.renderShape(d);
                                                  +                                    h.push(d)
                                                  +                                }
                                                  +                            }
                                                  +                        } else {
                                                  +                            if (e == "t") {
                                                  +                                if (o.children && o.children.length > 0) {
                                                  +                                    var d = null;
                                                  +                                    for (var j = 0; j < o.children.length; j++) {
                                                  +                                        var f = o.children[j];
                                                  +                                        var c = Model.getShapeById(f);
                                                  +                                        if (c.name == "verticalSeparator") {
                                                  +                                            c.props.y += g.y;
                                                  +                                            c.props.h += g.h;
                                                  +                                            Designer.painter.renderShape(c);
                                                  +                                            h.push(c)
                                                  +                                        } else {
                                                  +                                            if (c.name == "horizontalSeparatorBar") {
                                                  +                                                c.props.y += g.y;
                                                  +                                                Designer.painter.renderShape(c);
                                                  +                                                h.push(c)
                                                  +                                            }
                                                  +                                        }
                                                  +                                        if (c.name == "horizontalLane"
                                                  +                                            && (d == null || c.props.y < d.props.y)) {
                                                  +                                            d = c
                                                  +                                        }
                                                  +                                    }
                                                  +                                    if (d != null) {
                                                  +                                        d.props.h += g.h;
                                                  +                                        d.props.y += g.y;
                                                  +                                        Designer.painter.renderShape(d);
                                                  +                                        h.push(d)
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                } else {
                                                  +                    if (o.name == "horizontalLane") {
                                                  +                        var n = Model.getShapeById(o.parent);
                                                  +                        h = [n];
                                                  +                        n.props.h += g.h;
                                                  +                        n.props.w += g.w;
                                                  +                        n.props.y += g.y;
                                                  +                        Designer.painter.renderShape(n);
                                                  +                        if (e == "r") {
                                                  +                            for (var j = 0; j < n.children.length; j++) {
                                                  +                                var f = n.children[j];
                                                  +                                if (f != o.id) {
                                                  +                                    var c = Model.getShapeById(f);
                                                  +                                    if (c.name == "horizontalLane"
                                                  +                                        || c.name == "horizontalSeparatorBar") {
                                                  +                                        c.props.w = o.props.w;
                                                  +                                        Designer.painter.renderShape(c);
                                                  +                                        h.push(c)
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        } else {
                                                  +                            if (e == "b") {
                                                  +                                var p = [];
                                                  +                                var l = Model.getPersistenceById(o.id);
                                                  +                                for (var j = 0; j < n.children.length; j++) {
                                                  +                                    var f = n.children[j];
                                                  +                                    if (f != o.id) {
                                                  +                                        var a = Model.getPersistenceById(f);
                                                  +                                        var c = Model.getShapeById(f);
                                                  +                                        if (c.name == "verticalSeparator") {
                                                  +                                            c.props.h += g.h;
                                                  +                                            Designer.painter.renderShape(c);
                                                  +                                            h.push(c)
                                                  +                                        } else {
                                                  +                                            if (a.props.y >= l.props.y
                                                  +                                                && a.name == "horizontalLane") {
                                                  +                                                p.push(c)
                                                  +                                            }
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                                if (p.length > 0) {
                                                  +                                    var m = Utils.getContainedShapes(p);
                                                  +                                    var q = Utils.getOutlinkers(m);
                                                  +                                    m = m.concat(q);
                                                  +                                    p = p.concat(m);
                                                  +                                    Designer.op.moveShape(p, {
                                                  +                                        x : 0,
                                                  +                                        y : g.h * Designer.config.scale
                                                  +                                    });
                                                  +                                    h = h.concat(p)
                                                  +                                }
                                                  +                            } else {
                                                  +                                if (e == "t") {
                                                  +                                    var p = [];
                                                  +                                    var l = Model.getPersistenceById(o.id);
                                                  +                                    for (var j = 0; j < n.children.length; j++) {
                                                  +                                        var f = n.children[j];
                                                  +                                        if (f != o.id) {
                                                  +                                            var a = Model.getPersistenceById(f);
                                                  +                                            var c = Model.getShapeById(f);
                                                  +                                            if (c.name == "verticalSeparator") {
                                                  +                                                c.props.y += g.y;
                                                  +                                                c.props.h += g.h;
                                                  +                                                Designer.painter.renderShape(c);
                                                  +                                                h.push(c)
                                                  +                                            } else {
                                                  +                                                if (c.name == "horizontalSeparatorBar") {
                                                  +                                                    c.props.y += g.y;
                                                  +                                                    Designer.painter
                                                  +                                                        .renderShape(c);
                                                  +                                                    h.push(c)
                                                  +                                                } else {
                                                  +                                                    // if (a.props.y <= l.props.y
                                                  +                                                    if ((a.props.y + a.props.h) <= l.props.y
                                                  +                                                        && a.name == "horizontalLane") {
                                                  +                                                        p.push(c)
                                                  +                                                    }
                                                  +                                                }
                                                  +                                            }
                                                  +                                        }
                                                  +                                    }
                                                  +                                    if (p.length > 0) {
                                                  +                                        var m = Utils.getContainedShapes(p);
                                                  +                                        var q = Utils.getOutlinkers(m);
                                                  +                                        m = m.concat(q);
                                                  +                                        p = p.concat(m);
                                                  +                                        Designer.op.moveShape(p, {
                                                  +                                            x : 0,
                                                  +                                            y : g.y * Designer.config.scale
                                                  +                                        });
                                                  +                                        h = h.concat(p)
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (o.name == "verticalSeparator") {
                                                  +                            var n = Model.getShapeById(o.parent);
                                                  +                            h = [n];
                                                  +                            n.props.w += g.w;
                                                  +                            Designer.painter.renderShape(n);
                                                  +                            for (var j = 0; j < n.children.length; j++) {
                                                  +                                var f = n.children[j];
                                                  +                                var c = Model.getShapeById(f);
                                                  +                                if (f == o.id) {
                                                  +                                    continue
                                                  +                                }
                                                  +                                if (c.name != "verticalSeparator") {
                                                  +                                    c.props.w += g.w;
                                                  +                                    Designer.painter.renderShape(c);
                                                  +                                    h.push(c)
                                                  +                                } else {
                                                  +                                    if (c.props.x > o.props.x) {
                                                  +                                        c.props.x += g.w;
                                                  +                                        Designer.painter.renderShape(c);
                                                  +                                        h.push(c)
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        } else {
                                                  +                            if (o.name == "choreographyTask"
                                                  +                                || o.name == "subChoreography"
                                                  +                                || o.name == "callChoreographyGlobal"
                                                  +                                || o.name == "callChoreography") {
                                                  +                                for (var j = 0; j < o.children.length; j++) {
                                                  +                                    var f = o.children[j];
                                                  +                                    var c = Model.getShapeById(f);
                                                  +                                    c.props.x = o.props.x;
                                                  +                                    c.props.w = o.props.w;
                                                  +                                    if (c.name == "participantA"
                                                  +                                        || c.name == "callParticipantA") {
                                                  +                                        if (e.indexOf("t") >= 0) {
                                                  +                                            c.props.y += g.y
                                                  +                                        }
                                                  +                                    }
                                                  +                                    if (c.name == "participantB"
                                                  +                                        || c.name == "callParticipantB") {
                                                  +                                        if (e.indexOf("b") >= 0) {
                                                  +                                            c.props.y += g.h
                                                  +                                        }
                                                  +                                    }
                                                  +                                    Designer.painter.renderShape(c);
                                                  +                                    h.push(c)
                                                  +                                }
                                                  +                            } else {
                                                  +                                if (o.name == "cls") {
                                                  +                                    var k = o.props.h / 2 - 15;
                                                  +                                    for (var j = 0; j < o.children.length; j++) {
                                                  +                                        var f = o.children[j];
                                                  +                                        var c = Model.getShapeById(f);
                                                  +                                        if (c.name == "classAttribute") {
                                                  +                                            c.props.y = o.props.y + 30
                                                  +                                        } else {
                                                  +                                            c.props.y = o.props.y + k + 30
                                                  +                                        }
                                                  +                                        c.props.x = o.props.x;
                                                  +                                        c.props.w = o.props.w;
                                                  +                                        c.props.h = k;
                                                  +                                        Designer.painter.renderShape(c);
                                                  +                                        h.push(c)
                                                  +                                    }
                                                  +                                } else {
                                                  +                                    if (o.name == "interface") {
                                                  +                                        for (var j = 0; j < o.children.length; j++) {
                                                  +                                            var f = o.children[j];
                                                  +                                            var c = Model.getShapeById(f);
                                                  +                                            c.props.x = o.props.x;
                                                  +                                            c.props.y = o.props.y + 30;
                                                  +                                            c.props.w = o.props.w;
                                                  +                                            c.props.h = o.props.h - 30;
                                                  +                                            Designer.painter.renderShape(c);
                                                  +                                            h.push(c)
                                                  +                                        }
                                                  +                                    } else {
                                                  +                                        if (o.name == "package") {
                                                  +                                            for (var j = 0; j < o.children.length; j++) {
                                                  +                                                var f = o.children[j];
                                                  +                                                var c = Model.getShapeById(f);
                                                  +                                                c.props.x = o.props.x;
                                                  +                                                c.props.y = o.props.y + 25;
                                                  +                                                c.props.w = o.props.w;
                                                  +                                                c.props.h = o.props.h - 25;
                                                  +                                                Designer.painter.renderShape(c);
                                                  +                                                h.push(c)
                                                  +                                            }
                                                  +                                        } else {
                                                  +                                            if (o.name == "combinedFragment") {
                                                  +                                                for (var j = 0; j < o.children.length; j++) {
                                                  +                                                    var f = o.children[j];
                                                  +                                                    var c = Model
                                                  +                                                        .getShapeById(f);
                                                  +                                                    c.props.x = o.props.x;
                                                  +                                                    c.props.y = o.props.y;
                                                  +                                                    c.props.w = o.props.w * 0.3
                                                  +                                                        + 8;
                                                  +                                                    Designer.painter
                                                  +                                                        .renderShape(c);
                                                  +                                                    h.push(c)
                                                  +                                                }
                                                  +                                            }
                                                  +                                        }
                                                  +                                    }
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +    }
                                                  +    return h
                                                  +});
                                                  +Designer.events.addEventListener("beforeRemove", function(c) {
                                                  +    var n = {};
                                                  +    for (var g = 0; g < c.length; g++) {
                                                  +        var k = c[g];
                                                  +        n[k.id] = k
                                                  +    }
                                                  +    var a = [];
                                                  +    for (var g = 0; g < c.length; g++) {
                                                  +        var k = c[g];
                                                  +        if (k.name == "verticalSeparatorBar" && !n[k.parent]
                                                  +            && a.indexOf(k.id) < 0) {
                                                  +            delete n[k.id]
                                                  +        } else {
                                                  +            if (k.name == "horizontalSeparatorBar" && !n[k.parent]
                                                  +                && a.indexOf(k.id) < 0) {
                                                  +                delete n[k.id]
                                                  +            } else {
                                                  +                if (k.name == "horizontalSeparator") {
                                                  +                    var m = Model.getShapeById(k.parent);
                                                  +                    var h = null;
                                                  +                    var l = 0;
                                                  +                    for (var f = 0; f < m.children.length; f++) {
                                                  +                        var e = m.children[f];
                                                  +                        var d = Model.getShapeById(e);
                                                  +                        if (d.name == "horizontalSeparator" && !n[e]) {
                                                  +                            l += 1
                                                  +                        } else {
                                                  +                            if (d.name == "verticalSeparatorBar") {
                                                  +                                h = d
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    if (l == 0 && h != null) {
                                                  +                        n[h.id] = h;
                                                  +                        if (a.indexOf(h.id) < 0) {
                                                  +                            a.push(h.id)
                                                  +                        }
                                                  +                    }
                                                  +                } else {
                                                  +                    if (k.name == "verticalSeparator") {
                                                  +                        var m = Model.getShapeById(k.parent);
                                                  +                        var h = null;
                                                  +                        var l = 0;
                                                  +                        for (var f = 0; f < m.children.length; f++) {
                                                  +                            var e = m.children[f];
                                                  +                            var d = Model.getShapeById(e);
                                                  +                            if (d.name == "verticalSeparator" && !n[e]) {
                                                  +                                l += 1
                                                  +                            } else {
                                                  +                                if (d.name == "horizontalSeparatorBar") {
                                                  +                                    h = d
                                                  +                                }
                                                  +                            }
                                                  +                        }
                                                  +                        if (l == 0 && h != null) {
                                                  +                            n[h.id] = h;
                                                  +                            if (a.indexOf(h.id) < 0) {
                                                  +                                a.push(h.id)
                                                  +                            }
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (k.name == "classAttribute"
                                                  +                            || k.name == "classOperation"
                                                  +                            || k.name == "interfaceOperation"
                                                  +                            || k.name == "packageAttribute"
                                                  +                            || k.name == "fragmentTitle") {
                                                  +                            if (!n[k.parent]) {
                                                  +                                var m = Model.getShapeById(k.parent);
                                                  +                                for (var o = 0; o < m.children.length; o++) {
                                                  +                                    var b = m.children[o];
                                                  +                                    if (!n[b]) {
                                                  +                                        n[b] = Model.getShapeById(b)
                                                  +                                    }
                                                  +                                }
                                                  +                                n[k.parent] = Model
                                                  +                                    .getShapeById(k.parent)
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +    }
                                                  +    c = [];
                                                  +    for (var b in n) {
                                                  +        c.push(n[b])
                                                  +    }
                                                  +    return c
                                                  +});
                                                  +Designer.events.addEventListener("removed", function(b) {
                                                  +    var c = b.shapes;
                                                  +    var m = b.range;
                                                  +    var s = b.changedIds;
                                                  +    var g = [];
                                                  +    var r = [];
                                                  +    for (var j = 0; j < c.length; j++) {
                                                  +        var o = c[j];
                                                  +        if (o.name == "verticalLane" && m.indexOf(o.parent) < 0
                                                  +            && r.indexOf(o.parent) < 0) {
                                                  +            r.push(o.parent)
                                                  +        } else {
                                                  +            if (o.name == "horizontalLane" && m.indexOf(o.parent) < 0
                                                  +                && r.indexOf(o.parent) < 0) {
                                                  +                r.push(o.parent)
                                                  +            } else {
                                                  +                if (o.name == "verticalSeparatorBar" && m.indexOf(o.parent) < 0) {
                                                  +                    var q = Model.getShapeById(o.parent);
                                                  +                    q.props.w -= o.props.w;
                                                  +                    q.props.x += o.props.w;
                                                  +                    Designer.painter.renderShape(q);
                                                  +                    if (s.indexOf(o.parent) < 0) {
                                                  +                        s.push(o.parent);
                                                  +                        g.push(q)
                                                  +                    }
                                                  +                } else {
                                                  +                    if (o.name == "horizontalSeparatorBar"
                                                  +                        && m.indexOf(o.parent) < 0) {
                                                  +                        var q = Model.getShapeById(o.parent);
                                                  +                        q.props.y += o.props.h;
                                                  +                        q.props.h -= o.props.h;
                                                  +                        Designer.painter.renderShape(q);
                                                  +                        if (s.indexOf(o.parent) < 0) {
                                                  +                            s.push(o.parent);
                                                  +                            g.push(q)
                                                  +                        }
                                                  +                    } else {
                                                  +                        if (o.name == "horizontalSeparator"
                                                  +                            && m.indexOf(o.parent) < 0
                                                  +                            && r.indexOf(o.parent) < 0) {
                                                  +                            r.push(o.parent)
                                                  +                        } else {
                                                  +                            if (o.name == "verticalSeparator"
                                                  +                                && m.indexOf(o.parent) < 0
                                                  +                                && r.indexOf(o.parent) < 0) {
                                                  +                                r.push(o.parent)
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +    }
                                                  +    for (var n = 0; n < r.length; n++) {
                                                  +        var l = r[n];
                                                  +        var q = Model.getShapeById(l);
                                                  +        if (q.name == "verticalPool") {
                                                  +            var p = 0;
                                                  +            var e = 0;
                                                  +            for (var j = 0; j < q.children.length; j++) {
                                                  +                var f = q.children[j];
                                                  +                var d = Model.getShapeById(f);
                                                  +                if (d.name == "verticalLane") {
                                                  +                    e++;
                                                  +                    p += d.props.w
                                                  +                } else {
                                                  +                    if (d.name == "verticalSeparatorBar") {
                                                  +                        p += d.props.w
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            if (e > 0) {
                                                  +                q.props.w = p;
                                                  +                Designer.painter.renderShape(q);
                                                  +                if (s.indexOf(l) < 0) {
                                                  +                    s.push(l);
                                                  +                    g.push(q)
                                                  +                }
                                                  +                var a = Utils.rangeChildren(q);
                                                  +                g = g.concat(a)
                                                  +            }
                                                  +        } else {
                                                  +            if (q.name == "horizontalPool") {
                                                  +                var k = 0;
                                                  +                var e = 0;
                                                  +                for (var j = 0; j < q.children.length; j++) {
                                                  +                    var f = q.children[j];
                                                  +                    var d = Model.getShapeById(f);
                                                  +                    if (d.name == "horizontalLane") {
                                                  +                        e++;
                                                  +                        k += d.props.h
                                                  +                    } else {
                                                  +                        if (d.name == "horizontalSeparatorBar") {
                                                  +                            k += d.props.h
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +                if (e > 0) {
                                                  +                    q.props.h = k;
                                                  +                    Designer.painter.renderShape(q);
                                                  +                    if (s.indexOf(l) < 0) {
                                                  +                        s.push(l);
                                                  +                        g.push(q)
                                                  +                    }
                                                  +                    var a = Utils.rangeChildren(q);
                                                  +                    g = g.concat(a)
                                                  +                }
                                                  +            }
                                                  +        }
                                                  +    }
                                                  +    return g
                                                  +});
                                                  +Designer.events.addEventListener("shapeChanged", function(c) {
                                                  +    var a = c.shape;
                                                  +    var f = c.name;
                                                  +    var e = [];
                                                  +    if ((a.name == "choreographyTask" || a.name == "subChoreography")
                                                  +        && (f == "callChoreographyGlobal" || f == "callChoreography")) {
                                                  +        for (var b = 0; b < a.children.length; b++) {
                                                  +            var d = a.children[b];
                                                  +            var g = Model.getShapeById(d);
                                                  +            if (g.name == "participantA") {
                                                  +                Model.changeShape(g, "callParticipantA")
                                                  +            } else {
                                                  +                Model.changeShape(g, "callParticipantB")
                                                  +            }
                                                  +            e.push(g)
                                                  +        }
                                                  +    } else {
                                                  +        if ((a.name == "callChoreographyGlobal" || a.name == "callChoreography")
                                                  +            && (f == "choreographyTask" || f == "subChoreography")) {
                                                  +            for (var b = 0; b < a.children.length; b++) {
                                                  +                var d = a.children[b];
                                                  +                var g = Model.getShapeById(d);
                                                  +                if (g.name == "callParticipantA") {
                                                  +                    Model.changeShape(g, "participantA")
                                                  +                } else {
                                                  +                    Model.changeShape(g, "participantB")
                                                  +                }
                                                  +                e.push(g)
                                                  +            }
                                                  +        }
                                                  +    }
                                                  +    return e
                                                  +});
                                                  +Designer.events.addEventListener("settingFillStyle", function(a) {
                                                  +    var c = {};
                                                  +    for (var d = 0; d < a.length; d++) {
                                                  +        var b = a[d];
                                                  +        c[b.id] = b
                                                  +    }
                                                  +    for (var d = 0; d < a.length; d++) {
                                                  +        var b = a[d];
                                                  +        if (b.name == "classAttribute" || b.name == "classOperation"
                                                  +            || b.name == "interfaceOperation"
                                                  +            || b.name == "packageAttribute"
                                                  +            || b.name == "fragmentTitle") {
                                                  +            delete c[b.id];
                                                  +            if (!c[b.parent]) {
                                                  +                c[b.parent] = Model.getShapeById(b.parent)
                                                  +            }
                                                  +        }
                                                  +    }
                                                  +    a = [];
                                                  +    for (var e in c) {
                                                  +        a.push(c[e])
                                                  +    }
                                                  +    return a
                                                  +});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.methods.debug.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.methods.debug.js
                                                  new file mode 100644
                                                  index 00000000..b8a6e7fe
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.methods.debug.js
                                                  @@ -0,0 +1,1131 @@
                                                  +/**
                                                  + * 设计器对外提供的方法
                                                  + */
                                                  + 
                                                  +
                                                  +
                                                  +/**
                                                  + * 设计器方法:打开
                                                  + */
                                                  +Designer.addFunction("open", function(definition){
                                                  +	if(definition == ""){
                                                  +		return;
                                                  +	}
                                                  +	if(typeof definition == "string"){
                                                  +		eval('definition = ' + definition);
                                                  +	}
                                                  +	$(".shape_box").remove();
                                                  +	Model.define.elements = {};
                                                  +	Model.persistence.elements = {};
                                                  + 	Model.define.page = definition.page;
                                                  +	
                                                  +	//*******此处添加AWS流程设计器特有的属性*******//
                                                  + 	Model.define.processProperties=definition.processProperties;//此处添加aws全局属性
                                                  + 	Model.define.processDocument=definition.processDocument;//此处添加aws全局属性
                                                  + 	Model.define.uuid=definition.uuid;//此处添加流程uuid
                                                  + 	//Model.define.title=definition.title;//此处添加流程title
                                                  + 	//向页面processDefId  processDefTitle 赋值
                                                  + 	//process.processDefId=definition.uuid;
                                                  + 	process.title=definition.title;
                                                  +	//*******添加结束*******//
                                                  +	 	
                                                  + 	Model.persistence.page = Utils.copy(definition.page);
                                                  + 	Designer.initialize.initCanvas();
                                                  + 	var shapes = definition.elements;
                                                  + 	//先构造形状,再构造连接线,因为连接线的绘制过程有可能依赖所连接的图形
                                                  + 	var shapeCount = 0;
                                                  + 	for(var shapeId in shapes){
                                                  + 		var shape = shapes[shapeId];
                                                  + 		if(shape.name != "linker"){
                                                  + 			Schema.initShapeFunctions(shape);
                                                  + 			Designer.painter.renderShape(shape);
                                                  + 			Model.add(shape, false);
                                                  + 		}
                                                  + 		shapeCount++;
                                                  + 	}
                                                  + 	for(var shapeId in shapes){
                                                  + 		var shape = shapes[shapeId];
                                                  + 		if(shape.name == "linker"){
                                                  + 			Designer.painter.renderLinker(shape);
                                                  + 			Model.add(shape, false);
                                                  + 		}
                                                  + 	}
                                                  + 	if(shapeCount == 0){
                                                  + 		Model.build();
                                                  + 	}
                                                  + 	Navigator.draw();
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:全选
                                                  + */
                                                  +Designer.addFunction("selectAll", function(){
                                                  + 	var shapes = Model.define.elements;
                                                  + 	var shapeIds = [];
                                                  + 	for(var shapeId in shapes){
                                                  + 		shapeIds.push(shapeId);
                                                  + 	}
                                                  + 	Utils.selectShape(shapeIds);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:修改字体样式
                                                  + */
                                                  +Designer.addFunction("setFontStyle", function(style){
                                                  + 	var selected = Utils.getSelected();
                                                  + 	if(selected.length == 0){
                                                  + 		return;
                                                  + 	}
                                                  +	for(var i = 0; i < selected.length; i++){
                                                  +		var shape = selected[i];
                                                  +		shape.fontStyle = Utils.copy(shape.fontStyle);
                                                  +		if(typeof style.fontFamily != "undefined"){
                                                  +			shape.fontStyle.fontFamily = style.fontFamily;
                                                  +		}
                                                  +		if(typeof style.size != "undefined"){
                                                  +			shape.fontStyle.size = style.size;
                                                  +		}
                                                  +		if(typeof style.color != "undefined"){
                                                  +			shape.fontStyle.color = style.color;
                                                  +		}
                                                  +		if(typeof style.bold != "undefined"){
                                                  +			shape.fontStyle.bold = style.bold;
                                                  +		}
                                                  +		if(typeof style.italic != "undefined"){
                                                  +			shape.fontStyle.italic = style.italic;
                                                  +		}
                                                  +		if(typeof style.underline != "undefined"){
                                                  +			shape.fontStyle.underline = style.underline;
                                                  +		}
                                                  +		if(typeof style.textAlign != "undefined"){
                                                  +			shape.fontStyle.textAlign = style.textAlign;
                                                  +		}
                                                  +		//连接线和形状不同的样式
                                                  +		if(shape.name == "linker"){
                                                  +			//如果是连接线
                                                  +			Designer.painter.renderLinker(shape);
                                                  +		}else{
                                                  +			if(typeof style.vAlign != "undefined"){
                                                  +				shape.fontStyle.vAlign = style.vAlign;
                                                  +			}
                                                  +			Designer.painter.renderShape(shape);
                                                  +		}
                                                  +	}
                                                  +	Model.updateMulti(selected);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:修改样式
                                                  + */
                                                  +Designer.addFunction("setShapeStyle", function(style){
                                                  + 	var selected = Utils.getSelected();
                                                  + 	if(selected.length == 0){
                                                  + 		return;
                                                  + 	}
                                                  + 	var changed = [];
                                                  +	for(var i = 0; i < selected.length; i++){
                                                  +		var shape = selected[i];
                                                  +		//连接线和形状不同的样式
                                                  +		if(shape.name != "linker"){
                                                  +			//如果不是连接线
                                                  +			//重新赋一下,因为有些新建的图形可能没有style属性
                                                  +			shape.shapeStyle = Utils.copy(shape.shapeStyle);
                                                  +			if(typeof style.alpha != "undefined"){
                                                  +				shape.shapeStyle.alpha = style.alpha;
                                                  +			}
                                                  +			Designer.painter.renderShape(shape);
                                                  +			changed.push(shape);
                                                  +		}
                                                  +	}
                                                  +	Model.updateMulti(changed);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:修改线条样式
                                                  + */
                                                  +Designer.addFunction("setLineStyle", function(style){
                                                  + 	var selected = Utils.getSelected();
                                                  + 	if(selected.length == 0){
                                                  + 		return;
                                                  + 	}
                                                  + 	var familyShapes = Utils.getFamilyShapes(selected);
                                                  + 	selected = selected.concat(familyShapes);
                                                  +	for(var i = 0; i < selected.length; i++){
                                                  +		var shape = selected[i];
                                                  +		//重新赋一下,因为有些新建的图形可能没有lineStyle属性
                                                  +		shape.lineStyle = Utils.copy(shape.lineStyle);
                                                  +		if(typeof style.lineWidth != "undefined"){
                                                  +			shape.lineStyle.lineWidth = style.lineWidth;
                                                  +		}
                                                  +		if(typeof style.lineColor != "undefined"){
                                                  +			shape.lineStyle.lineColor = style.lineColor;
                                                  +		}
                                                  +		if(typeof style.lineStyle != "undefined"){
                                                  +			shape.lineStyle.lineStyle = style.lineStyle;
                                                  +		}
                                                  +		//连接线和形状不同的样式
                                                  +		if(shape.name == "linker"){
                                                  +			//如果是连接线
                                                  +			if(typeof style.beginArrowStyle != "undefined"){
                                                  +				shape.lineStyle.beginArrowStyle = style.beginArrowStyle;
                                                  +				Schema.linkerDefaults.lineStyle.beginArrowStyle = style.beginArrowStyle;
                                                  +			}
                                                  +			if(typeof style.endArrowStyle != "undefined"){
                                                  +				shape.lineStyle.endArrowStyle = style.endArrowStyle;
                                                  +				Schema.linkerDefaults.lineStyle.endArrowStyle = style.endArrowStyle;
                                                  +			}
                                                  +			//连接线线条不可以为0
                                                  +			if(shape.lineStyle.lineWidth == 0){
                                                  +				shape.lineStyle.lineWidth = 1;
                                                  +			}
                                                  +			Designer.painter.renderLinker(shape);
                                                  +		}else{
                                                  +			Designer.painter.renderShape(shape);
                                                  +		}
                                                  +	}
                                                  +	Model.updateMulti(selected);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:修改填充样式
                                                  + */
                                                  +Designer.addFunction("setFillStyle", function(style){
                                                  + 	var selected = Utils.getSelected();
                                                  + 	if(selected.length == 0){
                                                  + 		return;
                                                  + 	}
                                                  + 	//抛出事件处理
                                                  + 	selected = Designer.events.push("settingFillStyle", selected);
                                                  + 	if(selected.length == 0){
                                                  + 		return;
                                                  + 	}
                                                  + 	var changed = [];
                                                  +	for(var i = 0; i < selected.length; i++){
                                                  +		var shape = selected[i];
                                                  +		if(shape.name != "linker"){
                                                  +			//重新赋一下,因为有些新建的图形可能没有fillStyle属性
                                                  +			shape.fillStyle = Utils.copy(shape.fillStyle);
                                                  +			var type = shape.fillStyle.type;
                                                  +			if(typeof style.type != "undefined"){
                                                  +				//如果要修改填充类型,则要进行初始化
                                                  +				changeFillType(shape, style.type);
                                                  +				type = style.type;
                                                  +			}
                                                  +			if(typeof style.color != "undefined"){
                                                  +				if(type == "solid"){
                                                  +					//纯色,只可以修改color属性
                                                  +					shape.fillStyle.color = style.color;
                                                  +				}else if(type == "gradient"){
                                                  +					shape.fillStyle.beginColor = GradientHelper.getLighterColor(style.color);
                                                  +					shape.fillStyle.endColor = GradientHelper.getDarkerColor(style.color);
                                                  +				}
                                                  +			}
                                                  +			if(type == "gradient"){
                                                  +				//渐变的,可修改渐变色等属性
                                                  +				if(typeof style.beginColor != "undefined"){
                                                  +					shape.fillStyle.beginColor = style.beginColor;
                                                  +				}
                                                  +				if(typeof style.endColor != "undefined"){
                                                  +					shape.fillStyle.endColor = style.endColor;
                                                  +				}
                                                  +				if(typeof style.gradientType != "undefined"){
                                                  +					shape.fillStyle.gradientType = style.gradientType;
                                                  +					if(style.gradientType == "linear"){
                                                  +						delete shape.fillStyle.radius;
                                                  +						shape.fillStyle.angle = 0;
                                                  +					}else{
                                                  +						delete shape.fillStyle.angle;
                                                  +						shape.fillStyle.radius = 0.75;
                                                  +					}
                                                  +				}
                                                  +				if(typeof style.radius != "undefined"){
                                                  +					shape.fillStyle.radius = style.radius;
                                                  +				}
                                                  +				if(typeof style.angle != "undefined"){
                                                  +					shape.fillStyle.angle = style.angle;
                                                  +				}
                                                  +				
                                                  +			}
                                                  +			if(type == "image"){
                                                  +				//图片类型
                                                  +				if(typeof style.display != "undefined"){
                                                  +					shape.fillStyle.display = style.display;
                                                  +				}
                                                  +				if(typeof style.fileId != "undefined"){
                                                  +					//如果要修改图片地址,删除原有的图片元素,绘制时重新加载
                                                  +					shape.fillStyle.fileId = style.fileId;
                                                  +				}
                                                  +				if(typeof style.imageW != "undefined"){
                                                  +					shape.fillStyle.imageW = style.imageW;
                                                  +				}
                                                  +				if(typeof style.imageH != "undefined"){
                                                  +					shape.fillStyle.imageH = style.imageH;
                                                  +				}
                                                  +			}
                                                  +			Designer.painter.renderShape(shape);
                                                  +			changed.push(shape);
                                                  +		}
                                                  +	}
                                                  +	Model.updateMulti(changed);
                                                  +	/**
                                                  +	 * 修改一个图形的填充类型
                                                  +	 */
                                                  +	function changeFillType(shape, type){
                                                  +		//只有图形具有填充样式
                                                  +		var oldStyle = shape.fillStyle;
                                                  +		if(oldStyle.type != type){
                                                  +			var newStyle = {type: type};
                                                  +			//只调整不是此类型的图形
                                                  +			if(type == "solid"){
                                                  +				//改成纯色
                                                  +				if(oldStyle.type == "gradient"){
                                                  +					//以前是渐变的
                                                  +					var newColor = GradientHelper.getDarkerColor(oldStyle.beginColor);
                                                  +					newStyle.color = newColor;
                                                  +				}else{
                                                  +					newStyle.color = "255,255,255";
                                                  +				}
                                                  +			}else if(type == "gradient"){
                                                  +				//改成渐变的
                                                  +				var oldColor = oldStyle.color;
                                                  +				if(oldStyle.type != "solid"){
                                                  +					//如果以前不是纯色的
                                                  +					oldColor = "255,255,255";
                                                  +				}
                                                  +				newStyle.gradientType = "linear";
                                                  +				newStyle.angle = 0;
                                                  +				newStyle.beginColor = GradientHelper.getLighterColor(oldColor);
                                                  +				newStyle.endColor = GradientHelper.getDarkerColor(oldColor);
                                                  +			}else if(type == "image"){
                                                  +				newStyle.fileId = "";
                                                  +				newStyle.display = "fill";
                                                  +				newStyle.imageW = 10;
                                                  +				newStyle.imageH = 10;
                                                  +			}
                                                  +			shape.fillStyle = newStyle;
                                                  +		}
                                                  +	}
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:修改连接线类型
                                                  + */
                                                  +Designer.addFunction("setLinkerType", function(type){
                                                  + 	var selected = Utils.getSelected();
                                                  + 	if(selected.length == 0){
                                                  + 		return;
                                                  + 	}
                                                  + 	var changed = [];
                                                  +	for(var i = 0; i < selected.length; i++){
                                                  +		var shape = selected[i];
                                                  +		if(shape.name == "linker"){
                                                  +			//如果是连接线
                                                  +			shape.linkerType = type;
                                                  +			Designer.painter.renderLinker(shape, true);
                                                  +			changed.push(shape);
                                                  +		}
                                                  +	}
                                                  +	Schema.linkerDefaults.linkerType = type;
                                                  +	var selectedIds = Utils.getSelectedIds();
                                                  +	if(selectedIds.length > 1){
                                                  +		Designer.painter.drawControls(selectedIds);
                                                  +	}
                                                  +	Model.updateMulti(changed);
                                                  +	Utils.showLinkerControls();
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:匹配大小
                                                  + */
                                                  +Designer.addFunction("matchSize", function(size){
                                                  + 	var selected = Utils.getSelected();
                                                  + 	if(selected.length == 0 || !size){
                                                  + 		return;
                                                  + 	}
                                                  + 	var maxW = null;
                                                  + 	var maxH = null;
                                                  + 	var linkerIds = []; //定义linkerIds变量,保存会变化的连接线id,随后再逐一进行计算
                                                  +	for(var i = 0; i < selected.length; i++){
                                                  +		var shape = selected[i];
                                                  +		if(shape.name != "linker"){
                                                  +			if(maxW == null || shape.props.w > maxW){
                                                  +				maxW = shape.props.w;
                                                  +			}
                                                  +			if(maxH == null || shape.props.h > maxH){
                                                  +				maxH = shape.props.h;
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	if(size.w == "auto"){
                                                  +		size.w = maxW;
                                                  +	}
                                                  +	if(size.h == "auto"){
                                                  +		size.h = maxH;
                                                  +	}
                                                  +	Utils.removeAnchors();
                                                  +	var changed = [];
                                                  +	for(var i = 0; i < selected.length; i++){
                                                  +		var shape = selected[i];
                                                  +		if(shape.name != "linker"){
                                                  +			var shapeLinkers = Designer.op.changeShapeProps(shape, size);
                                                  +			Utils.showAnchors(shape);
                                                  +			Utils.mergeArray(linkerIds, shapeLinkers);
                                                  +			changed.push(shape);
                                                  +		}
                                                  +	}
                                                  +	for(var i = 0; i < linkerIds.length; i++){
                                                  +		var id = linkerIds[i];
                                                  +		var linker = Model.getShapeById(id);
                                                  +		Designer.painter.renderLinker(linker, true);
                                                  +		changed.push(linker);
                                                  +	}
                                                  +	Designer.painter.drawControls(Utils.getSelectedIds());
                                                  +	Model.updateMulti(changed);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:对齐图形
                                                  + * left center right top middle bottom
                                                  + */
                                                  +Designer.addFunction("alignShapes", function(type){
                                                  + 	var selected = Utils.getSelected();
                                                  + 	if(selected.length == 0 || !type){
                                                  + 		return;
                                                  + 	}
                                                  + 	var selectedIds = Utils.getSelectedIds();
                                                  + 	var box = Utils.getControlBox(selectedIds);
                                                  + 	var linkerIds = [];
                                                  + 	Utils.removeAnchors();
                                                  + 	var changed = [];
                                                  + 	for(var i = 0; i < selected.length; i++){
                                                  +		var shape = selected[i];
                                                  +		if(shape.name != "linker"){
                                                  +			changed.push(shape);
                                                  +		}
                                                  +		if(type == "left"){
                                                  +			//左对齐
                                                  +			if(shape.name != "linker"){
                                                  +				var shapeBox = Utils.getShapeBox(shape);
                                                  +				var newProps = {x: box.x - (shapeBox.x - shape.props.x)};
                                                  +				var shapeLinkers = Designer.op.changeShapeProps(shape, newProps);
                                                  +				Utils.showAnchors(shape);
                                                  +				Utils.mergeArray(linkerIds, shapeLinkers);
                                                  +			}else if(shape.from.id == null && shape.to.id == null){
                                                  +				var linkerBox = Utils.getLinkerBox(shape);
                                                  +				shape.from.x -= (linkerBox.x - box.x);
                                                  +				shape.to.x -= (linkerBox.x - box.x);
                                                  +				linkerIds.push(shape.id);
                                                  +			}
                                                  +		}else if(type == "center"){
                                                  +			//右对齐
                                                  +			var center = box.x + box.w/2;
                                                  +			if(shape.name != "linker"){
                                                  +				var newProps = {x: Math.round(center - shape.props.w/2)};
                                                  +				var shapeLinkers = Designer.op.changeShapeProps(shape, newProps);
                                                  +				Utils.showAnchors(shape);
                                                  +				Utils.mergeArray(linkerIds, shapeLinkers);
                                                  +			}else if(shape.from.id == null && shape.to.id == null){
                                                  +				var linkerBox = Utils.getLinkerBox(shape);
                                                  +				shape.from.x += Math.round(center - linkerBox.w/2 - linkerBox.x);
                                                  +				shape.to.x += Math.round(center - linkerBox.w/2 - linkerBox.x);
                                                  +				linkerIds.push(shape.id);
                                                  +			}
                                                  +		}else if(type == "right"){
                                                  +			//右对齐
                                                  +			var right = box.x + box.w;
                                                  +			if(shape.name != "linker"){
                                                  +				var shapeBox = Utils.getShapeBox(shape);
                                                  +				var newProps = {x: right - shape.props.w - (shape.props.x - shapeBox.x)};
                                                  +				var shapeLinkers = Designer.op.changeShapeProps(shape, newProps);
                                                  +				Utils.showAnchors(shape);
                                                  +				Utils.mergeArray(linkerIds, shapeLinkers);
                                                  +			}else if(shape.from.id == null && shape.to.id == null){
                                                  +				var linkerBox = Utils.getLinkerBox(shape);
                                                  +				shape.from.x += (right - linkerBox.x - linkerBox.w);
                                                  +				shape.to.x += (right - linkerBox.x - linkerBox.w);
                                                  +				linkerIds.push(shape.id);
                                                  +			}
                                                  +		}else if(type == "top"){
                                                  +			//上对齐
                                                  +			if(shape.name != "linker"){
                                                  +				var shapeBox = Utils.getShapeBox(shape);
                                                  +				var newProps = {y: box.y - (shapeBox.y - shape.props.y)};
                                                  +				var shapeLinkers = Designer.op.changeShapeProps(shape, newProps);
                                                  +				Utils.showAnchors(shape);
                                                  +				Utils.mergeArray(linkerIds, shapeLinkers);
                                                  +			}else if(shape.from.id == null && shape.to.id == null){
                                                  +				var linkerBox = Utils.getLinkerBox(shape);
                                                  +				shape.from.y -= (linkerBox.y - box.y);
                                                  +				shape.to.y -= (linkerBox.y - box.y);
                                                  +				linkerIds.push(shape.id);
                                                  +			}
                                                  +		}else if(type == "middle"){
                                                  +			//垂直居中对齐
                                                  +			var middle = box.y + box.h/2;
                                                  +			if(shape.name != "linker"){
                                                  +				var newProps = {y: Math.round(middle - shape.props.h/2)};
                                                  +				var shapeLinkers = Designer.op.changeShapeProps(shape, newProps);
                                                  +				Utils.showAnchors(shape);
                                                  +				Utils.mergeArray(linkerIds, shapeLinkers);
                                                  +			}else if(shape.from.id == null && shape.to.id == null){
                                                  +				var linkerBox = Utils.getLinkerBox(shape);
                                                  +				shape.from.y += Math.round(middle - linkerBox.h/2 - linkerBox.y);
                                                  +				shape.to.y += Math.round(middle - linkerBox.h/2 - linkerBox.y);
                                                  +				linkerIds.push(shape.id);
                                                  +			}
                                                  +		}else if(type == "bottom"){
                                                  +			//下对齐
                                                  +			var bottom = box.y + box.h;
                                                  +			if(shape.name != "linker"){
                                                  +				var shapeBox = Utils.getShapeBox(shape);
                                                  +				var newProps = {y: bottom - shape.props.h - (shape.props.y - shapeBox.y)};
                                                  +				var shapeLinkers = Designer.op.changeShapeProps(shape, newProps);
                                                  +				Utils.showAnchors(shape);
                                                  +				Utils.mergeArray(linkerIds, shapeLinkers);
                                                  +			}else if(shape.from.id == null && shape.to.id == null){
                                                  +				var linkerBox = Utils.getLinkerBox(shape);
                                                  +				shape.from.y += (bottom - linkerBox.y - linkerBox.h);
                                                  +				shape.to.y += (bottom - linkerBox.y - linkerBox.h);
                                                  +				linkerIds.push(shape.id);
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	//重绘连接线
                                                  +	for(var i = 0; i < linkerIds.length; i++){
                                                  +		var id = linkerIds[i];
                                                  +		var linker = Model.getShapeById(id);
                                                  +		Designer.painter.renderLinker(linker, true);
                                                  +		changed.push(linker);
                                                  +	}
                                                  +	Designer.painter.drawControls(selectedIds);
                                                  +	Model.updateMulti(changed);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:分布图形
                                                  + * h, v
                                                  + */
                                                  +Designer.addFunction("distributeShapes", function(type){
                                                  + 	var selected = Utils.getSelected();
                                                  + 	if(selected.length == 0 || !type){
                                                  + 		return;
                                                  + 	}
                                                  + 	var selectedIds = Utils.getSelectedIds();
                                                  + 	var box = Utils.getControlBox(selectedIds);
                                                  + 	var linkerIds = [];
                                                  + 	Utils.removeAnchors();
                                                  + 	var shapes = [];
                                                  + 	for(var i = 0; i < selected.length; i++){
                                                  +		var shape = selected[i];
                                                  +		if(shape.name != "linker"){
                                                  +			shapes.push(shape);
                                                  +		}
                                                  +	}
                                                  +	if(type == "h"){
                                                  +		shapes.sort(function compare(a, b){
                                                  +	 		return a.props.x - b.props.x;
                                                  +	 	});
                                                  +	 	var w = box.w;
                                                  +	 	for(var i = 0; i < shapes.length; i++){
                                                  +			var shape = shapes[i];
                                                  +			w -= shape.props.w;
                                                  +		}
                                                  +		var space = w / (shapes.length - 1);
                                                  +		var start = box.x;
                                                  +		for(var i = 0; i < shapes.length; i++){
                                                  +			var shape = shapes[i];
                                                  +			var newProps = {x: start};
                                                  +			var shapeLinkers = Designer.op.changeShapeProps(shape, newProps);
                                                  +			Utils.showAnchors(shape);
                                                  +			Utils.mergeArray(linkerIds, shapeLinkers);
                                                  +			start += (shape.props.w + space);
                                                  +		}
                                                  +	}else{
                                                  +		shapes.sort(function compare(a, b){
                                                  +	 		return a.props.y - b.props.y;
                                                  +	 	});
                                                  +	 	var h = box.h;
                                                  +	 	for(var i = 0; i < shapes.length; i++){
                                                  +			var shape = shapes[i];
                                                  +			h -= shape.props.h;
                                                  +		}
                                                  +		var space = h / (shapes.length - 1);
                                                  +		var start = box.y;
                                                  +		for(var i = 0; i < shapes.length; i++){
                                                  +			var shape = shapes[i];
                                                  +			var newProps = {y: start};
                                                  +			var shapeLinkers = Designer.op.changeShapeProps(shape, newProps);
                                                  +			Utils.showAnchors(shape);
                                                  +			Utils.mergeArray(linkerIds, shapeLinkers);
                                                  +			start += (shape.props.h + space);
                                                  +		}
                                                  +	}
                                                  +	//重绘连接线
                                                  +	for(var i = 0; i < linkerIds.length; i++){
                                                  +		var id = linkerIds[i];
                                                  +		var linker = Model.getShapeById(id);
                                                  +		Designer.painter.renderLinker(linker, true);
                                                  +		shapes.push(linker);
                                                  +	}
                                                  +	Designer.painter.drawControls(selectedIds);
                                                  +	Model.updateMulti(shapes);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:修改z轴层级
                                                  + * h, v
                                                  + */
                                                  +Designer.addFunction("layerShapes", function(type){
                                                  + 	var selected = Utils.getSelected();
                                                  + 	if(selected.length == 0 || !type){
                                                  + 		return;
                                                  + 	}
                                                  + 	selected.sort(function compare(a, b){
                                                  + 		return a.props.zindex - b.props.zindex;
                                                  + 	});
                                                  + 	var start;
                                                  + 	if(type == "front"){
                                                  + 		//顶层
                                                  + 		start = Model.maxZIndex;
                                                  + 		for(var i = 0; i < selected.length; i++){
                                                  +			var shape = selected[i];
                                                  +			start += 1;
                                                  +			shape.props.zindex = start;
                                                  +		}
                                                  + 	}else if(type == "forward"){
                                                  + 		//上移一层
                                                  +		var uplayer = null;
                                                  +		var shapeIndex = null;
                                                  +		//得到选中图形上层的形状
                                                  +		for(var i = 0; i < selected.length; i++){
                                                  +			var shape = selected[i];
                                                  +			uplayer = getUplayerShape(shape);
                                                  +			if(uplayer != null){
                                                  +				shapeIndex = shape.props.zindex;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		if(uplayer == null){
                                                  +			//选中形状的上方没有形状,不执行任何操作
                                                  +			return;
                                                  +		}
                                                  +		var index = uplayer.props.zindex;
                                                  +		var uplayerUp = getUplayerShape(uplayer);
                                                  +		var bringTo = index + 1;
                                                  +		if(uplayerUp != null){
                                                  +			//如果图形上层形状,上层还有形状,取两个形状的中间值
                                                  +			bringTo = index + (uplayerUp.props.zindex - index)/2;
                                                  +		}
                                                  +		var offset = bringTo - shapeIndex;
                                                  +		for(var i = 0; i < selected.length; i++){
                                                  +			var shape = selected[i];
                                                  +			shape.props.zindex += offset;
                                                  +		}
                                                  + 	}else if(type == "back"){
                                                  + 		//底层
                                                  + 		start = Model.orderList[0].zindex; //取到最小的zindex
                                                  + 		for(var i = selected.length - 1; i >= 0; i--){
                                                  +			var shape = selected[i];
                                                  +			start -= 1;
                                                  +			shape.props.zindex = start;
                                                  +		}
                                                  + 	}else if(type == "backward"){
                                                  + 		//下移一层
                                                  +		var downlayer = null;
                                                  +		var shapeIndex = null;
                                                  +		//得到选中图形上层的形状
                                                  +		for(var i = 0; i < selected.length; i++){
                                                  +			var shape = selected[i];
                                                  +			downlayer = getDownlayerShape(shape);
                                                  +			if(downlayer != null){
                                                  +				shapeIndex = shape.props.zindex;
                                                  +				break;
                                                  +			}
                                                  +		}
                                                  +		if(downlayer == null){
                                                  +			//选中形状的上方没有形状,不执行任何操作
                                                  +			return;
                                                  +		}
                                                  +		var index = downlayer.props.zindex;
                                                  +		var downlayerDown = getDownlayerShape(downlayer);
                                                  +		var bringTo = index - 1;
                                                  +		if(downlayerDown != null){
                                                  +			//如果图形上层形状,上层还有形状,取两个形状的中间值
                                                  +			bringTo = index - (index - downlayerDown.props.zindex)/2;
                                                  +		}
                                                  +		var offset = bringTo - shapeIndex;
                                                  +		for(var i = 0; i < selected.length; i++){
                                                  +			var shape = selected[i];
                                                  +			shape.props.zindex += offset;
                                                  +		}
                                                  + 	}
                                                  + 	Model.updateMulti(selected);
                                                  + 	
                                                  + 	/**
                                                  + 	 * 获取图形上层的并且没有被选中的形状
                                                  + 	 */
                                                  + 	function getUplayerShape(shape){
                                                  + 		var shapeBox = Utils.getShapeBox(shape);
                                                  + 		for(var j = 0; j < Model.orderList.length; j++){
                                                  +			var order = Model.orderList[j];
                                                  +			if(order.zindex <= shape.props.zindex || Utils.isSelected(order.id)){
                                                  +				continue;
                                                  +			}
                                                  +			//如果某图形在当前图形上方,并且没有被选中
                                                  +			var orderShape = Model.getShapeById(order.id);
                                                  +			var orderShapeBox = Utils.getShapeBox(orderShape);
                                                  +			if(Utils.rectCross(shapeBox, orderShapeBox)){
                                                  +				//并且两个形状重叠了
                                                  +				return orderShape;
                                                  +			}
                                                  +		}
                                                  +		return null;
                                                  + 	}
                                                  + 	/**
                                                  + 	 * 获取图形下层的并且没有被选中的形状
                                                  + 	 */
                                                  + 	function getDownlayerShape(shape){
                                                  + 		var shapeBox = Utils.getShapeBox(shape);
                                                  + 		for(var j = Model.orderList.length - 1; j >= 0; j--){
                                                  +			var order = Model.orderList[j];
                                                  +			if(order.zindex >= shape.props.zindex || Utils.isSelected(order.id)){
                                                  +				continue;
                                                  +			}
                                                  +			//如果某图形在当前图形下方,并且没有被选中
                                                  +			var orderShape = Model.getShapeById(order.id);
                                                  +			var orderShapeBox = Utils.getShapeBox(orderShape);
                                                  +			if(Utils.rectCross(shapeBox, orderShapeBox)){
                                                  +				//并且两个形状重叠了
                                                  +				return orderShape;
                                                  +			}
                                                  +		}
                                                  +		return null;
                                                  + 	}
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:组合
                                                  + */
                                                  +Designer.addFunction("group", function(){
                                                  + 	var selected = Utils.getSelected();
                                                  + 	if(selected.length < 2){
                                                  + 		//必须有两个以上,才可以组合
                                                  + 		return;
                                                  + 	}
                                                  + 	var groupId = Utils.newId();
                                                  + 	for(var i = 0; i < selected.length; i++){
                                                  +		var shape = selected[i];
                                                  +		shape.group = groupId;
                                                  +	}
                                                  +	Model.updateMulti(selected);
                                                  +});
                                                  +
                                                  +
                                                  +/**
                                                  + * 设计器方法:取消组合
                                                  + */
                                                  +Designer.addFunction("ungroup", function(){
                                                  + 	var selected = Utils.getSelected();
                                                  + 	if(selected.length == 0){
                                                  + 		return;
                                                  + 	}
                                                  + 	for(var i = 0; i < selected.length; i++){
                                                  +		var shape = selected[i];
                                                  +		shape.group = null;
                                                  +	}
                                                  +	Model.updateMulti(selected);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:锁定
                                                  + */
                                                  +Designer.addFunction("lockShapes", function(){
                                                  + 	var selectedIds = Utils.getSelectedIds();
                                                  + 	if(selectedIds.length == 0){
                                                  + 		return;
                                                  + 	}
                                                  + 	var changed = [];
                                                  + 	for(var i = 0; i < selectedIds.length; i++){
                                                  +		var shape = Model.getShapeById(selectedIds[i]);
                                                  +		shape.locked = true;
                                                  +		changed.push(shape);
                                                  +	}
                                                  +	Utils.unselect();
                                                  +	Utils.selectShape(selectedIds);
                                                  +	Model.updateMulti(changed);
                                                  +});
                                                  +
                                                  +
                                                  +/**
                                                  + * 设计器方法:解除锁定
                                                  + */
                                                  +Designer.addFunction("unlockShapes", function(){
                                                  +	var selectedIds = Utils.getSelectedLockedIds();
                                                  + 	if(selectedIds.length == 0){
                                                  + 		return;
                                                  + 	}
                                                  + 	var changed = [];
                                                  + 	for(var i = 0; i < selectedIds.length; i++){
                                                  +		var shape = Model.getShapeById(selectedIds[i]);
                                                  +		shape.locked = false;
                                                  +		changed.push(shape);
                                                  +	}
                                                  +	var allIds = Utils.getSelectedIds();
                                                  +	Utils.unselect();
                                                  +	Utils.selectShape(allIds);
                                                  +	Model.updateMulti(changed);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:设置页面样式
                                                  + */
                                                  +Designer.addFunction("setPageStyle", function(pageStyle){
                                                  +	Model.updatePage(pageStyle);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:设置设计器只读状态
                                                  + */
                                                  +Designer.addFunction("setReadonly", function(readonly){
                                                  +	if(typeof readonly != "boolean"){
                                                  +		return;
                                                  +	}
                                                  +	if(readonly){
                                                  +		//只读
                                                  +		$(".diagram_title").addClass("readonly");
                                                  +		//$(".menubar").hide();
                                                  +		//$(".toolbar").hide();
                                                  +		//隐藏图形面板
                                                  +		$("#shape_panel").addClass("readonly");
                                                  +		$("#designer_viewport").addClass("readonly");
                                                  +		//取消快捷键
                                                  +		Designer.hotkey.cancel();
                                                  +		Designer.op.cancel();
                                                  +		$(window).trigger("resize.designer");
                                                  +		//隐藏Dock
                                                  +		Dock.init();
                                                  +		$("#dock .owner").hide();
                                                  +		$(".dock_view").hide();
                                                  +		Dock.currentView = "";
                                                  +		Designer.contextMenu.destroy();
                                                  +	}
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:放大
                                                  + */
                                                  +Designer.addFunction("zoomIn", function(){
                                                  +	var current = Designer.config.scale;
                                                  +	var newScale = current + 0.1;
                                                  +	Designer.setZoomScale(newScale);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:缩小
                                                  + */
                                                  +Designer.addFunction("zoomOut", function(){
                                                  +	var current = Designer.config.scale;
                                                  +	var newScale = current - 0.1;
                                                  +	Designer.setZoomScale(newScale);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:设置缩放值
                                                  + */
                                                  +Designer.addFunction("setZoomScale", function(newScale){
                                                  +	if(newScale < 0.25 ){
                                                  +		newScale = 0.25;
                                                  +	}
                                                  +	if(newScale > 4){
                                                  +		newScale = 4;
                                                  +	}
                                                  +	Utils.hideLinkerCursor();
                                                  +	Designer.config.scale = newScale;
                                                  +	Designer.initialize.initCanvas();
                                                  +	for(var shapeId in Model.define.elements){
                                                  + 		var shape = Model.define.elements[shapeId];
                                                  +		Designer.painter.renderShape(shape);
                                                  + 	}
                                                  + 	//重新选中
                                                  +	var selectedIds = Utils.getSelectedIds();
                                                  +	var lockIds = Utils.getSelectedLockedIds();
                                                  +	Utils.mergeArray(selectedIds, lockIds);
                                                  +	Utils.unselect();
                                                  +	Utils.selectShape(selectedIds);
                                                  +	Utils.showLinkerCursor();
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设计器方法:对齐图形
                                                  + * left center right top middle bottom
                                                  + */
                                                  +Designer.addFunction("setShapeProps", function(props){
                                                  + 	var selected = Utils.getSelected();
                                                  + 	if(selected.length == 0 || !props){
                                                  + 		return;
                                                  + 	}
                                                  + 	var changed = [];
                                                  + 	var linkerIds = [];
                                                  + 	for(var i = 0; i < selected.length; i++){
                                                  +		var shape = selected[i];
                                                  +		if(shape.name != "linker"){
                                                  +			var related = Designer.op.changeShapeProps(shape, props);
                                                  +			changed.push(shape);
                                                  +			if(related && related.length){
                                                  +				Utils.mergeArray(linkerIds, related);
                                                  +			}
                                                  +		}
                                                  +	}
                                                  +	for(var i = 0; i < linkerIds.length; i++){
                                                  +		var id = linkerIds[i];
                                                  +		var linker = Model.getShapeById(id);
                                                  +		Designer.painter.renderLinker(linker, true);
                                                  +		changed.push(linker);
                                                  +	}
                                                  +	if(changed.length > 0){
                                                  +		Model.updateMulti(changed);
                                                  +	}
                                                  +	var selectedIds = Utils.getSelectedIds();
                                                  +	Utils.unselect();
                                                  +	Utils.selectShape(selectedIds);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 添加数据属性
                                                  + */
                                                  +Designer.addFunction("addDataAttribute", function(attr){
                                                  +	var selectedIds = Utils.getSelectedIds();
                                                  +	var shape = Model.getShapeById(selectedIds[0]);
                                                  +	if(!shape.dataAttributes){
                                                  +		shape.dataAttributes = [];
                                                  +	}
                                                  +	attr.id = Utils.newId();
                                                  +	attr.category = "custom";
                                                  +	shape.dataAttributes.push(attr);
                                                  +	MessageSource.doWithoutUpdateDock(function(){
                                                  +		Model.update(shape);
                                                  +	});
                                                  +});
                                                  +
                                                  +/**
                                                  + * 添加数据属性
                                                  + */
                                                  +Designer.addFunction("updateDataAttribute", function(newAttr){
                                                  +	var selectedIds = Utils.getSelectedIds();
                                                  +	var shape = Model.getShapeById(selectedIds[0]);
                                                  +	if(!shape.dataAttributes){
                                                  +		shape.dataAttributes = [];
                                                  +	}
                                                  +	var changed = false;
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if(attr.id == newAttr.id){
                                                  +			shape.dataAttributes[i] = newAttr;
                                                  +			changed = true;
                                                  +		}
                                                  +	}
                                                  +	if(!changed){
                                                  +		return;
                                                  +	}
                                                  +	MessageSource.doWithoutUpdateDock(function(){
                                                  +		Model.update(shape);
                                                  +	});
                                                  +	Designer.painter.renderShape(shape);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 通过ID获取一条数据属性
                                                  + */
                                                  +Designer.addFunction("getDataAttrById", function(attrId){
                                                  +	var selectedIds = Utils.getSelectedIds();
                                                  +	var shape = Model.getShapeById(selectedIds[0]);
                                                  +	if(!shape.dataAttributes){
                                                  +		shape.dataAttributes = [];
                                                  +	}
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if(attr.id == attrId){
                                                  +			return attr;
                                                  +		}
                                                  +	}
                                                  +	return null;
                                                  +});
                                                  +
                                                  +/**
                                                  + * 通过名字获取默认的数据属性
                                                  + */
                                                  +Designer.addFunction("getDefaultDataAttrByName", function(name){
                                                  +	var selectedIds = Utils.getSelectedIds();
                                                  +	var shape = Model.getShapeById(selectedIds[0]);
                                                  +	if(!shape.dataAttributes){
                                                  +		shape.dataAttributes = [];
                                                  +	}
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if(attr.category == "default" && attr.name == name){
                                                  +			return attr;
                                                  +		}
                                                  +	}
                                                  +	return null;
                                                  +});
                                                  +
                                                  +/**
                                                  + * 删除数据属性
                                                  + */
                                                  +Designer.addFunction("deleteDataAttribute", function(attrId){
                                                  +	var selectedIds = Utils.getSelectedIds();
                                                  +	var shape = Model.getShapeById(selectedIds[0]);
                                                  +	if(!shape.dataAttributes){
                                                  +		shape.dataAttributes = [];
                                                  +	}
                                                  +	var changed = false;
                                                  +	for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +		var attr = shape.dataAttributes[i];
                                                  +		if(attr.id == attrId){
                                                  +			shape.dataAttributes.splice(i, 1);
                                                  +			changed = true;
                                                  +		}
                                                  +	}
                                                  +	if(!changed){
                                                  +		return;
                                                  +	}
                                                  +	MessageSource.doWithoutUpdateDock(function(){
                                                  +		Model.update(shape);
                                                  +	});
                                                  +	Designer.painter.renderShape(shape);
                                                  +});
                                                  +
                                                  +/**
                                                  + * 设置分类
                                                  + */
                                                  +Designer.addFunction("setSchema", function(schemaCategories, callback){
                                                  +	// if(schemaCategories.length == 0){
                                                  +	// 	Schema.empty();
                                                  +	// 	Schema.init(true);
                                                  +	// 	Designer.initialize.initShapes();
                                                  +	// 	if(callback){
                                                  +	// 		callback();
                                                  +	// 	}
                                                  +	// 	return;
                                                  +	// }
                                                  +	Util.ajax({
                                                  +		url: "./w?sid="+$("#sid").val()+"&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_shape",
                                                  +		data: {
                                                  +			uuid:chartId,
                                                  +			methodId:methodId,
                                                  +			categories: schemaCategories,
                                                  +			wsId: $("#wsId").val()
                                                  +		},
                                                  +		type: "get",
                                                  +		success: function(data){
                                                  +		    var dataJson = JSON.parse(data);
                                                  +		    var shapes;
                                                  +		    var tempArray = [];
                                                  +		    for (var key in dataJson) {
                                                  +		        tempArray.push(key);
                                                  +		    }
                                                  +		    var commonShapeConfig = Model.define.commonShapeConfig;
                                                  +		    for (var i = 0; i < tempArray.length; i++) {
                                                  +		        if (tempArray[i] == "shapes") {
                                                  +		            shapes = dataJson[tempArray[i]];
                                                  +		        } else {
                                                  +		            var shapeConfigJson = JSON.parse(dataJson[tempArray[i]]);
                                                  +		            for (var shapeId in shapeConfigJson) {
                                                  +		                commonShapeConfig[shapeId] = shapeConfigJson[shapeId];
                                                  +		            }
                                                  +		        }
                                                  +		    }
                                                  +			Schema.empty();
                                                  +			eval(shapes);
                                                  +			addDefaultSchemaShape();
                                                  +			Schema.init(true);
                                                  +			Designer.initialize.initShapes();
                                                  +			if(callback){
                                                  +				callback();
                                                  +			}
                                                  +		}
                                                  +	});
                                                  +});
                                                  +
                                                  +function addDefaultSchemaShape() {
                                                  +	Schema.addCategory({
                                                  +		name : "standard",
                                                  +		text : "Standard",
                                                  +		dataAttributes : []
                                                  +	});
                                                  +	Schema.addShape({
                                                  +		name : "standardText",
                                                  +		title : "",
                                                  +		text : "",
                                                  +		category : "standard",
                                                  +		attribute : {
                                                  +			linkable : false
                                                  +		},
                                                  +		props : {
                                                  +			w : 160,
                                                  +			h : 40
                                                  +		},
                                                  +		anchors : [],
                                                  +		textBlock : {
                                                  +			x : 0,
                                                  +			y : 0,
                                                  +			w : "w",
                                                  +			h : "h"
                                                  +		},
                                                  +		path : [ {
                                                  +			lineStyle : {
                                                  +				lineWidth : 0
                                                  +			},
                                                  +			fillStyle : {
                                                  +				type : "none"
                                                  +			},
                                                  +			actions : {
                                                  +				ref : "rectangle"
                                                  +			}
                                                  +		} ]
                                                  +	});
                                                  +	Schema.addShape({
                                                  +		name : "standardImage",
                                                  +		title : "",
                                                  +		text : "",
                                                  +		attribute : {
                                                  +			linkable : false,
                                                  +			editable : false,
                                                  +			visible : false
                                                  +		},
                                                  +		category : "standard",
                                                  +		props : {
                                                  +			w : 100,
                                                  +			h : 70
                                                  +		},
                                                  +		path : [ {
                                                  +			lineStyle : {
                                                  +				lineWidth : 0
                                                  +			},
                                                  +			actions : {
                                                  +				ref : "rectangle"
                                                  +			}
                                                  +		} ]
                                                  +	});
                                                  +	Schema.addShape({
                                                  +		name : "standardRectangle",
                                                  +		title : "",
                                                  +		text : "",
                                                  +		attribute : {
                                                  +			visible : false
                                                  +		},
                                                  +		category : "standard",
                                                  +		props : {
                                                  +			w : 100,
                                                  +			h : 70
                                                  +		},
                                                  +		path : [ {
                                                  +			actions : {
                                                  +				ref : "rectangle"
                                                  +			}
                                                  +		} ]
                                                  +	});
                                                  +}
                                                  +
                                                  +
                                                  +
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.methods.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.methods.js
                                                  new file mode 100644
                                                  index 00000000..be6822da
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.methods.js
                                                  @@ -0,0 +1 @@
                                                  +Designer.addFunction("open",function(definition){if(definition==""){return}if(typeof definition=="string"){eval("definition = "+definition)}$(".shape_box").remove();Model.define.elements={};Model.persistence.elements={};Model.define.page=definition.page;Model.define.processProperties=definition.processProperties;Model.define.processDocument=definition.processDocument;Model.define.uuid=definition.uuid;process.title=definition.title;Model.persistence.page=Utils.copy(definition.page);Designer.initialize.initCanvas();var shapes=definition.elements;var shapeCount=0;for(var shapeId in shapes){var shape=shapes[shapeId];if(shape.name!="linker"){Schema.initShapeFunctions(shape);Designer.painter.renderShape(shape);Model.add(shape,false)}shapeCount++}for(var shapeId in shapes){var shape=shapes[shapeId];if(shape.name=="linker"){Designer.painter.renderLinker(shape);Model.add(shape,false)}}if(shapeCount==0){Model.build()}Navigator.draw()});Designer.addFunction("selectAll",function(){var a=Model.define.elements;var b=[];for(var c in a){b.push(c)}Utils.selectShape(b)});Designer.addFunction("setFontStyle",function(d){var c=Utils.getSelected();if(c.length==0){return}for(var b=0;b<c.length;b++){var a=c[b];a.fontStyle=Utils.copy(a.fontStyle);if(typeof d.fontFamily!="undefined"){a.fontStyle.fontFamily=d.fontFamily}if(typeof d.size!="undefined"){a.fontStyle.size=d.size}if(typeof d.color!="undefined"){a.fontStyle.color=d.color}if(typeof d.bold!="undefined"){a.fontStyle.bold=d.bold}if(typeof d.italic!="undefined"){a.fontStyle.italic=d.italic}if(typeof d.underline!="undefined"){a.fontStyle.underline=d.underline}if(typeof d.textAlign!="undefined"){a.fontStyle.textAlign=d.textAlign}if(a.name=="linker"){Designer.painter.renderLinker(a)}else{if(typeof d.vAlign!="undefined"){a.fontStyle.vAlign=d.vAlign}Designer.painter.renderShape(a)}}Model.updateMulti(c)});Designer.addFunction("setShapeStyle",function(d){var c=Utils.getSelected();if(c.length==0){return}var e=[];for(var b=0;b<c.length;b++){var a=c[b];if(a.name!="linker"){a.shapeStyle=Utils.copy(a.shapeStyle);if(typeof d.alpha!="undefined"){a.shapeStyle.alpha=d.alpha}Designer.painter.renderShape(a);e.push(a)}}Model.updateMulti(e)});Designer.addFunction("setLineStyle",function(e){var d=Utils.getSelected();if(d.length==0){return}var c=Utils.getFamilyShapes(d);d=d.concat(c);for(var b=0;b<d.length;b++){var a=d[b];a.lineStyle=Utils.copy(a.lineStyle);if(typeof e.lineWidth!="undefined"){a.lineStyle.lineWidth=e.lineWidth}if(typeof e.lineColor!="undefined"){a.lineStyle.lineColor=e.lineColor}if(typeof e.lineStyle!="undefined"){a.lineStyle.lineStyle=e.lineStyle}if(a.name=="linker"){if(typeof e.beginArrowStyle!="undefined"){a.lineStyle.beginArrowStyle=e.beginArrowStyle;Schema.linkerDefaults.lineStyle.beginArrowStyle=e.beginArrowStyle}if(typeof e.endArrowStyle!="undefined"){a.lineStyle.endArrowStyle=e.endArrowStyle;Schema.linkerDefaults.lineStyle.endArrowStyle=e.endArrowStyle}if(a.lineStyle.lineWidth==0){a.lineStyle.lineWidth=1}Designer.painter.renderLinker(a)}else{Designer.painter.renderShape(a)}}Model.updateMulti(d)});Designer.addFunction("setFillStyle",function(f){var e=Utils.getSelected();if(e.length==0){return}e=Designer.events.push("settingFillStyle",e);if(e.length==0){return}var g=[];for(var c=0;c<e.length;c++){var a=e[c];if(a.name!="linker"){a.fillStyle=Utils.copy(a.fillStyle);var d=a.fillStyle.type;if(typeof f.type!="undefined"){b(a,f.type);d=f.type}if(typeof f.color!="undefined"){if(d=="solid"){a.fillStyle.color=f.color}else{if(d=="gradient"){a.fillStyle.beginColor=GradientHelper.getLighterColor(f.color);a.fillStyle.endColor=GradientHelper.getDarkerColor(f.color)}}}if(d=="gradient"){if(typeof f.beginColor!="undefined"){a.fillStyle.beginColor=f.beginColor}if(typeof f.endColor!="undefined"){a.fillStyle.endColor=f.endColor}if(typeof f.gradientType!="undefined"){a.fillStyle.gradientType=f.gradientType;if(f.gradientType=="linear"){delete a.fillStyle.radius;a.fillStyle.angle=0}else{delete a.fillStyle.angle;a.fillStyle.radius=0.75}}if(typeof f.radius!="undefined"){a.fillStyle.radius=f.radius}if(typeof f.angle!="undefined"){a.fillStyle.angle=f.angle}}if(d=="image"){if(typeof f.display!="undefined"){a.fillStyle.display=f.display}if(typeof f.fileId!="undefined"){a.fillStyle.fileId=f.fileId}if(typeof f.imageW!="undefined"){a.fillStyle.imageW=f.imageW}if(typeof f.imageH!="undefined"){a.fillStyle.imageH=f.imageH}}Designer.painter.renderShape(a);g.push(a)}}Model.updateMulti(g);function b(i,k){var h=i.fillStyle;if(h.type!=k){var l={type:k};if(k=="solid"){if(h.type=="gradient"){var j=GradientHelper.getDarkerColor(h.beginColor);l.color=j}else{l.color="255,255,255"}}else{if(k=="gradient"){var m=h.color;if(h.type!="solid"){m="255,255,255"}l.gradientType="linear";l.angle=0;l.beginColor=GradientHelper.getLighterColor(m);l.endColor=GradientHelper.getDarkerColor(m)}else{if(k=="image"){l.fileId="";l.display="fill";l.imageW=10;l.imageH=10}}}i.fillStyle=l}}});Designer.addFunction("setLinkerType",function(e){var d=Utils.getSelected();if(d.length==0){return}var f=[];for(var c=0;c<d.length;c++){var b=d[c];if(b.name=="linker"){b.linkerType=e;Designer.painter.renderLinker(b,true);f.push(b)}}Schema.linkerDefaults.linkerType=e;var a=Utils.getSelectedIds();if(a.length>1){Designer.painter.drawControls(a)}Model.updateMulti(f);Utils.showLinkerControls()});Designer.addFunction("matchSize",function(l){var c=Utils.getSelected();if(c.length==0||!l){return}var b=null;var h=null;var k=[];for(var e=0;e<c.length;e++){var g=c[e];if(g.name!="linker"){if(b==null||g.props.w>b){b=g.props.w}if(h==null||g.props.h>h){h=g.props.h}}}if(l.w=="auto"){l.w=b}if(l.h=="auto"){l.h=h}Utils.removeAnchors();var d=[];for(var e=0;e<c.length;e++){var g=c[e];if(g.name!="linker"){var j=Designer.op.changeShapeProps(g,l);Utils.showAnchors(g);Utils.mergeArray(k,j);d.push(g)}}for(var e=0;e<k.length;e++){var a=k[e];var f=Model.getShapeById(a);Designer.painter.renderLinker(f,true);d.push(f)}Designer.painter.drawControls(Utils.getSelectedIds());Model.updateMulti(d)});Designer.addFunction("alignShapes",function(c){var k=Utils.getSelected();if(k.length==0||!c){return}var d=Utils.getSelectedIds();var g=Utils.getControlBox(d);var b=[];Utils.removeAnchors();var e=[];for(var m=0;m<k.length;m++){var a=k[m];if(a.name!="linker"){e.push(a)}if(c=="left"){if(a.name!="linker"){var q=Utils.getShapeBox(a);var r={x:g.x-(q.x-a.props.x)};var l=Designer.op.changeShapeProps(a,r);Utils.showAnchors(a);Utils.mergeArray(b,l)}else{if(a.from.id==null&&a.to.id==null){var o=Utils.getLinkerBox(a);a.from.x-=(o.x-g.x);a.to.x-=(o.x-g.x);b.push(a.id)}}}else{if(c=="center"){var p=g.x+g.w/2;if(a.name!="linker"){var r={x:Math.round(p-a.props.w/2)};var l=Designer.op.changeShapeProps(a,r);Utils.showAnchors(a);Utils.mergeArray(b,l)}else{if(a.from.id==null&&a.to.id==null){var o=Utils.getLinkerBox(a);a.from.x+=Math.round(p-o.w/2-o.x);a.to.x+=Math.round(p-o.w/2-o.x);b.push(a.id)}}}else{if(c=="right"){var n=g.x+g.w;if(a.name!="linker"){var q=Utils.getShapeBox(a);var r={x:n-a.props.w-(a.props.x-q.x)};var l=Designer.op.changeShapeProps(a,r);Utils.showAnchors(a);Utils.mergeArray(b,l)}else{if(a.from.id==null&&a.to.id==null){var o=Utils.getLinkerBox(a);a.from.x+=(n-o.x-o.w);a.to.x+=(n-o.x-o.w);b.push(a.id)}}}else{if(c=="top"){if(a.name!="linker"){var q=Utils.getShapeBox(a);var r={y:g.y-(q.y-a.props.y)};var l=Designer.op.changeShapeProps(a,r);Utils.showAnchors(a);Utils.mergeArray(b,l)}else{if(a.from.id==null&&a.to.id==null){var o=Utils.getLinkerBox(a);a.from.y-=(o.y-g.y);a.to.y-=(o.y-g.y);b.push(a.id)}}}else{if(c=="middle"){var s=g.y+g.h/2;if(a.name!="linker"){var r={y:Math.round(s-a.props.h/2)};var l=Designer.op.changeShapeProps(a,r);Utils.showAnchors(a);Utils.mergeArray(b,l)}else{if(a.from.id==null&&a.to.id==null){var o=Utils.getLinkerBox(a);a.from.y+=Math.round(s-o.h/2-o.y);a.to.y+=Math.round(s-o.h/2-o.y);b.push(a.id)}}}else{if(c=="bottom"){var f=g.y+g.h;if(a.name!="linker"){var q=Utils.getShapeBox(a);var r={y:f-a.props.h-(a.props.y-q.y)};var l=Designer.op.changeShapeProps(a,r);Utils.showAnchors(a);Utils.mergeArray(b,l)}else{if(a.from.id==null&&a.to.id==null){var o=Utils.getLinkerBox(a);a.from.y+=(f-o.y-o.h);a.to.y+=(f-o.y-o.h);b.push(a.id)}}}}}}}}}for(var m=0;m<b.length;m++){var j=b[m];var h=Model.getShapeById(j);Designer.painter.renderLinker(h,true);e.push(h)}Designer.painter.drawControls(d);Model.updateMulti(e)});Designer.addFunction("distributeShapes",function(o){var f=Utils.getSelected();if(f.length==0||!o){return}var m=Utils.getSelectedIds();var l=Utils.getControlBox(m);var s=[];Utils.removeAnchors();var e=[];for(var g=0;g<f.length;g++){var n=f[g];if(n.name!="linker"){e.push(n)}}if(o=="h"){e.sort(function d(i,h){return i.props.x-h.props.x});var p=l.w;for(var g=0;g<e.length;g++){var n=e[g];p-=n.props.w}var a=p/(e.length-1);var c=l.x;for(var g=0;g<e.length;g++){var n=e[g];var r={x:c};var q=Designer.op.changeShapeProps(n,r);Utils.showAnchors(n);Utils.mergeArray(s,q);c+=(n.props.w+a)}}else{e.sort(function d(i,h){return i.props.y-h.props.y});var k=l.h;for(var g=0;g<e.length;g++){var n=e[g];k-=n.props.h}var a=k/(e.length-1);var c=l.y;for(var g=0;g<e.length;g++){var n=e[g];var r={y:c};var q=Designer.op.changeShapeProps(n,r);Utils.showAnchors(n);Utils.mergeArray(s,q);c+=(n.props.h+a)}}for(var g=0;g<s.length;g++){var b=s[g];var j=Model.getShapeById(b);Designer.painter.renderLinker(j,true);e.push(j)}Designer.painter.drawControls(m);Model.updateMulti(e)});Designer.addFunction("layerShapes",function(m){var h=Utils.getSelected();if(h.length==0||!m){return}h.sort(function c(r,i){return r.props.zindex-i.props.zindex});var b;if(m=="front"){b=Model.maxZIndex;for(var j=0;j<h.length;j++){var l=h[j];b+=1;l.props.zindex=b}}else{if(m=="forward"){var d=null;var q=null;for(var j=0;j<h.length;j++){var l=h[j];d=n(l);if(d!=null){q=l.props.zindex;break}}if(d==null){return}var k=d.props.zindex;var f=n(d);var p=k+1;if(f!=null){p=k+(f.props.zindex-k)/2}var g=p-q;for(var j=0;j<h.length;j++){var l=h[j];l.props.zindex+=g}}else{if(m=="back"){b=Model.orderList[0].zindex;for(var j=h.length-1;j>=0;j--){var l=h[j];b-=1;l.props.zindex=b}}else{if(m=="backward"){var a=null;var q=null;for(var j=0;j<h.length;j++){var l=h[j];a=e(l);if(a!=null){q=l.props.zindex;break}}if(a==null){return}var k=a.props.zindex;var o=e(a);var p=k-1;if(o!=null){p=k-(k-o.props.zindex)/2}var g=p-q;for(var j=0;j<h.length;j++){var l=h[j];l.props.zindex+=g}}}}}Model.updateMulti(h);function n(s){var v=Utils.getShapeBox(s);for(var u=0;u<Model.orderList.length;u++){var i=Model.orderList[u];if(i.zindex<=s.props.zindex||Utils.isSelected(i.id)){continue}var t=Model.getShapeById(i.id);var r=Utils.getShapeBox(t);if(Utils.rectCross(v,r)){return t}}return null}function e(s){var v=Utils.getShapeBox(s);for(var u=Model.orderList.length-1;u>=0;u--){var i=Model.orderList[u];if(i.zindex>=s.props.zindex||Utils.isSelected(i.id)){continue}var t=Model.getShapeById(i.id);var r=Utils.getShapeBox(t);if(Utils.rectCross(v,r)){return t}}return null}});Designer.addFunction("group",function(){var d=Utils.getSelected();if(d.length<2){return}var c=Utils.newId();for(var b=0;b<d.length;b++){var a=d[b];a.group=c}Model.updateMulti(d)});Designer.addFunction("ungroup",function(){var c=Utils.getSelected();if(c.length==0){return}for(var b=0;b<c.length;b++){var a=c[b];a.group=null}Model.updateMulti(c)});Designer.addFunction("lockShapes",function(){var b=Utils.getSelectedIds();if(b.length==0){return}var d=[];for(var c=0;c<b.length;c++){var a=Model.getShapeById(b[c]);a.locked=true;d.push(a)}Utils.unselect();Utils.selectShape(b);Model.updateMulti(d)});Designer.addFunction("unlockShapes",function(){var b=Utils.getSelectedLockedIds();if(b.length==0){return}var d=[];for(var c=0;c<b.length;c++){var a=Model.getShapeById(b[c]);a.locked=false;d.push(a)}var e=Utils.getSelectedIds();Utils.unselect();Utils.selectShape(e);Model.updateMulti(d)});Designer.addFunction("setPageStyle",function(a){Model.updatePage(a)});Designer.addFunction("setReadonly",function(a){if(typeof a!="boolean"){return}if(a){$(".diagram_title").addClass("readonly");$("#shape_panel").addClass("readonly");$("#designer_viewport").addClass("readonly");Designer.hotkey.cancel();Designer.op.cancel();$(window).trigger("resize.designer");Dock.init();$("#dock .owner").hide();$(".dock_view").hide();Dock.currentView="";Designer.contextMenu.destroy()}});Designer.addFunction("zoomIn",function(){var a=Designer.config.scale;var b=a+0.1;Designer.setZoomScale(b)});Designer.addFunction("zoomOut",function(){var a=Designer.config.scale;var b=a-0.1;Designer.setZoomScale(b)});Designer.addFunction("setZoomScale",function(e){if(e<0.25){e=0.25}if(e>4){e=4}Utils.hideLinkerCursor();Designer.config.scale=e;Designer.initialize.initCanvas();for(var d in Model.define.elements){var b=Model.define.elements[d];Designer.painter.renderShape(b)}var a=Utils.getSelectedIds();var c=Utils.getSelectedLockedIds();Utils.mergeArray(a,c);Utils.unselect();Utils.selectShape(a);Utils.showLinkerCursor()});Designer.addFunction("setShapeProps",function(h){var b=Utils.getSelected();if(b.length==0||!h){return}var c=[];var k=[];for(var d=0;d<b.length;d++){var g=b[d];if(g.name!="linker"){var j=Designer.op.changeShapeProps(g,h);c.push(g);if(j&&j.length){Utils.mergeArray(k,j)}}}for(var d=0;d<k.length;d++){var a=k[d];var e=Model.getShapeById(a);Designer.painter.renderLinker(e,true);c.push(e)}if(c.length>0){Model.updateMulti(c)}var f=Utils.getSelectedIds();Utils.unselect();Utils.selectShape(f)});Designer.addFunction("addDataAttribute",function(a){var c=Utils.getSelectedIds();var b=Model.getShapeById(c[0]);if(!b.dataAttributes){b.dataAttributes=[]}a.id=Utils.newId();a.category="custom";b.dataAttributes.push(a);MessageSource.doWithoutUpdateDock(function(){Model.update(b)})});Designer.addFunction("updateDataAttribute",function(f){var c=Utils.getSelectedIds();var b=Model.getShapeById(c[0]);if(!b.dataAttributes){b.dataAttributes=[]}var e=false;for(var d=0;d<b.dataAttributes.length;d++){var a=b.dataAttributes[d];if(a.id==f.id){b.dataAttributes[d]=f;e=true}}if(!e){return}MessageSource.doWithoutUpdateDock(function(){Model.update(b)});Designer.painter.renderShape(b)});Designer.addFunction("getDataAttrById",function(e){var c=Utils.getSelectedIds();var b=Model.getShapeById(c[0]);if(!b.dataAttributes){b.dataAttributes=[]}for(var d=0;d<b.dataAttributes.length;d++){var a=b.dataAttributes[d];if(a.id==e){return a}}return null});Designer.addFunction("getDefaultDataAttrByName",function(d){var c=Utils.getSelectedIds();var b=Model.getShapeById(c[0]);if(!b.dataAttributes){b.dataAttributes=[]}for(var e=0;e<b.dataAttributes.length;e++){var a=b.dataAttributes[e];if(a.category=="default"&&a.name==d){return a}}return null});Designer.addFunction("deleteDataAttribute",function(e){var c=Utils.getSelectedIds();var b=Model.getShapeById(c[0]);if(!b.dataAttributes){b.dataAttributes=[]}var f=false;for(var d=0;d<b.dataAttributes.length;d++){var a=b.dataAttributes[d];if(a.id==e){b.dataAttributes.splice(d,1);f=true}}if(!f){return}MessageSource.doWithoutUpdateDock(function(){Model.update(b)});Designer.painter.renderShape(b)});Designer.addFunction("setSchema",function(schemaCategories,callback){Util.ajax({url:"./w?sid="+$("#sid").val()+"&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_shape",data:{uuid:chartId,methodId:methodId,categories:schemaCategories,wsId:$("#wsId").val()},type:"get",success:function(data){var dataJson=JSON.parse(data);var shapes;var tempArray=[];for(var key in dataJson){tempArray.push(key)}var commonShapeConfig=Model.define.commonShapeConfig;for(var i=0;i<tempArray.length;i++){if(tempArray[i]=="shapes"){shapes=dataJson[tempArray[i]]}else{var shapeConfigJson=JSON.parse(dataJson[tempArray[i]]);for(var shapeId in shapeConfigJson){commonShapeConfig[shapeId]=shapeConfigJson[shapeId]}}}Schema.empty();eval(shapes);addDefaultSchemaShape();Schema.init(true);Designer.initialize.initShapes();if(callback){callback()}}})});function addDefaultSchemaShape(){Schema.addCategory({name:"standard",text:"Standard",dataAttributes:[]});Schema.addShape({name:"standardText",title:"",text:"",category:"standard",attribute:{linkable:false},props:{w:160,h:40},anchors:[],textBlock:{x:0,y:0,w:"w",h:"h"},path:[{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"standardImage",title:"",text:"",attribute:{linkable:false,editable:false,visible:false},category:"standard",props:{w:100,h:70},path:[{lineStyle:{lineWidth:0},actions:{ref:"rectangle"}}]});Schema.addShape({name:"standardRectangle",title:"",text:"",attribute:{visible:false},category:"standard",props:{w:100,h:70},path:[{actions:{ref:"rectangle"}}]})};
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.plugs.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.plugs.js
                                                  new file mode 100644
                                                  index 00000000..2ee15ec3
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.plugs.js
                                                  @@ -0,0 +1 @@
                                                  +(function(b){b.getRelativePos=function(g,h,f){var a=f.offset();if(a==null){a={left:0,top:0}}return{x:g-a.left+f.scrollLeft(),y:h-a.top+f.scrollTop()}};/*b.fn.draggable=function(a){if(typeof a=="string"){if(a=="disable"){b(this).unbind("dragstart");b(this).unbind("mousedown.draggable")}return}var e={target:b(this)};var f=b.extend(e,a);b(this).unbind("dragstart").bind("dragstart",function(){return false});b(this).unbind("mousedown.draggable").bind("mousedown.draggable",function(d){b(document).bind("selectstart",function(){return false});if(f.onStart){f.onStart()}var h={x:d.pageX-f.target.offset().left,y:d.pageY-f.target.offset().top};var c=b(document);if(f.relative){c=f.relative}c.bind("mousemove.draggable",function(g){if(f.relative){var j=b.getRelativePos(g.pageX-h.x,g.pageY-h.y,f.relative);f.target.css({left:j.x+"px",top:j.y+"px"})}else{f.target.offset({left:g.pageX-h.x,top:g.pageY-h.y})}if(f.onDrag){f.onDrag.call(f.target,g.pageX,g.pageY)}});b(document).bind("mouseup.draggable",function(g){if(f.onDrop){f.onDrop.call(f.target,g.pageX,g.pageY)}b(document).unbind("selectstart");c.unbind("mousemove.draggable");b(document).unbind("mouseup.draggable")})})}*/})(jQuery);Number.prototype.toScale=function(){return this*Designer.config.scale};Number.prototype.restoreScale=function(){return this/Designer.config.scale};
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.ui.debug.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.ui.debug.js
                                                  new file mode 100644
                                                  index 00000000..92bdab97
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.ui.debug.js
                                                  @@ -0,0 +1,4521 @@
                                                  +/**
                                                  + * 用户界面JS
                                                  + */
                                                  +
                                                  +var UI = {
                                                  +	init : function() {
                                                  +		// 修改标题
                                                  +		$(".diagram_title").bind("click", function() {
                                                  +			if ($(this).hasClass("readonly")) {
                                                  +				return;
                                                  +			}
                                                  +			var title = $(this).text();
                                                  +			$(this).hide();
                                                  +			$("#title_container").append("<input type='text' maxlength='400'/>");
                                                  +			$("#title_container").children("input").val(title.replace(/(^\s+)|(\s+$)/g, "")).select();
                                                  +			$("#title_container").children("input").bind("blur",
                                                  +				function() {
                                                  +					changeTitle();
                                                  +				}).bind("keydown", function(e) {
                                                  +				if (e.keyCode == 13) {
                                                  +					changeTitle();
                                                  +				}
                                                  +			});
                                                  +		});
                                                  +		function changeTitle() {
                                                  +			var newTitle = $.trim($("#title_container").children("input").val());
                                                  +			newTitle = newTitle.replace(/(^\s+)|(\s+$)/g, "");
                                                  +			var oldTitle = $(".diagram_title").text();
                                                  +			oldTitle = oldTitle.replace(/(^\s+)|(\s+$)/g, "");
                                                  +			if (newTitle != oldTitle && chartId != "") {
                                                  +				var msgObj = {
                                                  +					action : "changeTitle",
                                                  +					title : newTitle
                                                  +				};
                                                  +				CLB.send(msgObj);
                                                  +			}
                                                  +			var title = newTitle != "" ? newTitle : oldTitle;
                                                  +			$("title").text(title);
                                                  +			$(".diagram_title").text(title).show();
                                                  +			$("#title_container").children("input").remove();
                                                  +			// 更新父级的相关数据
                                                  +			awsui.ajax.request({
                                                  +				url : './jd?cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_updatetitle&sid='
                                                  +					+ encodeURIComponent(sid)
                                                  +					+ '&uuid='
                                                  +					+ ruuid
                                                  +					+ '&title='
                                                  +					+ encodeURIComponent(title)
                                                  +					+ '&processDefId='
                                                  +					+ process.processDefId
                                                  +					+ '&appId='
                                                  +					+ appId,
                                                  +				async : false,// 同步,默认为异步
                                                  +				ok : function(msg) {
                                                  +					//同步设置文件属性中的流程名称
                                                  +					$("#file_attribute").contents().find("input[id='plName']").val(title);
                                                  +					try {
                                                  +						window.opener.parent.window.top.document.main_iframe.teamAppFrame.contentWindow._d157b007c785d2d988d3d81c8ddcb1b8.contentWindow.refresh();
                                                  +					} catch(e) {
                                                  +						try {
                                                  +							window.opener.parent.window.top.document.main_iframe.teamAppFrame.contentWindow._d157b007c785d2d988d3d81c8ddcb1b8.contentWindow.refresh();
                                                  +
                                                  +						} catch(e) {}
                                                  +					}
                                                  +					if (parent.repositoryTree) {
                                                  +						parent.repositoryTree.refreshNodeById({
                                                  +							id : ruuid,
                                                  +							name : title
                                                  +						});
                                                  +					}
                                                  +					if (parent.awsTabs) {
                                                  +						parent.awsTabs.setTitle(ruuid, title);
                                                  +					}
                                                  +					if(Model.define.coeProperties ){
                                                  +						Model.define.coeProperties.fileName = title;
                                                  +					}
                                                  +				}
                                                  +			})
                                                  +		}
                                                  +		/** ############################Toolbar列表############################ */
                                                  +		// 撤销
                                                  +		$("#bar_undo").button({
                                                  +			onClick : function() {
                                                  +				MessageSource.undo();
                                                  +			}
                                                  +		});
                                                  +		// 恢复
                                                  +		$("#bar_redo").button({
                                                  +			onClick : function() {
                                                  +				MessageSource.redo();
                                                  +			}
                                                  +		});
                                                  +		// 格式刷
                                                  +		$("#bar_brush").button({
                                                  +			onClick : function() {
                                                  +				if ($("#bar_brush").button("isSelected")) {
                                                  +					// 取消格式刷
                                                  +					$("#bar_brush").button("unselect");
                                                  +					$("#designer_op_help").hide();
                                                  +					$(document).unbind("keydown.cancelbrush");
                                                  +					Utils.selectCallback = null;
                                                  +				} else {
                                                  +					Designer.clipboard.brush();
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +		// 字体
                                                  +		$("#bar_font_family").button({
                                                  +			onMousedown : function() {
                                                  +				$("#font_list").dropdown({
                                                  +					target : $("#bar_font_family"),
                                                  +					onSelect : function(item) {
                                                  +						var font = item.text();
                                                  +						Designer.setFontStyle({
                                                  +							fontFamily : font
                                                  +						});
                                                  +						$("#bar_font_family").button("setText",
                                                  +							font);
                                                  +					}
                                                  +				});
                                                  +				// 选中
                                                  +				var family = $("#bar_font_family").text().trim();
                                                  +				$("#font_list").children().each(function() {
                                                  +					if ($(this).text() == family) {
                                                  +						$("#font_list").dropdown("select",
                                                  +							$(this));
                                                  +						return false;
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 字号
                                                  +		$("#bar_font_size").spinner({
                                                  +			min : 12,
                                                  +			max : 100,
                                                  +			step : 1,
                                                  +			unit : "px",
                                                  +			onChange : function(val) {
                                                  +				Designer.setFontStyle({
                                                  +					size : val
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		$("#bar_font_size").spinner("setValue", "13px");
                                                  +		// 加粗
                                                  +		$("#bar_font_bold").button({
                                                  +			onClick : function() {
                                                  +				var bold = !$("#bar_font_bold").button("isSelected");
                                                  +				Designer.setFontStyle({
                                                  +					bold : bold
                                                  +				});
                                                  +				$("#bar_font_bold").toggleClass("selected");
                                                  +			}
                                                  +		});
                                                  +		// 斜体
                                                  +		$("#bar_font_italic").button({
                                                  +			onClick : function() {
                                                  +				var italic = !$("#bar_font_italic")
                                                  +					.button("isSelected");
                                                  +				Designer.setFontStyle({
                                                  +					italic : italic
                                                  +				});
                                                  +				$("#bar_font_italic").toggleClass("selected");
                                                  +			}
                                                  +		});
                                                  +		// 下划线
                                                  +		$("#bar_font_underline").button({
                                                  +			onClick : function() {
                                                  +				var underline = !$("#bar_font_underline")
                                                  +					.button("isSelected");
                                                  +				Designer.setFontStyle({
                                                  +					underline : underline
                                                  +				});
                                                  +				$("#bar_font_underline").toggleClass("selected");
                                                  +			}
                                                  +		});
                                                  +		// 字体颜色
                                                  +		$("#bar_font_color").button({
                                                  +			onMousedown : function() {
                                                  +				var color = $("#bar_font_color").button("getColor");
                                                  +				$.colorpicker({
                                                  +					target : $("#bar_font_color"),
                                                  +					onSelect : function(color) {
                                                  +						Designer.setFontStyle({
                                                  +							color : color
                                                  +						});
                                                  +						$("#bar_font_color").button("setColor",
                                                  +							color)
                                                  +					},
                                                  +					color : color
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 文本对齐
                                                  +		$("#bar_font_align").button({
                                                  +			onMousedown : function() {
                                                  +				$("#font_align_list").dropdown({
                                                  +					target : $("#bar_font_align"),
                                                  +					onSelect : function(item) {
                                                  +						var align = {};
                                                  +						align[item.attr("cate")] = item
                                                  +							.attr("al");
                                                  +						Designer.setFontStyle(align);
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 填充
                                                  +		$("#bar_fill").button({
                                                  +			onMousedown : function() {
                                                  +				var color = $("#bar_fill").button("getColor");
                                                  +				$.colorpicker({
                                                  +					target : $("#bar_fill"),
                                                  +					onSelect : function(color) {
                                                  +						Designer.setFillStyle({
                                                  +							type : "solid",
                                                  +							color : color
                                                  +						});
                                                  +						$("#bar_fill").button("setColor", color)
                                                  +					},
                                                  +					color : color,
                                                  +					extend : "<div id='bar_fill_gradient' title='渐变' class='toolbar_button active'><div class='ico gradient'></div></div><!--div id='bar_fill_img' title='图片...' class='toolbar_button active'><div class='ico ico_img'></div></div--><!--div id='bar_fill_more' class='toolbar_button active'>More...</div-->"
                                                  +				});
                                                  +				$("#bar_fill_gradient").unbind().bind("click", function() {
                                                  +					Designer.setFillStyle({
                                                  +						type : "gradient"
                                                  +					});
                                                  +					$("#color_picker").dropdown("close");
                                                  +				});
                                                  +				$("#bar_fill_img").unbind().bind("click", function() {
                                                  +					UI.showImageSelect(function(fileId, w, h) {
                                                  +						Designer.setFillStyle({
                                                  +							type : "image",
                                                  +							fileId : fileId,
                                                  +							imageW : w,
                                                  +							imageH : h
                                                  +						});
                                                  +					});
                                                  +					$("#color_picker").dropdown("close");
                                                  +				});
                                                  +				$("#bar_fill_more").unbind().bind("click", function() {
                                                  +					Dock.showView("graphic");
                                                  +					$("#color_picker").dropdown("close");
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 线条颜色
                                                  +		$("#bar_line_color").button({
                                                  +			onMousedown : function() {
                                                  +				var color = $("#bar_line_color").button("getColor");
                                                  +				$.colorpicker({
                                                  +					target : $("#bar_line_color"),
                                                  +					onSelect : function(color) {
                                                  +						Designer.setLineStyle({
                                                  +							lineColor : color
                                                  +						});
                                                  +						$("#bar_line_color").button("setColor",
                                                  +							color)
                                                  +					},
                                                  +					color : color
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 线条宽度
                                                  +		$("#bar_line_width").button({
                                                  +			onMousedown : function() {
                                                  +				$("#line_width_list").dropdown({
                                                  +					target : $("#bar_line_width"),
                                                  +					onSelect : function(item) {
                                                  +						var width = parseInt(item.text());
                                                  +						Designer.setLineStyle({
                                                  +							lineWidth : width
                                                  +						});
                                                  +					}
                                                  +				});
                                                  +				// 选中
                                                  +				var width = Utils.getSelected()[0].lineStyle.lineWidth;
                                                  +				$("#line_width_list").children().each(function() {
                                                  +					if (parseInt($(this).text()) == width) {
                                                  +						$("#line_width_list").dropdown("select",
                                                  +							$(this));
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 线条样式
                                                  +		$("#bar_line_style").button({
                                                  +			onMousedown : function() {
                                                  +				$("#line_style_list").dropdown({
                                                  +					target : $("#bar_line_style"),
                                                  +					onSelect : function(item) {
                                                  +						var lineStyle = item.attr("line");
                                                  +						Designer.setLineStyle({
                                                  +							lineStyle : lineStyle
                                                  +						});
                                                  +					}
                                                  +				});
                                                  +				// 选中
                                                  +				var style = Utils.getSelected()[0].lineStyle.lineStyle;
                                                  +				var item = $("#line_style_list").children("li[line=" + style
                                                  +					+ "]");
                                                  +				$("#line_style_list").dropdown("select", item);
                                                  +			}
                                                  +		});
                                                  +		// 连接线类型
                                                  +		$("#bar_linkertype").button({
                                                  +			onMousedown : function() {
                                                  +				$("#line_type_list").dropdown({
                                                  +					target : $("#bar_linkertype"),
                                                  +					onSelect : function(item) {
                                                  +						var type = item.attr("tp");
                                                  +						Designer.setLinkerType(type);
                                                  +						var cls = item.children("div").attr("class");
                                                  +						$("#bar_linkertype").children("div:eq(0)").attr(
                                                  +							"class", cls);
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 开始箭头
                                                  +		$("#bar_beginarrow").button({
                                                  +			onMousedown : function() {
                                                  +				$("#beginarrow_list").dropdown({
                                                  +					target : $("#bar_beginarrow"),
                                                  +					onSelect : function(item) {
                                                  +						var arrow = item.attr("arrow");
                                                  +						Designer.setLineStyle({
                                                  +							beginArrowStyle : arrow
                                                  +						});
                                                  +						var cls = item.children("div").attr("class");
                                                  +						$("#bar_beginarrow").children("div:eq(0)").attr(
                                                  +							"class", cls);
                                                  +					}
                                                  +				});
                                                  +				// 选中
                                                  +				var style = Utils.getSelectedLinkers()[0].lineStyle.beginArrowStyle;
                                                  +				var item = $("#beginarrow_list").children("li[arrow=" + style
                                                  +					+ "]");
                                                  +				$("#beginarrow_list").dropdown("select", item);
                                                  +			}
                                                  +		});
                                                  +		// 结束箭头
                                                  +		$("#bar_endarrow").button({
                                                  +			onMousedown : function() {
                                                  +				$("#endarrow_list").dropdown({
                                                  +					target : $("#bar_endarrow"),
                                                  +					onSelect : function(item) {
                                                  +						var arrow = item.attr("arrow");
                                                  +						Designer.setLineStyle({
                                                  +							endArrowStyle : arrow
                                                  +						});
                                                  +						var cls = item.children("div").attr("class");
                                                  +						$("#bar_endarrow").children("div:eq(0)").attr("class",
                                                  +							cls);
                                                  +					}
                                                  +				});
                                                  +				// 选中
                                                  +				var style = Utils.getSelectedLinkers()[0].lineStyle.endArrowStyle;
                                                  +				var item = $("#endarrow_list").children("li[arrow=" + style
                                                  +					+ "]");
                                                  +				$("#endarrow_list").dropdown("select", item);
                                                  +			}
                                                  +		});
                                                  +		// 顶层底层
                                                  +		$("#bar_front").button({
                                                  +			onClick : function() {
                                                  +				Designer.layerShapes("front");
                                                  +			}
                                                  +		});
                                                  +		$("#bar_back").button({
                                                  +			onClick : function() {
                                                  +				Designer.layerShapes("back");
                                                  +			}
                                                  +		});
                                                  +		// 加解锁
                                                  +		$("#bar_lock").button({
                                                  +			onClick : function() {
                                                  +				Designer.lockShapes();
                                                  +			}
                                                  +		});
                                                  +		$("#bar_unlock").button({
                                                  +			onClick : function() {
                                                  +				Designer.unlockShapes();
                                                  +			}
                                                  +		});
                                                  +		$("#bar_link").button({
                                                  +			onClick : function() {
                                                  +				UI.showInsertLink();
                                                  +			}
                                                  +		});
                                                  +		$("#bar_risk").button({
                                                  +			onClick : function() {
                                                  +				UI.showRiskDlg();
                                                  +			}
                                                  +		});
                                                  +		$("#bar_importShape").button({
                                                  +			onClick : function() {
                                                  +				UI.showImportShapeDlg();
                                                  +			}
                                                  +		});
                                                  +		$("#bar_import").button({
                                                  +			onClick : function() {
                                                  +				UI.showImportDlg();
                                                  +			}
                                                  +		});
                                                  +		$("#bar_upfile").button({
                                                  +			onClick: function() {
                                                  +				openUpFile()
                                                  +			}
                                                  +		});
                                                  +		$("#bar_activityNo").button({//节点按照编号排序
                                                  +			onClick: function() {
                                                  +				UI.activityNoDlg();
                                                  +			}
                                                  +		});
                                                  +		/** ##############AWS新增工具栏菜单开始############# */
                                                  +		// 排列
                                                  +		$("#bar_arrange").button({
                                                  +			onMousedown : function() {
                                                  +				$("#bar_list_arrange").dropdown({
                                                  +					target : $("#bar_arrange"),
                                                  +					onSelect : function(item) {
                                                  +						menuSelected(item);
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 视图
                                                  +		$("#bar_view").button({
                                                  +			onMousedown : function() {
                                                  +				$("#bar_list_view").dropdown({
                                                  +					target : $("#bar_view"),
                                                  +					onSelect : function(item) {
                                                  +						menuSelected(item);
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 插入
                                                  +		/*
                                                  +		 * $("#bar_insert").button({ onMousedown : function() {
                                                  +		 * $("#bar_list_insert").dropdown({ target : $("#bar_insert"), onSelect :
                                                  +		 * function(item) { menuSelected(item); } }); } });
                                                  +		 */
                                                  +		/** ##############AWS新增工具栏菜单结束############# */
                                                  +
                                                  +		/** ##############菜单列表############## */
                                                  +		$("#menu_bar").children().bind("mousedown", function(e) {
                                                  +			var tar = $(this);
                                                  +			showMenuBarList(tar);
                                                  +			e.stopPropagation();
                                                  +		});
                                                  +		$("#menu_bar").children().bind("mouseenter", function() {
                                                  +			var tar = $(this);
                                                  +			if ($("#ui_container").find(".options_menu:visible").length > 0) {
                                                  +				showMenuBarList(tar);
                                                  +			}
                                                  +		});
                                                  +
                                                  +		function showMenuBarList(menuBar) {
                                                  +			var menuId = menuBar.attr("menu");
                                                  +			// 只读
                                                  +			if (menuBar.hasClass("readonly")) {
                                                  +				return;
                                                  +			}
                                                  +			$("#" + menuId).dropdown({
                                                  +				target : menuBar,
                                                  +				onSelect : function(item) {
                                                  +					menuSelected(item);
                                                  +				}
                                                  +			});
                                                  +			if (menuId == "bar_list_page") {
                                                  +				if (Model.define.page.showGrid) {
                                                  +					$("#bar_list_page").dropdown(
                                                  +						"select",
                                                  +						$("#bar_list_page")
                                                  +							.children("li[ac=set_page_showgrid]"));
                                                  +				} else {
                                                  +					$("#bar_list_page").dropdown(
                                                  +						"unselect",
                                                  +						$("#bar_list_page")
                                                  +							.children("li[ac=set_page_showgrid]"));
                                                  +				}
                                                  +				var item = $("#bar_list_pagesize li[w="
                                                  +					+ Model.define.page.width + "][h="
                                                  +					+ Model.define.page.height + "]");
                                                  +				if (item.length > 0) {
                                                  +					$("#bar_list_pagesize").dropdown("select", item);
                                                  +				} else {
                                                  +					$("#bar_list_pagesize").dropdown("select",
                                                  +						$("#page_size_custom"));
                                                  +				}
                                                  +				$("#page_size_w").spinner("setValue",
                                                  +					Model.define.page.width + "px");
                                                  +				$("#page_size_h").spinner("setValue",
                                                  +					Model.define.page.height + "px");
                                                  +				item = $("#bar_list_padding").children("li[p="
                                                  +					+ Model.define.page.padding + "]");
                                                  +				$("#bar_list_padding").dropdown("select", item);
                                                  +				item = $("#bar_list_gridsize").children("li[s="
                                                  +					+ Model.define.page.gridSize + "]");
                                                  +				$("#bar_list_gridsize").dropdown("select", item);
                                                  +			} else if (menuId == "bar_list_view") {
                                                  +				var item = $("#bar_list_view").children(".static[zoom='"
                                                  +					+ Designer.config.scale + "']");
                                                  +				if (item.length) {
                                                  +					$("#bar_list_page").dropdown("select", item);
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +
                                                  +		function menuSelected(item) {
                                                  +			var action = item.attr("ac");
                                                  +			// 编辑菜单
                                                  +			if (action == "rename") {
                                                  +				$(".diagram_title").trigger("click");
                                                  +			} else if (action == "close") {
                                                  +				if (parent.closeTabById) {
                                                  +					parent.closeTabById(chartId);
                                                  +				} else {
                                                  +					window.close();
                                                  +				}
                                                  +
                                                  +			} else if (action == "saveAs") {
                                                  +				UI.showSaveAs();
                                                  +			} else if (action == "preview") {//在线预览流程图片
                                                  +				UI.doPreview();
                                                  +			} else if (action == "saveImage") {//生成图片和缩略图
                                                  +				UI.saveImage();
                                                  +			} else if (action == "versionCompare") {
                                                  +				UI.showVersionCompare();
                                                  +			} else if (action == "output") {// 导出流程手册并预览
                                                  +				UI.doOutputProcess();
                                                  +			} else if (action == "export") {
                                                  +				$("#export_dialog").dlg();
                                                  +			} else if (action == "processExport") {
                                                  +				UI.processExport();
                                                  +			} else if (action == "undo") {
                                                  +				MessageSource.undo();
                                                  +			} else if (action == "redo") {
                                                  +				MessageSource.redo();
                                                  +			} else if (action == "cut") {
                                                  +				Designer.clipboard.cut();
                                                  +			} else if (action == "copy") {
                                                  +				Designer.clipboard.copy();
                                                  +			} else if (action == "paste") {
                                                  +				Designer.clipboard.paste();
                                                  +			} else if (action == "duplicate") {
                                                  +				Designer.clipboard.duplicate();
                                                  +			} else if (action == "brush") {
                                                  +				Designer.clipboard.brush();
                                                  +			} else if (action == "selectall") {
                                                  +				Designer.selectAll();
                                                  +			} else if (action == "openNewPage") {
                                                  +				UI.openNewPage();//新页面打开
                                                  +			} else if (action == "batchreplace") {
                                                  +				UI.batchReplace();
                                                  +			} else if (action == "delete") {
                                                  +				Designer.op.removeShape();
                                                  +				// 视图缩放
                                                  +			} else if (action == "zoom") {
                                                  +				var zoom = item.attr("zoom");
                                                  +				if (zoom == "in") {
                                                  +					Designer.zoomIn();
                                                  +				} else if (zoom == "out") {
                                                  +					Designer.zoomOut();
                                                  +				} else {
                                                  +					var zoomScale = parseFloat(zoom);
                                                  +					Designer.setZoomScale(zoomScale);
                                                  +				}
                                                  +				// 插入
                                                  +			} else if (action == "insert") {
                                                  +				var insertType = item.attr("in");
                                                  +				if (insertType == "text") {
                                                  +					Designer.op.changeState("creating_free_text");
                                                  +				} else if (insertType == "image") {
                                                  +					UI.showImageSelect(function(fileId, w, h) {
                                                  +						UI.insertImage(fileId, w, h);
                                                  +					});
                                                  +				} else if (insertType == "line") {
                                                  +					Designer.op.changeState("creating_free_linker");
                                                  +				}
                                                  +				// 页面
                                                  +			} else if (action == "set_page_size") {
                                                  +				var w = parseInt(item.attr("w"));
                                                  +				var h = parseInt(item.attr("h"));
                                                  +				Designer.setPageStyle({
                                                  +					width: w,
                                                  +					height: h
                                                  +				});
                                                  +			} else if (action == "set_page_padding") {
                                                  +				var p = parseInt(item.attr("p"));
                                                  +				Designer.setPageStyle({
                                                  +					padding: p
                                                  +				})
                                                  +			} else if (action == "set_page_showgrid") {
                                                  +				if (item.menuitem("isSelected")) {
                                                  +					item.menuitem("unselect");
                                                  +					Designer.setPageStyle({
                                                  +						showGrid: false
                                                  +					});
                                                  +				} else {
                                                  +					item.menuitem("select");
                                                  +					Designer.setPageStyle({
                                                  +						showGrid: true
                                                  +					});
                                                  +				}
                                                  +			} else if (action == "set_page_gridsize") {
                                                  +				var s = parseInt(item.attr("s"));
                                                  +				Designer.setPageStyle({
                                                  +					gridSize: s
                                                  +				})
                                                  +			}
                                                  +			// 排列
                                                  +			else if (action == "front") {
                                                  +				Designer.layerShapes("front");
                                                  +			} else if (action == "back") {
                                                  +				Designer.layerShapes("back");
                                                  +			} else if (action == "forward") {
                                                  +				Designer.layerShapes("forward");
                                                  +			} else if (action == "backward") {
                                                  +				Designer.layerShapes("backward");
                                                  +			} else if (action == "align_shape") {
                                                  +				var align = item.attr("al");
                                                  +				Designer.alignShapes(align);
                                                  +			} else if (action == "distribute_shape") {
                                                  +				var type = item.attr("dis");
                                                  +				Designer.distributeShapes(type);
                                                  +			} else if (action == "match_size") {
                                                  +				if (item.attr("custom")) {
                                                  +					Dock.showView("metric");
                                                  +				} else {
                                                  +					var type = {};
                                                  +					var w = item.attr("w");
                                                  +					var h = item.attr("h");
                                                  +					if (w) {
                                                  +						type.w = w;
                                                  +					}
                                                  +					if (h) {
                                                  +						type.h = h;
                                                  +					}
                                                  +					Designer.matchSize(type);
                                                  +				}
                                                  +			} else if (action == "lock") {
                                                  +				Designer.lockShapes();
                                                  +			} else if (action == "unlock") {
                                                  +				Designer.unlockShapes();
                                                  +			} else if (action == "group") {
                                                  +				Designer.group();
                                                  +			} else if (action == "ungroup") {
                                                  +				Designer.ungroup();
                                                  +			} else if (action == "hotkey") {
                                                  +				UI.showHotKey();
                                                  +			} else if (action == "feedback") {
                                                  +				UI.showFeedBack();
                                                  +			} else if (action == "getting_started") {
                                                  +				UI.gettingStart();
                                                  +			}
                                                  +		}
                                                  +		$("#page_size_w").spinner({
                                                  +			min : 200,
                                                  +			unit : "px",
                                                  +			step : 100,
                                                  +			onChange : function(val) {
                                                  +				Designer.setPageStyle({
                                                  +					width : val
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		$("#page_size_h").spinner({
                                                  +			min : 200,
                                                  +			unit : "px",
                                                  +			step : 100,
                                                  +			onChange : function(val) {
                                                  +				Designer.setPageStyle({
                                                  +					height : val
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 给设置页面背景色,放一个colorpicker
                                                  +		var pickerHtml = $("#color_picker").html();
                                                  +		var newPicker = $("<div class='menu color_picker extend_menu'>"
                                                  +			+ pickerHtml + "</div>").appendTo($("#bar_page_color"));
                                                  +		newPicker.css("right", "-179px");
                                                  +		newPicker.children(".color_items").children("div").unbind().bind(
                                                  +			"click", function() {
                                                  +				var color = $(this).css("background-color");
                                                  +				color = color.replace(/\s/g, "");
                                                  +				color = color.substring(4, color.length - 1);
                                                  +				Designer.setPageStyle({
                                                  +					backgroundColor : color
                                                  +				});
                                                  +				$("#bar_list_page").dropdown("close");
                                                  +			});
                                                  +		// 抛出事件,控制状态
                                                  +		Designer.events.push("selectChanged", 0);
                                                  +		Designer.events.push("clipboardChanged", 0);
                                                  +		Designer.events.push("undoStackChanged", 0);
                                                  +		Designer.events.push("redoStackChanged", 0);
                                                  +	},
                                                  +	/**
                                                  +	 * 更新UI
                                                  +	 */
                                                  +	update : function() {
                                                  +		var selectedIds = Utils.getSelectedIds();
                                                  +		var count = selectedIds.length;
                                                  +		var linkerIds = Utils.getSelectedLinkerIds();
                                                  +		var linkerCount = linkerIds.length;
                                                  +		var shapeIds = Utils.getSelectedShapeIds();
                                                  +		var shapeCount = shapeIds.length;
                                                  +		var lockedCount = Utils.getSelectedLockedIds().length;
                                                  +		var groupCount = Utils.getSelectedGroups().length;
                                                  +		// 排列菜单
                                                  +		var arrangeMenu = $("#bar_list_arrange");
                                                  +		if (count == 0) {
                                                  +			$(".toolbar").find(".selected").removeClass("selected");
                                                  +			// 没有选中,让某些按钮失效
                                                  +			if ($("#designer_op_help").is(":visible")) {
                                                  +				$("#bar_brush").button("enable");
                                                  +				$("#bar_brush").button("select");
                                                  +			} else {
                                                  +				$("#bar_brush").button("disable");
                                                  +			}
                                                  +			// 字体
                                                  +			$("#bar_font_family").button("disable");
                                                  +			$("#bar_font_size").button("disable");
                                                  +			$("#bar_font_bold").button("disable");
                                                  +			$("#bar_font_italic").button("disable");
                                                  +			$("#bar_font_underline").button("disable");
                                                  +			$("#bar_font_color").button("disable");
                                                  +			$("#bar_font_align").button("disable");
                                                  +			// 线条
                                                  +			$("#bar_line_color").button("disable");
                                                  +			$("#bar_line_width").button("disable");
                                                  +			$("#bar_line_style").button("disable");
                                                  +			// 顶层底层
                                                  +			$("#bar_front").button("disable");
                                                  +			$("#bar_back").button("disable");
                                                  +			// 锁定
                                                  +			$("#bar_lock").button("disable");
                                                  +			// 编辑菜单
                                                  +			var editMenu = $("#bar_list_edit");
                                                  +			editMenu.children("li[ac=cut]").menuitem("disable");
                                                  +			editMenu.children("li[ac=copy]").menuitem("disable");
                                                  +			editMenu.children("li[ac=duplicate]").menuitem("disable");
                                                  +			editMenu.children("li[ac=brush]").menuitem("disable");
                                                  +			editMenu.children("li[ac=delete]").menuitem("disable");
                                                  +			// 排列菜单
                                                  +			arrangeMenu.children("li[ac=front]").menuitem("disable");
                                                  +			arrangeMenu.children("li[ac=back]").menuitem("disable");
                                                  +			arrangeMenu.children("li[ac=forward]").menuitem("disable");
                                                  +			arrangeMenu.children("li[ac=backward]").menuitem("disable");
                                                  +			arrangeMenu.children("li[ac=lock]").menuitem("disable");
                                                  +			// 节点编号排序
                                                  +			$("#bar_activityNo").button("enable");
                                                  +			$("#bar_activityNo div").removeClass('extend_activityNoDisable');
                                                  +			$("#bar_activityNo div").addClass('extend_activityNo');
                                                  +		} else {
                                                  +			if (editable) {
                                                  +				// 选中,让某些按钮激活
                                                  +				$("#bar_brush").button("enable");
                                                  +				if ($("#designer_op_help").is(":visible")) {
                                                  +					$("#bar_brush").button("select");
                                                  +				}
                                                  +				$("#bar_font_family").button("enable");
                                                  +				$("#bar_font_size").button("enable");
                                                  +				$("#bar_font_bold").button("enable");
                                                  +				$("#bar_font_italic").button("enable");
                                                  +				$("#bar_font_underline").button("enable");
                                                  +				$("#bar_font_color").button("enable");
                                                  +				$("#bar_font_align").button("enable");
                                                  +				// 线条
                                                  +				$("#bar_line_color").button("enable");
                                                  +				$("#bar_line_width").button("enable");
                                                  +				$("#bar_line_style").button("enable");
                                                  +				// 顶层底层
                                                  +				$("#bar_front").button("enable");
                                                  +				$("#bar_back").button("enable");
                                                  +				// 锁定
                                                  +				$("#bar_lock").button("enable");
                                                  +				// 编辑菜单
                                                  +				var editMenu = $("#bar_list_edit");
                                                  +				editMenu.children("li[ac=cut]").menuitem("enable");
                                                  +				editMenu.children("li[ac=copy]").menuitem("enable");
                                                  +				editMenu.children("li[ac=duplicate]").menuitem("enable");
                                                  +				editMenu.children("li[ac=brush]").menuitem("enable");
                                                  +				editMenu.children("li[ac=delete]").menuitem("enable");
                                                  +				// 排列菜单
                                                  +				arrangeMenu.children("li[ac=front]").menuitem("enable");
                                                  +				arrangeMenu.children("li[ac=back]").menuitem("enable");
                                                  +				arrangeMenu.children("li[ac=forward]").menuitem("enable");
                                                  +				arrangeMenu.children("li[ac=backward]").menuitem("enable");
                                                  +				arrangeMenu.children("li[ac=lock]").menuitem("enable");
                                                  +				// 设置Toolbar样式
                                                  +				var shape = Model.getShapeById(selectedIds[0]);
                                                  +				$("#bar_font_family").button("setText", shape.fontStyle.fontFamily);
                                                  +				$("#bar_font_size")
                                                  +					.spinner("setValue", shape.fontStyle.size + "px");
                                                  +				if (shape.fontStyle.bold) {
                                                  +					$("#bar_font_bold").button("select");
                                                  +				} else {
                                                  +					$("#bar_font_bold").button("unselect");
                                                  +				}
                                                  +				if (shape.fontStyle.italic) {
                                                  +					$("#bar_font_italic").button("select");
                                                  +				} else {
                                                  +					$("#bar_font_italic").button("unselect");
                                                  +				}
                                                  +				if (shape.fontStyle.underline) {
                                                  +					$("#bar_font_underline").button("select");
                                                  +				} else {
                                                  +					$("#bar_font_underline").button("unselect");
                                                  +				}
                                                  +				$("#bar_font_color").button("setColor", shape.fontStyle.color);
                                                  +				$("#bar_line_color").button("setColor", shape.lineStyle.lineColor);
                                                  +
                                                  +				// 节点编号排序
                                                  +				$("#bar_activityNo").button("disable");
                                                  +				$("#bar_activityNo div").removeClass('extend_activityNo');
                                                  +				$("#bar_activityNo div").addClass('extend_activityNoDisable');
                                                  +			}
                                                  +		}
                                                  +
                                                  +		// AWS增加的按钮需要被控制开始
                                                  +		if (count == 0) {
                                                  +			$("#toolbar-data-attr").button("disable");
                                                  +			// 节点属性
                                                  +			$("#toolbar-data-attr").unbind("click");
                                                  +			$("#bar_arrange").button("disable");
                                                  +		} else {
                                                  +			$("#toolbar-data-attr").button("enable");
                                                  +			// 节点属性
                                                  +			$("#toolbar-data-attr").bind("click", function() {
                                                  +				showPropertiesDialog();
                                                  +			});
                                                  +			$("#bar_arrange").button("enable");
                                                  +		}
                                                  +		// AWS增加的按钮需要被控制完毕
                                                  +
                                                  +		// 通过图形的数量,判读是否可以填充
                                                  +		if (shapeCount == 0) {
                                                  +			$("#bar_fill").button("disable");
                                                  +			$("#toolbar-shape-attr").button("disable"); //形状属性
                                                  +		} else {
                                                  +			if (editable) {
                                                  +				$("#bar_fill").button("enable");
                                                  +			}
                                                  +			var shape = Model.getShapeById(shapeIds[0]);
                                                  +			// 图形填充
                                                  +			if (shape.fillStyle.type == "solid") {
                                                  +				$("#bar_fill").button("setColor", shape.fillStyle.color);
                                                  +			} else if (shape.fillStyle.type == "gradient") {
                                                  +				$("#bar_fill").button("setColor", shape.fillStyle.endColor);
                                                  +			}
                                                  +			if(shapeCount == 1 && shape.name == BPMN_TYPE_USER_TASK) { //控制值选择一个人工任务时形状属性可用
                                                  +				$("#toolbar-shape-attr").button("enable"); //形状属性
                                                  +			} else {
                                                  +				$("#toolbar-shape-attr").button("disable"); //形状属性
                                                  +			}
                                                  +		}
                                                  +		if (shapeCount != 1) {
                                                  +			$("#bar_link, #bar_risk").button("disable");
                                                  +			$("#dock_btn_shapeConfig").button("disable");
                                                  +			$("#dock_btn_shapeConfig").bind('click', function() {
                                                  +				$.simpleAlert("请选择形状");
                                                  +			});
                                                  +		} else {
                                                  +			$("#dock_btn_shapeConfig").unbind('click');
                                                  +			$("#dock_btn_shapeConfig").button("enable");
                                                  +			if (editable) {
                                                  +				$("#bar_link").button("enable");
                                                  +			}
                                                  +			// 关联/推送文件不显示
                                                  +			if ($('#bar_rmark').length == 0 && $('#bar_cancel_aws_correlate').length == 0) {
                                                  +				$("#bar_risk").button("enable");
                                                  +			} else {
                                                  +				$("#bar_risk").button("disable");
                                                  +			}
                                                  +		}
                                                  +		// 通过连接线的数量,判断是否可以修改箭头等
                                                  +		if (linkerCount == 0) {
                                                  +			$("#bar_linkertype").button("disable");
                                                  +			$("#bar_beginarrow").button("disable");
                                                  +			$("#bar_endarrow").button("disable");
                                                  +		} else {
                                                  +			$("#bar_linkertype").button("enable");
                                                  +			$("#bar_beginarrow").button("enable");
                                                  +			$("#bar_endarrow").button("enable");
                                                  +			var shape = Model.getShapeById(linkerIds[0]);
                                                  +			// 设置Toolbar的线条样式
                                                  +			$("#bar_linkertype").children("div:eq(0)").attr("class",
                                                  +				"ico linkertype_" + shape.linkerType.toLowerCase());
                                                  +			if ( typeof shape.lineStyle.beginArrowStyle != "undefined") {
                                                  +				$("#bar_beginarrow").children("div:eq(0)").attr(
                                                  +					"class",
                                                  +					"ico ico_arrow larrow_"
                                                  +					+ shape.lineStyle.beginArrowStyle.toLowerCase());
                                                  +			}
                                                  +			if ( typeof shape.lineStyle.endArrowStyle != "undefined") {
                                                  +				$("#bar_endarrow").children("div:eq(0)").attr(
                                                  +					"class",
                                                  +					"ico ico_arrow rarrow_"
                                                  +					+ shape.lineStyle.endArrowStyle.toLowerCase());
                                                  +			}
                                                  +
                                                  +
                                                  +		}
                                                  +		// 通过锁定的数量,判断是否可以解除锁定
                                                  +		if (lockedCount == 0) {
                                                  +			$("#bar_unlock").button("disable");
                                                  +			arrangeMenu.children("li[ac=unlock]").menuitem("disable");
                                                  +		} else {
                                                  +			$("#bar_unlock").button("enable");
                                                  +			arrangeMenu.children("li[ac=unlock]").menuitem("enable");
                                                  +		}
                                                  +		// 是否激活组合、对齐,条件是选中图形要不少于2个
                                                  +		if (count < 2) {
                                                  +			arrangeMenu.children("li[ac=group]").menuitem("disable");
                                                  +			$("#bar_arrange_align").menuitem("disable");
                                                  +		} else {
                                                  +			arrangeMenu.children("li[ac=group]").menuitem("enable");
                                                  +			$("#bar_arrange_align").menuitem("enable");
                                                  +		}
                                                  +		// 是否激活匹配大小,条件是选中形状要不少于2个
                                                  +		if (shapeCount < 2) {
                                                  +			$("#bar_arrange_match").menuitem("disable");
                                                  +		} else {
                                                  +			$("#bar_arrange_match").menuitem("enable");
                                                  +		}
                                                  +		// 是否激活排列图形菜单,条件是选中图形要不少于3个
                                                  +		if (count < 3) {
                                                  +			$("#bar_arrange_dist").menuitem("disable");
                                                  +		} else {
                                                  +			$("#bar_arrange_dist").menuitem("enable");
                                                  +		}
                                                  +		// 通过组合的数量,判断是否可以取消组合
                                                  +		if (groupCount == 0) {
                                                  +			arrangeMenu.children("li[ac=ungroup]").menuitem("disable");
                                                  +		} else {
                                                  +			arrangeMenu.children("li[ac=ungroup]").menuitem("enable");
                                                  +		}
                                                  +		//文件串联分析工具在未选择图形的时候有效
                                                  +		if($("#dock_btn_eteanalysis").length != 0) {
                                                  +			if (count == 0) {
                                                  +				$("#dock_btn_eteanalysis").find(".awsui-iconfont").css("color","black");
                                                  +				$("#dock_btn_eteanalysis").button("enable");
                                                  +				$("#dock_btn_eteanalysis").removeAttr("onclick");
                                                  +				$("#dock_btn_eteanalysis").off("click").on("click", function(){
                                                  +					var f = $('#eteCascadeAnalysisForm');
                                                  +					f.find(':input[name=uuid]').val(ruuid);
                                                  +					f.submit();
                                                  +				});
                                                  +			} else {
                                                  +				$("#dock_btn_eteanalysis").find(".awsui-iconfont").css("color","gray");
                                                  +				$("#dock_btn_eteanalysis").button("disable");
                                                  +				$("#dock_btn_eteanalysis").removeAttr("onclick");
                                                  +				$("#dock_btn_eteanalysis").off("click");
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	/**
                                                  +	 * 打开插入链接
                                                  +	 */
                                                  +	showInsertLink : function() {
                                                  +		$("#link_dialog").dlg();
                                                  +		var addr = Utils.getSelected()[0].link;
                                                  +		if (!addr) {
                                                  +			addr = "";
                                                  +		}
                                                  +		$("#linkto_addr").val(addr).select();
                                                  +		$("#linkto_addr").unbind().bind("keydown", function(e) {
                                                  +			if (e.keyCode == 13) {
                                                  +				UI.setLink();
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 设置连接
                                                  +	 */
                                                  +	setLink : function() {
                                                  +		var newLink = $("#linkto_addr").val();
                                                  +		var shape = Utils.getSelected()[0];
                                                  +		shape.link = newLink;
                                                  +		Model.update(shape);
                                                  +		$('#link_dialog').dlg('close');
                                                  +	},
                                                  +	/**
                                                  +	 * 选中图片后的回调
                                                  +	 *
                                                  +	 * @type {}
                                                  +	 */
                                                  +	imageSelectedCallback : null,
                                                  +	/**
                                                  +	 * 打开图片选择
                                                  +	 */
                                                  +	showImageSelect : function(callback) {
                                                  +		if (callback) {
                                                  +			this.imageSelectedCallback = callback;
                                                  +		} else {
                                                  +			this.imageSelectedCallback = null;
                                                  +		}
                                                  +		this.fetchingRequest = null;
                                                  +		var height = $(window).height() - 200;
                                                  +		if (height > 550) {
                                                  +			height = 550;
                                                  +		} else if (height < 200) {
                                                  +			height = 200;
                                                  +		}
                                                  +		$(".image_list").height(height);
                                                  +		// this.showImageSelectContent("upload");
                                                  +		$("#image_dialog").dlg({
                                                  +			onClose : function() {
                                                  +				if (UI.fetchingRequest) {
                                                  +					UI.fetchingRequest.abort();
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +		// 加载用户图片
                                                  +		if ($("#image_select_upload").is(":visible")) {
                                                  +			UI.loadUserImages();
                                                  +		};
                                                  +		// 左侧分类绑定事件
                                                  +		$(".image_sources").children().unbind().bind("click", function() {
                                                  +			UI.showImageSelectContent($(this).attr("ty"));
                                                  +		});
                                                  +		// 上传
                                                  +		$("#upload_img_res").empty();
                                                  +		$("#input_upload_image").unbind().bind("change", function() {
                                                  +			$("#upload_img_res")
                                                  +				.html("<span style='color: #666'>上传中...</span>");
                                                  +			$("#frm_upload_image").submitForm({
                                                  +				success : function(result) {
                                                  +					if (result.result == "type_wrong") {
                                                  +						$("#upload_img_res").html("此文件不是图片,请重新选择");
                                                  +					} else if (result.result == "size_wrong") {
                                                  +						$("#upload_img_res").html("文件大小超出要求,最大2M");
                                                  +					} else if (result.result == "exception") {
                                                  +						$("#upload_img_res").html("无法使用此图片,请选择其他图片");
                                                  +					} else {
                                                  +						var img = result.image;
                                                  +						UI.setShapeImage(img.fileId, img.imageW,
                                                  +							img.imageH);
                                                  +					}
                                                  +				}
                                                  +			});
                                                  +		});
                                                  +		// 输入URL
                                                  +		$("#input_img_url").val("");
                                                  +		$("#img_url_area").empty();
                                                  +		var oldUrl = "";
                                                  +		function urlChanged() {
                                                  +			var url = $("#input_img_url").val().trim();
                                                  +			if (url != oldUrl) {
                                                  +				oldUrl = url
                                                  +				if (url != "") {
                                                  +					if (url.indexOf("http") < 0) {
                                                  +						url = "http://" + url;
                                                  +					}
                                                  +					$("#img_url_area")
                                                  +						.html("<span class='img_url_loading_tip'>正在加载预览...</span>");
                                                  +					var newImage = $("<img class='img_url_loading' src='" + url
                                                  +						+ "'/>").appendTo("#img_url_area");
                                                  +					newImage.unbind().bind("load", function() {
                                                  +						newImage.show().addClass("img_url_loaded");
                                                  +						$(".img_url_loading_tip").remove();
                                                  +					}).bind("error", function() {
                                                  +						$("#img_url_area")
                                                  +							.html("<div class='img_url_error'>无法在此地址下加载图片。<ul><li>请检查图片地址是否输入正确。</li><li>确保图片地址是公开的。</li><ul></div>");
                                                  +					});
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		$("#input_img_url").unbind().bind("paste", function() {
                                                  +			urlChanged();
                                                  +		}).bind("keyup", function() {
                                                  +			urlChanged();
                                                  +		});
                                                  +		// 搜索
                                                  +		$("#input_img_search").unbind().bind("keydown", function(e) {
                                                  +			if (e.keyCode == 13) {
                                                  +				UI.searchImgByGoogle();
                                                  +			}
                                                  +		});
                                                  +		$("#btn_img_search").unbind().bind("click", function() {
                                                  +			UI.searchImgByGoogle();
                                                  +		});
                                                  +		// 完成按钮
                                                  +		$("#set_image_submit").button("enable");
                                                  +		$("#set_image_submit").button({
                                                  +			onClick : function() {
                                                  +				var currentTab = $(".image_sources").children(".active")
                                                  +					.attr("ty");
                                                  +				if (currentTab == "upload") {
                                                  +					var selectedImg = $("#user_image_items")
                                                  +						.children(".image_item_selected");
                                                  +					if (selectedImg.length > 0) {
                                                  +						var fileId = selectedImg.attr("fileId");
                                                  +						var imageW = selectedImg.attr("w");
                                                  +						var imageH = selectedImg.attr("h");
                                                  +						UI.setShapeImage(fileId, imageW, imageH);
                                                  +					} else {
                                                  +						$("#image_dialog").dlg("close");
                                                  +					}
                                                  +				} else if (currentTab == "url") {
                                                  +					if ($(".img_url_loaded").length > 0) {
                                                  +						var url = $(".img_url_loaded").attr("src");
                                                  +						UI.setShapeImageByURL(url);
                                                  +					} else {
                                                  +						$("#image_dialog").dlg("close");
                                                  +					}
                                                  +				} else {
                                                  +					// 搜索
                                                  +					var selectedImg = $("#google_image_items")
                                                  +						.children(".image_item_selected");
                                                  +					if (selectedImg.length > 0) {
                                                  +						var url = selectedImg.attr("u");
                                                  +						UI.setShapeImageByURL(url);
                                                  +					} else {
                                                  +						$("#image_dialog").dlg("close");
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +		// 取消按钮
                                                  +		$("#set_image_cancel").button({
                                                  +			onClick : function() {
                                                  +				$("#image_dialog").dlg("close");
                                                  +			}
                                                  +		});
                                                  +		$("#set_image_text").empty();
                                                  +	},
                                                  +	/**
                                                  +	 * 显示图片设置类型
                                                  +	 */
                                                  +	showImageSelectContent : function(type) {
                                                  +		$(".image_list").hide();
                                                  +		$("#image_select_" + type).show().find("input[type=text]").select();
                                                  +		$(".image_sources").children().removeClass("active");
                                                  +		$(".image_sources").children("li[ty=" + type + "]").addClass("active");
                                                  +	},
                                                  +	/**
                                                  +	 * 加载用户图片
                                                  +	 */
                                                  +	loadUserImages : function(refresh) {
                                                  +		$("#user_image_items").empty();
                                                  +		$.ajax({
                                                  +			url : "/user_image/list",
                                                  +			success : function(data) {
                                                  +				if (data.images) {
                                                  +					for (var i = 0; i < data.images.length; i++) {
                                                  +						var img = data.images[i];
                                                  +						UI.appendUserImage(img);
                                                  +					}
                                                  +					$("#user_image_items")
                                                  +						.append("<div style='clear: both'></div>");
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +		$("#user_image_items").attr("loaded", "true");
                                                  +	},
                                                  +	searchIndex : 0,
                                                  +	searchKeywords : "",
                                                  +	/**
                                                  +	 * 通过Google搜索图片
                                                  +	 */
                                                  +	searchImgByGoogle : function() {
                                                  +		var keywords = $("#input_img_search").val();
                                                  +		if (keywords.trim() != "") {
                                                  +			$("#google_image_items").empty();
                                                  +			this.searchKeywords = encodeURI(keywords);
                                                  +			this.searchIndex = 0;
                                                  +			this.loadGoogleImg();
                                                  +		} else {
                                                  +			$("#input_img_search").focus();
                                                  +		}
                                                  +	},
                                                  +	/**
                                                  +	 * 加载Google图片
                                                  +	 */
                                                  +	loadGoogleImg : function() {
                                                  +		$
                                                  +			.getScript("https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q="
                                                  +				+ this.searchKeywords
                                                  +				+ "&rsz=8&start="
                                                  +				+ (this.searchIndex * 16)
                                                  +				+ "&callback=UI.googleImgCallback");
                                                  +		$
                                                  +			.getScript("https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q="
                                                  +				+ this.searchKeywords
                                                  +				+ "&rsz=8&start="
                                                  +				+ (this.searchIndex * 16 + 8)
                                                  +				+ "&callback=UI.googleImgCallback");
                                                  +		$(".gg_img_more").remove();
                                                  +		$("#google_image_items")
                                                  +			.append("<div class='img_gg_loading_tip'>正在加载图片...</div>");
                                                  +		this.searchIndex++;
                                                  +	},
                                                  +	/**
                                                  +	 * Google搜索回调
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            data
                                                  +	 */
                                                  +	googleImgCallback : function(data) {
                                                  +		var responseData = data.responseData;
                                                  +		var results = responseData.results;
                                                  +		for (var i = 0; i < results.length; i++) {
                                                  +			var item = results[i];
                                                  +			UI.appendGoogleImage(item);
                                                  +		}
                                                  +		$("#google_image_items").append("<div style='clear: both'></div>");
                                                  +		$(".img_gg_loading_tip").remove();
                                                  +		$(".gg_img_more").remove();
                                                  +		if (this.searchIndex <= 3) {
                                                  +			$("#google_image_items")
                                                  +				.append("<div onclick='UI.loadGoogleImg()' class='gg_img_more toolbar_button active'>显示更多结果...</div>");
                                                  +		}
                                                  +	},
                                                  +	/**
                                                  +	 * 添加一个用户图片
                                                  +	 */
                                                  +	appendUserImage : function(img) {
                                                  +		var box = $("<div class='image_item' id='" + img.imageId + "' fileId='"
                                                  +			+ img.fileId + "' w='" + img.imageW + "' h='" + img.imageH
                                                  +			+ "'></div>").appendTo($("#user_image_items"));
                                                  +		box.unbind().bind("click", function() {
                                                  +			$(".image_item_selected")
                                                  +				.removeClass('image_item_selected');
                                                  +			$(this).addClass('image_item_selected');
                                                  +		}).bind("mouseenter", function() {
                                                  +			var target = $(this);
                                                  +			var remove = $("<div class='ico ico_remove_red'></div>")
                                                  +				.appendTo(target);
                                                  +			var id = target.attr("id");
                                                  +			remove.bind("click", function() {
                                                  +				target.fadeOut();
                                                  +				$.ajax({
                                                  +					url : "/user_image/remove",
                                                  +					data : {
                                                  +						imageId : id
                                                  +					}
                                                  +				});
                                                  +			});
                                                  +		}).bind("mouseleave", function() {
                                                  +			$(this).find(".ico_remove_red").remove();
                                                  +		});
                                                  +		var location = img.fileId;
                                                  +		var newImage = $("<img src='" + location + "'/>").appendTo(box);
                                                  +		newImage.bind("load", function() {
                                                  +			$(this).css("margin-top", (140 - $(this).height()) / 2);
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 添加一个Google搜索的图片
                                                  +	 */
                                                  +	appendGoogleImage : function(img) {
                                                  +		var title = img.title + " (" + img.width + " × " + img.height + ")";
                                                  +		var box = $("<div class='image_item' u='" + img.url + "' title='"
                                                  +			+ title + "'></div>").appendTo($("#google_image_items"));
                                                  +		box.unbind().bind("click", function() {
                                                  +			$(".image_item_selected")
                                                  +				.removeClass('image_item_selected');
                                                  +			$(this).addClass('image_item_selected');
                                                  +		});
                                                  +		var newImage = $("<img src='" + img.tbUrl + "'/>").appendTo(box);
                                                  +		newImage.bind("load", function() {
                                                  +			$(this).css("margin-top", (140 - $(this).height()) / 2);
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 设置形状的背景图片
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            source
                                                  +	 */
                                                  +	setShapeImage : function(fileId, w, h) {
                                                  +		if (this.imageSelectedCallback) {
                                                  +			this.imageSelectedCallback(fileId, w, h);
                                                  +		}
                                                  +		$("#image_dialog").dlg("close");
                                                  +	},
                                                  +	/**
                                                  +	 * 加载URL图片的ajax请求对象
                                                  +	 *
                                                  +	 * @type {}
                                                  +	 */
                                                  +	fetchingRequest : null,
                                                  +	/**
                                                  +	 * 通过URL设置图片
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            url
                                                  +	 */
                                                  +	setShapeImageByURL : function(url) {
                                                  +		$("#set_image_text").removeClass("errored").text("正在应用图片,请稍候...");
                                                  +		$("#set_image_submit").button("disable");
                                                  +		UI.fetchingRequest = $.ajax({
                                                  +			url : "/user_image/reference",
                                                  +			data : {
                                                  +				url : url
                                                  +			},
                                                  +			success : function(result) {
                                                  +				if (result.result == "exception") {
                                                  +					$("#set_image_text").addClass("errored")
                                                  +						.html("无法使用此图片,请选择其他图片");
                                                  +				} else {
                                                  +					$("#set_image_text").empty();
                                                  +					var img = result.image;
                                                  +					UI
                                                  +						.setShapeImage(img.fileId, img.imageW,
                                                  +							img.imageH);
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 插入图片
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            source
                                                  +	 * @param {}
                                                  +	 *            location
                                                  +	 * @param {}
                                                  +	 *            w
                                                  +	 * @param {}
                                                  +	 *            h
                                                  +	 */
                                                  +	insertImage : function(fileId, w, h) {
                                                  +		w = parseInt(w);
                                                  +		h = parseInt(h);
                                                  +		var layout = $("#designer_layout");
                                                  +		var centerX = layout.width() / 2 + layout.offset().left;
                                                  +		var centerY = layout.height() / 2 + layout.offset().top;
                                                  +		var pos = Utils.getRelativePos(centerX, centerY, $("#designer_canvas"));
                                                  +		var shape = Model.create("standardImage", pos.x.restoreScale() - w / 2,
                                                  +			pos.y.restoreScale() - h / 2);
                                                  +		shape.props.w = w;
                                                  +		shape.props.h = h;
                                                  +		shape.fillStyle = {
                                                  +			type : "image",
                                                  +			fileId : fileId,
                                                  +			display : "fill",
                                                  +			imageW : w,
                                                  +			imageH : h
                                                  +		};
                                                  +		Model.add(shape);
                                                  +		Designer.painter.renderShape(shape);
                                                  +		Utils.unselect();
                                                  +		Utils.selectShape(shape.id);
                                                  +	},
                                                  +	/**
                                                  +	 * 导出流程手册
                                                  +	 */
                                                  +	doOutputProcess: function () {
                                                  +	},
                                                  +	/**
                                                  +	 * 加载预览数据
                                                  +	 */
                                                  +	doPreview: function () {
                                                  +		if ($("#saving_tip").text() != "已保存成功" && $("#saving_tip").text() != "保存成功" && $("#saving_tip").text() != "您的文件已经成功保存" && $("#saving_tip").text() != "") {
                                                  +			if (editable) {
                                                  +				$.simpleAlert('页面中有未保存的内容,请先保存');
                                                  +				return;
                                                  +			}
                                                  +		}
                                                  +		$.simpleAlert('请稍后', 'loading');
                                                  +		$.post("./jd", {
                                                  +			cmd: "com.actionsoft.apps.coe.pal_pl_repository_df",
                                                  +			sid: sid,
                                                  +			"uuid": chartId
                                                  +		}, function t(msg) {
                                                  +			$("#previewContent .procImg").remove();
                                                  +			if (typeof(msg) == "string") {
                                                  +				msg = eval('(' + msg + ')');
                                                  +			}
                                                  +			msg = msg.data.url;
                                                  +			if (msg == "") {
                                                  +				alert("请您先保存一个版本!");
                                                  +			} else {
                                                  +				var img = $("<img class='procImg' src='" + msg + "'style='margin: 10px 10px;'>");
                                                  +				var hh = img.width();
                                                  +				$("#previewContent").append(img);
                                                  +			}
                                                  +			$("#previewDialog").dialog({
                                                  +				title: "预览",
                                                  +				width: window.innerWidth * 0.9,
                                                  +				height: window.innerHeight * 0.92
                                                  +			});
                                                  +			$.simpleAlert("close");
                                                  +		}, "text");
                                                  +	},
                                                  +	/**
                                                  +	 * 生成图片和缩略图
                                                  +	 */
                                                  +	saveImage : function() {
                                                  +		if ($("#saving_tip").text() != "已保存成功" && $("#saving_tip").text() != "保存成功" && $("#saving_tip").text() != "您的文件已经成功保存" && $("#saving_tip").text() != "") {
                                                  +			if (editable) {
                                                  +				$.simpleAlert('页面中有未保存的内容,请先保存');
                                                  +				return;
                                                  +			}
                                                  +		}
                                                  +		$.simpleAlert('请稍后', 'loading');
                                                  +		$.ajax({
                                                  +			type: "POST",
                                                  +			url: "./jd",
                                                  +			data: {
                                                  +				sid: sid,
                                                  +				cmd: "com.actionsoft.apps.coe.pal_pl_repository_image_save",
                                                  +				uuid: chartId
                                                  +			},
                                                  +			success: function (r, textStatus, jqXHR) {
                                                  +				if(r.result == 'ok'	) {
                                                  +					$.simpleAlert("close");
                                                  +					$.simpleAlert('图片创建完成', 'ok', 2000, {callback:function() {
                                                  +							var options = {
                                                  +								title : "提示",
                                                  +								content:"是否打开图片预览",
                                                  +								onConfirm: function(){
                                                  +									$.simpleAlert("close");
                                                  +									UI.doPreview();// 预览
                                                  +								},
                                                  +								onCancel : function(){
                                                  +								}
                                                  +							};
                                                  +							$.confirm(options);
                                                  +						}});
                                                  +				} else {
                                                  +					console.log(r);
                                                  +					$.simpleAlert("close");
                                                  +					$.simpleAlert(r.data.desc, 'error');
                                                  +				}
                                                  +			},
                                                  +			error: function (jqXHR, textStatus, errorThrown) {
                                                  +				$.simpleAlert(errorThrown, 'err');
                                                  +				console.log(jqXHR)
                                                  +				console.log(textStatus)
                                                  +				console.log(errorThrown)
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	showVersionCompare : function() {
                                                  +		$("#dialog_version_compare").dialog({
                                                  +			buttons:[
                                                  +				{text:'确定',cls:"blue",handler:function(){
                                                  +						var checkboxs = $("input[name='version']:checked");
                                                  +						var numCheck = checkboxs.length;
                                                  +						if (numCheck != 2) {
                                                  +							$.simpleAlert("请选择两个需要对比的版本", "warning");
                                                  +							return;
                                                  +						}
                                                  +						var firstId;
                                                  +						var secondId;
                                                  +						var values = [];
                                                  +						var names = [];
                                                  +						checkboxs.each(function (){
                                                  +							values.push($(this).val());
                                                  +							names.push($(this).data("name"));
                                                  +						});
                                                  +						firstId = values[0];
                                                  +						secondId = values[1];
                                                  +						awsui.ajax.post("./jd?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_version_compare", { firstId: firstId, secondId: secondId}, function(data) {
                                                  +							$("#dialog_version_compare").dialog("close");
                                                  +							var fileAttrCompare = data.fileAttrCompare;
                                                  +							var shapeAttrCompare = data.shapeAttrCompare;
                                                  +							var fileHtml = "";
                                                  +							var shapeHtml = "";
                                                  +							if (fileAttrCompare.length > 0) {
                                                  +								for (var i = 0; i < fileAttrCompare.length; i++) {
                                                  +									fileHtml += fileAttrCompare[i] + "</br>";
                                                  +								}
                                                  +								$("#fileAttr").html(fileHtml);
                                                  +							}
                                                  +							if (shapeAttrCompare.length > 0) {
                                                  +								for (var i = 0; i < shapeAttrCompare.length; i++) {
                                                  +									shapeHtml += shapeAttrCompare[i] + "</br>";
                                                  +								}
                                                  +								$("#shapeAttr").html(shapeHtml);
                                                  +							}
                                                  +							$("#versionCompareResult").show();
                                                  +							$("#dialog_version_compare_result").dialog({
                                                  +
                                                  +							});
                                                  +						}, 'json');
                                                  +					}
                                                  +				}
                                                  +			]
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 流程导出
                                                  +	 */
                                                  +	processExport : function() {
                                                  +		//先处理准备好导出的流程数据
                                                  +		if ($("#saving_tip").text() != "已保存成功" && $("#saving_tip").text() != "保存成功" && $("#saving_tip").text() != "您的文件已经成功保存" && $("#saving_tip").text() != "") {
                                                  +			if (editable) {
                                                  +				$.simpleAlert('页面中有未保存的内容,请先保存');
                                                  +				return;
                                                  +			}
                                                  +		}
                                                  +		var repositoryIds = [];
                                                  +		repositoryIds.push(ruuid);
                                                  +		var options = {
                                                  +			title : "提示",
                                                  +			content:"确定导出并下载文件吗?",
                                                  +			onConfirm: function(){
                                                  +				$.simpleAlert('正在导出', 'loading');
                                                  +				$.ajax({
                                                  +					type: "POST",
                                                  +					url: "./jd",
                                                  +					data: {
                                                  +						sid: sid,
                                                  +						cmd: "com.actionsoft.apps.coe.pal_pl_export_handle",
                                                  +						repositoryIds: JSON.stringify(repositoryIds)
                                                  +					},
                                                  +					success: function (r, textStatus, jqXHR) {
                                                  +						if(r.result == 'ok'	) {
                                                  +							$.simpleAlert("close");
                                                  +							$.simpleAlert('导出完成', 'ok', 2000, {callback:function() {
                                                  +									$.simpleAlert("close");
                                                  +									// 下载
                                                  +									$.ajax({
                                                  +										type: "POST",
                                                  +										url: "./jd",
                                                  +										data: {
                                                  +											sid: sid,
                                                  +											cmd: "com.actionsoft.apps.coe.pal_pl_export",
                                                  +											exportTitle: r.data.exportTitle,
                                                  +											exportCount: r.data.exportCount,
                                                  +											dcId: r.data.dcId,
                                                  +										},
                                                  +										success: function (r, textStatus, jqXHR) {
                                                  +											if(r.result == 'ok'	) {
                                                  +												window.location.href = r.data.downLoadUrl;
                                                  +											} else {
                                                  +												console.log(r);
                                                  +											}
                                                  +										},
                                                  +										error: function (jqXHR, textStatus, errorThrown) {
                                                  +											$.simpleAlert(errorThrown, 'err');
                                                  +											console.log(jqXHR)
                                                  +											console.log(textStatus)
                                                  +											console.log(errorThrown)
                                                  +										}
                                                  +									});
                                                  +								}});
                                                  +						} else {
                                                  +							console.log(r);
                                                  +							$.simpleAlert("close");
                                                  +						}
                                                  +					},
                                                  +					error: function (jqXHR, textStatus, errorThrown) {
                                                  +						$.simpleAlert(errorThrown, 'err');
                                                  +						console.log(jqXHR)
                                                  +						console.log(textStatus)
                                                  +						console.log(errorThrown)
                                                  +					}
                                                  +				});
                                                  +			},
                                                  +			onCancel : function(){
                                                  +			}
                                                  +		};
                                                  +		$.confirm(options);
                                                  +	},
                                                  +	openNewPage : function() {
                                                  +		window.open(location.href);
                                                  +	},
                                                  +	/**
                                                  +	 * 执行导出
                                                  +	 */
                                                  +	doExport : function() {
                                                  +		// var definition = JSON.stringify(Model.define);
                                                  +		// $("#export_definition").val(definition);
                                                  +		// $("#export_title").val($(".diagram_title").text());
                                                  +		// $("#export_form").submit();
                                                  +		if ($("#saving_tip").text() != "已保存成功" && $("#saving_tip").text() != "保存成功" && $("#saving_tip").text() != "您的文件已经成功保存" && $("#saving_tip").text() != "") {
                                                  +			if (editable) {
                                                  +				$.simpleAlert('页面中有未保存的内容,请先保存');
                                                  +				return;
                                                  +			}
                                                  +		}
                                                  +		$.simpleAlert('请稍后', 'loading');
                                                  +		var type = $('input[name="type"]:checked').val();
                                                  +		$.post("./jd", {
                                                  +			cmd : "com.actionsoft.apps.coe.pal_pl_repository_download_png",
                                                  +			sid : sid,
                                                  +			"uuid" : chartId,
                                                  +			type : type
                                                  +		}, function t(msg) {
                                                  +			if (typeof(msg) == "string") {
                                                  +				msg = eval('(' + msg + ')');
                                                  +			}
                                                  +			msg = msg.data.url;
                                                  +			if (msg == "") {
                                                  +				alert("请您先保存一个版本!");
                                                  +			} else {
                                                  +				//window.open(msg);
                                                  +				$("#export_iframe").attr("src", msg);
                                                  +			}
                                                  +			$.simpleAlert("close");
                                                  +		}, "text");
                                                  +		$('#export_dialog').dlg('close');
                                                  +	},
                                                  +	/**
                                                  +	 * 展示hotkey列表
                                                  +	 */
                                                  +	showHotKey : function() {
                                                  +		var height = $(window).height() - 175;
                                                  +		if (height > 500) {
                                                  +			height = 500 + "px";
                                                  +		}
                                                  +		$("#hotkey_list").dlg();
                                                  +		$("#hotkey_list").css({
                                                  +			"top" : "28px"
                                                  +		});
                                                  +		$("#hotkey_list .dialog_content").css({
                                                  +			"height" : height
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 显示反馈dialog
                                                  +	 */
                                                  +	showFeedBack : function() {
                                                  +		$("#send_feedback").css({
                                                  +			width : "auto",
                                                  +			height : "auto"
                                                  +		});
                                                  +		var sendFeedBack = $("#send_feedback");
                                                  +		sendFeedBack.dlg();
                                                  +		$("#feedback_email").focus();
                                                  +		$("#feedback_message").val("");
                                                  +		$(".feedback_error_email_format").hide();
                                                  +		$(".feedback_error_msg").hide();
                                                  +	},
                                                  +	/**
                                                  +	 * 发送反馈
                                                  +	 */
                                                  +	sendFeedBack : function(dom) {
                                                  +		$(".feedback_error_email_format").hide();
                                                  +		$(".feedback_error_msg").hide();
                                                  +		var email = $.trim($("#feedback_email").val());
                                                  +		var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
                                                  +		if (!reg.test(email)) {
                                                  +			$("#feedback_email").focus();
                                                  +			$(".feedback_error_email_format").show();
                                                  +			return;
                                                  +		}
                                                  +		var feedbackMessage = $.trim($("#feedback_message").val());
                                                  +		if (feedbackMessage == "") {
                                                  +			$("#feedback_message").val("").focus();
                                                  +			$(".feedback_error_msg").show();
                                                  +			return;
                                                  +		}
                                                  +		Util.ajax({
                                                  +			url : "/support/save_ask",
                                                  +			data : {
                                                  +				content : feedbackMessage,
                                                  +				username : $("#feedback_name").val(),
                                                  +				email : email,
                                                  +				url : location.href
                                                  +			},
                                                  +			success : function(data) {
                                                  +				$(".dlg_mask").remove();
                                                  +				$("#send_feedback").animate({
                                                  +					left : $(window).width(),
                                                  +					top : $(window).height(),
                                                  +					width : 0,
                                                  +					height : 0,
                                                  +					opacty : 0.2
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 打开开始向导
                                                  +	 */
                                                  +	gettingStart : function(delay) {
                                                  +		this.showStartStep(1);
                                                  +	},
                                                  +	showStartStep : function(step, dom) {
                                                  +		$(".mark_content").hide();
                                                  +		var content = $(".mark" + step + "_content");
                                                  +		content.show();
                                                  +		var top;
                                                  +		var left;
                                                  +		if (step == 1) {
                                                  +			top = $("#shape_panel").offset().top + 70;
                                                  +			left = $("#shape_panel").offset().left + $("#shape_panel").width()
                                                  +				+ 10;
                                                  +		} else if (step == 2) {
                                                  +			top = $(".row2").offset().top + 30;
                                                  +			left = $("#menu_bar_insert").offset().left
                                                  +				+ $("#menu_bar_insert").width() - content.outerWidth() / 2;
                                                  +		} else if (step == 3) {
                                                  +			top = $(".toolbar").offset().top + 40;
                                                  +			left = 270;
                                                  +		} else if (step == 4) {
                                                  +			top = $("#dock").offset().top + 10;
                                                  +			left = $("#dock").offset().left - content.outerWidth() - 10
                                                  +		} else if (step == "created") {
                                                  +			top = dom.offset().top + dom.height() / 2 - content.outerHeight()
                                                  +				/ 2;
                                                  +			if (top <= 0) {
                                                  +				top = 0;
                                                  +			}
                                                  +			if (top + content.outerHeight() > $(window).height()) {
                                                  +				top = $(window).height() - content.outerHeight();
                                                  +			}
                                                  +			left = dom.offset().left + dom.width() + 10;
                                                  +		}
                                                  +		content.css({
                                                  +			top : top,
                                                  +			left : left
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 关闭开始向导
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            dom
                                                  +	 */
                                                  +	closeGettingStart : function(dom) {
                                                  +		$(".mark_content").hide();
                                                  +	},
                                                  +	/**
                                                  +	 * Getting Start END--
                                                  +	 */
                                                  +
                                                  +	showAddColla : function() {
                                                  +		Util.ajax({
                                                  +			url : "/collaboration/get_colla_role_list",
                                                  +			data : {
                                                  +				chartId : chartId
                                                  +			},
                                                  +			success : function(data) {
                                                  +				$("#colla_dialog").find(".role_list").html(data).scrollTop(999);
                                                  +				$("#colla_dialog").removeClass("_update");
                                                  +				$("#colla_dialog").css({
                                                  +					"top" : ($(window).height() - $("#colla_dialog")
                                                  +							.outerHeight())
                                                  +						* 0.5 + "px"
                                                  +				});
                                                  +				$("#colla_dialog").dlg();
                                                  +				$("#colla_suggest_box").empty();
                                                  +				$("#add_prompt4").hide();
                                                  +				$("#add_prompt3").hide();
                                                  +				$("#add_prompt2").hide();
                                                  +				$("#add_prompt1").show();
                                                  +			}
                                                  +		});
                                                  +
                                                  +		var lastVal = "";
                                                  +		$("#input_add_colla").val("").unbind().bind("keyup", function() {
                                                  +			// 加载信息
                                                  +			var value = $(this).val();
                                                  +			if (value == lastVal) {
                                                  +				return;
                                                  +			}
                                                  +			lastVal = value;
                                                  +			if (value == "") {
                                                  +				$("#colla_suggest_box").empty();
                                                  +				$("#add_prompt4").hide();
                                                  +				$("#add_prompt3").hide();
                                                  +				$("#add_prompt2").hide();
                                                  +				$("#add_prompt1").show();
                                                  +				return;
                                                  +			}
                                                  +			Util.ajax({
                                                  +				url : "/collaboration/get_new_members",
                                                  +				data : {
                                                  +					value : value
                                                  +				},
                                                  +				success : function(data) {
                                                  +					$("#colla_suggest_box").html(data);
                                                  +					if ($("#colla_suggest_box").find("ul").length > 0) {
                                                  +						$("#add_prompt4").hide();
                                                  +						$("#add_prompt3").hide();
                                                  +						$("#add_prompt2").show();
                                                  +						$("#add_prompt1").hide();
                                                  +					} else {
                                                  +						$("#add_prompt4").hide();
                                                  +						$("#add_prompt3").hide();
                                                  +						$("#add_prompt2").hide();
                                                  +						$("#add_prompt1").show();
                                                  +					}
                                                  +					$(".colla_suggest").find("li").unbind().bind("click",
                                                  +						function() {
                                                  +							$("#add_prompt4").hide();
                                                  +							$("#add_prompt3").hide();
                                                  +							$("#add_prompt2").show();
                                                  +							$("#add_prompt1").hide();
                                                  +							var value = $.trim($("#input_add_colla").val());
                                                  +							$(".colla_suggest").find("li")
                                                  +								.removeClass("seled");
                                                  +							$(this).addClass("seled");
                                                  +							var type = $(this).attr("joinType");
                                                  +							var target = $(this).attr("target");
                                                  +							if (type == "user") {
                                                  +								var userName = $(this).attr("username");
                                                  +								$("#input_add_colla").val(userName);
                                                  +								$("#add_userid").val(target);
                                                  +							} else {
                                                  +								$("#input_add_colla").val(target);
                                                  +								$("#add_userid").val(target);
                                                  +							}
                                                  +							$("#add_type").val(type);
                                                  +						});
                                                  +				}
                                                  +			});
                                                  +		});
                                                  +	},
                                                  +	doAddCollaboration : function() {
                                                  +		if ($(".colla_suggest").length > 0) {
                                                  +			if ($(".colla_suggest").find(".seled").length == 0) {
                                                  +				$("#add_prompt1").hide();
                                                  +				$("#add_prompt2").show();
                                                  +				$("#add_prompt3").hide();
                                                  +				$("#add_prompt4").hide();
                                                  +				var top = ($(window).outerHeight() - 104) * 0.5 + 100;
                                                  +				var left = ($(window).outerWidth() - 272) * 0.5;
                                                  +				$("#confirm_dlg").removeClass("newSize").css({
                                                  +					top : top + "px",
                                                  +					left : left + "px"
                                                  +				});
                                                  +				$("#confirm_dlg").addClass("newSize").css({
                                                  +					top : ($(window).outerHeight() - $("#confirm_dlg").height())
                                                  +						* 0.5 + "px",
                                                  +					left : ($(window).outerWidth() - $("#confirm_dlg").width())
                                                  +						* 0.5 + "px",
                                                  +					display : "block"
                                                  +				});
                                                  +			} else {
                                                  +				var imgSrc = $(".colla_suggest").find(".seled").find("img")
                                                  +					.attr("src");
                                                  +				var userFullName = $("#input_add_colla").val();
                                                  +				if (userFullName.length > 30) {
                                                  +					userFullName = userFullName.substr(0, 30) + "...";
                                                  +				}
                                                  +				var target = $("#add_userid").val();
                                                  +				var role = $("#invit_role").val();
                                                  +				var type = $("#add_type").val();
                                                  +				$(".add_new_button")
                                                  +					.find(".designer_button")
                                                  +					.text("<@i18n resource='diagraming.collaboation_sending'/>");
                                                  +				var target_item = null;
                                                  +				if (type == "email") {
                                                  +					$(".role_list").find(".role_item").each(function() {
                                                  +						if ($(this).attr("type") == type
                                                  +							&& $(this).attr("target") == target) {
                                                  +							target_item = $(this);
                                                  +							$(this)
                                                  +								.find(".inviting_")
                                                  +								.text("<@i18n resource='diagraming.collaboation_inviting_again'/>");
                                                  +						}
                                                  +					});
                                                  +				}
                                                  +
                                                  +				var paramOuter = {
                                                  +					type : type,
                                                  +					target : target,
                                                  +					role : role,
                                                  +					chartId : chartId
                                                  +				};
                                                  +				Util.ajax({
                                                  +					url : "/collaboration/add",
                                                  +					data : paramOuter,
                                                  +					success : function(data) {
                                                  +						var result = data.result;
                                                  +						if (result == "exists") {
                                                  +							$("#add_prompt2").hide();
                                                  +							$("#add_prompt1").hide();
                                                  +							$("#add_prompt4").hide();
                                                  +							$("#add_prompt3").show();
                                                  +						} else {
                                                  +							Util.ajax({
                                                  +								url : "/collaboration/get_colla_role_list",
                                                  +								data : {
                                                  +									chartId : chartId
                                                  +								},
                                                  +								success : function(data) {
                                                  +									$(".role_list").html(data)
                                                  +										.scrollTop(999);
                                                  +								}
                                                  +							});
                                                  +						}
                                                  +						$(".add_new_button")
                                                  +							.find(".designer_button")
                                                  +							.text("<@i18n resource='diagraming.collaboation_send_invitation'/>");
                                                  +						$("#colla_dialog").addClass("_update").css({
                                                  +							top : ($(window).height() - $("#colla_dialog")
                                                  +									.outerHeight())
                                                  +								* 0.5 + "px"
                                                  +						});
                                                  +						if (result != "exists") {
                                                  +							setTimeout(function() {
                                                  +								$("#add_prompt3").hide();
                                                  +								$("#add_prompt2").hide();
                                                  +								$("#add_prompt1").hide();
                                                  +								$("#add_prompt4").show();
                                                  +							}, 400);
                                                  +						}
                                                  +						setTimeout(function() {
                                                  +							$("#add_prompt3").hide();
                                                  +							$("#add_prompt2").hide();
                                                  +							$("#add_prompt4").hide();
                                                  +							$("#add_prompt1").show();
                                                  +							$("#input_add_colla").val("");
                                                  +							$("#colla_suggest_box").html("");
                                                  +						}, 1000);
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	deleteCollaRole : function(dom) {
                                                  +		var parent = $(dom).parent(".role_item");
                                                  +		var collaborationId = parent.attr("collaborationId");
                                                  +		Util.ajax({
                                                  +			url : "/collaboration/delete",
                                                  +			data : {
                                                  +				collaborationId : collaborationId
                                                  +			},
                                                  +			success : function(data) {
                                                  +				if (data.result == "success")
                                                  +					parent.remove();
                                                  +			}
                                                  +		});
                                                  +
                                                  +		$("#colla_dialog").addClass("_update").css({
                                                  +			top : ($(window).height() - $("#colla_dialog").outerHeight()) * 0.5
                                                  +				+ "px"
                                                  +		});
                                                  +	},
                                                  +	changeCollaRole : function(collaborationId, dom) {
                                                  +		Util.ajax({
                                                  +			url : "/collaboration/set_role",
                                                  +			data : {
                                                  +				collaborationId : collaborationId,
                                                  +				role : $(dom).val()
                                                  +			},
                                                  +			success : function(data) {
                                                  +				if (data.result == "success") {
                                                  +					$(dom).parent(".given_role")
                                                  +						.find(".change_success").stop().animate({
                                                  +						"left" : "-38px"
                                                  +					}, 200).delay(400).animate({
                                                  +						"left" : "0px"
                                                  +					}, 200);
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 打开图形管理
                                                  +	 */
                                                  +	showShapesManage : function() {
                                                  +		var $dialog = $("#shapes_dialog").dialog({
                                                  +			buttons : [{
                                                  +				text : '确定',
                                                  +				cls : "blue",
                                                  +				handler : UI.saveShapesManage
                                                  +			}, {
                                                  +				text : '关闭',
                                                  +				handler : function() {
                                                  +					$dialog.dialog("close");
                                                  +				}
                                                  +			}]
                                                  +		});
                                                  +		$("#shape_manage_list").children("li").unbind().bind("click",
                                                  +			function() {
                                                  +				var chkbox = $(this).find("input");
                                                  +				var checked = !chkbox.is(":checked");
                                                  +				chkbox.attr("checked", checked);
                                                  +				cateChanged(chkbox);
                                                  +			});
                                                  +		$("#shape_manage_list").find("input").unbind().bind("click",
                                                  +			function(e) {
                                                  +				e.stopPropagation();
                                                  +				cateChanged($(this));
                                                  +			});
                                                  +		// .each(function(){
                                                  +		// var categorys = $(this).val();
                                                  +		// var arr = categorys.split(",");
                                                  +		// var exists = true;
                                                  +		// for(var i = 0; i < arr.length; i++){
                                                  +		// var cate = arr[i];
                                                  +		// if(!CategoryMapping[cate]){
                                                  +		// //此分类下的图形,没有在当前使用中
                                                  +		// exists = false;
                                                  +		// break;
                                                  +		// }
                                                  +		// }
                                                  +		// $(this).attr("checked", exists);
                                                  +		// });
                                                  +
                                                  +		function cateChanged(chk) {
                                                  +			var value = chk.val();
                                                  +			var arr = value.split(",");
                                                  +			var chked = chk.is(":checked");
                                                  +			if (arr.length > 1) {
                                                  +				// 是父级节点
                                                  +				$("#shape_manage_list").find("input").each(function() {
                                                  +					var cate = $(this).val();
                                                  +					if (arr.indexOf(cate) >= 0) {
                                                  +						// 是选择父级的子节点
                                                  +						$(this).attr("checked", chked);
                                                  +					}
                                                  +				});
                                                  +			} else {
                                                  +				// 选择的是子节点
                                                  +				$("#shape_manage_list").find(".cate_parent").each(function() {
                                                  +					// 获取所有的父节点,判断子节点是否都全部选中了
                                                  +					var cates = $(this).val().split(",");
                                                  +					var allChked = true;
                                                  +					for (var i = 0; i < cates.length; i++) {
                                                  +						var cate = cates[i];
                                                  +						if (!$("#shape_manage_list").find("input[value=" + cate
                                                  +							+ "]").is(":checked")) {
                                                  +							allChked = false;
                                                  +							break;
                                                  +						}
                                                  +					}
                                                  +					$(this).attr("checked", allChked);
                                                  +				});
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	/**
                                                  +	 * 保存图形管理
                                                  +	 */
                                                  +	saveShapesManage : function() {
                                                  +		var checked = $("#shape_manage_list")
                                                  +			.find("input:checked:not(.cate_parent)").map(function() {
                                                  +				return $(this).val();
                                                  +			}).get();
                                                  +		var a = "";
                                                  +		var messages = {
                                                  +			categories : checked.join(",")
                                                  +		};
                                                  +		// //发送消息
                                                  +		// var msgObj = {
                                                  +		// action: "changeSchema",
                                                  +		// messages: JSON.stringify(messages)
                                                  +		// };
                                                  +		// CLB.send(msgObj);
                                                  +		Designer.setSchema(checked.join(","), function() {
                                                  +			$("#shapes_dialog").dialog("close");
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 打开用户菜单
                                                  +	 */
                                                  +	showUserMenu : function(e) {
                                                  +		e.stopPropagation();
                                                  +		$("#user_menu").dropdown({
                                                  +			target : $(".user"),
                                                  +			position : "right",
                                                  +			onSelect : function(item) {
                                                  +				var action = item.attr("ac");
                                                  +				if (action == "dia") {
                                                  +					location.href = "/diagrams";
                                                  +				} else if (action == "net") {
                                                  +					location.href = "/network";
                                                  +				} else if (action == "out") {
                                                  +					location.href = "/login/out";
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 打开另存为
                                                  +	 */
                                                  +	showSaveAs : function() {
                                                  +		$("#saveas_dialog").dlg();
                                                  +		$("#saveas_title").val($(".diagram_title").text()).select();
                                                  +	},
                                                  +	doSaveAs : function() {
                                                  +		if ($("#saveas_title").val().trim() == "") {
                                                  +			$("#saveas_title").focus();
                                                  +			return;
                                                  +		}
                                                  +		$("#hid_saveas_id").val(chartId);
                                                  +		$("#saveas_form").submit();
                                                  +		$("#btn_dosaveas").removeAttr("onclick");
                                                  +	},
                                                  +	activityNoDlg : function() {
                                                  +		//创建Dialog的DOM,关闭时销毁
                                                  +		var dialogHTML = '';
                                                  +		/*计算dialog高度,规则
                                                  +	       1、最小值340
                                                  +	       2、每行26px,1条件出现纵向滚动条时(行>8),需要根据高度行数扩大
                                                  +	       3、最大window.height-40
                                                  +	     */
                                                  +		//获取当前节点号数组
                                                  +		// var filterNames = 'timerIntermediateCatchEvent,messageIntermediateCatchEvent,signalIntermediateCatchEvent,messageIntermediateThrowingEvent,signalIntermediateThrowingEvent,compensateIntermediateThrowingEvent,userTask,serviceTask,scriptTask,manualTask,businessRuleTask,sendTask,receiveTask,callActivityCallingProcess,';
                                                  +		var filterNames = undefined;
                                                  +		var taskList = UI.getTasksList(filterNames);
                                                  +		var dialogHeight = 340;
                                                  +		if (taskList.length > 8) {
                                                  +			dialogHeight = 340 + (taskList.length - 8) * 26
                                                  +		}
                                                  +		if (dialogHeight > ($(window).height() - 80)) {
                                                  +			dialogHeight = ($(window).height() - 80);
                                                  +		}
                                                  +		dialogHTML += '<div title="节点编号排序" style="width:320px;height:' + dialogHeight + 'px;display:none;" id="activityNoDialog">';
                                                  +		dialogHTML += '<div id="activityNoGrid"></div>';
                                                  +		dialogHTML += '<div id="activityNoAlert" style="position: relative;top: 6px;">提示:拖动排序,确定后请保存设计器</div>';
                                                  +		dialogHTML += '</div>';
                                                  +		$(document.body).append(dialogHTML);
                                                  +		//显示Dialog
                                                  +		$("#activityNoDialog").dialog({
                                                  +			onClose: function () {
                                                  +				$('#activityNoDialog').remove();
                                                  +				$('#row-drag-obj').remove();//grid拖动时产生的行,鼠标拖动到document外时,该div一直显示
                                                  +			},
                                                  +			buttons: [
                                                  +				{
                                                  +					text: '确定', cls: "blue",
                                                  +					handler: function () {
                                                  +						if (activityNoArr.length > 0) {
                                                  +							//将节点号重新设置
                                                  +							var allRows = activityNoGrid.awsGrid('getAllRows');
                                                  +							for (var shapeId in Model.define.elements) {
                                                  +								var shape = Model.getShapeById(shapeId);
                                                  +								for(var x = 0; x < allRows.length; x++) {
                                                  +									var obj = allRows[x];
                                                  +									if(obj.id == shape.id) {
                                                  +										if (shape.dataAttributes != undefined) {
                                                  +											for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +												for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +													var attrArr = shape.dataAttributes[i];
                                                  +													if (attrArr.attributesJsonArray && attrArr.attributesJsonArray.length > 0) {
                                                  +														for (var j = 0; j < attrArr.attributesJsonArray.length; j++) {
                                                  +															var attr = attrArr.attributesJsonArray[j];
                                                  +															if (attr.id == 'number') {
                                                  +																attr.value = parseInt(obj.no);
                                                  +																break;
                                                  +															}
                                                  +														}
                                                  +														break;
                                                  +													}
                                                  +												}
                                                  +											}
                                                  +										}
                                                  +									}
                                                  +								}
                                                  +							}
                                                  +							if (isAutoSave == "0" ){
                                                  +								$("#saving_tip").css("color", "rgb(255, 0, 0)");
                                                  +								$("#saving_tip").text("文件已修改,未保存");
                                                  +							}
                                                  +						}
                                                  +						$("#activityNoDialog").dialog('close');
                                                  +					}
                                                  +				},
                                                  +				{
                                                  +					text: '取消', handler: function () {
                                                  +						$("#activityNoDialog").dialog('close');
                                                  +					}
                                                  +				}
                                                  +			]
                                                  +		});
                                                  +		var activityNoArr = [];//JSON数组
                                                  +		for (var i = 0; i < taskList.length; i++) {
                                                  +			var task = taskList[i];
                                                  +			var activityNoObj = {};
                                                  +			activityNoObj.id = task.id;
                                                  +			if (task.text) {
                                                  +				activityNoObj.name = task.text;
                                                  +			} else {
                                                  +				activityNoObj.name = '(无名称)' + task.title;
                                                  +			}
                                                  +			activityNoObj.no = task.orderIndex;
                                                  +			activityNoArr[i] = activityNoObj;
                                                  +		}
                                                  +		if (activityNoArr.length == 0) {
                                                  +			$('#activityNoGrid').height(dialogHeight - 100);
                                                  +			$('#activityNoGrid').width(317);
                                                  +			$('#activityNoAlert').remove();
                                                  +			$('#activityNoGrid').append($('<div class="awsui-message-page">'+
                                                  +				'<div class="content">'+
                                                  +				'<span class="icon" message-type="info"></span>'+
                                                  +				'<span class="title">不支持编号排序</span>'+
                                                  +				'<span class="description">画布没有形状或者形状没有编号属性</span>'+
                                                  +				'</div>'+
                                                  +				'</div>'));
                                                  +			awsuiMessagePage();
                                                  +			return;
                                                  +		}
                                                  +		//渲染Grid
                                                  +		var activityNoGridOptions = {
                                                  +			width: 317,
                                                  +			height: dialogHeight - 100,
                                                  +			flexWidth: false,
                                                  +			flexHeight: false,
                                                  +			resizable: false,
                                                  +			selectionModel: {
                                                  +				type: "none",
                                                  +				model: "single"
                                                  +			},
                                                  +			scrollModel: {
                                                  +				vertical: true,
                                                  +				horizontal: false
                                                  +			},
                                                  +			bottomVisible: false,
                                                  +			rowDrag: true
                                                  +		};
                                                  +		activityNoGridOptions.colModel = [
                                                  +			{title: "名称", width: 200, align: 'left', dataType: 'string', dataIndx: 'name', resizable: false, sortable: false},
                                                  +			{title: "节点号", width: 80, align: 'center', dataType: 'integer', dataIndx: 'no', resizable: false, sortable: false}
                                                  +		];
                                                  +		activityNoGridOptions.dataModel = {
                                                  +			data: activityNoArr,
                                                  +			location: "local",
                                                  +			sorting: "local",
                                                  +			sortIndx: "no",
                                                  +			sortDir: "up"
                                                  +		};
                                                  +		var activityNoGrid = $("#activityNoGrid").awsGrid(activityNoGridOptions);
                                                  +		activityNoGrid.awsGrid('option', 'rowDragCallback', function (source, target) {
                                                  +			return true;
                                                  +		});
                                                  +		activityNoGrid.awsGrid('option', 'rowDragSuccessCallback', function (source, target) {
                                                  +			//重新排列序号
                                                  +			var allRows = activityNoGrid.awsGrid('getAllRows');
                                                  +			for (var i = 0; i < allRows.length; i++) {
                                                  +				allRows[i].no = (i + 1);
                                                  +			}
                                                  +			activityNoGrid.awsGrid('refreshDataAndView');
                                                  +		});
                                                  +	},
                                                  +	getTasksList: function (filterNames) {
                                                  +		var filterNode = [];
                                                  +		var nodes = Model.define.elements;
                                                  +		if (filterNames == undefined) {
                                                  +			return UI.getALLTasksList();
                                                  +		}
                                                  +	},
                                                  +	getALLTasksList: function () {
                                                  +		var filterNode = [];
                                                  +		for (var shapeId in Model.define.elements) {
                                                  +			var shape = Model.getShapeById(shapeId);
                                                  +			if (shape.dataAttributes != undefined) {
                                                  +				for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +					for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +						var attrArr = shape.dataAttributes[i];
                                                  +						if (attrArr.attributesJsonArray && attrArr.attributesJsonArray.length > 0) {
                                                  +							for (var j = 0; j < attrArr.attributesJsonArray.length; j++) {
                                                  +								var attr = attrArr.attributesJsonArray[j];
                                                  +								if (attr.id == 'number') {
                                                  +									var tempNumber = 0;
                                                  +									var number = attr.value;
                                                  +									if(typeof number == 'string') number = number.replace(/^\s+|\s+$/g,"");
                                                  +									if(!isNaN(number) && number != '') {
                                                  +										tempNumber = number;
                                                  +									}
                                                  +									var obj = {};
                                                  +									obj.text = shape.text;
                                                  +									obj.id = shapeId;
                                                  +									obj.orderIndex = tempNumber;
                                                  +									filterNode.push(obj);
                                                  +									break;
                                                  +								}
                                                  +							}
                                                  +							break;
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		return filterNode;
                                                  +	},
                                                  +	batchReplace: function() {
                                                  +		if ($("#saving_tip").text() != "已保存成功" && $("#saving_tip").text() != "保存成功" && $("#saving_tip").text() != "您的文件已经成功保存" && $("#saving_tip").text() != "") {
                                                  +			if (editable) {
                                                  +				$.simpleAlert('页面中有未保存的内容,请先保存');
                                                  +				return;
                                                  +			}
                                                  +		}
                                                  +		// 打开批量处理框
                                                  +		initWizardByDesinger();
                                                  +	}
                                                  +};
                                                  +
                                                  +/**
                                                  + * 右侧的Dock控件
                                                  + *
                                                  + * @type {}
                                                  + */
                                                  +var Dock = {
                                                  +	init : function() {
                                                  +		var layoutW = $("#designer_layout").width();
                                                  +		var viewW = $("#layout_block").width();
                                                  +		// 总宽度减去可视区域的宽度,得到滚动条宽度
                                                  +		var navRight = layoutW - viewW;
                                                  +		$("#dock").css("right", navRight);
                                                  +		var dockRight = navRight + $("#dock").outerWidth() - 1;
                                                  +		$(".dock_view").css("right", dockRight);
                                                  +		if ($("#demo_signup").length) {
                                                  +			var signupH = $("#demo_signup").outerHeight();
                                                  +			$("#dock").css("top", signupH);
                                                  +			$(".dock_view").css("top", signupH + 10);
                                                  +		}
                                                  +		$(".ico_dock_collapse").bind("click", function() {
                                                  +			$(".dock_view").hide();
                                                  +			$(".dock_buttons").children().removeClass("selected");
                                                  +			if (Dock.currentView == "history") {
                                                  +				Dock.closeHistory();
                                                  +			}
                                                  +			Dock.currentView = "";
                                                  +		});
                                                  +		$(window).bind("resize.dock", function() {
                                                  +			if (Dock.currentView == "attribute") {
                                                  +				Dock.fitAttrList();
                                                  +			}
                                                  +		});
                                                  +		// 缩放
                                                  +		$("#dock_zoom").spinner({
                                                  +			min : 50,
                                                  +			max : 200,
                                                  +			unit : "%",
                                                  +			step : 10,
                                                  +			onChange : function(val) {
                                                  +				Designer.setZoomScale(val / 100);
                                                  +			}
                                                  +		});
                                                  +		// 线条颜色
                                                  +		$("#dock_line_color").colorButton({
                                                  +			onSelect : function(color) {
                                                  +				Designer.setLineStyle({
                                                  +					lineColor : color
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 线条类型
                                                  +		$("#dock_line_style").button({
                                                  +			onMousedown : function() {
                                                  +				$("#line_style_list").dropdown({
                                                  +					target : $("#dock_line_style"),
                                                  +					onSelect : function(item) {
                                                  +						var lineStyle = item.attr("line");
                                                  +						Designer.setLineStyle({
                                                  +							lineStyle : lineStyle
                                                  +						});
                                                  +						var cls = item.children("div").attr("class");
                                                  +						$("#dock_line_style").children(".linestyle").attr(
                                                  +							"class", cls);
                                                  +					}
                                                  +				});
                                                  +				var style = Utils.getSelected()[0].lineStyle.lineStyle;
                                                  +				var item = $("#line_style_list").children("li[line=" + style
                                                  +					+ "]");
                                                  +				$("#line_style_list").dropdown("select", item);
                                                  +			}
                                                  +		});
                                                  +		// 线条宽度
                                                  +		$("#dock_line_width").spinner({
                                                  +			min : 0,
                                                  +			max : 10,
                                                  +			unit : "px",
                                                  +			step : 1,
                                                  +			onChange : function(val) {
                                                  +				Designer.setLineStyle({
                                                  +					lineWidth : val
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 填充类型
                                                  +		$("#dock_fill_type").button({
                                                  +			onMousedown : function() {
                                                  +				$("#dock_fill_list").dropdown({
                                                  +					target : $("#dock_fill_type"),
                                                  +					onSelect : function(item) {
                                                  +						var type = item.attr("ty");
                                                  +						$("#dock_fill_type").button("setText",
                                                  +							item.text());
                                                  +						if (type == "image") {
                                                  +							UI.showImageSelect(function(fileId, w, h) {
                                                  +								Designer.setFillStyle({
                                                  +									type : "image",
                                                  +									fileId : fileId,
                                                  +									imageW : w,
                                                  +									imageH : h
                                                  +								});
                                                  +							});
                                                  +						} else {
                                                  +							Designer.setFillStyle({
                                                  +								type : type
                                                  +							});
                                                  +							var shapeIds = Utils.getSelectedShapeIds();
                                                  +							var shape = Model.getShapeById(shapeIds[0]);
                                                  +							Dock.setFillStyle(shape.fillStyle);
                                                  +						}
                                                  +					}
                                                  +				});
                                                  +				var type = $("#dock_fill_type").text();
                                                  +				$("#dock_fill_list").children().each(function() {
                                                  +					if ($(this).text() == type) {
                                                  +						$("#dock_fill_list")
                                                  +							.dropdown("select", $(this));
                                                  +						return false;
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 填充颜色
                                                  +		$("#fill_solid_btn").colorButton({
                                                  +			onSelect : function(color) {
                                                  +				Designer.setFillStyle({
                                                  +					color : color
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 渐变开始颜色
                                                  +		$("#fill_gradient_begin").colorButton({
                                                  +			onSelect : function(color) {
                                                  +				Designer.setFillStyle({
                                                  +					beginColor : color
                                                  +				});
                                                  +				$("#fill_gradient_begin").attr("c", color);
                                                  +			}
                                                  +		});
                                                  +		// 渐变结束颜色
                                                  +		$("#fill_gradient_end").colorButton({
                                                  +			onSelect : function(color) {
                                                  +				Designer.setFillStyle({
                                                  +					endColor : color
                                                  +				});
                                                  +				$("#fill_gradient_end").attr("c", color)
                                                  +			}
                                                  +		});
                                                  +		// 渐变颜色交换
                                                  +		$("#gradient_swap").button({
                                                  +			onClick : function() {
                                                  +				var begin = $("#fill_gradient_begin").attr("c");
                                                  +				var end = $("#fill_gradient_end").attr("c");
                                                  +				$("#fill_gradient_begin").attr("c", end).colorButton(
                                                  +					"setColor", end);
                                                  +				$("#fill_gradient_end").attr("c", begin).colorButton(
                                                  +					"setColor", begin);
                                                  +				Designer.setFillStyle({
                                                  +					beginColor : end,
                                                  +					endColor : begin
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 渐变类型
                                                  +		$("#gradient_type").button({
                                                  +			onMousedown : function() {
                                                  +				$("#gradient_type_list").dropdown({
                                                  +					target : $("#gradient_type"),
                                                  +					onSelect : function(item) {
                                                  +						var type = item.attr("ty");
                                                  +						$("#gradient_type").button("setText", item.text());
                                                  +						Designer.setFillStyle({
                                                  +							gradientType : type
                                                  +						});
                                                  +						$(".gradient_details").hide();
                                                  +						$("#gradient_type_" + type).show();
                                                  +						var shapeIds = Utils.getSelectedShapeIds();
                                                  +						var shape = Model.getShapeById(shapeIds[0]);
                                                  +						var fillStyle = shape.fillStyle;
                                                  +						if (type == "linear") {
                                                  +							$("#gradient_angle").spinner(
                                                  +								"setValue",
                                                  +								Math.round(fillStyle.angle / Math.PI * 180)
                                                  +								+ "°");
                                                  +						} else {
                                                  +							$("#gradient_radius").spinner("setValue",
                                                  +								Math.round(fillStyle.radius * 100) + "%");
                                                  +						}
                                                  +					}
                                                  +				});
                                                  +				var type = $("#gradient_type").text().trim();
                                                  +				$("#gradient_type_list").children().each(function() {
                                                  +					if ($(this).text() == type) {
                                                  +						$("#gradient_type_list").dropdown("select",
                                                  +							$(this));
                                                  +						return false;
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 线性渐变角度
                                                  +		$("#gradient_angle").spinner({
                                                  +			min : 0,
                                                  +			max : 360,
                                                  +			unit : "°",
                                                  +			step : 15,
                                                  +			onChange : function(val) {
                                                  +				var angle = val / 180 * Math.PI;
                                                  +				Designer.setFillStyle({
                                                  +					angle : angle
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 径向渐变半径
                                                  +		$("#gradient_radius").spinner({
                                                  +			min : 0,
                                                  +			max : 100,
                                                  +			unit : "%",
                                                  +			step : 5,
                                                  +			onChange : function(val) {
                                                  +				Designer.setFillStyle({
                                                  +					radius : val / 100
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 改变背景图片
                                                  +		$("#fill_change_img").button({
                                                  +			onClick : function() {
                                                  +				UI.showImageSelect(function(fileId, w, h) {
                                                  +					Designer.setFillStyle({
                                                  +						type : "image",
                                                  +						fileId : fileId,
                                                  +						imageW : w,
                                                  +						imageH : h
                                                  +					});
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 背景图片显示
                                                  +		$("#fill_img_display").button({
                                                  +			onMousedown : function() {
                                                  +				$("#img_display_list").dropdown({
                                                  +					target : $("#fill_img_display"),
                                                  +					onSelect : function(item) {
                                                  +						var type = item.attr("ty");
                                                  +						$("#fill_img_display").button("setText",
                                                  +							item.text());
                                                  +						Designer.setFillStyle({
                                                  +							display : type
                                                  +						});
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 透明度
                                                  +		$("#spinner_opacity").spinner({
                                                  +			min : 0,
                                                  +			max : 100,
                                                  +			unit : "%",
                                                  +			step : 5,
                                                  +			onChange : function(val) {
                                                  +				Designer.setShapeStyle({
                                                  +					alpha : val / 100
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// X坐标
                                                  +		$("#dock_metric_x").spinner({
                                                  +			min : -800,
                                                  +			unit : "px",
                                                  +			step : 5,
                                                  +			onChange : function(val) {
                                                  +				Designer.setShapeProps({
                                                  +					x : val
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		$("#dock_metric_x").spinner("setValue", "0px");
                                                  +		// 宽度
                                                  +		$("#dock_metric_w").spinner({
                                                  +			min : 20,
                                                  +			unit : "px",
                                                  +			step : 5,
                                                  +			onChange : function(val) {
                                                  +				Designer.setShapeProps({
                                                  +					w : val
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// Y坐标
                                                  +		$("#dock_metric_y").spinner({
                                                  +			min : -800,
                                                  +			unit : "px",
                                                  +			step : 5,
                                                  +			onChange : function(val) {
                                                  +				Designer.setShapeProps({
                                                  +					y : val
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		$("#dock_metric_y").spinner("setValue", "0px");
                                                  +		// 高度
                                                  +		$("#dock_metric_h").spinner({
                                                  +			min : 20,
                                                  +			unit : "px",
                                                  +			step : 5,
                                                  +			onChange : function(val) {
                                                  +				Designer.setShapeProps({
                                                  +					h : val
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 角度
                                                  +		$("#dock_metric_angle").spinner({
                                                  +			min : 0,
                                                  +			max : 360,
                                                  +			unit : "°",
                                                  +			step : 15,
                                                  +			onChange : function(val) {
                                                  +				var angle = val / 180 * Math.PI;
                                                  +				Designer.setShapeProps({
                                                  +					angle : angle
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 画布尺寸
                                                  +		$("#dock_page_size").button({
                                                  +			onMousedown : function() {
                                                  +				$("#page_size_list").dropdown({
                                                  +					target : $("#dock_page_size"),
                                                  +					onSelect : function(item) {
                                                  +						var w = parseInt(item.attr("w"));
                                                  +						var h = parseInt(item.attr("h"));
                                                  +						Designer.setPageStyle({
                                                  +							width : w,
                                                  +							height : h
                                                  +						});
                                                  +						$("#dock_page_size").button("setText",
                                                  +							item.text());
                                                  +					}
                                                  +				});
                                                  +				var item = $("#page_size_list").children("li[w="
                                                  +					+ Model.define.page.width + "][h="
                                                  +					+ Model.define.page.height + "]");
                                                  +				if (item.length > 0) {
                                                  +					$("#page_size_list").dropdown("select", item);
                                                  +				} else {
                                                  +					$("#page_size_list").dropdown("select",
                                                  +						$("#dock_size_custom"));
                                                  +				}
                                                  +				$("#dock_size_w").spinner("setValue",
                                                  +					Model.define.page.width + "px");
                                                  +				$("#dock_size_h").spinner("setValue",
                                                  +					Model.define.page.height + "px");
                                                  +			}
                                                  +		});
                                                  +		$("#dock_size_w").spinner({
                                                  +			min : 200,
                                                  +			unit : "px",
                                                  +			step : 100,
                                                  +			onChange : function(val) {
                                                  +				Designer.setPageStyle({
                                                  +					width : val
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		$("#dock_size_h").spinner({
                                                  +			min : 200,
                                                  +			unit : "px",
                                                  +			step : 100,
                                                  +			onChange : function(val) {
                                                  +				Designer.setPageStyle({
                                                  +					height : val
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 页面边距
                                                  +		$("#dock_page_padding").button({
                                                  +			onMousedown : function() {
                                                  +				$("#page_padding_list").dropdown({
                                                  +					target : $("#dock_page_padding"),
                                                  +					onSelect : function(item) {
                                                  +						var p = parseInt(item.attr("p"));
                                                  +						Designer.setPageStyle({
                                                  +							padding : p
                                                  +						})
                                                  +						$("#dock_page_padding").button("setText",
                                                  +							item.text());
                                                  +					}
                                                  +				});
                                                  +				var item = $("#page_padding_list").children("li[p="
                                                  +					+ Model.define.page.padding + "]");
                                                  +				$("#page_padding_list").dropdown("select", item);
                                                  +			}
                                                  +		});
                                                  +		// 画布背景颜色
                                                  +		$("#dock_page_color").colorButton({
                                                  +			position : "center",
                                                  +			onSelect : function(color) {
                                                  +				Designer.setPageStyle({
                                                  +					backgroundColor : color
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		// 是否显示网格
                                                  +		$("#dock_page_showgrid").bind("change", function() {
                                                  +			var showGrid = $(this).is(":checked");
                                                  +			Designer.setPageStyle({
                                                  +				showGrid : showGrid
                                                  +			});
                                                  +			if (showGrid) {
                                                  +				$("#dock_gridsize_box").show();
                                                  +			} else {
                                                  +				$("#dock_gridsize_box").hide();
                                                  +			}
                                                  +		});
                                                  +		// 网格大小
                                                  +		$("#dock_page_gridsize").button({
                                                  +			onMousedown : function() {
                                                  +				$("#page_gridsize_list").dropdown({
                                                  +					target : $("#dock_page_gridsize"),
                                                  +					onSelect : function(item) {
                                                  +						var s = parseInt(item.attr("s"));
                                                  +						Designer.setPageStyle({
                                                  +							gridSize : s
                                                  +						})
                                                  +						$("#dock_page_gridsize").button("setText", item.text());
                                                  +					}
                                                  +				});
                                                  +				var item = $("#page_gridsize_list").children("li[s="
                                                  +					+ Model.define.page.gridSize + "]");
                                                  +				$("#page_gridsize_list").dropdown("select", item);
                                                  +			}
                                                  +		});
                                                  +		// 播放速度
                                                  +		$("#spinner_play_speed").spinner({
                                                  +			min : 1,
                                                  +			max : 30,
                                                  +			unit : "s",
                                                  +			step : 1,
                                                  +			value : 5,
                                                  +			onChange : function(val) {
                                                  +
                                                  +			}
                                                  +		});
                                                  +		$("#spinner_play_speed").spinner("setValue", "2s");
                                                  +		// 版本播放
                                                  +		$("#btn_history_play").button({
                                                  +			onClick : function() {
                                                  +				if ($("#btn_history_play").children()
                                                  +					.hasClass("ico_pause")) {
                                                  +					Dock.pauseVersions();
                                                  +				} else {
                                                  +					Dock.playVersions();
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +		$("#btn_history_restore").button({
                                                  +			onClick : function() {
                                                  +				Dock.restoreVersion();
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 当前Dock窗口
                                                  +	 *
                                                  +	 * @type {String}
                                                  +	 */
                                                  +	currentView : "",
                                                  +	/**
                                                  +	 * 打开一个Dock窗口
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            name
                                                  +	 */
                                                  +	showView : function(name) {
                                                  +		if ($("#dock_btn_" + name).button("isDisabled")) {
                                                  +			return;
                                                  +		}
                                                  +		$(".dock_view").hide();
                                                  +		$(".dock_view_" + name).show();
                                                  +		$(".dock_buttons").children().removeClass("selected");
                                                  +		$("#dock_btn_" + name).addClass("selected");
                                                  +		if (Dock.currentView == "history" && name != "history") {
                                                  +			Dock.closeHistory();
                                                  +		}
                                                  +		this.currentView = name;
                                                  +		this.update(true);
                                                  +	},
                                                  +	/**
                                                  +	 * 设置Dock的填充样式
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            fillStyle
                                                  +	 */
                                                  +	setFillStyle : function(fillStyle) {
                                                  +		$("#dock_fill_type").button(
                                                  +			"setText",
                                                  +			$("#dock_fill_list").children("li[ty=" + fillStyle.type + "]")
                                                  +				.text());
                                                  +		$(".fill_detail").hide();
                                                  +		if (fillStyle.type == "solid") {
                                                  +			$(".fill_detail_solid").show();
                                                  +			$("#fill_solid_btn").colorButton("setColor", fillStyle.color);
                                                  +		} else if (fillStyle.type == "gradient") {
                                                  +			$(".fill_detail_gradient").show();
                                                  +			// 渐变颜色
                                                  +			$("#fill_gradient_begin").attr("c", fillStyle.beginColor)
                                                  +				.colorButton("setColor", fillStyle.beginColor);
                                                  +			$("#fill_gradient_end").attr("c", fillStyle.endColor).colorButton(
                                                  +				"setColor", fillStyle.endColor);
                                                  +			// 渐变类型
                                                  +			$("#gradient_type").button(
                                                  +				"setText",
                                                  +				$("#gradient_type_list").children("li[ty="
                                                  +					+ fillStyle.gradientType + "]").text());
                                                  +			$(".gradient_details").hide();
                                                  +			if (fillStyle.gradientType == "linear") {
                                                  +				$("#gradient_type_linear").show();
                                                  +				$("#gradient_angle").spinner("setValue",
                                                  +					Math.round(fillStyle.angle / Math.PI * 180) + "°");
                                                  +			} else {
                                                  +				$("#gradient_type_radial").show();
                                                  +				$("#gradient_radius").spinner("setValue",
                                                  +					Math.round(fillStyle.radius * 100) + "%");
                                                  +			}
                                                  +		} else if (fillStyle.type == "image") {
                                                  +			$(".fill_detail_image").show();
                                                  +			var display = "fill";
                                                  +			if (fillStyle.display) {
                                                  +				display = fillStyle.display;
                                                  +			}
                                                  +			$("#fill_img_display").button(
                                                  +				"setText",
                                                  +				$("#img_display_list").children("li[ty=" + display + "]")
                                                  +					.text());
                                                  +		}
                                                  +	},
                                                  +	/**
                                                  +	 * 更新Dock
                                                  +	 */
                                                  +	update : function(drawNav) {
                                                  +		if (this.currentView == "portalAttrShow" || this.currentView == "portalDescShow" || this.currentView == "portalFileShow") {
                                                  +			changeArributeByShape();
                                                  +		}
                                                  +		if (this.currentView == "navigator") {
                                                  +			if (drawNav) {
                                                  +				Navigator.draw();
                                                  +			}
                                                  +			$("#dock_zoom").spinner("setValue",
                                                  +				Math.round(Designer.config.scale * 100) + "%");
                                                  +		} else if (this.currentView == "graphic") {
                                                  +			var selectedIds = Utils.getSelectedIds();
                                                  +			var count = selectedIds.length;
                                                  +			var shapeIds = Utils.getSelectedShapeIds();
                                                  +			var shapeCount = shapeIds.length;
                                                  +			if (count == 0) {
                                                  +				$("#dock_line_color").button("disable");
                                                  +				$("#dock_line_style").button("disable");
                                                  +				$("#dock_line_width").button("disable");
                                                  +			} else {
                                                  +				$("#dock_line_color").button("enable");
                                                  +				$("#dock_line_style").button("enable");
                                                  +				$("#dock_line_width").button("enable");
                                                  +				var shape = Model.getShapeById(selectedIds[0]);
                                                  +				$("#dock_line_color").colorButton("setColor",
                                                  +					shape.lineStyle.lineColor);
                                                  +				var lineStyleCls = $("#line_style_list").children("li[line="
                                                  +					+ shape.lineStyle.lineStyle + "]").children()
                                                  +					.attr("class");
                                                  +				$("#dock_line_style").children(".linestyle").attr("class",
                                                  +					lineStyleCls);
                                                  +				$("#dock_line_width").spinner("setValue",
                                                  +					shape.lineStyle.lineWidth + "px");
                                                  +			}
                                                  +			if (shapeCount == 0) {
                                                  +				$("#dock_fill_type").button("disable");
                                                  +				$("#spinner_opacity").button("disable");
                                                  +				Dock.setFillStyle({
                                                  +					type : "none"
                                                  +				});
                                                  +			} else {
                                                  +				$("#dock_fill_type").button("enable");
                                                  +				$("#spinner_opacity").button("enable");
                                                  +				var shape = Model.getShapeById(shapeIds[0]);
                                                  +				Dock.setFillStyle(shape.fillStyle);
                                                  +				$("#spinner_opacity").spinner("setValue",
                                                  +					Math.round(shape.shapeStyle.alpha / 1 * 100) + "%");
                                                  +			}
                                                  +		} else if (this.currentView == "metric") {
                                                  +			var shapeIds = Utils.getSelectedShapeIds();
                                                  +			var shapeCount = shapeIds.length;
                                                  +			if (shapeCount == 0) {
                                                  +				$("#dock_metric_x").button("disable");
                                                  +				$("#dock_metric_w").button("disable");
                                                  +				$("#dock_metric_y").button("disable");
                                                  +				$("#dock_metric_h").button("disable");
                                                  +				$("#dock_metric_angle").button("disable");
                                                  +			} else {
                                                  +				var shape = Model.getShapeById(shapeIds[0]);
                                                  +				$("#dock_metric_x").button("enable").spinner("setValue",
                                                  +					Math.round(shape.props.x) + "px");
                                                  +				$("#dock_metric_w").button("enable").spinner("setValue",
                                                  +					Math.round(shape.props.w) + "px");
                                                  +				$("#dock_metric_y").button("enable").spinner("setValue",
                                                  +					Math.round(shape.props.y) + "px");
                                                  +				$("#dock_metric_h").button("enable").spinner("setValue",
                                                  +					Math.round(shape.props.h) + "px");
                                                  +				$("#dock_metric_angle").button("enable").spinner("setValue",
                                                  +					Math.round(shape.props.angle / Math.PI * 180) + "°");
                                                  +			}
                                                  +		} else if (this.currentView == "page") {
                                                  +			var page = Model.define.page;
                                                  +			var w = page.width;
                                                  +			var h = page.height;
                                                  +			var sizeItem = $("#page_size_list").children("li[w=" + w + "][h="
                                                  +				+ h + "]");
                                                  +			var sizeText = "";
                                                  +			if (sizeItem.length > 0) {
                                                  +				sizeText = sizeItem.text();
                                                  +			} else {
                                                  +				sizeText = $("#dock_size_custom").text();
                                                  +			}
                                                  +			$("#dock_page_size").button("setText", sizeText);
                                                  +			$("#dock_page_padding").button("setText", page.padding + "px");
                                                  +			$("#dock_page_color").colorButton("setColor", page.backgroundColor);
                                                  +			$("#dock_page_showgrid").attr("checked", page.showGrid);
                                                  +			if (page.showGrid) {
                                                  +				$("#dock_gridsize_box").show();
                                                  +			} else {
                                                  +				$("#dock_gridsize_box").hide();
                                                  +			}
                                                  +			var gridText = "";
                                                  +			var gridItem = $("#page_gridsize_list").children("li[s="
                                                  +				+ page.gridSize + "]");
                                                  +			if (gridItem.length > 0) {
                                                  +				var gridText = gridItem.text();
                                                  +			}
                                                  +			$("#dock_page_gridsize").button("setText", gridText);
                                                  +		} else if (this.currentView == "attribute") {
                                                  +			if (!inputUpdate) {// input类型的属性值更新时不重绘所有属性
                                                  +				changeArributeByShape();
                                                  +			}
                                                  +			if(role == "viewer") {
                                                  +				$("#dock_page_attribute table input").prop("disabled", true);
                                                  +				$("#tagContent1 table input, #tagContent1 table textarea").prop("disabled", true);
                                                  +			}
                                                  +		} else if (this.currentView == "message") {
                                                  +			$.ajax({
                                                  +				url: "./jd?sid=" + $("#sid").val()
                                                  +					+ "&cmd=com.actionsoft.apps.coe.pal_pl_repository_commentlist"
                                                  +					+ "&repositoryId=" + ruuid + "&openAppType=" + openAppType,
                                                  +				success: function(msg){
                                                  +					var html = "";
                                                  +					var array;
                                                  +					if (typeof(msg) == "string") {
                                                  +						array = eval('(' + msg + ')').msg;
                                                  +					} else {
                                                  +						array = msg.msg;
                                                  +					}
                                                  +					if (typeof(array) == "string") {
                                                  +						array = eval('(' + array + ')');
                                                  +					}
                                                  +					for (var i = 0; i < array.length; i++) {
                                                  +						var obj = array[i];
                                                  +						html += getHtml(obj);
                                                  +					}
                                                  +					$("#messageContent").html(html);
                                                  +				}
                                                  +			});
                                                  +		} else if (this.currentView == "publish") {
                                                  +			$.ajax({
                                                  +				url: "./jd?sid=" + $("#sid").val()
                                                  +					+ "&cmd=com.actionsoft.apps.coe.pal_publish_history_of_repository&wsId=" + $("#wsId").val()
                                                  +					+ "&repositoryId=" + ruuid,
                                                  +				success: function(msg){
                                                  +					var array;
                                                  +					if (typeof(msg) == "string") {
                                                  +						array = eval('(' + msg + ')').msg;
                                                  +					} else {
                                                  +						array = msg.msg;
                                                  +					}
                                                  +					if (typeof(array) == 'string') {
                                                  +						array = eval('(' + array + ')');
                                                  +					}
                                                  +					var html = "";
                                                  +					if (array != null && array.length > 0) {
                                                  +						for (var i = 0; i < array.length; i++) {
                                                  +							var data = array[i];
                                                  +							var type = data.publishType;
                                                  +							var style = "";
                                                  +							var info = "";
                                                  +							if (type == "N") {
                                                  +								style = "green";
                                                  +								info = "新发布";
                                                  +							} else if (type == "C") {
                                                  +								style = "blue";
                                                  +								info = "变更";
                                                  +							} else if (type == "S") {
                                                  +								style = "red";
                                                  +								info = "停用";
                                                  +							}
                                                  +							var clickHtml = "";
                                                  +							if (data.plId != undefined) {
                                                  +								clickHtml = " style='cursor: pointer;' onclick=\"openFileLink('" + data.plId + "', '_seft', '" + data.plName + "')\"";
                                                  +							}
                                                  +							html += "<section>"
                                                  +								+ "	<span class=\"point-time point-" + style + "\"></span>"
                                                  +								+ "	<time>"
                                                  +								+ "		<span>" + data.publishDate + "</span>"
                                                  +								+ "	</time>"
                                                  +								+ "	<aside>"
                                                  +								+ "		<p class=\"brief\"><span class=\"text-" + style + "\" " + clickHtml + " >" + info + "</span></p>"
                                                  +								+ "		<p class=\"things\">" + data.publishDesc + "</p>"
                                                  +								+ "	</aside>"
                                                  +								+ "</section>";
                                                  +						}
                                                  +
                                                  +					} else {
                                                  +						html = "<div style=\"font-size: 16px; color: #aaa; text-align: center; vertical-align: middle; line-height: 200px;\">暂无发布历史</div>";
                                                  +					}
                                                  +					$("#sidePublishListDiv article").html(html);
                                                  +				}
                                                  +			});
                                                  +		} else if (this.currentView == "link") {
                                                  +			$.ajax({
                                                  +				url: "./jd?sid=" + $("#sid").val()
                                                  +					+ "&cmd=com.actionsoft.apps.coe.pal_link_of_repository&wsId=" + $("#wsId").val()
                                                  +					+ "&plId=" + ruuid,
                                                  +				success: function(r){
                                                  +					var links = r.data.links;
                                                  +					var customLinks = r.data.customLInks;
                                                  +					var html = "";
                                                  +					var flag1 = false;
                                                  +					var flag2 = false;
                                                  +					if (links != null && links.length > 0) {
                                                  +						html += '<h3 style="color:#333333;text-align:left;verticalalign:middle;margin:10px 10px 0px 10px;">文件链接</h3>';
                                                  +						for (var i = 0; i < links.length; i++) {
                                                  +							html += '<img style="cursor:pointer;width: 100px; margin: 10px; background-color: #FFF;" src="' + links[i].photo
                                                  +								+ '" awsui-qtip="text:\''+ links[i].fileName + '\',position:\'bottom\'" onclick="openLinkUrlRewrite(\'custom\', \'' + links[i].url + '\', \'_seft\', \'' + links[i].uuid + '\',\'\',\''+links[i].fileName+'\',true)">';
                                                  +						}
                                                  +					} else {
                                                  +						flag1 = true;
                                                  +					}
                                                  +					if (customLinks != null && customLinks.length > 0){
                                                  +						html += '<h3 style="color:#333333;text-align:left;verticalalign:middle;margin:0px 10px;">自定义链接</h3>';
                                                  +						html += '<ul>';
                                                  +						var index = 1;
                                                  +						for (var i = 0; i < customLinks.length; i++) {
                                                  +							html += '<li style="line-height:25px;font-size:20px;text-align:left;verticalalign:middle;margin:0px 10px;"><a awsui-qtip="text:\''+ customLinks[i].name +'\',position:\'bottom\'" href="'+ customLinks[i].url +'" target="_blank">' + (index++) + '. ' + customLinks[i].name + '</a></li>';
                                                  +						}
                                                  +						html += '</ul>';
                                                  +					} else {
                                                  +						flag2 = true;
                                                  +					}
                                                  +					if (flag1 && flag2) {
                                                  +						html = "<div style=\"font-size: 16px; color: #aaa; text-align: center; vertical-align: middle; line-height: 200px;\">暂无链接</div>";
                                                  +					}
                                                  +					$("#linkContent").empty().html(html);
                                                  +				}
                                                  +			});
                                                  +		}
                                                  +		if (this.currentView == "history") {
                                                  +			if (drawNav && Dock.historyVersions == null) {
                                                  +				this.loadHistorys();
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	/**
                                                  +	 * 历史版本暂存
                                                  +	 *
                                                  +	 * @type {}
                                                  +	 */
                                                  +	historyVersions : null,
                                                  +	/**
                                                  +	 * 加载历史版本
                                                  +	 */
                                                  +	loadHistorys : function() {/*
                                                  +		if (chartId == "") {
                                                  +			$("#history_container")
                                                  +					.html("<div style='padding: 20px 10px;'><@i18n resource='diagraming.demo.nohistory'/></div>")
                                                  +			return;
                                                  +		}
                                                  +		$.ajax({
                                                  +			url : "/diagraming/history",
                                                  +			data : {
                                                  +				chartId : chartId
                                                  +			},
                                                  +			success : function(data) {
                                                  +				Dock.historyVersions = data;
                                                  +				if (data.versions.length == 0) {
                                                  +					$("#history_container")
                                                  +							.html('<div style="padding: 20px 10px;"><@i18n resource="diagraming.nohistory"/></div>');
                                                  +				} else {
                                                  +					$("#history_container")
                                                  +							.html('<ul id="history_versions"></ul>');
                                                  +					var users = data.users;
                                                  +					for (var i = 0; i < data.versions.length; i++) {
                                                  +						var v = data.versions[i];
                                                  +						var newVersion = $('<li vid="' + v.versionId
                                                  +								+ '" def="' + v.definitionId + '" ind="' + i
                                                  +								+ '"><div class="version_time">' + v.updateTime
                                                  +								+ '</div><div class="version_name"></div></li>')
                                                  +								.appendTo($("#history_versions"));
                                                  +						var nameContainer = newVersion
                                                  +								.children(".version_name");
                                                  +						for (var j = 0; j < v.userIds.length; j++) {
                                                  +							var userId = v.userIds[j];
                                                  +							nameContainer.append("<div>" + users[userId]
                                                  +									+ "</div>");
                                                  +						}
                                                  +						var remarkContainer = $("<div class='history_remark'><div class='remark_container'><div class='remark_text'></div><a onclick='Dock.editHistoryRemark(event, \""
                                                  +								+ v.versionId
                                                  +								+ "\")' href='javascript:'><@i18n resource='diagraming.history.remark'/></a></div></div>")
                                                  +								.appendTo(newVersion);
                                                  +						if (v.remark) {
                                                  +							remarkContainer.find(".remark_text").text(v.remark);
                                                  +						}
                                                  +						remarkContainer
                                                  +								.append("<div class='edit_container'><textarea class='input_text' onclick='event.stopPropagation()'></textarea><a href='javascript:' class='save'><@i18n resource='global.save'/></a>&nbsp;&nbsp;<a href='javascript:' class='cancel'><@i18n resource='global.cancel'/></a></div>")
                                                  +					}
                                                  +					Dock.resetVersions();
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	*/},
                                                  +	/**
                                                  +	 * 重置版本历史
                                                  +	 */
                                                  +	resetVersions : function() {
                                                  +		$("#history_versions").children("li").unbind().bind("click",
                                                  +			function() {
                                                  +				if (Dock.playingTimeout != null) {
                                                  +					return;
                                                  +				}
                                                  +				if ($(this).hasClass("selected")) {
                                                  +					Dock.closeHistory();
                                                  +				} else {
                                                  +					$("#history_versions").children(".selected")
                                                  +						.removeClass("selected");
                                                  +					$(this).addClass("selected");
                                                  +					var defId = $(this).attr("def");
                                                  +					Dock.showHistoryVersion(defId);
                                                  +				}
                                                  +				var current = $("#history_versions").children(".selected");
                                                  +				if (current.length != 0 && current.attr("ind") != "0") {
                                                  +					$("#spinner_play_speed").button("enable");
                                                  +					$("#btn_history_play").button("enable");
                                                  +					$("#btn_history_restore").button("enable");
                                                  +				} else {
                                                  +					$("#spinner_play_speed").button("disable");
                                                  +					$("#btn_history_play").button("disable");
                                                  +					$("#btn_history_restore").button("disable");
                                                  +				}
                                                  +			});
                                                  +		$("#history_versions").height("auto");
                                                  +		var top = $("#history_versions").offset().top;
                                                  +		var bottom = top + $("#history_versions").height() + 75;
                                                  +		if (bottom > $(window).height()) {
                                                  +			var height = $(window).height() - top - 75;
                                                  +			if (height < 140) {
                                                  +				height = 140;
                                                  +			}
                                                  +			$("#history_versions").height(height);
                                                  +		} else {
                                                  +			$("#history_versions").height("auto");
                                                  +		}
                                                  +	},
                                                  +	/**
                                                  +	 * 编辑版本注释
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            event
                                                  +	 */
                                                  +	editHistoryRemark : function(event, versionId) {
                                                  +		event.stopPropagation();
                                                  +		var versionDom = $("#history_versions").children("li[vid=" + versionId
                                                  +			+ "]");
                                                  +		versionDom.find(".remark_container").hide();
                                                  +		var currentRemark = versionDom.find(".remark_text").text();
                                                  +		var editContainer = versionDom.find(".edit_container");
                                                  +		editContainer.show();
                                                  +		editContainer.children("textarea").val(currentRemark).select();
                                                  +		editContainer.children(".save").bind("click", function(e) {
                                                  +			e.stopPropagation();
                                                  +			var newRemark = editContainer.children("textarea").val();
                                                  +			versionDom.find(".remark_text").text(newRemark);
                                                  +			versionDom.find(".remark_container").show();
                                                  +			editContainer.hide();
                                                  +			if (newRemark != currentRemark) {
                                                  +				CLB.send({
                                                  +					action : "versionRemark",
                                                  +					remark : newRemark,
                                                  +					versionId : versionId
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		editContainer.children(".cancel").bind("click", function(e) {
                                                  +			e.stopPropagation();
                                                  +			Dock.cancelHistoryRemark();
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 取消版本注释的编辑
                                                  +	 */
                                                  +	cancelHistoryRemark : function() {
                                                  +		$(".remark_container").show();
                                                  +		$(".edit_container").hide();
                                                  +	},
                                                  +	/**
                                                  +	 * 展示历史版本
                                                  +	 */
                                                  +	showHistoryVersion : function(defId) {
                                                  +		$("#spinner_play_speed").button("disable");
                                                  +		$("#btn_history_play").button("disable");
                                                  +		$("#btn_history_restore").button("disable");
                                                  +		Dock.cancelHistoryRemark();
                                                  +		$.ajax({
                                                  +			url : "/diagraming/getdefinition",
                                                  +			data : {
                                                  +				definitionId : defId
                                                  +			},
                                                  +			success : function(data) {
                                                  +				Dock.openHistory(data.definition);
                                                  +				if ($("#history_versions").children(".selected").attr("ind") != "0") {
                                                  +					$("#spinner_play_speed").button("enable");
                                                  +					$("#btn_history_play").button("enable");
                                                  +					$("#btn_history_restore").button("enable");
                                                  +				}
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 播放版本历史
                                                  +	 */
                                                  +	playVersions : function() {
                                                  +		var current = $("#history_versions").children(".selected");
                                                  +		// if(current.length == 0){
                                                  +		// return;
                                                  +		// }
                                                  +		var index = parseInt(current.attr("ind"));
                                                  +		Dock.playOneVersion(index--, 0);
                                                  +		$("#btn_history_play").children().attr("class", "ico ico_pause");
                                                  +		$("#btn_history_play").attr("title", "暂停").trigger("mouseenter");
                                                  +		$("#btn_history_restore").button("disable");
                                                  +	},
                                                  +	/**
                                                  +	 * 终止播放
                                                  +	 */
                                                  +	pauseVersions : function() {
                                                  +		if (this.playingTimeout) {
                                                  +			clearTimeout(this.playingTimeout);
                                                  +		}
                                                  +		this.playingTimeout = null;
                                                  +		$("#btn_history_play").children().attr("class", "ico ico_play");
                                                  +		$("#btn_history_play").attr("title", "从此版本播放");
                                                  +		$(".ico_playing").remove();
                                                  +		var current = $("#history_versions").children(".selected");
                                                  +		$("#history_versions").children(".playing").removeClass("playing");
                                                  +		if (current.length != 0 && current.attr("ind") != "0") {
                                                  +			$("#spinner_play_speed").button("enable");
                                                  +			$("#btn_history_play").button("enable");
                                                  +			$("#btn_history_restore").button("enable");
                                                  +		} else {
                                                  +			$("#spinner_play_speed").button("disable");
                                                  +			$("#btn_history_play").button("disable");
                                                  +			$("#btn_history_restore").button("disable");
                                                  +		}
                                                  +	},
                                                  +	playingTimeout : null,
                                                  +	/**
                                                  +	 * 播放一个版本
                                                  +	 */
                                                  +	playOneVersion : function(index, msgIndex) {
                                                  +		var current = $("#history_versions").children("li[ind=" + index + "]");
                                                  +		$("#history_versions").children(".selected").removeClass("selected");
                                                  +		current.addClass("selected").addClass("playing");
                                                  +		$(".ico_playing").remove();
                                                  +		current.append("<div class='ico ico_playing'></div>");
                                                  +
                                                  +		var version = Dock.historyVersions.versions[index];
                                                  +		var messageStr = version.messages[msgIndex];
                                                  +		var messages = JSON.parse(messageStr);
                                                  +		MessageSource.receive(messages);
                                                  +		var top = current.position().top;
                                                  +		if (top < 0) {
                                                  +			$("#history_versions").scrollTop($("#history_versions").scrollTop()
                                                  +				+ top);
                                                  +		}
                                                  +		var time = $("#spinner_play_speed").spinner("getValue") * 1000;
                                                  +		if (index == 0 && msgIndex == version.messages.length - 1) {
                                                  +			this.pauseVersions();
                                                  +		} else {
                                                  +			if (msgIndex < version.messages.length - 1) {
                                                  +				msgIndex++;
                                                  +			} else {
                                                  +				index = index - 1;
                                                  +				msgIndex = 0;
                                                  +			}
                                                  +			this.playingTimeout = setTimeout(function() {
                                                  +				Dock.playOneVersion(index, msgIndex);
                                                  +			}, time);
                                                  +		}
                                                  +
                                                  +	},
                                                  +	currentDefinition : null,
                                                  +	/**
                                                  +	 * 打开一个历史版本
                                                  +	 */
                                                  +	openHistory : function(definition) {
                                                  +		if (this.currentDefinition == null) {
                                                  +			this.currentDefinition = $.extend(true, {}, Model.define);
                                                  +		}
                                                  +		Utils.unselect();
                                                  +		Designer.open(definition);
                                                  +		// 取消快捷键
                                                  +		Designer.hotkey.cancel();
                                                  +		Designer.op.cancel();
                                                  +		$("#menu_bar").children().addClass("readonly");
                                                  +		$(".diagram_title").addClass("readonly");
                                                  +		$(".dock_buttons").children().addClass("disabled");
                                                  +		$("#dock_btn_history").removeClass("disabled");
                                                  +		$(".panel_box").addClass("readonly");
                                                  +		// 中止监听
                                                  +		CLB.stopListen();
                                                  +	},
                                                  +	/**
                                                  +	 * 关闭历史版本
                                                  +	 */
                                                  +	closeHistory : function() {
                                                  +		if (this.currentDefinition != null) {
                                                  +			Designer.open(this.currentDefinition);
                                                  +			this.currentDefinition = null;
                                                  +			this.activeOperation();
                                                  +		}
                                                  +	},
                                                  +	/**
                                                  +	 * 激活操作
                                                  +	 */
                                                  +	activeOperation : function() {
                                                  +		// 重新初始化快捷键
                                                  +		Designer.hotkey.init();
                                                  +		Designer.op.init();
                                                  +		$("#menu_bar").children().removeClass("readonly");
                                                  +		$(".diagram_title").removeClass("readonly");
                                                  +		$(".dock_buttons").children().removeClass("disabled");
                                                  +		$("#dock_btn_history").removeClass("disabled");
                                                  +		$(".panel_box").removeClass("readonly");
                                                  +		$("#history_versions").children(".selected").removeClass("selected");
                                                  +		// 继续监听
                                                  +		CLB.listen();
                                                  +		Dock.loadHistorys();
                                                  +	},
                                                  +	/**
                                                  +	 * 恢复版本
                                                  +	 */
                                                  +	restoreVersion : function() {
                                                  +		var selected = $("#history_versions").children(".selected");
                                                  +		if (selected.length) {
                                                  +			MessageSource.beginBatch();
                                                  +			var elements = Dock.currentDefinition.elements;
                                                  +			// 删除当前的所有
                                                  +			var removed = [];
                                                  +			if (elements) {
                                                  +				for (var id in elements) {
                                                  +					removed.push(elements[id]);
                                                  +				}
                                                  +			}
                                                  +			MessageSource.send("remove", removed);
                                                  +			// 更新画布
                                                  +			var updatePageMsg = {
                                                  +				page : Utils.copy(Dock.currentDefinition.page),
                                                  +				update : Utils.copy(Model.define.page)
                                                  +			};
                                                  +			MessageSource.send("updatePage", updatePageMsg);
                                                  +			// 添加新图形
                                                  +			var newElements = Model.define.elements;
                                                  +			var added = [];
                                                  +			if (newElements) {
                                                  +				for (var id in newElements) {
                                                  +					added.push(newElements[id]);
                                                  +				}
                                                  +			}
                                                  +			MessageSource.send("create", added);
                                                  +			MessageSource.commit();
                                                  +			Dock.activeOperation();
                                                  +		}
                                                  +	},
                                                  +	/**
                                                  +	 * 设置数据属性列表
                                                  +	 */
                                                  +	setAttributeList : function() {
                                                  +		var selectedIds = Utils.getSelectedIds();
                                                  +		var shape = Model.getShapeById(selectedIds[0]);
                                                  +		$(".clearfix").empty();
                                                  +		if (shape.dataAttributes) {
                                                  +			for (var i = 0; i < shape.dataAttributes.length; i++) {
                                                  +				var attr = shape.dataAttributes[i];
                                                  +				var typeText = $("#attr_add_type").children("option[value="
                                                  +					+ attr.type + "]").text();
                                                  +				var item = $("<li id='" + attr.id
                                                  +					+ "' class='attr_item attr_item_" + attr.id
                                                  +					+ "' onclick=\"Dock.editAttr('" + attr.id
                                                  +					+ "')\"><div class='attr_name'>" + attr.name
                                                  +					+ "</div><div class='attr_type'>" + typeText
                                                  +					+ "</div><div class='attr_value'>" + attr.value
                                                  +					+ "</div><div style='clear: both'></div></li>")
                                                  +					.appendTo($(".attr_list"));
                                                  +				if (attr.category != "default") {
                                                  +					item.append("<div class='ico ico_attr_delete' onclick=\"Dock.deleteAttr('"
                                                  +						+ attr.id + "', event)\"></div>");
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		this.fitAttrList();
                                                  +	},
                                                  +	/**
                                                  +	 * 让数据属性列表适应
                                                  +	 */
                                                  +	fitAttrList : function() {
                                                  +		var scroll = $("#tagContent").scrollTop();
                                                  +		$("#tagContent").height("auto");
                                                  +		var top = $("#tagContent").offset().top;
                                                  +		var bottom = top + $(".clearfix").height() + 10;
                                                  +		if (bottom > $(window).height()) {
                                                  +			var height = $(window).height() - top - 10;
                                                  +			if (height < 140) {
                                                  +				height = 140;
                                                  +			}
                                                  +			$("#tagContent").height(height);
                                                  +		} else {
                                                  +			$("#tagContent").height("auto");
                                                  +		}
                                                  +		$("#tagContent").scrollTop(scroll);
                                                  +	},
                                                  +	/**
                                                  +	 * 打开数据属性添加
                                                  +	 */
                                                  +	showAttrAdd : function() {
                                                  +		$("#attr_add_btn").hide();
                                                  +		$(".attr_add_items").show();
                                                  +		$("#attr_add_name").val("").focus();
                                                  +		$("#attr_add_type").val("string");
                                                  +		$("#attr_add_type").unbind().bind("change", function() {
                                                  +			Dock.setAttrValueInput(null, $(this).val());
                                                  +		});
                                                  +		Dock.setAttrValueInput(null, "string");
                                                  +		this.fitAttrList();
                                                  +	},
                                                  +	/**
                                                  +	 * 保存数据属性添加
                                                  +	 */
                                                  +	saveAttrAdd : function() {
                                                  +		var name = $("#attr_add_name").val();
                                                  +		if (name == "") {
                                                  +			$("#attr_add_name").focus();
                                                  +			return;
                                                  +		}
                                                  +		var type = $("#attr_add_type").val();
                                                  +		var value = $("#attr_add_value_arera").children().val();
                                                  +		var newAttr = {
                                                  +			name : name,
                                                  +			type : type,
                                                  +			value : value
                                                  +		};
                                                  +		Designer.addDataAttribute(newAttr);
                                                  +		this.setAttributeList();
                                                  +		// 初始化添加区域
                                                  +		this.showAttrAdd();
                                                  +	},
                                                  +	/**
                                                  +	 * 取消数据属性添加
                                                  +	 */
                                                  +	cancelAttrAdd : function() {
                                                  +		$("#attr_add_btn").show();
                                                  +		$(".attr_add_items").hide();
                                                  +		this.fitAttrList();
                                                  +	},
                                                  +	/**
                                                  +	 * 编辑数据属性
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            attrId
                                                  +	 */
                                                  +	editAttr : function(attrId) {
                                                  +		var item = $(".attr_item_" + attrId);
                                                  +		if (item.hasClass("attr_editing")) {
                                                  +			return;
                                                  +		}
                                                  +		if ($(".attr_editing").length > 0) {
                                                  +			var editingId = $(".attr_editing").attr("id");
                                                  +			this.saveAttrEdit(editingId);
                                                  +		}
                                                  +		item = $(".attr_item_" + attrId);
                                                  +		item.addClass("attr_editing");
                                                  +		var attr = Designer.getDataAttrById(attrId);
                                                  +		// 属性值输入
                                                  +		var input = this.setAttrValueInput(attr, attr.type);
                                                  +		input.val(attr.value).select();
                                                  +		if (attr.category != "default") {
                                                  +			// 属性名和类型输入
                                                  +			var nameDiv = item.children(".attr_name");
                                                  +			nameDiv.empty();
                                                  +			var nameInput = $("<input type='text' class='input_text' style='width: 88px'/>")
                                                  +				.appendTo(nameDiv);
                                                  +			nameInput.val(attr.name).select();
                                                  +			var typeDiv = item.children(".attr_type");
                                                  +			typeDiv.empty();
                                                  +			var select = $("<select class='input_select' style='width: 60px'></select>")
                                                  +				.appendTo(typeDiv);
                                                  +			select.html($("#attr_add_type").html()).val(attr.type);
                                                  +			select.bind("change", function() {
                                                  +				Dock.setAttrValueInput(attr, $(this).val());
                                                  +			});
                                                  +		}
                                                  +		// 添加显示设置
                                                  +		var displayArea = $("<div class='attr_edit_display'></div>")
                                                  +			.appendTo(item);
                                                  +		// 显示为的按钮
                                                  +		displayArea
                                                  +			.append("<div class='dock_label'><@i18n resource='diagraming.addattr.displayas'/></div>");
                                                  +		displayArea
                                                  +			.append("<div id='attr_edit_showtype' class='toolbar_button active btn_inline' style='width: 75px;'><div class='text_content'></div><div class='ico ico_dropdown'></div></div>");
                                                  +		displayArea.append("<div style='clear: both'></div>");
                                                  +		// 显示参数区域
                                                  +		displayArea.append("<div class='attr_display_options'></div>");
                                                  +		this.appendDisplayItems();
                                                  +		var showType = "none";
                                                  +		if (attr.showType) {
                                                  +			showType = attr.showType;
                                                  +		}
                                                  +		this.setAttrDisplay(showType);
                                                  +		$("#attr_edit_showtype").attr("ty", showType).button({
                                                  +			onMousedown : function() {
                                                  +				$("#attr_display_list").dropdown({
                                                  +					target : $("#attr_edit_showtype"),
                                                  +					onSelect : function(item) {
                                                  +						var type = item.attr("ty");
                                                  +						$("#attr_edit_showtype").attr("ty", type).button(
                                                  +							"setText", item.text());
                                                  +						Dock.setAttrDisplay(type);
                                                  +					}
                                                  +				});
                                                  +				var type = $("#attr_edit_showtype").text().trim();
                                                  +				$("#attr_display_list").children().each(function() {
                                                  +					if ($(this).text() == type) {
                                                  +						$("#attr_display_list").dropdown("select",
                                                  +							$(this));
                                                  +						return false;
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		$("#attr_edit_showtype").attr("ty", showType).button(
                                                  +			"setText",
                                                  +			$("#attr_display_list").children("li[ty=" + showType + "]")
                                                  +				.html());
                                                  +		if (showType != "none") {
                                                  +			$("#attr_display_name").attr("checked", attr.showName);
                                                  +			if (showType == "icon") {
                                                  +				this.setAttrIcon(attr.icon);
                                                  +			}
                                                  +		}
                                                  +		var horizontal = "mostright";
                                                  +		if (attr.horizontal) {
                                                  +			horizontal = attr.horizontal;
                                                  +		}
                                                  +		var vertical = "mostbottom";
                                                  +		if (attr.vertical) {
                                                  +			vertical = attr.vertical;
                                                  +		}
                                                  +		$("#attr_location_h").button(
                                                  +			"setText",
                                                  +			$("#attr_location_h_list").children("li[loc=" + horizontal
                                                  +				+ "]").html());
                                                  +		$("#attr_location_h").attr("loc", horizontal);
                                                  +		$("#attr_location_v").button(
                                                  +			"setText",
                                                  +			$("#attr_location_v_list").children("li[loc=" + vertical + "]")
                                                  +				.html());
                                                  +		$("#attr_location_v").attr("loc", vertical);
                                                  +		// 添加保存按钮
                                                  +		item
                                                  +			.append("<div class='attr_edit_btns'><div id='save_edit_attr' class='toolbar_button active'><@i18n resource='global.ok'/></div><div id='cancel_edit_attr' class='toolbar_button active' style='margin-left: 5px;'><@i18n resource='global.cancel'/></div></div>");
                                                  +		$("#save_edit_attr").bind("click", function(e) {
                                                  +			e.stopPropagation();
                                                  +			Dock.saveAttrEdit(attrId);
                                                  +		});
                                                  +		$("#cancel_edit_attr").bind("click", function(e) {
                                                  +			e.stopPropagation();
                                                  +			Dock.setAttributeList();
                                                  +		})
                                                  +	},
                                                  +	/**
                                                  +	 * 设置数据属性值的输入
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            attr
                                                  +	 * @param {}
                                                  +	 *            type
                                                  +	 */
                                                  +	setAttrValueInput : function(attr, type) {
                                                  +		var valueArea;
                                                  +		if (attr != null) {
                                                  +			// 如果为null,则是添加时调用,否则为修改
                                                  +			valueArea = $(".attr_editing").children(".attr_value");
                                                  +		} else {
                                                  +			valueArea = $("#attr_add_value_arera");
                                                  +		}
                                                  +		valueArea.empty();
                                                  +		var result;
                                                  +		if (type == "boolean") {
                                                  +			result = $("<select class='input_select'><option value=''></option><option value='true'>true</option><option value='false'>false</option></select>")
                                                  +				.appendTo(valueArea);;
                                                  +		} else if (type == "list") {
                                                  +			result = $("<select class='input_select'></select>")
                                                  +				.appendTo(valueArea);
                                                  +			if (attr.listItems) {
                                                  +				for (var i = 0; i < attr.listItems.length; i++) {
                                                  +					var listItem = attr.listItems[i];
                                                  +					result.append("<option value='" + listItem + "'>"
                                                  +						+ listItem + "</option>");
                                                  +				}
                                                  +			}
                                                  +		} else {
                                                  +			result = $("<input type='text' class='input_text'/>")
                                                  +				.appendTo(valueArea);
                                                  +		}
                                                  +		if (attr == null) {
                                                  +			valueArea.children().css("width", "260px");
                                                  +		} else {
                                                  +			valueArea.children().css("width", "128px");
                                                  +		}
                                                  +		return result;
                                                  +	},
                                                  +	/**
                                                  +	 * 添加数据显示的编辑项
                                                  +	 */
                                                  +	appendDisplayItems : function() {
                                                  +		var optionsArea = $(".attr_display_options");
                                                  +		// 详细区域,包括是否显示name,图标
                                                  +		var detailArea = $("<div class='opt_area'></div>")
                                                  +			.appendTo(optionsArea);
                                                  +		detailArea
                                                  +			.append("<input id='attr_display_name' type='checkbox'/><label for='attr_display_name'><@i18n resource='diagraming.addattr.showname'/></label>");
                                                  +		// 选择图标的Button
                                                  +		var iconButtonArea = $("<div id='attr_icon_area' style='padding-top:5px;'></div>")
                                                  +			.appendTo(detailArea);
                                                  +		iconButtonArea
                                                  +			.append("<div class='dock_label'><@i18n resource='diagraming.addattr.icon'/></div>");
                                                  +		iconButtonArea
                                                  +			.append("<div id='attr_display_icon' ico='' class='toolbar_button active btn_inline' style='width: 50px'><div class='text_content'></div><div class='ico ico_dropdown'></div></div>");
                                                  +		iconButtonArea.append("<div style='clear: both'></div>");
                                                  +		if ($("#attr_icon_list").children("li").html() == "") {
                                                  +			// 初始化图标选择
                                                  +			var html = "";
                                                  +			var index = 1;
                                                  +			while (index <= 49) {
                                                  +				if (index == 30) {
                                                  +					// 30时,要空出一格
                                                  +					html += "<div></div>";
                                                  +				}
                                                  +				html += "<div onmousedown='Dock.setAttrIcon(" + index
                                                  +					+ ")' class='attr_icon_item'></div>";
                                                  +				index++;
                                                  +			}
                                                  +			$("#attr_icon_list").children("li").html(html);
                                                  +		}
                                                  +		// 位置设置区域
                                                  +		var locationArea = $("<div class='opt_area location_area'></div>")
                                                  +			.appendTo(optionsArea);
                                                  +		locationArea
                                                  +			.append("<div><@i18n resource='diagraming.addattr.display.location'/></div>");
                                                  +		locationArea
                                                  +			.append("<div class='dock_label'><@i18n resource='diagraming.addattr.display.h'/></div>");
                                                  +		locationArea
                                                  +			.append("<div id='attr_location_h' class='toolbar_button active btn_inline' loc='mostright'><div class='text_content location_content'><div><span style='left: 11px'></span></div>Most Right</div><div class='ico ico_dropdown'></div></div>");
                                                  +		locationArea.append("<div style='clear: both'></div>");
                                                  +		locationArea
                                                  +			.append("<div class='dock_label'><@i18n resource='diagraming.addattr.display.v'/></div>");
                                                  +		locationArea
                                                  +			.append("<div id='attr_location_v' class='toolbar_button active btn_inline' loc='mostbottom'><div class='text_content location_content'><div><span style='top: 11px'></span></div>Most Bottom</div><div class='ico ico_dropdown'></div></div>");
                                                  +		locationArea.append("<div style='clear: both'></div>");
                                                  +		optionsArea.append("<div style='clear: both'></div>");
                                                  +		$("#attr_display_icon").button({
                                                  +			onMousedown : function() {
                                                  +				$("#attr_icon_list").dropdown({
                                                  +					target : $("#attr_display_icon")
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		$("#attr_location_h").button({
                                                  +			onMousedown : function() {
                                                  +				$("#attr_location_h_list").dropdown({
                                                  +					target : $("#attr_location_h"),
                                                  +					onSelect : function(item) {
                                                  +						$("#attr_location_h").button("setText",
                                                  +							item.html());
                                                  +						$("#attr_location_h").attr("loc",
                                                  +							item.attr("loc"));
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +		$("#attr_location_v").button({
                                                  +			onMousedown : function() {
                                                  +				$("#attr_location_v_list").dropdown({
                                                  +					target : $("#attr_location_v"),
                                                  +					onSelect : function(item) {
                                                  +						$("#attr_location_v").button("setText",
                                                  +							item.html());
                                                  +						$("#attr_location_v").attr("loc",
                                                  +							item.attr("loc"));
                                                  +					}
                                                  +				});
                                                  +			}
                                                  +		});
                                                  +	},
                                                  +	/**
                                                  +	 * 根据数据属性显示类型,设置操作界面
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            type
                                                  +	 */
                                                  +	setAttrDisplay : function(type) {
                                                  +		if (type == "none") {
                                                  +			$(".attr_display_options").hide();
                                                  +		} else {
                                                  +			$(".attr_display_options").show();
                                                  +			if (type == "icon") {
                                                  +				$("#attr_icon_area").show();
                                                  +			} else {
                                                  +				$("#attr_icon_area").hide();
                                                  +			}
                                                  +		}
                                                  +	},
                                                  +	/**
                                                  +	 * 设置数据属性的显示图标
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            icon
                                                  +	 */
                                                  +	setAttrIcon : function(icon) {
                                                  +		$("#attr_display_icon").attr("ico", icon).button("setText", "");
                                                  +		if (icon) {
                                                  +			$("#attr_display_icon").button("setText",
                                                  +				"<img src='/images/data-attr/" + icon + ".png'/>");
                                                  +		}
                                                  +	},
                                                  +	/**
                                                  +	 * 保存数据属性编辑
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            attrId
                                                  +	 */
                                                  +	saveAttrEdit : function(attrId) {
                                                  +		var item = $(".attr_item_" + attrId);
                                                  +		if (!item.hasClass("attr_editing")) {
                                                  +			return;
                                                  +		}
                                                  +		var attr = Designer.getDataAttrById(attrId);
                                                  +		if (attr.category != "default") {
                                                  +			var name = item.children(".attr_name").children("input").val();
                                                  +			if (name == "") {
                                                  +				item.children(".attr_name").children("input").focus();
                                                  +				return;
                                                  +			}
                                                  +			attr.name = name;
                                                  +			attr.type = item.children(".attr_type").children("select").val();
                                                  +		}
                                                  +		attr.value = item.children(".attr_value").children().val();
                                                  +		var showType = $("#attr_edit_showtype").attr("ty");
                                                  +		attr.showType = showType;
                                                  +		if (showType != "none") {
                                                  +			attr.showName = $("#attr_display_name").is(":checked");
                                                  +			attr.horizontal = $("#attr_location_h").attr("loc");
                                                  +			attr.vertical = $("#attr_location_v").attr("loc");
                                                  +			if (showType == "icon") {
                                                  +				attr.icon = $("#attr_display_icon").attr("ico");
                                                  +			}
                                                  +		}
                                                  +		// BPMN数据属性规则
                                                  +		var selectedIds = Utils.getSelectedIds();
                                                  +		var shape = Model.getShapeById(selectedIds[0]);
                                                  +		if (attr.category == "default" && shape.category == "bpmn") {
                                                  +			if (!shape.attribute) {
                                                  +				shape.attribute = {};
                                                  +			}
                                                  +			if (!shape.attribute.markers) {
                                                  +				shape.attribute.markers = [];
                                                  +			}
                                                  +			var markers = shape.attribute.markers;
                                                  +			if (attr.name == "loopCharacteristics") {
                                                  +				Utils.removeFromArray(markers, "loop");
                                                  +				Utils.removeFromArray(markers, "sequential");
                                                  +				Utils.removeFromArray(markers, "parallel");
                                                  +				if (attr.value == "StandardLoopCharacteristics") {
                                                  +					// 显示循环
                                                  +					Utils.addToArray(markers, "loop");
                                                  +				} else if (attr.value == "MultipleLoopCharacteristics") {
                                                  +					var sequantial = Designer
                                                  +						.getDefaultDataAttrByName("isSequantial");
                                                  +					if (sequantial != null) {
                                                  +						if (sequantial.value == "true") {
                                                  +							// 显示三条横线
                                                  +							Utils.addToArray(markers, "sequential");
                                                  +						} else {
                                                  +							// 显示三条竖线
                                                  +							Utils.addToArray(markers, "parallel");
                                                  +						}
                                                  +					}
                                                  +				}
                                                  +			} else if (attr.name == "isSequantial") {
                                                  +				Utils.removeFromArray(markers, "sequential");
                                                  +				Utils.removeFromArray(markers, "parallel");
                                                  +				var loop = Designer
                                                  +					.getDefaultDataAttrByName("loopCharacteristics");
                                                  +				if (loop != null && loop.value == "MultipleLoopCharacteristics") {
                                                  +					if (attr.value == "true") {
                                                  +						// 显示三条横线
                                                  +						Utils.addToArray(markers, "sequential");
                                                  +					} else {
                                                  +						// 显示三条竖线
                                                  +						Utils.addToArray(markers, "parallel");
                                                  +					}
                                                  +				}
                                                  +			} else if (attr.name == "isForCompensation") {
                                                  +				// 显示两个左箭头
                                                  +				Utils.removeFromArray(markers, "compensation");
                                                  +				if (attr.value == "true") {
                                                  +					Utils.addToArray(markers, "compensation");
                                                  +				}
                                                  +			} else if (attr.name == "isCollection"
                                                  +				|| attr.name == "ParticipantMultiplicity") {
                                                  +				Utils.removeFromArray(markers, "parallel");
                                                  +				if (attr.value == "true") {
                                                  +					// 显示三条竖线
                                                  +					Utils.addToArray(markers, "parallel");
                                                  +				}
                                                  +			} else if (attr.name == "loopType") {
                                                  +				Utils.removeFromArray(markers, "loop");
                                                  +				Utils.removeFromArray(markers, "sequential");
                                                  +				Utils.removeFromArray(markers, "parallel");
                                                  +				if (attr.value == "Standard") {
                                                  +					// 显示循环
                                                  +					Utils.addToArray(markers, "loop");
                                                  +				} else if (attr.value == "MultiInstanceSequential") {
                                                  +					// 显示三条横线
                                                  +					Utils.addToArray(markers, "sequential");
                                                  +				} else if (attr.value == "MultiInstanceParallel") {
                                                  +					// 显示三条竖线
                                                  +					Utils.addToArray(markers, "parallel");
                                                  +				}
                                                  +			}
                                                  +		}
                                                  +		Designer.updateDataAttribute(attr);
                                                  +		this.setAttributeList();
                                                  +	},
                                                  +	/**
                                                  +	 * 删除数据属性
                                                  +	 *
                                                  +	 * @param {}
                                                  +	 *            attrId
                                                  +	 */
                                                  +	deleteAttr : function(attrId, event) {
                                                  +		event.stopPropagation();
                                                  +		var item = $(".attr_item_" + attrId);
                                                  +		item.remove();
                                                  +		this.fitAttrList();
                                                  +		Designer.deleteDataAttribute(attrId);
                                                  +	},
                                                  +	/**
                                                  +	 * 进入全屏
                                                  +	 */
                                                  +	fullScreen : function(element, presentation) {
                                                  +		if (element.requestFullscreen) {
                                                  +			element.requestFullscreen();
                                                  +		} else if (element.mozRequestFullScreen) {
                                                  +			element.mozRequestFullScreen();
                                                  +		} else if (element.webkitRequestFullscreen) {
                                                  +			element.webkitRequestFullscreen();
                                                  +		} else {
                                                  +			// 无法进入全屏,提示错误
                                                  +			if (presentation) {
                                                  +				$("#fullscreen_tip").find(".t").text("由于您的浏览器限制,无法进入演示视图。");
                                                  +			} else {
                                                  +				$("#fullscreen_tip").find(".t").text("无法进入全屏视图,您可以按(F11)进入。");
                                                  +			}
                                                  +			$("#fullscreen_tip").fadeIn();
                                                  +		}
                                                  +	},
                                                  +	/**
                                                  +	 * 进入演示视图
                                                  +	 */
                                                  +	enterPresentation : function() {
                                                  +		$("#designer").bind('webkitfullscreenchange', function(e) {
                                                  +			Dock.manageFullScreen();
                                                  +		});
                                                  +		$(document).bind('mozfullscreenchange', function(e) {
                                                  +			Dock.manageFullScreen();
                                                  +		}).bind('fullscreenchange', function(e) {
                                                  +			Dock.manageFullScreen();
                                                  +		});
                                                  +		this.fullScreen(Utils.getDomById("designer"), true);
                                                  +
                                                  +	},
                                                  +	/**
                                                  +	 * 进入全屏视图
                                                  +	 */
                                                  +	enterFullScreen : function() {
                                                  +		this.fullScreen(document.documentElement);
                                                  +	},
                                                  +	manageFullScreen : function() {
                                                  +		var designer = Utils.getDomById("designer");
                                                  +		if (document.fullscreenElement || document.webkitFullscreenElement
                                                  +			|| document.mozFullScreenElement) {
                                                  +			// 如果进入全屏状态
                                                  +			$("#shape_panel").addClass("readonly");
                                                  +			$("#designer_viewport").addClass("readonly");
                                                  +			$(window).unbind("resize.designer");
                                                  +			$("#designer_layout").height(window.screen.height);
                                                  +			// 取消快捷键
                                                  +			Designer.hotkey.cancel();
                                                  +			Designer.op.cancel();
                                                  +			// 隐藏Dock
                                                  +			$("#dock").hide();
                                                  +			$(".dock_view").hide();
                                                  +			Designer.contextMenu.destroy();
                                                  +			Designer.op.canvasFreeDraggable();
                                                  +		} else {
                                                  +			$("#shape_panel").removeClass("readonly");
                                                  +			$("#designer_viewport").removeClass("readonly");
                                                  +			Designer.initialize.initLayout();
                                                  +			Designer.hotkey.init();
                                                  +			Designer.op.init();
                                                  +			$("#dock").show();
                                                  +			if (Dock.currentView != "") {
                                                  +				Dock.showView(Dock.currentView);
                                                  +			}
                                                  +			Designer.contextMenu.init();
                                                  +			$("#designer").unbind('webkitfullscreenchange');
                                                  +			$("#designer").unbind('mozfullscreenchange')
                                                  +				.unbind('fullscreenchange');
                                                  +		}
                                                  +	}
                                                  +};
                                                  +
                                                  +/**
                                                  + * 鹰眼导航
                                                  + *
                                                  + * @type {}
                                                  + */
                                                  +var Navigator = {
                                                  +	/**
                                                  +	 * 初始化
                                                  +	 */
                                                  +	init : function() {
                                                  +		$("#designer_layout").bind("scroll", function() {
                                                  +			Navigator.setView();
                                                  +		});
                                                  +		// 绑定拖动
                                                  +		$("#navigation_eye").bind("mousedown", function(downE) {
                                                  +			var eye = $(this);
                                                  +			var beginPos = eye.position();
                                                  +			// 先取消滚动事件
                                                  +			$("#designer_layout").unbind("scroll");
                                                  +			var layout = $("#designer_layout");
                                                  +			var beginTop = layout.scrollTop();
                                                  +			var beginLeft = layout.scrollLeft();
                                                  +			// 设计器画布
                                                  +			var designerCanvas = $("#designer_canvas");
                                                  +			var canvasW = designerCanvas.width();
                                                  +			var canvasH = designerCanvas.height();
                                                  +			// 鹰眼视图画布
                                                  +			var canvas = $("#navigation_canvas");
                                                  +			var navW = canvas.width();
                                                  +			var navH = canvas.height();
                                                  +			// 宽高比例
                                                  +			var scaleW = canvasW / navW;
                                                  +			var scaleH = canvasH / navH;
                                                  +			$(document).bind("mousemove.navigator", function(moveE) {
                                                  +				var offsetX = moveE.pageX - downE.pageX;
                                                  +				var offsetY = moveE.pageY - downE.pageY;
                                                  +				var newLeft = beginLeft + offsetX * scaleW;
                                                  +				layout.scrollLeft(newLeft);
                                                  +				var newTop = beginTop + offsetY * scaleH;
                                                  +				layout.scrollTop(newTop);
                                                  +				eye.css({
                                                  +					left : beginPos.left + offsetX,
                                                  +					top : beginPos.top + offsetY
                                                  +				});
                                                  +			});
                                                  +			$(document).bind("mouseup.navigator", function(moveE) {
                                                  +				$(document).unbind("mousemove.navigator");
                                                  +				$(document).unbind("mouseup.navigator");
                                                  +				Navigator.setView();
                                                  +				// 重新绑定
                                                  +				$("#designer_layout").bind("scroll",
                                                  +					function() {
                                                  +						Navigator.setView();
                                                  +					});
                                                  +			});
                                                  +		});
                                                  +		$("#navigation_canvas").bind("click", function(e) {
                                                  +			var pos = Utils.getRelativePos(e.pageX, e.pageY, $(this));
                                                  +			// 设计器画布
                                                  +			var designerCanvas = $("#designer_canvas");
                                                  +			var canvasW = designerCanvas.width();
                                                  +			var canvasH = designerCanvas.height();
                                                  +			// 鹰眼视图画布
                                                  +			var canvas = $("#navigation_canvas");
                                                  +			var navW = canvas.width();
                                                  +			var navH = canvas.height();
                                                  +			// 宽高比例
                                                  +			var scaleW = canvasW / navW;
                                                  +			var scaleH = canvasH / navH;
                                                  +			// 得到点击位置,相对于设计器画布的坐标
                                                  +			var canvasX = pos.x * scaleW;
                                                  +			var canvasY = pos.y * scaleH;
                                                  +			// 把点击坐标,置于屏幕中心
                                                  +			var layout = $("#designer_layout");
                                                  +			var margin = Designer.config.pageMargin;
                                                  +			layout.scrollLeft(canvasX + margin - layout.width() / 2);
                                                  +			layout.scrollTop(canvasY + margin - layout.height() / 2);
                                                  +		});
                                                  +		this.setView();
                                                  +	},
                                                  +	/**
                                                  +	 * 绘制鹰眼视图
                                                  +	 */
                                                  +	draw : function() {
                                                  +		if (this.drawNavigationTimeout) {
                                                  +			window.clearTimeout(this.drawNavigationTimeout);
                                                  +		}
                                                  +		this.drawNavigationTimeout = setTimeout(function() {
                                                  +			var canvas = $("#navigation_canvas");
                                                  +			var ctx = canvas[0].getContext("2d");
                                                  +			ctx.save();
                                                  +			ctx.clearRect(0, 0, canvas.width(), canvas.height());
                                                  +			ctx.scale(canvas.width() / Model.define.page.width, canvas
                                                  +					.height()
                                                  +				/ Model.define.page.height);
                                                  +			// 从最底层开始绘制图形
                                                  +			for (var i = 0; i < Model.orderList.length; i++) {
                                                  +				var shapeId = Model.orderList[i].id;
                                                  +				var shape = Model.getShapeById(shapeId);
                                                  +				ctx.save();
                                                  +				if (shape.name != "linker") {
                                                  +					// 对图形执行绘制
                                                  +					var p = shape.props;
                                                  +					var style = shape.lineStyle;
                                                  +					ctx.translate(p.x, p.y);
                                                  +					ctx.translate(p.w / 2, p.h / 2);
                                                  +					ctx.rotate(p.angle);
                                                  +					ctx.translate(-(p.w / 2), -(p.h / 2));
                                                  +					ctx.globalAlpha = shape.shapeStyle.alpha;
                                                  +					Designer.painter.renderShapePath(ctx, shape);
                                                  +				} else {
                                                  +					var linker = shape;
                                                  +					var style = linker.lineStyle;
                                                  +					var points = linker.points;
                                                  +					var from = linker.from;
                                                  +					var to = linker.to;
                                                  +					ctx.beginPath();
                                                  +					ctx.moveTo(from.x, from.y);
                                                  +					if (linker.linkerType == "curve") {
                                                  +						var cp1 = points[0];
                                                  +						var cp2 = points[1];
                                                  +						ctx.bezierCurveTo(cp1.x, cp1.y, cp2.x, cp2.y,
                                                  +							to.x, to.y);
                                                  +					} else {
                                                  +						for (var j = 0; j < points.length; j++) {
                                                  +							// 如果是折线,会有折点
                                                  +							var linkerPoint = points[j];
                                                  +							ctx.lineTo(linkerPoint.x, linkerPoint.y);
                                                  +						}
                                                  +						ctx.lineTo(to.x, to.y);
                                                  +					}
                                                  +					ctx.lineWidth = style.lineWidth;
                                                  +					ctx.strokeStyle = "rgb(" + style.lineColor + ")";
                                                  +					ctx.stroke();
                                                  +				}
                                                  +				ctx.restore();
                                                  +			}
                                                  +			ctx.restore();
                                                  +			Navigator.setView();
                                                  +			this.drawNavigationTimeout = null;
                                                  +		}, 100);
                                                  +	},
                                                  +	/**
                                                  +	 * 设置鹰眼视图
                                                  +	 */
                                                  +	setView : function() {
                                                  +		var navigator = $("#navigation_eye");
                                                  +		// 设计器可见视图
                                                  +		var layout = $("#designer_layout");
                                                  +		var viewW = layout.width();
                                                  +		var viewH = layout.height();
                                                  +		// 鹰眼视图画布
                                                  +		var canvas = $("#navigation_canvas");
                                                  +		var navW = canvas.width();
                                                  +		var navH = canvas.height();
                                                  +		// 设计器画布
                                                  +		var designerCanvas = $("#designer_canvas");
                                                  +		var canvasW = designerCanvas.width();
                                                  +		var canvasH = designerCanvas.height();
                                                  +		var margin = Designer.config.pageMargin;
                                                  +		// 得到设计器画布在可视窗口中的left, top
                                                  +		var visibleLeft = margin - layout.scrollLeft();
                                                  +		var visibleRight = visibleLeft + canvasW;
                                                  +		if (visibleLeft < 0) {
                                                  +			visibleLeft = 0;
                                                  +		} else if (visibleLeft > viewW) {
                                                  +			visibleLeft = viewW;
                                                  +		}
                                                  +		if (visibleRight > viewW) {
                                                  +			visibleRight = viewW;
                                                  +		} else if (visibleRight < 0) {
                                                  +			visibleRight = 0;
                                                  +		}
                                                  +		var visibleTop = margin - layout.scrollTop();
                                                  +		var visibleBottom = visibleTop + canvasH;
                                                  +		if (visibleTop < 0) {
                                                  +			visibleTop = 0;
                                                  +		} else if (visibleTop > viewH) {
                                                  +			visibleTop = viewH;
                                                  +		}
                                                  +		if (visibleBottom > viewH) {
                                                  +			visibleBottom = viewH;
                                                  +		} else if (visibleBottom < 0) {
                                                  +			visibleBottom = 0;
                                                  +		}
                                                  +		var visibleW = visibleRight - visibleLeft;
                                                  +		var visibleH = visibleBottom - visibleTop;
                                                  +		if (visibleW == 0 || visibleH == 0) {
                                                  +			// 画布已经不可见
                                                  +			navigator.hide();
                                                  +		} else {
                                                  +			// 换算成鹰眼视图中的left, top
                                                  +			var navLeft = layout.scrollLeft() - margin;
                                                  +			if (navLeft < 0) {
                                                  +				navLeft = 0;
                                                  +			}
                                                  +			navLeft = navLeft * (navW / canvasW);
                                                  +			var navTop = layout.scrollTop() - margin;
                                                  +			if (navTop < 0) {
                                                  +				navTop = 0;
                                                  +			}
                                                  +			navTop = navTop * (navH / canvasH);
                                                  +			var navViewW = visibleW * (navW / canvasW);
                                                  +			var navViewH = visibleH * (navH / canvasH);
                                                  +			navigator.css({
                                                  +				left : navLeft - 1,
                                                  +				top : navTop - 1,
                                                  +				width : navViewW,
                                                  +				height : navViewH
                                                  +			}).show();
                                                  +		}
                                                  +	}
                                                  +};
                                                  +/**
                                                  + * jQuery的扩展
                                                  + */
                                                  +(function($) {
                                                  +	/**
                                                  +	 * 按钮
                                                  +	 */
                                                  +	$.fn.button = function(options) {
                                                  +		if (typeof options == "string") {
                                                  +			if (options == "disable") {
                                                  +				$(this).addClass("disabled");
                                                  +				$(this).find("input").attr("disabled", true);
                                                  +			} else if (options == "enable") {
                                                  +				$(this).removeClass("disabled");
                                                  +				$(this).find("input").attr("disabled", false);
                                                  +			} else if (options == "isDisabled") {
                                                  +				return $(this).hasClass("disabled");
                                                  +			} else if (options == "isSelected") {
                                                  +				return $(this).hasClass("selected");
                                                  +			} else if (options == "unselect") {
                                                  +				$(this).removeClass("selected");
                                                  +			} else if (options == "select") {
                                                  +				$(this).addClass("selected");
                                                  +			} else if (options == "setText") {
                                                  +				$(this).children(".text_content").html(arguments[1]);
                                                  +			} else if (options == "setColor") {
                                                  +				$(this).children(".btn_color").css("background-color",
                                                  +					"rgb(" + arguments[1] + ")");
                                                  +			} else if (options == "getColor") {
                                                  +				var color = $(this).children(".btn_color")
                                                  +					.css("background-color").replace(/\s/g, "");
                                                  +				return color.substring(4, color.length - 1);
                                                  +			}
                                                  +			return $(this);
                                                  +		}
                                                  +		var target = $(this);
                                                  +		target.unbind("click");
                                                  +		target.unbind("mousedown")
                                                  +		if (options.onClick) {
                                                  +			target.bind("click", function() {
                                                  +				if (target.button("isDisabled")) {
                                                  +					return;
                                                  +				}
                                                  +				options.onClick();
                                                  +			});
                                                  +		}
                                                  +		if (options.onMousedown) {
                                                  +			target.bind("mousedown", function(e) {
                                                  +				if (target.button("isDisabled")) {
                                                  +					return;
                                                  +				}
                                                  +				options.onMousedown();
                                                  +				e.stopPropagation();
                                                  +			});
                                                  +		}
                                                  +	};
                                                  +	var currentMenu = null;
                                                  +	// 下拉控件
                                                  +	$.fn.dropdown = function(options) {
                                                  +		var menu = $(this);
                                                  +		menu.find(".ico_selected").remove();
                                                  +		if (typeof options == "string") {
                                                  +			if (options == "close") {
                                                  +				menu.hide();
                                                  +				currentMenu.target.removeClass("selected");
                                                  +				$(document).unbind("mousedown.ui_dropdown");
                                                  +				currentMenu = null;
                                                  +			} else if (options == "select") {
                                                  +				arguments[1].prepend("<div class='ico ico_selected'></div>");
                                                  +			}
                                                  +			return;
                                                  +		}
                                                  +		if (currentMenu != null) {
                                                  +			/**
                                                  +			 * 如果当前有其他菜单是打开的,则要先关闭
                                                  +			 */
                                                  +			currentMenu.menu.dropdown("close");
                                                  +		}
                                                  +		var menu = $(this);
                                                  +		var tar = options.target;
                                                  +		currentMenu = {
                                                  +			target : tar,
                                                  +			menu : menu
                                                  +		};
                                                  +		var offset = tar.offset();
                                                  +		tar.addClass("selected");
                                                  +		menu.show();
                                                  +		var left;
                                                  +		if (options.position == "center") {
                                                  +			left = offset.left + tar.outerWidth() / 2 - menu.outerWidth() / 2;
                                                  +		} else if (options.position == "right") {
                                                  +			left = offset.left + tar.outerWidth() - menu.outerWidth();
                                                  +		} else {
                                                  +			left = offset.left;
                                                  +		}
                                                  +		var top = offset.top + tar.outerHeight();
                                                  +		if (top + menu.outerHeight() > $(window).height()) {
                                                  +			top = $(window).height() - menu.outerHeight();
                                                  +		}
                                                  +		menu.css({
                                                  +			top : top,
                                                  +			left : left
                                                  +		});
                                                  +		if (typeof options.zindex != "undefined") {
                                                  +			menu.css("z-index", options.zindex);
                                                  +		}
                                                  +		menu.unbind("mousedown").bind("mousedown", function(e) {
                                                  +			e.stopPropagation();
                                                  +		});
                                                  +		if (typeof options.bind == "undefined" || options.bind == true) {
                                                  +			menu.find("li:not(.devider,.menu_text)").unbind().bind("click",
                                                  +				function() {
                                                  +					var item = $(this);
                                                  +					if (!item.menuitem("isDisabled")
                                                  +						&& item.children(".extend_menu").length == 0) {
                                                  +						if (options.onSelect) {
                                                  +							options.onSelect(item);
                                                  +						}
                                                  +						menu.dropdown("close");
                                                  +					}
                                                  +				});
                                                  +		}
                                                  +		$(document).bind("mousedown.ui_dropdown", function() {
                                                  +			menu.dropdown("close");
                                                  +		});
                                                  +	};
                                                  +	// 调色板
                                                  +	$.colorpicker = function(options) {
                                                  +		var picker = $("#color_picker");
                                                  +		picker.find(".selected").removeClass("selected");
                                                  +		if (!picker.attr("init")) {
                                                  +			// 没有经过初始化
                                                  +			picker.find("div").each(function() {
                                                  +				var color = $(this).css("background-color");
                                                  +				color = color.replace(/\s/g, "");
                                                  +				color = color.substring(4, color.length - 1);
                                                  +				$(this).attr("col", color);
                                                  +			});
                                                  +			picker.attr("init", true);
                                                  +		}
                                                  +		var opt = $.extend({}, options, {
                                                  +			bind : false
                                                  +		});
                                                  +		picker.dropdown(opt);
                                                  +		picker.children(".color_items").children("div").unbind().bind("click",
                                                  +			function() {
                                                  +				if (options.onSelect) {
                                                  +					var color = $(this).css("background-color");
                                                  +					color = color.replace(/\s/g, "");
                                                  +					color = color.substring(4, color.length - 1);
                                                  +					options.onSelect(color);
                                                  +				}
                                                  +				$("#color_picker").dropdown("close");
                                                  +			});
                                                  +		if (options.color) {
                                                  +			picker.find("div[col='" + options.color + "']")
                                                  +				.addClass("selected");
                                                  +		}
                                                  +		$("#color_picker").children(".color_extend").remove();
                                                  +		if (options.extend) {
                                                  +			$("#color_picker").append("<div class='color_extend'>"
                                                  +				+ options.extend + "</div>")
                                                  +		}
                                                  +	};
                                                  +	// 颜色按钮
                                                  +	$.fn.colorButton = function(opt) {
                                                  +		var tar = $(this);
                                                  +		if (typeof opt == "string") {
                                                  +			if (opt == "setColor") {
                                                  +				tar.children(".picker_btn_holder").css("background-color",
                                                  +					"rgb(" + arguments[1] + ")");
                                                  +			}
                                                  +			return;
                                                  +		}
                                                  +		tar
                                                  +			.html("<div class='picker_btn_holder'></div><div class='ico ico_colordrop'></div>");
                                                  +		tar.bind("mousedown", function(e) {
                                                  +			if (tar.button("isDisabled")) {
                                                  +				return;
                                                  +			}
                                                  +			e.stopPropagation();
                                                  +			var options = $.extend({}, opt);
                                                  +			options.target = tar;
                                                  +			options.onSelect = function(color) {
                                                  +				tar.colorButton("setColor", color);
                                                  +				if (opt.onSelect) {
                                                  +					opt.onSelect(color);
                                                  +				}
                                                  +			};
                                                  +			var color = $(this).children(".picker_btn_holder")
                                                  +				.css("background-color");
                                                  +			color = color.replace(/\s/g, "");
                                                  +			color = color.substring(4, color.length - 1);
                                                  +			options.color = color;
                                                  +			$.colorpicker(options);
                                                  +		});
                                                  +	};
                                                  +	/**
                                                  +	 * 数字框 min: 0, max: 360, unit: "°", step: 15,
                                                  +	 */
                                                  +	$.fn.spinner = function(opt) {
                                                  +		var spinner = $(this);
                                                  +		if (typeof opt == "string") {
                                                  +			if (opt == "getValue") {
                                                  +				var result = spinner.find("input").val();
                                                  +				result = parseFloat(result);
                                                  +				return result;
                                                  +			} else if (opt == "setValue") {
                                                  +				spinner.find("input").val(arguments[1]);
                                                  +				spinner.attr("old", arguments[1]);
                                                  +			}
                                                  +			return;
                                                  +		}
                                                  +		spinner.html("<div class='spinner_input'><input /></div><div class='buttons'><div class='spinner_up'></div><div class='spinner_down'></div></div>");
                                                  +		var defaults = {
                                                  +			min : 0,
                                                  +			max : Number.MAX_VALUE,
                                                  +			step : 1,
                                                  +			unit : ""
                                                  +		};
                                                  +		opt = $.extend(defaults, opt);
                                                  +		var inputBox = spinner.children(".spinner_input");
                                                  +		var input = inputBox.find("input");
                                                  +		spinner.spinner("setValue", opt.min + opt.unit);
                                                  +		spinner.find(".spinner_up").bind("click", function() {
                                                  +			if (spinner.button("isDisabled")) {
                                                  +				return;
                                                  +			}
                                                  +			var now = spinner.spinner("getValue");
                                                  +			var newVal = now + opt.step;
                                                  +			setSpinnerValue(spinner, newVal, opt);
                                                  +		});
                                                  +		spinner.find(".spinner_down").bind("click", function() {
                                                  +			if (spinner.button("isDisabled")) {
                                                  +				return;
                                                  +			}
                                                  +			var now = spinner.spinner("getValue");
                                                  +			var newVal = now - opt.step;
                                                  +			setSpinnerValue(spinner, newVal, opt);
                                                  +		});
                                                  +		input.bind("keydown", function(e) {
                                                  +			if (e.keyCode == 13) {
                                                  +				var newVal = parseInt($(this).val());
                                                  +				if (isNaN(newVal)) {
                                                  +					newVal = opt.min;
                                                  +				}
                                                  +				setSpinnerValue(spinner, newVal, opt);
                                                  +			}
                                                  +		}).bind("focus", function(e) {
                                                  +			$(this).select();
                                                  +			$(this).bind("mouseup", function(e) {
                                                  +				e.preventDefault();
                                                  +				$(this).unbind("mouseup");
                                                  +			});
                                                  +			var box = $(this).parent().parent();
                                                  +			if (!box.hasClass("active")) {
                                                  +				box.addClass("active inset");
                                                  +			}
                                                  +		}).bind("blur", function(e) {
                                                  +			var box = $(this).parent().parent();
                                                  +			if (box.hasClass("inset")) {
                                                  +				box.removeClass("active inset");
                                                  +			}
                                                  +		});
                                                  +	};
                                                  +	function setSpinnerValue(spinner, value, opt) {
                                                  +		if (value > opt.max) {
                                                  +			value = opt.max;
                                                  +		}
                                                  +		if (value < opt.min) {
                                                  +			value = opt.min;
                                                  +		}
                                                  +		var oldValue = spinner.attr("old");
                                                  +		var newValue = value + opt.unit;
                                                  +		if (oldValue != newValue) {
                                                  +			if (opt.onChange) {
                                                  +				opt.onChange(value);
                                                  +			}
                                                  +		}
                                                  +		spinner.spinner("setValue", value + opt.unit);
                                                  +	}
                                                  +	/**
                                                  +	 * 菜单项
                                                  +	 */
                                                  +	$.fn.menuitem = function(options) {
                                                  +		var target = $(this);
                                                  +		if (typeof options == "string") {
                                                  +			if (options == "disable") {
                                                  +				target.addClass("disabled");
                                                  +			} else if (options == "enable") {
                                                  +				target.removeClass("disabled");
                                                  +			} else if (options == "isDisabled") {
                                                  +				return target.hasClass("disabled");
                                                  +			} else if (options == "isSelected") {
                                                  +				return target.children(".ico_selected").length > 0;
                                                  +			} else if (options == "unselect") {
                                                  +				return target.children(".ico_selected").remove();
                                                  +			} else if (options == "select") {
                                                  +				return target.prepend("<div class='ico ico_selected'></div>")
                                                  +			}
                                                  +		}
                                                  +	};
                                                  +	/**
                                                  +	 * 窗口
                                                  +	 */
                                                  +	$.fn.dlg = function(options) {
                                                  +		var dlg = $(this);
                                                  +		if (typeof options == "string") {
                                                  +			if (options == "close") {
                                                  +				dlg.children(".dlg_close").trigger("click");
                                                  +			}
                                                  +			return;
                                                  +		}
                                                  +		var defaults = {
                                                  +			closable : true
                                                  +		};
                                                  +		options = $.extend(defaults, options);
                                                  +		var close = dlg.children(".dlg_close");
                                                  +		if (close.length == 0) {
                                                  +			close = $("<div class='ico dlg_close'></div>").appendTo(dlg);
                                                  +		}
                                                  +		if (options.closable == false) {
                                                  +			close.hide();
                                                  +		} else {
                                                  +			close.show();
                                                  +		}
                                                  +		$(".dlg_mask").remove();
                                                  +		$("body").append("<div class='dlg_mask'></div>")
                                                  +		close.unbind().bind("click", function() {
                                                  +			dlg.hide();
                                                  +			$(".dlg_mask").remove();
                                                  +			if (options && options.onClose) {
                                                  +				options.onClose();
                                                  +			}
                                                  +			$(document).unbind("keydown.closedlg");
                                                  +			dlg.find("input,textarea,select")
                                                  +				.unbind("keydown.closedlg");
                                                  +		});
                                                  +		dlg.css({
                                                  +			left : ($(window).width() - dlg.outerWidth()) / 2,
                                                  +			top : ($(window).height() - dlg.outerHeight()) / 2
                                                  +		});
                                                  +		dlg.show();
                                                  +		if (options.closable) {
                                                  +			dlg.find("input,textarea,select").unbind("keydown.closedlg").bind(
                                                  +				"keydown.closedlg", function(e) {
                                                  +					if (e.keyCode == 27) {
                                                  +						dlg.children(".dlg_close").trigger("click");
                                                  +					}
                                                  +				});
                                                  +			$(document).unbind("keydown.closedlg").bind("keydown.closedlg",
                                                  +				function(e) {
                                                  +					if (e.keyCode == 27) {
                                                  +						dlg.children(".dlg_close").trigger("click");
                                                  +					}
                                                  +				});
                                                  +		}
                                                  +		dlg.children(".dialog_header").unbind("mousedown.drag_dlg").bind(
                                                  +			"mousedown.drag_dlg", function(e) {
                                                  +				var target = $(this).parent();
                                                  +				var downX = e.pageX;
                                                  +				var downY = e.pageY;
                                                  +				var downLeft = target.offset().left;
                                                  +				var downTop = target.offset().top;
                                                  +				$(document).bind("mousemove.drag_dlg", function(e) {
                                                  +					var left = e.pageX - downX + downLeft;
                                                  +					var top = e.pageY - downY + downTop;
                                                  +					target.offset({
                                                  +						left : left,
                                                  +						top : top
                                                  +					});
                                                  +				});
                                                  +				$(document).bind("mouseup.drag_dlg", function(e) {
                                                  +					$(document).unbind("mousemove.drag_dlg");
                                                  +					$(document).unbind("mouseup.drag_dlg");
                                                  +				});
                                                  +			});
                                                  +	};
                                                  +})(jQuery);
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.ui.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.ui.js
                                                  new file mode 100644
                                                  index 00000000..6a4c59ab
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/designer.ui.js
                                                  @@ -0,0 +1 @@
                                                  +var UI={init:function(){$(".diagram_title").bind("click",function(){if($(this).hasClass("readonly")){return}var f=$(this).text();$(this).hide();$("#title_container").append("<input type='text' maxlength='400'/>");$("#title_container").children("input").val(f.replace(/(^\s+)|(\s+$)/g,"")).select();$("#title_container").children("input").bind("blur",function(){d()}).bind("keydown",function(g){if(g.keyCode==13){d()}})});function d(){var i=$.trim($("#title_container").children("input").val());i=i.replace(/(^\s+)|(\s+$)/g,"");var g=$(".diagram_title").text();g=g.replace(/(^\s+)|(\s+$)/g,"");if(i!=g&&chartId!=""){var f={action:"changeTitle",title:i};CLB.send(f)}var h=i!=""?i:g;$("title").text(h);$(".diagram_title").text(h).show();$("#title_container").children("input").remove();awsui.ajax.request({url:"./jd?cmd=com.actionsoft.apps.coe.pal_pl_repository_designer_updatetitle&sid="+encodeURIComponent(sid)+"&uuid="+ruuid+"&title="+encodeURIComponent(h)+"&processDefId="+process.processDefId+"&appId="+appId,async:false,ok:function(k){$("#file_attribute").contents().find("input[id='plName']").val(h);try{window.opener.parent.window.top.document.main_iframe.teamAppFrame.contentWindow._d157b007c785d2d988d3d81c8ddcb1b8.contentWindow.refresh()}catch(j){try{window.opener.parent.window.top.document.main_iframe.teamAppFrame.contentWindow._d157b007c785d2d988d3d81c8ddcb1b8.contentWindow.refresh()}catch(j){}}if(parent.repositoryTree){parent.repositoryTree.refreshNodeById({id:ruuid,name:h})}if(parent.awsTabs){parent.awsTabs.setTitle(ruuid,h)}if(Model.define.coeProperties){Model.define.coeProperties.fileName=h}}})}$("#bar_undo").button({onClick:function(){MessageSource.undo()}});$("#bar_redo").button({onClick:function(){MessageSource.redo()}});$("#bar_brush").button({onClick:function(){if($("#bar_brush").button("isSelected")){$("#bar_brush").button("unselect");$("#designer_op_help").hide();$(document).unbind("keydown.cancelbrush");Utils.selectCallback=null}else{Designer.clipboard.brush()}}});$("#bar_font_family").button({onMousedown:function(){$("#font_list").dropdown({target:$("#bar_font_family"),onSelect:function(h){var g=h.text();Designer.setFontStyle({fontFamily:g});$("#bar_font_family").button("setText",g)}});var f=$("#bar_font_family").text().trim();$("#font_list").children().each(function(){if($(this).text()==f){$("#font_list").dropdown("select",$(this));return false}})}});$("#bar_font_size").spinner({min:12,max:100,step:1,unit:"px",onChange:function(f){Designer.setFontStyle({size:f})}});$("#bar_font_size").spinner("setValue","14px");$("#bar_font_bold").button({onClick:function(){var f=!$("#bar_font_bold").button("isSelected");Designer.setFontStyle({bold:f});$("#bar_font_bold").toggleClass("selected")}});$("#bar_font_italic").button({onClick:function(){var f=!$("#bar_font_italic").button("isSelected");Designer.setFontStyle({italic:f});$("#bar_font_italic").toggleClass("selected")}});$("#bar_font_underline").button({onClick:function(){var f=!$("#bar_font_underline").button("isSelected");Designer.setFontStyle({underline:f});$("#bar_font_underline").toggleClass("selected")}});$("#bar_font_color").button({onMousedown:function(){var f=$("#bar_font_color").button("getColor");$.colorpicker({target:$("#bar_font_color"),onSelect:function(g){Designer.setFontStyle({color:g});$("#bar_font_color").button("setColor",g)},color:f})}});$("#bar_font_align").button({onMousedown:function(){$("#font_align_list").dropdown({target:$("#bar_font_align"),onSelect:function(f){var g={};g[f.attr("cate")]=f.attr("al");Designer.setFontStyle(g)}})}});$("#bar_fill").button({onMousedown:function(){var f=$("#bar_fill").button("getColor");$.colorpicker({target:$("#bar_fill"),onSelect:function(g){Designer.setFillStyle({type:"solid",color:g});$("#bar_fill").button("setColor",g)},color:f,extend:"<div id='bar_fill_gradient' title='渐变' class='toolbar_button active'><div class='ico gradient'></div></div><!--div id='bar_fill_img' title='图片...' class='toolbar_button active'><div class='ico ico_img'></div></div--><!--div id='bar_fill_more' class='toolbar_button active'>More...</div-->"});$("#bar_fill_gradient").unbind().bind("click",function(){Designer.setFillStyle({type:"gradient"});$("#color_picker").dropdown("close")});$("#bar_fill_img").unbind().bind("click",function(){UI.showImageSelect(function(i,g,j){Designer.setFillStyle({type:"image",fileId:i,imageW:g,imageH:j})});$("#color_picker").dropdown("close")});$("#bar_fill_more").unbind().bind("click",function(){Dock.showView("graphic");$("#color_picker").dropdown("close")})}});$("#bar_line_color").button({onMousedown:function(){var f=$("#bar_line_color").button("getColor");$.colorpicker({target:$("#bar_line_color"),onSelect:function(g){Designer.setLineStyle({lineColor:g});$("#bar_line_color").button("setColor",g)},color:f})}});$("#bar_line_width").button({onMousedown:function(){$("#line_width_list").dropdown({target:$("#bar_line_width"),onSelect:function(h){var g=parseInt(h.text());Designer.setLineStyle({lineWidth:g})}});var f=Utils.getSelected()[0].lineStyle.lineWidth;$("#line_width_list").children().each(function(){if(parseInt($(this).text())==f){$("#line_width_list").dropdown("select",$(this))}})}});$("#bar_line_style").button({onMousedown:function(){$("#line_style_list").dropdown({target:$("#bar_line_style"),onSelect:function(i){var h=i.attr("line");Designer.setLineStyle({lineStyle:h})}});var f=Utils.getSelected()[0].lineStyle.lineStyle;var g=$("#line_style_list").children("li[line="+f+"]");$("#line_style_list").dropdown("select",g)}});$("#bar_linkertype").button({onMousedown:function(){$("#line_type_list").dropdown({target:$("#bar_linkertype"),onSelect:function(h){var g=h.attr("tp");Designer.setLinkerType(g);var f=h.children("div").attr("class");$("#bar_linkertype").children("div:eq(0)").attr("class",f)}})}});$("#bar_beginarrow").button({onMousedown:function(){$("#beginarrow_list").dropdown({target:$("#bar_beginarrow"),onSelect:function(i){var j=i.attr("arrow");Designer.setLineStyle({beginArrowStyle:j});var h=i.children("div").attr("class");$("#bar_beginarrow").children("div:eq(0)").attr("class",h)}});var f=Utils.getSelectedLinkers()[0].lineStyle.beginArrowStyle;var g=$("#beginarrow_list").children("li[arrow="+f+"]");$("#beginarrow_list").dropdown("select",g)}});$("#bar_endarrow").button({onMousedown:function(){$("#endarrow_list").dropdown({target:$("#bar_endarrow"),onSelect:function(i){var j=i.attr("arrow");Designer.setLineStyle({endArrowStyle:j});var h=i.children("div").attr("class");$("#bar_endarrow").children("div:eq(0)").attr("class",h)}});var f=Utils.getSelectedLinkers()[0].lineStyle.endArrowStyle;var g=$("#endarrow_list").children("li[arrow="+f+"]");$("#endarrow_list").dropdown("select",g)}});$("#bar_front").button({onClick:function(){Designer.layerShapes("front")}});$("#bar_back").button({onClick:function(){Designer.layerShapes("back")}});$("#bar_lock").button({onClick:function(){Designer.lockShapes()}});$("#bar_unlock").button({onClick:function(){Designer.unlockShapes()}});$("#bar_link").button({onClick:function(){UI.showInsertLink()}});$("#bar_risk").button({onClick:function(){UI.showRiskDlg()}});$("#bar_importShape").button({onClick:function(){UI.showImportShapeDlg()}});$("#bar_import").button({onClick:function(){UI.showImportDlg()}});$("#bar_upfile").button({onClick:function(){openUpFile()}});$("#bar_activityNo").button({onClick:function(){UI.activityNoDlg()}});$("#bar_arrange").button({onMousedown:function(){$("#bar_list_arrange").dropdown({target:$("#bar_arrange"),onSelect:function(f){e(f)}})}});$("#bar_view").button({onMousedown:function(){$("#bar_list_view").dropdown({target:$("#bar_view"),onSelect:function(f){e(f)}})}});$("#menu_bar").children().bind("mousedown",function(g){var f=$(this);b(f);g.stopPropagation()});$("#menu_bar").children().bind("mouseenter",function(){var f=$(this);if($("#ui_container").find(".options_menu:visible").length>0){b(f)}});function b(f){var h=f.attr("menu");if(f.hasClass("readonly")){return}$("#"+h).dropdown({target:f,onSelect:function(i){e(i)}});if(h=="bar_list_page"){if(Model.define.page.showGrid){$("#bar_list_page").dropdown("select",$("#bar_list_page").children("li[ac=set_page_showgrid]"))}else{$("#bar_list_page").dropdown("unselect",$("#bar_list_page").children("li[ac=set_page_showgrid]"))}var g=$("#bar_list_pagesize li[w="+Model.define.page.width+"][h="+Model.define.page.height+"]");if(g.length>0){$("#bar_list_pagesize").dropdown("select",g)}else{$("#bar_list_pagesize").dropdown("select",$("#page_size_custom"))}$("#page_size_w").spinner("setValue",Model.define.page.width+"px");$("#page_size_h").spinner("setValue",Model.define.page.height+"px");g=$("#bar_list_padding").children("li[p="+Model.define.page.padding+"]");$("#bar_list_padding").dropdown("select",g);g=$("#bar_list_gridsize").children("li[s="+Model.define.page.gridSize+"]");$("#bar_list_gridsize").dropdown("select",g)}else{if(h=="bar_list_view"){var g=$("#bar_list_view").children(".static[zoom='"+Designer.config.scale+"']");if(g.length){$("#bar_list_page").dropdown("select",g)}}}}function e(o){var g=o.attr("ac");if(g=="rename"){$(".diagram_title").trigger("click")}else{if(g=="close"){if(parent.closeTabById){parent.closeTabById(chartId)}else{window.close()}}else{if(g=="saveAs"){UI.showSaveAs()}else{if(g=="preview"){UI.doPreview()}else{if(g=="saveImage"){UI.saveImage()}else{if(g=="versionCompare"){UI.showVersionCompare()}else{if(g=="output"){UI.doOutputProcess()}else{if(g=="export"){$("#export_dialog").dlg()}else{if(g=="processExport"){UI.processExport()}else{if(g=="undo"){MessageSource.undo()}else{if(g=="redo"){MessageSource.redo()}else{if(g=="cut"){Designer.clipboard.cut()}else{if(g=="copy"){Designer.clipboard.copy()}else{if(g=="paste"){Designer.clipboard.paste()}else{if(g=="duplicate"){Designer.clipboard.duplicate()}else{if(g=="brush"){Designer.clipboard.brush()}else{if(g=="selectall"){Designer.selectAll()}else{if(g=="openNewPage"){UI.openNewPage()}else{if(g=="batchreplace"){UI.batchReplace()}else{if(g=="delete"){Designer.op.removeShape()}else{if(g=="zoom"){var q=o.attr("zoom");if(q=="in"){Designer.zoomIn()}else{if(q=="out"){Designer.zoomOut()}else{var j=parseFloat(q);Designer.setZoomScale(j)}}}else{if(g=="insert"){var m=o.attr("in");if(m=="text"){Designer.op.changeState("creating_free_text")}else{if(m=="image"){UI.showImageSelect(function(s,p,t){UI.insertImage(s,p,t)})}else{if(m=="line"){Designer.op.changeState("creating_free_linker")}}}}else{if(g=="set_page_size"){var n=parseInt(o.attr("w"));var i=parseInt(o.attr("h"));Designer.setPageStyle({width:n,height:i})}else{if(g=="set_page_padding"){var f=parseInt(o.attr("p"));Designer.setPageStyle({padding:f})}else{if(g=="set_page_showgrid"){if(o.menuitem("isSelected")){o.menuitem("unselect");Designer.setPageStyle({showGrid:false})}else{o.menuitem("select");Designer.setPageStyle({showGrid:true})}}else{if(g=="set_page_gridsize"){var r=parseInt(o.attr("s"));Designer.setPageStyle({gridSize:r})}else{if(g=="front"){Designer.layerShapes("front")}else{if(g=="back"){Designer.layerShapes("back")}else{if(g=="forward"){Designer.layerShapes("forward")}else{if(g=="backward"){Designer.layerShapes("backward")}else{if(g=="align_shape"){var k=o.attr("al");Designer.alignShapes(k)}else{if(g=="distribute_shape"){var l=o.attr("dis");Designer.distributeShapes(l)}else{if(g=="match_size"){if(o.attr("custom")){Dock.showView("metric")}else{var l={};var n=o.attr("w");var i=o.attr("h");if(n){l.w=n}if(i){l.h=i}Designer.matchSize(l)}}else{if(g=="lock"){Designer.lockShapes()}else{if(g=="unlock"){Designer.unlockShapes()}else{if(g=="group"){Designer.group()}else{if(g=="ungroup"){Designer.ungroup()}else{if(g=="hotkey"){UI.showHotKey()}else{if(g=="feedback"){UI.showFeedBack()}else{if(g=="getting_started"){UI.gettingStart()}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}$("#page_size_w").spinner({min:200,unit:"px",step:100,onChange:function(f){Designer.setPageStyle({width:f})}});$("#page_size_h").spinner({min:200,unit:"px",step:100,onChange:function(f){Designer.setPageStyle({height:f})}});var a=$("#color_picker").html();var c=$("<div class='menu color_picker extend_menu'>"+a+"</div>").appendTo($("#bar_page_color"));c.css("right","-179px");c.children(".color_items").children("div").unbind().bind("click",function(){var f=$(this).css("background-color");f=f.replace(/\s/g,"");f=f.substring(4,f.length-1);Designer.setPageStyle({backgroundColor:f});$("#bar_list_page").dropdown("close")});Designer.events.push("selectChanged",0);Designer.events.push("clipboardChanged",0);Designer.events.push("undoStackChanged",0);Designer.events.push("redoStackChanged",0)},update:function(){var f=Utils.getSelectedIds();var d=f.length;var k=Utils.getSelectedLinkerIds();var a=k.length;var c=Utils.getSelectedShapeIds();var j=c.length;var i=Utils.getSelectedLockedIds().length;var h=Utils.getSelectedGroups().length;var b=$("#bar_list_arrange");if(d==0){$(".toolbar").find(".selected").removeClass("selected");if($("#designer_op_help").is(":visible")){$("#bar_brush").button("enable");$("#bar_brush").button("select")}else{$("#bar_brush").button("disable")}$("#bar_font_family").button("disable");$("#bar_font_size").button("disable");$("#bar_font_bold").button("disable");$("#bar_font_italic").button("disable");$("#bar_font_underline").button("disable");$("#bar_font_color").button("disable");$("#bar_font_align").button("disable");$("#bar_line_color").button("disable");$("#bar_line_width").button("disable");$("#bar_line_style").button("disable");$("#bar_front").button("disable");$("#bar_back").button("disable");$("#bar_lock").button("disable");var g=$("#bar_list_edit");g.children("li[ac=cut]").menuitem("disable");g.children("li[ac=copy]").menuitem("disable");g.children("li[ac=duplicate]").menuitem("disable");g.children("li[ac=brush]").menuitem("disable");g.children("li[ac=delete]").menuitem("disable");b.children("li[ac=front]").menuitem("disable");b.children("li[ac=back]").menuitem("disable");b.children("li[ac=forward]").menuitem("disable");b.children("li[ac=backward]").menuitem("disable");b.children("li[ac=lock]").menuitem("disable");$("#bar_activityNo").button("enable");$("#bar_activityNo div").removeClass("extend_activityNoDisable");$("#bar_activityNo div").addClass("extend_activityNo")}else{if(editable){$("#bar_brush").button("enable");if($("#designer_op_help").is(":visible")){$("#bar_brush").button("select")}$("#bar_font_family").button("enable");$("#bar_font_size").button("enable");$("#bar_font_bold").button("enable");$("#bar_font_italic").button("enable");$("#bar_font_underline").button("enable");$("#bar_font_color").button("enable");$("#bar_font_align").button("enable");$("#bar_line_color").button("enable");$("#bar_line_width").button("enable");$("#bar_line_style").button("enable");$("#bar_front").button("enable");$("#bar_back").button("enable");$("#bar_lock").button("enable");var g=$("#bar_list_edit");g.children("li[ac=cut]").menuitem("enable");g.children("li[ac=copy]").menuitem("enable");g.children("li[ac=duplicate]").menuitem("enable");g.children("li[ac=brush]").menuitem("enable");g.children("li[ac=delete]").menuitem("enable");b.children("li[ac=front]").menuitem("enable");b.children("li[ac=back]").menuitem("enable");b.children("li[ac=forward]").menuitem("enable");b.children("li[ac=backward]").menuitem("enable");b.children("li[ac=lock]").menuitem("enable");var e=Model.getShapeById(f[0]);$("#bar_font_family").button("setText",e.fontStyle.fontFamily);$("#bar_font_size").spinner("setValue",e.fontStyle.size+"px");if(e.fontStyle.bold){$("#bar_font_bold").button("select")}else{$("#bar_font_bold").button("unselect")}if(e.fontStyle.italic){$("#bar_font_italic").button("select")}else{$("#bar_font_italic").button("unselect")}if(e.fontStyle.underline){$("#bar_font_underline").button("select")}else{$("#bar_font_underline").button("unselect")}$("#bar_font_color").button("setColor",e.fontStyle.color);$("#bar_line_color").button("setColor",e.lineStyle.lineColor);$("#bar_activityNo").button("disable");$("#bar_activityNo div").removeClass("extend_activityNo");$("#bar_activityNo div").addClass("extend_activityNoDisable")}}if(d==0){$("#toolbar-data-attr").button("disable");$("#toolbar-data-attr").unbind("click");$("#bar_arrange").button("disable")}else{$("#toolbar-data-attr").button("enable");$("#toolbar-data-attr").bind("click",function(){showPropertiesDialog()});$("#bar_arrange").button("enable")}if(j==0){$("#bar_fill").button("disable");$("#toolbar-shape-attr").button("disable")}else{if(editable){$("#bar_fill").button("enable")}var e=Model.getShapeById(c[0]);if(e.fillStyle.type=="solid"){$("#bar_fill").button("setColor",e.fillStyle.color)}else{if(e.fillStyle.type=="gradient"){$("#bar_fill").button("setColor",e.fillStyle.endColor)}}if(j==1&&e.name==BPMN_TYPE_USER_TASK){$("#toolbar-shape-attr").button("enable")}else{$("#toolbar-shape-attr").button("disable")}}if(j!=1){$("#bar_link, #bar_risk").button("disable");$("#dock_btn_shapeConfig").button("disable");$("#dock_btn_shapeConfig").bind("click",function(){$.simpleAlert("请选择形状")})}else{$("#dock_btn_shapeConfig").unbind("click");$("#dock_btn_shapeConfig").button("enable");if(editable){$("#bar_link").button("enable")}if($("#bar_rmark").length==0&&$("#bar_cancel_aws_correlate").length==0){$("#bar_risk").button("enable")}else{$("#bar_risk").button("disable")}}if(a==0){$("#bar_linkertype").button("disable");$("#bar_beginarrow").button("disable");$("#bar_endarrow").button("disable")}else{$("#bar_linkertype").button("enable");$("#bar_beginarrow").button("enable");$("#bar_endarrow").button("enable");var e=Model.getShapeById(k[0]);$("#bar_linkertype").children("div:eq(0)").attr("class","ico linkertype_"+e.linkerType.toLowerCase());if(typeof e.lineStyle.beginArrowStyle!="undefined"){$("#bar_beginarrow").children("div:eq(0)").attr("class","ico ico_arrow larrow_"+e.lineStyle.beginArrowStyle.toLowerCase())}if(typeof e.lineStyle.endArrowStyle!="undefined"){$("#bar_endarrow").children("div:eq(0)").attr("class","ico ico_arrow rarrow_"+e.lineStyle.endArrowStyle.toLowerCase())}}if(i==0){$("#bar_unlock").button("disable");b.children("li[ac=unlock]").menuitem("disable")}else{$("#bar_unlock").button("enable");b.children("li[ac=unlock]").menuitem("enable")}if(d<2){b.children("li[ac=group]").menuitem("disable");$("#bar_arrange_align").menuitem("disable")}else{b.children("li[ac=group]").menuitem("enable");$("#bar_arrange_align").menuitem("enable")}if(j<2){$("#bar_arrange_match").menuitem("disable")}else{$("#bar_arrange_match").menuitem("enable")}if(d<3){$("#bar_arrange_dist").menuitem("disable")}else{$("#bar_arrange_dist").menuitem("enable")}if(h==0){b.children("li[ac=ungroup]").menuitem("disable")}else{b.children("li[ac=ungroup]").menuitem("enable")}if($("#dock_btn_eteanalysis").length!=0){if(d==0){$("#dock_btn_eteanalysis").find(".awsui-iconfont").css("color","black");$("#dock_btn_eteanalysis").button("enable");$("#dock_btn_eteanalysis").removeAttr("onclick");$("#dock_btn_eteanalysis").off("click").on("click",function(){var l=$("#eteCascadeAnalysisForm");l.find(":input[name=uuid]").val(ruuid);l.submit()})}else{$("#dock_btn_eteanalysis").find(".awsui-iconfont").css("color","gray");$("#dock_btn_eteanalysis").button("disable");$("#dock_btn_eteanalysis").removeAttr("onclick");$("#dock_btn_eteanalysis").off("click")}}},showInsertLink:function(){$("#link_dialog").dlg();var a=Utils.getSelected()[0].link;if(!a){a=""}$("#linkto_addr").val(a).select();$("#linkto_addr").unbind().bind("keydown",function(b){if(b.keyCode==13){UI.setLink()}})},setLink:function(){var b=$("#linkto_addr").val();var a=Utils.getSelected()[0];a.link=b;Model.update(a);$("#link_dialog").dlg("close")},imageSelectedCallback:null,showImageSelect:function(d){if(d){this.imageSelectedCallback=d}else{this.imageSelectedCallback=null}this.fetchingRequest=null;var a=$(window).height()-200;if(a>550){a=550}else{if(a<200){a=200}}$(".image_list").height(a);$("#image_dialog").dlg({onClose:function(){if(UI.fetchingRequest){UI.fetchingRequest.abort()}}});if($("#image_select_upload").is(":visible")){UI.loadUserImages()}$(".image_sources").children().unbind().bind("click",function(){UI.showImageSelectContent($(this).attr("ty"))});$("#upload_img_res").empty();$("#input_upload_image").unbind().bind("change",function(){$("#upload_img_res").html("<span style='color: #666'>上传中...</span>");$("#frm_upload_image").submitForm({success:function(e){if(e.result=="type_wrong"){$("#upload_img_res").html("此文件不是图片,请重新选择")}else{if(e.result=="size_wrong"){$("#upload_img_res").html("文件大小超出要求,最大2M")}else{if(e.result=="exception"){$("#upload_img_res").html("无法使用此图片,请选择其他图片")}else{var f=e.image;UI.setShapeImage(f.fileId,f.imageW,f.imageH)}}}}})});$("#input_img_url").val("");$("#img_url_area").empty();var c="";function b(){var e=$("#input_img_url").val().trim();if(e!=c){c=e;if(e!=""){if(e.indexOf("http")<0){e="http://"+e}$("#img_url_area").html("<span class='img_url_loading_tip'>正在加载预览...</span>");var f=$("<img class='img_url_loading' src='"+e+"'/>").appendTo("#img_url_area");f.unbind().bind("load",function(){f.show().addClass("img_url_loaded");$(".img_url_loading_tip").remove()}).bind("error",function(){$("#img_url_area").html("<div class='img_url_error'>无法在此地址下加载图片。<ul><li>请检查图片地址是否输入正确。</li><li>确保图片地址是公开的。</li><ul></div>")})}}}$("#input_img_url").unbind().bind("paste",function(){b()}).bind("keyup",function(){b()});$("#input_img_search").unbind().bind("keydown",function(f){if(f.keyCode==13){UI.searchImgByGoogle()}});$("#btn_img_search").unbind().bind("click",function(){UI.searchImgByGoogle()});$("#set_image_submit").button("enable");$("#set_image_submit").button({onClick:function(){var j=$(".image_sources").children(".active").attr("ty");if(j=="upload"){var i=$("#user_image_items").children(".image_item_selected");if(i.length>0){var e=i.attr("fileId");var g=i.attr("w");var h=i.attr("h");UI.setShapeImage(e,g,h)}else{$("#image_dialog").dlg("close")}}else{if(j=="url"){if($(".img_url_loaded").length>0){var f=$(".img_url_loaded").attr("src");UI.setShapeImageByURL(f)}else{$("#image_dialog").dlg("close")}}else{var i=$("#google_image_items").children(".image_item_selected");if(i.length>0){var f=i.attr("u");UI.setShapeImageByURL(f)}else{$("#image_dialog").dlg("close")}}}}});$("#set_image_cancel").button({onClick:function(){$("#image_dialog").dlg("close")}});$("#set_image_text").empty()},showImageSelectContent:function(a){$(".image_list").hide();$("#image_select_"+a).show().find("input[type=text]").select();$(".image_sources").children().removeClass("active");$(".image_sources").children("li[ty="+a+"]").addClass("active")},loadUserImages:function(a){$("#user_image_items").empty();$.ajax({url:"/user_image/list",success:function(d){if(d.images){for(var c=0;c<d.images.length;c++){var b=d.images[c];UI.appendUserImage(b)}$("#user_image_items").append("<div style='clear: both'></div>")}}});$("#user_image_items").attr("loaded","true")},searchIndex:0,searchKeywords:"",searchImgByGoogle:function(){var a=$("#input_img_search").val();if(a.trim()!=""){$("#google_image_items").empty();this.searchKeywords=encodeURI(a);this.searchIndex=0;this.loadGoogleImg()}else{$("#input_img_search").focus()}},loadGoogleImg:function(){$.getScript("https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q="+this.searchKeywords+"&rsz=8&start="+(this.searchIndex*16)+"&callback=UI.googleImgCallback");$.getScript("https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q="+this.searchKeywords+"&rsz=8&start="+(this.searchIndex*16+8)+"&callback=UI.googleImgCallback");$(".gg_img_more").remove();$("#google_image_items").append("<div class='img_gg_loading_tip'>正在加载图片...</div>");this.searchIndex++},googleImgCallback:function(e){var c=e.responseData;var b=c.results;for(var a=0;a<b.length;a++){var d=b[a];UI.appendGoogleImage(d)}$("#google_image_items").append("<div style='clear: both'></div>");$(".img_gg_loading_tip").remove();$(".gg_img_more").remove();if(this.searchIndex<=3){$("#google_image_items").append("<div onclick='UI.loadGoogleImg()' class='gg_img_more toolbar_button active'>显示更多结果...</div>")}},appendUserImage:function(b){var c=$("<div class='image_item' id='"+b.imageId+"' fileId='"+b.fileId+"' w='"+b.imageW+"' h='"+b.imageH+"'></div>").appendTo($("#user_image_items"));c.unbind().bind("click",function(){$(".image_item_selected").removeClass("image_item_selected");$(this).addClass("image_item_selected")}).bind("mouseenter",function(){var f=$(this);var e=$("<div class='ico ico_remove_red'></div>").appendTo(f);var g=f.attr("id");e.bind("click",function(){f.fadeOut();$.ajax({url:"/user_image/remove",data:{imageId:g}})})}).bind("mouseleave",function(){$(this).find(".ico_remove_red").remove()});var a=b.fileId;var d=$("<img src='"+a+"'/>").appendTo(c);d.bind("load",function(){$(this).css("margin-top",(140-$(this).height())/2)})},appendGoogleImage:function(a){var d=a.title+" ("+a.width+" × "+a.height+")";var b=$("<div class='image_item' u='"+a.url+"' title='"+d+"'></div>").appendTo($("#google_image_items"));b.unbind().bind("click",function(){$(".image_item_selected").removeClass("image_item_selected");$(this).addClass("image_item_selected")});var c=$("<img src='"+a.tbUrl+"'/>").appendTo(b);c.bind("load",function(){$(this).css("margin-top",(140-$(this).height())/2)})},setShapeImage:function(b,a,c){if(this.imageSelectedCallback){this.imageSelectedCallback(b,a,c)}$("#image_dialog").dlg("close")},fetchingRequest:null,setShapeImageByURL:function(a){$("#set_image_text").removeClass("errored").text("正在应用图片,请稍候...");$("#set_image_submit").button("disable");UI.fetchingRequest=$.ajax({url:"/user_image/reference",data:{url:a},success:function(b){if(b.result=="exception"){$("#set_image_text").addClass("errored").html("无法使用此图片,请选择其他图片")}else{$("#set_image_text").empty();var c=b.image;UI.setShapeImage(c.fileId,c.imageW,c.imageH)}}})},insertImage:function(b,a,d){a=parseInt(a);d=parseInt(d);var e=$("#designer_layout");var g=e.width()/2+e.offset().left;var f=e.height()/2+e.offset().top;var i=Utils.getRelativePos(g,f,$("#designer_canvas"));var c=Model.create("standardImage",i.x.restoreScale()-a/2,i.y.restoreScale()-d/2);c.props.w=a;c.props.h=d;c.fillStyle={type:"image",fileId:b,display:"fill",imageW:a,imageH:d};Model.add(c);Designer.painter.renderShape(c);Utils.unselect();Utils.selectShape(c.id)},doOutputProcess:function(){},doPreview:function(){if($("#saving_tip").text()!="已保存成功"&&$("#saving_tip").text()!="保存成功"&&$("#saving_tip").text()!="您的文件已经成功保存"&&$("#saving_tip").text()!=""){if(editable){$.simpleAlert("页面中有未保存的内容,请先保存");return}}$.simpleAlert("请稍后","loading");$.post("./jd",{cmd:"com.actionsoft.apps.coe.pal_pl_repository_df",sid:sid,"uuid":chartId},function t(msg){$("#previewContent .procImg").remove();if(typeof(msg)=="string"){msg=eval("("+msg+")")}msg=msg.data.url;if(msg==""){alert("请您先保存一个版本!")}else{var img=$("<img class='procImg' src='"+msg+"'style='margin: 10px 10px;'>");var hh=img.width();$("#previewContent").append(img)}$("#previewDialog").dialog({title:"预览",width:window.innerWidth*0.9,height:window.innerHeight*0.92});$.simpleAlert("close")},"text")},saveImage:function(){if($("#saving_tip").text()!="已保存成功"&&$("#saving_tip").text()!="保存成功"&&$("#saving_tip").text()!="您的文件已经成功保存"&&$("#saving_tip").text()!=""){if(editable){$.simpleAlert("页面中有未保存的内容,请先保存");return}}$.simpleAlert("请稍后","loading");$.ajax({type:"POST",url:"./jd",data:{sid:sid,cmd:"com.actionsoft.apps.coe.pal_pl_repository_image_save",uuid:chartId},success:function(b,c,a){if(b.result=="ok"){$.simpleAlert("close");$.simpleAlert("图片创建完成","ok",2000,{callback:function(){var d={title:"提示",content:"是否打开图片预览",onConfirm:function(){$.simpleAlert("close");UI.doPreview()},onCancel:function(){}};$.confirm(d)}})}else{console.log(b);$.simpleAlert("close");$.simpleAlert(b.data.desc,"error")}},error:function(a,c,b){$.simpleAlert(b,"err");console.log(a);console.log(c);console.log(b)}})},showVersionCompare:function(){$("#dialog_version_compare").dialog({buttons:[{text:"确定",cls:"blue",handler:function(){var a=$("input[name='version']:checked");var c=a.length;if(c!=2){$.simpleAlert("请选择两个需要对比的版本","warning");return}var e;var d;var b=[];var f=[];a.each(function(){b.push($(this).val());f.push($(this).data("name"))});e=b[0];d=b[1];awsui.ajax.post("./jd?sid="+sid+"&cmd=com.actionsoft.apps.coe.pal_pl_version_compare",{firstId:e,secondId:d},function(m){$("#dialog_version_compare").dialog("close");var l=m.fileAttrCompare;var h=m.shapeAttrCompare;var g="";var k="";if(l.length>0){for(var j=0;j<l.length;j++){g+=l[j]+"</br>"}$("#fileAttr").html(g)}if(h.length>0){for(var j=0;j<h.length;j++){k+=h[j]+"</br>"}$("#shapeAttr").html(k)}$("#versionCompareResult").show();$("#dialog_version_compare_result").dialog({})},"json")}}]})},processExport:function(){if($("#saving_tip").text()!="已保存成功"&&$("#saving_tip").text()!="保存成功"&&$("#saving_tip").text()!="您的文件已经成功保存"&&$("#saving_tip").text()!=""){if(editable){$.simpleAlert("页面中有未保存的内容,请先保存");return}}var a=[];a.push(ruuid);var b={title:"提示",content:"确定导出并下载文件吗?",onConfirm:function(){$.simpleAlert("正在导出","loading");$.ajax({type:"POST",url:"./jd",data:{sid:sid,cmd:"com.actionsoft.apps.coe.pal_pl_export_handle",repositoryIds:JSON.stringify(a)},success:function(d,e,c){if(d.result=="ok"){$.simpleAlert("close");$.simpleAlert("导出完成","ok",2000,{callback:function(){$.simpleAlert("close");$.ajax({type:"POST",url:"./jd",data:{sid:sid,cmd:"com.actionsoft.apps.coe.pal_pl_export",exportTitle:d.data.exportTitle,exportCount:d.data.exportCount,dcId:d.data.dcId,},success:function(g,h,f){if(g.result=="ok"){window.location.href=g.data.downLoadUrl}else{console.log(g)}},error:function(f,h,g){$.simpleAlert(g,"err");console.log(f);console.log(h);console.log(g)}})}})}else{console.log(d);$.simpleAlert("close")}},error:function(c,e,d){$.simpleAlert(d,"err");console.log(c);console.log(e);console.log(d)}})},onCancel:function(){}};$.confirm(b)},openNewPage:function(){window.open(location.href)},doExport:function(){if($("#saving_tip").text()!="已保存成功"&&$("#saving_tip").text()!="保存成功"&&$("#saving_tip").text()!="您的文件已经成功保存"&&$("#saving_tip").text()!=""){if(editable){$.simpleAlert("页面中有未保存的内容,请先保存");return}}$.simpleAlert("请稍后","loading");var type=$('input[name="type"]:checked').val();$.post("./jd",{cmd:"com.actionsoft.apps.coe.pal_pl_repository_download_png",sid:sid,"uuid":chartId,type:type},function t(msg){if(typeof(msg)=="string"){msg=eval("("+msg+")")}msg=msg.data.url;if(msg==""){alert("请您先保存一个版本!")}else{$("#export_iframe").attr("src",msg)}$.simpleAlert("close")},"text");$("#export_dialog").dlg("close")},showHotKey:function(){var a=$(window).height()-175;if(a>500){a=500+"px"}$("#hotkey_list").dlg();$("#hotkey_list").css({"top":"28px"});$("#hotkey_list .dialog_content").css({"height":a})},showFeedBack:function(){$("#send_feedback").css({width:"auto",height:"auto"});var a=$("#send_feedback");a.dlg();$("#feedback_email").focus();$("#feedback_message").val("");$(".feedback_error_email_format").hide();$(".feedback_error_msg").hide()},sendFeedBack:function(d){$(".feedback_error_email_format").hide();$(".feedback_error_msg").hide();var a=$.trim($("#feedback_email").val());var b=/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;if(!b.test(a)){$("#feedback_email").focus();$(".feedback_error_email_format").show();return}var c=$.trim($("#feedback_message").val());if(c==""){$("#feedback_message").val("").focus();$(".feedback_error_msg").show();return}Util.ajax({url:"/support/save_ask",data:{content:c,username:$("#feedback_name").val(),email:a,url:location.href},success:function(e){$(".dlg_mask").remove();$("#send_feedback").animate({left:$(window).width(),top:$(window).height(),width:0,height:0,opacty:0.2})}})},gettingStart:function(a){this.showStartStep(1)},showStartStep:function(b,e){$(".mark_content").hide();var a=$(".mark"+b+"_content");a.show();var d;var c;if(b==1){d=$("#shape_panel").offset().top+70;c=$("#shape_panel").offset().left+$("#shape_panel").width()+10}else{if(b==2){d=$(".row2").offset().top+30;c=$("#menu_bar_insert").offset().left+$("#menu_bar_insert").width()-a.outerWidth()/2}else{if(b==3){d=$(".toolbar").offset().top+40;c=270}else{if(b==4){d=$("#dock").offset().top+10;c=$("#dock").offset().left-a.outerWidth()-10}else{if(b=="created"){d=e.offset().top+e.height()/2-a.outerHeight()/2;if(d<=0){d=0}if(d+a.outerHeight()>$(window).height()){d=$(window).height()-a.outerHeight()}c=e.offset().left+e.width()+10}}}}}a.css({top:d,left:c})},closeGettingStart:function(a){$(".mark_content").hide()},showAddColla:function(){Util.ajax({url:"/collaboration/get_colla_role_list",data:{chartId:chartId},success:function(b){$("#colla_dialog").find(".role_list").html(b).scrollTop(999);$("#colla_dialog").removeClass("_update");$("#colla_dialog").css({"top":($(window).height()-$("#colla_dialog").outerHeight())*0.5+"px"});$("#colla_dialog").dlg();$("#colla_suggest_box").empty();$("#add_prompt4").hide();$("#add_prompt3").hide();$("#add_prompt2").hide();$("#add_prompt1").show()}});var a="";$("#input_add_colla").val("").unbind().bind("keyup",function(){var b=$(this).val();if(b==a){return}a=b;if(b==""){$("#colla_suggest_box").empty();$("#add_prompt4").hide();$("#add_prompt3").hide();$("#add_prompt2").hide();$("#add_prompt1").show();return}Util.ajax({url:"/collaboration/get_new_members",data:{value:b},success:function(c){$("#colla_suggest_box").html(c);if($("#colla_suggest_box").find("ul").length>0){$("#add_prompt4").hide();$("#add_prompt3").hide();$("#add_prompt2").show();$("#add_prompt1").hide()}else{$("#add_prompt4").hide();$("#add_prompt3").hide();$("#add_prompt2").hide();$("#add_prompt1").show()}$(".colla_suggest").find("li").unbind().bind("click",function(){$("#add_prompt4").hide();$("#add_prompt3").hide();$("#add_prompt2").show();$("#add_prompt1").hide();var f=$.trim($("#input_add_colla").val());$(".colla_suggest").find("li").removeClass("seled");$(this).addClass("seled");var d=$(this).attr("joinType");var g=$(this).attr("target");if(d=="user"){var e=$(this).attr("username");$("#input_add_colla").val(e);$("#add_userid").val(g)}else{$("#input_add_colla").val(g);$("#add_userid").val(g)}$("#add_type").val(d)})}})})},doAddCollaboration:function(){if($(".colla_suggest").length>0){if($(".colla_suggest").find(".seled").length==0){$("#add_prompt1").hide();$("#add_prompt2").show();$("#add_prompt3").hide();$("#add_prompt4").hide();var h=($(window).outerHeight()-104)*0.5+100;var a=($(window).outerWidth()-272)*0.5;$("#confirm_dlg").removeClass("newSize").css({top:h+"px",left:a+"px"});$("#confirm_dlg").addClass("newSize").css({top:($(window).outerHeight()-$("#confirm_dlg").height())*0.5+"px",left:($(window).outerWidth()-$("#confirm_dlg").width())*0.5+"px",display:"block"})}else{var i=$(".colla_suggest").find(".seled").find("img").attr("src");var d=$("#input_add_colla").val();if(d.length>30){d=d.substr(0,30)+"..."}var f=$("#add_userid").val();var c=$("#invit_role").val();var g=$("#add_type").val();$(".add_new_button").find(".designer_button").text("<@i18n resource='diagraming.collaboation_sending'/>");var e=null;if(g=="email"){$(".role_list").find(".role_item").each(function(){if($(this).attr("type")==g&&$(this).attr("target")==f){e=$(this);$(this).find(".inviting_").text("<@i18n resource='diagraming.collaboation_inviting_again'/>")}})}var b={type:g,target:f,role:c,chartId:chartId};Util.ajax({url:"/collaboration/add",data:b,success:function(k){var j=k.result;if(j=="exists"){$("#add_prompt2").hide();$("#add_prompt1").hide();$("#add_prompt4").hide();$("#add_prompt3").show()}else{Util.ajax({url:"/collaboration/get_colla_role_list",data:{chartId:chartId},success:function(l){$(".role_list").html(l).scrollTop(999)}})}$(".add_new_button").find(".designer_button").text("<@i18n resource='diagraming.collaboation_send_invitation'/>");$("#colla_dialog").addClass("_update").css({top:($(window).height()-$("#colla_dialog").outerHeight())*0.5+"px"});if(j!="exists"){setTimeout(function(){$("#add_prompt3").hide();$("#add_prompt2").hide();$("#add_prompt1").hide();$("#add_prompt4").show()},400)}setTimeout(function(){$("#add_prompt3").hide();$("#add_prompt2").hide();$("#add_prompt4").hide();$("#add_prompt1").show();$("#input_add_colla").val("");$("#colla_suggest_box").html("")},1000)}})}}},deleteCollaRole:function(c){var a=$(c).parent(".role_item");var b=a.attr("collaborationId");Util.ajax({url:"/collaboration/delete",data:{collaborationId:b},success:function(d){if(d.result=="success"){a.remove()}}});$("#colla_dialog").addClass("_update").css({top:($(window).height()-$("#colla_dialog").outerHeight())*0.5+"px"})},changeCollaRole:function(b,a){Util.ajax({url:"/collaboration/set_role",data:{collaborationId:b,role:$(a).val()},success:function(c){if(c.result=="success"){$(a).parent(".given_role").find(".change_success").stop().animate({"left":"-38px"},200).delay(400).animate({"left":"0px"},200)}}})},showShapesManage:function(){var b=$("#shapes_dialog").dialog({buttons:[{text:"确定",cls:"blue",handler:UI.saveShapesManage},{text:"关闭",handler:function(){b.dialog("close")}}]});$("#shape_manage_list").children("li").unbind().bind("click",function(){var c=$(this).find("input");var d=!c.is(":checked");c.attr("checked",d);a(c)});$("#shape_manage_list").find("input").unbind().bind("click",function(c){c.stopPropagation();a($(this))});function a(d){var e=d.val();var c=e.split(",");var f=d.is(":checked");if(c.length>1){$("#shape_manage_list").find("input").each(function(){var g=$(this).val();if(c.indexOf(g)>=0){$(this).attr("checked",f)}})}else{$("#shape_manage_list").find(".cate_parent").each(function(){var h=$(this).val().split(",");var g=true;for(var j=0;j<h.length;j++){var k=h[j];if(!$("#shape_manage_list").find("input[value="+k+"]").is(":checked")){g=false;break}}$(this).attr("checked",g)})}}},saveShapesManage:function(){var d=$("#shape_manage_list").find("input:checked:not(.cate_parent)").map(function(){return $(this).val()}).get();var b="";var c={categories:d.join(",")};Designer.setSchema(d.join(","),function(){$("#shapes_dialog").dialog("close")})},showUserMenu:function(a){a.stopPropagation();$("#user_menu").dropdown({target:$(".user"),position:"right",onSelect:function(b){var c=b.attr("ac");if(c=="dia"){location.href="/diagrams"}else{if(c=="net"){location.href="/network"}else{if(c=="out"){location.href="/login/out"}}}}})},showSaveAs:function(){$("#saveas_dialog").dlg();$("#saveas_title").val($(".diagram_title").text()).select()},doSaveAs:function(){if($("#saveas_title").val().trim()==""){$("#saveas_title").focus();return}$("#hid_saveas_id").val(chartId);$("#saveas_form").submit();$("#btn_dosaveas").removeAttr("onclick")},activityNoDlg:function(){var c="";var h=undefined;var j=UI.getTasksList(h);var k=340;if(j.length>8){k=340+(j.length-8)*26}if(k>($(window).height()-80)){k=($(window).height()-80)}c+='<div title="节点编号排序" style="width:320px;height:'+k+'px;display:none;" id="activityNoDialog">';c+='<div id="activityNoGrid"></div>';c+='<div id="activityNoAlert" style="position: relative;top: 6px;">提示:拖动排序,确定后请保存设计器</div>';c+="</div>";$(document.body).append(c);$("#activityNoDialog").dialog({onClose:function(){$("#activityNoDialog").remove();$("#row-drag-obj").remove()},buttons:[{text:"确定",cls:"blue",handler:function(){if(f.length>0){var q=d.awsGrid("getAllRows");for(var r in Model.define.elements){var p=Model.getShapeById(r);for(var s=0;s<q.length;s++){var m=q[s];if(m.id==p.id){if(p.dataAttributes!=undefined){for(var n=0;n<p.dataAttributes.length;n++){for(var n=0;n<p.dataAttributes.length;n++){var t=p.dataAttributes[n];if(t.attributesJsonArray&&t.attributesJsonArray.length>0){for(var l=0;l<t.attributesJsonArray.length;l++){var o=t.attributesJsonArray[l];if(o.id=="number"){o.value=parseInt(m.no);break}}break}}}}}}}if(isAutoSave=="0"){$("#saving_tip").css("color","rgb(255, 0, 0)");$("#saving_tip").text("文件已修改,未保存")}}$("#activityNoDialog").dialog("close")}},{text:"取消",handler:function(){$("#activityNoDialog").dialog("close")}}]});var f=[];for(var g=0;g<j.length;g++){var a=j[g];var e={};e.id=a.id;if(a.text){e.name=a.text}else{e.name="(无名称)"+a.title}e.no=a.orderIndex;f[g]=e}if(f.length==0){$("#activityNoGrid").height(k-100);$("#activityNoGrid").width(317);$("#activityNoAlert").remove();$("#activityNoGrid").append($('<div class="awsui-message-page">'+'<div class="content">'+'<span class="icon" message-type="info"></span>'+'<span class="title">不支持编号排序</span>'+'<span class="description">画布没有形状或者形状没有编号属性</span>'+"</div>"+"</div>"));awsuiMessagePage();return}var b={width:317,height:k-100,flexWidth:false,flexHeight:false,resizable:false,selectionModel:{type:"none",model:"single"},scrollModel:{vertical:true,horizontal:false},bottomVisible:false,rowDrag:true};b.colModel=[{title:"名称",width:200,align:"left",dataType:"string",dataIndx:"name",resizable:false,sortable:false},{title:"节点号",width:80,align:"center",dataType:"integer",dataIndx:"no",resizable:false,sortable:false}];b.dataModel={data:f,location:"local",sorting:"local",sortIndx:"no",sortDir:"up"};var d=$("#activityNoGrid").awsGrid(b);d.awsGrid("option","rowDragCallback",function(i,l){return true});d.awsGrid("option","rowDragSuccessCallback",function(n,o){var m=d.awsGrid("getAllRows");for(var l=0;l<m.length;l++){m[l].no=(l+1)}d.awsGrid("refreshDataAndView")})},getTasksList:function(a){var c=[];var b=Model.define.elements;if(a==undefined){return UI.getALLTasksList()}},getALLTasksList:function(){var f=[];for(var k in Model.define.elements){var g=Model.getShapeById(k);if(g.dataAttributes!=undefined){for(var e=0;e<g.dataAttributes.length;e++){for(var e=0;e<g.dataAttributes.length;e++){var l=g.dataAttributes[e];if(l.attributesJsonArray&&l.attributesJsonArray.length>0){for(var c=0;c<l.attributesJsonArray.length;c++){var h=l.attributesJsonArray[c];if(h.id=="number"){var a=0;var b=h.value;if(typeof b=="string"){b=b.replace(/^\s+|\s+$/g,"")}if(!isNaN(b)&&b!=""){a=b}var d={};d.text=g.text;d.id=k;d.orderIndex=a;f.push(d);break}}break}}}}}return f},batchReplace:function(){if($("#saving_tip").text()!="已保存成功"&&$("#saving_tip").text()!="保存成功"&&$("#saving_tip").text()!="您的文件已经成功保存"&&$("#saving_tip").text()!=""){if(editable){$.simpleAlert("页面中有未保存的内容,请先保存");return}}initWizardByDesinger()}};var Dock={init:function(){var a=$("#designer_layout").width();var d=$("#layout_block").width();var c=a-d;$("#dock").css("right",c);var e=c+$("#dock").outerWidth()-1;$(".dock_view").css("right",e);if($("#demo_signup").length){var b=$("#demo_signup").outerHeight();$("#dock").css("top",b);$(".dock_view").css("top",b+10)}$(".ico_dock_collapse").bind("click",function(){$(".dock_view").hide();$(".dock_buttons").children().removeClass("selected");if(Dock.currentView=="history"){Dock.closeHistory()}Dock.currentView=""});$(window).bind("resize.dock",function(){if(Dock.currentView=="attribute"){Dock.fitAttrList()}});$("#dock_zoom").spinner({min:50,max:200,unit:"%",step:10,onChange:function(f){Designer.setZoomScale(f/100)}});$("#dock_line_color").colorButton({onSelect:function(f){Designer.setLineStyle({lineColor:f})}});$("#dock_line_style").button({onMousedown:function(){$("#line_style_list").dropdown({target:$("#dock_line_style"),onSelect:function(j){var h=j.attr("line");Designer.setLineStyle({lineStyle:h});var i=j.children("div").attr("class");$("#dock_line_style").children(".linestyle").attr("class",i)}});var f=Utils.getSelected()[0].lineStyle.lineStyle;var g=$("#line_style_list").children("li[line="+f+"]");$("#line_style_list").dropdown("select",g)}});$("#dock_line_width").spinner({min:0,max:10,unit:"px",step:1,onChange:function(f){Designer.setLineStyle({lineWidth:f})}});$("#dock_fill_type").button({onMousedown:function(){$("#dock_fill_list").dropdown({target:$("#dock_fill_type"),onSelect:function(i){var h=i.attr("ty");$("#dock_fill_type").button("setText",i.text());if(h=="image"){UI.showImageSelect(function(l,k,m){Designer.setFillStyle({type:"image",fileId:l,imageW:k,imageH:m})})}else{Designer.setFillStyle({type:h});var j=Utils.getSelectedShapeIds();var g=Model.getShapeById(j[0]);Dock.setFillStyle(g.fillStyle)}}});var f=$("#dock_fill_type").text();$("#dock_fill_list").children().each(function(){if($(this).text()==f){$("#dock_fill_list").dropdown("select",$(this));return false}})}});$("#fill_solid_btn").colorButton({onSelect:function(f){Designer.setFillStyle({color:f})}});$("#fill_gradient_begin").colorButton({onSelect:function(f){Designer.setFillStyle({beginColor:f});$("#fill_gradient_begin").attr("c",f)}});$("#fill_gradient_end").colorButton({onSelect:function(f){Designer.setFillStyle({endColor:f});$("#fill_gradient_end").attr("c",f)}});$("#gradient_swap").button({onClick:function(){var g=$("#fill_gradient_begin").attr("c");var f=$("#fill_gradient_end").attr("c");$("#fill_gradient_begin").attr("c",f).colorButton("setColor",f);$("#fill_gradient_end").attr("c",g).colorButton("setColor",g);Designer.setFillStyle({beginColor:f,endColor:g})}});$("#gradient_type").button({onMousedown:function(){$("#gradient_type_list").dropdown({target:$("#gradient_type"),onSelect:function(j){var i=j.attr("ty");$("#gradient_type").button("setText",j.text());Designer.setFillStyle({gradientType:i});$(".gradient_details").hide();$("#gradient_type_"+i).show();var k=Utils.getSelectedShapeIds();var h=Model.getShapeById(k[0]);var g=h.fillStyle;if(i=="linear"){$("#gradient_angle").spinner("setValue",Math.round(g.angle/Math.PI*180)+"°")}else{$("#gradient_radius").spinner("setValue",Math.round(g.radius*100)+"%")}}});var f=$("#gradient_type").text().trim();$("#gradient_type_list").children().each(function(){if($(this).text()==f){$("#gradient_type_list").dropdown("select",$(this));return false}})}});$("#gradient_angle").spinner({min:0,max:360,unit:"°",step:15,onChange:function(g){var f=g/180*Math.PI;Designer.setFillStyle({angle:f})}});$("#gradient_radius").spinner({min:0,max:100,unit:"%",step:5,onChange:function(f){Designer.setFillStyle({radius:f/100})}});$("#fill_change_img").button({onClick:function(){UI.showImageSelect(function(g,f,i){Designer.setFillStyle({type:"image",fileId:g,imageW:f,imageH:i})})}});$("#fill_img_display").button({onMousedown:function(){$("#img_display_list").dropdown({target:$("#fill_img_display"),onSelect:function(g){var f=g.attr("ty");$("#fill_img_display").button("setText",g.text());Designer.setFillStyle({display:f})}})}});$("#spinner_opacity").spinner({min:0,max:100,unit:"%",step:5,onChange:function(f){Designer.setShapeStyle({alpha:f/100})}});$("#dock_metric_x").spinner({min:-800,unit:"px",step:5,onChange:function(f){Designer.setShapeProps({x:f})}});$("#dock_metric_x").spinner("setValue","0px");$("#dock_metric_w").spinner({min:20,unit:"px",step:5,onChange:function(f){Designer.setShapeProps({w:f})}});$("#dock_metric_y").spinner({min:-800,unit:"px",step:5,onChange:function(f){Designer.setShapeProps({y:f})}});$("#dock_metric_y").spinner("setValue","0px");$("#dock_metric_h").spinner({min:20,unit:"px",step:5,onChange:function(f){Designer.setShapeProps({h:f})}});$("#dock_metric_angle").spinner({min:0,max:360,unit:"°",step:15,onChange:function(g){var f=g/180*Math.PI;Designer.setShapeProps({angle:f})}});$("#dock_page_size").button({onMousedown:function(){$("#page_size_list").dropdown({target:$("#dock_page_size"),onSelect:function(j){var g=parseInt(j.attr("w"));var i=parseInt(j.attr("h"));Designer.setPageStyle({width:g,height:i});$("#dock_page_size").button("setText",j.text())}});var f=$("#page_size_list").children("li[w="+Model.define.page.width+"][h="+Model.define.page.height+"]");if(f.length>0){$("#page_size_list").dropdown("select",f)}else{$("#page_size_list").dropdown("select",$("#dock_size_custom"))}$("#dock_size_w").spinner("setValue",Model.define.page.width+"px");$("#dock_size_h").spinner("setValue",Model.define.page.height+"px")}});$("#dock_size_w").spinner({min:200,unit:"px",step:100,onChange:function(f){Designer.setPageStyle({width:f})}});$("#dock_size_h").spinner({min:200,unit:"px",step:100,onChange:function(f){Designer.setPageStyle({height:f})}});$("#dock_page_padding").button({onMousedown:function(){$("#page_padding_list").dropdown({target:$("#dock_page_padding"),onSelect:function(g){var h=parseInt(g.attr("p"));Designer.setPageStyle({padding:h});$("#dock_page_padding").button("setText",g.text())}});var f=$("#page_padding_list").children("li[p="+Model.define.page.padding+"]");$("#page_padding_list").dropdown("select",f)}});$("#dock_page_color").colorButton({position:"center",onSelect:function(f){Designer.setPageStyle({backgroundColor:f})}});$("#dock_page_showgrid").bind("change",function(){var f=$(this).is(":checked");Designer.setPageStyle({showGrid:f});if(f){$("#dock_gridsize_box").show()}else{$("#dock_gridsize_box").hide()}});$("#dock_page_gridsize").button({onMousedown:function(){$("#page_gridsize_list").dropdown({target:$("#dock_page_gridsize"),onSelect:function(h){var g=parseInt(h.attr("s"));Designer.setPageStyle({gridSize:g});$("#dock_page_gridsize").button("setText",h.text())}});var f=$("#page_gridsize_list").children("li[s="+Model.define.page.gridSize+"]");$("#page_gridsize_list").dropdown("select",f)}});$("#spinner_play_speed").spinner({min:1,max:30,unit:"s",step:1,value:5,onChange:function(f){}});$("#spinner_play_speed").spinner("setValue","2s");$("#btn_history_play").button({onClick:function(){if($("#btn_history_play").children().hasClass("ico_pause")){Dock.pauseVersions()}else{Dock.playVersions()}}});$("#btn_history_restore").button({onClick:function(){Dock.restoreVersion()}})},currentView:"",showView:function(a){if($("#dock_btn_"+a).button("isDisabled")){return}$(".dock_view").hide();$(".dock_view_"+a).show();$(".dock_buttons").children().removeClass("selected");$("#dock_btn_"+a).addClass("selected");if(Dock.currentView=="history"&&a!="history"){Dock.closeHistory()}this.currentView=a;this.update(true)},setFillStyle:function(a){$("#dock_fill_type").button("setText",$("#dock_fill_list").children("li[ty="+a.type+"]").text());$(".fill_detail").hide();if(a.type=="solid"){$(".fill_detail_solid").show();$("#fill_solid_btn").colorButton("setColor",a.color)}else{if(a.type=="gradient"){$(".fill_detail_gradient").show();$("#fill_gradient_begin").attr("c",a.beginColor).colorButton("setColor",a.beginColor);$("#fill_gradient_end").attr("c",a.endColor).colorButton("setColor",a.endColor);$("#gradient_type").button("setText",$("#gradient_type_list").children("li[ty="+a.gradientType+"]").text());$(".gradient_details").hide();if(a.gradientType=="linear"){$("#gradient_type_linear").show();$("#gradient_angle").spinner("setValue",Math.round(a.angle/Math.PI*180)+"°")}else{$("#gradient_type_radial").show();$("#gradient_radius").spinner("setValue",Math.round(a.radius*100)+"%")}}else{if(a.type=="image"){$(".fill_detail_image").show();var b="fill";if(a.display){b=a.display}$("#fill_img_display").button("setText",$("#img_display_list").children("li[ty="+b+"]").text())}}}},update:function(drawNav){if(this.currentView=="portalAttrShow"||this.currentView=="portalDescShow"||this.currentView=="portalFileShow"){changeArributeByShape()}if(this.currentView=="navigator"){if(drawNav){Navigator.draw()}$("#dock_zoom").spinner("setValue",Math.round(Designer.config.scale*100)+"%")}else{if(this.currentView=="graphic"){var selectedIds=Utils.getSelectedIds();var count=selectedIds.length;var shapeIds=Utils.getSelectedShapeIds();var shapeCount=shapeIds.length;if(count==0){$("#dock_line_color").button("disable");$("#dock_line_style").button("disable");$("#dock_line_width").button("disable")}else{$("#dock_line_color").button("enable");$("#dock_line_style").button("enable");$("#dock_line_width").button("enable");var shape=Model.getShapeById(selectedIds[0]);$("#dock_line_color").colorButton("setColor",shape.lineStyle.lineColor);var lineStyleCls=$("#line_style_list").children("li[line="+shape.lineStyle.lineStyle+"]").children().attr("class");$("#dock_line_style").children(".linestyle").attr("class",lineStyleCls);$("#dock_line_width").spinner("setValue",shape.lineStyle.lineWidth+"px")}if(shapeCount==0){$("#dock_fill_type").button("disable");$("#spinner_opacity").button("disable");Dock.setFillStyle({type:"none"})}else{$("#dock_fill_type").button("enable");$("#spinner_opacity").button("enable");var shape=Model.getShapeById(shapeIds[0]);Dock.setFillStyle(shape.fillStyle);$("#spinner_opacity").spinner("setValue",Math.round(shape.shapeStyle.alpha/1*100)+"%")}}else{if(this.currentView=="metric"){var shapeIds=Utils.getSelectedShapeIds();var shapeCount=shapeIds.length;if(shapeCount==0){$("#dock_metric_x").button("disable");$("#dock_metric_w").button("disable");$("#dock_metric_y").button("disable");$("#dock_metric_h").button("disable");$("#dock_metric_angle").button("disable")}else{var shape=Model.getShapeById(shapeIds[0]);$("#dock_metric_x").button("enable").spinner("setValue",Math.round(shape.props.x)+"px");$("#dock_metric_w").button("enable").spinner("setValue",Math.round(shape.props.w)+"px");$("#dock_metric_y").button("enable").spinner("setValue",Math.round(shape.props.y)+"px");$("#dock_metric_h").button("enable").spinner("setValue",Math.round(shape.props.h)+"px");$("#dock_metric_angle").button("enable").spinner("setValue",Math.round(shape.props.angle/Math.PI*180)+"°")}}else{if(this.currentView=="page"){var page=Model.define.page;var w=page.width;var h=page.height;var sizeItem=$("#page_size_list").children("li[w="+w+"][h="+h+"]");var sizeText="";if(sizeItem.length>0){sizeText=sizeItem.text()}else{sizeText=$("#dock_size_custom").text()}$("#dock_page_size").button("setText",sizeText);$("#dock_page_padding").button("setText",page.padding+"px");$("#dock_page_color").colorButton("setColor",page.backgroundColor);$("#dock_page_showgrid").attr("checked",page.showGrid);if(page.showGrid){$("#dock_gridsize_box").show()}else{$("#dock_gridsize_box").hide()}var gridText="";var gridItem=$("#page_gridsize_list").children("li[s="+page.gridSize+"]");if(gridItem.length>0){var gridText=gridItem.text()}$("#dock_page_gridsize").button("setText",gridText)}else{if(this.currentView=="attribute"){if(!inputUpdate){changeArributeByShape()}if(role=="viewer"){$("#dock_page_attribute table input").prop("disabled",true);$("#tagContent1 table input, #tagContent1 table textarea").prop("disabled",true)}}else{if(this.currentView=="message"){$.ajax({url:"./jd?sid="+$("#sid").val()+"&cmd=com.actionsoft.apps.coe.pal_pl_repository_commentlist"+"&repositoryId="+ruuid+"&openAppType="+openAppType,success:function(msg){var html="";var array;if(typeof(msg)=="string"){array=eval("("+msg+")").msg}else{array=msg.msg}if(typeof(array)=="string"){array=eval("("+array+")")}for(var i=0;i<array.length;i++){var obj=array[i];html+=getHtml(obj)}$("#messageContent").html(html)}})}else{if(this.currentView=="publish"){$.ajax({url:"./jd?sid="+$("#sid").val()+"&cmd=com.actionsoft.apps.coe.pal_publish_history_of_repository&wsId="+$("#wsId").val()+"&repositoryId="+ruuid,success:function(msg){var array;if(typeof(msg)=="string"){array=eval("("+msg+")").msg}else{array=msg.msg}if(typeof(array)=="string"){array=eval("("+array+")")}var html="";if(array!=null&&array.length>0){for(var i=0;i<array.length;i++){var data=array[i];var type=data.publishType;var style="";var info="";if(type=="N"){style="green";info="新发布"}else{if(type=="C"){style="blue";info="变更"}else{if(type=="S"){style="red";info="停用"}}}var clickHtml="";if(data.plId!=undefined){clickHtml=" style='cursor: pointer;' onclick=\"openFileLink('"+data.plId+"', '_seft', '"+data.plName+"')\""}html+="<section>"+'	<span class="point-time point-'+style+'"></span>'+"	<time>"+"		<span>"+data.publishDate+"</span>"+"	</time>"+"	<aside>"+'		<p class="brief"><span class="text-'+style+'" '+clickHtml+" >"+info+"</span></p>"+'		<p class="things">'+data.publishDesc+"</p>"+"	</aside>"+"</section>"}}else{html='<div style="font-size: 16px; color: #aaa; text-align: center; vertical-align: middle; line-height: 200px;">暂无发布历史</div>'}$("#sidePublishListDiv article").html(html)}})}else{if(this.currentView=="link"){$.ajax({url:"./jd?sid="+$("#sid").val()+"&cmd=com.actionsoft.apps.coe.pal_link_of_repository&wsId="+$("#wsId").val()+"&plId="+ruuid,success:function(r){var links=r.data.links;var customLinks=r.data.customLInks;var html="";var flag1=false;var flag2=false;if(links!=null&&links.length>0){html+='<h3 style="color:#333333;text-align:left;verticalalign:middle;margin:10px 10px 0px 10px;">文件链接</h3>';for(var i=0;i<links.length;i++){html+='<img style="cursor:pointer;width: 100px; margin: 10px; background-color: #FFF;" src="'+links[i].photo+'" awsui-qtip="text:\''+links[i].fileName+"',position:'bottom'\" onclick=\"openLinkUrlRewrite('custom', '"+links[i].url+"', '_seft', '"+links[i].uuid+"','','"+links[i].fileName+"',true)\">"}}else{flag1=true}if(customLinks!=null&&customLinks.length>0){html+='<h3 style="color:#333333;text-align:left;verticalalign:middle;margin:0px 10px;">自定义链接</h3>';html+="<ul>";var index=1;for(var i=0;i<customLinks.length;i++){html+='<li style="line-height:25px;font-size:20px;text-align:left;verticalalign:middle;margin:0px 10px;"><a awsui-qtip="text:\''+customLinks[i].name+"',position:'bottom'\" href=\""+customLinks[i].url+'" target="_blank">'+(index++)+". "+customLinks[i].name+"</a></li>"}html+="</ul>"}else{flag2=true}if(flag1&&flag2){html='<div style="font-size: 16px; color: #aaa; text-align: center; vertical-align: middle; line-height: 200px;">暂无链接</div>'}$("#linkContent").empty().html(html)}})}}}}}}}}if(this.currentView=="history"){if(drawNav&&Dock.historyVersions==null){this.loadHistorys()}}},historyVersions:null,loadHistorys:function(){},resetVersions:function(){$("#history_versions").children("li").unbind().bind("click",function(){if(Dock.playingTimeout!=null){return}if($(this).hasClass("selected")){Dock.closeHistory()}else{$("#history_versions").children(".selected").removeClass("selected");$(this).addClass("selected");var d=$(this).attr("def");Dock.showHistoryVersion(d)}var e=$("#history_versions").children(".selected");if(e.length!=0&&e.attr("ind")!="0"){$("#spinner_play_speed").button("enable");$("#btn_history_play").button("enable");$("#btn_history_restore").button("enable")}else{$("#spinner_play_speed").button("disable");$("#btn_history_play").button("disable");$("#btn_history_restore").button("disable")}});$("#history_versions").height("auto");var c=$("#history_versions").offset().top;var b=c+$("#history_versions").height()+75;if(b>$(window).height()){var a=$(window).height()-c-75;if(a<140){a=140}$("#history_versions").height(a)}else{$("#history_versions").height("auto")}},editHistoryRemark:function(b,a){b.stopPropagation();var d=$("#history_versions").children("li[vid="+a+"]");d.find(".remark_container").hide();var e=d.find(".remark_text").text();var c=d.find(".edit_container");c.show();c.children("textarea").val(e).select();c.children(".save").bind("click",function(f){f.stopPropagation();var g=c.children("textarea").val();d.find(".remark_text").text(g);d.find(".remark_container").show();c.hide();if(g!=e){CLB.send({action:"versionRemark",remark:g,versionId:a})}});c.children(".cancel").bind("click",function(f){f.stopPropagation();Dock.cancelHistoryRemark()})},cancelHistoryRemark:function(){$(".remark_container").show();$(".edit_container").hide()},showHistoryVersion:function(a){$("#spinner_play_speed").button("disable");$("#btn_history_play").button("disable");$("#btn_history_restore").button("disable");Dock.cancelHistoryRemark();$.ajax({url:"/diagraming/getdefinition",data:{definitionId:a},success:function(b){Dock.openHistory(b.definition);if($("#history_versions").children(".selected").attr("ind")!="0"){$("#spinner_play_speed").button("enable");$("#btn_history_play").button("enable");$("#btn_history_restore").button("enable")}}})},playVersions:function(){var b=$("#history_versions").children(".selected");var a=parseInt(b.attr("ind"));Dock.playOneVersion(a--,0);$("#btn_history_play").children().attr("class","ico ico_pause");$("#btn_history_play").attr("title","暂停").trigger("mouseenter");$("#btn_history_restore").button("disable")},pauseVersions:function(){if(this.playingTimeout){clearTimeout(this.playingTimeout)}this.playingTimeout=null;$("#btn_history_play").children().attr("class","ico ico_play");$("#btn_history_play").attr("title","从此版本播放");$(".ico_playing").remove();var a=$("#history_versions").children(".selected");$("#history_versions").children(".playing").removeClass("playing");if(a.length!=0&&a.attr("ind")!="0"){$("#spinner_play_speed").button("enable");$("#btn_history_play").button("enable");$("#btn_history_restore").button("enable")}else{$("#spinner_play_speed").button("disable");$("#btn_history_play").button("disable");$("#btn_history_restore").button("disable")}},playingTimeout:null,playOneVersion:function(b,c){var g=$("#history_versions").children("li[ind="+b+"]");$("#history_versions").children(".selected").removeClass("selected");g.addClass("selected").addClass("playing");$(".ico_playing").remove();g.append("<div class='ico ico_playing'></div>");var a=Dock.historyVersions.versions[b];var h=a.messages[c];var d=JSON.parse(h);MessageSource.receive(d);var f=g.position().top;if(f<0){$("#history_versions").scrollTop($("#history_versions").scrollTop()+f)}var e=$("#spinner_play_speed").spinner("getValue")*1000;if(b==0&&c==a.messages.length-1){this.pauseVersions()}else{if(c<a.messages.length-1){c++}else{b=b-1;c=0}this.playingTimeout=setTimeout(function(){Dock.playOneVersion(b,c)},e)}},currentDefinition:null,openHistory:function(a){if(this.currentDefinition==null){this.currentDefinition=$.extend(true,{},Model.define)}Utils.unselect();Designer.open(a);Designer.hotkey.cancel();Designer.op.cancel();$("#menu_bar").children().addClass("readonly");$(".diagram_title").addClass("readonly");$(".dock_buttons").children().addClass("disabled");$("#dock_btn_history").removeClass("disabled");$(".panel_box").addClass("readonly");CLB.stopListen()},closeHistory:function(){if(this.currentDefinition!=null){Designer.open(this.currentDefinition);this.currentDefinition=null;this.activeOperation()}},activeOperation:function(){Designer.hotkey.init();Designer.op.init();$("#menu_bar").children().removeClass("readonly");$(".diagram_title").removeClass("readonly");$(".dock_buttons").children().removeClass("disabled");$("#dock_btn_history").removeClass("disabled");$(".panel_box").removeClass("readonly");$("#history_versions").children(".selected").removeClass("selected");CLB.listen();Dock.loadHistorys()},restoreVersion:function(){var d=$("#history_versions").children(".selected");if(d.length){MessageSource.beginBatch();var e=Dock.currentDefinition.elements;var f=[];if(e){for(var g in e){f.push(e[g])}}MessageSource.send("remove",f);var b={page:Utils.copy(Dock.currentDefinition.page),update:Utils.copy(Model.define.page)};MessageSource.send("updatePage",b);var a=Model.define.elements;var c=[];if(a){for(var g in a){c.push(a[g])}}MessageSource.send("create",c);MessageSource.commit();Dock.activeOperation()}},setAttributeList:function(){var c=Utils.getSelectedIds();var b=Model.getShapeById(c[0]);$(".clearfix").empty();if(b.dataAttributes){for(var d=0;d<b.dataAttributes.length;d++){var a=b.dataAttributes[d];var f=$("#attr_add_type").children("option[value="+a.type+"]").text();var e=$("<li id='"+a.id+"' class='attr_item attr_item_"+a.id+"' onclick=\"Dock.editAttr('"+a.id+"')\"><div class='attr_name'>"+a.name+"</div><div class='attr_type'>"+f+"</div><div class='attr_value'>"+a.value+"</div><div style='clear: both'></div></li>").appendTo($(".attr_list"));if(a.category!="default"){e.append("<div class='ico ico_attr_delete' onclick=\"Dock.deleteAttr('"+a.id+"', event)\"></div>")}}}this.fitAttrList()},fitAttrList:function(){var b=$("#tagContent").scrollTop();$("#tagContent").height("auto");var d=$("#tagContent").offset().top;var c=d+$(".clearfix").height()+10;if(c>$(window).height()){var a=$(window).height()-d-10;if(a<140){a=140}$("#tagContent").height(a)}else{$("#tagContent").height("auto")}$("#tagContent").scrollTop(b)},showAttrAdd:function(){$("#attr_add_btn").hide();$(".attr_add_items").show();$("#attr_add_name").val("").focus();$("#attr_add_type").val("string");$("#attr_add_type").unbind().bind("change",function(){Dock.setAttrValueInput(null,$(this).val())});Dock.setAttrValueInput(null,"string");this.fitAttrList()},saveAttrAdd:function(){var a=$("#attr_add_name").val();if(a==""){$("#attr_add_name").focus();return}var b=$("#attr_add_type").val();var c=$("#attr_add_value_arera").children().val();var d={name:a,type:b,value:c};Designer.addDataAttribute(d);this.setAttributeList();this.showAttrAdd()},cancelAttrAdd:function(){$("#attr_add_btn").show();$(".attr_add_items").hide();this.fitAttrList()},editAttr:function(f){var m=$(".attr_item_"+f);if(m.hasClass("attr_editing")){return}if($(".attr_editing").length>0){var c=$(".attr_editing").attr("id");this.saveAttrEdit(c)}m=$(".attr_item_"+f);m.addClass("attr_editing");var g=Designer.getDataAttrById(f);var j=this.setAttrValueInput(g,g.type);j.val(g.value).select();if(g.category!="default"){var h=m.children(".attr_name");h.empty();var l=$("<input type='text' class='input_text' style='width: 88px'/>").appendTo(h);l.val(g.name).select();var b=m.children(".attr_type");b.empty();var i=$("<select class='input_select' style='width: 60px'></select>").appendTo(b);i.html($("#attr_add_type").html()).val(g.type);i.bind("change",function(){Dock.setAttrValueInput(g,$(this).val())})}var k=$("<div class='attr_edit_display'></div>").appendTo(m);k.append("<div class='dock_label'><@i18n resource='diagraming.addattr.displayas'/></div>");k.append("<div id='attr_edit_showtype' class='toolbar_button active btn_inline' style='width: 75px;'><div class='text_content'></div><div class='ico ico_dropdown'></div></div>");k.append("<div style='clear: both'></div>");k.append("<div class='attr_display_options'></div>");this.appendDisplayItems();var e="none";if(g.showType){e=g.showType}this.setAttrDisplay(e);$("#attr_edit_showtype").attr("ty",e).button({onMousedown:function(){$("#attr_display_list").dropdown({target:$("#attr_edit_showtype"),onSelect:function(p){var o=p.attr("ty");$("#attr_edit_showtype").attr("ty",o).button("setText",p.text());Dock.setAttrDisplay(o)}});var n=$("#attr_edit_showtype").text().trim();$("#attr_display_list").children().each(function(){if($(this).text()==n){$("#attr_display_list").dropdown("select",$(this));return false}})}});$("#attr_edit_showtype").attr("ty",e).button("setText",$("#attr_display_list").children("li[ty="+e+"]").html());if(e!="none"){$("#attr_display_name").attr("checked",g.showName);if(e=="icon"){this.setAttrIcon(g.icon)}}var a="mostright";if(g.horizontal){a=g.horizontal}var d="mostbottom";if(g.vertical){d=g.vertical}$("#attr_location_h").button("setText",$("#attr_location_h_list").children("li[loc="+a+"]").html());$("#attr_location_h").attr("loc",a);$("#attr_location_v").button("setText",$("#attr_location_v_list").children("li[loc="+d+"]").html());$("#attr_location_v").attr("loc",d);m.append("<div class='attr_edit_btns'><div id='save_edit_attr' class='toolbar_button active'><@i18n resource='global.ok'/></div><div id='cancel_edit_attr' class='toolbar_button active' style='margin-left: 5px;'><@i18n resource='global.cancel'/></div></div>");$("#save_edit_attr").bind("click",function(n){n.stopPropagation();Dock.saveAttrEdit(f)});$("#cancel_edit_attr").bind("click",function(n){n.stopPropagation();Dock.setAttributeList()})},setAttrValueInput:function(c,e){var b;if(c!=null){b=$(".attr_editing").children(".attr_value")}else{b=$("#attr_add_value_arera")}b.empty();var a;if(e=="boolean"){a=$("<select class='input_select'><option value=''></option><option value='true'>true</option><option value='false'>false</option></select>").appendTo(b)}else{if(e=="list"){a=$("<select class='input_select'></select>").appendTo(b);if(c.listItems){for(var d=0;d<c.listItems.length;d++){var f=c.listItems[d];a.append("<option value='"+f+"'>"+f+"</option>")}}}else{a=$("<input type='text' class='input_text'/>").appendTo(b)}}if(c==null){b.children().css("width","260px")}else{b.children().css("width","128px")}return a},appendDisplayItems:function(){var e=$(".attr_display_options");var f=$("<div class='opt_area'></div>").appendTo(e);f.append("<input id='attr_display_name' type='checkbox'/><label for='attr_display_name'><@i18n resource='diagraming.addattr.showname'/></label>");var d=$("<div id='attr_icon_area' style='padding-top:5px;'></div>").appendTo(f);d.append("<div class='dock_label'><@i18n resource='diagraming.addattr.icon'/></div>");d.append("<div id='attr_display_icon' ico='' class='toolbar_button active btn_inline' style='width: 50px'><div class='text_content'></div><div class='ico ico_dropdown'></div></div>");d.append("<div style='clear: both'></div>");if($("#attr_icon_list").children("li").html()==""){var b="";var a=1;while(a<=49){if(a==30){b+="<div></div>"}b+="<div onmousedown='Dock.setAttrIcon("+a+")' class='attr_icon_item'></div>";a++}$("#attr_icon_list").children("li").html(b)}var c=$("<div class='opt_area location_area'></div>").appendTo(e);c.append("<div><@i18n resource='diagraming.addattr.display.location'/></div>");c.append("<div class='dock_label'><@i18n resource='diagraming.addattr.display.h'/></div>");c.append("<div id='attr_location_h' class='toolbar_button active btn_inline' loc='mostright'><div class='text_content location_content'><div><span style='left: 11px'></span></div>Most Right</div><div class='ico ico_dropdown'></div></div>");c.append("<div style='clear: both'></div>");c.append("<div class='dock_label'><@i18n resource='diagraming.addattr.display.v'/></div>");c.append("<div id='attr_location_v' class='toolbar_button active btn_inline' loc='mostbottom'><div class='text_content location_content'><div><span style='top: 11px'></span></div>Most Bottom</div><div class='ico ico_dropdown'></div></div>");c.append("<div style='clear: both'></div>");e.append("<div style='clear: both'></div>");$("#attr_display_icon").button({onMousedown:function(){$("#attr_icon_list").dropdown({target:$("#attr_display_icon")})}});$("#attr_location_h").button({onMousedown:function(){$("#attr_location_h_list").dropdown({target:$("#attr_location_h"),onSelect:function(g){$("#attr_location_h").button("setText",g.html());$("#attr_location_h").attr("loc",g.attr("loc"))}})}});$("#attr_location_v").button({onMousedown:function(){$("#attr_location_v_list").dropdown({target:$("#attr_location_v"),onSelect:function(g){$("#attr_location_v").button("setText",g.html());$("#attr_location_v").attr("loc",g.attr("loc"))}})}})},setAttrDisplay:function(a){if(a=="none"){$(".attr_display_options").hide()}else{$(".attr_display_options").show();if(a=="icon"){$("#attr_icon_area").show()}else{$("#attr_icon_area").hide()}}},setAttrIcon:function(a){$("#attr_display_icon").attr("ico",a).button("setText","");if(a){$("#attr_display_icon").button("setText","<img src='/images/data-attr/"+a+".png'/>")}},saveAttrEdit:function(f){var j=$(".attr_item_"+f);if(!j.hasClass("attr_editing")){return}var i=Designer.getDataAttrById(f);if(i.category!="default"){var a=j.children(".attr_name").children("input").val();if(a==""){j.children(".attr_name").children("input").focus();return}i.name=a;i.type=j.children(".attr_type").children("select").val()}i.value=j.children(".attr_value").children().val();var d=$("#attr_edit_showtype").attr("ty");i.showType=d;if(d!="none"){i.showName=$("#attr_display_name").is(":checked");i.horizontal=$("#attr_location_h").attr("loc");i.vertical=$("#attr_location_v").attr("loc");if(d=="icon"){i.icon=$("#attr_display_icon").attr("ico")}}var g=Utils.getSelectedIds();var h=Model.getShapeById(g[0]);if(i.category=="default"&&h.category=="bpmn"){if(!h.attribute){h.attribute={}}if(!h.attribute.markers){h.attribute.markers=[]}var c=h.attribute.markers;if(i.name=="loopCharacteristics"){Utils.removeFromArray(c,"loop");Utils.removeFromArray(c,"sequential");Utils.removeFromArray(c,"parallel");if(i.value=="StandardLoopCharacteristics"){Utils.addToArray(c,"loop")}else{if(i.value=="MultipleLoopCharacteristics"){var b=Designer.getDefaultDataAttrByName("isSequantial");if(b!=null){if(b.value=="true"){Utils.addToArray(c,"sequential")}else{Utils.addToArray(c,"parallel")}}}}}else{if(i.name=="isSequantial"){Utils.removeFromArray(c,"sequential");Utils.removeFromArray(c,"parallel");var e=Designer.getDefaultDataAttrByName("loopCharacteristics");if(e!=null&&e.value=="MultipleLoopCharacteristics"){if(i.value=="true"){Utils.addToArray(c,"sequential")}else{Utils.addToArray(c,"parallel")}}}else{if(i.name=="isForCompensation"){Utils.removeFromArray(c,"compensation");if(i.value=="true"){Utils.addToArray(c,"compensation")}}else{if(i.name=="isCollection"||i.name=="ParticipantMultiplicity"){Utils.removeFromArray(c,"parallel");if(i.value=="true"){Utils.addToArray(c,"parallel")}}else{if(i.name=="loopType"){Utils.removeFromArray(c,"loop");Utils.removeFromArray(c,"sequential");Utils.removeFromArray(c,"parallel");if(i.value=="Standard"){Utils.addToArray(c,"loop")}else{if(i.value=="MultiInstanceSequential"){Utils.addToArray(c,"sequential")}else{if(i.value=="MultiInstanceParallel"){Utils.addToArray(c,"parallel")}}}}}}}}}Designer.updateDataAttribute(i);this.setAttributeList()},deleteAttr:function(c,b){b.stopPropagation();var a=$(".attr_item_"+c);a.remove();this.fitAttrList();Designer.deleteDataAttribute(c)},fullScreen:function(a,b){if(a.requestFullscreen){a.requestFullscreen()}else{if(a.mozRequestFullScreen){a.mozRequestFullScreen()}else{if(a.webkitRequestFullscreen){a.webkitRequestFullscreen()}else{if(b){$("#fullscreen_tip").find(".t").text("由于您的浏览器限制,无法进入演示视图。")}else{$("#fullscreen_tip").find(".t").text("无法进入全屏视图,您可以按(F11)进入。")}$("#fullscreen_tip").fadeIn()}}}},enterPresentation:function(){$("#designer").bind("webkitfullscreenchange",function(a){Dock.manageFullScreen()});$(document).bind("mozfullscreenchange",function(a){Dock.manageFullScreen()}).bind("fullscreenchange",function(a){Dock.manageFullScreen()});this.fullScreen(Utils.getDomById("designer"),true)},enterFullScreen:function(){this.fullScreen(document.documentElement)},manageFullScreen:function(){var a=Utils.getDomById("designer");if(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement){$("#shape_panel").addClass("readonly");$("#designer_viewport").addClass("readonly");$(window).unbind("resize.designer");$("#designer_layout").height(window.screen.height);Designer.hotkey.cancel();Designer.op.cancel();$("#dock").hide();$(".dock_view").hide();Designer.contextMenu.destroy();Designer.op.canvasFreeDraggable()}else{$("#shape_panel").removeClass("readonly");$("#designer_viewport").removeClass("readonly");Designer.initialize.initLayout();Designer.hotkey.init();Designer.op.init();$("#dock").show();if(Dock.currentView!=""){Dock.showView(Dock.currentView)}Designer.contextMenu.init();$("#designer").unbind("webkitfullscreenchange");$("#designer").unbind("mozfullscreenchange").unbind("fullscreenchange")}}};var Navigator={init:function(){$("#designer_layout").bind("scroll",function(){Navigator.setView()});$("#navigation_eye").bind("mousedown",function(m){var f=$(this);var j=f.position();$("#designer_layout").unbind("scroll");var g=$("#designer_layout");var k=g.scrollTop();var d=g.scrollLeft();var n=$("#designer_canvas");var e=n.width();var a=n.height();var b=$("#navigation_canvas");var i=b.width();var c=b.height();var l=e/i;var h=a/c;$(document).bind("mousemove.navigator",function(q){var o=q.pageX-m.pageX;var s=q.pageY-m.pageY;var r=d+o*l;g.scrollLeft(r);var p=k+s*h;g.scrollTop(p);f.css({left:j.left+o,top:j.top+s})});$(document).bind("mouseup.navigator",function(o){$(document).unbind("mousemove.navigator");$(document).unbind("mouseup.navigator");Navigator.setView();$("#designer_layout").bind("scroll",function(){Navigator.setView()})})});$("#navigation_canvas").bind("click",function(l){var m=Utils.getRelativePos(l.pageX,l.pageY,$(this));var o=$("#designer_canvas");var h=o.width();var a=o.height();var b=$("#navigation_canvas");var k=b.width();var c=b.height();var n=h/k;var j=a/c;var g=m.x*n;var f=m.y*j;var i=$("#designer_layout");var d=Designer.config.pageMargin;i.scrollLeft(g+d-i.width()/2);i.scrollTop(f+d-i.height()/2)});this.setView()},draw:function(){if(this.drawNavigationTimeout){window.clearTimeout(this.drawNavigationTimeout)}this.drawNavigationTimeout=setTimeout(function(){var c=$("#navigation_canvas");var r=c[0].getContext("2d");r.save();r.clearRect(0,0,c.width(),c.height());r.scale(c.width()/Model.define.page.width,c.height()/Model.define.page.height);for(var g=0;g<Model.orderList.length;g++){var m=Model.orderList[g].id;var l=Model.getShapeById(m);r.save();if(l.name!="linker"){var b=l.props;var a=l.lineStyle;r.translate(b.x,b.y);r.translate(b.w/2,b.h/2);r.rotate(b.angle);r.translate(-(b.w/2),-(b.h/2));r.globalAlpha=l.shapeStyle.alpha;Designer.painter.renderShapePath(r,l)}else{var h=l;var a=h.lineStyle;var q=h.points;var o=h.from;var n=h.to;r.beginPath();r.moveTo(o.x,o.y);if(h.linkerType=="curve"){var f=q[0];var e=q[1];r.bezierCurveTo(f.x,f.y,e.x,e.y,n.x,n.y)}else{for(var d=0;d<q.length;d++){var k=q[d];r.lineTo(k.x,k.y)}r.lineTo(n.x,n.y)}r.lineWidth=a.lineWidth;r.strokeStyle="rgb("+a.lineColor+")";r.stroke()}r.restore()}r.restore();Navigator.setView();this.drawNavigationTimeout=null},100)},setView:function(){var a=$("#navigation_eye");var r=$("#designer_layout");var u=r.width();var d=r.height();var b=$("#navigation_canvas");var g=b.width();var n=b.height();var o=$("#designer_canvas");var f=o.width();var m=o.height();var l=Designer.config.pageMargin;var h=l-r.scrollLeft();var t=h+f;if(h<0){h=0}else{if(h>u){h=u}}if(t>u){t=u}else{if(t<0){t=0}}var j=l-r.scrollTop();var e=j+m;if(j<0){j=0}else{if(j>d){j=d}}if(e>d){e=d}else{if(e<0){e=0}}var i=t-h;var p=e-j;if(i==0||p==0){a.hide()}else{var k=r.scrollLeft()-l;if(k<0){k=0}k=k*(g/f);var q=r.scrollTop()-l;if(q<0){q=0}q=q*(n/m);var s=i*(g/f);var c=p*(n/m);a.css({left:k-1,top:q-1,width:s,height:c}).show()}}};(function(c){c.fn.button=function(e){if(typeof e=="string"){if(e=="disable"){c(this).addClass("disabled");c(this).find("input").attr("disabled",true)}else{if(e=="enable"){c(this).removeClass("disabled");c(this).find("input").attr("disabled",false)}else{if(e=="isDisabled"){return c(this).hasClass("disabled")}else{if(e=="isSelected"){return c(this).hasClass("selected")}else{if(e=="unselect"){c(this).removeClass("selected")}else{if(e=="select"){c(this).addClass("selected")}else{if(e=="setText"){c(this).children(".text_content").html(arguments[1])}else{if(e=="setColor"){c(this).children(".btn_color").css("background-color","rgb("+arguments[1]+")")}else{if(e=="getColor"){var d=c(this).children(".btn_color").css("background-color").replace(/\s/g,"");return d.substring(4,d.length-1)}}}}}}}}}return c(this)}var f=c(this);f.unbind("click");f.unbind("mousedown");if(e.onClick){f.bind("click",function(){if(f.button("isDisabled")){return}e.onClick()})}if(e.onMousedown){f.bind("mousedown",function(g){if(f.button("isDisabled")){return}e.onMousedown();g.stopPropagation()})}};var b=null;c.fn.dropdown=function(e){var i=c(this);i.find(".ico_selected").remove();if(typeof e=="string"){if(e=="close"){i.hide();b.target.removeClass("selected");c(document).unbind("mousedown.ui_dropdown");b=null}else{if(e=="select"){arguments[1].prepend("<div class='ico ico_selected'></div>")}}return}if(b!=null){b.menu.dropdown("close")}var i=c(this);var d=e.target;b={target:d,menu:i};var h=d.offset();d.addClass("selected");i.show();var g;if(e.position=="center"){g=h.left+d.outerWidth()/2-i.outerWidth()/2}else{if(e.position=="right"){g=h.left+d.outerWidth()-i.outerWidth()}else{g=h.left}}var f=h.top+d.outerHeight();if(f+i.outerHeight()>c(window).height()){f=c(window).height()-i.outerHeight()}i.css({top:f,left:g});if(typeof e.zindex!="undefined"){i.css("z-index",e.zindex)}i.unbind("mousedown").bind("mousedown",function(j){j.stopPropagation()});if(typeof e.bind=="undefined"||e.bind==true){i.find("li:not(.devider,.menu_text)").unbind().bind("click",function(){var j=c(this);if(!j.menuitem("isDisabled")&&j.children(".extend_menu").length==0){if(e.onSelect){e.onSelect(j)}i.dropdown("close")}})}c(document).bind("mousedown.ui_dropdown",function(){i.dropdown("close")})};c.colorpicker=function(e){var d=c("#color_picker");d.find(".selected").removeClass("selected");if(!d.attr("init")){d.find("div").each(function(){var g=c(this).css("background-color");g=g.replace(/\s/g,"");g=g.substring(4,g.length-1);c(this).attr("col",g)});d.attr("init",true)}var f=c.extend({},e,{bind:false});d.dropdown(f);d.children(".color_items").children("div").unbind().bind("click",function(){if(e.onSelect){var g=c(this).css("background-color");g=g.replace(/\s/g,"");g=g.substring(4,g.length-1);e.onSelect(g)}c("#color_picker").dropdown("close")});if(e.color){d.find("div[col='"+e.color+"']").addClass("selected")}c("#color_picker").children(".color_extend").remove();if(e.extend){c("#color_picker").append("<div class='color_extend'>"+e.extend+"</div>")}};c.fn.colorButton=function(e){var d=c(this);if(typeof e=="string"){if(e=="setColor"){d.children(".picker_btn_holder").css("background-color","rgb("+arguments[1]+")")}return}d.html("<div class='picker_btn_holder'></div><div class='ico ico_colordrop'></div>");d.bind("mousedown",function(h){if(d.button("isDisabled")){return}h.stopPropagation();var g=c.extend({},e);g.target=d;g.onSelect=function(i){d.colorButton("setColor",i);if(e.onSelect){e.onSelect(i)}};var f=c(this).children(".picker_btn_holder").css("background-color");f=f.replace(/\s/g,"");f=f.substring(4,f.length-1);g.color=f;c.colorpicker(g)})};c.fn.spinner=function(g){var i=c(this);if(typeof g=="string"){if(g=="getValue"){var d=i.find("input").val();d=parseFloat(d);return d}else{if(g=="setValue"){i.find("input").val(arguments[1]);i.attr("old",arguments[1])}}return}i.html("<div class='spinner_input'><input /></div><div class='buttons'><div class='spinner_up'></div><div class='spinner_down'></div></div>");var h={min:0,max:Number.MAX_VALUE,step:1,unit:""};g=c.extend(h,g);var e=i.children(".spinner_input");var f=e.find("input");i.spinner("setValue",g.min+g.unit);i.find(".spinner_up").bind("click",function(){if(i.button("isDisabled")){return}var k=i.spinner("getValue");var j=k+g.step;a(i,j,g)});i.find(".spinner_down").bind("click",function(){if(i.button("isDisabled")){return}var k=i.spinner("getValue");var j=k-g.step;a(i,j,g)});f.bind("keydown",function(k){if(k.keyCode==13){var j=parseInt(c(this).val());if(isNaN(j)){j=g.min}a(i,j,g)}}).bind("focus",function(k){c(this).select();c(this).bind("mouseup",function(l){l.preventDefault();c(this).unbind("mouseup")});var j=c(this).parent().parent();if(!j.hasClass("active")){j.addClass("active inset")}}).bind("blur",function(k){var j=c(this).parent().parent();if(j.hasClass("inset")){j.removeClass("active inset")}})};function a(h,f,e){if(f>e.max){f=e.max}if(f<e.min){f=e.min}var d=h.attr("old");var g=f+e.unit;if(d!=g){if(e.onChange){e.onChange(f)}}h.spinner("setValue",f+e.unit)}c.fn.menuitem=function(d){var e=c(this);if(typeof d=="string"){if(d=="disable"){e.addClass("disabled")}else{if(d=="enable"){e.removeClass("disabled")}else{if(d=="isDisabled"){return e.hasClass("disabled")}else{if(d=="isSelected"){return e.children(".ico_selected").length>0}else{if(d=="unselect"){return e.children(".ico_selected").remove()}else{if(d=="select"){return e.prepend("<div class='ico ico_selected'></div>")}}}}}}}};c.fn.dlg=function(d){var g=c(this);if(typeof d=="string"){if(d=="close"){g.children(".dlg_close").trigger("click")}return}var e={closable:true};d=c.extend(e,d);var f=g.children(".dlg_close");if(f.length==0){f=c("<div class='ico dlg_close'></div>").appendTo(g)}if(d.closable==false){f.hide()}else{f.show()}c(".dlg_mask").remove();c("body").append("<div class='dlg_mask'></div>");f.unbind().bind("click",function(){g.hide();c(".dlg_mask").remove();if(d&&d.onClose){d.onClose()}c(document).unbind("keydown.closedlg");g.find("input,textarea,select").unbind("keydown.closedlg")});g.css({left:(c(window).width()-g.outerWidth())/2,top:(c(window).height()-g.outerHeight())/2});g.show();if(d.closable){g.find("input,textarea,select").unbind("keydown.closedlg").bind("keydown.closedlg",function(h){if(h.keyCode==27){g.children(".dlg_close").trigger("click")}});c(document).unbind("keydown.closedlg").bind("keydown.closedlg",function(h){if(h.keyCode==27){g.children(".dlg_close").trigger("click")}})}g.children(".dialog_header").unbind("mousedown.drag_dlg").bind("mousedown.drag_dlg",function(j){var i=c(this).parent();var m=j.pageX;var k=j.pageY;var l=i.offset().left;var h=i.offset().top;c(document).bind("mousemove.drag_dlg",function(p){var o=p.pageX-m+l;var n=p.pageY-k+h;i.offset({left:o,top:n})});c(document).bind("mouseup.drag_dlg",function(n){c(document).unbind("mousemove.drag_dlg");c(document).unbind("mouseup.drag_dlg")})})}})(jQuery);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/basic.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/basic.js
                                                  new file mode 100644
                                                  index 00000000..4b46e5f9
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/basic.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"basic",text:"Basic Shape",dataAttributes:[{name:"No.",type:"number",value:"",category:"default"},{name:"Name",type:"string",value:"",category:"default"},{name:"Owner",type:"string",value:"",category:"default"},{name:"Link",type:"link",value:"",category:"default"},{name:"Memo",type:"string",value:"",category:"default"}]});Schema.addShape({name:"text",title:"Text",text:"Text",category:"basic",attribute:{linkable:false},props:{w:160,h:40},anchors:[],textBlock:{x:0,y:0,w:"w",h:"h"},path:[{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}],drawIcon:function(b,c){var a=0;var d=-10;c=c+20;return[{lineStyle:{lineWidth:2},fillStyle:{type:"solid",color:"50, 50, 50"},actions:[{action:"move",x:a,y:d},{action:"line",x:b,y:d},{action:"line",x:b,y:d+c*0.2},{action:"line",x:b*0.9,y:d+c*0.12},{action:"line",x:b*0.55,y:d+c*0.12},{action:"line",x:b*0.55,y:d+c*0.85},{action:"line",x:b*0.63,y:d+c},{action:"line",x:b*0.37,y:d+c},{action:"line",x:b*0.45,y:d+c*0.85},{action:"line",x:b*0.45,y:d+c*0.12},{action:"line",x:b*0.1,y:d+c*0.12},{action:"line",x:0,y:d+c*0.2},{action:"close"}]}]}});Schema.addShape({name:"note",title:"Note",category:"basic",attribute:{linkable:false},props:{w:80,h:100},anchors:[],textBlock:{x:"w*0.1",y:"h*0.1",w:"w*0.8",h:"h*0.8"},fillStyle:{color:"255, 255, 170"},path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w-16",y:"0"},{action:"line",x:"w",y:"16"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]},{actions:[{action:"move",x:"w-16",y:"0"},{action:"line",x:"w-16",y:"16"},{action:"line",x:"w",y:"16"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w-16",y:"0"},{action:"line",x:"w",y:"16"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]}],drawIcon:function(a,b){return[{actions:[{action:"move",x:0,y:0},{action:"line",x:a*0.7,y:0},{action:"line",x:a,y:b*0.2},{action:"line",x:a,y:b},{action:"line",x:0,y:b},{action:"line",x:0,y:0},{action:"close"}]},{actions:[{action:"move",x:a*0.7,y:0},{action:"line",x:a*0.7,y:b*0.2},{action:"line",x:a,y:b*0.2}]},{fillStyle:{type:"none"},actions:[{action:"move",x:0,y:0},{action:"line",x:a*0.7,y:0},{action:"line",x:a,y:b*0.2},{action:"line",x:a,y:b},{action:"line",x:0,y:b},{action:"line",x:0,y:0},{action:"close"}]}]}});Schema.addShape({name:"image",title:"Image",text:"",attribute:{linkable:false,editable:false,visible:false},category:"basic",props:{w:98,h:72},path:[{actions:{ref:"rectangle"}}]});Schema.addShape({name:"round",title:"Round",text:"",category:"basic",props:{w:70,h:70},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"rectangle",title:"Rectangle",text:"",category:"basic",props:{w:100,h:70},path:[{actions:{ref:"rectangle"}}]});Schema.addShape({name:"roundRectangle",title:"Round Rectangle",text:"",category:"basic",props:{w:100,h:70},path:[{actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"triangle",title:"Triangle",text:"",category:"basic",props:{w:80,h:70},textBlock:{x:"10",y:"h*0.25",w:"w-20",h:"h*0.75"},anchors:[{x:"w/2",y:"0"},{x:"w/2",y:"h"},{x:"w*0.25",y:"h/2"},{x:"w*0.75",y:"h/2"}],path:[{actions:[{action:"move",x:"w/2",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"close"}]}]});Schema.addShape({name:"polygon",title:"Polygon",text:"",category:"basic",props:{w:74,h:70},textBlock:{x:"10",y:"h*0.15",w:"w-20",h:"h*0.85"},anchors:[{x:"w/2",y:"0"},{x:"w/2",y:"h"},{x:"0",y:"h*0.39"},{x:"w",y:"h*0.39"}],path:[{actions:[{action:"move",x:"w/2",y:"0"},{action:"line",x:"0",y:"h*0.39"},{action:"line",x:"w*0.18",y:"h"},{action:"line",x:"w*0.82",y:"h"},{action:"line",x:"w",y:"h*0.39"},{action:"close"}]}]});Schema.addShape({name:"hexagon",title:"Hexagon",text:"",category:"basic",props:{w:84,h:70},path:[{actions:[{action:"move",x:"Math.min(w,h)*0.21",y:"0"},{action:"line",x:"w-Math.min(w,h)*0.21",y:"0"},{action:"line",x:"w",y:"h * 0.5"},{action:"line",x:"w-Math.min(w,h)*0.21",y:"h"},{action:"line",x:"Math.min(w,h)*0.21",y:"h"},{action:"line",x:"0",y:"h * 0.5"},{action:"line",x:"Math.min(w,h)*0.21",y:"0"},{action:"close"}]}]});Schema.addShape({name:"octagon",title:"Octagon",text:"",category:"basic",props:{w:70,h:70},textBlock:{x:"10",y:"10",w:"w-20",h:"h-20"},path:[{actions:[{action:"move",x:"Math.min(w,h)*0.29",y:"0"},{action:"line",x:"w-Math.min(w,h)*0.29",y:"0"},{action:"line",x:"w",y:"h*0.29"},{action:"line",x:"w",y:"h*0.71"},{action:"line",x:"w-Math.min(w,h)*0.29",y:"h"},{action:"line",x:"Math.min(w,h)*0.29",y:"h"},{action:"line",x:"0",y:"h*0.71"},{action:"line",x:"0",y:"h*0.29"},{action:"close"}]}]});Schema.addShape({name:"pentagon",title:"Pentagon",text:"",category:"basic",props:{w:70,h:70},textBlock:{x:"w*0.15",y:"h*0.20",w:"w*0.70",h:"h*0.65"},anchors:[{x:"w*0.5",y:"0"},{x:"0",y:"h*0.38"},{x:"w*0.5",y:"h*0.76"},{x:"w",y:"h*0.38"}],path:[{actions:[{action:"move",x:"w*0.62",y:"h*0.38"},{action:"line",x:"w*0.5",y:"0"},{action:"line",x:"w*0.38",y:"h*0.38"},{action:"line",x:"0",y:"h*0.38"},{action:"line",x:"w*0.3",y:"h*0.62"},{action:"line",x:"w*0.18",y:"h"},{action:"line",x:"w*0.5",y:"h*0.76"},{action:"line",x:"w*0.82",y:"h"},{action:"line",x:"w*0.7",y:"h*0.62"},{action:"line",x:"w",y:"h*0.38"},{action:"close"}]}]});Schema.addShape({name:"cross",title:"Cross",text:"",category:"basic",props:{w:70,h:70},textBlock:{x:"0",y:"h*0.5-Math.min(w,h)/8",w:"w",h:"Math.min(w,h)*2/8"},path:[{actions:[{action:"move",x:"w*0.5-Math.min(w,h)/8",y:"0"},{action:"line",x:"w*0.5+Math.min(w,h)/8",y:"0"},{action:"line",x:"w*0.5+Math.min(w,h)/8",y:"h*0.5-Math.min(w,h)/8"},{action:"line",x:"w",y:"h*0.5-Math.min(w,h)/8"},{action:"line",x:"w",y:"h*0.5+Math.min(w,h)/8"},{action:"line",x:"w*0.5+Math.min(w,h)/8",y:"h*0.5+Math.min(w,h)/8"},{action:"line",x:"w*0.5+Math.min(w,h)/8",y:"h"},{action:"line",x:"w*0.5-Math.min(w,h)/8",y:"h"},{action:"line",x:"w*0.5-Math.min(w,h)/8",y:"h*0.5+Math.min(w,h)/8"},{action:"line",x:"0",y:"h*0.5+Math.min(w,h)/8"},{action:"line",x:"0",y:"h*0.5-Math.min(w,h)/8"},{action:"line",x:"w*0.5-Math.min(w,h)/8",y:"h*0.5-Math.min(w,h)/8"},{action:"close"}]}]});Schema.addShape({name:"cloud",title:"Cloud",text:"",category:"basic",props:{w:90,h:70},textBlock:{x:"w*0.17",y:"h*0.09",w:"w*0.71",h:"h*0.8"},anchors:[{x:"0",y:"h*0.5"},{x:"w*0.19",y:"h*0.9"},{x:"w*0.57",y:"h"},{x:"w*0.962",y:"h*0.8"},{x:"w*0.9543",y:"h*0.23"},{x:"w*0.6",y:"h*0.01"},{x:"w*0.17",y:"h*0.09"}],path:[{actions:[{action:"move",x:"0.12*w",y:"0.7*h"},{action:"curve",x1:"-0.1*w",y1:"0.5*h",x2:"0.04*w",y2:"0.35*h",x:"0.09*w",y:"0.3*h"},{action:"curve",x1:"0.07*w",y1:"0.05*h",x2:"0.32*w",y2:"0.0*h",x:"0.42*w",y:"0.1*h"},{action:"curve",x1:"0.50*w",y1:"-0.05*h",x2:"0.75*w",y2:"0.0*h",x:"0.75*w",y:"0.15*h"},{action:"curve",x1:"0.95*w",y1:"0.1*h",x2:"1.03*w",y2:"0.3*h",x:"0.95*w",y:"0.55*h"},{action:"curve",x1:"1.02*w",y1:"0.75*h",x2:"0.95*w",y2:"1.0*h",x:"0.72*w",y:"0.9*h"},{action:"curve",x1:"0.67*w",y1:"1.03*h",x2:"0.47*w",y2:"1.03*h",x:"0.42*w",y:"0.9*h"},{action:"curve",x1:"0.32*w",y1:"1.0*h",x2:"0.12*w",y2:"0.95*h",x:"0.12*w",y:"0.7*h"},{action:"close"}]}]});Schema.addShape({name:"braces",title:"Braces",text:"",category:"basic",attribute:{linkable:false},props:{w:110,h:70},fillStyle:{type:"none"},textBlock:{x:"w*0.1",y:"0",w:"w*0.8",h:"h"},anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],path:[{actions:[{action:"move",x:"Math.min(w*0.2,18)",y:"0"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"0",x:"Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"0",y:"h*0.5"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h",x:"Math.min(w*0.2,18)",y:"h"}]},{actions:[{action:"move",x:"w-Math.min(w*0.2,18)",y:"h"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h",x:"w-Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w",y:"h*0.5"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w-Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"0",x:"w-Math.min(w*0.2,18)",y:"0"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"parentheses",title:"Parentheses",text:"",category:"basic",attribute:{linkable:false},props:{w:110,h:70},fillStyle:{type:"none"},anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],textBlock:{x:"w*.1",y:"0",w:"w*0.8",h:"h"},path:[{actions:[{action:"move",x:"w*0.1",y:"0"},{action:"line",x:"0",y:"h*0.1"},{action:"line",x:"0",y:"h*0.9"},{action:"line",x:"w*0.1",y:"h"},{action:"move",x:"w-w*0.1",y:"h"},{action:"line",x:"w",y:"h*0.9"},{action:"line",x:"w",y:"h*0.1"},{action:"line",x:"w-w*0.1",y:"0"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"apqc",title:"APQC",text:"",category:"basic",props:{w:200,h:150},path:[{actions:[{action:"move",x:"0",y:"h/8"},{action:"quadraticCurve",x1:"w*0.5",y1:"-h/8",x:"w",y:"h/8"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"h/8"},{action:"close"}]}]});Schema.addShape({name:"singleLeftArrow",title:"Single Left Arrow",category:"basic",props:{w:90,h:60},anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],textBlock:{x:"0",y:"h*0.33",w:"w",h:"h*0.34"},path:[{actions:[{action:"move",x:"0",y:"h/2"},{action:"line",x:"Math.min(0.5*h,0.45*w)",y:"0"},{action:"line",x:"Math.min(0.5*h,0.45*w)",y:"h*0.33"},{action:"line",x:"w",y:"h*0.33"},{action:"line",x:"w",y:"h*0.67"},{action:"line",x:"Math.min(0.5*h,0.45*w)",y:"h*0.67"},{action:"line",x:"Math.min(0.5*h,0.45*w)",y:"h"},{action:"line",x:"0",y:"h/2"},{action:"close"}]}]});Schema.addShape({name:"singleRightArrow",title:"Single Right Arrow",category:"basic",props:{w:90,h:60},anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],textBlock:{x:"0",y:"h*0.33",w:"w",h:"h*0.34"},path:[{actions:[{action:"move",x:"0",y:"h*0.33"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"h*0.33"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"h"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"h*0.67"},{action:"line",x:"0",y:"h*0.67"},{action:"line",x:"0",y:"h*0.33"},{action:"close"}]}]});Schema.addShape({name:"doubleHorizontalArrow",title:"Double Horizontal Arrow",category:"basic",props:{w:90,h:60},anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],textBlock:{x:"0",y:"h*0.33",w:"w",h:"h*0.34"},path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"Math.min(h*0.5,w*0.45)",y:"0"},{action:"line",x:"Math.min(h*0.5,w*0.45)",y:"h*0.33"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"h*0.33"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"h"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"h*0.67"},{action:"line",x:"Math.min(h*0.5,w*0.45)",y:"h*0.67"},{action:"line",x:"Math.min(h*0.5,w*0.45)",y:"h"},{action:"line",x:"0",y:"h*0.5"},{action:"close"}]}]});Schema.addShape({name:"singleUpArrow",title:"Single Up Arrow",category:"basic",props:{w:60,h:90},anchors:[{x:"w*0.5",y:"0"},{x:"w*0.5",y:"h"}],textBlock:{x:"-w*0.2",y:"h*0.43",w:"w*1.4",h:"h*0.24"},path:[{actions:[{action:"move",x:"w*0.5",y:"0"},{action:"line",x:"w",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.67",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.67",y:"h"},{action:"line",x:"w*0.33",y:"h"},{action:"line",x:"w*0.33",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"0",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.5",y:"0"},{action:"close"}]}]});Schema.addShape({name:"singleDownArrow",title:"Single Down Arrow",category:"basic",props:{w:60,h:90},anchors:[{x:"w*0.5",y:"0"},{x:"w*0.5",y:"h"}],textBlock:{x:"-w*0.2",y:"h*0.33",w:"w*1.4",h:"h*0.24"},path:[{actions:[{action:"move",x:"w*0.33",y:"0"},{action:"line",x:"w*0.67",y:"0"},{action:"line",x:"w*0.67",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.5",y:"h"},{action:"line",x:"0",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.33",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.33",y:"0"},{action:"close"}]}]});Schema.addShape({name:"doubleVerticalArrow",title:"Double Vertical Arrow",category:"basic",props:{w:60,h:90},anchors:[{x:"w*0.5",y:"0"},{x:"w*0.5",y:"h"}],textBlock:{x:"-w*0.2",y:"h*0.38",w:"w*1.4",h:"h*0.24"},path:[{actions:[{action:"move",x:"w*0.5",y:"0"},{action:"line",x:"w",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.67",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.67",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.5",y:"h"},{action:"line",x:"0",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.33",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.33",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"0",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.5",y:"0"},{action:"close"}]}]});Schema.addShape({name:"backArrow",title:"Back Arrow",category:"basic",props:{w:70,h:70},anchors:[{x:"w-Math.min(w*0.12,20)",y:"h*0.5"},{x:"0",y:"h*0.5"}],textBlock:{x:"0",y:"0",w:"w-10",h:"h"},path:[{actions:[{action:"move",x:"0",y:"Math.min(Math.min(w,h)*0.4,80)"},{action:"quadraticCurve",x1:"0",y1:"0",x:"Math.min(Math.min(w,h)*0.4,80)",y:"0"},{action:"line",x:"w-Math.min(w*0.12,20)-Math.min(Math.min(w,h)*0.4,80)",y:"0"},{action:"quadraticCurve",x1:"w-Math.min(w*0.12,20)",y1:"0",x:"w-Math.min(w*0.12,20)",y:"Math.min(Math.min(w,h)*0.4,80)"},{action:"line",x:"w-Math.min(w*0.12,20)",y:"h-h*0.1-Math.min(h*0.1,50)"},{action:"line",x:"w",y:"h-h*0.1-Math.min(h*0.1,50)"},{action:"line",x:"w-Math.min(w*0.12,20)-Math.min(Math.min(h,w)*0.25,50)/2",y:"h"},{action:"line",x:"w-Math.min(w*0.12,20)*2 - Math.min(Math.min(h,w)*0.25,50)",y:"h-h*0.1-Math.min(h*0.1,50)"},{action:"line",x:"w-Math.min(w*0.12,20)-Math.min(Math.min(h,w)*0.25,50)",y:"h-h*0.1-Math.min(h*0.1,50)"},{action:"line",x:"w-Math.min(w*0.12,20) - Math.min(Math.min(h,w)*0.25,50)",y:"Math.min(Math.min(h,w)*0.4,80)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.12,20)-Math.min(Math.min(h,w)*0.25,50)",y1:"Math.min(Math.min(h,w)*0.25,50)",x:"w-Math.min(w*0.12,20)-Math.min(Math.min(h,w)*0.25,50)-Math.min(w*0.15,30)",y:"Math.min(Math.min(h,w)*0.25,50)"},{action:"line",x:"Math.min(Math.min(h,w)*0.25,50)+Math.min(w*0.15,30)",y:"Math.min(Math.min(h,w)*0.25,50)"},{action:"quadraticCurve",x1:"Math.min(Math.min(h,w)*0.25,50)",y1:"Math.min(Math.min(h,w)*0.25,50)",x:"Math.min(Math.min(h,w)*0.25,50)",y:"Math.min(Math.min(h,w)*0.4,80)"},{action:"line",x:"Math.min(Math.min(h,w)*0.25,50)",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"Math.min(Math.min(h,w)*0.4,80)"},{action:"close"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"corner",title:"Corner",category:"basic",props:{w:70,h:70},anchors:[{x:"w*0.5",y:"0"},{x:"w*0.5",y:"0"},{x:"0",y:"h*0.5"},{x:"0",y:"h*0.5"}],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w-Math.min(w/6,30)",y:"Math.min(h/6,30)"},{action:"line",x:"Math.min(w/6,30)",y:"Math.min(h/6,30)"},{action:"line",x:"Math.min(w/6,30)",y:"h-Math.min(h/6,30)"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"teardrop",title:"Teardrop",category:"basic",props:{w:70,h:70},path:[{actions:[{action:"move",x:"w",y:"0"},{action:"line",x:"w",y:"h/2"},{action:"curve",x1:"w",y1:"h+h/6",x2:"0",y2:"h+h/6",x:"0",y:"h*0.5"},{action:"quadraticCurve",x1:"0",y1:"0",x:"w/2",y:"0"},{action:"line",x:"w/2",y:"0"},{action:"line",x:"w",y:"0"},{action:"close"}]}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/epc.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/epc.js
                                                  new file mode 100644
                                                  index 00000000..5ce4220d
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/epc.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"epc",text:"EPC Shape",dataAttributes:[{name:"No.",type:"number",value:"",category:"default"},{name:"Name",type:"string",value:"",category:"default"},{name:"Owner",type:"string",value:"",category:"default"},{name:"Link",type:"link",value:"",category:"default"},{name:"Memo",type:"string",value:"",category:"default"},{name:"Cost",type:"number",value:"",category:"default"},{name:"Time",type:"number",value:"",category:"default"},{name:"Manner",type:"list",value:"",category:"default"},{name:"Department",type:"string",value:"",category:"default"},{name:"Input",type:"string",value:"",category:"default"},{name:"Output",type:"string",value:"",category:"default"},{name:"Risk",type:"string",value:"",category:"default"},{name:"Remarks",type:"string",value:"",category:"default"}]});Schema.addShape({name:"event",title:"Event",text:"",category:"epc",props:{w:100,h:70},lineStyle:{lineWidth:2,lineColor:"165,8,179"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"232,115,242",endColor:"209,43,224",angle:Math.PI*0.5},textBlock:{x:"Math.min(h/2,w/6)",y:"0",w:"w-Math.min(h/2,w/6)*2",h:"h"},path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h"},{action:"line",x:"Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"h*0.5"},{action:"close"}]}]});Schema.addShape({name:"method",title:"Function",text:"",category:"epc",props:{w:100,h:70},lineStyle:{lineWidth:2,lineColor:"0,100,0"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"0,255,0",endColor:"0,180,0",angle:Math.PI*0.5},path:[{actions:[{action:"move",x:"w*0",y:"5"},{action:"quadraticCurve",x1:"0",y1:"0",x:"5",y:"0"},{action:"line",x:"w-5",y:"0"},{action:"quadraticCurve",x1:"w",y1:"0",x:"w",y:"5"},{action:"line",x:"w",y:"h-5"},{action:"quadraticCurve",x1:"w",y1:"h",x:"w-5",y:"h"},{action:"line",x:"5",y:"h"},{action:"quadraticCurve",x1:"0",y1:"h",x:"0",y:"h-5"},{action:"line",x:"0",y:"5"},{action:"close"}]}]});Schema.addShape({name:"procedure",title:"Procedure",text:"",category:"epc",props:{w:100,h:70},lineStyle:{lineWidth:2,lineColor:"68,170,170"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"239,253,253",endColor:"160,255,255",angle:Math.PI*0.5},textBlock:{x:"0",y:"0",w:"w*0.8",h:"h*0.8"},path:[{actions:[{action:"move",x:"0",y:"4*0.8"},{action:"quadraticCurve",x1:"0",y1:"0",x:"4*0.8",y:"0"},{action:"line",x:"(w-4)*0.8",y:"0"},{action:"quadraticCurve",x1:"w*0.8",y1:"0",x:"w*0.8",y:"4*0.8"},{action:"line",x:"w*0.8",y:"(h-4)*0.8"},{action:"quadraticCurve",x1:"w*0.8",y1:"h*0.8",x:"(w-4)*0.8",y:"h*0.8"},{action:"line",x:"4*0.8",y:"h*0.8"},{action:"quadraticCurve",x1:"0",y1:"h*0.8",x:"0",y:"(h-4)*0.8"},{action:"line",x:"0",y:"4*0.8"},{action:"move",x:"w*0.8",y:"6"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"(w-4)*0.8",y:"h"},{action:"line",x:"w*3/8",y:"h"},{action:"line",x:"w/4",y:"h*0.8"},{action:"line",x:"(w-4)*0.8",y:"h*0.8"},{action:"quadraticCurve",x1:"w*0.8",y1:"h*0.8",x:"w*0.8",y:"(h-4)*0.8"}]}]});Schema.addShape({name:"epcData",title:"Data",text:"",category:"epc",props:{w:100,h:70},lineStyle:{lineWidth:2,lineColor:"11,108,195"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"157,215,237",endColor:"137,157,192",angle:Math.PI*0.5},path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});Schema.addShape({name:"form",title:"Form",text:"",category:"epc",props:{w:100,h:70},lineStyle:{lineWidth:2,lineColor:"11,108,195"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"157,215,237",endColor:"137,157,192",angle:Math.PI*0.5},anchors:[{x:"w*0.5",y:"0"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{x:"0",y:"h*0.5"}],path:[{actions:[{action:"move",x:"0",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"line",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"quadraticCurve",x1:"w*0.75",y1:"h-3*Math.min(Math.min(w,h)/8,w/12)",x:"w*0.5",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"quadraticCurve",x1:"w*0.25",y1:"h+Math.min(Math.min(w,h)/8,w/12)",x:"0",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"close"}]}]});Schema.addShape({name:"forms",title:"Forms",text:"",category:"epc",props:{w:100,h:70},lineStyle:{lineWidth:2,lineColor:"11,108,195"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"157,215,237",endColor:"137,157,192",angle:Math.PI*0.5},textBlock:{x:"0",y:"h*0.2",w:"w*0.8",h:"h*0.8"},anchors:[{x:"w*0.5",y:"h-h/8"},{x:"0",y:"h*0.5"},{x:"w*0.5",y:"0"},{x:"w",y:"h*0.5"}],path:[{actions:[{action:"move",x:"0",y:"h*0.2"},{action:"line",x:"w*0.1",y:"h*0.2"},{action:"line",x:"w*0.1",y:"h*0.1"},{action:"line",x:"w*0.2",y:"h*0.1"},{action:"line",x:"w*0.2",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h*0.7"},{action:"line",x:"w*0.9",y:"h*0.7"},{action:"line",x:"w*0.9",y:"h*0.8"},{action:"line",x:"w*0.8",y:"h*0.8"},{action:"line",x:"w*0.8",y:"h*0.9"},{action:"quadraticCurve",x1:"w*0.75*0.8",y1:"h*0.8",x:"w*0.8*0.5",y:"h*0.9"},{action:"quadraticCurve",x1:"w*0.25*0.8",y1:"h",x:"0",y:"h*0.9"},{action:"line",x:"0",y:"h*0.2"},{action:"move",x:"0",y:"h*0.2"},{action:"line",x:"w*0.8",y:"h*0.2"},{action:"line",x:"w*0.8",y:"h*0.9"},{action:"quadraticCurve",x1:"w*0.75*0.8",y1:"h*0.8",x:"w*0.8*0.5",y:"h*0.9"},{action:"quadraticCurve",x1:"w*0.25*0.8",y1:"h",x:"0",y:"h*0.9"},{action:"line",x:"0",y:"h*0.2"},{action:"move",x:"w*0.1",y:"h*0.2"},{action:"line",x:"w*0.1",y:"h*0.1"},{action:"line",x:"w*0.9",y:"h*0.1"},{action:"line",x:"w*0.9",y:"h*0.8"},{action:"line",x:"w*0.8",y:"h*0.8"},{action:"line",x:"w*0.8",y:"h*0.2"}]}]});Schema.addShape({name:"database",title:"Database",text:"",category:"epc",props:{w:100,h:70},lineStyle:{lineColor:"11,108,195"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"157,215,237",endColor:"137,157,192",angle:Math.PI*0.5},textBlock:{x:"0",y:"h*0.14",w:"w",h:"h-h*0.14"},path:[{actions:[{action:"move",x:"0",y:"h*0.14"},{action:"curve",x1:"0",y1:"-h*0.04",x2:"w",y2:"-h*0.04",x:"w",y:"h*0.14"},{action:"line",x:"w",y:"h*0.86"},{action:"curve",x1:"w",y1:"h*1.04",x2:"0",y2:"h*1.04",x:"0",y:"h*0.86"},{action:"line",x:"0",y:"h*0.14"},{action:"close"}]},{actions:[{action:"move",x:"w",y:"h*0.14"},{action:"curve",x1:"w",y1:"h*0.3",x2:"0",y2:"h*0.3",x:"0",y:"h*0.14"},{action:"curve",x1:"0",y1:"-h*0.04",x2:"w",y2:"-h*0.04",x:"w",y:"h*0.14"},{action:"close"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:"0",y:"h*0.1"},{action:"quadraticCurve",x1:"w*0.5",y1:"-h*0.1",x:"w",y:"h*0.1"},{action:"line",x:"w",y:"h*0.9"},{action:"quadraticCurve",x1:"w*0.5",y1:"h*1.1",x:"0",y:"h*0.9"},{action:"line",x:"0",y:"h*0.1"},{action:"close"}]}]});Schema.addShape({name:"and",title:"And",category:"epc",attribute:{editable:false},props:{w:40,h:40},fillStyle:{color:"238,238,238"},path:[{actions:{ref:"round"}},{actions:[{action:"move",x:"w/2-w*0.15",y:"h/2+h*0.13"},{action:"line",x:"w*0.5",y:"h/2-h*0.15"},{action:"line",x:"w/2+w*0.15",y:"h/2+h*0.13"},{action:"line",x:"w*0.5",y:"h/2-h*0.15"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"or",title:"OR",category:"epc",attribute:{editable:false},props:{w:40,h:40},fillStyle:{color:"238,238,238"},path:[{actions:{ref:"round"}},{actions:[{action:"move",x:"w/2-w*0.15",y:"h/2-h*0.13"},{action:"line",x:"w*0.5",y:"h/2+h*0.15"},{action:"line",x:"w/2+w*0.15",y:"h/2-h*0.13"},{action:"line",x:"w*0.5",y:"h/2+h*0.15"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"xor",title:"XOR",category:"epc",attribute:{editable:false},props:{w:40,h:40},fillStyle:{color:"238,238,238"},path:[{actions:{ref:"round"}},{actions:[{action:"move",x:"w/2-w*0.15",y:"h/2-h*0.15"},{action:"line",x:"w/2+w*0.15",y:"h/2+h*0.15"},{action:"move",x:"w/2+w*0.15",y:"h/2-h*0.15"},{action:"line",x:"w/2-w*0.15",y:"h/2+h*0.15"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/evc.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/evc.js
                                                  new file mode 100644
                                                  index 00000000..8e50ebff
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/evc.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"evc",text:"EVC Shape",dataAttributes:[{name:"No.",type:"number",value:"",category:"default"},{name:"Name",type:"string",value:"",category:"default"},{name:"Owner",type:"string",value:"",category:"default"},{name:"Link",type:"link",value:"",category:"default"},{name:"Memo",type:"string",value:"",category:"default"},{name:"Cost",type:"number",value:"",category:"default"},{name:"Time",type:"number",value:"",category:"default"},{name:"Manner",type:"list",value:"",category:"default"},{name:"Department",type:"string",value:"",category:"default"},{name:"Input",type:"string",value:"",category:"default"},{name:"Output",type:"string",value:"",category:"default"},{name:"Risk",type:"string",value:"",category:"default"},{name:"Remarks",type:"string",value:"",category:"default"}]});Schema.addShape({name:"valueChain1",title:"Value Chain1",text:"",category:"evc",props:{w:150,h:70},textBlock:{x:"Math.min(h/2,w/6)",y:"0",w:"w-Math.min(h/2,w/6)*2",h:"h"},anchors:[{x:"w*0.5",y:"0"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h"},{x:"Math.min(h/2,w/6)",y:"h*0.5"}],path:[{actions:[{action:"move",x:"Math.min(h/2,w/6)",y:"h*0.5"},{action:"line",x:"0",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"Math.min(h/2,w/6)",y:"h*0.5"},{action:"close"}]}]});Schema.addShape({name:"valueChain2",title:"Value Chain2",text:"",category:"evc",props:{w:150,h:70},textBlock:{x:"Math.min(h/2,w/6)",y:"0",w:"w-Math.min(h/2,w/6)*2",h:"h"},anchors:[{x:"w*0.5",y:"0"},{x:"w-Math.min(h/2,w/6)",y:"h*0.5"},{x:"w*0.5",y:"h"},{x:"0",y:"h*0.5"}],path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h*0.5"},{action:"line",x:"w",y:"h"},{action:"line",x:"Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"h*0.5"},{action:"close"}]}]});Schema.addShape({name:"valueChain3",title:"Value Chain3",text:"",category:"evc",props:{w:150,h:70},path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});Schema.addShape({name:"valueChain4",title:"Value Chain4",text:"",category:"evc",props:{w:150,h:70},path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"h*0.5"},{action:"close"}]}]});Schema.addShape({name:"valueChain5",title:"Value Chain5",text:"",category:"evc",props:{w:150,h:70},textBlock:{x:"0",y:"Math.min(h/2,w/6)",w:"w",h:"h-Math.min(h/2,w/6)"},path:[{actions:[{action:"move",x:"w*0.5",y:"0"},{action:"line",x:"w",y:"Math.min(h/2,w/6)"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"Math.min(h/2,w/6)"},{action:"line",x:"w*0.5",y:"0"},{action:"close"}]}]});Schema.addShape({name:"valueChain6",title:"Value Chain6",text:"",category:"evc",props:{w:150,h:70},textBlock:{x:"0",y:"0",w:"w",h:"h-Math.min(h/2,w/6)"},path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h-Math.min(h/2,w/6)"},{action:"line",x:"w*0.5",y:"h"},{action:"line",x:"0",y:"h-Math.min(h/2,w/6)"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/flow.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/flow.js
                                                  new file mode 100644
                                                  index 00000000..9e7114c3
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/flow.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"flow",text:"Flow",dataAttributes:[{name:"No.",type:"number",value:"",category:"default"},{name:"Name",type:"string",value:"",category:"default"},{name:"Owner",type:"string",value:"",category:"default"},{name:"Link",type:"link",value:"",category:"default"},{name:"Memo",type:"string",value:"",category:"default"},{name:"Cost",type:"number",value:"",category:"default"},{name:"Time",type:"number",value:"",category:"default"},{name:"Manner",type:"list",value:"",category:"default"},{name:"Department",type:"string",value:"",category:"default"},{name:"Input",type:"string",value:"",category:"default"},{name:"Output",type:"string",value:"",category:"default"},{name:"Risk",type:"string",value:"",category:"default"},{name:"Remarks",type:"string",value:"",category:"default"}]});Schema.addShape({name:"process",title:"Process",text:"",category:"flow",props:{w:100,h:70},path:[{actions:{ref:"rectangle"}}]});Schema.addShape({name:"decision",title:"Decision",text:"",category:"flow",props:{w:90,h:70},path:[{actions:[{action:"move",x:"0",y:"h/2"},{action:"line",x:"w/2",y:"0"},{action:"line",x:"w",y:"h/2"},{action:"line",x:"w/2",y:"h"},{action:"line",x:"0",y:"h/2"},{action:"close"}]}]});Schema.addShape({name:"terminator",title:"Terminator",text:"",category:"flow",props:{w:100,h:50},path:[{actions:[{action:"move",x:"Math.min(w,h)/3",y:"0"},{action:"line",x:"w-Math.min(w,h)/3",y:"0"},{action:"curve",x1:"w+Math.min(w,h)/3/3",y1:"0",x2:"w+Math.min(w,h)/3/3",y2:"h",x:"w-Math.min(w,h)/3",y:"h"},{action:"line",x:"Math.min(w,h)/3",y:"h"},{action:"curve",x1:"-Math.min(w,h)/3/3",y1:"h",x2:"-Math.min(w,h)/3/3",y2:"0",x:"Math.min(w,h)/3",y:"0"},{action:"close"}]}]});Schema.addShape({name:"document",title:"Document",text:"",category:"flow",props:{w:100,h:70},anchors:[{x:"w*0.5",y:"0"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h-Math.min(h/8,w/12)"},{x:"0",y:"h*0.5"}],textBlock:{x:"0",y:"0",w:"w",h:"h*0.9"},path:[{actions:[{action:"move",x:"0",y:"h-Math.min(h/8,w/12)"},{action:"line",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h-Math.min(h/8,w/12)"},{action:"quadraticCurve",x1:"w*0.75",y1:"h-3*Math.min(h/8,w/12)",x:"w*0.5",y:"h-Math.min(h/8,w/12)"},{action:"quadraticCurve",x1:"w*0.25",y1:"h+Math.min(h/8,w/12)",x:"0",y:"h-Math.min(h/8,w/12)"},{action:"close"}]}]});Schema.addShape({name:"data",title:"Data",text:"",category:"flow",props:{w:100,h:70},anchors:[{x:"w*0.5",y:"0"},{x:"w-Math.min(h/3,w/3)/2",y:"h*0.5"},{x:"w*0.5",y:"h"},{x:"Math.min(h/3,w/3)/2",y:"h*0.5"}],textBlock:{x:"w*0.15",y:"0",w:"w*0.7",h:"h"},path:[{actions:[{action:"move",x:"Math.min(h/3,w/3)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w-Math.min(h/3,w/3)",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"Math.min(h/3,w/3)",y:"0"},{action:"close"}]}]});Schema.addShape({name:"predefinedProcess",title:"Predefined Process",text:"",category:"flow",props:{w:100,h:70},textBlock:{x:"Math.min(w/6,20)",y:"0",w:"w-Math.min(w/6,20)*2",h:"h"},path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"},{action:"move",x:"Math.min(w/6,20)",y:"0"},{action:"line",x:"Math.min(w/6,20)",y:"h"},{action:"move",x:"w- Math.min(w/6,20)",y:"0"},{action:"line",x:"w- Math.min(w/6,20)",y:"h"}]}]});Schema.addShape({name:"storedData",title:"Stored data",text:"",category:"flow",props:{w:100,h:70},anchors:[{x:"w*0.5",y:"0"},{x:"w-Math.min(w/8,h/8)",y:"h*0.5"},{x:"w*0.5",y:"h"},{x:"0",y:"h*0.5"}],textBlock:{x:"w*0.1",y:"0",w:"w*0.75",h:"h"},path:[{actions:[{action:"move",x:"w/6",y:"0"},{action:"line",x:"w",y:"0"},{action:"curve",x1:"w-w/6",y1:"0",x2:"w-w/6",y2:"h",x:"w",y:"h"},{action:"line",x:"w/6",y:"h"},{action:"curve",x1:"-w/17",y1:"h",x2:"-w/17",y2:"0",x:"w/7",y:"0"},{action:"close"}]}]});Schema.addShape({name:"internalStorage",title:"Internal storage",text:"",category:"flow",props:{w:100,h:70},textBlock:{x:"Math.min(w/6,20)",y:"Math.min(h/5,20)",w:"w - Math.min(w/6,20)",h:"h- Math.min(h/5,20)"},path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"},{action:"move",x:"Math.min(w/6,20)",y:"0"},{action:"line",x:"Math.min(w/6,20)",y:"h"},{action:"move",x:"0",y:"Math.min(h/5,20)"},{action:"line",x:"w",y:"Math.min(h/5,20)"}]}]});Schema.addShape({name:"sequentialData",title:"Sequential data",text:"",category:"flow",props:{w:70,h:70},textBlock:{x:"w*0.1",y:"h*0.2",w:"w*0.8",h:"h*0.6"},path:[{actions:[{action:"move",x:"w/2",y:"h"},{action:"curve",x1:"w/2-w*2/3",y1:"h",x2:"w/2-w*2/3",y2:"0",x:"w/2",y:"0"},{action:"curve",x1:"w/2+w*2/3",y1:"0",x2:"w/2+w*2/3",y2:"h",x:"w/2",y:"h"},{action:"line",x:"w",y:"h"},{action:"close"}]}]});Schema.addShape({name:"directData",title:"Direct data",text:"",category:"flow",props:{w:100,h:70},textBlock:{x:"0",y:"0",w:"w*0.8",h:"h"},path:[{actions:[{action:"move",x:"w*0.15",y:"0"},{action:"line",x:"w-h/6",y:"0"},{action:"curve",x1:"w+h/22",y1:"0",x2:"w+h/22",y2:"h",x:"w-h/6",y:"h"},{action:"line",x:"w*0.15",y:"h"},{action:"curve",x1:"-w*0.05",y1:"h",x2:"-w*0.05",y2:"0",x:"w*0.15",y:"0"},{action:"close"},{action:"move",x:"w-h/6",y:"0"},{action:"curve",x1:"w-h/8*3",y1:"0",x2:"w-h/8*3",y2:"h",x:"w-h/6",y:"h"},{action:"curve",x1:"w-h/8*3",y1:"h",x2:"w-h/8*3",y2:"0",x:"w-h/6",y:"0"}]}]});Schema.addShape({name:"manualInput",title:"Manual Input",text:"",category:"flow",props:{w:100,h:70},anchors:[{x:"0",y:"h*0.5"},{x:"w*0.5",y:"Math.min(h/2,w/6)/2"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h"}],textBlock:{x:"0",y:"h*0.1",w:"w",h:"h*0.9"},path:[{actions:[{action:"move",x:"0",y:"Math.min(h/2,w/6)"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"Math.min(h/2,w/6)"},{action:"close"}]}]});Schema.addShape({name:"card",title:"Card",text:"",category:"flow",props:{w:100,h:70},path:[{actions:[{action:"move",x:"0",y:"Math.min(h/2,w/4)"},{action:"line",x:"Math.min(h/2,w/4)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"Math.min(h/2,w/4)"},{action:"close"}]}]});Schema.addShape({name:"paperTape",title:"Paper Tape",text:"",category:"flow",props:{w:100,h:70},textBlock:{x:"0",y:"h*0.1",w:"w",h:"h*0.8"},anchors:[{x:"w*0.5",y:"Math.min(Math.min(w,h)/8,w/12)"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{x:"0",y:"h*0.5"}],path:[{actions:[{action:"move",x:"0",y:"Math.min(Math.min(w,h)/8,w/12)"},{action:"quadraticCurve",x1:"w*0.25",y1:"3*Math.min(Math.min(w,h)/8,w/12)",x:"w*0.5",y:"Math.min(Math.min(w,h)/8,w/12)"},{action:"quadraticCurve",x1:"w*0.75",y1:"-Math.min(Math.min(w,h)/8,w/12)",x:"w",y:"Math.min(Math.min(w,h)/8,w/12)"},{action:"line",x:"w",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"quadraticCurve",x1:"w*0.75",y1:"h-3*Math.min(Math.min(w,h)/8,w/12)",x:"w*0.5",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"quadraticCurve",x1:"w*0.25",y1:"h+Math.min(Math.min(w,h)/8,w/12)",x:"0",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"line",x:"0",y:"Math.min(Math.min(w,h)/8,w/12)"},{action:"close"}]}]});Schema.addShape({name:"display",title:"Display",text:"",category:"flow",props:{w:100,h:70},path:[{actions:[{action:"move",x:"w-w/6",y:"0"},{action:"line",x:"w/6",y:"0"},{action:"line",x:"0",y:"h/2"},{action:"line",x:"w/6",y:"h"},{action:"line",x:"w-w/6",y:"h"},{action:"quadraticCurve",x1:"w",y1:"h",x:"w",y:"h*0.5"},{action:"quadraticCurve",x1:"w",y1:"0",x:"w-w/6",y:"0"},{action:"close"}]}]});Schema.addShape({name:"manualOperation",title:"Manual Operation",text:"",category:"flow",props:{w:100,h:70},textBlock:{x:"w*0.1",y:"0",w:"w*0.8",h:"h"},anchors:[{x:"w*0.5",y:"0"},{x:"w-Math.min(h/2,w/6)/2",y:"h*0.5"},{x:"w*0.5",y:"h"},{x:"Math.min(h/2,w/6)/2",y:"h*0.5"}],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h"},{action:"line",x:"Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});Schema.addShape({name:"preparation",title:"Preparation",text:"",category:"flow",props:{w:100,h:70},path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"h/2"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h"},{action:"line",x:"Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"h/2"},{action:"close"}]}]});Schema.addShape({name:"parallelMode",title:"Parallel Mode",text:"",category:"flow",props:{w:100,h:70},anchors:[{x:"w*0.5",y:"0"},{x:"w*0.5",y:"0"},{x:"w*0.5",y:"h"},{x:"w*0.5",y:"h"}],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"0",y:"0"},{action:"move",x:"0",y:"h"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"close"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});Schema.addShape({name:"loopLimit",title:"LoopLimit",text:"",category:"flow",props:{w:100,h:70},path:[{actions:[{action:"move",x:"0",y:"Math.min(h/2,w/6)"},{action:"line",x:"Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"Math.min(h/2,w/6)"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"Math.min(h/2,w/6)"},{action:"close"}]}]});Schema.addShape({name:"onPageReference",title:"On-Page Reference",text:"",category:"flow",props:{w:70,h:70},fontStyle:{size:8},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"offPageReference",title:"Off-Page Reference",text:"",category:"flow",props:{w:70,h:60},textBlock:{x:"0",y:"0",w:"w",h:"h-Math.min(h,w)/3"},path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h-Math.min(h,w)/3"},{action:"line",x:"w*0.5",y:"h"},{action:"line",x:"0",y:"h-Math.min(h,w)/3"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});Schema.addShape({name:"annotation",title:"Annotation",text:"",category:"flow",props:{w:100,h:70},anchors:[{x:"0",y:"h*0.5"},{x:"0",y:"h*0.5"},{x:"0",y:"h*0.5"},{x:"0",y:"h*0.5"}],path:[{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"w/6",y:"0"},{action:"line",x:"0",y:"0"},{action:"line",x:"0",y:"h"},{action:"line",x:"w/6",y:"h"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"close"},]}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/org.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/org.js
                                                  new file mode 100644
                                                  index 00000000..876c9dee
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/org.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"organization",text:"Organization Shape",dataAttributes:[{name:"No.",type:"number",value:"",category:"default"},{name:"Name",type:"string",value:"",category:"default"},{name:"Owner",type:"string",value:"",category:"default"},{name:"Link",type:"link",value:"",category:"default"},{name:"Memo",type:"string",value:"",category:"default"},{name:"Cost",type:"number",value:"",category:"default"},{name:"Time",type:"number",value:"",category:"default"},{name:"Manner",type:"list",value:"",category:"default"},{name:"Department",type:"string",value:"",category:"default"},{name:"Input",type:"string",value:"",category:"default"},{name:"Output",type:"string",value:"",category:"default"},{name:"Risk",type:"string",value:"",category:"default"},{name:"Remarks",type:"string",value:"",category:"default"}]});Schema.addShape({name:"organization",title:"Organization",text:"",category:"organization",props:{w:120,h:70},lineStyle:{lineWidth:2,lineColor:"220,87,18"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"245,236,186",endColor:"244,208,0",angle:Math.PI*0.5},textBlock:{x:"w*0.15",y:"h*0.19",w:"w*0.8",h:"h*0.62"},path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"curve",x1:"0",y1:"-h/6",x2:"w",y2:"-h/6",x:"w",y:"h*0.5"},{action:"curve",x1:"w",y1:"h+h/6",x2:"0",y2:"h+h/6",x:"0",y:"h*0.5"},{action:"move",x:"w*0.15",y:"h*0.13"},{action:"line",x:"w*0.15",y:"h*0.87"}]}]});Schema.addShape({name:"role",title:"Role",text:"",category:"organization",props:{w:120,h:70},lineStyle:{lineWidth:2,lineColor:"220,87,18"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"245,236,186",endColor:"244,208,0",angle:Math.PI*0.5},textBlock:{x:"w*0.14",y:"0",w:"w*0.86",h:"h"},path:[{actions:{ref:"rectangle"}},{actions:[{action:"move",x:"w/6",y:"0"},{action:"line",x:"w/6",y:"h"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"employee",title:"Employee",text:"",category:"organization",props:{w:120,h:70},lineStyle:{lineWidth:2,lineColor:"220,87,18"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"245,236,186",endColor:"244,208,0",angle:Math.PI*0.5},path:[{actions:{ref:"rectangle"}}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/venn.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/venn.js
                                                  new file mode 100644
                                                  index 00000000..f5e98210
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/venn.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"venn",text:"Venn",dataAttributes:[{name:"No.",type:"number",value:"",category:"default"},{name:"Name",type:"string",value:"",category:"default"},{name:"Owner",type:"string",value:"",category:"default"},{name:"Link",type:"link",value:"",category:"default"},{name:"Memo",type:"string",value:"",category:"default"}]});Schema.addShape({name:"greenGradientVennCircle",title:"Green Gradient Venn",text:"",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.35},lineStyle:{lineWidth:0,lineColor:"0,255,0",lineStyle:"none"},fillStyle:{type:"gradient",gradientType:"radial",beginColor:"255,255,255",endColor:"0,255,0",radius:0.6},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"redGradientVennCircle",title:"Red Gradient Venn",text:"",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.35},lineStyle:{lineWidth:0,lineColor:"255,0,0",lineStyle:"none"},fillStyle:{type:"gradient",gradientType:"radial",beginColor:"255,255,255",endColor:"255,0,0",radius:0.6},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"blueGradientVennCircle",title:"Blue Gradient Venn",text:"",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.35},lineStyle:{lineWidth:0,lineColor:"0,0,255",lineStyle:"none"},fillStyle:{type:"gradient",gradientType:"radial",beginColor:"255,255,255",endColor:"0,0,255",radius:0.6},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"greenVenn",title:"Green Venn",text:"",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.5},lineStyle:{lineWidth:0,lineColor:"160,191,124",lineStyle:"none"},fillStyle:{color:"160,191,124"},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"redVenn",title:"Red Venn",text:"",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.5},lineStyle:{lineWidth:0,lineColor:"247,68,97",lineStyle:"none"},fillStyle:{color:"247,68,97"},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"blueVenn",title:"Blue Venn",text:"",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.5},lineStyle:{lineWidth:0,lineColor:"36,118,192",lineStyle:"none"},fillStyle:{color:"36,118,192"},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"greenVennCircle",title:"Green Venn Circle",text:"",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.5},lineStyle:{lineWidth:2,lineColor:"121,148,90"},fillStyle:{color:"160,191,124"},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"redVennCircle",title:"Red Venn Circle",text:"",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.5},lineStyle:{lineWidth:2,lineColor:"166,70,86"},fillStyle:{color:"247,68,97"},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"blueVennCircle",title:"Blue Venn Circle",text:"",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.5},lineStyle:{lineWidth:2,lineColor:"41,102,157"},fillStyle:{color:"36,118,192"},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"blackVennCircle",title:"Black Venn Circle",text:"",category:"venn",props:{w:200,h:200},lineStyle:{lineWidth:2,lineColor:"48,50,51"},fillStyle:{type:"none"},path:[{actions:{ref:"round"}}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/visio.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/visio.js
                                                  new file mode 100644
                                                  index 00000000..df5d34d0
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bak/visio.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"visio",text:"Visio Shape",dataAttributes:[]});Schema.addShape({name:"ovalCallout",title:"Oval Callout",text:"Oval Callout",category:"visio",props:{w:120,h:80},anchors:[],textBlock:{x:"w*0.1",y:"0",w:"w*0.8",h:"h-30"},path:[{actions:[{action:"move",x:"w*0.5",y:"h-30"},{action:"line",x:"w*0.25",y:"h"}]},{actions:[{action:"move",x:"0",y:"(h-30)/2"},{action:"curve",x1:"0",y1:"-(h-30)/6",x2:"w",y2:"-(h-30)/6",x:"w",y:"(h-30)/2"},{action:"curve",x1:"w",y1:"(h-30)*(7/6)",x2:"0",y2:"(h-30)*(7/6)",x:"0",y:"(h-30)/2"},{action:"close"}]}]});Schema.addShape({name:"boxCallout",title:"Box Callout",text:"Box Callout",category:"visio",props:{w:120,h:80},anchors:[],textBlock:{x:"w*0.1",y:"0",w:"w*0.8",h:"h-30"},path:[{actions:[{action:"move",x:"w*0.5",y:"h-30"},{action:"line",x:"w*0.25",y:"h"}]},{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h-30"},{action:"line",x:"0",y:"h-30"},{action:"close"}]}]});Schema.addShape({name:"bubblePair",title:"Bubble Pair",text:"Bubble Pair",category:"visio",props:{w:120,h:80},anchors:[],textBlock:{x:"w*0.1",y:"0",w:"w*0.8",h:"h-30"},path:[{actions:[{action:"move",x:"w*0.5",y:"h-30"},{action:"line",x:"w*0.25",y:"h"}]},{actions:[{action:"move",x:"Math.min(w,h-30)/3",y:"0"},{action:"line",x:"w-Math.min(w,h-30)/3",y:"0"},{action:"curve",x1:"w+Math.min(w,h-30)/3/3",y1:"0",x2:"w+Math.min(w,h-30)/3/3",y2:"h-30",x:"w-Math.min(w,h-30)/3",y:"h-30"},{action:"line",x:"Math.min(w,h-30)/3",y:"h-30"},{action:"curve",x1:"-Math.min(w,h-30)/3/3",y1:"h-30",x2:"-Math.min(w,h-30)/3/3",y2:"0",x:"Math.min(w,h-30)/3",y:"0"},{action:"close"}]}]});Schema.addShape({name:"brace",title:"Brace",text:"Brace",category:"visio",attribute:{linkable:false},props:{w:110,h:70},fillStyle:{type:"none"},textBlock:{x:"w*0.1*02",y:"0",w:"w*0.8",h:"h"},anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],path:[{actions:[{action:"move",x:"Math.min(w*0.2,18)",y:"0"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"0",x:"Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"0",y:"h*0.5"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h",x:"Math.min(w*0.2,18)",y:"h"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"reverseBrace",title:"Reverse Brace",text:"Reverse Brace",category:"visio",attribute:{linkable:false},props:{w:110,h:70},fillStyle:{type:"none"},textBlock:{x:"w*0.1",y:"0",w:"w*0.8",h:"h"},anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],path:[{actions:[{action:"move",x:"w-Math.min(w*0.2,18)",y:"h"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h",x:"w-Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w",y:"h*0.5"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w-Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"0",x:"w-Math.min(w*0.2,18)",y:"0"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"parenthesis",title:"Parenthesis",text:"Parenthesis",category:"visio",attribute:{linkable:false},props:{w:110,h:70},fillStyle:{type:"none"},anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],textBlock:{x:"w*.1",y:"0",w:"w*0.8",h:"h"},path:[{actions:[{action:"move",x:"w*0.1",y:"0"},{action:"line",x:"0",y:"h*0.1"},{action:"line",x:"0",y:"h*0.9"},{action:"line",x:"w*0.1",y:"h"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"reverseBracket",title:"Reverse Bracket",text:"Reverse Bracket",category:"visio",attribute:{linkable:false},props:{w:110,h:70},fillStyle:{type:"none"},anchors:[{x:"w",y:"h*0.5"}],textBlock:{x:"w*.1",y:"0",w:"w*0.8",h:"h"},path:[{actions:[{action:"move",x:"w-w*0.1",y:"h"},{action:"line",x:"w",y:"h*0.9"},{action:"line",x:"w",y:"h*0.1"},{action:"line",x:"w-w*0.1",y:"0"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"wordBollon",title:"Word Bollon",text:"Word Bollon",category:"visio",props:{w:120,h:75},textBlock:{x:"w*0.1",y:"0",w:"w*0.8",h:"h*(2/3)"},path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h-20 "},{action:"line",x:"w/2",y:"h-20 "},{action:"line",x:"w/2-20",y:"h"},{action:"line",x:"w/2-20",y:"h-20"},{action:"line",x:"0",y:"h-20"},{action:"close"}]}]});Schema.addShape({name:"callout",title:"Callout",text:"Callout",category:"visio",dataAttributes:[],props:{w:100,h:70},anchors:[],textBlock:{x:"40",y:"0",w:"(w-30)*0.8",h:"h"},path:[{actions:[{action:"move",x:"30",y:"h/2"},{action:"line",x:"0",y:"h"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"40",y:"0"},{action:"line",x:"30",y:"0"},{action:"line",x:"30",y:"h"},{action:"line",x:"40",y:"h"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"rectangle"}}]});Schema.addShape({name:"calloutPair",title:"Callout Pair",text:"Callout Pair",category:"visio",dataAttributes:[],props:{w:100,h:70},anchors:[],textBlock:{x:"40",y:"0",w:"(w-30)*0.8",h:"h"},path:[{actions:[{action:"move",x:"30",y:"h/2"},{action:"line",x:"0",y:"h"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"40",y:"0"},{action:"line",x:"30",y:"0"},{action:"line",x:"30",y:"h"},{action:"line",x:"40",y:"h"},{action:"move",x:"w-10",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"w-10",y:"h"},]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"rectangle"}}]});Schema.addShape({name:"lineCallout",title:"Line Callout",text:"Line Callout",category:"visio",dataAttributes:[],props:{w:100,h:70},anchors:[],textBlock:{x:"40",y:"0",w:"(w-30)*0.8",h:"h"},path:[{actions:[{action:"move",x:"30",y:"h/2"},{action:"line",x:"0",y:"h"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"30",y:"0"},{action:"line",x:"30",y:"h"},]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"rectangle"}}]});Schema.addShape({name:"linePair",title:"Line Pair",text:"Line Pair",category:"visio",dataAttributes:[],props:{w:100,h:70},anchors:[],textBlock:{x:"30",y:"0",w:"(w-60)*0.8",h:"h"},path:[{actions:[{action:"move",x:"30",y:"h/2"},{action:"line",x:"0",y:"h"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"30",y:"0"},{action:"line",x:"30",y:"h"},{action:"move",x:"w-30",y:"0"},{action:"line",x:"w-30",y:"h"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"rectangle"}}]});Schema.addShape({name:"bendCallout",title:"Bend Callout",text:"Bend Callout",category:"visio",dataAttributes:[],props:{w:100,h:70},anchors:[],textBlock:{x:"40",y:"0",w:"(w-30)*0.8",h:"h"},path:[{actions:[{action:"move",x:"30",y:"h/2"},{action:"line",x:"15",y:"h/2"},{action:"line",x:"0",y:"h"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"30",y:"0"},{action:"line",x:"30",y:"h"},]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"rectangle"}}]});Schema.addShape({name:"triangleCallout",title:"Triangle Callout",text:"Triangle Callout",category:"visio",dataAttributes:[],props:{w:100,h:70},anchors:[],textBlock:{x:"w*0.1",y:"0",w:"w*0.8",h:"h-10"},path:[{actions:[{action:"move",x:"0",y:"h-10"},{action:"line",x:"w",y:"h-10"},{action:"move",x:"w/2-10",y:"h-10"},{action:"line",x:"w/2",y:"h"},{action:"line",x:"w/2+10",y:"h-10"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"rectangle"}}]});Schema.addShape({name:"parenthesisPair",title:"Parenthesis Pair",text:"Parenthesis Pair",category:"visio",dataAttributes:[],props:{w:100,h:70},anchors:[],textBlock:{x:"w*0.1",y:"0",w:"w-2*(w*0.1)",h:"h"},path:[{actions:[{action:"move",x:"w*0.1",y:"0"},{action:"curve",x1:"0",y1:"h*(1/3)",x2:"0",y2:"h*(2/3)",x:"w*0.1",y:"h"},{action:"move",x:"w*0.9",y:"0"},{action:"curve",x1:"w",y1:"h*(1/3)",x2:"w",y2:"h*(2/3)",x:"w*0.9",y:"h"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"rectangle"}}]});Schema.addShape({name:"reverseParenthesis",title:"Reverse Parenthesis",text:"Reverse Parenthesis",category:"visio",dataAttributes:[],props:{w:100,h:70},anchors:[],textBlock:{x:"w*0.1",y:"0",w:"w-2*(w*0.1)",h:"h"},path:[{actions:[{action:"move",x:"w*0.9",y:"0"},{action:"curve",x1:"w",y1:"h*(1/3)",x2:"w",y2:"h*(2/3)",x:"w*0.9",y:"h"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"rectangle"}}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/basic.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/basic.js
                                                  new file mode 100644
                                                  index 00000000..db6cfde5
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/basic.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"basic",text:"基础图形",dataAttributes:[{name:"序号",type:"number",value:"",category:"default"},{name:"名称",type:"string",value:"",category:"default"},{name:"所有者",type:"string",value:"",category:"default"},{name:"连接",type:"link",value:"",category:"default"},{name:"便笺",type:"string",value:"",category:"default"}]});Schema.addShape({name:"text",title:"文本",category:"basic",attribute:{linkable:false},props:{w:160,h:40},anchors:[],textBlock:[{position:{x:0,y:0,w:"w",h:"h"},text:"文本"}],path:[{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}],drawIcon:function(e,h){var f=0;var g=-10;h=h+20;return[{lineStyle:{lineWidth:2},fillStyle:{type:"solid",color:"50, 50, 50"},actions:[{action:"move",x:f,y:g},{action:"line",x:e,y:g},{action:"line",x:e,y:g+h*0.2},{action:"line",x:e*0.9,y:g+h*0.12},{action:"line",x:e*0.55,y:g+h*0.12},{action:"line",x:e*0.55,y:g+h*0.85},{action:"line",x:e*0.63,y:g+h},{action:"line",x:e*0.37,y:g+h},{action:"line",x:e*0.45,y:g+h*0.85},{action:"line",x:e*0.45,y:g+h*0.12},{action:"line",x:e*0.1,y:g+h*0.12},{action:"line",x:0,y:g+h*0.2},{action:"close"}]}]}});Schema.addShape({name:"note",title:"备注",category:"basic",attribute:{linkable:false},props:{w:80,h:100},anchors:[],textBlock:[{position:{x:"w*0.1",y:"h*0.1",w:"w*0.8",h:"h*0.8"}}],fillStyle:{color:"255, 255, 170"},path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w-16",y:"0"},{action:"line",x:"w",y:"16"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]},{fillStyle:{type:"solid",color:"r-50,g-50,b-50"},actions:[{action:"move",x:"w-16",y:"0"},{action:"line",x:"w-16",y:"16"},{action:"line",x:"w",y:"16"},{action:"close"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w-16",y:"0"},{action:"line",x:"w",y:"16"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]}],drawIcon:function(d,c){return[{actions:[{action:"move",x:0,y:0},{action:"line",x:d*0.6,y:0},{action:"line",x:d,y:c*0.24},{action:"line",x:d,y:c},{action:"line",x:0,y:c},{action:"line",x:0,y:0},{action:"close"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:d*0.6,y:0.07},{action:"line",x:d*0.6,y:c*0.24},{action:"line",x:d*0.93,y:c*0.24}]}]}});Schema.addShape({name:"image",title:"Image",attribute:{linkable:false,visible:false},category:"basic",textBlock:[],props:{w:98,h:72},path:[{actions:{ref:"rectangle"}}]});Schema.addShape({name:"round",title:"圆形",category:"basic",props:{w:70,h:70},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"rectangle",title:"矩形",category:"basic",props:{w:100,h:70},path:[{actions:{ref:"rectangle"}}]});Schema.addShape({name:"roundRectangle",title:"圆角矩形",category:"basic",props:{w:100,h:70},path:[{actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"triangle",title:"三角形",category:"basic",props:{w:80,h:70},textBlock:[{position:{x:"10",y:"h*0.25",w:"w-20",h:"h*0.75"}}],anchors:[{x:"w/2",y:"0"},{x:"w/2",y:"h"},{x:"w*0.25",y:"h/2"},{x:"w*0.75",y:"h/2"}],path:[{actions:[{action:"move",x:"w/2",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"close"}]}]});Schema.addShape({name:"polygon",title:"五边形",category:"basic",props:{w:74,h:70},textBlock:[{position:{x:"10",y:"h*0.15",w:"w-20",h:"h*0.85"}}],anchors:[{x:"w/2",y:"0"},{x:"w/2",y:"h"},{x:"0",y:"h*0.39"},{x:"w",y:"h*0.39"}],path:[{actions:[{action:"move",x:"w/2",y:"0"},{action:"line",x:"0",y:"h*0.39"},{action:"line",x:"w*0.18",y:"h"},{action:"line",x:"w*0.82",y:"h"},{action:"line",x:"w",y:"h*0.39"},{action:"close"}]}]});Schema.addShape({name:"hexagon",title:"六边形",category:"basic",props:{w:84,h:70},path:[{actions:[{action:"move",x:"Math.min(w,h)*0.21",y:"0"},{action:"line",x:"w-Math.min(w,h)*0.21",y:"0"},{action:"line",x:"w",y:"h * 0.5"},{action:"line",x:"w-Math.min(w,h)*0.21",y:"h"},{action:"line",x:"Math.min(w,h)*0.21",y:"h"},{action:"line",x:"0",y:"h * 0.5"},{action:"line",x:"Math.min(w,h)*0.21",y:"0"},{action:"close"}]}]});Schema.addShape({name:"octagon",title:"八边形",category:"basic",props:{w:70,h:70},textBlock:[{position:{x:"10",y:"10",w:"w-20",h:"h-20"}}],path:[{actions:[{action:"move",x:"Math.min(w,h)*0.29",y:"0"},{action:"line",x:"w-Math.min(w,h)*0.29",y:"0"},{action:"line",x:"w",y:"h*0.29"},{action:"line",x:"w",y:"h*0.71"},{action:"line",x:"w-Math.min(w,h)*0.29",y:"h"},{action:"line",x:"Math.min(w,h)*0.29",y:"h"},{action:"line",x:"0",y:"h*0.71"},{action:"line",x:"0",y:"h*0.29"},{action:"close"}]}]});Schema.addShape({name:"pentagon",title:"五角星",category:"basic",props:{w:70,h:70},textBlock:[{position:{x:"w*0.15",y:"h*0.20",w:"w*0.70",h:"h*0.65"}}],anchors:[{x:"w*0.5",y:"0"},{x:"0",y:"h*0.38"},{x:"w*0.5",y:"h*0.76"},{x:"w",y:"h*0.38"}],path:[{actions:[{action:"move",x:"w*0.62",y:"h*0.38"},{action:"line",x:"w*0.5",y:"0"},{action:"line",x:"w*0.38",y:"h*0.38"},{action:"line",x:"0",y:"h*0.38"},{action:"line",x:"w*0.3",y:"h*0.62"},{action:"line",x:"w*0.18",y:"h"},{action:"line",x:"w*0.5",y:"h*0.76"},{action:"line",x:"w*0.82",y:"h"},{action:"line",x:"w*0.7",y:"h*0.62"},{action:"line",x:"w",y:"h*0.38"},{action:"close"}]}]});Schema.addShape({name:"cross",title:"十字形",category:"basic",props:{w:70,h:70},textBlock:[{position:{x:"0",y:"h*0.5-Math.min(w,h)/8",w:"w",h:"Math.min(w,h)*2/8"}}],path:[{actions:[{action:"move",x:"w*0.5-Math.min(w,h)/8",y:"0"},{action:"line",x:"w*0.5+Math.min(w,h)/8",y:"0"},{action:"line",x:"w*0.5+Math.min(w,h)/8",y:"h*0.5-Math.min(w,h)/8"},{action:"line",x:"w",y:"h*0.5-Math.min(w,h)/8"},{action:"line",x:"w",y:"h*0.5+Math.min(w,h)/8"},{action:"line",x:"w*0.5+Math.min(w,h)/8",y:"h*0.5+Math.min(w,h)/8"},{action:"line",x:"w*0.5+Math.min(w,h)/8",y:"h"},{action:"line",x:"w*0.5-Math.min(w,h)/8",y:"h"},{action:"line",x:"w*0.5-Math.min(w,h)/8",y:"h*0.5+Math.min(w,h)/8"},{action:"line",x:"0",y:"h*0.5+Math.min(w,h)/8"},{action:"line",x:"0",y:"h*0.5-Math.min(w,h)/8"},{action:"line",x:"w*0.5-Math.min(w,h)/8",y:"h*0.5-Math.min(w,h)/8"},{action:"close"}]}]});Schema.addShape({name:"cloud",title:"云",category:"basic",props:{w:90,h:70},textBlock:[{position:{x:"w*0.17",y:"h*0.09",w:"w*0.71",h:"h*0.8"}}],anchors:[{x:"0",y:"h*0.5"},{x:"w*0.19",y:"h*0.9"},{x:"w*0.57",y:"h"},{x:"w*0.962",y:"h*0.8"},{x:"w*0.9543",y:"h*0.23"},{x:"w*0.6",y:"h*0.01"},{x:"w*0.17",y:"h*0.09"}],path:[{actions:[{action:"move",x:"0.12*w",y:"0.7*h"},{action:"curve",x1:"-0.1*w",y1:"0.5*h",x2:"0.04*w",y2:"0.35*h",x:"0.09*w",y:"0.3*h"},{action:"curve",x1:"0.07*w",y1:"0.05*h",x2:"0.32*w",y2:"0.0*h",x:"0.42*w",y:"0.1*h"},{action:"curve",x1:"0.50*w",y1:"-0.05*h",x2:"0.75*w",y2:"0.0*h",x:"0.75*w",y:"0.15*h"},{action:"curve",x1:"0.95*w",y1:"0.1*h",x2:"1.03*w",y2:"0.3*h",x:"0.95*w",y:"0.55*h"},{action:"curve",x1:"1.02*w",y1:"0.75*h",x2:"0.95*w",y2:"1.0*h",x:"0.72*w",y:"0.9*h"},{action:"curve",x1:"0.67*w",y1:"1.03*h",x2:"0.47*w",y2:"1.03*h",x:"0.42*w",y:"0.9*h"},{action:"curve",x1:"0.32*w",y1:"1.0*h",x2:"0.12*w",y2:"0.95*h",x:"0.12*w",y:"0.7*h"},{action:"close"}]}]});Schema.addShape({name:"braces",title:"大括号",category:"basic",attribute:{linkable:false},props:{w:200,h:140},fillStyle:{type:"none"},textBlock:[{position:{x:"w*0.1",y:"0",w:"w*0.8",h:"h"}}],anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],path:[{fillStyle:{type:"none"},actions:[{action:"move",x:"Math.min(w*0.2,18)",y:"0"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"0",x:"Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"0",y:"h*0.5"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h",x:"Math.min(w*0.2,18)",y:"h"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"w-Math.min(w*0.2,18)",y:"h"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h",x:"w-Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w",y:"h*0.5"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w-Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"0",x:"w-Math.min(w*0.2,18)",y:"0"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"parentheses",title:"中括号",category:"basic",attribute:{linkable:false},props:{w:200,h:140},fillStyle:{type:"none"},anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],textBlock:[{position:{x:"w*.1",y:"0",w:"w*0.8",h:"h"}}],path:[{actions:[{action:"move",x:"w*0.1",y:"0"},{action:"line",x:"0",y:"h*0.1"},{action:"line",x:"0",y:"h*0.9"},{action:"line",x:"w*0.1",y:"h"},{action:"move",x:"w-w*0.1",y:"h"},{action:"line",x:"w",y:"h*0.9"},{action:"line",x:"w",y:"h*0.1"},{action:"line",x:"w-w*0.1",y:"0"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"rightBrace",title:"备注",category:"basic",attribute:{linkable:false},props:{w:100,h:140},fontStyle:{textAlign:"left"},fillStyle:{type:"none"},textBlock:[{position:{x:"27",y:"0",w:"w-27",h:"h"}}],anchors:[],path:[{actions:[{action:"move",x:"0",y:"h"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h",x:"Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"22",y:"h*0.5"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"0",x:"0",y:"0"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}],drawIcon:function(d,f){var e=10;return[{actions:[{action:"move",x:e+0,y:f},{action:"quadraticCurve",x1:e+Math.min(d*0.1,9),y1:f,x:e+Math.min(d*0.1,9),y:f-Math.min(f*0.1,9)},{action:"line",x:e+Math.min(d*0.1,9),y:f*0.5+Math.min(f*0.1,9)},{action:"quadraticCurve",x1:e+Math.min(d*0.1,9),y1:f*0.5,x:e+d*0.2,y:f*0.5},{action:"quadraticCurve",x1:e+Math.min(d*0.1,9),y1:f*0.5,x:e+Math.min(d*0.1,9),y:f*0.5-Math.min(f*0.1,9)},{action:"line",x:e+Math.min(d*0.1,9),y:Math.min(f*0.1,9)},{action:"quadraticCurve",x1:e+Math.min(d*0.1,9),y1:0,x:e+0,y:0}]}]}});Schema.addShape({name:"leftBrace",title:"备注",category:"basic",attribute:{linkable:false},props:{w:100,h:140},fontStyle:{textAlign:"right"},fillStyle:{type:"none"},textBlock:[{position:{x:"0",y:"0",w:"w-27",h:"h"}}],anchors:[],path:[{actions:[{action:"move",x:"w",y:"0"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"0",x:"w-Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w-22",y:"h*0.5"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w-Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h",x:"w",y:"h"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}],drawIcon:function(d,f){var e=12;return[{actions:[{action:"move",x:d-e,y:0},{action:"quadraticCurve",x1:d-Math.min(d*0.1,9)-e,y1:0,x:d-Math.min(d*0.1,9)-e,y:Math.min(f*0.1,9)},{action:"line",x:d-Math.min(d*0.1,9)-e,y:f*0.5-Math.min(f*0.1,9)},{action:"quadraticCurve",x1:d-Math.min(d*0.1,9)-e,y1:f*0.5,x:d-d*0.2-e,y:f*0.5},{action:"quadraticCurve",x1:d-Math.min(d*0.1,9)-e,y1:f*0.5,x:d-Math.min(d*0.1,9)-e,y:f*0.5+Math.min(f*0.1,9)},{action:"line",x:d-Math.min(d*0.1,9)-e,y:f-Math.min(f*0.1,9)},{action:"quadraticCurve",x1:d-Math.min(d*0.1,9)-e,y1:f,x:d-e,y:f}]}]}});Schema.addShape({name:"apqc",title:"APQC",category:"basic",props:{w:200,h:150},path:[{actions:[{action:"move",x:"0",y:"h/8"},{action:"quadraticCurve",x1:"w*0.5",y1:"-h/8",x:"w",y:"h/8"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"h/8"},{action:"close"}]}]});Schema.addShape({name:"teardrop",title:"水滴",category:"basic",props:{w:70,h:70},path:[{actions:[{action:"move",x:"w",y:"0"},{action:"line",x:"w",y:"h/2"},{action:"curve",x1:"w",y1:"h+h/6",x2:"0",y2:"h+h/6",x:"0",y:"h*0.5"},{action:"quadraticCurve",x1:"0",y1:"0",x:"w/2",y:"0"},{action:"line",x:"w/2",y:"0"},{action:"line",x:"w",y:"0"},{action:"close"}]}]});Schema.addShape({name:"singleLeftArrow",title:"左箭头",category:"basic",props:{w:90,h:60},anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],textBlock:[{position:{x:"0",y:"h*0.33",w:"w",h:"h*0.34"}}],path:[{actions:[{action:"move",x:"0",y:"h/2"},{action:"line",x:"Math.min(0.5*h,0.45*w)",y:"0"},{action:"line",x:"Math.min(0.5*h,0.45*w)",y:"h*0.33"},{action:"line",x:"w",y:"h*0.33"},{action:"line",x:"w",y:"h*0.67"},{action:"line",x:"Math.min(0.5*h,0.45*w)",y:"h*0.67"},{action:"line",x:"Math.min(0.5*h,0.45*w)",y:"h"},{action:"line",x:"0",y:"h/2"},{action:"close"}]}]});Schema.addShape({name:"singleRightArrow",title:"右箭头",category:"basic",props:{w:90,h:60},anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],textBlock:[{position:{x:"0",y:"h*0.33",w:"w",h:"h*0.34"}}],path:[{actions:[{action:"move",x:"0",y:"h*0.33"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"h*0.33"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"h"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"h*0.67"},{action:"line",x:"0",y:"h*0.67"},{action:"line",x:"0",y:"h*0.33"},{action:"close"}]}]});Schema.addShape({name:"doubleHorizontalArrow",title:"左右箭头",category:"basic",props:{w:90,h:60},anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],textBlock:[{position:{x:"0",y:"h*0.33",w:"w",h:"h*0.34"}}],path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"Math.min(h*0.5,w*0.45)",y:"0"},{action:"line",x:"Math.min(h*0.5,w*0.45)",y:"h*0.33"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"h*0.33"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"h"},{action:"line",x:"w-Math.min(h*0.5,w*0.45)",y:"h*0.67"},{action:"line",x:"Math.min(h*0.5,w*0.45)",y:"h*0.67"},{action:"line",x:"Math.min(h*0.5,w*0.45)",y:"h"},{action:"line",x:"0",y:"h*0.5"},{action:"close"}]}]});Schema.addShape({name:"singleUpArrow",title:"上箭头",category:"basic",props:{w:60,h:90},anchors:[{x:"w*0.5",y:"0"},{x:"w*0.5",y:"h"}],textBlock:[{position:{x:"-w*0.2",y:"h*0.43",w:"w*1.4",h:"h*0.24"}}],path:[{actions:[{action:"move",x:"w*0.5",y:"0"},{action:"line",x:"w",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.67",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.67",y:"h"},{action:"line",x:"w*0.33",y:"h"},{action:"line",x:"w*0.33",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"0",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.5",y:"0"},{action:"close"}]}]});Schema.addShape({name:"singleDownArrow",title:"下箭头",category:"basic",props:{w:60,h:90},anchors:[{x:"w*0.5",y:"0"},{x:"w*0.5",y:"h"}],textBlock:[{position:{x:"-w*0.2",y:"h*0.33",w:"w*1.4",h:"h*0.24"}}],path:[{actions:[{action:"move",x:"w*0.33",y:"0"},{action:"line",x:"w*0.67",y:"0"},{action:"line",x:"w*0.67",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.5",y:"h"},{action:"line",x:"0",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.33",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.33",y:"0"},{action:"close"}]}]});Schema.addShape({name:"doubleVerticalArrow",title:"上下箭头",category:"basic",props:{w:60,h:90},anchors:[{x:"w*0.5",y:"0"},{x:"w*0.5",y:"h"}],textBlock:[{position:{x:"-w*0.2",y:"h*0.38",w:"w*1.4",h:"h*0.24"}}],path:[{actions:[{action:"move",x:"w*0.5",y:"0"},{action:"line",x:"w",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.67",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.67",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.5",y:"h"},{action:"line",x:"0",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.33",y:"h-Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.33",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"0",y:"Math.min(w*0.5,h*0.45)"},{action:"line",x:"w*0.5",y:"0"},{action:"close"}]}]});Schema.addShape({name:"backArrow",title:"左返回箭头",category:"basic",props:{w:70,h:70},anchors:[{x:"w-Math.min(w*0.12,20)",y:"h*0.5"},{x:"0",y:"h*0.5"}],textBlock:[{position:{x:"0",y:"0",w:"w-10",h:"h"}}],path:[{actions:[{action:"move",x:"0",y:"Math.min(Math.min(w,h)*0.4,80)"},{action:"quadraticCurve",x1:"0",y1:"0",x:"Math.min(Math.min(w,h)*0.4,80)",y:"0"},{action:"line",x:"w-Math.min(w*0.12,20)-Math.min(Math.min(w,h)*0.4,80)",y:"0"},{action:"quadraticCurve",x1:"w-Math.min(w*0.12,20)",y1:"0",x:"w-Math.min(w*0.12,20)",y:"Math.min(Math.min(w,h)*0.4,80)"},{action:"line",x:"w-Math.min(w*0.12,20)",y:"h-h*0.1-Math.min(h*0.1,50)"},{action:"line",x:"w",y:"h-h*0.1-Math.min(h*0.1,50)"},{action:"line",x:"w-Math.min(w*0.12,20)-Math.min(Math.min(h,w)*0.25,50)/2",y:"h"},{action:"line",x:"w-Math.min(w*0.12,20)*2 - Math.min(Math.min(h,w)*0.25,50)",y:"h-h*0.1-Math.min(h*0.1,50)"},{action:"line",x:"w-Math.min(w*0.12,20) - Math.min(Math.min(h,w)*0.25,50)",y:"h-h*0.1-Math.min(h*0.1,50)"},{action:"line",x:"w-Math.min(w*0.12,20) - Math.min(Math.min(h,w)*0.25,50)",y:"Math.min(Math.min(h,w)*0.4,80)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.12,20)-Math.min(Math.min(h,w)*0.25,50)",y1:"Math.min(Math.min(h,w)*0.25,50)",x:"w-Math.min(w*0.12,20)-Math.min(Math.min(h,w)*0.25,50)-Math.min(w*0.15,30)",y:"Math.min(Math.min(h,w)*0.25,50)"},{action:"line",x:"Math.min(Math.min(h,w)*0.25,50)+Math.min(w*0.15,30)",y:"Math.min(Math.min(h,w)*0.25,50)"},{action:"quadraticCurve",x1:"Math.min(Math.min(h,w)*0.25,50)",y1:"Math.min(Math.min(h,w)*0.25,50)",x:"Math.min(Math.min(h,w)*0.25,50)",y:"Math.min(Math.min(h,w)*0.4,80)"},{action:"line",x:"Math.min(Math.min(h,w)*0.25,50)",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"Math.min(Math.min(h,w)*0.4,80)"},{action:"close"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"rightBackArrow",title:"右返回箭头",category:"basic",props:{w:70,h:70},anchors:[{x:"Math.min(w*0.12,20)",y:"h*0.5"},{x:"w",y:"h*0.5"}],textBlock:[{position:{x:"10",y:"0",w:"w-10",h:"h"}}],path:[{actions:[{action:"move",x:"w",y:"Math.min(Math.min(w,h)*0.4,80)"},{action:"quadraticCurve",x1:"w",y1:"0",x:"w-Math.min(Math.min(w,h)*0.4,80)",y:"0"},{action:"line",x:"Math.min(w*0.12,20)+Math.min(Math.min(w,h)*0.4,80)",y:"0"},{action:"quadraticCurve",x1:"Math.min(w*0.12,20)",y1:"0",x:"Math.min(w*0.12,20)",y:"Math.min(Math.min(w,h)*0.4,80)"},{action:"line",x:"Math.min(w*0.12,20)",y:"h-h*0.1-Math.min(h*0.1,50)"},{action:"line",x:"0",y:"h-h*0.1-Math.min(h*0.1,50)"},{action:"line",x:"Math.min(w*0.12,20)+Math.min(Math.min(h,w)*0.25,50)/2",y:"h"},{action:"line",x:"Math.min(Math.min(h,w)*0.25,50)+Math.min(w*0.12,20)*2",y:"h-h*0.1-Math.min(h*0.1,50)"},{action:"line",x:"Math.min(Math.min(h,w)*0.25,50)+Math.min(w*0.12,20)",y:"h-h*0.1-Math.min(h*0.1,50)"},{action:"line",x:"Math.min(Math.min(h,w)*0.25,50)+Math.min(w*0.12,20)",y:"Math.min(Math.min(h,w)*0.4,80)"},{action:"quadraticCurve",x1:"Math.min(Math.min(h,w)*0.25,50)+Math.min(w*0.12,20)",y1:"Math.min(Math.min(h,w)*0.25,50)",x:"Math.min(Math.min(h,w)*0.25,50)+Math.min(w*0.12,20)+Math.min(w*0.15,30)",y:"Math.min(Math.min(h,w)*0.25,50)"},{action:"line",x:"w-Math.min(Math.min(h,w)*0.25,50)-Math.min(w*0.15,30)",y:"Math.min(Math.min(h,w)*0.25,50)"},{action:"quadraticCurve",x1:"w-Math.min(Math.min(h,w)*0.25,50)",y1:"Math.min(Math.min(h,w)*0.25,50)",x:"w-Math.min(Math.min(h,w)*0.25,50)",y:"Math.min(Math.min(h,w)*0.4,80)"},{action:"line",x:"w-Math.min(Math.min(h,w)*0.25,50)",y:"h"},{action:"line",x:"w",y:"h"},{action:"line",x:"w",y:"Math.min(Math.min(h,w)*0.4,80)"},{action:"close"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"corner",title:"拐角",category:"basic",props:{w:70,h:70},anchors:[{x:"w*0.5",y:"0"},{x:"w*0.5",y:"0"},{x:"0",y:"h*0.5"},{x:"0",y:"h*0.5"}],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w-Math.min(w/6,30)",y:"Math.min(h/6,30)"},{action:"line",x:"Math.min(w/6,30)",y:"Math.min(h/6,30)"},{action:"line",x:"Math.min(w/6,30)",y:"h-Math.min(h/6,30)"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bpmn.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bpmn.js
                                                  new file mode 100644
                                                  index 00000000..5c6b771c
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/bpmn.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"bpmn",text:"BPMN Shape",dataAttributes:[{name:"Name",type:"string",value:"",category:"default"},{name:"documentation",type:"string",value:"",category:"default"},{name:"AWSProperties",type:"string",value:"",category:"default"},]});Schema.addGlobalCommand("inneround",[{action:"move",x:"3",y:"h*0.5"},{action:"curve",x1:"3",y1:"-h/6+4",x2:"w-3",y2:"-h/6+4",x:"w-3",y:"h*0.5"},{action:"curve",x1:"w-3",y1:"h+h/6-4",x2:"3",y2:"h+h/6-4",x:"3",y:"h*0.5"}]);Schema.addGlobalCommand("message0",[{action:"move",x:"w*0.5-w*0.3",y:"h*0.5-h*0.2"},{action:"line",x:"w*0.5+w*0.3",y:"h*0.5-h*0.2"},{action:"line",x:"w*0.5+w*0.3",y:"h*0.5+h*0.2"},{action:"line",x:"w*0.5-w*0.3",y:"h*0.5+h*0.2"},{action:"line",x:"w*0.5-w*0.3",y:"h*0.5-h*0.2"},{action:"close"},{action:"move",x:"w*0.5",y:"h*0.5"},{action:"line",x:"w*0.5+w*0.3",y:"h*0.5-h*0.2"},{action:"move",x:"w*0.5",y:"h*0.5"},{action:"line",x:"w*0.5-w*0.3",y:"h*0.5-h*0.2"}]);Schema.addGlobalCommand("timer0",[{action:"move",x:"w*0.5",y:"h*0.5"},{action:"move",x:"w*0.5-w*0.3",y:"h*0.5"},{action:"curve",x1:"w*0.5-w*0.3",y1:"h*0.5-h*0.6*2/3",x2:"w*0.5+w*0.3",y2:"h*0.5-h*0.6*2/3",x:"w*0.5+w*0.3",y:"h*0.5"},{action:"curve",x1:"w*0.5+w*0.3",y1:"h*0.5+h*0.6*2/3",x2:"w*0.5-w*0.3",y2:"h*0.5+h*0.6*2/3",x:"w*0.5-w*0.3",y:"h*0.5"},{action:"close"}]);Schema.addGlobalCommand("timer0_needle",[{action:"move",x:"w*0.5+w*0.15",y:"h*0.5"},{action:"line",x:"w*0.5",y:"h*0.5"},{action:"line",x:"w*0.5+w*0.25*Math.cos(Math.PI/12*5)",y:"h*0.5-h*0.25*Math.sin(Math.PI/12*5)"},{action:"line",x:"w*0.5",y:"h*0.5"}]);Schema.addGlobalCommand("timer0_num",[{action:"move",x:"w*0.5+w*0.3*Math.cos(0)",y:"h*0.5+h*0.3*Math.sin(0)"},{action:"line",x:"w*0.5+w*0.25*Math.cos(0)",y:"h*0.5+h*0.25*Math.sin(0)"},{action:"move",x:"w*0.5+w*0.3*Math.cos(Math.PI/6)",y:"h*0.5+h*0.3*Math.sin(Math.PI/6)"},{action:"line",x:"w*0.5+w*0.25*Math.cos(Math.PI/6)",y:"h*0.5+h*0.25*Math.sin(Math.PI/6)"},{action:"move",x:"w*0.5+w*0.3*Math.cos(Math.PI/6*2)",y:"h*0.5+h*0.3*Math.sin(Math.PI/6*2)"},{action:"line",x:"w*0.5+w*0.25*Math.cos(Math.PI/6*2)",y:"h*0.5+h*0.25*Math.sin(Math.PI/6*2)"},{action:"move",x:"w*0.5+w*0.3*Math.cos(Math.PI/6*3)",y:"h*0.5+h*0.3*Math.sin(Math.PI/6*3)"},{action:"line",x:"w*0.5+w*0.25*Math.cos(Math.PI/6*3)",y:"h*0.5+h*0.25*Math.sin(Math.PI/6*3)"},{action:"move",x:"w*0.5+w*0.3*Math.cos(Math.PI/6*4)",y:"h*0.5+h*0.3*Math.sin(Math.PI/6*4)"},{action:"line",x:"w*0.5+w*0.25*Math.cos(Math.PI/6*4)",y:"h*0.5+h*0.25*Math.sin(Math.PI/6*4)"},{action:"move",x:"w*0.5+w*0.3*Math.cos(Math.PI/6*5)",y:"h*0.5+h*0.3*Math.sin(Math.PI/6*5)"},{action:"line",x:"w*0.5+w*0.25*Math.cos(Math.PI/6*5)",y:"h*0.5+h*0.25*Math.sin(Math.PI/6*5)"},{action:"move",x:"w*0.5+w*0.3*Math.cos(Math.PI/6*6)",y:"h*0.5+h*0.3*Math.sin(Math.PI/6*6)"},{action:"line",x:"w*0.5+w*0.25*Math.cos(Math.PI/6*6)",y:"h*0.5+h*0.25*Math.sin(Math.PI/6*6)"},{action:"move",x:"w*0.5+w*0.3*Math.cos(Math.PI/6*7)",y:"h*0.5+h*0.3*Math.sin(Math.PI/6*7)"},{action:"line",x:"w*0.5+w*0.25*Math.cos(Math.PI/6*7)",y:"h*0.5+h*0.25*Math.sin(Math.PI/6*7)"},{action:"move",x:"w*0.5+w*0.3*Math.cos(Math.PI/6*8)",y:"h*0.5+h*0.3*Math.sin(Math.PI/6*8)"},{action:"line",x:"w*0.5+w*0.25*Math.cos(Math.PI/6*8)",y:"h*0.5+h*0.25*Math.sin(Math.PI/6*8)"},{action:"move",x:"w*0.5+w*0.3*Math.cos(Math.PI/6*9)",y:"h*0.5+h*0.3*Math.sin(Math.PI/6*9)"},{action:"line",x:"w*0.5+w*0.25*Math.cos(Math.PI/6*9)",y:"h*0.5+h*0.25*Math.sin(Math.PI/6*9)"},{action:"move",x:"w*0.5+w*0.3*Math.cos(Math.PI/6*10)",y:"h*0.5+h*0.3*Math.sin(Math.PI/6*10)"},{action:"line",x:"w*0.5+w*0.25*Math.cos(Math.PI/6*10)",y:"h*0.5+h*0.25*Math.sin(Math.PI/6*10)"},{action:"move",x:"w*0.5+w*0.3*Math.cos(Math.PI/6*11)",y:"h*0.5+h*0.3*Math.sin(Math.PI/6*11)"},{action:"line",x:"w*0.5+w*0.25*Math.cos(Math.PI/6*11)",y:"h*0.5+h*0.25*Math.sin(Math.PI/6*11)"}]);Schema.addGlobalCommand("conditional0",[{action:"move",x:"w*0.5",y:"h*0.5"},{action:"move",x:"w*0.5-w*0.25",y:"h*0.5-h*0.25"},{action:"line",x:"w*0.5+w*0.25",y:"h*0.5-h*0.25"},{action:"line",x:"w*0.5+w*0.25",y:"h*0.5+h*0.25"},{action:"line",x:"w*0.5-w*0.25",y:"h*0.5+h*0.25"},{action:"line",x:"w*0.5-w*0.25",y:"h*0.5-h*0.25"},{action:"close"},{action:"move",x:"w*0.5-w*0.2",y:"h*0.5-h*0.05"},{action:"line",x:"w*0.5+w*0.2",y:"h*0.5-h*0.05"},{action:"move",x:"w*0.5-w*0.2",y:"h*0.5-h*0.16"},{action:"line",x:"w*0.5+w*0.2",y:"h*0.5-h*0.16"},{action:"move",x:"w*0.5-w*0.2",y:"h*0.5+h*0.05"},{action:"line",x:"w*0.5+w*0.2",y:"h*0.5+h*0.05"},{action:"move",x:"w*0.5-w*0.2",y:"h*0.5+h*0.16"},{action:"line",x:"w*0.5+w*0.2",y:"h*0.5+h*0.16"}]);Schema.addGlobalCommand("escalation0",[{action:"move",x:"w*0.5",y:"h*0.5"},{action:"line",x:"w*0.5+w*0.2",y:"h*0.5+h*0.25"},{action:"line",x:"w*0.5",y:"h*0.5-h*0.25"},{action:"line",x:"w*0.5-w*0.2",y:"h*0.5+h*0.25"},{action:"line",x:"w*0.5",y:"h*0.5"},{action:"close"}]);Schema.addGlobalCommand("signal0",[{action:"move",x:"w*0.5",y:"h*0.5-h*0.32"},{action:"line",x:"w*0.5+w*0.28",y:"h*0.5+h*0.15"},{action:"line",x:"w*0.5-w*0.28",y:"h*0.5+h*0.15"},{action:"line",x:"w*0.5",y:"h*0.5-h*0.32"},{action:"close"}]);Schema.addGlobalCommand("compensation0",[{action:"move",x:"w*0.5",y:"h*0.5"},{action:"line",x:"w*0.5+w*0.25",y:"h*0.5-h*0.2"},{action:"line",x:"w*0.5+w*0.25",y:"h*0.5+h*0.2"},{action:"line",x:"w*0.5",y:"h*0.5"},{action:"close"},{action:"move",x:"w*0.5-w*0.25",y:"h*0.5"},{action:"line",x:"w*0.5",y:"h*0.5-h*0.2"},{action:"line",x:"w*0.5",y:"h*0.5+h*0.2"},{action:"line",x:"w*0.5-w*0.25",y:"h*0.5"},{action:"close"}]);Schema.addGlobalCommand("error0",[{action:"move",x:"w*0.5",y:"h*0.5"},{action:"move",x:"w*0.5+w*0.1",y:"h*0.5"},{action:"line",x:"w*0.5+w*0.28",y:"h*0.5-h*0.2"},{action:"line",x:"w*0.5+w*0.1",y:"h*0.5+h*0.2"},{action:"line",x:"w*0.5-w*0.1",y:"h*0.5"},{action:"line",x:"w*0.5-w*0.28",y:"h*0.5+h*0.2"},{action:"line",x:"w*0.5-w*0.1",y:"h*0.5-h*0.2"},{action:"line",x:"w*0.5+w*0.1",y:"h*0.5"},{action:"close"}]);Schema.addGlobalCommand("multiple0",[{action:"move",x:"w*0.5",y:"h*0.5-h*0.28"},{action:"line",x:"w*0.5+w*0.28",y:"h*0.5-h*0.08"},{action:"line",x:"w*0.5+w*0.17",y:"h*0.5+h*0.25"},{action:"line",x:"w*0.5-w*0.17",y:"h*0.5+h*0.25"},{action:"line",x:"w*0.5-w*0.28",y:"h*0.5-h*0.08"},{action:"line",x:"w*0.5",y:"h*0.5-h*0.28"},{action:"close"}]);Schema.addGlobalCommand("parallel0",[{action:"move",x:"w*0.5+w*0.07",y:"h*0.5-h*0.07"},{action:"line",x:"w*0.5+w*0.27",y:"h*0.5-h*0.07"},{action:"line",x:"w*0.5+w*0.27",y:"h*0.5+h*0.07"},{action:"line",x:"w*0.5+w*0.07",y:"h*0.5+h*0.07"},{action:"line",x:"w*0.5+w*0.07",y:"h*0.5+h*0.27"},{action:"line",x:"w*0.5-w*0.07",y:"h*0.5+h*0.27"},{action:"line",x:"w*0.5-w*0.07",y:"h*0.5+h*0.07"},{action:"line",x:"w*0.5-w*0.27",y:"h*0.5+h*0.07"},{action:"line",x:"w*0.5-w*0.27",y:"h*0.5-h*0.07"},{action:"line",x:"w*0.5-w*0.07",y:"h*0.5-h*0.07"},{action:"line",x:"w*0.5-w*0.07",y:"h*0.5-h*0.27"},{action:"line",x:"w*0.5+w*0.07",y:"h*0.5-h*0.27"},{action:"line",x:"w*0.5+w*0.07",y:"h*0.5-h*0.07"},{action:"close"}]);Schema.addGlobalCommand("gateway0",[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"w*0.5",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w*0.5",y:"h"},{action:"line",x:"0",y:"h*0.5"},{action:"close"}]);Schema.addGlobalCommand("link3",[{action:"move",x:"w*0.5",y:"h*0.5"},{action:"move",x:"w*0.5-w*0.26",y:"h*0.5-h*0.08"},{action:"line",x:"w*0.5+w*0.16",y:"h*0.5-h*0.08"},{action:"line",x:"w*0.5+w*0.16",y:"h*0.5-h*0.18"},{action:"line",x:"w*0.5+w*0.26",y:"h*0.5"},{action:"line",x:"w*0.5+w*0.16",y:"h*0.5+h*0.18"},{action:"line",x:"w*0.5+w*0.16",y:"h*0.5+h*0.08"},{action:"line",x:"w*0.5-w*0.26",y:"h*0.5+h*0.08"},{action:"close"}]);Schema.addGlobalCommand("cancel3",[{action:"move",x:"w*0.5",y:"h*0.5"},{action:"move",x:"w*0.5",y:"h*0.5-h*0.1"},{action:"line",x:"w*0.5+w*0.16",y:"h*0.5-h*0.25"},{action:"line",x:"w*0.5+w*0.25",y:"h*0.5-h*0.16"},{action:"line",x:"w*0.5+w*0.1",y:"h*0.5"},{action:"line",x:"w*0.5+w*0.25",y:"h*0.5+h*0.16"},{action:"line",x:"w*0.5+w*0.16",y:"h*0.5+h*0.25"},{action:"line",x:"w*0.5",y:"h*0.5+h*0.1"},{action:"line",x:"w*0.5-w*0.16",y:"h*0.5+h*0.25"},{action:"line",x:"w*0.5-w*0.25",y:"h*0.5+h*0.16"},{action:"line",x:"w*0.5-w*0.1",y:"h*0.5"},{action:"line",x:"w*0.5-w*0.25",y:"h*0.5-h*0.16"},{action:"line",x:"w*0.5-w*0.16",y:"h*0.5-h*0.25"},{action:"line",x:"w*0.5",y:"h*0.5-h*0.1"},{action:"close"}]);Schema.addGlobalCommand("message4",[{action:"move",x:"w*0.5",y:"h*0.5"},{action:"move",x:"w*0.5-w*0.3",y:"h*0.5-h*0.2"},{action:"line",x:"w*0.5+w*0.3",y:"h*0.5-h*0.2"},{action:"line",x:"w*0.5+w*0.3",y:"h*0.5+h*0.2"},{action:"line",x:"w*0.5-w*0.3",y:"h*0.5+h*0.2"},{action:"line",x:"w*0.5-w*0.3",y:"h*0.5-h*0.2"},{action:"close"}]);Schema.addGlobalCommand("message4_0",[{action:"move",x:"w*0.5-w*0.3",y:"h*0.5-h*0.2"},{action:"line",x:"w*0.5",y:"h*0.5"},{action:"line",x:"w*0.5+w*0.3",y:"h*0.5-h*0.2"},{action:"line",x:"w*0.5",y:"h*0.5"},{action:"close"}]);Schema.addGlobalCommand("g_round",[{action:"move",x:"w*0.5 - w*0.25",y:"h*0.5"},{action:"curve",x1:"w*0.5 - w*0.25",y1:"h*0.5 - h*2/3*0.5",x2:"w*0.5 + w*0.25",y2:"h*0.5 - h*2/3*0.5",x:"w*0.5 + w*0.25",y:"h*0.5"},{action:"curve",x1:"w*0.5 + w*0.25",y1:"h*0.5 + h*2/3*0.5",x2:"w*0.5 - w*0.25",y2:"h*0.5 + h*2/3*0.5",x:"w*0.5 - w*0.25",y:"h*0.5"},{action:"close"}]);Schema.addGlobalCommand("manual_task",[{action:"move",x:"100*0.15- 100*0.08",y:"60*0.2"},{action:"line",x:"100*0.15- 100*0.04",y:"60*0.2"},{action:"line",x:"100*0.15+ 100*0.01",y:"60*0.13"},{action:"line",x:"100*0.15+ 100*0.04",y:"60*0.13"},{action:"line",x:"100*0.15 + 100*0.04",y:"60*0.17"},{action:"line",x:"100*0.15+ 100*0.01",y:"60*0.17"},{action:"line",x:"100*0.15+ 100*0.1",y:"60*0.17"},{action:"line",x:"100*0.15+ 100*0.1",y:"60*0.21"},{action:"line",x:"100*0.15+ 100*0.01",y:"60*0.21"},{action:"line",x:"100*0.15+ 100*0.06",y:"60*0.21"},{action:"line",x:"100*0.15+ 100*0.06",y:"60*0.25"},{action:"line",x:"100*0.15+ 100*0.01",y:"60*0.25"},{action:"line",x:"100*0.15+ 100*0.06",y:"60*0.25"},{action:"line",x:"100*0.15+ 100*0.06",y:"60*0.29"},{action:"line",x:"100*0.15+ 100*0.06",y:"60*0.29"},{action:"line",x:"100*0.15+ 100*0.04",y:"60*0.29"},{action:"line",x:"100*0.15+ 100*0.04",y:"60*0.33"},{action:"line",x:"100*0.15- 100*0.04",y:"60*0.33"},{action:"line",x:"100*0.15- 100*0.08",y:"60*0.28"},{action:"line",x:"100*0.15- 100*0.08",y:"60*0.2"},{action:"close"}]);Schema.addGlobalCommand("receive_task",[{action:"move",x:"100*0.15+ 100*0.08",y:"60*0.24- 60*0.1"},{action:"line",x:"100*0.15- 100*0.08",y:"60*0.24- 60*0.1"},{action:"line",x:"100*0.15 - 100*0.08",y:"60*0.24 + 60*0.08"},{action:"line",x:"100*0.15+ 100*0.08",y:"60*0.24 + 60*0.08"},{action:"line",x:"100*0.15+ 100*0.08",y:"60*0.24- 60*0.1"},{action:"close"},{action:"line",x:"100*0.15 - 0",y:"60*0.24- 60*0.01"},{action:"line",x:"100*0.15 - 100*0.08",y:"60*0.24- 60*0.1"},{action:"line",x:"100*0.15 - 0",y:"60*0.24- 60*0.01"},{action:"close"}]);Schema.addGlobalCommand("receive_task_dark",[{action:"move",x:"100*0.15+ 100*0.08",y:"60*0.24- 60*0.1"},{action:"line",x:"100*0.15- 100*0.08",y:"60*0.24- 60*0.1"},{action:"line",x:"100*0.15 - 100*0.08",y:"60*0.24 + 60*0.08"},{action:"line",x:"100*0.15+ 100*0.08",y:"60*0.24 + 60*0.08"},{action:"line",x:"100*0.15+ 100*0.08",y:"60*0.24- 60*0.1"},{action:"close"},{action:"line",x:"100*0.15 - 0",y:"60*0.24- 60*0.01"},{action:"line",x:"100*0.15 - 100*0.08",y:"60*0.24- 60*0.1"},{action:"line",x:"100*0.15 - 0",y:"60*0.24- 60*0.01"},{action:"close"}]);Schema.addGlobalCommand("service_task",[{action:"move",x:"100*0.09 -100*0.26 *0.16",y:"60*0.14 + 60/5*8 *0.16 *0.16"},{action:"line",x:"100*0.09 -100*0.28 *0.16",y:"60*0.14 + 60/5*8 *0.11 *0.16"},{action:"line",x:"100*0.09 - 100*0.26 *0.16",y:"60*0.14 + 60/5*8 *0.05 *0.16"},{action:"line",x:"100*0.09 -100*0.17 *0.16",y:"60*0.14 + 60/5*8 *0.05 *0.16"},{action:"line",x:"100*0.09 -100*0.12 *0.16",y:"60*0.14 -60/5*8 *0.02 *0.16"},{action:"line",x:"100*0.09 -100*0.21 *0.16",y:"60*0.14 -60/5*8 *0.13 *0.16"},{action:"line",x:"100*0.09 -100*0.18 *0.16",y:"60*0.14 -60/5*8 *0.17 *0.16"},{action:"line",x:"100*0.09 -100*0.13 *0.16",y:"60*0.14 -60/5*8 *0.19 *0.16"},{action:"line",x:"100*0.09 -100*0.05 *0.16",y:"60*0.14 -60/5*8 *0.11 *0.16"},{action:"line",x:"100*0.09 +100*0.03 *0.16",y:"60*0.14 -60/5*8 *0.15 *0.16"},{action:"line",x:"100*0.09 + 100*0.04 *0.16",y:"60*0.14 -60/5*8 *0.25 *0.16"},{action:"line",x:"100*0.09 + 100*0.10 *0.16",y:"60*0.14 -60/5*8 *0.27 *0.16"},{action:"line",x:"100*0.09 + 100*0.15 *0.16",y:"60*0.14 -60/5*8 *0.25 *0.16"},{action:"line",x:"100*0.09 + 100*0.15 *0.16",y:"60*0.14 -60/5*8 *0.15 *0.16"},{action:"line",x:"100*0.09 + 100*0.23 *0.16",y:"60*0.14 -60/5*8 *0.12 *0.16"},{action:"line",x:"100*0.09 + 100*0.30 *0.16",y:"60*0.14 -60/5*8 *0.19 *0.16"},{action:"line",x:"100*0.09 + 100*0.35 *0.16",y:"60*0.14 -60/5*8 *0.16 *0.16"},{action:"line",x:"100*0.09 + 100*0.38 *0.16",y:"60*0.14 -60/5*8 *0.12 *0.16"},{action:"line",x:"100*0.09 + 100*0.32 *0.16",y:"60*0.14 -60/5*8 *0.05 *0.16"},{action:"line",x:"100*0.09 + 100*0.37 *0.16",y:"60*0.14 + 60/5*8 *0.05 *0.16"},{action:"line",x:"100*0.09 + 100*0.46 *0.16",y:"60*0.14 + 60/5*8 *0.05 *0.16"},{action:"line",x:"100*0.09 + 100*0.48 *0.16",y:"60*0.14 + 60/5*8 *0.10 *0.16"},{action:"line",x:"100*0.09 + 100*0.46 *0.16",y:"60*0.14 + 60/5*8 *0.16 *0.16"},{action:"line",x:"100*0.09 + 100*0.37 *0.16",y:"60*0.14 + 60/5*8 *0.16 *0.16"},{action:"line",x:"100*0.09 + 100*0.33 *0.16",y:"60*0.14 + 60/5*8 *0.25 *0.16"},{action:"line",x:"100*0.09 + 100*0.38 *0.16",y:"60*0.14 + 60/5*8 *0.31 *0.16"},{action:"line",x:"100*0.09 + 100*0.36 *0.16",y:"60*0.14 + 60/5*8 *0.37 *0.16"},{action:"line",x:"100*0.09 + 100*0.29 *0.16",y:"60*0.14 + 60/5*8 *0.39 *0.16"},{action:"line",x:"100*0.09 + 100*0.25 *0.16",y:"60*0.14 + 60/5*8 *0.35 *0.16"},{action:"line",x:"100*0.09 + 100*0.16 *0.16",y:"60*0.14 + 60/5*8 *0.37 *0.16"},{action:"line",x:"100*0.09 + 100*0.16 *0.16",y:"60*0.14 + 60/5*8 *0.46 *0.16"},{action:"line",x:"100*0.09 + 100*0.10 *0.16",y:"60*0.14 + 60/5*8 *0.48 *0.16"},{action:"line",x:"100*0.09 + 100*0.04 *0.16",y:"60*0.14 + 60/5*8 *0.46 *0.16"},{action:"line",x:"100*0.09 + 100*0.04 *0.16",y:"60*0.14 + 60/5*8 *0.37 *0.16"},{action:"line",x:"100*0.09 -100*0.04 *0.16",y:"60*0.14 + 60/5*8 *0.33 *0.16"},{action:"line",x:"100*0.09 -100*0.12 *0.16",y:"60*0.14 + 60/5*8 *0.38 *0.16"},{action:"line",x:"100*0.09 -100*0.18 *0.16",y:"60*0.14 + 60/5*8 *0.37 *0.16"},{action:"line",x:"100*0.09 -100*0.21 *0.16",y:"60*0.14 + 60/5*8 *0.33 *0.16"},{action:"line",x:"100*0.09 -100*0.14 *0.16",y:"60*0.14 + 60/5*8 *0.25 *0.16"},{action:"line",x:"100*0.09 -100*0.16 *0.16",y:"60*0.14 + 60/5*8 *0.16 *0.16"},{action:"line",x:"100*0.09 -100*0.26 *0.16",y:"60*0.14 + 60/5*8 *0.16 *0.16"},{action:"close"},{action:"move",x:"100*0.09 -100*0.01 *0.16",y:"60*0.14 +  60/5*8 *0.01 *0.16"},{action:"line",x:"100*0.09 +100*0.01 *0.16",y:"60*0.14 - 60*0.01 /5*8 *0.16"},{action:"line",x:"100*0.09 +100*0.04 *0.16",y:"60*0.14 + 60*0.01 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.08 *0.16",y:"60*0.14 + 60*0.01 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.08 *0.16",y:"60*0.14 - 60*0.03 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.12 *0.16",y:"60*0.14 - 60*0.03 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.12 *0.16",y:"60*0.14 - 60*0.0 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.15 *0.16",y:"60*0.14 + 60*0.02 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.18 *0.16",y:"60*0.14 -60*0.01 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.22 *0.16",y:"60*0.14 + 60*0.01 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.18 *0.16",y:"60*0.14 + 60*0.04 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.20 *0.16",y:"60*0.14 + 60*0.08 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.25 *0.16",y:"60*0.14 + 60*0.08 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.25 *0.16",y:"60*0.14 + 60*0.12 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.20 *0.16",y:"60*0.14 + 60*0.12 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.18 *0.16",y:"60*0.14 + 60*0.16 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.21 *0.16",y:"60*0.14 + 60*0.19 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.18 *0.16",y:"60*0.14 + 60*0.22 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.15 *0.16",y:"60*0.14 + 60*0.19 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.12 *0.16",y:"60*0.14 + 60*0.21 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.12 *0.16",y:"60*0.14 + 60*0.25 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.08 *0.16",y:"60*0.14 + 60*0.26 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.08 *0.16",y:"60*0.14 + 60*0.21 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.05 *0.16",y:"60*0.14 + 60*0.18 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.01 *0.16",y:"60*0.14 + 60*0.22 /5*8 *0.16"},{action:"line",x:"100*0.09 - 100*0.02 *0.16",y:"60*0.14 + 60*0.19 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.0 *0.16",y:"60*0.14 + 60*0.16 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.0 *0.16",y:"60*0.14 + 60*0.12 /5*8 *0.16"},{action:"line",x:"100*0.09 -100*0.04 *0.16",y:"60*0.14 + 60*0.12 /5*8 *0.16"},{action:"line",x:"100*0.09 -100*0.04 *0.16",y:"60*0.14 + 60*0.08 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0. *0.16",y:"60*0.14 + 60*0.08 /5*8 *0.16"},{action:"line",x:"100*0.09 + 100*0.01 *0.16",y:"60*0.14 + 60*0.05 /5*8 *0.16"},{action:"line",x:"100*0.09 -100*0.01 *0.16",y:"60*0.14 + 60*0.01 /5*8 *0.16"},{action:"close"},{action:"move",x:"100*0.15 -100*0.26 *0.16",y:"60*0.24 + 60/5*8 *0.16 *0.16"},{action:"line",x:"100*0.15 -100*0.28 *0.16",y:"60*0.24 + 60/5*8 *0.11 *0.16"},{action:"line",x:"100*0.15 -100*0.26 *0.16",y:"60*0.24 + 60/5*8 *0.05 *0.16"},{action:"line",x:"100*0.15 -100*0.17 *0.16",y:"60*0.24 + 60/5*8 *0.05 *0.16"},{action:"line",x:"100*0.15 -100*0.12 *0.16",y:"60*0.24 -60/5*8 *0.02 *0.16"},{action:"line",x:"100*0.15 -100*0.21 *0.16",y:"60*0.24 -60/5*8 *0.13 *0.16"},{action:"line",x:"100*0.15 -100*0.18 *0.16",y:"60*0.24 -60/5*8 *0.17 *0.16"},{action:"line",x:"100*0.15 -100*0.13 *0.16",y:"60*0.24 -60/5*8 *0.19 *0.16"},{action:"line",x:"100*0.15 -100*0.05 *0.16",y:"60*0.24 -60/5*8 *0.11 *0.16"},{action:"line",x:"100*0.15 + 100*0.03 *0.16",y:"60*0.24 -60/5*8 *0.15 *0.16"},{action:"line",x:"100*0.15 +  100*0.04 *0.16",y:"60*0.24 -60/5*8 *0.25 *0.16"},{action:"line",x:"100*0.15 +  100*0.10 *0.16",y:"60*0.24 -60/5*8 *0.27 *0.16"},{action:"line",x:"100*0.15 +  100*0.15 *0.16",y:"60*0.24 -60/5*8 *0.25 *0.16"},{action:"line",x:"100*0.15 +  100*0.15 *0.16",y:"60*0.24 -60/5*8 *0.15 *0.16"},{action:"line",x:"100*0.15 +  100*0.23 *0.16",y:"60*0.24 -60/5*8 *0.12 *0.16"},{action:"line",x:"100*0.15 +  100*0.30 *0.16",y:"60*0.24 -60/5*8 *0.19 *0.16"},{action:"line",x:"100*0.15 +  100*0.35 *0.16",y:"60*0.24 -60/5*8 *0.16 *0.16"},{action:"line",x:"100*0.15 +  100*0.38 *0.16",y:"60*0.24 -60/5*8 *0.12 *0.16"},{action:"line",x:"100*0.15 +  100*0.32 *0.16",y:"60*0.24 -60/5*8 *0.05 *0.16"},{action:"line",x:"100*0.15 +  100*0.37 *0.16",y:"60*0.24 +60/5*8 *0.05 *0.16"},{action:"line",x:"100*0.15 +  100*0.46 *0.16",y:"60*0.24 +60/5*8 *0.05 *0.16"},{action:"line",x:"100*0.15 +  100*0.48 *0.16",y:"60*0.24 +60/5*8 *0.10 *0.16"},{action:"line",x:"100*0.15 +  100*0.46 *0.16",y:"60*0.24 +60/5*8 *0.16 *0.16"},{action:"line",x:"100*0.15 +  100*0.37 *0.16",y:"60*0.24 +60/5*8 *0.16 *0.16"},{action:"line",x:"100*0.15 +  100*0.33 *0.16",y:"60*0.24 +60/5*8 *0.25 *0.16"},{action:"line",x:"100*0.15 + 100*0.38 *0.16",y:"60*0.24 +60/5*8 *0.31 *0.16"},{action:"line",x:"100*0.15 + 100*0.36 *0.16",y:"60*0.24 +60/5*8 *0.37 *0.16"},{action:"line",x:"100*0.15 + 100*0.29 *0.16",y:"60*0.24 +60/5*8 *0.39 *0.16"},{action:"line",x:"100*0.15 + 100*0.25 *0.16",y:"60*0.24 +60/5*8 *0.35 *0.16"},{action:"line",x:"100*0.15 + 100*0.16 *0.16",y:"60*0.24 +60/5*8 *0.37 *0.16"},{action:"line",x:"100*0.15 + 100*0.16 *0.16",y:"60*0.24 +60/5*8 *0.46 *0.16"},{action:"line",x:"100*0.15 + 100*0.10 *0.16",y:"60*0.24 +60/5*8 *0.48 *0.16"},{action:"line",x:"100*0.15 + 100*0.04 *0.16",y:"60*0.24 +60/5*8 *0.46 *0.16"},{action:"line",x:"100*0.15 + 100*0.04 *0.16",y:"60*0.24 +60/5*8 *0.37 *0.16"},{action:"line",x:"100*0.15 -100*0.04 *0.16",y:"60*0.24 +60/5*8 *0.33 *0.16"},{action:"line",x:"100*0.15 -100*0.12 *0.16",y:"60*0.24 +60/5*8 *0.38 *0.16"},{action:"line",x:"100*0.15 -100*0.18 *0.16",y:"60*0.24 +60/5*8 *0.37 *0.16"},{action:"line",x:"100*0.15 -100*0.21 *0.16",y:"60*0.24 +60/5*8 *0.33 *0.16"},{action:"line",x:"100*0.15 -100*0.14 *0.16",y:"60*0.24 +60/5*8 *0.25 *0.16"},{action:"line",x:"100*0.15 -100*0.16 *0.16",y:"60*0.24 +60/5*8 *0.16 *0.16"},{action:"line",x:"100*0.15 -100*0.26 *0.16",y:"60*0.24 +60/5*8 *0.16 *0.16"},{action:"close"},{action:"move",x:"100*0.15 -100*0.01 *0.16",y:"60*0.24 +60/5*8 *0.01 *0.16"},{action:"line",x:"100*0.15 + 100*0.01 *0.16",y:"60*0.24 - 60*0.01 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.04 *0.16",y:"60*0.24 + 60*0.01 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.08 *0.16",y:"60*0.24 + 60*0.01 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.08 *0.16",y:"60*0.24 - 60*0.03 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.12 *0.16",y:"60*0.24 - 60*0.03 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.12 *0.16",y:"60*0.24 - 60*0.0 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.15 *0.16",y:"60*0.24 + 60*0.02 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.18 *0.16",y:"60*0.24 -60*0.01 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.22 *0.16",y:"60*0.24 + 60*0.01 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.18 *0.16",y:"60*0.24 + 60*0.04 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.20 *0.16",y:"60*0.24 + 60*0.08 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.25 *0.16",y:"60*0.24 + 60*0.08 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.25 *0.16",y:"60*0.24 + 60*0.12 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.20 *0.16",y:"60*0.24 + 60*0.12 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.18 *0.16",y:"60*0.24 + 60*0.16 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.21 *0.16",y:"60*0.24 + 60*0.19 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.18 *0.16",y:"60*0.24 + 60*0.22 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.15 *0.16",y:"60*0.24 + 60*0.19 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.12 *0.16",y:"60*0.24 + 60*0.21 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.12 *0.16",y:"60*0.24 + 60*0.25 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.08 *0.16",y:"60*0.24 + 60*0.26 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.08 *0.16",y:"60*0.24 + 60*0.21 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.05 *0.16",y:"60*0.24 + 60*0.18 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.01 *0.16",y:"60*0.24 + 60*0.22 /5*8 *0.16"},{action:"line",x:"100*0.15 - 100*0.02 *0.16",y:"60*0.24 + 60*0.19 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.0 *0.16",y:"60*0.24 + 60*0.16 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.0 *0.16",y:"60*0.24 + 60*0.12 /5*8 *0.16"},{action:"line",x:"100*0.15 -100*0.04 *0.16",y:"60*0.24 + 60*0.12 /5*8 *0.16"},{action:"line",x:"100*0.15 -100*0.04 *0.16",y:"60*0.24 + 60*0.08 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0 *0.16",y:"60*0.24 + 60*0.08 /5*8 *0.16"},{action:"line",x:"100*0.15 + 100*0.01 *0.16",y:"60*0.24 + 60*0.05 /5*8 *0.16"},{action:"line",x:"100*0.15 -100*0.01 *0.16",y:"60*0.24 + 60*0.01 /5*8 *0.16"},{action:"close"}]);Schema.addGlobalCommand("script_task",[{action:"move",x:"100*0.15- 100*0.05",y:"60*0.24- 60*0.1"},{action:"line",x:"100*0.15 + 100*0.05",y:"60*0.24 - 60*0.1"},{action:"curve",x1:"100*0.15 + 100*0.02",y1:"60*0.24 - 60*0.1",x2:"100*0.15 + 100*0.02",y2:"60*0.24",x:"100*0.15 + 100*0.04",y:"60*0.24"},{action:"curve",x1:"100*0.15 + 100*0.06",y1:"60*0.24",x2:"100*0.15 + 100*0.06",y2:"60*0.24 + 60*0.1",x:"100*0.15 + 100*0.03",y:"60*0.24 + 60*0.1"},{action:"line",x:"100*0.15 - 100*0.08",y:"60*0.24 + 60*0.1"},{action:"curve",x1:"100*0.15 - 100*0.05",y1:"60*0.24 + 60*0.1",x2:"100*0.15 - 100*0.05",y2:"60*0.24",x:"100*0.15 - 100*0.07",y:"60*0.24"},{action:"curve",x1:"100*0.15 - 100*0.09",y1:"60*0.24",x2:"100*0.15 - 100*0.09",y2:"60*0.24 - 60*0.1",x:"100*0.15 - 100*0.05",y:"60*0.24 - 60*0.1"},{action:"close"},{action:"move",x:"100*0.15 - 100*0.08",y:"60*0.24 - 60*0.05"},{action:"line",x:"100*0.15 + 100*0.025",y:"60*0.24 - 60*0.05"},{action:"move",x:"100*0.15 - 100*0.07",y:"60*0.24 - 0"},{action:"line",x:"100*0.15 + 100*0.04",y:"60*0.24 - 0"},{action:"move",x:"100*0.15 - 100*0.055",y:"60*0.24 + 60*0.06"},{action:"line",x:"100*0.15 + 100*0.05",y:"60*0.24 + 60*0.06"}]);Schema.addGlobalCommand("business_rule",[{action:"move",x:"100*0.15- 100*0.08",y:"60*0.24- 60*0.1"},{action:"line",x:"100*0.15 + 100*0.08",y:"60*0.24- 60*0.1"},{action:"line",x:"100*0.15 + 100*0.08",y:"60*0.24 + 60*0.1"},{action:"line",x:"100*0.15 - 100*0.08",y:"60*0.24 + 60*0.1"},{action:"close"},{action:"move",x:"100*0.15 - 100*0.08",y:"60*0.24 - 60*0.05"},{action:"line",x:"100*0.15 + 100*0.08",y:"60*0.24 - 60*0.05"},{action:"move",x:"100*0.15 - 100*0.08",y:"60*0.24 + 60*0.0"},{action:"line",x:"100*0.15 + 100*0.08",y:"60*0.24 + 60*0.0"},{action:"move",x:"100*0.15 - 100*0.08",y:"60*0.24 + 60*0.05"},{action:"line",x:"100*0.15 + 100*0.08",y:"60*0.24 + 60*0.05"},{action:"move",x:"100*0.15 - 100*0.04",y:"60*0.24 - 60*0.1"},{action:"line",x:"100*0.15 - 100*0.04",y:"60*0.24 + 60*0.1"}]);Schema.addGlobalCommand("user_task",[{action:"move",x:"100*0.05+ 100/11*2*0.5-100/11*2*0.2",y:"60*0.1+ 60/55*16*0.3"},{action:"curve",x1:"100*0.05+ 100/11*2*0.30",y1:"60*0.1+ 60/55*16*0.3 - 60/55*16*0.4*2/3",x2:"100*0.05+ 100/11*2*0.5+100/11*2*0.2",y2:"60*0.1+ 60/55*16*0.3 - 60/55*16*0.4*2/3",x:"100*0.05+ 100/11*2*0.5+100/11*2*0.2",y:"60*0.1+ 60/55*16*0.3"},{action:"line",x:"100*0.05+ 100/11*2*0.5-100/11*2*0.2",y:"60*0.1+ 60/55*16*0.3"},{action:"close"},{action:"move",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.1",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.1",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.68"},{action:"quadraticCurve",x1:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.1",y1:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45"},{action:"quadraticCurve",x1:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.95",y1:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.95",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.68"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.95",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.77",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.77",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.77"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.77",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.23",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.23",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.77"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.23",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.05",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.96"},{action:"close"},{action:"move",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.38",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.42"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.40"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.32",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.35"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.32",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.27"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.43",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.27"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.46",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.24"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.68",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.24"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.68",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.35"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.40"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.62",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.42"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.60",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.58"},{action:"line",x:"100*0.05+ 100/11*2*0.0 + 100/11*2*0.35",y:"60*0.1+ 60/55*16*0.0 + 60/55*16*0.45"},{action:"close"}]);Schema.addGlobalCommand("inner_roundRectangle",[{action:"move",x:"w * 0 +3",y:"h * 0 + h/30 +3"},{action:"quadraticCurve",x1:"w * 0 +3 +1",y1:"h * 0 +3 +1",x:"w * 0 + h/30 +3",y:"h * 0  +3"},{action:"line",x:"w * 1 - h/30 -3",y:"h * 0 +3"},{action:"quadraticCurve",x1:"w * 1 -3",y1:"h * 0+3",x:"w * 1  -3",y:"h * 0 + h/30 +3"},{action:"line",x:"w * 1 -3",y:"h * 1 - h/30-3"},{action:"quadraticCurve",x1:"w * 1 -3",y1:"h * 1 -3",x:"w * 1 - h/30-3",y:"h * 1 -3"},{action:"line",x:"w * 0 + h/30 +3",y:"h * 1 -3"},{action:"quadraticCurve",x1:"w * 0+3",y1:"h * 1-3",x:"w * 0 +3",y:"h * 1 - h/30 -3"},{action:"line",x:"w * 0 + 3",y:"h * 0 + h/30+3"},{action:"close"}]);Schema.addGlobalCommand("exclusive_gateway",[{action:"move",x:"w*0.5",y:"h*0.5"},{action:"move",x:"w*0.5 - w*0.5*0.4 + w*0.02",y:"h*0.5 - h*0.5*0.4 - h*0.02"},{action:"line",x:"w*0.5 + w*0.5*0.4 + w*0.02",y:"h*0.5 + h*0.5*0.4 - h*0.02"},{action:"line",x:"w*0.5 + w*0.5*0.4 - w*0.02",y:"h*0.5 + h*0.5*0.4 + h*0.02"},{action:"line",x:"w*0.5 - w*0.5*0.4 - w*0.02",y:"h*0.5 - h*0.5*0.4 + h*0.02"},{action:"close"},{action:"move",x:"w*0.5 + w*0.5*0.4 - w*0.02",y:"h*0.5 - h*0.5*0.4 - h*0.02"},{action:"line",x:"w*0.5 - w*0.5*0.4 - w*0.02",y:"h*0.5 + h*0.5*0.4 - h*0.02"},{action:"line",x:"w*0.5 - w*0.5*0.4 + w*0.02",y:"h*0.5 + h*0.5*0.4 + h*0.02"},{action:"line",x:"w*0.5 + w*0.5*0.4 + w*0.02",y:"h*0.5 - h*0.5*0.4 + h*0.02"},{action:"line",x:"w*0.5 + w*0.5*0.4 - w*0.02",y:"h*0.5 - h*0.5*0.4 - h*0.02"},{action:"close"}]);Schema.addGlobalCommand("complex_gateway0",[{action:"move",x:"w*0.5 - Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02",y:"h*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02",y:"h*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.03"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02",y:"h*0.5 + Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02",y:"h*0.5 - Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02"},{action:"close"}]);Schema.addGlobalCommand("complex_gateway1",[{action:"move",x:"w*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02",y:"h*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02",y:"h*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02",y:"h*0.5 + Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02",y:"h*0.5 - Math.min(w,h)*0.5*0.3 + Math.min(w,h)*0.02"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02",y:"h*0.5 - Math.min(w,h)*0.5*0.3 - Math.min(w,h)*0.02"},{action:"close"}]);Schema.addGlobalCommand("complex_gateway2",[{action:"move",x:"w*0.5 - Math.min(w,h)*0.027",y:"h*0.5 - Math.min(w,h)*0.5*0.4"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.027",y:"h*0.5 + Math.min(w,h)*0.5*0.4"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.027",y:"h*0.5 + Math.min(w,h)*0.5*0.4"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.027",y:"h*0.5 - Math.min(w,h)*0.5*0.4"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.027",y:"h*0.5 - Math.min(w,h)*0.5*0.4"},{action:"close"}]);Schema.addGlobalCommand("complex_gateway3",[{action:"move",x:"w*0.5 - Math.min(w,h)*0.5*0.4",y:"h*0.5 - Math.min(w,h)*0.027"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.5*0.4",y:"h*0.5 + Math.min(w,h)*0.027"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.5*0.4",y:"h*0.5 + Math.min(w,h)*0.027"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.5*0.4",y:"h*0.5 - Math.min(w,h)*0.027"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.5*0.4",y:"h*0.5 - Math.min(w,h)*0.027"},{action:"close"}]);Schema.addGlobalCommand("event_based_gateway",[{action:"move",x:"w*0.5 - w*0.5/55*32",y:"h*0.5"},{action:"curve",x1:"w*0.5 - w*0.5/55*32",y1:"h*0.5 - h/55*32*2/3",x2:"w*0.5 + w*0.5/55*32",y2:"h*0.5 - h/55*32*2/3",x:"w*0.5 + w*0.5/55*32",y:"h*0.5"},{action:"curve",x1:"w*0.5 + w*0.5/55*32",y1:"h*0.5 + h/55*32*2/3",x2:"w*0.5 - w*0.5/55*32",y2:"h*0.5 + h/55*32*2/3",x:"w*0.5 - w*0.5/55*32",y:"h*0.5"},{action:"close"},{action:"move",x:"w*0.5 - w*0.4/55*32",y:"h*0.5"},{action:"curve",x1:"w*0.5 - w*0.4/55*32",y1:"h*0.5 - h/55*32*2/3*0.8",x2:"w*0.5+w*0.4/55*32",y2:"h*0.5 - h/55*32*2/3*0.8",x:"w*0.5 + w*0.4/55*32",y:"h*0.5"},{action:"curve",x1:"w*0.5 + w*0.4/55*32",y1:"h*0.5 + h/55*32*2/3*0.8",x2:"w*0.5 - w*0.4/55*32",y2:"h*0.5 + h/55*32*2/3*0.8",x:"w*0.5 - w*0.4/55*32",y:"h*0.5"},{action:"close"},{action:"move",x:"w*0.5",y:"h*0.5 - h/55*32*0.28"},{action:"line",x:"w*0.5+ w/55*32*0.28",y:"h*0.5- h/55*32*0.08"},{action:"line",x:"w*0.5+ w/55*32*0.17",y:"h*0.5+h/55*32*0.25"},{action:"line",x:"w*0.5- w/55*32*0.17",y:"h*0.5+ h/55*32*0.25"},{action:"line",x:"w*0.5- w/55*32*0.28",y:"h*0.5-h/55*32*0.08"},{action:"line",x:"w*0.5",y:"h*0.5-h/55*32*0.28"},{action:"close"}]);Schema.addGlobalCommand("event_based_start_gateway",[{action:"move",x:"w*0.5 - w*0.5/55*32",y:"h*0.5"},{action:"curve",x1:"w*0.5 - w*0.5/55*32",y1:"h*0.5 - h/55*32*2/3",x2:"w*0.5 + w*0.5/55*32",y2:"h*0.5 - h/55*32*2/3",x:"w*0.5 + w*0.5/55*32",y:"h*0.5"},{action:"curve",x1:"w*0.5 + w*0.5/55*32",y1:"h*0.5 + h/55*32*2/3",x2:"w*0.5 - w*0.5/55*32",y2:"h*0.5 + h/55*32*2/3",x:"w*0.5 - w*0.5/55*32",y:"h*0.5"},{action:"close"},{action:"move",x:"w*0.5",y:"h*0.5 - h/55*32*0.28"},{action:"line",x:"w*0.5+ w/55*32*0.28",y:"h*0.5- h/55*32*0.08"},{action:"line",x:"w*0.5+ w/55*32*0.17",y:"h*0.5+h/55*32*0.25"},{action:"line",x:"w*0.5- w/55*32*0.17",y:"h*0.5+ h/55*32*0.25"},{action:"line",x:"w*0.5- w/55*32*0.28",y:"h*0.5-h/55*32*0.08"},{action:"line",x:"w*0.5",y:"h*0.5-h/55*32*0.28"},{action:"close"}]);Schema.addGlobalCommand("parallel_gateway",[{action:"move",x:"w*0.5 - Math.min(w,h)*0.04",y:"h*0.5 - h*0.5*0.5"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.04",y:"h*0.5 + h*0.5*0.5"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.04",y:"h*0.5 + h*0.5*0.5"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.04",y:"h*0.5 - h*0.5*0.5"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.04",y:"h*0.5 - h*0.5*0.5"},{action:"close"},{action:"move",x:"w*0.5 - w*0.5*0.5",y:"h*0.5 - Math.min(w,h)*0.04"},{action:"line",x:"w*0.5 - w*0.5*0.5",y:"h*0.5 + Math.min(w,h)*0.04"},{action:"line",x:"w*0.5 + w*0.5*0.5",y:"h*0.5 + Math.min(w,h)*0.04"},{action:"line",x:"w*0.5 + w*0.5*0.5",y:"h*0.5 - Math.min(w,h)*0.04"},{action:"line",x:"w*0.5 - w*0.5*0.5",y:"h*0.5 - Math.min(w,h)*0.04"},{action:"close"}]);Schema.addGlobalCommand("parallel_eventbased_gateway",[{action:"move",x:"w*0.5 - Math.min(w,h)*0.027",y:"h*0.5 - Math.min(w,h)*0.5*0.4"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.027",y:"h*0.5 - Math.min(w,h)*0.02"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.5*0.4",y:"h*0.5 - Math.min(w,h)*0.027"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.5*0.4",y:"h*0.5 + Math.min(w,h)*0.027"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.027",y:"h*0.5 + Math.min(w,h)*0.027"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.027",y:"h*0.5 + Math.min(w,h)*0.5*0.4"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.027",y:"h*0.5 + Math.min(w,h)*0.5*0.4"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.027",y:"h*0.5 + Math.min(w,h)*0.027"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.5*0.4",y:"h*0.5 + Math.min(w,h)*0.027"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.5*0.4",y:"h*0.5 - Math.min(w,h)*0.027"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.027",y:"h*0.5 - Math.min(w,h)*0.027"},{action:"line",x:"w*0.5 + Math.min(w,h)*0.027",y:"h*0.5 - Math.min(w,h)*0.5*0.4"},{action:"line",x:"w*0.5 - Math.min(w,h)*0.027",y:"h*0.5 - Math.min(w,h)*0.5*0.4"},{action:"close"}]);Schema.addGlobalCommand("data_in_object",[{action:"move",x:"w/3/4",y:"h/4/3+3"},{action:"line",x:"w/3/4*3.5",y:"h/4/3+3"},{action:"line",x:"w/3/4*3.5",y:"h/4/3-h/4/5+3"},{action:"line",x:"w/3/4*5",y:"h/4/2+3"},{action:"line",x:"w/3/4*3.5",y:"h/4/2+h/4/2-h/4/3+h/4/5+3"},{action:"line",x:"w/3/4*3.5",y:"h/4/2+h/4/2-h/4/3+3"},{action:"line",x:"w/3/4",y:"h/4/2+h/4/2-h/4/3+3"},{action:"line",x:"w/3/4",y:"h/4/3+3"},{action:"close"}]);Schema.addGlobalCommand("choreography_task",[{action:"move",x:"0",y:"6"},{action:"quadraticCurve",x1:"0",y1:"0",x:"6",y:"0"},{action:"line",x:"w-6",y:"0"},{action:"quadraticCurve",x1:"w",y1:"0",x:"w",y:"6"},{action:"line",x:"w",y:"h-6"},{action:"quadraticCurve",x1:"w",y1:"h",x:"w-6",y:"h"},{action:"line",x:"6",y:"h"},{action:"quadraticCurve",x1:"0",y1:"h",x:"0",y:"h-6"},{action:"line",x:"0",y:"6"},{action:"close"}]);Schema.addShape({name:"startEvent",title:startEventText,text:startEventText,category:"bpmn",groupName:"startEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:startEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:startEventFillStyleBeginColor,endColor:startEventFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}}]});Schema.addShape({name:"userTask",title:userTaskText,text:userTaskText,category:"bpmn",groupName:"task",dataAttributes:[{name:"loopCharacteristics",type:"list",value:"",category:"default",listItems:["","StandardLoopCharacteristics","MultipleLoopCharacteristics"]},{name:"isSequantial",type:"boolean",value:"true",category:"default"},{name:"isForCompensation",type:"boolean",value:"false",category:"default"},{name:"renderings",type:"string",value:"",category:"default"},{name:"implementation",type:"string",value:"",category:"default"},{name:"resources",type:"string",value:"",category:"default"},{name:"ioSpecification",type:"string",value:"",category:"default"},{name:"dataInputAssociations",type:"string",value:"",category:"default"},{name:"dataOutputAssociations",type:"string",value:"",category:"default"}],props:{w:100,h:70},lineStyle:{lineColor:userTaskLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:userTaskFillStyleBeginColor,endColor:userTaskFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"roundRectangle"}},{lineStyle:{lineWidth:1,lineColor:userTaskLineColor,lineStyle:"solid"},fillStyle:{type:"solid",color:"255,255,255"},actions:{ref:"user_task"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"exclusiveGateway",title:exclusiveGatewayText,text:exclusiveGatewayText,category:"bpmn",groupName:"bpmnGateway",dataAttributes:[{name:"gatewayDirection",type:"list",value:"",category:"default",listItems:["Unspecified,Converging,Diverging,Mixed"]},{name:"default",type:"string",value:"",category:"default"}],props:{w:50,h:50},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:gatewayLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:gatewayFillStyleBeginColor,endColor:gatewayFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"gateway0"}},{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:gatewayLineColor},actions:[{action:"move",x:"w*0.5 + w*0.5*0.4 - w*0.02",y:"h*0.5 - h*0.5*0.4 - h*0.02"},{action:"line",x:"w*0.5 - w*0.5*0.4 - w*0.02",y:"h*0.5 + h*0.5*0.4 - h*0.02"},{action:"line",x:"w*0.5 - w*0.5*0.4 + w*0.02",y:"h*0.5 + h*0.5*0.4 + h*0.02"},{action:"line",x:"w*0.5 + w*0.5*0.4 + w*0.02",y:"h*0.5 - h*0.5*0.4 + h*0.02"},{action:"line",x:"w*0.5 + w*0.5*0.4 - w*0.02",y:"h*0.5 - h*0.5*0.4 - h*0.02"},{action:"close"}]},{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:gatewayLineColor},actions:[{action:"move",x:"w*0.5",y:"h*0.5"},{action:"move",x:"w*0.5 - w*0.5*0.4 + w*0.02",y:"h*0.5 - h*0.5*0.4 - h*0.02"},{action:"line",x:"w*0.5 + w*0.5*0.4 + w*0.02",y:"h*0.5 + h*0.5*0.4 - h*0.02"},{action:"line",x:"w*0.5 + w*0.5*0.4 - w*0.02",y:"h*0.5 + h*0.5*0.4 + h*0.02"},{action:"line",x:"w*0.5 - w*0.5*0.4 - w*0.02",y:"h*0.5 - h*0.5*0.4 + h*0.02"},{action:"close"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"gateway0"}}]});Schema.addShape({name:"messageStartEvent",title:messageStartEventText,text:messageStartEventText,category:"bpmn",groupName:"startEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:startEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:startEventFillStyleBeginColor,endColor:startEventFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineStyle:"solid",lineColor:startEventLineColor},fillStyle:{type:"solid",color:startEventContentColor},actions:{ref:"message0"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"timerStartEvent",title:timerStartEventText,text:timerStartEventText,category:"bpmn",groupName:"startEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:startEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:startEventFillStyleBeginColor,endColor:startEventFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineStyle:"solid",lineColor:startEventLineColor},fillStyle:{type:"solid",color:startEventContentColor},actions:{ref:"timer0"}},{lineStyle:{lineWidth:1,lineStyle:"solid"},actions:{ref:"timer0_needle"}},{lineStyle:{lineStyle:"solid"},actions:{ref:"timer0_num"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"signalStartEvent",title:signalStartEventText,text:signalStartEventText,category:"bpmn",groupName:"startEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:startEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:startEventFillStyleBeginColor,endColor:startEventFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineStyle:"solid",lineColor:startEventLineColor},fillStyle:{type:"solid",color:startEventContentColor},actions:{ref:"signal0"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});function drawChoreographyIcon(h,k,l){var i=[{actions:[{action:"move",x:0,y:4},{action:"quadraticCurve",x1:0,y1:0,x:4,y:0},{action:"line",x:h-4,y:0},{action:"quadraticCurve",x1:h,y1:0,x:h,y:4},{action:"line",x:h,y:k-4},{action:"quadraticCurve",x1:h,y1:k,x:h-4,y:k},{action:"line",x:4,y:k},{action:"quadraticCurve",x1:0,y1:k,x:0,y:k-4},{action:"line",x:0,y:4},{action:"close"}]},{actions:[{action:"move",x:0,y:4},{action:"quadraticCurve",x1:0,y1:0,x:4,y:0},{action:"line",x:h-4,y:0},{action:"quadraticCurve",x1:h,y1:0,x:h,y:4},{action:"line",x:h,y:5},{action:"line",x:0,y:5},{action:"line",x:0,y:4},{action:"close"}]},{fillStyle:{color:"194,194,194"},actions:[{action:"move",x:0,y:k-5},{action:"line",x:h,y:k-5},{action:"line",x:h,y:k-4},{action:"quadraticCurve",x1:h,y1:k,x:h-4,y:k},{action:"line",x:4,y:k},{action:"quadraticCurve",x1:0,y1:k,x:0,y:k-4},{action:"close"}]}];if(l){for(var g=0;g<i.length;g++){var j=i[g];j.lineStyle={lineWidth:3}}}return i}function createParticipant(f){var h="participantA";var g="participantB";if(f.name=="callChoreographyGlobal"||f.name=="callChoreography"){h="callParticipantA";g="callParticipantB"}var i=Model.create(h,f.props.x,f.props.y);i.props.w=f.props.w;i.props.zindex=f.props.zindex+0.5;i.parent=f.id;Designer.painter.renderShape(i);var j=Model.create(g,f.props.x,f.props.y);j.props.w=f.props.w;j.props.y=f.props.y+f.props.h-j.props.h;j.props.zindex=f.props.zindex+0.5;j.parent=f.id;Designer.painter.renderShape(j);f.children=[i.id,j.id];Model.addMulti([i,j])}Schema.addShape({name:"participantA",title:"Participant",text:"Participant",category:"bpmn",dataAttributes:[{name:"participantMultiplicity",type:"string",value:"",category:"default"},{name:"maximum",type:"string",value:"1",category:"default"},{name:"participantBandKind",type:"string",value:"top_initiating",category:"default"}],attribute:{linkable:false,rotatable:false,visible:false},props:{w:150,h:25},resizeDir:[],anchors:[],textBlock:{x:5,y:0,w:"w-10",h:"h"},path:[{actions:[{action:"move",x:0,y:6},{action:"quadraticCurve",x1:0,y1:0,x:6,y:0},{action:"line",x:"w-6",y:0},{action:"quadraticCurve",x1:"w",y1:0,x:"w",y:6},{action:"line",x:"w",y:"h"},{action:"line",x:0,y:"h"},{action:"line",x:0,y:6},{action:"close"}]}]});Schema.addShape({name:"participantB",title:"Participant",text:"Participant",category:"bpmn",dataAttributes:[{name:"participantMultiplicity",type:"string",value:"set",category:"default"},{name:"maximum",type:"string",value:"1",category:"default"},{name:"participantBandKind",type:"string",value:"bottom_non_initiating",category:"default"}],attribute:{linkable:false,rotatable:false,visible:false},props:{w:150,h:25},resizeDir:[],anchors:[],textBlock:{x:5,y:0,w:"w-10",h:"h"},fillStyle:{color:"194,194,194"},path:[{actions:[{action:"move",x:0,y:0},{action:"line",x:"w",y:0},{action:"line",x:"w",y:"h-6"},{action:"quadraticCurve",x1:"w",y1:"h",x:"w-6",y:"h"},{action:"line",x:6,y:"h"},{action:"quadraticCurve",x1:0,y1:"h",x:0,y:"h-6"},{action:"close"}]}]});Schema.addShape({name:"callParticipantA",title:"Participant",text:"Participant",category:"bpmn",dataAttributes:[{name:"participantMultiplicity",type:"string",value:"",category:"default"},{name:"maximum",type:"string",value:"1",category:"default"},{name:"participantBandKind",type:"string",value:"top_initiating",category:"default"}],attribute:{linkable:false,rotatable:false,visible:false},props:{w:150,h:25},resizeDir:[],anchors:[],textBlock:{x:5,y:0,w:"w-10",h:"h"},path:[{lineStyle:{lineWidth:"lineWidth+ 2"},actions:[{action:"move",x:0,y:6},{action:"quadraticCurve",x1:0,y1:0,x:6,y:0},{action:"line",x:"w-6",y:0},{action:"quadraticCurve",x1:"w",y1:0,x:"w",y:6},{action:"line",x:"w",y:"h"},{action:"line",x:0,y:"h"},{action:"line",x:0,y:6},{action:"close"}]}]});Schema.addShape({name:"callParticipantB",title:"Participant",text:"Participant",category:"bpmn",dataAttributes:[{name:"participantMultiplicity",type:"string",value:"set",category:"default"},{name:"maximum",type:"string",value:"1",category:"default"},{name:"participantBandKind",type:"string",value:"bottom_non_initiating",category:"default"}],attribute:{linkable:false,rotatable:false,visible:false},props:{w:150,h:25},resizeDir:[],anchors:[],textBlock:{x:5,y:0,w:"w-10",h:"h"},fillStyle:{color:"194,194,194"},path:[{lineStyle:{lineWidth:"lineWidth+ 2"},actions:[{action:"move",x:0,y:0},{action:"line",x:"w",y:0},{action:"line",x:"w",y:"h-6"},{action:"quadraticCurve",x1:"w",y1:"h",x:"w-6",y:"h"},{action:"line",x:6,y:"h"},{action:"quadraticCurve",x1:0,y1:"h",x:0,y:"h-6"},{action:"close"}]}]});Schema.addShape({name:"timerIntermediateCatchEvent",title:timerIntermediateCatchEventText,text:timerIntermediateCatchEventText,category:"bpmn",groupName:"intermediateEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:intermediateCatchEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:intermediateCatchEventFillStyleBeginColor,endColor:intermediateCatchEventFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineStyle:"solid",lineColor:intermediateCatchEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:intermediateCatchEventFillStyleBeginColor,endColor:intermediateCatchEventFillStyleBndColor,angle:0},actions:{ref:"inneround"}},{lineStyle:{lineStyle:"solid",lineColor:intermediateCatchEventLineColor},fillStyle:{type:"solid",color:intermediateCatchEventContentColor,},actions:{ref:"timer0"}},{lineStyle:{lineWidth:1,lineStyle:"solid"},actions:{ref:"timer0_needle"}},{lineStyle:{lineWidth:2,lineStyle:"solid"},actions:{ref:"timer0_num"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"messageIntermediateCatchEvent",title:messageIntermediateCatchEventText,text:messageIntermediateCatchEventText,category:"bpmn",groupName:"intermediateEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:intermediateCatchEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:intermediateCatchEventFillStyleBeginColor,endColor:intermediateCatchEventFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineStyle:"solid",lineColor:intermediateCatchEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:intermediateCatchEventFillStyleBeginColor,endColor:intermediateCatchEventFillStyleBndColor,angle:0},actions:{ref:"inneround"}},{lineStyle:{lineStyle:"solid",lineColor:intermediateCatchEventLineColor},fillStyle:{type:"solid",color:intermediateCatchEventContentColor,},actions:{ref:"message0"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"signalIntermediateCatchEvent",title:signalIntermediateCatchEventText,text:signalIntermediateCatchEventText,category:"bpmn",groupName:"intermediateEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:intermediateCatchEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:intermediateCatchEventFillStyleBeginColor,endColor:intermediateCatchEventFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineStyle:"solid",lineColor:intermediateCatchEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:intermediateCatchEventFillStyleBeginColor,endColor:intermediateCatchEventFillStyleBndColor,angle:0},actions:{ref:"inneround"}},{lineStyle:{lineStyle:"solid",lineColor:intermediateCatchEventLineColor},fillStyle:{type:"solid",color:intermediateCatchEventContentColor,},actions:{ref:"signal0"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"messageIntermediateThrowingEvent",title:messageIntermediateThrowingEventText,text:messageIntermediateThrowingEventText,category:"bpmn",groupName:"intermediateEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:intermediateThrowingEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:intermediateThrowingEventFillStyleBeginColor,endColor:intermediateThrowingEventFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineStyle:"solid",lineColor:intermediateThrowingEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:intermediateThrowingEventFillStyleBeginColor,endColor:intermediateThrowingEventFillStyleBndColor,angle:0},actions:{ref:"inneround"}},{lineStyle:{lineWidth:1,lineColor:intermediateThrowingEventFillStyleBeginColor,lineStyle:"solid"},fillStyle:{type:"solid",color:"50,50,50"},actions:{ref:"message4"}},{lineStyle:{lineWidth:1,lineColor:intermediateThrowingEventFillStyleBeginColor,lineStyle:"solid"},fillStyle:{type:"solid",color:"50,50,50"},actions:{ref:"message4_0"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"signalIntermediateThrowingEvent",title:signalIntermediateThrowingEventText,text:signalIntermediateThrowingEventText,category:"bpmn",groupName:"intermediateEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:intermediateThrowingEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:intermediateThrowingEventFillStyleBeginColor,endColor:intermediateThrowingEventFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineStyle:"solid",lineColor:intermediateThrowingEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:intermediateThrowingEventFillStyleBeginColor,endColor:intermediateThrowingEventFillStyleBndColor,angle:0},actions:{ref:"inneround"}},{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:"50,50,50"},actions:{ref:"signal0"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"messageBoundaryInterrputingEvent",title:messageBoundaryInterrputingEventText,text:messageBoundaryInterrputingEventText,category:"bpmn",groupName:"boundaryEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:boundaryEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:boundaryEventFillStyleBeginColor,endColor:boundaryEventFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineStyle:"solid",lineColor:boundaryEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:boundaryEventFillStyleBeginColor,endColor:boundaryEventFillStyleBndColor,angle:0},actions:{ref:"inneround"}},{lineStyle:{lineStyle:"solid"},fillStyle:{type:"solid",color:boundaryEventContentColor},actions:{ref:"message0"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"signalBoundaryInterrputingEvent",title:signalBoundaryInterrputingEventText,text:signalBoundaryInterrputingEventText,category:"bpmn",groupName:"boundaryEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:boundaryEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:boundaryEventFillStyleBeginColor,endColor:boundaryEventFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineStyle:"solid",lineColor:boundaryEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:boundaryEventFillStyleBeginColor,endColor:boundaryEventFillStyleBndColor,angle:0},actions:{ref:"inneround"}},{lineStyle:{lineStyle:"solid"},fillStyle:{type:"solid",color:boundaryEventContentColor},actions:{ref:"signal0"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"compensationBoundaryInterrputingEvent",title:compensationBoundaryInterrputingEventText,text:compensationBoundaryInterrputingEventText,category:"bpmn",groupName:"boundaryEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:boundaryEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:boundaryEventFillStyleBeginColor,endColor:boundaryEventFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineStyle:"solid",lineColor:boundaryEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:boundaryEventFillStyleBeginColor,endColor:boundaryEventFillStyleBndColor,angle:0},actions:{ref:"inneround"}},{lineStyle:{lineStyle:"solid"},fillStyle:{type:"solid",color:boundaryEventContentColor},actions:{ref:"compensation0"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"errorBoundaryInterrputingEvent",title:errorBoundaryInterrputingEventText,text:errorBoundaryInterrputingEventText,category:"bpmn",groupName:"boundaryEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:boundaryEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:boundaryEventFillStyleBeginColor,endColor:boundaryEventFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineStyle:"solid",lineColor:boundaryEventLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:boundaryEventFillStyleBeginColor,endColor:boundaryEventFillStyleBndColor,angle:0},actions:{ref:"inneround"}},{lineStyle:{lineStyle:"solid"},fillStyle:{type:"solid",color:boundaryEventContentColor},actions:{ref:"error0"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"endEvent",title:endEventText,text:endEventText,category:"bpmn",groupName:"endEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:endEventFillStyleBeginColor,endColor:endEventFillStyleBndColor,angle:0},lineStyle:{lineColor:endEventLineColor},path:[{lineStyle:{lineWidth:"lineWidth + 2",lineStyle:"solid"},actions:{ref:"round"}}]});Schema.addShape({name:"terminate",title:terminateEndEventText,text:terminateEndEventText,category:"bpmn",groupName:"endEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:endEventFillStyleBeginColor,endColor:endEventFillStyleBndColor,angle:0},lineStyle:{lineColor:endEventLineColor,},path:[{lineStyle:{lineWidth:"lineWidth + 2",lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:"50,50,50"},actions:{ref:"g_round"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"messageEndEvent",title:messageEndEventText,text:messageEndEventText,category:"bpmn",groupName:"endEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:endEventFillStyleBeginColor,endColor:endEventFillStyleBndColor,angle:0},lineStyle:{lineColor:endEventLineColor,},path:[{lineStyle:{lineWidth:"lineWidth + 2",lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineWidth:1,lineColor:endEventFillStyleBndColor,lineStyle:"solid"},fillStyle:{type:"solid",color:"50,50,50"},actions:{ref:"message4"}},{lineStyle:{lineWidth:1,lineColor:endEventFillStyleBeginColor,lineStyle:"solid"},fillStyle:{type:"solid",color:"50,50,50"},actions:{ref:"message4_0"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"signalEndEvent",title:signalEndEventText,text:signalEndEventText,category:"bpmn",groupName:"endEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:endEventFillStyleBeginColor,endColor:endEventFillStyleBndColor,angle:0},lineStyle:{lineColor:endEventLineColor,},path:[{lineStyle:{lineWidth:"lineWidth + 2",lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:"50,50,50"},actions:{ref:"signal0"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"errorEndEvent",title:errorEndEventText,text:errorEndEventText,category:"bpmn",groupName:"endEvent",props:{w:40,h:40},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:endEventFillStyleBeginColor,endColor:endEventFillStyleBndColor,angle:0},lineStyle:{lineColor:endEventLineColor,},path:[{lineStyle:{lineWidth:"lineWidth + 2",lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:"50,50,50"},actions:{ref:"cancel3"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"serviceTask",title:serviceTaskText,text:serviceTaskText,category:"bpmn",groupName:"task",dataAttributes:[{name:"loopCharacteristics",type:"list",value:"",category:"default",listItems:["","StandardLoopCharacteristics","MultipleLoopCharacteristics"]},{name:"isSequantial",type:"boolean",value:"true",category:"default"},{name:"isForCompensation",type:"boolean",value:"false",category:"default"},{name:"implementation",type:"string",value:"",category:"default"},{name:"operationRef",type:"string",value:"",category:"default"},{name:"ioSpecification",type:"string",value:"",category:"default"},{name:"dataInputAssociations",type:"string",value:"",category:"default"},{name:"dataOutputAssociations",type:"string",value:"",category:"default"}],props:{w:100,h:70},lineStyle:{lineColor:servicesTaskLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:servicesTaskFillStyleBeginColor,endColor:servicesTaskFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"roundRectangle"}},{lineStyle:{lineWidth:1,lineColor:servicesTaskLineColor,lineStyle:"solid"},fillStyle:{type:"solid"},actions:{ref:"service_task"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"manualTask",title:manualTaskText,text:manualTaskText,category:"bpmn",groupName:"task",dataAttributes:[{name:"loopCharacteristics",type:"list",value:"",category:"default",listItems:["","StandardLoopCharacteristics","MultipleLoopCharacteristics"]},{name:"isSequantial",type:"boolean",value:"true",category:"default"},{name:"isForCompensation",type:"boolean",value:"false",category:"default"}],props:{w:100,h:70},lineStyle:{lineColor:taskLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:taskFillStyleBeginColor,endColor:taskFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"roundRectangle"}},{lineStyle:{lineWidth:1,lineColor:taskLineColor,lineStyle:"solid"},fillStyle:{type:"solid",color:"255,255,255"},actions:{ref:"manual_task"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"receiveTask",title:receiveTaskText,text:receiveTaskText,category:"bpmn",groupName:"task",dataAttributes:[{name:"loopCharacteristics",type:"list",value:"",category:"default",listItems:["","StandardLoopCharacteristics","MultipleLoopCharacteristics"]},{name:"isSequantial",type:"boolean",value:"true",category:"default"},{name:"isForCompensation",type:"boolean",value:"false",category:"default"}],props:{w:100,h:70},lineStyle:{lineColor:taskLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:taskFillStyleBeginColor,endColor:taskFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"roundRectangle"}},{lineStyle:{lineWidth:1,lineColor:taskLineColor,lineStyle:"solid"},fillStyle:{type:"solid",color:"255,255,255"},actions:{ref:"receive_task"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"sendTask",title:sendTaskText,text:sendTaskText,category:"bpmn",groupName:"task",dataAttributes:[{name:"loopCharacteristics",type:"list",value:"",category:"default",listItems:["","StandardLoopCharacteristics","MultipleLoopCharacteristics"]},{name:"isSequantial",type:"boolean",value:"true",category:"default"},{name:"isForCompensation",type:"boolean",value:"false",category:"default"}],props:{w:100,h:70},lineStyle:{lineColor:taskLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:taskFillStyleBeginColor,endColor:taskFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"roundRectangle"}},{lineStyle:{lineWidth:1,lineColor:taskFillStyleBeginColor,lineStyle:"solid"},fillStyle:{type:"solid",color:"50,50,50",},actions:{ref:"receive_task_dark"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"scriptTask",title:scriptTaskText,text:scriptTaskText,category:"bpmn",groupName:"task",dataAttributes:[{name:"loopCharacteristics",type:"list",value:"",category:"default",listItems:["","StandardLoopCharacteristics","MultipleLoopCharacteristics"]},{name:"isSequantial",type:"boolean",value:"true",category:"default"},{name:"isForCompensation",type:"boolean",value:"false",category:"default"}],props:{w:100,h:70},lineStyle:{lineColor:taskLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:taskFillStyleBeginColor,endColor:taskFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"roundRectangle"}},{lineStyle:{lineWidth:1,lineColor:taskLineColor,lineStyle:"solid"},fillStyle:{type:"solid"},actions:{ref:"script_task"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"businessRuleTask",title:businessRuleTaskText,text:businessRuleTaskText,category:"bpmn",groupName:"task",dataAttributes:[{name:"loopCharacteristics",type:"list",value:"",category:"default",listItems:["","StandardLoopCharacteristics","MultipleLoopCharacteristics"]},{name:"isSequantial",type:"boolean",value:"true",category:"default"},{name:"isForCompensation",type:"boolean",value:"false",category:"default"}],props:{w:100,h:70},lineStyle:{lineColor:taskLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:taskFillStyleBeginColor,endColor:taskFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"roundRectangle"}},{lineStyle:{lineWidth:1,lineColor:taskLineColor,lineStyle:"solid"},fillStyle:{type:"solid"},actions:{ref:"business_rule"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"callActivityCallingProcess",title:callActivityCallingProcessText,text:callActivityCallingProcessText,category:"bpmn",groupName:"",dataAttributes:[{name:"loopCharacteristics",type:"list",value:"",category:"default",listItems:["","StandardLoopCharacteristics","MultipleLoopCharacteristics"]},{name:"isSequantial",type:"boolean",value:"true",category:"default"},{name:"isForCompensation",type:"boolean",value:"false",category:"default"},{name:"renderings",type:"string",value:"",category:"default"},{name:"implementation",type:"string",value:"",category:"default"},{name:"resources",type:"string",value:"",category:"default"},{name:"ioSpecification",type:"string",value:"",category:"default"},{name:"dataInputAssociations",type:"string",value:"",category:"default"},{name:"dataOutputAssociations",type:"string",value:"",category:"default"}],attribute:{container:true,markers:["expand"]},props:{w:100,h:70},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:"201,201,252",endColor:"160,160,211",angle:0},path:[{lineStyle:{lineWidth:"lineWidth + 2",lineStyle:"solid"},actions:{ref:"roundRectangle"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"transaction",title:transactionText,text:transactionText,category:"bpmn",groupName:"",attribute:{container:true},dataAttributes:[{name:"startQuantity",type:"number",value:"1",category:"default"},{name:"completionQuantity",type:"number",value:"1",category:"default"},{name:"default",type:"string",value:"",category:"default"},{name:"ioSpecification",type:"string",value:"",category:"default"},{name:"dataInputAssociations",type:"string",value:"",category:"default"},{name:"dataOutputAssociations",type:"string",value:"",category:"default"}],props:{w:200,h:140},path:[{fillStyle:{type:"none"},lineStyle:{lineStyle:"solid"},actions:{ref:"roundRectangle"}},{fillStyle:{type:"none"},lineStyle:{lineStyle:"solid"},actions:{ref:"inner_roundRectangle"}}]});Schema.addShape({name:"inclusiveGateway",title:inclusiveGatewayText,text:inclusiveGatewayText,category:"bpmn",groupName:"bpmnGateway",dataAttributes:[{name:"gatewayDirection",type:"list",value:"",category:"default",listItems:["Unspecified,Converging,Diverging,Mixed"]}],props:{w:50,h:50},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:gatewayLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:gatewayFillStyleBeginColor,endColor:gatewayFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"gateway0"}},{lineStyle:{lineStyle:"solid",lineColor:gatewayLineColor},fillStyle:{type:"solid",color:gatewayContentColor},actions:{ref:"g_round"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"gateway0"}}]});Schema.addShape({name:"complexGateway",title:complexGatewayText,text:complexGatewayText,category:"bpmn",groupName:"bpmnGateway",dataAttributes:[{name:"gatewayDirection",type:"list",value:"",category:"default",listItems:["Unspecified,Converging,Diverging,Mixed"]},{name:"sequeneceFlow",type:"string",value:"",category:"default"},{name:"activationCondition",type:"string",value:"",category:"default"},{name:"activationCount",type:"number",value:"",category:"default"},{name:"waitingForStart",type:"boolean",value:"true",category:"default"}],props:{w:50,h:50},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:gatewayLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:gatewayFillStyleBeginColor,endColor:gatewayFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"gateway0"}},{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:gatewayLineColor},actions:{ref:"complex_gateway0"}},{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:gatewayLineColor},actions:{ref:"complex_gateway1"}},{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:gatewayLineColor},actions:{ref:"complex_gateway2"}},{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:gatewayLineColor},actions:{ref:"complex_gateway3"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"gateway0"}}]});Schema.addShape({name:"eventBasedGateway",title:eventBasedGatewayText,text:eventBasedGatewayText,category:"bpmn",groupName:"bpmnGateway",dataAttributes:[{name:"gatewayDirection",type:"list",value:"",category:"default",listItems:["Unspecified,Converging,Diverging,Mixed"]},{name:"instantiate",type:"boolean",value:"false",category:"default"}],props:{w:50,h:50},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:gatewayLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:gatewayFillStyleBeginColor,endColor:gatewayFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"gateway0"}},{lineStyle:{lineStyle:"solid",lineColor:gatewayLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:gatewayFillStyleBeginColor,endColor:gatewayFillStyleBndColor,angle:0},actions:{ref:"event_based_gateway"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"gateway0"}}]});Schema.addShape({name:"parallelGateway",title:parallelGatewayText,text:parallelGatewayText,category:"bpmn",groupName:"bpmnGateway",dataAttributes:[{name:"gatewayDirection",type:"list",value:"",category:"default",listItems:["Unspecified,Converging,Diverging,Mixed"]}],props:{w:50,h:50},textBlock:{x:"w/2-60",y:"h",w:"120",h:"30"},lineStyle:{lineColor:gatewayLineColor},fillStyle:{type:"gradient",color:"255,255,255",gradientType:"linear",beginColor:gatewayFillStyleBeginColor,endColor:gatewayFillStyleBndColor,angle:0},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"gateway0"}},{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:gatewayLineColor},actions:{ref:"parallel_gateway"}},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"gateway0"}}]});Schema.addShape({name:"group",title:groupText,text:groupText,category:"bpmn",attribute:{editable:true},props:{w:200,h:140},textBlock:{x:"10",y:"0",w:"w-20",h:"h"},fontStyle:{textAlign:"top",vAlign:"left"},path:[{lineStyle:{lineWidth:2,lineStyle:"dashed"},fillStyle:{type:"none"},actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"textAnnotation",title:textAnnotationText,text:textAnnotationText,category:"bpmn",dataAttributes:[{name:"text",type:"string",value:"",category:"default"}],props:{w:100,h:70},anchors:[{x:"0",y:"h*0.5"},{x:"0",y:"h*0.5"},{x:"0",y:"h*0.5"},{x:"0",y:"h*0.5"}],path:[{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"rectangle"}},{fillStyle:{type:"none"},lineStyle:{lineStyle:"solid"},actions:[{action:"move",x:"w/6",y:"0"},{action:"line",x:"0",y:"0"},{action:"line",x:"0",y:"h"},{action:"line",x:"w/6",y:"h"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"rectangle"}}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/epc.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/epc.js
                                                  new file mode 100644
                                                  index 00000000..27c82383
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/epc.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"epc",text:"EPC 事件过程链",dataAttributes:[{name:"序号",type:"number",value:"",category:"default"},{name:"名称",type:"string",value:"",category:"default"},{name:"所有者",type:"string",value:"",category:"default"},{name:"连接",type:"link",value:"",category:"default"},{name:"便笺",type:"string",value:"",category:"default"},{name:"成本",type:"number",value:"",category:"default"},{name:"时间",type:"number",value:"",category:"default"},{name:"部门",type:"string",value:"",category:"default"},{name:"输入",type:"string",value:"",category:"default"},{name:"输出",type:"string",value:"",category:"default"},{name:"风险",type:"string",value:"",category:"default"},{name:"备注",type:"string",value:"",category:"default"}]});Schema.addShape({name:"event",title:"事件",category:"epc",props:{w:100,h:70},lineStyle:{lineWidth:2,lineColor:"165,8,179"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"232,115,242",endColor:"209,43,224",angle:Math.PI*0.5},path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h"},{action:"line",x:"Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"h*0.5"},{action:"close"}]}]});Schema.addShape({name:"method",title:"功能",category:"epc",props:{w:100,h:70},lineStyle:{lineWidth:2,lineColor:"0,100,0"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"0,255,0",endColor:"0,180,0",angle:Math.PI*0.5},path:[{actions:[{action:"move",x:"w*0",y:"5"},{action:"quadraticCurve",x1:"0",y1:"0",x:"5",y:"0"},{action:"line",x:"w-5",y:"0"},{action:"quadraticCurve",x1:"w",y1:"0",x:"w",y:"5"},{action:"line",x:"w",y:"h-5"},{action:"quadraticCurve",x1:"w",y1:"h",x:"w-5",y:"h"},{action:"line",x:"5",y:"h"},{action:"quadraticCurve",x1:"0",y1:"h",x:"0",y:"h-5"},{action:"line",x:"0",y:"5"},{action:"close"}]}]});Schema.addShape({name:"procedure",title:"过程",category:"epc",props:{w:100,h:70},lineStyle:{lineWidth:2,lineColor:"68,170,170"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"239,253,253",endColor:"160,255,255",angle:Math.PI*0.5},textBlock:[{position:{x:"0",y:"0",w:"w*0.8",h:"h*0.8"}}],path:[{actions:[{action:"move",x:"0",y:"4*0.8"},{action:"quadraticCurve",x1:"0",y1:"0",x:"4*0.8",y:"0"},{action:"line",x:"(w-4)*0.8",y:"0"},{action:"quadraticCurve",x1:"w*0.8",y1:"0",x:"w*0.8",y:"4*0.8"},{action:"line",x:"w*0.8",y:"(h-4)*0.8"},{action:"quadraticCurve",x1:"w*0.8",y1:"h*0.8",x:"(w-4)*0.8",y:"h*0.8"},{action:"line",x:"4*0.8",y:"h*0.8"},{action:"quadraticCurve",x1:"0",y1:"h*0.8",x:"0",y:"(h-4)*0.8"},{action:"line",x:"0",y:"4*0.8"},{action:"move",x:"w*0.8",y:"6"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"(w-4)*0.8",y:"h"},{action:"line",x:"w*3/8",y:"h"},{action:"line",x:"w/4",y:"h*0.8"},{action:"line",x:"(w-4)*0.8",y:"h*0.8"},{action:"quadraticCurve",x1:"w*0.8",y1:"h*0.8",x:"w*0.8",y:"(h-4)*0.8"}]}]});Schema.addShape({name:"epcData",title:"数据",category:"epc",props:{w:100,h:70},lineStyle:{lineWidth:2,lineColor:"11,108,195"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"157,215,237",endColor:"137,157,192",angle:Math.PI*0.5},path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});Schema.addShape({name:"form",title:"表单",category:"epc",props:{w:100,h:70},lineStyle:{lineWidth:2,lineColor:"11,108,195"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"157,215,237",endColor:"137,157,192",angle:Math.PI*0.5},anchors:[{x:"w*0.5",y:"0"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{x:"0",y:"h*0.5"}],textBlock:[{position:{x:"0",y:"0",w:"w",h:"h*0.9"}}],path:[{actions:[{action:"move",x:"0",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"line",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"quadraticCurve",x1:"w*0.75",y1:"h-3*Math.min(Math.min(w,h)/8,w/12)",x:"w*0.5",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"quadraticCurve",x1:"w*0.25",y1:"h+Math.min(Math.min(w,h)/8,w/12)",x:"0",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"close"}]}]});Schema.addShape({name:"forms",title:"多个表单",category:"epc",props:{w:100,h:70},lineStyle:{lineWidth:2,lineColor:"11,108,195"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"157,215,237",endColor:"137,157,192",angle:Math.PI*0.5},textBlock:[{position:{x:"0",y:"h*0.2",w:"w*0.8",h:"h*0.8"}}],anchors:[{x:"w*0.5",y:"h-h/8"},{x:"0",y:"h*0.5"},{x:"w*0.5",y:"0"},{x:"w",y:"h*0.5"}],path:[{actions:[{action:"move",x:"0",y:"h*0.2"},{action:"line",x:"w*0.1",y:"h*0.2"},{action:"line",x:"w*0.1",y:"h*0.1"},{action:"line",x:"w*0.2",y:"h*0.1"},{action:"line",x:"w*0.2",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h*0.7"},{action:"line",x:"w*0.9",y:"h*0.7"},{action:"line",x:"w*0.9",y:"h*0.8"},{action:"line",x:"w*0.8",y:"h*0.8"},{action:"line",x:"w*0.8",y:"h*0.9"},{action:"quadraticCurve",x1:"w*0.75*0.8",y1:"h*0.8",x:"w*0.8*0.5",y:"h*0.9"},{action:"quadraticCurve",x1:"w*0.25*0.8",y1:"h",x:"0",y:"h*0.9"},{action:"line",x:"0",y:"h*0.2"},{action:"move",x:"0",y:"h*0.2"},{action:"line",x:"w*0.8",y:"h*0.2"},{action:"line",x:"w*0.8",y:"h*0.9"},{action:"quadraticCurve",x1:"w*0.75*0.8",y1:"h*0.8",x:"w*0.8*0.5",y:"h*0.9"},{action:"quadraticCurve",x1:"w*0.25*0.8",y1:"h",x:"0",y:"h*0.9"},{action:"line",x:"0",y:"h*0.2"},{action:"move",x:"w*0.1",y:"h*0.2"},{action:"line",x:"w*0.1",y:"h*0.1"},{action:"line",x:"w*0.9",y:"h*0.1"},{action:"line",x:"w*0.9",y:"h*0.8"},{action:"line",x:"w*0.8",y:"h*0.8"},{action:"line",x:"w*0.8",y:"h*0.2"}]}]});Schema.addShape({name:"database",title:"数据库/系统",category:"epc",props:{w:100,h:70},lineStyle:{lineColor:"11,108,195"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"157,215,237",endColor:"137,157,192",angle:Math.PI*0.5},textBlock:[{position:{x:"0",y:"h*0.14",w:"w",h:"h-h*0.14"}}],path:[{actions:[{action:"move",x:"0",y:"h*0.14"},{action:"curve",x1:"0",y1:"-h*0.04",x2:"w",y2:"-h*0.04",x:"w",y:"h*0.14"},{action:"line",x:"w",y:"h*0.86"},{action:"curve",x1:"w",y1:"h*1.04",x2:"0",y2:"h*1.04",x:"0",y:"h*0.86"},{action:"line",x:"0",y:"h*0.14"},{action:"close"}]},{actions:[{action:"move",x:"w",y:"h*0.14"},{action:"curve",x1:"w",y1:"h*0.3",x2:"0",y2:"h*0.3",x:"0",y:"h*0.14"},{action:"curve",x1:"0",y1:"-h*0.04",x2:"w",y2:"-h*0.04",x:"w",y:"h*0.14"},{action:"close"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:"0",y:"h*0.1"},{action:"quadraticCurve",x1:"w*0.5",y1:"-h*0.1",x:"w",y:"h*0.1"},{action:"line",x:"w",y:"h*0.9"},{action:"quadraticCurve",x1:"w*0.5",y1:"h*1.1",x:"0",y:"h*0.9"},{action:"line",x:"0",y:"h*0.1"},{action:"close"}]}]});Schema.addShape({name:"and",title:"与",category:"epc",props:{w:40,h:40},fillStyle:{color:"238,238,238"},textBlock:[],path:[{actions:{ref:"round"}},{actions:[{action:"move",x:"w/2-w*0.15",y:"h/2+h*0.13"},{action:"line",x:"w*0.5",y:"h/2-h*0.15"},{action:"line",x:"w/2+w*0.15",y:"h/2+h*0.13"},{action:"line",x:"w*0.5",y:"h/2-h*0.15"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"or",title:"或",category:"epc",props:{w:40,h:40},fillStyle:{color:"238,238,238"},textBlock:[],path:[{actions:{ref:"round"}},{actions:[{action:"move",x:"w/2-w*0.15",y:"h/2-h*0.13"},{action:"line",x:"w*0.5",y:"h/2+h*0.15"},{action:"line",x:"w/2+w*0.15",y:"h/2-h*0.13"},{action:"line",x:"w*0.5",y:"h/2+h*0.15"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"xor",title:"异或",category:"epc",props:{w:40,h:40},fillStyle:{color:"238,238,238"},textBlock:[],path:[{actions:{ref:"round"}},{actions:[{action:"move",x:"w/2-w*0.15",y:"h/2-h*0.15"},{action:"line",x:"w/2+w*0.15",y:"h/2+h*0.15"},{action:"move",x:"w/2+w*0.15",y:"h/2-h*0.15"},{action:"line",x:"w/2-w*0.15",y:"h/2+h*0.15"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/er.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/er.js
                                                  new file mode 100644
                                                  index 00000000..bd96f128
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/er.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"er",text:"实体关系图",dataAttributes:[]});Schema.addShape({name:"entity",title:"实体",category:"er",props:{w:100,h:70},path:[{actions:{ref:"rectangle"}}]});Schema.addShape({name:"derivedAttribute",title:"派生属性",category:"er",props:{w:100,h:70},path:[{lineStyle:{lineStyle:"dashed"},actions:{ref:"round"}}]});Schema.addShape({name:"keyAttribute",title:"键值属性",category:"er",props:{w:100,h:70},fontStyle:{underline:true},path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}}]});Schema.addShape({name:"multivaluedAttribute",title:"多值属性",category:"er",props:{w:100,h:70},path:[{actions:[{action:"move",x:"0",y:"h/2"},{action:"curve",x1:"0",y1:"-h/6",x2:"w",y2:" -h/6",x:"w",y:" h/2"},{action:"curve",x1:"w",y1:"h+h/6",x2:"0",y2:"h+h/6",x:" 0",y:"h/2"},{action:"move",x:"Math.min(w*(1/25),h*(1/14))",y:"h*0.5"},{action:"curve",x1:"Math.min(w*(1/25),h*(1/14))",y1:"-h/6+Math.min(w*(1/25),h*(1/14))",x2:"w-Math.min(w*(1/25),h*(1/14)) ",y2:"-h/6+Math.min(w*(1/25),h*(1/14))",x:"w-Math.min(w*(1/25),h*(1/14))",y:"h*0.5"},{action:"curve",x1:"w-Math.min(w*(1/25),h*(1/14))",y1:"h+h/6-Math.min(w*(1/25),h*(1/14))",x2:"Math.min(w*(1/25),h*(1/14)) ",y2:"h+h/6-Math.min(w*(1/25),h*(1/14))",x:"Math.min(w*(1/25),h*(1/14))",y:"h*0.5"},{action:"close"}]}],drawIcon:function(d,c){return[{actions:[{action:"move",x:0,y:c/2},{action:"curve",x1:0,y1:-c/6,x2:d,y2:-c/6,x:d,y:c/2},{action:"curve",x1:d,y1:c+c/6,x2:0,y2:c+c/6,x:0,y:c/2},{action:"close"},{action:"move",x:d*(1/8),y:c*0.5},{action:"curve",x1:d*(1/8),y1:-c/6+c*(1/5),x2:d-d*(1/8),y2:-c/6+c*(1/5),x:d-d*(1/8),y:c*0.5},{action:"curve",x1:d-d*(1/8),y1:c+c/6-c*(1/5),x2:d*(1/8),y2:c+c/6-c*(1/5),x:d*(1/8),y:c*0.5},{action:"close"}]}]}});Schema.addShape({name:"weakEntity",title:"弱实体",category:"er",props:{w:100,h:70},path:[{lineStyle:{lineStyle:"solid",lineColor:"120,120,120"},actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"close"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"Math.min(w*(1/20),h*(1/15))",y:"Math.min(w*(1/20),h*(1/15))"},{action:"line",x:"Math.max(w*(19/20),w-Math.min(w*(1/20),h*(1/15)))",y:"Math.min(h*(1/15),w-w*(19/20))"},{action:"line",x:"Math.max(w*(19/20),w-Math.min(w*(1/20),h*(1/15)))",y:"Math.max(h*(14/15),h-Math.min(h*(1/15),w*(1/20)))"},{action:"line",x:"Math.min(w*(1/20),h-h*(14/15))",y:"Math.max(h*(14/15),h-Math.min(h*(1/15),w*(1/20)))"},{action:"close"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"close"}]},],drawIcon:function(d,c){return[{lineStyle:{lineStyle:"solid",lineColor:"120,120,120"},actions:[{action:"move",x:0,y:0},{action:"line",x:d,y:0},{action:"line",x:d,y:c},{action:"line",x:0,y:c},{action:"close"}]},{actions:[{action:"move",x:d*(1/10),y:c*(1/8)},{action:"line",x:d*(9/10),y:c*(1/8)},{action:"line",x:d*(9/10),y:c*(7/8)},{action:"line",x:d*(1/10),y:c*(7/8)},{action:"close"}]}]}});Schema.addShape({name:"relationship",title:"关系",category:"er",props:{w:100,h:70},path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"w*0.5",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w*0.5",y:"h"},{action:"line",x:"0",y:"h*0.5"},{action:"close"}]}]});Schema.addShape({name:"weakRelationship",title:"弱关系",category:"er",props:{w:100,h:80},path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"w*0.5",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w*0.5",y:"h"},{action:"line",x:"0",y:"h*0.5"},{action:"close"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"w*(1/25)",y:"h*0.5"},{action:"line",x:"w*0.5",y:"h*(1/20)"},{action:"line",x:"w-w*(1/25)",y:"h*0.5"},{action:"line",x:"w*0.5",y:"h-h*(1/20)"},{action:"line",x:"w*(1/25)",y:"h*0.5"},{action:"close"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"w*0.5",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w*0.5",y:"h"},{action:"line",x:"0",y:"h*0.5"},{action:"close"}]}],drawIcon:function(d,c){return[{actions:[{action:"move",x:0,y:c*0.5},{action:"line",x:d*0.5,y:0},{action:"line",x:d,y:c*0.5},{action:"line",x:d*0.5,y:c},{action:"line",x:0,y:c*0.5},{action:"close"},{action:"move",x:d*(1/6),y:c*0.5},{action:"line",x:d*0.5,y:c*(1/5)},{action:"line",x:d-d*(1/6),y:c*0.5},{action:"line",x:d*0.5,y:c-c*(1/5)},{action:"line",x:d*(1/6),y:c*0.5},{action:"close"}]}]}});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/evc.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/evc.js
                                                  new file mode 100644
                                                  index 00000000..1caa1bdd
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/evc.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"evc",text:"EVC 企业价值链",dataAttributes:[{name:"序号",type:"number",value:"",category:"default"},{name:"名称",type:"string",value:"",category:"default"},{name:"所有者",type:"string",value:"",category:"default"},{name:"连接",type:"link",value:"",category:"default"},{name:"便笺",type:"string",value:"",category:"default"},{name:"成本",type:"number",value:"",category:"default"},{name:"时间",type:"number",value:"",category:"default"},{name:"部门",type:"string",value:"",category:"default"},{name:"输入",type:"string",value:"",category:"default"},{name:"输出",type:"string",value:"",category:"default"},{name:"风险",type:"string",value:"",category:"default"},{name:"备注",type:"string",value:"",category:"default"}]});Schema.addShape({name:"valueChain1",title:"价值链1",category:"evc",props:{w:150,h:70},textBlock:[{position:{x:"Math.min(h/2,w/6)",y:"0",w:"w-Math.min(h/2,w/6)*2",h:"h"}}],anchors:[{x:"w*0.5",y:"0"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h"},{x:"Math.min(h/2,w/6)",y:"h*0.5"}],path:[{actions:[{action:"move",x:"Math.min(h/2,w/6)",y:"h*0.5"},{action:"line",x:"0",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"Math.min(h/2,w/6)",y:"h*0.5"},{action:"close"}]}]});Schema.addShape({name:"valueChain2",title:"价值链2",category:"evc",props:{w:150,h:70},textBlock:[{position:{x:"Math.min(h/2,w/6)",y:"0",w:"w-Math.min(h/2,w/6)*2",h:"h"}}],anchors:[{x:"w*0.5",y:"0"},{x:"w-Math.min(h/2,w/6)",y:"h*0.5"},{x:"w*0.5",y:"h"},{x:"0",y:"h*0.5"}],path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h*0.5"},{action:"line",x:"w",y:"h"},{action:"line",x:"Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"h*0.5"},{action:"close"}]}]});Schema.addShape({name:"valueChain3",title:"价值链3",category:"evc",props:{w:150,h:70},path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});Schema.addShape({name:"valueChain4",title:"价值链4",category:"evc",props:{w:150,h:70},path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"h*0.5"},{action:"close"}]}]});Schema.addShape({name:"valueChain5",title:"价值链5",category:"evc",props:{w:150,h:70},textBlock:[{position:{x:"0",y:"Math.min(h/2,w/6)",w:"w",h:"h-Math.min(h/2,w/6)"}}],path:[{actions:[{action:"move",x:"w*0.5",y:"0"},{action:"line",x:"w",y:"Math.min(h/2,w/6)"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"Math.min(h/2,w/6)"},{action:"line",x:"w*0.5",y:"0"},{action:"close"}]}]});Schema.addShape({name:"valueChain6",title:"价值链6",category:"evc",props:{w:150,h:70},textBlock:[{position:{x:"0",y:"0",w:"w",h:"h-Math.min(h/2,w/6)"}}],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h-Math.min(h/2,w/6)"},{action:"line",x:"w*0.5",y:"h"},{action:"line",x:"0",y:"h-Math.min(h/2,w/6)"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/flow.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/flow.js
                                                  new file mode 100644
                                                  index 00000000..683d5fa3
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/flow.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"flow",text:"Flowchart 流程图",dataAttributes:[{name:"序号",type:"number",value:"",category:"default"},{name:"名称",type:"string",value:"",category:"default"},{name:"所有者",type:"string",value:"",category:"default"},{name:"连接",type:"link",value:"",category:"default"},{name:"便笺",type:"string",value:"",category:"default"},{name:"成本",type:"number",value:"",category:"default"},{name:"时间",type:"number",value:"",category:"default"},{name:"部门",type:"string",value:"",category:"default"},{name:"输入",type:"string",value:"",category:"default"},{name:"输出",type:"string",value:"",category:"default"},{name:"风险",type:"string",value:"",category:"default"},{name:"备注",type:"string",value:"",category:"default"}]});Schema.addShape({name:"process",title:"流程",category:"flow",props:{w:100,h:70},path:[{actions:{ref:"rectangle"}}]});Schema.addShape({name:"decision",title:"判定",category:"flow",props:{w:90,h:70},path:[{actions:[{action:"move",x:"0",y:"h/2"},{action:"line",x:"w/2",y:"0"},{action:"line",x:"w",y:"h/2"},{action:"line",x:"w/2",y:"h"},{action:"line",x:"0",y:"h/2"},{action:"close"}]}]});Schema.addShape({name:"terminator",title:"开始/结束",category:"flow",props:{w:100,h:50},path:[{actions:[{action:"move",x:"Math.min(w,h)/3",y:"0"},{action:"line",x:"w-Math.min(w,h)/3",y:"0"},{action:"curve",x1:"w+Math.min(w,h)/3/3",y1:"0",x2:"w+Math.min(w,h)/3/3",y2:"h",x:"w-Math.min(w,h)/3",y:"h"},{action:"line",x:"Math.min(w,h)/3",y:"h"},{action:"curve",x1:"-Math.min(w,h)/3/3",y1:"h",x2:"-Math.min(w,h)/3/3",y2:"0",x:"Math.min(w,h)/3",y:"0"},{action:"close"}]}]});Schema.addShape({name:"document",title:"文档",category:"flow",props:{w:100,h:70},anchors:[{x:"w*0.5",y:"0"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h-Math.min(h/8,w/12)"},{x:"0",y:"h*0.5"}],textBlock:[{position:{x:"0",y:"0",w:"w",h:"h*0.9"}}],path:[{actions:[{action:"move",x:"0",y:"h-Math.min(h/8,w/12)"},{action:"line",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h-Math.min(h/8,w/12)"},{action:"quadraticCurve",x1:"w*0.75",y1:"h-3*Math.min(h/8,w/12)",x:"w*0.5",y:"h-Math.min(h/8,w/12)"},{action:"quadraticCurve",x1:"w*0.25",y1:"h+Math.min(h/8,w/12)",x:"0",y:"h-Math.min(h/8,w/12)"},{action:"close"}]}]});Schema.addShape({name:"data",title:"数据",category:"flow",props:{w:100,h:70},anchors:[{x:"w*0.5",y:"0"},{x:"w-Math.min(h/3,w/3)/2",y:"h*0.5"},{x:"w*0.5",y:"h"},{x:"Math.min(h/3,w/3)/2",y:"h*0.5"}],textBlock:[{position:{x:"w*0.15",y:"0",w:"w*0.7",h:"h"}}],path:[{actions:[{action:"move",x:"Math.min(h/3,w/3)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w-Math.min(h/3,w/3)",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"Math.min(h/3,w/3)",y:"0"},{action:"close"}]}]});Schema.addShape({name:"predefinedProcess",title:"子流程",category:"flow",props:{w:100,h:70},textBlock:[{position:{x:"Math.min(w/6,20)",y:"0",w:"w-Math.min(w/6,20)*2",h:"h"}}],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"},{action:"move",x:"Math.min(w/6,20)",y:"0"},{action:"line",x:"Math.min(w/6,20)",y:"h"},{action:"move",x:"w- Math.min(w/6,20)",y:"0"},{action:"line",x:"w- Math.min(w/6,20)",y:"h"}]}]});Schema.addShape({name:"storedData",title:"外部数据",category:"flow",props:{w:100,h:70},anchors:[{x:"w*0.5",y:"0"},{x:"w-Math.min(w/8,h/8)",y:"h*0.5"},{x:"w*0.5",y:"h"},{x:"0",y:"h*0.5"}],textBlock:[{position:{x:"w*0.1",y:"0",w:"w*0.75",h:"h"}}],path:[{actions:[{action:"move",x:"w/6",y:"0"},{action:"line",x:"w",y:"0"},{action:"curve",x1:"w-w/6",y1:"0",x2:"w-w/6",y2:"h",x:"w",y:"h"},{action:"line",x:"w/6",y:"h"},{action:"curve",x1:"-w/17",y1:"h",x2:"-w/17",y2:"0",x:"w/7",y:"0"},{action:"close"}]}]});Schema.addShape({name:"internalStorage",title:"内部存储",category:"flow",props:{w:100,h:70},textBlock:[{position:{x:"Math.min(w/6,20)",y:"Math.min(h/5,20)",w:"w - Math.min(w/6,20)",h:"h- Math.min(h/5,20)"}}],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"},{action:"move",x:"Math.min(w/6,20)",y:"0"},{action:"line",x:"Math.min(w/6,20)",y:"h"},{action:"move",x:"0",y:"Math.min(h/5,20)"},{action:"line",x:"w",y:"Math.min(h/5,20)"}]}]});Schema.addShape({name:"sequentialData",title:"队列数据",category:"flow",props:{w:70,h:70},textBlock:[{position:{x:"w*0.1",y:"h*0.2",w:"w*0.8",h:"h*0.6"}}],path:[{actions:[{action:"move",x:"w/2",y:"h"},{action:"curve",x1:"w/2-w*2/3",y1:"h",x2:"w/2-w*2/3",y2:"0",x:"w/2",y:"0"},{action:"curve",x1:"w/2+w*2/3",y1:"0",x2:"w/2+w*2/3",y2:"h",x:"w/2",y:"h"},{action:"line",x:"w",y:"h"},{action:"close"}]}]});Schema.addShape({name:"directData",title:"数据库",category:"flow",props:{w:100,h:70},textBlock:[{position:{x:"0",y:"0",w:"w*0.8",h:"h"}}],path:[{actions:[{action:"move",x:"w*0.15",y:"0"},{action:"line",x:"w-h/6",y:"0"},{action:"curve",x1:"w+h/22",y1:"0",x2:"w+h/22",y2:"h",x:"w-h/6",y:"h"},{action:"line",x:"w*0.15",y:"h"},{action:"curve",x1:"-w*0.05",y1:"h",x2:"-w*0.05",y2:"0",x:"w*0.15",y:"0"},{action:"close"},{action:"move",x:"w-h/6",y:"0"},{action:"curve",x1:"w-h/8*3",y1:"0",x2:"w-h/8*3",y2:"h",x:"w-h/6",y:"h"},{action:"curve",x1:"w-h/8*3",y1:"h",x2:"w-h/8*3",y2:"0",x:"w-h/6",y:"0"}]}]});Schema.addShape({name:"manualInput",title:"人工输入",category:"flow",props:{w:100,h:70},anchors:[{x:"0",y:"h*0.5"},{x:"w*0.5",y:"Math.min(h/2,w/6)/2"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h"}],textBlock:[{position:{x:"0",y:"h*0.1",w:"w",h:"h*0.9"}}],path:[{actions:[{action:"move",x:"0",y:"Math.min(h/2,w/6)"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"Math.min(h/2,w/6)"},{action:"close"}]}]});Schema.addShape({name:"card",title:"卡片",category:"flow",props:{w:100,h:70},path:[{actions:[{action:"move",x:"0",y:"Math.min(h/2,w/4)"},{action:"line",x:"Math.min(h/2,w/4)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"Math.min(h/2,w/4)"},{action:"close"}]}]});Schema.addShape({name:"paperTape",title:"条带",category:"flow",props:{w:100,h:70},textBlock:[{position:{x:"0",y:"h*0.1",w:"w",h:"h*0.8"}}],anchors:[{x:"w*0.5",y:"Math.min(Math.min(w,h)/8,w/12)"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{x:"0",y:"h*0.5"}],path:[{actions:[{action:"move",x:"0",y:"Math.min(Math.min(w,h)/8,w/12)"},{action:"quadraticCurve",x1:"w*0.25",y1:"3*Math.min(Math.min(w,h)/8,w/12)",x:"w*0.5",y:"Math.min(Math.min(w,h)/8,w/12)"},{action:"quadraticCurve",x1:"w*0.75",y1:"-Math.min(Math.min(w,h)/8,w/12)",x:"w",y:"Math.min(Math.min(w,h)/8,w/12)"},{action:"line",x:"w",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"quadraticCurve",x1:"w*0.75",y1:"h-3*Math.min(Math.min(w,h)/8,w/12)",x:"w*0.5",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"quadraticCurve",x1:"w*0.25",y1:"h+Math.min(Math.min(w,h)/8,w/12)",x:"0",y:"h-Math.min(Math.min(w,h)/8,w/12)"},{action:"line",x:"0",y:"Math.min(Math.min(w,h)/8,w/12)"},{action:"close"}]}]});Schema.addShape({name:"display",title:"展示",category:"flow",props:{w:100,h:70},path:[{actions:[{action:"move",x:"w-w/6",y:"0"},{action:"line",x:"w/6",y:"0"},{action:"line",x:"0",y:"h/2"},{action:"line",x:"w/6",y:"h"},{action:"line",x:"w-w/6",y:"h"},{action:"quadraticCurve",x1:"w",y1:"h",x:"w",y:"h*0.5"},{action:"quadraticCurve",x1:"w",y1:"0",x:"w-w/6",y:"0"},{action:"close"}]}]});Schema.addShape({name:"manualOperation",title:"人工操作",category:"flow",props:{w:100,h:70},textBlock:[{position:{x:"w*0.1",y:"0",w:"w*0.8",h:"h"}}],anchors:[{x:"w*0.5",y:"0"},{x:"w-Math.min(h/2,w/6)/2",y:"h*0.5"},{x:"w*0.5",y:"h"},{x:"Math.min(h/2,w/6)/2",y:"h*0.5"}],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h"},{action:"line",x:"Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});Schema.addShape({name:"preparation",title:"预备",category:"flow",props:{w:100,h:70},path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"h/2"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h"},{action:"line",x:"Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"h/2"},{action:"close"}]}]});Schema.addShape({name:"parallelMode",title:"并行模式",category:"flow",props:{w:100,h:70},anchors:[{x:"w*0.5",y:"0"},{x:"w*0.5",y:"0"},{x:"w*0.5",y:"h"},{x:"w*0.5",y:"h"}],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"0",y:"0"},{action:"move",x:"0",y:"h"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"close"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});Schema.addShape({name:"loopLimit",title:"循环限值",category:"flow",props:{w:100,h:70},path:[{actions:[{action:"move",x:"0",y:"Math.min(h/2,w/6)"},{action:"line",x:"Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"Math.min(h/2,w/6)"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"Math.min(h/2,w/6)"},{action:"close"}]}]});Schema.addShape({name:"onPageReference",title:"页面内引用",category:"flow",props:{w:70,h:70},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"offPageReference",title:"跨页引用",category:"flow",props:{w:70,h:60},textBlock:[{position:{x:"0",y:"0",w:"w",h:"h-Math.min(h,w)/3"}}],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h-Math.min(h,w)/3"},{action:"line",x:"w*0.5",y:"h"},{action:"line",x:"0",y:"h-Math.min(h,w)/3"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});Schema.addShape({name:"annotation",title:"注释",category:"flow",props:{w:100,h:70},anchors:[{x:"0",y:"h*0.5"},{x:"0",y:"h*0.5"},{x:"0",y:"h*0.5"},{x:"0",y:"h*0.5"}],path:[{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"w/6",y:"0"},{action:"line",x:"0",y:"0"},{action:"line",x:"0",y:"h"},{action:"line",x:"w/6",y:"h"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"close"},]}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/lane.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/lane.js
                                                  new file mode 100644
                                                  index 00000000..e06d904a
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/lane.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"lane",text:"Lane"});function getPool(g,i){for(var f=Model.orderList.length-1;f>=0;f--){var h=Model.orderList[f].id;var j=Model.getShapeById(h);if(j.name==i){if(Utils.rectCross(j.props,g.props)){return j}}}return null}function getVerticalPoolWidth(j){var g=0;for(var f=0;f<j.children.length;f++){var i=j.children[f];var h=Model.getShapeById(i);if(h.name!="horizontalSeparator"){g+=h.props.w}}return g}function getHorizontalPoolHeight(j){var g=0;for(var f=0;f<j.children.length;f++){var i=j.children[f];var h=Model.getShapeById(i);if(h.name!="horizontalSeparator"){g+=h.props.w}}return g}function getChild(j,g){for(var f=0;f<j.children.length;f++){var i=j.children[f];var h=Model.getShapeById(i);if(h.name==g){return h}}return null}Schema.addShape({name:"verticalPool",title:verticalPoolText,text:verticalPoolText,category:"lane",attribute:{rotatable:false,linkable:false,container:true},children:[],props:{w:250,h:540},fontStyle:{size:16},textBlock:{x:10,y:0,w:"w-20",h:40},anchors:[],resizeDir:["l","b","r"],path:[{fillStyle:{type:"none"},lineStyle:{lineStyle:"solid"},actions:{ref:"rectangle"}},{lineStyle:{lineStyle:"solid"},fillStyle:{type:"none"},actions:[{action:"move",x:0,y:0},{action:"line",x:"w",y:0},{action:"line",x:"w",y:40},{action:"line",x:0,y:40},{action:"close"}]}],drawIcon:function(d,f){d+=8;var e=-4;return[{fillStyle:{type:"none"},actions:[{action:"move",x:e,y:0},{action:"line",x:d,y:0},{action:"line",x:d,y:f},{action:"line",x:e,y:f},{action:"close"}]},{actions:[{action:"move",x:e,y:0},{action:"line",x:d,y:0},{action:"line",x:d,y:4},{action:"line",x:e,y:4},{action:"close"}]},{actions:[{action:"move",x:(e+d)/2,y:4},{action:"line",x:(e+d)/2,y:f}]}]}});Schema.addShape({name:"verticalLane",title:verticalLaneText,text:verticalLaneText,category:"lane",attribute:{container:true,rotatable:false,linkable:false},props:{w:250,h:500},textBlock:{x:10,y:0,w:"w-20",h:30},anchors:[],resizeDir:["l","b","r"],path:[{fillStyle:{type:"none"},lineStyle:{lineStyle:"solid"},actions:{ref:"rectangle"}},{lineStyle:{lineStyle:"solid"},fillStyle:{type:"none"},actions:[{action:"move",x:0,y:0},{action:"line",x:"w",y:0},{action:"line",x:"w",y:30},{action:"line",x:0,y:30},{action:"close"}]}],drawIcon:function(d,c){return[{fillStyle:{type:"none"},lineStyle:{lineStyle:"solid"},actions:[{action:"move",x:0,y:0},{action:"line",x:d,y:0},{action:"line",x:d,y:c},{action:"line",x:0,y:c},{action:"close"}]},{lineStyle:{lineStyle:"solid"},actions:[{action:"move",x:0,y:0},{action:"line",x:d,y:0},{action:"line",x:d,y:4},{action:"line",x:0,y:4},{action:"close"}]}]},onCreated:function(){var n=getPool(this,"verticalPool");if(n==null){n=Model.create("verticalPool",this.props.x,this.props.y-40);n.children=[this.id];Model.add(n)}else{if(!n.children){n.children=[]}var l=[n];var j=n.props.x;var p=0;var i=0;for(var o=0;o<n.children.length;o++){var m=n.children[o];var k=Model.getShapeById(m);if(k.name=="verticalLane"){j+=k.props.w;p++}else{if(k.name=="verticalSeparatorBar"){j+=k.props.w;i++}}}this.props.x=j;this.props.y=n.props.y+40;this.props.h=n.props.h-40;if(p==0){if(i==0){this.props.w=n.props.w}else{this.props.w=n.props.w-20}}Designer.painter.renderShape(this);n.props.w=this.props.x+this.props.w-n.props.x;for(var o=0;o<n.children.length;o++){var m=n.children[o];var k=Model.getShapeById(m);if(k.name=="horizontalSeparator"){k.props.w=n.props.w;Designer.painter.renderShape(k);l.push(k)}}n.children.push(this.id);Model.updateMulti(l)}Designer.painter.renderShape(n);this.parent=n.id}});Schema.addShape({name:"verticalSeparatorBar",title:"Vertical SeparatorBar",text:"",category:"lane",attribute:{rotatable:false,linkable:false,visible:false,editable:false},props:{w:20,h:500},anchors:[],resizeDir:[],path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"horizontalPool",title:horizontalPoolText,text:horizontalPoolText,category:"lane",attribute:{rotatable:false,linkable:false,container:true},children:[],props:{w:640,h:200},fontStyle:{size:16,orientation:"horizontal"},textBlock:{x:0,y:10,w:40,h:"h-20"},anchors:[],resizeDir:["t","r","b"],path:[{fillStyle:{type:"none"},lineStyle:{lineStyle:"solid"},actions:{ref:"rectangle"}},{lineStyle:{lineStyle:"solid"},fillStyle:{type:"none"},actions:[{action:"move",x:0,y:0},{action:"line",x:40,y:0},{action:"line",x:40,y:"h"},{action:"line",x:0,y:"h"},{action:"close"}]}],drawIcon:function(e,d){d+=8;var f=-4;return[{fillStyle:{type:"none"},actions:[{action:"move",x:0,y:f},{action:"line",x:e,y:f},{action:"line",x:e,y:d},{action:"line",x:0,y:d},{action:"close"}]},{actions:[{action:"move",x:0,y:f},{action:"line",x:4,y:f},{action:"line",x:4,y:d},{action:"line",x:0,y:d},{action:"close"}]},{actions:[{action:"move",x:4,y:(f+d)/2},{action:"line",x:e,y:(f+d)/2}]}]}});Schema.addShape({name:"horizontalLane",title:horizontalLaneText,text:horizontalLaneText,category:"lane",attribute:{container:true,rotatable:false,linkable:false},props:{w:600,h:200},fontStyle:{orientation:"horizontal"},textBlock:{x:0,y:10,w:30,h:"h-20"},anchors:[],resizeDir:["t","b","r"],path:[{fillStyle:{type:"none"},lineStyle:{lineStyle:"solid"},actions:{ref:"rectangle"}},{lineStyle:{lineStyle:"solid"},fillStyle:{type:"none"},actions:[{action:"move",x:0,y:0},{action:"line",x:30,y:0},{action:"line",x:30,y:"h"},{action:"line",x:0,y:"h"},{action:"close"}]}],drawIcon:function(d,c){c+=3;return[{fillStyle:{type:"none"},lineStyle:{lineStyle:"solid"},actions:[{action:"move",x:0,y:-1},{action:"line",x:d,y:-1},{action:"line",x:d,y:c},{action:"line",x:0,y:c},{action:"close"}]},{lineStyle:{lineStyle:"solid"},actions:[{action:"move",x:0,y:-1},{action:"line",x:4,y:-1},{action:"line",x:4,y:c},{action:"line",x:0,y:c},{action:"close"}]}]},onCreated:function(){var o=getPool(this,"horizontalPool");if(o==null){o=Model.create("horizontalPool",this.props.x-40,this.props.y);o.children=[this.id];Model.add(o)}else{if(!o.children){o.children=[]}var m=[o];var k=o.props.y;var i=0;var j=0;for(var p=0;p<o.children.length;p++){var n=o.children[p];var l=Model.getShapeById(n);if(l.name=="horizontalLane"){k+=l.props.h;i++}else{if(l.name=="horizontalSeparatorBar"){k+=l.props.h;j++}}}this.props.y=k;this.props.x=o.props.x+40;this.props.w=o.props.w-40;if(i==0){if(j==0){this.props.h=o.props.h}else{this.props.h=o.props.h-20}}Designer.painter.renderShape(this);o.props.h=this.props.y+this.props.h-o.props.y;for(var p=0;p<o.children.length;p++){var n=o.children[p];var l=Model.getShapeById(n);if(l.name=="verticalSeparator"){l.props.h=o.props.h;Designer.painter.renderShape(l);m.push(l)}}o.children.push(this.id);Model.updateMulti(m)}Designer.painter.renderShape(o);this.parent=o.id}});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/org.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/org.js
                                                  new file mode 100644
                                                  index 00000000..3e32c981
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/org.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"org",text:"ORG 组织结构图",dataAttributes:[{name:"序号",type:"number",value:"",category:"default"},{name:"名称",type:"string",value:"",category:"default"},{name:"所有者",type:"string",value:"",category:"default"},{name:"连接",type:"link",value:"",category:"default"},{name:"便笺",type:"string",value:"",category:"default"},{name:"成本",type:"number",value:"",category:"default"},{name:"时间",type:"number",value:"",category:"default"},{name:"部门",type:"string",value:"",category:"default"},{name:"输入",type:"string",value:"",category:"default"},{name:"输出",type:"string",value:"",category:"default"},{name:"风险",type:"string",value:"",category:"default"},{name:"备注",type:"string",value:"",category:"default"}]});Schema.addShape({name:"organization",title:"组织",category:"org",props:{w:120,h:70},lineStyle:{lineWidth:2,lineColor:"220,87,18"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"245,236,186",endColor:"244,208,0",angle:Math.PI*0.5},textBlock:[{position:{x:"w*0.15",y:"h*0.19",w:"w*0.8",h:"h*0.62"}}],path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"curve",x1:"0",y1:"-h/6",x2:"w",y2:"-h/6",x:"w",y:"h*0.5"},{action:"curve",x1:"w",y1:"h+h/6",x2:"0",y2:"h+h/6",x:"0",y:"h*0.5"},{action:"move",x:"w*0.15",y:"h*0.13"},{action:"line",x:"w*0.15",y:"h*0.87"}]}]});Schema.addShape({name:"role",title:"角色",category:"org",props:{w:120,h:70},lineStyle:{lineWidth:2,lineColor:"220,87,18"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"245,236,186",endColor:"244,208,0",angle:Math.PI*0.5},textBlock:[{position:{x:"w*0.14",y:"0",w:"w*0.86",h:"h"}}],path:[{actions:{ref:"rectangle"}},{actions:[{action:"move",x:"w/6",y:"0"},{action:"line",x:"w/6",y:"h"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"employee",title:"员工",category:"org",props:{w:120,h:70},lineStyle:{lineWidth:2,lineColor:"220,87,18"},fillStyle:{type:"gradient",gradientType:"linear",beginColor:"245,236,186",endColor:"244,208,0",angle:Math.PI*0.5},path:[{actions:{ref:"rectangle"}}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_class.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_class.js
                                                  new file mode 100644
                                                  index 00000000..2514bc53
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_class.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"uml_class",text:"UML 类图",dataAttributes:[]});Schema.addShape({name:"cls",title:"类",category:"uml_class",props:{w:210,h:150},fontStyle:{bold:true},textBlock:[{position:{x:"10",y:"0",w:"w-20",h:"30"},text:"类"},{position:{x:"10",y:"35",w:"w-20",h:"(h-50)/2"},text:"+ attribute1:type = defaultValue\n+ attribute2:type\n- attribute3:type",fontStyle:{textAlign:"left",bold:false}},{position:{x:"10",y:"h/2+20",w:"w-20",h:"(h-50)/2"},text:"+ operation1(params):returnType\n- operation2(params)\n- operation3()",fontStyle:{textAlign:"left",bold:false}}],path:[{actions:{ref:"roundRectangle"}},{fillStyle:{type:"none"},actions:[{action:"move",x:"0",y:30},{action:"line",x:"w",y:30},{action:"move",x:"0",y:"h/2+15"},{action:"line",x:"w",y:"h/2+15"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"rectangle"}}],drawIcon:function(d,c){return[{actions:[{action:"move",x:0,y:2},{action:"quadraticCurve",x1:0,y1:0,x:2,y:0},{action:"line",x:d-2,y:0},{action:"quadraticCurve",x1:d,y1:0,x:d,y:2},{action:"line",x:d,y:c-2},{action:"quadraticCurve",x1:d,y1:c,x:d-2,y:c},{action:"line",x:2,y:c},{action:"quadraticCurve",x1:0,y1:c,x:0,y:c-2},{action:"line",x:0,y:2},{action:"close"}]},{actions:[{action:"move",x:0,y:c*0.22},{action:"line",x:d,y:c*0.22},{action:"move",x:0,y:c*0.55},{action:"line",x:d,y:c*0.55}]}]}});Schema.addShape({name:"simpleClass",title:"简单类",category:"uml_class",props:{w:100,h:70},path:[{actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"activeClass",title:"活动类",category:"uml_class",props:{w:100,h:70},textBlock:[{position:{x:"Math.min(w/6,20)",y:"0",w:"w-Math.min(w/6,20)*2",h:"h"}}],path:[{actions:[{action:"move",x:"0",y:"4"},{action:"quadraticCurve",x1:"0",y1:"0",x:"4",y:"0"},{action:"line",x:"w-4",y:"0"},{action:"quadraticCurve",x1:"w",y1:"0",x:"w",y:"4"},{action:"line",x:"w",y:"h-4"},{action:"quadraticCurve",x1:"w",y1:"h",x:"w-4",y:"h"},{action:"line",x:"4",y:"h"},{action:"quadraticCurve",x1:"0",y1:"h",x:"0",y:"h-4"},{action:"line",x:"0",y:"4"},{action:"close"},{action:"move",x:"Math.min(w/6,20)",y:"0"},{action:"line",x:"Math.min(w/6,20)",y:"h"},{action:"move",x:"w- Math.min(w/6,20)",y:"0"},{action:"line",x:"w- Math.min(w/6,20)",y:"h"}]}],drawIcon:function(d,c){return[{actions:[{action:"move",x:0,y:4},{action:"quadraticCurve",x1:0,y1:0,x:4,y:0},{action:"line",x:d-4,y:0},{action:"quadraticCurve",x1:d,y1:0,x:d,y:4},{action:"line",x:d,y:c-4},{action:"quadraticCurve",x1:d,y1:c,x:d-4,y:c},{action:"line",x:4,y:c},{action:"quadraticCurve",x1:0,y1:c,x:0,y:c-4},{action:"line",x:0,y:4},{action:"close"},{action:"move",x:d/7+3,y:0},{action:"line",x:d/7+3,y:c},{action:"move",x:d-d/7-3,y:0},{action:"line",x:d-d/7-3,y:c}]}]}});Schema.addShape({name:"multiplictyClass",title:"多例类",category:"uml_class",props:{w:100,h:70},textBlock:[{position:{x:"Math.min(w/6,20)-4",y:"8",w:"w-Math.min(w/6,20)*2",h:"h-8"}}],anchors:[{x:"0",y:"(w-16)*0.5"},{x:"w*0.5",y:"0"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h"}],path:[{actions:[{action:"move",x:"8",y:"8"},{action:"quadraticCurve",x1:"8",y1:"0",x:"16",y:"0"},{action:"line",x:"w-8",y:"0"},{action:"quadraticCurve",x1:"w",y1:"0",x:"w",y:"8"},{action:"line",x:"w",y:"h-16"},{action:"quadraticCurve",x1:"w",y1:"h-8",x:"w-8",y:"h-8"},{action:"line",x:"w-8",y:"h-8"}]},{actions:[{action:"move",x:"0",y:"16"},{action:"quadraticCurve",x1:"0",y1:"8",x:"8",y:"8"},{action:"line",x:"w-16",y:"8"},{action:"quadraticCurve",x1:"w-8",y1:"8",x:"w-8",y:"16"},{action:"line",x:"w-8",y:"h-8"},{action:"quadraticCurve",x1:"w-8",y1:"h",x:"w-16",y:"h"},{action:"line",x:"8",y:"h"},{action:"quadraticCurve",x1:"0",y1:"h",x:"0",y:"h-8"},{action:"line",x:"0",y:"16"},{action:"close"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"roundRectangle"}}],drawIcon:function(d,c){return[{actions:[{action:"move",x:4,y:4},{action:"quadraticCurve",x1:4,y1:0,x:8,y:0},{action:"line",x:d-4,y:0},{action:"quadraticCurve",x1:d,y1:0,x:d,y:4},{action:"line",x:d,y:c-8},{action:"quadraticCurve",x1:d,y1:c-4,x:d-2,y:c-4},{action:"line",x:d-4,y:c-4}]},{actions:[{action:"move",x:0,y:8},{action:"quadraticCurve",x1:0,y1:4,x:4,y:4},{action:"line",x:d-8,y:4},{action:"quadraticCurve",x1:d-4,y1:4,x:d-4,y:8},{action:"line",x:d-4,y:c-4},{action:"quadraticCurve",x1:d-4,y1:c,x:d-8,y:c},{action:"line",x:4,y:c},{action:"quadraticCurve",x1:0,y1:c,x:0,y:c-4},{action:"line",x:0,y:8},{action:"close"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"roundRectangle"}}]}});Schema.addShape({name:"interface",title:"接口",category:"uml_class",props:{w:210,h:150},fontStyle:{bold:true},textBlock:[{position:{x:"10",y:"0",w:"w-20",h:"30"},text:"接口"},{position:{x:"10",y:"35",w:"w-20",h:"h-40"},text:"+ operation1(params):returnType\n- operation2(params)\n- operation3()",fontStyle:{textAlign:"left",bold:false}}],path:[{actions:{ref:"roundRectangle"}},{fillStyle:{type:"none"},actions:[{action:"move",x:"0",y:30},{action:"line",x:"w",y:30}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"rectangle"}}],drawIcon:function(d,c){return[{actions:[{action:"move",x:0,y:2},{action:"quadraticCurve",x1:0,y1:0,x:2,y:0},{action:"line",x:d-2,y:0},{action:"quadraticCurve",x1:d,y1:0,x:d,y:2},{action:"line",x:d,y:c-2},{action:"quadraticCurve",x1:d,y1:c,x:d-2,y:c},{action:"line",x:2,y:c},{action:"quadraticCurve",x1:0,y1:c,x:0,y:c-2},{action:"line",x:0,y:2},{action:"close"}]},{actions:[{action:"move",x:0,y:c*0.22},{action:"line",x:d,y:c*0.22}]}]}});Schema.addShape({name:"simpleInterface",title:"接口",category:"uml_class",props:{w:110,h:140},path:[{actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"constraint",title:"约束",category:"uml_class",attribute:{linkable:false},props:{w:110,h:70},textBlock:[{position:{x:"w*0.1",y:"0",w:"w*0.8",h:"h"}}],anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],path:[{fillStyle:{type:"none"},actions:[{action:"move",x:"Math.min(w*0.2,18)",y:"0"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"0",x:"Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"0",y:"h*0.5"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h",x:"Math.min(w*0.2,18)",y:"h"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"w-Math.min(w*0.2,18)",y:"h"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h",x:"w-Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w",y:"h*0.5"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w-Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"0",x:"w-Math.min(w*0.2,18)",y:"0"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"port",title:"端口",category:"uml_class",props:{w:20,h:20},resizeDir:[],attribute:{linkable:false},textBlock:[],path:[{actions:{ref:"rectangle"}}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_common.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_common.js
                                                  new file mode 100644
                                                  index 00000000..3073d47c
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_common.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"uml_common",text:"UML 通用",dataAttributes:[]});Schema.addShape({name:"package",title:"包",category:"uml_common",props:{w:210,h:150},fontStyle:{bold:true,textAlign:"left"},textBlock:[{position:{x:"10",y:"0",w:"w*0.7-10",h:"25"},text:"包"},{position:{x:"10",y:"30",w:"w-20",h:"h-35"},text:"属性",fontStyle:{bold:false}}],path:[{actions:[{action:"move",x:"0",y:"25"},{action:"line",x:"w-4",y:"25"},{action:"quadraticCurve",x1:"w",y1:"25",x:"w",y:"29"},{action:"line",x:"w",y:"h-4"},{action:"quadraticCurve",x1:"w",y1:"h",x:"w-4",y:"h"},{action:"line",x:"4",y:"h"},{action:"quadraticCurve",x1:"0",y1:"h",x:"0",y:"h-4"},{action:"close"}]},{actions:[{action:"move",x:"0",y:"4"},{action:"quadraticCurve",x1:"0",y1:"0",x:"4",y:"0"},{action:"line",x:"w*0.7-4",y:"0"},{action:"quadraticCurve",x1:"w*0.7",y1:"0",x:"w*0.7+3",y:"3"},{action:"line",x:"w*0.76",y:"25"},{action:"line",x:"0",y:"25"},{action:"close"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w*0.7",y:"0"},{action:"line",x:"w*0.76",y:"25"},{action:"line",x:"w",y:"25"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"close"}]}],drawIcon:function(d,c){return[{actions:[{action:"move",x:0,y:2},{action:"quadraticCurve",x1:0,y1:0,x:2,y:0},{action:"line",x:d*0.7-1.5,y:0},{action:"quadraticCurve",x1:d*0.7,y1:0,x:d*0.7+1,y:1.5},{action:"line",x:d*0.76,y:c*0.22},{action:"line",x:d-2,y:c*0.22},{action:"quadraticCurve",x1:d,y1:c*0.22,x:d,y:c*0.22+2},{action:"line",x:d,y:c-2},{action:"quadraticCurve",x1:d,y1:c,x:d-2,y:c},{action:"line",x:2,y:c},{action:"quadraticCurve",x1:0,y1:c,x:0,y:c-2},{action:"close"}]},{actions:[{action:"move",x:0,y:c*0.22},{action:"line",x:d-2,y:c*0.22}]}]}});Schema.addShape({name:"combinedFragment",title:"组合片断",category:"uml_common",props:{w:400,h:280},fontStyle:{textAlign:"left",vAlign:"top"},textBlock:[{position:{x:"10",y:"30",w:"w-20",h:"h-35"},text:"[Condition]"},{position:{x:"10",y:"0",w:"w*0.3-10",h:"25"},text:"Opt | Alt | Loop ",fontStyle:{vAlign:"middle"}}],path:[{actions:{ref:"roundRectangle"}},{actions:[{action:"move",x:"0",y:"25"},{action:"line",x:"w*0.3",y:"25"},{action:"line",x:"w*0.3+8",y:"17"},{action:"line",x:"w*0.3+8",y:"0"},]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"rectangle"}}],drawIcon:function(d,c){return[{actions:[{action:"move",x:0,y:2},{action:"quadraticCurve",x1:0,y1:0,x:2,y:0},{action:"line",x:d-2,y:0},{action:"quadraticCurve",x1:d,y1:0,x:d,y:2},{action:"line",x:d,y:c-2},{action:"quadraticCurve",x1:d,y1:c,x:d-2,y:c},{action:"line",x:2,y:c},{action:"quadraticCurve",x1:0,y1:c,x:0,y:c-2},{action:"line",x:0,y:2},{action:"close"}]},{actions:[{action:"move",x:0,y:c*0.22},{action:"line",x:d*0.4,y:c*0.22},{action:"line",x:d*0.45,y:c*0.16},{action:"line",x:d*0.45,y:0},]}]}});Schema.addShape({name:"umlNote",title:"注释",category:"uml_common",attribute:{linkable:false},props:{w:100,h:70},anchors:[],textBlock:[{position:{x:"w*0.1",y:"h*0.1",w:"w*0.8",h:"h*0.8"}}],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w-16",y:"0"},{action:"line",x:"w",y:"16"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]},{actions:[{action:"move",x:"w-16",y:"0"},{action:"line",x:"w-16",y:"16"},{action:"line",x:"w",y:"16"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w-16",y:"0"},{action:"line",x:"w",y:"16"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]}],drawIcon:function(d,c){return[{actions:[{action:"move",x:0,y:0},{action:"line",x:d*0.7,y:0},{action:"line",x:d,y:c*0.2},{action:"line",x:d,y:c},{action:"line",x:0,y:c},{action:"line",x:0,y:0},{action:"close"}]},{actions:[{action:"move",x:d*0.7,y:0},{action:"line",x:d*0.7,y:c*0.2},{action:"line",x:d,y:c*0.2}]},{fillStyle:{type:"none"},actions:[{action:"move",x:0,y:0},{action:"line",x:d*0.7,y:0},{action:"line",x:d,y:c*0.2},{action:"line",x:d,y:c},{action:"line",x:0,y:c},{action:"line",x:0,y:0},{action:"close"}]}]}});Schema.addShape({name:"umlText",title:"文本",category:"uml_common",attribute:{linkable:false},props:{w:160,h:40},anchors:[],textBlock:[{position:{x:0,y:0,w:"w",h:"h"},text:"文本"}],path:[{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}],drawIcon:function(e,h){var f=0;var g=-6;h=h+12;return[{lineStyle:{lineWidth:2},fillStyle:{type:"solid",color:"50, 50, 50"},actions:[{action:"move",x:f,y:g},{action:"line",x:e,y:g},{action:"line",x:e,y:g+h*0.2},{action:"line",x:e*0.9,y:g+h*0.12},{action:"line",x:e*0.55,y:g+h*0.12},{action:"line",x:e*0.55,y:g+h*0.85},{action:"line",x:e*0.63,y:g+h},{action:"line",x:e*0.37,y:g+h},{action:"line",x:e*0.45,y:g+h*0.85},{action:"line",x:e*0.45,y:g+h*0.12},{action:"line",x:e*0.1,y:g+h*0.12},{action:"line",x:0,y:g+h*0.2},{action:"close"}]}]}});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_component.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_component.js
                                                  new file mode 100644
                                                  index 00000000..fe147b1b
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_component.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"uml_component",text:"UML 组件图",dataAttributes:[]});Schema.addShape({name:"component",title:"组件",category:"uml_component",props:{w:100,h:70},textBlock:[{position:{x:"w*(1/8)+5",y:"0",w:"w-w*(1/8)-10",h:"h"}}],anchors:[{x:"w*0.5",y:"0"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h"},{x:"0",y:"h*(3/10)"},{x:"0",y:"h*(7/10)"}],path:[{actions:[{action:"move",x:"w*(1/10)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"w*(1/10)",y:"h"},{action:"line",x:"w*(2/10)*0.5",y:"h*(8/10)"},{action:"line",x:"0",y:"h*(8/10)"},{action:"line",x:"0",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(4/10)"},{action:"line",x:"0",y:"h*(4/10)"},{action:"line",x:"0",y:"h*(2/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(2/10)"},{action:"line",x:"w*(1/10)",y:"0"},{action:"close"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"w*(2/10)*0.5",y:"h*(8/10)"},{action:"line",x:"w*(2/10)",y:"h*(8/10)"},{action:"line",x:"w*(2/10)",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(6/10)"},{action:"move",x:"w*(2/10)*0.5",y:"h*(4/10)"},{action:"line",x:"w*(2/10)",y:"h*(4/10)"},{action:"line",x:"w*(2/10)",y:"h*(2/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(2/10)"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:"w*(1/10)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"w*(1/10)",y:"h"},{action:"line",x:"w*(2/10)*0.5",y:"h*(8/10)"},{action:"line",x:"0",y:"h*(8/10)"},{action:"line",x:"0",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(4/10)"},{action:"line",x:"0",y:"h*(4/10)"},{action:"line",x:"0",y:"h*(2/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(2/10)"},{action:"line",x:"w*(1/10)",y:"0"},{action:"close"}]}]});Schema.addShape({name:"componentNodeNonInstance",title:"节点",category:"uml_component",props:{w:270,h:270},textBlock:[{position:{x:"10",y:"h*(1/9)",w:"w*(8/9)-20",h:"h*(8/9)"}}],path:[{actions:[{action:"move",x:"0",y:"h*(1/9)"},{action:"line",x:"w*(8/9)",y:"h*(1/9)"},{action:"line",x:"w*(8/9)",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"h*(1/9)"},{action:"close"}]},{lineStyle:{lineStyle:"solid",lineWidth:2},fillStyle:{type:"solid",color:"r-25,g-25,b-25"},actions:[{action:"move",x:"0",y:"h*(1/9)"},{action:"line",x:"w*(1/9)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h*(8/9)"},{action:"line",x:"w*(8/9)",y:"h"},{action:"line",x:"w*(8/9)",y:"h*(1/9)"},{action:"line",x:"0",y:"h*(1/9)"},{action:"close"},{action:"move",x:"w*(8/9)",y:"h*(1/9)"},{action:"line",x:"w",y:"0"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"componentStart",title:"接口",category:"uml_component",props:{w:40,h:40},textBlock:[{position:{x:"-20",y:"h",w:"w+40",h:"30"}}],path:[{lineStyle:{lineStyle:"solid"},actions:{ref:"round"}}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_deployment.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_deployment.js
                                                  new file mode 100644
                                                  index 00000000..df840618
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_deployment.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"uml_deployment",text:"UML 部署图",dataAttributes:[]});Schema.addShape({name:"devComponentNonInstance",title:"组件",category:"uml_deployment",props:{w:100,h:70},fontStyle:{bold:true},textBlock:[{position:{x:"w*(1/8)+5",y:"0",w:"w-w*(1/8)-10",h:"h"},text:"组件"}],anchors:[{x:"w*0.5",y:"0"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h"},{x:"0",y:"h*(3/10)"},{x:"0",y:"h*(7/10)"}],path:[{actions:[{action:"move",x:"w*(1/10)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"w*(1/10)",y:"h"},{action:"line",x:"w*(2/10)*0.5",y:"h*(8/10)"},{action:"line",x:"0",y:"h*(8/10)"},{action:"line",x:"0",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(4/10)"},{action:"line",x:"0",y:"h*(4/10)"},{action:"line",x:"0",y:"h*(2/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(2/10)"},{action:"line",x:"w*(1/10)",y:"0"},{action:"close"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"w*(2/10)*0.5",y:"h*(8/10)"},{action:"line",x:"w*(2/10)",y:"h*(8/10)"},{action:"line",x:"w*(2/10)",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(6/10)"},{action:"move",x:"w*(2/10)*0.5",y:"h*(4/10)"},{action:"line",x:"w*(2/10)",y:"h*(4/10)"},{action:"line",x:"w*(2/10)",y:"h*(2/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(2/10)"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:"w*(1/10)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"w*(1/10)",y:"h"},{action:"line",x:"w*(2/10)*0.5",y:"h*(8/10)"},{action:"line",x:"0",y:"h*(8/10)"},{action:"line",x:"0",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(4/10)"},{action:"line",x:"0",y:"h*(4/10)"},{action:"line",x:"0",y:"h*(2/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(2/10)"},{action:"line",x:"w*(1/10)",y:"0"},{action:"close"}]}]});Schema.addShape({name:"devComponent",title:"实例化组件",category:"uml_deployment",props:{w:100,h:70},textBlock:[{position:{x:"w*(1/8)+5",y:"0",w:"w-w*(1/8)-10",h:"h"},text:"实例化组件"}],fontStyle:{underline:true},anchors:[{x:"w*0.5",y:"0"},{x:"w",y:"h*0.5"},{x:"w*0.5",y:"h"},{x:"0",y:"h*(3/10)"},{x:"0",y:"h*(7/10)"}],path:[{actions:[{action:"move",x:"w*(1/10)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"w*(1/10)",y:"h"},{action:"line",x:"w*(2/10)*0.5",y:"h*(8/10)"},{action:"line",x:"0",y:"h*(8/10)"},{action:"line",x:"0",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(4/10)"},{action:"line",x:"0",y:"h*(4/10)"},{action:"line",x:"0",y:"h*(2/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(2/10)"},{action:"line",x:"w*(1/10)",y:"0"},{action:"close"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"w*(2/10)*0.5",y:"h*(8/10)"},{action:"line",x:"w*(2/10)",y:"h*(8/10)"},{action:"line",x:"w*(2/10)",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(6/10)"},{action:"move",x:"w*(2/10)*0.5",y:"h*(4/10)"},{action:"line",x:"w*(2/10)",y:"h*(4/10)"},{action:"line",x:"w*(2/10)",y:"h*(2/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(2/10)"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:"w*(1/10)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h"},{action:"line",x:"w*(1/10)",y:"h"},{action:"line",x:"w*(2/10)*0.5",y:"h*(8/10)"},{action:"line",x:"0",y:"h*(8/10)"},{action:"line",x:"0",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(6/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(4/10)"},{action:"line",x:"0",y:"h*(4/10)"},{action:"line",x:"0",y:"h*(2/10)"},{action:"line",x:"w*(2/10)*0.5",y:"h*(2/10)"},{action:"line",x:"w*(1/10)",y:"0"},{action:"close"}]}]});Schema.addShape({name:"devNodeNonInstance",title:"节点",category:"uml_deployment",props:{w:270,h:270},fontStyle:{bold:true},textBlock:[{position:{x:"10",y:"h*(1/9)",w:"w*(8/9)-20",h:"h*(8/9)"},text:"节点"}],path:[{actions:[{action:"move",x:"0",y:"h*(1/9)"},{action:"line",x:"w*(8/9)",y:"h*(1/9)"},{action:"line",x:"w*(8/9)",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"h*(1/9)"},{action:"close"}]},{lineStyle:{lineStyle:"solid",lineWidth:2},fillStyle:{type:"solid",color:"r-25,g-25,b-25"},actions:[{action:"move",x:"0",y:"h*(1/9)"},{action:"line",x:"w*(1/9)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h*(8/9)"},{action:"line",x:"w*(8/9)",y:"h"},{action:"line",x:"w*(8/9)",y:"h*(1/9)"},{action:"line",x:"0",y:"h*(1/9)"},{action:"close"},{action:"move",x:"w*(8/9)",y:"h*(1/9)"},{action:"line",x:"w",y:"0"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"devNodeInstance",title:"实例化节点",category:"uml_deployment",props:{w:270,h:270},textBlock:[{position:{x:"10",y:"h*(1/9)",w:"w*(8/9)-20",h:"h*(8/9)"},text:"实例化节点"}],fontStyle:{underline:true},path:[{actions:[{action:"move",x:"0",y:"h*(1/9)"},{action:"line",x:"w*(8/9)",y:"h*(1/9)"},{action:"line",x:"w*(8/9)",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"h*(1/9)"},{action:"close"}]},{lineStyle:{lineStyle:"solid",lineWidth:2},fillStyle:{type:"solid",color:"r-25,g-25,b-25"},actions:[{action:"move",x:"0",y:"h*(1/9)"},{action:"line",x:"w*(1/9)",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"h*(8/9)"},{action:"line",x:"w*(8/9)",y:"h"},{action:"line",x:"w*(8/9)",y:"h*(1/9)"},{action:"line",x:"0",y:"h*(1/9)"},{action:"close"},{action:"move",x:"w*(8/9)",y:"h*(1/9)"},{action:"line",x:"w",y:"0"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"uml_deploymentObject",title:"对象",category:"uml_deployment",props:{w:100,h:70},path:[{actions:{ref:"rectangle"}}]});Schema.addShape({name:"uml_deploymentConstraint",title:"约束",category:"uml_deployment",attribute:{linkable:false},props:{w:110,h:70},fillStyle:{type:"none"},textBlock:[{position:{x:"w*0.1",y:"0",w:"w*0.8",h:"h"}}],anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],path:[{fillStyle:{type:"none"},actions:[{action:"move",x:"Math.min(w*0.2,18)",y:"0"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"0",x:"Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"0",y:"h*0.5"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h",x:"Math.min(w*0.2,18)",y:"h"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"w-Math.min(w*0.2,18)",y:"h"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h",x:"w-Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w",y:"h*0.5"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w-Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"0",x:"w-Math.min(w*0.2,18)",y:"0"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_sequence.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_sequence.js
                                                  new file mode 100644
                                                  index 00000000..24b22806
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_sequence.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"uml_sequence",text:"UML 序列图",dataAttributes:[]});Schema.addShape({name:"sequenceObject",title:"对象",category:"uml_sequence",props:{w:100,h:70},path:[{actions:{ref:"rectangle"}}]});Schema.addShape({name:"sequenceEntity",title:"实体",category:"uml_sequence",props:{w:40,h:40},textBlock:[{position:{x:"-20",y:"h",w:"w+40",h:"30"}}],path:[{actions:[{action:"move",x:"0",y:"h*(1/2)"},{action:"curve",x1:"0",y1:"-h*(1/6)",x2:"w",y2:"-h*(1/6)",x:"w",y:"h*(1/2)"},{action:"curve",x1:"w",y1:"h*(7/6)",x2:"0",y2:"h*(7/6)",x:"0",y:"h*(1/2)"},{action:"close"},{action:"move",x:"0",y:"h"},{action:"line",x:"w",y:"h"}]}]});Schema.addShape({name:"sequenceControl",title:"控制",category:"uml_sequence",props:{w:40,h:40},textBlock:[{position:{x:"-20",y:"h",w:"w+40",h:"30"}}],path:[{actions:[{action:"move",x:"0",y:"h*(1/2)"},{action:"curve",x1:"0",y1:"-h*(1/6)",x2:"w",y2:"-h*(1/6)",x:"w",y:"h*(1/2)"},{action:"curve",x1:"w",y1:"h*(7/6)",x2:"0",y2:"h*(7/6)",x:"0",y:"h*(1/2)"},{action:"close"},{action:"move",x:"w*(1/2)",y:"0"},{action:"line",x:"w*(1/2)+6",y:"5"},{action:"move",x:"w*(1/2)",y:"0"},{action:"line",x:"w*(1/2)+6",y:"-5"}]}],drawIcon:function(d,c){return[{actions:[{action:"move",x:0,y:c*(1/2)},{action:"curve",x1:0,y1:-c*(1/6),x2:d,y2:-c*(1/6),x:d,y:c*(1/2)},{action:"curve",x1:d,y1:c*(7/6),x2:0,y2:c*(7/6),x:0,y:c*(1/2)},{action:"close"}]},{actions:[{action:"move",x:d*(1/2),y:0},{action:"line",x:d*(4/6),y:c*(1/12)},{action:"move",x:d*(1/2),y:0},{action:"line",x:d*(4/6),y:-c*(1/12)}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]}});Schema.addShape({name:"sequenceBoundary",title:"绑定",category:"uml_sequence",props:{w:50,h:40},textBlock:[{position:{x:"-20",y:"h",w:"w+40",h:"30"}}],path:[{actions:[{action:"move",x:"w*(1/5)",y:"h*(1/2)"},{action:"curve",x1:"w*(1/5)",y1:"-h*(1/6)",x2:"w",y2:"-h*(1/6)",x:"w",y:"h*(1/2)"},{action:"curve",x1:"w",y1:"h*(7/6)",x2:"w*(1/5)",y2:"h*(7/6)",x:"w*(1/5)",y:"h*(1/2)"},{action:"close"},{action:"move",x:"0",y:"0"},{action:"line",x:"0",y:"h"},{action:"move",x:"0",y:"h*(1/2)"},{action:"line",x:"w*(1/5)",y:"h*(1/2)"}]}]});Schema.addShape({name:"sequenceTimerSignal",title:"时间信号",category:"uml_sequence",props:{w:30,h:30},attribute:{linkable:false},textBlock:[],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"0",y:"h"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}],drawIcon:function(d,c){return[{actions:[{action:"move",x:0,y:5},{action:"line",x:d,y:5},{action:"line",x:0,y:c-5},{action:"line",x:d,y:c-5},{action:"line",x:0,y:5},{action:"close"}]}]}});Schema.addShape({name:"sequenceConstraint",title:"约束",category:"uml_sequence",attribute:{linkable:false},props:{w:110,h:70},fillStyle:{type:"none"},textBlock:[{position:{x:"w*0.1",y:"0",w:"w*0.8",h:"h"}}],anchors:[{x:"w",y:"h*0.5"},{x:"0",y:"h*0.5"}],path:[{fillStyle:{type:"none"},actions:[{action:"move",x:"Math.min(w*0.2,18)",y:"0"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"0",x:"Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"0",y:"h*0.5"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h*0.5",x:"Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"line",x:"Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"Math.min(w*0.1,9)",y1:"h",x:"Math.min(w*0.2,18)",y:"h"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"w-Math.min(w*0.2,18)",y:"h"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h",x:"w-Math.min(w*0.1,9)",y:"h-Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"h*0.5+Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w",y:"h*0.5"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"h*0.5",x:"w-Math.min(w*0.1,9)",y:"h*0.5-Math.min(h*0.1,9)"},{action:"line",x:"w-Math.min(w*0.1,9)",y:"Math.min(h*0.1,9)"},{action:"quadraticCurve",x1:"w-Math.min(w*0.1,9)",y1:"0",x:"w-Math.min(w*0.2,18)",y:"0"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"sequenceActivation",title:"激活",category:"uml_sequence",props:{w:30,h:100},resizeDir:["t","b"],anchors:[],textBlock:[],path:[{actions:[{action:"move",x:"0",y:"4"},{action:"quadraticCurve",x1:"0",y1:"0",x:"4",y:"0"},{action:"line",x:"w-4",y:"0"},{action:"quadraticCurve",x1:"w",y1:"0",x:"w",y:"4"},{action:"line",x:"w",y:"h-4"},{action:"quadraticCurve",x1:"w",y1:"h",x:"w-4",y:"h"},{action:"line",x:"4",y:"h"},{action:"quadraticCurve",x1:"0",y1:"h",x:"0",y:"h-4"},{action:"line",x:"0",y:"4"},{action:"close"}]}],drawIcon:function(d,f){d+=6;var e=-3;return[{actions:[{action:"move",x:e,y:4},{action:"quadraticCurve",x1:e,y1:0,x:0,y:0},{action:"line",x:d-4-3,y:0},{action:"quadraticCurve",x1:d-3,y1:0,x:d-3,y:4},{action:"line",x:d-3,y:f-4},{action:"quadraticCurve",x1:d-3,y1:f,x:d-4-3,y:f},{action:"line",x:0,y:f},{action:"quadraticCurve",x1:e,y1:f,x:e,y:f-4},{action:"line",x:e,y:4},{action:"close"}]}]}});Schema.addShape({name:"sequenceLifeLine",title:"生命线",category:"uml_sequence",props:{w:70,h:140},attribute:{linkable:false},textBlock:[{position:{x:"10",y:"0",w:"w-20",h:"30"}}],anchors:[],path:[{lineStyle:{lineWidth:2,lineStyle:"dot"},fillStyle:{type:"none"},actions:[{action:"move",x:"w*(1/2)",y:"30"},{action:"line",x:"w*(1/2)",y:"h"}]},{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w",y:"30"},{action:"line",x:"0",y:"30"},{action:"close"}]}],drawIcon:function(d,c){d+=4;return[{lineStyle:{lineWidth:2,lineStyle:"dot"},actions:[{action:"move",x:d/2-1,y:c*0.2},{action:"line",x:d/2-1,y:c}]},{actions:[{action:"move",x:-6,y:0},{action:"line",x:d+3,y:0},{action:"line",x:d+3,y:c*0.2},{action:"line",x:-6,y:c*0.2},{action:"close"}]}]}});Schema.addShape({name:"sequenceDeletion",title:"删除",category:"uml_sequence",props:{w:40,h:40},attribute:{linkable:false},textBlock:[],path:[{lineStyle:{lineWidth:4},fillStyle:{type:"none"},actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"h"},{action:"move",x:"w",y:"0"},{action:"line",x:"0",y:"h"},]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}],drawIcon:function(d,c){return[{lineStyle:{lineWidth:4},actions:[{action:"move",x:0,y:0},{action:"line",x:d*0.7,y:c*0.7},{action:"move",x:d*0.7,y:0},{action:"line",x:0,y:c*0.7}]}]}});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_stateactivity.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_stateactivity.js
                                                  new file mode 100644
                                                  index 00000000..e251716b
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_stateactivity.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"uml_stateactivity",text:"UML 状态图/活动图",dataAttributes:[]});Schema.addShape({name:"umlObject",title:"对象",category:"uml_stateactivity",props:{w:100,h:70},path:[{actions:{ref:"rectangle"}}]});Schema.addShape({name:"umlState",title:"状态",category:"uml_stateactivity",props:{w:100,h:70},path:[{actions:[{action:"move",x:"0",y:"18"},{action:"quadraticCurve",x1:"0",y1:"0",x:"18",y:"0"},{action:"line",x:"w-18",y:"0"},{action:"quadraticCurve",x1:"w",y1:"0",x:"w",y:"18"},{action:"line",x:"w",y:"h-18"},{action:"quadraticCurve",x1:"w",y1:"h",x:"w-18",y:"h"},{action:"line",x:"18",y:"h"},{action:"quadraticCurve",x1:"0",y1:"h",x:"0",y:"h-18"},{action:"line",x:"0",y:"18"},{action:"close"}]}],drawIcon:function(d,c){return[{actions:[{action:"move",x:0,y:6},{action:"quadraticCurve",x1:0,y1:0,x:6,y:0},{action:"line",x:d-6,y:0},{action:"quadraticCurve",x1:d,y1:0,x:d,y:6},{action:"line",x:d,y:c-6},{action:"quadraticCurve",x1:d,y1:c,x:d-6,y:c},{action:"line",x:6,y:c},{action:"quadraticCurve",x1:0,y1:c,x:0,y:c-6},{action:"line",x:0,y:6},{action:"close"}]}]}});Schema.addShape({name:"umlStart",title:"开始",category:"uml_stateactivity",props:{w:40,h:40},textBlock:[{position:{x:"-20",y:"h",w:"w+40",h:"30"}}],path:[{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:"50,50,50"},actions:{ref:"round"}}]});Schema.addShape({name:"umlEnd",title:"结束",category:"uml_stateactivity",props:{w:40,h:40},textBlock:[{position:{x:"-20",y:"h",w:"w+40",h:"30"}}],path:[{lineStyle:{lineWidth:"lineWidth + 2",lineStyle:"solid"},actions:{ref:"round"}},{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:"50,50,50"},actions:[{action:"move",x:"w*0.5 - w*0.25",y:"h*0.5"},{action:"curve",x1:"w*0.5 - w*0.25",y1:"h*0.5 - h*2/3*0.5",x2:"w*0.5 + w*0.25",y2:"h*0.5 - h*2/3*0.5",x:"w*0.5 + w*0.25",y:"h*0.5"},{action:"curve",x1:"w*0.5 + w*0.25",y1:"h*0.5 + h*2/3*0.5",x2:"w*0.5 - w*0.25",y2:"h*0.5 + h*2/3*0.5",x:"w*0.5 - w*0.25",y:"h*0.5"},{action:"close"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"round"}}]});Schema.addShape({name:"flowFinal",title:"流终止",category:"uml_stateactivity",props:{w:40,h:40},textBlock:[],path:[{actions:{ref:"round"}},{actions:[{action:"move",x:"w*(1/6)",y:"h*(1/6)"},{action:"line",x:"w*(5/6)",y:"h*(5/6)"},{action:"move",x:"w*(5/6)",y:"h*(1/6)"},{action:"line",x:"w*(1/6)",y:"h*(5/6)"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"round"}}]});Schema.addShape({name:"simpleHistory",title:"历史",category:"uml_stateactivity",props:{w:40,h:40},textBlock:[],path:[{actions:{ref:"round"}},{actions:[{action:"move",x:"w*(1/3)",y:"h*(1/3)"},{action:"line",x:"w*(1/3)",y:"h*(2/3)"},{action:"move",x:"w*(1/3)",y:"h*(1/2)"},{action:"line",x:"w*(2/3)",y:"h*(1/2)"},{action:"move",x:"w*(2/3)",y:"h*(1/3)"},{action:"line",x:"w*(2/3)",y:"h*(2/3)"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"round"}}]});Schema.addShape({name:"detialHistory ",title:"详细历史",category:"uml_stateactivity",props:{w:40,h:40},textBlock:[],path:[{actions:{ref:"round"}},{fillStyle:{type:"none"},actions:[{action:"move",x:"w*(1/5)+w*(1/80)",y:"h*(1/3)-h*(1/10)"},{action:"line",x:"w*(1/5)+w*(1/80)",y:"h*(2/3)+h*(1/10)"},{action:"move",x:"w*(1/5)+w*(1/80)",y:"h*(1/2)"},{action:"line",x:"w*(1/5)+w*(1/80)+w*(1/5)*(8/9)",y:"h*(1/2)"},{action:"move",x:"w*(1/5)+w*(1/80)+w*(1/5)*(8/9)",y:"h*(1/3)-h*(1/10)"},{action:"line",x:"w*(1/5)+w*(1/80)+w*(1/5)*(8/9) ",y:"h*(2/3)+h*(1/10)"}]},{fillStyle:{type:"none"},actions:[{action:"move",x:"w*(1/5)+w*(1/4)",y:"h*(1/3)+h*(1/3)*(1/4)"},{action:"line",x:"w*(4/5)",y:"h*(1/3)+h*(1/3)*(3/4)"},{action:"move",x:"w*(6/10)+w*(1/40)",y:"h*(1/3)"},{action:"line",x:"w*(6/10)+w*(1/40)",y:"h*(2/3)"},{action:"move",x:"w*(4/5)",y:"h*(1/3)+h*(1/3)*(1/4)"},{action:"line",x:"w*(1/5)+w*(1/4)",y:"h*(1/3)+h*(1/3)*(3/4)"}]},{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:{ref:"round"}}]});Schema.addShape({name:"sendSignal",title:"发送信号",category:"uml_stateactivity",props:{w:150,h:70},textBlock:[{position:{x:"w*0.1",y:"2",w:"(w-Math.min(h/2,w/6))*0.8",h:"h-2"}}],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});Schema.addShape({name:"receiveSignal",title:"接收信号",category:"uml_stateactivity",props:{w:150,h:70},textBlock:[{position:{x:"w*0.1",y:"2",w:"(w-Math.min(h/2,w/6))*0.8",h:"h-2"}}],path:[{actions:[{action:"move",x:"0",y:"0"},{action:"line",x:"w",y:"0"},{action:"line",x:"w-Math.min(h/2,w/6)",y:"h*0.5"},{action:"line",x:"w",y:"h"},{action:"line",x:"0",y:"h"},{action:"line",x:"0",y:"0"},{action:"close"}]}]});Schema.addShape({name:"branchMerge",title:"分支",category:"uml_stateactivity",props:{w:40,h:40},textBlock:[],path:[{actions:[{action:"move",x:"0",y:"h*0.5"},{action:"line",x:"w*0.5",y:"0"},{action:"line",x:"w",y:"h*0.5"},{action:"line",x:"w*0.5",y:"h"},{action:"line",x:"0",y:"h*0.5"},{action:"close"}]}]});Schema.addShape({name:"Synchronization",title:"同步",category:"uml_stateactivity",props:{w:120,h:20},textBlock:[],resizeDir:["l","r"],anchors:[],path:[{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:"50,50,50"},actions:{ref:"roundRectangle"}}],drawIcon:function(d,c){c+=2;return[{lineStyle:{lineWidth:0,lineStyle:"solid"},fillStyle:{type:"solid",color:"50,50,50"},actions:[{action:"move",x:0,y:3-5+3},{action:"quadraticCurve",x1:0,y1:-5+3,x:3,y:-5+3},{action:"line",x:d-3,y:-5+3},{action:"quadraticCurve",x1:d,y1:-5+3,x:d,y:3-5+3},{action:"line",x:d,y:c-3},{action:"quadraticCurve",x1:d,y1:c,x:d-3,y:c},{action:"line",x:3,y:c},{action:"quadraticCurve",x1:0,y1:c,x:0,y:c-3},{action:"line",x:0,y:3-5+3},{action:"close"}]}]}});Schema.addShape({name:"stateRectangleContainer",title:"容器",category:"uml_stateactivity",props:{w:300,h:240},textBlock:[{position:{x:"5",y:"2",w:"w-10",h:"h*(1/7)-2"}}],path:[{actions:{ref:"roundRectangle"}}]});Schema.addShape({name:"swimlane",title:"泳道(垂直)",category:"uml_stateactivity",attribute:{rotatable:false,linkable:false,container:true},children:[],props:{w:250,h:540},fontStyle:{size:16},textBlock:[{position:{x:10,y:0,w:"w-20",h:40}}],anchors:[],resizeDir:["l","b","r"],path:[{fillStyle:{type:"none"},lineStyle:{lineStyle:"solid"},actions:{ref:"rectangle"}},{lineStyle:{lineStyle:"solid"},actions:[{action:"move",x:0,y:0},{action:"line",x:"w",y:0},{action:"line",x:"w",y:40},{action:"line",x:0,y:40},{action:"close"}]}],drawIcon:function(d,f){var e=-4;return[{fillStyle:{type:"none"},actions:[{action:"move",x:e,y:0},{action:"line",x:d,y:0},{action:"line",x:d,y:f},{action:"line",x:e,y:f},{action:"close"}]},{actions:[{action:"move",x:e,y:0},{action:"line",x:d,y:0},{action:"line",x:d,y:4},{action:"line",x:e,y:4},{action:"close"}]}]}});Schema.addShape({name:"horizontalSwimlane",title:"泳道(水平)",category:"uml_stateactivity",attribute:{rotatable:false,linkable:false,container:true},children:[],props:{w:640,h:200},fontStyle:{size:16,orientation:"horizontal"},textBlock:[{position:{x:0,y:10,w:40,h:"h-20"}}],anchors:[],resizeDir:["t","r","b"],path:[{fillStyle:{type:"none"},lineStyle:{lineStyle:"solid"},actions:{ref:"rectangle"}},{lineStyle:{lineStyle:"solid"},actions:[{action:"move",x:0,y:0},{action:"line",x:40,y:0},{action:"line",x:40,y:"h"},{action:"line",x:0,y:"h"},{action:"close"}]}],drawIcon:function(e,d){var f=-4;return[{fillStyle:{type:"none"},actions:[{action:"move",x:0,y:f},{action:"line",x:e,y:f},{action:"line",x:e,y:d},{action:"line",x:0,y:d},{action:"close"}]},{actions:[{action:"move",x:0,y:f},{action:"line",x:4,y:f},{action:"line",x:4,y:d},{action:"line",x:0,y:d},{action:"close"}]}]}});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_usecase.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_usecase.js
                                                  new file mode 100644
                                                  index 00000000..94a06d9e
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/uml_usecase.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"uml_usecase",text:"UML 用例图",dataAttributes:[]});Schema.addShape({name:"actor",title:"角色",category:"uml_usecase",props:{w:70,h:100},textBlock:[{position:{x:"-20",y:"h",w:"w+40",h:"30"}}],path:[{actions:[{action:"move",x:"w*(4/12)",y:"h*(1/8)"},{action:"curve",x1:"w*(4/12)",y1:"-h*(2/8)*(1/6)",x2:"w*(8/12)",y2:"-h*(2/8)*(1/6)",x:"w*(8/12)",y:"h*(1/8)"},{action:"curve",x1:"w*(8/12)",y1:"h*(2/8)*1/6+h*(2/8)",x2:"w*(4/12)",y2:"h*(2/8)*1/6+h*(2/8)",x:"w*(4/12)",y:"h*(1/8)"},{action:"move",x:"w*(6/12)",y:"h*(2/8)"},{action:"line",x:"w*(6/12)",y:"h*(6/8)"},{action:"move",x:"w*(6/12)",y:"h*(6/8)"},{action:"line",x:"w*(1/12)",y:"h"},{action:"move",x:"w*(6/12)",y:"h*(6/8)"},{action:"line",x:"w*(11/12)",y:"h"},{action:"move",x:"0",y:"h*(4/8)"},{action:"line",x:"w",y:"h*(4/8)"}]},{lineStyle:{lineWidth:0},fillStyle:{type:"none"},actions:{ref:"rectangle"}}]});Schema.addShape({name:"useCase",title:"用例",category:"uml_usecase",props:{w:100,h:70},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"ovalContainer",title:"容器",category:"uml_usecase",props:{w:150,h:220},textBlock:[{position:{x:"0",y:"0",w:"w",h:"h"}}],path:[{actions:[{action:"move",x:"0",y:"h/2"},{action:"curve",x1:"0",y1:"-h/6",x2:"w",y2:"-h/6",x:"w",y:"h/2"},{action:"curve",x1:"w",y1:"h+h/6",x2:"0",y2:"h+h/6",x:"0",y:"h/2"},{action:"close"}]}]});Schema.addShape({name:"rectangleContainer",title:"容器",category:"uml_usecase",props:{w:300,h:240},textBlock:[{position:{x:"5",y:"2",w:"w-10",h:"h*(1/7)-2"}}],path:[{actions:{ref:"roundRectangle"}}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/venn.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/venn.js
                                                  new file mode 100644
                                                  index 00000000..7000f68e
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/categories/venn.js
                                                  @@ -0,0 +1 @@
                                                  +Schema.addCategory({name:"venn",text:"维恩图",dataAttributes:[]});Schema.addShape({name:"greenGradientVennCircle",title:"Green Gradient Venn",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.35},lineStyle:{lineWidth:0,lineColor:"0,255,0",lineStyle:"none"},fillStyle:{type:"gradient",gradientType:"radial",beginColor:"255,255,255",endColor:"0,255,0",radius:0.6},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"redGradientVennCircle",title:"Red Gradient Venn",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.35},lineStyle:{lineWidth:0,lineColor:"255,0,0",lineStyle:"none"},fillStyle:{type:"gradient",gradientType:"radial",beginColor:"255,255,255",endColor:"255,0,0",radius:0.6},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"blueGradientVennCircle",title:"Blue Gradient Venn",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.35},lineStyle:{lineWidth:0,lineColor:"0,0,255",lineStyle:"none"},fillStyle:{type:"gradient",gradientType:"radial",beginColor:"255,255,255",endColor:"0,0,255",radius:0.6},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"greenVenn",title:"Green Venn",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.5},lineStyle:{lineWidth:0,lineColor:"160,191,124",lineStyle:"none"},fillStyle:{color:"160,191,124"},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"redVenn",title:"Red Venn",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.5},lineStyle:{lineWidth:0,lineColor:"247,68,97",lineStyle:"none"},fillStyle:{color:"247,68,97"},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"blueVenn",title:"Blue Venn",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.5},lineStyle:{lineWidth:0,lineColor:"36,118,192",lineStyle:"none"},fillStyle:{color:"36,118,192"},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"greenVennCircle",title:"Green Venn Circle",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.5},lineStyle:{lineWidth:2,lineColor:"121,148,90"},fillStyle:{color:"160,191,124"},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"redVennCircle",title:"Red Venn Circle",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.5},lineStyle:{lineWidth:2,lineColor:"166,70,86"},fillStyle:{color:"247,68,97"},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"blueVennCircle",title:"Blue Venn Circle",category:"venn",props:{w:200,h:200},shapeStyle:{alpha:0.5},lineStyle:{lineWidth:2,lineColor:"41,102,157"},fillStyle:{color:"36,118,192"},path:[{actions:{ref:"round"}}]});Schema.addShape({name:"blackVennCircle",title:"Black Venn Circle",category:"venn",props:{w:200,h:200},lineStyle:{lineWidth:2,lineColor:"48,50,51"},fillStyle:{type:"none"},path:[{actions:{ref:"round"}}]});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/schema.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/schema.js
                                                  new file mode 100644
                                                  index 00000000..5f6578ea
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/schema.js
                                                  @@ -0,0 +1,1017 @@
                                                  +var Schema = {
                                                  +  config: {
                                                  +    markerSize: 14
                                                  +  },
                                                  +  pageDefaults: {
                                                  +    backgroundColor: "255,255,255",
                                                  +    width: 1600,
                                                  +    height: 2500,
                                                  +    padding: 60,
                                                  +    showGrid: true,
                                                  +    gridSize: 15
                                                  +  },
                                                  +  shapeDefaults: {
                                                  +    id: "",
                                                  +    name: "",
                                                  +    title: "",
                                                  +    text: "",
                                                  +    category: "",
                                                  +    group: "",
                                                  +    groupName: null,
                                                  +    locked: false,
                                                  +    link: "",
                                                  +    children: [],
                                                  +    parent: "",
                                                  +    orderIndex: 0,
                                                  +    resizeDir: ["tl", "tr", "br", "bl"],
                                                  +    attribute: {
                                                  +      container: false,
                                                  +      visible: true,
                                                  +      rotatable: false,
                                                  +      linkable: true,
                                                  +      editable: true,
                                                  +      markerOffset: 5
                                                  +    },
                                                  +    dataAttributes: [{
                                                  +      name: "AWSProperties",
                                                  +      type: "string",
                                                  +      value: "",
                                                  +      category: "default",
                                                  +      id: "AWSPropertiesID",
                                                  +      linksArray: new Array(),
                                                  +      attributesContent: "",
                                                  +      attributesJsonArray: new Array(),
                                                  +      privateAttribute: [],
                                                  +      privateAttributeContent: [],
                                                  +      privateShapesName: [],
                                                  +      shapeGroupId: "",
                                                  +      isCopy: "",
                                                  +      shapeDesc: "",
                                                  +      upFilesArray: new Array(),
                                                  +      relevanceShapes: new Array()
                                                  +    }],
                                                  +    props: {
                                                  +      x: 0,
                                                  +      y: 0,
                                                  +      w: 120,
                                                  +      h: 80,
                                                  +      zindex: 0,
                                                  +      angle: 0
                                                  +    },
                                                  +    shapeStyle: {
                                                  +      alpha: 1
                                                  +    },
                                                  +    lineStyle: {
                                                  +      lineWidth: 1,
                                                  +      lineColor: "50,50,50",
                                                  +      lineStyle: "solid"
                                                  +    },
                                                  +    fillStyle: {
                                                  +      type: "solid",
                                                  +      color: "255,255,255"
                                                  +    },
                                                  +    fontStyle: {
                                                  +      fontFamily: "Arial",
                                                  +      size: 13,
                                                  +      color: "50,50,50",
                                                  +      bold: false,
                                                  +      italic: false,
                                                  +      underline: false,
                                                  +      textAlign: "center",
                                                  +      vAlign: "middle",
                                                  +      orientation: "vertical"
                                                  +    },
                                                  +    path: [{
                                                  +      actions: [{
                                                  +        action: "move",
                                                  +        x: "0",
                                                  +        y: "0"
                                                  +      },
                                                  +      {
                                                  +        action: "line",
                                                  +        x: "w",
                                                  +        y: "0"
                                                  +      },
                                                  +      {
                                                  +        action: "line",
                                                  +        x: "w",
                                                  +        y: "h"
                                                  +      },
                                                  +      {
                                                  +        action: "line",
                                                  +        x: "0",
                                                  +        y: "h"
                                                  +      },
                                                  +      {
                                                  +        action: "close"
                                                  +      }]
                                                  +    }],
                                                  +    textBlock: {
                                                  +      x: "10",
                                                  +      y: "0",
                                                  +      w: "w-20",
                                                  +      h: "h"
                                                  +    },
                                                  +    textBlockFinal: {
                                                  +      x: "w/2-60",
                                                  +      y: "h",
                                                  +      w: "120",
                                                  +      h: "30"
                                                  +    },
                                                  +    anchors: [{
                                                  +      x: "w/2",
                                                  +      y: "0"
                                                  +    },
                                                  +    {
                                                  +      x: "w/2",
                                                  +      y: "h"
                                                  +    },
                                                  +    {
                                                  +      x: "0",
                                                  +      y: "h/2"
                                                  +    },
                                                  +    {
                                                  +      x: "w",
                                                  +      y: "h/2"
                                                  +    }],
                                                  +    resizeable: "1"
                                                  +  },
                                                  +  linkerDefaults: {
                                                  +    id: "",
                                                  +    name: "linker",
                                                  +    text: "",
                                                  +    group: "",
                                                  +    linkerType: "broken",
                                                  +    points: [],
                                                  +    locked: false,
                                                  +    dataAttributes: [{
                                                  +      name: "AWSProperties",
                                                  +      type: "string",
                                                  +      value: "",
                                                  +      category: "default",
                                                  +      id: "AWSPropertiesID",
                                                  +      shapeDesc: ""
                                                  +    }],
                                                  +    orderIndex: 0,
                                                  +    props: {
                                                  +      zindex: 0
                                                  +    },
                                                  +    lineStyle: {
                                                  +      lineWidth: 1,
                                                  +      lineColor: "50,50,50",
                                                  +      lineStyle: "solid",
                                                  +      beginArrowStyle: "none",
                                                  +      endArrowStyle: "solidArrow"
                                                  +    },
                                                  +    fontStyle: {
                                                  +      fontFamily: "Arial",
                                                  +      size: 13,
                                                  +      color: "50,50,50",
                                                  +      bold: false,
                                                  +      italic: false,
                                                  +      underline: false,
                                                  +      textAlign: "center"
                                                  +    }
                                                  +  },
                                                  +  categories: [],
                                                  +  shapes: {},
                                                  +  markers: {},
                                                  +  addCategory: function(b) {
                                                  +    Schema.categories.push(b);
                                                  +    CategoryMapping[b.name] = b
                                                  +  },
                                                  +  addShape: function(b) {
                                                  +	  if (typeof Schema.shapes[b.name] != "undefined") {} else {
                                                  +      if (b.groupName) {
                                                  +        SchemaGroup.addGroupShape(b.groupName, b.name)
                                                  +      }
                                                  +    }
                                                  +    Schema.shapes[b.name] = this.initShape(b)
                                                  +  },
                                                  +  initShape: function(d) {
                                                  +    var e = {};
                                                  +    for (var f in this.shapeDefaults) {
                                                  +      if (f == "attribute") {
                                                  +        e.attribute = this.extend(d.attribute, this.shapeDefaults.attribute)
                                                  +      } else {
                                                  +        if (f == "props") {
                                                  +          e.props = this.extend(d.props, this.shapeDefaults.props)
                                                  +        } else {
                                                  +          if (f == "shapeStyle") {
                                                  +            e.shapeStyle = this.extend(d.shapeStyle, this.shapeDefaults.shapeStyle)
                                                  +          } else {
                                                  +            if (f == "lineStyle") {
                                                  +              e.lineStyle = this.extend(d.lineStyle, this.shapeDefaults.lineStyle)
                                                  +            } else {
                                                  +              if (f == "fillStyle") {
                                                  +                e.fillStyle = this.extend(d.fillStyle, this.shapeDefaults.fillStyle)
                                                  +              } else {
                                                  +                if (f == "fontStyle") {
                                                  +                  e.fontStyle = this.extend(d.fontStyle, this.shapeDefaults.fontStyle)
                                                  +                } else {
                                                  +                  if (typeof d[f] != "undefined") {
                                                  +                    e[f] = d[f]
                                                  +                  } else {
                                                  +                    e[f] = this.shapeDefaults[f]
                                                  +                  }
                                                  +                }
                                                  +              }
                                                  +            }
                                                  +          }
                                                  +        }
                                                  +      }
                                                  +    }
                                                  +    if (d.onCreated) {
                                                  +      e.onCreated = d.onCreated
                                                  +    }
                                                  +    if (d.drawIcon) {
                                                  +      e.drawIcon = d.drawIcon
                                                  +    }
                                                  +    return e
                                                  +  },
                                                  +  extend: function(g, h) {
                                                  +    if (!g) {
                                                  +      g = {}
                                                  +    }
                                                  +    var f = {};
                                                  +    for (var e in h) {
                                                  +      f[e] = h[e]
                                                  +    }
                                                  +    for (var e in g) {
                                                  +      f[e] = g[e]
                                                  +    }
                                                  +    return f
                                                  +  },
                                                  +  addGlobalCommand: function(d, c) {
                                                  +    GlobalCommand[d] = c
                                                  +  },
                                                  +  addMarker: function(d, c) {
                                                  +    if (typeof Schema.markers[d] != "undefined") {
                                                  +      throw "--Duplicated marker name: " + d
                                                  +    }
                                                  +    Schema.markers[d] = c
                                                  +  },
                                                  +  empty: function() {
                                                  +    Schema.categories = [];
                                                  +    Schema.shapes = {};
                                                  +    CategoryMapping = {};
                                                  +    SchemaGroup.groups = {}
                                                  +  },
                                                  +  init: function(f) {
                                                  +    for (var d in Schema.shapes) {
                                                  +      var e = Schema.shapes[d];
                                                  +      this.initShapePath(e);
                                                  +      if (f) {
                                                  +        this.initShapeFunctions(e)
                                                  +      }
                                                  +      this.initShapeDataAttribute(e)
                                                  +    }
                                                  +  },
                                                  +  initShapePath: function(f) {
                                                  +    if (f.path) {
                                                  +      for (var e = 0; e < f.path.length; e++) {
                                                  +        var h = f.path[e];
                                                  +        var g = h.actions;
                                                  +        if (g.ref) {
                                                  +          f.path[e].actions = GlobalCommand[g.ref]
                                                  +        }
                                                  +      }
                                                  +    }
                                                  +  },
                                                  +  initShapeFunctions: function(shape) {
                                                  +    var pathEval = "shape.getPath = function(){var w = this.props.w; var h = this.props.h; var lineWidth = this.lineStyle.lineWidth; ";
                                                  +    pathEval += SchemaHelper.constructPathFunBody(shape.path) + "}";
                                                  +    eval(pathEval);
                                                  +    var block = shape.textBlock;
                                                  +    var textEval = "shape.getTextBlock = function(){var w = this.props.w; var h = this.props.h; return {x:";
                                                  +    textEval += block.x + ",y:" + block.y + ",w:" + block.w + ",h:" + block.h + "}}";
                                                  +    eval(textEval);
                                                  +    var anchorsEval = "shape.getAnchors = function(){var w = this.props.w; var h = this.props.h; return [";
                                                  +    for (var i = 0; i < shape.anchors.length; i++) {
                                                  +      var anchor = shape.anchors[i];
                                                  +      anchorsEval += "{x:" + anchor.x + ", y:" + anchor.y + "}";
                                                  +      if (i < shape.anchors.length - 1) {
                                                  +        anchorsEval += ","
                                                  +      }
                                                  +    }
                                                  +    anchorsEval += "];}";
                                                  +    eval(anchorsEval)
                                                  +  },
                                                  +  initMarkers: function() {
                                                  +    for (var name in Schema.markers) {
                                                  +      var pathEval = "Schema.markers['" + name + "'] = function(size){var w = size; var h = size; var lineWidth = this.lineStyle.lineWidth; ";
                                                  +      pathEval += SchemaHelper.constructPathFunBody(Schema.markers[name]) + "}";
                                                  +      eval(pathEval)
                                                  +    }
                                                  +  },
                                                  +  initShapeDataAttribute: function(c) {
                                                  +    var d = CategoryMapping[c.category].dataAttributes;
                                                  +    if (!c.dataAttributes) {
                                                  +      c.dataAttributes = []
                                                  +    }
                                                  +    if (d && d.length > 0) {
                                                  +      c.dataAttributes = d.concat(c.dataAttributes)
                                                  +    }
                                                  +  }
                                                  +};
                                                  +var CategoryMapping = {};
                                                  +var GlobalCommand = {};
                                                  +Schema.addGlobalCommand("rectangle", [{
                                                  +  action: "move",
                                                  +  x: "0",
                                                  +  y: "0"
                                                  +},
                                                  +{
                                                  +  action: "line",
                                                  +  x: "w",
                                                  +  y: "0"
                                                  +},
                                                  +{
                                                  +  action: "line",
                                                  +  x: "w",
                                                  +  y: "h"
                                                  +},
                                                  +{
                                                  +  action: "line",
                                                  +  x: "0",
                                                  +  y: "h"
                                                  +},
                                                  +{
                                                  +  action: "close"
                                                  +}]);
                                                  +Schema.addGlobalCommand("round", [{
                                                  +  action: "move",
                                                  +  x: "0",
                                                  +  y: "h/2"
                                                  +},
                                                  +{
                                                  +  action: "curve",
                                                  +  x1: "0",
                                                  +  y1: "-h/6",
                                                  +  x2: "w",
                                                  +  y2: "-h/6",
                                                  +  x: "w",
                                                  +  y: "h/2"
                                                  +},
                                                  +{
                                                  +  action: "curve",
                                                  +  x1: "w",
                                                  +  y1: "h+h/6",
                                                  +  x2: "0",
                                                  +  y2: "h+h/6",
                                                  +  x: "0",
                                                  +  y: "h/2"
                                                  +},
                                                  +{
                                                  +  action: "close"
                                                  +}]);
                                                  +Schema.addGlobalCommand("roundRectangle", [{
                                                  +  action: "move",
                                                  +  x: "0",
                                                  +  y: "4"
                                                  +},
                                                  +{
                                                  +  action: "quadraticCurve",
                                                  +  x1: "0",
                                                  +  y1: "0",
                                                  +  x: "4",
                                                  +  y: "0"
                                                  +},
                                                  +{
                                                  +  action: "line",
                                                  +  x: "w-4",
                                                  +  y: "0"
                                                  +},
                                                  +{
                                                  +  action: "quadraticCurve",
                                                  +  x1: "w",
                                                  +  y1: "0",
                                                  +  x: "w",
                                                  +  y: "4"
                                                  +},
                                                  +{
                                                  +  action: "line",
                                                  +  x: "w",
                                                  +  y: "h-4"
                                                  +},
                                                  +{
                                                  +  action: "quadraticCurve",
                                                  +  x1: "w",
                                                  +  y1: "h",
                                                  +  x: "w-4",
                                                  +  y: "h"
                                                  +},
                                                  +{
                                                  +  action: "line",
                                                  +  x: "4",
                                                  +  y: "h"
                                                  +},
                                                  +{
                                                  +  action: "quadraticCurve",
                                                  +  x1: "0",
                                                  +  y1: "h",
                                                  +  x: "0",
                                                  +  y: "h-4"
                                                  +},
                                                  +{
                                                  +  action: "close"
                                                  +}]);
                                                  +Schema.addMarker("expand", [{
                                                  +  lineStyle: {
                                                  +    lineWidth: 2,
                                                  +    lineColor: "50,50,50",
                                                  +    lineStyle: "solid"
                                                  +  },
                                                  +  fillStyle: {
                                                  +    type: "none"
                                                  +  },
                                                  +  actions: [{
                                                  +    action: "move",
                                                  +    x: "w/2",
                                                  +    y: "2"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w/2",
                                                  +    y: "h-2"
                                                  +  },
                                                  +  {
                                                  +    action: "move",
                                                  +    x: "2",
                                                  +    y: "h/2"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w-2",
                                                  +    y: "h/2"
                                                  +  },
                                                  +  {
                                                  +    action: "move",
                                                  +    x: "0",
                                                  +    y: "0"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w",
                                                  +    y: "0"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w",
                                                  +    y: "h"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "0",
                                                  +    y: "h"
                                                  +  },
                                                  +  {
                                                  +    action: "close"
                                                  +  }]
                                                  +}]);
                                                  +Schema.addMarker("ad_hoc", [{
                                                  +  lineStyle: {
                                                  +    lineWidth: 3,
                                                  +    lineColor: "50,50,50",
                                                  +    lineStyle: "solid"
                                                  +  },
                                                  +  fillStyle: {
                                                  +    type: "none"
                                                  +  },
                                                  +  actions: [{
                                                  +    action: "move",
                                                  +    x: "0",
                                                  +    y: "5*h/8"
                                                  +  },
                                                  +  {
                                                  +    action: "curve",
                                                  +    x1: "w/8-1",
                                                  +    y1: "h/2-h/8",
                                                  +    x2: "3*w/8-1",
                                                  +    y2: "h/2-h/8",
                                                  +    x: "w/2",
                                                  +    y: "h/2"
                                                  +  },
                                                  +  {
                                                  +    action: "curve",
                                                  +    x1: "5*w/8-1",
                                                  +    y1: "h/2+h/8",
                                                  +    x2: "7*w/8+1",
                                                  +    y2: "h/2+h/8",
                                                  +    x: "w",
                                                  +    y: "3*w/8"
                                                  +  }]
                                                  +}]);
                                                  +Schema.addMarker("compensation", [{
                                                  +  lineStyle: {
                                                  +    lineWidth: 2,
                                                  +    lineColor: "50,50,50",
                                                  +    lineStyle: "solid"
                                                  +  },
                                                  +  fillStyle: {
                                                  +    type: "none"
                                                  +  },
                                                  +  actions: [{
                                                  +    action: "move",
                                                  +    x: "0",
                                                  +    y: "h*0.5"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w*0.5",
                                                  +    y: "0"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w*0.5",
                                                  +    y: "h"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "0",
                                                  +    y: "h*0.5"
                                                  +  },
                                                  +  {
                                                  +    action: "move",
                                                  +    x: "w*0.5",
                                                  +    y: "h*0.5"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w",
                                                  +    y: "0"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w",
                                                  +    y: "h"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w*0.5",
                                                  +    y: "h*0.5"
                                                  +  }]
                                                  +}]);
                                                  +Schema.addMarker("parallel", [{
                                                  +  lineStyle: {
                                                  +    lineWidth: 4,
                                                  +    lineColor: "50,50,50",
                                                  +    lineStyle: "solid"
                                                  +  },
                                                  +  fillStyle: {
                                                  +    type: "none"
                                                  +  },
                                                  +  actions: [{
                                                  +    action: "move",
                                                  +    x: 1,
                                                  +    y: "0"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: 1,
                                                  +    y: "h"
                                                  +  },
                                                  +  {
                                                  +    action: "move",
                                                  +    x: "w/2",
                                                  +    y: "0"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w/2",
                                                  +    y: "h"
                                                  +  },
                                                  +  {
                                                  +    action: "move",
                                                  +    x: "w-1",
                                                  +    y: "0"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w-1",
                                                  +    y: "h"
                                                  +  }]
                                                  +}]);
                                                  +Schema.addMarker("sequential", [{
                                                  +  lineStyle: {
                                                  +    lineWidth: 4,
                                                  +    lineColor: "50,50,50",
                                                  +    lineStyle: "solid"
                                                  +  },
                                                  +  fillStyle: {
                                                  +    type: "none"
                                                  +  },
                                                  +  actions: [{
                                                  +    action: "move",
                                                  +    x: "0",
                                                  +    y: 1
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w",
                                                  +    y: 1
                                                  +  },
                                                  +  {
                                                  +    action: "move",
                                                  +    x: "0",
                                                  +    y: "h/2"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w",
                                                  +    y: "h/2"
                                                  +  },
                                                  +  {
                                                  +    action: "move",
                                                  +    x: "0",
                                                  +    y: "h-1"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w",
                                                  +    y: "h-1"
                                                  +  }]
                                                  +}]);
                                                  +Schema.addMarker("loop", [{
                                                  +  lineStyle: {
                                                  +    lineWidth: 2,
                                                  +    lineColor: "50,50,50",
                                                  +    lineStyle: "solid"
                                                  +  },
                                                  +  fillStyle: {
                                                  +    type: "none"
                                                  +  },
                                                  +  actions: [{
                                                  +    action: "move",
                                                  +    x: "w/2",
                                                  +    y: "h"
                                                  +  },
                                                  +  {
                                                  +    action: "curve",
                                                  +    x1: "w*7/6",
                                                  +    y1: "h",
                                                  +    x2: "w*7/6",
                                                  +    y2: "0",
                                                  +    x: "w/2",
                                                  +    y: "0"
                                                  +  },
                                                  +  {
                                                  +    action: "curve",
                                                  +    x1: "-w/6",
                                                  +    y1: "0",
                                                  +    x2: "-w*0.2/6",
                                                  +    y2: "h*0.8",
                                                  +    x: "w*0.2",
                                                  +    y: "h*0.8"
                                                  +  },
                                                  +  {
                                                  +    action: "move",
                                                  +    x: "w*0.2",
                                                  +    y: "h*0.8"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "-w*0.1",
                                                  +    y: "h*0.7"
                                                  +  },
                                                  +  {
                                                  +    action: "move",
                                                  +    x: "w*0.2",
                                                  +    y: "h*0.8"
                                                  +  },
                                                  +  {
                                                  +    action: "line",
                                                  +    x: "w*0.25",
                                                  +    y: "h*0.6"
                                                  +  }]
                                                  +}]);
                                                  +Schema.addCategory({
                                                  +  name: "standard",
                                                  +  text: "Standard",
                                                  +  dataAttributes: []
                                                  +});
                                                  +Schema.addShape({
                                                  +  name: "standardText",
                                                  +  title: "",
                                                  +  text: "",
                                                  +  category: "standard",
                                                  +  attribute: {
                                                  +    linkable: false
                                                  +  },
                                                  +  props: {
                                                  +    w: 160,
                                                  +    h: 40
                                                  +  },
                                                  +  anchors: [],
                                                  +  textBlock: {
                                                  +    x: 0,
                                                  +    y: 0,
                                                  +    w: "w",
                                                  +    h: "h"
                                                  +  },
                                                  +  path: [{
                                                  +    lineStyle: {
                                                  +      lineWidth: 0
                                                  +    },
                                                  +    fillStyle: {
                                                  +      type: "none"
                                                  +    },
                                                  +    actions: {
                                                  +      ref: "rectangle"
                                                  +    }
                                                  +  }]
                                                  +});
                                                  +Schema.addShape({
                                                  +  name: "standardImage",
                                                  +  title: "",
                                                  +  text: "",
                                                  +  attribute: {
                                                  +    linkable: false,
                                                  +    editable: false,
                                                  +    visible: false
                                                  +  },
                                                  +  category: "standard",
                                                  +  props: {
                                                  +    w: 100,
                                                  +    h: 70
                                                  +  },
                                                  +  path: [{
                                                  +    lineStyle: {
                                                  +      lineWidth: 0
                                                  +    },
                                                  +    actions: {
                                                  +      ref: "rectangle"
                                                  +    }
                                                  +  }]
                                                  +});
                                                  +Schema.addShape({
                                                  +  name: "standardRectangle",
                                                  +  title: "",
                                                  +  text: "",
                                                  +  attribute: {
                                                  +    visible: false
                                                  +  },
                                                  +  category: "standard",
                                                  +  props: {
                                                  +    w: 100,
                                                  +    h: 70
                                                  +  },
                                                  +  path: [{
                                                  +    actions: {
                                                  +      ref: "rectangle"
                                                  +    }
                                                  +  }]
                                                  +});
                                                  +var SchemaHelper = {
                                                  +  constructPathFunBody: function(l) {
                                                  +    var o = "return [";
                                                  +    for (var p = 0; p < l.length; p++) {
                                                  +      var m = l[p];
                                                  +      o += "{";
                                                  +      if (m.fillStyle) {
                                                  +        o += "fillStyle: {";
                                                  +        if (typeof m.fillStyle.type != "undefined") {
                                                  +          o += "type: '" + m.fillStyle.type + "',"
                                                  +        }
                                                  +        if (typeof m.fillStyle.color != "undefined") {
                                                  +          o += "color: '" + m.fillStyle.color + "',"
                                                  +        }
                                                  +        if (typeof m.fillStyle.fileId != "undefined") {
                                                  +          o += "fileId: '" + m.fillStyle.fileId + "',"
                                                  +        }
                                                  +        if (typeof m.fillStyle.imageX != "undefined") {
                                                  +          o += "imageX: " + m.fillStyle.imageX + ","
                                                  +        }
                                                  +        if (typeof m.fillStyle.imageY != "undefined") {
                                                  +          o += "imageY: " + m.fillStyle.imageY + ","
                                                  +        }
                                                  +        if (typeof m.fillStyle.imageW != "undefined") {
                                                  +          o += "imageW: " + m.fillStyle.imageW + ","
                                                  +        }
                                                  +        if (typeof m.fillStyle.imageH != "undefined") {
                                                  +          o += "imageH: " + m.fillStyle.imageH + ","
                                                  +        }
                                                  +        if (typeof m.fillStyle.display != "undefined") {
                                                  +          o += "display: '" + m.fillStyle.display + "',"
                                                  +        }
                                                  +        o = o.substring(0, o.length - 1);
                                                  +        o += "},"
                                                  +      }
                                                  +      if (m.lineStyle) {
                                                  +        var j = "lineStyle: {";
                                                  +        if (typeof m.lineStyle.lineWidth != "undefined") {
                                                  +          j += "lineWidth:" + m.lineStyle.lineWidth + ","
                                                  +        }
                                                  +        if (typeof m.lineStyle.lineStyle != "undefined") {
                                                  +          j += "lineStyle:'" + m.lineStyle.lineStyle + "',"
                                                  +        }
                                                  +        if (typeof m.lineStyle.lineColor != "undefined") {
                                                  +          j += "lineColor:'" + m.lineStyle.lineColor + "',"
                                                  +        }
                                                  +        j = j.substring(0, j.length - 1);
                                                  +        j += "},";
                                                  +        o += j
                                                  +      }
                                                  +      o += "actions:[";
                                                  +      var k = m.actions;
                                                  +      for (var i = 0; i < k.length; i++) {
                                                  +        var n = k[i];
                                                  +        o += "{action:'" + n.action + "'";
                                                  +        if (n.action == "move" || n.action == "line") {
                                                  +          o += ",x:" + n.x + ",y:" + n.y
                                                  +        } else {
                                                  +          if (n.action == "curve") {
                                                  +            o += ",x1:" + n.x1 + ",y1:" + n.y1 + ",x2:" + n.x2 + ",y2:" + n.y2 + ",x:" + n.x + ",y:" + n.y
                                                  +          } else {
                                                  +            if (n.action == "quadraticCurve") {
                                                  +              o += ",x1:" + n.x1 + ",y1:" + n.y1 + ",x:" + n.x + ",y:" + n.y
                                                  +            }
                                                  +          }
                                                  +        }
                                                  +        o += "}";
                                                  +        if (i < k.length - 1) {
                                                  +          o += ","
                                                  +        }
                                                  +      }
                                                  +      o += "]}";
                                                  +      if (p < l.length - 1) {
                                                  +        o += ","
                                                  +      }
                                                  +    }
                                                  +    o += "];";
                                                  +    return o
                                                  +  }
                                                  +};
                                                  +var SchemaGroup = {
                                                  +  groups: {},
                                                  +  addGroupShape: function(c, d) {
                                                  +    if (!this.groupExists(c)) {
                                                  +      this.groups[c] = [d]
                                                  +    } else {
                                                  +      this.groups[c].push(d)
                                                  +    }
                                                  +  },
                                                  +  groupExists: function(b) {
                                                  +    if (this.groups[b]) {
                                                  +      return true
                                                  +    } else {
                                                  +      return false
                                                  +    }
                                                  +  },
                                                  +  getGroup: function(b) {
                                                  +    return this.groups[b]
                                                  +  }
                                                  +};
                                                  +if (typeof JSON !== "object") {
                                                  +  JSON = {}
                                                  +} (function() {
                                                  +  function f(n) {
                                                  +    return n < 10 ? "0" + n: n
                                                  +  }
                                                  +  if (typeof Date.prototype.toJSON !== "function") {
                                                  +    Date.prototype.toJSON = function(key) {
                                                  +      return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z": null
                                                  +    };
                                                  +    String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function(key) {
                                                  +      return this.valueOf()
                                                  +    }
                                                  +  }
                                                  +  var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
                                                  +  escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
                                                  +  gap, indent, meta = {
                                                  +    "\b": "\\b",
                                                  +    "\t": "\\t",
                                                  +    "\n": "\\n",
                                                  +    "\f": "\\f",
                                                  +    "\r": "\\r",
                                                  +    '"': '\\"',
                                                  +    "\\": "\\\\"
                                                  +  },
                                                  +  rep;
                                                  +  function quote(string) {
                                                  +    escapable.lastIndex = 0;
                                                  +    return escapable.test(string) ? '"' + string.replace(escapable,
                                                  +    function(a) {
                                                  +      var c = meta[a];
                                                  +      return typeof c === "string" ? c: "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice( - 4)
                                                  +    }) + '"': '"' + string + '"'
                                                  +  }
                                                  +  function str(key, holder) {
                                                  +    var i, k, v, length, mind = gap,
                                                  +    partial, value = holder[key];
                                                  +    if (value && typeof value === "object" && typeof value.toJSON === "function") {
                                                  +      value = value.toJSON(key)
                                                  +    }
                                                  +    if (typeof rep === "function") {
                                                  +      value = rep.call(holder, key, value)
                                                  +    }
                                                  +    switch (typeof value) {
                                                  +    case "string":
                                                  +      return quote(value);
                                                  +    case "number":
                                                  +      return isFinite(value) ? String(value) : "null";
                                                  +    case "boolean":
                                                  +    case "null":
                                                  +      return String(value);
                                                  +    case "object":
                                                  +      if (!value) {
                                                  +        return "null"
                                                  +      }
                                                  +      gap += indent;
                                                  +      partial = [];
                                                  +      if (Object.prototype.toString.apply(value) === "[object Array]") {
                                                  +        length = value.length;
                                                  +        for (i = 0; i < length; i += 1) {
                                                  +          partial[i] = str(i, value) || "null"
                                                  +        }
                                                  +        v = partial.length === 0 ? "[]": gap ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]": "[" + partial.join(",") + "]";
                                                  +        gap = mind;
                                                  +        return v
                                                  +      }
                                                  +      if (rep && typeof rep === "object") {
                                                  +        length = rep.length;
                                                  +        for (i = 0; i < length; i += 1) {
                                                  +          if (typeof rep[i] === "string") {
                                                  +            k = rep[i];
                                                  +            v = str(k, value);
                                                  +            if (v) {
                                                  +              partial.push(quote(k) + (gap ? ": ": ":") + v)
                                                  +            }
                                                  +          }
                                                  +        }
                                                  +      } else {
                                                  +        for (k in value) {
                                                  +          if (Object.prototype.hasOwnProperty.call(value, k)) {
                                                  +            v = str(k, value);
                                                  +            if (v) {
                                                  +              partial.push(quote(k) + (gap ? ": ": ":") + v)
                                                  +            }
                                                  +          }
                                                  +        }
                                                  +      }
                                                  +      v = partial.length === 0 ? "{}": gap ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}": "{" + partial.join(",") + "}";
                                                  +      gap = mind;
                                                  +      return v
                                                  +    }
                                                  +  }
                                                  +  if (typeof JSON.stringify !== "function") {
                                                  +    JSON.stringify = function(value, replacer, space) {
                                                  +      var i;
                                                  +      gap = "";
                                                  +      indent = "";
                                                  +      if (typeof space === "number") {
                                                  +        for (i = 0; i < space; i += 1) {
                                                  +          indent += " "
                                                  +        }
                                                  +      } else {
                                                  +        if (typeof space === "string") {
                                                  +          indent = space
                                                  +        }
                                                  +      }
                                                  +      rep = replacer;
                                                  +      if (replacer && typeof replacer !== "function" && (typeof replacer !== "object" || typeof replacer.length !== "number")) {
                                                  +        throw new Error("JSON.stringify")
                                                  +      }
                                                  +      return str("", {
                                                  +        "": value
                                                  +      })
                                                  +    }
                                                  +  }
                                                  +  if (typeof JSON.parse !== "function") {
                                                  +    JSON.parse = function(text, reviver) {
                                                  +      var j;
                                                  +      function walk(holder, key) {
                                                  +        var k, v, value = holder[key];
                                                  +        if (value && typeof value === "object") {
                                                  +          for (k in value) {
                                                  +            if (Object.prototype.hasOwnProperty.call(value, k)) {
                                                  +              v = walk(value, k);
                                                  +              if (v !== undefined) {
                                                  +                value[k] = v
                                                  +              } else {
                                                  +                delete value[k]
                                                  +              }
                                                  +            }
                                                  +          }
                                                  +        }
                                                  +        return reviver.call(holder, key, value)
                                                  +      }
                                                  +      text = String(text);
                                                  +      cx.lastIndex = 0;
                                                  +      if (cx.test(text)) {
                                                  +        text = text.replace(cx,
                                                  +        function(a) {
                                                  +          return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice( - 4)
                                                  +        })
                                                  +      }
                                                  +      if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {
                                                  +        j = eval("(" + text + ")");
                                                  +        return typeof reviver === "function" ? walk({
                                                  +          "": j
                                                  +        },
                                                  +        "") : j
                                                  +      }
                                                  +      throw new SyntaxError("JSON.parse")
                                                  +    }
                                                  +  }
                                                  +} ());
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/testschema.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/testschema.js
                                                  new file mode 100644
                                                  index 00000000..103dd1b9
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/diagraming/schema/testschema.js
                                                  @@ -0,0 +1,75 @@
                                                  +
                                                  +{
                                                  +		"decision": {
                                                  +			path: [
                                                  +				{
                                                  +					action: "move",
                                                  +					x: "props.w/2",
                                                  +					y: 0
                                                  +				},{
                                                  +					action: "line",
                                                  +					x: "props.w",
                                                  +					y: "props.h/2"
                                                  +				},{
                                                  +					action: "line",
                                                  +					x: "props.w/2",
                                                  +					y: "props.h"
                                                  +				},{
                                                  +					action: "line",
                                                  +					x: "0",
                                                  +					y: "props.h/2"
                                                  +				},{
                                                  +					action: "close"
                                                  +				}
                                                  +			],
                                                  +			textBlock: {x: "props.w * .2", y: "props.h * .2", w: "props.w * .6", h: "props.h * .6"}
                                                  +		},
                                                  +		"triangle": {
                                                  +			path: [ 
                                                  +				{
                                                  +					action: "move",
                                                  +					x: "props.w / 2",
                                                  +					y: "0"
                                                  +				},{
                                                  +					action: "line",
                                                  +					x: "props.w",
                                                  +					y: "props.h"
                                                  +				},{
                                                  +					action: "line",
                                                  +					x: "0",
                                                  +					y: "props.h"
                                                  +				},{
                                                  +					action: "close"
                                                  +				}
                                                  +			],
                                                  +			textBlock: {x: "10", y: "props.h * 0.25", w: "props.w - 20", h: "props.h * 0.75"}
                                                  +		},
                                                  +		"round": {
                                                  +			path: [
                                                  +				{
                                                  +					action: "move",
                                                  +					x: "0",
                                                  +					y: "props.h / 2"
                                                  +				},{
                                                  +					action: "curve",
                                                  +					cp1x: "0",
                                                  +					cp1y: "-props.h/6",
                                                  +					cp2x: "props.w",
                                                  +					cp2y: "-props.h/6",
                                                  +					x: "props.w",
                                                  +					y: "props.h/2"
                                                  +				},{
                                                  +					action: "curve",
                                                  +					cp1x: "props.w",
                                                  +					cp1y: "props.h + props.h/6",
                                                  +					cp2x: "0",
                                                  +					cp2y: "props.h + props.h/6",
                                                  +					x: "0",
                                                  +					y: "props.h/2"
                                                  +				},{
                                                  +					action: "close"
                                                  +				}
                                                  +			],
                                                  +			textBlock: {x: "10", y: "0", w: "props.w - 20", h: "props.h"}
                                                  +		}
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/jquery.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/jquery.js
                                                  new file mode 100644
                                                  index 00000000..16ad06c5
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/jquery.js
                                                  @@ -0,0 +1,4 @@
                                                  +/*! jQuery v1.7.2 jquery.com | jquery.org/license */
                                                  +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"<!doctype html>":"")+"<html><body>"),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&f.type(b)==="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bZ(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bZ(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bZ(a,c,d,e,"*",g));return l}function bY(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?1:0,g=4;if(d>0){if(c!=="border")for(;e<g;e+=2)c||(d-=parseFloat(f.css(a,"padding"+bx[e]))||0),c==="margin"?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0;return d+"px"}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,"padding"+bx[e]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+"px"}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;b.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?b.outerHTML=a.outerHTML:c!=="input"||a.type!=="checkbox"&&a.type!=="radio"?c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute("_submit_attached"),b.removeAttribute("_change_attached"))}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c,i[c][d])}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.length;if(d&&typeof d=="object"){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}else if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?n(g):h==="function"&&(!a.unique||!p.has(g))&&c.push(g)},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;m++)if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}j=!1,c&&(a.once?e===!0?p.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){j&&f<=l&&(l--,f<=m&&m--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&p.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(j?a.once||d.push([b,c]):(!a.once||!e)&&o(b,c));return this},fire:function(){p.fireWith(this,arguments);return this},fired:function(){return!!i}};return p};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p=c.createElement("div"),q=c.documentElement;p.setAttribute("className","t"),p.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="<div "+n+"display:block;'><div style='"+t+"0;display:block;overflow:hidden;'></div></div>"+"<table "+n+"' cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="<table><tr><td style='"+t+"0;display:none'></td><td>t</td></tr></table>",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="<div style='width:5px;'></div>",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&&!f._data(j,"parsedAttrs")){g=j.attributes;for(i=g.length;k<i;k++)h=g[k].name,h.indexOf("data-")===0&&(h=f.camelCase(h.substring(5)),l(j,h,m[h]));f._data(j,"parsedAttrs",!0)}}return m}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!";return f.access(this,function(c){if(c===b){m=this.triggerHandler("getData"+e,[d[0]]),m===b&&j&&(m=f.data(j,a),m=l(j,a,m));return m===b&&d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.triggerHandler("setData"+e,d),f.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length<d)return f.queue(this[0],a);return c===b?this:this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise(c)}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,f.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i<g;i++)e=d[i],e&&(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,""),a.removeAttribute(v?e:c),h&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0,coords:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(
                                                  +a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:g&&G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button||c.type!=="click")){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k<e;k++)s=d[k],t=s.selector,p[t]===b&&(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&&r.push(s);r.length&&j.push({elem:m,matches:r})}}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.namespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()))}}i.postDispatch&&i.postDispatch.call(this,c);return c.result}},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9||d===11){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")[\\s/>]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f
                                                  +.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,function(a,b){b.src?f.ajax({type:"GET",global:!1,url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1></$2>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]==="<table>"&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i<u;i++)bn(l[i]);else bn(l);l.nodeType?j.push(l):j=f.merge(j,l)}if(d){g=function(a){return!a.type||be.test(a.type)};for(k=0;j[k];k++){h=j[k];if(e&&f.nodeName(h,"script")&&(!h.type||be.test(h.type)))e.push(h.parentNode?h.parentNode.removeChild(h):h);else{if(h.nodeType===1){var v=f.grep(h.getElementsByTagName("script"),g);j.splice.apply(j,[k+1,0].concat(v))}d.appendChild(h)}}}return j},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bp=/alpha\([^)]*\)/i,bq=/opacity=([^)]*)/,br=/([A-Z]|^ms)/g,bs=/^[\-+]?(?:\d*\.)?\d+$/i,bt=/^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,bu=/^([\-+])=([\-+.\de]+)/,bv=/^margin/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Top","Right","Bottom","Left"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),(e===""&&f.css(d,"display")==="none"||!f.contains(d.ownerDocument.documentElement,d))&&f._data(d,"olddisplay",cu(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(ct("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(ct("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o,p,q;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]);if((k=f.cssHooks[g])&&"expand"in k){l=k.expand(a[g]),delete a[g];for(i in l)i in a||(a[i]=l[i])}}for(g in a){h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cu(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cm.test(h)?(q=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),q?(f._data(this,"toggle"+i,q==="show"?"hide":"show"),j[q]()):j[h]()):(m=cn.exec(h),n=j.cur(),m?(o=parseFloat(m[2]),p=m[3]||(f.cssNumber[i]?"":"px"),p!=="px"&&(f.style(this,i,(o||1)+p),n=(o||1)/j.cur()*n,f.style(this,i,n+p)),m[1]&&(o=(m[1]==="-="?-1:1)*o+n),j.custom(n,o,p)):j.custom(n,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:ct("show",1),slideUp:ct("hide",1),slideToggle:ct("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a){return a},swing:function(a){return-Math.cos(a*Math.PI)/2+.5}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cq||cr(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){f._data(e.elem,"fxshow"+e.prop)===b&&(e.options.hide?f._data(e.elem,"fxshow"+e.prop,e.start):e.options.show&&f._data(e.elem,"fxshow"+e.prop,e.end))},h()&&f.timers.push(h)&&!co&&(co=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cq||cr(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(cp.concat.apply([],cp),function(a,b){b.indexOf("margin")&&(f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)})}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cv,cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?cv=function(a,b,c,d){try{d=a.getBoundingClientRect()}catch(e){}if(!d||!f.contains(c,a))return d?{top:d.top,left:d.left}:{top:0,left:0};var g=b.body,h=cy(b),i=c.clientTop||g.clientTop||0,j=c.clientLeft||g.clientLeft||0,k=h.pageYOffset||f.support.boxModel&&c.scrollTop||g.scrollTop,l=h.pageXOffset||f.support.boxModel&&c.scrollLeft||g.scrollLeft,m=d.top+k-i,n=d.left+l-j;return{top:m,left:n}}:cv=function(a,b,c){var d,e=a.offsetParent,g=a,h=b.body,i=b.defaultView,j=i?i.getComputedStyle(a,null):a.currentStyle,k=a.offsetTop,l=a.offsetLeft;while((a=a.parentNode)&&a!==h&&a!==c){if(f.support.fixedPosition&&j.position==="fixed")break;d=i?i.getComputedStyle(a,null):a.currentStyle,k-=a.scrollTop,l-=a.scrollLeft,a===e&&(k+=a.offsetTop,l+=a.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(a.nodeName))&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),g=e,e=a.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),j=d}if(j.position==="relative"||j.position==="static")k+=h.offsetTop,l+=h.offsetLeft;f.support.fixedPosition&&j.position==="fixed"&&(k+=Math.max(c.scrollTop,h.scrollTop),l+=Math.max(c.scrollLeft,h.scrollLeft));return{top:k,left:l}},f.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){f.offset.setOffset(this,a,b)});var c=this[0],d=c&&c.ownerDocument;if(!d)return null;if(c===d.body)return f.offset.bodyOffset(c);return cv(c,d,d.documentElement)},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/util.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/util.js
                                                  new file mode 100644
                                                  index 00000000..690ef318
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/scripts/util.js
                                                  @@ -0,0 +1 @@
                                                  +var Util={};jQuery(function(){jQuery.ajaxSetup({cache:false});jQuery("[title],[original-title]").on("mouseover",function(){var g=jQuery(this);if(g.attr("title")){g.attr("original-title",g.attr("title"));g.removeAttr("title")}if(!g.attr("original-title")){return}var h=g.attr("original-title");var f=jQuery("#hover_tip");if(f.length==0){f=jQuery("<div id='hover_tip'><div class='tip_arrow'></div><div class='tip_content radius3'></div></div>").appendTo("body")}jQuery(".tip_content").html(h);jQuery("#hover_tip").show();jQuery(".tip_arrow").removeClass("tip_right").removeClass("tip_top").css("top","");if(g.attr("title_pos")=="right"){f.css({left:g.offset().left+g.outerWidth()+7,top:g.offset().top+g.outerHeight()/2-f.outerHeight()/2});jQuery(".tip_arrow").addClass("tip_right").css("top",f.outerHeight()/2-7)}else{if(g.attr("title_pos")=="top"){f.css({left:g.offset().left+g.outerWidth()/2-f.outerWidth()/2,top:g.offset().top-f.outerHeight()});jQuery(".tip_arrow").addClass("tip_top")}else{f.css({left:g.offset().left+g.outerWidth()/2-f.outerWidth()/2,top:g.offset().top+g.outerHeight()})}}}).on("mouseout",function(){jQuery("#hover_tip").hide()});var c=jQuery(".notification_badge");if(c.length){Util.notificationsTips()}var e;jQuery("#header-user").on("mouseenter",function(){clearTimeout(e);var f=jQuery(this);var g=jQuery("#header_user_menu");f.addClass("droped");g.popMenu({target:f,onClose:function(){f.removeClass("droped")}});g.unbind().bind("mouseenter",function(){clearTimeout(e)}).bind("mouseleave",function(){e=setTimeout(function(){g.popMenu("close");f.removeClass("droped")},200)})}).on("mouseleave",function(){var f=jQuery(this);e=setTimeout(function(){jQuery("#header_user_menu").popMenu("close");f.removeClass("droped")},200)});var d;var a;jQuery(".user_quickinfo").on("mouseenter",function(){var g=jQuery(this);var f=g.attr("userId");if(d){d.abort()}clearTimeout(a);d=Util.ajax({url:"/u/quickinfo",data:{userId:f},success:function(i){if(i.result=="not_exists"){return}var h=b();h.attr("userId",f);h.html(i);h.show();h.popMenu({autoClose:false,target:g,position:"left"});h.unbind().bind("mouseenter",function(){clearTimeout(a)}).bind("mouseleave",function(){h.popMenu("close")});jQuery(".unfollowuser_btn").die().on("mouseover",function(){jQuery(this).text("取消关注").removeClass("green")}).on("mouseout",function(){jQuery(this).text("关注中").addClass("green")}).on("click",function(){doUnFollowUser(this,f)});jQuery(".followuser_btn").die().on("click",function(){doFollowUser(this,f)})}})}).on("mouseleave",function(){a=setTimeout(function(){jQuery("#userQuickInfo").popMenu("close")},400)});function b(){var f=jQuery("#userQuickInfo");if(f.length==0){f=jQuery("<div id='userQuickInfo' class='shadow_1' style='display:none;'></div>").appendTo("body")}return f}});Array.prototype.inArray=function(b){for(var a=0;a<this.length;a++){if(this[a]==b){return true}}return false};Array.prototype.indexOf=function(b){for(var a=0;a<this.length;a++){if(this[a]==b){return a}}return -1};Array.prototype.remove=function(b){var a=this.indexOf(b);if(a>-1){this.splice(a,1)}};Util.notificationsTips=function(){jQuery.get("/notification/count",{},function(a){if(a.goon){setTimeout(Util.notificationsTips,30*1000)}if(a.count>0){jQuery(".notification_badge").text(a.count).show()}else{jQuery(".notification_badge").hide()}})};Util.formatMsg=function(str,args){if(typeof args!="object"){eval("args=['"+args+"']")}for(var i=0;i<args.length;i++){var toReplace="{"+i+"}";str=str.replace(toReplace,args[i])}return str};Util.formatNumber=function(e,c){if(/[^0-9\.]/.test(e)){return"0"}if(e==null||e==""){return"0"}e=e.toString().replace(/^(\d*)jQuery/,"jQuery1.");e=(e+"00").replace(/(\d*\.\d\d)\d*/,"jQuery1");e=e.replace(".",",");var d=/(\d)(\d{3},)/;while(d.test(e)){e=e.replace(d,"jQuery1,jQuery2")}e=e.replace(/,(\d\d)jQuery/,".jQuery1");if(c==0){var b=e.split(".");if(b[1]=="00"){e=b[0]}}return e};Util.onlyNum=function(b){var a=b||window.event;if(!(a.keyCode>=8&&a.keyCode<=20)||(a.keyCode>=33&&a.keyCode<=46)){if(!((a.keyCode>=48&&a.keyCode<=57)||(a.keyCode>=96&&a.keyCode<=105))){if(window.event){a.returnValue=false}else{a.preventDefault()}}}return a.keyCode};jQuery.fn.clear=function(){jQuery(this).find("input[type=text]").val("");jQuery(this).find("input[type=password]").val("");jQuery(this).find("textarea").val("");jQuery(this).find("select").val("")};jQuery.fn.submitFormAjax=function(a){var b=jQuery(this);if(a.onSubmit){if(a.onSubmit.call()==false){return}}jQuery.ajax({url:a.url?a.url:jQuery(this).attr("action"),type:"POST",data:jQuery(this).serialize(),success:function(c){if(c.error=="error"){jQuery.simpleAlert("暂时无法处理您的请求,请稍候重试。","error",3000);$("#simplealert>.msg").css("top","15px")}else{if(c.error=="notlogin"){Util.loginWindow("open",function(){b.submitFormAjax(a)})}else{if(a.success){a.success(c)}}}},error:function(c){jQuery.simpleAlert("暂时无法处理您的请求,请稍候重试。".errorMsg,"error",3000);$("#simplealert>.msg").css("top","15px");if(a.error){a.error(c)}}})};jQuery.fn.submitForm=function(opt){var defaultOpt={json:true};var options=jQuery.extend(defaultOpt,opt);var form=jQuery(this);if(options.onSubmit){if(options.onSubmit.call(form)==false){return}}if(options.url){form.attr("action",options.url)}var frameId="submit_frame_"+(new Date().getTime());var frame=jQuery("<iframe id="+frameId+" name="+frameId+"></iframe>").attr("src",window.ActiveXObject?"javascript:false":"about:blank").css({position:"absolute",top:-1000,left:-1000});form.attr("target",frameId);frame.appendTo("body");frame.bind("load",submitCallback);form.append("<input type='hidden' name='submitFormByHiddenFrame' id='submitFormByHiddenFrameParam' value='hiddenFrame'/>");form[0].submit();jQuery("#submitFormByHiddenFrameParam").remove();var checkCount=10;function submitCallback(){frame.unbind();var body=jQuery("#"+frameId).contents().find("body");var data=body.html();if(data==""){if(--checkCount){setTimeout(submitCallback,200);return}return}var ta=body.find(">textarea");if(ta.length){data=ta.val()}else{var pre=body.find(">pre");if(pre.length){data=pre.html()}}try{eval("data="+data);if(data.error=="error"){jQuery.simpleAlert("暂时无法处理您的请求,请稍候重试。","error",3000);$("#simplealert>.msg").css("top","15px")}else{if(data.error=="notlogin"){Util.loginWindow("open",function(){form.submitForm(options)})}else{if(options.success){options.success(data)}}}}catch(e){if(options.json){jQuery.simpleAlert("暂时无法处理您的请求,请稍候重试。","error",3000);$("#simplealert>.msg").css("top","15px");if(options.error){options.error(data)}}else{if(options.success){options.success(data)}}}setTimeout(function(){frame.unbind();frame.remove()},100)}};Util.ajax=function(a){if(a.onSend){if(a.onSend()==false){return}}var b={type:"POST"};a=jQuery.extend(b,a);return jQuery.ajax({url:a.url,type:a.type,traditional:true,data:a.data,dataType:a.dataType,success:function(c){if(typeof(c)=="string"){if(c.indexOf("<!DOCTYPE")==0&&c.indexOf("检测用户Session时")>-1){alert("这个用户会话不存在或会话已经断开与服务器的连接,AWS将提示您重新登录!");if(top.actionsoftConsoleMenu==undefined){top.window.location.href="../"}else{top.window.location.href="../console"}}else{if(c.indexOf("<!DOCTYPE")==0&&c.indexOf("可能是AWS服务未启动或网络异常!")>-1){alert("Web向AWS服务建立连接时失败,可能是AWS服务未启动或网络异常,AWS将提示您重新登录!");if(top.actionsoftConsoleMenu==undefined){top.window.location.href="../"}else{top.window.location.href="../console"}}}}if(a.success){a.success(c)}},error:function(c){if(c.status){if(a.error){a.error(c)}else{jQuery.simpleAlert("暂时无法处理您的请求,请稍候重试。","error",3000);$("#simplealert>.msg").css("top","15px")}}}})};Util.load=function(d,a,c,e,b){jQuery.ajax({url:a,type:"POST",dataType:"html",data:c,success:function(f){if(f.error=="error"){jQuery.simpleAlert("暂时无法处理您的请求,请稍候重试。","error",3000);$("#simplealert>.msg").css("top","15px")}else{if(f.error=="notlogin"){Util.loginWindow("open",function(){Util.load(d,a,c,e,b)})}else{if(b){if(b(f)){d.html(f);if(e){e(f)}else{d.html(f)}}}else{if(e){d.html(f);e(f)}else{d.html(f)}}}}},error:function(f){jQuery.simpleAlert("暂时无法处理您的请求,请稍候重试。","error",3000);$("#simplealert>.msg").css("top","15px")}})};Util.get=function(a,b,c){jQuery.ajax({url:a,type:"GET",data:b,success:function(d){if(d.error=="error"){jQuery.simpleAlert("暂时无法处理您的请求,请稍候重试。","error",3000);$("#simplealert>.msg").css("top","15px")}else{if(d.error=="notlogin"){Util.loginWindow("open",function(){Util.get(a,b,c)})}else{c(d)}}},error:function(d){jQuery.simpleAlert("暂时无法处理您的请求,请稍候重试。","error",3000);$("#simplealert>.msg").css("top","15px")}})};jQuery.fn.disable=function(c,b){jQuery(this).attr("disable",true);jQuery(this).addClass("opacity");for(var a=0;a<jQuery(this).length;a++){var d=jQuery(this)[a];jQuery(d).unbind("mouseover.disable").bind("mouseover.disable",function(){var e=jQuery("<div class='disabled-mask'></div>").appendTo("body");if(!c){c=2}e.css({width:jQuery(this).outerWidth()+c,height:jQuery(this).outerHeight()+4,top:jQuery(this).offset().top,left:jQuery(this).offset().left});if(b){e.css("z-index",b)}e.bind("mouseout",function(){jQuery(this).remove()})}).bind("focus",function(){jQuery(this).blur()});jQuery(d).trigger("mouseover.disable")}return this};jQuery.fn.enable=function(){jQuery(this).attr("disable",false);jQuery(this).removeClass("opacity");for(var a=0;a<jQuery(this).length;a++){var b=jQuery(this)[a];jQuery(b).unbind("mouseover.disable").unbind("focus")}jQuery(".disabled-mask").trigger("mouseout");return this};Util.loginWindow=function(c,b){if(typeof c=="undefined"){c="open"}if(c=="open"){if(jQuery("#loginWindow").length){jQuery("#loginWindow").remove()}var a=jQuery("<div id='loginWindow' class='loginWindow'></div>").appendTo("body");a.append("<div id='loginWindow-content' class='loginWindow-content'><img src='/images/ajaxload.gif' style='margin:80px 0px 0px 45%'/></div>");jQuery("#loginWindow-content").load("/login/window",function(){loginCallback=b});a.dialog()}else{if(c="close"){jQuery("#loginWindow").dialog("close")}}};(function(a){var b=0;a.mask=function(d){if(typeof d=="undefined"){d="open"}if(d=="open"){if(b==0){var c=a("<div id='window-mask' class='window-mask' style='display:none'></div>").appendTo("body");c.css({width:a(window).width()+"px",height:a(window).height()+"px",filter:"alpha(opacity=60)"}).show();a(window).bind("resize.mask",function(){c.css({width:a(window).width()+"px",height:a(window).height()+"px"})})}b++}else{if(d=="close"){b--;if(b==0){a("#window-mask").remove();a(window).unbind("resize.mask")}}}};a.fn.dialog=function(e){var d=a(this);if(typeof e=="string"){if(e=="close"){d.find(".dialog_close").trigger("click");if(a("#window-mask")!=null){a("#window-mask").hide()}}}else{var g={fixed:true,closable:true,mask:true};e=a.extend(g,e);if(!e){e={}}var h="";if(e.title){h=e.title}else{if(d.attr("title")){h=d.attr("title");d.attr("title","")}}d.addClass("dialog_box").show();var i=a("<div class='dialog_close'></div>").appendTo(d);i.bind("click",function(){if(e.onClose){if(e.onClose()==false){return}}a.mask("close");d.hide();d.removeClass("dialog_box").find(".dialog_close").remove();var j=d.find(".dialog_title");d.attr("title",j.text());j.remove();a(window).unbind("resize.dialog")});if(e.closable){i.show()}if(h!=""){d.prepend("<h2 class='dialog_title'>"+h+"</h2>")}if(e.mask){a.mask()}var f=d.outerWidth();var c=d.outerHeight();if(e.width){f=e.width}if(e.height){c=e.height}a(window).bind("resize.dialog",function(){var k=0;if(e.fixed){d.css("position","fixed");k=(a(window).height()-d.outerHeight())/2+"px"}else{d.css("position","absolute");k=(a(window).height()-d.outerHeight())/2+a(document).scrollTop()+"px"}var j=(a(window).width()-d.outerWidth())/2+"px";d.css({top:k,left:j})});d.width(e.width);d.height(e.height);a(window).trigger("resize.dialog");d.find(".dialog_title").draggable({target:d})}return d};a.confirm=function(c){var d=a("#global_confirm_window");if(!d.length){d=a("<div id='global_confirm_window' title='提示'><div class='msg'></div><div class='buttons'><span class='button default okbtn'>确定</span>&nbsp;&nbsp;<span class='button cancelbtn'>取消</span></div></div>").appendTo("body")}d.find(".msg").html(c.content);if(c.width){d.css("width",c.width)}if(c.height){d.css("height",c.height)}d.dialog();d.find(".okbtn").unbind().bind("click",function(){d.dialog("close");if(c.onConfirm){c.onConfirm()}});d.find(".cancelbtn").unbind().bind("click",function(){d.dialog("close");if(c.onCancel){c.onCancel()}})};a.fn.popMenu=function(c){var i=a(this);if(typeof c=="string"){if(c=="close"){i.hide().removeClass("popover");a(window).unbind("resize.popmenu")}return}var h={position:"left",fixed:false,offsetX:0,offsetY:0,zindex:2,autoClose:true,closeAfterClick:false,autoPosition:true};var d=a.extend(h,c);var g=a(d.target);i.addClass("popover").css("z-index",d.zindex);if(d.fixed){i.css("position","fixed")}if(d.autoClose){if(d.closeAfterClick==false){i.unbind("mouseup.popmenu").bind("mouseup.popmenu",function(j){j.stopPropagation()})}a(document).bind("mouseup.popmenu",function(){i.popMenu("close");a(document).unbind("mouseup.popmenu");if(d.onClose){d.onClose()}})}a(window).bind("resize.popmenu",function(){i.popMenu(c)});i.show();var f=0;if(d.position=="center"){f=g.offset().left+g.outerWidth()/2-i.outerWidth()/2}else{if(d.position=="right"){f=g.offset().left+g.outerWidth()-i.outerWidth()}else{f=g.offset().left}}if(f+i.outerWidth()>a(window).width()){f=a(window).width()-i.outerWidth()}var e=g.offset().top+g.outerHeight();if(d.autoPosition&&e+d.offsetY+i.outerHeight()>a(window).height()+a(document).scrollTop()){i.css({top:a(window).height()-i.outerHeight()+a(document).scrollTop(),left:f+d.offsetX})}else{i.css({top:e+d.offsetY,left:f+d.offsetX})}};a.simpleAlert=function(h,f,d){if(h=="close"){a("#simplealert").remove();return}if(a("#simplealert").length){a("#simplealert").remove()}var g="simplealert-icon-info";if(f){g="simplealert-icon-"+f}var c=a("<div id='simplealert' class='simplealert'></div>").appendTo("body");var e="<div class='"+g+"'>";if(f=="loading"){e+="<img src='../apps/_bpm.platform/js/designer/themes/default/images/designer/loading.gif' style='margin:10px 0px 0px 12px'/>"}e+="</div><div class='simplealert-msg'>"+h+"</div><div class='simplealert-right'></div>";c.html(e);c.css("top",(a(window).height()-c.height())/2+a(window).scrollTop()+"px");c.css("left",(a(window).width()-c.width())/2+a(window).scrollLeft()+"px");c.show();if(d!="no"){setTimeout(function(){c.fadeOut(200)},d?d:3500)}};a.fn.tooltip=function(d,c,f){var e;c=c?c:"warning";if(c!="none"){d="<img src='/images/icon/ico-"+c+".png' style='vertical-align:middle;margin-right:5px;'/><span>"+d+"</span>"}if(a("p#p_toolTip").length){a("p#p_toolTip").remove()}a("body").append('<p id="p_toolTip" class="radius3"><img id="img_toolTip_Arrow" src="/images/icon/arrow-left.png" />'+d+"</p>");e=a("p#p_toolTip");a("p#p_toolTip #img_toolTip_Arrow").css({position:"absolute",top:"5px",left:"-13px"});if(!f){e.show()}else{e.fadeIn("fast")}e.css({left:a(this).offset().left+a(this).width()+18,top:a(this).offset().top-16})};a.closeTooltip=function(){a("p#p_toolTip").remove()};a.fn.draggable=function(c){var e={target:a(this)};var d=a.extend(e,c);a(this).unbind("dragstart").bind("dragstart",function(){return false});a(this).unbind("mousedown.drag").bind("mousedown.drag",function(g){a(document).bind("selectstart",function(){return false});var j=g.pageX;var h=g.pageY;var i=d.target.offset().left;var f=d.target.offset().top;a(document).bind("mousemove.drag",function(n){var m=n.pageX-j+i;var l=n.pageY-h+f;if(d.bounding){var k=d.bounding.offset().left;var o=d.bounding.offset().top;if(m>k&&l>o&&m<k+d.bounding.outerWidth()-d.target.outerWidth()&&l<o+d.bounding.outerHeight()-d.target.outerHeight()){d.target.offset({left:m,top:l})}}else{d.target.offset({left:m,top:l})}});a(document).bind("mouseup.drag",function(k){a(document).unbind("selectstart");a(document).unbind("mousemove.drag");a(document).unbind("mouseup.drag")})})};a.fn.suggest=function(d){var h=a(this);var g={valueField:"value",width:h.outerWidth(),format:function(j){return j.text}};var e=a.extend(g,d);if(!h.data("suggest")){var i=a("<ul class='suggest_menu'></ul>").appendTo("body");i.width(e.width);h.data("suggest",i)}var c=-1;var f="";h.unbind("keydown.suggest").bind("keydown.suggest",function(k){var l=h.data("suggest");if(k.keyCode==40){k.preventDefault();if(c<l.children().length-1){c++;l.find(".selected").removeClass("selected");l.find("li[index="+c+"]").addClass("selected")}}else{if(k.keyCode==38){k.preventDefault();l.find(".selected").removeClass("selected");if(c>=0){c--;l.find("li[index="+c+"]").addClass("selected")}}else{if(k.keyCode==13){var j=l.find(".selected");if(j.length){h.val(j.attr("val"))}if(e.onEnter){e.onEnter(h)}l.empty().popMenu("close")}}}}).unbind("keyup.suggest").bind("keyup.suggest",function(k){var l=h.data("suggest");var j=h.val();if(j==""){l.empty().popMenu("close")}else{if(j!=f){c=-1;a.get(e.url,{q:j},function(p){l.empty();var m=p.items;if(m.length==0){l.empty().popMenu("close")}else{for(var n=0;n<m.length;n++){var o=m[n];var q="<li index='"+n+"' class='suggest_item' val='"+o[e.valueField]+"'>";q+=e.format(o);q+="</li>";l.append(q)}l.popMenu({target:h,zindex:4});l.find(".suggest_item").bind("mousedown",function(r){r.preventDefault();h.val(a(this).attr("val"));if(e.onEnter){e.onEnter(h)}l.empty().popMenu("close")})}})}}f=j}).unbind("blur.suggest").bind("blur.suggest",function(j){var k=h.data("suggest");k.empty().popMenu("close")})};a.fn.pagination=function(m,h,l,g){if(h<=0){return}var n=5;if(g){n=g}var j=a(this).addClass("pagination");var c=1;var e=h;if(h>n){var k=Math.floor(n/2);var c=(m-k)>0?(m-k):1;if(h-c<n){c=h-n+1}var e=c+n-1}var d="";if(m>1){d+="<a p='"+(m-1)+"'>«</a>"}else{d+="<a class='disabled'>«</a>"}if(c>=2){d+="<a p='1'>1</a>"}if(c>=3){d+="<a class='disabled ellipsis'>...</a>"}for(var f=c;f<=e;f++){if(f>h){break}if(f==m){d+='<a class="disabled">'+f+"</a>"}else{d+="<a p='"+f+"'>"+f+"</a>"}}if(e<=h-2){d+="<a class='disabled ellipsis'>...</a><a p='"+h+"'>"+h+"</a>"}else{if(e<=h-1){d+="<a p='"+h+"'>"+h+"</a>"}}if(m<h){d+="<a p='"+(m+1)+"'>»</a>"}else{d+="<a class='disabled'>»</a>"}j.html(d);if(l){j.find("a[p]").bind("click",function(){var i=a(this).attr("p");l(i)})}};a.fn.fileSize=function(){var g=this.get(0);var c=0;if(a.browser.msie&&!g.files){var e=g.value;var f=new ActiveXObject("Scripting.FileSystemObject");var d=f.GetFile(e);c=d.Size}else{c=g.files[0].size}return c*1024}})(jQuery);String.prototype.isEmpty=function(){if(this.replace(/(^\s*)|(\s*$)/g,"").length<=0){return true}else{return false}};String.prototype.notEmpty=function(){return !this.isEmpty()};String.prototype.isEmail=function(){if(this.isEmpty()||(!/^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/.test(this))){return false}else{return true}};String.prototype.isPhoneNumber=function(){if(this.isEmpty()||(!/^0{0,1}(13[0-9]|15[7-9]|153|156|18[7-9])[0-9]{8}$/.test(this))){return false}else{return true}};String.prototype.minLength=function(a){if(this.length>=a){return true}else{return false}};String.prototype.maxLength=function(a){if(this.length<=a){return true}else{return false}};String.prototype.cut=function(a,d){var c="";if(this==""){return c}if(typeof d=="undefined"){d="..."}var e=0;for(var b=0;b<this.length;b++){if(this.charCodeAt(b)>127||this.charCodeAt(b)==94){e+=2}else{e++}}if(e<=a){return this.toString()}e=0;a=(a>d.length)?a-d.length:a;for(var b=0;b<this.length;b++){if(this.charCodeAt(b)>127||this.charCodeAt(b)==94){e+=2}else{e++}if(e>a){c+=d;break}c+=this.charAt(b)}return c};String.prototype.byteLength=function(){var b=0;for(var a=0;a<this.length;a++){if(this.charCodeAt(a)>127||this.charCodeAt(a)==94){b+=2}else{b++}}return b};function initTemplateCategorySelect(){$("#template-category-select li").unbind().bind("click",function(){$(".template-category li").removeClass("current");$(this).addClass("current");var a=$(this).attr("category");getTemplates(a)});$(".item-container").die().on("click",function(){$(".template_selected").removeClass("template_selected");$(this).addClass("template_selected");$("#template_select_ok").enable()}).on("dblclick",function(){templateSelected()})}function getTemplates(a){Util.get("/diagraming/gettemplates",{category:a},function(e){$(".template-select[chartId!='']").remove();for(var c=0;c<e.templates.length;c++){var b=e.templates[c];$("#template-container").append('<div define="'+b.chartId+'" class="item-container template-select radius3"><div><img src="/file/response/'+b.thumbnail+'/chart_image"/></div>'+b.title+"</div>")}var d=$(".template_selected");if(d.length<=0){$("#template_select_ok").disable()}})}var globalNewTeamId;var globalNewFolderId;function globalNewDialog(b,a){globalNewTeamId=b;globalNewFolderId=a;if($("#dialog_new_diagram").length==0){Util.ajax({url:"/diagraming/new_dialog",data:{},success:function(c){$("body").append(c);$("#dialog_new_diagram").dialog();initTemplateCategorySelect();$("#template_select_ok").bind("click",function(){templateSelected()});$("#template_select_cancel").bind("click",function(){$("#dialog_new_diagram").dialog("close")});getTemplates("uncategorized")}})}else{$("#dialog_new_diagram").dialog()}}function templateSelected(){var d=$(".template_selected");if(d.length<=0){return}var c=$("#template-category-select li.current");var e=c.attr("category");var b=d.attr("define");if(!b){b=""}$("#dialog_new_diagram").dialog("close");var a="/diagraming/new?template="+b+"&category="+e;if(globalNewTeamId){a+="&team="+globalNewTeamId}if(globalNewFolderId){a+="&folder="+globalNewFolderId}window.location.href=a};
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/diagraming/designer.chatting.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/diagraming/designer.chatting.css
                                                  new file mode 100644
                                                  index 00000000..c2f6d2ca
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/diagraming/designer.chatting.css
                                                  @@ -0,0 +1,260 @@
                                                  +@CHARSET "UTF-8";
                                                  +
                                                  +/**
                                                  + * 新版图形设计器聊天窗口-CSS
                                                  + */
                                                  + #desiger_chattingbox{
                                                  + 	display: none;
                                                  + }
                                                  +#desiger_chattingbox,#desiger_chattingbox *{
                                                  +	padding:0px;margin:0px;
                                                  +}
                                                  +#desiger_chattingbox ::-webkit-scrollbar,#desiger_chattingbox ::scrollbar{
                                                  +	width: 8px;
                                                  +	height: 8px;
                                                  +}
                                                  +#desiger_chattingbox ::-webkit-scrollbar-thumb,#desiger_chattingbox ::scrollbar-thumb{
                                                  +	border-width: 1px;
                                                  +	border-style: solid;
                                                  +	border-color: white;
                                                  +	border-radius: 6px;
                                                  +	background: #D7D7D7;
                                                  +}
                                                  +#desiger_chattingbox ::-webkit-scrollbar-track-piece,#desiger_chattingbox ::scrollbar-track-piece{
                                                  +	width: 11px;
                                                  +	height: 11px;
                                                  +}
                                                  +#desiger_chattingbox{
                                                  +	position:absolute;
                                                  +	left:174px;
                                                  +	bottom:-10px;
                                                  +	min-height:20px;
                                                  +	width:270px;
                                                  +	background:#fff;
                                                  +	font-size: 13px;
                                                  +	font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif !important;
                                                  +	-moz-box-shadow: 0 3px 5px 0 #c3c4c6;
                                                  +	-webkit-box-shadow: 0 3px 5px 0 #C3C4C6;
                                                  +	box-shadow: 0 3px 5px 0 #C3C4C6;
                                                  +	border: 1px solid #999;
                                                  +	z-index:2;
                                                  +}
                                                  +
                                                  +#desiger_chattingbox .chatting_header{
                                                  +	border-top: #BFBFBF solid 1px;
                                                  +	border-bottom: #666 solid 1px;
                                                  +	background-color: #a6a6a6;
                                                  +	background-image: -webkit-linear-gradient(top,#b2b2b2,#9b9b9b);
                                                  +	background-image: -moz-linear-gradient(top,#b2b2b2,#9b9b9b);
                                                  +	background-image: -ms-linear-gradient(top,#b2b2b2,#9b9b9b);
                                                  +	background-image: -o-linear-gradient(top,#b2b2b2,#9b9b9b);
                                                  +	background-image: linear-gradient(top,#b2b2b2,#9b9b9b);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#b2b2b2',endColorstr = '#9b9b9b',GradientType = 0);
                                                  +	-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#b2b2b2',endColorstr = '#9b9b9b',GradientType = 0);
                                                  +	position:relative;
                                                  +	height:20px;
                                                  +	line-height:20px;
                                                  +	cursor:pointer;
                                                  +}
                                                  +#desiger_chattingbox .chatting_header-min{
                                                  +	background-color: #8c8989 !important;
                                                  +	background-image: -webkit-linear-gradient(top,#a2a1a1,#8c8989) !important;
                                                  +	background-image: -moz-linear-gradient(top,#a2a1a1,#8c8989) !important;
                                                  +	background-image: -ms-linear-gradient(top,#a2a1a1,#8c8989) !important;
                                                  +	background-image: -o-linear-gradient(top,#a2a1a1,#8c8989) !important;
                                                  +	background-image: linear-gradient(top,#a2a1a1,#8c8989) !important;
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#a2a1a1',endColorstr = '#8c8989',GradientType = 0) !important;
                                                  +	-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#a2a1a1',endColorstr = '#8c8989',GradientType = 0) !important;
                                                  +}
                                                  +#desiger_chattingbox .chatting_header.flicker_box{
                                                  +	background:#90ca73 !important;
                                                  +}
                                                  +#desiger_chattingbox .chatting_header.flicker_box .title{
                                                  +	text-shadow: none;
                                                  +	color: #333;
                                                  +}
                                                  +#desiger_chattingbox .chatting_header .title{
                                                  +	position:relative;
                                                  +	display:inline-block;
                                                  +	line-height:20px;
                                                  +	color: #333;
                                                  +	font-size:13px;
                                                  +	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.33);
                                                  +	margin-left:5px;
                                                  +}
                                                  +#desiger_chattingbox .chatting_header  .chatting_icon{
                                                  +	position:absolute;
                                                  +	display:inline-block;
                                                  +	width: 12px;
                                                  +	height: 12px;
                                                  +	background-repeat: no-repeat;
                                                  +	cursor: pointer;
                                                  +	overflow: hidden;
                                                  +	line-height: 1000px;
                                                  +	background-image: url(../images/diagraming/designer-collaboration-box.png);
                                                  +	border: 1px solid transparent;
                                                  +	text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.9);
                                                  +	border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-webkit-border-radius: 2px;
                                                  +}
                                                  +#desiger_chattingbox .chatting_header .oper-icon{
                                                  +	right:23px;
                                                  +	top:10px;
                                                  +	margin-top:-6px;
                                                  +	background-position: -2px -18px;
                                                  +}
                                                  +#desiger_chattingbox .chatting_header .close-icon{
                                                  +	right:6px;
                                                  +	top:10px;
                                                  +	margin-top:-6px;
                                                  +	background-position: -37px -19px;
                                                  +}
                                                  +#desiger_chattingbox .chatting_header .oper-icon:hover{
                                                  +	margin-top:-6px;
                                                  +	right:23px;
                                                  +	background-color: #878787;
                                                  +	border-color: #737373;
                                                  +}
                                                  +#desiger_chattingbox .chatting_header .close-icon:hover{
                                                  +	margin-top:-6px;
                                                  +	right:6px;
                                                  +	background-color: #878787;
                                                  +	border-color: #737373;
                                                  +}
                                                  +#desiger_chattingbox  .chatting_main{
                                                  +	width:270px;
                                                  +	position:relative;
                                                  +	margin: 10px auto;
                                                  +	margin-top:0px;
                                                  +	background:#ffffff;
                                                  +	display:none;
                                                  +}
                                                  +#desiger_chattingbox .users-wrap{
                                                  +	max-height:100px;
                                                  +	overflow-y:hidden;
                                                  +}
                                                  +#desiger_chattingbox .users-wrap .users li {
                                                  +	background: whiteSmoke;
                                                  +	border-bottom: 1px solid #E1E1E1;
                                                  +	padding: 5px 10px;
                                                  +	display: list-item;
                                                  +	text-align: -webkit-match-parent;
                                                  +}
                                                  +#desiger_chattingbox .users-wrap .users li span.off_line{
                                                  +	background: url(../images/diagraming/designer-collaboration-box.png) no-repeat;
                                                  +	background-position: 0px 0px;
                                                  +	width: 15px;
                                                  +	height: 13px;
                                                  +	margin-right:3px;
                                                  +	display: inline-block;
                                                  +	border-radius: 2px;
                                                  +	overflow: hidden;
                                                  +}
                                                  +#desiger_chattingbox .users-wrap .users li span.on_line{
                                                  +	background-position: -65px 0px !important;
                                                  +}
                                                  +#desiger_chattingbox  .chatting_main .chatting_content{
                                                  +	position:relative;
                                                  +	height:200px;
                                                  +	padding: 5px 10px;
                                                  +	border-bottom: 1px solid #E1E1E1;
                                                  +	margin-bottom:10px;
                                                  +	overflow-y:auto;
                                                  +}
                                                  +/* 信息内容展示样式---start */
                                                  +#desiger_chattingbox  .chatting_main .chatting_content .chatting-msg-list{
                                                  +}
                                                  +#chatting-msg-list dl{
                                                  +	position:relative;
                                                  +}
                                                  +#chatting-msg-list dl dd{
                                                  +	display: block;
                                                  +	clear: both;
                                                  +	-webkit-margin-start: 0px !important;
                                                  +}
                                                  +#chatting-msg-list .mb-msg{
                                                  +	margin-bottom: 1px;
                                                  +}
                                                  +#chatting-msg-list .mb-msg .wbim_msgpos {
                                                  +	position: relative;
                                                  +	margin: 5px 2px 0px;
                                                  +}
                                                  +#chatting-msg-list .msg_box {
                                                  +	-moz-border-radius: 5px;
                                                  +	-webkit-border-radius: 5px;
                                                  +	border-radius: 5px;
                                                  +	padding: 5px;
                                                  +	
                                                  +}
                                                  +#chatting-msg-list .msg_box .msg {
                                                  +	display: block;
                                                  +	line-height: 14px;
                                                  +	word-wrap: break-word;
                                                  +	word-break: break-all;
                                                  +}
                                                  +#chatting-msg-list .msg_box .msg .user{
                                                  +	color:#4183C4;margin-right:3px;
                                                  +	margin-left:-3px;
                                                  +}
                                                  +#chatting-msg-list .msg_box .msg .msg_txt{
                                                  +	word-wrap: break-word;
                                                  +	word-break: break-all;
                                                  +	line-height:16px;
                                                  +}
                                                  +/* 信息内容展示样式---end */
                                                  +
                                                  +#desiger_chattingbox  .chatting_main #chatting_edit{
                                                  +	width: 234px;
                                                  +	height: 40px;
                                                  +	padding:3px;
                                                  +	margin-left:15px;
                                                  +	margin-bottom:5px;
                                                  +}
                                                  +#desiger_chattingbox  .chatting_main .chatting_bottom{
                                                  +	width:240px;
                                                  +	height:30px;
                                                  +	position:relative;
                                                  +	margin:0px auto;
                                                  +	line-height:20px;
                                                  +}
                                                  +#desiger_chattingbox  .chatting_main .chatting_bottom .limit{
                                                  +	display:inline-block;
                                                  +}
                                                  +#desiger_chattingbox  .chatting_main .chatting_bottom .designer_button{
                                                  +	line-height:23px;
                                                  +	height: 23px;
                                                  +	font-size:12px;
                                                  +	position:absolute;
                                                  +	top:0px;right:0px;
                                                  +	border: 0;
                                                  +}
                                                  +.join_msg{
                                                  +	min-width:200px;
                                                  +	max-width:290px;
                                                  +	min-height:25px;
                                                  +	position:absolute;
                                                  +	top:159px;
                                                  +	left:50%;
                                                  +	margin-left:-500px;
                                                  +	border:1px solid #ddd;
                                                  +	background:#efeeee;
                                                  +	padding:5px;
                                                  +	line-height:25px;
                                                  +	font-size:18px;
                                                  +	color:#4183C4;
                                                  +	word-wrap: break-word;
                                                  +	word-break: break-all;
                                                  +	z-index:5;
                                                  +	opacity:0.7;
                                                  +	filter:alpha(opacity=70);
                                                  +}
                                                  +.join_msg .msg-content{
                                                  +	display:block;
                                                  +	padding:5px;
                                                  +	line-height:25px;
                                                  +	font-size:18px;
                                                  +	color:#4183C4;
                                                  +	word-wrap: break-word;
                                                  +	word-break: break-all;
                                                  +}
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/diagraming/designer.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/diagraming/designer.css
                                                  new file mode 100644
                                                  index 00000000..7251197a
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/diagraming/designer.css
                                                  @@ -0,0 +1,538 @@
                                                  +@CHARSET "UTF-8";
                                                  +
                                                  +html,body{
                                                  +	padding:0px; margin:0px;
                                                  +	overflow: hidden;
                                                  +	-moz-user-select:none;
                                                  +	-webkit-user-select:none;
                                                  +	-ms-user-select:none;
                                                  +	-khtml-user-select:none;
                                                  +	user-select:none;
                                                  +}
                                                  +::-webkit-scrollbar {
                                                  +	width: 9px;
                                                  +	height: 9px;
                                                  +	background: white;
                                                  +	border-left: 1px solid #e8e8e8;
                                                  +}
                                                  +::-webkit-scrollbar-thumb {
                                                  +	border-width: 1px;
                                                  +	border-style: solid;
                                                  +	border-color: #fff;
                                                  +	border-radius: 6px;
                                                  +	background: #c9c9c9;
                                                  +}
                                                  +::-webkit-scrollbar-thumb:hover {
                                                  +	background: #b5b5b5;
                                                  +}
                                                  +.clear{
                                                  +	clear:both;
                                                  +}
                                                  +#designer{
                                                  +	width:100%;
                                                  +	position: relative;
                                                  +}
                                                  +#shape_panel{
                                                  +	width:162px;
                                                  +	overflow: hidden;
                                                  +	overflow-y: auto;
                                                  +	position: absolute;
                                                  +	background: #fafafa;
                                                  +	border-right: 1px solid #A2A2A2;
                                                  +}
                                                  +#shape_panel_more_shape{
                                                  +	width:162px;
                                                  +	height:40px;
                                                  +	text-align:center;
                                                  +	overflow: hidden;
                                                  +	overflow-y: auto;
                                                  +	position: absolute;
                                                  +	background: #fafafa;
                                                  +	border-right: 1px solid #A2A2A2;
                                                  +}
                                                  +.panel_container{
                                                  +	border-bottom: 1px solid #CBCCCC;
                                                  +	margin-top: 1px;
                                                  +}
                                                  +.panel_title{
                                                  +	position: relative;
                                                  +	margin: 0px;
                                                  +	background-color: #F3F3F3;
                                                  +	height: 30px;
                                                  +	line-height: 30px;
                                                  +	font-size: 12px;
                                                  +	white-space: nowrap;
                                                  +	text-overflow: ellipsis;
                                                  +	overflow: hidden;
                                                  +	padding: 0 2px 0 19px;
                                                  +	border-bottom: #cccccc solid 1px;
                                                  +	cursor: default;
                                                  +	-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-moz-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-ms-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.33);
                                                  +}
                                                  +.panel_title .ico_accordion{
                                                  +	position: absolute;
                                                  +	left: 5px;
                                                  +	top: 11px;
                                                  +}
                                                  +.panel_container .content{
                                                  +	margin: 0px auto;
                                                  +	width: 138px;
                                                  +	padding: 5px 0px;
                                                  +}
                                                  +.panel_collapsed .panel_title{
                                                  +	-webkit-box-shadow: none;
                                                  +	-moz-box-shadow: none;
                                                  +	-ms-box-shadow: none;
                                                  +	box-shadow: none;
                                                  +	text-shadow: none;
                                                  +	border-bottom: 0px;
                                                  +}
                                                  +.panel_collapsed .content{
                                                  +	display: none;
                                                  +}
                                                  +.panel_collapsed .ico_accordion{
                                                  +	background-position: -51px -46px;
                                                  +}
                                                  +.panel_box{
                                                  +	display:inline-block;
                                                  +	border:2px solid transparent;
                                                  +	position:relative;
                                                  +}
                                                  +.panel_box.selected{
                                                  +	border-color: #6EB1EB;
                                                  +}
                                                  +#shape_thumb{
                                                  +	position: absolute;
                                                  +	left: 5px; top: 0px;
                                                  +	padding: 5px;
                                                  +	display: none;
                                                  +}
                                                  +#shape_thumb div{
                                                  +	padding: 0px 0px 10px;
                                                  +	text-align: center;
                                                  +}
                                                  +.group_icon{
                                                  +	position:absolute;
                                                  +	display:block;
                                                  +	bottom:0px;
                                                  +	right:0px;
                                                  +	background: url(../images/diagraming/sprite.png) no-repeat;
                                                  +	height: 10px;
                                                  +	width: 10px;
                                                  +	background-position: -43px -64px;
                                                  +	opacity: 0.8;
                                                  +}
                                                  +.group_icon:hover{
                                                  +	opacity: 1;
                                                  +}
                                                  +.change_shape_icon{
                                                  +	right: -10px;
                                                  +	bottom: -10px;
                                                  +}
                                                  +.group_dashboard{
                                                  +	padding: 4px;
                                                  +	width: 136px;
                                                  +	cursor: default;
                                                  +}
                                                  +.panel_item{
                                                  +	margin:0px auto;
                                                  +}
                                                  +#creating_shape_container{
                                                  +	overflow: hidden;
                                                  +	position: absolute;
                                                  +	display: none;
                                                  +}
                                                  +#creating_shape_canvas{
                                                  +	position: absolute;
                                                  +}
                                                  +#designer_viewport{
                                                  +	position: relative;
                                                  +	margin-left: 163px;
                                                  +}
                                                  +#demo_signup{
                                                  +	background: #b2b2b2;
                                                  +	padding: 10px 20px 10px 140px;
                                                  +	border-bottom: 1px solid #a0a0a0;
                                                  +	height: 39px;
                                                  +	position: relative;
                                                  +}
                                                  +#demo_signup span{
                                                  +	line-height: 19px;
                                                  +	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.11);
                                                  +}
                                                  +#demo_signup a{
                                                  +	position: absolute;
                                                  +	left: 20px;
                                                  +	line-height: 38px;
                                                  +	height: 38px;
                                                  +	width: 80px;
                                                  +	font-size: 16px;
                                                  +}
                                                  +#designer_layout{
                                                  +	overflow: scroll;
                                                  +	position: relative;
                                                  +	background: url(../images/diagraming/canvas_bg.jpg) repeat;
                                                  +	z-index: 0;
                                                  +}
                                                  +#designer_canvas{
                                                  +	position: relative;
                                                  +	background:#F2F2F2;
                                                  +	overflow: visible;
                                                  +}
                                                  +.designer_canvas{
                                                  +	box-shadow: 3px 3px 6px #888;
                                                  +}
                                                  +#shape_img_container{
                                                  +	height: 0px;
                                                  +	overflow: hidden;
                                                  +}
                                                  +.shape_box{
                                                  +	position:absolute;
                                                  +}
                                                  +.link_point_canvas{
                                                  +	position:absolute;
                                                  +}
                                                  +.shape_box_creating{
                                                  +	position:absolute;
                                                  +}
                                                  +/**锚点、控制点样式*/
                                                  +.shape_anchor{
                                                  +	position: absolute;
                                                  +	border-style: solid;
                                                  +	border-width: 1px;
                                                  +	background: white;
                                                  +}
                                                  +/**形状锁定提醒样式*/
                                                  +.shape_locker{
                                                  +	position: absolute;
                                                  +}
                                                  +.shape_controller{
                                                  +	position: absolute;
                                                  +	border-style: solid;
                                                  +	border-width: 1px;
                                                  +	background: white;
                                                  +}
                                                  +.shape_controller.n.w{
                                                  +	cursor: nw-resize;
                                                  +}
                                                  +.shape_controller.n.e{
                                                  +	cursor: ne-resize;
                                                  +}
                                                  +.shape_controller.s.e{
                                                  +	cursor: se-resize;
                                                  +}
                                                  +.shape_controller.s.w{
                                                  +	cursor: sw-resize;
                                                  +}
                                                  +.shape_controller.n, .shape_controller.s{
                                                  +	cursor: n-resize;
                                                  +}
                                                  +.shape_controller.e, .shape_controller.w{
                                                  +	cursor: e-resize;
                                                  +}
                                                  +.shape_rotater{
                                                  +	position: absolute;
                                                  +}
                                                  +.shape_rotater.rotate_enable{
                                                  +	cursor: url(../images/diagraming/rotate.gif) 16 16, auto;
                                                  +}
                                                  +/**图形选择后的控件容器*/
                                                  +#shape_controls{
                                                  +	position: absolute; left: 0px; top: 0px;
                                                  +}
                                                  +#shape_controls #controls_bounding{
                                                  +	position: absolute; left: -10px; top: -10px;
                                                  +}
                                                  +/**图形的矩形轮廓容器*/
                                                  +.shape_contour{
                                                  +	position: absolute; left: 0px; top: 0px; width: 0px; height: 0px;
                                                  +}
                                                  +/**图形选择框*/
                                                  +#selecting_box{
                                                  +	position: absolute; border: 1px solid #6EB1EB;
                                                  +	background: rgba(22, 145, 232, 0.1);
                                                  +}
                                                  +/**创建文本的位置选择框*/
                                                  +#texting_box{
                                                  +	position: absolute; border: 2px solid #6EB1EB;
                                                  +}
                                                  +/* 文本编辑 */
                                                  +#shape_edit_menu{
                                                  +	padding: 15px 20px;
                                                  +	position: absolute;
                                                  +}
                                                  +#shape_edit_menu textarea{
                                                  +	display: block;
                                                  +	width: 280px;
                                                  +	margin-bottom: 5px;
                                                  +	overflow: hidden;
                                                  +}
                                                  +#shape_text_edit{
                                                  +	position: absolute;
                                                  +	overflow: hidden;
                                                  +	background: rgba(255,255,255,.01);
                                                  +	border: 2px solid #f7ddaa;
                                                  +	border-radius: 2px;
                                                  +	padding: 0px;
                                                  +	cursor: text;
                                                  +}
                                                  +#shape_text_ruler{
                                                  +	padding: 0px;
                                                  +	border: none;
                                                  +	background: transparent;
                                                  +	opacity: 0;
                                                  +	height: 0px;
                                                  +	overflow: hidden;
                                                  +}
                                                  +/** 连接线文本编辑 */
                                                  +#linker_text_edit{
                                                  +	position: absolute;
                                                  +	overflow: hidden;
                                                  +	background: white;
                                                  +	border: 2px solid #f7ddaa;
                                                  +	border-radius: 2px;
                                                  +	padding: 0px;
                                                  +}
                                                  +.text_canvas{
                                                  +	position: absolute;
                                                  +	padding: 0px;
                                                  +	border: none;
                                                  +	background: transparent;
                                                  +	cursor: inherit;
                                                  +	overflow: hidden;
                                                  +	-moz-user-select:none;
                                                  +	-webkit-user-select:none;
                                                  +	-ms-user-select:none;
                                                  +	-khtml-user-select:none;
                                                  +	user-select:none;
                                                  +}
                                                  +.text_canvas.linker_text{
                                                  +	background: white;
                                                  +	white-space:nowrap
                                                  +}
                                                  +.attr_canvas{
                                                  +	position: absolute;
                                                  +}
                                                  +#link_spot{
                                                  +	position: absolute;
                                                  +	width: 100px;
                                                  +	height: 100px;
                                                  +	display: block;
                                                  +}
                                                  +/** 设计器操作气泡提示 */
                                                  +#designer_op_tip{
                                                  +	position: absolute;
                                                  +	border: 1px solid #D1D1D1;
                                                  +	background: #f2f2f2;
                                                  +	padding: 5px 10px;
                                                  +	border-radius: 3px;
                                                  +	display:none;
                                                  +	color: #444;
                                                  +	text-align: center;
                                                  +	white-space:nowrap;
                                                  +}
                                                  +/**对齐线*/
                                                  +#designer_op_snapline_h{
                                                  +	background: #6EB1EB;
                                                  +	position: absolute;
                                                  +	height: 1px;
                                                  +	width: 100%;
                                                  +}
                                                  +#designer_op_snapline_v{
                                                  +	background: #6EB1EB;
                                                  +	position: absolute;
                                                  +	width: 1px;
                                                  +}
                                                  +#designer_op_snapline_attach{
                                                  +	position: absolute;
                                                  +	border: 2px solid #6EB1EB;
                                                  +}
                                                  +/**菜单*/
                                                  +.menu{
                                                  +	position: absolute;
                                                  +	background: #FFF;
                                                  +	border-radius: 4px;
                                                  +	border: 1px solid rgb(180,180,180);
                                                  +	-webkit-box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.3);
                                                  +	-moz-box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.3);
                                                  +	box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.3);
                                                  +}
                                                  +.menu.list{
                                                  +	padding: 4px 0px;
                                                  +}
                                                  +.menu li{
                                                  +	padding: 0px 20px; line-height: 26px; cursor: default;
                                                  +	position: relative;
                                                  +}
                                                  +.menu_ico li{
                                                  +	padding: 0px 30px;
                                                  +}
                                                  +.menu li:hover{
                                                  +	background-color: #eee;
                                                  +/* 	background-color: #2eb5e5; */
                                                  +/* 	background-image: -moz-linear-gradient(top, #34c0e9 0%, #29aae1 100%); */
                                                  +/* 	background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #34c0e9), color-stop(100%, #29aae1)); */
                                                  +/* 	background-image: -webkit-linear-gradient(top, #34c0e9 0%, #29aae1 100%); */
                                                  +/* 	background-image: -o-linear-gradient(top, #34c0e9 0%, #29aae1 100%); */
                                                  +/* 	background-image: -ms-linear-gradient(top, #34c0e9 0%, #29aae1 100%); */
                                                  +/* 	background-image: linear-gradient(top, #34c0e9 0%, #29aae1 100%); */
                                                  +/* 	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#34c0e9', endColorstr='#29aae1',GradientType=0 ); */
                                                  +/* 	color: #fff; */
                                                  +/* 	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); */
                                                  +}
                                                  +.menu li.disabled{
                                                  +/* 	color: #999; */
                                                  +	color: #ccc;
                                                  +}
                                                  +.menu li.disabled:hover{
                                                  +/* 	color: #999; */
                                                  +	color: #ccc;
                                                  +	background-color: transparent;
                                                  +	background-image: none;
                                                  +	filter: none;
                                                  +	text-shadow:none;
                                                  +}
                                                  +.menu li .ico_selected{
                                                  +	position: absolute;
                                                  +	top: 3px;
                                                  +	left: 5px;
                                                  +}
                                                  +.menu .devider{
                                                  +	height: 0px;
                                                  +	border-top: #ccc solid 1px;
                                                  +	margin: 4px 0;
                                                  +}
                                                  +.menu .menu_text{
                                                  +	color: #888;
                                                  +}
                                                  +.menu .menu_text:hover{
                                                  +	background: transparent;
                                                  +}
                                                  +/**图形画板*/
                                                  +.shape_dashboard{
                                                  +	padding: 4px;
                                                  +	width: 136px;
                                                  +	cursor: default;
                                                  +}
                                                  +.dashboard_box{
                                                  +	display:inline-block;
                                                  +	padding:1px;
                                                  +	border: 1px solid transparent;
                                                  +	position: relative;
                                                  +}
                                                  +.dashboard_box:hover{
                                                  +	border-color: #D1D1D1;
                                                  +	background: #f2f2f2;
                                                  +}
                                                  +/**操作帮助*/
                                                  +#designer_op_help{
                                                  +	position: absolute;
                                                  +	top: 0px;
                                                  +	left: 0px;
                                                  +	font-size: 24px;
                                                  +	font-weight: bold;
                                                  +	color: #A7A7A7;
                                                  +	color: rgba(0,0,0,.3);
                                                  +	padding: 5px;
                                                  +}
                                                  +/**鹰眼视图*/
                                                  +.navigation_bounding{
                                                  +	padding: 10px 0px;
                                                  +	overflow: hidden;
                                                  +}
                                                  +.navigation_view_container{
                                                  +	margin: 0px auto;
                                                  +	position: relative;
                                                  +	width: 120px;
                                                  +}
                                                  +#navigation_canvas{
                                                  +	background: white;
                                                  +	border: 1px solid #888;
                                                  +}
                                                  +#navigation_eye{
                                                  +	position: absolute;
                                                  +	border: 2px solid #6EB1EB;
                                                  +	top: 0px;
                                                  +	left: 0px;
                                                  +	width: 100px;
                                                  +	height: 80px;
                                                  +}
                                                  +.linker_cursor{
                                                  +	background: #db5e5e;
                                                  +	width: 8px;
                                                  +	height: 8px;
                                                  +	border-radius: 4px;
                                                  +	position: absolute;
                                                  +	z-index: 1000;
                                                  +}
                                                  +.linker_control_line{
                                                  +	position: absolute;
                                                  +	width: 1px;
                                                  +	opacity: 0.5;
                                                  +	background: #833;
                                                  +}
                                                  +.linker_control_point{
                                                  +	position: absolute;
                                                  +	width: 6px;
                                                  +	height: 6px;
                                                  +	border: 1px solid #833;
                                                  +	background: white;
                                                  +	-webkit-border-radius: 4px;
                                                  +	-moz-border-radius: 4px;
                                                  +	-ms-border-radius: 4px;
                                                  +	-o-border-radius: 4px;
                                                  +	border-radius: 4px;
                                                  +	cursor: default;
                                                  +}
                                                  +.linker_control_point:hover, .linker_control_point.moving{
                                                  +	background: #db5e5e;
                                                  +}
                                                  +.navigation_view_bar{
                                                  +	padding: 10px;
                                                  +}
                                                  +.navigation_view_bar .toolbar_button, .navigation_view_bar .spinner{
                                                  +	display: inline-block;
                                                  +}
                                                  +.navigation_view_bar .spinner{
                                                  +	width: 55px;
                                                  +}
                                                  +.navigation_view_bar .toolbar_button{
                                                  +	float: right;
                                                  +	margin-left: 5px;
                                                  +}
                                                  +
                                                  +/*Full Screen Styles*/
                                                  +#shape_panel.readonly {
                                                  +	display: none;
                                                  +}
                                                  +#designer_viewport.readonly{
                                                  +	margin-left: 0px;
                                                  +}
                                                  +#fullscreen_tip{
                                                  +	position: absolute;
                                                  +	bottom: -70px;
                                                  +	right: 0px;
                                                  +	display: none;
                                                  +	white-space:nowrap;
                                                  +}
                                                  +#fullscreen_tip .dlg_close{
                                                  +	position: absolute;
                                                  +	top: 1px;
                                                  +	right: 2px;
                                                  +}
                                                  +.full_suggest{
                                                  +	margin-top: 5px;
                                                  +	line-height: 20px;
                                                  +	height: 20px;
                                                  +}
                                                  +.full_suggest span{
                                                  +	display: inline-block;
                                                  +	float: left;
                                                  +}
                                                  +.full_suggest .ico{
                                                  +	margin-right: 5px;
                                                  +}
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/diagraming/ui.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/diagraming/ui.css
                                                  new file mode 100644
                                                  index 00000000..197ac9a3
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/diagraming/ui.css
                                                  @@ -0,0 +1,2177 @@
                                                  +@CHARSET "UTF-8";
                                                  +/**    ################ UI Styles #################### **/
                                                  +html{
                                                  +	background: #F2F2F2;
                                                  +}
                                                  +#designer_header{
                                                  +	background-color: #F7F7F7;
                                                  +	border-bottom: 1px solid #aaaaaa;
                                                  +}
                                                  +#designer_header .row{
                                                  +	position: relative;
                                                  +	margin: 0px 20px 0px 10px;
                                                  +}
                                                  +.btn_back{
                                                  +	height: 20px;
                                                  +	width: 20px;
                                                  +	position: absolute;
                                                  +	left: 2px;
                                                  +	top: 10px;
                                                  +	padding: 5px;
                                                  +	cursor: pointer;
                                                  +	display: block;
                                                  +}
                                                  +.btn_back .ico{
                                                  +	display: block;
                                                  +}
                                                  +.btn_back:hover{
                                                  +	background-color: #eee;
                                                  +}
                                                  +#title_container{
                                                  +	display: inline-block;
                                                  +}
                                                  +.diagram_title{
                                                  +	display: inline-block;
                                                  +	font-size: 20px;
                                                  +	cursor: pointer;
                                                  +	padding: 0px 10px;
                                                  +	line-height: 30px;
                                                  +	height: 30px;
                                                  +	margin-top: 10px;
                                                  +}
                                                  +.diagram_title:hover{
                                                  +	background-color: #eee;
                                                  +}
                                                  +.diagram_title.readonly{
                                                  +	cursor: default;
                                                  +}
                                                  +.diagram_title.readonly:hover{
                                                  +	background-color: transparent;
                                                  +}
                                                  +#title_container input{
                                                  +	border: 1px solid #D9D9D9;
                                                  +	border-top: 1px solid silver;
                                                  +	padding: 4px 10px;
                                                  +	height: 20px;
                                                  +	line-height: 20px;
                                                  +	width: 300px;
                                                  +	margin-top: 10px;
                                                  +	border-radius: 3px;
                                                  +}
                                                  +.input_text{
                                                  +	border: 1px solid #D9D9D9;
                                                  +	border-top: 1px solid silver;
                                                  +	padding: 3px 5px;
                                                  +	height: 18px;
                                                  +	line-height: 18px;
                                                  +	border-radius: 2px;
                                                  +}
                                                  +.input_select{
                                                  +	border: 1px solid #D9D9D9;
                                                  +	border-top: 1px solid silver;
                                                  +	padding: 3px 2px 3px 0px;
                                                  +	height: 26px;
                                                  +	line-height: 26px;
                                                  +	border-radius: 2px;
                                                  +	outline:none;
                                                  +}
                                                  +#designer_header{
                                                  +	position: relative;
                                                  +}
                                                  +#designer_header .row2{
                                                  +	height: 30px;
                                                  +	line-height: 30px;
                                                  +}
                                                  +
                                                  +#menu_bar{
                                                  +	display: inline-block;
                                                  +	float: left;
                                                  +}
                                                  +#saving_tip{
                                                  +	display: inline-block;
                                                  +	float: left;
                                                  +	margin-left: 20px;
                                                  +	line-height: 28px;
                                                  +	color: #777;
                                                  +}
                                                  +#menu_bar li{
                                                  +	float: left;
                                                  +	line-height: 28px;
                                                  +	padding: 0px 10px;
                                                  +	cursor: default;
                                                  +}
                                                  +#menu_bar li:hover{
                                                  +	background-color: #eee;
                                                  +}
                                                  +#menu_bar li.readonly:hover{
                                                  +	background-color: transparent;
                                                  +}
                                                  +.toolbar{
                                                  +	padding-left: 25px;
                                                  +	background-color: #f3f3f3;
                                                  +	border-top: 1px solid #cbcccc;
                                                  +	height: 36px;
                                                  +	font-size: 12px;
                                                  +	min-width: 840px;
                                                  +}
                                                  +.toolbar .toolbar_button, .toolbar .spinner{
                                                  +	float: left;
                                                  +	margin-top: 5px;
                                                  +}
                                                  +.toolbar_devider{
                                                  +	float: left;
                                                  +	border-left: 1px solid #D2D2D2;
                                                  +	height: 36px;
                                                  +	margin: 0px 3px 0px 3px;
                                                  +	border-right: 1px solid #FAFAFA;
                                                  +}
                                                  +.toolbar_small_devider{
                                                  +	float: left;
                                                  +	width: 1px;
                                                  +	height: 20px;
                                                  +	background-color: #D2D2D2;
                                                  +	margin: 8px 3px 0px 3px;
                                                  +}
                                                  +.ico{
                                                  +	background: url(../images/diagraming/sprite.png?6) no-repeat;
                                                  +	height: 20px;
                                                  +	width: 20px;
                                                  +	opacity: 0.7;
                                                  +}
                                                  +.disabled .ico{
                                                  +	background-image: url(../images/diagraming/sprite_disabled.png?5);
                                                  +}
                                                  +.ico.undo{
                                                  +	background-position: 0px -20px;
                                                  +}
                                                  +.ico.redo{
                                                  +	background-position: -20px 0px;
                                                  +}
                                                  +.ico.brush{
                                                  +	background-position: -20px -20px;
                                                  +}
                                                  +.ico.bold{
                                                  +	background-position: -20px -40px;
                                                  +}
                                                  +.ico.italic{
                                                  +	background-position: 0px -60px;
                                                  +}
                                                  +.ico.underline{
                                                  +	background-position: -20px -60px;
                                                  +}
                                                  +.ico.fontcolor{
                                                  +	background-position: 0px -80px;
                                                  +}
                                                  +.ico.alignleft{
                                                  +	background-position: -20px -80px;
                                                  +}
                                                  +.ico.aligncenter{
                                                  +	background-position: 0px -100px;
                                                  +}
                                                  +.ico.alignright{
                                                  +	background-position: -20px -100px;
                                                  +}
                                                  +.ico.aligntop{
                                                  +	background-position: 0px -120px;
                                                  +}
                                                  +.ico.alignmiddle{
                                                  +	background-position: -20px -120px;
                                                  +}
                                                  +.ico.alignbottom{
                                                  +	background-position: 0px -140px;
                                                  +}
                                                  +.ico.fillcolor{
                                                  +	background-position: -20px -140px;
                                                  +}
                                                  +.ico.linecolor{
                                                  +	background-position: 0px -160px;
                                                  +}
                                                  +.ico.linewidth{
                                                  +	background-position: -20px -160px;
                                                  +}
                                                  +.ico.linedash{
                                                  +	background-position: 0px -180px;
                                                  +}
                                                  +.ico.linestyle{
                                                  +	width: 50px;
                                                  +	height: 2px;
                                                  +}
                                                  +.ico.linesolid{
                                                  +	background-position: 0px -202px;
                                                  +}
                                                  +.ico.linedashed{
                                                  +	background-position: 0px -215px;
                                                  +}
                                                  +.ico.linedot{
                                                  +	background-position: 0px -208px;
                                                  +}
                                                  +.ico.linedashdot{
                                                  +	background-position: 0px -222px;
                                                  +}
                                                  +.ico.linkertype_broken{
                                                  +	background-position: -20px -180px;
                                                  +}
                                                  +.ico.linkertype_curve{
                                                  +	background-position: -40px -160px;
                                                  +}
                                                  +.ico.linkertype_normal{
                                                  +	background-position: -40px -180px;
                                                  +}
                                                  +.ico_arrow{
                                                  +	width: 26px;
                                                  +	height: 10px;
                                                  +}
                                                  +.ico.larrow_none{
                                                  +	background-position: 0px -329px;
                                                  +}
                                                  +.larrow_solidarrow{
                                                  +	background-position: 0px -228px;
                                                  +}
                                                  +.larrow_dashedarrow{
                                                  +	background-position: 0px -240px;
                                                  +}
                                                  +.larrow_normal{
                                                  +	background-position: 0px -254px;
                                                  +}
                                                  +.larrow_soliddiamond{
                                                  +	background-position: 0px -266px;
                                                  +}
                                                  +.larrow_dasheddiamond{
                                                  +	background-position: 0px -279px;
                                                  +}
                                                  +.larrow_solidcircle{
                                                  +	background-position: 0px -293px;
                                                  +}
                                                  +.larrow_dashedcircle{
                                                  +	background-position: 0px -305px;
                                                  +}
                                                  +.larrow_cross{
                                                  +	background-position: 0px -319px;
                                                  +}
                                                  +.ico.rarrow_none{
                                                  +	background-position: -26px -329px;
                                                  +}
                                                  +.rarrow_solidarrow{
                                                  +	background-position: -26px -228px;
                                                  +}
                                                  +.rarrow_dashedarrow{
                                                  +	background-position: -26px -240px;
                                                  +}
                                                  +.rarrow_normal{
                                                  +	background-position: -26px -254px;
                                                  +}
                                                  +.rarrow_soliddiamond{
                                                  +	background-position: -26px -266px;
                                                  +}
                                                  +.rarrow_dasheddiamond{
                                                  +	background-position: -26px -279px;
                                                  +}
                                                  +.rarrow_solidcircle{
                                                  +	background-position: -26px -293px;
                                                  +}
                                                  +.rarrow_dashedcircle{
                                                  +	background-position: -26px -305px;
                                                  +}
                                                  +.rarrow_cross{
                                                  +	background-position: -26px -319px;
                                                  +}
                                                  +.ico_lock{
                                                  +	background-position: -40px -140px;
                                                  +}
                                                  +.ico_unlock{
                                                  +	background-position: -40px -120px;
                                                  +}
                                                  +.ico_link{
                                                  +	background-position: -20px -420px;
                                                  +}
                                                  +.ico_risk{
                                                  +	background-position: -40px -620px;
                                                  +}
                                                  +.ico_import{
                                                  +	background-image: url(../../../../../img/icon/import16.png) !important;
                                                  +    background-size: 20px;
                                                  +}
                                                  +.ico_importShape{
                                                  +	background-image: url(../../../../../img/icon/import16.png) !important;
                                                  +    background-size: 20px;
                                                  +}
                                                  +
                                                  +.ico_selected{
                                                  +	background-position: -40px -100px;
                                                  +}
                                                  +.ico_accordion{
                                                  +	width: 8px;
                                                  +	height: 8px;
                                                  +	background-position: -40px -47px;
                                                  +}
                                                  +.ico_dock_nav{
                                                  +	background-position: -40px 0px;
                                                  +}
                                                  +.ico_dock_styles{
                                                  +	background-position: 1px -340px;
                                                  +}
                                                  +.ico_dock_metric{
                                                  +	background-position: 0px -360px;
                                                  +}
                                                  +.ico_dock_page{
                                                  +	background-position: -20px -360px;
                                                  +}
                                                  +.ico_dock_attribute{
                                                  +	background-position: -39px -360px;
                                                  +}
                                                  +.ico_dock_message{
                                                  +	background-position: 0px -440px;
                                                  +}
                                                  +.ico_dock_publish{
                                                  +	background-position: -40px -600px;
                                                  +}
                                                  +.ico_dock_enlarge{
                                                  +	background-position: -20px -500px;
                                                  +}
                                                  +.ico_dock_narrow{
                                                  +	background-position: -39px -500px;
                                                  +}
                                                  +.ico_dock_print{
                                                  +	background-position: 1px -620px;
                                                  +}
                                                  +.ico_dock_fullscreen{
                                                  +	background-position: -40px -580px;
                                                  +}
                                                  +.ico_dock_upfile{
                                                  +	background-position: -20px -621px;
                                                  +}
                                                  +.ico_attr_delete{
                                                  +	background-position: 0px -380px;
                                                  +}
                                                  +.ico_attr_delete:hover{
                                                  +	background-position: -20px -380px;
                                                  +}
                                                  +.gradient{
                                                  +	background-position: 0px -400px;
                                                  +}
                                                  +.ico_img{
                                                  +	background-position: -20px -400px;
                                                  +}
                                                  +.ico_front{
                                                  +	background-position: -40px -400px;
                                                  +}
                                                  +.ico_back{
                                                  +	background-position: 0px -420px;
                                                  +}
                                                  +.ico_goback{
                                                  +	background-position: -40px -420px;
                                                  +}
                                                  +.ico_chat{
                                                  +	background-position: 0px -440px;
                                                  +	margin: 4px 2px;
                                                  +}
                                                  +.ico_history{
                                                  +	background-position: -20px -440px;
                                                  +}
                                                  +.ico_play{
                                                  +	background-position: -40px -440px;
                                                  +}
                                                  +.ico_pause{
                                                  +	background-position: 0px -460px;
                                                  +}
                                                  +.ico_playing{
                                                  +	background-position: -20px -460px;
                                                  +	position: absolute;
                                                  +	top: 10px;
                                                  +	left: -5px;
                                                  +}
                                                  +.ico_restore{
                                                  +	background-position: -40px -460px;
                                                  +}
                                                  +.ico.cut{
                                                  +	background-position: 0px -480px;
                                                  +}
                                                  +.ico.copy{
                                                  +	background-position: -20px -480px;
                                                  +}
                                                  +.ico.paste{
                                                  +	background-position: -40px -480px;
                                                  +}
                                                  +.ico.remove{
                                                  +	background-position: 0px -500px;
                                                  +}
                                                  +.ico.zoomin{
                                                  +	background-position: -20px -500px;
                                                  +}
                                                  +.ico.zoomout{
                                                  +	background-position: -40px -500px;
                                                  +}
                                                  +.ico.text{
                                                  +	background-position: 0px -520px;
                                                  +}
                                                  +.ico.gridsize{
                                                  +	background-position: -20px -520px;
                                                  +}
                                                  +.ico.padding{
                                                  +	background-position: -40px -520px;
                                                  +}
                                                  +.ico.edittext{
                                                  +	background-position: 0px -540px;
                                                  +}
                                                  +.ico.useradd{
                                                  +	background-position: -20px -540px;
                                                  +}
                                                  +.ico.chrome{
                                                  +	background-position: -40px -540px;
                                                  +}
                                                  +.ico.weibo{
                                                  +	background-position: 0px -560px;
                                                  +}
                                                  +.ico.twitter{
                                                  +	background-position: -20px -560px;
                                                  +}
                                                  +.ico_header_share{
                                                  +	background-position: 0px -580px;
                                                  +}
                                                  +.ico_remove_red{
                                                  +	background-position: -20px -580px;
                                                  +}
                                                  +.ico_fullscreen{
                                                  +	background-position: -40px -580px;
                                                  +}
                                                  +.ico_presentation{
                                                  +	background-position: 0px -600px;
                                                  +}
                                                  +.ico.firefox{
                                                  +	background-position: -20px -600px;
                                                  +}
                                                  +
                                                  +
                                                  +/**    ################ Control Styles #################### **/
                                                  +.toolbar_button{
                                                  +	height: 24px;
                                                  +	line-height: 24px;
                                                  +	min-width: 20px;
                                                  +	padding: 0;
                                                  +	text-align: center;
                                                  +	border: 1px solid transparent;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-ms-border-radius: 2px;
                                                  +	border-radius: 2px;
                                                  +	position: relative;
                                                  +	cursor: default;
                                                  +}
                                                  +.toolbar_button.active, .toolbar_button:hover{
                                                  +	border-color: #c6c6c6;
                                                  +	-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-moz-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-ms-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	background-color: #F8F8F8;
                                                  +	background-image: -webkit-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: -moz-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: -ms-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +}
                                                  +.toolbar_button.active:hover{
                                                  +	background-color: #f3f3f3;
                                                  +	background-image: -webkit-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: -moz-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: -ms-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +}
                                                  +
                                                  +.spinner{
                                                  +	height: 24px;
                                                  +	border: 1px solid transparent;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-ms-border-radius: 2px;
                                                  +	border-radius: 2px;
                                                  +    position: relative;
                                                  +}
                                                  +.spinner.active, .spinner:hover, .spinner.active:hover{
                                                  +	border-color: #c6c6c6;
                                                  +	-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-moz-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-ms-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +    background: #FFF;
                                                  +}
                                                  +.spinner_input{
                                                  +	margin-right: 15px;
                                                  +}
                                                  +.spinner input{
                                                  +	margin: 0px;
                                                  +	border: 0px;
                                                  +	height: 24px;
                                                  +	line-height: 16px;
                                                  +	padding: 0px;
                                                  +	text-align: right;
                                                  +	background: transparent;
                                                  +	width: 100%;
                                                  +}
                                                  +.spinner .buttons{
                                                  +	position: absolute;
                                                  +	right: 0px;
                                                  +	top: 0px;
                                                  +	height: 24px;
                                                  +	width: 12px;
                                                  +	border-left: 1px solid transparent;
                                                  +}
                                                  +.spinner.active .buttons, .spinner:hover .buttons{
                                                  +	border-color: #c6c6c6;
                                                  +	background-color: #F8F8F8;
                                                  +	background-image: -webkit-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: -moz-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: -ms-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +}
                                                  +.spinner .buttons div{
                                                  +	background-image: url(../images/diagraming/sprite.png?5);
                                                  +	height: 12px;
                                                  +	width: 12px;
                                                  +}
                                                  +.spinner_up{
                                                  +	background-position: -44px -343px;
                                                  +}
                                                  +.spinner_down{
                                                  +	background-position: -3px -46px;
                                                  +}
                                                  +.spinner .buttons div:hover{
                                                  +	background-color: #d2d2d2;
                                                  +}
                                                  +
                                                  +.spinner.disabled:hover{
                                                  +	border-color: transparent;
                                                  +	-webkit-box-shadow: none;
                                                  +	-moz-box-shadow: none;
                                                  +	-ms-box-shadow: none;
                                                  +	box-shadow: none;
                                                  +    background: transparent;
                                                  +}
                                                  +.spinner.active.disabled, .spinner.active.disabled:hover{
                                                  +	border-color: #d6d6d6;
                                                  +	-webkit-box-shadow: none;
                                                  +	-moz-box-shadow: none;
                                                  +	-ms-box-shadow: none;
                                                  +	box-shadow: none;
                                                  +	background: #FFF;
                                                  +}
                                                  +.spinner.disabled input{
                                                  +	color: #b3b3b3;
                                                  +}
                                                  +.spinner.active.disabled .buttons, .spinner.active.disabled:hover .buttons{
                                                  +	border-color: #c6c6c6;
                                                  +	background-color: #fcfcfc;
                                                  +	background-image: -webkit-linear-gradient(top, #fcfcfc, #f5f5f5);
                                                  +	background-image: -moz-linear-gradient(top, #fcfcfc, #f5f5f5);
                                                  +	background-image: -ms-linear-gradient(top, #fcfcfc, #f5f5f5);
                                                  +	background-image: linear-gradient(top, #fcfcfc, #f5f5f5);
                                                  +}
                                                  +.spinner.disabled:hover .buttons{
                                                  +	border-color: transparent;
                                                  +	background-color: transparent;
                                                  +	background-image: none;
                                                  +}
                                                  +.spinner.disabled .buttons div:hover{
                                                  +	background-color: transparent;
                                                  +}
                                                  +.spinner.disabled .buttons div{
                                                  +	background-image: url(../images/diagraming/sprite_disabled.png?5);
                                                  +}
                                                  +
                                                  +.toolbar_button .ico{
                                                  +	margin: 2px;
                                                  +}
                                                  +.drop_button .ico{
                                                  +	margin-right: 0px;
                                                  +}
                                                  +.drop_button .ico_arrow{
                                                  +	margin-top: 7px;
                                                  +	margin-left: 4px;
                                                  +}
                                                  +.drop_button{
                                                  +	padding-right: 13px;
                                                  +}
                                                  +.toolbar_button .ico_dropdown{
                                                  +	position: absolute;
                                                  +	right: 0px;
                                                  +	top: 2px;
                                                  +	background-position: -3px -40px;
                                                  +	height: 20px;
                                                  +	width: 13px;
                                                  +	margin: 0px;
                                                  +}
                                                  +.btn_color{
                                                  +	height: 3px;
                                                  +	width: 20px;
                                                  +	position: absolute;
                                                  +	left: 2px;
                                                  +	bottom: 2px;
                                                  +	background-color: #333;
                                                  +}
                                                  +.text_content{
                                                  +	margin: 0px 13px 0px 5px;
                                                  +	white-space: nowrap;
                                                  +	overflow: hidden;
                                                  +	text-overflow: ellipsis;
                                                  +	height: 24px;
                                                  +	line-height: 24px;
                                                  +	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
                                                  +	text-align: left;
                                                  +	cursor: default;
                                                  +}
                                                  +.toolbar_button.disabled{
                                                  +	color: #b3b3b3;
                                                  +}
                                                  +.toolbar_button.disabled:hover{
                                                  +	border-color: transparent;
                                                  +	-webkit-box-shadow: none;
                                                  +	-moz-box-shadow: none;
                                                  +	-ms-box-shadow: none;
                                                  +	box-shadow: none;
                                                  +	background-color: transparent;
                                                  +	background-image: none;
                                                  +}
                                                  +.toolbar_button.active.disabled, .toolbar_button.active.disabled:hover{
                                                  +	border-color: #d6d6d6;
                                                  +	-webkit-box-shadow: none;
                                                  +	-moz-box-shadow: none;
                                                  +	-ms-box-shadow: none;
                                                  +	box-shadow: none;
                                                  +	background-color: #fcfcfc;
                                                  +	background-image: -webkit-linear-gradient(top, #fcfcfc, #f5f5f5);
                                                  +	background-image: -moz-linear-gradient(top, #fcfcfc, #f5f5f5);
                                                  +	background-image: -ms-linear-gradient(top, #fcfcfc, #f5f5f5);
                                                  +	background-image: linear-gradient(top, #fcfcfc, #f5f5f5);
                                                  +}
                                                  +.toolbar_button.selected, .toolbar_button.selected:hover{
                                                  +	-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
                                                  +	-moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
                                                  +	box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
                                                  +	background-color: #eee;
                                                  +	background-image: -webkit-linear-gradient(top,#eee,#e0e0e0);
                                                  +	background-image: -moz-linear-gradient(top,#eee,#e0e0e0);
                                                  +	background-image: -ms-linear-gradient(top,#eee,#e0e0e0);
                                                  +	background-image: -o-linear-gradient(top,#eee,#e0e0e0);
                                                  +	background-image: linear-gradient(top,#eee,#e0e0e0);
                                                  +	border-color: #ccc;
                                                  +}
                                                  +.toolbar_button.disabled .btn_color{
                                                  +	opacity: 0.3;
                                                  +	filter:alpha(opacity=30);
                                                  +}
                                                  +#font_align_list{
                                                  +	padding: 4px;
                                                  +	width: 78px;
                                                  +	height: 52px;
                                                  +}
                                                  +#font_align_list li{
                                                  +	float: left;
                                                  +	width:20px;
                                                  +	height: 20px;
                                                  +	padding: 3px;
                                                  +	border-radius: 2px;
                                                  +}
                                                  +#line_style_list li{
                                                  +	padding-top: 12px;
                                                  +	padding-bottom: 12px;
                                                  +}
                                                  +#line_type_list{
                                                  +	padding: 4px;
                                                  +}
                                                  +#line_type_list li{
                                                  +	width:20px;
                                                  +	height: 20px;
                                                  +	padding: 3px;
                                                  +	border-radius: 2px;
                                                  +}
                                                  +#beginarrow_list li, #endarrow_list li{
                                                  +	padding: 8px 30px;
                                                  +}
                                                  +
                                                  +.color_picker{
                                                  +	padding: 0px 10px 10px;
                                                  +	z-index: 1;
                                                  +}
                                                  +.color_items{
                                                  +	border-color: #000;
                                                  +	border-width: 0 1px 1px 0;
                                                  +	border-style: solid;
                                                  +	width: 156px;
                                                  +	margin-top: 10px;
                                                  +}
                                                  +.color_extend{
                                                  +	margin-top: 10px;
                                                  +	width: 156px;
                                                  +	position: relative;
                                                  +}
                                                  +.color_extend .toolbar_button{
                                                  +	display: inline-block;
                                                  +	padding: 0px 2px;
                                                  +}
                                                  +#bar_fill_img{
                                                  +	margin-left: 5px;
                                                  +}
                                                  +#bar_fill_more{
                                                  +	position: absolute;
                                                  +	right: 0px; top: 0px;
                                                  +	padding: 0px 10px;
                                                  +}
                                                  +.color_items div{
                                                  +	height: 12px;
                                                  +	width: 12px;
                                                  +	float: left;
                                                  +	border: #000 solid 1px;
                                                  +	border-width: 1px 0 0 1px;
                                                  +}
                                                  +.color_items div:hover{
                                                  +	position: relative;
                                                  +	border: #FFF solid 2px;
                                                  +	margin: -1px -2px -2px -1px;
                                                  +}
                                                  +.color_items .selected{
                                                  +	position: relative;
                                                  +	border: #f7ddaa solid 2px;
                                                  +	margin: -1px -2px -2px -1px;
                                                  +}
                                                  +.color_items .clear{
                                                  +	border: 0px;
                                                  +	float: none;
                                                  +	height: 0px;
                                                  +	width: 100%;
                                                  +	clear: both;
                                                  +}
                                                  +.options_menu{
                                                  +	display: none;
                                                  +}
                                                  +.options_menu li{
                                                  +	width: 180px;
                                                  +	position: relative;
                                                  +	color: #333;
                                                  +	text-shadow: none;
                                                  +	padding: 0px 30px;
                                                  +}
                                                  +.options_menu.noico li{
                                                  +	padding: 0px 20px;
                                                  +}
                                                  +.options_menu li .ico{
                                                  +	position: absolute;
                                                  +	top: 3px;
                                                  +	left: 5px;
                                                  +}
                                                  +.options_menu li .extend{
                                                  +	position: absolute;
                                                  +	right: 10px;
                                                  +	top: 0px;
                                                  +	color: #777;
                                                  +	text-align: right;
                                                  +}
                                                  +.options_menu li .ex_arrow{
                                                  +	color: #888;
                                                  +}
                                                  +.options_menu li:hover .extend{
                                                  +/* 	color: #a9ddf3; */
                                                  +}
                                                  +.options_menu li:hover .ex_arrow{
                                                  +	color: #444;
                                                  +}
                                                  +.options_menu li.disabled:hover .extend{
                                                  +	color: #ccc;
                                                  +}
                                                  +.options_menu li.disabled .extend{
                                                  +	color: #ccc;
                                                  +}
                                                  +.options_menu li.disabled .ex_arrow{
                                                  +	color: #C9C9C9;
                                                  +}
                                                  +.options_menu li.disabled:hover .ex_arrow{
                                                  +	color: #C9C9C9;
                                                  +}
                                                  +.options_menu li:hover .extend_menu{
                                                  +	display: block;
                                                  +}
                                                  +.options_menu li.disabled:hover .extend_menu{
                                                  +	display: none;
                                                  +}
                                                  +.extend_menu{
                                                  +	position: absolute;
                                                  +	border-top-left-radius: 0px;
                                                  +	border-left: 1px solid #999;
                                                  +	top: -5px;
                                                  +	right: -162px;
                                                  +	display: none;
                                                  +}
                                                  +.extend_menu li{
                                                  +	width: 120px;
                                                  +	padding: 0px 20px;	
                                                  +}
                                                  +.extend_menu.menu_ico li{
                                                  +	width: 100px;
                                                  +	padding: 0px 30px;	
                                                  +}
                                                  +.extend_menu .list_text{
                                                  +	color: #999;
                                                  +}
                                                  +.extend_menu .list_text:hover{
                                                  +	color: #999;
                                                  +	background-color: transparent;
                                                  +	background-image: none;
                                                  +	filter: none;
                                                  +	text-shadow:none;
                                                  +}
                                                  +.options_menu .ico_selected{
                                                  +	position: absolute;
                                                  +	left: 2px;
                                                  +	top: 1px;
                                                  +}
                                                  +
                                                  +.dialog{
                                                  +	background-color: #fff;
                                                  +	position: absolute;
                                                  +	border: 1px solid #acacac;
                                                  +	-webkit-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
                                                  +	-moz-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
                                                  +	box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
                                                  +	display: none;
                                                  +	z-index: 1;
                                                  +}
                                                  +.dlg_close{
                                                  +	position: absolute;
                                                  +	top: 15px;
                                                  +	right: 10px;
                                                  +	background-position: 0px -380px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.dlg_close:hover{
                                                  +	background-position: -20px -380px;
                                                  +}
                                                  +.dlg_mask{
                                                  +	background: #fff;
                                                  +	opacity: 0.60;
                                                  +	filter: alpha(opacity=60);
                                                  +	position: absolute;
                                                  +	top: 0px;
                                                  +	left: 0px;
                                                  +	width: 3000px;
                                                  +	height: 3000px;
                                                  +}
                                                  +.dialog_header{
                                                  +	height: 50px;
                                                  +	line-height: 50px;
                                                  +	font-size: 20px;
                                                  +	border-bottom: 1px solid #e5e5e5;
                                                  +	padding: 0px 30px 0px 20px;
                                                  +	cursor: default;
                                                  +}
                                                  +.dialog_content{
                                                  +	padding: 15px 20px;
                                                  +}
                                                  +.dialog_buttons{
                                                  +	padding: 0px 20px 20px;
                                                  +	text-align: right;
                                                  +}
                                                  +
                                                  +.export-list li{
                                                  +	padding: 10px 0px;
                                                  +	border-bottom: 1px solid #EFEFEF;
                                                  +	font-weight: bold;
                                                  +}
                                                  +.export_des{
                                                  +	font-weight: normal;
                                                  +	color: #555;
                                                  +	margin-left: 10px;
                                                  +}
                                                  +
                                                  +.mark_content{
                                                  +	display:none;
                                                  +	max-width: 280px;
                                                  +	padding-bottom: 15px;
                                                  +}
                                                  +.mark_content .dialog_header{
                                                  +	height: 30px;
                                                  +	line-height: 30px;
                                                  +	padding: 10px 30px 5px 13px;
                                                  +}
                                                  +.mark_content .dlg_close{
                                                  +	top: 12px;
                                                  +}
                                                  +.mark_content ._content{
                                                  +	margin: 5px 10px 5px 10px;
                                                  +	line-height: 20px;
                                                  +}
                                                  +.mark_content .arr-icon{
                                                  +	position: absolute;
                                                  +	width: 12px;
                                                  +	height: 12px;
                                                  +}
                                                  +.mark_content .mark_next{
                                                  +	text-align: right;
                                                  +	padding-right: 15px;
                                                  +}
                                                  +.mark_content .mark_next span{
                                                  +	cursor: pointer;
                                                  +	height: 24px;
                                                  +	line-height: 24px;
                                                  +	padding: 0px 5px;
                                                  +}
                                                  +.mark_content p{
                                                  +	margin: 0px;
                                                  +	padding: 4px 0px;
                                                  +}
                                                  +.arr-icon .arr-border{
                                                  +	position: absolute;
                                                  +	width: 0;
                                                  +	height: 0;
                                                  +	left: 0;
                                                  +	border-width: 10px 12px 10px 0px;
                                                  +	border-color: transparent #b4b4b4 transparent transparent;
                                                  +	border-style: dashed solid dashed none;
                                                  +	overflow: hidden;
                                                  +}
                                                  +.arr-icon .inner-arr{
                                                  +	position: absolute;
                                                  +	width: 0;
                                                  +	height: 0;
                                                  +	left: 1px;
                                                  +	border-width: 10px 12px 10px 0px;
                                                  +	border-color: transparent #fff transparent transparent;
                                                  +	border-style: dashed solid dashed none;
                                                  +	overflow: hidden;
                                                  +}
                                                  +.arr-icon.left{
                                                  +	top: 45%;
                                                  +	left: -12px;
                                                  +}
                                                  +.arr-icon.top{
                                                  +	top: -12px;
                                                  +	left: 45%;
                                                  +	-webkit-transform: rotate(90deg);
                                                  +	-moz-transform: rotate(90deg);
                                                  +	-ms-transform: rotate(90deg);
                                                  +	-o-transform: rotate(90deg);
                                                  +	transform: rotate(90deg);
                                                  +}
                                                  +.arr-icon.right{
                                                  +	right: -12px;
                                                  +	top: 45%;
                                                  +	-webkit-transform: rotate(180deg);
                                                  +	-moz-transform: rotate(180deg);
                                                  +	-ms-transform: rotate(180deg);
                                                  +	-o-transform: rotate(180deg);
                                                  +	transform: rotate(180deg);
                                                  +}
                                                  +
                                                  +.non_support_mask{
                                                  +	text-shadow:  0 1px rgba(255, 255, 255, .9);
                                                  +	background: #F2F2F2;
                                                  +	color: #666;
                                                  +	font-size: .75em;
                                                  +	font-family: NewsGothic,"News Gothic MT","Lucida Sans","Lucida Grande",sans-serif !important;
                                                  +}
                                                  +.no_sup_mask_main{
                                                  +	position: relative;
                                                  +	margin: 0px auto;
                                                  +	padding: 0 25px;
                                                  +	max-width: 700px;
                                                  +	text-align: center;
                                                  +}
                                                  +.no_sup_mask_main h1{
                                                  +	margin:  50px 0px 30px;
                                                  +	display: block;
                                                  +	font-size: 64px;
                                                  +	font-weight: 100;
                                                  +}
                                                  +.no_sup_mask_main h1 del{
                                                  +	color: #999;
                                                  +	text-decoration: line-through;
                                                  +}
                                                  +.no_sup_mask_main p{
                                                  +	margin: 20px 0px;
                                                  +	font-size: 14px;
                                                  +	line-height: 26px;
                                                  +}
                                                  +.bs_logo_list{
                                                  +	height: 80px; 
                                                  +}
                                                  +.bs_logo_list a{
                                                  +	display: inline-block;
                                                  +	width: 80px;
                                                  +	height: 80px;
                                                  +	overflow: hidden;
                                                  +	margin: 0px 5px;
                                                  +	background: url("../images/diagraming/support_browsers_list.png") 0px 0px no-repeat;
                                                  +}
                                                  +.non_support_mask .no_sup_mask_main .bs_logo_list a.sup_chrome{
                                                  +	background-position:  0px 0px;
                                                  +}
                                                  +.non_support_mask .no_sup_mask_main .bs_logo_list a.sup_firefox{
                                                  +	background-position:  -80px 0px;
                                                  +}
                                                  +.non_support_mask .no_sup_mask_main .bs_logo_list a.sup_ie{
                                                  +	background-position:  -160px 0px;
                                                  +}
                                                  +.non_support_mask .no_sup_mask_main .bs_logo_list a.sup_safari{
                                                  +	background-position:  0px -80px;
                                                  +}
                                                  +.non_support_mask .no_sup_mask_main .bs_logo_list a.sup_opera{
                                                  +	background-position:  -80px -80px;
                                                  +}
                                                  +.non_support_mask .no_sup_footer{
                                                  +	position: fixed;
                                                  +	left: 0;
                                                  +	right: 0;
                                                  +	bottom: 0;
                                                  +	background-color: #272727;
                                                  +	padding: 25px 25px 20px;
                                                  +}
                                                  +.non_support_mask .no_sup_footer .processon_logo{
                                                  +	display: inline-block;
                                                  +	width: 120px;
                                                  +	height: 26px;
                                                  +	background: url("/images/default/logo/logo_m.png") no-repeat;
                                                  +}
                                                  +
                                                  +/* Dock */
                                                  +#dock{
                                                  +	position: absolute;
                                                  +	right: 0px;
                                                  +	top: 0px;
                                                  +	border-width: 0px 0px 1px 1px;
                                                  +	border-color: #aaa;
                                                  +	border-style: solid;
                                                  +	background: #f5f5f5;
                                                  +	border-bottom-left-radius: 3px;
                                                  +	-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-moz-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-ms-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	z-index: 1;
                                                  +}
                                                  +.dock_header{
                                                  +	background: #5c5c5c;
                                                  +	background-image: -webkit-linear-gradient(top,#5c5c5c,#3e3e3e);
                                                  +	background-image: -moz-linear-gradient(top,#5c5c5c,#3e3e3e);
                                                  +	background-image: -ms-linear-gradient(top,#5c5c5c,#3e3e3e);
                                                  +	background-image: -o-linear-gradient(top,#5c5c5c,#3e3e3e);
                                                  +	background-image: linear-gradient(top,#5c5c5c,#3e3e3e);
                                                  +	height: 8px;
                                                  +	border-top: 1px solid #646464;
                                                  +	border-bottom: 1px solid #000;
                                                  +	width: 36px;
                                                  +}
                                                  +.dock_buttons{
                                                  +	border-top: 1px solid #f9f9f9;
                                                  +	padding: 0px 0px 10px;
                                                  +}
                                                  +.dock_buttons .ico{
                                                  +	opacity: 1;
                                                  +}
                                                  +#dock .toolbar_button{
                                                  +	margin: 5px 5px 0px 5px;
                                                  +}
                                                  +.dock_view{
                                                  +	background: #f5f5f5;
                                                  +	border: 1px solid #999;
                                                  +	-webkit-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.33);
                                                  +	-moz-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.33);
                                                  +	box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.33);
                                                  +	z-index: 0;
                                                  +	position: absolute;
                                                  +	top: 10px;
                                                  +	display: none;
                                                  +	width: 220px;
                                                  +}
                                                  +.dock_view_header{
                                                  +	height: 18px;
                                                  +	line-height: 18px;
                                                  +	border-top: #bfbfbf solid 1px;
                                                  +	border-bottom: #666666 solid 1px;
                                                  +	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.33);
                                                  +	background-color: #a6a6a6;
                                                  +	background-image: -webkit-linear-gradient(top,#b2b2b2,#9b9b9b);
                                                  +	background-image: -moz-linear-gradient(top,#b2b2b2,#9b9b9b);
                                                  +	background-image: -ms-linear-gradient(top,#b2b2b2,#9b9b9b);
                                                  +	background-image: -o-linear-gradient(top,#b2b2b2,#9b9b9b);
                                                  +	background-image: linear-gradient(top,#b2b2b2,#9b9b9b);
                                                  +	padding: 0px 10px;
                                                  +	position: relative;
                                                  +}
                                                  +.ico_dock_collapse{
                                                  +	width: 12px;
                                                  +	height: 12px;
                                                  +	position: absolute;
                                                  +	right: 3px;
                                                  +	top: 2px;
                                                  +	background-position: -43px -24px;
                                                  +	cursor: pointer;
                                                  +	border-radius: 2px;
                                                  +	border: 1px solid transparent;
                                                  +}
                                                  +.ico_dock_collapse:hover{
                                                  +	background-color: #878787;
                                                  +	border-color: #737373;
                                                  +}
                                                  +.dock_content{
                                                  +	padding: 5px 10px 10px;
                                                  +	position: relative;
                                                  +}
                                                  +.dock_content_title{
                                                  +	font-weight: bold;
                                                  +	margin: 5px 0px;
                                                  +}
                                                  +.dock_devider{
                                                  +	height: 0px;
                                                  +	border-width: 1px 0px;
                                                  +	border-style: solid;
                                                  +	border-top-color: #c4c4c4;
                                                  +	border-bottom-color: #fff;
                                                  +	margin-top: 10px;
                                                  +	clear: both;
                                                  +}
                                                  +.fill_detail{
                                                  +	margin-top: 10px;
                                                  +	display: none;
                                                  +}
                                                  +.picker_btn{
                                                  +	position: relative;
                                                  +	border: 2px solid #d2d2d2;
                                                  +	display: inline-block;
                                                  +	border-radius: 2px;
                                                  +}
                                                  +.picker_btn.disabled{
                                                  +	border-color: #dcdcdc;
                                                  +}
                                                  +.disabled .ico_colordrop{
                                                  +	background-color: #e5e5e5;
                                                  +}
                                                  +.disabled .picker_btn_holder{
                                                  +	opacity: 0.3;
                                                  +	filter:alpha(opacity=30);
                                                  +}
                                                  +.picker_btn_holder{
                                                  +	width: 20px;
                                                  +	height: 20px;
                                                  +	background: white;
                                                  +	border: 1px solid #f0f0f0;
                                                  +}
                                                  +.ico_colordrop{
                                                  +	position: absolute;
                                                  +	right: 0px;
                                                  +	bottom: 0px;
                                                  +	background-position: -5px -46px;
                                                  +	height: 9px;
                                                  +	width: 9px;
                                                  +	background-color: #d2d2d2;
                                                  +	border-top: 1px solid #f0f0f0;
                                                  +	border-left: 1px solid #e6e6e6;
                                                  +	border-top-left-radius: 1px;
                                                  +}
                                                  +.gradient_swap{
                                                  +	background-position: -20px -340px;
                                                  +	display: inline-block;
                                                  +}
                                                  +.btn_normal{
                                                  +	display: inline-block;
                                                  +	margin-top: 0px;
                                                  +}
                                                  +.btn_inline{
                                                  +	float: left;
                                                  +}
                                                  +#gradient_swap{
                                                  +	margin: 0px 5px 0px 5px;
                                                  +}
                                                  +.gradient_details{
                                                  +	margin-top: 10px;
                                                  +	float: right;
                                                  +	display: none;
                                                  +}
                                                  +#dock_line_style .linestyle{
                                                  +	margin-top: 12px;
                                                  +	margin-left: 5px;
                                                  +}
                                                  +.dock_label{
                                                  +	display: inline-block;
                                                  +	line-height: 26px;
                                                  +	float: left;
                                                  +	margin-right:5px;
                                                  +	min-width: 26px;
                                                  +	text-align: right;
                                                  +}
                                                  +.dock_page_menu{
                                                  +	z-index: 1;
                                                  +}
                                                  +
                                                  +.attr_add{
                                                  +	padding: 5px 10px 0px;
                                                  +}
                                                  +.attr_add_items{
                                                  +	display: none;
                                                  +}
                                                  +.attr_list{
                                                  +	overflow-y: auto;
                                                  +	overflow-x: hidden;
                                                  +}
                                                  +.attr_none{
                                                  +	padding: 30px 0px;
                                                  +	text-align: center;
                                                  +}
                                                  +.attr_item{
                                                  +	padding-left: 10px;
                                                  +	margin-top: 1px;
                                                  +	position: relative;
                                                  +}
                                                  +.attr_item:hover{
                                                  +	background-color: #ebebeb;
                                                  +}
                                                  +.attr_item .ico_attr_delete{
                                                  +	position: absolute;
                                                  +	right: 5px;
                                                  +	top: 4px;
                                                  +	z-index: 1;
                                                  +	cursor: pointer;
                                                  +	display: none;
                                                  +}
                                                  +.attr_item:hover .ico_attr_delete{
                                                  +	display: block;
                                                  +}
                                                  +.attr_name{
                                                  +	width: 100px;
                                                  +	white-space: nowrap;
                                                  +	overflow: hidden;
                                                  +	text-overflow: ellipsis;
                                                  +	height: 28px;
                                                  +	line-height: 28px;
                                                  +	float: left;
                                                  +}
                                                  +.attr_type{
                                                  +	width: 60px;
                                                  +	margin-left: 10px;
                                                  +	height: 28px;
                                                  +	line-height: 28px;
                                                  +	float: left;
                                                  +}
                                                  +.attr_value{
                                                  +	width: 130px;
                                                  +	white-space: nowrap;
                                                  +	overflow: hidden;
                                                  +	text-overflow: ellipsis;
                                                  +	margin-left: 10px;
                                                  +	height: 28px;
                                                  +	line-height: 28px;
                                                  +	float: left;
                                                  +}
                                                  +.attr_editing{
                                                  +	background-color: #ebebeb;
                                                  +}
                                                  +.attr_item.attr_editing .ico_attr_delete{
                                                  +	display: none;
                                                  +}
                                                  +.attr_editing .input_text, .attr_editing .input_select{
                                                  +	margin-top: 1px;
                                                  +}
                                                  +.attr_edit_display{
                                                  +	padding-top: 5px;
                                                  +}
                                                  +.attr_edit_btns{
                                                  +	clear: both;
                                                  +	padding: 5px 0px;
                                                  +	border-top: 1px solid #ccc;
                                                  +	margin-top: 5px;
                                                  +}
                                                  +.attr_edit_btns div{
                                                  +	display: inline-block;
                                                  +	width: 70px;
                                                  +}
                                                  +.attr_display_options .opt_area{
                                                  +	float: left;
                                                  +	width: 110px;
                                                  +	padding-top: 5px;
                                                  +}
                                                  +.attr_display_options .location_area{
                                                  +	margin-left: 10px;
                                                  +	width: 200px;
                                                  +}
                                                  +.location_area .dock_label{
                                                  +	width: 66px;
                                                  +	text-align: left;
                                                  +	margin-top: 5px;
                                                  +}
                                                  +.location_area .toolbar_button{
                                                  +	width: 125px;
                                                  +	margin-top: 5px;
                                                  +}
                                                  +#attr_display_icon img{
                                                  +	margin-top: 2px;
                                                  +}
                                                  +#attr_icon_list li{
                                                  +	width: 120px;
                                                  +	height: 245px;
                                                  +	background: url(../images/diagraming/data-attr-icons.png) no-repeat;
                                                  +	padding: 0px;
                                                  +	margin: 0px 5px;
                                                  +}
                                                  +#attr_icon_list div{
                                                  +	float: left;
                                                  +	width: 22px;
                                                  +	height: 21px;
                                                  +	border: 1px solid transparent;
                                                  +}
                                                  +#attr_icon_list .attr_icon_item:hover{
                                                  +	border-color: #6EB1EB;
                                                  +}
                                                  +.attr_location_menu li{
                                                  +	position: relative;
                                                  +	padding: 0px 10px 0px 30px;
                                                  +	width: 85px;
                                                  +}
                                                  +.location_content{
                                                  +	position: relative;
                                                  +	margin: 0px 13px 0px 5px;
                                                  +	padding-left: 23px;
                                                  +}
                                                  +.attr_location_menu li div, .location_content div{
                                                  +	position: absolute;
                                                  +	width: 11px;
                                                  +	height: 11px;
                                                  +	left: 10px;
                                                  +	top: 6px;
                                                  +	border: 1px solid #333;
                                                  +	background: white;
                                                  +}
                                                  +.location_content div{
                                                  +	left: 5px;
                                                  +}
                                                  +.attr_location_menu span, .location_content span{
                                                  +	display: block;
                                                  +	position: absolute;
                                                  +	width: 5px;
                                                  +	height: 5px;
                                                  +	background: #dd4b39;
                                                  +	top: 3px;
                                                  +	left: 3px;
                                                  +}
                                                  +
                                                  +.image_sources{
                                                  +	float: left;
                                                  +	padding: 15px 0px;
                                                  +}
                                                  +.image_sources li{
                                                  +	height: 30px;
                                                  +	line-height: 30px;
                                                  +	width: 160px;
                                                  +	padding-left: 16px;
                                                  +	border-left: 4px solid transparent;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.image_sources li.active{
                                                  +	border-color: #dd4b39;
                                                  +	color: #cf4236;
                                                  +	font-weight: bold;
                                                  +}
                                                  +.image_sources li:hover{
                                                  +	background: #eee;
                                                  +}
                                                  +.image_content{
                                                  +	float: left;
                                                  +	border-left: 1px solid #e5e5e5;
                                                  +}
                                                  +.image_list{
                                                  +	border-bottom: 1px solid #e5e5e5;
                                                  +	width: 600px;
                                                  +	padding: 15px 20px;
                                                  +	overflow-y: auto;
                                                  +}
                                                  +#btn_img_upload{
                                                  +	display: inline-block;
                                                  +	position: relative;
                                                  +	text-align: left;
                                                  +	padding-right: 10px;
                                                  +	float: left;
                                                  +}
                                                  +#btn_img_upload div{
                                                  +	float: left;
                                                  +	margin: 2px 0px 0px 5px;
                                                  +	background-position: -40px -380px;
                                                  +}
                                                  +#btn_img_upload input{
                                                  +	width: 100%;
                                                  +	height: 26px;
                                                  +	padding: 0px;
                                                  +	margin: 0px;
                                                  +	border: 0px;
                                                  +	left: 0px;
                                                  +	top: 0px;
                                                  +	opacity: 0;
                                                  +	filter:alpha(opacity=0);
                                                  +	position: absolute;
                                                  +}
                                                  +#upload_img_res{
                                                  +	color: #cf4236;
                                                  +	margin-left: 10px;
                                                  +	line-height: 26px;
                                                  +}
                                                  +.image_btns{
                                                  +	height: 30px;
                                                  +	padding: 15px 20px;
                                                  +}
                                                  +.image_btns div{
                                                  +	width: 60px;
                                                  +	margin-right: 5px;
                                                  +}
                                                  +#set_image_text{
                                                  +	color: #555;
                                                  +}
                                                  +#set_image_text.errored{
                                                  +	color: #cf4236;
                                                  +}
                                                  +.image_items{
                                                  +	padding: 15px 0px;
                                                  +}
                                                  +.image_item{
                                                  +	float: left;
                                                  +	width: 140px;
                                                  +	height: 140px;
                                                  +	text-align: center;
                                                  +	border-radius: 4px;
                                                  +	position: relative;
                                                  +}
                                                  +.image_item:hover{
                                                  +	background-color: #F3F3F3;
                                                  +	box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.1);
                                                  +}
                                                  +.image_item .ico{
                                                  +	position: absolute;
                                                  +	right: -10px;
                                                  +	top: -10px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.image_items img{
                                                  +	max-width: 120px;
                                                  +	max-height: 120px;
                                                  +	-webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.25);
                                                  +	-moz-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.25);
                                                  +	box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.25);
                                                  +}
                                                  +.image_item_selected, .image_item_selected:hover{
                                                  +	background-color: #63ABF7;
                                                  +	box-shadow: inset 0 2px 3px 0 rgba(0, 0, 0, 0.2);
                                                  +}
                                                  +#img_url_area{
                                                  +	padding: 20px 0px;
                                                  +	text-align: center;
                                                  +}
                                                  +#img_url_area img{
                                                  +	max-width: 600px;
                                                  +}
                                                  +.img_url_loading{
                                                  +	display: none;
                                                  +}
                                                  +.img_url_loading_tip{
                                                  +	display: block;
                                                  +	color:#666;
                                                  +	margin-top: 80px;
                                                  +}
                                                  +.img_url_error{
                                                  +	color: #cf4236;
                                                  +	margin-top: 80px;
                                                  +	text-align: left;
                                                  +}
                                                  +.img_url_error ul{
                                                  +	margin: 10px 0px 0px 30px;
                                                  +	list-style: disc;
                                                  +}
                                                  +.tip_content b{
                                                  +	color: #cf4236;
                                                  +}
                                                  +.img_gg_loading_tip{
                                                  +	color:#666;
                                                  +	line-height: 40px;
                                                  +	height: 40px;
                                                  +	text-align: center;
                                                  +}
                                                  +.gg_img_more{
                                                  +	margin: 15px auto;
                                                  +}
                                                  +#history_versions{
                                                  +	overflow-y: auto;
                                                  +	min-height: 140px;
                                                  +	position: relative;
                                                  +}
                                                  +#history_versions li{
                                                  +	border-bottom: 1px solid #ddd;
                                                  +	padding: 5px 10px;
                                                  +	cursor: default;
                                                  +	position: relative;
                                                  +}
                                                  +#history_versions li:hover{
                                                  +	background: #ebebeb;
                                                  +}
                                                  +.version_name{
                                                  +	color: #808080;
                                                  +}
                                                  +.version_name div, .history_remark{
                                                  +	padding: 2px 0px 0px;
                                                  +}
                                                  +#history_versions .selected, #history_versions .selected:hover{
                                                  +	background-color: #e6e6e6;
                                                  +}
                                                  +#history_versions .selected .version_time{
                                                  +	color: #d14836;
                                                  +	font-weight: bold;
                                                  +}
                                                  +.remark_container a{
                                                  +	display: none;
                                                  +}
                                                  +#history_versions .selected .remark_container a{
                                                  +	display: inline-block;
                                                  +}
                                                  +#history_versions .selected.playing .remark_container a{
                                                  +	display: none;
                                                  +}
                                                  +.edit_container{
                                                  +	display: none;
                                                  +}
                                                  +.edit_container textarea{
                                                  +	width: 179px;
                                                  +	height: 36px;
                                                  +}
                                                  +.edit_container a{
                                                  +	margin-top: 4px;
                                                  +}
                                                  +.history_bar{
                                                  +	padding: 10px;
                                                  +	height: 26px;
                                                  +	-webkit-box-shadow: 0 -4px 16px rgba(0,0,0,0.2);
                                                  +	-moz-box-shadow: 0 -4px 16px rgba(0,0,0,0.2);
                                                  +	box-shadow: 0 -4px 16px rgba(0,0,0,0.2);
                                                  +}
                                                  +.history_bar .toolbar_button, .history_bar .spinner{
                                                  +	display: inline-block;
                                                  +	float: left;
                                                  +}
                                                  +.history_bar .toolbar_button{
                                                  +	margin-left: 5px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.history_msg{
                                                  +	display: none;
                                                  +}
                                                  +#btn_history_restore{
                                                  +	float: right;
                                                  +}
                                                  +/*****************************colla-add-dialog********************************/
                                                  +.designer_button{
                                                  +	display: inline-block;
                                                  +	line-height:30px;
                                                  +	border: 0px;
                                                  +	height:30px;
                                                  +	padding:0px 10px;
                                                  +	text-align: center;
                                                  +	background-color: #2EB5E5;
                                                  +	background-image: -moz-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -webkit-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -o-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -ms-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#34c0e9', endColorstr='#29aae1',GradientType=0 );
                                                  +	color: white;
                                                  +	cursor: pointer;
                                                  +	text-shadow: 0 1px 0 rgba(0, 0, 0, 0.35);
                                                  +	border-radius: 2px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-o-border-radius: 2px;
                                                  +	-webkit-box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	-moz-box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	min-width: 50px;
                                                  +}
                                                  +.designer_button:hover{
                                                  +	background-color: #2EB5E5;
                                                  +	background-image: -moz-linear-gradient(top, #34c0df, #29aad7);
                                                  +	background-image: -webkit-linear-gradient(top, #34c0df, #29aad7);
                                                  +	background-image: -o-linear-gradient(top, #34c0df, #29aad7);
                                                  +	background-image: -ms-linear-gradient(top, #34c0df, #29aad7);
                                                  +	background-image: linear-gradient(top, #34c0df, #29aad7);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#34c0df', endColorstr='#29aad7',GradientType=0 );
                                                  +	text-decoration: none;
                                                  +}
                                                  +.designer_button.disabled, .designer_button.disabled:hover{
                                                  +	background-color: #48d4fd;
                                                  +	background-image: -moz-linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	background-image: -webkit-linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	background-image: -o-linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	background-image: -ms-linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	background-image: linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#48d4fd', endColorstr='#3dbeeb',GradientType=0 );
                                                  +	box-shadow:  none;
                                                  +	text-shadow: none;
                                                  +	cursor: default;
                                                  +	color: #e6e6e6;
                                                  +}
                                                  +.designer_button.normal{
                                                  +	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
                                                  +	color: #333;
                                                  +	line-height:28px;
                                                  +	height:28px;
                                                  +	border: 1px solid #c6c6c6;
                                                  +	background-color: #F8F8F8;
                                                  +	min-width: 48px;
                                                  +	background-image: -webkit-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: -moz-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: -ms-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: -o-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f8f8f8', endColorstr='#f1f1f1',GradientType=0 );
                                                  +	-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-moz-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-ms-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +}
                                                  +.designer_button.normal:hover{
                                                  +	background-color: #f3f3f3;
                                                  +	background-image: -webkit-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: -moz-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: -ms-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: -o-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f8f8f8', endColorstr='#e8e8e8',GradientType=0 );
                                                  +}
                                                  +
                                                  +#colla_suggest_box .alert{
                                                  +	margin-top: 10px;
                                                  +}
                                                  +.colla_suggest li{
                                                  +	padding: 2px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.colla_suggest li:hover{
                                                  +	background-color: #eee;
                                                  +}
                                                  +.colla_suggest li.seled{
                                                  +	background-color: #63ABF7;
                                                  +	color: white;
                                                  +}
                                                  +.colla_suggest img{
                                                  +	width: 25px;
                                                  +	height: 25px;
                                                  +	border-radius: 3px;
                                                  +	vertical-align: middle;
                                                  +	margin-right: 8px;
                                                  +}
                                                  +
                                                  +/***调整****/
                                                  +._update{
                                                  +	 -webkit-transition: all .15s ease-in-out 0.05s;
                                                  +	  -o-transition: all .15s ease-in-out 0.05s;
                                                  +	  -moz-transition: all .15s ease-in-out 0.05s;
                                                  +	  transition: all .15s ease-in-out 0.05s;
                                                  +}
                                                  +
                                                  +#colla_dialog .role_list{
                                                  +	border: 1px solid #d9d9d9;
                                                  +	padding: 1px;
                                                  +	width: 488px;
                                                  +	max-height: 130px;
                                                  +	overflow-x: hidden;
                                                  +	overflow-y: auto;
                                                  +	margin-bottom: 20px;
                                                  +	-webkit-overflow-scrolling: touch;
                                                  +}
                                                  +#colla_dialog .role_list .role_item{
                                                  +	height: 25px;
                                                  +	padding: 2px 0px;
                                                  +	overflow: hidden;
                                                  +	line-height: 25px;
                                                  +	position: relative;
                                                  +	border-top: 1px solid #f1f0f0;
                                                  +}
                                                  +#colla_dialog .role_list .role_item.top{
                                                  +	border-top: 0px;
                                                  +}
                                                  +#colla_dialog .role_list .role_item span{
                                                  +	display: inline-block;
                                                  +	position: relative;
                                                  +	line-height: 25px;
                                                  +	height: 25px;
                                                  +}
                                                  +#colla_dialog .role_list .role_item .role_photo{
                                                  +	width: 25px;
                                                  +	float: left;
                                                  +	margin-left: 5px;
                                                  +}
                                                  +#colla_dialog .role_list .role_item .role_photo img{
                                                  +	width: 25px;
                                                  +	height: 25px;
                                                  +	border: 0px;
                                                  +	display: block;
                                                  +	position: absolute;
                                                  +	top: 0px;
                                                  +	left: 0px;
                                                  +	border-radius: 3px;
                                                  +	-webkit-border-radius: 3px;
                                                  +	-moz-border-radius: 3px;
                                                  +}
                                                  +#colla_dialog .role_list .role_item .role_username{
                                                  +	text-align: left;
                                                  +	width: 410px;
                                                  +	margin-left: 10px;
                                                  +	float: left;
                                                  +}
                                                  +.role_username .inviting_{
                                                  +	display: inline-block;
                                                  +	width: 60px;
                                                  +	float: right;
                                                  +	margin-right: 50px;
                                                  +	text-align: right;
                                                  +}
                                                  +#colla_dialog ._fail{
                                                  +	color: red;
                                                  +}
                                                  +#colla_dialog .role_list .role_item .role_name{
                                                  +	width: 18px;
                                                  +	height: 18px !important;
                                                  +	line-height: 18px !important;
                                                  +	margin: 3px 0px;
                                                  +	cursor: pointer;
                                                  +	margin: 3px 0px 3px 10px;
                                                  +	display: none;
                                                  +	opacity: 0.9;
                                                  +	filter: alpha(opacity=90);
                                                  +	background: url(../images/diagraming/sprite.png?5) no-repeat;
                                                  +	background-position: -1px -381px;
                                                  +	float: left;
                                                  +}
                                                  +#colla_dialog .role_list .role_item:hover .role_name{
                                                  +	display: inline-block;
                                                  +}
                                                  +#colla_dialog .role_list .role_item:hover .role_name:hover{
                                                  +	background-position: -21px -381px;
                                                  +}
                                                  +.role_username .given_role{
                                                  +	width: 66px;
                                                  +	float: right;
                                                  +	margin-right: 20px;
                                                  +	text-align: left;
                                                  +}
                                                  +.select_add_role{
                                                  +	margin-bottom: 10px;
                                                  +}
                                                  +.given_role select{
                                                  +	margin: 3px 0px;
                                                  +	line-height: 18px !important;
                                                  +	height: 18px !important;
                                                  +	width: 66px;
                                                  +	position: absolute;
                                                  +	top: 0px;
                                                  +	left: 0px;
                                                  +}
                                                  +.given_role select option{
                                                  +	line-height: 18px !important;
                                                  +	height: 18px !important;
                                                  +}
                                                  +.given_role .change_success{
                                                  +	position: absolute;
                                                  +	top: 0px;
                                                  +	left: 0px;
                                                  +	margin: 3px 0px;
                                                  +	height: 18px !important;
                                                  +	width: 40px;
                                                  +	line-height: 18px !important;
                                                  +	text-align: center;
                                                  +	color: #fff;
                                                  +	font-weight: bolder;
                                                  +	text-shadow: 0 1px 0 rgba(0, 0, 0, 0.35);
                                                  +	font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
                                                  +	font-size: 12px;
                                                  +	background: #63ABF7;
                                                  +	border-radius: 3px 0px 0px 3px;
                                                  +	-webkit-border-radius: 3px 0px 0px 3px;
                                                  +	-moz-border-radius: 3px 0px 0px 3px;
                                                  +}
                                                  +#input_add_colla{
                                                  +	width: 480px; padding: 4px 5px;border-radius: 0px;-webkit-border-radius: 0px;-moz-border-radius: 0px;
                                                  +	margin-bottom: 10px;
                                                  +}
                                                  +#colla_suggest_box{
                                                  +	background: url("../images/network/man2.png") center center no-repeat;
                                                  +	background-size: 90px 90px;
                                                  +	height: 130px;
                                                  +	width: 486px;
                                                  +	padding: 2px;
                                                  +	border: 1px solid #d9d9d9;
                                                  +	overflow: auto;
                                                  +}
                                                  +.new_invitation_container .badge{
                                                  +	padding: 2px 6px;margin-right: 5px;
                                                  +}
                                                  +.add_new_button .designer_button{
                                                  +	height: 25px;line-height: 25px;margin-bottom: 15px;
                                                  +}
                                                  +#confirm_dlg{
                                                  +	display: none;
                                                  +	position: absolute;
                                                  +	background: #fff;
                                                  +	z-index: 999;
                                                  +	overflow: hidden;
                                                  +	border: 1px solid #acacac;
                                                  +	width: 50px;
                                                  +	height: 25px;
                                                  +	opacity: 0;
                                                  +	filter: alpha(opacity=0);
                                                  +	 -webkit-transition: all .15s ease-in-out 0.05s;
                                                  +	  -o-transition: all .15s ease-in-out 0.05s;
                                                  +	  -moz-transition: all .15s ease-in-out 0.05s;
                                                  +	  transition: all .15s ease-in-out 0.05s;
                                                  +}
                                                  +#confirm_dlg.newSize{
                                                  +	width: 270px;
                                                  +	height: 102px;
                                                  +	opacity: 1;
                                                  +	filter: alpha(opacity=100);
                                                  +	-webkit-box-shadow: 0 0px 30px 0 rgba(0, 0, 0, 0.3);
                                                  +	-moz-box-shadow: 0 0px 30px 0 rgba(0, 0, 0, 0.3);
                                                  +	box-shadow: 0 0px 30px 0 rgba(0, 0, 0, 0.3);
                                                  +}
                                                  +#confirm_dlg .confirm_header{
                                                  +	height: 30px;
                                                  +	padding: 0px 10px;
                                                  +	font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
                                                  +	line-height: 30px;
                                                  +	font-size: 15px;
                                                  +	border-bottom: 1px solid #e5e5e5;
                                                  +}
                                                  +#confirm_dlg .confirm_content{
                                                  +	text-align: center;
                                                  +	margin: 10px;
                                                  +	margin-bottom: 5px;
                                                  +}
                                                  +#confirm_dlg .confirm_content p{
                                                  +	padding: 0px;margin: 0px;
                                                  +}
                                                  +#confirm_dlg .confirm_content .designer_button{
                                                  +	float: right;height: 25px;line-height: 25px;width: 50px;margin:auto;margin-top: 10px;display: block;
                                                  +}
                                                  +/*****************************colla-add-dialog********end************************/
                                                  +
                                                  +#hotkey_list{
                                                  +	width: auto;
                                                  +}
                                                  +#hotkey_list .dialog_content{
                                                  +	padding:0px;
                                                  +	max-height: 500px;
                                                  +	overflow:auto;
                                                  +	margin-bottom: 65px;
                                                  +}
                                                  +#hotkey_list .hotkey_content{
                                                  +	margin: 0px;
                                                  +	padding: 20px;
                                                  +}
                                                  +.hotkey_content span{
                                                  +	padding: 0px;
                                                  +	margin: 0px;
                                                  +	display: inline-block;
                                                  +	padding: 4px 8px;
                                                  +	text-align: left;
                                                  +}
                                                  +.hotkey_content .hotkey_line{
                                                  +	display: block;
                                                  +	min-width: 663px;
                                                  +	border-bottom: #f3f2f2 solid 1px;
                                                  +}
                                                  +.hotkey_content .hotkey_line.null_line{
                                                  +	border-bottom: 0;
                                                  +}
                                                  +.hotkey_content .hotkey_line.hotkey_group{
                                                  +	font-size: 14px;
                                                  +	font-weight: bold;
                                                  +}
                                                  +.hotkey_content .hotkey_line .hotkey{
                                                  +	width: 160px;
                                                  +	margin-right: 20px;
                                                  +}
                                                  +#hotkey_list .hotkey_ok{
                                                  +	position: absolute;
                                                  +	right: 20px;
                                                  +	bottom: 20px;
                                                  +	line-height:25px;
                                                  +	height:25px;
                                                  +}
                                                  +
                                                  +#send_feedback .feedback_lebal{
                                                  +	display: block;
                                                  +	width: 490px;
                                                  +	text-align: left;
                                                  +}
                                                  +.feedback_error_email_format{
                                                  +	display: none;
                                                  +	color: #cf4236;
                                                  +	margin-left: 20px;
                                                  +}
                                                  +.feedback_error_msg{
                                                  +	display: none;
                                                  +	color: #cf4236;
                                                  +	margin-left: 20px;
                                                  +}
                                                  +
                                                  +#chattingbox{
                                                  + 	display: none;
                                                  +	bottom: 35px;
                                                  +	left: 260px;
                                                  +	width: 260px;
                                                  +	position: absolute;
                                                  +	background: #f5f5f5;
                                                  +	border-width: 1px 1px 0px 0px;
                                                  +	border-style: solid;
                                                  +	border-color: #999;
                                                  +}
                                                  +.chatting_icon{
                                                  +	position:absolute;
                                                  +	top:2px;
                                                  +	display:block;
                                                  +	width: 12px;
                                                  +	height: 12px;
                                                  +	cursor: pointer;
                                                  +	background: url(../images/diagraming/sprite.png?5) -44px -564px no-repeat;
                                                  +	border: 1px solid transparent;
                                                  +	border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	right:5px;
                                                  +}
                                                  +.chatting_icon:hover{
                                                  +	background-color: #878787;
                                                  +	border-color: #737373;
                                                  +}
                                                  +#chat_messages{
                                                  +	height: 200px;
                                                  +	overflow: auto;
                                                  +	padding: 5px 10px;
                                                  +}
                                                  +#chat_messages li{
                                                  +	padding: 2px 0px;
                                                  +}
                                                  +#chat_messages li span{
                                                  +	color: #4183C4;
                                                  +}
                                                  +.chatting_bottom{
                                                  +	text-align: right;
                                                  +	padding: 5px 10px 10px;
                                                  +}
                                                  +.chatting_bottom .designer_button{
                                                  +	height: 24px;
                                                  +	line-height: 24px;
                                                  +	margin-top: 3px;
                                                  +	margin-right: 0px;
                                                  +}
                                                  +#chat_prompt{
                                                  +	background: #e43a3c;
                                                  +	padding: 0px 5px;
                                                  +	height: 18px;
                                                  +	position: absolute;
                                                  +	right: -8px;
                                                  +	top: -9px;
                                                  +	color: white;
                                                  +	line-height: 18px;
                                                  +	border-radius: 9px;
                                                  +	text-align: center;
                                                  +	font-size: 12px;
                                                  +	box-shadow: 0px 0px 3px rgba(0,0,0,0.6);
                                                  +	display: none;
                                                  +}
                                                  +#designer_contextmenu{
                                                  +	cursor: default;
                                                  +}
                                                  +#designer_footer{
                                                  +	position: fixed;
                                                  +	left: 0px;
                                                  +	bottom: 0px;
                                                  +	width: 100%;
                                                  +	height: 34px;
                                                  +	background: #f3f3f3;
                                                  +	border-top: 1px solid #aaaaaa;
                                                  +}
                                                  +.footer_content{
                                                  +	position: relative;
                                                  +}
                                                  +.footer_content .left_box{
                                                  +	width: 162px;
                                                  +	border-right: 1px solid #A2A2A2;
                                                  +	height: 34px;
                                                  +	text-align: center;
                                                  +	position: absolute;
                                                  +	left: 0px;
                                                  +	top: 0px;
                                                  +}
                                                  +.left_box div{
                                                  +	line-height: 24px;
                                                  +	height: 24px;
                                                  +	margin-top: 4px;
                                                  +	width: 80px;
                                                  +}
                                                  +.footer_content .content_box{
                                                  +	margin-left: 163px;
                                                  +	height: 34px;
                                                  +	line-height: 34px;
                                                  +	padding-left: 5px;
                                                  +	color: #525252;
                                                  +}
                                                  +.footer_left .toolbar_button{
                                                  +	display: inline-block;
                                                  +	float: left;
                                                  +	margin-left: 5px;
                                                  +	padding: 0px 10px 0px 3px;
                                                  +	margin-top: 4px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.footer_devider{
                                                  +	float: left;
                                                  +	border-left: 1px solid #aaa;
                                                  +	border-right: 1px solid #FFF;
                                                  +	height: 26px;
                                                  +	margin: 4px 5px 0px 10px;
                                                  +}
                                                  +#collaborators{
                                                  +	display: inline-block;
                                                  +	float: left;
                                                  +	height: 24px;
                                                  +	margin-top: 5px;
                                                  +}
                                                  +#collaborators img{
                                                  +	float: left;
                                                  +	height: 24px;
                                                  +	width: 24px;
                                                  +	margin-left: 5px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-ms-border-radius: 2px;
                                                  +	border-radius: 2px;
                                                  +}
                                                  +.footer_right{
                                                  +	position: absolute;
                                                  +	right: 0px;
                                                  +	top: 0px;
                                                  +}
                                                  +.footer_right li{
                                                  +	float: left;
                                                  +	cursor: pointer;
                                                  +	font-weight: bold;
                                                  +	border-left: 1px solid #aaa;
                                                  +}
                                                  +.footer_right li a{
                                                  +	padding: 0px 12px;
                                                  +	display: block;
                                                  +	color: #525252;
                                                  +}
                                                  +.footer_right li a:hover{
                                                  +	color: #29AAE1;
                                                  +	text-decoration: none;
                                                  +}
                                                  +.footer_right .footer_fb{
                                                  +	padding: 0px 12px;
                                                  +	color: #fff;
                                                  +	background-color: #555;
                                                  +	border-left: 0px;
                                                  +}
                                                  +.footer_fb:hover{
                                                  +	color: #fff;
                                                  +	background-color: #2EB5E5;
                                                  +	background-image: -moz-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -webkit-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -o-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -ms-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: linear-gradient(top, #34C0E9, #29AAE1);
                                                  +}
                                                  +.footer_chrome{
                                                  +	display: none;
                                                  +}
                                                  +.footer_right li span{
                                                  +	display: inline-block;
                                                  +	margin-top: 7px;
                                                  +	float: left;
                                                  +	margin-right: 5px;
                                                  +	opacity: 1;
                                                  +}
                                                  +#shapes_dialog .dialog_header{
                                                  +	border-color: #ccc;
                                                  +}
                                                  +#shape_manage_list li{
                                                  +	background: #F3F3F3;
                                                  +	border-top: #fff solid 1px;
                                                  +	border-bottom: #ccc solid 1px;
                                                  +	cursor: default;
                                                  +}
                                                  +#shape_manage_list li div{
                                                  +	border-left: 4px solid transparent;
                                                  +	padding: 5px 10px 5px 20px;
                                                  +}
                                                  +#shape_manage_list li:hover div{
                                                  +	border-left-color: #dd4b39;
                                                  +}
                                                  +#shape_manage_list li.child{
                                                  +	background: #fafafa;
                                                  +}
                                                  +#shape_manage_list li.child div{
                                                  +	padding-left: 50px;
                                                  +}
                                                  +#shape_manage_list input{
                                                  +	float: left;
                                                  +}
                                                  +
                                                  +.share_container{
                                                  +	position: absolute;
                                                  +	right: 20px;
                                                  +	top: 20px;
                                                  +	height: 30px;
                                                  +	z-index: 0;
                                                  +}
                                                  +.share_container .user{
                                                  +	text-shadow: 0 1px 0 #FFF;
                                                  +	color: #525252;
                                                  +	font-weight: bold;
                                                  +	line-height: 30px;
                                                  +	float: left;
                                                  +	position: relative;
                                                  +	padding-right: 10px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.share_container .user img{
                                                  +	width: 30px;
                                                  +	height: 30px;
                                                  +	float: left;
                                                  +	border-radius: 50%;
                                                  +	box-shadow: 0px 0px 3px rgba(0,0,0,0.3);
                                                  +	float: left;
                                                  +	margin-right: 5px;
                                                  +}
                                                  +.share_container .user .ico{
                                                  +	position: absolute;
                                                  +	right: 0px;
                                                  +	top: 12px;
                                                  +}
                                                  +.share_container .designer_button{
                                                  +	position: relative;
                                                  +}
                                                  +.header_right_btn{
                                                  +	float: left;
                                                  +	height: 30px;
                                                  +	border-right: 1px solid #cbcccc;
                                                  +	margin-right: 10px;
                                                  +}
                                                  +.header_right_btn .toolbar_button{
                                                  +	float: left;
                                                  +	padding: 2px;
                                                  +	margin-right: 10px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +#bar_list_pagesize .lbl, #page_size_list .lbl{
                                                  +	display: inline-block;
                                                  +	width: 20px;
                                                  +}
                                                  +#bar_list_pagesize .spinner, #page_size_list .spinner{
                                                  +	display: inline-block;
                                                  +}
                                                  +.ico_dock_performance{
                                                  +	background:url(../images/performance.png) no-repeat;
                                                  +	height:20px;
                                                  +	width:20px;
                                                  +	margin:2px;
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/diagrams/style.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/diagrams/style.css
                                                  new file mode 100644
                                                  index 00000000..ce5811de
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/diagrams/style.css
                                                  @@ -0,0 +1,812 @@
                                                  +@CHARSET "UTF-8";
                                                  +
                                                  +body{
                                                  +	overflow: hidden;
                                                  +}
                                                  +::-webkit-scrollbar
                                                  +{
                                                  +    width: 12px;
                                                  +    height: 12px;
                                                  +}
                                                  +::-webkit-scrollbar-track-piece
                                                  +{
                                                  +    width: 11px;
                                                  +	height: 11px;
                                                  +}
                                                  +::-webkit-scrollbar-thumb
                                                  +{
                                                  +    border-width: 2 2px;
                                                  +	border-style: solid;
                                                  +	border-color: #fff;
                                                  +	border-radius: 6px;
                                                  +	background: #d7d7d7;
                                                  +}
                                                  +::-webkit-scrollbar-thumb:hover
                                                  +{
                                                  +	background: #C3C3C3;
                                                  +}
                                                  +#header{
                                                  +	-moz-box-shadow: 0 0 5px rgba(0,0,0,0.5);
                                                  +	-o-box-shadow: 0 0 5px rgba(0,0,0,0.5);
                                                  +	-ms-box-shadow: 0 0 5px rgba(0,0,0,0.5);
                                                  +	box-shadow: 0 0 5px rgba(0,0,0,0.5);
                                                  +}
                                                  +#header_nav{
                                                  +	width: auto;
                                                  +	margin-left: 10px;
                                                  +	margin-right: 10px;
                                                  +}
                                                  +.ico{
                                                  +	background: url(../images/diagrams/icons.png) no-repeat;
                                                  +	display: inline-block;
                                                  +}
                                                  +.ico.folder{
                                                  +	background-position: 0px 0px;
                                                  +	width: 24px; height: 22px;
                                                  +}
                                                  +.ico.folder_like{
                                                  +	background-position: 0px -21px;
                                                  +	width: 24px; height: 22px;
                                                  +}
                                                  +.ico.attach{
                                                  +	background-position: -28px 0px;
                                                  +	width: 24px; height: 22px;
                                                  +}
                                                  +.ico.trash{
                                                  +	background-position: 0px -43px;
                                                  +	width: 24px; height: 22px;
                                                  +}
                                                  +.ico.folder_list{
                                                  +	background-position: -28px -21px;
                                                  +	width: 24px; height: 22px;
                                                  +}
                                                  +.ico.diagram{
                                                  +	background-position: -28px -43px;
                                                  +	width: 24px; height: 22px;
                                                  +}
                                                  +.ico.bt{
                                                  +	width: 18px; height: 18px;
                                                  +	float:left; margin: 4px 5px 0px 0px;
                                                  +}
                                                  +.ico.delete{
                                                  +	background-position: -55px 0px;
                                                  +}
                                                  +.ico.publish{
                                                  +	background-position: 0px -130px;
                                                  +}
                                                  +.ico.view{
                                                  +	background-position: -55px -22px;
                                                  +}
                                                  +.ico.clear_trash{
                                                  +	background-position: -55px -44px;
                                                  +}
                                                  +.ico.restore{
                                                  +	background-position: -79px 0px;
                                                  +}
                                                  +.ico.download{
                                                  +	background-position: -79px -22px;
                                                  +	width: 19px;
                                                  +}
                                                  +.ico.folder_add{
                                                  +	background-position: -79px -43px;
                                                  +}
                                                  +.ico.dm_add{
                                                  +	background-position: -103px -44px;
                                                  +}
                                                  +.ico.import{
                                                  +	background-position: -105px -22px;
                                                  +	width: 19px;
                                                  +}
                                                  +.ico.importing{
                                                  +	background: url("/images/icon/upload_loading.gif") no-repeat;
                                                  +	margin-top: 6px;
                                                  +}
                                                  +.ico.collaborated{
                                                  +	background-position: -103px -64px;
                                                  +	width: 15px;
                                                  +	height: 22px;
                                                  +}
                                                  +.ico.teams{
                                                  +	background-position: -83px -86px;
                                                  +	width: 16px;
                                                  +	height: 22px;
                                                  +}
                                                  +.ico.edit{
                                                  +	background-position: -104px 0px;
                                                  +}
                                                  +/***************Layout Styles*******************/
                                                  +.layout_container{
                                                  +	position: relative;
                                                  +}
                                                  +.bench_layout{
                                                  +	height: 1000px;
                                                  +}
                                                  +.layout_left{
                                                  +	width: 199px;
                                                  +	border-right: 1px solid #C6C8CC;
                                                  +	background: #F0F0F0 url(../images/diagrams/left_bg.jpg) right top repeat-y;
                                                  +	position: absolute;
                                                  +}
                                                  +.layout_main{
                                                  +	background: #FFF;
                                                  +	margin-left: 200px;
                                                  +}
                                                  +.content_container{
                                                  +	position: relative;
                                                  +}
                                                  +.content_layout{
                                                  +	overflow: auto;
                                                  +}
                                                  +.content_main{
                                                  +	margin-right: 240px;
                                                  +	padding-left: 20px;
                                                  +}
                                                  +.content_right{
                                                  +	position: absolute;
                                                  +	width: 219px;
                                                  +	border-left: 1px solid #C6C8CC;
                                                  +	background: url(../images/diagrams/right_bg.png) repeat-y;
                                                  +	padding: 0px 10px;
                                                  +	right: 0px;
                                                  +	top: 0px;
                                                  +}
                                                  +/**************Left Styles**********************/
                                                  +.layout_left h2{
                                                  +	text-align: center;
                                                  +	text-shadow: 1px 1px 1px #FFF;
                                                  +	color: #666;
                                                  +}
                                                  +.left_nav{
                                                  +	margin-top: 10px;
                                                  +}
                                                  +.left_nav .separator{
                                                  +	margin: 5px auto;
                                                  +	width: 160px;
                                                  +	border-top: #DCE1E6 1px solid;
                                                  +	border-bottom: #F7F9FB 1px solid;
                                                  +	height: 0px;
                                                  +}
                                                  +.left_nav div{
                                                  +	cursor: pointer;
                                                  +	height: 33px;
                                                  +	line-height: 33px;
                                                  +	padding-left: 25px;
                                                  +	font-weight: bold;
                                                  +}
                                                  +.left_nav .child{
                                                  +	padding-left: 40px;
                                                  +	font-weight: normal;
                                                  +}
                                                  +.left_nav div:hover{
                                                  +	background: url(../images/diagrams/hover_on.png) right 0px no-repeat;
                                                  +}
                                                  +.left_nav div.active{
                                                  +	background: url(../images/diagrams/hover_on.png) right -33px no-repeat;
                                                  +}
                                                  +.left_nav div.active:hover{
                                                  +	background: url(../images/diagrams/hover_on.png) right -33px no-repeat;
                                                  +}
                                                  +.left_nav .ico{
                                                  +	display: inline-block;
                                                  +	float: left;
                                                  +	margin: 6px 5px 5px 0px;
                                                  +}
                                                  +
                                                  +/**************Main Layout Styles**********************/
                                                  +.layout_main{
                                                  +	background: #FFF;
                                                  +	overflow-x: auto;
                                                  +	overflow-y: hidden;
                                                  +}
                                                  +.dir{
                                                  +	background: #F7F7F7;
                                                  +	border-bottom: 1px solid #E5E5E5;
                                                  +	height: 38px;
                                                  +	line-height: 38px;
                                                  +	padding: 0px 20px;
                                                  +}
                                                  +.dir a:last-child{
                                                  +	color: #888;
                                                  +}
                                                  +.dir span{
                                                  +	color: #888;
                                                  +}
                                                  +.dir .split{
                                                  +	color: #A6A6A6;
                                                  +	display: inline-block;
                                                  +	padding: 0px 5px;
                                                  +}
                                                  +.main_btns{
                                                  +	height: 30px;
                                                  +	padding: 12px 20px 15px 0px;
                                                  +	margin-left: 20px;
                                                  +	background: url(../images/diagrams/content_bg.png) left bottom  repeat-x;
                                                  +}
                                                  +.main_btns .button, .main_btns .btn_group{
                                                  +	margin-right: 5px;
                                                  +	font-weight: normal;
                                                  +}
                                                  +.main_btns .right{
                                                  +	float: right;
                                                  +}
                                                  +.main_btns .right li{
                                                  +	float: left;
                                                  +}
                                                  +.viewtype{
                                                  +	float: right;
                                                  +	width:80px;
                                                  +	height:30px;
                                                  +	display: inline-block;
                                                  +	margin-left: 3px;
                                                  +}
                                                  +.viewtype span{
                                                  +	overflow: hidden;
                                                  +	display:block;
                                                  +	float:left;
                                                  +	cursor:pointer;
                                                  +	width:40px;height:30px;
                                                  +	background:url(../images/diagrams/icons.png) no-repeat;
                                                  +}
                                                  +.viewtype .list{
                                                  +	background-position: 0px -66px;
                                                  +}
                                                  +.viewtype .icon{
                                                  +	background-position: -40px -66px;
                                                  +}
                                                  +.viewtype .list.current{
                                                  +	background-position: 0px -96px;
                                                  +}
                                                  +.viewtype .icon.current{
                                                  +	background-position: -40px -96px;
                                                  +}
                                                  +.btn_operation, .btn_publish{
                                                  +	display: none;
                                                  +}
                                                  +.private-link{
                                                  +	padding:0px 5px;margin:5px 0px;border:1px solid #ddd;height:26px;line-height:26px;
                                                  +	display:none;
                                                  +	position: relative;
                                                  +}
                                                  +.private-link input{
                                                  +	border:0px;width:95%;
                                                  +	color:#4183C4;
                                                  +	height:26px;line-height:26px;
                                                  +}
                                                  +.publish_opt_link{
                                                  +	line-height:24px;display:none;
                                                  +}
                                                  +.private-link-selected{
                                                  +	box-shadow:0 0 2px #ddd inset;
                                                  +	-moz-box-shadow:0 0 2px #ddd inset;
                                                  +	-ms-box-shadow:0 0 2px #ddd inset;
                                                  +	-o-box-shadow:0 0 2px #ddd inset;
                                                  +	
                                                  +}
                                                  +/***************** Items **********************/
                                                  +.item_list{
                                                  +}
                                                  +.item_list .file_item:hover{
                                                  +	background-color: #F3F3F3;
                                                  +}
                                                  +.item_list .selected{
                                                  +	background-color: #63ABF7;
                                                  +	color: #FFF;
                                                  +}
                                                  +.item_list .selected a{
                                                  +	color: #FFF;
                                                  +}
                                                  +.item_list .selected:hover{
                                                  +	background-color: #63ABF7;
                                                  +	box-shadow: none;
                                                  +}
                                                  +.folder_list, .diagram{
                                                  +	margin: 9px 5px 0px 0px;
                                                  +	float: left;
                                                  +}
                                                  +.item_list .list_item, .header{
                                                  +	border-bottom: 1px solid #EBEBEB;
                                                  +	height: 40px;
                                                  +	padding-left: 10px;
                                                  +}
                                                  +.item_list li.header{
                                                  +	font-weight: bold;
                                                  +	color: #555;
                                                  +}
                                                  +.item_list li.header:hover{
                                                  +	background-color: transparent;
                                                  +}
                                                  +.item_list .list_item div, .item_list .header div{
                                                  +	line-height: 40px;
                                                  +	float:left;
                                                  +	overflow: hidden;
                                                  +	text-overflow: ellipsis;
                                                  +	white-space: nowrap;
                                                  +}
                                                  +.item_list .title{
                                                  +	width: 60%;
                                                  +	overflow: hidden;
                                                  +	text-overflow: ellipsis;
                                                  +	white-space: nowrap;
                                                  +}
                                                  +.item_list .owner{
                                                  +	width: 20%;
                                                  +}
                                                  +.item_list .modified{
                                                  +	width: 20%;
                                                  +}
                                                  +.icon_item{
                                                  +	float: left;
                                                  +	margin: 10px 10px 0px 0px;
                                                  +	padding: 10px;
                                                  +	border-radius: 5px;
                                                  +}
                                                  +.icon_item:hover{
                                                  +	box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.1);
                                                  +}
                                                  +.icon_item .thumb{
                                                  +	border: 1px solid #D7D7D7;
                                                  +	background-color: #FFF;
                                                  +	position:  relative;
                                                  +}
                                                  +.icon_item .thumb img{
                                                  +	width: 198px;
                                                  +	height: 198px;
                                                  +}
                                                  +.icon_item .thumb_folder{
                                                  +	border-color: transparent;
                                                  +	background-color: transparent;
                                                  +}
                                                  +.icon_item .title{
                                                  +	margin-top: 10px;
                                                  +	text-align: center;
                                                  +	width: 100%;
                                                  +}
                                                  +#sort_menu li, #coll_role_menu li{
                                                  +	padding-left: 5px;
                                                  +}
                                                  +#sort_menu span, #coll_role_menu span{
                                                  +	display: inline-block;
                                                  +	float:left;
                                                  +	width: 24px;
                                                  +	height: 24px;
                                                  +	vertical-align: middle;
                                                  +}
                                                  +.popmenu .selected{
                                                  +	background: transparent url(../images/common.png) -5px -302px no-repeat;
                                                  +}
                                                  +#more_menu_chart a{
                                                  +	display: block;
                                                  +}
                                                  +.items_clear{
                                                  +	display: block;
                                                  +	clear: both;
                                                  +	border-top: 30px solid #FFF;
                                                  +	border-bottom: 30px solid #FFF;
                                                  +	text-align: center;
                                                  +}
                                                  +.publiced{
                                                  +	padding: 2px 4px;
                                                  +	font-size: 10px;
                                                  +	line-height: 10px;
                                                  +	color: #FFF;
                                                  +	background-color: #8FCA15;
                                                  +	-webkit-text-size-adjust:none;
                                                  +}
                                                  +.icon_item .publiced{
                                                  +	position: absolute;
                                                  +	right: 1px;
                                                  +	bottom: 1px;
                                                  +}
                                                  +.list_item .publiced{
                                                  +	left: 20px;
                                                  +	bottom: 1px;
                                                  +}
                                                  +/************************** Preview Items******************/
                                                  +.preview .thumb{
                                                  +	width: 180px;
                                                  +	height: 180px;
                                                  +	margin: 10px auto;
                                                  +	border: 1px solid #C6C8CC;
                                                  +}
                                                  +.preview .thumb img{
                                                  +	width: 180px;
                                                  +	height: 180px;
                                                  +}
                                                  +.preview .split{
                                                  +	margin: 10px auto 0px;
                                                  +	border-top: #EBEBEB 1px solid;
                                                  +	height: 0px;
                                                  +}
                                                  +.pre-box{
                                                  +	color: #666;	
                                                  +	border-bottom: 1px solid #E5E5E5;
                                                  +	padding: 10px 0px;
                                                  +}
                                                  +.pre-box h3{
                                                  +	margin: 0px 0px 5px;	
                                                  +}
                                                  +.pre-box ul{
                                                  +	line-height:20px;padding-left:5px;
                                                  +}
                                                  +.pre-box ul li span{
                                                  +	color:#333;
                                                  +}
                                                  +#colla_items{
                                                  +	border-bottom: 0px;padding: 10px 0px;
                                                  +}
                                                  +.sharing_view{
                                                  +	padding:5px 0px 5px 5px; 
                                                  +	position: relative;
                                                  +	cursor: default;
                                                  +	margin-top: 1px;
                                                  +}
                                                  +.colla_item:hover{
                                                  +	background-color: #E5E5E5;
                                                  +}
                                                  +.sharing_view .user{
                                                  +	float:left; margin-left:5px; width: 162px;
                                                  +}
                                                  +.sharing_view .user .row{
                                                  +	display: block; line-height: 15px;
                                                  +}
                                                  +.sharing_view .user .rowspan{
                                                  +	line-height: 30px;
                                                  +}
                                                  +.sharing_view .role{
                                                  +	color: #888;
                                                  +}
                                                  +.sharing_view img{
                                                  +	width:30px;height:30px;vertical-align: middle;float:left;
                                                  +	border-radius: 5px;
                                                  +}
                                                  +.colla_selected{
                                                  +	background-color: #63ABF7;
                                                  +	color: white;
                                                  +}
                                                  +.colla_selected .role{
                                                  +	color: white;
                                                  +}
                                                  +.colla_selected:hover{
                                                  +	background-color: #63ABF7;
                                                  +}
                                                  +.user_status{
                                                  +	display: inline-block; width: 8px; height: 8px;
                                                  +	background: #7B9726; border-radius: 4px;
                                                  +}
                                                  +.user_offline{
                                                  +	background: #999;
                                                  +}
                                                  +.sharing_split{
                                                  +	border-bottom: 1px dashed #d7d7d7;
                                                  +	padding-bottom:5px;
                                                  +	font-weight: bold;
                                                  +	margin: 5px 0px;
                                                  +}
                                                  +.colla_btns{
                                                  +	margin-bottom: 5px;
                                                  +}
                                                  +.colla_btns .button, #delete_colla_confirm .button{
                                                  +	min-width: 10px;
                                                  +	line-height: 22px;
                                                  +	padding: 0px 8px;
                                                  +}
                                                  +#delete_colla_confirm .button{
                                                  +	min-width: 40px;
                                                  +}
                                                  +.colla_item_btn{
                                                  +	display: none;
                                                  +}
                                                  +.empty_tip{
                                                  +	padding-top:135px;
                                                  +	text-align:center;font-weight:bold;font-size:16px;color:#555;
                                                  +	background:url(../images/diagrams/folder_empty.png) center top no-repeat;
                                                  +}
                                                  +.empty_tip.trash{
                                                  +	background:url(../images/diagrams/trash_empty.png) center top no-repeat;
                                                  +}
                                                  +.empty_tip.fav{
                                                  +	background:url(../images/diagrams/fav_empty.png) center top no-repeat;
                                                  +}
                                                  +.empty_tip div{
                                                  +	width:320px;margin:0px auto;
                                                  +	text-align:left;font-weight:normal;font-size:13px;color:#666;
                                                  +}
                                                  +
                                                  +.dlg_content{
                                                  +	text-align:center;
                                                  +	border: 1px solid #D9D9D9;
                                                  +	padding:10px;
                                                  +	margin-top: 20px;
                                                  +}
                                                  +.dlg_buttons{
                                                  +	text-align: right;
                                                  +	margin-top: 12px;
                                                  +}
                                                  +
                                                  +#folderlist_panel{
                                                  +	padding: 5px 0px;
                                                  +}
                                                  +#folderlist_panel ul li{
                                                  +	padding-left:20px;
                                                  +}
                                                  +#folderlist_panel ul li span{
                                                  +	display:block;
                                                  +	padding:5px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +#folderlist_panel ul li span:hover{
                                                  +	color: white;
                                                  +	background-color:#4183C4;
                                                  +	background-image: -moz-linear-gradient(top, #08C, #0077B3);
                                                  +	background-image: -webkit-linear-gradient(top, #08C, #0077B3);
                                                  +	background-image: -o-linear-gradient(top, #08C, #0077B3);
                                                  +	background-image: linear-gradient(to bottom, #08C, #0077B3);
                                                  +	background-repeat: repeat-x;
                                                  +}
                                                  +.folder_tree_icon{
                                                  +	width:16px;
                                                  +	height:16px;
                                                  +	margin-right:5px;
                                                  +	vertical-align: text-top;
                                                  +}
                                                  +#file_tab_attr ul{
                                                  +	float: left;
                                                  +	width: 270px;
                                                  +	text-align: left;
                                                  +}
                                                  +#file_tab_attr li{
                                                  +	padding: 3px 0px;
                                                  +}
                                                  +#file_tab_attr span {
                                                  +	display: inline-block;
                                                  +	width: 80px;
                                                  +	text-align: right;
                                                  +	margin-right: 10px;
                                                  +}
                                                  +#file_tab_attr input {
                                                  +	width: 150px;
                                                  +}
                                                  +#file_tab_attr select {
                                                  +	width: 160px;
                                                  +}
                                                  +/* dialog_publish ********************/
                                                  +.publish_split{
                                                  +	margin: 5px 0px; height: 1px; background: #E5E5E5;
                                                  +}
                                                  +._title{
                                                  +	font-weight: bold;
                                                  +	display: inline-block;
                                                  +	text-align: left;
                                                  +	margin-right: 5px;
                                                  +	width: 75px;
                                                  +}
                                                  +.feedTags{
                                                  +	border: 1px solid #D9D9D9;
                                                  +	border-top: 1px solid silver;
                                                  +	padding: 5px;
                                                  +	height: 50px;
                                                  +	overflow-y: auto;
                                                  +	border-radius: 2px;
                                                  +	width: 230px;
                                                  +	margin-top: 5px;
                                                  +}
                                                  +.feedTags:hover{
                                                  +	border: 1px solid #B8B8B8;
                                                  +	border-top: 1px solid #A1A1A1;
                                                  +}
                                                  +#tag_input {
                                                  +	width: 190px;
                                                  +	height:18px;
                                                  +	margin:0;
                                                  +	padding:0;
                                                  +	line-height:18px;
                                                  +	border:0 none;
                                                  +}
                                                  +.tagitem {
                                                  +	position:relative;
                                                  +	display: inline-block;
                                                  +	margin: 0px 5px 5px 0;
                                                  +	border: 1px solid #D9D9D9;
                                                  +	padding-left:5px;
                                                  +	border-radius: 2px;
                                                  +	box-shadow: 0px 0px 3px #E5E5E5;
                                                  +	font-size:12px;
                                                  +	height:25px;
                                                  +	line-height:25px;
                                                  +	white-space:nowrap;
                                                  +	cursor:default;
                                                  +	text-align:center;
                                                  +}
                                                  +.close-tag {
                                                  +	background: transparent url(../images/common.png) 0px -95px no-repeat;
                                                  +	float:right;
                                                  +	height:16px;
                                                  +	width:16px;
                                                  +	margin-left:3px;
                                                  +	margin-top:2px;
                                                  +	oeverflow:hidden;
                                                  +	cursor:pointer;
                                                  +	display:inline-block;
                                                  +}
                                                  +
                                                  +/* dialog_publish NEW */
                                                  +._nav{
                                                  +	border-left: 3px solid transparent;
                                                  +	cursor:pointer;font-weight: bold;
                                                  +}
                                                  +._nav:hover{
                                                  +	border-left: 3px solid #2EB5E5;
                                                  +}
                                                  +._nav.action_nav{
                                                  +	border-left: 3px solid #2EB5E5;
                                                  +	font-size: 13px;
                                                  +	color: #2EB5E5;
                                                  +}
                                                  +.copy_descr{
                                                  +	font-weight: bold;
                                                  +	display: inline-block;
                                                  +	text-align: left;
                                                  +}
                                                  +.iframe_html{
                                                  +	display: block;width: 499px;height: 50px;margin-top: 5px;margin-bottom: 3px;
                                                  +}
                                                  +.embed_size input{
                                                  +	width: 60px;
                                                  +}
                                                  +/****************************publish win style************************************/
                                                  +.dlg_publish_tip{font-size:15px;padding:8px 0px;line-height:20px;}
                                                  +.dlg_publish_op{
                                                  +	font-size:13px;
                                                  +	width:100px;
                                                  +	float:left;display:inline-block;
                                                  +	height:100px;
                                                  +	cursor:pointer;
                                                  +	position: relative;
                                                  +}
                                                  +.bg{
                                                  +	background:url(/themes/default/images/diagrams/diagrams.png) no-repeat;
                                                  +	display: block;
                                                  +	position: absolute;
                                                  +	left: 50%;top:20px;
                                                  +	margin-left: -26px;
                                                  +	opacity: 0.7;
                                                  +	filter: alpha(opacity=70);
                                                  +}
                                                  +.bg.back{
                                                  +	width:52px;
                                                  +	height:52px;
                                                  +	background-position: 0px 0px;
                                                  +}
                                                  +.bg.edit{
                                                  +	width:52px;
                                                  +	height:52px;
                                                  +	background-position: 0px -56px;
                                                  +}
                                                  +.dlg_publish_op:hover .bg{
                                                  +	opacity: 1.0;
                                                  +	filter: alpha(opacity=100);
                                                  +}
                                                  +/* dialog_publish END ****************************88*/
                                                  +.export-box{
                                                  +	margin: 10px 0px 5px;
                                                  +	color:#5B636B;
                                                  +}
                                                  +.export-list{
                                                  +	padding: 10px 0px; border-bottom:1px solid #EFEFEF;
                                                  +	font-weight:bold;
                                                  +}
                                                  +.export-list li{
                                                  +	display:inline-block;
                                                  +}
                                                  +.export-list .first{
                                                  +	min-width:320px;
                                                  +}
                                                  +.export-list.h{
                                                  +	font-weight:bold;
                                                  +}
                                                  +.export-list input{
                                                  +	vertical-align: middle;
                                                  +}
                                                  +.export-menu{
                                                  +	line-height:20px; font-weight:bold;
                                                  +}
                                                  +.export_des{
                                                  +	font-weight: normal;
                                                  +	color: #555;
                                                  +	margin-left: 15px;
                                                  +}
                                                  +.suffix{
                                                  +	font-weight:normal;
                                                  +}
                                                  +#colla_suggest_box h3{
                                                  +	margin: 10px 0 5px 0;
                                                  +	line-height: 30px;
                                                  +	font-size: 15px;
                                                  +	font-weight: bold;
                                                  +	color: #5B636B;
                                                  +	border-bottom: 1px solid #CCC;
                                                  +}
                                                  +#colla_suggest_box .alert{
                                                  +	margin-top: 10px;
                                                  +}
                                                  +.colla_suggest{
                                                  +	max-height: 160px;
                                                  +	overflow: auto;
                                                  +}
                                                  +.colla_suggest li{
                                                  +	padding: 5px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.colla_suggest li:hover{
                                                  +	background-color: #63ABF7;
                                                  +	color: white;
                                                  +}
                                                  +.colla_suggest img{
                                                  +	width: 30px;
                                                  +	height: 30px;
                                                  +	border-radius: 5px;
                                                  +	vertical-align: middle;
                                                  +	margin-right: 5px;
                                                  +}
                                                  +
                                                  +/* import visio css */
                                                  +#import_file_window{
                                                  +	display: none;width: 450px;height:auto;
                                                  +}
                                                  +#import_file_window .import_content{
                                                  +	margin: auto;text-align: center;border: 1px solid #D9D9D9;padding: 20px 5px;margin-top: 20px;
                                                  +}
                                                  +#selectfile_btn{
                                                  +	padding-left: 30px;position:relative;
                                                  +}
                                                  +#importVisiopath{
                                                  +	width: 100%;height: 30px;padding: 0px;
                                                  +	margin: 0px;border: 0px;left: 0px;
                                                  +	top: 0px;opacity: 0;filter: alpha(opacity=0);
                                                  +	position: absolute;
                                                  +}
                                                  +.import_file_wraper{
                                                  +	margin-top: 20px;display: none;
                                                  +}
                                                  +.import_file_wraper label{
                                                  +	display: inline-block;position: relative;
                                                  +}
                                                  +.only_visio_file{
                                                  +	margin: auto;margin-top: 10px;color: #333;font-size: 12px;width: 300px;
                                                  +}
                                                  +#fileName{
                                                  +	width: 320px;margin-left: 10px;cursor: pointer!important;
                                                  +}
                                                  +#selectfile_btn, #selectfile_btn input, #selectfile_btn *{
                                                  +	cursor: pointer !important;
                                                  +}
                                                  +#selectfile_btn div.ico{
                                                  +	position: absolute;
                                                  +	background: url(../images/diagraming/sprite.png) no-repeat;
                                                  +	background-position: -40px -380px;
                                                  +	height: 20px;width: 20px;left: 5px; top: 50%;margin-top: -10px;
                                                  +}
                                                  +.import_visio_btns{
                                                  +	padding-top: 10px;text-align: right;
                                                  +}
                                                  +#import_error{
                                                  +	display:none;padding: 10px;margin:0 auto;margin-top: 10px;
                                                  +}
                                                  +#import_success{
                                                  +	display:none;padding: 10px;margin:0 auto;margin-top: 10px;
                                                  +}
                                                  +
                                                  +.sync{
                                                  +	width:16px;
                                                  +	height:16px;
                                                  +	background:url(../images/charts/sync.png) no-repeat;
                                                  +	display:inline-block;
                                                  +	cursor:pointer;
                                                  +	vertical-align: middle;
                                                  +}
                                                  +.sync.sina{
                                                  +	background-position: 0px 0px;
                                                  +}
                                                  +.sync.sina_{
                                                  +	background-position: -21px 0px;
                                                  +}
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/global.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/global.css
                                                  new file mode 100644
                                                  index 00000000..02f3b8b2
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/global.css
                                                  @@ -0,0 +1,1643 @@
                                                  +@CHARSET "UTF-8";
                                                  +html {
                                                  +	/* background: #F0F0F0; */
                                                  +	background: url(../../images/default/htmlbg.png) repeat;
                                                  +}
                                                  +body{
                                                  +	margin:0px; padding:0px;
                                                  +	font-size:13px;
                                                  +	color:#333;
                                                  +	/* background:#F2F2F2; */
                                                  +	font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
                                                  +}
                                                  +input,textarea,div{
                                                  +	resize:none;outline:none;font-size:13px;
                                                  +	font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
                                                  +}
                                                  +.fileset{
                                                  +	border:1px solid #d3d2d1;
                                                  +	border-radius:5px;
                                                  +}
                                                  +
                                                  +ul{
                                                  +	margin:0px;
                                                  +	padding:0px;
                                                  +	list-style:none;
                                                  +}
                                                  +
                                                  +a{
                                                  +	font-size:13px;
                                                  +	text-decoration:none;
                                                  +	color: #4183C4;
                                                  +	cursor: pointer;
                                                  +}
                                                  +a:hover, a:active {
                                                  +	text-decoration: underline;
                                                  +}
                                                  +.badge.notification_badge{
                                                  +	display: none;
                                                  +}
                                                  +img:-moz-broken{ 
                                                  +	-moz-force-broken-image-icon:1; 
                                                  +	border: 0px;
                                                  +}
                                                  +/**Button*/
                                                  +/* 
                                                  +.button:visited, .button:hover, .button:active {
                                                  +	text-decoration: none;
                                                  +}
                                                  +.button[type=button]{
                                                  +	padding: 4px 10px; line-height: 20px;
                                                  +}
                                                  +.button, .button:visited {
                                                  +	vertical-align: middle;
                                                  +	box-sizing: inherit;
                                                  +	user-select:none;
                                                  +	cursor: pointer; color: #5B636B;
                                                  +	display: inline-block;white-space: nowrap;overflow: visible;
                                                  +	font-size: 13px;font-weight: bold;
                                                  +	min-width: 50px; margin: 0px;
                                                  +	padding: 0px 10px; line-height: 28px;
                                                  +	text-align: center;
                                                  +	border: 1px solid #CED0D3;
                                                  +	border-bottom-color:#C1C1C1;
                                                  +	text-shadow: rgba(255, 255, 255, 0.1) 1px 1px 0;
                                                  +	border-radius: 3px;
                                                  +	background:#e6e6e6 url(images/bg_repeat.png) repeat-x;
                                                  +}
                                                  +.button:hover {
                                                  +	background-color: #dcdcdc;
                                                  +	background-position: 0px -50px;
                                                  +}
                                                  +.button:active {
                                                  +	background-color: #fff;
                                                  +	background-position: 0px -100px;
                                                  +}
                                                  +.button:disabled{
                                                  +	cursor: default !important;
                                                  +	background: #F0F2F3; 
                                                  +	color: #b4b4b4;
                                                  +	opacity:0.6;
                                                  +}
                                                  +.button.default {
                                                  +	color: white;
                                                  +	border-color: #3995DA;
                                                  +	text-shadow: rgba(0, 0, 0, 0.2) 1px 1px 0;
                                                  +	background-color: #227fdf;
                                                  +	background-position: 0px -150px;
                                                  +}
                                                  +.button.default:hover {
                                                  +	background-color: #1d72ca;
                                                  +	background-position: 0px -200px;
                                                  +}
                                                  +.button.default:active {
                                                  +	background-color: #55b4f4;
                                                  +	background-position: 0px -250px;
                                                  +}
                                                  +.button.default:disabled{
                                                  +	background-color: #2C8EE6;
                                                  +	color: #f0f0f0;
                                                  +	text-shadow: none;
                                                  +}
                                                  +.button.green {
                                                  +	border: 1px solid #367A34;
                                                  +	color: white;
                                                  +	text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1)!important;
                                                  +	background-color: #5da206;
                                                  +	background-position: 0px -300px;
                                                  +}
                                                  +.button.green:hover {
                                                  +	background-color: #4F8905;
                                                  +	background-position: 0px -350px;
                                                  +}
                                                  +.button.green:active {
                                                  +	background-color: #8ac835;
                                                  +	background-position: 0px -400px;
                                                  +}
                                                  +.button.green:disabled{
                                                  +	background-color: #5da206;
                                                  +	color: #f0f0f0;
                                                  +	text-shadow: none;
                                                  +}
                                                  +.btn_group{
                                                  +	display: inline-block;
                                                  +	vertical-align: middle;
                                                  +}
                                                  +.btn_group .button{
                                                  +	border-left-width: 0px;
                                                  +	border-radius: 0px;
                                                  +	margin: 0px !important;
                                                  +	float: left;
                                                  +}
                                                  +.btn_group .button:first-child{
                                                  +	border-left-width: 1px;
                                                  +	border-top-left-radius: 3px;
                                                  +	border-bottom-left-radius: 3px;
                                                  +}
                                                  +.btn_group .button:last-child{
                                                  +	border-top-right-radius: 3px;
                                                  +	border-bottom-right-radius: 3px;
                                                  +} */
                                                  +
                                                  +/**Button*/
                                                  +.button:visited, .button:hover, .button:active {
                                                  +	text-decoration: none;
                                                  +}
                                                  +.button[type=button]{
                                                  +	padding: 4px 10px; line-height: 20px;
                                                  +}
                                                  +.button, .button:visited{
                                                  +	display: inline-block;
                                                  +	line-height:28px;
                                                  +	border: 1px solid #c6c6c6;
                                                  +	padding:0px 10px;
                                                  +	text-align: center;
                                                  +	background-color: #F8F8F8;
                                                  +	background-image: -webkit-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: -moz-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: -ms-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: -o-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f8f8f8', endColorstr='#f1f1f1',GradientType=0 );
                                                  +	color: #333;
                                                  +	cursor: pointer;
                                                  +	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
                                                  +	border-radius: 2px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-o-border-radius: 2px;
                                                  +	-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-moz-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-ms-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	min-width: 50px;
                                                  +}
                                                  +.button:hover{
                                                  +	background-color: #f3f3f3;
                                                  +	background-image: -webkit-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: -moz-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: -ms-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: -o-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f8f8f8', endColorstr='#e8e8e8',GradientType=0 );
                                                  +}
                                                  +.button.default,  .button.default:visited{
                                                  +	line-height:29px;
                                                  +	border: 0px;
                                                  +	padding:0px 10px;
                                                  +	text-align: center;
                                                  +	background-color: #2EB5E5;
                                                  +	text-decoration: none !important;
                                                  +	background-image: -moz-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -webkit-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -o-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -ms-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#34c0e9', endColorstr='#29aae1',GradientType=0 );
                                                  +	color: white;
                                                  +	cursor: pointer;
                                                  +	text-shadow: 0 1px 0 rgba(0, 0, 0, 0.35);
                                                  +	border-radius: 2px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-o-border-radius: 2px;
                                                  +	-webkit-box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	-moz-box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	min-width: 50px;
                                                  +}
                                                  +.button.default:hover,.button.default:hover {
                                                  +	background-color: #2EB5E5;
                                                  +	text-decoration: none;
                                                  +	background-image: -moz-linear-gradient(top, #34c0df, #29aad7);
                                                  +	background-image: -webkit-linear-gradient(top, #34c0df, #29aad7);
                                                  +	background-image: -o-linear-gradient(top, #34c0df, #29aad7);
                                                  +	background-image: -ms-linear-gradient(top, #34c0df, #29aad7);
                                                  +	background-image: linear-gradient(top, #34c0df, #29aad7);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#34c0df', endColorstr='#29aad7',GradientType=0 );
                                                  +}
                                                  +.button.default:disabled{
                                                  +	background-color: #48d4fd;
                                                  +	background-image: -moz-linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	background-image: -webkit-linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	background-image: -o-linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	background-image: -ms-linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	background-image: linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#48d4fd', endColorstr='#3dbeeb',GradientType=0 );
                                                  +	box-shadow:  none;
                                                  +	text-shadow: none;
                                                  +	cursor: default;
                                                  +	color: #e6e6e6;
                                                  +}
                                                  +.button.green {
                                                  +	line-height:29px;
                                                  +	border: 0px;
                                                  +	padding:0px 10px;
                                                  +	text-align: center;
                                                  +	background-color: #62ab07;
                                                  +	text-decoration: none !important;
                                                  +	background-image: -moz-linear-gradient(top, #62ab07, #5da206);
                                                  +	background-image: -webkit-linear-gradient(top, #62ab07, #5da206);
                                                  +	background-image: -o-linear-gradient(top, #62ab07, #5da206);
                                                  +	background-image: -ms-linear-gradient(top, #62ab07, #5da206);
                                                  +	background-image: linear-gradient(top, #62ab07, #5da206);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#62ab07', endColorstr='#5da206',GradientType=0 );
                                                  +	color: white;
                                                  +	cursor: pointer;
                                                  +	text-shadow: 0 1px 0 rgba(0, 0, 0, 0.35);
                                                  +	border-radius: 2px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-o-border-radius: 2px;
                                                  +	-webkit-box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	-moz-box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	min-width: 50px;
                                                  +}
                                                  +.button.green:hover,.button.green:active {
                                                  +	background-color: #5da206;
                                                  +	text-decoration: none;
                                                  +	background-image: -moz-linear-gradient(top, #5da206, #599b06);
                                                  +	background-image: -webkit-linear-gradient(top, #5da206, #599b06);
                                                  +	background-image: -o-linear-gradient(top, #5da206, #599b06);
                                                  +	background-image: -ms-linear-gradient(top, #5da206, #599b06);
                                                  +	background-image: linear-gradient(top, #5da206, #599b06);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#5da206', endColorstr='#599b06',GradientType=0 );
                                                  +}
                                                  +.button.green:disabled{
                                                  +	background-color: #8a9f6f;
                                                  +	background-image: -moz-linear-gradient(top, #8a9f6f, #535c47);
                                                  +	background-image: -webkit-linear-gradient(top, #8a9f6f, #535c47);
                                                  +	background-image: -o-linear-gradient(top, #8a9f6f, #535c47);
                                                  +	background-image: -ms-linear-gradient(top, #8a9f6f, #535c47);
                                                  +	background-image: linear-gradient(top, #8a9f6f, #535c47);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#8a9f6f', endColorstr='#535c47',GradientType=0 );
                                                  +	box-shadow:  none;
                                                  +	text-shadow: none;
                                                  +	cursor: default;
                                                  +	color: #e6e6e6;
                                                  +}
                                                  +.btn_group{
                                                  +	display: inline-block;
                                                  +	line-height:30px;
                                                  +}
                                                  +.main_btns .button{
                                                  +	float: left;
                                                  +}
                                                  +.main_btns .btn_group{
                                                  +	float: left;
                                                  +}
                                                  +.btn_group .button{
                                                  +	border-left-width: 0px;
                                                  +	border-radius: 0px;
                                                  +	margin: 0px !important;
                                                  +	float: left;
                                                  +}
                                                  +.btn_group .button:first-child{
                                                  +	border-left-width: 1px;
                                                  +	border-top-left-radius: 2px;
                                                  +	border-bottom-left-radius: 2px;
                                                  +}
                                                  +.btn_group .button:last-child{
                                                  +	border-top-right-radius: 2px;
                                                  +	border-bottom-right-radius: 2px;
                                                  +}
                                                  +/***button END*******/
                                                  +
                                                  +.center{
                                                  +	margin:0px auto;
                                                  +}
                                                  +.main{
                                                  +	margin-top:15px;
                                                  +	-moz-border-radius:6px;
                                                  +	background-color:#ffffff;
                                                  +	width:960px;
                                                  +	-moz-box-shadow:0px 1px 4px #DCDCDC;
                                                  +	-ms-box-shadow:0px 1px 4px #DCDCDC;
                                                  +	-o-box-shadow:0px 1px 4px #DCDCDC;
                                                  +	box-shadow:0px 1px 4px #DCDCDC;
                                                  +	min-height:600px;
                                                  +}
                                                  +/*输入框*/
                                                  +.txt{
                                                  +	border:1px solid #D9D9D9;border-top: 1px solid silver;
                                                  +	padding:5px;width:180px; background-color:#FFFFFF;
                                                  +	border-radius:2px;
                                                  +}
                                                  +.txt:hover{
                                                  +	border:1px solid #B8B8B8;border-top: 1px solid #A1A1A1;
                                                  +}
                                                  +.txt:focus{
                                                  +	border:1px solid #3da2ea;
                                                  +	box-shadow:inset 0px 1px 2px rgba(0,0,0,0.2);
                                                  +	-webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
                                                  +	-moz-transition: border linear 0.2s, box-shadow linear 0.2s;
                                                  +	-o-transition: border linear 0.2s, box-shadow linear 0.2s;
                                                  +	transition: border linear 0.2s, box-shadow linear 0.2s;
                                                  +}
                                                  +
                                                  +/*disable*/
                                                  +.disabled-mask{
                                                  +	position:absolute;z-index:102;background:white;
                                                  +	opacity:0; filter:alpha(opacity=0);
                                                  +}
                                                  +
                                                  +/**
                                                  + * 登录窗口
                                                  + */
                                                  +.loginWindow{
                                                  +	border-radius:5px;background:#ffffff;width:500px;height:310px;position:fixed;z-index:99999999999 !important;
                                                  +	box-shadow: 0 0 10px #25292B;
                                                  +}
                                                  +.loginWindow-content{
                                                  +	width:500px;height:300px;
                                                  +}
                                                  +
                                                  +.window-mask{
                                                  +	background:#FFFFFF;position:fixed;width:1000px;top:0px;left:0px;opacity:0.6; filter:alpha(opacity=60);
                                                  +	z-index:2;
                                                  +}
                                                  +
                                                  +.opacity{
                                                  +	opacity:0.5; filter:alpha(opacity=50) !important;
                                                  +	cursor:default;
                                                  +}
                                                  +.clear{
                                                  +	clear:both;
                                                  +}
                                                  +.radius6{
                                                  +	-moz-border-radius: 6px;
                                                  +	-webkit-border-radius: 6px;
                                                  +	-ms-border-radius: 6px;
                                                  +	-o-border-radius: 6px;
                                                  +	border-radius: 6px;
                                                  +}
                                                  +.radius5{
                                                  +	-moz-border-radius: 5px;
                                                  +	-webkit-border-radius: 5px;
                                                  +	-ms-border-radius: 5px;
                                                  +	-o-border-radius: 5px;
                                                  +	border-radius: 5px;
                                                  +}
                                                  +.radius3{
                                                  +	-moz-border-radius: 3px;
                                                  +	-webkit-border-radius: 3px;
                                                  +	-ms-border-radius: 3px;
                                                  +	-o-border-radius: 3px;
                                                  +	border-radius: 3px;
                                                  +}
                                                  +.radius2{
                                                  +	-moz-border-radius: 2px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-ms-border-radius: 2px;
                                                  +	-o-border-radius: 2px;
                                                  +	border-radius: 2px;
                                                  +}
                                                  +.noover{
                                                  +	overflow: hidden;
                                                  +	text-overflow: ellipsis;
                                                  +	white-space: nowrap;
                                                  +}
                                                  +.br{
                                                  +	word-break: break-all; word-wrap: break-word;
                                                  +}
                                                  +.shadow_1{
                                                  +	-ms-box-shadow: 0 2px 4px rgba(0,0,0,.2);
                                                  +	-o-box-shadow: 0 2px 4px rgba(0,0,0,.2);
                                                  +	-moz-box-shadow: -1px 1px 1px rgba(0,0,0,.2);
                                                  +	-webkit-box-shadow: 0 2px 4px rgba(0,0,0,.2);
                                                  +	box-shadow: 0 2px 4px rgba(0,0,0,.2);
                                                  +	border: 1px solid #BEBEBE;
                                                  +	background: #FFF;
                                                  +}
                                                  +.shadow_2{
                                                  +	box-shadow: 0 1px 3px rgba(34,25,25,0.3);
                                                  +	-moz-box-shadow: 0 1px 3px rgba(34,25,25,0.3);
                                                  +	-webkit-box-shadow: 0 1px 3px rgba(25,25,25,0.3);
                                                  +	-ms-box-shadow: 0 1px 3px rgba(25,25,25,0.3);
                                                  +	-khtml-box-shadow: 0 1px 3px rgba(25,25,25,0.3);
                                                  +}
                                                  +.text_shadow1{
                                                  +	text-shadow: 1px 1px 1px white;
                                                  +	-moz-text-shadow: 1px 1px 1px white;
                                                  +	-web-kittext-shadow: 1px 1px 1px white;
                                                  +	-ms-boxtext-shadow: 1px 1px 1px white;
                                                  +	-khtml-text-shadow: 1px 1px 1px white;
                                                  +}
                                                  +.close_icon{
                                                  +	float: right;
                                                  +	background: transparent url(images/common.png) 2px -98px no-repeat;
                                                  +	width: 16px;
                                                  +	height: 16px;
                                                  +	display: inline-block;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.no_select{
                                                  +   -moz-user-select: none;
                                                  +   -webkit-user-select: none; 
                                                  +   -ms-user-select: none; 
                                                  +   -khtml-user-select: none;
                                                  +}
                                                  +.label, .badge{
                                                  +	display: inline-block;
                                                  +	font-weight: bold;
                                                  +	line-height: 14px;
                                                  +	color: white;
                                                  +	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
                                                  +	white-space: nowrap;
                                                  +	background-color: #999;
                                                  +}
                                                  +.label{
                                                  +	padding: 2px 4px;
                                                  +	-webkit-border-radius: 3px;
                                                  +	-moz-border-radius: 3px;
                                                  +	border-radius: 3px;
                                                  +}
                                                  +.label.success{
                                                  +	background-color: #468847;
                                                  +}
                                                  +.label.warning{
                                                  +	background-color: #F89406;
                                                  +}
                                                  +.label.important{
                                                  +	background-color: #B94A48;
                                                  +}
                                                  +.label.info{
                                                  +	background-color: #3A87AD;
                                                  +}
                                                  +.label.info1{
                                                  +	background-color: lightblue;
                                                  +}
                                                  +.label.inverse{
                                                  +	background-color: #333;
                                                  +}
                                                  +.badge{
                                                  +	padding: 2px 9px;
                                                  +	-webkit-border-radius: 9px;
                                                  +	-moz-border-radius: 9px;
                                                  +	border-radius: 9px;
                                                  +}
                                                  +.badge.success{
                                                  +	background-color: #468847;
                                                  +}
                                                  +.badge.warning{
                                                  +	background-color: #F89406;
                                                  +}
                                                  +.badge.important{
                                                  +	background-color: #B94A48;
                                                  +}
                                                  +.badge.info{
                                                  +	background-color: #3A87AD;
                                                  +}
                                                  +.badge.inverse{
                                                  +	background-color: #333;
                                                  +}
                                                  +.nav_tabs{
                                                  +	border-bottom: 1px solid #DDD;
                                                  +}
                                                  +.nav_tabs a{
                                                  +	font-size: 14px;
                                                  +	margin: 0px 2px -1px 0px;
                                                  +	display: inline-block;
                                                  +	padding: 8px 12px;
                                                  +	border: 1px solid transparent;
                                                  +	border-bottom-color: #DDD;
                                                  +	-webkit-border-radius: 4px 4px 0 0;
                                                  +	-moz-border-radius: 4px 4px 0 0;
                                                  +	border-radius: 4px 4px 0 0;
                                                  +}
                                                  +.nav_tabs a:hover{
                                                  +	text-decoration: none;
                                                  +	background-color: #EEE;
                                                  +	color: #005580;
                                                  +}
                                                  +.nav_tabs .active{
                                                  +	color: #555;
                                                  +	cursor: default;
                                                  +	background-color: white;
                                                  +	border: 1px solid #DDD;
                                                  +	border-bottom-color: transparent;
                                                  +}
                                                  +.nav_tabs .active:hover{
                                                  +	background-color: white;
                                                  +	color: #555;
                                                  +}
                                                  +.alert{
                                                  +	color: #C09853;
                                                  +	padding: 8px 14px;
                                                  +	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
                                                  +	background-color: #FCF8E3;
                                                  +	border: 1px solid #FBEED5;
                                                  +	-webkit-border-radius: 4px;
                                                  +	-moz-border-radius: 4px;
                                                  +	border-radius: 4px;
                                                  +}
                                                  +.alert.error{
                                                  +	color: #B94A48;
                                                  +	background-color: #F2DEDE;
                                                  +	border-color: #EED3D7;
                                                  +}
                                                  +.alert.success{
                                                  +	color: #468847;
                                                  +	background-color: #DFF0D8;
                                                  +	border-color: #D6E9C6;
                                                  +}
                                                  +.alert.info{
                                                  +	color: #3A87AD;
                                                  +	background-color: #D9EDF7;
                                                  +	border-color: #BCE8F1;
                                                  +}
                                                  +.drop{
                                                  +	display:inline-block; width:10px;height:10px;
                                                  +	background:url(images/common.png) right center no-repeat;
                                                  +	background-position:-2px -151px;
                                                  +	margin-left: 2px;
                                                  +}
                                                  +
                                                  +/********************Header Styles*****************/
                                                  +#header {
                                                  +	height: 38px;
                                                  +	font-size: 16px;
                                                  +	color: white;
                                                  +	width: 100%;
                                                  +	position:fixed;z-index:2;
                                                  +	top:0px;
                                                  +	/* background: url(images/header/header_bg.png) repeat-x;
                                                  +	background-color:#333; */
                                                  +	background:#4a4949;
                                                  +	-webkit-transition: height .3s ease-in-out;
                                                  +	  -o-transition: height .3s ease-in-out;
                                                  +	  -moz-transition: height .3s ease-in-out;
                                                  +	  transition: height .3s ease-in-out;
                                                  +	/* -moz-box-shadow: 0 0 5px rgba(0,0,0,0.5);
                                                  +	-o-box-shadow: 0 0 5px rgba(0,0,0,0.5);
                                                  +	-ms-box-shadow: 0 0 5px rgba(0,0,0,0.5);
                                                  +	box-shadow: 0 0 5px rgba(0,0,0,0.5); */
                                                  +}
                                                  +#header_nav{
                                                  +	/* width:960px; */height:38px;margin:0px auto;
                                                  +	height: 38px; line-height: 38px;
                                                  +	width: auto; margin-left: 10px;margin-right: 10px;
                                                  +}
                                                  +.header_nav_items{
                                                  +	float:left; height: 38px;
                                                  +}
                                                  +#header_nav .logo:hover{
                                                  +	text-decoration: none;
                                                  +}
                                                  +#header_nav .logo img{
                                                  +	vertical-align: middle;border:none;margin-top: 5px;
                                                  +}
                                                  +.header_nav_items a{
                                                  +	float:left;
                                                  +	display:inline-block;
                                                  +	height: 38px; line-height: 38px;
                                                  +}
                                                  +.header_nav_items .nav{
                                                  +	color:#fff;font-size:13px;
                                                  +	margin-left: 2px;
                                                  +	padding: 0px 10px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-o-border-radius: 2px;
                                                  +	-ms-border-radius: 2px;
                                                  +	border-radius: 2px;
                                                  +	margin-left: 10px;
                                                  +}
                                                  +#header_nav .nav:hover{
                                                  +	background-color:#000;
                                                  +	text-decoration:none;
                                                  +}
                                                  +#header_nav .header-user{
                                                  +	float:right; color:#fff;
                                                  +	cursor:pointer; padding:0px 8px;
                                                  +}
                                                  +#header_nav .header-user img{
                                                  +	margin-top:-4px;
                                                  +}
                                                  +#header_nav .header-user:hover{
                                                  +	/* background: #717171; */
                                                  +}
                                                  +#header_nav .header-user.droped{
                                                  +	/* background: #717171; */
                                                  +}
                                                  +#header_nav .header-user .drop{
                                                  +	background: url(images/common.png) -16px -177px no-repeat;
                                                  +	width:12px; height:13px; display:inline-block;
                                                  +}
                                                  +#header_nav .header-user .login{
                                                  +	color:#FFFFFF;
                                                  +	padding:3px 10px;
                                                  +}
                                                  +#header_nav .header-user .login:hover{
                                                  +	text-decoration: none;
                                                  +}
                                                  +#header_nav .header-op{
                                                  +	/* float: right;
                                                  +	margin-right:5px;
                                                  +	margin-top: 6px;
                                                  +	height: 25px; line-height: 25px;
                                                  +	padding: 0px 8px;	
                                                  +	background:#e6e6e6 url(images/bg_repeat.png) repeat-x;
                                                  +	box-shadow:1px 1px 1px #3A87AD;
                                                  +	background-color: #227fdf;
                                                  +	background-position: 0px -150px; */
                                                  +	
                                                  +	
                                                  +	float: right;
                                                  +	margin-right:5px;
                                                  +	margin-top: 6px;
                                                  +	height: 25px; line-height: 25px;
                                                  +	border: 0px;
                                                  +	padding: 0px 10px;
                                                  +	text-align: center;
                                                  +	background-color: #2EB5E5;
                                                  +	background-image: -moz-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -webkit-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -o-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -ms-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#34c0e9', endColorstr='#29aae1',GradientType=0 );
                                                  +	color: white;
                                                  +	cursor: pointer;
                                                  +	text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
                                                  +	border-radius: 2px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-o-border-radius: 2px;
                                                  +	-webkit-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	-moz-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	min-width: 50px;
                                                  +}
                                                  +
                                                  +#header_nav .header-op a{
                                                  +  color:#fff;
                                                  +  font-weight: normal;
                                                  +}
                                                  +#header_nav .header-op span{
                                                  +	margin: 0px 2px;
                                                  +}
                                                  +
                                                  +#header_nav .photo{
                                                  +	display:block;
                                                  +	padding:2px 6px;height:20px;width:20px;
                                                  +}
                                                  +
                                                  +#header_user_menu{
                                                  +	top:36px !important;
                                                  +}
                                                  +#header_user_menu a{
                                                  +	display:block;font-size:13px;
                                                  +}
                                                  +#header_nav .badge{
                                                  +	float: right;margin: 4px 5px 0px 0px;
                                                  +}
                                                  +#p-bottom{
                                                  +	clear:both;
                                                  +	margin-top:5px;
                                                  +	height:25px;
                                                  +	line-height:25px;
                                                  +	text-align:center;
                                                  +	padding-bottom:30px;
                                                  +	padding-top:10px;
                                                  +}
                                                  +#p-bottom li{
                                                  +	display:inline;
                                                  +}
                                                  +#p-bottom a{
                                                  +	margin:0px 5px;
                                                  +}
                                                  +
                                                  +/********************Plugs Styles******************/
                                                  +.popmenu{
                                                  +	padding: 5px 0px;background: #ffffff;display:none;
                                                  +}
                                                  +.popmenu a{
                                                  +	 color: #333;
                                                  +}
                                                  +.popmenu li{
                                                  +	padding: 0px 20px; line-height: 30px; cursor: pointer;
                                                  +}
                                                  +.popmenu li:hover{
                                                  +	color: white;
                                                  +	/* background-color:#4183C4;
                                                  +	background-image: -moz-linear-gradient(top, #08C, #0077B3);
                                                  +	background-image: -webkit-linear-gradient(top, #08C, #0077B3);
                                                  +	background-image: -o-linear-gradient(top, #08C, #0077B3);
                                                  +	background-image: linear-gradient(to bottom, #08C, #0077B3); */
                                                  +	background-color: #2EB5E5;
                                                  +	text-shadow: 0 1px 0 rgba(0, 0, 0, 0.35);
                                                  +	background-repeat: repeat-x;
                                                  +}
                                                  +.popmenu li:hover a{
                                                  +	text-decoration: none;
                                                  +	color: white;
                                                  +}
                                                  +.popmenu li.split{
                                                  +	height: 1px;
                                                  +	margin: 9px 1px;
                                                  +	overflow: hidden;
                                                  +	background-color: #E5E5E5;
                                                  +	border-bottom: 1px solid white;
                                                  +}
                                                  +.popmenu li.split:hover{
                                                  +	background-color:#E5E5E5;
                                                  +	background-image: none;
                                                  +}
                                                  +
                                                  +/*Dialog*/
                                                  +.dialog_box{
                                                  +	position:fixed;
                                                  +	z-index:3;
                                                  +	background-color: white;
                                                  +	border: 1px solid #C0C2C4;
                                                  +	padding: 20px;
                                                  +	display: inline-block;
                                                  +	color: #5B636B;
                                                  +	-moz-box-shadow: 0 5px 15px 0 rgba(0,0,0,0.2);
                                                  +	-webkit-box-shadow: 0 5px 15px 0 rgba(0,0,0,0.2);
                                                  +	-o-box-shadow: 0 5px 15px 0 rgba(0,0,0,0.2);
                                                  +	-ms-box-shadow: 0 5px 15px 0 rgba(0,0,0,0.2);
                                                  +	box-shadow: 0 5px 15px 0 rgba(0,0,0,0.2);
                                                  +	-moz-border-radius:4px;
                                                  +	-webkit-border-radius:4px;
                                                  +	-o-border-radius:4px;
                                                  +	border-radius:4px;
                                                  +}
                                                  +
                                                  +.dialog_close{
                                                  +	background:transparent url(images/common-16.png) 0px -16px no-repeat;position:absolute;top:15px;right:15px;width:16px;height:16px;cursor:pointer;
                                                  +	display:none;
                                                  +}
                                                  +.dialog_close:hover{
                                                  +	background-position: 0px -32px;
                                                  +}
                                                  +.dialog_title{
                                                  +	text-align: left;
                                                  +	cursor:move;
                                                  +	font-size: 24px;
                                                  +	line-height: 26px;
                                                  +	color: #5B636B;
                                                  +	margin:0px 20px 20px 0px;
                                                  +	font-weight: 200;
                                                  +	-moz-user-select: none; 
                                                  +	-khtml-user-select: none; 
                                                  +	-webkit-user-select: none; 
                                                  +	-ms-user-select: none; 
                                                  +	-o-user-select: none; 
                                                  +	user-select: none;
                                                  +}
                                                  +
                                                  +/**菜单*/
                                                  +.popover {
                                                  +	position: absolute;
                                                  +	width:auto;
                                                  +}
                                                  +.popover .arrow {
                                                  +	background: url('/images/v4/common-32.png?19332') no-repeat;
                                                  +	width: 32px;
                                                  +	height: 32px;
                                                  +	overflow: hidden;
                                                  +	display: block;
                                                  +	position: absolute;
                                                  +	top: -32px;
                                                  +	left: 70px;
                                                  +	width: 32px;
                                                  +	height: 32px;
                                                  +	z-index: 2000;
                                                  +}
                                                  +
                                                  +#hover_tip{
                                                  +	position: absolute;  z-index:100000000000;
                                                  +	max-width: 250px;color: #fff;
                                                  +}
                                                  +#hover_tip .tip_arrow{
                                                  +	height: 6px;
                                                  +	background: url(images/common-16.png) center 0px no-repeat;
                                                  +}
                                                  +#hover_tip .tip_arrow.tip_right{
                                                  +	left: -6px;
                                                  +	top: 5px;
                                                  +	width: 6px;
                                                  +	height: 15px;
                                                  +	position: absolute;
                                                  +	background-position: -2px 0px;
                                                  +}
                                                  +#hover_tip .tip_arrow.tip_top{
                                                  +	bottom: -6px;
                                                  +	width: 100%;
                                                  +	position: absolute;
                                                  +	background-position: center -8px;
                                                  +}
                                                  +
                                                  +#hover_tip .tip_content{
                                                  +	padding: 5px 8px; font-size:12px;
                                                  +	background: #333;
                                                  +	background: rgba(50,50,50,.95);
                                                  +	word-break: break-all;
                                                  +}
                                                  +
                                                  +/**简短提示*/
                                                  +.simplealert{
                                                  +	position:absolute; z-index:100000000001; height:54px;left:18px; top:15px;display:none;
                                                  +}
                                                  +.simplealert div{
                                                  +	position:relative; height:54px;float:left;
                                                  +}
                                                  +.simplealert .simplealert-icon-ok{
                                                  +	width:45px;background:transparent url(images/icons/simplealert-bg.png) -5px 0px no-repeat;
                                                  +}
                                                  +.simplealert .simplealert-icon-info{
                                                  +	width:45px;background:transparent url(images/icons/simplealert-bg.png) -5px -54px no-repeat;
                                                  +}
                                                  +.simplealert .simplealert-icon-error{
                                                  +	width:45px;background:transparent url(images/icons/simplealert-bg.png) -5px -108px no-repeat;
                                                  +}
                                                  +.simplealert .simplealert-icon-loading{
                                                  +	width:45px;background:transparent url(images/icons/simplealert-bg.png) -5px -216px no-repeat;
                                                  +}
                                                  +.simplealert .simplealert-msg{
                                                  +	line-height:54px;padding:0px 10px 0px 10px;
                                                  +	font-weight: bold;font-size: 14px;color: #606060;font-family:Arial, Helvetica, sans-serif;
                                                  +	background:transparent url(images/icons/simplealert-bg.png) 0px -161px repeat-x;
                                                  +}
                                                  +.simplealert .simplealert-right{
                                                  +	width:5px;background:transparent url(images/icons/simplealert-bg.png) no-repeat;
                                                  +}
                                                  +
                                                  +#global_confirm_window .msg{
                                                  +	max-width: 450px;
                                                  +	min-width: 250px;
                                                  +}
                                                  +#global_confirm_window .buttons{
                                                  +	padding:30px 0px 0px;
                                                  +	text-align:right;
                                                  +}
                                                  +
                                                  +#p_toolTip{
                                                  +	display:none;font-size:12px;color:#666; max-width:280px;text-align:left;
                                                  +	border:1px solid #C9C9C9;
                                                  +	background:#FFFFFF; padding:5px;
                                                  +	position: absolute; line-height:160%;
                                                  +	z-index: 100000000000;
                                                  +	box-shadow: 4px 4px 8px #ccc;
                                                  +	min-height: 24px;
                                                  +}
                                                  +
                                                  +.suggest_menu{
                                                  +	border:1px solid #D9D9D9;border-top: 1px solid silver;
                                                  +	box-shadow: 3px 4px 8px #ccc;
                                                  +	background:white;
                                                  +	display:none;
                                                  +	list-style:none;
                                                  +}
                                                  +.suggest_menu .suggest_item{
                                                  +	padding: 5px; cursor:pointer;
                                                  +}
                                                  +.suggest_menu .suggest_item:hover{
                                                  +	background:#EEE;
                                                  +}
                                                  +.suggest_menu .selected{
                                                  +	background:#EEE;
                                                  +}
                                                  +
                                                  +.placeholder-lbl{
                                                  +	display:none;position:absolute; color:#C9C9C9;
                                                  +	cursor: text; overflow:hidden;
                                                  +}
                                                  +
                                                  +.pagination{
                                                  +	display: inline-block;
                                                  +}
                                                  +.pagination a{
                                                  +	display: inline-block;
                                                  +	float: left;
                                                  +	padding: 0 14px;
                                                  +	line-height: 38px;
                                                  +	text-align: center;
                                                  +	border-width: 1px 1px 1px 0px;
                                                  +	border-style: solid;
                                                  +	border-color: #ccc;
                                                  +	font-size:14px;
                                                  +	background-color: #FFF;
                                                  +}
                                                  +.pagination a:first-child{
                                                  +	border-radius: 3px 0 0 3px;
                                                  +	border-left: 1px solid #ccc;
                                                  +}
                                                  +.pagination a:last-child{
                                                  +	border-radius: 0 3px 3px 0;
                                                  +}
                                                  +.pagination a:hover{
                                                  +	background-color: whiteSmoke;
                                                  +	text-decoration: none;
                                                  +	color: #005580;
                                                  +}
                                                  +.pagination .disabled{
                                                  +	background-color: whiteSmoke;
                                                  +	color: #999;
                                                  +	cursor: default;
                                                  +}
                                                  +.pagination .disabled:hover{
                                                  +	color: #999;
                                                  +}
                                                  +.pagination .ellipsis{
                                                  +	background-color: #FFF;
                                                  +}
                                                  +.pagination .ellipsis:hover{
                                                  +	background-color: #FFF;
                                                  +}
                                                  +
                                                  +/**
                                                  +Slider Styles
                                                  +*/
                                                  +.slider_nav{
                                                  +	text-align: center; padding: 5px 0px;
                                                  +}
                                                  +.slider_nav span{
                                                  +	display:inline-block; width: 10px; height: 10px; cursor: pointer; margin-right: 5px;
                                                  +	background: url(images/icons/bullets.png); 
                                                  +}
                                                  +.slider_nav span.active{
                                                  +	background: url(images/icons/bullets.png) 0px -10px;
                                                  +}
                                                  +
                                                  +/* these 4 lines are the most important with respect to styling the control */
                                                  +.calendar{border:1px solid #aaa;background:#555;font-family:verdana;font-size:12px;}
                                                  +.calendar table{color:#fff;}
                                                  +.calendar table td.hover{background:#ffc;color:#444;}
                                                  +.calendar .selected{border:1px dotted #999;}
                                                  +
                                                  +.calendar{overflow:auto;width:250px;height:175px;position:absolute;line-height:1em;border-radius:5px;-moz-user-select:none;-webkit-user-select: none;-khtml-user-select: none;user-select: none;}
                                                  +.calendar table{width:100%;height:100%;color:#fff;}
                                                  +.calendar table td{padding:3px;text-align:center;cursor:pointer;border-radius:2px;}
                                                  +
                                                  +/********************私信******************/
                                                  +#private-message-win ::-webkit-scrollbar {
                                                  +	width: 8px;
                                                  +	height: 8px;
                                                  +}
                                                  +#private-message-win ::-webkit-scrollbar-thumb {
                                                  +	border-width: 1px;
                                                  +	border-style: solid;
                                                  +	border-color: white;
                                                  +	border-radius: 6px;
                                                  +	background: #D7D7D7;
                                                  +}
                                                  +#private-message-win ::-webkit-scrollbar-track-piece {
                                                  +	width: 11px;
                                                  +	height: 11px;
                                                  +}
                                                  +#private-message-win{
                                                  +	position:fixed;
                                                  +	min-width:312px;
                                                  +	bottom:0px;
                                                  +	right:130px;
                                                  +	z-index:20;
                                                  +}
                                                  +#private-message-win .message-box-wrap{
                                                  +	padding:0px;
                                                  +	margin:0px;
                                                  +	height:389px;
                                                  +	width:100%;
                                                  +	position:relative;
                                                  +	background:#fff;
                                                  +	border: 1px solid #AFAFAF;
                                                  +	display:block;
                                                  +}
                                                  +.message-box-wrap a{
                                                  +	display: block;
                                                  +	font-weight: bold;
                                                  +	color: #666;
                                                  +	text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.9);
                                                  +	font-size: 13px;
                                                  +	text-decoration: none;
                                                  +	color: #4183C4;
                                                  +	cursor: pointer;
                                                  +	position:absolute;
                                                  +	left:5px;
                                                  +	top:-28px;
                                                  +}
                                                  +.message-box-wrap .img_shadow {
                                                  +	display: block;
                                                  +	position: absolute;
                                                  +	width: 48px;
                                                  +	height: 48px;
                                                  +	-webkit-box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3);
                                                  +	-moz-box-shadow: inset 0 0 3px rgba(0,0,0,0.3);
                                                  +	-o-box-shadow: inset 0 0 3px rgba(0,0,0,0.3);
                                                  +	box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3);
                                                  +}
                                                  +.message-box-wrap img {
                                                  +	width: 48px;
                                                  +	height: 48px;
                                                  +	-webkit-box-shadow: 0 1px 0 white;
                                                  +	-moz-box-shadow: 0 1px 0 #fff;
                                                  +	-o-box-shadow: 0 1px 0 #fff;
                                                  +	box-shadow: 0 1px 0 white;
                                                  +	margin-right: 5px;
                                                  +	float: left;
                                                  +	vertical-align: middle;
                                                  +}
                                                  +.message-box-wrap .name {
                                                  +	height: 23px;
                                                  +	line-height:23px;
                                                  +	float:left;
                                                  +	margin-top:28px;
                                                  +	display: table-cell;
                                                  +	vertical-align: middle;
                                                  +}
                                                  +.message-box-top{
                                                  +	position:relative;
                                                  +	width:100%;
                                                  +	height:23px;
                                                  +	top:0px;
                                                  +	left:0px;
                                                  +	
                                                  +	background: #FAFAFA;
                                                  +	background: -moz-linear-gradient(#FAFAFA, #E0E0E0);
                                                  +	background: -webkit-linear-gradient(#FAFAFA, #E0E0E0);
                                                  +	background: linear-gradient(#FAFAFA, #E0E0E0);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( GradientType = 0,startColorstr = '#FAFAFA', 
                                                  +	 endColorstr = '#E0E0E0' );
                                                  +	-ms-filter: "progid:DXImageTransform.Microsoft.gradient( GradientType = 0,startColorstr = '#FAFAFA', 
                                                  +	 endColorstr = '#E0E0E0' )";
                                                  +	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
                                                  +	display: block;
                                                  +	border-bottom: 1px solid #CCC;
                                                  +	text-decoration: none;
                                                  +	color: #222;
                                                  +	font-weight: bold;
                                                  +	font-size: 12px;
                                                  +	line-height: 23px;
                                                  +	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.7);
                                                  +	border-left: 0 none;
                                                  +}
                                                  +.message-box-top span{
                                                  +	display:block;
                                                  +	width:16px;
                                                  +	height:16px;
                                                  +	position:absolute;
                                                  +	background:#ddd;
                                                  +	top:50%;
                                                  +	margin-top:-8px;
                                                  +}
                                                  +.message-box-top .message-box-size{
                                                  +	background:transparent url(./images/network/message-icons.png) no-repeat;
                                                  +	background-position:0px 0px;
                                                  +	right:30px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.message-box-top .message-box-size:hover{
                                                  +	background-position:0px -18px;
                                                  +}
                                                  +.message-box-top .message-box-remove{
                                                  +	background: transparent url(images/common-16.png) 0px -16px no-repeat;
                                                  +	position: absolute;
                                                  +	right: 10px;
                                                  +	width: 16px;
                                                  +	height: 16px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.message-box-top .message-box-remove:hover{
                                                  +	background-position: 0px -32px;
                                                  +}
                                                  +.float-left{
                                                  +	float:left;
                                                  +}
                                                  +.message-box-wrap .message-mutlperson{
                                                  +	position:relative;
                                                  +	height:367px;
                                                  +	width:104px;
                                                  +	background: #F2F2F2;
                                                  +	_overflow: hidden;
                                                  +}
                                                  +.message-mutlperson .mess-scrolltop_n, .message-mutlperson .mess-scrollbtn_n{
                                                  +	width: 104px;
                                                  +	height: 20px;
                                                  +	display: block;
                                                  +	position: relative;
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +}
                                                  +.message-mutlperson .mess-scrolltop_n{
                                                  +	background-position: -360px -60px;
                                                  +	cursor:pointer;
                                                  +}
                                                  +.message-mutlperson .mess-scrollbtn_n{
                                                  +	background-position: -465px -60px;
                                                  +	cursor:pointer;
                                                  +}
                                                  +.message-mutlperson .mess-scrolltop_n:hover{
                                                  +	background-position: -360px -40px;
                                                  +}
                                                  +.message-mutlperson .mess-scrollbtn_n:hover{
                                                  +	background-position: -465px -40px;
                                                  +}
                                                  +.message-mutlperson .message-mutlperson-box{
                                                  +	height: 320px;
                                                  +	margin: 1px 0 4px;
                                                  +	overflow: hidden;
                                                  +	position: relative;
                                                  +	border-right: solid 1px #C9C9C9;
                                                  +}
                                                  +.message-mutlperson .message-mutlperson-box .person-list{
                                                  +	position: absolute;
                                                  +	top: 0;
                                                  +	width: 104px;
                                                  +	min-height: 320px;
                                                  +}
                                                  +.message-mutlperson-box .person-list li{
                                                  +	float: left;
                                                  +	cursor: pointer;
                                                  +	margin: 2px 0 0 0;
                                                  +	display: inline;
                                                  +	padding: 1px 1px 1px 2px;
                                                  +	width: 99px;
                                                  +	height: 28px;
                                                  +	zoom: 1;
                                                  +	overflow: hidden;
                                                  +	position: relative;
                                                  +	list-style: none;
                                                  +	text-align: -webkit-match-parent;
                                                  +}
                                                  +.message-mutlperson-box .person-list li::after{
                                                  +	content: "";
                                                  +	display: block;
                                                  +	overflow: hidden;
                                                  +	height: 0;
                                                  +	clear: both;
                                                  +}
                                                  +.person-list .person-active{
                                                  +	background: white;
                                                  +	width: 97px;
                                                  +	border-top: 1px solid #BBB;
                                                  +	border-bottom: 1px solid #BBB;
                                                  +	z-index: 3;
                                                  +	font-weight: bold;
                                                  +}
                                                  +.person-list li .list-head-state{
                                                  +	margin: 7px 5px 0 0;
                                                  +	float: left;
                                                  +	position: relative;
                                                  +}
                                                  +.person-list .person-active .list-head-state .person-icon{
                                                  +	background-position:-323px 0px;
                                                  +}
                                                  +.person-list li .list-head-state .person-icon{
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +	background-position:-258px 0px;
                                                  +	width:14px;height:16px;
                                                  +	/* background-color: #D4D4D4;
                                                  +	border-color: #B8B8B8;
                                                  +	width: 7px;
                                                  +	height: 7px;
                                                  +	border-width: 1px;
                                                  +	border-style: solid;
                                                  +	 */
                                                  +	
                                                  +	display: inline-block;
                                                  +	border-radius: 2px;
                                                  +	overflow: hidden;
                                                  +}
                                                  +.person-list li .person-name{
                                                  +	height: 30px;
                                                  +	width: 70px;
                                                  +	line-height: 30px;
                                                  +	float: left;
                                                  +	word-wrap: break-word;
                                                  +	word-break: break-all;
                                                  +	white-space: nowrap;
                                                  +	overflow: hidden;
                                                  +}
                                                  +.person-list li .person-close{
                                                  +	display: none;
                                                  +	position: absolute;
                                                  +	top: 10px;
                                                  +	left: 90px;
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +	background-position:-111px -198px;
                                                  +	width: 12px;
                                                  +	height: 12px;
                                                  +}
                                                  +.person-list li:hover .person-close{
                                                  +	display:block;
                                                  +}
                                                  +.person-list li .person-close:hover{
                                                  +	background-position: -129px -198px;
                                                  +}
                                                  +.message-box-wrap .message-content-wrap{
                                                  +	padding:0px;margin:0px;
                                                  +	height:auto;
                                                  +	width:312px;
                                                  +}
                                                  +.message-box-wrap .messages-content{
                                                  +	height:210px;color: #777;
                                                  +}
                                                  +.message-box-wrap .messages-content .messages-list{
                                                  +	height:210px;
                                                  +	overflow-y:auto;
                                                  +}
                                                  +.messages-list *{
                                                  +	padding:0px;
                                                  +	margin:0px;
                                                  +}
                                                  +.messages-list dl{
                                                  +	position:relative;
                                                  +	webkit-margin-before: 1em;
                                                  +	-webkit-margin-after: 1em;
                                                  +	-webkit-margin-start: 0px;
                                                  +	-webkit-margin-end: 0px;
                                                  +}
                                                  +.messages-list dl dd{
                                                  +	display: block;
                                                  +	clear: both;
                                                  +	-webkit-margin-start: 40px;
                                                  +}
                                                  +.messages-list .mb-msgl, .messages-content .mb_msg_g, .messages-content .mb_msg_err {
                                                  +	float: left;
                                                  +	margin-left: 5px;
                                                  +	display: inline;
                                                  +}
                                                  +.messages-list .mb-msgr{
                                                  +	float: right;
                                                  +	margin-right: 5px;
                                                  +	display: inline;
                                                  +	position:relative;
                                                  +}
                                                  +.messages-list .mb-msgr, .messages-list .mb-msgl, .messages-content .mb_msg_g, .messages-content .mb_msg_err {
                                                  +	max-width: 222px;
                                                  +	margin-bottom: 1px;
                                                  +}
                                                  +.messages-content .wbim_msgpos {
                                                  +	position: relative;
                                                  +	margin: 10px 5px 0px;
                                                  +}
                                                  +.messages-content .msg_box {
                                                  +	-moz-border-radius: 5px;
                                                  +	-webkit-border-radius: 5px;
                                                  +	border-radius: 5px;
                                                  +	padding: 5px 9px;
                                                  +	
                                                  +}
                                                  +.messages-content .msg_arr {
                                                  +	position: absolute;
                                                  +	width: 8px;
                                                  +	height: 12px;
                                                  +	z-index: 1;
                                                  +}
                                                  +.messages-content .msg_arr{
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +}
                                                  +.msg_box .msg_txt {
                                                  +	max-width: 222px;
                                                  +	line-height: 14px;
                                                  +	word-wrap: break-word;
                                                  +	word-break: break-all;
                                                  +}
                                                  +.msg_box p{
                                                  +	display: block;
                                                  +}
                                                  +.messages-content .mb-msgl .msg_time, .messages-content .mb_msg_g .msg_time, .messages-content .mb_msg_err .msg_time {
                                                  +	padding-left: 10px;
                                                  +}
                                                  +.wbim_msgpos .msg_time {
                                                  +	padding-bottom: 1px;
                                                  +}
                                                  +.mb-msgl .msg_box {
                                                  +	border: 1px solid #EAEAEA;
                                                  +	background: #F3F3F3;
                                                  +}
                                                  +.mb-msgl .msg_arr {
                                                  +	bottom: 10px;
                                                  +	left: -5px;
                                                  +	_left: -15px;
                                                  +	background-position: -70px -16px;
                                                  +}
                                                  +.mb-msgr .msg_time {
                                                  +	text-align: right;
                                                  +	padding-right: 10px;
                                                  +}
                                                  +.mb-msgr .msg_box {
                                                  +	border: 1px solid #DFF0D8;
                                                  +	background: #EBFBE3;
                                                  +}
                                                  +.mb-msgr .msg_arr {
                                                  +	bottom: 10px;
                                                  +	right: -5px;
                                                  +	background-position: -72px 0;
                                                  +}
                                                  +.messages-list .line{
                                                  +	width: 100%;
                                                  +	_width: 94%;
                                                  +	height: 11px;
                                                  +	overflow: hidden;
                                                  +	margin: 0 auto;
                                                  +	border-bottom:1px dotted #dedcdc;
                                                  +}
                                                  +.message-box-wrap .message-menus{
                                                  +	min-height:25px;
                                                  +	line-height:25px;
                                                  +	background:#f3f3f3;
                                                  +	margin-top:15px;
                                                  +	position:relative;
                                                  +	border-top:1px solid #f1f0f0;
                                                  +	border-bottom:1px solid #f1f0f0;
                                                  +}
                                                  +.message-box-wrap .message-menus .upload_files_list_box{
                                                  +	height:25px;
                                                  +	line-height:25px;
                                                  +	bottom:-28px;
                                                  +	position:absolute;
                                                  +	width:301px;cursor:pointer;
                                                  +	display:none;
                                                  +}
                                                  +.upload_files_list_box .attachment{
                                                  +	margin-left:15px;display:block;line-height:25px;position:relative;
                                                  +	cursor:pointer;width:251px;height:25px;padding:0px;
                                                  +}
                                                  +.upload_files_list_box .attachment .att-title{
                                                  +	display:inline-block;line-height:25px;position:relative;height:25px;margin:0px;float:left;
                                                  +}
                                                  +.upload_files_list_box .attachment .att-name{
                                                  +	width:150px;display:inline-block;line-height:25px;height:25px;margin:0px;float:left;
                                                  +	white-space:nowrap;text-overflow:ellipsis;-o-text-overflow:ellipsis;overflow:hidden;
                                                  +}
                                                  +.upload_files_list_box .attachment .del-att-icon{
                                                  +	position:absolute;
                                                  +	display: none;
                                                  +	top: 50%;
                                                  +	margin-top:-6px;
                                                  +	right: -20px;
                                                  +	cursor:pointer;
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +	background-position:-111px -198px;
                                                  +	width: 12px;
                                                  +	height: 12px;
                                                  +}
                                                  +.upload_files_list_box .loading{
                                                  +	position:absolute;
                                                  +	display: inline-block;
                                                  +	cursor:pointer;line-height:25px;height:25px;
                                                  +	background: url(./images/network/upload_loading.gif) no-repeat;
                                                  +	width: 16px;
                                                  +	height: 16px;
                                                  +	top:50%;margin-top:-8px;margin-left:20px;
                                                  +}
                                                  +.upload_files_list_box .loading-text{
                                                  +	display: inline-block;cursor:pointer;line-height:25px;height:25px;
                                                  +	position:relative;margin-left:50px;color:#c4bfbf;
                                                  +}
                                                  +.upload_files_list_box .attachment .del-att-icon:hover{
                                                  +	background-position: -129px -198px;
                                                  +}
                                                  +.message-box-wrap .message-menus .upload_files_list_box:hover .del-att-icon{
                                                  +	display: block;
                                                  +}
                                                  +.messages-list .att_r{
                                                  +	float: right;
                                                  +	margin-right: 5px;
                                                  +	display: inline;
                                                  +	position:relative;
                                                  +}
                                                  +.messages-list .sended-att{
                                                  +	min-height:25px;
                                                  +	line-height:25px;
                                                  +	min-width:100px;
                                                  +	cursor:pointer;
                                                  +	display:block;
                                                  +}
                                                  +.messages-list .sended-att .down-t{
                                                  +	display:inline-block;
                                                  +	color:blue;
                                                  +	text-decoration: underline;
                                                  +}
                                                  +.messages-list .att_l{
                                                  +	float: left;
                                                  +	margin-left: 5px;
                                                  +	display: inline;
                                                  +}
                                                  +	
                                                  +.message-box-wrap .message-menus .message-files{
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +	display:inline-block;
                                                  +	background-position:-225px -51px;
                                                  +	width:18px;height:16px;
                                                  +	position:absolute;
                                                  +	top:50%;margin-top:-6px;
                                                  +	left:20px;color:#956a6a;
                                                  +	cursor:pointer;
                                                  +}
                                                  +.message-box-wrap .message-menus .message-files .files-text{
                                                  +	height:25px;background:none;
                                                  +	line-height:25px;display:inline-block;
                                                  +	width:130px;
                                                  +	position:absolute;
                                                  +	right:-135px;top:-6px;
                                                  +}
                                                  +.message-box-wrap .message-menus .message-record{
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +	display:inline-block;
                                                  +	background-position:-255px -50px;
                                                  +	width:20px;height:18px;
                                                  +	position:absolute;
                                                  +	top:50%;margin-top:-9px;
                                                  +	right:100px;color:#956a6a;
                                                  +	cursor:pointer;
                                                  +}
                                                  +.message-box-wrap .message-menus .message-record:hover{
                                                  +	background-position:-287px -50px;
                                                  +}
                                                  +.message-box-wrap .message-menus .message-record .record-text{
                                                  +	height:25px;background:none;display:inline-block;
                                                  +	line-height:25px;
                                                  +	width:130px;
                                                  +	position:absolute;
                                                  +	right:-135px;top:-4px;
                                                  +}
                                                  +.message-box-wrap .talking-box{
                                                  +	height:87px;
                                                  +}
                                                  +.message-box-wrap .talking-box textarea{
                                                  +	display:block;
                                                  +	border:0px;
                                                  +	margin:3px;
                                                  +	height:86px;
                                                  +	width:301px;
                                                  +	background:#fff;
                                                  +}
                                                  +.message-box-wrap .chat_btn{
                                                  +	background: #F3F3F3;
                                                  +	height: 24px;
                                                  +	_overflow: hidden;
                                                  +	border-top: 1px solid lightGrey;
                                                  +	position:relative;
                                                  +}
                                                  +.message-box-wrap .chat_btn .chat-com{
                                                  +	line-height: 24px;
                                                  +	color: #6a6a6a;
                                                  +	margin-left:5px;
                                                  +	display:inline-block;
                                                  +}
                                                  +.message-box-wrap .chat_btn .words_limit{
                                                  +	line-height: 24px;
                                                  +	color: #999;
                                                  +	display:inline-block;
                                                  +}
                                                  +.message-box-wrap .chat_btn .button{
                                                  +	line-height:20px;min-width: 30px;
                                                  +	position:absolute;
                                                  +	right:5px;top:50%;
                                                  +	margin-top:-11px;
                                                  +}
                                                  +#private-message-win .message-min-box{
                                                  +	position:fixed;
                                                  +	width:232px;
                                                  +	height:22px;
                                                  +	bottom:0px;
                                                  +	right:130px;
                                                  +	z-index:20;
                                                  +	border: 1px solid #AFAFAF;
                                                  +	cursor: pointer;
                                                  +	background: #FAFAFA;
                                                  +	background: -moz-linear-gradient(#FAFAFA, #ebeaea);
                                                  +	background: -webkit-linear-gradient(#FAFAFA, #ebeaea);
                                                  +	background: linear-gradient(#FAFAFA, #ebeaea);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( GradientType = 0,startColorstr = '#FAFAFA', 
                                                  +	 endColorstr = '#ebeaea' );
                                                  +	-ms-filter: "progid:DXImageTransform.Microsoft.gradient( GradientType = 0,startColorstr = '#FAFAFA', 
                                                  +	 endColorstr = '#ebeaea' )";
                                                  +	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
                                                  +	
                                                  +	-moz-border-radius: 3px 3px 0px 0px;
                                                  +	-webkit-border-radius: 3px 3px 0px 0px;
                                                  +	-ms-border-radius: 3px 3px 0px 0px;
                                                  +	-o-border-radius: 3px 3px 0px 0px;
                                                  +	border-radius: 3px 3px 0px 0px;
                                                  +}
                                                  +#private-message-win .message-min-box .talk-icon{
                                                  +	background:transparent url(./images/network/talk-icons.png) no-repeat;
                                                  +	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
                                                  +	width: 16px;
                                                  +	height: 16px;
                                                  +	display:block;
                                                  +	position: absolute;
                                                  +	left: 5px;
                                                  +	top:50%;
                                                  +	margin-top:-8px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +#private-message-win .message-min-box .max-icon{
                                                  +	background:transparent url(./images/network/message-icons.png) no-repeat;
                                                  +	width: 16px;
                                                  +	height: 16px;
                                                  +	display:block;
                                                  +	background-position:0px -36px;
                                                  +	position: absolute;
                                                  +	right: 10px;
                                                  +	top:50%;
                                                  +	margin-top:-8px;
                                                  +	cursor: pointer;
                                                  +	opacity:0.5;
                                                  +	filter:alpha(opacity=50);
                                                  +}
                                                  +#private-message-win .message-min-box .talker-name{
                                                  +	height:22px;
                                                  +	line-height:22px;
                                                  +	color: #0082CD;
                                                  +	display:inline-block;
                                                  +	position: absolute;
                                                  +	left: 30px;
                                                  +	top:0px;
                                                  +	text-align:left;
                                                  +	width:170px;
                                                  +	_overflow: hidden;
                                                  +	overflow:hidden;
                                                  +}
                                                  +#private-message-win .message-min-box:hover{
                                                  +	background: #E0E0E0;
                                                  +	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2);
                                                  +}
                                                  +#private-message-win .message-min-box.shar0{
                                                  +	background: #d79999;
                                                  +	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2);
                                                  +}
                                                  +#private-message-win .message-min-box:hover .max-icon{
                                                  +	opacity:1;
                                                  +	filter:alpha(opacity=100);
                                                  +}
                                                  +/******************私信end*********************************/
                                                  +
                                                  +/****************************************************** new chart designer dialog******************************************/
                                                  +#dialog_new_diagram .item-container{
                                                  +	float:left;text-align:center;font-size:12px; color:#333;margin:10px 0px 0px 8px; width:132px;padding:5px 5px 0px 5px; height:170px;cursor: pointer;
                                                  +}
                                                  +#dialog_new_diagram .item-container:hover{
                                                  +	background-color:#F0F0F0;
                                                  +}
                                                  +#dialog_new_diagram .item-container.template_selected{
                                                  +	background-color:#63ABF7;color:#FFFFFF;
                                                  +}
                                                  +#dialog_new_diagram .item-container.template_selected:hover{
                                                  +	background-color:#63ABF7;
                                                  +}
                                                  +#dialog_new_diagram .item-container div{
                                                  +	border:1px solid #ccc; width:130px; height:130px;margin-bottom:5px;background:#ffffff;
                                                  +}
                                                  +#dialog_new_diagram .item-container div img{
                                                  +	border:0px;width:130px; height:130px
                                                  +}
                                                  +#dialog_new_diagram .top-tip{
                                                  +	height:28px;line-height:28px;padding-left:10px;background:#eeeeee;float:left;font-size:12px;font-family:Arial, Helvetica, sans-serif;
                                                  +}
                                                  +.template-category{
                                                  +	width:100%; margin:0px;padding:0px; list-style:none
                                                  +}
                                                  +.template-category li{
                                                  +	height:40px; line-height:40px;border-bottom:1px solid #CEDAE1;font-family:Arial, Helvetica, sans-serif;cursor:pointer;padding-left:8px;
                                                  +}
                                                  +.template-category li.current{
                                                  +	background:url(images/designer/smooth_item-selected.png) no-repeat right center; color:#ffffff;border-bottom:0px;margin-right:-16px;
                                                  +}
                                                  +/****************************************************** new chart designer dialog**********END********************************/
                                                  +/*feed back*/
                                                  +#feedback_sendbtn{
                                                  +	position:fixed;bottom:0px;right:-1px;
                                                  +}
                                                  +#feedback_sendContent{
                                                  +	position:fixed;bottom:-300px;right:-310px;background:#FFFFFF;
                                                  +	
                                                  +}
                                                  +#feedback_sendContent td{
                                                  +	margin:0px;
                                                  +	padding:0px;
                                                  +}   
                                                  +#feedback_sendContent h2{
                                                  +    border-bottom: 1px solid #EEEEEE;
                                                  +    color: #53637D;
                                                  +    font-size: 15px;
                                                  +    font-weight: bold;
                                                  +    margin: 8px 0px 8px 8px;
                                                  +    padding-bottom: 5px;
                                                  +    padding-top: 2px;
                                                  +    text-shadow: 0 1px 2px white;
                                                  +}
                                                  +/*gototop*/
                                                  +.scrolltop{
                                                  +	position: fixed;display:none;
                                                  +	bottom: 60px;
                                                  +	right: 20px;
                                                  +	width: 51px;
                                                  +	height: 55px;
                                                  +	line-height: 40px;
                                                  +	background: white;
                                                  +	cursor: pointer;
                                                  +	z-index:99999;
                                                  +	background: url('/themes/default/images/icons/gotop.png') no-repeat;
                                                  +}
                                                  +.scrolltop:hover{
                                                  +	background-position: 0px -110px;
                                                  +}
                                                  +.small {
                                                  +	line-height: 22px!important;
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/global_zh.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/global_zh.css
                                                  new file mode 100644
                                                  index 00000000..571d5716
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/global_zh.css
                                                  @@ -0,0 +1,1561 @@
                                                  +@CHARSET "UTF-8";
                                                  +
                                                  +body{
                                                  +	margin:0px; padding:0px;
                                                  +	font-size:13px;
                                                  +}
                                                  +input,textarea{
                                                  +	resize:none;outline:none;font-size:13px;
                                                  +	font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
                                                  +}
                                                  +
                                                  +ul{
                                                  +	margin:0px;
                                                  +	padding:0px;
                                                  +	list-style:none;
                                                  +}
                                                  +
                                                  +a{
                                                  +	font-size:13px;
                                                  +	text-decoration:none;
                                                  +	color: #4183C4;
                                                  +	cursor: pointer;
                                                  +}
                                                  +a:hover, a:active {
                                                  +	text-decoration: none;
                                                  +}
                                                  +.badge.notification_badge{
                                                  +	display: none;
                                                  +}
                                                  +img:-moz-broken{ 
                                                  +	-moz-force-broken-image-icon:1; 
                                                  +	border: 0px;
                                                  +}
                                                  +.transition_0_2{
                                                  +	-webkit-transition: all 0.2s ease-in-out;
                                                  +	-moz-transition: all 0.2s ease-in-out;
                                                  +	-o-transition: all 0.2s ease-in-out;
                                                  +	transition: all 0.2s ease-in-out;
                                                  +}
                                                  +/**Button*/
                                                  +.button:visited, .button:hover, .button:active {
                                                  +	text-decoration: none;
                                                  +}
                                                  +.button[type=button]{
                                                  +	padding: 4px 10px; line-height: 20px;
                                                  +}
                                                  +/*
                                                  +.button, .button:visited{
                                                  +	display: inline-block;
                                                  +	line-height:28px;
                                                  +	border: 1px solid #c6c6c6;
                                                  +	padding:0px 10px;
                                                  +	text-align: center;
                                                  +	background-color: #F8F8F8;
                                                  +	background-image: -webkit-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: -moz-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: -ms-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: -o-linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	background-image: linear-gradient(top, #f8f8f8, #f1f1f1);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f8f8f8', endColorstr='#f1f1f1',GradientType=0 );
                                                  +	color: #333;
                                                  +	cursor: pointer;
                                                  +	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
                                                  +	border-radius: 2px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-o-border-radius: 2px;
                                                  +	-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-moz-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	-ms-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	box-shadow: 0px 1px 1px rgba(0,0,0,.1);
                                                  +	min-width: 50px;
                                                  +}
                                                  +.button:hover{
                                                  +	background-color: #f3f3f3;
                                                  +	background-image: -webkit-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: -moz-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: -ms-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: -o-linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	background-image: linear-gradient(top, #f8f8f8, #e8e8e8);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f8f8f8', endColorstr='#e8e8e8',GradientType=0 );
                                                  +}
                                                  +.button.default,  .button.default:visited{
                                                  +	line-height:29px;
                                                  +	border: 0px;
                                                  +	padding:0px 10px;
                                                  +	text-align: center;
                                                  +	background-color: #2EB5E5;
                                                  +	text-decoration: none !important;
                                                  +	background-image: -moz-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -webkit-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -o-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -ms-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#34c0e9', endColorstr='#29aae1',GradientType=0 );
                                                  +	color: white;
                                                  +	cursor: pointer;
                                                  +	text-shadow: 0 1px 0 rgba(0, 0, 0, 0.35);
                                                  +	border-radius: 2px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-o-border-radius: 2px;
                                                  +	-webkit-box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	-moz-box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	min-width: 50px;
                                                  +}
                                                  +.button.default:hover,.button.default:hover {
                                                  +	background-color: #2EB5E5;
                                                  +	text-decoration: none;
                                                  +	background-image: -moz-linear-gradient(top, #34c0df, #29aad7);
                                                  +	background-image: -webkit-linear-gradient(top, #34c0df, #29aad7);
                                                  +	background-image: -o-linear-gradient(top, #34c0df, #29aad7);
                                                  +	background-image: -ms-linear-gradient(top, #34c0df, #29aad7);
                                                  +	background-image: linear-gradient(top, #34c0df, #29aad7);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#34c0df', endColorstr='#29aad7',GradientType=0 );
                                                  +}
                                                  +.button.default:disabled{
                                                  +	background-color: #48d4fd;
                                                  +	background-image: -moz-linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	background-image: -webkit-linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	background-image: -o-linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	background-image: -ms-linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	background-image: linear-gradient(top, #48d4fd, #3dbeeb);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#48d4fd', endColorstr='#3dbeeb',GradientType=0 );
                                                  +	box-shadow:  none;
                                                  +	text-shadow: none;
                                                  +	cursor: default;
                                                  +	color: #e6e6e6;
                                                  +}
                                                  +*/
                                                  +.button.green {
                                                  +	line-height:29px;
                                                  +	border: 0px;
                                                  +	padding:0px 10px;
                                                  +	text-align: center;
                                                  +	background-color: #62ab07;
                                                  +	text-decoration: none !important;
                                                  +	background-image: -moz-linear-gradient(top, #62ab07, #5da206);
                                                  +	background-image: -webkit-linear-gradient(top, #62ab07, #5da206);
                                                  +	background-image: -o-linear-gradient(top, #62ab07, #5da206);
                                                  +	background-image: -ms-linear-gradient(top, #62ab07, #5da206);
                                                  +	background-image: linear-gradient(top, #62ab07, #5da206);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#62ab07', endColorstr='#5da206',GradientType=0 );
                                                  +	color: white;
                                                  +	cursor: pointer;
                                                  +	text-shadow: 0 1px 0 rgba(0, 0, 0, 0.35);
                                                  +	border-radius: 2px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-o-border-radius: 2px;
                                                  +	-webkit-box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	-moz-box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	box-shadow:  0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	min-width: 50px;
                                                  +}
                                                  +.button.green:hover,.button.green:active {
                                                  +	background-color: #5da206;
                                                  +	text-decoration: none;
                                                  +	background-image: -moz-linear-gradient(top, #5da206, #599b06);
                                                  +	background-image: -webkit-linear-gradient(top, #5da206, #599b06);
                                                  +	background-image: -o-linear-gradient(top, #5da206, #599b06);
                                                  +	background-image: -ms-linear-gradient(top, #5da206, #599b06);
                                                  +	background-image: linear-gradient(top, #5da206, #599b06);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#5da206', endColorstr='#599b06',GradientType=0 );
                                                  +}
                                                  +.button.green:disabled{
                                                  +	background-color: #8a9f6f;
                                                  +	background-image: -moz-linear-gradient(top, #8a9f6f, #535c47);
                                                  +	background-image: -webkit-linear-gradient(top, #8a9f6f, #535c47);
                                                  +	background-image: -o-linear-gradient(top, #8a9f6f, #535c47);
                                                  +	background-image: -ms-linear-gradient(top, #8a9f6f, #535c47);
                                                  +	background-image: linear-gradient(top, #8a9f6f, #535c47);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#8a9f6f', endColorstr='#535c47',GradientType=0 );
                                                  +	box-shadow:  none;
                                                  +	text-shadow: none;
                                                  +	cursor: default;
                                                  +	color: #e6e6e6;
                                                  +}
                                                  +.btn_group{
                                                  +	display: inline-block;
                                                  +	line-height:30px;
                                                  +}
                                                  +.main_btns .button{
                                                  +	float: left;
                                                  +}
                                                  +.main_btns .btn_group{
                                                  +	float: left;
                                                  +}
                                                  +.btn_group .button{
                                                  +	border-left-width: 0px;
                                                  +	border-radius: 0px;
                                                  +	margin: 0px !important;
                                                  +	float: left;
                                                  +}
                                                  +.btn_group .button:first-child{
                                                  +	border-left-width: 1px;
                                                  +	border-top-left-radius: 2px;
                                                  +	border-bottom-left-radius: 2px;
                                                  +}
                                                  +.btn_group .button:last-child{
                                                  +	border-top-right-radius: 2px;
                                                  +	border-bottom-right-radius: 2px;
                                                  +}
                                                  +/***button END*******/
                                                  +.center{
                                                  +	margin:0px auto;
                                                  +}
                                                  +.main{
                                                  +	margin-top:15px;
                                                  +	background-color:#ffffff;
                                                  +	width:960px;
                                                  +	-moz-box-shadow:0px 1px 4px #DCDCDC;
                                                  +	-ms-box-shadow:0px 1px 4px #DCDCDC;
                                                  +	-o-box-shadow:0px 1px 4px #DCDCDC;
                                                  +	box-shadow:0px 1px 4px #DCDCDC;
                                                  +	min-height:600px;
                                                  +}
                                                  +/*输入框*/
                                                  +.txt{
                                                  +	border:1px solid #D9D9D9;border-top: 1px solid silver;
                                                  +	padding:5px;width:180px; background-color:#FFFFFF;
                                                  +	border-radius:2px;
                                                  +}
                                                  +.txt:hover{
                                                  +	border:1px solid #B8B8B8;border-top: 1px solid #A1A1A1;
                                                  +}
                                                  +.txt:focus{
                                                  +	border:1px solid #3da2ea;
                                                  +	box-shadow:inset 0px 1px 2px rgba(0,0,0,0.2);
                                                  +	-webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
                                                  +	-moz-transition: border linear 0.2s, box-shadow linear 0.2s;
                                                  +	-o-transition: border linear 0.2s, box-shadow linear 0.2s;
                                                  +	transition: border linear 0.2s, box-shadow linear 0.2s;
                                                  +}
                                                  +
                                                  +/*disable*/
                                                  +.disabled-mask{
                                                  +	position:absolute;z-index:102;background:white;
                                                  +	opacity:0; filter:alpha(opacity=0);
                                                  +}
                                                  +
                                                  +/**
                                                  + * 登录窗口
                                                  + */
                                                  +.loginWindow{
                                                  +	border-radius:5px;background:#ffffff;width:500px;height:310px;position:fixed;z-index:99999999999 !important;
                                                  +	box-shadow: 0 0 10px #25292B;
                                                  +}
                                                  +.loginWindow-content{
                                                  +	width:500px;height:300px;
                                                  +}
                                                  +
                                                  +.window-mask{
                                                  +	background:#FFFFFF;position:fixed;width:1000px;top:0px;left:0px;opacity:0.6; filter:alpha(opacity=60);
                                                  +	z-index:2;
                                                  +}
                                                  +
                                                  +.opacity{
                                                  +	opacity:0.5; filter:alpha(opacity=50) !important;
                                                  +	cursor:default;
                                                  +}
                                                  +.clear{
                                                  +	clear:both;
                                                  +}
                                                  +.radius6{
                                                  +	-moz-border-radius: 6px;
                                                  +	-webkit-border-radius: 6px;
                                                  +	-ms-border-radius: 6px;
                                                  +	-o-border-radius: 6px;
                                                  +	border-radius: 6px;
                                                  +}
                                                  +.radius5{
                                                  +	-moz-border-radius: 5px;
                                                  +	-webkit-border-radius: 5px;
                                                  +	-ms-border-radius: 5px;
                                                  +	-o-border-radius: 5px;
                                                  +	border-radius: 5px;
                                                  +}
                                                  +.radius4{
                                                  +	-moz-border-radius: 4px;
                                                  +	-webkit-border-radius: 4px;
                                                  +	-ms-border-radius: 4px;
                                                  +	-o-border-radius: 4px;
                                                  +	border-radius: 4px;
                                                  +}
                                                  +.radius3{
                                                  +	-moz-border-radius: 3px;
                                                  +	-webkit-border-radius: 3px;
                                                  +	-ms-border-radius: 3px;
                                                  +	-o-border-radius: 3px;
                                                  +	border-radius: 3px;
                                                  +}
                                                  +.radius2{
                                                  +	-moz-border-radius: 2px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-ms-border-radius: 2px;
                                                  +	-o-border-radius: 2px;
                                                  +	border-radius: 2px;
                                                  +}
                                                  +.no_radius6_bottom{
                                                  +	-moz-border-radius: 6px 6px 0px 0px;
                                                  +	-webkit-border-radius: 6px 6px 0px 0px;
                                                  +	-ms-border-radius: 6px 6px 0px 0px;
                                                  +	-o-border-radius: 6px 6px 0px 0px;
                                                  +	border-radius: 6px 6px 0px 0px;
                                                  +}
                                                  +.no_radius5_bottom{
                                                  +	-moz-border-radius: 5px 5px 0px 0px;
                                                  +	-webkit-border-radius: 5px 5px 0px 0px;
                                                  +	-ms-border-radius: 5px 5px 0px 0px;
                                                  +	-o-border-radius: 5px 5px 0px 0px;
                                                  +	border-radius: 5px 5px 0px 0px;
                                                  +}
                                                  +.no_radius4_bottom{
                                                  +	-moz-border-radius: 4px 4px 0px 0px;
                                                  +	-webkit-border-radius: 4px 4px 0px 0px;
                                                  +	-ms-border-radius: 4px 4px 0px 0px;
                                                  +	-o-border-radius: 4px 4px 0px 0px;
                                                  +	border-radius: 4px 4px 0px 0px;
                                                  +}
                                                  +.no_radius3_bottom{
                                                  +	-moz-border-radius: 3px 3px 0px 0px;
                                                  +	-webkit-border-radius: 3px 3px 0px 0px;
                                                  +	-ms-border-radius: 3px 3px 0px 0px;
                                                  +	-o-border-radius: 3px 3px 0px 0px;
                                                  +	border-radius: 3px 3px 0px 0px;
                                                  +}
                                                  +.no_radius2_bottom{
                                                  +	-moz-border-radius: 2px 2px 0px 0px;
                                                  +	-webkit-border-radius: 2px 2px 0px 0px;
                                                  +	-ms-border-radius: 2px 2px 0px 0px;
                                                  +	-o-border-radius: 2px 2px 0px 0px;
                                                  +	border-radius: 2px 2px 0px 0px;
                                                  +}
                                                  +.quick_local1{
                                                  +	margin:10px 25px;
                                                  +	padding:5px 10px;
                                                  +}
                                                  +.quick_local2{
                                                  +	padding:0px 7px 0px 7px;
                                                  +}
                                                  +.user_rating_icon{
                                                  +	width: 24px;height:24px;
                                                  +	display:inline-block;
                                                  +	background:url('/themes/default/images/icons/user_rating_star.png') no-repeat;
                                                  +}
                                                  +.noover{
                                                  +	overflow: hidden;
                                                  +	text-overflow: ellipsis;
                                                  +	white-space: nowrap;
                                                  +}
                                                  +.br{
                                                  +	word-break: break-all; word-wrap: break-word;
                                                  +}
                                                  +.shadow_1{
                                                  +	-ms-box-shadow: 0 2px 4px rgba(0,0,0,.2);
                                                  +	-o-box-shadow: 0 2px 4px rgba(0,0,0,.2);
                                                  +	-moz-box-shadow: -1px 1px 1px rgba(0,0,0,.2);
                                                  +	-webkit-box-shadow: 0 2px 4px rgba(0,0,0,.2);
                                                  +	box-shadow: 0 2px 4px rgba(0,0,0,.2);
                                                  +	border: 1px solid #BEBEBE;
                                                  +	background: #FFF;
                                                  +}
                                                  +.shadow_2{
                                                  +	box-shadow: 0 1px 3px rgba(34,25,25,0.3);
                                                  +	-moz-box-shadow: 0 1px 3px rgba(34,25,25,0.3);
                                                  +	-webkit-box-shadow: 0 1px 3px rgba(25,25,25,0.3);
                                                  +	-ms-box-shadow: 0 1px 3px rgba(25,25,25,0.3);
                                                  +	-khtml-box-shadow: 0 1px 3px rgba(25,25,25,0.3);
                                                  +}
                                                  +.text_shadow1{
                                                  +	text-shadow: 1px 1px 1px white;
                                                  +	-moz-text-shadow: 1px 1px 1px white;
                                                  +	-web-kittext-shadow: 1px 1px 1px white;
                                                  +	-ms-boxtext-shadow: 1px 1px 1px white;
                                                  +	-khtml-text-shadow: 1px 1px 1px white;
                                                  +}
                                                  +.close_icon{
                                                  +	float: right;
                                                  +	background: transparent url(images/common.png) 2px -98px no-repeat;
                                                  +	width: 16px;
                                                  +	height: 16px;
                                                  +	display: inline-block;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.no_select{
                                                  +   -moz-user-select: none;
                                                  +   -webkit-user-select: none; 
                                                  +   -ms-user-select: none; 
                                                  +   -khtml-user-select: none;
                                                  +}
                                                  +.label, .badge{
                                                  +	display: inline-block;
                                                  +	font-weight: bold;
                                                  +	line-height: 14px;
                                                  +	color: white;
                                                  +	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
                                                  +	white-space: nowrap;
                                                  +	background-color: #999;
                                                  +}
                                                  +.label{
                                                  +	padding: 2px 4px;
                                                  +	-webkit-border-radius: 3px;
                                                  +	-moz-border-radius: 3px;
                                                  +	border-radius: 3px;
                                                  +}
                                                  +.label.success{
                                                  +	background-color: #468847;
                                                  +}
                                                  +.label.warning{
                                                  +	background-color: #F89406;
                                                  +}
                                                  +.label.important{
                                                  +	background-color: #B94A48;
                                                  +}
                                                  +.label.info{
                                                  +	background-color: #3A87AD;
                                                  +}
                                                  +.label.info1{
                                                  +	background-color: lightblue;
                                                  +}
                                                  +.label.inverse{
                                                  +	background-color: #333;
                                                  +}
                                                  +.badge{
                                                  +	padding: 2px 9px;
                                                  +	-webkit-border-radius: 9px;
                                                  +	-moz-border-radius: 9px;
                                                  +	border-radius: 9px;
                                                  +}
                                                  +.badge.success{
                                                  +	background-color: #468847;
                                                  +}
                                                  +.badge.warning{
                                                  +	background-color: #F89406;
                                                  +}
                                                  +.badge.important{
                                                  +	background-color: #B94A48;
                                                  +}
                                                  +.badge.info{
                                                  +	background-color: #3A87AD;
                                                  +}
                                                  +.badge.inverse{
                                                  +	background-color: #333;
                                                  +}
                                                  +.nav_tabs{
                                                  +	border-bottom: 1px solid #DDD;
                                                  +}
                                                  +.nav_tabs a{
                                                  +	font-size: 14px;
                                                  +	margin: 0px 2px -1px 0px;
                                                  +	display: inline-block;
                                                  +	padding: 8px 12px;
                                                  +	border: 1px solid transparent;
                                                  +	border-bottom-color: #DDD;
                                                  +	-webkit-border-radius: 4px 4px 0 0;
                                                  +	-moz-border-radius: 4px 4px 0 0;
                                                  +	border-radius: 4px 4px 0 0;
                                                  +}
                                                  +.nav_tabs a:hover{
                                                  +	text-decoration: none;
                                                  +	background-color: #EEE;
                                                  +	color: #005580;
                                                  +}
                                                  +.nav_tabs .active{
                                                  +	color: #555;
                                                  +	cursor: default;
                                                  +	background-color: white;
                                                  +	border: 1px solid #DDD;
                                                  +	border-bottom-color: transparent;
                                                  +}
                                                  +.nav_tabs .active:hover{
                                                  +	background-color: white;
                                                  +	color: #555;
                                                  +}
                                                  +.alert{
                                                  +	color: #C09853;
                                                  +	padding: 8px 14px;
                                                  +	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
                                                  +	background-color: #FCF8E3;
                                                  +	border: 1px solid #FBEED5;
                                                  +	-webkit-border-radius: 4px;
                                                  +	-moz-border-radius: 4px;
                                                  +	border-radius: 4px;
                                                  +}
                                                  +.alert.error{
                                                  +	color: #B94A48;
                                                  +	background-color: #F2DEDE;
                                                  +	border-color: #EED3D7;
                                                  +}
                                                  +.alert.success{
                                                  +	color: #468847;
                                                  +	background-color: #DFF0D8;
                                                  +	border-color: #D6E9C6;
                                                  +}
                                                  +.alert.info{
                                                  +	color: #3A87AD;
                                                  +	background-color: #D9EDF7;
                                                  +	border-color: #BCE8F1;
                                                  +}
                                                  +.drop{
                                                  +	display:inline-block; width:10px;height:10px;
                                                  +	background:url(images/common.png) right center no-repeat;
                                                  +	background-position:-2px -151px;
                                                  +	margin-left: 2px;
                                                  +}
                                                  +
                                                  +/********************Header Styles*****************/
                                                  +#header {
                                                  +	height: 38px;
                                                  +	font-size: 16px;
                                                  +	color: white;
                                                  +	width: 100%;
                                                  +	position:fixed;z-index:2;
                                                  +	top:0px;
                                                  +	background:#4a4949;
                                                  +	-webkit-transition: height .3s ease-in-out;
                                                  +	  -o-transition: height .3s ease-in-out;
                                                  +	  -moz-transition: height .3s ease-in-out;
                                                  +	  transition: height .3s ease-in-out;
                                                  +	/* -moz-box-shadow: 0 0 5px rgba(0,0,0,0.5);
                                                  +	-o-box-shadow: 0 0 5px rgba(0,0,0,0.5);
                                                  +	-ms-box-shadow: 0 0 5px rgba(0,0,0,0.5);
                                                  +	box-shadow: 0 0 5px rgba(0,0,0,0.5); */
                                                  +}
                                                  +#header_nav{
                                                  +	/* width:960px; */height:38px;margin:0px auto;
                                                  +	height: 38px; line-height: 38px;
                                                  +	width: auto; margin-left: 10px;margin-right: 10px;
                                                  +}
                                                  +.header_nav_items{
                                                  +	float:left; height: 38px;
                                                  +}
                                                  +#header_nav .logo:hover{
                                                  +	text-decoration: none;
                                                  +}
                                                  +#header_nav .logo img{
                                                  +	vertical-align: middle;border:none;margin-top: 5px;
                                                  +}
                                                  +.header_nav_items a{
                                                  +	float:left;
                                                  +	display:inline-block;
                                                  +	height: 38px; line-height: 38px;
                                                  +}
                                                  +.header_nav_items .nav{
                                                  +	color:#fff;font-size:13px;
                                                  +	margin-left: 2px;
                                                  +	padding: 0px 10px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-o-border-radius: 2px;
                                                  +	-ms-border-radius: 2px;
                                                  +	border-radius: 2px;
                                                  +	margin-left: 10px;
                                                  +}
                                                  +#header_nav .nav:hover{
                                                  +	background-color:#000;
                                                  +	text-decoration:none;
                                                  +}
                                                  +#header_nav .header-user{
                                                  +	float:right; color:#fff;
                                                  +	cursor:pointer; padding:0px 8px;
                                                  +}
                                                  +#header_nav .header-user img{
                                                  +	margin-top:-4px;
                                                  +}
                                                  +#header_nav .header-user:hover{
                                                  +	/* background: #717171; */
                                                  +}
                                                  +#header_nav .header-user.droped{
                                                  +	/* background: #717171; */
                                                  +}
                                                  +#header_nav .header-user .drop{
                                                  +	background: url(images/common.png) -16px -177px no-repeat;
                                                  +	width:12px; height:13px; display:inline-block;
                                                  +}
                                                  +#header_nav .header-user .login{
                                                  +	color:#FFFFFF;
                                                  +	padding:3px 10px;
                                                  +}
                                                  +#header_nav .header-user .login:hover{
                                                  +	text-decoration: none;
                                                  +}
                                                  +#header_nav .header-op{
                                                  +	/* float: right;
                                                  +	margin-right:5px;
                                                  +	margin-top: 6px;
                                                  +	height: 25px; line-height: 25px;
                                                  +	padding: 0px 8px;	
                                                  +	background:#e6e6e6 url(images/bg_repeat.png) repeat-x;
                                                  +	box-shadow:1px 1px 1px #3A87AD;
                                                  +	background-color: #227fdf;
                                                  +	background-position: 0px -150px; */
                                                  +	
                                                  +	
                                                  +	float: right;
                                                  +	margin-right:5px;
                                                  +	margin-top: 6px;
                                                  +	height: 25px; line-height: 25px;
                                                  +	border: 0px;
                                                  +	padding: 0px 10px;
                                                  +	text-align: center;
                                                  +	background-color: #2EB5E5;
                                                  +	background-image: -moz-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -webkit-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -o-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: -ms-linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	background-image: linear-gradient(top, #34C0E9, #29AAE1);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#34c0e9', endColorstr='#29aae1',GradientType=0 );
                                                  +	color: white;
                                                  +	cursor: pointer;
                                                  +	text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
                                                  +	border-radius: 2px;
                                                  +	-webkit-border-radius: 2px;
                                                  +	-moz-border-radius: 2px;
                                                  +	-o-border-radius: 2px;
                                                  +	-webkit-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	-moz-box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.3);
                                                  +	min-width: 50px;
                                                  +}
                                                  +
                                                  +#header_nav .header-op a{
                                                  +  color:#fff;
                                                  +  font-weight: normal;
                                                  +}
                                                  +#header_nav .header-op span{
                                                  +	margin: 0px 2px;
                                                  +}
                                                  +
                                                  +#header_nav .photo{
                                                  +	display:block;
                                                  +	padding:2px 6px;height:20px;width:20px;
                                                  +}
                                                  +
                                                  +#header_user_menu{
                                                  +	top:36px !important;
                                                  +}
                                                  +#header_user_menu a{
                                                  +	display:block;font-size:13px;
                                                  +}
                                                  +#header_nav .badge{
                                                  +	float: right;margin: 4px 5px 0px 0px;
                                                  +}
                                                  +#p-bottom{
                                                  +	clear:both;
                                                  +	margin-top:5px;
                                                  +	height:25px;
                                                  +	line-height:25px;
                                                  +	text-align:center;
                                                  +	padding-bottom:30px;
                                                  +	padding-top:10px;
                                                  +}
                                                  +#p-bottom li{
                                                  +	display:inline;
                                                  +}
                                                  +#p-bottom a{
                                                  +	margin:0px 5px;
                                                  +}
                                                  +
                                                  +/********************Plugs Styles******************/
                                                  +.popmenu{
                                                  +	padding: 5px 0px;background: #ffffff;display:none;
                                                  +}
                                                  +.popmenu a{
                                                  +	 color: #333;
                                                  +}
                                                  +.popmenu li{
                                                  +	padding: 0px 20px; line-height: 30px; cursor: pointer;
                                                  +}
                                                  +.popmenu li:hover{
                                                  +	color: white;
                                                  +	/* background-color:#4183C4;
                                                  +	background-image: -moz-linear-gradient(top, #08C, #0077B3);
                                                  +	background-image: -webkit-linear-gradient(top, #08C, #0077B3);
                                                  +	background-image: -o-linear-gradient(top, #08C, #0077B3);
                                                  +	background-image: linear-gradient(to bottom, #08C, #0077B3); */
                                                  +	background-color: #2EB5E5;
                                                  +	text-shadow: 0 1px 0 rgba(0, 0, 0, 0.35);
                                                  +	background-repeat: repeat-x;
                                                  +}
                                                  +.popmenu li:hover a{
                                                  +	text-decoration: none;
                                                  +	color: white;
                                                  +}
                                                  +.popmenu li.split{
                                                  +	height: 1px;
                                                  +	margin: 9px 1px;
                                                  +	overflow: hidden;
                                                  +	background-color: #E5E5E5;
                                                  +	border-bottom: 1px solid white;
                                                  +}
                                                  +.popmenu li.split:hover{
                                                  +	background-color:#E5E5E5;
                                                  +	background-image: none;
                                                  +}
                                                  +
                                                  +/*Dialog*/
                                                  +.dialog_box{
                                                  +	position:fixed;
                                                  +	z-index:3;
                                                  +	background-color: white;
                                                  +	border: 1px solid #C0C2C4;
                                                  +	padding: 20px;
                                                  +	display: inline-block;
                                                  +	color: #5B636B;
                                                  +	-moz-box-shadow: 0 5px 15px 0 rgba(0,0,0,0.2);
                                                  +	-webkit-box-shadow: 0 5px 15px 0 rgba(0,0,0,0.2);
                                                  +	-o-box-shadow: 0 5px 15px 0 rgba(0,0,0,0.2);
                                                  +	-ms-box-shadow: 0 5px 15px 0 rgba(0,0,0,0.2);
                                                  +	box-shadow: 0 5px 15px 0 rgba(0,0,0,0.2);
                                                  +	-moz-border-radius:4px;
                                                  +	-webkit-border-radius:4px;
                                                  +	-o-border-radius:4px;
                                                  +	border-radius:4px;
                                                  +}
                                                  +
                                                  +.dialog_close{
                                                  +	background:transparent url(images/common-16.png) 0px -16px no-repeat;position:absolute;top:15px;right:15px;width:16px;height:16px;cursor:pointer;
                                                  +	display:none;
                                                  +}
                                                  +.dialog_close:hover{
                                                  +	background-position: 0px -32px;
                                                  +}
                                                  +.dialog_title{
                                                  +	text-align: left;
                                                  +	cursor:move;
                                                  +	font-size: 24px;
                                                  +	line-height: 26px;
                                                  +	color: #5B636B;
                                                  +	margin:0px 20px 20px 0px;
                                                  +	font-weight: 200;
                                                  +	-moz-user-select: none; 
                                                  +	-khtml-user-select: none; 
                                                  +	-webkit-user-select: none; 
                                                  +	-ms-user-select: none; 
                                                  +	-o-user-select: none; 
                                                  +	user-select: none;
                                                  +}
                                                  +
                                                  +/**菜单*/
                                                  +.popover {
                                                  +	position: absolute;
                                                  +	width:auto;
                                                  +}
                                                  +.popover .arrow {
                                                  +	background: url('/images/v4/common-32.png?19332') no-repeat;
                                                  +	width: 32px;
                                                  +	height: 32px;
                                                  +	overflow: hidden;
                                                  +	display: block;
                                                  +	position: absolute;
                                                  +	top: -32px;
                                                  +	left: 70px;
                                                  +	width: 32px;
                                                  +	height: 32px;
                                                  +	z-index: 2000;
                                                  +}
                                                  +
                                                  +#hover_tip{
                                                  +	position: absolute;  z-index:100000000000;
                                                  +	max-width: 250px;color: #fff;
                                                  +}
                                                  +#hover_tip .tip_arrow{
                                                  +	height: 6px;
                                                  +	background: url(images/common-16.png) center 0px no-repeat;
                                                  +}
                                                  +#hover_tip .tip_arrow.tip_right{
                                                  +	left: -6px;
                                                  +	top: 5px;
                                                  +	width: 6px;
                                                  +	height: 15px;
                                                  +	position: absolute;
                                                  +	background-position: -2px 0px;
                                                  +}
                                                  +#hover_tip .tip_arrow.tip_top{
                                                  +	bottom: -6px;
                                                  +	width: 100%;
                                                  +	position: absolute;
                                                  +	background-position: center -8px;
                                                  +}
                                                  +#hover_tip .tip_content{
                                                  +	padding: 5px 8px; font-size:12px;
                                                  +	background: #333;
                                                  +	background: rgba(50,50,50,.95);
                                                  +	word-wrap: break-word;
                                                  +	word-break: normal;
                                                  +}
                                                  +
                                                  +#global_confirm_window .msg{
                                                  +	max-width: 450px;
                                                  +	min-width: 250px;
                                                  +}
                                                  +#global_confirm_window .buttons{
                                                  +	padding:30px 0px 0px;
                                                  +	text-align:right;
                                                  +}
                                                  +
                                                  +#p_toolTip{
                                                  +	display:none;color:#666; max-width:280px;text-align:left;
                                                  +	border:1px solid #C9C9C9;
                                                  +	background:#FFFFFF; padding:5px;
                                                  +	position: absolute; line-height:160%;
                                                  +	z-index: 100000000000;
                                                  +	box-shadow: 4px 4px 8px #ccc;
                                                  +	min-height: 24px;
                                                  +}
                                                  +
                                                  +.suggest_menu{
                                                  +	border:1px solid #D9D9D9;border-top: 1px solid silver;
                                                  +	box-shadow: 3px 4px 8px #ccc;
                                                  +	background:white;
                                                  +	display:none;
                                                  +	list-style:none;
                                                  +}
                                                  +.suggest_menu .suggest_item{
                                                  +	padding: 5px; cursor:pointer;
                                                  +}
                                                  +.suggest_menu .suggest_item:hover{
                                                  +	background:#EEE;
                                                  +}
                                                  +.suggest_menu .selected{
                                                  +	background:#EEE;
                                                  +}
                                                  +
                                                  +.placeholder-lbl{
                                                  +	display:none;position:absolute; color:#C9C9C9;
                                                  +	cursor: text; overflow:hidden;
                                                  +}
                                                  +
                                                  +.pagination{
                                                  +	display: inline-block;
                                                  +}
                                                  +.pagination a{
                                                  +	display: inline-block;
                                                  +	float: left;
                                                  +	padding: 0 14px;
                                                  +	line-height: 38px;
                                                  +	text-align: center;
                                                  +	border-width: 1px 1px 1px 0px;
                                                  +	border-style: solid;
                                                  +	border-color: #ccc;
                                                  +	font-size:14px;
                                                  +	background-color: #FFF;
                                                  +}
                                                  +.pagination a:first-child{
                                                  +	border-radius: 3px 0 0 3px;
                                                  +	border-left: 1px solid #ccc;
                                                  +}
                                                  +.pagination a:last-child{
                                                  +	border-radius: 0 3px 3px 0;
                                                  +}
                                                  +.pagination a:hover{
                                                  +	background-color: whiteSmoke;
                                                  +	text-decoration: none;
                                                  +	color: #005580;
                                                  +}
                                                  +.pagination .disabled{
                                                  +	background-color: whiteSmoke;
                                                  +	color: #999;
                                                  +	cursor: default;
                                                  +}
                                                  +.pagination .disabled:hover{
                                                  +	color: #999;
                                                  +}
                                                  +.pagination .ellipsis{
                                                  +	background-color: #FFF;
                                                  +}
                                                  +.pagination .ellipsis:hover{
                                                  +	background-color: #FFF;
                                                  +}
                                                  +
                                                  +/**
                                                  +Slider Styles
                                                  +*/
                                                  +.slider_nav{
                                                  +	text-align: center; padding: 5px 0px;
                                                  +}
                                                  +.slider_nav span{
                                                  +	display:inline-block; width: 10px; height: 10px; cursor: pointer; margin-right: 5px;
                                                  +	background: url(images/icons/bullets.png); 
                                                  +}
                                                  +.slider_nav span.active{
                                                  +	background: url(images/icons/bullets.png) 0px -10px;
                                                  +}
                                                  +
                                                  +/* these 4 lines are the most important with respect to styling the control */
                                                  +.calendar{border:1px solid #aaa;background:#555;font-family:verdana;}
                                                  +.calendar table{color:#fff;}
                                                  +.calendar table td.hover{background:#ffc;color:#444;}
                                                  +.calendar .selected{border:1px dotted #999;}
                                                  +
                                                  +.calendar{overflow:auto;width:250px;height:175px;position:absolute;line-height:1em;border-radius:5px;-moz-user-select:none;-webkit-user-select: none;-khtml-user-select: none;user-select: none;}
                                                  +.calendar table{width:100%;height:100%;color:#fff;}
                                                  +.calendar table td{padding:3px;text-align:center;cursor:pointer;border-radius:2px;}
                                                  +
                                                  +/********************私信******************/
                                                  +#private-message-win ::-webkit-scrollbar {
                                                  +	width: 8px;
                                                  +	height: 8px;
                                                  +}
                                                  +#private-message-win ::-webkit-scrollbar-thumb {
                                                  +	border-width: 1px;
                                                  +	border-style: solid;
                                                  +	border-color: white;
                                                  +	border-radius: 6px;
                                                  +	background: #D7D7D7;
                                                  +}
                                                  +#private-message-win ::-webkit-scrollbar-track-piece {
                                                  +	width: 11px;
                                                  +	height: 11px;
                                                  +}
                                                  +#private-message-win{
                                                  +	position:fixed;
                                                  +	min-width:312px;
                                                  +	bottom:0px;
                                                  +	right:130px;
                                                  +	z-index:20;
                                                  +}
                                                  +#private-message-win .message-box-wrap{
                                                  +	padding:0px;
                                                  +	margin:0px;
                                                  +	height:389px;
                                                  +	width:100%;
                                                  +	position:relative;
                                                  +	background:#fff;
                                                  +	border: 1px solid #AFAFAF;
                                                  +	display:block;
                                                  +}
                                                  +.message-box-wrap a{
                                                  +	display: block;
                                                  +	font-weight: bold;
                                                  +	color: #666;
                                                  +	text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.9);
                                                  +	font-size: 13px;
                                                  +	text-decoration: none;
                                                  +	color: #4183C4;
                                                  +	cursor: pointer;
                                                  +	position:absolute;
                                                  +	left:5px;
                                                  +	top:-28px;
                                                  +}
                                                  +.message-box-wrap .img_shadow {
                                                  +	display: block;
                                                  +	position: absolute;
                                                  +	width: 48px;
                                                  +	height: 48px;
                                                  +	-webkit-box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3);
                                                  +	-moz-box-shadow: inset 0 0 3px rgba(0,0,0,0.3);
                                                  +	-o-box-shadow: inset 0 0 3px rgba(0,0,0,0.3);
                                                  +	box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3);
                                                  +}
                                                  +.message-box-wrap img {
                                                  +	width: 48px;
                                                  +	height: 48px;
                                                  +	-webkit-box-shadow: 0 1px 0 white;
                                                  +	-moz-box-shadow: 0 1px 0 #fff;
                                                  +	-o-box-shadow: 0 1px 0 #fff;
                                                  +	box-shadow: 0 1px 0 white;
                                                  +	margin-right: 5px;
                                                  +	float: left;
                                                  +	vertical-align: middle;
                                                  +}
                                                  +.message-box-wrap .name {
                                                  +	height: 23px;
                                                  +	line-height:23px;
                                                  +	float:left;
                                                  +	margin-top:28px;
                                                  +	display: table-cell;
                                                  +	vertical-align: middle;
                                                  +}
                                                  +.message-box-top{
                                                  +	position:relative;
                                                  +	width:100%;
                                                  +	height:23px;
                                                  +	top:0px;
                                                  +	left:0px;
                                                  +	
                                                  +	background: #FAFAFA;
                                                  +	background: -moz-linear-gradient(#FAFAFA, #E0E0E0);
                                                  +	background: -webkit-linear-gradient(#FAFAFA, #E0E0E0);
                                                  +	background: linear-gradient(#FAFAFA, #E0E0E0);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( GradientType = 0,startColorstr = '#FAFAFA', 
                                                  +	 endColorstr = '#E0E0E0' );
                                                  +	-ms-filter: "progid:DXImageTransform.Microsoft.gradient( GradientType = 0,startColorstr = '#FAFAFA', 
                                                  +	 endColorstr = '#E0E0E0' )";
                                                  +	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
                                                  +	display: block;
                                                  +	border-bottom: 1px solid #CCC;
                                                  +	text-decoration: none;
                                                  +	color: #222;
                                                  +	font-weight: bold;
                                                  +	line-height: 23px;
                                                  +	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.7);
                                                  +	border-left: 0 none;
                                                  +}
                                                  +.message-box-top span{
                                                  +	display:block;
                                                  +	width:16px;
                                                  +	height:16px;
                                                  +	position:absolute;
                                                  +	background:#ddd;
                                                  +	top:50%;
                                                  +	margin-top:-8px;
                                                  +}
                                                  +.message-box-top .message-box-size{
                                                  +	background:transparent url(./images/network/message-icons.png) no-repeat;
                                                  +	background-position:0px 0px;
                                                  +	right:30px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.message-box-top .message-box-size:hover{
                                                  +	background-position:0px -18px;
                                                  +}
                                                  +.message-box-top .message-box-remove{
                                                  +	background: transparent url(images/common-16.png) 0px -16px no-repeat;
                                                  +	position: absolute;
                                                  +	right: 10px;
                                                  +	width: 16px;
                                                  +	height: 16px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +.message-box-top .message-box-remove:hover{
                                                  +	background-position: 0px -32px;
                                                  +}
                                                  +.float-left{
                                                  +	float:left;
                                                  +}
                                                  +.message-box-wrap .message-mutlperson{
                                                  +	position:relative;
                                                  +	height:367px;
                                                  +	width:104px;
                                                  +	background: #F2F2F2;
                                                  +	_overflow: hidden;
                                                  +}
                                                  +.message-mutlperson .mess-scrolltop_n, .message-mutlperson .mess-scrollbtn_n{
                                                  +	width: 104px;
                                                  +	height: 20px;
                                                  +	display: block;
                                                  +	position: relative;
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +}
                                                  +.message-mutlperson .mess-scrolltop_n{
                                                  +	background-position: -360px -60px;
                                                  +	cursor:pointer;
                                                  +}
                                                  +.message-mutlperson .mess-scrollbtn_n{
                                                  +	background-position: -465px -60px;
                                                  +	cursor:pointer;
                                                  +}
                                                  +.message-mutlperson .mess-scrolltop_n:hover{
                                                  +	background-position: -360px -40px;
                                                  +}
                                                  +.message-mutlperson .mess-scrollbtn_n:hover{
                                                  +	background-position: -465px -40px;
                                                  +}
                                                  +.message-mutlperson .message-mutlperson-box{
                                                  +	height: 320px;
                                                  +	margin: 1px 0 4px;
                                                  +	overflow: hidden;
                                                  +	position: relative;
                                                  +	border-right: solid 1px #C9C9C9;
                                                  +}
                                                  +.message-mutlperson .message-mutlperson-box .person-list{
                                                  +	position: absolute;
                                                  +	top: 0;
                                                  +	width: 104px;
                                                  +	min-height: 320px;
                                                  +}
                                                  +.message-mutlperson-box .person-list li{
                                                  +	float: left;
                                                  +	cursor: pointer;
                                                  +	margin: 2px 0 0 0;
                                                  +	display: inline;
                                                  +	padding: 1px 1px 1px 2px;
                                                  +	width: 99px;
                                                  +	height: 28px;
                                                  +	zoom: 1;
                                                  +	overflow: hidden;
                                                  +	position: relative;
                                                  +	list-style: none;
                                                  +	text-align: -webkit-match-parent;
                                                  +}
                                                  +.message-mutlperson-box .person-list li::after{
                                                  +	content: "";
                                                  +	display: block;
                                                  +	overflow: hidden;
                                                  +	height: 0;
                                                  +	clear: both;
                                                  +}
                                                  +.person-list .person-active{
                                                  +	background: white;
                                                  +	width: 97px;
                                                  +	border-top: 1px solid #BBB;
                                                  +	border-bottom: 1px solid #BBB;
                                                  +	z-index: 3;
                                                  +	font-weight: bold;
                                                  +}
                                                  +.person-list li .list-head-state{
                                                  +	margin: 7px 5px 0 0;
                                                  +	float: left;
                                                  +	position: relative;
                                                  +}
                                                  +.person-list .person-active .list-head-state .person-icon{
                                                  +	background-position:-323px 0px;
                                                  +}
                                                  +.person-list li .list-head-state .person-icon{
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +	background-position:-258px 0px;
                                                  +	width:14px;height:16px;
                                                  +	/* background-color: #D4D4D4;
                                                  +	border-color: #B8B8B8;
                                                  +	width: 7px;
                                                  +	height: 7px;
                                                  +	border-width: 1px;
                                                  +	border-style: solid;
                                                  +	 */
                                                  +	
                                                  +	display: inline-block;
                                                  +	border-radius: 2px;
                                                  +	overflow: hidden;
                                                  +}
                                                  +.person-list li .person-name{
                                                  +	height: 30px;
                                                  +	width: 70px;
                                                  +	line-height: 30px;
                                                  +	float: left;
                                                  +	word-wrap: break-word;
                                                  +	word-break: break-all;
                                                  +	white-space: nowrap;
                                                  +	overflow: hidden;
                                                  +}
                                                  +.person-list li .person-close{
                                                  +	display: none;
                                                  +	position: absolute;
                                                  +	top: 10px;
                                                  +	left: 90px;
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +	background-position:-111px -198px;
                                                  +	width: 12px;
                                                  +	height: 12px;
                                                  +}
                                                  +.person-list li:hover .person-close{
                                                  +	display:block;
                                                  +}
                                                  +.person-list li .person-close:hover{
                                                  +	background-position: -129px -198px;
                                                  +}
                                                  +.message-box-wrap .message-content-wrap{
                                                  +	padding:0px;margin:0px;
                                                  +	height:auto;
                                                  +	width:312px;
                                                  +}
                                                  +.message-box-wrap .messages-content{
                                                  +	height:210px;color: #777;
                                                  +}
                                                  +.message-box-wrap .messages-content .messages-list{
                                                  +	height:210px;
                                                  +	overflow-y:auto;
                                                  +}
                                                  +.messages-list *{
                                                  +	padding:0px;
                                                  +	margin:0px;
                                                  +}
                                                  +.messages-list dl{
                                                  +	position:relative;
                                                  +	webkit-margin-before: 1em;
                                                  +	-webkit-margin-after: 1em;
                                                  +	-webkit-margin-start: 0px;
                                                  +	-webkit-margin-end: 0px;
                                                  +}
                                                  +.messages-list dl dd{
                                                  +	display: block;
                                                  +	clear: both;
                                                  +	-webkit-margin-start: 40px;
                                                  +}
                                                  +.messages-list .mb-msgl, .messages-content .mb_msg_g, .messages-content .mb_msg_err {
                                                  +	float: left;
                                                  +	margin-left: 5px;
                                                  +	display: inline;
                                                  +}
                                                  +.messages-list .mb-msgr{
                                                  +	float: right;
                                                  +	margin-right: 5px;
                                                  +	display: inline;
                                                  +	position:relative;
                                                  +}
                                                  +.messages-list .mb-msgr, .messages-list .mb-msgl, .messages-content .mb_msg_g, .messages-content .mb_msg_err {
                                                  +	max-width: 222px;
                                                  +	margin-bottom: 1px;
                                                  +}
                                                  +.messages-content .wbim_msgpos {
                                                  +	position: relative;
                                                  +	margin: 10px 5px 0px;
                                                  +}
                                                  +.messages-content .msg_box {
                                                  +	-moz-border-radius: 5px;
                                                  +	-webkit-border-radius: 5px;
                                                  +	border-radius: 5px;
                                                  +	padding: 5px 9px;
                                                  +	
                                                  +}
                                                  +.messages-content .msg_arr {
                                                  +	position: absolute;
                                                  +	width: 8px;
                                                  +	height: 12px;
                                                  +	z-index: 1;
                                                  +}
                                                  +.messages-content .msg_arr{
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +}
                                                  +.msg_box .msg_txt {
                                                  +	max-width: 222px;
                                                  +	line-height: 14px;
                                                  +	word-wrap: break-word;
                                                  +	word-break: break-all;
                                                  +}
                                                  +.msg_box p{
                                                  +	display: block;
                                                  +}
                                                  +.messages-content .mb-msgl .msg_time, .messages-content .mb_msg_g .msg_time, .messages-content .mb_msg_err .msg_time {
                                                  +	padding-left: 10px;
                                                  +}
                                                  +.wbim_msgpos .msg_time {
                                                  +	padding-bottom: 1px;
                                                  +}
                                                  +.mb-msgl .msg_box {
                                                  +	border: 1px solid #EAEAEA;
                                                  +	background: #F3F3F3;
                                                  +}
                                                  +.mb-msgl .msg_arr {
                                                  +	bottom: 10px;
                                                  +	left: -5px;
                                                  +	_left: -15px;
                                                  +	background-position: -70px -16px;
                                                  +}
                                                  +.mb-msgr .msg_time {
                                                  +	text-align: right;
                                                  +	padding-right: 10px;
                                                  +}
                                                  +.mb-msgr .msg_box {
                                                  +	border: 1px solid #DFF0D8;
                                                  +	background: #EBFBE3;
                                                  +}
                                                  +.mb-msgr .msg_arr {
                                                  +	bottom: 10px;
                                                  +	right: -5px;
                                                  +	background-position: -72px 0;
                                                  +}
                                                  +.messages-list .line{
                                                  +	width: 100%;
                                                  +	_width: 94%;
                                                  +	height: 11px;
                                                  +	overflow: hidden;
                                                  +	margin: 0 auto;
                                                  +	border-bottom:1px dotted #dedcdc;
                                                  +}
                                                  +.message-box-wrap .message-menus{
                                                  +	min-height:25px;
                                                  +	line-height:25px;
                                                  +	background:#f3f3f3;
                                                  +	margin-top:15px;
                                                  +	position:relative;
                                                  +	border-top:1px solid #f1f0f0;
                                                  +	border-bottom:1px solid #f1f0f0;
                                                  +}
                                                  +.message-box-wrap .message-menus .upload_files_list_box{
                                                  +	height:25px;
                                                  +	line-height:25px;
                                                  +	bottom:-28px;
                                                  +	position:absolute;
                                                  +	width:301px;cursor:pointer;
                                                  +	display:none;
                                                  +}
                                                  +.upload_files_list_box .attachment{
                                                  +	margin-left:15px;display:block;line-height:25px;position:relative;
                                                  +	cursor:pointer;width:251px;height:25px;padding:0px;
                                                  +}
                                                  +.upload_files_list_box .attachment .att-title{
                                                  +	display:inline-block;line-height:25px;position:relative;height:25px;margin:0px;float:left;
                                                  +}
                                                  +.upload_files_list_box .attachment .att-name{
                                                  +	width:150px;display:inline-block;line-height:25px;height:25px;margin:0px;float:left;
                                                  +	white-space:nowrap;text-overflow:ellipsis;-o-text-overflow:ellipsis;overflow:hidden;
                                                  +}
                                                  +.upload_files_list_box .attachment .del-att-icon{
                                                  +	position:absolute;
                                                  +	display: none;
                                                  +	top: 50%;
                                                  +	margin-top:-6px;
                                                  +	right: -20px;
                                                  +	cursor:pointer;
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +	background-position:-111px -198px;
                                                  +	width: 12px;
                                                  +	height: 12px;
                                                  +}
                                                  +.upload_files_list_box .loading{
                                                  +	position:absolute;
                                                  +	display: inline-block;
                                                  +	cursor:pointer;line-height:25px;height:25px;
                                                  +	background: url(./images/network/upload_loading.gif) no-repeat;
                                                  +	width: 16px;
                                                  +	height: 16px;
                                                  +	top:50%;margin-top:-8px;margin-left:20px;
                                                  +}
                                                  +.upload_files_list_box .loading-text{
                                                  +	display: inline-block;cursor:pointer;line-height:25px;height:25px;
                                                  +	position:relative;margin-left:50px;color:#c4bfbf;
                                                  +}
                                                  +.upload_files_list_box .attachment .del-att-icon:hover{
                                                  +	background-position: -129px -198px;
                                                  +}
                                                  +.message-box-wrap .message-menus .upload_files_list_box:hover .del-att-icon{
                                                  +	display: block;
                                                  +}
                                                  +.messages-list .att_r{
                                                  +	float: right;
                                                  +	margin-right: 5px;
                                                  +	display: inline;
                                                  +	position:relative;
                                                  +}
                                                  +.messages-list .sended-att{
                                                  +	min-height:25px;
                                                  +	line-height:25px;
                                                  +	min-width:100px;
                                                  +	cursor:pointer;
                                                  +	display:block;
                                                  +}
                                                  +.messages-list .sended-att .down-t{
                                                  +	display:inline-block;
                                                  +	color:blue;
                                                  +	text-decoration: underline;
                                                  +}
                                                  +.messages-list .att_l{
                                                  +	float: left;
                                                  +	margin-left: 5px;
                                                  +	display: inline;
                                                  +}
                                                  +	
                                                  +.message-box-wrap .message-menus .message-files{
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +	display:inline-block;
                                                  +	background-position:-225px -51px;
                                                  +	width:18px;height:16px;
                                                  +	position:absolute;
                                                  +	top:50%;margin-top:-6px;
                                                  +	left:20px;color:#956a6a;
                                                  +	cursor:pointer;
                                                  +}
                                                  +.message-box-wrap .message-menus .message-files .files-text{
                                                  +	height:25px;background:none;
                                                  +	line-height:25px;display:inline-block;
                                                  +	width:130px;
                                                  +	position:absolute;
                                                  +	right:-135px;top:-6px;
                                                  +}
                                                  +.message-box-wrap .message-menus .message-record{
                                                  +	background: url(./images/network/message-box-icons.png) no-repeat;
                                                  +	display:inline-block;
                                                  +	background-position:-255px -50px;
                                                  +	width:20px;height:18px;
                                                  +	position:absolute;
                                                  +	top:50%;margin-top:-9px;
                                                  +	right:100px;color:#956a6a;
                                                  +	cursor:pointer;
                                                  +}
                                                  +.message-box-wrap .message-menus .message-record:hover{
                                                  +	background-position:-287px -50px;
                                                  +}
                                                  +.message-box-wrap .message-menus .message-record .record-text{
                                                  +	height:25px;background:none;display:inline-block;
                                                  +	line-height:25px;
                                                  +	width:130px;
                                                  +	position:absolute;
                                                  +	right:-135px;top:-4px;
                                                  +}
                                                  +.message-box-wrap .talking-box{
                                                  +	height:87px;
                                                  +}
                                                  +.message-box-wrap .talking-box textarea{
                                                  +	display:block;
                                                  +	border:0px;
                                                  +	margin:3px;
                                                  +	height:86px;
                                                  +	width:301px;
                                                  +	background:#fff;
                                                  +}
                                                  +.message-box-wrap .chat_btn{
                                                  +	background: #F3F3F3;
                                                  +	height: 24px;
                                                  +	_overflow: hidden;
                                                  +	border-top: 1px solid lightGrey;
                                                  +	position:relative;
                                                  +}
                                                  +.message-box-wrap .chat_btn .chat-com{
                                                  +	line-height: 24px;
                                                  +	color: #6a6a6a;
                                                  +	margin-left:5px;
                                                  +	display:inline-block;
                                                  +}
                                                  +.message-box-wrap .chat_btn .words_limit{
                                                  +	line-height: 24px;
                                                  +	color: #999;
                                                  +	display:inline-block;
                                                  +}
                                                  +.message-box-wrap .chat_btn .button{
                                                  +	line-height:20px;min-width: 30px;
                                                  +	position:absolute;
                                                  +	right:5px;top:50%;
                                                  +	margin-top:-11px;
                                                  +}
                                                  +#private-message-win .message-min-box{
                                                  +	position:fixed;
                                                  +	width:232px;
                                                  +	height:22px;
                                                  +	bottom:0px;
                                                  +	right:130px;
                                                  +	z-index:20;
                                                  +	border: 1px solid #AFAFAF;
                                                  +	cursor: pointer;
                                                  +	background: #FAFAFA;
                                                  +	background: -moz-linear-gradient(#FAFAFA, #ebeaea);
                                                  +	background: -webkit-linear-gradient(#FAFAFA, #ebeaea);
                                                  +	background: linear-gradient(#FAFAFA, #ebeaea);
                                                  +	filter: progid:DXImageTransform.Microsoft.gradient( GradientType = 0,startColorstr = '#FAFAFA', 
                                                  +	 endColorstr = '#ebeaea' );
                                                  +	-ms-filter: "progid:DXImageTransform.Microsoft.gradient( GradientType = 0,startColorstr = '#FAFAFA', 
                                                  +	 endColorstr = '#ebeaea' )";
                                                  +	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
                                                  +	
                                                  +	-moz-border-radius: 3px 3px 0px 0px;
                                                  +	-webkit-border-radius: 3px 3px 0px 0px;
                                                  +	-ms-border-radius: 3px 3px 0px 0px;
                                                  +	-o-border-radius: 3px 3px 0px 0px;
                                                  +	border-radius: 3px 3px 0px 0px;
                                                  +}
                                                  +#private-message-win .message-min-box .talk-icon{
                                                  +	background:transparent url(./images/network/talk-icons.png) no-repeat;
                                                  +	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
                                                  +	width: 16px;
                                                  +	height: 16px;
                                                  +	display:block;
                                                  +	position: absolute;
                                                  +	left: 5px;
                                                  +	top:50%;
                                                  +	margin-top:-8px;
                                                  +	cursor: pointer;
                                                  +}
                                                  +#private-message-win .message-min-box .max-icon{
                                                  +	background:transparent url(./images/network/message-icons.png) no-repeat;
                                                  +	width: 16px;
                                                  +	height: 16px;
                                                  +	display:block;
                                                  +	background-position:0px -36px;
                                                  +	position: absolute;
                                                  +	right: 10px;
                                                  +	top:50%;
                                                  +	margin-top:-8px;
                                                  +	cursor: pointer;
                                                  +	opacity:0.5;
                                                  +	filter:alpha(opacity=50);
                                                  +}
                                                  +#private-message-win .message-min-box .talker-name{
                                                  +	height:22px;
                                                  +	line-height:22px;
                                                  +	color: #0082CD;
                                                  +	display:inline-block;
                                                  +	position: absolute;
                                                  +	left: 30px;
                                                  +	top:0px;
                                                  +	text-align:left;
                                                  +	width:170px;
                                                  +	_overflow: hidden;
                                                  +	overflow:hidden;
                                                  +}
                                                  +#private-message-win .message-min-box:hover{
                                                  +	background: #E0E0E0;
                                                  +	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2);
                                                  +}
                                                  +#private-message-win .message-min-box.shar0{
                                                  +	background: #d79999;
                                                  +	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2);
                                                  +}
                                                  +#private-message-win .message-min-box:hover .max-icon{
                                                  +	opacity:1;
                                                  +	filter:alpha(opacity=100);
                                                  +}
                                                  +/******************私信end*********************************/
                                                  +
                                                  +/****************************************************** new chart designer dialog******************************************/
                                                  +#dialog_new_diagram .item-container{
                                                  +	float:left;text-align:center; color:#333;margin:10px 0px 0px 8px; width:132px;padding:5px 5px 0px 5px; height:170px;cursor: pointer;
                                                  +}
                                                  +#dialog_new_diagram .item-container:hover{
                                                  +	background-color:#F0F0F0;
                                                  +}
                                                  +#dialog_new_diagram .item-container.template_selected{
                                                  +	background-color:#63ABF7;color:#FFFFFF;
                                                  +}
                                                  +#dialog_new_diagram .item-container.template_selected:hover{
                                                  +	background-color:#63ABF7;
                                                  +}
                                                  +#dialog_new_diagram .item-container div{
                                                  +	border:1px solid #ccc; width:130px; height:130px;margin-bottom:5px;background:#ffffff;
                                                  +}
                                                  +#dialog_new_diagram .item-container div img{
                                                  +	border:0px;width:130px; height:130px
                                                  +}
                                                  +#dialog_new_diagram .top-tip{
                                                  +	height:28px;line-height:28px;padding-left:10px;background:#eeeeee;float:left;font-family:Arial, Helvetica, sans-serif;
                                                  +}
                                                  +.template-category{
                                                  +	width:100%; margin:0px;padding:0px; list-style:none
                                                  +}
                                                  +.template-category li{
                                                  +	height:40px; line-height:40px;border-bottom:1px solid #CEDAE1;font-family:Arial, Helvetica, sans-serif;cursor:pointer;padding-left:8px;
                                                  +}
                                                  +.template-category li.current{
                                                  +	background:url(images/designer/smooth_item-selected.png) no-repeat right center; color:#ffffff;border-bottom:0px;margin-right:-16px;
                                                  +}
                                                  +/****************************************************** new chart designer dialog**********END********************************/
                                                  +/*feed back*/
                                                  +#feedback_sendbtn{
                                                  +	position:fixed;bottom:0px;right:-1px;
                                                  +}
                                                  +#feedback_sendContent{
                                                  +	position:fixed;bottom:-300px;right:-310px;background:#FFFFFF;
                                                  +	
                                                  +}
                                                  +#feedback_sendContent td{
                                                  +	margin:0px;
                                                  +	padding:0px;
                                                  +}   
                                                  +#feedback_sendContent h2{
                                                  +    border-bottom: 1px solid #EEEEEE;
                                                  +    color: #53637D;
                                                  +    font-size: 15px;
                                                  +    font-weight: bold;
                                                  +    margin: 8px 0px 8px 8px;
                                                  +    padding-bottom: 5px;
                                                  +    padding-top: 2px;
                                                  +    text-shadow: 0 1px 2px white;
                                                  +}
                                                  +/*gototop*/
                                                  +.scrolltop{
                                                  +	position: fixed;display:none;
                                                  +	bottom: 60px;
                                                  +	right: 20px;
                                                  +	width: 51px;
                                                  +	height: 55px;
                                                  +	line-height: 40px;
                                                  +	background: white;
                                                  +	cursor: pointer;
                                                  +	z-index:99999;
                                                  +	background: url('/themes/default/images/icons/gotop.png') no-repeat;
                                                  +}
                                                  +.scrolltop:hover{
                                                  +	background-position: 0px -110px;;
                                                  +}
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/404.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/404.gif
                                                  new file mode 100644
                                                  index 00000000..e3206dc6
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/404.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/404.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/404.png
                                                  new file mode 100644
                                                  index 00000000..c547ddee
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/404.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error.png
                                                  new file mode 100644
                                                  index 00000000..5219793b
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error2.png
                                                  new file mode 100644
                                                  index 00000000..8fff9ddd
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error2.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error3.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error3.png
                                                  new file mode 100644
                                                  index 00000000..cee06bf3
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error3.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error33.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error33.png
                                                  new file mode 100644
                                                  index 00000000..d1e6b17e
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error33.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error333.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error333.png
                                                  new file mode 100644
                                                  index 00000000..da7c0873
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/404/error333.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/bg_repeat.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/bg_repeat.png
                                                  new file mode 100644
                                                  index 00000000..ac5f485f
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/bg_repeat.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/canvas_bg.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/canvas_bg.jpg
                                                  new file mode 100644
                                                  index 00000000..bed2eca0
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/canvas_bg.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/charts/actions.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/charts/actions.png
                                                  new file mode 100644
                                                  index 00000000..1d98fd1a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/charts/actions.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/charts/close-bar-h.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/charts/close-bar-h.png
                                                  new file mode 100644
                                                  index 00000000..bdb89571
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/charts/close-bar-h.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/charts/close-bar.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/charts/close-bar.png
                                                  new file mode 100644
                                                  index 00000000..525a123f
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/charts/close-bar.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/charts/dock-icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/charts/dock-icons.png
                                                  new file mode 100644
                                                  index 00000000..bcf4246d
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/charts/dock-icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/collaboration-invite.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/collaboration-invite.png
                                                  new file mode 100644
                                                  index 00000000..27687a14
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/collaboration-invite.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/collapse.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/collapse.png
                                                  new file mode 100644
                                                  index 00000000..5ed2c2be
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/collapse.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common-16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common-16.png
                                                  new file mode 100644
                                                  index 00000000..e07968d1
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common-16.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common-16.psd b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common-16.psd
                                                  new file mode 100644
                                                  index 00000000..1c23af61
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common-16.psd differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common.png
                                                  new file mode 100644
                                                  index 00000000..86f91e9b
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/bar_background.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/bar_background.png
                                                  new file mode 100644
                                                  index 00000000..c1e00fa5
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/bar_background.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/body-bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/body-bg.png
                                                  new file mode 100644
                                                  index 00000000..94fb7277
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/body-bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/common-32.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/common-32.png
                                                  new file mode 100644
                                                  index 00000000..b20430b9
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/common-32.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/home_css_sprite.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/home_css_sprite.png
                                                  new file mode 100644
                                                  index 00000000..1ddda524
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/home_css_sprite.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/icon2-8.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/icon2-8.png
                                                  new file mode 100644
                                                  index 00000000..02c188f7
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/icon2-8.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/icon24.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/icon24.png
                                                  new file mode 100644
                                                  index 00000000..98d0b260
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/icon24.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/nsidebar_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/nsidebar_bg.png
                                                  new file mode 100644
                                                  index 00000000..769f2f47
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/cankao/nsidebar_bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/dot.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/dot.png
                                                  new file mode 100644
                                                  index 00000000..857b02bb
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/dot.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/highlight.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/highlight.png
                                                  new file mode 100644
                                                  index 00000000..949f01ba
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/highlight.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/wash-gray.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/wash-gray.png
                                                  new file mode 100644
                                                  index 00000000..03255de1
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/wash-gray.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/wash-white-30.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/wash-white-30.png
                                                  new file mode 100644
                                                  index 00000000..b70e0c2f
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/common/wash-white-30.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/cursor_hand.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/cursor_hand.png
                                                  new file mode 100644
                                                  index 00000000..5e637634
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/cursor_hand.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/data-attr-icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/data-attr-icons.png
                                                  new file mode 100644
                                                  index 00000000..860841d9
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/data-attr-icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer-collaboration-box.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer-collaboration-box.png
                                                  new file mode 100644
                                                  index 00000000..5b5bdac9
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer-collaboration-box.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/arrow_style.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/arrow_style.png
                                                  new file mode 100644
                                                  index 00000000..1840fdf8
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/arrow_style.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/arrow_style_bak.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/arrow_style_bak.png
                                                  new file mode 100644
                                                  index 00000000..1e787afb
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/arrow_style_bak.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/arrow_suggest.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/arrow_suggest.png
                                                  new file mode 100644
                                                  index 00000000..497b57fa
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/arrow_suggest.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/bg_gradient.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/bg_gradient.png
                                                  new file mode 100644
                                                  index 00000000..dc58f961
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/bg_gradient.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/brush3-16.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/brush3-16.png
                                                  new file mode 100644
                                                  index 00000000..ebbcde0a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/brush3-16.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/data-attr-icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/data-attr-icons.png
                                                  new file mode 100644
                                                  index 00000000..860841d9
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/data-attr-icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/designer-32.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/designer-32.png
                                                  new file mode 100644
                                                  index 00000000..ae1b760e
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/designer-32.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/designer.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/designer.png
                                                  new file mode 100644
                                                  index 00000000..89b724f3
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/designer.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/file-menu-bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/file-menu-bg.png
                                                  new file mode 100644
                                                  index 00000000..819bbee6
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/file-menu-bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/gray_icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/gray_icons.png
                                                  new file mode 100644
                                                  index 00000000..c657a17a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/gray_icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/loading.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/loading.gif
                                                  new file mode 100644
                                                  index 00000000..2b482dfc
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/loading.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/note.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/note.png
                                                  new file mode 100644
                                                  index 00000000..68c5938f
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/note.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/smooth_item-selected.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/smooth_item-selected.png
                                                  new file mode 100644
                                                  index 00000000..09c27212
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/smooth_item-selected.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/tab-bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/tab-bg.png
                                                  new file mode 100644
                                                  index 00000000..27a17d1a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/tab-bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/tool-icons.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/tool-icons.gif
                                                  new file mode 100644
                                                  index 00000000..e01daca9
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/tool-icons.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/tool-icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/tool-icons.png
                                                  new file mode 100644
                                                  index 00000000..4c331a74
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/tool-icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/tool-icons_backup.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/tool-icons_backup.png
                                                  new file mode 100644
                                                  index 00000000..55cc57da
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/tool-icons_backup.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/toolbar-icons.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/toolbar-icons.gif
                                                  new file mode 100644
                                                  index 00000000..069ff47f
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/toolbar-icons.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/toolbar-icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/toolbar-icons.png
                                                  new file mode 100644
                                                  index 00000000..478815d8
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/toolbar-icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/toolbar-item-bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/toolbar-item-bg.png
                                                  new file mode 100644
                                                  index 00000000..02f27678
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/toolbar-item-bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/white_arrow.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/white_arrow.png
                                                  new file mode 100644
                                                  index 00000000..5db2681d
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/white_arrow.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/zoom-icon.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/zoom-icon.png
                                                  new file mode 100644
                                                  index 00000000..29b9cf07
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/designer/zoom-icon.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/add-colla-person.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/add-colla-person.png
                                                  new file mode 100644
                                                  index 00000000..8b110ae8
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/add-colla-person.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/canvas_bg.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/canvas_bg.jpg
                                                  new file mode 100644
                                                  index 00000000..bed2eca0
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/canvas_bg.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/collaboration-invite.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/collaboration-invite.png
                                                  new file mode 100644
                                                  index 00000000..27687a14
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/collaboration-invite.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/cursor_hand.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/cursor_hand.png
                                                  new file mode 100644
                                                  index 00000000..5e637634
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/cursor_hand.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/data-attr-icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/data-attr-icons.png
                                                  new file mode 100644
                                                  index 00000000..860841d9
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/data-attr-icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/designer-collaboration-box.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/designer-collaboration-box.png
                                                  new file mode 100644
                                                  index 00000000..5b5bdac9
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/designer-collaboration-box.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/google_sprite89.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/google_sprite89.png
                                                  new file mode 100644
                                                  index 00000000..a9baf48c
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/google_sprite89.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/icons.png
                                                  new file mode 100644
                                                  index 00000000..6372055d
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/icons.psd b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/icons.psd
                                                  new file mode 100644
                                                  index 00000000..5e850a1a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/icons.psd differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/icons_13.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/icons_13.png
                                                  new file mode 100644
                                                  index 00000000..1fcc241a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/icons_13.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/icons_disabled.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/icons_disabled.png
                                                  new file mode 100644
                                                  index 00000000..44718628
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/icons_disabled.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/jfk_sprite94.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/jfk_sprite94.png
                                                  new file mode 100644
                                                  index 00000000..a22d65af
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/jfk_sprite94.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/open_chatting_icon.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/open_chatting_icon.png
                                                  new file mode 100644
                                                  index 00000000..4046b0a1
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/open_chatting_icon.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/rotate.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/rotate.gif
                                                  new file mode 100644
                                                  index 00000000..dafda16b
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/rotate.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/sprite.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/sprite.png
                                                  new file mode 100644
                                                  index 00000000..01c68ea3
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/sprite.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/sprite.psd b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/sprite.psd
                                                  new file mode 100644
                                                  index 00000000..b4bbb7dc
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/sprite.psd differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/sprite_disabled.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/sprite_disabled.png
                                                  new file mode 100644
                                                  index 00000000..9ff151bf
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/sprite_disabled.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/support_browsers_list.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/support_browsers_list.png
                                                  new file mode 100644
                                                  index 00000000..2bd9a522
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagraming/support_browsers_list.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/btn_icon.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/btn_icon.gif
                                                  new file mode 100644
                                                  index 00000000..c25a0e98
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/btn_icon.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/content_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/content_bg.png
                                                  new file mode 100644
                                                  index 00000000..c3aa9623
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/content_bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/diagrams.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/diagrams.png
                                                  new file mode 100644
                                                  index 00000000..b05a276c
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/diagrams.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/fav_empty.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/fav_empty.png
                                                  new file mode 100644
                                                  index 00000000..44d39503
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/fav_empty.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/folder_empty.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/folder_empty.png
                                                  new file mode 100644
                                                  index 00000000..0f2b9d7d
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/folder_empty.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/hover_on.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/hover_on.png
                                                  new file mode 100644
                                                  index 00000000..7983f212
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/hover_on.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/icons.png
                                                  new file mode 100644
                                                  index 00000000..65e17612
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/left_bg.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/left_bg.jpg
                                                  new file mode 100644
                                                  index 00000000..68166003
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/left_bg.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/right_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/right_bg.png
                                                  new file mode 100644
                                                  index 00000000..50217f9a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/right_bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/trash_empty.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/trash_empty.png
                                                  new file mode 100644
                                                  index 00000000..0c0c98a7
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/diagrams/trash_empty.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/box_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/box_bg.png
                                                  new file mode 100644
                                                  index 00000000..5b273741
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/box_bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/doc_icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/doc_icons.png
                                                  new file mode 100644
                                                  index 00000000..5101919e
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/doc_icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_EXCEL.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_EXCEL.png
                                                  new file mode 100644
                                                  index 00000000..d9d75e82
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_EXCEL.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_PDF.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_PDF.png
                                                  new file mode 100644
                                                  index 00000000..a015f2da
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_PDF.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_PPT.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_PPT.png
                                                  new file mode 100644
                                                  index 00000000..59b7720c
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_PPT.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_WORD.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_WORD.png
                                                  new file mode 100644
                                                  index 00000000..acae5573
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_WORD.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_other_File.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_other_File.png
                                                  new file mode 100644
                                                  index 00000000..6b32235b
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/event/show_other_File.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/expand.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/expand.png
                                                  new file mode 100644
                                                  index 00000000..48df60b0
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/expand.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/google_sprite89.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/google_sprite89.png
                                                  new file mode 100644
                                                  index 00000000..a9baf48c
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/google_sprite89.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/header/header_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/header/header_bg.png
                                                  new file mode 100644
                                                  index 00000000..75c1b6c4
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/header/header_bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/header/op.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/header/op.png
                                                  new file mode 100644
                                                  index 00000000..22e5bef9
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/header/op.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/bullets.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/bullets.png
                                                  new file mode 100644
                                                  index 00000000..a6787d7d
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/bullets.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/colla.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/colla.png
                                                  new file mode 100644
                                                  index 00000000..87dd4a25
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/colla.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/file.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/file.png
                                                  new file mode 100644
                                                  index 00000000..cec9cadb
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/file.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/logo.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/logo.png
                                                  new file mode 100644
                                                  index 00000000..9251971b
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/logo.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/main.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/main.png
                                                  new file mode 100644
                                                  index 00000000..8d0c6591
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/main.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/personal_network.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/personal_network.png
                                                  new file mode 100644
                                                  index 00000000..389fc0ed
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/personal_network.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/social.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/social.png
                                                  new file mode 100644
                                                  index 00000000..fc1e96ed
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/social.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/team.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/team.png
                                                  new file mode 100644
                                                  index 00000000..8f740465
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/home/team.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/icon-close2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/icon-close2.png
                                                  new file mode 100644
                                                  index 00000000..b0b350be
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/icon-close2.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/icons.psd b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/icons.psd
                                                  new file mode 100644
                                                  index 00000000..5e850a1a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/icons.psd differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/icons_13.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/icons_13.png
                                                  new file mode 100644
                                                  index 00000000..1fcc241a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/icons_13.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/icons_disabled.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/icons_disabled.png
                                                  new file mode 100644
                                                  index 00000000..44718628
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/icons_disabled.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/gr_custom-inputs.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/gr_custom-inputs.png
                                                  new file mode 100644
                                                  index 00000000..72d7a7c6
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/gr_custom-inputs.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/jquery_selectBox_arrow.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/jquery_selectBox_arrow.png
                                                  new file mode 100644
                                                  index 00000000..2796795f
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/jquery_selectBox_arrow.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/ms_visio.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/ms_visio.png
                                                  new file mode 100644
                                                  index 00000000..28fb2169
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/ms_visio.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/omg_bpmn_logo.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/omg_bpmn_logo.png
                                                  new file mode 100644
                                                  index 00000000..0e4d611a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/omg_bpmn_logo.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/processon_logo.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/processon_logo.png
                                                  new file mode 100644
                                                  index 00000000..49ce1cc4
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/processon_logo.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/ui-icons_888888_256x240.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/ui-icons_888888_256x240.png
                                                  new file mode 100644
                                                  index 00000000..5ba708c3
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/ui-icons_888888_256x240.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/visio_logo.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/visio_logo.png
                                                  new file mode 100644
                                                  index 00000000..3788455d
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/import/visio_logo.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/index/sprite.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/index/sprite.png
                                                  new file mode 100644
                                                  index 00000000..6708ac5c
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/index/sprite.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/index/tag_add.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/index/tag_add.png
                                                  new file mode 100644
                                                  index 00000000..5bf22ed3
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/index/tag_add.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/invite/gmail_icon48_48.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/invite/gmail_icon48_48.png
                                                  new file mode 100644
                                                  index 00000000..df42ce65
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/invite/gmail_icon48_48.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/invite/hotmail_icon48_48.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/invite/hotmail_icon48_48.png
                                                  new file mode 100644
                                                  index 00000000..fb6353c6
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/invite/hotmail_icon48_48.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/invite/invite_send_inv.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/invite/invite_send_inv.gif
                                                  new file mode 100644
                                                  index 00000000..8a57147d
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/invite/invite_send_inv.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/invite/yahoomail_icon48_48.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/invite/yahoomail_icon48_48.png
                                                  new file mode 100644
                                                  index 00000000..51b9b6b0
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/invite/yahoomail_icon48_48.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/jfk_sprite94.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/jfk_sprite94.png
                                                  new file mode 100644
                                                  index 00000000..a22d65af
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/jfk_sprite94.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/login/login_tour.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/login/login_tour.png
                                                  new file mode 100644
                                                  index 00000000..c02e5894
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/login/login_tour.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/meter-outline.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/meter-outline.png
                                                  new file mode 100644
                                                  index 00000000..b56061c5
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/meter-outline.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/birect_message_icon.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/birect_message_icon.png
                                                  new file mode 100644
                                                  index 00000000..b2f7c59e
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/birect_message_icon.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/bot_bg2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/bot_bg2.png
                                                  new file mode 100644
                                                  index 00000000..07609a4a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/bot_bg2.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/ico_check.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/ico_check.png
                                                  new file mode 100644
                                                  index 00000000..5cf0fe3c
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/ico_check.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/icon_options.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/icon_options.png
                                                  new file mode 100644
                                                  index 00000000..19374778
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/icon_options.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/icons.png
                                                  new file mode 100644
                                                  index 00000000..253a5b6e
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/lock.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/lock.png
                                                  new file mode 100644
                                                  index 00000000..a080fc0b
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/lock.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/lock_open.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/lock_open.png
                                                  new file mode 100644
                                                  index 00000000..fa7581c7
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/lock_open.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/man2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/man2.png
                                                  new file mode 100644
                                                  index 00000000..aadc1145
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/man2.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/message-box-icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/message-box-icons.png
                                                  new file mode 100644
                                                  index 00000000..6ec9fa3d
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/message-box-icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/message-icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/message-icons.png
                                                  new file mode 100644
                                                  index 00000000..58db39e6
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/message-icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/network-1.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/network-1.png
                                                  new file mode 100644
                                                  index 00000000..f635a734
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/network-1.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/network.psd b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/network.psd
                                                  new file mode 100644
                                                  index 00000000..6f5cb0e0
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/network.psd differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/private_icon.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/private_icon.png
                                                  new file mode 100644
                                                  index 00000000..b2c02bad
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/private_icon.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/sound.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/sound.png
                                                  new file mode 100644
                                                  index 00000000..d4102bb1
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/sound.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/talk-icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/talk-icons.png
                                                  new file mode 100644
                                                  index 00000000..eaaee607
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/talk-icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/upload_loading.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/upload_loading.gif
                                                  new file mode 100644
                                                  index 00000000..e846e1d6
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/network/upload_loading.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/performance.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/performance.png
                                                  new file mode 100644
                                                  index 00000000..22692a73
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/performance.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/filter_item_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/filter_item_bg.png
                                                  new file mode 100644
                                                  index 00000000..9ec9e54e
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/filter_item_bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/filters_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/filters_bg.png
                                                  new file mode 100644
                                                  index 00000000..50e8f18c
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/filters_bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/group_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/group_bg.png
                                                  new file mode 100644
                                                  index 00000000..3595b181
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/group_bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/popular_menu_.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/popular_menu_.png
                                                  new file mode 100644
                                                  index 00000000..0cb706af
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/popular_menu_.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/sad.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/sad.png
                                                  new file mode 100644
                                                  index 00000000..277e0536
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/popular/sad.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progress_bar.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progress_bar.gif
                                                  new file mode 100644
                                                  index 00000000..83c125bf
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progress_bar.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progress_bar.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progress_bar.png
                                                  new file mode 100644
                                                  index 00000000..b56061c5
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progress_bar.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progress_bar_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progress_bar_bg.png
                                                  new file mode 100644
                                                  index 00000000..658f4e89
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progress_bar_bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progress_bar_dog.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progress_bar_dog.png
                                                  new file mode 100644
                                                  index 00000000..e908330b
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progress_bar_dog.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progressbar_main_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progressbar_main_bg.png
                                                  new file mode 100644
                                                  index 00000000..990ae448
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/progressbar_main_bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/rotate.gif b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/rotate.gif
                                                  new file mode 100644
                                                  index 00000000..dafda16b
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/rotate.gif differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner1.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner1.png
                                                  new file mode 100644
                                                  index 00000000..0dd3923d
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner1.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner2.png
                                                  new file mode 100644
                                                  index 00000000..663c1b05
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner2.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner3.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner3.png
                                                  new file mode 100644
                                                  index 00000000..e657a6fe
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner3.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner4.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner4.png
                                                  new file mode 100644
                                                  index 00000000..fb28295b
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner4.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner5.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner5.png
                                                  new file mode 100644
                                                  index 00000000..945774fe
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner5.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner6.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner6.png
                                                  new file mode 100644
                                                  index 00000000..ead207d5
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/banner6.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg-tran.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg-tran.png
                                                  new file mode 100644
                                                  index 00000000..92bb9ca7
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg-tran.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg.jpg
                                                  new file mode 100644
                                                  index 00000000..578bfbaf
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg1.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg1.jpg
                                                  new file mode 100644
                                                  index 00000000..ce6c6da1
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg1.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg10.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg10.jpg
                                                  new file mode 100644
                                                  index 00000000..cc33df3a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg10.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg11.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg11.jpg
                                                  new file mode 100644
                                                  index 00000000..94177158
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg11.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg12.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg12.jpg
                                                  new file mode 100644
                                                  index 00000000..de68f682
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg12.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg13.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg13.jpg
                                                  new file mode 100644
                                                  index 00000000..a0c229c7
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg13.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg14.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg14.jpg
                                                  new file mode 100644
                                                  index 00000000..4abaf309
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg14.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg15.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg15.jpg
                                                  new file mode 100644
                                                  index 00000000..efabb852
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg15.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg16.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg16.jpg
                                                  new file mode 100644
                                                  index 00000000..d3bdc6af
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg16.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg2.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg2.jpg
                                                  new file mode 100644
                                                  index 00000000..13cd9db7
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg2.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg3.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg3.jpg
                                                  new file mode 100644
                                                  index 00000000..fdd6ea1b
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg3.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg4.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg4.jpg
                                                  new file mode 100644
                                                  index 00000000..585396f6
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg4.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg5.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg5.jpg
                                                  new file mode 100644
                                                  index 00000000..611b684c
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg5.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg6.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg6.jpg
                                                  new file mode 100644
                                                  index 00000000..13e31e4e
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg6.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg7.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg7.jpg
                                                  new file mode 100644
                                                  index 00000000..4e7be5df
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg7.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg8.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg8.jpg
                                                  new file mode 100644
                                                  index 00000000..18cbee33
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg8.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg9.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg9.jpg
                                                  new file mode 100644
                                                  index 00000000..b173d592
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/bg9.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/google.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/google.png
                                                  new file mode 100644
                                                  index 00000000..5b4d6c49
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/google.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/left.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/left.png
                                                  new file mode 100644
                                                  index 00000000..79a08e03
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/left.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/linkedin.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/linkedin.png
                                                  new file mode 100644
                                                  index 00000000..99ddb755
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/linkedin.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/login-bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/login-bg.png
                                                  new file mode 100644
                                                  index 00000000..315ea0c5
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/login-bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/oauth-buttons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/oauth-buttons.png
                                                  new file mode 100644
                                                  index 00000000..8b2e3602
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/oauth-buttons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/right.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/right.png
                                                  new file mode 100644
                                                  index 00000000..3abf51f5
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/right.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/title.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/title.png
                                                  new file mode 100644
                                                  index 00000000..a3d278f2
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/title.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/yahoo.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/yahoo.png
                                                  new file mode 100644
                                                  index 00000000..269dc408
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/signup/yahoo.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/sprite.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/sprite.png
                                                  new file mode 100644
                                                  index 00000000..ece67def
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/sprite.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/sprite.psd b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/sprite.psd
                                                  new file mode 100644
                                                  index 00000000..b4bbb7dc
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/sprite.psd differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/sprite_disabled.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/sprite_disabled.png
                                                  new file mode 100644
                                                  index 00000000..3fe1937b
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/sprite_disabled.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/bar.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/bar.png
                                                  new file mode 100644
                                                  index 00000000..720932c6
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/bar.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/bg_arrow.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/bg_arrow.png
                                                  new file mode 100644
                                                  index 00000000..6b4a169d
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/bg_arrow.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/bg_gray.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/bg_gray.png
                                                  new file mode 100644
                                                  index 00000000..51c826a2
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/bg_gray.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/change.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/change.png
                                                  new file mode 100644
                                                  index 00000000..0fe3aa52
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/change.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/close.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/close.png
                                                  new file mode 100644
                                                  index 00000000..c3684bff
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/close.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/dot.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/dot.png
                                                  new file mode 100644
                                                  index 00000000..4772da31
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/dot.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/labels.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/labels.png
                                                  new file mode 100644
                                                  index 00000000..ac41b839
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/labels.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/reg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/reg.png
                                                  new file mode 100644
                                                  index 00000000..ad978aaf
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/reg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/reg_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/reg_bg.png
                                                  new file mode 100644
                                                  index 00000000..a6246ecd
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/reg_bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/slider.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/slider.png
                                                  new file mode 100644
                                                  index 00000000..134d6227
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/slider.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/step2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/step2.png
                                                  new file mode 100644
                                                  index 00000000..22985445
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/step2.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/step3.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/step3.png
                                                  new file mode 100644
                                                  index 00000000..49f041de
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/start/step3.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/support_browsers_list.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/support_browsers_list.png
                                                  new file mode 100644
                                                  index 00000000..2bd9a522
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/support_browsers_list.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/tags/tag.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/tags/tag.png
                                                  new file mode 100644
                                                  index 00000000..bab2e468
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/tags/tag.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/teams/tran-bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/teams/tran-bg.png
                                                  new file mode 100644
                                                  index 00000000..e1b9c6bf
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/teams/tran-bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/tour/social.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/tour/social.png
                                                  new file mode 100644
                                                  index 00000000..523466a1
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/tour/social.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/tour/team.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/tour/team.png
                                                  new file mode 100644
                                                  index 00000000..7529f12e
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/tour/team.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/tour/web.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/tour/web.png
                                                  new file mode 100644
                                                  index 00000000..00e785b6
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/tour/web.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/content_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/content_bg.png
                                                  new file mode 100644
                                                  index 00000000..b9205643
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/content_bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/email_send.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/email_send.png
                                                  new file mode 100644
                                                  index 00000000..1c756427
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/email_send.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/colla.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/colla.png
                                                  new file mode 100644
                                                  index 00000000..135a2e67
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/colla.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/fav_empty.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/fav_empty.png
                                                  new file mode 100644
                                                  index 00000000..44d39503
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/fav_empty.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/folder_empty.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/folder_empty.png
                                                  new file mode 100644
                                                  index 00000000..0f2b9d7d
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/folder_empty.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/folder_grey.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/folder_grey.png
                                                  new file mode 100644
                                                  index 00000000..1ece88a6
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/folder_grey.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/folder_grey_256.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/folder_grey_256.png
                                                  new file mode 100644
                                                  index 00000000..4dcd7603
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/folder_grey_256.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/grid_header.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/grid_header.png
                                                  new file mode 100644
                                                  index 00000000..a2d041a7
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/grid_header.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/hdbg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/hdbg.png
                                                  new file mode 100644
                                                  index 00000000..90f25e0a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/hdbg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/pagebar_bg.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/pagebar_bg.png
                                                  new file mode 100644
                                                  index 00000000..ee2dc3ba
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/pagebar_bg.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/resources.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/resources.png
                                                  new file mode 100644
                                                  index 00000000..54c9d2f6
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/resources.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/toolbar.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/toolbar.png
                                                  new file mode 100644
                                                  index 00000000..e0959c5a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/toolbar.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/trash_empty.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/trash_empty.png
                                                  new file mode 100644
                                                  index 00000000..0c0c98a7
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/files/trash_empty.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/send_email.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/send_email.png
                                                  new file mode 100644
                                                  index 00000000..45694350
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/send_email.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/send_invite.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/send_invite.png
                                                  new file mode 100644
                                                  index 00000000..bc39cf6f
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/send_invite.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/share_update.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/share_update.png
                                                  new file mode 100644
                                                  index 00000000..49765e3a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/share_update.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/show_fun_arrows.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/show_fun_arrows.png
                                                  new file mode 100644
                                                  index 00000000..3757309b
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/show_fun_arrows.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/show_fun_arrows_r.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/show_fun_arrows_r.png
                                                  new file mode 100644
                                                  index 00000000..dc774df2
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/show_fun_arrows_r.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/totural_arrow.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/totural_arrow.png
                                                  new file mode 100644
                                                  index 00000000..310c4413
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/totural_arrow.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/tutorial.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/tutorial.png
                                                  new file mode 100644
                                                  index 00000000..b2a559ce
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/tutorial.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/user_box.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/user_box.png
                                                  new file mode 100644
                                                  index 00000000..22b90e45
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/user_box.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/user_menu.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/user_menu.png
                                                  new file mode 100644
                                                  index 00000000..77523a32
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/users/user_menu.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/attachment.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/attachment.png
                                                  new file mode 100644
                                                  index 00000000..e08bbaec
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/attachment.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/bg_header.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/bg_header.png
                                                  new file mode 100644
                                                  index 00000000..f1e6eef2
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/bg_header.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/chart.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/chart.png
                                                  new file mode 100644
                                                  index 00000000..1e1d01eb
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/chart.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/document_add.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/document_add.png
                                                  new file mode 100644
                                                  index 00000000..a074acc3
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/document_add.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/my-charts-folder.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/my-charts-folder.png
                                                  new file mode 100644
                                                  index 00000000..3c204bc3
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/my-charts-folder.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/my-charts-toolbar.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/my-charts-toolbar.png
                                                  new file mode 100644
                                                  index 00000000..919cb3f0
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/my-charts-toolbar.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/project_list_icon.jpg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/project_list_icon.jpg
                                                  new file mode 100644
                                                  index 00000000..bfc3bdc5
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/project_list_icon.jpg differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/workflow.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/workflow.png
                                                  new file mode 100644
                                                  index 00000000..4d8bb59f
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/themes/default/images/work/workflow.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/css/base.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/css/base.css
                                                  new file mode 100644
                                                  index 00000000..8a85f6b4
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/css/base.css
                                                  @@ -0,0 +1,3712 @@
                                                  +/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
                                                  +html {
                                                  +    font-family: sans-serif;
                                                  +    -ms-text-size-adjust: 100%;
                                                  +    -webkit-text-size-adjust: 100%;
                                                  +}
                                                  +/* �������?����֮�� www.lanrenzhijia.com */
                                                  +body {
                                                  +    margin: 0;
                                                  +}
                                                  +
                                                  +article,
                                                  +aside,
                                                  +details,
                                                  +figcaption,
                                                  +figure,
                                                  +footer,
                                                  +header,
                                                  +hgroup,
                                                  +main,
                                                  +nav,
                                                  +section,
                                                  +summary {
                                                  +    display: block;
                                                  +}
                                                  +
                                                  +audio,
                                                  +canvas,
                                                  +progress,
                                                  +video {
                                                  +    display: inline-block;
                                                  +    vertical-align: baseline;
                                                  +}
                                                  +
                                                  +audio:not([controls]) {
                                                  +    display: none;
                                                  +    height: 0;
                                                  +}
                                                  +
                                                  +[hidden],
                                                  +template {
                                                  +    display: none;
                                                  +}
                                                  +
                                                  +a {
                                                  +    background: transparent;
                                                  +}
                                                  +
                                                  +a:active,
                                                  +a:hover {
                                                  +    outline: 0;
                                                  +}
                                                  +
                                                  +abbr[title] {
                                                  +    border-bottom: 1px dotted;
                                                  +}
                                                  +
                                                  +b,
                                                  +strong {
                                                  +    font-weight: bold;
                                                  +}
                                                  +
                                                  +dfn {
                                                  +    font-style: italic;
                                                  +}
                                                  +
                                                  +h1 {
                                                  +    font-size: 2em;
                                                  +    margin: 0.67em 0;
                                                  +}
                                                  +
                                                  +mark {
                                                  +    background: #ff0;
                                                  +    color: #000;
                                                  +}
                                                  +
                                                  +small {
                                                  +    font-size: 80%;
                                                  +}
                                                  +
                                                  +sub,
                                                  +sup {
                                                  +    font-size: 75%;
                                                  +    line-height: 0;
                                                  +    position: relative;
                                                  +    vertical-align: baseline;
                                                  +}
                                                  +
                                                  +sup {
                                                  +    top: -0.5em;
                                                  +}
                                                  +
                                                  +sub {
                                                  +    bottom: -0.25em;
                                                  +}
                                                  +
                                                  +img {
                                                  +    border: 0;
                                                  +}
                                                  +
                                                  +svg:not(:root) {
                                                  +    overflow: hidden;
                                                  +}
                                                  +
                                                  +figure {
                                                  +    margin: 1em 40px;
                                                  +}
                                                  +
                                                  +hr {
                                                  +    -moz-box-sizing: content-box;
                                                  +    box-sizing: content-box;
                                                  +    height: 0;
                                                  +}
                                                  +
                                                  +pre {
                                                  +    overflow: auto;
                                                  +}
                                                  +
                                                  +code,
                                                  +kbd,
                                                  +pre,
                                                  +samp {
                                                  +    font-family: monospace, monospace;
                                                  +    font-size: 1em;
                                                  +}
                                                  +
                                                  +button,
                                                  +input,
                                                  +optgroup,
                                                  +select,
                                                  +textarea {
                                                  +    color: inherit;
                                                  +    font: inherit;
                                                  +    margin: 0;
                                                  +}
                                                  +
                                                  +button {
                                                  +    overflow: visible;
                                                  +}
                                                  +
                                                  +button,
                                                  +select {
                                                  +    text-transform: none;
                                                  +}
                                                  +
                                                  +button,
                                                  +html input[type="button"],
                                                  +input[type="reset"],
                                                  +input[type="submit"] {
                                                  +    -webkit-appearance: button;
                                                  +    cursor: pointer;
                                                  +}
                                                  +
                                                  +button[disabled],
                                                  +html input[disabled] {
                                                  +    cursor: default;
                                                  +}
                                                  +
                                                  +button::-moz-focus-inner,
                                                  +input::-moz-focus-inner {
                                                  +    border: 0;
                                                  +    padding: 0;
                                                  +}
                                                  +
                                                  +input {
                                                  +    line-height: normal;
                                                  +}
                                                  +
                                                  +input[type="checkbox"],
                                                  +input[type="radio"] {
                                                  +    box-sizing: border-box;
                                                  +    padding: 0;
                                                  +}
                                                  +
                                                  +input[type="number"]::-webkit-inner-spin-button,
                                                  +input[type="number"]::-webkit-outer-spin-button {
                                                  +    height: auto;
                                                  +}
                                                  +
                                                  +input[type="search"] {
                                                  +    -webkit-appearance: textfield;
                                                  +    -moz-box-sizing: content-box;
                                                  +    -webkit-box-sizing: content-box;
                                                  +    box-sizing: content-box;
                                                  +}
                                                  +
                                                  +input[type="search"]::-webkit-search-cancel-button,
                                                  +input[type="search"]::-webkit-search-decoration {
                                                  +    -webkit-appearance: none;
                                                  +}
                                                  +
                                                  +fieldset {
                                                  +    border: 1px solid #c0c0c0;
                                                  +    margin: 0 2px;
                                                  +    padding: 0.35em 0.625em 0.75em;
                                                  +}
                                                  +
                                                  +legend {
                                                  +    border: 0;
                                                  +    padding: 0;
                                                  +}
                                                  +
                                                  +textarea {
                                                  +    overflow: auto;
                                                  +}
                                                  +
                                                  +optgroup {
                                                  +    font-weight: bold;
                                                  +}
                                                  +
                                                  +table {
                                                  +    border-collapse: collapse;
                                                  +    border-spacing: 0;
                                                  +}
                                                  +
                                                  +td,
                                                  +th {
                                                  +    padding: 0;
                                                  +}
                                                  +
                                                  +
                                                  +*:before,
                                                  +*:after {
                                                  +    -webkit-box-sizing: border-box;
                                                  +    -moz-box-sizing: border-box;
                                                  +    box-sizing: border-box;
                                                  +}
                                                  +
                                                  +html {
                                                  +    font-size: 62.5%;
                                                  +    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
                                                  +}
                                                  +
                                                  +body {
                                                  +    font-family: 'Open Sans', sans-serif;
                                                  +    font-size: 13px;
                                                  +    line-height: 1.428571429;
                                                  +    color: #333333;
                                                  +    background-color: #ffffff;
                                                  +    overflow-x: hidden;
                                                  +}
                                                  +
                                                  +input,
                                                  +button,
                                                  +select,
                                                  +textarea {
                                                  +    font-family: inherit;
                                                  +    font-size: inherit;
                                                  +    line-height: inherit;
                                                  +}
                                                  +
                                                  +a {
                                                  +    color: #428bca;
                                                  +    text-decoration: none;
                                                  +}
                                                  +
                                                  +a:hover,
                                                  +a:focus {
                                                  +    color: #2a6496;
                                                  +    text-decoration: underline;
                                                  +}
                                                  +
                                                  +a:focus {
                                                  +    outline: thin dotted;
                                                  +    outline: 5px auto -webkit-focus-ring-color;
                                                  +    outline-offset: -2px;
                                                  +}
                                                  +
                                                  +figure {
                                                  +    margin: 0;
                                                  +}
                                                  +
                                                  +img {
                                                  +    vertical-align: middle;
                                                  +}
                                                  +
                                                  +.img-responsive {
                                                  +    display: block;
                                                  +    max-width: 100%;
                                                  +    height: auto;
                                                  +}
                                                  +
                                                  +.img-rounded {
                                                  +    border-radius: 6px;
                                                  +}
                                                  +
                                                  +.img-thumbnail {
                                                  +    padding: 4px;
                                                  +    line-height: 1.428571429;
                                                  +    background-color: #ffffff;
                                                  +    border: 1px solid #dddddd;
                                                  +    border-radius: 3px;
                                                  +    -webkit-transition: all 0.2s ease-in-out;
                                                  +    transition: all 0.2s ease-in-out;
                                                  +    display: inline-block;
                                                  +    max-width: 100%;
                                                  +    height: auto;
                                                  +}
                                                  +
                                                  +.img-circle {
                                                  +    border-radius: 50%;
                                                  +}
                                                  +
                                                  +hr {
                                                  +    margin-top: 18px;
                                                  +    margin-bottom: 18px;
                                                  +    border: 0;
                                                  +    border-top: 1px solid #e5e5e5;
                                                  +}
                                                  +
                                                  +.sr-only {
                                                  +    position: absolute;
                                                  +    width: 1px;
                                                  +    height: 1px;
                                                  +    margin: -1px;
                                                  +    padding: 0;
                                                  +    overflow: hidden;
                                                  +    clip: rect(0, 0, 0, 0);
                                                  +    border: 0;
                                                  +}
                                                  +
                                                  +h1,
                                                  +h2,
                                                  +h3,
                                                  +h4,
                                                  +h5,
                                                  +h6,
                                                  +.h1,
                                                  +.h2,
                                                  +.h3,
                                                  +.h4,
                                                  +.h5,
                                                  +.h6 {
                                                  +    font-family: 'Roboto Slab', serif;
                                                  +    font-weight: 500;
                                                  +    line-height: 1.1;
                                                  +    color: inherit;
                                                  +}
                                                  +
                                                  +h1 small,
                                                  +h2 small,
                                                  +h3 small,
                                                  +h4 small,
                                                  +h5 small,
                                                  +h6 small,
                                                  +.h1 small,
                                                  +.h2 small,
                                                  +.h3 small,
                                                  +.h4 small,
                                                  +.h5 small,
                                                  +.h6 small,
                                                  +h1 .small,
                                                  +h2 .small,
                                                  +h3 .small,
                                                  +h4 .small,
                                                  +h5 .small,
                                                  +h6 .small,
                                                  +.h1 .small,
                                                  +.h2 .small,
                                                  +.h3 .small,
                                                  +.h4 .small,
                                                  +.h5 .small,
                                                  +.h6 .small {
                                                  +    font-weight: normal;
                                                  +    line-height: 1;
                                                  +    color: #888888;
                                                  +}
                                                  +
                                                  +h1,
                                                  +.h1,
                                                  +h2,
                                                  +.h2,
                                                  +h3,
                                                  +.h3 {
                                                  +    margin-top: 18px;
                                                  +    margin-bottom: 9px;
                                                  +}
                                                  +
                                                  +h1 small,
                                                  +.h1 small,
                                                  +h2 small,
                                                  +.h2 small,
                                                  +h3 small,
                                                  +.h3 small,
                                                  +h1 .small,
                                                  +.h1 .small,
                                                  +h2 .small,
                                                  +.h2 .small,
                                                  +h3 .small,
                                                  +.h3 .small {
                                                  +    font-family: 'Roboto Slab', serif;
                                                  +    color: #666666;
                                                  +    font-size: 13px;
                                                  +    font-weight: 300;
                                                  +    margin-left: 10px;
                                                  +}
                                                  +
                                                  +h4,
                                                  +.h4,
                                                  +h5,
                                                  +.h5,
                                                  +h6,
                                                  +.h6 {
                                                  +    margin-top: 9px;
                                                  +    margin-bottom: 9px;
                                                  +}
                                                  +
                                                  +h4 small,
                                                  +.h4 small,
                                                  +h5 small,
                                                  +.h5 small,
                                                  +h6 small,
                                                  +.h6 small,
                                                  +h4 .small,
                                                  +.h4 .small,
                                                  +h5 .small,
                                                  +.h5 .small,
                                                  +h6 .small,
                                                  +.h6 .small {
                                                  +    font-size: 75%;
                                                  +}
                                                  +
                                                  +h1,
                                                  +.h1 {
                                                  +    font-size: 33px;
                                                  +}
                                                  +
                                                  +h2,
                                                  +.h2 {
                                                  +    font-size: 24px;
                                                  +    font-weight: 200;
                                                  +}
                                                  +
                                                  +h3,
                                                  +.h3 {
                                                  +    font-size: 23px;
                                                  +}
                                                  +
                                                  +h4,
                                                  +.h4 {
                                                  +    font-size: 17px;
                                                  +}
                                                  +
                                                  +h5,
                                                  +.h5 {
                                                  +    font-size: 13px;
                                                  +}
                                                  +
                                                  +h6,
                                                  +.h6 {
                                                  +    font-size: 12px;
                                                  +}
                                                  +
                                                  +p {
                                                  +    margin: 0 0 9px;
                                                  +}
                                                  +
                                                  +.lead {
                                                  +    margin-bottom: 18px;
                                                  +    font-size: 14px;
                                                  +    font-weight: 200;
                                                  +    line-height: 1.4;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .lead {
                                                  +        font-size: 19.5px;
                                                  +    }
                                                  +}
                                                  +
                                                  +small,
                                                  +.small {
                                                  +    font-size: 85%;
                                                  +}
                                                  +
                                                  +cite {
                                                  +    font-style: normal;
                                                  +}
                                                  +
                                                  +.text-left {
                                                  +    text-align: left;
                                                  +}
                                                  +
                                                  +.text-right {
                                                  +    text-align: right;
                                                  +}
                                                  +
                                                  +.text-center {
                                                  +    text-align: center;
                                                  +}
                                                  +
                                                  +.text-justify {
                                                  +    text-align: justify;
                                                  +}
                                                  +
                                                  +.text-muted {
                                                  +    color: #888888;
                                                  +}
                                                  +
                                                  +.text-primary {
                                                  +    color: #428bca;
                                                  +}
                                                  +
                                                  +a.text-primary:hover {
                                                  +    color: #3071a9;
                                                  +}
                                                  +
                                                  +.text-success {
                                                  +    color: #3c763d;
                                                  +}
                                                  +
                                                  +a.text-success:hover {
                                                  +    color: #2b542c;
                                                  +}
                                                  +
                                                  +.text-info {
                                                  +    color: #31708f;
                                                  +}
                                                  +
                                                  +a.text-info:hover {
                                                  +    color: #245269;
                                                  +}
                                                  +
                                                  +.text-warning {
                                                  +    color: #8a6d3b;
                                                  +}
                                                  +
                                                  +a.text-warning:hover {
                                                  +    color: #66512c;
                                                  +}
                                                  +
                                                  +.text-danger {
                                                  +    color: #a94442;
                                                  +}
                                                  +
                                                  +a.text-danger:hover {
                                                  +    color: #843534;
                                                  +}
                                                  +
                                                  +.bg-primary {
                                                  +    color: #fff;
                                                  +    background-color: #428bca;
                                                  +}
                                                  +
                                                  +a.bg-primary:hover {
                                                  +    background-color: #3071a9;
                                                  +}
                                                  +
                                                  +.bg-success {
                                                  +    background-color: #dff0d8;
                                                  +}
                                                  +
                                                  +a.bg-success:hover {
                                                  +    background-color: #c1e2b3;
                                                  +}
                                                  +
                                                  +.bg-info {
                                                  +    background-color: #d9edf7;
                                                  +}
                                                  +
                                                  +a.bg-info:hover {
                                                  +    background-color: #afd9ee;
                                                  +}
                                                  +
                                                  +.bg-warning {
                                                  +    background-color: #fcf8e3;
                                                  +}
                                                  +
                                                  +a.bg-warning:hover {
                                                  +    background-color: #f7ecb5;
                                                  +}
                                                  +
                                                  +.bg-danger {
                                                  +    background-color: #f2dede;
                                                  +}
                                                  +
                                                  +a.bg-danger:hover {
                                                  +    background-color: #e4b9b9;
                                                  +}
                                                  +
                                                  +.page-header {
                                                  +    padding-bottom: 8px;
                                                  +    margin: 36px 0 18px;
                                                  +    border-bottom: 1px solid #e5e5e5;
                                                  +}
                                                  +
                                                  +ul,
                                                  +ol {
                                                  +    margin-top: 0;
                                                  +    margin-bottom: 9px;
                                                  +    list-style-position: inside;
                                                  +}
                                                  +
                                                  +ul ul,
                                                  +ol ul,
                                                  +ul ol,
                                                  +ol ol {
                                                  +    margin-bottom: 0;
                                                  +}
                                                  +
                                                  +.list-unstyled {
                                                  +    padding-left: 0;
                                                  +    list-style: none;
                                                  +}
                                                  +
                                                  +.list-inline {
                                                  +    padding-left: 0;
                                                  +    list-style: none;
                                                  +}
                                                  +
                                                  +.list-inline > li {
                                                  +    display: inline-block;
                                                  +    padding-left: 5px;
                                                  +    padding-right: 5px;
                                                  +}
                                                  +
                                                  +.list-inline > li:first-child {
                                                  +    padding-left: 0;
                                                  +}
                                                  +
                                                  +dl {
                                                  +    margin-top: 0;
                                                  +    margin-bottom: 18px;
                                                  +}
                                                  +
                                                  +dt,
                                                  +dd {
                                                  +    line-height: 1.428571429;
                                                  +}
                                                  +
                                                  +dt {
                                                  +    font-weight: bold;
                                                  +}
                                                  +
                                                  +dd {
                                                  +    margin-left: 0;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .dl-horizontal dt {
                                                  +        float: left;
                                                  +        width: 160px;
                                                  +        clear: left;
                                                  +        text-align: right;
                                                  +        overflow: hidden;
                                                  +        text-overflow: ellipsis;
                                                  +        white-space: nowrap;
                                                  +    }
                                                  +
                                                  +    .dl-horizontal dd {
                                                  +        margin-left: 180px;
                                                  +    }
                                                  +}
                                                  +
                                                  +abbr[title],
                                                  +abbr[data-original-title] {
                                                  +    cursor: help;
                                                  +    border-bottom: 1px dotted #888888;
                                                  +}
                                                  +
                                                  +.initialism {
                                                  +    font-size: 90%;
                                                  +    text-transform: uppercase;
                                                  +}
                                                  +
                                                  +blockquote {
                                                  +    padding: 9px 18px;
                                                  +    margin: 0 0 18px;
                                                  +    font-size: 16.25px;
                                                  +    border-left: 5px solid #e5e5e5;
                                                  +}
                                                  +
                                                  +blockquote p:last-child,
                                                  +blockquote ul:last-child,
                                                  +blockquote ol:last-child {
                                                  +    margin-bottom: 0;
                                                  +}
                                                  +
                                                  +blockquote footer,
                                                  +blockquote small,
                                                  +blockquote .small {
                                                  +    display: block;
                                                  +    font-size: 80%;
                                                  +    line-height: 1.428571429;
                                                  +    color: #888888;
                                                  +}
                                                  +
                                                  +blockquote footer:before,
                                                  +blockquote small:before,
                                                  +blockquote .small:before {
                                                  +    content: '\2014 \00A0';
                                                  +}
                                                  +
                                                  +.blockquote-reverse,
                                                  +blockquote.pull-right {
                                                  +    padding-right: 15px;
                                                  +    padding-left: 0;
                                                  +    border-right: 5px solid #e5e5e5;
                                                  +    border-left: 0;
                                                  +    text-align: right;
                                                  +}
                                                  +
                                                  +.blockquote-reverse footer:before,
                                                  +blockquote.pull-right footer:before,
                                                  +.blockquote-reverse small:before,
                                                  +blockquote.pull-right small:before,
                                                  +.blockquote-reverse .small:before,
                                                  +blockquote.pull-right .small:before {
                                                  +    content: '';
                                                  +}
                                                  +
                                                  +.blockquote-reverse footer:after,
                                                  +blockquote.pull-right footer:after,
                                                  +.blockquote-reverse small:after,
                                                  +blockquote.pull-right small:after,
                                                  +.blockquote-reverse .small:after,
                                                  +blockquote.pull-right .small:after {
                                                  +    content: '\00A0 \2014';
                                                  +}
                                                  +
                                                  +blockquote:before,
                                                  +blockquote:after {
                                                  +    content: "";
                                                  +}
                                                  +
                                                  +address {
                                                  +    margin-bottom: 18px;
                                                  +    font-style: normal;
                                                  +    line-height: 1.428571429;
                                                  +}
                                                  +
                                                  +.hero {
                                                  +    background-color: #FAFAFA;
                                                  +    border-bottom: 1px solid #F1F1F1;
                                                  +    margin-bottom: 60px;
                                                  +    padding-bottom: 60px;
                                                  +}
                                                  +
                                                  +.gallery li {
                                                  +    max-width: 800px;
                                                  +    display: block;
                                                  +    float: left;
                                                  +    margin-right: 6px;
                                                  +}
                                                  +
                                                  +.hasActive .gallery li.active {
                                                  +    outline: 2px solid #FF0000;
                                                  +    outline-offset: -2px;
                                                  +}
                                                  +
                                                  +.gallery li img {
                                                  +    height: auto;
                                                  +    max-width: 100%;
                                                  +    display: block;
                                                  +}
                                                  +
                                                  +.features > ul li {
                                                  +    margin-bottom: 5px;
                                                  +}
                                                  +
                                                  +.pageHead {
                                                  +    margin-bottom: 60px;
                                                  +    margin-top: 60px;
                                                  +    text-align: center;
                                                  +}
                                                  +
                                                  +.pageHead .title {
                                                  +    font-size: 32px;
                                                  +    font-weight: bold;
                                                  +}
                                                  +@media (min-width: 768px) {
                                                  +    .pageHead .title {
                                                  +        font-family: 'Roboto Slab', serif;
                                                  +        font-size: 44px;
                                                  +        font-weight: 300;
                                                  +        margin: 0;
                                                  +    }
                                                  +}
                                                  +
                                                  +.pageHead .desc {
                                                  +    font-size: 14px;
                                                  +    margin: 10px 0 0;
                                                  +}
                                                  +
                                                  +.install > * {
                                                  +    margin-bottom: 40px;
                                                  +}
                                                  +
                                                  +.hero .install > *:last-child {
                                                  +    margin-bottom: 0;
                                                  +}
                                                  +.install > h2{
                                                  +    font-size: 24px;
                                                  +}
                                                  +@media (min-width: 768px) {
                                                  +    .install > h2 {
                                                  +        font-family: 'Roboto Slab', serif;
                                                  +        font-size: 31px;
                                                  +        font-weight: 400;
                                                  +        margin: 0 0 35px;
                                                  +    }
                                                  +}
                                                  +
                                                  +.install > h2 .btn {
                                                  +    font-family: 'Open Sans', sans-serif;
                                                  +}
                                                  +
                                                  +.install > * h2 {
                                                  +    font-family: 'Roboto Slab', serif;
                                                  +    font-weight: 200;
                                                  +    line-height: 1;
                                                  +    margin: 0 0 10px;
                                                  +}
                                                  +
                                                  +.install > * p {
                                                  +    color: #333333;
                                                  +    font-size: 13px;
                                                  +    margin: 0 0 20px;
                                                  +}
                                                  +
                                                  +.example {
                                                  +    padding-top: 60px;
                                                  +}
                                                  +
                                                  +.cSdemo > li {
                                                  +    height: 300px;
                                                  +}
                                                  +/* �������?����֮�� www.lanrenzhijia.com */
                                                  +.cSdemo > li .center {
                                                  +    width: 98%;
                                                  +    display: inline-block;
                                                  +    vertical-align: middle;
                                                  +}
                                                  +
                                                  +.cSdemo > li .h100 {
                                                  +    width: 1%;
                                                  +    display: inline-block;
                                                  +    vertical-align: middle;
                                                  +    height: 100%;
                                                  +}
                                                  +
                                                  +.container {
                                                  +    margin-right: auto;
                                                  +    margin-left: auto;
                                                  +    padding-left: 8px;
                                                  +    padding-right: 8px;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .container {
                                                  +        width: 736px;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media (min-width: 992px) {
                                                  +    .container {
                                                  +        width: 956px;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media (min-width: 1200px) {
                                                  +    .container {
                                                  +        width: 1156px;
                                                  +    }
                                                  +}
                                                  +
                                                  +.container-fluid {
                                                  +    margin-right: auto;
                                                  +    margin-left: auto;
                                                  +    padding-left: 8px;
                                                  +    padding-right: 8px;
                                                  +    max-width: 980px;
                                                  +}
                                                  +
                                                  +.row {
                                                  +    margin-left: -8px;
                                                  +    margin-right: -8px;
                                                  +}
                                                  +
                                                  +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
                                                  +    position: relative;
                                                  +    min-height: 1px;
                                                  +    padding-left: 8px;
                                                  +    padding-right: 8px;
                                                  +}
                                                  +
                                                  +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
                                                  +    float: left;
                                                  +}
                                                  +
                                                  +.col-xs-12 {
                                                  +    width: 100%;
                                                  +}
                                                  +
                                                  +.col-xs-11 {
                                                  +    width: 91.66666666666666%;
                                                  +}
                                                  +
                                                  +.col-xs-10 {
                                                  +    width: 83.33333333333334%;
                                                  +}
                                                  +
                                                  +.col-xs-9 {
                                                  +    width: 75%;
                                                  +}
                                                  +
                                                  +.col-xs-8 {
                                                  +    width: 66.66666666666666%;
                                                  +}
                                                  +
                                                  +.col-xs-7 {
                                                  +    width: 58.333333333333336%;
                                                  +}
                                                  +
                                                  +.col-xs-6 {
                                                  +    width: 50%;
                                                  +}
                                                  +
                                                  +.col-xs-5 {
                                                  +    width: 41.66666666666667%;
                                                  +}
                                                  +
                                                  +.col-xs-4 {
                                                  +    width: 33.33333333333333%;
                                                  +}
                                                  +
                                                  +.col-xs-3 {
                                                  +    width: 25%;
                                                  +}
                                                  +
                                                  +.col-xs-2 {
                                                  +    width: 16.666666666666664%;
                                                  +}
                                                  +
                                                  +.col-xs-1 {
                                                  +    width: 8.333333333333332%;
                                                  +}
                                                  +
                                                  +.col-xs-pull-12 {
                                                  +    right: 100%;
                                                  +}
                                                  +
                                                  +.col-xs-pull-11 {
                                                  +    right: 91.66666666666666%;
                                                  +}
                                                  +
                                                  +.col-xs-pull-10 {
                                                  +    right: 83.33333333333334%;
                                                  +}
                                                  +
                                                  +.col-xs-pull-9 {
                                                  +    right: 75%;
                                                  +}
                                                  +
                                                  +.col-xs-pull-8 {
                                                  +    right: 66.66666666666666%;
                                                  +}
                                                  +
                                                  +.col-xs-pull-7 {
                                                  +    right: 58.333333333333336%;
                                                  +}
                                                  +
                                                  +.col-xs-pull-6 {
                                                  +    right: 50%;
                                                  +}
                                                  +
                                                  +.col-xs-pull-5 {
                                                  +    right: 41.66666666666667%;
                                                  +}
                                                  +
                                                  +.col-xs-pull-4 {
                                                  +    right: 33.33333333333333%;
                                                  +}
                                                  +
                                                  +.col-xs-pull-3 {
                                                  +    right: 25%;
                                                  +}
                                                  +
                                                  +.col-xs-pull-2 {
                                                  +    right: 16.666666666666664%;
                                                  +}
                                                  +
                                                  +.col-xs-pull-1 {
                                                  +    right: 8.333333333333332%;
                                                  +}
                                                  +
                                                  +.col-xs-pull-0 {
                                                  +    right: 0%;
                                                  +}
                                                  +
                                                  +.col-xs-push-12 {
                                                  +    left: 100%;
                                                  +}
                                                  +
                                                  +.col-xs-push-11 {
                                                  +    left: 91.66666666666666%;
                                                  +}
                                                  +
                                                  +.col-xs-push-10 {
                                                  +    left: 83.33333333333334%;
                                                  +}
                                                  +
                                                  +.col-xs-push-9 {
                                                  +    left: 75%;
                                                  +}
                                                  +
                                                  +.col-xs-push-8 {
                                                  +    left: 66.66666666666666%;
                                                  +}
                                                  +
                                                  +.col-xs-push-7 {
                                                  +    left: 58.333333333333336%;
                                                  +}
                                                  +
                                                  +.col-xs-push-6 {
                                                  +    left: 50%;
                                                  +}
                                                  +
                                                  +.col-xs-push-5 {
                                                  +    left: 41.66666666666667%;
                                                  +}
                                                  +
                                                  +.col-xs-push-4 {
                                                  +    left: 33.33333333333333%;
                                                  +}
                                                  +
                                                  +.col-xs-push-3 {
                                                  +    left: 25%;
                                                  +}
                                                  +
                                                  +.col-xs-push-2 {
                                                  +    left: 16.666666666666664%;
                                                  +}
                                                  +
                                                  +.col-xs-push-1 {
                                                  +    left: 8.333333333333332%;
                                                  +}
                                                  +
                                                  +.col-xs-push-0 {
                                                  +    left: 0%;
                                                  +}
                                                  +
                                                  +.col-xs-offset-12 {
                                                  +    margin-left: 100%;
                                                  +}
                                                  +
                                                  +.col-xs-offset-11 {
                                                  +    margin-left: 91.66666666666666%;
                                                  +}
                                                  +
                                                  +.col-xs-offset-10 {
                                                  +    margin-left: 83.33333333333334%;
                                                  +}
                                                  +
                                                  +.col-xs-offset-9 {
                                                  +    margin-left: 75%;
                                                  +}
                                                  +
                                                  +.col-xs-offset-8 {
                                                  +    margin-left: 66.66666666666666%;
                                                  +}
                                                  +
                                                  +.col-xs-offset-7 {
                                                  +    margin-left: 58.333333333333336%;
                                                  +}
                                                  +
                                                  +.col-xs-offset-6 {
                                                  +    margin-left: 50%;
                                                  +}
                                                  +
                                                  +.col-xs-offset-5 {
                                                  +    margin-left: 41.66666666666667%;
                                                  +}
                                                  +
                                                  +.col-xs-offset-4 {
                                                  +    margin-left: 33.33333333333333%;
                                                  +}
                                                  +
                                                  +.col-xs-offset-3 {
                                                  +    margin-left: 25%;
                                                  +}
                                                  +
                                                  +.col-xs-offset-2 {
                                                  +    margin-left: 16.666666666666664%;
                                                  +}
                                                  +
                                                  +.col-xs-offset-1 {
                                                  +    margin-left: 8.333333333333332%;
                                                  +}
                                                  +
                                                  +.col-xs-offset-0 {
                                                  +    margin-left: 0%;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
                                                  +        float: left;
                                                  +    }
                                                  +
                                                  +    .col-sm-12 {
                                                  +        width: 100%;
                                                  +    }
                                                  +
                                                  +    .col-sm-11 {
                                                  +        width: 91.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-sm-10 {
                                                  +        width: 83.33333333333334%;
                                                  +    }
                                                  +
                                                  +    .col-sm-9 {
                                                  +        width: 75%;
                                                  +    }
                                                  +
                                                  +    .col-sm-8 {
                                                  +        width: 66.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-sm-7 {
                                                  +        width: 58.333333333333336%;
                                                  +    }
                                                  +
                                                  +    .col-sm-6 {
                                                  +        width: 50%;
                                                  +    }
                                                  +
                                                  +    .col-sm-5 {
                                                  +        width: 41.66666666666667%;
                                                  +    }
                                                  +
                                                  +    .col-sm-4 {
                                                  +        width: 33.33333333333333%;
                                                  +    }
                                                  +
                                                  +    .col-sm-3 {
                                                  +        width: 25%;
                                                  +    }
                                                  +
                                                  +    .col-sm-2 {
                                                  +        width: 16.666666666666664%;
                                                  +    }
                                                  +
                                                  +    .col-sm-1 {
                                                  +        width: 8.333333333333332%;
                                                  +    }
                                                  +
                                                  +    .col-sm-pull-12 {
                                                  +        right: 100%;
                                                  +    }
                                                  +
                                                  +    .col-sm-pull-11 {
                                                  +        right: 91.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-sm-pull-10 {
                                                  +        right: 83.33333333333334%;
                                                  +    }
                                                  +
                                                  +    .col-sm-pull-9 {
                                                  +        right: 75%;
                                                  +    }
                                                  +
                                                  +    .col-sm-pull-8 {
                                                  +        right: 66.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-sm-pull-7 {
                                                  +        right: 58.333333333333336%;
                                                  +    }
                                                  +
                                                  +    .col-sm-pull-6 {
                                                  +        right: 50%;
                                                  +    }
                                                  +
                                                  +    .col-sm-pull-5 {
                                                  +        right: 41.66666666666667%;
                                                  +    }
                                                  +
                                                  +    .col-sm-pull-4 {
                                                  +        right: 33.33333333333333%;
                                                  +    }
                                                  +
                                                  +    .col-sm-pull-3 {
                                                  +        right: 25%;
                                                  +    }
                                                  +
                                                  +    .col-sm-pull-2 {
                                                  +        right: 16.666666666666664%;
                                                  +    }
                                                  +
                                                  +    .col-sm-pull-1 {
                                                  +        right: 8.333333333333332%;
                                                  +    }
                                                  +
                                                  +    .col-sm-pull-0 {
                                                  +        right: 0%;
                                                  +    }
                                                  +
                                                  +    .col-sm-push-12 {
                                                  +        left: 100%;
                                                  +    }
                                                  +
                                                  +    .col-sm-push-11 {
                                                  +        left: 91.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-sm-push-10 {
                                                  +        left: 83.33333333333334%;
                                                  +    }
                                                  +
                                                  +    .col-sm-push-9 {
                                                  +        left: 75%;
                                                  +    }
                                                  +
                                                  +    .col-sm-push-8 {
                                                  +        left: 66.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-sm-push-7 {
                                                  +        left: 58.333333333333336%;
                                                  +    }
                                                  +
                                                  +    .col-sm-push-6 {
                                                  +        left: 50%;
                                                  +    }
                                                  +
                                                  +    .col-sm-push-5 {
                                                  +        left: 41.66666666666667%;
                                                  +    }
                                                  +
                                                  +    .col-sm-push-4 {
                                                  +        left: 33.33333333333333%;
                                                  +    }
                                                  +
                                                  +    .col-sm-push-3 {
                                                  +        left: 25%;
                                                  +    }
                                                  +
                                                  +    .col-sm-push-2 {
                                                  +        left: 16.666666666666664%;
                                                  +    }
                                                  +
                                                  +    .col-sm-push-1 {
                                                  +        left: 8.333333333333332%;
                                                  +    }
                                                  +
                                                  +    .col-sm-push-0 {
                                                  +        left: 0%;
                                                  +    }
                                                  +
                                                  +    .col-sm-offset-12 {
                                                  +        margin-left: 100%;
                                                  +    }
                                                  +
                                                  +    .col-sm-offset-11 {
                                                  +        margin-left: 91.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-sm-offset-10 {
                                                  +        margin-left: 83.33333333333334%;
                                                  +    }
                                                  +
                                                  +    .col-sm-offset-9 {
                                                  +        margin-left: 75%;
                                                  +    }
                                                  +
                                                  +    .col-sm-offset-8 {
                                                  +        margin-left: 66.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-sm-offset-7 {
                                                  +        margin-left: 58.333333333333336%;
                                                  +    }
                                                  +
                                                  +    .col-sm-offset-6 {
                                                  +        margin-left: 50%;
                                                  +    }
                                                  +
                                                  +    .col-sm-offset-5 {
                                                  +        margin-left: 41.66666666666667%;
                                                  +    }
                                                  +
                                                  +    .col-sm-offset-4 {
                                                  +        margin-left: 33.33333333333333%;
                                                  +    }
                                                  +
                                                  +    .col-sm-offset-3 {
                                                  +        margin-left: 25%;
                                                  +    }
                                                  +
                                                  +    .col-sm-offset-2 {
                                                  +        margin-left: 16.666666666666664%;
                                                  +    }
                                                  +
                                                  +    .col-sm-offset-1 {
                                                  +        margin-left: 8.333333333333332%;
                                                  +    }
                                                  +
                                                  +    .col-sm-offset-0 {
                                                  +        margin-left: 0%;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media (min-width: 992px) {
                                                  +    .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
                                                  +        float: left;
                                                  +    }
                                                  +
                                                  +    .col-md-12 {
                                                  +        width: 100%;
                                                  +    }
                                                  +
                                                  +    .col-md-11 {
                                                  +        width: 91.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-md-10 {
                                                  +        width: 83.33333333333334%;
                                                  +    }
                                                  +
                                                  +    .col-md-9 {
                                                  +        width: 75%;
                                                  +    }
                                                  +
                                                  +    .col-md-8 {
                                                  +        width: 66.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-md-7 {
                                                  +        width: 58.333333333333336%;
                                                  +    }
                                                  +
                                                  +    .col-md-6 {
                                                  +        width: 50%;
                                                  +    }
                                                  +
                                                  +    .col-md-5 {
                                                  +        width: 41.66666666666667%;
                                                  +    }
                                                  +
                                                  +    .col-md-4 {
                                                  +        width: 33.33333333333333%;
                                                  +    }
                                                  +
                                                  +    .col-md-3 {
                                                  +        width: 25%;
                                                  +    }
                                                  +
                                                  +    .col-md-2 {
                                                  +        width: 16.666666666666664%;
                                                  +    }
                                                  +
                                                  +    .col-md-1 {
                                                  +        width: 8.333333333333332%;
                                                  +    }
                                                  +
                                                  +    .col-md-pull-12 {
                                                  +        right: 100%;
                                                  +    }
                                                  +
                                                  +    .col-md-pull-11 {
                                                  +        right: 91.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-md-pull-10 {
                                                  +        right: 83.33333333333334%;
                                                  +    }
                                                  +
                                                  +    .col-md-pull-9 {
                                                  +        right: 75%;
                                                  +    }
                                                  +
                                                  +    .col-md-pull-8 {
                                                  +        right: 66.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-md-pull-7 {
                                                  +        right: 58.333333333333336%;
                                                  +    }
                                                  +
                                                  +    .col-md-pull-6 {
                                                  +        right: 50%;
                                                  +    }
                                                  +
                                                  +    .col-md-pull-5 {
                                                  +        right: 41.66666666666667%;
                                                  +    }
                                                  +
                                                  +    .col-md-pull-4 {
                                                  +        right: 33.33333333333333%;
                                                  +    }
                                                  +
                                                  +    .col-md-pull-3 {
                                                  +        right: 25%;
                                                  +    }
                                                  +
                                                  +    .col-md-pull-2 {
                                                  +        right: 16.666666666666664%;
                                                  +    }
                                                  +
                                                  +    .col-md-pull-1 {
                                                  +        right: 8.333333333333332%;
                                                  +    }
                                                  +
                                                  +    .col-md-pull-0 {
                                                  +        right: 0%;
                                                  +    }
                                                  +
                                                  +    .col-md-push-12 {
                                                  +        left: 100%;
                                                  +    }
                                                  +
                                                  +    .col-md-push-11 {
                                                  +        left: 91.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-md-push-10 {
                                                  +        left: 83.33333333333334%;
                                                  +    }
                                                  +
                                                  +    .col-md-push-9 {
                                                  +        left: 75%;
                                                  +    }
                                                  +
                                                  +    .col-md-push-8 {
                                                  +        left: 66.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-md-push-7 {
                                                  +        left: 58.333333333333336%;
                                                  +    }
                                                  +
                                                  +    .col-md-push-6 {
                                                  +        left: 50%;
                                                  +    }
                                                  +
                                                  +    .col-md-push-5 {
                                                  +        left: 41.66666666666667%;
                                                  +    }
                                                  +
                                                  +    .col-md-push-4 {
                                                  +        left: 33.33333333333333%;
                                                  +    }
                                                  +
                                                  +    .col-md-push-3 {
                                                  +        left: 25%;
                                                  +    }
                                                  +
                                                  +    .col-md-push-2 {
                                                  +        left: 16.666666666666664%;
                                                  +    }
                                                  +
                                                  +    .col-md-push-1 {
                                                  +        left: 8.333333333333332%;
                                                  +    }
                                                  +
                                                  +    .col-md-push-0 {
                                                  +        left: 0%;
                                                  +    }
                                                  +
                                                  +    .col-md-offset-12 {
                                                  +        margin-left: 100%;
                                                  +    }
                                                  +
                                                  +    .col-md-offset-11 {
                                                  +        margin-left: 91.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-md-offset-10 {
                                                  +        margin-left: 83.33333333333334%;
                                                  +    }
                                                  +
                                                  +    .col-md-offset-9 {
                                                  +        margin-left: 75%;
                                                  +    }
                                                  +
                                                  +    .col-md-offset-8 {
                                                  +        margin-left: 66.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-md-offset-7 {
                                                  +        margin-left: 58.333333333333336%;
                                                  +    }
                                                  +
                                                  +    .col-md-offset-6 {
                                                  +        margin-left: 50%;
                                                  +    }
                                                  +
                                                  +    .col-md-offset-5 {
                                                  +        margin-left: 41.66666666666667%;
                                                  +    }
                                                  +
                                                  +    .col-md-offset-4 {
                                                  +        margin-left: 33.33333333333333%;
                                                  +    }
                                                  +
                                                  +    .col-md-offset-3 {
                                                  +        margin-left: 25%;
                                                  +    }
                                                  +
                                                  +    .col-md-offset-2 {
                                                  +        margin-left: 16.666666666666664%;
                                                  +    }
                                                  +
                                                  +    .col-md-offset-1 {
                                                  +        margin-left: 8.333333333333332%;
                                                  +    }
                                                  +
                                                  +    .col-md-offset-0 {
                                                  +        margin-left: 0%;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media (min-width: 1200px) {
                                                  +    .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
                                                  +        float: left;
                                                  +    }
                                                  +
                                                  +    .col-lg-12 {
                                                  +        width: 100%;
                                                  +    }
                                                  +
                                                  +    .col-lg-11 {
                                                  +        width: 91.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-lg-10 {
                                                  +        width: 83.33333333333334%;
                                                  +    }
                                                  +
                                                  +    .col-lg-9 {
                                                  +        width: 75%;
                                                  +    }
                                                  +
                                                  +    .col-lg-8 {
                                                  +        width: 66.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-lg-7 {
                                                  +        width: 58.333333333333336%;
                                                  +    }
                                                  +
                                                  +    .col-lg-6 {
                                                  +        width: 50%;
                                                  +    }
                                                  +
                                                  +    .col-lg-5 {
                                                  +        width: 41.66666666666667%;
                                                  +    }
                                                  +
                                                  +    .col-lg-4 {
                                                  +        width: 33.33333333333333%;
                                                  +    }
                                                  +
                                                  +    .col-lg-3 {
                                                  +        width: 25%;
                                                  +    }
                                                  +
                                                  +    .col-lg-2 {
                                                  +        width: 16.666666666666664%;
                                                  +    }
                                                  +
                                                  +    .col-lg-1 {
                                                  +        width: 8.333333333333332%;
                                                  +    }
                                                  +
                                                  +    .col-lg-pull-12 {
                                                  +        right: 100%;
                                                  +    }
                                                  +
                                                  +    .col-lg-pull-11 {
                                                  +        right: 91.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-lg-pull-10 {
                                                  +        right: 83.33333333333334%;
                                                  +    }
                                                  +
                                                  +    .col-lg-pull-9 {
                                                  +        right: 75%;
                                                  +    }
                                                  +
                                                  +    .col-lg-pull-8 {
                                                  +        right: 66.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-lg-pull-7 {
                                                  +        right: 58.333333333333336%;
                                                  +    }
                                                  +
                                                  +    .col-lg-pull-6 {
                                                  +        right: 50%;
                                                  +    }
                                                  +
                                                  +    .col-lg-pull-5 {
                                                  +        right: 41.66666666666667%;
                                                  +    }
                                                  +
                                                  +    .col-lg-pull-4 {
                                                  +        right: 33.33333333333333%;
                                                  +    }
                                                  +
                                                  +    .col-lg-pull-3 {
                                                  +        right: 25%;
                                                  +    }
                                                  +
                                                  +    .col-lg-pull-2 {
                                                  +        right: 16.666666666666664%;
                                                  +    }
                                                  +
                                                  +    .col-lg-pull-1 {
                                                  +        right: 8.333333333333332%;
                                                  +    }
                                                  +
                                                  +    .col-lg-pull-0 {
                                                  +        right: 0%;
                                                  +    }
                                                  +
                                                  +    .col-lg-push-12 {
                                                  +        left: 100%;
                                                  +    }
                                                  +
                                                  +    .col-lg-push-11 {
                                                  +        left: 91.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-lg-push-10 {
                                                  +        left: 83.33333333333334%;
                                                  +    }
                                                  +
                                                  +    .col-lg-push-9 {
                                                  +        left: 75%;
                                                  +    }
                                                  +
                                                  +    .col-lg-push-8 {
                                                  +        left: 66.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-lg-push-7 {
                                                  +        left: 58.333333333333336%;
                                                  +    }
                                                  +
                                                  +    .col-lg-push-6 {
                                                  +        left: 50%;
                                                  +    }
                                                  +
                                                  +    .col-lg-push-5 {
                                                  +        left: 41.66666666666667%;
                                                  +    }
                                                  +
                                                  +    .col-lg-push-4 {
                                                  +        left: 33.33333333333333%;
                                                  +    }
                                                  +
                                                  +    .col-lg-push-3 {
                                                  +        left: 25%;
                                                  +    }
                                                  +
                                                  +    .col-lg-push-2 {
                                                  +        left: 16.666666666666664%;
                                                  +    }
                                                  +
                                                  +    .col-lg-push-1 {
                                                  +        left: 8.333333333333332%;
                                                  +    }
                                                  +
                                                  +    .col-lg-push-0 {
                                                  +        left: 0%;
                                                  +    }
                                                  +
                                                  +    .col-lg-offset-12 {
                                                  +        margin-left: 100%;
                                                  +    }
                                                  +
                                                  +    .col-lg-offset-11 {
                                                  +        margin-left: 91.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-lg-offset-10 {
                                                  +        margin-left: 83.33333333333334%;
                                                  +    }
                                                  +
                                                  +    .col-lg-offset-9 {
                                                  +        margin-left: 75%;
                                                  +    }
                                                  +
                                                  +    .col-lg-offset-8 {
                                                  +        margin-left: 66.66666666666666%;
                                                  +    }
                                                  +
                                                  +    .col-lg-offset-7 {
                                                  +        margin-left: 58.333333333333336%;
                                                  +    }
                                                  +
                                                  +    .col-lg-offset-6 {
                                                  +        margin-left: 50%;
                                                  +    }
                                                  +
                                                  +    .col-lg-offset-5 {
                                                  +        margin-left: 41.66666666666667%;
                                                  +    }
                                                  +
                                                  +    .col-lg-offset-4 {
                                                  +        margin-left: 33.33333333333333%;
                                                  +    }
                                                  +
                                                  +    .col-lg-offset-3 {
                                                  +        margin-left: 25%;
                                                  +    }
                                                  +
                                                  +    .col-lg-offset-2 {
                                                  +        margin-left: 16.666666666666664%;
                                                  +    }
                                                  +
                                                  +    .col-lg-offset-1 {
                                                  +        margin-left: 8.333333333333332%;
                                                  +    }
                                                  +
                                                  +    .col-lg-offset-0 {
                                                  +        margin-left: 0%;
                                                  +    }
                                                  +}
                                                  +
                                                  +.gutter0 {
                                                  +    margin-left: 0;
                                                  +    margin-right: 0;
                                                  +}
                                                  +
                                                  +.gutter0 > * {
                                                  +    padding-left: 0;
                                                  +    padding-right: 0;
                                                  +}
                                                  +
                                                  +fieldset {
                                                  +    padding: 0;
                                                  +    margin: 0;
                                                  +    border: 0;
                                                  +    min-width: 0;
                                                  +}
                                                  +
                                                  +legend {
                                                  +    display: block;
                                                  +    width: 100%;
                                                  +    padding: 0;
                                                  +    margin-bottom: 18px;
                                                  +    font-size: 19.5px;
                                                  +    line-height: inherit;
                                                  +    color: #333333;
                                                  +    border: 0;
                                                  +    border-bottom: 1px solid #e5e5e5;
                                                  +}
                                                  +
                                                  +label {
                                                  +    display: inline-block;
                                                  +    margin-bottom: 5px;
                                                  +    font-weight: bold;
                                                  +}
                                                  +
                                                  +input[type="search"] {
                                                  +    -webkit-box-sizing: border-box;
                                                  +    -moz-box-sizing: border-box;
                                                  +    box-sizing: border-box;
                                                  +}
                                                  +
                                                  +input[type="radio"],
                                                  +input[type="checkbox"] {
                                                  +    margin: 4px 0 0;
                                                  +    margin-top: 1px \9;
                                                  +  /* IE8-9 */
                                                  +    line-height: normal;
                                                  +}
                                                  +
                                                  +input[type="file"] {
                                                  +    display: block;
                                                  +}
                                                  +
                                                  +input[type="range"] {
                                                  +    display: block;
                                                  +    width: 100%;
                                                  +}
                                                  +
                                                  +select[multiple],
                                                  +select[size] {
                                                  +    height: auto;
                                                  +}
                                                  +
                                                  +input[type="file"]:focus,
                                                  +input[type="radio"]:focus,
                                                  +input[type="checkbox"]:focus {
                                                  +    outline: thin dotted;
                                                  +    outline: 5px auto -webkit-focus-ring-color;
                                                  +    outline-offset: -2px;
                                                  +}
                                                  +
                                                  +output {
                                                  +    display: block;
                                                  +    padding-top: 7px;
                                                  +    font-size: 13px;
                                                  +    line-height: 1.428571429;
                                                  +    color: #555555;
                                                  +}
                                                  +
                                                  +.form-control {
                                                  +    display: block;
                                                  +    width: 100%;
                                                  +    height: 32px;
                                                  +    padding: 6px 12px;
                                                  +    font-size: 13px;
                                                  +    line-height: 1.428571429;
                                                  +    color: #555555;
                                                  +    background-color: #ffffff;
                                                  +    background-image: none;
                                                  +    border: 1px solid #cccccc;
                                                  +    border-radius: 3px;
                                                  +}
                                                  +
                                                  +.form-control:focus {
                                                  +    border-color: #66afe9;
                                                  +    outline: 0;
                                                  +}
                                                  +
                                                  +.form-control:-moz-placeholder {
                                                  +    color: #888888;
                                                  +}
                                                  +
                                                  +.form-control::-moz-placeholder {
                                                  +    color: #888888;
                                                  +    opacity: 1;
                                                  +}
                                                  +
                                                  +.form-control:-ms-input-placeholder {
                                                  +    color: #888888;
                                                  +}
                                                  +
                                                  +.form-control::-webkit-input-placeholder {
                                                  +    color: #888888;
                                                  +}
                                                  +
                                                  +.form-control[disabled],
                                                  +.form-control[readonly],
                                                  +fieldset[disabled] .form-control {
                                                  +    cursor: not-allowed;
                                                  +    background-color: #e5e5e5;
                                                  +    opacity: 1;
                                                  +}
                                                  +
                                                  +textarea.form-control {
                                                  +    height: auto;
                                                  +}
                                                  +
                                                  +input[type="date"] {
                                                  +    line-height: 32px;
                                                  +}
                                                  +
                                                  +.form-group {
                                                  +    margin-bottom: 15px;
                                                  +}
                                                  +
                                                  +.radio,
                                                  +.checkbox {
                                                  +    display: block;
                                                  +    min-height: 18px;
                                                  +    margin-top: 10px;
                                                  +    margin-bottom: 10px;
                                                  +    padding-left: 20px;
                                                  +}
                                                  +
                                                  +.radio label,
                                                  +.checkbox label {
                                                  +    display: inline;
                                                  +    font-weight: normal;
                                                  +    cursor: pointer;
                                                  +}
                                                  +
                                                  +.radio input[type="radio"],
                                                  +.radio-inline input[type="radio"],
                                                  +.checkbox input[type="checkbox"],
                                                  +.checkbox-inline input[type="checkbox"] {
                                                  +    float: left;
                                                  +    margin-left: -20px;
                                                  +}
                                                  +
                                                  +.radio + .radio,
                                                  +.checkbox + .checkbox {
                                                  +    margin-top: -5px;
                                                  +}
                                                  +
                                                  +.radio-inline,
                                                  +.checkbox-inline {
                                                  +    display: inline-block;
                                                  +    padding-left: 20px;
                                                  +    margin-bottom: 0;
                                                  +    vertical-align: middle;
                                                  +    font-weight: normal;
                                                  +    cursor: pointer;
                                                  +}
                                                  +
                                                  +.radio-inline + .radio-inline,
                                                  +.checkbox-inline + .checkbox-inline {
                                                  +    margin-top: 0;
                                                  +    margin-left: 10px;
                                                  +}
                                                  +
                                                  +input[type="radio"][disabled],
                                                  +input[type="checkbox"][disabled],
                                                  +.radio[disabled],
                                                  +.radio-inline[disabled],
                                                  +.checkbox[disabled],
                                                  +.checkbox-inline[disabled],
                                                  +fieldset[disabled] input[type="radio"],
                                                  +fieldset[disabled] input[type="checkbox"],
                                                  +fieldset[disabled] .radio,
                                                  +fieldset[disabled] .radio-inline,
                                                  +fieldset[disabled] .checkbox,
                                                  +fieldset[disabled] .checkbox-inline {
                                                  +    cursor: not-allowed;
                                                  +}
                                                  +
                                                  +.input-sm {
                                                  +    height: 30px;
                                                  +    padding: 5px 10px;
                                                  +    font-size: 12px;
                                                  +    line-height: 1.5;
                                                  +    border-radius: 3px;
                                                  +}
                                                  +
                                                  +select.input-sm {
                                                  +    height: 30px;
                                                  +    line-height: 30px;
                                                  +}
                                                  +
                                                  +textarea.input-sm,
                                                  +select[multiple].input-sm {
                                                  +    height: auto;
                                                  +}
                                                  +
                                                  +.input-lg {
                                                  +    height: 45px;
                                                  +    padding: 10px 16px;
                                                  +    font-size: 17px;
                                                  +    line-height: 1.33;
                                                  +    border-radius: 6px;
                                                  +}
                                                  +
                                                  +select.input-lg {
                                                  +    height: 45px;
                                                  +    line-height: 45px;
                                                  +}
                                                  +
                                                  +textarea.input-lg,
                                                  +select[multiple].input-lg {
                                                  +    height: auto;
                                                  +}
                                                  +
                                                  +.has-feedback {
                                                  +    position: relative;
                                                  +}
                                                  +
                                                  +.has-feedback .form-control {
                                                  +    padding-right: 40px;
                                                  +}
                                                  +
                                                  +.has-feedback .form-control-feedback {
                                                  +    position: absolute;
                                                  +    top: 23px;
                                                  +    right: 0;
                                                  +    display: block;
                                                  +    width: 32px;
                                                  +    height: 32px;
                                                  +    line-height: 32px;
                                                  +    text-align: center;
                                                  +}
                                                  +
                                                  +.has-success .help-block,
                                                  +.has-success .control-label,
                                                  +.has-success .radio,
                                                  +.has-success .checkbox,
                                                  +.has-success .radio-inline,
                                                  +.has-success .checkbox-inline {
                                                  +    color: #3c763d;
                                                  +}
                                                  +
                                                  +.has-success .form-control {
                                                  +    border-color: #3c763d;
                                                  +    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
                                                  +    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
                                                  +}
                                                  +
                                                  +.has-success .form-control:focus {
                                                  +    border-color: #2b542c;
                                                  +    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
                                                  +    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
                                                  +}
                                                  +
                                                  +.has-success .input-group-addon {
                                                  +    color: #3c763d;
                                                  +    border-color: #3c763d;
                                                  +    background-color: #dff0d8;
                                                  +}
                                                  +
                                                  +.has-success .form-control-feedback {
                                                  +    color: #3c763d;
                                                  +}
                                                  +
                                                  +.has-warning .help-block,
                                                  +.has-warning .control-label,
                                                  +.has-warning .radio,
                                                  +.has-warning .checkbox,
                                                  +.has-warning .radio-inline,
                                                  +.has-warning .checkbox-inline {
                                                  +    color: #8a6d3b;
                                                  +}
                                                  +
                                                  +.has-warning .form-control {
                                                  +    border-color: #8a6d3b;
                                                  +    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
                                                  +    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
                                                  +}
                                                  +
                                                  +.has-warning .form-control:focus {
                                                  +    border-color: #66512c;
                                                  +    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
                                                  +    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
                                                  +}
                                                  +
                                                  +.has-warning .input-group-addon {
                                                  +    color: #8a6d3b;
                                                  +    border-color: #8a6d3b;
                                                  +    background-color: #fcf8e3;
                                                  +}
                                                  +
                                                  +.has-warning .form-control-feedback {
                                                  +    color: #8a6d3b;
                                                  +}
                                                  +
                                                  +.has-error .help-block,
                                                  +.has-error .control-label,
                                                  +.has-error .radio,
                                                  +.has-error .checkbox,
                                                  +.has-error .radio-inline,
                                                  +.has-error .checkbox-inline {
                                                  +    color: #a94442;
                                                  +}
                                                  +
                                                  +.has-error .form-control {
                                                  +    border-color: #a94442;
                                                  +    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
                                                  +    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
                                                  +}
                                                  +
                                                  +.has-error .form-control:focus {
                                                  +    border-color: #843534;
                                                  +    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
                                                  +    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
                                                  +}
                                                  +
                                                  +.has-error .input-group-addon {
                                                  +    color: #a94442;
                                                  +    border-color: #a94442;
                                                  +    background-color: #f2dede;
                                                  +}
                                                  +
                                                  +.has-error .form-control-feedback {
                                                  +    color: #a94442;
                                                  +}
                                                  +
                                                  +.form-control-static {
                                                  +    margin-bottom: 0;
                                                  +}
                                                  +
                                                  +.help-block {
                                                  +    display: block;
                                                  +    margin-top: 5px;
                                                  +    margin-bottom: 10px;
                                                  +    color: #737373;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .form-inline .form-group {
                                                  +        display: inline-block;
                                                  +        margin-bottom: 0;
                                                  +        vertical-align: middle;
                                                  +    }
                                                  +
                                                  +    .form-inline .form-control {
                                                  +        display: inline-block;
                                                  +        width: auto;
                                                  +        vertical-align: middle;
                                                  +    }
                                                  +
                                                  +    .form-inline .control-label {
                                                  +        margin-bottom: 0;
                                                  +        vertical-align: middle;
                                                  +    }
                                                  +
                                                  +    .form-inline .radio,
                                                  +  .form-inline .checkbox {
                                                  +        display: inline-block;
                                                  +        margin-top: 0;
                                                  +        margin-bottom: 0;
                                                  +        padding-left: 0;
                                                  +        vertical-align: middle;
                                                  +    }
                                                  +
                                                  +    .form-inline .radio input[type="radio"],
                                                  +  .form-inline .checkbox input[type="checkbox"] {
                                                  +        float: none;
                                                  +        margin-left: 0;
                                                  +    }
                                                  +
                                                  +    .form-inline .has-feedback .form-control-feedback {
                                                  +        top: 0;
                                                  +    }
                                                  +}
                                                  +
                                                  +.form-horizontal .control-label,
                                                  +.form-horizontal .radio,
                                                  +.form-horizontal .checkbox,
                                                  +.form-horizontal .radio-inline,
                                                  +.form-horizontal .checkbox-inline {
                                                  +    margin-top: 0;
                                                  +    margin-bottom: 0;
                                                  +    padding-top: 7px;
                                                  +}
                                                  +
                                                  +.form-horizontal .radio,
                                                  +.form-horizontal .checkbox {
                                                  +    min-height: 25px;
                                                  +}
                                                  +
                                                  +.form-horizontal .form-group {
                                                  +    margin-left: -8px;
                                                  +    margin-right: -8px;
                                                  +}
                                                  +
                                                  +.form-horizontal .form-control-static {
                                                  +    padding-top: 7px;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .form-horizontal .control-label {
                                                  +        text-align: right;
                                                  +    }
                                                  +}
                                                  +
                                                  +.form-horizontal .has-feedback .form-control-feedback {
                                                  +    top: 0;
                                                  +    right: 8px;
                                                  +}
                                                  +
                                                  +.btn {
                                                  +    display: inline-block;
                                                  +    margin-bottom: 0;
                                                  +    font-weight: normal;
                                                  +    text-align: center;
                                                  +    vertical-align: middle;
                                                  +    cursor: pointer;
                                                  +    background-image: none;
                                                  +    border: 1px solid transparent;
                                                  +    white-space: nowrap;
                                                  +    padding: 6px 12px;
                                                  +    font-size: 13px;
                                                  +    line-height: 1.428571429;
                                                  +    border-radius: 3px;
                                                  +    -webkit-user-select: none;
                                                  +    -moz-user-select: none;
                                                  +    -ms-user-select: none;
                                                  +    -o-user-select: none;
                                                  +    user-select: none;
                                                  +}
                                                  +
                                                  +.btn:focus {
                                                  +    outline: thin dotted;
                                                  +    outline: 5px auto -webkit-focus-ring-color;
                                                  +    outline-offset: -2px;
                                                  +}
                                                  +
                                                  +.btn:hover,
                                                  +.btn:focus {
                                                  +    color: #333333;
                                                  +    text-decoration: none;
                                                  +}
                                                  +
                                                  +.btn:active,
                                                  +.btn.active {
                                                  +    outline: 0;
                                                  +    background-image: none;
                                                  +    -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
                                                  +    box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
                                                  +}
                                                  +
                                                  +.btn.disabled,
                                                  +.btn[disabled],
                                                  +fieldset[disabled] .btn {
                                                  +    cursor: not-allowed;
                                                  +    pointer-events: none;
                                                  +    opacity: 0.65;
                                                  +    filter: alpha(opacity=65);
                                                  +    -webkit-box-shadow: none;
                                                  +    box-shadow: none;
                                                  +}
                                                  +
                                                  +.btn-default {
                                                  +    color: #333333;
                                                  +    background-color: #ffffff;
                                                  +    border-color: #cccccc;
                                                  +}
                                                  +
                                                  +.btn-default:hover,
                                                  +.btn-default:focus,
                                                  +.btn-default:active,
                                                  +.btn-default.active,
                                                  +.open .dropdown-toggle.btn-default {
                                                  +    color: #333333;
                                                  +    background-color: #ebebeb;
                                                  +    border-color: #adadad;
                                                  +}
                                                  +
                                                  +.btn-default:active,
                                                  +.btn-default.active,
                                                  +.open .dropdown-toggle.btn-default {
                                                  +    background-image: none;
                                                  +}
                                                  +
                                                  +.btn-default.disabled,
                                                  +.btn-default[disabled],
                                                  +fieldset[disabled] .btn-default,
                                                  +.btn-default.disabled:hover,
                                                  +.btn-default[disabled]:hover,
                                                  +fieldset[disabled] .btn-default:hover,
                                                  +.btn-default.disabled:focus,
                                                  +.btn-default[disabled]:focus,
                                                  +fieldset[disabled] .btn-default:focus,
                                                  +.btn-default.disabled:active,
                                                  +.btn-default[disabled]:active,
                                                  +fieldset[disabled] .btn-default:active,
                                                  +.btn-default.disabled.active,
                                                  +.btn-default[disabled].active,
                                                  +fieldset[disabled] .btn-default.active {
                                                  +    background-color: #ffffff;
                                                  +    border-color: #cccccc;
                                                  +}
                                                  +
                                                  +.btn-default .badge {
                                                  +    color: #ffffff;
                                                  +    background-color: #333333;
                                                  +}
                                                  +
                                                  +.btn-primary {
                                                  +    color: #ffffff;
                                                  +    background-color: #428bca;
                                                  +    border-color: #357ebd;
                                                  +}
                                                  +
                                                  +.btn-primary:hover,
                                                  +.btn-primary:focus,
                                                  +.btn-primary:active,
                                                  +.btn-primary.active,
                                                  +.open .dropdown-toggle.btn-primary {
                                                  +    color: #ffffff;
                                                  +    background-color: #3276b1;
                                                  +    border-color: #285e8e;
                                                  +}
                                                  +
                                                  +.btn-primary:active,
                                                  +.btn-primary.active,
                                                  +.open .dropdown-toggle.btn-primary {
                                                  +    background-image: none;
                                                  +}
                                                  +
                                                  +.btn-primary.disabled,
                                                  +.btn-primary[disabled],
                                                  +fieldset[disabled] .btn-primary,
                                                  +.btn-primary.disabled:hover,
                                                  +.btn-primary[disabled]:hover,
                                                  +fieldset[disabled] .btn-primary:hover,
                                                  +.btn-primary.disabled:focus,
                                                  +.btn-primary[disabled]:focus,
                                                  +fieldset[disabled] .btn-primary:focus,
                                                  +.btn-primary.disabled:active,
                                                  +.btn-primary[disabled]:active,
                                                  +fieldset[disabled] .btn-primary:active,
                                                  +.btn-primary.disabled.active,
                                                  +.btn-primary[disabled].active,
                                                  +fieldset[disabled] .btn-primary.active {
                                                  +    background-color: #428bca;
                                                  +    border-color: #357ebd;
                                                  +}
                                                  +
                                                  +.btn-primary .badge {
                                                  +    color: #428bca;
                                                  +    background-color: #ffffff;
                                                  +}
                                                  +
                                                  +.btn-success {
                                                  +    color: #ffffff;
                                                  +    background-color: #cd3420;
                                                  +    border-color: #b72e1d;
                                                  +}
                                                  +
                                                  +.btn-success:hover,
                                                  +.btn-success:focus,
                                                  +.btn-success:active,
                                                  +.btn-success.active,
                                                  +.open .dropdown-toggle.btn-success {
                                                  +    color: #ffffff;
                                                  +    background-color: #aa2b1a;
                                                  +    border-color: #822114;
                                                  +}
                                                  +
                                                  +.btn-success:active,
                                                  +.btn-success.active,
                                                  +.open .dropdown-toggle.btn-success {
                                                  +    background-image: none;
                                                  +}
                                                  +
                                                  +.btn-success.disabled,
                                                  +.btn-success[disabled],
                                                  +fieldset[disabled] .btn-success,
                                                  +.btn-success.disabled:hover,
                                                  +.btn-success[disabled]:hover,
                                                  +fieldset[disabled] .btn-success:hover,
                                                  +.btn-success.disabled:focus,
                                                  +.btn-success[disabled]:focus,
                                                  +fieldset[disabled] .btn-success:focus,
                                                  +.btn-success.disabled:active,
                                                  +.btn-success[disabled]:active,
                                                  +fieldset[disabled] .btn-success:active,
                                                  +.btn-success.disabled.active,
                                                  +.btn-success[disabled].active,
                                                  +fieldset[disabled] .btn-success.active {
                                                  +    background-color: #cd3420;
                                                  +    border-color: #b72e1d;
                                                  +}
                                                  +
                                                  +.btn-success .badge {
                                                  +    color: #cd3420;
                                                  +    background-color: #ffffff;
                                                  +}
                                                  +
                                                  +.btn-info {
                                                  +    color: #ffffff;
                                                  +    background-color: #5bc0de;
                                                  +    border-color: #46b8da;
                                                  +}
                                                  +
                                                  +.btn-info:hover,
                                                  +.btn-info:focus,
                                                  +.btn-info:active,
                                                  +.btn-info.active,
                                                  +.open .dropdown-toggle.btn-info {
                                                  +    color: #ffffff;
                                                  +    background-color: #39b3d7;
                                                  +    border-color: #269abc;
                                                  +}
                                                  +
                                                  +.btn-info:active,
                                                  +.btn-info.active,
                                                  +.open .dropdown-toggle.btn-info {
                                                  +    background-image: none;
                                                  +}
                                                  +
                                                  +.btn-info.disabled,
                                                  +.btn-info[disabled],
                                                  +fieldset[disabled] .btn-info,
                                                  +.btn-info.disabled:hover,
                                                  +.btn-info[disabled]:hover,
                                                  +fieldset[disabled] .btn-info:hover,
                                                  +.btn-info.disabled:focus,
                                                  +.btn-info[disabled]:focus,
                                                  +fieldset[disabled] .btn-info:focus,
                                                  +.btn-info.disabled:active,
                                                  +.btn-info[disabled]:active,
                                                  +fieldset[disabled] .btn-info:active,
                                                  +.btn-info.disabled.active,
                                                  +.btn-info[disabled].active,
                                                  +fieldset[disabled] .btn-info.active {
                                                  +    background-color: #5bc0de;
                                                  +    border-color: #46b8da;
                                                  +}
                                                  +
                                                  +.btn-info .badge {
                                                  +    color: #5bc0de;
                                                  +    background-color: #ffffff;
                                                  +}
                                                  +
                                                  +.btn-warning {
                                                  +    color: #ffffff;
                                                  +    background-color: #f0ad4e;
                                                  +    border-color: #eea236;
                                                  +}
                                                  +
                                                  +.btn-warning:hover,
                                                  +.btn-warning:focus,
                                                  +.btn-warning:active,
                                                  +.btn-warning.active,
                                                  +.open .dropdown-toggle.btn-warning {
                                                  +    color: #ffffff;
                                                  +    background-color: #ed9c28;
                                                  +    border-color: #d58512;
                                                  +}
                                                  +
                                                  +.btn-warning:active,
                                                  +.btn-warning.active,
                                                  +.open .dropdown-toggle.btn-warning {
                                                  +    background-image: none;
                                                  +}
                                                  +
                                                  +.btn-warning.disabled,
                                                  +.btn-warning[disabled],
                                                  +fieldset[disabled] .btn-warning,
                                                  +.btn-warning.disabled:hover,
                                                  +.btn-warning[disabled]:hover,
                                                  +fieldset[disabled] .btn-warning:hover,
                                                  +.btn-warning.disabled:focus,
                                                  +.btn-warning[disabled]:focus,
                                                  +fieldset[disabled] .btn-warning:focus,
                                                  +.btn-warning.disabled:active,
                                                  +.btn-warning[disabled]:active,
                                                  +fieldset[disabled] .btn-warning:active,
                                                  +.btn-warning.disabled.active,
                                                  +.btn-warning[disabled].active,
                                                  +fieldset[disabled] .btn-warning.active {
                                                  +    background-color: #f0ad4e;
                                                  +    border-color: #eea236;
                                                  +}
                                                  +
                                                  +.btn-warning .badge {
                                                  +    color: #f0ad4e;
                                                  +    background-color: #ffffff;
                                                  +}
                                                  +
                                                  +.btn-danger {
                                                  +    color: #ffffff;
                                                  +    background-color: #d9534f;
                                                  +    border-color: #d43f3a;
                                                  +}
                                                  +
                                                  +.btn-danger:hover,
                                                  +.btn-danger:focus,
                                                  +.btn-danger:active,
                                                  +.btn-danger.active,
                                                  +.open .dropdown-toggle.btn-danger {
                                                  +    color: #ffffff;
                                                  +    background-color: #d2322d;
                                                  +    border-color: #ac2925;
                                                  +}
                                                  +
                                                  +.btn-danger:active,
                                                  +.btn-danger.active,
                                                  +.open .dropdown-toggle.btn-danger {
                                                  +    background-image: none;
                                                  +}
                                                  +
                                                  +.btn-danger.disabled,
                                                  +.btn-danger[disabled],
                                                  +fieldset[disabled] .btn-danger,
                                                  +.btn-danger.disabled:hover,
                                                  +.btn-danger[disabled]:hover,
                                                  +fieldset[disabled] .btn-danger:hover,
                                                  +.btn-danger.disabled:focus,
                                                  +.btn-danger[disabled]:focus,
                                                  +fieldset[disabled] .btn-danger:focus,
                                                  +.btn-danger.disabled:active,
                                                  +.btn-danger[disabled]:active,
                                                  +fieldset[disabled] .btn-danger:active,
                                                  +.btn-danger.disabled.active,
                                                  +.btn-danger[disabled].active,
                                                  +fieldset[disabled] .btn-danger.active {
                                                  +    background-color: #d9534f;
                                                  +    border-color: #d43f3a;
                                                  +}
                                                  +
                                                  +.btn-danger .badge {
                                                  +    color: #d9534f;
                                                  +    background-color: #ffffff;
                                                  +}
                                                  +
                                                  +.btn-link {
                                                  +    color: #428bca;
                                                  +    font-weight: normal;
                                                  +    cursor: pointer;
                                                  +    border-radius: 0;
                                                  +}
                                                  +
                                                  +.btn-link,
                                                  +.btn-link:active,
                                                  +.btn-link[disabled],
                                                  +fieldset[disabled] .btn-link {
                                                  +    background-color: transparent;
                                                  +    -webkit-box-shadow: none;
                                                  +    box-shadow: none;
                                                  +}
                                                  +
                                                  +.btn-link,
                                                  +.btn-link:hover,
                                                  +.btn-link:focus,
                                                  +.btn-link:active {
                                                  +    border-color: transparent;
                                                  +}
                                                  +
                                                  +.btn-link:hover,
                                                  +.btn-link:focus {
                                                  +    color: #2a6496;
                                                  +    text-decoration: underline;
                                                  +    background-color: transparent;
                                                  +}
                                                  +
                                                  +.btn-link[disabled]:hover,
                                                  +fieldset[disabled] .btn-link:hover,
                                                  +.btn-link[disabled]:focus,
                                                  +fieldset[disabled] .btn-link:focus {
                                                  +    color: #888888;
                                                  +    text-decoration: none;
                                                  +}
                                                  +
                                                  +.btn-lg {
                                                  +    padding: 10px 16px;
                                                  +    font-size: 17px;
                                                  +    line-height: 1.33;
                                                  +    border-radius: 6px;
                                                  +}
                                                  +
                                                  +.btn-sm {
                                                  +    padding: 5px 10px;
                                                  +    font-size: 12px;
                                                  +    line-height: 1.5;
                                                  +    border-radius: 3px;
                                                  +}
                                                  +
                                                  +.btn-xs {
                                                  +    padding: 1px 5px;
                                                  +    font-size: 12px;
                                                  +    line-height: 1.5;
                                                  +    border-radius: 3px;
                                                  +}
                                                  +
                                                  +.btn-block {
                                                  +    display: block;
                                                  +    width: 100%;
                                                  +    padding-left: 0;
                                                  +    padding-right: 0;
                                                  +}
                                                  +
                                                  +.btn-block + .btn-block {
                                                  +    margin-top: 5px;
                                                  +}
                                                  +
                                                  +input[type="submit"].btn-block,
                                                  +input[type="reset"].btn-block,
                                                  +input[type="button"].btn-block {
                                                  +    width: 100%;
                                                  +}
                                                  +
                                                  +.nav {
                                                  +    margin-bottom: 0;
                                                  +    padding-left: 0;
                                                  +    list-style: none;
                                                  +}
                                                  +
                                                  +.nav > li {
                                                  +    position: relative;
                                                  +    display: block;
                                                  +}
                                                  +
                                                  +.nav > li > a {
                                                  +    position: relative;
                                                  +    display: block;
                                                  +    padding: 10px 15px;
                                                  +}
                                                  +
                                                  +.nav > li > a:hover,
                                                  +.nav > li > a:focus {
                                                  +    text-decoration: none;
                                                  +    background-color: #e5e5e5;
                                                  +}
                                                  +
                                                  +.nav > li.disabled > a {
                                                  +    color: #888888;
                                                  +}
                                                  +
                                                  +.nav > li.disabled > a:hover,
                                                  +.nav > li.disabled > a:focus {
                                                  +    color: #888888;
                                                  +    text-decoration: none;
                                                  +    background-color: transparent;
                                                  +    cursor: not-allowed;
                                                  +}
                                                  +
                                                  +.nav .open > a,
                                                  +.nav .open > a:hover,
                                                  +.nav .open > a:focus {
                                                  +    background-color: #e5e5e5;
                                                  +    border-color: #428bca;
                                                  +}
                                                  +
                                                  +.nav .nav-divider {
                                                  +    height: 1px;
                                                  +    margin: 8px 0;
                                                  +    overflow: hidden;
                                                  +    background-color: #e5e5e5;
                                                  +}
                                                  +
                                                  +.nav > li > a > img {
                                                  +    max-width: none;
                                                  +}
                                                  +
                                                  +.nav-tabs {
                                                  +    border-bottom: 1px solid #dddddd;
                                                  +}
                                                  +
                                                  +.nav-tabs > li {
                                                  +    float: left;
                                                  +    margin-bottom: -1px;
                                                  +}
                                                  +
                                                  +.nav-tabs > li > a {
                                                  +    margin-right: 2px;
                                                  +    line-height: 1.428571429;
                                                  +    border: 1px solid transparent;
                                                  +    border-radius: 3px 3px 0 0;
                                                  +}
                                                  +
                                                  +.nav-tabs > li > a:hover {
                                                  +    border-color: #e5e5e5 #e5e5e5 #dddddd;
                                                  +}
                                                  +
                                                  +.nav-tabs > li.active > a,
                                                  +.nav-tabs > li.active > a:hover,
                                                  +.nav-tabs > li.active > a:focus {
                                                  +    color: #555555;
                                                  +    background-color: #ffffff;
                                                  +    border: 1px solid #dddddd;
                                                  +    border-bottom-color: transparent;
                                                  +    cursor: default;
                                                  +}
                                                  +
                                                  +.nav-tabs.nav-justified {
                                                  +    width: 100%;
                                                  +    border-bottom: 0;
                                                  +}
                                                  +
                                                  +.nav-tabs.nav-justified > li {
                                                  +    float: none;
                                                  +}
                                                  +
                                                  +.nav-tabs.nav-justified > li > a {
                                                  +    text-align: center;
                                                  +    margin-bottom: 5px;
                                                  +}
                                                  +
                                                  +.nav-tabs.nav-justified > .dropdown .dropdown-menu {
                                                  +    top: auto;
                                                  +    left: auto;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .nav-tabs.nav-justified > li {
                                                  +        display: table-cell;
                                                  +        width: 1%;
                                                  +    }
                                                  +
                                                  +    .nav-tabs.nav-justified > li > a {
                                                  +        margin-bottom: 0;
                                                  +    }
                                                  +}
                                                  +
                                                  +.nav-tabs.nav-justified > li > a {
                                                  +    margin-right: 0;
                                                  +    border-radius: 3px;
                                                  +}
                                                  +
                                                  +.nav-tabs.nav-justified > .active > a,
                                                  +.nav-tabs.nav-justified > .active > a:hover,
                                                  +.nav-tabs.nav-justified > .active > a:focus {
                                                  +    border: 1px solid #dddddd;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .nav-tabs.nav-justified > li > a {
                                                  +        border-bottom: 1px solid #dddddd;
                                                  +        border-radius: 3px 3px 0 0;
                                                  +    }
                                                  +
                                                  +    .nav-tabs.nav-justified > .active > a,
                                                  +  .nav-tabs.nav-justified > .active > a:hover,
                                                  +  .nav-tabs.nav-justified > .active > a:focus {
                                                  +        border-bottom-color: #ffffff;
                                                  +    }
                                                  +}
                                                  +
                                                  +.nav-pills > li {
                                                  +    float: left;
                                                  +}
                                                  +
                                                  +.nav-pills > li > a {
                                                  +    border-radius: 3px;
                                                  +}
                                                  +
                                                  +.nav-pills > li + li {
                                                  +    margin-left: 2px;
                                                  +}
                                                  +
                                                  +.nav-pills > li.active > a,
                                                  +.nav-pills > li.active > a:hover,
                                                  +.nav-pills > li.active > a:focus {
                                                  +    color: #ffffff;
                                                  +    background-color: #428bca;
                                                  +}
                                                  +
                                                  +.nav-stacked > li {
                                                  +    float: none;
                                                  +}
                                                  +
                                                  +.nav-stacked > li + li {
                                                  +    margin-top: 2px;
                                                  +    margin-left: 0;
                                                  +}
                                                  +
                                                  +.nav-justified {
                                                  +    width: 100%;
                                                  +}
                                                  +
                                                  +.nav-justified > li {
                                                  +    float: none;
                                                  +}
                                                  +
                                                  +.nav-justified > li > a {
                                                  +    text-align: center;
                                                  +    margin-bottom: 5px;
                                                  +}
                                                  +
                                                  +.nav-justified > .dropdown .dropdown-menu {
                                                  +    top: auto;
                                                  +    left: auto;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .nav-justified > li {
                                                  +        display: table-cell;
                                                  +        width: 1%;
                                                  +    }
                                                  +
                                                  +    .nav-justified > li > a {
                                                  +        margin-bottom: 0;
                                                  +    }
                                                  +}
                                                  +
                                                  +.nav-tabs-justified {
                                                  +    border-bottom: 0;
                                                  +}
                                                  +
                                                  +.nav-tabs-justified > li > a {
                                                  +    margin-right: 0;
                                                  +    border-radius: 3px;
                                                  +}
                                                  +
                                                  +.nav-tabs-justified > .active > a,
                                                  +.nav-tabs-justified > .active > a:hover,
                                                  +.nav-tabs-justified > .active > a:focus {
                                                  +    border: 1px solid #dddddd;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .nav-tabs-justified > li > a {
                                                  +        border-bottom: 1px solid #dddddd;
                                                  +        border-radius: 3px 3px 0 0;
                                                  +    }
                                                  +
                                                  +    .nav-tabs-justified > .active > a,
                                                  +  .nav-tabs-justified > .active > a:hover,
                                                  +  .nav-tabs-justified > .active > a:focus {
                                                  +        border-bottom-color: #ffffff;
                                                  +    }
                                                  +}
                                                  +
                                                  +.tab-content > .tab-pane {
                                                  +    display: none;
                                                  +}
                                                  +
                                                  +.tab-content > .active {
                                                  +    display: block;
                                                  +}
                                                  +
                                                  +.nav-tabs .dropdown-menu {
                                                  +    margin-top: -1px;
                                                  +    border-top-right-radius: 0;
                                                  +    border-top-left-radius: 0;
                                                  +}
                                                  +
                                                  +.navbar {
                                                  +    position: relative;
                                                  +    min-height: 50px;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar-header {
                                                  +        float: left;
                                                  +        display: none;
                                                  +    }
                                                  +}
                                                  +
                                                  +.navbar-collapse {
                                                  +    max-height: 340px;
                                                  +    overflow-x: visible;
                                                  +    padding-right: 8px;
                                                  +    padding-left: 8px;
                                                  +    -webkit-overflow-scrolling: touch;
                                                  +}
                                                  +
                                                  +.navbar-collapse.in {
                                                  +    overflow-y: auto;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar-collapse {
                                                  +        width: auto;
                                                  +        border-top: 0;
                                                  +        box-shadow: none;
                                                  +    }
                                                  +
                                                  +    .navbar-collapse.collapse {
                                                  +        display: block !important;
                                                  +        height: auto !important;
                                                  +        padding-bottom: 0;
                                                  +        overflow: visible !important;
                                                  +    }
                                                  +
                                                  +    .navbar-collapse.in {
                                                  +        overflow-y: visible;
                                                  +    }
                                                  +
                                                  +    .navbar-fixed-top .navbar-collapse,
                                                  +  .navbar-static-top .navbar-collapse,
                                                  +  .navbar-fixed-bottom .navbar-collapse {
                                                  +        padding-left: 0;
                                                  +        padding-right: 0;
                                                  +    }
                                                  +}
                                                  +
                                                  +.container > .navbar-collapse,
                                                  +.container-fluid > .navbar-collapse {
                                                  +    margin-right: -8px;
                                                  +    margin-left: -8px;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .container > .navbar-collapse,
                                                  +  .container-fluid > .navbar-collapse {
                                                  +        margin-right: 0;
                                                  +        margin-left: 0;
                                                  +    }
                                                  +}
                                                  +
                                                  +.navbar-static-top {
                                                  +    z-index: 1000;
                                                  +    border-width: 0 0 1px;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar-static-top {
                                                  +        border-radius: 0;
                                                  +    }
                                                  +}
                                                  +
                                                  +.navbar-fixed-top,
                                                  +.navbar-fixed-bottom {
                                                  +    position: fixed;
                                                  +    right: 0;
                                                  +    left: 0;
                                                  +    z-index: 1030;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar-fixed-top,
                                                  +  .navbar-fixed-bottom {
                                                  +        border-radius: 0;
                                                  +    }
                                                  +}
                                                  +
                                                  +.navbar-fixed-top {
                                                  +    top: 0;
                                                  +    border-width: 0 0 1px;
                                                  +}
                                                  +
                                                  +.navbar-fixed-bottom {
                                                  +    bottom: 0;
                                                  +    margin-bottom: 0;
                                                  +    border-width: 1px 0 0;
                                                  +}
                                                  +
                                                  +.navbar-brand {
                                                  +    padding-top: 4px;
                                                  +}
                                                  +
                                                  +.navbar-brand img {
                                                  +    max-height: 40px;
                                                  +}
                                                  +
                                                  +.navbar-brand:hover,
                                                  +.navbar-brand:focus {
                                                  +    text-decoration: none;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar > .container .navbar-brand,
                                                  +  .navbar > .container-fluid .navbar-brand {
                                                  +        margin-left: -8px;
                                                  +    }
                                                  +}
                                                  +
                                                  +.navbar-toggle {
                                                  +    position: relative;
                                                  +    margin-right: 8px;
                                                  +    padding: 9px 10px 9px 20px;
                                                  +    margin-top: 8px;
                                                  +    margin-bottom: 8px;
                                                  +    background-color: transparent;
                                                  +    background-image: none;
                                                  +    border: 0;
                                                  +}
                                                  +
                                                  +.navbar-toggle:focus {
                                                  +    outline: none;
                                                  +}
                                                  +
                                                  +.navbar-toggle .icon-bar {
                                                  +    display: block;
                                                  +    width: 22px;
                                                  +    height: 2px;
                                                  +    border-radius: 1px;
                                                  +    background-color: #ffffff;
                                                  +}
                                                  +
                                                  +.navbar-toggle .icon-bar + .icon-bar {
                                                  +    margin-top: 4px;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar-toggle {
                                                  +        display: none;
                                                  +    }
                                                  +}
                                                  +
                                                  +.navbar-nav {
                                                  +    margin: 16px -16px;
                                                  +}
                                                  +
                                                  +.navbar-nav > li > a {
                                                  +    padding-bottom: 8px;
                                                  +    padding-top: 8px;
                                                  +    line-height: 18px;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar-nav > li > a {
                                                  +        padding-top: 10px;
                                                  +        padding-bottom: 10px;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media (max-width: 767px) {
                                                  +    .navbar-nav .open .dropdown-menu {
                                                  +        position: static;
                                                  +        float: none;
                                                  +        width: auto;
                                                  +        margin-top: 0;
                                                  +        background-color: transparent;
                                                  +        border: 0;
                                                  +        box-shadow: none;
                                                  +    }
                                                  +
                                                  +    .navbar-nav .open .dropdown-menu > li > a,
                                                  +  .navbar-nav .open .dropdown-menu .dropdown-header {
                                                  +        padding: 5px 15px 5px 25px;
                                                  +    }
                                                  +
                                                  +    .navbar-nav .open .dropdown-menu > li > a {
                                                  +        line-height: 18px;
                                                  +    }
                                                  +
                                                  +    .navbar-nav .open .dropdown-menu > li > a:hover,
                                                  +  .navbar-nav .open .dropdown-menu > li > a:focus {
                                                  +        background-image: none;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar-nav {
                                                  +        float: right;
                                                  +        margin: 0;
                                                  +        margin-right: 100px;
                                                  +    }
                                                  +
                                                  +    .navbar-nav > li {
                                                  +        float: left;
                                                  +    }
                                                  +
                                                  +    .navbar-nav > li > a {
                                                  +        padding-top: 16px;
                                                  +        padding-bottom: 16px;
                                                  +    }
                                                  +
                                                  +    .navbar-nav.navbar-right:last-child {
                                                  +        margin-right: -8px;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar-left {
                                                  +        float: left !important;
                                                  +    }
                                                  +
                                                  +    .navbar-right {
                                                  +        float: right !important;
                                                  +    }
                                                  +}
                                                  +
                                                  +.navbar-form {
                                                  +    margin-left: -8px;
                                                  +    margin-right: -8px;
                                                  +    padding: 10px 8px;
                                                  +    border-top: 1px solid transparent;
                                                  +    border-bottom: 1px solid transparent;
                                                  +    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
                                                  +    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
                                                  +    margin-top: 9px;
                                                  +    margin-bottom: 9px;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar-form .form-group {
                                                  +        display: inline-block;
                                                  +        margin-bottom: 0;
                                                  +        vertical-align: middle;
                                                  +    }
                                                  +
                                                  +    .navbar-form .form-control {
                                                  +        display: inline-block;
                                                  +        width: auto;
                                                  +        vertical-align: middle;
                                                  +    }
                                                  +
                                                  +    .navbar-form .control-label {
                                                  +        margin-bottom: 0;
                                                  +        vertical-align: middle;
                                                  +    }
                                                  +
                                                  +    .navbar-form .radio,
                                                  +  .navbar-form .checkbox {
                                                  +        display: inline-block;
                                                  +        margin-top: 0;
                                                  +        margin-bottom: 0;
                                                  +        padding-left: 0;
                                                  +        vertical-align: middle;
                                                  +    }
                                                  +
                                                  +    .navbar-form .radio input[type="radio"],
                                                  +  .navbar-form .checkbox input[type="checkbox"] {
                                                  +        float: none;
                                                  +        margin-left: 0;
                                                  +    }
                                                  +
                                                  +    .navbar-form .has-feedback .form-control-feedback {
                                                  +        top: 0;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media (max-width: 767px) {
                                                  +    .navbar-form .form-group {
                                                  +        margin-bottom: 5px;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar-form {
                                                  +        width: auto;
                                                  +        border: 0;
                                                  +        margin-left: 0;
                                                  +        margin-right: 0;
                                                  +        padding-top: 0;
                                                  +        padding-bottom: 0;
                                                  +        -webkit-box-shadow: none;
                                                  +        box-shadow: none;
                                                  +    }
                                                  +
                                                  +    .navbar-form.navbar-right:last-child {
                                                  +        margin-right: -8px;
                                                  +    }
                                                  +}
                                                  +
                                                  +.navbar-nav > li > .dropdown-menu {
                                                  +    margin-top: 0;
                                                  +    border-top-right-radius: 0;
                                                  +    border-top-left-radius: 0;
                                                  +}
                                                  +
                                                  +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
                                                  +    border-bottom-right-radius: 0;
                                                  +    border-bottom-left-radius: 0;
                                                  +}
                                                  +
                                                  +.navbar-btn {
                                                  +    margin-bottom: 7px;
                                                  +    margin-top: 8px;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar-btn {
                                                  +        float: right;
                                                  +        margin-top: 9px;
                                                  +        margin-bottom: 9px;
                                                  +    }
                                                  +}
                                                  +
                                                  +.navbar-btn.btn-sm {
                                                  +    margin-top: 10px;
                                                  +    margin-bottom: 10px;
                                                  +}
                                                  +
                                                  +.navbar-btn.btn-xs {
                                                  +    margin-top: 14px;
                                                  +    margin-bottom: 14px;
                                                  +}
                                                  +
                                                  +.navbar-text {
                                                  +    margin-top: 16px;
                                                  +    margin-bottom: 16px;
                                                  +    color: #ffffff;
                                                  +    line-height: 1;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar-text {
                                                  +        float: left;
                                                  +        margin-left: 8px;
                                                  +        margin-right: 8px;
                                                  +    }
                                                  +
                                                  +    .navbar-text.navbar-right:last-child {
                                                  +        margin-right: 0;
                                                  +    }
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-brand {
                                                  +    color: #999b9f;
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-brand:hover,
                                                  +.navbar-default .navbar-brand:focus {
                                                  +    color: #7f8186;
                                                  +    background-color: transparent;
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-text {
                                                  +    color: #777777;
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-nav > li > a {
                                                  +    color: #999b9f;
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-nav > li > a:hover,
                                                  +.navbar-default .navbar-nav > li > a:focus {
                                                  +    color: #FFF;
                                                  +    background-color: transparent;
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-nav > .active > a,
                                                  +.navbar-default .navbar-nav > .active > a:hover,
                                                  +.navbar-default .navbar-nav > .active > a:focus {
                                                  +    color: #FFFFFF;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    .navbar-default .navbar-nav > .active > a,
                                                  +  .navbar-default .navbar-nav > .active > a:hover,
                                                  +  .navbar-default .navbar-nav > .active > a:focus {
                                                  +        border-bottom: 4px solid #CD3420;
                                                  +        padding-bottom: 13px;
                                                  +    }
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-nav > .disabled > a,
                                                  +.navbar-default .navbar-nav > .disabled > a:hover,
                                                  +.navbar-default .navbar-nav > .disabled > a:focus {
                                                  +    color: #cccccc;
                                                  +    background-color: transparent;
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-toggle {
                                                  +    border-color: #dddddd;
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-toggle:hover,
                                                  +.navbar-default .navbar-toggle:focus {
                                                  +    background-color: #dddddd;
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-toggle .icon-bar {
                                                  +    background-color: #888888;
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-collapse,
                                                  +.navbar-default .navbar-form {
                                                  +    border-color: #e7e7e7;
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-nav > .open > a,
                                                  +.navbar-default .navbar-nav > .open > a:hover,
                                                  +.navbar-default .navbar-nav > .open > a:focus {
                                                  +    background-color: #e7e7e7;
                                                  +    color: #555555;
                                                  +}
                                                  +
                                                  +@media (max-width: 767px) {
                                                  +    .navbar-default .navbar-nav .open .dropdown-menu > li > a {
                                                  +        color: #999b9f;
                                                  +    }
                                                  +
                                                  +    .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
                                                  +  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
                                                  +        color: #333333;
                                                  +        background-color: transparent;
                                                  +    }
                                                  +
                                                  +    .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
                                                  +  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
                                                  +  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
                                                  +        color: #555555;
                                                  +        background-color: #e7e7e7;
                                                  +    }
                                                  +
                                                  +    .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
                                                  +  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
                                                  +  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
                                                  +        color: #cccccc;
                                                  +        background-color: transparent;
                                                  +    }
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-link {
                                                  +    color: #999b9f;
                                                  +}
                                                  +
                                                  +.navbar-default .navbar-link:hover {
                                                  +    color: #333333;
                                                  +}
                                                  +
                                                  +#mast-head {
                                                  +    background-color: #262A31;
                                                  +    display: none;
                                                  +    height: 200%;
                                                  +    position: fixed;
                                                  +    overflow-y: auto;
                                                  +    width: 250px;
                                                  +    z-index: 1;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) {
                                                  +    #mast-head {
                                                  +        display: block;
                                                  +        position: static;
                                                  +        padding-bottom: 0;
                                                  +        width: auto;
                                                  +    }
                                                  +}
                                                  +
                                                  +#site {
                                                  +    -webkit-transition: -webkit-transform 0.35s cubic-bezier(0.694, 0.0482, 0.335, 1) 0s;
                                                  +    -moz-transition: -moz-transform 0.35s cubic-bezier(0.694, 0.0482, 0.335, 1) 0s;
                                                  +    -o-transition: -o-transform 0.35s cubic-bezier(0.694, 0.0482, 0.335, 1) 0s;
                                                  +    transition: transform 0.35s cubic-bezier(0.694, 0.0482, 0.335, 1) 0s;
                                                  +    background-color: inherit;
                                                  +    z-index: 10;
                                                  +    position: relative;
                                                  +}
                                                  +
                                                  +#site .nav-over {
                                                  +    z-index: 0;
                                                  +    -webkit-transition: opacity 0.35s ease 0s;
                                                  +    transition: opacity 0.35s ease 0s;
                                                  +    background-color: #000;
                                                  +    opacity: 0;
                                                  +}
                                                  +
                                                  +#site.translate {
                                                  +    -webkit-transform: translateZ(0);
                                                  +    -webkit-transform: translate3d(250px, 0px, 0px);
                                                  +    transform: translate3d(250px, 0px, 0px);
                                                  +}
                                                  +
                                                  +.lt-ie9 #site.translate {
                                                  +    left: 250px;
                                                  +}
                                                  +
                                                  +#site.translate .nav-over {
                                                  +    position: fixed;
                                                  +    height: 100%;
                                                  +    width: 100%;
                                                  +    z-index: 99999;
                                                  +    top: 0;
                                                  +    left: 0;
                                                  +    bottom: 0;
                                                  +    right: 0;
                                                  +    opacity: 0.75;
                                                  +    -webkit-transition: opacity 0.35s ease 0s;
                                                  +    transition: opacity 0.35s ease 0s;
                                                  +}
                                                  +@media (min-width: 768px) {
                                                  +    #site {
                                                  +        padding: 0;
                                                  +    }
                                                  +}
                                                  +
                                                  +.btn-navbar {
                                                  +    text-decoration: none !important;
                                                  +    outline: none !important;
                                                  +}
                                                  +
                                                  +.navbar-header {
                                                  +    background-color: #262A31;
                                                  +    text-align: center;
                                                  +    margin: 0 -18px;
                                                  +}
                                                  +
                                                  +.navbar-header .btn {
                                                  +    margin-right: 20px;
                                                  +}
                                                  +
                                                  +.cS-slideWrapper {
                                                  +    overflow: hidden;
                                                  +}
                                                  +
                                                  +.cS-slideWrapper .cS-slide {
                                                  +    -webkit-transform: translate(0px, 0px);
                                                  +    -ms-transform: translate(0px, 0px);
                                                  +    transform: translate(0px, 0px);
                                                  +    -webkit-transition: all 1s;
                                                  +    transition: all 1s;
                                                  +    -webkit-transition-duration: inherit;
                                                  +    transition-duration: inherit;
                                                  +    -webkit-transition-timing-function: inherit;
                                                  +    transition-timing-function: inherit;
                                                  +}
                                                  +
                                                  +.cS-slideWrapper .cS-fade {
                                                  +    position: relative;
                                                  +    -webkit-transition-duration: 1s;
                                                  +    transition-duration: 1s;
                                                  +    -webkit-transition-timing-function: ease;
                                                  +    transition-timing-function: ease;
                                                  +}
                                                  +
                                                  +.cS-slideWrapper .cS-fade > li {
                                                  +    position: absolute !important;
                                                  +    top: 0;
                                                  +    left: 0;
                                                  +    opacity: 0;
                                                  +    z-index: 9;
                                                  +    -webkit-transition-delay: 0s;
                                                  +    transition-delay: 0s;
                                                  +    -webkit-transition-duration: inherit;
                                                  +    transition-duration: inherit;
                                                  +    -webkit-transition-property: opacity;
                                                  +    transition-property: opacity;
                                                  +    -webkit-transition-timing-function: inherit;
                                                  +    transition-timing-function: inherit;
                                                  +}
                                                  +
                                                  +.cS-slideWrapper .cS-fade > li.active {
                                                  +    opacity: 1;
                                                  +    z-index: 10;
                                                  +}
                                                  +
                                                  +.cS-slideWrapper #cS-pager {
                                                  +    margin: 10px 0 0;
                                                  +    padding: 0;
                                                  +    text-align: center;
                                                  +}
                                                  +
                                                  +.cS-slideWrapper #cS-pager > li {
                                                  +    cursor: pointer;
                                                  +    display: inline-block;
                                                  +    padding: 0 5px;
                                                  +}
                                                  +
                                                  +.cS-slideWrapper #cS-pager > li a {
                                                  +    background-color: #222222;
                                                  +    border-radius: 30px;
                                                  +    display: inline-block;
                                                  +    height: 8px;
                                                  +    overflow: hidden;
                                                  +    text-indent: -999em;
                                                  +    width: 8px;
                                                  +    -webkit-transition: all 0.5s linear 0s;
                                                  +    transition: all 0.5s linear 0s;
                                                  +}
                                                  +
                                                  +.cS-slideWrapper #cS-pager > li:hover a,
                                                  +.cS-slideWrapper #cS-pager > li.active a {
                                                  +    background-color: #428bca;
                                                  +}
                                                  +
                                                  +.cS-hidden {
                                                  +    height: 1px;
                                                  +    opacity: 0;
                                                  +    filter: alpha(opacity=0);
                                                  +    overflow: hidden;
                                                  +}
                                                  +
                                                  +.cS-slideWrapper .media {
                                                  +    opacity: 0.8;
                                                  +}
                                                  +
                                                  +.cS-slideWrapper .media.active {
                                                  +    opacity: 1;
                                                  +}
                                                  +
                                                  +#cS-pager .active a {
                                                  +    background-color: #000000;
                                                  +    border: 0 none;
                                                  +    color: #FFFFFF;
                                                  +}
                                                  +
                                                  +.clearfix:before,
                                                  +.clearfix:after,
                                                  +.container:before,
                                                  +.container:after,
                                                  +.container-fluid:before,
                                                  +.container-fluid:after,
                                                  +.row:before,
                                                  +.row:after,
                                                  +.form-horizontal .form-group:before,
                                                  +.form-horizontal .form-group:after,
                                                  +.nav:before,
                                                  +.nav:after,
                                                  +.navbar:before,
                                                  +.navbar:after,
                                                  +.navbar-header:before,
                                                  +.navbar-header:after,
                                                  +.navbar-collapse:before,
                                                  +.navbar-collapse:after {
                                                  +    content: " ";
                                                  +    display: table;
                                                  +}
                                                  +
                                                  +.clearfix:after,
                                                  +.container:after,
                                                  +.container-fluid:after,
                                                  +.row:after,
                                                  +.form-horizontal .form-group:after,
                                                  +.nav:after,
                                                  +.navbar:after,
                                                  +.navbar-header:after,
                                                  +.navbar-collapse:after {
                                                  +    clear: both;
                                                  +}
                                                  +
                                                  +.center-block {
                                                  +    display: block;
                                                  +    margin-left: auto;
                                                  +    margin-right: auto;
                                                  +}
                                                  +
                                                  +.pull-right {
                                                  +    float: right !important;
                                                  +}
                                                  +
                                                  +.pull-left {
                                                  +    float: left !important;
                                                  +}
                                                  +
                                                  +.hide {
                                                  +    display: none !important;
                                                  +}
                                                  +
                                                  +.show {
                                                  +    display: block !important;
                                                  +}
                                                  +
                                                  +.invisible {
                                                  +    visibility: hidden;
                                                  +}
                                                  +
                                                  +.text-hide {
                                                  +    font: 0/0 a;
                                                  +    color: transparent;
                                                  +    text-shadow: none;
                                                  +    background-color: transparent;
                                                  +    border: 0;
                                                  +}
                                                  +
                                                  +.hidden {
                                                  +    display: none !important;
                                                  +    visibility: hidden !important;
                                                  +}
                                                  +
                                                  +.affix {
                                                  +    position: fixed;
                                                  +}
                                                  +
                                                  +.ib {
                                                  +    display: inline-block;
                                                  +    vertical-align: middle;
                                                  +}
                                                  +
                                                  +.pdl0 {
                                                  +    padding-left: 0;
                                                  +}
                                                  +
                                                  +@-ms-viewport {
                                                  +    width: device-width;
                                                  +}
                                                  +
                                                  +.visible-xs,
                                                  +tr.visible-xs,
                                                  +th.visible-xs,
                                                  +td.visible-xs {
                                                  +    display: none !important;
                                                  +}
                                                  +
                                                  +@media (max-width: 767px) {
                                                  +    .visible-xs {
                                                  +        display: block !important;
                                                  +    }
                                                  +
                                                  +    table.visible-xs {
                                                  +        display: table;
                                                  +    }
                                                  +
                                                  +    tr.visible-xs {
                                                  +        display: table-row !important;
                                                  +    }
                                                  +
                                                  +    th.visible-xs,
                                                  +  td.visible-xs {
                                                  +        display: table-cell !important;
                                                  +    }
                                                  +}
                                                  +
                                                  +.visible-sm,
                                                  +tr.visible-sm,
                                                  +th.visible-sm,
                                                  +td.visible-sm {
                                                  +    display: none !important;
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) and (max-width: 991px) {
                                                  +    .visible-sm {
                                                  +        display: block !important;
                                                  +    }
                                                  +
                                                  +    table.visible-sm {
                                                  +        display: table;
                                                  +    }
                                                  +
                                                  +    tr.visible-sm {
                                                  +        display: table-row !important;
                                                  +    }
                                                  +
                                                  +    th.visible-sm,
                                                  +  td.visible-sm {
                                                  +        display: table-cell !important;
                                                  +    }
                                                  +}
                                                  +
                                                  +.visible-md,
                                                  +tr.visible-md,
                                                  +th.visible-md,
                                                  +td.visible-md {
                                                  +    display: none !important;
                                                  +}
                                                  +
                                                  +@media (min-width: 992px) and (max-width: 1199px) {
                                                  +    .visible-md {
                                                  +        display: block !important;
                                                  +    }
                                                  +
                                                  +    table.visible-md {
                                                  +        display: table;
                                                  +    }
                                                  +
                                                  +    tr.visible-md {
                                                  +        display: table-row !important;
                                                  +    }
                                                  +
                                                  +    th.visible-md,
                                                  +  td.visible-md {
                                                  +        display: table-cell !important;
                                                  +    }
                                                  +}
                                                  +
                                                  +.visible-lg,
                                                  +tr.visible-lg,
                                                  +th.visible-lg,
                                                  +td.visible-lg {
                                                  +    display: none !important;
                                                  +}
                                                  +
                                                  +@media (min-width: 1200px) {
                                                  +    .visible-lg {
                                                  +        display: block !important;
                                                  +    }
                                                  +
                                                  +    table.visible-lg {
                                                  +        display: table;
                                                  +    }
                                                  +
                                                  +    tr.visible-lg {
                                                  +        display: table-row !important;
                                                  +    }
                                                  +
                                                  +    th.visible-lg,
                                                  +  td.visible-lg {
                                                  +        display: table-cell !important;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media (max-width: 767px) {
                                                  +    .hidden-xs,
                                                  +  tr.hidden-xs,
                                                  +  th.hidden-xs,
                                                  +  td.hidden-xs {
                                                  +        display: none !important;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media (min-width: 768px) and (max-width: 991px) {
                                                  +    .hidden-sm,
                                                  +  tr.hidden-sm,
                                                  +  th.hidden-sm,
                                                  +  td.hidden-sm {
                                                  +        display: none !important;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media (min-width: 992px) and (max-width: 1199px) {
                                                  +    .hidden-md,
                                                  +  tr.hidden-md,
                                                  +  th.hidden-md,
                                                  +  td.hidden-md {
                                                  +        display: none !important;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media (min-width: 1200px) {
                                                  +    .hidden-lg,
                                                  +  tr.hidden-lg,
                                                  +  th.hidden-lg,
                                                  +  td.hidden-lg {
                                                  +        display: none !important;
                                                  +    }
                                                  +}
                                                  +
                                                  +.visible-print,
                                                  +tr.visible-print,
                                                  +th.visible-print,
                                                  +td.visible-print {
                                                  +    display: none !important;
                                                  +}
                                                  +
                                                  +@media print {
                                                  +    .visible-print {
                                                  +        display: block !important;
                                                  +    }
                                                  +
                                                  +    table.visible-print {
                                                  +        display: table;
                                                  +    }
                                                  +
                                                  +    tr.visible-print {
                                                  +        display: table-row !important;
                                                  +    }
                                                  +
                                                  +    th.visible-print,
                                                  +  td.visible-print {
                                                  +        display: table-cell !important;
                                                  +    }
                                                  +}
                                                  +
                                                  +@media print {
                                                  +    .hidden-print,
                                                  +  tr.hidden-print,
                                                  +  th.hidden-print,
                                                  +  td.hidden-print {
                                                  +        display: none !important;
                                                  +    }
                                                  +}
                                                  +
                                                  +.csSlideOuter .csPager.cSGallery li.active {
                                                  +    outline: 2px solid #CD3420;
                                                  +    outline-offset: -2px;
                                                  +}
                                                  +
                                                  +/* �������?����֮�� www.lanrenzhijia.com */
                                                  +
                                                  +/*share*/
                                                  +.share{
                                                  +    text-align: center;
                                                  +    margin-top: 40px;
                                                  +}
                                                  +.share > *{
                                                  +    display: inline-block;
                                                  +    vertical-align: middle;
                                                  +    margin-right: 10px;
                                                  +}
                                                  +.share .facebook{
                                                  +    position: relative;
                                                  +    top: -3px;
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/css/prettify.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/css/prettify.css
                                                  new file mode 100644
                                                  index 00000000..1061bedb
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/css/prettify.css
                                                  @@ -0,0 +1,45 @@
                                                  +.com {
                                                  +	color: #93a1a1;
                                                  +}
                                                  +.lit {
                                                  +	color: #195f91;
                                                  +}
                                                  +.pun, .opn, .clo {
                                                  +	color: #93a1a1;
                                                  +}
                                                  +.fun {
                                                  +	color: #dc322f;
                                                  +}
                                                  +.str, .atv {
                                                  +	color: #D14;
                                                  +}
                                                  +.kwd, .prettyprint .tag {
                                                  +	color: #1e347b;
                                                  +}
                                                  +.typ, .atn, .dec, .var {
                                                  +	color: teal;
                                                  +}
                                                  +.pln {
                                                  +	color: #48484c;
                                                  +}
                                                  +.prettyprint {
                                                  +	background-color: #F7F7F9;
                                                  +	border: 1px solid #E8E8E8;
                                                  +	font-size: 14px;
                                                  +	padding: 8px;
                                                  +	white-space:pre-wrap;
                                                  +}
                                                  +/* Specify class=linenums on a pre to get line numbering */
                                                  +
                                                  +ol.linenums {
                                                  +	margin: 0;
                                                  +	padding-left: 33px;
                                                  +	list-style-position: outside;
                                                  +}
                                                  +ol.linenums li {
                                                  +	padding-left: 12px;
                                                  +	color: #bebec5;
                                                  +	line-height: 20px;
                                                  +	text-shadow: 0 1px 0 #fff;
                                                  +}
                                                  +/* ������������֮�� www.lanrenzhijia.com */
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/img/step_1.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/img/step_1.png
                                                  new file mode 100644
                                                  index 00000000..ae23ff4a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/img/step_1.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/img/step_2.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/img/step_2.png
                                                  new file mode 100644
                                                  index 00000000..adb5a9e7
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/img/step_2.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/img/step_3.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/img/step_3.png
                                                  new file mode 100644
                                                  index 00000000..bc34c155
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/img/step_3.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/img/step_4.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/img/step_4.png
                                                  new file mode 100644
                                                  index 00000000..cf96ef6e
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/img/step_4.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/js/jquery.lightSlider.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/js/jquery.lightSlider.js
                                                  new file mode 100644
                                                  index 00000000..a63d1820
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/js/jquery.lightSlider.js
                                                  @@ -0,0 +1,480 @@
                                                  +/** ==========================================================
                                                  +
                                                  +* jquery lightSlider.js v1.0
                                                  +* http://sachinchoolur.github.io/lightslider/
                                                  +* Released under the Apache License - http://opensource.org/licenses/Apache-2.0
                                                  +
                                                  +=========================================================/**/
                                                  +;
                                                  +(function ($, undefined) {
                                                  +    "use strict";
                                                  +    var defaults = {
                                                  +        slideWidth: 270,
                                                  +        slideMargin: 0,
                                                  +        slideMove: 1,
                                                  +        minSlide: 1,
                                                  +        maxSlide: 8,
                                                  +        mode: "slide",
                                                  +        useCSS: true,
                                                  +        speed: 1000, //ms'
                                                  +        easing: '', //'ex cubic-bezier(0.25, 0, 0.25, 1)',//
                                                  +        auto: false,
                                                  +        pause: 3000,
                                                  +        loop: true,
                                                  +        controls: true,
                                                  +        prevHtml: '',
                                                  +        nextHtml: '',
                                                  +        keyPress: true,
                                                  +        pager: true,
                                                  +        gallery: false,
                                                  +        thumbWidth: 50,
                                                  +        thumbMargin: 3,
                                                  +        currentPagerPosition: 'middle',
                                                  +        swipeThreshold: 40,
                                                  +        onBeforeStart: function () {},
                                                  +        onSliderLoad: function () {},
                                                  +        onBefroreSlide: function () {},
                                                  +        onAfterSlide: function () {},
                                                  +        onBeforeNextSlide: function () {},
                                                  +        onBeforePrevSlide: function () {}
                                                  +    };
                                                  +    $.fn.lightSlider = function (options) {
                                                  +        var plugin = {};
                                                  +        var settings = $.extend(true, {}, defaults, options);
                                                  +        var $el = this;
                                                  +        plugin.$el = this;
                                                  +        var $children = $el.children(),
                                                  +            length = 0,
                                                  +            w = 0,
                                                  +            on = false,
                                                  +            elWidth = 0,
                                                  +            $slide = '',
                                                  +            scene = 0,
                                                  +            pagerWidth = 0,
                                                  +            slideWidth = 0,
                                                  +            resize = false,
                                                  +            slideOn = false,
                                                  +            interval = '',
                                                  +            isTouch = ('ontouchstart' in document.documentElement);
                                                  +        var refresh = new Object();
                                                  +        plugin = {
                                                  +            doCss: function () {
                                                  +                var support = function () {
                                                  +                    var transition = ['transition', 'MozTransition', 'WebkitTransition', 'OTransition', 'msTransition', 'KhtmlTransition'];
                                                  +                    var root = document.documentElement;
                                                  +                    for (var i = 0; i < transition.length; i++) {
                                                  +                        if (transition[i] in root.style) {
                                                  +                            return true;
                                                  +                        }
                                                  +                    }
                                                  +                };
                                                  +                if (settings.useCSS && support()) {
                                                  +                    return true;
                                                  +                }
                                                  +                return false;
                                                  +            },
                                                  +            keyPress: function () {
                                                  +                if (settings.keyPress === true) {
                                                  +                    $(document).bind('keyup', function (e) {
                                                  +                        if (e.keyCode === 37) {
                                                  +                            $el.goToPrevSlide();
                                                  +                            clearInterval(interval);
                                                  +                        } else if (e.keyCode === 39) {
                                                  +                            $el.goToNextSlide();
                                                  +                            clearInterval(interval);
                                                  +                        }
                                                  +                    });
                                                  +                }
                                                  +            },
                                                  +            controls: function () {
                                                  +                if (settings.controls) {
                                                  +                    $el.after('<div class="csAction"><a class="csPrev">' + settings.prevHtml + '</a><a class="csNext">' + settings.nextHtml + '</a></div>');
                                                  +                    var $prev = $slide.find('.csPrev');
                                                  +                    var $next = $slide.find('.csNext');
                                                  +                    $prev.bind('click', function () {
                                                  +                        $el.goToPrevSlide();
                                                  +                        clearInterval(interval);
                                                  +                    });
                                                  +                    $next.bind('click', function () {
                                                  +                        $el.goToNextSlide();
                                                  +                        clearInterval(interval);
                                                  +                    });
                                                  +                }
                                                  +            },
                                                  +            initialStyle: function () {
                                                  +                $el.addClass('lightSlider').wrap("<div class='csSlideOuter'><div class='csSlideWrapper'></div></div>");
                                                  +                $slide = $el.parent('.csSlideWrapper');
                                                  +                settings.onBeforeStart.call(this);
                                                  +                elWidth = $el.outerWidth();
                                                  +                var min, max;
                                                  +                refresh.calSW = function () {
                                                  +                    min = (elWidth - ((settings.minSlide * settings.slideMargin) - settings.slideMargin)) / settings.minSlide;
                                                  +                    max = (elWidth - ((settings.maxSlide * settings.slideMargin) - settings.slideMargin)) / settings.maxSlide;
                                                  +                    if (settings.slideWidth === '') {
                                                  +                        slideWidth = min;
                                                  +                    } else if (min < settings.slideWidth) {
                                                  +                        slideWidth = min;
                                                  +                    } else if (max > settings.slideWidth) {
                                                  +                        slideWidth = max;
                                                  +                    } else {
                                                  +                        slideWidth = settings.slideWidth;
                                                  +                    }
                                                  +                };
                                                  +                refresh.sSW = function () {
                                                  +                    length = $children.length;
                                                  +                    w = length * (slideWidth + settings.slideMargin);
                                                  +                    if (w % 1) {
                                                  +                        w = w + 1;
                                                  +                    }
                                                  +                    $el.css('width', w + 'px');
                                                  +                    $children.css('width', slideWidth + 'px');
                                                  +                    $children.css({
                                                  +                        'float': 'left',
                                                  +                        'margin-right': settings.slideMargin + 'px'
                                                  +                    });
                                                  +                };
                                                  +                refresh.calL = function () {
                                                  +                    $children = $el.children();
                                                  +                    length = $children.length;
                                                  +                };
                                                  +                if (this.doCss()) {
                                                  +                    $slide.addClass('usingCss');
                                                  +                }
                                                  +                refresh.calL();
                                                  +                $children.first().addClass('active');
                                                  +                if (settings.mode === "slide") {
                                                  +                    refresh.calSW();
                                                  +                    refresh.sSW();
                                                  +                } else {
                                                  +                    var height = $children.height();
                                                  +                    $el.css('height', height);
                                                  +                    $el.addClass('csFade');
                                                  +                    if (!this.doCss()) {
                                                  +                        $children.not(".active").css('display', 'none');
                                                  +                    }
                                                  +                }
                                                  +                $slide.css({
                                                  +                    'max-width': '100%',
                                                  +                    'position': 'relative'
                                                  +                });
                                                  +            },
                                                  +            pager: function () {
                                                  +                var $this = this;
                                                  +                refresh.createPager = function () {
                                                  +                    var maxSlide = '';
                                                  +                    if (settings.mode === 'slide') {
                                                  +                        maxSlide = parseInt(length / settings.slideMove);
                                                  +                        var mod = length % settings.slideMove;
                                                  +                        if (mod) {
                                                  +                            maxSlide = maxSlide + 1;
                                                  +                        }
                                                  +                    } else {
                                                  +                        maxSlide = length;
                                                  +                    }
                                                  +                    var i = 0,
                                                  +                        pagers = '',
                                                  +                        v = 0;
                                                  +                    for (i = 0; i < maxSlide; i++) {
                                                  +                        if (settings.mode === 'slide') {
                                                  +                            v = i * ((slideWidth + settings.slideMargin) * settings.slideMove);
                                                  +                        }
                                                  +                        var thumb = $children.eq(i * settings.slideMove).attr('data-thumb');
                                                  +                        if (settings.gallery === true) {
                                                  +                            pagers += '<li style="float:left;width:' + settings.thumbWidth + 'px;margin-right:' + settings.thumbMargin + 'px"><a href="javascript:void(0)"><img src="' + thumb + '" /></a></li>';
                                                  +                        } else {
                                                  +                            pagers += '<li><a href="javascript:void(0)">' + (i + 1) + '</a></li>';
                                                  +                        }
                                                  +                        if (settings.mode === 'slide') {
                                                  +                            if ((v) >= w - elWidth - settings.slideMargin) {
                                                  +                                i = i + 1;
                                                  +                                break;
                                                  +                            }
                                                  +                        }
                                                  +                    }
                                                  +                    var $cSouter = $slide.parent();
                                                  +                    $cSouter.find('.csPager').html(pagers);
                                                  +                    if (settings.gallery === true) {
                                                  +                        pagerWidth = i * (settings.thumbMargin + settings.thumbWidth);
                                                  +                        $cSouter.find('.csPager').css({
                                                  +                            'width': pagerWidth + 'px',
                                                  +                            'transform': 'translate(0px, 0px)',
                                                  +                            'transition': '1s all'
                                                  +                        });
                                                  +                    }
                                                  +                    var $pager = $cSouter.find('.csPager').find('li');
                                                  +                    $pager.first().addClass('active');
                                                  +                    $pager.on('click', function () {
                                                  +                        scene = $pager.index(this);
                                                  +                        $el.mode();
                                                  +                        if (settings.gallery === true) {
                                                  +                            $this.slideThumb();
                                                  +                        }
                                                  +                        clearInterval(interval);
                                                  +                    });
                                                  +                };
                                                  +                if (settings.pager) {
                                                  +                    var cl = '';
                                                  +                    if (settings.gallery) {
                                                  +                        cl = 'cSGallery';
                                                  +                    } else {
                                                  +                        cl = 'cSpg';
                                                  +                    }
                                                  +                    $slide.after('<ul class="csPager ' + cl + '"></ul>');
                                                  +                    refresh.createPager();
                                                  +                }
                                                  +                settings.onSliderLoad.call(this);
                                                  +            },
                                                  +            active: function (ob, t) {
                                                  +                if (this.doCss() && settings.mode === "fade") {
                                                  +                    if (!$slide.hasClass('on')) {
                                                  +                        $slide.addClass('on');
                                                  +                    }
                                                  +                }
                                                  +                var sc = 0;
                                                  +                if (scene * settings.slideMove < length) {
                                                  +                    ob.removeClass('active');
                                                  +                    if (!this.doCss() && settings.mode === "fade") {
                                                  +                        ob.fadeOut(settings.speed);
                                                  +                    }
                                                  +                    t === true ? sc = scene : sc = scene * settings.slideMove;
                                                  +                    if (t === true) {
                                                  +                        var l = ob.length;
                                                  +                        var nl = l - 1;
                                                  +                        if (sc + 1 >= l) {
                                                  +                            sc = nl;
                                                  +                        }
                                                  +                    }
                                                  +                    if (!this.doCss() && settings.mode === "fade") {
                                                  +                        ob.eq(sc).fadeIn(settings.speed);
                                                  +                    }
                                                  +                    ob.eq(sc).addClass('active');
                                                  +                } else {
                                                  +                    ob.removeClass('active');
                                                  +                    ob.eq(ob.length - 1).addClass('active');
                                                  +                    if (!this.doCss() && settings.mode === "fade") {
                                                  +                        ob.fadeOut(settings.speed);
                                                  +                        ob.eq(sc).fadeIn(settings.speed);
                                                  +                    }
                                                  +                }
                                                  +            },
                                                  +            move: function (ob, v) {
                                                  +                if (this.doCss()) {
                                                  +                    ob.css('transform', 'translate(-' + v + 'px, 0px)');
                                                  +                } else {
                                                  +                    ob.css('position', 'relative').animate({
                                                  +                        left: -v + 'px'
                                                  +                    }, settings.speed, settings.easing);
                                                  +                }
                                                  +                var $thumb = $slide.parent().find('.csPager').find('li');
                                                  +                this.active($thumb, true);
                                                  +            },
                                                  +            fade: function () {
                                                  +                this.active($children, false);
                                                  +                var $thumb = $slide.parent().find('.csPager').find('li');
                                                  +                this.active($thumb, true);
                                                  +            },
                                                  +            slide: function () {
                                                  +                var $this = this;
                                                  +                refresh.calSlide = function () {
                                                  +                    var slideValue = scene * ((slideWidth + settings.slideMargin) * settings.slideMove);
                                                  +                    $this.active($children, false);
                                                  +                    if ((slideValue) > w - elWidth - settings.slideMargin) {
                                                  +                        slideValue = w - elWidth - settings.slideMargin;
                                                  +                    } else if (slideValue < 0) {
                                                  +                        slideValue = 0;
                                                  +                    }
                                                  +                    $this.move($el, slideValue);
                                                  +                };
                                                  +                refresh.calSlide();
                                                  +                slideOn = true;
                                                  +            },
                                                  +            slideThumb: function () {
                                                  +                var position;
                                                  +                switch (settings.currentPagerPosition) {
                                                  +                case 'left':
                                                  +                    position = 0;
                                                  +                    break;
                                                  +                case 'middle':
                                                  +                    position = (elWidth / 2) - (settings.thumbWidth / 2);
                                                  +                    break;
                                                  +                case 'right':
                                                  +                    position = elWidth - settings.thumbWidth;
                                                  +                }
                                                  +                var thumbSlide = scene * ((settings.thumbWidth + settings.thumbMargin)) - (position);
                                                  +                if ((thumbSlide + elWidth) > pagerWidth) {
                                                  +                    thumbSlide = pagerWidth - elWidth - settings.thumbMargin;
                                                  +                } else if (thumbSlide < 0) {
                                                  +                    thumbSlide = 0;
                                                  +                }
                                                  +                var $pager = $slide.parent().find('.csPager');
                                                  +                this.move($pager, thumbSlide);
                                                  +            },
                                                  +            auto: function () {
                                                  +                if (settings.auto) {
                                                  +                    interval = setInterval(function () {
                                                  +                        $el.goToNextSlide();
                                                  +                    }, settings.pause);
                                                  +                }
                                                  +            },
                                                  +            enableTouch: function () {
                                                  +                if (isTouch) {
                                                  +                    var startCoords = {},
                                                  +                        endCoords = {};
                                                  +                    $slide.on('touchstart.lightSlider', function (e) {
                                                  +                        endCoords = e.originalEvent.targetTouches[0];
                                                  +                        startCoords.pageX = e.originalEvent.targetTouches[0].pageX;
                                                  +                        startCoords.pageY = e.originalEvent.targetTouches[0].pageY;
                                                  +                    });
                                                  +                    $slide.on('touchmove.lightSlider', function (e) {
                                                  +                        var orig = e.originalEvent;
                                                  +                        endCoords = orig.targetTouches[0];
                                                  +                        var xMovement = Math.abs(endCoords.pageX - startCoords.pageX);
                                                  +                        var yMovement = Math.abs(endCoords.pageY - startCoords.pageY);
                                                  +                        if ((xMovement * 3) > yMovement) {
                                                  +                            e.preventDefault();
                                                  +                        }
                                                  +                    });
                                                  +                    $slide.on('touchend.lightSlider', function () {
                                                  +                        var distance = endCoords.pageX - startCoords.pageX,
                                                  +                            swipeThreshold = settings.swipeThreshold;
                                                  +                        if (distance >= swipeThreshold) {
                                                  +                            $el.goToPrevSlide();
                                                  +                            clearInterval(interval);
                                                  +                        } else if (distance <= -swipeThreshold) {
                                                  +                            $el.goToNextSlide();
                                                  +                            clearInterval(interval);
                                                  +                        }
                                                  +                    });
                                                  +                }
                                                  +            },
                                                  +            build: function () {
                                                  +                var $this = this;
                                                  +                $this.initialStyle();
                                                  +                $this.auto();
                                                  +                $this.enableTouch();
                                                  +                $this.pager();
                                                  +                $this.controls();
                                                  +                $this.keyPress();
                                                  +            }
                                                  +        };
                                                  +        plugin.build();
                                                  +        refresh.init = function () {
                                                  +            resize = true;
                                                  +            refresh.calL();
                                                  +            if (settings.mode === "slide") {
                                                  +                $el.removeClass('csSlide');
                                                  +            }
                                                  +            elWidth = $slide.outerWidth();
                                                  +            if (settings.mode === "slide") {
                                                  +                refresh.calSW();
                                                  +                refresh.sSW();
                                                  +            }
                                                  +            setTimeout(function () {
                                                  +                if (resize === true) {
                                                  +                    if (settings.mode === "slide") {
                                                  +                        $el.addClass('csSlide');
                                                  +                    }
                                                  +                    resize = false;
                                                  +                }
                                                  +            }, 1000);
                                                  +            if (settings.pager) {
                                                  +                refresh.createPager();
                                                  +            }
                                                  +            if (settings.gallery === true) {
                                                  +                plugin.slideThumb();
                                                  +            }
                                                  +            if (slideOn) {
                                                  +                refresh.calSlide();
                                                  +            }
                                                  +        };
                                                  +        $el.goToPrevSlide = function () {
                                                  +            if (scene > 0) {
                                                  +                settings.onBeforePrevSlide.call(this);
                                                  +                scene--;
                                                  +                $el.mode();
                                                  +                if (settings.gallery === true) {
                                                  +                    plugin.slideThumb();
                                                  +                }
                                                  +            } else {
                                                  +                if (settings.loop === true) {
                                                  +                    settings.onBeforePrevSlide.call(this);
                                                  +                    var l = length;
                                                  +                    l = l - 1;
                                                  +                    scene = parseInt(l / settings.slideMove, 10);
                                                  +                    $el.mode();
                                                  +                    if (settings.gallery === true) {
                                                  +                        plugin.slideThumb();
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        };
                                                  +        $el.goToNextSlide = function () {
                                                  +            if ((scene * settings.slideMove) < length - settings.slideMove) {
                                                  +                settings.onBeforeNextSlide.call(this);
                                                  +                scene++;
                                                  +                $el.mode();
                                                  +                if (settings.gallery === true) {
                                                  +                    plugin.slideThumb();
                                                  +                }
                                                  +            } else {
                                                  +                if (settings.loop === true) {
                                                  +                    settings.onBeforeNextSlide.call(this);
                                                  +                    scene = 0;
                                                  +                    $el.mode();
                                                  +                    if (settings.gallery === true) {
                                                  +                        plugin.slideThumb();
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +        };
                                                  +        $el.mode = function () {
                                                  +            if (on === false) {
                                                  +                if (settings.mode === "slide") {
                                                  +                    if (plugin.doCss()) {
                                                  +                        $el.addClass('csSlide');
                                                  +                        if (settings.speed !== '') {
                                                  +                            $slide.css('transition-duration', settings.speed + 'ms');
                                                  +                        }
                                                  +                        if (settings.easing !== '') {
                                                  +                            $slide.css('transition-timing-function', settings.easing);
                                                  +                        }
                                                  +                    }
                                                  +                } else {
                                                  +                    if (plugin.doCss()) {
                                                  +                        if (settings.speed !== '') {
                                                  +                            $el.css('transition-duration', settings.speed + 'ms');
                                                  +                        }
                                                  +                        if (settings.easing !== '') {
                                                  +                            $el.css('transition-timing-function', settings.easing);
                                                  +                        }
                                                  +                    }
                                                  +                }
                                                  +            }
                                                  +            settings.onBefroreSlide.call(this);
                                                  +            if (settings.mode === "slide") {
                                                  +                plugin.slide();
                                                  +            } else {
                                                  +                plugin.fade();
                                                  +            }
                                                  +            setTimeout(function () {
                                                  +                settings.onAfterSlide.call(this);
                                                  +            }, settings.speed);
                                                  +            on = true;
                                                  +        };
                                                  +        $el.refresh = function () {
                                                  +            refresh.init();
                                                  +        };
                                                  +        $el.getCurrentSlideCount = function () {
                                                  +            return scene + 1;
                                                  +        };
                                                  +        $el.goToSlide = function (s) {
                                                  +            scene = s;
                                                  +            $el.mode();
                                                  +        };
                                                  +        $(window).on('resize', function (e) {
                                                  +            e.preventDefault();
                                                  +            refresh.init();
                                                  +        });
                                                  +        return this;
                                                  +    };
                                                  +}(jQuery));
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/js/jquery.lightSlider.min.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/js/jquery.lightSlider.min.js
                                                  new file mode 100644
                                                  index 00000000..42c243a9
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/js/jquery.lightSlider.min.js
                                                  @@ -0,0 +1,2 @@
                                                  +/* jquery lightSlider.js v1.0 *** http://sachinchoolur.github.io/lightslider */
                                                  +eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('!4(e){"2t 2G";5 i={11:2I,k:0,z:1,1w:1,1v:8,7:"q",27:!0,y:26,P:"",1b:!1,1Y:2m,1p:!0,15:!0,1V:"",1R:"",19:!0,U:!0,B:!1,O:2z,V:3,1y:"1G",1F:2v,1A:4(){},2f:4(){},2e:4(){},29:4(){},1g:4(){},1f:4(){}};e.2p.Z=4(t){5 s={},a=e.2E(!0,{},i,t),n=6;s.$2J=6;5 l=n.1U(),d=0,o=0,r=!1,c=0,u="",f=0,h=0,g=0,v=!1,m=!1,p="",S="2q"1K 1n.24,b=2B 2C;13 s={A:4(){5 e=4(){22(5 e=["L","2T","2U","2W","2X","2k"],i=1n.24,t=0;t<e.W;t++)w(e[t]1K i.1M)13!0};13 a.27&&e()?!0:!1},19:4(){a.19===!0&&e(1n).1m("2s",4(e){37===e.28?(n.17(),F(p)):39===e.28&&(n.Y(),F(p))})},15:4(){w(a.15){n.1Z(\'<M Q="3a"><a Q="1C">\'+a.1V+\'</a><a Q="1D">\'+a.1R+"</a></M>");5 e=u.x(".1C"),i=u.x(".1D");e.1m("1e",4(){n.17(),F(p)}),i.1m("1e",4(){n.Y(),F(p)})}},1Q:4(){n.C("Z").2Y("<M Q=\'32\'><M Q=\'1W\'></M></M>"),u=n.X(".1W"),a.1A.D(6),c=n.23();5 e,i;w(b.1h=4(){e=(c-(a.1w*a.k-a.k))/a.1w,i=(c-(a.1v*a.k-a.k))/a.1v,g=""===a.11?e:e<a.11?e:i>a.11?i:a.11},b.1i=4(){d=l.W,o=d*(g+a.k),o%1&&(o+=1),n.9("R",o+"E"),l.9("R",g+"E"),l.9({"1z":"1a","1B-1j":a.k+"E"})},b.1k=4(){l=n.1U(),d=l.W},6.A()&&u.C("2D"),b.1k(),l.1E().C("j"),"q"===a.7)b.1h(),b.1i();18{5 t=l.1H();n.9("1H",t),n.C("2L"),6.A()||l.2N(".j").9("2O","2P")}u.9({"2Q-R":"2S%",1I:"1J"})},U:4(){5 e=6;w(b.1l=4(){5 i="";w("q"===a.7){i=1L(d/a.z);5 t=d%a.z;t&&(i+=1)}18 i=d;5 s=0,r="",v=0;22(s=0;i>s;s++){"q"===a.7&&(v=s*(g+a.k)*a.z);5 m=l.T(s*a.z).2Z("30-31");w(r+=a.B===!0?\'<G 1M="1z:1a;R:\'+a.O+"E;1B-1j:"+a.V+\'E"><a 1N="1O:1P(0)"><2n 2o="\'+m+\'" /></a></G>\':\'<G><a 1N="1O:1P(0)">\'+(s+1)+"</a></G>","q"===a.7&&v>=o-c-a.k){s+=1;1c}}5 S=u.X();S.x(".I").2r(r),a.B===!0&&(h=s*(a.V+a.O),S.x(".I").9({R:h+"E",1S:"1T(1o, 1o)",L:"1s 2u"}));5 b=S.x(".I").x("G");b.1E().C("j"),b.H("1e",4(){f=b.2w(6),n.7(),a.B===!0&&e.J(),F(p)})},a.U){5 i="";i=a.B?"2x":"2y",u.1Z(\'<1X Q="I \'+i+\'"></1X>\'),b.1l()}a.2f.D(6)},j:4(e,i){6.A()&&"N"===a.7&&(u.2A("H")||u.C("H"));5 t=0;w(f*a.z<d){w(e.1q("j"),6.A()||"N"!==a.7||e.20(a.y),t=i===!0?f:f*a.z,i===!0){5 s=e.W,n=s-1;t+1>=s&&(t=n)}6.A()||"N"!==a.7||e.T(t).21(a.y),e.T(t).C("j")}18 e.1q("j"),e.T(e.W-1).C("j"),6.A()||"N"!==a.7||(e.20(a.y),e.T(t).21(a.y))},1r:4(e,i){6.A()?e.9("1S","1T(-"+i+"E, 1o)"):e.9("1I","1J").2F({1a:-i+"E"},a.y,a.P);5 t=u.X().x(".I").x("G");6.j(t,!0)},N:4(){6.j(l,!1);5 e=u.X().x(".I").x("G");6.j(e,!0)},q:4(){5 e=6;b.1t=4(){5 i=f*(g+a.k)*a.z;e.j(l,!1),i>o-c-a.k?i=o-c-a.k:0>i&&(i=0),e.1r(n,i)},b.1t(),m=!0},J:4(){5 e;2H(a.1y){1u"1a":e=0;1c;1u"1G":e=c/2-a.O/2;1c;1u"1j":e=c-a.O}5 i=f*(a.O+a.V)-e;i+c>h?i=h-c-a.V:0>i&&(i=0);5 t=u.X().x(".I");6.1r(t,i)},1b:4(){a.1b&&(p=2K(4(){n.Y()},a.1Y))},25:4(){w(S){5 e={},i={};u.H("2M.Z",4(t){i=t.16.12[0],e.K=t.16.12[0].K,e.14=t.16.12[0].14}),u.H("2R.Z",4(t){5 s=t.16;i=s.12[0];5 a=2a.2b(i.K-e.K),n=2a.2b(i.14-e.14);3*a>n&&t.2c()}),u.H("2V.Z",4(){5 t=i.K-e.K,s=a.1F;t>=s?(n.17(),F(p)):-s>=t&&(n.Y(),F(p))})}},2d:4(){5 e=6;e.1Q(),e.1b(),e.25(),e.U(),e.15(),e.19()}},s.2d(),b.1x=4(){v=!0,b.1k(),"q"===a.7&&n.1q("1d"),c=u.23(),"q"===a.7&&(b.1h(),b.1i()),2g(4(){v===!0&&("q"===a.7&&n.C("1d"),v=!1)},26),a.U&&b.1l(),a.B===!0&&s.J(),m&&b.1t()},n.17=4(){w(f>0)a.1f.D(6),f--,n.7(),a.B===!0&&s.J();18 w(a.1p===!0){a.1f.D(6);5 e=d;e-=1,f=1L(e/a.z,10),n.7(),a.B===!0&&s.J()}},n.Y=4(){f*a.z<d-a.z?(a.1g.D(6),f++,n.7(),a.B===!0&&s.J()):a.1p===!0&&(a.1g.D(6),f=0,n.7(),a.B===!0&&s.J())},n.7=4(){r===!1&&("q"===a.7?s.A()&&(n.C("1d"),""!==a.y&&u.9("L-2h",a.y+"2i"),""!==a.P&&u.9("L-2j-4",a.P)):s.A()&&(""!==a.y&&n.9("L-2h",a.y+"2i"),""!==a.P&&n.9("L-2j-4",a.P))),a.2e.D(6),"q"===a.7?s.q():s.N(),2g(4(){a.29.D(6)},a.y),r=!0},n.33=4(){b.1x()},n.34=4(){13 f+1},n.35=4(e){f=e,n.7()},e(36).H("38",4(e){e.2c(),b.1x()}),6}}(2l);',62,197,'||||function|var|this|mode||css||||||||||active|slideMargin||||||slide||||||if|find|speed|slideMove|doCss|gallery|addClass|call|px|clearInterval|li|on|csPager|slideThumb|pageX|transition|div|fade|thumbWidth|easing|class|width||eq|pager|thumbMargin|length|parent|goToNextSlide|lightSlider||slideWidth|targetTouches|return|pageY|controls|originalEvent|goToPrevSlide|else|keyPress|left|auto|break|csSlide|click|onBeforePrevSlide|onBeforeNextSlide|calSW|sSW|right|calL|createPager|bind|document|0px|loop|removeClass|move||calSlide|case|maxSlide|minSlide|init|currentPagerPosition|float|onBeforeStart|margin|csPrev|csNext|first|swipeThreshold|middle|height|position|relative|in|parseInt|style|href|javascript|void|initialStyle|nextHtml|transform|translate|children|prevHtml|csSlideWrapper|ul|pause|after|fadeOut|fadeIn|for|outerWidth|documentElement|enableTouch|1e3|useCSS|keyCode|onAfterSlide|Math|abs|preventDefault|build|onBefroreSlide|onSliderLoad|setTimeout|duration|ms|timing|KhtmlTransition|jQuery|3e3|img|src|fn|ontouchstart|html|keyup|use|all|40|index|cSGallery|cSpg|50|hasClass|new|Object|usingCss|extend|animate|strict|switch|270|el|setInterval|csFade|touchstart|not|display|none|max|touchmove|100|MozTransition|WebkitTransition|touchend|OTransition|msTransition|wrap|attr|data|thumb|csSlideOuter|refresh|getCurrentSlideCount|goToSlide|window||resize||csAction'.split('|'),0,{}))
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/js/prettify.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/js/prettify.js
                                                  new file mode 100644
                                                  index 00000000..eef5ad7e
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/js/prettify.js
                                                  @@ -0,0 +1,28 @@
                                                  +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
                                                  +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
                                                  +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
                                                  +f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
                                                  +(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
                                                  +{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
                                                  +t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
                                                  +"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
                                                  +l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
                                                  +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
                                                  +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
                                                  +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
                                                  +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
                                                  +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
                                                  +m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
                                                  +a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
                                                  +j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
                                                  +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
                                                  +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
                                                  +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
                                                  +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
                                                  +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
                                                  +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
                                                  +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
                                                  +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
                                                  +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
                                                  +250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
                                                  +PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/lightSlider/css/lightSlider.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/lightSlider/css/lightSlider.css
                                                  new file mode 100644
                                                  index 00000000..f8ca09d7
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/lightSlider/css/lightSlider.css
                                                  @@ -0,0 +1,166 @@
                                                  +/** /!!! core css Should not edit !!!/**/
                                                  +.csSlideOuter {
                                                  +    overflow: hidden;
                                                  +}
                                                  +.lightSlider:before,
                                                  +.lightSlider:after {
                                                  +    content: " ";
                                                  +    display: table;
                                                  +}
                                                  +.csSlideWrapper > ul:after {
                                                  +    clear: both;
                                                  +}
                                                  +.csSlideWrapper .csSlide {
                                                  +    -webkit-transform: translate(0px, 0px);
                                                  +    -ms-transform: translate(0px, 0px);
                                                  +    transform: translate(0px, 0px);
                                                  +    -webkit-transition: all 1s;
                                                  +    transition: all 1s;
                                                  +    -webkit-transition-duration: inherit;
                                                  +    transition-duration: inherit;
                                                  +    -webkit-transition-timing-function: inherit;
                                                  +    transition-timing-function: inherit;
                                                  +}
                                                  +.csSlideWrapper .csFade {
                                                  +    position: relative;
                                                  +    -webkit-transition-duration: 1s;
                                                  +    transition-duration: 1s;
                                                  +    -webkit-transition-timing-function: ease;
                                                  +    transition-timing-function: ease;
                                                  +}
                                                  +.csSlideWrapper .csFade > li {
                                                  +    position: absolute !important;
                                                  +    top: 0;
                                                  +    left: 0;
                                                  +    opacity: 0;
                                                  +    z-index: 9;
                                                  +    margin-right: 0;
                                                  +    -webkit-transition-delay: 0s;
                                                  +    transition-delay: 0s;
                                                  +    -webkit-transition-duration: inherit;
                                                  +    transition-duration: inherit;
                                                  +    -webkit-transition-property: opacity;
                                                  +    transition-property: opacity;
                                                  +    -webkit-transition-timing-function: inherit;
                                                  +    transition-timing-function: inherit;
                                                  +}
                                                  +.csSlideWrapper .csFade > li.active {
                                                  +    opacity: 1;
                                                  +    z-index: 10;
                                                  +}
                                                  +/** /!!! End of core css Should not edit !!!/**/
                                                  +
                                                  +/* Pager */
                                                  +.csSlideOuter .csPager.cSpg {
                                                  +    margin: 10px 0 0 20px;
                                                  +    padding: 0;
                                                  +    text-align: left;
                                                  +}
                                                  +.csSlideOuter .csPager.cSpg > li {
                                                  +    cursor: pointer;
                                                  +    display: inline-block;
                                                  +    padding: 0 5px;
                                                  +}
                                                  +.csSlideOuter .csPager.cSpg > li a {
                                                  +    background-color: #222222;
                                                  +    border-radius: 30px;
                                                  +    display: inline-block;
                                                  +    height: 8px;
                                                  +    overflow: hidden;
                                                  +    text-indent: -999em;
                                                  +    width: 8px;
                                                  +    -webkit-transition: all 0.5s linear 0s;
                                                  +    transition: all 0.5s linear 0s;
                                                  +}
                                                  +.csSlideOuter .csPager.cSpg > li:hover a,
                                                  +.csSlideOuter .csPager.cSpg > li.active a {
                                                  +    background-color: #428bca;
                                                  +}
                                                  +.csSlideOuter .media {
                                                  +    opacity: 0.8;
                                                  +}
                                                  +.csSlideOuter .media.active {
                                                  +    opacity: 1;
                                                  +}
                                                  +/* End of pager */
                                                  +
                                                  +/** Gallery */
                                                  +.csSlideOuter .csPager.cSGallery {
                                                  +    list-style: none outside none;
                                                  +    padding-left: 0;
                                                  +    margin: 0;
                                                  +    -webkit-touch-callout: none;
                                                  +    -webkit-user-select: none;
                                                  +    -khtml-user-select: none;
                                                  +    -moz-user-select: none;
                                                  +    -ms-user-select: none;
                                                  +    user-select: none;
                                                  +}
                                                  +.csSlideOuter .csPager.cSGallery li {
                                                  +    opacity: 0.7;
                                                  +    -webkit-transition: opacity 0.35s linear 0s;
                                                  +    transition: opacity 0.35s linear 0s;
                                                  +}
                                                  +.csSlideOuter .csPager.cSGallery li.active, .csSlideOuter .csPager.cSGallery li:hover {
                                                  +    opacity: 1;
                                                  +}
                                                  +.csSlideOuter .csPager.cSGallery img {
                                                  +    display: block;
                                                  +    height: auto;
                                                  +    max-width: 100%;
                                                  +}
                                                  +.csSlideOuter .csPager.cSGallery:before,
                                                  +.csSlideOuter .csPager.cSGallery:after {
                                                  +    content: " ";
                                                  +    display: table;
                                                  +}
                                                  +.csSlideOuter .csPager.cSGallery:after {
                                                  +    clear: both;
                                                  +}
                                                  +/* End of Gallery*/
                                                  +
                                                  +/* slider actions */
                                                  +.csAction > a {
                                                  +    width: 32px;
                                                  +    display: block;
                                                  +    top: 50%;
                                                  +    height: 32px;
                                                  +    background-image: url('../img/controls.png');
                                                  +    cursor: pointer;
                                                  +    position: absolute;
                                                  +    z-index: 99;
                                                  +    margin-top: -16px;
                                                  +    opacity: 0.5;
                                                  +    -webkit-transition: opacity 0.35s linear 0s;
                                                  +    transition: opacity 0.35s linear 0s;
                                                  +}
                                                  +.csAction > a:hover {
                                                  +    opacity: 1;
                                                  +}
                                                  +.csAction > .csPrev {
                                                  +    background-position: 0 0;
                                                  +    left: 10px;
                                                  +    margin-top: 20px;
                                                  +}
                                                  +.csAction > .csNext {
                                                  +    background-position: -32px 0;
                                                  +    right: 10px;
                                                  +    margin-top: 20px;
                                                  +}
                                                  +.cS-hidden {
                                                  +    height: 1px;
                                                  +    opacity: 0;
                                                  +    filter: alpha(opacity=0);
                                                  +    overflow: hidden;
                                                  +}
                                                  +.guide_title {
                                                  +	font-size: 15px;
                                                  +	font-family: 黑体;
                                                  +	text-align: left;
                                                  +	line-height: 40px;
                                                  +}
                                                  +.guide_info {
                                                  +	line-height: 20px;
                                                  +	color: rgb(128, 128, 128);
                                                  +	text-align: left;
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/lightSlider/img/controls.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/lightSlider/img/controls.png
                                                  new file mode 100644
                                                  index 00000000..0ca9c8c2
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/lightslider/lightSlider/img/controls.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/global.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/global.css
                                                  new file mode 100644
                                                  index 00000000..0619448e
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/global.css
                                                  @@ -0,0 +1,299 @@
                                                  +/* CSS Document */
                                                  +body,html{
                                                  +	margin:0px;
                                                  +	padding:0px;
                                                  +	background: url("../../../../../commons/js/jquery/themes/default/ui/app/appviewport2/images/noise-dark_195x195.png") repeat scroll 0 0 #F8F8F8;
                                                  +	overflow-y:hidden ;	
                                                  +	overflow-x:hidden ;
                                                  +}
                                                  +/*滚动条样式*/
                                                  +::-webkit-scrollbar
                                                  +{
                                                  +    width: 8px;
                                                  +    height: 8px;
                                                  +}
                                                  +::-webkit-scrollbar-track-piece
                                                  +{
                                                  +    width: 11px;
                                                  +	height: 11px;
                                                  +}
                                                  +::-webkit-scrollbar-thumb
                                                  +{
                                                  +    border-width: 1px;
                                                  +	border-style: solid;
                                                  +	border-color: #fff;
                                                  +	border-radius: 6px;
                                                  +	background: #c2c2c2;
                                                  +}
                                                  +::-webkit-scrollbar-thumb:hover
                                                  +{
                                                  +	background: #b5b5b5;
                                                  +}
                                                  +.page-head{
                                                  +	position: fixed;
                                                  +	right: 0;
                                                  +	left: 0;
                                                  +	z-index: 103;
                                                  +	margin-bottom: 0;
                                                  +	font-size: 14px;
                                                  +	line-height: 20px;
                                                  +	color: #383838;
                                                  +	-webkit-transition: all .25s cubic-bezier(0.7,0,0.175,1) 0;
                                                  +	-moz-transition: all .25s cubic-bezier(0.7,0,0.175,1) 0;
                                                  +	-moz-transition: all .2s ease-out;
                                                  +	-o-transition: all .25s cubic-bezier(0.7,0,0.175,1) 0;
                                                  +	transition: all .25s cubic-bezier(0.7,0,0.175,1) 0;
                                                  +}
                                                  +.page-head-inner{
                                                  +	min-height: 50px;
                                                  +	padding: 0;
                                                  +	background-color: rgba(255, 255, 255, 0.97);
                                                  +	-webkit-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.5);
                                                  +	-moz-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.5);
                                                  +	box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.5);
                                                  +	position:relative;
                                                  +}
                                                  +.page-head-inner-item{
                                                  +	position:absolute;
                                                  +	width:60px;
                                                  +	left:0px;
                                                  +	top:0px;
                                                  +	height:100%;
                                                  +	background:url(images/icons.png) no-repeat;
                                                  +	background-position:0px -3px;
                                                  +	cursor:pointer;
                                                  +}
                                                  +.page-head-inner-item:hover{
                                                  +	border-right:1px solid #f6f6f6;
                                                  +	-webkit-transition: color 218ms, background-color 218ms;
                                                  +	-moz-transition: color 218ms, background-color 218ms;
                                                  +	-moz-transition: color 218ms, background-color 218ms;
                                                  +	-o-transition: color 218ms, background-color 218ms;
                                                  +	transition: color 218ms, background-color 218ms;
                                                  +	background-position:-60px -3px;
                                                  +}
                                                  +.page-head-inner h2{
                                                  +	padding:0px;
                                                  +	margin:0px;
                                                  +	color:#222;
                                                  +	text-align:center;
                                                  +	line-height:50px;
                                                  +}
                                                  +.navigate-top{
                                                  +	background-color: #FFFFFF;
                                                  +	box-shadow: 0px 2px 9px -3px rgba(0,0,0,3);
                                                  +	z-index: 2;
                                                  +	width: 100%;
                                                  +	position: absolute;
                                                  +	border-bottom-color: #DDDDDD;
                                                  +	border-bottom-width: 1px;
                                                  +	border-bottom-style: solid;
                                                  +	color: #999999;
                                                  +	height: 60px;
                                                  +	line-height:60px;
                                                  +	font-weight: 900;
                                                  +	font-size: 18px;
                                                  +	cursor: default;
                                                  +}
                                                  +.navigate-left{
                                                  +	position: fixed;
                                                  +	top: 61px;
                                                  +	left: 0;
                                                  +	width: 60px;
                                                  +	height: 100%;
                                                  +	background-color: #fafafa;
                                                  +	border-right: 1px solid #e6e6e6;
                                                  +	-webkit-transition: all .25s cubic-bezier(0.7,0,0.175,1) 0;
                                                  +	-moz-transition: all .25s cubic-bezier(0.7,0,0.175,1) 0;
                                                  +	-moz-transition: all .2s ease-out;
                                                  +	-o-transition: all .25s cubic-bezier(0.7,0,0.175,1) 0;
                                                  +	transition: all .25s cubic-bezier(0.7,0,0.175,1) 0;
                                                  +}
                                                  +.navigate-left ul,li{
                                                  +	padding:0px;
                                                  +	margin:0px;
                                                  +}
                                                  +.navigate-left .items-icon{
                                                  +	height:45px;
                                                  +	display:inline-block;
                                                  +	width:100%;
                                                  +	background:url(images/icons.png) no-repeat;
                                                  +}
                                                  +.navigate-left .items-icon-div{
                                                  +	height:45px;
                                                  +	text-align:45px;
                                                  +}
                                                  +.navigate-left .items-icon-img{
                                                  +	height:18px;
                                                  +	width:18px;
                                                  +	position:relative;
                                                  +	top:18px;
                                                  +}
                                                  +.navigate-left-title{
                                                  +	display:inline-block;
                                                  +	height:25px;
                                                  +	width:100%;
                                                  +}
                                                  +.navigate-left .items-icon.note{
                                                  +	background-position:-1px -44px;
                                                  +}
                                                  +.navigate-left .items-icon.note:hover{
                                                  +	background-position:-60px -44px;
                                                  +}
                                                  +.navigate-left li{
                                                  +	color:#808080;
                                                  +	height:70px;
                                                  +	position:relative;
                                                  +	font-size:12px;
                                                  +	text-align:center;
                                                  +	cursor:pointer;
                                                  +	vertical-align:top;
                                                  +	border-bottom:1px solid #fafafa;
                                                  +	border-top:1px solid #fafafa;
                                                  +}
                                                  +.navigate-left li:hover{
                                                  +	background-color:#f5f5f5;
                                                  +	color:#111;
                                                  +}
                                                  +.navigate-left li.current{
                                                  +	margin-right:-1px;
                                                  +	background-color:#f5f5f5;
                                                  +	color:#111;
                                                  +	border-bottom:1px solid #d5d5d5;
                                                  +	border-top:1px solid #d5d5d5;
                                                  +}
                                                  +.navigate-right{
                                                  +	position: fixed;
                                                  +	top: 51px;
                                                  +	right: 0;
                                                  +	bottom: 0;
                                                  +	z-index: 65;
                                                  +	width: 60px;
                                                  +	margin-bottom: 0;
                                                  +	overflow-y: auto;
                                                  +	background-color: #fafafa;
                                                  +	border-left: 1px #e6e6e6 solid;
                                                  +}
                                                  +.navigate-right ul{
                                                  +	margin:0px;
                                                  +	padding:0px;
                                                  +	font-size:13px;
                                                  +}
                                                  +.navigate-right li{
                                                  +	margin:12px 10px;
                                                  +	height:40px;
                                                  +	line-height:40px;
                                                  +	text-align:center;
                                                  +	border:1px solid #ddd;
                                                  +	border-radius:50px;
                                                  +	font-size:13px;
                                                  +	cursor:pointer;
                                                  +	list-style:none;
                                                  +}
                                                  +.navigate-right li:hover{
                                                  +	border:1px solid #ccc;
                                                  +	background:#f5f5f5;
                                                  +}
                                                  +.navigate-right li.current {
                                                  +	border:1px solid #ccc;
                                                  +	background:#e6e6e6;
                                                  +}
                                                  +.navigate-right-slide{
                                                  +	position: fixed;
                                                  +	top: 50px;
                                                  +	right: -520px;
                                                  +	bottom: 0;
                                                  +	z-index: 60;
                                                  +	width: 520px;
                                                  +	padding: 35px 0 0 35px;
                                                  +	overflow: auto;
                                                  +	background-color: #f5f5f5;
                                                  +	-webkit-box-shadow: 0 0 30px rgba(0,0,0,0.25);
                                                  +	-moz-box-shadow: 0 0 30px rgba(0,0,0,0.25);
                                                  +	box-shadow: 0 0 30px rgba(0,0,0,0.25);
                                                  +}
                                                  +.page-left{
                                                  +	position: fixed;
                                                  +	top: 0;
                                                  +	bottom: 0;
                                                  +	left: 0px;
                                                  +	z-index: 104;
                                                  +	width: 0px;
                                                  +	padding-top: 5px;
                                                  +	overflow-y: auto;
                                                  +	background-color: #383838;
                                                  +	-webkit-transition: all .25s cubic-bezier(0.7,0,0.175,1) 0;
                                                  +	-moz-transition: all .25s cubic-bezier(0.7,0,0.175,1) 0;
                                                  +	-moz-transition: all .2s ease-out;
                                                  +	-o-transition: all .25s cubic-bezier(0.7,0,0.175,1) 0;
                                                  +	transition: all .25s cubic-bezier(0.7,0,0.175,1) 0;
                                                  +}
                                                  +.page-center{
                                                  +	padding-top:0px;
                                                  +	margin-left:60px;
                                                  +	-webkit-box-sizing: border-box;
                                                  +	-moz-box-sizing: border-box;
                                                  +	box-sizing: border-box;
                                                  +	float:left;
                                                  +}
                                                  +.page-center-main{
                                                  +	padding:0px;
                                                  +	margin-top: 61px;
                                                  +}
                                                  +.attention_notice {
                                                  +	width: 35px;
                                                  +	height: 35px;
                                                  +	line-height:35px;
                                                  +	color: white;
                                                  +	position: absolute;
                                                  +	background: url(images/red.png) repeat-y ;
                                                  +	background-position: center;
                                                  +	background-size: 100%;
                                                  +	margin-top: -65px;
                                                  +	margin-left: 22px;
                                                  +	vertical-align: middle;
                                                  +	text-align: center; 
                                                  +	cursor: pointer;
                                                  +}
                                                  +.navigate_notice {
                                                  +	width: 35px;
                                                  +	height: 35px;
                                                  +	line-height:35px;
                                                  +	color: white;
                                                  +	position: absolute;
                                                  +	background: url(images/red.png) repeat-y ;
                                                  +	background-position: center;
                                                  +	background-size: 100%;
                                                  +	margin-top: -75px;
                                                  +	margin-left: 30px;
                                                  +	vertical-align: middle;
                                                  +	text-align: center; 
                                                  +	cursor: pointer;
                                                  +}
                                                  +.ico {
                                                  +	background: url(images/sprite.png?7) no-repeat;
                                                  +	height: 20px;
                                                  +	width: 20px;
                                                  +	opacity: 0.7;
                                                  +	
                                                  +}
                                                  +.ico_goback {
                                                  +	background-position: -40px -420px;
                                                  +}
                                                  +.btn_back .ico, #bar_return .ico {
                                                  +	display: block;
                                                  +}
                                                  +.btn_back {
                                                  +	height: 20px;
                                                  +	width: 20px;
                                                  +	position: absolute;
                                                  +	left: 2px;
                                                  +	top: 15px;
                                                  +	padding: 5px;
                                                  +	cursor: pointer;
                                                  +	display: block;
                                                  +	background-color: #f;
                                                  +}
                                                  +.btn_back:hover{
                                                  +	background-color: #eee;
                                                  +}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/images/icons.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/images/icons.png
                                                  new file mode 100644
                                                  index 00000000..30cba0a7
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/images/icons.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/images/red.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/images/red.png
                                                  new file mode 100644
                                                  index 00000000..c3ea4ddf
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/images/red.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/images/round-red.ico b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/images/round-red.ico
                                                  new file mode 100644
                                                  index 00000000..d40c594e
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/images/round-red.ico differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/images/sprite.png b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/images/sprite.png
                                                  new file mode 100644
                                                  index 00000000..ece67def
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/css/images/sprite.png differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/js/viewport.util.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/js/viewport.util.js
                                                  new file mode 100644
                                                  index 00000000..77ae7f26
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/viewport1v3/js/viewport.util.js
                                                  @@ -0,0 +1,123 @@
                                                  +var demo = {
                                                  +	init:function(){
                                                  +		//right
                                                  +		$(".navigate-right").find("li").off("click").on("click", function(){
                                                  +				var current = $(this).attr("current");
                                                  +				if(!current) {
                                                  +					$(this).parent().find('.current').removeAttr("current").removeClass('current');
                                                  +					$(this).attr('current', true).addClass('current');
                                                  +					var right = $(".navigate-right-slide").css("right");
                                                  +					if(right == "60px"){
                                                  +						demo.hideRightSlide();
                                                  +					}else{
                                                  +						demo.showRightSlide();		
                                                  +					}
                                                  +				}
                                                  +		});	
                                                  +	    //left
                                                  +		$(".page-head-inner-item").off("click").on("click", function(){
                                                  +			if($(".page-left").width() > 0){
                                                  +				$(".page-left").animate({
                                                  +					width:"0px"				   
                                                  +				}, 100, function(){
                                                  +					demo.resize("expand");
                                                  +				});
                                                  +				$(".page-head").animate({
                                                  +					left:"0px"							  
                                                  +				}, 100);
                                                  +				$(".navigate-left").animate({
                                                  +					left:"0px"							  
                                                  +				}, 100);
                                                  +			}else{
                                                  +				$(".page-left").animate({
                                                  +					width:"210px"				   
                                                  +				}, 100, function(){
                                                  +					demo.resize("collapse");
                                                  +				});
                                                  +				$(".page-head").animate({
                                                  +					left:"210px"							  
                                                  +				}, 100);
                                                  +				$(".navigate-left").animate({
                                                  +					left:"210px"							  
                                                  +				}, 100);
                                                  +			}
                                                  +		});
                                                  +		demo.resize('init');
                                                  +		$(window).trigger("resize.main");
                                                  +		
                                                  +	},
                                                  +	hideRightSlide:function(){
                                                  +		$(".navigate-right-slide").animate({
                                                  +			right:"-520px"
                                                  +		}, 200, function(){
                                                  +			demo.showRightSlide();
                                                  +		});
                                                  +	},
                                                  +	showRightSlide:function(){
                                                  +		$(".navigate-right-slide").animate({
                                                  +			right:"60px"								   
                                                  +		}, 200, function(){
                                                  +			$(document).off("click.close").on("click.close", function(e){
                                                  +					var temp = $(".navigate-right-slide")[0],	
                                                  +						target = e.target;
                                                  +					var current = $(target).attr('current');
                                                  +					if (!current && temp !== target && !$.contains(temp, target)) {
                                                  +						$(".navigate-right-slide").animate({
                                                  +							right:"-520px"
                                                  +						}, 150, function(){
                                                  +							$(document).off("click.close");
                                                  +							$(".navigate-right").find('.current').each(function(){
                                                  +								$(this).removeAttr("current").removeClass('current');
                                                  +							});
                                                  +						});
                                                  +					}
                                                  +				});	
                                                  +		});	
                                                  +	},
                                                  +	resize:function(type){
                                                  +		var width = $(window).width();
                                                  +		var h=$(window).height();
                                                  +		if(location.href.indexOf("CONSOLE")==-1)
                                                  +		{
                                                  +			h=h-60;
                                                  +		}
                                                  +		$(".page-center-main-iframe").attr("height",h+"px");
                                                  +		if(type == "expand"){
                                                  +			var page_center_width = width  - 60;
                                                  +			$(".page-center").stop().animate({
                                                  +				width: page_center_width+"px"	  
                                                  +			},0).css('margin-left', "auto");
                                                  +		}else if(type == "collapse"){
                                                  +			var page_center_width = width  - 60 - 210;
                                                  +			var margin_left = (width - page_center_width - 350)/2 + 210 + 70;
                                                  +			$(".page-center").css('margin-left', margin_left+'px');
                                                  +			$(".page-center").stop().animate({
                                                  +				width: page_center_width + "px"					  
                                                  +			},0);
                                                  +		}else if(type == "init"){
                                                  +			var width = $(window).width();
                                                  +			var page_left  = $(".page-left").width();
                                                  +			var page_center_width = width  - page_left - 60;
                                                  +			$('.page-center').css('width', page_center_width+'px');
                                                  +			//$('.page-center').css('width', '820px');
                                                  +		} else{
                                                  +			$(window).off("resize.main").on("resize.main", function(){
                                                  +				var width = $(window).width();
                                                  +				var page_left  = $(".page-left").width();
                                                  +				var page_center_width = width  - page_left - 60;
                                                  +				if(width > 1100){
                                                  +					$(".page-center").stop().animate({
                                                  +						width: page_center_width+"px"					  
                                                  +					},100);
                                                  +				}else{
                                                  +					$(".page-center").stop().animate({
                                                  +						width: page_center_width+"px"
                                                  +					},100);
                                                  +				}
                                                  +			});	
                                                  +		}
                                                  +	}
                                                  +};
                                                  +$(window).resize(function() {
                                                  +  demo.resize('init');
                                                  +});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/yuicompressor/coe-js-compressor.cmd b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/yuicompressor/coe-js-compressor.cmd
                                                  new file mode 100644
                                                  index 00000000..18266dea
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/yuicompressor/coe-js-compressor.cmd
                                                  @@ -0,0 +1,15 @@
                                                  +rem ѹ
                                                  +set JAVA=..\..\..\..\..\..\..\jdk1.8\bin
                                                  +set target=../designer/scripts/diagraming
                                                  +set lib=.\yuicompressor-2.4.7.jar
                                                  +
                                                  +rem ѹdesigner
                                                  +%JAVA%\java -jar %lib% --type js --charset UTF-8 %target%/collaboration.debug.js -o %target%/collaboration.js
                                                  +%JAVA%\java -jar %lib% --type js --charset UTF-8 %target%/designer.chatting.collaboration.js -o %target%/designer.chatting.js
                                                  +%JAVA%\java -jar %lib% --type js --charset UTF-8 %target%/designer.core.debug.js -o %target%/designer.core.js
                                                  +%JAVA%\java -jar %lib% --type js --charset UTF-8 %target%/designer.customize.debug.js -o %target%/designer.customize.js
                                                  +%JAVA%\java -jar %lib% --type js --charset UTF-8 %target%/designer.events.debug.js -o %target%/designer.events.js
                                                  +%JAVA%\java -jar %lib% --type js --charset UTF-8 %target%/designer.methods.debug.js -o %target%/designer.methods.js
                                                  +%JAVA%\java -jar %lib% --type js --charset UTF-8 %target%/designer.ui.debug.js -o %target%/designer.ui.js
                                                  +
                                                  +timeout 30
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/yuicompressor/yuicompressor-2.4.7.jar b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/yuicompressor/yuicompressor-2.4.7.jar
                                                  new file mode 100644
                                                  index 00000000..3c9a408a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/yuicompressor/yuicompressor-2.4.7.jar differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/app.24b9fd48.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/app.24b9fd48.css
                                                  new file mode 100644
                                                  index 00000000..aef99b9f
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/app.24b9fd48.css
                                                  @@ -0,0 +1 @@
                                                  +@charset "UTF-8";.el-pagination--small .arrow.disabled,.el-table--hidden,.el-table .hidden-columns,.el-table td.is-hidden>*,.el-table th.is-hidden>*{visibility:hidden}.el-input__suffix,.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing),.el-message__closeBtn:focus,.el-message__content:focus,.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing),.el-rate:active,.el-rate:focus,.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing),.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}@font-face{font-family:element-icons;src:url(../fonts/element-icons.535877f5.535877f5.woff) format("woff"),url(../fonts/element-icons.732389de.732389de.ttf) format("truetype");font-weight:400;font-display:"auto";font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:"\e6a0"}.el-icon-ice-cream-square:before{content:"\e6a3"}.el-icon-lollipop:before{content:"\e6a4"}.el-icon-potato-strips:before{content:"\e6a5"}.el-icon-milk-tea:before{content:"\e6a6"}.el-icon-ice-drink:before{content:"\e6a7"}.el-icon-ice-tea:before{content:"\e6a9"}.el-icon-coffee:before{content:"\e6aa"}.el-icon-orange:before{content:"\e6ab"}.el-icon-pear:before{content:"\e6ac"}.el-icon-apple:before{content:"\e6ad"}.el-icon-cherry:before{content:"\e6ae"}.el-icon-watermelon:before{content:"\e6af"}.el-icon-grape:before{content:"\e6b0"}.el-icon-refrigerator:before{content:"\e6b1"}.el-icon-goblet-square-full:before{content:"\e6b2"}.el-icon-goblet-square:before{content:"\e6b3"}.el-icon-goblet-full:before{content:"\e6b4"}.el-icon-goblet:before{content:"\e6b5"}.el-icon-cold-drink:before{content:"\e6b6"}.el-icon-coffee-cup:before{content:"\e6b8"}.el-icon-water-cup:before{content:"\e6b9"}.el-icon-hot-water:before{content:"\e6ba"}.el-icon-ice-cream:before{content:"\e6bb"}.el-icon-dessert:before{content:"\e6bc"}.el-icon-sugar:before{content:"\e6bd"}.el-icon-tableware:before{content:"\e6be"}.el-icon-burger:before{content:"\e6bf"}.el-icon-knife-fork:before{content:"\e6c1"}.el-icon-fork-spoon:before{content:"\e6c2"}.el-icon-chicken:before{content:"\e6c3"}.el-icon-food:before{content:"\e6c4"}.el-icon-dish-1:before{content:"\e6c5"}.el-icon-dish:before{content:"\e6c6"}.el-icon-moon-night:before{content:"\e6ee"}.el-icon-moon:before{content:"\e6f0"}.el-icon-cloudy-and-sunny:before{content:"\e6f1"}.el-icon-partly-cloudy:before{content:"\e6f2"}.el-icon-cloudy:before{content:"\e6f3"}.el-icon-sunny:before{content:"\e6f6"}.el-icon-sunset:before{content:"\e6f7"}.el-icon-sunrise-1:before{content:"\e6f8"}.el-icon-sunrise:before{content:"\e6f9"}.el-icon-heavy-rain:before{content:"\e6fa"}.el-icon-lightning:before{content:"\e6fb"}.el-icon-light-rain:before{content:"\e6fc"}.el-icon-wind-power:before{content:"\e6fd"}.el-icon-baseball:before{content:"\e712"}.el-icon-soccer:before{content:"\e713"}.el-icon-football:before{content:"\e715"}.el-icon-basketball:before{content:"\e716"}.el-icon-ship:before{content:"\e73f"}.el-icon-truck:before{content:"\e740"}.el-icon-bicycle:before{content:"\e741"}.el-icon-mobile-phone:before{content:"\e6d3"}.el-icon-service:before{content:"\e6d4"}.el-icon-key:before{content:"\e6e2"}.el-icon-unlock:before{content:"\e6e4"}.el-icon-lock:before{content:"\e6e5"}.el-icon-watch:before{content:"\e6fe"}.el-icon-watch-1:before{content:"\e6ff"}.el-icon-timer:before{content:"\e702"}.el-icon-alarm-clock:before{content:"\e703"}.el-icon-map-location:before{content:"\e704"}.el-icon-delete-location:before{content:"\e705"}.el-icon-add-location:before{content:"\e706"}.el-icon-location-information:before{content:"\e707"}.el-icon-location-outline:before{content:"\e708"}.el-icon-location:before{content:"\e79e"}.el-icon-place:before{content:"\e709"}.el-icon-discover:before{content:"\e70a"}.el-icon-first-aid-kit:before{content:"\e70b"}.el-icon-trophy-1:before{content:"\e70c"}.el-icon-trophy:before{content:"\e70d"}.el-icon-medal:before{content:"\e70e"}.el-icon-medal-1:before{content:"\e70f"}.el-icon-stopwatch:before{content:"\e710"}.el-icon-mic:before{content:"\e711"}.el-icon-copy-document:before{content:"\e718"}.el-icon-full-screen:before{content:"\e719"}.el-icon-switch-button:before{content:"\e71b"}.el-icon-aim:before{content:"\e71c"}.el-icon-crop:before{content:"\e71d"}.el-icon-odometer:before{content:"\e71e"}.el-icon-time:before{content:"\e71f"}.el-icon-bangzhu:before{content:"\e724"}.el-icon-close-notification:before{content:"\e726"}.el-icon-microphone:before{content:"\e727"}.el-icon-turn-off-microphone:before{content:"\e728"}.el-icon-position:before{content:"\e729"}.el-icon-postcard:before{content:"\e72a"}.el-icon-message:before{content:"\e72b"}.el-icon-chat-line-square:before{content:"\e72d"}.el-icon-chat-dot-square:before{content:"\e72e"}.el-icon-chat-dot-round:before{content:"\e72f"}.el-icon-chat-square:before{content:"\e730"}.el-icon-chat-line-round:before{content:"\e731"}.el-icon-chat-round:before{content:"\e732"}.el-icon-set-up:before{content:"\e733"}.el-icon-turn-off:before{content:"\e734"}.el-icon-open:before{content:"\e735"}.el-icon-connection:before{content:"\e736"}.el-icon-link:before{content:"\e737"}.el-icon-cpu:before{content:"\e738"}.el-icon-thumb:before{content:"\e739"}.el-icon-female:before{content:"\e73a"}.el-icon-male:before{content:"\e73b"}.el-icon-guide:before{content:"\e73c"}.el-icon-news:before{content:"\e73e"}.el-icon-price-tag:before{content:"\e744"}.el-icon-discount:before{content:"\e745"}.el-icon-wallet:before{content:"\e747"}.el-icon-coin:before{content:"\e748"}.el-icon-money:before{content:"\e749"}.el-icon-bank-card:before{content:"\e74a"}.el-icon-box:before{content:"\e74b"}.el-icon-present:before{content:"\e74c"}.el-icon-sell:before{content:"\e6d5"}.el-icon-sold-out:before{content:"\e6d6"}.el-icon-shopping-bag-2:before{content:"\e74d"}.el-icon-shopping-bag-1:before{content:"\e74e"}.el-icon-shopping-cart-2:before{content:"\e74f"}.el-icon-shopping-cart-1:before{content:"\e750"}.el-icon-shopping-cart-full:before{content:"\e751"}.el-icon-smoking:before{content:"\e752"}.el-icon-no-smoking:before{content:"\e753"}.el-icon-house:before{content:"\e754"}.el-icon-table-lamp:before{content:"\e755"}.el-icon-school:before{content:"\e756"}.el-icon-office-building:before{content:"\e757"}.el-icon-toilet-paper:before{content:"\e758"}.el-icon-notebook-2:before{content:"\e759"}.el-icon-notebook-1:before{content:"\e75a"}.el-icon-files:before{content:"\e75b"}.el-icon-collection:before{content:"\e75c"}.el-icon-receiving:before{content:"\e75d"}.el-icon-suitcase-1:before{content:"\e760"}.el-icon-suitcase:before{content:"\e761"}.el-icon-film:before{content:"\e763"}.el-icon-collection-tag:before{content:"\e765"}.el-icon-data-analysis:before{content:"\e766"}.el-icon-pie-chart:before{content:"\e767"}.el-icon-data-board:before{content:"\e768"}.el-icon-data-line:before{content:"\e76d"}.el-icon-reading:before{content:"\e769"}.el-icon-magic-stick:before{content:"\e76a"}.el-icon-coordinate:before{content:"\e76b"}.el-icon-mouse:before{content:"\e76c"}.el-icon-brush:before{content:"\e76e"}.el-icon-headset:before{content:"\e76f"}.el-icon-umbrella:before{content:"\e770"}.el-icon-scissors:before{content:"\e771"}.el-icon-mobile:before{content:"\e773"}.el-icon-attract:before{content:"\e774"}.el-icon-monitor:before{content:"\e775"}.el-icon-search:before{content:"\e778"}.el-icon-takeaway-box:before{content:"\e77a"}.el-icon-paperclip:before{content:"\e77d"}.el-icon-printer:before{content:"\e77e"}.el-icon-document-add:before{content:"\e782"}.el-icon-document:before{content:"\e785"}.el-icon-document-checked:before{content:"\e786"}.el-icon-document-copy:before{content:"\e787"}.el-icon-document-delete:before{content:"\e788"}.el-icon-document-remove:before{content:"\e789"}.el-icon-tickets:before{content:"\e78b"}.el-icon-folder-checked:before{content:"\e77f"}.el-icon-folder-delete:before{content:"\e780"}.el-icon-folder-remove:before{content:"\e781"}.el-icon-folder-add:before{content:"\e783"}.el-icon-folder-opened:before{content:"\e784"}.el-icon-folder:before{content:"\e78a"}.el-icon-edit-outline:before{content:"\e764"}.el-icon-edit:before{content:"\e78c"}.el-icon-date:before{content:"\e78e"}.el-icon-c-scale-to-original:before{content:"\e7c6"}.el-icon-view:before{content:"\e6ce"}.el-icon-loading:before{content:"\e6cf"}.el-icon-rank:before{content:"\e6d1"}.el-icon-sort-down:before{content:"\e7c4"}.el-icon-sort-up:before{content:"\e7c5"}.el-icon-sort:before{content:"\e6d2"}.el-icon-finished:before{content:"\e6cd"}.el-icon-refresh-left:before{content:"\e6c7"}.el-icon-refresh-right:before{content:"\e6c8"}.el-icon-refresh:before{content:"\e6d0"}.el-icon-video-play:before{content:"\e7c0"}.el-icon-video-pause:before{content:"\e7c1"}.el-icon-d-arrow-right:before{content:"\e6dc"}.el-icon-d-arrow-left:before{content:"\e6dd"}.el-icon-arrow-up:before{content:"\e6e1"}.el-icon-arrow-down:before{content:"\e6df"}.el-icon-arrow-right:before{content:"\e6e0"}.el-icon-arrow-left:before{content:"\e6de"}.el-icon-top-right:before{content:"\e6e7"}.el-icon-top-left:before{content:"\e6e8"}.el-icon-top:before{content:"\e6e6"}.el-icon-bottom:before{content:"\e6eb"}.el-icon-right:before{content:"\e6e9"}.el-icon-back:before{content:"\e6ea"}.el-icon-bottom-right:before{content:"\e6ec"}.el-icon-bottom-left:before{content:"\e6ed"}.el-icon-caret-top:before{content:"\e78f"}.el-icon-caret-bottom:before{content:"\e790"}.el-icon-caret-right:before{content:"\e791"}.el-icon-caret-left:before{content:"\e792"}.el-icon-d-caret:before{content:"\e79a"}.el-icon-share:before{content:"\e793"}.el-icon-menu:before{content:"\e798"}.el-icon-s-grid:before{content:"\e7a6"}.el-icon-s-check:before{content:"\e7a7"}.el-icon-s-data:before{content:"\e7a8"}.el-icon-s-opportunity:before{content:"\e7aa"}.el-icon-s-custom:before{content:"\e7ab"}.el-icon-s-claim:before{content:"\e7ad"}.el-icon-s-finance:before{content:"\e7ae"}.el-icon-s-comment:before{content:"\e7af"}.el-icon-s-flag:before{content:"\e7b0"}.el-icon-s-marketing:before{content:"\e7b1"}.el-icon-s-shop:before{content:"\e7b4"}.el-icon-s-open:before{content:"\e7b5"}.el-icon-s-management:before{content:"\e7b6"}.el-icon-s-ticket:before{content:"\e7b7"}.el-icon-s-release:before{content:"\e7b8"}.el-icon-s-home:before{content:"\e7b9"}.el-icon-s-promotion:before{content:"\e7ba"}.el-icon-s-operation:before{content:"\e7bb"}.el-icon-s-unfold:before{content:"\e7bc"}.el-icon-s-fold:before{content:"\e7a9"}.el-icon-s-platform:before{content:"\e7bd"}.el-icon-s-order:before{content:"\e7be"}.el-icon-s-cooperation:before{content:"\e7bf"}.el-icon-bell:before{content:"\e725"}.el-icon-message-solid:before{content:"\e799"}.el-icon-video-camera:before{content:"\e772"}.el-icon-video-camera-solid:before{content:"\e796"}.el-icon-camera:before{content:"\e779"}.el-icon-camera-solid:before{content:"\e79b"}.el-icon-download:before{content:"\e77c"}.el-icon-upload2:before{content:"\e77b"}.el-icon-upload:before{content:"\e7c3"}.el-icon-picture-outline-round:before{content:"\e75f"}.el-icon-picture-outline:before{content:"\e75e"}.el-icon-picture:before{content:"\e79f"}.el-icon-close:before{content:"\e6db"}.el-icon-check:before{content:"\e6da"}.el-icon-plus:before{content:"\e6d9"}.el-icon-minus:before{content:"\e6d8"}.el-icon-help:before{content:"\e73d"}.el-icon-s-help:before{content:"\e7b3"}.el-icon-circle-close:before{content:"\e78d"}.el-icon-circle-check:before{content:"\e720"}.el-icon-circle-plus-outline:before{content:"\e723"}.el-icon-remove-outline:before{content:"\e722"}.el-icon-zoom-out:before{content:"\e776"}.el-icon-zoom-in:before{content:"\e777"}.el-icon-error:before{content:"\e79d"}.el-icon-success:before{content:"\e79c"}.el-icon-circle-plus:before{content:"\e7a0"}.el-icon-remove:before{content:"\e7a2"}.el-icon-info:before{content:"\e7a1"}.el-icon-question:before{content:"\e7a4"}.el-icon-warning-outline:before{content:"\e6c9"}.el-icon-warning:before{content:"\e7a3"}.el-icon-goods:before{content:"\e7c2"}.el-icon-s-goods:before{content:"\e7b2"}.el-icon-star-off:before{content:"\e717"}.el-icon-star-on:before{content:"\e797"}.el-icon-more-outline:before{content:"\e6cc"}.el-icon-more:before{content:"\e794"}.el-icon-phone-outline:before{content:"\e6cb"}.el-icon-phone:before{content:"\e795"}.el-icon-user:before{content:"\e6e3"}.el-icon-user-solid:before{content:"\e7a5"}.el-icon-setting:before{content:"\e6ca"}.el-icon-s-tools:before{content:"\e7ac"}.el-icon-delete:before{content:"\e6d7"}.el-icon-delete-solid:before{content:"\e7c9"}.el-icon-eleme:before{content:"\e7c7"}.el-icon-platform-eleme:before{content:"\e7ca"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination:after,.el-pagination:before{display:table;content:""}.el-pagination:after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#409eff}.el-pagination button:disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:50% no-repeat #fff;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#c0c4cc;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .more:before,.el-pagination--small li.more:before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409eff}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#c0c4cc}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#409eff}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409eff;color:#fff}.el-dialog,.el-pager li{background:#fff;-webkit-box-sizing:border-box}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-ms-user-select:none;user-select:none;list-style:none;font-size:0}.el-date-table,.el-pager,.el-table th{-webkit-user-select:none;-moz-user-select:none}.el-pager .more:before{line-height:30px}.el-pager li{padding:0 4px;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box;text-align:center}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#c0c4cc}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#409eff}.el-pager li.active{color:#409eff;cursor:default}.el-dialog{position:relative;margin:0 auto 50px;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409eff}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:10px 20px 20px;text-align:right;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #e4e7ed;box-sizing:border-box;background-color:#fff}.el-dropdown-menu,.el-menu--collapse .el-submenu .el-menu{z-index:10;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#f5f7fa}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#fff}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button:before{content:"";position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:hsla(0,0%,100%,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default:before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover:before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown-menu{position:absolute;top:0;left:0;padding:10px 0;margin:5px 0;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#ecf5ff;color:#66b1ff}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #ebeef5}.el-dropdown-menu__item--divided:before{content:"";height:6px;display:block;margin:0 -20px;background-color:#fff}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:1px solid #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0}.el-menu,.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu:after,.el-menu:before{display:table;content:""}.el-menu:after{clear:both}.el-menu.el-menu--horizontal{border-bottom:1px solid #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409eff;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409eff;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;border:1px solid #e4e7ed;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;position:relative;-webkit-box-sizing:border-box;white-space:nowrap;list-style:none}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{transform:none}.el-menu--popup{z-index:100;border:none;padding:5px 0;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#ecf5ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#409eff}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#ecf5ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#ecf5ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;transition:transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#409eff}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{transform:rotate(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409eff}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#409eff;border-color:#409eff;box-shadow:-1px 0 0 0 #409eff}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-popover,.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){box-shadow:0 0 2px 2px #409eff}.el-switch{display:inline-flex;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#409eff}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;box-sizing:border-box;background:#dcdfe6;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#409eff;background-color:#409eff}.el-switch.is-checked .el-switch__core:after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409eff;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected:after{position:absolute;right:20px;font-family:element-icons;content:"\e6da";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#409eff;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type):after{content:"";position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#c0c4cc}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#409eff}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;transition:transform .3s;transform:rotate(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{transform:rotate(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;transform:rotate(180deg);border-radius:100%;color:#c0c4cc;transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#e4e7ed}.el-select .el-input.is-focus .el-input__inner{border-color:#409eff}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;transform:translateY(-50%);display:flex;align-items:center;flex-wrap:wrap}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;right:-7px;top:0;color:#fff}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#fff}.el-select .el-tag__close.el-icon-close:before{display:block;transform:translateY(.5px)}.el-table{position:relative;overflow:hidden;box-sizing:border-box;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table--mini,.el-table--small,.el-table__expand-icon{font-size:12px}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:flex;justify-content:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;transition:transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th{background:#f5f7fa}.el-table th,.el-table tr{background-color:#fff}.el-table td,.el-table th{padding:12px 0;min-width:0;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table--medium td,.el-table--medium th{padding:10px 0}.el-table--small td,.el-table--small th{padding:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table--border td:first-child .cell,.el-table--border th:first-child .cell,.el-table .cell{padding-left:10px}.el-table tr input[type=checkbox]{margin:0}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #ebeef5}.el-table th.is-sortable{cursor:pointer}.el-table th{overflow:hidden;-ms-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-table th>.cell{display:inline-block;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th>.cell.highlight{color:#409eff}.el-table th.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td div{box-sizing:border-box}.el-table td.gutter{width:0}.el-table .cell{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #ebeef5}.el-table--border:after,.el-table--group:after,.el-table:before{content:"";position:absolute;background-color:#ebeef5;z-index:1}.el-table--border:after,.el-table--group:after{top:0;right:0;width:1px;height:100%}.el-table:before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border td,.el-table--border th,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #ebeef5}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #ebeef5;border-bottom-width:1px}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #ebeef5}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right:before,.el-table__fixed:before{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#ebeef5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #ebeef5;background-color:#f5f7fa;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #ebeef5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#f5f7fa;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{box-shadow:none}.el-picker-panel,.el-table-filter{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #ebeef5}.el-table .caret-wrapper{display:inline-flex;flex-direction:column;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#c0c4cc;top:5px}.el-table .sort-caret.descending{border-top-color:#c0c4cc;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#409eff}.el-table .descending .sort-caret.descending{border-top-color:#409eff}.el-table .hidden-columns{position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#fafafa}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#ecf5ff}.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#f5f7fa}.el-table__body tr.current-row>td{background-color:#ecf5ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #ebeef5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;transform:scale(.75)}.el-table--enable-row-transition .el-table__body td{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#f5f7fa}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #ebeef5;border-radius:2px;background-color:#fff;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-sizing:border-box;margin:2px 0}.el-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff}.el-table-filter__list-item.is-active{background-color:#409eff;color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #ebeef5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div,.el-date-table td.in-range div,.el-date-table td.in-range div:hover{background-color:#f2f6fc}.el-table-filter__bottom button:hover{color:#409eff}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-ms-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;padding:4px 0;text-align:center;cursor:pointer;position:relative}.el-date-table td,.el-date-table td div{box-sizing:border-box}.el-date-table td div{padding:3px 0}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#c0c4cc}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#409eff;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#fff}.el-date-table td.available:hover{color:#409eff}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#409eff}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#fff}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#409eff}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#c0c4cc}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#f2f6fc;border-radius:15px}.el-date-table td.selected div:hover{background-color:#f2f6fc}.el-date-table td.selected span{background-color:#409eff;color:#fff;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:1px solid #ebeef5}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;box-sizing:border-box}.el-month-table td.today .cell{color:#409eff;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#fff}.el-month-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-month-table td.disabled .cell:hover{color:#c0c4cc}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#409eff}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#f2f6fc}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#fff}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#fff;background-color:#409eff}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#409eff}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#409eff;font-weight:700}.el-year-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#409eff}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:1px solid #ebeef5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#409eff}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#409eff;font-weight:700}.time-select-item.disabled{color:#e4e7ed;cursor:not-allowed}.time-select-item:hover{background-color:#f5f7fa;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.el-date-editor .el-range-input,.el-date-editor .el-range-separator{height:100%;margin:0;text-align:center;display:inline-block;font-size:14px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;padding:0;width:39%;color:#606266}.el-date-editor .el-range-input:-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-moz-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.el-date-editor .el-range-separator{padding:0 5px;line-height:32px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:inline-flex;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#409eff}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#e4e7ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input:-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-moz-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #e4e7ed;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel,.el-popover,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#409eff}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#409eff}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#409eff}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#409eff}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #e4e7ed;background-color:#fff;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;user-select:none;box-sizing:content-box}.el-slider__button,.el-slider__button-wrapper,.el-time-panel{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #e4e7ed;border-bottom:1px solid #e4e7ed}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds:after{left:66.66667%}.el-time-panel__content.has-seconds:before{padding-left:33.33333%}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#409eff}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #e4e7ed}.el-popover{position:absolute;background:#fff;min-width:150px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.v-modal{opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #ebeef5;font-size:18px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#f56c6c}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409eff}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;transform:translateY(-50%);font-size:24px!important}.el-message-box__status:before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67c23a}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#e6a23c}.el-message-box__status.el-icon-error{color:#f56c6c}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#f56c6c;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:flex;align-items:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner.is-link,.el-breadcrumb__inner a{font-weight:700;text-decoration:none;transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner.is-link:hover,.el-breadcrumb__inner a:hover{color:#409eff;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item:after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__content:after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:"*";color:#f56c6c;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#409eff;z-index:1;transition:transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;transition:all .15s}.el-collapse-item__arrow,.el-tabs__nav{-webkit-transition:-webkit-transform .3s}.el-tabs__new-tab .el-icon-plus{transform:scale(.8)}.el-tabs__new-tab:hover{color:#409eff}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#e4e7ed;z-index:1}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after,.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:flex}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){box-shadow:inset 0 0 2px 2px #409eff;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#c0c4cc;color:#fff}.el-tabs__item.is-active{color:#409eff}.el-tabs__item:hover{color:#409eff;cursor:pointer}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #e4e7ed}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #e4e7ed;border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e4e7ed;transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #e4e7ed;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item{transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409eff;background-color:#fff;border-right-color:#dcdfe6;border-left-color:#dcdfe6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#409eff}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdfe6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #e4e7ed;border-bottom:none;border-top:1px solid #e4e7ed;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #e4e7ed;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #e4e7ed;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e4e7ed;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #e4e7ed}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #e4e7ed;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #e4e7ed;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e4e7ed;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(-100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(-100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#fff;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#409eff}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409eff;color:#fff}.el-tree-node__content{display:flex;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;transform:rotate(0);transition:transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:flex;align-items:center;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#c0c4cc}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#fff}.el-alert.is-center{justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67c23a}.el-alert--success.is-light .el-alert__description{color:#67c23a}.el-alert--success.is-dark{background-color:#67c23a;color:#fff}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#fff}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning.is-light .el-alert__description{color:#e6a23c}.el-alert--warning.is-dark{background-color:#e6a23c;color:#fff}.el-alert--error.is-light{background-color:#fef0f0;color:#f56c6c}.el-alert--error.is-light .el-alert__description{color:#f56c6c}.el-alert--error.is-dark{background-color:#f56c6c;color:#fff}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active{opacity:0}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;background-color:#fff;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67c23a}.el-notification .el-icon-error{color:#f56c6c}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#e6a23c}.el-notification-fade-enter.right{right:0;transform:translateX(100%)}.el-notification-fade-enter.left{left:0;transform:translateX(-100%)}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409eff}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#409eff}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#e4e7ed;color:#e4e7ed}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#e4e7ed;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #dcdfe6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow:after{content:" ";border-width:5px}.el-progress-bar__inner:after,.el-row:after,.el-row:before,.el-slider:after,.el-slider:before,.el-slider__button-wrapper:after,.el-upload-cover:after{content:""}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow:after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow:after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow:after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow:after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow:after{border-right-color:#fff}.el-slider:after,.el-slider:before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper:after{vertical-align:middle;display:inline-block}.el-slider:after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#e4e7ed;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button{border-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#409eff;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;transform:translateX(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal}.el-slider__button-wrapper:after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #409eff;background-color:#fff;border-radius:50%;transition:.2s;user-select:none}.el-image-viewer__btn,.el-slider__button,.el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#fff;transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px}.el-slider.is-vertical .el-slider__button-wrapper,.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #dcdfe6;line-height:20px;box-sizing:border-box;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#c0c4cc}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#409eff}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:hsla(0,0%,100%,.9);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-col-pull-0,.el-col-pull-1,.el-col-pull-2,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-pull-10,.el-col-pull-11,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-push-0,.el-col-push-1,.el-col-push-2,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-row{position:relative}.el-loading-spinner .el-loading-text{color:#409eff;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409eff;stroke-linecap:round}.el-loading-spinner i{color:#409eff}@-webkit-keyframes loading-rotate{to{transform:rotate(1turn)}}@keyframes loading-rotate{to{transform:rotate(1turn)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{box-sizing:border-box}.el-row:after,.el-row:before{display:table}.el-row:after{clear:both}.el-row--flex{display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{justify-content:center}.el-row--flex.is-justify-end{justify-content:flex-end}.el-row--flex.is-justify-space-between{justify-content:space-between}.el-row--flex.is-justify-space-around{justify-content:space-around}.el-row--flex.is-align-middle{align-items:center}.el-row--flex.is-align-bottom{align-items:flex-end}[class*=el-col-]{float:left;box-sizing:border-box}.el-upload--picture-card,.el-upload-dragger{-webkit-box-sizing:border-box;cursor:pointer}.el-col-0{width:0}.el-col-offset-0{margin-left:0}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#409eff;color:#409eff}.el-upload:focus .el-upload-dragger{border-color:#409eff}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;text-align:center;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#c0c4cc;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #dcdfe6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#409eff;font-style:normal}.el-upload-dragger:hover{border-color:#409eff}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #409eff}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67c23a}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#409eff}.el-upload-list__item:hover{background-color:#f5f7fa}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409eff;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#409eff}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;transform:rotate(45deg);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#fff}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;transform:rotate(45deg);box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover:after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;transform:rotate(45deg);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;transform:translateY(-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner:after,.el-progress-bar__innerText,.el-spinner{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.el-progress.is-success .el-progress__text{color:#67c23a}.el-progress.is-warning .el-progress-bar__inner{background-color:#e6a23c}.el-progress.is-warning .el-progress__text{color:#e6a23c}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409eff;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;transition:width .6s ease}.el-card,.el-message{border-radius:4px;overflow:hidden}.el-progress-bar__inner:after{height:100%}.el-progress-bar__innerText{color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{to{transform:rotate(1turn)}}@keyframes rotate{to{transform:rotate(1turn)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;box-sizing:border-box;border-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;transform:translateX(-50%);background-color:#edf2fc;transition:opacity .3s,transform .4s,top .4s;padding:15px 15px 15px 20px;display:flex;align-items:center}.el-message.is-center{justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#f56c6c;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#409eff}.el-badge__content--success{background-color:#67c23a}.el-badge__content--warning{background-color:#e6a23c}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#f56c6c}.el-card{border:1px solid #ebeef5;background-color:#fff;color:#303133;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;flex-flow:column}.el-step{position:relative;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{flex-basis:auto!important;flex-shrink:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.el-step__head.is-success{color:#67c23a;border-color:#67c23a}.el-step__head.is-error{color:#f56c6c;border-color:#f56c6c}.el-step__head.is-finish{color:#409eff;border-color:#409eff}.el-step__icon{position:relative;z-index:1;display:inline-flex;justify-content:center;align-items:center;width:24px;height:24px;font-size:14px;box-sizing:border-box;background:#fff;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;transition:.15s ease-out;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#c0c4cc}.el-step__title.is-success{color:#67c23a}.el-step__title.is-error{color:#f56c6c}.el-step__title.is-finish{color:#409eff}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#c0c4cc}.el-step__description.is-success{color:#67c23a}.el-step__description.is-error{color:#f56c6c}.el-step__description.is-finish{color:#409eff}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:flex;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:flex;align-items:stretch;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{flex-grow:1;display:flex;align-items:center;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{content:"";display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.el-step.is-simple .el-step__arrow:before{transform:rotate(-45deg) translateY(-4px);transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{transform:rotate(45deg) translateY(4px);transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;outline:0;padding:0;margin:0;cursor:pointer;transition:.3s}.el-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--card,.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#fff;opacity:.24;transition:.2s}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active,.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:opacity .2s linear}.el-fade-in-enter-active,.el-fade-in-leave-active,.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out}.horizontal-collapse-transition{transition:width .3s ease-in-out,padding-left .3s ease-in-out,padding-right .3s ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;transform:translateY(-30px)}.el-opacity-transition{transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:flex;align-items:center;height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #ebeef5;font-size:13px;font-weight:500;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#409eff}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#fff;overflow:hidden;box-sizing:border-box;border-bottom:1px solid #ebeef5}.el-cascader__tags,.el-collapse-item__wrap,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;filter:drop-shadow(0 2px 12px rgba(0,0,0,.03))}.el-popper .popper__arrow:after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow:after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-tag{background-color:#ecf5ff;border-color:#d9ecff;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#409eff;border-width:1px;border-style:solid;border-radius:4px;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#409eff}.el-tag .el-tag__close{color:#409eff}.el-tag .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag.el-tag--info{background-color:#f4f4f5;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67c23a}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close:before{display:block}.el-tag--dark{background-color:#409eff;color:#fff}.el-tag--dark,.el-tag--dark.is-hit{border-color:#409eff}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#66b1ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d8ff;color:#409eff}.el-tag--plain.is-hit{border-color:#409eff}.el-tag--plain .el-tag__close{color:#409eff}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;transform:scale(.7)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#c0c4cc}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#409eff}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{transition:transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{transform:rotate(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#c0c4cc}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#fff;border:1px solid #e4e7ed;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;transform:translateY(-50%);display:flex;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:inline-flex;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{flex:none;background-color:#c0c4cc;color:#fff}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:flex;justify-content:space-between;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#f5f7fa}.el-cascader__suggestion-item.is-checked{color:#409eff;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#c0c4cc}.el-cascader__search-input{flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;box-sizing:border-box}.el-cascader__search-input:-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-moz-placeholder{color:#c0c4cc}.el-cascader__search-input::placeholder{color:#c0c4cc}.el-color-predefine{font-size:12px;margin-top:8px;width:280px}.el-color-predefine,.el-color-predefine__colors{display:flex}.el-color-predefine__colors{flex:1;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px #409eff}.el-color-predefine__color-selector>div{display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:linear-gradient(90deg,red,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(180deg,red,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.el-color-svpanel__black{background:linear-gradient(0deg,#000,transparent)}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:linear-gradient(90deg,hsla(0,0%,100%,0),#fff);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(180deg,hsla(0,0%,100%,0),#fff)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper:after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#409eff;border-color:#409eff}.el-color-dropdown__link-btn{cursor:pointer;color:#409eff;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#409eff,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:hsla(0,0%,100%,.7)}.el-color-picker__trigger{display:inline-block;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;cursor:pointer}.el-color-picker__color,.el-color-picker__trigger{box-sizing:border-box;position:relative}.el-color-picker__color{display:block;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty,.el-color-picker__icon{top:50%;left:50%;font-size:12px;position:absolute}.el-color-picker__empty{color:#999}.el-color-picker__empty,.el-color-picker__icon{transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;width:100%;color:#fff;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;box-sizing:content-box;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#409eff}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner,.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:inline-flex;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:normal;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#c0c4cc;text-align:center}.el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409eff;outline:0}.el-input__suffix{right:5px;transition:all .3s}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px}.el-input__icon,.el-input__prefix{transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;line-height:40px}.el-input__icon:after{content:"";height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#fff;background-color:#409eff;font-size:0}.el-transfer-panel__item+.el-transfer-panel__item,.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer-panel{border:1px solid #ebeef5;border-radius:4px;overflow:hidden;background:#fff;display:inline-block;vertical-align:middle;width:200px;max-height:100%;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#409eff}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #ebeef5;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-divider__text,.el-link{font-weight:500;font-size:14px}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#fff;margin:0;padding:0;border-top:1px solid #ebeef5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner:after{height:6px;width:3px;left:4px}.el-container{display:flex;flex-direction:row;flex:1;flex-basis:auto;box-sizing:border-box;min-width:0}.el-container.is-vertical,.el-drawer{-webkit-box-orient:vertical}.el-aside,.el-header{-webkit-box-sizing:border-box}.el-container.is-vertical{flex-direction:column}.el-header{padding:0 20px}.el-aside,.el-header{box-sizing:border-box;flex-shrink:0}.el-aside{overflow:auto}.el-footer,.el-main{-webkit-box-sizing:border-box}.el-main{display:block;flex:1;flex-basis:auto;overflow:auto;padding:20px}.el-footer,.el-main{box-sizing:border-box}.el-footer{padding:0 20px;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #e4e7ed}.el-timeline-item__icon{color:#fff;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#e4e7ed;border-radius:50%;display:flex;justify-content:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#409eff}.el-timeline-item__node--success{background-color:#67c23a}.el-timeline-item__node--warning{background-color:#e6a23c}.el-timeline-item__node--danger{background-color:#f56c6c}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:flex;justify-content:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #409eff}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#409eff}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#409eff}.el-link.el-link--default.is-disabled{color:#c0c4cc}.el-link.el-link--primary{color:#409eff}.el-link.el-link--primary:hover{color:#66b1ff}.el-link.el-link--primary.is-disabled{color:#a0cfff}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#f56c6c}.el-link.el-link--danger{color:#f56c6c}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67c23a}.el-link.el-link--success{color:#67c23a}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#e6a23c}.el-link.el-link--warning{color:#e6a23c}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#dcdfe6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#fff;padding:0 20px;color:#303133}.el-image__error,.el-image__placeholder{background:#f5f7fa}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;transform:translate(-50%,-50%);display:block}.el-image__error{display:flex;justify-content:center;align-items:center;font-size:14px;color:#c0c4cc;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:flex;align-items:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;box-sizing:border-box;user-select:none}.el-button,.el-checkbox,.el-image-viewer__btn{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.el-image-viewer__canvas{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:flex;align-items:center;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{top:50%;width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{transform:translateY(-50%)}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes viewer-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#409eff;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#409eff;color:#409eff}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#fff;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:hsla(0,0%,100%,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#409eff;border-color:#409eff}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409eff;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409eff;border-color:#409eff;color:#fff}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--text,.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{color:#409eff;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-calendar{background-color:#fff}.el-calendar__header{display:flex;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #ebeef5}.el-backtop,.el-page-header{display:-ms-flexbox}.el-calendar__title{color:#000;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#c0c4cc}.el-backtop,.el-calendar-table td.is-today{color:#409eff}.el-calendar-table td{border-bottom:1px solid #ebeef5;border-right:1px solid #ebeef5;vertical-align:top;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#f2f8fe}.el-calendar-table tr:first-child td{border-top:1px solid #ebeef5}.el-calendar-table tr td:first-child{border-left:1px solid #ebeef5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#f2f8fe}.el-backtop{position:fixed;background-color:#fff;width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:20px;box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#f2f6fc}.el-page-header{line-height:24px}.el-page-header,.el-page-header__left{display:flex}.el-page-header__left{cursor:pointer;margin-right:40px;position:relative}.el-page-header__left:after{content:"";position:absolute;width:1px;height:16px;right:-20px;top:50%;transform:translateY(-50%);background-color:#dcdfe6}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox,.el-checkbox-button__inner,.el-radio{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-checkbox,.el-checkbox-button__inner,.el-radio{font-weight:500}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409eff}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409eff;border-color:#409eff}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner:after{transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409eff}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409eff}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";position:absolute;display:block;background-color:#fff;height:2px;transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#409eff}.el-checkbox__inner:after{box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);width:3px;transition:transform .15s ease-in .05s;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409eff}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-radio,.el-radio__input{line-height:1;outline:0;white-space:nowrap}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#409eff;border-color:#409eff;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409eff}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409eff}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio{color:#606266;cursor:pointer;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#409eff}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#409eff;background:#409eff}.el-radio__input.is-checked .el-radio__inner:after{transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409eff}.el-radio__input.is-focus .el-radio__inner{border-color:#409eff}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;cursor:pointer;box-sizing:border-box}.el-radio__inner:hover{border-color:#409eff}.el-radio__inner:after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px #409eff}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;transition:opacity .34s ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);transition:background-color .3s}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;transition:opacity .12s ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:1px solid #e4e7ed;border-radius:4px}.el-cascader-menu{min-width:180px;box-sizing:border-box;color:#606266;border-right:1px solid #e4e7ed}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;box-sizing:border-box}.el-avatar,.el-drawer{-webkit-box-sizing:border-box;overflow:hidden}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;color:#c0c4cc}.el-cascader-node{position:relative;display:flex;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#409eff;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#f5f7fa}.el-cascader-node.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-cascader-node__prefix{left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;box-sizing:border-box;text-align:center;color:#fff;background:#c0c4cc;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-drawer,.el-drawer__header{display:-ms-flexbox}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}.el-drawer.btt,.el-drawer.ttb,.el-drawer__container{left:0;right:0;width:100%}.el-drawer.ltr,.el-drawer.rtl,.el-drawer__container{top:0;bottom:0;height:100%}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}to{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes rtl-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}@-webkit-keyframes rtl-drawer-out{0%{transform:translate(0)}to{transform:translate(100%)}}@keyframes rtl-drawer-out{0%{transform:translate(0)}to{transform:translate(100%)}}@-webkit-keyframes ltr-drawer-in{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes ltr-drawer-in{0%{transform:translate(-100%)}to{transform:translate(0)}}@-webkit-keyframes ltr-drawer-out{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes ltr-drawer-out{0%{transform:translate(0)}to{transform:translate(-100%)}}@-webkit-keyframes ttb-drawer-in{0%{transform:translateY(-100%)}to{transform:translate(0)}}@keyframes ttb-drawer-in{0%{transform:translateY(-100%)}to{transform:translate(0)}}@-webkit-keyframes ttb-drawer-out{0%{transform:translate(0)}to{transform:translateY(-100%)}}@keyframes ttb-drawer-out{0%{transform:translate(0)}to{transform:translateY(-100%)}}@-webkit-keyframes btt-drawer-in{0%{transform:translateY(100%)}to{transform:translate(0)}}@keyframes btt-drawer-in{0%{transform:translateY(100%)}to{transform:translate(0)}}@-webkit-keyframes btt-drawer-out{0%{transform:translate(0)}to{transform:translateY(100%)}}@keyframes btt-drawer-out{0%{transform:translate(0)}to{transform:translateY(100%)}}.el-drawer{position:absolute;box-sizing:border-box;background-color:#fff;display:flex;flex-direction:column;box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s;right:0}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s;left:0}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s;top:0}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s;bottom:0}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:20px 20px 0}.el-drawer__header>:first-child,.el-drawer__title{flex:1}.el-drawer__title{margin:0;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{flex:1}.el-drawer__body>*{box-sizing:border-box}.el-drawer__container{position:relative}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:flex;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}blockquote,body,dd,dl,dt,fieldset,form,h1,h2,h3,h4,h5,input,li,ol,pre,td,th,ul{margin:0;padding:0}body{margin:0;overflow:hidden;word-break:break-all;font-family:Helvetica Neue,Helvetica,PingFang SC,Arial,sans-serif;font-size:13px;color:#333;background-color:#fff}body,html{height:100%}body,html,img{border:0}ol,ul{margin:0!important;outline:none}li,ol,ul{list-style:none;padding:0}li,ul{margin:0;outline:0}fieldset{padding:0;margin:0;border:0;margin-bottom:10px}table{border-collapse:collapse}table caption{margin-left:-1px}legend{display:block;width:100%;padding:0;margin-bottom:5px;font-size:16px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type=password]::-ms-reveal,input[type=text]::-ms-clear{display:none}input::-moz-placeholder,textarea::-moz-placeholder{font-size:12px!important;opacity:.5;color:#666!important;font-family:Helvetica Neue,Helvetica,Arial,sans-serif!important}input:-ms-input-placeholder,textarea:-ms-input-placeholder{font-size:12px!important;opacity:.5;color:#666!important;font-family:Helvetica Neue,Helvetica,Arial,sans-serif!important}input::placeholder,textarea::placeholder{font-size:12px!important;opacity:.5;color:#666!important;font-family:Helvetica Neue,Helvetica,Arial,sans-serif!important}img{vertical-align:middle;max-width:100%}blockquote:after,blockquote:before,q:after,q:before{content:""}h2{color:red}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{border-width:1px;border-style:solid;border-color:#fff;border-radius:6px;background:#cecece}:focus{outline:none!important}.awsui-box-component{position:relative;width:100%}.awsui-component{position:relative;display:inline-block}.awsui-disabled{background:#f5f7fa!important;color:#666!important;cursor:not-allowed;opacity:.5}.awsui-hide{display:none}.awsui-show{display:block}.awsui-cursor{cursor:pointer}.awsui-ellipsis{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.awsui-border-no-left{border-left:0;border-bottom-left-radius:0;border-top-left-radius:0}.awsui-border-no-right{border-right:0;border-bottom-right-radius:0;border-top-right-radius:0}.awsui-public-radius{border-radius:2px}.awsui-public-border{border:1px solid #e9e9e9}.awsui-iconfont.hover{background:transparent;padding:6px;border-radius:4px;cursor:pointer;line-height:1;color:#666}.awsui-iconfont.hover:hover{background:#e7eaef;border-radius:4px}.awsui-margin-left-8{margin-left:8px}.awsui-margin-right-8{margin-right:8px}.awsui-margin-left-5{margin-left:5px}.awsui-margin-right-5{margin-right:5px}.awsui-margin-top-10{margin-top:10px}.awsui-margin-bottom-10{margin-bottom:10px}.awsui-left{float:left}.awsui-right{float:right}.awsui-align-center{text-align:center}.awsui-align-left{text-align:left}.awsui-align-right{text-align:right}.awsui-size-small{width:20%}.awsui-size-medium{width:40%}.awsui-size-large{width:60%}.awsui-size-x-large{width:80%}.awsui-size-full{width:100%}.awsui-bg-red{background:#e9405d}.awsui-bg-yellow{background:#ffb800}.awsui-bg-green{background:#009688}.awsui-bg-blue{background:#1e9fff}.awsui-bg-black{background:#393d49}.awsui-bg-bred{background:#d9422f}.awsui-bg-gray{background:#f8f8f8}.awsui-bg-cyan{background:#2f4056}.awsui-badge{display:inline-block;position:relative;text-align:center}.awsui-badge-orange{background-color:#ff5722}.awsui-badge-dot,.awsui-badge-orange{width:8px;height:8px;border-radius:50%}.awsui-badge-dot{background-color:#ffb800}.awsui-badge-green{background-color:#5fb878}.awsui-badge-blue,.awsui-badge-green{width:8px;height:8px;border-radius:50%}.awsui-badge-blue{background-color:#008ed5}.awsui-badge-red{width:8px;height:8px;border-radius:50%;background-color:#d9422f}.awsui-badge-circle,.awsui-badge-square{width:20px;height:20px;text-align:center;line-height:20px;font-size:12px;color:#fff;background:#ff5722}.awsui-badge-square{border-radius:2px}.awsui-badge-circle{border-radius:50%}.awsui-grid{height:50px;width:80px;background:#009688;position:absolute;top:50%;transform:translateY(-50%);overflow:hidden;border-radius:3px}.awsui-halve{position:absolute;top:0;z-index:9;height:16px;line-height:16px;font-size:11px;white-space:nowrap;color:#fff;padding:0 50px}.awsui-halve-red{background-color:#fb5050}.awsui-halve-green{background-color:#6ac63d}.awsui-halve-left{left:0;transform:rotate(-45deg) translate(-31%,-205%)}.awsui-halve-right{right:0;transform:rotate(45deg) translate(32%,-205%)}.awsui-p{display:block;width:auto;font-size:14px;padding:8px 15px;line-height:1.6em}.awsui-leg-red{border-top:1px solid #ff5722!important}.awsui-leg-blue{border-top:1px solid #008ed5!important}.window-mask{background:#fff;position:fixed;width:1000px;top:0;left:0;opacity:.6;filter:alpha(opacity=60)}.awsui-table{max-width:100%;table-layout:fixed;border-collapse:collapse;border-spacing:0;empty-cells:show;width:100%;background:#fff}.awsui-table .selectall a{text-decoration:none;color:red;padding:0 20px;cursor:pointer}.awsui-table>tbody>tr>td,.awsui-table>thead>tr>th{border:1px solid #e9e9e9;padding:8px 16px;text-align:left;vertical-align:middle}.awsui-table th{background:#f8f8f8;white-space:nowrap;color:#666;font-weight:600}.awsui-table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.awsui-children-table td{border:none!important;border-bottom:1px solid #e9e9e9!important}.awsui-children-table tr:last-child>td{border-bottom:none!important}.awsui-table-condensed>tbody>tr>td,.awsui-table-condensed>tbody>tr>th,.awsui-table-condensed>tfoot>tr>td,.awsui-table-condensed>tfoot>tr>th,.awsui-table-condensed>thead>tr>td,.awsui-table-condensed>thead>tr>th{padding:5px}.awsui-table-bordered,.awsui-table-bordered>tbody>tr>td,.awsui-table-bordered>tbody>tr>th,.awsui-table-bordered>tfoot>tr>td,.awsui-table-bordered>tfoot>tr>th,.awsui-table-bordered>thead>tr>td,.awsui-table-bordered>thead>tr>th{border:1px solid #e9e9e9}.awsui-table-bordered>tbody>tr>td.left{text-align:left}.awsui-table-bordered>tbody>tr>td.center{text-align:center}.awsui-table-bordered>tbody>tr>td.right{text-align:right}.awsui-table-bordered>thead>tr>td,.awsui-table-bordered>thead>tr>th{border-bottom-width:1px}.awsui-table-thin{border:none;border-top:1px solid #e9e9e9}.awsui-table-thin>tbody>tr>td,.awsui-table-thin>tbody>tr>th,.awsui-table-thin>tfoot>tr>td,.awsui-table-thin>tfoot>tr>th,.awsui-table-thin>thead>tr>td,.awsui-table-thin>thead>tr>th{border-bottom:1px solid #e6e6e6}.awsui-table-thin>tbody>tr>td.left{text-align:left}.awsui-table-thin>tbody>tr>td.center{text-align:center}.awsui-table-thin>tbody>tr>td.right{text-align:right}.awsui-table-thin>tbody>tr>td,.awsui-table-thin>thead>tr>th{border:none;border-top:1px solid #e9e9e9;border-bottom:1px solid #e9e9e9}.awsui-table-ordinate>tbody>tr>td,.awsui-table-ordinate>thead>tr>th{border:none;border-left:1px solid #e9e9e9;border-right:1px solid #e9e9e9}.awsui-table-striped>tbody>tr:nth-child(odd)>td,.awsui-table-striped>tbody>tr:nth-child(odd)>th{background-color:#fff}.awsui-table-hover>tbody>tr:hover>td,.awsui-table-hover>tbody>tr:hover>th,.awsui-table-striped>tbody>tr:nth-child(2n)>td,.awsui-table-striped>tbody>tr:nth-child(2n)>th{background-color:#f8f8f8}.awsui-table .awsui-selectall a{text-decoration:none;color:red;padding:0 20px;cursor:pointer}.awsui-table-left>tbody>tr>td,.awsui-table-left>thead>tr>th{text-align:left!important}.awsui-table-center>tbody>tr>td,.awsui-table-center>thead>tr>th{text-align:center!important}.awsui-table-right>tbody>tr>td,.awsui-table-right>thead>tr>th{text-align:right!important}.awsui-monospaced{font-family:Courier New!important}.awsui-panel{background:#fff}.awsui-panel-docked-left{border-right:1px solid #e9e9e9}.awsui-panel-docked-right{margin-left:auto;border-left:1px solid #e9e9e9}.awsui-panel-header{display:flex;position:relative;align-items:center;padding:10px;border-bottom:1px solid #e9e9e9}.awsui-panel-header-title{width:100%;width:88%\9;display:inline-block;margin-right:16px;font-weight:700}.awsui-panel-body{padding:10px;overflow-y:auto}.awsui-public-box{box-shadow:0 0 30px rgba(31,31,31,.2);border-radius:4px;padding:15px;background:#fff;border:1px solid #e9e9e9;line-height:1;position:relative}.awsui-public-box .awsui-public-box-main{display:inline-block;vertical-align:top;line-height:1.5;letter-spacing:.5px;width:100%}.awsui-public-box .awsui-public-box-icon{text-align:center;width:auto;color:#0ca72d;display:inline-block}.awsui-public-box .awsui-public-box-icon img{max-width:100%;border-radius:4px}.awsui-public-box .awsui-iconfont{font-size:30px}.awsui-public-box .awsui-public-box-title{font-size:16px;color:#333;width:100%;display:inline-block}.awsui-public-box .awsui-public-box-content{font-size:12px;color:#666;width:100%;display:inline-block;padding-top:8px}.awsui-public-box .awsui-public-box-content p{margin:0}.awsui-public-box-close{position:absolute;text-align:center;right:10px;top:10px;line-height:19px;width:19px;height:19px;cursor:pointer;transition:all .5s;color:#666;font-size:12px!important}.awsui-public-box-close:hover{color:#333}.awsui-public-box-btn{width:100%;margin-top:12px;text-align:right}.awsui-notification{position:fixed;z-index:200;min-width:300px;max-width:500px}.awsui-notification .awsui-notification-content{min-height:50px;margin-bottom:10px;overflow:hidden;transition:all 1s;position:relative}.awsui-notification-content .awsui-public-box-icon{margin-right:10px}.awsui-notification-btn{width:100%;text-align:right;margin-top:12px}.awsui-notification-btn-primary{color:#fff;background:#3983de;margin:0}.awsui-icon-green{color:#0ca72d}.awsui-icon-blue{color:#3983de}.awsui-icon-orange{color:#ff9421}.awsui-icon-red{color:#f14f3a}.awsui-loading{width:16px;height:16px;background:url(data:image/gif;base64,R0lGODlhEAAQAKIGAMLY8YSx5HOm4Mjc88/g9Ofw+v///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAGACwAAAAAEAAQAAADMGi6RbUwGjKIXCAA016PgRBElAVlG/RdLOO0X9nK61W39qvqiwz5Ls/rRqrggsdkAgAh+QQFCgAGACwCAAAABwAFAAADD2hqELAmiFBIYY4MAutdCQAh+QQFCgAGACwGAAAABwAFAAADD1hU1kaDOKMYCGAGEeYFCQAh+QQFCgAGACwKAAIABQAHAAADEFhUZjSkKdZqBQG0IELDQAIAIfkEBQoABgAsCgAGAAUABwAAAxBoVlRKgyjmlAIBqCDCzUoCACH5BAUKAAYALAYACgAHAAUAAAMPaGpFtYYMAgJgLogA610JACH5BAUKAAYALAIACgAHAAUAAAMPCAHWFiI4o1ghZZJB5i0JACH5BAUKAAYALAAABgAFAAcAAAMQCAFmIaEp1motpDQySMNFAgA7) no-repeat 50%;vertical-align:text-top;display:inline-block}.awsui-row{position:relative;box-sizing:border-box}.awsui-row:after,.awsui-row:before{display:table;content:""}.awsui-row:after{clear:both}.awsui-row--flex{display:flex}.awsui-row--flex:after,.awsui-row--flex:before{display:none}.awsui-row--flex.is-justify-center{justify-content:center}.awsui-row--flex.is-justify-end{justify-content:flex-end}.awsui-row--flex.is-justify-space-between{justify-content:space-between}.awsui-row--flex.is-justify-space-around{justify-content:space-around}.awsui-row--flex.is-align-middle{align-items:center}.awsui-row--flex.is-align-bottom{align-items:flex-end}.awsui-col-pull-0,.awsui-col-pull-1,.awsui-col-pull-2,.awsui-col-pull-3,.awsui-col-pull-4,.awsui-col-pull-5,.awsui-col-pull-6,.awsui-col-pull-7,.awsui-col-pull-8,.awsui-col-pull-9,.awsui-col-pull-10,.awsui-col-pull-11,.awsui-col-pull-12,.awsui-col-pull-13,.awsui-col-pull-14,.awsui-col-pull-15,.awsui-col-pull-16,.awsui-col-pull-17,.awsui-col-pull-18,.awsui-col-pull-19,.awsui-col-pull-20,.awsui-col-pull-21,.awsui-col-pull-22,.awsui-col-pull-23,.awsui-col-pull-24,.awsui-col-push-0,.awsui-col-push-1,.awsui-col-push-2,.awsui-col-push-3,.awsui-col-push-4,.awsui-col-push-5,.awsui-col-push-6,.awsui-col-push-7,.awsui-col-push-8,.awsui-col-push-9,.awsui-col-push-10,.awsui-col-push-11,.awsui-col-push-12,.awsui-col-push-13,.awsui-col-push-14,.awsui-col-push-15,.awsui-col-push-16,.awsui-col-push-17,.awsui-col-push-18,.awsui-col-push-19,.awsui-col-push-20,.awsui-col-push-21,.awsui-col-push-22,.awsui-col-push-23,.awsui-col-push-24{position:relative}[class*=awsui-col-]{float:left;box-sizing:border-box}.awsui-col-0{display:none;width:0}.awsui-col-offset-0{margin-left:0}.awsui-col-pull-0{right:0}.awsui-col-push-0{left:0}.awsui-col-1{width:4.16667%}.awsui-col-offset-1{margin-left:4.16667%}.awsui-col-pull-1{right:4.16667%}.awsui-col-push-1{left:4.16667%}.awsui-col-2{width:8.33333%}.awsui-col-offset-2{margin-left:8.33333%}.awsui-col-pull-2{right:8.33333%}.awsui-col-push-2{left:8.33333%}.awsui-col-3{width:12.5%}.awsui-col-offset-3{margin-left:12.5%}.awsui-col-pull-3{right:12.5%}.awsui-col-push-3{left:12.5%}.awsui-col-4{width:16.66667%}.awsui-col-offset-4{margin-left:16.66667%}.awsui-col-pull-4{right:16.66667%}.awsui-col-push-4{left:16.66667%}.awsui-col-5{width:20.83333%}.awsui-col-offset-5{margin-left:20.83333%}.awsui-col-pull-5{right:20.83333%}.awsui-col-push-5{left:20.83333%}.awsui-col-6{width:25%}.awsui-col-offset-6{margin-left:25%}.awsui-col-pull-6{right:25%}.awsui-col-push-6{left:25%}.awsui-col-7{width:29.16667%}.awsui-col-offset-7{margin-left:29.16667%}.awsui-col-pull-7{right:29.16667%}.awsui-col-push-7{left:29.16667%}.awsui-col-8{width:33.33333%}.awsui-col-offset-8{margin-left:33.33333%}.awsui-col-pull-8{right:33.33333%}.awsui-col-push-8{left:33.33333%}.awsui-col-9{width:37.5%}.awsui-col-offset-9{margin-left:37.5%}.awsui-col-pull-9{right:37.5%}.awsui-col-push-9{left:37.5%}.awsui-col-10{width:41.66667%}.awsui-col-offset-10{margin-left:41.66667%}.awsui-col-pull-10{right:41.66667%}.awsui-col-push-10{left:41.66667%}.awsui-col-11{width:45.83333%}.awsui-col-offset-11{margin-left:45.83333%}.awsui-col-pull-11{right:45.83333%}.awsui-col-push-11{left:45.83333%}.awsui-col-12{width:50%}.awsui-col-offset-12{margin-left:50%}.awsui-col-pull-12{right:50%}.awsui-col-push-12{left:50%}.awsui-col-13{width:54.16667%}.awsui-col-offset-13{margin-left:54.16667%}.awsui-col-pull-13{right:54.16667%}.awsui-col-push-13{left:54.16667%}.awsui-col-14{width:58.33333%}.awsui-col-offset-14{margin-left:58.33333%}.awsui-col-pull-14{right:58.33333%}.awsui-col-push-14{left:58.33333%}.awsui-col-15{width:62.5%}.awsui-col-offset-15{margin-left:62.5%}.awsui-col-pull-15{right:62.5%}.awsui-col-push-15{left:62.5%}.awsui-col-16{width:66.66667%}.awsui-col-offset-16{margin-left:66.66667%}.awsui-col-pull-16{right:66.66667%}.awsui-col-push-16{left:66.66667%}.awsui-col-17{width:70.83333%}.awsui-col-offset-17{margin-left:70.83333%}.awsui-col-pull-17{right:70.83333%}.awsui-col-push-17{left:70.83333%}.awsui-col-18{width:75%}.awsui-col-offset-18{margin-left:75%}.awsui-col-pull-18{right:75%}.awsui-col-push-18{left:75%}.awsui-col-19{width:79.16667%}.awsui-col-offset-19{margin-left:79.16667%}.awsui-col-pull-19{right:79.16667%}.awsui-col-push-19{left:79.16667%}.awsui-col-20{width:83.33333%}.awsui-col-offset-20{margin-left:83.33333%}.awsui-col-pull-20{right:83.33333%}.awsui-col-push-20{left:83.33333%}.awsui-col-21{width:87.5%}.awsui-col-offset-21{margin-left:87.5%}.awsui-col-pull-21{right:87.5%}.awsui-col-push-21{left:87.5%}.awsui-col-22{width:91.66667%}.awsui-col-offset-22{margin-left:91.66667%}.awsui-col-pull-22{right:91.66667%}.awsui-col-push-22{left:91.66667%}.awsui-col-23{width:95.83333%}.awsui-col-offset-23{margin-left:95.83333%}.awsui-col-pull-23{right:95.83333%}.awsui-col-push-23{left:95.83333%}.awsui-col-24{width:100%}.awsui-col-offset-24{margin-left:100%}.awsui-col-pull-24{right:100%}.awsui-col-push-24{left:100%}@media only screen and (max-width:767px){.awsui-col-xs-0{display:none;width:0}.awsui-col-xs-offset-0{margin-left:0}.awsui-col-xs-pull-0{position:relative;right:0}.awsui-col-xs-push-0{position:relative;left:0}.awsui-col-xs-1{width:4.16667%}.awsui-col-xs-offset-1{margin-left:4.16667%}.awsui-col-xs-pull-1{position:relative;right:4.16667%}.awsui-col-xs-push-1{position:relative;left:4.16667%}.awsui-col-xs-2{width:8.33333%}.awsui-col-xs-offset-2{margin-left:8.33333%}.awsui-col-xs-pull-2{position:relative;right:8.33333%}.awsui-col-xs-push-2{position:relative;left:8.33333%}.awsui-col-xs-3{width:12.5%}.awsui-col-xs-offset-3{margin-left:12.5%}.awsui-col-xs-pull-3{position:relative;right:12.5%}.awsui-col-xs-push-3{position:relative;left:12.5%}.awsui-col-xs-4{width:16.66667%}.awsui-col-xs-offset-4{margin-left:16.66667%}.awsui-col-xs-pull-4{position:relative;right:16.66667%}.awsui-col-xs-push-4{position:relative;left:16.66667%}.awsui-col-xs-5{width:20.83333%}.awsui-col-xs-offset-5{margin-left:20.83333%}.awsui-col-xs-pull-5{position:relative;right:20.83333%}.awsui-col-xs-push-5{position:relative;left:20.83333%}.awsui-col-xs-6{width:25%}.awsui-col-xs-offset-6{margin-left:25%}.awsui-col-xs-pull-6{position:relative;right:25%}.awsui-col-xs-push-6{position:relative;left:25%}.awsui-col-xs-7{width:29.16667%}.awsui-col-xs-offset-7{margin-left:29.16667%}.awsui-col-xs-pull-7{position:relative;right:29.16667%}.awsui-col-xs-push-7{position:relative;left:29.16667%}.awsui-col-xs-8{width:33.33333%}.awsui-col-xs-offset-8{margin-left:33.33333%}.awsui-col-xs-pull-8{position:relative;right:33.33333%}.awsui-col-xs-push-8{position:relative;left:33.33333%}.awsui-col-xs-9{width:37.5%}.awsui-col-xs-offset-9{margin-left:37.5%}.awsui-col-xs-pull-9{position:relative;right:37.5%}.awsui-col-xs-push-9{position:relative;left:37.5%}.awsui-col-xs-10{width:41.66667%}.awsui-col-xs-offset-10{margin-left:41.66667%}.awsui-col-xs-pull-10{position:relative;right:41.66667%}.awsui-col-xs-push-10{position:relative;left:41.66667%}.awsui-col-xs-11{width:45.83333%}.awsui-col-xs-offset-11{margin-left:45.83333%}.awsui-col-xs-pull-11{position:relative;right:45.83333%}.awsui-col-xs-push-11{position:relative;left:45.83333%}.awsui-col-xs-12{width:50%}.awsui-col-xs-offset-12{margin-left:50%}.awsui-col-xs-pull-12{position:relative;right:50%}.awsui-col-xs-push-12{position:relative;left:50%}.awsui-col-xs-13{width:54.16667%}.awsui-col-xs-offset-13{margin-left:54.16667%}.awsui-col-xs-pull-13{position:relative;right:54.16667%}.awsui-col-xs-push-13{position:relative;left:54.16667%}.awsui-col-xs-14{width:58.33333%}.awsui-col-xs-offset-14{margin-left:58.33333%}.awsui-col-xs-pull-14{position:relative;right:58.33333%}.awsui-col-xs-push-14{position:relative;left:58.33333%}.awsui-col-xs-15{width:62.5%}.awsui-col-xs-offset-15{margin-left:62.5%}.awsui-col-xs-pull-15{position:relative;right:62.5%}.awsui-col-xs-push-15{position:relative;left:62.5%}.awsui-col-xs-16{width:66.66667%}.awsui-col-xs-offset-16{margin-left:66.66667%}.awsui-col-xs-pull-16{position:relative;right:66.66667%}.awsui-col-xs-push-16{position:relative;left:66.66667%}.awsui-col-xs-17{width:70.83333%}.awsui-col-xs-offset-17{margin-left:70.83333%}.awsui-col-xs-pull-17{position:relative;right:70.83333%}.awsui-col-xs-push-17{position:relative;left:70.83333%}.awsui-col-xs-18{width:75%}.awsui-col-xs-offset-18{margin-left:75%}.awsui-col-xs-pull-18{position:relative;right:75%}.awsui-col-xs-push-18{position:relative;left:75%}.awsui-col-xs-19{width:79.16667%}.awsui-col-xs-offset-19{margin-left:79.16667%}.awsui-col-xs-pull-19{position:relative;right:79.16667%}.awsui-col-xs-push-19{position:relative;left:79.16667%}.awsui-col-xs-20{width:83.33333%}.awsui-col-xs-offset-20{margin-left:83.33333%}.awsui-col-xs-pull-20{position:relative;right:83.33333%}.awsui-col-xs-push-20{position:relative;left:83.33333%}.awsui-col-xs-21{width:87.5%}.awsui-col-xs-offset-21{margin-left:87.5%}.awsui-col-xs-pull-21{position:relative;right:87.5%}.awsui-col-xs-push-21{position:relative;left:87.5%}.awsui-col-xs-22{width:91.66667%}.awsui-col-xs-offset-22{margin-left:91.66667%}.awsui-col-xs-pull-22{position:relative;right:91.66667%}.awsui-col-xs-push-22{position:relative;left:91.66667%}.awsui-col-xs-23{width:95.83333%}.awsui-col-xs-offset-23{margin-left:95.83333%}.awsui-col-xs-pull-23{position:relative;right:95.83333%}.awsui-col-xs-push-23{position:relative;left:95.83333%}.awsui-col-xs-24{width:100%}.awsui-col-xs-offset-24{margin-left:100%}.awsui-col-xs-pull-24{position:relative;right:100%}.awsui-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.awsui-col-sm-0{display:none;width:0}.awsui-col-sm-offset-0{margin-left:0}.awsui-col-sm-pull-0{position:relative;right:0}.awsui-col-sm-push-0{position:relative;left:0}.awsui-col-sm-1{width:4.16667%}.awsui-col-sm-offset-1{margin-left:4.16667%}.awsui-col-sm-pull-1{position:relative;right:4.16667%}.awsui-col-sm-push-1{position:relative;left:4.16667%}.awsui-col-sm-2{width:8.33333%}.awsui-col-sm-offset-2{margin-left:8.33333%}.awsui-col-sm-pull-2{position:relative;right:8.33333%}.awsui-col-sm-push-2{position:relative;left:8.33333%}.awsui-col-sm-3{width:12.5%}.awsui-col-sm-offset-3{margin-left:12.5%}.awsui-col-sm-pull-3{position:relative;right:12.5%}.awsui-col-sm-push-3{position:relative;left:12.5%}.awsui-col-sm-4{width:16.66667%}.awsui-col-sm-offset-4{margin-left:16.66667%}.awsui-col-sm-pull-4{position:relative;right:16.66667%}.awsui-col-sm-push-4{position:relative;left:16.66667%}.awsui-col-sm-5{width:20.83333%}.awsui-col-sm-offset-5{margin-left:20.83333%}.awsui-col-sm-pull-5{position:relative;right:20.83333%}.awsui-col-sm-push-5{position:relative;left:20.83333%}.awsui-col-sm-6{width:25%}.awsui-col-sm-offset-6{margin-left:25%}.awsui-col-sm-pull-6{position:relative;right:25%}.awsui-col-sm-push-6{position:relative;left:25%}.awsui-col-sm-7{width:29.16667%}.awsui-col-sm-offset-7{margin-left:29.16667%}.awsui-col-sm-pull-7{position:relative;right:29.16667%}.awsui-col-sm-push-7{position:relative;left:29.16667%}.awsui-col-sm-8{width:33.33333%}.awsui-col-sm-offset-8{margin-left:33.33333%}.awsui-col-sm-pull-8{position:relative;right:33.33333%}.awsui-col-sm-push-8{position:relative;left:33.33333%}.awsui-col-sm-9{width:37.5%}.awsui-col-sm-offset-9{margin-left:37.5%}.awsui-col-sm-pull-9{position:relative;right:37.5%}.awsui-col-sm-push-9{position:relative;left:37.5%}.awsui-col-sm-10{width:41.66667%}.awsui-col-sm-offset-10{margin-left:41.66667%}.awsui-col-sm-pull-10{position:relative;right:41.66667%}.awsui-col-sm-push-10{position:relative;left:41.66667%}.awsui-col-sm-11{width:45.83333%}.awsui-col-sm-offset-11{margin-left:45.83333%}.awsui-col-sm-pull-11{position:relative;right:45.83333%}.awsui-col-sm-push-11{position:relative;left:45.83333%}.awsui-col-sm-12{width:50%}.awsui-col-sm-offset-12{margin-left:50%}.awsui-col-sm-pull-12{position:relative;right:50%}.awsui-col-sm-push-12{position:relative;left:50%}.awsui-col-sm-13{width:54.16667%}.awsui-col-sm-offset-13{margin-left:54.16667%}.awsui-col-sm-pull-13{position:relative;right:54.16667%}.awsui-col-sm-push-13{position:relative;left:54.16667%}.awsui-col-sm-14{width:58.33333%}.awsui-col-sm-offset-14{margin-left:58.33333%}.awsui-col-sm-pull-14{position:relative;right:58.33333%}.awsui-col-sm-push-14{position:relative;left:58.33333%}.awsui-col-sm-15{width:62.5%}.awsui-col-sm-offset-15{margin-left:62.5%}.awsui-col-sm-pull-15{position:relative;right:62.5%}.awsui-col-sm-push-15{position:relative;left:62.5%}.awsui-col-sm-16{width:66.66667%}.awsui-col-sm-offset-16{margin-left:66.66667%}.awsui-col-sm-pull-16{position:relative;right:66.66667%}.awsui-col-sm-push-16{position:relative;left:66.66667%}.awsui-col-sm-17{width:70.83333%}.awsui-col-sm-offset-17{margin-left:70.83333%}.awsui-col-sm-pull-17{position:relative;right:70.83333%}.awsui-col-sm-push-17{position:relative;left:70.83333%}.awsui-col-sm-18{width:75%}.awsui-col-sm-offset-18{margin-left:75%}.awsui-col-sm-pull-18{position:relative;right:75%}.awsui-col-sm-push-18{position:relative;left:75%}.awsui-col-sm-19{width:79.16667%}.awsui-col-sm-offset-19{margin-left:79.16667%}.awsui-col-sm-pull-19{position:relative;right:79.16667%}.awsui-col-sm-push-19{position:relative;left:79.16667%}.awsui-col-sm-20{width:83.33333%}.awsui-col-sm-offset-20{margin-left:83.33333%}.awsui-col-sm-pull-20{position:relative;right:83.33333%}.awsui-col-sm-push-20{position:relative;left:83.33333%}.awsui-col-sm-21{width:87.5%}.awsui-col-sm-offset-21{margin-left:87.5%}.awsui-col-sm-pull-21{position:relative;right:87.5%}.awsui-col-sm-push-21{position:relative;left:87.5%}.awsui-col-sm-22{width:91.66667%}.awsui-col-sm-offset-22{margin-left:91.66667%}.awsui-col-sm-pull-22{position:relative;right:91.66667%}.awsui-col-sm-push-22{position:relative;left:91.66667%}.awsui-col-sm-23{width:95.83333%}.awsui-col-sm-offset-23{margin-left:95.83333%}.awsui-col-sm-pull-23{position:relative;right:95.83333%}.awsui-col-sm-push-23{position:relative;left:95.83333%}.awsui-col-sm-24{width:100%}.awsui-col-sm-offset-24{margin-left:100%}.awsui-col-sm-pull-24{position:relative;right:100%}.awsui-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.awsui-col-md-0{display:none;width:0}.awsui-col-md-offset-0{margin-left:0}.awsui-col-md-pull-0{position:relative;right:0}.awsui-col-md-push-0{position:relative;left:0}.awsui-col-md-1{width:4.16667%}.awsui-col-md-offset-1{margin-left:4.16667%}.awsui-col-md-pull-1{position:relative;right:4.16667%}.awsui-col-md-push-1{position:relative;left:4.16667%}.awsui-col-md-2{width:8.33333%}.awsui-col-md-offset-2{margin-left:8.33333%}.awsui-col-md-pull-2{position:relative;right:8.33333%}.awsui-col-md-push-2{position:relative;left:8.33333%}.awsui-col-md-3{width:12.5%}.awsui-col-md-offset-3{margin-left:12.5%}.awsui-col-md-pull-3{position:relative;right:12.5%}.awsui-col-md-push-3{position:relative;left:12.5%}.awsui-col-md-4{width:16.66667%}.awsui-col-md-offset-4{margin-left:16.66667%}.awsui-col-md-pull-4{position:relative;right:16.66667%}.awsui-col-md-push-4{position:relative;left:16.66667%}.awsui-col-md-5{width:20.83333%}.awsui-col-md-offset-5{margin-left:20.83333%}.awsui-col-md-pull-5{position:relative;right:20.83333%}.awsui-col-md-push-5{position:relative;left:20.83333%}.awsui-col-md-6{width:25%}.awsui-col-md-offset-6{margin-left:25%}.awsui-col-md-pull-6{position:relative;right:25%}.awsui-col-md-push-6{position:relative;left:25%}.awsui-col-md-7{width:29.16667%}.awsui-col-md-offset-7{margin-left:29.16667%}.awsui-col-md-pull-7{position:relative;right:29.16667%}.awsui-col-md-push-7{position:relative;left:29.16667%}.awsui-col-md-8{width:33.33333%}.awsui-col-md-offset-8{margin-left:33.33333%}.awsui-col-md-pull-8{position:relative;right:33.33333%}.awsui-col-md-push-8{position:relative;left:33.33333%}.awsui-col-md-9{width:37.5%}.awsui-col-md-offset-9{margin-left:37.5%}.awsui-col-md-pull-9{position:relative;right:37.5%}.awsui-col-md-push-9{position:relative;left:37.5%}.awsui-col-md-10{width:41.66667%}.awsui-col-md-offset-10{margin-left:41.66667%}.awsui-col-md-pull-10{position:relative;right:41.66667%}.awsui-col-md-push-10{position:relative;left:41.66667%}.awsui-col-md-11{width:45.83333%}.awsui-col-md-offset-11{margin-left:45.83333%}.awsui-col-md-pull-11{position:relative;right:45.83333%}.awsui-col-md-push-11{position:relative;left:45.83333%}.awsui-col-md-12{width:50%}.awsui-col-md-offset-12{margin-left:50%}.awsui-col-md-pull-12{position:relative;right:50%}.awsui-col-md-push-12{position:relative;left:50%}.awsui-col-md-13{width:54.16667%}.awsui-col-md-offset-13{margin-left:54.16667%}.awsui-col-md-pull-13{position:relative;right:54.16667%}.awsui-col-md-push-13{position:relative;left:54.16667%}.awsui-col-md-14{width:58.33333%}.awsui-col-md-offset-14{margin-left:58.33333%}.awsui-col-md-pull-14{position:relative;right:58.33333%}.awsui-col-md-push-14{position:relative;left:58.33333%}.awsui-col-md-15{width:62.5%}.awsui-col-md-offset-15{margin-left:62.5%}.awsui-col-md-pull-15{position:relative;right:62.5%}.awsui-col-md-push-15{position:relative;left:62.5%}.awsui-col-md-16{width:66.66667%}.awsui-col-md-offset-16{margin-left:66.66667%}.awsui-col-md-pull-16{position:relative;right:66.66667%}.awsui-col-md-push-16{position:relative;left:66.66667%}.awsui-col-md-17{width:70.83333%}.awsui-col-md-offset-17{margin-left:70.83333%}.awsui-col-md-pull-17{position:relative;right:70.83333%}.awsui-col-md-push-17{position:relative;left:70.83333%}.awsui-col-md-18{width:75%}.awsui-col-md-offset-18{margin-left:75%}.awsui-col-md-pull-18{position:relative;right:75%}.awsui-col-md-push-18{position:relative;left:75%}.awsui-col-md-19{width:79.16667%}.awsui-col-md-offset-19{margin-left:79.16667%}.awsui-col-md-pull-19{position:relative;right:79.16667%}.awsui-col-md-push-19{position:relative;left:79.16667%}.awsui-col-md-20{width:83.33333%}.awsui-col-md-offset-20{margin-left:83.33333%}.awsui-col-md-pull-20{position:relative;right:83.33333%}.awsui-col-md-push-20{position:relative;left:83.33333%}.awsui-col-md-21{width:87.5%}.awsui-col-md-offset-21{margin-left:87.5%}.awsui-col-md-pull-21{position:relative;right:87.5%}.awsui-col-md-push-21{position:relative;left:87.5%}.awsui-col-md-22{width:91.66667%}.awsui-col-md-offset-22{margin-left:91.66667%}.awsui-col-md-pull-22{position:relative;right:91.66667%}.awsui-col-md-push-22{position:relative;left:91.66667%}.awsui-col-md-23{width:95.83333%}.awsui-col-md-offset-23{margin-left:95.83333%}.awsui-col-md-pull-23{position:relative;right:95.83333%}.awsui-col-md-push-23{position:relative;left:95.83333%}.awsui-col-md-24{width:100%}.awsui-col-md-offset-24{margin-left:100%}.awsui-col-md-pull-24{position:relative;right:100%}.awsui-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.awsui-col-lg-0{display:none;width:0}.awsui-col-lg-offset-0{margin-left:0}.awsui-col-lg-pull-0{position:relative;right:0}.awsui-col-lg-push-0{position:relative;left:0}.awsui-col-lg-1{width:4.16667%}.awsui-col-lg-offset-1{margin-left:4.16667%}.awsui-col-lg-pull-1{position:relative;right:4.16667%}.awsui-col-lg-push-1{position:relative;left:4.16667%}.awsui-col-lg-2{width:8.33333%}.awsui-col-lg-offset-2{margin-left:8.33333%}.awsui-col-lg-pull-2{position:relative;right:8.33333%}.awsui-col-lg-push-2{position:relative;left:8.33333%}.awsui-col-lg-3{width:12.5%}.awsui-col-lg-offset-3{margin-left:12.5%}.awsui-col-lg-pull-3{position:relative;right:12.5%}.awsui-col-lg-push-3{position:relative;left:12.5%}.awsui-col-lg-4{width:16.66667%}.awsui-col-lg-offset-4{margin-left:16.66667%}.awsui-col-lg-pull-4{position:relative;right:16.66667%}.awsui-col-lg-push-4{position:relative;left:16.66667%}.awsui-col-lg-5{width:20.83333%}.awsui-col-lg-offset-5{margin-left:20.83333%}.awsui-col-lg-pull-5{position:relative;right:20.83333%}.awsui-col-lg-push-5{position:relative;left:20.83333%}.awsui-col-lg-6{width:25%}.awsui-col-lg-offset-6{margin-left:25%}.awsui-col-lg-pull-6{position:relative;right:25%}.awsui-col-lg-push-6{position:relative;left:25%}.awsui-col-lg-7{width:29.16667%}.awsui-col-lg-offset-7{margin-left:29.16667%}.awsui-col-lg-pull-7{position:relative;right:29.16667%}.awsui-col-lg-push-7{position:relative;left:29.16667%}.awsui-col-lg-8{width:33.33333%}.awsui-col-lg-offset-8{margin-left:33.33333%}.awsui-col-lg-pull-8{position:relative;right:33.33333%}.awsui-col-lg-push-8{position:relative;left:33.33333%}.awsui-col-lg-9{width:37.5%}.awsui-col-lg-offset-9{margin-left:37.5%}.awsui-col-lg-pull-9{position:relative;right:37.5%}.awsui-col-lg-push-9{position:relative;left:37.5%}.awsui-col-lg-10{width:41.66667%}.awsui-col-lg-offset-10{margin-left:41.66667%}.awsui-col-lg-pull-10{position:relative;right:41.66667%}.awsui-col-lg-push-10{position:relative;left:41.66667%}.awsui-col-lg-11{width:45.83333%}.awsui-col-lg-offset-11{margin-left:45.83333%}.awsui-col-lg-pull-11{position:relative;right:45.83333%}.awsui-col-lg-push-11{position:relative;left:45.83333%}.awsui-col-lg-12{width:50%}.awsui-col-lg-offset-12{margin-left:50%}.awsui-col-lg-pull-12{position:relative;right:50%}.awsui-col-lg-push-12{position:relative;left:50%}.awsui-col-lg-13{width:54.16667%}.awsui-col-lg-offset-13{margin-left:54.16667%}.awsui-col-lg-pull-13{position:relative;right:54.16667%}.awsui-col-lg-push-13{position:relative;left:54.16667%}.awsui-col-lg-14{width:58.33333%}.awsui-col-lg-offset-14{margin-left:58.33333%}.awsui-col-lg-pull-14{position:relative;right:58.33333%}.awsui-col-lg-push-14{position:relative;left:58.33333%}.awsui-col-lg-15{width:62.5%}.awsui-col-lg-offset-15{margin-left:62.5%}.awsui-col-lg-pull-15{position:relative;right:62.5%}.awsui-col-lg-push-15{position:relative;left:62.5%}.awsui-col-lg-16{width:66.66667%}.awsui-col-lg-offset-16{margin-left:66.66667%}.awsui-col-lg-pull-16{position:relative;right:66.66667%}.awsui-col-lg-push-16{position:relative;left:66.66667%}.awsui-col-lg-17{width:70.83333%}.awsui-col-lg-offset-17{margin-left:70.83333%}.awsui-col-lg-pull-17{position:relative;right:70.83333%}.awsui-col-lg-push-17{position:relative;left:70.83333%}.awsui-col-lg-18{width:75%}.awsui-col-lg-offset-18{margin-left:75%}.awsui-col-lg-pull-18{position:relative;right:75%}.awsui-col-lg-push-18{position:relative;left:75%}.awsui-col-lg-19{width:79.16667%}.awsui-col-lg-offset-19{margin-left:79.16667%}.awsui-col-lg-pull-19{position:relative;right:79.16667%}.awsui-col-lg-push-19{position:relative;left:79.16667%}.awsui-col-lg-20{width:83.33333%}.awsui-col-lg-offset-20{margin-left:83.33333%}.awsui-col-lg-pull-20{position:relative;right:83.33333%}.awsui-col-lg-push-20{position:relative;left:83.33333%}.awsui-col-lg-21{width:87.5%}.awsui-col-lg-offset-21{margin-left:87.5%}.awsui-col-lg-pull-21{position:relative;right:87.5%}.awsui-col-lg-push-21{position:relative;left:87.5%}.awsui-col-lg-22{width:91.66667%}.awsui-col-lg-offset-22{margin-left:91.66667%}.awsui-col-lg-pull-22{position:relative;right:91.66667%}.awsui-col-lg-push-22{position:relative;left:91.66667%}.awsui-col-lg-23{width:95.83333%}.awsui-col-lg-offset-23{margin-left:95.83333%}.awsui-col-lg-pull-23{position:relative;right:95.83333%}.awsui-col-lg-push-23{position:relative;left:95.83333%}.awsui-col-lg-24{width:100%}.awsui-col-lg-offset-24{margin-left:100%}.awsui-col-lg-pull-24{position:relative;right:100%}.awsui-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.awsui-col-xl-0{display:none;width:0}.awsui-col-xl-offset-0{margin-left:0}.awsui-col-xl-pull-0{position:relative;right:0}.awsui-col-xl-push-0{position:relative;left:0}.awsui-col-xl-1{width:4.16667%}.awsui-col-xl-offset-1{margin-left:4.16667%}.awsui-col-xl-pull-1{position:relative;right:4.16667%}.awsui-col-xl-push-1{position:relative;left:4.16667%}.awsui-col-xl-2{width:8.33333%}.awsui-col-xl-offset-2{margin-left:8.33333%}.awsui-col-xl-pull-2{position:relative;right:8.33333%}.awsui-col-xl-push-2{position:relative;left:8.33333%}.awsui-col-xl-3{width:12.5%}.awsui-col-xl-offset-3{margin-left:12.5%}.awsui-col-xl-pull-3{position:relative;right:12.5%}.awsui-col-xl-push-3{position:relative;left:12.5%}.awsui-col-xl-4{width:16.66667%}.awsui-col-xl-offset-4{margin-left:16.66667%}.awsui-col-xl-pull-4{position:relative;right:16.66667%}.awsui-col-xl-push-4{position:relative;left:16.66667%}.awsui-col-xl-5{width:20.83333%}.awsui-col-xl-offset-5{margin-left:20.83333%}.awsui-col-xl-pull-5{position:relative;right:20.83333%}.awsui-col-xl-push-5{position:relative;left:20.83333%}.awsui-col-xl-6{width:25%}.awsui-col-xl-offset-6{margin-left:25%}.awsui-col-xl-pull-6{position:relative;right:25%}.awsui-col-xl-push-6{position:relative;left:25%}.awsui-col-xl-7{width:29.16667%}.awsui-col-xl-offset-7{margin-left:29.16667%}.awsui-col-xl-pull-7{position:relative;right:29.16667%}.awsui-col-xl-push-7{position:relative;left:29.16667%}.awsui-col-xl-8{width:33.33333%}.awsui-col-xl-offset-8{margin-left:33.33333%}.awsui-col-xl-pull-8{position:relative;right:33.33333%}.awsui-col-xl-push-8{position:relative;left:33.33333%}.awsui-col-xl-9{width:37.5%}.awsui-col-xl-offset-9{margin-left:37.5%}.awsui-col-xl-pull-9{position:relative;right:37.5%}.awsui-col-xl-push-9{position:relative;left:37.5%}.awsui-col-xl-10{width:41.66667%}.awsui-col-xl-offset-10{margin-left:41.66667%}.awsui-col-xl-pull-10{position:relative;right:41.66667%}.awsui-col-xl-push-10{position:relative;left:41.66667%}.awsui-col-xl-11{width:45.83333%}.awsui-col-xl-offset-11{margin-left:45.83333%}.awsui-col-xl-pull-11{position:relative;right:45.83333%}.awsui-col-xl-push-11{position:relative;left:45.83333%}.awsui-col-xl-12{width:50%}.awsui-col-xl-offset-12{margin-left:50%}.awsui-col-xl-pull-12{position:relative;right:50%}.awsui-col-xl-push-12{position:relative;left:50%}.awsui-col-xl-13{width:54.16667%}.awsui-col-xl-offset-13{margin-left:54.16667%}.awsui-col-xl-pull-13{position:relative;right:54.16667%}.awsui-col-xl-push-13{position:relative;left:54.16667%}.awsui-col-xl-14{width:58.33333%}.awsui-col-xl-offset-14{margin-left:58.33333%}.awsui-col-xl-pull-14{position:relative;right:58.33333%}.awsui-col-xl-push-14{position:relative;left:58.33333%}.awsui-col-xl-15{width:62.5%}.awsui-col-xl-offset-15{margin-left:62.5%}.awsui-col-xl-pull-15{position:relative;right:62.5%}.awsui-col-xl-push-15{position:relative;left:62.5%}.awsui-col-xl-16{width:66.66667%}.awsui-col-xl-offset-16{margin-left:66.66667%}.awsui-col-xl-pull-16{position:relative;right:66.66667%}.awsui-col-xl-push-16{position:relative;left:66.66667%}.awsui-col-xl-17{width:70.83333%}.awsui-col-xl-offset-17{margin-left:70.83333%}.awsui-col-xl-pull-17{position:relative;right:70.83333%}.awsui-col-xl-push-17{position:relative;left:70.83333%}.awsui-col-xl-18{width:75%}.awsui-col-xl-offset-18{margin-left:75%}.awsui-col-xl-pull-18{position:relative;right:75%}.awsui-col-xl-push-18{position:relative;left:75%}.awsui-col-xl-19{width:79.16667%}.awsui-col-xl-offset-19{margin-left:79.16667%}.awsui-col-xl-pull-19{position:relative;right:79.16667%}.awsui-col-xl-push-19{position:relative;left:79.16667%}.awsui-col-xl-20{width:83.33333%}.awsui-col-xl-offset-20{margin-left:83.33333%}.awsui-col-xl-pull-20{position:relative;right:83.33333%}.awsui-col-xl-push-20{position:relative;left:83.33333%}.awsui-col-xl-21{width:87.5%}.awsui-col-xl-offset-21{margin-left:87.5%}.awsui-col-xl-pull-21{position:relative;right:87.5%}.awsui-col-xl-push-21{position:relative;left:87.5%}.awsui-col-xl-22{width:91.66667%}.awsui-col-xl-offset-22{margin-left:91.66667%}.awsui-col-xl-pull-22{position:relative;right:91.66667%}.awsui-col-xl-push-22{position:relative;left:91.66667%}.awsui-col-xl-23{width:95.83333%}.awsui-col-xl-offset-23{margin-left:95.83333%}.awsui-col-xl-pull-23{position:relative;right:95.83333%}.awsui-col-xl-push-23{position:relative;left:95.83333%}.awsui-col-xl-24{width:100%}.awsui-col-xl-offset-24{margin-left:100%}.awsui-col-xl-pull-24{position:relative;right:100%}.awsui-col-xl-push-24{position:relative;left:100%}}.awsui-popup-parent--hidden{overflow:hidden}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.6;background:#fff}@font-face{font-family:awsui-iconfont;src:url(../fonts/iconfont.392a0f97.392a0f97.eot);src:local("☺"),url(../fonts/iconfont.392a0f97.392a0f97.eot?#iefix) format("embedded-opentype"),url(../fonts/iconfont.51373027.51373027.woff) format("woff"),url(../fonts/iconfont.3420a3a6.3420a3a6.ttf) format("truetype"),url(../img/iconfont.ce1b01d3.ce1b01d3.svg#iconfontOTINA1xY) format("svg");font-weight:400;font-style:normal}.awsui-iconfont{font-family:awsui-iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.awsui-iconfont-liuchengzu:before{content:"\e8f6"}.awsui-iconfont-yewuyu:before{content:"\e8f9"}.awsui-iconfont-yewucengji:before{content:"\e8fa"}.awsui-iconfont-chaifenyemian:before{content:"\e8f5"}.awsui-iconfont-shoujixuanzhuan:before{content:"\e8f4"}.awsui-iconfont-VAR:before{content:"\e8f3"}.awsui-iconfont-bianliang:before{content:"\e8f2"}.awsui-iconfont-menhu:before{content:"\e8f0"}.awsui-iconfont-layer:before{content:"\e8f1"}.awsui-iconfont-jia1:before{content:"\e8b4"}.awsui-iconfont-jiazhilian:before{content:"\e8ef"}.awsui-iconfont-uprank:before{content:"\e8ee"}.awsui-iconfont-zhuanhuan1:before{content:"\e8ed"}.awsui-iconfont-shuxian:before{content:"\e8ec"}.awsui-iconfont-address:before{content:"\e8ea"}.awsui-iconfont-clock:before{content:"\e8eb"}.awsui-iconfont-debug:before{content:"\e8e9"}.awsui-iconfont-danao:before{content:"\e8e7"}.awsui-iconfont-shujushitu:before{content:"\e8e8"}.awsui-iconfont-xiaoyanjing:before{content:"\e8e6"}.awsui-iconfont-tuozhuai1:before{content:"\e8e5"}.awsui-iconfont-lianjie:before{content:"\e8e4"}.awsui-iconfont-shuipingfenbu-copy:before{content:"\ef9a"}.awsui-iconfont-chuangkouwindow25:before{content:"\e8ae"}.awsui-iconfont-shuxing:before{content:"\e8af"}.awsui-iconfont-baobiaoqianru:before{content:"\e8b0"}.awsui-iconfont-ludanjilu:before{content:"\e8b1"}.awsui-iconfont-buju:before{content:"\e8b2"}.awsui-iconfont-iconziti27:before{content:"\e8b3"}.awsui-iconfont-bianji5:before{content:"\e8b5"}.awsui-iconfont-mofabang:before{content:"\e8b6"}.awsui-iconfont-leidatu1:before{content:"\e8b7"}.awsui-iconfont-biaoge1:before{content:"\e8b8"}.awsui-iconfont-downrank:before{content:"\e8b9"}.awsui-iconfont-svg-funnel:before{content:"\e8ba"}.awsui-iconfont-yangshi:before{content:"\e8bb"}.awsui-iconfont-shuaxin:before{content:"\e8bc"}.awsui-iconfont-shuanglie:before{content:"\e8bd"}.awsui-iconfont-copy:before{content:"\e8be"}.awsui-iconfont-zhibiaotu-heise:before{content:"\e8bf"}.awsui-iconfont-jia2:before{content:"\e8c0"}.awsui-iconfont-dayin:before{content:"\e8c1"}.awsui-iconfont-zhexiantu2:before{content:"\e8c2"}.awsui-iconfont-tongjitu:before{content:"\e8c3"}.awsui-iconfont-zuoduiqi:before{content:"\e8c4"}.awsui-iconfont-jiaochabiaotubiao:before{content:"\e8c5"}.awsui-iconfont-moban:before{content:"\e8c6"}.awsui-iconfont-yibiaopan1:before{content:"\e8c7"}.awsui-iconfont-fangda1:before{content:"\e8c8"}.awsui-iconfont-wenben:before{content:"\e8c9"}.awsui-iconfont-mingxibiao:before{content:"\e8ca"}.awsui-iconfont-layout:before{content:"\e8cb"}.awsui-iconfont-shijianzhou:before{content:"\e8cc"}.awsui-iconfont-shuipingfenbu:before{content:"\e8cd"}.awsui-iconfont-kapian:before{content:"\e8ce"}.awsui-iconfont-rili1:before{content:"\e8cf"}.awsui-iconfont-jian:before{content:"\e8d0"}.awsui-iconfont-mianjitu:before{content:"\e92b"}.awsui-iconfont-ic_daohang_shu:before{content:"\e8d1"}.awsui-iconfont-chaxun:before{content:"\e8d2"}.awsui-iconfont-zhujian:before{content:"\e8d3"}.awsui-iconfont-tiaojie-:before{content:"\e8d4"}.awsui-iconfont-sandiantu:before{content:"\e8d5"}.awsui-iconfont-app:before{content:"\e8d6"}.awsui-iconfont-icon:before{content:"\e8d7"}.awsui-iconfont-anniu:before{content:"\e8d8"}.awsui-iconfont-tubiaoku-:before{content:"\e9c2"}.awsui-iconfont-ditu1:before{content:"\e8d9"}.awsui-iconfont-youduiqi:before{content:"\e8da"}.awsui-iconfont-juzhentu:before{content:"\e8db"}.awsui-iconfont-danhang:before{content:"\e8dc"}.awsui-iconfont-peizhi:before{content:"\e8dd"}.awsui-iconfont-yidongduan:before{content:"\eb9f"}.awsui-iconfont-tubiao_bingtu:before{content:"\e8de"}.awsui-iconfont-shuangzhoutu:before{content:"\e8df"}.awsui-iconfont-juzhong-01:before{content:"\e8e0"}.awsui-iconfont-tubiaozhuzhuangtu:before{content:"\e8e2"}.awsui-iconfont-sandianditu:before{content:"\e8e3"}.awsui-iconfont-weituo:before{content:"\e8ad"}.awsui-iconfont-huaban1:before{content:"\e8ac"}.awsui-iconfont-sort-ascend:before{content:"\e8aa"}.awsui-iconfont-sort-ascend-copy:before{content:"\e8ab"}.awsui-iconfont-chuangkoufangda1:before{content:"\e8a7"}.awsui-iconfont-icon_yuyinbofang:before{content:"\e8a6"}.awsui-iconfont-xingxing1:before{content:"\e83a"}.awsui-iconfont-icon-test2:before{content:"\e8a5"}.awsui-iconfont-tubiaozhizuomoban1:before{content:"\e8a4"}.awsui-iconfont-biaoge:before{content:"\e8a3"}.awsui-iconfont-tiaozhuangtu:before{content:"\e8a2"}.awsui-iconfont-calendar:before{content:"\e898"}.awsui-iconfont-tubiao-copy:before{content:"\e922"}.awsui-iconfont-outlook:before{content:"\e899"}.awsui-iconfont-normal1:before{content:"\e89a"}.awsui-iconfont-IE:before{content:"\e89b"}.awsui-iconfont-key2:before{content:"\e89c"}.awsui-iconfont-visio:before{content:"\e89d"}.awsui-iconfont-BitTorrent:before{content:"\eb43"}.awsui-iconfont-unkown:before{content:"\e89e"}.awsui-iconfont-MPtubiao:before{content:"\e89f"}.awsui-iconfont-file2:before{content:"\e8a0"}.awsui-iconfont-access:before{content:"\e8a1"}.awsui-iconfont-denghao:before{content:"\e897"}.awsui-iconfont-activemq:before{content:"\e872"}.awsui-iconfont-oracle1:before{content:"\e896"}.awsui-iconfont-wukuangrocketmq-copy:before{content:"\e876"}.awsui-iconfont-huawei:before{content:"\e889"}.awsui-iconfont-Redis-:before{content:"\e88a"}.awsui-iconfont-aliyun:before{content:"\e88b"}.awsui-iconfont-mongoDB:before{content:"\e88f"}.awsui-iconfont-rabbitmq:before{content:"\e890"}.awsui-iconfont-sap:before{content:"\e891"}.awsui-iconfont-salesforce:before{content:"\e892"}.awsui-iconfont-http:before{content:"\ef99"}.awsui-iconfont-wps:before{content:"\e893"}.awsui-iconfont-Kafka:before{content:"\e894"}.awsui-iconfont-kuozhanshuxing:before{content:"\e870"}.awsui-iconfont-kuozhangongneng:before{content:"\eaa0"}.awsui-iconfont-wenben2:before{content:"\e88c"}.awsui-iconfont-riqi2:before{content:"\e88d"}.awsui-iconfont-shuzhi2:before{content:"\e88e"}.awsui-iconfont-hongqi-hongse:before{content:"\e888"}.awsui-iconfont-diqu:before{content:"\e887"}.awsui-iconfont-shouxieluru:before{content:"\e884"}.awsui-iconfont-dianziqianzhang:before{content:"\e885"}.awsui-iconfont-ditu:before{content:"\e87e"}.awsui-iconfont-renwuqingdan:before{content:"\e87f"}.awsui-iconfont-fabu:before{content:"\e880"}.awsui-iconfont-biangengguanlibeifen:before{content:"\e881"}.awsui-iconfont-juecebaogao:before{content:"\e882"}.awsui-iconfont-tongzhi:before{content:"\e87a"}.awsui-iconfont-yaoqing:before{content:"\e87d"}.awsui-iconfont-changliangguanli:before{content:"\e87c"}.awsui-iconfont-gongxiangbianliang:before{content:"\e87b"}.awsui-iconfont-OA:before{content:"\e879"}.awsui-iconfont-ziyuanjieyong:before{content:"\e878"}.awsui-iconfont-huadongkaiguan-small:before{content:"\ec79"}.awsui-iconfont-shenqing:before{content:"\e86d"}.awsui-iconfont-jinrongfuwu:before{content:"\e86a"}.awsui-iconfont-danhangshurukuang:before{content:"\e86b"}.awsui-iconfont-shuxingkongjian:before{content:"\e86c"}.awsui-iconfont-fujian:before{content:"\e86e"}.awsui-iconfont-ditu-shouzhi:before{content:"\e86f"}.awsui-iconfont-icon-test1:before{content:"\e871"}.awsui-iconfont-danxuan:before{content:"\e873"}.awsui-iconfont-diliwangge:before{content:"\e874"}.awsui-iconfont-ziduan:before{content:"\e875"}.awsui-iconfont--duohangwenben:before{content:"\e877"}.awsui-iconfont-huangguan2:before{content:"\e7bf"}.awsui-iconfont-houqinwuzi:before{content:"\e869"}.awsui-iconfont-tuijian:before{content:"\e868"}.awsui-iconfont-hezuowoshou:before{content:"\e867"}.awsui-iconfont-zhuanzheng:before{content:"\e865"}.awsui-iconfont-lizhishenqing:before{content:"\e866"}.awsui-iconfont-qingjia:before{content:"\e851"}.awsui-iconfont-tansuo:before{content:"\e85f"}.awsui-iconfont-bianji4:before{content:"\e864"}.awsui-iconfont-duoweidu:before{content:"\e863"}.awsui-iconfont-zaixianxuexi:before{content:"\e85d"}.awsui-iconfont-shijiantemai:before{content:"\e854"}.awsui-iconfont-drxx32:before{content:"\e856"}.awsui-iconfont-zhishi1:before{content:"\e860"}.awsui-iconfont--xitongguanli:before{content:"\e861"}.awsui-iconfont-dictionary-fill:before{content:"\e862"}.awsui-iconfont-lixiangshenqing:before{content:"\e85e"}.awsui-iconfont-yongche:before{content:"\e85c"}.awsui-iconfont-wupin:before{content:"\e85b"}.awsui-iconfont-shoukuandanguanli:before{content:"\e85a"}.awsui-iconfont-kaipiaoguanli:before{content:"\e859"}.awsui-iconfont-jiekuan:before{content:"\e852"}.awsui-iconfont-baoxiaoshenqing:before{content:"\e857"}.awsui-iconfont-assist:before{content:"\e855"}.awsui-iconfont-jiaban:before{content:"\e853"}.awsui-iconfont-jurassic_pc:before{content:"\e850"}.awsui-iconfont-jiankangxian:before{content:"\e84d"}.awsui-iconfont-richengshili:before{content:"\e84e"}.awsui-iconfont-yinzhang:before{content:"\e84f"}.awsui-iconfont-anquanbaozhang:before{content:"\e7db"}.awsui-iconfont-huikuanguanli:before{content:"\e84c"}.awsui-iconfont-shichang:before{content:"\e847"}.awsui-iconfont-vs2:before{content:"\e848"}.awsui-iconfont-tousu1:before{content:"\e849"}.awsui-iconfont-dongtai_:before{content:"\e84a"}.awsui-iconfont-zhengfubaozhang:before{content:"\e84b"}.awsui-iconfont-shezhi3:before{content:"\e845"}.awsui-iconfont-xinzengliebiao:before{content:"\e846"}.awsui-iconfont-ziyuan1:before{content:"\e844"}.awsui-iconfont-niantie:before{content:"\e83f"}.awsui-iconfont-fuzhi1:before{content:"\e840"}.awsui-iconfont-fl-shuazi:before{content:"\e841"}.awsui-iconfont-niantie1:before{content:"\e842"}.awsui-iconfont-jianqie:before{content:"\e843"}.awsui-iconfont-role:before{content:"\e83e"}.awsui-iconfont-role-small:before{content:"\ec78"}.awsui-iconfont-rencai:before{content:"\e83d"}.awsui-iconfont-shuju:before{content:"\e83b"}.awsui-iconfont-_wenjianjia:before{content:"\e83c"}.awsui-iconfont-lianjieliu:before{content:"\ec57"}.awsui-iconfont-shouqi1:before{content:"\e837"}.awsui-iconfont-zhankai:before{content:"\e838"}.awsui-iconfont-zhuanhuan:before{content:"\e839"}.awsui-iconfont-biaoqian:before{content:"\e834"}.awsui-iconfont-shoucang:before{content:"\e804"}.awsui-iconfont-daiban:before{content:"\e805"}.awsui-iconfont-wendang:before{content:"\e806"}.awsui-iconfont-guizeshuoming:before{content:"\e80b"}.awsui-iconfont-fenxiang:before{content:"\e80d"}.awsui-iconfont-dangqianshijiangenzong:before{content:"\e817"}.awsui-iconfont-faqi:before{content:"\e818"}.awsui-iconfont-fenlei:before{content:"\e82d"}.awsui-iconfont-daiban1:before{content:"\e831"}.awsui-iconfont-weituoguanli:before{content:"\e833"}.awsui-iconfont-kefu1:before{content:"\e803"}.awsui-iconfont-cai:before{content:"\e807"}.awsui-iconfont-rect:before{content:"\e808"}.awsui-iconfont-chart14:before{content:"\e80e"}.awsui-iconfont-chart18:before{content:"\e80f"}.awsui-iconfont-chart34:before{content:"\e810"}.awsui-iconfont-chart38:before{content:"\e811"}.awsui-iconfont-circle:before{content:"\e812"}.awsui-iconfont-chart12:before{content:"\e813"}.awsui-iconfont-chart58:before{content:"\e814"}.awsui-iconfont-chart78:before{content:"\e815"}.awsui-iconfont-xingxing:before{content:"\e816"}.awsui-iconfont-dianzan:before{content:"\e819"}.awsui-iconfont-tingzhi1:before{content:"\e81a"}.awsui-iconfont-WIFIxinhao-ji:before{content:"\e81b"}.awsui-iconfont-WIFIxinhao-ji1:before{content:"\e81e"}.awsui-iconfont-WIFIxinhao-ji2:before{content:"\e81f"}.awsui-iconfont-WIFIxinhao-ji3:before{content:"\e820"}.awsui-iconfont-zanting1:before{content:"\e821"}.awsui-iconfont-xingqier:before{content:"\e822"}.awsui-iconfont-xingqiwu:before{content:"\e823"}.awsui-iconfont-xingqisan:before{content:"\e824"}.awsui-iconfont-xingqiliu:before{content:"\e825"}.awsui-iconfont-xingqiri:before{content:"\e826"}.awsui-iconfont-xingqisi:before{content:"\e827"}.awsui-iconfont-xingqiyi:before{content:"\e828"}.awsui-iconfont-xihuan:before{content:"\e829"}.awsui-iconfont-bianji3:before{content:"\e82a"}.awsui-iconfont-tianchongxing-2:before{content:"\e832"}.awsui-iconfont-flag-fill:before{content:"\e835"}.awsui-iconfont-yonghuzu:before{content:"\e836"}.awsui-iconfont-icon_paging_left:before{content:"\e809"}.awsui-iconfont-icon_paging_right:before{content:"\e80a"}.awsui-iconfont-chartpie-fill:before{content:"\e801"}.awsui-iconfont-ziyuan:before{content:"\e802"}.awsui-iconfont-dongjielie:before{content:"\e7ff"}.awsui-iconfont-tuichuquanping:before{content:"\e7fe"}.awsui-iconfont-quanping:before{content:"\e800"}.awsui-iconfont-jiazai:before{content:"\e7fd"}.awsui-iconfont-suoxiao:before{content:"\e7fb"}.awsui-iconfont-fangda:before{content:"\e7fc"}.awsui-iconfont-chuji:before{content:"\e7f7"}.awsui-iconfont-zhongji:before{content:"\e7f8"}.awsui-iconfont-gaoji:before{content:"\e7f9"}.awsui-iconfont-xinshouyindao:before{content:"\e7fa"}.awsui-iconfont-hebing:before{content:"\e7f6"}.awsui-iconfont-yewu:before{content:"\e7de"}.awsui-iconfont-yewuguanli:before{content:"\e7e4"}.awsui-iconfont-shouzhi:before{content:"\e7ec"}.awsui-iconfont-jiantou-copy:before{content:"\e7ed"}.awsui-iconfont-yewu1:before{content:"\e7ef"}.awsui-iconfont-yewu2:before{content:"\e7f4"}.awsui-iconfont-yewushenpi:before{content:"\e7f5"}.awsui-iconfont-xiaoxi:before{content:"\e8f7"}.awsui-iconfont-wenjianjia3:before{content:"\e7dd"}.awsui-iconfont-24gf-folderShare:before{content:"\eac5"}.awsui-iconfont-data-dictionary-active:before{content:"\e7dc"}.awsui-iconfont-chuangkou:before{content:"\e7cc"}.awsui-iconfont-shuangchuangkouduibi:before{content:"\e7cd"}.awsui-iconfont-zhongduanchuangkou:before{content:"\e7ce"}.awsui-iconfont-xinchuangkou0:before{content:"\e7cf"}.awsui-iconfont-tubiaozhizuomoban:before{content:"\e7cb"}.awsui-iconfont-wangpan:before{content:"\e7c8"}.awsui-iconfont-xinhao61:before{content:"\e7c5"}.awsui-iconfont-tubiaoanquandunpai-huise:before{content:"\e7c6"}.awsui-iconfont-jiekou:before{content:"\e7c7"}.awsui-iconfont-AppStore:before{content:"\e7c2"}.awsui-iconfont-daimashitu:before{content:"\e9e4"}.awsui-iconfont-shujuzidian:before{content:"\e7c3"}.awsui-iconfont-tool-https:before{content:"\e9e7"}.awsui-iconfont-biaodan1:before{content:"\e705"}.awsui-iconfont-baomingbiaodan:before{content:"\e706"}.awsui-iconfont-jiankong:before{content:"\e6ea"}.awsui-iconfont-shouqi:before{content:"\e704"}.awsui-iconfont-fanyi-full:before{content:"\e7be"}.awsui-iconfont-xiangxia:before{content:"\e631"}.awsui-iconfont-lihe:before{content:"\e638"}.awsui-iconfont-xiangmufujiaxinxiguanli:before{content:"\e7ba"}.awsui-iconfont-xiaochengxu2:before{content:"\e7c0"}.awsui-iconfont-tianjiayuding:before{content:"\e7c1"}.awsui-iconfont-jianshaoshuzi:before{content:"\e7bd"}.awsui-iconfont-jia:before{content:"\eb9a"}.awsui-iconfont-yingyong3:before{content:"\e7b2"}.awsui-iconfont-suo:before{content:"\e7b3"}.awsui-iconfont-yidongyingyong:before{content:"\e7b8"}.awsui-iconfont-bofang:before{content:"\e7b9"}.awsui-iconfont-yibiaopan:before{content:"\eb42"}.awsui-iconfont-suo1:before{content:"\e7bc"}.awsui-iconfont-shipinwenjian-s:before{content:"\e7b7"}.awsui-iconfont-dayinji:before{content:"\e7b1"}.awsui-iconfont-xls1:before{content:"\e7d0"}.awsui-iconfont-ai1:before{content:"\e7d1"}.awsui-iconfont-ps2:before{content:"\e7d2"}.awsui-iconfont-html1:before{content:"\e7d3"}.awsui-iconfont-ppt:before{content:"\e7d4"}.awsui-iconfont-pdf1:before{content:"\e7d5"}.awsui-iconfont-tupianwenjian-s:before{content:"\e7d6"}.awsui-iconfont-txt1:before{content:"\e7e7"}.awsui-iconfont-yasuobao:before{content:"\e7e8"}.awsui-iconfont-word:before{content:"\e7e9"}.awsui-iconfont-doc1:before{content:"\e7ea"}.awsui-iconfont-ic_dialog_apk:before{content:"\e7eb"}.awsui-iconfont-EPStubiao:before{content:"\e7b4"}.awsui-iconfont-EXEtubiao:before{content:"\e7b5"}.awsui-iconfont-SVGtubiao:before{content:"\e7c4"}.awsui-iconfont-woshou:before{content:"\e7b0"}.awsui-iconfont-api-copy:before{content:"\ec77"}.awsui-iconfont-tixing:before{content:"\e763"}.awsui-iconfont-huangguan:before{content:"\e764"}.awsui-iconfont-paixu2:before{content:"\e767"}.awsui-iconfont-qidong:before{content:"\e768"}.awsui-iconfont-gouwuqia:before{content:"\e769"}.awsui-iconfont-second:before{content:"\e76c"}.awsui-iconfont-third:before{content:"\e76d"}.awsui-iconfont-first:before{content:"\e771"}.awsui-iconfont-zifuda:before{content:"\e80c"}.awsui-iconfont-youjian:before{content:"\e773"}.awsui-iconfont-jsongeshihua:before{content:"\e774"}.awsui-iconfont-icidea:before{content:"\e775"}.awsui-iconfont-zitifont5:before{content:"\e777"}.awsui-iconfont-zhinengyouhua:before{content:"\e778"}.awsui-iconfont-jiangli:before{content:"\e779"}.awsui-iconfont-shuzi:before{content:"\e77a"}.awsui-iconfont-saomiaoerweima:before{content:"\e77b"}.awsui-iconfont-gouwu:before{content:"\e77c"}.awsui-iconfont-gouwuche:before{content:"\e77d"}.awsui-iconfont-paiming:before{content:"\e77e"}.awsui-iconfont-saomiaoerweima1:before{content:"\e77f"}.awsui-iconfont-youjian1:before{content:"\e780"}.awsui-iconfont-changyonglogo28:before{content:"\e781"}.awsui-iconfont-shangchuan:before{content:"\e782"}.awsui-iconfont-zanting:before{content:"\e783"}.awsui-iconfont-daoru2:before{content:"\e784"}.awsui-iconfont-tuozhuai:before{content:"\e785"}.awsui-iconfont-xinjian:before{content:"\e78d"}.awsui-iconfont-tuodong:before{content:"\e78e"}.awsui-iconfont-hanshu:before{content:"\e78f"}.awsui-iconfont-zhinengyuyinjiaohu:before{content:"\e791"}.awsui-iconfont-web__APIfangwen:before{content:"\e792"}.awsui-iconfont-api:before{content:"\e7e0"}.awsui-iconfont-tingzhi:before{content:"\e793"}.awsui-iconfont-guolv:before{content:"\e794"}.awsui-iconfont-xinzenggongshi:before{content:"\e795"}.awsui-iconfont-tubiao-hanshu:before{content:"\e796"}.awsui-iconfont-dingding:before{content:"\e797"}.awsui-iconfont-ico_home_obligation:before{content:"\e79c"}.awsui-iconfont-jiangli-:before{content:"\e79d"}.awsui-iconfont-cuiban:before{content:"\e79e"}.awsui-iconfont-xiaochengxu:before{content:"\e79f"}.awsui-iconfont-jinqian:before{content:"\e7a0"}.awsui-iconfont-daochu2:before{content:"\e7a1"}.awsui-iconfont-gongshi:before{content:"\e7a2"}.awsui-iconfont-lajitong_:before{content:"\e7a3"}.awsui-iconfont-kouling:before{content:"\e7a4"}.awsui-iconfont--XML:before{content:"\e7a5"}.awsui-iconfont-jiangli1:before{content:"\e7a6"}.awsui-iconfont-jiqiren:before{content:"\eada"}.awsui-iconfont-fsux_tubiao_gongshi_jisuan:before{content:"\e7a7"}.awsui-iconfont-icon-:before{content:"\e7a8"}.awsui-iconfont-fenxi:before{content:"\e7a9"}.awsui-iconfont-paixu:before{content:"\e7aa"}.awsui-iconfont-Map-pin:before{content:"\ec75"}.awsui-iconfont-Map-pin1:before{content:"\ec76"}.awsui-iconfont-youxianji:before{content:"\eb18"}.awsui-iconfont-jiaji:before{content:"\e7ab"}.awsui-iconfont-shangchuan-copy:before{content:"\e7ad"}.awsui-iconfont-shangchuan-copy-copy:before{content:"\e7ae"}.awsui-iconfont-shangchuan-copy-copy-copy:before{content:"\e7af"}.awsui-iconfont-loading1:before{content:"\e761"}.awsui-iconfont-loading:before{content:"\e762"}.awsui-iconfont-jiazai_dan:before{content:"\eaf3"}.awsui-iconfont-yuandian:before{content:"\e75f"}.awsui-iconfont-shanjian1:before{content:"\e61c"}.awsui-iconfont-shanjian:before{content:"\e71d"}.awsui-iconfont-zengjia2:before{content:"\e71e"}.awsui-iconfont-tiaojianchaxun:before{content:"\e617"}.awsui-iconfont-zengjia3:before{content:"\e726"}.awsui-iconfont-permissions-user:before{content:"\e61e"}.awsui-iconfont-edit-permissions:before{content:"\e61f"}.awsui-iconfont-add-permissions:before{content:"\e759"}.awsui-iconfont-remove-permissions:before{content:"\e75a"}.awsui-iconfont-setting-permissions:before{content:"\e75c"}.awsui-iconfont-duankailianjie:before{content:"\e60f"}.awsui-iconfont-robot_light:before{content:"\e75e"}.awsui-iconfont-921caidan_hezi:before{content:"\e727"}.awsui-iconfont-BBDhezi:before{content:"\e728"}.awsui-iconfont-itunes:before{content:"\e7bb"}.awsui-iconfont-sousuo2:before{content:"\e758"}.awsui-iconfont-yuan-copy-copy:before{content:"\e6d5"}.awsui-iconfont-sousuo1:before{content:"\e628"}.awsui-iconfont-wt-more:before{content:"\e719"}.awsui-iconfont-arrow-down:before{content:"\e707"}.awsui-iconfont-arrow-left:before{content:"\e708"}.awsui-iconfont-arrow-right:before{content:"\e709"}.awsui-iconfont-arrow-up:before{content:"\e70f"}.awsui-iconfont-chevron-thin-left:before{content:"\e715"}.awsui-iconfont-chevron-thin-down:before{content:"\e716"}.awsui-iconfont-chevron-thin-right:before{content:"\e717"}.awsui-iconfont-chevron-thin-up:before{content:"\e718"}.awsui-iconfont-xuanzhong1:before{content:"\e639"}.awsui-iconfont-shixindiqiu:before{content:"\e6f8"}.awsui-iconfont-diqiu3:before{content:"\e6ff"}.awsui-iconfont-fanhui1:before{content:"\e6fa"}.awsui-iconfont-shachu-xue:before{content:"\e6fe"}.awsui-iconfont-zuzhiqunti:before{content:"\e6f9"}.awsui-iconfont-diqiu2:before{content:"\e6f7"}.awsui-iconfont-fangdajing:before{content:"\e6e9"}.awsui-iconfont-liucheng:before{content:"\e6b6"}.awsui-iconfont-liucheng1:before{content:"\e6b7"}.awsui-iconfont-liucheng2:before{content:"\e6e2"}.awsui-iconfont-Flow_02:before{content:"\e70e"}.awsui-iconfont-bumen1:before{content:"\e6e4"}.awsui-iconfont-bumen2:before{content:"\e6e5"}.awsui-iconfont-liuchengjiankong:before{content:"\e6e6"}.awsui-iconfont-file-document-box:before{content:"\e757"}.awsui-iconfont-mp3:before{content:"\e6e1"}.awsui-iconfont-huiyishi:before{content:"\e68f"}.awsui-iconfont-biaodanku:before{content:"\e691"}.awsui-iconfont-wenjian1:before{content:"\e692"}.awsui-iconfont-caiwu1:before{content:"\e70d"}.awsui-iconfont-caiwuguanlim:before{content:"\e694"}.awsui-iconfont-guanlian:before{content:"\e699"}.awsui-iconfont-php1:before{content:"\e69c"}.awsui-iconfont-tongxunlu1:before{content:"\e69d"}.awsui-iconfont-xml1:before{content:"\e69e"}.awsui-iconfont-hetong:before{content:"\e69f"}.awsui-iconfont-exe:before{content:"\e73b"}.awsui-iconfont-shu1:before{content:"\e6a1"}.awsui-iconfont-lianjiexian:before{content:"\e75b"}.awsui-iconfont-shu2:before{content:"\e6a2"}.awsui-iconfont-ai:before{content:"\e6a3"}.awsui-iconfont-Word1:before{content:"\e6a4"}.awsui-iconfont-revisiondistribute:before{content:"\e6a5"}.awsui-iconfont-psd1:before{content:"\e6a6"}.awsui-iconfont-jiaqin:before{content:"\e6a7"}.awsui-iconfont-tongxunlu2:before{content:"\e6a8"}.awsui-iconfont-apkwenjian:before{content:"\e733"}.awsui-iconfont-guanlian1:before{content:"\e6aa"}.awsui-iconfont-shifouyunxuweiwanchengpandianrenwukaidan:before{content:"\e6ab"}.awsui-iconfont-tubiaozhizuomoban-:before{content:"\e6ac"}.awsui-iconfont-torrent:before{content:"\e6ad"}.awsui-iconfont-gongsi:before{content:"\e604"}.awsui-iconfont-msnui-forbid:before{content:"\e6c6"}.awsui-iconfont-doc:before{content:"\e65a"}.awsui-iconfont-jpg:before{content:"\e65b"}.awsui-iconfont-xls:before{content:"\e65c"}.awsui-iconfont-hr:before{content:"\e67f"}.awsui-iconfont-calculator:before{content:"\e6da"}.awsui-iconfont-normal:before{content:"\e69b"}.awsui-iconfont-crm12:before{content:"\e65f"}.awsui-iconfont-bpm:before{content:"\e66f"}.awsui-iconfont-jinzhi:before{content:"\e6e3"}.awsui-iconfont-pptfuzhi:before{content:"\e660"}.awsui-iconfont-html:before{content:"\e6c7"}.awsui-iconfont-wenjian:before{content:"\e661"}.awsui-iconfont-miaobiao-copy:before{content:"\e662"}.awsui-iconfont-chuchashenqing:before{content:"\e666"}.awsui-iconfont-caiwu:before{content:"\e669"}.awsui-iconfont-huo:before{content:"\e66d"}.awsui-iconfont-shangjiguanli:before{content:"\e66e"}.awsui-iconfont-bingtu:before{content:"\e6d9"}.awsui-iconfont-lianjiechenggong:before{content:"\e671"}.awsui-iconfont-icon03:before{content:"\e672"}.awsui-iconfont-keyanchengguo:before{content:"\e6fd"}.awsui-iconfont-xiangmu:before{content:"\e673"}.awsui-iconfont-biaodan:before{content:"\e674"}.awsui-iconfont-xiangmu1:before{content:"\e675"}.awsui-iconfont-rar:before{content:"\e676"}.awsui-iconfont-jiaohuan:before{content:"\e679"}.awsui-iconfont-png-:before{content:"\e67a"}.awsui-iconfont-leidatu:before{content:"\e6ae"}.awsui-iconfont-kefu:before{content:"\e67b"}.awsui-iconfont-gongsijieshao:before{content:"\e734"}.awsui-iconfont-tongxunlu:before{content:"\e680"}.awsui-iconfont-icon-test:before{content:"\e683"}.awsui-iconfont-css:before{content:"\e68e"}.awsui-iconfont-dmg:before{content:"\e696"}.awsui-iconfont-ipa:before{content:"\e6a9"}.awsui-iconfont-mpg:before{content:"\e6cb"}.awsui-iconfont-php:before{content:"\e6cd"}.awsui-iconfont-psd:before{content:"\e6dc"}.awsui-iconfont-vsd:before{content:"\e6f2"}.awsui-iconfont-pdf:before{content:"\e684"}.awsui-iconfont-kaoqin:before{content:"\e685"}.awsui-iconfont-uicon_mov:before{content:"\e686"}.awsui-iconfont-scatter-chart:before{content:"\e883"}.awsui-iconfont-duochuangkou:before{content:"\e99c"}.awsui-iconfont-zip:before{content:"\e687"}.awsui-iconfont-txt:before{content:"\e688"}.awsui-iconfont-file1:before{content:"\e689"}.awsui-iconfont-ie:before{content:"\e68a"}.awsui-iconfont-gongsijieshao1:before{content:"\e68c"}.awsui-iconfont-key1:before{content:"\e776"}.awsui-iconfont-microsoftoutlook:before{content:"\e68d"}.awsui-iconfont-shu:before{content:"\e6dd"}.awsui-iconfont-avi:before{content:"\e6cf"}.awsui-iconfont-chm:before{content:"\e6d1"}.awsui-iconfont-gif:before{content:"\e6d2"}.awsui-iconfont-js:before{content:"\e6e0"}.awsui-iconfont-zhuzhuangtu:before{content:"\e642"}.awsui-iconfont-iconfontshouji:before{content:"\e644"}.awsui-iconfont-61:before{content:"\e695"}.awsui-iconfont-qiehuan:before{content:"\e646"}.awsui-iconfont-qiehuan1:before{content:"\e65e"}.awsui-iconfont-qiehuan2:before{content:"\e678"}.awsui-iconfont-zhexiantu:before{content:"\e648"}.awsui-iconfont-pingguo:before{content:"\e649"}.awsui-iconfont-zhexiantu1:before{content:"\e64a"}.awsui-iconfont-account-box:before{content:"\e64b"}.awsui-iconfont-account-multiple:before{content:"\e64e"}.awsui-iconfont-alert-octagon:before{content:"\e650"}.awsui-iconfont-backspace:before{content:"\e651"}.awsui-iconfont-bing:before{content:"\e654"}.awsui-iconfont-calendar-check:before{content:"\e67e"}.awsui-iconfont-calendar-text:before{content:"\e682"}.awsui-iconfont-checkbox-marked-outline:before{content:"\e6a0"}.awsui-iconfont-clipboard-account:before{content:"\e6af"}.awsui-iconfont-clipboard-arrow-down:before{content:"\e6b1"}.awsui-iconfont-clipboard-alert:before{content:"\e6b2"}.awsui-iconfont-clipboard-check:before{content:"\e6b3"}.awsui-iconfont-clipboard-text:before{content:"\e6b5"}.awsui-iconfont-cloud:before{content:"\e6b9"}.awsui-iconfont-cloud-check:before{content:"\e6ba"}.awsui-iconfont-cloud-download:before{content:"\e6bb"}.awsui-iconfont-cloud-outline-off:before{content:"\e6bc"}.awsui-iconfont-cloud-outline:before{content:"\e6bd"}.awsui-iconfont-cloud-print:before{content:"\e6bf"}.awsui-iconfont-cloud-print-outline:before{content:"\e6c0"}.awsui-iconfont-cloud-upload:before{content:"\e6c3"}.awsui-iconfont-cloud-sync:before{content:"\e6c4"}.awsui-iconfont-comment-account-outline:before{content:"\e6c8"}.awsui-iconfont-comment-alert-outline:before{content:"\e6c9"}.awsui-iconfont-comment-check:before{content:"\e6ca"}.awsui-iconfont-comment-question-outline:before{content:"\e6cc"}.awsui-iconfont-console:before{content:"\e6d0"}.awsui-iconfont-content-save:before{content:"\e6d3"}.awsui-iconfont-contrast:before{content:"\e6d6"}.awsui-iconfont-contrast-box:before{content:"\e6d7"}.awsui-iconfont-cookie:before{content:"\e6d8"}.awsui-iconfont-delete-sweep:before{content:"\e6f4"}.awsui-iconfont-dna:before{content:"\e702"}.awsui-iconfont-elevation-decline:before{content:"\e710"}.awsui-iconfont-elevation-rise:before{content:"\e711"}.awsui-iconfont-email:before{content:"\e712"}.awsui-iconfont-email-outline:before{content:"\e713"}.awsui-iconfont-email-secure:before{content:"\e714"}.awsui-iconfont-eye:before{content:"\e722"}.awsui-iconfont-eye-off:before{content:"\e723"}.awsui-iconfont-facebook-box:before{content:"\e724"}.awsui-iconfont-facebook:before{content:"\e725"}.awsui-iconfont-file:before{content:"\e72b"}.awsui-iconfont-file-chart:before{content:"\e72c"}.awsui-iconfont-file-check:before{content:"\e72d"}.awsui-iconfont-file-cloud:before{content:"\e72e"}.awsui-iconfont-file-document:before{content:"\e72f"}.awsui-iconfont-file-excel-box:before{content:"\e730"}.awsui-iconfont-file-find:before{content:"\e731"}.awsui-iconfont-file-pdf-box:before{content:"\e737"}.awsui-iconfont-file-powerpoint-box:before{content:"\e738"}.awsui-iconfont-file-restore:before{content:"\e739"}.awsui-iconfont-file-send:before{content:"\e73a"}.awsui-iconfont-file-word-box:before{content:"\e73c"}.awsui-iconfont-file-xml:before{content:"\e741"}.awsui-iconfont-folder:before{content:"\e748"}.awsui-iconfont-folder-account:before{content:"\e749"}.awsui-iconfont-folder-google-drive:before{content:"\e74a"}.awsui-iconfont-folder-download:before{content:"\e74b"}.awsui-iconfont-folder-image:before{content:"\e74d"}.awsui-iconfont-folder-outline:before{content:"\e74e"}.awsui-iconfont-folder-star:before{content:"\e74f"}.awsui-iconfont-folder-upload:before{content:"\e750"}.awsui-iconfont-folder-move:before{content:"\e751"}.awsui-iconfont-folder-plus:before{content:"\e752"}.awsui-iconfont-format-header-:before{content:"\e75d"}.awsui-iconfont-google-drive:before{content:"\e78b"}.awsui-iconfont-image:before{content:"\e7ac"}.awsui-iconfont-language-css:before{content:"\e7c9"}.awsui-iconfont-language-html:before{content:"\e7ca"}.awsui-iconfont-link:before{content:"\e7d7"}.awsui-iconfont-link-off:before{content:"\e7d8"}.awsui-iconfont-link-variant-off:before{content:"\e7d9"}.awsui-iconfont-link-variant:before{content:"\e7da"}.awsui-iconfont-login-variant:before{content:"\e7df"}.awsui-iconfont-map-marker:before{content:"\e7e1"}.awsui-iconfont-map-marker-minus:before{content:"\e7e2"}.awsui-iconfont-map-marker-multiple:before{content:"\e7e3"}.awsui-iconfont-map-marker-plus:before{content:"\e7e5"}.awsui-iconfont-map-marker-radius:before{content:"\e7e6"}.awsui-iconfont-message-alert:before{content:"\e7ee"}.awsui-iconfont-message-processing:before{content:"\e7f0"}.awsui-iconfont-message-plus:before{content:"\e7f1"}.awsui-iconfont-message-text:before{content:"\e7f2"}.awsui-iconfont-message-text-outline:before{content:"\e7f3"}.awsui-iconfont-numeric--box:before{content:"\e81c"}.awsui-iconfont-numeric--box-outline:before{content:"\e81d"}.awsui-iconfont-open-in-new:before{content:"\e82b"}.awsui-iconfont-open-in-app:before{content:"\e82c"}.awsui-iconfont-package:before{content:"\e82e"}.awsui-iconfont-package-down:before{content:"\e82f"}.awsui-iconfont-package-up:before{content:"\e830"}.awsui-iconfont-poll-box:before{content:"\e858"}.awsui-iconfont-run:before{content:"\e886"}.awsui-iconfont-server:before{content:"\e895"}.awsui-iconfont-sim:before{content:"\e8a8"}.awsui-iconfont-sim-alert:before{content:"\e8a9"}.awsui-iconfont-trending-up:before{content:"\e8f8"}.awsui-iconfont-tumblr-reblog:before{content:"\e900"}.awsui-iconfont-vector-arrange-below:before{content:"\e90d"}.awsui-iconfont-view-array:before{content:"\e919"}.awsui-iconfont-view-column:before{content:"\e91a"}.awsui-iconfont-view-dashboard:before{content:"\e91b"}.awsui-iconfont-view-day:before{content:"\e91c"}.awsui-iconfont-view-list:before{content:"\e91d"}.awsui-iconfont-view-parallel:before{content:"\e91e"}.awsui-iconfont-view-quilt:before{content:"\e91f"}.awsui-iconfont-view-sequential:before{content:"\e920"}.awsui-iconfont-view-grid:before{content:"\e921"}.awsui-iconfont-weather-cloudy:before{content:"\e92d"}.awsui-iconfont-weather-lightning:before{content:"\e930"}.awsui-iconfont-weather-pouring:before{content:"\e931"}.awsui-iconfont-weather-rainy:before{content:"\e932"}.awsui-iconfont-web:before{content:"\e935"}.awsui-iconfont-webhook:before{content:"\e936"}.awsui-iconfont-xing-box:before{content:"\e945"}.awsui-iconfont-xml:before{content:"\e946"}.awsui-iconfont-h:before{content:"\e652"}.awsui-iconfont-activity:before{content:"\e6de"}.awsui-iconfont-activity_fill:before{content:"\e6df"}.awsui-iconfont-computer_fill:before{content:"\e6eb"}.awsui-iconfont-computer:before{content:"\e6ec"}.awsui-iconfont-coordinates_fill:before{content:"\e6ed"}.awsui-iconfont-coordinates:before{content:"\e6ee"}.awsui-iconfont-createtask_fill:before{content:"\e6ef"}.awsui-iconfont-createtask:before{content:"\e6f0"}.awsui-iconfont-dynamic_fill:before{content:"\e6f5"}.awsui-iconfont-dynamic:before{content:"\e6f6"}.awsui-iconfont-flag_fill:before{content:"\e6fb"}.awsui-iconfont-flag:before{content:"\e6fc"}.awsui-iconfont-headlines_fill:before{content:"\e700"}.awsui-iconfont-headlines:before{content:"\e701"}.awsui-iconfont-homepage_fill:before{content:"\e703"}.awsui-iconfont-manage_fill:before{content:"\e70c"}.awsui-iconfont-shielding_fill:before{content:"\e732"}.awsui-iconfont-shielding:before{content:"\e742"}.awsui-iconfont-stealth_fill:before{content:"\e743"}.awsui-iconfont-stealth:before{content:"\e744"}.awsui-iconfont-task:before{content:"\e745"}.awsui-iconfont-task_fill:before{content:"\e746"}.awsui-iconfont-tasklist_fill:before{content:"\e747"}.awsui-iconfont-tasklist:before{content:"\e753"}.awsui-iconfont-financial_fill:before{content:"\e754"}.awsui-iconfont-marketing_fill:before{content:"\e755"}.awsui-iconfont-qiehuan3:before{content:"\e656"}.awsui-iconfont-shouquan1:before{content:"\e66c"}.awsui-iconfont-supply:before{content:"\e760"}.awsui-iconfont-kaiguanguan:before{content:"\e657"}.awsui-iconfont-zhuzhuangtu1:before{content:"\e721"}.awsui-iconfont-kaiguanguan1:before{content:"\e658"}.awsui-iconfont-shouquan2:before{content:"\e659"}.awsui-iconfont-zhtn:before{content:"\e765"}.awsui-iconfont-shouji:before{content:"\e6db"}.awsui-iconfont-shezhi1:before{content:"\e67c"}.awsui-iconfont-daoru1:before{content:"\e68b"}.awsui-iconfont-lajitong:before{content:"\e6b0"}.awsui-iconfont-shang4:before{content:"\e62a"}.awsui-iconfont-xia3:before{content:"\e62b"}.awsui-iconfont-you1:before{content:"\e62e"}.awsui-iconfont-camera_fill:before{content:"\e6e7"}.awsui-iconfont-camera:before{content:"\e6e8"}.awsui-iconfont-mail:before{content:"\e70a"}.awsui-iconfont-mail_fill:before{content:"\e70b"}.awsui-iconfont-praise_fill:before{content:"\e71a"}.awsui-iconfont-praise:before{content:"\e71b"}.awsui-iconfont-prompt_fill:before{content:"\e71c"}.awsui-iconfont-remind_fill:before{content:"\e71f"}.awsui-iconfont-remind:before{content:"\e720"}.awsui-iconfont-share_fill:before{content:"\e729"}.awsui-iconfont-share:before{content:"\e72a"}.awsui-iconfont-time_fill:before{content:"\e735"}.awsui-iconfont-time:before{content:"\e736"}.awsui-iconfont-warning_fill:before{content:"\e73d"}.awsui-iconfont-warning:before{content:"\e73e"}.awsui-iconfont-workbench_fill:before{content:"\e73f"}.awsui-iconfont-workbench:before{content:"\e740"}.awsui-iconfont-zuo-copy:before{content:"\e618"}.awsui-iconfont-tuichu:before{content:"\e66b"}.awsui-iconfont-gaojisousuo:before{content:"\e664"}.awsui-iconfont-geren1:before{content:"\e61b"}.awsui-iconfont-fujian1:before{content:"\e681"}.awsui-iconfont-sousuo:before{content:"\e65d"}.awsui-iconfont-wenjianjia2:before{content:"\e610"}.awsui-iconfont-shanchu:before{content:"\e62f"}.awsui-iconfont-shezhi2:before{content:"\e615"}.awsui-iconfont-liebiao-heng:before{content:"\e611"}.awsui-iconfont-import:before{content:"\e690"}.awsui-iconfont-daochu1:before{content:"\e620"}.awsui-iconfont-bangzhu1:before{content:"\e629"}.awsui-iconfont-baocun1:before{content:"\ea71"}.awsui-iconfont-shaixuan:before{content:"\e64d"}.awsui-iconfont-stor:before{content:"\e612"}.awsui-iconfont-shang6:before{content:"\e61d"}.awsui-iconfont-zengjia1:before{content:"\e623"}.awsui-iconfont-daodianditu:before{content:"\e766"}.awsui-iconfont-zhichi:before{content:"\e76a"}.awsui-iconfont-buzhichi:before{content:"\e76b"}.awsui-iconfont-dianhuazhengzaibohao:before{content:"\e76e"}.awsui-iconfont-dianhua:before{content:"\e76f"}.awsui-iconfont-dianhuahuru:before{content:"\e770"}.awsui-iconfont-youxiajiao:before{content:"\e786"}.awsui-iconfont-zhiding:before{content:"\e787"}.awsui-iconfont-ziliaoduibi:before{content:"\e788"}.awsui-iconfont-zuoxiajiao:before{content:"\e789"}.awsui-iconfont-rili:before{content:"\e78a"}.awsui-iconfont-shujubaobiao:before{content:"\e78c"}.awsui-iconfont-tianjiawenjian:before{content:"\e790"}.awsui-iconfont-yejiguanli:before{content:"\e798"}.awsui-iconfont-yejishenhe:before{content:"\e799"}.awsui-iconfont-youshangjiao:before{content:"\e79a"}.awsui-iconfont-zuoshangjiao:before{content:"\e79b"}.awsui-iconfont-anzhuo:before{content:"\e6ce"}.awsui-iconfont-fuzhi:before{content:"\e62d"}.awsui-iconfont-xuanzhong:before{content:"\e6c5"}.awsui-iconfont-shouquan:before{content:"\e625"}.awsui-iconfont-refresh2:before{content:"\e624"}.awsui-iconfont-lajitong1:before{content:"\e626"}.awsui-iconfont-qunzu1:before{content:"\e67d"}.awsui-iconfont-bangzhu2:before{content:"\e62c"}.awsui-iconfont-bumen:before{content:"\e7b6"}.awsui-iconfont-you4:before{content:"\e630"}.awsui-iconfont-del2:before{content:"\e633"}.awsui-iconfont-biaodanliucheng_yingyongfenzu:before{content:"\e63a"}.awsui-iconfont-biaodanliucheng_yingyongfenzu1:before{content:"\e63e"}.awsui-iconfont-mima1:before{content:"\e634"}.awsui-iconfont-i:before{content:"\e635"}.awsui-iconfont-bianji2:before{content:"\e636"}.awsui-iconfont-wode1:before{content:"\e637"}.awsui-iconfont-refresh3:before{content:"\e677"}.awsui-iconfont-tianjia:before{content:"\e668"}.awsui-iconfont-wode2:before{content:"\e63b"}.awsui-iconfont-gantanhao1:before{content:"\e63d"}.awsui-iconfont--:before{content:"\e63f"}.awsui-iconfont-shaixuan1:before{content:"\e640"}.awsui-iconfont-wode3:before{content:"\e756"}.awsui-iconfont-fangwen:before{content:"\e6be"}.awsui-iconfont-qunzu2:before{content:"\e641"}.awsui-iconfont-del3:before{content:"\ec7b"}.awsui-iconfont-gengduo:before{content:"\e600"}.awsui-iconfont-zhuye:before{content:"\e601"}.awsui-iconfont-chuangkoufangda:before{content:"\e602"}.awsui-iconfont-tupian:before{content:"\e603"}.awsui-iconfont-diqiu:before{content:"\e613"}.awsui-iconfont-key:before{content:"\e74c"}.awsui-iconfont-gantanhao:before{content:"\e619"}.awsui-iconfont-msnui-info:before{content:"\e772"}.awsui-iconfont-geren:before{content:"\e61a"}.awsui-iconfont-cnbeta1193375easyiconnet:before{content:"\e616"}.awsui-iconfont-shang1:before{content:"\e66a"}.awsui-iconfont-xia:before{content:"\e69a"}.awsui-iconfont-zuo:before{content:"\e6c1"}.awsui-iconfont-my-help:before{content:"\e60a"}.awsui-iconfont-iconfontsanxingdianhover:before{content:"\e667"}.awsui-iconfont-wenjianjia:before{content:"\e632"}.awsui-iconfont-qunzu:before{content:"\e663"}.awsui-iconfont-biaoji:before{content:"\e8e1"}.awsui-iconfont-icon_share:before{content:"\e647"}.awsui-iconfont-setting:before{content:"\e605"}.awsui-iconfont-shang2:before{content:"\e627"}.awsui-iconfont-xia-copy:before{content:"\e606"}.awsui-iconfont-daochu:before{content:"\e6d4"}.awsui-iconfont-wenjianjia1:before{content:"\e621"}.awsui-iconfont-yingyong:before{content:"\e614"}.awsui-iconfont-zuo1:before{content:"\e6f1"}.awsui-iconfont-shang3:before{content:"\e6f3"}.awsui-iconfont-shezhi:before{content:"\e693"}.awsui-iconfont-dunpai:before{content:"\e60b"}.awsui-iconfont-biaoji1:before{content:"\e6b4"}.awsui-iconfont-guanliyuan:before{content:"\e63c"}.awsui-iconfont-daoru:before{content:"\e653"}.awsui-iconfont-icons22:before{content:"\e655"}.awsui-iconfont-you:before{content:"\e6c2"}.awsui-iconfont-yaochi:before{content:"\e607"}.awsui-iconfont-zengjia:before{content:"\e643"}.awsui-iconfont-liuchengdingyi:before{content:"\e665"}.awsui-iconfont-left:before{content:"\e608"}.awsui-iconfont-yingyong1:before{content:"\e64f"}.awsui-iconfont-left1:before{content:"\e697"}.awsui-iconfont-bangzhu:before{content:"\e609"}.awsui-iconfont-info:before{content:"\e60c"}.awsui-iconfont-cunchu:before{content:"\e645"}.awsui-iconfont-wode:before{content:"\e6b8"}.awsui-iconfont-bianji:before{content:"\e622"}.awsui-iconfont-bianji1:before{content:"\e64c"}.awsui-iconfont-yingyong2:before{content:"\e60d"}.awsui-iconfont-wusousuoneirong:before{content:"\e698"}.awsui-iconfont-dunpai1:before{content:"\e60e"}.awsui-iconfont-liebiao:before{content:"\e670"}.CodeMirror{color:#666}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:transparent}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{font-size:12px;color:#666}.CodeMirror-wrap pre.CodeMirror-placeholder{font-size:12px!important;opacity:.5;color:#666!important;font-family:Helvetica Neue,Helvetica,Arial,sans-serif!important}.awsui-message__closebtn:focus{outline-width:0}.awsui-message{min-width:380px;box-sizing:border-box;border-radius:4px;background-color:#eff6ff;border:1px solid #dbecff;position:fixed;left:50%;top:20px;transform:translateX(-50%);transition:opacity .3s,transform .4s;overflow:hidden;padding:15px;display:flex;align-items:center;line-height:1}.awsui-message.is-center{justify-content:center}.awsui-message.is-closable .awsui-message__content{padding-right:16px}.awsui-message p{margin:0}.awsui-message--info .awsui-message__content{color:#4092f3}.awsui-message--success{background-color:#edfcf1;border-color:#d8f5df}.awsui-message--success .awsui-message__content{color:#67c23a}.awsui-message--warning{background-color:#fff4ea;border-color:#ffe9d5}.awsui-message--warning .awsui-message__content{color:#e6a23c}.awsui-message--error{background-color:#fff2f0;border-color:#ffe5e1}.awsui-message--error .awsui-message__content{color:#f73e27}.awsui-message__content{padding:0;font-size:14px;line-height:1.5}.awsui-message .awsui-iconfont{font-size:25px;margin-right:10px}.awsui-message--info .awsui-iconfont{color:#3983de}.awsui-message--success .awsui-iconfont{color:#0ca72d}.awsui-message--warning .awsui-iconfont{color:#ff9421}.awsui-message--error .awsui-iconfont{color:#f14f3a}.awsui-message__closebtn{position:absolute;top:50%;right:15px;transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px!important;margin-right:0!important}.awsui-message__closeBtn:hover{color:#909399}.awsui-message-fade-enter,.awsui-message-fade-leave-active{opacity:0;transform:translate(-50%,-100%)}.awsui-button[data-v-d4629d24]{display:inline-block;box-sizing:border-box;font-weight:400!important;padding:0 14px;height:28px;line-height:100%;margin:0 16px 0 0;font-size:13px;color:#666;text-align:center;vertical-align:middle;border:1px solid #e9e9e9;background-color:#fff;border-radius:2px;cursor:pointer;white-space:nowrap;transition:.1s;outline:none}.awsui-button .awsui-button-content[data-v-d4629d24]{display:flex;justify-content:center;align-items:center}.awsui-button .awsui-iconfont[data-v-d4629d24]{font-size:14px}.awsui-button[data-v-d4629d24]:focus,.awsui-button[data-v-d4629d24]:hover{color:#3383da;border-color:#c6e2ff;background-color:#ecf5ff}.awsui-button.is-plain[data-v-d4629d24]:focus,.awsui-button.is-plain[data-v-d4629d24]:hover{background:#fff;border-color:#c6e2ff;color:#3383da}.awsui-button.is-plain[data-v-d4629d24]:active{background:#fff;outline:0}.awsui-button.is-disabled[data-v-d4629d24],.awsui-button.is-disabled[data-v-d4629d24]:focus,.awsui-button.is-disabled[data-v-d4629d24]:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.awsui-button.is-disabled .awsui-button--text[data-v-d4629d24]{background-color:transparent}.awsui-button.is-disabled.is-plain[data-v-d4629d24],.awsui-button.is-disabled.is-plain[data-v-d4629d24]:focus,.awsui-button.is-disabled.is-plain[data-v-d4629d24]:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.awsui-button.is-round[data-v-d4629d24]{border-radius:20px}.awsui-button.is-circle[data-v-d4629d24]{border-radius:50%;padding:5px 6px}.awsui-button.is-square[data-v-d4629d24]{padding:5px 6px}.awsui-button.is-loading[data-v-d4629d24]{position:relative;pointer-events:none}.awsui-button .awsui-button--text[data-v-d4629d24]{padding-left:5px}.awsui-button--primary[data-v-d4629d24]{color:#fff;background-color:#3383da;border-color:#3383da}.awsui-button--primary[data-v-d4629d24]:focus,.awsui-button--primary[data-v-d4629d24]:hover{background:#49a9ee;border-color:#49a9ee;color:#fff}.awsui-button--primary.is-disabled[data-v-d4629d24],.awsui-button--primary.is-disabled[data-v-d4629d24]:active,.awsui-button--primary.is-disabled[data-v-d4629d24]:focus,.awsui-button--primary.is-disabled[data-v-d4629d24]:hover{color:#fff;background-color:#a0cfff;border-color:#a0cfff}.awsui-button--primary.is-plain[data-v-d4629d24]{color:#409eff;background:#ebf5ff;border-color:#b2d8ff}.awsui-button--primary.is-plain[data-v-d4629d24]:focus,.awsui-button--primary.is-plain[data-v-d4629d24]:hover{background:#409eff;border-color:#409eff;color:#fff}.awsui-button--primary.is-plain[data-v-d4629d24]:active{background:#398ee5;border-color:#398ee5;color:#fff;outline:0}.awsui-button--primary.is-plain.is-disabled[data-v-d4629d24],.awsui-button--primary.is-plain.is-disabled[data-v-d4629d24]:active,.awsui-button--primary.is-plain.is-disabled[data-v-d4629d24]:focus,.awsui-button--primary.is-plain.is-disabled[data-v-d4629d24]:hover{color:#8cc4ff;background-color:#ecf5ff;border-color:#d9ecff}.awsui-button--success[data-v-d4629d24]{color:#fff;background-color:#009b52;border-color:#009b52}.awsui-button--success[data-v-d4629d24]:focus,.awsui-button--success[data-v-d4629d24]:hover{background:#38ab75;border-color:#38ab75;color:#fff}.awsui-button--success.is-disabled[data-v-d4629d24],.awsui-button--success.is-disabled[data-v-d4629d24]:active,.awsui-button--success.is-disabled[data-v-d4629d24]:focus,.awsui-button--success.is-disabled[data-v-d4629d24]:hover{color:#fff;background-color:#b3e19c;border-color:#b3e19c}.awsui-button--success.is-plain[data-v-d4629d24]{color:#67c23a;background:#eff8eb;border-color:#c2e6b0}.awsui-button--success.is-plain[data-v-d4629d24]:focus,.awsui-button--success.is-plain[data-v-d4629d24]:hover{background:#67c23a;border-color:#67c23a;color:#fff}.awsui-button--success.is-plain[data-v-d4629d24]:active{background:#5cae34;border-color:#5cae34;color:#fff;outline:0}.awsui-button--success.is-plain.is-disabled[data-v-d4629d24],.awsui-button--success.is-plain.is-disabled[data-v-d4629d24]:active,.awsui-button--success.is-plain.is-disabled[data-v-d4629d24]:focus,.awsui-button--success.is-plain.is-disabled[data-v-d4629d24]:hover{color:#a3da88;background-color:#eff8eb;border-color:#e0f2d7}.awsui-button--warning[data-v-d4629d24]{color:#fff;background-color:#ff9421;border-color:#ff9421}.awsui-button--warning[data-v-d4629d24]:focus,.awsui-button--warning[data-v-d4629d24]:hover{background:#fba447;border-color:#fba447;color:#fff}.awsui-button--warning.is-disabled[data-v-d4629d24],.awsui-button--warning.is-disabled[data-v-d4629d24]:active,.awsui-button--warning.is-disabled[data-v-d4629d24]:focus,.awsui-button--warning.is-disabled[data-v-d4629d24]:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.awsui-button--warning.is-plain[data-v-d4629d24]{color:#e6a23c;background:#fcf5eb;border-color:#f5d9b1}.awsui-button--warning.is-plain[data-v-d4629d24]:focus,.awsui-button--warning.is-plain[data-v-d4629d24]:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.awsui-button--warning.is-plain[data-v-d4629d24]:active{background:#cf9136;border-color:#cf9136;color:#fff;outline:0}.awsui-button--warning.is-plain.is-disabled[data-v-d4629d24],.awsui-button--warning.is-plain.is-disabled[data-v-d4629d24]:active,.awsui-button--warning.is-plain.is-disabled[data-v-d4629d24]:focus,.awsui-button--warning.is-plain.is-disabled[data-v-d4629d24]:hover{color:#f0c78a;background-color:#fcf5eb;border-color:#faecd8}.awsui-button--danger[data-v-d4629d24]{color:#fff;background-color:#dc4f39;border-color:#dc4f39}.awsui-button--danger[data-v-d4629d24]:focus,.awsui-button--danger[data-v-d4629d24]:hover{background:#de6d5b;border-color:#de6d5b;color:#fff}.awsui-button--danger.is-disabled[data-v-d4629d24],.awsui-button--danger.is-disabled[data-v-d4629d24]:active,.awsui-button--danger.is-disabled[data-v-d4629d24]:focus,.awsui-button--danger.is-disabled[data-v-d4629d24]:hover{color:#fff;background-color:#fab5b5;border-color:#fab5b5}.awsui-button--danger.is-plain[data-v-d4629d24]{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.awsui-button--danger.is-plain[data-v-d4629d24]:focus,.awsui-button--danger.is-plain[data-v-d4629d24]:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.awsui-button--danger.is-plain[data-v-d4629d24]:active{background:#dc6161;border-color:#dc6161;color:#fff;outline:0}.awsui-button--danger.is-plain.is-disabled[data-v-d4629d24],.awsui-button--danger.is-plain.is-disabled[data-v-d4629d24]:active,.awsui-button--danger.is-plain.is-disabled[data-v-d4629d24]:focus,.awsui-button--danger.is-plain.is-disabled[data-v-d4629d24]:hover{color:#f9a6a6;background-color:#fef0f0;border-color:#fde1e1}.awsui-button--info[data-v-d4629d24]{color:#fff;background-color:#909399;border-color:#909399}.awsui-button--info[data-v-d4629d24]:focus,.awsui-button--info[data-v-d4629d24]:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.awsui-button--info.is-disabled[data-v-d4629d24],.awsui-button--info.is-disabled[data-v-d4629d24]:active,.awsui-button--info.is-disabled[data-v-d4629d24]:focus,.awsui-button--info.is-disabled[data-v-d4629d24]:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.awsui-button--info.is-plain[data-v-d4629d24]{color:#909399;background:#f3f4f4;border-color:#d2d3d6}.awsui-button--info.is-plain[data-v-d4629d24]:focus,.awsui-button--info.is-plain[data-v-d4629d24]:hover{background:#909399;border-color:#909399;color:#fff}.awsui-button--info.is-plain[data-v-d4629d24]:active{background:#818489;border-color:#818489;color:#fff;outline:0}.awsui-button--info.is-plain.is-disabled[data-v-d4629d24],.awsui-button--info.is-plain.is-disabled[data-v-d4629d24]:active,.awsui-button--info.is-plain.is-disabled[data-v-d4629d24]:focus,.awsui-button--info.is-plain.is-disabled[data-v-d4629d24]:hover{color:#bcbec1;background-color:#f3f4f4;border-color:#e8e9ea}.awsui-button--text.is-disabled[data-v-d4629d24],.awsui-button--text.is-disabled[data-v-d4629d24]:focus,.awsui-button--text.is-disabled[data-v-d4629d24]:hover,.awsui-button--text[data-v-d4629d24],.awsui-button--text[data-v-d4629d24]:active{border-color:transparent}.awsui-button--large[data-v-d4629d24]{padding:0 16px;height:32px;font-size:13px}.awsui-button--large .awsui-iconfont[data-v-d4629d24]{font-size:16px}.awsui-button--large .is-circle[data-v-d4629d24],.awsui-button--large .is-square[data-v-d4629d24]{padding:7px 8px}.awsui-button--small[data-v-d4629d24]{padding:0 12px;height:24px;font-size:11px}.awsui-button--small .awsui-iconfont[data-v-d4629d24]{font-size:12px}.awsui-button--small .is-circle[data-v-d4629d24],.awsui-button--small .is-square[data-v-d4629d24]{padding:3px 4px}.awsui-button--text[data-v-d4629d24]{color:#409eff;background:0 0;padding-left:0;padding-right:0}.awsui-button--text[data-v-d4629d24]:focus,.awsui-button--text[data-v-d4629d24]:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.awsui-button--text[data-v-d4629d24]:active{color:#208eff;background-color:transparent}.awsui-icon-loading[data-v-d4629d24]{-webkit-animation:rotating-data-v-d4629d24 2s linear infinite;animation:rotating-data-v-d4629d24 2s linear infinite}@-webkit-keyframes rotating-data-v-d4629d24{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes rotating-data-v-d4629d24{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.awsui-button-group{display:inline-block;vertical-align:middle;margin-right:12px}.awsui-button-group:after,.awsui-button-group:before{display:table}.awsui-button-group:after{clear:both}.awsui-button-group>.awsui-button{float:left;position:relative;margin:0}.awsui-button-group>.awsui-button.is-disabled{z-index:1}.awsui-button-group>.awsui-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.awsui-button-group>.awsui-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.awsui-button-group>.awsui-button:first-child:last-child{border-radius:4px}.awsui-button-group>.awsui-button:first-child:last-child.is-round{border-radius:20px}.awsui-button-group>.awsui-button:first-child:last-child.is-circle{border-radius:50%}.awsui-button-group>.awsui-button:not(:first-child):not(:last-child){border-radius:0}.awsui-button-group>.awsui-button.is-active,.awsui-button-group>.awsui-button:active,.awsui-button-group>.awsui-button:focus,.awsui-button-group>.awsui-button:hover{z-index:1}.awsui-button-group .awsui-button--danger:last-child,.awsui-button-group .awsui-button--danger:not(:first-child):not(:last-child),.awsui-button-group .awsui-button--info:last-child,.awsui-button-group .awsui-button--info:not(:first-child):not(:last-child),.awsui-button-group .awsui-button--primary:last-child,.awsui-button-group .awsui-button--primary:not(:first-child):not(:last-child),.awsui-button-group .awsui-button--success:last-child,.awsui-button-group .awsui-button--success:not(:first-child):not(:last-child),.awsui-button-group .awsui-button--warning:last-child,.awsui-button-group .awsui-button--warning:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5)}.awsui-button-group .awsui-button--danger:first-child,.awsui-button-group .awsui-button--danger:not(:first-child):not(:last-child),.awsui-button-group .awsui-button--info:first-child,.awsui-button-group .awsui-button--info:not(:first-child):not(:last-child),.awsui-button-group .awsui-button--primary:first-child,.awsui-button-group .awsui-button--primary:not(:first-child):not(:last-child),.awsui-button-group .awsui-button--success:first-child,.awsui-button-group .awsui-button--success:not(:first-child):not(:last-child),.awsui-button-group .awsui-button--warning:first-child,.awsui-button-group .awsui-button--warning:not(:first-child):not(:last-child){border-right-color:hsla(0,0%,100%,.5);border-right-width:0}.awsui-radio{margin-right:30px!important}.awsui-radio .el-radio__label{font-size:13px;font-weight:400!important}.awsui-radio .el-radio__inner{border:1px solid #e9e9e9;width:16px;height:16px}.awsui-radio-large .el-radio__inner{width:18px;height:18px}.awsui-radio-large .el-radio__label{font-size:14px}.awsui-radio-small .el-radio__inner{width:14px;height:14px}.awsui-radio-small .el-radio__label{font-size:12px}.awsui-radio-green .el-radio__input.is-checked .el-radio__inner{background-color:#009b52;border-color:#009b52}.awsui-radio-green .el-radio__input.is-checked+.el-radio__label{color:#009b52}.awsui-radio-orange .el-radio__input.is-checked .el-radio__inner{background-color:#ff9421;border-color:#ff9421}.awsui-radio-orange .el-radio__input.is-checked+.el-radio__label{color:#ff9421}.awsui-radio-red .el-radio__input.is-checked .el-radio__inner{background-color:#dc4f39;border-color:#dc4f39}.awsui-radio-red .el-radio__input.is-checked+.el-radio__label{color:#dc4f39}.el-radio__input.is-checked .el-radio__inner{border-color:#3383da;background:#3383da}.el-radio__input.is-checked+.el-radio__label{color:#3383da;font-weight:400}.el-radio__label{padding-left:6px}.awsui-checkbox .el-checkbox__label{font-size:13px}.awsui-checkbox .el-checkbox__inner{border:1px solid #e9e9e9;width:16px;height:16px;vertical-align:middle}.awsui-checkbox .el-checkbox__inner:after{height:8px;left:5px}.awsui-checkbox-large .el-checkbox__inner{width:18px;height:18px}.awsui-checkbox-large .el-checkbox__inner:after{height:10px;left:6px}.awsui-checkbox-large .el-checkbox__label{font-size:14px}.awsui-checkbox-small .el-checkbox__inner{width:14px;height:14px}.awsui-checkbox-small .el-checkbox__inner:after{height:6px;left:4px}.awsui-checkbox-small .el-checkbox__label{font-size:12px}.awsui-checkbox-green .el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#009b52;border-color:#009b52}.awsui-checkbox-green .el-checkbox__input.is-checked+.el-checkbox__label{color:#009b52}.awsui-checkbox-orange .el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#ff9421;border-color:#ff9421}.awsui-checkbox-orange .el-checkbox__input.is-checked+.el-checkbox__label{color:#ff9421}.awsui-checkbox-red .el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#dc4f39;border-color:#dc4f39}.awsui-checkbox-red .el-checkbox__input.is-checked+.el-checkbox__label{color:#dc4f39}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#3383da;border-color:#3383da}.el-checkbox__input.is-checked+.el-checkbox__label{color:#3383da}.el-checkbox,.el-checkbox__label{font-weight:400}.el-checkbox{color:#666}.el-checkbox,.el-checkbox:last-of-type{margin-right:20px}.wrapper[data-v-8434a23e]{position:relative}.awsui-label[data-v-8434a23e]{text-align:left;vertical-align:top;font-size:13px;color:#606266;line-height:28px;padding:0 12px 0 0;box-sizing:border-box;display:inline-block;position:relative}.awsui-required[data-v-8434a23e]{line-height:28px}.awsui-label[data-v-8434a23e]:before,.awsui-required[data-v-8434a23e]:before{content:"*";color:#f56c6c;vertical-align:middle;display:inline-block;position:absolute;left:-10px;top:3px}.awsui-input[data-v-8434a23e]{position:relative;display:inline-block;padding:4px 6px;width:100%;height:28px;cursor:text;font-size:12px;line-height:1.5;color:#666;background:#fff;border:1px solid #e9e9e9;border-radius:2px;transition:all .3s;box-sizing:border-box}.awsui-input[data-v-8434a23e]:focus,.awsui-input[data-v-8434a23e]:hover{border-color:#d2d2d2;outline:none}.awsui-input.is-disabled[data-v-8434a23e]{border:1px solid #e9e9e9;box-shadow:none;background:#f5f7fa;color:#666;cursor:not-allowed;opacity:.5}.awsui-input--large[data-v-8434a23e]{height:32px;padding:6px;font-size:13px}.awsui-input--small[data-v-8434a23e]{height:22px;padding:1px 6px;font-size:11px}.awsui-input--prefix .awsui-input[data-v-8434a23e]{padding-left:28px}.awsui-input--suffix .awsui-input[data-v-8434a23e]{padding-right:28px}.awsui-input-prefix[data-v-8434a23e],.awsui-input-suffix[data-v-8434a23e]{position:absolute;top:50%;transform:translateY(-50%);z-index:2;line-height:0}.awsui-input-prefix[data-v-8434a23e]{left:6px}.awsui-input-suffix[data-v-8434a23e]{right:6px}.awsui-input-clear[data-v-8434a23e]{color:#999;font-size:12px;cursor:pointer}.awsui-input-clear[data-v-8434a23e]:hover{color:#666}textarea.awsui-input[data-v-8434a23e]{min-height:60px;vertical-align:bottom;resize:none}.awsui-border-no-right[data-v-8434a23e]{border-right:0;border-bottom-right-radius:0;border-top-right-radius:0}.awsui-radius-no-left[data-v-8434a23e]{border-bottom-left-radius:0;border-top-left-radius:0}.awsui-input-group[data-v-8434a23e]{position:relative;display:table;width:100%}.awsui-input-group__append[data-v-8434a23e],.awsui-input-group__prepend[data-v-8434a23e]{padding:4px 6px;font-size:12px;line-height:1;text-align:center;background-color:#f8f8f8;border:1px solid #e9e9e9;border-radius:2px;position:relative;transition:all .3s;width:1px;white-space:nowrap;vertical-align:middle;display:table-cell}.awsui-input-group__prepend[data-v-8434a23e]{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.awsui-input-group--prepend .awsui-input[data-v-8434a23e],.awsui-input-group__append[data-v-8434a23e]{border-top-left-radius:0;border-bottom-left-radius:0}.awsui-input-group__append[data-v-8434a23e]{border-left:0}.awsui-input-group--append .awsui-input[data-v-8434a23e]{border-top-right-radius:0;border-bottom-right-radius:0}.awsui-iconfont[data-v-8434a23e]{color:#999}.awsui-iconfont[data-v-8434a23e]:hover{color:#666}.awsui-box-component[data-v-e0a0c7e8]{position:relative;display:inline-block;width:100%;min-height:10px}.awsui-input-number[data-v-e0a0c7e8]{position:relative;display:inline-block;padding:0 22px 0 6px;width:100%;height:28px;font-size:12px;line-height:1.5;color:#666;background:#fff;border:1px solid #e9e9e9;border-radius:2px;transition:all .3s;box-sizing:border-box;text-align:right}.awsui-input-number--large[data-v-e0a0c7e8]{padding:0 26px 0 6px;height:32px;font-size:13px}.awsui-input-number--small[data-v-e0a0c7e8]{padding:0 18px 0 6px;height:24px;font-size:11px}.awsui-input-number-arrow[data-v-e0a0c7e8]{cursor:pointer;border:1px solid #e9e9e9;width:18px;display:inline-block;background:#f6f6f6;position:absolute;right:0;top:0;height:28px;box-sizing:border-box;padding-top:1px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.awsui-input-number-arrow--large[data-v-e0a0c7e8]{width:22px;height:32px}.awsui-input-number-arrow--small[data-v-e0a0c7e8]{width:14px;height:24px}.awsui-input-number-arrow .awsui-iconfont[data-v-e0a0c7e8]{font-size:9px;float:left;line-height:13px;text-align:center;width:100%;color:#999}.awsui-input-number-arrow--large .awsui-iconfont[data-v-e0a0c7e8]{font-size:10px;line-height:15px}.awsui-input-number-arrow--small .awsui-iconfont[data-v-e0a0c7e8]{font-size:8px;line-height:11px}input[type=number][data-v-e0a0c7e8]{-moz-appearance:textfield}input[type=number][data-v-e0a0c7e8]::-webkit-inner-spin-button,input[type=number][data-v-e0a0c7e8]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.awsui-input-number[data-v-e0a0c7e8]:focus,.awsui-input-number[data-v-e0a0c7e8]:hover{border-color:#d2d2d2;outline:none}.awsui-select-label{position:absolute;border:0;z-index:1;left:7px;margin-top:2px;background:#fff;right:30px;line-height:25px;height:25px;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 37px);display:flex;align-items:center}.awsui-select-label .awsui-iconfont{font-size:14px}.awsui-select-label .awsui-select-right{position:relative;right:0}.awsui-select-label .date,.awsui-select-label .number,.awsui-select-label .text{display:inline-flex}.awsui-select-label .text .awsui-iconfont{color:#ff9421!important;font-size:15px}.awsui-select-label .number .awsui-iconfont{color:#009b52!important;font-size:15px}.awsui-select-label .date .awsui-iconfont{color:#3383da!important;font-size:15px}.awsui-select{width:100%}.awsui-select .el-tag{margin:2px 2px 2px 6px;padding:0 0 0 6px}.awsui-select .el-tag,.awsui-select .el-tag .el-select__tags-text{line-height:16px;white-space:nowrap;overflow:hidden;display:inline-block}.awsui-select .el-tag .el-select__tags-text{text-overflow:ellipsis;width:calc(100% - 15px);vertical-align:middle}.awsui-select .el-tag__close.el-icon-close{right:0}.awsui-select .el-input__inner{height:28px;line-height:28px;color:#666;background:#fff;border:1px solid #e9e9e9;border-radius:2px;padding-left:6px;font-size:12px;overflow:hidden;text-overflow:ellipsis}.awsui-select .el-select__tags .el-select__input{margin-left:6px}.awsui-select .el-input__icon{line-height:28px!important;vertical-align:middle;width:20px}.awsui-select--large .el-input__inner{height:32px;line-height:32px;font-size:13px}.awsui-select--large .el-input__icon{line-height:32px!important}.awsui-select--small .el-input__inner{height:24px;line-height:24px;font-size:11px}.awsui-select--small .el-input__icon{line-height:25px!important}.awsui-select .el-input.is-focus .el-input__inner{border-color:#d2d2d2}.awsui-border-no-right .el-input__inner{border-right:0;border-bottom-right-radius:0;border-top-right-radius:0}.awsui-radius-no-left .el-input__inner{border-bottom-left-radius:0;border-top-left-radius:0}.el-select .el-input__inner:focus{border-color:#3383da}.el-select:hover .el-input__inner{border-color:#e9e9e9}.el-select-dropdown__list{padding:1px 0}.el-select-dropdown{margin:5px auto!important;z-index:9999!important}.el-select-dropdown .el-scrollbar .el-scrollbar__wrap{margin-right:-17px;margin-bottom:-17px}.el-select-dropdown__item{font-size:12px;padding:0 16px;color:#666;height:30px;line-height:30px;display:flex}.el-select-dropdown__item span:first-child{display:inline-block;white-space:nowrap;width:100%;text-overflow:ellipsis;float:left;overflow:hidden}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#c5e0ff}.el-select-dropdown__item.selected{color:#3383da!important;font-weight:400}.el-tag.el-tag--info{border-color:#e9e9eb;color:#999;padding:0 0 0 4px}.el-select .el-tag__close.el-icon-close,.el-tag.el-tag--info{background-color:#f8f8f8}.el-tag.el-tag--info .el-tag__close{color:#999;font-weight:700}.el-tag.el-tag--info .el-tag__close:hover{color:#333;background-color:#f8f8f8;font-weight:700}.el-icon-circle-close:before{content:"\e6db"}.el-select-group__title{padding-top:5px;padding-left:10px;padding-bottom:2px;line-height:normal}.el-select-group__title .awsui-iconfont{font-size:12px}.el-select-group__wrap:not(:last-of-type){padding-bottom:4px}.el-select-group__wrap:not(:last-of-type):after{left:10px;right:10px;bottom:2px}.el-select-dropdown__item .awsui-iconfont{font-size:13px}.awsui-select-right{position:absolute;right:16px}.awsui-select-right .awsui-iconfont{font-size:14px}.awsui-select .el-input.is-disabled .el-input__inner{border:1px solid #e9e9e9;box-shadow:none;background:#f5f7fa;color:#666;cursor:not-allowed;opacity:.5}.awsui-select-option-item-label{width:100%;position:relative}.mdTypeIcon{display:inline-block;width:32px;height:20px;line-height:20px;font-size:12px;text-align:center;font-family:SimHei;font-style:normal;border-radius:3px;background-color:#e5f1ff;color:#76a4db}.awsui-cascader{width:100%}.awsui-cascader,.awsui-cascader .el-input{line-height:28px}.awsui-cascader .el-input .el-input__inner{height:28px;line-height:28px;color:#666;border:1px solid #e9e9e9;border-radius:2px;padding-left:6px;font-size:12px}.awsui-cascader--multiple .el-input .el-input__inner{height:24px;line-height:24px}.awsui-cascader .el-cascader__tags{bottom:0}.awsui-cascader .el-cascader__tags .el-cascader__search-input{font-size:12px;margin:0 0 0 6px;height:22px}.awsui-cascader .el-input .el-input__icon{line-height:30px;width:20px}.awsui-cascader--large .el-input{line-height:32px}.awsui-cascader--large .el-input .el-input__inner{height:32px;line-height:32px;font-size:13px}.awsui-cascader--large .el-input .el-input__icon{line-height:34px!important}.awsui-cascader--small .el-input{line-height:24px}.awsui-cascader--small .el-input .el-input__inner{height:24px;line-height:24px;font-size:11px}.awsui-cascader--small .el-input .el-input__icon{line-height:26px!important}.awsui-cascader .el-input.is-focus .el-input__inner{border-color:#d2d2d2}.awsui-cascader .el-input.is-disabled .el-input__inner{border:1px solid #e9e9e9;box-shadow:none;background:#f5f7fa;color:#666;cursor:not-allowed;opacity:.5}.el-tag--small{height:19px;padding:0 6px;line-height:19px}.el-tag .el-icon-close{top:0}.el-cascader__tags .el-tag{margin:1px 0 1px 6px}.el-cascader-menu__list{padding:1px 0}.el-cascader-node{padding:0 6px;line-height:30px;height:30px}.el-cascader-menu:last-child .el-cascader-node{padding-right:6px}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#3383da;font-weight:400}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#c5e0ff}.el-cascader-node__prefix{position:absolute;display:none;left:6px}.el-cascader-node__postfix{line-height:0}.el-cascader-panel,.el-cascader__suggestion-list{font-size:12px}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#3383da}.el-cascader__dropdown{z-index:9999!important}.awsui-switch{height:28px;line-height:28px;min-width:40px}.awsui-switch .el-switch__core{height:20px;border-radius:10px;min-width:40px;border:0}.awsui-switch .el-switch__label *{font-size:12px}.awsui-switch .el-switch__core:after{height:15px;width:15px;z-index:2;top:2.5px;left:3px}.awsui-switch.is-checked .el-switch__core:after{margin-left:-18px}.awsui-switch-small{height:28px;line-height:28px}.awsui-switch-large .el-switch__core{height:28px;border-radius:14px;min-width:60px}.awsui-switch-large .el-switch__label *{font-size:14px}.awsui-switch-large .el-switch__core:after{height:23px;width:23px}.awsui-switch-large.is-checked .el-switch__core:after{margin-left:-26px}.awsui-switch-small{line-height:24px;height:24px}.awsui-switch-small .el-switch__core{height:24px;border-radius:12px;min-width:50px}.awsui-switch-small .el-switch__label *{font-size:13px}.awsui-switch-small .el-switch__core:after{height:19px;width:19px}.awsui-switch-small.is-checked .el-switch__core:after{margin-left:-22px}.awsui-switch-custom .el-switch__core{min-width:100%;height:100%;border-radius:100px}.awsui-switch-custom .el-switch__core:after{height:96%;width:50%}.awsui-switch.switchery{min-width:30px;border:none!important}.awsui-switch.switchery .el-switch__core{width:30px!important;min-width:30px;height:12px;box-shadow:inset 0 0 0 0 #bdc1c6;border-color:#bdc1c6!important;background-color:#bdc1c6!important;transition:border .1s ease 0s,box-shadow .1s ease 0s}.awsui-switch.switchery .el-switch__core:after{height:16px;width:16px;z-index:2;top:-2px;left:0;border-radius:100%;box-shadow:0 1px 3px rgba(0,0,0,.4)}.awsui-switch.switchery.is-checked .el-switch__core:after{left:100%;background-color:#1a73e8;margin-left:-16px}.awsui-switch.switchery.is-checked .el-switch__core{border-color:#409eff;background-color:#409eff;box-shadow:inset 0 0 0 6px #82b1ec;border-color:#82b1ec!important;background-color:#82b1ec!important;transition:border .1s ease 0s,box-shadow .1s ease 0s,background-color .3s ease 0s}.awsui-switch .el-switch__label{color:#999;display:flex;align-items:center}.awsui-switch .el-switch__label.is-active{color:#999}.awsui-switch.inner .el-switch__label--left,.awsui-switch.inner .el-switch__label--right{color:#fff;position:absolute;z-index:1;border-color:transparent!important;background-color:transparent!important}.awsui-switch.inner .el-switch__label--left{margin-right:5px;left:4px}.awsui-switch.inner .el-switch__label--right{margin-left:5px;right:4px}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{background-color:transparent}.awsui-slider .el-slider{width:calc(100% - 45px);display:inline-block;vertical-align:middle}.awsui-slider .text{width:45px;display:inline-block;text-align:center}.awsui-slider-red .el-slider__bar{background:#009b52}.awsui-slider-red .el-slider__button{border-color:#009b52}.awsui-slider-green .el-slider__bar{background:#dc4f39}.awsui-slider-green .el-slider__button{border-color:#dc4f39}.awsui-slider-orange .el-slider__bar{background:#ff9421}.awsui-slider-orange .el-slider__button{border-color:#ff9421}.awsui-colorPicker[data-v-d6ca73fa]{position:relative;text-align:left;font-size:14px;display:inline-block}.awsui-colorPicker input[data-v-d6ca73fa]{display:none}.colorBtn[data-v-d6ca73fa]{height:28px;width:28px;display:inline-block;line-height:28px;text-align:center;border:1px solid #e9e9e9;border-radius:4px;cursor:pointer}.colorBtn .awsui-iconfont[data-v-d6ca73fa]{color:#fff}.awsui-colorPicker--large[data-v-d6ca73fa]{width:32px;height:32px;line-height:32px}.awsui-colorPicker--small[data-v-d6ca73fa]{height:24px;width:24px;line-height:24px}.awsui-colorPicker .colorBtn.disabled[data-v-d6ca73fa]{cursor:no-drop;box-shadow:none;background:#f5f7fa;color:#666;cursor:not-allowed;opacity:.5}.awsui-colorPicker .awsui-colorPicker-box[data-v-d6ca73fa]{width:220px}.awsui-colorPicker .awsui-colorPicker-box h3[data-v-d6ca73fa]{margin:0;font-size:12px;font-weight:400;margin-top:10px;margin-bottom:5px;line-height:1;color:#999}.awsui-colorPicker .hd[data-v-d6ca73fa]{overflow:hidden;line-height:29px}.awsui-colorPicker .hd .colorView[data-v-d6ca73fa]{width:100px;height:30px;float:left;transition:background-color .3s ease;border:1px solid #e9e9e9;border-radius:2px;display:inline-flex;align-items:center}.awsui-colorPicker .hd .colorView .background[data-v-d6ca73fa]{height:16px;padding:0 8px;margin:0 6px 0 12px;display:inline-block;float:left}.awsui-colorPicker .hd .defaultColor[data-v-d6ca73fa]{width:80px;float:right;text-align:center;border:1px solid #e9e9e9;cursor:pointer;color:#666;border-radius:2px;font-size:12px}.awsui-colorPicker .tColor .tColor_li[data-v-d6ca73fa]{width:16px;height:16px;display:inline-block;margin:0 2px;transition:all .3s ease;border:1px solid #e9e9e9;border-radius:2px;white-space:normal!important}.awsui-colorPicker .tColor .tColor_li[data-v-d6ca73fa]:hover{box-shadow:0 0 5px rgba(0,0,0,.4);transform:scale(1.3)}.awsui-colorPicker .bColor .bColor_li[data-v-d6ca73fa]{width:18px;display:inline-block;margin:0 2px;white-space:normal!important}.awsui-colorPicker .bColor .bColor_li .bColor_li_li[data-v-d6ca73fa]{width:16px;height:16px;transition:all .3s ease;margin:0;border:1px solid #e9e9e9;border-radius:2px;display:inline-block;white-space:normal!important}.awsui-colorPicker .bColor .bColor_li .bColor_li_li[data-v-d6ca73fa]:hover{box-shadow:0 0 5px rgba(0,0,0,.4);transform:scale(1.3)}.awsui-colorPicker .hd .colorView .awsui-color-input{border:none}.el-popover.icon_picker_popover{box-sizing:border-box!important;padding-right:1px!important;padding-left:16px!important;width:325px!important}.awsui-icon-picker-box1[data-v-d232a082]{border-radius:50%}.awsui-icon-picker-box1[data-v-d232a082],.awsui-icon-picker-box2[data-v-d232a082]{cursor:pointer;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.awsui-icon-picker-box2[data-v-d232a082]{box-sizing:border-box;border:1px solid #e9e9e9}.picker-box[data-v-d232a082]{box-sizing:border-box;max-height:400px}.picker-title[data-v-d232a082]{font-size:16px;color:#333;margin:0 0 8px}.color-region[data-v-d232a082]{height:28px;margin:12px auto 10px}.color-item[data-v-d232a082]{display:flex;float:left;width:26px;height:26px;border-radius:50%;cursor:pointer;margin-right:7px;align-items:center;justify-content:center}.icon-region[data-v-d232a082]{max-height:200px;overflow-y:auto}.icon-item[data-v-d232a082]{box-sizing:border-box;display:flex;float:left;width:26px;height:26px;border-radius:50%;cursor:pointer;margin-right:7px;margin-bottom:7px;align-items:center;justify-content:center;background-color:#fff}.sign-c[data-v-d232a082]{font-size:16px;color:#fff}.sign-i[data-v-d232a082]{font-size:16px}.cm-s-aws-formula span.cm-meta{color:olive}.cm-s-aws-formula span.cm-number{color:#00f}.cm-s-aws-formula span.cm-keyword{line-height:1em;font-weight:700;color:#c6c}.cm-s-aws-formula span.cm-atom{font-weight:700;color:navy}.cm-s-aws-formula span.cm-param{font-weight:700;color:#00bfff;-webkit-text-decoration-line:underline;text-decoration-line:underline;-webkit-text-decoration-style:dashed;text-decoration-style:dashed}.cm-s-aws-formula span.cm-def,.cm-s-aws-formula span.cm-property,.cm-s-aws-formula span.cm-type,.cm-s-aws-formula span.cm-variable,.cm-s-aws-formula span.cm-variable-2,.cm-s-aws-formula span.cm-variable-3{color:#000}.cm-s-aws-formula span.cm-operator{color:red}.cm-s-aws-formula span.cm-comment{color:grey}.cm-s-aws-formula span.cm-string,.cm-s-aws-formula span.cm-string-2{color:green}.cm-s-aws-formula span.cm-qualifier{color:#555}.cm-s-aws-formula span.cm-error{color:red}.cm-s-aws-formula span.cm-attribute{color:#00f}.cm-s-aws-formula span.cm-tag{color:navy}.cm-s-aws-formula span.cm-link{color:#00f}.cm-s-aws-formula .CodeMirror-activeline-background{background:#fffae3}.cm-s-aws-formula span.cm-builtin{color:#30a}.cm-s-aws-formula span.cm-bracket{color:#c6c}.cm-s-aws-formula{font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif}.cm-s-aws-formula .CodeMirror-matchingbracket{background-color:#ccc;color:#c6c!important}.cm-s-aws-formula .CodeMirror-nonmatchingbracket{color:red!important;-webkit-text-decoration-line:underline;text-decoration-line:underline;-webkit-text-decoration-style:dashed;text-decoration-style:dashed}.CodeMirror-hints.aws-formula{font-family:Menlo,Monaco,Consolas,Courier New,monospace;color:#000;background-color:#fff!important}.CodeMirror-hints.aws-formula .CodeMirror-hint-active{background-color:#08f!important;color:#fff!important}.cm-field{display:inline-block;color:#fff;font-size:12px;font-family:Helvetica Neue,PingFang SC,Hiragino Sans GB,Arial,sans-serif;border-radius:2px;padding:0 5px;margin:1px}.cm-field.cm-field-common_field{color:#c60;background:#ffe6cc}.cm-field.cm-field-BOITEMNAME{color:#007fff;background:#cce5ff}.cm-field.cm-field-BOITEMNAME_PARAM{color:#099;background:#ccffe6}.cm-field.cm-field-text{color:#000;background:#fff}.cm-field.cm-field-source{color:#c60;background:#ffe6cc}.cm-field.cm-field-Company,.cm-field.cm-field-Department,.cm-field.cm-field-Role,.cm-field.cm-field-target,.cm-field.cm-field-Team,.cm-field.cm-field-User{color:#099;background:#ccffe6}.cm-field.cm-field-ccVar{color:#67c23a;background:#e1f3d8}.cm-s-aws-formula{border:1px solid #e9e9e9;border-radius:4px}.hidden{display:none}.CodeMirror-wrap pre.CodeMirror-line{word-break:break-all!important}.CodeMirror.disabled{background-color:#fafafa!important}.pre{line-height:17px!important}.CodeMirror.cm-s-aws-formula .CodeMirror-hscrollbar,.CodeMirror.cm-s-aws-formula .CodeMirror-vscrollbar{display:none!important}.cm-s-aws-formula.disabled{background-color:#fafafa}.CodeMirror-widget{line-height:16px}.CodeMirror-lines{padding:6px 0}code,pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}#functionDesc{color:#5e6d82}#functionDesc ul li{list-style:inside}.CodeMirror-gutters{border-right:0!important}.awsui-formula-btn-readonly[data-v-e1e83226]{cursor:no-drop!important}.awsui-formula{position:relative}div[name=AWS-Formula-Dialog] .awsui-dialog .awsui-dialog__body{flex:unset;flex-grow:1;padding:0;overflow:hidden}.awsui-formula .cm-s-aws-formula{border-radius:2px!important;line-height:28px;height:28px}.awsui-formula .awsui-codemirroe-disabled .cm-s-aws-formula{background:none}.awsui-formula .awsui-iconfont{position:absolute;right:5px;top:0;font-size:14px;line-height:28px;height:28px!important;z-index:300;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.awsui-formula .cm-s-aws-formula .CodeMirror-sizer{padding-right:24px}.awsui-formula .cm-s-aws-formula .CodeMirror-lines{padding:0}.awsui-formula .awsui-codemirroe-disabled .cm-s-aws-formula .CodeMirror-lines{cursor:not-allowed}.awsui-formula-component .awsui-dialog__wrapper .awsui-dialog__body{padding:0;overflow:hidden}.CodeMirror-hints.aws-formula{z-index:33333}@-webkit-keyframes vicp_progress-data-v-7dde4dbe{0%{background-position-y:0}to{background-position-y:40px}}@keyframes vicp_progress-data-v-7dde4dbe{0%{background-position-y:0}to{background-position-y:40px}}@-webkit-keyframes vicp-data-v-7dde4dbe{0%{opacity:0;transform:scale(0) translatey(-60px)}to{opacity:1;transform:scale(1) translatey(0)}}@keyframes vicp-data-v-7dde4dbe{0%{opacity:0;transform:scale(0) translatey(-60px)}to{opacity:1;transform:scale(1) translatey(0)}}.awsui-upload[data-v-7dde4dbe]{position:relative}.awsui-upload .vicp-close[data-v-7dde4dbe]{position:absolute;top:13px;right:13px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.awsui-upload .vicp-close .awsui-iconfont[data-v-7dde4dbe]{color:#666;font-size:14px}.awsui-upload .vicp-close:focus .awsui-iconfont[data-v-7dde4dbe],.awsui-upload .vicp-close:hover .awsui-iconfont[data-v-7dde4dbe]{color:#333}.awsui-upload .vicp-wrap[data-v-7dde4dbe]{position:relative;box-sizing:border-box;margin:auto;width:600px;height:300px;padding:25px;background-color:#fff;-webkit-animation:vicp-data-v-7dde4dbe .12s ease-in;animation:vicp-data-v-7dde4dbe .12s ease-in}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop[data-v-7dde4dbe]{overflow:hidden}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-left[data-v-7dde4dbe],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left[data-v-7dde4dbe]{float:left}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-left .vicp-img-container[data-v-7dde4dbe],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-img-container[data-v-7dde4dbe]{position:relative;display:block;width:240px;height:180px;background-color:#f8f8f8;overflow:hidden}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-left .vicp-img-container .vicp-img-default[data-v-7dde4dbe]{height:100%;width:100%;margin:0 auto;display:flex;justify-content:center;align-items:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-left .vicp-img-container .vicp-img-default .awsui-iconfont[data-v-7dde4dbe]{font-size:20px}.awsui-upload .vicp-wrap .vicp-crop .vicp-crop-left .vicp-img-info[data-v-7dde4dbe]{height:30px;line-height:30px;color:#999;text-align:center}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-img-container .vicp-img[data-v-7dde4dbe]{position:absolute;display:block;cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-img-container .vicp-img-shade[data-v-7dde4dbe]{box-shadow:0 2px 6px 0 rgba(0,0,0,.18);position:absolute;background-color:rgba(241,242,243,.8)}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-img-container .vicp-img-shade.vicp-img-shade-1[data-v-7dde4dbe]{top:0;left:0}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-img-container .vicp-img-shade.vicp-img-shade-2[data-v-7dde4dbe]{bottom:0;right:0}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-rotate[data-v-7dde4dbe]{position:relative;width:240px;height:18px}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-rotate i[data-v-7dde4dbe]{display:block;width:18px;height:18px;border-radius:100%;line-height:16px;text-align:left;font-size:16px;font-weight:700;background-color:rgba(0,0,0,.08);color:#fff;overflow:hidden}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-rotate i[data-v-7dde4dbe]:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.12);cursor:pointer;background-color:rgba(0,0,0,.14)}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-rotate i[data-v-7dde4dbe]:first-child{float:left}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-rotate i[data-v-7dde4dbe]:last-child{float:right}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range[data-v-7dde4dbe]{position:relative;margin:30px 0 10px 0;width:240px;height:18px}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon5[data-v-7dde4dbe],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon6[data-v-7dde4dbe]{position:absolute;top:0;width:18px;height:18px;border-radius:100%;background-color:rgba(0,0,0,.08)}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon5[data-v-7dde4dbe]:hover,.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon6[data-v-7dde4dbe]:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.12);cursor:pointer;background-color:rgba(0,0,0,.14)}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon5[data-v-7dde4dbe]{left:0}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon5[data-v-7dde4dbe]:before{position:absolute;content:"";display:block;left:3px;top:8px;width:12px;height:2px;background-color:#fff}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon6[data-v-7dde4dbe]{right:0}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon6[data-v-7dde4dbe]:before{position:absolute;content:"";display:block;left:3px;top:8px;width:12px;height:2px;background-color:#fff}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon6[data-v-7dde4dbe]:after{position:absolute;content:"";display:block;top:3px;left:8px;width:2px;height:12px;background-color:#fff}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]{display:block;padding-top:5px;margin:0 auto;width:180px;height:8px;vertical-align:top;background:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]:focus{outline:none}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]::-webkit-slider-thumb{box-shadow:0 2px 6px 0 rgba(0,0,0,.18);-webkit-appearance:none;appearance:none;margin-top:-3px;width:12px;height:12px;background-color:#3383da;border-radius:100%;border:none;-webkit-transition:.2s;transition:.2s}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]::-moz-range-thumb{box-shadow:0 2px 6px 0 rgba(0,0,0,.18);-moz-appearance:none;appearance:none;width:12px;height:12px;background-color:#3383da;border-radius:100%;border:none;-moz-transition:.2s;transition:.2s}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]::-ms-thumb{box-shadow:0 2px 6px 0 rgba(0,0,0,.18);appearance:none;width:12px;height:12px;background-color:#3383da;border:none;border-radius:100%;-ms-transition:.2s;transition:.2s}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]:active::-moz-range-thumb{box-shadow:0 1px 3px 0 rgba(0,0,0,.23);width:14px;height:14px}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]:active::-ms-thumb{box-shadow:0 1px 3px 0 rgba(0,0,0,.23);width:14px;height:14px}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]:active::-webkit-slider-thumb{box-shadow:0 1px 3px 0 rgba(0,0,0,.23);margin-top:-4px;width:14px;height:14px}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]::-webkit-slider-runnable-track{box-shadow:0 1px 3px 0 rgba(0,0,0,.12);width:100%;height:6px;cursor:pointer;border-radius:2px;border:none;background-color:#49a9ee}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]::-moz-range-track{box-shadow:0 1px 3px 0 rgba(0,0,0,.12);width:100%;height:6px;cursor:pointer;border-radius:2px;border:none;background-color:#49a9ee}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]::-ms-track{box-shadow:0 1px 3px 0 rgba(0,0,0,.12);width:100%;cursor:pointer;background-color:#49a9ee;border-color:transparent;color:transparent;height:6px;border-radius:2px;border:none}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]::-ms-fill-lower,.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]::-ms-fill-upper{background-color:#49a9ee}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]:focus::-webkit-slider-runnable-track{background-color:#49a9ee}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]:focus::-moz-range-track{background-color:#49a9ee}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]:focus::-ms-fill-lower,.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-7dde4dbe]:focus::-ms-fill-upper{background-color:#49a9ee}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-right[data-v-7dde4dbe],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right[data-v-7dde4dbe]{float:right}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-right .vicp-preview[data-v-7dde4dbe],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right .vicp-preview[data-v-7dde4dbe]{height:150px;overflow:hidden}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-right .vicp-preview .vicp-preview-item[data-v-7dde4dbe],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right .vicp-preview .vicp-preview-item[data-v-7dde4dbe]{position:relative;padding:5px;width:100px;height:100px;float:left;margin-right:16px;background:#f8f8f8}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-right .vicp-preview .vicp-preview-item.vicp-preview-item-circle[data-v-7dde4dbe]{border-radius:100%}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-right .vicp-preview span[data-v-7dde4dbe],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right .vicp-preview span[data-v-7dde4dbe]{font-size:13px;color:#333;display:block;text-align:left;height:30px;line-height:30px}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right .vicp-preview .vicp-preview-item img[data-v-7dde4dbe]{position:absolute;display:block;top:0;bottom:0;left:0;right:0;margin:auto;padding:3px;background-color:#fff;border:1px solid rgba(0,0,0,.15);overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right .vicp-preview .vicp-preview-item.vicp-preview-item-circle[data-v-7dde4dbe]{margin-right:0}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right .vicp-preview .vicp-preview-item.vicp-preview-item-circle img[data-v-7dde4dbe]{border-radius:100%}.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload[data-v-7dde4dbe]{position:relative;box-sizing:border-box;padding:35px;height:170px;background-color:rgba(0,0,0,.03);text-align:center;border:1px dashed #e9e9e9}.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-loading[data-v-7dde4dbe]{display:block;padding:15px;font-size:16px;color:#999;line-height:30px}.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-progress-wrap[data-v-7dde4dbe]{margin-top:12px;background-color:rgba(0,0,0,.08);border-radius:3px}.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-progress-wrap .vicp-progress[data-v-7dde4dbe]{position:relative;display:block;height:5px;border-radius:3px;background-color:#3383da;box-shadow:0 2px 6px 0 rgba(68,170,119,.3);transition:width .15s linear;background-image:linear-gradient(-45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent);background-size:40px 40px;-webkit-animation:vicp_progress-data-v-7dde4dbe .5s linear infinite;animation:vicp_progress-data-v-7dde4dbe .5s linear infinite}.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-progress-wrap .vicp-progress[data-v-7dde4dbe]:after{content:"";position:absolute;display:block;top:-3px;right:-3px;width:9px;height:9px;border:1px solid rgba(245,246,247,.7);box-shadow:0 1px 4px 0 rgba(68,170,119,.7);border-radius:100%;background-color:#3383da}.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-error[data-v-7dde4dbe],.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-success[data-v-7dde4dbe]{height:100px;line-height:100px}.awsui-upload .vicp-wrap .vicp-error[data-v-7dde4dbe],.awsui-upload .vicp-wrap .vicp-success[data-v-7dde4dbe]{display:block;font-size:14px;line-height:24px;height:24px;color:#d10;text-align:center;vertical-align:top}.awsui-upload .vicp-wrap .vicp-success[data-v-7dde4dbe]{color:#3383da}.awsui-upload .vicp-wrap .vicp-icon3[data-v-7dde4dbe]{position:relative;display:inline-block;width:20px;height:20px;top:4px}.awsui-upload .vicp-wrap .vicp-icon3[data-v-7dde4dbe]:after{position:absolute;top:3px;left:6px;width:6px;height:10px;border-width:0 2px 2px 0;border-color:#3383da;border-style:solid;transform:rotate(45deg);content:""}.awsui-upload .vicp-wrap .vicp-icon2[data-v-7dde4dbe]{position:relative;display:inline-block;width:20px;height:20px;top:4px}.awsui-upload .vicp-wrap .vicp-icon2[data-v-7dde4dbe]:after,.awsui-upload .vicp-wrap .vicp-icon2[data-v-7dde4dbe]:before{content:"";position:absolute;top:9px;left:4px;width:13px;height:2px;background-color:#d10;transform:rotate(45deg)}.awsui-upload .vicp-wrap .vicp-icon2[data-v-7dde4dbe]:after{transform:rotate(-45deg)}.e-ripple[data-v-7dde4dbe]{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transform:scale(0);opacity:1}.e-ripple.z-active[data-v-7dde4dbe]{opacity:0;transform:scale(2);transition:opacity 1.2s ease-out,transform .6s ease-out}@-webkit-keyframes vicp_progress-data-v-2344d3a1{0%{background-position-y:0}to{background-position-y:40px}}@keyframes vicp_progress-data-v-2344d3a1{0%{background-position-y:0}to{background-position-y:40px}}.awsui-upload[data-v-2344d3a1]{position:relative}.awsui-upload .vicp-close[data-v-2344d3a1]{position:absolute;top:13px;right:13px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.awsui-upload .vicp-close .awsui-iconfont[data-v-2344d3a1]{color:#666;font-size:14px}.awsui-upload .vicp-close:focus .awsui-iconfont[data-v-2344d3a1],.awsui-upload .vicp-close:hover .awsui-iconfont[data-v-2344d3a1]{color:#333}.awsui-upload .vicp-wrap[data-v-2344d3a1]{position:relative;box-sizing:border-box;margin:auto;width:600px;height:330px;padding:25px;background-color:#fff}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop[data-v-2344d3a1]{overflow:hidden}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-left[data-v-2344d3a1],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left[data-v-2344d3a1]{float:left}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-left .vicp-img-container[data-v-2344d3a1],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-img-container[data-v-2344d3a1]{position:relative;display:block;width:240px;height:180px;background-color:#f8f8f8;overflow:hidden}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-left .vicp-img-container .vicp-img-default[data-v-2344d3a1]{height:100%;width:100%;margin:0 auto;display:flex;justify-content:center;align-items:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-left .vicp-img-container .vicp-img-default .awsui-iconfont[data-v-2344d3a1]{font-size:20px}.awsui-upload .vicp-wrap .vicp-crop .vicp-crop-left .vicp-img-info[data-v-2344d3a1]{height:30px;line-height:30px;color:#999;text-align:center}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-img-container .vicp-img[data-v-2344d3a1]{position:absolute;display:block;cursor:move;max-width:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-img-container .vicp-img-shade[data-v-2344d3a1]{position:absolute;background-color:rgba(241,242,243,.8)}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-img-container .vicp-img-shade.vicp-img-shade-1[data-v-2344d3a1]{top:0;left:0}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-img-container .vicp-img-shade.vicp-img-shade-2[data-v-2344d3a1]{bottom:0;right:0}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-rotate[data-v-2344d3a1]{position:relative;width:240px;height:18px}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-rotate i[data-v-2344d3a1]{display:block;width:18px;height:18px;border-radius:100%;line-height:16px;text-align:left;font-size:16px;font-weight:700;background-color:rgba(0,0,0,.08);color:#fff;overflow:hidden}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-rotate i[data-v-2344d3a1]:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.12);cursor:pointer;background-color:rgba(0,0,0,.14)}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-rotate i[data-v-2344d3a1]:first-child{float:left}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-rotate i[data-v-2344d3a1]:last-child{float:right}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range[data-v-2344d3a1]{position:relative;margin:30px 0 10px 0;width:240px;height:18px}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon5[data-v-2344d3a1],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon6[data-v-2344d3a1]{position:absolute;top:0;width:18px;height:18px;border-radius:100%;background-color:rgba(0,0,0,.08)}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon5[data-v-2344d3a1]:hover,.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon6[data-v-2344d3a1]:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.12);cursor:pointer;background-color:rgba(0,0,0,.14)}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon5[data-v-2344d3a1]{left:0}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon5[data-v-2344d3a1]:before{position:absolute;content:"";display:block;left:3px;top:8px;width:12px;height:2px;background-color:#fff}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon6[data-v-2344d3a1]{right:0}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon6[data-v-2344d3a1]:before{position:absolute;content:"";display:block;left:3px;top:8px;width:12px;height:2px;background-color:#fff}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range .vicp-icon6[data-v-2344d3a1]:after{position:absolute;content:"";display:block;top:3px;left:8px;width:2px;height:12px;background-color:#fff}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]{display:block;padding-top:5px;margin:0 auto;width:180px;height:8px;vertical-align:top;background:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]:focus{outline:none}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]::-webkit-slider-thumb{box-shadow:0 2px 6px 0 rgba(0,0,0,.18);-webkit-appearance:none;appearance:none;margin-top:-3px;width:12px;height:12px;background-color:#3383da;border-radius:100%;border:none;-webkit-transition:.2s;transition:.2s}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]::-moz-range-thumb{box-shadow:0 2px 6px 0 rgba(0,0,0,.18);-moz-appearance:none;appearance:none;width:12px;height:12px;background-color:#3383da;border-radius:100%;border:none;-moz-transition:.2s;transition:.2s}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]::-ms-thumb{box-shadow:0 2px 6px 0 rgba(0,0,0,.18);appearance:none;width:12px;height:12px;background-color:#3383da;border:none;border-radius:100%;-ms-transition:.2s;transition:.2s}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]:active::-moz-range-thumb{box-shadow:0 1px 3px 0 rgba(0,0,0,.23);width:14px;height:14px}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]:active::-ms-thumb{box-shadow:0 1px 3px 0 rgba(0,0,0,.23);width:14px;height:14px}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]:active::-webkit-slider-thumb{box-shadow:0 1px 3px 0 rgba(0,0,0,.23);margin-top:-4px;width:14px;height:14px}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]::-webkit-slider-runnable-track{box-shadow:0 1px 3px 0 rgba(0,0,0,.12);width:100%;height:6px;cursor:pointer;border-radius:2px;border:none;background-color:#49a9ee}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]::-moz-range-track{box-shadow:0 1px 3px 0 rgba(0,0,0,.12);width:100%;height:6px;cursor:pointer;border-radius:2px;border:none;background-color:#49a9ee}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]::-ms-track{box-shadow:0 1px 3px 0 rgba(0,0,0,.12);width:100%;cursor:pointer;background-color:#49a9ee;border-color:transparent;color:transparent;height:6px;border-radius:2px;border:none}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]::-ms-fill-lower,.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]::-ms-fill-upper{background-color:#49a9ee}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]:focus::-webkit-slider-runnable-track{background-color:#49a9ee}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]:focus::-moz-range-track{background-color:#49a9ee}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]:focus::-ms-fill-lower,.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left .vicp-range input[type=range][data-v-2344d3a1]:focus::-ms-fill-upper{background-color:#49a9ee}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-right[data-v-2344d3a1],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right[data-v-2344d3a1]{float:right}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-right .vicp-preview[data-v-2344d3a1],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right .vicp-preview[data-v-2344d3a1]{height:150px;overflow:hidden}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-right .vicp-preview .vicp-preview-item[data-v-2344d3a1],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right .vicp-preview .vicp-preview-item[data-v-2344d3a1]{position:relative;padding:5px;width:100px;height:100px;float:left;margin-right:16px;background:#f8f8f8}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-right .vicp-preview .vicp-preview-item.vicp-preview-item-circle[data-v-2344d3a1]{border-radius:100%}.awsui-upload .vicp-wrap .vicp-step1 .vicp-crop .vicp-crop-right .vicp-preview span[data-v-2344d3a1],.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right .vicp-preview span[data-v-2344d3a1]{font-size:13px;color:#333;display:block;text-align:left;height:30px;line-height:30px}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right .vicp-preview .vicp-preview-item img[data-v-2344d3a1]{position:absolute;display:block;top:0;bottom:0;left:0;right:0;margin:auto;padding:3px;background-color:#fff;border:1px solid rgba(0,0,0,.15);overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right .vicp-preview .vicp-preview-item.vicp-preview-item-circle[data-v-2344d3a1]{margin-right:0}.awsui-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right .vicp-preview .vicp-preview-item.vicp-preview-item-circle img[data-v-2344d3a1]{border-radius:100%}.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload[data-v-2344d3a1]{position:relative;box-sizing:border-box;padding:35px;height:170px;background-color:rgba(0,0,0,.03);text-align:center;border:1px dashed #e9e9e9}.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-loading[data-v-2344d3a1]{display:block;padding:15px;font-size:16px;color:#999;line-height:30px}.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-progress-wrap[data-v-2344d3a1]{margin-top:12px;background-color:rgba(0,0,0,.08);border-radius:3px}.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-progress-wrap .vicp-progress[data-v-2344d3a1]{position:relative;display:block;height:5px;border-radius:3px;background-color:#3383da;box-shadow:0 2px 6px 0 rgba(68,170,119,.3);transition:width .15s linear;background-image:linear-gradient(-45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent);background-size:40px 40px;-webkit-animation:vicp_progress-data-v-2344d3a1 .5s linear infinite;animation:vicp_progress-data-v-2344d3a1 .5s linear infinite}.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-progress-wrap .vicp-progress[data-v-2344d3a1]:after{content:"";position:absolute;display:block;top:-3px;right:-3px;width:9px;height:9px;border:1px solid rgba(245,246,247,.7);box-shadow:0 1px 4px 0 rgba(68,170,119,.7);border-radius:100%;background-color:#3383da}.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-error[data-v-2344d3a1],.awsui-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-success[data-v-2344d3a1]{height:100px;line-height:100px}.awsui-upload .vicp-wrap .vicp-error[data-v-2344d3a1],.awsui-upload .vicp-wrap .vicp-success[data-v-2344d3a1]{display:block;font-size:14px;line-height:24px;height:24px;color:#d10;text-align:center;vertical-align:top}.awsui-upload .vicp-wrap .vicp-success[data-v-2344d3a1]{color:#3383da}.awsui-upload .vicp-wrap .vicp-icon3[data-v-2344d3a1]{position:relative;display:inline-block;width:20px;height:20px;top:4px}.awsui-upload .vicp-wrap .vicp-icon3[data-v-2344d3a1]:after{position:absolute;top:3px;left:6px;width:6px;height:10px;border-width:0 2px 2px 0;border-color:#3383da;border-style:solid;transform:rotate(45deg);content:""}.awsui-upload .vicp-wrap .vicp-icon2[data-v-2344d3a1]{position:relative;display:inline-block;width:20px;height:20px;top:4px}.awsui-upload .vicp-wrap .vicp-icon2[data-v-2344d3a1]:after,.awsui-upload .vicp-wrap .vicp-icon2[data-v-2344d3a1]:before{content:"";position:absolute;top:9px;left:4px;width:13px;height:2px;background-color:#d10;transform:rotate(45deg)}.awsui-upload .vicp-wrap .vicp-icon2[data-v-2344d3a1]:after{transform:rotate(-45deg)}.awsui-tree{position:relative;cursor:default;background:#fff;color:#6a6c73}.awsui-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.awsui-tree__empty-text{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:#a7a8ad;font-size:14px}.awsui-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#2460e0}.awsui-tree-node{white-space:nowrap;outline:0}.awsui-tree-node:focus>.awsui-tree-node__content{background-color:#f0f2f5}.awsui-tree-node.is-drop-inner>.awsui-tree-node__content .awsui-tree-node__label{background-color:#2460e0;color:#fff}.awsui-tree-node__content{display:flex;align-items:center;height:24px;cursor:pointer}.awsui-tree-node__content>.awsui-tree-node__expand-icon{padding:6px}.awsui-tree-node__content>label.awsui-checkbox{margin-right:8px}.awsui-tree-node__content:hover{background-color:#e0eeff}.awsui-tree.is-dragging .awsui-tree-node__content{cursor:move}.awsui-tree.is-dragging .awsui-tree-node__content *{pointer-events:none}.awsui-tree.is-dragging.is-drop-not-allow .awsui-tree-node__content{cursor:not-allowed}.awsui-tree-node__expand-icon{cursor:pointer;color:#c6c7ca;font-size:12px;transform:rotate(-90deg);transition:transform .3s ease-in-out}.awsui-tree-node__expand-icon.expanded{transform:rotate(0deg)}.awsui-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.awsui-tree-node__label{font-size:12px}.awsui-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c6c7ca}.awsui-tree-node>.awsui-tree-node__children{overflow:hidden;background-color:transparent}.awsui-tree-node.is-expanded>.awsui-tree-node__children{display:block}.awsui-tree--highlight-current .awsui-tree-node.is-current>.awsui-tree-node__content{background-color:#edf2fd}.awsui-tree-node__content .el-checkbox:last-of-type{margin-right:8px}.awsui-tree .awsui-tree-node__content .custom-tree-node{flex:1;display:flex;align-items:center;justify-content:space-between;font-size:12px;padding-right:8px}.awsui-tree .awsui-tree-node__content .custom-tree-node .custom-tree-btn{display:none}.awsui-tree .awsui-tree-node__content:hover .custom-tree-node .custom-tree-btn{display:block}.awsui-layout{display:flex;flex-direction:row;flex:1;flex-basis:auto;box-sizing:border-box;min-width:0}.awsui-layout.is-vertical{flex-direction:column}.awsui-header[data-v-5555ed76]{padding:0 20px}.awsui-aside[data-v-2c81d596],.awsui-header[data-v-5555ed76]{box-sizing:border-box;flex-shrink:0}.awsui-aside[data-v-2c81d596]{overflow:auto}.awsui-main[data-v-2a6a0f7c]{display:block;flex:1;flex-basis:auto;overflow:auto;box-sizing:border-box;padding:20px}.awsui-footer[data-v-49a58776]{padding:0 20px;box-sizing:border-box;flex-shrink:0}.awsui-form--inline .awsui-form-item,.awsui-form--inline .awsui-form-item__content{display:inline-block;vertical-align:top}.awsui-form-item:after,.awsui-form-item__content:after{clear:both}.awsui-form--label-left .awsui-form-item__label{text-align:left}.awsui-form--label-top .awsui-form-item__label,.awsui-form-item__label.awsui-form-item__positionTop{float:none;display:inline-block;text-align:left}.awsui-form--label-top .awsui-form-item{margin-bottom:10px}.awsui-form--inline .awsui-form-item{margin-right:10px}.awsui-form--inline .awsui-form-item__label{float:none;display:inline-block}.awsui-form--inline.awsui-form--label-top .awsui-form-item__content{display:block}.awsui-form-item:after,.awsui-form-item:before,.awsui-form-item__content:after,.awsui-form-item__content:before{display:table;content:""}.awsui-form-item{margin-bottom:15px}.awsui-form-item--mini.awsui-form-item,.awsui-form-item--small.awsui-form-item{margin-bottom:10px}.awsui-form-item .awsui-input__validateIcon{display:none}.awsui-form-item--large .awsui-form-item__content,.awsui-form-item--large .awsui-form-item__label{line-height:32px}.awsui-form-item--small .awsui-form-item__content,.awsui-form-item--small .awsui-form-item__label{line-height:24px}.awsui-form-item--small .awsui-form-item__error{padding-top:2px}.awsui-form-item--mini .awsui-form-item__error{padding-top:1px}.awsui-form-item__label-wrap{float:left}.awsui-form-item__label-wrap .awsui-form-item__label{display:inline-block;float:none}.awsui-form-item__label{text-align:left;vertical-align:middle;float:left;color:#606266;padding:0 10px 0 0;box-sizing:border-box;min-width:40px}.awsui-form-item__content,.awsui-form-item__label{font-size:13px;line-height:28px;position:relative}.awsui-form-item__content .awsui-input-group{vertical-align:top}.awsui-form-item.is-error{margin-bottom:30px}.awsui-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.awsui-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.awsui-form-item.is-required:not(.is-no-asterisk) .awsui-form-item__label-wrap>.awsui-form-item__label:before,.awsui-form-item.is-required:not(.is-no-asterisk)>.awsui-form-item__label:before{content:"*";color:#f56c6c;vertical-align:middle;position:absolute;left:-10px;top:3px}.awsui-form-item.is-error .awsui-input__inner,.awsui-form-item.is-error .awsui-input__inner:focus,.awsui-form-item.is-error .awsui-textarea__inner,.awsui-form-item.is-error .awsui-textarea__inner:focus{border-color:#f56c6c}.awsui-form-item.is-error .awsui-input-group__append .awsui-input__inner,.awsui-form-item.is-error .awsui-input-group__prepend .awsui-input__inner{border-color:transparent}.awsui-form-item.is-error .awsui-input__validateIcon{color:#f56c6c}.awsui-down-select,.awsui-form-item--feedback .awsui-input__validateIcon{display:inline-block}.awsui-down-select{vertical-align:middle}.awsui-down-select-bg-right{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAgCAYAAAAffCjxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFMmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTA5LTAyVDE2OjMzOjQ1KzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0wOS0wMlQxNzoxNDo0NCswODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wOS0wMlQxNzoxNDo0NCswODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjBjYmUwM2ExLWFjNTktZWM0OC05YTg5LTk0ZGI1YjYwY2FkMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4YTNmNDMyNy05ZDRiLTRkYjMtOTk3OS1mZmViODQwOTM1MTciIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjBjYmUwM2ExLWFjNTktZWM0OC05YTg5LTk0ZGI1YjYwY2FkMyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OGEzZjQzMjctOWQ0Yi00ZGIzLTk5NzktZmZlYjg0MDkzNTE3IiBzdEV2dDp3aGVuPSIyMDE5LTA5LTAyVDE2OjMzOjQ1KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Td9UVAAAAURJREFUSImtlr1KA0EUhY+LBAlWi00QEQvBTmz0AWwkja8h+AzWgilMbyU+gYWooCKWKlj5AHaKYiPEYMx8Fu7CdSDrzkwOXDi3mG9mF+6PAMevHDAAXoFrYAuYBFQnRLUGwBkwlwoqNQQOgawKVN42C7SBLvBYHPb1DCyMAo2KJnBQfJ5VH1gLAZWRA/ce7AtYCgWV0fVg70AjBiSg48FOYkECrjzYSixoCugZ0AOgTOHqS9o1+bKkfAKIYCmT9CmpUeSdmBdJkpN0a/J2LEiSjo2fTwFdGt+M/UeSNC3po0xSXvRHKaBF410KaN34Xgpo0/inFNCq8acxtSZgx9SaA2bGVrQxoItxtJE9DxLV2PY9SHCrzYE7DxLU/IPHUatIWsAG1QPyhYoBWUdD4Ih/RnaVvoFzai4R/lrzBtwA2wSsNT8Euvj7E0LdHgAAAABJRU5ErkJggg==);background-repeat:no-repeat;background-position-x:right;background-position-y:center}.awsui-down-select-bg-left{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAgCAYAAAAffCjxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF/2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTA5LTAyVDE2OjMzOjQ1KzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMC0yNFQxNDo0OTo0MSswODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMC0yNFQxNDo0OTo0MSswODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjBjYmUwM2ExLWFjNTktZWM0OC05YTg5LTk0ZGI1YjYwY2FkMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4NjRjMzk4OC01MmY2LTQzYmYtOWJmMS0xZWJjNDUwMWViNDgiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjBjYmUwM2ExLWFjNTktZWM0OC05YTg5LTk0ZGI1YjYwY2FkMyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OGEzZjQzMjctOWQ0Yi00ZGIzLTk5NzktZmZlYjg0MDkzNTE3IiBzdEV2dDp3aGVuPSIyMDE5LTA5LTAyVDE2OjMzOjQ1KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NGMzOTg4LTUyZjYtNDNiZi05YmYxLTFlYmM0NTAxZWI0OCIgc3RFdnQ6d2hlbj0iMjAxOS0xMC0yNFQxNDo0OTo0MSswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqGOc/YAAAFmSURBVEiJrZa/SsNQFMY/QxEpuBRBOgTpILiJiz6Ai7j4GoLP4CzUoe5O4hM4iP9FXAQVxEFwdXAQxUlKtbY/hzZ4vCZpctMPzvBdkl9OTk7OvQKUMUrAKnABvAJtoEtP3SyAEDjs35ioNEAA7ACdNECkkuJVk3QladJZ70p6lHQi6VjSvaRnSWFcJgtAy3lgG9gGyklv4C7MAF8O5BaoDKqlNaPAuwPZGgSIA+07kM2sEAuacyDneSAWdGcgTWAsLyiQVJE0az7xhqRWQlskC6ibbD7pNWKubKKMlg33ut90uRVImjJ+zwcSgcrGn/mCRgCMH5f04ZvRUBTob3Gni4Caxi8WAT0Zv1IEdGD8vC9IwAS/Qxxg3aezh/bTJo2RU19Q3GCr+4LiRm3DByTih/8NOYd/FEPZjqKoAS/8Vwd4oLe7LAHV/vXVtHQDYJeMW3aWQobAEfBdFBRFCVgDLoE3nGPND/ga9y8cdprvAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position-x:left;background-position-y:center}.awsui-down-select-border-left{border-top-left-radius:0!important;border-bottom-left-radius:0!important}.awsui-down-select-border-right{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.awsui-down-select-item__wrap{display:inline-block;border-radius:12px;background-color:#3383da;position:relative;padding-left:5px;padding-right:5px}.awsui-down-select-item__select{height:24px;line-height:24px;border:0;color:#fff;font-size:12px;vertical-align:top;cursor:pointer}.awsui-down-select-item__select-content{padding-right:20px;padding-left:10px;position:relative;overflow:hidden;text-overflow:ellipsis;text-align:center;white-space:nowrap}.awsui-down-select-item__list{position:absolute;overflow-y:auto;overflow-x:hidden;z-index:99999;border:none;box-shadow:0 0 30px rgba(31,31,31,.2);border-radius:4px;border:1px solid #e9e9e9;background-color:#fff;word-break:break-all}.awsui-down-select-item_option-item{color:#666;height:26px;line-height:26px;text-align:left;cursor:pointer;padding-right:20px;padding-left:12px;border-bottom:1px solid #f5f5f5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.awsui-down-select-item_option-item:hover,.hover{background-color:#f9f9f9;color:#5d84b1}.el-checkbox__label{font-size:12px!important;font-weight:400!important}.awsui-down-select-title{width:98%;height:24px;line-height:24px;color:#555;margin:0 auto;margin-bottom:5px;font-size:12px;border-bottom:1px solid #e9e9e9}.awsui-down-select-item__list .el-checkbox{width:30%!important;margin-right:0!important;margin-left:3%!important;margin-top:5px!important}.awsui-down-select-item__list .el-checkbox .el-checkbox__label{width:calc(100% - 24px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.prohibits{background-color:#eee!important}.prohibits,.prohibits .awsui-down-select-item__select{cursor:no-drop}.awsui-tabs__header{padding:0;position:relative;margin:0 0 15px}.awsui-tabs__active-bar{position:absolute;bottom:0;left:0;height:1.5px;background-color:#3080d9;z-index:1;transition:transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.awsui-tabs__new-tab{float:right;height:18px;width:18px;line-height:18px;margin:10px 0 0 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;transition:all .15s}.awsui-tabs__new-tab .awsui-iconfont{transform:scale(.8)}.awsui-tabs__new-tab:hover{color:#3080d9}.awsui-tabs__nav-wrap{overflow:hidden;position:relative;margin-bottom:-1px}.awsui-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#e4e8f3;z-index:1}.awsui-tabs__nav-wrap.is-scrollable{padding:0 20px;box-sizing:border-box}.awsui-tabs__nav-scroll{overflow:hidden}.awsui-tabs__nav-next,.awsui-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#a7a8ad}.awsui-tabs__nav-next{right:0}.awsui-tabs__nav-prev{left:0}.awsui-tabs__nav{white-space:nowrap;position:relative;transition:transform .3s;float:left;z-index:2}.awsui-tabs__nav.is-stretch{min-width:100%;display:flex}.awsui-tabs__nav.is-stretch>*{flex:1;text-align:center}.awsui-tabs__item{padding:0 15px;height:30px;box-sizing:border-box;line-height:30px;display:inline-block;list-style:none;font-size:13px;color:#666;position:relative}.awsui-tabs__item:focus,.awsui-tabs__item:focus:active{outline:none}.awsui-tabs__item:focus.is-active.is-focus:not(:active){box-shadow:inset 0 0 2px 2px #5d81f9;border-radius:3px}.awsui-tabs__item .awsui-icon-close{text-align:center;transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px;color:#999}.awsui-tabs__item .awsui-icon-close:before{transform:scale(.9);display:inline-block}.awsui-tabs__item .awsui-icon-close:hover{color:#3080d9}.awsui-tabs__item .awsui-iconfont{font-size:13px;line-height:28px;display:inline-flex;align-items:center}.awsui-tabs__item.is-active{color:#3080d9}.awsui-tabs__item:hover{color:#3080d9;cursor:pointer}.awsui-tabs__item.is-disabled{color:#c6c7ca;cursor:default}.awsui-tabs__content{overflow:hidden;position:relative}.awsui-tabs--card>.awsui-tabs__header{border-bottom:1px solid #e4e8f3}.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__nav-wrap:after{content:none}.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__nav{border:1px solid #e4e8f3;border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__active-bar{display:none}.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__item .awsui-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;transform-origin:100% 50%}.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e9e9e9;transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__item:first-child{border-left:none}.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__item.is-closable:hover .awsui-icon-close{width:14px}.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__item.is-active{border-bottom-color:#fff}.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__item.is-active.is-closable .awsui-icon-close{width:14px}.awsui-tabs--border-card{background:#fff;border:1px solid #e9e9e9;box-shadow:0 0 8px 0 rgba(232,237,250,.6),0 2px 4px 0 rgba(232,237,250,.5)}.awsui-tabs--border-card>.awsui-tabs__content{padding:15px}.awsui-tabs--border-card>.awsui-tabs__header{background-color:#f8f8f8;border-bottom:1px solid #e9e9e9;margin:0}.awsui-tabs--border-card>.awsui-tabs__header .awsui-tabs__nav-wrap:after{content:none}.awsui-tabs--border-card>.awsui-tabs__header .awsui-tabs__item{transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#a7a8ad}.awsui-tabs--border-card>.awsui-tabs__header .awsui-tabs__item+.awsui-tabs__item,.awsui-tabs--border-card>.awsui-tabs__header .awsui-tabs__item:first-child{margin-left:-1px}.awsui-tabs--border-card>.awsui-tabs__header .awsui-tabs__item.is-active{color:#3080d9;background-color:#fff;border-right-color:#e9e9e9;border-left-color:#dcdee6}.awsui-tabs--border-card>.awsui-tabs__header .awsui-tabs__item:not(.is-disabled):hover{color:#5d81f9}.awsui-tabs--border-card>.awsui-tabs__header .awsui-tabs__item.is-disabled{color:#c6c7ca}.awsui-tabs--border-card>.awsui-tabs__header .is-scrollable .awsui-tabs__item:first-child{margin-left:0}.awsui-tabs--bottom .awsui-tabs__item.is-bottom:nth-child(2),.awsui-tabs--bottom .awsui-tabs__item.is-top:nth-child(2),.awsui-tabs--top .awsui-tabs__item.is-bottom:nth-child(2),.awsui-tabs--top .awsui-tabs__item.is-top:nth-child(2){padding-left:0}.awsui-tabs--bottom .awsui-tabs__item.is-bottom:last-child,.awsui-tabs--bottom .awsui-tabs__item.is-top:last-child,.awsui-tabs--top .awsui-tabs__item.is-bottom:last-child,.awsui-tabs--top .awsui-tabs__item.is-top:last-child{padding-right:0}.awsui-tabs--bottom.awsui-tabs--border-card>.awsui-tabs__header .awsui-tabs__item:nth-child(2),.awsui-tabs--bottom.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__item:nth-child(2),.awsui-tabs--bottom .awsui-tabs--left>.awsui-tabs__header .awsui-tabs__item:nth-child(2),.awsui-tabs--bottom .awsui-tabs--right>.awsui-tabs__header .awsui-tabs__item:nth-child(2),.awsui-tabs--top.awsui-tabs--border-card>.awsui-tabs__header .awsui-tabs__item:nth-child(2),.awsui-tabs--top.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__item:nth-child(2),.awsui-tabs--top .awsui-tabs--left>.awsui-tabs__header .awsui-tabs__item:nth-child(2),.awsui-tabs--top .awsui-tabs--right>.awsui-tabs__header .awsui-tabs__item:nth-child(2){padding-left:20px}.awsui-tabs--bottom.awsui-tabs--border-card>.awsui-tabs__header .awsui-tabs__item:last-child,.awsui-tabs--bottom.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__item:last-child,.awsui-tabs--bottom .awsui-tabs--left>.awsui-tabs__header .awsui-tabs__item:last-child,.awsui-tabs--bottom .awsui-tabs--right>.awsui-tabs__header .awsui-tabs__item:last-child,.awsui-tabs--top.awsui-tabs--border-card>.awsui-tabs__header .awsui-tabs__item:last-child,.awsui-tabs--top.awsui-tabs--card>.awsui-tabs__header .awsui-tabs__item:last-child,.awsui-tabs--top .awsui-tabs--left>.awsui-tabs__header .awsui-tabs__item:last-child,.awsui-tabs--top .awsui-tabs--right>.awsui-tabs__header .awsui-tabs__item:last-child{padding-right:20px}.awsui-tabs--bottom .awsui-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.awsui-tabs--bottom.awsui-tabs--border-card .awsui-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdee6}.awsui-tabs--bottom.awsui-tabs--border-card .awsui-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.awsui-tabs--bottom.awsui-tabs--border-card .awsui-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.awsui-tabs--bottom.awsui-tabs--border-card .awsui-tabs__item.is-bottom{margin:0 -1px -1px}.awsui-tabs--left,.awsui-tabs--right{overflow:hidden}.awsui-tabs--left .awsui-tabs__header.is-left,.awsui-tabs--left .awsui-tabs__header.is-right,.awsui-tabs--left .awsui-tabs__nav-scroll,.awsui-tabs--left .awsui-tabs__nav-wrap.is-left,.awsui-tabs--left .awsui-tabs__nav-wrap.is-right,.awsui-tabs--right .awsui-tabs__header.is-left,.awsui-tabs--right .awsui-tabs__header.is-right,.awsui-tabs--right .awsui-tabs__nav-scroll,.awsui-tabs--right .awsui-tabs__nav-wrap.is-left,.awsui-tabs--right .awsui-tabs__nav-wrap.is-right{height:100%}.awsui-tabs--left .awsui-tabs__active-bar.is-left,.awsui-tabs--left .awsui-tabs__active-bar.is-right,.awsui-tabs--right .awsui-tabs__active-bar.is-left,.awsui-tabs--right .awsui-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.awsui-tabs--left .awsui-tabs__nav-wrap.is-left,.awsui-tabs--left .awsui-tabs__nav-wrap.is-right,.awsui-tabs--right .awsui-tabs__nav-wrap.is-left,.awsui-tabs--right .awsui-tabs__nav-wrap.is-right{margin-bottom:0}.awsui-tabs--left .awsui-tabs__nav-wrap.is-left>.awsui-tabs__nav-next,.awsui-tabs--left .awsui-tabs__nav-wrap.is-left>.awsui-tabs__nav-prev,.awsui-tabs--left .awsui-tabs__nav-wrap.is-right>.awsui-tabs__nav-next,.awsui-tabs--left .awsui-tabs__nav-wrap.is-right>.awsui-tabs__nav-prev,.awsui-tabs--right .awsui-tabs__nav-wrap.is-left>.awsui-tabs__nav-next,.awsui-tabs--right .awsui-tabs__nav-wrap.is-left>.awsui-tabs__nav-prev,.awsui-tabs--right .awsui-tabs__nav-wrap.is-right>.awsui-tabs__nav-next,.awsui-tabs--right .awsui-tabs__nav-wrap.is-right>.awsui-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.awsui-tabs--left .awsui-tabs__nav-wrap.is-left>.awsui-tabs__nav-next i,.awsui-tabs--left .awsui-tabs__nav-wrap.is-left>.awsui-tabs__nav-prev i,.awsui-tabs--left .awsui-tabs__nav-wrap.is-right>.awsui-tabs__nav-next i,.awsui-tabs--left .awsui-tabs__nav-wrap.is-right>.awsui-tabs__nav-prev i,.awsui-tabs--right .awsui-tabs__nav-wrap.is-left>.awsui-tabs__nav-next i,.awsui-tabs--right .awsui-tabs__nav-wrap.is-left>.awsui-tabs__nav-prev i,.awsui-tabs--right .awsui-tabs__nav-wrap.is-right>.awsui-tabs__nav-next i,.awsui-tabs--right .awsui-tabs__nav-wrap.is-right>.awsui-tabs__nav-prev i{transform:rotate(90deg)}.awsui-tabs--left .awsui-tabs__nav-wrap.is-left>.awsui-tabs__nav-prev,.awsui-tabs--left .awsui-tabs__nav-wrap.is-right>.awsui-tabs__nav-prev,.awsui-tabs--right .awsui-tabs__nav-wrap.is-left>.awsui-tabs__nav-prev,.awsui-tabs--right .awsui-tabs__nav-wrap.is-right>.awsui-tabs__nav-prev{left:auto;top:0}.awsui-tabs--left .awsui-tabs__nav-wrap.is-left>.awsui-tabs__nav-next,.awsui-tabs--left .awsui-tabs__nav-wrap.is-right>.awsui-tabs__nav-next,.awsui-tabs--right .awsui-tabs__nav-wrap.is-left>.awsui-tabs__nav-next,.awsui-tabs--right .awsui-tabs__nav-wrap.is-right>.awsui-tabs__nav-next{right:auto;bottom:0}.awsui-tabs--left .awsui-tabs__nav-wrap.is-left.is-scrollable,.awsui-tabs--left .awsui-tabs__nav-wrap.is-right.is-scrollable,.awsui-tabs--right .awsui-tabs__nav-wrap.is-left.is-scrollable,.awsui-tabs--right .awsui-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.awsui-tabs--left .awsui-tabs__nav-wrap.is-left:after,.awsui-tabs--left .awsui-tabs__nav-wrap.is-right:after,.awsui-tabs--right .awsui-tabs__nav-wrap.is-left:after,.awsui-tabs--right .awsui-tabs__nav-wrap.is-right:after{height:100%;width:1px;bottom:auto;top:0}.awsui-tabs--left .awsui-tabs__nav.is-left,.awsui-tabs--left .awsui-tabs__nav.is-right,.awsui-tabs--right .awsui-tabs__nav.is-left,.awsui-tabs--right .awsui-tabs__nav.is-right{float:none}.awsui-tabs--left .awsui-tabs__item.is-left,.awsui-tabs--left .awsui-tabs__item.is-right,.awsui-tabs--right .awsui-tabs__item.is-left,.awsui-tabs--right .awsui-tabs__item.is-right{display:block}.awsui-tabs--left .awsui-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.awsui-tabs--left .awsui-tabs__nav-wrap.is-left{margin-right:-1px}.awsui-tabs--left .awsui-tabs__active-bar.is-left,.awsui-tabs--left .awsui-tabs__nav-wrap.is-left:after{left:auto;right:0}.awsui-tabs--left .awsui-tabs__item.is-left{text-align:right}.awsui-tabs--left.awsui-tabs--card .awsui-tabs__active-bar.is-left{display:none}.awsui-tabs--left.awsui-tabs--card .awsui-tabs__item.is-left{border:1px solid #e9e9e9;border-bottom:none;border-left:none;text-align:left}.awsui-tabs--left.awsui-tabs--card .awsui-tabs__item.is-left:first-child{border-right:1px solid #e9e9e9;border-top:none}.awsui-tabs--left.awsui-tabs--card .awsui-tabs__item.is-left.is-active{border:none;border-top:1px solid #e9e9e9;border-right:1px solid #fff}.awsui-tabs--left.awsui-tabs--card .awsui-tabs__item.is-left.is-active:first-child{border-top:none}.awsui-tabs--left.awsui-tabs--card .awsui-tabs__item.is-left.is-active:last-child{border-bottom:none}.awsui-tabs--left.awsui-tabs--card .awsui-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e9e9e9;border-right:none}.awsui-tabs--left.awsui-tabs--card .awsui-tabs__new-tab{float:none}.awsui-tabs--left.awsui-tabs--border-card .awsui-tabs__header.is-left{border-right:1px solid #dfe4ed}.awsui-tabs--left.awsui-tabs--border-card .awsui-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.awsui-tabs--left.awsui-tabs--border-card .awsui-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.awsui-tabs--right .awsui-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.awsui-tabs--right .awsui-tabs__nav-wrap.is-right{margin-left:-1px}.awsui-tabs--right .awsui-tabs__nav-wrap.is-right:after{left:0;right:auto}.awsui-tabs--right .awsui-tabs__active-bar.is-right{left:0}.awsui-tabs--right.awsui-tabs--card .awsui-tabs__active-bar.is-right{display:none}.awsui-tabs--right.awsui-tabs--card .awsui-tabs__item.is-right{border-bottom:none;border-top:1px solid #e9e9e9}.awsui-tabs--right.awsui-tabs--card .awsui-tabs__item.is-right:first-child{border-left:1px solid #e9e9e9;border-top:none}.awsui-tabs--right.awsui-tabs--card .awsui-tabs__item.is-right.is-active{border:none;border-top:1px solid #e9e9e9;border-left:1px solid #fff}.awsui-tabs--right.awsui-tabs--card .awsui-tabs__item.is-right.is-active:first-child{border-top:none}.awsui-tabs--right.awsui-tabs--card .awsui-tabs__item.is-right.is-active:last-child{border-bottom:none}.awsui-tabs--right.awsui-tabs--card .awsui-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e9e9e9;border-left:none}.awsui-tabs--right.awsui-tabs--border-card .awsui-tabs__header.is-right{border-left:1px solid #dfe4ed}.awsui-tabs--right.awsui-tabs--border-card .awsui-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.awsui-tabs--right.awsui-tabs--border-card .awsui-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.awsui-message-box[data-v-ed5b8260]{display:inline-block;width:420px;padding:15px 0;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #ebeef5;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;-webkit-backface-visibility:hidden;backface-visibility:hidden}.awsui-message-box__wrapper[data-v-ed5b8260]{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.awsui-message-box__wrapper[data-v-ed5b8260]:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.awsui-message-box__header[data-v-ed5b8260]{position:relative;padding:0 15px}.awsui-message-box__title[data-v-ed5b8260]{padding-left:0;padding-right:10px;margin-bottom:0;line-height:1;font-size:16px;color:#333}.awsui-message-box__headerbtn[data-v-ed5b8260]{position:absolute;top:0;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:14px;cursor:pointer}.awsui-message-box__headerbtn .awsui-message-box__close[data-v-ed5b8260]{color:#666;font-size:14px}.awsui-message-box__headerbtn:focus .awsui-message-box__close[data-v-ed5b8260],.awsui-message-box__headerbtn:hover .awsui-message-box__close[data-v-ed5b8260]{color:#333}.awsui-message-box__content[data-v-ed5b8260]{padding:0 15px;color:#666;font-size:13px;margin:10px}.awsui-message-box__container[data-v-ed5b8260]{position:relative}.awsui-message-box__input[data-v-ed5b8260]{padding-top:15px}.awsui-message-box__input input.invalid[data-v-ed5b8260],.awsui-message-box__input input.invalid[data-v-ed5b8260]:focus{border-color:#f56c6c}.awsui-message-box__status[data-v-ed5b8260]{position:absolute;top:50%;transform:translateY(-50%);font-size:24px!important}.awsui-message-box__status[data-v-ed5b8260]:before{padding-left:1px}.awsui-message-box__status+.awsui-message-box__message[data-v-ed5b8260]{padding-left:36px;padding-right:12px}.awsui-message-box__status.awsui-icon-success[data-v-ed5b8260]{color:#0ca72d}.awsui-icon-success[data-v-ed5b8260]:before{content:"\ea71"}.awsui-message-box__status.awsui-icon-info[data-v-ed5b8260]{color:#3983de}.awsui-icon-info[data-v-ed5b8260]:before{content:"\e635"}.awsui-message-box__status.awsui-icon-warning[data-v-ed5b8260]{color:#ff9421}.awsui-icon-warning[data-v-ed5b8260]:before{content:"\e71c"}.awsui-message-box__status.awsui-icon-error[data-v-ed5b8260]{color:#f14f3a}.awsui-icon-error[data-v-ed5b8260]:before{content:"\e62f"}.awsui-message-box__message[data-v-ed5b8260]{margin:0}.awsui-message-box__message p[data-v-ed5b8260]{margin:0;line-height:24px}.awsui-message-box__errormsg[data-v-ed5b8260]{color:#f56c6c;font-size:12px;min-height:18px;margin-top:2px}.awsui-message-box__btns[data-v-ed5b8260]{padding:0 15px;text-align:center}.awsui-message-box__btns button[data-v-ed5b8260]:nth-child(2){margin:0 10px}.awsui-message-box__btns-reverse[data-v-ed5b8260]{flex-direction:row-reverse}.awsui-message-box--center[data-v-ed5b8260]{padding-bottom:30px}.awsui-message-box--center .awsui-message-box__header[data-v-ed5b8260]{padding-top:30px}.awsui-message-box--center .awsui-message-box__title[data-v-ed5b8260]{position:relative;display:flex;align-items:center;justify-content:center}.awsui-message-box--center .awsui-message-box__status[data-v-ed5b8260]{position:relative;top:auto;padding-right:5px;text-align:center;transform:translateY(-1px)}.awsui-message-box--center .awsui-message-box__message[data-v-ed5b8260]{margin-left:0}.awsui-message-box--center .awsui-message-box__btns[data-v-ed5b8260],.awsui-message-box--center .awsui-message-box__content[data-v-ed5b8260]{text-align:center}.awsui-message-box--center .awsui-message-box__content[data-v-ed5b8260]{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active[data-v-ed5b8260]{-webkit-animation:msgbox-fade-in-data-v-ed5b8260 .3s;animation:msgbox-fade-in-data-v-ed5b8260 .3s}.msgbox-fade-leave-active[data-v-ed5b8260]{-webkit-animation:msgbox-fade-out-data-v-ed5b8260 .3s;animation:msgbox-fade-out-data-v-ed5b8260 .3s}@-webkit-keyframes msgbox-fade-in-data-v-ed5b8260{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes msgbox-fade-in-data-v-ed5b8260{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes msgbox-fade-out-data-v-ed5b8260{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out-data-v-ed5b8260{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.awsui-dialog[data-v-a8aa50ee]{position:absolute;margin:0 auto!important;background:#fff;box-shadow:0 0 30px rgba(31,31,31,.2);border-radius:4px;border:1px solid #e9e9e9;box-sizing:border-box;width:50%;color:#666;left:50%;top:50%;transform:translate(-50%,-50%)}.awsui-dialog.is-fullscreen[data-v-a8aa50ee]{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.awsui-dialog__wrapper[data-v-a8aa50ee]{position:fixed;top:0;right:0;bottom:0;left:0;margin:0;overflow:auto}.awsui-dialog__header[data-v-a8aa50ee]{padding:16px 16px 10px}.awsui-dialog__headerbtn[data-v-a8aa50ee]{position:absolute;top:13px;right:13px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.awsui-dialog__headerbtn .awsui-dialog__close[data-v-a8aa50ee]{color:#666;font-size:14px}.awsui-dialog__headerbtn:focus .awsui-dialog__close[data-v-a8aa50ee],.awsui-dialog__headerbtn:hover .awsui-dialog__close[data-v-a8aa50ee]{color:#333}.awsui-dialog__title[data-v-a8aa50ee]{line-height:24px;font-size:16px;color:#333;margin-right:10px;display:inline-block}.awsui-dialog__body[data-v-a8aa50ee]{margin:0 16px 16px;color:#666;font-size:13px;word-break:break-all;border:1px solid #e9e9e9;padding:16px;overflow:auto}.awsui-dialog__footer[data-v-a8aa50ee]{padding:0 16px 16px;text-align:right;box-sizing:border-box}.awsui-dialog--center[data-v-a8aa50ee]{text-align:center}.awsui-dialog--center .awsui-dialog__body[data-v-a8aa50ee]{text-align:initial;padding:25px}.awsui-dialog--center .awsui-dialog__footer[data-v-a8aa50ee]{text-align:inherit}.dialog-fade-enter-active[data-v-a8aa50ee]{-webkit-animation:dialog-fade-in-data-v-a8aa50ee .3s;animation:dialog-fade-in-data-v-a8aa50ee .3s}.dialog-fade-leave-active[data-v-a8aa50ee]{-webkit-animation:dialog-fade-out-data-v-a8aa50ee .3s;animation:dialog-fade-out-data-v-a8aa50ee .3s}@-webkit-keyframes dialog-fade-in-data-v-a8aa50ee{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes dialog-fade-in-data-v-a8aa50ee{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes dialog-fade-out-data-v-a8aa50ee{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out-data-v-a8aa50ee{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.awsui-dialog__footer .dialog-footer .awsui-button:last-child{margin:0}.awsui-sidebar__wrapper[data-v-6e5ea5c2]{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0;box-shadow:0 0 15px #333}.awsui-sidebar[data-v-6e5ea5c2],.awsui-sidebar__body>[data-v-6e5ea5c2]{-webkit-box-sizing:border-box}.awsui-sidebar.btt[data-v-6e5ea5c2],.awsui-sidebar.ttb[data-v-6e5ea5c2],.awsui-sidebar__container[data-v-6e5ea5c2]{left:0;right:0;width:100%}@-webkit-keyframes awsui-sidebar-fade-in-data-v-6e5ea5c2{0%{opacity:0}to{opacity:1}}@keyframes awsui-sidebar-fade-in-data-v-6e5ea5c2{0%{opacity:0}to{opacity:1}}@-webkit-keyframes rtl-sidebar-in-data-v-6e5ea5c2{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes rtl-sidebar-in-data-v-6e5ea5c2{0%{transform:translate(100%)}to{transform:translate(0)}}@-webkit-keyframes rtl-sidebar-out-data-v-6e5ea5c2{0%{transform:translate(0)}to{transform:translate(100%)}}@keyframes rtl-sidebar-out-data-v-6e5ea5c2{0%{transform:translate(0)}to{transform:translate(100%)}}@-webkit-keyframes ltr-sidebar-in-data-v-6e5ea5c2{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes ltr-sidebar-in-data-v-6e5ea5c2{0%{transform:translate(-100%)}to{transform:translate(0)}}@-webkit-keyframes ltr-sidebar-out-data-v-6e5ea5c2{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes ltr-sidebar-out-data-v-6e5ea5c2{0%{transform:translate(0)}to{transform:translate(-100%)}}@-webkit-keyframes ttb-sidebar-in-data-v-6e5ea5c2{0%{transform:translateY(-100%)}to{transform:translate(0)}}@keyframes ttb-sidebar-in-data-v-6e5ea5c2{0%{transform:translateY(-100%)}to{transform:translate(0)}}@-webkit-keyframes ttb-sidebar-out-data-v-6e5ea5c2{0%{transform:translate(0)}to{transform:translateY(-100%)}}@keyframes ttb-sidebar-out-data-v-6e5ea5c2{0%{transform:translate(0)}to{transform:translateY(-100%)}}@-webkit-keyframes btt-sidebar-in-data-v-6e5ea5c2{0%{transform:translateY(100%)}to{transform:translate(0)}}@keyframes btt-sidebar-in-data-v-6e5ea5c2{0%{transform:translateY(100%)}to{transform:translate(0)}}@-webkit-keyframes btt-sidebar-out-data-v-6e5ea5c2{0%{transform:translate(0)}to{transform:translateY(100%)}}@keyframes btt-sidebar-out-data-v-6e5ea5c2{0%{transform:translate(0)}to{transform:translateY(100%)}}.awsui-sidebar[data-v-6e5ea5c2]{position:absolute;box-sizing:border-box;background-color:#fff;display:flex;flex-direction:column;box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);overflow:hidden}.awsui-sidebar.rtl[data-v-6e5ea5c2]{-webkit-animation:rtl-sidebar-out-data-v-6e5ea5c2 .3s;animation:rtl-sidebar-out-data-v-6e5ea5c2 .3s;right:0}.awsui-sidebar__open .awsui-sidebar.rtl[data-v-6e5ea5c2]{-webkit-animation:rtl-sidebar-in-data-v-6e5ea5c2 .3s 1ms;animation:rtl-sidebar-in-data-v-6e5ea5c2 .3s 1ms}.awsui-sidebar.ltr[data-v-6e5ea5c2]{-webkit-animation:ltr-sidebar-out-data-v-6e5ea5c2 .3s;animation:ltr-sidebar-out-data-v-6e5ea5c2 .3s;left:0}.awsui-sidebar__open .awsui-sidebar.ltr[data-v-6e5ea5c2]{-webkit-animation:ltr-sidebar-in-data-v-6e5ea5c2 .3s 1ms;animation:ltr-sidebar-in-data-v-6e5ea5c2 .3s 1ms}.awsui-sidebar.ttb[data-v-6e5ea5c2]{-webkit-animation:ttb-sidebar-out-data-v-6e5ea5c2 .3s;animation:ttb-sidebar-out-data-v-6e5ea5c2 .3s;top:0}.awsui-sidebar__open .awsui-sidebar.ttb[data-v-6e5ea5c2]{-webkit-animation:ttb-sidebar-in-data-v-6e5ea5c2 .3s 1ms;animation:ttb-sidebar-in-data-v-6e5ea5c2 .3s 1ms}.awsui-sidebar.btt[data-v-6e5ea5c2]{-webkit-animation:btt-sidebar-out-data-v-6e5ea5c2 .3s;animation:btt-sidebar-out-data-v-6e5ea5c2 .3s;bottom:0}.awsui-sidebar__open .awsui-sidebar.btt[data-v-6e5ea5c2]{-webkit-animation:btt-sidebar-in-data-v-6e5ea5c2 .3s 1ms;animation:btt-sidebar-in-data-v-6e5ea5c2 .3s 1ms}.awsui-sidebar__header[data-v-6e5ea5c2]{align-items:center;color:#666;display:flex;padding:16px;outline:none}.awsui-sidebar__header[data-v-6e5ea5c2]>:first-child{flex:1;outline:none}.awsui-sidebar__title[data-v-6e5ea5c2]{margin:0;flex:1;line-height:inherit;font-size:1rem}.awsui-sidebar__close-btn[data-v-6e5ea5c2]{border:none;cursor:pointer;font-size:18px;padding:0;color:inherit;background-color:transparent}.awsui-sidebar__body[data-v-6e5ea5c2]{flex:1;color:#666;position:relative}.awsui-sidebar__body>[data-v-6e5ea5c2]{box-sizing:border-box}.awsui-sidebar.ltr[data-v-6e5ea5c2],.awsui-sidebar.rtl[data-v-6e5ea5c2]{height:100%;top:0;bottom:0}.awsui-sidebar__container[data-v-6e5ea5c2]{position:relative;top:0;bottom:0;height:100%}.awsui-sidebar-fade-enter-active[data-v-6e5ea5c2]{-webkit-animation:awsui-sidebar-fade-in-data-v-6e5ea5c2 .3s;animation:awsui-sidebar-fade-in-data-v-6e5ea5c2 .3s}.awsui-sidebar-fade-leave-active[data-v-6e5ea5c2]{animation:awsui-sidebar-fade-in-data-v-6e5ea5c2 .3s reverse}[data-v-6e5ea5c2]:focus{outline:none}.awsui-backtop[data-v-80867440]{position:fixed;background-color:#fff;width:30px;height:30px;bottom:20px;right:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.awsui-backtop[data-v-80867440]:hover{background-color:#f2f6fc}.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,.5)}.cm-animate-fat-cursor,.cm-fat-cursor-mark{-webkit-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;background-color:#7e7}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36!important;color:#f8f8f2!important;border:none}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:thin solid #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:#fff}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-keyword,.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute,.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-type,.cm-s-dracula span.cm-variable-3{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.CodeMirror-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;height:auto;z-index:9}.CodeMirror-hints{position:absolute;z-index:10;overflow:hidden;list-style:none;margin:0;padding:2px;box-shadow:2px 3px 5px rgba(0,0,0,.2);border-radius:3px;border:1px solid silver;background:#fff;font-size:90%;font-family:monospace;max-height:20em;overflow-y:auto}.CodeMirror-hint{margin:0;padding:0 4px;border-radius:2px;white-space:pre;color:#000;cursor:pointer}li.CodeMirror-hint-active{background:#08f;color:#fff}.awsui-header[data-v-d8359e1e]{height:50px;background-color:#282828}.awsui-main[data-v-d8359e1e]{padding:0}.awsui-aside[data-v-d8359e1e]{background-color:#282828}.topDiv[data-v-d8359e1e]{top:0;height:32px;line-height:32px;background-color:#3f3f3f}.enlarge[data-v-d8359e1e],.topDiv[data-v-d8359e1e]{position:absolute;left:0;font-size:16px;width:26px;text-align:center;color:#d2d0d0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.enlarge[data-v-d8359e1e]{bottom:0;height:26px;line-height:26px}.el-collapse[data-v-d8359e1e]{position:absolute;top:0;right:0;background-color:#333;width:170px;border-top:none;border-bottom:none;height:100%;padding-left:10px;z-index:10}.awsui-main[data-v-d8359e1e] .el-collapse-item__header{background-color:#333;border-bottom:none;color:#d4d4d4!important;font-size:14px;height:30px;line-height:30px}.awsui-main[data-v-d8359e1e] .el-collapse-item__wrap{background-color:#333;border-bottom:none;color:#d4d4d4}.awsui-main[data-v-d8359e1e] .el-collapse-item__content{padding-bottom:0;color:#d4d4d4}.collapse-item[data-v-d8359e1e]{cursor:pointer;position:relative;font-size:13px;padding-left:24px;padding-bottom:1px;padding-top:1px}.active[data-v-d8359e1e]{color:#409eff}.spot[data-v-d8359e1e]{display:inline-block;border-radius:50%;width:4px;height:4px;background-color:#d4d4d4;position:absolute;top:50%;margin-top:-2px;left:8px}.activespot[data-v-d8359e1e]{background-color:#409eff}.help[data-v-d8359e1e]{position:absolute;top:50%;margin-top:-12px;right:10px;font-size:13px;cursor:help;color:#d4d4d4!important}.customCode[data-v-d8359e1e] .CodeMirror{font-family:none}.customCode[data-v-d8359e1e] .CodeMirror-placeholder{color:#666!important}.customCode[data-v-d8359e1e] .CodeMirror-cursor{height:18px!important}.el-message-box_custom .el-message-box__title{font-size:14px}.el-message-box_custom .el-message-box__content{font-size:13px}.awsui-address[data-v-e3bef0a4]{height:28px;box-sizing:border-box;border:1px solid #ccc;border-radius:2px;padding:1px 3px 1px;min-height:24px;background-color:#fff;position:relative;display:flex;align-content:center;align-items:center}.awsui-address .awsui-address-content[data-v-e3bef0a4]{display:inline-block;margin-right:33px}.awsui-address .awsui-address-content .awsui-address-item[data-v-e3bef0a4]{display:inline-block;font-size:13px;color:#333;height:19px;line-height:19px;margin:1px 3px 1px 0;background-color:#f8f8f8;border:1px solid #e9e9e9;border-radius:3px;padding:1px 0 1px 6px}.awsui-address .awsui-address-content .awsui-iconfont-ico[data-v-e3bef0a4]{font-size:13px}.awsui-address .awsui-address-content .awsui-item-value[data-v-e3bef0a4]{margin-right:4px;font-style:normal}.awsui-address .awsui-address-content .awsui-iconfont-close[data-v-e3bef0a4]{padding-right:4px;color:#999;font-size:12px;font-weight:700}.awsui-address .awsui-address-content .awsui-iconfont[data-v-e3bef0a4]:hover{color:#000;cursor:pointer}.awsui-address .awsui-address-ico[data-v-e3bef0a4]{display:inline-block;font-size:18px;cursor:pointer;height:100%;position:absolute;right:5px;display:flex;align-content:center;align-items:center}.awsui-address .awsui-address-ico .awsui-iconfont-del[data-v-e3bef0a4]{margin-right:3px;color:red;display:none}.awsui-address:hover .awsui-address-ico .awsui-iconfont-del[data-v-e3bef0a4]{display:inline-block}.awsui-address .awsui-address-ico .awsui-iconfont-add-ico[data-v-e3bef0a4]{color:#333}.awsui-address .awsui-dialog #iframeAddress[data-v-e3bef0a4]{height:400px}.inputIconClick .awsui-iconfont{color:#999}.inputIconClick .awsui-iconfont:hover{color:#666}.inputIconClick .awsui-iconfont-hasClick:hover{cursor:pointer}.app-info[data-v-e8df9950]{padding:10px}.app-info-title[data-v-e8df9950]{font-size:13px;color:#333;font-weight:700}.app-icon[data-v-e8df9950]{background:#009688;width:65px;height:65px;border-radius:50%;text-align:center;margin-right:10px;margin-top:5px}.app-icon i[data-v-e8df9950]{font-size:30px;line-height:65px;color:#fff}.app-img-div[data-v-e8df9950]{background:#f2f2f2;width:65px;height:65px;border-radius:50%;text-align:center;margin-right:10px;margin-top:5px}.app-img[data-v-e8df9950]{width:35px;margin-top:12px}.app-info-divider[data-v-e8df9950]{margin:5px 0}.app-name[data-v-e8df9950]{font-size:16px;color:#000}.txt-right[data-v-e8df9950]{text-align:right}.dev-collapse-title[data-v-e8df9950]{position:relative;width:100%}.dev-sec[data-v-e8df9950]{position:absolute;right:10px;top:1px;color:#999}.dev-item[data-v-e8df9950]{border-bottom:1px solid #f8f8f8;line-height:30px}.app-info[data-v-e8df9950] .el-collapse-item__header{height:30px;border:1px solid #ebeef5;border-top:0;padding-left:5px;background-color:#f9f9f9}.app-info[data-v-e8df9950] .el-collapse-item__wrap{border-bottom:0}.dev-ops[data-v-e8df9950] .el-card__header{padding:5px 5px}.dev-ops[data-v-e8df9950] .el-card,.el-message[data-v-e8df9950]{border-top-left-radius:0;border-top-right-radius:0;border-top:0}.dev-card[data-v-e8df9950] .el-collapse-item__content{padding-bottom:11px}.app-info[data-v-e8df9950] .el-table td,.el-table th[data-v-e8df9950]{padding:5px 0}.cc-dev-main[data-v-e8df9950]{padding:5px 10px}.cc-dev-main-card[data-v-e8df9950]{border:1px solid #ececec;padding:10px 10px;margin:10px 20px;border-radius:4px}.default-divider[data-v-e8df9950]{margin:6px 0}.manageTxt[data-v-e8df9950]{position:absolute;right:68px;color:#666}.manageSwitch[data-v-e8df9950]{position:absolute;right:0}.manageSwitch[data-v-e8df9950] .el-switch__label *{font-size:12px;width:38px}.manageSwitch[data-v-e8df9950] .el-switch__label{position:absolute;display:none;color:#fff}.manageSwitch[data-v-e8df9950] .el-switch__label--right{z-index:1;right:10px;top:0}.manageSwitch[data-v-e8df9950] .el-switch__label--left{z-index:1;left:19px;top:0}.manageSwitch[data-v-e8df9950] .el-switch__label.is-active{display:block}.el-switch .el-switch__label[data-v-e8df9950],.manageSwitch.el-switch[data-v-e8df9950] .el-switch__core{width:60px!important}.select-icon[data-v-9d9b4566]{color:#009688;padding-right:5px}.isStart[data-v-9d9b4566]{width:auto!important}.isH5[data-v-9d9b4566]{color:#ddd;position:absolute;right:0;float:right}[data-v-9d9b4566] .select-option{text-align:left}*{padding:0;margin:0}body{color:#4a4a4a;font-family:PingFangSC-Light}ul{list-style:none}a{text-decoration:none}button,div,i,section,span{-webkit-tap-highlight-color:transparent;outline:none}.radius3{border-radius:3px 3px 3px 3px}.tree-content-icon{font-size:13px}.tree-content-icon-padding{padding-right:2px}.el-input__inner,.el-textarea__inner{border-radius:0}.general-bgcolor-hover:hover,.general-bgcolor-text-hover:hover{background-color:#f5f7fa!important}.general-bgcolor-text-hover:hover{color:#4e7ff9!important}.general-dividing-line{color:#f2f2f2}.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#f5f7fa!important;color:#333!important}.el-menu-item:hover{color:#4e7ff9}.el-menu-item.is-active,.el-menu-item:hover,.el-submenu__title:hover{background-color:#f5f7fa!important}.el-menu-item.is-active{color:#4e7ff9}.text-general-color{color:#606266}.text-general-bgcolor{background-color:#606266}.text-second-color{color:#909399}.text-second-bgcolor{background-color:#909399}.text-linker-color{color:#4e7ff9}.text-linker-bgcolor{background-color:#4e7ff9}.text-important-color{color:#d9001b}.text-important-bgcolor{background-color:#d9001b}.el-link.el-link--primary{color:#4e7ff9}.table-head-text-color{color:#909399}.table-body-row-bgcolor:hover{background-color:#f5f7fa!important}.el-table td{border-bottom:1px solid #f2f2f2}.el-table-filter__bottom button:hover,.el-table th>.cell.highlight{color:#4e7ff9}.el-table .descending .sort-caret.descending{border-top-color:#4e7ff9}.el-table .ascending .sort-caret.ascending{border-bottom-color:#4e7ff9}.button-general-color{background-color:#4e7ff9!important;border-color:#4e7ff9!important}.button-general-color-reverse{border-color:#4e7ff9!important;color:#4e7ff9!important}.button-general-color2{background-color:#d9001b!important;border-color:#d9001b!important}.button-general-color-reverse2{border-color:#d9001b!important;color:#d9001b!important}.button-general-color3{background-color:#909399!important;border-color:#909399!important}.button-general-color-reverse3{border-color:#909399!important;color:#909399!important}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#4e7ff9;border-color:#4e7ff9}.el-checkbox__input.is-checked+.el-checkbox__label{color:#4e7ff9}.el-radio__input.is-checked .el-radio__inner{border-color:#4e7ff9;background:#4e7ff9}.el-radio__input.is-checked+.el-radio__label{color:#4e7ff9}.el-table__body tr.current-row>td,.li-general-hover-bgcolor:hover{background-color:#f5f7fa}.el-loading-spinner .path{stroke:#4e7ff9}.el-loading-spinner .el-loading-text{color:#4e7ff9}.el-select-dropdown__item.selected{color:#4e7ff9!important}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#4e7ff9}.el-step__title.is-process{color:#909399}.el-step__title.is-finish{color:#4e7ff9}.el-step__head.is-process{color:#909399;border-color:#909399}.el-step__head.is-finish{color:#4e7ff9;border-color:#4e7ff9}.el-popover__title{color:#606266;font-weight:600}.el-tree-node__content{height:30px}.el-tree-node__expand-icon{font-size:12px}.el-tree-node__content>.el-tree-node__expand-icon{padding:1px}.el-table__empty-text{font-size:12px}@font-face{font-family:iconfont;src:url(../fonts/iconfont.83929535.eot);src:url(../fonts/iconfont.83929535.eot#iefix) format("embedded-opentype"),url("data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAE9YAAsAAAAAm2AAAE8EAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCWXAqCgFSByBQBNgIkA4UAC4JCAAQgBYRtB48mGxR9F8a2pODdDiCp7ePdoiiNszIbEcHGQQjwhLL//89JOmKsscsNEDWr+ocUjDRcDSEXKu5hJho5pZCiTffQyawtjuKUD5icF62V3NwTN9PmXrgEBZErXKYpKpJh9EgRB61MKBiuYFtmrUVzw+/7ja4W2XsniXJ85e0PjnqiVUW+OAYTUl1w7JWfyA0xaTO1MH//7LfFrviB6alzVQ9fYdzCC5rtyJMIWCOde8QAE1RViqoKtUH4739t98+s4J5MEt1OhwYta+mbGqmQ+hsi3Wo2jYRks9lQWiANFJSahGYjpJCAlAAJtSSAiIBSPU1UqhU7YAHFgniHWBpBCZYrGjwsHSSWU08OxHL+n4Usv61fpqQXCnCWrt4XS1qxCaJ7Q4dys/+Z62T7TiMB3ncotP0mQqG2YprLzDW5KsGeIJGqIOsSORz//9pUe7WSzRwAOjtAJH2FAO7a7bQt7dtpDIH0VYQ2nyanHwCQS4b3EAJYZ9cACrTJe4DA4LPv793XYUglvAtNajYm9r/rETDfN1dVtZB3VdXdcMeElT/1LzEpCTJDDHrEuV2GzU/3b/VvSUiQkSTYrsMyzrqE5PeuAQQG6vcAgEDAHiB4/m+man0SKV3MRcuCnr+u9kAUTK7sA5TgNDgv5BEHMcOuunmDUHoS86+quQKi5aPtazpdSpeTKE++UoclvW3D/x+giI9PSPyAZAsAKQuU5BPIKwQoXVhcJF2jdI2+6OUptW61EKDoI6QrhOS7iNa9PEpOsVJKH0sblsx1WNK3rKszDFOGeQ8V7TiPcAEsa07eNgn1tAFKYUQ9TT790sHYz9jsAbddlB6L4hQV8YmA+GTxMzswuPRGYJHNek7EgClqpZa0DeyP4RYH4kfuGUMkWvurV59Hp4AaE0MUc16+fqFKJD1SAcWRSjKoEhRRxdULOUEiucOyquIF5XIlD+0GeL756Rd/eAURJeJS6T1ase8ZYUbA5JdSLg5bSi3uwalY3BFKYQjKUPq/dLjkP+wOD9mQguzbBVfyL6wzQ7lOihRbrlaDjXbpcsQJRpnnv4DNvKG/sXnj+Ib9hvvG403Sm5w3S9+UvVn7pvHN/jcH3vz5Fv/W7m3Q25K3a962vj07cWli/J/IyS9mJeUBAiBbS5/wDta6lcVms6WP3fAEA//VUrNwL8azVt8nLGADWoPYeeyCx170eIT/H+AB34466Mk5707a5JK91lpitkeTddVLb9v118ansxaabp7Tvj/cZ6iL3nbzrK39prh73I3Px4yw1dfXOx2w2eOZzpvjuhMmmKifI9YZrocWXwbZYYvFprk5wyijDbbBGGM9aHVIe9311UFHc3XS2Yf783XRoCzyUC6RylmpVlBU4m6uWaSnW3eerrbCFXsMsNubpd6PdMZlQ9w+bKoSe+OsMsnHUxpdLdDORn00afZ8vJXuvXz1YpdtChdXXbCGogKdWAcq7ySXfxfAd/BNIBwlGBwkWDwRHM4RPN4JASeJBTYRIi4REvYSS6wlZCwhFMwmMB4JFZMJgq6Ehl4ERW9Cx3Zihf7E+rixwSexxVlih4XEHtOJA+YRR5wmTi+UMRTwUJyxj7hgKGHiImHhrbA/tTh4Jly0Ja7YT9wwhczCXZmN48QdN8QDn2UOjpG5GEE8sZV44at447X4YCfxxQHih82Eh8fCx0wiwHnijzkkANdJIE6QoOMm+LiZh35kPo6QBVhHFmI4WYQeJAQtRIgvEopBRIQdRIwtRILFRIppJAw3RYYZRI5RJByjSQQGk8XYQCIxhkRhLInGA4lBK1HgEIlFexKH7iQefYkSHYgKHUkC5pJEdCJJ6EyS8UFScF9SMZ+koQtJRwOSgXokE2VI1meubJQjOahAclGJ5KEKycdAokY1okENUoBapBB1SBFKkWIsJ6W4RsqwiJSjJ1mOW1KLO9KAp7IRq8kOrCA7cYXswh7ShQHkCHaTE3gjRiwld/FeXmEk+Ywz5D9cJjMYwg86bvthjcP8sMFUfjhOSbFmmNgzTtxZJY+ZpKT5qOw5pZxp1NJZptJZoLJpp7WzUQ3TR43TpP3TrAPzXH9iPD/xWMlPO9zzMxAv/QyaVyqZF1ozu9Q623QWBf5cmllrHFf5G2lZqC44bH4t1oB/UMwAo2MO4F4JwLsEzEnjuMG2ClmlacVnO68wbQkAAHOEb8MaJ28TyJFjbq6wsqqkKhHlgfQibSSzyhAnhGpiA9EEYnlvqSJRb2uGBCNzQxJOSngeWgqRfzTD6gwnlwKCFEMmkQyA97PX2gBoIUkqRSbJatbkyCSxqkYxDDwHMKXPjpQYKePr9nQ7Hz28BMGPUa0qoiurS8fV1dBOKwVWyrGtxhv8tUQjQFhWhuCGza3z+hhCdXDQLHK1V0CqCFJueeZBbQxqwcdRTnEk6XOXr66urRhJLlJY69wUyNoVPG+JtQjjVfVeOC3SRFjHmYs1UnPyClZm01qJGe+Jk18x2BZdpI7mLo7IVOiLCqwWc7yaY6eqoJkqSyLPl+CxTQRluaGZ8MdjU8+HJRIy4ITM1oCQqJpBbtA4vsHyChNKam2yg4fmUYqCR0FliR/gbP3LOJ4IiGKp2g2JS8XvB2ep4JoeIBtwBUUG6zG8cNniNZUImLF5Bo5LJPZIXAhAu+MA4hyLmFUzGmBDpSsBhalLENLOaFgPsIp1t3A4EXoKd6lyuRnqAAphKlk91NGYnAbr/shYbSBh9dGDQc5y81VAOwIerN04jovZgyyreMMz/9iAH3tkB/zmZnfbZgS8B4rqmOSrBz4znyt7cZqPQgioL/8DV9ny33nQKUmyqfjd56xilr9jNfKY5rjKY1YVrJQZXEdEmsKSapjpCqaq1XHYM+hbGX8magx2FetKShZC43tMPJc0b0UxwQ866WzcRGAPoa85ftxU2YjV5lo93s9lexkEcWP37Hcq4XTY0ID2SmkFbSgGk0GOlPDnaRwv3ne4SBwA4mGI7T6pYQc5VY6BQ0oghMdCJ5ptEw8kF8cucQ5igDznSQ/5gnhBDQ6CyzJpTMwdxwBVAkCEbnfePAYxGOQDIHABE/aYxGFxTXrljENcDgWNFB80i0R2cuuROyXSBSDxSGADBlN/jrRLQUaObOLGRzKvGdkCXuJpFvRTp4yH3gMBhaUJITKCYYjHGmowNZHCAEkdaIKB1hjEVtBTIS5OuAH95QeEwOUPHWTci/ESGY/bIAL13cLaxkqlAmdBxm+YhR02IgV547A7LsdVV5PqnaTySlRxu20TgVcCS47oj5KWK4OR7F3M0daURLeKN2mHqaUZ4NSeL6slzYsbYvyiWljlY2vaAYkzrAsxUGgJFEyOJknXcET6vgi6UtbnvfGVwEfS5Z7SGYhhbmtmrSruaSz2mU6b+6dLRo1xLFAsYjAlfWOOOgMI02G+ghhu91PA7mURxS/oxb2MARKP08c4f5TtPVRlT/DiY+LxGfEY5Xz99j62pk2Ijc/GHzebWb6j/YJd4T+nl9Vf8qviV6xen2k26D3raoH6OeHu17TDmByLQeTURunjgnEj5uuipVxtjOm6zHZELaxSzKkP7VdcbdIj/GpYwVY2CFv7tL2J6jg3jQwvxaK251HFCdNaICg3Kq5NL3nfqXBWepBxS9blIoErT9J8RFEjfcMNDRglMq3LiCOv/Shlju98r28BU3s2HSS1a7Kb1K7gv1Q3HDgi4xm0dFCoPFNWDF8Oh8mwo2n7yglfaYqB8jT6SUAw9WOcG782CYNEACGG6r94pxC53aVEPj9MvVFm0tjku5wAUp8SdUQObbmGS1BGpA/9NJCizCPuLwjddDAatnqyN9+3NlI+uxB8LPVLpxy/6D1cZKrubGzXKJBvj0zprSYdE5FVix9ziRMIEPoYYhA4GFxeZhP88QG2zHIW1leTcVMnLssPnw+Nb6Ur2VER+ys68Ehf93f1ugUd0l8fiHrY1eFzt5PijvILUWjLetioNiesP4zzGSpOAgRbWWgDNrrGC+qlGwOUTtifrTArOqoL0PIwn023QfL9tgeSnjq6/kU872Rew0cI4qyrUEVGzaF2MAIh4GmzViNsz/wk5AFuKTxCleoLJkjHp/lmkA+4cdh05nEXoStGBAvw2o39K75TDUO0+TZ6YPFdaGfWEMAD3L79IS639H4Ax5aWhPGx4CxQZDi9vUIHj1p1N2jQ9ftOa+3MoC/I+4SRZLlAY3qRjcSJOGBabp2s3XPI5NWn5pAahw7St0X3WZZkMasVT8oOnT7HnGJrSSVtkNFER7C/paC4chaPFeTzzK+t+o0X6jJjbYUv955Cax1fqI7jhG02GtRsTr4/V5KUGxFohAnLcBYw3/golC72tCdh7be/L97H+ssfiqOtdzHewlsDUTXT8dVhyeyT2w1WBjd7HzuL/R8MbQ+/5C4N5hIdDUoTuqklDWUGKHwkdW6QyFrCvIBXKkUqd1MmD4mjKIVPIySFWP2U7KZIrPhobkzpoS3nHTh4VKu3qvSz2Kk1Pw+KvLyMy0zLrpDfFBEJ3CycarnAAdqTpk6yKpwOms8eo6XeP+j/57t/WffPURqYEqaHY5UqH5uovSeKpXdn8PDKMOMKgMVnEMTLb9QbsxfeDX7x2rqX7dIvc0TPSslVJsSREhqSPu9kL7zEt/hO31KgDH5U7p1kCz11IIaTiagSKqkMb97LRSu6DXUuG7I+G1kpgg1/FEVgACeBaA7HgjvwoRgRqLxkAlg7CQRQevtiFmO6iRNVThmItQFmDI2JlF4SzroMoutTakxUVikQUzjRFi8aFVOY+o9uLQykaxKiDakkZRD3uQsrLsO0g5ByMRDhSJ5TJAMLGx6paGbh9RK+h4VURVo0WIFrCyBpS5uYFexoBeWHkPEhTIPnAY8A4MPhdgrt8wcg0S8hGbedYY1HPOQhD3nTerfkpbwbVlZy7QV5or69mR4rd9L5xlL+WJVNHmZuDP4/lt1wq7jVToD/jeY0/z8NZpWwSPSyX+RFbmOAiOzJDnYDB/v8aMS8Q0yYm/abw8kAEufeBgJAakhlI8VOUSsuFO40yqZUdmNwDCQ6RgaLdBbh8lDrfyGZnyXw3FTeP6G2PeEkb42QT60kcvVjIu0ZjLgs3oWTMokOV8dFVl2GS+SClWDcYiMx0KefjoavXA0NfhunrAqmTjIbrwhWsxaEqanqGBjGud/X1KyL2U5S2uRvpkR4nMvFF85Tx1MTIRnA4JnlAIzBdMLPU1I8cWX2bJwOqjg/JxBGmXWwI/JRm2cPf4+vNUa5sI0PWjaCc189x6i3ZEmz2F5gmglWLE+Vxa9dUAySsAbm36xaugmNE6VimSWuc66H8JVyAMTETKdl23K9cNutKz6wV60C4aVlxJ0w/YNfP8lsUv+N3olA6LLAKjZfRpOl1+FvH8xHIt7EBYuviPiQdPb9Sh0uu2JP887X59XBj89U3E1Kv/VxBu8GFksggF0YQ4Xu5f7jDE2FUgdA3KKRWPZBgCGGExgiiI5ABBCYRAADrMCloi2AvsU5NpJcmc84kT2WgVkg5BHzUZXLYME+ge2e6PgwLe/87RciJq9EVLlZuGXtw98u+9/dYzQ789EdGR/NqcfIWcH9JK6aXYiYdtf9dA+jwwL7aKqF+hztiTUMWVd1FYDkDyKbiHfENQpTpgkLWf0MJlIUDw/hqDNvjSuPi8f2d40ymfUlvQZjPam9vfm7Plow4Hi7rAeaZDIaa/d9eIY9yeMsydpJEMs+iqWsOB+aKuNKNKwyOEtv1QObYfqftF6TlSdlFlv+Vr/7n3ZbpaZz0bRwlZO6lVpVMKSMxRvKauhKgZTOUonMdN1dp+9LXwTSELQQT/ln5XE7wG9zqL0PVxCGuvQ+jDxGF9+tS2tB/K56Qxxw5DKiDItyl9a9nFba70PS7zGpzy/qO8dJqrKoQ3kjI2yeI4TNHzFgOQt3/Y67lLJdtrj9Q043n8f1ueA9WF/7UUX0+cddor3ULmOlrRVlSPaBhGiALkZiJOdClAUwpWYQzI5rE6ai5nNPUZXKYBXmb0wz2CBs3G55deVXaWPXCrsSCV2tjXIHNTM9hOsthH2UqJ1rNCp9JphPCZSDqnXSSOo59XPKeUqkEEWMpQEv6M8gHteoSzqPssAgGu8k7gyuos5EXaNeJsYnUkSxeCHahDDKhDPSh24aYI5gMZdh70MOp0rY89jBfTgaB+yivZHERWFMBMtLQcF6oGeDiYWdSymEjftwO0UBJeomxD8J0kmzGyw9MnucEALKxUj6afiB0OiAhCGOI5ulXJTKHTVbXOVjpbaWr2yIYlGptGwEq1iNlDQ/Vq7Xyf7Xss10OaDOwaN81jLO41it5crCX4wkPnz05NKvBgRnO+QKKNTejjWXQHVXbflbG3sSzHbGPvyCqlSPlOC1lVnYGDcdzYQmAMyMTHVxqBun+sR0Pepq4+YB7Wo6V58dslpxfzQNELzVa4PSgKG5IdjUgN8YzA36Q97JJxjmAlGIHFzBu9CDn2VAvPWFhe8jgR3k1r5TDCSSQoQI2QJJy8UTeNOllHl1N0t6CL19xbttj1zb3jyQ4GHVonlwPzwibOmWr+Y20f4Yskh2HFHtShUw7xHcm+zZddm9uy/on3JMhjNoKixsmDt8CX8jq94RF++cuu2YNKmu5pxFPJch9wMpVQuNOmQCBuAhUMwCFjNwzw8nxMFhXQkpf/T9sDAajVfJ2HgwWt43RV7R43C2YoeSwtHcHXXPxoMwgnGhZpvfT00wIb6ZWENMSJ+JxgW6UiICNRJI8cQUgUE9DMwpvhyvA5b6J4mkR6m7j2fMDRqf5jhE9qK+6yshtkfCCfGJtC/MAaVur9VnvNyyn7JIEwfjmG7D9Wq5ABI5q8MLhImEMRE5ZwKlREB8S3DFNILGVGNctBmlfpncj/i47SrgPRmnDtKwL0ThvsPgEuN+YmDPpHvk2hzbsvNCICTx4GAbrrW0VgwqfSQAG3uYjjxEuy3mRx6C2CVHAHaIizHgeH/SG/LfH+oNPTvY6R1lbsg5xAzGhDVrjq6ICat5HFNe++inF3+6kcT1ENwBvL5CGFwx1GREfVCQRBnnf3z+6x/guEKWrn3QQj2+DuXA9Jsf/TS/FRmAMtCPpcsn3JH6MFq8eHlq7/DvZQqsKuOQxJXxgjECuJnhwaU/QVKQ/JorRZkM2uRm1+Totks+NMF1Jr0vAKQ0Pngrfe5EifJHmagNMoE0wP1MzjJVVVh1CjyrEWyZ3XaF1G1aTghzsptKGI3IgGOJFnAaAEW+fJssZGO1sDNFt0T2C5GbwnBKcqqO1b2C4hO3Z+uvtajOZjv9BT7f21Z3B4tiabj3raq7jMiSMVmzsbsuRGy/IxiL6Tw8usepr7ttm+iNvWb6n1NfMG3gen1ni+Vt+00xrWNFiHNnald2NMw0m9u1lPeV2IXvRHMjs/wm1M7tJEmd9LqYaObPxlWt7Obr2Ebme7thXl54Ge6MXg7j26k1Xqhnz0SVK/ntVzHzCuXCauQtzS8xOlPl8VEvcgVDbQnz8hGddYgsCITdFSIsRn3khUwvBnRIZBbRhHqVa+ZrgGx15FkEdUCoU0M0Nz+IZGIAAm6S6psNVhmDadsdu545pcerYoVIpkhJUbYH1SwmirF3zvXk6Wm3//2vAJCBIRePVbkoz3oaXFOAza+VsgYucgP/yZ06Sf0hihbfiee4dHFX3Z5XUmaTwYCQEi1JZhI/cpA2kYFNqFSw0J/AFKbWCSHIk2w9RZmIgprCOTRmBmClYFTKbdWtCEm4P5fG8AYg0biEM+AlKJRHx+1u2Eh/GBnKJUSSjGqIs2KQQZhmBaMSZbbAyz4WdwNsmLpO8+G1CE5Xl/nK2J61Z+I6K95YE6vjfP25fZFe3beFfZSVR97h+TeH2ZD0FJGLXfWhsF1vIQPNYbE5m2BVfr38LraWZMUPj3X/0N2/rP+f9/4dcOaytnWUfT72qrDso8TXieMuJZ6mgy4vYKPSxRA+2u2WLUP3fBRzOgy09dHPSFozTlxOokx8nJ87yG2+o+2J3ZlRPG5f4DdHGsnHysWXAYYvqtkRVDEU4NDW3Xr7uJdSaj9Kg8MAQW4g5JC9+n3o3gfuxsN3CwzTxUPwRf6iAjBlrzTQIKygf3zcdM9dD4PD8S/ofeb9n2z3A1WrPn7Q7ke2+5v3P0Fv1NBpI4aFmdIOGWeE0AIQoxD5zbvZRNc+zpEdblSXX33v83LWT9he4azmsa6kzi5w1DjBhboa5pjutdzQCyyEYi47xK11GNRWRELCdrPAfgRBDPCsIm/1GN95dKGHQjmAfjqUIhNf9Wohg/hXFa/LNqRoq5/yEhsrm2hi2cZaJrbeNIFcvTEMkMuYk/IRRjvvRZMKByiUHpQJ5hRlWs/K0BwVI4SCpksphbTyLEfobTBpXxYIaxygS3CYdgnTHFPVgZzO4hdNrhVhtncQGWzNTdxxtwelD3N20I8IBhL3zlBucE6B8eKTKL0UCzxZPIUzD0M00FeBSgGWFuIeeMOrCwy90IyB3hTMYBZLlcGKye5vb2lfdaw0yiqTxZcqheLM722GXjIF+yykEa2mqlz7SSubR6SrXWHqg7KoUncD50RGmE4H7Xf4p5M4ehF2rJqEJQNWUVXIVlSqpSxwipY3vLFCDI+QLwa6Cw8tbbHfXpufcVMTySXWswS6wu2DjcsP8kG7YhdJ5xdA5a3pzLU08KCJmuXtfgveLEsfToc8mVUdp8q28RxROC2HPWg1cr92e38peo+p5l/IPPyoUhBM4RYB623dYnDBXGoeCQA5EPoYwK/LGMQUlc0XZvG6+KRdKnJTDNmmn6LDiY2FUyxTVzQgpF6lVPGPa/LhK8/td9o3eZZ9o/ky7dBhB0/tWtdWLXdlzfAHyZPfzH+NgKbD8IBErAzXyInX58hW6N9Ym4gwGZSdvDXaW7brY9/jvAuBBwJ7zknG341KVEQOAbpbkr5jliA5qe1Xhy9lp8rSr1XB9SOhAlWSaVNlM92cf1xdlsg4bBKgFOIJ1VIoK/CVKrnmWf37M73Fxt8Sp5BtyRGO8LF4BBTHiKfCkktYtjqtPuPd3tmH6dtvMoEBor84bg+v9IIVf/gWxIJkPWBfLqpNr/+QLFAgIzXuL81doBkmBmJvroCuU+ln0d5ZgvehAx2z4FEJC4YNGXcFafeiC4KQ4ylblAVs3DKp7GKQxW3C2NK5OYf8kiJyYUjngSTW2Sv7yL6W4CYdBPL9qOwAbQtWgtvcHdk4+xpCvbmj03kjijOYIzolMrnZIY6iX+zgbf9dHYfrE7MbY3DtXNsMj7StQtEcjP6jLVJo9pmfm7h/t3aVP7EGOkDgaECUpafQvw6vQR8wAw0lCgMTCRYUMpkI/JBQUAoOERRp+ph4LDWygjDLqXi//9jBFNdLavRP2rVXM6nFN5S+8HJM2p3CLiq8zzhGecxAAfUsgpyNyWWIVcQhFpEu1A8KCJEoxVDMbnuRC2kLb6cjo6uemZ+txVlP6rxJVDhnwD42vVZ+/lXKa9NmV13nt0Tdk7BrZhDbYJFDBEsNaHHO7uIsaDbOnhO9kILQ6IypoL3lXpd0ujrJp6ii93UiI6VcOFCxYJZzFswgNA5unrWkeFdRQOu/ujkZxKJNl6cZXC83ECJJl8dGrElfNli1VJ8a/KLSyR59oyEpL5IYe+YJzgzRFSmDvKQZVq6gpYy9Yi2aNywi28zqyO/ni5t3oxMybDbVFs5buHQ/DLcfxKV0RLe1LtujwOK90NG1MSzew0IbH7MK4HeiDwDWFpRsmgfyYrSqOb8zOGkgToEwhTExq44JRg/xcMtUP3UbixreW1uoT8RWTImXSF3wtPicsYSJE4T1WqJDUl9RLnDqFgsfoRQRtvByG/6tvmbaAGC+zSpNrlY2LRlwHf/vwz4tB0tL5uMd8Ut6uPBPs/cv0R9bVqfEsMJVph+zePyP+LXQ7KleVmOrOiYwJTB6IqQ3SCss5U5kmW3qGL0AGYTQ0xJiXSVaC+JaxUB9OtDhszEx0x3bexE2ERIUkb5D6u0qX9TXXr+Hh3r599OUU//ci/W82LOE4n8bcZTsEaaVzitaIDozP1uL03MOSRBjt6cBimJx/z1wkzp+Skmhoe5a9DkjPygH+5w9howJ964rVghA0v8B9hL9BhPxCy/FhwEADwx4X7xKvyFMhIO5yJPLUHIckcjwQTpAEj0qcjKVtEQ731nj9puoIEuetYVPONzGDz23qN2kgptNmF9oWQy+W5N6Cp8P4/NYdDvJSnS8FRFRzhv4YWQCzT8bLzFv8QFt5j49XyewFdqYCqyms9lmdIwbTk3NTyOhizJrNLExRl3JjEm1cchaTOkz1pKG1aw2QGqOyPsDqTVtTLRHE3J52530mKl22wvpCA0whdmOA9srLkS58F1CGsHX4qN67jUn+TcayOxIupH8hrXdn66P/253rBb4tbn0xbTJPM9Ggwrt5X4T3SsBYwsfJ0rqOq+Vl39hrWizSlaoo7xzbb5M7rz2ntpDacvtQCupXslH0pXVJ/xTskYM72nddlj4yrH2VvAmrf3KozfyYqWZNk66bWhJ2LSfi88OSXkIAKAxNH/h7ZBIuHbr4yOL4cOrdeXFKEzXfraxBNOBWlj9WFnQ7ibrV+/8KYsGOn4ayk/EL/h8tBUZOH72d8JWHROHRrcNwr6K10iYIhBHmJbTb/5dd/WXfxd9XmmVRGZVc/jO/CcF2qWrYDe9BSsdxVLOjlDDmtSjfd5FVPoNCGIh2sAL3w9hOKqyzR2BsROoxt1OTdy330fbdS5UeQSfiYROIhqP5oxOGRU3b8vdNK5vHxEWutfv20kIOxSBkBuT38JgYWKXJePYbtTfEuuj06YatEkFv4QtW1Y1NmvS+GzW2KpV76ivtw59bRafrUuJiilmv5nyb5OAi5gHxSVU4Qvic6vLfGbVbLsbGibFY6Vhfr9EYtQaKAqKLtCwTPBxsb9JIZfb2ugJjDWJA3rm+0mlOFxYmPAmTkiJzwESKEqticSMWDUTqkGj3ZM9BvX8fIMNbg1mAUaHe7zlbLLe5AS8dMnKksltbHcpclbPV887ALBEtw/e5tglroDht5LdFRWugHUe2bV73u7G+W3v2xVkN7jkOgraDb5AIzh10w7ajfm3YJh3UfPVYCjSGD7cEOYQdVAnEbZq28AIzBeVB0oPmnwB37iIkc9gOHB0Vw0fzM7LTdN2bTfaC42oQf5nQUZt3GiLhrNBopVZjfbC1xh59R6ednNqcGdnVDSvbU9r6zKDRXzHbRSpd00mfR5oyX8s3lHxD+o8M/iLyqHmUNkjf42gcA6VA5MskGCJdKx9zBLMRmA6VeB1aLxBQeALFOBg5rWmQe2qjc5KZ2NDbMGpcGOgxaqFVpIVKYEVYmOpLUQbrOOJOg8X+2vWdygZJunpelLGQbsMaJq7yAYCnH+501CG3cHlJD2qJ321IWwjk47T9cSSJXN79JybDmkiugbKBAnof6gazaRX0Rf2VCnn8D8sJddGYUtqukuw946SS5i8A5Kqp+xFtEp6Br2S9i9NDdls4gDINM60aIKbLJg4E4nfS9KTVu0N5P62bRlXjsPxP94r38/E91uS+ktf6/r9Oa+J+izScVLMLll6dDHEgazjrtt1PfTjpO3N2ViPGihs+E/Uke/P2wdcXFAq5ARiR9I7OQEcf14Abz+dSo37BDlCwB9d17Sh2YHj2Lr/QLNj8/49rY4cx6a59Z7tTR1MB1I1gPlLY+yyxxFQbg4UoVHQNSOgx/HL6jvFThoncef/lz3+Y4HGTr6lxpLfWR+fxYAAqGFnDGgOuM9XlaTkl7stJVjU192JCpu3oPoZsEjJZ00VeDNZF2KsD6lrPHlmoO9s5yxsNC5qtCV4PElWLAnj4rlzxuZYh4VXFlQqkpOKksoqqjQNcoPCZL5nR+4Iu8baeXyOWGolcG2Xth16IJGp8yvCkhML5MuWV+QBml4om/5cFzIQtG7l+gEA1ml+46V5jQC9EaPgCqwkEr6Ap1AMn1LIZYmFmtWrKjQVZcsTC5LkKgvyw2SfIkbrTtTUNBSCSrkcN29scYQrji8N4/vzxWv4jK9cnlRUUFNbX1S5ogKVZX0Ydh0euTfK7XEd60aNrkbgN/QSQDMeMxD03mPKw3yse8rG6GnETXV3m83mgtOUAqaGcrqqOWi3k6tj4CxLmxU2lviljm7Ogbubqs5YJoH5vpgbNxYrnWX7ojxDUlQkYchc9smcJc4H1iiww1nKOq/G/8yNG8cYEsaPrSHl3knJPuVa77Lk5HIfbZlPA4NHjQ2gN8u8Q1KoSKhzKEJF/Jz9wHyA++P3CKVz2N61bxMXPjDMeW+YwNBqDLGLbK9LGENSWBiI+nf9r64ehpThNAFB4Gap16oy76Qk77LVARqctNWl3slJXk93r9INN/JzECtnKyRHswEd0RTC9sL84wDe9qs/UlEGSv2obnPgO7RFR6/4eFoV1+zAdUy/RUWp2gjkBadgdEQ7gjppyv6tkhpgbBhWj6/Jwjpmw8AoLKQGzSwnfqfoqZg0kPlOBwpoGTKlQnhF6JRGtRRtZ8EZLCrqpRNugeMvA5xY9Yx4A566rx2YDIUMAuE0tSEGofCKA2UwxLmGelo8KYgWawoIfmEmbLEsfFAR8vTtW9wqiXvNJkvCyTthvnuKl55ZHxlpQ4/Nk9X6iGtLSnz3hN0OHOHNrcvMylwlEVtjJNY/STIzMj3rePvQpaTdNVUhCeoqYfXuYhI76m2V3bRd1e9/COwb7T7YNZI/Ae3rb+xO5DzrzlBboCdN4KY/WpLt3Mz0/9nOs/oWG+G627FB8jSDHujiyLK0noUyckN8/NhsbDxXTAW+VrA9THdxoXL8IJZz9nyt9fX060bEDjcFnJPf5Op7e62CPLGWuAhrHv+X3qecJs5AdnYbyGPioCpa2ynbw9xLROhVrtX0B3QoPXQRda2qNIVMZttjSy8FIOQ6DquHO9ssBZZtnVLli9txr8D1uOZnM2bTrtB7Dti2t9u+fGDTBJsx4I0VeinY5qNHzWyF1zz/HOp/XxaWPn7p7MoQ8Y8e5YtxIDraUeXHxAywmzg3o2NK3kMwGatW/Qg6ODwDs/ZmgjtaqxubtdpqWfVfr8XPCdVxLb3hcdWWjKDXrx/9je0yPH4cRBdotWL6uqvZkXF/1XOaln9Y+6GqTgR2L68KF8vNO1hm30V/X1JcnlA8fXaa8Grf2GIgCwVddYHRKJgRwj2aonYXiVNPdGxMbLPpI8JFFlFdkdOIK3XR2Z0VjPBdBNSCvp/hRfDPfaeF96u0rDbjbcWw97DnmPfYRaDg2NPYfQG4VcE8+ikRawo7gJ1ikSoWVIqZiMjmiAHksySynWL2z/S1983Ymw/HxfdN2U/1xWv6zDBoSJ9degsEU6yAeAD0CEhfcTg+nvI+oZtvxa8MlZa+/zOksAJtQollg++XD4aGHpXqo/5166Td6RI3rWx/qHnLNGvpPNwxk6kbewxbsBa6AeAVUMCYOFvxIOmIooYdkt6dPyA5qo9VtweCSnQWjplLg96Sg7tsu4LJhm+oGgCz9jGOxcKp8HhACKssuOvIGdz0NA7CGYMQJh4P/+D5Jnz8qAQ8sGnBghd81KG5racR4AIQ0xsLMcn6wIB2D2dPqasI3yvpFRHc7Pm+iNwZc54vtfiR46Ni6iN0Ob8p2y3aqG0WzVQ+NYGjsRlrH1zCy01E2A9EJ0R418V5tsa5WSBtNjeVSqx54VJuA4V3y4Ezm7OmCJsJU1kix7abbCaJlPfMYYqSSJ6hFI9otTG3H1nPCDOEZ3Y6rZ3GTqlTv6wqw78Sv9cp7y1zZXZTdvKfwjwt31PmeJJnOsdNS7PXPwO5YXZTBHlu3xQZVPzPOOuf7sMNCAdxQHwo/2LZ1Br+dQsCxsSlOjBjkTWHD8Nuoz8yTju07pGfsCxq7S4Q4go70GodPWyc5Yr5iETDDiYuvO6eNur2fdjtz3VvdLRYpgOVNwIwIz0aWigE7r+1A3gTxfyLeK1xHofasEQhYIYYRlDYQH3trwAbKCgPGAwoReM9s/pZ/ZtCZtKIV+IvJhlWMxvPfMluEq7/Dybgc364uWlkCeMdlYd/vrbJ0Xa9/ZrZavek5lg/Xs3n9crZ5z/XgI+/bvq7df1JtTWFvdWG8RYIobPVn5vcDreNgJFjLtu3j24vgduZ55jtcElEybmS7eHbtsnlGwyYrDVqaqKOwm3/PQHbwfmn4V7LNcIVBIT+L2YjpnxPYwUk0T1NamxQGFSPDUsV43dGFVl8+SXLlmIlrAWlxKUpDQ7o97DvqENDybyE3YysWBkkhzIVziDggCu90XEWW7hSgeJrcfRZThoegKfJtRTz+5V9CIw88mI1zWqyGpQEBV2B8BV0L6smlrtTHBx8xao5GC9MEwjCgKw64o8Xo6rSpSmJZcUwHruqVJ22eyvD6t276Jn/eR74keG1Tk+StHYziRKi/nmsdM5IJ9L17z6RBohm0mKA8lHi4cv675/KR2fauzKSTx+gDyze+3xNAA81epBuTtRJS2+2EkmHC+skOn0bESUehy7a+cZeU6c3E5cKthHDZdOBm7FHTdLrgE5PPHjsSJo9QdKDX/azZrMOsbl1GWdlwYKhsFhuEW1lqfFg+0RXLjN2cbaKbh9NxUwst6l2Xpc9scIaBXPe3bcjhZ9uyD2G4/NNQR9vbKtLo1I/J6gSyYmqqiRToON7wtz+mwaJ8dt4PGGOpg2XXQDmlaXl0ypWnLBS0yrxwtrQoaOLoae5+OXOq7IRkxPFbUewP9jPwS3Lg/yhz7KE8rT7QR/7N9YlUo06VAGGRdjMnHbl3A0+G2OQ3O2/+SaBuTWzHr/oyNlu51EWynmzfsIeE4tkhwaH+rYtTge6QuNI9m7ZQnZsbAN//tppu8mLk6WW7Zafd70+l/bWZ9X3lvpOad4L3E+oek+4880Y3/e+pQRzLuKDeI8tYhCmvYF8bXhNuoO9mFrCKevIoHX/BhcvOpNNYM5mqixZaa/eud0zMXLyCUx60N2SV4+/xzwi9hD3EY+VPso6RtxvcQxozQahTiccbA4zD56dOTioU0PMwiOsranWfFoW8Gna3A9TzL3MqQ/LaQbZi8xs86TyqXtfedRcEwfWjYt4r0FV6G1UxVGB20BlfwSo0BupuRt20Bduilj83rMNFCMqAAKO0DlpmKA4p0gaeRw41MMtV+IsRqsTVtvzYTPrgwe/p+Ts3YEuqABhgs3+GeRQHwd8C4uWXqC6UhQW2YN8mIny2ayQm8PwXpizG+nA/+DudXV5c/NvGqvZ90Km70Mc9Q2jNM/P2wiMBGsbqcGgUvhdpjQZDFXkwKDRsapqmXxsVC5n8/zW1dF5wN/vurmw0HxK8CQ4gavz96XteKSLAyLc5aW647V9+pIwHO5fEaYvJ0WbveZMWnn52YyUuvgVJ9QSgNf0Rcc4OUVHnzwZE71yYmL6TNz3sqlqc9+7uuyT/CLZO9dUsGRaswSM8XxVXDOLrQRZHBXyUcXOAkoO8HSNz+aqzPwEV58DEVB+HrQYisjPj2ja8vKhL428PNWuEJHnaCNzcet4kheXavltQfpsB6En9/+/VgSnarIzWrtaeSt7N3Zv5we3/3aAd8gCHpC3hAC/zsjdIqdZsVBxMURBMSAg5a5wHcwVv8vOsP3K2/bqNUixEhEHAfujVZNbE+sbC+lWX/+vBUTzBexPfi9ZSV8PhdzTZ+ghU3rAr4MydF5+JauvvG8j6JCvrROWwbo5cb1fRV5neT5uCsLXaSVbRftKe+nlpzztc+aa6iefxAAoqaIiSQRoQCibWL5CeFW5vcO3x7ejS3S6efrhb6URERYW2aVUFx5hZ/e1DULY/fNl4ihZnGW6ZQIp0cPs82XVfyt9qB6kJEsVOT08Thw5Xxacm0jk8dK9VV6xRU852QlPPGO9E3hpOF6iEgRmc/9B1ShcMEvad0LPqmINlJdtAfkc9feLIVdrwZYTP3/c4bMva0U7KgNYWOEl3PfvuEsOCtZh1SzvcChCHhxee6hX/MD1cv7mfwSXXB+KgO9IDkXL37yaT1kwumupx8rYxF0NE8v7nOyXIdCSmgPZrIQ5JFyZ64YLUK11+G90Trg1tHJDfxkbh8nJZtccgIoQ7ZXAxMwWiUDiz+IS0CnlecBF1VpA7KJrzDaEQFOylDTcFZqKpZq+1IBKkYaf1HJWT7chTTSV4Di01v01KmVLwOsHQGOshRs7Daap2MqdpTEYkZrR06RUaSx0XY2jLJoKdUPUzOMYoDepXfQYqB/wt10L6mt2XODY3BfUx2AWUGLnq4EZhHCpC16MOEhlNUyVIFxnDlLlOc5cMNFTmC2T4R/gKWf3yJYEh/tZJ4NFl+mN9ATG9rAPGtEphqI20qshlQrNo+GgKroqAZF9wNOroASHYTLVuSoQ9hF4nO7M6vOQt56f2h/hH5HSLwjgp+yTBQSm7uMGhLvKG3mwSNa4g7JTdkxEEcmPCeDE//YcD10+lvG2hteG7sFZX3bAj8YFHGCapIJX8KRpIZXOQKkLWa2YV1atLK51E+YveptVFIA5ZPpIlF3pFPACr6iTm52zAZVD7YRRqv+CaXTIAThcoU0v8B9hHx0bLyqUCTKCpt19ZhMsQHUSuRS1J9j5uNOC5nrIetQE5odRVmgPrJAZaIIBAOVpwOlWplbrTDPQnLXbdcssepaHs5KkNQgNvWkvMP/U/6ucEygdFJWhyqASYwmc0SXbfXV7SBuiyqOWtxeVLV5Wu3IhvNAq3XsJACnY2CxM2Ue5Zx4mW7vnHud1i2BsCph1Wvfu0QNUPEhX0+vYO3W+MhG/SQfymOAx5jI9FaCVqByTIoUyk3HSZ1ixjGuhj5hwD73J9UGr4YCsF/Q//4MnFh932cstXS/a2mMlc3uqPu7dpzW6NtLuU+aetj09l6J8nvPA1aMJjQBmKBZsXVBetmBb14Kt5eVHOBQPbK1YKRZad5nYL3KdID9foGtBR36eTtCSztYsddYUc3BiV17WaMwadeqcmdRUM/ifl+U7D9vIqvRIEAUqU+2i5s6r7JrrnLW9PBtkQjuXMzLndnX5/jdocSA6hqwk8yKdFn1RMU5Kp/pFPNYzjBL7jGXBmsIqMVMsSHUW9/Ff7HkHBa5JB9nk3Nn7sLfvYTsMWMk+LB4AZnMIgwbrc7hqzz3RPul6djAWWrIEEmIHhEkqbaFCLsfjU1KIJBBggQ6LOk9YUtLMqCDW9ZckndA7tIYBF46XBcX/RluUpFAVC7K2+FeMGCnesq7QckRJgz81h8VRXRERwh2JM3FpIpqrj5j2g8aaSLRYvgyXGZrdktUSiv1px85yskmMULFPJXFUAU1ME1DjEFcieKfrNxoI6ptra0AptpTHovzlC3UWFQrp1fT79CqakNZI5Ca6yeggsI084DkMADcR5yZQjflhkVWXRRAECfY/WNdS4QeJ31IYVGhxJKVbKy7ryqqUydr+FQm1MkI7ZxwvhgZoKBkW/G04MNXyvb2ZXEWZ6fimp91Mh1auhCikDQhIAQjpcE77SQpS0yAJJE1NlTarSEsFUiBJSwO2y5kj1fBVl9aRKyNN8FW4aWTxrvpKpdirWOv1lf0Gv8QbdnWkkVrQ4T5rpJlyyWaXqy7N8FVK8/Pxk0oqSI4fII9ZplmO2fKeOK0LOY08dtYywEwwyZNg4CuhA0LQ4lINIYNYM+h0z+c0AILugc10NgVvdpxyBI6TLZtbJkXaFObF74aphwr/Dk82452kyRayrdb3vzzW2tpkS7NrNAy97AH+wldJyyJNDzlhJCg8NzccMgAHAENCIQ0VbscEFOzrexFmzlBObgTkwJyh8DmcsDemyGVJRb5wZjqFPTES45ASyzN8Y8PAEcC+RUnLxDlSh7MPJ9iUNdmRwf1QqBCwDiAUorRMsGJjHGYsrLIYOLGYMekMSw/CgVqAf5AI0nONs43Xfje6N/fQ4aMLRB9C+64bgEqrQ4H7yRFd97Ov0ZkGv0NMOBZmupbzJObw8TmYJtYKVhPmgKjJeFckPDLXEGi4v6sMs2s3hrRslwQu79515rV7d+nzVKi6BpOCSa2uTm0+OTXVUCqUUlPj1xV43eigyzt/IT29qr5ufBzMX64rMTVRS6hNJnrMK2K27qvadv1Q27tnY7jjwn/+GFyxuu1wz2sYAwSYhiWFnwu66IuX7EbVGWjv9BTSK50MaD4nH72DTE0LXSwkBXfQBE4Ceoc6OsoxE/grUnqeM6Nf6I00Uqfeo+cLAD1KBDmfMrqCtRm7ImXM11eNFdjNrHn1c8CMcfwkCRGESD4JcFp7OJSdDVEIHxAmqb9AJshFdmtL7OJfuuY/U4H8KPlKSpj9pjWC1R6rBGs22VPC5Cuj84DqWb7ry3j7krUi25bS9TsdHF0SbVthuGOd61kRkHkt+HlqWOrz4GsBGZWeua5XDBW20csW2dYbrqQeVRmQcS98R/g9xnq968F80cW0tNqVqamjXOOYkbtr38qVh9wDLpaX1daWl7MxBw+8Tkwsojex/mM10b8KofiOQR/E5bLbUCyZ3zcTYv76j84QKHzHc9Mt6pOQF5AlfTPCl0mWmZkBrV4NZTgoPQNivUGms8RQcjIkVqBlxRD1TKYzWVaQIocA8HbIMufMM9RUKH/KGtKJdqoGTRJwUODqe8iMcrhc1Y5LYaeGl2nbGe2so8beV9eUmAsEI8q9wrAw3F6cnCSFBirfmTdisDdb7LMw+/faI/YnYa4zF+6zCZP6vCgvb3fiM46VlbUz+E5ACHQATJevZjC8y1EldmGifNeZSqK+Hb7IZcJlLGSW5ZDxzRmndq0sCUS1g3ZCLp9/02wGgfGmhtyW2EZ26v0W8K0XBF2l2ugVpxV6GyebAVv+tIQlmXZ4o33R76ymvACVLv0zM3qa6z+yEp1uGfGYKmNVW89IoK1C8VU2m2gJqOkMAuNWFBTk5FgR9cQkxt7z3fqsEYCWFgjaBkGmPAIEdUHQUwiDqY8nNBuC1kJJ07VWAOMJQakP05wg54jkRxDwxoAqKwB8oIF1kRA0D4KIDxCI3j3ZfZOjV8VXlg+w9R07vh7cjNxsPXWA73kT6KGbLOPN38Ikxt/4fgF+SiDmBnLFfE+xn7+fJDc73jWQL9m/XSIKCE3+D1zMDeLGn+xOKZ9Ui0Qc9ZQo9EnwtHbmK5p0vvY11Bg+FXYJ6v+LNCWcaFr3qWnt4wjw1N7Dx8y4gsNhcNecYjC1gsMoKw5D4ef34r63ACr0Dghh1XwwBS2bP7N06NnGp0+fbxxaumhmmaXx6mPjFGJSFH5msYo+C00TiPHxH1dbrv9feOndk6zj//BF/K2WTZkdUq/Du6TrKoj2EpXuQlTa8V2+5dZFPGBhZQYcADi2GQAI4yyKleIYdnwcC+HYgDCJWJ7ZI36IL2tmxK+01kW2rWBw3CA0mIEQaEN0Qh22tzi9Mr3YD1gGEpMfXfgV1N8S3lKP97PZePbs96B+2HRLB5I5fxSE4o0JXuCqCbeWAPDL3T3EwF86lNeyHdMCloE5fxT2huIBPrQXXM/387Po8Ln6clry5/tfeqERYNb+jnOYsfsN+f2537W51zlhQ4suBw51Jp6Py5hNWPfoIhYzYXsevvCnw1n3s0yvU8EneCe3L+xenOiquVSqamyV0vppNL1693Zg2F29scrEUpwFoOEbf0gWSJj7M0vD6W/fcw68hkfBuR3s5zRBgEPV3HwgRHEP8TRhkpCGf4hDhSCfq0ZlUEYGJHsYoOfLoCSjLhAEA8bLzUGq8p7NvyrjoLIyKM5BwXqSSptXjNmyBQOh2CCEyWpiWoKOByl7go8HbyoFwaCcEcwofxn88lhgz8vvcmXg3gvRkELBEDNUGLrGYhUUMQWbQR8BY2wRa5ItZk+yROwxIMZtL13O6U1eGa7Ysb7EfTnQIxWIsaeN1FxgMjSJ1JTlAxHrN/Sr1517MN2ZDt+5M8JhcKh37sKoMwrfvUPlOrGp4MJekyvLFTmI8KRp5PltkwCwCpj+c6+OCFT6vANRSmY3k/KB5XJVl2gCF1fkEqvGsNxQiHQjRc6KivmF3nGJc0t/imhcwitaUfTckiAkoll7fZRuIiknhQcV1G3MweRi1m3EFPC4KaFSlZtN8yjFsWHD0nzrfFZqcIClT4ntSDvxJYWPgrFHeBYLr8IjhRBWWfD2/kHc1684CIMGIUx8ODx5YsJZRlEhF4g6u58KXPBfBFt0akSCXGAhsU7+NLlLqQu5K3BaSj1C5buIkSMId48OmPguAgSDSFzEJsyDa4bCN3GrVQNA+Ey+/+2ImWIEOoqHwTjoeDuY2LGZajBQNx8HqZvntJkanENvzAACfKGO6fr/7n/nDyRE9C6udaK/FgKHxyGwDILWLzyacnKCASAuOgZYDRj2Dn5w5gqth85NyOYmSiQJ3OxErljimpATS6DHaSq5lLFkCUPqIo/Z8LKwzefPN2PnFbqd7l6LdTjtDkXk5g4wgYIAFV7cAGzortafxHbN+VB89uoYmztphdfvnpClwTy2WFJRSmK8GmpczLFsICM2DlXPdSOG/FVjwC1ERRvDjELPaGrWM84u+u3b0E5LI0lNGiCNMp+qvmn76QuJwyhMAcPg+4+xvQBQKOjEA0fkSFMUpC6EolHDCGojkQkda7uSdlbsDCnfCwPYRhIW6pB8Wr6r4pCzWxSkKYCiKeBRgYBGLlm3xXXL9ozVOAxNb9qwegLaTnfZgmwE/uVf1vuRJy015DGy3wbLKUscNXotJ8ng9N0uoDDg0amf7pQFJXFBi9wxqKzW0Gw5ZjPW0tzCFdITSixtf8B8xDRBgSdM0xMwZcKnmxEfGB/MGlCyyTbMdMYdckRQwrjsdpoN1xrTwJxDUQVV6z5HUMpFP1PY18+xKJ/p3McJO6lyX0yAe2ZkeNasJZmzosLdswKwPrTo1La9f2dgVnVojhOYC4fGbT6P3v0b+/dd9HzcJkrofAClr/4JBGGFoJNvCSz5nYqHL64AYFbWkr+22yOaDSVWVCQSDZ1FElWS/WpbScmvU7TmI29fO9BbSEhkLDxERalgWcgvzmyhok7oSNaIQQVnmWFxwlkMnoBR/AcKy379VbR5TWjj3B5zmxg3teJc1fmqa5OoscUtf38m5gwVnC34rfLsFc2RqrSOe4X0lrSqszN1ZzIWPfdjXc62TAzm9itKjslr0UH42mS4ACFWd9tWInlh+8+TftaN1CAjusGK1r+IOf3sKW/gK6/J9nbgGaCGIUoaBRjUBhqcBqN0NYzCHjANVsOA4kGB6BoYgrfAwKAxAMoWEwoOYKgWBMyHkjRqPletPlX01NV9LU3WqHkctebUkqduT+XmUUSClLChUa55WzdMPe2v3eomfzrNR55uc90G5olSCcT+0skRI+wOG0fe0py5FovirJqs3mLWvdIk3EogNlE7dprG70Jl3ER2mJ6T50YGsBpvhcRHFBLfb+aprMxPMF4xDH8e94za8ZISEFx5sHRfy3/Jso7KU1m6oiEdUr/o5cG4RN5Hq/cGgfT6l6zGUda8l1bVblXLb64deKVWa7Wzquk3OhpZa1lVZXmX1jcPcNs4T5vXG1vnbgnz0zDaYll1wVkYnQ7KclA4mw5pdZgsBSpnr2n1tAMxAEpSFCS/3Q7iVMgHnHKz9HKKZwiyJ6US2cIJ5yIMKPDrSTeyp6VPkPOPVJqe9jgPBG61CHB3D/honYAWU6YoO1iNYlTNqdotNM52v6kHxl7jbOMAuJn9CqjBx4/gBFuDupPNxB2tBFptJz+gejGOQjnnV6sT6eDuAYXCuG/ut9+oiFUKBw88fyjQHehCIatX5sGGWeC580JC1pkswsIsu9iF0dX59ct6EbLMpy4LeUFvK381FLx9nkW4Rci6xUufsbVi5QQNG3e5jPv2DXf5/t++X864/P2b4g/pj4Qisp8ORSQ/KOIgIgNaVBhgZBB24xy+mckEmVoqSs163EA+45b2o31gdgqJqtJQnYoo7Py1Dl0akkFDYcPQdYwbIqHHLQxgAzPGqWwnPkxUAWZLF1V7YK3cOqjd1goHqlhhrwIo6fIZK5SEYk9HyFsMWvBaaQaYPDd52TCY53c/O+KZ0CPkmTJiOPb2XToz1kJStn1EhJgs1lsUsI0wUXkj28uUFrEuVnduxwGbDjSf1nAy/JTdafnJBlQKiDS1CccYG5D3NQDJxkDkaDOj2Wn3miXX4CNWx+hy+jErkX22iXo+7Rt7ik23o8CP5sI5GR3txPnephoq1M/RC1G0CuUwiuIcikMjfjttrMdmj3cfnXIfc5862v0DBAygFw9Uu+rZ+ZbDNsavuOGzC/1gjOKmrYWNTWC0cs5f/VKtfZak//N8ZXSgjY0FXq/AwH4MJ0cnhq8BYzuAI1rbBkQryZ/7paUOpVINGR86VxkdYGtNtDHaYgy+RSck2rICY4GP60Zmz1zww1tgKixhUgWWgM/tnpn1ozsOT8BWkHAPO2fszOQRstk309n5E4UkwWIS/HwvuUVCHfSOqGNbYBsQCoF+GoK3EMt0e0C7Dn2JTTciOQd/3WdVc3NISHIKAz6QrNXCAER584eL3jo42JCp9xpw47AjWMAbvcnW79ypZzci7x0DrIOHUTX9JkigI3Q1uv6Y7Gp1r3qQNoZ5ghmlZdNGMZ/oarAQWjWtRH3xRuGkwmg7ZJvl5UDKkqLyLJmMMETgmdmTsc62vkDi13cpIXXkwl7wy4sTHwHdemc93urQavXlySS0mDy8DVZd2QOK8rpbch17POdMuY+7U7Oyw9Rheeq8mprLBy9PHJyQila49TgqHXs4PP93Vnz047jo6Lgn0WhN7YW9v2/YuzE7W5QplWXS53qCwC74M01Fm0VT0j6znFk0FRI/ASQziwRMTEsQbz8STyVa0e+Q9sop8O5JVmKVdWVW0pN3gJi7vDytPJGmxXXDxxq4XDclLp5DyJ4i5lR6rJvKIXpUBk0RsovnYLErrSP+qTVQfeeK1+pk4aEpCM+iNbZERVqSssvWrZGRJMvbB6KPBrPjtCNwRCgFcuupGmcKGKhYjDLoYjGNwZIzMQxoWcStjqgjwwElMYiojtGCOuycP50twMYteK20hkBwTjQEMHSITn/2CGXTWL7CJzQjdA8M0+qEs8/YrrRkVNMyZrmptm6MlLmXRR5s5ozSNltdBXLwjlBFriLwe/C2+aWiklJFeImvolTiDr0kVF2UrQI7GuZIoNRUSOIYoMtJIN7Rj30sqRSLydqsvg/dPC8Fe4Yd6+XoxVaYj+SVyU/SvGPEIcAXQQy2w1e40xwcZJlJytQjVt+CCjh8jgBlXa3vnAcF9PpAoOIhQWRvBZWVns/k0aHovNwoyHFGm7UZ9Ezv0rNQmZ2Nn8WDQCUeis7NjYZGImYtw4mxUQrEK0XOnTZcboSHd3Q72xqND1IelbHv3MsxYjGLJVSkK8J5Kjq9TFklJjuK8F2IyOOz9Z0QlY2BovLyooBuaAUhlEoHKcm7Ir39EoNLkoPL5N6Ju0AKnRJFcIkCeXmMXok7n+/ujmuWHMX61uFzYvsbcFF4UkQaFimGdZ7SBexdQBuuD+CZim11pPT1l7qX5v2W+9vSCz9vSP/0kjvWd1jRNWgvqqFboVViNVX/xQ2mDEK9cYiEKTbFmcRMCXgcvxl76RKWwpYBASkAYTNqRiZ3dNz3q1+MPfH27QlsL7YwlgLk9GIj6/3SOzrGqZrqDOY9F0RZ5BdDMfhdQaWL/Evb1W1ZkuIFQbvwUExecbSFhmib4RRNyFsK0Xtn8PJFnBWUxtwGSi532cIh6wdiY5dGE5wyvNLF3bJ2GkEoDbOGNoL6fq81MlnjzEDr0O3WSzNNsoZwr/56sBEaqXPHWe2RYTdJN2ECj9Pxf13AINuP3ksbJmsd7+58fvySuVW2Tu6lnzgAG6k0FE/vkWNQvvnKyE0Yvnl7iCueTl0nwMhiIHkKVBYwx17HEQg4E64DQljZKbnpx7DPn4+zAIMkTJzIDhauopFSKz2J8kuekzzJ6bTLCi/b2TJxjc08i/5Sp5YBEkEs6jaIF4fvvADUgAjUnEqUiKqBtBh+67rBGvxtc/rnezW+Wf8a/A1/6ULaex/qKIG24Sg+NmwjsTQNpPpccfq6YD7D/Icco4gIkdAwcuOz2pRQhb84ULzfA/x8rM6qVvAYZk3SkJ90w8eZ3DJrvZM7FZPgcKnLOg+n9r3O6uGXkK2zDV22lXTyavFF4SVbFd3mSbc18G/RhK/Bg6jc5niW7EUVjWOdEwBF4SMbV5OnLxyIXFS0eNGBiwazQ3b3dNlJh5NrIKwlo7epo2m/d1lgrj8RhiIrV6Vj4bdiFRQJE/0Dc4HyXnBZ8IvS8rLy4+XlDCxwg47X5uDyYGBGLFxvhR0yMkOG3wCzauz8Slt/SeG6Jn0/sH/74Ge0/zN9AwBf2A/0SOkWABpwTSZKvSaYo2h119t/pvQagLyBVg0H6eCpfVW/5kZox5wuMuggRLf18Ac0yCAUDRmk5wL37LM+r0+ywsvE6Dd6ig2qSDd+WSe16gDQWhWiM1l+/N9Rj+MSkNMCvE5KG+RPXf0ikWlpKKn02U5F3f4ko3pW9zbtmh7EVzdjIwmB4nR20d/q4Sr94bxAQDrHTGk3HVV9CPiV+GvbQlFJ0+/pYx8d3rS8ORf4yqb1lv0LLa1khWtAoDUOQoYSzmc2lP2XJWAjVixp54zrpOaYNgDfVG14f9J5HX8dgnDI4gaXxLbOX8+974G5gN6YKHQENGqt2KRS/Z+nkYD952PAUH3GDrMBDevFhyYgRHyo9fuOQ+lXDYpv2eWROJ9SHwKOUL24HVTv3jjV5SVBBM6lprWgyfS1PwIZONx7BTvel2omppvScX/GSmCTPmj1Bg9gXuytsvO0YVH6KTcwyr/gd3JkhrqYPl8Xa7vf8qz7FlfpOj98x1pfpsRWXGdADPwZN2g2Tcqwesu7BnmoJk0OmX1u7AhKHbJdmiz+BAsTMhaT4lMWAwtt3Iztxk4ymODPoSnYcpthe78Lssj52FfcNlH5hf1cAPCyPhJ9K2pihewZ6W1ng1OH/c8LzpXALv2TzpjtTlIrw/uXtq0ekrpht0UhCGxO6bwQYTIwqF92BWJnB7Plnb3uiMPbbCMlWLbnTCxtOefi0iT/2+/eUf3S/ye5Cz7kCID/grFxs4R56rVjbnfIASuLBcD/7aMJ854xhZ+6075MDxwv8beHa00h0KzKXy96NyCdk6Yojdv5Lbsf6j/8m73/MvQ5pM/XgNe/PS8kAMhwcv2zYAAKWQn838W9Dc9iVmormxBATuAXnQZSMO50kANTNmrddsagCA6dCciBY2cBbMjuvAiayhkIuDywVk86A6g50WmgAn6dDmqG2ah1rDMGHZOdCagV2M4CuAerj6MI5oWCCB5KmRG6fHdVMfQ89BZsr/5NMreZvnRvOv5JfbXPnaPT2ytfqSeF8PCLXMzYsQ6deyH3jNp2cKMONRUWlWbjPY5Z1kBUDB0E8FDKjNDl++rSVTH0/LItyP3kv0nmNtOKaR8v/U/qq3fcnaOTAvtKeqVpbcn1i1yMqey4qUO3k14SldosNbhRXqmmwqJSwxzvMZuNVUlkXuoumQQm3zWm/x00nwEkojDNsDwcXn58XP4AIkwo40IqbazzQRjFSZrlRVnVTdv1wzjNy7rtx3ndz/v9IAT/BJOG/W6BSP7Ir8z8EvUx8IIoyYqq6YZp2T/9dJJ1XM8PBEPhSDQWTyRT6Uw2ly8US+VKtVZvNFvtTrfXHwxH48l0Nl8sV+vNdrc/HE/ny/V2fzxf78/395cA0FMg6fHdtLBUWHJ0opJnPKZiOBf0di5vXqQzjLi+O0A2LBe+UOG2p/m1BkhWLLopQA/D9QZajNS72rb9MCVuZQS/Wn3H3uqjkGwJ4c7M6BGS4QwS14opEn/Qht73y0staiHpcHJyK0vL4r1pqaaOrRsjv/Yh7HPyvqh1IvY6dnC9k5wdxlf9WeHRduAWpJdImorxMfHuutu+H3DkrcvE6x1k++fqb5lzD9KwTCDJOybYwPxdN3xqlaZujaRStZgL/A0KlHjRiQxqIt6E/HQSt3+HFa4nIxmMGDUs349mDnUzW3QHTuY4t/aILidNJrU37VCWekGQeiJ35PcKJ55x5u+rnNFD8olk5tsQL4Q33do2cjlUPBIIAKemmkOslettgBRSLcsVYrHdggu98hsK9l1udmxH8jYYrgbvQzGVv3JFoS3JtbeJmbPNrLH2hXA8zLgqEqtxtkU/gUtxHlJWO6kNh36/4YFqz6bqWn1NfN7legSJkN6LqDJyqAW5fC1xKlLkaOjMFlM7khpEzD02/jYD4OM6WX3Uo3xJxaJXFqTFW6afi1WM/kz60I08JN28uWDElcFOdbHhgVQT13RIaI/GVUkl1F4NklyPccYPS7GmxLbwvHjBippqZGS1WO163BH23SZJNnRXE68PuL1JWctyeZcxFz4XdGH8fz6wEDWyhxOHI0J8pGqSE0AIib7opnXE9/Zoorv4MXZ819tE84y03r8fc7leWTqSvDG3LX4DnQkxcQ0NmqYIeLFGSBaSQnp9IBUXuTNH8kMYcRpapegjZVtBbxSUacKdNB1Sddou7BGSD4yvwmeEKiOzdKZ9P2SAbLnHQ/8s1HXBZhvFJ3/Q0PHqy2kZG5bL2jhxS5pJ/01XFHtrOJr8Y2rNmUrucaUsBxshuXOMiB3LQtoSLoW0x6w2m94YnNBUsqs4lFp1smZHl6NzaWm8IRWrDq80kmVAEi31MEDjaznSCQUkeQRJ7k7znm7ztDqKnbiRs+OBa7fBMsE34S4C6HE/9zqpDcGNXsTP+lcOFf5a1h/9xTLiMHVrsmWZ0NrCl5ZFLCZ6bqcfH6rdoRZjLqfrJedy38pHFV3VRThr7o7NmSpH7xZyNeQR/juXfwEAAAA=") format("woff2"),url(../fonts/iconfont.55c2c59e.woff) format("woff"),url(../fonts/iconfont.39220b34.ttf) format("truetype"),url(../img/iconfont.71026185.svg#iconfont) format("svg")}.iconfont{font-family:iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-bianji5:before{content:"\e8b5"}.icon-ditu:before{content:"\e634"}.icon-renwuqingdan:before{content:"\e6f9"}.icon-xiazai:before{content:"\e63b"}.icon-tupian:before{content:"\e62e"}.icon-biaozhunjianmro:before{content:"\e6cc"}.icon-xinjian:before{content:"\e695"}.icon-share_link:before{content:"\e60f"}.icon-diaozhengdaxiaoresize5:before{content:"\e720"}.icon-icon4:before{content:"\e62c"}.icon-35:before{content:"\e621"}.icon-bianji2:before{content:"\e729"}.icon-diannaopcxianshiqi:before{content:"\e76d"}.icon-shuxingliebiaoxiangqing:before{content:"\e817"}.icon-yidongshu:before{content:"\e646"}.icon-zhijiao-triangle:before{content:"\e652"}.icon-tongzhi:before{content:"\e62d"}.icon-attribute:before{content:"\e6af"}.icon-zhixingzhongduan:before{content:"\e762"}.icon-dagou1:before{content:"\e660"}.icon-sanjiao:before{content:"\e65a"}.icon-chakan:before{content:"\e60e"}.icon-lixian:before{content:"\e787"}.icon-zaixian:before{content:"\e79e"}.icon-wancheng:before{content:"\e624"}.icon-dagouyouquan:before{content:"\e633"}.icon-yiban:before{content:"\e64b"}.icon-daiban:before{content:"\e805"}.icon-zuzhushouce:before{content:"\e620"}.icon-xing1:before{content:"\e618"}.icon-liuyan:before{content:"\e63e"}.icon-beijingyanse:before{content:"\e63d"}.icon-tihuantupian:before{content:"\e66c"}.icon-bianji:before{content:"\e622"}.icon--shangbiankuang:before{content:"\e62b"}.icon-ziliaoshouce-xianxing:before{content:"\e898"}.icon-tuichu:before{content:"\e673"}.icon-wenbenduiqi:before{content:"\e6e4"}.icon-shanchu1:before{content:"\e644"}.icon-sousuo2:before{content:"\e758"}.icon-keyboard_icon:before{content:"\e672"}.icon-xing:before{content:"\e630"}.icon-jiantou-copy-copy:before{content:"\e63f"}.icon-dingceng:before{content:"\e648"}.icon-diceng:before{content:"\e649"}.icon-wenben:before{content:"\e64f"}.icon-xiantiaoyanse:before{content:"\e64c"}.icon-wushuju:before{content:"\e65e"}.icon-lishi:before{content:"\e610"}.icon-shezhi2:before{content:"\e615"}.icon-daohang:before{content:"\e611"}.icon-bangzhu1:before{content:"\e629"}.icon-youxiajiao:before{content:"\e786"}.icon-gantanhao:before{content:"\e602"}.icon-liebiao:before{content:"\e600"}.icon-rizhi:before{content:"\e601"}.icon-lajitong1:before{content:"\e626"}.icon-dingwei:before{content:"\e761"}.icon-suoxiao:before{content:"\e614"}.icon-fangda:before{content:"\e623"}.icon-zichanliebiao:before{content:"\e650"}.icon-shaixuan1:before{content:"\e640"}.icon-shuju:before{content:"\e694"}.icon-dakai:before{content:"\ebdf"}.icon-liuchengguanli-:before{content:"\e605"}.icon-Group-:before{content:"\e686"}.icon-daochu2:before{content:"\e7a1"}.icon-fujian:before{content:"\e86e"}.icon-anjianliucheng:before{content:"\e653"}.icon-zhuye:before{content:"\e64e"}.icon-heziguanligenduoshangpinkeji:before{content:"\e61a"}.icon-ditulianxian:before{content:"\e64d"}.icon-fenjianguocheng_o:before{content:"\ebbd"}.icon-shanchu:before{content:"\e714"}.icon-shangchuan:before{content:"\e612"}.icon-xia:before{content:"\e61b"}.icon-xiazai1:before{content:"\e61d"}.icon-gaojisousuo:before{content:"\e670"}.icon-icon-:before{content:"\e723"}.icon-zuhe:before{content:"\e63a"}.icon-chaxun:before{content:"\ec4c"}.icon-shouqi1:before{content:"\e837"}.icon-zhankai:before{content:"\e838"}.icon-fabu:before{content:"\e61f"}.icon-tianchongxing-:before{content:"\e636"}.icon-jiaoseguanli:before{content:"\e645"}.icon-guanlian:before{content:"\e68c"}.icon-wj-wjsc:before{content:"\e771"}.icon-shijian:before{content:"\e637"}.icon-shouqi-:before{content:"\e651"}.icon-zhankai-:before{content:"\e65d"}.icon-niantie:before{content:"\e654"}.icon-zuzhi:before{content:"\e712"}.icon-jiaoseguanli1:before{content:"\e625"}.icon-T-yanse:before{content:"\e721"}.icon-dagou:before{content:"\e782"}.icon-zhuanfa:before{content:"\e607"}.icon-quanping:before{content:"\e613"}.icon-xuxiankuang:before{content:"\e7cf"}.icon-fuzhi:before{content:"\e62a"}.icon-zhihang:before{content:"\e627"}.icon-liuchengmenhu:before{content:"\edf6"}.icon-icon-test:before{content:"\e60a"}.icon-zanting:before{content:"\e67a"}.icon-renming:before{content:"\e60b"}.icon-baocun:before{content:"\e6fe"}.icon-bianji1:before{content:"\e642"}.icon-daochu:before{content:"\e62f"}.icon-yanzheng:before{content:"\e655"}.icon-qiehuan:before{content:"\e647"}.icon-tupian1:before{content:"\e881"}.icon-liucheng:before{content:"\e6d3"}.icon-shaixuan:before{content:"\e715"}.icon-21file:before{content:"\e6a6"}.icon-jurassic_version:before{content:"\e696"}.icon-jurassic_add-users:before{content:"\e6f4"}.icon-xinzeng:before{content:"\e60c"}.icon-biaoqian_:before{content:"\e61c"}.icon-ziyuan:before{content:"\e641"}.icon-ziyuan1:before{content:"\e64a"}.icon-diannao:before{content:"\e635"}.icon-biangengguanlibeifen:before{content:"\e616"}.icon-youxuliebiao:before{content:"\e657"}.icon-daochuexcel:before{content:"\e658"}.icon-xinjianwenjianjia:before{content:"\e656"}.icon-jiugongge-:before{content:"\e6a3"}.icon-tongji:before{content:"\e608"}.icon-icon_huabanfuben:before{content:"\e631"}.icon-icon_shezhi:before{content:"\e643"}.icon-moban:before{content:"\e606"}.icon-xiugai:before{content:"\e60d"}.icon-juecebaogao:before{content:"\e604"}.icon-guizhangzhidu:before{content:"\e619"}.icon-shuxing:before{content:"\e632"}.icon-wendangfujian:before{content:"\e609"}.icon-gengduo:before{content:"\e63c"}.icon-suoding1:before{content:"\e61e"}.icon-biaodan:before{content:"\e65b"}.icon-banben:before{content:"\e659"}.icon-fengxian:before{content:"\e770"}.icon-quanxian:before{content:"\e603"}.icon-daoru:before{content:"\e628"}.icon-kpi:before{content:"\e617"}.icon-zhongmingming:before{content:"\e65c"}.icon-daoruwenjian:before{content:"\e671"}.icon-suoding:before{content:"\e638"}.icon-jiesuo:before{content:"\e639"}.icon-daohang1:before{content:"\e665"}.is-valid{color:green}.is-invalid{color:#f56c6c!important;font-size:12px}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-055385ac.e55cad48.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-055385ac.e55cad48.css
                                                  new file mode 100644
                                                  index 00000000..da8ea928
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-055385ac.e55cad48.css
                                                  @@ -0,0 +1 @@
                                                  +#userGroup[data-v-e0fd60a6] .el-main{padding:0 20px}#userGroup[data-v-e0fd60a6] .el-table__row .operate-icon-display{display:none}#userGroup[data-v-e0fd60a6] .el-table__row:hover .operate-icon-display{display:inline-block}#userGroup[data-v-e0fd60a6] .el-dialog__body{padding:0 20px}#userGroup[data-v-e0fd60a6] .el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#f2f2f2;z-index:1}#userGroup[data-v-e0fd60a6] .el-tabs__active-bar{height:1px;background-color:#4e7ff9}#userGroup[data-v-e0fd60a6] .el-tabs__item.is-active{color:#4e7ff9}#userGroup[data-v-e0fd60a6] .el-tabs__item{color:#606266}#userGroup[data-v-e0fd60a6] .el-form-item__label{padding:0;line-height:0}#userGroup[data-v-e0fd60a6] .el-form-item{margin-bottom:16px}#userGroup[data-v-e0fd60a6] .el-tree{min-width:100%;display:inline-block!important}#userGroup[data-v-e0fd60a6] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f5f7fa;color:#4e7ff9}#userGroup[data-v-e0fd60a6] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content .awsui-iconfont{color:#4e7ff9!important}#userGroup[data-v-e0fd60a6] .el-step__title{font-size:12px}#userGroup[data-v-e0fd60a6] textarea.awsui-input{height:130px}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-0ba0316e.d3570084.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-0ba0316e.d3570084.css
                                                  new file mode 100644
                                                  index 00000000..cf38e824
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-0ba0316e.d3570084.css
                                                  @@ -0,0 +1 @@
                                                  +#bpmOrgAddress[data-v-6de64a47] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}#bpmOrgAddress[data-v-6de64a47] .el-input__inner{border-radius:0}#bpmOrgAddress[data-v-6de64a47] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f5f7fa;color:#4e7ff9}#bpmOrgAddress[data-v-6de64a47] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content .awsui-iconfont{color:#4e7ff9!important}.tree[data-v-6de64a47]{overflow:auto;width:458px;height:300px}#bpmOrgAddress[data-v-6de64a47] .el-tree{min-width:100%;display:inline-block!important}#user[data-v-189b73c4] .el-main{padding:0 20px}#user[data-v-189b73c4] .el-footer{padding:0}#user[data-v-189b73c4] .el-card__body{padding:10px 0}#user[data-v-189b73c4] .el-drawer__header{margin-bottom:17px;color:#606266;font-size:17px}#drawerDiv .row .operate-icon-display[data-v-189b73c4]{display:none}#drawerDiv .row:hover .operate-icon-display[data-v-189b73c4]{display:inline-block}#drawerDiv .row[data-v-189b73c4]:hover{background-color:#f5f7fa}.row[data-v-189b73c4]{display:inline-block;width:155px;height:25px;line-height:25px;border-right:1px solid #f2f2f2;padding-left:4px;margin-right:5px}.category-title[data-v-189b73c4]{height:25px;line-height:25px;vertical-align:center;margin:10px 10px 5px 0;border-left:3px solid #4e7ff9}.user_photo_img[data-v-189b73c4]{width:30px;height:30px;border-radius:50%;position:relative;top:0}.text-over-hidden[data-v-189b73c4]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-4def56c4.ef0a5aa8.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-4def56c4.ef0a5aa8.css
                                                  new file mode 100644
                                                  index 00000000..0e18b2f4
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-4def56c4.ef0a5aa8.css
                                                  @@ -0,0 +1 @@
                                                  +#commonRepository[data-v-c633f5ea] .el-dialog__body,#commonRepository[data-v-c633f5ea] .el-main{padding:0 20px}#commonRepository[data-v-c633f5ea] .el-footer{padding:0}#commonRepository[data-v-c633f5ea] .el-table__row .operate-icon-display{display:none}#commonRepository[data-v-c633f5ea] .el-table__row:hover .operate-icon-display{display:inline-block}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-4e7e9573.38619268.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-4e7e9573.38619268.css
                                                  new file mode 100644
                                                  index 00000000..bc8a0bab
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-4e7e9573.38619268.css
                                                  @@ -0,0 +1 @@
                                                  +.inline-block[data-v-08929cd1]{display:inline-block}.label-padding[data-v-08929cd1]{padding-bottom:8px;padding-top:8px}.workspace-update[data-v-08929cd1] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}#workspaceManage[data-v-6a19ae20] .el-main{display:block;flex:1;flex-basis:auto;overflow:auto;padding-top:20px;padding-left:20px;padding-right:0;padding-bottom:0}#workspaceManage[data-v-6a19ae20] .el-table__row .operate-icon-display{display:none}#workspaceManage[data-v-6a19ae20] .el-table__row:hover .operate-icon-display{display:inline-block}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-5a76c238.283a9f57.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-5a76c238.283a9f57.css
                                                  new file mode 100644
                                                  index 00000000..2eb2a858
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-5a76c238.283a9f57.css
                                                  @@ -0,0 +1 @@
                                                  +.inline-block[data-v-08929cd1]{display:inline-block}.label-padding[data-v-08929cd1]{padding-bottom:8px;padding-top:8px}.workspace-update[data-v-08929cd1] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}#workspaceManage[data-v-6a19ae20] .el-main{display:block;flex:1;flex-basis:auto;overflow:auto;padding-top:20px;padding-left:20px;padding-right:0;padding-bottom:0}#workspaceManage[data-v-6a19ae20] .el-table__row .operate-icon-display{display:none}#workspaceManage[data-v-6a19ae20] .el-table__row:hover .operate-icon-display{display:inline-block}.el-header[data-v-052ecdb7]{background-color:#b3c0d1;color:#333;line-height:60px}.el-aside[data-v-052ecdb7]{color:#333}#menu .el-menu[data-v-052ecdb7]{border-right:0 solid #e6e6e6}#manage #menu[data-v-052ecdb7]{border-right:1px solid #e6e6e6}.icon[data-v-052ecdb7]{margin-right:5px;position:relative;top:-1px}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-6f1c20e8.c5c7126f.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-6f1c20e8.c5c7126f.css
                                                  new file mode 100644
                                                  index 00000000..6d51ee15
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-6f1c20e8.c5c7126f.css
                                                  @@ -0,0 +1 @@
                                                  +.category-title[data-v-0a5ea2f0]{height:25px;line-height:25px;vertical-align:center;margin:10px 10px 5px 0;border-left:3px solid #4e7ff9}.logo:hover .logo-del-icon[data-v-0a5ea2f0]{display:inline-block}.logo-mask[data-v-0a5ea2f0]{display:none}.logo:hover .logo-mask[data-v-0a5ea2f0]{display:inline-block;border-radius:2px;position:absolute;left:1px;top:1px;right:0;width:100%;height:100%;color:#fff;background-color:hsla(0,0%,49%,.5)}.logo-del-icon[data-v-0a5ea2f0]{cursor:pointer;float:right;position:relative;top:-23px;left:-5px;display:none}.banner:hover .banner-del-icon[data-v-0a5ea2f0]{display:inline-block}.banner-mask[data-v-0a5ea2f0]{display:none}.banner:hover .banner-mask[data-v-0a5ea2f0]{display:inline-block;border-radius:2px;position:absolute;left:1px;top:1px;right:0;width:100%;height:100%;color:#fff;background-color:hsla(0,0%,49%,.5)}.banner-del-icon[data-v-0a5ea2f0]{display:none}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-8cb92970.adde4cab.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-8cb92970.adde4cab.css
                                                  new file mode 100644
                                                  index 00000000..f6ef11bd
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-8cb92970.adde4cab.css
                                                  @@ -0,0 +1 @@
                                                  +.inline-block[data-v-08929cd1]{display:inline-block}.label-padding[data-v-08929cd1]{padding-bottom:8px;padding-top:8px}.workspace-import[data-v-4fcb9135] .el-dialog__body,.workspace-update[data-v-08929cd1] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-b0787fd8.99d767d8.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-b0787fd8.99d767d8.css
                                                  new file mode 100644
                                                  index 00000000..68ccf623
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-b0787fd8.99d767d8.css
                                                  @@ -0,0 +1 @@
                                                  +.repository-import[data-v-10fa5366] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}.repository-import[data-v-10fa5366] .el-upload-list__item:first-child{margin-top:0}.repository-import[data-v-10fa5366] .el-upload{display:none}#repositoryMain[data-v-43d14c5c] .el-main{display:block;flex:1;flex-basis:auto;overflow:auto;margin:0 10px 10px}#repositoryMain[data-v-43d14c5c] .el-header{padding:0 10px}#repositoryMain[data-v-43d14c5c] .el-tree .el-tree-node>.el-tree-node__children{overflow:visible}#repositoryMain[data-v-43d14c5c] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f5f7fa;color:#f79500}#repositoryMain[data-v-43d14c5c] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content .awsui-iconfont{color:#f79500!important}#repositoryMain[data-v-43d14c5c] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}#repositoryMain[data-v-43d14c5c] .el-form-item__label{line-height:0}#repositoryMain[data-v-43d14c5c] .el-tree{min-width:100%;display:inline-block!important}.icon-div-repository[data-v-43d14c5c]{border-radius:10%;display:inline-block;width:32px;height:32px;text-align:center;line-height:32px;vertical-align:middle}.icon-dynamic-repository[data-v-43d14c5c]{color:#fff;font-size:18px}.new-repository-item:hover .item-name[data-v-43d14c5c]{color:#4e7ff9}.new-repository-item[data-v-43d14c5c]:hover{background-color:#f5f7fa}.new-repository-item[data-v-43d14c5c]{width:60px;height:70px;line-height:30px;text-align:center;display:inline-block;padding:5px;vertical-align:middle}.icon-fixed-repository[data-v-43d14c5c]{font-size:23px;height:20px;width:20px}.fixed-icon-text[data-v-43d14c5c],.icon-text[data-v-43d14c5c]{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fixed-icon-text[data-v-43d14c5c]{line-height:25px}.main-tree[data-v-43d14c5c]::-webkit-scrollbar{display:none}#bpmOrgAddress[data-v-6de64a47] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}#bpmOrgAddress[data-v-6de64a47] .el-input__inner{border-radius:0}#bpmOrgAddress[data-v-6de64a47] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f5f7fa;color:#4e7ff9}#bpmOrgAddress[data-v-6de64a47] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content .awsui-iconfont{color:#4e7ff9!important}.tree[data-v-6de64a47]{overflow:auto;width:458px;height:300px}#bpmOrgAddress[data-v-6de64a47] .el-tree{min-width:100%;display:inline-block!important}#palRelationAddress[data-v-293ab4dc] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}#palRelationAddress[data-v-293ab4dc] .el-input__inner{border-radius:0}#palRelationAddress[data-v-293ab4dc] .el-tree{min-width:100%;display:inline-block!important}.checkbox-item[data-v-293ab4dc],.redio-item[data-v-293ab4dc]{margin:10px 0;display:block}.div-left[data-v-293ab4dc]{float:left;width:249px;height:400px;border-right:1px dashed #f2f2f2}.div-middle[data-v-293ab4dc]{float:left;width:248px;height:400px;border-right:1px dashed #f2f2f2}.div-right[data-v-293ab4dc]{float:right;width:249px;height:400px;background-color:#2a85a0}#palRelationAddress[data-v-293ab4dc] .el-table__row .icon-delete-display{display:none}#palRelationAddress[data-v-293ab4dc] .el-table__row:hover .icon-delete-display{display:inline}#palRelationAddress[data-v-293ab4dc] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f5f7fa;color:#4e7ff9}#palRelationAddress[data-v-293ab4dc] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content .awsui-iconfont{color:#4e7ff9!important}.property-group[data-v-3bafef1f]{height:25px;line-height:25px;vertical-align:center;margin:30px 30px 15px 20px;border-left:3px solid #4e7ff9}.property-item[data-v-3bafef1f]{margin-top:15px}.property-label[data-v-3bafef1f]{width:11%;display:inline-block;text-align:right;padding-right:12px;vertical-align:middle}.property-value[data-v-3bafef1f]{display:inline-block;width:85%}.icon-div-repository[data-v-70fd2b78]{position:absolute;border-radius:10%;left:0;display:inline-block;width:32px;height:32px;text-align:center;line-height:32px;vertical-align:middle}.icon-dynamic-repository[data-v-70fd2b78]{color:#fff;font-size:18px}.div-repository-title[data-v-70fd2b78]{display:inline-block;position:relative;left:32px;text-align:center;height:32px;line-height:32px;font-size:13px}.div-repository-title[data-v-70fd2b78] :hover{color:#4e7ff9}.div-cancel-favorite[data-v-70fd2b78]{display:inline-block}.div-update-date[data-v-70fd2b78]{display:inline-block;position:relative;left:30px;text-align:center;height:30px;line-height:30px;font-size:12px;color:#92a2b2}#repositoryMainList[data-v-70fd2b78] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}#repositoryMainList[data-v-70fd2b78] .el-form-item__label{line-height:0}#repositoryMainList[data-v-70fd2b78] .el-table td,.el-table th[data-v-70fd2b78]{padding:8px 0}#repositoryMainList[data-v-70fd2b78] .el-table td{border-bottom:1px solid #f2f2f2}#repositoryMainList[data-v-70fd2b78] .el-table__row .non-favorite-display{display:none}#repositoryMainList[data-v-70fd2b78] .el-table__row:hover .non-favorite-display{display:inline-block}#repositoryMainList[data-v-70fd2b78] .el-table__row .operate-icon-display{display:none}#repositoryMainList[data-v-70fd2b78] .el-table__row:hover .operate-icon-display{display:inline-block}.div-operate[data-v-70fd2b78]{display:inline-block;width:16px;position:relative;top:2px}.icon-operate[data-v-70fd2b78]:hover{color:#4e7ff9!important}#repositoryMainList[data-v-70fd2b78] .row-repository-title .cell{position:relative}.recent[data-v-70fd2b78]{margin-left:1rem;margin-top:.6rem}#repositoryMainList[data-v-70fd2b78] .el-table:before,#repositoryMainList[data-v-70fd2b78] .el-tabs__nav-wrap:after{background-color:#fff!important}#repositoryMainList[data-v-70fd2b78] .el-tabs__item.is-active,#repositoryMainList[data-v-70fd2b78] .el-tabs__item:hover{color:#4e7ff9}#repositoryMainList[data-v-70fd2b78] .el-tabs__active-bar{background-color:#4e7ff9}#table[data-v-0367c742] .header-cell-row{background-color:#f2f2f2!important}#table[data-v-0367c742] .el-table__row .operate-icon-display{display:none}#table[data-v-0367c742] .el-table__row:hover .operate-icon-display{display:inline-block}#repositoryInfoUpfile[data-v-5fba02ef] .el-table__row .operate-icon-display{display:none}#repositoryInfoUpfile[data-v-5fba02ef] .el-table__row:hover .operate-icon-display{display:inline-block}#repositoryInfo[data-v-0995ff66] .awsui-dialog__body{padding:10px 20px 20px 20px;color:#606266;font-size:14px;word-break:break-all}#repositoryInfo[data-v-0995ff66] .awsui-dialog__header{padding:0}#repositoryInfo[data-v-0995ff66] .el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#f2f2f2;z-index:1}#repositoryInfo[data-v-0995ff66] .el-tabs__active-bar{height:1px;background-color:#4e7ff9}#repositoryInfo[data-v-0995ff66] .el-tabs__item.is-active{color:#4e7ff9}#repositoryInfo[data-v-0995ff66] .el-tabs__item{color:#606266}#repositoryInfo[data-v-0995ff66] .awsui-dialog__headerbtn{z-index:999}#palRepositoryTree[data-v-07ba25f0] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}#palRepositoryTree[data-v-07ba25f0] .el-input__inner{border-radius:0}#palRepositoryTree[data-v-07ba25f0] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f5f7fa;color:#4e7ff9}#palRepositoryTree[data-v-07ba25f0] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content .awsui-iconfont{color:#4e7ff9!important}.tree[data-v-07ba25f0]{overflow:auto;width:458px;height:300px}#palRepositoryTree[data-v-07ba25f0] .el-tree{min-width:100%;display:inline-block!important}.icon-div-repository[data-v-6b93b910]{position:absolute;border-radius:10%;left:0;display:inline-block;width:32px;height:32px;text-align:center;line-height:32px;vertical-align:middle}.icon-dynamic-repository[data-v-6b93b910]{color:#fff;font-size:18px}.div-repository-title[data-v-6b93b910]{display:inline-block;position:relative;left:32px;text-align:center;height:32px;line-height:32px;font-size:13px}.div-repository-title[data-v-6b93b910] :hover{color:#4e7ff9}.div-update-date[data-v-6b93b910]{display:inline-block;position:relative;left:30px;text-align:center;height:30px;line-height:30px;font-size:12px;color:#92a2b2}.icon-div-repository-detail[data-v-6b93b910]{display:inline-block;width:30px;height:30px;text-align:center;line-height:30px;vertical-align:middle;border-radius:10%;left:0;position:absolute}.icon-repository-detail[data-v-6b93b910]{color:#fff;font-size:16px}.icon-repository-detail-title[data-v-6b93b910]{display:inline-block;position:relative;left:30px;text-align:left;height:30px;line-height:30px;width:200px;margin-left:10px}#repositoryListFolderDlg[data-v-6b93b910] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}#repositoryListFolderDlg[data-v-6b93b910] .el-form-item__label{line-height:0}#repositoryList[data-v-6b93b910] .el-table td,.el-table th[data-v-6b93b910]{padding:8px 0}#repositoryList[data-v-6b93b910] .el-table td{border-bottom:0 solid #f2f2f2}#repositoryList[data-v-6b93b910] .el-table__row .non-favorite-display{display:none}#repositoryList[data-v-6b93b910] .el-table__row:hover .non-favorite-display{display:inline-block}#repositoryList[data-v-6b93b910] .el-table__row .operate-icon-display{display:none}#repositoryList[data-v-6b93b910] .el-table__row:hover .operate-icon-display{display:inline-block}#repositoryList[data-v-6b93b910] .row-repository-title .cell{position:relative}.cur-title[data-v-6b93b910]:hover{color:#4e7ff9;cursor:pointer}.cur-title .cur-title-operate[data-v-6b93b910]{display:none}.cur-title:hover .cur-title-operate[data-v-6b93b910]{display:inline-block}.aside-repository-operate-li[data-v-6b93b910]{height:50px;line-height:50px;padding-left:20px;cursor:pointer;font-size:13px}.aside-repository-operate-li span[data-v-6b93b910]{display:inline-block}.aside-repository-operate-li-icon[data-v-6b93b910]{padding-right:10px;position:relative;top:1px;font-size:13px}#repositoryList[data-v-6b93b910] .awsui-halve-green{background-color:#1aa477}#repositoryList[data-v-6b93b910] .el-table:before{height:0!important}#repositoryList[data-v-6b93b910] .hideCheckBoxCell .el-checkbox__input{visibility:hidden}#repositoryList[data-v-6b93b910] .el-table__body-wrapper::-webkit-scrollbar{display:none}.repository-path-title[data-v-6b93b910]:hover{color:#4e7ff9}.icon-operate[data-v-6b93b910]:hover{color:#4e7ff9!important}.el-dropdown-row[data-v-6b93b910]{height:30px;line-height:30px}.el-dropdown-row[data-v-6b93b910] :hover{color:#4e7ff9!important}.repository-img-halve[data-v-6b93b910]{right:0;transform:rotate(45deg) translate(29%,-90%);position:absolute;top:0;z-index:9;height:24px;line-height:24px;font-size:12px;white-space:nowrap;color:#fff;padding:0 50px}.repository-img-halve span[data-v-6b93b910]{position:relative;top:0}#repository[data-v-1940ea76] .el-main{display:block;flex:1;flex-basis:auto;overflow:auto;padding:0}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-b9b8e2d8.de12d1d4.css b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-b9b8e2d8.de12d1d4.css
                                                  new file mode 100644
                                                  index 00000000..4a974883
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/css/chunk-b9b8e2d8.de12d1d4.css
                                                  @@ -0,0 +1 @@
                                                  +.inline-block[data-v-08929cd1]{display:inline-block}.label-padding[data-v-08929cd1]{padding-bottom:8px;padding-top:8px}.workspace-import[data-v-4fcb9135] .el-dialog__body,.workspace-update[data-v-08929cd1] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}.repository-query[data-v-258815a1] .el-dialog__body{padding:0;color:#606266;font-size:14px;word-break:break-all}.repository-query[data-v-258815a1] .el-dialog__header{padding:0}.repository-query[data-v-258815a1] .el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#f2f2f2;z-index:1}.repository-query[data-v-258815a1] .el-tabs__active-bar{height:1px;background-color:#4e7ff9}.repository-query[data-v-258815a1] .el-tabs__item.is-active{color:#4e7ff9;font-weight:600!important}.repository-query[data-v-258815a1] .el-checkbox,.repository-query[data-v-258815a1] .el-radio{margin-right:0}.repository-query[data-v-258815a1] .el-radio__input.is-checked .el-radio__inner{border-color:#4e7ff9;background:#4e7ff9}.repository-query[data-v-258815a1] .el-checkbox__input.is-checked+.el-checkbox__label,.repository-query[data-v-258815a1] .el-checkbox__label,.repository-query[data-v-258815a1] .el-radio__input.is-checked+.el-radio__label,.repository-query[data-v-258815a1] .el-radio__label{color:#606266;font-weight:400}.repository-query[data-v-258815a1] .el-checkbox__input.is-checked+.el-checkbox__label:hover,.repository-query[data-v-258815a1] .el-checkbox__label:hover,.repository-query[data-v-258815a1] .el-radio__input.is-checked+.el-radio__label:hover,.repository-query[data-v-258815a1] .el-radio__label:hover{color:#4e7ff9}.repository-query[data-v-258815a1] .el-tabs__item{color:#606266;font-weight:400!important}.repository-query[data-v-258815a1] .el-tabs__item:hover{color:#4e7ff9}.repository-query[data-v-258815a1] .el-dialog__headerbtn{z-index:999;top:16px;right:8px}.repository-query[data-v-258815a1] .el-input__inner{border:0;padding-left:45px}.repository-query[data-v-258815a1] .el-tabs__header{padding-left:20px;padding-right:20px;border-bottom:1px solid #f2f2f2;margin-bottom:0}.el-table--mini th[data-v-258815a1],.repository-query[data-v-258815a1] .el-table--mini td{padding:0}.repository-query[data-v-258815a1] .el-table__row:hover .icon-open-repository{display:inline-block}.repository-query[data-v-258815a1] .el-table__row .icon-open-repository{display:none}.repository-query[data-v-258815a1] .el-table__empty-block{height:470px!important}.icon-div-repository[data-v-258815a1]{position:absolute;border-radius:50%;left:0}.li-general-hover-bgcolor :hover .icon-open-repository[data-v-258815a1]{display:inline}.li-general-hover-bgcolor .icon-open-repository[data-v-258815a1]{display:none}.icon-open-repository[data-v-258815a1]:hover{color:#4e7ff9!important}.query-filter-item-checkbox-group[data-v-258815a1]{padding-left:10px}.query-filter-item-checkbox[data-v-258815a1]{height:24px}.basic-query-div[data-v-258815a1]{width:350px;position:absolute;top:40px;background-color:#fff;z-index:3000;border-radius:3px;border:0 solid #f2f2f2;box-shadow:0 2px 5px 0 hsla(0,0%,66.7%,.3)}.li-general-height[data-v-258815a1]{height:50px;line-height:50px}.li-div-basic-query[data-v-258815a1]{display:inline-block;width:100%;position:relative;line-height:50px;vertical-align:middle}.li-basic-icon-div[data-v-258815a1]{display:inline-block;width:32px;height:32px;text-align:center;line-height:32px;vertical-align:middle;top:10px}.li-basic-icon[data-v-258815a1]{color:#fff;font-size:18px}.li-basic-title-div[data-v-258815a1]{display:inline-block;cursor:pointer;position:relative;left:40px;text-align:left;width:260px;height:48px;line-height:48px;vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-div-condition-query[data-v-258815a1]{display:inline-block;width:32px;height:32px;text-align:center;line-height:32px;vertical-align:middle;border-radius:50%;left:9px;position:relative}.icon-condition-query[data-v-258815a1]{color:#fff;font-size:18px}.condition-query-row-name[data-v-258815a1]{display:inline-block;width:427px;height:14px;line-height:14px;font-size:13px;position:relative;top:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.condition-query-row-name span[data-v-258815a1]:hover{color:#4e7ff9!important;cursor:pointer}.condition-query-row-desc[data-v-258815a1]{display:inline-block;font-size:12px;transform:scale(.8);transform-origin:0 0;width:533px;height:14px;line-height:14px;position:relative;top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:default}.condition-query-header[data-v-258815a1] .el-input__inner{height:46px;line-height:46px}.condition-query-header[data-v-258815a1] .el-input__icon{font-size:16px!important;width:46px;hight:46px}.condition-query-clear[data-v-258815a1]{font-size:12px;cursor:pointer}.condition-query-clear[data-v-258815a1]:hover{color:#4e7ff9!important}.query-filter-item-title[data-v-258815a1]{display:inline-block;width:100%;padding:6px 0 6px 0;font-weight:600;font-size:14px}.condition-query-item-fold[data-v-258815a1]{font-weight:600;font-size:12px;cursor:pointer}.condition-query-item-fold[data-v-258815a1]:hover{color:#4e7ff9}.condition-query-item-fold-more[data-v-258815a1]{cursor:pointer;font-size:12px}.condition-query-item-fold-more[data-v-258815a1]:hover{color:#4e7ff9}.el-table[data-v-258815a1]:before{height:0}#update[data-v-87330138] .el-step__title{font-size:12px}#update[data-v-87330138] .awsui-icon-picker-box1{border-radius:15%}.icon-team-div[data-v-87330138]{height:70px;width:70px;line-height:70px;display:inline-block;position:absolute;z-index:2;right:30px;top:50px}.icon-team[data-v-87330138]{color:#fff;font-size:52px}.el-header[data-v-1fb2507b]{padding-right:0;padding-left:0}.header-row[data-v-1fb2507b]{border-bottom:1px solid #f2f2f2;box-shadow:0 2px 5px 0 hsla(0,0%,66.7%,.3);height:39px;line-height:40px;vertical-align:middle;padding-top:8px;padding-bottom:8px;padding-left:20px;padding-right:20px}.header-font[data-v-1fb2507b]{font-size:16px!important;font-weight:600}.nav-center[data-v-1fb2507b],.nav-left[data-v-1fb2507b]{display:inline-block;float:left}.nav-right[data-v-1fb2507b]{display:inline-block;float:right}.nav-app-list-ul[data-v-1fb2507b]{max-width:1024px;overflow-x:auto;overflow-y:hidden;white-space:nowrap}.nav-app-list-ul li[data-v-1fb2507b]{width:200px}.app-div[data-v-1fb2507b]{height:56px;padding-left:20px}.app-div:hover div div p[data-v-1fb2507b]{color:#4e7ff9}.app-label-p-title[data-v-1fb2507b]{font-size:13px}.app-label-p-desc[data-v-1fb2507b]{-webkit-transform:scale(.9);transform-origin:0 0;font-size:12px}.app-icon-div[data-v-1fb2507b]{position:relative;top:-1px;width:32px;height:32px;line-height:32px;vertical-align:middle;text-align:center;border-radius:10%}.app-text-div[data-v-1fb2507b]{margin-left:7px;position:relative;top:12px}.app-text-div div p[data-v-1fb2507b]{width:140px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.user_photo_dropdown_span[data-v-1fb2507b]{width:26px;height:26px;vertical-align:middle}.user_photo_img[data-v-1fb2507b]{width:26px;height:26px;position:absolute;border-radius:50%;left:0}.inline-block[data-v-1fb2507b]{display:inline-block}.cursor-pointer[data-v-1fb2507b]{cursor:pointer}.nav-right-ul li[data-v-1fb2507b]{float:right}.icon-check-display[data-v-1fb2507b]{display:none}.app-icon[data-v-1fb2507b]{color:#a5b5ce}.app-icon[data-v-1fb2507b]:hover{color:#4e7ff9}.icon-main-div[data-v-1fb2507b]{border-radius:50%;display:inline-block;width:26px;height:26px;text-align:center;line-height:26px;vertical-align:middle;position:relative;top:-4px;margin-right:8px}.icon-i-ws[data-v-1fb2507b]{color:#fff;font-size:14px}.el-dropdown-link[data-v-1fb2507b]:hover{color:#4e7ff9}.el-dropdown-row[data-v-1fb2507b]{min-height:46px;line-height:46px}.el-dropdown-row[data-v-1fb2507b] :hover{color:#4e7ff9!important}.navigation-dropdown-area[data-v-1fb2507b]{min-width:250px;max-height:370px;overflow-y:auto}#appPopover[data-v-1fb2507b] .el-popover__title{color:#606266;font-weight:600}#repositoryQueryArea div[data-v-1fb2507b] .el-input__inner{color:#8e8e8e!important;background-color:#f0f3f9!important;border:0}.quick-access-btn[data-v-1fb2507b]{display:inline-block;cursor:pointer;color:#999;padding:0 5px}.quick-access-btn-icon[data-v-1fb2507b]{font-size:18px}.quick-access-btn-text[data-v-1fb2507b]{position:relative;top:-2px;padding-left:3px}.quick-access-btn[data-v-1fb2507b] :hover{color:#4e7ff9!important}#pwd1[data-v-8c1454a0],#pwd2[data-v-8c1454a0],#pwd3[data-v-8c1454a0]{display:inline-block}.pwd-change[data-v-8c1454a0] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}#workspaceBackUp[data-v-f171001a] .el-main{display:block;flex:1;flex-basis:auto;overflow:auto;padding:0 20px 0}#workspaceBackUp[data-v-f171001a] .el-dialog__body{padding:10px 20px;color:#606266;font-size:14px;word-break:break-all}#workspaceBackupTable[data-v-f171001a] .item{margin-left:5px;margin-right:5px}.awsui-main[data-v-a3e13d60]{padding:0}.treeWrapper[data-v-a3e13d60]{padding-right:2rem;border-right:3px dashed grey}.markWrapper[data-v-a3e13d60]{padding-right:2rem;height:100%}.treeHeader[data-v-a3e13d60]{padding-top:1rem;padding-left:2rem;padding-bottom:1rem}.treeMain[data-v-a3e13d60]{overflow-y:auto}.treeMain[data-v-a3e13d60]::-webkit-scrollbar{display:none}.treeHeader .textWrapper[data-v-a3e13d60]{display:inline}.treeHeader .title[data-v-a3e13d60]{font-size:1.2rem;margin-right:1rem}.treeHeader .desc[data-v-a3e13d60]{margin-left:1rem}.treeHeader .button[data-v-a3e13d60]{display:inline;float:right}.noData[data-v-a3e13d60]{width:100%;height:90%;display:flex;align-items:center;justify-content:center}.noData .wrapper[data-v-a3e13d60]{width:300px;margin:auto}.fileWrapper[data-v-a3e13d60]{padding-left:2rem}.fileWrapper .fileList[data-v-a3e13d60]{padding-left:1rem}.fileWrapper .fileList li[data-v-a3e13d60]{list-style:none;margin-top:1rem;cursor:pointer}.font12[data-v-a3e13d60]{font-size:12px}.font16[data-v-a3e13d60]{font-size:16px}.blue[data-v-a3e13d60]{color:#4e7ff9}.red[data-v-a3e13d60]{color:#f56c6c}.ml12[data-v-a3e13d60]{margin-left:12px}.noView[data-v-a3e13d60]{display:none}.mt1rem[data-v-a3e13d60]{margin-top:1rem}#recycle[data-v-588f5c6f] .el-main{padding:0 20px}#table[data-v-588f5c6f] .item{margin-left:15px;margin-right:15px}#table[data-v-588f5c6f] .el-table__row .operate-icon-display{display:none}#table[data-v-588f5c6f] .el-table__row:hover .operate-icon-display{display:inline-block}#table[data-v-588f5c6f] .row-checkbox-hide .el-checkbox__input{display:none}#methodAttribute[data-v-5f20b270] .el-tree-node__content{background-color:#f8f8f8}#methodAttribute[data-v-5f20b270] .el-tree-node__content:hover{background-color:#d4d4d4}#methodAttribute[data-v-5f20b270] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f5f7fa;color:#4e7ff9}#methodAttribute[data-v-5f20b270] .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content .awsui-iconfont{color:#4e7ff9!important}#methodAttribute[data-v-5f20b270] .awsui-main{padding:10px}#methodAttribute[data-v-5f20b270] .awsui-sidebar__header{margin-bottom:0;padding:15px 20px 15px 20px;border-bottom:1px solid #f2f2f2;font-size:16px}.attr-aside[data-v-5f20b270]{background-color:#f8f8f8;overflow:hidden}#methodAttribute[data-v-5f20b270] .input-update-attr-name input{border-style:dashed!important}#methodAttribute[data-v-5f20b270] .el-table__row .operate-icon-display{display:none}#methodAttribute[data-v-5f20b270] .el-table__row:hover .operate-icon-display{display:inline-block}.attr[data-v-5f20b270]{cursor:move}.div-button-small[data-v-5f20b270]{width:32.8%}.div-button-small[data-v-5f20b270],.div-button[data-v-5f20b270]{display:inline-block;height:35px;border:1px solid #e9e9e9;line-height:37px;vertical-align:middle;text-align:center;cursor:pointer}.div-button[data-v-5f20b270]{width:49%}#methodAttribute[data-v-5f20b270] .el-table__body-wrapper:hover{cursor:pointer}#methodShapeAnchor[data-v-821aa6b2] .el-dialog__body,#updateShapeAnchor[data-v-821aa6b2] .el-dialog__body{padding:5px 20px}.row-div[data-v-821aa6b2] :hover{background-color:#f5f7fa}.row-div :hover .row-operate-icon[data-v-821aa6b2]{display:block!important}.el-col[data-v-821aa6b2]{padding:0 10px}.loc[data-v-821aa6b2]{position:absolute;width:11px;height:11px;left:10px;top:18px;border:1px solid #333;background:#fff}.loc-point[data-v-821aa6b2]{display:block;position:absolute;width:5px!important;height:5px;background:#dd4b39;top:3px;left:3px}.loc-horizontal-icon[data-v-821aa6b2]{position:relative;float:left;margin-left:30px}.loc-verity-icon[data-v-821aa6b2]{position:relative;float:left;margin-left:60px}.update-loc[data-v-821aa6b2]{position:absolute;width:11px;height:11px;border:1px solid #333;background:#fff}.update-loc-horizontal-icon[data-v-821aa6b2],.update-loc-verity-icon[data-v-821aa6b2]{position:relative;float:left;top:10px;margin-right:12px}.column-arrow-down[data-v-821aa6b2]{float:right;font-size:15px;color:#c0c4cc;position:relative;right:6px;top:10px}.icon-opts[data-v-821aa6b2] :hover{background-color:#f5f7fa}.methodShapeAnchorUpdatePopover{margin-top:0!important}.methodShapeAnchorUpdateAttrPopover{margin-top:1px!important}#methodObject[data-v-264d48c2] .awsui-sidebar__header{margin-bottom:0;padding:15px 20px 15px 20px;border-bottom:1px solid #f2f2f2;font-size:16px}.icon-div-repository[data-v-264d48c2]{border-radius:50%;margin-left:15px;display:inline-block;width:30px;height:30px;text-align:center;line-height:30px;vertical-align:middle}.icon-dynamic-repository[data-v-264d48c2]{color:#fff;font-size:16px}.div-repository-title[data-v-264d48c2]{display:inline-block;position:relative;left:10px;text-align:center;height:30px;line-height:30px;vertical-align:middle}.attr-row[data-v-264d48c2]{padding:10px 20px;height:35px;line-height:35px;vertical-align:middle}.attr-row[data-v-264d48c2]:hover{background-color:#f2f2f2}.header-div[data-v-264d48c2]{width:100%;height:100%;background-color:#f5f7fa;line-height:43px;vertical-align:middle}.header-method-id[data-v-264d48c2]{display:inline-block;font-size:12px;position:relative;left:0}.header-method-attr-config-icon[data-v-264d48c2]{display:inline-block;height:30px;line-height:30px;vertical-align:middle;position:relative;left:10px}#method[data-v-5e1b2666] .el-main{padding:0}.text-color-white[data-v-5e1b2666]{color:#fff}.el-dropdown-row[data-v-5e1b2666]{height:46px;line-height:46px}.el-dropdown-row[data-v-5e1b2666] :hover{color:#4e7ff9!important}#main[data-v-0a1095dc]{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50;margin-top:0}.main[data-v-0a1095dc] .awsui-sidebar__wrapper{position:static}
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/element-icons.535877f5.535877f5.woff b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/element-icons.535877f5.535877f5.woff
                                                  new file mode 100644
                                                  index 00000000..02b9a253
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/element-icons.535877f5.535877f5.woff differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/element-icons.732389de.732389de.ttf b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/element-icons.732389de.732389de.ttf
                                                  new file mode 100644
                                                  index 00000000..91b74de3
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/element-icons.732389de.732389de.ttf differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.3420a3a6.3420a3a6.ttf b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.3420a3a6.3420a3a6.ttf
                                                  new file mode 100644
                                                  index 00000000..88b3e824
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.3420a3a6.3420a3a6.ttf differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.39220b34.ttf b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.39220b34.ttf
                                                  new file mode 100644
                                                  index 00000000..208d7a42
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.39220b34.ttf differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.392a0f97.392a0f97.eot b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.392a0f97.392a0f97.eot
                                                  new file mode 100644
                                                  index 00000000..3a922f82
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.392a0f97.392a0f97.eot differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.51373027.51373027.woff b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.51373027.51373027.woff
                                                  new file mode 100644
                                                  index 00000000..9be4a93a
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.51373027.51373027.woff differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.55c2c59e.woff b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.55c2c59e.woff
                                                  new file mode 100644
                                                  index 00000000..595a29f1
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.55c2c59e.woff differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.83929535.eot b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.83929535.eot
                                                  new file mode 100644
                                                  index 00000000..3d57bf8d
                                                  Binary files /dev/null and b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/fonts/iconfont.83929535.eot differ
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/img/iconfont.71026185.svg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/img/iconfont.71026185.svg
                                                  new file mode 100644
                                                  index 00000000..e9707f9e
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/img/iconfont.71026185.svg
                                                  @@ -0,0 +1,467 @@
                                                  +<?xml version="1.0" standalone="no"?>
                                                  +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
                                                  +<!--
                                                  +2013-9-30: Created.
                                                  +-->
                                                  +<svg>
                                                  +<metadata>
                                                  +Created by iconfont
                                                  +</metadata>
                                                  +<defs>
                                                  +
                                                  +<font id="iconfont" horiz-adv-x="1024" >
                                                  +  <font-face
                                                  +    font-family="iconfont"
                                                  +    font-weight="500"
                                                  +    font-stretch="normal"
                                                  +    units-per-em="1024"
                                                  +    ascent="896"
                                                  +    descent="-128"
                                                  +  />
                                                  +    <missing-glyph />
                                                  +    
                                                  +    <glyph glyph-name="ditu" unicode="&#58932;" d="M511.662821 422.902008c61.621453 0 111.799272 47.734164 111.799272 106.47194 0 58.737776-50.177819 106.469893-111.799272 106.469893-61.620429 0-111.798249-47.732118-111.798249-106.469893C399.863549 470.636173 450.041368 422.902008 511.662821 422.902008zM511.662821 593.265094c37.07643 0 67.080791-28.605501 67.080791-63.891146 0-35.243689-30.003338-63.893192-67.080791-63.893192-37.011962 0-67.079768 28.649504-67.079768 63.893192C444.583053 564.659593 474.649835 593.265094 511.662821 593.265094zM824.065923 558.98229c-0.873903-14.937201-1.24434-26.683732-4.234441-49.436946l94.307899 29.740348 0-466.629673-268.320095-74.633814-312.577065 86.776366 0 0.12996-0.217964-0.089028-0.240477 0.089028 0-0.174985-223.597521-71.795163L109.18626 477.754291l92.561116 22.402219c-2.227738 12.797467-3.123131 26.420743-3.123131 40.048111l0 1.702782L64.467779 509.545344l0-553.665958 44.719504 14.456247 223.837998 71.925123 312.795029-86.656639 313.038576 86.700641L958.858886 596.014718 824.065923 558.98229zM394.186246 227.035062c1.746784-2.487657 3.472078-4.497431 4.869914-5.940292 40.962947-49.434899 82.231863-82.319867 84.022649-83.71668l28.757974-22.797215 28.626991 22.971178c1.790786 1.39886 42.927695 34.674731 83.804684 83.937714 1.397836 1.483794 3.188622 3.5345 4.913916 6.070252 58.453297 75.899644 131.122363 185.866175 147.544381 281.069467 3.164063 21.703301 3.25309 34.848693 3.25309 36.288484 0.547469 71.143317-27.90556 138.002051-80.093153 188.04991-50.528813 48.475038-117.390617 75.15877-188.224896 75.15877-70.550823 0-137.235594-26.683732-187.764408-75.15877-52.472072-50.307779-81.099063-117.520577-80.551594-189.183733 0-1.13587 0.085958-14.326287 3.123131-34.981722C264.112772 406.917966 346.125647 289.137469 394.186246 227.035062zM511.662821 765.548926c123.438357 0 224.493937-98.390891 223.598544-220.62891 0 0 0-11.047614-2.687202-29.389354-14.760169-85.59547-84.503603-191.629435-140.40375-264.037559-0.458441-0.873903-1.353834-1.702782-1.790786-2.139733-38.908148-47.254234-78.716806-79.219249-78.716806-79.219249s-39.806611 31.529087-78.715783 78.782298c-0.436952 0.436952-1.332345 1.309832-1.790786 2.139733C375.256104 323.027323 305.511647 429.497217 290.751478 514.700761c-2.686179 18.297738-2.686179 29.390377-2.686179 29.390377C287.169907 666.326087 388.224464 765.548926 511.662821 765.548926z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="renwuqingdan" unicode="&#59129;" d="M512 676.571429 473.572571 702.429257 370.143086 598.999771 318.429257 650.7136 266.715429 598.999771 370.143086 495.572114ZM548.571429 603.428571l219.428571 0 0-36.571429-219.428571 0 0 36.571429ZM512 457.142857 473.572571 483.000686 370.143086 379.5712 318.429257 431.285029 266.715429 379.5712 370.143086 276.143543ZM548.571429 384l219.428571 0 0-36.571429-219.428571 0 0 36.571429ZM877.714286 859.428571 146.285714 859.428571c-20.214857 0-36.571429-16.374857-36.571429-36.571429l0-877.714286c0-20.214857 16.356571-36.571429 36.571429-36.571429l475.428571 0 292.571429 256L914.285714 822.857143C914.285714 843.053714 897.929143 859.428571 877.714286 859.428571zM658.285714 37.7856 658.285714 164.571429l144.928914 0L658.285714 37.7856zM841.142857 237.714286 621.714286 237.714286c-20.214857 0-36.571429-16.356571-36.571429-36.571429l0-219.428571L182.857143-18.285714 182.857143 786.285714l658.285714 0L841.142857 237.714286z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xiazai" unicode="&#58939;" d="M258.402 462.479l202.221-202.256c13.723-13.675 31.975-21.201 51.369-21.201 19.439 0 37.688 7.544 51.394 21.25l202.216 202.202c15.794 15.799 15.794 41.489 0 57.283-7.649 7.651-17.821 11.861-28.639 11.861s-20.989-4.211-28.639-11.861L552.503 363.954 552.503 801.789c0 22.341-18.168 40.505-40.505 40.505-22.337 0-40.5-18.171-40.5-40.505L471.498 363.92 315.68 519.757c-7.649 7.651-17.822 11.861-28.639 11.861-10.818 0-20.988-4.212-28.639-11.861-7.651-7.649-11.863-17.822-11.863-28.639S250.753 470.128 258.402 462.479zM811.947 735.164c-22.337 0-40.5-18.163-40.5-40.5s18.169-40.5 40.5-40.5c48.551 0 88.051-39.501 88.051-88.052l0-471.348c0-48.552-39.501-88.052-88.051-88.052L212.053 6.712c-48.552 0-88.051 39.501-88.051 88.052L124.002 566.112c0 48.552 39.496 88.052 88.051 88.052 22.337 0 40.5 18.163 40.5 40.5s-18.169 40.5-40.5 40.5C118.836 735.164 43 659.33 43 566.109l0-471.348c0-93.218 75.833-169.055 169.053-169.055l0 0 599.894 0c93.217 0 169.053 75.834 169.053 169.055L981 566.109C981 659.328 905.167 735.164 811.947 735.164z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tupian" unicode="&#58926;" d="M887.476828 895.871071 136.623117 895.871071c-18.862592 0-136.516676 0-136.516676-136.516676l0-750.809735c0-136.54466 136.516676-136.54466 136.516676-136.54466l750.85471 0c136.515676 0 136.515676 136.54466 136.515676 136.54466L1023.993504 759.354395C1023.992504 895.871071 906.352413 895.871071 887.476828 895.871071M955.733167 8.54466c0 0 0-68.258338-68.256339-68.258338L630.030876 208.432371 489.654329 86.517638l-210.643776 195.032389L68.377772 86.517638 68.377772 759.355395c0 68.258338 49.381753 68.258338 68.244346 68.258338L887.476828 827.613733c18.875585 0 68.256339 0 68.256339-68.258338L955.733167 8.54466zM682.699815 623.366428c-75.516333 0-136.725561-61.318167-136.725561-136.960431 0-75.586295 61.209227-136.932446 136.725561-136.932446 75.477355 0 136.725561 61.347151 136.725561 136.932446C819.425376 562.047261 758.17717 623.366428 682.699815 623.366428"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biaozhunjianmro" unicode="&#59084;" d="M767.987465 767.982476l-511.974929 0-255.986953-447.977423 255.986953-447.977423 511.974929 0 255.986953 447.977423L767.987465 767.982476zM730.863999-63.976912l-437.729022 0-219.426306 383.980941 219.426306 383.980941 437.729022 0 219.363884-383.980941L730.863999-63.976912zM511.999488 511.993476c-106.119817 0-191.99047-85.934099-191.99047-191.989447 0-106.058418 85.870654-191.991494 191.99047-191.991494 105.994973 0 191.99047 85.934099 191.99047 191.991494C703.989959 426.060401 617.994462 511.993476 511.999488 511.993476zM511.999488 192.009018c-70.62136 0-127.992965 57.43505-127.992965 127.995011 0 70.557915 57.371605 127.992965 127.992965 127.992965 70.558938 0 127.993988-57.43505 127.993988-127.992965C639.993476 249.444067 582.558427 192.009018 511.999488 192.009018z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xinjian" unicode="&#59029;" d="M932 603.2l-262.8 264.4c-18.1 18.2-42.7 28.4-68.3 28.4L108 896c-59.7 0-108-48.4-108-108l0-808c0-59.7 48.4-108 108-108l744 0c59.7 0 108 48.4 108 108L960 535.3C960 560.8 949.9 585.2 932 603.2zM896-20c0-24.3-19.7-44-44-44L108-64c-24.3 0-44 19.7-44 44l0 808c0 24.3 19.7 44 44 44l492.9 0c8.5 0 16.9-3.5 22.9-9.5l262.8-264.4c6.1-6.1 9.4-14.2 9.4-22.8L896-20zM736 385 512.1 385l0 223c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223L224 385c-17.7 0-32-14.3-32-32s14.3-32 32-32l224.1 0 0-225c0-17.7 14.3-32 32-32s32 14.3 32 32l0 225L736 321c17.7 0 32 14.3 32 32S753.7 385 736 385z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="share_link" unicode="&#58895;" d="M735.877 831.758c-59.811 0-116.028-23.288-158.304-65.574l-167.91-167.907c-42.293-42.251-65.572-98.497-65.572-158.274 0-76.547 38.6-146.988 103.27-188.484 9.802-6.279 21.22-7.991 31.759-5.625 10.442 2.297 20.002 8.573 26.236 18.313 6.259 9.776 7.982 21.126 5.66 31.62-2.298 10.493-8.585 20.133-18.34 26.374-40.469 25.96-64.63 69.994-64.63 117.802 0 37.383 14.549 72.5 40.982 98.909l167.917 167.907c26.415 26.443 61.561 40.984 98.933 40.984 77.148 0 139.925-62.76 139.925-139.891 0-37.381-14.56-72.5-40.982-98.94l-79.651-79.668c-8.393-8.402-12.483-19.445-12.295-30.456 0.19-10.493 4.287-20.884 12.295-28.91 8.197-8.196 18.939-12.278 29.683-12.278 10.752 0 21.495 4.082 29.674 12.278l79.651 79.668c42.294 42.253 65.58 98.496 65.58 158.306-0.001 123.429-100.433 223.846-223.88 223.846zM576.627 516.483c-9.799 6.309-21.22 8.024-31.755 5.656-10.436-2.295-20.003-8.607-26.238-18.313-6.247-9.774-7.981-21.125-5.65-31.619 2.289-10.495 8.574-20.132 18.33-26.373 40.478-25.962 64.638-69.995 64.638-117.805 0-37.38-14.558-72.498-40.984-98.94l-167.915-167.909c-26.417-26.407-61.559-40.982-98.934-40.982-77.147 0-139.923 62.795-139.923 139.922 0 37.383 14.549 72.501 40.982 98.941l79.643 79.668c8.393 8.368 12.49 19.446 12.301 30.454-0.188 10.459-4.295 20.886-12.301 28.91-8.198 8.198-18.94 12.278-29.676 12.278-10.76 0-21.493-4.080-29.682-12.278l-79.65-79.667c-42.295-42.251-65.572-98.495-65.572-158.308 0-123.425 100.433-223.877 223.878-223.877 59.811 0 116.021 23.285 158.297 65.606l167.909 167.909c42.295 42.251 65.581 98.497 65.581 158.271 0.001 76.549-38.606 146.991-103.279 188.456z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="diaozhengdaxiaoresize5" unicode="&#59168;" d="M874.24 291.50208c22.29248 2.14016 42.97728 11.73504 59.2384 27.56608l0-282.50112c0-48.85504-39.76192-88.59648-88.6272-88.59648l-634.9824 0c-48.87552 0-88.63744 39.74144-88.63744 88.59648L121.23136 670.8736c0 48.85504 39.76192 88.60672 88.63744 88.60672l283.26912 0c-15.24736-15.64672-25.38496-36.29056-27.60704-59.22816L209.85856 700.25216c-16.20992 0-29.39904-13.17888-29.39904-29.37856l0-634.29632c0-16.18944 13.18912-29.36832 29.39904-29.36832l634.9824 0c16.20992 0 29.39904 13.17888 29.39904 29.36832L874.24 291.50208zM890.15296 765.55264 589.2608 765.55264c-24.53504 0-44.42112-19.88608-44.42112-44.43136 0-24.53504 19.88608-44.42112 44.42112-44.42112l191.21152 0c-1.8432-1.34144-3.6864-2.70336-5.34528-4.37248L461.6704 358.89152l0 193.6384c0 24.53504-19.88608 44.42112-44.42112 44.42112-12.26752 0-23.37792-4.95616-31.41632-13.0048-8.0384-8.05888-13.01504-19.13856-13.01504-31.41632l0-300.9024c0-24.5248 19.88608-44.42112 44.42112-44.42112L718.1312 207.2064c24.53504 0 44.42112 19.89632 44.42112 44.4416 0 24.5248-19.88608 44.42112-44.42112 44.42112L526.94016 296.06912c1.8432 1.34144 3.67616 2.70336 5.33504 4.36224l313.43616 313.4464 0-193.64864c0-24.53504 19.88608-44.42112 44.42112-44.42112 12.26752 0 23.37792 4.95616 31.41632 13.0048 8.0384 8.05888 13.01504 19.1488 13.01504 31.41632L934.56384 721.13152C934.57408 745.65632 914.67776 765.55264 890.15296 765.55264z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon4" unicode="&#58924;" d="M947.960675 696.671209l-92.764753-92.548836-123.656321 123.434264 92.768847 92.548836c17.024745 17.029862 44.745087 17.029862 61.824067 0l61.828161-61.715597C965.044772 741.362061 965.044772 713.694931 947.960675 696.671209zM298.47437 295.581228l123.656321-123.434264-164.803463-41.091884L298.47437 295.581228zM824.308447 573.233875 453.287295 202.977134 329.634044 326.413444l370.962823 370.256742L824.308447 573.233875zM154.843112 699.727825l0-673.501254 673.503301 0L828.346413 512.115889l87.855954 87.853907L916.202367-17.702941c0-24.287149-19.641339-43.930535-43.927465-43.930535L110.91667-61.633477c-24.282033 0-43.927465 19.642362-43.927465 43.930535L66.989205 743.65529c0 24.281009 19.645432 43.926442 43.927465 43.926442l620.184955 0-87.85493-87.853907L154.843112 699.727825z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="35" unicode="&#58913;" d="M467.2-128c-25.6 0-44.8 6.4-57.6 25.6l-384 384c-32 32-32 89.6 0 121.6L512 889.6C518.4 896 531.2 896 537.6 896l377.6-83.2c12.8 0 19.2-12.8 25.6-25.6L1024 409.6c0-12.8 0-19.2-6.4-32l-486.4-486.4C512-121.6 492.8-128 467.2-128zM544 832 70.4 358.4C64 345.6 64 332.8 70.4 326.4l384-384c6.4-6.4 19.2-6.4 32 0L960 416l-76.8 339.2L544 832zM652.8 364.8c-44.8 0-83.2 19.2-115.2 44.8-64 64-64 166.4 0 230.4 32 32 70.4 44.8 115.2 44.8 44.8 0 83.2-19.2 115.2-44.8 32-32 44.8-70.4 44.8-115.2S800 441.6 768 409.6C736 377.6 697.6 364.8 652.8 364.8zM652.8 620.8c-25.6 0-51.2-12.8-70.4-25.6-38.4-38.4-38.4-102.4 0-140.8 38.4-38.4 102.4-38.4 140.8 0 19.2 19.2 25.6 44.8 25.6 70.4 0 25.6-12.8 51.2-25.6 70.4C704 614.4 678.4 620.8 652.8 620.8z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bianji2" unicode="&#59177;" d="M858.24 663.04l-132.48 133.12c-48.64 48.64-128 48.64-177.28 0l-460.8-461.44C72.32 318.72 64 298.24 64 277.12l0-211.84c0-42.24 21.76-64 64-64l213.76 1.28c21.76 0 42.24 8.96 56.96 23.68l459.52 460.8C907.52 535.04 907.52 614.4 858.24 663.04zM333.44 65.92 128 64.64 128 268.8c0 3.84 1.28 7.68 1.92 11.52 1.28-4.48 3.84-8.32 7.04-12.16l193.28-193.28c3.84-3.84 7.68-5.76 12.16-7.04C339.2 67.2 336.64 65.92 333.44 65.92zM382.08 97.28c0 7.68-3.2 14.72-8.96 20.48L179.84 311.04c-5.12 5.12-12.16 7.68-19.2 8.32l312.32 312.32 221.44-221.44L382.08 97.28zM814.08 530.56l-72.32-72.96L520.32 679.04l72.96 72.96c24.32 24.32 64 24.32 88.32 0l132.48-133.12C838.4 594.56 838.4 554.88 814.08 530.56z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="diannaopcxianshiqi" unicode="&#59245;" d="M832 768 192 768C121.344 768 64 710.656 64 640l0-384c0-70.656 57.344-128 128-128l640 0c70.656 0 128 57.344 128 128L960 640C960 710.656 902.656 768 832 768zM896 256c0-35.328-28.608-64-64-64L192 192c-35.392 0-64 28.672-64 64L128 640c0 35.392 28.608 64 64 64l640 0c35.392 0 64-28.608 64-64L896 256zM736 0l-448 0C270.336 0 256-14.336 256-32S270.336-64 288-64l448 0c17.664 0 32 14.336 32 32S753.664 0 736 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuxingliebiaoxiangqing" unicode="&#59415;" d="M288 256C270.08 256 256 241.92 256 224 256 206.08 270.08 192 288 192 305.92 192 320 206.08 320 224 320 241.92 305.92 256 288 256zM288 640C270.08 640 256 625.92 256 608 256 590.08 270.08 576 288 576 305.92 576 320 590.08 320 608 320 625.92 305.92 640 288 640zM288 448C270.08 448 256 433.92 256 416 256 398.08 270.08 384 288 384 305.92 384 320 398.08 320 416 320 433.92 305.92 448 288 448zM768 832 192 832C121.6 832 64 774.4 64 704l0-576c0-70.4 57.6-128 128-128l576 0c70.4 0 128 57.6 128 128L896 704C896 774.4 838.4 832 768 832zM832 128c0-35.2-28.8-64-64-64L192 64c-35.2 0-64 28.8-64 64L128 704c0 35.2 28.8 64 64 64l576 0c35.2 0 64-28.8 64-64L832 128zM672 640l-256 0C398.08 640 384 625.92 384 608 384 590.08 398.08 576 416 576l256 0C689.92 576 704 590.08 704 608 704 625.92 689.92 640 672 640zM672 448l-256 0C398.08 448 384 433.92 384 416 384 398.08 398.08 384 416 384l256 0C689.92 384 704 398.08 704 416 704 433.92 689.92 448 672 448zM672 256l-256 0C398.08 256 384 241.92 384 224 384 206.08 398.08 192 416 192l256 0c17.92 0 32 14.08 32 32C704 241.92 689.92 256 672 256z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yidongshu" unicode="&#58950;" d="M384 128C348.653776 128 320 99.346224 320 64 320 28.653776 348.653776 0 384 0 419.346224 0 448 28.653776 448 64 448 99.346224 419.346224 128 384 128ZM384 448C348.653776 448 320 419.346224 320 384 320 348.653776 348.653776 320 384 320 419.346224 320 448 348.653776 448 384 448 419.346224 419.346224 448 384 448ZM384 768C348.653776 768 320 739.346221 320 704 320 668.653779 348.653776 640 384 640 419.346224 640 448 668.653779 448 704 448 739.346221 419.346224 768 384 768ZM640 128C604.653776 128 576 99.346224 576 64 576 28.653776 604.653776 0 640 0 675.346221 0 704 28.653776 704 64 704 99.346224 675.346221 128 640 128ZM640 448C604.653776 448 576 419.346224 576 384 576 348.653776 604.653776 320 640 320 675.346221 320 704 348.653776 704 384 704 419.346224 675.346221 448 640 448ZM640 768C604.653776 768 576 739.346221 576 704 576 668.653779 604.653776 640 640 640 675.346221 640 704 668.653779 704 704 704 739.346221 675.346221 768 640 768Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhijiao-triangle" unicode="&#58962;" d="M71.675-66l-9.675 900 890.325-900z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tongzhi" unicode="&#58925;" d="M856.798419 102.887554l-73.742515 129.741923L783.055904 494.156866c0 100.20112-75.31636 208.644971-185.111998 248.378927-5.348821 53.104475-40.835034 91.831498-87.334068 91.831498-46.434565 0-82.048691-38.728046-87.332021-91.831498-109.73424-39.733956-185.049576-148.176784-185.049576-248.378927l0-261.527388-77.329203-136.096654c-5.158487-8.997931-5.03262-20.008706 0.125867-28.944216 5.15951-8.933463 14.724353-14.346753 25.042349-14.346753l184.04162 0c13.528108-65.310472 71.353095-114.51308 140.501988-114.51308 69.213361 0 127.036301 49.202609 140.500964 114.51308l184.04162 0c0.505513 0 0.881067 0 1.322112 0 16.045441 0 29.007661 12.898775 29.007661 28.944216C865.482195 90.302935 862.209662 97.664599 856.798419 102.887554M510.609839 776.291594c10.444886 0 18.875906-7.927553 24.287149-19.756973-8.05342 0.818645-15.85613 2.705622-24.287149 2.705622s-16.232706-1.886977-24.287149-2.705622C491.734956 768.365064 500.165975 776.291594 510.609839 776.291594M510.609839-3.258974c-36.808324 0-67.576071 23.657816-79.532381 56.500828l159.062715 0C578.186933 20.399865 547.482631-3.258974 510.609839-3.258974M235.90022 111.192707l56.502875 99.476619c2.515287 4.28049 3.89982 9.314133 3.89982 14.34573L296.302915 494.156866c0 97.747231 91.611487 207.070102 214.306924 207.070102 122.694413 0 214.431767-109.322871 214.431767-207.070102L725.041606 225.015056c0-5.031597 1.322112-10.06524 3.774977-14.34573l56.565297-99.476619L235.90022 111.192707z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="attribute" unicode="&#59055;" d="M323.333 242.667c-16.8 0-30-13.2-30-30s13.2-30 30-30c16.8 0 30 13.2 30 30 0 16.8-13.2 30-30 30zM323.333 602.667c-16.8 0-30-13.2-30-30s13.2-30 30-30c16.8 0 30 13.2 30 30 0 16.8-13.2 30-30 30zM323.333 422.667c-16.8 0-30-13.2-30-30s13.2-30 30-30c16.8 0 30 13.2 30 30 0 16.8-13.2 30-30 30zM773.333 782.667h-540c-66 0-120-54-120-120v-540c0-66 54-120 120-120h540c66 0 120 54 120 120v540c0 66-54 120-120 120zM833.333 122.667c0-33-27-60-60-60h-540c-33 0-60 27-60 60v540c0 33 27 60 60 60h540c33 0 60-27 60-60v-540zM683.333 602.667h-240c-16.8 0-30-13.2-30-30s13.2-30 30-30h240c16.8 0 30 13.2 30 30s-13.2 30-30 30zM683.333 422.667h-240c-16.8 0-30-13.2-30-30s13.2-30 30-30h240c16.8 0 30 13.2 30 30s-13.2 30-30 30zM683.333 242.667h-240c-16.8 0-30-13.2-30-30s13.2-30 30-30h240c16.8 0 30 13.2 30 30s-13.2 30-30 30z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhixingzhongduan" unicode="&#59234;" d="M255.842 502.65h134.9l82.277 112.491h-217.18c-97.334 0-176.539-79.203-176.539-176.534v-102.262c0-97.334 79.205-176.535 176.539-176.535h217.18l-84.036 112.491h-133.143c-35.318 0-64.046 28.727-64.046 64.046v102.262c-0.001 35.318 28.726 64.045 64.046 64.045v0zM760.953 615.139h-217.184l82.277-112.491h134.901c35.321 0 64.046-28.726 64.046-64.045v-102.262c0-35.318-28.726-64.046-64.046-64.046h-133.148l-84.036-112.491h217.184c97.329 0 176.535 79.205 176.535 176.535v102.262c0 97.334-79.206 176.534-176.535 176.534v0zM481.317 820.163h54.159v-137.151h-54.159v137.151zM695.484 735.023l-38.286 38.286-110.899-91.173 38.282-38.286 110.901 91.173zM470.496 682.137l-110.899 91.173-38.282-38.286 110.897-91.173 38.285 38.286zM481.317 91.055h54.159v-137.147h-54.159v137.147zM546.297 91.933l110.899-91.174 38.286 38.286-110.901 91.173-38.282-38.285zM321.314 39.043l38.282-38.286 110.899 91.174-38.285 38.285-110.897-91.173z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dagou1" unicode="&#58976;" d="M825.768 519.984 825.768 519.984 475.889 164.342l0 0c-8.265-8.395-19.68-13.595-32.287-13.595-12.607 0-24.022 5.2-32.29 13.595l0 0L213.584 365.371l0 0c-8.26 8.355-13.372 19.96-13.372 32.775 0 25.63 20.442 46.372 45.617 46.372 12.607 0 24.027-5.195 32.292-13.592l0 0 165.48-168.17 317.637 322.864 0 0c8.265 8.355 19.68 13.552 32.285 13.552 25.17 0 45.625-20.78 45.625-46.367C839.148 539.988 834.033 528.381 825.768 519.984L825.768 519.984 825.768 519.984z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="sanjiao" unicode="&#58970;" d="M750.331 438.797l-238.576-238.087-238.087 238.576z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chakan" unicode="&#58894;" d="M850.880127 453.010747l-48.063669 48.074925 106.260116 106.257046 48.061622-48.074925L850.880127 453.010747 850.880127 453.010747zM521.806343-5.576763c-95.499028 0-267.341814 68.695568-397.427568 282.381345C243.570411 477.475951 410.983305 553.956833 516.564969 553.956833c91.125417 0 214.228129-41.094954 386.967332-277.151227C740.13793 34.346505 617.308441-5.576763 521.806343-5.576763L521.806343-5.576763zM516.564969 496.425535c-87.37807 0-215.043704-50.818409-334.669222-224.850048 128.264269-176.190815 262.859733-219.634256 334.669222-219.634256 71.806419 0 211.782428 44.243667 329.452407 224.864374C735.765343 434.030463 607.008864 496.425535 516.564969 496.425535L516.564969 496.425535zM511.348154 135.60777c-77.976956 0-141.197836 63.206554-141.197836 141.197836 0 77.973886 63.22088 141.18351 141.197836 141.18351 77.973886 0 141.197836-63.209624 141.197836-141.18351C652.54599 198.814324 589.323063 135.60777 511.348154 135.60777L511.348154 135.60777zM511.348154 360.472144c-46.216601 0-83.680864-37.46631-83.680864-83.666538 0-46.216601 37.464263-83.669608 83.680864-83.669608 46.213531 0 83.652212 37.453007 83.652212 83.669608C595.001389 323.004811 557.561685 360.472144 511.348154 360.472144L511.348154 360.472144zM479.966423 773.576763l67.978231 0 0-172.563194-67.978231 0L479.966423 773.576763 479.966423 773.576763zM66.861804 557.364443l47.245024 48.822962 104.465237-107.943454-47.246047-48.820915L66.861804 557.364443 66.861804 557.364443zM66.861804 557.364443"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="lixian" unicode="&#59271;" d="M744.066403 493.933785l133.080971 64.10297 44.36237-45.328371-133.087111-64.10911L744.066403 493.933785zM655.353942 584.602807l177.443341 181.325765 44.350091-45.328371L699.704033 539.262156 655.353942 584.602807zM566.636365 675.25955l62.727647 136.016837 44.36851-45.347814-62.753229-135.997394L566.636365 675.25955zM633.918747 111.368716l35.18229-42.852994c25.440415-25.926486 66.476017-25.798573 91.711771 0.352017l68.849064 70.826092c25.235754 26.086122 25.037233 68.529793-0.37146 94.328365l-35.260062 42.865273c-18.007119 18.333554-43.933605 27.711132-66.578348 19.887956l-71.433936 73.960479c50.560536 52.185546 132.837424 52.42193 183.596482 0.594541l81.34261-89.8821c50.823526-51.935859 51.072189-136.343271 0.531096-188.593286L807.069319-25.460626C756.585531-77.525422 674.352645-77.82525 623.453395-25.946696l-81.317027 89.889263c-50.759057 52.000328-50.989301 136.343271-0.588401 188.522678l71.65804-72.496128C607.333252 157.669228 616.730273 128.927627 633.918747 111.368716zM411.68427 591.601198c7.228635 22.785959-1.63729 48.885384-19.280112 66.910922l-26.444279 43.358507c-25.113981 25.497721-65.420989 25.37697-90.182952-0.306992l-67.449181-69.668733c-24.794709-25.670659-24.685215-66.969251 0.261966-92.524277l26.444279-43.428092 52.863998-37.485753c16.765849-17.086144-8.546653 11.034311 12.800537 17.047258l69.75162-71.606875c-49.621141-51.284013-130.297578-51.514257-180.231851-0.537236l-71.606875 89.479941c-50.01716 50.977022-50.215682 133.822868-0.556679 185.036273L230.358505 794.101215c49.710169 51.16224 130.451074 51.520397 180.264597 0.601704l71.792093-89.651856c49.863664-50.861388 50.036603-133.829008 0.460488-184.997388L411.68427 591.601198zM242.205321 275.045519l-133.080971-64.10911-44.36237 45.334511 133.087111 64.10911L242.205321 275.045519zM330.917782 196.056514 153.48058 14.711306l-44.35623 45.328371 177.443341 181.345208L330.917782 196.056514zM419.635359 105.381351l-59.58098-136.003534-44.342927 45.334511 59.548234 136.010697L419.635359 105.381351z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zaixian" unicode="&#59294;" d="M274.496771 459.211982l-80.757279 80.648808c-25.4046 25.468045-25.51921 66.624397-0.268106 92.199888l68.671009 69.435419c25.244964 25.594935 66.292845 25.716708 91.869361 0.299829l80.751139-80.573083c17.971303-17.977443 26.997887-43.974537 19.666922-66.693981l72.495104-71.290673c50.514487 50.980091 50.330292 133.669372-0.503467 184.349635L399.471111 794.31611c-50.711985 50.744731-132.929522 50.387597-183.571922-0.599657L101.526301 677.89661c-50.565652-51.0507-50.380434-133.604904 0.560772-184.41308L228.877781 366.947626c50.827619-50.808176 133.01241-50.571792 183.54634 0.529049l-71.028707 71.361281C319.650157 432.851615 291.581891 442.19133 274.496771 459.211982L274.496771 459.211982zM919.223678 282.824693 796.832164 405.044292c-51.706639 51.662637-135.530766 51.413973-187.008184-0.586354l72.750931-73.706699c23.064298 7.80271 49.475831-1.549286 67.816548-19.825534l75.504648-75.370595c25.882484-25.716708 26.060539-67.994604 0.363274-94.005001l-70.111824-70.576405c-25.697265-26.066679-67.51058-26.188452-93.411483-0.363274l-75.41562 75.376735c-17.505699 17.486256-27.093055 46.1419-21.107737 68.357877l-72.966848 72.253604c-51.337225-52.006468-51.108005-136.053676 0.599657-187.888228L616.237039-23.515321c51.846832-51.700499 135.607514-51.40067 186.994881 0.477884l116.533087 117.916597C971.236286 146.942933 971.007065 231.053586 919.223678 282.824693L919.223678 282.824693zM373.766682 524.644227c-17.302061-17.74106-17.193591-46.3834 0.23536-64.11218L583.118757 247.711987c17.480116-17.61417 45.536103-17.486256 62.671365 0.242524 17.250896 17.862833 17.059538 46.499034-0.305969 64.11218L436.362322 524.886751C418.990676 542.436452 390.998135 542.309562 373.766682 524.644227L373.766682 524.644227z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wancheng" unicode="&#58916;" d="M486.4 265.6c-19.2-19.2-48-19.2-67.2-3.2l-137.6 131.2-32-35.2 137.6-131.2c38.4-35.2 96-35.2 134.4 3.2l281.6 297.6-35.2 32L486.4 265.6zM512 844.8c-252.8 0-460.8-204.8-460.8-460.8s204.8-460.8 460.8-460.8 460.8 204.8 460.8 460.8S764.8 844.8 512 844.8zM512-28.8c-227.2 0-412.8 185.6-412.8 412.8s185.6 412.8 412.8 412.8 412.8-185.6 412.8-412.8S739.2-28.8 512-28.8z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dagouyouquan" unicode="&#58931;" d="M512 831.616766C264.7878 831.616766 64.383234 631.2122 64.383234 384s200.404567-447.616766 447.616766-447.616766 447.616766 200.404567 447.616766 447.616766S759.2122 831.616766 512 831.616766zM749.24404 496.653285 490.771928 165.802156c-25.757381-32.969325-73.223154-32.730188-98.382691 0.833916L268.525094 331.872064c-14.827561 19.780982-10.813317 47.835721 8.967665 62.664303 19.780982 14.827561 47.836743 10.813317 62.664303-8.967665l101.483305-142.855154 237.057022 309.05485c15.21897 19.480527 43.349333 22.93576 62.830882 7.71679C761.008798 544.265198 764.46301 516.134834 749.24404 496.653285z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yiban" unicode="&#58955;" d="M374.720915 276.112828 210.629673 276.112828l0-55.112202 158.683069 0C370.012683 239.772154 371.848495 258.164037 374.720915 276.112828L374.720915 276.112828zM210.629673 490.089224l353.807095 0c29.618575 13.797237 61.45363 22.044062 94.675266 23.715121l0 31.399127L210.629673 545.203472 210.629673 490.089224 210.629673 490.089224zM160.554184 124.462942c-20.847817 0-29.540803 8.698103-29.540803 29.526477l0 593.077573c0 20.828374 8.694009 29.52443 29.540803 29.52443l548.628222 0c20.826328 0 29.54592-8.696056 29.54592-29.52443L738.728326 509.842103c23.485901-4.300956 33.708729-11.326976 54.92596-20.72502L793.654286 786.737504c0 24.76708-20.083407 44.847417-44.847417 44.847417L120.934838 831.584921c-24.769127 0-44.852534-20.081361-44.852534-44.847417l0-672.728658c0-24.758893 20.083407-44.847417 44.852534-44.847417l283.845697 0c-11.346419 21.156856-20.263509 31.520901-26.356274 55.301514L181.020308 124.462942 160.554184 124.462942zM210.629673 679.748794l448.481338 0 0-55.113225-448.481338 0 0 55.113225ZM681.446715 473.719394c-148.146085 0-268.25358-120.090099-268.25358-268.257673 0-148.145062 120.112612-268.257673 268.25358-268.257673 148.164504 0 268.25665 120.113635 268.25665 268.257673C949.703365 353.628272 829.61122 473.719394 681.446715 473.719394zM681.925622-11.299091C562.932508-11.299091 466.477712 85.151611 466.477712 204.143703c0 118.998231 96.455819 215.45712 215.44791 215.45712 119.001301 0 215.452004-96.458889 215.452004-215.45712C897.376603 85.151611 800.921807-11.299091 681.925622-11.299091zM210.629673 410.660196l0-55.113225 197.292412 0c8.973372 19.527752 19.332301 37.97387 30.9325 55.113225L210.629673 410.660196zM824.259328 309.639408 639.752104 125.132184 545.963021 218.655208 506.232135 178.815851 639.752104 45.670411 863.990215 269.908522 824.259328 309.639408Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daiban" unicode="&#59397;" d="M120.759083 3.4679V768.352217c0 4.252196 3.447422 7.713952 7.699618 7.713952h643.527285c4.252196 0 7.713952-3.461756 7.713952-7.713952V459.760347h55.82018V768.352217c0 35.024045-28.495752 63.534132-63.534132 63.534132H128.458701c-35.024045 0-63.519798-28.510087-63.519798-63.534132v-764.884317c0-35.024045 28.495752-63.534132 63.519798-63.534133h360.269409v55.820181H128.458701c-4.252196 0-7.699618 3.461756-7.699618 7.713952zM287.660582 343.213528c-15.41357 0-27.91009-12.48321-27.91009-27.91009s12.49652-27.91009 27.91009-27.91009h111.449918c15.41357 0 27.91009 12.48321 27.91009 27.91009s-12.49652 27.91009-27.91009 27.91009h-111.449918zM636.53722 466.300926c0 15.42688-12.49652 27.91009-27.91009 27.91009H287.660582c-15.41357 0-27.91009-12.48321-27.91009-27.91009s12.49652-27.91009 27.91009-27.91009h320.966548c15.41357 0 27.91009 12.48321 27.91009 27.91009zM608.62713 639.704097H287.660582c-15.41357 0-27.91009-12.48321-27.91009-27.91009s12.49652-27.91009 27.91009-27.91009h320.966548c15.41357 0 27.91009 12.48321 27.91009 27.91009s-12.49652 27.91009-27.91009 27.91009zM820.392212 177.251956h-55.643048v90.271873c0 15.42688-12.49652 27.91009-27.91009 27.91009s-27.91009-12.48321-27.91009-27.91009v-118.181963c0-15.42688 12.49652-27.91009 27.91009-27.91009H820.393236c15.41357 0 27.91009 12.48321 27.91009 27.91009-0.001024 15.42688-12.497544 27.91009-27.911114 27.91009zM738.670805 380.874078c-121.258739 0-219.559921-98.300158-219.559921-219.559921 0-121.259763 98.300158-219.560945 219.559921-219.560945 121.259763 0 219.560945 98.300158 219.560945 219.560945 0 121.259763-98.301182 219.559921-219.560945 219.559921z m0-383.299662c-90.286208 0-163.739741 73.453533-163.739741 163.740765 0 90.286208 73.453533 163.739741 163.739741 163.739741 90.286208 0 163.739741-73.453533 163.739741-163.739741 0.001024-90.287232-73.452509-163.740765-163.739741-163.740765z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zuzhushouce" unicode="&#58912;" d="M917.629659 590.345158c0 0.102328-0.102328 0.306985-0.102328 0.409314-0.511642 2.251224-1.330269 4.297792-2.353553 6.344359-0.306985 0.61397-0.61397 1.125612-0.920955 1.637254-1.22794 2.046567-2.660538 4.093135-4.40012 5.832717L687.493155 821.607275c-1.739582 1.739582-3.78615 3.069851-5.935046 4.297791-0.511642 0.306985-1.023284 0.511642-1.534925 0.818627-2.148896 1.023284-4.40012 1.841911-6.651344 2.353553h-0.306985c-1.637254 0.306985-3.274508 0.511642-4.911762 0.511642H193.861097c-44.001199 0-79.918457-35.81493-79.918457-79.918457V26.413511c0-44.001199 35.81493-79.918457 79.918457-79.918458h644.361747c44.001199 0 79.918457 35.81493 79.918457 79.918458V584.819426c0 1.841911-0.204657 3.683821-0.511642 5.525732zM695.781753 736.367743l92.811831-90.560608 34.177676-33.359049H720.44289c-13.609673 0-24.661137 11.051464-24.661137 24.661138v99.258519z m142.543419-734.820026H193.861097c-13.609673 0-24.661137 11.051464-24.661137 24.661137V749.568102c0 13.609673 11.051464 24.661137 24.661137 24.661138H640.626761v-137.222345c0-44.103528 35.81493-79.918457 79.918457-79.918457h142.441092v-530.879584c0-13.507345-11.051464-24.661137-24.661138-24.661137zM263.649046 514.724493h234.229639c7.674628 0 13.81433 6.139702 13.81433 13.81433s-6.139702 13.81433-13.81433 13.81433H263.649046c-7.674628 0-13.81433-6.139702-13.81433-13.81433s6.139702-13.81433 13.81433-13.81433zM746.536624 376.581193H263.649046c-7.674628 0-13.81433-6.139702-13.81433-13.81433s6.139702-13.81433 13.81433-13.81433h482.887578c7.674628 0 13.81433 6.139702 13.81433 13.81433s-6.242031 13.81433-13.81433 13.81433zM746.536624 210.809234H263.649046c-7.674628 0-13.81433-6.139702-13.81433-13.81433s6.139702-13.81433 13.81433-13.81433h482.887578c7.674628 0 13.81433 6.139702 13.81433 13.81433-0.102328 7.674628-6.242031 13.81433-13.81433 13.81433z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xing1" unicode="&#58904;" d="M1009.562 441.897c-72.264-88.023-200.049-233.339-200.049-233.339s20.9-159.55 32.614-268.534c5.09-55.51-34.928-79.513-80.25-57.876-86.242 43.325-217.478 110.448-247 125.573-30.044-14.97-162.6-80.988-249.733-124.211-45.844-21.586-86.343 2.416-81.193 57.825 11.869 108.82 32.983 268.216 32.983 268.216S87.685 354.56 14.582 442.471c-25.836 31.928-9.247 77.311 41.697 85.657 103.885 19.64 264.909 50.944 264.909 50.944s88.074 162.335 143.8 261.755C495.657 901.325 516.874 894.34 520.5 892.559c9.452-3.256 24.371-15.022 43.848-51.783 55.091-99.574 142.172-262.124 142.172-262.124s159.13-31.304 261.806-50.995c50.33-8.397 66.765-53.832 41.237-85.76z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="liuyan" unicode="&#58942;" d="M511.37-64.893c-8.928 0-17.658 3.474-24.533 10.62l-103.717 107.703c-6.299 6.585-10.177 15.532-10.177 25.385s3.877 18.8 10.19 25.398c13.559 14.080 35.303 14.080 48.866-0.014l79.362-82.422 79.353 82.422c6.188 6.531 14.917 10.599 24.596 10.62h241.911c19.143 0 34.569 16.020 34.569 35.91v574.461c0 19.692-15.426 35.91-34.56 35.91h-691.372c-18.953 0-34.56-16.218-34.56-35.91v-574.47c0-19.881 15.606-35.91 34.56-35.91h103.707c19.143 0 34.569-16.020 34.569-35.892 0-19.89-15.426-35.91-34.56-35.91h-103.717c-57.231 0-103.68 48.258-103.68 107.712v574.47c-0.007 59.453 46.439 107.712 103.68 107.712h691.38c57.241 0 103.707-48.258 103.707-107.712v-574.47c0-59.453-46.467-107.712-103.707-107.712h-227.862l-93.483-97.29c-6.208-6.521-14.942-10.586-24.627-10.621zM321.245 402.053c-28.62 0-51.858 24.121-51.858 53.856 0 29.727 23.238 53.856 51.858 53.856 28.62 0 51.849-24.128 51.849-53.856s-23.228-53.856-51.849-53.856zM528.65 402.053c-28.62 0-51.849 24.121-51.849 53.856 0 29.727 23.228 53.856 51.849 53.856s51.849-24.128 51.849-53.856-23.22-53.856-51.84-53.856zM736.244 402.053c-28.62 0-51.849 24.121-51.849 53.856 0 29.727 23.228 53.856 51.849 53.856s51.849-24.128 51.849-53.856-23.408-53.856-51.84-53.856z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="beijingyanse" unicode="&#58941;" d="M896 512c-46.72 46.72-160.64 25.6-219.52 10.24L448.64 743.04l-21.76-21.76L313.6 830.72 223.36 743.04 336.64 633.6 66.56 371.84v-2.56L448.64 0l359.68 349.44L960 202.88S960 448 896 512zM194.56 371.84l255.36 247.68 254.72-247.68H194.56z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tihuantupian" unicode="&#58988;" d="M620.544 758.4c103.936-10.432 187.328-72.96 205.12-180.224h-60.16l97.088-144.448 97.152 144.448h-67.008c-17.792 144.448-127.168 238.336-265.344 251.712-19.136 1.536-36.864-14.848-36.864-35.712 1.28-17.92 13.568-34.24 30.016-35.776z m-150.4 73.024H132.416c-19.136 0-34.176-16.384-34.176-37.248v-321.728c0-20.864 15.04-37.248 34.176-37.248h337.728c19.136 0 34.176 16.384 34.176 37.248V794.176c0 20.864-15.04 37.248-34.176 37.248z m-32.832-324.736H165.248V759.936h272.128v-253.248h-0.064zM404.48 12.16c-116.224 10.432-205.12 87.872-209.216 216h64.256L162.496 372.608l-97.088-144.448h64.256c2.688-165.376 118.912-272.576 268.032-287.488 19.136-1.472 36.928 14.912 36.928 35.776a35.648 35.648 0 0 1-30.144 35.712z m489.6 323.264H556.288c-19.2 0-34.176-16.448-34.176-37.248v-323.264c0-20.8 14.976-37.184 34.176-37.184h337.728c19.136 0 34.112 16.384 34.112 37.184V298.176c0.064 20.8-16.32 37.248-34.048 37.248z m-32.896-324.736H589.12V262.464h272.064v-251.776z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bianji" unicode="&#58914;" d="M962.70308693 731.94482347c-15.99842987 15.9973376-41.9332096 15.9973376-57.9305472 0L499.2630784 326.45065387c-15.99842987-15.99515307-15.99842987-41.93102507 0-57.92836267 15.99624533-15.99515307 41.9332096-15.99515307 57.92836267 0l405.51164586 405.4941696c15.99624533 15.9973376 15.99624533 41.9332096 0 57.92836267zM812.4792832 296.9780224c-22.41549653 0-40.5897216-18.17094827-40.5897216-40.58753707v-202.9387776c0-22.4165888-18.17204053-40.58753707-40.5897216-40.58753706H203.63782827c-22.41768107 0-40.5897216 18.17094827-40.5897216 40.58753706V702.85339307c0 22.41440427 18.17204053 40.58753707 40.5897216 40.58753706h405.89284693c22.41768107 0 40.5897216 18.17094827 40.5897216 40.58753707 0 22.41440427-18.17204053 40.58753707-40.5897216 40.58753707H163.04810667c-44.8331776 0-81.17835093-36.34408107-81.17835094-81.17398187v-730.57675947c0-44.83099307 36.34517333-81.1761664 81.17835094-81.1761664h608.84036266c44.83426987 0 81.17835093 36.3462656 81.17835094 81.1761664V256.3915776c0 22.4165888-18.17204053 40.58753707-40.5897216 40.58753707z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="-shangbiankuang" unicode="&#58923;" d="M891.733333 230.4a21.333333 21.333333 0 0 1 21.333334 21.333333v68.266667a21.333333 21.333333 0 1 1-42.666667 0v-68.266667a21.333333 21.333333 0 0 1 21.333333-21.333333zM145.066667 149.333333v68.266667a21.333333 21.333333 0 1 1-42.666667 0v-68.266667a21.333333 21.333333 0 1 1 42.666667 0zM891.733333 384a21.333333 21.333333 0 0 1 21.333334 21.333333v68.266667a21.333333 21.333333 0 1 1-42.666667 0v-68.266667a21.333333 21.333333 0 0 1 21.333333-21.333333zM870.4 627.2v-68.266667a21.333333 21.333333 0 1 1 42.666667 0v68.266667a21.333333 21.333333 0 1 1-42.666667 0zM145.066667 456.533333v68.266667a21.333333 21.333333 0 1 1-42.666667 0v-68.266667a21.333333 21.333333 0 1 1 42.666667 0zM891.733333 76.8a21.333333 21.333333 0 0 1 21.333334 21.333333v68.266667a21.333333 21.333333 0 1 1-42.666667 0v-68.266667a21.333333 21.333333 0 0 1 21.333333-21.333333zM145.066667 302.933333v68.266667a21.333333 21.333333 0 1 1-42.666667 0v-68.266667a21.333333 21.333333 0 1 1 42.666667 0zM605.866667-4.266667a21.333333 21.333333 0 0 1-21.333334 21.333334h-68.266666a21.333333 21.333333 0 1 1 0-42.666667h68.266666a21.333333 21.333333 0 0 1 21.333334 21.333333zM759.466667-4.266667a21.333333 21.333333 0 0 1-21.333334 21.333334h-68.266666a21.333333 21.333333 0 1 1 0-42.666667h68.266666a21.333333 21.333333 0 0 1 21.333334 21.333333zM913.066667-4.266667v17.066667a21.333333 21.333333 0 0 1-42.24 4.266667H823.466667a21.333333 21.333333 0 1 1 0-42.666667h68.266666a21.333333 21.333333 0 0 1 21.333334 21.333333zM145.066667-4.266667v68.266667a21.333333 21.333333 0 1 1-42.666667 0v-68.266667a21.333333 21.333333 0 1 1 42.666667 0zM298.666667-4.266667a21.333333 21.333333 0 0 1-21.333334 21.333334h-68.266666a21.333333 21.333333 0 1 1 0-42.666667h68.266666a21.333333 21.333333 0 0 1 21.333334 21.333333zM452.266667-4.266667a21.333333 21.333333 0 0 1-21.333334 21.333334h-68.266666a21.333333 21.333333 0 1 1 0-42.666667h68.266666a21.333333 21.333333 0 0 1 21.333334 21.333333zM913.066667 669.866667v102.4a21.333333 21.333333 0 0 1-21.333334 21.333333h-768a21.333333 21.333333 0 0 1-21.333333-21.333333v-162.133334a21.333333 21.333333 0 1 1 42.666667 0V648.533333h746.666666a21.333333 21.333333 0 0 1 21.333334 21.333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ziliaoshouce-xianxing" unicode="&#59544;" d="M704 704v-384H257.6c-24 0-46.4-6.4-65.6-17.6V639.2c0 36 28.8 64.8 64.8 64.8H704m64 64H256.8C185.6 768 128 710.4 128 639.2v-510.4c0-71.2 57.6-128.8 128.8-128.8H896V704h-64v-640H257.6c-36 0-65.6 29.6-65.6 65.6v60.8c0 36 29.6 65.6 65.6 65.6H768V768z m0-576H256v-64h512v64z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tuichu" unicode="&#58995;" d="M723.872 417.6l-81.12 81.152 45.248 45.248 158.4-158.4-158.4-158.4-45.248 45.28 81.12 81.12h-339.872v64h339.872zM576 0h-319.808c-0.009-0-0.021-0-0.032-0-35.435 0-64.16 28.725-64.16 64.16 0 0 0 0 0 0l-0 639.68c0 35.424 28.704 64.16 64.192 64.16h319.808v-64h-287.776c-0.076 0.001-0.166 0.001-0.257 0.001-17.577 0-31.841-14.186-31.967-31.733l-0-576.524c0-17.184 14.4-31.744 32.224-31.744h287.776v-64z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wenbenduiqi" unicode="&#59108;" d="M174.08 670.72c-12.288 0-20.48 8.192-20.48 20.48s8.192 20.48 20.48 20.48h675.84c12.288 0 20.48-8.192 20.48-20.48s-8.192-20.48-20.48-20.48h-675.84z m0-204.8c-12.288 0-20.48 8.192-20.48 20.48s8.192 20.48 20.48 20.48h675.84c12.288 0 20.48-8.192 20.48-20.48s-8.192-20.48-20.48-20.48h-675.84z m0-204.8c-12.288 0-20.48 8.192-20.48 20.48s8.192 20.48 20.48 20.48h675.84c12.288 0 20.48-8.192 20.48-20.48s-8.192-20.48-20.48-20.48h-675.84z m0-204.8c-12.288 0-20.48 8.192-20.48 20.48s8.192 20.48 20.48 20.48h675.84c12.288 0 20.48-8.192 20.48-20.48s-8.192-20.48-20.48-20.48h-675.84z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shanchu1" unicode="&#58948;" d="M512-1.6c-108 0-209.6 42.4-285.6 118.4-76 76-118.4 177.6-118.4 285.6 0 108 42.4 209.6 118.4 285.6 76 76 177.6 118.4 285.6 118.4 108 0 209.6-42.4 285.6-118.4 157.6-157.6 157.6-413.6 0-571.2-76-76-177.6-118.4-285.6-118.4z m0 760c-95.2 0-184.8-36.8-252-104-67.2-67.2-104-156.8-104-252s36.8-184.8 104-252c67.2-67.2 156.8-104 252-104 95.2 0 184.8 36.8 252 104 139.2 139.2 139.2 364.8 0 504-67.2 67.2-156.8 104-252 104zM707.872 566.608L348.096 206.84l-31.68 31.68 359.776 359.768zM328 555.2l32 31.2 348-348-32-32z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="sousuo2" unicode="&#59224;" d="M474.49999971 83.99249970999995c-186.11250029 0-337.5 151.38749971-337.5 337.5s151.38749971 337.5 337.5 337.5 337.5-151.38749971 337.5-337.5-151.38749971-337.5-337.5-337.5m476.55-86.02499971L791.45 157.60500000000002c59.625 71.51249971 95.55000029 163.50000029 95.55000029 263.88749971 0 227.8125-184.68749971 412.49999971-412.50000058 412.50000058s-412.49999971-184.68749971-412.49999971-412.50000058 184.68749971-412.49999971 412.49999971-412.49999971c100.38750029 0 192.375 35.92500029 263.88750058 95.55000029l159.6375-159.60000058a37.5975 37.5975 0 0 1 53.02499942 0 37.5975 37.5975 0 0 1 0 53.02500029"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="keyboard_icon" unicode="&#58994;" d="M928.67 689.56h-833.34c-46.005-0.051-83.285-37.334-83.33-83.336l-0-444.444c0.051-46.001 37.329-83.279 83.325-83.33l833.345-0c46.001 0.051 83.279 37.329 83.33 83.325l0 444.445c-0.046 46.006-37.325 83.289-83.325 83.34zM956.45 161.78c-0.011-15.338-12.442-27.769-27.779-27.78l-833.341-0c-15.338 0.011-27.769 12.442-27.78 27.779l-0 444.441c0.011 15.338 12.442 27.769 27.779 27.78l833.341 0c15.338-0.011 27.769-12.442 27.78-27.779zM845.33 272.89h-666.66c-15.342-0-27.78-12.438-27.78-27.78 0-15.342 12.438-27.78 27.78-27.78h666.66c15.342 0 27.78 12.438 27.78 27.78 0 15.342-12.438 27.78-27.78 27.78zM178.67 356.22h83.33c15.342 0 27.78 12.438 27.78 27.78s-12.438 27.78-27.78 27.78l-83.33 0c-15.342-0-27.78-12.438-27.78-27.78s12.438-27.78 27.78-27.78zM373.11 356.22h83.33c15.342 0 27.78 12.438 27.78 27.78s-12.438 27.78-27.78 27.78l-83.33 0c-15.342-0-27.78-12.438-27.78-27.78s12.438-27.78 27.78-27.78zM567.56 356.22h83.33c15.342 0 27.78 12.438 27.78 27.78s-12.438 27.78-27.78 27.78l-83.33 0c-15.342-0-27.78-12.438-27.78-27.78s12.438-27.78 27.78-27.78zM845.33 411.78h-83.33c-0 0-0 0-0 0-15.342 0-27.78-12.438-27.78-27.78 0-15.342 12.438-27.78 27.78-27.78 0 0 0 0 0 0h83.33c15.342 0 27.78 12.438 27.78 27.78s-12.438 27.78-27.78 27.78zM178.67 495.11h83.33c15.342 0 27.78 12.438 27.78 27.78s-12.438 27.78-27.78 27.78l-83.33 0c-15.342-0-27.78-12.438-27.78-27.78s12.438-27.78 27.78-27.78zM373.11 495.11h83.33c15.342 0 27.78 12.438 27.78 27.78s-12.438 27.78-27.78 27.78l-83.33 0c-15.342-0-27.78-12.438-27.78-27.78s12.438-27.78 27.78-27.78zM567.56 495.11h83.33c15.342 0 27.78 12.438 27.78 27.78s-12.438 27.78-27.78 27.78l-83.33 0c-15.342-0-27.78-12.438-27.78-27.78s12.438-27.78 27.78-27.78zM845.33 550.67h-83.33c-15.342-0-27.78-12.438-27.78-27.78s12.438-27.78 27.78-27.78h83.33c15.342 0 27.78 12.438 27.78 27.78s-12.438 27.78-27.78 27.78z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xing" unicode="&#58928;" d="M751.202 257.617s83.744-276.374 43.306-316.813c-40.439-40.439-281.404 135.595-281.404 135.595S268.805-99.634 228.366-59.195c-40.439 40.439 46.638 316.813 46.638 316.813S26.173 466.507 66.612 506.946s299.339 43.916 299.339 43.916S474.334 830.414 513.103 830.435c38.773 0.02 147.152-279.573 147.152-279.573s255.568-3.478 296.007-43.916-205.06-249.329-205.06-249.329z m-128.559 208.89c-40.439 40.439-93.514 242.632-111.206 242.632S440.669 506.946 400.23 466.507c0 0-212.303 0-212.303-20.219s161.755-101.097 161.755-161.755-60.658-222.413-40.439-242.632c20.219-20.219 142.797 121.316 202.193 121.316 59.392 0 181.974-141.535 202.193-121.316 20.219 20.219-40.439 181.974-40.439 242.632 0 60.658 161.755 141.535 161.755 161.755 0.001 20.219-212.302 20.219-212.302 20.219z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiantou-copy-copy" unicode="&#58943;" d="M796.014 483.353l-257.492 257.492c-20.11 20.11-52.709 20.11-72.819 0l-257.492-257.492c-20.11-20.11-20.11-52.709 0-72.819s52.709-20.11 72.819 0l169.585 169.585v-493.664c0-28.453 23.046-51.499 51.499-51.499s51.499 23.046 51.499 51.499v493.664l169.585-169.585c10.042-10.043 23.226-15.089 36.41-15.089s26.367 5.021 36.41 15.089c20.11 20.11 20.11 52.709 0 72.819z"  horiz-adv-x="1000" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dingceng" unicode="&#58952;" d="M972.2255846659343 326.41421699523926a31.086759567260742 31.086759567260742 0 0 1-24.758634567260742 21.277856826782227l-107.73648262023924 17.719058990478516 123.87273788452146 112.40301132202146c8.701171874999998 7.91015625 12.023591995239258 19.854955673217773 8.622379302978517 30.849609374999993a31.00719451904297 31.00719451904297 0 0 1-24.758634567260742 21.278629302978516l-107.81527519226076 17.719058990478516 123.95153045654297 112.40301132202146c8.701171874999998 7.91015625 12.023591995239258 19.933748245239258 8.622379302978517 30.928401947021484a31.086759567260742 31.086759567260742 0 0 1-24.83819961547852 21.278629302978516L544.5240542093914 778.6380043029785a32.27405548095703 32.27405548095703 0 0 1-24.363126754760746-5.853824615478516L171.7965647379558 513.8849201202393a29.741878509521488 29.741878509521488 0 0 1-11.627311706542969-30.138158798217773c2.3730468749999996-11.390161514282225 11.311368942260742-20.486841201782227 22.939453125-23.3349609375l121.18297576904297-30.37453651428222L171.7965647379558 331.55581855773926a29.741878509521488 29.741878509521488 0 0 1-11.627311706542969-30.138158798217773c2.3730468749999996-11.390161514282225 11.231803894042969-20.408048629760746 22.939453125-23.3349609375l121.10418319702148-30.37453651428222L171.7965647379558 149.22671699523926a29.741878509521488 29.741878509521488 0 0 1-11.627311706542969-30.058593749999993 30.849609374999993 30.849609374999993 0 0 1 22.939453125-23.413753509521484l422.40234374999994-105.75971603393555a31.798982620239258 31.798982620239258 0 0 1 29.267578124999996 7.277498245239258l328.8245773315429 298.212890625c8.701171874999998 7.91015625 12.023591995239258 19.854955673217773 8.622379302978517 30.849609374999993zM381.3369127909342 410.7354011535645l224.17413711547852-56.24090194702148a32.0361328125 32.0361328125 0 0 1 29.267578124999996 7.276725769042969L782.2227045694988 495.45518302917486l92.31167793273927-15.187654495239258-270.0530433654785-244.97769355773926-343.45836639404297 86.06234550476074 120.23437499999997 89.384765625z m223.22476387023926-357.77621269226074L261.0237452189127 139.02230644226074 381.2581202189127 228.40784454345703l224.3317222595215-56.162109375a31.798982620239258 31.798982620239258 0 0 1 29.267578124999996 7.277498245239258l147.3660564422607 133.68164062500003 92.39047050476074-15.186882019042969-270.0522708892822-245.05725860595703zM1110.890469233195 554.4638671875L955.8521792093912 354.3369140625h103.38589668273924v-15.029296874999996c0-105.12628555297853-36.22913360595703-200.126953125-93.02312850952147-280.17711639404297 113.66832733154295 55.054378509521484 191.10906600952146 165.08434295654294 196.25066757202148 295.1276206970215h103.38589668273924L1110.810904184977 554.3850746154785z"  horiz-adv-x="1434" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="diceng" unicode="&#58953;" d="M935.3610026041667 347.6132812499999l-102.83203125000001 17.797851562499996 118.25683593749999 112.32421875a30.612459182739258 30.612459182739258 0 0 1 8.226871490478516 30.849609374999993 30.216951370239258 30.216951370239258 0 0 1-23.730468749999996 21.199064254760742l-102.83203125000001 17.639493942260746 118.33562850952148 112.32421875a30.612459182739258 30.612459182739258 0 0 1 8.226871490478516 30.92917442321778 30.216951370239258 30.216951370239258 0 0 1-23.730468749999996 21.199064254760742L550.5319010416667 778.3212890625a29.82144355773925 29.82144355773925 0 0 1-23.3349609375-5.932617187499999L194.57486979166669 513.7265624999999a30.612459182739258 30.612459182739258 0 0 1 10.757503509521486-53.47234725952148l115.72620391845705-30.29651641845703L194.57486979166669 331.55659103393555a30.53289413452149 30.53289413452149 0 0 1 10.757503509521486-53.47311973571778L321.13736979166663 247.70816230773926 194.57486979166669 149.30550956726074a30.53289413452149 30.53289413452149 0 0 1 10.757503509521486-53.393554687500014l314.66663360595703-82.50277519226076 88.90969276428221-23.3349609375a29.82144355773925 29.82144355773925 0 0 1 28.002262115478516 7.1979331970214835l314.033203125 298.212890625a30.849609374999993 30.849609374999993 0 0 1 8.147306442260744 30.92917442321778 30.058593749999993 30.058593749999993 0 0 1-23.730468749999996 21.199064254760742zM553.3004557291667 716.2265625l312.45117187500006-53.7890625-257.9498863220214-244.97769355773926-328.113899230957 86.06234550476074L553.3792483011882 716.3053550720215zM394.5434652964274 410.6573810577393l214.20764923095703-56.162109375a29.82144355773925 29.82144355773925 0 0 1 28.00148963928223 7.1979331970214835L777.5533854166667 495.3756179809571l88.2770347595215-15.186882019042969L607.8805338541667 235.2882900238037 279.7674070994059 321.35140800476086l114.77605819702147 89.30597305297852zM1155.6588541666667 259.3362464904785a342.8264808654786 342.8264808654786 0 0 1-187.47070312499997 295.048828125c54.26336288452147-80.05170822143553 88.83090019226076-175.05237579345703 88.83090019226076-280.01953124999994v-15.029296874999996h-98.71859550476074l147.99871444702148-199.96936798095703 148.07827949523926 199.96936798095703H1155.6588541666667z"  horiz-adv-x="1438" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wenben" unicode="&#58959;" d="M692.2597343921661 13.21142578125H331.711297750473v30.689996480941772a563.3140236139297 563.3140236139297 0 0 0 48.088091611862176 14.83154296875c16.200274229049683 4.278552532196046 33.656305074691765 7.757592201232912 52.39561200141907 10.638445615768433v630.340576171875h-136.73552870750427l-57.244107127189636-151.53810381889343H211.2339789867401c-2.1675199270248413 14.118209481239319-3.9642512798309326 30.233752727508545-5.419161915779114 48.23148250579833-1.4541864395141602 17.939794063568115-2.6809751987457275 36.30831241607666-3.7933409214019784 55.10410666465761-1.1123657226562498 18.59736442565918-1.9683659076690674 37.078857421875-2.6527315378189087 55.019375681877136C198.6264432668686 724.469366312027 198.2563788890838 740.6413968801498 198.2563788890838 754.78857421875h627.4886906147003c0-14.147177338600159-0.3997564315795899-30.090361833572388-1.1123657226562498-47.689059376716614-0.7415771484374999-17.655909061431885-1.6547888517379765-35.852792859077454-2.766430377960205-54.56313192844391s-2.139276266098023-37.078857421875-3.251641988754273-55.10410666465761c-1.0841220617294314-17.998453974723816-2.7099430561065674-34.48406159877777-4.9064308404922485-49.28736090660096h-28.408053517341607l-56.75889551639557 151.53810381889343H592.8891206979752V69.31492352485657c18.71033906936645-3.5659432411193848 36.22285723686218-7.07395076751709 52.366644144058235-10.638445615768433 16.229242086410522-3.508731722831726 31.85957372188568-8.415162563323973 47.00469374656678-14.83154296875v-30.633509159088135z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xiantiaoyanse" unicode="&#58956;" d="M555.7553691864015 377.95691871643066c-24.1823673248291 10.243806838989258-46.07975006103515-0.5453681945800781-56.134300231933594-12.246065139770506-10.052232742309569-11.700696945190431-14.887933731079098-36.440792083740234-25.117063522338867-60.26318550109865-10.229129791259767-23.823938369750977-46.713953018188484-70.20881652832033-46.713953018188484-70.20881652832033s42.05746650695801 2.160615921020508 64.27001953125 7.094421386718748c40.60521125793456 9.023294448852537 69.26794052124023 30.342864990234375 79.40746307373048 48.10209274291993s9.163112640380861 40.338706970214844 9.163112640380861 40.338706970214844 2.899103164672852 35.427303314208984-24.87527847290039 47.18284606933593zM591.5225620269775 465.1161804199219l66.13168716430664-57.75186538696289-65.62648773193361-49.608421325683594-42.479238510131836 42.21350669860839zM882.3250885009766 749.8648109436035c-14.024305343627933 10.553569793701174-146.20116233825684-104.2433452606201-175.12807846069336-134.20460700988767-34.9530029296875-36.200551986694336-111.68460845947267-138.75603675842285-111.68460845947267-138.75603675842285l72.60890007019044-61.57793998718263s75.47555923461915 68.1748867034912 125.70196151733398 138.31572532653811c44.9820613861084 62.82548904418945 102.52690315246582 185.66851615905762 88.50259780883789 196.22285842895508zM136.6561336517334 201.23135948181164h748.8631439208983v-185.65692901611328H136.6561336517334v185.65692901611328zM136.6561336517334 384H402.63282012939453v-153.70113372802734H136.6561336517334V384z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wushuju" unicode="&#58974;" d="M156.662278 196.241827h21.097186A10.444152 10.444152 0 0 0 187.994733 185.797675c0-5.765172-4.490985-10.444152-10.235269-10.444152H156.662278v-21.097186A10.444152 10.444152 0 0 0 146.218126 144.021068a10.277045 10.277045 0 0 0-10.444152 10.235269V175.353523H114.676787A10.444152 10.444152 0 0 0 104.441518 185.797675c0 5.765172 4.490985 10.444152 10.235269 10.444152H135.773974v21.097187A10.444152 10.444152 0 0 0 146.218126 227.574283c5.765172 0 10.444152-4.490985 10.444152-10.235269v-21.097187z m1378.628042 83.553215v21.097186A10.277045 10.277045 0 0 1 1524.846168 311.127497a10.444152 10.444152 0 0 1-10.444152-10.235269v-21.097186h-21.097186a10.277045 10.277045 0 0 1-10.235269-10.444152c0-5.598065 4.595427-10.444152 10.235269-10.444152h21.097186v-21.097187c0-5.744284 4.67898-10.235269 10.444152-10.235268a10.444152 10.444152 0 0 1 10.444152 10.235268V258.906738h21.097187c5.744284 0 10.235269 4.67898 10.235268 10.444152a10.444152 10.444152 0 0 1-10.235268 10.444152H1535.29032zM776.460024-64.861969H250.596979A20.80475 20.80475 0 0 0 229.77134-43.973665c0 11.530344 9.462402 20.888304 20.825639 20.888303h94.728457A83.010119 83.010119 0 0 0 334.212859 18.586804v605.96969A83.49055 83.49055 0 0 0 417.849627 708.005267H480.430984V728.998012A83.49055 83.49055 0 0 0 564.067752 812.446785h501.152182A83.448773 83.448773 0 0 0 1148.856702 728.998012v-605.969689c0-15.185797-4.052331-29.410732-11.133466-41.672166h115.554096c11.551232 0 20.909192-9.274407 20.909192-20.888304 0-11.530344-9.295295-20.888304-20.888304-20.888304H1002.638576v-20.992745c0-15.185797-4.052331-29.410732-11.133466-41.672166h11.196131c11.488567 0 20.825639-9.274407 20.825639-20.888303 0-11.530344-9.462402-20.888304-20.825639-20.888304h-109.893365c9.545955-16.000441 7.478013-36.972297-6.41271-50.863019a41.672166 41.672166 0 0 0-59.072122 0L776.460024-64.861969z m76.367638 41.776607h66.424806c22.977134 0 41.609501 18.59059 41.609501 41.881049V625.538244c0 22.559368-18.047494 40.690416-40.314426 40.690416H416.303892c-22.266932 0-40.314426-18.214601-40.314426-40.690416v-606.742557c0-23.123352 18.799473-41.881049 41.588613-41.881049h317.084449l-10.736588 10.757477a41.693054 41.693054 0 0 0-10.861918 40.377091l-19.718558 19.739447A146.259902 146.259902 0 0 0 502.363703 268.306475a146.218126 146.218126 0 0 0 220.517822-190.981761l19.739447-19.739447a41.630389 41.630389 0 0 0 40.377091-10.841029L852.827662-23.085362zM1002.638576 81.356157h62.852906A41.797496 41.797496 0 0 1 1107.080095 123.132764V728.893571c0 23.14424-18.632367 41.776607-41.588613 41.776607H563.775316A41.797496 41.797496 0 0 1 522.207592 728.893571v-20.888304h396.794216A83.448773 83.448773 0 0 0 1002.638576 624.556494V81.356157zM266.325872 849.001317h31.123572c8.773088 0 15.875111-6.955805 15.875111-15.666228 0-8.647758-7.102023-15.666228-15.875111-15.666228h-31.123572v-31.123572c0-8.773088-6.955805-15.875111-15.666228-15.875111a15.770669 15.770669 0 0 0-15.666228 15.875111V817.668861H203.869844A15.728893 15.728893 0 0 0 187.994733 833.335089c0 8.647758 7.102023 15.666228 15.875111 15.666228h31.123572V880.124889c0 8.773088 6.955805 15.875111 15.666228 15.875111 8.647758 0 15.666228-7.102023 15.666228-15.875111v-31.123572zM20.888304-43.973665c0 11.530344 9.462402 20.888304 20.825638 20.888303h125.455152c11.488567 0 20.825639-9.274407 20.825639-20.888303 0-11.530344-9.462402-20.888304-20.825639-20.888304H41.713942A20.80475 20.80475 0 0 0 20.888304-43.973665z m658.733544 135.021995a104.441518 104.441518 0 1 1-147.722083 147.722083 104.441518 104.441518 0 0 1 147.722083-147.722083zM459.542681 582.675445a20.888304 20.888304 0 0 0 20.867415 20.888304H710.202325a20.888304 20.888304 0 1 0 0-41.776608H480.430984A20.825639 20.825639 0 0 0 459.542681 582.675445z m0-104.441518c0 11.530344 9.295295 20.888304 20.742085 20.888303h334.505295c11.44679 0 20.742086-9.274407 20.742086-20.888303 0-11.530344-9.295295-20.888304-20.742086-20.888304H480.284766A20.762974 20.762974 0 0 0 459.542681 478.233927z m0-104.441519c0 11.530344 9.316183 20.888304 20.846527 20.888304h146.301679c11.509455 0 20.846527-9.274407 20.846527-20.888304 0-11.530344-9.316183-20.888304-20.846527-20.888303h-146.301679A20.80475 20.80475 0 0 0 459.542681 373.792408zM62.664911 499.12223a62.664911 62.664911 0 1 0 0 125.329822 62.664911 62.664911 0 0 0 0-125.329822z m0 31.332456a31.332456 31.332456 0 1 1 0 62.664911 31.332456 31.332456 0 0 1 0-62.664911zM1357.739739 624.452052a62.664911 62.664911 0 1 0 0 125.329822 62.664911 62.664911 0 0 0 0-125.329822z m0 31.332456a31.332456 31.332456 0 1 1 0 62.664911 31.332456 31.332456 0 0 1 0-62.664911z"  horiz-adv-x="1567" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="lishi" unicode="&#58896;" d="M839.104 703.04A460.48 460.48 0 0 1 511.488 838.784a460.352 460.352 0 0 1-327.68-135.744 460.352 460.352 0 0 1-135.744-327.68c0-90.176 25.92-177.6 74.944-252.8a32.192 32.192 0 1 1 53.952 35.2 397.824 397.824 0 0 0-64.512 217.6A399.36 399.36 0 0 0 511.36 774.208c219.968 0 398.848-178.944 398.848-398.848s-178.944-398.848-398.848-398.848a398.08 398.08 0 0 0-206.08 57.28 32.256 32.256 0 0 1-33.408-55.168 462.208 462.208 0 0 1 239.424-66.56 460.288 460.288 0 0 1 327.616 135.68c87.488 87.552 135.744 203.968 135.744 327.68s-48 240.064-135.552 327.616z m-345.472-10.496a40.768 40.768 0 0 1-40.768-40.832v-293.504c0-1.408 0.384-2.816 0.512-4.16a40.32 40.32 0 0 1 40.768-35.84l0.128 0.896h231.488a40.832 40.832 0 1 1 0 81.6H534.464V651.712a40.832 40.832 0 0 1-40.832 40.832z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shezhi2" unicode="&#58901;" d="M942.226286 307.80952367a196.827429 196.827429 0 0 1-181.76-196.315428c0-29.696 9.728-58.441143 14.555428-70.729143l-113.078857-62.464a349.184 349.184 0 0 1-44.178286 38.985143c-38.4 28.525714-75.117714 42.934857-109.202285 42.934857-33.792 0-70.217143-14.189714-108.470857-42.130286a352.109714 352.109714 0 0 1-43.885715-38.326857l-108.909714 60.928c4.827429 12.288 14.628571 41.033143 14.628571 70.802286A196.754286 196.754286 0 0 1 80.091429 307.80952367 546.011429 546.011429 0 0 0 71.68 388.70552367c0 29.037714 5.851429 66.340571 8.411429 80.896A196.827429 196.827429 0 0 1 261.851429 665.99009567c0 29.622857-9.728 58.294857-14.482286 70.656l115.858286 63.634285c4.096-4.242286 20.772571-20.772571 43.958857-37.302857 37.668571-26.843429 73.508571-40.448 106.642285-40.448 32.768 0 68.315429 13.312 105.764572 39.643429 22.820571 16.091429 39.497143 32.402286 43.666286 36.571428h0.073142l111.689143-62.025143a207.945143 207.945143 0 0 1-14.628571-70.729142 196.827429 196.827429 0 0 1 181.76-196.388572c2.56-14.628571 8.411429-52.077714 8.411428-80.896 0-28.891429-5.851429-66.267429-8.338285-80.896m69.485714 181.028572c-6.070857 31.670857-25.234286 51.931429-49.078857 51.931428h-5.266286a125.293714 125.293714 0 0 0-125.074286 125.220572c0 22.235429 10.752 47.469714 10.825143 47.689142a65.682286 65.682286 0 0 1-22.089143 79.36L692.443429 864.71923767 691.053714 865.15809567a72.557714 72.557714 0 0 1-78.409143-15.652572c-13.897143-14.336-61.952-55.296-98.816-55.296-37.302857 0-85.577143 41.764571-99.547428 56.393143A72.630857 72.630857 0 0 1 335.945143 866.91352367l-132.681143-72.630857-1.828571-1.243429A65.536 65.536 0 0 1 179.2 713.75238067c0.073143-0.219429 10.971429-25.234286 10.971429-47.762285 0-69.046857-56.246857-125.220571-125.220572-125.220572H60.708571c-24.356571 0.512-43.958857-19.748571-50.029714-51.931428C10.24 486.57066667 0 432.00609567 0 388.70552367c0-43.154286 10.24-97.792 10.678857-100.132571 5.997714-31.524571 25.234286-51.931429 49.005714-51.931429h5.266286c68.973714 0 125.147429-56.173714 125.147429-125.147428 0-22.381714-10.825143-47.542857-10.898286-47.762286a65.755429 65.755429 0 0 1 22.089143-79.36l126.171428-70.729143 1.316572-0.512a71.460571 71.460571 0 0 1 78.774857 16.457143c17.554286 19.236571 65.536 58.88 100.937143 58.88 38.326857 0 87.552-44.470857 101.741714-59.977143a71.314286 71.314286 0 0 1 78.628572-17.115429l130.267428 71.826286 1.828572 1.170286a65.609143 65.609143 0 0 1 22.162285 79.286857c-0.073143 0.292571-10.898286 25.234286-10.898285 47.835429 0 68.973714 56.173714 125.147429 125.220571 125.147428h4.242286c24.210286-0.365714 43.885714 19.894857 49.956571 51.931429 0.438857 2.340571 10.678857 56.905143 10.678857 100.205714 0 43.154286-10.24 97.792-10.678857 100.059429M500.809143 289.52380967c-59.245714 0-107.52 48.274286-107.52 107.52 0 59.318857 48.274286 107.52 107.52 107.52 59.318857 0 107.52-48.201143 107.52-107.52 0-59.245714-48.201143-107.52-107.52-107.52m0 285.696a178.322286 178.322286 0 0 1-178.102857-178.102857 178.322286 178.322286 0 0 1 178.102857-178.176A178.322286 178.322286 0 0 1 678.985143 397.04380967a178.322286 178.322286 0 0 1-178.176 178.102857"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daohang" unicode="&#58897;" d="M512-128C229.248-128 0 101.248 0 384S229.248 896 512 896s512-229.248 512-512-229.248-512-512-512z m0 938.666667C276.352 810.666667 85.333333 619.648 85.333333 384s191.018667-426.666667 426.666667-426.666667 426.666667 191.018667 426.666667 426.666667S747.648 810.666667 512 810.666667z m-35.029333-462.250667l-306.602667 48.768 598.144 243.114667-242.944-597.589334-48.597333 305.706667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bangzhu1" unicode="&#58921;" d="M512-81.85173333c-257.2288 0-465.85173333 209.16906667-465.85173333 465.85173333 0 257.2288 209.16906667 465.85173333 465.85173333 465.85173333S977.85173333 640.68266667 977.85173333 384c0-257.2288-208.62293333-465.85173333-465.85173333-465.85173333z m0 866.16746666c-220.63786667 0-400.31573333-179.67786667-400.31573333-400.31573333s179.67786667-400.31573333 400.31573333-400.31573333 400.31573333 179.67786667 400.31573333 400.31573333-179.67786667 400.31573333-400.31573333 400.31573333zM670.37866667 497.59573333c0-26.76053333-6.00746667-50.7904-18.56853334-73.18186666-12.01493333-22.39146667-28.39893333-42.05226667-49.152-57.89013334-20.20693333-16.384-34.4064-32.768-42.5984-49.152s-12.01493333-27.30666667-12.01493333-33.86026666c0-12.01493333-9.8304-21.2992-21.2992-21.2992h-12.01493333c-12.01493333 0-21.2992 9.8304-21.2992 21.2992v9.28426666c0 18.56853333 4.36906667 36.0448 13.65333333 53.52106667 9.28426667 17.47626667 25.12213333 36.0448 47.5136 56.79786667 16.384 14.19946667 27.30666667 28.94506667 33.86026667 44.2368 6.00746667 15.29173333 9.28426667 30.03733333 9.28426666 44.2368 0 26.2144-6.00746667 46.42133333-18.56853333 59.52853333-12.01493333 13.1072-29.4912 19.6608-51.88266667 19.6608s-41.50613333-8.73813333-56.79786666-26.2144c-12.56106667-14.19946667-20.20693333-35.49866667-22.39146667-64.44373333-1.09226667-10.92266667-10.37653333-19.6608-21.2992-19.6608h-26.76053333c-12.56106667 0-22.9376 10.92266667-21.2992 23.48373333 4.9152 45.32906667 19.6608 79.73546667 44.2368 103.2192 28.39893333 27.30666667 63.35146667 41.50613333 103.76533333 41.50613333 44.78293333 0 79.73546667-12.01493333 105.40373333-36.59093333 25.12213333-24.576 38.22933333-55.7056 38.22933334-94.48106667z m-150.18666667-383.3856c-22.39146667 0-40.96 18.0224-40.96 40.96v7.64586667c0 22.39146667 18.0224 40.96 40.96 40.96 22.39146667 0 40.96-18.0224 40.96-40.96v-7.64586667c0-22.9376-18.0224-40.96-40.96-40.96z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="youxiajiao" unicode="&#59270;" d="M800 140.8l-572.8 572.8c-12.8 12.8-32 12.8-44.8 0-12.8-12.8-12.8-32 0-44.8l572.8-572.8h-435.2c-19.2 0-32-12.8-32-32s12.8-32 32-32h480c35.2 0 64 28.8 64 64v480c0 19.2-12.8 32-32 32s-32-12.8-32-32v-435.2z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gantanhao" unicode="&#58882;" d="M512 839.111c-250.311 0-455.111-204.8-455.111-455.111S261.689-71.111 512-71.111 967.111 133.689 967.111 384 762.311 839.111 512 839.111m0-853.333c-221.867 0-398.222 176.355-398.222 398.222S290.133 782.222 512 782.222 910.222 605.867 910.222 384 733.867-14.222 512-14.222M512 213.333c-17.067 0-28.444-5.689-39.822-17.066-11.378-11.378-17.067-22.756-17.067-39.823 0-17.066 5.689-28.444 17.067-39.822 11.378-11.378 22.755-17.066 39.822-17.066 17.067 0 28.444 5.688 39.822 17.066C563.2 128 568.89 139.378 568.89 156.444c0 17.067-5.689 28.445-17.067 39.823-11.378 11.377-22.755 17.066-39.822 17.066z m-51.2 455.111l17.067-409.6h62.577l22.756 409.6H460.8z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="liebiao" unicode="&#58880;" d="M341.333 725.333h568.89v-113.777h-568.89z m-227.555 0h113.778v-113.777H113.778z m0-284.444h113.778V327.11H113.778z m0-284.445h113.778v-113.777H113.778z m227.555 0h568.89v-113.777h-568.89z m0 284.445h568.89V327.11h-568.89z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="rizhi" unicode="&#58881;" d="M568.889-14.222h-512V782.222h739.555V384h-56.888V725.333H113.778v-682.666H512zM711.111 384c108.089 0 199.111-91.022 199.111-199.111S819.2-14.222 711.112-14.222 512 76.8 512 184.888 603.022 384 711.111 384m0 56.889c-142.222 0-256-113.778-256-256s113.778-256 256-256 256 113.778 256 256-113.778 256-256 256zM227.556 839.11h56.888v-170.667h-56.888z m341.333 0h56.889v-170.667h-56.89zM170.667 554.667h512v-56.89h-512z m0-170.667H455.11v-56.889H170.667z m0-170.667h227.555v-56.889H170.667zM853.333 99.556H682.667V327.11h56.889v-170.667h113.777z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="lajitong1" unicode="&#58918;" d="M608 128c-17.696 0-32 14.304-32 32V512c0 17.696 14.304 32 32 32s32-14.304 32-32v-352c0-17.696-14.304-32-32-32z m-192 0c-17.696 0-32 14.304-32 32V512c0 17.696 14.304 32 32 32s32-14.304 32-32v-352c0-17.696-14.304-32-32-32z m512 544H768v64c0 52.928-42.72 96-95.264 96H352c-52.928 0-96-43.072-96-96v-64H96c-17.696 0-32-14.304-32-32s14.304-32 32-32h832c17.696 0 32 14.304 32 32s-14.304 32-32 32z m-608 64c0 17.632 14.368 32 32 32h320.736C690.272 768 704 753.952 704 736v-64H320v64z m416.128-800H288.064c-52.928 0-96 43.072-96 96V512.48c0 17.664 14.336 32 32 32s32-14.336 32-32V32c0-17.664 14.368-32 32-32h448.064c17.664 0 32 14.336 32 32V511.168c0 17.664 14.304 32 32 32s32-14.336 32-32V32c0-52.928-43.072-96-96-96z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dingwei" unicode="&#59233;" d="M480 1.3120000000000118V160a32 32 0 0 0 64 0v-158.688c186.56 15.392 335.296 164.16 350.688 350.688H736a32 32 0 0 0 0 64h158.688C879.296 602.56 730.528 751.296 544 766.688V608a32 32 0 0 0-64 0V766.688C293.44 751.296 144.704 602.528 129.312 416H288a32 32 0 0 0 0-64H129.312C144.704 165.44000000000005 293.472 16.70399999999995 480 1.3120000000000118zM512-64C264.576-64 64 136.57600000000002 64 384S264.576 832 512 832s448-200.576 448-448-200.576-448-448-448z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="suoxiao" unicode="&#58900;" d="M946.9-1.7L744 200.8c24.4 29.2 44.2 61.7 59.1 97 20.2 47.7 30.4 98.3 30.4 150.5s-10.2 102.8-30.4 150.5c-19.5 46-47.3 87.4-82.8 122.9s-76.8 63.4-122.8 82.8c-47.7 20.2-98.3 30.4-150.4 30.4S344.4 824.7 296.8 804.5c-46-19.5-87.3-47.4-122.8-82.8-35.5-35.5-63.3-76.8-82.8-122.9-20.2-47.7-30.4-98.3-30.4-150.5S71 345.5 91.2 297.8c19.5-46 47.3-87.4 82.8-122.9s76.8-63.4 122.8-82.8c47.7-20.2 98.3-30.4 150.4-30.4s102.7 10.2 150.4 30.4c34.9 14.8 67.1 34.4 96.1 58.5l203-202.6c6.9-6.9 16-10.4 25.1-10.4 9.1 0 18.2 3.5 25.2 10.5 13.8 13.8 13.8 36.3-0.1 50.2zM447.2 132.8c-84.2 0-163.3 32.8-222.8 92.4C164.8 284.8 132 364 132 448.3c0 84.3 32.8 163.5 92.3 223.1 59.5 59.6 138.7 92.4 222.8 92.4s163.3-32.8 222.8-92.4c59.5-59.6 92.3-138.8 92.3-223.1 0-83.9-32.5-162.8-91.6-222.3-0.4-0.4-0.8-0.8-1.2-1.1-0.3-0.3-0.6-0.6-0.8-0.9-59.3-58.9-137.9-91.2-221.4-91.2zM574 480H303.7c-19.7 0-35.6-12.8-35.6-32.5S284 415 303.7 415H574c19.7 0 35.6 12.8 35.6 32.5S593.7 480 574 480z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fangda" unicode="&#58915;" d="M943.8 3.5l-201.4 201c24.2 29 43.9 61.3 58.7 96.3 20 47.3 30.1 97.6 30.1 149.4s-10.1 102-30.1 149.4c-19.3 45.7-47 86.7-82.1 122-35.2 35.2-76.2 62.9-121.9 82.2-47.3 20-97.5 30.2-149.3 30.2-51.8 0-102-10.2-149.3-30.2-45.7-19.3-86.7-47-121.9-82.2s-62.8-76.3-82.1-122c-20-47.3-30.1-97.6-30.1-149.4s10.1-102 30.1-149.4c19.3-45.7 47-86.7 82.1-122 35.2-35.2 76.2-62.9 121.9-82.2 47.3-20 97.5-30.2 149.3-30.2 51.7 0 102 10.2 149.3 30.2 34.6 14.7 66.6 34.1 95.3 58l201.5-201c6.9-6.9 15.9-10.3 24.9-10.3 9.1 0 18.1 3.5 25 10.4 13.8 13.7 13.8 36.1 0 49.8zM669.7 229.4c-0.4-0.4-0.8-0.7-1.2-1.1-0.3-0.3-0.6-0.6-0.8-0.9-59-58.3-137-90.4-219.9-90.4-83.5 0-162.1 32.6-221.2 91.7-59.1 59.1-91.6 137.8-91.6 221.4s32.5 162.3 91.6 221.4c59.1 59.1 137.6 91.7 221.2 91.7s162.1-32.6 221.2-91.7c59.1-59.1 91.6-137.8 91.6-221.4 0-83.3-32.3-161.6-90.9-220.7zM573.7 477H473v98c0 19.5-13 35.3-32.5 35.3S408 594.5 408 575v-98H305.3c-19.5 0-35.3-13-35.3-32.5s15.8-32.5 35.3-32.5H408v-105.4c0-19.5 13-35.3 32.5-35.3s32.5 15.8 32.5 35.3V412h100.7c19.5 0 35.3 13 35.3 32.5S593.2 477 573.7 477z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zichanliebiao" unicode="&#58960;" d="M704 224h192v-64H704zM640 96h256v-64H640zM768 352h128v-64H768zM507.86 113.32l-54.94 28.47V49h118.16v92.79l-54.94-28.47a9 9 0 0 0-8.28 0zM513 378.18l4.39 7.57h-8.79l4.4-7.57zM854.79 602.56a127 127 0 0 1-24.88 16.88L572.72 752.73a132.15 132.15 0 0 1-121.43 0L194.08 619.44C153.32 598.32 128 557.8 128 513.68v-260.36c0-44.11 25.32-84.63 66.08-105.76l257.2-133.28a132.09 132.09 0 0 1 120.22-0.61V141.51l-0.42-0.22v-92.79H452.92v92.79L250.66 246.1a8.16 8.16 0 0 0-4.51 7.21V456.88l-87.58 45.84 0.22 0.38 87.36-45.72v-0.5l206.77-108.22v0.5l33.18-17.37 26.9 46.39-4.4 7.57h-0.29l-25.8 44.42 0.22 0.12 25.87-44.54h8.79l-4.39-7.57 26.6-45.79 31.48 16.5 129.08 67.67H896v97.12c0 34.27-15.28 66.32-41.21 88.88zM563.48 472.62v0.5l-51.22-26.85-0.48-0.25L310 551.63l-59.34-30.73a8.16 8.16 0 0 1-4.51-7.21v0.5a8.16 8.16 0 0 0 4.51 7.21l58.84 30.49 0.48-0.25 197.88 102.54a9 9 0 0 0 8.28 0l99.61-51.62 98.36-51zM507.86 112.82a9 9 0 0 1 8.28 0l54.94 28.47V348.4l-31.48-16.5-26.6 45.78-26.9-46.39-33.18 17.37v-207.37z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shaixuan1" unicode="&#58944;" d="M581.54325334-109.14272395c-17.08790518 0-26.27912691 7.89668347-30.9394647 14.49882864-5.43706075 7.76722963-8.15559111 17.99408197-8.15559111 31.32782616 0.25890765 118.32079803 0.12945383 238.45394963 0.12945383 354.83294026V380.06328887999996v15.79336692c0 10.35630617 0.12945383 20.97152 0 31.45728-0.51781531 36.37652543 12.94538272 70.0345205 42.20194766 106.15213827 23.94895803 29.25656494 48.1568237 59.03094518 71.45851259 87.89914864 33.14017975 40.77795555 67.31599013 82.9799032 101.36234667 124.27567408 11.65084445 14.23992098 14.11046717 24.3373195 8.67340642 36.2470716-5.17815309 11.3919368-14.49882864 13.46319803-32.10454914 13.46319802-93.72457086-0.12945383-188.87313383-0.25890765-282.72715852-0.25890765s-188.87313383 0.12945383-282.72715852 0.25890765c-17.34681283 0-26.66748839-2.07126124-32.23400296-13.46319802-5.56651457-11.52139061-3.23634569-20.84206617 9.06176791-35.85871012 28.73874963-35.08198717 57.73640691-70.94069728 85.69843357-105.50486914 29.38601876-36.37652543 59.93712197-74.04758914 89.97040988-110.81247605 27.05584987-33.14017975 40.26014025-68.86943605 40.26014025-109.38848395v-113.27209877c0-64.85636741 0-132.0429037-0.12945383-198.06435555-0.12945383-28.22093431-15.79336691-47.89791605-38.18887902-47.89791605-3.62470717 0-7.24941431 0.51781531-10.87412148 1.55344593-28.99765728 8.02613728-28.99765728 35.08198717-28.99765728 45.17938567 0.12945383 37.54160987 0 75.60103506 0 112.4953758 0 60.32548347-0.12945383 122.72222815 0.38836148 184.08334223 0.25890765 31.71618765-9.0617679 57.60695309-29.12711112 81.68536494-32.8812721 39.35396347-65.63309037 79.74355753-97.21982419 118.96806716-23.81950419 29.38601876-48.28627753 59.80766815-72.75305087 89.32314074-33.14017975 40.26014025-39.22450963 82.07372642-17.99408197 124.53458173 19.67698173 39.22450963 52.94661531 58.25422222 101.62125431 58.25422222h1.94180742c37.02379457-0.51781531 77.6722963-0.77672297 127.90038123-0.77672297 25.63185778 0 51.65207703 0 76.76611951 0.12945384 25.11404247 0 51.13426173 0.12945383 76.7661195 0.12945381 27.57366518 0 55.66514569 0 82.85044939-0.12945381 27.1853037 0 55.27678419-0.12945383 82.85044939-0.12945384 45.95610864 0 83.49771852 0.12945383 118.1913442 0.51781531h1.42399208c47.89791605 0 81.81481876-20.32425086 100.84453136-60.45493728 9.83849086-20.84206617 13.20429037-41.55467852 10.35630619-61.49056789-2.84798419-19.41807408-11.65084445-38.44778667-26.40858075-56.44186866-21.8776968-26.79694222-43.88484741-54.11169975-65.37418272-80.64973431-36.11761778-44.66157037-73.40032-90.74713283-110.55356839-135.66761087-17.6057205-21.23042765-25.63185778-44.27320889-25.50240396-72.62359703 0.51781531-113.9193679 0.38836148-229.7805432 0.38836149-341.75810371V-63.963338280000016c0-12.55702124-2.71853037-22.65441975-8.02613729-30.29219556-4.66033778-6.60214518-13.59265185-14.62828247-30.16274171-14.88719011h-0.9061768zM871.39037236 384.72362666c-10.48576 0-21.23042765 0-31.58673384 0.12945383-19.93588939 0.12945383-39.87177876 0.12945383-59.80766815 0-9.45012939 0-18.90025876-0.12945383-28.35038815-0.12945383-13.72210569 0-24.98458864 0.12945383-35.59980246 0.25890765-16.31118222 0.25890765-30.0332879 5.69596839-38.44778667 15.40500544-6.60214518 7.63777581-9.70903703 17.6057205-8.41449877 27.96202666 1.55344592 12.94538272 6.86105283 22.91332741 15.53445926 29.38601877 7.76722963 5.82542222 18.25298963 8.67340642 31.06891852 8.67340642h0.77672296c25.76131161-0.25890765 53.3349768-0.25890765 86.86351803-0.25890766 21.8776968 0 44.14375506 0 65.76254419 0.12945383h34.30526421c36.37652543 0 45.04993185-21.35988148 45.82665481-39.22450963 0.51781531-12.42756741-2.58907653-22.26605827-9.32067555-29.51547259-7.76722963-8.28504494-19.93588939-12.42756741-37.02379458-12.68647506-9.32067555 0-19.67698173-0.12945383-31.58673381-0.12945383zM712.67998025 221.22344296000006c-26.02021925 0-42.59030914 15.14609778-43.23757827 39.48341728-0.25890765 11.9097521 3.3657995 22.13660445 10.61521383 29.64492642 7.63777581 7.89668347 18.64135111 12.16865975 31.71618766 12.29811358 41.16631703 0.25890765 72.88250469 0.25890765 102.78633875 0.25890766 34.04635653 0 64.72691358-0.12945383 93.98347853-0.38836149 12.94538272-0.12945383 23.56059653-4.14252247 30.68055703-11.78029827 5.04869925-5.30760691 10.74466765-15.01664395 10.09739852-31.06891851-1.03563061-24.20786569-16.31118222-38.05942518-41.68413235-38.18887902-13.98101333-0.12945383-28.99765728-0.12945383-48.67463901-0.12945382H752.16339753c-14.88719013 0-27.1853037 0-38.57724049-0.12945383h-0.90617679zM714.88069531 56.68762862999995c-14.62828247 0-26.53803457 4.2719763-34.56417184 12.29811358-7.1199605 7.24941431-11.00357531 17.21735902-10.87412149 28.99765728 0.12945383 16.31118222 7.24941431 25.76131161 13.20429038 30.68055704 8.02613728 6.73159902 19.15916642 9.96794469 32.88127209 9.57958322 10.48576-0.12945383 21.74824297-0.25890765 35.34089481-0.25890766 9.83849086 0 19.80643555 0 29.51547259 0.12945382 9.70903703 0 19.67698173 0.12945383 29.64492643 0.12945384h56.70077629c14.62828247 0 26.53803457 0 37.67106371 0.12945382h0.77672296c14.7577363 0 26.14967309-3.88361482 33.65799506-11.39193678 6.99050667-6.99050667 10.48576-16.82899753 10.48576-29.25656495 0-14.11046717-4.78979161-24.72568098-13.98101333-31.84564148-7.63777581-5.82542222-18.12353581-8.93231408-31.32782617-8.93231407h-94.63074766c-30.93946469-0.12945383-63.04401383-0.12945383-94.50129383-0.25890766z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuju" unicode="&#59028;" d="M906.666667-42.666667h-789.333334A32 32 0 0 0 85.333333-10.666667v789.333334a32 32 0 0 0 64 0V21.333333h757.333334a32 32 0 0 0 0-64zM853.333333 64h-64a42.666667 42.666667 0 0 0-42.666666 42.666667V576a42.666667 42.666667 0 0 0 42.666666 42.666667h64a42.666667 42.666667 0 0 0 42.666667-42.666667v-469.333333a42.666667 42.666667 0 0 0-42.666667-42.666667z m-256 0h-64a42.666667 42.666667 0 0 0-42.666666 42.666667V490.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h64a42.666667 42.666667 0 0 0 42.666667-42.666666v-384a42.666667 42.666667 0 0 0-42.666667-42.666667z m-256 0h-64a42.666667 42.666667 0 0 0-42.666666 42.666667V661.333333a42.666667 42.666667 0 0 0 42.666666 42.666667h64a42.666667 42.666667 0 0 0 42.666667-42.666667v-554.666666a42.666667 42.666667 0 0 0-42.666667-42.666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dakai" unicode="&#60383;" d="M275.84 736H124.192l1.824-580.096a32 32 0 0 0-64 0L60.16 736a64 64 0 0 0 64 64h177.92l97.28-96h498.272a32 32 0 1 0 0-64H373.152l-97.28 96zM127.52 160.384a32 32 0 0 0-63.04 10.944l54.624 314.144C127.904 536.064 174.784 576 225.76 576h668.864c55.36 0 93.92-46.72 84.384-101.472l-72.32-416C897.824 7.936 850.976-32 800-32H160a32 32 0 0 0 0 64h640c19.712 0 40.096 17.376 43.616 37.472l72.32 416c2.784 15.904-5.984 26.528-21.312 26.528H225.76c-19.68 0-40.096-17.376-43.584-37.472l-54.656-314.144z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="liuchengguanli-" unicode="&#58885;" d="M661 390.9H363c-89.8 0-162.9 73.1-162.9 162.9V580c0 89.8 73.1 162.9 162.9 162.9h305.9c13.6-52.7 61.6-91.8 118.6-91.8 67.5 0 122.4 54.9 122.4 122.4S855 896 787.5 896c-56.9 0-104.9-39.1-118.6-91.8H363c-59.9 0-116.1-23.3-158.5-65.6-42.3-42.3-65.6-98.6-65.6-158.5v-26.2c0-59.9 23.3-116.1 65.6-158.5 42.3-42.3 98.6-65.6 158.5-65.6h298c89.8 0 162.9-73.1 162.9-162.9C823.9 77 750.8 4 661 4H358.6c-4.9 63.1-57.8 112.9-122.1 112.9-67.5 0-122.4-54.9-122.4-122.4S169-128 236.5-128c49 0 91.4 29 111 70.7H661c59.9 0 116.1 23.3 158.5 65.6 42.3 42.3 65.6 98.6 65.6 158.5 0 59.9-23.3 116.1-65.6 158.5-42.4 42.3-98.7 65.6-158.5 65.6zM787.5 834.8c33.8 0 61.2-27.5 61.2-61.2 0-33.8-27.5-61.2-61.2-61.2s-61.2 27.5-61.2 61.2 27.4 61.2 61.2 61.2z m-551-901.6c-33.8 0-61.2 27.5-61.2 61.2 0 33.8 27.5 61.2 61.2 61.2 33.8 0 61.2-27.5 61.2-61.2s-27.4-61.2-61.2-61.2z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="Group-" unicode="&#59014;" d="M265.28 585.28a32 32 0 0 0 45.44 45.44l448-448a32 32 0 0 0-45.44-45.44zM713.28 630.72a32 32 0 0 0 45.44-45.44l-448-448a32 32 0 0 0-45.44 45.44z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daochu2" unicode="&#59297;" d="M976.3346963 380.69665184999997c-21.23851852 0-38.47205925-17.23354075-38.47205927-38.47205927v-304.62103703c0-28.27757037-23.05896297-51.33653333-51.33653333-51.33653333H137.83798518c-28.27757037 0-51.33653333 23.05896297-51.33653333 51.33653333V743.08645925c0 28.27757037 23.05896297 51.33653333 51.33653333 51.33653333h328.52954074c21.23851852 0 38.47205925 17.23354075 38.47205926 38.47205927S487.72740741 871.36711111 466.36752592 871.36711111H137.83798518C67.08337778 871.36711111 9.55733333 813.84106666 9.55733333 743.08645925V37.60355555000001c0-70.75460741 57.52604445-128.28065185 128.28065185-128.28065185h748.68811852c70.75460741 0 128.28065185 57.52604445 128.28065185 128.28065185V342.22459258000004c0 21.23851852-17.23354075 38.47205925-38.47205925 38.47205927zM197.79128889 190.64225184999998c119.54251852 113.11028148 240.1773037 287.99431111 453.53339259 276.70755556 15.04900741-0.84954075 26.82121482-12.62174815 26.82121482-27.79211853v-74.0314074c-0.12136297-23.30168889 26.94257778-36.28752592 45.02565925-21.6026074l276.5861926 223.67194073c13.71401482 11.04402963 13.71401482 32.03982222-0.12136297 43.08385185L724.38518518 858.25991111c-18.08308148 14.56355555-46.23928889 1.69908148-46.36065185-21.48124445v-75.00231111c0-14.0781037-9.58767408-24.27259259-23.42305185-27.42802963-367.12296297-83.74044445-459.96562963-514.09351111-456.81019259-543.70607407z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fujian" unicode="&#59502;" d="M618.83369141 613.30488281c14.05634766 11.24560547 33.73681641 11.24560547 49.19941406-1.40625 14.05634766-14.05634766 14.05634766-33.7359375 0-47.79316406L367.2125 264.69111327999997c-19.67871094-18.27421875-19.67871094-50.60478516 0-71.690625 18.27421875-19.67958984 50.60566406-19.67958984 71.690625 0l352.83164062 354.23613281c49.19941406 49.20029297 49.19941406 130.73027344 1e-8 179.9296875s-130.73027344 49.20029297-179.92968751 0l-42.17167968-42.16992187-11.24560547-11.24648438-324.71630859-324.71630859c-80.12548828-80.12548828-80.12548828-208.04414062-1e-8-288.16875 80.12460938-80.12548828 208.04326172-80.12548828 288.16875 0L847.96191406 384.17578125c5.62236328 2.81162109 8.43398437 7.02861328 11.24560547 11.24560547 14.05634766 14.05722656 33.73681641 14.05722656 47.79316406 0s14.05722656-33.73681641 0-47.79404297l-2.81074218-2.81162109c-2.8125-1.40537109-5.62324219-5.62236328-8.43486329-8.43398438L569.63339844 13.070800780000013c-105.42744141-105.42744141-278.32851563-105.42744141-383.75683594 0s-105.4265625 278.32851563 0 383.75683594l378.13447266 379.53808594c75.90761719 75.90849609 199.60927734 75.90849609 276.92314453 0 75.90761719-75.90761719 75.90761719-199.60839844 0-276.92226563L486.69628906 145.20644531000005c-46.38867188-46.38867188-122.29541016-46.38867188-167.27783203 0-46.38867188 46.38867188-46.38867188 122.29628906 0 167.27871094l299.41435547 300.81972656z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="anjianliucheng" unicode="&#58963;" d="M701.44 384H546.133333v34.133333h155.306667a85.367467 85.367467 0 0 0 168.96-17.066666 85.333333 85.333333 0 0 0-168.96-17.066667zM733.866667 42.666667a85.333333 85.333333 0 1 0 0 170.666666 85.333333 85.333333 0 0 0 0-170.666666z m0 34.133333a51.2 51.2 0 1 1 0 102.4 51.2 51.2 0 0 1 0-102.4zM512 162.133333V571.733333a17.066667 17.066667 0 0 0 34.133333 0v-392.533333a34.133333 34.133333 0 0 1 34.133334-34.133333h85.333333v-34.133334h-102.4a51.2 51.2 0 0 0-51.2 51.2zM356.693333 332.8H512v-34.133333h-155.306667a85.367467 85.367467 0 0 0-168.96 17.066666 85.333333 85.333333 0 0 0 168.96 17.066667zM273.066667 264.533333a51.2 51.2 0 1 1 0 102.4 51.2 51.2 0 0 1 0-102.4zM529.066667 725.333333l85.333333-85.333333a85.333333 85.333333 0 1 0-85.333333 85.333333z m0-136.533333a51.2 51.2 0 1 1 0 102.4 51.2 51.2 0 0 1 0-102.4z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhuye" unicode="&#58958;" d="M930.8 469.4L576.6 799.7c-17.9 20.4-43.8 32.1-71.2 32.2-27 0-52.8-11.6-70-30.9L94.2 469.7c-17-17.4-21.9-42.7-12.5-65.2 9.4-22.4 31.3-36.5 55.6-36.5H168v-336.8c0-52.3 41.8-94.7 94-94.7h146.5c19 0 35.9 15.3 35.9 34.3v224c0 9.5 6.3 18 15.8 18h103.4c9.5 0 16.8-8.5 16.8-18v-224c0-19 15.9-34.3 34.9-34.3h146.5c52.3 0 95 42.4 95 94.7V367.9h30.6c24.3 0 46.1 14 55.5 36.4 9.6 22.4 4.8 47.7-12.1 65.1z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="heziguanligenduoshangpinkeji" unicode="&#58906;" d="M512.09999 895.90001L68.843277 661.5228979999999l443.256713-234.277121 443.256713 234.277121L512.09999 895.90001zM180.63236 661.5228979999999L512.09999 836.805781l331.46763-175.182893-331.46763-175.282882-331.46763 175.182892zM68.843277 609.128015l2.099795-513.249878 422.358754-223.878137-2.099795 513.249878L68.843277 609.128015zM123.037985 127.37506099999996l-1.599844 394.761449 317.668977-168.383556 1.599844-394.761449L123.037985 127.37506099999996zM530.898154-128l422.358755 223.878137 2.099794 513.249878L532.997949 385.249878l-2.099795-513.249878z m54.194708 481.752954l317.668978 168.383556-1.599844-394.761449-317.668978-168.383556 1.599844 394.761449z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ditulianxian" unicode="&#58957;" d="M796 500.3c-52.3 0-97.2-37.4-108.4-86H336.3c-11.2 48.6-56.1 86-108.4 86-67.3 0-115.9-48.6-115.9-115.9 0-67.3 48.6-115.9 115.9-115.9 52.3 0 97.2 37.4 108.4 86h351.3c11.2-48.6 56.1-86 108.4-86 67.3 0 115.9 48.6 115.9 115.9-3.8 63.6-52.4 112.2-115.9 115.9zM283.9 384.4c0-29.9-26.2-56.1-56.1-56.1-29.9 0-56.1 26.2-56.1 56.1 0 29.9 26.2 56.1 56.1 56.1 30 0 52.4-22.4 56.1-56.1z m571.9-3.7c0-29.9-26.2-56.1-56.1-56.1-29.9 0-56.1 26.2-56.1 56.1 0 29.9 26.2 56.1 56.1 56.1 29.9 0 52.3-22.4 56.1-56.1z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fenjianguocheng_o" unicode="&#60349;" d="M780.8 98.133333c-64-59.733333-153.6-98.133333-247.466667-98.133333s-183.466667 38.4-247.466666 98.133333c12.8 8.533333 25.6 17.066667 34.133333 25.6 55.466667-51.2 132.266667-81.066667 213.333333-81.066666s157.866667 29.866667 213.333334 81.066666c12.8-8.533333 21.333333-17.066667 34.133333-25.6z m106.666667 183.466667c-12.8 8.533333-25.6 12.8-42.666667 12.8 4.266667 21.333333 8.533333 42.666667 8.533333 64 0 140.8-93.866667 260.266667-221.866666 302.933333 4.266667 17.066667 8.533333 29.866667 8.533333 42.666667v4.266667c149.333333-46.933333 256-183.466667 256-345.6 0-25.6-4.266667-55.466667-8.533333-81.066667z m-708.266667 0c-4.266667 25.6-8.533333 55.466667-8.533333 81.066667 0 162.133333 106.666667 302.933333 256 345.6v-4.266667c0-12.8 4.266667-25.6 8.533333-38.4-128-42.666667-221.866667-162.133333-221.866667-302.933333 0-21.333333 4.266667-42.666667 8.533334-64-17.066667-4.266667-29.866667-8.533333-42.666667-17.066667zM533.333333 640c-34.133333 0-64 29.866667-64 64S499.2 768 533.333333 768s64-29.866667 64-64S567.466667 640 533.333333 640z m-298.666666-512c-34.133333 0-64 29.866667-64 64S200.533333 256 234.666667 256s64-29.866667 64-64S268.8 128 234.666667 128z m597.333333 0c-34.133333 0-64 29.866667-64 64s29.866667 64 64 64 64-29.866667 64-64-29.866667-64-64-64z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shanchu" unicode="&#59156;" d="M512-127.999097a510.462115 510.462115 0 1 0 199.29478 40.247601 508.793229 508.793229 0 0 0-199.29478-40.247601z m0 983.980111a470.45456 470.45456 0 1 1 183.714695-37.081289A469.014288 469.014288 0 0 1 512 855.992445zM712.460714 154.499967a19.946624 19.946624 0 0 0-14.448443 6.161164L306.246858 569.595501a20.003778 20.003778 0 0 0 28.885455 27.673798L726.909157 188.323498a20.003778 20.003778 0 0 0-14.437012-33.846392zM320.68387 154.499967a20.003778 20.003778 0 0 0-14.437012 33.823531l391.776844 408.93437a20.003778 20.003778 0 0 0 28.885455-27.673798L335.132313 160.661131a19.946624 19.946624 0 0 0-14.448443-6.161164z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shangchuan" unicode="&#58898;" d="M768 544a224 224 0 0 0 0-448h-32a32 32 0 0 0 0 64h32a160 160 0 0 1 0 320 147.2 147.2 0 0 1-27.84-2.56 32 32 0 0 0-38.08 27.52 192 192 0 0 1-380.16 0 32 32 0 0 0-38.08-27.52A147.2 147.2 0 0 1 256 480a160 160 0 0 1 0-320h32a32 32 0 0 0 0-64h-32a224 224 0 0 0 0 448h8.32a256 256 0 0 0 495.36 0zM544 0a32 32 0 0 0-64 0V288a32 32 0 0 0 64 0zM424 138.88a32 32 0 1 0-48 42.24l112 128a32 32 0 0 0 48 0l112-128a32 32 0 0 0-48-42.24l-88 100.48z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xia" unicode="&#58907;" d="M512 271.68l264.32 293.76a32 32 0 1 0 47.36-42.88l-288-320a32 32 0 0 0-47.36 0l-288 320a32 32 0 0 0 47.36 42.88z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xiazai1" unicode="&#58909;" d="M768 544a224 224 0 0 0 0-448h-32a32 32 0 0 0 0 64h32a160 160 0 0 1 0 320 147.2 147.2 0 0 1-27.84-2.56 32 32 0 0 0-38.08 27.52 192 192 0 0 1-380.16 0 32 32 0 0 0-38.08-27.52A147.2 147.2 0 0 1 256 480a160 160 0 0 1 0-320h32a32 32 0 0 0 0-64h-32a224 224 0 0 0 0 448h8.32a256 256 0 0 0 495.36 0zM480 288a32 32 0 0 0 64 0v-288a32 32 0 0 0-64 0zM600 149.12a32 32 0 0 0 48-42.24l-112-128a32 32 0 0 0-48 0l-112 128a32 32 0 1 0 48 42.24l88-100.48z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gaojisousuo" unicode="&#58992;" d="M881.4 645.1H141.5c-23.9 0-43.5 19.6-43.5 43.5s19.6 43.5 43.5 43.5h739.9c23.9 0 43.5-19.6 43.5-43.5s-19.6-43.5-43.5-43.5zM272.1 442H141.5c-23.9 0-43.5 19.6-43.5 43.5s19.6 43.5 43.5 43.5h130.6c23.9 0 43.5-19.6 43.5-43.5S296 442 272.1 442zM272.1 238.9H141.5c-23.9 0-43.5 19.6-43.5 43.5s19.6 43.5 43.5 43.5h130.6c23.9 0 43.5-19.6 43.5-43.5s-19.6-43.5-43.5-43.5zM853.8 48.5L715.3 187c-16.9 16.9-16.9 44.6 0 61.5s44.6 16.9 61.5 0L915.3 110c16.9-16.9 16.9-44.6 0-61.5s-44.6-16.9-61.5 0zM467.9 35.8H141.5c-23.9 0-43.5 19.6-43.5 43.5s19.6 43.5 43.5 43.5h326.4c23.9 0 43.5-19.6 43.5-43.5 0.1-23.9-19.5-43.5-43.5-43.5zM619.4 605.5C493.3 605.5 391 503.2 391 377s102.3-228.5 228.5-228.5S847.9 250.8 847.9 377 745.6 605.5 619.4 605.5z m0-388.4c-88.3 0-159.9 71.6-159.9 159.9 0 88.3 71.6 159.9 159.9 159.9s160-71.5 160-159.9c0-88.3-71.6-159.9-160-159.9z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon-" unicode="&#59171;" d="M359.0144 798.72A71.68 71.68 0 0 0 430.08 727.04v-195.1744a71.68 71.68 0 0 0-71.68-71.68H163.84a71.68 71.68 0 0 0-71.68 71.68V727.04A71.68 71.68 0 0 0 163.84 798.72h195.1744m0 51.2H163.84a122.88 122.88 0 0 1-122.88-122.88v-195.1744a122.88 122.88 0 0 1 122.88-122.88h195.1744a122.88 122.88 0 0 1 122.88 122.88V727.04a122.88 122.88 0 0 1-122.88 122.88zM860.16 798.72a71.68 71.68 0 0 0 71.68-71.68v-195.1744a71.68 71.68 0 0 0-71.68-71.68h-195.1744a71.68 71.68 0 0 0-71.68 71.68V727.04a71.68 71.68 0 0 0 71.68 71.68H860.16m0 51.2h-195.1744a122.88 122.88 0 0 1-122.88-122.88v-195.1744a122.88 122.88 0 0 1 122.88-122.88H860.16a122.88 122.88 0 0 1 122.88 122.88V727.04a122.88 122.88 0 0 1-122.88 122.88zM359.0144 297.5744a71.68 71.68 0 0 0 71.68-71.68v-195.1744a71.68 71.68 0 0 0-71.68-71.68H163.84a71.68 71.68 0 0 0-71.68 71.68v195.1744a71.68 71.68 0 0 0 71.68 71.68h195.1744m0 51.2H163.84a122.88 122.88 0 0 1-122.88-122.88v-195.1744a122.88 122.88 0 0 1 122.88-122.88h195.1744a122.88 122.88 0 0 1 122.88 122.88v195.1744a122.88 122.88 0 0 1-122.88 122.88zM583.0656-71.2704A25.6 25.6 0 0 0 557.4656-46.08V302.08a25.6 25.6 0 0 0 51.2 0v-348.16a25.6 25.6 0 0 0-25.6-25.1904zM931.84-71.2704A25.6 25.6 0 0 0 906.24-46.08V302.08a25.6 25.6 0 0 0 51.2 0v-348.16a25.6 25.6 0 0 0-25.6-25.1904zM762.4704-71.2704A25.6 25.6 0 0 0 737.28-46.08V240.64a25.6 25.6 0 0 0 51.2 0v-286.72a25.6 25.6 0 0 0-26.0096-25.1904z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zuhe" unicode="&#58938;" d="M839.036 765.542H184.964c-30.102 0-54.506-24.404-54.506-54.506v-654.072c0-30.102 24.404-54.506 54.506-54.506h654.072c30.102 0 54.506 24.404 54.506 54.506V711.036c0 30.102-24.404 54.506-54.506 54.506z m0-681.328c0-15.05-12.196-27.249-27.249-27.249H213.066c-15.05 0-27.249 12.196-27.249 27.249V682.935c0 15.05 12.196 27.249 27.249 27.249h598.721c15.049 0 27.249-12.196 27.249-27.249v-598.721zM730.028 474.361H602.704V601.178c0 30.091-24.402 54.499-54.501 54.499H295.448c-30.098 0-54.501-24.401-54.501-54.499v-253.89c0-30.091 24.402-54.499 54.501-54.499h127.324v-126.817c0-30.091 24.402-54.499 54.501-54.499h252.755c30.098 0 54.501 24.401 54.501 54.499v253.89c0 30.091-24.402 54.499-54.501 54.499zM323.36 347.863c-15.05 0-27.251 12.207-27.251 27.26V572.817c0 15.055 12.201 27.26 27.251 27.26h196.928c15.051 0 27.251-12.207 27.251-27.26v-98.458h-70.267c-30.098 0-54.501-24.401-54.501-54.499v-71.998H323.36z m224.179 70.897v-43.638c0-15.055-12.202-27.26-27.251-27.26h-42.353V391.5c0 15.055 12.202 27.26 27.251 27.26h42.353z m181.826-224.953c0-15.055-12.201-27.26-27.251-27.26H505.186c-15.05 0-27.251 12.207-27.251 27.26v98.981h70.267c30.098 0 54.501 24.401 54.501 54.499v71.474h99.411c15.05 0 27.251-12.207 27.251-27.26v-197.693z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chaxun" unicode="&#60492;" d="M896 832H128c-35.296 0-64-28.704-64-64v-768c0-35.296 28.704-64 64-64h592a32 32 0 1 1 0 64H128V768h768v-592a32 32 0 1 1 64 0V768c0 35.296-28.704 64-64 64zM791.744 149.50400000000002A206.752 206.752 0 0 1 832 272c0 114.688-93.312 208-208 208S416 386.688 416 272s93.312-208 208-208a206.752 206.752 0 0 1 122.496 40.256l110.88-110.88a31.904 31.904 0 0 1 45.248 0 31.968 31.968 0 0 1 0 45.248l-110.88 110.88zM480 272c0 79.392 64.608 144 144 144s144-64.608 144-144-64.608-144-144-144-144 64.608-144 144zM800 632a32 32 0 0 1-32 32H256a32 32 0 0 1 0-64h512a32 32 0 0 1 32 32zM256 473.344a32 32 0 0 1 0-64h96a32 32 0 0 1 0 64H256z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shouqi1" unicode="&#59447;" d="M890.2 781H133.8c-20.9 0-37.8-16.9-37.8-37.8v-37.8c0-20.9 16.9-37.8 37.8-37.8h756.4c20.9 0 37.8 16.9 37.8 37.8v37.8c0 20.9-16.9 37.8-37.8 37.8zM890.2 440.7H398.5c-20.9 0-37.8-16.9-37.8-37.8v-37.8c0-20.9 16.9-37.8 37.8-37.8h491.6c20.9 0 37.8 16.9 37.8 37.8v37.8c0.1 20.9-16.8 37.8-37.7 37.8zM890.2 100.4H133.8c-20.9 0-37.8-16.9-37.8-37.8v-37.8c0-20.9 16.9-37.8 37.8-37.8h756.4c20.9 0 37.8 16.9 37.8 37.8v37.8c0 20.9-16.9 37.8-37.8 37.8zM266.2 295.3V472.7c0 22-29.2 33.1-46.2 17.5l-97.1-88.7c-10.6-9.7-10.6-25.3 0-35l97.1-88.7c17-15.5 46.2-4.5 46.2 17.5z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhankai" unicode="&#59448;" d="M133.8 781h756.4c20.9 0 37.8-16.9 37.8-37.8v-37.8c0-20.9-16.9-37.8-37.8-37.8H133.8c-20.9 0-37.8 16.9-37.8 37.8v37.8c0 20.9 16.9 37.8 37.8 37.8zM133.8 440.7h491.6c20.9 0 37.8-16.9 37.8-37.8v-37.8c0-20.9-16.9-37.8-37.8-37.8H133.8c-20.9 0-37.8 16.9-37.8 37.8v37.8c0 20.9 16.9 37.8 37.8 37.8zM133.8 100.4h756.4c20.9 0 37.8-16.9 37.8-37.8v-37.8c0-20.9-16.9-37.8-37.8-37.8H133.8c-20.9 0-37.8 16.9-37.8 37.8v37.8c0 20.9 16.9 37.8 37.8 37.8zM757.8 295.3V472.7c0 22 29.2 33.1 46.2 17.5l97.1-88.7c10.6-9.7 10.6-25.3 0-35L804 277.9c-17-15.6-46.2-4.6-46.2 17.4z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fabu" unicode="&#58911;" d="M437.682-31.944c-17.673 0-32 14.327-32 32v235.2c0 17.673 14.327 32 32 32s32-14.327 32-32v-235.2c0-17.673-14.327-32-32-32zM444.929 210.034a31.878 31.878 0 0 0-20.752 7.654c-13.446 11.47-15.048 31.668-3.579 45.113l452.025 529.934c11.468 13.444 31.665 15.048 45.112 3.579 13.446-11.469 15.049-31.667 3.579-45.113L469.29 221.269c-6.329-7.42-15.318-11.235-24.361-11.235zM794.905 0.046a31.875 31.875 0 0 0-14.07 3.277L542.347 120.317c-15.866 7.784-22.419 26.956-14.636 42.823 7.783 15.866 26.957 22.419 42.823 14.636l238.488-116.994c15.866-7.784 22.419-26.956 14.636-42.823-5.558-11.331-16.929-17.913-28.753-17.913zM324.426 245.534a31.853 31.853 0 0 0-15.102 3.809L114.875 353.676c-15.573 8.355-21.424 27.754-13.068 43.327 8.356 15.574 27.755 21.424 43.327 13.068l194.449-104.333c15.573-8.355 21.424-27.754 13.068-43.327-5.772-10.759-16.816-16.877-28.225-16.877zM130.332 351.865c-11.683 0-22.938 6.419-28.576 17.555-7.982 15.768-1.67 35.021 14.098 43.003L882.516 800.519c15.771 7.982 35.021 1.669 43.004-14.098 7.981-15.768 1.67-35.021-14.099-43.003L144.759 355.322a31.883 31.883 0 0 0-14.427-3.457zM797.13-0.074c-1.42 0-2.855 0.095-4.302 0.289-17.517 2.354-29.807 18.461-27.453 35.978l99.084 737.288c2.354 17.516 18.458 29.806 35.977 27.453 17.517-2.354 29.807-18.461 27.453-35.977l-99.084-737.288c-2.159-16.07-15.897-27.743-31.675-27.743z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tianchongxing-" unicode="&#58934;" d="M403.7 859.4h-0.5v0.1H349v0.1H98.6c-35.3-2.5-63.3-31.9-63.3-67.9v-0.5h-0.1v-54.1h-0.1v-246c1.8-36 31.6-64.5 68-64.5h0.5v-0.1h307.5c29.5 3.3 53.3 25.4 59.1 54.1V805.4c-6.4 30.8-33.7 54-66.5 54zM919.6 859.4h-0.5v0.1H865v0.1H614.6c-35.3-2.5-63.3-31.9-63.3-67.9v-0.5h-0.1v-54.1h-0.1v-246c1.8-36 31.6-64.5 68-64.5h0.5v-0.1h307.5c29.5 3.3 53.3 25.4 59.1 54.1V805.4c-6.4 30.8-33.8 54-66.6 54zM403.7 345H349v0.1H98.6c-35.3-2.5-63.3-31.9-63.3-67.9v-0.5h-0.1v-54.1h-0.1v-246c1.8-36 31.6-64.5 68-64.5h0.5v-0.1h307.5c29.5 3.3 53.3 25.4 59.1 54.1V290.9c-6.4 30.9-33.7 54.1-66.5 54.1zM919.6 345H865v0.1H614.6c-35.3-2.5-63.3-31.9-63.3-67.9v-0.5h-0.1v-54.1h-0.1v-246c1.8-36 31.6-64.5 68-64.5h0.5v-0.1h307.5c29.5 3.3 53.3 25.4 59.1 54.1V290.9c-6.4 30.9-33.8 54.1-66.6 54.1z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiaoseguanli" unicode="&#58949;" d="M711.016 106.667c-37.703 0-68.267 30.564-68.267 68.266 0 37.703 30.564 68.267 68.267 68.267 37.703 0 68.267-30.564 68.267-68.267 0-37.702-30.564-68.266-68.267-68.266z m0 51.2c9.426 0 17.067 7.64 17.067 17.066 0 9.426-7.641 17.067-17.067 17.067s-17.067-7.641-17.067-17.067c0-9.425 7.641-17.066 17.067-17.066z m65.626 130.735H645.39l-65.626-113.669 65.626-113.668h131.253l65.627 113.668-65.627 113.669zM502.87 349.93C334.628 305.348 237.74 222.746 206.327 101.358c-6.494-25.094 8.585-50.701 33.678-57.195a46.933 46.933 0 0 1 11.758-1.496h249.862c21.207 0 38.4-17.193 38.4-38.4 0-21.208-17.193-38.4-38.4-38.4H251.763a123.733 123.733 0 0 0-30.998 3.945c-66.156 17.12-105.909 84.63-88.79 150.786 31.335 121.089 114.154 210.328 245.417 267.32-53.698 37.84-88.776 100.331-88.776 171.015C288.616 674.398 382.218 768 497.683 768c115.464 0 209.066-93.602 209.066-209.067 0-113.73-90.811-206.25-203.879-209.003z m408.373-192.063L825.91 10.065a34.133 34.133 0 0 0-29.56-17.067H625.682a34.133 34.133 0 0 0-29.56 17.067l-85.334 147.802a34.133 34.133 0 0 0 0 34.133l85.333 147.802a34.133 34.133 0 0 0 29.56 17.066H796.35a34.133 34.133 0 0 0 29.56-17.066L911.244 192a34.133 34.133 0 0 0 0-34.133z m-413.56 268.8c73.048 0 132.266 59.217 132.266 132.266 0 73.05-59.218 132.267-132.266 132.267-73.05 0-132.267-59.218-132.267-132.267 0-73.049 59.218-132.266 132.267-132.266z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="guanlian" unicode="&#59020;" d="M192.037 319.954h64.013v-63.919H128.025V767.969l576.112 0.041v-511.975H512.099v63.919h128.025V704.216h-448.34zM768.149 512.21v-64.419h64.013v-383.512H384.075V447.791h128.024V512.21H320.062v-511.849h576.112V512.21z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wj-wjsc" unicode="&#59249;" d="M744.8 186.79999999999995l23.1 23.1V-32c0-17.7 14.3-32 32-32s32 14.3 32 32V209.89999999999998l23.1-23.1c12.5-12.5 32.8-12.5 45.3 0 6.3 6.3 9.4 14.4 9.4 22.6s-3.1 16.4-9.4 22.6l-77.7 77.7c-0.4 0.4-0.8 0.7-1.2 1.1-0.2 0.1-0.3 0.3-0.5 0.4-0.2 0.2-0.4 0.4-0.7 0.6-0.2 0.2-0.5 0.4-0.7 0.6-0.2 0.1-0.3 0.3-0.5 0.4-0.3 0.2-0.5 0.4-0.8 0.6-0.2 0.1-0.3 0.2-0.5 0.3-0.3 0.2-0.6 0.4-0.9 0.5-0.2 0.1-0.3 0.2-0.5 0.3-0.3 0.2-0.6 0.3-0.9 0.5-0.2 0.1-0.3 0.2-0.5 0.3-0.3 0.1-0.5 0.3-0.8 0.4l-0.6 0.3c-0.2 0.1-0.5 0.2-0.8 0.3-0.2 0.1-0.5 0.2-0.7 0.3-0.2 0.1-0.4 0.2-0.7 0.3-0.3 0.1-0.5 0.2-0.8 0.3-0.2 0.1-0.4 0.1-0.6 0.2l-0.9 0.3c-0.2 0.1-0.3 0.1-0.5 0.1-0.3 0.1-0.7 0.2-1 0.3-0.2 0-0.3 0.1-0.5 0.1-0.3 0.1-0.7 0.2-1 0.2-0.2 0-0.3 0.1-0.5 0.1-0.3 0.1-0.7 0.1-1 0.2-0.2 0-0.4 0-0.6 0.1-0.3 0-0.6 0.1-1 0.1-0.3 0-0.5 0-0.8 0.1-0.3 0-0.5 0-0.8 0.1H798.1c-0.3 0-0.5 0-0.8-0.1-0.3 0-0.5 0-0.8-0.1-0.3 0-0.7-0.1-1-0.1-0.2 0-0.4 0-0.6-0.1-0.3-0.1-0.7-0.1-1-0.2-0.2 0-0.3-0.1-0.5-0.1-0.3-0.1-0.7-0.1-1-0.2-0.2 0-0.3-0.1-0.5-0.1-0.3-0.1-0.7-0.2-1-0.3-0.2 0-0.3-0.1-0.5-0.1l-0.9-0.3c-0.2-0.1-0.4-0.1-0.6-0.2-0.3-0.1-0.5-0.2-0.8-0.3-0.2-0.1-0.4-0.2-0.7-0.3-0.2-0.1-0.5-0.2-0.7-0.3-0.3-0.1-0.5-0.2-0.8-0.3l-0.6-0.3c-0.3-0.1-0.5-0.3-0.8-0.4-0.2-0.1-0.3-0.2-0.5-0.3-0.3-0.2-0.6-0.3-0.9-0.5-0.2-0.1-0.3-0.2-0.5-0.3-0.3-0.2-0.6-0.4-0.9-0.5-0.2-0.1-0.3-0.2-0.5-0.3-0.3-0.2-0.5-0.4-0.8-0.6-0.2-0.1-0.3-0.3-0.5-0.4-0.2-0.2-0.5-0.4-0.7-0.6-0.2-0.2-0.4-0.4-0.7-0.6-0.2-0.1-0.3-0.3-0.5-0.4-0.4-0.4-0.8-0.7-1.2-1.1L699.1 232c-12.5-12.5-12.5-32.8 0-45.3 12.9-12.4 33.2-12.4 45.7 0.1zM641.2 639.9c0 17.7-14.3 32-32 32H225.7c-17.7 0-32-14.3-32-32s14.3-32 32-32h383.6c17.6 0 31.9 14.3 31.9 32zM641.2 447.8c0 17.7-14.3 32-32 32H225.7c-17.7 0-32-14.3-32-32s14.3-32 32-32h383.6c17.6 0 31.9 14.3 31.9 32zM225.7 287.70000000000005c-17.7 0-32-14.3-32-32s14.3-32 32-32h191.8c17.7 0 32 14.3 32 32s-14.3 32-32 32H225.7zM544.6 63.60000000000002H159.8c-17.6 0-31.9 14.3-31.9 32V735.9c0 17.7 14.3 32 31.9 32h513.9c17.6 0 31.9-14.3 31.9-32v-320.2c0-17.7 14.3-32 31.9-32 17.6 0 31.9 14.3 31.9 32V768c0 35.4-28.6 64-63.9 64H127.9C92.6 832 64 803.3 64 768v-704.4c0-35.4 28.6-64 63.9-64h416.8c17.6 0 31.9 14.3 31.9 32 0 17.6-14.3 32-32 32zM672 79.29999999999995c-17.7 0-32-14.3-32-32v-64c0-17.7 14.3-32 32-32s32 14.3 32 32v64c0 17.7-14.3 32-32 32zM607.8 224.10000000000002c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32s-32-14.3-32-32v-32c0-17.7 14.4-32 32-32zM896 95.10000000000002v-64c0-17.7 14.3-32 32-32s32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shijian" unicode="&#58935;" d="M512-128C230.4-128 0 102.39999999999998 0 384S230.4 896 512 896s512-230.4 512-512-230.4-512-512-512z m0 960C262.4 832 64 633.6 64 384s198.4-448 448-448 448 198.4 448 448S761.6 832 512 832zM729.6 352H512c-19.2 0-32 19.2-32 32V716.8c0 19.2 12.8 32 32 32s32-12.8 32-32v-294.4h185.6c19.2 0 32-12.8 32-32s-12.8-38.4-32-38.4z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shouqi-" unicode="&#58961;" d="M176 382.3l392.73 395.44a32 32 0 0 1-45.41 45.1L108 404.7a32 32 0 0 1 0.16-45.25L523.48-53a32 32 0 1 1 45.1 45.41zM525.23 382.3L918 777.74a32 32 0 1 1-45.41 45.1L457.27 404.7a32 32 0 0 1 0.16-45.25L872.7-53a32 32 0 0 1 45.1 45.41z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhankai-" unicode="&#58973;" d="M849 386.7L456.27-8.74a32 32 0 0 1 45.41-45.1L917 364.3a32 32 0 0 1-0.16 45.25L501.53 822a32 32 0 1 1-45.1-45.41zM499.78 386.7L107.05-8.74a32 32 0 0 1 45.41-45.1L567.74 364.3a32 32 0 0 1-0.16 45.25L152.31 822a32 32 0 0 1-45.1-45.41z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="niantie" unicode="&#58964;" d="M576 192V448H256v-320h320v64z m128 0v-192H128V576h192V640h64v-64h320v-320h64v-64h-64zM320 768h64v-64H320V768z m128 0h64v-64H448V768z m128 0h64v-64H576V768z m128 0h64v-64h-64V768z m128 0h64v-64h-64V768z m0-128h64v-64h-64V640z m0-128h64v-64h-64V512z m0-128h64v-64h-64V384z m0-128h64v-64h-64v64z m-384 0h64v-64H448v64z m-128 0h64v-64H320v64z m0 128h64v-64H320V384z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zuzhi" unicode="&#59154;" d="M738 286v61a8 8 0 0 1-8 8H294a8 8 0 0 1-8-8v-61h96c17.673 0 32-14.327 32-32v-286c0-17.673-14.327-32-32-32H96c-17.673 0-32 14.327-32 32V254c0 17.673 14.327 32 32 32h126V387c0 17.673 14.327 32 32 32h226v63H369c-17.673 0-32 14.327-32 32V800c0 17.673 14.327 32 32 32h286c17.673 0 32-14.327 32-32v-286c0-17.673-14.327-32-32-32H544v-63h226c17.673 0 32-14.327 32-32v-101h126c17.673 0 32-14.327 32-32v-286c0-17.673-14.327-32-32-32H642c-17.673 0-32 14.327-32 32V254c0 17.673 14.327 32 32 32h96zM409 768a8 8 0 0 1-8-8v-206a8 8 0 0 1 8-8h206a8 8 0 0 1 8 8V760a8 8 0 0 1-8 8H409zM136 222a8 8 0 0 1-8-8v-206a8 8 0 0 1 8-8h206a8 8 0 0 1 8 8V214a8 8 0 0 1-8 8H136z m546 0a8 8 0 0 1-8-8v-206a8 8 0 0 1 8-8h206a8 8 0 0 1 8 8V214a8 8 0 0 1-8 8H682z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiaoseguanli1" unicode="&#58917;" d="M477.867 307.2c64 0 123.733 25.6 166.4 68.267 46.933 42.666 68.266 102.4 68.266 166.4s-25.6 123.733-68.266 166.4c-42.667 46.933-102.4 68.266-166.4 68.266s-123.734-25.6-166.4-68.266c-46.934-38.4-72.534-98.134-72.534-162.134s25.6-123.733 68.267-166.4C354.133 332.8 413.867 307.2 477.867 307.2z m0 418.133c98.133 0 179.2-81.066 179.2-179.2 0-98.133-81.067-179.2-179.2-179.2-98.134 0-179.2 81.067-179.2 179.2 0 98.134 81.066 179.2 179.2 179.2z m-162.134-409.6c-46.933-21.333-93.866-51.2-132.266-89.6-38.4-38.4-68.267-81.066-89.6-132.266-12.8-34.134-21.334-64-29.867-98.134-4.267-17.066 12.8-34.133 29.867-34.133 12.8 0 25.6 8.533 29.866 25.6 4.267 29.867 12.8 59.733 25.6 85.333C166.4 115.2 192 153.6 226.133 183.467c34.134 34.133 72.534 59.733 115.2 76.8 17.067 8.533 21.334 25.6 17.067 38.4-8.533 17.066-25.6 21.333-42.667 17.066z m622.934 98.134c-12.8 12.8-34.134 8.533-46.934-4.267l-307.2-379.733-174.933 140.8c-12.8 12.8-34.133 8.533-46.933-4.267-12.8-12.8-8.534-34.133 4.266-46.933l200.534-162.134c4.266-4.266 12.8-8.533 21.333-8.533s17.067 4.267 25.6 12.8l328.533 401.067c12.8 21.333 12.8 38.4-4.266 51.2z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="T-yanse" unicode="&#59169;" d="M413 258.5c-81.9-4.6-118.8 10.2-110.6 44.4 0 13.7 6.8 35.3 20.5 64.9 13.6 27.3 23.1 47.8 28.6 61.5h245.8c38.2-72.9 58.7-119.5 61.5-140 8.2-25.1-20.5-35.3-86-30.7v-30.7h295v30.7c-57.4-6.8-97 20.5-118.8 81.9L519.6 832.1h-36.9l-213-481.4c-19.1-66-62.8-96.8-131.1-92.2v-30.7H413v30.7z m57.4 437L581 466.7H363.9l106.5 228.8zM872.5 130.7h-728c-10.1 0-18.2-8.1-18.2-18.2v-157.8c0-10 8.1-18.2 18.2-18.2h728c10.1 0 18.2 8.2 18.2 18.2V112.5c0 10-8.2 18.2-18.2 18.2z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dagou" unicode="&#59266;" d="M950.856 896H73.144A73.144 73.144 0 0 1 0 822.856v-877.712A73.144 73.144 0 0 1 73.144-128h877.712A73.144 73.144 0 0 1 1024-54.856V822.856A73.144 73.144 0 0 1 950.856 896z m-85.467-336.764L462.882 145.31a45.41 45.41 0 0 0-18.214-11.51 46.303 46.303 0 0 0-50.113 9.061L159.87 366.232a46.406 46.406 0 0 0 63.968 67.24l202.443-192.66 372.6 383.124a46.395 46.395 0 0 0 79.654-32.436 45.983 45.983 0 0 0-13.135-32.264z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhuanfa" unicode="&#58887;" d="M832 645.648L468.215 283.646c-15.66-15.582-40.986-15.52-56.569 0.14-15.582 15.659-15.52 40.985 0.14 56.568L777.222 704H626c-22.091 0-40 17.909-40 40s17.909 40 40 40h174c61.856 0 112-50.144 112-112v-174c0-22.091-17.909-40-40-40s-40 17.909-40 40V645.648z m0-339.909c0 22.092 17.909 40 40 40s40-17.908 40-40V96c0-61.856-50.144-112-112-112H224c-61.856 0-112 50.144-112 112V672c0 61.856 50.144 112 112 112h209.74c22.09 0 40-17.909 40-40s-17.91-40-40-40H224c-17.673 0-32-14.327-32-32v-576c0-17.673 14.327-32 32-32h576c17.673 0 32 14.327 32 32V305.74z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="quanping" unicode="&#58899;" d="M629.557 504.028c17.329-17.32 47.028-17.32 66.815 0l168.302 165.814v-133.637c0-19.806 14.85-34.647 34.637-34.647h24.743c19.806 0 34.657 12.372 34.657 29.692V776.267h-2.479l2.479 17.318c0 9.904-2.479 17.33-7.436 24.752-4.936 4.948-14.848 9.895-24.743 9.895h-17.327L664.211 830.71c-19.805 0-34.654-17.329-34.654-34.646v-24.752c2.478-22.274 19.789-34.646 39.593-34.646h128.69L632.036 570.851c-22.283-17.319-22.283-47.026-2.478-66.823zM394.44 266.443c-17.31 17.327-47.009 17.327-66.815 0l-168.3-165.807V231.805c0 19.787-14.833 34.638-34.638 34.638h-24.76c-19.788 0-34.639-12.372-34.639-29.699v-242.533h2.478l-2.478-17.327c0-9.894 2.478-17.31 7.416-24.744 4.956-4.956 14.868-9.894 24.761-9.894h17.328l244.993-2.478c19.823 0 34.655 17.328 34.655 34.638v24.76c-2.478 22.266-19.788 34.638-39.593 34.638H226.16l168.283 165.824c17.327 17.327 17.327 47.027-0.001 66.815z m561.79-274.709v242.55c0 19.787-17.329 29.68-34.639 29.68h-24.759c-19.788 0-34.639-17.31-34.639-34.638v-131.168l-168.3 165.806c-17.309 17.329-47.01 17.329-66.816 0-17.326-17.31-17.326-47.009 0-66.814l168.284-165.806h-128.69c-19.787 0-37.116-12.388-39.594-34.654v-24.745c0-19.805 17.33-34.654 34.64-34.654l240.071 2.478h17.329c9.893 0 17.31 2.478 24.743 9.894 4.955 4.956 7.415 14.85 7.415 24.744l4.955 17.327c-2.478 0 0 0 0 0zM228.636 736.665h128.69c19.806 0 37.116 12.373 39.593 34.646V796.064c0 19.797-17.309 34.646-34.654 34.646l-244.993-2.478H99.927c-9.876 0-17.31-2.478-24.743-9.895-4.939-4.956-7.416-14.849-7.416-24.752l2.477-17.318h-2.477v-245.018c0-19.797 14.85-29.692 34.638-29.692h24.743c19.823 0 34.655 14.841 34.655 34.646v133.64l168.283-165.815c17.345-17.32 47.045-17.32 66.832 0 17.33 17.327 17.33 47.026 0 66.823L228.636 736.665z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xuxiankuang" unicode="&#59343;" d="M127.99 768.01V576.004h64.047V704.216h128.025V768.01zM128.025 0.078H320.031v64.047H191.819V192.15h-63.794zM896.174 0.49V192.497h-64.047v-128.213H704.102v-63.794zM896.143 768.043H704.137v-64.047h128.212v-128.025h63.794zM448.087 768.01h128.025v-63.794H448.087zM127.99 447.791h64.047v-127.837H127.99zM832.162 447.791h63.981v-127.837h-63.981zM448.087 64.409h128.025v-64.202H448.087z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fuzhi" unicode="&#58922;" d="M725.179728 738.884267H147.461683C68.090305 738.884267 3.487283 674.190222 3.487283 594.716444v-578.548622C3.487283-63.305956 68.090305-128 147.461683-128H725.179728c79.371378 0 143.9744 64.694044 143.9744 144.167822V594.716444c0 79.485156-64.603022 144.1792-143.9744 144.1792z m79.371377-722.716445a78.836622 78.836622 0 0 0-79.371377-79.485155H147.461683a78.836622 78.836622 0 0 0-79.371378 79.485155V594.716444a78.836622 78.836622 0 0 0 79.371378 79.485156H725.179728a78.836622 78.836622 0 0 0 79.371377-79.485156z m0 0M878.438394 896H250.817417c-44.293689 0-86.744178-22.175289-114.437689-57.298489-11.070578-14.791111-7.384178-35.1232 7.384177-46.216533s35.066311-7.395556 46.136889 7.395555c14.791111 20.332089 36.909511 31.414044 62.759823 31.414045h627.564088c42.461867 0 77.5168-35.111822 77.5168-77.630578v-628.440178c0-20.332089-9.227378-40.664178-23.995733-55.455289a34.224356 34.224356 0 0 1-1.831822-46.205155c3.6864-5.552356 12.925156-9.238756 22.152533-9.238756a34.019556 34.019556 0 0 1 22.152534 9.238756c27.682133 25.873067 44.293689 64.694044 44.293688 103.537778v626.574222A142.279111 142.279111 0 0 1 878.438394 896z m0 0M679.042839 337.783467H468.622217V550.354489a33.223111 33.223111 0 1 1-66.446223 0V339.626667H191.755372a33.268622 33.268622 0 0 1 0-66.537245h210.420622v-210.716444a33.223111 33.223111 0 1 1 66.446223 0V273.1008h210.420622a33.109333 33.109333 0 0 1 33.223111 33.268622c0 18.488889-14.791111 31.425422-33.223111 31.425422z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhihang" unicode="&#58919;" d="M185.2672 669.0816c-19.456-0.256-35.0208-17.152-34.816-37.7344-0.2048-20.608 15.36-37.4784 34.816-37.76h417.536c19.456 0.256 35.0208 17.152 34.816 37.76 0.2048 20.5824-15.36 37.4784-34.816 37.7344H185.2672z m208.7936-226.4576H185.2672c-19.456-0.256-35.0208-17.152-34.816-37.7344-0.2048-20.5824 15.36-37.4784 34.816-37.7344h208.7936c19.456 0.256 35.0208 17.152 34.816 37.7344a38.4512 38.4512 0 0 1-10.0096 26.5216 34.304 34.304 0 0 1-24.8064 11.2128z m58.5216-452.9408c19.2768 0 34.816-16.8704 34.816-37.76 0.2048-20.5824-15.36-37.4784-34.816-37.7344H139.4176c-76.8 0-139.1872 67.6608-139.1872 150.9632V744.576C0.2304 827.8784 62.592 895.5392 139.4176 895.5392h626.304c76.7744 0 139.1616-67.6608 139.1616-150.9632v-188.7232c0.2048-20.5824-15.36-37.4784-34.816-37.7344-19.4304 0.2816-34.9696 17.152-34.7392 37.7344V744.576c0 41.7024-31.104 75.4688-69.6064 75.4688H139.4176c-38.4768 0-69.6064-33.7152-69.6064-75.4688v-679.424c0-41.728 31.1296-75.4688 69.632-75.4688h313.1392z m279.0912-117.4528c-77.5424 0.0512-151.8592 32.6912-206.6432 90.7776-54.784 58.0608-85.5296 136.8064-85.4784 218.88-0.0512 82.048 30.72 160.768 85.504 218.8032 54.784 58.0608 129.1008 90.7008 206.592 90.752 77.5424-0.0512 151.8592-32.6912 206.6432-90.752 54.784-58.0352 85.5296-136.7552 85.504-218.8288 0.0512-82.048-30.72-160.768-85.504-218.88-54.784-58.0608-129.1008-90.7008-206.6176-90.752z m0 60.672c62.2848 0.1024 121.984 26.368 165.9648 73.088 43.9808 46.6688 68.608 109.952 68.5312 175.872 0.1536 137.2928-104.832 248.704-234.496 248.9088-129.6896-0.2048-234.6752-111.616-234.496-248.9088-0.1024-65.92 24.5504-129.2032 68.5312-175.872 43.9808-46.6944 103.68-72.96 165.9648-73.088z m-24.8576 137.856V291.072c0 15.8208 15.9232 25.088 27.52 15.9488l139.7248-110.1568c4.6592-3.84 7.3984-9.728 7.3984-15.9744a20.6592 20.6592 0 0 0-7.424-16l-139.6992-110.1568c-11.52-9.1392-27.52 0.128-27.52 15.9488v0.0768z m-69.8368 220.3136c0 10.8288 7.808 19.5584 17.4592 19.5584 9.6768 0 17.4592-8.7296 17.4592-19.5584v-227.1744c0-10.8288-7.8336-19.5584-17.4592-19.5584a17.536 17.536 0 0 0-12.544 5.9392 19.6608 19.6608 0 0 0-4.9152 13.6192V291.072z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="liuchengmenhu" unicode="&#60918;" d="M56.888889 725.333333v-512h910.222222V725.333333H56.888889z m0 56.888889h910.222222c34.133333 0 56.888889-22.755556 56.888889-56.888889v-512c0-34.133333-22.755556-56.888889-56.888889-56.888889H56.888889c-34.133333 0-56.888889 22.755556-56.888889 56.888889V725.333333c0 34.133333 22.755556 56.888889 56.888889 56.888889zM28.444444 42.666667h967.111112c17.066667 0 28.444444-11.377778 28.444444-28.444445s-11.377778-28.444444-28.444444-28.444444H28.444444c-17.066667 0-28.444444 11.377778-28.444444 28.444444s11.377778 28.444444 28.444444 28.444445z m221.866667 324.266666c-11.377778-11.377778-28.444444-11.377778-39.822222 0-11.377778 11.377778-11.377778 28.444444 0 39.822223L398.222222 594.488889l227.555556-170.666667 153.6 153.6c11.377778 11.377778 28.444444 11.377778 39.822222 0 11.377778-11.377778 11.377778-28.444444 0-39.822222L625.777778 344.177778l-227.555556 170.666666-147.911111-147.911111z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon-test" unicode="&#58890;" d="M852 228.2c-14.4 27.3-34.9 51.7-61 72.5-24.6 19.7-53 35.2-83.8 46.1 39.9 32.3 65.4 81.6 65.4 136.8 0 97-78.9 175.9-175.9 175.9-16.6 0-30-13.4-30-30s13.4-30 30-30c63.9 0 115.9-52 115.9-115.9 0-63.9-52-115.9-115.9-115.9-16.6 0-30-13.4-30-30V334.8c-9.5 4.5-19.2 8.5-29.2 12.1 39.9 32.3 65.4 81.6 65.4 136.8 0 97-78.9 175.9-175.9 175.9s-175.9-78.9-175.9-175.9c0-55.2 25.6-104.5 65.4-136.8-30.8-10.9-59.2-26.4-83.8-46.1-26-20.8-46.5-45.2-61-72.5-15.2-28.8-23-59.6-23-91.3 0-16.6 13.4-30 30-30s30 13.4 30 30c0 43.7 21.8 85.3 61.4 117 41.6 33.3 97.2 51.6 156.7 51.6S542 287.3 583.5 254c39.6-31.7 61.4-73.2 61.4-117 0-16.6 13.4-30 30-30s30 13.4 30 30c0 31.7-7.7 62.5-23 91.3-14.4 27.3-34.9 51.7-61 72.5-1.7 1.4-3.5 2.7-5.2 4.1 52.1-3.5 100.4-21.3 137.4-50.9 39.6-31.7 61.4-73.2 61.4-117 0-16.6 13.4-30 30-30s30 13.4 30 30c0.5 31.6-7.2 62.3-22.5 91.2zM427.2 599.5c63.9 0 115.9-52 115.9-115.9 0-63.9-52-115.9-115.9-115.9s-115.9 52-115.9 115.9c0 63.9 52 115.9 115.9 115.9z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zanting" unicode="&#59002;" d="M511.8 832.3c-247.5 0-448.1-200.6-448.1-448.1s200.6-448.1 448.1-448.1 448.1 200.6 448.1 448.1S759.3 832.3 511.8 832.3z m271.6-719.7c-35.3-35.3-76.4-63-122.1-82.3-47.3-20-97.6-30.2-149.5-30.2-51.9 0-102.2 10.1-149.5 30.2-45.7 19.3-86.8 47-122.1 82.3s-63 76.4-82.3 122.1c-20 47.3-30.2 97.6-30.2 149.5s10.1 102.2 30.2 149.5c19.3 45.7 47 86.8 82.3 122.1s76.4 63 122.1 82.3c47.3 20 97.6 30.2 149.5 30.2 51.9 0 102.2-10.1 149.5-30.2 45.7-19.3 86.8-47 122.1-82.3s63-76.4 82.3-122.1c20-47.3 30.2-97.6 30.2-149.5S885.7 282 865.7 234.7c-19.3-45.8-47-86.8-82.3-122.1z m-207.6 79.6h64v384h-64v-384z m-192.1 0h64v384h-64v-384z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="renming" unicode="&#58891;" d="M759.85 45.67c-12.43 0-23.88 8.26-27.5 20.96C703.42 168.1 612.69 238.98 511.7 238.98c-102.02 0-190.56-68.77-220.3-171.13-4.46-15.35-20.32-24.15-35.55-19.62-15.16 4.51-23.85 20.62-19.39 35.97 36.97 127.24 147.58 212.73 275.23 212.73 126.35 0 239.71-88.1 275.67-214.25 4.38-15.37-4.38-31.43-19.58-35.87-2.64-0.77-5.31-1.14-7.93-1.14zM514.25 238.27h-6.88c-77.04 0-139.72 63.43-139.72 141.39v84.22c0 77.96 62.68 141.39 139.72 141.39h6.88c77.04 0 139.72-63.43 139.72-141.39v-84.22c0-77.97-62.68-141.39-139.72-141.39z m-6.88 309.05c-45.47 0-82.46-37.43-82.46-83.44v-84.22c0-46.01 36.99-83.44 82.46-83.44h6.88c45.47 0 82.46 37.43 82.46 83.44v84.22c0 46.01-36.99 83.44-82.46 83.44h-6.88zM512-50.6C275.18-50.6 82.51 144.35 82.51 384S275.18 818.6 512 818.6 941.49 623.65 941.49 384 748.82-50.6 512-50.6z m0 811.26c-205.25 0-372.22-168.97-372.22-376.66S306.75 7.34 512 7.34 884.22 176.31 884.22 384 717.25 760.66 512 760.66z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="baocun" unicode="&#59134;" d="M694.857143 749.714286v-146.285715a73.142857 73.142857 0 0 0-73.142857-73.142857h-256a73.142857 73.142857 0 0 0-73.142857 73.142857V749.714286H146.285714v-731.428572h658.285715V384a73.142857 73.142857 0 0 1-73.142858 73.142857H292.571429a73.142857 73.142857 0 0 1-73.142858-73.142857v-365.714286h73.142858V384h438.857142v-365.714286h146.285715V603.428571l-146.285715 146.285715h-36.571428zM146.285714 822.857143h621.714286l182.857143-182.857143v-621.714286a73.142857 73.142857 0 0 0-73.142857-73.142857H146.285714a73.142857 73.142857 0 0 0-73.142857 73.142857V749.714286a73.142857 73.142857 0 0 0 73.142857 73.142857z m219.428572-219.428572h256V749.714286h-256v-146.285715z m0-292.571428h219.428571v-73.142857h-219.428571v73.142857z m0-146.285714h292.571428v-73.142858h-292.571428v73.142858z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bianji1" unicode="&#58946;" d="M845.312-84.48H177.152c-69.12 0-125.44 56.32-125.44 125.44V708.608c0 69.12 56.32 125.44 125.44 125.44H624.64a34.304 34.304 0 0 0 0-68.608H177.152c-31.232 0-56.832-25.6-56.832-56.832v-668.16c0-31.232 25.6-56.832 56.832-56.832h668.16c31.232 0 56.832 25.6 56.832 56.832V472.576a34.304 34.304 0 0 0 68.608 0V40.96c-0.512-69.632-56.32-125.44-125.44-125.44zM593.92 400.384l370.688 370.688c13.312 13.312 13.312 34.816 0 48.128a33.9968 33.9968 0 0 1-48.128 0l-370.688-370.688a33.9968 33.9968 0 0 1 0-48.128c6.656-6.656 15.36-10.24 24.064-10.24s17.408 3.584 24.064 10.24z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daochu" unicode="&#58927;" d="M1024-128H0V896h496.064v-113.792H113.792v-796.416h796.416V288.448H1024zM1006.4 629.312l-260.48-317.824-87.424 72.064 150.4 181.568c-152.64-17.024-308.16-97.6-321.216-350.144-3.392-68.672-3.392-113.472-3.392-113.472H370.816s0 46.528 3.968 119.168c13.632 257.664 157.184 418.816 397.248 454.016l-154.944 128L689.152 891.776z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yanzheng" unicode="&#58965;" d="M926.429394 766.841788s-140.389361 8.142583-205.530025 20.777625c-35.378119 6.738689-137.862353 64.579106-194.018097 99.114889L512 896l-14.881272-9.265698c-37.624349-23.304634-154.147519-91.533863-194.018097-99.114889C236.556073 774.703592 98.693721 766.841788 98.693721 766.841788l-28.077872-1.684673v-465.8119c0-5.334796 2.527009-130.562106 153.024403-273.759254a719.635865 719.635865 0 0 1 276.005484-151.339731H517.896353l6.457911 1.403893A719.916644 719.916644 0 0 1 800.640526 25.585961c151.058953 144.039485 152.743625 268.705237 152.743625 274.040033V765.157115z m-29.762545-467.215794s-3.088566-106.976693-135.335344-233.046339a686.784755 686.784755 0 0 0-248.769948-137.581574h-1.403893a687.627091 687.627091 0 0 0-248.489169 137.581574C131.544831 191.526186 126.771593 298.502879 126.771593 299.345215V711.809158c42.678366 2.807787 133.369893 9.827255 186.437072 20.216068 48.013162 9.265698 151.901289 69.633123 198.229778 97.430217 46.328489-28.077872 150.216616-88.445298 198.229777-97.430217 53.067179-10.108034 143.758706-17.127502 186.437072-20.216068zM306.469975 479.043597A28.077872 28.077872 0 1 1 267.160954 438.89224l201.318344-201.879901 308.856595 280.778722A28.077872 28.077872 0 0 1 737.746093 559.065533l-268.14368-243.996709z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="qiehuan" unicode="&#58951;" d="M886.2 291.2H137.8c-22.1 0-40-17.9-40-40 0-8.4 2.6-16.2 7-22.6 1.9-4.5 4.8-8.7 8.4-12.4L289.5 40c7.8-7.8 18-11.7 28.3-11.7s20.5 3.9 28.3 11.7c15.6 15.6 15.6 40.9 0 56.6L231.3 211.2h654.8c22.1 0 40 17.9 40 40s-17.8 40-39.9 40zM137.8 476.8h748.4c22.1 0 40 17.9 40 40 0 8.4-2.6 16.2-7 22.6-1.4 3.3-3.4 6.5-5.8 9.5L769.2 725.1c-14 17.1-39.2 19.6-56.3 5.6-17.1-14-19.6-39.2-5.6-56.3l96.3-117.6H137.8c-22.1 0-40-17.9-40-40s17.9-40 40-40z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tupian1" unicode="&#59521;" d="M0 844.8v-921.6h1024V844.8z m921.6-819.2L358.4 486.4l-256-256V742.4h819.2zM716.8 537.6m-102.4 0a102.4 102.4 0 1 1 204.8 0 102.4 102.4 0 1 1-204.8 0Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="liucheng" unicode="&#59091;" d="M885.458824 215.341176h6.023529c6.023529 24.094118 6.023529 54.211765 6.023529 78.305883 0 150.588235-84.329412 283.105882-210.823529 349.364706v18.070588c0 102.4-78.305882 180.705882-180.705882 180.705882S331.294118 757.458824 331.294118 655.058824v-18.070589c-126.494118-60.235294-210.823529-192.752941-210.82353-343.341176 0-30.117647 0-54.211765 6.02353-78.305883h6.023529C72.282353 185.223529 30.117647 124.988235 30.117647 52.705882c0-102.4 78.305882-180.705882 180.705882-180.705882 60.235294 0 114.447059 30.117647 144.564706 72.282353 0-6.023529-6.023529-6.023529-6.023529-12.047059 48.188235-18.070588 102.4-30.117647 162.635294-30.117647s114.447059 12.047059 162.635294 36.141177c0 0-6.023529 6.023529-6.023529 12.047058 30.117647-48.188235 84.329412-78.305882 144.564706-78.305882 102.4 0 180.705882 78.305882 180.705882 180.705882 0 72.282353-42.164706 132.517647-108.423529 162.635294zM512 775.529412c66.258824 0 120.470588-54.211765 120.470588-120.470588s-54.211765-120.470588-120.470588-120.470589-120.470588 54.211765-120.470588 120.470589 54.211765 120.470588 120.470588 120.470588zM210.823529-67.764706c-66.258824 0-120.470588 54.211765-120.470588 120.470588s54.211765 120.470588 120.470588 120.470589 120.470588-54.211765 120.470589-120.470589-54.211765-120.470588-120.470589-120.470588z m421.647059 120.470588c0-24.094118 6.023529-48.188235 12.047059-66.258823V-7.529412c-42.164706-18.070588-84.329412-30.117647-132.517647-30.117647s-90.352941 12.047059-132.517647 30.117647v-6.023529c6.023529 18.070588 12.047059 42.164706 12.047059 66.258823 0 102.4-78.305882 180.705882-180.705883 180.705883-12.047059 0-18.070588 0-30.117647-6.02353h6.02353c-6.023529 24.094118-6.023529 42.164706-6.02353 66.258824 0 120.470588 66.258824 228.894118 168.658824 289.129412C373.458824 516.517647 439.717647 474.352941 512 474.352941s138.541176 42.164706 168.658824 108.42353c96.376471-60.235294 162.635294-168.658824 162.635294-289.129412 0-24.094118 0-42.164706-6.02353-60.235294h6.02353-30.117647c-102.4 0-180.705882-78.305882-180.705883-180.705883z m30.117647-96.37647c-6.023529 6.023529-6.023529 12.047059-12.047059 18.070588 6.023529-6.023529 6.023529-12.047059 12.047059-18.070588z m-301.17647 0c6.023529 6.023529 6.023529 12.047059 12.047059 18.070588-6.023529-6.023529-6.023529-12.047059-12.047059-18.070588z m-216.847059 265.035294c6.023529 0 12.047059 6.023529 18.070588 6.023529 0 0-12.047059-6.023529-18.070588-6.023529z m192.752941 391.529412c0-6.023529 6.023529-18.070588 6.023529-24.094118 0 12.047059-6.023529 18.070588-6.023529 24.094118z m349.364706 0c0-6.023529-6.023529-18.070588-6.023529-24.094118 0 12.047059 6.023529 18.070588 6.023529 24.094118z m192.752941-391.529412c-6.023529 0-12.047059 6.023529-18.070588 6.023529 0 0 12.047059-6.023529 18.070588-6.023529zM813.176471-67.764706c-66.258824 0-120.470588 54.211765-120.470589 120.470588s54.211765 120.470588 120.470589 120.470589 120.470588-54.211765 120.470588-120.470589-54.211765-120.470588-120.470588-120.470588z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shaixuan" unicode="&#59157;" d="M794.102 76.01C759.68 43.753 713.397 24 662.5 24 556.185 24 470 110.185 470 216.5S556.185 409 662.5 409 855 322.815 855 216.5c0-23.663-4.27-46.328-12.08-67.268l99.814-67.842c20.098-13.66 25.316-41.026 11.656-61.124-13.66-20.098-41.026-25.316-61.124-11.656l-99.164 67.4zM84 749c-24.3 0-44 19.7-44 44s19.7 44 44 44h834c24.3 0 44-19.7 44-44s-19.7-44-44-44H84z m0-498.5c-24.3 0-44 19.7-44 44s19.7 44 44 44h251c24.3 0 44-19.7 44-44s-19.7-44-44-44H84z m0 249c-24.3 0-44 19.7-44 44s19.7 44 44 44h834c24.3 0 44-19.7 44-44s-19.7-44-44-44H84z m0-499c-24.3 0-44 19.7-44 44s19.7 44 44 44h251c24.3 0 44-19.7 44-44s-19.7-44-44-44H84zM662.5 112c57.714 0 104.5 46.786 104.5 104.5S720.214 321 662.5 321 558 274.214 558 216.5 604.786 112 662.5 112z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="21file" unicode="&#59046;" d="M908.4 781.6c0 27.6-22.4 50-50 50H166.7c-27.6 0-50-22.4-50-50v-794.7c0-27.6 22.4-50 50-50H474c20.8 0.3 37.5 17.2 37.5 38s-16.7 37.7-37.5 38H192.7V755.6h639.7v-481.3H645.9c-38 0-68.8-30.8-68.8-68.8V-18c0-0.6 0-1.3 0.1-1.9-0.7-10.6 2.9-21.4 11-29.5 14.8-14.8 39-14.8 53.7 0l255.5 255.5c7.6 7.6 11.3 17.7 11.1 27.8V781.6zM671.9 198.39999999999998H782l-129-129V179.60000000000002c0.1 10.4 8.5 18.8 18.9 18.8zM321.5 549h381c21.4 0 39 17.5 39 39 0 21.4-17.5 39-39 39h-381c-21.4 0-39-17.5-39-39 0-21.4 17.5-39 39-39zM282.5 407c0-21.4 17.5-39 39-39h381c21.4 0 39 17.5 39 39 0 21.4-17.5 39-39 39h-381c-21.5 0-39-17.5-39-39z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jurassic_version" unicode="&#59030;" d="M885.3 628.1L780.1 733.4l-98.3 98.3c-0.2 0.2-0.4 0.3-0.7 0.3H150c-11 0-20-9-20-20v-856c0-11 9-20 20-20h724c11 0 20 9 20 20V619c0 0.3-0.1 0.5-0.3 0.7l-8.4 8.4zM671.1 755.5c0 0.9 1.1 1.3 1.7 0.7l66.4-66.4 79-79.1c0.6-0.6 0.2-1.7-0.7-1.7H672.1c-0.5 0-1 0.4-1 1V755.5zM189.7-3.2999999999999545V771.3c0 0.5 0.4 1 1 1h419.7c0.5 0 1-0.4 1-1v-219c0-0.5 0.4-1 1-1 0.5 0 1-0.4 1-1 0-0.5 0.4-1 1-1h218.9c0.5 0 1-0.4 1-1v-551.5c0-0.5-0.4-1-1-1H190.7c-0.6-0.1-1 0.4-1 0.9zM535.2 236.5l123 276.1c0.3 0.7-0.2 1.4-0.9 1.4h-44.4c-0.4 0-0.8-0.2-0.9-0.6L519.7 297c-3.9-8.6-6.5-17.1-7.6-25.3H511c-1.5 9.5-3.7 17.8-6.8 25l-90.6 216.8c-0.2 0.4-0.5 0.6-0.9 0.6h-46.2c-0.7 0-1.2-0.7-0.9-1.4l120.7-276.1c0.2-0.4 0.5-0.6 0.9-0.6h47c0.5-0.1 0.9 0.2 1 0.5zM345.7 104.10000000000002h332.5c0.5 0 1 0.4 1 1v57.7c0 0.5-0.4 1-1 1H345.7c-0.5 0-1-0.4-1-1v-57.7c0-0.5 0.5-1 1-1z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jurassic_add-users" unicode="&#59124;" d="M717.7 302.79999999999995c-34.2 28.2-72.6 50.2-114.1 65.4-8 2.9-16.2 5.6-24.4 8 22.1 11.3 42.6 26.2 60.6 44.2 45.5 45.5 70.6 106.1 70.6 170.4s-25.1 124.9-70.6 170.4C594.3 806.9 533.8 832 469.4 832s-124.9-25.1-170.5-70.6c-45.5-45.5-70.6-106.1-70.6-170.4s25.1-124.9 70.6-170.4c18.1-18.1 38.5-32.9 60.6-44.2-14.3-4.2-28.3-9.2-42.1-15-46.5-19.7-88.2-47.8-124.1-83.6-35.8-35.8-64-77.6-83.7-124.1C89.3 105.39999999999998 79 54.299999999999955 79 1.6000000000000227c0-17.7 14.3-32 32-32s32 14.3 32 32c0 180 146.4 326.4 326.4 326.4 75.6 0 149.3-26.5 207.6-74.5 13.6-11.2 33.8-9.3 45 4.3 11.3 13.6 9.4 33.8-4.3 45zM292.3 591c0 97.6 79.4 177 177.1 177 97.6 0 177.1-79.4 177.1-177s-79.4-177-177.1-177c-97.6-0.1-177.1 79.3-177.1 177zM956.7 362.5c-36.9 30.5-79.1 53.8-124.2 69 38.4 39.6 57.2 92.2 57.2 159.5 0 109.7-74.1 205.6-180.1 233.3-17.1 4.5-34.6-5.8-39-22.9-4.5-17.1 5.8-34.6 22.9-39C771.3 742 825.7 671.6 825.7 591c0-66.8-21.7-109.9-70.5-139.5-11.4-7-16.9-19.9-15-32.4-2.7-17.2 8.8-33.4 26-36.5 54.8-9.8 106.6-33.8 149.8-69.4 6-4.9 13.2-7.3 20.4-7.3 9.2 0 18.4 4 24.7 11.6 11.1 13.6 9.2 33.8-4.4 45zM847 128V256h-64v-128H655v-64h128v-128h64V64h128v64z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xinzeng" unicode="&#58892;" d="M594.04-63.5H142.31c-41.14 0-74.6 33.46-74.6 74.6V528.53c0 21.18 17.17 38.36 38.36 38.36s38.36-17.17 38.36-38.36v-515.32h449.62c21.18 0 38.36-17.17 38.36-38.36-0.01-21.18-17.18-38.35-38.37-38.35zM783.71 326.74c-21.18 0-38.36 17.17-38.36 38.36V754.79H365.4c-21.18 0-38.36 17.17-38.36 38.36S344.22 831.5 365.4 831.5h382.07c41.14 0 74.6-33.46 74.6-74.6v-391.8c0-21.19-17.18-38.36-38.36-38.36z m-36.24 428.05h0.12-0.12zM360.67 457.94H130.53c-21.18 0-38.36 17.17-38.36 38.36s17.17 38.36 38.36 38.36h230.14c21.18 0 38.36-17.17 38.36-38.36s-17.18-38.36-38.36-38.36zM917.93 71.24h-268.5c-21.18 0-38.36 17.17-38.36 38.36 0 21.18 17.17 38.36 38.36 38.36h268.5c21.18 0 38.36-17.17 38.36-38.36 0-21.19-17.18-38.36-38.36-38.36zM783.68-63.01c-21.18 0-38.36 17.17-38.36 38.36v268.5c0 21.18 17.17 38.36 38.36 38.36 21.18 0 38.36-17.17 38.36-38.36v-268.5c0-21.19-17.18-38.36-38.36-38.36zM364.04 458.77c-21.18 0-38.36 17.17-38.36 38.36V785.36c0 21.18 17.17 38.36 38.36 38.36 21.18 0 38.36-17.17 38.36-38.36v-288.23c0-21.19-17.17-38.36-38.36-38.36zM106.24 497.02c-9.85 0-19.7 3.77-27.19 11.31-14.94 15.02-14.88 39.31 0.14 54.25L338.35 820.34c15.02 14.93 39.3 14.88 54.25-0.14 14.94-15.02 14.88-39.31-0.14-54.25L133.3 508.19c-7.49-7.45-17.27-11.17-27.06-11.17z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biaoqian_" unicode="&#58908;" d="M278.024631 672.090934a39.213474 39.213474 0 0 1 39.213474-39.213473H707.281457a39.213474 39.213474 0 1 1 0 77.511966H316.715259a39.213474 39.213474 0 0 1-38.690628-38.298493zM278.024631 423.3468a39.213474 39.213474 0 0 1 39.213474-39.213474H707.281457a39.213474 39.213474 0 1 1 0 77.511966H316.715259a39.213474 39.213474 0 0 1-38.690628-38.298492zM931.713238-127.994641a44.834072 44.834072 0 0 0-26.142316 8.365541L511.867646 164.799296 118.295082-119.367677A44.70336 44.70336 0 0 0 47.187983-82.899146V851.035086A44.964783 44.964783 0 0 0 92.152766 895.999869h839.691184a44.834072 44.834072 0 0 0 44.964783-44.964783V-83.029858a44.964783 44.964783 0 0 0-45.095495-44.964783zM511.867646 265.185789a46.141187 46.141187 0 0 0 26.142316-8.365541l348.738493-251.750501V806.070303H136.856126v-801.26198l348.738493 251.750502a44.441937 44.441937 0 0 0 26.142316 8.626964z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ziyuan" unicode="&#58945;" d="M0 497.777778L455.111111 896v-232.96C1024 526.222222 1024-128 1024-128s-199.111111 459.946667-568.888889 459.946667V99.555556z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ziyuan1" unicode="&#58954;" d="M1024 497.777778L568.888889 896v-232.96C0 526.222222 0-128 0-128s199.111111 459.946667 568.888889 459.946667V99.555556z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="diannao" unicode="&#58933;" d="M825.002667 708.266667H256.853333c-56.490667 0-102.4-45.909333-102.4-102.4v-315.733334c0-56.490667 45.909333-102.4 102.4-102.4h568.149334c56.490667 0 102.4 45.909333 102.4 102.4V605.866667c0 56.490667-45.909333 102.4-102.4 102.4z m34.133333-418.133334c0-18.773333-15.36-34.133333-34.133333-34.133333H256.853333c-18.773333 0-34.133333 15.36-34.133333 34.133333V605.866667c0 18.773333 15.36 34.133333 34.133333 34.133333h568.149334c18.773333 0 34.133333-15.36 34.133333-34.133333v-315.733334zM724.48 110.933333h-366.933333c-18.773333 0-34.133333-15.36-34.133334-34.133333s15.36-34.133333 34.133334-34.133333h366.933333c18.773333 0 34.133333 15.36 34.133333 34.133333s-15.36 34.133333-34.133333 34.133333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biangengguanlibeifen" unicode="&#58902;" d="M550.208-64H209.28A81.792 81.792 0 0 0 128 18.24V749.76A81.92 81.92 0 0 0 209.344 832h613.632a81.92 81.92 0 0 0 81.28-82.432v-405.76a29.824 29.824 0 1 0-59.584 0V749.44a22.272 22.272 0 0 1-21.76 22.656H209.408a22.08 22.08 0 0 1-21.696-22.528v-731.52a21.76 21.76 0 0 1 21.44-22.464h341.056a29.824 29.824 0 0 0 0.064-59.584z m196.352 600.96H285.824a29.824 29.824 0 1 0 0 59.712h460.8a29.824 29.824 0 1 0 0-59.712z m-204.8-156.8H285.824a29.824 29.824 0 1 0 0 59.712h255.936a29.824 29.824 0 1 0 0-59.648z m179.2-391.936c-101.12 0-183.424 83.84-183.424 186.624a29.824 29.824 0 1 0 59.712 0c0-70.016 55.552-126.976 123.584-126.976 17.408 0 34.24 3.712 50.048 10.88a29.888 29.888 0 0 0 24.768-54.336c-23.552-10.688-48.64-16.192-74.688-16.192z m153.6 156.8a29.824 29.824 0 0 0-29.824 29.824c0 70.016-55.552 126.976-123.648 126.976-16.32 0-32.384-3.2-47.36-9.6a29.888 29.888 0 0 0-23.424 54.912 180.224 180.224 0 0 0 70.784 14.336c101.12 0 183.424-83.84 183.424-186.624a30.016 30.016 0 0 0-29.952-29.824z m-204.8 104.576h-51.264a29.76 29.76 0 0 0-25.28 14.08 30.144 30.144 0 0 0-1.536 28.928l25.6 52.352a29.696 29.696 0 0 0 53.632 0l25.6-52.352a29.696 29.696 0 0 0-1.472-28.928 29.504 29.504 0 0 0-25.28-14.08z m127.552-269.568h-1.024a29.696 29.696 0 0 0-24.896 14.848l-25.6 44.288a29.888 29.888 0 0 0 23.808 44.672l58.048 4.032c11.392 0.704 22.144-5.12 27.904-14.848a30.016 30.016 0 0 0-1.024-31.616l-32.448-48.256a29.824 29.824 0 0 0-24.768-13.12z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="youxuliebiao" unicode="&#58967;" d="M139.58 763.38v-199.3h-32.25V724.01c-11.84-10.89-26.73-18.98-44.91-24.27V732.1c8.82 2.25 18.18 6.16 28.11 11.73 9.91 6.14 18.18 12.57 24.8 19.55h24.25zM171.01 461.76c12.14-11.16 18.2-25.41 18.2-43.27 0-17.3-6.64-32.93-19.3-47.16-7.73-8.39-21.5-18.98-40.8-32.11-20.11-13.39-32.23-25.11-36.64-35.16h97v-28.75H52.24c0 20.39 6.34 37.95 19.57 53.02 7.18 8.39 22.32 20.66 45.2 36.57 12.66 8.93 21.48 16.48 27 22.34 8.55 9.77 12.95 20.36 12.95 31.55 0 10.89-3.02 18.98-8.55 24.27-5.8 5.3-14.34 7.82-25.64 7.82-12.11 0-21.2-4.18-27.27-12.57-6.07-7.82-9.36-19.82-9.93-35.43H53.35c0.27 22.32 6.61 40.18 19.3 53.86 12.93 14.5 30.02 21.77 51.25 21.77 19 0 34.73-5.59 47.11-16.75zM171.04 166.94c11.86-9.77 17.91-23.16 17.91-40.48 0-21.77-11.02-36.27-32.8-43.55 11.59-3.61 20.68-8.93 26.75-16.18 6.61-7.52 9.91-17.3 9.91-29.02 0-18.43-6.34-33.5-19.02-45.23-13.23-12-30.57-18.14-52.07-18.14-20.39 0-36.93 5.3-49.34 15.91-13.77 11.73-21.48 29.02-23.14 51.36h32.8c0.55-12.84 4.41-22.89 12.11-29.86 6.91-6.43 16-9.77 27.3-9.77 12.39 0 22.32 3.64 29.48 10.61 6.34 6.41 9.64 14.23 9.64 23.7 0 11.45-3.57 19.82-10.18 25.14-6.61 5.57-16.27 8.09-28.93 8.09h-13.8V94.1h13.8c11.57 0 20.39 2.5 26.45 7.52 5.77 5.02 8.82 12.57 8.82 22.34s-2.75 17.02-8 22.05c-5.8 5.02-14.32 7.55-25.61 7.55-11.59 0-20.41-2.8-26.75-8.66-6.61-5.86-10.45-14.8-11.57-26.8H53.1c1.64 20.09 8.82 35.73 22.05 46.89 12.39 11.16 28.39 16.48 47.66 16.48 19.84 0 36.11-4.75 48.23-14.53zM281.3 715.38h708.8v-93.09H281.3zM281.3 417.9h708.8v-93.09H281.3zM281.3 120.42h708.8v-93.09H281.3z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daochuexcel" unicode="&#58968;" d="M695.168 584.832a42.624 42.624 0 0 0 60.330667 0l170.666666-170.666667c1.194667-1.194667 2.346667-2.517333 3.413334-3.84l0.682666-0.896a32.085333 32.085333 0 0 0 2.133334-3.2c0.298667-0.512 0.64-1.024 0.896-1.578666a49.536 49.536 0 0 0 2.261333-4.821334l0.938667-2.56 0.597333-1.962666 0.682667-2.773334 0.384-2.218666A38.229333 38.229333 0 0 0 938.666667 384l-0.170667 3.669333a20.864 20.864 0 0 0 0.128-2.304L938.666667 384l-0.042667-1.450667-0.128-2.218666a53.461333 53.461333 0 0 0-0.298667-2.730667l-0.384-2.218667c-0.170667-0.938667-0.426667-1.877333-0.64-2.773333a26.368 26.368 0 0 0-0.597333-1.962667c-0.256-0.853333-0.597333-1.664-0.896-2.517333a34.858667 34.858667 0 0 0-2.304-4.821333l-0.896-1.536a40.874667 40.874667 0 0 0-6.272-7.936l3.413333 3.84-0.298666-0.384-3.114667-3.498667-170.666667-170.666667a42.624 42.624 0 1 0-60.330666 60.330667L792.96 341.333333H384a42.666667 42.666667 0 0 0-42.368 37.674667L341.333333 384a42.666667 42.666667 0 0 0 42.666667 42.666667h408.96l-97.792 97.834666a42.666667 42.666667 0 0 0-3.541333 56.32l3.541333 4.010667zM426.666667 853.333333a42.666667 42.666667 0 0 0 0-85.333333H213.333333a42.666667 42.666667 0 0 1-42.666666-42.666667v-682.666666a42.666667 42.666667 0 0 1 42.666666-42.666667h213.333334a42.666667 42.666667 0 0 0 0-85.333333H213.333333a128 128 0 0 0-128 128V725.333333a128 128 0 0 0 128 128h213.333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xinjianwenjianjia" unicode="&#58966;" d="M492.16 682.666667H853.333333a128 128 0 0 0 128-128v-469.333334a128 128 0 0 0-128-128H170.666667a128 128 0 0 0-128 128V682.666667a128 128 0 0 0 128 128h213.333333a42.666667 42.666667 0 0 0 35.498667-18.986667L492.16 682.666667z m-130.986667 42.666666H170.666667a42.666667 42.666667 0 0 1-42.666667-42.666666v-597.333334a42.666667 42.666667 0 0 1 42.666667-42.666666h682.666666a42.666667 42.666667 0 0 1 42.666667 42.666666V554.666667a42.666667 42.666667 0 0 1-42.666667 42.666666h-384a42.666667 42.666667 0 0 0-35.498666 18.986667L361.173333 725.333333zM512 475.008a42.666667 42.666667 0 0 0 42.666667-42.666667v-85.333333h85.333333a42.666667 42.666667 0 0 0 42.368-37.674667l0.298667-4.992a42.666667 42.666667 0 0 0-42.666667-42.666666h-85.333333v-85.333334a42.666667 42.666667 0 0 0-37.674667-42.368l-4.992-0.298666a42.666667 42.666667 0 0 0-42.666667 42.666666v85.333334H384a42.666667 42.666667 0 0 0-42.368 37.674666L341.333333 304.341333a42.666667 42.666667 0 0 0 42.666667 42.666667h85.333333v85.333333a42.666667 42.666667 0 0 0 37.674667 42.368L512 475.008z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiugongge-" unicode="&#59043;" d="M287.8 576.2h-192c-17.6 0-32 14.4-32 32v192c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-192c0-17.6-14.4-32-32-32zM608.3 576.2h-192c-17.6 0-32 14.4-32 32v192c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-192c0-17.6-14.4-32-32-32zM928.2 576.2h-192c-17.6 0-32 14.4-32 32v192c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-192c0-17.6-14.4-32-32-32zM287.8 256.8h-192c-17.6 0-32 14.4-32 32v192c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-192c0-17.6-14.4-32-32-32zM608.3 256.8h-192c-17.6 0-32 14.4-32 32v192c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-192c0-17.6-14.4-32-32-32zM928.2 256.8h-192c-17.6 0-32 14.4-32 32v192c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-192c0-17.6-14.4-32-32-32zM287.8-63.7h-192c-17.6 0-32 14.4-32 32v192c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-192c0-17.6-14.4-32-32-32zM608.3-63.7h-192c-17.6 0-32 14.4-32 32v192c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-192c0-17.6-14.4-32-32-32zM928.2-63.7h-192c-17.6 0-32 14.4-32 32v192c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-192c0-17.6-14.4-32-32-32z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tongji" unicode="&#58888;" d="M1024.25175 896l-209.92-23.04L883.45175 803.84 655.61175 525.312 419.06775 743.936c-15.872 14.848-40.96 14.848-57.344 0.512L14.07575 430.592C-3.33225 414.72-4.86825 387.584 11.00375 370.176c8.192-9.216 19.968-13.824 31.744-13.824 10.24 0 20.48 3.584 28.672 10.752l318.464 287.744 241.152-222.72c8.704-8.192 20.48-11.776 31.744-11.264 11.776 1.024 22.528 6.656 30.208 15.36l250.88 306.688 57.344-57.344L1024.25175 896z m0 0M133.37175-128H30.97175c-16.896 0-30.72 13.824-30.72 30.72v348.16c0 16.896 13.824 30.72 30.72 30.72h102.4c16.896 0 30.72-13.824 30.72-30.72v-348.16c0-16.896-13.824-30.72-30.72-30.72zM420.09175-128H317.69175c-16.896 0-30.72 13.824-30.72 30.72V455.68c0 16.896 13.824 30.72 30.72 30.72h102.4c16.896 0 30.72-13.824 30.72-30.72v-552.96c0-16.896-13.824-30.72-30.72-30.72zM706.81175-128h-102.4c-16.896 0-30.72 13.824-30.72 30.72v399.36c0 16.896 13.824 30.72 30.72 30.72h102.4c16.896 0 30.72-13.824 30.72-30.72v-399.36c0-16.896-13.824-30.72-30.72-30.72zM993.53175-128h-102.4c-16.896 0-30.72 13.824-30.72 30.72V558.08c0 16.896 13.824 30.72 30.72 30.72h102.4c16.896 0 30.72-13.824 30.72-30.72v-655.36c0-16.896-13.824-30.72-30.72-30.72z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon_huabanfuben" unicode="&#58929;" d="M853.333333 90.074074H170.666667c-23.514074 0-42.666667 19.152593-42.666667 42.666667V635.259259c0 23.514074 19.152593 42.666667 42.666667 42.666667h682.666666c23.514074 0 42.666667-19.152593 42.666667-42.666667v-502.518518c0-23.514074-19.152593-42.666667-42.666667-42.666667z m-682.666666 42.666667h682.666666V635.259259c0-0.094815 0 0-0.094814 0H170.666667v-502.518518zM512 363.140741c-9.386667 0-18.868148 2.465185-26.548148 7.395555L137.860741 592.118519c-9.955556 6.352593-12.894815 19.531852-6.542222 29.487407 6.352593 9.955556 19.531852 12.894815 29.487407 6.542222l347.591111-221.677037c1.517037-0.853333 5.688889-0.853333 7.300741 0l347.591111 221.677037c9.955556 6.352593 23.134815 3.413333 29.487407-6.542222 6.352593-9.955556 3.413333-23.134815-6.542222-29.487407L538.548148 370.441481c-7.68-4.93037-17.161481-7.300741-26.548148-7.30074z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon_shezhi" unicode="&#58947;" d="M512 515.034074c34.986667 0 67.982222-13.653333 92.728889-38.4 24.746667-24.746667 38.4-57.647407 38.4-92.634074s-13.653333-67.887407-38.4-92.634074c-24.746667-24.746667-57.742222-38.4-92.728889-38.4s-67.982222 13.653333-92.728889 38.4c-24.746667 24.746667-38.4 57.647407-38.4 92.634074s13.653333 67.887407 38.4 92.634074c24.746667 24.746667 57.742222 38.4 92.728889 38.4m0 42.666667c-95.952593 0-173.795556-77.748148-173.795556-173.700741 0-95.952593 77.842963-173.700741 173.795556-173.700741s173.795556 77.748148 173.795556 173.700741c0 95.952593-77.842963 173.700741-173.795556 173.700741zM512-42.666667c-47.786667 0-94.625185 7.86963-139.472593 23.324445-10.903704 3.792593-16.782222 15.454815-13.463703 26.453333 7.86963 25.78963-2.939259 53.191111-26.358519 66.74963-23.324444 13.463704-52.527407 9.197037-70.921481-10.524445-7.86963-8.343704-20.859259-9.102222-29.582223-1.517037-35.65037 30.90963-65.706667 67.128889-89.41037 107.804445-24.177778 41.528889-41.054815 86.471111-50.157037 133.594074-2.180741 11.282963 4.93037 22.281481 16.118519 24.841481 26.263704 6.068148 44.657778 29.108148 44.657777 56.130371 0 27.022222-18.394074 50.062222-44.657777 56.13037-11.188148 2.56-18.299259 13.558519-16.118519 24.841481 9.007407 47.122963 25.884444 92.065185 50.157037 133.594075 23.703704 40.675556 53.76 76.894815 89.41037 107.804444 8.628148 7.49037 21.712593 6.826667 29.582223-1.517037 18.394074-19.721481 47.597037-23.988148 70.921481-10.524444 23.419259 13.463704 34.228148 40.96 26.358519 66.749629-3.318519 10.998519 2.56 22.660741 13.463703 26.453333C417.374815 802.797037 464.213333 810.666667 512 810.666667s94.625185-7.86963 139.472593-23.324445c10.903704-3.792593 16.782222-15.454815 13.463703-26.453333-7.86963-25.78963 2.939259-53.191111 26.358519-66.74963 23.324444-13.463704 52.527407-9.197037 70.921481 10.524445 7.86963 8.343704 20.859259 9.102222 29.582223 1.517037 35.65037-30.90963 65.706667-67.128889 89.41037-107.804445 24.177778-41.528889 41.054815-86.471111 50.157037-133.594074 2.180741-11.282963-4.93037-22.281481-16.118519-24.841481-26.263704-6.068148-44.657778-29.108148-44.657777-56.130371 0-27.022222 18.394074-50.062222 44.657777-56.13037 11.188148-2.56 18.299259-13.558519 16.118519-24.841481-9.007407-47.122963-25.884444-92.065185-50.157037-133.594075-23.703704-40.675556-53.76-76.894815-89.41037-107.804444-8.628148-7.49037-21.712593-6.826667-29.582223 1.517037-18.394074 19.721481-47.597037 23.988148-70.921481 10.524444-23.419259-13.463704-34.228148-40.96-26.358519-66.749629 3.318519-10.998519-2.56-22.660741-13.463703-26.453333C606.625185-34.797037 559.786667-42.666667 512-42.666667z m-108.088889 58.026667c34.986667-10.24 71.205926-15.36 108.088889-15.36s73.102222 5.214815 108.088889 15.36c-1.232593 15.075556 0.853333 30.435556 6.352592 44.657778 8.248889 21.238519 23.608889 39.253333 43.425186 50.631111 19.721481 11.377778 43.045926 15.739259 65.517037 12.231111 15.075556-2.37037 29.392593-8.154074 41.908148-16.782222 53.096296 50.725926 90.927407 116.053333 108.183704 187.069629-13.653333 6.447407-25.884444 16.023704-35.460741 27.875556-14.411852 17.825185-22.281481 40.106667-22.281482 62.957037 0 22.85037 7.86963 45.131852 22.186667 62.862222 9.576296 11.851852 21.807407 21.428148 35.460741 27.875556-17.256296 70.921481-54.992593 136.343704-108.183704 187.069629-12.420741-8.628148-26.832593-14.411852-41.908148-16.782222-22.471111-3.508148-45.795556 0.853333-65.517037 12.231111-19.721481 11.377778-35.176296 29.392593-43.425185 50.631111-5.499259 14.222222-7.68 29.582222-6.352593 44.657778-34.986667 10.24-71.205926 15.36-108.088889 15.36s-73.102222-5.214815-108.088889-15.36c1.232593-15.075556-0.853333-30.435556-6.352592-44.657778-8.248889-21.238519-23.608889-39.253333-43.425185-50.631111-19.721481-11.377778-43.045926-15.739259-65.517038-12.231111-15.075556 2.37037-29.392593 8.154074-41.908148 16.782222-53.096296-50.725926-90.927407-116.053333-108.183703-187.069629 13.653333-6.447407 25.884444-16.023704 35.46074-27.875556 14.317037-17.73037 22.186667-40.106667 22.186667-62.862222 0-22.85037-7.86963-45.131852-22.186667-62.862222-9.576296-11.851852-21.807407-21.428148-35.46074-27.875556 17.256296-70.921481 54.992593-136.343704 108.183703-187.069629 12.420741 8.628148 26.832593 14.411852 41.908148 16.782222 22.471111 3.508148 45.795556-0.853333 65.517038-12.231111 19.721481-11.377778 35.176296-29.392593 43.425185-50.631111 5.594074-14.317037 7.68-29.582222 6.447407-44.752593z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="moban" unicode="&#58886;" d="M947.257271-128H76.742729A35.794183 35.794183 0 0 0 40.948546-92.205817V860.205817A35.794183 35.794183 0 0 0 76.742729 896h870.514542a35.794183 35.794183 0 0 0 35.794183-35.794183v-952.411634a35.794183 35.794183 0 0 0-35.794183-35.794183zM112.536913-56.411633h798.926174V824.411633H112.536913zM298.666667 0.85906A35.794183 35.794183 0 0 0 261.440716 36.939597V458.738255a35.794183 35.794183 0 0 0 71.588367 0V36.939597A35.794183 35.794183 0 0 0 298.666667 0.85906zM726.192394 387.436242H470.478747a35.794183 35.794183 0 0 0 0 71.588367h257.718121a35.794183 35.794183 0 0 0 0-71.588367zM730.774049 602.201342H279.480984a35.794183 35.794183 0 0 0 0 71.588367h451.293065a35.794183 35.794183 0 0 0 0-71.588367zM726.192394 211.901566H470.478747a35.794183 35.794183 0 1 0 0 71.588367h257.718121a35.794183 35.794183 0 0 0 0-71.588367zM726.192394 43.812081H470.478747a35.794183 35.794183 0 0 0 0 71.588366h257.718121a35.794183 35.794183 0 0 0 0-71.588366z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xiugai" unicode="&#58893;" d="M784.9-29.8H239.1c-77.7 0-140.9 63.2-140.9 140.9V656.9c0 77.7 63.2 140.9 140.9 140.9H512c27.5 0 49.9-22.3 49.9-49.9S539.6 698 512 698H239.1c-22.7 0-41.2-18.5-41.2-41.2v-545.7c0-22.7 18.5-41.2 41.2-41.2h545.7c22.7 0 41.2 18.5 41.2 41.2V384c0 27.6 22.3 49.9 49.9 49.9 27.5 0 49.9-22.3 49.9-49.9v-272.8c0-77.8-63.3-141-140.9-141zM427.6 249.7c-12.8 0-25.5 4.9-35.3 14.6-19.5 19.5-19.5 51 0 70.5L816.5 759c19.5 19.5 51 19.5 70.5 0s19.5-51 0-70.5L462.8 264.3c-9.7-9.7-22.5-14.6-35.2-14.6z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="juecebaogao" unicode="&#58884;" d="M855.1 757.9H716.7V807.3c0 6.6-2.6 13-7.3 17.7-4.7 4.7-11 7.3-17.7 7.3H332.5c-13.8 0-25-11.2-25-25v-49.4H169.1c-6.6 0-13-2.6-17.7-7.3s-7.3-11-7.3-17.7v-772.2c0-13.8 11.2-25 25-25h686.1c6.6 0 13 2.6 17.7 7.3 4.7 4.7 7.3 11 7.3 17.7V732.9c-0.1 13.8-11.3 25-25.1 25z m-497.7 24.4h309.2v-105.7H357.4V782.3zM830-14.3H193.9V707.9h113.4v-56.3c0-6.6 2.6-13 7.3-17.7 4.7-4.7 11-7.3 17.7-7.3h359.2c13.8 0 25 11.2 25 25v56.3h113.4l0.1-722.2zM706.6 515.3H314.3c-13.8 0-25-11.2-25-25s11.2-25 25-25h392.3c13.8 0 25 11.2 25 25s-11.2 25-25 25zM706.6 295.5H314.3c-13.8 0-25-11.2-25-25s11.2-25 25-25h392.3c13.8 0 25 11.2 25 25s-11.2 25-25 25z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="guizhangzhidu" unicode="&#58905;" d="M682.4 546.6L513 451.3l-169.4 95.3L513 647.5zM907.6 595.5L560 783.2c-26.4 14-69.1 14.2-94.8 0L117.5 595.5c-26.1-26.1-26.1-68.7 0-94.8L465.2 343c26.6-10.2 69.2-10.8 94.8 0l347.7 157.7c26 26.1 26 68.8-0.1 94.8z m-55-57.2L524.4 401.8c-6.1-3.1-16.2-3.1-22.3 0l-20.2 8.4c-0.7 0.3-1.5 0.5-2.2 0.8l-3.4 1.5L174 538.3c-14.1 5.6-13.3 15.7 0 22.3l328.1 170.6c6 3.5 16 3.4 22.3 0l328.1-170.6c6.2-6.2 6.2-16.2 0.1-22.3zM513 36.5l-411.8 172c-7.3-23.1-1.8-49.5 16.4-67.7l347.7-157.7c26.6-10.2 69.2-10.8 94.8 0l347.7 157.7c18 18 23.5 43.8 16.7 66.7L513 36.5zM513 212.5l-411.8 172c-7.3-23.1-1.8-49.5 16.4-67.7l347.7-157.7c26.6-10.2 69.2-10.8 94.8 0l347.7 157.7c18 18 23.5 43.8 16.7 66.7L513 212.5z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuxing" unicode="&#58930;" d="M684.471 285.047c-43.431 0-78.769-35.332-78.769-78.769s35.337-78.78 78.77-78.78 78.768 35.343 78.768 78.78-35.337 78.77-78.769 78.77z m0-102.945c-13.325 0-24.166 10.846-24.166 24.176 0 13.32 10.84 24.167 24.166 24.167s24.167-10.846 24.167-24.167c0-13.33-10.841-24.176-24.167-24.176zM876.669 244.147c-2.12 11.074-8.847 18.193-17.016 18.036h-1.7c-28.141 0-51.048 22.644-51.048 50.445 0 9.164 4.398 19.216 4.451 19.295 4.284 9.882 1.024 21.416-7.801 27.59l-0.496 0.34-49.084 26.965-0.527 0.236a26.015 26.015 0 0 1-27.825-5.472c-5.97-6.127-24.87-21.99-40.131-21.99-15.394 0-34.424 16.18-40.418 22.409a25.923 25.923 0 0 1-27.803 5.708l-0.55-0.236-50.813-27.592-0.496-0.342c-8.834-6.167-12.106-17.703-7.828-27.592 0.053-0.103 4.453-10.156 4.453-19.32 0-27.827-22.908-50.445-51.049-50.445h-1.7c-8.22 0.157-14.92-6.936-17.043-18.036-0.184-0.864-4.11-21.675-4.11-38.037 0-16.387 3.926-37.173 4.11-38.038 2.093-10.942 8.664-18.037 16.728-18.037l0.314 0.026h1.701c28.141 0 51.049-22.668 51.049-50.47 0-9.163-4.4-19.214-4.424-19.292-4.29-9.881-1.055-21.412 7.746-27.618l0.445-0.343 48.168-26.622 0.524-0.236a25.424 25.424 0 0 1 27.907 5.786c5.655 6.1 25.312 23.404 41.047 23.404 15.837 0 35.21-17.2 41.308-23.822a25.346 25.346 0 0 1 18.56-7.829 23.07 23.07 0 0 1 9.268 1.834l0.549 0.209 49.923 27.278 0.523 0.368c8.82 6.165 12.08 17.689 7.801 27.565-0.055 0.104-4.453 10.13-4.453 19.32 0 27.827 22.907 50.469 51.049 50.469h1.7c8.169-0.181 14.895 6.913 17.016 18.011 0.184 0.864 4.111 21.65 4.111 38.038 0.002 16.361-3.925 37.173-4.136 38.037z m-50.74-44.42c-42.636-13.533-73.595-53.313-73.595-100.141 0-4.224 0.33-8.351 0.874-12.264L747.3 84.1c-15.016 11.816-37.785 25.168-63.849 25.168-25.5 0-48.118-13.096-63.135-24.667l-4.564 2.517c0.555 3.988 0.886 8.168 0.886 12.467 0 46.838-30.97 86.628-73.618 100.14-0.17 2.283-0.278 4.448-0.278 6.379 0 1.94 0.107 4.116 0.278 6.41 42.648 13.511 73.618 53.29 73.618 100.118 0 4.202-0.33 8.297-0.864 12.19l7.316 3.978c14.963-11.325 37.188-23.814 62.399-23.814 24.88 0 46.86 12.147 61.738 23.238l5.983-3.285c-0.587-4.212-0.907-8.36-0.907-12.307 0-46.838 30.97-86.607 73.628-100.119 0.17-2.282 0.278-4.468 0.278-6.41-0.003-1.93-0.11-4.106-0.28-6.377z m-516.643 228.94c-15.08 0-27.302-12.221-27.302-27.3s12.222-27.302 27.302-27.302h207.49c15.08 0 27.301 12.222 27.301 27.301s-12.222 27.301-27.301 27.301h-207.49z m368.568 125.587c0 15.08-12.222 27.301-27.301 27.301H309.286c-15.08 0-27.302-12.222-27.302-27.301s12.222-27.302 27.302-27.302h341.267c15.08 0 27.301 12.222 27.301 27.302zM198.363 176.226V638.355c0 33.12 26.944 60.063 60.063 60.063h442.98c33.12 0 60.063-26.944 60.063-60.063V485.37h54.603V638.355c0 63.225-51.44 114.665-114.665 114.665H258.426c-63.225 0-114.666-51.44-114.666-114.665v-462.13c0-63.23 51.441-114.665 114.666-114.665h153.608v54.603H258.426c-33.12 0-60.063 26.95-60.063 60.063z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wendangfujian" unicode="&#58889;" d="M880.827695 466.546018L446.766788 42.328293c-8.363482-8.144494-19.085684-11.871375-29.711695-11.871375s-21.349237 3.726881-28.92375 11.871375l-86.083587 83.195818-33.549094 32.671097-15.246239 14.812357-70.049403 68.382437c-7.575536 8.139378-12.196787 18.540262-12.196786 28.939099 0 10.400884 4.524037 20.799722 12.196786 28.253484l415.85936 405.679509c7.575536 7.458879 18.297738 11.871375 28.922726 11.871376 10.626012 0 21.349237-4.412496 29.712719-11.871376l100.546997-98.108458c7.575536-8.144494 11.409864-17.854647 11.409864-27.468608 0-10.399861-4.52506-20.798698-12.196786-28.943193-98.28549-95.852068-210.242352-205.04498-308.427559-300.897048-8.363482-8.144494-19.085684-11.871375-29.711695-11.871375-9.934257 0-20.560268 2.940982-28.135804 11.18576l-1.474584 1.470491c-8.363482 7.453762-12.201903 17.854647-12.201903 28.253484 0 10.400884 3.838422 20.799722 12.201903 28.944216l204.726731 199.847607-71.619154 69.062936-204.829062-199.841468c-26.660196-26.784016-40.337707-61.71048-40.337707-97.322559 0-34.927487 13.677511-70.544683 41.909505-97.328699l1.479701-1.470491c27.443026-26.784016 63.159482-40.124859 98.967012-40.12486 36.600593 0 72.412217 13.341866 99.861382 40.12486 98.280374 95.852068 210.142068 205.04498 308.422442 300.898071 27.449165 26.002211 41.125653 61.71048 41.125653 96.540753 0 35.612079-13.676487 70.539566-41.125653 97.323583l-100.543927 98.108458c-28.134781 26.78197-63.948451 40.909735-100.546997 40.909736-35.80753 0-72.306816-13.341866-99.754959-40.12486L112.365672 368.537843c-28.135804-27.472702-41.908482-62.400189-41.908482-98.108458 0-35.712363 13.676487-70.538543 41.908482-98.108459l70.048379-68.38346 15.251356-14.812357 33.546024-32.670074 85.295641-83.981716c28.14092-26.784016 63.948451-40.124859 100.548021-40.124859 36.600593 0 72.311933 13.341866 100.54802 40.124859L952.445826 396.691043l-71.618131 69.854975zM604.889085 512.025838l15.004739 14.176885 40.469714 41.056068 14.234189 14.080693-3.002381 3.052522-63.70388 63.310931-3.002381 3.740185-14.909571-14.869663-40.469714-40.268122-14.329356-14.965853 3.001357-2.951215 63.705927-63.411215z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gengduo" unicode="&#58940;" d="M117.15584 397.18912m-81.79712 0a81.79712 81.79712 0 1 1 163.59424 0 81.79712 81.79712 0 1 1-163.59424 0ZM485.4784 397.18912m-81.79712 0a81.79712 81.79712 0 1 1 163.59424 0 81.79712 81.79712 0 1 1-163.59424 0ZM853.80096 397.18912m-81.79712 0a81.79712 81.79712 0 1 1 163.59424 0 81.79712 81.79712 0 1 1-163.59424 0Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="suoding1" unicode="&#58910;" d="M868.018201 503.069971h-79.379804V643.043025C789.432195 794.65845 665.070503 896 512.13208 896S234.567366 793.335454 234.567366 641.720028v-138.650057h-79.379804A68.266631 68.266631 0 0 1 87.450129 435.067938v-495.065377a68.266631 68.266631 0 0 1 68.531231-68.002032H868.018201a68.266631 68.266631 0 0 1 68.531231 68.002032V435.067938a68.266631 68.266631 0 0 1-68.531231 68.002033z m-317.519215-328.367789v-108.221133a8.996378 8.996378 0 0 0-8.996378-8.996378h-59.005655a8.996378 8.996378 0 0 0-8.996377 8.996378v108.221133a84.407192 84.407192 0 0 0-46.834085 74.881615 85.465589 85.465589 0 0 0 170.666579 0 83.877993 83.877993 0 0 0-46.834084-74.881615z m132.299673 326.515593H341.200902V652.304002c0 79.379804 76.73381 144.735843 170.931178 144.735842s170.931178-65.091439 170.931178-144.735842z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biaodan" unicode="&#58971;" d="M785.4-35.1h-0.1l-547.5 0.7c-61.2 0.1-111 49.4-110.9 110l0.7 484.9c0.1 60.5 49.9 109.7 111.1 109.7h61.2c18.2 0 32.9-14.7 32.9-32.8 0-18.2-14.7-32.9-32.8-32.9h-61.1-0.1c-25 0-45.4-19.8-45.4-44.1l-0.7-484.8c0-24.3 20.3-44.2 45.3-44.2l547.4-0.7c25 0 45.3 19.8 45.3 44.1l0.7 484.9c0 11.6-4.7 22.6-13.1 31-8.6 8.5-20 13.2-32.2 13.2l-77.6 0.8c-18.1 0.2-32.7 15-32.5 33.2s15.2 33.6 33.2 32.5l77.3-0.8c29.2 0 57-11.5 77.9-32.1 21.1-20.8 32.7-48.5 32.7-77.8l-0.7-484.9c0-60.8-49.9-109.9-111-109.9zM688.9 508.4l-353.9 0.5c-8.7 0-17.1 3.5-23.2 9.7-6.2 6.2-9.6 14.5-9.6 23.2l0.2 159.8c0 18.1 14.7 32.8 32.8 32.8l53.1-0.1c2.4 29.4 15 56.7 36.1 77.7 23.4 23.4 54.6 36.2 87.7 36.2h0.2c33.2 0 64.3-13 87.7-36.5 21.1-21.1 33.6-48.4 35.9-77.8l53.2-0.1c18.1 0 32.8-14.7 32.8-32.9l-0.2-159.8c0-8.7-3.5-17.1-9.7-23.2-6.1-6-14.4-9.5-23.1-9.5z m-321 66.1l288.1-0.3 0.1 94.1-56 0.1c-10.2 0-19.7 4.7-26 12.8-6.2 8-8.3 18.5-5.8 28.3 1.5 5.7 2.2 10.4 2.2 14.6 0 15.6-6 30.3-17.1 41.3-11.1 11.1-26.6 18-41.4 17.2-15.6 0-30.2-6.1-41.3-17.1-11.1-11-17.2-25.7-17.2-41.3 0-4.2 0.7-8.9 2.1-14.6 2.5-9.8 0.4-20.3-5.9-28.3-6.2-8-15.8-12.7-26-12.7l-56 0.1 0.2-94.2zM667.9 371H341.4c-17.5 0-31.7 14.2-31.7 31.7s14.2 31.7 31.7 31.7h326.5c17.5 0 31.7-14.2 31.7-31.7S685.4 371 667.9 371zM667.9 253.6H341.4c-17.5 0-31.7 14.2-31.7 31.7s14.2 31.7 31.7 31.7h326.5c17.5 0 31.7-14.2 31.7-31.7s-14.2-31.7-31.7-31.7zM667.9 136.2H341.4c-17.5 0-31.7 14.2-31.7 31.7s14.2 31.7 31.7 31.7h326.5c17.5 0 31.7-14.2 31.7-31.7s-14.2-31.7-31.7-31.7z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="banben" unicode="&#58969;" d="M518.144 288.256c-13.824 0-26.112 7.68-32.256 19.968L353.28 573.952c-8.704 17.92-1.536 39.424 16.384 48.64 17.92 8.704 39.424 1.536 48.64-16.384l100.352-200.704 100.352 200.704c8.704 17.92 30.72 25.088 48.64 16.384s25.088-30.72 16.384-48.64L551.424 308.224c-7.168-11.776-19.968-19.968-33.28-19.968zM917.504-128H131.072c-23.04 0-41.472 18.432-41.472 41.472V854.528C89.6 877.568 108.032 896 131.072 896h786.432c23.04 0 41.472-18.432 41.472-41.472v-941.056c0-23.04-18.432-41.472-41.472-41.472z m-744.96 82.944H875.52V813.056H172.544v-858.112zM687.104 125.952h-337.92c-19.968 0-36.352 16.384-36.352 36.352s16.384 36.352 36.352 36.352h337.92c19.968 0 36.352-16.384 36.352-36.352s-16.384-36.352-36.352-36.352z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fengxian" unicode="&#59248;" d="M540.096 719.424l352-640A32 32 0 0 0 864 32h-704a32 32 0 0 0-28.032 47.424l352 640a32 32 0 0 0 56.096 0zM512 637.6L214.176 96H809.92L512.032 637.6zM544 480v-192h-64v192h64z m-64-256h64v-64h-64v64z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="quanxian" unicode="&#58883;" d="M384 384a128 128 0 1 0-128-128 128 128 0 0 0 128 128m0 128a256 256 0 1 1 256-256 256 256 0 0 1-256 256zM501.696 461.568l319.936 320 90.496-90.56-319.936-320zM501.568 690.56L592 781.184l128-128.064L629.696 562.56z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daoru" unicode="&#58920;" d="M889.263158 262.736842V-47.157895H80.842105V761.263158h309.894737A40.421053 40.421053 0 0 1 431.157895 801.684211 40.421053 40.421053 0 0 1 390.736842 842.105263H26.947368a26.947368 26.947368 0 0 1-26.947368-26.947368v-916.210527a26.947368 26.947368 0 0 1 26.947368-26.947368h916.210527a26.947368 26.947368 0 0 1 26.947368 26.947368V262.736842a40.421053 40.421053 0 0 1-40.421052 40.421053 40.421053 40.421053 0 0 1-40.421053-40.421053zM1040.863202 855.569088m-28.582-28.582001l-552.585342-552.585341q-28.582-28.582-57.164001 0l0 0q-28.582 28.582 0 57.164001l552.585342 552.585341q28.582 28.582 57.164001 0l0 0q28.582-28.582 0-57.164001ZM431.157895 626.526316a40.421053 40.421053 0 0 0 40.421052-40.421053v-242.526316h242.526316A40.421053 40.421053 0 0 0 754.526316 303.157895a40.421053 40.421053 0 0 0-40.421053-40.421053h-296.421052a26.947368 26.947368 0 0 0-26.947369 26.947369v296.421052A40.421053 40.421053 0 0 0 431.157895 626.526316z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="kpi" unicode="&#58903;" d="M955.224 760.456H68.008a68.08 68.08 0 0 1-68.008-68.008v-671.448a68.08 68.08 0 0 1 68.008-68.008H955.232a68.08 68.08 0 0 1 68.008 68.008v671.44a68.096 68.096 0 0 1-68.016 68.016z m-6.176-733.264H74.184V686.264h874.864v-659.072z m0 0M281.352 292.688l40.312 43.968 78.176-114.832h76.96L360.744 376.976l107.504 113.608H392.512l-111.168-122.16v122.16h-61.088v-268.76h61.088v70.864z m276.088 23.208h45.192c72.48-0.824 108.312 29.312 107.512 90.4-2.448 54.552-36.24 82.648-101.4 84.288H496.352v-268.76h61.088V315.896z m0 128.272h40.312c31.76-0.824 48.048-14.256 48.864-40.312-0.824-26.872-17.112-40.72-48.864-41.536h-40.312V444.168z m183.232 46.416h62.304v-268.76H740.672V490.584z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhongmingming" unicode="&#58972;" d="M102.4 793.6h204.8V896H102.4a102.4 102.4 0 0 1-102.4-102.4v-819.2a102.4 102.4 0 0 1 102.4-102.4h204.8v102.4H102.4zM921.6 896h-204.8v-102.4h204.8v-819.2h-204.8v-102.4h204.8a102.4 102.4 0 0 1 102.4 102.4V793.6a102.4 102.4 0 0 1-102.4 102.4zM768 588.8a51.2 51.2 0 0 1-51.2 51.2H307.2a51.2 51.2 0 0 1 0-102.4h153.6v-409.6a51.2 51.2 0 0 1 102.4 0V537.6h153.6a51.2 51.2 0 0 1 51.2 51.2z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daoruwenjian" unicode="&#58993;" d="M618.666667 896c69.12 0 289.237333-218.624 298.368-294.058667L917.333333 597.333333v-186.666666a42.666667 42.666667 0 0 0-85.034666-4.992L832 410.666667V554.666667h-128a128 128 0 0 0-127.786667 120.490666L576 682.666667V810.666667H192a42.666667 42.666667 0 0 1-42.368-37.674667L149.333333 768v-725.333333a85.333333 85.333333 0 0 1 78.933334-85.12L234.666667-42.66666699999996h341.333333a42.666667 42.666667 0 0 0 4.992-85.034666L576-128H234.666667a170.666667 170.666667 0 0 0-170.453334 162.133333L64 42.66666699999996V768A128 128 0 0 0 184.490667 895.786667L192 896h426.666667z m85.333333-700.330667a42.666667 42.666667 0 0 0 42.368-37.717333l0.298667-4.949333V128L917.333333 128a42.666667 42.666667 0 0 0 0-85.333333h-170.666666v-25.002667a42.666667 42.666667 0 0 0-8.789334-25.941333l-3.712-4.224a42.666667 42.666667 0 0 0-56.32-3.541334l-4.010666 3.541334-67.669334 67.669333a42.666667 42.666667 0 0 0-3.541333 56.32l3.541333 4.010667 67.669334 67.669333a42.666667 42.666667 0 0 0 30.165333 12.501333zM618.666667 341.33333300000004a42.666667 42.666667 0 0 0 0-85.333333H320a42.666667 42.666667 0 0 0 0 85.333333h298.666667z m-85.333334 213.333334a42.666667 42.666667 0 0 0 0-85.333334H320a42.666667 42.666667 0 1 0 0 85.333334h213.333333z m128 226.432V682.666667a42.666667 42.666667 0 0 1 37.674667-42.368L704 640h98.474667A1572.693333 1572.693333 0 0 1 661.333333 781.056z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="suoding" unicode="&#58936;" d="M817.25-126.52h-611.3c-62.06 0-112.54 50.48-112.54 112.54V398.06c0 62.06 50.48 112.54 112.54 112.54h611.3c62.06 0 112.54-50.48 112.54-112.54v-412.04c0.01-62.06-50.48-112.54-112.54-112.54z m-611.3 558.41c-18.65 0-33.82-15.17-33.82-33.82v-412.04c0-18.65 15.18-33.82 33.82-33.82h611.3c18.65 0 33.82 15.18 33.82 33.82V398.06c0 18.65-15.18 33.82-33.82 33.82h-611.3z m308.24-386.22c-21.74 0-39.36 17.62-39.36 39.36v209.1c0 21.74 17.63 39.36 39.36 39.36 21.74 0 39.36-17.62 39.36-39.36v-209.1c0-21.74-17.63-39.36-39.36-39.36zM250.2 469.28c-21.74 0-39.36 17.62-39.36 39.36 0 134.69 30.9 236.27 91.86 301.94 27.44 29.56 60.86 51.7 99.34 65.81C435.42 888.63 472.71 894.84 512.86 894.84c94.6 0 165.26-24.95 216.03-76.28 62.74-63.42 92.45-164.94 90.87-310.35-0.24-21.58-17.81-38.93-39.35-38.93-0.14 0-0.29 0-0.44 0.01-21.74 0.23-39.16 18.05-38.92 39.79 1.33 121.59-21.59 207.08-68.12 254.12-35.22 35.61-87.58 52.92-160.07 52.92-64.78 0-116.07-19.88-152.47-59.09-47-50.64-70.84-134.2-70.84-248.39 0.01-21.74-17.61-39.36-39.35-39.36z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiesuo" unicode="&#58937;" d="M553.55 294.13v-209.1c0-21.74-17.63-39.36-39.36-39.36-21.74 0-39.36 17.62-39.36 39.36v209.1c0 21.74 17.63 39.36 39.36 39.36 21.74 0 39.36-17.62 39.36-39.36zM929.8 398.06v-412.04c0-62.06-50.48-112.54-112.54-112.54h-611.3c-62.06 0-112.54 50.48-112.54 112.54V398.06c0 62.06 50.48 112.54 112.54 112.54h5.45c0.18 134.05 31.06 235.21 91.82 300.66 27.43 29.55 60.84 51.69 99.31 65.79C435.89 889.28 473.17 895.48 513.31 895.48c78.95 0 140.72-17.26 188.82-52.76 27.18-20.06 49.94-46.2 67.64-77.69 17.86-31.77 31.11-70.05 39.39-113.76 4.04-21.35-9.99-41.94-31.34-45.98-21.35-4.05-41.94 9.98-45.98 31.34-23.91 126.28-89.27 180.16-218.53 180.16-64.75 0-116.03-19.88-152.42-59.07-46.83-50.44-70.64-133.58-70.81-247.12h527.17c62.06 0 112.55-50.48 112.55-112.54z m-78.72 0c0 18.65-15.18 33.82-33.82 33.82h-611.3c-18.65 0-33.82-15.17-33.82-33.82v-412.04c0-18.65 15.18-33.82 33.82-33.82h611.3c18.65 0 33.82 15.18 33.82 33.82V398.06z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daohang1" unicode="&#58981;" d="M818.473 765.398a59.233 59.233 0 0 0 37.462 0c29.842-9.947 46.497-41.344 38.537-71.335l-1.074-3.59-222.927-668.78a59.233 59.233 0 0 0-29.703-34.248c-28.135-14.068-62.113-3.643-77.69 23.191l-1.78 3.299-139.815 279.569-279.548 139.794a59.235 59.235 0 0 0-26.442 26.392l-1.767 3.858-1.495 3.998c-9.947 29.842 5.177 62.004 33.946 73.63l3.516 1.295 668.78 222.927zM795.81 622.56L489.57 316.32l122.505-245.024L795.81 622.56z m-45.205 45.312l-551.33-183.776L444.3 361.59l306.304 306.282z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +
                                                  +
                                                  +  </font>
                                                  +</defs></svg>
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/img/iconfont.ce1b01d3.ce1b01d3.svg b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/img/iconfont.ce1b01d3.ce1b01d3.svg
                                                  new file mode 100644
                                                  index 00000000..c8bbdca4
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/img/iconfont.ce1b01d3.ce1b01d3.svg
                                                  @@ -0,0 +1,2447 @@
                                                  +<?xml version="1.0" standalone="no"?>
                                                  +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
                                                  +<!--
                                                  +2013-9-30: Created.
                                                  +-->
                                                  +<svg>
                                                  +<metadata>
                                                  +Created by iconfont
                                                  +</metadata>
                                                  +<defs>
                                                  +
                                                  +<font id="awsui-iconfont" horiz-adv-x="1024" >
                                                  +  <font-face
                                                  +    font-family="awsui-iconfont"
                                                  +    font-weight="500"
                                                  +    font-stretch="normal"
                                                  +    units-per-em="1024"
                                                  +    ascent="896"
                                                  +    descent="-128"
                                                  +  />
                                                  +    <missing-glyph />
                                                  +    
                                                  +    <glyph glyph-name="liuchengzu" unicode="&#59638;" d="M930.929-36H90.07c-19.34 0-36.857 7.85-49.54 20.466C27.848-2.848 20 14.674 20 34.089V734.981C20 773.67 51.392 805 90.071 805H440.43c16.607 0 31.251-6.588 43.234-16.26 55.706-36.377 111.343-123.848 166.98-123.848h280.286c38.75 0 70.071-31.4 70.071-70.09V34.09C1001-4.6 969.678-36 930.929-36z m-393.75 547h-55.4a41.54 41.54 0 0 1-29.15-12.689 41.471 41.471 0 0 1-11.622-29.572C441.423 446.392 459.414 428 481.78 428h55.438c22.96 0 41.248 19.38 40.773 42.261-0.422 22.338-18.456 40.339-40.812 40.739z m-0.02-139h-55.398a41.554 41.554 0 0 1-29.16-12.707 41.426 41.426 0 0 1-11.593-29.583c0.416-22.331 18.407-39.88 40.773-40.71h55.438c22.959 0.83 41.247 19.367 40.772 42.231-0.401 22.34-18.437 40.358-40.812 40.769h-0.02z m0.021-138h-55.4c-22.958-0.83-41.227-19.38-40.772-42.261 0.422-22.323 18.432-40.318 40.773-40.739h55.439a41.58 41.58 0 0 1 29.16 12.72 41.51 41.51 0 0 1 11.612 29.6c-0.413 22.326-18.467 40.303-40.812 40.64V234z m-151.84-27.586a55.485 55.485 0 0 0-39.308 16.193 55.153 55.153 0 0 0-16.212 39.202 54.877 54.877 0 0 0 16.282 39.16 55.485 55.485 0 0 0 39.377 16.195h27.72V345h-27.7c-46.077 0-83.444-37.212-83.499-83.151 0-45.892 37.41-83.152 83.3-83.152V151l41.7 41.576-41.74 41.575v-27.717h0.1v-0.02h-0.02zM634.871 483h-27.696v-27.85h27.696c14.73 0 28.847-5.705 39.255-16.104a55.24 55.24 0 0 0 16.254-39.201 55.24 55.24 0 0 0-16.353-39.16 55.893 55.893 0 0 0-39.393-16.222v27.73L593 330.598 634.634 289v27.692c45.816 0 83.366 37.239 83.366 83.134a82.978 82.978 0 0 1-24.301 58.805 83.126 83.126 0 0 1-58.828 24.35V483z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yewuyu" unicode="&#59641;" d="M930.929-36H90.07c-19.34 0-36.857 7.85-49.54 20.466C27.848-2.848 20 14.674 20 34.089V734.981C20 773.67 51.392 805 90.071 805H440.43c16.607 0 31.251-6.588 43.234-16.26 55.706-36.377 111.343-123.848 166.98-123.848h280.286c38.75 0 70.071-31.4 70.071-70.09V34.09C1001-4.6 969.678-36 930.929-36zM334 146h183V512H334v-366z m114.375 320.25h45.75v-45.75h-45.75v45.75z m0-91.5h45.75V329h-45.75v45.75z m0-91.5h45.75v-45.75h-45.75v45.75z m-91.5 183h45.75v-45.75h-45.75v45.75z m0-91.5h45.75V329h-45.75v45.75z m0-91.5h45.75v-45.75h-45.75v45.75z m183 114.375v-22.875H700v22.875H539.875z m0-251.625h45.75v91.5h68.625V146H700V351.875H539.875V146z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yewucengji" unicode="&#59642;" d="M930.929-36H90.07c-19.34 0-36.857 7.85-49.54 20.466C27.848-2.848 20 14.674 20 34.089V734.981C20 773.67 51.392 805 90.071 805H440.43c16.607 0 31.251-6.588 43.234-16.26 55.706-36.377 111.343-123.848 166.98-123.848h280.286c38.75 0 70.071-31.4 70.071-70.09V34.09C1001-4.6 969.678-36 930.929-36zM667.35 256.518v57.687c0 22.709-18.4 41.187-41.015 41.187H518.749v35.434c23.727 6.049 40.359 27.473 40.41 52.055 0 29.681-24.01 53.79-53.567 53.79-29.496 0-53.536-24.109-53.536-53.76 0-25.083 17.22-46.149 40.38-52.054v-35.465h-97.31c-22.615 0-41.016-18.478-41.016-41.187v-57.687c-23.71-6.07-40.322-27.485-40.38-52.056 0-29.65 24.01-53.79 53.536-53.79 29.557 0 53.566 24.11 53.566 53.79 0 25.084-17.218 46.12-40.41 52.056v57.687c0 8.158 6.61 14.764 14.703 14.764h97.31v-72.451c-23.709-6.07-40.32-27.485-40.379-52.056 0-29.68 24.01-53.79 53.536-53.79 29.527 0 53.566 24.11 53.566 53.76 0 25.084-17.219 46.15-40.41 52.055V329h107.588c8.094 0 14.702-6.606 14.702-14.764v-57.687c-23.721-6.058-40.348-27.476-40.41-52.055 0-29.65 24.01-53.79 53.567-53.79 29.526 0 53.535 24.11 53.535 53.79 0 25.084-17.218 46.119-40.379 52.055v-0.03z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chaifenyemian" unicode="&#59637;" d="M912 832v-256H112V832h66.688v-192h666.688V832zM112-64v256h800v-256h-66.624v192H178.688v-192zM64 448h896v-128H64z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shoujixuanzhuan" unicode="&#59636;" d="M868.962 804.785H561.916c-50.253 0-90.977-40.732-90.977-90.978v-659.612c0-50.247 40.723-90.977 90.977-90.977h307.046c50.256 0 90.987 40.731 90.987 90.977V713.807c0 50.245-40.731 90.978-90.987 90.978z m-14.108-80.047c9.774 0 17.706-7.918 17.706-17.699 0-9.78-7.932-17.713-17.706-17.713s-17.706 7.934-17.706 17.713c0 9.781 7.933 17.7 17.706 17.7z m-213.336 0.43h147.845v-34.114H641.518v34.113z m82.35-695.247c-17.033 0-30.824 13.812-30.824 30.832 0 17.034 13.79 30.849 30.825 30.849s30.855-13.815 30.855-30.85c0-17.019-13.821-30.831-30.855-30.831z m179.223 81.138H527.797V656.94h375.294V111.06zM186.644 133.812h56.806v170.52h-56.806v-170.52z m22.692 147.827h11.42v-125.135h-11.42V281.639zM281.382 46.584h153.014v22.694H304.075V368.863h130.321v22.694H281.382zM216.126 387.539c-16.023 0-29.054-13.031-29.054-29.06 0-16.015 13.03-29.046 29.054-29.046 16.022 0 29.053 13.03 29.053 29.046 0 16.029-13.031 29.06-29.053 29.06z m0-35.415c-3.51 0-6.36 2.852-6.36 6.354 0 3.516 2.852 6.368 6.36 6.368s6.36-2.852 6.36-6.368c0-3.501-2.852-6.354-6.36-6.354zM209.367 474.926c-56.43 0-102.332-45.903-102.332-102.325V65.54c0-56.422 45.903-102.324 102.332-102.324h225.029V-14.09h-225.03c-43.915 0-79.639 35.723-79.639 79.63V372.602c0 43.91 35.724 79.632 79.64 79.632h225.029v22.693h-225.03zM138.156 611.097c0.244 3.133 0.488 6.265 0.902 9.426 10.563 81.449 72.643 143.78 149.186 158.6l-6.617 21.806c-84.803-17.419-153.325-86.916-165.077-177.48-0.273-2.158-0.429-4.315-0.643-6.472L82.755 665.23l-18.704-12.853 58.58-85.23 76.824 67.768-15.01 17.02-46.289-40.837z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="VAR" unicode="&#59635;" d="M929.353143 782.628571c23.552 0 42.715429-19.163429 42.715428-42.715428v-640.512a42.715429 42.715429 0 0 0-42.715428-42.715429h-208.457143v-34.742857a36.571429 36.571429 0 0 0-36.571429-36.571428H359.716571a36.571429 36.571429 0 0 0-36.571428 36.571428v34.742857H94.646857a42.715429 42.715429 0 0 0-42.130286 35.84l-0.585142 6.875429V739.913143c0 23.552 19.163429 42.715429 42.715428 42.715428zM886.491429 697.051429H137.362286v-555.008H886.491429V697.124571zM340.845714 300.763429l83.602286 237.714285h-54.125714l-59.245715-182.198857h-2.048l-57.197714 182.198857h-57.563428l81.92-237.714285h64.731428z m95.817143 0l20.48 58.953142h96.621714l20.260572-58.953142h55.149714l-88.064 237.714285h-69.851428L382.537143 300.763429h54.125714z m102.034286 102.107428h-66.413714l31.451428 90.038857h4.169143l30.793143-90.038857z m148.187428-102.107428V387.437714h25.673143l55.808-86.674285h61.366857l-66.852571 92.16c30.500571 9.216 44.617143 30.500571 44.617143 70.217142 0 54.857143-27.794286 75.337143-91.867429 75.337143H634.88v-237.714285h52.077714z m20.845715 125.366857h-20.845715V497.371429h20.845715c34.962286 0 47.981714-5.851429 47.981714-34.230858 0-30.134857-13.019429-37.010286-47.981714-37.010285z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bianliang" unicode="&#59634;" d="M192 768h640c46.933333 0 85.333333-38.4 85.333333-85.333333v-597.333334c0-46.933333-38.4-85.333333-85.333333-85.333333H192c-46.933333 0-85.333333 38.4-85.333333 85.333333V682.666667c0 46.933333 38.4 85.333333 85.333333 85.333333z m0-64c-12.8 0-21.333333-8.533333-21.333333-21.333333v-597.333334c0-12.8 8.533333-21.333333 21.333333-21.333333h640c12.8 0 21.333333 8.533333 21.333333 21.333333V682.666667c0 12.8-8.533333 21.333333-21.333333 21.333333H192z m298.666667-360.533333c-14.933333 2.133333-27.733333 4.266667-40.533334 10.666666L424.533333 320c4.266667-17.066667 8.533333-36.266667 10.666667-51.2 2.133333-14.933333 8.533333-29.866667 14.933333-42.666667 8.533333-10.666667 32 2.133333 32 2.133334 2.133333 2.133333 6.4 2.133333 10.666667 2.133333 12.8 0 23.466667-8.533333 23.466667-21.333333 0-8.533333-6.4-17.066667-14.933334-19.2-19.2-10.666667-40.533333-17.066667-64-17.066667-27.733333 0-51.2 14.933333-59.733333 38.4-2.133333 8.533333-6.4 25.6-10.666667 46.933333 0 0-17.066667-25.6-29.866666-49.066666-14.933333-23.466667-29.866667-34.133333-46.933334-34.133334-8.533333 0-36.266667 2.133333-36.266666 36.266667-2.133333 10.666667 2.133333 23.466667 10.666666 32 8.533333 8.533333 19.2 14.933333 32 14.933333 14.933333-2.133333 27.733333-4.266667 40.533334-8.533333l23.466666 32c-4.266667 23.466667-12.8 51.2-19.2 74.666667-2.133333 6.4-4.266667 10.666667-4.266666 14.933333-6.4 14.933333-34.133333 0-34.133334 0-2.133333-2.133333-6.4-2.133333-10.666666-2.133333-12.8 0-23.466667 8.533333-23.466667 21.333333 0 6.4 4.266667 14.933333 10.666667 17.066667 21.333333 12.8 46.933333 19.2 70.4 19.2 27.733333-2.133333 51.2-19.2 57.6-46.933334 2.133333-6.4 4.266667-19.2 8.533333-36.266666 0 0 17.066667 25.6 29.866667 49.066666 14.933333 23.466667 29.866667 34.133333 46.933333 34.133334 8.533333 0 36.266667-2.133333 36.266667-36.266667 2.133333-10.666667-2.133333-23.466667-10.666667-32-4.266667-8.533333-14.933333-14.933333-27.733333-14.933333zM170.666667 618.666667h682.666666v-64H170.666667v64z m437.333333-213.333334h128c17.066667 0 32-14.933333 32-32s-14.933333-32-32-32h-128c-17.066667 0-32 14.933333-32 32s14.933333 32 32 32z m0-149.333333h128c17.066667 0 32-14.933333 32-32s-14.933333-32-32-32h-128c-17.066667 0-32 14.933333-32 32s14.933333 32 32 32z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="menhu" unicode="&#59632;" d="M876.544 748.544v-729.088H147.456V748.544h729.088m0 92.842667H147.456C96.256 841.386667 54.613333 799.744 54.613333 748.544v-729.088c0-51.2 41.642667-92.842667 92.842667-92.842667h729.088c51.2 0 92.842667 41.642667 92.842667 92.842667V748.544c0 51.2-41.642667 92.842667-92.842667 92.842667z m0 0M653.312 641.365333H764.586667v-92.842666H653.312V641.365333z m0-208.213333H764.586667v-92.842667H653.312V433.152z m-394.581333-218.453333H764.586667v-92.842667H258.730667V214.698667z m0 436.224h288.085333v-315.392H258.730667V650.922667z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="layer" unicode="&#59633;" d="M66.81735017 242.32573155l156.31031813-75.03532183L512.1657009 27.302924640000015l278.73609702 135.0462325 166.69510416 79.83935336a82.85044939 82.85044939 0 0 0-38.77401031-109.99691693L548.28849683-47.26377434999995a82.85044939 82.85044939 0 0 0-72.24559186 0l-370.53568948 179.45407337a82.85044939 82.85044939 0 0 0-38.68986532 110.13543253z m890.42096482 173.37751072a82.85044939 82.85044939 0 0 0-38.41542322-110.74257098L548.26131152 125.50659791999999a82.85044939 82.85044939 0 0 0-72.24559186 0L105.50851003 304.96067129000005a82.85044939 82.85044939 0 0 0-40.34816886 106.37997701L475.54580227 217.77481323999996l36.61989863-17.72999617 370.53568948 179.45407336-0.19418075 0.08285046 74.73110536 36.09431608zM548.28849683 806.29003504L918.79570647 626.86185245a82.85044939 82.85044939 0 0 0 0-149.1308089L548.28849683 298.27697019000004a82.85044939 82.85044939 0 0 0-72.24559186 0l-370.53568948 179.45407336a82.85044939 82.85044939 0 0 0 0 149.1308089l370.53568948 179.39970275a82.85044939 82.85044939 0 0 0 72.24559186 0z m-36.12279593-74.56540445l-370.53568949-179.42688805 370.53568949-179.45407337 370.53568948 179.45407337-370.53568948 179.42688805z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jia1" unicode="&#59572;" d="M554.666667 426.666667V768a42.666667 42.666667 0 0 1-85.333334 0v-341.333333H128a42.666667 42.666667 0 0 1 0-85.333334h341.333333v-341.333333a42.666667 42.666667 0 0 1 85.333334 0v341.333333h341.333333a42.666667 42.666667 0 0 1 0 85.333334h-341.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiazhilian" unicode="&#59631;" d="M922.51212155-62.481818259999955L536.85757585-62.48181824999995a33.72727237 33.72727237 0 0 0-33.72727324 33.72727324L503.1303026 356.90909122000005a33.72727237 33.72727237 0 0 0 33.72727324 33.72727235l385.65454572 0a33.72727237 33.72727237 0 0 0 33.73636289-33.72727236l1e-8-385.65454571a33.72727237 33.72727237 0 0 0-33.72727238-33.73636376z m-351.90909141 67.47272753l318.18181817 0 0 318.18181817-318.18181817 0 0-318.18181816zM466.53939372 380.69999971000004L80.89393943 380.69999971000004a33.72727237 33.72727237 0 0 0-33.72727237 33.72727323L47.16666706 800.09090918A33.72727237 33.72727237 0 0 0 80.88484889 833.81818154l385.65454483 0a33.72727237 33.72727237 0 0 0 33.73636377-33.72727237l0-385.6545457a33.72727237 33.72727237 0 0 0-33.72727236-33.73636376z m-351.90909053 67.47272753l318.18181818 0-1e-8 318.18181818-318.18181817 0 0-318.18181818zM381.93939372 22.03636346999997L165.41212117 22.03636346999997a33.72727237 33.72727237 0 0 0-33.72727237 33.72727325L131.6848488 272.4a33.72727237 33.72727237 0 0 0 33.72727237 33.72727237L381.93939372 306.12727237a33.72727237 33.72727237 0 0 0 33.73636377-33.72727237l0-216.61818223a33.72727237 33.72727237 0 0 0-33.72727236-33.73636289z m-182.7909088 67.46363614L348.21212136 89.49999961000003 348.21212136 238.65454569999997 199.14848493 238.65454569999997l-1e-8-149.15454609zM273.72121227 238.65454569999997a33.72727237 33.72727237 0 0 0-33.72727323 33.72727236L239.99393904 414.44545488a33.72727237 33.72727237 0 0 0 33.72727324 33.72727236 33.72727237 33.72727237 0 0 0 33.73636377-33.72727236l0-142.04545489c0-18.72727296-15.09090908-33.73636379-33.72727326-33.73636376z m263.13636358-108.30909111l-154.90909072 0a33.72727237 33.72727237 0 0 0-33.73636377 33.72727236 33.72727237 33.72727237 0 0 0 33.72727236 33.74545517l154.91818212 0a33.72727237 33.72727237 0 0 0 33.73636378-33.73636376 33.72727237 33.72727237 0 0 0-33.72727324-33.73636377zM846.61212097 454.02727296L612.75757555 454.02727295a36.39090937 36.39090937 0 0 0-36.3999999 36.39999991L576.35757565 724.44545479a36.39090937 36.39090937 0 0 0 36.39999989 36.3999999l233.8454549 1e-8a36.39090937 36.39090937 0 0 0 36.39999992-36.39999991l-1e-8-233.83636348a36.42727237 36.42727237 0 0 0-36.39999991-36.58181836z m-197.36363584 72.97272685L810.21212108 526.99999981 810.21212107 687.96363662 649.25757565 687.96363662 649.25757566 526.99999981z"  horiz-adv-x="1044" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="uprank" unicode="&#59630;" d="M499.385 264.074zM283.116 738.31l-215.91-287.822h140.772v-420.799h150.299v420.796h140.769l-215.929 287.825zM572.456 30.091v86.369h384.338v-86.369h-384.338zM572.456 271.92v-86.366h306.607v86.366h-306.607zM572.456 427.38v-86.366h228.876v86.366h-228.876zM572.456 582.843v-86.366h151.146v86.366h-151.146zM572.456 738.31v-86.37h73.411v86.37h-73.411z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhuanhuan1" unicode="&#59629;" d="M947.29220077 503.11764726c0-4.41176484 0-13.23529453-4.41176485-17.64705937v-4.41176396c0-4.41176484-4.41176484-8.82352969-8.8235297-13.23529453-4.41176484 0-4.41176484-4.41176484-8.82352967-4.41176485h-4.41176397c-4.41176484-4.41176484-8.82352969-4.41176484-17.64705937-4.41176484H109.05690593c-22.05882334 0-44.11764668 17.64705849-44.11764667 44.11764755 0 22.05882334 17.64705849 44.11764668 44.11764667 44.11764668h692.64705939l-167.64705878 167.6470588c-17.64705849 17.64705849-17.64705849 44.11764668 0 61.76470605 17.64705849 17.64705849 44.11764668 17.64705849 61.76470604 0l238.23529365-242.6470585 4.41176486-4.41176484c0-4.41176484 4.41176484-4.41176484 4.41176483-8.82352969 4.41176484-8.82352969 4.41176484-13.23529453 4.41176485-17.64705847z m-44.11764756-211.76470634c22.05882334 0 44.11764668-17.64705849 44.11764756-44.11764668s-17.64705849-44.11764668-44.11764756-44.11764756H214.93925954l167.6470588-167.64705879c17.64705849-17.64705849 17.64705849-44.11764668 0-61.76470519l-4.41176484-4.41176483c-17.64705849-17.64705849-44.11764668-17.64705849-61.76470606 0L78.17455378 207.52941152999995c-8.82352969 17.64705849-13.23529453 26.47058818-13.23529452 39.70588271 0 22.05882334 17.64705849 44.11764668 44.11764667 44.11764668h794.11764728z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuxian" unicode="&#59628;" d="M632.3 831.057H830.84v-893.42H632.3V831.058z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="address" unicode="&#59626;" d="M873.46583333-66H182.41583362a64.35 64.35 0 0 0-64.27500029 64.27500029v112.5a32.175 32.175 0 0 0 64.27500029 0v-112.5H873.46583333V769.72499971H182.41583362v-144.675a32.175 32.175 0 0 0-64.27500029 0V769.72499971c0 35.47500029 28.8 64.19999971 64.27500029 64.27500029H873.46583333c35.47500029 0 64.27500029-28.8 64.27500029-64.27500029v-771.44999942A64.35 64.35 0 0 0 873.46583333-66zM182.41583362 207.22499971000002H118.14083333a32.175 32.175 0 0 0 0 64.27500029h64.27500029a32.175 32.175 0 0 0 0-64.27500029z m0 128.55000058H118.14083333a32.175 32.175 0 1 0 0 64.27499942h64.27500029a32.175 32.175 0 1 0 0-64.27499942z m0 128.54999971H118.14083333a32.175 32.175 0 0 0 0 64.35h64.27500029a32.175 32.175 0 0 0 0-64.35z m337.5-144.60000029a160.875 160.875 0 0 0-160.72500058 160.72500058c0 88.57500029 72.07499971 160.72499971 160.72500058 160.72499971 88.57500029 0 160.72499971-72.15000029 160.72499971-160.72499971a160.875 160.875 0 0 0-160.72499971-160.72500058z m0 257.10000029a96.45000029 96.45000029 0 1 1 0-192.825 96.45000029 96.45000029 0 0 1 0 192.825zM712.74083362 126.82500000000005A32.175 32.175 0 0 0 680.71583304 159a160.875 160.875 0 0 1-160.72499971 160.72499971A160.875 160.875 0 0 1 359.19083304 159a32.175 32.175 0 0 0-64.27499942 0 225 225 0 1 0 450 0 32.175 32.175 0 0 0-32.175-32.175zM873.46583333-66H182.41583362a64.35 64.35 0 0 0-64.27500029 64.27500029v112.5a32.175 32.175 0 0 0 64.27500029 0v-112.5H873.46583333V769.72499971H182.41583362v-144.675a32.175 32.175 0 0 0-64.27500029 0V769.72499971c0 35.47500029 28.8 64.19999971 64.27500029 64.27500029H873.46583333c35.47500029 0 64.27500029-28.8 64.27500029-64.27500029v-771.44999942A64.35 64.35 0 0 0 873.46583333-66zM182.41583362 207.22499971000002H118.14083333a32.175 32.175 0 0 0 0 64.27500029h64.27500029a32.175 32.175 0 0 0 0-64.27500029z m0 128.55000058H118.14083333a32.175 32.175 0 1 0 0 64.27499942h64.27500029a32.175 32.175 0 1 0 0-64.27499942z m0 128.54999971H118.14083333a32.175 32.175 0 0 0 0 64.35h64.27500029a32.175 32.175 0 0 0 0-64.35z m337.5-144.60000029a160.875 160.875 0 0 0-160.72500058 160.72500058c0 88.57500029 72.07499971 160.72499971 160.72500058 160.72499971 88.57500029 0 160.72499971-72.15000029 160.72499971-160.72499971a160.875 160.875 0 0 0-160.72499971-160.72500058z m0 257.10000029a96.45000029 96.45000029 0 1 1 0-192.825 96.45000029 96.45000029 0 0 1 0 192.825zM712.74083362 126.82500000000005A32.175 32.175 0 0 0 680.71583304 159a160.875 160.875 0 0 1-160.72499971 160.72499971A160.875 160.875 0 0 1 359.19083304 159a32.175 32.175 0 0 0-64.27499942 0 225 225 0 1 0 450 0 32.175 32.175 0 0 0-32.175-32.175z"  horiz-adv-x="1026" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="clock" unicode="&#59627;" d="M512 834a450 450 0 1 1 0-900A450 450 0 1 1 512 834z m273.44999971-723.44999971A384.75 384.75 0 0 0 512-2.700000290000048a384.525 384.525 0 0 0-273.44999971 113.25000058A384.75 384.75 0 0 0 125.29999971 384a384.45000029 384.45000029 0 0 0 113.25000058 273.44999971A384.75 384.75 0 0 0 512 770.70000029a384.525 384.525 0 0 0 273.44999971-113.25000058A384.75 384.75 0 0 0 898.70000029 384a384.45000029 384.45000029 0 0 0-113.25000058-273.44999971zM706.24999971 391.04999971H543.65000029V601.9500002899999a31.65000029 31.65000029 0 1 1-63.30000058 0v-210.90000058c0-35.02500029 28.27500029-63.29999971 63.30000058-63.29999971H706.24999971a31.65000029 31.65000029 0 1 1 0 63.29999971z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="debug" unicode="&#59625;" d="M960.29931641 321.24521484c0-9.7171875-3.54550781-18.12304688-10.6444336-25.22197265-7.09980469-7.09980469-15.50390625-10.65058594-25.21582031-10.65058594H798.91455078c0-63.88769531-12.51123047-118.0546875-37.54511719-162.50888672l116.55615235-117.12568359c7.09892578-7.08925781 10.65058594-15.49951172 10.65058593-25.21582032 0-9.71279297-3.54638672-18.11865234-10.65058593-25.21757812-6.72626953-7.08925781-15.12597656-10.64091797-25.21582032-10.64091797-10.08632812 0-18.4921875 3.55166016-25.21669921 10.64091797L716.53730469 65.70146483999997c-1.86767578-1.86152344-4.66699219-4.29257813-8.40146485-7.28085937-3.74326172-2.98652344-11.58398438-8.31708984-23.5415039-15.97148438-11.95224609-7.65966797-24.09521484-14.47822266-36.421875-20.45742187-12.33105469-5.97480469-27.65214844-11.39589844-45.95800782-16.25361328-18.30498047-4.84980469-36.42802734-7.28261719-54.35332031-7.28261719V500.55439453H476.13183594v-502.09892578c-19.04414062 0-38.01269531 2.52685547-56.87226563 7.57177734-18.87275391 5.04052734-35.12109375 11.20605469-48.75820312 18.4921875-13.63974609 7.28613281-25.96464844 14.56523438-36.98261719 21.85576172-11.02236328 7.28613281-19.14257813 13.35322266-24.38085938 18.20654297l-8.40058593 7.85039063L198.18652344-43.5703125c-7.47070313-7.84072266-16.43554688-11.76591797-26.89980469-11.76591797-8.96484375 0-16.99365234 2.99267578-24.08994141 8.96748047-7.10068359 6.72539063-10.93095703 15.03808594-11.49609375 24.93632812-0.55722656 9.89912109 2.33701172 18.58271484 8.69501954 26.0569336l113.19169921 127.20146484c-21.66503906 42.59619141-32.50195313 93.77929688-32.50195312 153.55371094H99.56357422c-9.71894531 0-18.12041016 3.55166016-25.21582031 10.6453125-7.1015625 7.10332031-10.65234375 15.50478516-10.65234375 25.22197266 0 9.71191406 3.55078125 18.12304688 10.65234375 25.21582031 7.09541016 7.09453125 15.496875 10.64091797 25.21582031 10.64091797h125.52099609V521.85029297L128.13769531 618.7954101600001c-7.09716797 7.09980469-10.64707031 15.50478516-10.64707031 25.21757812 0 9.71191406 3.55517578 18.12304688 10.64707031 25.21582031 7.09453125 7.09892578 15.50390625 10.65498047 25.21757813 10.65498047 9.71806641 0 18.11601562-3.56132813 25.21757812-10.65498047l96.94511719-96.94511718h472.96494141l96.94599609 96.94511718c7.09277344 7.09892578 15.496875 10.65498047 25.21582031 10.65498047 9.71191406 0 18.12128906-3.56132813 25.21582031-10.65498047 7.09980469-7.09277344 10.65146484-15.50390625 10.65146485-25.21582031s-3.55166016-18.11865234-10.65234375-25.21757812L798.91630859 521.85029297v-164.74921875h125.521875c9.7171875 0 18.12216797-3.54638672 25.21582032-10.64707031 7.09980469-7.09277344 10.65146484-15.50302734 10.65146484-25.20966797h-0.00527344zM691.31533203 644.01738281H332.67675781c0 49.68105469 17.46474609 91.99335937 52.396875 126.92636719 34.92246094 34.93300781 77.24091797 52.39335937 126.92373047 52.39335937 49.68457031 0 92.00302734-17.46035156 126.92548828-52.39335937 34.93476563-34.93212891 52.39335937-77.2453125 52.39335938-126.92636719z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="danao" unicode="&#59623;" d="M718.22719092 421.17527438m-67.83606671 0a67.8360667 67.8360667 0 1 1 135.67213341 0 67.8360667 67.8360667 0 1 1-135.67213341 0ZM440.09931778 612.81216285m-117.01721544 0a117.01721543 117.01721543 0 1 1 234.03442973 0 117.01721543 117.01721543 0 1 1-234.03442973 0ZM830.15670103 748.4842951200001c-59.35655822 64.44426354-135.67213341 125.49672277-327.30902187 127.19262492-74.61967303 0-188.2450853-16.95901696-278.12787314-110.23360796-54.26885291-55.96475506-93.27459214-128.88852707-81.40328049-245.90574138 1.69590215-25.43852544 39.0057381-54.26885291 13.56721379-103.45000163 0 0-54.26885291-96.66639531-52.57295189-111.92951011 0 0-1.69590215-28.83032861 44.09344341-30.52622962 0 0 11.87131165-1.69590215 8.47950848-27.13442646v-35.61393493s1.69590215-10.17540949 22.04672114-16.95901696c0 0 3.39180317-3.39180317-1.69590101-10.17541063 0 0-10.17540949-11.87131165 6.78360633-37.30983595 6.78360633-8.47950848 16.95901696-20.35082013 10.17541063-44.09344341 0 0-8.47950848-45.78934443 10.17540949-55.96475506 0 0 20.35082013-23.74262329 101.75409948-13.5672138 28.83032861 3.39180317 81.4032805 16.95901696 113.62541227-22.04672113 0 0 54.26885291-88.18688683 61.05246037-122.10491961 0 0 161.11065771 120.40901859 318.82951226 156.02295239 0 0-50.87704974 140.75983872 27.13442758 252.68934883 0 0 98.36229632 128.88852707 100.05819734 200.11639695 0-5.08770531 25.43852544 113.62541113-96.66639417 250.99344555zM553.7247289 473.74822628c-3.39180317-3.39180317-8.47950848-6.78360633-13.56721265-8.47950848-5.08770531-3.39180317-11.87131165-6.78360633-16.95901696-10.17541063V417.78347122l-15.26311481-5.08770532c-3.39180317-1.69590215-6.78360633-1.69590215-8.47950848-3.39180316-6.78360633 10.17540949-15.26311481 18.65491797-22.04672228 28.8303286-8.47950848-1.69590215-15.26311481-3.39180317-23.74262328-3.3918043-5.08770531-10.17540949-10.17540949-22.04672114-15.26311482-33.91803278 0 0 0-1.69590215-1.69590101-1.69590215-8.47950848 0-16.95901696 1.69590215-25.43852544 1.69590215-3.39180317 11.87131165-6.78360633 25.43852544-10.17540949 37.30983708 0 1.69590215-1.69590215 1.69590215-3.3918043 1.69590102-8.47950848 1.69590215-15.26311481 5.08770531-22.04672114 6.78360633-10.17540949-8.47950848-20.35082013-16.95901696-28.8303286-25.43852431-6.78360633 3.39180317-15.26311481 8.47950848-22.04672114 13.56721266 1.69590215 13.56721379 5.08770531 25.43852544 6.78360632 39.00573924-6.78360633 5.08770531-13.56721379 11.87131165-18.65491797 18.65491797-1.69590215 1.69590215-3.39180317 3.39180317-5.08770531 6.78360633-11.87131165-3.39180317-23.74262329-5.08770531-37.30983709-8.47950848h-1.69590101c-5.08770531 6.78360633-8.47950848 15.26311481-13.5672138 22.04672228l25.43852544 30.52622962c-3.39180317 6.78360633-5.08770531 15.26311481-8.47950848 23.74262328-11.87131165 3.39180317-25.43852544 5.08770531-37.30983708 6.78360633-1.69590215 8.47950848-1.69590215 16.95901696-3.39180316 25.43852544 11.87131165 5.08770531 22.04672114 11.87131165 33.91803392 16.95901696 0 10.17540949 0 18.65491797 1.69590101 27.13442645-10.17540949 6.78360633-18.65491797 13.56721379-28.83032747 20.35082013 0 0-3.39180317 1.69590215-1.69590215 3.39180317 1.69590215 6.78360633 3.39180317 13.56721379 6.78360633 20.35082012 0 1.69590215 0 1.69590215 1.69590215 3.39180316 11.87131165 0 23.74262329 0 35.61393493 1.69590216 1.69590215 0 3.39180317 0 3.39180317 1.69590101 3.39180317 6.78360633 6.78360633 11.87131165 10.17540949 18.65491797 1.69590215 1.69590215 3.39180317 5.08770531 3.3918043 6.78360747-5.08770531 11.87131165-11.87131165 22.04672114-16.95901696 33.91803278 5.08770531 6.78360633 11.87131165 11.87131165 16.95901696 18.65491911l35.61393494-15.26311594c3.39180317 3.39180317 8.47950848 6.78360633 13.56721266 8.47950848 5.08770531 3.39180317 11.87131165 6.78360633 16.95901696 10.17541062v1.69590102 11.87131164 23.74262329l15.2631148 5.08770532c3.39180317 1.69590215 6.78360633 1.69590215 8.47950848 3.39180316 3.39180317-11.87131165 11.87131165-20.35082013 18.65491798-30.52622961 8.47950848 0 15.26311481 1.69590215 23.74262328 1.69590101v1.69590215c5.08770531 11.87131165 10.17540949 22.04672114 15.26311482 33.91803278 8.47950848 0 16.95901696-1.69590215 25.43852544-1.69590101 3.39180317-11.87131165 6.78360633-23.74262329 8.47950848-35.61393493 8.47950848-1.69590215 15.26311481-3.39180317 23.74262328-6.78360634 1.69590215 0 3.39180317-1.69590215 5.08770532 0 10.17540949 5.08770531 18.65491797 13.56721379 27.13442645 20.35081899 6.78360633-5.08770531 15.26311481-8.47950848 22.04672114-13.56721265-1.69590215-11.87131165-5.08770531-23.74262329-6.78360633-35.61393494 0-1.69590215 3.39180317-3.39180317 5.08770532-5.08770532 5.08770531-5.08770531 10.17540949-10.17540949 15.2631148-13.56721379l35.61393494 10.17541063c1.69590215-3.39180317 3.39180317-5.08770531 5.08770532-8.47950848 3.39180317-3.39180317 5.08770531-6.78360633 8.47950848-11.87131164 0 0 1.69590215-1.69590215 0-3.39180317-6.78360633-10.17540949-15.26311481-20.35082013-22.04672228-30.52622961 1.69590215-5.08770531 5.08770531-10.17540949 6.78360633-15.26311595l5.08770531-15.26311481c11.87131165-3.39180317 25.43852544-5.08770531 37.30983709-6.78360633 1.69590215-8.47950848 1.69590215-16.95901696 3.39180316-25.43852544-11.87131165-5.08770531-22.04672114-11.87131165-33.91803392-16.95901582 0-8.47950848 0-18.65491797-1.69590101-27.13442759 10.17540949-6.78360633 20.35082013-15.26311481 30.52622962-22.04672114-1.69590215-6.78360633-5.08770531-13.56721379-6.78360633-20.35082012 0-1.69590215-1.69590215-3.39180317-1.69590215-3.39180317-13.56721379 0-25.43852544 0-39.0057381-1.69590215-3.39180317-6.78360633-6.78360633-13.56721379-10.1754095-18.65491798-1.69590215-1.69590215-3.39180317-5.08770531-3.39180316-6.78360632 5.08770531-11.87131165 11.87131165-22.04672114 16.95901582-33.91803392-5.08770531-6.78360633-11.87131165-11.87131165-16.95901582-18.65491798-8.47950848 3.39180317-18.65491797 8.47950848-30.52623076 13.5672138z m289.99918479-83.09918265c-1.69590215-3.39180317-3.39180317-8.47950848-3.39180317-11.87131165v-1.69590101h-23.74262328c-1.69590215-3.39180317-3.39180317-8.47950848-6.78360634-11.87131164 0-1.69590215-1.69590215-3.39180317-1.69590214-3.39180317l10.17541062-20.35082012c-3.39180317-3.39180317-6.78360633-6.78360633-10.17541062-11.87131164l-20.35082013 10.17540949c-3.39180317-1.69590215-5.08770531-3.39180317-8.47950848-5.08770418-3.39180317-1.69590215-6.78360633-3.39180317-10.17540949-6.78360747v-23.74262328c-3.39180317-1.69590215-6.78360633-1.69590215-10.1754095-3.39180317-1.69590215 0-3.39180317-1.69590215-5.08770531-1.69590215-5.08770531 5.08770531-8.47950848 11.87131165-13.5672138 16.95901696-5.08770531-1.69590215-10.17540949-1.69590215-13.56721265-1.69590102-3.39180317-6.78360633-5.08770531-13.56721379-8.47950848-20.35082012v-1.69590215c-5.08770531 0-10.17540949 1.69590215-15.26311482 1.69590215-1.69590215 6.78360633-3.39180317 15.26311481-5.08770531 22.04672114 0 1.69590215-1.69590215 0-1.69590215 1.69590215-5.08770531 1.69590215-8.47950848 3.39180317-13.56721266 5.08770531-6.78360633-5.08770531-11.87131165-10.17540949-18.65491911-15.26311594-5.08770531 3.39180317-8.47950848 5.08770531-13.56721266 8.47950848 1.69590215 8.47950848 3.39180317 15.26311481 5.08770532 23.74262329-3.39180317 3.39180317-8.47950848 6.78360633-11.87131165 10.17541063-5.08770531 0-6.78360633 0-6.78360746 1.69590101-6.78360633-1.69590215-15.26311481-3.39180317-22.04672114-5.08770417h-1.69590215c-3.39180317 5.08770531-5.08770531 8.47950848-8.47950848 13.56721265 5.08770531 6.78360633 10.17540949 11.87131165 15.26311595 18.65491797-1.69590215 5.08770531-3.39180317 8.47950848-5.08770532 13.5672138-6.78360633 1.69590215-15.26311481 3.39180317-22.04672228 5.08770532 0 5.08770531-1.69590215 10.17540949-1.69590101 15.2631148l20.35082013 10.1754095c0 5.08770531 0 11.87131165 1.69590101 16.95901696-5.08770531 3.39180317-11.87131165 8.47950848-16.95901583 11.87131164l-1.69590214 1.69590216c1.69590215 3.39180317 1.69590215 8.47950848 3.39180316 11.87131164v1.69590101H621.56079561c1.69590215 3.39180317 3.39180317 6.78360633 6.78360633 10.17541063 0 1.69590215 1.69590215 3.39180317 1.69590215 3.39180317l-10.17540949 20.35082012c3.39180317 3.39180317 6.78360633 6.78360633 10.17540949 11.87131165l20.35082012-10.17541064c3.39180317 1.69590215 5.08770531 3.39180317 8.47950848 5.08770532 3.39180317 1.69590215 6.78360633 3.39180317 10.17540949 6.78360633v1.69590215 6.78360633 15.26311481c3.39180317 1.69590215 6.78360633 1.69590215 10.17541064 3.3918043 1.69590215 0 3.39180317 1.69590215 5.08770418 1.69590102 5.08770531-5.08770531 8.47950848-11.87131165 13.56721379-16.95901696 5.08770531 0 8.47950848 1.69590215 13.56721379 1.69590214 3.39180317 6.78360633 5.08770531 13.56721379 8.47950735 20.35082013 5.08770531 0 10.17540949 0 15.26311595-1.69590215 1.69590215-6.78360633 3.39180317-15.26311481 5.08770417-22.04672114 5.08770531-1.69590215 10.17540949-1.69590215 13.5672138-5.08770532 1.69590215 0 1.69590215-1.69590215 3.39180316 0 5.08770531 5.08770531 10.17540949 10.17540949 16.95901696 13.5672138 5.08770531-3.39180317 8.47950848-5.08770531 13.56721266-8.47950848-1.69590215-6.78360633-3.39180317-15.26311481-3.39180317-22.04672228 0-1.69590215 1.69590215-1.69590215 3.39180317-3.39180316 3.39180317-3.39180317 6.78360633-5.08770531 8.47950848-8.47950848 6.78360633 1.69590215 15.26311481 5.08770531 22.04672227 6.78360747 1.69590215-1.69590215 1.69590215-3.39180317 3.39180317-5.08770532 1.69590215-1.69590215 3.39180317-5.08770531 5.08770531-6.78360633 0 0 1.69590215-1.69590215 0-1.69590215-5.08770531-6.78360633-8.47950848-11.87131165-13.56721379-18.65491797 1.69590215-3.39180317 3.39180317-6.78360633 3.39180317-10.17541063 1.69590215-3.39180317 1.69590215-6.78360633 3.39180316-10.17540949 6.78360633-1.69590215 15.26311481-3.39180317 22.04672228-5.08770532 1.69590215-5.08770531 1.69590215-10.17540949 1.69590101-15.26311481l-20.35082013-10.17541063c0-5.08770531 0-11.87131165-1.69590101-16.95901582 10.17540949 3.39180317 16.95901696-1.69590215 22.04672114-6.78360747z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shujushitu" unicode="&#59624;" d="M195.84-59.733333h-117.333333c-5.546667 0-10.24 4.693333-10.24 10.24v231.253333c0 5.546667 4.693333 10.24 10.24 10.24h117.333333c5.546667 0 10.24-4.693333 10.24-10.24v-231.253333c-0.426667-5.546667-4.693333-10.24-10.24-10.24z m197.546667 10.24v306.773333c0 5.546667-4.693333 10.24-10.24 10.24H265.813333c-5.546667 0-10.24-4.693333-10.24-10.24v-306.773333c0-5.546667 4.693333-10.24 10.24-10.24h117.333334c5.546667 0 10.24 4.693333 10.24 10.24z m187.306666 0V407.893333c0 5.546667-4.693333 10.24-10.24 10.24H453.12c-5.546667 0-10.24-4.693333-10.24-10.24v-457.386666c0-5.546667 4.693333-10.24 10.24-10.24h117.333333c5.973333 0 10.24 4.693333 10.24 10.24z m187.733334-1.28v359.253333c0 5.12-3.84 8.96-8.96 8.96H640c-5.12 0-8.96-3.84-8.96-8.96v-359.253333c0-5.12 3.84-8.96 8.96-8.96h119.466667c4.693333 0 8.96 4.266667 8.96 8.96z m187.306666 2.56V569.6c0 6.4-5.12 11.52-11.52 11.52h-114.346666c-6.4 0-11.52-5.12-11.52-11.52v-617.813333c0-6.4 5.12-11.52 11.52-11.52h114.346666c6.4 0 11.52 5.12 11.52 11.52zM887.04 827.733333c-19.2 0-34.986667-15.786667-34.986667-34.986666 0-3.413333 0.853333-6.826667 1.706667-9.813334l-152.746667-212.906666h-1.28c-8.106667 0-15.36-2.986667-21.333333-7.253334l-136.533333 71.253334c-3.413333 15.786667-17.493333 27.733333-34.133334 27.733333-19.2 0-34.986667-15.786667-34.986666-34.986667 0-1.706667 0.426667-3.84 0.426666-5.546666l-133.973333-109.653334c-4.693333 2.133333-9.813333 3.413333-14.933333 3.413334-18.346667 0-33.28-14.506667-34.56-32.426667l-132.693334-55.04c-5.973333 5.12-13.653333 8.106667-22.186666 8.106667-19.2 0-34.986667-15.786667-34.986667-34.986667s15.786667-34.986667 34.986667-34.986667c17.493333 0 31.573333 12.8 34.56 29.44l135.68 56.32c5.546667-3.84 12.373333-5.973333 19.626666-5.973333 19.2 0 34.986667 15.786667 34.986667 34.986667 0 0.853333 0 1.706667-0.426667 2.56l136.106667 111.786666c3.84-1.28 8.106667-2.56 12.373333-2.56 8.96 0 16.64 3.413333 23.04 8.96l133.973334-70.4c2.133333-17.066667 16.64-30.293333 34.56-30.293333 19.2 0 34.986667 15.786667 34.986666 34.986667 0 5.973333-1.706667 11.52-4.266666 16.213333L878.933333 759.04c2.56-0.426667 5.12-0.853333 7.68-0.853333 19.2 0 34.986667 15.786667 34.986667 34.986666 0.426667 18.773333-15.36 34.56-34.56 34.56z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xiaoyanjing" unicode="&#59622;" d="M520.064 738.882c95.636 0.226 184.531-30.48 262.791-81.332 85.974-55.793 159.144-136.153 214.188-226.32l0.901-1.499c9.209-15.952 14.604-40.216 14.752-63.057V365.999c0-22.018-5.018-44.335-16.026-59.462-57.44-90.919-120.876-167.906-197.187-222.58-77.964-55.865-168.807-88.218-279.419-88.218-98.034 0-187.454 31.303-264.519 80.354-89.12 56.845-161.464 137.652-210.892 221.155l-0.375 0.525c-12.283 21.943-19.098 44.935-19.098 69.724 0 24.115 6.59 49.578 21.12 76.688l0.525 0.824-0.077 0.074C96.252 530.534 168.523 605.8 253.224 658.597c80.208 49.954 171.953 80.06 266.84 80.285z m231.412-129.486c-69.35 45.009-147.686 72.196-231.411 72.046-83.43-0.15-164.763-27.111-236.434-71.745C206.87 561.84 141.415 493.69 96.554 416.176l-0.076 0.076c-9.361-17.75-13.63-33.926-13.63-48.754 0-14.379 4.196-28.159 11.683-41.564 45.309-76.315 111.141-150.007 191.873-201.384 68.148-43.438 147.162-71.146 233.661-71.146 97.584 0 177.414 28.385 245.867 77.437 69.947 50.177 128.81 121.923 182.66 207.149 0.521 0.823 1.046 1.647 1.646 2.396 3.52 4.494 5.018 14.678 5.018 26.063v0.147c-0.076 13.332-2.548 26.362-6.664 33.702l-0.678 0.974c-50.775 83.205-117.878 157.124-196.438 208.124z m-232.538-36.249c56.694 0 108.143-23.065 145.438-60.286v-0.076h0.076l0.225-0.225c37.146-37.22 60.065-88.595 60.065-145.213s-22.992-108.067-60.29-145.363l-0.076-0.075-0.224-0.15c-37.219-37.146-88.595-60.137-145.214-60.137-56.615 0-108.068 22.991-145.363 60.287l-0.076 0.075-0.148 0.224c-37.146 37.222-60.137 88.597-60.137 145.14 0 56.693 23.068 108.144 60.286 145.438h0.076v0.076l0.226 0.225c37.293 37.069 88.594 60.06 145.136 60.06z m104.773-100.952c-26.734 26.737-63.731 43.288-104.772 43.288-40.89 0-77.96-16.551-104.698-43.288l-0.072-0.15c-26.738-26.661-43.289-63.656-43.289-104.697 0-40.966 16.55-78.037 43.289-104.697l0.072-0.15c26.738-26.66 63.808-43.212 104.698-43.212 41.041 0 78.038 16.552 104.772 43.212l0.076 0.15c26.735 26.66 43.286 63.731 43.286 104.697 0 41.041-16.551 78.037-43.286 104.697l-0.076 0.15z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tuozhuai1" unicode="&#59621;" d="M371.375 749.625m-84.375 0a84.375 84.375 0 1 1 168.75 0 84.375 84.375 0 1 1-168.75 0ZM652.625 749.625m-84.375 0a84.375 84.375 0 1 1 168.75 0 84.375 84.375 0 1 1-168.75 0ZM371.375 384m-84.375 0a84.375 84.375 0 1 1 168.75 0 84.375 84.375 0 1 1-168.75 0ZM652.625 384m-84.375 0a84.375 84.375 0 1 1 168.75 0 84.375 84.375 0 1 1-168.75 0ZM371.375 18.375m-84.375 0a84.375 84.375 0 1 1 168.75 0 84.375 84.375 0 1 1-168.75 0ZM652.625 18.375m-84.375 0a84.375 84.375 0 1 1 168.75 0 84.375 84.375 0 1 1-168.75 0Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="lianjie" unicode="&#59620;" d="M722.39629453 805.21205392c-56.29017892 0-109.20535702-21.9375-148.98214298-61.77455392L415.3315625 585.35491095A209.25 209.25 0 0 1 353.49674143 436.43303595c0-72.08035703 36.34151798-138.375 97.27232107-177.4285719a39.29464297 39.29464297 0 0 1 29.89285703-5.30357107 39.234375 39.234375 0 0 1 30.01339297 47.0089281 39.41517892 39.41517892 0 0 1-17.296875 24.83035785 131.32366094 131.32366094 0 0 0-60.87053595 110.89285702c0 35.19642892 13.74107107 68.28348202 38.63169689 93.11383905l158.08258906 158.08258905a131.86607108 131.86607108 0 0 0 224.859375-93.11383905c0-35.19642892-13.68080393-68.28348202-38.57142893-93.17410702l-74.97321405-74.97321405a39.47544608 39.47544608 0 1 1 55.86830393-55.86830393l74.97321405 74.97321405a209.31026798 209.31026798 0 0 1 61.77455392 149.04241095A210.9375 210.9375 0 0 1 722.33602656 805.21205392zM572.51013358 508.39285702a39.35491095 39.35491095 0 0 1-59.90625-41.70535702 39.29464297 39.29464297 0 0 1 17.23660785-24.83035702 131.32366094 131.32366094 0 0 0 60.87053512-110.89285703c0-35.19642892-13.74107107-68.22321405-38.57142811-93.17410702l-158.08258986-158.02232191a131.92633905 131.92633905 0 0 0-224.859375 93.11383905c0 35.19642892 13.68080393 68.28348202 38.57142892 93.17410785l74.97321405 74.97321405a39.41517892 39.41517892 0 0 1 0 55.8683031 39.35491095 39.35491095 0 0 1-55.8683031 0L151.84049143 321.92410701999995A209.31026798 209.31026798 0 0 1 90.12620548 172.88169607999998 210.99776797 210.99776797 0 0 1 300.88290155-37.875c56.29017892 0 109.20535702 21.9375 149.04241095 61.77455393l158.08258906 158.08258904A209.25 209.25 0 0 1 669.7221875 330.96428595a209.97321405 209.97321405 0 0 1-97.21205393 177.42857108z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuipingfenbu-copy" unicode="&#61338;" d="M870.4 140.79999999999995L870.4 64l-716.8 0 0 76.8zM870.4 704l0-76.8-716.8 0L153.6 704zM806.4 332.79999999999995L806.4 435.2c0 49.4-40.2 89.6-89.6 89.6l-409.6 0c-49.4 0-89.6-40.2-89.6-89.6l0-102.4c0-49.4 40.2-89.6 89.6-89.6L716.8 243.20000000000005c49.4 0 89.6 40.2 89.6 89.6zM307.2 320c-7.10000001 0-12.8 5.7-12.8 12.8L294.4 435.2c0 7.10000001 5.7 12.8 12.8 12.8L716.8 448c7.10000001 0 12.8-5.7 12.8-12.8l0-102.4c0-7.10000001-5.7-12.8-12.8-12.8l-409.6 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chuangkouwindow25" unicode="&#59566;" d="M845.88544 779.56096 178.11456 779.56096c-34.21184 0-62.0544-27.82208-62.0544-62.04416L116.06016 50.4832c0-34.2016 27.84256-62.04416 62.0544-62.04416l667.77088 0c34.21184 0 62.0544 27.84256 62.0544 62.04416L907.93984 717.5168C907.93984 751.73888 880.09728 779.56096 845.88544 779.56096zM803.81952 708.93568c14.6944 0 26.59328-11.90912 26.59328-26.60352 0-14.68416-11.89888-26.59328-26.59328-26.59328s-26.59328 11.90912-26.59328 26.59328C777.22624 697.02656 789.12512 708.93568 803.81952 708.93568zM708.52608 708.93568c14.6944 0 26.59328-11.90912 26.59328-26.60352 0-14.68416-11.89888-26.59328-26.59328-26.59328s-26.59328 11.90912-26.59328 26.59328C681.9328 697.02656 693.83168 708.93568 708.52608 708.93568zM837.02784 59.35104 186.97216 59.35104 186.97216 589.73184l650.04544 0L837.0176 59.35104zM728.96512 273.02912l-0.01024 158.37184 79.18592-79.18592L728.96512 273.02912zM295.04512 273.02912l-79.18592 79.18592 79.17568 79.17568L295.04512 273.02912z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuxing" unicode="&#59567;" d="M1007.7 806.2H877.1c-9 0-16.3-7.3-16.3-16.3v-36.7H204V810.3c0 9-7.3 16.3-16.3 16.3H16.3C7.3 826.6 0 819.3 0 810.3V639c0-9 7.3-16.3 16.3-16.3h171.3c9 0 16.3 7.3 16.3 16.3v57.1h161.9c-1.8-3.7-2.8-7.9-2.8-12.2V27c0-15.8 12.8-28.6 28.6-28.6 1.4 0 2.7 0.1 4.1 0.3 1.3-0.2 2.7-0.3 4.1-0.3H616v-40.8c0-9 7.3-16.3 16.3-16.3h130.5c9 0 16.3 7.3 16.3 16.3V88.2c0 9-7.3 16.3-16.3 16.3H632.4c-9 0-16.3-7.3-16.3-16.3v-32.6H420.2V382H616v-36.7c0-9 7.3-16.3 16.3-16.3h130.5c9 0 16.3 7.3 16.3 16.3V475.8c0 9-7.3 16.3-16.3 16.3H632.4c-9 0-16.3-7.3-16.3-16.3v-36.7H420.2V683.9c0 4.4-1 8.5-2.8 12.2h443.4v-36.7c0-9 7.3-16.3 16.3-16.3h130.5c9 0 16.3 7.3 16.3 16.3V789.9c0.1 9-7.2 16.3-16.2 16.3z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="baobiaoqianru" unicode="&#59568;" d="M585.386667 134.257778a42.666667 42.666667 0 0 0-29.013334 73.955555l133.12 122.311111a43.235556 43.235556 0 0 0 60.302223 0 42.666667 42.666667 0 0 0 0-60.302222l-135.395556-124.586666a40.96 40.96 0 0 0-29.013333-11.377778zM718.506667 11.377778a42.097778 42.097778 0 0 0-29.013334 11.377778l-133.12 122.88a42.666667 42.666667 0 0 0 56.888889 62.577777l132.551111-122.88a42.666667 42.666667 0 0 0-28.444444-73.955555zM884.053333 134.257778h-298.666666a42.666667 42.666667 0 0 0 0 85.333333h298.666666a42.666667 42.666667 0 0 0 0-85.333333zM468.764444-26.168889H139.946667a42.097778 42.097778 0 0 0-42.666667 42.666667V751.502222a42.097778 42.097778 0 0 0 42.666667 42.666667H739.555556a42.666667 42.666667 0 0 0 42.666666-42.666667v-302.648889a42.666667 42.666667 0 1 0-85.333333 0V708.835556h-512v-649.671112h284.444444a42.666667 42.666667 0 1 0 0-85.333333zM341.333333 191.146667a42.097778 42.097778 0 0 0-42.666666 42.666666v341.333334a42.666667 42.666667 0 0 0 85.333333 0v-341.333334a42.666667 42.666667 0 0 0-42.666667-42.666666zM526.791111 361.813333a42.097778 42.097778 0 0 0-42.666667 42.666667v170.666667a42.666667 42.666667 0 1 0 85.333334 0v-170.666667a42.666667 42.666667 0 0 0-42.666667-42.666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ludanjilu" unicode="&#59569;" d="M369.8-3.8999999999999773H188c-31.05 0-56.7 27.45-56.7 61.2V710.7c0 33.75 25.2 61.2 56.7 61.2h604.8c31.05 0 56.7-27.45 56.7-61.2v-166.05c0-17.1 13.05-31.05 28.8-31.05s28.8 13.95 28.8 31.05V710.7C907.1 778.65 855.8 834 792.8 834H188C125 834 73.7 778.65 73.7 710.7V57.75c0-68.4 51.3-123.75 114.3-123.75h182.25c15.75 0 28.8 13.95 28.8 31.05s-13.05 31.05-29.25 31.05zM392.75 356.54999999999995H252.8c-20.7 0.45-37.35 17.1-36.9 38.25a37.66816406 37.66816406 0 0 0 36.9 36.9H392.75c20.7-0.45 37.35-17.1 36.9-38.25a37.66816406 37.66816406 0 0 0-36.9-36.9zM607.4 573H252.8c-20.7 0.45-37.35 17.1-36.9 38.25a37.66816406 37.66816406 0 0 0 36.9 36.9h354.6c20.7-0.45 37.35-17.1 36.9-38.25 0-20.25-16.2-36.45-36.9-36.9z m292.95-576h-328.5c-17.55 0-31.5-13.5-31.5-30.6s13.95-30.6 31.5-30.6h328.5c17.55 0 31.95 13.5 31.95 30.6s-14.4 30.6-31.95 30.6z m39.6 371.25L848.6 459.6c-12.15 11.7-31.5 11.7-43.65 0L552.5 207.14999999999998c-5.4-5.85-8.55-13.5-8.55-21.6v-92.7c0.45-16.65 13.95-29.25 30.6-28.8h91.35c4.5 0 13.05 4.5 21.6 4.5L939.95 321c13.05 12.6 13.05 34.2 0 47.25zM652.4 128.85000000000002h-47.7V177l221.85 221.85 47.7-47.7-221.85-222.3z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="buju" unicode="&#59570;" d="M96 497.792V800h832v-302.208h-832z m744.128 90.24v120.96H183.872v-120.96h656.256zM96 402.752h387.2V-32H96V402.688z m299.392-344.32V311.552H183.872v-253.312h211.52zM928 336.384v-91.072H593.088V336.448H928z m0-302.208H593.088v90.24H928v-90.24z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="iconziti27" unicode="&#59571;" d="M684.192246-57.890087l-68.867484 0 0 34.43323c0 18.96698-15.46625 34.43323-34.43323 34.43323L443.157587 10.976374c-18.96698 0-34.43323-34.43323-34.43323-34.43323l0-34.43323-68.866461 0c-18.96698 0-34.43323-34.432207-34.43323-34.432207l0-34.43323 413.201833 0 0 34.43323C718.625476-73.356336 703.159226-57.890087 684.192246-57.890087zM856.361467 734.084443 167.687652 734.084443c-57.029878 0-103.300714-46.27186-103.300714-103.302761l0-482.068294c0-57.030901 46.270836-103.302761 103.300714-103.302761l688.673815 0c57.030901 0 103.300714 46.27186 103.300714 103.302761L959.662181 630.781682C959.663204 687.812583 913.393391 734.084443 856.361467 734.084443zM512.024048 81.459658c-27.640524 0-50.03558 22.395056-50.03558 50.03558s22.395056 50.036603 50.03558 50.036603c27.641547 0 50.036603-22.396079 50.036603-50.036603S539.665595 81.459658 512.024048 81.459658zM890.795721 252.013079c0-18.965957-15.46932-34.43323-34.43323-34.43323L167.687652 217.579849c-18.964934 0-34.43323 15.467273-34.43323 34.43323L133.254422 630.781682c0 18.96698 15.468296 34.435277 34.43323 34.435277l688.673815 0c18.96391 0 34.43323-15.468296 34.43323-34.435277L890.794697 252.013079z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bianji5" unicode="&#59573;" d="M758.721683 582.794625l-112.011096 112.00905 56.029084 56.005548c18.565844 18.540262 48.625464 18.540262 67.190285 0l44.799322-44.799322c18.563798-18.564821 18.563798-48.671513 0-67.234287L758.721683 582.794625 758.721683 582.794625zM433.312358 257.396557 321.298192 369.40663l304.516482 302.121945L737.824747 559.519526 433.312358 257.396557 433.312358 257.396557zM231.311715 165.539476l68.15117 182.03287 111.074771-111.093191L231.311715 165.539476 231.311715 165.539476zM734.338343 127.260661c15.679098 0 28.375258-12.698207 28.375258-28.378327 0-15.653515-12.69616-28.348652-28.375258-28.348652L232.633826 70.533682c-15.654538 0-28.351722 12.695137-28.351722 28.348652 0 15.680121 12.69616 28.378327 28.351722 28.378327L734.338343 127.260661 734.338343 127.260661z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="mofabang" unicode="&#59574;" d="M680.09082031 510.98209636l137.95642091 137.95806885-50.38110352 50.38110351-137.9564209-137.9564209z m210.46618653 137.95806885q0-12.71392823-8.47540283-21.18768312L276.57891846 22.249796550000042Q268.10351562 13.774393720000035 255.39123535 13.774393720000035t-21.18768311 8.47540283L140.97576904 115.47757976000003q-8.47540283 8.47540283-8.47540283 21.1876831t8.47540283 21.18768311L746.47845459 763.35563151q8.47540283 8.47540283 21.18768311 8.47540284t21.1876831-8.47540284l93.22778321-93.2277832q8.47540283-8.47540283 8.47540282-21.1876831zM254.45025635 738.39908855l46.14257812-14.12622071-46.14257812-14.1262207-14.1262207-46.14257813-14.12622071 46.14257813-46.14257812 14.1262207 46.14257812 14.1262207 14.12622071 46.14257813z m164.79327393-76.27532959l92.28515624-28.25079346-92.28515625-28.25079346-28.25079345-92.28515625-28.25079346 92.28515625-92.28515625 28.25079346 92.28515625 28.25079346 28.25079346 92.28515625z m437.8831787-225.06372071l46.14257813-14.12457275-46.14257813-14.1262207-14.1262207-46.14257813-14.1262207 46.14257813-46.14257813 14.1262207 46.14257813 14.1262207 14.1262207 46.14257813zM555.78930664 738.39908855l46.14257813-14.12622071-46.14257813-14.1262207-14.1262207-46.14257813-14.12622071 46.14257813-46.14257812 14.1262207 46.14257812 14.1262207L541.66308594 784.54166667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="leidatu1" unicode="&#59575;" d="M512 780.37143703l444.06708148-301.95105185-169.54405926-501.22903703H237.35561482L67.81155555 477.81357037l444.18844445 302.55786666m0 55.82696297l-497.34542222-341.02992592 190.0544-563.24551111h614.82477037L1009.34542222 495.65392592 512 836.1984z m0-218.93878518l271.85303703-191.26802964-103.76533333-313.2378074H343.79093333l-103.76533333 312.87371852L512 617.25961482m0 55.82696296L186.74725925 442.9824l124.27567408-375.37564445h401.95413334l124.15431111 375.73973334L512 673.08657778z m0 53.3997037L285.9008 364.94601481999996l452.1984-361.7829926-226.0992 723.32325926z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biaoge1" unicode="&#59576;" d="M888.71063666 597.59881443h-213.59881444v-143.69374776h213.59881444V597.59881443z m-485.45185109-143.69374776h213.59881443V597.59881443h-213.59881443v-143.69374776z m-54.37060779 0V597.59881443H135.28936334v-132.04290332c0-3.88361443 7.76723001-11.65084445 15.53445888-11.65084444 66.02145223-3.88361443 132.04290333 0 198.06435556 0m54.37060779-198.06435556h213.59881443v143.69374777h-213.59881443v-143.69374777z m267.96942222 0h205.83158442c3.88361443 0 11.65084445 7.76723001 11.65084445 11.65084444v135.9265189h-217.48242887v-147.57736334m-535.93884445 3.88361444h213.59881444v143.6937489H135.28936334v-143.6937489z m539.82245888-198.06435556h213.59881444v143.69374891h-213.59881444v-143.69374891z m-54.37060779 143.69374891h-213.59881443v-147.57736335h213.59881443v147.57736335z m-271.85303665 0H135.28936334v-147.57736335h213.59881444v147.57736335zM512 760.71063666h372.82702222c42.71976334 0 58.25422222-15.53445888 58.25422223-58.25422223v-640.79644444c0-42.71976334-15.53445888-58.25422222-58.25422223-58.25422222H131.40574777c-38.83614777 0-54.37060779 15.53445888-54.37060665 54.37060778V706.34003001c0 38.83614777 15.53445888 54.37060779 54.37060665 54.37060665H512"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="downrank" unicode="&#59577;" d="M499.385 503.925zM283.116 29.689l215.929 287.825h-140.769v420.796h-150.299v-420.799h-140.772l215.91-287.822zM572.456 737.908h384.338v-86.369h-384.338v86.369zM572.456 496.079h306.607v86.366h-306.607v-86.366zM572.456 340.619h228.876v86.366h-228.876v-86.366zM572.456 185.156h151.146v86.366h-151.146v-86.366zM572.456 29.689h73.411v86.37h-73.411v-86.37z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="svg-funnel" unicode="&#59578;" d="M220.987 263.38199999999995h582.726l89.639 198.67H129.436zM326.066 0.36099999999999h372.577l51.844 154.375H272.302zM63.754 768.01l33.355-195.299H927.55l31.484 195.299z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yangshi" unicode="&#59579;" d="M488.075 743.152c93.575-0.003 175.286-27.378 238.428-79.522l-13.292-31.306c-26.739-57.475-89.588-193.166-95.684-211.772-27.706-84.616 4.025-168.403 72.191-190.738a106.97 106.97 0 0 1 33.459-5.337c36.295 0 71.986 17.816 99.705 49.344-29.195-57.141-79.058-86.041-148.745-86.041-9.683 0-18.584 0.588-26.323 1.412a102.96 102.96 0 0 1-10.927 0.578c-38.97 0-75.862-20.669-93.989-52.662-68.212-120.391-125.709-171.759-192.258-171.759-51.359 0-112.622 31.191-182.095 92.716C64.642 150.023 26.513 297.948 69.034 444.108c45.628 156.847 169.733 265.95 331.981 291.85 29.901 4.775 59.191 7.194 87.06 7.194m0.002 51.2c-30.075 0-61.778-2.509-95.134-7.834C1.241 723.986-119.622 244.739 134.609 19.723c85.352-75.584 156.172-105.575 216.03-105.575 106.931 0 178.947 95.603 236.805 197.722 9.309 16.431 30.198 26.7 49.442 26.7 1.848 0 3.68-0.094 5.486-0.287a300.198 300.198 0 0 1 31.764-1.703c70.289 0 174.77 25.531 214.664 166.488 13.006 46.025 16.008 96.65 9.105 147.378 0 0-96.952-127.466-106.956-134.769-18.513-24.791-43.498-40-67.772-40-5.9 0-11.758 0.9-17.472 2.778-40.32 13.209-58.03 69.638-39.52 126.166 5.803 17.709 93.448 206.106 93.448 206.106l28.114 66.134c-68.834 69.894-168.716 117.487-299.67 117.491zM232.46 548.896c44.923 0 81.242-36.419 81.242-81.242 0-44.923-36.419-81.242-81.242-81.242s-81.242 36.419-81.242 81.242c0 44.923 36.419 81.242 81.242 81.242z m-46.824-371.793c-44.823 0-81.242 36.419-81.242 81.242 0 44.823 36.319 81.242 81.242 81.242s81.242-36.419 81.242-81.242c0-44.923-36.419-81.242-81.242-81.242z m159.382-162.584c-44.823 0-81.242 36.319-81.242 81.242s36.419 81.242 81.242 81.242c44.923 0 81.242-36.419 81.242-81.242s-36.319-81.242-81.242-81.242z m65.634 512.566c-44.823 0-81.242 36.319-81.242 81.242 0 44.823 36.419 81.242 81.242 81.242s81.242-36.419 81.242-81.242c0-44.924-36.419-81.242-81.242-81.242zM940.426 827.54c-52.627-3.402-96.05-59.031-98.051-61.432-35.819-42.622-30.216-106.255 12.506-142.074 42.622-35.818 106.255-30.216 142.074 12.406 13.007 15.408 20.411 33.718 22.712 52.327 19.41 91.647-20.411 153.579-20.411 153.579s-6.203-11.404-58.83-14.806z m-232.32-513.166c19.81-11.506 52.727 1.901 73.538 30.016l96.95 130.968c-45.123 10.405-85.644 38.42-111.758 60.231-2.401 2.001-4.702 4.002-6.904 5.903L696.9 393.415c-13.507-32.016-8.604-67.535 11.206-79.041zM845.177 612.629c-16.008 13.407-27.414 30.216-34.218 48.525l-28.915-68.035c25.613-25.413 81.642-69.736 132.769-69.036l52.927 71.437c-39.52-17.409-87.245-12.507-122.563 17.109z"  horiz-adv-x="1025" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuaxin" unicode="&#59580;" d="M798.92546458 112.81019533999995l74.6021034-74.51736045-230.72699088-42.31501393 42.37150975 230.47276202 73.8111689-73.75467385c124.74172262 132.82055754 122.87737605 341.88158335-6.66645104 471.25592452a338.68959583 338.68959583 0 0 1-304.59465484 92.6523662L437.07277681 772.05438126a395.04370339 395.04370339 0 0 0 355.2992276-108.07559581c151.49226894-151.40752599 153.38486266-396.23010555 6.55346017-551.16859011zM240.86444171 586.1846952999999C141.40438647 453.44888071 151.43231016 264.27421637 271.82389102 143.96737847999998a337.05123098 337.05123098 0 0 1 279.0022643-96.63528901l6.41222139-56.09987792c-120.92828728-14.12383658-239.5402645 26.94828015-325.41318958 112.7647094C89.31567772 246.33694446000004 79.17476316 471.3296576 200.49851808 626.4941238700001L123.97557228 702.98882178l230.67049585 42.28676601-42.31501394-230.44451411-71.46661248 71.35362163z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuanglie" unicode="&#59581;" d="M197.62688 471.79776c-12.38016 0-7.11168 5.26848-7.11168-7.11168v-165.504c0-12.36992-5.26848-7.1168 7.11168-7.1168h267.91936c12.36992 0 7.10144-5.25312 7.10144 7.1168V464.68608c0 12.38016 5.26848 7.11168-7.10144 7.11168H197.62688zM550.912 471.79776c-12.38016 0-7.1168 5.26848-7.1168-7.11168v-165.504c0-12.36992-5.26336-7.1168 7.1168-7.1168h267.91936c12.3648 0 7.10144-5.25312 7.10144 7.1168V464.68608c0 12.38016 5.26336 7.11168-7.10144 7.11168H550.912zM889.03168 596.28032H128.05632c-47.22688 0-70.16448-22.93248-70.16448-70.15936v-288.37888c0-47.25248 22.93248-70.14912 70.16448-70.14912h760.97024c47.232 0 70.144 22.92736 70.144 70.14912V526.12096c0.0256 47.22688-22.912 70.15936-70.13888 70.15936z m10.4704-341.6064c0-25.40032-5.22752-30.62784-30.61248-30.62784H148.21888c-25.3952 0-30.62784 5.22752-30.62784 30.62784V509.17888c0 25.40032 5.23264 30.62784 30.62784 30.62784h720.64c25.40032 0 30.62784-5.22752 30.62784-30.62784v-254.50496h0.01536z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="copy" unicode="&#59582;" d="M761.99999961 100.66666698999995v66.66666592h72.22222266a22.22222256 22.22222256 0 0 1 22.22222255 22.22222256V745.11111152a22.22222256 22.22222256 0 0 1-22.22222255 22.22222168H345.33333301a22.22222256 22.22222256 0 0 1-22.22222168-22.22222168v-77.77777852H256.44444453V767.3333332c0 36.81666651 29.85000029 66.6666668 66.6666668 66.6666668h533.33333349c36.81666651 0 66.6666668-29.85000029 66.66666593-66.6666668v-600.00000029c0-36.81666651-29.85000029-66.6666668-66.66666593-66.66666591h-94.44444521zM167.55555518 667.3333330099999h533.33333349c36.81666651 0 66.6666668-29.85000029 66.6666668-66.66666592v-600.00000029c0-36.81666651-29.85000029-66.6666668-66.6666668-66.6666668H167.55555518c-36.81666651 0-66.6666668 29.85000029-66.66666592 66.6666668V600.6666670899999c0 36.81666651 29.85000029 66.6666668 66.66666592 66.66666591z m22.22222255-66.66666592a22.22222256 22.22222256 0 0 1-22.22222255-22.22222256v-555.55555606a22.22222256 22.22222256 0 0 1 22.22222255-22.22222167h488.88888926a22.22222256 22.22222256 0 0 1 22.22222168 22.22222167V578.44444453a22.22222256 22.22222256 0 0 1-22.22222168 22.22222256H189.77777773zM267.55555537 434.0000001l333.3333331 0 1e-8-66.6666668-333.33333311 0 0 66.6666668ZM267.55555537 233.99999971l333.3333331 0 1e-8-66.6666668-333.33333311 0 0 66.6666668Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhibiaotu-heise" unicode="&#59583;" d="M33.44 801.86666667h841.44V621.86666667H33.44zM33.44 523.94666667h600.96V391.46666667H33.44zM86.24 217.70666667h-24c-18.24 0.96-28.32 10.56-29.28 29.28 0.96 17.28 10.56 26.4 29.28 27.36h58.56c17.28-0.96 26.4-11.04 27.36-29.28v-236.64c-0.96-19.68-11.52-29.28-30.72-29.28-19.68 0-29.76 9.6-30.72 29.28v209.28zM222.56-59.73333333000005c-5.28-7.68-12.96-12-22.56-12.96-16.32 0.96-24.96 10.08-25.92 27.36 0 2.4 0.48 5.76 1.44 11.52 0.96 2.4 1.44 3.84 1.44 4.8l34.08 58.56c5.28 8.64 13.44 13.44 24.48 14.4 16.32-2.4 25.44-11.52 27.36-27.36 0-3.36-0.96-7.2-3.36-11.52-0.96-2.4-1.44-3.84-1.44-4.8L222.56-59.73333333000005zM472.64 34.34666666999999c21.6 0 32.64-9.12 32.64-27.36 0-17.28-9.6-26.4-29.28-27.36H336.32c-20.64 0-30.72 9.12-30.72 27.36 0 6.72 2.88 13.44 8.16 21.12 5.28 6.72 13.92 16.32 25.92 29.28 35.52 38.88 61.44 70.08 77.76 94.08 9.6 13.92 14.4 26.88 14.4 38.88-2.4 19.68-12 30.24-29.28 32.64-17.28 0-29.76-12-37.44-35.52-6.72-20.64-15.84-30.72-27.36-30.72-19.68 0.96-29.76 10.56-30.72 29.28 6.72 56.16 38.88 87.36 97.44 94.08 58.56-3.36 89.28-31.68 92.64-85.92 0-29.28-24.48-72-72.96-128.16-12-13.92-20.64-24.48-25.92-30.72h74.4zM723.68 202.82666667c0-26.88-11.52-48-34.08-63.36 32.64-16.32 48.96-40.32 50.4-72.96-5.28-55.2-39.84-84.96-103.68-89.28-58.56 3.36-91.68 28.32-100.8 74.4 1.92 16.32 12.96 25.44 32.64 27.36 7.68 0 15.84-6.72 24.48-19.68 12-19.68 26.4-29.28 43.68-29.28 24 1.92 36.96 15.36 38.88 38.88-3.36 25.92-15.84 37.92-37.44 35.52-21.6 4.32-32.64 13.92-32.64 29.28 0 13.92 9.6 24 29.28 29.28 19.68 4.32 29.28 14.4 29.28 30.72-0.96 17.28-11.04 26.4-29.28 27.36-15.36 0-27.36-7.68-37.44-22.56-8.64-12-17.28-17.76-25.92-17.76-16.32 0.96-24.96 11.52-25.92 30.72 7.68 38.88 37.44 60.96 89.28 66.72 53.28-2.4 83.04-27.84 89.28-75.36zM795.2 43.94666667000001c-17.28 0.96-26.88 9.12-29.28 24.48 0 6.72 1.92 12.96 6.72 19.68l92.64 167.04c8.64 17.28 22.56 25.44 42.24 24.48 31.2-2.4 47.52-19.68 48.48-51.84v-128.16h6.72c18.24-0.96 28.32-10.08 29.28-27.36-0.96-17.28-11.04-26.4-29.28-27.36h-6.72v-35.52c0-19.68-10.08-29.28-30.72-29.28-20.64-0.96-30.24 8.64-29.28 29.28v35.52h-100.8z m100.8 170.4h-1.44l-55.2-115.2H896v115.2z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jia2" unicode="&#59584;" d="M679.556 356.13c15.472 0 27.979 12.507 27.979 27.979 0 15.444-12.507 27.979-27.979 27.979H343.805c-15.444 0-27.979-12.535-27.979-27.979 0-15.472 12.535-27.979 27.979-27.979h335.751zM847.431 831.777H175.929c-61.806 0-111.917-50.111-111.917-111.917v-671.502c0-61.806 50.111-111.917 111.917-111.917h671.502c61.806 0 111.917 50.111 111.917 111.917V719.86c-0.001 61.806-50.112 111.917-111.917 111.917z m55.958-783.418c0-30.889-25.069-55.958-55.958-55.958H175.929c-30.889 0-55.958 25.069-55.958 55.958V719.86c0 30.889 25.069 55.958 55.958 55.958h671.502c30.889 0 55.958-25.069 55.958-55.958v-671.501zM485.021 216.933c0-15.472 12.507-27.979 27.979-27.979 15.444 0 27.979 12.507 27.979 27.979V552.684c0 15.444-12.535 27.979-27.979 27.979-15.472 0-27.979-12.535-27.979-27.979v-335.751z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dayin" unicode="&#59585;" d="M640.57142832 416.14285752A96.42857168 96.42857168 0 1 1 737 512.57142832 96.42857168 96.42857168 0 0 1 640.57142832 416.14285752z m128.5714292 0a32.14285752 32.14285752 0 1 0-32.14285752 32.14285664 32.14285752 32.14285752 0 0 0 32.14285752-32.14285664zM904.78571416 641.14285752H833.42857168V769.71428584a64.28571416 64.28571416 0 0 1-64.28571416 64.28571416H254.85714248a64.28571416 64.28571416 0 0 1-64.28571416-64.28571416v-128.57142832H119.21428584a57.21428584 57.21428584 0 0 1-57.21428584-57.21428584v-464.78571416a57.21428584 57.21428584 0 0 1 57.21428584-56.5714292H254.85714248v-79.71428584a48.85714248 48.85714248 0 0 1 48.85714336-48.85714248h417.21428583a48.85714248 48.85714248 0 0 1 48.85714249 48.85714248V62.571428319999995h135.64285751a57.21428584 57.21428584 0 0 1 57.21428585 57.21428584V583.92857168a57.21428584 57.21428584 0 0 1-57.85714336 57.21428584zM254.85714248 769.71428584h514.28571504v-128.57142832H254.85714248z m450-642.85714336v-128.57142832H319.14285752v192.85714336h385.71428496z m192.85714336 0h-128.57142832V206.57142832a48.85714248 48.85714248 0 0 1-48.85714336 48.85714336H303.71428584a48.85714248 48.85714248 0 0 1-48.85714336-48.85714336V126.85714248H126.28571416V576.85714248h771.42857168z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhexiantu2" unicode="&#59586;" d="M90.112-17.408h26.402816l835.227648-0.004096c6.144 0 12.394496 0.700416 18.403328-0.212992 16.4864-2.506752 25.27232-12.558336 25.038848-29.261824-0.22528-15.880192-9.35936-24.940544-24.592384-27.631616-5.296128-0.937984-10.891264-0.233472-16.347136-0.233472-293.425152-0.004096-586.842112-0.008192-880.267264 0-33.54624 0-41.201664 7.417856-41.20576 40.001536-0.008192 279.093248-0.016384 558.186496 0.016384 837.279744 0.004096 24.178688 9.68704 36.384768 28.758016 36.032512 16.826368-0.3072 26.345472-9.428992 28.389376-25.935872 0.749568-6.053888 0.176128-12.271616 0.176128-18.41152V-17.408zM686.968832 305.455104c-56.64768 0.978944-100.130816 23.109632-140.92288 51.396608-55.640064 38.58432-112.98816 39.419904-171.614208 8.843264-40.16128-20.942848-72.818688-51.859456-96.636928-89.534464-29.372416-46.460928-54.08768-95.862784-80.740352-144.039936-1.6384-2.961408-2.49856-6.336512-3.907584-9.437184-7.9872-17.620992-22.114304-24.961024-37.187584-19.37408-15.568896 5.767168-23.191552 21.01248-16.32256 38.6048 37.134336 95.141888 85.762048 183.0912 167.452672 247.78752 71.294976 56.46336 150.269952 71.14752 235.9296 35.49184 10.555392-4.395008 19.836928-11.759616 29.966336-17.272832 23.8592-12.976128 46.956544-27.99616 72.044544-37.924864 37.965824-15.020032 76.034048-9.363456 104.271872 20.119552 27.521024 28.73344 54.710272 60.04736 72.802304 95.010816 28.987392 56.0128 50.388992 115.953664 74.866688 174.2848 2.629632 6.258688 4.100096 13.0048 6.647808 19.304448 7.08608 17.518592 21.868544 25.53856 37.154816 19.398656 16.77312-6.73792 22.274048-20.647936 16.990208-36.790272-30.998528-94.76096-64.974848-188.338176-126.226432-268.783616-30.26944-39.755776-66.31424-72.650752-117.424128-83.505152-10.592256-2.2528-21.536768-2.8672-27.144192-3.579904z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tongjitu" unicode="&#59587;" d="M900.7-12.5H271c-105.9 0-191.7 85.8-191.7 191.7V727.8c0 26.6 21.5 48.1 48.1 48.1s48.1-21.5 48.1-48.1v-548.6c0-52.8 42.8-95.6 95.6-95.6h629.7c26.6 0 48.1-21.5 48.1-48.1-0.1-26.5-21.7-48-48.2-48zM386.9 526.2H285.5c-20.9 0-37.9-17-37.9-37.9V213c0-20.9 17-37.9 37.9-37.9h101.4c20.9 0 37.9 17 37.9 37.9V488.2c0 21-16.9 38-37.9 38zM631 778.1h-77.8c-27.5 0-49.7-22.3-49.7-49.7v-503.6c0-27.4 22.3-49.7 49.7-49.7H631c27.4 0 49.7 22.3 49.7 49.7V728.4c0 27.5-22.2 49.7-49.7 49.7zM894.1 617.4H802c-23.5 0-42.6-19.1-42.6-42.6v-357.1c0-23.5 19.1-42.6 42.6-42.6h92.1c23.5 0 42.6 19.1 42.6 42.6V574.8c-0.1 23.6-19.1 42.6-42.6 42.6z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zuoduiqi" unicode="&#59588;" d="M139.14285752 724.71428584h488.57142832c25.71428584 0 45 19.28571416 45 45 0 25.71428584-19.28571416 45-45 45H139.14285752C113.42857168 814.71428584 94.14285752 795.42857168 94.14285752 769.71428584c0-25.71428584 19.28571416-45 45-45zM139.14285752 467.57142832h745.71428496c25.71428584 0 45 19.28571416 45 45 0 25.71428584-19.28571416 45-45 45H139.14285752c-25.71428584 0-45-19.28571416-45-45 0-25.71428584 19.28571416-45 45-45zM139.14285752 210.42857168h488.57142832c25.71428584 0 45 19.28571416 45 45 0 25.71428584-19.28571416 45-45 45H139.14285752c-25.71428584 0-45-19.28571416-45-45 0-25.71428584 19.28571416-45 45-45zM884.85714248 43.28571416H139.14285752c-25.71428584 0-45-19.28571416-45-45 0-25.71428584 19.28571416-45 45-45h745.71428496c25.71428584 0 45 19.28571416 45 45 0 25.71428584-19.28571416 45-45 45z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiaochabiaotubiao" unicode="&#59589;" d="M861.49999971 834H162.50000029C107 834 62 789 62 733.49999971v-698.99999942C62-21 107-66 162.50000029-66h698.99999942c55.50000029 0 100.50000029 45 100.50000029 100.50000029V733.49999971C962 789 917 834 861.49999971 834zM134.37500029 472.72499971h197.24999942v-207.74999971H134.37500029v207.74999971z m269.55 0h485.69999942v-207.74999971H404v207.74999971z m485.69999942 260.775v-188.39999971H404V761.62499971h457.57500029c15.525 0 28.125-12.6 28.125-28.125zM162.50000029 761.62499971h169.12499942v-216.52499971H134.37500029V733.49999971c0 15.525 12.6 28.125 28.125 28.125zM134.37500029 34.50000029V192.67500028999996h197.24999942v-186.3H162.50000029a28.125 28.125 0 0 0-28.125 28.125z m727.12499942-28.125h-457.49999971V192.67500028999996h485.62499971v-158.25000058a28.125 28.125 0 0 0-28.125-28.04999942z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="moban" unicode="&#59590;" d="M900.73333344-48H554.33333375c-23.93333344 0-43.26666656 20.4-43.2666675 45.46666687V406.73333344c0 25.13333344 19.39999969 45.46666687 43.2666675 45.46666687h346.39999969c23.93333344 0 43.26666656-20.4 43.26666656-45.46666687v-409.26666657c0-25.06666687-19.39999969-45.46666687-43.26666656-45.46666687z m0 591.13333313H554.33333375c-23.93333344 0-43.26666656 20.4-43.2666675 45.46666687V770.53333312c0 25.13333344 19.39999969 45.46666687 43.2666675 45.46666688h346.39999969c23.93333344 0 43.26666656-20.4 43.26666656-45.46666688V588.6666665600001c0-25.13333344-19.39999969-45.53333344-43.26666656-45.53333343zM381.13333344-48H121.33333344c-23.93333344 0-43.26666656 20.4-43.26666657 45.46666687V179.33333344000005c0 25.13333344 19.39999969 45.46666687 43.26666657 45.46666687h259.8c23.93333344 0 43.26666656-20.4 43.26666656-45.46666687v-181.86666657c0-25.06666687-19.39999969-45.46666687-43.26666656-45.46666687z m0 363.79999969H121.33333344c-23.93333344 0-43.26666656 20.4-43.26666657 45.46666687V770.53333312C78.00000031 795.6 97.4 816 121.33333344 816h259.8c23.93333344 0 43.26666656-20.4 43.26666656-45.46666687v-409.26666657c0-25.13333344-19.39999969-45.46666687-43.26666656-45.46666687z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yibiaopan1" unicode="&#59591;" d="M444.536 277.556l74.316-65.84 61.025 65.84-64.994 427.641h-1.248zM512.207 832.132c-247.516 0-448.167-200.651-448.167-448.167 0-116.262 44.273-222.182 116.876-301.827l63.794 40.923c-61.26 62.797-100.586 147.086-105.615 240.49h57.454v36.585h-57.658c8.21 192.797 162.505 347.77 355.024 357.05v-51.99H530.5v51.99c192.518-9.281 346.813-164.253 355.023-357.05h-57.819v-36.585h57.615c-4.974-92.381-43.497-175.845-103.61-238.419l61.789-42.994c72.603 79.645 116.876 185.565 116.876 301.827-0.001 247.516-200.652 448.167-448.167 448.167z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fangda1" unicode="&#59592;" d="M811.99999971 834h-599.99999942C127.99999971 834 62 768.00000029 62 683.99999971v-599.99999942C62-2.900000026784255e-7 127.99999971-66 212.00000029-66h599.99999942c83.99999971 0 150.00000029 65.99999971 150.00000029 150.00000029v599.99999942C962 768.00000029 896.00000029 834 811.99999971 834zM901.99999971 84.00000029c0-47.99999971-42.00000029-90-90-90h-599.99999942c-47.99999971 0-90 42.00000029-90 90v599.99999942C122.00000029 732.00000029 163.99999971 773.99999971 212.00000029 773.99999971h599.99999942c47.99999971 0 90-42.00000029 90-90v-599.99999942zM415.99999971 330L242 156.00000029V264.00000029c0 18-11.99999971 29.99999971-29.99999971 29.99999971s-29.99999971-11.99999971-30.00000058-29.99999971v-180c0-18 11.99999971-29.99999971 30.00000058-30.00000058h180c18 0 29.99999971 11.99999971 29.99999971 30.00000058s-11.99999971 29.99999971-29.99999971 29.99999971H284.00000029l173.99999971 173.99999971c11.99999971 11.99999971 11.99999971 29.99999971 0 42.00000029-11.99999971 11.99999971-29.99999971 11.99999971-42.00000029 0zM811.99999971 714.00000029h-180c-18 0-29.99999971-11.99999971-29.99999971-30.00000058s11.99999971-29.99999971 29.99999971-29.99999971h108L566 480.00000029c-11.99999971-11.99999971-11.99999971-29.99999971 0-42.00000029 11.99999971-11.99999971 29.99999971-11.99999971 42.00000029 0L782 611.99999971v-108c0-18 11.99999971-29.99999971 29.99999971-29.99999971s29.99999971 11.99999971 30.00000058 29.99999971v180c0 18-11.99999971 29.99999971-30.00000058 30.00000058z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wenben" unicode="&#59593;" d="M66.36469414 718.55383154C66.36469414 779.87778896 116.12221104 829.63530586 177.44616846 829.63530586h669.10766308c61.32395742 0 111.08147432-49.7575169 111.08147432-111.08147432v-669.10766308c0-61.32395742-49.7575169-111.08147432-111.08147432-111.08147432H177.44616846C116.12221104-61.63530586000002 66.36469414-11.877788959999975 66.36469414 49.44616845999997V718.55383154z m55.64985469-56.30455898v-556.28031006c0-61.76042666 49.97575195-111.73617862 111.73617861-111.73617862h556.28031006c29.67992227 0 58.05043682 11.78467471 79.00096992 32.7352087s32.73520869 49.32104766 32.7352087 79.00096992V662.24927256c0 29.67992227-11.78467471 58.05043682-32.7352087 79.00096992s-49.32104766 32.73520869-79.00096992 32.73520869H233.75072744c-29.67992227 0-58.05043682-11.78467471-79.00096992-32.73520869s-32.73520869-49.32104766-32.73520869-79.00096992z m354.41319111-403.07953447V490.93501435H387.16973808c0-21.38700323-14.18525683-35.57226006-35.57226006-35.57226005-21.38700323 0-35.57226006 14.18525683-35.57226005 35.57226005v35.57226006c0 21.38700323 14.18525683 35.57226006 35.57226005 35.57226007 2.18234708 0 4.36469414-0.21823506 6.5470421-0.43646925 1.74587783 0.21823506 3.49175566 0.43646924 5.45586767 0.43646925h297.01745859c1.74587783 0 3.70999072-0.21823506 5.45586856-0.43646925 2.18234708 0.21823506 4.36469414 0.43646924 6.54704121 0.43646925 21.38700323 0 35.57226006-14.18525683 35.57226007-35.57226007v-35.57226006c0-21.38700323-14.18525683-35.57226006-35.57226007-35.57226005-21.38700323 0-35.57226006 14.18525683-35.57225917 35.57226005h-89.03976768v-231.76527627c21.38700323 0 35.57226006-14.18525683 35.57226005-35.57226006 0-21.38700323-14.18525683-35.57226006-35.57226005-35.57226005H476.645975c-21.38700323 0-35.57226006 14.18525683-35.57226006 35.57226005-0.43646924 21.38700323 13.96702266 35.57226006 35.354025 35.57226007z m0 0M846.55383154-66H177.44616846C113.72162979-65.78176494000002 62-14.060136039999975 62 49.44616845999997V718.55383154C62 782.27837021 113.72162979 834 177.44616846 834h669.10766308c63.72453955 0 115.44616846-51.72162979 115.44616846-115.44616846v-669.10766308c0-63.5063045-51.93986396-115.22793428-115.44616846-115.44616846zM177.44616846 825.27061084A106.71678018 106.71678018 0 0 1 70.72938916 718.55383154v-669.10766308c0-58.70514023 47.79340488-106.71678018 106.7167793-106.7167793h669.10766308c58.70514023 0 106.71678018 47.79340488 106.7167793 106.7167793V718.55383154c0 58.92337529-47.79340488 106.71678018-106.7167793 106.7167793H177.44616846z m612.8031041-835.40252198H233.75072744a116.31910781 116.31910781 0 0 0-116.10087275 116.10087364V662.24927256c0 30.98933086 12.00290977 60.23278388 34.0446164 82.05625635 21.82347247 21.82347247 51.06692549 34.04461729 82.05625635 34.0446164h556.28031006c30.98933086 0 60.01454883-12.00290977 82.05625635-34.0446164 21.82347247-22.04170752 34.04461729-51.06692549 34.04461728-82.05625635v-556.28031006c0-30.98933086-12.00290977-60.23278388-34.04461728-82.05625635-21.82347247-22.04170752-50.84869043-34.04461729-81.83802129-34.04461728zM233.75072744 769.62075615c-28.58874873 0-55.64985469-11.12997129-75.9456835-31.42580009-20.29582969-20.29582969-31.4258001-47.35693477-31.42580009-75.9456835v-556.28031006a107.58971865 107.58971865 0 0 1 107.37148359-107.37148447h556.28031006c28.58874873 0 55.64985469 11.12997129 75.94568437 31.4258001 20.29582969 20.29582969 31.4258001 47.35693477 31.4258001 75.94568437V662.24927256c0 28.58874873-11.12997129 55.64985469-31.4258001 75.9456835a106.43307451 106.43307451 0 0 1-75.94568437 31.42580009H233.75072744zM547.57226006 183.66052383h-71.3627543c-24.00581953 0-39.9369542 16.14936972-39.93695508 39.9369542 0 22.47817675 14.18525683 37.97284219 35.57226006 39.71872002V486.57032021h-80.52861269c-1.74587783-21.38700323-17.45877832-35.57226006-39.71872002-35.57226005-24.00581953 0-39.9369542 16.14936972-39.9369542 39.93695419v35.57226007c0 24.00581953 16.14936972 39.9369542 39.9369542 39.9369542 2.18234708-0.21823506 4.36469414-0.21823506 6.32880703-0.43646925 1.74587783 0.21823506 3.9282249 0.43646924 5.45586856 0.43646925h297.01745859c1.74587783 0 3.70999072-0.21823506 5.45586767-0.43646925 2.18234708 0.21823506 4.36469414 0.21823506 6.32880703 0.43646925 24.00581953 0 39.9369542-16.14936972 39.93695421-39.9369542v-35.57226007c0-24.00581953-16.14936972-39.9369542-39.93695421-39.93695419-22.47817675 0-37.97284219 14.18525683-39.71871914 35.57226005h-80.52861357v-223.25412216c21.38700323-1.74587783 35.57226006-17.45877832 35.57226005-39.71872003 0.21823506-24.00581953-15.93113467-39.9369542-39.93695419-39.93695419z m-71.14452012 71.14452011c-18.98642109 0-31.20756503-12.22114482-31.20756504-31.20756591 0-18.98642109 12.22114482-31.20756503 31.20756504-31.20756504h71.3627543c18.98642109 0 31.20756503 12.22114482 31.20756592 31.20756504 0 18.98642109-12.22114482 31.20756503-31.20756592 31.20756591h-4.36469414V495.29970938h97.76915595v-4.36469503c0-18.98642109 12.22114482-31.20756503 31.20756593-31.20756503 18.98642109 0 31.20756503 12.22114482 31.20756503 31.20756503v35.57226006c0 18.98642109-12.22114482 31.20756503-31.20756503 31.20756592-1.96411289 0-3.9282249-0.21823506-5.8923378-0.43647012h-1.3094086c-1.52764278 0.21823506-3.05528643 0.43646924-4.80116337 0.43647012H363.38215362c-1.52764278 0-3.05528643-0.21823506-4.80116427-0.43647012h-1.30940859c-1.96411289 0.21823506-3.70999072 0.21823506-5.89233691 0.43647012-18.98642109 0-31.20756503-12.22114482-31.20756592-31.20756592v-35.57226006c0-18.98642109 12.22114482-31.20756503 31.20756592-31.20756503s31.20756503 12.22114482 31.20756503 31.20756503v4.36469503h97.76915596v-240.49466543h-3.9282249z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="mingxibiao" unicode="&#59594;" d="M880 784H144c-17.7 0-32-14.3-32-32v-736c0-17.7 14.3-32 32-32h736c17.7 0 32 14.3 32 32V752c0 17.7-14.3 32-32 32z m-40-728H184V712h656v-656zM493.6 496h220.8c5.28 0 9.6 3.6 9.6 8v48c0 4.4-4.32 8-9.6 8H493.6c-5.28 0-9.6-3.6-9.6-8v-48c0-4.4 4.32-8 9.6-8z m0-144h220.8c5.28 0 9.6 3.6 9.6 8v48c0 4.4-4.32 8-9.6 8H493.6c-5.28 0-9.6-3.6-9.6-8v-48c0-4.4 4.32-8 9.6-8z m0-144h220.8c5.28 0 9.6 3.6 9.6 8v48c0 4.4-4.32 8-9.6 8H493.6c-5.28 0-9.6-3.6-9.6-8v-48c0-4.4 4.32-8 9.6-8zM320 528c0-22.091 17.909-40 40-40s40 17.909 40 40-17.909 40-40 40-40-17.909-40-40z m0-144c0-22.091 17.909-40 40-40s40 17.909 40 40-17.909 40-40 40-40-17.909-40-40z m0-144c0-22.091 17.909-40 40-40s40 17.909 40 40-17.909 40-40 40-40-17.909-40-40z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="layout" unicode="&#59595;" d="M831.20303681 1.484229379999988H193.09686619c-35.09529159 0-63.65247632 28.55165146-63.65247632 63.64694306v638.12941034c0 35.09529159 28.55718473 63.65247632 63.65247632 63.65247632h638.10727727c35.09529159 0 63.6458364-28.55718473 63.64583641-63.65247632v-638.1349436c0.00553327-35.09086498-28.54501155-63.6414098-63.64694306-63.6414098zM193.09686619 709.09596487a5.83648876 5.83648876 0 0 1-5.82984883-5.82984883v-638.1349436a5.83648876 5.83648876 0 0 1 5.82984883-5.82542221h638.10727727a5.82984884 5.82984884 0 0 1 5.82431558 5.82542221v638.12941034a5.83648876 5.83648876 0 0 1-5.82542223 5.82984883H193.09686619zM165.26564593 558.60552191H865.94087943v-57.82262748h-700.67744681zM377.95220966 550.58781978h57.82262749v-500.41527807h-57.82262749z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shijianzhou" unicode="&#59596;" d="M269.98283378 318.61934458999997V465.39085748c40.96242725 17.06848711 68.26423941 54.61333333 68.2642394 98.9836326s-27.31152118 81.92485452-68.2642394 95.57576059V837.44115675c0 20.47635911-13.65090608 34.13697422-34.13697423 34.13697422s-34.13697422-13.65090608-34.13697422-34.13697422v-177.49090608c-40.96242725-13.65090608-68.26423941-51.1957523-68.26423941-95.57576059s27.31152118-81.92485452 68.26423941-95.5757606v-146.77151289c-40.96242725-13.65090608-68.26423941-51.1957523-68.26423941-95.57576059s27.31152118-81.92485452 68.26423941-95.57576059v-180.90848711c0-20.47635911 13.65090608-34.13697422 34.13697422-34.13697422s34.13697422 13.65090608 34.13697423 34.13697422V127.46782341000005c40.96242725 13.65090608 68.26423941 51.1957523 68.2642394 95.57576059s-27.30181215 81.91514548-68.2642394 95.57576059z m-34.13697423 279.89211971c20.47635911 0 34.13697422-13.65090608 34.13697423-34.13697422s-13.65090608-34.13697422-34.13697423-34.13697423-34.13697422 13.65090608-34.13697422 34.13697423 13.66061511 34.13697422 34.13697422 34.13697422z m0-409.60485452c-20.47635911 0-34.13697422 13.65090608-34.13697422 34.13697422s13.65090608 34.13697422 34.13697422 34.13697422 34.13697422-13.65090608 34.13697423-34.13697422-13.65090608-34.13697422-34.13697423-34.13697422z m578.19257363-9.70903703H484.88265955c-20.57344948 0-41.14689897-13.65090608-41.14689896-34.13697423s16.45681778-34.13697422 41.14689896-34.13697422H814.04814222c20.57344948 0 41.14689897 13.65090608 41.14689896 34.13697422s-16.45681778 34.13697422-41.156608 34.13697423zM896.35164918 657.06666667h-411.46898963c-20.57344948 0-41.14689897-13.65090608-41.14689896-34.13697422s16.45681778-34.13697422 41.14689896-34.13697423h411.46898963c20.56374045 0 41.13718992 13.65090608 41.13718993 34.13697423S921.03202133 657.06666667 896.35164918 657.06666667z m-82.313216-204.80242726c20.57344948 0 41.14689897 13.65090608 41.14689897 34.13697422s-16.44710875 34.13697422-41.14689897 34.13697422H484.88265955c-20.57344948 0-41.14689897-13.65090608-41.14689896-34.13697422s16.45681778-34.13697422 41.14689896-34.13697422h329.15577363z m82.313216-136.52847882h-411.46898963c-20.57344948 0-41.14689897-13.65090608-41.14689896-34.13697422s16.45681778-34.13697422 41.14689896-34.13697422h411.46898963c20.56374045 0 41.13718992 13.65090608 41.13718993 34.13697422s-16.45681778 34.13697422-41.13718993 34.13697422z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuipingfenbu" unicode="&#59597;" d="M755.2 742.4H832v-716.8h-76.8zM192 742.4h76.8v-716.8H192zM563.2 678.4H460.8c-49.4 0-89.6-40.2-89.6-89.6v-409.6c0-49.4 40.2-89.6 89.6-89.6h102.4c49.4 0 89.6 40.2 89.6 89.6V588.8c0 49.4-40.2 89.6-89.6 89.6zM576 179.2c0-7.1-5.7-12.8-12.8-12.8H460.8c-7.1 0-12.8 5.7-12.8 12.8V588.8c0 7.1 5.7 12.8 12.8 12.8h102.4c7.1 0 12.8-5.7 12.8-12.8v-409.6z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="kapian" unicode="&#59598;" d="M928 736H96a32 32 0 0 1-32-32v-672a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32V704a32 32 0 0 1-32 32z m-32-672H128V672h768v-608zM230.592 447.904H544a32 32 0 1 1 0 64H230.592a32 32 0 0 1 0-64z m0-192H544a32 32 0 1 1 0 64H230.592a32 32 0 1 1 0-64zM768 192a32 32 0 0 1 32 32V545.984a32 32 0 1 1-64 0V224a32 32 0 0 1 32-32z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="rili1" unicode="&#59599;" d="M283.468 640.68c23.35 0 42.279 18.93 42.279 42.279V795.721c0 23.35-18.93 42.279-42.28 42.279s-42.278-18.929-42.278-42.279V682.96c0-23.268 18.955-42.279 42.279-42.279z m644.226 68.498h-96.645l2.043-26.219c0-54.488-44.172-98.66-98.66-98.66-54.489 0-98.66 44.172-98.66 98.66l2.043 26.219H380.113l1.986-26.219a98.631 98.631 0 1 0-197.263 0l1.986 26.218H90.234c-23.381 0-32.234-8.91-32.234-32.234v-698.592c0-23.324 18.954-42.279 42.279-42.279h817.37c23.35 0 42.279 18.93 42.279 42.279V676.943c0 23.325-8.91 32.234-32.234 32.234z m-64.411-676.46H154.644V483.652h708.638v-450.936zM734.46 640.68c23.35 0 42.279 18.93 42.279 42.279V795.721c0 23.35-18.93 42.279-42.279 42.279-23.35 0-42.279-18.929-42.279-42.279V682.96c0-23.268 18.898-42.279 42.279-42.279zM315.645 290.42a64.468 64.468 0 1 1 0 128.879c-34.845-1.035-62.555-29.58-62.555-64.44s27.71-63.406 62.555-64.44z m193.29 0a64.468 64.468 0 1 1 0 128.879c-34.844-1.035-62.555-29.58-62.555-64.44s27.71-63.406 62.555-64.44z m193.291 0a64.468 64.468 0 1 1 0 128.879c-34.845-1.035-62.555-29.58-62.555-64.44s27.71-63.406 62.555-64.44zM315.702 129.362a64.468 64.468 0 1 1-0.057 128.879c-34.845-1.034-62.555-29.58-62.555-64.44s27.71-63.405 62.555-64.44h0.057z m193.233 0a64.468 64.468 0 1 1 0 128.879c-34.844-1.034-62.555-29.58-62.555-64.44s27.71-63.405 62.555-64.44z m193.291 0a64.468 64.468 0 1 1 0 128.879c-34.845-1.034-62.555-29.58-62.555-64.44s27.71-63.405 62.555-64.44z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jian" unicode="&#59600;" d="M679.556 356.13c15.472 0 27.979 12.507 27.979 27.979 0 15.444-12.507 27.979-27.979 27.979H343.805c-15.444 0-27.979-12.535-27.979-27.979 0-15.472 12.535-27.979 27.979-27.979h335.751zM847.431 831.777H175.929c-61.806 0-111.917-50.111-111.917-111.917v-671.502c0-61.806 50.111-111.917 111.917-111.917h671.502c61.806 0 111.917 50.111 111.917 111.917V719.86c-0.001 61.806-50.112 111.917-111.917 111.917z m55.958-783.418c0-30.889-25.069-55.958-55.958-55.958H175.929c-30.889 0-55.958 25.069-55.958 55.958V719.86c0 30.889 25.069 55.958 55.958 55.958h671.502c30.889 0 55.958-25.069 55.958-55.958v-671.501z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="mianjitu" unicode="&#59691;" d="M257.536 238.08L403.968 424.96l208.896-107.008 238.592 241.664v-435.2h-593.92v113.664zM896 0H129.024V768h71.68v-696.32H896z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ic_daohang_shu" unicode="&#59601;" d="M459.265625 753.140625v-158.203125H195.59375V753.140625h263.671875m0 52.734375H195.59375c-26.3671875 0-52.734375-21.09375-52.734375-52.734375v-158.203125c0-31.640625 26.3671875-52.734375 52.734375-52.734375h263.671875c31.640625 0 52.734375 21.09375 52.734375 52.734375V753.140625c0 31.640625-21.09375 52.734375-52.734375 52.734375zM828.40625 436.734375v-105.46875h-158.203125V436.734375h158.203125m0 52.734375h-158.203125c-31.640625 0-52.734375-21.09375-52.734375-52.734375v-105.46875c0-31.640625 21.09375-52.734375 52.734375-52.734375h158.203125c31.640625 0 52.734375 21.09375 52.734375 52.734375V436.734375c0 31.640625-21.09375 52.734375-52.734375 52.734375zM828.40625 120.328125v-105.46875h-158.203125v105.46875h158.203125m0 52.734375h-158.203125c-31.640625 0-52.734375-21.09375-52.734375-52.734375v-105.46875c0-31.640625 21.09375-52.734375 52.734375-52.734375h158.203125c31.640625 0 52.734375 21.09375 52.734375 52.734375v105.46875c0 31.640625-21.09375 52.734375-52.734375 52.734375zM564.734375 67.59375H380.1640625C306.3359375 67.59375 248.328125 125.6015625 248.328125 199.4296875V594.9375h52.734375v-395.5078125c0-42.1875 36.9140625-79.1015625 79.1015625-79.1015625H564.734375v-52.734375zM248.328125 384h316.40625v-52.734375H248.328125z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chaxun" unicode="&#59602;" d="M897.72362246 833.96985175H126.31658574a64.31658047 64.31658047 0 0 1-64.31658047-64.31658047v-771.33669081a64.31658047 64.31658047 0 0 1 64.31658048-64.31658047h594.63693544a32.15829023 32.15829023 0 0 1 0 64.31658047H126.31658574V769.68341953h771.40703672v-594.59673692a32.15829023 32.15829023 0 0 1 64.31658047 0V769.68341953a64.31658047 64.31658047 0 0 1-64.31658047 64.31658047z m1e-8 1e-8M793.00819004 148.47569707000002a207.58176386 207.58176386 0 0 1 40.42900108 123.0356083c-0.14069268 115.31761875-93.59067393 208.76760088-208.90829356 208.9384418-115.32766816-0.17084092-208.78769971-93.62082217-208.90829267-208.9384418 0.12059385-115.31761875 93.58062451-208.77765029 208.90829267-208.90829267a207.09938935 207.09938935 0 0 1 123.03560918 40.42900019l111.3581294-111.33803057a32.15829023 32.15829023 0 0 1 45.51403008 45.44368419zM479.8969877 271.51130536999995c0 79.71236191 64.91954883 144.63191075 144.63190986 144.63191075s144.63191075-64.91954883 144.63191074-144.63191075-64.91954883-144.63191075-144.63191074-144.63190986-144.63191075 64.91954883-144.63190986 144.63190986z m321.40201201 361.57977598a32.15829023 32.15829023 0 0 1-32.15829024 32.15829023H254.94974667a32.15829023 32.15829023 0 0 1 1e-8-64.31658046h514.21106162a32.15829023 32.15829023 0 0 1 32.15829024 32.15829023zM254.94974667 473.7367043a32.15829023 32.15829023 0 1 1 1e-8-64.31658047h96.41457421a32.15829023 32.15829023 0 1 1 1e-8 64.31658047z m1e-8 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhujian" unicode="&#59603;" d="M552 16h80c22.091 0 40-17.909 40-40s-17.909-40-40-40H472V323.31c-50.539 8.416-99.32 32.875-139.644 73.38-101.808 102.241-101.808 258.62 0 360.862 95.812 96.23 257.498 102.252 359.296 0 101.797-102.242 101.797-258.62 0-360.863-40.326-40.506-89.11-64.966-139.652-73.38V192h80c22.091 0 40-17.909 40-40s-17.909-40-40-40h-80v-96zM388.495 700.817c-69.993-70.291-69.993-177.802 0-248.093 69.986-70.299 177.03-70.299 247.015 0 69.987 70.291 69.987 177.802 0 248.093-69.986 70.298-181.144 66.158-247.015 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tiaojie-" unicode="&#59604;" d="M320 533.333333a42.666667 42.666667 0 0 0-42.666667-42.666666l-32.426666 0 0.277333-2.26133399 0.149333-3.07200001L245.333333 32a32 32 0 0 0-63.85066599-3.072l-0.14933401 3.072L181.333333 485.333333a32.213333 32.213333 0 0 0 0.426667 5.333334L149.333333 490.666667a42.666667 42.666667 0 0 0-42.666666 42.666666l0 85.333334a42.666667 42.666667 0 0 0 42.666666 42.666666l32 0L181.333333 736a32 32 0 0 0 63.850667 3.072L245.333333 736 245.333333 661.333333 277.333333 661.333333a42.666667 42.666667 0 0 0 42.666667-42.666666l0-85.333334z m298.666667-362.666666a42.666667 42.666667 0 0 0-42.666667-42.666667l-32 0 0-96a32 32 0 0 0-63.850667-3.072l-0.149333 3.072L480 128 448 128a42.666667 42.666667 0 0 0-42.666667 42.666667l0 85.333333a42.666667 42.666667 0 0 0 42.666667 42.666667l32 0L480 736a32 32 0 0 0 63.850667 3.072L544 736 544 298.66666699999996 576 298.66666699999996a42.666667 42.666667 0 0 0 42.666667-42.666667l0-85.333333zM917.333333 533.333333a42.666667 42.666667 0 0 0-42.666666-42.666666l-32 0 0-458.666667a32 32 0 0 0-63.850667-3.072l-0.149333 3.072L778.666667 490.666667 746.666667 490.666667a42.666667 42.666667 0 0 0-42.666667 42.666666l0 85.333334a42.666667 42.666667 0 0 0 42.666667 42.666666l32 0L778.666667 736a32 32 0 0 0 63.85066599 3.072L842.666667 736 842.666667 661.333333 874.666667 661.333333a42.666667 42.666667 0 0 0 42.666666-42.666666l0-85.333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="sandiantu" unicode="&#59605;" d="M45.67495111 22.929635549999944V808.50716445H3.63633778V-19.91111110999998h1015.76362667v42.84074666zM94.57550222 269.53841778000003a94.19776 92.43420445 90 1 1 184.86840889 0 94.19776 92.43420445 90 1 1-184.86840889 0ZM494.68871111 525.0252800000001a65.76241778 64.53134222 90 1 1 129.06268444 0 65.76241778 64.53134222 90 1 1-129.06268444 0ZM768.48241778 216.28359110999997a74.51306667 73.11928889 90 1 1 146.23857777 0 74.51306667 73.11928889 90 1 1-146.23857777 0ZM71.36711111 100.70243555000002a39.168 38.43527111 90 1 1 76.87054222 0 39.168 38.43527111 90 1 1-76.87054222 0ZM929.65546667 406.16732445a19.63349333 19.26599111 90 1 1 38.53198222 0 19.63349333 19.26599111 90 1 1-38.53198222 0ZM796.66972445 435.0976a22.51889778 22.09678222 90 1 1 44.19356444 0 22.51889778 22.09678222 90 1 1-44.19356444 0ZM313.43843555 608.43804445a29.02812445 28.48540445 90 1 1 56.9708089 0 29.02812445 28.48540445 90 1 1-56.9708089 0ZM624.66389333 351.28888888999995a26.96078222 26.455608890000004 90 1 1 52.91121778 0 26.96078222 26.455608890000004 90 1 1-52.91121778 0ZM380.05191111 352.54499554999995a26.03804445 25.54993778 90 1 1 51.09987556 0 26.03804445 25.54993778 90 1 1-51.09987556 0ZM287.26840889 480.23438222a20.88732445 20.49592889 90 1 1 40.99185778 0 20.88732445 20.49592889 90 1 1-40.99185778 0ZM502.76124445 234.04430221999996a19.63349333 19.26599111 90 1 1 38.53198222 0 19.63349333 19.26599111 90 1 1-38.53198222 0Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="app" unicode="&#59606;" d="M540.125 348.55810547V130.875a28.125 28.125 0 0 0-28.125-28.125 27.57568359 27.57568359 0 0 0-28.125 28.125V348.55810547L287 462.19013671a28.125 28.125 0 0 0-10.12939453 38.24296876A27.56513673 27.56513673 0 0 0 315.125 510.5625l196.875-112.5 195.18310547 112.5a27.56513673 27.56513673 0 0 0 38.25439453-10.12939453 28.11445313 28.11445313 0 0 0-10.12939453-38.24384766L540.125 349.68925780999996z m0 0M118.25 609v-450l393.75-225 393.75 225V609L512 834z m731.25-421.875L512-9.75 174.5 187.125V580.875L512 777.75l337.5-196.875z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon" unicode="&#59607;" d="M896.938511 759.228998l-1.19449 0.341283L518.000906 895.514573a6.768774 6.768774 0 0 1-4.721078 0L131.953244 759.399639a5.119241 5.119241 0 0 0-1.25137-0.341282 52.671303 52.671303 0 0 1-45.163083-51.135531v-493.267324c0-30.601686 70.361125-116.320535 133.896596-174.509242l0.511924-0.455044a1445.218653 1445.218653 0 0 1 287.246308-167.057902c0.910087-0.341283 1.820175-0.568805 2.787143-0.568805h4.038512a6.711894 6.711894 0 0 1 3.014664 0.682566l2.50274 1.194489a1432.30679 1432.30679 0 0 1 284.629808 165.692772l0.568804 0.511924c63.535471 58.302469 133.896596 144.078198 133.896596 174.452362V708.150348a48.689671 48.689671 0 0 1-41.693375 51.07865z m-134.010357-266.25742l-265.802376-268.077594a37.825504 37.825504 0 0 0-53.865793 0.341283L284.847912 389.392266a35.379644 35.379644 0 0 0-9.499036 35.720927 36.744775 36.744775 0 0 0 27.700783 25.198043 37.825504 37.825504 0 0 0 36.005329-11.546733l131.621378-136.342456 238.613517 240.718095h0.056881-0.056881v-0.056881a37.996145 37.996145 0 0 0 35.777808 10.067841 36.915417 36.915417 0 0 0 26.790695-25.084281 35.436525 35.436525 0 0 0-8.930232-35.095243z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="anniu" unicode="&#59608;" d="M900.48 88.16H123.46c-55.14 0-100 44.86-100 100V580.01c0 55.14 44.86 100 100 100h777.02c55.14 0 100-44.86 100-100v-391.85c0-55.14-44.86-100-100-100zM123.46 600.01c-11.03 0-20-8.97-20-20v-391.85c0-11.03 8.97-20 20-20h777.02c11.03 0 20 8.97 20 20V580.01c0 11.03-8.97 20-20 20H123.46zM809.77 299.88H221.02c-5.52 0-10 4.48-10 10v148.4c0 5.52 4.48 10 10 10h588.76c5.52 0 10-4.48 10-10v-148.4c-0.01-5.52-4.48-10-10.01-10z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tubiaoku-" unicode="&#59842;" d="M322.56 348.16h97.28v-215.04H322.56zM481.28 537.6h97.28v-404.48H481.28zM634.88 435.2h97.28v-302.08h-97.28zM957.44 696.32H97.28c-15.36 0-30.72-15.36-30.72-30.72s15.36-30.72 30.72-30.72h10.24v-486.4c0-76.8 66.56-143.36 143.36-143.36h547.84c76.8 0 143.36 66.56 143.36 143.36V634.88h10.24c15.36 0 30.72 15.36 30.72 30.72 5.12 15.36-10.24 30.72-25.6 30.72zM870.4 148.48c0-40.96-30.72-71.68-71.68-71.68H256c-40.96 0-71.68 30.72-71.68 71.68V634.88H870.4v-486.4z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ditu1" unicode="&#59609;" d="M1234.496474 802.344806l-60.804334-27.424699c-2.76997-1.244986-6.093933-0.829991-8.447908 0.969989l-61.08133 47.369481c-0.277997 0.276997-0.691992 0.553994-0.96999 0.831991l-62.881311 65.789279c-1.383985 1.384985-3.322964 2.353974-5.261942 2.492973L994.189107 895.97378c-1.80098 0.139998-3.739959-0.274997-5.264943-1.382985l-34.62462-22.716751c-1.662982-1.107988-2.908968-2.76997-3.463962-4.56995l-23.959738-81.440107c-0.692992-2.493973-2.494973-4.432951-4.847947-5.402941l-27.424699-10.94088c-3.185965-1.246986-5.263942-4.294953-5.263943-7.757915v-28.116692c0-3.877958 2.76997-7.33992 6.509929-8.171911l56.095386-12.049868c7.201921-1.522983 9.001901-11.079879 2.769969-15.096834l-54.572402-35.319613c-0.274997-0.137998-0.552994-0.413995-0.829991-0.552994l-118.145705-98.478921c-1.383985-1.244986-3.185965-1.79998-4.985946-1.937979l-52.769421-1.939979c-1.108988 0-2.077977-0.274997-3.047967-0.690992l-51.248439-22.714751c-2.213976-0.969989-4.846947-0.969989-6.924924 0.136998l-68.144253 32.965639a8.390908 8.390908 0 0 1-2.631971 0.829991l-89.336021 10.664883c-3.046967 0.415995-5.539939 2.354974-6.646927 5.124944l-12.604862 30.887662c-0.830991 1.939979-2.216976 3.461962-4.155955 4.292953l-77.146155 37.120593c-2.632971 1.244986-4.432951 3.739959-4.709948 6.647927l-1.522983 16.619818v0.969989l0.968989 35.319613c0 1.661982-0.415995 3.183965-1.246986 4.56995l-32.824641 52.493425c-2.355974 3.739959-7.34192 4.986945-11.219877 2.76997L297.50674 746.390419l-1.663982-1.246986-11.909869-11.91087c-1.80098-1.80198-4.431951-2.632971-7.064923-2.354974l-27.146702 3.738959c-3.599961 0.554994-7.202921-1.522983-8.724905-4.847947l-12.880858-28.807684c-1.385985-3.047967-4.432951-4.986945-7.757915-4.849947l-35.041617 0.832991c-3.738959 0.136998-7.063923-2.354974-8.17191-5.818936l-19.666784-64.127298c-0.831991-2.907968-3.324964-5.124944-6.232932-5.677937L57.889366 601.650005c-0.415995-0.138998-0.829991-0.138998-1.246987-0.413995L5.396941 582.120219c-3.739959-1.383985-5.955935-5.261942-5.263942-9.278898l3.877957-21.468765c0.138998-0.554994 0.277997-1.107988 0.415995-1.523983l33.933629-86.149056c0-0.139998 0.138998-0.277997 0.138998-0.416996 1.938979-4.154954 31.579654-68.144253 31.163659-74.515183-0.415995-5.402941-15.096835-43.213527-20.221779-55.955387a8.059912 8.059912 0 0 1 0.96999-7.896914l13.295854-18.280799c0.415995-0.554994 0.829991-1.107988 1.385985-1.524984l111.634777-93.07598c0.554994-0.552994 1.246986-0.829991 1.939978-1.244986l172.301112-76.318164c1.661982-0.691992 3.461962-0.829991 5.124944-0.552994l103.462867 22.575753a8.531907 8.531907 0 0 0 5.816936-0.830991l40.305558-22.160757c3.462962-1.939979 5.124944-5.955935 3.879958-9.694894l-24.516732-79.641127c-0.969989-3.185965 0-6.649927 2.630972-8.726905l88.782027-75.207176a8.472907 8.472907 0 0 1 8.449907-1.385985l109.003806 43.352525c2.353974 0.969989 5.124944 0.692992 7.340919-0.691992l71.053222-43.352525c0.276997-0.138998 0.415995-0.277997 0.691992-0.415995l31.856651-23.822739c0.691992-0.552994 1.522983-0.969989 2.354974-1.246987l13.989847-4.56995c4.985945-1.662982 10.249888 1.661982 10.802882 6.924924l1.521983 14.543841c0.277997 2.630971 1.80198 5.122944 4.293953 6.36993l178.120048 98.339923c1.383985 0.830991 2.629971 1.939979 3.322964 3.461962l63.435305 122.439658c0.692992 1.246986 0.970989 2.630971 0.970989 4.016956l-2.909968 97.784929c0 1.79998-0.691992 3.599961-1.939979 4.985945l-37.671587 45.568501-27.008704 34.210625a8.331909 8.331909 0 0 0 0.137999 10.388886l41.412546 50.415448c0.830991 0.969989 1.79998 1.661982 2.908968 2.216976 6.926924 3.322964 6.093933 13.433853-1.383985 15.51083l-18.974792 5.263942c-0.693992 0.138998-1.385985 0.277997-2.216976 0.277997h-50.832443c-2.629971 0-5.124944 1.244986-6.646927 3.322963l-12.466863 17.174812c-2.629971 3.601961-1.938979 8.726904 1.524983 11.495874l61.496326 48.199472c5.539939 4.432951 13.71085 0.139998 13.433853-6.924924l-0.552994-10.94188c-0.277997-6.232932 5.954935-10.526885 11.633873-8.032912l26.039714 11.633872c0.830991 0.415995 1.522983 0.829991 2.077977 1.385985l122.438659 109.003806c1.523983 1.383985 2.631971 3.324964 2.76897 5.539939l5.40194 65.098287c0.277997 4.154954 3.739959 7.477918 7.894914 7.616917l12.327865 0.415995c4.293953 0.138998 7.616917 3.461962 7.893913 7.755915l5.816937 80.471118c0.415995 6.37193-6.093933 10.94388-11.772871 8.310909z m-149.586361-720.782102l-17.727806-54.019408 22.852749-32.132648 17.729806 34.210625 13.572851 36.289602-9.419896 25.900717-27.007704-10.249888zM796.819269-91.710398l-24.929727-15.51383 17.726806-20.774772 22.85275 5.124944 26.039714 24.929727-8.309909 14.54384-33.379634-8.309909z"  horiz-adv-x="1246" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="youduiqi" unicode="&#59610;" d="M136.832 839.616h750.336c35.77600031 0 53.63200031-17.92000031 53.63200031-53.63200031 0-35.712-17.92000031-53.568-53.63200031-53.568H136.832C101.05599969 732.41599969 83.19999969 750.27199969 83.19999969 785.92000031 83.19999969 821.76 101.12 839.68000031 136.832 839.68000031zM136.832 303.61600031h750.336c35.77600031 0 53.63200031-17.92000031 53.63200031-53.63200031 0-35.712-17.92000031-53.568-53.63200031-53.568H136.832c-35.77600031 0-53.63200031 17.856-53.63200031 53.568 0 35.77600031 17.92000031 53.63200031 53.63200031 53.63200031zM458.432 571.5840000000001h428.80000031c35.712 0 53.568-17.856 53.568-53.568 0-35.77600031-17.92000031-53.63200031-53.63200031-53.63200031h-428.80000031c-35.712 0-53.568 17.92000031-53.568 53.63200031 0 35.712 17.92000031 53.568 53.63200031 53.568zM404.79999969 35.584000309999965h482.36800031c35.77600031 0 53.63200031-17.856 53.63200031-53.568 0-35.712-17.92000031-53.63200031-53.63200031-53.63200031H404.79999969c-35.712 0-53.568 17.92000031-53.568 53.63200031 0 35.712 17.856 53.568 53.568 53.568z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="juzhentu" unicode="&#59611;" d="M107 834h470.4975a45 45 0 0 0 45-45v-426.92625a45 45 0 0 0-45-45H107a45 45 0 0 0-45 45V789a45 45 0 0 0 45 45z m645.5475-0.03375H917a45 45 0 0 0 45-45V362.0625a45 45 0 0 0-45-45H752.5475a45 45 0 0 0-45 45V788.96625a45 45 0 0 0 45 45zM107 230.31375000000003h470.4975a45 45 0 0 0 45-45V-21a45 45 0 0 0-45-45H107a45 45 0 0 0-45 45V185.32500000000005a45 45 0 0 0 45 45z m645.5475 0H917a45 45 0 0 0 45-45V-21a45 45 0 0 0-45-45H752.5475a45 45 0 0 0-45 45V185.32500000000005a45 45 0 0 0 45 45z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="danhang" unicode="&#59612;" d="M914.285714 603.428571H109.714286a73.142857 73.142857 0 0 1-73.142857-73.142857v-303.030857a73.142857 73.142857 0 0 1 73.142857-73.142857h804.571428a73.142857 73.142857 0 0 1 73.142857 73.142857V530.285714a73.142857 73.142857 0 0 1-73.142857 73.142857zM109.714286 530.285714h804.571428v-303.030857H109.714286V530.285714zM229.888 478.025143a36.571429 36.571429 0 0 0 36.315429-32.292572l0.256-4.278857v-125.366857a36.571429 36.571429 0 0 0-72.923429-4.278857l-0.219429 4.278857V441.417143a36.571429 36.571429 0 0 0 36.571429 36.571428z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="peizhi" unicode="&#59613;" d="M646.55-54.75zM849.5 831.75H174.5C122.3 831.75 74.15 784.05 74.15 731.4v-675.45c0-52.65 47.7-100.35 100.35-100.35h214.65c10.35 0 20.25 4.05 27.45 11.25 7.2 7.2 11.25 17.1 11.25 27.45 0 21.6-17.55 39.15-39.15 39.15H174.5c-9 0-22.5 13.05-22.5 22.5V731.4c0 9 13.05 22.5 22.5 22.5h675c9 0 22.5-13.05 22.5-22.5v-215.1c0-21.6 17.55-39.15 39.15-39.15 21.6 0 39.15 17.55 39.15 39.15V731.4C949.85 784.05 901.7 831.75 849.5 831.75zM267.65 396.15c-11.7 0-22.95-4.5-31.05-13.05-8.55-8.55-13.05-19.35-13.05-31.05 0-24.3 19.8-44.1 44.1-44.1h121.05c11.7 0 22.95 4.5 31.05 13.05 8.55 8.55 13.05 19.35 13.05 31.05 0 24.3-19.8 44.1-44.1 44.1H267.65zM752.75 616.2H267.65c-11.7 0-22.95-4.5-31.05-13.05-8.55-8.55-13.05-19.35-13.05-31.05 0-24.3 19.8-44.1 44.1-44.1h485.1c24.3 0 44.1 19.8 44.1 44.1s-19.8 44.1-44.1 44.1zM942.2 203.54999999999995c-3.15 19.35-19.35 34.2-39.15 35.1-19.8 0.9-35.55 18.45-35.55 39.6 0 4.5 1.8 11.25 3.6 15.3 8.1 19.8 0.45 42.75-18 53.55l-49.05 28.35c-14.85 8.55-33.75 6.75-46.8-2.7-2.25-1.8-4.05-3.15-6.3-5.4-4.05-4.05-8.1-7.65-12.6-10.8-8.1-5.85-14.4-8.55-18-8.55-3.6 0-9.45 2.7-18 9-4.5 3.15-8.55 6.75-12.15 10.8-2.25 2.25-4.5 4.5-7.2 6.3-7.2 4.95-16.65 7.65-25.65 7.65-7.65 0-14.4-1.8-20.7-5.4l-50.85-28.8c-18.45-10.8-26.1-33.75-18-53.55 1.8-4.05 3.6-10.35 3.6-15.3 0-21.6-15.75-38.7-35.55-39.6-19.8-0.9-35.55-15.75-39.15-35.1-0.9-4.5-1.8-10.35-2.7-17.1-1.35-10.35-1.8-19.35-1.8-27.9 0-8.55 0.9-17.55 1.8-27.9 0.9-5.85 1.35-11.25 2.7-17.1 3.15-19.35 19.35-34.2 39.15-35.1 19.8-0.9 35.55-18.45 35.55-39.6 0-4.95-1.8-11.25-3.6-15.3-8.1-19.8-0.45-42.75 18-53.1l48.15-27.9c3.15-1.8 6.75-3.15 10.35-4.5 12.15-3.15 25.2-0.9 35.1 5.85 3.15 2.25 5.85 4.5 8.1 6.75 4.05 4.05 8.1 8.1 12.6 11.25 8.55 6.3 14.85 9 18.45 9 3.6 0 9.9-2.7 18.9-9.45 4.5-3.6 8.55-7.2 12.6-11.7 2.25-2.7 4.95-4.95 7.65-6.75 7.65-4.95 16.2-7.65 25.2-7.65 7.2 0 14.4 1.8 20.7 5.4l49.95 28.8c18.45 10.8 26.1 33.75 18 53.1-1.8 4.05-3.6 10.8-3.6 15.3 0 21.6 15.75 38.7 35.55 39.6 19.8 0.9 36 15.75 39.15 35.1 2.7 14.4 4.5 30.6 4.5 44.55-0.45 15.3-2.7 31.5-4.95 45.9zM723.5 77.10000000000002c-45 0-81.45 36.45-81.45 81.45 0 45 36.45 81.45 81.45 81.45 45 0 81.45-36.45 81.45-81.45 0-45-36.45-81.45-81.45-81.45z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yidongduan" unicode="&#60319;" d="M783.89742068 850.03377778c42.87510755 0 77.58352779-34.79718875 77.58352901-77.6722963v-776.72296296a77.6722963 77.6722963 0 0 0-71.81358665-77.49475928l-549.47601643-0.17753702a77.6722963 77.6722963 0 0 0-77.76106359 77.6722963v776.72296296c0 42.87510755 34.79718875 77.6722963 77.76106359 77.6722963h543.61730678z m0-699.05066667H240.01381081v-155.34459259h543.79484258v155.34459259zM512 112.10257932000002a38.7917645 38.7917645 0 1 0 0-77.58352901 38.7917645 38.7917645 0 0 0 0 77.58352901z m271.89742068 660.25890216H240.01381081V228.65540740999995h543.79484258V772.36148148z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tubiao_bingtu" unicode="&#59614;" d="M462.7456 376.37120000000004l255.488-255.488a354.304 354.304 0 0 0-115.8144-78.592 354.7136 354.7136 0 0 0-139.6736-28.1088 351.5904 351.5904 0 0 0-180.3776 48.1792 355.1744 355.1744 0 0 0-130.7648 130.816 351.5904 351.5904 0 0 0-48.1792 180.3264c0 65.0752 16.0256 125.2352 48.128 180.3776a356.7616 356.7616 0 0 0 130.816 130.816 352 352 0 0 0 180.4288 48.128v-356.4544h-0.0512zM882.0736 433.4592h-359.5776v359.424a352.256 352.256 0 0 0 180.4288-48.1792 358.2464 358.2464 0 0 0 130.7136-130.7648 353.4336 353.4336 0 0 0 48.3328-180.48h0.1024zM550.1952 373.6064h361.6256a354.4576 354.4576 0 0 0-28.0576-139.6224 352.768 352.768 0 0 0-78.6432-115.7632l-254.976 255.4368v-0.0512z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuangzhoutu" unicode="&#59615;" d="M1087.4545455 604.90909131l-49.09090956 49.09090869-218.18181797-212.72727305-507.27272695 152.72727276L67.4545458 343.09090869l43.63636289-49.09090869 229.09090957 223.63636377 501.81818203-152.72727275zM765.63636348 326.72727305l-147.27272696 49.09090869v-289.09090898h147.27272695zM329.27272753 430.36363623l-152.72727274-147.27272695v-201.81818233h152.72727274zM176.54545479 517.63636377L329.27272753 670.36363652V730.36363594H176.54545479zM989.27272724 430.36363623L836.5454545 288.5454542v-201.81818144H989.27272724zM547.45454551 397.63636406l-147.27272696 43.63636289v-354.54545419h147.27272695zM547.45454551 577.63636406V834H400.18181855v-212.72727305zM67.4545458 4.909091020000005h1019.99999971v-70.90909102H67.4545458zM765.63636348 512.18181797V643.09090928h-147.27272696v-87.27272754z"  horiz-adv-x="1166" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="juzhong-01" unicode="&#59616;" d="M211.59 695.31h656.43c27.76 0 50.25 22.51 50.25 50.25s-22.49 50.25-50.25 50.25H211.59c-27.76 0-50.25-22.51-50.25-50.25s22.49-50.25 50.25-50.25zM323 454.26h433.61c27.76 0 50.25 22.51 50.25 50.25s-22.49 50.25-50.25 50.25H323c-27.76 0-50.25-22.51-50.25-50.25-0.01-27.75 22.49-50.25 50.25-50.25zM868.02 313.7H211.59c-27.76 0-50.25-22.51-50.25-50.25s22.49-50.25 50.25-50.25h656.43c27.76 0 50.25 22.51 50.25 50.25s-22.49 50.25-50.25 50.25zM756.61 72.65H323c-27.76 0-50.25-22.51-50.25-50.25s22.49-50.25 50.25-50.25h433.61c27.76 0 50.25 22.51 50.25 50.25s-22.49 50.25-50.25 50.25z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tubiaozhuzhuangtu" unicode="&#59618;" d="M109.568 799.36a5.12 5.12 0 0 0 5.12-5.12v-790.656h861.76a5.12 5.12 0 0 0 5.12-5.12v-32.384a5.12 5.12 0 0 0-5.12-5.12H72.128V794.24a5.12 5.12 0 0 0 5.12 5.12h32.32z m597.504-612.48c3.2 0 6.464-2.368 8.96-7.04a37.184 37.184 0 0 0 3.712-16.896v-131.2H579.2v131.2a37.12 37.12 0 0 0 3.712 16.896c2.496 4.672 5.76 7.04 8.96 7.04h115.2zM518.656 290.816a12.608 12.608 0 0 0 12.608-12.672v-244.928H390.784V278.144a12.672 12.672 0 0 0 12.672 12.672h115.2zM312.192 604.608a11.776 11.776 0 0 0 11.904-11.84v-558.976H192.32V592.768a11.84 11.84 0 0 0 11.904 11.84h107.968z m586.048-164.672a11.84 11.84 0 0 0 11.84-11.84v-394.24h-131.712v394.24a11.776 11.776 0 0 0 11.84 11.84h108.032z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="sandianditu" unicode="&#59619;" d="M84.10666667 163.67999999999995c0-131.04 106.08-237.12 237.12-237.12s237.12 106.08 237.12 237.12-106.56 237.12-237.12 237.12-237.12-106.56-237.12-237.12zM729.22666667 265.91999999999996c0-66.72 53.76-120.48 120.48-120.48 66.72 0 120.48 53.76 120.48 120.48s-53.76 120.48-120.48 120.48c-66.24 0-120.48-53.76-120.48-120.48zM51.94666667 373.44000000000005c0-47.04 37.92-84.96 84.96-84.96S221.86666667 326.4 221.86666667 373.44000000000005s-37.92 84.96-84.96 84.96a84.8112 84.8112 0 0 1-84.96-84.96zM569.86666667 73.44000000000005c0-74.4 60.48-134.88 134.88-134.88s134.88 60.48 134.88 134.88-60.48 134.88-134.88 134.88-134.88-60-134.88-134.88zM596.26666667 863.52C484.90666667 863.52 398.98666667 772.8 398.98666667 662.4c0-84.48 53.76-180 98.88-245.28 35.52-50.4 72.96-92.16 89.28-112.32 1.92-1.92 5.28-5.28 8.16-5.28 1.92 0 6.24 1.92 8.16 5.28 18.24 19.2 53.76 61.92 89.28 112.32 46.08 65.28 98.88 160.8 98.88 245.28 3.36 110.4-86.4 201.12-195.36 201.12z m0-281.28c-47.04 0-84.48 38.4-84.48 84.48 0 47.52 37.92 84.48 84.48 84.48s84.48-38.4 84.48-84.48-37.44-84.48-84.48-84.48z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="weituo" unicode="&#59565;" d="M89.474 350.597c9.953 9.447 19.293 19.563 29.255 28.998 26.463 25.061 55.62 46.369 89.104 61.195 16.747 7.42 34.065 13.222 52.472 14.989 8.627 0.83 17.362 2.33 25.978 1.996a237.908 237.908 0 0 0 76.725-15.84c23.605-9.091 44.266-22.948 63.72-38.92 16.52-13.543 33.213-26.957 50.445-39.531 11.076-8.087 24.133-12.274 37.914-13.351 15.939-1.24 31.94-1.897 47.868-3.353 16.176-1.477 32.35-2.404 47.998-7.385 16.996-5.394 26.765-16.876 30.194-34.691 8.713 2.275 17.374 4.24 25.879 6.804 23.92 7.225 47.773 14.807 69.533 27.357a304.102 304.102 0 0 1 30.928 21.117c20.176 15.225 41.635 27.734 66.857 32.059 22.4 3.837 43.241-0.79 61.876-13.945 14.6-10.298 25.6-24.004 34.291-39.405a326.367 326.367 0 0 0 14.159-29.446 8.158 8.158 0 0 0-1.078-6.99c-8.918-10.784-18.332-21.211-27.334-31.962-24.716-29.559-51.763-56.937-79.528-83.486-15.886-15.16-33.225-28.794-50.07-42.917-17.188-14.419-35.952-26.54-55.2-38.046-26.076-15.55-53.66-27.217-83.226-33.655-11.334-2.482-23.207-2.833-34.865-3.438-15.01-0.767-30.052-0.787-45.073-1.187-12.154-0.325-24.307-0.723-36.449-1.08-13.771-0.376-27.54-0.699-41.311-1.077-11.785-0.323-23.574-0.731-35.37-1.077-14.127-0.402-28.252-0.703-42.38-1.078-10.352-0.302-20.704-0.777-31.067-1.08-15.733-0.408-31.487-0.7-47.232-1.074-12.508-0.313-25.017-0.724-37.526-1.081l-40.168-1.068c-12.337-0.347-24.662-0.732-36.988-1.08-13.586-0.375-27.177-0.742-40.772-1.077-15.204-0.376-30.41-0.85-45.615-1.078-12.488-0.15-24.133 11.918-24.36 24.512-0.108 6.655 0.183 13.038 4.066 18.862 5.575 8.355 13.747 12.172 23.248 12.54 19.68 0.754 39.393 0.807 59.082 1.207 15.39 0.31 30.778 0.67 46.164 1.077 12.51 0.324 25.018 0.725 37.527 1.08l40.222 1.078 37.527 1.078 40.222 1.075c12.337 0.348 24.662 0.735 36.999 1.081 13.586 0.377 27.174 0.711 40.762 1.077 12.324 0.334 24.66 0.722 36.985 1.08 13.955 0.375 27.898 0.699 41.842 1.078 11.795 0.322 23.59 0.56 35.38 1.077 24.187 1.078 48.429 1.499 71.506 10.663a313.278 313.278 0 0 1 71.915 39.696c15.431 11.484 30.98 22.979 45.291 35.802 19.862 17.78 38.822 36.545 57.724 55.405 11.388 11.516 21.914 23.895 32.694 35.962 3.773 4.196 7.237 8.627 11.507 13.835-4.864 5.263-9.1 11.085-14.514 15.464-10.536 8.54-22.14 8.022-34.238 2.676-12.101-5.35-22.754-13.21-33.03-21.503a207.622 207.622 0 0 0-52.838-31.618c-15.789-6.362-31.532-12.94-47.74-18.104-19.712-6.234-39.897-10.926-59.84-16.5a9.266 9.266 0 0 1-5.325-4.183c-11.864-24.328-31.11-40.633-55.46-51.492a195.694 195.694 0 0 0-58.878-15.563c-21.707-2.379-42.756 0.888-63.795 5.103-34.939 7.008-67.936 19.906-100.835 33.212-13.372 5.388-26.258 11.97-39.392 17.944-14.656 6.687-20.684 26.051-11.27 40.98 7.073 11.203 23.53 15.311 37.386 9.338 28.532-12.282 57.217-24.342 86.386-34.982 17.06-6.223 35.004-10.353 52.84-14.02 26.958-5.487 53.303-1.304 77.737 10.902 19.412 9.707 27.77 23.618 28.673 44.883-5.789 0.732-11.655 1.733-17.555 2.155-27.53 1.963-55.297 1.478-82.321 8.627-20.09 5.295-37.959 14.86-54.144 27.574-17.103 13.436-33.817 27.345-50.769 40.977-19.722 15.852-42.282 25.428-66.921 30.809-27.887 6.092-54.738 3.645-80.877-7.624a214.86 214.86 0 0 1-55.372-34.573c-10.356-8.731-25.903-23.877-38.379-46.058l-49.776 41.194z m694.63 381.24c6.89-2.739 14.309-4.615 20.573-8.39 15.626-9.424 25.374-23.475 25.631-41.98 0.81-55.987 1.079-111.986 1.079-167.986 0-16.94-5.025-32.458-18.224-44.211-10.072-8.951-21.923-14.483-35.443-14.505-99.372-0.184-198.753-0.184-298.132 0-16.176 0-25.116 9.533-27.445 22.3-2.944 16.1 6.19 29.839 20.898 33.429 1.95 0.31 3.93 0.393 5.899 0.248h295.144V675.32H251.399v-124.646c0-12.542-7.548-23.92-20.057-27.187-18.688-4.896-36.136 7.484-36.07 26.312 0.16 42.768-0.173 85.535 0.15 128.325 0.162 21.427 10.223 37.419 29.365 47.22 5.391 2.74 11.258 4.368 16.908 6.47l542.41 0.023zM77.758 325.69c0-18.129 14.696-32.825 32.825-32.825 18.129 0 32.825 14.696 32.825 32.825 0 18.129-14.696 32.825-32.825 32.825-18.129 0-32.825-14.696-32.825-32.825zM326.947 587.924c0-20.683 16.767-37.45 37.45-37.45 20.683 0 37.45 16.767 37.45 37.45 0 20.683-16.767 37.45-37.45 37.45-20.683 0-37.45-16.767-37.45-37.45z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="huaban1" unicode="&#59564;" d="M895.30307318 523.3829357v0.49758815H127.27940741V669.53064297C127.27940741 696.37248948 149.15265422 717.74814815 175.49691259 717.74814815h239.60689778c26.84184652 0 48.21871882-21.87324682 48.21871881-48.21750518v-43.74770727h383.76303882c26.84184652 0 48.21750518-21.86960592 48.21750518-48.21871881v-54.18128119zM127.77699555 487.58935703h768.52125393V97.36495407999996c0-26.84670103-21.87324682-48.21750518-48.21750518-48.21750519H175.99571437C149.15265422 49.147448889999964 127.77699555 71.01584118000005 127.77699555 97.36495407999996V487.58935703z m353.93444978-84.00987021H217.75185541c-16.40341808 0-29.33100089-10.43964208-29.82373452-23.36237037 0-12.92879645 13.42031645-23.36722489 29.82373452-23.3672249h263.95958992c16.40705897 0 29.82858903 10.43842845 29.82858904 23.3672249 0 12.9227283-13.42153008 23.36237037-29.82858904 23.36237037zM335.06614992 262.89796741H202.83756089c-7.9504877 0-14.90944-8.44807585-14.90944-18.39012978 0-9.94569482 6.46136415-18.39377067 14.90944-18.39377066h132.22858903c7.95534222 0 14.91429452 8.44807585 14.91429453 18.39377066-0.49758815 9.94205392-6.9589523 18.39012978-14.91429453 18.39012978z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="sort-ascend" unicode="&#59562;" d="M475.42 632.517h-270.689c-19.728 0-35.809-16.039-35.809-35.809 0-19.899 16.039-35.809 35.809-35.809h270.689c19.77 0 35.809 16.039 35.809 35.809s-15.997 35.809-35.809 35.809zM475.42 417.622h-270.689c-19.728 0-35.809-15.997-35.809-35.809 0-19.899 16.039-35.809 35.809-35.809h270.689c19.77 0 35.809 16.039 35.809 35.809s-15.997 35.809-35.809 35.809zM475.42 202.72500000000002h-270.689c-19.728 0-35.809-16.039-35.809-35.809 0-19.942 16.039-35.809 35.809-35.809h270.689c19.77 0 35.809 16.039 35.809 35.809 0.043 19.812-15.997 35.809-35.809 35.809zM853.192 474.873c-49.232 71.618-147.781 214.939-147.781 214.939s-10.722 18.611-21.485 18.611c-9.306 1.415-21.485-18.611-21.485-18.611s-98.549-143.321-147.824-215.025c-3.259-4.718-2.616-14.153 4.546-14.153h128.912v-365.165c0-19.984 16.039-35.937 35.809-35.937 19.899 0 35.809 16.081 35.809 35.937v365.165h128.955c7.205 0 7.805 9.476 4.546 14.238z"  horiz-adv-x="1025" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="sort-ascend-copy" unicode="&#59563;" d="M548.58000001 135.48299999999995l270.68899999 0c19.728 0 35.809 16.039 35.809 35.809 0 19.899-16.039 35.809-35.809 35.809l-270.689 0c-19.76999999 0-35.809-16.039-35.809-35.809s15.997-35.809 35.80900001-35.809zM548.58 350.37800000000004l270.689 0c19.728 0 35.809 15.997 35.80900001 35.809 0 19.899-16.039 35.809-35.80900001 35.809l-270.689 0c-19.76999999 0-35.809-16.039-35.809-35.809s15.997-35.809 35.809-35.809zM548.58000001 565.275l270.68899999 0c19.728 0 35.809 16.039 35.809 35.809 0 19.942-16.039 35.809-35.809 35.809l-270.689 0c-19.76999999 0-35.809-16.039-35.809-35.809-0.043-19.812 15.997-35.809 35.80900001-35.809zM170.808 293.12699999999995c49.23200001-71.618 147.781-214.939 147.781-214.939s10.722-18.611 21.485-18.611c9.306-1.415 21.485 18.611 21.485 18.611s98.549 143.32100001 147.824 215.025c3.259 4.71799999 2.616 14.15299999-4.54599999 14.153l-128.91200001 0 0 365.165c0 19.98400001-16.039 35.937-35.809 35.937-19.899 0-35.809-16.081-35.809-35.937l0-365.16499999-128.955-1e-8c-7.205 0-7.805-9.476-4.546-14.238z"  horiz-adv-x="1025" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chuangkoufangda1" unicode="&#59559;" d="M682.5318 441.1464L850.520064 441.1464c61.76559999 0 111.9918 50.2272 111.99179999 111.9928l1e-8 167.9872c0 61.7667-50.2262 111.9939-111.9918 111.9939l-167.989248-1e-8c-61.738 0-111.99279999-50.2272-111.9928-111.99389999l1e-8-167.9872C570.53899999 491.3736 620.7939 441.1464 682.5318 441.1464zM626.5364 721.1264c0 30.8705 25.1269 55.9964 55.9954 55.9964L850.520064 777.1228c30.8961 0 55.9954-25.1249 55.9954-55.9964l0-167.9872c0-30.8695-25.0993-55.9985-55.9954-55.9985l-167.989248 0c-30.86850001 0-55.9954 25.1279-55.9954 55.99849999L626.535416 721.1264zM494.7476 404.9459L262.5608 172.75900000000001l0 184.392704c0 15.47569999-12.5225 27.9992-27.9982 27.9992-15.44810001 0-27.99820001-12.5235-27.9982-27.9992L206.5644 105.16889600000002c0-15.4747 12.5501-27.9972 27.9982-27.9972L486.545408 77.171696c15.47569999 0 27.9982 12.5225 27.9982 27.9972 0 15.47569999-12.5225 27.9982-27.9982 27.9982l-184.392704 0L534.33959999 365.355c10.9363 10.9363 10.93630001 28.6536 1e-8 39.5909-5.4692 5.4682-12.6321 8.2022-19.796 8.2022C507.38070001 413.1482 500.2168 410.41409999 494.7476 404.9459zM178.5672-62.81830000000002L850.520064-62.81830000000002c61.76559999 0 111.9918 50.2272 111.9918 111.99280001l0 307.97823999c0 15.47569999-12.5225 27.9992-27.9982 27.9992-15.44810001 0-27.99820001-12.5235-27.9982-27.9992l0-307.97824c0-30.8695-25.0993-55.9964-55.9954-55.9964l-671.952896 0c-30.8695 0-55.9974 25.1279-55.9974 55.9964l0 671.952896c0 30.8705 25.1279 55.9964 55.9974 55.9964l307.97824 0c15.47569999 0 27.99820001 12.5235 27.9982 27.9982 0 15.4767-12.5225 28.0003-27.9982 28.0003l-307.97824 0c-61.738 0-111.99279999-50.2272-111.9928-111.9939L66.574368 49.17350399999998C66.5743-12.59209999999996 116.8292-62.81830000000002 178.5672-62.81830000000002z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon_yuyinbofang" unicode="&#59558;" d="M586.03-47.08a586.124 586.124 0 0 1 198.005 438.783c0 158.674-65.978 312.553-181.202 422.936l68.376 68.375c135.144-130.095 209.5-304.338 209.5-491.148 0-192.838-82.524-377.39-226.56-507.066l-68.118 68.12zM365.429 173.52a257.513 257.513 0 0 1 121.996 218.322c0 80.384-38.19 156.579-102.423 204.94l68.7 68.7c82.945-67.537 130.421-167.028 130.421-273.64 0-114.409-55.598-221.836-148.899-288.116l-69.795 69.794zM214.458 302.29c-40.285 0-73.076 32.768-73.076 73.077s32.791 73.076 73.076 73.076c40.309 0 73.077-32.791 73.077-73.076s-32.768-73.077-73.077-73.077z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xingxing1" unicode="&#59450;" d="M737.792-14.694399999999973a57.2416 57.2416 0 0 0-26.7264 6.656l-197.5296 103.8336-197.5296-103.8336a57.2416 57.2416 0 0 0-83.0464 60.3648l37.6832 220.16L110.848 428.032a57.2928 57.2928 0 0 0 31.744 97.6896L363.52 557.7728 462.1824 757.76a56.832 56.832 0 0 0 51.2 31.8976 56.9344 56.9344 0 0 0 51.2-31.8976l98.7648-200.1408 220.8256-32.0512A57.2928 57.2928 0 0 0 916.48 428.032l-159.7952-155.7504 37.7344-220.16a57.3952 57.3952 0 0 0-56.32-67.0208zM159.8464 465.92l155.2896-151.3984a57.2416 57.2416 0 0 0 16.4352-50.688l-36.6592-213.5552 192 100.9152a57.088 57.088 0 0 0 53.2992 0L732.16 50.27840000000003l-36.6592 213.76a57.344 57.344 0 0 0 16.4352 50.688L867.2768 465.92l-214.6304 31.1808a57.2928 57.2928 0 0 0-43.1104 31.3344l-96 194.56-96-194.56a57.2416 57.2416 0 0 0-43.1104-31.3344z m715.6736-1.024zM509.7984 730.7264z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon-test2" unicode="&#59557;" d="M323.476211 657.569684h597.207578v53.894737H323.530105zM323.476211 361.741474h597.207578v53.894737H323.530105zM323.476211 57.829053h597.207578v53.894736H323.530105zM195.961263 765.035789V572.631579h-29.372631V729.734737c-11.856842-11.156211-26.570105-19.240421-44.193685-24.252632v29.103158c8.623158 2.155789 17.785263 5.928421 27.486316 11.317895 9.701053 6.090105 17.623579 12.503579 23.713684 19.132631h22.366316zM178.714947 499.334737c18.701474 0 33.899789-5.281684 45.541053-15.898948a53.894737 53.894737 0 0 0 17.515789-41.498947c0-16.330105-6.251789-31.528421-18.863157-45.541053-7.545263-7.706947-20.803368-18.054737-39.882106-30.989473-20.641684-13.635368-33.037474-25.761684-37.187368-36.378948h96.202105V303.157895h-132.581052c0 19.240421 6.413474 36.001684 19.132631 50.391579 6.682947 7.922526 21.126737 19.563789 43.385263 35.031579 13.150316 9.323789 22.312421 16.707368 27.486316 22.096842 8.838737 9.862737 13.204211 20.372211 13.204211 31.528421 0 10.778947-2.964211 18.863158-8.892632 24.252631-5.928421 5.389474-14.605474 8.084211-26.138947 8.084211-12.180211 0-21.342316-4.149895-27.486316-12.39579-6.251789-7.922526-9.701053-19.671579-10.24-35.301052h-29.372632c0.377263 21.557895 6.575158 38.804211 18.593684 51.738947 12.234105 13.850947 28.779789 20.749474 49.583158 20.749474zM177.637053 200.111158c19.402105 0 34.977684-4.688842 46.618947-14.012632 11.533474-9.539368 17.246316-22.474105 17.246316-38.80421 0-21.180632-10.563368-35.301053-31.797895-42.307369a53.463579 53.463579 0 0 0 25.869474-15.898947c6.467368-7.168 9.701053-16.545684 9.701052-28.025263 0-17.785263-6.090105-32.336842-18.32421-43.654737-13.096421-11.479579-29.911579-17.246316-50.391579-17.246316-19.563789 0-35.354947 5.012211-47.427369 15.090527-13.473684 11.317895-21.018947 27.755789-22.635789 49.313684h29.642105c0.538947-13.096421 4.796632-23.066947 12.665263-29.911579 7.006316-6.467368 16.168421-9.701053 27.486316-9.701053a42.145684 42.145684 0 0 1 29.911579 10.778948 32.714105 32.714105 0 0 1 9.970526 23.983157c0 11.317895-3.503158 19.671579-10.509473 25.061053-6.467368 5.389474-16.060632 8.084211-28.833684 8.084211h-14.012632v22.096842h13.743158c11.695158 0 20.587789 2.586947 26.677895 7.814737 6.144 5.227789 9.162105 12.665263 9.162105 22.366315 0 9.539368-2.748632 16.869053-8.353684 22.096842-5.712842 5.227789-14.443789 7.814737-26.138948 7.814737-11.641263 0-20.749474-2.964211-27.216842-8.892631-6.629053-6.090105-10.509474-14.982737-11.587368-26.677895h-28.833684c1.616842 19.024842 8.730947 33.953684 21.288421 44.732632 11.695158 10.617263 27.055158 15.898947 46.08 15.898947z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tubiaozhizuomoban1" unicode="&#59556;" d="M747.86133333-25.486222219999945H275.11466667L38.68444445 384.11377778l236.43022222 409.6h472.74666666l236.43022222-409.6-236.43022222-409.6z m-448.96711111 41.64266667h425.18755556l212.65066667 367.95733333-212.65066667 368.07111111H298.89422222L86.24355555 384.11377778l212.65066667-367.95733333z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biaoge" unicode="&#59555;" d="M885.3-61.3H140.7c-42.2 0-76.5 34.3-76.5 76.5V759.7c0 42.2 34.3 76.5 76.5 76.5h744.6c42.2 0 76.5-34.3 76.5-76.5v-744.6c-0.1-42.1-34.3-76.4-76.5-76.4z m-744.6 851c-16.5 0-29.9-13.4-29.9-29.9v-744.6c0-16.5 13.4-29.9 29.9-29.9h744.6c16.5 0 29.9 13.4 29.9 29.9V759.7c0 16.5-13.4 29.9-29.9 29.9H140.7zM938.5 580.2h-851V804.9c0 4.4 3.6 8 8 8h835c4.4 0 8-3.6 8-8v-224.7zM961.7 557H64.3V759.7c0 42.2 34.3 76.5 76.5 76.5h744.6c42.2 0 76.5-34.3 76.5-76.5V557z m-850.9 46.5h804.4V759.7c0 16.5-13.4 29.9-29.9 29.9H140.7c-16.5 0-29.9-13.4-29.9-29.9v-156.2zM938.5 251.2h-851c-12.9 0-23.3 10.4-23.3 23.3 0 12.8 10.4 23.3 23.3 23.3h851c12.9 0 23.3-10.4 23.3-23.3-0.1-12.9-10.5-23.3-23.3-23.3zM363.4-61.3c-12.9 0-23.3 10.4-23.3 23.3V580.2c0 12.8 10.4 23.3 23.3 23.3s23.3-10.4 23.3-23.3V-38c0-12.9-10.4-23.3-23.3-23.3zM662.6-61.3c-12.9 0-23.3 10.4-23.3 23.3V580.2c0 12.8 10.4 23.3 23.3 23.3s23.3-10.4 23.3-23.3V-38c0-12.9-10.5-23.3-23.3-23.3z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tiaozhuangtu" unicode="&#59554;" d="M559.693 733.311H133.371v-173.064h423.616zM916.172 480.055H133.371v-173.064h777.833zM734.074 226.799H133.371v-173.064h596.891zM101.666 10.637V797.875H64.714v-830.169h892.854v42.931z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="calendar" unicode="&#59544;" d="M919.53574033-66L104.46335967-66c-23.27442011 0-42.15891621 18.88359697-42.15891621 42.15891621l0 702.67558623c0 23.27442011 18.88449609 42.15891621 42.15891621 42.15891621l84.31783242 0 0-42.15891621c0-54.31867207 44.05213301-98.3708042 98.3708042-98.3708042 54.31777295 0 98.3708042 44.05213301 98.3708042 98.3708042l0 42.15891621 252.95349727 0 0-42.15891621c0-54.31867207 44.05213301-98.3708042 98.37080419-98.3708042s98.3708042 44.05213301 98.3708042 98.3708042l0 42.15891621 84.31783242 0c23.27531924 0 42.15891621-18.88449609 42.15891622-42.15891621l0-702.67468623C961.69465742-47.116403030000015 942.81106045-66 919.53574033-66zM877.37682412 496.14676406l-730.75454824 0 0-477.8271334 730.75454824 0L877.37682412 496.14676406zM340.48223896 205.04023476999998c7.32823154 8.64493857 15.89132549 16.63422187 25.77292559 23.93367275 9.85281943 7.30304824 20.25516709 14.74010596 31.23492275 22.28778896 5.60050312 3.89795713 11.55536542 7.85077734 17.89606671 11.88544131 6.33980127 4.03376484 12.13097519 8.45246953 17.34653935 13.33795693 5.24164658 4.85850586 9.63336885 10.34838369 13.17426768 16.44265195 3.51391729 6.09157002 5.29830791 13.0096793 5.2983079 20.80379532 0 12.43406953-3.59666104 22.12320058-10.78728662 29.06469405-7.19062471 6.94509083-16.38509062 10.40504502-27.58339863 10.40504502-7.54858213 0-13.9441456-1.7574082-19.18669131-5.29920703s-9.44179805-8.15207256-12.5986579-13.86140186c-3.18294229-5.73720996-5.43321651-12.07701211-6.75082266-19.02120381-1.3454877-6.94239346-2.03082276-13.83352119-2.03082276-20.64010605l-49.68051679 0c-0.49286602 14.6016 1.20878086 28.19048643 5.10493886 40.732483 3.897058 12.5428957 9.74399326 23.52265136 17.5390084 32.88260566 7.79501513 9.38783496 17.59297237 16.68818584 29.42355058 21.93073067 11.80269756 5.24164658 25.38798662 7.84987734 40.73248302 7.84987734 11.69207315 0 22.83641719-1.81047217 33.43033388-5.46199716 10.59391758-3.650625 19.92688945-8.92015224 27.94135606-15.72673711 8.04234727-6.80658487 14.43701162-15.23387109 19.21277373-25.19821583 4.74788057-9.99042627 7.10788096-21.18963339 7.10788096-33.62370292 0-12.92603643-2.0587043-23.98763672-6.20219532-33.23696573-4.14439013-9.27541143-9.63336885-17.51022773-16.44085283-24.67567002-6.83356641-7.19062471-14.57371933-13.69501435-23.22045615-19.54195049-8.6458377-5.84783526-17.34743848-11.63810917-26.10210234-17.34743847-8.78344453-5.73720996-17.31955693-11.88544131-25.58045655-18.47257559-8.28788115-6.58623428-15.59003027-14.24454258-21.93073066-22.99920644l120.93200771 0 0-44.57377881L316.74013614 136.91682217000005c0 14.84623388 2.11356739 27.77676768 6.39466435 38.69806289C327.38981592 186.59643984000002 333.18098896 196.39439618999995 340.48223896 205.04023476999998zM583.82845068 184.94965606000005c7.54858213-6.94599082 17.1828501-10.40234677 28.87492237-10.40234678 6.80658487 0 12.95481621 1.39945078 18.44469492 4.20015234 5.48987783 2.79800332 10.10015244 6.44952744 13.88748427 10.950975 3.76125029 4.52932911 6.69775869 9.74309414 8.75646299 15.72763623 2.05690518 5.95396318 3.12897832 12.10309453 3.12897832 18.44559405 0 6.58623428-0.9893294 12.78932871-2.93740839 18.63536484-1.94807901 5.84693614-4.8854874 10.950975-8.78344453 15.34269727-3.89795713 4.39262138-8.50913086 7.79591426-13.88748428 10.21077685-5.35227099 2.47152393-11.55716455 3.68030479-18.6092833 3.68030479-9.27631055 0-16.82489268-1.64678378-22.67092881-4.94035049-5.84783526-3.2944667-11.30893242-8.45336865-16.44175283-15.53606631l-46.77008995 0L552.04579883 392.66922187l142.86094013 1e-8 0-42.76150753L589.31922763 349.90771435l-10.23775839-58.07812323 0.71141748-0.7428964c7.08269766 7.05481699 14.63127979 12.10489278 22.67272793 15.1790089 8.04144815 3.02015215 17.1828501 4.55721065 27.39272783 4.55721063 12.68140166 0 23.87970967-2.3051373 33.62190469-6.94509081 9.74399326-4.6390544 17.95092891-10.84035058 24.67746826-18.63536485 6.69596045-7.79501513 11.80089932-16.99128018 15.34269727-27.58519687 3.51301817-10.59571583 5.29830791-21.87586846 5.2983079-33.78649307 0-13.14908526-2.5803501-25.41766641-7.68528896-36.72659971-5.10673799-11.30893242-11.99606661-21.13297208-20.64010605-29.42355058-8.6458377-8.28698115-18.69202705-14.65556396-30.13676719-19.15701153-11.44474013-4.52932911-23.63147754-6.6437956-36.53233067-6.42434414-12.43317041 0-24.31681348 1.64678378-35.6257459 4.94035049-11.33591396 3.2944667-21.38120332 8.34364336-30.16464873 15.17990801-8.75646299 6.80658487-15.75551777 15.28873418-20.9989626 25.38888662-5.24164658 10.10015244-7.98568594 21.84798691-8.23481718 35.26778847l51.90470859 0C571.88994453 201.19803983999998 576.2816668 191.89384775999997 583.82845068 184.94965606000005zM736.84710372 636.67648535c-23.27531924 0-42.15891621 18.88449609-42.15891622 42.15891621l0 112.42377686c0 23.27531924 18.88359697 42.15891621 42.15891621 42.15891621s42.15891621-18.88359697 42.15891621-42.15891621l0-112.42377686C779.00601992 655.5591832 760.12242295 636.67648535 736.84710372 636.67648535zM287.15199717 636.67648535c-23.27531924 0-42.15891621 18.88449609-42.15891621 42.15891621l0 112.42377686c0 23.27531924 18.88359697 42.15891621 42.15891621 42.15891621 23.27442011 0 42.15891621-18.88359697 42.15891621-42.15891621l0-112.42377686C329.31091338 655.5591832 310.42821553 636.67648535 287.15199717 636.67648535z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tubiao-copy" unicode="&#59682;" d="M512-128A512 512 0 1 1 512 896a512 512 0 0 1 0-1024zM448.768 589.888c9.152 0 16.96-3.136 23.488-9.472 6.464-6.336 9.728-14.08 9.728-23.168v-131.84a32 32 0 0 0-9.728-23.488 32 32 0 0 0-23.488-9.728H317.12a31.104 31.104 0 0 0-23.168 9.728 32.512 32.512 0 0 0-9.472 23.488v131.84a31.616 31.616 0 0 0 9.472 23.232 31.552 31.552 0 0 0 23.168 9.472h131.648z m0-263.552c9.152 0 16.96-3.2 23.488-9.472 6.464-6.4 9.728-14.08 9.728-23.232v-132.352a31.168 31.168 0 0 0-9.728-23.168 32.384 32.384 0 0 0-23.488-9.472H317.12a31.488 31.488 0 0 0-23.168 9.472 31.552 31.552 0 0 0-9.472 23.168V293.632a31.616 31.616 0 0 0 9.472 23.232 31.552 31.552 0 0 0 23.168 9.472h131.648z m263.936 0c9.088 0 16.832-3.2 23.168-9.472 6.336-6.4 9.472-14.08 9.472-23.232v-132.352a31.616 31.616 0 0 0-9.472-23.168 31.552 31.552 0 0 0-23.168-9.472H580.992a32.512 32.512 0 0 0-23.424 9.472 31.168 31.168 0 0 0-9.792 23.168V293.632c0 9.152 3.264 16.896 9.792 23.232a32.384 32.384 0 0 0 23.424 9.472h131.712z m73.216 205.632a33.92 33.92 0 0 0 0-49.088l-97.984-98.048a33.536 33.536 0 0 0-48.96 0L540.992 482.88a33.024 33.024 0 0 0-10.048 24.32c0 9.472 3.328 17.728 10.048 24.768l97.92 98.048A34.432 34.432 0 0 0 663.488 640c9.344 0 17.472-3.328 24.512-9.984l97.92-98.048z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="outlook" unicode="&#59545;" d="M128.892727 58.36732V708.272335l498.566589 95.564264v-850.215875l-498.566589 102.025905z m366.272999 323.422119c-2.380604 17.004318-3.060777 34.008635-6.801727 50.672866a115.969445 115.969445 0 0 1-65.976752 87.402192 104.066423 104.066423 0 0 1-133.994022-52.373298 197.590169 197.590169 0 0 1-19.384922-109.507805 153.71903 153.71903 0 0 1 30.607771-85.361674 102.025905 102.025905 0 0 1 160.860844 0 180.585852 180.585852 0 0 1 34.008635 110.187978z m0 0M976.727997 521.905015v-301.656593a43.871139 43.871139 0 0 0-49.992693-50.672866H659.767519v226.157423c16.324145-11.22285 31.968117-21.085354 46.931916-31.968117a21.765526 21.765526 0 0 1 28.90734 0q114.6091 76.179342 229.898373 151.678512l11.222849 6.801727z m0 0M659.087346 623.93092h282.611757a34.008635 34.008635 0 0 0 34.008635-26.186649 14.283627 14.283627 0 0 0-4.421122-11.903022q-121.070741-81.620724-242.821654-161.881103a17.68449 17.68449 0 0 0-15.303886 0c-16.664231 9.182331-34.008635 19.384922-48.292262 29.927599a12.923281 12.923281 0 0 0-5.781468 8.502159V622.910661z m0 0M442.112255 378.728662a486.663567 486.663567 0 0 0-13.94354-57.474594 50.33278 50.33278 0 0 0-93.523747-3.400863 143.51644 143.51644 0 0 0 0 122.431086 48.632348 48.632348 0 0 0 48.632349 30.947858 46.59183 46.59183 0 0 0 44.211225-34.008635 557.401528 557.401528 0 0 0 14.623713-58.494852z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="normal1" unicode="&#59546;" d="M1024 409.6c0 43.2-35.2 80-80 80-43.2 0-80-35.2-80-80 0-32 19.2-60.8 48-73.6-14.4-78.4-52.8-150.4-110.4-208-73.6-75.2-176-116.8-281.6-116.8-145.6 0-278.4 80-348.8 206.4-6.4 11.2-20.8 16-33.6 9.6s-16-20.8-9.6-33.6c78.4-142.4 228.8-232 390.4-232 118.4 0 232 46.4 315.2 131.2 40 40 73.6 88 96 142.4 12.8 30.4 22.4 62.4 28.8 96 40 9.6 65.6 41.6 65.6 78.4z m-843.2 0c0 33.6-20.8 60.8-48 73.6 14.4 78.4 52.8 150.4 108.8 208 73.6 75.2 176 116.8 281.6 116.8 145.6 0 278.4-80 348.8-206.4 6.4-11.2 20.8-16 33.6-9.6s16 20.8 9.6 33.6c-78.4 142.4-228.8 232-390.4 232-60.8 0-118.4-11.2-172.8-35.2-52.8-22.4-100.8-54.4-142.4-96-64-64-107.2-147.2-123.2-236.8-43.2-9.6-70.4-52.8-60.8-94.4 9.6-43.2 52.8-70.4 94.4-60.8 35.2 6.4 60.8 38.4 60.8 75.2zM752 560c-14.4 16-40 16-54.4 0l-209.6-214.4-139.2 140.8c-14.4 16-40 16-54.4 0-16-16-16-40 0-56l166.4-169.6c14.4-16 40-16 54.4 0l236.8 241.6c16 16 16 41.6 0 57.6z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="IE" unicode="&#59547;" d="M151.1 4.1c-39.3 39.3-27.5 121.8 23.2 221.2 31.5-88.4 92.9-162.6 172-210.5-87.6-39.8-159.4-46.5-195.2-10.7z m738 737.9c30.8-31.1 30-88.4 3.7-159.8-45.1 68.8-110.7 123-188.1 154 82.7 35.5 150 40.2 184.4 5.8z m-504-320.5c5 89.2 79.2 160.4 169.7 160.4s164.7-71.2 169.7-160.4H385.1z m354.5-106.6h216.8c1.7 15 2.4 30.4 2.4 46.1 0 73.7-19.8 142.8-54.3 202.3 35.7 94.9 34.4 175.4-13.4 223.5-45.5 45.3-167.4 37.9-305.3-23.1-10.2 0.8-20.5 1.2-30.9 1.2-189.2 0-348-130.2-391.9-305.7 59.4 76 121.8 131.1 205.3 171.2-7.6-7.1-51.8-51.1-59.3-58.6C89 351.8 19.6 64.5 94.3-10.1c56.8-56.7 159.6-47.1 277.7 10.7 54.9-28 117.1-43.7 183-43.7 177.4 0 327.7 114.2 382.2 273.2H718.6c-30.1-55.5-88.8-93.2-156.3-93.2S436 174.6 405.9 230.1c-13.4 25-21 53.8-21 84.2v0.7l354.7-0.1z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="key2" unicode="&#59548;" d="M885.12 757.12C837.12 805.12 776.96 830.08 704 832c-72.32-1.92-133.12-26.88-181.12-74.88S450.56 648.96 448.64 576c0-19.2 1.92-37.76 5.76-56.96L64 128v-64l64-64h128l64 64v64h64v64h64v64h128l69.76 71.04c19.2-5.12 37.76-7.04 58.24-7.04 72.96 1.92 133.12 26.88 181.12 74.88S958.08 503.04 960 576c-1.92 72.96-26.88 133.12-74.88 181.12zM768 551.68c-49.28 0-88.32 39.04-88.32 88.32 0 49.28 39.04 88.32 88.32 88.32 49.28 0 88.32-39.04 88.32-88.32 0-49.28-39.04-88.32-88.32-88.32z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="visio" unicode="&#59549;" d="M912.286316 723.272421H572.077474V792.186947L80.842105 705.6v-643.203368l491.237053-86.585264v72.448H912.286316c17.050947 0 30.873263 13.822316 30.873263 30.871579V692.400842c0 17.050947-13.822316 30.873263-30.871579 30.873263z m-246.816-367.427368l-93.389474-0.001685v157.642106h82.413474l89.096421-89.094737v-149.945263h-60.449684V338.172632c-0.117895 10.314105-8.308211 17.552842-17.670737 17.670736z m21.333895 175.311158L761.263158 605.616842l74.458947-74.458947-74.458947-74.458948-74.458947 74.458948z m-114.725053-210.654316l75.722105 0.001684v-130.762105h-75.722105V320.505263zM328.227368 245.288421l-60.079157 1.768421-70.681264 272.122947 53.010527 3.535158 48.594526-206.743579 50.359579 213.810527 59.196632 2.650947-80.400843-287.144421z m354.913685-73.214316v67.031579H761.263158c9.758316 0 17.670737 7.912421 17.670737 17.670737v167.612632l94.275368 94.275368c7.690105 8.277895 6.164211 18.684632 0 24.990316l-99.449263 99.449263c-6.901895 6.900211-18.088421 6.898526-24.990316 0l-94.273684-94.275368h-82.415158V679.095579h325.135158v-583.124211H572.079158v58.430316h93.392842c10.000842 0.207158 17.512421 7.599158 17.670737 17.670737z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="BitTorrent" unicode="&#60227;" d="M1020.169576 385.276808c0 280.897756-227.27182 510.723192-510.723192 510.723192C228.548628 896 1.276808 668.72818 1.276808 385.276808c0-217.057357 135.341646-400.917706 326.862843-474.972569L231.102244 357.187032l-28.089775 127.680798-45.965087 222.164589 186.413965 40.857855 68.947631-321.755611c17.875312-86.822943 58.733167-132.78803 122.573566-120.01995 51.072319 10.214464 74.054863 53.625935 79.162094 84.269327 2.553616 12.76808 0 28.089776-2.553616 40.857855l-76.608478 354.952619 186.413965 40.857855 86.822942-406.024938C843.970075 257.59601 938.453865 232.05985 938.453865 232.05985l-181.306733-38.304239c-53.625935-12.76808-89.376559 84.269327-89.376558 84.269327H665.216958c-15.321696-40.857855-33.197007-109.805486-165.985038-137.895262-10.214464-2.553616-17.875312-2.553616-28.089775-5.107232l56.179551-263.022444c273.236908 12.76808 492.84788 237.486284 492.84788 513.276808z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="unkown" unicode="&#59550;" d="M0 832A64 64 0 0 0 64 896h896a64 64 0 0 0 64-64v-896a64 64 0 0 0-64-64H64a64 64 0 0 0-64 64V832z m592.736-161.44c-27.488 13.76-59.232 20.64-95.232 20.64-38.592 0-72.448-8.192-101.44-24.672-29.024-16.384-51.104-37.184-66.208-62.272-15.168-25.088-22.688-49.824-22.688-74.24 0-11.776 4.768-22.784 14.336-32.928 8.512-9.376 20.736-15.2 34.304-15.2h0.864-0.032c23.552 0 39.52 14.496 47.936 43.52 8.96 27.808 19.872 48.8 32.768 63.072 12.864 14.272 32.928 21.408 60.224 21.408 23.296 0 42.336-7.104 57.088-21.248s22.112-31.488 22.112-52.032c0-10.56-2.4-20.32-7.264-29.28-4.768-8.96-10.752-17.216-17.856-24.512-7.008-7.328-18.496-18.176-34.368-32.576a619.84 619.84 0 0 1-43.168-42.592c-10.496-11.84-19.104-25.632-25.248-40.704l-0.352-0.96c-6.496-15.776-9.728-34.496-9.728-56.064 0-17.216 4.416-30.208 13.216-38.912 8.8-8.768 19.648-13.152 32.576-13.152 24.768 0 39.52 13.376 44.224 40.128 2.72 12.544 4.768 21.344 6.144 26.432A78.272 78.272 0 0 0 552.064 356c5.12 6.048 11.84 13.056 20.288 20.992a2337.664 2337.664 0 0 1 63.584 60.576l-0.224-0.192a176.32 176.32 0 0 1 30.528 42.56c8.512 16.48 12.8 35.648 12.8 57.504 0 27.744-7.52 53.44-22.528 77.12-14.944 23.616-36.192 42.336-63.744 56.064z m-99.68-463.712c-34.24 0-62.016-28.576-62.016-63.744 0-35.232 27.744-63.744 62.016-63.744s62.016 28.512 62.016 63.744c0 35.168-27.744 63.744-62.016 63.744z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="MPtubiao" unicode="&#59551;" d="M192 512h640a42.667 42.667 0 0 0 42.667-42.667v-362.666A42.667 42.667 0 0 0 832 64H192v-106.667A21.333 21.333 0 0 1 213.333-64h725.334A21.333 21.333 0 0 1 960-42.667V587.18l-10.09 10.154H823.38a98.048 98.048 0 0 0-98.048 98.048V823.34L716.715 832H213.333A21.333 21.333 0 0 1 192 810.667V512z m-64-448H42.667A42.667 42.667 0 0 0 0 106.667V469.333A42.667 42.667 0 0 0 42.667 512H128V810.667A85.333 85.333 0 0 0 213.333 896H743.36L1024 613.547v-656.214A85.333 85.333 0 0 0 938.667-128H213.333A85.333 85.333 0 0 0 128-42.667V64zM88.064 423.51v-274.177h40.619V338.261h1.386l72.875-188.928h35.072l72.875 188.928h1.386v-188.928h40.619V423.51h-47.573l-83.968-215.04h-1.408l-84.331 215.04H88.064z m313.43 0v-274.177h40.597V254.55h61.44c60.373 0 90.581 28.416 90.581 84.864 0 56.064-30.187 84.096-89.899 84.096h-102.72z m40.597-38.4h59.008c17.706 0 30.89-3.457 39.21-10.753 8.32-6.912 12.843-18.432 12.843-34.944 0-16.512-4.16-28.416-12.48-35.712-8.32-6.912-21.525-10.752-39.573-10.752H442.09v92.16z m290.176 38.4l-121.152-172.8v-42.625h119.744v-58.752h38.528v58.752h36.8v35.712h-36.8V423.51h-37.12z m-2.432-56.833h1.024v-122.88h-86.763l85.739 122.88z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file2" unicode="&#59552;" d="M891.603 417.792l-194.38-194.32a174.08 174.08 0 0 0-246.241 246.183l153.48 153.48a53.79 53.79 0 0 0 76.076-76.078l-153.48-153.48a66.5 66.5 0 1 1 94.088-94.087l194.38 194.38a138.662 138.662 0 1 1-196.187 196.186L238.532 309.24800000000005a138.722 138.722 0 0 1 196.126-196.247l32.949 32.95c49.995 43.308 122.458-19.638 76.077-76.078l-32.949-32.949a246.362 246.362 0 0 0-348.22 348.401l380.747 380.808a246.242 246.242 0 1 0 348.34-348.28z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="access" unicode="&#59553;" d="M590.336 895.488L16.896 786.432c-9.728-2.048-16.896-10.752-16.896-20.48v-763.904c0-9.728 7.168-18.432 16.896-20.48l573.44-109.056c1.024 0 2.56-0.512 3.584-0.512 4.608 0 9.216 1.536 12.8 4.608 4.608 4.096 7.68 9.728 7.68 15.872V875.52c0 6.144-3.072 12.288-7.68 15.872-4.608 4.096-10.752 5.12-16.384 4.096zM750.592 752.64c-32.768 0-65.024-1.536-95.232-5.12v-132.096c34.304-4.096 69.12-6.144 103.936-6.144 171.52 0 264.704 44.544 264.704 67.072v7.68c-1.536 24.576-104.96 68.608-273.408 68.608zM1024 619.52c-55.808-33.792-160.768-51.2-265.216-51.2-35.84 0-70.656 2.048-103.424 5.632V404.48c32.768-4.096 68.096-5.632 103.936-5.632 171.52 0 264.704 44.544 264.704 67.072V619.52zM335.36 591.872c39.936-133.632 78.336-268.288 117.76-401.92-27.648 2.048-55.296 4.096-82.432 6.656-7.168 29.696-14.848 59.904-23.04 89.6-36.864 0-73.728 1.536-110.08 3.072-7.168-28.16-13.824-56.32-20.992-84.48-23.552 2.048-47.104 3.072-70.656 4.608 34.816 125.44 71.68 251.392 106.496 376.832 27.648 2.048 54.784 3.584 82.944 5.632z m-45.056-71.168c-8.192-56.832-25.6-111.104-37.888-166.912 26.112 0 52.224-0.512 78.848-0.512-13.312 55.808-30.208 111.104-40.96 167.424zM1024 409.088c-55.808-33.792-160.768-51.2-265.216-51.2-35.84 0-70.656 2.048-103.424 5.632v-157.696c34.304-4.096 69.12-6.144 103.936-6.144 171.52 0 264.704 44.544 264.704 67.072V409.088z m0-199.168c-55.808-33.792-160.768-51.2-265.216-51.2-35.84 0-70.656 2.048-103.424 5.632V20.48c30.72-3.584 62.464-5.12 95.232-5.12 169.472 0 273.408 44.544 273.408 69.12V209.92z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="denghao" unicode="&#59543;" d="M716.69248 481.41312v-0.256a38.43584 38.43584 0 0 0 0-76.71296v-0.05632h-1.09568c-0.45568 0-0.90112-0.07168-1.3568-0.07168s-0.90112 0.0512-1.3568 0.07168h-422.2464c-0.45568 0-0.90112-0.07168-1.3568-0.07168s-0.90112 0.0512-1.3568 0.07168h-0.8192v0.04096a38.43584 38.43584 0 0 0 0 76.73856v0.24576h429.568z m-429.568-205.04576v0.24576h429.568v-0.256a38.43584 38.43584 0 0 0 0-76.71296v-0.05632h-1.1008c-0.45568 0-0.896-0.06656-1.35168-0.06656s-0.896 0.0512-1.35168 0.06656H290.63168c-0.45056 0-0.896-0.06656-1.35168-0.06656s-0.896 0.0512-1.35168 0.06656h-0.82432v0.04096a38.43072 38.43072 0 0 0 0 76.73856z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="activemq" unicode="&#59506;" d="M503.53084324 169.87761694999995l-101.51941817 58.03213642a31.40952577 31.40952577 0 0 1-0.95738225 12.66691329l104.64932303 59.79961353 36.23326276-63.37138832-38.36896352-67.12727492z m-3.31401797-5.89158867l-38.07438488-66.64858314h-164.59622524l-79.83101136 139.66744673 79.83101136 139.66744674h74.78633811v-120.40932064c-9.31607217-2.5775694-19.9209297-11.63588476-19.92092969-24.2659762 0-14.94990273 9.94205392-24.9287798 24.9287798-24.92877981 10.93625932 0 19.18448241 5.33925061 22.82990088 13.99252049l100.00969787-57.07475417z m22.68261219-5.15513879l38.95812215 68.19512533h79.83101005v-120.07791756a23.23494768 23.23494768 0 0 1-14.36074411-7.80635315l-104.42838809 59.65232355z m-3.38766294-5.9284092l104.28109808-59.57867856a27.98504096 27.98504096 0 0 1-2.06205577-10.93625933c0-14.94990273 9.94205392-24.9287798 24.9287798-24.9287798 14.94990273 0 24.9287798 9.94205392 24.9287798 24.9287798 0 14.94990273-9.94205392 24.9287798-24.9287798 24.92877851v119.70969391h74.82316125l79.79418952-139.66744545-79.79418952-139.63062489h-154.65417132v-5.00784881l-84.76521517 144.6384737 37.44840313 65.54391092z m-18.52167883 451.22195826l35.93868411-62.89269654-36.23326277-65.65437906-99.27325057 58.51082949a29.82616178 29.82616178 0 0 1 0.51551492 11.6727066l99.05231431 58.36353951z m-4.56598017 8.02728814l-98.27904389-56.15419377c-4.27140151 6.40710098-11.59906291 10.19981074-20.80466826 10.19981073-9.97887578 0-24.9287798-9.97887578-24.9287798-24.96560164 0-13.21925005 7.76953132-22.53532223 19.92092969-24.52373302v-120.11474069h-74.78633811l-79.83101136 144.63847371 79.83101136 139.66744674h159.58837643l39.28952394-68.74746206z m25.88616205-291.78087181l-40.24690618 66.2803595 39.32634577 68.82110705 102.32951045-60.31512715a21.83569679 21.83569679 0 0 1-1.98841078-8.54280175 29.82616178 29.82616178 0 0 1 0.84691671-7.14355087l-100.26745597-59.09998678z m4.71327015-7.80635317l100.34109967 57.33251097a23.23494768 23.23494768 0 0 1 14.32392227-7.80635317v-115.10689186H566.86540842l-39.8418607 65.58073406z m-8.02728811 312.47507193l-36.93288822 60.83064206 79.79418822 139.66744544h159.62519827l84.80203833-139.66744544-79.83101136-139.63062488h-79.79418822V660.90461276c14.94990273 0 24.9287798 9.97887578 24.9287798 24.92877981 0 14.98672588-9.94205392 24.96560165-24.9287798 24.96560165-14.94990273 0-24.9287798-9.97887578-24.9287798-24.96560165 0-0.69962544 0-1.39925218 0.07364498-2.09887762l-102.8082022-58.73176315z m4.6028033-7.58541821l99.71511921 58.76858501a22.57214409 22.57214409 0 0 1 18.37438754-14.87625775v-115.10689187H566.86540842l-43.26634551 71.21456461z m-22.27756542-309.41881206l-103.39736083-60.94110759c-4.30822337 6.18616732-11.52541793 9.86840894-20.62055644 9.86840892V376.63551545999997h84.83886017l39.1790571-68.60017209z m-3.90317658 161.57678723l-40.28372933-73.0188623h-79.79418821v119.7096939c9.7579421 0 17.41700529 4.23457839 21.54111683 11.37812795l98.53680071-58.06895955z m27.35905922-8.21139995l37.08017948 64.88110732h79.83101005v-115.25418055a25.77569522 25.77569522 0 0 1-14.54485594-9.94205392l-102.36633359 60.31512715z m121.8822165 64.88110732h74.82316125l84.80203833-139.66744544-79.83101136-139.63062488h-79.79418822v114.70184509c14.94990273 0 24.9287798 9.97887578 24.9287798 24.92877979 0 14.98672588-9.94205392 24.96560165-24.9287798 24.96560165v114.70184379z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="oracle1" unicode="&#59542;" d="M668.03306667 355.2192h97.15413333l-51.3184 82.71146667-94.2144-149.5104-42.93013333-0.03413334 114.67626666 179.53706667a26.7616 26.7616 0 0 0 22.39786667 11.6896c9.02933333 0 17.312-4.25813333 22.20053333-11.37386667l115.072-179.8528-42.96533333 0.03413334-20.1472 33.42293333h-98.448l-21.4656 33.376z m445.7184-33.4112V477.74613333h-36.432v-171.18506666c0-4.736 1.92426667-9.26293333 5.30773333-12.64533334 3.57013333-3.53493333 8.28266667-5.48266667 13.34613333-5.48266666h166.016l21.41866667 33.3632h-169.65653333z m-602.30933334 27.90506667a64.0224 64.0224 0 0 1 0 128.03306666H352.10986667v-189.32586666h36.3968V444.38186667h120.42666666a30.59946667 30.59946667 0 0 0 30.63466667-30.6464 30.62293333 30.62293333 0 0 0-30.63466667-30.65813334l-102.60053333 0.0352 108.64426667-94.69226666h52.8928l-73.09866667 61.328 16.672-0.0352z m-383.3984-61.2928a94.656 94.656 0 1 0 0 189.32586666h110.04373334a94.6688 94.6688 0 0 0 94.656-94.6688 94.6688 94.6688 0 0 0-94.656-94.6912l-110.0448 0.03413334z m107.5936 33.36533333a61.26933333 61.26933333 0 0 1 61.28 61.29173333 61.26933333 61.26933333 0 0 1-61.28 61.2928h-105.15626666a61.30453333 61.30453333 0 0 1 0-122.58453333h105.15626666z m691.38986667-33.36533333a94.6688 94.6688 0 1 0 0 189.32586666h130.77546667l-21.4304-33.376H929.48906667a61.30453333 61.30453333 0 1 1 0-122.58453333h131.25333333l-21.38453333-33.36533333h-112.34133334z m445.34506667 33.36533333a61.26933333 61.26933333 0 0 0-58.93546667 44.53973333h155.6224l21.42933333 33.376-177.09866666 0.01173334a61.2928 61.2928 0 0 0 58.9824 44.6688l106.82453333-0.01066667 21.4656 33.376H1369.888a94.6688 94.6688 0 0 1 0-189.32693333h112.34133333l21.38453334 33.36533333h-131.2416z m147.78346666 135.8016a16.70613333 16.70613333 0 1 0 33.43466667 0 16.70613333 16.70613333 0 1 0-33.43466667 0z m16.72853334-21.34826667z m-2.00533334 33.91253334c3.27786667 0 4.6304-0.03413333 6.24-0.64106667 4.20053333-1.41226667 4.63146667-5.2736 4.63146667-6.6848a9.33333333 9.33333333 0 0 0-0.256-1.95946667 6.49813333 6.49813333 0 0 0-2.9632-4.096c-0.24533333-0.1856-0.38506667-0.30186667-1.07306667-0.55893333l5.54133334-9.91573333h-5.35466667l-4.85333333 9.12213333h-3.232v-9.1104h-4.6656v23.84426667h5.984z m1.6672-10.77866667c1.43573333 0.02346667 3.0336 0.128 3.96693334 1.49333333a3.54666667 3.54666667 0 0 1 0.53653333 2.0416 3.14986667 3.14986667 0 0 1-1.79626667 2.8928c-1.07306667 0.42026667-2.17066667 0.42026667-4.37546666 0.42026667h-1.3184v-6.848h2.98666666z"  horiz-adv-x="1536" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wukuangrocketmq-copy" unicode="&#59510;" d="M234.877 192.608l-64.458-61.121-15.284-84.375c0 0 0.186 0 123.599 0-44.956 64.91-43.857 145.496-43.857 145.496zM514.636 876.76v0.808c-0.112-0.135-0.221-0.269-0.332-0.404-0.111 0.135-0.221 0.269-0.332 0.404v-0.808c-407.105-493.848-190.050-832.969-190.050-832.969l60.47 35.211h259.824l60.47-35.211c0 0 217.054 339.121-190.050 832.969zM678.771 135.473h-164.134c0 0-0.229 0-0.664 0h-164.135c-111.057 332.718 153.793 643.664 164.467 656.010 10.674-12.345 275.524-323.292 164.467-656.010zM858.188 131.487l-64.458 61.122c0 0 1.099-80.586-43.857-145.496 123.412 0 123.599 0 123.599 0l-15.284 84.375zM513.972-113.094v-0.57c0 0 0.121 0.101 0.332 0.283 0.211-0.181 0.332-0.283 0.332-0.283v0.57c7.021 6.118 68.358 62.066 77.748 156.884h-156.16c9.39-94.819 70.728-150.766 77.748-156.884zM469.117 365.343c-7.156 0-12.958-5.8-12.958-12.955s5.801-12.956 12.958-12.956c7.157 0 12.958 5.8 12.958 12.956s-5.801 12.955-12.958 12.955zM506.33 365.343c-7.157 0-12.958-5.8-12.958-12.955s5.801-12.956 12.958-12.956 12.958 5.8 12.958 12.956-5.802 12.955-12.958 12.955zM542.214 365.343c-7.157 0-12.958-5.8-12.958-12.955s5.801-12.956 12.958-12.956 12.958 5.8 12.958 12.956-5.802 12.955-12.958 12.955zM608.997 276.318c-5.636 0-11.089-0.78-16.259-2.237l-14.787 17.745c10.235 12.374 29.204 46.724 17.755 83.483-3.013 9.568-8.227 22.146-17.123 33.868l12.862 11.265c6.112-2.952 12.967-4.607 20.21-4.607 25.69 0 46.516 20.822 46.516 46.505 0 25.684-20.826 46.505-46.516 46.505s-46.516-20.821-46.516-46.505c0-6.068 1.164-11.864 3.278-17.179l-15.345-13.439c-11.678 6.61-26.248 11.006-44.417 11.352-20.455-1.252-37.566-5.358-51.821-13.911l-16.634 20.226c0.869 2.835 1.339 5.846 1.339 8.965 0 16.878-13.685 30.56-30.567 30.56s-30.567-13.683-30.567-30.56c0-16.879 13.685-30.561 30.567-30.561 0.9 0 1.789 0.047 2.669 0.123l18.005-22.766c-4.719-6.814-8.938-14.718-12.7-23.863-5.808-18.663-6.952-37.133-1.254-57.046l-0.075-0.090c1.474-5.83 3.597-11.173 5.871-15.831l-13.256-11.592c-4.374 1.828-9.174 2.841-14.211 2.841-20.368 0-36.88-16.508-36.88-36.873s16.511-36.872 36.88-36.872 36.88 16.508 36.88 36.872c0 3.696-0.55 7.261-1.562 10.627l9.842 8.606c9.711-7.886 32.871-23.717 62.158-23.551 10.812-0.349 23.271 0.952 36.61 6.395l16.459-19.752c-4.602-8.472-7.217-18.18-7.217-28.498 0-33.022 26.776-59.792 59.806-59.792 33.030 0 59.806 26.77 59.806 59.792-0.001 33.023-26.777 59.794-59.806 59.794zM551.849 294.256c-27.092-19.223-70.561-22.928-100.439 11.828 0.033 0.045 0.065 0.086 0.097 0.131-0.651 0.651-1.272 1.333-1.879 2.031-0.279 0.346-0.55 0.666-0.817 0.964-6.773 8.266-10.664 19.122-12.694 26.513l-2.552 16.333c0 0-0.222 48.942 42.528 67.101 22.815 9.966 65.786 15.281 94.361-29.232 13.956-25.246 18.607-64.444-18.606-95.669z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="huawei" unicode="&#59529;" d="M578.96647033 780.63773924C578.96647033 780.63773924 491.40472875 784.62309101 435.56838928 712.45585906 379.70439557 640.29009789 421.65770221 530.06054454 448.14239837 473.20088957 474.62709372 416.33976381 614.37465415 193.21297094 619.50934997 188.30260299999998 624.60409787 183.38782683 630.74206683 185.45256300999995 631.07700591 189.86880570999995 631.41501678 194.25122179000005 647.03880722 514.0750168899999 634.4647973 592.93646413 621.89079233 671.79791218 584.66041997 771.98761259 578.96647033 780.63773924L578.96647033 780.63773924ZM276.34217703 631.95762334C266.33397955 630.88701912 194.50357604 559.25508886 188.03220307 489.22171218 181.52549145 419.19127626 211.50245486 372.58471145 295.19858053 316.83095646000004 379.4493507 257.08743569 579.6793674 147.17994517 583.3560039 156.64919982000004 587.03878725 166.08904515999996 505.767122 310.49703892 439.25731867 415.52504572 372.75212381 520.5530525300001 286.30581891 633.02528596 276.34217703 631.95762334L276.34217703 631.95762334ZM303.26936074-14.03711826999995C363.86550821-41.130162309999946 458.26429033 19.716316060000054 484.37870962 37.41216202999999 508.66479846 55.962431779999974 553.52346347 90.07028724999998 553.52346347 90.07028724999998L210.16731195 80.88485807999996C210.16731195 80.88485807999996 242.67321247 13.058866530000046 303.26936074-14.03711826999995L303.26936074-14.03711826999995ZM311.89478546 263.42428986000004C250.44285468 294.18356690999997 124.01446148 364.85518690000004 119.0687467 363.50222636 114.1230311 362.15367656 95.07764984 274.24503755 134.61571469 207.98818533999997 174.15377953 141.73280476000002 251.15267832 121.47368830000005 286.48865228 116.06037370000001 326.21876831 110.39705202000005 559.8120039 112.93091317999995 558.24486023 117.62657228 556.86977185 121.72369128000003 373.38205405 232.69737031 311.89478546 263.42428986000004L311.89478546 263.42428986000004ZM881.56157104 712.45438826C825.72830417 784.62162105 738.16810178 780.63626845 738.16810178 780.63626845 732.47876308 771.98761259 695.24224472 671.79791218 682.66823479 592.93499333 670.09422983 514.07354609 685.75796325 194.24974934 686.09443823 189.86733327000002 686.43244827 185.45256300999995 692.52893835 183.38635438999995 697.65594732 188.30113469000003 702.7522311 193.21297094 842.54127618 416.33829302 869.02597317 473.19941877 895.4722573 530.06054454 937.42710229 640.28862709 881.56157104 712.45438826L881.56157104 712.45438826ZM1198.06275116 363.50222636C1193.11703473 364.8566577 1066.6901799 294.18356690999997 1005.23671157 263.42428986000004 943.78631915 232.69737031 760.26480027 121.72515958999998 758.92043707 117.62657228 757.3241041 112.93091317999995 990.91733803 110.39705202000005 1030.64591818 116.06037370000001 1065.98035461 121.47368830000005 1142.97618243 141.73280476000002 1182.51731988 207.98818533999997 1222.09225759 274.24503755 1203.00693169 362.15367656 1198.06275116 363.50222636L1198.06275116 363.50222636ZM832.7573959 37.41216202999999C858.86874587 19.716316060000054 953.30900854-41.130162309999946 1013.9051593-14.03711826999995 1074.50130511 13.060334860000012 1107.01027988 80.88485807999996 1107.01027988 80.88485807999996L763.65259165 90.07028724999998C763.65259165 90.07028724999998 808.51125664 55.960964279999985 832.7573959 37.41216202999999L832.7573959 37.41216202999999ZM1129.1453863 489.22171218C1122.6325303 559.25508886 1050.80827365 630.88701912 1040.83541479 631.95762334 1030.8318258 633.02528596 944.38398089 520.5530525300001 877.88032358 415.52357493 811.36898352 310.49556648 730.09732074 166.0875727 733.78163998 156.64773148999996 737.46749428 147.17994517 937.72670522 257.08743569 1021.94059924 316.82948403 1105.63365148 372.58471145 1135.65209955 419.19127626 1129.1453863 489.22171218L1129.1453863 489.22171218Z"  horiz-adv-x="1332" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="Redis-" unicode="&#59530;" d="M936.2576 254.2224a8.424 8.424 0 0 0-4.44-4.2l-416.8176-165.6624c-0.96-0.4224-2.04-0.6-3.12-0.6s-2.16 0.24-3.12 0.6L92 250.02239999999995a8.4336 8.4336 0 0 0-4.44 4.2 7.8576 7.8576 0 0 1-0.84-3.5424c0.0576-3.4224 0.0576-114.6624 0-118.0224 0-3.4176 2.1024-6.4176 5.28-7.68l416.8224-165.6576c0.96-0.36 2.04-0.6 3.12-0.6 1.08 0 2.16 0.1824 3.12 0.6l416.8176 165.6576a8.5584 8.5584 0 0 1 5.3424 7.68c-0.0624 3.4224-0.0624 114.6576 0 118.0224a10.08 10.08 0 0 1-0.9648 3.5424zM936.2576 448.08a8.424 8.424 0 0 0-4.44-4.2l-416.8176-165.6576c-0.96-0.4224-2.04-0.6-3.12-0.6s-2.16 0.24-3.12 0.6L92 443.9424a8.4336 8.4336 0 0 0-4.44 4.2 8.352 8.352 0 0 1-0.9024-3.5424c0.0576-3.4224 0.0576-114.6576 0-118.0176 0.0576-3.4224 2.16-6.48 5.3424-7.7424l416.8224-165.6576c0.96-0.36 2.04-0.6 3.12-0.6 1.08 0 2.16 0.1824 3.12 0.6l416.8176 165.6576a8.5584 8.5584 0 0 1 5.3424 7.68c-0.0624 3.4224-0.0624 114.6624 0 118.0224a10.0512 10.0512 0 0 1-0.9648 3.5376zM937.16 635.4a8.3952 8.3952 0 0 1-5.3424 7.68L515 808.8c-0.96 0.36-2.04 0.6-3.12 0.6s-2.16-0.1824-3.12-0.6L92 643.1376c-3.1776-1.2576-5.28-4.32-5.3424-7.7376 0.0576-3.4176 0.0576-114.6576 0-118.0224a8.544 8.544 0 0 1 5.3424-7.7424l416.8224-165.6576c0.96-0.36 2.04-0.6 3.12-0.6 1.08 0 2.16 0.1824 3.12 0.6l416.8176 165.6576a8.5632 8.5632 0 0 1 5.3424 7.68c-0.1824 3.4224-0.1824 114.6624-0.0624 118.0848zM369.44 707.9376l79.2576 15.24-16.8576 33.84a1.728 1.728 0 0 0 0.24 1.9824c0.48 0.48 1.2576 0.6624 1.92 0.4176l67.44-26.04 79.6224 15.36a1.8144 1.8144 0 0 0 1.92-0.96 1.8192 1.8192 0 0 0-0.4224-2.16l-35.4576-29.88 66.6-25.7424c0.84-0.3024 1.2576-1.2 1.08-2.04a1.776 1.776 0 0 0-1.8576-1.32L520.64 693.4224l-38.3424-32.3424a1.5888 1.5888 0 0 0-1.1424-0.4176c-0.12 0-0.24 0-0.36 0.0624a1.6368 1.6368 0 0 0-1.2 0.9024l-18.12 36.12-91.8 6.72a1.7568 1.7568 0 0 0-1.6224 1.68 1.6656 1.6656 0 0 0 1.3872 1.7904z m-66.5376-118.56c-26.8224 0-52.2624 4.3776-71.64 12.24-19.44 7.9824-30.12 18.5376-30.0576 29.76 0.0576 10.7376 10.0224 20.5776 28.08 27.6624 17.0976 6.72 39.9024 10.44 64.32 10.44 26.3424 0 51.48-4.2 70.68-11.88 19.9824-7.92 30.96-18.6 31.0224-30 0.0624-10.56-9.5376-20.28-26.9376-27.36-17.232-7.0176-40.4496-10.8624-65.4672-10.8624z m270.3552-15.2976l-42.7776-81.48a1.7328 1.7328 0 0 0-1.56-0.96c-0.24 0-0.4224 0.0576-0.6576 0.12L376.9424 553.4975999999999a1.8096 1.8096 0 0 0-1.08 1.92 1.8528 1.8528 0 0 0 1.56 1.4976l194.16 19.68a1.7952 1.7952 0 0 0 1.6224-0.7776c0.3552-0.4752 0.3552-1.1952 0.0528-1.7376zM822.56 628.8624l-104.4-42.9024c-0.24-0.0576-0.4176-0.12-0.6576-0.12-0.24 0-0.48 0.0624-0.6576 0.12l-118.8 48.9024c-0.6 0.2976-1.08 0.96-1.0224 1.68 0 0.72 0.4224 1.3776 1.08 1.6176l104.88 41.64a1.6608 1.6608 0 0 0 1.32 0L822.56 632.1600000000001c0.6576-0.24 1.08-0.9024 1.08-1.6176 0-0.7824-0.4176-1.4448-1.08-1.68z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="aliyun" unicode="&#59531;" d="M209.72373333 223.59786667000003c-19.47093333 4.5184-34.44586667 21.08053333-34.44586666 42.16106666V497.648c1.4976 21.0816 14.97706667 37.64373333 34.44586666 42.16213333l214.16533334 46.67733334 22.46613333 91.8528H197.74293333c-88.3616 0-158.752-70.77013333-158.752-158.10666667v-274.0512c0-87.3344 71.888-159.61173333 158.752-159.61173333h248.61226667l-22.46506667 91.8528-214.1664 45.1744z m623.03146667 454.74453333H582.64106667l22.46613333-91.85173333 214.17066667-46.6784c19.46986667-4.51946667 34.43946667-21.0816 34.43946666-42.16106667V265.76c-1.49333333-21.08053333-14.97066667-37.64266667-34.43946666-42.16106667l-214.17066667-46.67946666-22.46613333-91.85066667h250.11413333c86.86506667 0 158.752 70.77013333 158.752 159.61066667V520.2368c-1.504 87.33546667-71.88693333 158.1056-158.752 158.1056zM423.88906667 393.74933333H606.60266667v-22.5856H423.88906667V393.74933333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="mongoDB" unicode="&#59535;" d="M535.32444445-125.61066667l-27.30666667 9.10222222s3.52711111 138.35377778-46.42133333 148.0248889c-32.88177778 38.11555555 5.12 1628.72888889 124.58666666 5.46133333 0 0-40.96-20.59377778-48.69688889-55.40977778-7.73688889-35.04355555-2.16177778-107.17866667-2.16177777-107.17866667zM550.11555555 7.964444449999974S787.68355555 164.40888888999996 732.04622222 489.35822222C678.34311111 725.44711111 551.82222222 803.04355555 538.28266667 832.73955555c-15.01866667 20.93511111-30.03733333 58.14044445-30.03733334 58.14044445l10.12622222-657.74933333c-0.11377778-0.11377778-20.93511111-200.93155555 31.744-225.16622222zM494.13688889-0.7964444499999672S271.24622222 151.21066667000002 284.10311111 419.38488889C296.96 687.67288889 454.31466667 819.65511111 484.92088889 843.54844445c19.79733333 21.16266667 20.59377778 29.24088889 22.18666666 50.06222222 13.88088889-29.80977778 11.60533333-445.66755555 13.08444445-494.25066667 5.68888889-189.21244445-10.46755555-364.43022222-26.05511111-400.15644445z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="rabbitmq" unicode="&#59536;" d="M870.59375 463.48828098h-249.25781277c-19.93359375 2.39062473-35.12109375 19.93359375-35.12109375 40.60546875v261.5625A40.18359375 40.18359375 0 0 1 546.03124973 805.875h-87.22265625c-22.32421848 0-40.25390598-18.10546848-40.25390598-40.25390598v-264.3046875c-1.08984402-19.93359375-17.54296902-36.00000027-37.30078098-37.82812554H315.96875027A40.74609402 40.74609402 0 0 0 280.67187473 501.35156223V765.62109402C280.67187473 787.9453125 262.56640625 805.875 240.45312527 805.875H153.1953125C130.90624973 805.875 112.97656223 787.76953152 112.97656223 765.62109402v-763.24218804C112.97656223-19.9453125 131.08203152-37.875 153.1953125-37.875h717.57421848c22.32421848 0 40.21875027 18.10546848 40.21875027 40.25390598V423.234375A40.35937473 40.35937473 0 0 1 870.59375 463.48828098z m-114.82031223-288.63281223c0-22.32421848-18.10546848-40.25390598-40.21875027-40.25390598h-87.22265625a40.21875027 40.21875027 0 0 0-40.21875027 40.25390598v82.30078152c0 22.32421848 18.10546848 40.25390598 40.21875027 40.25390598h87.22265625c22.32421848 0 40.21875027-18.10546848 40.21875027-40.25390598v-82.30078152z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="sap" unicode="&#59537;" d="M0 637.269333v-506.538666h517.546667L1024 637.269333z m139.264-94.208h0.213333c36.821333-0.042667 81.706667-10.453333 114.176-27.008l-34.986666-61.013333c-35.626667 17.237333-53.546667 18.858667-73.813334 19.925333-30.208 1.621333-45.397333-9.173333-45.610666-20.821333-0.298667-14.165333 28.544-27.008 55.68-35.754667 41.130667-13.056 93.44-30.506667 101.418666-81.066666L331.52 536.021333h87.296l88.064-237.909333-0.298667 237.866667h101.12c96.298667 0 141.568-32.597333 141.568-107.477334 0-67.2-46.506667-107.264-125.269333-107.264h-32.554667l-0.426666-89.344-153.088 0.128-10.666667 38.741334c-15.786667-5.205333-33.578667-8.064-52.48-8.064-19.456 0-37.76 3.029333-53.888 8.533333l-15.274667-39.210667-85.333333-0.256 3.84 19.712c-1.237333-1.066667-2.432-2.133333-3.712-3.157333-22.826667-18.346667-51.541333-26.837333-86.912-27.477333l-9.088-0.085334a216.533333 216.533333 0 0 0-110.122667 28.8l31.146667 61.781334c33.706667-19.925333 54.869333-24.405333 83.456-23.808 14.805333 0.298667 25.514667 2.986667 32.469333 10.197333a23.765333 23.765333 0 0 1 6.656 15.744c0.298667 16.042667-22.613333 23.594667-50.56 32.256-22.656 6.997333-48.426667 16.597333-68.522666 31.36-23.850667 17.493333-35.2 39.424-34.645334 70.4a84.906667 84.906667 0 0 0 24.149334 58.752c22.144 22.912 57.898667 36.821333 100.821333 36.821333z m452.138667-71.253333v-81.237333h22.229333c29.610667 0 53.205333 9.813333 53.248 41.130666 0 30.250667-23.637333 40.106667-53.248 40.106667z m-217.045334-32.725333l-31.914666-100.778667c9.514667-3.626667 20.522667-5.674667 32.298666-5.674667 11.434667 0 22.186667 2.005333 31.658667 5.376l-31.402667 101.12z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="salesforce" unicode="&#59538;" d="M498.66875 403.425h-49.40625c1.29375 9.675 6.225 26.475 25.575 26.475 12.65625 0 22.44375-7.1625 23.83125-26.475z m256.2375 26.025c-0.88125 0-26.45625 3.31875-26.45625-37.5s25.55625-37.5 26.45625-37.5c24.375 0 26.45625 25.3875 26.45625 37.5 0 40.8-25.6125 37.5-26.45625 37.5z m-456.0375-44.55a16.18125 16.18125 0 0 1-6.16875-13.66875c0-8.9625 3.9-11.34375 6.16875-13.21875 8.8125-6.9375 28.25625-3.975 39.24375-1.78125v31.7625c-9.975 2.00625-31.36875 3.675-39.24375-3.09375zM1232 429c0-164.2125-150-289.48125-310.05-255.80625-34.44375-61.875-132.61875-132.65625-247.875-78.05625-77.175-180.09375-333.54375-172.8375-400.89375 9.69375C48.70625 60.03750000000002-62.10625 364.275 132.05 478.48125 66.89375 627.4125 174.5 804 346.38125 804a232.95 232.95 0 0 0 184.8-91.3125c38.8125 40.125 92.625 65.26875 152.15625 65.26875 79.3875 0 148.125-44.1 185.25-109.81875C1042.625 744.4125 1232 615.20625 1232 429z m-974.15625-59.625c0 22.05-21.91875 28.44375-33.50625 32.19375-9.88125 3.95625-25.14375 6.58125-25.14375 16.7625 0 17.7375 31.875 12.4875 47.19375 3.975 0 0 2.19375-1.33125 3.075 0.88125 0.45 1.3125 4.425 12.3375 4.85625 13.66875a2.11875 2.11875 0 0 1-1.3125 2.64375c-23.11875 14.30625-76.3125 15.95625-76.3125-23.8125 0-23.3625 21.54375-28.95 33.525-32.19375 8.85-2.9625 24.69375-5.625 24.69375-16.3125 0-7.5-6.61875-13.2375-17.19375-13.2375a59.55 59.55 0 0 0-35.625 11.90625c-0.88125 0.43125-2.6625 1.33125-3.09375-1.33125l-4.5-14.00625c-0.88125-1.7625 0.43125-2.2125 0.43125-2.64375 3.28125-2.625 19.3125-12.35625 42.7875-12.35625 24.69375 0 40.125 13.2375 40.125 33.95625z m60 79.8375c-18.99375 0-34.9875-5.94375-40.125-9.7125a1.875 1.875 0 0 1-0.45-2.64375l4.85625-13.2375a1.875 1.875 0 0 1 2.2125-1.3125c1.21875 0 12.75 7.5 31.74375 7.5 7.5 0 13.2375-1.33125 17.2125-4.425 6.75-5.25 5.7375-15.54375 5.7375-19.8375-8.98125 0.5625-35.83125 6.45-55.14375-7.05a31.725 31.725 0 0 1-13.7625-27.2625c0-11.0625 2.83125-19.5 12.35625-26.90625 22.95-15.3 68.025-3.75 71.4375-2.64375 2.9625 0.6 6.61875 1.2375 6.61875 3.525v63.525c0.075 8.64375 0.6 40.575-42.7125 40.575zM405.125 488.55a2.08125 2.08125 0 0 1-2.2125 2.2125H384.5a2.08125 2.08125 0 0 1-2.19375-2.2125v-148.125a2.08125 2.08125 0 0 1 2.19375-2.2125h18.525a2.08125 2.08125 0 0 1 2.2125 2.2125z m104.53125-54.24375c-3.9375 4.33125-12.73125 14.11875-33.09375 14.11875-6.58125 0-26.55-0.43125-38.8125-16.7625-11.90625-14.30625-12.3375-33.95625-12.3375-40.14375 0-5.85 0.28125-26.7375 13.2375-39.69375 4.95-5.45625 16.9875-15.43125 42.76875-15.43125 20.2875 0 30.88125 4.40625 34.8375 7.05 0.88125 0.45 1.33125 1.33125 0.45 3.525l-4.40625 12.80625a2.3625 2.3625 0 0 1-2.64375 1.3125c-4.85625-1.7625-11.90625-5.2875-28.66875-5.2875-32.6625 0-31.59375 27.6375-31.7625 31.3125h69.69375a2.30625 2.30625 0 0 1 2.19375 1.7625c-0.54375 0 3.88125 27.5625-11.41875 45.43125z m68.79375-98.79375c24.69375 0 40.14375 13.2375 40.14375 33.95625 0 22.05-21.9375 28.44375-33.525 32.19375-7.7625 3.1125-25.14375 6.3375-25.14375 16.7625 0 7.05 6.16875 11.90625 15.88125 11.90625a71.45625 71.45625 0 0 0 31.3125-7.93125s2.2125-1.33125 3.09375 0.88125c0.43125 1.3125 4.40625 12.3375 4.8375 13.66875a2.11875 2.11875 0 0 1-1.3125 2.64375c-14.83125 9.1875-31.3875 9.2625-37.93125 9.2625-22.5 0-38.3625-13.66875-38.3625-33.075 0-23.3625 21.525-28.95 33.50625-32.19375 11.45625-3.75 24.69375-6.1125 24.69375-16.3125 0-7.5-6.6-13.2375-17.19375-13.2375a59.625 59.625 0 0 0-35.625 11.90625 1.875 1.875 0 0 1-3.09375-1.33125l-4.40625-14.1c-0.88125-1.7625 0.43125-2.2125 0.43125-2.64375 3.225-2.625 19.36875-12.35625 42.73125-12.35625zM701.54375 444c0 1.33125-0.45 2.2125-2.2125 2.2125h-22.05c0 0.2625 1.7625 16.7625 8.38125 23.38125 7.8 7.78125 22.05 3.075 22.5 3.075 2.19375-0.88125 2.64375 0 3.075 0.88125l5.30625 14.56875c1.3125 1.7625 0 2.19375-0.45 2.64375-9.54375 3.75-32.53125 5.38125-45.8625-7.95-10.275-10.275-13.125-26.1-15-36.6h-15.88125a2.4 2.4 0 0 1-2.19375-2.2125l-2.6625-14.55c0-1.3125 0.45-2.19375 2.2125-2.19375h15.43125c-15.95625-89.8125-16.40625-94.14375-19.40625-104.1-2.025-6.7875-6.16875-12.9375-11.025-14.55-0.16875 0-7.275-3.15-18.075 0.45 0 0-1.7625 0.88125-2.64375-1.33125-0.45-1.33125-4.85625-12.7875-5.30625-14.11875s0-2.64375 0.88125-2.64375c9.58125-3.75 24.375-3.31875 33.525 0 11.775 4.275 18.225 14.79375 21.61875 24.2625 5.15625 14.45625 5.26875 18.35625 22.05 112.0125h22.93125a2.41875 2.41875 0 0 1 2.2125 2.2125z m100.10625-30c-1.05 3.15-9.5625 33.95625-47.19375 33.95625-28.59375 0-43.125-18.75-47.175-33.95625-1.875-5.625-5.9625-26.25 0-44.1 0.16875-0.5625 8.26875-33.975 47.175-33.975 28.03125 0 42.9375 18.01875 47.19375 33.975 6.01875 18.01875 1.89375 38.475 0 44.1z m85.125 31.3125c-9.375 3.09375-31.1625 3.5625-41.45625-10.14375v8.38125a2.08125 2.08125 0 0 1-2.2125 2.19375h-17.625a2.08125 2.08125 0 0 1-2.2125-2.19375v-103.65a2.1 2.1 0 0 1 2.2125-2.2125h18.075a2.1 2.1 0 0 1 2.2125 2.2125v52.06875c0 5.45625 0.09375 21.31875 8.3625 28.21875 9.1875 9.1875 22.5 6.3 25.14375 5.7375a2.94375 2.94375 0 0 1 2.64375 1.7625 138.75 138.75 0 0 1 5.7375 15 2.175 2.175 0 0 1-0.88125 2.64375z m87.76875-101.4375l-3.975 13.66875c-0.88125 2.2125-2.64375 1.33125-2.64375 1.33125-7.93125-3.4125-19.03125-3.54375-21.16875-3.54375-8.7 0-32.19375 2.11875-32.19375 37.05 0 11.68125 3.46875 37.05 30.88125 37.05a65.34375 65.34375 0 0 0 21.6-3.09375s1.7625-0.88125 2.2125 1.33125c1.7625 4.85625 3.075 8.38125 4.85625 14.11875 0.43125 1.7625-0.88125 2.19375-1.33125 2.19375-21.73125 7.25625-41.8875 4.74375-52.05 0-2.98125-1.3875-30.43125-12.16875-30.43125-51.6 0-5.4375-1.0875-56.45625 54.2625-56.45625a83.34375 83.34375 0 0 1 29.1 5.30625 2.4375 2.4375 0 0 1 0.88125 2.6625z m101.00625 74.1c-1.5 5.625-10.06875 30.43125-41.90625 30.43125-30 0-44.1-18.95625-48.075-34.85625a72.3375 72.3375 0 0 1-3.09375-22.05c0-48.50625 35.325-55.125 56.025-55.125 20.2875 0 30.8625 4.40625 34.8375 7.05 0.88125 0.45 1.33125 1.33125 0.45 3.525l-4.425 12.80625a2.3625 2.3625 0 0 1-2.64375 1.3125c-4.85625-1.7625-11.90625-5.2875-28.66875-5.2875-32.6625 0-31.59375 27.6375-31.74375 31.3125h69.675a2.34375 2.34375 0 0 1 2.2125 1.7625c-0.45 0.01875 1.7625 13.25625-2.64375 29.1375z m-43.66875 11.90625c-19.36875 0-24.375-16.875-25.575-26.475H1055.75c-1.65 22.35-14.2875 26.49375-23.86875 26.49375z"  horiz-adv-x="1280" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="http" unicode="&#61337;" d="M170.66666667 429.51111147h-91.02222187V520.53333333H11.37777813v-273.06666666h68.26666667v113.77777813h91.02222187V247.46666667H238.93333333V520.53333333H170.66666667v-91.02222186z m113.77777813 22.7555552h68.26666667V247.46666667H420.97777813v204.8h68.26666667V520.53333333H284.4444448v-68.26666666z m250.3111104 0H603.02222187V247.46666667h68.26666666v204.8H739.5555552V520.53333333h-204.8v-68.26666666z m409.6 68.26666666H785.06666667v-273.06666666h68.26666666v91.02222186h91.02222187c36.40888853 0 68.26666667 31.85777813 68.26666667 68.26666667v45.51111147c0 36.40888853-31.85777813 68.26666667-68.26666667 68.26666666z m0-113.77777813h-91.02222187v45.51111147h91.02222187v-45.51111147z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wps" unicode="&#59539;" d="M962 384a450 450 0 0 0-450-450 450 450 0 0 0-450 450 450 450 0 0 0 450 450 450 450 0 0 0 450-450z m-217.50000029 150.00000029h-171a25.35000029 25.35000029 0 0 1-22.5-15.00000029l-72-150.00000029-41.99999942-90c-2.99999971-7.49999971-7.49999971 0-7.50000058 0l-90 189s-2.99999971 7.49999971 4.5 7.50000058h72a12.94999981 12.94999981 0 0 0 12.00000058-7.50000058c13.5-27 25.49999971-47.99999971 34.49999971-65.99999971 0-1.50000029 33.00000029 67.5 33.00000029 69.00000029-6.00000029 13.5-15.00000029 29.99999971-24.00000029 47.99999971-2.99999971 9-11.99999971 13.5-22.5 15.00000029H279.50000029c-18 0-27-16.49999971-21.00000058-30.00000058l150.00000029-317.99999971c4.5-9 15.00000029-13.5 27-13.5 10.50000029 0 19.50000029 4.5 25.49999971 13.5L512 294l82.50000029 171s2.99999971 7.49999971 11.99999971 7.49999971h70.49999971c9 0 4.5-7.49999971 4.5-7.49999971l-88.49999971-187.49999971s-2.99999971-7.49999971-7.49999971 0l-25.50000058 54-32.99999942-69.00000029 36-76.5c4.5-9 15.00000029-15.00000029 28.49999942-15.00000029 10.19999971 0 19.50000029 5.7999999 24.00000029 15.00000029l148.5 315c7.49999971 18-1.50000029 33.00000029-19.50000029 33.00000029z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="Kafka" unicode="&#59540;" d="M682.4 332.1c-37.6 0-71.3-16.7-94.3-42.9L529 331.1c6.3 17.3 9.9 35.8 9.9 55.3 0 19.1-3.5 37.3-9.5 54.4l59 41.4c23.1-26.1 56.7-42.6 94.1-42.6 69.4 0 125.8 56.4 125.8 125.8s-56.4 125.8-125.8 125.8-125.8-56.4-125.8-125.8c0-12.4 1.9-24.4 5.2-35.7l-59-41.4c-24.7 30.6-60.2 52-100.6 58.5v71.1c57 12 99.9 62.6 99.9 123.1 0 69.4-56.4 125.8-125.8 125.8s-125.9-56.6-125.9-126c0-59.7 41.8-109.7 97.7-122.5v-72.1c-76.2-13.4-134.4-79.9-134.4-159.9 0-80.4 58.7-147.1 135.5-160.1v-76.1c-56.4-12.4-98.8-62.7-98.8-122.8 0-69.4 56.4-125.8 125.8-125.8S502.1-42 502.1 27.3c0 60.1-42.4 110.4-98.8 122.8v76.1c38.9 6.5 74 27 98.9 57.5l59.5-42.1c-3.3-11.2-5.2-23.1-5.2-35.4 0-69.4 56.4-125.8 125.8-125.8s125.8 56.4 125.8 125.8-56.3 125.9-125.7 125.9z m0 294.2c33.6 0 61-27.4 61-61s-27.4-61-61-61-61 27.4-61 61 27.4 61 61 61zM315.3 740.8c0 33.6 27.4 61 61 61s61-27.4 61-61-27.4-61-61-61-61 27.4-61 61z m122-713.5c0-33.6-27.4-61-61-61s-61 27.4-61 61 27.4 61 61 61 61-27.3 61-61z m-61 274c-46.9 0-85.1 38.2-85.1 85.1 0 46.9 38.2 85.1 85.1 85.1 46.9 0 85.1-38.2 85.1-85.1 0-47-38.2-85.1-85.1-85.1z m306.1-156c-33.6 0-61 27.4-61 61s27.4 61 61 61 61-27.4 61-61-27.4-61-61-61z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="kuozhanshuxing" unicode="&#59504;" d="M832 256l-128 0 0 256 128 0c105.9 0 192 86.1 192 192s-86.1 192-192 192-192-86.1-192-192l0-128L384 576l0 128c0 105.9-86.1 192-192 192s-192-86.1-192-192 86.1-192 192-192l128 0 0-256L192 256c-105.9 0-192-86.1-192-192 0-105.9 86.1-192 192-192s192 86.1 192 192l0 128 256 0 0-128c0-105.9 86.1-192 192-192s192 86.1 192 192S937.9 256 832 256zM704 704c0 70.6 57.4 128 128 128s128-57.4 128-128-57.4-128-128-128l-128 0L704 704zM192 576c-70.6 0-128 57.4-128 128s57.4 128 128 128 128-57.4 128-128l0-128L192 576zM320 64c0-70.6-57.4-128-128-128s-128 57.4-128 128 57.4 128 128 128l128 0L320 64zM384 512l256 0 0-256L384 256 384 512zM832-64c-70.6 0-128 57.4-128 128l0 128 128 0c70.6 0 128-57.4 128-128S902.6-64 832-64z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="kuozhangongneng" unicode="&#60064;" d="M377.250909 522.007273H178.734545a104.96 104.96 0 0 0-104.727272 104.727272V730.530909a104.96 104.96 0 0 0 104.727272 104.727273h198.516364a104.96 104.96 0 0 0 104.727273-104.727273v-103.796364a104.96 104.96 0 0 0-104.727273-104.727272zM178.734545 765.44a34.909091 34.909091 0 0 1-34.90909-34.909091v-103.796364a34.909091 34.909091 0 0 1 34.90909-34.90909h198.516364a34.909091 34.909091 0 0 1 34.909091 34.90909V730.530909a34.909091 34.909091 0 0 1-34.909091 34.909091zM380.043636-67.258182H181.527273a104.96 104.96 0 0 0-104.727273 104.727273v316.509091a104.96 104.96 0 0 0 104.727273 104.727273h198.516363a104.96 104.96 0 0 0 104.727273-104.727273v-316.509091a104.96 104.96 0 0 0-104.727273-104.727273zM181.527273 388.887273a34.909091 34.909091 0 0 1-34.909091-34.909091v-316.509091a34.909091 34.909091 0 0 1 34.909091-34.909091h198.516363a34.909091 34.909091 0 0 1 34.909091 34.909091v316.509091a34.909091 34.909091 0 0 1-34.909091 34.909091zM842.472727-67.258182h-198.516363a104.96 104.96 0 0 0-104.727273 104.727273v103.796364a104.96 104.96 0 0 0 104.727273 104.727272h198.516363a104.96 104.96 0 0 0 104.727273-104.727272v-103.796364a104.96 104.96 0 0 0-104.727273-104.727273z m-198.516363 243.432727a34.909091 34.909091 0 0 1-34.909091-34.90909v-103.796364a34.909091 34.909091 0 0 1 34.909091-34.909091h198.516363a34.909091 34.909091 0 0 1 34.909091 34.909091v103.796364a34.909091 34.909091 0 0 1-34.909091 34.90909zM845.265455 309.294545h-198.516364a104.96 104.96 0 0 0-104.727273 104.727273V730.530909a104.96 104.96 0 0 0 104.727273 104.727273h198.516364a104.96 104.96 0 0 0 104.727272-104.727273v-316.509091a104.96 104.96 0 0 0-104.727272-104.727273z m-198.516364 456.145455a34.909091 34.909091 0 0 1-34.909091-34.909091v-316.509091a34.909091 34.909091 0 0 1 34.909091-34.909091h198.516364a34.909091 34.909091 0 0 1 34.90909 34.909091V730.530909a34.909091 34.909091 0 0 1-34.90909 34.909091z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wenben2" unicode="&#59532;" d="M337.17708331 779.5078125h1461.796875c43.68621094 0 79.1015625-35.41535156 79.1015625-79.1015625v-632.8125c0-43.68621094-35.41535156-79.1015625-79.1015625-79.1015625H337.17708331c-43.68621094 0-79.1015625 35.41535156-79.1015625 79.1015625V700.40625C258.07552081 744.09246094 293.49087237 779.5078125 337.17708331 779.5078125z m134.57232422-255.39996094h101.34808594c24.71923828-103.82080078 70.86076172-190.33734375 138.42773437-259.55121093C648.90210284 223.35738281 568.15364581 189.57468749999998 469.27669269 163.20697266000002c18.12691406-26.36613281 32.13421875-48.61423828 42.02349609-66.74115235 118.65234375 44.49462891 202.69617188 84.86964844 252.13623047 121.1250586 60.97306641-42.84773438 146.66537109-80.75003906 257.08007812-113.7084961C1033.69798175 126.95156250000002 1047.70686847 147.55119141 1062.53841144 165.6796875c-97.23005859 23.07076172-177.97851563 56.03080078-242.24853516 98.87695313 65.91849609 69.21386719 111.23578125 155.73041016 135.95660156 259.55279296h101.34808594v64.27001954H822.76100909c-1.64689453 6.59074219-4.94226563 15.65419922-9.88769531 27.19037109-11.53458984 31.3115625-19.77539063 55.2065625-24.71923828 71.68658203l-76.62884766-12.36041016a788.84507812 788.84507812 0 0 0 34.6069336-86.518125H471.7478255v-64.2684375z m291.68701172-215.05658203c-59.32617188 59.32617188-98.87695313 131.01117188-118.65234375 215.05816406h237.3046875c-18.12849609-87.34394531-57.67927734-159.02736328-118.65234375-215.05816406z m384.7958789 215.05816406h212.58544922c-52.73542969-107.11933594-131.83541016-194.45853516-237.3046875-262.02392578 8.23921875-14.833125 19.77539063-37.07964844 34.6069336-66.74273437 110.413125 79.1015625 187.86621094 169.73771484 232.36083984 271.91162109v-207.64160156h-128.54003906v-59.32617188h128.54003906v-103.82080078h66.74115234v103.82080078h126.06890625v59.32617188h-126.06890625V469.72710937c46.14310547-102.17390625 123.59619141-191.16316406 232.36083985-266.96777343 8.24080078 23.07076172 19.77539063 45.31728516 34.60693359 66.74115234-103.82080078 62.623125-182.098125 147.49119141-234.83197265 254.60894531h212.58544921v64.27001954H1457.22198565V684.7821093800001h-66.74115234v-96.40582032H1148.23229815v-64.2684375z"  horiz-adv-x="2097" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="riqi2" unicode="&#59533;" d="M337.17708331 779.5078125h1461.796875c43.68621094 0 79.1015625-35.41535156 79.1015625-79.1015625v-632.8125c0-43.68621094-35.41535156-79.1015625-79.1015625-79.1015625H337.17708331c-43.68621094 0-79.1015625 35.41535156-79.1015625 79.1015625V700.40625C258.07552081 744.09246094 293.49087237 779.5078125 337.17708331 779.5078125z m179.16503906-678.98882812H585.55598956v39.55078125h316.40625v-39.55078125h69.21386719V651.75878906h-454.83398438v-551.23980468zM585.55598956 365.015625h316.40625v-163.14697266H585.55598956V365.015625z m0 222.47314453h316.40625v-160.67583984H585.55598956V587.49035156zM1353.50085284 117.82324218999997l39.55078125 32.13580078c-1.64847656-1.64847656-3.29695312-4.12119141-4.94384765-7.4165625l-7.4165625-7.4165625c3.29695312-1.64689453 7.4165625-4.94226563 12.36041015-9.88769531 18.12691406-13.18306641 32.13421875-23.895 42.02191406-32.13421875 42.84773438 57.67927734 67.56539062 124.42042969 74.15771485 200.22662109h103.82080078v-103.82080078c1.64847656-19.77539063-9.06345703-28.84042969-32.13421875-27.19195313-16.48001953 0-35.43117188 0.82265625-56.85503906 2.47271485l7.4165625-29.66308594c3.29537109-16.48001953 5.76650391-27.19195313 7.41498047-32.13580078 8.24080078 0 21.42386719 0.82265625 39.55078125 2.47271484h37.07964843c39.55078125 1.64689453 59.32617188 23.07076172 59.32617188 64.27001953V666.59033203H1452.37780597V414.45410156c3.29537109-120.30082031-14.00730469-204.34623047-51.91119141-252.13623047-23.07076172 21.42386719-48.61423828 46.14310547-76.62884766 74.15771485l-44.4946289-34.6069336c8.23921875-9.88769531 19.77539063-23.07076172 34.60693359-39.55078125 18.12691406-19.77539063 31.30998047-34.60693359 39.55078125-44.4946289zM1111.25231769 565.24224609h39.55078125V295.80175781h-46.96734375v-54.38232422h326.29394531V295.80175781h-46.96576172V565.24224609h39.55078125v54.38232422h-39.55078125V683.89300781h-61.79888672v-64.2684375h-108.76464844V681.421875h-61.79730468v-61.79888672h-39.55078125v-54.38074219z m402.92279296 39.55078125h98.87695313v-98.87695312h-98.87695313v98.87695312z m0-195.28277343v39.55078125h98.87695313v-98.87695313h-101.34808594c1.64689453 19.77539063 2.47113281 39.55078125 2.47113281 59.32617188zM1150.80309894 98.04785156000003c31.30998047 29.66308594 64.27001953 64.27001953 98.87695312 103.82080078l-51.91119141 34.6069336c-21.42386719-28.01460937-52.73384766-60.14882812-93.93310546-96.40582032 8.24080078-4.94384766 23.895-18.95115234 46.96734375-42.02191406z m61.79730468 254.60894531h108.76464844v-56.85503906h-108.76464844v56.85503906z m0 212.58544922h108.76464844v-56.85503906h-108.76464844v56.85503906z m0-106.29351562h108.76464844v-56.85503906h-108.76464844v56.85503906z"  horiz-adv-x="2097" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuzhi2" unicode="&#59534;" d="M315.84374998 779.5078125h1461.796875c43.68621094 0 79.1015625-35.41535156 79.1015625-79.1015625v-632.8125c0-43.68621094-35.41535156-79.1015625-79.1015625-79.1015625H315.84374998c-43.68621094 0-79.1015625 35.41535156-79.1015625 79.1015625V700.40625C236.74218748 744.09246094 272.15753904 779.5078125 315.84374998 779.5078125z m130.02398438-282.39257813h116.1796289c-32.95845703-34.60693359-74.98195313-61.79730469-126.06890625-81.57427734 1.64847656-1.64689453 3.29695312-4.11960938 4.94542969-7.41498047 11.53458984-18.12691406 19.77539063-32.13421875 24.71923828-42.02349609 49.43847656 26.36771484 87.34078125 54.38232422 113.70849609 84.04541016v-61.79730469H636.20507811v44.4946289c34.60693359-21.42386719 62.62154297-41.19925781 84.04541015-59.32617187l24.71923828 34.60693359c3.29537109-3.29537109 7.41498047-9.06503906 12.36041016-17.30425781 4.94384766-6.59074219 8.23921875-10.71035156 9.88769531-12.35882812l7.41498047 14.83154296c6.59232422 11.53617187 12.35882813 20.59804688 17.30425781 27.19195313 13.18306641-74.15929687 31.30998047-131.01275391 54.38232422-170.56353516-28.01619141-36.25541016-66.74273437-70.86234375-116.18121094-103.82080078l14.83154297 19.77539063a6941.62248047 6941.62248047 0 0 1-64.27001953 27.19195312c24.71923828 26.36613281 43.67039062 56.85345703 56.85503906 91.46039063V338.91210937000005h-138.42773437l19.77539062 34.6069336-59.32617187 4.94384765a3808.94589844 3808.94589844 0 0 1-22.24810547-39.55078125h-96.40582031v-51.9111914h64.27001953a673.81400391 673.81400391 0 0 0-37.07806641-56.85345703c37.90230469-14.83154297 64.27001953-26.36771484 79.1015625-34.6069336 11.53617187-4.94384766 19.77539063-9.06503906 24.71923828-12.36041015-18.12691406-9.88769531-56.02921875-20.59804688-113.70849609-32.13421875-9.88769531-3.29537109-18.12691406-5.76808594-24.71923828-7.4165625 9.88769531-21.42228516 18.95273437-39.55078125 27.19195312-54.38232422 72.50923828 19.77539063 129.36269531 42.84773438 170.56195313 69.21386719 18.12691406-8.23921875 45.31886719-21.42228516 81.57427734-39.55078125l9.88769532 17.30425781c13.18306641-13.18306641 26.36613281-29.66308594 39.55078125-49.43847656 54.38232422 42.84615234 94.75576172 79.1015625 121.12347656 108.76464843 26.36771484-32.95845703 64.27001953-67.56539062 113.70849609-103.82080078 6.59232422 13.18306641 15.65578125 28.84042969 27.19195313 46.96734375 4.94384766 6.59074219 8.23921875 11.53458984 9.88769531 14.83154297-47.79158203 28.01460937-86.518125 60.14882812-116.18121094 96.40423828 36.25541016 59.32617188 59.32617188 149.13808594 69.21386719 269.44048828h42.02349609v59.32617188H863.62207029C873.50976561 611.64638672 883.39746092 643.7821875 893.28515623 675.09375l-61.79888672 7.4165625c-23.07076172-95.58158203-56.02921875-178.80275391-98.87695312-249.66509766a3910.84453125 3910.84453125 0 0 0-71.685 42.0234961l-24.71923828-29.66308594V497.11523438h118.65234375v51.9111914h-118.65234375v128.54003906h-56.85503907v-128.54003906h-133.48388672V497.11523438z m388.09125 7.41656251c0 4.94384766 1.64847656 9.88769531 4.94384765 14.83154296h91.46197266c-6.59232422-95.58158203-22.24810547-166.44392578-46.96734375-212.58544921-23.07076172 47.79-39.55078125 113.70691406-49.43847656 197.75390625zM542.27197264 252.39398438l24.71923828 34.60693359h108.76464844c-11.53617187-29.66308594-28.01460937-52.73542969-49.43847657-69.21386719-8.23921875 4.94384766-22.24652344 10.71035156-42.02349609 17.30267578-18.12691406 8.23921875-32.13421875 14.00730469-42.02191406 17.30425781z m148.31542968 301.57470703c34.60693359 34.60693359 58.50351563 59.32617188 71.68658204 74.15771484l-42.0234961 32.13421875c-31.3115625-34.60693359-54.38232422-58.50351563-69.21386719-71.68658203l39.55078125-34.60535156zM517.55273436 556.44140625l44.4946289 34.60693359c-4.94384766 4.94384766-14.83154297 14.00730469-29.66308594 27.19195313l-39.55078125 39.55078125-39.55078125-29.66308594c16.48001953-16.48001953 37.90230469-40.37501953 64.27001954-71.68658203z m755.58445312 19.77539063h165.6196875v-49.43847657h-140.90044922V160.93359375h-49.43847656v-51.91119141h444.94628906V160.93359375h-46.96576172V526.77832031h-143.37158203V576.21679688h177.97851563V628.12798828h-177.97851563V680.0360156300001h-64.27001953v-51.91119141H1273.13718748V576.21679688z m-116.17962891-484.49707032h61.79730469V524.3071875c19.77539063 44.49462891 37.07964844 91.46039063 51.91119141 140.89886719l-64.27001953 14.83154297c-26.36771484-98.87695313-65.91849609-191.16158203-118.65234375-276.85546875 3.29537109-8.23921875 6.59074219-23.07076172 9.88769531-44.49462891 4.94384766-16.48001953 8.23921875-28.84042969 9.88769531-37.07964844 18.12691406 28.01619141 34.60693359 55.2065625 49.43847656 81.57427735V91.71972656000003z m202.69775391 202.69775391h224.94427734v-46.96734375H1359.65531248v46.96734375z m0 91.46197265h224.94427734V338.91210937000005H1359.65531248v46.96734375z m0 91.46039063h224.94427734v-46.96734375H1359.65531248V477.33984375z m0-274.38433594h224.94427734V160.93359375H1359.65531248v42.02349609z"  horiz-adv-x="2097" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="hongqi-hongse" unicode="&#59528;" d="M902.03849728 772.20868707a34.15815737 34.15815737 0 0 1-32.30461497 0 262.67358435 262.67358435 0 0 0-134.51429433-31.77503061 272.73567687 272.73567687 0 0 0-145.63555555 37.60045283A344.22949547 344.22949547 0 0 1 413.23261383 825.16707028a330.19552313 330.19552313 0 0 1-135.04387868-26.4791916l-9.00292494-3.70708708-3.70708708 8.73813334a33.09898979 33.09898979 0 0 1-63.55006009-11.91563606v-743.00612492A66.19797959 66.19797959 0 1 1 300.16646485-8.927475060000006a65.66839637 65.66839637 0 0 1-32.03982222 56.4006787v291.27111109l5.03104626 2.64791951a269.82296576 269.82296576 0 0 0 140.07492494 34.68774173 273.00046848 273.00046848 0 0 0 145.63555556-37.33566124 338.40407325 338.40407325 0 0 1 176.35141859-45.01462585 331.51948231 331.51948231 0 0 1 164.70057415 38.92441202 32.03982222 32.03982222 0 0 1 18.00584989 28.59752789V745.72949546a32.03982222 32.03982222 0 0 1-15.88751474 26.47919161z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="diqu" unicode="&#59527;" d="M719.86062222 804.46198519c-135.44106667 0-243.33274075-112.50346667-243.33274074-248.79407408 0-104.49351111 66.38554075-222.57967408 123.06204444-303.28604444 43.32657778-62.98737778 89.4445037-115.29481482 110.19757038-138.5965037 2.79134815-2.79134815 5.09724445-5.09724445 10.19448889-5.09724444 2.79134815 0 7.88859259 2.79134815 10.19448888 5.09724444 23.05896297 23.30168889 66.38554075 76.09457778 110.19757037 138.5965037 56.19105185 81.19182222 123.06204445 198.79253333 123.06204445 303.28604444-0.24272592 136.29060741-110.4402963 248.79407408-243.57546667 248.79407408z m0-397.70642963c-82.04136297 0-148.4269037 68.08462222-148.4269037 151.7037037s66.38554075 151.7037037 148.4269037 151.70370371 148.4269037-68.08462222 148.4269037-151.70370371-66.38554075-151.7037037-148.4269037-151.7037037z m-237.87140741-224.88557037l-368.70068147 41.99158518 53.88515555 185.68533333c2.79134815 10.31585185 12.86447408 18.20444445 23.05896296 18.20444445h273.79484445c12.86447408-36.40888889 28.15620741-70.51188148 46.11792592-104.49351112l-28.15620741-141.38785184z m-51.57925925-240.78411852H66.80651852c-7.88859259 0-15.17037037 2.79134815-20.26761482 10.31585186-5.09724445 5.09724445-5.09724445 13.1072-5.09724444 20.99579258l51.09380741 177.79674075 373.79792592-41.99158519-35.92343703-167.1168z m453.53339258 308.86874074l33.1320889-117.60071111-110.19757037 13.1072c20.26761482 23.30168889 41.02068148 52.30743703 64.07964444 83.49771852 2.79134815 7.5245037 7.88859259 13.1072 12.98583703 20.99579259z m53.39970371-193.57392593l23.05896296-81.19182222c0-2.79134815 2.79134815-5.09724445 2.79134816-7.88859259 0-13.1072-10.19448889-26.09303703-25.85031112-26.09303704H507.35407407l33.1320889 159.5922963 396.85688888-44.41884445z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shouxieluru" unicode="&#59524;" d="M177.152-10.24c-10.752 7.68-20.992 14.848-31.744 22.528 2.048 127.488 3.584 254.976 5.632 382.464 105.984 42.496 198.656 120.832 278.016 232.96l78.848-55.808 2.048-1.536L512 568.32l2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 38.912-27.648 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536 2.048-1.536h0.512l84.48-59.904c-79.36-112.128-121.856-225.28-126.976-339.968C485.376 24.576 366.08-19.456 246.784-64c-10.752 7.68-20.992 14.848-31.744 22.528L367.616 174.08c38.4-14.336 82.944-1.536 108.032 33.28 29.696 41.984 19.456 99.84-22.016 129.024-41.984 29.696-99.84 19.456-129.024-22.016-24.576-34.816-22.016-81.408 4.608-112.64L177.152-10.24z m222.208-50.176h443.392V35.84H659.456L399.36-60.416z m403.456 478.208l77.824 110.08L473.088 816.128l-77.312-110.08 407.04-288.256z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dianziqianzhang" unicode="&#59525;" d="M894.34557 232.956935l-284.129153 46.1419a1019.827981 1019.827981 0 0 0 40.288589 233.370095c32.604582 34.238802 51.516304 80.137155 51.516304 128.74113 0 2.827395-0.073678 5.638417-0.198522 8.435113l0.198522 0.454348h-0.215918C697.164698 749.074719 615.457792 827.895903 515.334443 827.895903S333.505211 749.074719 328.863495 650.099521h-0.215918l0.198521-0.454348c-0.124843-2.796696-0.198521-5.607718-0.198521-8.435113 0-48.599881 18.908652-94.495164 51.508117-128.732943a1019.625366 1019.625366 0 0 0 40.298822-233.379305l-284.131199-46.1419v-0.045026c-22.385846-3.62762-38.800701-22.50148-38.810934-44.623313v-97.439216c0-24.995277 20.785396-45.257763 46.424332-45.257763h6.91448v-11.852956c0-25.148773 9.600659-49.2681 26.688849-67.051115 17.08819-17.783015 40.265052-27.773554 64.432475-27.773554H788.696368c24.166399 0 47.343261 9.990538 64.432475 27.773554 17.08819 17.783015 26.688849 41.902342 26.688849 67.051115v11.852956h6.91448c25.63996 0 46.424332 20.262486 46.424332 45.257763v97.439216c0.01228 22.140253-16.407692 41.038672-38.810934 44.669362zM834.258053 33.738661c0-26.185382-20.397562-47.412846-45.560662-47.412846H241.972519c-25.162076 0-45.560662 21.227464-45.560662 47.412846v11.852956h637.845173v-11.852956z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ditu" unicode="&#59518;" d="M511.662821 422.902008c61.621453 0 111.799272 47.734164 111.799272 106.47194 0 58.737776-50.177819 106.469893-111.799272 106.469893-61.620429 0-111.798249-47.732118-111.798249-106.469893C399.863549 470.636173 450.041368 422.902008 511.662821 422.902008zM511.662821 593.265094c37.07643 0 67.080791-28.605501 67.080791-63.891146 0-35.243689-30.003338-63.893192-67.080791-63.893192-37.011962 0-67.079768 28.649504-67.079768 63.893192C444.583053 564.659593 474.649835 593.265094 511.662821 593.265094zM824.065923 558.98229c-0.873903-14.937201-1.24434-26.683732-4.234441-49.436946l94.307899 29.740348 0-466.629673-268.320095-74.633814-312.577065 86.776366 0 0.12996-0.217964-0.089028-0.240477 0.089028 0-0.174985-223.597521-71.795163L109.18626 477.754291l92.561116 22.402219c-2.227738 12.797467-3.123131 26.420743-3.123131 40.048111l0 1.702782L64.467779 509.545344l0-553.665958 44.719504 14.456247 223.837998 71.925123 312.795029-86.656639 313.038576 86.700641L958.858886 596.014718 824.065923 558.98229zM394.186246 227.035062c1.746784-2.487657 3.472078-4.497431 4.869914-5.940292 40.962947-49.434899 82.231863-82.319867 84.022649-83.71668l28.757974-22.797215 28.626991 22.971178c1.790786 1.39886 42.927695 34.674731 83.804684 83.937714 1.397836 1.483794 3.188622 3.5345 4.913916 6.070252 58.453297 75.899644 131.122363 185.866175 147.544381 281.069467 3.164063 21.703301 3.25309 34.848693 3.25309 36.288484 0.547469 71.143317-27.90556 138.002051-80.093153 188.04991-50.528813 48.475038-117.390617 75.15877-188.224896 75.15877-70.550823 0-137.235594-26.683732-187.764408-75.15877-52.472072-50.307779-81.099063-117.520577-80.551594-189.183733 0-1.13587 0.085958-14.326287 3.123131-34.981722C264.112772 406.917966 346.125647 289.137469 394.186246 227.035062zM511.662821 765.548926c123.438357 0 224.493937-98.390891 223.598544-220.62891 0 0 0-11.047614-2.687202-29.389354-14.760169-85.59547-84.503603-191.629435-140.40375-264.037559-0.458441-0.873903-1.353834-1.702782-1.790786-2.139733-38.908148-47.254234-78.716806-79.219249-78.716806-79.219249s-39.806611 31.529087-78.715783 78.782298c-0.436952 0.436952-1.332345 1.309832-1.790786 2.139733C375.256104 323.027323 305.511647 429.497217 290.751478 514.700761c-2.686179 18.297738-2.686179 29.390377-2.686179 29.390377C287.169907 666.326087 388.224464 765.548926 511.662821 765.548926z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="renwuqingdan" unicode="&#59519;" d="M512 676.571429 473.572571 702.429257 370.143086 598.999771 318.429257 650.7136 266.715429 598.999771 370.143086 495.572114ZM548.571429 603.428571l219.428571 0 0-36.571429-219.428571 0 0 36.571429ZM512 457.142857 473.572571 483.000686 370.143086 379.5712 318.429257 431.285029 266.715429 379.5712 370.143086 276.143543ZM548.571429 384l219.428571 0 0-36.571429-219.428571 0 0 36.571429ZM877.714286 859.428571 146.285714 859.428571c-20.214857 0-36.571429-16.374857-36.571429-36.571429l0-877.714286c0-20.214857 16.356571-36.571429 36.571429-36.571429l475.428571 0 292.571429 256L914.285714 822.857143C914.285714 843.053714 897.929143 859.428571 877.714286 859.428571zM658.285714 37.7856 658.285714 164.571429l144.928914 0L658.285714 37.7856zM841.142857 237.714286 621.714286 237.714286c-20.214857 0-36.571429-16.356571-36.571429-36.571429l0-219.428571L182.857143-18.285714 182.857143 786.285714l658.285714 0L841.142857 237.714286z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fabu" unicode="&#59520;" d="M437.682-31.944c-17.673 0-32 14.327-32 32v235.2c0 17.673 14.327 32 32 32s32-14.327 32-32v-235.2c0-17.673-14.327-32-32-32zM444.929 210.034a31.878 31.878 0 0 0-20.752 7.654c-13.446 11.47-15.048 31.668-3.579 45.113l452.025 529.934c11.468 13.444 31.665 15.048 45.112 3.579 13.446-11.469 15.049-31.667 3.579-45.113L469.29 221.269c-6.329-7.42-15.318-11.235-24.361-11.235zM794.905 0.046a31.875 31.875 0 0 0-14.07 3.277L542.347 120.317c-15.866 7.784-22.419 26.956-14.636 42.823 7.783 15.866 26.957 22.419 42.823 14.636l238.488-116.994c15.866-7.784 22.419-26.956 14.636-42.823-5.558-11.331-16.929-17.913-28.753-17.913zM324.426 245.534a31.853 31.853 0 0 0-15.102 3.809L114.875 353.676c-15.573 8.355-21.424 27.754-13.068 43.327 8.356 15.574 27.755 21.424 43.327 13.068l194.449-104.333c15.573-8.355 21.424-27.754 13.068-43.327-5.772-10.759-16.816-16.877-28.225-16.877zM130.332 351.865c-11.683 0-22.938 6.419-28.576 17.555-7.982 15.768-1.67 35.021 14.098 43.003L882.516 800.519c15.771 7.982 35.021 1.669 43.004-14.098 7.981-15.768 1.67-35.021-14.099-43.003L144.759 355.322a31.883 31.883 0 0 0-14.427-3.457zM797.13-0.074c-1.42 0-2.855 0.095-4.302 0.289-17.517 2.354-29.807 18.461-27.453 35.978l99.084 737.288c2.354 17.516 18.458 29.806 35.977 27.453 17.517-2.354 29.807-18.461 27.453-35.977l-99.084-737.288c-2.159-16.07-15.897-27.743-31.675-27.743z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biangengguanlibeifen" unicode="&#59521;" d="M550.208-64H209.28A81.792 81.792 0 0 0 128 18.24V749.76A81.92 81.92 0 0 0 209.344 832h613.632a81.92 81.92 0 0 0 81.28-82.432v-405.76a29.824 29.824 0 1 0-59.584 0V749.44a22.272 22.272 0 0 1-21.76 22.656H209.408a22.08 22.08 0 0 1-21.696-22.528v-731.52a21.76 21.76 0 0 1 21.44-22.464h341.056a29.824 29.824 0 0 0 0.064-59.584z m196.352 600.96H285.824a29.824 29.824 0 1 0 0 59.712h460.8a29.824 29.824 0 1 0 0-59.712z m-204.8-156.8H285.824a29.824 29.824 0 1 0 0 59.712h255.936a29.824 29.824 0 1 0 0-59.648z m179.2-391.936c-101.12 0-183.424 83.84-183.424 186.624a29.824 29.824 0 1 0 59.712 0c0-70.016 55.552-126.976 123.584-126.976 17.408 0 34.24 3.712 50.048 10.88a29.888 29.888 0 0 0 24.768-54.336c-23.552-10.688-48.64-16.192-74.688-16.192z m153.6 156.8a29.824 29.824 0 0 0-29.824 29.824c0 70.016-55.552 126.976-123.648 126.976-16.32 0-32.384-3.2-47.36-9.6a29.888 29.888 0 0 0-23.424 54.912 180.224 180.224 0 0 0 70.784 14.336c101.12 0 183.424-83.84 183.424-186.624a30.016 30.016 0 0 0-29.952-29.824z m-204.8 104.576h-51.264a29.76 29.76 0 0 0-25.28 14.08 30.144 30.144 0 0 0-1.536 28.928l25.6 52.352a29.696 29.696 0 0 0 53.632 0l25.6-52.352a29.696 29.696 0 0 0-1.472-28.928 29.504 29.504 0 0 0-25.28-14.08z m127.552-269.568h-1.024a29.696 29.696 0 0 0-24.896 14.848l-25.6 44.288a29.888 29.888 0 0 0 23.808 44.672l58.048 4.032c11.392 0.704 22.144-5.12 27.904-14.848a30.016 30.016 0 0 0-1.024-31.616l-32.448-48.256a29.824 29.824 0 0 0-24.768-13.12z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="juecebaogao" unicode="&#59522;" d="M855.1 757.9H716.7V807.3c0 6.6-2.6 13-7.3 17.7-4.7 4.7-11 7.3-17.7 7.3H332.5c-13.8 0-25-11.2-25-25v-49.4H169.1c-6.6 0-13-2.6-17.7-7.3s-7.3-11-7.3-17.7v-772.2c0-13.8 11.2-25 25-25h686.1c6.6 0 13 2.6 17.7 7.3 4.7 4.7 7.3 11 7.3 17.7V732.9c-0.1 13.8-11.3 25-25.1 25z m-497.7 24.4h309.2v-105.7H357.4V782.3zM830-14.3H193.9V707.9h113.4v-56.3c0-6.6 2.6-13 7.3-17.7 4.7-4.7 11-7.3 17.7-7.3h359.2c13.8 0 25 11.2 25 25v56.3h113.4l0.1-722.2zM706.6 515.3H314.3c-13.8 0-25-11.2-25-25s11.2-25 25-25h392.3c13.8 0 25 11.2 25 25s-11.2 25-25 25zM706.6 295.5H314.3c-13.8 0-25-11.2-25-25s11.2-25 25-25h392.3c13.8 0 25 11.2 25 25s-11.2 25-25 25z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tongzhi" unicode="&#59514;" d="M560.63 757.35c-13.14 6.18-28.65 4.14-39.81-5.13l-215.19-179.1-171.51 0.69h-0.15c-9.87 0-19.38-3.9-26.37-10.89a37.2515625 37.2515625 0 0 1-11.04-26.46l-0.78-299.31c0-9.96 3.9-19.5 10.92-26.52 6.99-7.08 16.53-11.01 26.49-11.01h173.55L520.85 21.17999999999995c6.84-5.7 15.39-8.64 23.94-8.64 5.4 0 10.8 1.17 15.87 3.54a37.393125 37.393125 0 0 1 21.54 33.87V723.48c0 14.49-8.4 27.69-21.57 33.87z m145.08-187.08c-18.45 8.73-40.38 0.78-49.35-17.58-8.94-18.42-1.2-40.71 17.1-49.92 2.37-1.23 58.41-30.36 58.41-113.31 0-88.62-52.41-117.99-54.15-118.95-18.48-9.24-25.98-31.74-16.74-50.22 6.6-13.14 19.77-20.7 33.54-20.7a37.280625 37.280625 0 0 1 16.68 3.93c3.9 1.98 95.49 49.38 95.49 185.94 0 131.76-96.87 178.86-100.98 180.81zM822.2 680.16c-17.25 11.07-40.14 6.03-51.42-11.19-11.22-17.22-6.3-40.38 10.86-51.72 4.05-2.67 99.9-67.98 99.9-230.55 0-162.93-91.95-228.3-95.61-230.79-17.22-11.49-21.84-34.68-10.38-51.9 7.2-10.8 19.08-16.65 31.17-16.65 7.11 0 14.34 2.07 20.73 6.3 5.25 3.48 128.91 88.26 128.91 293.07 0 205.2-128.67 289.92-134.16 293.43z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yaoqing" unicode="&#59517;" d="M441.6875 434.71875001c38.34375001-26.34375001 65.53124999-62.34375001 69.84375001-77.62500002 3.65625001 15 34.03125002 52.03125002 69.46874999 78.375 38.71875001 28.78125001 98.8125 52.50000001 98.34375002 120.46875001-0.84375001 123.9375-126.5625 143.53125001-168.09375002 41.25-43.50000001 106.50000001-167.15625001 81.65625001-167.90625001-42-0.46875001-67.96875001 58.875-93.375 98.34375001-120.46875001z m433.40625001 33.9375h-27.75000002v55.875h27.75v-55.875zM791.375 451.3125c0-21.1875-14.25-48.37499999-31.5-60.46875002L543.87500001 239.4375c-17.34375001-12.1875-45.75-12.09375001-62.62500001-0.375L262.53124999 391.125c-17.25 12-31.125 38.71875001-31.12499998 60.09374999V709.50000001c0 21.1875 17.34375001 38.4375 38.53124999 38.43749999H752.9375c21.28125001 0 38.53125001-17.0625 38.53125001-38.43750001v-258.18749999z m-616.03125001 17.34375001h-28.3125v55.87499998h28.3125v-55.875z m672 258.84375001c0 42.09375001-34.21875001 76.21875001-76.40624999 76.21874999H251.84374999c-42.1875 0-76.40624999-33.9375-76.40624999-76.21874999v-109.21875003c0-20.90625001-16.96875001-37.875-38.0625-37.87499998H129.49999999c-20.99999999 0-38.0625-17.0625-38.06249999-38.43749999v-499.40625002c0-42.28125001 33.9375-76.59375001 76.03125001-76.59375002h687.9375c42 0 76.03125002 33.9375 76.03124999 76.59375002V541.96875002c0 21.1875-16.96875001 38.4375-38.0625 38.43749996h-7.87499999c-20.99999999 0-38.0625 16.78124999-38.06250001 37.87500001V727.49999998z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="changliangguanli" unicode="&#59516;" d="M872.234375 798.646875H152.3c-33.159375 0-60.0375-26.878125-60.0375-60.0375v-719.934375c0-33.159375 26.878125-60.0375 60.0375-60.0375h719.934375c33.159375 0 60.0375 26.878125 60.0375 60.0375V738.609375c0 33.159375-26.878125 60.0375-60.0375 60.0375z m1.575-737.55c0-28.415625-11.784375-40.209375-40.209375-40.209375H194.01875c-28.415625 0-40.209375 11.784375-40.209375 40.209375V700.678125c0 28.415625 11.784375 40.209375 40.209375 40.209375h639.58125c28.415625 0 40.209375-11.784375 40.209375-40.209375v-639.58125zM720.865625 199.58437500000002h-416.25c-16.5 0-30 13.5-30 30s13.5 30 30 30h416.25c16.5 0 30-13.5 30-30s-13.5-30-30-30zM720.865625 80.52187500000002h-416.25c-16.5 0-30 13.5-30 30s13.5 30 30 30h416.25c16.5 0 30-13.5 30-30s-13.5-30-30-30zM525.884375 367.24687500000005c25.14375 0 47.278125 6.365625 66.39375 19.096875 19.115625 12.73125 28.678125 28.35 28.678125 46.875h68.128125l0.76875-1.89375c1.284375-29.465625-14.690625-55.603125-47.925-78.43125-33.234375-22.8375-71.915625-34.246875-116.053125-34.246875-60.5625 0-106.809375 16.2-138.759375 48.609375-31.95 32.4-47.925 73.115625-47.925 122.146875v13.25625c0 48.609375 16.03125 89.165625 48.1125 121.678125 32.071875 32.5125 78.2625 48.76875 138.571875 48.76875 33.35625 0 63.31875-4.528125 89.878125-13.575s48.5625-21.459375 66.009375-37.246875l3.46875-75.75h-60.43125l-16.546875 53.6625c-8.990625 7.153125-20.53125 12.9375-34.640625 17.3625-14.11875 4.415625-30.01875 6.628125-47.728125 6.628125-39.778125 0-68.19375-11.7375-85.25625-35.19375-17.071875-23.465625-25.59375-52.2375-25.59375-86.325v-13.25625c0-34.93125 8.465625-64.021875 25.40625-87.271875 16.93125-23.26875 45.4125-34.89375 85.44375-34.89375z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gongxiangbianliang" unicode="&#59515;" d="M809.4996875-37.14656249999996h-596.25c-67.201875 0-121.875 54.6721875-121.875 121.875v596.25c0 67.201875 54.673125 121.875 121.875 121.875h596.25c67.2028125 0 121.875-54.673125 121.875-121.875v-596.25c0-67.201875-54.6721875-121.875-121.875-121.875z m-596.25 765c-25.846875 0-46.875-21.028125-46.875-46.875v-596.25c0-25.846875 21.028125-46.875 46.875-46.875h596.25c25.846875 0 46.875 21.028125 46.875 46.875v596.25c0 25.846875-21.028125 46.875-46.875 46.875h-596.25zM300.584375 525.9918749999999c-2.76375 29.6259375 13.156875 42.39375 38.03625 49.6246875 39.4921875 13.1690625 78.984375 23.964375 120.973125 19.48125 35.9278125-3.024375 66.795-26.7375 78.975-60.6796875a505.989375 505.989375 0 0 0 22.38-77.5284375c4.47 5.65875 7.2309375 10.0040625 10.006875 13.9565625a976.9528125 976.9528125 0 0 0 61.9875 87.5353125 135.36 135.36 0 0 0 43.4446875 35.1346875c27.6815625 15.628125 62.64 8.5003125 81.9984375-16.7071875 16.8590625-27.691875 15.088125-62.8678125-4.47-88.725-23.964375-28.434375-55.15875-31.194375-88.725-26.3259375a146.2621875 146.2621875 0 0 0-22.3696875 5.536875c-21.065625 11.1834375-33.9553125 1.5684375-46.3340625-13.9603125-28.30875-35.1478125-29.488125-33.9553125-16.7203125-77.5284375 8.4225-32.37375 18.301875-65.8153125 29.488125-98.71875 15.6665625-46.3340625 42.3778125-60.6796875 90.2925-49.49625 8.4225 2.7609375 16.8459375 4.344375 26.3259375 7.243125 1.5815625-26.323125-4.47-35.27625-28.434375-45.1546875-40.6715625-15.6665625-81.8728125-28.434375-127.0115625-24.0890625-38.7140625 1.921875-72.2325 27.5184375-84.2446875 64.3715625-8.4225 23.95125-14.085 49.486875-22.3828125 77.5284375-4.47-5.5209375-7.2309375-10.0040625-10.0040625-13.9565625-21.1903125-29.61375-40.8-60.808125-64.764375-90.29625a110.1075 110.1075 0 0 0-39.4790625-31.194375c-28.64625-15.403125-64.1953125-8.33625-84.7715625 16.8459375-18.28875 28.231875-15.3253125 65.2265625 7.2309375 90.170625 23.964375 28.430625 56.338125 29.61 90.309375 24.0890625a160.0040625 160.0040625 0 0 0 23.95125-5.6625 26.3278125 26.3278125 0 0 1 21.489375-2.975625 26.3625 26.3625 0 0 1 16.42125 14.1590625 222.016875 222.016875 0 0 1 22.3828125 29.6259375 29.0953125 29.0953125 0 0 1 4.4671875 21.1903125c-11.1834375 39.4921875-22.3696875 78.97125-33.9553125 118.4634375-15.6665625 52.6490625-43.573125 65.818125-95.95875 52.6490625a96.36375 96.36375 0 0 1-20.7984375-4.078125l0.2634375-0.52875z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="OA" unicode="&#59513;" d="M886.4 112.10666666999998H137.6c-56.42666667 0-102.4 45.97333333-102.4 102.4V691.2c0 56.42666667 45.97333333 102.4 102.4 102.4h748.8c56.42666667 0 102.4-45.97333333 102.4-102.4v-476.69333333c0-56.53333333-45.97333333-102.4-102.4-102.4zM137.6 725.33333333c-18.77333333 0-34.13333333-15.36-34.13333333-34.13333333v-476.69333333c0-18.77333333 15.36-34.13333333 34.13333333-34.13333334h748.8c18.77333333 0 34.13333333 15.36 34.13333333 34.13333334V691.2c0 18.77333333-15.36 34.13333333-34.13333333 34.13333333H137.6zM784-25.600000000000023H240c-18.88 0-34.13333333 15.25333333-34.13333333 34.13333333s15.25333333 34.13333333 34.13333333 34.13333334h544c18.88 0 34.13333333-15.25333333 34.13333333-34.13333334s-15.25333333-34.13333333-34.13333333-34.13333333zM374.18666667 304c-78.93333333 0-143.14666667 69.33333333-143.14666667 154.66666667s64.21333333 154.66666667 143.14666667 154.66666666S517.33333333 544 517.33333333 458.66666667s-64.21333333-154.66666667-143.14666666-154.66666667z m0 241.06666667c-41.28 0-74.88-38.72-74.88-86.4s33.6-86.4 74.88-86.4 74.88 38.72 74.88 86.4-33.6 86.4-74.88 86.4zM800.42666667 294.29333333c-15.57333333 0-29.54666667 9.28-35.62666667 23.57333334l-15.78666667 37.33333333-28.8 68.26666667-30.50666666 72.32c-1.81333333 4.37333333-8.10666667 4.37333333-9.92 0L649.38666667 423.46666667l-28.8-68.26666667-15.78666667-37.33333333c-6.08-14.29333333-20.05333333-23.57333333-35.62666667-23.57333334-22.18666667 0-38.61333333 18.24-38.61333333 38.61333334 0 5.01333333 0.96 10.13333333 3.09333333 15.14666666l11.30666667 26.45333334 20.8 48.96 82.56 194.24c5.65333333 13.44 20.26666667 22.29333333 36.48 22.29333333s30.82666667-8.85333333 36.48-22.29333333L803.84 423.46666667l21.97333333-51.84 10.02666667-23.68c10.88-25.38666667-7.78666667-53.54666667-35.41333333-53.65333334zM770.02666667 359.46666667H590.93333333v16.85333333l18.24 42.88h135.57333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ziyuanjieyong" unicode="&#59512;" d="M955.759067 204.911194c-2.947766 32.23191-18.272258 61.406498-43.135265 82.121746-24.876318 20.741869-56.331099 30.403251-88.576319 27.565041a26.361975 26.361975 0 0 1-4.366871-0.763818L622.737293 263.542963c-11.998912 28.995409-38.576927 51.03454-71.528628 55.502776l-234.547555 36.189227c-39.327435 5.185979-76.376726-15.447358-93.488921-48.988818l-125.884653 28.656503c-15.010159 3.493497-30.034652-6.004064-33.459549-21.041867-3.424896-15.037804 6.004064-30.021342 21.041868-33.432928l150.67906-34.306302c7.64228-1.774393 15.678756-0.163822 22.134352 4.257316a28.003264 28.003264 0 0 1 11.762395 19.213208c2.633433 19.295119 20.332315 32.969107 39.204569 30.32134l234.547555-36.189227c19.281808-2.620123 32.846241-20.414226 30.239429-39.682724-2.620123-19.322764-20.455181-32.995728-39.505591-30.267074l-226.059546 32.341466c-15.133025 2.238213-29.434655-8.406099-31.617579-23.71728-2.197258-15.283536 8.419409-29.447966 23.702946-31.631913l226.264322-32.368087c4.134449-0.545731 8.242277-0.819108 12.30915-0.819108 41.675204 0 78.436783 28.669813 88.451405 69.364135l204.187307 52.139313c16.579775 0.98293 32.791975-4.257315 45.673477-15.011183 8.242277-6.849793 14.546339-15.447358 18.5313-25.081095l-363.03902-152.835362a27.8548 27.8548 0 0 1-12.844641-10.955573c-27.752412-21.189307-67.718751-19.175324-93.075272 6.206792a28.064697 28.064697 0 0 1-4.345369 3.553906 27.812821 27.812821 0 0 1-12.725871 6.708497l-312.043387 71.286992c-15.024493 3.465852-30.034652-5.977443-33.473883-21.015246-3.424896-15.037804 5.977443-30.021342 21.028557-33.459549l305.331819-69.753212c24.265058-22.58691 55.290831-33.901867 86.322748-33.901867 30.704273 0 61.415713 11.075368 85.56712 33.189243l376.692531 158.591646c11.216664 4.724207 18.094101 16.186603 16.989329 28.304286zM190.066905 443.661798h640.926616c15.434047 0 27.94695 12.499592 27.94695 27.94695 0 15.447358-12.512903 27.94695-27.94695 27.94695H190.066905c-15.434047 0-27.94695-12.499592-27.94695-27.94695 0-15.446334 12.512903-27.94695 27.94695-27.94695zM190.066905 592.840866h640.926616c15.434047 0 27.94695 12.499592 27.94695 27.94695 0 15.447358-12.512903 27.94695-27.94695 27.94695H190.066905c-15.434047 0-27.94695-12.499592-27.94695-27.94695 0-15.447358 12.512903-27.94695 27.94695-27.94695zM190.066905 742.01891h640.926616c15.434047 0 27.94695 12.499592 27.94695 27.94695s-12.512903 27.94695-27.94695 27.94695H190.066905c-15.434047 0-27.94695-12.499592-27.94695-27.94695s12.512903-27.94695 27.94695-27.94695z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="huadongkaiguan-small" unicode="&#60537;" d="M1014.44266667 384c0-42.5984-8.30122667-83.23072-24.90368-121.89696-16.60245333-38.66624-38.88469333-72.0896-67.06517334-100.05162667-27.96202667-27.96202667-61.38538667-50.24426667-100.05162666-66.84672-38.66624-16.60245333-79.51701333-24.90368-121.89696-24.90368H323.47477333c-42.5984 0-83.23072 8.30122667-121.89696 24.90368-38.66624 16.60245333-72.0896 38.88469333-100.05162666 66.84672-27.96202667 27.96202667-50.24426667 61.38538667-67.06517334 100.05162667C17.85856 300.76928 9.55733333 341.40160000000003 9.55733333 384s8.30122667 83.23072 24.90368 121.89696c16.60245333 38.66624 39.10314667 72.0896 67.06517334 100.05162667 27.96202667 27.96202667 61.38538667 50.24426667 100.05162666 67.06517333 38.88469333 16.60245333 79.51701333 24.90368 121.89696 24.90368h376.832c42.5984 0 83.23072-8.30122667 121.89696-24.90368 38.66624-16.60245333 72.0896-38.88469333 100.05162667-67.06517333 27.96202667-27.96202667 50.24426667-61.38538667 67.06517333-100.05162667 16.82090667-38.66624 25.12213333-79.29856 25.12213334-121.89696zM323.47477333 635.22133333c-34.07872 0-66.40981333-6.5536-97.43018666-19.87925333-30.80192-13.32565333-57.67168-31.23882667-80.17237334-53.73952-22.50069333-22.50069333-40.41386667-49.37045333-53.73952-80.17237333-13.32565333-30.80192-19.87925333-63.35146667-19.87925333-97.43018667 0-34.07872 6.5536-66.40981333 19.87925333-97.43018667 13.32565333-30.80192 31.23882667-57.67168 53.73952-80.17237333 22.50069333-22.50069333 49.37045333-40.41386667 80.17237334-53.73952 30.80192-13.32565333 63.35146667-19.87925333 97.43018666-19.87925333 34.07872 0 66.40981333 6.5536 97.43018667 19.87925333 30.80192 13.32565333 57.67168 31.23882667 80.17237333 53.73952 22.50069333 22.50069333 40.41386667 49.37045333 53.73952 80.17237333 13.32565333 30.80192 19.87925333 63.35146667 19.87925334 97.43018667s-6.5536 66.40981333-19.87925334 97.43018667c-13.32565333 30.80192-31.23882667 57.67168-53.73952 80.17237333-22.50069333 22.50069333-49.37045333 40.41386667-80.17237333 53.73952-30.80192 13.32565333-63.35146667 19.87925333-97.43018667 19.87925333z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shenqing" unicode="&#59501;" d="M729.6 390.4L620.8 499.2 889.6 768H102.4C57.6 768 25.6 736 25.6 691.2v-614.4c0-44.8 32-76.8 76.8-76.8h819.2c44.8 0 76.8 32 76.8 76.8V659.2l-268.8-268.8zM595.2 467.2c0 12.8 12.8 12.8 12.8 0L697.6 384v-12.8l-108.8-12.8s-12.8 0-12.8 12.8l19.2 96zM166.4 627.2h236.8c19.2 0 32-12.8 32-32s-12.8-32-32-32H166.4c-19.2 0-32 12.8-32 32 0 12.8 25.6 32 32 32z m0-204.8h236.8c19.2 0 32-12.8 32-32s-12.8-32-32-32H166.4c-12.8 0-32 12.8-32 32s25.6 32 32 32z m659.2-275.2H166.4c-19.2 0-32 12.8-32 32s12.8 32 32 32h659.2c19.2 0 32-12.8 32-32 0-25.6-12.8-32-32-32z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jinrongfuwu" unicode="&#59498;" d="M885.013972 384C885.013972 590.009929 718.009929 757.013972 512 757.013972 305.990071 757.013972 138.986028 590.009929 138.986028 384 138.986028 177.990071 305.990071 10.986028 512 10.986028 718.009929 10.986028 885.013972 177.990071 885.013972 384ZM64.383234 384C64.383234 631.211913 264.788087 831.616766 512 831.616766 759.211913 831.616766 959.616766 631.211913 959.616766 384 959.616766 136.788087 759.211913-63.616766 512-63.616766 264.788087-63.616766 64.383234 136.788087 64.383234 384ZM571.682236 617.92752C587.690713 615.461248 603.699188 611.724838 619.707784 606.71827 651.258707 596.850955 680.08929 581.345408 706.200399 560.201163L636.027146 484.08226C616.987796 494.889319 599.036678 503.111958 582.173253 508.750423 565.309829 514.388889 546.270765 517.208079 525.055489 517.208079 484.800864 517.208079 464.673852 506.871048 464.673852 486.196675 464.673852 475.389616 471.881498 467.166977 486.297006 461.528512 500.712513 455.890046 521.247505 448.84207 547.902595 440.384372L609.1002 418.535428C645.002974 407.258497 672.609617 391.518017 691.920958 371.313516 711.232298 351.109016 720.887824 325.031504 720.887824 293.0802 720.887824 273.815444 716.264051 255.255773 707.016368 237.400633 697.768683 219.545493 684.169351 203.922479 666.217965 190.531123 648.266577 177.139768 626.099666 166.450337 599.716567 158.462512 590.820182 155.769016 581.475417 153.529651 571.682236 151.744411L571.682236 100.509381 452.317764 100.509381 452.317764 151.012958C435.776602 153.643317 419.088148 157.418638 402.252295 162.338938 366.07753 172.91106 333.031154 189.473804 303.112176 212.027666L383.077046 295.194614C403.204359 282.038195 424.555309 271.348765 447.130539 263.126003 469.705768 254.903241 491.328706 250.791921 512 250.791921 536.479165 250.791921 553.478329 253.611111 562.998004 259.249577 572.517678 264.888042 577.277445 272.875749 577.277445 283.212935 577.277445 288.851401 575.645525 293.550051 572.381637 297.309028 569.117748 301.068005 564.221989 304.591993 557.694212 307.881098 551.166434 311.170202 543.142828 314.341792 533.623154 317.395961 524.103479 320.45013 513.08802 323.856651 500.576447 327.615628L434.483034 351.578986C419.251554 356.277707 404.836262 362.503419 391.236727 370.256309 377.637191 378.009199 365.805772 387.171568 355.742116 397.743691 345.67846 408.315813 337.654853 420.414839 331.671058 434.04113 325.687262 447.667422 322.695409 462.703104 322.695409 479.148628 322.695409 498.883257 327.591169 517.32546 337.382834 534.475792 347.1745 551.626125 360.909825 566.661807 378.589222 579.583291 396.268618 592.504774 417.483576 602.724339 442.234731 610.242292 445.544675 611.24766 448.905686 612.185803 452.317764 613.056723L452.317764 667.490619 571.682236 667.490619 571.682236 617.92752 571.682236 617.92752Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="danhangshurukuang" unicode="&#59499;" d="M921.6 691.2H102.4c-37.54666667 0-68.26666667-30.72-68.26666667-68.26666667v-477.86666666c0-37.54666667 30.72-68.26666667 68.26666667-68.26666667h819.2c37.54666667 0 68.26666667 30.72 68.26666667 68.26666667V622.93333333c0 37.54666667-30.72 68.26666667-68.26666667 68.26666667z m0-512c0-20.48-13.65333333-34.13333333-34.13333333-34.13333333H136.53333333c-20.48 0-34.13333333 13.65333333-34.13333333 34.13333333V588.8c0 20.48 13.65333333 34.13333333 34.13333333 34.13333333h750.93333334c20.48 0 34.13333333-13.65333333 34.13333333-34.13333333v-409.6zM204.8 554.66666667c-20.48 0-34.13333333-13.65333333-34.13333333-34.13333334v-273.06666666c0-17.06666667 13.65333333-34.13333333 34.13333333-34.13333334s34.13333333 13.65333333 34.13333333 34.13333334V520.53333333c0 17.06666667-13.65333333 34.13333333-34.13333333 34.13333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuxingkongjian" unicode="&#59500;" d="M904.53333333 59.73333333000005H290.13333333c-17.06666667 0-34.13333333-13.65333333-34.13333333-34.13333333s13.65333333-34.13333333 34.13333333-34.13333333h614.4c17.06666667 0 34.13333333 13.65333333 34.13333334 34.13333333s-13.65333333 34.13333333-34.13333334 34.13333333z m0 136.53333334H290.13333333c-17.06666667 0-34.13333333-13.65333333-34.13333333-34.13333334s13.65333333-34.13333333 34.13333333-34.13333333h614.4c17.06666667 0 34.13333333 13.65333333 34.13333334 34.13333333s-13.65333333 34.13333333-34.13333334 34.13333334z m0 580.26666666H119.46666667c-17.06666667 0-34.13333333-13.65333333-34.13333334-34.13333333v-170.66666667c0-20.48 13.65333333-34.13333333 34.13333334-34.13333333h785.06666666c17.06666667 0 34.13333333 13.65333333 34.13333334 34.13333333V742.4c0 20.48-13.65333333 34.13333333-34.13333334 34.13333333z m-34.13333333-170.66666666H153.6v102.4h716.8v-102.4z m34.13333333-273.06666667H290.13333333c-17.06666667 0-34.13333333-13.65333333-34.13333333-34.13333333s13.65333333-34.13333333 34.13333333-34.13333334h614.4c17.06666667 0 34.13333333 13.65333333 34.13333334 34.13333334s-13.65333333 34.13333333-34.13333334 34.13333333z m0 136.53333333H290.13333333c-17.06666667 0-34.13333333-13.65333333-34.13333333-34.13333333s13.65333333-34.13333333 34.13333333-34.13333333h614.4c17.06666667 0 34.13333333 13.65333333 34.13333334 34.13333333s-13.65333333 34.13333333-34.13333334 34.13333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fujian" unicode="&#59502;" d="M618.83369141 613.30488281c14.05634766 11.24560547 33.73681641 11.24560547 49.19941406-1.40625 14.05634766-14.05634766 14.05634766-33.7359375 0-47.79316406L367.2125 264.69111327999997c-19.67871094-18.27421875-19.67871094-50.60478516 0-71.690625 18.27421875-19.67958984 50.60566406-19.67958984 71.690625 0l352.83164062 354.23613281c49.19941406 49.20029297 49.19941406 130.73027344 1e-8 179.9296875s-130.73027344 49.20029297-179.92968751 0l-42.17167968-42.16992187-11.24560547-11.24648438-324.71630859-324.71630859c-80.12548828-80.12548828-80.12548828-208.04414062-1e-8-288.16875 80.12460938-80.12548828 208.04326172-80.12548828 288.16875 0L847.96191406 384.17578125c5.62236328 2.81162109 8.43398437 7.02861328 11.24560547 11.24560547 14.05634766 14.05722656 33.73681641 14.05722656 47.79316406 0s14.05722656-33.73681641 0-47.79404297l-2.81074218-2.81162109c-2.8125-1.40537109-5.62324219-5.62236328-8.43486329-8.43398438L569.63339844 13.070800780000013c-105.42744141-105.42744141-278.32851563-105.42744141-383.75683594 0s-105.4265625 278.32851563 0 383.75683594l378.13447266 379.53808594c75.90761719 75.90849609 199.60927734 75.90849609 276.92314453 0 75.90761719-75.90761719 75.90761719-199.60839844 0-276.92226563L486.69628906 145.20644531000005c-46.38867188-46.38867188-122.29541016-46.38867188-167.27783203 0-46.38867188 46.38867188-46.38867188 122.29628906 0 167.27871094l299.41435547 300.81972656z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ditu-shouzhi" unicode="&#59503;" d="M410.1-14.9L211.8 232.8s-10 92.4 79.3 53.5c51.5-23.1 69.9-71.7 69.9-71.7l1.8 377.3s53.3 79.5 99.6 0l0.8-238.9s57.6 78.4 125.4-5.5c0 0 50.8 85.4 122.3-4.1 0 0 50.6 98.8 101.5-8.6V35s-2.9-23.4-44.2-49.8H410.1z m0 0M411.8 783.5c-110.6 0-200.3-89.7-200.3-200.3 0-74.2 40.8-138.3 100.8-172.9v61.9c-31 27.5-50.9 67.1-50.9 111.8 0 82.6 67 149.7 149.7 149.7 82.6 0 149.7-67.1 149.7-149.7 0-43.8-19.1-82.8-49.1-110.2v-63.4c59.8 34.7 100.5 98.6 100.5 172.7 0 110.7-89.8 200.4-200.4 200.4z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon-test1" unicode="&#59505;" d="M806 804H218C148.53125 804 92 747.46875 92 678v-588C92 20.53125 148.53125-36 218-36h588c69.46875 0 126 56.53125 126 126V678C932 747.46875 875.46875 804 806 804Zm42-714c0-23.15625-18.84375-42-42-42H218c-23.15625 0-42 18.84375-42 42V678c0 23.15625 18.84375 42 42 42h588c23.15625 0 42-18.84375 42-42v-588ZM739.34375 532.875c-16.3125 16.3125-43.03125 16.3125-59.4375 0L471.59375 324.5625 343.25 452.8125c-16.3125 16.3125-43.03125 16.3125-59.4375 0-16.3125-16.3125-16.3125-43.03125 0-59.4375l158.4375-158.4375c8.25-8.25 19.21875-12.28125 30.1875-12.1875 10.96875-0.09375 21.84375 3.9375 30.1875 12.1875l237.5625 237.5625c16.3125 16.3125 16.3125 43.03125 0 59.4375l-0.84375 0.9375Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="danxuan" unicode="&#59507;" d="M512 823.99999969c243 0 439.99999969-196.99999969 439.99999969-439.99999969s-196.99999969-439.99999969-439.99999969-439.99999969S72.00000031 141 72.00000031 384 269 823.99999969 512 823.99999969z m0-51.99999938c-216.492 0-391.99999969-174.612-391.99999969-390S295.508-7.9999996899999815 512-7.9999996899999815s391.99999969 174.612 391.99999969 390S728.492 772.00000031 512 772.00000031z m0-100.00000031c159.05599969 0 288-128.94400031 288-288s-128.94400031-288-288-288-288 128.94400031-288 288 128.94400031 288 288 288z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="diliwangge" unicode="&#59508;" d="M871.424811 782.300617H152.575189c-48.82406 0-88.581803-38.769973-88.581804-86.429876v-623.741482c0-47.659903 39.722465-86.429876 88.581804-86.429876h718.849622c48.82406 0 88.546526 38.769973 88.546526 86.429876V695.870741c0.035278 47.659903-39.687188 86.429876-88.546526 86.429876zM416.838943 302.703001v169.296723h196.848451v-169.296723h-196.848451z m196.883729-64.804768v-165.768974h-196.848451v165.768974h196.848451zM152.575189 471.999724h197.836221v-169.296723H152.575189v169.296723z m264.263754 64.840046V695.870741h196.848451v-159.066249h-196.848451z m263.275984-64.840046h191.309884l0.035278-169.296723h-191.345162v169.296723z m191.345162 64.840046H680.150205V695.870741h191.309884v-159.030971z m-521.048679 159.030971v-159.066249H152.575189V695.870741h197.836221zM152.575189 237.898233h197.836221v-165.768974H152.575189v165.768974z m527.539738-165.768974v165.768974h191.345162v-165.768974h-191.345162z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ziduan" unicode="&#59509;" d="M848-96H176c-52.8 0-96 43.2-96 96V768c0 52.8 43.2 96 96 96h672c52.8 0 96-43.2 96-96v-768c0-52.8-43.2-96-96-96z m0 864H176v-768h672V768zM656 576H368c-28.8 0-48-19.2-48-48s19.2-48 48-48h96v-240c0-28.8 19.2-48 48-48s48 19.2 48 48V480h96c28.8 0 48 19.2 48 48s-19.2 48-48 48z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="-duohangwenben" unicode="&#59511;" d="M56.88888853 702.5777781300001h910.22222294v-91.02222293H56.88888853zM56.88888853 429.51111147h910.22222294v-91.02222294H56.88888853zM56.88888853 156.44444480000004h364.0888896v-91.02222293H56.88888853z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="huangguan2" unicode="&#59327;" d="M519.73632 341.94944h-2.85184v-4.10112h2.96448c1.024 0 2.73408 0.22528 2.73408 2.048s-1.4848 2.05312-2.84672 2.05312zM936.35584 559.60064c-47.5136 0-86.14912-38.51776-86.03648-86.15424 0-15.61088 4.21376-30.87872 12.30848-44.32896l-208.31744-119.54176-107.68384 322.83648c43.1872 19.9424 61.98784 71.10656 42.04544 114.29888-19.9424 43.19232-71.10656 61.99296-114.29376 42.05056s-61.99296-71.11168-42.05056-114.29888a85.9648 85.9648 0 0 1 53.7856-46.49472l-115.20512-319.6416-208.19968 122.61376c23.36256 41.48224 8.77568 94.01344-32.59392 117.376-41.48224 23.36256-94.01344 8.77568-117.376-32.59392-23.36256-41.48224-8.77568-94.01344 32.59392-117.37088a85.9648 85.9648 0 0 1 42.3936-11.17184c1.70496 0 3.3024 0.11264 4.89984 0.2304l75.78112-405.9136H855.4496l67.23584 406.82496c46.9504-7.63392 91.27424 24.38656 98.80064 71.33696 7.63392 46.9504-24.39168 91.27936-71.34208 98.80064-4.66944 0.68608-9.23136 1.14176-13.78816 1.14176z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="houqinwuzi" unicode="&#59497;" d="M882.45333333 538.34666667c5.22666667 0 9.70666667-4.58666667 9.70666667-10.13333334v-492.90666666c0-5.44-4.48-10.13333333-9.70666667-10.13333334H138.45333333c-5.22666667 0-9.70666667 4.58666667-9.70666666 10.13333334V528.2133333300001c0 5.44 4.48 10.13333333 9.70666666 10.13333334h744m21.33333334 50.45333333H127.78666667c-32.10666667 0-47.68-17.17333333-47.68-50.45333333v-502.93333334c0-33.28 26.24-60.58666667 58.34666666-60.58666666h744c32.10666667 0 58.34666667 27.30666667 58.34666667 60.58666666V538.34666667c0 33.28-15.57333333 50.45333333-47.68 50.45333333h10.66666667zM321.49333333 350.50666666999996v-67.2h-54.18666666v67.2h-67.2v54.18666666h67.2v67.2h54.18666666v-67.2h67.2v-54.18666666h-67.2zM890.24 538.88L788.26666667 746.13333333H233.38666667l-101.97333334-207.25333333-48.85333333 19.09333333 103.46666667 210.24c3.62666667 14.72 19.2 25.38666667 38.4 25.38666667h572.69333333c19.2 0 34.77333333-10.77333333 38.4-25.38666667l103.46666667-210.24-48.74666667-19.09333333zM537.49333333 561.49333333H113.70666667l97.6 223.68h326.18666666zM537.49333333 287.89333333h280.74666667v-53.33333333H537.49333333zM413.33333333 162.24h410.24v-53.33333333H413.33333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tuijian" unicode="&#59496;" d="M96 736h832c17.673 0 32-14.327 32-32v-640c0-17.673-14.327-32-32-32H96c-17.673 0-32 14.327-32 32V704c0 17.673 14.327 32 32 32z m40-64a8 8 0 0 1-8-8v-560a8 8 0 0 1 8-8h752a8 8 0 0 1 8 8V664a8 8 0 0 1-8 8H136z m159.833-232l-59.713-31.393a8 8 0 0 0-11.608 8.433l11.405 66.492-48.31 47.09a8 8 0 0 0 4.434 13.645l66.762 9.701 29.856 60.496a8 8 0 0 0 14.348 0l29.857-60.496 66.76-9.7a8 8 0 0 0 4.435-13.646l-48.31-47.09 11.405-66.492a8 8 0 0 0-11.608-8.433L295.833 440z m0-262l-59.713-31.393a8 8 0 0 0-11.608 8.433l11.405 66.492-48.31 47.09a8 8 0 0 0 4.434 13.645l66.762 9.701 29.856 60.496a8 8 0 0 0 14.348 0l29.857-60.496 66.76-9.7a8 8 0 0 0 4.435-13.646l-48.31-47.09 11.405-66.492a8 8 0 0 0-11.608-8.433L295.833 178zM505 557h292c24.3 0 44-19.7 44-44s-19.7-44-44-44H505c-24.3 0-44 19.7-44 44s19.7 44 44 44z m0-260h292c24.3 0 44-19.7 44-44s-19.7-44-44-44H505c-24.3 0-44 19.7-44 44s19.7 44 44 44z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="hezuowoshou" unicode="&#59495;" d="M260.73012148 587.91632592l180.19972741 135.7970647c49.45136197 36.50597925 114.82554469 45.95610864 171.78522864 24.07841186l286.61077333-108.61176099c19.02971259-7.37886815 38.96560197-10.48576 57.99531457-10.48576h47.38010074c13.72210569 0 25.2434963-10.48576 25.2434963-24.07841185v-349.00751803c0-13.59265185-11.65084445-25.11404247-25.2434963-25.11404247h-62.13783703c-8.41449876 0-17.86462815-3.10689185-24.20786567-8.41449877l-13.72210569-11.52139061c-3.10689185-3.10689185-8.41449876-2.07126124-11.65084445 1.03563061l-333.99087408 403.37812544c-8.41449876 10.48576-23.17223506 12.55702124-34.8230795 6.21378369l-152.75551605-84.66280296c-30.5511032-16.6995437-67.44544395-18.77080494-100.06780839-5.17815307-16.82899753 7.37886815-25.2434963 27.1853037-17.86462814 44.92047802-0.12945383 4.2719763 2.97743803 8.41449876 7.24941431 11.65084443zM24.73579457 231.52993976000005h53.72333826l37.92997136 45.95610864c33.65799506 40.77795555 94.76020148 45.95610864 135.92651853 12.55702124 14.7577363-12.55702124 26.27912691-29.25656494 31.58673381-48.02736988 32.62236445-8.41449876 57.99531457-33.39908741 67.44544397-65.89199803 23.17223506-7.24941431 44.27320889-22.00715061 55.7945995-43.88484741 20.0653432-3.10689185 38.96560197-12.55702124 53.72333827-27.1853037 30.5511032-32.3634568 36.89434075-80.5202805 13.72210568-119.09752098l-5.30760692-9.45012939v-1.03563061c25.2434963-16.6995437 59.03094518-11.52139061 76.89557334 13.59265185 8.41449876 12.55702124 11.65084445 27.1853037 8.41449877 41.81358616v1.03563063h1.03563061l4.2719763-4.14252247c19.02971259-18.77080494 49.58081581-22.00715061 71.58796642-7.24941432 17.86462815 12.55702124 26.27912691 34.43471803 22.13660444 55.40623801v1.03563064h1.03563062l4.2719763-4.14252249c18.90025876-18.77080494 48.41573136-21.8776968 71.58796642-7.24941431 17.86462815 12.55702124 27.44421136 34.43471803 23.17223506 55.40623802v0.90617679h1.03563061l4.2719763-4.14252246c17.86462815-17.73517431 46.34447013-20.84206617 67.44544395-8.41449877 26.27912691 15.66391309 34.8230795 49.0630005 19.02971259 75.21267358-2.07126124 3.10689185-4.2719763 6.2137837-6.34323752 8.41449876l-33.65799507 40.77795556-272.88866765 329.07162865c-3.10689185 3.10689185-7.37886815 4.14252247-11.65084444 2.07126123L390.31340247 492.76776297c-42.20194765-23.04278124-91.65330963-27.1853037-136.96214914-10.48576-25.2434963 8.41449876-44.27320889 28.22093431-53.72333827 52.29934617-7.37886815 25.11404247-4.2719763 52.29934617 9.45012939 74.17704296 3.10689185 6.2137837 1.03563061 13.59265185-5.30760692 16.69954371-2.07126124 1.03563061-4.2719763 1.03563061-6.34323753 1.03563061H19.42818765c-13.72210569 0-25.2434963-10.48576-25.24349629-24.07841185v-347.9718874c5.30760691-12.42756741 16.82899753-22.91332741 30.55110321-22.91332741z m189.64985679 25.11404246c-21.10097383 11.52139061-46.34447013 6.2137837-61.10220642-12.55702124l-36.89434075-44.92047801c-15.79336691-19.80643555-13.72210569-49.0630005 6.34323754-64.72691358h1.03563062l5.3076069-4.14252247c14.7577363-11.52139061 35.85871013-12.55702124 51.65207705-4.14252247 1.03563061 1.03563061 2.07126124 0 3.10689185-1.03563061v-2.07126125c-3.10689185-16.6995437 3.10689185-34.43471803 16.82899754-44.92047802l4.27197628-3.10689185c14.7577363-11.52139061 33.65799506-12.55702124 50.61644642-5.17815308 1.03563061 1.03563061 3.10689185 0 3.10689186-1.03563062v-1.03563062c-2.07126124-15.66391309 5.30760691-31.32782617 17.86462814-41.81358618l3.10689186-2.07126124c14.7577363-11.52139061 33.65799506-13.59265185 50.61644642-4.14252246 1.03563061 1.03563061 3.10689185 0 3.10689185-1.03563061v-1.03563063c2.07126124-11.52139061 8.41449876-22.00715061 17.86462815-29.25656492l2.07126123-1.03563063c21.10097383-15.66391309 50.61644642-12.55702124 66.40981334 8.41449877 1.03563061 2.07126124 3.10689185 4.14252247 4.27197629 5.17815308l6.34323753 11.52139062c11.65084445 19.80643555 8.41449876 43.88484741-8.41449876 59.5487605-13.72210569 12.55702124-33.65799506 15.66391309-51.65207705 8.41449877-1.03563061 0-1.03563061 0-2.07126122 1.03563061v1.03563062c1.03563061 25.11404247-19.02971259 46.99173925-44.27320889 49.06300049-6.34323753 0-12.68647506-1.03563061-19.02971261-3.10689185-7.37886815-1.03563061-5.30760691 5.17815309-5.3076069 5.17815308 9.45012939 24.07841185-1.03563061 50.09863111-25.2434963 60.58439111-12.68647506 5.17815309-28.47984197 4.14252247-40.00123258-2.07126123-5.30760691-1.03563061-4.2719763 4.14252247-4.2719763 4.14252247 13.8515595 19.5475279 6.47269136 47.76846222-15.66391309 60.32548345z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhuanzheng" unicode="&#59493;" d="M714.41066667 408.80355555c-138.35377778 0-250.65244445-112.29866667-250.76622222-250.76622222-0.11377778-138.35377778 112.52622222-250.99377778 251.10755555-250.88 138.01244445 0 250.42488889 112.52622222 250.53866667 250.53866667 0.22755555 138.46755555-112.29866667 251.10755555-250.88 251.10755555z m-24.00711112-395.37777777l-4.096-4.096H684.94222222c-9.216-6.82666667-21.73155555-6.82666667-30.94755555 0l-84.87822222 85.44711111c-11.15022222 11.264-11.15022222 29.46844445 0 40.73244444 11.15022222 11.264 29.24088889 11.264 40.3911111 0l60.64355556-61.09866666 181.81688889 196.72177778c10.80888889 10.80888889 29.696 10.80888889 40.39111111 0 10.80888889-11.37777778 10.80888889-29.35466667 0-40.73244445L690.40355555 13.425777779999976zM404.13866667 194.33244445000003l-0.11377778-0.11377778c10.92266667 66.56 40.50488889 123.79022222 86.24355556 172.48711111 31.744 34.24711111 70.31466667 61.32622222 113.0951111 79.41688889 2.27555555 1.024 3.98222222 2.95822222 5.00622223 5.23377778 3.64088889 9.78488889 6.59911111 19.68355555 10.24 29.46844444 1.024 2.38933333 2.84444445 4.43733333 5.23377777 5.57511111 8.76088889 3.98222222 16.27022222 10.35377778 21.61777778 18.432 9.78488889 14.22222222 11.83288889 30.72 12.40177778 47.33155555 0.45511111 15.36-3.41333333 29.46844445-15.01866666 40.5048889-1.024 1.36533333-1.70666667 3.18577778-1.5928889 5.00622222-0.68266667 13.19822222-1.13777778 26.39644445-1.93422222 39.59466666-1.82044445 37.09155555-9.67111111 73.50044445-23.21066666 107.97511112-13.53955555 34.36088889-35.27111111 61.89511111-67.12888889 80.66844444-55.75111111 32.768-115.48444445 43.23555555-178.40355556 31.17511111-58.368-11.03644445-102.05866667-43.91822222-130.50311111-97.16622222-14.10844445-26.51022222-20.59377778-55.40977778-24.576-84.76444445-3.29955555-25.03111111-3.86844445-50.40355555-5.80266666-75.54844444 0-2.38933333-0.56888889-4.66488889-1.82044445-6.71288889-20.59377778-26.85155555-19.11466667-55.06844445-4.55111111-83.62666667 5.12-10.46755555 13.88088889-18.77333333 24.46222222-23.21066666 2.16177778-1.25155555 3.75466667-3.18577778 4.55111111-5.57511112 4.096-10.80888889 7.50933333-21.84533333 11.60533333-32.54044444 5.91644445-15.13244445 14.56355555-28.21688889 27.76177778-37.888 6.03022222-4.77866667 11.94666667-9.89866667 17.408-15.36 8.41955555-7.73688889 13.99466667-17.29422222 15.13244445-28.89955556 1.024-9.55733333 1.59288889-19.22844445 1.93422222-28.89955555 0.45511111-13.19822222-3.52711111-26.05511111-11.37777778-36.52266667-14.67733333-20.25244445-34.816-33.792-57.344-42.66666666-21.95911111-8.76088889-44.71466667-15.24622222-67.24266667-22.41422222-21.27644445-6.71288889-43.12177778-11.83288889-62.464-24.00711112-22.41422222-14.22222222-39.02577778-32.65422222-43.008-60.30222222-2.16177778-15.24622222-3.75466667-30.72-5.00622222-45.96622222-2.16177778-25.94133333-0.79644445-51.65511111 6.25777778-76.91377778 3.18577778-11.37777778 9.216-19.34222222 21.04888889-21.504 25.82755555-4.89244445 51.65511111-10.69511111 77.71022222-14.22222222 38.11555555-5.12 76.45866667-8.98844445 114.57422223-12.74311111 52.45155555-5.34755555 105.24444445-7.96444445 157.92355555-7.62311111 1.93422222 0 3.75466667 0.34133333 6.59911111 0.56888888-1.59288889 3.29955555-2.73066667 5.80266667-4.096 8.192-35.27111111 66.90133333-47.90044445 138.12622222-35.61244444 213.5608889z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="lizhishenqing" unicode="&#59494;" d="M624.170667 333.48266666999996c-41.194667-40.277333-68.864-70.570667-82.986667-90.88-36.821333-52.970667-44.629333-106.432-44.629333-150.506667 0-55.466667 14.72-107.456 40.469333-152.234666H76.693333c-18.773333 0-34.026667 16.298667-34.026666 36.394666v45.610667c0 3.413333 0.533333 6.912 1.664 10.538667 10.112 30.805333 31.146667 58.090667 62.506666 81.173333 24.362667 17.962667 55.232 33.536 91.712 46.357333 56.661333 19.904 115.370667 27.882667 135.125334 30.250667 1.066667 0.128-0.917333 51.434667-0.277334 52.416 0.128 0.213333 0 18.922667-10.965333 31.274667a3.370667 3.370667 0 0 1-0.810667 0.896c-32.469333 27.456-60.117333 66.56-80.277333 113.493333a4.032 4.032 0 0 1-3.072 2.496c-28.245333 4.138667-54.336 34.752-63.594667 75.818667-10.154667 45.013333 1.344 87.338667 27.434667 104.277333a4.373333 4.373333 0 0 1 1.898667 3.733333c-1.365333 86.058667 19.2 154.346667 61.226666 202.986667C319.253333 840.19199967 393.429333 853.33333367 446.101333 853.33333367c52.693333 0 126.848-13.141333 180.906667-75.754667 42.026667-48.64 62.592-116.906667 61.226667-202.986667a4.394667 4.394667 0 0 1 1.898666-3.733333c26.069333-16.938667 37.568-59.242667 27.434667-104.277333-9.28-41.066667-35.370667-71.68-63.616-75.818667a4.032 4.032 0 0 1-3.093333-2.474667c-6.656-15.616-14.4-30.72-23.168-45.226666l-3.541334-9.578667zM768-106.66666633c-117.824 0-213.333333 95.509333-213.333333 213.333333s95.509333 213.333333 213.333333 213.333333 213.333333-95.509333 213.333333-213.333333-95.509333-213.333333-213.333333-213.333333z m-0.042667 185.92l73.514667-73.557334a19.477333 19.477333 0 0 1 27.52 27.52l-73.514667 73.557334 73.28 73.344a19.456 19.456 0 0 1-27.52 27.52L768 134.29333367000004l-73.216 73.28a19.456 19.456 0 0 1-27.52-27.52l73.216-73.28-73.408-73.450667a19.456 19.456 0 1 1 27.498667-27.52l73.386666 73.450667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="qingjia" unicode="&#59473;" d="M377.04363594 175.26545437000004c0 34.56 5.37818156 66.48 13.45090968 93.05454563 10.74545437 29.26909125 24.19636406 58.48363594 43.00363594 82.46181844 18.81818156 26.57454562 37.64727281 47.84727281 61.83272719 66.48 24.18545437 18.58909125 51.06545437 34.56 80.66181844 45.20727281 2.69454562 5.30181844 2.69454562 10.64727281 5.37818156 15.93818156l5.33454562 13.28727281c0 2.69454562 2.69454562 7.98545437 2.69454563 10.63636313 5.37818156 2.69454562 10.75636406 5.34545438 16.13454562 10.63636406 5.33454563 2.65090875 8.02909125 10.64727281 13.40727282 15.98181844 2.68363594 5.30181844 5.37818156 18.58909125 5.37818156 29.22545438v21.27272718c-2.69454562 5.34545438-2.69454562 10.63636406-5.37818156 15.98181844-2.69454562 5.30181844-5.37818156 7.95272719-10.75636407 10.63636313 0 23.92363594-2.65090875 45.20727281-5.33454562 69.13090968-2.69454562 18.63272719-8.07272719 39.90545437-13.45090875 61.13454469-5.37818156 21.28363594-18.79636406 42.55636406-32.24727281 58.5381825-5.37818156 7.98545437-16.13454563 15.93818156-26.88 23.92363594-8.06181844 10.63636406-21.52363594 18.63272719-34.95272719 23.92363687-13.45090875 5.33454563-29.57454563 10.63636406-45.68727281 13.28727188A153.02181844 153.02181844 0 0 1 401.24 864c-13.42909125 0-26.88-2.65090875-40.30909125-2.65090875-13.45090875-2.65090875-26.88-7.98545437-40.33090875-10.64727281-13.42909125-5.33454563-29.57454563-13.28727281-43.00363594-23.92363688-13.42909125-10.64727281-26.88-21.28363594-37.62545531-37.26545437-10.75636406-15.93818156-21.52363594-34.56-26.9018175-55.84363594-5.35636406-21.27272719-10.73454562-39.86181844-13.42909125-58.49454563-2.69454562-21.27272719-2.69454562-42.55636406-2.69454562-63.82909124-5.35636406-5.30181844-8.05090875-10.63636406-10.75636313-18.58909032-2.67272719-5.33454563-5.36727281-13.33090875-5.36727281-21.27272812 0-7.98545437 0-15.98181844 2.69454562-26.61818156 2.67272719-10.63636406 5.37818156-18.63272719 10.73454469-21.27272719 2.69454562-5.30181844 8.07272719-10.64727281 10.75636406-13.28727281 5.37818156-2.65090875 8.05090875-5.30181844 13.42909125-5.30181844 2.69454562-10.63636406 5.38909125-18.63272719 8.07272719-26.61818157 2.69454562-7.98545437 5.37818156-13.28727281 10.75636313-21.27272718 2.69454562-5.30181844 8.07272719-13.28727281 13.42909125-15.93818157 10.75636406-7.98545437 18.81818156-15.98181844 26.87999999-23.92363687 8.05090875-7.98545437 13.42909125-18.63272719 13.42909032-29.26909031v-23.92363688c0-5.33454563-2.67272719-13.28727281-5.37818157-21.27272719-2.67272719-5.33454563-8.05090875-13.28727281-13.42909031-21.27272718-5.37818156-5.34545438-16.12363594-13.29818156-26.8581825-21.28363594-10.75636406-5.33454563-21.52363594-10.63636406-34.95272719-15.97090969-13.45090875-5.30181844-26.88-7.95272719-37.64727281-13.29818156-13.42909125-2.64-26.88-7.95272719-37.63636312-10.63636406-13.42909125-5.30181844-24.19636406-10.64727281-34.93090969-15.93818157-10.76727281-5.34545438-18.81818156-13.29818156-26.88-23.92363593-5.37818156-10.64727281-10.75636406-21.27272719-13.45090875-34.57090969-8.05090875-37.25454562-8.05090875-66.48-5.37818156-90.44727281 2.71636406-23.92363594 8.07272719-37.21090875 13.45090875-42.5018175 2.69454562-2.69454562 13.45090875-5.34545438 26.88-7.98545438 13.42909125-2.69454562 29.56363594-5.34545438 48.38181843-7.98545531 18.80727281-2.65090875 40.33090875-5.30181844 61.83272719-7.98545438 21.50181844-2.65090875 45.68727281-5.30181844 69.90545438-5.30181843 21.48-2.64 45.67636406-2.64 67.16727281-5.33454469 21.52363594-2.65090875 43.02545438-2.65090875 59.14909125-2.65090969h21.52363594c-13.45090875 23.92363594-24.20727281 50.55272719-32.26909125 74.47636406-10.75636406 29.24727281-13.44 55.82181844-13.44 85.09090876z m567.18545531 103.69090969c-13.45090875 31.92-34.93090875 61.17818156-59.10545531 85.11272719-24.21818156 23.92363594-51.12 42.55636406-86.05090875 55.84363594C769.52 433.2 734.55636406 438.54545437 696.93090875 438.54545437c-37.61454563 0-72.58909125-5.34545438-104.83636312-21.28363593-32.23636406-15.97090875-61.81090875-34.60363594-85.99636407-58.52727282-24.21818156-23.92363594-43.02545438-53.19272719-59.13818156-85.06909125-13.45090875-29.26909125-18.84-63.84-18.84-101.09454562 0-37.21090875 5.37818156-71.78181844 21.52363594-103.69090875 13.42909125-31.92 34.93090875-61.17818156 59.11636406-85.11272719s53.79272719-42.55636406 86.02909125-58.49454562c32.23636406-13.28727281 67.21090875-21.27272719 104.83636313-21.27272719 37.61454563 0 72.58909125 5.33454563 104.82545437 21.27272719 32.24727281 13.29818156 61.84363594 34.57090875 86.05090969 58.49454562 24.17454563 23.92363594 42.96 53.19272719 59.10545437 85.11272719 13.45090875 31.90909125 21.52363594 66.48 21.52363594 103.69090875-2.68363594 37.25454562-10.75636406 71.82545437-26.9018175 106.38545531z m-145.15636406-212.72727281c-8.01818156-7.98545437-18.79636406-10.64727281-29.55272719-10.64727281s-21.52363594 5.30181844-29.58545437 10.64727281l-80.62909125 82.41818156c-5.37818156 5.33454563-10.75636406 18.63272719-10.75636313 29.26909125V337.45090875000005c0 21.27272719 18.82909125 39.90545437 40.30909031 39.90545531 21.52363594 0 40.30909125-18.63272719 40.30909125-39.90545531v-146.24727281l69.89454563-69.13090875c16.15636406-13.29818156 16.15636406-39.90545437 0.01090875-55.84363594z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tansuo" unicode="&#59487;" d="M455.521173 694.337047c-51.697429 0-93.773733-42.074258-93.773733-93.77271 0-51.702546 42.076304-93.77885 93.773733-93.77885 51.704592 0 93.777827 42.076304 93.777827 93.77885C549.298999 652.263813 507.225765 694.337047 455.521173 694.337047zM455.521173 569.305403c-17.22122 0-31.257911 14.033621-31.257911 31.258934 0 17.223267 14.036691 31.255865 31.257911 31.255865 17.22429 0 31.260981-14.033621 31.260981-31.255865C486.783177 583.340047 472.745463 569.305403 455.521173 569.305403zM314.863642 444.269665c-43.078121 0-78.148871-35.069727-78.148871-78.142731 0-43.10575 35.07075-78.146824 78.148871-78.146824 43.070958 0 78.144778 35.041074 78.144778 78.146824C393.009444 409.199938 357.9346 444.269665 314.863642 444.269665zM314.863642 350.500025c-8.630564 0-15.628956 6.996344-15.628956 15.626909 0 8.626471 6.998391 15.629979 15.628956 15.629979 8.626471 0 15.625886-7.004531 15.625886-15.629979C330.489528 357.496369 323.491137 350.500025 314.863642 350.500025zM687.27956 202.148255c-11.57257 11.568477-27.840068 18.306948-44.205804 18.306948-16.368806 0-32.631188-6.738471-44.205804-18.306948-11.57257-11.57564-18.310018-27.847232-18.310018-44.205804 0-16.362666 6.734378-32.635281 18.306948-44.209898 11.574616-11.568477 27.843138-18.306948 44.208874-18.306948 16.368806 0 32.628118 6.738471 44.202735 18.306948 11.57564 11.57564 18.313088 27.847232 18.313088 44.209898C705.589578 174.301024 698.85213 190.572616 687.27956 202.148255zM886.010741 616.946446c25.13547 37.312814 43.149752 69.562309 53.618175 96.03831 16.757662 42.383296 15.035438 74.090439-5.115508 94.241384-8.112772 8.110725-23.211654 23.212678-48.730864 20.408819-14.0766-1.545192-28.224832-7.80578-56.415894-20.278859-13.469779-5.960759-30.235628-13.379729-51.600215-22.330588-16.160051-6.77224-23.772426-25.362644-17.001209-41.523719 6.77224-16.163121 25.364691-23.774473 41.524742-17.002232 21.942755 9.194406 39.026852 16.753569 52.754504 22.827915 12.960173 5.734608 25.372877 11.226692 32.598442 13.782911-0.246617-8.855692-5.991458-42.445718-65.763796-127.419018-59.276035-84.274382-151.253866-190.017728-258.990612-297.753451C459.303312 234.348632 353.955986 144.981255 265.355065 85.452463c-3.260254-0.861624-6.440689-2.230808-9.4093-4.197602-73.948199-48.941666-112.860441-60.563354-127.005602-61.391209 0.865717 11.82328 9.128915 47.810912 66.210981 131.001613 8.884344 12.950963 6.824429 30.132274-4.090155 40.698934-33.642215 57.223283-51.394531 122.514311-51.394531 189.305507 0 206.253504 167.799704 374.053208 374.053208 374.053208 72.623018 0 108.129696-9.576099 171.736363-36.549427 16.132422-6.843872 34.755572 0.691755 41.596374 16.822131 6.840802 16.132422-0.691755 34.755572-16.822131 41.596374C642.417817 805.548942 597.952092 818.378132 513.720689 818.378132c-116.862591 0-226.731908-45.509497-309.364907-128.143519C121.720737 607.601614 76.212264 497.733321 76.212264 380.869706c0-74.40664 18.86158-147.242506 54.682413-211.868385-25.425066-38.677904-43.635823-72.221882-54.205553-99.899244-16.562211-43.364647-14.729469-75.584466 5.450129-95.763041 11.210319-11.210319 25.876344-16.85897 44.364417-16.85897 34.604122 0.00307 82.578764 19.816325 146.154731 60.013839 72.92387-50.077535 158.016897-76.471672 247.145843-76.471672 116.861568 0 226.728838 45.511543 309.363883 128.143519 82.634022 82.636069 128.143519 192.502315 128.143519 309.363883C957.310623 463.366605 932.712389 545.733545 886.010741 616.946446zM519.803221 3.47745c-66.9846 0-131.288139 17.439184-188.201359 50.722218 84.915995 60.758806 181.453678 144.164401 276.157597 238.871389 94.662986 94.659917 177.679725 188.183963 238.078327 267.919982 31.510668-55.772234 48.01762-118.445646 48.01762-183.461405C893.855406 171.278177 726.055702 3.47745 519.803221 3.47745z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bianji4" unicode="&#59492;" d="M280.9 131.89999999999998h419.9c23.2 0 42 18.8 42 42s-18.8 42-42 42H280.9c-23.2 0-42-18.8-42-42s18.8-42 42-42zM940.7 819.7c-16.4 16.4-43 16.4-59.4 0L544.9 483.2c-16.4-16.4-16.4-43 0-59.4s43-16.4 59.4 0l336.5 336.5c16.3 16.4 16.3 43-0.1 59.4zM280.9 299.9h140c23.2 0 42 18.8 42 42s-18.8 42-42 42h-140c-23.2 0-42-18.8-42-42s18.8-42 42-42z m615.8 84c-18.3 0-33.6-11.7-39.4-28h-2.6V76c0-30.9-25.1-56-56-56H211c-30.9 0-56 25.1-56 56V663.8c0 30.9 25.1 56 56 56h279.9v2.6c16.3 5.8 28 21.2 28 39.4 0 18.3-11.7 33.6-28 39.4v2.6H183c-61.8 0-112-50.1-112-112V48c0-61.8 50.1-112 112-112h643.8c61.8 0 112 50.1 112 112V355.9h-2.6c-5.8 16.2-21.2 28-39.5 28z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="duoweidu" unicode="&#59491;" d="M1002.331307 523.377778c-31.288889 36.977778-82.488889 42.666667-119.466667 11.377778l-372.622222 227.555555c-2.844444 17.066667-8.533333 31.288889-19.911111 45.511111-31.288889 36.977778-82.488889 42.666667-119.466667 11.377778-17.066667-14.222222-25.6-34.133333-28.444444-54.044444L140.46464 645.688889c-22.755556 19.911111-51.2 25.6-79.644444 17.066667-45.511111-14.222222-71.111111-59.733333-56.888889-105.244445 8.533333-34.133333 39.822222-56.888889 71.111111-59.733333l48.355555-213.333334C100.642418 270.222222 83.575751 241.777778 83.575751 213.333333c0-48.355556 36.977778-85.333333 85.333333-85.333333 19.911111 0 39.822222 8.533333 54.044445 19.911111l201.955555-119.466667c0-5.688889-2.844444-11.377778-2.844444-17.066666 0-48.355556 36.977778-85.333333 85.333333-85.333334s85.333333 36.977778 85.333334 85.333334c0 14.222222-2.844444 28.444444-8.533334 39.822222l315.733334 338.488889c28.444444-11.377778 62.577778-8.533333 88.177777 11.377778 39.822222 31.288889 45.511111 85.333333 14.222223 122.311111zM854.420196 420.977778L544.375751 91.022222c-8.533333 2.844444-14.222222 5.688889-22.755555 5.688889l-45.511112 213.333333c34.133333 17.066667 59.733333 51.2 62.577778 93.866667l315.733334 17.066667zM456.197973 76.8l-201.955555 119.466667c0 5.688889 2.844444 11.377778 2.844444 17.066666 0 8.533333-2.844444 17.066667-5.688889 25.6l105.244445 85.333334c17.066667-14.222222 39.822222-22.755556 65.422222-22.755556l45.511111-213.333333-11.377778-11.377778z m-275.911111 219.022222l-48.355555 213.333334 184.888889-79.644445c0-5.688889-2.844444-11.377778-2.844445-17.066667 0-17.066667 2.844444-31.288889 8.533333-45.511111l-105.244444-82.488889c-11.377778 5.688889-22.755556 11.377778-36.977778 11.377778z m-11.377778 301.511111l187.733334 108.088889c2.844444-2.844444 2.844444-5.688889 5.688889-8.533333 11.377778-11.377778 22.755556-19.911111 36.977777-25.6v-150.755556c-25.6-5.688889-45.511111-19.911111-59.733333-39.822222l-170.666667 73.955556c0 14.222222 2.844444 28.444444 0 42.666666z m327.111112 108.088889L854.420196 486.4v-8.533333l-324.266667-19.911111c-14.222222 31.288889-42.666667 54.044444-73.955556 62.577777V671.288889c8.533333 2.844444 17.066667 8.533333 25.6 14.222222 5.688889 5.688889 11.377778 11.377778 14.222223 19.911111z"  horiz-adv-x="1025" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zaixianxuexi" unicode="&#59485;" d="M1008 566.4c-153.6 67.2-307.2 131.2-460.8 198.4-16 6.4-32 6.4-48 0-150.4-67.2-304-131.2-454.4-195.2-16-6.4-32-12.8-32-35.2 0-22.4 16-28.8 32-35.2 140.8-60.8 281.6-118.4 422.4-182.4 38.4-19.2 73.6-22.4 112 0 19.2 12.8 41.6 19.2 64 28.8 89.6 38.4 176 76.8 268.8 115.2v-323.2c0-19.2 6.4-25.6 25.6-25.6 19.2 0 25.6 3.2 25.6 25.6 0 96 3.2 195.2-3.2 291.2 0 38.4 6.4 64 48 73.6 16 3.2 28.8 12.8 28.8 32s-12.8 25.6-28.8 32zM848 348.8c0 22.4-6.4 22.4-22.4 16-86.4-38.4-172.8-73.6-256-112-32-12.8-57.6-12.8-89.6 0-86.4 38.4-172.8 73.6-259.2 112-16 6.4-19.2 3.2-19.2-12.8v-128c-9.6-86.4 35.2-144 108.8-176 147.2-67.2 294.4-64 438.4 6.4 67.2 35.2 105.6 86.4 99.2 169.6-3.2 41.6 0 83.2 0 124.8z"  horiz-adv-x="1036" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shijiantemai" unicode="&#59476;" d="M537.55904 483.17781333c84.32298667 45.65674667 51.22730667 110.10048 51.22730667 110.10048L446.35477333 593.27829333c0 0-31.56650667-69.14048 50.46272-110.10048l0-66.08213333c0 0-74.16490667-99.39626667-114.25109333-213.75658667l0-31.1296 269.13450667 0 0 31.1296c-51.99189333 126.1568-114.25109333 213.75658667-114.25109334 213.75658667L537.44981333 483.17781333M275.41504 29.12256000000002l7.97354667 60.73002667c0 53.84874667 143.30538667 267.16842667 143.30538666 294.25664 0 26.97898667-143.30538667 240.18944-143.30538666 294.14741333l-7.97354667 56.03328 484.31104 0-8.62890667-56.03328c0-53.95797333-144.50688-267.27765333-144.50688-294.14741333 0-27.08821333 144.50688-240.40789333 144.50688-294.25664l8.62890667-60.73002667L275.41504 29.12256000000002zM797.73696 89.85258667000005c-8.30122667 49.26122667-135.11338667 278.30954667-142.32234667 294.25664 7.20896 15.83786667 142.32234667 219.10869333 142.32234667 294.14741333l18.89621333 56.03328L845.14133333 734.2899199999999l-0.54613333 86.61674667L189.78133333 820.90666667l0.21845334-86.61674667 28.50816 0 18.13162666-56.03328c0-75.14794667 135.11338667-279.62026667 141.44853334-294.47509333-6.22592-14.7456-141.44853333-219.43637333-141.44853334-294.03818667l-18.13162666-60.73002667-28.50816 0L189.78133333-52.90666667000005l654.81386667 0 0.54613333 82.02922667-28.50816 0C816.63317333 29.12256000000002 806.03818667 40.59136000000001 797.73696 89.85258667000005z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="drxx32" unicode="&#59478;" d="M1029.022496 896H95.412361A95.829996 95.829996 0 0 1 0.000837 799.751532v-659.092766a95.829996 95.829996 0 0 1 95.411524-95.829996h302.554966v-92.900695H327.664098a39.33633 39.33633 0 1 1 0-78.67266H795.096873a39.33633 39.33633 0 1 1 0 78.67266h-68.210871v91.64528h302.136494a95.829996 95.829996 0 0 1 95.411524 95.411524V799.751532A95.411524 95.411524 0 0 1 1029.022496 896z m12.554148-757.433592a14.228034 14.228034 0 0 0-14.228034-14.228034H95.412361a14.228034 14.228034 0 0 0-11.717204 13.391091V802.680834a15.064978 15.064978 0 0 0 13.809562 13.809562h929.843891a13.809563 13.809563 0 0 0 14.228034-13.809562zM150.232141 736.562321v-544.013077h822.296689v544.013077z m513.046179-389.597057l-12.554148-11.298734a24.689824 24.689824 0 0 0-35.151615 0l-94.156109 105.454843L460.319595 387.97548c-10.043318-10.043318-18.41275-5.858602-19.668165 8.369432l-12.554148 167.388639a17.575807 17.575807 0 0 0 22.178994 20.92358l167.388639-29.293012c14.228034-2.929301 16.738864-12.554148 7.114018-21.342051L573.306926 487.57172l91.64528-105.454842a24.689824 24.689824 0 0 0-1.673886-35.151614z"  horiz-adv-x="1125" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhishi1" unicode="&#59488;" d="M112.28693333 239.87733333000006c-14.57066667 0-26.35413333-11.81866667-26.35413333-26.34986666v-48.11733334c0-14.57173333 11.78346667-26.34986667 26.35413333-26.34986666 14.53013333 0 26.31253333 11.77813333 26.31253334 26.34986666v48.11733334c0 14.53013333-11.7824 26.34986667-26.31253334 26.34986666zM991.4432 558.7103999999999L516.24853333 770.3712c-7.0592 3.17546667-15.136 3.02506667-22.12373333-0.2944L31.87733333 547.9328c-9.3952-4.50773333-15.22986667-14.03093333-14.9216-24.44693333 0.24746667-10.40853333 6.5664-19.60213333 16.15573334-23.62666667l52.92373333-22.06933333c-0.0096-0.3488-0.1024-0.68373333-0.1024-1.03893334v-189.1232c0-14.5344 11.78346667-26.31786667 26.35413333-26.31786666 14.53013333 0 26.31253333 11.78346667 26.31253334 26.31786666V455.8784l50.29973333-20.97173333v-272.1472c0-0.81813333 0.0416-1.63093333 0.12266667-2.4384-0.0416-0.736-0.07146667-1.55946667-0.08213334-2.464-0.07253333-26.8128 12.05013333-51.2576 30.27413334-70.88213334 55.0944-58.08 164.87466667-90.896 292.76373333-91.63733333 85.216 0.07253333 162.5184 15.63093333 220.78293333 42.26346667 29.13173333 13.41866667 53.68533333 29.616 71.9808 49.37386666 18.16426667 19.62453333 30.30613333 44.06826667 30.26453334 70.88106667 0 1.01333333-0.0288 1.92426667-0.08106667 2.73066667 0.06186667 0.72106667 0.08106667 1.44746667 0.08106667 2.1728V441.51253333L991.36 510.5664c9.52746667 4.208 15.6928 13.62453333 15.6928 24.03413333 0 10.41386667-6.12266667 19.90186667-15.6096 24.10986667zM765.9776 122.71466667000004c-34.98666667-39.68106667-136.10133333-75.41973333-253.99893333-74.67733334-78.61973333-0.07253333-149.68533333 14.816-198.80213334 37.46666667-24.5728 11.248-43.488 24.3776-55.2384 37.21066667-11.45386667 12.5952-16.032 23.69813333-16.32 34.1792 0.12266667 0.74666667 0.30826667 2.048 0.45226667 3.9104a26.37333333 26.37333333 0 0 1-0.4736 7.38346666V231.09333332999995c15.04426667-12.53333333 33.40266667-23.56586667 53.97333333-33.0528 56.43306667-25.83893333 132.48-41.30133333 216.40853334-41.3408 16.86613333 0 33.39306667 0.62613333 49.54986666 1.84213334 8.69546667 0.6624 15.2096 8.24746667 14.57173334 16.93333333-0.6592 8.72533333-8.2336 15.23946667-16.95893334 14.576a639.13813333 639.13813333 0 0 0-47.1616-1.72906667c-79.94666667-0.03626667-152.24746667 15.01866667-203.19573333 38.4288-32.4096 14.79786667-55.008 32.5696-67.18613333 50.50133334V412.9312l261.53173333-109.0432c0.8384-0.34986667 1.71733333-0.52053333 2.5824-0.77866667 0.81813333-0.24533333 1.6256-0.57386667 2.45973333-0.7392 0.71466667-0.13866667 1.44-0.1344 2.16533334-0.21013333 0.97813333-0.11413333 1.95093333-0.29546667 2.9376-0.29546667 0.0416 0 0.08213333 0.01706667 0.12266666 0.01706667 1.2704 0.00533333 2.5312 0.20053333 3.79306667 0.3904 0.50986667 0.0768 1.03466667 0.06186667 1.54346667 0.17493333a26.3616 26.3616 0 0 1 5.19146666 1.6608l258.3936 114.1184v-140.94933333c-4.88213333-7.25333333-11.43786667-14.50986667-19.96266666-21.696-20.76586667-17.47946667-52.06933333-33.3728-90.41066667-45.0976-8.3776-2.54186667-13.0496-11.39306667-10.5088-19.7632 2.10133333-6.79786667 8.3872-11.1648 15.1392-11.1648a15.68 15.68 0 0 1 4.608 0.69546667c41.13813333 12.62613333 75.74826667 29.6768 101.13493333 50.82026666v-63.056a25.744 25.744 0 0 1-0.44053333-7.50186666c0.17493333-1.792 0.37013333-2.9888 0.46293333-3.64266667-0.29866667-10.47786667-4.87786667-21.5712-16.36266666-34.15466667z m32.096 360.07253333l-0.05013333-0.01493333-285.04746667-125.89333334-287.56586667 119.91893334c-0.00533333 0-0.01493333 0.0064-0.02133333 0.0064L107.648 525.90506667l398.30186667 191.41226666 409.76746666-182.56746666-117.64266666-51.96266667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="-xitongguanli" unicode="&#59489;" d="M646.144 552.96a133.632 133.632 0 0 0 6.656 39.424l-55.808 30.72a223.744 223.744 0 0 0-23.04-18.432 121.856 121.856 0 0 0-69.632-26.112 123.904 123.904 0 0 0-70.144 26.624c-9.728 7.168-17.92 14.336-23.04 18.944l-58.368-32.256a126.464 126.464 0 0 0-105.472-166.4 321.024 321.024 0 0 1-3.584-41.472 312.832 312.832 0 0 1 3.584-40.96A129.024 129.024 0 0 0 358.4 215.04a133.632 133.632 0 0 0-6.656-39.424l53.76-30.208a281.6 281.6 0 0 0 23.04 19.968 125.44 125.44 0 0 0 71.68 27.136 120.832 120.832 0 0 0 71.68-28.16 237.568 237.568 0 0 0 23.552-19.456l56.32 31.232a126.976 126.976 0 0 0 105.984 166.912 240.64 240.64 0 0 1 4.096 40.96 252.928 252.928 0 0 1-4.096 41.472 128.512 128.512 0 0 0-111.616 127.488z m-144.896-287.744A119.296 119.296 0 1 0 620.544 384a119.296 119.296 0 0 0-119.296-118.784zM501.248 442.368A57.856 57.856 0 1 1 559.104 384a58.368 58.368 0 0 1-57.856 58.368zM921.6 896H102.4a102.4 102.4 0 0 1-102.4-102.4v-819.2a102.4 102.4 0 0 1 102.4-102.4h819.2a102.4 102.4 0 0 1 102.4 102.4V793.6a102.4 102.4 0 0 1-102.4 102.4z m-102.4-574.464a41.984 41.984 0 0 0-38.912-38.912h-3.072a67.584 67.584 0 0 1-67.072-67.584 82.432 82.432 0 0 1 5.632-25.6 51.2 51.2 0 0 0-18.944-61.44l-82.432-42.496a56.32 56.32 0 0 0-21.504-4.608 53.76 53.76 0 0 0-38.4 16.384 102.4 102.4 0 0 1-55.296 33.792 106.496 106.496 0 0 1-55.296-32.768 51.2 51.2 0 0 0-57.856-12.288L310.272 128a51.2 51.2 0 0 0-17.92 60.416 79.872 79.872 0 0 1 5.632 25.6A67.584 67.584 0 0 1 230.4 281.6a41.984 41.984 0 0 0-38.912 38.912A422.4 422.4 0 0 0 182.272 384a432.64 432.64 0 0 0 6.656 62.976 41.472 41.472 0 0 0 38.4 39.424h3.072a68.096 68.096 0 0 1 67.584 66.56 87.04 87.04 0 0 1-5.632 26.112A51.2 51.2 0 0 0 307.2 640l80.384 44.032a47.104 47.104 0 0 0 19.456 3.584 51.2 51.2 0 0 0 37.888-15.872A102.4 102.4 0 0 1 504.32 640a102.4 102.4 0 0 1 53.76 31.232 53.76 53.76 0 0 0 37.888 15.36 51.2 51.2 0 0 0 19.968-3.584l78.848-43.008a51.2 51.2 0 0 0 18.432-60.416 79.872 79.872 0 0 1-5.632-25.6A67.584 67.584 0 0 1 774.656 486.4h3.072a41.472 41.472 0 0 0 38.912-38.4 432.64 432.64 0 0 0 6.656-64 401.408 401.408 0 0 0-4.096-62.464z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dictionary-fill" unicode="&#59490;" d="M851.27259022 827.0427780800001H175.21292325c-27.96202667 0-50.95302637-22.9909997-50.95302636-50.95302638v-782.31536829c0-27.96202667 22.9909997-50.95302637 50.95302636-50.95302638h676.68104534c27.96202667 0 50.95302637 22.9909997 50.95302638 50.95302638V775.46837333a51.44697363 51.44697363 0 0 1-51.57440475 51.57440475zM446.13389275 82.01011200000005H267.79830045c-17.39859437 0-31.69029689 14.29170252-31.6902969 31.69029689s14.29170252 31.69029689 31.6902969 31.69029689h177.71421392c17.39859437 0 31.69029689-14.29170252 31.69029688-31.69029689s-13.67032415-31.69029689-31.0689185-31.69029689z m152.23770073 154.10183585H267.79830045c-17.39859437 0-31.69029689 14.29170252-31.6902969 31.6902969s14.29170252 31.69029689 31.6902969 31.69029688h329.95191466c17.39859437 0 31.69029689-14.29170252 31.69029689-31.69029688s-13.67032415-31.69029689-31.06891852-31.6902969z m152.23770074 203.81210548c-4.97102697-3.10689185-11.80618903-0.62137837-11.80618904-0.62137836l-100.663296 42.87510755c-5.59240533 2.48551348-11.18481067 2.48551348-16.777216 0l-98.79916088-43.49648593s-6.2137837-1.24275675-9.32067555 1.24275674-3.72827022 8.07791882-3.72827023 8.07791882v326.22364444H754.33756445v-324.35950934s0.62137837-6.83516208-3.72827023-9.94205392z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="lixiangshenqing" unicode="&#59486;" d="M505.4721248 151.35856747000003H248.64246293c-24.46111147 0-42.80312427 18.3496544-42.80312533 42.8085824 0 24.45565333 18.3420128 42.80530773 42.80312533 42.80530666h256.82966187c24.46002027 0 42.80094187-18.3496544 42.80094187-42.80530666 0-24.458928-18.3398304-42.8085824-42.80094187-42.8085824zM248.64246293 414.29968747h348.5517344c24.46002027 0 42.80421653-18.34419627 42.80421654-42.80421654 0-24.45565333-18.34419627-42.80421653-42.80421654-42.80421546H248.64246293c-24.46111147 0-42.80312427 18.3496544-42.80312533 42.80421546 0 24.46002027 18.3420128 42.80421653 42.80312533 42.80421654z m0 183.44741973h446.38744854c24.46002027 0 42.80421653-18.34419627 42.80421546-42.80421653 0-24.458928-18.34419627-42.80421653-42.80421546-42.80421547H248.64246293c-24.46111147 0-42.80312427 18.34528747-42.80312533 42.80421547 0 24.46002027 18.3420128 42.80421653 42.80312533 42.80421653zM560.50143893 133.01437120000003c0 134.52847147 110.06845227 244.59583253 244.598016 244.59583253 18.3409216 0 36.68511787 0 55.0358624-6.115824V720.04174827c0 79.49697493-67.2664192 140.64429547-152.87048426 140.64429546h-489.2003968c-85.608432 0-152.87157653-61.1484128-152.87157654-140.64429546v-672.63362667c0-79.4915168 67.26423573-140.6399296 152.87157654-140.6399296h495.3085792c-85.608432 36.68730133-152.87157653 122.29464107-152.87157654 226.2461792z m0 0M915.16681493 188.05132587000003s0-6.115824 0 0l-12.23055573-12.2327392h-12.23055573l-42.80421547 42.80421653v12.23273813l12.23382933 12.22728107h12.22618987l42.80530773-42.80312427v-12.22837226z m-36.68948373-36.6927584L762.2941472 35.17974933000005s-6.11473173-6.1169152-12.22728107-6.1169152l-55.03695466-6.115824c-6.115824 0-6.115824 0-6.115824 6.115824l6.115824 55.03695467c0 6.11254933 0 6.11254933 6.1169152 12.22728107l116.18645866 116.183184h12.2250976l42.80421654-42.80312427c12.22728107-12.23055573 12.22728107-12.23055573 6.11473173-18.34856213z m-73.37787627 165.10431466c-103.95371947 0-189.56215253-85.6073408-189.56215253-189.5588768 0-103.95590293 85.608432-189.56433493 189.56215253-189.564336 103.95153707 0 189.5577856 85.608432 189.5577856 189.564336 0 103.95153707-85.60515733 189.55887787-189.5577856 189.5588768z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yongche" unicode="&#59484;" d="M872.64 473.81333333H871.46666667l-76.37333334 196.48c-16.96 43.62666667-58.98666667 72.32-105.81333333 72.32H572.8v28.05333334c0 17.49333333-14.18666667 31.68-31.68 31.68h-56c-17.49333333 0-31.68-14.18666667-31.68-31.68v-28.05333334H336.85333333c-46.82666667 0-88.85333333-28.69333333-105.81333333-72.32L154.66666667 473.81333333h-1.17333334C88.10666667 473.81333333 35.2 420.90666667 35.2 355.52v-225.17333333c0-8.21333333 6.72-14.93333333 14.93333333-14.93333334h74.66666667v-89.6c0-32.96 26.77333333-59.73333333 59.73333333-59.73333333s59.73333333 26.77333333 59.73333334 59.73333333v89.6h537.6v-89.6c0-32.96 26.77333333-59.73333333 59.73333333-59.73333333s59.73333333 26.77333333 59.73333333 59.73333333v89.6h74.66666667c8.21333333 0 14.93333333 6.72 14.93333333 14.93333334V355.52c0 65.38666667-52.90666667 118.29333333-118.29333333 118.29333333z m-595.2 162.02666667c10.98666667 28.37333333 38.29333333 47.04 68.69333333 47.04h333.86666667c30.4 0 57.70666667-18.66666667 68.69333333-47.04L811.73333333 473.81333333H214.4l63.04 162.02666667zM214.4 234.88c-32.96 0-59.73333333 26.77333333-59.73333333 59.73333333s26.77333333 59.73333333 59.73333333 59.73333334 59.73333333-26.77333333 59.73333333-59.73333334-26.77333333-59.73333333-59.73333333-59.73333333z m597.33333333 0c-32.96 0-59.73333333 26.77333333-59.73333333 59.73333333s26.77333333 59.73333333 59.73333333 59.73333334 59.73333333-26.77333333 59.73333334-59.73333334-26.77333333-59.73333333-59.73333334-59.73333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wupin" unicode="&#59483;" d="M961.856 537.536V25.6c0-12.8-2.624-24.064-7.872-33.664s-11.072-17.664-17.472-24.064c-9.344-9.344-18.816-15.872-28.416-19.712-9.6-3.776-19.392-5.696-29.312-5.696H136.768c-22.72 0.576-41.152 8.448-55.104 23.616-14.016 15.168-21.312 32.96-21.888 53.376V537.536l83.136 256.384c0 1.728 6.72 9.216 20.096 22.336 13.44 13.12 34.432 20.544 62.976 22.336h569.6c2.944 1.152 15.296-2.496 37.184-10.944 21.888-8.448 37.184-28.16 45.952-59.072l83.136-231.04z m-108.48 63.872l-51.648 153.984H213.76l-45.504-153.984h685.12z m-171.072-385.472c11.392 11.392 17.088 26.816 17.088 46.4 0 19.52-5.696 35.008-17.088 46.4s-27.008 17.344-46.784 17.92H380.032c-19.84-0.576-35.456-6.592-46.784-17.92s-17.088-26.816-17.088-46.4c0-19.52 5.696-35.008 17.088-46.4s26.944-17.088 46.784-17.088H635.52c19.776 0.064 35.392 5.696 46.784 17.088z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shoukuandanguanli" unicode="&#59482;" d="M318.81671111 852.61653333m7.04284444 0l330.29688889 0q7.04284445 0 7.04284444-7.04284444l0-116.78151111q0-7.04284445-7.04284444-7.04284445l-330.29688889 0q-7.04284445 0-7.04284444 7.04284445l0 116.78151111q0 7.04284445 7.04284444 7.04284444ZM505.18471111 109.72728888999995c0 136.81777778 109.11288889 247.73973333 243.70062222 247.73973333a239.45671111 239.45671111 0 0 0 112.37831111-27.86417777c-0.39822222 204.72035555-0.53475555 412.25102222-0.53475556 412.25102222 0 13.85813333-11.03644445 25.1904-24.54186666 25.1904H704.05688888v-62.07715556c0-13.84675555-11.04782222-25.17902222-24.55324444-25.17902222H302.50097778c-13.49404445 0-24.54186667 11.37777778-24.54186667 25.17902222v62.07715556H145.8176c-13.49404445 0-24.54186667-11.37777778-24.54186667-25.1904V-54.044444450000015c0-13.85813333 11.04782222-25.1904 24.54186667-25.1904h445.40586666a248.85475555 248.85475555 0 0 0-86.03875555 188.96213334zM258.34382222 525.08444445a11.58257778 11.58257778 0 0 0 11.37777778 11.68497777h442.53866666a11.58257778 11.58257778 0 0 0 11.37777778-11.68497777v-62.3616a11.59395555 11.59395555 0 0 0-11.37777778-11.69635556H269.74435555a11.59395555 11.59395555 0 0 0-11.37777777 11.69635556zM496.69688888 262.81528889000003a11.5712 11.5712 0 0 0-11.37777777-11.69635556H269.74435555a11.58257778 11.58257778 0 0 0-11.37777777 11.69635556v62.35022222a11.59395555 11.59395555 0 0 0 11.37777777 11.69635556h215.56337778a11.58257778 11.58257778 0 0 0 11.37777778-11.69635556zM748.88533333 309.29351111000005c-108.41884445 0-196.32355555-89.34968889-196.32355555-199.56622222s87.90471111-199.5776 196.32355555-199.5776S945.20888888-0.5006222199999684 945.20888888 109.72728888999995s-87.89333333 199.56622222-196.32355555 199.56622222z m76.62933333-217.85031111a17.35111111 17.35111111 0 0 0 0-34.70222222H771.12888888v-68.58524445a17.06666667 17.06666667 0 1 0-34.13333333 0v68.58524445h-54.48817777a17.35111111 17.35111111 0 0 0 0 34.70222222H736.99555555v39.2192h-54.48817777a17.35111111 17.35111111 0 0 0 0 34.70222222h30.29902222L687.98008888 190.57777778000002a17.55591111 17.55591111 0 0 0 0 24.54186667 16.88462222 16.88462222 0 0 0 24.14364445 0L754.06222222 172.55537777999996l41.56302222 42.25706667a16.87324445 16.87324445 0 0 0 24.13226667 0 17.55591111 17.55591111 0 0 0 0-24.54186667l-24.49635556-24.90595556h30.25351111a17.35111111 17.35111111 0 0 0 0-34.70222222H771.12888888v-39.2192z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="kaipiaoguanli" unicode="&#59481;" d="M82.98768928 759.65390411C82.98768928 818.75034931 130.98344255 866.63884895 189.91900812 866.63884895h644.16198376C893.12381105 866.63884895 941.01231072 818.75034931 941.01231072 759.65390411V-98.63884895000001h-53.62653983l-53.62653824 107.25307806h-107.25307809l-53.62653823-107.25307806h-53.62653827l-53.6265398 107.25307806h-107.25307652l-53.6265398-107.25307806h-53.62653827l-53.62653823 107.25307806H190.24076735l-53.62653824-107.25307806H82.98768928V759.65390411zM243.86730561 598.50615456c0-29.81635503 23.9174368-53.62653826 53.35840661-53.62653823h429.54857556c28.95833093 0 53.35840662 24.02468884 53.35840661 53.62653823 0 29.81635503-23.9174368 53.62653826-53.35840661 53.62653983h-429.54857556c-28.95833093 0-53.35840662-24.02468884-53.35840661-53.62653983z m0-268.13269282c0-29.81635503 23.9174368-53.62653826 53.35840661-53.6265398h429.54857556c28.95833093 0 53.35840662 24.02468884 53.35840661 53.6265398 0 29.81635503-23.9174368 53.62653826-53.35840661 53.62653826h-429.54857556c-28.95833093 0-53.35840662-24.02468884-53.35840661-53.62653826z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiekuan" unicode="&#59474;" d="M988.04606187 145.47239787c-3.15520533 34.50520853-19.54610773 65.738352-46.16275734 87.91434346-26.6166496 22.2054784-60.36281813 32.5185984-94.80905066 29.5097408a28.02114773 28.02114773 0 0 1-4.6743776-0.818016L631.52100053 208.23247360000005c-12.84361707 31.04420267-41.27759573 54.6421664-76.5593184 59.42575787l-251.09272213 38.74163626c-25.91549333 3.35943573-51.45092053-3.272064-72.2245984-19.07866986-11.86178027-9.02766507-21.32848747-20.39361173-27.90210347-33.30712534l-134.72037333 30.64884587c-16.04032427 3.82796587-32.1385312-6.3988736-35.7906624-22.52656853-3.68161813-16.098208 6.3988736-32.1385312 22.52656853-35.7906624l161.307536-36.72553814c8.15176533-1.9287264 16.77096853-0.20423147 23.66567574 4.55751787a30.0099424 30.0099424 0 0 1 12.62191253 20.5683552c1.34442987 9.9920288 6.51573333 18.8744384 14.55063893 24.9806176 8.0054176 6.1061792 17.793216 8.70657493 27.37678294 7.450608l251.09162986-38.74163627c20.65681813-2.8046272 35.17796907-21.85490027 32.37225067-42.4822304-2.8046272-20.62733013-21.853808-35.17796907-42.27690773-32.40173866L294.4612288 168.17371092999997c-16.27404267 2.2498176-31.49635093-9.02766507-33.86302827-25.39017173-2.33718933-16.3614144 9.02766507-31.52474667 25.38907947-33.86302827l242.23980053-34.6515552a99.93120747 99.93120747 0 0 1 13.1188384-0.876992c44.6359392 0 84.03613867 30.7285728 94.74242987 74.26253867l218.6112576 55.8118528c17.822704 1.13910613 35.11899413-4.55751787 48.88001173-16.06981227 8.82343467-7.33374933 15.5728864-16.53725013 19.83880214-26.850368L534.7712096-3.066877869999985a29.79369813 29.79369813 0 0 1-13.74572907-11.71870933c-29.70851093-22.71441813-72.49435733-20.51593173-99.64615786 6.63586987a30.08857707 30.08857707 0 0 1-4.78359254 3.88803306 29.74236693 29.74236693 0 0 1-13.50654826 7.0978464l-334.0399936 76.31577067C52.979376 82.92092266999998 36.881168 72.78254719999995 33.22903787 56.65485120000005c-3.68161813-16.098208 6.3988736-32.1385312 22.4970816-35.8201504l326.92248853-74.68956693c25.9580864-24.1549568 59.14070827-36.27775893 92.34408107-36.27775894 32.86262293 0 65.7154176 11.86287147 91.57848746 35.52636374l403.2721152 169.78257493c12.0092192 5.05226027 19.37136427 17.3235936 18.20277014 30.29608427zM350.00222933 561.20369707h-0.029488c-16.50776213 0-29.91820267-13.3820448-29.91820266-29.88871467 0-16.53725013 13.3820448-29.9476896 29.88871466-29.94769067l133.5659776-0.10702933-0.10157013-104.34347093c-0.029488-16.53725013 13.3525568-29.91820267 29.88871467-29.94769067h0.029488c16.50776213 0 29.88871467 13.38095253 29.9182016 29.88871467l0.10157013 104.35439253 133.5375808-0.1070304h0.029488c16.50776213 0 29.91820267 13.3820448 29.91820267 29.88871467 0 16.53725013-13.38095253 29.9476896-29.88871467 29.9476896l-133.5375808 0.1070304 0.06552853 67.30448746 133.41307627-0.09501653h0.029488c16.50776213 0 29.91820267 13.38095253 29.91820267 29.88871467 0 16.53725013-13.38095253 29.9476896-29.88871467 29.9476896l-101.809696 0.07317333 106.5135616 126.8755008c10.63530133 12.65140053 8.99926933 31.52474667-3.68161813 42.13056107-12.62191253 10.60581333-31.52474667 8.99926933-42.13165227-3.6816192L515.94045653 710.68003307 396.04812693 853.49210347c-10.57632533 12.67979627-29.4802528 14.28743253-42.13056 3.6816192-12.67979627-10.60581333-14.31692053-29.4802528-3.6816192-42.13056107l106.4425728-126.7914048-106.6762912 0.07645013h-0.029488c-16.50776213 0-29.91820267-13.3820448-29.91820266-29.88871466 0-16.53725013 13.3820448-29.9476896 29.88871466-29.94769067l133.68938987-0.0961088-0.0655296-67.29902613-133.56488427 0.1070304z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="baoxiaoshenqing" unicode="&#59479;" d="M832.00000033 380.458667c-13.866667 2.346667-28.138667 3.541333-42.666667 3.541333-141.376 0-256-114.624-256-256 0-67.413333 26.048-128.746667 68.650667-174.464l-30.762667-27.050667a21.333333 21.333333 0 0 0-27.434667-0.64l-78.186666 62.656a21.333333 21.333333 0 0 1-27.861334-1.024l-64.896-60.288a21.333333 21.333333 0 0 0-27.861333-1.024l-78.528 62.912a21.333333 21.333333 0 0 1-27.050667-0.32L151.12533333-85.33333300000004H149.33333333a85.333333 85.333333 0 0 0-85.333333 85.333333V768a85.333333 85.333333 0 0 0 85.333333 85.333333h597.333333a85.333333 85.333333 0 0 0 85.333334-85.333333v-387.541333zM266.66666633 341.33333300000004a32 32 0 0 1 0-64h192a32 32 0 0 1 0 64h-192z m0 192a32 32 0 0 1 0-64h362.666667a32 32 0 0 1 0 64h-362.666667z m0 192a32 32 0 0 1 0-64h362.666667a32 32 0 0 1 0 64h-362.666667zM789.33333333-85.33333300000004c-117.824 0-213.333333 95.509333-213.333333 213.333333s95.509333 213.333333 213.333333 213.333333 213.333333-95.509333 213.333333-213.333333-95.509333-213.333333-213.333333-213.333333z m105.237333 185.536h-84.778666v37.653333h84.778666c7.893333-0.576 15.424 2.837333 19.626667 8.874667a16.96 16.96 0 0 1 0 19.669333c-4.074667 6.037333-11.733333 9.450667-19.626667 8.874667h-54.805333l54.677333 48.576a17.557333 17.557333 0 0 1 6.293334 13.290666 17.962667 17.962667 0 0 1-6.293334 13.312 23.146667 23.146667 0 0 1-29.866666 0l-77.866667-68.906666-77.738667 68.906666a23.04 23.04 0 0 1-29.994666 0 17.557333 17.557333 0 0 1-6.293334-13.312c0-4.992 2.346667-9.770667 6.293334-13.290666l54.912-48.576h-51.328c-11.221333-0.576-19.989333-8.746667-19.989334-18.773334 0-10.005333 8.746667-18.197333 19.989334-18.773333h84.778666v-37.525333h-84.906666c-11.605333 0-21.098667-8.405333-21.098667-18.773334 0-10.346667 9.386667-18.773333 21.12-18.773333h84.885333v-43.776c0-10.453333 9.493333-18.88 21.226667-18.88s21.226667 8.426667 21.226667 18.88v43.797333h84.778666c11.605333 0 21.098667 8.405333 21.098667 18.773334 0 10.346667-9.386667 18.773333-21.12 18.773333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="assist" unicode="&#59477;" d="M401.28 158.93333332999998h53.33333333v-53.33333333h-53.33333333v53.33333333z m85.33333333-53.33333333h53.33333334v53.33333333h-53.33333334v-53.33333333z m282.56 245.44l-37.76-37.76L885.86666667 158.93333332999998H582.61333333v-53.33333333h303.25333334L731.41333333-48.74666666999997l37.76-37.76L987.94666667 132.26666666999995 769.17333333 351.03999999999996zM309.22666667 619.09333333C309.22666667 737.06666667 404.8 832.64 522.66666667 832.64S736.10666667 737.06666667 736.10666667 619.2 640.53333333 405.65333333 522.66666667 405.65333333s-213.44 95.57333333-213.44 213.44z m53.33333333 0c0-42.77333333 16.64-82.98666667 46.93333333-113.28s70.50666667-46.93333333 113.28-46.93333333c42.77333333 0 82.98666667 16.64 113.28 46.93333333 30.29333333 30.29333333 46.93333333 70.50666667 46.93333334 113.28 0 42.77333333-16.64 82.98666667-46.93333334 113.28-30.29333333 30.29333333-70.50666667 46.93333333-113.28 46.93333334-42.77333333 0-82.98666667-16.64-113.28-46.93333334-30.29333333-30.29333333-46.93333333-70.50666667-46.93333333-113.28zM512 285.01333333c-56 0-110.29333333 9.81333333-161.38666667 29.12 4.26666667 2.02666667 8.53333333 4.05333333 12.8 5.97333334 47.04 20.90666667 97.06666667 31.46666667 148.58666667 31.46666666 44.90666667 0 88.64-8 130.24-23.89333333l42.13333333 40.21333333C631.46666667 391.78666667 573.22666667 405.01333333 512 405.01333333c-241.49333333 0-437.33333333-205.33333333-437.33333333-458.66666666 0-3.62666667 0-7.36 0.10666666-10.98666667h53.33333334c-0.10666667 3.62666667-0.10666667 7.25333333-0.10666667 10.98666667 0 55.04 10.24 108.37333333 30.50666667 158.61333333 19.52 48.32 47.36 91.73333333 82.88 128.96 16.42666667 17.28 34.13333333 32.74666667 52.90666666 46.4 64.96-31.04 139.09333333-48.53333333 217.70666667-48.53333333 10.34666667 0 20.48 0.32 30.61333333 0.85333333l65.38666667 62.4c-31.14666667-6.61333333-63.25333333-10.02666667-96-10.02666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiaban" unicode="&#59475;" d="M750.885204 284.88004566999996L719.170898 284.88004566999996 719.170898 181.78808666999998 616.083032 181.78808666999998 616.083032 150.07275767 719.170898 150.07275767 719.170898 46.99205367000002 750.885204 46.99205367000002 750.885204 150.07275767 853.974094 150.07275767 853.974094 181.78808666999998 750.885204 181.78808666999998ZM529.52463 403.42290567L529.52463 693.70212867c0 15.08865-12.271488 27.363208-27.356045 27.363208-15.086603 0-27.360138-12.275581-27.360138-27.363208l0-262.920108L265.166777 430.78202067c-15.077394 0-27.343765-12.273535-27.343765-27.360138 0-15.089673 12.266371-27.365254 27.343765-27.365254l237.001809 0C517.253142 376.05969867 529.52463 388.33630267 529.52463 403.42290567zM698.59528 569.54438767L736.471936 607.51211767 698.59528 645.47780067 660.714532 607.51211767ZM484.384547 36.33329666999998l-0.271176 0.518816-0.584308 0.029676c-195.700147 9.769504-348.998579 171.046654-348.998579 367.164311 0 202.703655 164.92012 367.614565 367.634008 367.614565 199.050452 0 363.938849-161.848155 367.564423-360.786043l0.011256-0.585331 0.509606-0.287549c18.4717-10.425444 35.778878-22.973224 51.440579-37.291324l1.559519-1.426489 0.150426 2.108011c0.734734 10.1952 1.106194 20.507056 1.106194 30.650067 0 57.016575-11.166317 112.327298-33.189913 164.396187-21.271466 50.29243-51.724035 95.459119-90.51041 134.245494-38.786375 38.786375-83.954087 69.237921-134.245494 90.509387-52.069913 22.022573-107.380636 33.189913-164.396187 33.189913-57.015551 0-112.325251-11.166317-164.394141-33.189913-50.291406-21.271466-95.459119-51.724035-134.245494-90.51041-38.786375-38.786375-69.237921-83.953064-90.509387-134.245494-22.022573-52.068889-33.189913-107.379613-33.189913-164.395164 0-57.015551 11.166317-112.325251 33.189913-164.393117 21.271466-50.291406 51.723012-95.458095 90.509387-134.24447 38.786375-38.786375 83.953064-69.237921 134.245494-90.509387 52.068889-22.022573 107.378589-33.189913 164.394141-33.189913 5.696746 0 11.452843 0.11461 17.107633 0.342808l2.111081 0.084934-1.375324 1.603521C506.194272-0.15473233000000164 494.208287 17.541301670000053 484.384547 36.33329666999998zM901.381823 334.55849166999997c-45.046962 45.046962-104.933911 69.855998-168.631652 69.855998-63.699788 0-123.587759-24.808012-168.634722-69.852928-45.046962-45.045939-69.854974-104.934934-69.854974-168.635745 0-63.692624 24.808012-123.57855 69.853951-168.623465 45.046962-45.046962 104.936981-69.857021 168.635745-69.857021 63.696718 0 123.58469 24.809035 168.631652 69.855998 45.045939 45.046962 69.852928 104.931864 69.852928 168.624489C971.234751 229.62355766999997 946.427762 289.51255267 901.381823 334.55849166999997zM732.750171-17.101706329999956c-100.927667 0-183.03878 82.105996-183.03878 183.027523s82.111113 183.027523 183.03878 183.027523c100.919481 0 183.02343-82.105996 183.02343-183.027523S833.669652-17.101706329999956 732.750171-17.101706329999956zM337.519642 606.20842567L298.835597 644.88735267 260.142343 606.20842567 298.835597 567.51005467ZM294.582737 186.16374367000003L332.459393 224.13658967000003 294.582737 262.12887966999995 256.706081 224.13658967000003ZM762.122129 286.47026367L709.426977 286.47026367 709.426977 194.47708366999996 612.727611 194.47708366999996 612.727611 141.78397667000002 709.426977 141.78397667000002 709.426977 37.30953066999996 762.122129 37.30953066999996 762.122129 141.78397667000002 854.999446 141.78397667000002 854.999446 194.47708366999996 762.122129 194.47708366999996Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jurassic_pc" unicode="&#59472;" d="M896.85333333 810.66666667H127.14666667c-51.30666667 0-93.01333333-42.24-93.01333334-94.18666667V236.79999999999995c0-51.94666667 41.70666667-94.18666667 93.01333334-94.18666667h318.50666666L275.2-42.66666667000004h473.6L578.34666667 142.61333333000005h318.50666666c51.30666667 0 93.01333333 42.24 93.01333334 94.18666667V716.48c0 51.94666667-41.70666667 94.18666667-93.01333334 94.18666667z m-795.09333333-94.18666667c0 14.18666667 11.41333333 25.70666667 25.38666667 25.70666667h769.70666666c13.97333333 0 25.38666667-11.52 25.38666667-25.70666667v-325.44H101.76V716.48z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiankangxian" unicode="&#59469;" d="M560.30861964 522.30831643l-93.79188401 0 0-104.75674859L364.00661087 417.55156784l0-98.06779613 102.51012476 0 0-106.98971182 93.79188401 0 0 105.43731812 102.52254383 0L662.83116347 417.55156784l-102.52254383 0L560.30861964 522.30831643zM697.93636777 582.11893006c-53.30049555 0-113.96803001 51.6338471-181.930572 55.48253972l0 0.36636445c-1.3238806 0-2.64900396-0.13909409-3.96046549-0.17759407-1.31270429 0.03849876-2.62416581 0.17759406-3.95053072 0.17759407l0-0.36636445c-67.97371833-3.84869383-128.64249431-55.48253972-181.95416738-55.48253972-29.46442733 0-47.92424736-81.99245247-44.35374293-172.59261437 2.82659803 71.69697868 19.7352671 129.00885997 44.35374293 129.00885997 53.31167308 0 113.98044908 51.62142683 181.95416738 55.47012066l0 0.37878352c1.32512336 0 2.63782642-0.15151316 3.95053072-0.18877161 1.31270429 0.03725722 2.63658489 0.18877159 3.96046549 0.18877161l0-0.37878352c67.96378354-3.84869383 128.63007524-55.47012065 181.930572-55.47012066 24.64331397 0 41.53832122-57.31188007 44.34008109-129.00885997C745.87179145 500.12523603 727.41197141 582.11893006 697.93636777 582.11893006zM511.9931697 849.15791705c-256.88136697 0-465.15791705-208.26413102-465.15791706-465.15791705S255.11180273-81.15791705000004 511.9931697-81.15791705000004c256.90744665 0 465.17157888 208.26288947 465.17157888 465.15791705S768.90061634 849.15791705 511.9931697 849.15791705zM694.78066252 188.67041074999997c-79.62039516-76.64352551-153.38640362-98.53599744-178.27064855-103.8613278l0-1.58965092c0 0-1.57723185 0.2024322-4.46592523 0.7066492-2.87627431-0.50421699-4.44108709-0.70664921-4.44108709-0.7066492l0 1.58965092c-24.92150215 5.32533036-98.67509275 27.21780349-178.27064855 103.8613278-107.78453728 103.73341123-89.14836473 429.96578046-26.76326279 429.96578046 60.07514119 0 128.42888579 61.61511461 205.03391134 65.96802667l0 0.41604194c1.48781405 0 2.9520315-0.16393223 4.44108709-0.21485128 1.48905559 0.05091905 2.96445057 0.21485127 4.46592523 0.21485128l0-0.41604194c76.56776833-4.35291083 144.933932-65.96802666 204.99541136-65.96802667C783.91536541 618.6361900100001 802.54036044 292.40382198 694.78066252 188.67041074999997z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="richengshili" unicode="&#59470;" d="M307.1193632 654.96493227c18.0844128 0 32.7457984 14.6613856 32.7457984 32.7457984L339.8651616 833.8770592c0 18.0844128-14.6613856 32.7457984-32.7457984 32.7457984s-32.7457984-14.6613856-32.7457984-32.7457984l0-146.16632853C274.3735648 669.62631787 289.0338592 654.96493227 307.1193632 654.96493227zM718.8715808 654.96493227c18.0844128 0 32.7457984 14.6613856 32.7457984 32.7457984L751.6173792 833.8770592c0 18.0844128-14.6613856 32.7457984-32.7457984 32.7457984s-32.7457984-14.6613856-32.7457984-32.7457984l0-146.16632853C686.1257824 669.62631787 700.787168 654.96493227 718.8715808 654.96493227zM891.83597973 760.77861333L762.53264533 760.77861333l0-73.06679146c0-24.11291413-19.54705813-43.66106453-43.66106453-43.66106454s-43.66106453 19.5481504-43.66106453 43.66106454l0 73.06679146L350.78042773 760.77861333l0-73.06679146c0-24.11291413-19.5481504-43.66106453-43.66106453-43.66106454s-43.66106453 19.5481504-43.66106453 43.66106454l0 73.06679146L133.98141227 760.77861333c-17.0878496 0-30.94150507-13.85256427-30.94150507-30.9404128l0-139.45998933 819.73648533 0L922.77639253 729.83710827C922.7774848 746.92604907 908.92492053 760.77861333 891.83597973 760.77861333zM103.04099947-60.782904529999996c0-17.0878496 13.85256427-30.9404128 30.94150506-30.9404128l757.85456747 0c17.0878496 0 30.9404128 13.85256427 30.9404128 30.9404128L922.7774848 524.8855232000001l-819.73648533 0L103.04099947-60.782904529999996zM573.48351147 337.96377386999995c15.84569173 27.71495253 43.45367467 41.57188267 82.82394773 41.57188266 39.3669984 0 66.97498133-13.85693013 82.82394773-41.57188266 15.84569173-27.71495253 23.77017493-67.0841344 23.77017494-118.1064544 0-51.02559467-7.9244832-90.32164373-23.77017494-117.8936064-15.8489664-27.57414507-43.45694933-41.35903467-82.82394773-41.35903467-39.37027307 0-66.978256 13.7837984-82.82394773 41.35903467-15.8489664 27.5708704-23.77017493 66.86801173-23.77017494 117.8936064C549.71333547 270.87963947000003 557.63454507 310.24882133000006 573.48351147 337.96377386999995zM386.74295573 198.32477440000002c-9.35438293 3.837808-24.08671787 5.75562027-44.20682773 5.75562027l0 43.49078613c19.6867744 0.28270507 33.42472747 2.2016096 41.2149536 5.75562027 13.4541568 5.96955947 20.18341867 18.04730133 20.18341867 36.2419584 0 11.7950368-3.43721707 21.388464-10.31274347 28.78028266-6.87443413 7.388544-16.55190933 11.08554453-29.0236928 11.08554454-14.31646293 0-24.8431456-4.55057493-31.57458987-13.64408214-6.7358112-9.09678293-9.96018027-21.2487488-9.67420053-36.45480533L266.6411904 279.335696c0.5665024 15.35013867 3.19489813 29.91656107 7.87863893 43.70363413 4.96972053 12.07883307 12.77741013 23.2375104 23.42743574 33.47057174 7.9474048 7.24882773 17.3880192 12.7916 28.32074986 16.6283168 10.93273067 3.837808 24.349776 5.75562027 40.2522272 5.75562026 29.53016107 0 53.34727147-7.64177813 71.4480576-22.9176928 18.10078613-15.27918933 27.1517248-35.7824256 27.1517248-61.50534186 0-18.19465707-5.40305707-33.54370453-16.2026208-46.0493248-6.8220416-7.8175136-13.93115413-13.14743787-21.31860586-15.9886816 5.54277227 0 13.50109227-4.76342187 23.87714453-14.28371734 15.48985387-14.35684907 23.2375104-33.97049173 23.2375104-58.8398336 0-26.15188587-9.05421333-49.1394368-27.15499947-68.9670176-18.1040608-19.8264896-44.90213013-29.7397344-80.398576-29.7397344-43.7298304 0-74.11574827 14.28371733-91.15120426 42.851152-8.94724373 15.2060576-13.91696427 35.10240427-14.91025387 59.69340694l59.69340693 0c0-12.36481387 1.98548693-22.5978752 5.9564608-30.69918614 7.37107947-14.92335147 20.769568-22.38502827 40.19546774-22.38502826 11.9118304 0 22.2977056 4.08340053 31.15871893 12.25784426 8.86101333 8.171168 13.2947936 19.9334592 13.2947936 35.28250667C411.39617493 177.92850772999998 403.17807147 191.5027328 386.74295573 198.32477440000002zM656.3074592 110.065024c18.04730133 0 29.8794496 9.41332587 35.49644587 28.24761707 5.61262933 18.8310176 8.42112747 46.01221227 8.42112746 81.5446784 0 37.23415573-2.80849813 64.80939307-8.42112746 82.71697813-5.615904 17.90758507-17.44805333 26.86137813-35.49644587 26.86137813-18.050576 0-29.98969387-8.95379307-35.8162624-26.86137813-5.8298432-17.90758507-8.74094507-45.4828224-8.74094507-82.71697813 0-35.53246613 2.91110187-62.71366187 8.74094507-81.5446784C626.31776533 119.47834986999999 638.255792 110.065024 656.3074592 110.065024z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yinzhang" unicode="&#59471;" d="M118.54127408 15.420681479999985h786.91745184c10.8013037 0 19.53943703-8.73813333 19.53943705-19.53943703v-52.7928889c0-10.8013037-8.73813333-19.53943703-19.53943705-19.53943703H118.54127408c-10.8013037 0-19.53943703 8.73813333-19.53943705 19.53943703v52.7928889c0 10.8013037 8.73813333 19.53943703 19.53943705 19.53943703zM863.95259259 260.20977777999997H709.33617778c-41.14204445 0-75.48776297 31.55437037-78.76456296 72.57505185-8.61677037 110.92574815 110.92574815 163.96136297 110.92574815 300.00924445 0 115.53754075-87.98814815 208.62293333-229.49736297 208.62293333S282.624 748.21025185 282.624 632.79407408c0-136.04788148 119.54251852-189.0834963 110.92574815-300.00924445-3.39816297-41.02068148-37.62251852-72.57505185-78.76456297-72.57505185H160.04740741c-33.7389037 0-61.04557037-27.30666667-61.04557038-61.04557037v-103.03715556c0-10.8013037 8.73813333-19.53943703 19.53943705-19.53943703h786.91745184c10.8013037 0 19.53943703 8.73813333 19.53943705 19.53943703v103.03715556c0 33.61754075-27.30666667 61.04557037-61.04557038 61.04557037z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="anquanbaozhang" unicode="&#59355;" d="M895.59 738.605c-125.446 5.447-245.541 47.869-356.98 126.129l-21.122 14.814-21.067-14.814c-111.371-78.247-231.478-120.682-356.133-126.102l-39.376 0 0-331.722c0-242.989 167.622-451.066 407.648-505.993l10.473-1.679 7.523 1.679c239.971 54.927 407.566 263.004 407.566 505.993l0 331.722-38.53-0.028zM746.086 514.321l-267.728-277.777c-6.718-6.198-17.285-5.789-23.498 0.928l-166.284 176.538c-6.198 6.718-5.789 17.285 0.928 23.498l4.246 3.919c6.718 6.198 17.285 5.789 23.498-0.928l150.05-159.307 250.948 260.492c6.417 6.526 16.998 6.608 23.511 0.191l4.11-4.055c6.54-6.403 6.622-16.985 0.219-23.498z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="huikuanguanli" unicode="&#59468;" d="M668.21818156 366.58909125a31.24363594 31.24363594 0 1 1 0 62.48727281h-78.58909031l85.61454469 127.26545438a31.2 31.2 0 1 1-44.16 44.1818175l-115.74545438-156.21818156a4.14545437 4.14545437 0 0 0-6.67636312 0l-115.74545438 156.21818156a31.24363594 31.24363594 0 0 1-44.18181844-44.1818175l85.61454563-127.26545438h-78.54545531a31.24363594 31.24363594 0 1 1 0-62.48727281h124.95272812v-62.46545531h-124.95272812a31.24363594 31.24363594 0 1 1 0-62.48727188h124.95272812v-72.87272812a31.24363594 31.24363594 0 1 1 62.46545438 0v72.87272812h124.97454562a31.24363594 31.24363594 0 1 1 0 62.48727188h-124.97454562v62.46545531h124.97454562zM967.12727281 437.23636406C943.21454562 648.91636406 771.37454562 818.50909125 559.38909125 839.78181844 269.22909125 868.90909125 27.24363594 627.05454562 56.15272719 336.91636406c21.33818156-213.73090875 193.81090875-386.72727281 407.47636406-408.61090969 164.83636406-16.88727281 314.18181844 53.67272719 407.3018175 170.90181844a31.46181844 31.46181844 0 0 1-9.05454469 46.71272719 31.00363594 31.00363594 0 0 1-39.8181825-7.26545438c-81.16363594-102.37090875-211.68-163.89818156-355.37454562-147.81818156-182.50909125 20.42181844-329.28 168.50181844-348.19636313 351.16363594C92 597.88363594 311.05454563 811.54909125 568.42181844 775.76727281c161.23636406-22.40727281 294.02181844-145.22181844 329.49818156-304.12363687 18.63272719-83.47636406 9.62181844-163.11272719-18.41454562-233.21454469a31.02545437 31.02545437 0 0 1 13.52727281-38.33454563 31.65818156 31.65818156 0 0 1 45.22909125 15.70909032c26.66181844 67.44 37.78909125 142.69090875 28.88727281 221.41090968z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shichang" unicode="&#59463;" d="M542.08 722.176l206.912 0L608.896 428.928l0.832-1.536 32.448 0 130.496 273.088 129.088-273.088 33.664 0-139.328 294.784 0.064 0L796.16 753.664 565.568 753.664 565.568 773.824C565.568 805.888 539.456 832 507.392 832 475.264 832 449.216 805.888 449.216 773.824l0-20.096L225.664 753.728l0-31.488 3.072 0-140.16-293.312 0.832-1.536 32.448 0 130.496 273.088L381.44 427.392l33.664 0L275.84 722.176l195.008 0 0-680.064-245.12-73.536L225.728-64l570.432 0 0 32.576L542.08 42.112 542.08 722.176zM415.168 384c0 1.856-0.192 3.648-0.256 5.44L88.896 389.44C88.832 387.648 88.64 385.856 88.64 384c0-90.176 73.088-163.328 163.264-163.328C342.08 220.672 415.168 293.824 415.168 384zM609.152 389.44C609.088 387.648 608.896 385.856 608.896 384c0-90.176 73.152-163.328 163.264-163.328S935.36 293.824 935.36 384c0 1.856-0.192 3.648-0.256 5.44L609.152 389.44z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="vs2" unicode="&#59464;" d="M501.33333333 853.33333333C236.37333333 853.33333333 21.33333333 638.29333333 21.33333333 373.33333332999996 21.33333333 108.37333333000004 236.37333333-106.66666667000004 501.33333333-106.66666667000004S981.33333333 108.37333333000004 981.33333333 373.33333332999996C981.33333333 638.29333333 766.29333333 853.33333333 501.33333333 853.33333333zM469.33333333 553.17333333l-127.36-381.44c-4.48-12.8-16.64-21.76-30.08-21.76s-25.6 8.96-30.08 21.76L154.45333333 553.17333333C148.69333333 569.81333333 157.65333333 587.73333333 174.29333333 593.49333333c16.64 5.76 34.56-3.2 40.32-19.84l97.28-291.2 97.28 291.2c5.76 16.64 23.68 25.6 40.32 19.84C465.49333333 587.73333333 475.09333333 569.81333333 469.33333333 553.17333333zM629.97333333 404.69333333C725.33333333 404.69333333 789.33333333 353.49333333000004 789.33333333 277.33333332999996c0-78.08-60.8-127.36-159.36-127.36-92.16 0-159.36 53.76-159.36 127.36 0 17.28 14.08 32 32 32 17.92 0 32-14.08 32-32 0-37.12 39.04-63.36 95.36-63.36 35.84 0 95.36 8.32 95.36 63.36 0 60.8-79.36 63.36-95.36 63.36-95.36 0-159.36 51.2-159.36 127.36 0 78.72 60.8 127.36 159.36 127.36 92.16 0 159.36-53.76 159.36-127.36 0-17.28-14.08-32-32-32S725.33333333 450.13333333 725.33333333 468.05333333c0 37.12-39.04 63.36-95.36 63.36-35.84 0-95.36-8.32-95.36-63.36C534.61333333 407.25333333 613.97333333 404.69333333 629.97333333 404.69333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tousu1" unicode="&#59465;" d="M511.008928 233.937263c-28.225855 0-51.121308-23.271006-51.121308-52.052516 0-28.741601 22.895453-52.046377 51.121308-52.046377 28.259624 0 51.081399 23.344684 51.081399 52.046377C562.090327 210.666256 539.194874 233.937263 511.008928 233.937263L511.008928 233.937263zM510.969019 674.713105c-28.217668 0-51.120284-23.345708-51.120284-52.05354l0-267.296789c0-28.748764 22.902616-52.052516 51.120284-52.052516 28.260647 0 51.121308 23.342638 51.121308 52.052516L562.090327 622.620679C562.090327 651.402189 539.155988 674.713105 510.969019 674.713105L510.969019 674.713105zM901.737934 586.918549c-0.559748 42.332131-1.228991 88.539522-1.302669 139.210575-0.039909 15.3455-9.976212 28.856211-24.425296 33.254382C759.05835 794.641521 654.691351 815.30412 515.809257 830.684412c-1.781576 0.187265-3.573385 0.222057-5.396917 0.187265-70.523193-3.686972-136.494721-12.475126-196.110493-26.213012-59.722196-13.778818-116.724445-29.0445-169.299871-45.316092-14.334473-4.430916-24.162306-17.907858-24.162306-33.214473 0-45.684482-0.48914-87.680968-0.899486-126.625956-3.64604-334.206688-5.022387-459.319174 321.403081-640.533398 27.107381-14.96483 48.963155-21.708418 70.892607-21.708418 21.742187 0 43.490513 6.517437 70.450539 21.152762C907.882887 135.382643 906.470725 240.086309 901.737934 586.918549L901.737934 586.918549zM550.585295 19.657968c-16.491603-8.971325-28.373211-13.026688-38.310537-13.026688-10.089799 0-21.560038 3.983731-38.312584 13.288654-290.422486 161.221892-289.457508 249.692852-285.884123 578.759473 0.336668 31.723515 0.751107 65.459874 0.824785 101.503788 44.229341 13.100366 91.367941 25.429159 140.477428 36.707017 55.035454 12.697183 116.207675 20.931728 181.778066 24.431435 123.468033-13.777795 218.74398-31.872918 321.213769-61.366649 0.223081-40.915875 0.744967-78.783321 1.226944-114.007567C838.292949 247.157355 839.223135 176.715003 550.585295 19.657968L550.585295 19.657968zM550.585295 19.657968"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dongtai_" unicode="&#59466;" d="M661.3 512l-234.7-42.7L384 234.7l234.7 42.7L661.3 512zM522.7 320c-29.5 0-53.3 23.9-53.3 53.3 0 29.5 23.9 53.3 53.3 53.3 29.5 0 53.3-23.9 53.3-53.3S552.1 320 522.7 320zM512 832C264.6 832 64 631.4 64 384s200.6-448 448-448 448 200.6 448 448S759.4 832 512 832z m166.3-614.3l-379.6-68.4L367 529l379.6 68.4-68.3-379.7z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhengfubaozhang" unicode="&#59467;" d="M743.64285693 404.65714277a222.42857168 222.42857168 0 0 1-75.81428526 124.11428555c-38.31428584 31.84285693-83.65714277 37.88571445-136.2428578 57.25714306h-0.21428525V665.87142891l10.15714247 2.7 22.28571475 8.27142802c8.57142862 2.87142891 16.28571445 5.31428555 24.3 7.02857198a82.28571416 82.28571416 0 0 0 17.14285723 2.65714277c7.32857168 0 16.58571416-1.15714248 27.42857138-3.51428555 10.97142891-2.7 22.71428614-5.57142891 34.71428584-8.8714292 12.34285752-3.72857168 23.44285723-6.59999971 34.28571357-9 10.19999971-2.40000029 18.77142832-3.34285752 25.88571476-3.34285664 11.31428584 0 17.05714277 1.54285752 36.4714286 5.01428584V807.21428614c-19.41428584-4.62857168-22.84285693-7.15714278-36.51428584-7.15714366-7.11428555 0-15.85714307 1.07142891-26.14285722 3.68571445-10.71428555 2.05714248-21.81428613 5.27142832-34.24285723 8.87142921-11.05714248 3.30000029-22.28571386 6.21428555-33.55714248 8.61428495a102.38571386 102.38571386 0 0 1-24.81428583 3.72857169c-24.72857138 0-57.98571416-5.82857138-77.4-16.6285714v25.71428585h-38.74285724v-248.01428585H491.42857168c-52.2-19.37142862-97.88571387-26.52857138-136.15714335-58.37142831-38.87142891-32.74285693-64.07142891-72.72857109-75.98571417-121.3714292 0 0-37.15714248 5.27142832-37.15714248-33.51428525h542.27142861c0 38.78571445-40.71428614 31.88571416-40.71428613 31.88571416zM919.14285693 291.12857109000004v-344.87142802h-290.78571445v77.57142802H376.27142891v-77.57142802H104.85714307v344.87142802h814.28571386z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shezhi3" unicode="&#59461;" d="M512 384m-79.2 0a79.2 79.2 0 1 1 158.4 0 79.2 79.2 0 1 1-158.4 0ZM512 834C263.6 834 62 632.4 62 384s201.6-450 450-450 450 201.6 450 450S760.4 834 512 834z m239.4-511.2c-5.4-22.5-14.4-44.1-26.1-63-2.7-4.5-6.3-8.1-10.8-9.9l-2.7 2.7c-18.9 18.9-49.5 18.9-68.4 0-18.9-18.9-18.9-49.5 0-68.4l2.7-2.7c-1.8-4.5-5.4-8.1-9.9-10.8-19.8-11.7-40.5-20.7-63-26.1-4.5-0.9-9-0.9-13.5 0v3.6c0 27-21.6 48.6-48.6 48.6-27 0-48.6-21.6-48.6-48.6v-4.5c-4.5-0.9-9-1.8-13.5 0-22.5 5.4-44.1 14.4-63 26.1-4.5 2.7-8.1 6.3-9.9 10.8l2.7 2.7c18.9 18.9 18.9 49.5 0 68.4-18.9 18.9-49.5 18.9-68.4 0l-2.7-2.7c-4.5 1.8-8.1 5.4-10.8 9.9-11.7 19.8-20.7 40.5-26.1 63-0.9 4.5-0.9 9 0 13.5h3.6c27 0 48.6 21.6 48.6 48.6 0 27-21.6 48.6-48.6 48.6h-4.5c-0.9 4.5-1.8 9 0 13.5 5.4 22.5 14.4 44.1 26.1 63 2.7 4.5 6.3 8.1 10.8 9.9l2.7-2.7c18.9-18.9 49.5-18.9 68.4 0 18.9 18.9 18.9 49.5 0 68.4l-2.7 2.7c1.8 4.5 5.4 8.1 9.9 10.8 19.8 11.7 40.5 20.7 63 26.1 4.5 0.9 9 0.9 13.5 0v-4.5c0-27 21.6-48.6 48.6-48.6 27 0 48.6 21.6 48.6 48.6v4.5c4.5 0.9 9 1.8 13.5 0 22.5-5.4 44.1-14.4 63-26.1 4.5-2.7 8.1-6.3 9.9-10.8l-2.7-2.7c-18.9-18.9-18.9-49.5 0-68.4 18.9-18.9 49.5-18.9 68.4 0l2.7 2.7c4.5-1.8 8.1-5.4 10.8-9.9 11.7-19.8 20.7-40.5 26.1-63 0.9-4.5 0.9-9 0-13.5h-3.6c-27 0-48.6-21.6-48.6-48.6s21.6-48.6 48.6-48.6h4.5c0.9-3.6 0.9-8.1 0-12.6z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xinzengliebiao" unicode="&#59462;" d="M49.91 748.9299999899999h560.06v-108.86H49.91zM49.98 554.40999999h560.06v-108.86H49.98zM50.04 353.84999999h356.91v-108.86H50.04zM473.82 354.00999999H991v-108.86H473.82zM680.03 29.97999999000001l-1.18 521.54 112.91 0.04 1.18-521.54z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ziyuan1" unicode="&#59460;" d="M243.90037899-10.447082170000044A96.43004053 96.43004053 0 0 0 175.53148025 17.710490140000047l-29.7486678 29.70045215a96.71933132 96.71933132 0 0 0 0 136.834228L711.6825074 751.15738069a96.81576107 96.81576107 0 0 0 136.78601235 0l29.79688268-29.50759266a96.86397594 96.86397594 0 0 0 0-136.83422799L312.36570825 17.710490140000047a96.43004053 96.43004053 0 0 0-68.46532926-28.15757231z m-34.28087988 62.34202169a48.55252593 48.55252593 0 0 1 68.60997464 0L844.22559845 618.80714914a48.55252593 48.55252593 0 0 1-1e-8 68.60997465l-29.74866779 29.74866702a48.64895568 48.64895568 0 0 1-68.65818875 0L179.77440155 150.25358118999998a48.55252593 48.55252593 0 0 1 1e-8-68.60997387zM653.3712611 646.28006807l34.06873398 34.11694808 126.40531886-126.2269232-34.07355501-34.11694809zM291.92253898 653.85946932v19.28600842a67.50102868 67.50102868 0 0 1 67.50102869 67.50102868h19.28600842a86.7870371 86.7870371 0 0 0-86.78703711-86.7870371zM446.21060476 653.85946932a86.7870371 86.7870371 0 0 0-86.78703709 86.7870371h19.2860084a67.50102868 67.50102868 0 0 1 67.50102868-67.50102868zM378.70957609 586.35844064h-19.28600842a67.50102868 67.50102868 0 0 1-67.50102869 67.50102868v19.28600843a86.7870371 86.7870371 0 0 0 86.78703711-86.78703711zM378.70957609 586.35844064h-19.28600842a86.7870371 86.7870371 0 0 0 86.78703709 86.78703711v-19.28600843a67.50102868 67.50102868 0 0 1-67.50102867-67.50102868zM190.67099635 422.42737143v9.64300422a33.75051396 33.75051396 0 0 1 33.75051473 33.75051395h9.64300344a43.39351817 43.39351817 0 0 0-43.39351817-43.39351817zM267.81502924 422.42737143a43.39351817 43.39351817 0 0 0-43.39351816 43.39351817h9.64300344a33.75051396 33.75051396 0 0 1 33.75051472-33.75051395zM234.06451452 388.6768567h-9.64300344a33.75051396 33.75051396 0 0 1-33.75051473 33.75051473v9.64300422a43.39351817 43.39351817 0 0 0 43.39351817-43.39351895zM234.06451452 388.6768567h-9.64300344a43.39351817 43.39351817 0 0 0 43.39351817 43.39351895v-9.64300422a33.75051396 33.75051396 0 0 1-33.75051473-33.75051472zM634.2491845 109.02973854000004v28.92901263a120.53755104 120.53755104 0 0 1 120.53755104 120.53755106h28.92901186a149.46656367 149.46656367 0 0 0-149.4665629-149.46656369zM904.25329844 109.02973854000004a149.46656367 149.46656367 0 0 0-149.4665629 149.46656369h28.92901186a120.53755104 120.53755104 0 0 1 120.53755104-120.53755106zM783.7157474-11.5078125h-28.92901186a120.53755104 120.53755104 0 0 1-120.53755104 120.53755104v28.92901263a149.46656367 149.46656367 0 0 0 149.4665629-149.46656367zM783.7157474-11.5078125h-28.92901186a149.46656367 149.46656367 0 0 0 149.4665629 149.46656367v-28.92901263a120.53755104 120.53755104 0 0 1-120.53755104-120.53755104z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="niantie" unicode="&#59455;" d="M260.46072969 335.07228604M776.01802983 538.31784007M613.37191007 691.92654544M656.61165507 736.97948589l-116.1190271 0 0 58.05951354c0 31.93583722-26.1360954 58.05951355-58.05951355 58.05951356l-116.11902711 0c-31.92093386 0-58.05951355-26.12367633-58.05951355-58.05951356l0-58.05951354-116.1190271 0 0-132.26391779 464.47486444 0L656.61041354 736.97948589zM482.43435717 736.97948589l-116.1190271 0 0 57.94649914c0.02856399 0.02856399 0.05712797 0.05588643 0.11425595 0.1130144l115.92032073 0c0.02856399-0.02856399 0.08445042-0.05712797 0.11425595-0.1130144L482.43435717 736.97948589zM772.73068218 511.57196375L772.73068218 707.94972972c0 15.96108769-13.06618539 29.02975617-29.02975617 29.02975617l-58.05951355 0 0-58.05951356 29.02975617 0 0-167.34800858-332.52266744 0 0-451.12552349L134.07727707 60.44644146999997l0 618.47353208 29.02975617 0 0 58.05951354-58.05951355 0c-15.96108769 0-29.02975617-13.06866847-29.02975617-29.02975616l0-676.53304563c0-15.96108769 13.06866847-29.02975617 29.02975617-29.02975617l277.1009803 0 0-78.24062691 395.86031813 0 168.90040229 160.2069997 0 427.21866426L772.73068218 511.57196375zM778.9402558 6.245556530000044l0 75.93439201 85.86970909 0L778.9402558 6.245556530000044zM888.84970806 140.23946208999996l-167.96896581 0 0-158.03364875-280.6727275 0 0 471.30663686 448.64169331 0L888.84970806 140.23946208999996zM515.9648127 329.01049973l298.05953389 0 0-58.36999156-298.05953389 0 0 58.36999156ZM515.9648127 165.07775659000004l151.13108655 0 0-58.36999157-151.13108655 0 0 58.36999157Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fuzhi1" unicode="&#59456;" d="M849.5 683.99999971H324.50000029c-61.875 0-112.5-50.625-112.5-112.5v-524.99999971c0-61.875 50.625-112.5 112.5-112.5h524.99999971c61.875 0 112.5 50.625 112.5 112.5V571.49999971c0 61.875-50.625 112.5-112.5 112.5m0-74.99999971c20.32499971 0 37.50000029-17.17499971 37.50000029-37.50000029v-524.99999971c0-20.32499971-17.17499971-37.50000029-37.50000029-37.50000029H324.50000029c-20.32499971 0-37.50000029 17.17499971-37.50000029 37.50000029V571.49999971c0 20.32499971 17.17499971 37.50000029 37.50000029 37.50000029h524.99999971M212.00000029 159h-37.50000029c-20.32499971 0-37.50000029 17.17499971-37.50000029 37.50000029V721.5c0 20.32499971 17.17499971 37.50000029 37.50000029 37.50000029h524.99999971c20.32499971 0 37.50000029-17.17499971 37.50000029-37.50000029v-37.35h74.99999971V721.5c0 61.875-50.625 112.5-112.5 112.5H174.5C112.625 834 62 783.375 62 721.5v-524.99999971c0-61.875 50.625-112.5 112.5-112.5h37.50000029V159zM549.50000029 159V458.99999971c0 20.62500029 16.875 37.50000029 37.49999942 37.50000029s37.50000029-16.875 37.50000029-37.50000029v-299.99999971c0-20.62500029-16.875-37.50000029-37.50000029-37.50000029s-37.50000029 16.875-37.49999942 37.50000029M737 271.5H437.00000029c-20.62500029 0-37.50000029 16.875-37.50000029 37.50000029s16.875 37.50000029 37.50000029 37.49999942h299.99999971c20.62500029 0 37.50000029-16.875 37.50000029-37.49999942s-16.875-37.50000029-37.50000029-37.50000029"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fl-shuazi" unicode="&#59457;" d="M817.74933333-93.69386667000003L779.28106667 371.47733332999996H231.1232l-36.53546667-465.1712h113.68426667v141.41866667h22.02346667v-141.41866667h299.53813333V-50.976h18.6336v-42.71786667h80.368v101.92213334h15.15626667v-101.92213334zM506.14613333 389.50933333h306.5376V504.82453333h-0.0448c-114.7136 0-209.1648 45.55093333-222.0864 104.24-0.12906667 4.50773333-0.21546667 9.01546667-0.34453333 13.65226667l-0.12906667 12.064v5.19466667c0 11.50613333 0.21546667 22.66773333 0.55893334 33.35893333 0.60053333 16.14186667 1.54453333 31.16906667 2.7904 44.52053333 3.09013333 11.1616 4.85013333 23.0112 5.02293333 35.41866667 0 0.17173333 0.04266667 0.3008 0.08533333 0.38613333v1.5456c0 63.62453333-41.38773333 115.22986667-92.3904 115.22986667-50.96106667 0-92.34666667-51.60426667-92.34666666-115.22986667v-1.5456c0.04266667-0.0864 0.08533333-0.21546667 0.08533333-0.38613333 0.17173333-12.40746667 1.9328-24.25706667 5.02293333-35.41866667 1.2448-13.35253333 2.1888-28.37866667 2.7904-44.52053333 0.34346667-10.69013333 0.55893333-21.8528 0.55893334-33.35893333v-5.19466667l-0.12906667-12.064c-0.12906667-4.63786667-0.2144-9.1456-0.34346667-13.65226667-12.88-58.68906667-107.37386667-104.24-222.08853333-104.24h-0.04266667v-115.3152h306.4928z m0 450.87253334c21.552 0 39.02506667-16.528 39.02506667-36.87786667s-17.47413333-36.87893333-39.02506667-36.87893333-39.02506667 16.52906667-39.02506666 36.87893333 17.47413333 36.87786667 39.02506666 36.87786667zM218.672 418.832v54.91093333h575.50613333v-54.91093333H218.672z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="niantie1" unicode="&#59458;" d="M474.3125 763.125h112.5a28.125 28.125 0 0 1 28.125 28.125 28.125 28.125 0 0 1-28.125 28.125h-112.5a28.125 28.125 0 0 1-28.125-28.125 28.125 28.125 0 0 1 28.125-28.125zM305 681a28.125 28.125 0 0 1 28.125 28.125v25.875a28.125 28.125 0 0 0 27.5625 28.125 28.125 28.125 0 0 1 28.125 28.125 29.25 29.25 0 0 1-28.6875 28.125 84.9375 84.9375 0 0 1-83.25-84.375v-25.875a28.125 28.125 0 0 1 28.125-28.125zM701.5625 763.125h112.5a28.125 28.125 0 0 1 28.125 28.125 28.125 28.125 0 0 1-28.125 28.125h-112.5a28.125 28.125 0 0 1-28.125-28.125 28.125 28.125 0 0 1 28.125-28.125zM919.8125 331.6875a28.125 28.125 0 0 1-28.125-28.125v-112.5a28.6875 28.6875 0 0 1 28.125-28.125 28.125 28.125 0 0 1 28.125 28.125v112.5a28.125 28.125 0 0 1-28.125 28.125zM863.5625 135.375h-112.5a28.6875 28.6875 0 0 1-28.125-28.125 28.125 28.125 0 0 1 28.125-28.125h112.5a27.5625 27.5625 0 0 1 27.5625 28.125 29.25 29.25 0 0 1-27.5625 28.125zM941.1875 768.75A28.125 28.125 0 0 1 905.75 783.375a28.6875 28.6875 0 0 1-14.625-37.125 25.3125 25.3125 0 0 0 0-11.25v-90.5625a28.6875 28.6875 0 0 1 28.125-28.125 28.125 28.125 0 0 1 28.125 28.125V735a86.0625 86.0625 0 0 1-6.1875 33.75zM919.8125 558.9375a28.125 28.125 0 0 1-28.125-28.125v-112.5a28.6875 28.6875 0 0 1 28.125-28.125 28.125 28.125 0 0 1 28.125 28.125v112.5a28.125 28.125 0 0 1-28.125 28.125zM662.75-50.25H160.4375a84.375 84.375 0 0 0-84.375 84.375V605.625a84.375 84.375 0 0 0 84.375 84.375h502.3125a84.375 84.375 0 0 0 84.375-84.375v-571.5a84.375 84.375 0 0 0-84.375-84.375zM160.4375 633.75a28.125 28.125 0 0 1-28.125-28.125v-571.5a28.125 28.125 0 0 1 28.125-28.125h502.3125a28.125 28.125 0 0 1 28.125 28.125V605.625a28.125 28.125 0 0 1-28.125 28.125zM593 461.625H230.75a28.125 28.125 0 0 0-28.125 28.125 28.125 28.125 0 0 0 28.125 28.125h362.25a28.125 28.125 0 0 0 28.125-28.125 28.6875 28.6875 0 0 0-28.125-28.125zM593 291.75H230.75a28.125 28.125 0 0 0 0 56.25h362.25a28.125 28.125 0 0 0 0-56.25zM593 121.875H230.75a28.125 28.125 0 0 0-28.125 28.125 28.125 28.125 0 0 0 28.125 28.125h362.25a28.6875 28.6875 0 0 0 28.125-28.125 28.125 28.125 0 0 0-28.125-28.125z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jianqie" unicode="&#59459;" d="M335.6 248.10000000000002c-86.2 0-156.1-69.9-156.1-156.1s69.9-156 156.1-156 156.1 69.9 156.1 156.1-69.9 156-156.1 156z m2.7-231.4c-44.5 0-80.7 36.2-80.7 80.7s36.1 80.7 80.7 80.7S419 142 419 97.5s-36.1-80.8-80.7-80.8z m364.6 242.2c-86.9 0-157.4-70.5-157.4-157.4S616-55.799999999999955 702.9-55.799999999999955s157.4 70.5 157.4 157.4c-0.1 86.8-70.5 157.3-157.4 157.3z m4-239.4c-44.5 0-80.7 36.1-80.7 80.7 0 44.5 36.1 80.7 80.7 80.7s80.7-36.2 80.7-80.7c0-44.6-36.2-80.7-80.7-80.7zM822.6 815.9C908.7 705.5 854.9 606 854.9 606L518.6 178.20000000000005S287.3 444.6 193.1 576.4 198.4 832 198.4 832l320.2-409 304 392.9zM518.6 267c22.3 0 40.4 18.1 40.4 40.4 0 22.3-18.1 40.4-40.4 40.4-22.3 0-40.4-18.1-40.4-40.4 0-22.3 18.1-40.4 40.4-40.4z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="role" unicode="&#59454;" d="M648.794029 789.281496C665.239194 785.566593 679.068092 776.650804 690.280727 762.534128 701.493361 748.417451 707.847196 730.585872 709.342193 709.039391 709.342193 703.095532 709.529077 693.065263 709.902807 678.948586 710.276575 664.831911 710.46346 650.158014 710.46346 634.926898 710.46346 619.695743 710.089691 605.950573 709.342193 593.691348 708.594694 581.432161 706.725928 573.816565 703.735895 570.844635 699.250826 565.643786 694.952642 563.229076 690.841379 563.600582 686.730078 563.97205 684.674428 562.30035 684.674428 558.585448 684.674428 556.356491 684.113776 548.740933 682.992508 535.738736 681.871279 522.736538 678.694362 504.3477 673.461794 480.572261 670.471761 468.684542 666.36046 457.725586 661.127893 447.695319 655.895364 437.665051 650.289027 428.935014 644.30896 421.50517 636.833896 412.589382 629.358795 404.416564 621.883731 396.986759 621.136194 387.327997 620.762463 378.412207 620.762463 370.239391L620.762463 346.835458C620.762463 339.405614 621.136194 333.461755 621.883731 329.003878 622.631229 320.088051 624.873764 313.772724 628.611295 310.057821 632.348828 306.34288 639.823929 302.999483 651.036526 300.027554 654.774096 298.541569 661.314777 296.498365 670.658645 293.897941 680.002475 291.297517 691.215109 287.582576 704.296509 282.753195 717.37791 277.923813 731.019924 272.908679 745.222591 267.707792 758.677722 263.249917 772.506659 258.420536 786.709288 253.21965 799.416958 248.761735 811.003322 244.30386 821.468458 239.845984 831.933555 236.131043 839.782388 233.159114 845.014955 230.930157 859.217622 223.50035 868.748336 215.884793 873.607135 208.083482 878.465935 200.282132 882.76412 190.066149 886.501651 177.43542 887.996687 170.748587 889.865454 158.860868 892.107988 141.772261 894.350484 124.683694 896.966787 106.480609 899.95682 87.163085 902.946854 68.588495 905.376233 50.942669 907.245 34.225568 909.113804 17.508468 910.421918 6.920979 911.169454 2.463065 911.916954-7.195697 910.235034-15.182761 906.123771-21.498126 902.01247-27.813453 892.855486-32.828587 878.652819-36.543528 865.945187-39.51542 847.818104-42.673102 824.271607-46.016538 800.725071-49.359972 773.254157-52.517618 741.858789-55.489547 710.46346-58.461477 675.891212-60.876187 638.142009-62.733638 600.392845-64.59109 560.774914-65.519815 519.288218-65.519815 477.801483-65.519815 438.183552-64.776842 400.434388-63.290858 362.685223-61.804913 327.926092-59.761708 296.156994-57.161284 264.387857-54.560821 236.169444-51.588892 211.501681-48.245495 186.833877-44.902059 167.772411-41.372909 154.31728-37.657969 151.327247-36.914995 147.589715-35.429049 143.104646-33.200092 138.619615-30.971136 134.321431-28.370712 130.210131-25.398782 126.09883-22.426851 122.921912-18.526196 120.679417-13.696815 118.436881-8.867396 117.689383-3.480794 118.436881 2.463065 119.184381 7.663952 121.240031 19.180166 124.603832 37.011745 127.967596 54.843323 131.892012 73.789382 136.377081 93.849917 140.862112 113.167442 144.973412 132.113499 148.710945 150.688089 152.448514 168.519668 155.06478 179.664377 156.559815 184.12229 159.549849 193.03808 163.661149 202.139622 168.893679 211.426878 174.126246 220.714173 183.470114 230.558689 196.925244 240.960424 203.65281 245.418338 215.612942 250.619225 232.805643 256.563084 249.998343 262.506945 268.125428 268.079299 287.186894 273.280185 306.248322 278.481033 324.188521 282.753195 341.007492 286.09663 357.826424 289.440028 368.852174 291.854736 374.084703 293.340721 385.297337 295.569639 395.014936 298.355816 403.237537 301.699252 411.460138 305.042687 415.571439 309.686316 415.571439 315.630175L415.571439 379.155181C407.348837 385.09904 399.500004 392.157378 392.024903 400.330195 386.044836 407.017027 379.69104 414.818338 372.963474 423.734128 366.235871 432.649917 360.255804 442.30868 355.023275 452.710453 345.305638 472.027978 338.951842 489.859556 335.961808 506.20519 332.971775 522.550785 331.103009 532.209547 330.355472 535.181477 329.607974 538.153406 326.804824 540.568116 321.946025 542.425568 317.087226 544.283019 313.53654 548.183675 311.294005 554.127534 305.313939 566.015254 302.510791 578.831699 302.884559 592.576869 303.258289 606.322078 304.192672 626.196861 305.687708 652.201218 307.930242 677.462641 312.228389 701.609547 318.582224 724.642013 324.936059 747.674479 338.578074 769.22096 359.508306 789.281496 370.72094 798.197285 385.484221 805.812844 403.798189 812.128209 422.112119 818.443536 440.612972 823.087203 459.300669 826.059132 477.988367 829.031062 495.928567 830.517008 513.121268 830.517008 530.313968 830.517008 543.39533 829.40253 552.365468 827.173611 562.083066 824.201681 569.745014 821.043998 575.351312 817.700563 580.957648 814.357166 585.442679 811.199483 588.806481 808.227553 592.170283 805.255624 594.973432 802.469446 597.215927 799.868984 599.458462 797.26856 601.700997 795.225356 603.943532 793.739372 607.681063 790.767442 612.352978 789.838716 617.959314 790.953194 623.565612 792.067673 633.843864 791.510453 648.794029 789.281496L648.794029 789.281496ZM547.880399 193.03808 577.033232 79.361774 625.247494 207.526223 579.275728 240.960424 547.880399 193.03808ZM469.392036 243.189381 425.662805 207.526223 474.998334 79.361774 500.787366 194.152559 469.392036 243.189381ZM858.470086 667.803878C868.93522 666.317895 877.157821 661.30276 883.137888 652.758477 889.117954 644.214155 892.481718 633.626667 893.229255 620.995974 893.229255 617.281033 893.602985 611.337174 894.350484 603.164396 895.098021 594.991579 895.471751 586.447294 895.471751 577.531506 895.471751 568.615716 895.098021 560.442899 894.350484 553.013055 893.602985 545.58325 892.481718 541.125337 890.98672 539.63939 888.744186 536.667461 886.314767 535.367229 883.698503 535.738736 881.082238 536.110203 879.774086 534.81001 879.774086 531.83808 879.774086 530.352096 879.587202 525.89422 879.213472 518.464377 878.839704 511.034571 876.784053 499.889825 873.046521 485.030176 871.551486 477.60037 869.308989 471.099252 866.318918 465.526898 863.328923 459.954506 859.965122 454.939372 856.227589 450.481496 852.490019 445.280609 848.378718 440.451228 843.893687 435.993352 843.146189 430.792465 842.772421 425.591579 842.772421 420.390692L842.772421 394.757802C843.519919 389.556915 844.828071 386.027766 846.696837 384.170314 848.565602 382.312863 852.863787 380.641126 859.591352 379.155181 862.581386 378.412207 869.495836 376.18325 880.334701 372.468348 891.173604 368.753407 902.946854 364.667037 915.654485 360.209122 928.362117 355.751209 940.32225 351.293334 951.534884 346.835458 962.747518 342.377544 970.59635 339.034109 975.081381 336.80519 983.303982 333.090249 989.097164 328.818126 992.460966 323.988745 995.824768 319.159326 998.254148 312.658246 999.749183 304.485429 1000.496683 300.770526 1001.61795 294.083694 1003.112948 284.424893 1004.607983 274.023158 1006.102981 263.064164 1007.598017 251.54795 1009.093014 240.031699 1010.588049 229.444211 1012.083046 219.785448 1013.578082 210.126685 1014.325582 204.182826 1014.325582 201.953869 1015.07308 196.01001 1014.138697 190.994875 1011.522432 186.908467 1008.906129 182.822059 1003.112948 180.035882 994.142848 178.549898L966.111281 172.977544C954.151149 170.748587 938.827252 168.891136 920.139516 167.40519 918.644518 176.320979 916.401983 184.865264 913.411951 193.03808 911.169454 199.724913 908.553151 207.154718 905.563119 215.327534 902.573085 223.50035 898.835553 230.558689 894.350484 236.502548 886.87542 246.904284 878.652819 255.448606 869.68272 262.135438 860.71262 268.822271 851.929404 274.394663 843.333073 278.852539 834.736703 283.310453 825.953488 286.653851 816.983389 288.882807 808.013289 291.111764 799.416958 293.712188 791.194357 296.684118 753.818923 310.057821 723.731745 319.345078 700.932707 324.545965 678.133709 329.746852 665.612962 333.83326 663.370427 336.80519 661.875429 339.034109 660.941047 341.634571 660.567279 344.606501 660.193509 347.57843 660.006663 350.921827 660.006663 354.636768 660.006663 358.351671 660.380393 362.438079 661.127893 366.895955 670.845529 369.867886 678.320593 371.725337 683.553161 372.468348 688.785729 373.21132 692.896991 373.954294 695.887062 374.697266 701.867129 376.18325 707.286542 377.854949 712.145341 379.7124 717.004141 381.569851 719.43356 383.984561 719.43356 386.956491L719.43356 425.963085 717.191025 427.077524 712.705995 428.192003C711.210959 428.935014 710.089691 430.792465 709.342193 433.764395 713.079725 443.423158 717.191025 454.939372 721.676094 468.313075 725.413626 479.457822 729.338042 493.388745 733.449343 510.105845 737.560644 526.822946 741.111291 546.697729 744.101324 569.730157 746.343858 588.304746 747.838856 604.836094 748.586394 619.324238 749.333892 633.81242 749.70766 646.257359 749.70766 656.659132L749.70766 691.207812C757.930223 692.693758 767.087206 693.436768 777.178574 693.436768 787.26994 693.436768 794.931889 692.693758 800.164456 691.207812 812.872089 687.492909 820.534036 683.777968 823.150339 680.063065 825.766604 676.348163 828.569754 673.376232 831.559786 671.147276 834.549819 669.66133 837.726737 669.104072 841.090538 669.475577 844.454302 669.847045 850.247522 669.289824 858.470086 667.803878L858.470086 667.803878ZM802.406991 320.088051 810.255824 291.111764 830.438519 284.424893 846.136222 323.431486 822.589687 342.377544 802.406991 320.088051ZM766.526592 318.973611 762.041523 306.714386 728.40366 316.744654 727.282392 321.202529 746.343858 339.034109 766.526592 318.973611ZM259.715942 692.322291C257.473408 674.490711 256.35214 656.659132 256.35214 638.827554 255.604642 623.224893 255.97841 606.136325 257.473408 587.561735 258.968443 568.987183 261.584708 551.155604 265.322278 534.066998 268.312273 522.179279 272.236727 510.477313 277.095526 498.961099 281.954327 487.444886 287.00001 477.60037 292.232539 469.427553 297.465106 459.02578 303.071443 449.367017 309.05151 440.451228 308.303972 435.250341 307.930242 431.163933 307.930242 428.192003 307.182744 424.4771 306.808975 420.762198 306.808975 417.047295L306.808975 405.902549C306.808975 399.215716 307.182744 393.829077 307.930242 389.742669 308.677741 385.65626 312.041543 382.870083 318.021609 381.384137 321.011642 379.898153 325.122943 378.412207 330.355472 376.926223L344.931908 372.468348C350.911974 370.239391 357.265772 368.010434 363.993337 365.781477L363.993337 362.438079C363.993337 360.952096 363.806491 359.280397 363.432721 357.422945 363.058953 355.565494 362.872107 353.150785 362.872107 350.178855 362.124571 344.234996 358.947692 340.520093 353.341355 339.034109 347.735057 337.548163 341.194338 336.433684 333.719273 335.690711L322.506639 333.461755C318.769108 332.718781 315.405306 331.97577 312.415273 331.232798 309.42524 330.489824 306.061476 329.746852 302.323906 329.003878L284.383706 343.492022 263.079743 320.088051C261.584708 320.088051 260.089711 319.716583 258.594675 318.973611 255.604642 317.487627 253.735876 316.744654 252.988377 316.744654L239.533209 313.401219 213.744176 341.263065 190.197679 323.431486 201.410313 295.569639C190.945178 290.368753 181.227579 284.424893 172.25748 277.738061L147.589715 259.906482C139.367115 253.21965 132.26578 246.904284 126.285714 240.960424 120.305648 233.530619 115.446849 225.729308 111.709317 217.556491 107.971747 209.383675 104.981713 201.582364 102.739217 194.152559 99.749184 185.236769 97.506649 176.320979 96.011614 167.40519 87.041514 168.148163 78.818951 169.262641 71.343849 170.748587 63.868785 172.234571 56.206799 173.349049 48.357966 174.092023 40.509134 174.834995 33.968453 175.949474 28.735885 177.43542 19.018287 179.664377 13.225066 184.67951 11.3563 192.480821 9.487534 200.282132 9.30065 207.897729 10.795686 215.327534 12.290683 222.757378 14.906986 235.016565 18.644518 252.105171 22.38205 269.93675 25.372083 284.424893 27.614618 295.569639 32.099687 320.831062 45.181049 338.291135 66.858818 347.949898 72.091348 350.178855 79.753334 352.779317 89.844701 355.751209 99.93603 358.723176 109.840551 361.323601 119.558149 363.552558 125.538216 365.038504 134.508316 367.638928 146.468448 371.353869L164.408648 375.811745C171.883711 377.297729 176.929395 379.340933 179.545698 381.941358 182.161963 384.541782 183.843844 388.070969 184.591343 392.528846L184.591343 411.474903 184.591343 424.848606C180.106313 427.820536 176.36878 431.163933 173.378747 434.878874 170.388713 438.593777 167.398681 442.122927 164.408648 445.466362 161.418614 448.809798 158.802311 452.338947 156.559815 456.05385 152.074746 461.997709 147.776561 469.427553 143.665299 478.343343 139.553999 487.259132 137.12458 496.546389 136.377081 506.20519 134.882046 515.120979 133.387048 519.764608 131.892012 520.136113 130.397015 520.50758 128.528249 521.436306 126.285714 522.92229 124.04318 524.408236 122.548182 526.265687 121.800684 528.494644 121.053146 530.723601 120.118764 534.81001 118.997497 540.753869 117.876229 546.697729 117.315615 553.384562 117.315615 560.814405 118.063113 568.987183 118.810612 577.531506 119.558149 586.447294 119.558149 590.905171 119.931879 596.663278 120.679417 603.721615 121.426915 610.779954 123.108796 618.581264 125.7251 627.125587 128.341365 635.669871 132.26578 643.842687 137.498349 651.643998 142.730878 659.445309 149.832211 666.317895 158.802311 672.261755 168.519948 679.691598 179.358813 684.892447 191.318947 687.864376 203.279079 690.836306 214.491676 692.693758 224.95681 693.436768 236.916944 694.179742 248.503308 693.808237 259.715942 692.322291L259.715942 692.322291Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="role-small" unicode="&#60536;" d="M640.24440219 763.9514025C655.66174438 760.46868094 668.62633625 752.1101287500001 679.13818156 738.875745 689.65002594 725.64136031 695.60674625 708.924255 697.00830594 688.72442906 697.00830594 683.15206125 697.18350969 673.74868406 697.53388156 660.51429937 697.88428906 647.2799165700001 698.05949375 633.52313812 698.05949375 619.24396687 698.05949375 604.96475906 697.70908531 592.0786621899999 697.00830594 580.58563875 696.30752563 569.09265094 694.5555575 561.95302969 691.75240156 559.16684531 687.54764937 554.29104938 683.51810187 552.02725875 679.66379281 552.37554563 675.80944812 552.72379689 673.88227625 551.1565781300001 673.88227625 547.6738574999999 673.88227625 545.58421031 673.356665 538.44462469 672.30547625 526.2550650000001 671.25432406 514.06550437 668.27596438 496.82596875 663.37043188 474.53649469 660.56727594 463.39175812 656.71293125 453.11773687 651.80739969 443.71436156 646.90190375 434.31098531 641.64596281 426.12657563 636.03964999 419.16109687 629.0317775 410.80254563 622.02387031 403.14052875 615.01599781 396.17508656 614.31518188 387.11999719 613.96480906 378.76144406000003 613.96480906 371.09942906000003L613.96480906 349.15824188C613.96480906 342.19276313 614.31518188 336.62039531000005 615.01599781 332.44113562999996 615.71677719 324.08254781000005 617.81915375 318.16192875 621.32308906 314.67920719000006 624.82702625 311.19645001000004 631.83493344 308.06201531 642.34674313 305.27583187000005 645.850715 303.88272094 651.98260345 301.96721719000004 660.74247969 299.52931968999997 669.50232031 297.09142219 680.01416469 293.608665 692.27797719 289.08112030999996 704.54179063 284.55357469 717.33117875 279.85188656 730.64617906 274.976055 743.26036437 270.79679719 756.22499281 266.2692525 769.5399575 261.39342188 781.45339813 257.21412655999995 792.31561437 253.03486875 802.12667937 248.85561000999996 811.93770781 245.37285281000004 819.29598875 242.58666936999998 824.20152031 240.49702219000005 837.51652062 233.53157812999996 846.451565 226.39199343999996 851.00668906 219.07826437999995 855.56181406 211.76449875000003 859.5913625 202.18701468999996 863.09529781 190.34570625000003 864.49689406 184.07680030999995 866.24886313 172.93206375 868.35123875 156.91149469000004 870.45357875 140.89096313000005 872.90636281 123.82557094000003 875.70951875 105.71539218999999 878.51267562 88.30171406 880.79021844 71.75875219 882.5421875 56.08647000999997 884.29419125 40.414188749999994 885.52054813 30.488417809999987 886.22136311 26.309123450000016 886.92214437 17.25403405999998 885.34534437 9.76616156 881.49103531 3.8455068800000163 877.63669063-2.075112190000027 869.05201812-6.776800309999999 855.73701781-10.259557500000028 843.82361281-13.045706249999967 826.8294725-16.006033119999984 804.75463156-19.14050438000004 782.67975406-22.27497374999996 756.92577219-25.23526688000004 727.49261469-28.021450309999977 698.05949375-30.807634689999986 665.64801125-33.071425309999995 630.25813344-34.81278563000001 594.86829219-36.55414687999996 557.72648188-37.42482656000004 518.83270437-37.42482656000004 479.93889031-37.42482656000004 442.79708-36.72828936999997 407.40723875-35.33517936999999 372.01739655-33.94210594000003 339.43071125-32.02660125 309.64718188-29.588703750000036 279.86361594-27.150769689999947 253.40885375-24.364586250000002 230.28282594-21.230151559999968 207.15675969-18.095680310000034 189.28663531-14.787102190000041 176.67245001-11.304345939999962 173.86929406-10.607807810000054 170.36535781-9.214733440000032 166.16060563-7.125086249999981 161.95588906-5.035439999999994 157.92634156-2.5975425000000314 154.07199781 0.1886418799999774 150.21765313 2.974827190000042 147.2392925 6.631691250000017 145.13695344 11.15923594000003 143.03457594 15.686816249999993 142.33379655 20.736755629999948 143.03457594 26.309123450000016 143.73535719 31.184954999999945 145.66252906 41.98140562000003 148.8160925 58.698510940000006 151.96962125 75.41561531000002 155.64876125 93.17754562000005 159.85351344 111.98429719 164.05823001 130.09447687 167.91257375 147.85640531 171.41651094 165.27008343 174.92048188 181.98718874999997 177.37323125 192.43535343999997 178.77482656 196.61464688 181.57798345 204.97320000000002 185.43232719 213.50589562000005 190.33782406 222.21269812000003 195.24335562 230.91953719000003 204.00323188 240.14877093999996 216.61741625 249.90039750000005 222.92450938 254.07969188000004 234.13713312 258.95552342999997 250.25529031 264.52789125000004 266.37344656 270.10026094 283.36758875 275.32434280999996 301.23771312 280.20017343999996 319.10780188 285.07596844 335.92673844 289.08112030999996 351.69452375 292.21559062999995 367.4622725 295.35002625000004 377.79891312 297.61381500000005 382.70440906 299.00692594 393.21625344 301.09653657 402.3265025 303.70857750000005 410.03519094 306.84304875 417.74387938 309.97751905999996 421.59822406 314.33092124999996 421.59822406 319.90328906L421.59822406 379.45798219000005C413.88953469 385.03035001 406.53125375 391.64754187 399.52334656 399.30955781 393.91703375 405.57846281 387.96035001 412.89219188 381.65325687 421.250745 375.34612906 429.60929719 369.73981625 438.6643875 364.83432031 448.41604969 355.72403562 466.52622937 349.76735188 483.24333375 346.964195 498.56736563 344.16103906 513.89136094 342.40907094 522.94645031 341.708255 525.7326346899999 341.00747563 528.51881812 338.3795225 530.78260875 333.82439844 532.5239699900001 329.26927437 534.2653303100001 325.94050625 537.92219531 323.83812969 543.49456313 318.23181781 554.63930063 315.60386656 566.65471781 315.95427406 579.5408146899999 316.30464594 592.42694812 317.18063001 611.0595571900001 318.58222625 635.4386418700001 320.68460187 659.1212259399999 324.71411469 681.75895031 330.670835 703.3518871900001 336.62755531 724.94482406 349.41694437 745.14465001 369.03903687 763.9514025 379.55088125 772.30995469 393.39145719 779.44954125 410.56080219 785.37019594 427.73011156 791.290815 445.07466125 795.64425281 462.59437719 798.43043625 480.11409406 801.21662063 496.93303156 802.609695 513.05118875 802.609695 529.169345 802.609695 541.43312188 801.56487187 549.84262625 799.47526031 558.95287438 796.68907594 566.13595062 793.72874812 571.391855 790.59427781 576.647795 787.45984313 580.85251156 784.49951531 584.00607594 781.71333094 587.15964031 778.9271475 589.7875925 776.3151056300001 591.88993156 773.8771725 593.99230812 771.439275 596.09468469 769.52377125 598.19706125 768.13066125 601.70099655 765.34447687 606.08091687 764.47379625 611.33685689 765.51861938 616.59276125 766.56344345 626.2286225 766.04104969 640.24440219 763.9514025L640.24440219 763.9514025ZM545.63787406 204.97320000000002L572.968655 98.40166312999997 618.16952563 218.55583406000005 575.070995 249.90039750000005 545.63787406 204.97320000000002ZM472.05503375 251.99004469L431.05887969 218.55583406000005 477.31093812 98.40166312999997 501.48815563 206.01802406000002 472.05503375 251.99004469ZM836.81570562 650.06613563C846.62676875 648.67302656 854.33545719 643.9713375 859.94176999 635.96107219 865.54808187 627.95077031 868.70161063 618.02500031 869.40242656 606.18372562 869.40242656 602.70096844 869.75279844 597.12860062 870.45357875 589.46662125 871.15439469 581.8046053099999 871.50476656 573.79433812 871.50476656 565.43578688 871.50476656 557.07723375 871.15439469 549.4152178100001 870.45357875 542.44973906 869.75279844 535.48429687 868.70161063 531.30500345 867.30005001 529.91192813 865.19767438 527.1257446899999 862.92009406 525.90677719 860.46734656 526.2550650000001 858.01459813 526.60331531 856.78820562 525.38438437 856.78820562 522.5982 856.78820562 521.20509001 856.61300188 517.02583125 856.26262999 510.06035344 855.9122225 503.09491031 853.98504969 492.64671094 850.48111344 478.71579001 849.07951812 471.75034687 846.97717719 465.65554875 844.17398563 460.43146687 841.37086531 455.20734937 838.21730188 450.50566125 834.71336469 446.3264025 831.20939281 441.45057094 827.35504812 436.92302625 823.15033156 432.7437675 822.44955219 427.86793594 822.09914469 422.99210531 822.09914469 418.11627375L822.09914469 394.08543937C822.79992406 389.20960781 824.02631657 385.90103063 825.77828469 384.15966938 827.53025188 382.41830905999996 831.55980031 380.85105562 837.8668925 379.45798219000005 840.67004938 378.76144406000003 847.15234625 376.67179687 857.31378219 373.18907624999997 867.47525375 369.70631906000006 878.51267562 365.87534718999996 890.42607969 361.69605188 902.33948469 357.51675844 913.55210937 353.33750063 924.06395375 349.15824188 934.57579813 344.9789475 941.93407812 341.84447719 946.13879469 339.75486563000004 953.84748311 336.27210844 959.27859125 332.26699312000005 962.43215563 327.73944844000005 965.58572 323.21186811999996 967.86326375 317.11710562999997 969.26485906 309.45508969 969.96564031 305.97236812999995 971.01682813 299.70346311000003 972.41838875 290.64833719 973.81998406 280.89671062 975.22154469 270.62265375000004 976.62314094 259.82620312999995 978.02470062 249.02971780999997 979.42629594 239.10394781000002 980.82785563 230.04885750000005 982.22945187 220.99376718999997 982.93023312 215.42139937000002 982.93023312 213.33175218999997 983.6310125 207.75938437000002 982.75502844 203.05769530999999 980.30228 199.22668781000004 977.84949594 195.39568031 972.41838875 192.78363936999995 964.00892 191.39052936999997L937.72932594 186.1664475C926.51670219 184.07680030999995 912.15054875 182.33543999999995 894.63079625 180.94236563000004 893.22923563 189.30091781 891.12685906 197.31118500000002 888.32370406 204.97320000000002 886.22136311 211.24210594 883.76857906 218.20754812999996 880.96542406 225.86956312999996 878.16226719 233.53157812999996 874.65833094 240.14877093999996 870.45357875 245.72113875000002 863.44570625 255.47276624999995 855.73701781 263.48306813 847.32754999 269.75197312 838.91808125 276.02087905999997 830.68381625 281.24499657 822.62475594 285.42425531000004 814.56565906 289.60354969 806.331395 292.73798531 797.92192719 294.82763156 789.51245844 296.91727875000004 781.45339813 299.35517625 773.74470969 302.14136063 738.70524031 314.67920719000006 710.49851094 323.38601062 689.12441281 328.26184219000004 667.75035219 333.13767375 656.01215188 336.96868125000003 653.90977531 339.75486563000004 652.50821469 341.84447719 651.63223156 344.28241031000005 651.28182406 347.06859469000005 650.93141469 349.85477812 650.75624656 352.98921281 650.75624656 356.47196999000005 650.75624656 359.95469156 651.10661844 363.78569905999996 651.80739969 367.96495781 660.91768343 370.75114312999995 667.92555594 372.49250343000006 672.83108844 373.18907624999997 677.73662094 373.8856125 681.59092906 374.58215063 684.39412062 375.27868688 690.00043344 376.67179687 695.08113313 378.23901469 699.63625719 379.980375 704.19138219 381.72173531 706.4689625 383.98552594 706.4689625 386.77171031L706.4689625 423.34039219 704.36658594 424.38517875 700.16187031 425.43000281C698.76027406 426.12657563 697.70908531 427.86793594 697.00830594 430.65412031 700.51224219 439.70921062 704.36658594 450.50566125 708.57133813 463.04350781 712.07527437 473.49170812 715.75441438 486.55194844 719.60875906 502.22422969 723.46310375 517.89651187 726.79183531 536.52912094 729.59499125 558.12202219 731.69736688 575.53569938 733.0989275 591.0338381199999 733.79974438 604.61647312 734.50052375 618.1991437500001 734.85093125 629.86627406 734.85093125 639.61793625L734.85093125 672.0073237500001C742.55958406 673.40039812 751.14425562 674.09697001 760.60491313 674.09697001 770.06556875 674.09697001 777.24864594 673.40039812 782.1541775 672.0073237500001 794.06758345 668.52460219 801.25065875 665.041845 803.70344281 661.55912345 806.15619125 658.07640281 808.78414437 655.2902175 811.58729937 653.2005712499999 814.39045531 651.80749687 817.36881594 651.2850675 820.52237937 651.6333534400001 823.67590812 651.98160469 829.10705188 651.45920999 836.81570562 650.06613563L836.81570562 650.06613563ZM784.25655406 324.08254781000005L791.614835 296.91727875000004 810.53611156 290.64833719 825.25270812 327.21701813000004 803.17783156 344.9789475 784.25655406 324.08254781000005ZM750.61868 323.03776030999995L746.41392781 311.54473686999995 714.87843125 320.94811312 713.8272425 325.12737094 731.69736688 341.84447719 750.61868 323.03776030999995ZM275.48369563 673.05214781C273.38132 656.33504156 272.33013125 639.61793625 272.33013125 622.90083187 271.62935187 608.27333719 271.97975937 592.25280469 273.38132 574.8391265600001 274.78291531 557.4254840599999 277.23566375 540.7083787500001 280.73963563 524.6878106199999 283.54275594 513.54307406 287.22193156 502.57248094 291.77705563 491.77603031 296.33218156 480.97958062 301.06250937 471.75034687 305.96800531 464.08833094 310.87353687 454.33666875 316.12947781 445.28157844 321.73579062 436.92302625 321.03497375 432.04719469 320.68460187 428.21618719 320.68460187 425.43000281 319.9838225 421.94728125 319.63341406 418.46456062 319.63341406 414.98183906L319.63341406 404.53363969C319.63341406 398.26473375 319.9838225 393.21475969 320.68460187 389.38375219 321.38538219 385.55274375 324.53894656 382.94070280999995 330.14525844 381.54762844000004 332.94841437 380.15451843999995 336.80275906 378.76144406000003 341.708255 377.36833406000005L355.37366375 373.18907624999997C360.97997562 371.09942906000003 366.93666125 369.00978187 373.24375344 366.92013469000005L373.24375344 363.78569905999996C373.24375344 362.39258999000003 373.06858531 360.82537219000005 372.71817594 359.08401094 372.36776844 357.34265063 372.19260031 355.07886094 372.19260031 352.29267655 371.49178531 346.72030874999996 368.51346125 343.23758719 363.25752031 341.84447719 358.00161594 340.45140281 351.86969188 339.40657875 344.86181844 338.71004156000004L334.34997406 336.62039531000005C330.84603875 335.92385719000004 327.69247437 335.22728437 324.88931844 334.53074813 322.0861625 333.83420999 318.93263375 333.13767375 315.42866187 332.44113562999996L298.60972437 346.02377062000005 278.63725906 324.08254781000005C277.23566375 324.08254781000005 275.83410406 323.73429654999995 274.43250781 323.03776030999995 271.62935187 321.64465031 269.87738375 320.94811312 269.17660345 320.94811312L256.56238345 317.81364281000003 232.385165 343.93412343 210.31032406 327.21701813000004 220.82216844 301.09653657C211.01110438 296.22070594 201.90085531 290.64833719 193.4913875 284.37943219L170.36535781 267.66232687C162.65667031 261.39342188 155.99916875 255.47276624999995 150.39285687 249.90039750000005 144.786545 242.93495530999996 140.23142094 235.62122624999995 136.72748469 227.95921031 133.22351281 220.29719531 130.42035594 212.98346625 128.31801594 206.01802406000002 125.51486 197.65947094 123.41248345 189.30091781 122.01088813 180.94236563000004 113.60141937 181.63890281 105.89276656 182.68372594000004 98.88485844 184.07680030999995 91.87698594 185.46991031000005 84.69387406 186.51473344 77.33559313 187.21127156 69.97731313 187.90780781 63.84542469 188.95263188 58.93989219 190.34570625000003 49.82964406 192.43535343999997 44.39849938 197.13704062 42.64653125 204.45076969000002 40.89456311 211.76449875000003 40.71935938 218.90412093999998 42.12095562 225.86956312999996 43.52251531 232.83504187999995 45.97529938 244.32802969 49.47923563 260.34859781 52.98317187 277.06570310999996 55.78632781 290.64833719 57.88870438 301.09653657 62.09345655 324.77912062999997 74.35723344 341.14793906 94.68014188 350.20302936999997 99.58563875 352.29267655 106.76875062 354.73060969000005 116.22940719 357.51675844 125.69002813 360.3029775 134.97551657 362.74087594 144.08576469 364.83052312999996 149.6920775 366.2235975 158.10154625 368.66149499999995 169.31417001 372.14425219L186.1331075 376.32351094C193.14097906 377.71662094 197.87130781 379.63212468999996 200.32409188 382.07002313 202.77684031 384.50792063 204.35360375 387.81653344 205.05438406 391.99579312L205.05438406 409.75772156 205.05438406 422.29556812C200.84966844 425.0817525 197.34573125 428.21618719 194.54257531 431.69894438 191.73941844 435.18166594 188.93626343 438.49024406 186.1331075 441.62471437 183.32995062 444.75918563 180.87716656 448.06776281 178.77482656 451.55048437 174.57007437 457.12285219 170.54052594 464.08833094 166.68621781 472.44688406 162.83187406 480.80543625 160.55429375 489.51223969 159.85351344 498.56736563 158.45191813 506.92591781 157.0503575 511.27932 155.64876125 511.62760594 154.24720156 511.97585625 152.49523344 512.84653687 150.39285687 514.23964688 148.29048125 515.63272125 146.88892062 517.3740815599999 146.18814125 519.46372875 145.48732438 521.55337594 144.61134125 525.38438437 143.56015344 530.95675219 142.50896469 536.52912094 141.98338906 542.7980268700001 141.98338906 549.76350469 142.68416844 557.4254840599999 143.38494875 565.43578688 144.08576469 573.79433812 144.08576469 577.97359781 144.43613657 583.3718231099999 145.13695344 589.98901406 145.83773281 596.60620687 147.41449625 603.919935 149.86728125 611.93023781 152.32002969 619.94050406 155.99916875 627.6025190600001 160.90470219 634.91624813 165.81019812 642.22997719 172.46769781 648.67302656 180.87716656 654.24539531 189.98745125 661.21087312 200.14888719 666.08666906 211.36151281 668.8728525 222.57413657 671.65903687 233.08594625 673.40039812 242.89700938 674.09697001 254.109635 674.7935081200001 264.97185125 674.44522219 275.48369563 673.05214781L275.48369563 673.05214781Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="rencai" unicode="&#59453;" d="M442.85337969-61.50056777999998c1.4619498 13.77606709 2.41784033 25.86526787 4.04847685 37.72955391 2.8114418 20.69221465 6.18517266 41.21574258 9.22153096 61.85172832 1.4619498 10.34610732 2.41784033 20.74844355 3.65487451 31.09455088l6.35385937 47.79451758c1.23703418 9.22153008 2.47406924 18.55551885 3.48618868 27.83327783 1.4057209 13.88852403 2.41784033 27.83327783 3.93601904 41.72180186 0.78720381 7.42220771 2.36161143 14.78818565 3.09258632 22.21039336 1.57440761 15.2942458-4.72322286 29.07031201-8.8279286 43.29620946-1.349492 5.06059628-3.31750195 10.1211917-3.99224796 15.2380169-0.16868672 1.63063652 3.03635742 5.28551104 4.66699395 5.28551104 29.80128691 0.33737344 59.5463458 0.22491563 89.29140381 0.22491562 4.27339248 0 5.8478001-1.01211943 4.27339248-5.79157119-3.37373086-10.06496279-5.96025703-20.2423834-8.7716997-30.3635751-1.12457724-4.04847685-2.53029815-8.09695371-3.20504414-12.25788837-2.36161143-14.16966855-0.33737344-28.11442237 2.58652704-42.17163311 2.1366958-9.95250498 2.8114418-20.12992646 3.76733233-30.25111728 1.349492-14.73195674 2.1366958-29.52014326 3.93601904-44.19587198 2.75521377-21.47941846 6.18517266-42.8463791 9.16530117-64.26956865 1.4057209-9.55890352 2.58652705-19.11780703 3.48618868-28.67670967 1.4619498-14.45081309 2.53029815-28.9578542 3.93601904-43.35243926 0.84343271-8.82792862 2.02423799-17.59962832 3.42995976-26.31509911 0.22491563-1.68686543 2.47406924-3.03635742 5.22928213-6.12894375 4.16093467 15.91276289 7.47843662 29.63260107 11.30199785 43.23998144 3.82356123 13.94475293 8.20941153 27.72082002 12.20165947 41.60934404 2.75521377 9.67136133 5.06059628 19.51140849 7.64712247 29.23899873 2.98012852 10.57102295 6.12894375 21.08581612 8.99661533 31.71306797 2.69898487 9.67136133 4.94813848 19.45517959 7.70335137 29.12654092 2.8114418 10.40233623 5.90402901 20.74844355 8.82792861 31.15077979 2.58652705 9.55890352 5.1168252 19.34272266 7.81580918 28.95785507 2.98012852 10.90839551 6.18517266 21.70433408 9.16530117 32.66895762 2.64275596 9.95250498 4.89190957 20.01746865 7.59089443 29.9137456 2.8114418 10.40233623 6.07271484 20.69221465 8.99661445 30.98209307 2.64275596 9.4464457 4.94813848 18.94912031 7.53466554 28.39556601 1.12457724 4.32962138 1.23703418 10.1211917 4.04847685 12.48280313 3.37373086 2.8114418 10.06496279 4.61076503 13.94475293 3.26127305 17.99322979-6.41008828 35.42417138-14.22589746 53.19248643-21.14204503 18.33060323-7.14106318 36.88612119-13.77606709 55.27295332-20.74844355 14.61949981-5.56665557 29.23899873-11.18954004 43.74604072-16.98111122 18.72420469-7.47843662 36.60497754-16.30636435 52.9675708-28.17065039 14.73195674-10.73970879 26.31509912-23.9534877 32.89387412-40.48476768 2.98012852-7.3097499 2.8676707-15.74407617 3.71110342-23.78480098 1.4619498-14.67572783 2.24915362-29.46391435 3.76733232-44.1958711 1.85555215-17.31848378 4.16093467-34.58073867 6.18517266-51.89922333l0.22491563-2.36161143c1.29326309-17.54339942 2.53029815-34.91811211 3.93601904-52.34905371 0.95589053-12.08920166 1.91178105-24.17840244 3.54241757-36.09891739 2.53029815-19.28649375-18.33060323-39.36019043-38.96658896-39.19150458-113.13243369 1.01211943-226.20863935 0.7309749-339.45353086 0.7309749-158.84648437 0-317.74919677-0.11245781-476.70813809-0.50605928-14.11343965 0-26.31509912 3.03635742-34.1871372 14.28212637-9.4464457 13.60738037-10.68348076 29.23899873-6.91614756 45.09553272 0.39360234 1.57440761 1.23703418 3.09258633 1.23703418 4.61076503 1.4057209 17.20602597 2.36161143 34.41205283 4.04847685 51.56184991 1.51817871 14.61949981 3.93601904 29.18276982 5.84779922 43.74604071l0.28114453 2.41784034c1.29326309 17.14979707 1.06834834 34.63696758 4.27339248 51.44939209 3.09258633 16.36259326 0.44983037 33.73730596 11.63937041 48.97532285 11.24576894 15.01310127 24.51577588 27.32721855 40.09116534 37.16726573 23.72857207 15.06933018 50.71841719 23.2787417 76.92105849 33.23124667 20.63598574 7.87203809 40.93459805 16.53127998 61.51435576 24.74069151 17.26225488 6.85991865 34.69319648 13.66360927 52.180367 20.01746865 8.09695371 3.03635742 15.46293164-2.53029815 17.31848378-10.79593857 2.47406924-10.68348076 6.12894375-21.19827393 8.99661534-31.88175381 2.64275596-9.67136133 4.89190957-19.45517959 7.53466465-29.1827707 2.8676707-10.62725185 6.18517266-21.14204502 9.10907314-31.82552491 2.53029815-9.3902168 4.89190957-18.89289141 7.53466465-28.33933798 4.10470576-14.95687237 8.43432627-29.80128691 12.53903203-44.81438819 2.64275596-9.3902168 4.94813848-18.8366625 7.42220772-28.2268793 3.03635742-10.96462442 6.29763047-21.76056299 9.27775898-32.66895849 2.64275596-9.72759023 4.83568066-19.51140849 7.53466552-29.23899873 2.92389961-10.62725185 6.12894375-21.14204502 8.99661534-31.76929688 2.69898487-9.72759023 5.1168252-19.45517959 7.64712246-29.23899873 3.48618867-13.49492256 6.85991865-27.04607402 10.62725098-40.48476767 0.39360234-1.68686543 2.98012852-2.64275596 5.67911338-4.89190958zM301.88766817 606.83547099c3.14881523 17.14979707 6.80368974 38.40430078 11.07708222 59.60257383 4.94813848 25.13429297 16.30636435 47.79451758 30.19488926 69.27393604A210.85816464 210.85816464 0 0 0 424.129175 809.59668193c15.18178799 7.87203809 31.15077979 14.28212636 48.35680576 16.86865342 12.76394766 1.85555215 25.47166641 5.1168252 38.23561406 5.22928213 13.27000693 0.11245781 26.70870058-2.0804669 39.8100208-4.72322285 12.25788838-2.47406924 24.57200479-5.90402901 36.09891826-10.62725186a202.03023604 202.03023604 0 0 0 81.25067901-60.44600654c16.13767852-19.79255303 28.84539727-41.21574258 38.06692734-64.43825537 5.34173994-13.32623584 7.98449589-27.77704893 10.9646253-41.89048857 2.58652705-12.76394766 5.62288448-25.86526787 5.51042666-38.79790226a414.18166377 414.18166377 0 0 0-5.17305411-53.47363095c-1.4057209-10.45856513-4.44207832-20.63598574-6.85991865-30.92586416-4.55453614-19.68009521-13.27000693-37.673325-22.6039957-55.49786895-15.91276289-30.36357597-37.44841026-56.11638604-64.26956865-77.87694902a180.32590195 180.32590195 0 0 0-58.59045528-32.16289833c-19.17403594-6.18517266-38.62921552-10.45856513-58.70291308-9.16530118a178.58280849 178.58280849 0 0 0-89.51631943 30.58849072c-23.84102989 16.13767852-44.70193125 35.48040029-60.16486289 59.5463458a455.8472376 455.8472376 0 0 0-29.52014327 51.84299356c-7.14106318 15.2942458-11.86428604 31.82552578-16.58750889 48.07566211-2.47406924 8.15318261-2.8676707 16.86865342-3.93601904 25.30297969-1.4619498 11.80805713-2.75521377 23.50365645-4.61076504 39.81002167z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuju" unicode="&#59451;" d="M651.324 75.94166667000002c0 10.753-7.756 19.458-17.308 19.458H391.775c-9.55 0-17.303-8.705-17.303-19.458v-77.824H201.436v-58.363h622.906v58.363H651.324v77.824zM902.027 785.01966667H123.769c-32.243 0-58.366-26.104-58.366-58.348V181.89666666999995c0-32.221 26.123-58.368 58.366-58.368h778.259c32.243 0 58.368 26.146 58.368 58.368V726.67166667c0 32.245-26.125 58.348-58.369 58.348z m0-583.63c0-10.734-8.723-19.452-19.457-19.452H143.227c-10.753 0-19.453 8.718-19.453 19.452V707.23366667c0 10.757 8.7 19.457 19.453 19.457h739.344c10.733 0 19.457-8.7 19.457-19.457v-505.844h-0.001z m-199.315 37.223h105.26V545.07066667h-105.26v-306.458z m-168.417 0h105.26V639.36566667h-105.26v-400.753z m-315.782 0h105.26V356.47966667000003h-105.26v-117.867z m147.364 0h105.261V450.79666667H365.877v-212.185z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="_wenjianjia" unicode="&#59452;" d="M948.053333 554.666667V605.866667c0 28.16-23.04 51.2-51.2 51.2h-306.346666v34.133333c0 28.16-23.04 51.2-51.2 51.2h-392.533334c-28.16 0-51.2-23.04-51.2-51.2v-136.533333h852.48zM95.573333 486.4v-409.6c0-28.16 23.04-51.2 51.2-51.2h750.08c28.16 0 51.2 23.04 51.2 51.2V486.4H95.573333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="lianjieliu" unicode="&#60503;" d="M280.224 470.144h348.608a29.536 29.536 0 1 1 0 59.072H280.224c-52.448 0-93.152 34.304-93.152 73.856s40.704 73.856 93.152 73.856h140.128C432.096 637.184 468.448 608 512 608s79.904 29.184 91.648 68.928h178.08a29.536 29.536 0 1 1 0 59.072h-179.584C588.896 773.216 553.728 800 512 800s-76.896-26.784-90.112-64H280.224C197.184 736 128 677.728 128 603.072s69.184-132.928 152.224-132.928zM895.936 480.8A96 96 0 1 1 800 384c30.656 0 57.632 14.624 75.2 36.992 10.56-12.064 16.832-26.56 16.832-41.92 0-39.552-40.704-73.856-93.152-73.856H306.016A95.584 95.584 0 0 1 224 352a95.68 95.68 0 0 1-95.232-88.352C89.888 239.776 64 200.576 64 155.072c0-74.656 69.184-132.928 152.224-132.928h241.728A95.808 95.808 0 0 1 544-32a96 96 0 1 1 0 192 95.904 95.904 0 0 1-94.272-78.752H216.224c-52.448 0-93.152 34.304-93.152 73.856 0 17.504 8.32 33.792 21.76 46.72A95.808 95.808 0 0 1 224 160a95.68 95.68 0 0 1 95.008 86.144h479.84c83.072 0 152.224 58.272 152.224 132.928 0.032 41.536-21.824 77.568-55.136 101.728z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shouqi1" unicode="&#59447;" d="M890.2 781H133.8c-20.9 0-37.8-16.9-37.8-37.8v-37.8c0-20.9 16.9-37.8 37.8-37.8h756.4c20.9 0 37.8 16.9 37.8 37.8v37.8c0 20.9-16.9 37.8-37.8 37.8zM890.2 440.7H398.5c-20.9 0-37.8-16.9-37.8-37.8v-37.8c0-20.9 16.9-37.8 37.8-37.8h491.6c20.9 0 37.8 16.9 37.8 37.8v37.8c0.1 20.9-16.8 37.8-37.7 37.8zM890.2 100.4H133.8c-20.9 0-37.8-16.9-37.8-37.8v-37.8c0-20.9 16.9-37.8 37.8-37.8h756.4c20.9 0 37.8 16.9 37.8 37.8v37.8c0 20.9-16.9 37.8-37.8 37.8zM266.2 295.3V472.7c0 22-29.2 33.1-46.2 17.5l-97.1-88.7c-10.6-9.7-10.6-25.3 0-35l97.1-88.7c17-15.5 46.2-4.5 46.2 17.5z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhankai" unicode="&#59448;" d="M133.8 781h756.4c20.9 0 37.8-16.9 37.8-37.8v-37.8c0-20.9-16.9-37.8-37.8-37.8H133.8c-20.9 0-37.8 16.9-37.8 37.8v37.8c0 20.9 16.9 37.8 37.8 37.8zM133.8 440.7h491.6c20.9 0 37.8-16.9 37.8-37.8v-37.8c0-20.9-16.9-37.8-37.8-37.8H133.8c-20.9 0-37.8 16.9-37.8 37.8v37.8c0 20.9 16.9 37.8 37.8 37.8zM133.8 100.4h756.4c20.9 0 37.8-16.9 37.8-37.8v-37.8c0-20.9-16.9-37.8-37.8-37.8H133.8c-20.9 0-37.8 16.9-37.8 37.8v37.8c0 20.9 16.9 37.8 37.8 37.8zM757.8 295.3V472.7c0 22 29.2 33.1 46.2 17.5l97.1-88.7c10.6-9.7 10.6-25.3 0-35L804 277.9c-17-15.6-46.2-4.6-46.2 17.4z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhuanhuan" unicode="&#59449;" d="M124.79262427 272.20180333999997a34.30896625 34.30896625 0 0 1 34.2098075 34.30896625V548.75587124c0 41.94419925 34.90391959 72.38597003 82.89680932 72.38596921h585.53308328l-58.10709403-57.80961694a34.01148999 34.01148999 0 0 1 0-48.38952475 35.00307834 35.00307834 0 0 1 48.38952558 0l96.38241367 95.68830241a63.16419534 63.16419534 0 0 1 0 89.8379294L817.51643759 795.95891546a34.408125 34.408125 0 0 1-24.29392071 9.91588596 34.2098075 34.2098075 0 0 1-23.89728654-58.50372903l58.10709403-57.80961612h-585.03728953a158.65418023 158.65418023 0 0 1-105.40587084-37.68036796A135.15352954 135.15352954 0 0 1 90.38449844 548.75587124v-242.24510166a34.2098075 34.2098075 0 0 1 34.40812583-34.30896624zM899.42165857 495.80503811a34.30896625 34.30896625 0 0 1-34.30896707-34.30896624v-222.90912268c0-48.78616057-38.77111505-91.72194818-82.8968085-91.72194819H195.59205178l58.10709403 57.80961695a34.2098075 34.2098075 0 0 1-23.79812777 58.50372904 33.51569541 33.51569541 0 0 1-24.39307947-9.91588596l-96.38241449-95.6883024a63.16419534 63.16419534 0 0 1 0-89.83792941l96.38241449-95.6883024a34.2098075 34.2098075 0 1 1 48.19120724 48.58784225l-58.10709403 57.80961695h586.62383121a145.26773383 145.26773383 0 0 1 108.28147797 50.17438476A166.68604824 166.68604824 0 0 1 933.23483022 238.58694919000004V461.49607187a34.30896625 34.30896625 0 0 1-33.81317165 34.30896624z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biaoqian" unicode="&#59444;" d="M394.581333 107.51999999999998c17.066667 0 31.744 5.802667 44.714667 17.749333L788.138667 474.794667c12.288 12.288 22.869333 29.354667 31.744 49.834667 8.874667 21.162667 12.970667 39.936 12.970667 57.002667L832.853333 785.06666699c0 17.066667-6.485333 31.744-18.773333 44.03200001-12.288 12.288-26.965333 18.773333-44.032 18.773333l-202.752 0c-17.066667 0-36.522667-4.096-57.002667-12.970667-21.162667-8.874667-37.546667-18.773333-49.834667-31.744l-349.525333-349.525333c-12.288-12.288-17.749333-26.96533301-17.749333-44.032 0-17.066667 5.802667-31.744 17.749333-44.714667l239.616-239.616C362.83733299 114.00533299999995 377.514667 107.51999999999998 394.581333 107.51999999999998L394.581333 107.51999999999998 394.581333 107.51999999999998zM631.808 647.509333c-12.288 12.288-18.090667 26.965333-18.090667 44.032 0 17.066667 5.802667 31.744 18.090667 44.032 12.288 12.288 26.965333 18.090667 44.032 18.090667 17.066667 0 31.744-5.802667 44.032-18.090667 12.288-12.288 18.090667-26.965333 18.090667-44.032 0-17.066667-5.802667-31.744-18.090667-44.032C707.584 635.221333 692.906667 629.76 675.84 629.75999999 658.432 628.736 644.096 635.221333 631.808 647.509333L631.808 647.509333 631.808 647.509333zM439.637333-62.12266699999998L788.138667 287.40266699999995c12.288 12.288 22.869333 29.354667 31.744 49.834667C828.757333 358.4 832.853333 377.17333299999996 832.853333 394.24l0 109.909333c0-17.066667-4.096-36.522667-12.970667-57.002667-8.874667-21.162667-18.773333-37.546667-31.744-49.834667l-348.501333-349.525333c-12.970667-12.288-27.648-18.090667-44.714667-18.09066699s-31.744 5.802667-44.032 18.09066699l-229.717333 229.034667c-9.898667-9.898667-17.066667-18.773333-21.845333-25.941333-4.778667-7.168-6.485333-17.066667-6.485333-28.672 0-17.066667 5.802667-31.744 18.090667-44.714667l240.298667-239.616c12.288-12.288 26.96533301-17.749333 44.032-17.749333S426.325333-74.06933300000003 439.637333-62.12266699999998L439.637333-62.12266699999998 439.637333-62.12266699999998zM439.637333-62.12266699999998"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shoucang" unicode="&#59396;" d="M580.13529453 41.20588270999997C554.24705908 54.81176455000002 512.07941182 54.73235273 486.35 41.20588270999997L304.44411729-54.43235273000005C252.69411729-81.64411729000005 218.78529453-56.76176454999995 228.63235273 0.6529409199999918L263.36176455 203.20588270999997C268.31176455 232.05882363 255.20882363 272.10882362999996 234.3764709 292.41176455000004L87.22647089 435.85588271C45.35 476.67352911 58.55882364 516.61764727 116.18529453 524.98235273L319.55882363 554.5235291C348.51764727 558.73235273 382.55882363 583.58823545 395.45 609.66176455L486.40294092 793.95C512.29117636 846.38823545 554.35294092 846.17647089 580.10882363 793.95L671.06176455 609.66176455C684.00588271 583.42941182 718.17941182 558.70588271 746.95294092 554.5235291L950.3264709 524.98235273C1008.19117637 516.56470547 1021.00294092 476.51470547 979.28529453 435.85588271L832.13529453 292.41176455000004C811.17058818 271.97647089 798.2264709 231.87352911000005 803.15 203.20588270999997L837.87941182 0.6529409199999918C847.75294092-56.97352909999995 813.60588271-81.53823545 762.06764727-54.43235273000005L580.13529453 41.20588270999997 580.13529453 41.20588270999997Z"  horiz-adv-x="1085" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daiban" unicode="&#59397;" d="M120.759083 3.4679V768.352217c0 4.252196 3.447422 7.713952 7.699618 7.713952h643.527285c4.252196 0 7.713952-3.461756 7.713952-7.713952V459.760347h55.82018V768.352217c0 35.024045-28.495752 63.534132-63.534132 63.534132H128.458701c-35.024045 0-63.519798-28.510087-63.519798-63.534132v-764.884317c0-35.024045 28.495752-63.534132 63.519798-63.534133h360.269409v55.820181H128.458701c-4.252196 0-7.699618 3.461756-7.699618 7.713952zM287.660582 343.213528c-15.41357 0-27.91009-12.48321-27.91009-27.91009s12.49652-27.91009 27.91009-27.91009h111.449918c15.41357 0 27.91009 12.48321 27.91009 27.91009s-12.49652 27.91009-27.91009 27.91009h-111.449918zM636.53722 466.300926c0 15.42688-12.49652 27.91009-27.91009 27.91009H287.660582c-15.41357 0-27.91009-12.48321-27.91009-27.91009s12.49652-27.91009 27.91009-27.91009h320.966548c15.41357 0 27.91009 12.48321 27.91009 27.91009zM608.62713 639.704097H287.660582c-15.41357 0-27.91009-12.48321-27.91009-27.91009s12.49652-27.91009 27.91009-27.91009h320.966548c15.41357 0 27.91009 12.48321 27.91009 27.91009s-12.49652 27.91009-27.91009 27.91009zM820.392212 177.251956h-55.643048v90.271873c0 15.42688-12.49652 27.91009-27.91009 27.91009s-27.91009-12.48321-27.91009-27.91009v-118.181963c0-15.42688 12.49652-27.91009 27.91009-27.91009H820.393236c15.41357 0 27.91009 12.48321 27.91009 27.91009-0.001024 15.42688-12.497544 27.91009-27.911114 27.91009zM738.670805 380.874078c-121.258739 0-219.559921-98.300158-219.559921-219.559921 0-121.259763 98.300158-219.560945 219.559921-219.560945 121.259763 0 219.560945 98.300158 219.560945 219.560945 0 121.259763-98.301182 219.559921-219.560945 219.559921z m0-383.299662c-90.286208 0-163.739741 73.453533-163.739741 163.740765 0 90.286208 73.453533 163.739741 163.739741 163.739741 90.286208 0 163.739741-73.453533 163.739741-163.739741 0.001024-90.287232-73.452509-163.740765-163.739741-163.740765z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wendang" unicode="&#59398;" d="M722.0992 616.8064h146.7392l-184.5248 192v-154.2144c-0.0256-20.8384 16.9472-37.7856 37.7856-37.7856zM722.0992 574.976c-43.904 0-79.62112 35.712-79.62112 79.616V849.024H192.7168c-40.32 0-73.1136-32.7936-73.1136-73.1136V-2.4064c0-40.32 32.7936-73.088 73.1136-73.088h640.1536c40.32 0 73.1136 32.7936 73.1136 73.088V574.976h-183.8848zM691.2 275.2h-153.6v-153.6c0-14.14144-11.45856-25.6-25.6-25.6s-25.6 11.45856-25.6 25.6v153.6H332.8c-14.14144 0-25.6 11.45856-25.6 25.6s11.45856 25.6 25.6 25.6h153.6v153.6c0 14.14144 11.45856 25.6 25.6 25.6s25.6-11.45856 25.6-25.6v-153.6h153.6c14.14144 0 25.6-11.45856 25.6-25.6s-11.45856-25.6-25.6-25.6z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="guizeshuoming" unicode="&#59403;" d="M745.18315615-81.59565748h-621.49973333V850.04591408H853.02992592v-77.5739923H201.3714963v-776.6465043h388.43672652V228.84958815000005h233.06179318V850.04591408h77.68685985v-776.3430969L745.18315615-81.59565748z m77.68685985 233.02417066H667.49508267v-155.60188207l63.51045215 0.50244267 92.0987117 92.41182814-0.23423052 62.68761126zM279.05835615 616.74624948h466.1248v-76.99630459H279.05835615zM279.05835615 461.4186477H590.88592592v-78.18080711H279.05835615zM278.84111645 306.27187675000005h155.91378488v-77.72812327H278.84111645z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fenxiang" unicode="&#59405;" d="M779.636364-58.181818h-535.272728A174.778182 174.778182 0 0 0 69.818182 116.363636v535.272728A174.778182 174.778182 0 0 0 244.363636 826.181818H512a34.909091 34.909091 0 0 0 0-69.818182H244.363636A104.96 104.96 0 0 1 139.636364 651.636364v-535.272728a104.96 104.96 0 0 1 104.727272-104.727272h535.272728a104.96 104.96 0 0 1 104.727272 104.727272V384a34.909091 34.909091 0 0 0 69.818182 0v-267.636364a174.778182 174.778182 0 0 0-174.545454-174.545454zM500.363636 337.454545a35.141818 35.141818 0 0 0-24.669091 10.24 34.676364 34.676364 0 0 0 0 49.338182l418.909091 418.909091a34.909091 34.909091 0 0 0 49.338182-49.338182l-418.909091-418.909091a35.141818 35.141818 0 0 0-24.669091-10.24zM919.272727 756.363636h-186.181818a34.909091 34.909091 0 0 0 0 69.818182h186.181818a34.909091 34.909091 0 0 0 0-69.818182zM919.272727 570.181818a34.909091 34.909091 0 0 0-34.909091 34.909091v186.181818a34.909091 34.909091 0 0 0 69.818182 0v-186.181818a34.909091 34.909091 0 0 0-34.909091-34.909091z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dangqianshijiangenzong" unicode="&#59415;" d="M573.8 56.8c106.6 85.6 313.9 272.5 313.9 434 0 217.3-168.1 393.3-375.7 393.3-207.5 0-375.7-176.2-375.7-393.3 0-161.4 207.4-348.5 313.9-433.9-118.6-9.3-230.4-44-230.4-85.2 0-48.4 154-87.6 292.4-87.6 138.3 0 292.5 39.3 292.5 87.6-0.1 41.4-112.1 75.9-230.9 85.1z m-187 474.4c0 72.6 56.1 131.4 125.2 131.4 69.3 0 125.2-58.9 125.2-131.4s-56-131.3-125.2-131.3-125.2 58.8-125.2 131.3z m125.4-559.5c-92.3 0-208.8 19.6-208.8 43.9 0 18.9 71.6 35.1 147.1 41.2 36.9-29.5 61.6-46.9 61.6-46.9s24.8 17.4 61.6 46.9c75.5-6.1 147.3-22.3 147.3-41.2 0.1-24.2-116.5-43.9-208.8-43.9z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="faqi" unicode="&#59416;" d="M593.12304688-65.73632812999995h-404.29687501C119.74414062-65.73632812999995 63.40625-8.87109375 63.40625 61.08984375V706.47070313C63.40625 776.43164063 119.65625 833.296875 188.82617187 833.296875h518.02734375c69.16992188 0 125.41992188-56.86523438 125.41992188-126.82617188V384c0-20.390625-16.5234375-36.9140625-36.9140625-36.9140625s-36.9140625 16.5234375-36.9140625 36.9140625V706.47070313c0 29.26757813-23.203125 52.99804688-51.59179688 52.99804687H188.9140625c-28.4765625 0-51.59179688-23.81835938-51.59179688-52.99804688v-645.38085937c0-29.26757813 23.203125-52.99804688 51.59179688-52.99804688h404.296875c20.390625 0 36.9140625-16.5234375 36.9140625-36.9140625s-16.61132813-36.9140625-37.00195313-36.9140625zM620.19335938 653.73632813H273.81640625c-20.65429688 0-37.52929688-16.875-37.52929688-37.52929688s16.875-37.52929688 37.52929688-37.52929688h346.37695313c20.65429688 0 37.52929688 16.875 37.52929687 37.52929688s-16.875 37.52929688-37.52929688 37.52929687zM620.19335938 479.09765625H273.81640625c-20.65429688 0-37.52929688-16.875-37.52929688-37.52929688s16.875-37.52929688 37.52929688-37.52929687h346.37695313c20.65429688 0 37.52929688 16.875 37.52929687 37.52929688s-16.875 37.52929688-37.52929688 37.52929687zM475.17382812 304.546875H273.81640625c-20.65429688 0-37.52929688-16.875-37.52929688-37.52929688 0-20.65429688 16.875-37.52929688 37.52929688-37.52929687h201.26953125c20.65429688 0 37.52929688 16.875 37.52929688 37.52929688 0 20.65429688-16.875 37.52929688-37.44140625 37.52929687zM918.58203125 182.5546875H672.40039063c-20.65429688 0-37.52929688-16.875-37.52929688-37.52929688s16.875-37.52929688 37.52929687-37.52929687h246.26953126c20.65429688 0 37.52929688 16.875 37.52929687 37.52929688s-16.96289063 37.52929688-37.6171875 37.52929687zM795.44726563 304.546875c-20.65429688 0-37.52929688-16.875-37.52929688-37.52929688v-243.89648437c0-20.65429688 16.875-37.52929688 37.52929687-37.52929688s37.52929688 16.875 37.52929688 37.52929688V267.01757812000005c0 20.65429688-16.875 37.52929688-37.52929688 37.52929688z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fenlei" unicode="&#59437;" d="M228.19271111 771.83962075h157.12862814a97.09037037 97.09037037 0 0 0 97.09037038-97.09037038v-254.71658667H228.19271111a97.09037037 97.09037037 0 0 0-97.09037036 97.09037038V674.74925037a97.09037037 97.09037037 0 0 0 97.09037036 97.09037038zM803.6473363 420.0326637H549.42833778V674.74925037a97.09037037 97.09037037 0 0 0 97.09037037 97.09037038h157.12862815a97.09037037 97.09037037 0 0 0 97.09037037-97.09037038v-157.62621629a97.09037037 97.09037037 0 0 0-97.09037037-97.09037038zM803.6473363-0.15018667000003916H646.51870815a97.09037037 97.09037037 0 0 0-97.09037037 97.09037037V351.65677037h254.21899852a97.09037037 97.09037037 0 0 0 97.09037037-97.09037037v-157.6262163a97.09037037 97.09037037 0 0 0-97.09037037-97.09037037zM228.19271111 351.66890666999996h254.21899852v-254.71658667a97.09037037 97.09037037 0 0 0-97.09037038-97.09037037H228.19271111a97.09037037 97.09037037 0 0 0-97.09037036 97.09037037V254.5785363a97.09037037 97.09037037 0 0 0 97.09037036 97.09037037z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daiban1" unicode="&#59441;" d="M847.602263 281.440156c-29.551141 21.109385-67.534049 33.777015-105.536936 33.777015-105.536937 0-189.964488-84.427551-189.964488-189.964488 0-37.992898 12.667629-75.985795 33.777015-105.536937H176.397737c-25.335259 0-42.218771 16.893502-42.218771 42.218771V779.573698c0 25.335259 16.883512 42.218771 42.218771 42.21877H809.609366c25.325268 0 42.20878-16.883512 42.20878-42.21877v-498.123552h-4.215883z m-147.745717 329.278439c12.667629 0 21.109385 8.441756 21.109386 21.109385s-8.441756 21.109385-21.109386 21.109386H277.7088c-12.657639 0-21.109385-8.441756-21.109385-21.109386 0-12.657639 8.441756-21.109385 21.109385-21.109385h422.147746z m0-211.073873c12.667629 0 21.109385 8.441756 21.109386 21.109385s-8.441756 21.109385-21.109386 21.109386H277.7088c-12.657639 0-21.109385-8.441756-21.109385-21.109386 0-12.657639 8.441756-21.109385 21.109385-21.109385h422.147746zM273.492917 230.779629c-8.441756 0-16.883512-8.441756-16.883512-21.109385 0-12.657639 8.441756-21.109385 16.883512-21.109385h223.741503c8.441756 0 16.883512 8.441756 16.883512 21.109385s-8.441756 21.109385-16.883512 21.109385H273.492917z m0 0M763.174712 146.352078V209.670244c0 12.667629-8.441756 21.109385-21.109385 21.109385s-21.109385-8.441756-21.109386-21.109385v-84.427551c0-4.225873 4.225873-12.667629 4.225874-16.883513 0-4.225873 8.441756-4.225873 16.883512-4.225873h84.427551c12.667629 0 21.109385 8.441756 21.109385 21.109386s-8.441756 21.109385-21.109385 21.109385h-63.318166z m-21.109385-168.845112c-80.201678 0-147.745717 67.544039-147.745717 147.745717s67.544039 147.745717 147.745717 147.745717c80.201678 0 147.745717-67.544039 147.745717-147.745717s-67.534049-147.745717-147.745717-147.745717z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="weituoguanli" unicode="&#59443;" d="M1000.32 177.92c-12.16 12.8-209.92 186.24-222.72 198.4a36.48 36.48 0 0 1-24.32 12.8H437.76s-49.28-6.4-49.28-49.92a64 64 0 0 1 49.28-64c31.36-5.76 86.4-18.56 136.32-24.32 18.56 0 0-12.8 0-12.8l-64-42.88H302.08S215.68 256 153.6 308.48c-92.16 67.84-128 0-128 0s-12.8-24.96 0-37.12c49.28-43.52 228.48-204.8 240.64-216.96a31.36 31.36 0 0 1 30.72-6.4h364.8a73.6 73.6 0 0 0 49.28-18.56s55.68-49.92 74.24-64c30.72-24.96 43.52 0 43.52 0l166.4 179.84a19.2 19.2 0 0 1 6.4 30.72zM600.32 700.16H128a32.64 32.64 0 0 0 0 64h472.32a32.64 32.64 0 1 0 0-64zM600.32 515.84H128a32 32 0 1 0 0 64h472.32a32 32 0 1 0 0-64z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="kefu1" unicode="&#59395;" d="M922.1 459.31999969C912.68 673.63999969 736.11999969 848.4 519.92 852.42 411.81999969 854.0800003100001 308.43999969 812.7 229.14000031 734.86000031c-74.58-73.21999969-119.53999969-172.27999969-126.64000031-275.34C62.3 450.97999969 32 415.24000031 32 372.49999969l0-114.96c0-48.97999969 39.78-88.81999969 88.75999969-88.98 0.12 0 0.22000031-0.06 0.34000031-0.06 11.04 0 20.02000031 8.94 20.02000031 20.04L141.12000031 431.26000031c0 102.36 42.31999969 202.60000031 116.08000031 274.99999969 71.58 70.26 165.13999969 108.16000031 261.97999969 106.14 200.58-3.78 363.76000031-170.05999969 363.84-370.75999969 0-0.06-0.04000031-0.10000031-0.04000031-0.16000031 0-0.06 0.04000031-0.12 0.04000031-0.19999969l0-252.52000031c0-0.07999969-0.04000031-0.12-0.04000031-0.19999969s0.04000031-0.12 0.04000031-0.19999969l0-26.52c0-45.82000031-26.92000031-87.88000031-68.53999968-107.1l-190.39999969-87.9 0 3.18c0 30.10000031-24.49999969 54.58000031-54.55999969 54.58000032l-115.00000031 0c-30.10000031 0-54.55999969-24.49999969-54.55999969-54.58000032 0-30.06 24.49999969-54.52000031 54.55999969-54.52000031l149.52 0c3.12 0 6.10000031 0.70000031 8.76 1.99999969l218.38000031 100.8c55.8 25.75999969 91.84000031 82.12000031 91.84000031 143.50000031L923.01999969 171c39.43999969 9.12 69 44.35999969 69 86.52l0 114.96C992 414.97999969 962 450.54 922.1 459.31999969zM72.06000031 257.56000030999996l0 114.96c0 19.86 11.95999969 36.94000031 28.99999969 44.59999969l0-204.16000031C84.02 220.62 72.06000031 237.67999969000005 72.06000031 257.56000030999996zM584-44.44000030999996l-129.49999969 0c-7.98 0-14.47999969 6.52000031-14.47999968 14.46 0 8.02000031 6.52000031 14.50000031 14.47999968 14.50000031l115.00000032 0c7.99999969 0 14.50000031-6.52000031 14.50000031-14.50000031L584-44.44000030999996zM951.93999969 257.53999968999995c0-19.84000031-11.92000031-36.91999969-28.93999969-44.58L923 417.06c16.99999969-7.68 28.93999969-24.72 28.93999969-44.58L951.93999969 257.53999968999995zM807.98 349.5c0 1.06000031-0.43999969 1.98-0.6 2.98000031L834.00000031 352.48000031000004c11.05999969 0 20.04 8.94 20.04 20.04l0 69c0 188.58-153.43999969 342-342.04000031 342-188.58 0-342-153.40000031-342-342l0-69c0-11.08000031 8.95999969-20.02000031 20.02000031-20.02000031l26.58 0c-0.16000031-1.02-0.6-1.93999969-0.6-3 0-163.2 132.79999969-295.98 296.02000031-295.98S807.99999969 186.28000031 807.98 349.5zM210.06000031 441.52000031c0 166.5 135.43999969 301.93999969 301.93999969 301.93999969 166.44 0 301.96000031-135.46000031 301.96000031-301.96000031l0-48.96-120.94000031 0L693.00000031 392.53999969l0 94.99999968c0 9.01999969-5.95999969 16.90000031-14.65999968 19.30000032-8.59999969 2.4-17.92000031-1.26-22.54000032-8.98000032l-63.12-105.3L210.06000031 392.56000031 210.06000031 441.52000031zM256.02000031 349.5c0 1.08-0.43999969 1.99999969-0.6 3l348.61999969 0c7.00000031 0 13.51999969 3.67999969 17.11999969 9.70000031l31.8 52.98 0-42.67999968c0-11.08000031 8.95999969-20.02000031 20.04-20.02000032l95.52 0c-0.16000031-1.02-0.6-1.93999969-0.6-2.98000031 0-141.16000031-114.78-255.94000031-255.94000031-255.94000031C370.83999969 93.58000030999995 256.02000031 208.36000031000003 256.02000031 349.5z"  horiz-adv-x="1025" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cai" unicode="&#59399;" d="M959.98203125 384.02373047C959.98203125 631.43847656 759.41298828 831.9609375 512 831.9609375 264.58613281 831.9609375 64.01621094 631.43847656 64.01621094 384.02373047S264.58701172-63.96005859000002 512-63.96005859000002 959.98203125 136.60898437000003 959.98203125 384.02373047zM371.83818359 303.29267577999997c0-22.93154297-22.65292969-22.65117187-22.65292968-22.65117187L260.11074219 280.64150391c-18.41132813 0-18.69082031 18.13007813-18.69082031 18.13007812l18.36474609 298.50205078c0 19.01865234 19.01777344 19.01865234 19.01777344 19.01865235l77.09501953 0c16.08310547 0 15.94160156-12.5859375 15.94160156-12.5859375L371.8390625 303.29267577999997zM782.58007813 316.39189452999995c0-38.9671875-37.38251953-35.84443359-37.38251954-35.84443359L596.41455078 280.54746093999995c57.65625-213.43447266-39.71425781-224.34169922-39.71425781-224.34169922-41.29804688 0-32.72080078 32.72080078-35.84443359 38.17529297 0 104.36396484-110.60947266 186.16640625-110.60947266 186.16640625L410.24638672 576.57714844c0 29.17880859 39.71337891 39.71425781 55.28056641 39.71425781l223.59638671 0c21.01992188 0 38.17353516-55.28144531 38.17353516-55.28144531C782.57919922 372.46435547 782.57919922 316.39189452999995 782.58007813 316.39189452999995z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="rect" unicode="&#59400;" d="M116.4921875 779.5078125h791.015625v-791.015625h-791.015625v791.015625z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chart14" unicode="&#59406;" d="M512 834C263.4734375 834 62 632.5265625 62 384s201.4734375-450 450-450 450 201.4734375 450 450S760.5265625 834 512 834zM512 18.375C310.0765625 18.375 146.375 182.07656250000002 146.375 384 146.375 585.9234375 310.0765625 749.625 512 749.625l0-365.625 365.625 0C877.625 182.07656250000002 713.9234375 18.375 512 18.375z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chart18" unicode="&#59407;" d="M512 834C263.4734375 834 62 632.5265625 62 384s201.4734375-450 450-450 450 201.4734375 450 450S760.5265625 834 512 834zM512 18.375C310.0765625 18.375 146.375 182.07656250000002 146.375 384 146.375 585.9234375 310.0765625 749.625 512 749.625l0-365.625 258.5390625 258.5390625C836.703125 576.375 877.625 484.96875 877.625 384 877.625 182.07656250000002 713.9234375 18.375 512 18.375z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chart34" unicode="&#59408;" d="M512 834C263.4734375 834 62 632.5265625 62 384s201.4734375-450 450-450 450 201.4734375 450 450S760.5265625 834 512 834zM512 384L146.375 384C146.375 585.9234375 310.0765625 749.625 512 749.625L512 384z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chart38" unicode="&#59409;" d="M512 834C263.4734375 834 62 632.5265625 62 384s201.4734375-450 450-450 450 201.4734375 450 450S760.5265625 834 512 834zM512 18.375C310.0765625 18.375 146.375 182.07656250000002 146.375 384 146.375 585.9234375 310.0765625 749.625 512 749.625l0-365.625 258.5390625-258.5390625C704.375 59.296875 612.96875 18.375 512 18.375z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="circle" unicode="&#59410;" d="M512 834c248.53846114 0 450-201.46153886 450-450S760.53846114-66 512-66s-450 201.46153886-450 450S263.46153886 834 512 834z"  horiz-adv-x="1064" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chart12" unicode="&#59411;" d="M512 834C263.4734375 834 62 632.5265625 62 384s201.4734375-450 450-450 450 201.4734375 450 450S760.5265625 834 512 834zM512 18.375C310.0765625 18.375 146.375 182.07656250000002 146.375 384 146.375 585.9234375 310.0765625 749.625 512 749.625L512 18.375z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chart58" unicode="&#59412;" d="M512 834C263.4734375 834 62 632.5265625 62 384s201.4734375-450 450-450 450 201.4734375 450 450S760.5265625 834 512 834zM512 384L253.4609375 125.4609375C187.296875 191.625 146.375 283.03125 146.375 384 146.375 585.9234375 310.0765625 749.625 512 749.625L512 384z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chart78" unicode="&#59413;" d="M512 834C263.4734375 834 62 632.5265625 62 384s201.4734375-450 450-450 450 201.4734375 450 450S760.5265625 834 512 834zM512 384L253.4609375 642.5390625C319.625 708.703125 411.03125 749.625 512 749.625L512 384z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xingxing" unicode="&#59414;" d="M949.12 509.408c-4.864 15.008-17.856 25.952-33.44 28.192l-256.992 37.344-114.944 232.896c-6.976 14.144-21.376 23.104-37.152 23.104-15.776 0-30.176-8.96-37.152-23.104l-114.944-232.896L97.472 537.6c-15.616-2.272-28.576-13.184-33.44-28.192s-0.8-31.456 10.496-42.464l185.984-181.28-43.904-255.968c-2.656-15.552 3.712-31.264 16.48-40.544 12.768-9.28 29.664-10.496 43.648-3.136l229.888 120.864 229.856-120.864c6.048-3.168 12.672-4.768 19.264-4.768 8.576 0 17.152 2.656 24.352 7.904 12.768 9.28 19.136 24.992 16.48 40.544l-43.904 255.968 185.984 181.28C949.92 477.952 953.984 494.4 949.12 509.408z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dianzan" unicode="&#59417;" d="M962.48684023 383.02280301999997c0-247.71938555-203.25693164-449.51052217-452.4421122-449.02192323-244.29919658 0.48859805-447.55612822 204.72272666-448.04472715 449.51052216C62.00000088 631.71938555 266.72272753 834.48771914 516.88510508 833.99912021c244.78779551-0.48859805 445.60173516-204.23412862 445.60173515-450.97631719zM414.27944316 333.67436512999996v-122.14959784c0-40.5536669 15.14655-56.18881494 55.7002169-56.67741387 68.4037749-0.48859805 136.8075498 0.48859805 205.21132471-0.48859805 20.03253398 0 31.7588959 8.79477099 40.06506885 25.89571406 10.26056602 20.52113291 15.14655 42.99665888 21.49832899 64.49498877 17.58954199 62.05199589 34.20188789 124.1039918 42.9966589 187.62178272 5.37458203 40.5536669-5.86318096 52.76862685-45.43965089 53.2572249-36.64487989 0-73.28975888 0.97719698-109.93463877-0.48859805-21.98692793-0.97719698-28.82730498 4.88598398-22.96412402 27.85010801 10.74916494 43.48525693 18.56673896 87.45911279 7.81757402 132.89876279-5.37458203 22.9641249-14.65795195 43.48525693-35.17908398 56.18881583-22.47552598 13.68075498-41.53086386 5.37458203-47.88264287-20.03253399-4.39738594-18.07814092-3.42018896-37.13347793-9.28336992-55.21161885-16.12374697-48.37124092-44.46245391-88.92490781-82.08452989-122.14959873-15.63514893-13.68075498-21.00973096-28.82730498-20.52113202-48.85983897 0.97719698-40.5536669 0-81.10733291 0-122.14959873z m-43.97385586-16.12374697c0 45.43965088-0.48859805 91.36789981 0 136.80755069 0.48859805 21.49832901-7.81757402 32.24749395-30.2931 31.27029697-22.9641249-0.48859805-45.43965088-0.48859805-68.40377578 0-21.49832901 0.48859805-28.82730498-11.23776299-26.87291103-30.78169892 1.46579502-16.12374697 2.93159003-32.24749395 3.90878701-48.37124093 4.88598398-76.22134981 9.77196797-152.44269873 14.16935302-228.66404765 0.97719698-16.61234502 9.28336904-22.9641249 24.91851797-22.47552686 18.56673896 0.48859805 37.62207598 0.48859805 56.18881583 0 19.05533701-0.97719698 25.89571494 7.81757402 25.89571493 26.38431387 0 44.95105195 0.48859805 90.39070283 0.48859805 135.83035283z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tingzhi1" unicode="&#59418;" d="M62 384a450 450 0 1 1 900 0A450 450 0 0 1 62 384z m281.25 168.75h337.5v-337.5H343.25V552.75z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="WIFIxinhao-ji" unicode="&#59419;" d="M478.03605 400.993C358.18605 388.12 270.63805 302.238 247.01905 262.66c-14.787-24.778-6.69-56.847 18.085-71.633 8.393-5.008 17.616-7.393 26.726-7.393 17.787 0 35.132 9.092 44.91 25.479 10.072 16.874 71.244 79.269 152.452 87.991 68.809 7.376 137.709-25.217 204.772-96.912 19.715-21.063 52.775-22.166 73.843-2.459 21.071 19.711 22.175 52.771 2.468 73.843-112.98 120.767-221.263 137.027-292.239 129.417zM513.39305 195.251c-55.4 0-100.31-44.907-100.31-100.306s44.91-100.307 100.31-100.307c55.395 0 100.306 44.908 100.306 100.307S568.78805 195.251 513.39305 195.251zM1008.17105 545.15C840.37705 708.406 660.63005 784.783 473.93005 772.152c-108.92-7.369-220.504-46.655-322.681-113.614C72.00105 606.604 22.28105 554.175 11.11405 539.903c-17.783-22.72-13.815-55.605 8.907-73.387 9.568-7.49 20.923-11.122 32.191-11.122 15.49 0 30.817 6.865 41.107 20.017 7.055 8.749 50.226 53.609 118.01 97.563 61.02 39.57 157.938 88.2 273.119 95.15 154.619 9.298 306.324-57.237 450.861-197.862 20.684-20.125 53.752-19.669 73.873 1.012 20.122 20.682 19.671 53.757-1.011 73.876zM487.43005 588.956c-197.071-9.085-329.162-149.714-353.641-177.811-18.954-21.756-16.681-54.758 5.074-73.709 9.901-8.624 22.122-12.852 34.296-12.852 14.578 0 29.085 6.07 39.416 17.926 11.998 13.775 121.8 134.792 279.667 142.069 107.595 4.936 216.103-44.011 322.504-145.547 20.882-19.924 53.945-19.151 73.861 1.728 19.924 20.873 19.148 53.944-1.726 73.862C759.02805 536.63 624.62705 595.281 487.43005 588.956z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="WIFIxinhao-ji1" unicode="&#59422;" d="M478.04147 400.993C358.19147 388.12 270.64347 302.238 247.02447 262.66c-14.787-24.778-6.69-56.847 18.085-71.633 8.393-5.008 17.616-7.393 26.726-7.393 17.787 0 35.132 9.092 44.91 25.479 10.072 16.874 71.244 79.269 152.452 87.991 68.809 7.376 137.709-25.217 204.772-96.912 19.715-21.063 52.775-22.166 73.843-2.459 21.071 19.711 22.175 52.771 2.468 73.843-112.98 120.767-221.263 137.027-292.239 129.417zM513.39847 195.251c-55.4 0-100.31-44.907-100.31-100.306s44.91-100.307 100.31-100.307c55.395 0 100.306 44.908 100.306 100.307S568.79347 195.251 513.39847 195.251zM513.60247 753.498c41.422 0 83.047-4.663 123.718-13.86 40.715-9.207 81.567-23.203 121.42-41.601 80.327-37.082 159.558-93.343 235.49-167.222 6.173-6.005 9.638-14.054 9.755-22.666 0.118-8.611-3.125-16.754-9.132-22.927-6.123-6.293-14.331-9.76-23.112-9.76-8.44 0-16.424 3.245-22.479 9.136-139.391 135.619-286.212 204.383-436.384 204.383-9.82 0-19.788-0.3-29.628-0.892-119.525-7.212-219.758-57.455-282.796-98.333-70.679-45.831-114.761-91.948-122.697-101.789l-0.092-0.115-0.09-0.116c-6.137-7.843-15.379-12.341-25.356-12.341-7.253 0-14.122 2.375-19.866 6.872-6.774 5.301-11.077 12.936-12.114 21.496-1.038 8.567 1.317 17.024 6.632 23.815 4.592 5.869 18.643 21.458 42.174 42.661 19.518 17.587 51.526 44.279 93.172 71.571 99.308 65.079 207.565 103.25 313.068 110.388a570.412 570.412 0 0 0 38.317 1.3m0 20c-13.192 0-26.403-0.448-39.667-1.345-108.92-7.369-220.504-46.655-322.681-113.614C72.00647 606.604 22.28647 554.175 11.11947 539.903c-17.783-22.72-13.815-55.605 8.907-73.387 9.568-7.49 20.923-11.122 32.191-11.122 15.49 0 30.817 6.865 41.107 20.017 7.055 8.749 50.226 53.609 118.01 97.563 61.02 39.57 157.938 88.2 273.119 95.15 9.484 0.57 18.963 0.855 28.424 0.855 144.784 0 286.767-66.718 422.438-198.717 10.155-9.881 23.299-14.801 36.426-14.801 13.611 0 27.205 5.286 37.447 15.813 20.121 20.68 19.67 53.755-1.012 73.875-155.874 151.659-322.079 228.349-494.574 228.349zM487.43547 588.956c-197.071-9.085-329.162-149.714-353.641-177.811-18.954-21.756-16.681-54.758 5.074-73.709 9.901-8.624 22.122-12.852 34.296-12.852 14.578 0 29.085 6.07 39.416 17.926 11.998 13.775 121.8 134.792 279.667 142.069 107.595 4.936 216.103-44.011 322.504-145.547 20.882-19.924 53.945-19.151 73.861 1.728 19.924 20.873 19.148 53.944-1.726 73.862C759.03347 536.63 624.63247 595.281 487.43547 588.956z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="WIFIxinhao-ji2" unicode="&#59423;" d="M478.04147 400.993C358.19147 388.12 270.64347 302.238 247.02447 262.66c-14.787-24.778-6.69-56.847 18.085-71.633 8.393-5.008 17.616-7.393 26.726-7.393 17.787 0 35.132 9.092 44.91 25.479 10.072 16.874 71.244 79.269 152.452 87.991 68.809 7.376 137.709-25.217 204.772-96.912 19.715-21.063 52.775-22.166 73.843-2.459 21.071 19.711 22.175 52.771 2.468 73.843-112.98 120.767-221.263 137.027-292.239 129.417zM513.39847 195.251c-55.4 0-100.31-44.907-100.31-100.306s44.91-100.307 100.31-100.307c55.395 0 100.306 44.908 100.306 100.307S568.79347 195.251 513.39847 195.251zM513.60247 753.498c41.422 0 83.047-4.663 123.718-13.86 40.715-9.207 81.567-23.203 121.42-41.601 80.327-37.082 159.558-93.343 235.49-167.222 6.173-6.005 9.638-14.054 9.755-22.666 0.118-8.611-3.125-16.754-9.132-22.927-6.123-6.293-14.331-9.76-23.112-9.76-8.44 0-16.424 3.245-22.479 9.136-139.391 135.619-286.212 204.383-436.384 204.383-9.82 0-19.788-0.3-29.628-0.892-119.525-7.212-219.758-57.455-282.796-98.333-70.679-45.831-114.761-91.948-122.697-101.789l-0.092-0.115-0.09-0.116c-6.137-7.843-15.379-12.341-25.356-12.341-7.253 0-14.122 2.375-19.866 6.872-6.774 5.301-11.077 12.936-12.114 21.496-1.038 8.567 1.317 17.024 6.632 23.815 4.592 5.869 18.643 21.458 42.174 42.661 19.518 17.587 51.526 44.279 93.172 71.571 99.308 65.079 207.565 103.25 313.068 110.388a570.412 570.412 0 0 0 38.317 1.3m0 20c-13.192 0-26.403-0.448-39.667-1.345-108.92-7.369-220.504-46.655-322.681-113.614C72.00647 606.604 22.28647 554.175 11.11947 539.903c-17.783-22.72-13.815-55.605 8.907-73.387 9.568-7.49 20.923-11.122 32.191-11.122 15.49 0 30.817 6.865 41.107 20.017 7.055 8.749 50.226 53.609 118.01 97.563 61.02 39.57 157.938 88.2 273.119 95.15 9.484 0.57 18.963 0.855 28.424 0.855 144.784 0 286.767-66.718 422.438-198.717 10.155-9.881 23.299-14.801 36.426-14.801 13.611 0 27.205 5.286 37.447 15.813 20.121 20.68 19.67 53.755-1.012 73.875-155.874 151.659-322.079 228.349-494.574 228.349zM507.46047 569.417c124.91 0 247.921-56.949 365.62-169.265 6.23-5.945 9.772-13.961 9.974-22.571 0.202-8.609-2.962-16.782-8.913-23.017-6.142-6.438-14.425-9.984-23.325-9.984a32.108 32.108 0 0 0-22.257 8.921C723.27147 453.974 615.09747 504.918 507.04347 504.918c-5.217 0-10.504-0.122-15.718-0.361-69.944-3.224-138.851-27.45-204.808-72.003-50.943-34.413-83.092-70.104-89.016-76.906a32.27 32.27 0 0 0-24.337-11.064 32.217 32.217 0 0 0-21.159 7.932c-6.494 5.657-10.396 13.504-10.987 22.097-0.592 8.592 2.198 16.901 7.855 23.395 10.32 11.845 48.606 53.52 107.984 92.446 33.066 21.678 67.563 39.196 102.533 52.069 42.263 15.557 85.653 24.458 128.966 26.454 6.342 0.292 12.77 0.44 19.104 0.44m0 20c-6.668 0-13.343-0.154-20.025-0.462-197.071-9.085-329.162-149.714-353.641-177.811-18.954-21.756-16.681-54.758 5.074-73.709 9.901-8.624 22.122-12.852 34.296-12.852 14.578 0 29.085 6.07 39.416 17.926 11.998 13.775 121.8 134.792 279.667 142.069 4.925 0.226 9.868 0.339 14.797 0.339 102.744 0 206.177-48.998 307.708-145.886 10.121-9.656 23.104-14.451 36.064-14.451 13.779 0 27.533 5.419 37.797 16.179 19.924 20.873 19.148 53.944-1.726 73.862-121.627 116.066-249.18 174.796-379.427 174.796z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="WIFIxinhao-ji3" unicode="&#59424;" d="M507.68547 382.573c37.787 0 75.655-8.221 112.553-24.436 46.959-20.636 92.526-54.356 135.435-100.222 12.144-12.985 11.461-33.431-1.523-45.576a32.12 32.12 0 0 0-22.015-8.694c-9.03 0-17.398 3.628-23.559 10.21-64.72 69.189-132.114 104.271-200.312 104.271-7.039 0-14.171-0.382-21.203-1.136-87.968-9.449-154.472-75.817-167.492-97.63-5.875-9.848-16.244-15.727-27.734-15.727a32.184 32.184 0 0 0-16.476 4.566c-15.265 9.11-20.271 28.942-11.161 44.21 10.044 16.831 35.389 46.069 73.759 73.075 30.86 21.72 80.585 49.001 142.216 55.621a258.591 258.591 0 0 0 27.512 1.468m0 20.001a277.75 277.75 0 0 1-29.644-1.581C358.19147 388.12 270.64347 302.238 247.02447 262.66c-14.787-24.778-6.69-56.847 18.085-71.633 8.393-5.008 17.616-7.393 26.726-7.393 17.787 0 35.132 9.092 44.91 25.479 10.072 16.874 71.244 79.269 152.452 87.991a178.842 178.842 0 0 0 19.067 1.021c62.455 0 124.835-32.859 185.705-97.934 10.287-10.99 24.211-16.548 38.165-16.548 12.789 0 25.604 4.665 35.678 14.089 21.071 19.711 22.175 52.771 2.468 73.843-98.223 104.994-192.9 130.999-262.595 130.999zM513.39847 195.251c-55.4 0-100.31-44.907-100.31-100.306s44.91-100.307 100.31-100.307c55.395 0 100.306 44.908 100.306 100.307S568.79347 195.251 513.39847 195.251zM513.60247 753.498c41.422 0 83.047-4.663 123.718-13.86 40.715-9.207 81.567-23.203 121.42-41.601 80.327-37.082 159.558-93.343 235.49-167.222 6.173-6.005 9.638-14.054 9.755-22.666 0.118-8.611-3.125-16.754-9.132-22.927-6.123-6.293-14.331-9.76-23.112-9.76-8.44 0-16.424 3.245-22.479 9.136-139.391 135.619-286.212 204.383-436.384 204.383-9.82 0-19.788-0.3-29.628-0.892-119.525-7.212-219.758-57.455-282.796-98.333-70.679-45.831-114.761-91.948-122.697-101.789l-0.092-0.115-0.09-0.116c-6.137-7.843-15.379-12.341-25.356-12.341-7.253 0-14.122 2.375-19.866 6.872-6.774 5.301-11.077 12.936-12.114 21.496-1.038 8.567 1.317 17.024 6.632 23.815 4.592 5.869 18.643 21.458 42.174 42.661 19.518 17.587 51.526 44.279 93.172 71.571 99.308 65.079 207.565 103.25 313.068 110.388a570.412 570.412 0 0 0 38.317 1.3m0 20c-13.192 0-26.403-0.448-39.667-1.345-108.92-7.369-220.504-46.655-322.681-113.614C72.00647 606.604 22.28647 554.175 11.11947 539.903c-17.783-22.72-13.815-55.605 8.907-73.387 9.568-7.49 20.923-11.122 32.191-11.122 15.49 0 30.817 6.865 41.107 20.017 7.055 8.749 50.226 53.609 118.01 97.563 61.02 39.57 157.938 88.2 273.119 95.15 9.484 0.57 18.963 0.855 28.424 0.855 144.784 0 286.767-66.718 422.438-198.717 10.155-9.881 23.299-14.801 36.426-14.801 13.611 0 27.205 5.286 37.447 15.813 20.121 20.68 19.67 53.755-1.012 73.875-155.874 151.659-322.079 228.349-494.574 228.349zM507.46047 569.417c124.91 0 247.921-56.949 365.62-169.265 6.23-5.945 9.772-13.961 9.974-22.571 0.202-8.609-2.962-16.782-8.913-23.017-6.142-6.438-14.425-9.984-23.325-9.984a32.108 32.108 0 0 0-22.257 8.921C723.27147 453.974 615.09747 504.918 507.04347 504.918c-5.217 0-10.504-0.122-15.718-0.361-69.944-3.224-138.851-27.45-204.808-72.003-50.943-34.413-83.092-70.104-89.016-76.906a32.27 32.27 0 0 0-24.337-11.064 32.217 32.217 0 0 0-21.159 7.932c-6.494 5.657-10.396 13.504-10.987 22.097-0.592 8.592 2.198 16.901 7.855 23.395 10.32 11.845 48.606 53.52 107.984 92.446 33.066 21.678 67.563 39.196 102.533 52.069 42.263 15.557 85.653 24.458 128.966 26.454 6.342 0.292 12.77 0.44 19.104 0.44m0 20c-6.668 0-13.343-0.154-20.025-0.462-197.071-9.085-329.162-149.714-353.641-177.811-18.954-21.756-16.681-54.758 5.074-73.709 9.901-8.624 22.122-12.852 34.296-12.852 14.578 0 29.085 6.07 39.416 17.926 11.998 13.775 121.8 134.792 279.667 142.069 4.925 0.226 9.868 0.339 14.797 0.339 102.744 0 206.177-48.998 307.708-145.886 10.121-9.656 23.104-14.451 36.064-14.451 13.779 0 27.533 5.419 37.797 16.179 19.924 20.873 19.148 53.944-1.726 73.862-121.627 116.066-249.18 174.796-379.427 174.796z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zanting1" unicode="&#59425;" d="M512-66C263.46666641-66 62 135.46666641000002 62 384S263.46666641 834 512 834s450-201.46666641 450-450-201.46666641-450-450-450z m-105.00000029 630a29.99999971 29.99999971 0 0 1-29.99999971-29.99999971v-300.00000058a29.99999971 29.99999971 0 0 1 60.00000029 0V534.00000029a29.99999971 29.99999971 0 0 1-30.00000058 29.99999971z m210.00000058 0a29.99999971 29.99999971 0 0 1-30.00000058-29.99999971v-300.00000058a29.99999971 29.99999971 0 0 1 60.00000029 0V534.00000029a29.99999971 29.99999971 0 0 1-29.99999971 29.99999971z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xingqier" unicode="&#59426;" d="M389.04615406 265.38461530999996c3.19961531 0 5.63076938-0.73846125 7.29230719-2.21538468 1.66153875-1.47692344 2.49230813-3.93807656 2.49230813-7.38461532 0-6.64615406-3.26192344-9.96923062-9.78461532-9.96923062H235.63076937c-6.52269187 0-9.78461531 3.32307656-9.78461531 9.96923062 0 3.44653875 0.83076938 5.90769188 2.49230719 7.38461532 1.66153875 1.47692344 4.09269187 2.21538469 7.29230813 2.21538468h69.41538468v13.29230813h-51.13846219c-3.19961531 0-5.63076938 0.70730812-7.29230718 2.12307656-1.66153875 1.41576937-2.49230813 3.78461531-2.49230813 7.10769188v0.36923156c-4.06153875-1.23115406-7.50807656-0.43038469-10.33846125 2.4-5.415 5.415-4.36961531 11.44615406 3.13846125 18.09230719a73.26 73.26 0 0 1 9.6 9.96923062c2.83038469 3.56884594 5.72307656 8.12307656 8.67692344 13.66153875a10.45846125 10.45846125 0 0 0 0.83076937 1.66153875 17.95384594 17.95384594 0 0 0 1.2 1.66153781c-5.53846125 0.49269187-9.41538469 2.21538469-11.63076937 5.16923157-2.21538469 2.95384594-3.32307656 7.44576938-3.32307656 13.4769225v36.73846125c0 6.64615406 1.32346125 11.385 3.96923062 14.21538468 2.64576937 2.83038469 7.29230812 4.24615406 13.93846125 4.24615407h102.09230813c6.64615406 0 11.32269188-1.41576937 14.03076843-4.24615407 2.70807656-2.83038469 4.06153875-7.56923062 4.06153875-14.21538468v-36.73846125c0-6.64615406-1.35346125-11.415-4.06153875-14.30769188-2.70807656-2.89269188-7.38461531-4.33846125-14.03076843-4.33846219h-36.55384688c0.49269187-1.10769187 0.73846125-2.76923063 0.73846219-4.98461531v-4.61538469h54.2769225c6.52269187 0 9.78461531-3.19961531 9.78461531-9.6 0-6.40038469-3.26192344-9.6-9.78461531-9.6H326.46153875v-10.15384593h49.10769188c3.19961531 0 5.63076938-0.615 7.29230812-1.84615407 1.66153875-1.23115406 2.49230813-3.56884594 2.49230719-7.01538468 0-3.32307656-0.83076938-5.69192344-2.49230719-7.10769188-1.66153875-1.41576937-4.09269187-2.12307656-7.29230812-2.12307656H326.46153875v-13.29230813h62.58461531zM359.69230813 387.6c0 2.09192344-1.10769187 3.13846125-3.3230775 3.13846125h-90.46153875c-0.98423063 0-1.72269187-0.21576937-2.21538375-0.64615313-0.49269187-0.43038469-0.73846125-1.32346125-0.73846219-2.67692343v-6.46153875H359.69230813v6.64615406z m0-23.81538469h-96.73846219v-6.09230719c0-1.47692344 0.24576938-2.43115406 0.73846219-2.86153875 0.49269187-0.43038469 1.41576937-0.64615406 2.76923062-0.64615406h89.72307656c1.35346125 0 2.27653875 0.21576937 2.76923063 0.64615406 0.49269187 0.43038469 0.73846125 1.38461531 0.73846219 2.86153875v6.09230719z m-96.36923157-56.86153875c-1.23115406-1.47692344-2.43115406-3.19961531-3.6-5.16923062-1.16884594-1.96961531-2.36884594-3.63115406-3.6-4.98461532h48.9230775v10.15384594h-41.7230775z m41.7230775 23.81538469c0 2.21538469 0.24576938 3.87692344 0.73846125 4.98461531h-30.83076937c1.96961531-2.21538469 2.15423062-5.415 0.55384594-9.6h29.53846218v4.61538469z m153.08884594-62.4c-2.09192344-3.56884594-4.58423063-7.32346125-7.47692344-11.26153781a192.67615406 192.67615406 0 0 0-8.58461531-10.89230813c-2.70807656-3.07730813-5.50730813-4.61538469-8.4-4.61538469-2.89269188 0-5.44615406 1.23115406-7.66153781 3.69230813-2.09192344 2.33884594-3.10730812 4.70769188-3.04615407 7.10769187 0.06115406 2.4 1.44576938 5.07692344 4.15384594 8.03076938 3.32307656 3.69230812 6.06115406 7.01538469 8.21538469 9.96923062 2.15423062 2.95384594 3.90807656 5.59961531 5.26153875 7.93846125 1.23115406 1.96961531 2.46115406 3.56884594 3.69230719 4.8h-13.10769188c-3.32307656 0-5.69192344 0.79961531-7.10769281 2.4-1.41576937 1.60038469-2.12307656 3.93807656-2.12307656 7.01538469 0 3.56884594 0.64615406 6.06115406 1.93846125 7.47692344 1.29230813 1.41576937 3.72346125 2.12307656 7.29230812 2.12307656h6.46153781V379.84615406h-4.43076843c-3.56884594 0-6 0.70730812-7.29230813 2.12307657s-1.93846125 3.84576937-1.93846125 7.29230812c0 3.56884594 0.64615406 6.03115406 1.93846125 7.38461531 1.29230813 1.35346125 3.72346125 2.03076938 7.29230813 2.03076938h4.43076843V409.38461531c0 3.32307656 0.95423062 5.69192344 2.86153875 7.10769281 1.90730812 1.41576937 4.15384594 2.12307656 6.73846125 2.12307657 3.07730813 0 5.44615406-0.70730812 7.10769282-2.12307657 1.66153875-1.41576937 2.49230813-3.78461531 2.49230718-7.10769281v-10.70769187h28.98461625v10.52307656c0 3.32307656 0.89192344 5.69192344 2.67692251 7.10769187 1.785 1.41576937 4.03038469 2.12307656 6.73846125 2.1230775 2.83038469 0 5.20038469-0.70730812 7.10769281-2.1230775 1.90730812-1.41576937 2.86153875-3.78461531 2.86153875-7.10769187v-10.52307656h4.43076844c3.56884594 0 6-0.67730813 7.29230812-2.03076938s1.93846125-3.81576937 1.93846125-7.38461531c0-3.19961531-0.615-5.56961531-1.84615312-7.10769281-1.23115406-1.53807656-3.69230812-2.30769188-7.38461625-2.30769188h-4.43076844v-77.7230775h6.09230718c3.56884594 0 6-0.73846125 7.29230813-2.21538468 1.29230813-1.47692344 1.93846125-3.87692344 1.93846125-7.2 0-2.95384594-0.76961531-5.29269188-2.30769188-7.01538375-1.53807656-1.72269187-3.90807656-2.58461531-7.10769281-2.58461625h-15.50769187c0.98423063-0.73846125 1.84615406-1.60038469 2.58461531-2.58461532a347.55 347.55 0 0 0 4.33846125-6 132.09 132.09 0 0 0 3.23076937-4.8c0.98423063-1.53807656 1.93846125-3.10730812 2.86153876-4.70769187s1.93846125-3.44653875 3.04615312-5.53846125c0.615-1.10769187 1.10769187-2.33884594 1.47692344-3.69230813l0.36923062 0.73846125c0.12346125 0.24576938 0.30807656 0.55384594 0.55384594 0.9230775a57.77884594 57.77884594 0 0 1 5.26153875 12c1.29230813 4.185 2.27653875 8.985 2.95384594 14.4 0.67730813 5.415 1.13884594 11.75423062 1.38461531 19.01538469 0.24576938 7.26115406 0.36923062 15.93807656 0.36923063 26.03076937V392.76923063c0 6.03115406 1.10769187 10.46192344 3.3230775 13.29230812 2.21538469 2.83038469 6.46153875 4.24615406 12.73846124 4.24615313h33.96923063c6.27692344 0 10.61538469-1.41576937 13.01538469-4.24615313 2.4-2.83038469 3.6-7.26115406 3.6-13.29230812v-129.78461532c0-7.87730812-1.47692344-13.23115406-4.43076938-16.06153875-2.95384594-2.83038469-7.26115406-4.24615406-12.92307656-4.24615312-2.09192344 0-4.36961531 0.15346125-6.83076938 0.46153781s-5.72307656 1.07653875-9.78461531 2.30769281c-3.56884594 0.98423063-5.84653875 2.55346125-6.83076937 4.70769188-0.98423063 2.15423062-0.86192344 4.89230812 0.36923062 8.21538469 0.98423063 2.46115406 2.4 4.03038469 4.24615406 4.70769281 1.84615406 0.67730813 4.43076938 0.46153875 7.75384594-0.64615406 3.44653875-1.10769187 5.81538469-1.53807656 7.10769281-1.29230813 1.29230813 0.24576938 1.93846125 1.41576937 1.93846125 3.50769281v35.44615407h-28.24615406c-0.615-11.56961531-1.72269187-21.41538469-3.32307656-29.53846219-1.60038469-8.12307656-4.12269188-15.32307656-7.56923063-21.6-2.09192344-3.93807656-4.58423063-6.36923063-7.47692343-7.29230719-2.89269188-0.92307656-5.81538469-0.585-8.76923063 1.01538469-2.46115406 1.35346125-3.93807656 3.13846125-4.43076937 5.35384594-0.24576938-0.36923062-0.585-0.73846125-1.01538469-1.10769282-0.43038469-0.36923062-0.89192344-0.79961531-1.38461531-1.29230718-2.83038469-2.21538469-5.44615406-3.16961531-7.84615407-2.86153875-2.4 0.30807656-4.76884594 2.61576937-7.10769187 6.9230775-2.33884594 4.185-4.46192344 7.75384594-6.36923063 10.70769187a186.00576937 186.00576937 0 0 1-5.81538468 8.49230813c-2.46115406 3.07730813-3.56884594 5.75423062-3.32307657 8.03076843 0.24576938 2.27653875 1.35346125 4.33846125 3.32307657 6.18461532h-24c1.84615406-1.72269187 2.76923063-3.87692344 2.76923062-6.46153782 0-2.58461531-0.86192344-5.35384594-2.58461531-8.30769281z m85.47692344 94.70769281h27.69230719v24.36923063c0 1.60038469-0.27692344 2.61576937-0.83076938 3.04615406-0.55384594 0.43038469-1.50807656 0.64615406-2.86153781 0.64615313h-19.56923156c-1.72269187 0-2.89269188-0.27692344-3.50769188-0.83076844-0.615-0.55384594-0.92307656-1.50807656-0.92307656-2.86153875v-24.36923063z m27.69230719-44.49230812v25.84615406h-27.69230719v-25.84615406h27.69230719z m-114.46153875-16.43076938h28.98461625v13.66153875h-28.98461625v-13.66153875z m0 32.30769282h28.98461625v13.4769225h-28.98461625v-13.4769225z m0 32.12307656h28.98461625V379.84615406h-28.98461625v-13.29230812z m329.21192343 21.41538469c0-7.38461531-3.69230812-11.07692344-11.07692344-11.0769225h-131.63076843c-7.38461531 0-11.07692344 3.75346125-11.07692344 11.26153781 0 3.81576937 0.86192344 6.64615406 2.58461531 8.49230812 1.72269187 1.84615406 4.55423063 2.76923063 8.49230813 2.76923063h131.63076843c3.93807656 0 6.76961531-1.01538469 8.49230813-3.04615406 1.72269187-2.03076938 2.58461531-4.83115406 2.58461531-8.4z m11.44615406-127.75384594c0-3.56884594-0.86192344-6.33807656-2.58461531-8.30769281-1.72269187-1.96961531-4.55423063-2.95384594-8.49230812-2.95384594h-155.26153782c-3.93807656 0-6.73846125 0.98423063-8.4 2.95384594-1.66153875 1.96961531-2.49230813 4.73884594-2.49230812 8.30769281 0 3.32307656 0.83076938 6.09230812 2.49230812 8.30769187 1.66153875 2.21538469 4.46192344 3.32307656 8.4 3.3230775h155.26153782c3.93807656 0 6.76961531-1.10769187 8.49230812-3.3230775 1.72269187-2.21538469 2.58461531-4.98461531 2.58461531-8.30769187zM881.23076938 790.15384594h-73.84615407V864h-73.84615406v-73.84615406H290.46153875V864h-73.84615406v-73.84615406H142.76923062C102.035 790.03384594 69.04307656 757.04192344 68.92307656 716.30769188v-738.46153782c0.12-40.73423063 33.11192344-73.72615406 73.84615406-73.84615406h738.46153875c40.73423063 0.12 73.72615406 33.11192344 73.84615407 73.84615406V716.30769188c-0.12 40.73423063-33.11192344 73.72615406-73.84615407 73.84615406z m-1e-8-812.30769188H142.76923062V642.46153875h738.46153875v-664.61538469z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xingqiwu" unicode="&#59427;" d="M389.04615406 265.38461530999996c3.19961531 0 5.63076938-0.73846125 7.29230719-2.21538468 1.66153875-1.47692344 2.49230813-3.93807656 2.49230813-7.38461532 0-6.64615406-3.26192344-9.96923062-9.78461532-9.96923062H235.63076937c-6.52269187 0-9.78461531 3.32307656-9.78461531 9.96923062 0 3.44653875 0.83076938 5.90769188 2.49230719 7.38461532 1.66153875 1.47692344 4.09269187 2.21538469 7.29230813 2.21538468h69.41538468v13.29230813h-51.13846219c-3.19961531 0-5.63076938 0.70730812-7.29230718 2.12307656-1.66153875 1.41576937-2.49230813 3.78461531-2.49230813 7.10769188v0.36923156c-4.06153875-1.23115406-7.50807656-0.43038469-10.33846125 2.4-5.415 5.415-4.36961531 11.44615406 3.13846125 18.09230719a73.26 73.26 0 0 1 9.6 9.96923062c2.83038469 3.56884594 5.72307656 8.12307656 8.67692344 13.66153875a10.45846125 10.45846125 0 0 0 0.83076937 1.66153875 17.95384594 17.95384594 0 0 0 1.2 1.66153781c-5.53846125 0.49269187-9.41538469 2.21538469-11.63076937 5.16923157-2.21538469 2.95384594-3.32307656 7.44576938-3.32307656 13.4769225v36.73846125c0 6.64615406 1.32346125 11.385 3.96923062 14.21538468 2.64576937 2.83038469 7.29230812 4.24615406 13.93846125 4.24615407h102.09230813c6.64615406 0 11.32269188-1.41576937 14.03076843-4.24615407 2.70807656-2.83038469 4.06153875-7.56923062 4.06153875-14.21538468v-36.73846125c0-6.64615406-1.35346125-11.415-4.06153875-14.30769188-2.70807656-2.89269188-7.38461531-4.33846125-14.03076843-4.33846219h-36.55384688c0.49269187-1.10769187 0.73846125-2.76923063 0.73846219-4.98461531v-4.61538469h54.2769225c6.52269187 0 9.78461531-3.19961531 9.78461531-9.6 0-6.40038469-3.26192344-9.6-9.78461531-9.6H326.46153875v-10.15384593h49.10769188c3.19961531 0 5.63076938-0.615 7.29230812-1.84615407 1.66153875-1.23115406 2.49230813-3.56884594 2.49230719-7.01538468 0-3.32307656-0.83076938-5.69192344-2.49230719-7.10769188-1.66153875-1.41576937-4.09269187-2.12307656-7.29230812-2.12307656H326.46153875v-13.29230813h62.58461531zM359.69230813 387.6c0 2.09192344-1.10769187 3.13846125-3.3230775 3.13846125h-90.46153875c-0.98423063 0-1.72269187-0.21576937-2.21538375-0.64615313-0.49269187-0.43038469-0.73846125-1.32346125-0.73846219-2.67692343v-6.46153875H359.69230813v6.64615406z m0-23.81538469h-96.73846219v-6.09230719c0-1.47692344 0.24576938-2.43115406 0.73846219-2.86153875 0.49269187-0.43038469 1.41576937-0.64615406 2.76923062-0.64615406h89.72307656c1.35346125 0 2.27653875 0.21576937 2.76923063 0.64615406 0.49269187 0.43038469 0.73846125 1.38461531 0.73846219 2.86153875v6.09230719z m-96.36923157-56.86153875c-1.23115406-1.47692344-2.43115406-3.19961531-3.6-5.16923062-1.16884594-1.96961531-2.36884594-3.63115406-3.6-4.98461532h48.9230775v10.15384594h-41.7230775z m41.7230775 23.81538469c0 2.21538469 0.24576938 3.87692344 0.73846125 4.98461531h-30.83076937c1.96961531-2.21538469 2.15423062-5.415 0.55384594-9.6h29.53846218v4.61538469z m153.08884594-62.4c-2.09192344-3.56884594-4.58423063-7.32346125-7.47692344-11.26153781a192.67615406 192.67615406 0 0 0-8.58461531-10.89230813c-2.70807656-3.07730813-5.50730813-4.61538469-8.4-4.61538469-2.89269188 0-5.44615406 1.23115406-7.66153781 3.69230813-2.09192344 2.33884594-3.10730812 4.70769188-3.04615407 7.10769187 0.06115406 2.4 1.44576938 5.07692344 4.15384594 8.03076938 3.32307656 3.69230812 6.06115406 7.01538469 8.21538469 9.96923062 2.15423062 2.95384594 3.90807656 5.59961531 5.26153875 7.93846125 1.23115406 1.96961531 2.46115406 3.56884594 3.69230719 4.8h-13.10769188c-3.32307656 0-5.69192344 0.79961531-7.10769281 2.4-1.41576937 1.60038469-2.12307656 3.93807656-2.12307656 7.01538469 0 3.56884594 0.64615406 6.06115406 1.93846125 7.47692344 1.29230813 1.41576937 3.72346125 2.12307656 7.29230812 2.12307656h6.46153781V379.84615406h-4.43076843c-3.56884594 0-6 0.70730812-7.29230813 2.12307657s-1.93846125 3.84576937-1.93846125 7.29230812c0 3.56884594 0.64615406 6.03115406 1.93846125 7.38461531 1.29230813 1.35346125 3.72346125 2.03076938 7.29230813 2.03076938h4.43076843V409.38461531c0 3.32307656 0.95423062 5.69192344 2.86153875 7.10769281 1.90730812 1.41576937 4.15384594 2.12307656 6.73846125 2.12307657 3.07730813 0 5.44615406-0.70730812 7.10769282-2.12307657 1.66153875-1.41576937 2.49230813-3.78461531 2.49230718-7.10769281v-10.70769187h28.98461625v10.52307656c0 3.32307656 0.89192344 5.69192344 2.67692251 7.10769187 1.785 1.41576937 4.03038469 2.12307656 6.73846125 2.1230775 2.83038469 0 5.20038469-0.70730812 7.10769281-2.1230775 1.90730812-1.41576937 2.86153875-3.78461531 2.86153875-7.10769187v-10.52307656h4.43076844c3.56884594 0 6-0.67730813 7.29230812-2.03076938s1.93846125-3.81576937 1.93846125-7.38461531c0-3.19961531-0.615-5.56961531-1.84615312-7.10769281-1.23115406-1.53807656-3.69230812-2.30769188-7.38461625-2.30769188h-4.43076844v-77.7230775h6.09230718c3.56884594 0 6-0.73846125 7.29230813-2.21538468 1.29230813-1.47692344 1.93846125-3.87692344 1.93846125-7.2 0-2.95384594-0.76961531-5.29269188-2.30769188-7.01538375-1.53807656-1.72269187-3.90807656-2.58461531-7.10769281-2.58461625h-15.50769187c0.98423063-0.73846125 1.84615406-1.60038469 2.58461531-2.58461532a347.55 347.55 0 0 0 4.33846125-6 132.09 132.09 0 0 0 3.23076937-4.8c0.98423063-1.53807656 1.93846125-3.10730812 2.86153876-4.70769187s1.93846125-3.44653875 3.04615312-5.53846125c0.615-1.10769187 1.10769187-2.33884594 1.47692344-3.69230813l0.36923062 0.73846125c0.12346125 0.24576938 0.30807656 0.55384594 0.55384594 0.9230775a57.77884594 57.77884594 0 0 1 5.26153875 12c1.29230813 4.185 2.27653875 8.985 2.95384594 14.4 0.67730813 5.415 1.13884594 11.75423062 1.38461531 19.01538469 0.24576938 7.26115406 0.36923062 15.93807656 0.36923063 26.03076937V392.76923063c0 6.03115406 1.10769187 10.46192344 3.3230775 13.29230812 2.21538469 2.83038469 6.46153875 4.24615406 12.73846124 4.24615313h33.96923063c6.27692344 0 10.61538469-1.41576937 13.01538469-4.24615313 2.4-2.83038469 3.6-7.26115406 3.6-13.29230812v-129.78461532c0-7.87730812-1.47692344-13.23115406-4.43076938-16.06153875-2.95384594-2.83038469-7.26115406-4.24615406-12.92307656-4.24615312-2.09192344 0-4.36961531 0.15346125-6.83076938 0.46153781s-5.72307656 1.07653875-9.78461531 2.30769281c-3.56884594 0.98423063-5.84653875 2.55346125-6.83076937 4.70769188-0.98423063 2.15423062-0.86192344 4.89230812 0.36923062 8.21538469 0.98423063 2.46115406 2.4 4.03038469 4.24615406 4.70769281 1.84615406 0.67730813 4.43076938 0.46153875 7.75384594-0.64615406 3.44653875-1.10769187 5.81538469-1.53807656 7.10769281-1.29230813 1.29230813 0.24576938 1.93846125 1.41576937 1.93846125 3.50769281v35.44615407h-28.24615406c-0.615-11.56961531-1.72269187-21.41538469-3.32307656-29.53846219-1.60038469-8.12307656-4.12269188-15.32307656-7.56923063-21.6-2.09192344-3.93807656-4.58423063-6.36923063-7.47692343-7.29230719-2.89269188-0.92307656-5.81538469-0.585-8.76923063 1.01538469-2.46115406 1.35346125-3.93807656 3.13846125-4.43076937 5.35384594-0.24576938-0.36923062-0.585-0.73846125-1.01538469-1.10769282-0.43038469-0.36923062-0.89192344-0.79961531-1.38461531-1.29230718-2.83038469-2.21538469-5.44615406-3.16961531-7.84615407-2.86153875-2.4 0.30807656-4.76884594 2.61576937-7.10769187 6.9230775-2.33884594 4.185-4.46192344 7.75384594-6.36923063 10.70769187a186.00576937 186.00576937 0 0 1-5.81538468 8.49230813c-2.46115406 3.07730813-3.56884594 5.75423062-3.32307657 8.03076843 0.24576938 2.27653875 1.35346125 4.33846125 3.32307657 6.18461532h-24c1.84615406-1.72269187 2.76923063-3.87692344 2.76923062-6.46153782 0-2.58461531-0.86192344-5.35384594-2.58461531-8.30769281z m85.47692344 94.70769281h27.69230719v24.36923063c0 1.60038469-0.27692344 2.61576937-0.83076938 3.04615406-0.55384594 0.43038469-1.50807656 0.64615406-2.86153781 0.64615313h-19.56923156c-1.72269187 0-2.89269188-0.27692344-3.50769188-0.83076844-0.615-0.55384594-0.92307656-1.50807656-0.92307656-2.86153875v-24.36923063z m27.69230719-44.49230812v25.84615406h-27.69230719v-25.84615406h27.69230719z m-114.46153875-16.43076938h28.98461625v13.66153875h-28.98461625v-13.66153875z m0 32.30769282h28.98461625v13.4769225h-28.98461625v-13.4769225z m0 32.12307656h28.98461625V379.84615406h-28.98461625v-13.29230812z m180.59653875 17.7230775c-4.30730813 0-7.10769188 0.73846125-8.4 2.21538469-1.29230813 1.47692344-1.93846125 4.30730813-1.93846125 8.49230718 0 3.69230812 0.64615406 6.43038469 1.93846125 8.21538469 1.29230813 1.785 4.09269187 2.67692344 8.4 2.67692344h142.15384593c3.93807656 0 6.64615406-0.89192344 8.1230775-2.67692344 1.47692344-1.785 2.21538469-4.52307656 2.21538469-8.21538469 0-4.185-0.73846125-7.01538469-2.21538469-8.49230718-1.47692344-1.47692344-4.185-2.21538469-8.1230775-2.21538469h-68.12307656l-4.98461531-31.75384688h42.27692344c4.43076938 0 8.15423063-0.36923062 11.16923062-1.10769187 3.015-0.73846125 5.415-1.99961531 7.2-3.78461531 1.785-1.785 3.04615406-4.215 3.78461531-7.29230813 0.73846125-3.07730813 1.10769187-6.89192344 1.10769188-11.44615312v-58.5230775h16.24615406c3.93807656 0 6.64615406-0.92307656 8.12307656-2.76923063 1.47692344-1.84615406 2.21538469-4.67653875 2.21538469-8.49230812 0-4.43076938-0.73846125-7.32346125-2.21538469-8.6769225-1.47692344-1.35346125-4.185-2.03076938-8.12307656-2.03076938h-158.95384594c-3.93807656 0-6.64615406 0.67730813-8.1230775 2.03076938-1.47692344 1.35346125-2.21538469 4.24615406-2.21538468 8.6769225 0 3.81576937 0.73846125 6.64615406 2.21538468 8.49230812 1.47692344 1.84615406 4.185 2.76923063 8.1230775 2.76923063h41.53846125l9.41538469 59.81538468h-36.55384594c-3.93807656 0-6.64615406 0.95423062-8.1230775 2.86153875-1.47692344 1.90730812-2.21538469 4.58423063-2.21538468 8.03076938 0 3.19961531 0.73846125 5.90769188 2.21538468 8.12307656 1.47692344 2.21538469 4.185 3.32307656 8.1230775 3.32307656h40.06153782l4.98461625 31.75384688h-51.3230775z m65.53846125-54.09230813l-9.41538375-59.81538468h55.75384593v55.38461531c0 2.09192344-0.24576938 3.35423063-0.73846218 3.78461531-0.49269187 0.43038469-1.785 0.64615406-3.8769225 0.64615406h-41.7230775zM881.23076938 790.15384594h-73.84615407V864h-73.84615406v-73.84615406H290.46153875V864h-73.84615406v-73.84615406H142.76923062C102.035 790.03384594 69.04307656 757.04192344 68.92307656 716.30769188v-738.46153782c0.12-40.73423063 33.11192344-73.72615406 73.84615406-73.84615406h738.46153875c40.73423063 0.12 73.72615406 33.11192344 73.84615407 73.84615406V716.30769188c-0.12 40.73423063-33.11192344 73.72615406-73.84615407 73.84615406z m-1e-8-812.30769188H142.76923062V642.46153875h738.46153875v-664.61538469z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xingqisan" unicode="&#59428;" d="M389.04615406 265.38461530999996c3.19961531 0 5.63076938-0.73846125 7.29230719-2.21538468 1.66153875-1.47692344 2.49230813-3.93807656 2.49230813-7.38461532 0-6.64615406-3.26192344-9.96923062-9.78461532-9.96923062H235.63076937c-6.52269187 0-9.78461531 3.32307656-9.78461531 9.96923062 0 3.44653875 0.83076938 5.90769188 2.49230719 7.38461532 1.66153875 1.47692344 4.09269187 2.21538469 7.29230813 2.21538468h69.41538468v13.29230813h-51.13846219c-3.19961531 0-5.63076938 0.70730812-7.29230718 2.12307656-1.66153875 1.41576937-2.49230813 3.78461531-2.49230813 7.10769188v0.36923156c-4.06153875-1.23115406-7.50807656-0.43038469-10.33846125 2.4-5.415 5.415-4.36961531 11.44615406 3.13846125 18.09230719a73.26 73.26 0 0 1 9.6 9.96923062c2.83038469 3.56884594 5.72307656 8.12307656 8.67692344 13.66153875a10.45846125 10.45846125 0 0 0 0.83076937 1.66153875 17.95384594 17.95384594 0 0 0 1.2 1.66153781c-5.53846125 0.49269187-9.41538469 2.21538469-11.63076937 5.16923157-2.21538469 2.95384594-3.32307656 7.44576938-3.32307656 13.4769225v36.73846125c0 6.64615406 1.32346125 11.385 3.96923062 14.21538468 2.64576937 2.83038469 7.29230812 4.24615406 13.93846125 4.24615407h102.09230813c6.64615406 0 11.32269188-1.41576937 14.03076843-4.24615407 2.70807656-2.83038469 4.06153875-7.56923062 4.06153875-14.21538468v-36.73846125c0-6.64615406-1.35346125-11.415-4.06153875-14.30769188-2.70807656-2.89269188-7.38461531-4.33846125-14.03076843-4.33846219h-36.55384688c0.49269187-1.10769187 0.73846125-2.76923063 0.73846219-4.98461531v-4.61538469h54.2769225c6.52269187 0 9.78461531-3.19961531 9.78461531-9.6 0-6.40038469-3.26192344-9.6-9.78461531-9.6H326.46153875v-10.15384593h49.10769188c3.19961531 0 5.63076938-0.615 7.29230812-1.84615407 1.66153875-1.23115406 2.49230813-3.56884594 2.49230719-7.01538468 0-3.32307656-0.83076938-5.69192344-2.49230719-7.10769188-1.66153875-1.41576937-4.09269187-2.12307656-7.29230812-2.12307656H326.46153875v-13.29230813h62.58461531zM359.69230813 387.6c0 2.09192344-1.10769187 3.13846125-3.3230775 3.13846125h-90.46153875c-0.98423063 0-1.72269187-0.21576937-2.21538375-0.64615313-0.49269187-0.43038469-0.73846125-1.32346125-0.73846219-2.67692343v-6.46153875H359.69230813v6.64615406z m0-23.81538469h-96.73846219v-6.09230719c0-1.47692344 0.24576938-2.43115406 0.73846219-2.86153875 0.49269187-0.43038469 1.41576937-0.64615406 2.76923062-0.64615406h89.72307656c1.35346125 0 2.27653875 0.21576937 2.76923063 0.64615406 0.49269187 0.43038469 0.73846125 1.38461531 0.73846219 2.86153875v6.09230719z m-96.36923157-56.86153875c-1.23115406-1.47692344-2.43115406-3.19961531-3.6-5.16923062-1.16884594-1.96961531-2.36884594-3.63115406-3.6-4.98461532h48.9230775v10.15384594h-41.7230775z m41.7230775 23.81538469c0 2.21538469 0.24576938 3.87692344 0.73846125 4.98461531h-30.83076937c1.96961531-2.21538469 2.15423062-5.415 0.55384594-9.6h29.53846218v4.61538469z m153.08884594-62.4c-2.09192344-3.56884594-4.58423063-7.32346125-7.47692344-11.26153781a192.67615406 192.67615406 0 0 0-8.58461531-10.89230813c-2.70807656-3.07730813-5.50730813-4.61538469-8.4-4.61538469-2.89269188 0-5.44615406 1.23115406-7.66153781 3.69230813-2.09192344 2.33884594-3.10730812 4.70769188-3.04615407 7.10769187 0.06115406 2.4 1.44576938 5.07692344 4.15384594 8.03076938 3.32307656 3.69230812 6.06115406 7.01538469 8.21538469 9.96923062 2.15423062 2.95384594 3.90807656 5.59961531 5.26153875 7.93846125 1.23115406 1.96961531 2.46115406 3.56884594 3.69230719 4.8h-13.10769188c-3.32307656 0-5.69192344 0.79961531-7.10769281 2.4-1.41576937 1.60038469-2.12307656 3.93807656-2.12307656 7.01538469 0 3.56884594 0.64615406 6.06115406 1.93846125 7.47692344 1.29230813 1.41576937 3.72346125 2.12307656 7.29230812 2.12307656h6.46153781V379.84615406h-4.43076843c-3.56884594 0-6 0.70730812-7.29230813 2.12307657s-1.93846125 3.84576937-1.93846125 7.29230812c0 3.56884594 0.64615406 6.03115406 1.93846125 7.38461531 1.29230813 1.35346125 3.72346125 2.03076938 7.29230813 2.03076938h4.43076843V409.38461531c0 3.32307656 0.95423062 5.69192344 2.86153875 7.10769281 1.90730812 1.41576937 4.15384594 2.12307656 6.73846125 2.12307657 3.07730813 0 5.44615406-0.70730812 7.10769282-2.12307657 1.66153875-1.41576937 2.49230813-3.78461531 2.49230718-7.10769281v-10.70769187h28.98461625v10.52307656c0 3.32307656 0.89192344 5.69192344 2.67692251 7.10769187 1.785 1.41576937 4.03038469 2.12307656 6.73846125 2.1230775 2.83038469 0 5.20038469-0.70730812 7.10769281-2.1230775 1.90730812-1.41576937 2.86153875-3.78461531 2.86153875-7.10769187v-10.52307656h4.43076844c3.56884594 0 6-0.67730813 7.29230812-2.03076938s1.93846125-3.81576937 1.93846125-7.38461531c0-3.19961531-0.615-5.56961531-1.84615312-7.10769281-1.23115406-1.53807656-3.69230812-2.30769188-7.38461625-2.30769188h-4.43076844v-77.7230775h6.09230718c3.56884594 0 6-0.73846125 7.29230813-2.21538468 1.29230813-1.47692344 1.93846125-3.87692344 1.93846125-7.2 0-2.95384594-0.76961531-5.29269188-2.30769188-7.01538375-1.53807656-1.72269187-3.90807656-2.58461531-7.10769281-2.58461625h-15.50769187c0.98423063-0.73846125 1.84615406-1.60038469 2.58461531-2.58461532a347.55 347.55 0 0 0 4.33846125-6 132.09 132.09 0 0 0 3.23076937-4.8c0.98423063-1.53807656 1.93846125-3.10730812 2.86153876-4.70769187s1.93846125-3.44653875 3.04615312-5.53846125c0.615-1.10769187 1.10769187-2.33884594 1.47692344-3.69230813l0.36923062 0.73846125c0.12346125 0.24576938 0.30807656 0.55384594 0.55384594 0.9230775a57.77884594 57.77884594 0 0 1 5.26153875 12c1.29230813 4.185 2.27653875 8.985 2.95384594 14.4 0.67730813 5.415 1.13884594 11.75423062 1.38461531 19.01538469 0.24576938 7.26115406 0.36923062 15.93807656 0.36923063 26.03076937V392.76923063c0 6.03115406 1.10769187 10.46192344 3.3230775 13.29230812 2.21538469 2.83038469 6.46153875 4.24615406 12.73846124 4.24615313h33.96923063c6.27692344 0 10.61538469-1.41576937 13.01538469-4.24615313 2.4-2.83038469 3.6-7.26115406 3.6-13.29230812v-129.78461532c0-7.87730812-1.47692344-13.23115406-4.43076938-16.06153875-2.95384594-2.83038469-7.26115406-4.24615406-12.92307656-4.24615312-2.09192344 0-4.36961531 0.15346125-6.83076938 0.46153781s-5.72307656 1.07653875-9.78461531 2.30769281c-3.56884594 0.98423063-5.84653875 2.55346125-6.83076937 4.70769188-0.98423063 2.15423062-0.86192344 4.89230812 0.36923062 8.21538469 0.98423063 2.46115406 2.4 4.03038469 4.24615406 4.70769281 1.84615406 0.67730813 4.43076938 0.46153875 7.75384594-0.64615406 3.44653875-1.10769187 5.81538469-1.53807656 7.10769281-1.29230813 1.29230813 0.24576938 1.93846125 1.41576937 1.93846125 3.50769281v35.44615407h-28.24615406c-0.615-11.56961531-1.72269187-21.41538469-3.32307656-29.53846219-1.60038469-8.12307656-4.12269188-15.32307656-7.56923063-21.6-2.09192344-3.93807656-4.58423063-6.36923063-7.47692343-7.29230719-2.89269188-0.92307656-5.81538469-0.585-8.76923063 1.01538469-2.46115406 1.35346125-3.93807656 3.13846125-4.43076937 5.35384594-0.24576938-0.36923062-0.585-0.73846125-1.01538469-1.10769282-0.43038469-0.36923062-0.89192344-0.79961531-1.38461531-1.29230718-2.83038469-2.21538469-5.44615406-3.16961531-7.84615407-2.86153875-2.4 0.30807656-4.76884594 2.61576937-7.10769187 6.9230775-2.33884594 4.185-4.46192344 7.75384594-6.36923063 10.70769187a186.00576937 186.00576937 0 0 1-5.81538468 8.49230813c-2.46115406 3.07730813-3.56884594 5.75423062-3.32307657 8.03076843 0.24576938 2.27653875 1.35346125 4.33846125 3.32307657 6.18461532h-24c1.84615406-1.72269187 2.76923063-3.87692344 2.76923062-6.46153782 0-2.58461531-0.86192344-5.35384594-2.58461531-8.30769281z m85.47692344 94.70769281h27.69230719v24.36923063c0 1.60038469-0.27692344 2.61576937-0.83076938 3.04615406-0.55384594 0.43038469-1.50807656 0.64615406-2.86153781 0.64615313h-19.56923156c-1.72269187 0-2.89269188-0.27692344-3.50769188-0.83076844-0.615-0.55384594-0.92307656-1.50807656-0.92307656-2.86153875v-24.36923063z m27.69230719-44.49230812v25.84615406h-27.69230719v-25.84615406h27.69230719z m-114.46153875-16.43076938h28.98461625v13.66153875h-28.98461625v-13.66153875z m0 32.30769282h28.98461625v13.4769225h-28.98461625v-13.4769225z m0 32.12307656h28.98461625V379.84615406h-28.98461625v-13.29230812z m330.31961624 24.73846219c0-3.56884594-0.73846125-6.30807656-2.21538468-8.21538469-1.47692344-1.90730812-4.43076938-2.86153875-8.86153875-2.86153875h-134.95384594c-4.43076938 0-7.38461531 0.95423062-8.86153875 2.86153875-1.47692344 1.90730812-2.21538469 4.58423063-2.21538469 8.03076844 0 4.55423063 0.73846125 7.56923062 2.21538469 9.04615406 1.47692344 1.47692344 4.43076938 2.21538469 8.86153875 2.21538469h134.95384594c4.43076938 0 7.38461531-0.95423062 8.86153875-2.86153875 1.47692344-1.90730812 2.21538469-4.64653875 2.21538468-8.21538375z m-4.98461625-63.13846219c0-3.56884594-0.73846125-6.30807656-2.21538375-8.21538469-1.47692344-1.90730812-4.43076938-2.86153875-8.86153875-2.86153781h-123.13846125c-4.43076938 0-7.38461531 1.01538469-8.86153875 3.04615312-1.47692344 2.03076938-2.21538469 4.70769188-2.21538468 8.03076938 0 3.56884594 0.73846125 6.30807656 2.21538468 8.21538468 1.47692344 1.90730812 4.43076938 2.86153875 8.86153875 2.86153875h123.13846125c4.43076938 0 7.38461531-0.95423062 8.86153875-2.86153875 1.47692344-1.90730812 2.21538469-4.64653875 2.21538375-8.21538468z m14.95384688-68.49230719c0-3.56884594-0.73846125-6.30807656-2.21538469-8.21538469-1.47692344-1.90730812-4.43076938-2.86153875-8.86153875-2.86153875h-154.89230719c-4.43076938 0-7.38461531 1.01538469-8.86153875 3.04615407-1.47692344 2.03076938-2.21538469 4.70769188-2.21538468 8.03076937 0 3.56884594 0.73846125 6.30807656 2.21538468 8.21538469 1.47692344 1.90730812 4.43076938 2.86153875 8.86153875 2.86153781h154.89230719c4.43076938 0 7.38461531-0.95423062 8.86153875-2.86153781 1.47692344-1.90730812 2.21538469-4.64653875 2.21538469-8.21538469zM881.23076938 790.15384594h-73.84615407V864h-73.84615406v-73.84615406H290.46153875V864h-73.84615406v-73.84615406H142.76923062C102.035 790.03384594 69.04307656 757.04192344 68.92307656 716.30769188v-738.46153782c0.12-40.73423063 33.11192344-73.72615406 73.84615406-73.84615406h738.46153875c40.73423063 0.12 73.72615406 33.11192344 73.84615407 73.84615406V716.30769188c-0.12 40.73423063-33.11192344 73.72615406-73.84615407 73.84615406z m-1e-8-812.30769188H142.76923062V642.46153875h738.46153875v-664.61538469z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xingqiliu" unicode="&#59429;" d="M391.35384594 265.38461530999996c3.19961531 0 5.63076938-0.73846125 7.29230812-2.21538468 1.66153875-1.47692344 2.49230813-3.93807656 2.49230719-7.38461532 0-6.64615406-3.26192344-9.96923062-9.78461531-9.96923062H237.93846125c-6.52269187 0-9.78461531 3.32307656-9.78461531 9.96923062 0 3.44653875 0.83076938 5.90769188 2.49230812 7.38461532 1.66153875 1.47692344 4.09269187 2.21538469 7.29230719 2.21538468h69.41538469v13.29230813h-51.13846125c-3.19961531 0-5.63076938 0.70730812-7.29230813 2.12307656-1.66153875 1.41576937-2.49230813 3.78461531-2.49230719 7.10769188v0.36923156c-4.06153875-1.23115406-7.50807656-0.43038469-10.33846125 2.4-5.415 5.415-4.36961531 11.44615406 3.13846125 18.09230719a73.26 73.26 0 0 1 9.6 9.96923062c2.83038469 3.56884594 5.72307656 8.12307656 8.6769225 13.66153875a10.45846125 10.45846125 0 0 0 0.83076938 1.66153875 17.95384594 17.95384594 0 0 0 1.2 1.66153781c-5.53846125 0.49269187-9.41538469 2.21538469-11.63076938 5.16923157-2.21538469 2.95384594-3.32307656 7.44576938-3.32307656 13.4769225v36.73846125c0 6.64615406 1.32346125 11.385 3.96923063 14.21538468 2.64576937 2.83038469 7.29230812 4.24615406 13.93846218 4.24615407h102.09230719c6.64615406 0 11.32269188-1.41576937 14.03076938-4.24615407 2.70807656-2.83038469 4.06153875-7.56923062 4.06153875-14.21538468v-36.73846125c0-6.64615406-1.35346125-11.415-4.06153875-14.30769188-2.70807656-2.89269188-7.38461531-4.33846125-14.03076938-4.33846219h-36.55384594c0.49269187-1.10769187 0.73846125-2.76923063 0.73846125-4.98461531v-4.61538469h54.27692344c6.52269187 0 9.78461531-3.19961531 9.78461531-9.6 0-6.40038469-3.26192344-9.6-9.78461531-9.6H328.76923063v-10.15384593h49.10769281c3.19961531 0 5.63076938-0.615 7.29230718-1.84615407 1.66153875-1.23115406 2.49230813-3.56884594 2.49230813-7.01538468 0-3.32307656-0.83076938-5.69192344-2.49230813-7.10769188-1.66153875-1.41576937-4.09269187-2.12307656-7.29230718-2.12307656H328.76923063v-13.29230813h62.58461531zM362 387.6c0 2.09192344-1.10769187 3.13846125-3.32307656 3.13846125h-90.46153875c-0.98423063 0-1.72269187-0.21576937-2.21538469-0.64615313-0.49269187-0.43038469-0.73846125-1.32346125-0.73846125-2.67692343v-6.46153875H362v6.64615406z m0-23.81538469h-96.73846125v-6.09230719c0-1.47692344 0.24576938-2.43115406 0.73846125-2.86153875 0.49269187-0.43038469 1.41576937-0.64615406 2.76923063-0.64615406h89.72307749c1.35346125 0 2.27653875 0.21576937 2.76923063 0.64615406 0.49269187 0.43038469 0.73846125 1.38461531 0.73846125 2.86153875v6.09230719z m-96.36923063-56.86153875c-1.23115406-1.47692344-2.43115406-3.19961531-3.59999999-5.16923062-1.16884594-1.96961531-2.36884594-3.63115406-3.6-4.98461532h48.92307656v10.15384594h-41.72307656z m41.72307657 23.81538469c0 2.21538469 0.24576938 3.87692344 0.73846218 4.98461531h-30.83076937c1.96961531-2.21538469 2.15423062-5.415 0.55384594-9.6h29.53846125v4.61538469z m153.08884593-62.4c-2.09192344-3.56884594-4.58423063-7.32346125-7.47692249-11.26153781a192.67615406 192.67615406 0 0 0-8.58461532-10.89230813c-2.70807656-3.07730813-5.50730813-4.61538469-8.4-4.61538469-2.89269188 0-5.44615406 1.23115406-7.66153875 3.69230813-2.09192344 2.33884594-3.10730812 4.70769188-3.04615406 7.10769187 0.06115406 2.4 1.44576938 5.07692344 4.15384688 8.03076938 3.32307656 3.69230812 6.06115406 7.01538469 8.21538375 9.96923062 2.15423062 2.95384594 3.90807656 5.59961531 5.26153875 7.93846125 1.23115406 1.96961531 2.46115406 3.56884594 3.69230812 4.8h-13.10769281c-3.32307656 0-5.69192344 0.79961531-7.10769188 2.4-1.41576937 1.60038469-2.12307656 3.93807656-2.1230775 7.01538469 0 3.56884594 0.64615406 6.06115406 1.93846219 7.47692344 1.29230813 1.41576937 3.72346125 2.12307656 7.29230719 2.12307656h6.46153875V379.84615406h-4.43076938c-3.56884594 0-6 0.70730812-7.29230718 2.12307657s-1.93846125 3.84576937-1.93846219 7.29230812c0 3.56884594 0.64615406 6.03115406 1.93846219 7.38461531 1.29230813 1.35346125 3.72346125 2.03076938 7.29230718 2.03076938h4.43076938V409.38461531c0 3.32307656 0.95423062 5.69192344 2.86153875 7.10769281 1.90730812 1.41576937 4.15384594 2.12307656 6.73846125 2.12307657 3.07730813 0 5.44615406-0.70730812 7.10769187-2.12307657 1.66153875-1.41576937 2.49230813-3.78461531 2.49230813-7.10769281v-10.70769187h28.98461531v10.52307656c0 3.32307656 0.89192344 5.69192344 2.67692344 7.10769187 1.785 1.41576937 4.03038469 2.12307656 6.73846125 2.1230775 2.83038469 0 5.20038469-0.70730812 7.10769187-2.1230775 1.90730812-1.41576937 2.86153875-3.78461531 2.86153875-7.10769187v-10.52307656h4.43076938c3.56884594 0 6-0.67730813 7.29230719-2.03076938s1.93846125-3.81576937 1.93846218-7.38461531c0-3.19961531-0.615-5.56961531-1.84615406-7.10769281-1.23115406-1.53807656-3.69230812-2.30769188-7.38461531-2.30769188h-4.43076938v-77.7230775h6.09230813c3.56884594 0 6-0.73846125 7.29230719-2.21538468 1.29230813-1.47692344 1.93846125-3.87692344 1.93846125-7.2 0-2.95384594-0.76961531-5.29269188-2.30769188-7.01538375-1.53807656-1.72269187-3.90807656-2.58461531-7.10769187-2.58461625h-15.50769282c0.98423063-0.73846125 1.84615406-1.60038469 2.58461532-2.58461532a347.55 347.55 0 0 0 4.33846125-6 132.09 132.09 0 0 0 3.23076937-4.8c0.98423063-1.53807656 1.93846125-3.10730812 2.86153875-4.70769187s1.93846125-3.44653875 3.04615406-5.53846125c0.615-1.10769187 1.10769187-2.33884594 1.4769225-3.69230813l0.36923157 0.73846125c0.12346125 0.24576938 0.30807656 0.55384594 0.55384593 0.9230775a57.77884594 57.77884594 0 0 1 5.26153782 12c1.29230813 4.185 2.27653875 8.985 2.95384687 14.4 0.67730813 5.415 1.13884594 11.75423062 1.38461531 19.01538469 0.24576938 7.26115406 0.36923062 15.93807656 0.36923063 26.03076937V392.76923063c0 6.03115406 1.10769187 10.46192344 3.32307656 13.29230812 2.21538469 2.83038469 6.46153875 4.24615406 12.73846219 4.24615313h33.96923062c6.27692344 0 10.61538469-1.41576937 13.01538469-4.24615313 2.4-2.83038469 3.6-7.26115406 3.6-13.29230812v-129.78461532c0-7.87730812-1.47692344-13.23115406-4.43076937-16.06153875-2.95384594-2.83038469-7.26115406-4.24615406-12.9230775-4.24615312-2.09192344 0-4.36961531 0.15346125-6.83076844 0.46153781s-5.72307656 1.07653875-9.78461531 2.30769281c-3.56884594 0.98423063-5.84653875 2.55346125-6.83076938 4.70769188-0.98423063 2.15423062-0.86192344 4.89230812 0.36923063 8.21538469 0.98423063 2.46115406 2.4 4.03038469 4.24615406 4.70769281 1.84615406 0.67730813 4.43076938 0.46153875 7.75384594-0.64615406 3.44653875-1.10769187 5.81538469-1.53807656 7.10769187-1.29230813 1.29230813 0.24576938 1.93846125 1.41576937 1.93846219 3.50769281v35.44615407h-28.24615406c-0.615-11.56961531-1.72269187-21.41538469-3.3230775-29.53846219-1.60038469-8.12307656-4.12269188-15.32307656-7.56923063-21.6-2.09192344-3.93807656-4.58423063-6.36923063-7.4769225-7.29230719-2.89269188-0.92307656-5.81538469-0.585-8.76923062 1.01538469-2.46115406 1.35346125-3.93807656 3.13846125-4.43076938 5.35384594-0.24576938-0.36923062-0.585-0.73846125-1.01538469-1.10769282-0.43038469-0.36923062-0.89192344-0.79961531-1.38461531-1.29230718-2.83038469-2.21538469-5.44615406-3.16961531-7.84615406-2.86153875-2.4 0.30807656-4.76884594 2.61576937-7.10769281 6.9230775-2.33884594 4.185-4.46192344 7.75384594-6.36923063 10.70769187a186.00576937 186.00576937 0 0 1-5.81538469 8.49230813c-2.46115406 3.07730813-3.56884594 5.75423062-3.32307656 8.03076843 0.24576938 2.27653875 1.35346125 4.33846125 3.32307656 6.18461532h-24c1.84615406-1.72269187 2.76923063-3.87692344 2.76923157-6.46153782 0-2.58461531-0.86192344-5.35384594-2.58461625-8.30769281z m85.47692344 94.70769281h27.69230813v24.36923063c0 1.60038469-0.27692344 2.61576937-0.83076938 3.04615406-0.55384594 0.43038469-1.50807656 0.64615406-2.86153875 0.64615313h-19.56923062c-1.72269187 0-2.89269188-0.27692344-3.50769281-0.83076844-0.615-0.55384594-0.92307656-1.50807656-0.92307657-2.86153875v-24.36923063z m27.69230813-44.49230812v25.84615406h-27.69230813v-25.84615406h27.69230813z m-114.46153875-16.43076938h28.98461531v13.66153875h-28.98461531v-13.66153875z m0 32.30769282h28.98461531v13.4769225h-28.98461531v-13.4769225z m0 32.12307656h28.98461531V379.84615406h-28.98461531v-13.29230812z m335.67346125-4.61538469c0-2.83038469-0.89192344-5.35384594-2.6769225-7.56923062-1.785-2.21538469-4.52307656-3.32307656-8.21538469-3.32307657h-146.58461531c-3.93807656 0-6.70730812 1.10769187-8.30769281 3.32307657-1.60038469 2.21538469-2.4 4.73884594-2.4 7.56923062 0 3.19961531 0.79961531 5.78423062 2.4 7.75384688 1.60038469 1.96961531 4.36961531 2.95384594 8.30769281 2.95384593h72.73846125c-2.09192344 0.98423063-4.185 3.81576937-6.27692344 8.49230719a74.68846125 74.68846125 0 0 1-4.61538469 9.13846219c-1.72269187 2.89269188-3.81576937 6.18461531-6.2769225 9.8769225-2.09192344 3.19961531-2.58461531 6.43038469-1.47692343 9.69230812 1.10769187 3.26192344 3.32307656 5.69192344 6.64615406 7.29230719 2.95384594 0.98423063 5.59961531 1.07653875 7.93846125 0.27692344 2.33884594-0.79961531 4.92346125-3.23076937 7.75384594-7.29230813 1.72269187-2.58461531 3.47653875-5.53846125 5.26153875-8.86153781 1.785-3.32307656 3.41538469-6.64615406 4.89230812-9.96923062 2.46115406-5.90769188 3.10730812-10.215 1.93846125-12.9230775-1.16884594-2.70807656-3.66115406-4.61538469-7.47692344-5.72307657h65.53846219c3.69230812 0 6.43038469-0.98423063 8.21538469-2.95384593 1.785-1.96961531 2.67692344-4.55423063 2.6769225-7.75384688z m-4.98461531-98.58461531c1.72269187-3.19961531 2.46115406-6.18461531 2.21538468-8.95384594-0.24576938-2.76923063-2.15423062-5.26153875-5.72307656-7.47692344-2.83038469-1.72269187-5.72307656-2.15423062-8.67692344-1.29230719-2.95384594 0.86192344-5.35384594 3.26192344-7.2 7.2a2974.56807656 2974.56807656 0 0 1-10.24615406 20.30769188 861.41538469 861.41538469 0 0 1-9.78461531 18.64615406 790.50692344 790.50692344 0 0 1-9.8769225 17.72307656 550.51153875 550.51153875 0 0 1-10.5230775 17.53846219c-1.47692344 2.46115406-2.27653875 4.98461531-2.4 7.56923063-0.12346125 2.58461531 1.16884594 5.23038469 3.87692344 7.93846125 2.70807656 2.09192344 5.72307656 2.92269187 9.04615406 2.49230812 3.32307656-0.43038469 6.03115406-2.43115406 8.12307656-6 3.56884594-6.03115406 7.01538469-12 10.33846125-17.90769281 3.32307656-5.90769188 6.64615406-11.93884594 9.96923063-18.09230719 3.32307656-6.15346125 6.70730812-12.49269188 10.15384687-19.01538469 3.44653875-6.52269187 7.01538469-13.41576937 10.70769188-20.67692343zM690.33153875 326.30769187c-3.07730813-7.99961531-6.06115406-15.32307656-8.95384687-21.96923062-2.89269188-6.64615406-5.87653875-12.92307656-8.95384594-18.83076937a185.39307656 185.39307656 0 0 0-9.8769225-16.80000001 234.53653875 234.53653875 0 0 0-11.53846219-15.87692249c-3.56884594-4.43076938-6.98423063-6.89192344-10.24615313-7.38461532-3.26192344-0.49269187-6.06115406 0.36923062-8.4 2.58461532-2.46115406 2.33884594-3.63115406 5.01576937-3.50769281 8.03076937 0.12346125 3.015 1.785 6.49269188 4.98461531 10.43076938 3.69230812 4.43076938 7.13884594 9.04615406 10.33846125 13.84615312a201.91153875 201.91153875 0 0 1 9.23076938 15.3230775c2.95384594 5.415 5.75423062 11.23038469 8.4 17.44615312 2.64576937 6.21576937 5.26153875 13.01538469 7.84615406 20.4 1.47692344 4.06153875 3.41538469 7.01538469 5.81538469 8.86153876 2.4 1.84615406 5.20038469 2.33884594 8.4 1.47692343 3.81576937-0.86192344 6.30807656-2.83038469 7.47692344-5.90769281 1.16884594-3.07730813 0.83076938-6.95423063-1.01538469-11.63076937zM881.23076938 790.15384594h-73.84615407V864h-73.84615406v-73.84615406H290.46153875V864h-73.84615406v-73.84615406H142.76923062C102.035 790.03384594 69.04307656 757.04192344 68.92307656 716.30769188v-738.46153782c0.12-40.73423063 33.11192344-73.72615406 73.84615406-73.84615406h738.46153875c40.73423063 0.12 73.72615406 33.11192344 73.84615407 73.84615406V716.30769188c-0.12 40.73423063-33.11192344 73.72615406-73.84615407 73.84615406z m-1e-8-812.30769188H142.76923062V642.46153875h738.46153875v-664.61538469z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xingqiri" unicode="&#59430;" d="M400.58461531 265.38461530999996c3.19961531 0 5.63076938-0.73846125 7.29230813-2.21538468 1.66153875-1.47692344 2.49230813-3.93807656 2.49230719-7.38461532 0-6.64615406-3.26192344-9.96923062-9.78461532-9.96923062H247.16923063c-6.52269187 0-9.78461531 3.32307656-9.78461532 9.96923062 0 3.44653875 0.83076938 5.90769188 2.49230813 7.38461532 1.66153875 1.47692344 4.09269187 2.21538469 7.29230718 2.21538468h69.41538469v13.29230813h-51.13846125c-3.19961531 0-5.63076938 0.70730812-7.29230812 2.12307656-1.66153875 1.41576937-2.49230813 3.78461531-2.49230719 7.10769188v0.36923156c-4.06153875-1.23115406-7.50807656-0.43038469-10.33846219 2.4-5.415 5.415-4.36961531 11.44615406 3.13846219 18.09230719a73.26 73.26 0 0 1 9.6 9.96923062c2.83038469 3.56884594 5.72307656 8.12307656 8.6769225 13.66153875a10.45846125 10.45846125 0 0 0 0.83076938 1.66153875 17.95384594 17.95384594 0 0 0 1.2 1.66153781c-5.53846125 0.49269187-9.41538469 2.21538469-11.63076938 5.16923157-2.21538469 2.95384594-3.32307656 7.44576938-3.32307656 13.4769225v36.73846125c0 6.64615406 1.32346125 11.385 3.96923062 14.21538468 2.64576937 2.83038469 7.29230812 4.24615406 13.93846125 4.24615407h102.09230813c6.64615406 0 11.32269188-1.41576937 14.03076937-4.24615407 2.70807656-2.83038469 4.06153875-7.56923062 4.06153781-14.21538468v-36.73846125c0-6.64615406-1.35346125-11.415-4.06153781-14.30769188-2.70807656-2.89269188-7.38461531-4.33846125-14.03076937-4.33846219h-36.55384594c0.49269187-1.10769187 0.73846125-2.76923063 0.73846125-4.98461531v-4.61538469h54.27692344c6.52269187 0 9.78461531-3.19961531 9.78461531-9.6 0-6.40038469-3.26192344-9.6-9.78461531-9.6H338v-10.15384593h49.10769188c3.19961531 0 5.63076938-0.615 7.29230812-1.84615407 1.66153875-1.23115406 2.49230813-3.56884594 2.49230813-7.01538468 0-3.32307656-0.83076938-5.69192344-2.49230813-7.10769188-1.66153875-1.41576937-4.09269187-2.12307656-7.29230812-2.12307656H338v-13.29230813h62.58461531zM371.23076938 387.6c0 2.09192344-1.10769187 3.13846125-3.3230775 3.13846125h-90.46153782c-0.98423063 0-1.72269187-0.21576937-2.21538468-0.64615313-0.49269187-0.43038469-0.73846125-1.32346125-0.73846125-2.67692343v-6.46153875H371.23076938v6.64615406z m0-23.81538469h-96.73846125v-6.09230719c0-1.47692344 0.24576938-2.43115406 0.73846125-2.86153875 0.49269187-0.43038469 1.41576937-0.64615406 2.76923062-0.64615406h89.72307656c1.35346125 0 2.27653875 0.21576937 2.76923157 0.64615406 0.49269187 0.43038469 0.73846125 1.38461531 0.73846125 2.86153875v6.09230719z m-96.36923063-56.86153875c-1.23115406-1.47692344-2.43115406-3.19961531-3.6-5.16923062-1.16884594-1.96961531-2.36884594-3.63115406-3.6-4.98461532h48.92307656v10.15384594h-41.72307656z m41.72307656 23.81538469c0 2.21538469 0.24576938 3.87692344 0.73846125 4.98461531h-30.83076843c1.96961531-2.21538469 2.15423062-5.415 0.55384593-9.6h29.53846125v4.61538469z m153.08884594-62.4c-2.09192344-3.56884594-4.58423063-7.32346125-7.4769225-11.26153781a192.67615406 192.67615406 0 0 0-8.58461531-10.89230813c-2.70807656-3.07730813-5.50730813-4.61538469-8.4-4.61538469-2.89269188 0-5.44615406 1.23115406-7.66153875 3.69230813-2.09192344 2.33884594-3.10730812 4.70769188-3.04615406 7.10769187 0.06115406 2.4 1.44576938 5.07692344 4.15384593 8.03076938 3.32307656 3.69230812 6.06115406 7.01538469 8.21538469 9.96923062 2.15423062 2.95384594 3.90807656 5.59961531 5.26153875 7.93846125 1.23115406 1.96961531 2.46115406 3.56884594 3.69230813 4.8h-13.10769282c-3.32307656 0-5.69192344 0.79961531-7.10769187 2.4-1.41576937 1.60038469-2.12307656 3.93807656-2.1230775 7.01538469 0 3.56884594 0.64615406 6.06115406 1.93846219 7.47692344 1.29230813 1.41576937 3.72346125 2.12307656 7.29230718 2.12307656h6.46153875V379.84615406h-4.43076937c-3.56884594 0-6 0.70730812-7.29230813 2.12307657s-1.93846125 3.84576937-1.93846125 7.29230812c0 3.56884594 0.64615406 6.03115406 1.93846125 7.38461531 1.29230813 1.35346125 3.72346125 2.03076938 7.29230813 2.03076938h4.43076937V409.38461531c0 3.32307656 0.95423062 5.69192344 2.86153782 7.10769281 1.90730812 1.41576937 4.15384594 2.12307656 6.73846218 2.12307657 3.07730813 0 5.44615406-0.70730812 7.10769188-2.12307657 1.66153875-1.41576937 2.49230813-3.78461531 2.49230812-7.10769281v-10.70769187h28.98461532v10.52307656c0 3.32307656 0.89192344 5.69192344 2.6769225 7.10769187 1.785 1.41576937 4.03038469 2.12307656 6.73846218 2.1230775 2.83038469 0 5.20038469-0.70730812 7.10769188-2.1230775 1.90730812-1.41576937 2.86153875-3.78461531 2.86153875-7.10769187v-10.52307656h4.43076937c3.56884594 0 6-0.67730813 7.29230719-2.03076938s1.93846125-3.81576937 1.93846219-7.38461531c0-3.19961531-0.615-5.56961531-1.84615406-7.10769281-1.23115406-1.53807656-3.69230812-2.30769188-7.38461532-2.30769188h-4.43076937v-77.7230775h6.09230719c3.56884594 0 6-0.73846125 7.29230812-2.21538468 1.29230813-1.47692344 1.93846125-3.87692344 1.93846125-7.2 0-2.95384594-0.76961531-5.29269188-2.30769187-7.01538375-1.53807656-1.72269187-3.90807656-2.58461531-7.10769282-2.58461625h-15.50769187c0.98423063-0.73846125 1.84615406-1.60038469 2.58461531-2.58461532a347.55 347.55 0 0 0 4.33846125-6 132.09 132.09 0 0 0 3.23076938-4.8c0.98423063-1.53807656 1.93846125-3.10730812 2.86153875-4.70769187s1.93846125-3.44653875 3.04615406-5.53846125c0.615-1.10769187 1.10769187-2.33884594 1.4769225-3.69230813l0.36923062 0.73846125c0.12346125 0.24576938 0.30807656 0.55384594 0.55384688 0.9230775a57.77884594 57.77884594 0 0 1 5.26153781 12c1.29230813 4.185 2.27653875 8.985 2.95384688 14.4 0.67730813 5.415 1.13884594 11.75423062 1.38461531 19.01538469 0.24576938 7.26115406 0.36923062 15.93807656 0.36923062 26.03076937V392.76923063c0 6.03115406 1.10769187 10.46192344 3.32307657 13.29230812 2.21538469 2.83038469 6.46153875 4.24615406 12.73846125 4.24615313h33.96923156c6.27692344 0 10.61538469-1.41576937 13.01538469-4.24615313 2.4-2.83038469 3.6-7.26115406 3.6-13.29230812v-129.78461532c0-7.87730812-1.47692344-13.23115406-4.43076938-16.06153875-2.95384594-2.83038469-7.26115406-4.24615406-12.9230775-4.24615312-2.09192344 0-4.36961531 0.15346125-6.83076937 0.46153781s-5.72307656 1.07653875-9.78461532 2.30769281c-3.56884594 0.98423063-5.84653875 2.55346125-6.83076843 4.70769188-0.98423063 2.15423062-0.86192344 4.89230812 0.36923062 8.21538469 0.98423063 2.46115406 2.4 4.03038469 4.24615313 4.70769281 1.84615406 0.67730813 4.43076938 0.46153875 7.75384687-0.64615406 3.44653875-1.10769187 5.81538469-1.53807656 7.10769188-1.29230813 1.29230813 0.24576938 1.93846125 1.41576937 1.93846125 3.50769281v35.44615407h-28.24615313c-0.615-11.56961531-1.72269187-21.41538469-3.3230775-29.53846219-1.60038469-8.12307656-4.12269188-15.32307656-7.56923062-21.6-2.09192344-3.93807656-4.58423063-6.36923063-7.4769225-7.29230719-2.89269188-0.92307656-5.81538469-0.585-8.76923157 1.01538469-2.46115406 1.35346125-3.93807656 3.13846125-4.43076843 5.35384594-0.24576938-0.36923062-0.585-0.73846125-1.01538469-1.10769282-0.43038469-0.36923062-0.89192344-0.79961531-1.38461531-1.29230718-2.83038469-2.21538469-5.44615406-3.16961531-7.84615407-2.86153875-2.4 0.30807656-4.76884594 2.61576937-7.10769281 6.9230775-2.33884594 4.185-4.46192344 7.75384594-6.36923062 10.70769187a186.00576937 186.00576937 0 0 1-5.81538469 8.49230813c-2.46115406 3.07730813-3.56884594 5.75423062-3.32307656 8.03076843 0.24576938 2.27653875 1.35346125 4.33846125 3.32307656 6.18461532h-24c1.84615406-1.72269187 2.76923063-3.87692344 2.76923062-6.46153782 0-2.58461531-0.86192344-5.35384594-2.58461531-8.30769281z m85.47692344 94.70769281h27.69230719v24.36923063c0 1.60038469-0.27692344 2.61576937-0.83076844 3.04615406-0.55384594 0.43038469-1.50807656 0.64615406-2.86153875 0.64615313h-19.56923063c-1.72269187 0-2.89269188-0.27692344-3.50769281-0.83076844-0.615-0.55384594-0.92307656-1.50807656-0.92307656-2.86153875v-24.36923063z m27.69230719-44.49230812v25.84615406h-27.69230719v-25.84615406h27.69230719z m-114.46153782-16.43076938h28.98461532v13.66153875h-28.98461532v-13.66153875z m0 32.30769282h28.98461532v13.4769225h-28.98461532v-13.4769225z m0 32.12307656h28.98461532V379.84615406h-28.98461532v-13.29230812z m319.05807657-98.03076938c0-6.64615406-2.09192344-11.84653875-6.27692251-15.6-4.185-3.75346125-9.47653875-5.63076938-15.87692343-5.63076843h-91.01538469c-6.40038469 0-11.66192344 1.87730812-15.78461531 5.63076843-4.12269188 3.75346125-6.18461531 8.95384594-6.18461531 15.6v116.30769282c0 6.64615406 2.06192344 11.81538469 6.18461531 15.50769187 4.12269188 3.69230812 9.38423062 5.53846125 15.78461531 5.53846219h91.01538469c7.50807656 0 13.07653875-1.84615406 16.70769187-5.53846219 3.63115406-3.69230812 5.44615406-8.86153875 5.44615406-15.50769187v-116.30769282z m-22.15384594 108.18461532c0 2.70807656-0.33807656 4.46192344-1.01538469 5.26153875-0.67730813 0.79961531-2.06192344 1.2-4.15384594 1.2h-81.04615406c-2.46115406 0-3.87692344-0.49269187-4.24615406-1.4769225-0.36923062-0.98423063-0.55384594-2.15423062-0.55384594-3.50769282v-37.66153875h91.01538469v36.18461532z m0-58.89230719h-91.01538469v-41.16923063c0-2.83038469 0.21576937-4.64653875 0.64615406-5.44615406 0.43038469-0.79961531 1.87730812-1.2 4.33846125-1.2h80.86153875c2.83038469 0 4.39961531 0.79961531 4.70769188 2.4 0.30807656 1.60038469 0.46153875 3.38423063 0.46153875 5.35384594v40.06153875zM881.23076938 790.15384594h-73.84615407V864h-73.84615406v-73.84615406H290.46153875V864h-73.84615406v-73.84615406H142.76923062C102.035 790.03384594 69.04307656 757.04192344 68.92307656 716.30769188v-738.46153782c0.12-40.73423063 33.11192344-73.72615406 73.84615406-73.84615406h738.46153875c40.73423063 0.12 73.72615406 33.11192344 73.84615407 73.84615406V716.30769188c-0.12 40.73423063-33.11192344 73.72615406-73.84615407 73.84615406z m-1e-8-812.30769188H142.76923062V642.46153875h738.46153875v-664.61538469z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xingqisi" unicode="&#59431;" d="M395.96923062 265.38461530999996c3.19961531 0 5.63076938-0.73846125 7.29230813-2.21538468 1.66153875-1.47692344 2.49230813-3.93807656 2.49230719-7.38461532 0-6.64615406-3.26192344-9.96923062-9.78461532-9.96923062H242.55384594c-6.52269187 0-9.78461531 3.32307656-9.78461531 9.96923062 0 3.44653875 0.83076938 5.90769188 2.49230812 7.38461532 1.66153875 1.47692344 4.09269187 2.21538469 7.29230719 2.21538468h69.41538469v13.29230813h-51.13846125c-3.19961531 0-5.63076938 0.70730812-7.29230813 2.12307656-1.66153875 1.41576937-2.49230813 3.78461531-2.49230719 7.10769188v0.36923156c-4.06153875-1.23115406-7.50807656-0.43038469-10.33846218 2.4-5.415 5.415-4.36961531 11.44615406 3.13846218 18.09230719a73.26 73.26 0 0 1 9.6 9.96923062c2.83038469 3.56884594 5.72307656 8.12307656 8.6769225 13.66153875a10.45846125 10.45846125 0 0 0 0.83076938 1.66153875 17.95384594 17.95384594 0 0 0 1.2 1.66153781c-5.53846125 0.49269187-9.41538469 2.21538469-11.63076938 5.16923157-2.21538469 2.95384594-3.32307656 7.44576938-3.32307656 13.4769225v36.73846125c0 6.64615406 1.32346125 11.385 3.96923063 14.21538468 2.64576937 2.83038469 7.29230812 4.24615406 13.93846125 4.24615407h102.09230812c6.64615406 0 11.32269188-1.41576937 14.03076938-4.24615407 2.70807656-2.83038469 4.06153875-7.56923062 4.06153875-14.21538468v-36.73846125c0-6.64615406-1.35346125-11.415-4.06153875-14.30769188-2.70807656-2.89269188-7.38461531-4.33846125-14.03076938-4.33846219h-36.55384594c0.49269187-1.10769187 0.73846125-2.76923063 0.73846125-4.98461531v-4.61538469h54.27692344c6.52269187 0 9.78461531-3.19961531 9.78461531-9.6 0-6.40038469-3.26192344-9.6-9.78461531-9.6H333.38461531v-10.15384593h49.10769282c3.19961531 0 5.63076938-0.615 7.29230718-1.84615407 1.66153875-1.23115406 2.49230813-3.56884594 2.49230813-7.01538468 0-3.32307656-0.83076938-5.69192344-2.49230813-7.10769188-1.66153875-1.41576937-4.09269187-2.12307656-7.29230718-2.12307656H333.38461531v-13.29230813h62.58461532zM366.61538469 387.6c0 2.09192344-1.10769187 3.13846125-3.32307657 3.13846125h-90.46153874c-0.98423063 0-1.72269187-0.21576937-2.21538469-0.64615313-0.49269187-0.43038469-0.73846125-1.32346125-0.73846125-2.67692343v-6.46153875H366.61538469v6.64615406z m0-23.81538469h-96.73846125v-6.09230719c0-1.47692344 0.24576938-2.43115406 0.73846125-2.86153875 0.49269187-0.43038469 1.41576937-0.64615406 2.76923062-0.64615406h89.72307656c1.35346125 0 2.27653875 0.21576937 2.76923157 0.64615406 0.49269187 0.43038469 0.73846125 1.38461531 0.73846125 2.86153875v6.09230719z m-96.36923063-56.86153875c-1.23115406-1.47692344-2.43115406-3.19961531-3.6-5.16923062-1.16884594-1.96961531-2.36884594-3.63115406-3.6-4.98461532h48.92307657v10.15384594h-41.72307657z m41.72307656 23.81538469c0 2.21538469 0.24576938 3.87692344 0.73846125 4.98461531h-30.83076843c1.96961531-2.21538469 2.15423062-5.415 0.55384593-9.6h29.53846125v4.61538469z m153.08884594-62.4c-2.09192344-3.56884594-4.58423063-7.32346125-7.4769225-11.26153781a192.67615406 192.67615406 0 0 0-8.58461531-10.89230813c-2.70807656-3.07730813-5.50730813-4.61538469-8.4-4.61538469-2.89269188 0-5.44615406 1.23115406-7.66153875 3.69230813-2.09192344 2.33884594-3.10730812 4.70769188-3.04615406 7.10769187 0.06115406 2.4 1.44576938 5.07692344 4.15384594 8.03076938 3.32307656 3.69230812 6.06115406 7.01538469 8.21538468 9.96923062 2.15423062 2.95384594 3.90807656 5.59961531 5.26153875 7.93846125 1.23115406 1.96961531 2.46115406 3.56884594 3.69230813 4.8h-13.10769281c-3.32307656 0-5.69192344 0.79961531-7.10769188 2.4-1.41576937 1.60038469-2.12307656 3.93807656-2.1230775 7.01538469 0 3.56884594 0.64615406 6.06115406 1.93846219 7.47692344 1.29230813 1.41576937 3.72346125 2.12307656 7.29230719 2.12307656h6.46153875V379.84615406h-4.43076938c-3.56884594 0-6 0.70730812-7.29230812 2.12307657s-1.93846125 3.84576937-1.93846125 7.29230812c0 3.56884594 0.64615406 6.03115406 1.93846125 7.38461531 1.29230813 1.35346125 3.72346125 2.03076938 7.29230812 2.03076938h4.43076938V409.38461531c0 3.32307656 0.95423062 5.69192344 2.86153875 7.10769281 1.90730812 1.41576937 4.15384594 2.12307656 6.73846125 2.12307657 3.07730813 0 5.44615406-0.70730812 7.10769187-2.12307657 1.66153875-1.41576937 2.49230813-3.78461531 2.49230813-7.10769281v-10.70769187h28.98461531v10.52307656c0 3.32307656 0.89192344 5.69192344 2.67692344 7.10769187 1.785 1.41576937 4.03038469 2.12307656 6.73846125 2.1230775 2.83038469 0 5.20038469-0.70730812 7.10769187-2.1230775 1.90730812-1.41576937 2.86153875-3.78461531 2.86153875-7.10769187v-10.52307656h4.43076938c3.56884594 0 6-0.67730813 7.29230718-2.03076938s1.93846125-3.81576937 1.93846219-7.38461531c0-3.19961531-0.615-5.56961531-1.84615406-7.10769281-1.23115406-1.53807656-3.69230812-2.30769188-7.38461531-2.30769188h-4.43076938v-77.7230775h6.09230813c3.56884594 0 6-0.73846125 7.29230718-2.21538468 1.29230813-1.47692344 1.93846125-3.87692344 1.93846125-7.2 0-2.95384594-0.76961531-5.29269188-2.30769187-7.01538375-1.53807656-1.72269187-3.90807656-2.58461531-7.10769281-2.58461625h-15.50769188c0.98423063-0.73846125 1.84615406-1.60038469 2.58461531-2.58461532a347.55 347.55 0 0 0 4.33846125-6 132.09 132.09 0 0 0 3.23076938-4.8c0.98423063-1.53807656 1.93846125-3.10730812 2.86153875-4.70769187s1.93846125-3.44653875 3.04615406-5.53846125c0.615-1.10769187 1.10769187-2.33884594 1.4769225-3.69230813l0.36923063 0.73846125c0.12346125 0.24576938 0.30807656 0.55384594 0.55384687 0.9230775a57.77884594 57.77884594 0 0 1 5.26153781 12c1.29230813 4.185 2.27653875 8.985 2.95384688 14.4 0.67730813 5.415 1.13884594 11.75423062 1.38461531 19.01538469 0.24576938 7.26115406 0.36923062 15.93807656 0.36923063 26.03076937V392.76923063c0 6.03115406 1.10769187 10.46192344 3.32307656 13.29230812 2.21538469 2.83038469 6.46153875 4.24615406 12.73846219 4.24615313h33.96923062c6.27692344 0 10.61538469-1.41576937 13.01538469-4.24615313 2.4-2.83038469 3.6-7.26115406 3.6-13.29230812v-129.78461532c0-7.87730812-1.47692344-13.23115406-4.43076938-16.06153875-2.95384594-2.83038469-7.26115406-4.24615406-12.9230775-4.24615312-2.09192344 0-4.36961531 0.15346125-6.83076843 0.46153781s-5.72307656 1.07653875-9.78461625 2.30769281c-3.56884594 0.98423063-5.84653875 2.55346125-6.83076844 4.70769188-0.98423063 2.15423062-0.86192344 4.89230812 0.36923062 8.21538469 0.98423063 2.46115406 2.4 4.03038469 4.24615407 4.70769281 1.84615406 0.67730813 4.43076938 0.46153875 7.75384593-0.64615406 3.44653875-1.10769187 5.81538469-1.53807656 7.10769188-1.29230813 1.29230813 0.24576938 1.93846125 1.41576937 1.93846219 3.50769281v35.44615407h-28.24615407c-0.615-11.56961531-1.72269187-21.41538469-3.3230775-29.53846219-1.60038469-8.12307656-4.12269188-15.32307656-7.56923062-21.6-2.09192344-3.93807656-4.58423063-6.36923063-7.4769225-7.29230719-2.89269188-0.92307656-5.81538469-0.585-8.76923156 1.01538469-2.46115406 1.35346125-3.93807656 3.13846125-4.43076844 5.35384594-0.24576938-0.36923062-0.585-0.73846125-1.01538469-1.10769282-0.43038469-0.36923062-0.89192344-0.79961531-1.38461531-1.29230718-2.83038469-2.21538469-5.44615406-3.16961531-7.84615406-2.86153875-2.4 0.30807656-4.76884594 2.61576937-7.10769282 6.9230775-2.33884594 4.185-4.46192344 7.75384594-6.36923062 10.70769187a186.00576937 186.00576937 0 0 1-5.81538469 8.49230813c-2.46115406 3.07730813-3.56884594 5.75423062-3.32307656 8.03076843 0.24576938 2.27653875 1.35346125 4.33846125 3.32307656 6.18461532h-24c1.84615406-1.72269187 2.76923063-3.87692344 2.76923063-6.46153782 0-2.58461531-0.86192344-5.35384594-2.58461532-8.30769281z m85.47692344 94.70769281h27.69230813v24.36923063c0 1.60038469-0.27692344 2.61576937-0.83076938 3.04615406-0.55384594 0.43038469-1.50807656 0.64615406-2.86153875 0.64615313h-19.56923062c-1.72269187 0-2.89269188-0.27692344-3.50769282-0.83076844-0.615-0.55384594-0.92307656-1.50807656-0.92307656-2.86153875v-24.36923063z m27.69230813-44.49230812v25.84615406h-27.69230813v-25.84615406h27.69230813z m-114.46153875-16.43076938h28.98461531v13.66153875h-28.98461531v-13.66153875z m0 32.30769282h28.98461531v13.4769225h-28.98461531v-13.4769225z m0 32.12307656h28.98461531V379.84615406h-28.98461531v-13.29230812z m327.36576937-98.21538469c0-7.01538469-1.35346125-12.06115406-4.06153875-15.13846125s-7.63038469-4.61538469-14.76923062-4.61538469h-111.87692344c-7.26115406 0-12.27692344 1.47692344-15.04615407 4.43076938-2.76923063 2.95384594-4.15384594 8.06192344-4.15384593 15.32307656V388.70769188c0 7.01538469 1.44576938 12.03115406 4.33846218 15.04615406 2.89269188 3.015 7.84615406 4.52307656 14.86153782 4.5230775h111.87692343c7.13884594 0 12.06115406-1.50807656 14.76923063-4.5230775 2.70807656-3.015 4.06153875-8.03076937 4.06153875-15.04615406v-120.36923063z m-22.15384687 22.89230813h-15.8769225c-5.53846125 0-10.215 0.64615406-14.03076938 1.93846125-3.81576937 1.29230813-6.86192344 3.38423063-9.13846125 6.27692343-2.27653875 2.89269188-3.90807656 6.64615406-4.89230812 11.26153782-0.98423063 4.61538469-1.47692344 10.24615406-1.4769225 16.89230812v59.44615406h-17.90769282v-44.30769281c0-13.29230812-2.36884594-24-7.10769187-32.12307656-4.73884594-8.12307656-12.33807656-14.09192344-22.8-17.90769281-5.29269188-1.96961531-9.41538469-1.96961531-12.36923156 0v-14.76923063c0-3.56884594 0.46153875-5.81538469 1.38461625-6.73846125 0.92307656-0.92307656 3.04615406-1.38461531 6.36923062-1.38461531h89.72307656c3.32307656 0 5.50730813 0.43038469 6.55384594 1.29230719 1.04653875 0.86192344 1.56923062 2.95384594 1.56923063 6.27692343v13.84615407z m-23.81538375 95.81538468v-59.07692343c0-6.15346125 0.70730812-10.27730813 2.12307656-12.36923063 1.41576937-2.09192344 4.03038469-3.13846125 7.84615406-3.13846125h13.84615313v67.38461531c0 2.83038469-0.615 4.73884594-1.84615313 5.72307657-1.23115406 0.98423063-3.32307656 1.47692344-6.27692344 1.47692343h-15.69230719z m-81.78461626-76.24615406c1.23115406 1.10769187 3.38423063 2.21538469 6.46153876 3.32307656 5.53846125 2.09192344 9.32307656 5.47730813 11.35384593 10.15384688 2.03076938 4.67653875 3.04615406 10.89230812 3.04615407 18.64615312v44.1230775h-13.10769188c-3.07730813 0-5.13807656-0.49269187-6.18461531-1.47692343s-1.56923062-2.70807656-1.56923156-5.16923063v-69.6zM881.23076938 790.15384594h-73.84615407V864h-73.84615406v-73.84615406H290.46153875V864h-73.84615406v-73.84615406H142.76923062C102.035 790.03384594 69.04307656 757.04192344 68.92307656 716.30769188v-738.46153782c0.12-40.73423063 33.11192344-73.72615406 73.84615406-73.84615406h738.46153875c40.73423063 0.12 73.72615406 33.11192344 73.84615407 73.84615406V716.30769188c-0.12 40.73423063-33.11192344 73.72615406-73.84615407 73.84615406z m-1e-8-812.30769188H142.76923062V642.46153875h738.46153875v-664.61538469z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xingqiyi" unicode="&#59432;" d="M389.04615406 265.38461530999996c3.19961531 0 5.63076938-0.73846125 7.29230719-2.21538468 1.66153875-1.47692344 2.49230813-3.93807656 2.49230813-7.38461532 0-6.64615406-3.26192344-9.96923062-9.78461532-9.96923062H235.63076937c-6.52269187 0-9.78461531 3.32307656-9.78461531 9.96923062 0 3.44653875 0.83076938 5.90769188 2.49230719 7.38461532 1.66153875 1.47692344 4.09269187 2.21538469 7.29230813 2.21538468h69.41538468v13.29230813h-51.13846219c-3.19961531 0-5.63076938 0.70730812-7.29230718 2.12307656-1.66153875 1.41576937-2.49230813 3.78461531-2.49230813 7.10769188v0.36923156c-4.06153875-1.23115406-7.50807656-0.43038469-10.33846125 2.4-5.415 5.415-4.36961531 11.44615406 3.13846125 18.09230719a73.26 73.26 0 0 1 9.6 9.96923062c2.83038469 3.56884594 5.72307656 8.12307656 8.67692344 13.66153875a10.45846125 10.45846125 0 0 0 0.83076937 1.66153875 17.95384594 17.95384594 0 0 0 1.2 1.66153781c-5.53846125 0.49269187-9.41538469 2.21538469-11.63076937 5.16923157-2.21538469 2.95384594-3.32307656 7.44576938-3.32307656 13.4769225v36.73846125c0 6.64615406 1.32346125 11.385 3.96923062 14.21538468 2.64576937 2.83038469 7.29230812 4.24615406 13.93846125 4.24615407h102.09230813c6.64615406 0 11.32269188-1.41576937 14.03076843-4.24615407 2.70807656-2.83038469 4.06153875-7.56923062 4.06153875-14.21538468v-36.73846125c0-6.64615406-1.35346125-11.415-4.06153875-14.30769188-2.70807656-2.89269188-7.38461531-4.33846125-14.03076843-4.33846219h-36.55384688c0.49269187-1.10769187 0.73846125-2.76923063 0.73846219-4.98461531v-4.61538469h54.2769225c6.52269187 0 9.78461531-3.19961531 9.78461531-9.6 0-6.40038469-3.26192344-9.6-9.78461531-9.6H326.46153875v-10.15384593h49.10769188c3.19961531 0 5.63076938-0.615 7.29230812-1.84615407 1.66153875-1.23115406 2.49230813-3.56884594 2.49230719-7.01538468 0-3.32307656-0.83076938-5.69192344-2.49230719-7.10769188-1.66153875-1.41576937-4.09269187-2.12307656-7.29230812-2.12307656H326.46153875v-13.29230813h62.58461531zM359.69230813 387.6c0 2.09192344-1.10769187 3.13846125-3.3230775 3.13846125h-90.46153875c-0.98423063 0-1.72269187-0.21576937-2.21538375-0.64615313-0.49269187-0.43038469-0.73846125-1.32346125-0.73846219-2.67692343v-6.46153875H359.69230813v6.64615406z m0-23.81538469h-96.73846219v-6.09230719c0-1.47692344 0.24576938-2.43115406 0.73846219-2.86153875 0.49269187-0.43038469 1.41576937-0.64615406 2.76923062-0.64615406h89.72307656c1.35346125 0 2.27653875 0.21576937 2.76923063 0.64615406 0.49269187 0.43038469 0.73846125 1.38461531 0.73846219 2.86153875v6.09230719z m-96.36923157-56.86153875c-1.23115406-1.47692344-2.43115406-3.19961531-3.6-5.16923062-1.16884594-1.96961531-2.36884594-3.63115406-3.6-4.98461532h48.9230775v10.15384594h-41.7230775z m41.7230775 23.81538469c0 2.21538469 0.24576938 3.87692344 0.73846125 4.98461531h-30.83076937c1.96961531-2.21538469 2.15423062-5.415 0.55384594-9.6h29.53846218v4.61538469z m153.08884594-62.4c-2.09192344-3.56884594-4.58423063-7.32346125-7.47692344-11.26153781a192.67615406 192.67615406 0 0 0-8.58461531-10.89230813c-2.70807656-3.07730813-5.50730813-4.61538469-8.4-4.61538469-2.89269188 0-5.44615406 1.23115406-7.66153781 3.69230813-2.09192344 2.33884594-3.10730812 4.70769188-3.04615407 7.10769187 0.06115406 2.4 1.44576938 5.07692344 4.15384594 8.03076938 3.32307656 3.69230812 6.06115406 7.01538469 8.21538469 9.96923062 2.15423062 2.95384594 3.90807656 5.59961531 5.26153875 7.93846125 1.23115406 1.96961531 2.46115406 3.56884594 3.69230719 4.8h-13.10769188c-3.32307656 0-5.69192344 0.79961531-7.10769281 2.4-1.41576937 1.60038469-2.12307656 3.93807656-2.12307656 7.01538469 0 3.56884594 0.64615406 6.06115406 1.93846125 7.47692344 1.29230813 1.41576937 3.72346125 2.12307656 7.29230812 2.12307656h6.46153781V379.84615406h-4.43076843c-3.56884594 0-6 0.70730812-7.29230813 2.12307657s-1.93846125 3.84576937-1.93846125 7.29230812c0 3.56884594 0.64615406 6.03115406 1.93846125 7.38461531 1.29230813 1.35346125 3.72346125 2.03076938 7.29230813 2.03076938h4.43076843V409.38461531c0 3.32307656 0.95423062 5.69192344 2.86153875 7.10769281 1.90730812 1.41576937 4.15384594 2.12307656 6.73846125 2.12307657 3.07730813 0 5.44615406-0.70730812 7.10769282-2.12307657 1.66153875-1.41576937 2.49230813-3.78461531 2.49230718-7.10769281v-10.70769187h28.98461625v10.52307656c0 3.32307656 0.89192344 5.69192344 2.67692251 7.10769187 1.785 1.41576937 4.03038469 2.12307656 6.73846125 2.1230775 2.83038469 0 5.20038469-0.70730812 7.10769281-2.1230775 1.90730812-1.41576937 2.86153875-3.78461531 2.86153875-7.10769187v-10.52307656h4.43076844c3.56884594 0 6-0.67730813 7.29230812-2.03076938s1.93846125-3.81576937 1.93846125-7.38461531c0-3.19961531-0.615-5.56961531-1.84615312-7.10769281-1.23115406-1.53807656-3.69230812-2.30769188-7.38461625-2.30769188h-4.43076844v-77.7230775h6.09230718c3.56884594 0 6-0.73846125 7.29230813-2.21538468 1.29230813-1.47692344 1.93846125-3.87692344 1.93846125-7.2 0-2.95384594-0.76961531-5.29269188-2.30769188-7.01538375-1.53807656-1.72269187-3.90807656-2.58461531-7.10769281-2.58461625h-15.50769187c0.98423063-0.73846125 1.84615406-1.60038469 2.58461531-2.58461532a347.55 347.55 0 0 0 4.33846125-6 132.09 132.09 0 0 0 3.23076937-4.8c0.98423063-1.53807656 1.93846125-3.10730812 2.86153876-4.70769187s1.93846125-3.44653875 3.04615312-5.53846125c0.615-1.10769187 1.10769187-2.33884594 1.47692344-3.69230813l0.36923062 0.73846125c0.12346125 0.24576938 0.30807656 0.55384594 0.55384594 0.9230775a57.77884594 57.77884594 0 0 1 5.26153875 12c1.29230813 4.185 2.27653875 8.985 2.95384594 14.4 0.67730813 5.415 1.13884594 11.75423062 1.38461531 19.01538469 0.24576938 7.26115406 0.36923062 15.93807656 0.36923063 26.03076937V392.76923063c0 6.03115406 1.10769187 10.46192344 3.3230775 13.29230812 2.21538469 2.83038469 6.46153875 4.24615406 12.73846124 4.24615313h33.96923063c6.27692344 0 10.61538469-1.41576937 13.01538469-4.24615313 2.4-2.83038469 3.6-7.26115406 3.6-13.29230812v-129.78461532c0-7.87730812-1.47692344-13.23115406-4.43076938-16.06153875-2.95384594-2.83038469-7.26115406-4.24615406-12.92307656-4.24615312-2.09192344 0-4.36961531 0.15346125-6.83076938 0.46153781s-5.72307656 1.07653875-9.78461531 2.30769281c-3.56884594 0.98423063-5.84653875 2.55346125-6.83076937 4.70769188-0.98423063 2.15423062-0.86192344 4.89230812 0.36923062 8.21538469 0.98423063 2.46115406 2.4 4.03038469 4.24615406 4.70769281 1.84615406 0.67730813 4.43076938 0.46153875 7.75384594-0.64615406 3.44653875-1.10769187 5.81538469-1.53807656 7.10769281-1.29230813 1.29230813 0.24576938 1.93846125 1.41576937 1.93846125 3.50769281v35.44615407h-28.24615406c-0.615-11.56961531-1.72269187-21.41538469-3.32307656-29.53846219-1.60038469-8.12307656-4.12269188-15.32307656-7.56923063-21.6-2.09192344-3.93807656-4.58423063-6.36923063-7.47692343-7.29230719-2.89269188-0.92307656-5.81538469-0.585-8.76923063 1.01538469-2.46115406 1.35346125-3.93807656 3.13846125-4.43076937 5.35384594-0.24576938-0.36923062-0.585-0.73846125-1.01538469-1.10769282-0.43038469-0.36923062-0.89192344-0.79961531-1.38461531-1.29230718-2.83038469-2.21538469-5.44615406-3.16961531-7.84615407-2.86153875-2.4 0.30807656-4.76884594 2.61576937-7.10769187 6.9230775-2.33884594 4.185-4.46192344 7.75384594-6.36923063 10.70769187a186.00576937 186.00576937 0 0 1-5.81538468 8.49230813c-2.46115406 3.07730813-3.56884594 5.75423062-3.32307657 8.03076843 0.24576938 2.27653875 1.35346125 4.33846125 3.32307657 6.18461532h-24c1.84615406-1.72269187 2.76923063-3.87692344 2.76923062-6.46153782 0-2.58461531-0.86192344-5.35384594-2.58461531-8.30769281z m85.47692344 94.70769281h27.69230719v24.36923063c0 1.60038469-0.27692344 2.61576937-0.83076938 3.04615406-0.55384594 0.43038469-1.50807656 0.64615406-2.86153781 0.64615313h-19.56923156c-1.72269187 0-2.89269188-0.27692344-3.50769188-0.83076844-0.615-0.55384594-0.92307656-1.50807656-0.92307656-2.86153875v-24.36923063z m27.69230719-44.49230812v25.84615406h-27.69230719v-25.84615406h27.69230719z m-114.46153875-16.43076938h28.98461625v13.66153875h-28.98461625v-13.66153875z m0 32.30769282h28.98461625v13.4769225h-28.98461625v-13.4769225z m0 32.12307656h28.98461625V379.84615406h-28.98461625v-13.29230812z m341.02730812-35.81538469c0-3.56884594-0.83076938-6.33807656-2.49230812-8.30769187-1.66153875-1.96961531-4.46192344-2.95384594-8.4-2.95384594h-157.29230719c-4.185 0-7.01538469 0.98423063-8.49230813 2.95384594-1.47692344 1.96961531-2.21538469 4.73884594-2.21538468 8.30769187 0 3.32307656 0.73846125 6.09230812 2.21538468 8.30769281 1.47692344 2.21538469 4.30730813 3.32307656 8.49230813 3.32307657h157.29230719c3.93807656 0 6.73846125-1.10769187 8.4-3.32307657 1.66153875-2.21538469 2.49230813-4.98461531 2.49230812-8.30769281zM881.23076938 790.15384594h-73.84615407V864h-73.84615406v-73.84615406H290.46153875V864h-73.84615406v-73.84615406H142.76923062C102.035 790.03384594 69.04307656 757.04192344 68.92307656 716.30769188v-738.46153782c0.12-40.73423063 33.11192344-73.72615406 73.84615406-73.84615406h738.46153875c40.73423063 0.12 73.72615406 33.11192344 73.84615407 73.84615406V716.30769188c-0.12 40.73423063-33.11192344 73.72615406-73.84615407 73.84615406z m-1e-8-812.30769188H142.76923062V642.46153875h738.46153875v-664.61538469z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xihuan" unicode="&#59433;" d="M519.49568 843.008c-255.44192 0-462.52032-207.06304-462.52032-462.4896s207.0784-462.48448 462.52032-462.48448c255.42656 0 462.48448 207.05792 462.48448 462.48448s-207.05792 462.4896-462.48448 462.4896z m232.20224-502.9632c-58.5984-93.40928-205.952-209.59232-212.17792-214.5024-6.02624-4.72576-13.04064-7.07584-20.06016-7.07584-7.0144 0-14.0288 2.35008-20.03968 7.07584-6.25152 4.91008-153.59488 121.088-212.18304 214.5024-20.1728 32.13312-45.2608 72.15616-45.2608 129.18784 0 95.61088 70.0416 173.3632 156.12416 173.3632 47.77472 0 92.16-24.30464 121.35424-64.44032 29.21472 40.11008 73.63072 64.44032 121.35936 64.44032 86.0928 0 156.13952-77.75232 156.13952-173.3632 0.00512-57.03168-25.07776-97.05472-45.25568-129.18784z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bianji3" unicode="&#59434;" d="M831.80208096 833.81636396h-639.05325381c-71.61803701 0-130.38155508-58.76351807-130.38155508-130.38155508v-639.0532538c0-71.80167305 58.76351807-130.38155508 130.38155508-130.38155508h639.05325381c71.61803701 0 130.38155508 58.57988203 130.38155508 130.38155508v639.0532538c0 71.80167305-58.57988203 130.38155508-130.38155508 130.38155508zM557.44990859 318.16649678l-48.47990273-49.214446-76.20893701-76.20893701c-9.36543604-8.26361982-13.95633516-13.95633516-15.79269463-14.50724327-3.85635586-3.85635586-8.26361982-7.52907568-13.95633604-11.93633964-5.69271621-4.40726396-10.6508874-8.26361982-16.34360273-10.09998018-5.69271621-2.57090362-13.95633516-5.69271621-24.60722344-10.0999793-10.6508874-3.85635586-22.77086308-8.26361982-34.70720274-11.93633964-11.38543154-3.85635586-22.77086308-7.52907568-33.42175048-10.0999793-11.38543154-3.12181172-18.36359912-4.95817207-23.87267929-5.69271621-11.38543154-1.83636036-18.36359912 0-22.03631895 4.40726396-3.12181172 4.40726396-4.40726396 11.93633964-2.57090362 22.77086309 1.28545224 5.69271621 3.12181172 13.95633516 5.69271534 24.60722344 3.85635586 11.38543154 6.24362344 22.77086308 10.09998017 33.42175049 3.85635586 11.93633964 6.24362344 22.03631895 10.0999793 32.13629912s6.24362344 16.34360362 8.26361982 20.19995859c2.57090362 5.69271621 5.69271621 11.38543154 8.26361982 15.79269551 2.57090362 4.95817207 6.97816758 10.0999793 12.67088292 15.79269551 2.57090362 1.28545224 8.26361982 8.26361982 17.07814775 17.07814687l33.42175048 33.42175137 224.40318312 225.68863447 112.93613525-114.7724956-130.93246231-130.74882627z m219.99591914 223.11773085c-2.57090362-5.69271621-5.69271621-11.38543154-10.09998017-15.7926955l-12.67088291-12.67088291-10.09998017-10.09998018c-2.57090362-3.12181172-6.24362344-6.97816758-8.81452706-8.81452705L621.72250596 608.12772862c4.40726396 4.40726396 10.6508874 10.0999793 17.07814687 16.34360361 6.24362344 6.97816758 11.93633964 11.93633964 16.34360361 15.7926955 4.95817207 4.40726396 10.6508874 6.97816758 17.07814688 8.81452794 6.24362344 1.28545224 11.93633964 1.83636036 18.36359912 1.83635946 6.24362344 0 11.38543154-0.5509081 17.07814775-2.5709036 5.69271621-1.83636036 10.0999793-3.85635586 14.50724327-5.69271622 8.26361982-4.95817207 18.36359912-13.2217919 28.4635793-23.87267841s18.36359912-22.77086308 23.87267841-34.70720274c1.83636036-3.85635586 3.12181172-8.26361982 3.85635586-12.67088379 1.28545224-4.95817207 1.28545224-10.0999793 1.83636035-14.50724326-0.18363604-4.95817207-0.73454414-9.91634326-2.75453965-15.60905948z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tianchongxing-2" unicode="&#59442;" d="M821.1 854.5H184.7c-34.9-1.8-62.9-30-64.4-65v-843c0-0.7 0-1.3 0.1-2 0-0.3 0-0.6 0.1-1 0-0.3 0-0.7 0.1-1 0-0.4 0.1-0.8 0.1-1.2 0-0.3 0.1-0.5 0.1-0.8 0.1-0.4 0.1-0.9 0.2-1.3 0-0.2 0.1-0.4 0.1-0.7 0.1-0.4 0.2-0.9 0.3-1.3 0.1-0.2 0.1-0.4 0.1-0.6l0.3-1.2c0.1-0.2 0.1-0.5 0.2-0.7 0.1-0.4 0.2-0.8 0.4-1.1 0.1-0.3 0.2-0.5 0.3-0.8 0.1-0.3 0.3-0.7 0.4-1l0.3-0.9c0.1-0.3 0.3-0.6 0.4-0.9 0.1-0.3 0.3-0.7 0.4-1 0.1-0.2 0.2-0.5 0.4-0.7 0.2-0.4 0.4-0.7 0.5-1.1 0.1-0.2 0.2-0.4 0.4-0.6 0.2-0.4 0.4-0.7 0.6-1.1 0.1-0.2 0.2-0.4 0.4-0.6 0.2-0.4 0.5-0.7 0.7-1.1 0.1-0.2 0.3-0.4 0.4-0.6 0.2-0.4 0.5-0.7 0.8-1.1 0.2-0.2 0.3-0.4 0.5-0.6 0.2-0.3 0.5-0.6 0.7-0.9 0.2-0.3 0.5-0.5 0.7-0.8 0.2-0.2 0.4-0.5 0.6-0.7 0.5-0.5 0.9-1 1.4-1.5 0.5-0.5 1-0.9 1.5-1.4 0.2-0.2 0.5-0.4 0.7-0.6 0.3-0.2 0.5-0.5 0.8-0.7 0.3-0.3 0.6-0.5 0.9-0.7 0.2-0.2 0.4-0.3 0.6-0.5 0.4-0.3 0.7-0.5 1.1-0.8 0.2-0.1 0.4-0.3 0.6-0.4 0.4-0.2 0.7-0.5 1.1-0.7 0.2-0.1 0.4-0.2 0.6-0.4 0.4-0.2 0.7-0.4 1.1-0.6 0.2-0.1 0.4-0.2 0.6-0.4 0.4-0.2 0.7-0.4 1.1-0.5 0.2-0.1 0.5-0.2 0.7-0.4 0.3-0.2 0.7-0.3 1-0.4 0.3-0.1 0.6-0.3 0.9-0.4l0.9-0.3c0.3-0.1 0.7-0.3 1-0.4 0.3-0.1 0.5-0.2 0.8-0.3 0.4-0.1 0.8-0.3 1.1-0.4 0.2-0.1 0.5-0.1 0.7-0.2l1.2-0.3c0.2-0.1 0.4-0.1 0.7-0.2 0.4-0.1 0.9-0.2 1.3-0.3 0.2 0 0.4-0.1 0.7-0.1 0.4-0.1 0.9-0.2 1.3-0.2 0.3 0 0.5-0.1 0.8-0.1 0.4-0.1 0.8-0.1 1.2-0.1 0.3 0 0.7-0.1 1-0.1 0.3 0 0.6-0.1 1-0.1 0.7 0 1.3-0.1 2-0.1s1.4 0 2 0.1c0.3 0 0.6 0 1 0.1 0.3 0 0.7 0 1 0.1 0.4 0 0.8 0.1 1.2 0.1 0.3 0 0.5 0.1 0.8 0.1 0.4 0.1 0.9 0.1 1.3 0.2 0.2 0 0.4 0.1 0.7 0.1 0.4 0.1 0.9 0.2 1.3 0.3 0.2 0.1 0.4 0.1 0.7 0.2l1.2 0.3c0.2 0.1 0.5 0.1 0.7 0.2 0.4 0.1 0.8 0.2 1.1 0.4 0.3 0.1 0.5 0.2 0.8 0.3 0.3 0.1 0.7 0.3 1 0.4l0.9 0.3c0.3 0.1 0.6 0.3 0.9 0.4 0.3 0.1 0.7 0.3 1 0.4 0.2 0.1 0.5 0.2 0.7 0.4 0.4 0.2 0.7 0.4 1.1 0.5 0.2 0.1 0.4 0.2 0.6 0.4 0.4 0.2 0.7 0.4 1.1 0.6 0.2 0.1 0.4 0.2 0.6 0.4 0.4 0.2 0.8 0.5 1.1 0.7 0.2 0.1 0.4 0.3 0.6 0.4 0.4 0.2 0.7 0.5 1.1 0.8 0.2 0.2 0.4 0.3 0.6 0.5 0.3 0.2 0.6 0.5 1 0.7 0.3 0.2 0.5 0.4 0.8 0.7 0.2 0.2 0.5 0.4 0.7 0.6 0.5 0.4 1 0.9 1.4 1.4l312 312 312-312c8.1-8.1 18.8-12.1 29.5-12h0.5c22.6 0 41 18.3 41 41V788.7C884 824 856.1 852.5 821.1 854.5z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="flag-fill" unicode="&#59445;" d="M838.144 708.608c0 22.528-21.504 16.896-28.16 10.24-12.8-13.824-46.592-41.984-118.784-56.832-11.264-2.56-22.016-3.584-33.28-3.584-34.816 0-64 11.264-97.28 24.576-38.4 14.848-81.92 31.744-141.312 31.744-5.12 0-10.24 0-15.36-0.512-64.512-3.072-120.32-31.232-160.768-52.224a1641.853 1641.853 0 0 0-35.84-17.408l-3.584 8.704-0.512 0.512c-5.632 13.312-20.992 19.456-34.304 13.824-6.144-2.56-11.264-7.68-13.824-14.336-2.56-6.144-2.56-13.824 0-19.968l266.752-631.808c4.096-9.728 13.312-15.872 24.064-15.872 3.584 0 7.168 0.512 10.24 2.048 13.312 5.632 19.456 20.992 13.824 34.304L378.88 238.08000000000004c11.776 19.456 37.888 52.224 88.064 66.048 15.872 4.096 32.256 6.656 50.176 6.656 34.304 0 67.584-7.68 102.912-15.872 32.256-7.168 65.024-14.848 97.28-14.848 48.64 0 86.016 16.896 118.272 52.736 1.024 1.536 2.048 5.12 2.56 8.192V708.608z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yonghuzu" unicode="&#59446;" d="M816.86210617 805.875H207.13789383C141.86210617 805.875 90.125 754.1378938299999 90.125 688.8621061700001v-609.72421234c0-65.27578765 51.73710617-117.01289383 117.01289383-117.01289383h609.72421234c65.27578765 0 117.01289383 51.73710617 117.01289383 117.01289383V688.8621061700001c0 65.27578765-51.73710617 117.01289383-117.01289383 117.01289383z m-142.63968493-333.1482811c38.19842386 0 69.62750738-30.46203479 69.62750738-67.69340908 0-37.7148999-30.94555874-67.69340992-69.62750738-67.69340992s-69.62750738 30.46203479-69.62750739 67.69340992 31.4290827 67.69340992 69.62750739 67.69340908zM421.33918363 648.72958484c57.53939858 0 103.9577363-45.45128979 103.95773628-101.54011487s-46.41833771-101.54011487-103.95773628-101.54011487S317.38144732 491.1006449 317.38144732 547.18946997s46.41833771 101.54011487 103.95773631 101.54011487zM625.38646127 119.27041515999997H213.42371021c0 5.31876763-0.48352395 10.15401132-0.48352396 15.47277979 0 155.69484247 92.35315146 281.89469888 205.98137512 281.89469888s205.98137511-126.19985642 205.98137594-281.89469888c0.96704873-5.31876763 0.48352395-10.63753611 0.48352396-15.47277979z m185.18982852 0h-125.2328085c0 5.31876763 0.48352395 10.63753611 0.48352479 15.47277979 0 66.72636118-15.47277895 128.13395389-41.58309486 178.90401132 9.18696258 2.90114621 18.85744995 4.3517189 29.01146128 4.3517189 75.91332377 0 137.80444126-84.1332376 137.80444125-188.0909739-0.48352395-3.86819495-0.48352395-7.25286511-0.48352396-10.63753611z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon_paging_left" unicode="&#59401;" d="M258.64 384l271.53-271.529c16.662-16.662 16.662-43.677 0-60.34-16.662-16.662-43.678-16.662-60.34 0l-301.699 301.7c-16.662 16.661-16.662 43.677 0 60.339l301.7 301.699c16.661 16.662 43.677 16.662 60.339 0 16.662-16.663 16.662-43.678 0-60.34L258.64 384zM558.64 384l271.53-271.529c16.662-16.662 16.662-43.677 0-60.34-16.662-16.662-43.678-16.662-60.34 0l-301.699 301.7c-16.662 16.661-16.662 43.677 0 60.339l301.7 301.699c16.661 16.662 43.677 16.662 60.339 0 16.662-16.663 16.662-43.678 0-60.34L558.64 384z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon_paging_right" unicode="&#59402;" d="M774.36 384L502.83 112.471c-16.662-16.662-16.662-43.677 0-60.34 16.662-16.662 43.678-16.662 60.34 0l301.699 301.7c16.662 16.661 16.662 43.677 0 60.339l-301.7 301.699c-16.661 16.662-43.677 16.662-60.339 0-16.662-16.663-16.662-43.678 0-60.34L774.36 384zM474.36 384L202.83 112.471c-16.662-16.662-16.662-43.677 0-60.34 16.662-16.662 43.678-16.662 60.34 0l301.699 301.7c16.662 16.661 16.662 43.677 0 60.339l-301.7 301.699c-16.661 16.662-43.677 16.662-60.339 0-16.662-16.663-16.662-43.678 0-60.34L474.36 384z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chartpie-fill" unicode="&#59393;" d="M496.74525333 319.81170667000004c-34.36999111 0-48.35100445 12.23338667-48.93354666 46.60337778V740.40719111c0 14.56355555-17.47626667 16.89372445-17.47626667 16.89372445-193.98656-30.29219555-341.36974222-200.97706667-335.54432-404.86684444 6.40796445-209.13265778 176.51029333-379.23498667 385.64295112-385.64295112 203.88977778-5.82542222 374.57464889 141.55776 404.86684444 335.54432 0 0 0 17.47626667-19.22389334 17.47626667H496.74525333zM508.97864001 361.75474667000003c-10.48576 0-19.22389333 5.24288-19.22389334 19.22389334V787.59311111c0 13.39847111 11.06830222 23.88423111 23.88423111 23.30168889 231.85180445-10.48576 418.26531555-199.81198222 425.25582222-432.82887111 0-4.07779555 0.58254222-16.31118222-13.39847111-16.31118222h-416.51768888z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ziyuan" unicode="&#59394;" d="M512 834A450 450 0 1 1 962 384 450.51798604 450.51798604 0 0 1 512 834z m196.83453252-470.71942471l-258.99280577-194.2446041a25.89928066 25.89928066 0 0 0-15.53956875-5.17985596 25.89928066 25.89928066 0 0 0-25.89928066 25.89928066v388.48920821a25.89928066 25.89928066 0 0 0 41.43884941 20.71942471l258.99280577-194.2446041a25.89928066 25.89928066 0 0 0 0-41.43884942z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dongjielie" unicode="&#59391;" d="M958.13781071 759.30866079c0 34.76759928-28.10997389 62.87757319-62.8775732 62.8775732H129.63331688c-34.76759928 0-62.87757319-28.10997389-62.87757322-62.8775732v-744.66772956c0-34.76759928 28.10997389-62.87757319 62.87757322-62.87757322h765.62692063c34.76759928 0 62.87757319 28.10997389 62.8775732 62.87757322V759.30866079zM275.11476072 58.40865372999997L193.12733686 140.39607759H275.11476072v-81.98742386zM869.36947208 421.49581657H363.88309933v104.79595533h505.48637275v-104.79595532zM275.11476072 253.57570934L195.96299212 332.72747796H275.11476072v-79.15176862zM155.5240823 229.16441622000002v81.37097709l81.24768772-81.37097709H155.5240823z m0 272.46948383l80.01479413-80.13808347H155.5240823v80.13808347z m119.59067842 24.65787185v-81.61755579L193.49720493 526.2917719H275.11476072z m286.03131335 88.76833863v118.35778484h108.4946361v-118.35778484h-108.4946361z m-88.76833862 0h-108.49463612v118.35778484h108.49463612v-118.35778484z m-197.26297472 24.7811612L182.15458389 733.41789537H275.11476072v-93.57662364zM237.14163808 615.06011053H155.5240823v81.74084515l81.61755578-81.74084515zM363.88309933 332.72747796h505.48637275v-103.56306174H363.88309933v103.56306174z m505.48637275 282.33263257h-110.96042329v118.35778484h110.96042329v-118.35778484zM155.5240823 115.36833768999998l75.08321977-74.83664104H155.5240823v74.83664104zM363.88309933 40.53169664999996v99.86438094h505.48637275v-99.86438094H363.88309933z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tuichuquanping" unicode="&#59390;" d="M781.93550222 165.54666667000004H912.49777778a36.40888889 36.40888889 0 1 1 0 72.81777778H694.04444445a36.40888889 36.40888889 0 0 1-36.4088889-36.4088889v-218.45333333a36.40888889 36.40888889 0 1 1 72.81777778 0v130.56227556l156.28515556-156.28515556a36.40888889 36.40888889 0 1 1 51.46396444 51.50037333L781.93550222 165.54666667000004zM293.54666667 114.06449778000001V-16.49777777999998a36.40888889 36.40888889 0 1 1 72.81777778 0V201.95555554999999a36.40888889 36.40888889 0 0 1-36.4088889 36.4088889H111.50222222a36.40888889 36.40888889 0 1 1 0-72.81777778h130.56227556l-156.28515556-156.28515556a36.40888889 36.40888889 0 1 1 51.50037333-51.46396444L293.54666667 114.06449778000001zM781.93550222 602.4533333300001H912.49777778a36.40888889 36.40888889 0 1 0 0-72.81777778H694.04444445a36.40888889 36.40888889 0 0 0-36.4088889 36.4088889V784.49777778a36.40888889 36.40888889 0 1 0 72.81777778 0v-130.56227556l156.28515556 156.28515556a36.40888889 36.40888889 0 1 0 51.46396444-51.50037333L781.93550222 602.4533333300001zM293.54666667 653.93550222V784.49777778a36.40888889 36.40888889 0 1 0 72.81777778 0v-218.45333333a36.40888889 36.40888889 0 0 0-36.4088889-36.4088889H111.50222222a36.40888889 36.40888889 0 1 0 0 72.81777778h130.56227556l-156.28515556 156.28515556a36.40888889 36.40888889 0 1 0 51.50037333 51.46396444L293.54666667 653.93550222z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="quanping" unicode="&#59392;" d="M199.39328 748.08888889H329.95555555a36.40888889 36.40888889 0 1 1 0 72.81777778H111.50222222a36.40888889 36.40888889 0 0 1-36.40888889-36.40888889v-218.45333333a36.40888889 36.40888889 0 1 1 72.81777778 0v130.56227555l156.28515556-156.28515555a36.40888889 36.40888889 0 1 1 51.46396444 51.50037333L199.39328 748.08888889zM876.08888889 696.60672V566.04444445a36.40888889 36.40888889 0 1 1 72.81777778 0V784.49777778a36.40888889 36.40888889 0 0 1-36.40888889 36.40888889H694.04444445a36.40888889 36.40888889 0 1 1 0-72.81777778h130.56227555l-156.28515555-156.28515556a36.40888889 36.40888889 0 1 1 51.50037333-51.46396444L876.08888889 696.60672zM199.39328 19.91111110999998H329.95555555a36.40888889 36.40888889 0 1 0 0-72.81777778H111.50222222a36.40888889 36.40888889 0 0 0-36.40888889 36.40888889V201.95555554999999a36.40888889 36.40888889 0 1 0 72.81777778 0v-130.56227555l156.28515556 156.28515555a36.40888889 36.40888889 0 1 0 51.46396444-51.50037333L199.39328 19.91111110999998zM876.08888889 71.39328V201.95555554999999a36.40888889 36.40888889 0 1 0 72.81777778 0v-218.45333333a36.40888889 36.40888889 0 0 0-36.40888889-36.40888889H694.04444445a36.40888889 36.40888889 0 1 0 0 72.81777778h130.56227555l-156.28515555 156.28515556a36.40888889 36.40888889 0 1 0 51.50037333 51.46396444L876.08888889 71.39328z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiazai" unicode="&#59389;" d="M537.317 621.212c-70.708 0-128.253 57.518-128.253 128.228 0 70.68 57.547 128.228 128.253 128.228 70.707 0 128.228-57.518 128.228-128.228 0-70.71-57.518-128.228-128.228-128.228zM264.279 519.389c-64.578 0-117.144 52.54-117.144 117.146S199.701 753.68 264.28 753.68c64.58 0 117.146-52.54 117.146-117.146 0-64.577-52.566-117.146-117.146-117.146z m-116.021-264.99c-56.97 0-103.3 46.327-103.3 103.298 0 56.946 46.328 103.272 103.3 103.272 56.946 0 103.272-46.328 103.272-103.272-0.001-56.97-46.33-103.3-103.272-103.298z m116.021-262.53c-48.296 0-87.593 39.294-87.593 87.594 0 48.296 39.322 87.591 87.593 87.591s87.594-39.294 87.594-87.59c0-48.3-39.295-87.595-87.594-87.595z m273.038-100.372c-42.193 0-76.51 34.316-76.51 76.51 0 42.197 34.315 76.51 76.51 76.51s76.51-34.313 76.51-76.51c0-42.195-34.315-76.51-76.51-76.51z m277.171 129.32c-34.04 0-61.761 27.693-61.761 61.761s27.722 61.76 61.761 61.76c34.042 0 61.759-27.691 61.759-61.76 0-34.068-27.72-61.76-61.759-61.76z m113.505 285.738c-27.938 0-50.678 22.74-50.678 50.677 0 27.939 22.74 50.68 50.678 50.68s50.707-22.74 50.707-50.68c0-27.938-22.768-50.677-50.707-50.677zM775.167 632.733c0-21.717 17.605-39.322 39.32-39.322 21.717 0 39.323 17.606 39.323 39.322 0 21.718-17.606 39.323-39.323 39.323-21.715 0-39.32-17.604-39.32-39.323z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="suoxiao" unicode="&#59387;" d="M996.70926222-64.26624000000004L838.65827555 93.78474667C919.95932444 178.83591110999998 970.24 293.74236444999997 970.24 420.40888889c0 260.97891555-212.33664 473.31555555-473.31555556 473.31555556S23.60888888 681.38780445 23.60888888 420.40888889s212.33664-473.31555555 473.31555556-473.31555556c108.09799111 0 207.56707555 36.84579555 287.33895111 98.08554667l160.92728889-160.92728889a36.29966222 36.29966222 0 0 1 51.48216889 0 36.40888889 36.40888889 0 0 1 0.03640889 51.48216889zM96.42666666 420.40888889c0 220.81991111 179.67786667 400.49777778 400.49777778 400.49777778s400.49777778-179.67786667 400.49777778-400.49777778-179.67786667-400.49777778-400.49777778-400.49777778-400.49777778 179.67786667-400.49777778 400.49777778zM662.80334222 456.81777778H333.08444444a36.40888889 36.40888889 0 0 1 0-72.81777778h329.71889778a36.40888889 36.40888889 0 1 1 0 72.81777778z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fangda" unicode="&#59388;" d="M996.70926222-64.26624000000004L838.65827555 93.78474667C919.95932444 178.83591110999998 970.24 293.74236444999997 970.24 420.40888889c0 260.97891555-212.33664 473.31555555-473.31555556 473.31555556S23.60888888 681.38780445 23.60888888 420.40888889s212.33664-473.31555555 473.31555556-473.31555556c108.09799111 0 207.56707555 36.84579555 287.33895111 98.08554667l160.92728889-160.92728889a36.29966222 36.29966222 0 0 1 51.48216889 0 36.40888889 36.40888889 0 0 1 0.03640889 51.48216889zM96.42666666 420.40888889c0 220.81991111 179.67786667 400.49777778 400.49777778 400.49777778s400.49777778-179.67786667 400.49777778-400.49777778-179.67786667-400.49777778-400.49777778-400.49777778-400.49777778 179.67786667-400.49777778 400.49777778zM662.80334222 456.81777778H533.33333333V584.24888889a36.40888889 36.40888889 0 0 1-72.81777778 0v-127.43111111H333.08444444a36.40888889 36.40888889 0 0 1 0-72.81777778h127.43111111v-127.43111111a36.40888889 36.40888889 0 1 1 72.81777778 0V384h129.47000889a36.40888889 36.40888889 0 1 1 0 72.81777778z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chuji" unicode="&#59383;" d="M585.76681187 467.203125c-28.828125-11.8359375-55.3125-27.7734375-79.453125-47.578125-24.0234375-19.8046875-44.8828125-42.421875-62.4609375-67.96875-17.578125-25.546875-31.171875-53.4375-40.78125-83.671875-9.609375-30.3515625-14.4140625-62.109375-14.4140625-95.625 0-29.4140625 3.8671875-57.65625 11.484375-84.4921875 7.6171875-26.953125 18.28125-52.265625 31.875-76.0546875h-22.96875c-16.40625 0-35.5078125 0.5859375-57.3046875 1.640625-21.796875 1.171875-44.296875 2.6953125-67.5 4.6875-23.203125 1.9921875-46.2890625 4.21875-69.2578125 6.796875-22.96875 2.6953125-43.828125 5.390625-62.4609375 8.203125-18.6328125 2.8125-34.5703125 5.625-47.578125 8.5546875-13.0078125 2.8125-21.2109375 5.625-24.609375 8.5546875-6.2109375 4.5703125-10.8984375 18.515625-14.0625 42.0703125-3.1640625 23.5546875-1.875 53.671875 3.8671875 90.46875 2.2265625 14.1796875 6.9140625 25.78125 14.0625 34.8046875 7.03125 9.0234375 15.703125 16.875 25.8984375 23.3203125 10.1953125 6.5625 21.5625 11.71875 33.984375 15.703125 12.421875 3.984375 25.1953125 7.734375 38.203125 11.484375 13.0078125 3.6328125 25.6640625 7.6171875 37.8515625 11.8359375 12.1875 4.21875 23.3203125 9.4921875 33.515625 15.703125 11.953125 7.3828125 21.09375 14.53125 27.65625 21.6796875 6.5625 7.03125 11.1328125 14.0625 14.0625 20.859375 2.8125 6.796875 4.21875 13.828125 4.21875 21.2109375 0 7.3828125-0.234375 15.5859375-0.8203125 24.609375-1.171875 13.0078125-5.625 23.3203125-13.59375 31.0546875-7.96875 7.6171875-16.7578125 15.46875-26.3671875 23.3203125-4.5703125 3.984375-8.671875 9.4921875-12.3046875 16.5234375-3.6328125 7.03125-6.9140625 14.296875-9.7265625 21.6796875-2.8125 8.4375-5.625 17.2265625-8.5546875 26.3671875-3.984375 1.171875-7.96875 3.1640625-11.8359375 5.9765625-3.3984375 2.8125-7.03125 6.796875-11.015625 11.8359375-3.984375 5.15625-7.3828125 12.421875-10.1953125 22.03125-2.8125 9.609375-3.984375 18.3984375-3.3984375 26.3671875 0.5859375 7.96875 2.2265625 15 5.0390625 21.2109375 2.2265625 6.2109375 5.9765625 12.1875 11.015625 17.8125 0 21.5625 1.171875 43.0078125 3.3984375 64.5703125 2.2265625 18.1640625 6.2109375 37.6171875 11.8359375 58.59375 5.625 21.09375 14.4140625 39.7265625 26.25 56.25 11.3671875 15.8203125 23.5546875 28.7109375 36.5625 38.671875 13.0078125 9.9609375 26.6015625 17.6953125 40.78125 23.3203125 14.1796875 5.625 28.125 9.4921875 42.0703125 11.484375 13.828125 1.9921875 27.3046875 2.9296875 40.3125 2.9296875 16.40625 0 32.6953125-1.875 48.8671875-5.5078125 16.171875-3.6328125 31.2890625-8.671875 45.46875-14.8828125 14.1796875-6.2109375 26.71875-13.359375 37.8515625-21.2109375 11.015625-7.96875 19.6875-15.8203125 25.8984375-23.7890625 14.765625-18.1640625 25.4296875-38.0859375 32.2265625-59.8828125 6.796875-21.796875 11.6015625-42.65625 14.4140625-62.4609375 2.8125-22.6171875 4.21875-45.5859375 4.21875-68.7890625 3.984375-2.8125 7.03125-6.5625 9.375-11.015625 2.2265625-3.984375 4.1015625-9.0234375 5.5078125-15.3515625 1.40625-6.2109375 1.5234375-13.828125 0.46875-22.96875-1.171875-12.421875-3.515625-22.265625-7.265625-29.296875-3.6328125-7.03125-7.734375-12.65625-12.3046875-16.5234375-5.0390625-4.5703125-10.4296875-7.6171875-16.171875-9.375-1.171875-3.3984375-2.2265625-7.03125-3.3984375-11.015625l-4.21875-11.8359375c-1.0546875-4.1015625-2.4609375-8.3203125-4.21875-12.890625zM651.74337437 61.3828125c0-2.578125-0.46875-4.3359375-1.2890625-5.15625v-6.4453125c9.375 8.5546875 17.4609375 20.0390625 24.375 34.5703125h-5.15625c-7.734375 0-14.0625 2.578125-19.21875 7.734375-0.8203125-4.3359375-0.8203125-9.84375 0-16.640625 0.8203125-5.9765625 1.2890625-10.6640625 1.2890625-14.0625zM668.38399937 217.4765625c-3.3984375-11.1328125-7.734375-23.0859375-12.7734375-35.859375 11.1328125 10.1953125 17.109375 18.75 17.9296875 25.546875 0 3.515625-1.7578125 6.9140625-5.15625 10.3125zM768.22774937 243.140625h-8.90625c8.5546875-7.734375 12.7734375-18.3984375 12.7734375-31.9921875-0.8203125-33.28125-6.4453125-69.9609375-16.640625-110.0390625h10.1953125c8.5546875-0.8203125 14.0625 3.8671875 16.640625 14.0625 5.9765625 19.5703125 9.375 51.5625 10.1953125 95.9765625 1.7578125 22.1484375-6.328125 32.8125-24.2578125 31.9921875zM953.61837437 275.71875c-14.1796875 32.578125-33.28125 61.0546875-57.3046875 85.4296875-24.0234375 24.375-52.3828125 43.59375-84.9609375 57.7734375-32.578125 14.1796875-67.265625 21.2109375-104.0625 21.2109375-37.3828125 0-72.3046875-7.03125-104.8828125-21.2109375-32.578125-14.1796875-60.9375-33.3984375-84.9609375-57.7734375-24.0234375-24.375-43.2421875-52.8515625-57.3046875-85.4296875-14.1796875-32.578125-21.2109375-67.265625-21.2109375-104.0625s7.03125-71.484375 21.2109375-104.0625c14.1796875-32.578125 33.28125-61.0546875 57.3046875-85.4296875 24.0234375-24.375 52.3828125-43.4765625 84.9609375-57.3046875 32.578125-13.828125 67.5-20.859375 104.8828125-20.859375 36.796875 0 71.484375 6.9140625 104.0625 20.859375 32.578125 13.828125 60.9375 33.046875 84.9609375 57.3046875 24.0234375 24.375 43.2421875 52.8515625 57.3046875 85.4296875 14.1796875 32.578125 21.2109375 67.265625 21.2109375 104.0625s-7.03125 71.484375-21.2109375 104.0625zM793.89181187 20.3671875c-29.8828125-0.8203125-45.234375 16.171875-46.0546875 51.2109375V74.15625c-4.3359375-10.1953125-8.0859375-17.9296875-11.484375-23.0859375-10.1953125-13.59375-25.1953125-20.859375-44.765625-21.796875-13.7109375 0.8203125-27.3046875 7.734375-41.015625 20.5078125-1.7578125-18.75-11.1328125-28.59375-28.125-29.4140625-23.90625 1.7578125-36.328125 14.8828125-37.1484375 39.7265625-0.8203125 7.734375-0.46875 18.3984375 1.2890625 31.9921875 0.8203125 6.796875 1.7578125 11.953125 2.578125 15.3515625-14.53125 0.8203125-26.015625 8.90625-34.5703125 24.375 19.5703125 21.328125 31.9921875 41.3671875 37.1484375 60.1171875l-7.734375 2.578125c-9.375 2.578125-14.8828125 5.15625-16.640625 7.734375-6.796875 7.734375-10.1953125 21.328125-10.1953125 41.015625v5.15625c4.21875-2.578125 8.5546875-3.3984375 12.7734375-2.578125 5.15625 0 11.953125 2.578125 20.5078125 7.734375 6.796875 4.21875 12.7734375 7.265625 17.9296875 8.90625-19.6875 6.796875-28.59375 21.796875-26.8359375 44.765625v5.15625c4.21875-2.578125 13.2421875-1.2890625 26.8359375 3.8671875 11.1328125 4.21875 19.21875 6.796875 24.375 7.734375 24.7265625-1.7578125 37.96875-12.7734375 39.7265625-33.28125 0-17.109375-8.0859375-27.3046875-24.375-30.703125 13.59375-5.15625 20.859375-15.3515625 21.796875-30.703125 0-3.3984375-0.46875-6.796875-1.2890625-10.1953125 23.0859375-0.8203125 34.921875-14.0625 35.859375-39.7265625 0-14.53125-10.1953125-24.7265625-30.703125-30.703125 10.1953125-4.3359375 16.640625-12.421875 19.21875-24.375 13.59375 34.921875 20.859375 69.9609375 21.796875 105V238.21875c-23.90625 0-36.328125 18.3984375-37.1484375 55.078125 7.734375-2.578125 23.4375 0 47.34375 7.734375 23.0859375 7.734375 39.2578125 11.484375 48.6328125 11.484375 33.28125 0 55.8984375-8.5546875 67.8515625-25.546875 11.953125-14.53125 17.9296875-43.4765625 17.9296875-87.0703125v-8.90625c1.40625-113.90625-20.2734375-170.625-65.5078125-170.625z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhongji" unicode="&#59384;" d="M564.566216 472.388027c-30.776298-12.635797-59.050458-29.650336-84.82248-50.793403-25.646915-21.143067-47.915944-45.288699-66.681979-72.562003-18.766035-27.273305-33.278436-57.048748-43.537202-89.326329-10.258766-32.402688-15.388149-66.306659-15.388149-102.087233 0-31.401833 4.128528-61.552596 12.260476-90.202077 8.131949-28.774588 19.516677-55.797679 34.029078-81.19438h-24.520953c-17.514966 0-37.907392 0.625535-61.177276 1.751497-23.269884 1.251069-47.290409 2.877459-72.061576 5.004276-24.771167 2.126817-49.417227 4.503849-73.938179 7.2562-24.520953 2.877459-46.789982 5.754918-66.68198 8.757484-19.891998 3.002566-36.906536 6.005131-50.793402 9.132804-13.886866 3.002566-22.644349 6.005131-26.27245 9.132803-6.630666 4.879169-11.634942 19.766891-15.012828 44.913379-3.377886 25.146487-2.00171 57.298962 4.128528 96.582529 2.377031 15.137935 7.381307 27.523519 15.012828 37.15675 7.506414 9.633232 16.764325 18.015394 27.648626 24.896273 10.884301 7.005987 23.01967 12.51069 36.281001 16.764325 13.261332 4.253635 26.897984 8.257056 40.784851 12.260477 13.886866 3.878314 27.398412 8.131949 40.409529 12.635797 13.011118 4.503849 24.896274 10.133659 35.780575 16.764325 12.760904 7.881735 22.519243 15.513256 29.525229 23.144777 7.005987 7.506414 11.885156 15.012828 15.012828 22.269029 3.002566 7.2562 4.503849 14.762615 4.503849 22.644349 0 7.881735-0.250214 16.639218-0.875749 26.27245-1.251069 13.886866-6.005131 24.896274-14.5124 33.153329-8.507269 8.131949-17.890287 16.514111-28.149054 24.896274-4.879169 4.253635-9.257911 10.133659-13.136224 17.640073-3.878314 7.506414-7.381307 15.263042-10.383873 23.144777-3.002566 9.007697-6.005131 18.390715-9.132804 28.149053-4.253635 1.251069-8.507269 3.377886-12.635797 6.380452-3.6281 3.002566-7.506414 7.2562-11.760049 12.635797-4.253635 5.504704-7.881735 13.261332-10.884301 23.520098-3.002566 10.258766-4.253635 19.641784-3.6281 28.149053 0.625535 8.507269 2.377031 16.013684 5.379597 22.64435 2.377031 6.630666 6.380452 13.011118 11.760049 19.016249 0 23.01967 1.251069 45.914233 3.6281 68.933904 2.377031 19.39157 6.630666 40.159316 12.635797 62.553451 6.005131 22.519243 15.388149 42.41124 28.023946 60.051313 12.13537 16.889432 25.146487 30.651191 39.033354 41.285278 13.886866 10.634087 28.399267 18.891142 43.537202 24.896274 15.137935 6.005131 30.025657 10.133659 44.913378 12.260476 14.762615 2.126817 29.149908 3.127673 43.036775 3.127673 17.514966 0 34.904826-2.00171 52.169578-5.880024 17.264753-3.878314 33.403543-9.257911 48.541479-15.888577 15.137935-6.630666 28.524374-14.262187 40.409529-22.64435 11.760049-8.507269 21.01796-16.889432 27.648626-25.396701 15.76347-19.39157 27.148198-40.659743 34.404398-63.929627 7.2562-23.269884 12.385583-45.538913 15.388149-66.681979 3.002566-24.145632 4.503849-48.666585 4.503849-73.437752 4.253635-3.002566 7.506414-7.005987 10.008552-11.760049 2.377031-4.253635 4.378742-9.633232 5.880024-16.389005 1.501283-6.630666 1.62639-14.762615 0.500428-24.520952-1.251069-13.261332-3.753207-23.770312-7.756628-31.276726-3.878314-7.506414-8.257056-13.511546-13.136225-17.640074-5.379597-4.879169-11.134514-8.131949-17.264752-10.008552-1.251069-3.6281-2.377031-7.506414-3.628101-11.760049l-4.503848-12.635797c-1.125962-4.378742-2.627245-8.88259-4.503849-13.761759zM734.46139 201.156261c-0.125107-0.125107-0.125107-0.125107 0 0h-1.125962c-0.875748 0-1.501283-0.625535-1.501282-1.501282v-24.145633c-0.750641-8.131949-0.500428-15.76347 1.000855-23.01967 0.125107-0.750641 0.750641-1.251069 1.501283-1.251069h2.627245c13.511546 0 24.395846-1.125962 32.652901-3.252779 1.000855-0.250214 1.876604 0.500428 1.876604 1.501283V165.375687c0 5.754918 0.375321 10.008552 1.251069 12.510691 0 0.125107 0.125107 0.375321 0.125107 0.500427-1.125962 16.764325-13.886866 24.395846-38.40782 22.769456zM664.901952 195.901772c-4.128528-0.125107-9.508125-0.500428-16.263897-1.251069h-13.761759c-0.250214 0-0.375321 0-0.625535-0.125107-1.62639-0.750641-3.252779-0.625535-4.879169 0.125107-0.500428 0.250214-1.000855 0.500428-1.501283 0.625534-1.125962 0.375321-2.126817-0.500428-2.00171-1.62639 0.625535-5.379597 1.000855-11.509835 1.000855-18.140501v-0.125107c0.875748-6.005131 1.251069-15.388149 1.251069-28.149053v-1.000855c0-0.875748 0.625535-1.501283 1.501283-1.501283 10.383873 0.125107 21.768601 0.875748 34.279291 2.377031 0.750641 0.125107 1.376176 0.750641 1.376176 1.501283v15.137935 0.250214c0.875748 5.129383 1.251069 13.261332 1.251069 24.270739v6.130239c-0.125107 0.875748-0.750641 1.62639-1.62639 1.501283zM967.285337 268.839096c-15.137935 34.779719-35.53036 65.180696-61.177276 91.202932-25.646915 26.022236-55.922786 46.539768-90.702504 61.677703-34.779719 15.137935-71.811362 22.644349-111.09493 22.64435-39.909102 0-77.190959-7.506414-111.970678-22.64435-34.779719-15.137935-65.055589-35.655467-90.702505-61.677703-25.646915-26.022236-46.164447-56.423213-61.177275-91.202932-15.137935-34.779719-22.644349-71.811362-22.64435-111.09493s7.506414-76.315211 22.64435-111.09493c15.137935-34.779719 35.53036-65.180696 61.177275-91.202932 25.646915-26.022236 55.922786-46.414661 90.702505-61.177275 34.779719-14.762615 72.061576-22.269029 111.970678-22.269029 39.283568 0 76.315211 7.381307 111.09493 22.269029 34.779719 14.762615 65.055589 35.280147 90.702504 61.177275 25.646915 26.022236 46.164447 56.423213 61.177276 91.202932 15.137935 34.779719 22.644349 71.811362 22.644349 111.09493s-7.631521 76.315211-22.644349 111.09493zM810.02596 76.8h-0.125107c-12.385583-0.750641-22.018815 4.378742-28.774588 15.513256-0.375321 0.625535-1.125962 0.875748-1.876603 0.625534-3.878314-1.376176-7.631521-1.62639-11.509835-0.875748h-29.400123c-0.875748 0-1.501283-0.625535-1.501282-1.501283V70.294441c0.875748-8.507269 1.251069-14.512401 1.251069-17.890287-0.875748-30.776298-14.512401-46.539768-40.909958-47.415516h-0.125106c-26.397557 0.875748-39.658888 16.263897-39.658889 46.164447 0 10.759194 0.750641 21.518387 2.377031 32.277581 0.125107 0.500428-0.250214 0.750641-0.500427 1.125962-0.125107 0.250214 0.125107 0.625535 0.625534 1.125962 0.875748 0.875748 0.250214 2.502138-1.125962 2.502138h-20.642639c-6.130238 0-11.259621 0.625535-15.388149 2.126818-0.750641 0.250214-1.501283-0.125107-1.876603-0.750642-5.379597-10.258766-15.76347-15.388149-31.401833-15.388149-22.269029 0-33.278436 23.520098-33.278436 70.435186 0 14.512401 0.875748 29.024801 2.502138 43.537203 1.751497 13.636652 3.002566 27.773732 3.878314 42.286133v0.125107c0 5.880024-0.375321 11.009407-1.251069 15.263042v0.250214c0 2.752352-0.250214 5.880024-0.875748 9.25791-0.125107 1.000855 0.750641 1.876604 1.751496 1.751497 13.386439-2.502138 24.520953-6.255345 33.403543-11.009407 0.125107-0.125107 0.375321-0.125107 0.500428-0.125107 7.631521-0.875748 16.514111-0.375321 26.522663 1.251069h0.125107c8.88259 0.750641 20.267318 2.752352 34.404398 5.754917 1.125962 0.250214 1.62639 1.751497 0.750642 2.502138l-5.754918 5.754918c-7.631521 6.88088-11.134514 14.887721-10.258766 24.395846 0 3.6281 0.625535 7.2562 1.876604 10.8843 0.250214 0.875748 1.251069 1.251069 2.126817 0.875749 1.751497-0.750641 4.128528-0.875748 7.256201-0.375321h0.500427c3.377886-0.750641 8.006842 1.000855 13.76176 5.129383h0.125106c9.383018 6.005131 19.141356 8.88259 29.400123 8.88259 27.273305-0.875748 41.410385-13.636652 42.286133-38.407819v-12.51069c0-0.875748 0.750641-1.501283 1.501283-1.501283 76.690531 2.00171 113.346854-32.527795 109.84386-103.83873v-5.129383c3.002566-50.167868-10.759194-74.438607-40.534636-72.812217z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gaoji" unicode="&#59385;" d="M563.001053 473.369088c-30.705022-12.606533-58.913701-29.581667-84.626036-50.675768-25.587518-21.0941-47.804973-45.183813-66.527547-72.393954-18.722574-27.210141-33.201365-56.916626-43.436373-89.119454-10.235007-32.327645-15.352511-66.153096-15.352511-101.850804 0-31.329108 4.118966-61.410044 12.232082-89.993174 8.113116-28.707947 19.471477-55.668454 33.950268-81.006339h-24.464164c-17.474403 0-37.8196 0.624086-61.035592 1.747441-23.215992 1.248172-47.180887 2.870795-71.894686 4.992686-24.713798 2.121892-49.302779 4.493418-73.766942 7.239396-24.464164 2.870795-46.681619 5.741589-66.527548 8.737201-19.845929 2.995612-36.821063 5.991224-50.675768 9.111653-13.854705 2.995612-22.591906 5.991224-26.211604 9.111653-6.61531 4.867869-11.607996 19.721112-14.97806 44.809361-3.370063 25.08825-1.997075 57.16626 4.118967 96.358849 2.371526 15.102877 7.364213 27.459776 14.978059 37.070697 7.48903 9.610922 16.7255 17.973671 27.584593 24.838616 10.859093 6.989761 22.966358 12.481716 36.196977 16.725499 13.230619 4.243784 26.83569 8.237933 40.690395 12.232082 13.854705 3.869332 27.334959 8.113116 40.315944 12.606534 12.980985 4.493418 24.838615 10.11019 35.697708 16.7255 12.731351 7.863481 22.467089 15.477328 29.45685 23.091175 6.989761 7.48903 11.85763 14.978059 14.97806 22.217454 2.995612 7.239395 4.493418 14.728425 4.493418 22.591907 0 7.863481-0.249634 16.600683-0.87372 26.211604-1.248172 13.854705-5.991224 24.838615-14.478791 33.076548-8.487567 8.113116-17.848854 16.475865-28.083862 24.838615-4.867869 4.243784-9.23647 10.11019-13.105802 17.59922-3.869332 7.48903-7.364213 15.227694-10.359824 23.091175-2.995612 8.986836-5.991224 18.348123-9.111653 28.083862-4.243784 1.248172-8.487567 3.370063-12.606534 6.365675-3.619698 2.995612-7.48903 7.239395-11.732813 12.606533-4.243784 5.491955-7.863481 13.230619-10.859093 23.465627-2.995612 10.235007-4.243784 19.596294-3.619698 28.083862 0.624086 8.487567 2.371526 15.976597 5.367138 22.591906 2.371526 6.61531 6.365675 12.980985 11.732814 18.972209 0 22.966358 1.248172 45.807899 3.619697 68.774256 2.371526 19.34666 6.61531 40.066309 12.606534 62.408581 5.991224 22.467089 15.352511 42.313018 27.959044 59.912238 12.107265 16.850317 25.08825 30.580205 38.942955 41.189664 13.854705 10.609459 28.333496 18.847392 43.436372 24.838615 15.102877 5.991224 29.956119 10.11019 44.809362 12.232082 14.728425 2.121892 29.082399 3.120429 42.937103 3.120429 17.474403 0 34.823988-1.997075 52.048757-5.866407 17.224768-3.869332 33.326182-9.23647 48.429059-15.851779 15.102877-6.61531 28.458313-14.229157 40.315944-22.591907 11.732813-8.487567 20.969283-16.850317 27.584592-25.337884 15.726962-19.34666 27.085324-40.565578 34.32472-63.78157 7.239395-23.215992 12.356899-45.433447 15.352511-66.527547 2.995612-24.089712 4.493418-48.553876 4.493418-73.267674 4.243784-2.995612 7.48903-6.989761 9.985373-11.732814 2.371526-4.243784 4.368601-9.610922 5.866406-16.351048 1.497806-6.61531 1.622623-14.728425 0.499269-24.464164-1.248172-13.230619-3.744515-23.715261-7.738664-31.20429-3.869332-7.48903-8.237933-13.480254-13.105802-17.59922-5.367138-4.867869-11.108727-8.113116-17.224768-9.985373-1.248172-3.619698-2.371526-7.48903-3.619698-11.732813l-4.493418-12.606534c-1.123354-4.368601-2.62116-8.862019-4.493418-13.729888zM675.960585 193.778645c16.975134 1.74744 34.32472 2.995612 52.048757 3.869332 5.117504 0 11.85763-0.374451 20.345197-1.248172v5.117504c0 5.866407-8.487567 8.862019-25.462701 8.862018h-1.248171c-8.487567 0-21.593369-0.374451-39.317407-1.248171s-30.954656-1.248172-39.317406-1.248172c0.87372-5.117504 1.74744-10.11019 2.496344-15.227694 10.11019-0.124817 20.22038 0.249634 30.455387 1.123355zM965.786036 267.920039c-15.102877 34.699171-35.448074 65.029742-61.035592 90.991711-25.587518 25.96197-55.793272 46.431984-90.492443 61.534861-34.699171 15.102877-71.645051 22.591906-110.83764 22.591907-39.816675 0-77.012189-7.48903-111.71136-22.591907-34.699171-15.102877-64.904924-35.572891-90.492443-61.534861-25.587518-25.96197-46.057533-56.29254-61.035593-90.991711-15.102877-34.699171-22.591906-71.645051-22.591906-110.83764s7.48903-76.138469 22.591906-110.83764c15.102877-34.699171 35.448074-65.029742 61.035593-90.991712 25.587518-25.96197 55.793272-46.307167 90.492443-61.035592 34.699171-14.728425 71.894686-22.217455 111.71136-22.217455 39.192589 0 76.138469 7.364213 110.83764 22.217455 34.699171 14.728425 64.904924 35.19844 90.492443 61.035592 25.587518 25.96197 46.057533 56.29254 61.035592 90.991712 15.102877 34.699171 22.591906 71.645051 22.591907 110.83764s-7.48903 76.138469-22.591907 110.83764z m-319.032667 13.480254c-3.370063 5.117504-5.117504 11.483179-5.117503 19.097025 7.613847-1.74744 19.097026-0.87372 34.324719 2.496344 12.731351 3.370063 22.467089 5.117504 29.207216 5.117503 29.581667-1.74744 45.683081-8.487567 48.304242-20.345197h33.076548c40.690395 0.87372 60.910775-8.862019 60.910775-29.207216-0.87372-11.85763-11.85763-17.349586-33.076548-16.475866h-114.332521c-23.715261-0.87372-45.30863-1.74744-64.780107-2.496343-3.370063 0-8.862019-0.374451-16.475865-1.248171h-16.475866c-27.085324 0-42.313018 13.105802-45.683081 39.317406 28.707947 0 58.788883 1.248172 90.117991 3.744515zM581.973262 234.469039c6.740127-0.87372 12.731351-1.74744 17.724037-2.496343 5.866407-0.87372 11.483179-1.74744 16.475865-2.496343 24.588981 1.74744 47.05607 2.995612 67.276451 3.869332 21.218918 1.74744 41.439298 2.496343 60.910775 2.496343 56.666992 0.87372 85.125305-12.731351 85.125305-40.690395 0-20.345197-12.232082-30.080936-36.821063-29.207216-16.101414-0.87372-27.085324 1.248172-33.076548 6.365676H748.104905c-12.731351 0-31.329108-0.87372-55.918089-2.496344-24.588981-0.87372-42.313018-0.87372-53.296928 0h-1.248172c-5.117504-5.991224-13.979522-8.487567-26.710872-7.613847-23.715261 0-35.572891 10.609459-35.572892 31.70356 0 4.243784 0.87372 9.735739 2.496344 16.475865 3.619698 10.11019 4.867869 18.098489 4.118966 24.089712z m219.678206-227.416869c-25.462701 0-40.191126 7.613847-44.43491 22.84154-3.370063-2.496343-8.113116-3.869332-13.979522-3.869332-10.98391 0.87372-18.223306 4.243784-21.593369 10.110191-5.991224-1.74744-16.475865-2.121892-31.70356-1.248172h-12.73135c-2.496343-5.866407-8.487567-9.361287-17.724037-10.11019-19.471477 0.87372-29.207216 12.232082-29.207216 34.324719 0 5.117504 0.87372 12.731351 2.496343 22.841541 2.496343 14.353974 3.370063 25.462701 2.496343 33.076548 10.98391 0 19.845929-1.248172 26.710873-3.869332 8.487567 1.74744 16.475865 2.995612 24.089712 3.869332 7.613847 1.74744 15.227694 2.496343 22.841541 2.496343 41.439298 1.74744 61.784495-15.726962 60.910775-52.048756v-2.496344c5.866407 1.74744 8.862019 8.862019 8.862019 21.593369 3.370063 32.202828-12.731351 45.683081-48.304242 40.690395h-8.862019c-15.227694 0-36.821063-1.74744-64.780107-5.117503-10.98391-0.87372-21.967821-1.74744-33.076548-2.496343h-1.248171c0.87372-5.117504 1.248172-11.483179 1.248171-19.097026 0.87372-5.991224 1.248172-15.227694 1.248172-27.959045v-7.613847c1.74744-38.069235-8.862019-56.666992-31.703559-55.918088-25.462701 0-37.694783 19.845929-36.821063 59.662603 0 8.487567 1.248172 21.0941 3.869332 38.069235 3.370063 23.715261 4.243784 41.938567 2.496343 54.669917 12.731351-0.87372 22.841541-2.995612 30.455388-6.365675 15.227694 0.87372 30.455388 2.496343 45.683081 5.117503 36.446611 5.117504 64.780107 7.613847 85.125305 7.613847 48.304242 0.87372 80.007801-4.618235 95.235495-16.475865 19.471477-11.85763 29.207216-33.825451 29.207216-66.028279 4.493418-52.548025-11.233545-77.885909-46.806436-76.263286zM702.671458 81.942467c-3.370063 0-7.613847-0.374451-12.731351-1.248172h-8.862018v-7.613846c0.87372-4.243784 1.248172-7.239395 1.248171-8.862019 7.613847 0.87372 15.602145 1.74744 24.089713 2.496343 0.87372 0 2.496343-0.374451 5.117503-1.248171h5.117504c-0.87372 10.98391-5.616772 16.475865-13.979522 16.475865z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xinshouyindao" unicode="&#59386;" d="M414.633466 363.571028a93.696 93.696 0 1 1 182.376464 43.064918 93.696 93.696 0 1 1-182.376464-43.064918ZM512 896C229.888 896 0 666.112 0 384s229.888-512 512-512 512 229.888 512 512c2.56 282.112-227.328 512-512 512z m289.28-254.464l-130.048-396.288c-3.072-9.728-12.8-19.456-23.04-23.04L251.904 92.16c-9.728-3.072-23.04-3.072-26.112 3.072-6.656 6.656-9.728 16.384-3.072 26.112l130.048 396.288c3.072 9.728 12.8 19.456 23.04 23.04L771.584 670.72c9.728 3.072 23.04 3.072 26.112-3.072 6.656-6.656 9.728-16.384 3.584-26.112z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="hebing" unicode="&#59382;" d="M42.13191111 750.28593778c1.42449778 0.71224889 224.27192889-1.42677333 224.27192889-1.42677333l152.06286222-247.09233778-49.42620444-81.72202667-145.8688 236.86826667H43.55754667s-53.45848889 46.32917333-1.42563556 93.37287111zM1001.97148445 402.93831111L765.57994667 567.82051555l0.71111111-115.46624H515.40195555L330.08412445 110.22904888999994s-270.84572445 0.94549333-271.80487112 0.94549333c-66.50993778-51.78481778 0-92.17820445 0-92.17820444l313.14488889 0.47672889L550.57294222 361.11928889l217.61251556-1.90577778v-110.23018666l233.78602667 153.95498666z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yewu" unicode="&#59358;" d="M867.19967787 664.31713173L150.4749248 664.31713173l0-70.078192 716.72366187 0L867.19858667 664.31713173 867.19967787 664.31713173zM867.19967787 546.456272L150.4749248 546.456272l0-73.2654496 716.72366187 0L867.19858667 546.456272 867.19967787 546.456272zM867.19967787 788.54923307L150.4749248 788.54923307l0-70.078192 716.72366187 0L867.19858667 788.54923307 867.19967787 788.54923307zM418.04957547 259.76898987000004L612.3598688 259.76898987000004l143.3480064 108.3012704 111.49180267 0 0 47.78376L150.4749248 415.85402133 150.4749248 368.07026026999995l130.60225067 0L418.04957547 259.76898987000004 418.04957547 259.76898987000004zM757.2807648 301.17714347000003l-143.3480064-108.3001792L419.62246507 192.87696532999996l-136.9724 108.3001792L34.1847712 301.17714347000003l0-321.7263776 955.62936533 0L989.81413653 301.17714347000003 757.2807648 301.17714347000003 757.2807648 301.17714347000003zM757.2807648 301.17714347000003"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yewuguanli" unicode="&#59364;" d="M663.141 760.946v-3.030c-0.607 1.211-0.607 2.423 0 3.030-0.607 1.211 0 1.815 0 3.030v-3.030zM435.978 307.828c0-41.82 33.901-75.722 75.722-75.722s75.722 33.901 75.722 75.722-33.901 75.722-75.722 75.722-75.722-33.901-75.722-75.722zM662.535 232.106c-11.508 0-23.020-5.452-29.681-14.54-27.26-36.951-71.481-60.577-121.154-60.577-49.674 0-93.29 23.626-121.154 60.577-7.269 9.693-18.174 14.54-29.683 14.54h-302.283c-20.596 0-37.557-16.962-37.557-37.557v-226.56c0-20.595 16.962-37.557 37.557-37.557h906.841c20.596 0 37.557 16.962 37.557 37.557v226.56c0 20.596-16.961 37.557-37.557 37.557h-302.885zM285.138 799.108v-491.28h642.118v491.28c0 20.598-16.961 37.559-37.557 37.559h-567.003c-20.596 0-37.559-16.961-37.559-37.559zM758.249 440.491h-301.675c-18.778 0-36.347 13.327-38.769 32.106-3.030 23.020 15.143 43.010 36.951 43.010h301.675c18.779 0 36.347-13.328 38.77-32.106 3.027-23.019-15.145-43.010-36.953-43.010zM758.249 610.714h-301.675c-18.778 0-36.347 13.327-38.769 32.106-3.030 23.019 15.143 43.009 36.951 43.009h301.675c18.779 0 36.347-13.327 38.77-32.106 3.027-23.018-15.145-43.009-36.953-43.009zM209.418 307.828h-113.279v415.558c0 20.598 16.962 37.559 37.557 37.559h75.722v-453.118h0.001z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shouzhi" unicode="&#59372;" d="M520.5 573.6h45.9c122.7 0 208.6 1.1 331.9 1.1 86.6 0 118.7-43 118.7-89.4 0.6-43.6-28.1-84.3-100.3-86-38.4-1.1-75.7-0.6-122.7 1.1-22.4 0.6-31.5-6.3-28.7-28.7 4-35-1.7-66.5-30.4-90.6-12.6-10.9-6.3-26.4-5.2-40.1 3.4-38.4-5.2-73.4-36.1-98.6-16-13.8-15.5-29.2-13.8-46.4 3.4-36.7-9.2-76.2-42.4-96.3-32.7-20.1-74.5-16-111.2-14.9-71.7 2.3-144.4-1.1-216.1 8.6-73.9 10.3-144.4 36.7-214.4 63.6-54.4 21.4-84.7 42-82.4 104.5 2.9 102.6 1.7 205.8 0.6 308.4-0.6 29.8 14.3 43.6 39.6 51 99.2 28.1 188 77.4 266 144.4 36.7 31.5 75.1 60.2 109.5 95.2 33.8 34.4 95.7 28.7 123.8 2.3 34.4-32.1 39-83.1 10.3-125-12.8-19.5-25.4-38.4-42.6-64.2z m153.7-52.7H416.8c-13.2 0-30.4-3.4-29.8 19.5 0.6 15.5-1.1 26.9 20.6 34.4 42.4 13.8 72.8 46.4 100.9 80.8 17.2 21.2 25.8 38.4 5.2 61.3-23.5 25.8-40.7 4-55.6-8.6-103.7-90-204.6-184-341.1-226.4-12.6-4-41.8-5.2-40.1-41.8 5.2-95.7 2.9-191.4 0.6-287.2-0.6-21.8 12-33.8 24.1-38.4 69.4-26.9 141-57.3 215.5-66.5 57.3-6.9 115.2-8 173.1-8 39.6 0 119.8-17.2 133.6 35.5 12 45.3-32.1 47.6-61.9 49.9-18.9 1.1-39-6.3-38.4 28.1 0.6 31.5 18.9 25.2 36.1 25.2 20.1 0 40.1 1.7 60.2-0.6 32.1-3.4 47 6.9 46.4 41.3-1.1 56.7-63.6 42.4-103.7 42.4-17.8 0-21.2 12-21.8 28.1-0.6 26.9 13.2 26.4 31.5 25.8 31.5-0.6 63.1-1.7 94-0.6 33.2 0.6 45.3 27.5 45.9 40.1 0.6 13.8 2.9 40.7-22.4 42.4-35.5 2.3-69.9 1.1-92.9 2.3-17.2 1.1-36.7-5.2-37.3 26.4 0 29.8 17.2 26.9 36.1 26.9 108.3 0 217.2 1.1 325.6-0.6 26.9-0.6 44.1 6.3 44.1 35 0 25.8-19.5 33.8-43 33.8-81.9 1.2-165-1.1-248.1-0.5z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiantou-copy" unicode="&#59373;" d="M667.03701333 648.68124445l0-523.97738667 353.9456 261.9904zM418.97528889 530.38876445l205.71022222 0 0-290.41436445-205.71022222 0 0 290.41436445zM207.21436445 530.38876445l139.15818666 1e-8 0-290.41436446-139.15818666 0 0 290.41436445zM1.50528 530.38876445l102.85397333 0 0-290.41436445-102.85397333 0 0 290.41436445z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yewu1" unicode="&#59375;" d="M415.1193725 684.00288937h336.8806275v-83.10492656h-336.8806275zM415.1193725 480.892185h336.8806275v-83.11648313h-336.8806275zM223.56546406 196.87234593999995V660.88929563h59.99133282v-407.37708844h83.11648312V780.88351687H800.43453594v-523.90427062h83.11648218V827.01825a36.98175 36.98175 0 0 1-36.98175 36.98175H320.53854688a36.98175 36.98175 0 0 1-36.98175001-36.98175v-83.02402875H177.43073187a36.98175 36.98175 0 0 1-36.98175-36.98175v-510.14012531h-23.11359375A36.87773906 36.87773906 0 0 1 80.4460925 159.99460686999998v-219.11686781a36.87773906 36.87773906 0 0 1 36.87773812-36.87773906h789.32922469a36.87773906 36.87773906 0 0 1 36.87773906 36.87773906v219.11686781a36.87773906 36.87773906 0 0 1-36.87773906 36.87773907H641.34367062v-131.55101907H428.88351687V196.87234593999995z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yewu2" unicode="&#59380;" d="M656.47047111 745.75872v-2.91271111c-0.58254222 1.16508445-0.58254222 2.33016889 0 2.91271111-0.58254222 1.16508445 0 1.74762667 0 2.91271111v-2.91271111z m219.03587556-435.74158222H613.94488889c-15.14609778 0-29.70965333-9.32067555-34.95253334-23.88423111-9.90321778-28.54456889-36.70016-48.93354667-68.73998222-48.93354667s-58.83676445 20.38897778-68.73998222 48.93354667c-5.24288 14.56355555-19.22389333 23.88423111-34.95253333 23.88423111h-259.23128889c-60.00184889 0-108.93539555-48.93354667-108.93539556-108.93539556v-145.05301333c0-60.00184889 48.93354667-108.93539555 108.93539556-108.93539556h726.43015111c60.00184889 0 108.93539555 48.93354667 108.93539555 108.93539556V201.08174222000002c1.74762667 60.00184889-47.18592 108.93539555-107.18776888 108.93539556z m36.11761778-254.57095111c0-19.80643555-16.31118222-36.11761778-36.11761778-36.11761778H147.91111111c-19.80643555 0-36.11761778 16.31118222-36.11761778 36.11761778v145.63555555c0 19.80643555 16.31118222 36.11761778 36.11761778 36.11761778h236.51214222c25.04931555-43.69066667 72.23523555-72.81777778 125.82912-72.81777778s100.77980445 29.12711111 125.82912 72.81777778h238.84231112c19.80643555 0 36.11761778-16.31118222 36.11761777-36.11761778l0.58254223-145.63555555zM729.87079111 564.58808889H438.01713778c-19.80643555 0-36.11761778 16.31118222-36.11761778 36.11761778s16.31118222 36.11761778 36.11761778 36.11761778h291.85365333c19.80643555 0 36.11761778-16.31118222 36.11761778-36.11761778s-16.31118222-36.11761778-36.11761778-36.11761778z m0-145.63555556H438.01713778c-19.80643555 0-36.11761778 16.31118222-36.11761778 36.11761778s16.31118222 36.11761778 36.11761778 36.11761778h291.85365333c19.80643555 0 36.11761778-16.31118222 36.11761778-36.11761778s-16.31118222-36.11761778-36.11761778-36.11761778zM256.26396445 709.64110222v-408.94464c0-19.80643555 16.31118222-36.11761778 36.11761777-36.11761777H366.36444445c19.80643555 0-37.86524445 16.31118222-37.86524445 36.11761777V709.64110222c0 19.80643555 16.31118222 36.11761778 36.11761778 36.11761778h437.48920889c19.80643555 0 36.11761778-16.31118222 36.11761778-36.11761778v-408.94464c0-19.80643555 16.31118222-36.11761778 36.11761777-36.11761777s36.11761778 16.31118222 36.11761778 36.11761777V709.64110222c0 60.00184889-48.93354667 108.93539555-108.93539555 108.93539556H365.19936c-60.58439111 0-108.93539555-48.93354667-108.93539555-108.93539556zM220.14634667 745.75872c-60.00184889 0-108.93539555-48.93354667-108.93539556-108.93539555V273.31697778h72.81777778V636.82332445c0 19.80643555 16.31118222 36.11761778 36.11761778 36.11761777h63.49710222v72.81777778h-63.49710222z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yewushenpi" unicode="&#59381;" d="M206.06255467 651.50753067h514.59476373v-56.93948587H206.06255467v56.93948587z m713.63682453-550.59112853c3.38482453 3.76140053 6.3941632 8.52918933 9.27797653 14.17456426 2.7604704 5.51548373 2.00731733 10.53650667-2.37952853 15.05106027l-8.02817813 8.2770464c-4.1379776 4.39012053-6.77401387 6.7707392-8.02817814 7.52280213-5.645376 3.7657664-10.9076256 4.39121173-15.92864746 1.63074027-5.13999893-2.6316704-10.0311296-6.64521387-15.1754944-11.66186987-12.7916-12.66825813-25.58320107-25.21208213-38.12702507-37.502672a5144.63998507 5144.63998507 0 0 1-35.61869653-34.8655424c-3.88910933-3.8912928-8.2759552-6.27409493-12.9193088-7.15168213-4.76342187-0.62435307-8.52918933 0.62871893-11.41300267 4.6433536l-7.90046933 8.15261227a552.58207253 552.58207253 0 0 0-11.41409387 12.53836586l-11.2842016 12.79596694c-3.76685867 4.1379776-6.27409493 7.14622507-8.0292704 8.6525312-3.38373227 2.75610453-7.15168213 4.5145536-11.28856747 5.39214186-4.1390688 0.75315307-8.5248224-0.62871893-12.91494293-4.51564586l-4.1390688-3.76140054c-2.50832853-2.00731733-4.76778773-4.2667776-6.77510613-6.650672-2.13066027-2.37952853-4.39012053-4.64008-6.64521387-6.52187093l-4.1390688-3.76140053c-8.28141227-8.90249067-7.27502507-19.19012907 3.5092576-30.72756587 3.3902816-3.88583467 7.7760352-8.65362347 13.42032-14.54568427 5.5198496-5.77308373 11.41300267-12.04390507 17.5582976-18.56468373 6.26972907-6.64739733 12.415024-13.16926827 18.56140907-19.56670613 6.14529493-6.3941632 11.41409387-11.538528 15.92755626-15.42327147 4.39121173-4.5145536 10.53650667-6.521872 18.436976-6.27409493 7.9048352 0.25323413 13.796896 2.50832853 17.5593888 6.898448 7.903744 7.27611627 16.8106016 15.92864747 26.8417312 26.21192 10.03549547 10.1599296 20.566544 20.57200213 31.47962774 31.23294293a1873.97873067 1873.97873067 0 0 1 31.98063786 31.2274848c9.78335253 10.41098133 19.313472 19.44554667 27.59488427 27.09278187zM805.69160747 268.10225920000005c25.21208213 0 48.7868736-4.76778773 71.11405013-14.42234133 22.45051947-9.78226133 42.01613333-22.9504384 58.82236907-39.50998933 16.67743467-16.55300053 30.09884587-36.11861547 39.75776533-58.19255787 9.78226133-22.19837653 14.67448427-45.77753493 14.67448427-70.73638187 0-25.58756693-4.89113067-49.41559253-14.67448427-71.4906272-9.7844448-22.19837653-23.20476373-41.63955733-39.75776533-58.32135893-16.80623573-16.55300053-36.3707584-29.59783573-58.82236907-39.00352-22.32717653-9.53121067-46.03186027-14.17456427-71.11405013-14.17456427-25.83425173 0-49.91660373 4.64335467-72.242688 14.17456427-22.32171947 9.5301184-42.01285973 22.45051947-58.69466134 39.00352-16.80514347 16.68070933-30.1032128 36.12298133-39.88547306 58.32135893-9.90778667 22.07503467-14.67448427 45.90196907-14.67448427 71.4906272 0 24.83441387 4.89113067 48.41029653 14.67448427 70.73638187 9.78226133 22.07503467 22.9515296 41.63955733 39.88547306 58.19255787 16.68070933 16.55845867 36.3729408 29.84997867 58.69466134 39.50998933 22.45051947 9.65455253 46.5317792 14.42234133 72.242688 14.42234133zM206.06255467 536.99874774h514.59476373v-56.93948587H206.06255467v56.93948587zM148.49434987 708.95130134h629.7322656v-286.5846784H148.49434987V708.95130134zM33.985568 17.640562140000043c0-29.22562453 26.46515413-52.80587413 57.5682048-52.80587414h527.00978773c-22.45051947 34.6166752-35.49098773 76.0040896-35.4909888 120.40520854 0 122.66030293 99.58106453 222.24136747 222.24136747 222.24136746a221.98376747 221.98376747 0 0 0 87.5426176-17.9359648V422.49542294h-57.569296V823.0835072h-743.733488v-400.58808426H33.985568v-404.8548608z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xiaoxi" unicode="&#59639;" d="M865.35152773 788.9776278100001H158.87421934c-56.1327416 0-96.87511846-43.60873359-96.87511846-103.68440157V164.41947868c0-58.07452588 38.85995303-97.12155146 96.87511845-97.12155234h207.03962725l123.89100206-120.9311086c6.64109737-6.67437451 15.38766739-10.01111221 24.13603563-10.01111221 8.85539619 0 17.60196621 3.44826211 24.35638624 10.12263663L659.86244932 67.18640192999999H865.35062862c57.79481484 0 96.65476787 39.04702646 96.65476786 97.12155234V685.29322624c0.00089912 60.07566885-40.63085244 103.68440156-96.65386875 103.68440156z m0-652.70366719H646.35630664c-9.07754502 0.22214971-18.26751445-3.2261124-25.13345977-10.12713311l-107.5041123-106.46261894-109.60778584 106.68746601c-6.97746885 6.89652422-16.05501474 10.23596016-25.13345977 9.90228604H158.87421934c-20.03841386 0-28.23095918 8.12149365-28.23095918 28.14551806l2.22149355 519.34838116c0 10.25035049 2.75213408 34.01943487 28.0672708 34.01943485h702.36079893c25.09748349 0 27.84961758-23.76908437 27.84961758-34.01943485l2.22149443-519.34838116c0-20.02402354-8.08282002-28.14551719-28.01240772-28.14551806z m-560.66456953 356.55425683c-33.63089854 0-60.89321425-27.39272783-60.89321425-61.18641562 0-33.79188867 27.26231573-61.18641563 60.89321425-61.18641563s60.89501338 27.39452607 60.89501338 61.18641563c0 33.79368779-27.26411484 61.18641563-60.89501338 61.18641562z m217.00307198 0c-33.63089854 0-60.89321425-27.39272783-60.89321426-61.18641562 0-33.79188867 27.26231573-61.18641563 60.89321426-61.18641563s60.89321425 27.39452607 60.89321425 61.18641563c0 33.79368779-27.26231573 61.18641563-60.89321425 61.18641562z m215.56404755 0.7797709c-33.63089854 0-60.89321425-27.39272783-60.89321425-61.1846165 0-33.79458691 27.26231573-61.18911387 60.89321425-61.18911387s60.89321425 27.39452607 60.89321426 61.18911387c-0.00089912 33.79188867-27.26321572 61.18461651-60.89321426 61.1846165z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wenjianjia3" unicode="&#59357;" d="M114.108442 19.181340019999993H921.85781299c31.495083 0 57.721473 26.928882 57.721473 58.423965V600.6110220200001c0 31.495083-26.226389 58.423965-57.721473 58.423965H546.49261799c-37.46627 1.522067-73.410473 24.704322-86.17242199 58.423966l-0.351246 0.351246c0.117082-0.351246 0.234164-0.819575 0.351246-1.170821L402.59872399 775.29750702c0.234164 0 0.58541 0 0.819574-0.117082l-0.819574 0.819575H114.108442c-30.20718 0-55.613995-24.821404-57.60439001-54.677338v-647.463984c2.107478-29.855934 27.39721-54.677338 57.60439001-54.677338z m224.44637599 387.190487l88.86531 12.761948c11.122799 1.756231 20.489367 9.366568 25.640978 19.669792l38.40292701 82.894123c5.151612 11.122799 15.337754 17.093986 26.46055399 17.093986 11.122799 0 21.308941-5.971187 26.46055301-17.093986l39.33958399-82.894123c4.214955-10.303224 14.51818-17.91356 25.640979-19.669792l88.86531-12.761948c23.884747-4.214955 34.187972-33.368397 17.093985-50.345301l-66.619711-68.375943c-7.727418-7.727418-11.122799-18.850217-9.36656799-29.036359l15.33775399-94.836497c3.395381-19.669792-11.942374-35.007546-29.036359-35.007546-5.151612 0-10.303224 0.819575-14.51817999 3.39538l-78.56208501 43.55454c-4.214955 2.575806-9.366568 3.395381-14.51817999 3.39538s-10.303224-0.819575-14.51818001-3.39538l-78.56208499-43.55454c-5.151612-2.575806-9.366568-3.395381-14.51818001-3.39538-17.093986 0-31.612166 15.337754-29.03635999 35.007546l16.274412 94.836497c1.756231 10.303224-1.756231 21.308941-9.36656801 29.036359l-66.61971199 68.375943c-17.211068 17.093986-7.024926 46.130345 16.85982199 50.345301zM403.41829799 775.18042502L459.96895 717.92728102c-7.727418 22.948091-29.62177 55.145667-56.55065201 57.253144zM460.320196 716.75646002c-0.117082 0.351246-0.234164 0.702493-0.351246 1.170821l-56.55065201 57.253144c-0.234164 0-0.58541 0.117082-0.819574 0.117082l57.72147201-58.541047z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="24gf-folderShare" unicode="&#60101;" d="M949.33333367 682.666667H525.25333367a10.573333 10.573333 0 0 0-7.54 3.126666L408.45999967 795.046667A52.986667 52.986667 0 0 1 370.74666667 810.666667H74.66666667a53.393333 53.393333 0 0 1-53.333333-53.333334v-704a53.393333 53.393333 0 0 1 53.333333-53.333333h874.666667a53.393333 53.393333 0 0 1 53.333333 53.333333V629.333333a53.393333 53.393333 0 0 1-53.333333 53.333334zM618.66666667 384a85.06 85.06 0 0 0-59.833333 24.553333l-71.673334-43a85.333333 85.333333 0 0 0-2.933333-56.726666l38.506667-28.88a85.193333 85.193333 0 1 0-25.626667-34.106667l-38.506667 28.88a85.333333 85.333333 0 1 0 6.566667 127.393333l71.673333 43A85.333333 85.333333 0 1 0 618.66666667 384z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="data-dictionary-active" unicode="&#59356;" d="M966.4 642.3995733300001c-19.2 0-34.39957333-15.19957333-34.39957333-34.39957333v-537.6h-328.79957334c-34.39957333 0-68.00042667-14.39971555-91.19971555-40.79957333-23.20042667 25.6-56.00028445 39.99971555-91.19971556 40.79957333h-329.60056889v537.6c-0.79985778 19.2-16.80042667 33.59971555-35.20056888 32.79985778-17.60028445-0.79985778-32-15.19957333-32.79985778-32.79985778v-549.60014222c0-32 25.6-58.39985778 56.80014222-58.39985778h340.79971556c24.00028445 0 44.8-16.00056889 52.79971555-37.60014222 4.80028445-12.8 16.80042667-20.79971555 30.40028445-20.79971556h14.39971555c13.59985778 0 25.6 7.99971555 30.40028445 20.79971556 7.99971555 22.40056889 28.80056889 37.60014222 52.79971555 37.60014222h342.40056889c31.20014222 0 56.80014222 26.39985778 56.80014222 58.39985778v549.60014222c0 19.2-15.19957333 34.39957333-34.39957333 34.39957333zM824.80014222 826.39985778h-221.60042667c-36.00042667 0-68.00042667-14.39971555-91.19971555-37.60014223-24.00028445 24.00028445-56.80014222 37.60014222-91.19971555 37.60014223h-221.60042667c-25.6 0-46.39971555-20.79971555-46.39971556-46.39971556v-622.39971555h268.00014223c25.6 0 48.00056889-15.19957333 54.40056888-36.00042667l2.39957334-24.80014222h68.00042666l2.39957334 24.80014222c6.4 21.59957333 28.80056889 36.00042667 54.40056888 36.00042667h268.00014223v622.39971555c0.79985778 25.6-19.99985778 46.39971555-45.59985778 46.39971556zM531.99985778 286.40028444999996c0-13.59985778-10.40042667-24.00028445-24.00028445-24.00028445s-24.00028445 10.40042667-24.00028444 24.00028445v368.00056888c0 13.59985778 10.40042667 24.00028445 24.00028444 24.00028445s24.00028445-10.40042667 24.00028445-24.00028445v-368.00056888z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chuangkou" unicode="&#59340;" d="M2.62033294 553.03235584l772.06849991 0 0-580.20198969-772.06849991 0 0 580.20198969ZM249.30883925 795.17079779L249.30883925 708.3877376 939.15598621 708.3877376 939.15598621 214.96764415999996 1021.37850311 214.96764415999996 1021.37850311 795.17079779ZM130.51465159 671.8265446400001L130.51465159 585.04464839 820.36063346 585.04464839 820.36063346 91.62339100999998 902.58547939 91.62339100999998 902.58547939 671.8265446400001Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuangchuangkouduibi" unicode="&#59341;" d="M0 639.36666667h879.4v-659.6H0V639.36666667zM145.2 776.26666667V676.66666667h784v-560h95.4V776.26666667H145.2z"  horiz-adv-x="1025" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhongduanchuangkou" unicode="&#59342;" d="M220.43761813 587.1616L342.18894187 456.81777813l-121.75132374-130.34382293 48.71509334-52.13752853 121.75132373 130.34382186L439.58272 456.81777813 269.15271147 639.29912853 220.43761813 587.1616zM512 274.77333333h254.86222187v72.81777814h-254.86222187v-72.81777814zM147.91111147-52.90666667000005h728.17777706v72.81777814H147.91111147v-72.81777814zM912.49777813 820.90666667H111.50222187a72.81777813 72.81777813 0 0 1-72.81777707-72.81777814v-582.54222186a72.81777813 72.81777813 0 0 1 72.81777707-72.81777814h800.99555626a72.81777813 72.81777813 0 0 1 72.81777707 72.81777814V748.08888853a72.81777813 72.81777813 0 0 1-72.81777707 72.81777814z m0-618.95111147a36.40888853 36.40888853 0 0 0-36.4088896-36.40888853H147.91111147a36.40888853 36.40888853 0 0 0-36.4088896 36.40888853V711.6800000000001a36.40888853 36.40888853 0 0 0 36.4088896 36.40888853h728.17777706a36.40888853 36.40888853 0 0 0 36.4088896-36.40888853v-509.7244448z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xinchuangkou0" unicode="&#59343;" d="M308.33333333 834v-749.99999971h900V834z m825.00000029-675H383.33333304V609h750.00000058zM158.33333304 534.00000029h75.00000058V609H83.33333333v-675h825.00000029v74.99999971H158.33333304V534.00000029z"  horiz-adv-x="1280" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tubiaozhizuomoban" unicode="&#59339;" d="M125.1104 839.0336H34.09066667v-728.18346667h273.06453333v-45.5104h-45.5104v-45.5104h-45.5104v-45.51466666h-45.51466667v-45.5104h682.67306667V-25.68533333000005h-45.51466667v45.51466666h-45.5104v45.5104H716.75733333v45.5104h273.06666667V839.03466667H125.1104z m773.6928-637.1584H125.1104V748.0096h773.6928v-546.1344zM216.1344 520.4544000000001h91.0208v-182.0448H580.224v-45.51466667h227.5552V429.4304h-45.5104V611.4752h-0.00426667v0.00853333H489.2v-45.51893333h227.55413333v-136.5344H580.224v-45.49226667H352.66986667V520.4544000000001h91.01973333V656.9941333300001H216.13013333v-136.5344h0.00426667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wangpan" unicode="&#59336;" d="M183.85566493 193.97880716999998c-13.43712939 0-24.0741285-10.91643051-24.0741285-23.69922616l0-126.71838094c0-12.87943168 10.63699911-23.2346715 24.0741285-23.23467151 12.69081657 0 22.58266681 10.35640491 22.5826668 23.23467151L206.43833173 170.27958215C206.43833173 183.06237667000005 196.54648035 193.97880716999998 183.85566493 193.97880716999998L183.85566493 193.97880716999998zM787.40060501 185.95564998999998L787.40060501 185.95564998999998c-43.11035335 0-78.19405539-35.55174969-78.19405539-78.84955421 0-43.20349639 35.08370318-78.38267165 78.19405539-78.38267165 43.10918827 0 78.19522048 35.17917525 78.19522048 78.38267165C865.59582549 150.40390143000002 830.50979442 185.95564998999998 787.40060501 185.95564998999998L787.40060501 185.95564998999998zM787.40060501 75.66081592L787.40060501 75.66081592c-17.54476203 0-31.54075307 13.99599104-31.54075306 31.445281 0 16.98357248 13.99599104 31.44644494 31.54075306 31.44644494 17.54243299 0 31.3533019-14.4628736 31.3533019-31.44644494C818.75390691 89.65797091000002 804.38301241 75.66081592 787.40060501 75.66081592L787.40060501 75.66081592zM1021.42856761 234.10390812000003L1021.42856761 234.10390812000003c0 1.8675291 0 4.66765938-0.18628722 6.34657223l-88.27568697 537.10444316c-2.79547221 20.52885049-12.50336427 40.12393586-26.68447857 54.02794781-13.99948402 15.11487829-33.40828217 24.16610759-56.73376882 24.16610759l-674.6507685 0c-23.5141029 0-44.60297899-9.0512293-59.71902236-25.19418084l-0.37373839 0c-14.55601664-14.4628736-23.5141029-34.33855431-24.07412849-56.73376882L3.39109547 243.15513740999995c-0.56119069-2.51836985-1.12005234-5.97283385-1.12005234-9.05006534l0-225.25732864 0-0.839457c2.42522681-41.14968007 28.92574606-77.07516814 70.91721216-87.9007835l0.93260004-0.27943026 1.68007793-0.37373838 1.12005234-0.37141049 0 0 0.93260003-0.09314304 0 0 2.05265238-0.18512327 0.18628722 0 1.3075035 0 1.12005234-0.65433373 0 0 0.93143608 0 0 0 3.73273032 0 1.3075035-1.21435932 1.30633956 0 3.35899078 0 834.02762468 0c51.87982336 0 94.42898603 43.11035335 94.42898603 94.71307435L1021.61369088 234.10390812000003 1021.42856761 234.10390812000003 1021.42856761 234.10390812000003zM168.17959595 764.77096391L168.17959595 764.77096391c0.5600256 2.51836985 0.5600256 4.66533035 0.5600256 6.06481294l0 0c0 2.33208263 0.55886165 3.73273031 1.67891399 4.57102222l0 0.28059534c1.12005234 0.83945699 2.42639075 1.39948259 4.47904313 1.3994826l674.6507685 0c0.37141049 0 1.11772331-0.37373838 1.49146168-0.5600256 2.23777565-2.70582215 3.91552455-6.71914667 5.22302806-11.75705145l56.17607224-343.11076637c-2.24243257 0-5.22768498 0-7.28033734 0l-786.24844914 0c-2.42522681 0-4.66533035 0-7.27800832 0L168.17959595 764.77096391 168.17959595 764.77096391zM103.60779207 370.24725674L103.60779207 370.24725674c4.47904313 2.98525241 9.33066069 4.75847339 15.30349454 4.75847339l786.24844914 0c5.41164317 0 11.19818979-1.77205703 15.30349454-4.75847339l12.50336427-73.62303317-5.78188971 0.65433372L96.88864541 297.27855729l-5.59909547-0.65433372L103.60779207 370.24725674 103.60779207 370.24725674zM943.6059227 11.647873699999991L943.6059227 11.647873699999991c0-8.77179904-7.27800832-16.32923762-16.42121785-16.32923762L96.32978375-4.681363919999967c-7.83919901 0.74631282-14.37089337 6.62483854-15.4909457 14.18344221l0 0-0.37257444 0.56119068L80.46626361 203.03120156c0.37257443 9.14553742 7.46545949 16.32807367 16.4223818 16.32807367l830.2948955 0c4.6641664 0 8.58201885-2.33208263 11.19353287-4.94359666l0-0.28175929c2.98525241-3.17153963 4.48020707-6.90426994 5.22768497-11.10271772L943.60475762 11.647873699999991 943.6059227 11.647873699999991zM356.29824 193.97880716999998L356.29824 193.97880716999998c-12.87826773 0-23.51526685-10.91643051-23.51526685-23.69922616l0-126.71838094c0-12.87943168 10.63699911-23.2346715 23.51526685-23.23467151 13.43712939 0 23.70039011 10.35640491 23.70039011 23.23467151L379.99863011 170.27958215C379.99863011 183.06237667000005 369.73536939 193.97880716999998 356.29824 193.97880716999998L356.29824 193.97880716999998zM270.07753443 193.97880716999998L270.07753443 193.97880716999998c-13.43712939 0-23.88784128-10.91643051-23.88784128-23.69922616l0-126.71838094c0-12.87943168 10.45071189-23.2346715 23.88784128-23.23467151 12.68965149 0 23.32781568 10.35640491 23.32781568 23.23467151L293.40535011 170.27958215C293.40418617 183.06237667000005 282.76718592 193.97880716999998 270.07753443 193.97880716999998L270.07753443 193.97880716999998z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xinhao61" unicode="&#59333;" d="M514.2755552 374.89777813m-129.70666667 0a6.08 6.08 0 1 1 259.41333334 0 6.08 6.08 0 1 1-259.41333334 0ZM284.4444448 142.79111147000003c-61.44 61.44-97.84888853 145.6355552-97.84888853 232.10666666 0 86.47111147 34.13333333 168.39111147 93.29777813 229.83111147l47.78666667-47.78666667c-47.78666667-47.78666667-75.09333333-113.77777813-75.09333334-182.0444448 0-70.54222187 27.30666667-134.25777813 77.36888854-184.32L284.4444448 142.79111147000003zM748.65777813 145.06666667000002l-47.78666666 47.78666666c47.78666667 47.78666667 75.09333333 113.77777813 75.09333333 182.0444448 0 70.54222187-27.30666667 136.53333333-77.36888853 184.32l47.78666666 47.78666667c63.7155552-61.44 97.84888853-145.6355552 97.84888854-232.10666667C841.9555552 288.42666667000003 810.09777813 206.50666666999996 748.65777813 145.06666667000002zM168.39111147 29.013333330000023c-93.29777813 93.29777813-143.36 216.17777813-143.36 345.8844448S75.09333333 629.76 168.39111147 720.7822218700001l47.78666666-47.78666667c-79.6444448-79.6444448-122.88-186.5955552-122.88-298.09777813 0-113.77777813 43.2355552-218.45333333 122.88-298.09777814L168.39111147 29.013333330000023zM862.4355552 29.013333330000023l-47.78666667 47.78666667c79.6444448 79.6444448 122.88 186.5955552 122.88 298.09777813 0 113.77777813-43.2355552 218.45333333-125.1555552 298.09777814l47.78666667 47.78666666c93.29777813-93.29777813 143.36-216.17777813 143.36-348.16C1005.7955552 245.19111147 955.73333333 122.31111147000001 862.4355552 29.013333330000023zM514.2755552 374.89777813"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tubiaoanquandunpai-huise" unicode="&#59334;" d="M512 853.333333L128 682.666667v-256c0-237.013333 163.626667-458.026667 384-512 220.373333 53.973333 384 274.986667 384 512V682.666667L512 853.333333z m0-468.906666h298.666667c-22.613333-175.786667-139.733333-332.373333-298.666667-381.226667V384H213.333333V627.2l298.666667 132.693333v-375.466666z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiekou" unicode="&#59335;" d="M826.82980373 775.93098027l128.50196054 128.50196053 70.67607893-64.25098027-128.50196053-128.50196053c44.9756864-77.10117653 38.55058773-186.3278432-32.12549014-250.57882347l-122.07686293-122.07686293L447.74901973 628.15372587l122.07686294 122.07686186c70.67607893 70.67607893 179.9027456 77.10117653 257.00392106 25.70039254z m-385.50588266-507.58274454l96.37647146 96.3764704 70.67607787-70.67607893L512 204.0972544l44.9756864-44.97568533-122.07686293-128.5019616c-64.25098027-64.25098027-160.62745067-77.10117653-237.7286272-38.55058774L62.24313707-142.85803947l-64.25098027 70.67607894 128.50196053 128.50196053c-64.25098027 77.10117653-57.82588267 192.7529408 19.27529494 269.85411733l122.07686186 122.07686294 51.40078507-51.400784 96.3764704 96.3764704 70.67607787-70.67607894L383.49803947 332.59921599999996l57.8258816-64.25098027z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="AppStore" unicode="&#59330;" d="M552.042923 595.30133867s21.102286 32.365742 0 53.468028c-21.102286 21.102286-53.423509 35.615672-53.423509 35.615673s-32.499301 34.992398-53.423508 0c-20.924208-34.947879-35.615672-71.231345-35.615673-71.231345l106.847018-71.275865 35.615672 53.423509zM35.615672-117.27922833000002l178.078363 142.50721L89.039181 114.26716266999995 35.615672-117.27922833000002z m356.156725 694.81725L106.847017 132.07499867l124.654854-71.231345 267.117543 463.22634-106.847017 53.423509z m-160.270526-195.975237H0v-124.699374h160.270526l71.231345 124.699374z m694.505613 0l71.231345-124.699374H1157.509355v124.699374h-231.501871z m-480.811578 0l-71.231345-124.699374h409.580233L712.313449 381.51826467h-267.117543z m534.235087-231.590911s-82.361243-28.626097-71.231345-71.275864c11.129898-42.694287 57.474791-88.861103 89.039181-106.891537 31.56439-18.074954 46.344894-35.036918 53.423509-71.275865 3.472528-24.886451 33.078056-10.239506 35.615672 53.423509 2.537617 63.707534-3.606087 229.142333-106.847017 196.019757z m17.807836 35.615673l-71.231345 106.891537-89.039181-53.423509 71.231345-106.936056 89.039181 53.468028zM605.466432 862.55244067s-17.585238 27.15695-53.423509 0c-35.83827-27.112431-53.423509-35.615672-53.423509-35.615672s-14.825024-12.955201 0-35.615673c14.825024-22.704991 302.733216-516.694368 302.733216-516.694368l106.847018 53.423509L605.466432 862.59696067z"  horiz-adv-x="1157" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daimashitu" unicode="&#59876;" d="M666.79845925 416.49114074l124.27567408-124.27567407-124.27567408-124.27567408c-7.76722963-7.76722963-7.76722963-15.53445925-7.76722962-23.30168889 0-7.76722963 0-15.53445925 7.76722962-23.30168889 7.76722963-7.76722963 15.53445925-7.76722963 23.30168889-7.76722962 7.76722963 0 23.30168889 0 31.06891853 7.76722962l147.57736296 147.57736296c7.76722963 7.76722963 7.76722963 15.53445925 7.76722962 23.3016889 0 7.76722963 0 15.53445925-7.76722962 15.53445925l-155.3445926 147.57736297c-7.76722963 7.76722963-15.53445925 7.76722963-31.06891851 7.76722963s-23.30168889 0-23.30168889-7.76722963c-7.76722963-7.76722963-7.76722963-23.30168889 7.76722962-38.83614815zM441.5488 121.33641480999995h31.06891852c7.76722963 7.76722963 15.53445925 7.76722963 23.30168888 23.30168889l108.74121482 287.3874963V463.09451852c-15.53445925 7.76722963-15.53445925 15.53445925-31.06891852 15.53445925h-31.06891852c0-7.76722963-7.76722963-15.53445925-15.53445926-23.30168888l-108.74121482-287.3874963v-31.06891852c7.76722963 0 15.53445925-7.76722963 23.3016889-15.53445926zM985.25487407 851.456c-15.53445925 15.53445925-23.30168889 15.53445925-46.60337777 15.53445926H76.4890074c-15.53445925 0-31.06891852-7.76722963-38.83614815-15.53445926-15.53445925-15.53445925-15.53445925-31.06891852-15.53445925-46.60337778v-854.39525925c0-15.53445925 7.76722963-31.06891852 15.53445925-46.60337778 15.53445925-15.53445925 23.30168889-15.53445925 46.60337778-15.53445927h862.16248889c15.53445925 0 31.06891852 7.76722963 46.60337778 15.53445927 15.53445925 15.53445925 15.53445925 23.30168889 15.53445927 46.60337778v854.39525925l-23.3016889 46.60337778z m-582.54222222-69.90506666c23.30168889 0 46.60337778-23.30168889 46.60337778-46.60337778s-23.30168889-38.83614815-46.60337778-38.83614815-46.60337778 15.53445925-46.60337778 46.60337778c0 23.30168889 23.30168889 38.83614815 46.60337778 38.83614815z m-132.04290371 0c23.30168889 0 46.60337778-23.30168889 46.60337778-46.60337778S301.73866667 696.11140741 270.66974814 696.11140741c-23.30168889 0-38.83614815 15.53445925-38.83614814 38.83614815 0 31.06891852 15.53445925 46.60337778 38.83614814 46.60337778zM146.39407407 781.55093334c23.30168889 0 46.60337778-23.30168889 46.60337778-46.60337778-7.76722963-23.30168889-23.30168889-38.83614815-46.60337778-38.83614815-31.06891852 0-46.60337778 15.53445925-46.60337777 38.83614815 0 31.06891852 15.53445925 46.60337778 46.60337777 46.60337778z m776.72296296-815.55911112H99.7906963V618.43911111H923.11703703v-652.44728889zM301.73866667 129.10364444000004c7.76722963-7.76722963 15.53445925-7.76722963 23.30168888-7.76722963 7.76722963 0 23.30168889 0 31.06891852 7.76722963 7.76722963 7.76722963 7.76722963 15.53445925 7.76722963 23.3016889 0 7.76722963 0 15.53445925-7.76722963 23.30168888L231.8336 299.98269630000004l124.27567407 124.27567407c7.76722963 7.76722963 7.76722963 15.53445925 7.76722963 23.30168889 0 7.76722963 0 15.53445925-7.76722963 23.30168888-7.76722963 7.76722963-15.53445925 7.76722963-31.06891852 7.76722963-7.76722963 0-15.53445925 0-23.30168888-7.76722963L146.39407407 323.28438518999997c0-7.76722963-7.76722963-15.53445925-7.76722963-23.30168889 0-7.76722963 0-15.53445925 7.76722963-23.30168889l155.3445926-147.57736297z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shujuzidian" unicode="&#59331;" d="M950.0576 648.6336c-17.9616 0-32.5088-15.7632-32.5088-35.20426667v-555.4528h-314.048c-33.00906667-0.08-64.4608-15.22346667-86.63893333-41.71626666-22.1824 26.48746667-53.63093333 41.63093333-86.63893334 41.71626666h-314.048V613.4304c-0.66346667 19.44213333-15.74506667 34.62186667-33.68746666 33.90293333-17.01333333-0.6816-30.6592-15.4688-31.28746667-33.90293333v-567.51573333c0-33.2576 24.26026667-60.31573333 54.10773333-60.31573334h324.91413334c23.12853333 0 42.88746667-16.21973333 50.64853333-38.97706666 4.4576-13.072 16.36586667-21.36213333 29.22666667-21.36213334h13.52746666c12.86186667 0 24.77013333 8.29013333 29.22773334 21.36213334 7.76106667 22.75626667 27.52 38.97706667 50.64853333 38.97706666h324.89173333c29.86986667 0 54.15253333 27.05813333 54.15253334 60.31573334V613.4304c0 19.44-14.5472 35.2032-32.48746667 35.2032zM239.8016 765.9968h190.42026667c29.84853333 0 54.15253333-22.27626667 54.15253333-49.6704v-509.67573333c-16.90026667 8.77226667-35.41333333 13.29066667-54.15253333 13.216H239.8016V765.9968z m242.46613333-655.89866667l2.10666667-25.20746666h64.97386667l2.08426666 25.20746666c6.2976 22.01173333 27.71946667 37.39093333 52.06826667 37.39093334h255.41653333V370.65493332999995c-0.66346667 19.44213333-15.74506667 34.62186667-33.68746666 33.90293334-17.01226667-0.6816-30.65813333-15.4688-31.2864-33.90293334v-150.78826666h-190.44266667c-19.42613333 0-37.85386667-4.68586667-54.15253333-13.216V716.3264c0 27.39413333 24.2816 49.6704 54.15253333 49.6704h190.42026667v-252.84373333c0-19.4496 14.5504-35.216 32.49813333-35.216s32.49813333 15.7664 32.49813333 35.216V790.3392c0 26.54293333-19.856 48.05973333-44.35093333 48.05973333H603.5008c-34.1504 0-64.90773333-14.87466667-86.63893333-38.544C493.86666667 824.68586667 462.6848 838.55786667 430.22293333 838.39893333H219.15626667c-24.49386667 0-44.35093333-21.5168-44.35093334-48.05973333v-642.85013333h255.41653334c24.3488 0 45.77066667-15.3792 52.04586666-37.39093334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tool-https" unicode="&#59879;" d="M472.46222187 789.04888853c-27.30666667 4.55111147-50.06222187-13.65333333-54.61333333-36.40888853L294.96888854 56.32000000000005c-4.55111147-22.7555552 13.65333333-50.06222187 36.4088896-54.61333333 22.7555552-4.55111147 50.06222187 13.65333333 54.61333333 36.40888853l122.88 696.32c4.55111147 27.30666667-13.65333333 50.06222187-36.4088896 54.61333333zM681.81333334 789.04888853c-27.30666667 4.55111147-50.06222187-13.65333333-54.61333334-36.40888853l-122.88-696.32c-4.55111147-22.7555552 13.65333333-50.06222187 36.40888854-54.61333333 22.7555552-4.55111147 50.06222187 13.65333333 54.61333333 36.40888853L718.22222187 734.4355552c4.55111147 27.30666667-13.65333333 50.06222187-36.40888853 54.61333333zM213.04888854 547.8399999999999c-13.65333333 18.2044448-45.51111147 18.2044448-63.7155552 0l-127.43111147-127.43111147c-9.10222187-9.10222187-13.65333333-22.7555552-13.65333333-36.40888853 0-13.65333333 4.55111147-27.30666667 13.65333333-36.40888853l127.43111147-127.43111147c18.2044448-18.2044448 45.51111147-18.2044448 63.7155552 0 18.2044448 18.2044448 18.2044448 45.51111147 0 63.7155552L112.9244448 384l100.12444374 100.1244448c18.2044448 18.2044448 18.2044448 45.51111147 0 63.7155552zM1000.39111147 420.40888853l-127.43111147 127.43111147c-18.2044448 18.2044448-45.51111147 18.2044448-63.7155552 0-18.2044448-18.2044448-18.2044448-45.51111147 0-63.7155552l100.12444374-100.1244448-100.12444374-100.1244448c-18.2044448-18.2044448-18.2044448-45.51111147 0-63.7155552 18.2044448-18.2044448 45.51111147-18.2044448 63.7155552 0l127.43111147 127.43111147c9.10222187 9.10222187 13.65333333 22.7555552 13.65333333 36.40888853 4.55111147 13.65333333 0 27.30666667-13.65333333 36.40888853z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biaodan1" unicode="&#59141;" d="M880.23521849-95.90797426999995H171.24706759a73.19471673 73.19471673 0 0 0-73.12618268 73.05764864V794.76481706c0 40.29821497 32.82796771 73.12618269 73.12618268 73.12618269h514.76172118c147.34891463 0 267.28407837-119.93516373 267.28407836-267.4211476v-623.32017778c0-40.22968093-32.75943367-73.05764864-73.05764864-73.05764864zM171.24706759 799.35661965l-4.59180373-822.20694528 713.57995463-4.52326968a4.45473451 4.45473451 0 0 1 4.52326969 4.52326968V600.46985215c0 109.65500701-89.16322759 198.88676864-198.74969941 198.8867675H171.24706759zM252.8029787 429.20243882h545.94486386v-68.53437895H252.8029787zM252.8029787 223.59930197000006h545.94486386v-68.53438009H252.8029787zM659.41744981 587.24271672h-228.90482688a72.92057941 72.92057941 0 0 0-72.78351018 72.85204537V833.55527509h68.53437895v-173.460513l233.15395811-4.31766642v-68.53437895z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="baomingbiaodan" unicode="&#59142;" d="M767.84-96c28.32 0 107.04 0 107.04 83.04V643.2L672.32 864H255.2C196.64 864 149.12 816.48 149.12 757.92v-770.88c0-46.08 37.44-83.04 83.04-83.04h535.68zM266.72 548.64c0 20.16 18.24 36.96 40.8 36.96h408.96c22.56 0 40.8-16.8 40.8-36.96s-18.24-36.96-40.8-36.96H307.52c-22.56 0-40.8 16.8-40.8 36.96z m0-200.64c0 20.16 18.24 36.96 40.8 36.96h408.96c22.56 0 40.8-16.8 40.8-36.96s-18.24-36.96-40.8-36.96H307.52c-22.56 0-40.8 16.8-40.8 36.96z m0-200.64c0 20.16 18.24 36.96 40.8 36.96h408.96c22.56 0 40.8-16.8 40.8-36.96s-18.24-36.96-40.8-36.96H307.52c-22.56 0-40.8 16.8-40.8 36.96z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiankong" unicode="&#59114;" d="M611.30524445 340.39466667l-100.1472 257.56103111-109.36206223-205.76142223-61.03836444 62.78940445-103.28291556-64.3584 29.13507556-16.79815111 66.18680889 41.25013333 79.85834666-82.22378667 92.46947556 173.93436445 102.24298666-263.09973333 87.18791112 183.56679111 35.53735111-75.61443556 38.95751111 6.53084445L694.77262222 516.14151111z m304.80270222-199.58215112V674.50652445c0 19.96913778-14.88668445 36.11420445-33.27431112 36.11420444H142.35079111c-18.38648889 0-33.27317333-16.14620445-33.27317333-36.11420444v-533.6940089H-0.04892445v-44.14464c0-19.97482667 14.90944-36.11306667 33.27431112-36.11306666h962.36657778c18.38762667 0 33.29706667 16.13937778 33.29706666 36.11306666v44.14464h-112.77994666z m-333.53841778-15.1552h-136.30577778v23.4348089h136.30577778v-23.4348089z m265.07946666 59.03473778H177.56046222V636.16910222h670.08853333v-451.47704889z m0 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shouqi" unicode="&#59140;" d="M904.43164063 759.8203125H119.65625C93.640625 759.8203125 72.546875 738.7265625 72.546875 712.7109375s21.09375-47.109375 47.109375-47.109375h784.77539063c26.015625 0 47.109375 21.09375 47.109375 47.109375s-21.09375 47.109375-47.109375 47.109375zM904.43164063 430.23046875H433.6015625c-26.015625 0-47.109375-21.09375-47.109375-47.109375s21.09375-47.109375 47.109375-47.109375h470.83007813c26.015625 0 47.109375 21.09375 47.10937499 47.109375s-21.09375 47.109375-47.109375 47.109375zM246.48242187 535.25976563L87.48828125 396.3046875c-7.29492188-6.328125-7.99804688-17.31445313-1.66992188-24.609375 0.52734375-0.61523438 1.0546875-1.14257813 1.66992188-1.66992188l159.08203125-138.60351562c3.60351563-3.1640625 9.140625-2.8125 12.3046875 0.87890625 1.40625 1.58203125 2.109375 3.60351563 2.109375 5.71289063V528.75585938c0 4.83398438-3.8671875 8.70117188-8.70117188 8.70117187-2.109375 0-4.21875-0.79101563-5.80078124-2.19726563zM904.43164063 100.640625H119.65625C93.640625 100.640625 72.546875 79.546875 72.546875 53.53125s21.09375-47.109375 47.109375-47.109375h784.77539063c26.015625 0 47.109375 21.09375 47.109375 47.109375s-21.09375 47.109375-47.109375 47.109375z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fanyi-full" unicode="&#59326;" d="M640 480h256c35.36 0 64-28.48 64-64v-416c0-35.36-28.48-64-64-64H480c-35.36 0-64 28.48-64 64V256h128c53.312 0 96 42.976 96 96V480zM64 768c0 35.36 28.48 64 64 64h416c35.36 0 64-28.48 64-64v-416c0-35.36-28.48-64-64-64H128c-35.36 0-64 28.48-64 64V768z m128-276.256h46.72v24.768h67.392V398.24h49.504V516.512h68.768v-20.64h50.88V652.64H355.616v34.368c0 10.08 1.376 18.784 4.16 26.112a10.56 10.56 0 0 1 1.344 4.16c0 0.896-3.2 1.792-9.6 2.72h-46.816v-67.36H192v-160.896z m46.72 122.368h67.392v-60.48h-67.36V614.08z m185.664-60.48h-68.768V614.08h68.768v-60.48z m203.84-488l19.264 53.632h100.384l19.264-53.632h54.976L732.736 320h-64.64L576 65.6h52.256z m33.024 96.256l37.12 108.608h1.376l34.368-108.608h-72.864zM896 576h-64a128 128 0 0 1-128 128v64a192 192 0 0 0 192-192zM128 192h64a128 128 0 0 1 128-128v-64a192 192 0 0 0-192 192z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xiangxia" unicode="&#58929;" d="M512.00263672 831.69638672c246.86806641 0 447.69287109-200.82568359 447.69287109-447.69990234 0-246.86806641-200.82568359-447.69287109-447.69287109-447.6928711-246.87333984 0-447.69990234 200.82568359-447.69990234 447.69287109 0 246.87509766 200.82568359 447.69990234 447.69990234 447.69990235v0ZM512.00263672 0.2589843700000074c211.59931641 0 383.73837891 172.13994141 383.73837891 383.73837891 0 211.60458984-172.13994141 383.74365234-383.73837891 383.74365234-211.60458984 0-383.74365234-172.13994141-383.74365234-383.74365234-0.00087891-211.5984375 172.1390625-383.73837891 383.74365234-383.73837891v0ZM329.66035156 330.40605469l158.38945313-160.14990235c9.33925781-9.46582031 23.15302734-11.83271484 34.76162109-7.12880859 0.73212891 0.28916016 1.3078125 0.99052734 2.01445313 1.34121094 2.97158203 1.46865234 5.9484375 3.06914063 8.44189453 5.53447265 0.02900391 0.02900391 0.02900391 0.06240234 0.06240234 0.09228516 0.02900391 0.03427734 0.06240234 0.03427734 0.09667969 0.06240234l159.24638672 158.8078125c12.50683594 12.47167969 12.53496094 32.71201172 0.06943359 45.21269532-6.23583984 6.27099609-14.45712891 9.40253906-22.640625 9.40253906-8.15800781 0-16.340625-3.09814453-22.57646484-9.33398438l-103.55009766-103.22402343v304.84599609c0 17.68271484-14.32617188 31.97988281-31.97460937 31.97988281-17.65371094 0-31.97988281-14.29804688-31.97988282-31.97988281v-306.54492188l-104.89042968 106.04091797c-6.23583984 6.33339844-14.48701172 9.49570313-22.73466797 9.49570313-8.12460938 0-16.24833984-3.06914063-22.4850586-9.24257813-12.56396484-12.40224609-12.68964844-32.64697266-0.253125-45.21269531v0ZM329.66035156 330.40605469Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="lihe" unicode="&#58936;" d="M549.67981156 429.62393198V645.74285104c-10.01995031 0-22.61988656 2.51998781-30.11984906 2.51998782h-2.51998781c-12.59993719-2.51998781-25.19987438-2.51998781-42.71978625-5.03997469v-213.59893219H32.0024V600.50307792c0 27.59986219 22.61988656 47.75976094 47.75976094 47.75976094h200.998995c-52.73973656 12.59993719-92.999535 35.15982375-95.45952281 77.87961-2.51998781 50.27974875 55.25972344 133.19933437 138.23930906 113.09943469 85.4395725-20.09989969 145.73927156-85.4395725 190.97904562-143.27928375 45.23977406 57.83971125 113.09943469 133.19933437 200.998995 145.79927156 77.99961 10.01995031 138.23930906-65.39967281 130.73934563-115.6194225-7.5599625-42.71978625-47.75976094-67.79966063-100.55949657-77.87961h198.59900626c27.59986219 0 47.69976188-22.61988656 47.69976187-47.75976094v-170.87914594H549.67981156zM333.5608925 794.00211042c-40.19979938 15.059925-65.33967375-2.51998781-82.91958562-30.17984906-10.07994937-14.999925-20.09989969-37.67981156-5.03997469-52.79973657 40.19979938-40.19979938 148.25925844-37.61981156 223.67888156-30.11984906C434.12038906 723.62246198 391.40060281 771.38222292 333.5608925 794.06210948z m452.39773781-82.91958563c27.59986219 37.67981156-27.65986125 113.09943469-88.01956031 85.4395725-57.77971125-27.59986219-97.97950969-70.37964844-135.65932125-115.61942156 30.11984906-2.51998781 62.81968594-2.51998781 92.999535-2.51998781 40.19979938 2.51998781 110.51944781 5.03997469 130.61934656 32.69983687zM476.78017625-85.59349177000001h-359.39820281a44.999775 44.999775 0 0 0-45.23977407 45.23977313V394.4641073h404.63797688v-479.9976z m474.95762531 45.23977313a44.999775 44.999775 0 0 0-45.23977406-45.23977313h-359.39820281V391.88412042h404.63797687v-432.23783906z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xiangmufujiaxinxiguanli" unicode="&#59322;" d="M988.775 190.55906249999998c-2.128125 11.574375-13.3125 23.3278125-24.886875 26.0259375l-8.6653125 1.9190625a86.3240625 86.3240625 0 0 0-59.008125 102.575625l2.698125 8.0953125c3.478125 11.184375-0.9590625 26.8059375-10.014375 34.5121875 0 0-8.09625 6.95625-31.0340625 20.05875-22.936875 13.1034375-32.7721875 16.7615625-32.7721875 16.7615625-11.184375 4.0471875-26.8059375 0.18-34.90125-8.4853125l-5.9671875-6.5671875a85.5440625 85.5440625 0 0 0-59.188125-23.536875 85.3940625 85.3940625 0 0 0-59.398125 23.716875l-5.7871875 6.1771875c-8.0953125 8.6653125-23.716875 12.5334375-34.90125 8.484375 0 0-10.044375-3.6571875-32.9821875-16.790625-22.9378125-13.3125-31.0340625-20.23875-31.0340625-20.23875-9.054375-7.52625-13.4925-22.9378125-10.044375-34.33125l2.5190625-8.30625a86.353125 86.353125 0 0 0-9.2653125-63.23625A85.3640625 85.3640625 0 0 0 494.009375 217.875l-8.30625-1.9190625c-11.3934375-2.6990625-22.7578125-14.2725-24.886875-26.0259375 0 0-1.9190625-10.4053125-1.9190625-36.82125s1.9190625-36.8203125 1.9190625-36.8203125c2.1290625-11.7534375 13.3125-23.326875 24.886875-26.025l8.09625-1.92a86.2940625 86.2940625 0 0 0 59.608125-102.7546875l-2.3090625-8.09625c-3.478125-11.184375 0.9590625-26.805 10.014375-34.51125 0 0 8.09625-6.95625 31.0340625-20.0596875 22.9378125-13.3125 32.7721875-16.760625 32.7721875-16.760625 11.184375-4.048125 26.8059375-0.18 34.90125 8.4853125l5.7871875 6.1771875a86.2040625 86.2040625 0 0 0 118.79625 0l5.7871875-6.1771875c8.0953125-8.6653125 23.716875-12.5334375 34.90125-8.4853125 0 0 10.044375 3.658125 32.9821875 16.760625 22.9378125 13.3125 31.0340625 20.0596875 31.0340625 20.0596875 9.0553125 7.52625 13.4925 23.146875 10.014375 34.51125l-2.5190625 8.27625a85.9040625 85.9040625 0 0 0 9.2653125 63.05625 85.575 85.575 0 0 0 50.34375 39.5184375l8.0953125 1.9190625c11.3634375 2.6990625 22.7578125 14.2725 24.886875 26.0259375 0 0 1.9190625 10.4053125 1.9190625 36.8203125-0.6 27.0159375-2.3390625 37.4503125-2.3390625 37.4503125zM724.765625 47.475937499999986a105.96375 105.96375 0 1 0 0 211.9265625 105.93375 105.93375 0 1 0 0-211.9265625z m0 0M688.1553125 864H112.3128125A79.6378125 79.6378125 0 0 1 32.705 784.5421875v-732.1790625a79.6078125 79.6078125 0 0 1 79.6078125-79.4278125h324.0665625S302.800625 482.5734375 767.793125 482.5734375v301.96875A79.6378125 79.6378125 0 0 1 688.1553125 864z m-300.290625-531.166875H217.7075a34.69125 34.69125 0 0 0 0 69.3234375H387.865625a34.63125 34.63125 0 0 0 0-69.3234375z m167.371875 159.965625H217.7065625a34.66125 34.66125 0 0 0 0 69.3225h337.53a34.63125 34.63125 0 0 0 0-69.3234375z m0 157.265625H217.7065625a34.63125 34.63125 0 0 0 0 69.3225h337.53a34.63125 34.63125 0 0 0 0-69.3225z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xiaochengxu2" unicode="&#59328;" d="M512-84.11428587A468.11428587 468.11428587 0 1 0 512 852.11428587a468.11428587 468.11428587 0 0 0 0-936.22857174z m129.74567573 756.08259094c-29.4131808 0-58.12419093-7.33379093-83.2463232-22.62552427-47.7476576-26.99459093-76.45866667-74.58620907-76.45866666-126.62491413v-255.6684192c0-29.95931413-17.16419093-57.5000384-45.9532192-73.96205654a110.78704747 110.78704747 0 0 0-53.8331424-14.04342933c-54.92540907 0-99.63032427 39.71169493-99.63032427 88.00548587 0 14.8236192 3.58887573 28.71100907 11.5468192 41.66217173 11.5468192 19.5047616 32.29988587 34.79649493 58.6703232 42.83245653 3.1207616 1.17028587 5.53935253 1.17028587 6.7876576 1.17028587 17.16419093 0 30.58346667 13.41927573 30.58346667 30.58346667a30.27139093 30.27139093 0 0 1-30.58346667 30.58346666 92.84266667 92.84266667 0 0 1-25.74628587-4.21302826c-39.1655616-11.7028576-71.54346667-36.2008384-91.7504-69.20289494a143.55504747 143.55504747 0 0 1-20.75306666-73.41592426c0-82.62217173 72.0896-149.2504384 160.8752768-149.2504384 29.4131808 0 58.12419093 7.41180907 83.79245653 22.07939093 47.7476576 26.99459093 76.45866667 74.58620907 76.45866667 126.62491413V522.7178666699999c0 29.95931413 17.16419093 57.5000384 45.9532192 73.9620576a110.78704747 110.78704747 0 0 0 53.8331424 14.04342826c54.37927573 0 99.08419093-39.78971413 99.08419093-88.00548586 0-14.8236192-3.58887573-28.71100907-11.5468192-41.66217174-11.5468192-20.20693333-32.29988587-35.49866667-58.6703232-42.83245653-3.1207616-1.17028587-5.53935253-1.17028587-6.7876576-1.17028587a30.27139093 30.27139093 0 0 1-30.58346667-30.58346666c0-17.16419093 13.41927573-30.58346667 30.58346667-30.58346667 7.33379093 0 15.29173333 1.17028587 25.74628587 4.21302827 39.1655616 11.7028576 71.54346667 36.2008384 91.7504 69.20289493a143.55504747 143.55504747 0 0 1 20.75306666 73.41592427c0 82.62217173-72.0896 149.2504384-160.8752768 149.2504384z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tianjiayuding" unicode="&#59329;" d="M301.8752 260.98346667l87.10826667-87.10826667c-85.8112-72.63573333-211.08053333-185.41226667-236.9536-205.68746667C86.2208-83.42186666999999 27.98933333-100.01066666999998 27.98933333-100.01066666999998s16.5888 58.23146667 68.1984 124.04053334c20.2752 25.87306667 133.05173333 151.1424 205.68746667 236.9536z m675.56693333 355.328l-233.13066666 233.13066666c-24.71253333 24.71253333-64.7168 24.71253333-89.36106667 0-24.71253333-24.71253333-24.71253333-64.7168 0-89.36106666l18.56853333-18.56853334-340.51413333-240.50346666-75.3664 75.29813333c-24.71253333 24.71253333-64.7168 24.71253333-89.36106667 0-24.71253333-24.71253333-24.71253333-64.7168 0-89.36106667l446.6688-446.60053333c24.71253333-24.71253333 64.7168-24.71253333 89.36106667 0 24.71253333 24.71253333 24.71253333 64.7168 0 89.36106667l-75.29813333 75.29813333 240.50346666 340.5824 18.56853334-18.56853333c24.71253333-24.71253333 64.7168-24.71253333 89.36106666 0s24.71253333 64.64853333 0 89.2928z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jianshaoshuzi" unicode="&#59325;" d="M838.82666667 825.38666667H178.77333333c-59.62666667 0-108.16-48.53333333-108.16-108.16v-660.05333334c0-59.62666667 48.53333333-108.16 108.16-108.16h660.05333334c59.62666667 0 108.16 48.53333333 108.16 108.16V717.22666667c0 59.62666667-48.53333333 108.16-108.16 108.16zM882.13333333 57.17333332999999c0-23.89333333-19.41333333-43.30666667-43.30666666-43.30666666H178.77333333c-23.89333333 0-43.30666667 19.41333333-43.30666666 43.30666666V717.22666667c0 23.89333333 19.41333333 43.30666667 43.30666666 43.30666666h660.05333334c23.89333333 0 43.30666667-19.41333333 43.30666666-43.30666666v-660.05333334zM719.78666667 419.62666667H297.81333333c-17.92 0-32.42666667-14.50666667-32.42666666-32.42666667 0-17.92 14.50666667-32.42666667 32.42666666-32.42666667h421.97333334c17.92 0 32.42666667 14.50666667 32.42666666 32.42666667 0 17.92-14.50666667 32.42666667-32.42666666 32.42666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jia" unicode="&#60314;" d="M822.46564267-47.71951360000003H203.15636587c-67.9082368 0-123.155856 55.2476192-123.155856 123.155856V694.7412533300001c0 67.91369387 55.2476192 123.16131413 123.155856 123.16131414h619.3092768c67.9082368 0 123.155856-55.2476192 123.155856-123.16131414v-619.30381973c0-67.909328-55.2476192-123.1569472-123.155856-123.1569472z m-619.3092768 795.97395093c-29.50942187 0-53.50881707-24.00485333-53.50881814-53.513184v-619.30381973c0-29.5039648 23.9993952-53.50881707 53.50881814-53.50881707h619.3092768c29.50942187 0 53.50881707 24.00485333 53.50881813 53.50881707V694.7412533300001c0 29.50942187-23.9993952 53.513184-53.50881813 53.513184H203.15636587zM726.72893547 350.26746132999995H298.89307307c-19.229424 0-34.82406507 15.59027413-34.82406507 34.82406507 0 19.23379093 15.59464107 34.82406507 34.82406507 34.82406507h427.8358624c19.229424 0 34.82406507-15.59027413 34.82406506-34.82406507 0-19.23379093-15.59464107-34.82406507-34.82406506-34.82406507zM477.9874848 171.1730496V599.008912c0 19.229424 15.59027413 34.82406507 34.82406507 34.82406507 19.23379093 0 34.82406507-15.59464107 34.82406506-34.82406507v-427.8358624c0-19.229424-15.59027413-34.82406507-34.82406506-34.82406507-19.23379093 0.0010912-34.82406507 15.59573227-34.82406507 34.82406507z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yingyong3" unicode="&#59314;" d="M511.15064661-123.95398826999997c-68.59677127 0-135.15253419 13.43829333-197.81605831 39.94347065-60.51772871 25.5958619-114.86352839 62.23739221-161.5284736 108.90233743-46.66611029 46.66611029-83.30531043 101.01190997-108.90233742 161.5284736C16.39976391 249.08381753000003 2.96030663 315.63841649999995 2.96030663 384.23635171c0 68.59793635 13.43829333 135.15253419 39.94347065 197.81605832 25.59702699 60.51772871 62.23739221 114.86352839 108.90233742 161.5284736s101.01190997 83.30531043 161.5284736 108.90233742c62.66352413 26.50401223 129.21812195 39.94347065 197.81605831 39.94347065 68.59793635 0 135.15253419-13.43829333 197.81605832-39.94347065 60.51772871-25.59702699 114.86352839-62.23739221 161.52963868-108.90233742 46.66494521-46.66611029 83.30531043-101.01190997 108.90233742-161.5284736 26.50517731-62.66352413 39.94347065-129.21812195 39.94347065-197.81605832 0-68.59677127-13.43829333-135.15253419-39.94347065-197.8160583-25.59702699-60.51772871-62.23739221-114.86236445-108.90233742-161.5284736-46.66611029-46.66494521-101.01307392-83.30647552-161.52963868-108.90233743C646.3031808-110.51569493 579.74858297-123.95398826999997 511.15064661-123.95398826999997zM511.15064661 857.49784007c-260.95694279 0-473.26148835-212.30454557-473.26148835-473.26148836 0-260.95694279 212.30454557-473.26148835 473.26148835-473.26148835 260.95810674 0 473.26265344 212.30454557 473.26265344 473.26148835C984.414464 645.19329451 772.10875449 857.49784007 511.15064661 857.49784007zM405.0274816 677.39769629L295.01557077 677.39769629c-40.50815317 0-73.34127389-32.84243456-73.34127388-73.34825984l0-110.01191083c0-40.50698923 32.83312071-73.34127389 73.34127388-73.34127389l110.01191083 0c40.50582528 0 73.34825984 32.83428466 73.34825984 73.34127389l0 110.01191083C478.37574144 644.55526173 445.53330574 677.39769629 405.0274816 677.39769629zM735.07020003 677.39769629l-110.00958179 0c-40.50931826 0-73.34127389-32.84243456-73.34127389-73.34825984l0-110.01191083c0-40.50698923 32.83195563-73.34127389 73.34127389-73.34127389l110.00958179 0c40.50698923 0 73.34010994 32.83428466 73.34010994 73.34127389l0 110.01191083C808.41030997 644.55526173 775.57718926 677.39769629 735.07020003 677.39769629zM405.0274816 347.35381277L295.01557077 347.35381277c-40.50815317 0-73.34127389-32.83195563-73.34127388-73.34010994l0-110.01889678c0-40.49883933 32.83312071-73.34127389 73.34127388-73.34127389l110.01191083 0c40.50582528 0 73.34825984 32.84243456 73.34825984 73.34127389l0 110.01889678C478.37574144 314.52069319 445.53330574 347.35381277 405.0274816 347.35381277zM735.07020003 347.35381277l-110.00958179 0c-40.50931826 0-73.34127389-32.83195563-73.34127389-73.34010994l0-110.01889678c0-40.49883933 32.83195563-73.34127389 73.34127389-73.34127389l110.00958179 0c40.50698923 0 73.34010994 32.84243456 73.34010994 73.34127389l0 110.01889678C808.41030997 314.52069319 775.57718926 347.35381277 735.07020003 347.35381277z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="suo" unicode="&#59315;" d="M857.6 499.2l-76.8 0L780.8 640c0 147.2-121.6 249.6-268.8 249.6-147.2 0-268.8-102.4-268.8-249.6l0-134.4L166.4 505.6c-38.4 0-64-32-64-64l0-486.4c0-38.4 32-64 64-64l691.2 0c38.4 0 64 32 64 64L921.6 435.2C921.6 473.6 896 499.2 857.6 499.2L857.6 499.2zM550.4 179.2l0-108.8c0-6.4-6.4-6.4-6.4-6.4L486.4 64c-6.4 0-6.4 6.4-6.4 6.4l0 108.8C448 192 428.8 217.6 428.8 249.6c0 44.8 38.4 83.2 83.2 83.2 44.8 0 83.2-38.4 83.2-83.2C595.2 217.6 576 192 550.4 179.2L550.4 179.2zM678.4 499.2 345.6 499.2 345.6 646.4c0 76.8 76.8 140.8 166.4 140.8 89.6 0 166.4-64 166.4-140.8L678.4 499.2 678.4 499.2zM678.4 499.2"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yidongyingyong" unicode="&#59320;" d="M745.01688889 879.16088889H278.98311111c-43.69066667 0-80.09955555-36.40888889-80.09955556-80.09955556v-837.40444444c0-43.69066667 36.40888889-80.09955555 80.09955556-80.09955556h469.67466667c43.69066667 0 80.09955555 36.40888889 80.09955555 80.09955556V802.70222222c-3.64088889 43.69066667-40.04977778 76.45866667-83.74044444 76.45866667z m-152.91733334-47.33155556c10.92266667 0 21.84533333-10.92266667 21.84533334-21.84533333s-10.92266667-21.84533333-21.84533334-21.84533333-21.84533333 10.92266667-21.84533333 21.84533333 10.92266667 21.84533333 21.84533333 21.84533333z m-160.1991111 0h94.6631111c10.92266667 0 21.84533333-10.92266667 21.84533334-21.84533333s-10.92266667-21.84533333-21.84533334-21.84533333h-94.6631111c-10.92266667 0-21.84533333 10.92266667-21.84533334 21.84533333 0 14.56355555 7.28177778 21.84533333 21.84533334 21.84533333zM512-67.47022221999998c-29.12711111 0-50.97244445 21.84533333-50.97244445 50.97244444s21.84533333 50.97244445 50.97244445 50.97244445c29.12711111 0 50.97244445-21.84533333 50.97244445-50.97244445s-21.84533333-50.97244445-50.97244445-50.97244444z m218.45333333 203.88977777V92.72888889000001H293.54666667V697.11644445h436.90666666v-560.6968889zM471.95022222 540.5582222200001h-94.66311111c-14.56355555 0-25.48622222-10.92266667-25.48622222-25.48622222V420.40888889c0-14.56355555 10.92266667-25.48622222 25.48622222-25.48622222h94.66311111c14.56355555 0 25.48622222 10.92266667 25.48622223 25.48622222v94.66311111c0 14.56355555-10.92266667 25.48622222-25.48622223 25.48622222zM646.71288889 540.5582222200001h-94.66311111c-14.56355555 0-25.48622222-10.92266667-25.48622223-25.48622222V420.40888889c0-14.56355555 10.92266667-25.48622222 25.48622223-25.48622222h94.66311111c14.56355555 0 25.48622222 10.92266667 25.48622222 25.48622222v94.66311111c0 14.56355555-10.92266667 25.48622222-25.48622222 25.48622222zM471.95022222 369.43644444999995h-94.66311111c-14.56355555 0-25.48622222-10.92266667-25.48622222-25.48622223v-94.66311111c0-14.56355555 10.92266667-25.48622222 25.48622222-25.48622222h94.66311111c14.56355555 0 25.48622222 10.92266667 25.48622223 25.48622222v94.66311111c0 14.56355555-10.92266667 25.48622222-25.48622223 25.48622223zM646.71288889 369.43644444999995h-94.66311111c-14.56355555 0-25.48622222-10.92266667-25.48622223-25.48622223v-94.66311111c0-14.56355555 10.92266667-25.48622222 25.48622223-25.48622222h94.66311111c14.56355555 0 25.48622222 10.92266667 25.48622222 25.48622222v94.66311111c0 14.56355555-10.92266667 25.48622222-25.48622222 25.48622223z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bofang" unicode="&#59321;" d="M726.059375 411.35501543l-337.5 260.746875a28.06875 28.06875 0 0 1-45.309375-22.21875v-521.63437499a28.125 28.125 0 0 1 45.309375-22.21874999l337.5 260.77499998a28.125 28.125 0 0 1 0 44.52187501"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yibiaopan" unicode="&#60226;" d="M559.104 572.52977778c0 26.05511111-21.16266667 47.104-47.104 47.104-26.05511111 0-47.104-21.04888889-47.104-47.104s21.04888889-47.104 47.104-47.104 47.104 21.04888889 47.104 47.104zM841.95555555 289.79200000000003c0 26.05511111-21.04888889 47.104-47.104 47.104s-47.104-21.04888889-47.104-47.104 21.04888889-47.104 47.104-47.104c25.94133333-0.11377778 47.104 21.04888889 47.104 47.104z m-612.69333333 47.104c-26.05511111 0-47.104-21.04888889-47.104-47.104s21.04888889-47.104 47.104-47.104 47.104 21.16266667 47.104 47.104c0 25.94133333-21.16266667 47.104-47.104 47.104z m49.37955556 186.14044445c-18.432-18.432-18.432-48.24177778 0-66.67377778 18.432-18.432 48.24177778-18.432 66.67377777 0 18.432 18.432 18.432 48.24177778 0 66.67377778-18.31822222 18.432-48.24177778 18.31822222-66.67377777 0z m466.60266667 0c-18.432 18.432-48.24177778 18.432-66.67377778 0-18.432-18.432-18.432-48.24177778 0-66.67377778 18.432-18.432 48.24177778-18.432 66.67377778 0 18.432 18.432 18.432 48.24177778 0 66.67377778z m100.01066666 99.89688888C756.28088889 712.0213333300001 637.952 761.05955555 512 761.05955555S267.71911111 712.0213333300001 178.74488889 622.93333333C89.77066667 533.95911111 40.73244445 415.51644445 40.73244445 289.56444445c0-103.424 33.45066667-201.38666667 94.54933333-282.624l67.24266667 67.35644444C158.72 137.10222222000004 134.94044445 211.39911111000004 134.94044445 289.56444445c0 100.80711111 39.25333333 195.47022222 110.36444444 266.6951111 71.22488889 71.22488889 165.888 110.47822222 266.58133333 110.47822223s195.35644445-39.25333333 266.58133333-110.47822223c71.22488889-71.22488889 110.47822222-166.00177778 110.47822223-266.6951111 0-78.16533333-23.89333333-152.46222222-67.69777778-215.26755556l67.35644445-67.35644444c61.09866667 81.12355555 94.54933333 179.2 94.54933333 282.624 0.11377778 125.952-48.92444445 244.39466667-137.89866667 333.36888888zM450.78755555 207.30311111000003c-19.456-33.792-7.96444445-77.02755555 25.82755556-96.59733333 33.792-19.56977778 77.02755555-7.96444445 96.59733334 25.82755555 19.56977778 33.792 68.38044445 259.86844445 68.38044444 259.86844445S470.35733333 241.09511110999995 450.78755555 207.30311111000003z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="suo1" unicode="&#59324;" d="M843.377778-128H177.777778C140.8-128 112.355556-99.555556 112.355556-65.422222V403.911111c0 34.133333 28.444444 65.422222 65.422222 62.577778h73.955555v170.666667C251.733333 782.222222 368.355556 896 510.577778 896s256-113.777778 258.844444-256h-99.555555c-5.688889 88.177778-79.644444 156.444444-167.822223 150.755556-85.333333-2.844444-150.755556-73.955556-150.755555-159.288889v-164.977778H846.222222c34.133333 0 65.422222-28.444444 65.422222-62.577778v-466.488889C908.8-99.555556 880.355556-128 843.377778-128zM510.577778 307.2c-42.666667 0-79.644444-34.133333-79.644445-79.644444 0-31.288889 17.066667-56.888889 42.666667-71.111112v-102.4c0-5.688889 2.844444-8.533333 8.533333-8.533333h56.888889c5.688889 0 8.533333 2.844444 8.533334 8.533333V156.444444c39.822222 19.911111 54.044444 68.266667 34.133333 105.244445-14.222222 28.444444-39.822222 45.511111-71.111111 45.511111z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shipinwenjian-s" unicode="&#59319;" d="M192.00000031 864h449.04L912.00000031 608.20000031V-16.00000031000002a79.99999969 79.99999969 0 0 0-80.00000062-79.99999969H192.00000031a79.99999969 79.99999969 0 0 0-80.00000062 79.99999969V784.00000031a79.99999969 79.99999969 0 0 0 80.00000062 79.99999969z m418.03999969-79.99999969v-171.12a40.00000031 40.00000031 0 0 1 40.00000031-40.00000031h182.11999969L609.99999969 784.00000031zM231.99999969 463.99999969v-79.99999969h80.00000062v79.99999969H231.99999969z m0 160.00000031v-79.99999969h80.00000062V624H231.99999969z m480-160.00000031v-79.99999969h80.00000062v79.99999969h-80.00000062zM231.99999969 304.00000031v-80.00000062h80.00000062v80.00000062H231.99999969z m480 0v-80.00000062h80.00000062v80.00000062h-80.00000062zM231.99999969 144v-79.99999969h80.00000062v79.99999969H231.99999969z m480 0v-79.99999969h80.00000062v79.99999969h-80.00000062z m-91.51999969 124.15999969a19.99999969 19.99999969 0 0 1 0 31.68l-156.24 120.80000062a19.99999969 19.99999969 0 0 1-32.23999969-15.84v-241.60000031a19.99999969 19.99999969 0 0 1 32.23999969-15.84l156.24 120.79999969z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dayinji" unicode="&#59313;" d="M256.004221 831.997362h511.995779v-127.998945h64.002638V831.997362C832.002638 867.308871 803.381153 896 768 896H256.004221c-35.309399 0-64.002638-28.691129-64.002638-64.002638v-127.998945h64.002638V831.997362zM960.007914 639.99789H64.004748c-35.309399 0-64.002638-28.682687-64.002638-63.996307v-320.000528c0-35.379043 28.691129-64.002638 64.002638-64.002638h127.998945v-255.997889c0-35.379043 28.691129-64.000528 64.002638-64.000528H768.00211c35.381153 0 64.002638 28.621485 64.002638 64.000528V191.99841700000002h128.003166c35.36849 0 63.992086 28.623595 63.992086 64.002638V576.001583c0 35.31362-28.625706 63.996307-63.992086 63.996307z m-192.007914-703.997362H256.004221v447.999472h511.995779v-447.999472z m128.003166 511.995779c-35.379043 0-64.000528 28.625706-64.000528 64.002638 0 35.309399 28.621485 64.002638 64.000528 64.002638 35.381153 0 64.002638-28.691129 64.002638-64.002638 0.00211-35.374822-28.621485-64.002638-64.002638-64.002638zM320.000528 320.003693h256.00211v-64.002638H320.000528zM320.000528 191.99841700000002h384.007386v-63.989975H320.000528zM320.000528 63.99525200000005h384.007386v-63.992086H320.000528z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xls1" unicode="&#59344;" d="M613.456 741.472v-55.856h135.264v-100.544h-135.264v-22.336h135.264v-100.544h-135.264v-22.336h135.264v-111.712h-135.264v-22.336h135.264v-100.544h-135.264v-22.336h135.264v-100.544h-135.264v-55.856h394.544v714.944h-394.544zM929.088 82.384h-157.824v100.544h157.824v-100.544zM929.088 205.264h-157.824v100.544h157.824v-100.544zM929.088 328.144h-157.824v111.712h157.824v-111.712zM929.088 462.192h-157.824v100.544h157.824v-100.544zM929.088 585.088h-157.824v100.544h157.824v-100.544zM16 15.344l574.912-100.544v938.384l-574.912-100.544v-737.296zM153.616 549.504h102.176l53.136-103.104 51.696 103.104h101.152l-93.44-162.304 102.24-172.816h-104.224l-59.28 107.664-59.28-107.664h-103.584l103.536 174.656-94.128 160.464z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ai1" unicode="&#59345;" d="M407.24 317.145l90.825 0-45.87 135.51L407.24 317.145zM671.84 849L125.705 849C106.31 849 90.59 833.385 90.59 814.125l0-860.25C90.59-65.38499999999999 106.31-81 125.705-81l772.575 0c19.395 0 35.115 15.615 35.115 34.875L933.395 587.4300000000001 671.84 849zM548.69 172.66499999999996l-29.07 82.95-133.05 0-27.465-82.95-71.295 0 129.645 365.175 71.07 0 133.275-365.175L548.69 172.66499999999996zM710.57 172.66499999999996l-63.795 0L646.775 437.22l63.795 0L710.57 172.66499999999996zM710.57 473.085l-63.795 0 0 64.77 63.795 0L710.57 473.085z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ps2" unicode="&#59346;" d="M425.135 480.945c-7.89 1.62-23.76 2.445-47.58 2.445l-31.935 0 0-101.43 36.18 0c26.055 0 43.47 1.86 52.26 5.61 8.79 3.735 15.675 9.585 20.655 17.55 4.98 7.965 7.485 17.22 7.485 27.795 0 13.005-3.495 23.73-10.5 32.19C444.71 473.535 435.845 478.83 425.135 480.945zM933.41 587.4300000000001L671.84 849 125.705 849C106.31 849 90.59 833.385 90.59 814.125l0-860.25C90.59-65.38499999999999 106.31-81 125.705-81l772.575 0c19.395 0 35.115 15.615 35.115 34.875L933.41 587.4300000000001zM519.395 378.53999999999996c-7.305-14.955-16.56-26.7-27.81-35.235-11.25-8.535-22.665-14.19-34.29-16.95-15.78-3.42-38.64-5.115-68.565-5.115l-43.11 0 0-134.835L279.5 186.40499999999997 279.5 543.8399999999999l106.095 0c40.2 0 66.405-1.785 78.63-5.37 18.765-5.37 34.47-17.025 47.13-34.98 12.66-17.97 18.99-41.16 18.99-69.615C530.33 411.945 526.685 393.495 519.395 378.53999999999996zM746.315 206.15999999999997c-18.165-17.07-45.045-25.605-80.625-25.605-32.31 0-57.885 7.155-76.725 21.45-18.84 14.295-31.155 33.72-36.96 58.275l62.985 10.485c2.685-13.335 8.115-23.445 16.305-30.36 8.19-6.915 19.65-10.365 34.395-10.365 16.23 0 28.44 3.255 36.63 9.75 5.505 4.545 8.265 10.65 8.265 18.285 0 5.205-1.485 9.51-4.47 12.915-3.12 3.255-10.125 6.255-21 9.015-50.625 12.195-82.725 23.325-96.27 33.405-18.765 13.98-28.14 33.405-28.14 58.275 0 22.425 8.115 41.28 24.345 56.565 16.23 15.27 41.4 22.92 75.495 22.92 32.46 0 56.58-5.775 72.375-17.31 15.78-11.55 26.655-28.605 32.61-51.195l-59.19-11.955c-2.535 10.08-7.335 17.805-14.4 23.16-7.08 5.37-17.16 8.04-30.27 8.04-16.53 0-28.365-2.52-35.52-7.56-4.77-3.585-7.155-8.205-7.155-13.905 0-4.875 2.085-9.015 6.255-12.435 5.655-4.56 25.2-10.965 58.635-19.26 33.435-8.295 56.775-18.45 70.02-30.48 13.11-12.195 19.65-29.175 19.65-50.955C773.555 243.63 764.48 223.23000000000002 746.315 206.15999999999997z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="html1" unicode="&#59347;" d="M869.56139-96.952238l-0.448112-0.256064-0.768192-0.32008c-16.004001-18.692673-38.473618-30.407602-63.11978-30.407602l-586.386597 0c-24.646162 0-47.115779 11.714929-63.631908 30.727682l0 0.256064-0.256064-0.256064C138.434609-78.003501 128.384096-51.180795 128.384096-22.437609L128.384096 790.437609c0 28.807202 10.050513 55.053763 26.566642 74.002501C171.722931 883.772943 194.128532 896 218.83871 896l399.587897 0c8.898225 0 17.732433-4.737184 23.941985-11.714929l243.452863-284.67917c6.72168-8.386097 9.794449-18.180545 9.794449-28.487122l0-0.576144 0-593.044261C895.615904-51.180795 885.565391-77.427357 869.56139-96.952238zM396.803201 377.086272C408.646162 385.472368 412.615154 404.357089 405.317329 417.608402c-6.977744 14.339585-23.045761 18.884721-34.888722 10.498625L202.130533 313.134284c-15.491873-11.522881-16.068017-39.113778 0-50.700675l168.234059-115.292823c11.842961-8.386097 27.910978-4.16104 34.888722 10.114529 7.297824 13.955489 3.328832 32.136034-8.514129 40.522131L265.634409 287.911978 396.803201 377.086272zM584.498125 509.91948C571.182796 515.872968 556.523131 508.191048 551.08177 493.147287l-130.592648-389.793448c-5.185296-14.659665 1.216304-32.136034 14.275569-38.089522C448.464116 58.990748 462.995749 66.672668 468.501125 82.036509l130.592648 390.113528C603.95899 486.809702 597.237309 503.645911 584.498125 509.91948zM614.265566 417.608402C606.967742 404.357089 610.616654 385.472368 622.779695 377.086272l131.168792-89.174294-131.168792-90.19855c-12.163041-8.386097-15.811953-26.566642-8.514129-40.522131 7.297824-14.339585 23.109777-18.564641 34.952738-10.114529l167.593898 115.292823c17.348337 11.586897 16.708177 39.177794 0 50.700675L649.218305 428.107027C637.375344 436.493123 621.563391 431.947987 614.265566 417.608402zM640.384096 769.12028l0-148.709177c0-11.650913 4.993248-22.917729 12.035009-30.663666L653.315329 588.531133c8.258065-8.322081 19.716929-13.379345 32.072018-13.379345l146.852713 0L640.384096 769.12028z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ppt" unicode="&#59348;" d="M580 48V720h408v-672H580z m144 528c-67.2 0-120-52.8-120-120s52.8-120 120-120 120 52.8 120 120h-120v120z m24 24v-120h120c0 67.2-52.8 120-120 120zM892 264H604v-48H892V264z m0-96H604v-48H892v48zM52 720L556 864v-936L52 72V720z m168-504h48V360h26.4c67.2 0 117.6 43.2 117.6 96s-50.4 96-117.6 96H220v-336z m144 240c0-26.4-26.4-48-67.2-48H268V504h28.8c40.8 0 67.2-21.6 67.2-48z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="pdf1" unicode="&#59349;" d="M345.808 54.99199999999996h38.56c14.48 0 26.432 4.368 35.856 13.12 9.424 8.736 14.144 20.16 14.144 34.256 0 12.384-4.352 23.12-13.056 32.224-8.704 9.056-22.064 13.616-40.096 13.616H318v-154.384h27.824v61.168z m0 70.144h30.416c10.928 0 18.496-2.272 22.672-6.8 4.192-4.512 6.288-9.952 6.288-16.304 0-7.008-2.272-12.624-6.784-16.848s-11.088-6.336-19.68-6.336h-32.912v46.288z m217.136-109.264c13.12 14.704 19.68 32.992 19.68 54.864 0 21.84-6.384 40.24-19.104 55.136-12.768 14.896-29.648 22.336-50.672 22.336h-56.88v-154.384h50.656c24.416-0.016 43.2 7.344 56.32 22.048z m-78.368 110.4h26.464c12.432 0 22.432-5.216 30-15.664 7.584-10.464 11.376-23.232 11.376-38.304 0-18.48-4.336-32.384-13.008-41.728-8.688-9.36-19.216-14.032-31.664-14.032H484.56V126.27200000000005z m152.448-67.296h54.288v23.168h-54.288v42.192H706v23.872h-97.6v-154.4h28.624zM484.176 684.912c3.232 14.88 4.624 27.888 7.424 38.096l1.408 7.424c4.624 26.496 3.728 39.968-4.208 51.12l-6.944 2.336c-0.96-1.408-2.32-3.728-3.28-5.6-7.888-19.52-7.44-53.44 3.28-95.264l2.32 1.888z m91.52-225.856a154.816 154.816 0 0 0-19.008 14.88c-27.904 23.68-52.08 58.08-71.12 99.904-10.704-34.384-26.032-71.12-46.96-111.536-9.28-17.616-19.488-34.352-23.248-48.304l5.136 1.856c59.04 22.768 114.784 35.776 155.2 43.2z m190.096-40.4h1.824c2.336 0.928 3.712 1.376 4.16 6.016-0.896 1.408-1.808 3.28-4.16 5.136-4.624 4.656-23.216 16.256-88.288 16.256-3.232 0-6.512 0-10.672-4.656 33.904-14.848 66.928-23.68 88.272-23.68 3.28 0 6.08 0.448 8.864 0.928zM754.096 660.672c-9.392 0-16 5.568-16 16V864H166.128c-45.968 0-83.584-37.616-83.584-83.6v-792.816c0-45.952 37.616-83.584 83.584-83.584h691.744c45.952 0 83.584 37.632 83.584 83.6V660.672h-187.36zM224.864 283.456c5.104 24.656 31.6 63.664 87.36 98.48 8.832 6.528 22.784 13.936 41.36 22.768 13.952 24.128 28.832 52.496 44.64 83.632 23.68 47.856 38.56 95.248 50.16 136.16v0.464c-17.184 56.224-27.424 90.144-10.224 151.968 4.176 17.664 19.52 35.776 36.704 35.776h11.152c10.72 0 20.912-3.712 28.352-11.136 30.672-30.672 16.256-105.504 0.928-167.296-0.928-2.816-1.36-5.12-1.824-6.512 18.608-52.496 45.04-94.8 74.352-118.976a334.848 334.848 0 0 1 40.432-26.96 541.776 541.776 0 0 0 59.904 3.264c57.632 0 92.496-10.224 105.984-32.048 4.608-7.44 6.944-16.272 5.584-25.536-0.464-11.632-4.672-22.336-13.008-30.672-7.936-8.832-21.856-13.968-42.32-13.968-35.312 0-92.928 10.688-139.408 34.4-79.936-8.848-139.424-19.52-187.296-34.88-2.336-0.944-5.088-1.84-8.336-3.248-57.648-98.48-100.4-142.672-138.048-142.672-7.424 0-14.864 1.904-20.432 5.168l-22.32 14.384-1.36 2.336c-3.264 8.368-4.208 16.288-2.336 25.104z m672.128-262.88c0-41.216-33.744-74.944-74.912-74.944H201.952a75.152 75.152 0 0 0-74.928 74.944V195.32799999999997h769.952v-174.752zM341.504 361.91999999999996c-9.728-5.584-17.664-10.656-22.304-14.368-32.976-30.176-53.904-60.864-56.224-78.512 20.912 6.976 48.32 37.664 78.528 92.88zM941.456 687.8720000000001H780.032a14.72 14.72 0 0 0-14.704 14.704V864l176.128-176.128z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tupianwenjian-s" unicode="&#59350;" d="M192.00000031 864h449.04L912.00000031 608.20000031V-16.00000031000002a79.99999969 79.99999969 0 0 0-80.00000062-79.99999969H192.00000031a79.99999969 79.99999969 0 0 0-80.00000062 79.99999969V784.00000031a79.99999969 79.99999969 0 0 0 80.00000062 79.99999969z m418.03999969-79.99999969v-171.12a40.00000031 40.00000031 0 0 1 40.00000031-40.00000031h182.11999969L609.99999969 784.00000031zM651.99999969 304.00000031a60 60 0 1 1 0 120 60 60 0 0 1 0-120zM192.00000031 8.399999999999977h633.6v159.40000031l-104.60000062 69.03999938-169.03999969-122.52L336.84000031 384l-143.32000031-150.43999969L192.00000031 8.359999689999995z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="txt1" unicode="&#59367;" d="M538.811733 878.148267h65.877334v-104.584534c124.2112-0.682667 248.541867 1.28 372.6336-0.580266 26.7264 2.56 47.633067-18.261333 44.9536-44.9536 1.979733-217.053867-0.4608-434.2272 1.143466-651.400534-1.143467-23.466667 2.304-49.493333-11.144533-70.2976-16.964267-12.305067-39.048533-10.683733-58.897067-11.605333-116.206933 0.5632-232.3968 0.341333-348.706133 0.341333v-116.189866h-72.2432C355.362133-88.814933 177.92-59.255467 0.7168-28.16 0.6144 242.926933 0.6144 513.962667 0.7168 784.964267c179.3024 31.044267 358.536533 62.634667 538.112 93.184z m62.020267-139.434667V393.045333h145.237333v-14.506666h-145.237333v-101.6832H904.874667v-43.5712H600.832v-55.176534H904.874667v-43.5712H600.832v-104.533333h383.4368V738.7136H600.832z m226.6624-286.037333c-5.188267-7.662933-12.151467-20.4288-13.858133-35.601067a9.284267 9.284267 0 0 0-5.922134-7.8848l-50.141866-18.141867-5.632 2.935467 23.125333 31.010133c1.8432-0.6144 3.754667-0.9216 5.717333-0.904533 8.96 0.085333 16.1792 6.792533 16.093867 14.967467-0.085333 8.174933-7.424 14.7456-16.384 14.660266-8.977067-0.085333-16.196267-6.792533-16.093867-14.984533a13.602133 13.602133 0 0 1 1.143467-5.290667 9.216 9.216 0 0 0-0.631467-9.3184l-19.626666-26.3168-4.676267 4.369067-0.1536 48.605867a9.437867 9.437867 0 0 0 5.341867 8.6016c7.918933 3.7888 23.0912 12.288 34.645333 26.094933a9.403733 9.403733 0 0 0 12.356267 1.672533l32.0512-21.0944a9.557333 9.557333 0 0 0 2.645333-13.397333v0.034133z m22.818133 16.7936a9.557333 9.557333 0 0 0-12.5952-2.286934l-48.896 30.464a9.557333 9.557333 0 0 0-2.884266 13.431467l0.375466 0.529067c2.901333 4.317867 5.12 1.877333 9.489067-0.9216l48.4864-31.061334c4.727467-2.986667 9.437867-5.717333 6.007467-10.1888v0.034134z m41.386667 61.44l-27.579733-40.8576a14.882133 14.882133 0 0 0-20.599467-3.976534l-32.6656 22.050134a14.882133 14.882133 0 0 0-3.976533 20.5824l27.579733 40.840533a14.7968 14.7968 0 0 0 20.599467 3.976533l32.682666-22.0672c6.7584-4.608 8.533333-13.806933 3.959467-20.599466v0.034133zM84.104533 333.7216h26.5728v117.981867h38.894934v24.029866H45.1072v-24.029866h39.0144v-117.981867z m69.205334 0h31.863466l29.2352 49.117867 29.064534-49.117867h32.034133l-44.936533 73.045333 40.891733 68.9664h-30.754133l-25.821867-45.6192-26.3168 45.6192H157.525333l40.704-67.908266-44.936533-74.103467z m165.4784 0h26.555733v117.981867h38.912v24.029866h-104.482133v-24.029866h39.0144v-117.981867z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yasuobao" unicode="&#59368;" d="M146.28571437-50.28571406000003V818.28571406a45.71428594 45.71428594 0 0 0 45.71428594 45.71428594h302.58285657v-71.10857156H424.91428531v-71.10857156h69.66857156v-71.10857157H424.91428531v-71.10857062h69.66857156v-71.13142875H424.91428531v-71.08571438h69.66857156v-71.13142875h69.66857157v71.10857157h-69.66857157v71.10857156h69.66857157v71.13142875h-69.66857157v71.08571344h69.66857157V721.80571406h-69.66857157v71.08571438h69.66857157V864h104.16v-213.64571438H877.71428563V-50.28571406000003a45.71428594 45.71428594 0 0 0-45.71428594-45.71428594H192.00000031a45.71428594 45.71428594 0 0 0-45.71428594 45.71428594z m417.96571407 380.95999968H424.91428531v-248.91428531h139.33714313v248.91428531z m-34.83428532-211.13142843h-69.66857156v71.08571437h69.66857156v-71.08571437zM703.54285719 864h8.52571406L877.71428563 694.92571406v-6.49142812h-174.14857126V864z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="word" unicode="&#59369;" d="M341.375-50.25c-129.375 25.125-252 48.75-272.25 52.6875L32 9.5625V384.1875C32 611.25 32.75 759 33.6875 759s124.3125 23.625 274.3125 52.5C457.8125 840.375 581.9375 864 583.8125 864c3 0 3.1875-24.1875 3.1875-480v-480l-5.0625 0.1875c-3 0-111.1875 20.625-240.5625 45.5625z m-84.375 258.375c24.375 112.875 52.5 257.0625 52.5 269.25 0 1.3125 0.75 2.0625 1.6875 1.5 0.75-0.5625 1.875-7.3125 2.4375-15s12.1875-70.6875 26.0625-139.875l25.125-125.625 35.4375 0.375 35.625 0.5625 36.9375 180.9375c20.4375 99.5625 37.6875 182.8125 38.25 185.0625l0.9375 4.3125h-31.875c-31.5 0-31.875 0-32.8125-4.3125-2.25-9.75-40.125-250.875-41.25-261.9375-1.5-16.875-2.8125-24.9375-3.9375-23.8125-0.375 0.375-1.6875 8.25-2.8125 17.4375-1.3125 12.9375-45 249.375-49.5 268.5l-0.9375 4.125-34.3125-0.375-34.125-0.5625-23.8125-112.5c-27.1875-127.3125-33.375-159.1875-33.375-169.875 0-12.9375-3.375-7.875-4.6875 7.125-0.5625 8.0625-8.4375 58.875-17.25 113.0625s-18.1875 112.5-21 129.75-5.625 31.875-6.1875 32.4375-16.125 0.75-34.6875 0.5625l-33.75-0.5625 37.3125-182.8125c20.4375-100.5 37.5-183.9375 38.0625-185.25 0.5625-1.6875 9.75-2.25 37.3125-2.25h36.375l2.25 9.75zM622.625 70.875v56.25h256.875v71.25H622.625v75h256.875v73.125H622.625v75h256.875v73.125H622.625v75h258.75v73.125H622.625V753.375h348.1875l6.375-4.3125c3.375-2.25 8.25-7.125 10.5-10.5l4.3125-6.375v-696.375l-4.3125-6.375c-2.25-3.375-7.125-8.25-10.5-10.5l-6.375-4.3125H622.625v56.25z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="doc1" unicode="&#59370;" d="M764.753171 652.59187033h144.858536l-144.858536 144.858536v-144.858536z m199.804878 19.980487c19.980488-19.980488 34.965854-49.95122 34.965853-79.921951v-634.380488c0-34.965854-29.970732-64.936585-64.936585-64.936585H265.240976c-34.965854 0-64.936585 29.970732-64.936586 64.936585v49.95122h49.95122v-49.95122c0-9.990244 9.990244-14.985366 14.985366-14.985365h664.351219c9.990244 0 14.985366 9.990244 14.985366 14.985365V587.65528433v14.985366h-229.77561V837.41138233h-449.560975c-9.990244 0-14.985366-9.990244-14.985366-14.985366v-149.853659h-49.95122v149.853659c0 34.965854 29.970732 64.936585 64.936586 64.936585h434.575609c29.970732 0 59.941463-9.990244 79.921952-34.965853l184.819512-179.824391z m-314.692683-244.760975v49.951219h234.770732v-49.951219h-234.770732z m0-149.853659v49.95122h234.770732v-49.95122h-234.770732z m0-149.853658v49.951219h234.770732v-49.951219h-234.770732z m-649.365854-74.92683V622.62113833h564.448781v-564.448781H0.499512z m389.619512 154.848781L475.036098 467.77235733H410.099512l-49.951219-189.814634-49.95122 189.814634h-49.951219l-49.95122-189.814634L155.348293 467.77235733H90.411707l84.917073-259.746341h54.946342l49.951219 189.814634 49.95122-189.814634h59.941463z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ic_dialog_apk" unicode="&#59371;" d="M671.28888853 861.86666667V702.5777781300001a91.02222187 91.02222187 0 0 1 91.02222294-91.02222293H921.6a22.7555552 22.7555552 0 0 0 22.7555552-22.7555552V-25.600000000000023a91.02222187 91.02222187 0 0 0-91.02222187-91.02222187h-682.66666666a91.02222187 91.02222187 0 0 0-91.02222187 91.02222187V793.6a91.02222187 91.02222187 0 0 0 91.02222187 91.02222187H648.53333333a22.7555552 22.7555552 0 0 0 22.7555552-22.7555552zM350.4355552 65.42222187000004h60.66631147l-75.41191147 224.4608H265.78488853L190.37297813 65.42222187000004h58.2087104l14.2904896 49.28853333H336.32711147L350.4355552 65.42222187000004z m-51.4275552 176.85617813h1.18328853l24.89457814-86.47111147H273.97688853l25.03111147 86.47111147z m133.57511147 47.60462187V65.42222187000004h57.11644373v65.80906666h37.77422293c49.92568853 0 84.33208853 31.26613333 84.33208854 79.18933334 0 48.24177813-32.67697813 79.4624-80.73671147 79.4624h-98.48604373z m57.11644373-43.69066667h26.12337813c23.9388448 0 38.22933333-12.60657813 38.22933334-35.95377707 0-23.48373333-14.29048853-36.09031147-38.54791147-36.09031146h-25.8048v72.04408853zM694.22648853 65.42222187000004v63.488l19.11466667 24.25742293L770.6396448 65.42222187000004h67.08337707l-82.7847104 124.74595626 78.2791104 99.71484374H771.8684448l-76.41315627-98.62257707h-1.2288v98.62257707H637.1555552V65.42222187000004h57.07093333zM625.77777813 884.62222187c20.6620448 1.13777813 35.8627552-1.09226667 45.5111104-6.5991104 9.73937813-5.5523552 24.89457813-18.52302187 45.60213334-38.95751147l182.59057813-182.40853333c22.07288853-25.03111147 34.90702187-40.04977813 38.54791147-45.10151147 3.64088853-5.00622187 5.7344-10.78613333 6.32604373-17.29422187L898.61688853 611.5555552000001h-136.2147552a91.02222187 91.02222187 0 0 0-91.06773333 91.02222293V838.10986667L625.77777813 884.62222187z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="EPStubiao" unicode="&#59316;" d="M212 504h600a40.00000031 40.00000031 0 0 0 40.00000031-40.00000031v-339.99999938a40.00000031 40.00000031 0 0 0-40.00000031-40.00000031H212v-100.00000031a19.99999969 19.99999969 0 0 1 19.99999969-19.99999969h680.00000062a19.99999969 19.99999969 0 0 1 19.99999969 19.99999969V574.4800003099999L922.53999969 583.99999969h-118.62A91.92 91.92 0 0 0 711.99999969 675.9199996899999V795.88000031L703.92000031 804H231.99999969a19.99999969 19.99999969 0 0 1-19.99999969-19.99999969v-280.00000031zM152 84H72.00000031a40.00000031 40.00000031 0 0 0-40.00000031 40.00000031V463.99999969a40.00000031 40.00000031 0 0 0 40.00000031 40.00000031h79.99999969V784.00000031a79.99999969 79.99999969 0 0 0 79.99999969 79.99999969h496.90000031L992 599.20000031V-16.00000031000002a79.99999969 79.99999969 0 0 0-79.99999969-79.99999969H231.99999969a79.99999969 79.99999969 0 0 0-79.99999969 79.99999969v100.00000031zM132.00000031 421.03999969V163.99999968999998h184.23999938v36H172.52v77.76h129.52000031v36H172.52v71.28h137.83999969v36H132.00000031z m222.33999938 0V163.99999968999998h40.52000062v98.64h61.29999938c60.25999969 0 90.40000031 26.64 90.40000031 79.56 0 52.56-30.13999969 78.84-89.71999969 78.84h-102.50000062z m40.52000062-36h58.87999969c17.65999969 0 30.79999969-3.24 39.12-10.08 8.32000031-6.48 12.82000031-17.28 12.82000031-32.76 0-15.48-4.15999969-26.64-12.46000031-33.48-8.32000031-6.48-21.48-10.08-39.48-10.08h-58.87999969v86.4z m273.6 41.04c-26.68000031 0-48.49999969-6.12-65.80000031-18.72-18.72-12.96-27.72-30.96-27.72-53.64s9.36-39.96 28.39999969-51.84c7.27999969-4.32 26.32000031-11.52 56.80000031-21.6 27.36-8.64 43.27999969-14.4 48.13999969-16.92 15.24-7.92 23.20000031-18.72 23.20000031-32.4 0-10.8-5.53999969-19.08-15.94000031-25.56-10.38-6.12-24.91999969-9.36-42.93999938-9.36-20.41999969 0-35.32000031 3.96-45 11.16-10.75999969 8.28-17.34 22.32-20.1 41.76h-40.18000031c1.74-32.76 13.15999969-56.52 33.94000031-71.64 16.98-12.24 40.86-18.36 71.34-18.36 31.51999969 0 56.1 6.84 73.41999938 19.8 17.32000031 13.32 25.98 31.68 25.98 54.72 0 23.76-10.74 42.12-32.19999938 55.44-9.70000031 5.76-31.18000031 14.4-64.76000062 25.2-22.86 7.56-37.06000031 12.96-42.25999969 15.84-11.77999969 6.48-17.32000031 15.48-17.32000031 26.28 0 12.24 4.86 21.24 15.24 26.64 8.32000031 4.68 20.08000031 6.84 35.68000031 6.84 18 0 31.86-3.24 40.86-10.44 9-6.84 15.6-18.36 19.03999969-34.2h40.18000031c-2.41999969 28.08-12.46000031 48.96-29.80000031 62.28-16.26 12.6-39.12 18.72-68.19999938 18.72z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="EXEtubiao" unicode="&#59317;" d="M212 504h600a40.00000031 40.00000031 0 0 0 40.00000031-40.00000031v-339.99999938a40.00000031 40.00000031 0 0 0-40.00000031-40.00000031H212v-100.00000031a19.99999969 19.99999969 0 0 1 19.99999969-19.99999969h680.00000062a19.99999969 19.99999969 0 0 1 19.99999969 19.99999969V574.4800003099999L922.53999969 583.99999969h-118.62A91.92 91.92 0 0 0 711.99999969 675.9199996899999V795.88000031L703.92000031 804H231.99999969a19.99999969 19.99999969 0 0 1-19.99999969-19.99999969v-280.00000031zM152 84H72.00000031a40.00000031 40.00000031 0 0 0-40.00000031 40.00000031V463.99999969a40.00000031 40.00000031 0 0 0 40.00000031 40.00000031h79.99999969V784.00000031a79.99999969 79.99999969 0 0 0 79.99999969 79.99999969h496.90000031L992 599.20000031V-16.00000031000002a79.99999969 79.99999969 0 0 0-79.99999969-79.99999969H231.99999969a79.99999969 79.99999969 0 0 0-79.99999969 79.99999969v100.00000031zM116.55999969 421.03999969V163.99999968999998h191.52v36h-149.4v77.76h134.64v36H158.67999969v71.28h143.28v36h-185.4z m213.48 0l86.04-124.2L324.27999969 163.99999968999998h51.48l66.24 99.36L508.23999969 163.99999968999998h51.48l-92.52 132.84 86.76 124.2h-51.48L441.99999969 330.31999969000003l-60.48 90.72h-51.48z m256.68 0V163.99999968999998h191.52v36h-149.4v77.76h134.64v36h-134.64v71.28h143.28v36h-185.4z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="SVGtubiao" unicode="&#59332;" d="M230.75 496.5h562.5a37.50000029 37.50000029 0 0 0 37.50000029-37.50000029v-318.74999942a37.50000029 37.50000029 0 0 0-37.50000029-37.50000029H230.75v-93.75000029a18.74999971 18.74999971 0 0 1 18.74999971-18.74999971h637.50000058a18.74999971 18.74999971 0 0 1 18.74999971 18.74999971V562.5750002899999L896.88124971 571.49999971h-111.20625A86.175 86.175 0 0 0 699.49999971 657.6749997100001V770.13750029L691.92500029 777.75H249.49999971a18.74999971 18.74999971 0 0 1-18.74999971-18.74999971v-262.50000029zM174.5 102.75H99.50000029a37.50000029 37.50000029 0 0 0-37.50000029 37.50000029V458.99999971a37.50000029 37.50000029 0 0 0 37.50000029 37.50000029h74.99999971V759.00000029a74.99999971 74.99999971 0 0 0 74.99999971 74.99999971h465.84375029L962 585.75000029V8.999999709999997a74.99999971 74.99999971 0 0 0-74.99999971-74.99999971H249.49999971a74.99999971 74.99999971 0 0 0-74.99999971 74.99999971v93.75000029z m53.94375 320.69999971c-24.11250029 0-43.85625029-5.7375-59.5125-17.55-16.89374971-12.15-25.04999971-29.025-25.04999971-50.2875s8.45624971-37.4625 25.68749942-48.6c6.56250029-4.05 23.81249971-10.8 51.35625-20.25 24.73125029-8.1 39.13125029-13.5 43.51875029-15.8625 13.78125-7.425 20.98125-17.55 20.98125-30.375 0-10.125-5.00625-17.8875-14.4-23.9625-9.39375-5.7375-22.55625-8.775-38.83124971-8.775-18.46874971 0-31.95 3.7125-40.70625029 10.4625-9.71250029 7.7625-15.65624971 20.925-18.16875 39.15H136.99999971c1.575-30.7125 11.90625029-52.9875 30.69375029-67.1625 15.33750029-11.475 36.93750029-17.2125 64.50000029-17.2125 28.50000029 0 50.71875029 6.4125 66.375 18.5625 15.65624971 12.4875 23.49375029 29.7 23.49374942 51.3 0 22.275-9.71250029 39.4875-29.11874942 51.975-8.775 5.4-28.18125 13.5-58.55625 23.625-20.66249971 7.0875-33.50625029 12.15-38.21250058 14.85-10.63125 6.075-15.65624971 14.5125-15.65624971 24.6375 0 11.475 4.3875 19.9125 13.78125 24.975 7.51875029 4.3875 18.16875 6.4125 32.24999971 6.4125 16.29375029 0 28.81874971-3.0375 36.95625-9.7875 8.13750029-6.4125 14.08124971-17.2125 17.2125-32.0625h36.3375c-2.19375 26.325-11.26874971 45.9-26.94375 58.3875-14.69999971 11.8125-35.38125 17.55-61.68749942 17.55z m104.56875-4.725L412.55 177.74999971h44.15625l79.5375 240.975h-39.75000029l-61.38749971-196.425h-0.93750029l-61.38749971 196.425h-39.75000029z m323.79374971 4.725c-33.1875 0-59.49375029-12.15-78.91875-37.125-18.46874971-23.2875-27.5625-52.9875-27.5625-89.1 0-35.775 9.09375029-65.1375 27.5625-87.75 19.72500029-24.3 47.28750029-36.45 82.98750058-36.45 20.04374971 0 37.87499971 2.7 54.16875 8.1A126.41249971 126.41249971 0 0 1 755.74999971 204.07499971000004V305.99999971h-95.81249971v-33.75h59.175v-49.6125c-7.49999971-4.725-15.33750029-8.4375-24.11250029-11.1375a108.35624971 108.35624971 0 0 0-30.05624971-4.05c-27.24374971 0-47.28750029 8.1-60.13125 24.3-11.88749971 15.1875-17.84999971 37.125-17.84999971 65.475 0 29.7 6.58125 52.3125 20.06249942 68.5125 12.18750029 15.525 28.8 22.95 49.78125 22.95 16.89374971 0 30.67499971-3.7125 41.00625-11.475 10.03124971-7.7625 16.91250029-19.2375 20.06250029-34.7625h36.93750029c-4.06874971 27-14.10000029 46.9125-30.05625058 60.4125-16.59375 13.8375-39.15 20.5875-67.95 20.5875z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="woshou" unicode="&#59312;" d="M451.141-5.898333330000014c-12.257 16.822-24.515 33.651-37.682 51.717-58.222-22.667-74.41-13.345-81.387 51.578-45.611-12.406-75.66-14.524-83.079 61.46-10.029-2.229-20.989-8.178-29.754-5.855-15.924 4.227-36.438 9.595-44.056 21.51-7.613 11.893-8.953 39.677-0.617 47.891 43.194 42.56 31.385 77.063-5.868 114.851-7.932 8.037-3.901 27.87-5.384 42.272 3.74 1.15 7.488 2.292 11.23 3.441 15.939-19.606 30.658-40.41 48.32-58.312 9.165-9.3 23.226-18.192 35.624-19.017 31.258-2.08 45.749-18.011 46.332-47.025 0.426-21.19 9.827-26.295 29.452-31.225 15.27-3.835 32.622-19.15 38.996-33.756 8.637-19.795 18.576-28.402 39.432-33.117 13.68-3.094 25.524-17.012 36.722-27.638 10.914-10.346 19.011-23.705 30.084-33.833 11.974-10.958 25.53-20.381 39.213-29.198 10.194-6.567 21.451-14.688 32.676-15.42 8.842-0.578 21.267 7.108 26.424 14.896 2.898 4.365-3.396 19.095-9.612 24.449-21.233 18.299-44.86 33.822-66.213 51.994-5.61 4.77-6.31 15.309-9.26 23.198 8.574-0.45 19.226 2.223 25.384-1.87 38.982-25.868 77.149-52.979 115.21-80.202 17.817-12.738 36.237-20.59 51.599 0.597 15.49 21.368 5.513 38.553-14.181 52.512-39.885 28.264-79.827 56.513-118.503 86.375-7.727 5.97-9.9 19.129-14.637 28.98 10.06-1.763 22.117-0.575 29.847-5.79 45.696-30.815 90.375-63.118 135.396-94.927 5.094-3.597 10.008-7.486 15.273-10.812 16.48-10.428 33.425-14.604 46.8 3.694 13.685 18.733 7.821 35.366-9.886 48.345-52.838 38.769-105.811 77.346-158.73 116.002-5.876 4.292-13.153 7.632-17.129 13.278-3.532 5.024-3.384 12.636-4.855 19.11 5.804 1.296 12.388 4.966 17.233 3.368 8.617-2.847 16.565-8.343 24.117-13.683 53.49-37.847 107-75.669 160.085-114.075 20.712-14.983 40.757-22.254 60.563-0.031 16.977 19.056 14.027 41.007-10.049 62.2-88.218 77.682-176.594 155.202-265.81 231.74-35.575 30.52-86.073 14.312-98.855-31.137-11.964-42.532-36.544-72.996-79.632-83.308-15.613-3.731-34.84 0.716-50.409 6.668-7.351 2.812-15.12 18.753-13.831 27.424 4.831 32.418 12.643 64.455 20.719 96.288 4.76 18.756 12.122 36.859 19.775 59.607h-89.095c3.232 31.848 17.453 43.291 45.685 40.624 20.63-1.946 41.863-2.513 62.332 0.125 31.29 4.027 63.406 7.747 92.918 18.048 51.388 17.952 101.498 16.413 153.012 3.363 34.088-8.633 68.963-14.162 102.997-22.953 9.337-2.417 20.659-9.72 24.747-17.931 40.765-81.83 80.35-164.246 119.725-246.76 3.294-6.898 6.458-18.088 3.22-23.156-17.312-27.108-9.93-51.505 0.867-78.759 12.993-32.8-7.313-70.11-43.161-80.539-18.533-5.39-25.91-14.116-30.555-32.003-9.767-37.58-41.131-45.728-74.24-47.885-21.456-55.12-42.504-64.69-98.909-48.517-7.121 2.038-17.022-4.192-25.218-7.596-18.413-7.654-39.618-26.255-54.199-21.93-35.626 10.57-53.34-7.153-72.216-29.347-8.336 0.002-16.664 0.002-24.997 0.002M176.278 731.23466667c19.851-10.89 39.5-22.173 59.614-32.552 16.809-8.676 21.834-19.997 13.252-37.817-46.649-96.908-92.912-193.996-139.26-291.039-9.007-18.863-23.498-22.588-40.98-13.507-22.852 11.868-45.053 24.998-67.536 37.58v18.743c27.866 53.755 56.014 107.372 83.515 161.314 26.644 52.251 52.63 104.834 78.903 157.278h12.492m680.915 0c10.256-16.578 21.812-32.492 30.54-49.837 42.46-84.38 83.413-169.524 126.558-253.545 13.821-26.92 8.323-40.815-18.716-53.117-65.705-29.905-65.34-30.81-97.496 34.79-39.752 81.091-79.013 162.418-119.386 243.192-11.562 23.123-9.687 38.367 15.809 49.545 17.583 7.718 33.521 19.177 50.194 28.972h12.497m0 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="api-copy" unicode="&#60535;" d="M834.56 82.55999999999995L834.56 211.35000000000002 720.8 211.35000000000002l0-29.679375c-42.72 1.059375-72.48 6.3609375-94.08 16.42875-25.92000001 12.19218749-45.6 31.801875-70.08 72.0815625-16.8 28.6190625-34.56 54.590625-56.16 76.32L871.04 346.50093749999996l0-46.1109375L992 379.89l-120.96 80.559375 0-45.0515625-493.92 0c20.64 21.73124999 38.4 47.1703125 55.2 76.32 24 40.2796875 43.68 59.8903125 70.08 72.080625 24 11.13 58.56 16.4296875 108.96 16.4296875 11.04-25.97062499 34.56-43.99125 61.44-43.99125001 38.4 0 69.12 34.98 69.12 78.4396875 0 43.45875-30.72 78.4396875-69.12000001 78.43968751-26.88 0-51.36-18.55125001-61.43999999-43.99125-54.24-1.059375-95.04-5.29875-131.52-21.7284375-39.84-18.55125-70.08-50.3503125-96.96-96.9909375-24.96-41.3390625-46.56-68.900625-73.44-87.45-17.76-11.13-39.36-19.610625-68.16-24.90937499-12 51.40875-53.28 88.509375-102.72000001 88.50937499-58.56000001 0-106.08-53.529375-106.07999999-120.31125s47.52-120.30937499 106.07999999-120.309375c46.56 0 85.92 33.91874999 100.80000001 81.09l79.2 0c54.24-1.0621875 88.32-11.1309375 114.72-27.5596875 26.88-17.49 48.48-45.0515625 73.44-86.39062501 26.88-46.1109375 56.64-79.5 96.96-96.99093749 32.64-14.31 70.08000001-20.6709375 116.64-21.7284375l0-30.740625L834.56 83.61468749999995l0-1.0546875z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tixing" unicode="&#59235;" d="M660.48 23.552q6.144 0-3.584-15.36t-29.696-33.792-47.104-33.792-57.856-15.36q-27.648 0-53.248 15.36t-45.056 33.792-29.696 33.792-6.144 15.36l272.384 0zM914.432 110.592q7.168-9.216 6.656-17.92t-4.608-14.848-10.24-9.728-12.288-3.584l-747.52 0q-14.336 0-20.992 11.776t4.608 29.184q17.408 30.72 40.96 68.608t44.544 81.408 36.352 92.16 15.36 101.888q0 51.2 14.336 92.16t37.376 71.68 53.248 52.224 62.976 32.768q-16.384 26.624-16.384 55.296 0 41.984 28.672 70.656t70.656 28.672 70.656-28.672 28.672-70.656q0-14.336-4.096-28.16t-11.264-25.088q34.816-11.264 66.048-32.768t54.272-53.248 36.864-72.704 13.824-91.136q0-51.2 15.36-100.864t36.864-94.208 45.568-81.408 43.52-63.488zM478.208 753.664q0-16.384 11.264-28.16t27.648-11.776l2.048 0q16.384 1.024 27.648 12.288t11.264 27.648q0 17.408-11.264 28.672t-28.672 11.264-28.672-11.264-11.264-28.672z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="huangguan" unicode="&#59236;" d="M546.03080368 784.90256411q24.61538462 0 47.26153845-9.84615386t38.8923077-27.07692308 26.09230769-39.87692305 9.84615385-48.24615386q0-37.41538461-19.2-66.95384614t-49.72307693-45.2923077q-10.83076923-30.52307693-10.83076922-63.01538462 0-36.43076923 13.29230768-72.36923078t36.43076924-64.98461537 54.15384614-47.26153847 66.46153848-18.21538462q30.52307693 0 57.6 14.76923077t49.23076922 37.90769231 37.41538461 52.18461538 22.15384615 57.6q-26.58461539 12.80000001-43.32307692 38.4t-16.73846153 57.10769231q0 21.66153846 7.87692308 40.36923078t21.66153845 32.49230769 32.4923077 22.15384614 39.38461538 8.36923077 39.38461538-8.36923077 32.4923077-22.15384614 21.66153846-32.49230769 7.87692308-40.36923078q0-31.50769231-16.24615384-56.6153846t-41.84615386-37.90769231q-4.92307693-49.23076923-14.76923075-100.43076924t-24.61538464-101.90769231-34.46153845-97.96923076-43.32307691-86.64615386q-81.72307694-30.52307693-169.35384617-46.76923076t-180.18461538-16.24615385-179.6923077 16.24615385-169.84615384 46.76923076q-23.63076923 39.38461539-43.3230769 86.64615386t-34.46153848 97.96923076-25.10769231 101.90769231-14.27692307 100.43076924q-25.6 12.80000001-40.86153846 37.90769231t-15.26153847 56.6153846q0 21.66153846 7.87692308 40.36923078t21.16923077 32.49230769 31.5076923 22.15384614 38.8923077 8.36923077 39.38461539-8.36923077 32.49230768-22.15384614 21.66153848-32.49230769 7.87692307-40.36923078q0-32.49230769-16.73846154-58.09230769t-43.32307693-37.41538462q6.89230769-29.53846154 22.15384615-58.58461538t37.41538463-52.67692306 49.23076922-38.40000003 57.6-14.76923075q35.44615385 0 66.46153847 18.21538462t54.64615384 47.26153845 36.92307692 65.47692307 13.29230769 72.86153847q0 34.46153847-13.78461539 66.95384615-27.56923077 16.73846154-44.8 45.78461539t-17.23076922 63.50769231q0 25.6 9.84615384 48.24615386t26.58461538 39.87692305 38.8923077 27.07692308 47.75384616 9.84615386z"  horiz-adv-x="1090" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="paixu2" unicode="&#59239;" d="M851.3007792 542.87582926L552.04345841 855.43486574 552.38791563 855.79518146 512 897.25787655 471.60591792 855.79518146 471.95389952 855.43222368 172.6992208 542.87582926 213.08713643 501.4069677 511.99735671 813.60833176 810.90669712 501.4069677ZM172.6992208 241.90007198L471.95654159-70.65896452000004 471.61208437-71.01928023000005 512-112.48197532999995 552.39408208-71.01928023000005 552.04610048-70.65632244000005 851.3007792 241.90007198 810.91286357 283.36893353000005 512.00264329-28.83243053000001 213.09330288 283.36893353000005Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="qidong" unicode="&#59240;" d="M510.30158507-94.30914453000003c-64.30947307 0-126.7175072 12.60494933-185.4918496 37.46446826-56.74628587 24.00157867-107.7020224 58.35410453-151.44931734 102.10139947s-78.0998208 94.70303147-102.10139946 151.44931733c-24.85951893 58.7754336-37.46446827 121.18237547-37.46446827 185.4918496 0 64.30947307 12.60494933 126.7175072 37.46446827 185.4918496 24.00157867 56.74737707 58.35410453 107.7020224 102.10139946 151.44931734 43.74729493 43.74838613 94.70303147 78.0998208 151.44931734 102.10249066 58.7754336 24.85951893 121.18237547 37.46446827 185.4918496 37.46446827s126.7175072-12.60494933 185.4918496-37.46446827c56.74628587-24.00266987 107.7020224-58.35410453 151.44931733-102.10249066 43.74729493-43.74729493 78.0998208-94.70303147 102.10139947-151.44931734 24.85951893-58.7743424 37.46446827-121.18237547 37.46446826-185.4918496 0-64.30947307-12.60494933-126.7175072-37.46446826-185.4918496-24.00157867-56.74628587-58.35410453-107.7020224-102.10139947-151.44931733s-94.70303147-78.0998208-151.44931733-102.10139947C637.01909227-81.70419519999996 574.61105813-94.30914453000003 510.30158507-94.30914453000003zM510.30158507 791.03136533c-109.20287147 0-211.86968107-42.52587627-289.08864-119.7448352-77.21895893-77.21895893-119.7448352-179.88576853-119.7448352-289.08864 0-109.20287147 42.52587627-211.87077333 119.7448352-289.08864 77.21895893-77.21786667 179.88576853-119.7448352 289.08864-119.7448352 109.20287147 0 211.87077333 42.52587627 289.08864 119.7448352 77.21786667 77.21895893 119.7448352 179.88576853 119.7448352 289.08864 0 109.20287147-42.52587627 211.86968107-119.7448352 289.08864C722.17235733 748.505488 619.50554773 791.03136533 510.30158507 791.03136533zM695.91568533 381.33994987000005L425.0140608 174.20421867000005 425.0140608 590.1926517300001Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gouwuqia" unicode="&#59241;" d="M825.173333-59.537778 198.826667-59.537778c-78.563556 0-129.820444 5.859556-159.288889 35.612444-31.232 31.573333-30.776889 80.952889-29.923556 162.702222L9.955556 413.777778 9.614222 461.223111C8.817778 542.972444 8.305778 592.408889 39.537778 623.982222c29.468444 29.752889 80.725333 35.555556 159.288889 35.555556l626.346667 0c78.563556 0 129.763556-5.859556 159.288889-35.555556 31.288889-31.573333 30.776889-80.952889 29.923556-162.759111L1014.044444 186.222222l0.341333-47.445333c0.853333-81.806222 1.308444-131.185778-29.923556-162.702222C954.936889-53.735111 903.736889-59.537778 825.173333-59.537778zM198.826667 616.871111c-75.434667 0-112.810667-6.656-128.967111-22.926222-18.773333-18.944-18.318222-61.610667-17.578667-132.266667L52.622222 186.222222l-0.284444-47.900444c-0.739556-70.656-1.194667-113.322667 17.578667-132.266667 16.156444-16.270222 53.475556-22.926222 128.967111-22.926222l626.346667 0c75.434667 0 112.810667 6.656 128.967111 22.926222 18.716444 18.944 18.318222 61.610667 17.635556 132.266667L971.377778 413.777778l0.341333 47.900444c0.739556 70.712889 1.137778 113.322667-17.635556 132.266667-16.099556 16.327111-53.475556 22.926222-128.967111 22.926222L198.826667 616.871111zM50.801778 487.904l929.223111 0 0-113.777778-929.223111 0 0 113.777778ZM157.468444 300l42.666667 0 0-152.462222-42.666667 0 0 152.462222ZM253.44 300l42.666667 0 0-152.462222-42.666667 0 0 152.462222ZM349.468444 300l42.666667 0 0-152.462222-42.666667 0 0 152.462222Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="second" unicode="&#59244;" d="M657.213 203.989c198.528 34.618 302.066 272.621 302.066 485.914-63.067 0-134.414 0-162.918 0 9.62 68.769 15.646 124.139 15.646 143.373-91.65 0-506.526 0-598.174 0 3.318-36.777 7.833-87.304 14.016-143.373-28.797 0-99.964 0-163.857 0 0-216.193 104.931-453.824 307.677-486.46 32.152-41.288 56.080-58.536 83.364-67.988 0-19.12 0-47.786 0-47.786l-115.771 0-86.838-152.96h520.991l-86.838 152.959h-115.774v47.786c25.028 6.397 57.28 33.257 86.408 68.536zM715.531 297.96c24.752 57.706 52.938 207.107 72.409 334.572 12.798 0 32.918 0 60.302 0 0-179.8-78.459-313.975-135.834-341.377 1.042 2.277 2.141 4.551 3.122 6.805zM175.244 632.531c26.479 0 46.304 0 59.318 0 15.94-128.166 40.496-269.924 78.457-341.552-58.14 26.842-137.775 161.753-137.775 341.552zM384.166 332.578v59.415l104.094 99.883c21.831 20.896 37.112 38.439 45.848 52.632 8.731 14.188 13.099 28.926 13.099 44.211 0 34.463-18.48 51.696-55.439 51.696-31.035 0-61.054-12.478-90.059-37.427v67.134c31.031 20.585 66.276 30.877 105.731 30.877 35.709 0 64.013-9.086 84.913-27.252 20.895-18.169 31.345-43.316 31.345-75.439 0-42.419-25.731-86.864-77.193-133.333l-75.556-68.070v-1.404h149.473v-62.924l-236.257-0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="third" unicode="&#59245;" d="M657.213 203.989c198.528 34.618 302.066 272.621 302.066 485.914-63.067 0-134.414 0-162.918 0 9.62 68.769 15.646 124.139 15.646 143.373-91.65 0-506.526 0-598.174 0 3.318-36.777 7.833-87.304 14.016-143.373-28.797 0-99.964 0-163.857 0 0-216.193 104.931-453.824 307.677-486.46 32.152-41.288 56.080-58.536 83.364-67.988 0-19.12 0-47.786 0-47.786l-115.771 0-86.838-152.96h520.991l-86.838 152.959h-115.774v47.786c25.028 6.397 57.28 33.257 86.408 68.536zM715.531 297.96c24.752 57.706 52.938 207.107 72.409 334.572 12.798 0 32.918 0 60.302 0 0-179.8-78.459-313.975-135.834-341.377 1.042 2.277 2.141 4.551 3.122 6.805zM175.244 632.531c26.479 0 46.304 0 59.318 0 15.94-128.166 40.496-269.924 78.457-341.552-58.14 26.842-137.775 161.753-137.775 341.552zM483.815 326.262c-37.273 0-67.292 6.161-90.058 18.48v66.666c24.17-18.092 52.398-27.135 84.679-27.135 20.427 0 36.645 4.521 48.654 13.567 12.006 9.042 18.012 21.908 18.012 38.596 0 17.153-7.134 30.252-21.403 39.298-14.268 9.042-34.268 13.567-60 13.567h-32.28v58.246h29.708c48.655 0 72.983 16.374 72.983 49.123 0 30.877-18.637 46.316-55.906 46.316-24.327 0-47.953-7.953-70.877-23.859l-0 62.457c24.949 12.942 54.346 19.415 88.188 19.415 34.305 0 62.142-7.916 83.508-23.743 21.364-15.83 32.047-37.777 32.047-65.848 0-47.409-24.017-77.193-72.047-89.357v-1.17c25.263-2.807 45.457-12.046 60.585-27.719 15.124-15.672 22.691-34.736 22.691-57.193 0-34.467-12.596-61.367-37.778-80.702-25.188-19.338-58.755-29.006-100.704-29.006z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="first" unicode="&#59249;" d="M657.213 203.989c198.528 34.618 302.066 272.621 302.066 485.914-63.067 0-134.414 0-162.918 0 9.62 68.769 15.646 124.139 15.646 143.373-91.65 0-506.526 0-598.174 0 3.318-36.777 7.833-87.304 14.016-143.373-28.797 0-99.964 0-163.857 0 0-216.193 104.931-453.824 307.677-486.46 32.152-41.288 56.080-58.536 83.364-67.988 0-19.12 0-47.786 0-47.786l-115.771 0-86.838-152.96h520.991l-86.838 152.959h-115.774v47.786c25.028 6.397 57.28 33.257 86.408 68.536zM715.531 297.96c24.752 57.706 52.938 207.107 72.409 334.572 12.798 0 32.918 0 60.302 0 0-179.8-78.459-313.975-135.834-341.377 1.042 2.277 2.141 4.551 3.122 6.805zM175.244 632.531c26.479 0 46.304 0 59.318 0 15.94-128.166 40.496-269.924 78.457-341.552-58.14 26.842-137.775 161.753-137.775 341.552zM399.838 332.578v60.116h75.556v231.814l-77.661-17.545v61.989l153.217 32.28 0-308.538h75.088v-60.117l-226.2 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zifuda" unicode="&#59404;" d="M310.506667 89.344l36.458667 114.304-84.074667 226.901333L158.208 430.549333 0-26.965333l90.730667 0 37.781333 117.952 181.482667 0L310.506667 89.344zM151.296 162.794667l68.821333 182.656 68.757333-182.656L151.296 162.794667zM753.664 812.245333l-180.714667 0L299.584-44.245333l156.928 0 65.002667 203.84 313.237333 0 64-203.84L1024-44.245333 753.664 812.245333zM560.917333 291.797333 679.701333 674.133333l118.613333-382.336L560.917333 291.797333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="youjian" unicode="&#59251;" d="M506 390.66666666c6 0 12 0 12 0L992 702.66666666 992 714.66666666 32 714.66666666l0-12L506 390.66666666zM536 348.66666666000003C530 342.66666666000003 518 342.66666666000003 512 342.66666666000003c-6 0-12 0-18 6L32 648.66666666 32 66.66666666000003c0-24 18-48 48-48l870 0c24 0 48 18 48 48L998 648.66666666 536 348.66666666000003z"  horiz-adv-x="1031" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jsongeshihua" unicode="&#59252;" d="M171.79534222 367.68881778L171.79534222 367.68881778 171.79534222 367.68881778 174.12551111 367.68881778 171.79534222 367.68881778ZM551.61287111 502.83861333c-48.93354667 0-69.90506667-51.26371555-69.90506666-104.8576 0-53.59388445 23.30168889-102.52743111 69.90506666-102.52743111 46.60337778 0 69.90506667 48.93354667 69.90506667 104.8576C621.51793778 449.24472889 600.54641778 502.83861333 551.61287111 502.83861333zM821.91246222 742.84600889L202.08753778 742.84600889c-102.52743111 0-186.41351111-83.88608-186.41351111-186.41351111l0-372.82702223c0-102.52743111 83.88608-186.41351111 186.41351111-186.4135111l619.82492444 0c102.52743111 0 186.41351111 83.88608 186.41351111 186.4135111l0 372.82702223C1008.32597333 658.95992889 924.43989333 742.84600889 821.91246222 742.84600889zM213.73838222 353.70780445c0-69.90506667-32.62236445-90.87658667-79.22574222-90.87658667-11.65084445 0-25.63185778 2.33016889-34.95253333 4.66033777l4.66033778 32.62236445c6.99050667-2.33016889 16.31118222-4.66033778 25.63185777-4.66033778 25.63185778 0 41.94304 11.65084445 41.94304 58.25422223l0 177.09283555 39.61287111 0L211.40821333 353.70780445zM318.59598222 262.83121778c-25.63185778 0-51.26371555 6.99050667-62.91456 16.31118222l9.32067556 32.62236445c13.98101333-9.32067555 34.95253333-16.31118222 58.25422222-16.31118223 32.62236445 0 48.93354667 16.31118222 48.93354667 39.61287111 0 23.30168889-13.98101333 37.28270222-44.27320889 48.93354667-39.61287111 16.31118222-65.24472889 39.61287111-65.24472889 76.89557333 0 41.94304 32.62236445 74.56540445 86.21624889 74.56540445 25.63185778 0 44.27320889-6.99050667 55.92405333-11.65084445l-9.32067556-32.62236444c-9.32067555 4.66033778-25.63185778 11.65084445-46.60337777 11.65084444-32.62236445 0-44.27320889-18.64135111-44.27320889-34.95253333 0-23.30168889 13.98101333-32.62236445 48.93354666-48.93354667 41.94304-18.64135111 62.91456-41.94304 62.91456-79.22574222C411.80273778 295.45358222000004 379.18037333 262.83121778 318.59598222 262.83121778zM551.61287111 262.83121778c-67.57489778 0-111.84810667 53.59388445-111.84810666 135.14979555 0 83.88608 46.60337778 137.47996445 114.17827555 137.47996445 69.90506667 0 109.51793778-58.25422222 109.51793778-135.14979556C663.46097778 309.43459555000004 614.52743111 262.83121778 551.61287111 262.83121778zM896.47786667 265.16138666999996l-39.61287112 0-69.90506666 123.49895111c-16.31118222 27.96202667-32.62236445 60.58439111-44.27320889 88.54641777l-2.33016889 0c2.33016889-32.62236445 2.33016889-67.57489778 2.33016889-114.17827555l0-100.19726222-37.28270222 0L705.40401778 530.8006399999999l44.27320889 0 69.90506666-123.49895111c16.31118222-27.96202667 32.62236445-60.58439111 41.94304-88.54641778l0 0c-2.33016889 34.95253333-4.66033778 69.90506667-4.66033778 111.84810667l0 97.86709333 37.28270223 0L894.14769778 265.16138666999996z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icidea" unicode="&#59253;" d="M512 874.656c-271.008 0-490.656-219.68-490.656-490.656s219.68-490.656 490.656-490.656c270.976 0 490.656 219.68 490.656 490.688 0 270.976-219.68 490.656-490.656 490.656l0 0zM490.496 758.912l37.12 0 0-117.76-37.12 0 0 117.76zM258.208 365.824l-117.728 0 0 37.152 117.728 0 0-37.152zM234.08 634.88l26.24 26.24 83.232-83.232-26.24-26.24-83.232 83.232zM516.064 9.088c-45.248 0.832-79.872 38.176-93.952 94.08l187.936 0c-14.112-55.904-48.736-93.248-93.984-94.08l0 0zM676.32 335.072l-4.512-11.04-2.528-4.896c-0.608-1.248-1.248-2.4-1.856-3.68l-0.64-1.216c0 0-41.696-82.656-49.344-158.912l-202.656 0c-6.72 67.008-45.76 154.176-54.4 171.328l0 0c-11.072 23.552-17.248 47.392-17.248 75.264 0 98.656 77.44 178.656 172.96 178.656s172.96-80 172.96-178.656c0.032-25.44-0.992-41.92-12.704-66.848l0 0zM676.32 582.048l83.168 83.232 26.208-26.208-83.168-83.264-26.24 26.272zM765.792 371.712l0 37.12 117.792 0 0-37.12-117.792 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zitifont5" unicode="&#59255;" d="M0.15655174 112.21075780000001l4.41427195 22.77393153 6.97269382 0.35791394c23.01254081 1.23281469 37.28933025 4.10938229 42.80385618 8.62970282 5.48801377 4.53357659 20.0034125 25.16002446 43.50642797 61.89259969l283.94506013 459.09753817 26.83028952 0 86.98634383-452.49601435c6.36291451-33.29925262 12.79210939-54.23059014 19.27432854-62.79401261 6.49547523-8.56342244 19.28758462-13.34886439 38.38958422-14.32981372l9.15994568-0.35791394-4.75892981-22.77393153L353.82855008 112.21075780000001l4.78544195 22.77393153 11.36045361 0c35.52627269 0 53.26289691 5.87243985 53.26289691 17.63057563 0 12.48721973-2.06794721 30.01174678-6.23035379 52.54706902l-14.05143622 74.5388923L176.51533232 279.70122628l-45.98531343-73.09398046c-18.85013424-29.62732069-28.27520137-48.74257637-28.27520136-57.29274277 0-9.55762785 15.07215375-14.32981373 45.17669304-14.32981372l9.17320176 0-4.75892981-22.77393153L0.15655174 112.21075780000001zM191.12352356 311.64835956l205.09794445 0-47.33743276 255.63009055L191.12352356 311.64835956zM872.432595 112.21075780000001l33.52460584 168.19304029c-30.43594109-53.72685941-64.35822909-96.70304451-101.78012006-128.96832352-37.38212276-32.26527901-72.21907971-48.38466243-104.4976148-48.38466244-26.16748593 0-45.77321628 7.71503385-58.84370317 23.14510154-13.08374297 15.44332377-19.60573034 38.48237673-19.60573035 69.1171589 0 79.64247998 27.97031171 153.71740977 83.95070336 222.22478935 55.99364771 68.49412352 116.50761594 102.74781331 181.51539254 102.74781329 6.85338917 0 15.64216485-0.78210823 26.39283915-2.3065565 10.77718645-1.52444827 23.59580798-3.83100479 38.52214495-6.87990132l72.21907972 0-59.79814035-303.69660726c-4.14915051-20.10946107-6.24360987-37.60747599-6.24360987-52.56032508 0-7.8343385 2.33306865-12.61978045 6.9859499-14.32981372 4.63962516-1.72328935 19.93713215-3.43332262 45.90577698-5.15661199l6.60152382-0.35791394-4.40101587-22.77393152L872.432595 112.22401388000003zM916.88020409 335.12486290000004l25.41188983 127.45713133c-14.14422871 7.47642455-28.64637138 13.01746261-43.51968406 16.62311416-14.88656875 3.60565156-30.23710001 5.42173341-46.091362 5.42173341-36.58675845 0-66.187567-16.53032165-88.85544995-49.59096498-18.04151386-26.43260737-33.52460583-61.69375863-46.46253202-105.77019769-12.93792618-44.07643907-19.36712105-83.7386062-19.36712105-119.01301354 0-17.63057563 2.91633582-30.84687931 8.78877568-39.66216713 5.84592771-8.81528781 14.63470338-13.21630368 26.37958307-13.21630368C779.85218884 157.38745085000005 841.08198495 216.64209225000002 916.88020409 335.12486290000004z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhinengyouhua" unicode="&#59256;" d="M872.92528107 382.41073707c4.48944853 5.90734187 8.8228096 11.8277824 12.94877973 17.76132053 59.4085184 85.43487893 73.92363947 164.01497173 40.87003093 221.2644512-33.05251733 57.24947947-108.3558464 83.96786773-212.0563328 75.23783787-7.20080107-0.60688853-14.49438187-1.39824533-21.85454613-2.33368427-2.87071467 6.84168853-5.83202667 13.55566933-8.9068576 20.0939136-44.2854176 94.16600107-105.08017493 146.02552213-171.18630187 146.02552213-66.10612587 0-126.90088427-51.85952107-171.1841184-146.02552213-3.07592213-6.53933547-6.03614187-13.25222507-8.9068576-20.0950048-7.36125547 0.93543787-14.65592747 1.72679467-21.85672853 2.33368427-103.6906624 8.73221333-179.0005408-17.9894496-212.05414933-75.23783787-33.05360853-57.24947947-18.53957973-135.8295712 40.86893973-221.2644512 4.12487893-5.93244693 8.45824-11.85397867 12.94877973-17.76132053-4.4905408-5.90734187-8.8228096-11.8277824-12.94877973-17.76132054-59.4074272-85.43487893-73.92145707-164.01497173-40.86893973-221.26335893 28.94728533-50.13818347 90.3019968-76.8587552 174.75231893-76.8587552 11.9773216 0 24.42399893 0.53812267 37.3018304 1.62091733 7.20080107 0.60688853 14.49547307 1.39824533 21.85672853 2.33368427 2.87071467-6.84168853 5.83202667-13.55566933 8.9079488-20.0950048 44.28323413-94.16709227 105.07799253-146.02661333 171.1841184-146.02661333 66.10612587 0 126.90088427 51.85952107 171.18630187 146.02661333 3.07592213 6.53933547 6.03614187 13.25222507 8.9068576 20.0950048 7.36016427-0.93543787 14.65374507-1.72679467 21.85454613-2.33368427 12.8865632-1.08606933 25.32014293-1.62091733 37.30401387-1.62091733 84.4404992 0 145.8061248 26.72275413 174.75231893 76.8587552 33.05251733 57.2483872 18.53848747 135.82848-40.87003093 221.26335893C881.74918187 370.58186347000003 877.41582187 376.5033952 872.92528107 382.41073707zM718.2701504 654.1408298700001c85.01791573 7.1636896 147.54383467-12.53945813 171.50939307-54.04693974 23.9655584-41.50857387 9.76807147-105.49495573-38.9478528-175.55568213-1.8937984-2.72445013-3.84326507-5.44671787-5.82329494-8.16680213-29.83360533 33.70525013-65.24163733 66.50344213-104.92736213 97.29322453-6.82094933 49.76378987-17.52118507 96.8260512-31.7939872 139.5167488C711.63257707 653.53612373 714.96391573 653.8624906699999 718.2701504 654.1408298700001zM609.46022827 214.88759892999997c-32.01665813-18.48500267-64.4546464-34.79677653-96.7201728-48.73666346-32.2655264 13.93988587-64.70351467 30.25165973-96.7201728 48.73666346-32.01665813 18.48500267-62.36109867 38.42064533-90.56614614 59.39214614-4.05938773 34.91247893-6.15184427 71.1598944-6.15184426 108.1299008 0 36.9700064 2.09245653 73.21960533 6.15293546 108.13208426 28.20504747 20.9715008 58.54948693 40.9071424 90.56505494 59.39214614 32.01665813 18.48500267 64.4557376 34.79677653 96.7201728 48.73666346 32.2655264-13.93988587 64.70242347-30.25165973 96.7201728-48.73666346 32.0177504-18.48500267 62.36218987-38.42173653 90.5683296-59.39323734 4.05938773-34.91247893 6.15293547-71.1609856 6.15293546-108.130992 0-36.9700064-2.09245653-73.21742187-6.15184426-108.1288096C671.82241813 253.30933546999995 641.47797867 233.37260267 609.46022827 214.88759892999997zM691.11296747 215.66476587c-6.55352533-34.62104107-15.1656704-67.40940907-25.72509867-97.64578774-31.46543787 5.97392533-64.1675744 14.9091616-97.42748267 26.5448352 21.0446336 10.22105493 42.04123947 21.35244373 62.8402784 33.36032747C651.60079573 189.93202559999997 671.7394624 202.55007360000002 691.11296747 215.66476587zM457.51972373 144.56381439999996c-33.2599072-11.6356736-65.9620448-20.57091093-97.4263904-26.5448352-10.55833707 30.23637867-19.17048213 63.02474667-25.72400746 97.64469653 19.37350613-13.11469227 39.51108053-25.731648 60.30902826-37.7395328C415.47739307 165.91516587 436.47399893 154.78486933 457.51972373 144.56381439999996zM279.14790293 311.30978560000005c-26.70638187 22.98536747-50.79528213 46.83849813-71.70129173 71.10095147 20.9060096 24.26245333 44.99600107 48.11558507 71.70129173 71.10204373-1.67112747-23.3357472-2.52906667-47.08518293-2.52906666-71.10204373C276.6188352 358.39387733 277.47677547 334.64553279999996 279.14790293 311.30978560000005zM334.3693248 549.15889173c6.55352533 34.62104107 15.1656704 67.40831787 25.72400747 97.64469654 31.4643456-5.97392533 64.1664832-14.9091616 97.4252992-26.5448352-21.0446336-10.22105493-42.04123947-21.35135253-62.8402784-33.36032747C373.87931413 574.89053973 353.74283093 562.273584 334.3693248 549.15889173zM567.96147733 620.258752c33.258816 11.6345824 65.9609536 20.56981867 97.4263904 26.5448352 10.55833707-30.23637867 19.17157333-63.02474667 25.72509867-97.64578773-19.37350613 13.11469227-39.51217173 25.73274027-60.31121173 37.740624C610.0027168 598.90739947 589.00611093 610.0387882699999 567.96147733 620.258752zM746.3343904 453.5116896c26.7052896-22.98536747 50.79528213-46.83849813 71.70129173-71.10095147-20.9060096-24.26136213-44.99490987-48.1144928-71.70129173-71.09986026 1.67112747 23.334656 2.52906667 47.08409173 2.52906667 71.09986026C748.86345813 406.4275968 748.00551787 430.17594133 746.3343904 453.5116896zM380.17851413 696.26939093c36.3161824 77.22005013 84.63260693 121.5076512 132.56154134 121.5076512s96.24535893-44.28760107 132.56044906-121.5076512c1.4124352-3.00278933 2.79430827-6.051424 4.1608992-9.12516266-44.10640747-8.9843552-90.21467413-23.2495168-136.72134826-42.22352427-46.50667413 18.97400747-92.61494187 33.239168-136.72134827 42.22352427C377.38529707 690.2190592 378.76717013 693.2676928 380.17851413 696.26939093zM174.65060267 424.53929813c-48.71701547 70.0596352-62.91231893 134.04710827-38.9478528 175.55568214 20.73136533 35.90685973 70.2943136 55.4910304 138.3400832 55.4910304 10.61618773 0 21.69409173-0.47699733 33.16931093-1.4440896 3.3062336-0.2783392 6.63757333-0.60579733 9.98310187-0.95945174-14.27171093-42.68960533-24.9719456-89.75186667-31.7939872-139.51456533-39.6857248-30.7897824-75.0937568-63.5879744-104.92845334-97.29431573C178.49386773 419.09367253 176.54440107 421.814848 174.65060267 424.53929813zM307.21105173 110.68173652999997c-85.02228267-7.15932267-147.54383467 12.53836587-171.50939306 54.04584854-23.9644672 41.50748267-9.76807147 105.49604693 38.9478528 175.55459093 1.8937984 2.72445013 3.84326507 5.44562667 5.82220266 8.16571093 29.83469653-33.70525013 65.24272853-66.50344213 104.92845334-97.29213333 6.82094933-49.76269867 17.52118507-96.82496 31.7939872-139.51456533C313.84971627 111.28753386999995 310.51728533 110.96007572999997 307.21105173 110.68173652999997zM645.30050453 68.55099199999995c-36.3161824-77.21895893-84.63260693-121.50655893-132.56044906-121.50655893s-96.24535893 44.28760107-132.56154134 121.50655893c-1.4124352 3.00278933-2.79539947 6.0525152-4.1608992 9.12734507 44.10749867 8.9843552 90.2157664 23.250608 136.72244054 42.22461546 46.5077664-18.97400747 92.61603307-33.239168 136.72244053-42.22352426C648.095904 74.60350719999997 646.71293973 71.55378240000005 645.30050453 68.55099199999995zM889.77954347 164.72758507000003c-23.9655584-41.50748267-86.48056213-61.2128128-171.50939307-54.04584854-3.3062336 0.2783392-6.63757333 0.60579733-9.98310187 0.95945174 14.27280213 42.68960533 24.97303787 89.75295893 31.7939872 139.51565653 39.6857248 30.7886912 75.09266453 63.5868832 104.92736214 97.29104107 1.9789376-2.72008427 3.92840427-5.442352 5.82329493-8.16680214C899.54761493 270.22144853 913.7429184 206.23506772999997 889.77954347 164.72758507000003z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiangli" unicode="&#59257;" d="M506.20112592 725.7581037c-121.16878222 0-217.48242963-96.31364741-217.48242962-217.48242962s96.31364741-217.48242963 217.48242962-217.48242963S723.68355556 387.10689185 723.68355556 508.27567408s-96.31364741 217.48242963-217.48242964 217.48242962z m0-372.82702222c-86.99297185 0-155.34459259 68.35162075-155.34459258 155.3445926s68.35162075 155.34459259 155.34459258 155.34459259 155.34459259-68.35162075 155.3445926-155.34459259-68.35162075-155.34459259-155.3445926-155.3445926z m341.75810372-12.4275674c24.85513482 49.71026963 40.38959408 105.63432297 40.38959406 164.66526814 0 208.16175408-170.87905185 375.93391408-382.14769778 375.93391408S124.05342815 713.3305363 124.05342815 505.16878222c0-59.03094518 15.53445925-114.95499852 40.38959407-164.66526814l-155.34459258-264.08580741s99.42053925-18.64135111 198.84107851-40.38959408C273.18423704-38.537291849999974 341.53585778-113.10269630000005 341.53585778-113.10269630000005l142.91702519 242.33756445h49.71026962L677.08017778-113.10269630000005s65.24472889 74.56540445 133.59634964 149.13080889c99.42053925 21.74824297 198.84107852 40.38959408 198.8410785 40.38959408L847.95922964 340.50351407999995z m-515.74404742-341.75810371s-46.60337778 46.60337778-93.20675555 90.09986371c-62.13783703 18.64135111-127.38256592 37.28270222-127.38256592 37.28270222l90.0998637 152.23770073c52.81716148-68.35162075 127.38256592-118.06189037 211.26864592-139.81013333l-80.77918815-139.81013333zM506.20112592 197.58648889000006c-170.87905185 0-310.68918518 139.81013333-310.68918517 310.68918519s139.81013333 310.68918518 310.68918517 310.68918517 310.68918518-139.81013333 310.6891852-310.68918517-139.81013333-310.68918518-310.6891852-310.68918519z m267.19269927-108.74121481c-43.49648592-43.49648592-93.20675555-90.0998637-93.20675555-90.09986371l-83.88608 139.81013333c86.99297185 21.74824297 161.5583763 71.45851259 211.26864592 139.81013333l90.0998637-152.23770073c3.10689185 0-62.13783703-18.64135111-124.27567407-37.28270222z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shuzi" unicode="&#59258;" d="M225.28 179.20000000000005C221.37904747 207.11953706999998 220.0787296 231.63424747 220.0787296 267.72535253L220.0787296 612.2932672C220.0787296 653.15112213 221.37904747 684.4754783999999 225.28 724.65236907 201.87428587 721.928512 192.121904 721.24754773 158.96381013 721.24754773L99.1492064 721.24754773C68.59174613 721.24754773 54.28825387 721.928512 34.13333333 725.33333333L34.13333333 638.8508725300001C58.1892064 641.5747296 77.04381013 642.9366581300001 101.09968213 642.9366581300001L132.30730133 642.9366581300001 132.30730133 267.72535253C132.30730133 232.31521493000002 131.00698453 205.75760427 127.106032 179.20000000000005L225.28 179.20000000000005ZM495.673552 183.20586773000002C529.59863893 183.20586773000002 550.80181867 181.87057813 575.7155552 179.20000000000005L575.7155552 267.32909546999997C558.22293227 263.99087253000005 531.7189568 261.98793813 498.3239488 261.98793813L349.9016896 261.98793813C357.85288213 287.35843520000003 364.2138368 300.711328 380.1162208 322.0759584 393.36820907 340.10236373 419.87218347 368.14343893 443.19568107 388.84042453 512.106016 448.26079893 517.40681067 453.60195627 532.2490368 470.9607168 558.22293227 501.6723712 569.88468053 533.7193152 569.88468053 577.7838634699999 569.88468053 669.25118187 512.63609493 725.33333333 419.87218347 725.33333333 366.8642336 725.33333333 324.98795307 704.6363488 298.48397867 665.91295787 278.8710368 637.20423787 269.3296064 609.8308064 261.9084928 559.08981333L337.70986133 547.7398538699999C341.42041813 578.45150827 345.13097493 593.1396906699999 354.14232533 609.16316267 367.39431253 635.2013034700001 390.7178112 648.55419733 421.4624224 648.55419733 466.51917973 648.55419733 494.61339307 620.51312213 494.61339307 575.11328427 494.61339307 541.0634069299999 479.77116693 519.0311328 431.0038528 476.96951893 377.99590293 432.23732693 362.09351787 416.88149973 343.540736 396.1845152 309.085568 356.79347946999997 285.23199147 314.06422187 270.91984427 265.32616107 264.02881173 241.2909568 260.31825493 217.92339306999997 257.13777813 179.86764800000003 275.69056 182.53822613 284.17183147 183.20586773000002 325.51803307 183.20586773000002L495.673552 183.20586773000002ZM607.57333333 315.07692373C618.74424213 277.00512853 626.8121216 259.93846186999997 642.32727253 241.55897173000005 677.70181653 198.89230507000002 727.35030613 179.20000000000005 799.96121067 179.20000000000005 866.3660608 179.20000000000005 918.4969728 197.57948907000002 952.63030613 232.36923413 975.59272747 256.65640959999996 989.86666667 292.75897493 989.86666667 328.20512853 989.86666667 366.93333333 980.55757867 394.50256427 960.07757867 418.78974293 938.35636053 444.38974293 915.3939392 455.54871787 871.330912 462.76923093 904.2230272 471.95897493 917.87636053 477.21025707 931.52969387 488.36923093 958.21575467 509.3743584 974.3515168 545.47692373 974.3515168 584.86153813 974.3515168 670.19487147 907.3260608 725.33333333 803.68485013 725.33333333 754.03636053 725.33333333 713.6969728 713.5179488 682.0460608 689.23076907 652.87757867 666.91282027 638.60363627 643.93846187 623.08848533 595.3641024L711.83514987 579.61025707C719.28242133 606.52307627 725.4884832 617.6820511999999 737.90060587 630.1538464 752.79514987 643.2820512000001 775.1369728 650.50256427 805.54666667 650.50256427 858.29818347 650.50256427 887.46666667 624.9025642700001 887.46666667 579.61025707 887.46666667 529.06666667 850.850912 498.8717952 788.79030613 498.8717952 762.10424533 498.8717952 748.450912 499.5282048 728.5915168 502.1538464L728.5915168 420.75897493C749.69212267 423.38461547 767.68969387 424.04102507 794.99636053 424.04102507 822.3030272 424.04102507 851.4715168 417.47692373 866.3660608 408.28717973 888.70787733 394.50256427 901.12 369.55897493 901.12 339.3641024 901.12 287.50769173000003 862.02181653 254.03076907000002 800.58181653 254.03076907000002 770.79272747 254.03076907000002 745.9684832 262.5641024 725.4884832 279.63076907000004 709.97333333 292.75897493 704.38787733 303.26153812999996 696.32 333.45640960000003L607.57333333 315.07692373ZM34.13333333 110.93333332999998L989.86666667 110.93333332999998 989.86666667 42.66666667000004 34.13333333 42.66666667000004 34.13333333 110.93333332999998Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="saomiaoerweima" unicode="&#59259;" d="M296.13128 797.578 98.71328 797.578 98.71328 600.16c0-21.815-17.668-39.484-39.484-39.484s-39.484 17.668-39.484 39.484l0 236.902c0 21.815 17.668 39.484 39.484 39.484L296.13128 876.546c21.815 0 39.484-17.668 39.484-39.484S317.94628 797.578 296.13128 797.578zM296.13128-110.546 59.22928-110.546c-21.815 0-39.484 17.669-39.484 39.484L19.74528 165.84c0 21.815 17.668 39.484 39.484 39.484s39.484-17.669 39.484-39.484l0-197.419L296.13128-31.579c21.815 0 39.484-17.669 39.484-39.484C335.61428-92.877 317.94628-110.546 296.13128-110.546zM967.35328 560.676c-21.815 0-39.484 17.668-39.484 39.484l0 197.418L730.45128 797.578c-21.815 0-39.484 17.668-39.484 39.484s17.669 39.484 39.484 39.484l236.901 0c21.815 0 39.484-17.668 39.484-39.484L1006.83628 600.16C1006.83628 578.345 989.16828 560.676 967.35328 560.676zM967.35328-110.546 730.45128-110.546c-21.815 0-39.484 17.669-39.484 39.484 0 21.815 17.669 39.484 39.484 39.484l197.418 0L927.86928 165.84c0 21.815 17.669 39.484 39.484 39.484 21.815 0 39.484-17.669 39.484-39.484l0-236.901C1006.83628-92.876 989.16828-110.546 967.35328-110.546zM0.00428 373.129c0 27.258 21.916 49.354 49.514 49.354l927.547 0c27.345 0 49.514-21.907 49.514-49.354 0-27.258-21.916-49.354-49.514-49.354L49.51728 323.775C22.17228 323.775 0.00428 345.681 0.00428 373.129z"  horiz-adv-x="1027" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gouwu" unicode="&#59260;" d="M513.224386 657.458115l-0.122797 0c-61.96733 0-114.88761-60.600193-135.953392-145.867182l272.027533 0C628.166231 596.857922 575.314513 657.458115 513.224386 657.458115zM513.284761 892.930081C232.88863 892.930081 5.660418 665.638425 5.660418 385.305739c0-280.331663 227.228211-507.624343 507.624343-507.624343 280.397155 0 507.624343 227.291656 507.624343 507.624343C1020.909104 665.638425 793.680892 892.930081 513.284761 892.930081zM196.01993 36.31637l51.123354 475.274564 69.77004 0c26.894534 129.263016 104.601336 222.705198 196.311061 222.705198 91.829452 0 169.537278-93.442182 196.430788-222.705198l46.658669 0 74.236771-475.274564L196.01993 36.31637z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gouwuche" unicode="&#59261;" d="M347.13537296 112.63888750000001q19.45691022 0 36.86456636-7.16656386t30.71939318-19.96825285 20.47959547-30.20805056 7.16915294-36.86456636-7.16785841-36.86327182-20.47959546-30.20805058-30.72068772-20.47959545-36.86456636-7.68049557q-20.47959547 0-37.37590898 7.68049557t-30.20805056 20.47959545-20.47959547 30.20805058-7.1678584 36.86327182 7.1678584 36.86456636 20.47959547 30.20805056 30.20805056 19.96825285 37.37590898 7.16785841zM773.12131476 110.59351703000004q19.45691022 0 37.37590897-7.1678584t30.7193932-19.96825285 20.47959545-30.20805056 7.68049557-36.86456637-7.67920102-36.86327182-20.47959546-30.20805056-30.71939319-20.47959545-37.37720352-7.68049557-36.86456635 7.68049557-30.20805058 20.47959545-20.47959545 30.20805056-7.67920103 36.86327182 7.67920103 36.86456637 20.47959545 30.20805056 30.20805058 19.96825285 36.86456635 7.1678584z m172.03119093 581.63216182q28.67272818 0 44.54506192-7.68049556t22.527555-18.94427307 6.14387864-24.06417193-3.58328194-22.01491784-12.80039442-37.88854614-22.01621239-62.97540329-24.06417193-68.09659671-17.91899876-53.24824273q-13.31303158-40.95919091-33.79262705-56.83152465t-50.1763034-15.87103922H316.41597977l15.35969659-92.16076863h516.09616183q49.15232364 0 49.15232362-41.98446521 0-20.47959547-9.72845511-35.32794944t-38.39988875-14.84835398H312.32006068q-20.47959547 0-34.3052642 9.21711248t-23.03889762 24.06287741-14.84835397 32.25601011-8.7031808 32.76864727q-1.02397977 6.14387863-5.63124148 29.69670795t-11.26507204 58.8794842-14.84835398 78.84773706-16.38367636 87.55221238q-19.45691022 103.42325159-44.03242476 230.39933251h-76.79977752q-15.35969659 0-25.59949431 7.68049556t-16.89631353 18.43163591-9.21711249 23.04019216-2.55930215 22.527555q0 20.47959547 13.82437418 33.79262704t37.37590898 13.31173705h103.42454614q20.47959547 0 32.76735273-6.14387864t19.45691023-15.35969659 10.23979772-19.45691022 5.11989887-17.40765614q2.04795955-8.19183819 4.09591909-23.04019215t4.09591909-30.20805058q3.07193932-18.43163591 6.14387864-38.91123137H945.15250569z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="paiming" unicode="&#59262;" d="M869.02121563 480L869.02121563 672C996.01890219 672 997.62386281 678.39999188 997.62386281 608.00000813 996.01375812 537.6 939.75267219 480 869.02121563 480L869.02121563 480ZM226.0079825 480C155.27652688 480 97.40533625 537.6 97.40533625 608.00000813 97.40533625 678.39999188 99.01544094 672 226.0079825 672L226.0079825 480ZM869.02121563 735.99999187C869.02121563 806.4 811.150025 864 740.41856938 864L354.61062969 864C283.87917312 864 226.0079825 806.4 226.0079825 735.99999187 5.7785225 735.99999187 33.10401406 735.99999187 33.10401406 608.00000813 33.10401406 502.40000812 119.91079906 416.00000813 226.0079825 416.00000813 234.0430775 416.00000813 240.47320906 417.59744812 248.51344531 417.59744812 291.91426813 292.79744812 393.19142281 179.19999186999996 515.36393844 161.59743187000004L515.36393844-32.00000812999997 418.91195375-32.00000812999997C401.22651781-32.00000812999997 386.76129125-46.402559999999994 386.76129125-63.99999187000003 386.76129125-81.60255187999996 401.22651781-96 418.91195375-96L676.11724719-96C693.79753906-96 708.26790687-81.60255187999996 708.26790687-63.99999187000003 708.26790687-46.402559999999994 693.79753906-32.00000812999997 676.11724719-32.00000812999997L579.66526063-32.00000812999997 579.66526063 161.59743187000004C701.83777531 179.19999186999996 803.10978875 291.20000812 846.51575375 417.59744812 852.94588531 417.59744812 860.98612344 416.00000813 869.02121563 416.00000813 975.1184 416.00000813 1061.92518688 502.40000812 1061.92518688 608.00000813 1060.32022625 735.99999187 1087.64571594 735.99999187 869.02121563 735.99999187L869.02121563 735.99999187Z"  horiz-adv-x="1100" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="saomiaoerweima1" unicode="&#59263;" d="M237.01054151 434.01598916L62.01888506 434.01598916l0-99.99600293 174.99165556 0L237.01054151 434.01598916zM62.01888506-65.96312461000002l349.98600937 0L412.00489531 284.02288477 62.01888506 284.02288477 62.01888506-65.96312461000002zM162.01488799 184.02688184l149.9940044-1e-8-1e-8-149.99310439L162.01488799 34.033777439999994 162.01488799 184.02688184zM412.00489531 834L62.01888506 834l0-349.98511026 349.98600937 0L412.00489531 834zM312.00889239 584.00909356L162.01488799 584.00909356 162.01488799 734.00399707l149.9940044 0L312.00889239 584.00909356zM711.9911041 184.02688184L811.98710703 184.02688184 811.98710703 284.02288477 611.99510117 284.02288477l0-199.99200586 99.99600293 0L711.9911041 184.02688184zM786.98945498 334.01998623l174.99165557 0L961.98111143 434.01598916 786.98945498 434.01598916 786.98945498 334.01998623zM861.98510849 34.03287743999999L611.99510117 34.03287743999999l0-99.99600293 349.98600938 0L961.98111143 284.02288477 861.98510849 284.02288477 861.98510849 34.03287743999999zM611.99510117 834l0-349.98511026 349.98600938 0L961.98111143 834 611.99510117 834zM861.98510849 584.00909356L711.9911041 584.00909356 711.9911041 734.00399707l149.99400439 0L861.98510849 584.00909356zM462.00109766 434.01598916L337.00654355 434.01598916l1e-8-99.99600293 124.9936541 0 0-149.99310439 99.99600292 0L561.99620059 584.00909356 462.00109766 584.00909356 462.00109766 434.01598916zM462.00109766 684.00509648l99.99600292 0L561.99710059 834 462.00109766 834 462.00109766 684.00509648zM462.00109766-65.96312461000002l99.99600292 0L561.99710059 84.03087890999996 462.00109766 84.03087890999996 462.00109766-65.96312461000002z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="youjian1" unicode="&#59264;" d="M928.18286135 731.61428833H93.90856935A69.71771177 69.71771177 0 0 1 24.38571169 662.09143067v-556.18286133C24.38571169 67.67099761999998 55.67099764 36.38571166999998 93.90856935 36.38571166999998h834.274292c38.23757172 0 69.52285766 31.28528595 69.52285766 69.52285766V662.09143067c0 38.23757172-31.28528595 69.52285766-69.52285766 69.52285766zM76.52785494 123.28928374999998V618.29203034L354.28525001 423.98922185 76.66703644 121.12008911999999c-0.1113452 0.75090117-0.1113452 1.39045716-0.1113452 2.16919463z m320.77873684 270.58241889l99.38917124-69.60568763c0.2226904-0.1113452 0.44538081-0.33403561 0.66807121-0.44470187a25.50076693 25.50076693 0 0 1 13.34784552-4.22704407h1.75232905a24.91688356 24.91688356 0 0 1 13.34784553 4.22704407c0.2226904 0.11066627 0.44538081 0.22201147 0.66807121 0.44470187l98.63894899 68.96613166 279.28703371-304.78712172H117.49066836L397.30659178 393.84454528z m271.1391449 29.56147213l277.11783909 193.80175508V123.28928374999998c0-0.63955598 0-1.39045716-0.1113452-2.05784942L668.47357299 423.43317477zM111.28928377 679.47214508h799.51286315c8.25923401 0 15.73973056-2.91941688 21.7191037-7.70318695L511.79661653 377.49241611 90.32108128 672.38067782C96.18978812 676.8310912100001 103.47475162 679.44498772 111.28928377 679.44498772z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="changyonglogo28" unicode="&#59265;" d="M463.71104407 447.26015511c68.0118873 71.40049268 154.21202825 96.38317965 255.62777849 90.86311701-2.26260306 10.36849813-2.34870926 18.41080678-5.68300229 24.74953933-16.4568605 31.28962693-29.38469575 65.74928423-51.50601169 92.52695207-132.3569794 160.21825862-398.79173297 179.24373031-553.36805724 40.37580724-79.86140842-71.74756615-113.12220418-161.41579585-90.28024596-267.72237124 14.62611282-68.0609011 56.42730638-120.02393788 110.82515864-161.23696057 17.73255547-13.44049829 20.60452487-25.4582589 12.98479752-44.80166011-9.45577357-23.99445457-16.58270773-48.90958218-24.71377124-73.4272969 22.77969611 5.01534807 41.18785298 12.63639973 58.14015529 22.70948682 39.75186827 23.61956276 79.21230102 36.46924027 127.10583247 21.87889425 28.91707357-8.80401628 61.57512585-5.33857745 96.78324245-7.66476692C374.10242527 288.86866993 394.94009908 375.05556516 463.71104407 447.26015511zM493.79783524 633.56061031c25.67683521 0.36826896 41.16400886-14.1399438 41.71906157-39.06699409 0.57227395-25.70332924-13.88560069-41.42232751-38.63116448-42.00254993-28.44150293-0.66897854-49.9256342 16.49395161-50.12963919 40.04065516C446.56003533 615.1908701699999 467.18840559 633.1843928999999 493.79783524 633.56061031zM249.9785138 552.50034036c-28.08250675-0.09537899-48.91885495 17.57094013-48.59827549 41.20374991 0.30203391 22.46441648 20.89861031 39.64986642 47.7650343 39.86314419 25.34300875 0.19473221 42.92322166-16.90858575 42.54832983-41.40378066C291.32930643 568.35313306 274.73997454 552.5771738000001 249.9785138 552.50034036zM930.6060691 436.42933465c-105.88929263 101.97477718-278.4551641 118.37864964-404.17137706 38.40861394-162.43184787-103.32200575-161.03030565-315.56821319 3.58731183-415.20487821 79.07188246-47.86041327 164.59509771-61.25984494 254.481905-37.01369459 18.61216187 5.02197221 33.66085729 3.5714162 50.0090905-6.55995877 22.23259187-13.78094762 45.91044123-25.23703138 68.97097574-37.69062159 1.64926246 1.2306541 3.29852495 2.46130949 4.9477887 3.69328921-6.32018699 22.03256111-13.97700544 43.8107778-18.27568546 66.23545198-1.61746991 8.42382462 1.98176462 20.57802956 7.67933824 27.14461247 14.66320394 16.87944309 33.16011694 30.44181312 47.78755408 47.3556987C1031.99664964 222.68355738000002 1025.85794786 344.68925988 930.6060691 436.42933465zM612.56329938 315.41716307c-19.24272368-0.29540974-34.81202932 14.58239756-34.20796151 32.6845463 0.5908208 17.74447818 14.65790539 30.33053849 33.84896534 30.27887476 21.11718662-0.05431365 38.4271595-14.82614358 37.80719606-32.26196369C649.43127686 329.87636331 632.16236933 315.71787266 612.56329938 315.41716307zM804.38381724 315.37742204000006c-17.45701559 0.26361718-34.06886726 15.20765954-34.47820156 31.01541267-0.44112815 16.92050844 16.43036649 32.16526039 35.43729132 32.02086629 21.7053575-0.1682382 37.40845886-14.34924863 36.5593194-33.0104243C841.14316871 328.74506113999996 824.06369486 315.07671374999995 804.38381724 315.37742204000006z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shangchuan" unicode="&#59266;" d="M151.69462908 803.60299291l731.45786814 0c18.07854251 0 32.90294848 16.27068846 32.90294849 36.15708697 0 19.8863985-14.64362017 36.15708694-32.90294849 36.15708695L151.69462908 875.91716683c-18.07854251 0-32.90294848-16.27068846-32.90294849-36.15708695C118.79168059 819.69289749 133.43530076 803.60299291 151.69462908 803.60299291zM531.16325535 733.63903043c-2.35021143 2.35021143-5.42356217 3.61570812-9.03927221 3.79649393-3.25413846 0.18078578-6.32749113 0.18078578-9.58162771 0-3.61570812-0.18078578-6.68906076-1.44628438-9.0392722-3.79649393L201.2298376 431.18499903c-7.41220203-7.41220203-3.61570812-23.50210659 8.49691484-35.79551538 12.29340875-12.29340875 28.20252756-16.08990458 35.79551539-8.49691487l238.45598851 238.45598849 0-700.00120213c0-18.44011408 15.00519175-33.44530586 33.44530583-33.44530584l0 0c18.44011408 0 33.44530586 15.00519175 33.44530587 33.44530584L550.86886804 625.5293411499999l238.45598847-238.45598846c7.41220203-7.41220203 23.50210659-3.61570812 35.79551539 8.49691482 12.29340875 12.29340875 16.08990458 28.20252756 8.49691487 35.79551538L531.16325535 733.63903043z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zanting" unicode="&#59267;" d="M512 863.58404693c-264.8665728 0-479.58404693-214.71747413-479.58404693-479.58404693s214.71747413-479.58404693 479.58404693-479.58404693 479.58404693 214.71747413 479.58404693 479.58404693S776.8665728 863.58404693 512 863.58404693zM804.80747093 91.19252906999998c-38.0506176-38.0506176-82.34258453-67.91696853-131.64465813-88.77058454-51.00922133-21.57511467-105.2329888-32.51439467-161.163904-32.51439466-55.9309152 0-110.15468267 10.93928-161.163904 32.51439466-49.3020736 20.8525248-93.59404053 50.71996693-131.64465813 88.77058454-38.0506176 38.0506176-67.91696853 82.34258453-88.77058454 131.64465813-21.57511467 51.00922133-32.51439467 105.2329888-32.51439466 161.1628128 0 55.9309152 10.93928 110.15468267 32.51439466 161.163904 20.8525248 49.3020736 50.71996693 93.59404053 88.77058454 131.64465813 38.0506176 38.0506176 82.34258453 67.91696853 131.64465813 88.77058454 51.00922133 21.57511467 105.2318976 32.51439467 161.163904 32.51439466 55.9309152 0 110.15359147-10.93928 161.163904-32.51439466 49.3020736-20.8525248 93.59404053-50.71996693 131.64465813-88.77058454 38.0506176-38.0506176 67.91696853-82.34258453 88.77058454-131.64465813 21.57511467-51.00922133 32.51439467-105.2329888 32.51439466-161.163904 0-55.9309152-10.93928-110.15359147-32.51439466-161.1628128C872.72444053 173.53511360000005 842.85808853 129.24314667 804.80747093 91.19252906999998zM711.64676693 625.2273813300001L588.67428693 625.2273813300001c-3.41757013 0-6.18786453-2.7702944-6.18786453-6.18786453l0-470.0779424c0-3.41757013 2.7702944-6.18786453 6.18786453-6.18786453l122.97248 0c3.41757013 0 6.18786453 2.7702944 6.18786454 6.18786453L717.8346304 619.0395168C717.83572267 622.4570869300001 715.06542827 625.2273813300001 711.64676693 625.2273813300001zM435.32571307 625.2273813300001L312.35214187 625.2273813300001c-3.41757013 0-6.18786453-2.7702944-6.18786454-6.18786453l0-470.0779424c0-3.41757013 2.7702944-6.18786453 6.18786454-6.18786453L435.32571307 142.77370986999995c3.41757013 0 6.18786453 2.7702944 6.18786453 6.18786453L441.5135776 619.0395168C441.5135776 622.4570869300001 438.7432832 625.2273813300001 435.32571307 625.2273813300001z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daoru2" unicode="&#59268;" d="M32-96V120h105v-72h744v72h105V-96H32z m105 639l249-3V864h249v-318h249l-369-390L137 543z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tuozhuai" unicode="&#59269;" d="M634.311111 896c-34.133333 0-59.733333-25.6-59.733333-59.733333s28.444444-59.733333 59.733333-59.733334c34.133333 0 59.733333 25.6 59.733333 59.733334 2.844444 34.133333-25.6 59.733333-59.733333 59.733333z m0-301.511111c-34.133333 0-59.733333-25.6-59.733333-59.733333s28.444444-59.733333 59.733333-59.733334c34.133333 0 59.733333 25.6 59.733333 59.733334 2.844444 34.133333-25.6 59.733333-59.733333 59.733333z m0-301.511111c-34.133333 0-59.733333-25.6-59.733333-59.733334s28.444444-59.733333 59.733333-59.733333c34.133333 0 59.733333 25.6 59.733333 59.733333 2.844444 34.133333-25.6 59.733333-59.733333 59.733334-31.288889 0 0 0 0 0z m0-301.511111c-34.133333 0-59.733333-25.6-59.733333-59.733334 0-34.133333 28.444444-59.733333 59.733333-59.733333 34.133333 0 59.733333 25.6 59.733333 59.733333 2.844444 34.133333-25.6 59.733333-59.733333 59.733334-31.288889 0 0 0 0 0zM372.622222 896C341.333333 896 312.888889 870.4 312.888889 836.266667s28.444444-59.733333 59.733333-59.733334c34.133333 0 59.733333 25.6 59.733334 59.733334 2.844444 34.133333-25.6 59.733333-59.733334 59.733333z m0-301.511111c-34.133333 0-59.733333-25.6-59.733333-59.733333s28.444444-59.733333 59.733333-59.733334c34.133333 0 59.733333 25.6 59.733334 59.733334 2.844444 34.133333-25.6 59.733333-59.733334 59.733333z m0-301.511111c-34.133333 0-59.733333-25.6-59.733333-59.733334s28.444444-59.733333 59.733333-59.733333c34.133333 0 59.733333 25.6 59.733334 59.733333 2.844444 34.133333-25.6 59.733333-59.733334 59.733334z m0-301.511111c-34.133333 0-59.733333-25.6-59.733333-59.733334 0-34.133333 28.444444-59.733333 59.733333-59.733333 34.133333 0 59.733333 25.6 59.733334 59.733333 2.844444 34.133333-25.6 59.733333-59.733334 59.733334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xinjian" unicode="&#59277;" d="M512 834c-248.4 0-450-201.6-450-450s201.6-450 450-450 450 201.6 450 450-201.6 450-450 450zM725.282 351.267h-172.602v-172.611c0-20.753-17.487-38.232-38.242-38.232-20.753 0-38.232 17.478-38.232 38.232v172.611h-172.62c-20.745 0-38.232 17.478-38.232 38.232 0 20.764 17.487 38.242 38.242 38.242h172.611v172.611c0 20.753 17.478 38.232 38.232 38.232s38.242-17.478 38.242-38.232v-172.62h172.602c20.764 0 38.242-17.469 38.242-38.232 0-21.843-17.478-38.232-38.242-38.232z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tuodong" unicode="&#59278;" d="M982.619375 406.4934375L843.846875 545.2537500000001a31.875 31.875 0 0 1-45.105 0v-110.810625H562.36625V670.771875H673.353125a31.8515625 31.8515625 0 0 1 0 45.105L534.5815625 854.625a31.839375 31.839375 0 0 1-45.105 0L350.7753125 715.888125a31.8515625 31.8515625 0 0 1 0-45.11625h110.74125v-236.30625H225.269375V545.2546875h-0.0590625a31.8628125 31.8628125 0 0 1-45.11625 0L41.403125 406.56375a31.8628125 31.8628125 0 0 1 0-45.11625l138.748125-138.759375a31.8515625 31.8515625 0 0 1 45.1171875 0V333.615H461.515625v-236.3765625H350.7753125a31.839375 31.839375 0 0 1 0-45.1040625l138.70125-138.7725a31.8515625 31.8515625 0 0 1 45.105 0L673.353125 52.135312500000055a31.8515625 31.8515625 0 0 1 0 45.1040625H562.36625V333.6159375h236.364375v-110.9990625a31.88625 31.88625 0 0 1 45.1171875 0l138.759375 138.7725a31.8628125 31.8628125 0 0 1 0 45.1040625z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="hanshu" unicode="&#59279;" d="M131.686 483.533v-543.13h104.448v543.13h122.88v92.16h-122.88v88.473c0 27.853 6.964 46.695 20.89 56.525 13.926 9.83 33.587 14.746 58.982 14.746 9.012 0 18.842-0.615 29.492-1.843 10.65-1.23 20.48-3.482 29.49-6.759V817.766a180.224 180.224 0 0 1-33.791 7.373 267.366 267.366 0 0 1-33.792 2.458c-57.344 0-100.967-13.312-130.867-39.936-29.901-26.624-44.852-65.741-44.852-117.35v-94.618H24.781v-92.16h106.905z m491.52-208.896L384.82-59.59699999999998h126.567l176.947 262.963L865.28-59.59699999999998h133.94L753.46 283.23800000000006l218.726 292.455H846.848L688.333 353.28 535.962 575.693h-133.94l221.184-301.056z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhinengyuyinjiaohu" unicode="&#59281;" d="M480.711111 611.555556h56.888889v-455.111112h-56.888889zM366.933333 554.666667h56.888889v-341.333334h-56.888889zM594.488889 554.666667h56.888889v-341.333334h-56.888889zM253.155556 497.777778h56.888888v-227.555556h-56.888888zM708.266667 497.777778h56.888889v-227.555556h-56.888889zM1006.933333 384c0 267.377778-216.177778 483.555556-483.555555 483.555556v-56.888889c236.088889 0 426.666667-190.577778 426.666666-426.666667 0-193.422222-125.155556-358.4-310.044444-409.6l-5.688889 39.822222-110.933333-85.333333 130.844444-54.044445-5.688889 42.666667c210.488889 56.888889 358.4 244.622222 358.4 466.488889zM68.266667 384c0 193.422222 125.155556 358.4 310.044444 409.6l2.844445-39.822222 110.933333 85.333333L361.244444 893.155556l8.533334-42.666667C156.444444 793.6 11.377778 605.866667 11.377778 384c0-267.377778 216.177778-483.555556 483.555555-483.555556v56.888889c-236.088889 0-426.666667 190.577778-426.666666 426.666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="web__APIfangwen" unicode="&#59282;" d="M369.93766277 452.79281617l-90.6578064-222.89337159h45.3293152l19.7111206 50.37286377h97.42675781l19.42355347-50.37368775h45.32931518l-88.59375 222.89337159h-47.96850586z m-10.59136963-134.89288331l34.1265564 86.56512451h0.59326172l33.26467896-86.56512451h-67.98449708z m258.38525391 134.89288331H530.91428631v-222.89337159h42.9595642v79.02493286h43.85769654c63.56799316 0 87.12130737 31.27230835 87.12130737 72.38287354 0 39.65625-22.96087646 71.48556518-87.12130737 71.48556519z m-5.00976563-106.51025391h-38.84793091v68.88262939h39.44119263c32.38549805 0 48.27337646-11.86688232 48.27337647-33.85794067 0-22.58349609-15.60031128-34.73712158-48.86581421-35.02468872z m125.37844849 106.51025391v-222.89337159h43.26443482v222.89337159h-43.26443482zM905.62909954 439.97506714c3.64443969 16.71350097 5.69119263 34.01861573 5.69119263 51.80987549 0 133.85055542-108.50262451 242.35317993-242.33587646 242.35317993-101.33981323 0-188.03100586-62.25787354-224.22161866-150.54675293a180.79650879 180.79650879 0 0 1-98.89837646 29.36975097c-95.07513428 0-172.96875-73.02886963-180.93988037-166.02099609-81.34112549-18.07800293-142.18093872-90.53256226-142.18093872-177.31274414 0-100.37081909 81.37738037-181.74737549 181.76550292-181.74737549h605.84875489v0.50262452c101.21374511 5.27755737 181.74737549 88.77255249 181.74737549 191.35162353a191.62106323 191.62106323 0 0 1-86.47613526 160.24081421z m-105.37811279-311.72113037h-595.74188233A141.37261963 141.37261963 0 0 0 63.1364848 269.62738036999997a141.35531617 141.35531617 0 0 0 141.37261962 141.37261963c0.5388794 0 1.05880737-0.07168579 1.59768677-0.07168579a144.5861206 144.5861206 0 0 0-1.59768677 20.26812744 141.37261963 141.37261963 0 0 0 141.35531617 141.37261963 141.12213135 141.12213135 0 0 0 121.71505737-69.7263794C473.3613078 609.1922607500001 561.16404217 693.74606323 668.98441571 693.74606323c111.53649903 0 201.9611206-90.42462158 201.9611206-201.9611206a201.09924317 201.09924317 0 0 0-13.41018677-71.86294556 151.46218872 151.46218872 0 0 0-57.28518677-291.6680603z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="api" unicode="&#59360;" d="M639.17351357 11.965887260000045h148.31089631v-42.73364808h243.83316848V107.48815945000001h-243.83316848v-45.2473921h-125.68720024l-276.51184056 276.51184056h404.71278479v-45.24739209h243.8331685v138.25592029h-243.8331685v-42.7336481H216.86452075l319.24548862 319.24548862h251.37440051V660.51184055h243.83316848v138.25592027h-243.83316848v-42.73364808H513.48631332L143.9659446 389.02748801h-168.42084832v-50.2748801h334.32795264l329.30046465-326.78672065zM1006.1801383 82.35071939v-87.98104017h-193.55828837V82.35071939h193.55828837z m0 324.27297665v-87.98104017h-193.55828837v87.98104017h193.55828837z m0 367.00662474V685.64928061h-193.55828837v87.98104017h193.55828837z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tingzhi" unicode="&#59283;" d="M512-101.45185173000004c-266.9985184 0-485.45185173 218.45333333-485.45185173 485.45185173s218.45333333 485.45185173 485.45185173 485.45185173 485.45185173-218.45333333 485.45185173-485.45185173-218.45333333-485.45185173-485.45185173-485.45185173z m0 60.6814816c236.65777813 0 424.77037013 188.11259307 424.77037013 424.77037013s-188.11259307 424.77037013-424.77037013 424.77037013-424.77037013-188.11259307-424.77037013-424.77037013 188.11259307-424.77037013 424.77037013-424.77037013zM329.9555552 566.0444448000001h364.0888896v-364.0888896H329.9555552z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="guolv" unicode="&#59284;" d="M853.923 707.025a87.505 87.505 0 0 1 2.56 94.488c-17.687 30.022-49.85 47.942-86.295 47.942H145.455c-36.399 0-68.655-17.92-86.296-47.942a87.505 87.505 0 0 1 2.56-94.488 25.076 25.076 0 0 1 2.56-3.304L269.5 474.67c12.846-14.336 19.874-32.582 19.874-51.294v-311.482c0-15.872 13.638-28.718 30.44-28.718 16.804 0 30.442 12.846 30.442 28.718V423.377c0 32.303-12.149 63.675-34.258 88.344l-203.59 227.235a33.513 33.513 0 0 0 0 34.723 37.795 37.795 0 0 0 33.048 18.338h624.733c13.963 0 26.298-6.842 33.047-18.338a33.513 33.513 0 0 0 0-34.723L599.645 511.72a132.468 132.468 0 0 1-34.257-88.344v-476.16c0-15.825 13.637-28.672 30.44-28.672 16.757 0 30.441 12.847 30.441 28.719V423.377c0 18.758 7.028 36.958 19.875 51.294l205.219 229.003a28.858 28.858 0 0 1 2.56 3.398zM700.788 424.681c0-15.826 13.638-28.672 30.488-28.672h215.738c16.803 0 30.44 12.846 30.44 28.672 0 15.872-13.637 28.718-30.44 28.718H731.276c-16.85 0-30.441-12.846-30.441-28.718z m246.226-287.279H731.276c-16.85 0-30.441-12.846-30.441-28.718 0-15.826 13.591-28.719 30.44-28.719h215.739c16.803 0 30.44 12.847 30.44 28.719 0 15.825-13.637 28.718-30.44 28.718z m0 157.975H731.276c-16.85 0-30.441-12.846-30.441-28.672 0-15.872 13.591-28.718 30.44-28.718h215.739c16.803 0 30.44 12.846 30.44 28.718 0 15.826-13.637 28.672-30.44 28.672z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xinzenggongshi" unicode="&#59285;" d="M723.74365516 413.78197487c3.44657869 3.44657869 6.80478358 6.71640976 10.16298847 6.71640976h47.01486834c3.35820487 0 6.80478358 3.26983107 6.80478358 6.71640977v53.90802573c0 3.26983107-3.44657869 6.71640976-6.80478358 6.71640977h-53.7312781c-3.44657869 0-10.07461465-3.44657869-10.07461466-6.71640977l-57.17785679-60.6244355c-3.44657869-3.26983107-6.71640976-3.26983107-6.71640977 0l-30.40059156 60.6244355c-3.26983107 3.26983107-6.62803595 6.71640976-9.98624082 6.71640977h-87.49007454c-3.35820487 0-6.71640976-3.44657869-6.71640978-6.71640977v-53.81965193a7.06990501 7.06990501 0 0 1 6.71640978-6.71640975h53.8196519c3.35820487 0 6.71640976-3.26983107 10.07461466-6.71640977l20.23760309-43.65666345v-10.16298847l-60.6244355-70.61067631c-3.35820487 0-6.71640976-3.44657869-10.07461463-3.4465787h-47.10324217c-3.35820487 0-6.71640976-3.44657869-6.71640976-6.71640977v-53.81965192c0-3.26983107 3.35820487-6.71640976 6.71640976-6.71640977h53.81965193c3.35820487 0 10.07461465 3.44657869 10.07461464 6.71640977l77.41545991 87.49007455c3.35820487 3.44657869 6.71640976 3.44657869 6.71640976 0l43.65666345-87.49007455c0-3.26983107 6.80478358-6.71640976 10.07461466-6.71640977h53.81965192c3.35820487 0 6.80478358 3.44657869 6.80478356 6.71640977v53.73127811c0 3.26983107-3.44657869 6.71640976-6.80478356 6.71640976h-20.14922931c-3.44657869 0-6.71640976 3.44657869-10.07461463 6.71640977l-33.75879645 67.34084525v10.16298846l40.4752062 43.65666346m-275.99141697 208.65057173a130.79324276 130.79324276 0 0 1-43.65666347-67.34084526l-16.79102442-67.34084527h-97.56468917c-3.35820487 0-6.71640976-3.44657869-6.71640977-6.71640976v-53.81965191a7.06990501 7.06990501 0 0 1 6.71640977-6.71640977h80.68529097l-50.37307322-201.93416196c-10.16298847-40.38683239-37.02862751-33.67042263-37.02862752-33.67042262h-33.75879645v-67.34084527h33.67042264c26.86563906 0 53.81965193 3.44657869 67.34084526 20.14922929 16.79102442 16.70265059 26.95401286 47.10324214 33.58204881 80.77366478l50.46144704 201.93416198h77.4154599c3.44657869 0 6.80478358 3.26983107 6.80478357 6.71640976v53.99639954c0 3.26983107-3.35820487 6.71640976-6.80478357 6.71640977h-60.6244355l16.79102442 63.89426656c3.35820487 10.16298847 20.2376031 26.95401286 30.31221775 33.67042261 37.02862751 26.95401286 87.49007455 10.16298847 121.16049717 3.44657871v57.08948299c-33.58204881 6.71640976-107.63930384 30.22384394-171.62194421-23.50743417m0 0M1015.552 383.87199999999996a502.656 502.656 0 0 1-503.68 503.68 502.208 502.208 0 0 1-356.096-147.264 502.016 502.016 0 0 1-147.328-356.416 500.288 500.288 0 0 1 146.816-356.736 499.584 499.584 0 0 1 356.544-146.688c277.312 2.816 503.744 226.24 503.744 503.424z m-947.968 0a444.288 444.288 0 0 0 444.288 444.544c246.976 0 447.296-200.128 447.296-444.544 0-244.032-200.32-444.416-447.296-444.416a442.304 442.304 0 0 0-444.288 444.416z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tubiao-hanshu" unicode="&#59286;" d="M64 768.288C64 803.488 92.8 832 127.712 832H896.32C931.488 832 960 803.2 960 768.288V-0.32000000000005c0-35.2-28.8-63.712-63.712-63.712H127.68C92.512-64 64-35.200000000000045 64-0.2880000000000109V768.3199999999999z m64-32.32v-703.936A32 32 0 0 1 160 0h704a32 32 0 0 1 32 32V736a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32z m226.88-640c-57.728 0-88.512 53.12-97.6 84.48A25.952 25.952 0 0 0 307.2 194.88c0.096-0.32 14.496-47.04 47.744-47.04 21.76 0 32.416 28.928 33.824 33.024 3.808 15.68 38.24 158.272 64.896 266.368h-77.984a25.952 25.952 0 1 0 0 51.904h90.816c8.544 34.208 15.104 59.744 17.6 68.032l2.08 7.072c12.256 41.92 37.792 129.12 105.824 129.12 60.096 0 80.576-59.84 83.008-91.456a25.952 25.952 0 0 0-51.776-4.096c-0.16 2.016-4.192 43.616-31.232 43.616-29.12 0-48-64.32-56-91.776l-2.208-7.36c-1.952-6.624-6.944-25.984-13.76-53.12h63.328a25.952 25.952 0 1 0 0-51.936h-76.224a60869.312 60869.312 0 0 1-68.48-280.768c-7.744-26.176-34.08-70.496-83.712-70.496z m384.96 66.912c-12.064 0-20.512 5.632-28.576 15.68l-43.456 57.152-43.424-57.12c-7.232-8.864-15.68-15.68-26.56-15.68-16.064 0-28.544 11.232-28.544 26.56 0 8.416 3.2 14.848 8.448 20.896l55.104 65.152-50.272 57.92c-6.848 8.064-10.048 15.296-10.048 23.36 0 17.28 12.864 28.16 28.16 28.16 12.064 0 20.48-5.664 28.544-15.68l39.808-53.12 40.64 53.088c7.264 8.864 15.68 15.68 26.56 15.68 16.096 0 28.544-11.232 28.544-26.56 0-8.416-3.616-14.88-8.416-20.896L704 276.352l53.888-61.984c6.848-8.032 10.08-15.296 10.08-23.328 0-17.28-12.864-28.16-28.16-28.16z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dingding" unicode="&#59287;" d="M508.48426667 860.1792c-264.86613333 0-479.584-214.7168-479.584-479.584s214.71786667-479.584 479.584-479.584 479.584 214.71786667 479.584 479.584-214.7168 479.584-479.584 479.584z m222.26133333-415.73333333c-0.99946667-4.2048-3.45706667-10.36586667-6.90666667-17.80586667h0.0768l-0.3968-0.68906667c-20.12586667-43.06346667-72.67626667-127.52-72.67626666-127.52s-0.07146667 0.19733333-0.27413334 0.52906667l-15.3568-26.7328h74.00746667l-141.34613333-187.95733333 32.08853333 127.86346666h-58.23573333l20.2336 84.5536c-16.37333333-3.94986667-35.71733333-9.376-58.63893334-16.7456 0 0-30.99946667-18.1568-89.3056 34.92693334 0 0-39.32053333 34.64-16.5216 43.2992 9.69706667 3.68106667 47.07306667 8.35413333 76.48426667 12.32853333 39.744 5.37386667 64.19413333 8.21866667 64.19413333 8.21866667s-122.5312-1.83466667-151.59893333 2.74133333c-29.072 4.5696-65.9488 53.07733333-73.80266667 95.71733333 0 0-12.14933333 23.4112 26.12266667 12.3296 38.27093333-11.08266667 196.7008-43.1392 196.7008-43.1392s-206.04053333 63.1552-219.74933333 78.5632c-13.712 15.40906667-40.352 84.12373333-36.8832 126.34453334 0 0 1.504 10.5248 12.2976 7.70666666 0 0 152.32213333-69.60426667 256.4768-107.70666666 104.15573333-38.10346667 194.70933333-57.488 183.01013333-106.82666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ico_home_obligation" unicode="&#59292;" d="M308.30533334 793.28c17.623-12.767 36.749-29.366 51.572-51.051 14.839-21.628 42.207-49.772 42.207-49.772h223.166s23.576 24.368 37.822 43.669c14.334 19.241 26.36 37.598 53.237 54.858 22.24 14.146 33.883 49.796 5.12 61.208-24.897 9.835-35.038-10.562-63.924-11.066-28.391-0.536-32.315 23.577-60.515 34.263-28.202 10.628-43.34 1.255-60.144-14.964-16.723-16.286-23.18-17.003-23.18-17.003s-19.836 11.726-30.795 24.105c-10.909 12.386-39.423 16.92-57.987 5.095-23.75-15.186-29.01-26.723-48.656-30.87-22.372-4.715-57.848 22.693-77.37 6.665-19.504-15.97-8.174-42.38 9.447-55.138z m455.96-296.919c-83.074 70.135-127.62 136.903-127.62 136.903h-243.24s-46.698-69.847-121.154-134.862c-85.479-74.752-154.797-194.56-128.751-337.878 23.122-127.703 143.757-272.434 372.446-272.434 221.39 0 351.223 119.898 376.062 266.206 30.225 178.69-57.028 282.302-127.742 342.065zM634.12033334 118.49000000000001c-14.088 0.123-88.56 0-88.56 0s0.248-20.275 0.315-30.935c0.034-12.891-12.106-27.318-29.208-27.004-17.095 0.314-29.91 8.366-31.1 28.044-0.553 8.77-0.398 29.895-0.398 29.895h-89.484c-14.476 0-24.551 16.508-24.048 28.705 0.52 12.196 11.257 25.145 24.048 25.145h89.69l0.191 61.746s-72.778-0.504-86.329-0.504c-13.56 0-23.263 9.488-23.668 21.629-0.412 12.164 10.893 35.08 23.684 35.08h86.595l0.123 22.13s-69.094 73.564-77.08 81.483c-8.019 7.985-17.97 26.22-5.17 40.811 12.272 13.99 35.048 3.899 45.783-6.482 11.949-11.57 67.163-68.971 67.163-68.971s64.321 60.142 77.683 71.3c13.188 11 31.182 11.76 41.39-0.628 10.058-12.138 5.937-23.834-10.348-38.854-16.343-14.904-79.328-79.665-79.328-79.665v-20.183h82.978c18.753-0.504 29.39-21.876 29.076-33.198-0.371-13.138-7.795-23.947-28.573-23.767l-82.994-0.181-0.488-61.242h81.45c21.364 0 30.1-11.133 30.604-25.65 0.57-14.468-9.95-28.829-23.997-28.704z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiangli-" unicode="&#59293;" d="M886.79552948 673.7261605900001h-32.56168296c16.51143111 27.99843555 23.7568 54.70435555 21.44483556 79.4745363-1.92967111 20.73122133-11.74793482 50.38383408-47.75632593 74.01684386-29.85528889 19.63652741-68.24239408 24.45463703-110.82865778 13.81474607-69.06766222-17.34276741-150.80683141-76.95625482-204.55484682-149.00337779-53.78199703 72.0446957-135.45684385 131.66061037-204.52086518 149.00337779-42.62267259 10.70664059-81.04618667 5.85819022-110.8954074-13.81474607-35.97562311-23.63179615-45.80238222-53.28440889-47.71991705-74.01684386-2.31803259-24.77018075 4.86301392-51.47974163 21.4424083-79.4745363h-32.56411022c-49.30734459 0-89.43236741-40.15900445-89.43236741-89.50275792v-115.28389215c0-39.03032889 25.7435117-73.531392 62.99344593-85.11427319-3.54379852-9.797632-5.3945837-19.92537125-5.3945837-30.18054163v-345.86017185c0-49.30977185 40.173568-89.48698075 89.48455348-89.48698074h633.3156314c49.30977185 0 89.42023111 40.17720889 89.42023112 89.48698074v345.86017185c0 10.32798815-1.78403555 20.48606815-5.32783407 30.21330963 37.19168 11.65084445 62.87815111 46.14826667 62.8781511 85.08514608v115.25233777c-0.00242725 49.33768533-40.11288652 89.53067141-89.42265837 89.53067141m-57.55031703-691.69607111H544.37599763V379.42340267h284.86921482c14.19946667 0 25.71681185-11.57802667 25.71681185-25.77749334v-345.86017185c-0.00606815-14.2006803-11.51734518-25.755648-25.71681185-25.755648m-249.78925037 691.69607111c45.30479408 52.25525097 104.77264592 93.32447763 153.05690074 105.43650133 25.0796563 6.28660148 45.60213333 4.56324741 60.45696-5.2307437 15.78932148-10.37289245 18.60494222-19.62439111 19.23602963-26.60882963 2.51221333-25.61122608-24.95829333-60.14505718-37.92592593-73.60056889l-194.82396444 0.00364089z m333.01997037-89.53309867v-115.25233777c0-14.19582578-11.4809363-25.7435117-25.68040297-25.7435117H544.37599763V609.95235082h342.42074548c14.19825303 0 25.67918933-11.56589037 25.67918934-25.7592889M480.66893748 379.42340267v-397.39209956H195.92958103c-14.23223467 0-25.74715259 11.55375408-25.74715258 25.75322074v345.86017185c0 14.19946667 11.51734518 25.77749333 25.74715258 25.77749333h284.73935645z m-267.79465956 367.89968592c0.62866015 6.98686578 3.47462163 16.23836445 19.1935526 26.60882963 14.7577363 9.79399111 35.27778608 11.60229925 60.49579615 5.2307437 48.0172563-12.04527408 107.42199941-53.11450075 152.82388385-105.43650133h-194.6540563c-11.61443555 11.76249837-40.40779852 47.3703917-37.8591763 73.596928m-100.33925689-163.13002667c0 14.19339852 11.51734518 25.76292978 25.74472534 25.76292978h342.38919111v-166.75877925h-342.38919111c-14.22980741 0-25.74472533 11.54768592-25.74472534 25.7435117v115.25233777z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cuiban" unicode="&#59294;" d="M366.36444445 709.42264889V748.08888889a36.40888889 36.40888889 0 0 0 72.81777777 0v-38.66624c143.66947555-17.91317333 254.86222222-140.46549333 254.86222223-289.01376v-400.49777778h72.81777777a36.40888889 36.40888889 0 0 0 0-72.81777778h-291.27111111a72.81777778 72.81777778 0 1 0-145.63555556 0H38.68444445a36.40888889 36.40888889 0 0 0 0 72.81777778h72.81777777V420.40888889a291.30752 291.30752 0 0 0 254.86222223 289.01376zM184.32 19.91111110999998h436.90666667V420.40888889a218.45333333 218.45333333 0 1 1-436.90666667 0v-400.49777778z m837.40444445 582.54222222a36.40888889 36.40888889 0 0 0-72.81777778 0 218.45333333 218.45333333 0 0 1-218.45333334 218.45333334 36.40888889 36.40888889 0 0 0 0 72.81777778 291.27111111 291.27111111 0 0 0 291.27111112-291.27111112z m-145.63555556-36.40888888a36.40888889 36.40888889 0 0 0-72.81777778 0 109.22666667 109.22666667 0 0 1-109.22666666 109.22666666 36.40888889 36.40888889 0 0 0 0 72.81777778 182.04444445 182.04444445 0 0 0 182.04444444-182.04444444z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xiaochengxu" unicode="&#59295;" d="M974.51425185 579.3943703699999c-25.2434963 59.71057778-61.53102222 113.47437037-107.52758518 159.5922963-46.11792592 46.11792592-99.76035555 82.28408889-159.5922963 107.52758518-61.89511111 26.2144-127.67383703 39.44296297-195.39437037 39.44296297s-133.49925925-13.22856297-195.39437037-39.44296297c-59.71057778-25.2434963-113.47437037-61.53102222-159.5922963-107.52758518-46.11792592-46.11792592-82.28408889-99.76035555-107.52758518-159.5922963-26.2144-61.89511111-39.44296297-127.67383703-39.44296297-195.39437037s13.22856297-133.49925925 39.44296297-195.39437037c25.2434963-59.71057778 61.53102222-113.47437037 107.52758518-159.5922963 46.11792592-46.11792592 99.76035555-82.28408889 159.5922963-107.52758518 61.89511111-26.2144 127.67383703-39.44296297 195.39437037-39.44296297s133.49925925 13.22856297 195.39437037 39.44296297c59.71057778 25.2434963 113.47437037 61.53102222 159.5922963 107.52758518s82.28408889 99.76035555 107.52758518 159.5922963c26.2144 61.89511111 39.44296297 127.67383703 39.44296297 195.39437037s-13.34992592 133.49925925-39.44296297 195.39437037zM512-46.11034074999998c-237.14322963 0-430.11034075 192.96711111-430.11034075 430.11034075 0 237.14322963 192.96711111 430.11034075 430.11034075 430.11034075 237.14322963 0 430.11034075-192.96711111 430.11034075-430.11034075 0-237.14322963-192.96711111-430.11034075-430.11034075-430.11034075zM630.9357037 639.22631111c-28.5202963 0-55.82696297-7.40314075-78.88592592-21.48124444-45.51111111-25.72894815-72.69641482-70.87597037-72.69641481-120.87751112v-229.13327407c0-23.66577778-13.83537778-45.75383703-36.77297779-58.86103703-13.83537778-7.64586667-28.64165925-11.52948148-44.17611851-11.52948148-44.54020741 0-80.82773333 31.55437037-80.82773334 70.39051851 0 12.01493333 3.03407408 23.05896297 9.10222222 32.768l0.12136297 0.12136297c9.34494815 15.77718518 26.33576297 28.15620741 47.8170074 34.58844444l0.72817778 0.24272593c1.21362963 0.48545185 2.18453333 0.48545185 2.91271112 0.48545185 20.14625185 0 35.92343703 15.77718518 35.92343703 35.92343703s-15.77718518 35.92343703-35.92343703 35.92343705c-7.40314075 0-14.68491852-1.21362963-25.2434963-4.12634075h-0.12136297c-37.0157037-10.92266667-67.96325925-34.34571852-87.1386074-65.77872592-12.98583703-21.84533333-19.78216297-46.11792592-19.78216297-70.1477926 0-78.40047408 68.44871111-142.23739259 152.67460741-142.23739259 28.03484445 0 55.46287408 7.16041482 79.25001482 20.87442963 45.63247408 25.72894815 72.81777778 70.87597037 72.81777777 120.87751111V496.98891852c0 23.66577778 13.71401482 45.63247408 36.77297779 58.9824 13.71401482 7.64586667 28.64165925 11.52948148 44.05475555 11.52948148 44.29748148 0 80.34228148-31.55437037 80.34228148-70.39051852 0-12.01493333-3.03407408-23.05896297-9.10222222-32.768l-0.12136296-0.24272593c-9.34494815-16.26263703-26.2144-28.5202963-47.57428149-34.46708147l-0.84954074-0.24272593c-1.21362963-0.48545185-2.18453333-0.48545185-2.91271111-0.48545185-20.14625185 0-35.92343703-15.77718518-35.92343703-35.92343705s15.77718518-35.92343703 35.92343703-35.92343703c7.64586667 0 15.65582222 1.33499259 25.48622222 4.2477037 37.0157037 10.92266667 67.8418963 34.34571852 87.13860741 65.77872593 12.98583703 21.84533333 19.78216297 46.11792592 19.78216297 70.1477926-0.12136297 78.15774815-68.57007408 141.99466667-152.79597038 141.99466666z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jinqian" unicode="&#59296;" d="M516.2878125 863.04c-264.1921875 0-479.184375-214.944375-479.184375-479.135625 0-264.24 214.9921875-479.184375 479.184375-479.184375s479.1365625 214.944375 479.1365625 479.184375c0 264.19125-214.944375 479.135625-479.1365625 479.135625z m0-906.9121875c-235.8721875 0-427.68 191.904375-427.68 427.7765625 0 235.8234375 191.8078125 427.68 427.68 427.68S943.96875 619.7278125 943.96875 383.90437499999996c0-235.8721875-191.8078125-427.7765625-427.68-427.7765625z m115.8721875 678.4321875l-76.08-140.2078125c-20.3521875-37.96875-32.6878125-63.264375-37.2478125-75.7921875h-1.344375c-13.3434375 30.48-51.12 102.43125-113.28 216h-71.5678125l133.055625-228.624375H356.64v-50.495625h127.92v-69.6H356.64v-51.16875h127.92v-101.375625h63.455625V234.67218749999995h123.36v51.12H548.015625v69.6h123.36v50.5434375H565.535625l134.4 228.624375h-67.775625z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daochu2" unicode="&#59297;" d="M976.3346963 380.69665184999997c-21.23851852 0-38.47205925-17.23354075-38.47205927-38.47205927v-304.62103703c0-28.27757037-23.05896297-51.33653333-51.33653333-51.33653333H137.83798518c-28.27757037 0-51.33653333 23.05896297-51.33653333 51.33653333V743.08645925c0 28.27757037 23.05896297 51.33653333 51.33653333 51.33653333h328.52954074c21.23851852 0 38.47205925 17.23354075 38.47205926 38.47205927S487.72740741 871.36711111 466.36752592 871.36711111H137.83798518C67.08337778 871.36711111 9.55733333 813.84106666 9.55733333 743.08645925V37.60355555000001c0-70.75460741 57.52604445-128.28065185 128.28065185-128.28065185h748.68811852c70.75460741 0 128.28065185 57.52604445 128.28065185 128.28065185V342.22459258000004c0 21.23851852-17.23354075 38.47205925-38.47205925 38.47205927zM197.79128889 190.64225184999998c119.54251852 113.11028148 240.1773037 287.99431111 453.53339259 276.70755556 15.04900741-0.84954075 26.82121482-12.62174815 26.82121482-27.79211853v-74.0314074c-0.12136297-23.30168889 26.94257778-36.28752592 45.02565925-21.6026074l276.5861926 223.67194073c13.71401482 11.04402963 13.71401482 32.03982222-0.12136297 43.08385185L724.38518518 858.25991111c-18.08308148 14.56355555-46.23928889 1.69908148-46.36065185-21.48124445v-75.00231111c0-14.0781037-9.58767408-24.27259259-23.42305185-27.42802963-367.12296297-83.74044445-459.96562963-514.09351111-456.81019259-543.70607407z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gongshi" unicode="&#59298;" d="M386.29587026 890.53715011H68.97931322c-37.73781527 0-68.03437084-30.29655555-68.03437083-68.03437084V504.65470425c0-37.73781527 30.29655555-68.03437084 68.03437083-68.03437084h317.31655704c37.73781527 0 68.03437084 30.29655555 68.03437083 68.03437084V822.50277927c0 37.20629599-30.29655555 68.03437084-68.03437083 68.03437084z m-17.0085927-255.12888933H256.07383301v-113.21344583H199.20135046V635.40826078H85.98790593V691.74922275h113.21344453V805.49418656H256.07383301v-113.21344452h113.21344455v-56.87248126z m584.13885394 255.12888933h-317.31655705c-37.73781527 0-68.03437084-30.29655555-68.03437083-68.03437084V504.65470425c0-37.73781527 30.29655555-68.03437084 68.03437083-68.03437084h317.31655705c37.73781527 0 68.03437084 30.29655555 68.03437084 68.03437084V822.50277927c0 37.20629599-30.29655555 68.03437084-68.03437084 68.03437084z m-17.00859272-255.12888933h-283.29937161V691.74922275H936.41753878v-56.34096197zM386.29587026 323.40688889H68.97931322c-37.73781527 0-68.03437084-30.29655555-68.03437083-68.03437084v-317.31655704c0-37.73781527 30.29655555-68.03437084 68.03437083-68.03437084h317.31655704c37.73781527 0 68.03437084 30.29655555 68.03437083 68.03437084v317.31655704c0 37.73781527-30.29655555 68.03437084-68.03437083 68.03437084z m-38.26933327-307.21770476l-39.86388984-39.86388986-80.25929641 80.25929771-80.2592964-80.25929771-39.86388856 39.86388986 80.25929641 80.2592964L107.2486465 176.70777693000002l39.86388855 39.86388855 80.25929769-80.25929639 80.2592964 80.25929639 39.86388856-39.86388855-80.25929641-80.2592964 80.7908157-80.2592964z m605.39959451 307.21770476h-317.31655705c-37.73781527 0-68.03437084-30.29655555-68.03437083-68.03437084v-317.31655704c0-37.73781527 30.29655555-68.03437084 68.03437083-68.03437084h317.31655705c37.73781527 0 68.03437084 30.29655555 68.03437084 68.03437084v317.31655704c0 37.73781527-30.29655555 68.03437084-68.03437084 68.03437084z m-45.17907499-312.00137191H681.28864815v56.87248126h226.95840836v-56.87248126z m0 113.74496382H681.28864815v56.87248127h226.95840836v-56.87248127z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="lajitong_" unicode="&#59299;" d="M866.46183926 812.75107555l-87.13105591-846.31734044c-3.45210207-33.96868425-31.89742302-59.51423947-65.86610726-59.51423946H310.53532391c-34.10676833 0-62.41400519 25.54555523-65.86610726 59.51423946l-87.13105591 846.31734044h708.92367852m18.36518296 16.57008988H139.17297778l89.06423308-864.5444393c4.28060655-42.25372918 39.90629979-74.42732035 82.43619714-74.42732037h402.79126809c42.52989734 0 78.01750651 32.17359118 82.43619713 74.42732037L884.82702222 829.32116543zM893.11206717 863.84218602c9.11354943 0 16.57008987-7.45654045 16.57008986-16.57008988s-7.45654045-16.57008987-16.57008986-16.57008989H130.88793283c-9.11354943 0-16.57008987 7.45654045-16.57008986 16.57008989s7.45654045 16.57008987 16.57008986 16.57008988h762.22413434m0 16.57008986H130.88793283c-18.36518295 0-33.14017975-14.7749968-33.14017974-33.14017974s14.7749968-33.14017975 33.14017974-33.14017976h762.22413434c18.36518295 0 33.14017975 14.7749968 33.14017974 33.14017976s-14.7749968 33.14017975-33.14017974 33.14017974zM781.12587642-15.753418269999997l-1.79509307-17.81284662c-3.45210207-33.96868425-31.89742302-59.51423947-65.86610726-59.51423946H310.53532391c-34.10676833 0-62.41400519 25.54555523-65.86610726 59.51423946l-1.79509307 17.81284662h538.25175284m18.36518294 16.57008988z m0 0H224.50894064l3.72827022-36.03994548c4.28060655-42.25372918 39.90629979-74.42732035 82.43619714-74.42732037h402.79126809c42.52989734 0 78.01750651 32.17359118 82.43619713 74.42732037l3.59018614 36.03994548zM796.86746179-25.695472190000032l-1.10467265-9.52780168 1.10467265 9.52780168zM858.59104658 824.48822255h-23.47429399l-40.5967202-40.59672018-40.4586361 40.59672018h-23.47429401l52.19578312-52.19578312-55.23363293-55.23363291-55.64788516 55.64788518 51.78153086 51.78153085h-23.47429399l-40.18246795-40.18246795-39.90629978 40.18246795h-23.474294l51.78153087-51.78153085-55.23363293-55.23363294-55.50980108 55.50980109L589.32708608 824.48822255h-23.47429398l-39.9062998-39.90629979-39.7682157 39.90629979h-23.47429399l51.50536271-51.5053627-55.50980109-55.50980109-55.23363292 55.23363294L455.38552625 824.48822255h-23.47429398l-40.18246797-40.18246795-40.04438385 40.18246795h-23.474294l51.78153087-51.78153085-55.64788517-55.64788518-55.23363292 55.23363291L321.44396642 824.48822255h-23.47429399l-40.5967202-40.59672018-40.45863611 40.59672018h-23.47429399l52.19578311-52.19578312-55.92405334-55.92405333-43.49648593 43.49648593 2.62359757-26.09789156 28.99765728-28.99765727-23.61237807-23.61237808 2.20934531-21.26494867 33.14017976 33.14017974 55.23363293-55.23363293-55.78596926-55.78596923-27.47873238 27.47873237 2.62359757-26.09789155 13.11798782-13.11798783-10.63247435-10.63247433 2.20934532-21.26494868 20.16027602 20.16027602 55.23363293-55.23363292-56.20022151-56.20022149-11.04672658 11.04672657 4.28060655-41.14905652 6.76612003 6.76612003 55.50980109-55.50980109L191.64492905 316.33879966999996l3.72827021-35.62569324 47.77709249-47.77709247-38.80162712-38.80162713 2.2093453-21.26494868 48.32942882 48.32942882 55.92405334-55.92405334-55.37171701-55.371717-47.36284023 47.36284023 2.62359757-26.09789156 32.86401158-32.86401158-26.78831197-26.78831197 2.20934531-21.26494868 36.31611366 36.31611365 55.78596925-55.78596925-29.82616178-29.82616177h23.47429399l18.08901479 18.08901477 18.08901478-18.08901477h23.47429398l-29.82616177 29.82616177 55.37171701 55.371717 56.2002215-56.20022149-28.99765728-28.99765728h23.47429398L458.1472079 18.077181900000028l17.2605103-17.26051029h23.47429398l-28.99765728 28.99765728 56.20022149 56.20022149 56.20022151-56.20022149-28.9976573-28.99765728h23.474294l17.26051029 17.26051029 17.26051029-17.26051029h23.47429399l-28.99765729 28.99765728 56.20022151 56.20022149 55.37171699-55.37171699-29.96424585-29.82616178h23.47429399l18.08901478 18.08901477 18.08901479-18.08901477h23.47429399l-29.82616178 29.82616178 55.78596925 55.78596924 10.9086425-10.90864249 2.20934532 21.26494866-1.38084084 1.38084083 1.657009 1.65700898 2.62359756 26.09789156-16.01775354-16.01775354-55.37171702 55.371717 55.92405334 55.92405334 22.92195767-22.92195767 2.20934532 21.26494867-13.39415599 13.39415599 16.57008988 16.57008988 2.62359755 26.09789156-31.06891851-31.06891853-56.20022149 56.2002215L796.45320955 356.38318354l36.03994547-36.03994547 2.20934533 21.26494866-26.51214382 26.5121438 32.58784344 32.58784343L843.40179753 426.80606551l-46.94858798-46.94858798-56.2002215 56.20022149 55.50980109 55.5098011 49.29601738-49.29601739 2.20934532 21.26494868-39.7682157 39.63013161 48.88176513 48.88176514 3.45210205 32.86401159-52.74811944 52.74811945 55.23363292 55.23363292 7.73270862-7.73270862 4.41869063 43.35840184-12.28948331-12.28948331-55.92405334 55.92405333L858.59104658 824.48822255zM525.9464923 650.22611068L470.43669123 705.73591177l55.50980107 55.50980109 55.5098011-55.50980109-55.5098011-55.50980109z m134.63198027-0.27616816L604.9305874 705.73591177l55.2336329 55.23363292 55.64788518-55.64788516-55.23363291-55.37171701z m-269.26396051 0l-55.23363292 55.23363291 55.64788516 55.64788517 55.23363294-55.2336329-55.64788518-55.64788518z m403.89594074-0.69042042l-55.92405333 55.92405333 55.23363292 55.23363292 55.92405334-55.92405333-55.23363293-55.23363292z m-538.52792098 0l-55.23363292 55.23363292 55.92405333 55.92405333 55.23363292-55.23363292-55.92405333-55.92405333zM593.33152447 582.84107852l-55.64788516 55.64788518 55.50980108 55.50980107 55.64788518-55.64788516-55.5098011-55.50980109z m-134.77006432 0l-55.50980109 55.50980109 55.64788517 55.64788516 55.50980109-55.50980107-55.64788517-55.64788518z m269.67821274-0.55233632l-55.92405334 55.92405333 55.23363292 55.23363292 55.92405333-55.92405334-55.23363291-55.23363291z m-404.58636116 0l-55.23363291 55.23363291 55.92405333 55.92405334 55.23363292-55.23363292-55.92405334-55.92405333z m202.29318057-66.83269583l-55.64788516 55.64788516 55.64788516 55.64788516 55.64788518-55.64788516-55.64788518-55.64788516z m135.0462325-0.27616817l-55.92405333 55.92405333 55.5098011 55.50980107 55.92405333-55.92405334-55.5098011-55.50980106z m-270.09246498 0l-55.50980109 55.50980106 55.92405333 55.92405334 55.50980109-55.50980107-55.92405333-55.92405333z m404.86252932-0.27616817l-55.78596926 55.78596923 55.23363292 55.23363293 55.78596927-55.78596924-55.23363293-55.23363292z m-539.49450957 0l-55.23363291 55.23363292 55.78596924 55.78596924 55.23363292-55.23363293-55.78596925-55.78596923z m337.33941307-67.108864l-55.92405333 55.92405333 55.64788516 55.64788517 55.92405333-55.92405333-55.64788516-55.64788517z m-135.32240065 0l-55.64788517 55.64788517 55.92405333 55.92405333 55.64788517-55.64788517-55.92405333-55.92405333z m270.23054906-0.1380841l-55.78596924 55.78596927 55.50980108 55.50980109 55.78596924-55.78596927-55.50980108-55.50980109z m-405.0006134 0l-55.50980108 55.50980109 55.78596925 55.78596927 55.50980109-55.50980109-55.78596926-55.78596927z m202.43126465-67.52311624l-55.92405333 55.92405333 55.92405333 55.92405333 55.92405333-55.92405333-55.92405333-55.92405333z m135.18431659 0.13808409l-55.78596924 55.78596924 55.64788515 55.64788517 55.78596927-55.78596924-55.64788518-55.64788517z m-270.23054907 0L335.25237466 435.91961495l55.78596924 55.78596924 55.64788517-55.64788517-55.78596925-55.78596924z m-135.32240065-0.55233633l-55.50980109 55.50980108 56.20022149 56.2002215 55.50980108-55.50980108-56.20022148-56.2002215zM593.46960857 312.61052944999994l-55.78596926 55.78596925 55.92405333 55.92405333 55.78596926-55.78596925-55.92405333-55.92405333z m-134.90814842 0l-55.92405333 55.92405333 55.78596924 55.78596925 55.92405334-55.92405333-55.78596925-55.78596925z m270.50671724-0.27616817l-56.20022151 56.2002215 55.64788517 55.64788517 56.2002215-56.2002215-55.64788516-55.64788517z m-406.10528607 0l-55.64788517 55.64788517 56.2002215 56.2002215 55.64788517-55.64788517-56.2002215-56.2002215z m338.44408573-67.66120033l-56.2002215 56.2002215 55.92405334 55.92405334 56.20022149-56.20022151-55.92405333-55.92405333z m-270.7828854 0l-55.92405334 55.92405333 56.20022151 56.20022151 55.92405333-55.92405334-56.2002215-56.2002215z m135.32240065 0.55233633l-55.78596924 55.78596925 55.78596924 55.78596926 55.78596927-55.78596926-55.78596927-55.78596925zM255.16360691 244.53507687l-55.64788516 55.64788517 56.2002215 56.2002215 55.64788517-55.64788517L255.16360691 244.53507687z m338.72025389-67.24694807L537.68363931 233.48835027999996l55.78596926 55.78596926 56.2002215-56.2002215-55.78596927-55.78596924z m-135.7366529 0l-55.78596924 55.78596924 56.20022149 56.2002215 55.78596925-55.78596926-56.2002215-56.20022148z m271.05905357-0.41425227l-56.2002215 56.20022151 55.92405333 55.92405333 56.20022151-56.2002215-55.92405334-55.92405334zM322.82480725 176.87387652999996l-55.92405333 55.92405334 56.20022149 56.2002215 55.92405334-55.92405333L322.82480725 176.87387652999996z m203.12168505-67.52311623l-56.20022148 56.20022149 56.20022148 56.20022151 56.2002215-56.20022151-56.2002215-56.20022149z m135.874737 0l-56.20022149 56.20022149 55.78596924 55.78596926 56.2002215-56.2002215-55.78596925-55.78596925z m-271.61138989 0l-55.78596926 55.78596925 56.2002215 56.2002215 55.78596926-55.78596926-56.2002215-56.20022149zM593.8838608 41.55147588l-56.20022149 56.20022151 56.20022149 56.20022149 56.20022151-56.20022149-56.20022151-56.20022151z m-135.7366529 0l-56.2002215 56.20022151 56.2002215 56.20022149 56.2002215-56.20022149L458.1472079 41.55147588z m270.7828854 0.69042042L673.5583763 97.6136133l55.78596925 55.78596925 55.371717-55.371717-55.78596925-55.78596925z m-405.82911789 0l-55.78596926 55.78596925L322.82480725 153.39958255l55.78596925-55.78596925-55.50980109-55.371717zM812.47096309 125.78276607999999z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="kouling" unicode="&#59300;" d="M938.666667 514.56h-81.066667v42.666667A331.093333 331.093333 0 0 1 527.786667 890.453333H512a331.093333 331.093333 0 0 1-331.946667-331.093333v-42.666667H82.346667a32 32 0 0 1-32-32v-558.933333a32 32 0 0 1 32-32H938.666667a32 32 0 0 1 32 32V482.56a32 32 0 0 1-32 32z m-695.466667 42.666667A267.093333 267.093333 0 0 0 512 826.453333h16.64a267.093333 267.093333 0 0 0 267.093333-267.093333v-42.666667H244.053333zM907.946667-42.666667H114.346667V450.56h793.6zM512 351.573333a32 32 0 0 1-32-32v-213.333333a32 32 0 0 1 64 0v213.333333a32 32 0 0 1-32 32z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="-XML" unicode="&#59301;" d="M0 672v-576h1024V672H0z m64-64h896v-448H64V608z m160-96l64-128-64-128h64l32 64 32-64h64l-64 128 64 128h-64l-32-64-32 64H224z m224 0v-256h64v148.992l6.016-8 25.984-33.984 26.016 33.984 5.984 8V256h64v256h-64l-10.016-12.992-21.984-28.992-22.016 28.992L512 512h-64z m256 0v-256h128v64h-64v192h-64z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiangli1" unicode="&#59302;" d="M1011 201.40000000999999L834.8 367.50000001c-3.9 3.6-8.2 6.4-12.9 8.3 7.5 27.5 11.3 56 11.3 84.9 0 86-33.5 166.8-94.3 227.6-60.8 60.8-141.6 94.3-227.6 94.3s-166.8-33.5-227.6-94.3c-60.8-60.8-94.3-141.6-94.3-227.6 0-29.8 4.1-59.2 12.1-87.6-3.2-1.9-6.1-4.2-8.7-6.9-31.1-32-62.7-64.2-93.2-95.3-29.6-30.1-60.2-61.2-90.4-92.3-8.2-8.4-10.7-20.5-6.5-31.5 4.2-11 14.1-18.3 25.8-19.1 36.6-2.6 90.9-12.7 142.2-46.3 46.8-31.2 71.7-79.3 80.3-98.5 4-9.1 12.3-15.5 22-17.3 1.8-0.3 3.5-0.5 5.3-0.5 8 0 15.7 3.2 21.3 9l164 167.9c15.8-2.3 31.7-3.5 47.7-3.5 18 0 36.1 1.5 53.8 4.5 27.8-26.4 56.1-52.8 83.5-78.4 32.6-30.4 66.3-61.8 99-93.1 5.6-5.4 13-8.3 20.6-8.3 2.3 0 4.7 0.3 7 0.8 9.9 2.4 17.9 9.6 21.2 19.2 10.1 29 32.2 70.4 80.7 103.3 36.3 24.2 81.7 36.9 113.4 43.3 15.3 3.1 27.5 14.4 31.8 29.4 4.4 15.1 0 31.1-11.3 41.9zM281.2 12.900000009999985c-14.8 29.1-42.5 71.7-88.4 102.2l-0.1 0.1c-49.2 32.2-100.5 45.5-140.2 50.6 25.3 26 50.8 51.9 75.5 77.1 28.8 29.3 58.5 59.5 87.8 89.8 37.6-86.7 112-152.7 201.9-180L281.2 12.900000009999985z m179 170.6c-98.2 18-180.3 87.6-214.2 181.8l-18.8-6.8 18.8 6.8c-11 30.6-16.6 62.7-16.6 95.5 0 155.4 126.5 281.9 281.9 281.9s281.9-126.5 281.9-281.9c0-33.9-6-67-17.7-98.5-33.8-90.5-113.5-158.7-208-177.8-35-7.2-72-7.5-107.3-1zM984 170.60000001000003c-0.3-1-0.9-1.1-1.3-1.2-35.3-7.1-86.1-21.5-127.8-49.3l-0.1-0.1c-50-33.9-76.5-75.7-90.5-108.8-29.4 28-59.3 55.9-88.4 83-21.3 19.8-43 40.1-64.6 60.5 40.1 13.1 77.5 34.1 109.7 61.8 38.2 32.9 68.3 74.4 87.6 120.7l174.9-164.9c0.3-0.3 0.8-0.7 0.5-1.7zM688.36666667 550.6666666799999c0 5.4-2 10.6-5.6 14.1-3.5 3.5-8.7 5.6-14.1 5.6s-10.6-2-14.1-5.6l-0.1-0.1-181.7-191.7-90.6 85.8c-7.4 7.3-20.8 7.2-28.2-0.1-7.4-7.4-7.4-20.9 0-28.3l100.9-95.6c3.2-3.1 7.7-5.1 12.5-5.4 2.7-1.2 5.6-1.8 8.6-1.8 5.3 0 10.5 1.9 14.2 5.6L682.86666667 536.6666666799999c3.5 3.5 5.5 8.6 5.5 14z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiqiren" unicode="&#60122;" d="M926.25224651 207.32207408v-103.56306133H97.74775349v103.56306133H-5.81530905v258.90765391h103.56306254V569.79279053h828.50449302v-103.56306254h103.56306254v-258.90765391h-103.56306254z m-103.56306133 0v258.90765391H201.31081482v-258.90765391h621.37837036zM563.78153127 725.13738312v-103.56306253h-103.56306254V725.13738312h103.56306254z m-181.23535883-466.03377777c-41.42522429 0-77.6722963 36.24707201-77.6722963 77.6722963S341.12094815 414.44819794 382.54617244 414.44819794s77.6722963-36.24707201 77.67229629-77.67229629-36.24707201-77.6722963-77.67229629-77.6722963z m258.90765512 0c-41.42522429 0-77.6722963 36.24707201-77.67229629 77.6722963s36.24707201 77.6722963 77.67229629 77.67229629 77.6722963-36.24707201 77.6722963-77.67229629-36.24707201-77.6722963-77.6722963-77.6722963z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fsux_tubiao_gongshi_jisuan" unicode="&#59303;" d="M393.86147296 405.62266061L170.41551588 676.92739987h226.637592s79.77041142 6.10614802 108.49985205-33.53027723c28.73416437-39.63484978 38.30277119-100.60185332 38.30277117-100.60185332h28.73259022l-12.75709342 185.96510507H14.03641245v-27.4351509l280.86232436-329.22969176L14.03641245 58.10286869000004v-30.4882249h558.55190887l35.11900968 207.30828054-28.72786646 6.09197671s-9.57333059-45.72840194-47.8792514-88.40215572c-38.30277119-42.68477548-188.3237978-36.58020161-188.32379909-36.58020161H141.70182075l252.15965221 289.5901169z m0 0M667.49971194 168.45440498000005l-22.73193801 16.00698643 257.26752741 398.83158663 22.70202122-15.99124096L667.49971194 168.45440498000005m12.25165908 240.54253955c-8.22078276 0-13.698681 5.72195495-13.69868103 14.31748325v150.29185178c0 8.58923037 5.47789825 14.31590909 13.69868103 14.31590781 8.21763444 0 13.698681-5.72667873 13.698681-14.31590781v-151.72155279c0-7.16582727-6.84933986-12.88778223-13.698681-12.88778224z m0 0M600.27697777 513.48481533h157.57104565c8.22550653 0 13.70340478-5.72195495 13.70340479-14.30961115 0-8.5876562-5.47789825-14.31748324-13.70340479-14.31748325H600.27697777m395.98163085-224.72135042H838.68913581c-8.22708199 0-13.698681 5.71880534-13.69868102 14.31275948 0 8.5955283 5.47789825 14.31590909 13.69868102 14.31590909h157.56789735c8.22550653 0 13.70655439-5.72982704 13.70655439-14.31590909-0.00629793-8.59395413-5.48104656-14.31275948-13.70497893-14.31275948z m-1.36986876 75.86235055H837.31926836c-8.22708199 0-13.70497894 5.72667873-13.70497894 14.3159078 0 8.57978283 5.47789825 14.30961117 13.70497894 14.30961116h157.56789735c8.22865614 0 13.70183062-5.72982704 13.70183061-14.30961116 0.00157417-8.59080452-5.47317447-14.31590909-13.70025646-14.3159078z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon-" unicode="&#59304;" d="M512 706.3552A307.2 307.2 0 0 1 389.12 117.76v-96.4608a122.88 122.88 0 0 1 97.4848-120.4224v-2.6624A25.6 25.6 0 0 1 512-128a25.6 25.6 0 0 1 25.6 25.6v2.6624A122.88 122.88 0 0 1 634.88 20.6848V117.76a307.2 307.2 0 0 1-122.88 588.5952z m0-757.76a71.8848 71.8848 0 0 0-71.68 71.8848v3.6864h143.36v-3.6864a71.8848 71.8848 0 0 0-71.68-71.68z m102.4 215.4496A51.4048 51.4048 0 0 1 583.68 117.76v-40.96h-143.36v40.96a51.4048 51.4048 0 0 1-30.72 47.104 256.2048 256.2048 0 1 0 204.8 0zM512 742.1952a25.6 25.6 0 0 1 25.6 25.6v102.4a25.6 25.6 0 0 1-51.2 0v-102.4A25.6 25.6 0 0 1 512 742.1952zM772.9152 634.2656a25.3952 25.3952 0 0 1 18.0224 7.3728l72.4992 72.4992a25.6 25.6 0 0 1-36.2496 36.2496l-72.4992-72.4992a25.6 25.6 0 0 1 0-36.2496 26.2144 26.2144 0 0 1 18.2272-7.3728zM233.0624 641.6384a25.3952 25.3952 0 0 1 18.0224-7.3728 26.2144 26.2144 0 0 1 18.2272 7.3728 25.6 25.6 0 0 1 0 36.2496L196.8128 750.3872a25.6 25.6 0 0 1-36.2496-36.2496zM983.04 424.96h-102.4a25.6 25.6 0 0 1 0-51.2h102.4a25.6 25.6 0 0 1 0 51.2zM143.36 424.96H40.96a25.6 25.6 0 0 1 0-51.2h102.4A25.6 25.6 0 0 1 143.36 424.96z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fenxi" unicode="&#59305;" d="M1021.952 189.32622221999998V839.45244445H2.61688889v-650.12622223h486.51377778v-232.22044444H350.09422222L303.78666667-89.31555555h416.99555555l-46.30755555 46.42133333H535.43822222V189.32622221999998h486.51377778z m-972.91377778 46.42133333V793.03111111h926.60622223v-557.28355556H49.03822222zM280.68977778 653.76711111h92.61511111v-371.48444444h-92.61511111zM465.92 467.968h92.61511111v-185.79911111h-92.61511111zM651.264 560.81066667h92.61511111v-278.64177778h-92.61511111z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="paixu" unicode="&#59306;" d="M171.008 812.71466667c17.52177778 0 31.744-14.22222222 31.744-31.744l0-730.79466667c0-17.52177778-14.22222222-31.744-31.74400001-31.744-17.52177778 0-31.744 14.22222222-31.74399999 31.744L139.264 780.97066667c-0.11377778 17.52177778 14.10844445 31.744 31.744 31.744zM480.36977778 717.48266667l222.43555554 0c17.52177778 0 31.744-14.22222222 31.74400001-31.74400001 0-17.52177778-14.22222222-31.744-31.744-31.74399999L480.36977778 653.99466667c-17.52177778 0-31.744 14.22222222-31.744 31.74399999 0 17.52177778 14.22222222 31.744 31.744 31.74400001zM480.36977778 526.79111111l317.78133333 0c17.52177778 0 31.744-14.22222222 31.744-31.744 0-17.52177778-14.22222222-31.744-31.744-31.74399999L480.36977778 463.30311111c-17.52177778 0-31.744 14.22222222-31.744 31.744 0 17.52177778 14.22222222 31.744 31.744 31.744zM480.36977778 336.21333332999995l413.01333333 0c17.52177778 0 31.744-14.22222222 31.744-31.744 0-17.52177778-14.22222222-31.744-31.744-31.744l-413.01333333 0c-17.52177778 0-31.744 14.22222222-31.744 31.744 0 17.52177778 14.22222222 31.744 31.744 31.744zM480.36977778 145.52177777999998L988.72888889 145.52177777999998c17.52177778 0 31.744-14.22222222 31.74399999-31.744 0-17.52177778-14.22222222-31.744-31.74399999-31.744L480.36977778 82.03377778000004c-17.52177778 0-31.744 14.22222222-31.744 31.74400001 0 17.52177778 14.22222222 31.744 31.744 31.74399999zM173.73866667-42.89422221999996l153.71377778 161.10933333c11.03644446 11.71911111 11.03644445 30.60622222 0 42.32533334-11.03644446 11.71911111-28.89955555 11.71911111-39.93599999 0L171.46311111 39.25333333000003M173.28355555-44.71466667000004L11.94666667 124.13155555000003c-11.264 11.94666667-11.264 31.40266667 0 43.34933334s29.58222222 11.94666667 40.96 0l122.76622222-128"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="Map-pin" unicode="&#60533;" d="M733.866667 674.133333C733.866667 797.013333 634.88 896 512 896S290.133333 797.013333 290.133333 674.133333c0-116.053333 92.16-211.626667 204.8-221.866666v-563.2c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667V452.266667c112.64 10.24 204.8 105.813333 204.8 221.866666zM512 793.6c-64.853333 0-119.466667-54.613333-119.466667-119.466667 0-10.24-6.826667-17.066667-17.066666-17.066666s-17.066667 6.826667-17.066667 17.066666C358.4 759.466667 426.666667 827.733333 512 827.733333c10.24 0 17.066667-6.826667 17.066667-17.066666s-6.826667-17.066667-17.066667-17.066667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="Map-pin1" unicode="&#60534;" d="M358.4 677.546667v-174.08c0-64.853333 54.613333-119.466667 119.466667-119.466667h68.266666c64.853333 0 119.466667 54.613333 119.466667 119.466667v170.666666 3.413334c44.373333 37.546667 68.266667 85.333333 68.266667 133.12v6.826666c-3.413333 6.826667-34.133333 78.506667-221.866667 78.506667S293.546667 824.32 290.133333 817.493333v-6.826666c0-47.786667 27.306667-95.573333 68.266667-133.12z m10.24 116.053333c6.826667 3.413333 17.066667 0 20.48-6.826667 3.413333-3.413333 23.893333-27.306667 122.88-27.306666 102.4 0 122.88 23.893333 122.88 23.893333 3.413333 10.24 13.653333 13.653333 20.48 10.24 10.24-3.413333 13.653333-13.653333 6.826667-23.893333C658.773333 759.466667 634.88 725.333333 512 725.333333s-146.773333 34.133333-153.6 44.373334c-3.413333 6.826667 0 17.066667 10.24 23.893333zM768 315.733333c0 58.026667-17.066667 98.986667-54.613333 133.12-3.413333 3.413333-10.24 3.413333-13.653334 3.413334-6.826667 0-10.24-3.413333-10.24-10.24-27.306667-54.613333-81.92-92.16-143.36-92.16h-68.266666c-61.44 0-116.053333 37.546667-139.946667 92.16-3.413333 6.826667-6.826667 10.24-13.653333 10.24s-10.24 0-13.653334-3.413334c-37.546667-34.133333-54.613333-75.093333-54.613333-133.12 0-3.413333 0-23.893333 20.48-44.373333 37.546667-37.546667 109.226667-58.026667 218.453333-58.026667v-324.266666c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667V213.333333c109.226667 3.413333 180.906667 20.48 218.453333 58.026667 20.48 20.48 20.48 40.96 20.48 44.373333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="youxianji" unicode="&#60184;" d="M109.8009592 836.47392089h804.3980816a50.27488011 50.27488011 0 0 0 50.27488009-50.27488009v-804.3980816a50.27488011 50.27488011 0 0 0-50.27488009-50.27488009H109.8009592a50.27488011 50.27488011 0 0 0-50.27488009 50.27488009V786.1990408a50.27488011 50.27488011 0 0 0 50.27488009 50.27488009z m402.1990408-754.1232015a50.27488011 50.27488011 0 1 1 0 100.54976023 50.27488011 50.27488011 0 0 1 0-100.54976023z m0 603.29856122a50.27488011 50.27488011 0 0 1-50.27488011-50.2748801v-301.64928062a50.27488011 50.27488011 0 0 1 100.54976022 0v301.64928062a50.27488011 50.27488011 0 0 1-50.27488011 50.2748801z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiaji" unicode="&#59307;" d="M544.10666667 451.2h40.85333333v-145.49333333h-40.85333333zM957.22666667 606.6133333299999H66.77333333c-30.72 0-55.68-24.96-55.68-55.68v-333.97333333c0-30.72 24.96-55.68 55.68-55.68h890.56c30.72 0 55.68 24.96 55.68 55.68V550.93333333c-0.10666667 30.82666667-25.06666667 55.68-55.78666666 55.68zM298.88 403.09333333L194.45333333 252.79999999999995c-0.96-0.96-2.24-1.49333333-3.52-1.6-0.64 0-1.49333333 0-1.49333333 0.64-1.92 0.32-3.30666667 2.02666667-2.98666667 3.94666667 0 0.21333333 0.10666667 0.32 0.10666667 0.53333333l16.53333333 100.90666667h-72.74666666c-1.49333333-0.10666667-2.98666667 0.85333333-3.52 2.24-0.74666667 1.70666667-0.53333333 3.73333333 0.64 5.12l112.32 150.18666666c1.49333333 2.24 2.88 2.24 5.01333333 0.64 1.92-0.64 3.09333333-2.45333333 2.88-4.48l-16.53333333-100.90666666h64.21333333c1.49333333 0.10666667 2.98666667-0.85333333 3.52-2.24v-4.69333334z m196.37333333-109.86666666c-2.66666667-20.16-15.89333333-30.29333333-39.57333333-30.29333334-3.2 0-10.13333333 0.42666667-20.69333333 1.28l-6.4 23.14666667c10.13333333-0.85333333 17.81333333-1.28 23.14666666-1.28 11.2 0 17.81333333 6.18666667 19.94666667 18.56 1.38666667 11.52 2.34666667 55.25333333 2.88 131.2H445.86666667v-7.14666667c-0.85333333-77.54666667-17.92-134.18666667-51.2-169.92l-20.48 18.02666667c30.29333333 31.36 45.65333333 81.92 46.18666666 151.89333333v7.14666667h-40.10666666v24.64h40.10666666v44.58666667H445.86666667v-44.58666667h53.33333333c0.10666667-90.24-1.28-146.02666667-3.94666667-167.25333333z m114.45333334-28.48h-24.64v16.42666666h-40.85333334v-16.42666666H519.46666667V475.62666667h90.24v-210.88z m113.06666666 244.58666666l25.17333334-5.86666666-9.6-14.29333334H821.33333333v-17.28c-5.97333333-8.10666667-13.12-16.53333333-21.22666666-25.17333333h49.92v-97.70666667h-174.93333334v22.29333334h150.82666667V387.2h-140.8v21.22666667h140.69333333v15.89333333H676.37333333v1.06666667c-6.72-4.90666667-12.37333333-8.96-16.96-11.94666667L643.2 432.85333333c30.72 18.56 57.28 44.05333333 79.57333333 76.48z m76.8-195.73333333l-21.01333333-14.61333333c-6.93333333 10.13333333-16.42666667 21.54666667-28.69333333 34.24l20.69333333 12.69333333c12.26666667-11.52 21.86666667-22.4 29.01333333-32.32z m-131.41333333-45.86666667L646.4 281.49333333000004c11.84 16.85333333 20.37333333 34.98666667 25.49333333 54.4l24.64-4.8c-6.50666667-23.78666667-16-45.01333333-28.37333333-63.36z m156.37333333 2.34666667c-4.90666667-3.73333333-12.8-5.54666667-23.68-5.54666667h-64c-18.02666667 0-27.09333333 9.06666667-27.09333333 27.09333334V338.13333333h25.49333333v-41.17333333c0-6.72 2.88-10.13333333 8.74666667-10.13333333h52.05333333c4.90666667 0 8.53333333 1.28 10.66666667 3.73333333 2.88 2.88 4.69333333 11.2 5.54666667 25.17333333l23.89333333-7.68c-2.13333333-21.22666667-5.97333333-33.92-11.62666667-37.97333333z m41.6 1.38666667c-9.06666667 17.49333333-21.22666667 36.90666667-36.58666666 58.13333333l20.16 12.69333333c15.89333333-20.69333333 28.37333333-39.36 37.44-56L866.13333333 271.46666667zM790.50666667 468.37333333h-68.26666667c-6.18666667-6.93333333-13.12-14.18666667-20.69333333-21.76h67.73333333c6.50666667 6.08 13.65333333 13.33333333 21.22666667 21.76z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shangchuan-copy" unicode="&#59309;" d="M931.60299291 744.30537092l0-731.45786814c0-18.07854251 16.27068846-32.90294848 36.15708697-32.90294849 19.8863985 0 36.15708694 14.64362017 36.15708695 32.90294849L1003.91716683 744.30537092c0 18.07854251-16.27068846 32.90294848-36.15708695 32.90294849C947.69289749 777.2083194100001 931.60299291 762.56469924 931.60299291 744.30537092zM861.63903043 364.83674465c2.35021143 2.35021143 3.61570812 5.42356217 3.79649393 9.03927221 0.18078578 3.25413846 0.18078578 6.32749113 0 9.58162771-0.18078578 3.61570812-1.44628438 6.68906076-3.79649393 9.0392722L559.18499903 694.7701624c-7.41220203 7.41220203-23.50210659 3.61570812-35.79551538-8.49691484-12.29340875-12.29340875-16.08990458-28.20252756-8.49691487-35.79551539l238.45598849-238.45598851-700.00120213 0c-18.44011408 0-33.44530586-15.00519175-33.44530587-33.44530583l0 0c0-18.44011408 15.00519175-33.44530586 33.44530587-33.44530587L753.52934115 345.13113195999995l-238.45598846-238.45598847c-7.41220203-7.41220203-3.61570812-23.50210659 8.49691482-35.79551539 12.29340875-12.29340875 28.20252756-16.08990458 35.79551538-8.49691487L861.63903043 364.83674465z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shangchuan-copy-copy" unicode="&#59310;" d="M872.30537092-35.60299291000001l-731.45786814 0c-18.07854251 0-32.90294848-16.27068846-32.90294849-36.15708697 0-19.8863985 14.64362017-36.15708694 32.90294849-36.15708695L872.30537092-107.91716683000004c18.07854251 0 32.90294848 16.27068846 32.90294849 36.15708695C905.20831941-51.69289748999995 890.56469924-35.60299291000001 872.30537092-35.60299291000001zM492.83674465 34.36096956999995c2.35021143-2.35021143 5.42356217-3.61570812 9.03927221-3.79649393 3.25413846-0.18078578 6.32749113-0.18078578 9.58162771 0 3.61570812 0.18078578 6.68906076 1.44628438 9.0392722 3.79649393L822.7701624 336.81500097c7.41220203 7.41220203 3.61570812 23.50210659-8.49691484 35.79551538-12.29340875 12.29340875-28.20252756 16.08990458-35.79551539 8.49691487l-238.45598851-238.45598849 0 700.00120213c0 18.44011408-15.00519175 33.44530586-33.44530583 33.44530587l0 0c-18.44011408 0-33.44530586-15.00519175-33.44530587-33.44530587L473.13113196 142.47065884999995l-238.45598847 238.45598846c-7.41220203 7.41220203-23.50210659 3.61570812-35.79551539-8.49691482-12.29340875-12.29340875-16.08990458-28.20252756-8.49691487-35.79551538L492.83674465 34.36096956999995z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shangchuan-copy-copy-copy" unicode="&#59311;" d="M92.39700709 23.694629080000027l0 731.45786814c0 18.07854251-16.27068846 32.90294848-36.15708697 32.90294849-19.8863985 0-36.15708694-14.64362017-36.15708695-32.90294849L20.08283317 23.694629080000027c0-18.07854251 16.27068846-32.90294848 36.15708695-32.90294849C76.30710251-9.208319409999945 92.39700709 5.435300760000018 92.39700709 23.694629080000027zM162.36096957 403.16325535c-2.35021143-2.35021143-3.61570812-5.42356217-3.79649393-9.03927221-0.18078578-3.25413846-0.18078578-6.32749113 0-9.58162771 0.18078578-3.61570812 1.44628438-6.68906076 3.79649393-9.0392722L464.81500097 73.2298376c7.41220203-7.41220203 23.50210659-3.61570812 35.79551538 8.49691484 12.29340875 12.29340875 16.08990458 28.20252756 8.49691487 35.79551539l-238.45598849 238.45598851 700.00120213 0c18.44011408 0 33.44530586 15.00519175 33.44530587 33.44530583l0 0c0 18.44011408-15.00519175 33.44530586-33.44530587 33.44530587L270.47065885 422.86886804l238.45598846 238.45598847c7.41220203 7.41220203 3.61570812 23.50210659-8.49691482 35.79551539-12.29340875 12.29340875-28.20252756 16.08990458-35.79551538 8.49691487L162.36096957 403.16325535z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="loading1" unicode="&#59233;" d="M536.87599996 614.20800001a124.8 124.8 0 1 0 124.80000005 124.79999996 125.088 125.088 0 0 0-124.8-124.79999998zM271.07599996 515.0640000000001a114.072 114.072 0 1 0 114.07200005 114.072 114.24000001 114.24000001 0 0 0-114.072-114.072zM158.29999999 257.04000002a100.656 100.656 0 1 0 100.656 100.55999998A100.80000001 100.80000001 0 0 0 158.29999999 257.04000002z m112.80000002-255.43200003a85.29600001 85.29600001 0 1 0 85.296 85.29600001A85.464 85.464 0 0 0 271.09999999 1.607999990000053zM536.87599996-95.99999998999999a74.4 74.4 0 1 0 74.40000001 74.40000001 74.4 74.4 0 0 0-74.39999996-74.40000003z m269.71200003 125.76a60.168 60.168 0 1 0 60.168 60.16799999 60.336 60.336 0 0 0-60.16799998-60.16800001z m110.40000002 278.15999999a49.34400001 49.34400001 0 1 0 49.36799998 49.344 49.32000001 49.32000001 0 0 0-49.344-49.344z m-148.80000004 317.544a38.4 38.4 0 1 0 11.25600005-27.048 37.992 37.992 0 0 0-11.256 27.048z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="loading" unicode="&#59234;" d=""  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiazai_dan" unicode="&#60147;" d="M166.36019883 19.50711879000005C72.09479865 113.77251898999998 9.2511995 239.45972018999998 9.2511995 384c0 276.51184005 226.23696045 502.7488005 502.7488005 502.7488005v-125.68719975c-207.38388041 0-377.06160075-169.67772034-377.06160075-377.06160075 0-106.83411971 43.99052059-207.38388041 119.40284073-276.51184005l-87.98104115-87.98104116z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yuandian" unicode="&#59231;" d="M654.65406891 389.33536872c0-79.34719648-64.29680799-143.69285951-143.67274292-143.69285953-79.3673131 0-143.71297611 64.345663-143.71297609 143.69285953 0 79.39317849 64.345663 143.69285951 143.71297609 143.69285946C590.35726093 533.02822818 654.65406891 468.72854719 654.65406891 389.33536872z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shanjian1" unicode="&#58908;" d="M511.92180305-113.87889717999997a503.14367735 503.14367735 0 1 0 503.14367734 503.14367734 500.04095771 500.04095771 0 0 0-503.14367734-503.14367734z m237.04356517 549.05553784H274.79438069a35.3668078 35.3668078 0 0 1 1e-8-70.73361558H748.8186181a35.3668078 35.3668078 0 0 1 1e-8 70.73361558z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shanjian" unicode="&#59165;" d="M512 870.4C243.2 870.4 25.6 652.8 25.6 384s217.6-486.4 486.4-486.4 486.4 217.6 486.4 486.4S780.8 870.4 512 870.4z m0-908.8c-230.4 0-422.4 185.6-422.4 422.4 0 230.4 185.6 422.4 422.4 422.4s422.4-185.6 422.4-422.4c0-230.4-192-422.4-422.4-422.4zM755.2 416H268.8c-12.8 0-25.6-12.8-25.6-32s12.8-32 32-32h480c19.2 0 32 12.8 32 32 0 25.6-19.2 32-32 32z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zengjia2" unicode="&#59166;" d="M256 384c0 17.673 14.327 32 32 32h448c17.673 0 32-14.327 32-32s-14.327-32-32-32h-448c-17.533 0.351-31.653 14.474-32 31.975zM480 608c0 17.673 14.327 32 32 32s32-14.327 32-32v-448c0-17.673-14.327-32-32-32s-32 14.327-32 32zM512 896c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM512-64c-247.424 0-448 200.576-448 448s200.576 448 448 448c247.424 0 448-200.576 448-448 0-247.424-200.576-448-448-448z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tiaojianchaxun" unicode="&#58903;" d="M608.05473975 221.71799704c43.62593975 56.05350717 69.64615902 126.60584297 69.64615901 203.11305482 0 182.91825778-148.35408592 331.2723437-331.2723437 331.2723437S15.15621136 607.74930964 15.15621136 424.83105186s148.35408592-331.2723437 331.2723437-331.2723437c76.50721185 0 146.93009383 26.02021925 203.11305481 69.51670518l139.42177186-139.6806795c8.15559111-8.15559111 18.64135111-12.16865975 29.25656494-12.16865975 10.61521383 0 21.23042765 4.01306864 29.25656494 12.16865975 16.18172839 16.18172839 16.18172839 42.33140148 0 58.64258369L608.05473975 221.71799704z m-437.29502814 27.44421136c-46.86228543 46.86228543-72.75305086 109.25903013-72.75305086 175.66884346 0 66.40981333 25.89076543 128.67710419 72.75305086 175.66884345 46.86228543 46.86228543 109.25903013 72.75305086 175.66884345 72.75305086 66.40981333 0 128.67710419-25.89076543 175.66884346-72.75305086C568.95968395 553.5081560599999 594.85044939 491.11141137 594.85044939 424.83105186c0-66.40981333-25.89076543-128.67710419-72.75305087-175.66884346-46.86228543-46.86228543-109.25903013-72.75305086-175.66884346-72.75305087-66.40981333 0-128.67710419 25.89076543-175.66884345 72.75305087zM719.25557728 673.12349236l248.55134815 0.12945381c22.91332741 0 41.42522469 18.51189728 41.4252247 41.4252247s-18.51189728 41.42522469-41.4252247 41.42522469l-248.55134815-0.12945383c-22.91332741 0-41.42522469-18.51189728-41.42522469-41.42522469s18.64135111-41.42522469 41.42522469-41.42522468zM967.93637925 423.79542124l-165.57144494 0.38836149c-22.91332741 0-41.42522469-18.51189728-41.42522468-41.4252247s18.51189728-41.42522469 41.42522468-41.42522469l165.57144494-0.38836148c22.91332741 0 41.42522469 18.51189728 41.4252247 41.42522468s-18.64135111 41.42522469-41.4252247 41.4252247zM967.80692543 92.00526222999997l-82.59154173 0.38836148c-22.91332741 0-41.42522469-18.51189728-41.42522468-41.42522468s18.51189728-41.42522469 41.42522468-41.42522471l82.59154173-0.38836148c22.91332741 0 41.42522469 18.51189728 41.4252247 41.42522469s-18.64135111 41.42522469-41.4252247 41.4252247z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zengjia3" unicode="&#59174;" d="M863.29 734.455C769.409 827.92 644.559 879.304 511.654 879.304c-132.766 0-257.756-51.523-351.636-144.988C66.137 640.851 14.336 516.557 14.336 384.207S66.138 127.563 160.018 33.96c93.881-93.465 218.87-144.988 351.636-144.988S769.41-59.505 863.29 33.96c94.019 93.603 145.821 217.898 145.682 350.247 0.139 132.35-51.662 256.644-145.682 350.247M760.381 348.656H547.204v-213.177c0-19.582-15.971-35.552-35.552-35.552S476.1 115.758 476.1 135.479V348.656H263.063c-19.582 0-35.552 15.971-35.552 35.552s15.971 35.552 35.552 35.552H476.24V632.937c0 19.582 15.971 35.552 35.552 35.552 19.582 0 35.552-15.971 35.552-35.552V419.76h213.177c19.582 0 35.552-15.971 35.552-35.552-0.139-19.582-15.971-35.552-35.692-35.552m0 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="permissions-user" unicode="&#58910;" d="M776.68864 669.53216c-24.54528 141.58336-158.12096 236.032-298.28608 211.13344-139.9808-24.90368-258.26304-133.93408-233.53856-275.33824 5.33504-30.592 20.096-78.26432 37.5296-112.59392L28.04224 125.79327999999998c-9.42592-13.5168-14.76608-37.888-11.91936-54.25152l11.02848-62.78656c-10.496 60.47232 2.84672-21.87776 11.02336-21.51936l83.77344-1.24416c16.18944 2.8416 36.46464 16.54272 45.35808 30.4128l100.67456 157.4144 0.88576 1.07008 87.86944-6.9376 117.57056 184.27392s26.16832 53.53984 123.07456 105.05728c88.69376 41.06752 163.04128 32.49152 163.04128 32.49152 21.57056 53.99552 27.20256 117.66784 16.26624 179.75808zM96.86528 100.61824000000001l-22.00064-13.8496 5.12512 24.8832 238.70464 341.62688 16.50688-11.56096-238.336-341.09952zM652.71296 597.1456000000001c-38.59456-55.49568-77.90592-16.36864-132.864 22.58944-54.9632 38.95296-104.94464 62.78144-66.34496 118.45632 38.59456 55.49056 114.36544 69.18656 169.32864 30.23872 54.95808-39.13216 68.47488-115.79392 29.88032-171.28448zM744.832 422.05184c-148.29056 0-268.44672-120.15616-268.44672-268.4416 0-148.29056 120.15616-268.44672 268.44672-268.44672 148.28544 0 268.4416 120.15616 268.4416 268.4416 0 148.29056-120.15616 268.44672-268.4416 268.44672z m155.12576-378.63424c0-40.05376-76.77952-49.23392-148.87424-49.23392-72.09472 0-149.85216 9.18528-149.85216 49.23392v11.136c0 29.50144 53.14048 59.392 98.2784 75.60704 3.31776 1.17248 18.944 9.76896 10.15296 32.62464-22.46656 22.8608-39.26528 59.98592-39.26528 96.51712 0 55.87456 36.92544 85.17632 80.29696 85.17632 43.18208 0 80.49152-29.30688 80.49152-85.17632 0-36.34176-16.9984-73.2672-39.2704-96.32256h0.19456c-8.59136-25.984 5.07904-32.2304 7.22432-32.8192 47.48288-15.62624 100.81792-45.32736 100.81792-75.60704l-0.19456-11.136z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="edit-permissions" unicode="&#58911;" d="M776.68864 669.53216c-24.54528 141.58336-158.12096 236.032-298.28608 211.13344-139.9808-24.90368-258.26304-133.93408-233.53856-275.33824 5.33504-30.592 20.096-78.26432 37.5296-112.59392L28.04224 125.79327999999998c-9.42592-13.5168-14.76608-37.888-11.91936-54.25152l11.02848-62.78656c-10.496 60.47232 2.84672-21.87776 11.02336-21.51936l83.77344-1.24416c16.18944 2.8416 36.46464 16.54272 45.35808 30.4128l100.67456 157.4144 0.88576 1.07008 87.86944-6.9376 117.57056 184.27392s26.16832 53.53984 123.07456 105.05728c88.69376 41.06752 163.04128 32.49152 163.04128 32.49152 21.57056 53.99552 27.20256 117.66784 16.26624 179.75808zM96.86528 100.61824000000001l-22.00064-13.8496 5.12512 24.8832 238.70464 341.62688 16.50688-11.56096-238.336-341.09952zM652.71296 597.1456000000001c-38.59456-55.49568-77.90592-16.36864-132.864 22.58944-54.9632 38.95296-104.94464 62.78144-66.34496 118.45632 38.59456 55.49056 114.36544 69.18656 169.32864 30.23872 54.95808-39.13216 68.47488-115.79392 29.88032-171.28448zM745.20576 419.34848c-148.32128 0-268.55424-120.23808-268.55424-268.55424S596.88448-117.75999999999999 745.20576-117.75999999999999 1013.76 2.478079999999977 1013.76 150.79423999999995s-120.23808 268.55424-268.55424 268.55424z m-47.06816-395.14624l-98.71872-14.1056 12.53376 97.152 147.29728 147.29728 84.61824-84.61824-145.73056-145.72544z m159.83616 159.83104l-84.61824 84.61824 28.20608 28.20608 84.61824-84.61824-28.20608-28.20608z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="add-permissions" unicode="&#59225;" d="M776.68864 669.53216c-24.54528 141.58336-158.12096 236.032-298.28608 211.13344-139.9808-24.90368-258.26304-133.93408-233.53856-275.33824 5.33504-30.592 20.096-78.26432 37.5296-112.59392L28.04224 125.79327999999998c-9.42592-13.5168-14.76608-37.888-11.91936-54.25152l11.02848-62.78656c-10.496 60.47232 2.84672-21.87776 11.02336-21.51936l83.77344-1.24416c16.18944 2.8416 36.46464 16.54272 45.35808 30.4128l100.67456 157.4144 0.88576 1.07008 87.86944-6.9376 117.57056 184.27392s26.16832 53.53984 123.07456 105.05728c88.69376 41.06752 163.04128 32.49152 163.04128 32.49152 21.57056 53.99552 27.20256 117.66784 16.26624 179.75808zM96.86528 100.61824000000001l-22.00064-13.8496 5.12512 24.8832 238.70464 341.62688 16.50688-11.56096-238.336-341.09952zM652.71296 597.1456000000001c-38.59456-55.49568-77.90592-16.36864-132.864 22.58944-54.9632 38.95296-104.94464 62.78144-66.34496 118.45632 38.59456 55.49056 114.36544 69.18656 169.32864 30.23872 54.95808-39.13216 68.47488-115.79392 29.88032-171.28448zM1013.38112 153.49760000000003c0-148.32128-120.23808-268.55424-268.55424-268.55424s-268.55424 120.23808-268.55424 268.55424 120.23808 268.55424 268.55424 268.55424 268.55424-120.23808 268.55424-268.55424z m-309.00224 136.2432c-0.10752-1.77152 0-96.01024 0-96.01024H606.6688c-43.16672-2.54464-42.37312-40.23296-42.37312-40.23296s0-37.9392 42.37312-40.23296h97.70496v-96.01024c3.01056-42.9568 40.23296-42.37312 40.23296-42.37312s38.15424 0 40.23296 42.37312v96.01024h94.31552c42.37312 2.42176 42.37312 40.23296 42.37312 40.23296s0 37.56032-42.37312 40.23296h-94.3104V289.74080000000004c-2.26816 42.37312-40.23296 42.37312-40.23296 42.37312s-37.71904 0.00512-40.23296-42.37312z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="remove-permissions" unicode="&#59226;" d="M1012.92032 153.49760000000003c0-148.06016-120.02816-268.08832-268.08832-268.08832s-268.08832 120.02816-268.08832 268.08832 120.02816 268.08832 268.08832 268.08832 268.08832-120.02816 268.08832-268.08832z m-308.47488 40.1664h-97.536c-43.09504-2.54464-42.30144-40.1664-42.30144-40.1664s0-37.87264 42.30144-40.1664h272.01536c42.30144 2.41664 42.30144 40.1664 42.30144 40.1664s0 37.49888-42.30144 40.1664h-174.47936zM776.68864 669.53216c-24.54528 141.58336-158.12096 236.032-298.28608 211.13344-139.9808-24.90368-258.26304-133.93408-233.53856-275.33824 5.33504-30.592 20.096-78.26432 37.5296-112.59392L28.04224 125.79327999999998c-9.42592-13.5168-14.76608-37.888-11.91936-54.25152l11.02848-62.78656c-10.496 60.47232 2.84672-21.87776 11.02336-21.51936l83.77344-1.24416c16.18944 2.8416 36.46464 16.54272 45.35808 30.4128l100.67456 157.4144 0.88576 1.07008 87.86944-6.9376 117.57056 184.27392s26.16832 53.53984 123.07456 105.05728c88.69376 41.06752 163.04128 32.49152 163.04128 32.49152 21.57056 53.99552 27.20256 117.66784 16.26624 179.75808zM96.86528 100.61824000000001l-22.00064-13.8496 5.12512 24.8832 238.70464 341.62688 16.50688-11.56096-238.336-341.09952zM652.71296 597.1456000000001c-38.59456-55.49568-77.90592-16.36864-132.864 22.58944-54.9632 38.95296-104.94464 62.78144-66.34496 118.45632 38.59456 55.49056 114.36544 69.18656 169.32864 30.23872 54.95808-39.13216 68.47488-115.79392 29.88032-171.28448z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="setting-permissions" unicode="&#59228;" d="M776.68864 669.53216c-24.54528 141.58336-158.12096 236.032-298.28608 211.13344-139.9808-24.90368-258.26304-133.93408-233.53856-275.33824 5.33504-30.592 20.096-78.26432 37.5296-112.59392L28.04224 125.79327999999998c-9.42592-13.5168-14.76608-37.888-11.91936-54.25152l11.02848-62.78656c-10.496 60.47232 2.84672-21.87776 11.02336-21.51936l83.77344-1.24416c16.18944 2.8416 36.46464 16.54272 45.35808 30.4128l100.67456 157.4144 0.88576 1.07008 87.86944-6.9376 117.57056 184.27392s26.16832 53.53984 123.07456 105.05728c88.69376 41.06752 163.04128 32.49152 163.04128 32.49152 21.57056 53.99552 27.20256 117.66784 16.26624 179.75808zM96.86528 100.61824000000001l-22.00064-13.8496 5.12512 24.8832 238.70464 341.62688 16.50688-11.56096-238.336-341.09952zM652.71296 597.1456000000001c-38.59456-55.49568-77.90592-16.36864-132.864 22.58944-54.9632 38.95296-104.94464 62.78144-66.34496 118.45632 38.59456 55.49056 114.36544 69.18656 169.32864 30.23872 54.95808-39.13216 68.47488-115.79392 29.88032-171.28448zM942.83264 205.77792a200.61696 200.61696 0 0 1-20.3776 49.40288l38.90688 58.55744-0.2048 0.1024-55.2704 55.26016-0.1024 0.1024-58.55744-38.90176a202.368 202.368 0 0 1-49.18784 20.3776l-13.99808 68.84864h-78.31552l-13.99808-68.74624a202.32192 202.32192 0 0 1-49.19808-20.3776l-58.55744 38.80448-55.46496-55.46496 38.89664-58.55744a197.07392 197.07392 0 0 1-20.47488-49.40288l-68.84864-13.99808v-78.31552l68.84864-13.99808a203.93472 203.93472 0 0 1 20.37248-49.40288l-38.89664-58.55744 55.47008-55.46496 58.65984 38.89664a202.89024 202.89024 0 0 1 49.19808-20.37248l13.99808-68.84864h78.31552l13.99808 68.84864a200.7808 200.7808 0 0 1 49.18784 20.37248l58.55744-38.89664 0.1024 0.1024 55.2704 55.26016 0.1024 0.1024-38.90176 58.55744a200.61696 200.61696 0 0 1 20.3776 49.40288l68.84864 13.99808v78.31552l-68.75648 13.99296z m-197.80096-145.73056c-51.21024 0.05632-92.67712 41.61536-92.6208 92.83072 0.06144 51.21024 41.61536 92.67712 92.8256 92.6208 51.21536-0.05632 92.68224-41.61536 92.62592-92.83072-0.05632-51.21024-41.61536-92.67712-92.83072-92.6208z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="duankailianjie" unicode="&#58895;" d="M429.27083333 372.75c-8.4375 8.4375-22.5 11.25-30.9375 5.625-30.9375-14.0625-70.3125-8.4375-95.625 16.875L173.33333333 524.625c-30.9375 30.9375-30.9375 84.375 0 118.125l87.1875 87.1875c33.75 33.75 87.1875 33.75 118.125 0l129.375-129.375c25.3125-25.3125 30.9375-64.6875 16.875-95.625-5.625-11.25-5.625-25.3125 5.625-33.75 14.0625-14.0625 36.5625-8.4375 45 8.4375 25.3125 53.4375 16.875 118.125-25.3125 163.125L420.83333333 769.3125c-56.25 56.25-143.4375 56.25-199.6875 0L133.95833333 682.125c-56.25-56.25-56.25-143.4375 0-199.6875l129.375-129.375c42.1875-42.1875 106.875-50.625 160.3125-28.125 16.875 11.25 19.6875 33.75 5.625 47.8125zM614.89583333 392.4375c8.4375-8.4375 22.5-11.25 30.9375-5.625 30.9375 14.0625 70.3125 8.4375 95.625-16.875l129.375-129.375c33.75-33.75 33.75-87.1875 0-118.125l-87.1875-87.1875c-33.75-33.75-87.1875-33.75-118.125 0L533.33333333 161.8125c-25.3125 25.3125-30.9375 64.6875-16.875 95.625 5.625 11.25 5.625 25.3125-5.625 33.75-14.0625 14.0625-36.5625 8.4375-45-8.4375-25.3125-53.4375-16.875-118.125 25.3125-163.125l129.375-129.375c56.25-56.25 143.4375-56.25 199.6875 0l87.1875 87.1875c56.25 56.25 56.25 143.4375 0 199.6875l-129.375 129.375c-42.1875 42.1875-106.875 50.625-160.3125 28.125-14.0625-5.625-16.875-28.125-2.8125-42.1875zM637.39583333 609c-16.875 0-28.125 11.25-28.125 28.125V749.625c0 14.0625 14.0625 28.125 28.125 28.125s28.125-11.25 28.125-28.125v-112.5c0-14.0625-11.25-28.125-28.125-28.125zM718.95833333 558.375c-11.25 11.25-11.25 28.125 0 39.375l78.75 78.75c11.25 11.25 28.125 11.25 39.375 0 11.25-11.25 11.25-28.125 0-39.375L758.33333333 558.375c-11.25-11.25-30.9375-11.25-39.375 0zM769.58333333 479.625c0 16.875 11.25 28.125 28.125 28.125h112.5c16.875 0 28.125-11.25 28.125-28.125 0-14.0625-11.25-28.125-28.125-28.125h-112.5c-16.875 0-28.125 11.25-28.125 28.125zM294.27083333 265.875c0 16.875-11.25 28.125-28.125 28.125h-112.5c-14.0625 0-28.125-11.25-28.125-28.125 0-14.0625 11.25-28.125 28.125-28.125h112.5c14.0625 0 28.125 11.25 28.125 28.125zM344.89583333 187.125c-11.25 11.25-28.125 11.25-39.375 0l-78.75-78.75c-11.25-11.25-11.25-28.125 0-39.375 11.25-11.25 28.125-11.25 39.375 0l78.75 78.75c11.25 8.4375 11.25 28.125 0 39.375zM423.64583333 133.6875c-16.875 0-28.125-11.25-28.125-28.125v-112.5c0-16.875 11.25-28.125 28.125-28.125 14.0625 0 28.125 14.0625 28.125 28.125v112.5c0 16.875-11.25 28.125-28.125 28.125z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="robot_light" unicode="&#59230;" d="M904.43496192 392.0785762v10.77055842c0 91.96399882-75.6700771 167.63407591-167.63407594 167.63407591h-200.22191932v70.2847979c43.22031776 10.77055842 81.19344039 54.12896027 81.19344039 102.73455724 0 59.51423947-48.74368105 108.11983645-108.11983645 108.11983643S401.25656598 803.15488922 401.25656598 743.77873384c0-48.74368105 32.44975935-91.96399882 81.1934404-102.73455725v-70.28479789h-194.69855604c-91.96399882 0-167.63407591-75.6700771-167.63407592-167.63407591v-10.77055843c-70.2847979-10.77055842-119.02847895-70.2847979-119.02847895-140.70767986 0-70.2847979 48.74368105-124.41375815 113.64319973-140.70767987 5.3852792-86.57871961 75.6700771-156.86351749 167.63407593-156.8635175h454.43471485c91.96399882 0 162.2487967 70.2847979 167.63407594 156.8635175 64.89951868 10.77055842 113.64319973 70.2847979 113.64319971 140.70767987 5.24719513 70.1467138-43.35840185 129.66095328-113.64319971 140.4315117z m-789.84095079-221.76303619c-32.44975935 10.77055842-59.51423947 43.22031776-59.51423948 81.19344041s27.06448014 70.2847979 59.51423948 86.57871959v-167.77216zM458.00912382 743.77873384c0 27.06448014 21.67920092 54.12896027 54.12896027 54.12896024 27.06448014 0 54.12896027-21.67920092 54.12896026-54.12896024s-21.67920092-54.12896027-54.12896026-54.12896027c-32.44975935 5.3852792-54.12896027 27.06448014-54.12896027 54.12896027zM850.30600163 121.70994304999999c0-64.89951868-48.74368105-113.64319973-113.64319971-113.64319974H287.75145034c-64.89951868 0-113.64319973 48.74368105-113.64319974 113.64319974V402.9872187c0 64.89951868 48.74368105 113.64319973 113.64319974 113.64319974h454.43471485c64.89951868 0 113.64319973-48.74368105 113.64319975-113.64319974v-281.27727565h-5.52336331z m54.12896029 48.60559696V337.94961593999994c37.83503855-10.77055842 59.51423947-43.22031776 59.51423947-86.57871961 5.3852792-37.83503855-21.67920092-70.2847979-59.51423947-81.05535632zM707.1128083 402.9872187c-42.39181327 0-79.53643141-37.14461813-79.53643141-79.5364314 0-42.39181327 37.14461813-79.53643141 79.53643141-79.53643141s79.53643141 37.14461813 79.5364314 79.53643141c0 42.39181327-37.14461813 79.53643141-79.5364314 79.5364314z m0-106.04857521c-15.87966947 0-26.51214381 10.63247434-26.5121438 26.51214381s10.63247434 26.51214381 26.5121438 26.5121438 26.51214381-10.63247434 26.5121438-26.5121438-10.63247434-26.51214381-26.5121438-26.51214381z m-386.91159861 106.04857521c-42.39181327 0-79.53643141-37.14461813-79.53643142-79.5364314s37.14461813-79.53643141 79.53643142-79.53643141 79.53643141 37.14461813 79.5364314 79.53643141-37.14461813 79.53643141-79.5364314 79.5364314z m0-106.04857521c-15.87966947 0-26.51214381 10.63247434-26.51214382 26.51214381s10.63247434 26.51214381 26.51214382 26.5121438 26.51214381-10.63247434 26.51214379-26.5121438-10.63247434-26.51214381-26.51214379-26.51214381z m264.98335393-132.56071902H442.12945437c-15.87966947 0-26.51214381-10.63247434-26.51214382-26.51214378s10.63247434-26.51214381 26.51214382-26.51214381H585.18456362c15.87966947 0 26.51214381 10.63247434 26.51214379 26.51214381 0 10.63247434-10.63247434 26.51214381-26.51214379 26.51214378z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="921caidan_hezi" unicode="&#59175;" d="M520.91392 393.28768c-4.5568 0-9.11872 1.0496-13.30688 3.01568L98.40128 592.5324800000001a30.7968 30.7968 0 0 0-17.50016 27.79136 30.7968 30.7968 0 0 0 17.50016 27.79648l409.21088 196.224c8.4992 4.00384 18.36032 4.06528 26.79808-0.06144l403.85536-196.224a30.75072 30.75072 0 0 0 17.3056-27.73504 30.8224 30.8224 0 0 0-17.3056-27.72992l-403.91168-196.15744a30.02368 30.02368 0 0 0-13.44-3.1488zM183.0144 620.32384l337.8432-161.95584 333.39904 161.95584L520.8576 782.2848 183.0144 620.32384zM520.91392-73.16480000000001a31.09376 31.09376 0 0 0-13.43488 3.08224l-403.84 196.21376a30.81216 30.81216 0 0 0-14.2336 41.23136 30.79168 30.79168 0 0 0 41.16992 14.23872l390.34368-189.68576 390.3488 189.68576c15.34976 7.33184 33.77664 0.98816 41.23648-14.23872 7.38304-15.34464 1.03936-33.77152-14.23872-41.23136l-403.85024-196.21376c-4.2496-2.0992-8.87296-3.08224-13.50144-3.08224zM924.57472 132.05503999999996a30.8224 30.8224 0 0 0-30.81728 30.80704V614.9631999999999a30.8224 30.8224 0 0 0 61.63968 0v-452.10624a30.78656 30.78656 0 0 0-30.8224-30.80192zM108.01664 128.4864a30.8224 30.8224 0 0 0-30.81728 30.81216V614.9631999999999a30.82752 30.82752 0 0 0 30.81728 30.81216 30.8224 30.8224 0 0 0 30.81216-30.81216v-455.66976a30.8224 30.8224 0 0 0-30.81216-30.80704zM547.15392-34.95935999999995H484.75136V421.95968h62.42816l-0.0256-456.91904z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="BBDhezi" unicode="&#59176;" d="M532.98125 366.45000000000005L531.4625-66 962 152.19375000000002V584.64375zM512 834L84.5 618.39375 512 401.55l427.55625 216.84375zM62 152.19375000000002l424.51875-214.3125 1.4625 431.15625L62 584.64375z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="itunes" unicode="&#59323;" d="M267.87081444 137.87591110999995c-39.80705223-4.8545189-211.17155555-29.12711111-183.98625109-154.85914112 30.58346667-147.57736334 282.04752555-113.1102811 280.10571776 61.16693334-0.97090333 117.9648 0 475.74281443 0 475.74281557s-3.39816334 32.52527445 29.12711111 39.3216l376.71063779 77.67229553s31.0689189 6.79632555 31.06891776-24.27259221v-335.44723001s3.39816334-30.58346667-34.4670811-38.83614776c-37.86524445-5.82542222-204.37523001-19.41807445-190.78257778-145.63555556 15.04900779-149.0337189 282.04752555-128.64474112 282.04752555 45.14702222V839.83928889s1.94180779 48.05973333-53.39970332 35.92343666L347.97037 783.04142222s-40.77795555-8.73813333-40.77795556-48.05973333v-550.5024s0-41.26340779-39.3216-46.60337778z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="sousuo2" unicode="&#59224;" d="M474.49999971 83.99249970999995c-186.11250029 0-337.5 151.38749971-337.5 337.5s151.38749971 337.5 337.5 337.5 337.5-151.38749971 337.5-337.5-151.38749971-337.5-337.5-337.5m476.55-86.02499971L791.45 157.60500000000002c59.625 71.51249971 95.55000029 163.50000029 95.55000029 263.88749971 0 227.8125-184.68749971 412.49999971-412.50000058 412.50000058s-412.49999971-184.68749971-412.49999971-412.50000058 184.68749971-412.49999971 412.49999971-412.49999971c100.38750029 0 192.375 35.92500029 263.88750058 95.55000029l159.6375-159.60000058a37.5975 37.5975 0 0 1 53.02499942 0 37.5975 37.5975 0 0 1 0 53.02500029"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yuan-copy-copy" unicode="&#59093;" d="M506.19315078 376.76171395999995m-442.76171396 0a439.04882813 439.04882813 0 1 1 885.52342704 0 439.04882813 439.04882813 0 1 1-885.52342704 0Z"  horiz-adv-x="1025" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="sousuo1" unicode="&#58920;" d="M691.1 645c-121.5 121.6-318.6 121.6-440.2 0s-121.6-318.7 0-440.2c121.6-121.6 318.6-121.6 440.2 0 121.6 121.6 121.6 318.7 0 440.2zM183.2 137.1c-158.9 159-158.9 416.7 0 575.7 159 158.9 416.7 158.9 575.7 0 158.9-159 158.9-416.7 0-575.7-159-158.9-416.7-158.9-575.7 0z m760.5-184.8c-21.7-21.7-56.9-21.7-78.7 0L786.4 31c-21.7 21.7-21.7 56.9 0 78.6 21.7 21.7 56.9 21.7 78.6 0l78.7-78.6c21.7-21.8 21.7-57 0-78.7z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wt-more" unicode="&#59161;" d="M512 640a85.333333 85.333333 0 1 0 0 170.666667 85.333333 85.333333 0 0 0 0-170.666667z m0-341.333333a85.333333 85.333333 0 1 0 0 170.666666 85.333333 85.333333 0 0 0 0-170.666666z m0-341.333334a85.333333 85.333333 0 1 0 0 170.666667 85.333333 85.333333 0 0 0 0-170.666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="arrow-down" unicode="&#59143;" d="M512 810.667q17.664 0 30.165-12.501t12.501-30.165v-665.003l225.664 226.005q12.331 12.331 30.336 12.331 18.347 0 30.507-12.16t12.16-30.507q0-18.005-12.331-30.336l-298.667-298.667q-12.331-12.331-30.336-12.331t-30.336 12.331l-298.667 298.667q-12.331 12.331-12.331 30.336 0 18.347 12.16 30.507t30.507 12.16q18.005 0 30.336-12.331l225.664-226.005v665.003q0 17.664 12.501 30.165t30.165 12.501z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="arrow-left" unicode="&#59144;" d="M426.667 725.333q17.664 0 30.165-12.501t12.501-30.165q0-18.005-12.672-30.336l-225.664-225.664h665.003q17.664 0 30.165-12.501t12.501-30.165-12.501-30.165-30.165-12.501h-665.003l225.664-225.664q12.672-12.331 12.672-30.336 0-17.664-12.501-30.165t-30.165-12.501q-18.005 0-30.336 12.331l-298.667 298.667q-12.331 13.013-12.331 30.336t12.331 30.336l298.667 298.667q12.672 12.331 30.336 12.331z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="arrow-right" unicode="&#59145;" d="M597.333 725.333q18.005 0 30.336-12.331l298.667-298.667q12.331-12.331 12.331-30.336t-12.331-30.336l-298.667-298.667q-12.331-12.331-30.336-12.331-18.347 0-30.507 12.16t-12.16 30.507q0 18.005 12.331 30.336l226.005 225.664h-665.003q-17.664 0-30.165 12.501t-12.501 30.165 12.501 30.165 30.165 12.501h665.003l-226.005 225.664q-12.331 12.331-12.331 30.336 0 18.347 12.16 30.507t30.507 12.16z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="arrow-up" unicode="&#59151;" d="M512 810.667q18.005 0 30.336-12.331l298.667-298.667q12.331-12.331 12.331-30.336 0-18.347-12.16-30.507t-30.507-12.16q-18.005 0-30.336 12.331l-225.664 226.005v-665.003q0-17.664-12.501-30.165t-30.165-12.501-30.165 12.501-12.501 30.165v665.003l-225.664-226.005q-12.331-12.331-30.336-12.331-18.347 0-30.507 12.16t-12.16 30.507q0 18.005 12.331 30.336l298.667 298.667q12.331 12.331 30.336 12.331z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chevron-thin-left" unicode="&#59157;" d="M732.553 4.198c13.722-13.926 13.722-36.301 0-50.125s-35.891-13.875-49.613 0l-400.896 404.89c-6.356 6.44-10.282 15.293-10.282 25.062s3.926 18.622 10.286 25.066l400.892 404.886c13.722 13.824 35.891 13.824 49.613 0s13.722-36.301 0-50.125l-365.619-379.853 365.619-379.802z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chevron-thin-down" unicode="&#59158;" d="M891.802 604.553c13.926 13.722 36.301 13.722 50.125 0s13.875-35.891 0-49.613l-404.89-400.896c-6.44-6.356-15.293-10.282-25.062-10.282s-18.622 3.926-25.066 10.286l-404.886 400.892c-13.824 13.722-13.824 35.891 0 49.613s36.301 13.722 50.125 0l379.853-365.619 379.802 365.619z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chevron-thin-right" unicode="&#59159;" d="M657.067 384l-365.619 379.904c-6.356 6.44-10.282 15.293-10.282 25.062s3.926 18.622 10.286 25.066c6.315 6.409 15.095 10.383 24.803 10.383 9.708 0 18.488-3.973 24.802-10.382l400.9-404.894c6.356-6.44 10.282-15.293 10.282-25.062s-3.926-18.622-10.286-25.066l-400.892-404.886c-13.722-13.875-35.891-13.824-49.613 0s-13.722 36.198 0 50.125l365.619 379.75z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chevron-thin-up" unicode="&#59160;" d="M132.198 163.447c-13.926-13.722-36.301-13.722-50.125 0s-13.875 35.891 0 49.613l404.89 400.896c6.44 6.356 15.293 10.282 25.062 10.282s18.622-3.926 25.066-10.286l404.886-400.892c13.824-13.722 13.824-35.891 0-49.613s-36.301-13.722-50.074 0l-379.904 365.619-379.802-365.619z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xuanzhong1" unicode="&#58937;" d="M1007.38844445 729.42933333c-19.11466667 19.11466667-50.06222222 19.11466667-69.06311112 0L344.17777778 135.28177777999997 85.67466667 393.67111111c-19.11466667 19.11466667-50.06222222 19.11466667-69.06311112 0-19.11466667-19.11466667-19.11466667-50.06222222 0-69.06311111l276.48-276.48c7.85066667-7.85066667 17.74933333-11.60533333 27.87555556-12.97066667 19.22844445-15.13244445 46.76266667-14.56355555 64.39822222 3.18577778l622.02311112 622.02311111c19.11466667 19.00088889 19.11466667 49.94844445 0 69.06311111z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shixindiqiu" unicode="&#59128;" d="M976.1160064 384.3747264c0 256.1158464-207.78871893 463.7389184-464.11008 463.7389184-256.32626453 0-464.11946027-207.623072-464.11946027-463.7389184 0-236.5883936 177.30442773-431.7810656 406.38324587-460.1837824 12.91391147-2.72135467 28.64298027-4.30726613 47.37673173-4.30726613 5.25915413 0 10.33070293 0.27671893 15.22871467 0.77813866C770.95313387-76.72704639999995 976.1160064 129.87463679999996 976.1160064 384.3747264zM909.75289387 377.81341440000006c-1.33520107 23.13823253-4.39190187 45.7871968-9.04666667 67.79829973 0.41315947 7.8594176 0.5255104 15.30567573 0.31488 22.2283424 5.75588373-26.9133792 8.79126613-54.83514133 8.79126613-83.4651168C909.81322667 382.18271892999996 909.78828373 379.99710719999996 909.75289387 377.81341440000006zM114.1900992 384.3747264c0 28.10830293 2.926656 55.5322688 8.480224 81.9917696 17.179392-18.3723968 57.67119253-17.93898453 67.54609707 9.5120576 17.6688736-10.52960747 41.4129888-12.4470272 41.4129888-33.49345173 0-69.4601056 2.47362987-143.9275904 65.58881066-145.07795734 1.77714133-0.02323733 35.19832213-12.66512 51.10391147-53.91309973 5.49963093-14.25657387 27.2529888 0 51.1086016 0 11.909152 0 0-20.0621312 0-63.44562347 0-43.2152864 93.17608-109.75641173 93.17608-109.75641173-0.43170773-28.60609813 0.74274987-51.736656 3.12342933-70.2160736-21.03192747 0.38715093-38.75644267-2.40007893-52.68129493-7.13990613C256.20986347 25.462229330000014 114.1900992 188.33889173 114.1900992 384.3747264zM609.94059413-0.9776586699999825c-2.06217493 10.0961952-11.08475093 15.62503253-27.54633706 11.2985792 13.1347744 55.9315712 19.5202048 87.2626496 46.94033493 111.0517472 39.67294187 34.38841813 4.72426347 72.63001067-25.46561387 68.12319894-23.79506667-3.59223147-8.7577952 29.46013227-29.99587626 31.28822613-21.23808107 1.77714133-48.97372907 44.01836907-79.53967254 58.5535808-16.20256107 7.69419627-32.12584533 28.3136032-57.11413013 29.2373504-22.14797013 0.85872427-54.5151456-18.72629013-54.5151456-3.62932587 0 48.62729707-4.92402133 83.32675733-5.9360288 97.18424214-0.81715307 11.13314453-7.27783893 3.7499904 22.66239467 3.03047893 16.2946592-0.43639787 8.33525547 32.72746453 24.46362666 34.0225856 15.8405664 1.25333653 53.58670827-14.82770667 63.20344107-8.41839893 8.9341024 5.96821973 65.6723808-148.92558827 65.6723808-25.6033344 0 14.63263893-7.57864853 40.07330987 0 53.931648 29.97263893 54.76265707 58.03233387 99.39394453 55.51244267 105.9228512-1.4300704 3.6758016-30.66443627 6.7109696-54.05572374-1.13736214-7.89416747-2.63586667 2.51072427-14.99932373-8.82729493-17.63988053-42.48063787-9.80647147-80.01337707 11.453568-66.87007573 31.4368192 13.45882133 20.4799808 62.22383893 8.9336768 66.4987008 50.01920747 2.45955947 23.53369707 4.49764373 50.78967147 5.8616256 71.0468704 57.172544-8.94007147 50.87921067 74.19438933-34.13152534 83.0928896 171.9821696-2.01207573 317.71888-113.07384213 371.19792747-267.21189654-2.70493973 2.46680747-5.8516064 3.9663776-9.48583573 4.33220907-25.7024672 64.196688-88.08875627 17.73730773-66.92593067-38.88584853-113.39256-87.16053227-84.36711893-147.95067627-47.11216427-182.76163414 19.60377493-18.29906027 38.29403627-45.8198144 50.46327894-65.58476053-13.24541973-38.6193632 48.80296533-23.1548608 79.40408426 42.383424C855.37525547 139.12106132999997 746.78946347 33.63929813000004 609.94059413-0.9776586699999825z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="diqiu3" unicode="&#59135;" d="M504.616 460.618c0.048 0.073 0.117 0.138 0.163 0.213-0.183 0.87-0.331 1.63-0.398 2.172 0.082-0.792 0.168-1.588 0.235-2.385zM674.03 275.633c0.006 0 0.006 0.008 0.006 0.012-0.023 0.01-0.1 0.01-0.117 0.036 0.025-0.025 0.085-0.025 0.11-0.048z m4.337-0.542c-1.048 0.168-3.405-0.138-4.336 0.542-0.576-1.984 0.291-2.733 4.336-0.542zM513.35 826.798c-243.616 0-441.098-197.481-441.098-441.095 0-243.61 197.482-441.1 441.098-441.1 243.607 0 441.097 197.49 441.097 441.1 0 243.614-197.49 441.095-441.097 441.095zM795.096 654.49c-15.198-0.461-25.778-0.49-37.988-8.916-4.92-3.401-8.26-7.906-14.504-9.657-5.598-1.576-11.641-0.194-17.195-2.078-20.042-6.802-16.867-49.728-43.273-43.244-12.405 3.043-21.147 17.702-27.39 27.274-5.5 8.422-15.515 15.387-8.75 25.927-3.086-0.792-6.376 0.11-9.414-0.467 4.23 9.289 18.418 8.477 20.778 13.225 5.879 11.898-16.184 13.141-22.432 14.79 7.53 8.027 11.342-2.7 18.775-0.878 7.144 1.758-3.77 11.166-8.054 12.223-1.538 0.38-26.69-6.951-12.132 6.077a289598.807 289598.807 0 0 0-53.911 34.374c-3.026-12.746 23.92-19.99 32.72-24.481-1.367-5.264-9.554-12.928-15.822-10.685-5.905 2.118-3.508 11.902-12.424 10.92-6.366-14.802 13.46-10.475 15.302-19.546 2.093-10.334-7.495-5.954-11.182-5.776-0.879 0.046-7.752 7.16-8.122 1.774-0.446-6.395 10.96-3.901 11.765-10.36-13.285-0.537-20.071 4.26-30.887 11.445-12.623 8.378-19.101 7.623-34.568 7.623 4.626 1.9 10.998 3.308 14.954 6.368 2.16 1.672 10.638 9.912 11.197 11.751 2.396 7.938-0.13 7.336-7.725 12.54-6.751 4.618-14.94 12.91-23.12 14.543-29.64 5.917-9.141-26.76-31.64-31.266 0.385-0.02 0.801-0.038 1.132-0.038h-1.289c0.058 0.004 0.104 0.026 0.157 0.038-5.205 0.187-14.96 1.452-18.314-1.297-2.367-1.934-2.566-9.699-5.213-12.51-4.71-5.02-11.73-6.023-17.35-9.643-5.486-3.537-17.58-12.612-20.802-18.767-11.873-22.685 26.753-29.726 41.397-36.356 6.616-2.998 25.953-7.1 29.554-12.106 4.83-6.723-4.163-13.026 5.923-17.752 3.221-1.505 9.864-1.813 12.639 1.305 4.508 5.081-1.833 6.228-2.913 12.097-2.091 11.298 1.355 6.808 7.038 11.007 11.58 8.55 8.972 9.073 4.805 22.697-1.934 6.341-9.233 24.043-2.813 28.725 8.372 6.107 26.226-3.31 32.645-4.098 7.47-0.914 11.712-11.266 15.783-15.5 2.705-2.811 7.541-8.776 12.265-8.13 7.499 1.026 4.361 7.582 8.71 10.606 11.667 8.091 14.74-2.901 19.39-13.895 4.375-10.326 8.514-14.159 16.3-20.782 3.616-3.083 19.462-14.087 17.967-20.87-1.013-4.57-19.115-11.499-23.956-13.033-17.694-5.604-50.887 9.175-54.451-18.884 6.865 2.556 26.391 18.508 32.248 10.947 2.67-3.43-2.118-8.426-0.99-11.833 3.34-10.213 11.217-6.655 19.478-5.004-0.563-0.351-1.14-0.658-1.75-0.931 11.287 5.8 10.113 4.592 15.292 14 1.691 3.073 4.207 10.511 6.589 12.711 8.204 7.547 9.468 2.35 14.55-3.472 1.331-1.534 13.897-19.627 9.424-18.725-14.617 2.931-28.65 2.538-40.772-5.454-6.984-4.613-13.59-10.837-21.93-13.9-2-0.731-16.805-2.134-15.055 0.39 2.555 3.682 11.348 6.118 14.818 10.092-9.617 3.96-17.637-4.784-25.193-9.897-8.018-3.793-9.882-10.863-16.71-17.061-2.98-2.702-8.615-3.162-11.542-6.718-2.839-3.451-3.192-8.879-5.88-12.154-1.888-2.294-6.725-0.909-8.695-4.366-2.566-4.516 2.348-8.71 1.271-11.963-1.973-5.913-13.219-10.93-17.543-15.186a74.812 74.812 0 0 1 1.716 1.706c-4.334-4.548-9.818-7.892-13.202-13.154 1.553-7.428 6.452-25.147 5.086-29.223-4.508-13.411-13.263 7.294-16.814 12.643-12.2 18.382-36.583 6.082-53.24 4.556-21.304-1.949-42.17-29.596-29.03-52.038 6.309-10.762 16.92-14.929 29.092-12.438 10.832 2.218 14.085 17.373 24.286 17.65 18.746 0.5 0.412-18.37-1.21-25.295-1.5-6.415 2.338-7.008 8.941-8.598 4.876-1.165 11.781 2.087 16.008-0.697 2.663-1.758 2.535-11.383 6.197-8.347-7.21-5.977-5.525-20.148 1.867-25.27 8.196-5.685 17.846-0.42 26.428-2.603 16.2-4.134 8.467 1.235 22.694 9.824 9.603 5.787 11.178-1.09 17.74-1.117 4.467-0.019 7.304 6.421 14.772 4.547 6.088-1.533 8.494-6.233 15.762-7.314 2.98-0.44 6.057 1.121 8.898 0.808 13.444-1.494 23.736-10.083 34.33-17.85 8.73-6.392 14.512-5.097 24.71-8.012 7.45-2.123 21.196-12.905 20.492-22.371-0.125-1.693-6.638-10.206-7.751-14.04 1.906-1.32 15.165 1.643 19.045 1.922-1.275-1.484-10.303-7.828-10.303-4.46 0-1.726 6.387-5.272 7.944-6.373 4.71 15.29 12.445 5.451 21.754 1.664 7.915-3.224 17.658-3.397 26.1-5.408 7.166-1.706 22.97-6.545 28.28-12.4 6.392-7.05 1.974-18.502-2.756-25.516-6.187-9.192-15.517-12.73-19.376-23.545-3.05-8.573-0.76-17.235-2.503-26.738-2.356-12.865-4.245-8.355-12.53-16.205-6.971-6.611-0.117-5.462-9.608-9.676-9.533-4.236-17.928-2.976-24.529-13.436 0.264 0.658 0.48 1.317 0.664 2.005-2.786-3.897-4.178-11.88-5.498-14.498-3.328-6.682-7.918-10.897-13.181-16.462-2.017-2.131-20.561-27.465-21.632-25.43-1.377 2.648-15.998-2.658-16.695 1.118 0.581-3.174-0.139-2.11 3.492-3.939-3.362-20.82-12.168-23.925-32.613-24.135 1.758-10.007-7.409-8.01-11.67-13.39-2.49-3.142-3.679-11.976-5.405-16.044-1.078-2.555-9.06-12.794-9.06-14.822-0.009-1.87 2.684-4.607 5.207-7.233-14.414-2.85-29.11-4.838-44.038-6.05 2.795 3.52 3.467 6.613-5.433 7.037 2.382 6.472 7.974 10.163 10.344 16.431 1.124 2.958 0.194 4.127 1.144 7.058 3.257 10.115 1.845 6.3 0.009 14.156-4.301 18.416 1.53 23.453 6.55 40.314 5.153 17.327 4.674 39.789 7.976 58.453 1.566 8.933 4.132 27.517 1.03 35.96-3.495 9.508-18.87 16.996-25.91 23.39-9.969 9.083-15.268 18.897-22.67 30.123-3.757 5.7-8.04 11.296-10.972 17.495-6.27 13.255 0.005 5.366 1.06 13.19 1.01 7.559-0.9 14.315 2.1 22.249 3.32 8.772 11.608 14.238 14.33 23.083 2.45 7.874 0.586 17.77-7.502 20.397-4.508 1.472-9.482-1.919-14.01-1.174-6.317 1.022-13.466 5.738-18.423 9.507-6.919 5.272-9.512 13.839-16.88 18.837-6.169 4.164-10.556 1.672-17.154 3.62-6.882 2.028-11.13 10.52-16.681 13.178-8.33 3.984-13.025-1.737-21.819-0.58-7.478 0.979-18.884 9.267-25.872 12.399-14.209 6.36-22.86 13.38-28.543 27.8-4.866 12.366-11.96 18.134-20.312 28.434-8.463 10.435-11.114 19.328-24.158 22.109-1.532 0.332 3.192-10.955 3.679-11.86 4.661-8.632 11.661-16.515 17.291-24.552 8.284-11.837 4.754-14.058-3.673-2.612-9.636 13.095-20.818 26.115-29.177 39.983-3.16 5.241-2.553 8.63-7.765 13.606-5.036 4.808-11.626 7.15-16.697 11.723-18.246 16.408-21.563 38.313-19.483 61.705 0.676 7.625 3.43 13.723 2.216 21.052-1.002 6.086-4.595 11.118-9.085 15.601-1.446 2.304-5.077 7.978-5.287 8.339-4.142 6.88-7.364 13.647-13.944 19.292-3.776 3.252-13.544 10.853-22.741 17.22 41.322 51.538 95.392 92.38 157.421 117.739 0.494-3.118 1.833-6.231 3.84-9.211 5.1-7.563 9.96-6.965 19.916-9.058-1.067-11.555-14.573-11.647-23.715-10.394-10.913 1.498-22.394 5.123-31.847-4.441 5.221-3.14 19.552-15.366 17.647-2.59 10.454 0.522 20.56 0.835 30.787-0.416 4.098-0.502 17.828-5.11 21.549-3.01 1.562 0.884 3.226 8.588 4.878 10.958-2.915-0.017-6.04 1.455-8.944 1.176 6.772 8.672 13.52 1.87 22.139-2.12-9.49-5.766-3.862-19.584 5.415-8.356 7.621 9.233-1.864 15.927-11.54 21.307 9.757 12.204 15.774 13.305 24.954-0.469 1.513 8.495 8.369 5.095 15.535 4.467v2.125c-3.154-0.076-6.522 1.738-9.644 1.41 7.3 11.648 2.64 14.308 13.076 18.11 8.311 3.026 32.02 0.21 34.941 8.022-16.593-3.225-36.638-3.998-51.608-11.542-6.455-3.253-14.144-13.522-20.59-6.848-6.607 6.848 4.726 17.859 10.524 21.215h-1.388c26.254 5.584 53.443 8.582 81.339 8.582 18.024 0 35.738-1.334 53.126-3.71-6.017-3.16-1.568-5.292-5.95-8.522-8.37-6.155-23.226-11.292-33.185-15.182 12.66 0.034 43.306-11.871 49.204 5.887-4.088 0.628-8.165 1.257-12.248 1.885 7.629 5.059 16.138 9.153 25.072 12.154 80.62-15.971 152.332-56.864 206.883-114.246-0.394 0.009-0.781 0.019-1.158 0.009z m71.39-154.868c0.725 1.55 2.421 2.061 3.121 3.34 1.474 2.69 1.145 4.513 2.96 6.821 1.942 2.495 4.563 3.106 6.73 5.055a7.898 7.898 0 0 1 1.763 2.251 386.672 386.672 0 0 0 15.464-56.207c-0.114-0.138-0.178-0.347-0.32-0.463-0.948-0.75-7.13-1.668-8.4-1.712-4.476-0.172-7.802 2.799-11.016 5.594-3.27 2.84-7.12 6.64-9.444 10.318-2.482 3.928-0.95 7.964-0.772 12.45 0.148 3.773-1.688 9.153-0.087 12.553z m5.047-202.244c-7.577 6.582-16.516 15.406-21.903 23.932-5.754 9.09-2.208 18.446-1.787 28.857 0.35 8.756-3.928 21.216-0.207 29.1 1.709 3.6 5.624 4.79 7.236 7.74 3.426 6.245 2.667 10.466 6.871 15.835 4.51 5.766 10.574 7.185 15.599 11.707 5.263 4.74 5.117 8.48 8.449 14.554 2.438 4.443 8.168 11.85 13.593 15.724a391.752 391.752 0 0 0 4.477-59.123c0-34.76-4.625-68.45-13.19-100.55-7.303 1.883-13.31 7.147-19.138 12.224z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fanhui1" unicode="&#59130;" d="M622.650611 611.098251 447.745069 611.098251 447.745069 753.176131 63.980685 561.294962l383.76336-191.882192L447.744046 511.165238l189.391465 0c149.914358 0 224.855164-62.789045 224.855164-188.368158 0-129.928165-77.435627-194.876386-232.338602-194.876386L187.952184 127.920694l0-99.93199L634.146433 27.988704c211.184817 0 316.777737 95.104031 316.777737 285.311071C950.924169 511.821177 841.510224 611.098251 622.650611 611.098251z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shachu-xue" unicode="&#59134;" d="M568.96 383.936l326.336 326.336c7.108 7.108 11.505 16.929 11.505 27.776 0 21.694-17.587 39.281-39.281 39.281-10.847 0-20.668-4.397-27.776-11.505l-326.336-326.336-326.4 326.336c-7.108 7.108-16.929 11.505-27.776 11.505-21.694 0-39.281-17.587-39.281-39.281 0-10.847 4.397-20.668 11.505-27.776l326.4-326.336-326.272-326.336c-7.108-7.108-11.505-16.929-11.505-27.776 0-21.694 17.587-39.281 39.281-39.281 10.847 0 20.668 4.397 27.776 11.505l326.336 326.336 326.336-326.336c15.36-15.232 40.192-15.232 55.552 0 7.090 7.117 11.473 16.935 11.473 27.776 0 10.841-4.383 20.659-11.474 27.777l-326.399 326.335z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zuzhiqunti" unicode="&#59129;" d="M597.56088889 262.15158518c-3.64088889 0-28.76302222 25.60758518-10.80130371 73.06050371 39.56432592 40.17114075 71.84687408 105.94986667 71.84687407 171.84995556 0 98.66808889-68.20598518 149.88325925-140.05285925 149.88325925-75.3664 0-140.05285925-51.21517037-140.05285925-149.88325925 0-65.77872592 28.76302222-131.55745185 68.20598517-171.84995556 14.32082963-40.17114075-10.8013037-69.41961482-17.96171851-73.06050371-79.00728889-29.24847408-168.81588148-80.46364445-168.81588149-135.19834073v-18.32580742c0-69.41961482 132.89244445-87.74542222 258.62447408-87.74542221 122.09114075 0 254.98358518 14.56355555 254.98358518 87.74542221v18.32580742c-3.51952592 54.7346963-96.96900741 109.59075555-175.97629629 135.19834073z m0 0M834.58275555 393.70903703c-3.64088889 0-25.12213333 7.28177778-10.8013037 51.21517038 35.92343703 36.53025185 61.04557037 98.66808889 61.04557037 160.80592592 0 91.38631111-57.40468148 142.60148148-129.25155555 142.60148149-50.24426667 0-96.96900741-25.60758518-114.93072592-76.7013926 43.08385185-36.53025185 71.84687408-91.38631111 71.84687407-164.44681481 0-76.82275555-35.92343703-149.88325925-75.3664-197.33617778 61.04557037-21.9666963 154.49505185-69.41961482 179.61718518-142.60148148 93.32811852 3.64088889 179.61718518 25.60758518 179.61718518 80.46364444v18.32580741c3.51952592 54.61333333-82.76954075 102.06625185-161.77682963 127.67383703z m-646.5005037 0c3.64088889 0 25.12213333 7.28177778 10.8013037 51.21517038-35.92343703 36.53025185-61.04557037 98.66808889-61.04557037 160.80592592 3.64088889 91.38631111 61.04557037 142.60148148 129.25155557 142.60148149 50.24426667 0 96.96900741-25.60758518 114.93072592-76.7013926-43.08385185-36.53025185-71.84687408-91.38631111-71.84687408-164.44681481 0-76.82275555 35.92343703-149.88325925 75.3664-197.33617778-61.04557037-21.9666963-154.49505185-69.41961482-179.61718518-142.60148148-93.32811852 3.64088889-179.61718518 25.60758518-179.61718519 80.46364444v18.32580741c0.24272592 54.61333333 86.41042963 102.06625185 161.77682963 127.67383703z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="diqiu2" unicode="&#59127;" d="M512 832C264.6 832 64 631.4 64 384s200.6-448 448-448 448 200.6 448 448S759.4 832 512 832z m0-224c-29.5 0-58.3 2.6-86.2 7.5C452 720.7 491.4 776 512 776c20.6 0 60-55.3 86.2-160.5-27.9-4.8-56.7-7.5-86.2-7.5z m140.7 20.4c-13.6 55.7-31.8 102.6-53.1 137.4 63.6-14.6 121.3-44.7 169-86.1-35.3-21.8-74.3-39.1-115.9-51.3z m-281.4 0c-41.6 12.2-80.5 29.6-115.8 51.3 47.7 41.4 105.3 71.4 168.9 86-21.3-34.7-39.4-81.6-53.1-137.3zM679.5 412c-1.3 57.5-6.7 111.9-15.4 161.4 52.5 15 101.3 37.3 144.8 65.8 53.4-62 87.5-140.7 93.7-227.2H679.5z m-558.1 0c6.2 86.4 40.2 165.1 93.5 227.1 43.5-28.5 92.4-50.6 145-65.6-8.7-49.6-14.1-104-15.4-161.5H121.4z m279.1 0c1.3 55.7 6.4 105.4 13.9 148.7 31.6-5.6 64.1-8.7 97.6-8.7 33.4 0 66 3 97.6 8.6 7.5-43.3 12.5-93 13.9-148.6h-223z m408.4-283.2c-43.5 28.5-92.3 50.8-144.8 65.8 8.7 49.6 14.1 104 15.4 161.4h223.1c-6.2-86.5-40.3-165.2-93.7-227.2z m-394.5 78.5c-7.5 43.3-12.5 93-13.9 148.7h222.9c-1.3-55.6-6.3-105.3-13.9-148.6C578 213 545.4 216 512 216c-33.4 0-66-3.1-97.6-8.7zM215 128.9c-53.3 62-87.4 140.7-93.5 227.1h223.1c1.3-57.5 6.7-111.9 15.4-161.5-52.6-15-101.5-37.1-145-65.6zM512-8c-20.6 0-60 55.3-86.2 160.5 27.9 4.8 56.7 7.5 86.2 7.5s58.3-2.7 86.2-7.5C572 47.3 532.6-8 512-8z m87.6 10.2c21.3 34.8 39.5 81.7 53.1 137.4 41.7-12.2 80.6-29.5 115.9-51.2-47.7-41.5-105.4-71.6-169-86.2z m-175.2 0c-63.6 14.6-121.2 44.6-168.9 86 35.2 21.8 74.1 39.1 115.8 51.3 13.7-55.6 31.8-102.5 53.1-137.3z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fangdajing" unicode="&#59113;" d="M463.980845 807.427732c-214.289528 0-388.004965-173.71646-388.004965-388.004965s173.71646-388.004965 388.004965-388.004965c214.290551 0 388.004965 173.71646 388.004965 388.004965S678.270373 807.427732 463.980845 807.427732zM463.980845 138.439258c-155.181315 0-280.982486 125.800147-280.982486 280.983509 0 155.181315 125.800147 280.981463 280.982486 280.981463 155.182338 0 280.982486-125.800147 280.982486-280.981463C744.962308 264.239406 619.163183 138.439258 463.980845 138.439258zM937.049161-31.938154c-19.644409-19.642362-51.492768-19.642362-71.136154 0L714.05846 119.918439c-19.644409 19.643386-19.644409 51.491745 0 71.136154l0 0c19.641339 19.641339 51.488675 19.641339 71.134107-0.001023l151.85557-151.856593C956.692546 19.552567 956.692546-12.295791 937.049161-31.938154L937.049161-31.938154z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="liucheng" unicode="&#59062;" d="M986.94680576-39.891930460000026L848.42713088-39.891930460000026c-21.85498283 0-39.57438919 17.68331378-39.57438919 39.49405298L808.85274169 118.09825108999996c0 21.81190315 17.72057031 39.49521693 39.57438919 39.49521693l39.57788217 0L888.00501191 335.32543658c0 21.81423218-17.71591339 39.4987099-39.57788217 39.4987099L531.81339079 374.82414535l0-217.23067847 39.57788217 0c21.85963975 0 39.57671709-17.68331378 39.57671709-39.49521693l0-118.49496462c0-21.8107392-17.71707733-39.49405298-39.57671709-39.49405298L432.87276203-39.89076651000005c-21.85498283 0-39.56973113 17.68331378-39.56973113 39.49405298L393.30302976 118.09825108999996c0 21.81190315 17.71474944 39.49521693 39.56973113 39.49521693l39.57788217 0L472.45064306 374.82414535 175.62759168 374.82414535c-21.85847581 0-39.57671709-17.68331378-39.57671709-39.49870991l0-177.73196856 39.57671709 0c21.85498283 0 39.57904611-17.68331378 39.57904611-39.49521693l0-118.49496462c0-21.8107392-17.72406329-39.49405298-39.57904611-39.49405298L37.10908075-39.89076651000005c-21.85963975 0-39.57671709 17.68331378-39.57671709 39.49405298L-2.46763747 118.09825108999996c0 21.81190315 17.71707733 39.49521693 39.57671708 39.49521693l39.57904612 0L76.68812686 355.07653746000005c0 43.62613533 35.43531975 78.99392683 79.15227023 78.99392682l316.61024597 0L472.45064306 651.30114162l-39.57788217 0c-21.85498283 0-39.56973113 17.68331378-39.56973113 39.49638086L393.30302976 809.28550229c0 21.81539613 17.71474944 39.4987099 39.56973113 39.4987099l138.52549689 0c21.85498283 0 39.57089621-17.68331378 39.57089621-39.4987099l0-118.48797867c0-21.81423218-17.71707733-39.49638087-39.57089621-39.49638087l-39.58370304 0 0-217.23067847 336.40675555 0c43.71462258 0 79.14994233-35.36662642 79.14994233-78.99392682l0-197.48306944 39.57555314 0c21.8608037 0 39.57904611-17.68331378 39.57904611-39.49521693l0-118.49496462C1026.52585187-22.208616679999977 1008.8006235-39.891930460000026 986.94680576-39.891930460000026L986.94680576-39.891930460000026zM986.94680576-39.891930460000026"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="liucheng1" unicode="&#59063;" d="M510.08765547 626.01573547c65.72852373 0 119.01206187 53.28353813 119.01206186 119.01206186 0 65.72852373-53.28353813 119.01206187-119.01206186 119.01206187-65.72852373 0-119.0109696-53.28353813-119.0109696-119.01206187 0-65.72852373 53.28353813-119.01206187 119.0109696-119.01206186z m0 178.36683093c32.72829013 0 59.35586133-26.62647893 59.35586026-59.35586133 0-32.72829013-26.62647893-59.35586133-59.35586026-59.35586027-32.72829013 0-59.35476907 26.62647893-59.35476907 59.35586027s26.62647893 59.35586133 59.35476907 59.35586134zM152.21051947 310.06602133c-65.72852373 0-119.01206187-53.28353813-119.01206187-119.01206187 0-65.72852373 53.28353813-119.01206187 119.01206187-119.01206079S271.22258133 125.32543680000003 271.22258133 191.05395946c-0.00109227 65.72852373-53.28353813 119.01206187-119.01206186 119.01206187z m0-178.36682987c-32.72829013 0-59.35586133 26.62647893-59.35586134 59.35586027 0 32.72829013 26.62647893 59.35586133 59.35586134 59.35586133s59.35586133-26.62647893 59.35586133-59.35586133c-0.00109227-32.72938133-26.6275712-59.35586133-59.35586133-59.35586027zM868.21380053 310.06602133c-65.72852373 0-119.01206187-53.28353813-119.01206186-119.01206187 0-65.72852373 53.28353813-119.01206187 119.01206186-119.01206079s119.01206187 53.28353813 119.0120608 119.01206079c0 65.72852373-53.28353813 119.01206187-119.0120608 119.01206187z m0-178.36682987c-32.72938133 0-59.35586133 26.62647893-59.35586133 59.35586027 0 32.72829013 26.62647893 59.35586133 59.35586133 59.35586133 32.72829013 0 59.35586133-26.62647893 59.35586027-59.35586133s-26.6275712-59.35586133-59.35586027-59.35586027zM509.25325653-6.79017280000005c-85.02780587 0-167.89971947 29.75547307-233.33882346 83.7609184l-37.9847808-45.9945664c76.114816-62.83106453 172.4736192-97.42255253 271.32251306-97.42255254 99.69421227 0 196.69410453 35.12991467 273.1136288 98.9078688l-38.217408 45.79033601c-65.72852373-54.8354752-149.1399552-85.04200427-234.8951296-85.04200427zM876.13403093 360.09060053999997h59.65620054c0 165.14751573-96.75197547 316.96759253-246.504624 386.77527572l-25.19686187-54.06332906c128.80859627-60.0646624 212.04528533-190.65017813 212.04528533-332.71194666zM354.41776853 692.8025471999999l-25.19686186 54.06332906c-149.73845013-69.80768213-246.49042667-221.62885227-246.49042667-386.77527572h59.65620053c0 142.06176853 83.23668907 272.6625728 212.031088 332.71194666z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="liucheng2" unicode="&#59106;" d="M578.667 817.333H445.333c-55.223 0-100-44.777-100-100s44.777-100 100-100h133.334c55.222 0 100 44.777 100 100s-44.778 100-100 100z m0-133.333H445.333C427 684 412 699 412 717.333s15 33.333 33.333 33.333h133.334C597 750.666 612 735.667 612 717.333S597 684 578.667 684z m0-200H445.333c-55.223 0-100-44.777-100-100s44.777-100 100-100h133.334c55.222 0 100 44.777 100 100 0 55.222-44.778 100-100 100z m0-133.334H445.333C427 350.666 412 365.667 412 384c0 18.333 15 33.333 33.333 33.333h133.334C597 417.333 612 402.333 612 384s-15-33.334-33.333-33.334z m0-200H445.333c-55.223 0-100-44.776-100-99.999 0-55.224 44.777-100 100-100h133.334c55.222 0 100 44.776 100 100 0 55.223-44.778 99.999-100 99.999z m0-133.333H445.333c-18.333 0-33.333 15-33.333 33.334 0 18.333 15 33.332 33.333 33.332h133.334C597 83.999 612 69 612 50.667c0-18.334-15-33.334-33.333-33.334zM212 83.999c-35.666 0-69.11 13.89-94.333 39.001-25.111 25.223-39 58.666-39 94.333 0 35.666 13.89 69.111 39 94.334 25.223 25.222 58.667 38.999 94.333 38.999h66.667v66.667H212c-110.444 0-200-89.556-200-200s89.556-200 200-200v-66.666l100 100-100 99.999v-66.667z m599.999 666.667h-66.665V684h66.665c35.668 0 69.111-13.89 94.334-39 25.223-25.223 39-58.667 39-94.333s-13.89-69.111-39-94.333c-25.223-25.111-58.666-39-94.334-39V484l-100-100 100-100v66.666c110.444 0 200.001 89.556 200.001 200s-89.557 200-200.001 200z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="Flow_02" unicode="&#59150;" d="M630.54696963-7.738402279999946c-4.14426969 0-8.1208801-0.70664921-11.82799553-1.99078951l-0.04470889 0.15399748c-33.83720892-9.01381659-69.3808078-13.84362318-106.05827535-13.8436244-106.627072 0-203.75473842 40.61682074-276.79671121 107.20580464l80.40652617 80.7430863H103.00643374V-49.58223534000001l81.76642366 82.10919151c86.14789849-79.57941211 201.31561836-128.20534006 327.84313246-128.20534007 43.56885223 0 85.79022726 5.76869354 125.94505561 16.5783191 16.09645716 3.64750317 28.11694892 18.03011747 28.11694891 35.22939501 0.00124155 19.95508577-16.17593898 36.1322675-36.13102475 36.13226751zM115.87018691 275.44050802000004c0 3.86980613-0.61474831 7.59430804-1.74116408 11.09029925-8.17676652 32.3369758-12.53464474 66.19405426-12.53464596 101.07322975 0 104.39410998 38.92905878 199.68871022 103.05160019 272.18299745l78.99074346-78.66163625V794.34601085H69.5231714l83.84290513-83.49268438c-77.09930777-85.62753658-124.03126484-198.95473857-124.03126606-323.24928945 0-41.69852882 5.28062145-82.16259364 15.20972959-120.7600621l0.09190211 0.02483815c3.84993538-15.81578346 18.09966573-27.55932979 35.1002357-27.5593298 19.95632731-0.00124155 36.13350905 16.17593898 36.13350904 36.13102475zM995.89965232 387.60403702c0 43.54028825-5.76124185 85.73434083-16.55720678 125.86557259l-0.15772331-0.04222461c-4.19146169 15.31653386-18.1990183 26.5769755-34.84564291 26.57697429-19.95508577 0-36.1322675-16.17718173-36.1322675-36.1322663 0-4.19146169 0.72155258-8.21402373 2.03425686-11.95715485a411.49105706 411.49105706 0 0 0 13.39901724-104.31214387c0-105.74034565-39.93873552-202.1439752-105.54412237-274.97606409l-79.44280109 79.1124511v-213.21937108h214.11230758l-83.41071826 83.06298304c78.59084766 85.94670782 126.54490055 200.38045605 126.54490054 326.02124378zM918.00551909 614.44845417V828.56076174l-81.7254406-82.0669669C750.60410838 823.81043818 637.10924709 870.88645795 512.61598986 870.88645795c-41.9556047 0-82.65439278-5.36507187-121.46795286-15.41340456-1.38225133-0.2732208-2.73469591-0.62840893-4.05485188-1.05438565l-0.17759407-0.04595044 0.00372585-0.01241907c-14.42856475-4.74038879-24.85071357-18.31203271-24.85071356-34.32652254 0-19.95508577 16.17718173-36.1322675 36.13226628-36.1322675a36.15213705 36.15213705 0 0 1 9.23984661 1.19720558l0.0211123-0.06954704c33.5664712 8.85857758 68.80580099 13.59896637 105.15540286 13.59896636 104.59281635 0 200.04886574-39.07808885 272.59407201-103.41672307l-80.42515539-80.76171431h213.21937108z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bumen1" unicode="&#59108;" d="M846.014 848.581H177.986c-71.812 0-130.567-58.755-130.567-130.567v-668.03c0-71.81 58.755-130.566 130.567-130.566h668.03c71.81 0 130.566 58.755 130.566 130.567v668.03c-0.001 71.81-58.756 130.566-130.568 130.566z m-118.368-723.56c-44.395 0-80.492 36.128-80.492 80.513 0 37.552 25.89 69.08 60.713 77.942v86.377c0 12.184-9.91 22.103-22.093 22.103H524.075v-108.49c34.831-8.872 60.713-40.39 60.713-77.942 0-44.396-36.108-80.513-80.492-80.513-44.386 0-80.503 36.127-80.503 80.513 0 37.551 25.89 69.08 60.713 77.941V391.956h-146.27c-12.193 0-22.103-9.919-22.103-22.103v-86.377c34.842-8.872 60.723-40.39 60.723-77.942 0-44.395-36.107-80.512-80.502-80.512s-80.494 36.127-80.494 80.512c0 37.552 25.892 69.08 60.714 77.942v86.377c0 34.001 27.662 61.662 61.662 61.662h146.27v53.04c-34.822 8.861-60.713 40.39-60.713 77.94 0 44.385 36.127 80.493 80.503 80.493 44.395 0 80.492-36.108 80.492-80.493 0-37.561-25.89-69.09-60.713-77.94v-53.04h161.698c33.99 0 61.653-27.66 61.653-61.662v-86.377c34.841-8.862 60.703-40.39 60.713-77.942 0-44.395-36.097-80.512-80.493-80.512z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bumen2" unicode="&#59109;" d="M920.146 212.825V361.637c0 58.158-47.894 106.051-106.051 106.051H533.57v92.369c59.868 15.395 104.343 70.132 104.343 135.13 0 76.975-63.287 138.551-138.55 138.551-76.974 0-138.549-63.287-138.549-138.551 0-64.999 44.47-119.736 104.338-135.13v-92.369H212c-58.156 0-106.055-47.894-106.055-106.051v-148.812C46.082 197.432 1.607 142.693 1.607 77.693c0-76.97 63.287-138.55 138.551-138.55 76.973 0 138.549 63.292 138.549 138.55 0 65-44.474 119.738-104.337 135.132V361.637c0 20.526 17.101 37.633 37.63 37.633h253.151v-188.157c-59.868-15.394-104.338-70.124-104.338-135.125 0-76.976 63.288-138.551 138.549-138.551 76.97 0 138.55 63.287 138.55 138.551 0 65.001-44.475 119.731-104.343 135.125V399.27h280.524c20.526 0 37.632-17.106 37.632-37.633v-148.812c-59.869-15.394-104.344-70.132-104.344-135.132 0-76.97 63.293-138.55 138.556-138.55 76.969 0 138.55 63.292 138.55 138.55 0.001 66.712-44.473 119.739-104.341 135.132zM429.233 695.187c0 39.345 32.499 70.132 70.13 70.132 37.632 0 70.132-32.5 70.132-70.132 0-39.343-32.5-70.13-70.132-70.13-37.631 0-70.13 32.5-70.13 70.13zM210.289 79.408c0-39.346-32.5-70.133-70.13-70.133-37.631 0-70.132 30.787-70.132 70.133 0 39.341 32.501 70.129 70.132 70.129 37.63 0 70.13-32.5 70.13-70.129z m360.913 0c0-39.346-32.495-70.133-70.126-70.133s-70.132 32.499-70.132 70.133c0 39.341 32.501 70.129 70.132 70.129s70.126-32.5 70.126-70.129z m314.736-71.841c-39.343 0-70.132 32.495-70.132 70.126 0 39.344 32.5 70.131 70.132 70.131s70.126-32.5 70.126-70.131-30.788-70.126-70.126-70.126z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="liuchengjiankong" unicode="&#59110;" d="M103.05536 335.06645332999994V790.61447111c0 19.80643555-16.31118222 36.11761778-36.11761778 36.11761778s-36.11761778-16.31118222-36.11761777-36.11761778v-752.64455111c0-59.41930667 47.76846222-107.18776889 108.35285333-107.18776889h826.04487111c19.80643555 0 36.11761778 16.31118222 36.11761778 36.11761778 0 19.80643555-16.31118222 36.11761778-36.11761778 36.11761778H139.17297778c-19.80643555 0-36.11761778 15.14609778-36.11761778 34.95253333V238.36444444999995l249.32807111 222.53112888c15.14609778 13.98101333 38.44778667 12.81592889 51.26371556-2.33016888L592.39082667 255.84071111000003c40.77795555-43.10812445 108.35285333-45.43829333 151.46097778-4.66033778l1.16508444 1.16508445L980.36394667 477.20675555c13.98101333 13.98101333 15.14609778 36.11761778 1.16508444 51.26371556-13.98101333 13.98101333-36.11761778 15.14609778-51.26371556 1.16508444L694.91825778 305.93934221999996c-13.98101333-13.98101333-36.11761778-12.81592889-50.09863111 1.16508445L456.07594667 508.66403555c-40.77795555 43.10812445-108.35285333 46.60337778-152.62606222 6.99050667L103.05536 335.06645332999994z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file-document-box" unicode="&#59223;" d="M622.46726541 107.83183582000004H235.83183582v110.46726542h386.63542959m165.70089877 110.46726541H235.83183582v110.4672667h552.33632836m0 110.46726541H235.83183582V660.16816418h552.33632836m110.4672667 220.93453212H125.36456912c-61.30933253 0-110.46726541-49.15793286-110.46726542-110.46726542v-773.27086176a110.46726541 110.46726541 0 0 1 110.46726542-110.46726542h773.27086176a110.46726541 110.46726541 0 0 1 110.46726542 110.46726542V770.6354308800001a110.46726541 110.46726541 0 0 1-110.46726542 110.46726542z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="mp3" unicode="&#59105;" d="M960.077576 447.922424V608.0387880000001L671.961212 896H95.728485a31.030303 31.030303 0 0 1-31.030303-31.030303v-417.047273H0v-447.922424h64.077576V-96.969697a31.030303 31.030303 0 0 1 31.030303-31.030303h833.163636a31.030303 31.030303 0 0 1 31.030303 31.030303v96.969697H1024V447.922424z m-63.922424-512H128v64.077576h768z m-567.389091 170.666667h-30.099394l-72.610909 213.643636v-213.488485h-31.961213V357.624242h49.958788l59.423031-177.648484q8.22303-24.824242 11.946666-37.081213 4.344242 13.653333 13.343031 40.184243l60.043636 174.545454h44.683636v-250.88h-31.961212V316.66424199999994z m158.409697 0V357.624242h94.642424a228.227879 228.227879 0 0 0 38.167273-2.327272 75.558788 75.558788 0 0 0 31.030303-11.791515 62.060606 62.060606 0 0 0 20.169697-24.203637 81.609697 81.609697 0 0 0-12.722425-88.436363q-20.324848-22.186667-73.541818-22.186667h-64.54303v-101.934546z m339.161212 108.606061A47.941818 47.941818 0 0 1 791.272727 228.84848499999998a88.591515 88.591515 0 0 1-21.721212-3.413333l3.413333 26.996363h4.964849a63.45697 63.45697 0 0 1 35.374545 10.24 35.219394 35.219394 0 0 1 15.515152 31.030303 37.391515 37.391515 0 0 1-11.481212 28.237576 40.804848 40.804848 0 0 1-29.63394 11.170909 41.890909 41.890909 0 0 1-29.944242-11.326061 56.630303 56.630303 0 0 1-15.515152-33.82303l-31.030303 5.430303a79.127273 79.127273 0 0 0 25.6 47.941818 74.162424 74.162424 0 0 0 49.803637 17.066667 82.075152 82.075152 0 0 0 37.85697-8.843636 63.767273 63.767273 0 0 0 26.375757-24.048485 62.060606 62.060606 0 0 0 9.153939-32.271515 52.906667 52.906667 0 0 0-8.688484-29.63394 59.578182 59.578182 0 0 0-25.910303-21.255757 58.181818 58.181818 0 0 0 34.598787-21.255758 64.853333 64.853333 0 0 0 12.25697-40.494545 74.007273 74.007273 0 0 0-23.893333-55.699394 84.247273 84.247273 0 0 0-60.509091-22.807273 78.81697 78.81697 0 0 0-54.923636 19.704242 76.024242 76.024242 0 0 0-24.824243 51.044849l31.030303 4.189091a67.956364 67.956364 0 0 1 17.997576-37.701818 44.683636 44.683636 0 0 1 31.030303-11.481213 49.803636 49.803636 0 0 1 36.770909 15.515152 50.734545 50.734545 0 0 1 15.515152 37.236364 46.545455 46.545455 0 0 1-14.118788 34.443636z m69.66303 232.727272H128V831.922424h543.961212v-223.883636h224.038788zM630.846061 250.25939400000004a42.666667 42.666667 0 0 1 13.498181 33.667879 45.304242 45.304242 0 0 1-8.22303 26.996363 37.236364 37.236364 0 0 1-20.945454 15.515152 142.429091 142.429091 0 0 1-31.030303 2.172121h-63.767273v-89.677576h64.853333a68.732121 68.732121 0 0 1 45.614546 11.326061z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="huiyishi" unicode="&#59023;" d="M44.977 787.62066667v-60.707h58.382v-511.391c0-70.049 49.039-119.088 116.764-119.088h175.124l-82.065-105.051v-44.392h54.036l116.765 149.442h58.382l116.741-149.442h58.383v38.848L631.1 96.43566667000005h175.124c67.725 0 116.741 49.039 116.741 119.088v511.39h56.058V787.62066667H44.977z m448.348-565.09H241.134c-11.667 0-21.01 14.015-21.01 30.353 0 16.351 9.343 30.354 21.01 30.354h252.191c11.667 0 21.01-11.667 21.01-30.354 0-16.338-9.343-30.353-21.01-30.353z m0 121.436H241.134c-11.667 0-21.01 14.003-21.01 30.342 0 16.35 9.343 30.365 21.01 30.365h252.191c11.667 0 21.01-14.015 21.01-30.365 0-16.339-9.343-30.342-21.01-30.342z m310.551 121.412c0-32.689-25.682-60.706-58.359-60.706H628.753c-32.701 0-58.383 28.017-58.383 60.706V584.46766667c0 32.701 25.682 60.718 58.383 60.718h116.764c32.678 0 58.359-28.018 58.359-60.718v-119.089zM75.354 757.25566667c0-16.792-13.596-30.388-30.376-30.388s-30.376 13.596-30.376 30.388c0 16.769 13.596 30.365 30.376 30.365s30.376-13.597 30.376-30.365z m934.045 0c0-16.792-13.597-30.388-30.377-30.388s-30.376 13.596-30.376 30.388c0 16.769 13.596 30.365 30.376 30.365s30.377-13.597 30.377-30.365zM723.508-33.589333330000045c0-19.197-15.781-34.757-35.258-34.757-19.499 0-35.28 15.56-35.28 34.757 0 19.175 15.781 34.734 35.28 34.734 19.477 0.001 35.258-15.559 35.258-34.734z m-350.177-0.011c0-19.187-15.851-34.746-35.42-34.746s-35.42 15.56-35.42 34.746 15.851 34.733 35.42 34.733 35.42-15.547 35.42-34.733z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biaodanku" unicode="&#59025;" d="M894.29333333 702.57777778v-764.58666667H257.13777778V702.57777778h637.15555555m0 63.71555555H257.13777778c-35.15733333 0-63.71555555-28.55822222-63.71555556-63.71555555v-764.58666667c0-35.15733333 28.55822222-63.71555555 63.71555556-63.71555556h637.15555555c35.15733333 0 63.71555555 28.55822222 63.71555556 63.71555556V702.57777778c0 35.15733333-28.55822222 63.71555555-63.71555556 63.71555555zM766.86222222 830.00888889v-63.71555556H257.13777778l-63.71555556-63.71555555v-637.15555556h-63.71555555V830.00888889h637.15555555m0 63.71555556H129.70666667c-35.15733333 0-63.71555555-28.55822222-63.71555556-63.71555556v-764.58666667c0-35.15733333 28.55822222-63.71555555 63.71555556-63.71555555h127.43111111V702.57777778h573.44V830.00888889c0 35.15733333-28.55822222 63.71555555-63.71555556 63.71555556zM736.02844445 479.57333333h-318.57777778c-17.63555555 0-31.85777778 14.22222222-31.85777778 31.85777778s14.22222222 31.85777778 31.85777778 31.85777778h318.57777778c17.63555555 0 31.85777778-14.22222222 31.85777777-31.85777778s-14.336-31.85777778-31.85777777-31.85777778zM736.02844445 288.42666667000003h-318.57777778c-17.63555555 0-31.85777778 14.22222222-31.85777778 31.85777778s14.22222222 31.85777778 31.85777778 31.85777777h318.57777778c17.63555555 0 31.85777778-14.22222222 31.85777777-31.85777777s-14.336-31.85777778-31.85777777-31.85777778zM736.02844445 97.27999999999997h-318.57777778c-17.63555555 0-31.85777778 14.22222222-31.85777778 31.85777778s14.22222222 31.85777778 31.85777778 31.85777777h318.57777778c17.63555555 0 31.85777778-14.22222222 31.85777777-31.85777777s-14.336-31.85777778-31.85777777-31.85777778z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wenjian1" unicode="&#59026;" d="M626.04265699 849.41733091H169.87202787c-61.64467939 0-113.01524594-43.15127581-113.01524593-94.52184234v-758.22955862c0-51.37056654 51.37056654-94.52184235 113.01524593-94.52184234h682.201121c61.64467939 0 113.01524594 43.15127581 113.01524594 94.52184234V565.85180501L626.04265699 849.41733091z m-57.53503402-330.82644707V779.55336078l312.33304348-260.96247694H568.50762297z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="caiwu1" unicode="&#59149;" d="M53.248-76.45866666999996c0-16.21333333 13.14133333-29.35466667 29.35466667-29.35466666h70.48533333c16.21333333 0 29.35466667 13.14133333 29.35466667 29.35466666V451.41333333c0 16.21333333-13.14133333 29.35466667-29.35466667 29.35466667H82.60266667c-16.04266667 0-29.35466667-13.14133333-29.35466667-29.35466667v-527.872z m254.976 0c0-16.21333333 13.14133333-29.35466667 29.35466667-29.35466666H411.30666667c16.21333333 0 29.35466667 13.14133333 29.35466666 29.35466666V275.456c0 16.21333333-13.14133333 29.35466667-29.35466666 29.35466667h-73.89866667c-16.21333333 0-29.35466667-13.14133333-29.35466667-29.35466667v-351.91466667z m273.74933333 0c0-16.21333333 13.14133333-29.35466667 29.35466667-29.35466666h73.89866667c16.21333333 0 29.35466667 13.14133333 29.35466666 29.35466666V275.456c0 16.21333333-13.14133333 29.35466667-29.35466666 29.35466667h-73.89866667c-16.21333333 0-29.35466667-13.14133333-29.35466667-29.35466667v-351.91466667z m287.57333334 557.22666667c-16.04266667 0-29.35466667-13.14133333-29.35466667-29.35466667v-527.872c0-16.21333333 13.14133333-29.35466667 29.35466667-29.35466666h72.192c16.21333333 0 29.35466667 13.14133333 29.35466666 29.35466666V451.41333333c0 16.21333333-13.14133333 29.35466667-29.35466666 29.35466667h-72.192zM511.31733333 871.76533333c-129.536 0-234.66666667-104.96-234.66666666-234.66666666 0-129.536 104.96-234.66666667 234.66666666-234.66666667 129.536 0 234.66666667 104.96 234.66666667 234.66666667S640.85333333 871.76533333 511.31733333 871.76533333zM613.888 575.1466666700001c-3.41333333-49.32266667-34.13333333-75.60533333-88.91733333-79.01866667v-27.136h-29.35466667v27.81866667c-48.81066667 5.632-78.336 33.45066667-87.72266667 83.62666666l43.008 12.11733334c3.584-39.424 25.6-58.70933333 65.87733334-57.856 34.98666667 0 52.39466667 13.824 52.39466666 41.64266666 4.43733333 19.62666667-15.70133333 34.47466667-60.58666666 44.37333334-64.512 13.48266667-95.06133333 39.936-91.47733334 79.36 2.56 46.25066667 27.47733333 72.02133333 78.336 77.14133333V803.328h29.35466667v-25.94133333c44.88533333-4.43733333 73.38666667-29.86666667 82.26133333-75.94666667l-43.34933333-12.11733333c-6.31466667 33.10933333-24.23466667 49.32266667-53.76 48.46933333-32.256-0.85333333-48.81066667-13.48266667-49.664-37.71733333-1.87733333-16.21333333 16.55466667-28.672 55.12533333-37.71733334 67.41333333-13.312 100.352-42.496 98.47466667-87.21066666z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="caiwuguanlim" unicode="&#59028;" d="M158.13746938 774.09959156L435.1216325 774.09959156l26.31706125 0 130.23346968 0 146.75200032 0 156.54791813 0c25.35183657 0 46.09436719 18.5978775 46.09436719 41.32963219 0 22.73175469-20.74253062 41.32963219-46.09436719 41.32963219L738.42808156 856.75885687 591.67346938 856.75885687l-130.23346969 0-26.31706125 0L158.13746938 856.75885687c-25.35183657 0-46.09436719-18.59918343-46.09436719-41.32963219C112.04310219 792.69746907 132.78563281 774.09959156 158.13746938 774.09959156zM434.89697937 400.92473438L434.76244907 400.8528975 434.93485718 400.8528975ZM967.64734719 691.23134719L82.85648938 691.23134719c-25.35183657 0-46.09436719-20.74253062-46.09436719-46.09436719l0-123.43771406 0-440.92473469 0-123.43902c0-25.35183657 20.74253062-46.09436719 46.09436719-46.09436719l884.79085687 0c25.35183657 0 46.09436719 20.74253062 46.09436719 46.09436719l0 123.43902L1013.74171438 521.699265l0 123.43771406C1013.74171438 670.48881657 992.99918375 691.23134719 967.64734719 691.23134719zM676.9018775 258.91787718L676.9018775 258.91787718c25.35183657 0 46.09436719-18.59395875 46.09436718-41.32702031s-20.74253062-41.332245-46.09436718-41.332245l-110.3216325 0 0-99.87265312c0-25.35183657-18.5978775-46.09698-41.332245-46.09698-22.72914282 0-41.32963219 20.7451425-41.32963219 46.09698l0 99.87265312-110.32293843 0c-25.35183657 0-46.09436719 18.59657156-46.09436719 41.332245 0 22.72653093 20.74253062 41.32702031 46.09436719 41.32702031l110.32293843 0 0 59.27575501-110.32293843 0c-25.35183657 0-46.09436719 18.59657156-46.09436719 41.33224499 0 22.72914282 20.74253062 41.32832625 46.09436719 41.32832625l61.1644078 0-22.59199968 43.10073469-0.04571437-0.02481656-26.77812282 51.08636719c-11.7733875 22.45224468-4.92799969 49.46024531 15.20457188 60.01371468 20.13257156 10.55346938 46.23412219 0.81632625 58.00489782-21.63853031l21.5418778-41.09844937c0.37746938-0.64914282 0.74057156-1.30742813 1.09583719-1.98008156l22.16228531-42.27787782 0.13583719 0.07183688 22.39608188-42.73502062 22.39869375 42.73371469 0.13453031-0.07053095 22.16228531 42.27787782c0.35395875 0.67526531 0.72359156 1.3348575 1.10236781 1.98661219l21.53795906 41.08930593c11.77208156 22.4548575 37.86971438 32.19199969 58.00359188 21.63853031 20.13257156-10.55346938 26.97404063-37.56016313 15.20718375-60.01371468l-26.77812281-51.08636719-0.04702032 0.02481656-22.59199968-43.10073469-0.13583719 0.07183688-0.03395906-0.07183688 0.17110218 0 0.00130594 0 59.88440813 0c25.35183657 0 46.09436719-18.59918343 46.09436718-41.32832625 0-22.73175469-20.74253062-41.332245-46.09436718-41.332245l-110.3216325 0 0-59.275755 110.3216325 0L676.9018775 258.91787718z"  horiz-adv-x="1053" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="guanlian" unicode="&#59033;" d="M887.68 682.688h-42.24C750.912 682.688 751.04 832 684.352 832H282.56c-75.2 0-136.32-62.336-136.32-139.2v-159.488H219.52V692.8a64 64 0 0 0 63.104 64.512H670.528c4.48-7.168 10.24-17.92 14.464-25.856 24.512-46.144 65.536-123.456 160.384-123.456h42.24c32.512 0 63.232-36.288 63.232-74.688v-458.24a64 64 0 0 0-63.168-64.384H282.56a64 64 0 0 0-63.104 64.448V160H146.304v-84.864c0-76.864 61.056-139.136 136.256-139.136h605.056C962.944-64 1024-1.7279999999999518 1024 75.13599999999997v458.24c0 76.8-61.056 149.312-136.32 149.312zM495.232 171.84000000000003l152.064 151.552c0.192 0.128 0.256 0.384 0.384 0.576 3.2 3.264 5.952 11.136 7.744 15.488 1.536 4.032 2.112 0.704 2.432 4.736 0 0.896 0.448 1.664 0.448 2.496 0 0.576-0.32 1.024-0.32 1.536a31.232 31.232 0 0 1-2.56 10.88 38.4 38.4 0 0 1-6.592 10.112c-0.576 0.768-0.832 1.792-1.536 2.432L495.232 526.784c-14.592 14.976-38.4 8.128-52.992-6.912a38.848 38.848 0 0 1 0-54.208l87.808-82.816H39.04c-21.44 0-38.848-14.976-38.72-36.096-0.128-21.12 17.28-34.688 38.784-34.688h491.008l-87.808-92.8a38.912 38.912 0 0 1 0-54.272c7.296-7.488 16.832-4.416 26.496-4.416 9.6 0 19.2 3.904 26.432 11.264z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="php1" unicode="&#59036;" d="M964.71578987 504.72421013L559.42736853 322.20070187c-38.80421013-17.24631573-54.61333333-17.24631573-90.5431584 0L63.59578987 504.72421013c-31.61824533 17.24631573-30.1810528 70.42245653 0 90.5431584L468.88421013 809.4091232c35.92982507 17.24631573 57.48771947 18.68350827 90.5431584 0l405.28842134-214.14175467c30.1810528-17.24631573 28.7438592-76.17122773 0-90.5431584zM983.39929813 313.57754347L578.1108768 132.49122773c-38.80421013-17.24631573-54.61333333-17.24631573-90.54315733 0L82.27929813 313.57754347c-21.5578944 11.49754347-27.30666667 53.1761408-27.30666666 76.1712288 27.30666667-15.8091232 64.67368427-33.05543893 63.23649173-31.6182464L532.12070187 168.42105279999998l413.91157866 191.14666667c1.43719253 0 37.3670176 18.68350827 63.23649174 31.61824533 1.43719253-24.43228053-7.1859648-67.5480704-25.86947414-77.60842133zM532.12070187-22.72561386999996L946.03228053 168.42105279999998c1.43719253 0 37.3670176 18.68350827 63.23649174 31.61824533 0-22.995088-7.1859648-67.5480704-27.30666667-76.17122773L578.1108768-58.655438929999946c-38.80421013-17.24631573-54.61333333-17.24631573-90.54315733 0L82.27929813 123.86807039999997c-21.5578944 11.49754347-27.30666667 53.1761408-27.30666666 76.17122773 27.30666667-15.8091232 64.67368427-33.05543893 63.23649173-31.61824533l413.91157867-191.14666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tongxunlu1" unicode="&#59037;" d="M54.44266666 571.27822222h133.23377778c16.04266667 0 29.01333333 13.53955555 29.01333334 30.03733333 0 16.61155555-12.97066667 30.15111111-29.01333334 30.15111112H54.44266666c-16.04266667 0-29.01333333-13.53955555-29.01333333-30.15111112 0-16.49777778 12.97066667-30.03733333 29.01333333-30.03733333z m0-216.17777777h133.23377778c16.04266667 0 29.01333333 13.53955555 29.01333334 30.03733333 0 8.07822222-3.072 15.58755555-8.53333334 21.27644444s-12.74311111 8.76088889-20.48 8.76088889H54.44266666c-16.04266667 0-29.01333333-13.53955555-29.01333333-30.15111111s12.97066667-29.92355555 29.01333333-29.92355555z m162.24711112-185.344c0 8.07822222-3.072 15.58755555-8.53333334 21.27644444s-12.74311111 8.76088889-20.48 8.76088889H54.44266666c-16.04266667 0-29.01333333-13.53955555-29.01333333-30.15111111s12.97066667-30.03733333 29.01333333-30.03733334h133.23377778c16.04266667 0 29.01333333 13.53955555 29.01333334 30.15111112z m93.07022222-30.60622223l-3.86844445-9.55733333H370.63111111l1.93422222 3.64088889c30.26488889 57.11644445 101.60355555 98.98666667 173.28355555 101.71733333H560.75377778c71.68-2.73066667 143.01866667-44.48711111 173.28355555-101.71733333l1.93422222-3.64088889H800.71111111l-3.86844445 9.55733333c-11.83288889 28.55822222-32.31288889 56.54755555-59.392 80.896-21.27644445 19.11466667-46.64888889 35.95377778-73.15911111 48.69688889 26.16888889 16.95288889 48.46933333 39.936 64.39822223 66.44622222 19.00088889 31.51644445 29.01333333 67.584 29.01333333 104.56177778 0 112.86755555-91.81866667 204.68622222-204.68622223 204.68622222S348.33066666 552.61866667 348.33066666 439.75111111c0-36.97777778 10.12622222-73.15911111 29.12711112-104.67555556 16.04266667-26.51022222 38.45688889-49.49333333 64.73955555-66.44622222-26.51022222-12.85688889-51.65511111-29.58222222-72.93155555-48.69688888-27.30666667-24.34844445-47.78666667-52.224-59.50577778-80.78222223zM552.67555555 584.93155555c80.09955555 0 145.18044445-65.08088889 145.18044445-145.18044444 0-80.09955555-65.08088889-145.18044445-145.18044445-145.18044444-80.09955555 0-145.18044445 65.08088889-145.18044444 145.18044444 0 79.98577778 65.19466667 145.18044445 145.18044444 145.18044444zM898.56 895.08977778H206.90488888c-60.416 0-109.45422222-49.152-109.45422222-109.45422223v-81.92h58.70933334v69.74577778c0 41.52888889 21.95911111 63.37422222 63.37422222 63.37422222h667.42044444c41.52888889 0 63.37422222-21.95911111 63.37422222-63.37422222V-2.844444449999969c0-41.52888889-21.95911111-63.488-63.37422222-63.488H219.53422222c-41.52888889 0-63.37422222 21.95911111-63.37422222 63.488v69.74577778h-58.70933334v-80.78222222c0-60.416 49.152-109.45422222 109.45422222-109.45422222H898.56c60.416 0 109.45422222 49.152 109.45422222 109.45422222V785.52177778c0 60.416-49.152 109.568-109.45422222 109.568z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xml1" unicode="&#59038;" d="M932.0727275 443.9272725V594.03636375L661.96363625 864H121.74545469a29.09090906 29.09090906 0 0 1-29.09090906-29.09090906v-390.98181844H32v-419.9272725h60.0727275V-66.90909094000006a29.09090906 29.09090906 0 0 1 29.09090906-29.09090906h781.09090875a29.09090906 29.09090906 0 0 1 29.09090906 29.09090906v90.90909094H992V443.9272725z m-59.9272725-480H152v60.0727275h720zM202.18181844 354.90909094000006h37.09090875l42.61818187-60.36363656a342.10909125 342.10909125 0 0 0 18.90909094-29.09090907 305.45454562 305.45454562 0 0 0 18.61818188 26.76363657L366.54545469 354.90909094000006h33.89090906l-82.61818219-110.83636406 89.0181825-124.36363594h-38.25454594l-59.20000031 83.9272725q-4.945455 7.2727275-10.32727219 15.70909125-7.85454563-12.79999969-11.20000031-17.59999969l-59.05454531-82.03636406H192.00000031l90.90909094 122.61818156z m357.5272725-235.92727313h-28.07272688l-68.07272812 200.29090969v-200.29090969h-29.96363625V354.90909094000006h46.83636375l55.70909156-166.54545469q7.70909062-23.27272688 11.19999938-34.76363625 4.07272688 12.79999969 12.50909062 37.67272688L616.14545469 354.90909094000006H657.45454531v-235.92727313h-29.09090906V315.92727281z m294.25454531 27.78181875v-27.78181875H706.90909063V354.90909094000006h31.12727343v-208.14545438z m18.03636375 297.16363594H152V803.9272725h509.96363625v-209.89090875h210.03636375z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="hetong" unicode="&#59039;" d="M892.90322563 674.32258031l-154.83870938 156.3870975c-15.48387094 13.16129062-39.48387094 24.77419313-60.38709656 24.77419313H155.09677437c-37.93548375 0-69.67741969-31.74193594-69.67741968-69.67741969v-762.58064438c0-37.93548375 31.74193594-69.67741969 69.67741969-69.67741968v1.54838718h476.12903249c-31.74193594 34.06451625-52.64516156 82.83870937-52.64516156 136.25806407 0 111.48387094 94.45161281 205.93548375 209.80645125 205.93548375 48.77419313 0 94.45161281-17.03225813 130.06451625-45.67741875V616.2580640599999c-0.77419313 17.03225813-11.61290344 44.90322562-25.54838718 58.06451625z m-673.54838719 11.61290344h313.54838718c13.16129062 0 24.77419313-11.61290344 24.77419407-24.77419312 0-13.16129062-11.61290344-24.77419313-24.77419407-24.77419407H219.35483844c-15.48387094 0-24.77419313 9.29032219-24.77419313 24.77419407 0 13.16129062 11.61290344 24.77419313 24.77419313 24.77419312z m417.29032312-330.58064531H219.35483844c-13.16129062 0-24.77419313 11.61290344-24.77419313 24.77419406s11.61290344 24.77419313 24.77419313 24.77419313h417.29032312c13.16129062 0 24.77419313-11.61290344 24.77419313-24.77419313s-11.61290344-24.77419313-24.77419313-24.77419406z m154.83870938 141.67741969H219.35483844c-15.48387094 0-24.77419313 9.29032219-24.77419313 24.77419312 0 13.16129062 11.61290344 24.77419313 24.77419313 24.77419406h572.1290325c13.16129062 0 24.77419313-11.61290344 24.77419312-24.77419406s-11.61290344-24.77419313-24.77419312-24.77419312z m41.03225812 99.8709675H731.09677437c-37.93548375 0-69.67741969 31.74193594-69.67741968 68.1290325V767.2258068799999c0 22.45161281 11.61290344 24.77419313 24.77419406 11.6129025L844.90322563 622.4516128099999c12.38709656-13.93548375 8.51612906-25.54838719-12.38709657-25.54838718zM787.61290344 263.22580688000005c-98.32258031 0-175.74193594-77.41935469-175.74193594-175.74193594s77.41935469-175.74193594 175.74193594-175.741935 173.41935469 77.41935469 175.741935 175.741935c0 98.32258031-77.41935469 175.74193594-175.741935 175.74193594z m107.61290343-171.87096844l-37.93548468-35.6129025 3.87096843-48.77419406c0-7.74193594 0-11.61290344-7.74193593-17.03225813-3.8709675 0-3.8709675-3.8709675-11.61290344-3.8709675 0 0-3.8709675 0-7.741935 3.8709675l-45.67741969 24.77419406L744.25806406-10.838709379999955c-7.74193594-3.8709675-17.03225813 0-20.90322562 3.87096751s-7.74193594 11.61290344-7.741935 17.03225812l11.61290344 52.64516156-37.93548469 35.6129025c-7.74193594 3.8709675-11.61290344 11.61290344-7.741935 17.03225813 3.8709675 7.74193594 11.61290344 13.16129062 17.03225812 13.16129062l48.77419313 7.741935 24.77419406 45.67741969c7.74193594 13.16129062 28.64516156 13.16129062 35.61290344 0l24.77419312-45.67741969 48.77419313-7.741935c7.74193594-3.8709675 11.61290344-7.74193594 17.03225812-13.16129062 0.77419313-6.96774187 0.77419313-18.58064531-3.09677343-24z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="exe" unicode="&#59195;" d="M939.2 444.8v152l-273.6 273.6h-548.8c-8 0-16-3.2-20.8-8-4.8-4.8-8-12.8-8-20.8v-396.8h-60.8v-427.2h60.8v-92.8c0-16 12.8-28.8 28.8-28.8h793.6c16 0 28.8 12.8 28.8 30.4v92.8h60.8v427.2h-60.8z m-60.8-486.4h-731.2v60.8h731.2v-60.8z m-500.8 297.6v-28.8h-132.8v-81.6h147.2v-27.2h-177.6v238.4h172.8v-28.8h-140.8v-73.6c-1.6 0 131.2 1.6 131.2 1.6z m43.2 100.8h38.4l43.2-60.8c9.6-12.8 16-22.4 19.2-28.8 6.4 9.6 12.8 19.2 19.2 27.2l48 64h35.2l-83.2-112 91.2-126.4h-40l-60.8 84.8c-3.2 4.8-6.4 11.2-11.2 16-3.2-6.4-8-12.8-11.2-17.6l-60.8-83.2h-38.4l92.8 124.8c0-1.6-81.6 112-81.6 112z m401.6-100.8v-28.8h-132.8v-81.6h147.2v-27.2h-179.2v238.4h172.8v-28.8h-142.4v-73.6c1.6 0 134.4 1.6 134.4 1.6z m56 188.8h-731.2v366.4h518.4v-212.8h212.8v-153.6z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shu1" unicode="&#59041;" d="M912.03407417-108.34954013000004H265.82581248V876.34954013h307.71860821v-553.89279574l92.31663104 123.08651122h61.5444207l92.31546595-123.08651122V876.34954013h92.31663104c17.01605831 0 30.77221035-13.78527915 30.77221035-30.77221035v-923.15465956c-0.00116509-17.01838848-13.75731712-30.77221035-30.77337543-30.77221035z m-830.84035868 30.77104527V845.57849486c0 16.9869312 13.75498695 30.77221035 30.77104526 30.77221035h92.31663104v-984.70024534h-92.31663104c-17.01605831 0-30.76988018 13.75382187-30.76988018 30.77104527z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="lianjiexian" unicode="&#59227;" d="M1005.19657377 77.57460578999996l-142.4790102 141.72488701c-12.71954467 12.66926978-36.90176201 14.22779106-43.78942055-2.26236961-1.86017056-4.42418944-2.31264449-16.89235971-2.31264449-16.89235972v-95.77364658h-482.33719968a116.23552279 116.23552279 0 0 0-116.43662232 115.78304887 116.23552279 116.23552279 0 0 0 116.43662232 115.83332374h437.49200663c119.35256535 0 216.43335884 96.52776979 216.43335881 215.22676172 0 118.69899193-97.08079348 215.27703659-216.43335881 215.27703657H343.57915167A171.08541698 171.08541698 0 0 1 180.18579134 886.74880099C85.87011629 886.74880099 9.25119901 810.48180789 9.25119901 716.76943138c0-93.76265138 76.66919215-169.97936962 170.93459233-169.97936962a171.08541698 171.08541698 0 0 1 163.39336033 120.25751322h428.19115381a116.23552279 116.23552279 0 0 0 116.4366223-115.83332376 116.23552279 116.23552279 0 0 0-116.4366223-115.78304889h-437.49200663c-119.35256535 0-216.43335884-96.52776979-216.43335884-215.27703657 0-118.64871702 97.03051859-215.22676171 216.43335884-215.22676171h482.33719968v-90.89698323s0-13.92614178 2.31264449-19.45637858c6.88765859-16.54043556 31.06987589-17.24428387 43.73914567-4.52473921l142.52928508 141.67461211a32.27647302 32.27647302 0 0 1 0 45.85069065zM180.18579134 646.23377461c-39.1138567 0-70.88758095 31.67317446-70.88758094 70.53565677S141.02165975 787.2045384 180.18579134 787.2045384c39.06358183 0 70.88758095-31.62289958 70.88758095-70.4853819 0-38.91275719-31.8239991-70.53565678-70.88758095-70.53565679z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shu2" unicode="&#59042;" d="M308.93312 801.21984H11.76064v-778.03264h264.30464c16.29312 0 32.75136-1.46432 48.86272-4.3648 15.78496-2.87872 31.72992-7.26784 47.3984-13.09056l107.19872-40.23168V636.26496c0 44.05888-17.8048 85.5168-50.00064 116.55168a172.52352 172.52352 0 0 1-120.59136 48.4032z m403.69792 0a172.38016 172.38016 0 0 1-120.54528-48.40192 160.84736 160.84736 0 0 1-49.90848-116.55168v-670.7648l101.07008 37.93152c17.22368 6.50112 35.37536 11.4688 53.55136 14.90432 17.89696 3.24736 36.63104 4.87552 55.38688 4.87552H1009.92V801.21984H712.63104z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ai" unicode="&#59043;" d="M758 896H112C68 896 32 860 32 816v-864c0-44 36-80 80-80h800c44 0 80 36 80 80V662L758 896zM642.9 131.60000000000002c-8.3-8.3-18.3-12.5-30-12.5-6.8 0-12.7 1.2-17.6 3.7-4.9 2.4-9 5.8-12.3 10-3.3 4.2-6.9 10.6-10.7 19.3-3.8 8.7-7.1 16.3-9.8 23L542 229H367.4l-20.5-55.1c-8-21.5-14.8-36-20.5-43.5-5.7-7.5-14.9-11.3-27.8-11.3-10.9 0-20.6 4-29 12-8.4 8-12.6 17.1-12.6 27.2 0 5.9 1 11.9 2.9 18.2 2 6.2 5.2 14.9 9.7 26.1l109.9 278.9c3.1 8 6.9 17.6 11.3 28.9 4.4 11.2 9.1 20.6 14.1 28 5 7.4 11.5 13.4 19.6 18 8.1 4.6 18.1 6.9 30 6.9 12.1 0 22.2-2.3 30.3-6.9 8.1-4.6 14.6-10.5 19.6-17.7 5-7.2 9.2-15 12.6-23.3 3.4-8.3 7.8-19.4 13-33.3L642.2 205c8.8-21.1 13.2-36.4 13.2-46-0.1-9.9-4.2-19.1-12.5-27.4zM753 154c0-10.7-2.4-18.8-7.5-24.2s-11.5-8.2-19.3-8.2-14.1 2.8-19 8.4-7.2 13.6-7.2 24V306.6c0 10.5 2.4 18.5 7.3 23.8 4.9 5.3 11.2 8 19 8s14.1-2.7 19.2-8 7.5-12.8 7.5-22.3V154z m-7.6 216.2c-5.2-4.6-11.4-6.9-18.6-6.9-7.4 0-13.8 2.3-19 6.8-5.3 4.6-7.9 11-7.9 19.3 0 7.5 2.7 13.8 8.1 18.7 5.4 4.9 11.7 7.3 18.8 7.3 6.9 0 13-2.2 18.4-6.6 5.3-4.4 8-10.9 8-19.3 0-8.3-2.6-14.7-7.8-19.3zM778.6 670c-18.1 0-32.6 14.6-32.6 32.7v165L943.5 670H778.6zM390.2 294h128.3l-64.7 177.2z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="Word1" unicode="&#59044;" d="M663.25333333 579.73333333c-23.89333333 0-43.30666667 19.41333333-43.30666666 43.41333334V861.54666667H186.34666667c-35.94666667 0-65.06666667-29.12-65.06666667-65.06666667v-823.89333333c0-35.94666667 29.12-65.06666667 65.06666667-65.06666667h650.45333333c35.94666667 0 65.06666667 29.12 65.06666667 65.06666667V579.73333333H663.25333333z m-23.68-511.89333333h-48.53333333l-80 294.4h-0.96l-80.96-294.4h-48.53333333L290.77333333 418.13333333h47.57333334l68.69333333-291.41333333h0.96L486.50666667 418.13333333h50.56l77.54666666-291.41333333h0.96L686.72 418.13333333h46.61333333l-93.76-350.29333333zM685.01333333 838.72v-193.92h195.84L685.01333333 838.72z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="revisiondistribute" unicode="&#59045;" d="M913.6 640H742.4V810.4zM228-32h480v-74.4c0-5.6-2.4-10.4-6.4-15.2-4-4-9.6-6.4-15.2-6.4H132c-5.6 0-10.4 2.4-15.2 6.4-4 4-6.4 9.6-6.4 15.2V704c0 5.6 2.4 10.4 6.4 15.2 4 4 9.6 6.4 15.2 6.4h96V-32zM650.4 554.4V896h-320c-5.6 0-10.4-2.4-15.2-6.4-4-4-6.4-9.6-6.4-15.2V64c0-5.6 2.4-10.4 6.4-15.2 4-4 9.6-6.4 15.2-6.4h554.4c5.6 0 10.4 2.4 15.2 6.4 4 4 6.4 9.6 6.4 15.2V554.4h-256z m150.4-86.4c-13.6 0-24-2.4-29.6-7.2-5.6-4.8-12-14.4-17.6-28.8L624 103.2h-38.4L456.8 432c-5.6 14.4-12 24-17.6 28.8s-15.2 7.2-29.6 7.2v23.2h139.2v-23.2h-11.2c-11.2 0-19.2-0.8-23.2-3.2-4-2.4-6.4-5.6-6.4-11.2s1.6-12.8 4.8-21.6l101.6-270.4L717.6 432c4 8.8 5.6 15.2 5.6 20.8 0 5.6-2.4 9.6-6.4 12s-11.2 4-21.6 4h-12v23.2h118.4l-0.8-24z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="psd1" unicode="&#59046;" d="M536.456357 896l536.280413-364.909966-545.429554-366.14158L0 531.090034 536.456357 896zM2.46323 238.845361l141.107904 95.538144 391.653608-268.140206 394.468729 268.140206 138.292783-95.538144L539.623368-128 2.46323 238.845361z"  horiz-adv-x="1072" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiaqin" unicode="&#59047;" d="M891.04080592-38.537291849999974H132.95919408A86.99297185 86.99297185 0 0 0 45.96622222 48.45568000000003V526.91702518h932.06755556v-478.46134518a86.99297185 86.99297185 0 0 0-86.99297186-86.99297185zM512 427.49648592a186.41351111 186.41351111 0 1 1 186.41351111-186.4135111A186.41351111 186.41351111 0 0 1 512 427.49648592z m80.77918815-248.55134814h-93.20675556a24.85513482 24.85513482 0 0 0-24.85513481 24.85513481V290.79324445a24.85513482 24.85513482 0 0 0 49.71026963 0V228.65540740999995h68.35162074a24.85513482 24.85513482 0 0 0 0-49.71026963zM45.96622222 669.83405037a86.99297185 86.99297185 0 0 0 86.99297186 86.99297185h97.55640414a74.44768237 74.44768237 0 0 0 140.4315117 0h282.10578016a74.44768237 74.44768237 0 0 0 140.4315117 0h97.55640414A86.99297185 86.99297185 0 0 0 978.03377778 669.83405037v-68.35162074H45.96622222v68.35162074zM685.9859437 694.68918518a37.28270222 37.28270222 0 0 1 74.56540445 0v37.28270223a37.28270222 37.28270222 0 0 1-74.56540445 0V694.68918518z m-422.53729185 0a37.28270222 37.28270222 0 0 1 74.56540445 0v37.28270223a37.28270222 37.28270222 0 0 1-74.56540445 0V694.68918518z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tongxunlu2" unicode="&#59048;" d="M769.024 182.95466667000005l-183.296 72.704s-34.816 12.62933333-47.44533333 28.44444444c-9.44355555 9.44355555-9.44355555 28.44444445 0 53.70311111 6.37155555 25.25866667 101.14844445 132.77866667 101.14844444 227.55555556 0 148.48-97.96266667 268.62933333-218.112 268.62933333S203.32088889 713.84177778 203.32088889 565.36177778c0-91.59111111 85.33333333-202.29688889 94.77688889-221.184 9.44355555-19.00088889 6.37155555-50.51733333 0-60.07466667-12.62933333-12.62933333-56.88888889-28.44444445-56.88888889-28.44444444l-167.48088889-72.704c-37.888-15.81511111-69.51822222-50.51733333-69.51822222-91.59111112v-69.632c0-44.25955555 37.888-72.704 82.14755555-72.704h669.92355556c44.25955555 0 82.14755555 28.44444445 82.14755556 72.704v69.632c0.11377778 41.07377778-31.51644445 78.96177778-69.40444445 91.59111112zM737.39377778 524.40177778c-19.00088889 0-34.816 9.44355555-34.816 31.63022222s15.81511111 31.63022222 34.816 31.63022222h246.55644444c19.00088889 0 34.816-9.44355555 34.816-31.63022222s-15.81511111-31.63022222-34.816-31.63022222H737.39377778zM788.02488889 385.36533333c-19.00088889 0-34.816 9.44355555-34.816 31.63022222s15.81511111 31.63022222 34.816 31.63022223h199.11111111c19.00088889 0 31.63022222-9.44355555 31.63022222-31.63022223 0-22.07288889-15.81511111-31.63022222-34.816-31.63022222H788.02488889zM854.35733333 255.77244444999997c-19.00088889 0-34.816 9.44355555-34.816 31.63022222s15.81511111 31.63022222 34.816 31.63022222h129.59288889c19.00088889 0 34.816-9.44355555 34.816-31.63022222s-15.81511111-31.63022222-34.816-31.63022222H854.35733333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="apkwenjian" unicode="&#59187;" d="M730.91413333 570.7957333300001h197.23093334c-0.66773333 1.152-1.42826667 2.2528-2.38613334 3.21066667L642.4128 857.34933333c-0.9504 0.9504-2.0416 1.70666667-3.18293333 2.3712v-197.2416c0.00106667-50.55466667 41.1296-91.6832 91.68426666-91.6832zM509.4944 379.86026667H489.52533333v-68.38613334h19.55946667c26.53226667 0 39.79946667 11.53386667 39.79946667 34.60373334-0.00106667 22.51946667-13.13066667 33.7824-39.38986667 33.7824zM314.45653333 378.35519999999997h-1.23093333c-0.5472-6.2016-1.77813333-12.1728-3.6928-17.9168l-24.208-73.9936h56.48746667l-24.07253334 73.44746667c-1.552 4.6496-2.64746667 10.80426667-3.2832 18.46293333zM730.91413333 539.9584c-67.5584 0-122.52053333 54.96213333-122.52053333 122.52053333V861.86666667H216.24746667c-67.5584 0-122.52053333-54.96213333-122.52053334-122.52053334v-710.69226666c0-67.5584 54.96213333-122.52053333 122.52053334-122.52053334h591.50506666c67.5584 0 122.52053333 54.96213333 122.52053334 122.52053334V539.9584H730.91413333z m-362.57066666-336.94506667l-15.86453334 48.5536h-77.0048l-15.59146666-48.5536h-48.96426667l77.54986667 211.86026667h53.06773333l76.04693333-211.86026667h-49.23946666z m204.13333333 92.66346667c-15.91146667-13.0848-35.8112-19.3536-59.70026667-18.80533333h-23.25226666v-73.85706667h-45.13386667V414.8736h72.8992c52.70186667 0 79.05386667-22.34133333 79.05386667-67.01866667 0-21.7024-7.9552-39.0944-23.86666667-52.17813333z m171.57973333-92.66346667l-64.14506666 92.5952c-1.6416 2.36906667-3.51253333 6.06186667-5.60853334 11.0784h-0.68373333v-103.6736h-45.13386667V414.8736h45.13386667v-100.11733333h0.68373333c2.0064 4.37653333 4.0128 8.15893333 6.0192 11.35253333l60.72746667 88.7648h53.888l-75.77173333-101.07413333 82.064-110.78613334h-57.17333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="guanlian1" unicode="&#59050;" d="M628.08003318 178.87474725000004H92.18366578c-47.27815585 0-85.74293333 38.45506845-85.74293333 85.74293334V800.5152616299999c0 47.28907852 38.46477748 85.74293333 85.74293333 85.74293334h535.8963674c47.27815585 0 85.74293333-38.45506845 85.74293334-85.74293334v-107.17927348c0-23.67548682-19.19597985-42.87146667-42.87146667-42.87146667-23.67548682 0-42.87146667 19.19597985-42.87146667 42.87146667v107.17927348H92.18366578v-535.89636741h535.8963674V393.23329422c0 23.67548682 19.19597985 42.87146667 42.87146667 42.87146667 23.67548682 0 42.87146667-19.19597985 42.87146667-42.87146667v-128.61561363c0.00121363-47.28786489-38.46477748-85.74293333-85.74293334-85.74293334zM928.18272711-121.22673302999999H392.2863597c-47.27815585 0-85.74293333 38.45506845-85.74293333 85.74293333V93.13181392000001c0 23.67548682 19.19597985 42.87146667 42.87146666 42.87146667s42.87146667-19.19597985 42.87146667-42.87146667v-128.61561362h535.89636741V500.4125677H392.2863597v-107.17927348c0-23.67548682-19.19597985-42.87146667-42.87146667-42.87146667s-42.87146667 19.19597985-42.87146666 42.87146667v107.17927348c0 47.28907852 38.46477748 85.74293333 85.74293333 85.74293333h535.89636741c47.27815585 0 85.74293333-38.45506845 85.74293334-85.74293333v-535.8963674c0-47.28907852-38.46477748-85.74293333-85.74293334-85.74293333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shifouyunxuweiwanchengpandianrenwukaidan" unicode="&#59051;" d="M862.84288-127.26271999999994h-708.77184c-65.1264 0-118.12864 52.9408-118.12864 117.98528v786.55488c0 65.06496 53.00110222 117.98528 118.12864 117.98528h708.77184c65.1264 0 118.12864-52.9408 118.12864-117.98528v-786.55488c0-65.04448-53.00110222-117.98528-118.12864-117.98528zM154.07104 816.60928c-21.72245333-0.02389333-39.33070222-17.6128-39.38304-39.32728889v-786.56056889c0-21.7088 17.67310222-39.3216 39.3728-39.3216h708.77184c0.00341333 0 0.00796445 0 0.00910222 0 21.72472889 0 39.33866667 17.60028445 39.36369778 39.31932445v786.55715555c-0.04096 21.71790222-17.65034667 39.31022222-39.37166222 39.3216h-708.76273778zM667.17696 343.61230221999995h-434.62769778c-0.00682667 0-0.01251555 0-0.02161777 0-21.72472889 0-39.33866667 17.60028445-39.36369778 39.31932445 0 21.71107555 17.64352 39.32387555 39.38304 39.32387555h434.62769778c0.01137778 0 0.02616889 0 0.04096 0 21.72017778 0 39.32956445-17.60256 39.34208-39.32046222 0-21.70993778-17.6128-39.32273778-39.38304-39.32273778zM782.71488 109.29151999999999h-550.32718222c-0.00796445 0-0.02048 0-0.03072 0-21.72359111 0-39.33639111 17.60824889-39.34208 39.33070222 0.01137778 21.72017778 17.62190222 39.3216 39.34208 39.3216 0.01024 0 0.02275555 0 0.03185777 0h550.32718223c0 0 0 0 0 0 21.71790222 0 39.3216-17.60483555 39.3216-39.3216 0-21.71790222-17.60483555-39.3216-39.3216-39.3216 0 0 0 0 0 0zM193.09681778 637.98272c0.01706667-32.58368 26.43626667-58.99264 59.02336-58.99264 0.01365333 0 0.02844445 0 0.04209777 0 0.00796445 0 0.01820445 0 0.02730667 0 32.58368 0 59.00060445 26.40213333 59.02336 58.98012445-0.01137778 32.59050667-26.43285333 59.00515555-59.02336 59.00515555-0.01024 0-0.02275555 0-0.03185777 0-0.00910222 0-0.02503111 0-0.03982223 0-32.58709333 0-59.00629333-26.40782222-59.02336-58.99150222zM448.28672 637.98272c0.01706667-32.58368 26.43626667-58.99264 59.02336-58.99264 0.01365333 0 0.02844445 0 0.04323555 0 0.00910222 0 0.02389333 0 0.03982223 0s59.00060445 26.40213333 59.02336 58.98012445c-0.01137778 32.59050667-26.43285333 59.00515555-59.02336 59.00515555-0.01365333 0-0.02844445 0-0.04209778 0-0.00910222 0-0.02389333 0-0.03982222 0-32.58709333 0-59.00629333-26.40782222-59.02336-58.99150222zM704.38912 637.98272c0.01706667-32.58368 26.43626667-58.99264 59.02336-58.99264 0.01365333 0 0.02844445 0 0.04209778 0 0.00910222 0 0.02503111 0 0.03982222 0s59.00060445 26.40213333 59.02336 58.98012445c-0.01137778 32.59050667-26.43285333 59.00515555-59.02336 59.00515555-0.01365333 0-0.02844445 0-0.04209778 0-0.00910222 0-0.02503111 0-0.03982222 0-32.58709333 0-59.00629333-26.40782222-59.02336-58.99150222z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tubiaozhizuomoban-" unicode="&#59052;" d="M204.2963437 184.41860741000005c-19.07825778 0-35.0496237-25.70467555-35.0496237-44.78293333s15.97136592-44.78293333 35.0496237-44.78293333h120.73187555c19.41807408 0 35.0496237 25.31631408 35.04962372 44.78293333s-15.57086815 44.78293333-35.04962372 44.78293333z m550.29608297 199.39934814c0 19.41807408-15.97136592 44.78293333-35.0496237 44.78293334H204.2963437c-19.07825778 0-35.0496237-25.31631408-35.0496237-44.78293334s14.4057837-43.61784889 35.0496237-43.61784888H719.53066667c19.07825778 0 35.0496237 25.70467555 35.0496237 44.78293333zM204.2963437 581.2633599999999h515.63482075c19.41807408 0 35.0496237 25.31631408 35.0496237 44.78293333s-15.57086815 44.78293333-35.0496237 44.78293334H204.2963437c-19.07825778 0-35.0496237-25.70467555-35.0496237-44.78293334s15.97136592-44.78293333 35.0496237-44.78293333z m0 0M908.85688889 362.00903111V791.9616a94.66311111 94.66311111 0 0 1-94.25047704 93.44948148H119.01458963A123.79022222 123.79022222 0 0 1 9.55733333 776.76695703V-8.002370369999994a123.45040592 123.45040592 0 0 1 109.4329837-108.65626074h539.02146372a42.06440297 42.06440297 0 0 1 46.73687703 42.47703703c0 28.03484445-20.25547852 54.52837925-38.94537481 54.91674075H147.44993185c-27.65861925 0-38.94537482 12.4639763-38.94537482 38.94537481V754.15703703c0 24.15122963 9.70903703 33.88453925 33.88453927 33.88453927h633.63602962c24.53959111 0 34.27290075-9.70903703 34.27290075-33.88453927v-392.14800592c0-19.07825778 26.09303703-35.82634667 55.6934637-35.82634666a38.94537482 38.94537482 0 0 1 42.47703704 35.82634666z m0 0M460.55424 133.78597924999997a68.93416297 68.93416297 0 1 1 68.93416297 70.09924742 69.72302222 69.72302222 0 0 1-68.93416297-70.09924742z m275.73665185 70.09924742a70.09924741 70.09924741 0 1 1 68.93416297-70.09924742 69.33466075 69.33466075 0 0 1-68.93416297 70.09924742z m207.96757333 0A70.09924741 70.09924741 0 1 1 1013.22903703 133.78597924999997a70.09924741 70.09924741 0 0 1-68.93416295 70.09924742z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="torrent" unicode="&#59053;" d="M803.77192 896H220.193955A219.767388 219.767388 0 0 1 0.528943 676.096111v-584.192222a219.767388 219.767388 0 0 1 219.665012-219.903889H803.77192a219.767388 219.767388 0 0 1 219.665011 219.903889V676.096111A219.767388 219.767388 0 0 1 803.77192 896zM803.77192 861.874629a185.880894 185.880894 0 0 0 185.539641-185.778518v-584.192222a185.880894 185.880894 0 0 0-185.539641-185.778518H220.193955a185.880894 185.880894 0 0 0-185.539641 185.778518V676.096111A185.880894 185.880894 0 0 0 220.193955 861.874629H803.77192m0 34.125371H220.193955A219.767388 219.767388 0 0 1 0.528943 676.096111v-584.192222a219.767388 219.767388 0 0 1 219.665012-219.903889H803.77192a219.767388 219.767388 0 0 1 219.665011 219.903889V676.096111A219.767388 219.767388 0 0 1 803.77192 896zM387.374146 183.052754H232.479088V556.31606h145.578832c74.666311-3.719665 114.456493-34.842004 119.438797-93.298764-3.719665-46.035125-28.631186-73.403672-74.666311-82.105642v-1.876895c55.999733-8.70197 85.859433-40.438564 89.579098-95.175659-3.753791-64.701703-45.420868-98.281068-125.035358-100.806346z m-18.666578 335.93015H271.655014v-125.035358h97.052554c51.017429 2.491152 79.000233 24.877395 83.982538 67.192855-2.525277 37.29903-30.508081 56.579865-83.982538 57.842503z m5.596561-162.368514H271.655014v-139.982271h110.122571c58.45676 0 87.702203 24.263139 87.702203 72.789416-3.719665 42.31546-35.45626 64.701703-95.175659 67.192855zM850.182424 556.31606v-35.456261h-126.912254v-337.772919h-42.929716v337.772919h-126.912254V556.31606h296.754224z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gongsi" unicode="&#58884;" d="M33.29888711-67.39444621999996H498.34666667V862.70111111H33.29888889V-67.39444445000004zM323.95332267 746.43888355h116.26222222v-116.26222222H323.95333332V746.4388888999999zM323.95332267 513.91556267h116.26222222V397.65333333H323.95333332V513.91555555zM323.95332267 281.39110400000004h116.26222222v-116.26222222H323.95333332V281.39111111zM91.43000178 746.43888355h116.26222222v-116.26222222H91.43V746.4388888999999zM91.43000178 513.91556267h116.26222222V397.65333333H91.43V513.91555555zM91.43000178 281.39110400000004h116.26222222v-116.26222222H91.43V281.39111111zM556.47778133 572.04667733h406.91666667v-58.13111111H556.47777778V572.04666668zM556.47778133-67.39444621999996h116.26111112V165.13h174.39333332v-232.52333332h116.26222223V455.78444445H556.47777778V-67.39444445000004z"  horiz-adv-x="1000" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="msnui-forbid" unicode="&#59078;" d="M512.893 829.569q91.765 0 172.824-34.667t141.725-95.333 95.333-141.725 34.667-172.824-34.667-172.824-95.333-141.725-141.725-95.333-172.824-34.667-173.333 34.667-141.725 95.333-95.333 141.725-35.176 172.824 35.176 172.824 95.333 141.725 141.725 95.333 173.333 34.667zM707.638 321.804q29.569 0 49.451 18.353t19.882 46.902q0 29.569-19.882 45.882t-49.451 16.314h-390.51q-29.569 0-49.451-16.314t-19.882-45.882q0-28.549 19.882-46.902t49.451-18.353h390.51z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="doc" unicode="&#58970;" d="M601.99657813 593.90472469L601.99657813 803.89675031 212.01138875 803.89675031 212.01138875 443.91042094 811.98860375 443.91042094 811.98860375 593.90472469ZM811.98860375 623.90358563L631.99543906 623.90358563 631.99543906 803.89675031ZM235.74090031 240.22324031000005l-42.83016093 0L192.91073844 88.29584719000002l42.83016094 0c43.30983563 0 75.96417656 31.61728313 75.96417656 75.23123344l0 0.70320281c0 20.05328344-6.79986938 40.27445437-21.06347906 54.72417656C276.24176 233.60660718999998 255.9659075 240.22324031000005 235.74090031 240.22324031000005zM290.64063781 218.95446094C297.23232875 212.27546905999998 284.02016656 225.69293249999998 290.64063781 218.95446094L290.64063781 218.95446094zM32.01822406 384.24175594l0-419.98405125 959.96354438 0 0 419.98405125L32.01822406 384.24175594zM369.65170812 164.23028344c0-74.26516781-62.03058281-125.97219094-133.91080874-125.97219094L137.45361875 38.25809344000004l0 252.0019425L235.74090031 290.26003593999997c71.69411156 0 133.91080875-50.93762437 133.91080875-125.26898719L369.65170812 164.23028344zM662.5804625 164.23028344c0-168.63734344-267.82161656-169.70989687-267.82161656-0.70320282l0 0.70320282c0 168.64885594 267.82161656 169.77609187 267.82161656 0.76172343L662.5804625 164.23028344zM900.10965781 60.23007562999999c-84.2587125-66.55583531-212.39423625-2.87133281-212.39423625 103.297005l0 0.70320281c0 118.76459719 149.15199469 172.27711594 230.79168282 91.46150906l-35.27240532-40.66203094c-51.98139656 46.72320188-137.57264531 29.34362531-137.57264531-50.03679468l0-0.76172344c0-80.61414375 87.15882656-98.07142781 139.33017375-49.62715313l35.27240531-35.68204781C913.82068156 71.94853124999997 907.08221094 65.73770156 900.10965781 60.23007562999999zM528.87399594 164.87496655999996m-76.87172063 0a75.1209375 75.1209375 0 1 1 153.74344219 0 75.1209375 75.1209375 0 1 1-153.74344219 0Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jpg" unicode="&#58971;" d="M601.99657813 593.90472469L601.99657813 803.89675031 212.01138875 803.89675031 212.01138875 443.91042094 811.98860375 443.91042094 811.98860375 593.90472469ZM811.98860375 623.90358563L631.99543906 623.90358563 631.99543906 803.89675031ZM494.65399719 240.22324031000005l-42.83016094 0 0-77.04824156 43.91422594 0c22.74425906 0 43.91422594 13.44624375 43.91422593 38.14277906l0 0.76172344C539.65228813 228.21602155999994 518.50726438 240.22324031000005 494.65399719 240.22324031000005zM32.01822406 384.24175594l0-419.78354719 959.96354438 0L991.98176844 384.24175594 32.01822406 384.24175594zM329.34079906 125.38430156000004c0-94.358745-115.27448344-120.23911781-171.70246593-52.90812843l34.92032437 38.84598281c27.37312125-30.04395 79.91861531-38.01230719 79.91861531 16.5813975L272.47727281 290.26003593999997l56.86352625 0L329.34079906 125.38430156000004zM592.61414 202.43158313000004c0-57.59359125-48.51526687-88.59017625-101.89059844-88.59017626l-42.09817781 1e-8 0-75.58331438-55.45711969 0 0 252.0019425 102.97466344 0c52.04951062 0 96.4712325-32.12286094 96.4712325-87.12524906L592.61414 202.43158313000004zM871.50185375 73.88162062000004c-86.77892344-73.82098969-240.10792687-38.88627469-240.10792687 89.64546001l0 0.70320281c0 119.26729687 146.35836937 168.19988062 231.08524406 95.79681l-34.92032438-42.12695813c-52.72297406 44.36416125-138.21732844 24.63609656-138.21732843-53.08368937l0-0.76172344c0-66.16921688 73.92076219-104.03378531 128.49144281-64.86066469l0 36.26821032-55.77946125 0 0 47.86962468L871.50185375 183.33189281 871.50185375 73.88162062000004z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xls" unicode="&#58972;" d="M601.99657813 593.90472469L601.99657813 803.89675031 212.01138875 803.89675031 212.01138875 443.91042094 811.98860375 443.91042094 811.98860375 593.90472469ZM811.98860375 623.90358563L631.99543906 623.90358563 631.99543906 803.89675031ZM32.01822406 384.24175594l0-419.98405125 959.96354438 0 0 419.98405125L32.01822406 384.24175594zM342.49444063 38.25809344000004l-56.54118469 86.42204625-56.83378688-86.42204625-63.04461562 0 87.8869725 128.13936187-84.25487532 123.86258157 64.80214407 0 52.90812843-81.73562344 53.25925032 81.73562344 63.04461562 0-84.25487531-123.10085719 87.82845188-128.90108531L342.49444063 38.25809344000004zM629.65174812 38.25809344000004L448.60329875 38.25809344000004l0 252.0019425 55.42738031 0L504.03067906 88.29584719000002l125.62011 0L629.65078906 38.25809344000004zM860.79551281 112.78708218999998c0-105.50734594-145.3654425-93.2190375-199.03529437-37.79165719l32.69367375 39.19806375c9.72588563-10.25352844 101.59799625-58.0646325 111.61648406-6.79699125l0 0.70320281c0 51.36357562-134.64375187 25.39206375-134.64375188 109.09723219l0 0.70320281c0 95.89274438 124.624305 93.2190375 181.45809188 43.88544563l-25.89764156-38.78746219c-20.62409719 14.99943-100.83627281 47.10022594-100.83627282-0.05852062l0-0.70320282c-0.4096425-47.04938062 134.64375187-26.69102344 134.64375188-108.74611031L860.79455375 112.78708218999998z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="hr" unicode="&#59007;" d="M770.31341056 447.96869859c0 41.46520405-23.69456811 62.19780551-71.08370546 62.19780552l-85.89237475 0 0-119.9538267 85.89237475 0C748.58533661 389.21836999 772.28106979 408.46998869 770.31341056 447.96869859zM955.0684069 675.38230158L68.26212352 675.38230158c-36.45524195 0-66.00737906-29.5521371-66.00737906-66.00737905l0-450.16886045c0-36.45640704 29.5521371-66.00737906 66.00737906-66.00737906l886.80628451 0c36.45640704 0 66.00737906 29.5521371 66.00737906 66.00737906L1021.07578709 609.37492139C1021.07578709 645.82900053 991.52364999 675.38230158 955.0684069 675.38230158zM449.97742023 224.35186233000002l-51.83208676 0L398.14533347 372.44320768 232.28451726 372.44320768l0-148.09134535-51.83208675 0L180.45243051 544.22795605l51.83208675 0 0-137.72446151 165.86198016 0 0 137.72446151 51.83208676 0L449.97858418 224.35186233000002zM782.16127715 224.35186233000002l-100.702208 131.80052821-68.1217388 0 0-131.80052821-51.83208676 0L561.50524359 544.22795605l149.57232811 0c75.01785885 0 112.54890951-31.60711737 112.54890951-94.7782747 0.97218674-57.26934471-27.65200725-87.8844837-85.89237476-91.81630805l105.14515741-133.28267605L782.16127715 224.35069838000004z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="calculator" unicode="&#59098;" d="M850.54881451 892.91562211l-677.13022862 0c-37.8046976 0-68.5514331-30.54880427-68.55143311-68.05427768l0-881.79138219c0-37.43910912 30.74673437-67.98791339 68.55143311-67.98791339l677.13022862 0c37.8046976 0 68.58403271 30.54764032 68.58403271 67.98791339l0 881.79138219C919.13284722 862.36798293 888.35351211 892.91562211 850.54881451 892.91562211zM300.14989995-20.21744980999995c-34.12668643 0-61.79152896 27.49951203-61.79152896 61.29553863 0 33.86122695 27.66600647 61.29553863 61.79152896 61.29553863 34.09292174 0 61.75892821-27.43431168 61.75892821-61.29553863C361.90882816 7.282063360000052 334.24398563-20.21744980999995 300.14989995-20.21744980999995zM300.14989995 190.63775914999997c-34.12668643 0-61.79152896 27.49951203-61.79152896 61.36073898 0 33.79486151 27.66600647 61.29553863 61.79152896 61.29553864 34.09292174 0 61.75892821-27.49951203 61.75892821-61.29553864C361.90882816 218.13727231999997 334.24398563 190.63775914999997 300.14989995 190.63775914999997zM300.14989995 401.49296811c-34.12668643 0-61.79152896 27.50067712-61.79152896 61.36190293 0 33.82862621 27.66600647 61.29553863 61.79152896 61.29553863 34.09292174 0 61.75892821-27.46691243 61.75892821-61.29553863C361.90882816 428.99364523 334.24398563 401.49296811 300.14989995 401.49296811zM512.56410112-20.21744980999995c-34.06032099 0-61.7600933 27.49951203-61.7600933 61.29553863 0 33.86122695 27.69977117 61.29553863 61.7600933 61.29553863 34.12668643 0 61.79152896-27.43431168 61.79152896-61.29553863C574.35563008 7.282063360000052 546.68962361-20.21744980999995 512.56410112-20.21744980999995zM512.56410112 190.63775914999997c-34.06032099 0-61.7600933 27.49951203-61.7600933 61.36073898 0 33.79486151 27.69977117 61.29553863 61.7600933 61.29553864 34.12668643 0 61.79152896-27.49951203 61.79152896-61.29553864C574.35563008 218.13727231999997 546.68962361 190.63775914999997 512.56410112 190.63775914999997zM512.56410112 401.49296811c-34.06032099 0-61.7600933 27.50067712-61.7600933 61.36190293 0 33.82862621 27.69977117 61.29553863 61.7600933 61.29553863 34.12668643 0 61.79152896-27.46691243 61.79152896-61.29553863C574.35563008 428.99364523 546.68962361 401.49296811 512.56410112 401.49296811zM786.76983239 41.07692486999997c0.03260075-33.79486151-27.66600647-61.29553863-61.72749255-61.29553863-34.09292174 0-61.79152896 27.49951203-61.79152896 61.29553863L663.25081088 251.99849813000003c0 33.79486151 27.69860722 61.29553863 61.79152896 61.29553864 34.09408569 0 61.72749255-27.49951203 61.72749255-61.29553864L786.76983239 41.07692486999997zM725.04233984 401.49296811c-34.09292174 0-61.79152896 27.50067712-61.79152896 61.36190293 0 33.82862621 27.69860722 61.29553863 61.79152896 61.29553863 34.09408569 0 61.72749255-27.46691243 61.72749255-61.29553863C786.76983239 428.99364523 759.10382478 401.49296811 725.04233984 401.49296811zM804.85950237 643.46050105c0-17.42718521-14.24632832-31.57571357-31.77364367-31.57571356l-518.75800064 0c-17.55991609 0-31.74104291 14.14852722-31.74104291 31.57571356l0 98.5041169c0 17.42718521 14.18112797 31.54194887 31.74104291 31.54194888l518.75800064 0c17.52731534 0 31.77364366-14.11476253 31.77364367-31.54194888L804.85950237 643.46050105z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="normal" unicode="&#59035;" d="M512-124.74513854999998C792.97218166-124.74513854999998 1020.74513855 103.02781833999995 1020.74513855 384 1020.74513855 664.9721816599999 792.97218166 892.74513855 512 892.74513855 231.02781834 892.74513855 3.25486145 664.9721816599999 3.25486145 384 3.25486145 103.02781833999995 231.02781834-124.74513854999998 512-124.74513854999998ZM495.03654917 199.15815346C494.65840247 198.75483979 494.27243881 198.35619522000002 493.87865714 197.96241357999997 474.05134976 178.13510619 441.80725079 178.08639185000004 421.94974064 197.94390203L241.97466435 377.91897830000005C222.15920615 397.73443652 222.12544217 429.98016206 241.99317592 449.84789583 261.82048133 469.67520121 294.06458127 469.72391554 313.92209143 449.86640538L457.88601869 305.90247912999996 714.4440587 562.46051815C734.29380951 582.31026896 766.53161969 582.25526488 786.3589251 562.42795748 806.22665885 542.56022373 806.20293264 510.32453795 786.39148677 490.51309108L495.03654917 199.15815346 495.03654917 199.15815346Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="crm12" unicode="&#58975;" d="M864.020 79.99l-416.020 128 416.020 480.020-544.020-480.020-320 128 1024 544.020-159.98-800.020zM448-112.010v224.020l128-64-128-160.020z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bpm" unicode="&#58991;" d="M849.5 834L174.5 834C112.371875 834 62 783.628125 62 721.5l0-675c0-62.128125 50.371875-112.5 112.5-112.5l675 0c62.128125 0 112.5 50.371875 112.5 112.5L962 721.5C962 783.628125 911.628125 834 849.5 834zM517.90625 372.49687500000005c32.596875-2.896875 56.53125-31.640625 53.6625-64.096875s-31.5-56.559375-64.096875-53.6625-56.53125 31.640625-53.6625 64.096875C456.678125 351.290625 485.28125 375.39374999999995 517.90625 372.49687500000005zM714.471875 212.21249999999998c0-9.590625-5.11875-18.478125-13.44375-23.259375l-175.6125-101.390625c-4.1625-2.390625-8.803125-3.6-13.44375-3.6s-9.28125 1.209375-13.44375 3.6l-175.6125 101.390625c-8.325 4.809375-13.44375 13.66875-13.44375 23.259375L309.471875 406.78125l0 8.2125L309.471875 628.040625c0 10.940625 6.834375 20.7 17.128125 24.440625l82.321875 29.98125c16.959375 6.1875 34.93125-6.384375 34.93125-24.440625l0-110.615625 0-39.346875 0-94.246875c-2.053125-3.459375-4.640625-6.665625-7.903125-9.39375-7.70625-6.46875-17.325-9.16875-26.60625-8.353125-5.034375 0.45-9.984375 1.940625-14.5125 4.44375-9.028125-12.15-16.228125-25.7625-21.15-40.5 13.1625-6.440625 21.65625-20.503125 20.278125-35.971875-1.378125-15.46875-12.20625-27.7875-26.296875-31.8375 2.278125-15.384375 6.946875-30.065625 13.696875-43.59375 4.865625 1.659375 9.984375 2.25 15.01875 1.8 9.28125-0.815625 18.253125-5.203125 24.721875-12.909375 9.95625-11.896875 11.025-28.265625 3.9375-41.0625 12.121875-9.028125 25.7625-16.228125 40.5-21.15 6.440625 13.134375 20.503125 21.628125 35.94375 20.25 15.440625-1.378125 27.7875-12.20625 31.809375-26.26875 15.384375 2.25 30.065625 6.946875 43.59375 13.696875-4.725 13.8375-0.7875 29.784375 11.109375 39.740625 7.70625 6.46875 17.325 9.16875 26.60625 8.353125 5.034375-0.45 9.95625-1.940625 14.45625-4.415625 9.028125 12.121875 16.228125 25.7625 21.178125 40.5-13.134375 6.440625-21.628125 20.503125-20.278125 35.971875 1.378125 15.46875 12.20625 27.815625 26.296875 31.8375-2.25 15.384375-6.946875 30.065625-13.696875 43.59375-4.865625-1.659375-10.0125-2.278125-15.046875-1.828125-9.28125 0.815625-18.253125 5.175-24.721875 12.909375-9.95625 11.925-11.025 28.321875-3.909375 41.11875-12.121875 9.028125-25.7625 16.228125-40.5 21.178125-6.440625-13.1625-20.503125-21.684375-35.971875-20.30625-3.684375 0.3375-7.2 1.2375-10.4625 2.559375l0 109.096875c4.640625 0 9.28125-1.209375 13.44375-3.6l175.6125-101.390625c8.325-4.809375 13.44375-13.66875 13.44375-23.259375L714.44375 212.21249999999998z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jinzhi" unicode="&#59107;" d="M512 879.16088889c-136.708096 0-260.46919111-55.39976533-350.07874845-144.98019556-0.01456355-0.01456355-0.02912711-0.02912711-0.04369066-0.04369066s-0.02912711-0.02912711-0.05825422-0.04369067C72.23887645 644.48375467 16.83911111 520.7080960000001 16.83911111 384c0-273.47444622 221.67187911-495.16088889 495.16088889-495.16088889 273.47444622 0 495.16088889 221.68644267 495.16088889 495.16088889C1007.16088889 657.4890097800001 785.47444622 879.16088889 512 879.16088889zM914.31822222 384c0-94.35727645-32.49129245-181.141504-86.900736-249.76497778L262.23502222 699.4320497799999c68.60891022 54.38031645 155.40770133 86.900736 249.76497778 86.900736C734.21073067 786.31822222 914.31822222 606.19616711 914.31822222 384zM109.68177778 384c0 94.37184 32.49129245 181.141504 86.900736 249.76497778l565.19702755-565.21159111c-68.62347378-54.38031645-155.39313778-86.900736-249.76497778-86.900736C289.80383289-18.318222220000052 109.68177778 161.78926933000002 109.68177778 384z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="pptfuzhi" unicode="&#58976;" d="M867.84 591.36 636.16 591.36 629.76 834.56 154.88 834.56 154.88 417.28 867.84 417.28ZM655.36 834.56 655.36 618.24 867.84 618.24ZM251.30496 211.89632l-23.57248 0 0-64.96768 34.66752 0c22.18496 0 33.28 11.61728 33.28 34.8672C295.68 201.84576 280.8832 211.89632 251.30496 211.89632zM35.84 352l0-409.6 952.32 0 0 409.6L35.84 352zM269.33248 78.78656l-41.6 0 0-90.32704-83.2 0 0 291.57888 122.02496 0c71.17312-1.06496 107.68384-33.82272 109.54752-98.24768C375.17312 114.17088 339.57888 79.82592 269.33248 78.78656zM524.48256 78.78656l-41.6 0 0-90.32704-83.2 0 0 291.57888 122.03008 0c71.17312-1.06496 107.67872-33.82272 109.54752-98.24768C630.3232 114.17088 594.72384 79.82592 524.48256 78.78656zM879.46752 203.97568l-74.88 0 0-215.51616-84.58752 0 0 215.51616-74.88 0 0 76.06272 234.34752 0L879.46752 203.97568zM506.45504 211.89632l-23.57248 0 0-64.96768 34.66752 0c22.18496 0 33.28 11.61728 33.28 34.8672C550.83008 201.84576 536.02816 211.89632 506.45504 211.89632z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="html" unicode="&#59079;" d="M869.56139-96.952238l-0.448112-0.256064-0.768192-0.32008c-16.004001-18.692673-38.473618-30.407602-63.11978-30.407602l-586.386597 0c-24.646162 0-47.115779 11.714929-63.631908 30.727682l0 0.256064-0.192048-0.256064C138.434609-78.003501 128.384096-51.180795 128.384096-22.437609L128.384096 790.437609c0 28.807202 10.050513 55.053763 26.566642 74.002501C171.722931 883.772943 194.128532 896 218.83871 896l399.587897 0c8.898225 0 17.732433-4.737184 23.941985-11.714929l243.452863-284.615154c6.72168-8.386097 9.794449-18.180545 9.794449-28.487122l0-0.576144 0-593.044261C895.615904-51.180795 885.565391-77.427357 869.56139-96.952238zM396.803201 377.086272C408.646162 385.472368 412.551138 404.357089 405.317329 417.608402c-6.977744 14.339585-23.045761 18.884721-34.888722 10.498625L202.130533 313.134284c-15.491873-11.522881-16.068017-39.113778 0-50.700675l168.234059-115.292823c11.842961-8.386097 27.910978-4.16104 34.888722 10.114529 7.233808 13.955489 3.328832 32.136034-8.514129 40.522131L265.634409 287.911978 396.803201 377.086272zM584.498125 509.91948C571.11878 515.872968 556.523131 508.191048 551.08177 493.147287l-130.592648-389.793448c-5.185296-14.659665 1.216304-32.136034 14.275569-38.089522C448.464116 58.990748 462.995749 66.672668 468.501125 82.036509l130.592648 390.113528C603.95899 486.809702 597.237309 503.645911 584.498125 509.91948zM614.265566 417.608402C606.967742 404.357089 610.616654 385.472368 622.779695 377.086272l131.168792-89.174294-131.168792-90.19855c-12.163041-8.386097-15.811953-26.566642-8.514129-40.522131 7.297824-14.339585 23.109777-18.564641 34.952738-10.114529l167.593898 115.292823c17.348337 11.586897 16.708177 39.177794 0 50.700675L649.218305 428.107027C637.375344 436.493123 621.563391 431.947987 614.265566 417.608402zM640.384096 769.12028l0-148.709177c0-11.650913 4.993248-22.917729 12.035009-30.663666L653.315329 588.531133c8.258065-8.322081 19.716929-13.379345 32.072018-13.379345l146.852713 0L640.384096 769.12028z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wenjian" unicode="&#58977;" d="M926.094668-35.68140800000003l-94.118588-22.349007c-48.557926-11.549034-50.984185-10.374278-62.795185 36.396955l-9.561773 35.471886 195.461717 46.496987 6.324032-23.423479C976.255091-21.95682499999998 981.903741-22.382520999999997 926.094668-35.68140800000003L926.094668-35.68140800000003zM635.37747 472.681762c-11.774161 46.772256-10.17371 48.922223 38.3484 60.471256l94.155427 22.372543c48.508807 11.550057 50.958602 10.349719 59.708893-24.322965l114.467031-422.744163-195.473997-46.471404L635.37747 472.681762 635.37747 472.681762zM502.612701-64.27974600000005l-58.496276 0c-49.958832 0-64.87045 1.726318-64.87045 49.921993L379.245975 718.314135l188.224896 0 0-732.671888C567.470871-62.55445199999997 560.07032-64.27974600000005 502.612701-64.27974600000005L502.612701-64.27974600000005zM379.245975 781.809261c0 48.146557 14.911618 49.846268 64.87045 49.846268l58.496276 0c49.958832 0 64.85817-1.699712 64.85817-49.846268L567.470871 743.186615 379.245975 743.186615 379.245975 781.809261 379.245975 781.809261zM250.143619-64.27974600000005L102.029256-64.27974600000005c-49.983391 0-52.083216 1.726318-52.083216 49.921993l0 41.896202 252.257258 0 0-41.896202C302.202275-62.55445199999997 300.102451-64.27974600000005 250.143619-64.27974600000005L250.143619-64.27974600000005zM49.945017 96.08359099999996l252.257258 0 0-43.647079L49.945017 52.43651199999999 49.945017 96.08359099999996 49.945017 96.08359099999996zM49.945017 482.555643l252.257258 0 0-361.573989L49.945017 120.98165400000005 49.945017 482.555643 49.945017 482.555643zM49.945017 595.122395c0 48.172139 2.099824 49.871851 52.083216 49.871851l148.114362 0c49.958832 0 52.058656-1.699712 52.058656-49.871851l0-62.795185L49.945017 532.3272099999999 49.945017 595.122395 49.945017 595.122395zM49.945017 595.122395"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="miaobiao-copy" unicode="&#58978;" d="M583.91817103 804.2658668L440.64150722 804.2658668c-9.69809939 0-18.09327467 3.54662476-25.18053824 10.63688198-7.0932495 7.0932495-10.64186959 15.48842479-10.64186956 25.18053824 0 9.69610407 3.54862006 18.09127937 10.64186956 25.18552583 7.08726357 7.08726357 15.48343719 10.63488667 25.18053824 10.63488666l143.27666381 0c9.69610407 0 18.09127937-3.5476231 25.18452886-10.63488666 7.08826192-7.09424786 10.63588364-15.48942315 10.63588364-25.18552583 0-9.6911151-3.5476231-18.08629038-10.63588364-25.18053824C602.00945039 807.81249293 593.6142751 804.2658668 583.91817103 804.2658668L583.91817103 804.2658668zM855.93083602 596.04655928l40.29983529 39.18347104c6.71214987 7.47534749 10.06822412 16.06406557 10.0682241 25.7541837 0 9.69610407-3.5476231 18.09127937-10.64186956 25.18552586-7.08826192 7.08726357-15.48443415 10.63388831-25.1795413 10.6338883-9.69710105 0-18.27584254-3.3540803-25.75318534-10.06722714l-36.93278611-36.92680017c-38.80137443 37.32585764-83.76619264 66.43013102-134.89246345 87.32578762-51.1312584 20.89366129-104.66683822 31.34498174-160.61871272 31.34498173-118.65779914 0-219.95359757-41.98186372-303.89537654-125.9445928-83.93479469-83.95873846-125.9166584-185.25852753-125.93860686-303.88939058-0.02194847-118.63684902 41.95392931-219.93763641 125.93860686-303.89537653 83.98667286-83.96173074 185.28745889-125.9425975 303.89537654-125.94259751 118.61190827 0 219.91169733 41.98086538 303.89537652 125.94259751 83.98567453 83.95774149 125.96654129 185.25852753 125.93760852 303.89537653 0 47.01398047-7.46038333 92.54446425-22.38513922 136.57548884-14.92176363 44.03701055-36.18654798 84.33584748-63.79535279 120.8935199L855.93083602 596.04655928 855.93083602 596.04655928zM476.46291809 696.8056262499999c0 9.69809939 3.54263412 18.09327467 10.63588362 25.18053824 7.09424786 7.09624317 15.48443415 10.64186959 25.18053825 10.64186958s18.09127937-3.54662476 25.18053824-10.64186958c7.0932495-7.08726357 10.64087261-15.48343719 10.64087262-25.18053824l0-35.81941553c0-9.6911151-3.5476231-18.08629038-10.64087262-25.18053824-7.08925887-7.09025723-15.48443415-10.63688197-25.18053824-10.63688198-9.69510573 0-18.08629038 3.54662476-25.18053825 10.63688198-7.0932495 7.0932495-10.63588364 15.48842479-10.63588362 25.18053824L476.46291809 696.8056262499999 476.46291809 696.8056262499999zM189.9046015 302.78806473l-35.82141084 0c-9.69610407 0-18.08629038 3.54662476-25.18053824 10.64087262-7.09424786 7.08826192-10.63588364 15.48443415-10.63588364 25.17854292 0 9.69809939 3.54063882 18.09327467 10.63588364 25.17954127 7.0932495 7.09624317 15.48443415 10.64186959 25.18053824 10.64186958l35.82141084 0c9.69510573 0 18.08629038-3.54662476 25.17954128-10.64186958 7.09424786-7.08726357 10.63588364-15.48343719 10.63588363-25.17954127 0-9.69510573-3.54163715-18.09028101-10.63588363-25.17854292C207.99089189 306.33468947999995 199.59970725 302.78806473 189.9046015 302.78806473L189.9046015 302.78806473zM548.10075082-19.587672060000045c0-9.69510573-3.5476231-18.08928404-10.64087262-25.17754595-7.08925887-7.09424786-15.48443415-10.64087261-25.18053824-10.64087262-9.69510573 0-18.08629038 3.54662476-25.18053825 10.64087262-7.0932495 7.08826192-10.63588364 15.48443415-10.63588362 25.17754595l0 35.82240782c0 9.69211344 3.54263412 18.08629038 10.63588362 25.18053824 7.09424786 7.08726357 15.48443415 10.63688197 25.18053825 10.63688198s18.09127937-3.55061539 25.18053824-10.63688198c7.0932495-7.09424786 10.64087261-15.48842479 10.64087262-25.18053824L548.10075082-19.587672060000045 548.10075082-19.587672060000045zM713.76455052 453.91319579L534.66747284 310.63653199c-6.71314684-5.23064851-14.17253319-7.84746891-22.38713454-7.84746891-11.19955251 0-20.52353519 4.48041974-27.97294359 13.43327797-3.7271987 5.23164548-6.14947794 11.00900339-7.27482179 17.33805829-1.12035487 6.32805657-0.55868129 12.48950641 1.68402376 18.48435089 2.24569733 5.99085248 5.9848679 10.83740769 11.21551503 14.53866867L669.0291894 509.8650703c7.47135686 5.9689054 16.23865356 8.39018768 26.29191349 7.26983281 10.05026766-1.12135184 18.07332153-5.4052365 24.07015996-12.8596325 5.99683841-7.44940841 8.41812071-16.21171749 7.26883585-26.29091654-1.1433003-10.07919904-5.42618661-18.10325125-12.85564188-24.07015994l-0.0399063 0L713.76455052 453.91319579zM870.47549063 302.78806473l-35.8154249 0c-9.69710105 0-18.09227633 3.54662476-25.18552584 10.64087262-7.08826192 7.08826192-10.63588364 15.48443415-10.63588364 25.17854292 0 9.69809939 3.5476231 18.09327467 10.63588364 25.17954127 7.0932495 7.09624317 15.48842479 10.64186959 25.18552584 10.64186958l35.8154249 0c9.69610407 0 18.09127937-3.54662476 25.17954128-10.64186958 7.0932495-7.08726357 10.64186959-15.48343719 10.64186957-25.17954127 0-9.69510573-3.54862006-18.09028101-10.64186957-25.17854292C888.56676861 306.33468947999995 880.17159333 302.78806473 870.47549063 302.78806473L870.47549063 302.78806473z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chuchashenqing" unicode="&#58982;" d="M979.41981219 801.98485823l-36.13038938 36.13038938c0 0-68.24639344 20.07285187-112.40648156-24.08723625C750.59432563 733.73939479 646.21661188 625.34822854 646.21661188 625.34822854l-509.83982907 76.27516219-64.23200906-60.21762562 381.37674187-220.79671782-140.50717124-132.47840343L76.15915719 272.07217635999996l-44.15915719-16.05753657 236.85518531-132.47840343 128.46308813-240.86956969 20.07285187 44.15915719 16.05753657 224.81110218c0 0 393.420825 401.44959375 549.98553375 558.0152325C1015.55020063 741.7672326100001 979.41981219 801.98485823 979.41981219 801.98485823L979.41981219 801.98485823 979.41981219 801.98485823 979.41981219 801.98485823zM598.04307031 272.07217635999996l180.651945-345.24542157 52.18792594 56.20324126-44.15822625 461.66628749L598.04307031 272.07217635999996 598.04307031 272.07217635999996 598.04307031 272.07217635999996 598.04307031 272.07217635999996z"  horiz-adv-x="1030" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="caiwu" unicode="&#58985;" d="M959.358976 41.77408c0-12.484608-2.132992-24.1408-6.404096-34.980864-4.271104-10.83904-10.346496-20.363264-18.2272-28.575744-7.883776-8.214528-17.084416-14.618624-27.594752-19.213312-10.50624-4.599808-22.003712-6.897664-34.48832-6.897664L157.264896-47.893504c-12.479488 0-24.305664 2.297856-35.474432 6.897664-11.164672 4.594688-21.0176 10.998784-29.558784 19.213312-8.542208 8.213504-15.276032 17.737728-20.199424 28.575744-4.929536 10.840064-7.391232 22.49728-7.391232 34.980864L64.641024 533.477376c0 24.958976 8.700928 46.144512 26.109952 63.553536 17.409024 17.408 38.59456 26.115072 63.558656 26.115072l715.380736 0c24.964096 0 46.149632-8.707072 63.558656-26.115072 17.409024-17.409024 26.109952-38.59456 26.109952-63.553536l0-134.013952L735.680512 399.463424c-24.964096 0-46.149632-8.538112-63.558656-25.617408-17.409024-17.08032-26.109952-38.100992-26.109952-63.065088 0.658432-17.079296 4.271104-32.190464 10.840064-45.328384 5.25312-11.168768 13.959168-21.3504 26.109952-30.544896 12.15488-9.19552 29.728768-13.795328 52.718592-13.795328l223.678464 0L959.358976 41.77408 959.358976 41.77408zM825.34912 668.473344 377.988096 668.473344c35.474432 18.390016 68.97664 36.127744 100.507648 53.20704 27.590656 14.45376 54.856704 28.906496 81.789952 43.359232 26.932224 14.44864 47.95392 25.617408 63.064064 33.502208 22.990848 12.479488 43.518976 18.230272 61.586432 17.24416 18.061312-0.986112 33.33632-4.10624 45.815808-9.35936 14.45376-7.226368 26.937344-16.750592 37.448704-28.577792L825.34912 668.473344zM691.340288 310.780928c0 12.479488 4.27008 22.989824 12.808192 31.533056 8.543232 8.538112 19.053568 12.808192 31.533056 12.808192 12.479488 0 22.989824-4.27008 31.533056-12.808192 8.538112-8.542208 12.808192-19.053568 12.808192-31.533056s-4.27008-23.154688-12.808192-32.0256c-8.543232-8.865792-19.053568-13.302784-31.533056-13.302784-12.479488 0-22.989824 4.435968-31.533056 13.302784C695.610368 287.62624 691.340288 298.30144 691.340288 310.780928L691.340288 310.780928zM691.340288 310.780928"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="huo" unicode="&#58989;" d="M906.168 370.581c-69.54 209.027-91.279 274.342-91.279 274.342-147.060-86.368-182.557-178.54-182.557-182.891-95.63 43.54-60.856 365.792-60.856 365.792-424.537-171.282-258.635-467.408-273.846-487.728-172.42 66.046-152.135 182.9-152.135 182.9-172.329-426.567 135.65-615.715 452.965-578.16 282.529 37.555 377.256 216.718 307.707 425.746z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shangjiguanli" unicode="&#58990;" d="M702.0544 125.67893332999995v-125.61066666c0-21.84533333-18.0224-38.77546667-39.3216-38.77546667h-50.7904c-5.46133333-13.65333333-13.65333333-26.2144-24.02986667-37.13706667-20.20693333-20.20693333-46.96746667-32.22186667-75.91253333-32.22186666-28.39893333 0-55.15946667 12.01493333-75.91253333 32.22186666-10.92266667 10.92266667-18.56853333 23.48373333-24.02986667 37.13706667h-50.7904c-21.84533333 0-39.3216 16.93013333-39.3216 38.77546667v125.61066666c-14.7456 10.92266667-29.4912 22.39146667-42.5984 36.0448-61.71306667 61.16693333-96.11946667 144.1792-96.11946667 232.6528 0 87.38133333 34.4064 170.3936 96.11946667 232.10666667S424.07253333 722.60266667 512 722.60266667c87.38133333 0 170.93973333-34.4064 232.10666667-96.11946667 62.2592-62.2592 96.6656-144.72533333 96.6656-232.10666667 0-87.92746667-34.4064-170.93973333-96.6656-232.6528-12.56106667-13.1072-26.76053333-25.12213333-42.05226667-36.0448z m-190.0544 306.3808c6.5536 4.9152 13.65333333 9.28426667 20.75306667 12.01493334 14.19946667 6.00746667 29.4912 8.192 44.2368 8.192 15.29173333 0 30.58346667-2.73066667 44.2368-8.192 13.65333333-6.00746667 27.30666667-14.19946667 37.6832-25.66826667 9.28426667-8.73813333 9.28426667-23.48373333 0-32.768-9.28426667-9.28426667-24.02986667-9.28426667-32.768 0-6.00746667 6.00746667-14.19946667 11.4688-22.39146667 14.7456-8.192 3.82293333-16.93013333 5.46133333-26.2144 5.46133333-8.73813333 0-18.0224-1.6384-26.2144-5.46133333-8.192-3.2768-15.83786667-8.73813333-22.39146667-14.7456-9.28426667-9.28426667-24.02986667-9.28426667-32.768 0-6.5536 6.00746667-14.19946667 11.4688-22.9376 14.7456-8.192 3.82293333-16.93013333 5.46133333-26.2144 5.46133333-9.28426667 0-18.56853333-1.6384-26.76053333-5.46133333-8.192-3.2768-15.83786667-8.73813333-22.39146667-14.7456-9.28426667-9.28426667-24.02986667-9.28426667-33.31413333 0-8.73813333 9.28426667-8.73813333 24.02986667 0 32.768 10.92266667 11.4688 24.02986667 19.6608 37.6832 25.66826667 14.19946667 6.00746667 28.94506667 8.192 44.2368 8.192 14.7456 0 30.03733333-2.73066667 44.2368-8.192 7.64586667-2.73066667 14.7456-7.09973333 21.2992-12.01493334z m23.48373333 344.61013334c0-12.56106667-10.92266667-23.48373333-23.48373333-23.48373334-13.1072 0-23.48373333 10.92266667-23.48373333 23.48373334v75.3664c0 12.56106667 10.37653333 23.48373333 23.48373333 23.48373333 12.56106667 0 23.48373333-10.92266667 23.48373333-23.48373333v-75.3664z m187.86986667-62.2592c-6.5536-11.4688-20.75306667-15.83786667-31.67573333-8.73813334-10.92266667 6.00746667-14.7456 20.75306667-8.192 32.22186667l37.13706666 64.98986667c6.5536 10.92266667 20.75306667 14.7456 31.67573334 8.192 10.92266667-6.00746667 15.29173333-20.75306667 8.73813333-31.67573334l-37.6832-64.98986666z m132.16426667-149.64053334c-11.4688-6.00746667-25.66826667-2.18453333-32.22186667 8.73813334-6.5536 11.4688-2.18453333 25.66826667 8.73813333 31.67573333l64.98986667 38.22933333c11.4688 6.00746667 25.12213333 1.6384 31.67573333-8.73813333 6.00746667-11.4688 2.73066667-25.66826667-8.73813333-32.22186667l-64.44373333-37.6832z m39.3216-193.87733333c-12.56106667 0-23.48373333 10.92266667-23.48373334 24.02986667 0 12.01493333 10.92266667 22.9376 23.48373334 22.9376h74.82026666c12.56106667 0 23.48373333-10.92266667 23.48373334-22.9376 0-12.56106667-10.37653333-24.02986667-23.48373334-24.02986667h-74.82026666z m-62.80533334-188.416c-10.92266667 6.00746667-14.7456 20.75306667-8.73813333 32.22186667 6.5536 10.37653333 20.75306667 14.7456 32.22186667 8.192l64.44373333-37.6832c11.4688-6.00746667 14.7456-20.20693333 8.73813333-31.67573334-6.5536-10.92266667-20.75306667-14.7456-31.67573333-8.73813333l-64.98986667 37.6832z m-663.552 40.41386667c12.01493333 6.00746667 25.66826667 2.18453333 32.22186667-8.192 6.00746667-11.4688 2.18453333-26.2144-8.73813333-32.22186667l-64.44373334-37.6832c-11.4688-6.00746667-25.66826667-2.18453333-32.22186666 8.73813333-6.00746667 11.4688-2.73066667 25.66826667 8.73813333 31.67573334l64.44373333 37.6832z m-39.3216 194.42346666c12.56106667 0 23.48373333-10.92266667 23.48373334-22.9376 0-12.56106667-10.37653333-24.02986667-23.48373334-24.02986666h-74.82026666c-12.56106667 0-23.48373333 10.92266667-23.48373334 24.02986666 0 12.01493333 10.92266667 22.9376 23.48373334 22.9376h74.82026666z m63.35146667 188.416c11.4688-6.00746667 15.29173333-20.75306667 8.73813333-32.22186666-6.5536-10.92266667-21.2992-14.7456-32.22186666-8.192l-64.98986667 37.6832c-10.92266667 6.00746667-14.7456 20.75306667-8.192 32.22186666 6.5536 11.4688 20.75306667 14.7456 32.22186667 8.73813334l64.44373333-38.22933334z m148.54826667 131.61813334c6.5536-11.4688 2.73066667-26.2144-8.73813334-32.22186667-10.37653333-6.5536-25.12213333-2.73066667-31.67573333 8.73813333l-37.13706667 64.44373334c-6.5536 11.4688-2.73066667 25.66826667 8.192 31.67573333 10.92266667 6.5536 25.66826667 2.73066667 32.22186667-8.192l37.13706667-64.44373333z m300.37333333-557.056l1.6384 1.09226666c16.384 9.8304 31.67573333 21.84533333 45.32906667 36.0448 46.96746667 47.5136 73.18186667 110.86506667 73.18186666 177.49333334s-26.2144 129.4336-73.18186666 176.40106666c-47.5136 47.5136-110.31893333 73.728-176.9472 73.728s-129.4336-26.2144-176.9472-73.728c-46.96746667-46.96746667-73.728-109.7728-73.728-176.40106666 0-66.62826667 26.76053333-129.97973333 73.728-177.49333334 13.65333333-13.65333333 28.94506667-26.2144 45.32906666-36.0448l1.6384-1.6384c38.77546667-23.48373333 83.5584-36.0448 129.4336-36.0448 46.96746667 0 91.7504 12.01493333 130.52586667 36.59093334z m-240.8448-95.57333334v-44.78293333h43.14453333c21.84533333 0 39.3216-17.47626667 39.3216-39.3216v-0.54613333c0-7.09973333 2.73066667-14.7456 8.192-20.20693334s12.56106667-8.192 20.20693334-8.192c7.09973333 0 14.7456 2.73066667 20.20693333 8.192h0.54613333c4.9152 5.46133333 8.192 12.56106667 8.192 20.20693334v0.54613333c0 21.84533333 17.47626667 39.3216 39.3216 39.3216h43.14453334v44.78293333c-35.49866667-13.1072-73.18186667-19.11466667-111.4112-19.11466666s-75.3664 6.00746667-110.86506667 19.11466666z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bingtu" unicode="&#59097;" d="M1328.82737006 345.33093359h-606.44043434v606.44043435c-334.20214272 0-606.44043435-270.97344142-606.44043435-606.44043435 0-334.20214272 270.97344142-606.44043435 606.44043435-606.44043435s606.44043435 270.97344142 606.44043434 606.44043435zM801.13628785 1029.15783018v-606.44043435h606.44043435c0 335.46699293-270.97344142 606.44043435-606.44043435 606.44043435z"  horiz-adv-x="1536" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="lianjiechenggong" unicode="&#58993;" d="M83.67104 345.92995556000005c-97.6896-97.6896-89.77408-264.16241778 17.72657778-371.66535111 107.54048-107.53934222 273.92227555-115.47079111 371.66648889-17.72657778l104.61639111 104.61639111c17.77322667 17.77208889 16.3328 48.03015111-3.21763556 67.58058667s-49.80736 20.992-67.58058667 3.21763555l-104.61752888-104.61639111c-62.19548445-62.19662222-168.06343111-57.14944-236.50417778 11.29130667-68.39864889 68.39864889-73.43672889 174.35875555-11.29130667 236.50417778l104.61752889 104.61639111c17.77208889 17.77322667 16.33166222 48.03015111-3.21877333 67.58058667s-49.80736 20.992-67.58058667 3.21763555L83.67217778 345.92995556000005z m537.48167111 395.88522666C683.34933333 804.01066667 789.21728 798.96348445 857.65688889 730.52387556c68.39864889-68.39978667 73.43672889-174.35875555 11.29130666-236.50417778l-104.6163911-104.61752889c-17.77322667-17.77208889-16.3328-48.03015111 3.21763555-67.58058667s49.80736-20.99086222 67.58058667-3.21763555l104.61752888 104.61639111c97.6896 97.6896 89.77408 264.16355555-17.72771555 371.66648889-107.53934222 107.53820445-273.92113778 115.47079111-371.66648889 17.72657778l-104.61525333-104.61639111c-17.77322667-17.77322667-16.3328-48.03015111 3.21763555-67.58058667s49.80736-20.992 67.58058667-3.21877333l104.61639111 104.61752888zM488.78023111 246.59854222c8.2944 8.2944 10.1376 21.34016 4.63985778 32.85105778l-102.98026667 215.61457778-38.84942222-36.80483556 207.56935111-111.02435555c21.67466667-11.59395555 45.34613333 4.31217778 41.61194667 27.96202667l-12.06840889 76.43022222-35.39057778-30.5152 68.38499556-20.11249778c10.29916445-3.02990222 20.92373333-0.55978667 27.98933333 6.50467556l72.40704 72.40817778c11.10812445 11.10812445 10.20700445 30.01912889-2.01159111 42.23772444-12.21973333 12.21973333-31.1296 13.11857778-42.23772444 2.01159111l-72.40817778-72.40817778 27.98933333 6.50581333-68.38613333 20.11249778c-20.43221333 6.00974222-38.67306667-9.71889778-35.39057778-30.5152L541.71875555 371.42755556l41.61194667 27.96202666-207.56935111 111.02435556c-25.60910222 13.69884445-51.33084445-10.67008-38.84942222-36.80369778l102.98026666-215.61344 4.63985778 32.85105778-72.40817778-72.40817778c-11.10812445-11.10812445-10.20700445-30.01912889 2.01159112-42.23772444 12.21973333-12.21973333 31.1296-13.11857778 42.23772444-2.01159111l72.40817778 72.40817777z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon03" unicode="&#58994;" d="M451.39243009 362.51922887l0 383.04465124c-3.14352754 0.11642653-6.17062855 0.23285419-9.31415609 0.23285418-221.2111963 0-400.62512014-179.4139227-400.62512015-400.62512014S220.86707884-55.33707947000005 442.07827513-55.33707947000005 842.70339527 123.96041671 842.70339527 345.17161415c0 5.82134784-0.23285419 11.52626802-0.46570723 17.34761472L451.39243009 362.51922887zM978.57363969 487.79462201c-20.95685063 195.4808411-175.92111445 350.79438677-371.16910252 372.44979882l-4.65707803 0L541.50688655 860.24442083c-12.92339086 0-23.51824327-10.59485241-23.51824327-23.51824326l-1e-8-48.66646358 0-348.6987025c0-12.92339086 10.59485241-23.51824327 23.51824328-23.51824328l366.27917028 0 49.83073222 0c12.57411015 0 22.93610837 10.01271751 23.40181561 22.58682766 0 0.34928071 0.11642653 0.69856142 0.11642652 1.04784214l0 3.02710101 0 55.65208007C981.13503346 494.31453127 980.0871902 490.93814955 978.57363969 487.79462201zM602.74746027 474.52195043c-12.92339086 0-23.51824327 10.59485241-23.51824327 23.51824328L579.229217 790.15539939c173.0104411-9.0813019 312.48992142-144.48583907 328.20755912-315.63344896L602.74746027 474.52195043z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="keyanchengguo" unicode="&#59133;" d="M872.427481 383.875371c43.511827 47.366299 74.457785 95.0234 89.686022 138.186626 15.553356 44.084398 14.76765 82.995784-2.279449 112.529279-25.753077 44.577496-82.531586 68.139629-164.199799 68.139629-32.380096 0-69.125825-4.100118-109.326852-12.195594C644.421174 814.420292 579.59957 885.289119 507.843889 885.289119c-71.748456 0-136.582703-70.868827-178.506863-194.762839-40.654388 8.124375-77.401923 12.242556-109.323239 12.242556-81.668213 0-138.435885-23.576583-164.165481-68.175754-17.061549-29.529882-17.859898-68.441268-2.310155-112.529279 15.222818-43.16142 46.168776-90.818521 89.684215-138.188432-43.515439-47.364493-74.461397-95.00895-89.684215-138.159533-15.549743-44.077174-14.751394-82.988559 2.306542-112.518441 25.733209-44.60459 82.50088-68.181172 164.203412-68.181173 32.226568 0 68.965072 4.107343 109.290727 12.217269 41.925966-123.883174 106.758408-194.735745 178.503251-194.735745 71.752068 0 136.573672 70.859796 178.467126 194.741163 40.555046-8.111732 77.311612-12.222687 109.357558-12.222687 81.632089 0 138.397954 23.576583 164.169093 68.181173 17.043487 29.537107 17.829192 68.446687 2.275836 112.520247-15.224624 43.152389-46.170582 90.798652-89.684215 138.157727zM795.702891 112.118815c-28.191473 0-60.336761 3.480585-95.664608 10.35325 10.996264 41.418418 19.259718 86.525137 24.598903 134.286999 42.252892 29.842358 80.37496 60.914751 113.466707 92.487467 74.089316-80.34606 104.343492-151.991562 80.985462-192.514095-16.62625-28.77127-60.445134-44.613621-123.386464-44.613621z m-65.829475 335.335481c27.057168-21.00272 51.921585-42.31611 74.156147-63.5717-22.328485-21.300746-47.191096-42.610523-74.15434-63.555444 1.278803 22.52175 1.903755 43.454028 1.903755 63.548219 0 20.121285-0.624952 41.062593-1.905562 63.578925z m-5.30306 63.573506c-5.306673 47.727543-13.55929 92.832456-24.564585 134.283386 35.39287 6.874471 67.538158 10.358669 95.664608 10.358669 62.957586 0 106.76202-15.84777 123.348533-44.633489 23.401379-40.477378-6.841959-112.112042-80.956562-192.501452-33.306687 31.724439-71.43598 62.800444-113.491994 92.492886zM507.843889-70.421336c-25.097419 0-49.797471 14.776681-73.415596 43.918226-22.111739 27.286557-42.33959 66.671173-58.740063 114.284924 43.165033 11.402663 87.560101 26.881964 132.153853 46.083884 44.619039-19.21095 89.008689-34.693863 132.123147-46.083884-34.106842-99.249953-83.187244-158.20315-132.121341-158.20315z m0 908.627732c48.930485 0 98.010887-58.956809 132.124954-158.206763-43.277018-11.45685-87.661249-26.934345-132.124954-46.076658-44.432999 19.12967-88.837098 34.608971-132.155659 46.076658 16.402279 47.610139 36.631937 86.998367 58.741869 114.284924 23.616319 29.143351 48.316371 43.921839 73.41379 43.921839z m176.834304-454.331025c0-32.1778-1.602117-65.824056-4.761194-100.066365a1210.790186 1210.790186 0 0 0-83.655055-53.075759c-27.781462-16.024779-57.511834-31.27469-88.418055-45.35417-31.258434 14.234816-60.987 29.48292-88.421668 45.35417-28.16438 16.255975-56.279992 34.101423-83.624348 53.073953-3.180752 34.121292-4.7919 67.763936-4.7919 100.066365 0 32.295204 1.611148 65.946879 4.7919 100.080814a1238.521073 1238.521073 0 0 0 83.620736 53.093821c27.981952 16.124121 57.71413 31.368613 88.427086 45.341527 31.231341-14.193273 60.958101-29.435959 88.414443-45.336108 27.904284-16.120509 55.304634-33.51079 83.662279-53.102853 3.157272-33.900933 4.755776-67.552608 4.755776-100.075395zM619.782534 577.834442c-16.028392 9.276743-33.41506 18.562517-53.798247 28.717083 30.360743 11.594123 59.744321 21.158055 87.643187 28.523818 7.492198-27.980146 13.732687-57.909202 18.620317-89.272397-18.497494 11.850606-35.466925 22.207468-52.465257 32.031496z m-170.129617 28.72792c-19.944275-9.926982-37.343587-19.219981-53.823534-28.72792-16.794229-9.721073-33.741986-20.074323-52.418295-32.035109 4.934592 31.58536 11.180498 61.518029 18.638378 89.277816 27.947634-7.383825 57.316762-16.944145 87.603451-28.514787z m-53.776572-416.615356c16.384217-9.451946 33.781723-18.741333 53.816308-28.709859-30.301138-11.592317-59.672072-21.161667-87.607062-28.543686-7.513873 27.974727-13.757974 57.901977-18.627542 89.268785 18.641991-11.942723 35.591555-22.290554 52.418296-32.01524z m170.169354-28.708052c19.88467 9.889052 37.28037 19.176632 53.809084 28.71347 16.714755 9.675918 33.666125 20.027361 52.429132 32.033303-4.880405-31.280109-11.131731-61.212778-18.654634-89.29046-27.794105 7.349507-57.152396 16.917051-87.583582 28.543687zM220.013787 655.669857c28.124643 0 60.269931-3.484197 95.659188-10.358669-11.021551-41.402163-19.285005-86.512494-24.59529-134.283386-42.05782-29.692442-80.187113-60.770254-113.4938-92.496498-74.109185 80.349673-104.348911 151.987949-80.949338 192.512289 16.586513 28.778495 60.403591 44.626264 123.37924 44.626264z m65.811412-335.348124c-26.983113 20.930471-51.851142 42.236636-74.170596 63.551832 22.285136 21.280878 47.153165 42.594267 74.16879 63.562669-1.289641-22.370028-1.920011-43.305918-1.920012-63.562669 0.001806-20.235077 0.632177-41.16916 1.921818-63.551832zM177.587498 349.25195c33.463828-31.86713 71.589508-62.94133 113.490187-92.496499 5.308479-47.763667 13.571933-92.875805 24.59529-134.285192-35.324234-6.872665-67.467716-10.35325-95.660995-10.35325-62.944942 0-106.76202 15.844157-123.381045 44.608202-23.38693 40.526146 6.854603 112.169841 80.956563 192.526739zM507.843889 469.119898c-46.983381 0-85.208403-38.241278-85.208403-85.244527 0-46.983381 38.225022-85.208403 85.208403-85.208403 46.983381 0 85.206597 38.223216 85.206597 85.208403 0 47.003249-38.225022 85.244528-85.206597 85.244527z m0-123.334083c-21.011751 0-38.107618 17.086836-38.107618 38.08775 0 21.022588 17.095867 38.12568 38.107618 38.12568s38.107618-17.103092 38.107618-38.12568c-0.001806-21.000914-17.095867-38.08775-38.107618-38.08775z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xiangmu" unicode="&#58995;" d="M991.26897594 25.948679060000018L991.26897594 626.25782906c0 72.03755813-66.70069687 66.70069687-66.70069688 66.70069688L548.37469813 692.95852594c-21.34456875 0-34.68432375 10.67180437-34.68432375 10.67180437s-16.00866656 26.68047094-45.35708813 69.36864844c-26.68047094 48.02503875-61.36479469 40.02022594-61.36479469 40.02022594L116.15126563 813.01920469c-82.70936344 0-82.70936344-77.37346125-82.70936344-77.37346125l0-704.36308219c0-88.04526562 66.70069687-77.37346125 66.70069687-77.37346125l832.42953282 0C1001.94173937-46.08888000000002 991.26897594 25.948679060000018 991.26897594 25.948679060000018zM252.28296781 185.40408844c-26.52313688 0-48.02503875 21.50094281-48.02503875 48.02503875 0 26.52313688 21.50094281 48.02503875 48.02503875 48.02503875s48.02503875-21.50094281 48.02503875-48.02503875C300.3070475 206.90598938000005 278.80610563 185.40408844 252.28296781 185.40408844zM252.28296781 372.16738219c-26.52313688 0-48.02503875 21.50094281-48.02503875 48.02503875 0 26.52313688 21.50094281 48.02503875 48.02503875 48.02503875s48.02503875-21.50094281 48.02503875-48.02503875C300.3070475 393.668325 278.80610563 372.16738219 252.28296781 372.16738219zM772.49026719 180.69560062000005L452.32461969 180.69560062000005c-26.68047094 0-48.02503875 21.34456875-48.02503875 48.02503876 0 26.68047094 21.34456875 48.02503875 48.02503875 48.02503875l320.16468844 0c26.68047094 0 48.02503875-21.34456875 48.02503874-48.02503875C820.51434688 202.03920938 799.16977906 180.69560062000005 772.49026719 180.69560062000005zM772.49026719 370.12588688000005L452.32461969 370.12588688000005c-26.68047094 0-48.02503875 21.34456875-48.02503875 48.02503875 0 26.68047094 21.34456875 48.02503875 48.02503875 48.02503875l320.16468844 0c26.68047094 0 48.02503875-21.34456875 48.02503874-48.02503875C820.51434688 391.47045469 799.16977906 370.12588688000005 772.49026719 370.12588688000005z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biaodan" unicode="&#58996;" d="M703.36056889 705.91601778q-11.24124445 0-18.90531555 7.66520889t-12.77496889 17.88359111-7.66407111 20.94990222-2.55431111 17.88359111v125.70168889h2.04344889q9.19665778 0 17.37272889-2.04344889t19.92817778-9.70752 28.6151111-21.46190222 42.41066667-36.27918222q27.59224889-24.52707555 43.94325333-41.39008t25.03793778-28.61397334 10.72924445-19.92817778 2.04344889-14.30869333v-16.34986667h-150.22762667zM1021.18968889 224.57457778000003q3.06517333-8.17607111 4.08689778-20.44017778t-10.21952-23.50421333q-5.11089778-5.11089778-9.19665778-9.70865778t-7.15434666-7.66520889q-4.08689778-4.08803555-7.15320889-6.13148445l-86.86705778 85.84419556q6.13262222 5.11089778 13.79783111 12.26410667t12.77383112 11.24010667q12.26410667 11.24124445 26.57052444 9.70865777t23.50535111-6.64462222q10.21952-5.11089778 21.97276445-17.88359111t17.8835911-27.08138667zM660.43904001 129.53258667q22.48362667 0 37.81176888 12.26296888l-198.26005333-206.43498666h-282.05966222q-19.41504 0-42.40952889 11.24124444t-42.92266666 29.63683556-33.21287112 42.40952889-13.28696888 49.56615111v695.95249778q0 21.46076445 9.70865777 44.96611555t26.56938667 42.40952889 38.32376889 31.68256 44.96611555 12.77496889h391.41034667v-127.74513778q0-19.41617778 6.13148445-41.89980444t18.90531555-41.38894223 33.21400889-31.68028444 49.05415111-12.77496889h149.20590222v-338.26702222l-140.00696889-145.11786667q11.24010667 16.35100445 11.24010667 35.76718222 0 26.57052445-18.90531555 45.47697778t-45.47697778 18.90531556h-383.23427556q-26.56938667 0-44.96611556-18.90531556t-18.39445333-45.47697778 18.39445333-44.96611555 44.96611556-18.39445333h383.23427556zM277.20476445 512.76572445q-26.56938667 0-44.96611556-18.90531556t-18.39445333-45.47697778 18.39445333-44.96611556 44.96611556-18.39445333h383.23427556q26.56938667 0 45.47697778 18.39445333t18.90531555 44.96611556-18.90531555 45.47697778-45.47697778 18.90531556h-383.23427556zM662.48362667 0.7657244499999933l38.83463112 38.8346311q15.33041778 15.33041778 33.7248711 34.23459556t36.79004445 37.30204444q43.94325333 43.94439111 99.13002667 98.10716445l85.84419555-85.84533333-169.64494222-169.64494222q-14.30755555-14.30755555-24.01621333-24.52593778t-10.72924445-11.24124445q-5.11089778-4.08803555-11.24124444-8.68693333t-12.26296889-7.66407111-18.90531556-7.66520889-26.05966222-8.68693334-25.54993778-7.15320888-18.39331555-4.08803556q-12.26410667-2.04344889-16.35214223 3.06517334t-2.04344888 17.37272888q1.02172445 6.13262222 4.08689778 18.39445334t7.15434666 25.03793778 7.66520889 24.01621333 5.62062222 15.33041777q6.13262222 13.28583111 16.35214223 23.50421334z"  horiz-adv-x="1069" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xiangmu1" unicode="&#58997;" d="M789.65191111 361.53344000000004h-341.21955556c-27.88238222 0-50.40241778 22.52117333-50.40241777 50.40355555 0 27.87555555 22.52003555 50.39559111 50.40241777 50.39559112h341.21955556c27.88352 0 50.40355555-22.52003555 50.40355556-50.39559112 0-27.88238222-22.73621333-50.40355555-50.40355556-50.40355555z m0-199.45813333h-341.21955556c-27.88238222 0-50.40241778 22.51889778-50.40241777 50.40355555 0 27.88124445 22.52003555 50.39559111 50.40241777 50.39559111h341.21955556c27.88352 0 50.40355555-22.51434667 50.40355556-50.39559111 0-27.88579555-22.73621333-50.40355555-50.40355556-50.40355555z m231.62993778-164.71267556v637.40586667c0 77.42577778-70.56042667 70.13262222-70.56042667 70.13262222s-421.21898667-0.43008-398.70008889 0c-24.02304-0.43008-36.2496 12.65436445-36.2496 12.65436445s-16.72305778 28.95075555-46.96746666 74.42090666c-31.52554667 47.82762667-68.20067555 40.10211555-68.20067556 40.10211556H90.48177778c-86.00234667 0-86.86136889-82.78243555-86.86136889-82.78243556v-747.86133333c0-92.22257778 69.70254222-80.85390222 69.70254222-80.85390223H957.15555555c74.63594667 0 64.12743111 76.78179555 64.12743112 76.78179556z m-63.26727111 37.74805334c0-28.52750222-22.94897778-51.47761778-51.47192889-51.47761778H118.36529778c-28.52864 0-51.47648 22.95011555-51.47648 51.47761778V568.71025778c0 28.52522667 22.94784 51.47534222 51.47648 51.47534222h788.17735111c28.52181333 0 51.47192889-22.94897778 51.47192889-51.47534222V35.11182222000002zM207.36796445 411.93699555c0-29.73696 24.09813333-53.83281778 53.83054222-53.83281777 29.73013333 0 53.83168 24.09585778 53.83168 53.83281777 0 29.72785778-24.10154667 53.82599111-53.83168 53.82599112-29.73127111 0-53.83054222-24.09813333-53.83054222-53.82599112z m0-199.45813333c0-29.73240889 24.09813333-53.83395555 53.83054222-53.83395555 29.73013333 0 53.83168 24.10154667 53.83168 53.83395555 0 29.73013333-24.10154667 53.82940445-53.83168 53.82940445-29.73127111 0-53.83054222-24.09927111-53.83054222-53.82940445z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="rar" unicode="&#58998;" d="M601.99625 593.9043750000001V803.896875H212.01125v-359.986875h599.9775V593.9043750000001zM811.98875 623.9034375H631.9953125V803.896875zM250.2715625 240.22312499999998h-55.07625v-72.3609375h56.13c22.025625 0 42.4790625 11.311875 42.4790625 35.6240625v0.703125c0 25.453125-20.578125 36.03375-43.5328125 36.03375zM804.9575 240.22312499999998H749.88125v-72.3609375h56.1309375c22.025625 0 42.478125 11.311875 42.478125 35.6240625v0.703125c0 25.453125-20.5790625 36.03375-43.5328125 36.03375zM486.7475 143.72343750000005h66.969375l-33.455625 81.7340625zM32.01875 384.241875v-419.9840625h959.9625V384.241875H32.01875z m260.731875-345.984375l-54.0215625 80.6221875h-43.5328125v-80.62125h-55.42875V290.259375h115.190625c51.1771875 0 95.0353125-27.695625 95.0353125-83.14125v-0.7621875c0-36.16875-19.9828125-65.476875-54.020625-78.1021875l61.5796875-89.99625h-64.801875z m303.796875 0l-23.0259375 56.5415625H467.001875l-23.085-56.540625H387.434375l107.9840625 253.75875h51.091875L654.5534375 38.25937499999998h-58.0059375z m250.8890625 0l-54.020625 80.6221875H749.88125v-80.62125h-55.42875V290.259375h115.190625c51.178125 0 95.03625-27.695625 95.03625-83.14125v-0.7621875c0-36.16875-19.98375-65.476875-54.0215625-78.1021875l61.5796875-89.99625H847.4375z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="jiaohuan" unicode="&#59001;" d="M44.86656 571.99616h86.2464c2.11456 86.912 34.59584 158.70464 103.16288 212.39808 54.00576 42.31168 116.51072 55.35744 184.30976 50.11968v-105.216c-2.36544 0-4.5824 0.09216-6.79936 0-18.05312-0.78336-36.24448-0.40448-54.0928-2.70336-27.8016-3.584-51.87072-16.34816-72.79616-34.80576-26.44992-23.33184-43.03872-52.55168-50.31424-86.93248-2.21184-10.45504-2.83648-21.23264-4.25984-32.44032h78.02368C263.936 520.4992 220.38016 469.58592 176.4352 418.23744 132.60288 469.46816 89.10848 520.30464 44.86656 571.99616zM485.85216-58.12736c-9.10848-6.90688-19.63008-9.5232-30.8224-9.53344-111.04256-0.03584-222.08512-0.10752-333.12256 0.0256-24.91392 0.03584-42.57792 13.44-48.96768 36.59776-1.27488 4.61824-1.73568 9.61536-1.73568 14.41792-0.09728 98.67776-0.09728 197.376-0.06656 296.064 0.01536 24.92416 13.37856 43.03872 36.72064 49.41824 5.12 1.38752 10.65472 1.73568 15.98464 1.75104 54.83008 0.10752 109.65504 0.09216 164.47488 0.09216 54.99392 0 109.99808-0.03072 165.00224 0 12.30848 0 23.76704-2.6112 33.6384-10.48064 11.2384-8.97024 17.2544-20.64384 18.40128-34.90304 0.1536-1.88416 0.18432-3.80928 0.18432-5.7344 0.01024-98.67264-0.01536-197.36064 0.04608-296.05376 0.01536-17.09056-5.94432-31.20128-19.7376-41.66144zM526.44864 447.19104c-13.3376 10.03008-19.7632 23.67488-19.79904 40.064-0.10752 99.73248-0.14848 199.45984 0.03584 299.20256 0.03584 24.03328 14.21312 41.96352 37.22752 47.93344 4.80768 1.24928 9.97888 1.54112 14.98112 1.55648 110.00832 0.08704 220.00128 0.0512 329.99936 0.06656 21.07904 0 37.76-8.0128 47.0016-27.53536 3.13856-6.70208 4.92032-14.68416 4.95104-22.08768 0.31232-99.72736 0.27136-199.45472 0.15872-299.1872-0.03072-23.7824-13.77792-41.58464-36.68992-47.81056-5.12-1.38752-10.65984-1.69984-16.01024-1.69984-54.8096-0.12288-109.63968-0.07168-164.46976-0.07168h-164.98176c-11.76064 0.01024-22.80448 2.36544-32.40448 9.56928zM904.97024 195.49696c-2.51904-90.40384-37.22752-164.0448-110.44864-217.61024-52.61824-38.49728-112.67072-49.73056-177.07008-44.8256v105.32864c10.25024 0 20.31104-0.37888 30.34112 0.08704 11.42784 0.54784 23.06048 0.74752 34.21184 3.01056 42.24 8.59136 74.61888 32.02048 97.83808 68.0192 16.62976 25.74336 24.61184 54.2464 25.12896 85.53984h-77.46048c44.57984 52.08576 88.13056 102.9888 132.08064 154.34752 43.90912-51.30752 87.3984-102.14912 131.70176-153.90208l-86.3232 0.00512z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="png-" unicode="&#59002;" d="M883.959808 598.636544H638.623744V843.976704l-490.708992 0.055296V414.63808h736.045056zM665.677824 843.976704v-218.284032h218.281984zM188.3648 235.008h-19.113984v-82.83136h19.113984c42.461184-4.253696 63.168512 9.558016 62.124032 41.414656 1.04448 31.858688-19.662848 45.647872-62.124032 41.416704zM25.55904 353.304576v-429.336576h980.758528V353.304576H25.55904z m189.886464-250.507264H169.250816v-113.094656H107.128832V284.38528h90.793984c80.689152 1.04448 120.510464-29.220864 119.465984-90.793984-2.14016-57.341952-36.112384-87.607296-101.943296-90.793984z m406.183936-113.094656h-90.793984l-114.688 245.305344-1.593344-1.593344v-243.709952h-58.935296V284.38528h93.978624l111.501312-232.558592 1.593344 1.591296V284.38528h58.935296v-294.682624z m189.55264 39.82336c15.929344 0 34.496512 2.115584 55.750656 6.373376-1.071104-1.071104 0-1.071104 3.18464 0v62.121984h-57.344v49.379328h119.465984v-148.137984a226.152448 226.152448 0 0 0-65.306624-9.558016c-17.000448-2.115584-39.299072-3.18464-66.902016-3.18464-90.271744 5.300224-136.464384 55.201792-138.579968 149.731328 2.115584 96.618496 48.308224 148.137984 138.579968 154.507264 92.38528 0 138.033152-31.85664 136.986624-95.571968h-66.899968c0 32.903168-19.6608 49.379328-58.935296 49.379328-54.157312-1.071104-81.784832-37.183488-82.83136-108.314624 1.046528-70.088704 28.674048-105.680896 82.83136-106.725376z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="leidatu" unicode="&#59054;" d="M512 794.111448l457.196837-310.86405-174.538176-516.027733H229.341339L54.803163 482.642624 512 794.111448m0 57.435107L0.021489 500.468618l195.576328-579.793012h632.852462l195.529255 580.397786L512 851.546555zM512 626.182808l279.95918-196.878996-106.863867-322.452993H338.857615l-106.863867 322.081533 280.006252 197.250456m0 57.435107L177.212074 446.711274l127.902019-386.404514h413.818886l127.854947 386.823046-334.787926 236.488109zM512 738.772073L279.281751 366.469742 744.717226-5.924687 512 738.772073z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="kefu" unicode="&#59003;" d="M512.830587 699.365681c-175.889909 0-318.479368-145.555261-318.479368-325.107856 0-87.989523 34.240432-167.6043 89.715522-226.191052 25.24173401-23.19970599 52.788852-43.64834599 83.062726-59.725264 16.457772-8.68266999 34.62128599-17.507148 53.684264-25.45241901a314.334537 314.334537 0 0 1 92.016856-13.828256c175.893961 0 318.438851 145.599829 318.43885099 325.20104301 0 179.548543-142.54894201 325.103804-318.43885099 325.103804zM339.282527 308.69414500000005c180.456111-155.57092201 347.09612 0 347.09612 0s0-160.9434-173.54806-160.9434c-173.54806-0.004052-173.54806 160.9434-173.54806 160.9434zM512.830587 800.304253C316.897201 800.304253 152.518009 662.467371 107.617705 476.578008c0 0-112.400669-18.147307-107.453613-133.606967 4.987572-115.415092 123.5751-122.44064 123.575099-122.44064 1.40592-3.67484 26.307316 3.5776 35.261446 5.141535a396.49374599 396.49374599 0 0 0-28.738301 148.545373c0 215.758073 171.287243 390.622916 382.568251 390.622916 211.285059 0 382.52773399-174.864844 382.527734-390.622916 0-172.109727-108.985135-318.122823-260.358554-370.13376-9.81307801-3.40338-20.043476 1.097995-20.043476 1.097995s-25.671208 4.92274599-57.820992-4.363619c-15.862181-4.64318201-22.644631-21.866715-21.700598-36.983393 1.191183-17.964983 7.884497-30.926188 26.303264-33.77044199 23.710213-3.812596 57.440137-8.131647 70.146088 17.778608 3.460103 7.0296 7.207872 20.079941 15.311158 22.87962599 117.003335 40.577201 210.640848 132.735864 255.030644 249.852645 0 0 117.9028 14.099716 121.350748 125.05800101 3.496568 110.958285-105.443999 130.62495799-105.443999 130.62495799C873.31333399 662.333667 708.845005 800.304253 512.830587 800.304253z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gongsijieshao" unicode="&#59188;" d="M809.28-116.58666667h-682.66666666c-50.24 0-90.98666667 40.85333333-90.98666667 90.98666667V793.6c0 50.13333333 40.85333333 90.98666667 90.98666667 90.98666667h591.68c50.24 0 90.98666667-40.85333333 90.98666666-90.98666667v-910.18666667zM126.61333334 793.6v-819.2h591.68V793.6H126.61333334zM945.81333334-116.58666667H763.73333334V474.98666667h182.08c25.17333333 0 45.54666667-20.37333333 45.54666666-45.54666667v-500.58666667c-0.10666667-25.06666667-20.48-45.44-45.54666666-45.44zM536.21333334 566.0799999999999h-273.06666667c-25.17333333 0-45.54666667 20.37333333-45.54666667 45.54666667s20.37333333 45.54666667 45.54666667 45.54666666h273.06666667c25.17333333 0 45.54666667-20.37333333 45.54666666-45.54666666-0.10666667-25.28-20.48-45.54666667-45.54666666-45.54666667zM536.21333334 338.45333332999996h-273.06666667c-25.17333333 0-45.54666667 20.37333333-45.54666667 45.54666667s20.37333333 45.54666667 45.54666667 45.54666667h273.06666667c25.17333333 0 45.54666667-20.37333333 45.54666666-45.54666667-0.10666667-25.17333333-20.48-45.54666667-45.54666666-45.54666667zM536.21333334 110.93333332999998h-273.06666667c-25.17333333 0-45.54666667 20.37333333-45.54666667 45.54666667s20.37333333 45.54666667 45.54666667 45.54666667h273.06666667c25.17333333 0 45.54666667-20.37333333 45.54666666-45.54666667-0.10666667-25.17333333-20.48-45.54666667-45.54666666-45.54666667zM809.28 338.45333332999996H900.26666667V247.46666667h-90.98666667zM809.28 110.93333332999998H900.26666667v-90.98666666h-90.98666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tongxunlu" unicode="&#59008;" d="M820.34 838.348H229.617c-63.89 0-115.67-51.145-115.67-114.23v-88.108h118.111v-92.556h-118.11v-119.316h118.11v-92.556h-118.11V212.3h118.11v-92.555h-118.11v-88.14c0-63.053 51.78-114.23 115.669-114.23H820.34c63.89 0 115.669 51.177 115.669 114.23V724.117c0 63.086-51.78 114.231-115.67 114.231z m-35.323-698.767c-1.471-0.234-2.91-0.367-4.315-0.367-10.905 0-20.638 7.625-22.712 18.597-17.594 92.154-99.38 158.986-194.512 158.986-94.763 0-176.515-66.53-194.343-158.316-2.442-12.378-14.517-20.506-27.095-18.13-12.544 2.34-20.772 14.348-18.364 26.76 18.398 94.595 92.155 166.846 184.074 188.254-50.04 21.41-85.195 70.58-85.195 127.745 0 76.768 63.22 139.219 140.991 139.219 77.771 0 140.991-62.451 140.991-139.219 0-57.166-35.156-106.337-85.23-127.745 92.221-21.473 166.01-94.027 184.14-189.058 2.376-12.376-5.886-24.352-18.43-26.726z m-126.74 343.53c0 51.545-42.516 93.492-94.731 93.492-52.214 0-94.73-41.947-94.73-93.493s42.516-93.493 94.73-93.493c52.215 0 94.73 41.947 94.73 93.493z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon-test" unicode="&#59011;" d="M579.855 451.855c-37.012 0-74.024 37.012-74.024 74.024 0 43.181 37.012 74.024 74.024 74.024 43.181 0 74.024-30.843 74.024-74.024s-30.843-74.024-74.024-74.024zM579.855 661.59c-74.024 0-135.711-61.687-135.711-141.88 0-74.024 61.687-135.711 135.711-135.711 74.024 0 135.711 61.687 135.711 135.711 0 80.193-61.687 141.88-135.711 141.88zM579.855 61.193l-55.518 61.687c-148.048 178.892-228.241 320.771-228.241 394.795 0 154.217 129.542 283.759 283.759 283.759 154.217 0 283.759-129.542 283.759-283.759 0-117.205-185.060-345.446-283.759-456.482M931.47 523.844c0 191.229-154.217 345.446-345.446 345.446-191.229 0-345.446-154.217-345.446-345.446 0-98.699 80.193-240.578 240.578-437.976l104.867-117.205 24.675 24.675c6.169 6.169 55.518 61.687 117.205 129.542v-185.060h-579.855v555.181h92.53v49.349h-141.88v-647.711h678.554v296.096c74.024 111.036 154.217 240.578 154.217 333.108M203.566 38.554h228.241v49.349h-228.241zM203.566 155.759h98.699v49.349h-98.699z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="css" unicode="&#59022;" d="M836.855172 896v-217.158621h132.413794zM971.034483 599.393103V648.827586h-167.724138V896H54.731034v-1024H971.034483V599.393103z m-266.593104 72.386207c-3.531034 5.296552-10.593103 8.827586-19.420689 12.358621-5.296552 1.765517-17.655172 5.296552-38.84138 10.593103-19.42069 5.296552-33.544828 8.827586-42.372413 14.124138-10.593103 5.296552-17.655172 12.358621-22.951725 21.186207-5.296552 8.827586-7.062069 17.655172-7.062069 28.248276 0 10.593103 3.531034 21.186207 8.827587 31.779311 7.062069 8.827586 15.889655 17.655172 28.248276 22.951724 12.358621 5.296552 24.717241 7.062069 40.606896 7.062069 15.889655 0 30.013793-1.765517 42.372414-7.062069 12.358621-10.593103 22.951724-17.655172 30.013793-28.248276 7.062069-10.593103 10.593103-21.186207 10.593103-35.310345v-1.765517l-30.013793-1.765518v1.765518c-1.765517 12.358621-7.062069 22.951724-14.124138 30.013793-8.827586 7.062069-21.186207 10.593103-37.075862 10.593103-15.889655 0-28.248276-3.531034-37.075862-8.827586-7.062069-5.296552-10.593103-12.358621-10.593103-21.186207 0-7.062069 1.765517-12.358621 7.062069-17.655172 5.296552-5.296552 19.42069-10.593103 42.372414-14.124138 22.951724-5.296552 38.841379-10.593103 47.668965-14.124138 12.358621-5.296552 22.951724-14.124138 28.248276-22.951724 5.296552-8.827586 8.827586-19.42069 8.827586-31.779311s-3.531034-22.951724-10.593103-33.544827c-7.062069-10.593103-15.889655-17.655172-28.248276-24.717242-12.358621-5.296552-26.482759-8.827586-42.372414-8.827586-19.42069 0-37.075862 3.531034-49.434483 8.827586-14.124138 5.296552-24.717241 14.124138-31.77931 26.482759-7.062069 12.358621-12.358621 24.717241-12.358621 38.841379V666.482759l30.013793 1.765517v-1.765517c1.765517-10.593103 3.531034-19.42069 8.827587-26.482759 5.296552-7.062069 10.593103-12.358621 21.186206-15.889655 8.827586-3.531034 21.186207-7.062069 31.779311-7.062069 10.593103 0 19.42069 1.765517 28.248276 5.296552 7.062069 3.531034 14.124138 7.062069 17.655172 12.35862 3.531034 5.296552 5.296552 10.593103 5.296552 17.655173 1.765517 8.827586 0 14.124138-3.531035 19.420689z m-211.862069 0c-3.531034 5.296552-10.593103 8.827586-19.420689 12.358621-5.296552 1.765517-17.655172 5.296552-38.84138 10.593103-19.42069 5.296552-33.544828 8.827586-42.372413 14.124138-10.593103 5.296552-17.655172 12.358621-22.951725 21.186207-5.296552 8.827586-7.062069 17.655172-7.062069 28.248276 0 10.593103 3.531034 21.186207 8.827587 31.779311 7.062069 8.827586 15.889655 17.655172 28.248276 22.951724 12.358621 5.296552 24.717241 7.062069 40.606896 7.062069 15.889655 0 30.013793-1.765517 42.372414-7.062069 12.358621-5.296552 22.951724-12.358621 28.248276-22.951724 7.062069-10.593103 10.593103-21.186207 10.593103-35.310345v-1.765518l-30.013793-1.765517v1.765517c-1.765517 12.358621-7.062069 22.951724-14.124138 30.013794-8.827586 7.062069-21.186207 10.593103-37.075862 10.593103-15.889655 0-28.248276-3.531034-37.075862-8.827586-7.062069-5.296552-10.593103-12.358621-10.593103-21.186207 0-7.062069 1.765517-12.358621 7.062069-17.655173 5.296552-5.296552 19.42069-10.593103 42.372413-14.124137 22.951724-5.296552 38.841379-10.593103 47.668966-14.124138 12.358621-5.296552 22.951724-14.124138 28.248276-22.951725 5.296552-8.827586 8.827586-19.42069 8.827586-31.77931s-3.531034-22.951724-10.593104-33.544827c-7.062069-10.593103-15.889655-17.655172-28.248275-24.717242-12.358621-5.296552-26.482759-8.827586-42.372414-8.827586-19.42069 0-37.075862 3.531034-49.434483 8.827586-14.124138 5.296552-24.717241 14.124138-31.77931 26.482759-7.062069 12.358621-12.358621 24.717241-12.358621 38.841379v1.765517l30.013793 1.765518v-1.765518c1.765517-10.593103 3.531034-19.42069 8.827586-26.482758 5.296552-7.062069 10.593103-12.358621 21.186207-15.889655 8.827586-3.531034 21.186207-7.062069 31.779311-7.062069 10.593103 0 19.42069 1.765517 28.248275 5.296551 7.062069 3.531034 14.124138 7.062069 17.655173 12.358621 3.531034 5.296552 5.296552 10.593103 5.296552 17.655172 3.531034 3.531034 1.765517 8.827586-1.765518 14.124138z m-353.103448 91.806897c8.827586 17.655172 21.186207 30.013793 37.075862 38.841379 15.889655 8.827586 33.544828 12.358621 52.965517 12.358621 21.186207 0 40.606897-5.296552 54.731035-15.889655 15.889655-10.593103 26.482759-26.482759 31.77931-45.903449v-1.765517l-31.77931-7.062069v1.765517c-5.296552 15.889655-12.358621 26.482759-21.186207 33.544828-8.827586 7.062069-21.186207 10.593103-35.310345 10.593104-15.889655 0-30.013793-3.531034-40.606896-12.358621-10.593103-7.062069-17.655172-17.655172-22.951725-31.779311-1.765517-12.358621-5.296552-26.482759-5.296551-40.606896 0-17.655172 1.765517-33.544828 7.062069-47.668966 5.296552-12.358621 14.124138-22.951724 24.717241-30.013793 10.593103-7.062069 22.951724-10.593103 35.310345-10.593103 15.889655 0 28.248276 5.296552 38.841379 14.124138 10.593103 8.827586 17.655172 22.951724 21.186207 40.606896v1.765518l31.77931-8.827587v-1.765517c-5.296552-22.951724-17.655172-42.372414-33.544827-54.731034-15.889655-12.358621-35.310345-19.42069-58.262069-19.42069-22.951724 0-42.372414 5.296552-58.262069 14.124138-14.124138 8.827586-26.482759 22.951724-33.544828 42.372414-7.062069 17.655172-12.358621 37.075862-12.35862 58.262069 5.296552 24.717241 8.827586 44.137931 17.655172 60.027586z m812.137931-872.165517H72.386207V507.586207h879.227586v-616.165517zM446.675862 128l-88.275862 88.275862 90.041379 88.275862h-70.620689l-82.979311-86.510345 82.979311-90.041379zM577.324138 128h68.855172l84.744828 90.041379-84.744828 86.510345h-68.855172l88.275862-88.275862z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dmg" unicode="&#59030;" d="M54.731034 896v-1024H971.034483V896H54.731034zM953.37931-110.344828H70.62069V878.344828h882.75862v-988.689656zM268.358621 165.075862c-7.062069 3.531034-19.42069 3.531034-35.310345 3.531035H188.910345v-160.662069h44.137931c14.124138 0 24.717241 1.765517 33.544827 3.531034 7.062069 1.765517 14.124138 5.296552 19.42069 10.593104 7.062069 7.062069 12.358621 15.889655 15.889655 26.482758 3.531034 10.593103 5.296552 24.717241 5.296552 40.606897 0 21.186207-3.531034 38.841379-10.593103 51.2-10.593103 12.358621-19.42069 19.42069-28.248276 24.717241zM935.724138 862.455172H589.682759V793.6h-70.62069v-70.62069h70.62069v-70.620689h-70.62069v-70.62069h70.62069v-70.62069h-70.62069v-70.620689h70.62069v-70.62069h-70.62069v-70.62069h-70.62069v70.62069h70.62069v70.62069h-70.62069v70.620689h70.62069v70.62069h-70.62069v70.62069h70.62069v70.620689h-70.62069v70.62069h70.62069v70.62069H88.275862v-953.379311h847.448276V862.455172zM331.917241 45.02069c-3.531034-12.358621-8.827586-22.951724-14.124138-31.779311-5.296552-8.827586-12.358621-15.889655-19.420689-19.420689-7.062069-5.296552-15.889655-8.827586-26.482759-10.593104-10.593103-1.765517-21.186207-3.531034-35.310345-3.531034H157.131034V196.855172h75.917242c17.655172 0 30.013793-1.765517 38.841379-3.531034 12.358621-3.531034 22.951724-8.827586 31.779311-15.889655 12.358621-8.827586 19.42069-22.951724 26.482758-37.075862 5.296552-15.889655 8.827586-31.77931 8.827586-51.2-1.765517-15.889655-3.531034-31.77931-7.062069-44.137931z m266.593104-65.324138h-31.779311v171.255172l-60.027586-171.255172h-28.248276L420.193103 154.482759v-174.786207H388.413793V196.855172h45.903448l51.2-153.6c3.531034-10.593103 7.062069-19.42069 8.827587-26.482758 1.765517 7.062069 5.296552 17.655172 10.593103 28.248276l51.2 150.068965h40.606897v-215.393103z m256 30.013793c-14.124138-12.358621-30.013793-19.42069-44.137931-26.482759-14.124138-5.296552-30.013793-8.827586-45.903448-8.827586-21.186207 0-40.606897 5.296552-58.262069 14.124138s-30.013793 22.951724-40.606897 40.606896c-8.827586 17.655172-14.124138 37.075862-14.124138 58.262069 0 21.186207 5.296552 40.606897 14.124138 60.027587 8.827586 17.655172 21.186207 31.77931 38.841379 40.606896 15.889655 8.827586 35.310345 14.124138 58.262069 14.124138 15.889655 0 30.013793-1.765517 42.372414-7.062069 12.358621-5.296552 22.951724-12.358621 30.013793-21.186207 7.062069-8.827586 12.358621-21.186207 15.889655-35.310345v-1.765517l-28.248276-8.827586v1.765517c-3.531034 10.593103-7.062069 19.42069-12.35862 24.717242-5.296552 5.296552-10.593103 10.593103-19.42069 14.124138-8.827586 3.531034-17.655172 5.296552-28.248276 5.296551-12.358621 0-22.951724-1.765517-33.544827-5.296551-8.827586-3.531034-15.889655-8.827586-22.951724-15.889656-5.296552-7.062069-10.593103-14.124138-12.358621-21.186207-5.296552-12.358621-8.827586-26.482759-8.827586-42.372413 0-19.42069 3.531034-35.310345 8.827586-47.668966 7.062069-12.358621 15.889655-21.186207 28.248276-28.248276 12.358621-5.296552 24.717241-8.827586 38.841379-8.827586 12.358621 0 24.717241 1.765517 35.310345 7.062069 10.593103 5.296552 19.42069 8.827586 24.717241 14.124138v37.075862H759.172414v28.248276h95.337931v-81.213793z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ipa" unicode="&#59049;" d="M836.855172 896v-217.158621h132.413794zM444.910345 719.448276c7.062069 7.062069 10.593103 15.889655 10.593103 28.248276 0 8.827586-1.765517 15.889655-7.062069 21.186207-3.531034 5.296552-10.593103 10.593103-17.655172 12.35862-5.296552 1.765517-14.124138 1.765517-26.482759 1.765518h-52.965517v-72.386207h52.965517c21.186207 0 33.544828 3.531034 40.606897 8.827586zM612.634483 742.4c-5.296552 14.124138-10.593103 28.248276-14.124138 38.841379-1.765517-12.358621-5.296552-22.951724-10.593104-35.310345L564.965517 685.903448h67.089655l-19.420689 56.496552zM969.268966 599.393103V648.827586h-167.724138V896H54.731034v-1024H971.034483l-1.765517 727.393103zM582.62069 813.02069h33.544827v-1.765518l88.275862-217.15862h-37.075862l-24.717241 65.324138h-86.510345l-22.951724-65.324138h-33.544828L582.62069 813.02069z m-261.296552 0h82.97931c14.124138 0 24.717241 0 33.544828-1.765518 10.593103-1.765517 19.42069-5.296552 26.482758-10.593103 7.062069-5.296552 14.124138-12.358621 17.655173-21.186207 5.296552-8.827586 7.062069-19.42069 7.062069-30.013793 0-19.42069-5.296552-35.310345-17.655173-47.668966-12.358621-12.358621-33.544828-19.42069-63.55862-19.420689h-52.965517V595.862069h-31.779311V813.02069z m-102.4 0h31.77931v-218.924138H218.924138V813.02069z m732.689655-921.6H72.386207V507.586207h879.227586v-616.165517zM538.482759 341.627586c12.358621 15.889655 21.186207 37.075862 19.420689 58.262069-19.42069 0-40.606897-12.358621-54.731034-28.248276-12.358621-14.124138-22.951724-35.310345-19.42069-56.496551 21.186207 0 42.372414 12.358621 54.731035 26.482758zM430.786207 30.896552c22.951724 1.765517 31.77931 15.889655 60.027586 15.889655s37.075862-15.889655 61.793104-14.124138c24.717241 0 40.606897 22.951724 56.496551 45.903448 17.655172 26.482759 24.717241 51.2 26.482759 52.965517 0 0-49.434483 19.42069-49.434483 74.151725 0 47.668966 38.841379 68.855172 40.606897 70.620689-21.186207 31.77931-54.731034 35.310345-67.089655 37.075862-28.248276 3.531034-56.496552-17.655172-70.62069-17.655172-14.124138 0-37.075862 15.889655-61.793104 15.889655-31.77931 0-60.027586-17.655172-75.917241-45.903448-31.77931-56.496552-8.827586-141.241379 22.951724-187.144828 14.124138-22.951724 33.544828-47.668966 56.496552-47.668965z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="mpg" unicode="&#59083;" d="M836.855172 896v-217.158621h132.413794zM487.282759 767.117241c-3.531034 5.296552-8.827586 8.827586-15.889656 10.593104-3.531034 0-8.827586 1.765517-24.717241 1.765517h-49.434483v-67.089655h49.434483c17.655172 0 28.248276 3.531034 35.310345 8.827586 7.062069 5.296552 10.593103 14.124138 10.593103 24.717241 0 10.593103-1.765517 15.889655-5.296551 21.186207zM971.034483 599.393103V648.827586h-167.724138V896H54.731034v-1024H971.034483V599.393103zM577.324138 763.586207c8.827586 19.42069 22.951724 33.544828 40.606896 42.372414 17.655172 8.827586 37.075862 14.124138 60.027587 14.124138 15.889655 0 31.77931-3.531034 44.137931-7.062069 14.124138-5.296552 24.717241-12.358621 31.77931-22.951724 7.062069-8.827586 14.124138-21.186207 17.655172-37.075863l1.765518-5.296551-35.310345-10.593104-1.765517 5.296552c-3.531034 10.593103-7.062069 17.655172-10.593104 24.717241-3.531034 5.296552-10.593103 10.593103-17.655172 14.124138-8.827586 3.531034-17.655172 5.296552-28.248276 5.296552-12.358621 0-22.951724-1.765517-31.77931-5.296552-8.827586-3.531034-15.889655-8.827586-21.186207-14.124138-5.296552-5.296552-8.827586-12.358621-12.358621-19.420689-5.296552-12.358621-7.062069-26.482759-7.062069-40.606897 0-17.655172 3.531034-33.544828 8.827586-45.903448 5.296552-12.358621 14.124138-21.186207 26.482759-26.482759 22.951724-10.593103 47.668966-12.358621 72.386207-1.765517 10.593103 3.531034 17.655172 8.827586 22.951724 12.358621v31.77931H670.896552v35.310345h102.4v-88.275862l-1.765518-1.765517c-14.124138-10.593103-30.013793-19.42069-44.137931-26.482759-15.889655-5.296552-31.77931-8.827586-47.668965-8.827586-21.186207 0-42.372414 5.296552-60.027586 14.124138s-31.77931 22.951724-40.606897 40.606896c-8.827586 17.655172-14.124138 37.075862-14.124138 60.027586-1.765517 22.951724 3.531034 42.372414 12.358621 61.793104z m-218.924138 52.965517h86.510345c14.124138 0 26.482759 0 33.544827-1.765517 10.593103-1.765517 21.186207-5.296552 28.248276-10.593104 7.062069-5.296552 14.124138-12.358621 19.42069-22.951724 5.296552-8.827586 7.062069-19.42069 7.062069-31.77931 0-19.42069-7.062069-37.075862-19.42069-49.434483-12.358621-14.124138-35.310345-21.186207-67.089655-21.186207h-49.434483v-86.510345h-38.841379V816.551724z m-263.062069 0h51.2l51.2-155.365517 5.296552-15.889655c1.765517 5.296552 3.531034 12.358621 7.062069 19.420689l52.965517 153.6h47.668965v-225.986207h-38.841379V744.165517l-52.965517-153.6H187.144828l-52.965518 155.365517v-155.365517H95.337931V816.551724zM953.37931-110.344828H72.386207V507.586207H953.37931v-617.931035zM789.186207 322.206897l-165.958621-72.386207v104.165517H236.57931v-312.496552h386.648276V154.482759l165.958621-82.979311z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="php" unicode="&#59085;" d="M836.855172 896v-217.158621h132.413794zM716.8 719.448276c7.062069 7.062069 10.593103 15.889655 10.593103 28.248276 0 8.827586-1.765517 15.889655-7.062069 21.186207-3.531034 5.296552-10.593103 10.593103-17.655172 12.35862-5.296552 1.765517-14.124138 1.765517-26.482759 1.765518h-52.965517v-72.386207h52.965517c21.186207 0 33.544828 3.531034 40.606897 8.827586zM275.42069 719.448276c7.062069 7.062069 10.593103 15.889655 10.593103 28.248276 0 8.827586-1.765517 15.889655-7.062069 21.186207-3.531034 5.296552-10.593103 10.593103-17.655172 12.35862-5.296552 1.765517-14.124138 1.765517-26.482759 1.765518h-52.965517v-72.386207h52.965517c21.186207 0 33.544828 3.531034 40.606897 8.827586zM969.268966 599.393103V648.827586h-167.724138V896H54.731034v-1024H971.034483l-1.765517 727.393103zM593.213793 813.02069h82.97931c14.124138 0 24.717241 0 33.544828-1.765518 10.593103-1.765517 19.42069-5.296552 26.482759-10.593103 7.062069-5.296552 14.124138-12.358621 17.655172-21.186207 5.296552-8.827586 7.062069-19.42069 7.062069-30.013793 0-19.42069-5.296552-35.310345-17.655172-47.668966-12.358621-12.358621-33.544828-19.42069-63.558621-19.420689h-52.965517V595.862069h-31.779311V813.02069z m-227.751724 0h31.77931v-88.275862h107.696552v88.275862h31.77931v-218.924138h-31.77931v100.634482h-107.696552v-100.634482h-31.77931V813.02069z m-213.627586 0h82.97931c14.124138 0 24.717241 0 33.544828-1.765518 10.593103-1.765517 19.42069-5.296552 26.482758-10.593103 7.062069-5.296552 14.124138-12.358621 17.655173-21.186207 5.296552-8.827586 7.062069-19.42069 7.062069-30.013793 0-19.42069-5.296552-35.310345-17.655173-47.668966-12.358621-12.358621-33.544828-19.42069-63.55862-19.420689h-52.965518V595.862069H151.834483V813.02069z m799.77931-921.6H72.386207V507.586207h879.227586v-616.165517zM446.675862 128l-88.275862 88.275862 88.275862 88.275862h-68.855172l-84.744828-86.510345 84.744828-90.041379zM577.324138 128h68.855172l84.744828 90.041379-84.744828 86.510345h-68.855172l88.275862-88.275862z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="psd" unicode="&#59100;" d="M836.855172 896v-217.158621h132.413794zM681.489655 638.234483c7.062069 7.062069 12.358621 15.889655 15.889655 26.482758 3.531034 10.593103 5.296552 24.717241 5.296552 40.606897 0 21.186207-3.531034 38.841379-10.593103 51.2-7.062069 12.358621-15.889655 19.42069-26.482759 22.951724-7.062069 3.531034-19.42069 3.531034-35.310345 3.531035h-44.137931v-160.662069h44.137931c14.124138 0 24.717241 1.765517 33.544828 3.531034 7.062069 3.531034 12.358621 7.062069 17.655172 12.358621zM252.468966 719.448276c7.062069 7.062069 10.593103 15.889655 10.593103 28.248276 0 8.827586-1.765517 15.889655-7.062069 21.186207-3.531034 5.296552-10.593103 10.593103-17.655172 12.35862-5.296552 1.765517-14.124138 1.765517-26.482759 1.765518H158.896552v-72.386207h52.965517c21.186207 0 33.544828 3.531034 40.606897 8.827586zM969.268966 599.393103V648.827586h-167.724138V896H54.731034v-1024H971.034483l-1.765517 727.393103zM554.372414 813.02069h75.917241c15.889655 0 30.013793-1.765517 38.841379-3.531035 12.358621-3.531034 22.951724-8.827586 31.779311-15.889655 12.358621-10.593103 19.42069-22.951724 26.482758-37.075862 5.296552-15.889655 8.827586-31.77931 8.827587-51.2 0-15.889655-1.765517-31.77931-5.296552-44.137931-3.531034-12.358621-8.827586-22.951724-14.124138-31.77931-5.296552-8.827586-12.358621-15.889655-19.42069-19.42069-7.062069-5.296552-15.889655-8.827586-26.482758-10.593104-10.593103-1.765517-21.186207-3.531034-35.310345-3.531034h-79.448276V813.02069z m-84.744828-141.24138c-3.531034 5.296552-10.593103 8.827586-19.420689 12.358621-5.296552 1.765517-17.655172 5.296552-38.84138 10.593103-19.42069 5.296552-33.544828 8.827586-42.372414 14.124138-10.593103 5.296552-17.655172 12.358621-22.951724 21.186207-5.296552 8.827586-7.062069 17.655172-7.062069 28.248276 0 10.593103 3.531034 21.186207 8.827587 31.779311 7.062069 8.827586 15.889655 17.655172 28.248275 22.951724 12.358621 5.296552 24.717241 7.062069 40.606897 7.062069 15.889655 0 30.013793-1.765517 42.372414-7.062069 12.358621-5.296552 22.951724-12.358621 28.248276-22.951724 7.062069-10.593103 10.593103-21.186207 10.593103-35.310345v-1.765518l-30.013793-1.765517v1.765517c-1.765517 12.358621-7.062069 22.951724-14.124138 30.013794-8.827586 7.062069-21.186207 10.593103-37.075862 10.593103-15.889655 0-28.248276-3.531034-37.075862-8.827586-5.296552-12.358621-8.827586-19.42069-8.827586-28.248276 0-7.062069 1.765517-12.358621 7.062069-17.655172 5.296552-5.296552 19.42069-10.593103 42.372413-14.124138 22.951724-5.296552 38.841379-10.593103 47.668966-14.124138 12.358621-5.296552 22.951724-14.124138 28.248276-22.951724 5.296552-8.827586 8.827586-19.42069 8.827586-31.779311s-3.531034-22.951724-10.593103-33.544827c-7.062069-10.593103-15.889655-17.655172-28.248276-24.717242-12.358621-5.296552-26.482759-8.827586-42.372414-8.827586-19.42069 0-37.075862 3.531034-49.434483 8.827586-14.124138 5.296552-24.717241 14.124138-31.77931 26.482759-7.062069 12.358621-12.358621 24.717241-12.358621 38.841379v1.765517l30.013793 1.765518v-1.765518c1.765517-10.593103 3.531034-19.42069 8.827586-26.482758 5.296552-7.062069 10.593103-12.358621 21.186207-15.889655 8.827586-3.531034 21.186207-7.062069 31.779311-7.062069 10.593103 0 19.42069 1.765517 28.248276 5.296551 7.062069 3.531034 14.124138 7.062069 17.655172 12.358621 3.531034 5.296552 5.296552 10.593103 5.296552 17.655172 1.765517 10.593103 0 15.889655-3.531035 21.186207z m-340.744827 141.24138H211.862069c14.124138 0 24.717241 0 33.544828-1.765518 10.593103-1.765517 19.42069-5.296552 26.482758-10.593103 7.062069-5.296552 14.124138-12.358621 17.655173-21.186207 5.296552-8.827586 7.062069-19.42069 7.062069-30.013793 0-19.42069-5.296552-35.310345-17.655173-47.668966-12.358621-12.358621-33.544828-19.42069-63.558621-19.420689h-52.965517V595.862069H128.882759V813.02069z m822.731034-921.6H72.386207V507.586207h879.227586v-616.165517zM367.227586 173.903448h42.372414c33.544828-1.765517 61.793103 8.827586 84.744828 28.248276 22.951724 19.42069 33.544828 45.903448 33.544827 77.682759 0 31.77931-8.827586 56.496552-28.248276 72.386207-19.42069 17.655172-45.903448 24.717241-81.213793 24.717241h-91.806896v-324.855172h42.372413v121.820689z m0 165.958621h42.372414c49.434483 0 74.151724-21.186207 74.151724-63.558621 0-21.186207-7.062069-38.841379-19.42069-49.434482s-33.544828-17.655172-58.262068-17.655173h-38.84138v130.648276zM674.427586 64.441379c17.655172 12.358621 26.482759 28.248276 26.482759 49.434483 0 15.889655-5.296552 28.248276-14.124138 38.841379s-26.482759 21.186207-52.965517 30.013793c-21.186207 8.827586-33.544828 14.124138-38.84138 19.42069-5.296552 5.296552-8.827586 12.358621-8.827586 21.186207s3.531034 17.655172 12.358621 22.951724c8.827586 5.296552 19.42069 8.827586 31.77931 8.827586 21.186207 0 42.372414-5.296552 58.262069-17.655172v38.841379c-17.655172 7.062069-35.310345 10.593103-54.731034 10.593104-24.717241 0-47.668966-7.062069-63.558621-19.42069-17.655172-12.358621-26.482759-28.248276-26.482759-49.434483 0-14.124138 3.531034-26.482759 12.358621-37.075862 7.062069-10.593103 24.717241-21.186207 49.434483-30.013793 21.186207-8.827586 35.310345-14.124138 42.372414-21.186207 7.062069-5.296552 10.593103-12.358621 10.593103-22.951724 0-21.186207-15.889655-31.77931-47.668965-31.77931-24.717241 0-45.903448 7.062069-67.089656 22.951724v-42.372414c17.655172-8.827586 38.841379-14.124138 63.558621-14.124138 28.248276 5.296552 49.434483 10.593103 67.089655 22.951724z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="vsd" unicode="&#59122;" d="M837.737931 896v-217.158621h134.17931zM687.668966 638.234483c7.062069 7.062069 12.358621 15.889655 15.889655 26.482758 3.531034 10.593103 5.296552 24.717241 5.296551 40.606897 0 21.186207-3.531034 38.841379-10.593103 51.2-7.062069 12.358621-15.889655 19.42069-26.482759 22.951724-7.062069 3.531034-19.42069 3.531034-35.310344 3.531035h-44.137932v-160.662069h44.137932c14.124138 0 24.717241 1.765517 33.544827 3.531034 7.062069 3.531034 14.124138 7.062069 17.655173 12.358621zM971.917241 599.393103V648.827586h-167.724138V896H55.613793v-1024h916.303448V599.393103zM560.551724 813.02069h75.917242c17.655172 0 30.013793-1.765517 38.841379-3.531035 12.358621-3.531034 22.951724-8.827586 31.77931-15.889655 12.358621-10.593103 19.42069-22.951724 26.482759-37.075862 5.296552-15.889655 8.827586-31.77931 8.827586-51.2 0-15.889655-1.765517-31.77931-5.296552-44.137931-3.531034-12.358621-8.827586-22.951724-14.124138-31.77931-5.296552-8.827586-12.358621-15.889655-19.420689-19.42069-7.062069-5.296552-15.889655-8.827586-26.482759-10.593104-10.593103-1.765517-21.186207-3.531034-35.310345-3.531034h-79.448276V813.02069z m-82.97931-141.24138c-3.531034 5.296552-10.593103 8.827586-19.42069 12.358621-5.296552 1.765517-17.655172 5.296552-38.841379 10.593103-19.42069 5.296552-33.544828 8.827586-42.372414 14.124138-10.593103 5.296552-17.655172 12.358621-22.951724 21.186207-5.296552 8.827586-7.062069 17.655172-7.062069 28.248276 0 10.593103 3.531034 21.186207 8.827586 31.779311 7.062069 8.827586 15.889655 17.655172 28.248276 22.951724 12.358621 5.296552 24.717241 7.062069 40.606897 7.062069 15.889655 0 30.013793-1.765517 42.372413-7.062069 12.358621-5.296552 22.951724-12.358621 28.248276-22.951724 7.062069-10.593103 10.593103-21.186207 10.593104-35.310345v-1.765518l-30.013793-7.062069v1.765518c-1.765517 12.358621-7.062069 22.951724-14.124138 30.013793-8.827586 7.062069-21.186207 10.593103-37.075862 10.593103-15.889655 0-28.248276-3.531034-37.075863-8.827586-7.062069-5.296552-10.593103-12.358621-10.593103-21.186207 0-7.062069 1.765517-12.358621 7.062069-17.655172 5.296552-5.296552 19.42069-10.593103 42.372414-14.124138 22.951724-5.296552 38.841379-10.593103 47.668965-14.124138 12.358621-5.296552 22.951724-14.124138 28.248276-22.951724 5.296552-8.827586 8.827586-19.42069 8.827586-31.779311s-3.531034-22.951724-10.593103-33.544827c-7.062069-10.593103-15.889655-17.655172-28.248276-24.717242-12.358621-5.296552-26.482759-8.827586-42.372414-8.827586-19.42069 0-37.075862 3.531034-49.434482 8.827586-14.124138 5.296552-24.717241 14.124138-31.779311 26.482759-7.062069 12.358621-12.358621 24.717241-12.358621 38.841379V666.482759l30.013794 1.765517v-1.765517c1.765517-10.593103 3.531034-19.42069 8.827586-26.482759 5.296552-7.062069 10.593103-12.358621 21.186207-15.889655 8.827586-3.531034 21.186207-7.062069 31.77931-7.062069 10.593103 0 19.42069 1.765517 28.248276 5.296552 8.827586 3.531034 14.124138 7.062069 17.655172 12.35862 3.531034 5.296552 5.296552 10.593103 5.296552 17.655173 3.531034 8.827586 1.765517 14.124138-1.765517 19.420689z m-330.151724 141.24138l56.496551-157.131035c3.531034-10.593103 7.062069-19.42069 8.827587-30.013793 3.531034 10.593103 7.062069 19.42069 10.593103 30.013793L281.6 813.02069h33.544828l-1.765518-1.765518L228.634483 595.862069H198.62069v1.765517L113.875862 813.02069h33.544828z m806.841379-921.6H73.268966V507.586207H952.496552v-616.165517zM481.103448 59.144828l-123.586207 254.234482h45.903449l82.97931-185.37931c7.062069-14.124138 12.358621-28.248276 15.889655-42.372414 5.296552 14.124138 10.593103 28.248276 17.655173 42.372414L606.455172 313.37931h42.372414l-123.586207-254.234482h-44.137931z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="pdf" unicode="&#59012;" d="M869.073 618.693H657.111V830.656l211.962-211.963z m-238.232-26.27V830.656l-476.498 0.054v-416.957h714.73v178.67H630.841z m-335.836-360.57c-5.07 3.064-10.944 5.133-17.61 6.201-6.67 1.064-13.603 1.6-20.81 1.6h-48.821v-85.641h48.822c7.206 0 14.14 0.532 20.81 1.6 6.665 1.065 12.54 3.133 17.609 6.202 5.064 3.063 9.134 7.406 12.208 13.007 3.065 5.602 4.6 12.937 4.6 22.011 0 9.07-1.535 16.408-4.6 22.01-3.074 5.603-7.144 9.94-12.208 13.01zM35.82 354.195v-416.904h952.358V354.195H35.821z m331.421-191.179c-3.6-11.071-9.343-20.879-17.209-29.413-7.874-8.542-18.078-15.408-30.617-20.61-12.544-5.206-27.747-7.807-45.621-7.807h-66.036v-102.45h-62.831V288.483h128.867c17.874 0 33.077-2.6 45.62-7.802 12.541-5.207 22.745-12.076 30.618-20.615 7.866-8.538 13.604-18.277 17.21-29.212 3.6-10.943 5.401-22.278 5.401-34.018 0-11.477-1.8-22.752-5.402-33.819zM644.9 89.583c-5.343-17.61-13.408-32.818-24.212-45.627-10.807-12.803-24.283-22.879-40.423-30.213-16.146-7.343-35.155-11.007-57.03-11.007h-123.26V288.482h123.26c18.41 0 35.552-2.941 51.428-8.808 15.873-5.869 29.618-14.671 41.22-26.412 11.608-11.744 20.674-26.411 27.217-44.02 6.535-17.61 9.803-38.288 9.803-62.035 0-20.81-2.67-40.02-8.003-57.624z m245.362 146.07H752.192v-66.03h119.66v-48.829h-119.66v-118.058h-62.83V288.482h200.9v-52.829h-0.001z m-318.2-25.611c-6.402 8.266-14.877 14.604-25.412 19.01-10.544 4.402-23.551 6.602-39.019 6.602h-44.825v-180.088h56.029c9.07 0 17.872 1.463 26.415 4.401 8.535 2.932 16.14 7.802 22.812 14.609 6.665 6.8 12.007 15.667 16.007 26.61 4.003 10.94 6.003 24.275 6.003 40.021 0 14.408-1.4 27.416-4.202 39.019-2.8 11.607-7.406 21.542-13.808 29.816z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="kaoqin" unicode="&#59013;" d="M940.03333334 458.4V656.2c0.1 19.5-15.9 35.5-35.39999999 35.5H765.23333334v85.4c0 31-25.1 56.1-56.10000001 56.1s-56.1-25.1-56.1-56.1v-85.4H376.73333332v85.4c0 31-25.1 56.1-56.09999998 56.1s-56.1-25.1-56.10000001-56.1v-85.4H107.63333332c-19.5 0-35.5-16-35.49999997-35.5v-633.4c0-43.8 35.8-79.7 79.69999997-79.7h708.70000003c43.8 0 79.7 35.8 79.69999997 79.7V453.2c0 1.8-0.1 3.5-0.19999998 5.2zM178.83333332 610.9h133.60000003c2.7-0.4 5.4-0.6 8.19999999-0.6s5.5 0.2 8.19999999 0.6h372.1c2.7-0.4 5.4-0.6 8.2-0.6 2.8 0 5.5 0.2 8.2 0.6h116.1c14.3 0 25.9-11.6 25.9-25.9v-52.2H152.93333333V585c0 14.3 11.6 25.9 25.89999999 25.9z m574.10000001-303.2l-271.19999999-259c-16.3-16.2-48.8-16.2-70.50000001 0L259.33333335 199.79999999999995c-16.3 16.2-16.3 48.6 0 64.8s48.8 16.2 70.49999999 0l119.40000001-118.8 233.29999998 226.7c16.3 16.2 48.8 16.2 70.49999999 0 16.2-16.2 16.2-48.6-0.09999999-64.8z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="uicon_mov" unicode="&#59014;" d="M495.68635168 336.57798048999996c0-48.03353471 22.55702153-81.87399737 59.67204989-81.87399736 37.49969191 0 58.96190301 35.65528315 58.96190302 83.32388062 0 44.00936945-21.10713825 81.8641342-59.31697585 81.86413421-37.47010241 0-59.31697706-35.66514631-59.31697706-83.31401747zM908.56762148 521.87695604h-24.1548511V638.43964852c0 0.72987322-0.11835802 1.45974644-0.20712653 2.19948161a19.3810875 19.3810875 0 0 1-4.68499509 12.77277708L685.55196553 874.98754427c-0.05917901 0.05917901-0.11835802 0.07890534-0.15781069 0.13808435a19.50930868 19.50930868 0 0 1-5.21760617 4.06361672 20.48575988 20.48575988 0 0 1-3.89594286 1.63728225c-0.364936 0.09863168-0.69042054 0.2465792-1.05535776 0.34521088a19.75588667 19.75588667 0 0 1-4.5271844 0.56219936H193.99235872c-21.7679693 0-39.45259554-17.70435258-39.45259554-39.45259554V521.88681921h-24.15485111a56.38762101 56.38762101 0 0 1-56.38762101-56.38762101v-293.23141181a56.39748418 56.39748418 0 0 1 56.38762101-56.38762223h24.15485111v-200.73480192c0-21.74824297 17.68462624-39.45259554 39.45259554-39.45259554h650.96781612c21.74824297 0 39.45259554 17.70435258 39.45259554 39.45259554V115.87030220999998h24.1548511a56.39748418 56.39748418 0 0 1 56.38762102 56.38762101v293.23141181a56.38762101 56.38762101 0 0 1-56.38762102 56.38762101zM193.99235872 842.27147913H650.97176527v-201.84933869a19.72629716 19.72629716 0 0 1 19.72629838-19.72629717h174.26211119v-98.8287504h-650.96781612V842.27147913z m478.89532336-502.41893293c0-80.42411532-48.75354476-129.17765886-120.41918266-129.17765886-72.79003785 0-115.34952402 54.94760212-115.34952403 124.7885576 0 73.51991106 46.92886111 128.44778564 119.3342354 128.44778564 75.315004 0.00986317 116.43447129-56.39748418 116.43447129-124.05868438z m-482.15016273-32.01578022l-4.35951177-93.15744093h-51.29823603l15.65281607 245.22746781h73.8453956l24.02662992-81.85427103c7.63407747-28.38614167 15.27801689-58.96190301 20.73233908-87.70311873h1.08494605c6.92393059 28.38614167 15.30760639 60.76685911 23.28689354 88.05819157l26.2063864 81.49919819h72.40537551l13.46319762-245.22746781h-54.20786574l-3.64936489 93.87744977c-1.08494606 29.47108895-2.18961844 65.13623404-2.18961843 100.79151718h-1.08494727a1341.29945926 1341.29945926 0 0 0-27.27160611-94.99198532l-29.83602495-95.69226904h-43.30908574l-26.19652323 94.99198533c-8.01873981 28.74121572-16.39255366 63.66662565-22.20194748 95.69226903h-0.72987322c-1.44988327-33.11059066-2.54469249-70.9653554-4.36937493-101.51152602z m654.22265549-382.00961464h-650.96781612V115.87030220999998h650.96781612v-190.04315087z m-15.57391194 288.85217371h-64.76143486l-78.59943167 245.22746781h60.75699595l29.83602495-103.70114567c8.37381386-29.09628857 16.00789011-57.12735741 21.83701148-87.70311873h1.09480921a1073.55442381 1073.55442381 0 0 0 22.19208553 86.61817147l31.285907 104.77622977h58.961903l-82.60387059-245.21760465z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="scatter-chart" unicode="&#59523;" d="M112.4352-10.786133329999984V820.90666667a39.3216 39.3216 0 0 1-39.04853333 40.20906666 39.3216 39.3216 0 0 1-38.98026667-40.20906666v-871.56053334c0-22.18666667 16.5888-42.1888 38.63893333-42.1888h876.40746667a40.68693333 40.68693333 0 0 1 39.79946667 40.96c0 22.18666667-17.74933333 40.96-39.79946667 40.96H112.4352zM871.0144 302.35306667c-39.18506667 0-70.99733333 32.08533333-70.99733333 71.54346666 0 39.59466667 31.81226667 71.54346667 70.99733333 71.54346667 39.18506667 0 70.99733333-32.01706667 70.99733333-71.54346667 0-39.5264-31.81226667-71.54346667-70.99733333-71.54346666zM674.6112 523.264c-58.84586667 0-106.496 48.05973333-106.496 107.38346667 0 59.25546667 47.65013333 107.3152 106.496 107.3152 58.70933333 0 106.42773333-48.05973333 106.42773333-107.3152 0-59.32373333-47.65013333-107.38346667-106.496-107.38346667z m-141.99466667-363.99786667a142.5408 142.5408 0 0 0-141.9264 143.08693334c0 79.0528 63.55626667 143.08693333 141.99466667 143.08693333 78.37013333 0 141.9264-64.03413333 141.9264-143.08693333 0-78.98453333-63.55626667-143.08693333-141.99466667-143.08693334z m-283.8528-51.47306666c-39.18506667 0-70.99733333 32.08533333-70.99733333 71.54346666 0 39.5264 31.81226667 71.54346667 70.99733333 71.54346667 39.18506667 0 70.99733333-32.01706667 70.99733334-71.54346667 0-39.5264-31.81226667-71.54346667-70.99733334-71.54346666z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="duochuangkou" unicode="&#59804;" d="M984.17149013-18.146782929999972H452.34479573c-14.08833387 0-25.4958784 11.19033067-25.4958784 24.97958613v91.58453973h77.70905387v-38.855072H931.95940587V370.40066987h-77.70905387v77.70905386h129.92222933c14.0730528 0 25.4969696-11.1750496 25.49697067-24.97958613v-416.2962432c-0.0010912-13.79034773-11.42500907-24.9806784-25.49806187-24.98067733zM789.89830933 137.27241600000002H219.21654187c-14.08833387 0-25.4958784 11.19033067-25.4958784 24.9795872V617.4033184c0 13.80453653 11.40754453 24.97958613 25.4958784 24.97958613h570.68176746c14.0730528 0 25.4958784-11.1750496 25.4958784-24.97958613V162.2520032c0.0010912-13.78925547-11.4228256-24.97958613-25.4958784-24.9795872zM290.85670827 603.9360629299999c-10.73516373 0-19.42699093-8.72238933-19.42699094-19.496848s8.69182613-19.49357333 19.42699094-19.4935744c10.73516373 0 19.42699093 8.71911467 19.42699093 19.4935744s-8.69073493 19.496848-19.42699093 19.496848z m77.71014613 0c-10.73516373 0-19.42699093-8.72238933-19.42699093-19.496848s8.69182613-19.49357333 19.42699093-19.4935744 19.42699093 8.71911467 19.42698987 19.4935744-8.69182613 19.496848-19.42698987 19.496848z m77.70905387 0c-10.73516373 0-19.42699093-8.72238933-19.42699094-19.496848s8.69182613-19.49357333 19.42699094-19.4935744c10.73516373 0 19.42699093 8.71911467 19.42699093 19.4935744s-8.69182613 19.496848-19.42699093 19.496848z m291.4092256-78.11728533H271.42971733v-310.83730773h466.25541654V525.8187776zM543.41195307 720.09195947H77.15653653v-388.54636267h77.70905494v-77.70905387H24.94336107c-14.08833387 0-25.4958784 11.19033067-25.4958784 24.97958614V772.82142613c0 13.80453653 11.40754453 24.97958613 25.4958784 24.9795872h570.68176746c14.0730528 0 25.4969696-11.1750496 25.4969696-24.9795872v-91.58453973h-77.70905386v38.85507307z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zip" unicode="&#59015;" d="M851.02186667 615.07733333h-197.216V825.54453333l197.216-210.4672z m-225.92533334-26.08426666V825.54453333L171.07733333 825.6v-414.02026667h681.01013334V588.99306667H625.09653333zM69.33333333 352.44266667v-413.96373334h886.11093334V352.44266667H69.33333333z m327.81226667-348.9792H172.98346667v49.27466666l142.61546666 182.00106667h-131.44533333v52.4544h209.26826667v-49.27466667L250.80746667 55.91893332999996h146.3392v-52.45546666h-0.00106667z m143.5424 0h-58.45973333V287.19466666999995h58.45973333v-283.7312z m245.53813333 232.3008c-4.71893333 3.04213333-10.18133333 5.09653333-16.38293333 6.15893333-6.208 1.05493333-12.66026667 1.58933333-19.3632 1.58933333h-45.42826667v-85.04h45.42826667c6.70293333 0 13.1552 0.528 19.3632 1.59146667 6.20266667 1.05386667 11.66506667 3.10933333 16.38293333 6.15893333 4.71253333 3.0432 8.50026667 7.35146667 11.35786667 12.91413334 2.85013333 5.56373333 4.2816 12.84586667 4.2816 21.856 0 9.00373333-1.43146667 16.29226667-4.2816 21.856-2.8576 5.56373333-6.64533333 9.86666667-11.35786667 12.9152z m65.0336-73.18506667c-3.27466667-10.99733333-8.496-20.7328-15.64906666-29.20853333-7.15946667-8.48106667-16.43946667-15.29813333-27.84-20.46506667-11.40693333-5.16586667-25.23626667-7.74933333-41.488-7.74933333h-60.048v-101.73013334h-57.13706667V287.15840000000003H766.28266667c16.25173333 0 30.08106667-2.5824 41.488-7.74826667 11.40053333-5.16586667 20.68053333-11.9904 27.84-20.46613333 7.15306667-8.48213333 12.37333333-18.14933333 15.64906666-29.008 3.27466667-10.86613333 4.91306667-22.1248 4.91306667-33.77813333 0-11.39413333-1.6384-22.58986667-4.91306667-33.57866667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="txt" unicode="&#59016;" d="M70.4 352.34346667v-411.24586667h885.32906667V352.34346667H70.4z m290.79573333-121.1712h-70.7328v-211.97546667h-51.11786666V231.17226667h-70.70613334v53.98293333h192.55786667v-53.98293333h-0.00106667z m189.99146667-211.97653334l-52.11733333 91.20853334-52.46933334-91.20853334h-58.0896l81.00053334 135.2352-77.6768 130.72426667h59.76426666l48.79466667-86.2624 49.14666667 86.2624h58.08853333l-77.67786667-129.91893333 81.0272-136.03946667h-59.78986666v-0.00106667h-0.00106667z m279.61066667 211.97653334H760.11733333v-211.97546667h-51.11786666V231.17226667h-70.7328v53.98293333h192.5312v-53.98293333z m20.416 358.21866666H624.1664V825.54666667L170.03733333 825.6v-413.32053333h681.17653334V589.39093333zM655.01546667 825.54666667v-210.1152h197.26613333L655.01546667 825.54666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file1" unicode="&#59017;" d="M629.418667 707.584V895.658667l255.658666-257.706667h-186.709333a68.7104 68.7104 0 0 0-68.949333 69.632z m57.685333-544.768a29.013333 29.013333 0 0 1-28.330667 28.672H399.701333a29.252267 29.252267 0 0 1-28.330666-28.672v-5.12a29.252267 29.252267 0 0 1 28.330666-28.672h259.072a29.013333 29.013333 0 0 1 28.330667 28.672v5.12z m0 127.658667a29.013333 29.013333 0 0 1-28.330667 28.672H399.701333a29.252267 29.252267 0 0 1-28.330666-28.672v-5.12a29.252267 29.252267 0 0 1 28.330666-28.672h259.072a29.013333 29.013333 0 0 1 28.330667 28.672v5.12z m0 127.658666a29.013333 29.013333 0 0 1-28.330667 28.672H399.701333a29.252267 29.252267 0 0 1-28.330666-28.672v-5.12a28.945067 28.945067 0 0 1 28.330666-28.330666h259.072a28.706133 28.706133 0 0 1 28.330667 28.330666V418.133333zM311.296 162.816a28.330667 28.330667 0 1 1-56.661333 0v-5.12a28.330667 28.330667 0 1 1 56.661333 0v5.12z m0 127.658667a28.330667 28.330667 0 1 1-56.661333 0v-5.12a28.330667 28.330667 0 1 1 56.661333 0v5.12z m0 127.658666a28.330667 28.330667 0 1 1-56.661333 0v-5.12a28.330667 28.330667 0 1 1 56.661333 0V418.133333z m486.741333-545.792H225.962667a89.156267 89.156267 0 0 0-89.088 90.112V805.546667A89.156267 89.156267 0 0 0 225.962667 895.658667h338.261333v-253.610667a68.539733 68.539733 0 0 1 69.290667-68.608h253.610666v-610.986667a89.156267 89.156267 0 0 0-89.088-90.112z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ie" unicode="&#59018;" d="M1014.34989141 359.97336969c0-18.22709886 0-38.80162713-2.34742938-57.02872599H363.55961153c0-111.84810667 98.17778252-194.14621971 205.46911445-194.14621973 73.04647954 0 143.88361376 36.5922818 180.3378115 100.52521191h237.50462157c-63.9329301-180.33781149-232.94784685-301.43755167-424.74663718-301.43755167-68.48970482 0-136.97940963 16.01775355-198.70299444 47.91517656-63.9329301-32.03550709-150.64973379-66.2803595-221.48686802-66.2803595-95.96843719 0-132.42263493 57.02872598-132.42263491 148.44038848 0 52.47195126 11.46097883 102.73455724 27.3406483 152.99716319 6.90420412 32.03550709 45.70583125 98.17778252 61.58550069 130.21328961 68.48970482 123.30908549 157.55393792 246.618171 267.19269926 340.23917879-84.50745837-36.5922818-180.33781149-130.21328962-239.71396688-198.70299443 45.70583125 203.25976915 228.39107214 349.35272823 436.06953192 349.35272823H589.32708608c68.48970482 32.03550709 166.66748735 66.2803595 244.27074162 66.28035952 89.06423309 0 169.01491675-34.24485242 169.01491673-136.97940966 0-52.47195126-20.57452827-111.84810667-43.35840185-162.11071262 36.86844997-66.2803595 55.09554883-143.88361376 55.09554883-219.27752269z m-38.80162711 358.60436172c0 63.9329301-45.70583125 100.52521191-105.08198664 100.52521194-47.91517657 0-100.52521191-18.22709886-143.88361376-38.80162714 93.62100781-36.5922818 169.01491675-100.52521191 219.13943862-182.68524089 16.15583763 36.45419773 29.82616178 82.02194489 29.82616178 120.96165609zM80.48724281 26.638394999999946c0-66.2803595 38.80162713-100.52521191 102.73455722-100.52521192 50.26260596 0 105.08198663 20.57452827 148.44038848 47.91517657C238.0411807 28.985824389999948 169.55147588 113.35519867999994 135.30662347 213.8804106c-25.13130297-54.81938068-54.81938068-127.86586021-54.81938066-187.2420156z m283.07236872 399.61533418h406.38145422c-2.3474294 107.29133195-100.52521191 184.89458621-203.25976916 184.89458622-104.94390255 0-200.77425567-77.60325425-203.12168506-184.89458622z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gongsijieshao1" unicode="&#59020;" d="M535.45436019 172.77613828000005H381.16907142a31.22440401 31.22440401 0 1 1 0-62.448808h154.28528877a31.22440401 31.22440401 0 1 1 0 62.448808z m0 154.28528877H381.16907142a31.22440401 31.22440401 0 1 1 0-62.44880713h154.28528877a31.22440401 31.22440401 0 1 1 0 62.44880713z m0 154.28528965H381.16907142a31.22440401 31.22440401 0 1 1 0-62.44880801h154.28528877a31.22440401 31.22440401 0 1 1 0 62.44880801zM799.94342728 833.99880644H491.37284886A30.94889414 30.94889414 0 0 1 460.14844574 802.77440244a30.94889414 30.94889414 0 0 1 31.22440312-31.224404H799.94342728a57.21412852 57.21412852 0 0 0 56.93861866-56.93861865v-719.07965156H743.00480863V604.40760234a75.67326123 75.67326123 0 0 1-75.30591445 75.30591446H270.96529311a75.67326123 75.67326123 0 0 1-75.30591534-75.30591446v-607.95750937H50.55773735a31.22440401 31.22440401 0 0 1 0-62.44880713h837.54871259a30.94889414 30.94889414 0 0 1 31.224404 31.224404V714.61137979A119.38742578 119.38742578 0 0 1 799.94342728 833.99880644zM257.18982104 604.40760234a12.58159834 12.58159834 0 0 0 12.85710732 12.85710733h396.73360107a12.58159834 12.58159834 0 0 0 12.85710733-12.85710733v-607.95750937h-422.44781573z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="key1" unicode="&#59254;" d="M677.232229 831.880657c-155.760506 0-281.694707-125.934201-281.694707-281.693684 0-33.140795 6.627954-66.281589 16.569374-99.42136L64.132646 102.78727v-165.702949h165.702949v99.42136h99.421361v99.42136h99.42136l149.131529 149.131529c29.827329-9.94142 62.968124-16.569374 99.42136-16.569374 155.76153 0 281.694707 125.934201 281.694707 281.694707S832.994782 831.880657 677.232229 831.880657z m82.853009-298.265104c-56.340169 0-99.42136 43.082214-99.42136 99.42136s43.082214 99.42136 99.42136 99.42136 99.42136-43.082214 99.421361-99.42136-43.082214-99.42136-99.421361-99.42136z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="microsoftoutlook" unicode="&#59021;" d="M1024 580.8v-447.04a34.048 34.048 0 0 0-34.944-34.432H624.448v296.96l68.224-52.48c4.352-3.584 9.728-5.376 16.128-5.376s11.904 1.792 16.64 5.44L1024 580.8zM624.448 667.008h364.608c9.088 0 16.832-2.688 23.232-8.192 6.4-5.44 9.92-12.8 10.624-21.76L708.48 386.368 624.448 452.48V667.008zM571.968 859.136v-950.272L0 7.68V757.568L572.032 859.136z m-172.8-477.056c-0.832 48.384-13.312 88.448-37.504 120.064-23.68 31.616-54.4 48.256-90.88 49.728-35.2-1.472-65.28-18.048-89.6-49.728-24.32-31.616-36.48-71.68-37.12-120.064 0.64-47.68 13.44-87.296 37.76-119.04 24.32-31.616 54.4-48.32 89.6-50.176 36.48 1.472 67.2 18.112 91.52 49.92 24.32 31.872 37.12 71.68 37.76 119.296z m-133.12 105.92c18.368-0.768 33.92-10.88 46.208-30.592 12.16-19.648 18.56-44.544 18.56-74.752 0-30.72-6.4-55.68-18.56-75.52-12.8-19.84-28.16-30.08-46.72-30.08s-33.92 9.6-46.72 29.44c-12.8 19.84-18.56 44.8-18.56 74.88s5.76 55.04 18.56 74.24c12.16 19.2 27.52 29.44 46.08 30.72z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shu" unicode="&#59101;" d="M172.5975131-115.91220224000006c-63.08150613 0-102.74321635 39.55226738-102.74321635 102.52549347V781.44143019c0 62.91850467 39.66171136 102.47077205 102.74321635 102.47077205h639.19099791c25.95097259 0 47.0526555-21.0446336 47.05265664-46.94321266v-87.40013625h48.25304405c25.95097259 0 47.0526555-21.04579755 47.0526555-46.94321266v-771.5934663c0-25.89741511-9.45640448-46.94437661-35.40854101-46.94437661H172.5975131m-20.28201984 102.52549347c0-11.17723307 9.10595186-20.22846237 20.28318493-20.22846236h699.08582855v700.94055083H172.5975131a113.97982891 113.97982891 0 0 0-20.28318379 1.79883577l0.00116395-682.51092424m0 789.00666368c0-16.71694791 9.10595186-26.05110158 20.28318493-26.05110158h603.78012786v52.09987528H172.59867819c-11.17839701 0-20.28318379-6.67257515-20.28318493-26.0487737m135.16068409-512.52384654c-25.89741511 0-46.99909803 21.04579755-46.99909802 46.94437661s21.10051897 46.94321266 46.99909802 46.94321265H546.51203357c25.95330048 0 47.0526555-21.0446336 47.05265664-46.94321265s-21.09819107-46.94437661-47.05265664-46.94437661H287.47617735m0 183.74089614c-25.89741511 0-46.99909803 21.0446336-46.99909802 46.94437547 0 25.89741511 21.10051897 46.94204757 46.99909802 46.94204871h435.57908025c25.95213653 0 47.0526555-21.0446336 47.0526555-46.94204871-0.10944398-25.89857906-21.20879901-46.94437661-47.0526555-46.94437547H287.47617735"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="avi" unicode="&#59087;" d="M377.454545 321.01818188000004a300.0727275 300.0727275 0 0 0-12.65454469-44.94545438l-25.89090937-68.94545437h79.70909062l-24.43636312 65.16363562q-11.20000031 29.67272719-16.72727344 48.72727313zM932.0727275 443.9272725V594.03636375L661.96363625 864H121.74545469a29.09090906 29.09090906 0 0 1-29.09090906-29.09090906v-390.98181844H32v-419.9272725h60.0727275V-66.90909094000006a29.09090906 29.09090906 0 0 1 29.09090906-29.09090906h781.09090875a29.09090906 29.09090906 0 0 1 29.09090906 29.09090906v90.90909094H992V443.9272725z m-59.9272725-480H152v60.0727275h720zM491.19999969 110.54545499999995h-35.34545438l-27.49090875 71.27272688h-98.3272725l-25.89090937-71.27272688h-33.01818188l90.32727281 235.2H395.63636375zM468.36363594 345.745455h33.745455l61.09090875-170.90909156q7.41818156-20.50909125 12.36363656-38.54545407 5.52727312 19.2 12.65454562 38.54545407l63.56363626 170.90909156h31.70909062L590.83636344 110.54545499999995h-31.85454563zM715.63636344 110.54545499999995V345.745455h31.1272725V110.54545499999995z m156.36363656 333.3818175H152V803.9272725h509.96363625v-209.89090875h210.03636375z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chm" unicode="&#59089;" d="M932.0727275 443.9272725V594.03636375L661.96363625 864H121.74545469a29.09090906 29.09090906 0 0 1-29.09090906-29.09090906v-390.98181844H32v-419.9272725h60.0727275V-66.90909094000006a29.09090906 29.09090906 0 0 1 29.09090906-29.09090906h781.09090875a29.09090906 29.09090906 0 0 1 29.09090906 29.09090906v90.90909094H992V443.9272725zM186.18181813 186.47272686999997a65.16363656 65.16363656 0 0 1 27.19999968-33.454545 76.21818187 76.21818187 0 0 1 40.00000031-11.05454531 66.90909094 66.90909094 0 0 1 43.63636407 14.54545406 77.23636406 77.23636406 0 0 1 24.58181812 44.80000032l31.1272725-7.85454563a104.72727281 104.72727281 0 0 0-35.20000031-58.18181812 97.01818219 97.01818219 0 0 0-62.10909094-20.07272719 111.70909125 111.70909125 0 0 0-61.81818187 15.41818219 96.72727312 96.72727312 0 0 0-36.21818157 44.79999937A160.00000031 160.00000031 0 0 0 145.30909062 238.54545469000004a138.61818188 138.61818188 0 0 0 14.545455 64.14545437 96.145455 96.145455 0 0 0 39.99999938 41.59999969 116.36363625 116.36363625 0 0 0 57.01818187 14.545455A96.43636406 96.43636406 0 0 0 315.63636406 340.36363594a93.38181844 93.38181844 0 0 0 33.6-50.47272657L318.54545469 282.18181781a72.72727312 72.72727312 0 0 1-23.70909094 37.38181875 63.27272719 63.27272719 0 0 1-39.12727313 11.78181844 76.07272688 76.07272688 0 0 1-45.3818175-12.94545469 68.50909125 68.50909125 0 0 1-25.60000031-34.90909125A140.65454531 140.65454531 0 0 1 177.45454531 238.54545469000004a143.41818188 143.41818188 0 0 1 8.72727282-52.07272782z m685.81818187-222.54545437H152v60.0727275h720zM545.89090906 257.89090875V354.90909094000006h31.1272725v-235.63636406h-31.1272725v110.98181812h-122.18181843v-110.98181812h-31.1272725V354.90909094000006h31.1272725v-96.58181813z m208.14545438-138.61818188h-28.07272688L657.45454531 319.56363655999996V119.27272687000004h-29.09090906V354.90909094000006h46.83636375L730.18181844 187.92727312q7.70909062-23.27272688 11.19999937-34.76363718 4.07272688 12.79999969 12.50909156 37.67272781L810.47272719 354.90909094000006h41.89090875v-235.63636406h-29.96363625V316.21818186999997z m117.96363656 324.65454563H152V803.9272725h509.96363625v-209.89090875h210.03636375z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gif" unicode="&#59090;" d="M932.0727275 443.9272725V594.03636375L661.96363625 864H121.74545469a29.09090906 29.09090906 0 0 1-29.09090906-29.09090906v-390.98181844H32v-419.9272725h60.0727275V-66.90909094000006a29.09090906 29.09090906 0 0 1 29.09090906-29.09090906h781.09090875a29.09090906 29.09090906 0 0 1 29.09090906 29.09090906v90.90909094H992V443.9272725z m-59.9272725-480H152v60.0727275h720zM293.81818156 189.81818155999997a69.38181844 69.38181844 0 0 1 31.56363657-31.41818156 97.60000031 97.60000031 0 0 1 43.63636406-10.32727312 104.43636375 104.43636375 0 0 1 39.41818125 7.70909156 101.81818219 101.81818219 0 0 1 29.09090906 16.5818175v43.63636406h-68.21818125v27.63636375H468.36363594v-87.27272719a176.14545469 176.14545469 0 0 0-47.27272688-27.49090968 140.36363625 140.36363625 0 0 0-50.03636343-9.16363594 133.52727281 133.52727281 0 0 0-62.98181813 14.54545406 98.18181844 98.18181844 0 0 0-42.76363687 43.63636406 135.12727313 135.12727313 0 0 0-14.54545407 62.69090907 145.45454531 145.45454531 0 0 0 14.54545407 64.14545437 95.56363594 95.56363594 0 0 0 41.30909156 43.63636406 129.454545 129.454545 0 0 0 62.10909094 14.54545407 123.05454563 123.05454563 0 0 0 46.10909062-8.29090875 76.50909094 76.50909094 0 0 0 32.29090875-22.98181782 101.81818219 101.81818219 0 0 0 17.74545469-38.545455l-28.07272688-7.70909062a87.27272719 87.27272719 0 0 1-13.09090968 28.21818187 53.96363625 53.96363625 0 0 1-22.39999969 16.43636344 82.47272719 82.47272719 0 0 1-32.43636375 6.10909125 95.41818188 95.41818188 0 0 1-36.94545469-6.54545531 68.94545438 68.94545438 0 0 1-25.16363625-17.01818156 81.454545 81.454545 0 0 1-14.54545406-23.27272688 123.05454563 123.05454563 0 0 1-9.01818188-47.27272781 114.90909094 114.90909094 0 0 1 10.61818125-52.21818188z m225.89090906-65.74545468V359.27272688000005h31.56363657v-235.2z m229.09090969 134.545455v-27.78181782h-109.96363687v-106.90909125h-31.1272725V359.27272688000005h158.69090906v-27.78181782h-127.56363656v-72.72727312z m122.76363563 185.45454562H152V803.9272725h509.96363625v-209.89090875h210.03636375z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="js" unicode="&#59104;" d="M932.0727275 443.9272725V594.03636375L661.96363625 864H121.74545469a29.09090906 29.09090906 0 0 1-29.09090906-29.09090906v-390.98181844H32v-419.9272725h60.0727275V-66.90909094000006a29.09090906 29.09090906 0 0 1 29.09090906-29.09090906h781.09090875a29.09090906 29.09090906 0 0 1 29.09090906 29.09090906v90.90909094H992V443.9272725z m-59.9272725-480H152v60.0727275h720zM322.90909063 192l28.07272781 3.78181781a60.0727275 60.0727275 0 0 1 10.03636312-36.94545375 31.85454562 31.85454562 0 0 1 24.87272719-9.89090906 36.94545469 36.94545469 0 0 1 20.21818219 5.38181813 27.63636375 27.63636375 0 0 1 11.78181843 14.54545406 97.60000031 97.60000031 0 0 1 3.19999969 29.09090906V360.43636405999996h31.2727275v-160.00000031a116.36363625 116.36363625 0 0 0-7.1272725-45.6727275 50.76363656 50.76363656 0 0 0-22.69090969-24.72727219 74.3272725 74.3272725 0 0 0-36.36363656-8.43636375 61.38181781 61.38181781 0 0 0-47.41818187 17.74545469A72.72727312 72.72727312 0 0 0 322.90909063 192z m320.00000062 16.43636344a47.70909094 47.70909094 0 0 1-21.23636437 14.545455 414.98181844 414.98181844 0 0 1-41.89090875 11.49090843 214.39999969 214.39999969 0 0 0-45.38181844 14.545455 63.70909125 63.70909125 0 0 0-25.16363625 21.96363657 53.67272719 53.67272719 0 0 0-8.29090875 29.09090906 59.78181844 59.78181844 0 0 0 10.18181812 33.30909094 62.545455 62.545455 0 0 0 29.09090907 23.56363594 112.00000031 112.00000031 0 0 0 43.63636312 8.00000062 117.81818156 117.81818156 0 0 0 46.10909156-8.43636375 66.47272687 66.47272687 0 0 0 30.69090844-24.72727312 71.12727281 71.12727281 0 0 0 11.49090938-37.09090876l-29.23636313-2.76363656A48.145455 48.145455 0 0 1 626.76363594 325.81818188a63.27272719 63.27272719 0 0 1-41.01818156 11.34545437 65.74545469 65.74545469 0 0 1-41.16363657-10.32727219 30.98181844 30.98181844 0 0 1-12.94545375-25.01818218 26.76363656 26.76363656 0 0 1 9.454545-20.94545438 123.92727281 123.92727281 0 0 1 46.98181782-16.7272725 311.41818188 311.41818188 0 0 0 52.07272781-14.545455 71.41818188 71.41818188 0 0 0 30.25454531-24 58.18181812 58.18181812 0 0 0 9.745455-33.454545 64.00000031 64.00000031 0 0 0-10.76363719-35.34545531 70.98181781 70.98181781 0 0 0-30.83636344-25.89090844 107.63636344 107.63636344 0 0 0-45.38181843-9.16363687 135.41818219 135.41818219 0 0 0-53.52727219 9.30909093 74.90909063 74.90909063 0 0 0-33.89090906 28.07272782 79.41818156 79.41818156 0 0 0-12.94545469 42.32727187l29.09090906 2.6181825a64.8727275 64.8727275 0 0 1 9.745455-29.09090906 52.945455 52.945455 0 0 1 24-18.90909094 89.59999969 89.59999969 0 0 1 36.07272656-6.98181844 87.27272719 87.27272719 0 0 1 31.4181825 5.23636407 43.63636406 43.63636406 0 0 1 20.36363625 14.54545406 33.745455 33.745455 0 0 1 6.69090844 20.07272719 30.69090938 30.69090938 0 0 1-7.27272656 19.49090906z m228.50909062 235.63636406H152V803.9272725h509.96363625v-209.89090875h210.03636375z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhuzhuangtu" unicode="&#58946;" d="M232.68266666 507.008q31.008 0 45.504-19.008t14.496-42.016l0-436.992-188 0 0 432.992q0 31.008 19.488 48t42.496 16.992l66.016 0zM544.68266666 752.992q27.008 0 43.008-16.512t16-39.488l0-688-187.008 0 0 686.016q0 15.008 6.016 26.016t15.008 18.016 20 10.496 20 3.488l67.008 0zM855.65866666 320q8.992 0 19.488-4.992t20-14.016 16-20.512 6.496-24.512l0-247.008-187.008 0 0 244.992q0 11.008 4.512 23.008t12.512 21.504 19.008 15.488 24 6.016l64.992 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="iconfontshouji" unicode="&#58948;" d="M735.05254 893.817288L288.94541401 893.817288c-52.65023801 0-95.59504201-43.002396-95.59504201-95.591125l0-828.45232499c0-52.58770599 42.944804-95.59010199 95.59504201-95.59010201l446.10712599 0c52.52436601 0 95.59504201 43.002396 95.59504201 95.59010201L830.647581 798.226163C830.647581 850.814892 787.57690599 893.817288 735.05254 893.817288zM384.540456 846.0217250000001l254.919089 0 0-31.863708L384.540456 814.158017 384.540456 846.0217250000001zM511.998465-62.088847999999984c-35.222619 0-63.729005 28.56354601-63.729005 63.72639401 0 35.161824 28.50536201 63.72639399 63.729005 63.72639399 35.099817 0 63.731051-28.564569 63.731051-63.72639399C575.729516-33.52530201000002 547.09828199-62.088847999999984 511.998465-62.088847999999984zM766.91755399 129.09135600000002L257.0804 129.09135600000002 257.0804 766.36245401l509.838177-2e-8L766.918577 129.09135600000002z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="61" unicode="&#59029;" d="M932.977778 54.044444l0-11.377778c0-6.280533-5.097244-11.377778-11.377778-11.377778L147.911111 31.288889c-25.133511 0-45.511111 20.3776-45.511111 45.511111L102.4 725.333333c0 6.280533 5.097244 11.377778 11.377778 11.377778l11.377778 0c6.280533 0 11.377778-5.097244 11.377778-11.377778l0-648.533333c0-6.280533 5.097244-11.377778 11.377778-11.377778l773.688889 0C927.880533 65.422222 932.977778 60.324978 932.977778 54.044444zM618.450489 589.539556 484.681956 474.680889c-3.720533-3.185778-9.056711-3.640889-13.255111-1.1264l-145.442133 87.131022c-4.391822 2.628267-10.012444 2.002489-13.710222-1.536L174.1824 426.951111C171.9296 424.812089 170.666667 421.842489 170.666667 418.736356l0-128.955733c0-10.0352 12.037689-15.1552 19.262578-8.203378l121.776356 117.122844c3.6864 3.549867 9.284267 4.1984 13.687467 1.592889l167.332978-99.157333c3.822933-2.264178 8.612978-2.093511 12.265244 0.432356l135.941689 93.923556c1.103644 0.762311 2.332444 1.319822 3.618133 1.661156l268.504178 69.313422C918.084267 467.740444 921.6 472.280178 921.6 477.468444L921.6 659.638044c0 7.520711-7.168 12.970667-14.415644 10.968178L622.819556 591.872C621.203911 591.416889 619.713422 590.620444 618.450489 589.539556zM641.444978 351.084089l-134.2464-93.752889c-3.640889-2.548622-8.442311-2.730667-12.276622-0.489244l-168.982756 99.134578c-4.391822 2.571378-9.955556 1.922844-13.630578-1.592889L174.1824 222.151111C171.9296 220.012089 170.666667 217.042489 170.666667 213.936356L170.666667 110.933333c0-6.280533 5.097244-11.377778 11.377778-11.377778l728.177778 0c6.280533 0 11.377778 5.097244 11.377778 11.377778L921.6 409.588622c0 7.441067-7.020089 12.879644-14.222222 11.013689l-262.257778-67.834311C643.800178 352.426667 642.56 351.857778 641.444978 351.084089z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="qiehuan" unicode="&#58950;" d="M859.779589 304.6304718c-23.59638001 23.86090757-61.83741759 23.86090757-85.44249081 0-23.60879908-23.85469744-23.60879908-62.50680957 0-86.35529808l17.1905831-16.54727202-129.85460326 0-55.22670539 73.94484406L521.31187675 190.02037226000004l66.14437796-88.56218041c11.54235566-13.47229135 28.43115398-21.23922606 46.21164726-21.23922606l158.43727041 0-18.27104965-18.46603017c-23.59638001-23.85469744-23.59638001-62.49687481 0-86.35281499 23.60507324-23.86711772 61.83617604-23.86711772 85.44249083 0l122.28885921 123.57672414c11.33495606 11.45045356 17.69604286 26.95700055 17.69604286 43.18882595 0 16.21940634-6.35984524 31.72222749-17.69604286 43.17889119L859.779589 304.6304718zM85.62583749 566.2720982999999l154.67054392 0 53.01361413-70.98039349 85.13698019 85.65485902-63.93501135 85.60642428c-11.54235566 13.46359691-28.42742815 21.23674177-46.20916295 21.23674176L85.62583749 687.78972743c-33.65588901 0-60.88735312-27.17682043-60.88735312-60.75943532S51.96994848 566.2720982999999 85.62583749 566.2720982999999zM791.52768251 566.2720982999999l-17.19058311-16.54478772c-23.60879908-23.8460042-23.60879908-62.49687481 0-86.34908915 23.60507324-23.86090757 61.84611082-23.86090757 85.44249082 0l121.78588376 119.27721544c11.33495606 11.4566637 17.69604286 26.96693654 17.69604285 43.18261704 0 16.22809956-6.35984524 31.73713086-17.69604285 43.19751919l-122.28885921 123.56678936c-23.60507324 23.86339188-61.83741759 23.86339188-85.44249082 0-23.59638001-23.85221435-23.59638001-62.50308372 0-86.35529808l18.26483951-18.45609418-158.43106149 0c-17.78049328 0-34.66929159-7.77314365-46.21164726-21.23674177L240.29762294 201.72790169999996 85.62583749 201.72790169999996c-33.65588901 0-60.88735312-27.17682043-60.88735312-60.75943534 0-33.57392289 27.23146411-60.74950057 60.88735312-60.74950057L268.3052833 80.21896578999997c17.78049328 0 34.6668073 7.76693472 46.20916296 21.23922606l347.1598733 464.81390645L791.52768251 566.2720982999999z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="qiehuan1" unicode="&#58974;" d="M1024.828 244.43233334L768.191 468.61333334l0-125.183L384.31 343.43033333999995 384.31 145.43333334l383.881 0 0-125.183L1024.828 244.43233334zM640.517 599.6373333399999L256.636 599.6373333399999 256.636 724.8203333399999 0 500.63933334l256.636-224.181L256.636 401.64033334l383.881 0L640.517 599.6373333399999z"  horiz-adv-x="1025" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="qiehuan2" unicode="&#59000;" d="M582.62869333 56.16981333000001l-87.38133334 87.38133333c-23.30168889 23.30168889-23.30168889 60.58439111 0 83.88608l87.38133334 87.38133333c11.65084445 11.65084445 19.80643555 19.80643555 26.79694222 26.79694222 0 0-32.62236445 20.97152-62.91456 30.29219556 9.32067555 4.66033778 17.47626667 10.48576 26.79694222 17.47626667 9.32067555 6.99050667 18.64135111 15.14609778 27.96202667 24.46677333 45.43829333 45.43829333 71.07015111 107.18776889 71.07015111 172.43249778 0 65.24472889-25.63185778 125.82912-71.07015111 172.43249778-45.43829333 45.43829333-104.8576 69.90506667-168.93724445 71.07015111-1.16508445 0-2.33016889 0-3.49525333 0-1.16508445 0-2.33016889 0-3.49525333 0-64.07964445-1.16508445-123.49895111-26.79694222-168.93724445-71.07015111-45.43829333-45.43829333-71.07015111-107.18776889-71.07015111-172.43249778 0-65.24472889 25.63185778-125.82912 71.07015111-172.43249778 8.15559111-8.15559111 17.47626667-16.31118222 27.96202667-24.46677333 8.15559111-5.82542222 17.47626667-11.65084445 26.79694222-17.47626667-51.26371555-16.31118222-99.03217778-43.10812445-139.81013333-79.22574222-5.82542222-4.66033778-11.65084445-10.48576-16.31118223-15.14609778-25.63185778-24.46677333-46.60337778-52.4288-64.07964444-82.72099556-4.66033778-6.99050667-8.15559111-13.98101333-11.65084444-20.97152-18.64135111-37.28270222-31.45728-78.06065778-36.11761778-118.83861333-2.33016889-12.81592889 6.99050667-25.63185778 20.97152-27.96202667 1.16508445 0 548.75477333 0 549.91985778 0C595.44462221 43.35388444 594.27953777 45.68405332999998 582.62869333 56.16981333000001zM677.18257777 306.30798221c2.50311111 0 5.00622222-0.45511111 7.05422222-1.59288888 3.41333333-1.82044445 5.68888889-4.55111111 7.05422222-7.05422222 3.18577778-4.32355555 2.73066667-10.92266667 2.73066667-10.92266667l0-60.75733333 213.21955556 0c12.97066667 0 23.43822222-10.46755555 23.43822222-23.43822223l0-29.12711111c0-12.97066667-10.46755555-23.43822222-23.43822222-23.43822222l0 0-213.21955556 0 0-46.42133334c0 0-0.45511111-15.70133333-7.05422222-18.65955555-3.18577778-1.36533333-6.59911111-2.27555555-10.01244445-2.27555555-6.144 0-12.288 2.27555555-17.06666666 7.05422222l-87.60888889 87.60888888c-9.32977778 9.32977778-9.32977778 24.576 0 33.90577778l87.60888889 87.60888889C664.89457777 303.34975999000005 671.03857777 306.30798221 677.18257777 306.30798221M886.98879999 120.16753776999997c5.91644445 0 12.288-2.95822222 16.83911112-7.73688889l87.60888888-87.60888889c9.32977778-9.32977778 9.32977778-24.576 0-33.90577778l-87.60888888-87.60888888c-4.77866667-4.77866667-10.92266667-7.05422222-17.06666667-7.05422222-3.41333333 0-6.82666667 0.68266667-10.01244445 2.27555555-6.59911111 2.95822222-7.05422222 18.65955555-7.05422222 18.65955555l0 46.42133334-213.21955556 0 0 0c-12.97066667 0-23.43822222 10.46755555-23.43822222 23.43822222l0 29.12711111c0 12.97066667 10.46755555 23.43822222 23.43822222 23.43822223l213.21955556 0 0 60.75733333c0 0-0.45511111 6.59911111 2.73066667 10.92266667 1.59288889 2.50311111 3.86844445 5.23377778 7.05422222 7.05422222C882.21013333 119.71242666 884.48568888 120.16753776999997 886.98879999 120.16753776999997"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhexiantu" unicode="&#58952;" d="M1002.99081865 85.17417065999996L1002.99081865 23.77204561999997 20.55184688 23.77204561999997 20.55184688 760.60127444 81.95397191 760.60127444 81.95397191 85.17417065999996 1002.99081865 85.17417065999996ZM818.78320075 576.3936565399999L941.5886936 146.57753846000003 143.35733972 146.57753846000003 143.35733972 422.88834393 358.26477739 699.1991494 634.57682561 422.88834393 818.78320075 576.3936565399999Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="pingguo" unicode="&#58953;" d="M836.608 220.16q41.984-59.392 96.256-76.8-23.552-72.704-74.752-151.552-78.848-118.784-155.648-118.784-28.672 0-84.992 19.456-52.224 19.456-91.136 19.456t-86.016-20.48q-49.152-19.456-80.896-19.456-92.16 0-181.248 156.672-89.088 154.624-89.088 304.128 0 138.24 67.584 226.304 69.632 88.064 172.032 88.064 22.528 0 50.176-5.632t57.344-20.992q31.744-17.408 52.224-24.064t31.744-6.656q13.312 0 40.96 6.144t55.296 22.528q29.696 16.384 51.2 24.576t44.032 8.192q71.68 0 129.024-38.912 30.72-20.48 62.464-60.416-47.104-40.96-68.608-71.68-39.936-57.344-39.936-124.928 0-74.752 41.984-135.168z m-205.824 478.208q-35.84-33.792-65.536-44.032-10.24-3.072-26.112-5.632t-36.352-4.608q1.024 90.112 47.104 155.648T701.44 889.856q2.048-10.24 3.072-14.336v-11.264q0-36.864-17.408-82.944-18.432-45.056-56.32-82.944z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhexiantu1" unicode="&#58954;" d="M223.33333333 322.89099999999996c14-14.453 38.14-14.453 52.724 0l158.493 157.124 157.839-156.453c8.484-9.622 20.613-13.43 32.835-10.399 7.512 1.181 14.833 3.987 20.624 9.728l0.009 0.023 0.008 0.023 286.594 169.919C950.71833333 503.654 958.33333333 528.533 949.33333333 548.414v0.007c-8 19.881-30.896 27.249-49.153 16.445L621.30633333 399.527 461.02133333 558.419c-7.316 7.253-16.91 10.846-26.505 10.817-9.593 0.029-19.194-3.564-26.51-10.817L223.26433333 375.22799999999995C208.67533333 360.77700000000004 209.33333333 337.35 223.33333333 322.90200000000004v-0.011zM918.34433333 86H157.33333333V775.327c0 19.998-16.017 36.208-36.001 36.208-19.995 0-35.999-16.21-35.999-36.208v-724.054C85.33333333 31.274999999999977 101.87933333 14 121.87433333 14h796.47c20.002 0 36.201 16.007 36.201 36.004 0 19.989-16.199 35.996-36.201 35.996z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="account-box" unicode="&#58955;" d="M238.93333333 156.44444480000004c0 91.02222187 182.0444448 141.0844448 273.06666667 141.08444373s273.06666667-50.06222187 273.06666667-141.08444373v-45.51111147H238.93333333m409.6 409.6a136.53333333 136.53333333 0 0 0-136.53333333-136.53333333 136.53333333 136.53333333 0 0 0-136.53333333 136.53333333 136.53333333 136.53333333 0 0 0 136.53333333 136.53333334 136.53333333 136.53333333 0 0 0 136.53333333-136.53333334M102.4 702.5777781300001v-637.15555626a91.02222187 91.02222187 0 0 1 91.02222187-91.02222187h637.15555626a91.02222187 91.02222187 0 0 1 91.02222187 91.02222187V702.5777781300001a91.02222187 91.02222187 0 0 1-91.02222187 91.02222187H193.42222187a91.02222187 91.02222187 0 0 1-91.02222187-91.02222187z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="account-multiple" unicode="&#58958;" d="M694.0444448 338.48888853000005c-13.19822187 0-28.21688853 0-44.14577813-2.2755552C702.6915552 297.98400000000004 739.5555552 247.46666667 739.5555552 179.20000000000005V65.42222187000004h273.06666667v113.77777813c0 106.04088853-212.53688853 159.28888853-318.57777707 159.28888853m-364.0888896 0c-106.04088853 0-318.57777813-53.248-318.57777707-159.28888853V65.42222187000004h637.1555552v113.77777813c0 106.04088853-212.53688853 159.28888853-318.57777813 159.28888853m0 91.02222294a136.53333333 136.53333333 0 0 1 136.53333333 136.53333333 136.53333333 136.53333333 0 0 1-136.53333333 136.53333333 136.53333333 136.53333333 0 0 1-136.53333333-136.53333333 136.53333333 136.53333333 0 0 1 136.53333333-136.53333333m364.0888896 0a136.53333333 136.53333333 0 0 1 136.53333333 136.53333333 136.53333333 136.53333333 0 0 1-136.53333333 136.53333333 136.53333333 136.53333333 0 0 1-136.53333333-136.53333333 136.53333333 136.53333333 0 0 1 136.53333333-136.53333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="alert-octagon" unicode="&#58960;" d="M560.54518557 335.45481443000006h-97.09037114V626.72592555h97.09037114m-48.54518557-500.01540665a63.10874112 63.10874112 0 0 0-63.10874112 63.10873998 63.10874112 63.10874112 0 0 0 63.10874112 63.10874112 63.10874112 63.10874112 0 0 0 63.10874112-63.10874112 63.10874112 63.10874112 0 0 0-63.10874112-63.10873998M693.07354112 820.90666667H330.92645888L75.09333333 565.0735411200001v-362.14708224L330.92645888-52.90666667000005h362.14708224L948.90666667 202.92645888000004V565.0735411200001L693.07354112 820.90666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="backspace" unicode="&#58961;" d="M938.666667 768H298.666667c-29.44 0-52.48-14.933333-67.84-37.546667L0 384l230.826667-346.026667c15.36-22.613333 38.4-37.973333 67.84-37.973333h640a85.333333 85.333333 0 0 1 85.333333 85.333333V682.666667a85.333333 85.333333 0 0 1-85.333333 85.333333m-128-537.173333L750.506667 170.666667 597.333333 323.84 444.16 170.666667 384 230.826667 537.173333 384 384 537.173333 444.16 597.333333 597.333333 444.16 750.506667 597.333333 810.666667 537.173333 657.493333 384"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bing" unicode="&#58964;" d="M223.66814776 820.90666667v-776.72296334l180.58808889-97.09037L854.75555554 198.55739221v198.54980779L455.22868109 532.06281443l78.15774891-188.84076998L657.66210332 286.90963001 403.28533333 145.15768889000003V759.2542811L223.66814776 820.90666667"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="calendar-check" unicode="&#59006;" d="M810.666667 85.333333H213.333333V554.666667h597.333334m0 213.333333h-42.666667V853.333333h-85.333333v-85.333333H341.333333V853.333333H256v-85.333333H213.333333a85.333333 85.333333 0 0 1-85.333333-85.333333v-597.333334a85.333333 85.333333 0 0 1 85.333333-85.333333h597.333334a85.333333 85.333333 0 0 1 85.333333 85.333333V682.666667a85.333333 85.333333 0 0 1-85.333333 85.333333m-105.386667-343.893333L660.053333 469.333333l-208.213333-208.213333-90.453333 90.453333-45.226667-45.226666L451.84 170.666667l253.44 253.44z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="calendar-text" unicode="&#59010;" d="M597.333333 298.666667H298.666667v-85.333334h298.666666m213.333334-128H213.333333V554.666667h597.333334m0 213.333333h-42.666667V853.333333h-85.333333v-85.333333H341.333333V853.333333H256v-85.333333H213.333333a85.333333 85.333333 0 0 1-85.333333-85.333333v-597.333334a85.333333 85.333333 0 0 1 85.333333-85.333333h597.333334a85.333333 85.333333 0 0 1 85.333333 85.333333V682.666667a85.333333 85.333333 0 0 1-85.333333 85.333333m-85.333334-298.666667H298.666667v-85.333333h426.666666v85.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="checkbox-marked-outline" unicode="&#59040;" d="M810.666667 85.333333H213.333333V682.666667h426.666667V768H213.333333c-47.36 0-85.333333-37.973333-85.333333-85.333333v-597.333334a85.333333 85.333333 0 0 1 85.333333-85.333333h597.333334a85.333333 85.333333 0 0 1 85.333333 85.333333v341.333334h-85.333333m-473.173334 39.253333L277.333333 405.333333 469.333333 213.333333 896 640l-60.16 60.586667L469.333333 334.08l-131.84 131.84z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="clipboard-account" unicode="&#59055;" d="M768 42.666666340000006H256v59.733334c0 85.333333 170.666667 132.266667 256 132.266666s256-46.933333 256-132.266666M512 554.66666634a128 128 0 0 0 128-128 128 128 0 0 0-128-128 128 128 0 0 0-128 128 128 128 0 0 0 128 128m0 170.666667a42.666667 42.666667 0 0 0 42.666667-42.666667 42.666667 42.666667 0 0 0-42.666667-42.666666 42.666667 42.666667 0 0 0-42.666667 42.666666 42.666667 42.666667 0 0 0 42.666667 42.666667m298.666667 0h-178.346667C614.4 774.82666634 567.466667 810.66666634 512 810.66666634c-55.466667 0-102.4-35.84-120.32-85.333333H213.333333a85.333333 85.333333 0 0 1-85.333333-85.333333v-597.333334a85.333333 85.333333 0 0 1 85.333333-85.333333h597.333334a85.333333 85.333333 0 0 1 85.333333 85.333333V640.00000034a85.333333 85.333333 0 0 1-85.333333 85.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="clipboard-arrow-down" unicode="&#59057;" d="M512 85.33333333999997l-213.333333 213.333333h128V469.33333334h170.666666v-170.666667h128M512 725.33333334a42.666667 42.666667 0 0 0 42.666667-42.666667 42.666667 42.666667 0 0 0-42.666667-42.666666 42.666667 42.666667 0 0 0-42.666667 42.666666 42.666667 42.666667 0 0 0 42.666667 42.666667m298.666667 0h-178.346667C614.4 774.82666634 567.466667 810.66666634 512 810.66666634c-55.466667 0-102.4-35.84-120.32-85.333333H213.333333a85.333333 85.333333 0 0 1-85.333333-85.333333v-597.333334a85.333333 85.333333 0 0 1 85.333333-85.333333h597.333334a85.333333 85.333333 0 0 1 85.333333 85.333333V640.00000034a85.333333 85.333333 0 0 1-85.333333 85.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="clipboard-alert" unicode="&#59058;" d="M512 640.00000034a42.666667 42.666667 0 0 0-42.666667 42.666666 42.666667 42.666667 0 0 0 42.666667 42.666667 42.666667 42.666667 0 0 0 42.666667-42.666667 42.666667 42.666667 0 0 0-42.666667-42.666666m42.666667-384h-85.333334V512.00000034h85.333334m0-426.666667h-85.333334v85.333333h85.333334m256 554.666667h-178.346667C614.4 774.82666634 567.466667 810.66666634 512 810.66666634c-55.466667 0-102.4-35.84-120.32-85.333333H213.333333a85.333333 85.333333 0 0 1-85.333333-85.333333v-597.333334a85.333333 85.333333 0 0 1 85.333333-85.333333h597.333334a85.333333 85.333333 0 0 1 85.333333 85.333333V640.00000034a85.333333 85.333333 0 0 1-85.333333 85.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="clipboard-check" unicode="&#59059;" d="M426.666667 128.00000034000004l-170.666667 170.666666 60.16 60.16L426.666667 248.74666634000005l281.173333 281.173334L768 469.33333334m-256 256a42.666667 42.666667 0 0 0 42.666667-42.666667 42.666667 42.666667 0 0 0-42.666667-42.666666 42.666667 42.666667 0 0 0-42.666667 42.666666 42.666667 42.666667 0 0 0 42.666667 42.666667m298.666667 0h-178.346667C614.4 774.82666634 567.466667 810.66666634 512 810.66666634c-55.466667 0-102.4-35.84-120.32-85.333333H213.333333a85.333333 85.333333 0 0 1-85.333333-85.333333v-597.333334a85.333333 85.333333 0 0 1 85.333333-85.333333h597.333334a85.333333 85.333333 0 0 1 85.333333 85.333333V640.00000034a85.333333 85.333333 0 0 1-85.333333 85.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="clipboard-text" unicode="&#59061;" d="M725.333333 512H298.666667V597.333333h426.666666m0-256H298.666667v85.333334h426.666666m-128-256H298.666667v85.333333h298.666666M512 768a42.666667 42.666667 0 0 0 42.666667-42.666667 42.666667 42.666667 0 0 0-42.666667-42.666666 42.666667 42.666667 0 0 0-42.666667 42.666666 42.666667 42.666667 0 0 0 42.666667 42.666667m298.666667 0h-178.346667C614.4 817.493333 567.466667 853.333333 512 853.333333c-55.466667 0-102.4-35.84-120.32-85.333333H213.333333a85.333333 85.333333 0 0 1-85.333333-85.333333v-597.333334a85.333333 85.333333 0 0 1 85.333333-85.333333h597.333334a85.333333 85.333333 0 0 1 85.333333 85.333333V682.666667a85.333333 85.333333 0 0 1-85.333333 85.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cloud" unicode="&#59065;" d="M825.6 468.053333A319.573333 319.573333 0 0 1 512 725.333333C388.693333 725.333333 281.6 655.36 228.266667 553.386667A256.170667 256.170667 0 0 1 0 298.666667a256 256 0 0 1 256-256h554.666667a213.333333 213.333333 0 0 1 213.333333 213.333333c0 112.64-87.466667 203.946667-198.4 212.053333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cloud-check" unicode="&#59066;" d="M426.666667 170.666667l-149.333334 149.333333 60.16 60.586667L426.666667 291.413333 647.68 512l60.16-60.16m117.76 16.213333A319.573333 319.573333 0 0 1 512 725.333333C388.693333 725.333333 281.6 655.36 228.266667 553.386667A256.170667 256.170667 0 0 1 0 298.666667a256 256 0 0 1 256-256h554.666667a213.333333 213.333333 0 0 1 213.333333 213.333333c0 112.64-87.466667 203.946667-198.4 212.053333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cloud-download" unicode="&#59067;" d="M725.333333 341.333333l-213.333333-213.333333-213.333333 213.333333h128V512h170.666666v-170.666667m228.266667 126.72A319.573333 319.573333 0 0 1 512 725.333333C388.693333 725.333333 281.6 655.36 228.266667 553.386667A256.170667 256.170667 0 0 1 0 298.666667a256 256 0 0 1 256-256h554.666667a213.333333 213.333333 0 0 1 213.333333 213.333333c0 112.64-87.466667 203.946667-198.4 212.053333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cloud-outline-off" unicode="&#59068;" d="M329.813333 469.333333l341.333334-341.333333H256a170.666667 170.666667 0 0 0-170.666667 170.666667 170.666667 170.666667 0 0 0 170.666667 170.666666M128 671.146667L245.333333 554.666667C109.226667 548.266667 0 436.48 0 298.666667a256 256 0 0 1 256-256h500.48l85.333333-85.333334L896 11.52 182.186667 725.333333m643.413333-257.28A319.573333 319.573333 0 0 1 512 725.333333c-64 0-121.6-18.346667-170.666667-49.92l61.866667-62.293333C435.626667 630.186667 472.746667 640 512 640a234.666667 234.666667 0 0 0 234.666667-234.666667v-21.333333H810.666667a128 128 0 0 0 128-128c0-48.213333-27.306667-90.026667-66.56-111.786667l61.866666-61.866666C988.16 121.173333 1024 184.32 1024 256c0 112.64-87.466667 203.946667-198.4 212.053333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cloud-outline" unicode="&#59069;" d="M810.666667 128H256a170.666667 170.666667 0 0 0-170.666667 170.666667 170.666667 170.666667 0 0 0 170.666667 170.666666h30.293333C314.453333 567.893333 405.333333 640 512 640a234.666667 234.666667 0 0 0 234.666667-234.666667v-21.333333H810.666667a128 128 0 0 0 128-128 128 128 0 0 0-128-128m14.933333 340.053333A319.573333 319.573333 0 0 1 512 725.333333C388.693333 725.333333 281.6 655.36 228.266667 553.386667A256.170667 256.170667 0 0 1 0 298.666667a256 256 0 0 1 256-256h554.666667a213.333333 213.333333 0 0 1 213.333333 213.333333c0 112.64-87.466667 203.946667-198.4 212.053333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cloud-print" unicode="&#59071;" d="M512 784.00000031C396.39999969 784.00000031 296 718.39999969 246.00000031 622.39999969A239.76 239.76 0 0 1 32 384a240 240 0 0 1 240-240v-160.00000031h480v160.00000031h40.00000031a199.99999969 199.99999969 0 0 1 199.99999969 199.99999969c0 105.6-82.00000031 191.20000031-186 198.40000031A299.59999969 299.59999969 0 0 1 512 784.00000031M351.99999969 343.99999969h320.00000062v-279.99999938H351.99999969v279.99999938m40.00000031-39.99999938v-40.00000031h240v40.00000031H392m0-80.00000062v-39.99999938h240v39.99999938H392m0-79.99999969v-40.00000031h240v40.00000031H392z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cloud-print-outline" unicode="&#59072;" d="M792.00000031 223.99999968999998a120 120 0 0 1 120 120 120 120 0 0 1-120 120h-60v20.00000062A220.00000031 220.00000031 0 0 1 512 703.99999969C411.99999969 703.99999969 326.79999969 636.40000031 300.39999969 544.00000031H272a160.00000031 160.00000031 0 0 1-160.00000031-160.00000031 160.00000031 160.00000031 0 0 1 160.00000031-160.00000031v200.00000062h480v-200.00000062h40.00000031m14.4 318.40000031C909.99999969 535.2 992 449.59999969 992 343.99999969a199.99999969 199.99999969 0 0 0-199.99999969-199.99999969h-40.00000031v-160.00000031H272v160.00000031a240 240 0 0 0-240 240c0 123.6 93.6 225.6 214.00000031 238.39999969A299.83999969 299.83999969 0 0 0 512 784.00000031c145.60000031 0 266.80000031-103.99999969 294.40000031-241.60000031M351.99999969 343.99999969v-279.99999938h320.00000062v279.99999938H351.99999969m40.00000031-199.99999969h240v-40.00000031H392v40.00000031m240 40.00000031H392v39.99999938h240v-39.99999938m-240 120h240v-40.00000031H392v40.00000031z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cloud-upload" unicode="&#59075;" d="M597.333333 341.333333v-170.666666h-170.666666v170.666666H298.666667l213.333333 213.333334 213.333333-213.333334m100.266667 126.72A319.573333 319.573333 0 0 1 512 725.333333C388.693333 725.333333 281.6 655.36 228.266667 553.386667A256.170667 256.170667 0 0 1 0 298.666667a256 256 0 0 1 256-256h554.666667a213.333333 213.333333 0 0 1 213.333333 213.333333c0 112.64-87.466667 203.946667-198.4 212.053333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cloud-sync" unicode="&#59076;" d="M512 725.333333a319.573333 319.573333 0 0 0 313.6-257.706666c110.933333-7.68 198.4-98.986667 198.4-211.626667a213.333333 213.333333 0 0 0-213.333333-213.333333H256a256 256 0 0 0-256 256c0 131.84 99.84 240.64 228.266667 254.293333A319.829333 319.829333 0 0 0 512 725.333333M320 482.56c-61.44-77.226667-55.466667-186.453333 13.653333-255.573333C369.493333 192 418.56 170.666667 469.333333 170.666667v-79.36l120.746667 120.32L469.333333 332.373333V256c-28.16 0-55.466667 11.093333-75.52 31.146667-35.84 35.84-41.386667 92.16-13.226666 134.4L320 482.56m71.253333 30.72l61.866667-61.866667L512 392.96V469.333333c28.16 0 55.466667-11.093333 75.52-31.146666 35.84-35.84 41.386667-92.16 13.226667-134.4l60.586666-61.013334c61.44 77.226667 55.466667 186.453333-13.653333 255.573334C611.84 533.333333 562.773333 554.666667 512 554.666667V634.026667L391.253333 513.28z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="comment-account-outline" unicode="&#59080;" d="M384-61.41666698999995a42.666667 42.666667 0 0 0-42.666667 42.66666699v128.00000001H170.666667a85.333333 85.333333 0 0 0-85.333334 85.33333299V706.583333a85.333333 85.333333 0 0 0 85.333334 85.333334h682.666666a85.333333 85.333333 0 0 0 85.333334-85.333334v-512a85.333333 85.333333 0 0 0-85.333334-85.33333299h-260.266666l-157.866667-158.29333301c-8.533333-8.106667-19.2-12.373333-29.866667-12.37333399H384m42.666667 255.99999999v-131.41333299L558.08 194.58333300000004H853.333333V706.583333H170.666667v-512h256m256 85.33333401H341.333333v42.66666599c0 56.746667 113.92 85.333333 170.666667 85.333334s170.666667-28.586667 170.666667-85.333334v-42.66666599m-170.666667 341.33333299a85.333333 85.333333 0 0 0 85.333333-85.333333 85.333333 85.333333 0 0 0-85.333333-85.333334 85.333333 85.333333 0 0 0-85.333333 85.333334 85.333333 85.333333 0 0 0 85.333333 85.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="comment-alert-outline" unicode="&#59081;" d="M384-64.00000033000003a42.666667 42.666667 0 0 0-42.666667 42.666667v128H170.666667a85.333333 85.333333 0 0 0-85.333334 85.333333V703.99999967a85.333333 85.333333 0 0 0 85.333334 85.333334h682.666666a85.333333 85.333333 0 0 0 85.333334-85.333334v-512a85.333333 85.333333 0 0 0-85.333334-85.333333h-260.266666l-157.866667-158.293333c-8.533333-8.106667-19.2-12.373333-29.866667-12.373334H384m42.666667 256v-131.413333L558.08 191.99999966999997H853.333333V703.99999967H170.666667v-512h256m128 256h-85.333334V618.66666667h85.333334v-170.666667m0-170.666666h-85.333334v85.333333h85.333334v-85.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="comment-check" unicode="&#59082;" d="M384-64.00000033000003a42.666667 42.666667 0 0 0-42.666667 42.666667v128H170.666667a85.333333 85.333333 0 0 0-85.333334 85.333333V703.99999967a85.333333 85.333333 0 0 0 85.333334 85.333334h682.666666a85.333333 85.333333 0 0 0 85.333334-85.333334v-512a85.333333 85.333333 0 0 0-85.333334-85.333333h-260.266666l-157.866667-158.293333c-8.533333-8.106667-19.2-12.373333-29.866667-12.373334H384m42.666667 298.666667l341.333333 341.333333-60.16 60.586667L426.666667 355.41333367000004 316.16 465.49333367 256 405.33333367l170.666667-170.666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="comment-question-outline" unicode="&#59084;" d="M170.666667 789.33333367a85.333333 85.333333 0 0 1-85.333334-85.333334v-512a85.333333 85.333333 0 0 1 85.333334-85.333333h170.666666v-128a42.666667 42.666667 0 0 1 42.666667-42.666667h21.333333c10.666667 0 21.333333 4.266667 29.866667 12.373334L593.066667 106.66666667000004H853.333333a85.333333 85.333333 0 0 1 85.333334 85.333333V703.99999967a85.333333 85.333333 0 0 1-85.333334 85.333334H170.666667m0-85.333334h682.666666v-512h-295.253333L426.666667 60.58666667V191.99999966999997H170.666667V703.99999967m349.44-64c-37.973333 0-68.266667-7.68-91.306667-23.04-23.466667-15.36-35.413333-40.96-33.28-70.4h84.053333c0 11.946667 4.266667 20.906667 11.093334 26.88 8.533333 5.973333 17.92 8.96 29.44 8.96 13.226667 0 24.746667-3.413333 32.426666-11.093333 7.68-7.253333 11.52-16.64 11.52-29.44 0-11.946667-3.413333-22.613333-9.386666-31.573333-7.253333-9.386667-16.213333-17.066667-27.306667-23.04-22.186667-13.653333-36.693333-25.6-45.653333-35.84-8.106667-10.24-12.373333-24.746667-12.373334-46.08h85.333334c0 11.946667 2.133333 21.333333 5.973333 29.013333 3.84 7.253333 11.093333 13.653333 22.186667 20.053333 19.626667 8.96 35.84 20.906667 48.213333 36.266667 12.373333 15.786667 18.773333 32.426667 18.773333 51.2 0 29.866667-11.52 53.76-34.56 71.68-23.04 17.493333-55.04 26.453333-95.146666 26.453333M469.333333 362.66666667000004v-85.333333h85.333334v85.333333h-85.333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="console" unicode="&#59088;" d="M900.3614811 44.18370332999996V626.72592555H123.6385189v-582.54222222h776.7229622m0 776.72296334a97.09036999 97.09036999 0 0 0 97.09037113-97.09037v-679.63259334a97.09036999 97.09036999 0 0 0-97.09037113-97.09037H123.6385189a97.09036999 97.09036999 0 0 0-97.09037113 97.09037V723.81629667a97.09036999 97.09036999 0 0 0 97.09037113 97.09037h776.7229622m-339.81629553-679.63259222v97.09037h242.72592554v-97.09037h-242.72592554m-166.02453334 194.18073998L199.85445888 529.6355555499999H337.23733333l160.19911112-160.1991111c18.93262222-18.93262222 18.93262222-50.00154112 0-68.93416335L338.20823666 141.27407444999994H200.82536334l193.69528889 194.18073998z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="content-save" unicode="&#59091;" d="M667.34459259 539.34459259H149.52928355V746.47071645h517.81530904m-155.34459259-724.9414329a155.34459259 155.34459259 0 0 0-155.34459259 155.34459259 155.34459259 155.34459259 0 0 0 155.34459259 155.34459259 155.34459259 155.34459259 0 0 0 155.34459259-155.34459259 155.34459259 155.34459259 0 0 0-155.34459259-155.34459259m258.90765392 828.50449423H149.52928355a103.56306132 103.56306132 0 0 1-103.56306133-103.56306133v-724.9414329a103.56306132 103.56306132 0 0 1 103.56306133-103.56306133h724.9414329a103.56306132 103.56306132 0 0 1 103.56306133 103.56306133V642.90765392l-207.12612386 207.12612386z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="contrast" unicode="&#59094;" d="M186.88 4.266667a85.333333 85.333333 0 0 0-54.613333 54.186666L837.546667 763.733333a85.333333 85.333333 0 0 0 54.186666-54.613333L186.88 4.266667M853.333333 213.333333v-85.333333h-298.666666v85.333333h298.666666M128 640h128V768h85.333333v-128h128v-85.333333H341.333333v-128H256V554.666667H128V640z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="contrast-box" unicode="&#59095;" d="M754.72592555 214.09185222999997h-242.72592555V141.27407444999994h242.72592555m97.09037112-97.09037112H172.18370333L851.81629667 723.81629667M196.45629667 602.4533333300001h97.09037v97.09037H366.36444445v-97.09037h97.09036998V529.6355555499999H366.36444445v-97.09036998H293.54666667V529.6355555499999h-97.09037M851.81629667 820.90666667H172.18370333c-53.88515555 0-97.09036999-43.20521443-97.09037-97.09037v-679.63259334a97.09036999 97.09036999 0 0 1 97.09037-97.09037h679.63259334a97.09036999 97.09036999 0 0 1 97.09037 97.09037V723.81629667a97.09036999 97.09036999 0 0 1-97.09037 97.09037z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cookie" unicode="&#59096;" d="M512 850.03377778a466.03377778 466.03377778 0 0 1-466.03377778-466.03377778 466.03377778 466.03377778 0 0 1 466.03377778-466.03377778 466.03377778 466.03377778 0 0 1 466.03377778 466.03377778c0 25.89076502-2.07126164 51.78153127-6.73159942 77.6722963C957.32116502 487.56306132 926.25224651 487.56306132 926.25224651 487.56306132h-103.56306133V539.34459259c0 51.78153127-51.78153127 51.78153127-51.78153126 51.78153127h-103.56306133V642.90765392c0 51.78153127-51.78153127 51.78153127-51.78153127 51.78153126h-51.78153005V798.25224651c0 51.78153127-51.78153127 51.78153127-51.78153127 51.78153127M382.54617244 694.68918518A77.6722963 77.6722963 0 0 0 460.21846873 617.01688889 77.6722963 77.6722963 0 0 0 382.54617244 539.34459259 77.6722963 77.6722963 0 0 0 304.87387614 617.01688889 77.6722963 77.6722963 0 0 0 382.54617244 694.68918518m-155.3445926-207.12612386A77.6722963 77.6722963 0 0 0 304.87387614 409.89076502 77.6722963 77.6722963 0 0 0 227.20157984 332.21846873000004 77.6722963 77.6722963 0 0 0 149.52928355 409.89076502 77.6722963 77.6722963 0 0 0 227.20157984 487.56306132m258.90765514-51.78153005a77.6722963 77.6722963 0 0 0 77.67229629-77.67229629 77.6722963 77.6722963 0 0 0-77.67229629-77.6722963 77.6722963 77.6722963 0 0 0-77.6722963 77.6722963 77.6722963 77.6722963 0 0 0 77.6722963 77.67229629m258.90765391-103.56306254a77.6722963 77.6722963 0 0 0 77.67229629-77.67229629 77.6722963 77.6722963 0 0 0-77.67229629-77.6722963 77.6722963 77.6722963 0 0 0-77.6722963 77.6722963 77.6722963 77.6722963 0 0 0 77.6722963 77.67229629M460.21846873 176.87387614a77.6722963 77.6722963 0 0 0 77.67229629-77.6722963A77.6722963 77.6722963 0 0 0 460.21846873 21.529283549999946a77.6722963 77.6722963 0 0 0-77.67229629 77.67229629A77.6722963 77.6722963 0 0 0 460.21846873 176.87387614z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="delete-sweep" unicode="&#59124;" d="M657.63555555 189.81925888h194.18074112v-97.09036999h-194.18074112v97.09036999m0 388.36148224h339.81629668v-97.09037113h-339.81629668V578.18074112m0-194.18074112h291.27111112v-97.09036999h-291.27111112v97.09036999M75.09333333 92.72888889000001a97.09036999 97.09036999 0 0 1 97.09037-97.09036999h291.2711111a97.09036999 97.09036999 0 0 1 97.09037114 97.09036999V578.18074112H75.09333333v-485.45185223M609.09036999 723.81629667h-145.63555556l-48.54518442 48.54518443H220.72888889L172.18370333 723.81629667H26.54814777v-97.09037112h582.54222222V723.81629667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dna" unicode="&#59138;" d="M170.666667 810.666667h85.333333v-85.333334c0-61.44 29.013333-111.36 80.213333-161.28 36.693333-35.413333 85.76-69.546667 136.96-103.253333l-78.08-50.773333C352.853333 438.613333 311.893333 469.333333 277.333333 503.04 216.32 562.346667 170.666667 635.733333 170.666667 725.333333V810.666667m597.333333 0h85.333333v-85.333334c0-89.6-45.653333-162.986667-106.666666-222.293333-60.16-58.88-136.96-107.52-211.626667-154.88-74.666667-47.786667-147.2-94.293333-198.826667-144.213333C285.013333 154.026667 256 104.106667 256 42.666667v-85.333334H170.666667v85.333334c0 89.6 45.653333 162.986667 106.666666 222.293333 60.16 58.88 136.96 107.52 211.626667 154.88 74.666667 47.786667 147.2 94.293333 198.826667 144.213333C738.986667 613.973333 768 663.893333 768 725.333333V810.666667m-139.093333-452.693334c42.24-28.586667 83.2-59.306667 117.76-93.013333C807.68 205.653333 853.333333 132.266667 853.333333 42.666667v-85.333334h-85.333333v85.333334c0 61.44-29.013333 111.36-80.213333 161.28-36.693333 35.413333-85.76 69.546667-136.96 103.253333l78.08 50.773333M298.666667 768h426.666666v-42.666667l-2.56-21.333333H301.226667L298.666667 725.333333V768m29.013333-128h368.64c-10.24-14.506667-22.186667-29.44-38.4-45.226667l-21.76-18.773333H386.986667l-20.906667 18.773333c-16.213333 15.786667-28.16 30.72-38.4 45.226667m60.16-448h249.173333l20.906667-18.773333c16.213333-15.786667 28.16-30.72 38.4-45.226667H327.68c10.24 14.506667 22.186667 29.44 38.4 45.226667l21.76 18.773333m-86.613333-128h421.546666l2.56-21.333333v-42.666667H298.666667v42.666667l2.56 21.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="elevation-decline" unicode="&#59152;" d="M978.03377778 3.2995555400000285H45.96622222v504.86992593L379.9570963 313.98874073l195.21637095 113.9193683L978.03377778 195.40903463999996V3.2995555400000285M45.96622222 627.78481777V741.1863703500001l333.99087408-194.18074073 195.21637095 113.91936831L978.03377778 428.42592354V313.98874073l-402.86031053 233.01688889-195.21637095-112.36592238L45.96622222 627.78481777z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="elevation-rise" unicode="&#59153;" d="M45.96622222-18.033777790000045v192.1094791l402.86031053 232.49907439 195.21637095-113.9193683L978.03377778 486.83614814V-18.033777790000045H45.96622222M978.03377778 606.4514844400001l-333.99087408-193.14511053-195.21637095 112.36592238L45.96622222 292.65540739999994v114.43718281l402.86031053 232.49907439 195.21637095-113.91936831L978.03377778 719.85303702v-113.40155258z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="email" unicode="&#59154;" d="M853.333333 554.666667l-341.333333-213.333334-341.333333 213.333334V640l341.333333-213.333333 341.333333 213.333333m0 85.333333H170.666667c-47.36 0-85.333333-37.973333-85.333334-85.333333v-512a85.333333 85.333333 0 0 1 85.333334-85.333333h682.666666a85.333333 85.333333 0 0 1 85.333334 85.333333V640a85.333333 85.333333 0 0 1-85.333334 85.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="email-outline" unicode="&#59155;" d="M900.3614811 772.3614811H123.6385189a97.09036999 97.09036999 0 0 1-97.09037113-97.09036999v-582.54222222a97.09036999 97.09036999 0 0 1 97.09037113-97.09036999h776.7229622a97.09036999 97.09036999 0 0 1 97.09037113 97.09036999V675.27111111a97.09036999 97.09036999 0 0 1-97.09037113 97.09036999m0-679.63259221H123.6385189V578.18074112l388.3614811-242.72592669 388.3614811 242.72592669v-485.45185223m0 582.54222222l-388.3614811-242.72592554-388.3614811 242.72592554h776.7229622z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="email-secure" unicode="&#59156;" d="M874.666667 896A106.666667 106.666667 0 0 0 981.333333 789.333333V768a42.666667 42.666667 0 0 0 42.666667-42.666667v-170.666666a42.666667 42.666667 0 0 0-42.666667-42.666667h-213.333333a42.666667 42.666667 0 0 0-42.666667 42.666667V725.333333a42.666667 42.666667 0 0 0 42.666667 42.666667v21.333333A106.666667 106.666667 0 0 0 874.666667 896M512 426.666667L170.666667 640v-85.333333l341.333333-213.333334 178.346667 111.36c21.76-16.213333 48.64-26.026667 77.653333-26.026666h170.666667v-298.666667a85.333333 85.333333 0 0 0-85.333334-85.333333H170.666667a85.333333 85.333333 0 0 0-85.333334 85.333333V640a85.333333 85.333333 0 0 0 85.333334 85.333333h469.333333v-170.666666c0-15.36 2.56-29.866667 7.68-42.666667L512 426.666667m362.666667 426.666666A64 64 0 0 1 810.666667 789.333333V768h128v21.333333A64 64 0 0 1 874.666667 853.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="eye" unicode="&#59170;" d="M512 520.53333333a136.53333333 136.53333333 0 0 1-136.53333333-136.53333333 136.53333333 136.53333333 0 0 1 136.53333333-136.53333333 136.53333333 136.53333333 0 0 1 136.53333333 136.53333333 136.53333333 136.53333333 0 0 1-136.53333333 136.53333333m0-364.08888853a227.5555552 227.5555552 0 0 0-227.5555552 227.5555552 227.5555552 227.5555552 0 0 0 227.5555552 227.5555552 227.5555552 227.5555552 0 0 0 227.5555552-227.5555552 227.5555552 227.5555552 0 0 0-227.5555552-227.5555552m0 568.88888853C284.4444448 725.33333333 90.112 583.79377813 11.37777813 384c78.73422187-199.79377813 273.06666667-341.33333333 500.62222187-341.33333333s421.888 141.5395552 500.62222187 341.33333333c-78.73422187 199.79377813-273.06666667 341.33333333-500.62222187 341.33333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="eye-off" unicode="&#59171;" d="M504.746667 512L640 377.173333V384a128 128 0 0 1-128 128h-7.253333m-183.466667-34.133333l66.133333-66.133334c-2.133333-8.96-3.413333-17.92-3.413333-27.733333a128 128 0 0 1 128-128c9.386667 0 18.773333 1.28 27.733333 3.413333l66.133334-66.133333c-28.586667-14.08-60.16-22.613333-93.866667-22.613333a213.333333 213.333333 0 0 0-213.333333 213.333333c0 33.706667 8.533333 65.28 22.613333 93.866667M85.333333 713.813333l97.28-97.28 19.2-19.2C131.413333 541.866667 75.946667 469.333333 42.666667 384c73.813333-187.306667 256-320 469.333333-320 66.133333 0 129.28 12.8 186.88 35.84l18.346667-17.92L841.813333-42.666667 896 11.52 139.52 768M512 597.333333a213.333333 213.333333 0 0 0 213.333333-213.333333c0-27.306667-5.546667-53.76-15.36-77.653333l125.013334-125.013334c64 53.333333 115.2 123.306667 146.346666 202.666667-73.813333 187.306667-256 320-469.333333 320-59.733333 0-116.906667-10.666667-170.666667-29.866667l92.586667-91.733333C458.24 591.786667 484.266667 597.333333 512 597.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="facebook-box" unicode="&#59172;" d="M810.666667 725.333333v-128h-85.333334a42.666667 42.666667 0 0 1-42.666666-42.666666v-85.333334h128v-128h-128v-298.666666h-128v298.666666h-85.333334v128h85.333334V576C554.666667 658.773333 621.653333 725.333333 704 725.333333M853.333333 810.666667H170.666667a85.333333 85.333333 0 0 1-85.333334-85.333334v-682.666666a85.333333 85.333333 0 0 1 85.333334-85.333334h682.666666a85.333333 85.333333 0 0 1 85.333334 85.333334V725.333333a85.333333 85.333333 0 0 1-85.333334 85.333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="facebook" unicode="&#59173;" d="M725.333333 810.666667v-170.666667h-85.333333c-29.44 0-42.666667-34.56-42.666667-64V469.333333h128v-170.666666h-128v-341.333334h-170.666666v341.333334H298.666667v170.666666h128V640a170.666667 170.666667 0 0 0 170.666666 170.666667h128z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file" unicode="&#59179;" d="M560.54518557 529.6355555499999V796.63407445L827.54370333 529.6355555499999M220.72888889 869.45185223c-53.88515555 0-97.09036999-43.20521443-97.09036999-97.09037113v-776.7229622a97.09036999 97.09036999 0 0 1 97.09036999-97.09037113h582.54222222a97.09036999 97.09036999 0 0 1 97.09036999 97.09037113V578.18074112l-291.27111111 291.27111111H220.72888889z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file-chart" unicode="&#59180;" d="M560.54518557 529.6355555499999h266.99851776L560.54518557 796.63407445V529.6355555499999M220.72888889 869.45185223h388.3614811l291.27111111-291.27111111v-582.54222222a97.09036999 97.09036999 0 0 0-97.09036999-97.09037113H220.72888889a97.09036999 97.09036999 0 0 0-97.09036999 97.09037113V772.3614811c0 53.88515555 43.20521443 97.09036999 97.09036999 97.09037113m48.54518556-873.81333333h97.09037v291.27111111H269.27407445v-291.27111111m194.18073998 0h97.09037114v388.3614811h-97.09037114v-388.3614811m194.18074112 0h97.09037v194.18073998h-97.09037v-194.18073998z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file-check" unicode="&#59181;" d="M560.54518557 529.6355555499999h266.99851776L560.54518557 796.63407445V529.6355555499999M220.72888889 869.45185223h388.3614811l291.27111111-291.27111111v-582.54222222a97.09036999 97.09036999 0 0 0-97.09036999-97.09037113H220.72888889a97.09036999 97.09036999 0 0 0-97.09036999 97.09037113V772.3614811c0 53.88515555 43.20521443 97.09036999 97.09036999 97.09037113m216.02607445-799.0537489l230.58962887 230.58963-56.79786666 68.44871112-173.79176221-173.79176335-77.18684444 76.70139335-56.31241557-56.31241557 133.49926001-145.63555555z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file-cloud" unicode="&#59182;" d="M560.54518557 529.6355555499999h266.99851776L560.54518557 796.63407445V529.6355555499999M220.72888889 869.45185223h388.3614811l291.27111111-291.27111111v-582.54222222a97.09036999 97.09036999 0 0 0-97.09036999-97.09037113H220.72888889a97.09036999 97.09036999 0 0 0-97.09036999 97.09037113V772.3614811c0 53.88515555 43.20521443 97.09036999 97.09036999 97.09037113m469.91739221-631.08740778a182.43280555 182.43280555 0 0 1-339.81629553 48.54518556A146.99482112 146.99482112 0 0 1 220.72888889 141.27407444999994a145.63555555 145.63555555 0 0 1 145.63555556-145.63555555h315.54370332a121.36296334 121.36296334 0 0 1 121.36296334 121.3629622c0 64.07964445-50.00154112 116.02299221-112.62483001 121.36296335z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file-document" unicode="&#59183;" d="M560.54518557 529.6355555499999h266.99851776L560.54518557 796.63407445V529.6355555499999M220.72888889 869.45185223h388.3614811l291.27111111-291.27111111v-582.54222222a97.09036999 97.09036999 0 0 0-97.09036999-97.09037113H220.72888889a97.09036999 97.09036999 0 0 0-97.09036999 97.09037113V772.3614811c0 53.88515555 43.20521443 97.09036999 97.09036999 97.09037113m436.90666666-776.72296334v97.09036999H220.72888889v-97.09036999h436.90666666m145.63555556 194.18074112v97.09036999H220.72888889v-97.09036999h582.54222222z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file-excel-box" unicode="&#59184;" d="M715.88977778 141.27407444999994h-97.09036999L512 325.74577778 405.20059221 141.27407444999994h-97.09036999l155.34459221 242.72592555-155.34459221 242.72592555h97.09036999l106.79940779-184.47170333L618.79940779 626.72592555h97.09036999L560.54518557 384m291.2711111 436.90666667H172.18370333c-53.88515555 0-97.09036999-43.20521443-97.09037-97.09037v-679.63259334a97.09036999 97.09036999 0 0 1 97.09037-97.09037h679.63259334a97.09036999 97.09036999 0 0 1 97.09037 97.09037V723.81629667a97.09036999 97.09036999 0 0 1-97.09037 97.09037z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file-find" unicode="&#59185;" d="M375.46666667 338.48888853000005a136.53333333 136.53333333 0 0 1 136.53333333-136.53333333 136.53333333 136.53333333 0 0 1 136.53333333 136.53333333 136.53333333 136.53333333 0 0 1-136.53333333 136.53333334 136.53333333 136.53333333 0 0 1-136.53333333-136.53333334m500.62222186-299.91822186V566.0444448000001l-273.06666666 273.06666667H238.93333333a91.02222187 91.02222187 0 0 1-91.02222186-91.02222294v-728.17777706a91.02222187 91.02222187 0 0 1 91.02222186-91.02222294h546.13333334c20.48 0 38.6844448 6.82666667 54.15822186 18.2044448l-201.61422186 201.61422187c-36.40888853-23.66577813-80.0995552-37.77422187-125.61066667-37.77422187a227.5555552 227.5555552 0 0 0-227.5555552 227.5555552 227.5555552 227.5555552 0 0 0 227.5555552 227.55555627 227.5555552 227.5555552 0 0 0 227.5555552-227.55555627c0-45.51111147-14.1084448-89.20177813-37.77422187-125.1555552L876.08888853 38.57066667000004z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file-pdf-box" unicode="&#59191;" d="M484.32924445 435.45789667c-11.16539221-35.92343666-27.18530333-74.27413333-49.03063666-116.50844444-9.70903666-18.44716999-20.38897778-35.92343666-24.27259336-50.48699335l5.33997114 1.94180779c61.65238557 23.78714112 119.90660779 37.37979221 162.14091776 45.14702222-7.28177778 4.8545189-14.07810333 10.19448889-19.90352555 15.53445888-29.12711111 24.75804445-54.37060779 60.6814811-74.27413333 104.3721489m314.5728-184.95715555c-8.2526811-9.22358557-22.81623666-14.56355555-44.1761189-14.56355555-36.89434112 0-97.09036999 11.16539221-145.63555556 35.92343665-83.4977189-9.22358557-145.63555555-20.38897778-195.63709554-36.40888889-2.42725888-0.97090333-5.33996999-1.94180779-8.73813333-3.39816334-60.19603001-102.91579221-104.8576-149.0337189-144.1792-149.03371776-7.76723001 0-15.53445888 1.94180779-21.35988224 5.33996999l-23.30168889 15.04900779-1.45635556 2.42725888a44.07902777 44.07902777 0 0 0-2.42725888 26.2144c5.33996999 25.72894777 33.01072555 66.50690333 91.26494778 102.91579221 9.22358557 6.79632555 23.78714112 14.56355555 43.20521557 23.78714112 14.56355555 25.24349667 30.09801443 54.85605888 46.60337777 87.38133333 24.75804445 50.00154112 40.29250333 99.51763001 52.4288 142.23739222v0.48545223c-17.9617189 58.73967445-28.64165888 94.17765888-10.67994112 158.74275555 4.36906667 18.44716999 20.38897778 37.37979221 38.35069668 37.37979222h11.65084444c11.16539221 0 21.84533333-3.88361443 29.61256221-11.65084444 32.03982222-32.03982222 16.99081443-110.19756999 0.97090446-174.76266667-0.97090333-2.91271111-1.45635555-5.33996999-1.94180779-6.79632555 19.41807445-54.85605888 47.08883001-99.03217778 77.67229668-124.27567445 12.62174777-9.70903666 26.69985223-19.41807445 42.23431111-28.15620665 21.84533333 2.42725888 42.71976334 3.39816334 62.62328889 3.3981622 60.19603001 0 96.6049189-10.67994112 110.68302222-33.49617778 4.8545189-7.76723001 7.28177778-16.99081443 5.82542222-26.69985109-0.48545223-12.13629667-4.8545189-23.30168889-13.59265222-32.03982222M851.81629667 820.90666667H172.18370333c-53.88515555 0-97.09036999-43.20521443-97.09037-97.09037v-679.63259334a97.09036999 97.09036999 0 0 1 97.09037-97.09037h679.63259334a97.09036999 97.09036999 0 0 1 97.09037 97.09037V723.81629667a97.09036999 97.09036999 0 0 1-97.09037 97.09037m-72.81777777-535.93884445c-4.8545189 4.8545189-24.27259221 16.99081443-92.23585223 16.99081444-3.39816334 0-6.79632555 0-11.16539222-4.85451776 35.43798557-15.53445888 69.90506667-24.75804445 92.2358511-24.75804445 3.39816334 0 6.31087445 0.48545223 9.22358556 0.97090333h1.94180779c2.42725888 0.97090333 3.88361443 1.45635555 4.36906667 6.31087445-0.97090333 1.45635555-1.94180779 3.39816334-4.36906667 5.33996999M333.83916999 214.09185222999997c-10.19448889-5.82542222-18.44716999-11.16539221-23.30168889-15.04900778-34.4670811-31.55436999-56.31241443-63.59419221-58.73967331-82.04136335 21.84533333 7.28177778 50.48699221 39.3216 82.0413622 97.09037113m146.60646002 335.44722887l2.42725888 1.94180779c3.39816334 15.53445888 4.8545189 29.12711111 7.76723001 39.80705223l1.45635555 7.76722887c4.8545189 27.67075555 3.88361443 41.74885888-4.36906666 53.39970446l-7.28177778 2.42725888c-0.97090333-1.45635555-2.42725888-3.88361443-3.39816334-5.82542222-8.2526811-20.38897778-7.76723001-55.82696334 3.39816334-99.51763001z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file-powerpoint-box" unicode="&#59192;" d="M405.20059221 316.03674112h121.36296334c72.81777778 0 104.8576 13.59265223 135.9265189 39.80705109 31.0689189 26.69985223 43.69066667 64.56509667 43.69066667 114.08118557 0 47.08883001-12.13629667 83.98316999-43.69066667 114.08118556-31.55436999 28.64165888-61.65238557 42.71976334-135.9265189 42.71976221H317.81925888v-485.4518511h87.38133333v174.76266667M851.81629667 820.90666667a97.09036999 97.09036999 0 0 0 97.09037-97.09037v-679.63259334a97.09036999 97.09036999 0 0 0-97.09037-97.09037H172.18370333a97.09036999 97.09036999 0 0 0-97.09037 97.09037V723.81629667a97.09036999 97.09036999 0 0 0 97.09037 97.09037h679.63259334m-446.61570446-436.90666667V558.76266667h111.65392669c32.03982222 0 56.79786667-12.13629667 72.81777777-29.12711112 16.01991111-16.99081443 24.27259221-34.95253333 24.27259222-60.19603 0-27.18530333-8.73813333-46.11792555-24.27259222-61.16693334-15.53445888-15.04900779-33.98163001-24.27259221-66.99235555-24.27259221H405.20059221z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file-restore" unicode="&#59193;" d="M609.09036999 869.45185223H220.72888889a97.09036999 97.09036999 0 0 1-97.09036999-97.09037113v-776.7229622a97.09036999 97.09036999 0 0 1 97.09036999-97.09037113h582.54222222a97.09036999 97.09036999 0 0 1 97.09036999 97.09037113V578.18074112l-291.27111111 291.27111111m-97.09036999-776.72296334c-99.51763001 0-184.95715555 60.19603001-222.33694777 145.63555556h83.01226667c30.58346667-43.69066667 81.55591111-72.81777778 139.3246811-72.81777778a169.90814777 169.90814777 0 0 1 169.90814777 169.90814776A169.90814777 169.90814777 0 0 1 512 505.36296334c-65.536 0-121.36296334-37.86524445-150.49007445-92.23585223l77.67229667-77.67229668h-194.18074112V529.6355555499999l63.10874112-63.10874112C351.31543666 533.51916999 426.07502222 578.18074112 512 578.18074112a242.72592555 242.72592555 0 0 0 242.72592555-242.72592669 242.72592555 242.72592555 0 0 0-242.72592555-242.72592554z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file-send" unicode="&#59194;" d="M603.02222187 839.11111147H238.93333333c-50.51733333 0-91.02222187-40.50488853-91.02222186-91.02222294v-728.17777706a91.02222187 91.02222187 0 0 1 91.02222186-91.02222294h546.13333334a91.02222187 91.02222187 0 0 1 91.02222186 91.02222294V566.0444448000001l-273.06666666 273.06666667m-66.44622187-790.528v91.02222186h-182.0444448v90.56711147h182.0444448v91.02222187l136.53333333-136.53333334-136.53333333-136.07822186M557.51111147 520.53333333V770.8444448L807.82222187 520.53333333H557.51111147z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file-word-box" unicode="&#59196;" d="M681.90814777 141.27407444999994H609.09036999l-97.09036999 364.08888889-97.09036999-364.08888889H342.09185223L225.58340779 626.72592555h82.52681443l74.75958557-364.08888889L478.01836999 626.72592555h67.96326002l95.63401444-364.08888889L715.88977778 626.72592555h82.52681443M851.81629667 820.90666667H172.18370333c-53.88515555 0-97.09036999-43.20521443-97.09037-97.09037v-679.63259334a97.09036999 97.09036999 0 0 1 97.09037-97.09037h679.63259334a97.09036999 97.09036999 0 0 1 97.09037 97.09037V723.81629667a97.09036999 97.09036999 0 0 1-97.09037 97.09037z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="file-xml" unicode="&#59201;" d="M554.666667 512h234.666666L554.666667 746.666667V512M256 810.666667h341.333333l256-256v-512a85.333333 85.333333 0 0 0-85.333333-85.333334H256a85.333333 85.333333 0 0 0-85.333333 85.333334V725.333333c0 47.36 37.973333 85.333333 85.333333 85.333334m5.12-576l159.573333-159.573334 60.586667 60.16-99.413333 99.413334 99.413333 99.413333-60.586667 60.16-159.573333-159.573333m476.16 0l-159.573333 159.573333-60.586667-60.16 99.413333-99.413333-99.413333-99.413334 60.586667-60.16 159.573333 159.573334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="folder" unicode="&#59208;" d="M414.90963001 772.3614811H123.6385189c-53.88515555 0-97.09036999-43.20521443-97.09037113-97.09036999v-582.54222222a97.09036999 97.09036999 0 0 1 97.09037113-97.09036999h776.7229622a97.09036999 97.09036999 0 0 1 97.09037113 97.09036999V578.18074112a97.09036999 97.09036999 0 0 1-97.09037113 97.09036999h-388.3614811l-97.09036999 97.09036999z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="folder-account" unicode="&#59209;" d="M851.81629667 141.27407444999994h-388.36148224v48.54518443c0 64.56509667 129.61564445 97.09036999 194.18074112 97.09037113s194.18074112-32.52527445 194.18074112-97.09037113m-194.18074112 339.81629667a97.09036999 97.09036999 0 0 0 97.09037-97.09036998 97.09036999 97.09036999 0 0 0-97.09037-97.09037114 97.09036999 97.09036999 0 0 0-97.09036998 97.09037114 97.09036999 97.09036999 0 0 0 97.09036998 97.09036998m242.72592555 145.63555556h-388.3614811l-97.09036999 97.09036999H123.6385189c-53.88515555 0-97.09036999-43.20521443-97.09037113-97.09036999v-582.54222222a97.09036999 97.09036999 0 0 1 97.09037113-97.09036999h776.7229622a97.09036999 97.09036999 0 0 1 97.09037113 97.09036999V578.18074112a97.09036999 97.09036999 0 0 1-97.09037113 97.09036999z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="folder-google-drive" unicode="&#59210;" d="M596.95407445 529.6355555499999h116.02299222L851.81629667 286.90963001h-143.20829667L584.81777778 507.30476999M817.83466667 141.27407444999994h-269.42577778l67.96325888 121.36296221h248.5513489l12.62174778-22.33078443M487.72740779 141.27407444999994l-53.39970446 103.88669554 137.86832668 240.7841189 72.81777778-129.13019222L524.13629667 141.27407444999994M900.3614811 675.27111111h-388.3614811l-97.09036999 97.09036999H123.6385189c-53.88515555 0-97.09036999-43.20521443-97.09037113-97.09036999v-582.54222222a97.09036999 97.09036999 0 0 1 97.09037113-97.09036999h776.7229622a97.09036999 97.09036999 0 0 1 97.09037113 97.09036999V578.18074112a97.09036999 97.09036999 0 0 1-97.09037113 97.09036999z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="folder-download" unicode="&#59211;" d="M900.3614811 675.27111111a97.09036999 97.09036999 0 0 0 97.09037113-97.09036999v-485.45185223a97.09036999 97.09036999 0 0 0-97.09037113-97.09036999H123.6385189a97.09036999 97.09036999 0 0 0-97.09037113 97.09036999V675.27111111c0 53.88515555 43.20521443 97.09036999 97.09037113 97.09036999h291.27111111l97.09036999-97.09036999h388.3614811m-36.40888889-339.81629668H706.18074112V529.6355555499999h-97.09037113v-194.18074112h-157.77185109L657.63555555 129.13777777999996"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="folder-image" unicode="&#59213;" d="M172.18370333 141.27407444999994l218.45333333 291.27111112 169.90814891-218.45333334 121.3629622 145.63555556L851.81629667 141.27407444999994m48.54518443 533.99703666h-388.3614811l-97.09036999 97.09036999H123.6385189a97.09036999 97.09036999 0 0 1-97.09037113-97.09036999v-582.54222222a97.09036999 97.09036999 0 0 1 97.09037113-97.09036999h776.7229622a97.09036999 97.09036999 0 0 1 97.09037113 97.09036999V578.18074112a97.09036999 97.09036999 0 0 1-97.09037113 97.09036999z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="folder-outline" unicode="&#59214;" d="M900.3614811 92.72888889000001H123.6385189V578.18074112h776.7229622m0 97.09036999h-388.3614811l-97.09036999 97.09036999H123.6385189c-53.88515555 0-97.09036999-43.20521443-97.09037113-97.09036999v-582.54222222a97.09036999 97.09036999 0 0 1 97.09037113-97.09036999h776.7229622a97.09036999 97.09036999 0 0 1 97.09037113 97.09036999V578.18074112a97.09036999 97.09036999 0 0 1-97.09037113 97.09036999z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="folder-star" unicode="&#59215;" d="M900.3614811 675.27111111h-388.3614811l-97.09036999 97.09036999H123.6385189a97.09036999 97.09036999 0 0 1-97.09037113-97.09036999v-582.54222222a97.09036999 97.09036999 0 0 1 97.09037113-97.09036999h776.7229622a97.09036999 97.09036999 0 0 1 97.09037113 97.09036999V578.18074112a97.09036999 97.09036999 0 0 1-97.09037113 97.09036999m-100.0030811-533.99703666L657.63555555 224.77179220999994 514.91271111 141.27407444999994l37.86524444 161.65546667-125.73203 108.74121443 165.53908224 14.07810333L657.63555555 578.18074112l65.05054778-152.43188224 165.53908224-14.07810333-125.73203002-108.74121443 37.86524445-161.65546667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="folder-upload" unicode="&#59216;" d="M900.3614811 675.27111111a97.09036999 97.09036999 0 0 0 97.09037113-97.09036999v-485.45185223a97.09036999 97.09036999 0 0 0-97.09037113-97.09036999H123.6385189a97.09036999 97.09036999 0 0 0-97.09037113 97.09036999V675.27111111a97.09036999 97.09036999 0 0 0 97.09037113 97.09036999h291.27111111l97.09036999-97.09036999h388.3614811m-449.0429622-339.81629668H609.09036999v-194.18073998h97.09037113v194.18073998h157.77185109L657.63555555 541.7718522299999"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="folder-move" unicode="&#59217;" d="M366.36444445 92.72888889000001v145.63555556H172.18370333v194.18074112h194.18074112V578.18074112l242.72592554-242.72592669m291.27111111 339.81629668h-388.3614811l-97.09036999 97.09036999H123.6385189c-53.88515555 0-97.09036999-43.20521443-97.09037113-97.09036999v-582.54222222a97.09036999 97.09036999 0 0 1 97.09037113-97.09036999h776.7229622a97.09036999 97.09036999 0 0 1 97.09037113 97.09036999V578.18074112a97.09036999 97.09036999 0 0 1-97.09037113 97.09036999z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="folder-plus" unicode="&#59218;" d="M414.90963001 772.3614811l97.09036999-97.09036999h388.3614811a97.09036999 97.09036999 0 0 0 97.09037113-97.09036999v-485.45185223a97.09036999 97.09036999 0 0 0-97.09037113-97.09036999H123.6385189a97.09036999 97.09036999 0 0 0-97.09037113 97.09036999V675.27111111c0 53.88515555 43.20521443 97.09036999 97.09037113 97.09036999h291.27111111m242.72592554-242.72592555v-145.63555555h-145.63555555v-97.09036999h145.63555555v-145.63555556h97.09037v145.63555556h145.63555555v97.09036999h-145.63555555V529.6355555499999h-97.09037z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="format-header-" unicode="&#59229;" d="M96.42666666 699.54370334h97.09037v-291.27111112h194.18074112V699.54370334h97.09036998v-679.63259221H387.69777778v291.2711111H193.51703666v-291.2711111H96.42666666V699.54370334m582.54222222 0h242.72592555v-97.09037h-242.72592555v-194.18074112h97.09037a194.18074112 194.18074112 0 0 0 194.18074112-194.18073997 194.18074112 194.18074112 0 0 0-194.18074112-194.18074112h-97.09037a97.09036999 97.09036999 0 0 0-97.09036998 97.09036998v48.54518557h97.09036998v-48.54518557h97.09037a97.09036999 97.09036999 0 0 1 97.09037112 97.09037114 97.09036999 97.09036999 0 0 1-97.09037112 97.09036998h-97.09037a97.09036999 97.09036999 0 0 0-97.09036998 97.09036999V602.45333334a97.09036999 97.09036999 0 0 0 97.09036998 97.09037z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="google-drive" unicode="&#59275;" d="M316.75733333 749.5111114700001L18.2044448 226.13333334000004l156.1031104-273.06666667 298.09777813 523.37777813M408.68977813 226.13333334000004L252.58666667-46.93333332999998h597.10577813l156.1031104 273.06666667m-25.94133333 45.51111146L667.648 817.77777814H355.89688853l312.20622294-546.13333334h311.7511104z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="image" unicode="&#59308;" d="M318.68228521 301.14955061l138.08408144-165.70089876 193.31771608 248.55134815 248.55134815-331.40179753H125.36456912m883.73812718-55.23363335V770.6354308800001a110.46726541 110.46726541 0 0 1-110.46726542 110.46726542H125.36456912a110.46726541 110.46726541 0 0 1-110.46726542-110.46726542v-773.27086176a110.46726541 110.46726541 0 0 1 110.46726542-110.46726542h773.27086176a110.46726541 110.46726541 0 0 1 110.46726542 110.46726542z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="language-css" unicode="&#59337;" d="M172.18370333 820.90666667l-31.55437-162.1409189h659.72906667L778.9985189 553.90814777H119.75490333l-32.03982223-161.65546667h659.72906667l-36.89433998-184.95715555-266.02761558-87.86678443-230.58962887 87.86678443 16.01991111 79.61410446H67.81155555l-38.35069667-194.18074112 381.07970446-145.63555556 439.33392555 145.63555556 58.25422222 292.72746666 11.65084444 58.73967446L994.53914112 820.90666667H172.18370333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="language-html" unicode="&#59338;" d="M512 76.90100052000003l224.80088557 62.41400607 30.37849853 336.92515996H367.28788131L357.34582738 588.36444225h419.77561065l11.04672615 109.91492865H235.83183582l30.93083401-331.954133h380.5597304l-12.70373514-142.50277294-122.61866509-33.14017975-122.61866509 33.14017975-7.73270818 91.68782978h-110.46726671l16.01775441-176.19528815L512 76.90100052000003M73.9972905 881.1026963h876.005419L871.01861357-13.682157029999985 512-113.10269630000005l-359.01861357 99.42053927L73.9972905 881.1026963z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="link" unicode="&#59351;" d="M719.12612386 694.68918518h-155.34459259v-98.38490904h155.34459259a212.30427614 212.30427614 0 0 0 212.30427614-212.30427614 212.30427614 212.30427614 0 0 0-212.30427614-212.30427614h-155.34459259V73.31081482000002h155.34459259a310.68918518 310.68918518 0 0 1 310.68918519 310.68918518c0 171.91468206-139.29231762 310.68918518-310.68918519 310.68918518M92.5696 384A212.30427614 212.30427614 0 0 0 304.87387614 596.30427614h155.34459259V694.68918518H304.87387614a310.68918518 310.68918518 0 0 1-310.68918519-310.68918518 310.68918518 310.68918518 0 0 1 310.68918519-310.68918518h155.34459259v98.38490904H304.87387614c-117.02626016 0-212.30427614 95.27801719-212.30427614 212.30427614M304.87387614 332.21846873000004h414.25224772v103.56306254H304.87387614v-103.56306254z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="link-off" unicode="&#59352;" d="M26.54814777 753.37576333L88.68598557 815.02814776 900.3614811 3.3526522299999897 838.70909667-58.78518556999995l-194.18074112 194.18074112H560.54518557v83.98316999L401.80243001 378.12148109H317.81925888v83.98317114L196.45629667 583.95306666c-48.54518557-35.92343666-77.67229667-93.20675555-77.67229667-157.2864 0-109.7121189 89.32314112-199.03525888 199.03525888-199.03525888h145.63555555V135.39555555000004H317.81925888a291.27111111 291.27111111 0 0 0-291.27111111 291.27111111c0 89.32314112 40.29250333 169.90814777 103.88669668 222.8224L26.54814777 753.37576333M706.18074112 717.93777777a291.27111111 291.27111111 0 0 0 291.27111111-291.27111111c0-107.28485888-58.25422222-201.4625189-145.63555556-251.94951111l-67.96326001 68.93416334c71.36142222 30.09801443 121.36296334 100.48853333 121.36296334 183.01534777A199.03525888 199.03525888 0 0 1 706.18074112 625.70192554h-145.63555555V717.93777777h145.63555555M317.81925888 717.93777777h145.63555555v-92.23585223H401.31697778L309.08112555 717.93777777H317.81925888m388.36148224-242.72592554v-97.09037114h-57.2833189l-97.09036999 97.09037114H706.18074112z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="link-variant-off" unicode="&#59353;" d="M15.51802428 753.82303644L81.7983846 819.58557984 947.58557984-46.20161540000004 881.82303644-112.48197572000004l-250.10479406 250.10479407-135.14979556-135.14979555a259.06299851 259.06299851 0 0 0-366.09542402 0 259.06299851 259.06299851 0 0 0 0 366.09542402l77.1544818 77.15448059c-0.51781571-42.46085571 6.2137837-84.92171022 20.71261154-125.82912l-24.33731911-24.3373191a154.41252503 154.41252503 0 0 1 0-219.55369128 154.41252503 154.41252503 0 0 1 219.55369128 0l135.66761004 134.63197985-83.88608 83.3682655c-0.51781571-12.42756741-5.69596799-25.37295053-15.01664354-35.2114418-20.19479703-20.19479703-53.33497719-20.19479703-73.52977423 0A257.50955259 257.50955259 0 0 0 311.70838164 457.1148646L15.51802428 753.82303644m554.58019556 54.37060742a259.06299851 259.06299851 0 0 0 366.09542402 0 259.06299851 259.06299851 0 0 0 0-366.09542402l-77.1544818-77.15448059c0.51781571 42.46085571-6.2137837 84.92171022-20.71261154 125.3113043l24.33731911 24.8551348a154.41252503 154.41252503 0 0 1 0 219.55369128 154.41252503 154.41252503 0 0 1-219.55369128 0l-172.43249777-172.43249778-73.01195852 73.52977423 172.43249778 172.43249778m36.24707201-256.31857778c20.19479703 20.19479703 53.33497719 20.19479703 73.52977423 0a258.85587319 258.85587319 0 0 0 63.69128296-262.01454698l-92.17112534 91.65330962c-2.58907614 35.21144059-17.6057209 69.90506667-45.04993185 96.83146313a50.38342994 50.38342994 0 0 0 0 73.52977423z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="link-variant" unicode="&#59354;" d="M434.12057758 306.12057758000003c22.64578907-21.54111683 22.64578907-56.89064234 0-78.43175918-21.54111683-21.54111683-56.89064234-21.54111683-78.43175918 0a276.33386508 276.33386508 0 0 0 0 390.50178562l195.52706054 195.52706055a276.33386508 276.33386508 0 0 0 390.50178563 0 276.33386508 276.33386508 0 0 0 0-390.50178563l-82.29811392-82.29811263c0.55233676 45.29157942-6.62803595 90.58315757-22.09345231 133.66539126l25.95980705 26.51214378a164.70669337 164.70669337 0 0 1 0 234.19060404 164.70669337 164.70669337 0 0 1-234.19060404 0l-194.97472377-194.97472379a164.70669337 164.70669337 0 0 1 0-234.19060402m155.75884484 234.19060402c21.54111683 21.54111683 56.89064234 21.54111683 78.43175918 0a276.33386508 276.33386508 0 0 0 0-390.50178562l-195.52706054-195.52706055a276.33386508 276.33386508 0 0 0-390.50178563 0 276.33386508 276.33386508 0 0 0 0 390.50178563l82.29811392 82.29811263c-0.55233676-45.29157942 6.62803595-90.58315757 22.09345231-134.217728l-25.95980705-25.95980704a164.70669337 164.70669337 0 0 1 0-234.19060404 164.70669337 164.70669337 0 0 1 234.19060404 0l194.97472377 194.97472379a164.70669337 164.70669337 0 0 1 0 234.19060402 53.74232527 53.74232527 0 0 0 0 78.43175918z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="login-variant" unicode="&#59359;" d="M851.81629667 820.90666667H172.18370333c-53.88515555 0-97.09036999-43.20521443-97.09037-97.09037v-194.18074112h97.09037V723.81629667h679.63259334v-679.63259334H172.18370333v194.18074112H75.09333333v-194.18074112a97.09036999 97.09036999 0 0 1 97.09037-97.09037h679.63259334a97.09036999 97.09036999 0 0 1 97.09037 97.09037V723.81629667a97.09036999 97.09036999 0 0 1-97.09037 97.09037m-433.02305222-610.69843001L487.72740779 141.27407444999994l242.72592554 242.72592555-242.72592554 242.72592555-68.93416334-68.44871112L544.52527445 432.54518557H75.09333333v-97.09037114h469.43194112l-125.73203-125.24657777z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="map-marker" unicode="&#59361;" d="M512 408.27259221A121.36296334 121.36296334 0 0 0 390.63703666 529.6355555499999 121.36296334 121.36296334 0 0 0 512 650.9985189 121.36296334 121.36296334 0 0 0 633.36296334 529.6355555499999a121.36296334 121.36296334 0 0 0-121.36296334-121.36296334M512 869.45185223a339.81629667 339.81629667 0 0 1-339.81629667-339.81629668c0-254.86222222 339.81629667-631.08740779 339.81629667-631.08740778s339.81629667 376.22518557 339.81629667 631.08740778a339.81629667 339.81629667 0 0 1-339.81629667 339.81629668z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="map-marker-minus" unicode="&#59362;" d="M355.46666667 406.7555552A113.77777813 113.77777813 0 0 1 469.24444481 520.53333333 113.77777813 113.77777813 0 0 1 355.46666667 634.31111147 113.77777813 113.77777813 0 0 1 241.68888853 520.53333333 113.77777813 113.77777813 0 0 1 355.46666667 406.7555552M355.46666667 839.11111147c175.67288853 0 318.57777813-142.44977813 318.57777813-318.57777814 0-238.93333333-318.57777813-591.6444448-318.57777813-591.6444448S36.88888854 281.6 36.88888854 520.53333333a318.57777813 318.57777813 0 0 0 318.57777814 318.57777814m273.06666665-682.66666667h364.08888854v-91.02222293h-364.08888854v91.02222293z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="map-marker-multiple" unicode="&#59363;" d="M609.09036999 408.27259221A121.36296334 121.36296334 0 0 1 730.45333333 529.6355555499999 121.36296334 121.36296334 0 0 1 609.09036999 650.9985189 121.36296334 121.36296334 0 0 1 487.72740779 529.6355555499999a121.36296334 121.36296334 0 0 1 121.3629622-121.36296334M609.09036999 869.45185223c187.38441443 0 339.81629667-151.94643001 339.81629668-339.81629668 0-254.86222222-339.81629667-631.08740779-339.81629668-631.08740778S269.27407445 274.77333333 269.27407445 529.6355555499999a339.81629667 339.81629667 0 0 0 339.81629554 339.81629668M172.18370333 529.6355555499999c0-218.45333333 246.60954112-517.49167445 291.2711111-573.31863665L414.90963001-101.45185222999999S75.09333333 274.77333333 75.09333333 529.6355555499999c0 153.88823666 102.43034112 283.98933333 242.72592555 325.73819222C228.4961189 775.27419221 172.18370333 659.2512 172.18370333 529.6355555499999z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="map-marker-plus" unicode="&#59365;" d="M384 405.333333A106.666667 106.666667 0 0 1 490.666667 512 106.666667 106.666667 0 0 1 384 618.666667 106.666667 106.666667 0 0 1 277.333333 512 106.666667 106.666667 0 0 1 384 405.333333M384 810.666667c164.693333 0 298.666667-133.546667 298.666667-298.666667 0-224-298.666667-554.666667-298.666667-554.666667S85.333333 288 85.333333 512a298.666667 298.666667 0 0 0 298.666667 298.666667m256-640h128v128h85.333333v-128h128v-85.333334h-128v-128h-85.333333v128h-128v85.333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="map-marker-radius" unicode="&#59366;" d="M512 890.78518556c160.68456334 0 291.27111111-129.13019221 291.27111111-288.84385223C803.27111111 385.42980778 512 65.51703666000003 512 65.51703666000003S220.72888889 385.42980778 220.72888889 601.94133333C220.72888889 761.65499221 351.31543666 890.78518556 512 890.78518556m0-194.18074112a97.09036999 97.09036999 0 0 1-97.09036999-97.09036999 97.09036999 97.09036999 0 0 1 97.09036999-97.09037113 97.09036999 97.09036999 0 0 1 97.09036999 97.09037113 97.09036999 97.09036999 0 0 1-97.09036999 97.09036999m388.3614811-631.08740778c0-107.28485888-173.79176334-194.18074112-388.3614811-194.18073999s-388.3614811 86.8958811-388.3614811 194.18073999c0 62.62328889 59.22512555 118.45025223 150.97552555 153.88823779l31.06891889-44.1761189C253.25416334 153.38382221999996 220.72888889 123.28580778000003 220.72888889 89.78962999999999c0-66.99235555 130.58654777-121.36296334 291.27111111-121.36296334s291.27111111 54.37060779 291.27111111 121.36296334c0 33.49617778-32.52527445 63.59419221-84.95407445 85.43952555l31.06891889 44.1761189C841.13635555 183.96728887999996 900.3614811 128.14032554000005 900.3614811 65.51703666000003z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="message-alert" unicode="&#59374;" d="M554.666667 469.333333h-85.333334V640h85.333334m0-341.333333h-85.333334v85.333333h85.333334m298.666666 426.666667H170.666667a85.333333 85.333333 0 0 1-85.333334-85.333334v-768l170.666667 170.666667h597.333333a85.333333 85.333333 0 0 1 85.333334 85.333333V725.333333a85.333333 85.333333 0 0 1-85.333334 85.333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="message-processing" unicode="&#59376;" d="M725.333333 426.666667h-85.333333V512h85.333333m-170.666666-85.333333h-85.333334V512h85.333334m-170.666667-85.333333H298.666667V512h85.333333m469.333333 298.666667H170.666667a85.333333 85.333333 0 0 1-85.333334-85.333334v-768l170.666667 170.666667h597.333333a85.333333 85.333333 0 0 1 85.333334 85.333333V725.333333a85.333333 85.333333 0 0 1-85.333334 85.333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="message-plus" unicode="&#59377;" d="M853.333333 810.666667a85.333333 85.333333 0 0 0 85.333334-85.333334v-512a85.333333 85.333333 0 0 0-85.333334-85.333333H256l-170.666667-170.666667V725.333333a85.333333 85.333333 0 0 0 85.333334 85.333334h682.666666m-384-170.666667v-128H341.333333v-85.333333h128v-128h85.333334v128h128V512h-128V640h-85.333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="message-text" unicode="&#59378;" d="M853.333333 810.666667H170.666667a85.333333 85.333333 0 0 1-85.333334-85.333334v-768l170.666667 170.666667h597.333333a85.333333 85.333333 0 0 1 85.333334 85.333333V725.333333a85.333333 85.333333 0 0 1-85.333334 85.333334M256 512h512v-85.333333H256m341.333333-128H256v85.333333h341.333333m170.666667 170.666667H256V640h512"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="message-text-outline" unicode="&#59379;" d="M853.333333 768.00000034a85.333333 85.333333 0 0 0 85.333334-85.333334v-512a85.333333 85.333333 0 0 0-85.333334-85.333333H256l-170.666667-170.666667V682.66666634a85.333333 85.333333 0 0 0 85.333334 85.333334h682.666666M170.666667 682.66666634v-561.92L220.586667 170.66666634H853.333333V682.66666634H170.666667m85.333333-128h512v-85.333333H256V554.66666634m0-170.666666h384v-85.333334H256v85.333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="numeric--box" unicode="&#59420;" d="M657.63555555 529.6355555499999h-194.18074112v-97.09036998h97.09037114a97.09036999 97.09036999 0 0 0 97.09036998-97.09037114v-97.09036998a97.09036999 97.09036999 0 0 0-97.09036998-97.09037H366.36444445v97.09037h194.18074112v97.09036998H366.36444445V626.72592555h291.2711111m194.18074112 194.18074112H172.18370333a97.09036999 97.09036999 0 0 1-97.09037-97.09037v-679.63259334a97.09036999 97.09036999 0 0 1 97.09037-97.09037h679.63259334a97.09036999 97.09036999 0 0 1 97.09037 97.09037V723.81629667a97.09036999 97.09036999 0 0 1-97.09037 97.09037z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="numeric--box-outline" unicode="&#59421;" d="M657.63555555 238.36444444999995v97.09036998a97.09036999 97.09036999 0 0 1-97.09036998 97.09037114h-97.09037114V529.6355555499999h194.18074112V626.72592555H366.36444445v-291.27111112h194.18074112v-97.09036998H366.36444445v-97.09037h194.18074112a97.09036999 97.09036999 0 0 1 97.09036998 97.09037m194.18074112-194.18074112H172.18370333V723.81629667h679.63259334m0 97.09037H172.18370333a97.09036999 97.09036999 0 0 1-97.09037-97.09037v-679.63259334a97.09036999 97.09036999 0 0 1 97.09037-97.09037h679.63259334a97.09036999 97.09036999 0 0 1 97.09037 97.09037V723.81629667a97.09036999 97.09036999 0 0 1-97.09037 97.09037z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="open-in-new" unicode="&#59435;" d="M609.09036999 820.90666667v-97.09037h174.27721558l-477.19917114-477.19917112 68.44871112-68.44871112L851.81629667 655.36758557V481.09036999h97.09037V820.90666667m-97.09037-776.72296334H172.18370333V723.81629667h339.81629667V820.90666667H172.18370333a97.09036999 97.09036999 0 0 1-97.09037-97.09037v-679.63259334a97.09036999 97.09036999 0 0 1 97.09037-97.09037h679.63259334a97.09036999 97.09036999 0 0 1 97.09037 97.09037v339.81629667h-97.09037v-339.81629667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="open-in-app" unicode="&#59436;" d="M512 487.56306132l-207.12612386-207.12612264h155.34459259v-310.68918519h103.56306254v310.68918519h155.34459259m155.34459259 517.81530783H149.52928355a103.56306132 103.56306132 0 0 1-103.56306133-103.56306133v-621.37837036a103.56306132 103.56306132 0 0 1 103.56306133-103.56306133h207.12612386v103.56306133H149.52928355V591.12612386h724.9414329v-517.81530904h-207.12612386v-103.56306133h207.12612386a103.56306132 103.56306132 0 0 1 103.56306133 103.56306133V694.68918518a103.56306132 103.56306132 0 0 1-103.56306133 103.56306133z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="package" unicode="&#59438;" d="M178.00912555 723.81629667h667.49629667l-45.63247445 48.54518443h-582.54222222l-39.3216-48.54518443m748.56675555-11.16539334c14.07810333-16.50536334 22.33078557-37.37979221 22.33078557-61.65238443V44.18370332999996a97.09036999 97.09036999 0 0 0-97.09037-97.09037H172.18370333a97.09036999 97.09036999 0 0 0-97.09037 97.09037V650.9985189c0 24.27259221 8.2526811 45.14702222 22.33078557 61.65238443l66.99235555 81.5559111C178.00912555 810.71217778 197.91265223 820.90666667 220.72888889 820.90666667h582.54222222c22.81623666 0 42.71976334-10.19448889 55.82696334-26.69985224l67.47780665-81.5559111M220.72888889 92.72888889000001h291.27111111v145.63555556H220.72888889v-145.63555556z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="package-down" unicode="&#59439;" d="M178.00912555 723.81629667l39.3216 48.54518443h582.54222222l45.63247445-48.54518443M512 117.00148109999998L245.0014811 384H414.90963001v97.09036999h194.18073998v-97.09036999h169.90814891L512 117.00148109999998m414.5758811 595.64942223l-67.47780665 81.5559111C845.99087445 810.71217778 826.08734777 820.90666667 803.27111111 820.90666667H220.72888889c-22.81623666 0-42.71976334-10.19448889-56.31241444-26.69985224L97.4241189 712.65090333C83.34601443 696.14554112 75.09333333 675.27111111 75.09333333 650.9985189V44.18370332999996a97.09036999 97.09036999 0 0 1 97.09037-97.09037h679.63259334a97.09036999 97.09036999 0 0 1 97.09037 97.09037V650.9985189c0 24.27259221-8.2526811 45.14702222-22.33078557 61.65238443z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="package-up" unicode="&#59440;" d="M926.5758811 712.65090333c14.07810333-16.50536334 22.33078557-37.37979221 22.33078557-61.65238443V44.18370332999996a97.09036999 97.09036999 0 0 0-97.09037-97.09037H172.18370333a97.09036999 97.09036999 0 0 0-97.09037 97.09037V650.9985189c0 24.27259221 8.2526811 45.14702222 22.33078557 61.65238443l66.99235555 81.5559111C178.00912555 810.71217778 197.91265223 820.90666667 220.72888889 820.90666667h582.54222222c22.81623666 0 42.71976334-10.19448889 55.82696334-26.69985224l67.47780665-81.5559111M178.00912555 723.81629667h667.49629667l-45.63247445 48.54518443h-582.54222222l-39.3216-48.54518443M512 505.36296334L245.0014811 238.36444444999995H414.90963001v-97.09037h194.18073998v97.09037h169.90814891L512 505.36296334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="poll-box" unicode="&#59480;" d="M754.72592555 141.27407444999994h-97.09037v194.18073998h97.09037m-194.18073998-194.18073998h-97.09037114V626.72592555h97.09037114M366.36444445 141.27407444999994H269.27407445v339.81629554h97.09037m485.45185222 339.81629668H172.18370333c-53.88515555 0-97.09036999-43.20521443-97.09037-97.09037v-679.63259334a97.09036999 97.09036999 0 0 1 97.09037-97.09037h679.63259334a97.09036999 97.09036999 0 0 1 97.09037 97.09037V723.81629667a97.09036999 97.09036999 0 0 1-97.09037 97.09037z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="run" unicode="&#59526;" d="M745.01688853 432.35555521l-49.152 82.83022293-33.2231104-130.6168896 113.32266667-206.62044373V-113.77777813H694.0444448v227.55555627l-106.0408896 141.5395552-72.81777707-205.25511147-219.36355626-95.57333333L248.0355552 22.75555521000001l190.69155627 112.4124448 114.688 448.7395552-96.0284448-30.03733334V386.84444481H375.46666667V623.5022218700001l246.67022186 76.91377814 22.75555627 3.64088853c28.21688853 0 52.79288853-15.47377813 66.44622187-38.22933333l91.02222186-151.552H967.11111147V432.35555521h-222.09422294M739.5555552 714.52444481c-45.51111147 0-81.92 36.40888853-81.92 81.92S694.0444448 878.36444481 739.5555552 878.36444481s81.92-36.40888853 81.92-81.92S785.06666667 714.52444481 739.5555552 714.52444481M284.4444448 477.86666667v-91.02222186H147.91111147a45.51111147 45.51111147 0 0 0-45.51111147 45.5111104 45.51111147 45.51111147 0 0 0 45.51111147 45.51111146h136.53333333m102.4-182.0444448l-22.75555627-91.02222186H193.42222187a45.51111147 45.51111147 0 0 0-45.5111104 45.51111146 45.51111147 45.51111147 0 0 0 45.5111104 45.5111104h193.42222293M284.4444448 659.91111147v-91.02222293H102.4a45.51111147 45.51111147 0 0 0-45.51111147 45.51111147 45.51111147 45.51111147 0 0 0 45.51111147 45.51111146h182.0444448z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="server" unicode="&#59541;" d="M170.666667 853.333333h682.666666a42.666667 42.666667 0 0 0 42.666667-42.666666v-170.666667a42.666667 42.666667 0 0 0-42.666667-42.666667H170.666667a42.666667 42.666667 0 0 0-42.666667 42.666667V810.666667a42.666667 42.666667 0 0 0 42.666667 42.666666m0-341.333333h682.666666a42.666667 42.666667 0 0 0 42.666667-42.666667v-170.666666a42.666667 42.666667 0 0 0-42.666667-42.666667H170.666667a42.666667 42.666667 0 0 0-42.666667 42.666667v170.666666a42.666667 42.666667 0 0 0 42.666667 42.666667m0-341.333333h682.666666a42.666667 42.666667 0 0 0 42.666667-42.666667v-170.666667a42.666667 42.666667 0 0 0-42.666667-42.666666H170.666667a42.666667 42.666667 0 0 0-42.666667 42.666666v170.666667a42.666667 42.666667 0 0 0 42.666667 42.666667M384 682.666667h42.666667V768H384v-85.333333m0-341.333334h42.666667v85.333334H384v-85.333334m0-341.333333h42.666667v85.333333H384v-85.333333M213.333333 768v-85.333333h85.333334V768H213.333333m0-341.333333v-85.333334h85.333334v85.333334H213.333333m0-341.333334v-85.333333h85.333334v85.333333H213.333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="sim" unicode="&#59560;" d="M900.3614811 772.3614811a97.09036999 97.09036999 0 0 1-97.09036999 97.09037113h-388.3614811L123.6385189 578.18074112v-582.54222222a97.09036999 97.09036999 0 0 1 97.09036999-97.09037113h582.54222222a97.09036999 97.09036999 0 0 1 97.09036999 97.09037113V772.3614811M366.36444445 44.18370332999996H269.27407445v97.09037112h97.09037v-97.09037112m388.3614811 0h-97.09037v97.09037112h97.09037v-97.09037112m-388.3614811 194.18074112H269.27407445v194.18074112h97.09037v-194.18074112m194.18074112-194.18074112h-97.09037114v194.18074112h97.09037114v-194.18074112m0 291.2711111h-97.09037114v97.09037114h97.09037114v-97.09037114m194.18073998-97.09036998h-97.09037v194.18074112h97.09037v-194.18074112z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="sim-alert" unicode="&#59561;" d="M560.54518557 335.45481443000006l-97.09037114 0L463.45481443 578.18074112l97.09037114 0m0-436.90666668l-97.09037114 0 0 97.09037001 97.09037114 0m242.72592554 631.08740778l-388.3614811 0L123.6385189 578.18074112l0-582.54222222a97.09036999 97.09036999 0 0 1 97.09036999-97.09037113l582.54222222 0a97.09036999 97.09036999 0 0 1 97.09036999 97.09037113L900.3614811 772.3614811a97.09036999 97.09036999 0 0 1-97.09036999 97.09037113z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="trending-up" unicode="&#59640;" d="M706.18074112 653.93777778l111.16847331-111.16847445-236.90050332-236.90050333-194.18074112 194.18074112L26.54814777 139.84426667000002 94.99685888 71.39555556000005l291.27111111 291.27111111 194.18074112-194.18074112 305.83466667 305.34921557L997.45185223 362.66666667000004V653.93777778h-291.27111111z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tumblr-reblog" unicode="&#59648;" d="M56.32252839 107.83183582000004L291.06546788 342.57477530999995V163.06546788000003h552.33632965v248.55134814l110.46726541 110.46726671V163.06546788000003a110.46726541 110.46726541 0 0 0-110.46726541-110.46726541H291.06546788v-179.50930743L56.32252839 107.83183582000004m911.35494322 552.33632836L732.93453212 425.42522469V604.93453212H180.59820247v-248.55134814l-110.46726541-110.46726671V604.93453212a110.46726541 110.46726541 0 0 0 110.46726541 110.46726541h552.33632965V894.91110496L967.67747161 660.16816418z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="vector-arrange-below" unicode="&#59661;" d="M923.11703665-124.20740779000005c53.88515555 0 97.09036999 43.20521443 97.09037114 97.09037114V506.88c0 53.88515555-43.20521443 97.09036999-97.09037114 97.09036999H389.12c-53.88515555 0-97.09036999-43.20521443-97.09036999-97.09036999v-533.99703665c0-53.88515555 43.20521443-97.09036999 97.09036999-97.09037114h533.99703665m0 97.09037114H389.12V506.88h533.99703665v-533.99703665M194.93925888 167.06370332999995v97.09037112H97.84888889V798.15111111h533.99703666v-97.09036999h97.09037112V798.15111111c0 53.88515555-43.20521443 97.09036999-97.09037112 97.09037H97.84888889c-53.88515555 0-97.09036999-43.20521443-97.09037-97.09037v-533.99703666c0-53.88515555 43.20521443-97.09036999 97.09037-97.09037112h97.09036999z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="view-array" unicode="&#59673;" d="M233.66983241-12.161917359999961h530.24287606V753.74445961H233.66983241m589.15875163 0v-765.90637697h176.74762535V753.74445961M-1.99366713-12.161917359999961h176.74762534V753.74445961H-1.99366713v-765.90637697z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="view-column" unicode="&#59674;" d="M726.3301676 753.74445961v-765.90637697h294.57937512V753.74445961M19.3396662-12.161917359999961h294.57937513V753.74445961H19.3396662m353.4952507-765.90637697h294.57937511V753.74445961h-294.57937511v-765.90637697z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="view-dashboard" unicode="&#59675;" d="M560.54518557 820.90666667v-291.27111112h388.3614811V820.90666667m-388.3614811-873.81333334h388.3614811V432.54518557h-388.3614811M75.09333333-52.90666667000005h388.3614811v291.27111112H75.09333333m0 97.09036998h388.3614811V820.90666667H75.09333333v-485.45185224z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="view-day" unicode="&#59676;" d="M47.8814811 820.90666667v-145.63555556h922.3585189V820.90666667m-48.54518557-242.72592555H96.42666666a48.54518557 48.54518557 0 0 1-48.54518556-48.54518557v-291.2711111a48.54518557 48.54518557 0 0 1 48.54518556-48.54518557h825.26814777a48.54518557 48.54518557 0 0 1 48.54518557 48.54518557V529.6355555499999a48.54518557 48.54518557 0 0 1-48.54518557 48.54518557M47.8814811-52.90666667000005h922.3585189v145.63555556H47.8814811v-145.63555556z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="view-list" unicode="&#59677;" d="M313.91904133 796.41112627v-235.66350093h706.99050139V796.41112627M313.91904133-28.411126269999954h706.99050139v235.66350093H313.91904133m0 58.91587557h706.99050139v235.66349954H313.91904133M19.3396662 560.74762534h235.66349954V796.41112627H19.3396662m0-824.82225254h235.66349954v235.66350093H19.3396662m0 58.91587557h235.66349954v235.66349954H19.3396662v-235.66349954z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="view-parallel" unicode="&#59678;" d="M953.86906293 881.1026963L953.86906293-113.10269630000005l-220.93453081 0 0 994.2053926L953.86906293 881.1026963m-331.40179752 0L622.46726541-113.10269630000005l-220.93453082 0 0 994.2053926 220.93453082 0m-331.40179753 0L291.06546788-113.10269630000005l-220.93453081 0 0 994.2053926 220.93453081 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="view-quilt" unicode="&#59679;" d="M372.8349169 775.07779294v-353.4952507h648.07462582V775.07779294m-294.57937512-765.90637697h294.57937512v353.4952507h-294.57937512M19.3396662 9.171415969999998h294.57937513V775.07779294H19.3396662m353.4952507-765.90637697h294.57937511v353.4952507h-294.57937511v-353.4952507z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="view-sequential" unicode="&#59680;" d="M45.96622222 798.25224651h932.06755556v-207.12612265H45.96622222V798.25224651m0-310.68918519h932.06755556v-207.12612264H45.96622222v207.12612264m0-310.68918518h932.06755556v-207.12612265H45.96622222v207.12612265z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="view-grid" unicode="&#59681;" d="M102.4 429.51111147h364.08888853V793.6H102.4m0-819.2h364.08888853v364.08888853H102.4m455.11111147-364.08888853h364.08888853v364.08888853h-364.08888853m0 455.11111147v-364.08888853h364.08888853V793.6"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="weather-cloudy" unicode="&#59693;" d="M238.93333333 86.7555552a227.5555552 227.5555552 0 0 0-227.5555552 227.55555626 227.5555552 227.5555552 0 0 0 227.5555552 227.5555552c45.51111147 106.95111147 150.18666667 182.0444448 273.06666667 182.0444448 156.10311147 0 283.98933333-121.0595552 295.82222187-274.432L830.57777813 450.8444448a182.0444448 182.0444448 0 0 0 182.04444374-182.0444448 182.0444448 182.0444448 0 0 0-182.04444374-182.0444448H238.93333333m591.6444448 273.06666666h-91.02222293v45.51111147a227.5555552 227.5555552 0 0 1-227.5555552 227.5555552c-113.77777813 0-207.0755552-82.83022187-224.82488853-190.6915552C272.1564448 447.65866666 255.7724448 450.8444448 238.93333333 450.8444448a136.53333333 136.53333333 0 0 1-136.53333333-136.53333334 136.53333333 136.53333333 0 0 1 136.53333333-136.53333333h591.6444448a91.02222187 91.02222187 0 0 1 91.02222187 91.02222187 91.02222187 91.02222187 0 0 1-91.02222187 91.02222186z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="weather-lightning" unicode="&#59696;" d="M238.93333333 180.62222186999998a227.5555552 227.5555552 0 0 0-227.5555552 227.55555627 227.5555552 227.5555552 0 0 0 227.5555552 227.5555552c45.51111147 106.95111147 150.18666667 182.0444448 273.06666667 182.0444448 156.10311147 0 283.98933333-121.0595552 295.82222187-274.432L830.57777813 544.71111147a182.0444448 182.0444448 0 0 0 182.04444374-182.0444448 182.0444448 182.0444448 0 0 0-182.04444374-182.0444448h-45.51111146a45.51111147 45.51111147 0 0 0-45.51111147 45.51111147 45.51111147 45.51111147 0 0 0 45.51111147 45.51111146h45.51111146a91.02222187 91.02222187 0 0 1 91.02222187 91.02222187 91.02222187 91.02222187 0 0 1-91.02222187 91.02222187h-91.02222293V499.2a227.5555552 227.5555552 0 0 1-227.5555552 227.5555552C398.22222187 726.7555552 304.9244448 643.92533334 287.17511147 536.0640000000001 272.1564448 541.52533334 255.7724448 544.71111147 238.93333333 544.71111147a136.53333333 136.53333333 0 0 1-136.53333333-136.53333333 136.53333333 136.53333333 0 0 1 136.53333333-136.53333334h45.51111147a45.51111147 45.51111147 0 0 0 45.5111104-45.51111146 45.51111147 45.51111147 0 0 0-45.5111104-45.51111147H238.93333333m273.06666667 227.55555627h136.53333333l-91.02222186-182.0444448h91.02222186l-170.66666666-318.57777814 34.13333333 227.55555627H398.22222187l113.77777813 273.06666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="weather-pouring" unicode="&#59697;" d="M375.46666667 384c24.12088853-6.3715552 38.6844448-31.40266667 32.31288853-55.5235552l-59.16444373-219.81866667c-6.3715552-24.576-31.40266667-38.6844448-55.52355627-32.3128896a44.0092448 44.0092448 0 0 0-31.40266667 55.52355627l58.25422294 219.81866667c6.3715552 24.576 31.40266667 38.6844448 55.5235552 32.31288853m182.0444448 0c24.12088853-6.3715552 38.6844448-31.40266667 32.31288853-55.5235552l-94.208-351.8008896c-6.3715552-25.03111147-31.40266667-38.6844448-55.97866667-32.31288853-24.12088853 7.28177813-38.6844448 31.40266667-32.31288853 55.97866666l94.6631104 351.34577814c6.3715552 24.576 31.40266667 38.6844448 55.52355627 32.31288853m182.04444373 0c24.12088853-6.3715552 38.6844448-31.40266667 32.3128896-55.5235552l-59.1644448-219.81866667c-6.3715552-24.576-31.40266667-38.6844448-55.5235552-32.3128896a44.0092448 44.0092448 0 0 0-31.40266667 55.52355627l58.25422187 219.81866667c6.3715552 24.576 31.40266667 38.6844448 55.5235552 32.31288853m0 91.02222187V520.53333333a227.5555552 227.5555552 0 0 1-227.5555552 227.5555552C398.22222187 748.08888853 304.9244448 665.25866667 287.17511147 557.39733333 272.1564448 562.85866667 255.7724448 566.0444448000001 238.93333333 566.0444448000001a136.53333333 136.53333333 0 0 1-136.53333333-136.53333333c0-50.51733333 27.30666667-94.66311147 68.26666667-118.3288896v0.45511146c22.7555552-12.74311147 29.12711147-41.41511147 16.83911146-62.35022186-12.74311147-21.39022187-39.59466667-29.12711147-62.35022293-16.384v-0.45511147A226.64533333 226.64533333 0 0 0 11.37777813 429.51111147a227.5555552 227.5555552 0 0 0 227.5555552 227.5555552c45.51111147 106.95111147 150.18666667 182.0444448 273.06666667 182.0444448 156.10311147 0 283.98933333-121.0595552 295.82222187-274.432L830.57777813 566.0444448000001a182.0444448 182.0444448 0 0 0 182.04444374-182.0444448c0-68.26666667-36.40888853-126.06577813-91.02222187-157.4684448-22.7555552-12.288-49.60711147-5.00622187-62.35022187 16.83911147-12.288 21.84533333-5.9164448 49.60711147 16.8391104 62.35022186v-0.4551104c27.30666667 15.47377813 45.51111147 45.056 45.51111147 78.73422187a91.02222187 91.02222187 0 0 1-91.02222187 91.02222187h-91.02222293z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="weather-rainy" unicode="&#59698;" d="M238.93333333 292.97777813000005a45.51111147 45.51111147 0 0 0 45.51111147-45.51111146 45.51111147 45.51111147 0 0 0-45.51111147-45.51111147 227.5555552 227.5555552 0 0 0-227.5555552 227.55555627 227.5555552 227.5555552 0 0 0 227.5555552 227.5555552c45.51111147 106.95111147 150.18666667 182.0444448 273.06666667 182.0444448 156.10311147 0 283.98933333-121.0595552 295.82222187-274.432L830.57777813 566.0444448000001a182.0444448 182.0444448 0 0 0 182.04444374-182.0444448 182.0444448 182.0444448 0 0 0-182.04444374-182.0444448h-45.51111146a45.51111147 45.51111147 0 0 0-45.51111147 45.51111147 45.51111147 45.51111147 0 0 0 45.51111147 45.51111146h45.51111146a91.02222187 91.02222187 0 0 1 91.02222187 91.02222187 91.02222187 91.02222187 0 0 1-91.02222187 91.02222187h-91.02222293V520.53333333a227.5555552 227.5555552 0 0 1-227.5555552 227.5555552C398.22222187 748.08888853 304.9244448 665.25866667 287.17511147 557.39733333 272.1564448 562.85866667 255.7724448 566.0444448000001 238.93333333 566.0444448000001a136.53333333 136.53333333 0 0 1-136.53333333-136.53333333 136.53333333 136.53333333 0 0 1 136.53333333-136.53333334m401.86311147-76.00355626c70.99733333-70.99733333 70.99733333-174.3075552 0-246.2151104-35.49866667-35.49866667-83.28533333-41.87022187-128.7964448-41.87022294s-93.29777813 6.3715552-128.7964448 41.87022294c-70.99733333 71.9075552-70.99733333 175.21777813 0 246.2151104L512 429.51111147l128.7964448-212.5368896m-64.62577813-46.42133334L512 281.6l-64.17066667-111.04711147c-35.95377813-36.864-35.95377813-91.47733333 0-127.88622186 18.6595552-19.56977813 41.41511147-22.7555552 64.17066667-22.7555552 22.7555552 0 45.51111147 3.18577813 64.17066667 22.7555552 35.95377813 36.40888853 35.95377813 91.02222187 0 127.88622186z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="web" unicode="&#59701;" d="M723.65700779 286.90963001c3.88361443 32.03982222 6.79632555 64.07964445 6.79632554 97.09036999 0 33.01072555-2.91271111 65.05054777-6.79632554 97.09036999h164.08272554c7.76723001-31.0689189 12.62174777-63.59419221 12.62174777-97.09036999s-4.8545189-66.02145223-12.62174777-97.09036999m-250.00770332-269.91123001c29.12711111 53.88515555 51.45789667 112.13937778 66.99235556 172.82085888h143.20829553a389.81783666 389.81783666 0 0 0-210.20065109-172.82085888M625.59573333 286.90963001H398.40426667c-4.8545189 32.03982222-7.76723001 64.07964445-7.76723001 97.09036999 0 33.01072555 2.91271111 65.536 7.76723001 97.09036999h227.19146666c4.36906667-31.55436999 7.76723001-64.07964445 7.76723001-97.09036999 0-33.01072555-3.39816334-65.05054777-7.76723001-97.09036999M512-2.4196744500000023c-40.29250333 58.25422222-72.81777778 122.8193189-92.72130333 192.23893333h185.44260666c-19.90352555-69.41961443-52.4288-133.98471111-92.72130333-192.23893333M317.81925888 578.18074112H176.0673189A384.62350222 384.62350222 0 0 0 385.7825189 751.0016C356.65540779 697.11644445 334.81007445 638.8622222199999 317.81925888 578.18074112m-141.75193998-388.36148224H317.81925888c16.99081443-60.6814811 38.83614777-118.93570333 67.96326002-172.82085888A388.74984334 388.74984334 0 0 0 176.0673189 189.81925888m-39.80705223 97.09037113C128.49303666 317.97854777 123.6385189 350.50382221999996 123.6385189 384s4.8545189 66.02145223 12.62174777 97.09036999h164.08272554c-3.88361443-32.03982222-6.79632555-64.07964445-6.79632554-97.09036999 0-33.01072555 2.91271111-65.05054777 6.79632554-97.09036999M512 770.90512555c40.29250333-58.25422222 72.81777778-123.30476999 92.72130333-192.72438443h-185.44260666c19.90352555 69.41961443 52.4288 134.47016334 92.72130333 192.72438443M847.9326811 578.18074112h-143.20829553a759.73214777 759.73214777 0 0 1-66.99235556 172.82085888c89.32314112-30.58346667 163.59727445-92.23585223 210.20065109-172.82085888M512 869.45185223C243.54512555 869.45185223 26.54814777 650.9985189 26.54814777 384a485.45185223 485.45185223 0 0 1 485.45185223-485.45185223 485.45185223 485.45185223 0 0 1 485.45185223 485.45185223A485.45185223 485.45185223 0 0 1 512 869.45185223z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="webhook" unicode="&#59702;" d="M432.25644206 42.86261688000002C356.65540741-64.32515201000001 209.07804445-91.25154726000005 102.40809127-16.68614280999998c-106.15213868 74.56540445-131.00727349 223.17839762-56.44186905 331.40179673a237.41831941 237.41831941 0 0 0 185.37788089 102.5274311l2.58907614-74.04758872c-47.12119349-3.62470756-92.68893984-27.96202667-122.20441242-70.42288238-51.78153127-74.56540445-35.7292563-175.02157392 35.21144058-225.24965927 71.45851259-49.71026963 171.39686756-30.55110281 223.17839761 43.49648593 16.05227498 23.30168889 25.37295053 48.67463941 28.99765809 74.56540444v52.29934699l288.94094223 2.07126042 3.62470635 5.69596921c27.44421095 47.63900799 86.99297185 64.20909868 133.59634963 37.28270222a98.38490905 98.38490905 0 0 0 35.21144179-134.63198106c-27.44421095-47.12119349-87.51078756-63.69128297-134.11416533-36.7648865-21.23042725 11.90975169-36.24707201 31.06891852-42.97867022 52.81716148l-210.75083142-1.03563022a256.83639349 256.83639349 0 0 0-40.38959408-100.45617068m376.9695455 369.72013037c131.00727349-16.05227498 224.21402905-133.59634963 208.16175408-262.53236148-16.05227498-129.45382756-135.14979555-221.10713719-266.15706905-205.05486222a239.69670637 239.69670637 0 0 0-177.61065127 114.43718401l64.20909868 37.28270222a166.73652978 166.73652978 0 0 1 120.13315201-75.08322015c90.61767941-10.87412148 170.87905185 50.74589984 181.75317333 137.22105719 10.87412148 86.47515614-53.33497719 165.70089836-142.91702518 176.57501984-27.96202667 3.10689185-54.88842311-0.51781571-79.22574222-9.32067555l-44.01430164-22.78387317-133.59634963 246.99790222h-11.3919372a98.69559823 98.69559823 0 0 0-95.79583169 100.97398518c1.55344592 53.85279169 48.1568237 95.79583169 102.52743111 93.72457005 54.37060741-3.10689185 97.34927762-47.12119349 95.7958317-100.97398517-1.03563022-22.78387317-9.83849127-43.49648592-23.8195034-59.5487597l98.38490783-181.75317333c32.10454873 10.35630577 67.31599053 13.98101333 103.56306254 9.83849006M317.81925925 553.4285120100001c-51.78153127 121.68659794 3.10689185 260.97891555 122.72222816 311.7248154 120.13315201 50.74589984 258.90765392-6.73159941 310.68918518-128.41819614 30.55110281-70.94069689 24.3373191-148.61299317-10.35630576-210.75083143l-64.20909868 37.28270222c21.74824297 41.94304 25.37295053 93.20675555 4.66033777 141.36357926-35.21144059 82.85044978-128.93601185 122.72222815-209.19738428 89.06423349-80.77918815-34.17581037-117.02626016-129.45382756-81.81481958-212.30427614 14.49882905-34.17581037 38.83614815-60.58439111 68.35162075-78.19011201l20.19479703-10.87412148-158.96929894-258.38983941c1.55344592-2.58907614 3.62470756-5.69596799 5.17815227-9.83849006 25.37295053-47.12119349 7.76722963-106.66995317-39.87177835-132.0429037-47.12119349-25.37295053-106.66995317-6.73159941-132.56071943 41.94304-25.37295053 48.1568237-7.76722963 107.70558461 39.87177959 133.07853391 20.19479703 10.87412148 42.46085571 13.46319762 63.69128296 8.80285985l119.61533629 195.21637217c-24.3373191 22.26605868-45.04993185 50.22808534-57.99531498 82.33263407z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xing-box" unicode="&#59717;" d="M114.31784297 881.1026963C59.08420961 881.1026963 14.8973037 836.91579039 14.8973037 781.68215703v-795.36431406c0-55.23363335 44.18690591-99.42053925 99.42053927-99.42053927h795.36431406c55.23363335 0 99.42053925 44.18690591 99.42053927 99.42053927V781.68215703c0 55.23363335-44.18690591 99.42053925-99.42053927 99.42053927m-172.88127146-110.46726542h112.67661114c6.62803595 0 12.15139967-2.20934575 14.36074543-7.18037271 3.31401797-4.97102697 3.31401797-11.04672615 0-17.12242664l-246.89433915-437.45037274 157.41585382-287.21489032c3.31401797-6.07569919 3.31401797-12.15139967 0-17.12242664-2.76168122-4.4186902-7.73270818-7.1803727-13.80840866-7.18037271h-112.1242744c-17.12242665 0-25.95980704 11.59906291-30.9308353 21.54111684l-158.52052606 290.52890959 247.9990114 439.65971849c6.07569919 11.04672615 13.2560719 21.54111683 29.82616178 21.54111684M240.80286278 618.19060402H351.82246496c17.12242665 0 25.95980704-11.04672615 31.48317076-21.54111684l76.77474891-133.66539253c-4.97102697-7.73270818-120.40931935-212.64948718-120.40931935-212.64948589-6.07569919-10.49439069-13.80840865-21.54111683-30.93083399-21.54111683H197.16829235c-6.62803595 0-11.59906291 2.76168122-14.36074414 7.73270817a22.81148996 22.81148996 0 0 0 0 17.12242663l118.19997359 209.33546792L225.8897819 593.88780468c-2.76168122 6.07569919-3.86635473 11.04672615-0.55233676 17.12242663 2.76168122 4.4186902 8.28504494 7.1803727 15.46541764 7.18037271z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xml" unicode="&#59718;" d="M555.20521443 820.90666667l95.14856335-19.41807446L468.79478557-52.90666667000005l-95.14856335 19.41807446L555.20521443 820.90666667m325.25274112-436.90666667L706.18074112 558.27721443V695.66008889L1017.84083001 384 706.18074112 72.82536333999997v137.38287332L880.45795555 384M6.15916999 384L317.81925888 695.66008889v-137.38287446L143.54204445 384 317.81925888 210.20823666v-137.38287332L6.15916999 384z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="h" unicode="&#58962;" d="M16 896v-1024M32 896v-1024M48 896v-1024M64 896v-1024M80 896v-1024M96 896v-1024M112 896v-1024M128 896v-1024M144 896v-1024M160 896v-1024M176 896v-1024M192 896v-1024M208 896v-1024M224 896v-1024M240 896v-1024M256 896v-1024M272 896v-1024M288 896v-1024M304 896v-1024M320 896v-1024M336 896v-1024M352 896v-1024M368 896v-1024M384 896v-1024M400 896v-1024M416 896v-1024M432 896v-1024M448 896v-1024M464 896v-1024M480 896v-1024M496 896v-1024M512 896v-1024M528 896v-1024M544 896v-1024M560 896v-1024M576 896v-1024M592 896v-1024M608 896v-1024M624 896v-1024M640 896v-1024M656 896v-1024M672 896v-1024M688 896v-1024M704 896v-1024M720 896v-1024M736 896v-1024M752 896v-1024M768 896v-1024M784 896v-1024M800 896v-1024M816 896v-1024M832 896v-1024M848 896v-1024M864 896v-1024M880 896v-1024M896 896v-1024M912 896v-1024M928 896v-1024M944 896v-1024M960 896v-1024M976 896v-1024M992 896v-1024M1008 896v-1024M0 880h1024M0 864h1024M0 848h1024M0 832h1024M0 816h1024M0 800h1024M0 784h1024M0 768h1024M0 752h1024M0 736h1024M0 720h1024M0 704h1024M0 688h1024M0 672h1024M0 656h1024M0 640h1024M0 624h1024M0 608h1024M0 592h1024M0 576h1024M0 560h1024M0 544h1024M0 528h1024M0 512h1024M0 496h1024M0 480h1024M0 464h1024M0 448h1024M0 432h1024M0 416h1024M0 400h1024M0 384h1024M0 368h1024M0 352h1024M0 336h1024M0 320h1024M0 304h1024M0 288h1024M0 272h1024M0 256h1024M0 240h1024M0 224h1024M0 208h1024M0 192h1024M0 176h1024M0 160h1024M0 144h1024M0 128h1024M0 112h1024M0 96h1024M0 80h1024M0 64h1024M0 48h1024M0 32h1024M0 16h1024M0 0h1024M0-16h1024M0-32h1024M0-48h1024M0-64h1024M0-80h1024M0-96h1024M0-112h1024M1024-42.667c0-47.147-38.187-85.333-85.333-85.333H85.334C38.187-128 0.001-89.813 0.001-42.667V810.666C0.001 857.813 38.188 895.999 85.334 895.999h853.333C985.814 895.999 1024 857.812 1024 810.666v-853.333zM206.507 578.901v-365.568h59.904V375.125h185.344v-161.792h59.904V578.901h-59.904v-152.576H266.411V578.901h-59.904z m388.096 0l-19.968-205.824h55.808c7.168 12.8 16.896 22.016 29.696 28.16 11.264 5.632 25.088 8.192 40.96 8.192 23.552 0 41.984-6.656 54.272-20.992 12.288-13.824 18.944-33.28 18.944-57.856 0-22.528-7.68-40.448-22.016-53.76-14.848-13.312-33.28-19.968-54.784-19.968-19.968 0-35.84 4.608-47.104 12.8-13.312 9.728-20.992 24.576-23.552 44.544h-58.88c2.56-33.792 16.896-60.928 43.52-80.896 23.552-17.92 52.224-27.136 85.504-27.136 36.352 0 67.584 10.752 94.208 32.256 28.672 24.064 43.008 54.784 43.008 92.672 0 39.424-11.264 70.656-32.768 93.184s-49.664 33.792-83.968 33.792c-16.384 0-31.232-2.56-44.544-7.68-14.848-5.12-27.648-13.312-38.912-24.576h-1.536l10.24 100.352h174.592v52.736h-222.72z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="activity" unicode="&#59102;" d="M861.52533333-20.24546608000003c0-2.13598815-0.89323141-3.37874489-0.11650844-3.49525333l-697.41954844-0.50486992C163.67858725-24.012572449999993 162.47466667-22.614471109999954 162.47466667-20.24546608000003v579.0469689h699.05066666v-579.0469689zM162.47466667 749.44815408c0 2.097152 0.77672297 3.33990875 0.11650844 3.53408947H317.81925925V733.52533333a38.83614815 38.83614815 0 1 1 77.6722963 0v19.41807408h233.0168889V733.52533333a38.83614815 38.83614815 0 1 1 77.6722963 0v19.41807408h154.140672a5.74774992 5.74774992 0 0 0 1.20392058-3.49525333V636.43496297H162.47466667V749.44815408zM861.33115259 830.6157037H706.18074075V850.03377778a38.83614815 38.83614815 0 0 1-77.6722963 0v-19.41807408h-233.0168889V850.03377778a38.83614815 38.83614815 0 0 1-77.6722963 0v-19.41807408H162.12514133C119.48305067 830.6157037 84.80237037 794.1873967500001 84.80237037 749.44815408V-20.284302219999972c0-44.77807882 34.71951645-81.16754963 77.36160711-81.16754963h699.67204504c42.64209067 0 77.36160711 36.38947082 77.36160711 81.16754963V749.44815408c0 44.77807882-34.91369718 81.20638578-77.86647704 81.20638577zM356.65540741 325.74577778h310.68918518a38.83614815 38.83614815 0 0 1 0 77.6722963h-310.68918518a38.83614815 38.83614815 0 0 1 0-77.6722963M356.65540741 131.56503702999998h310.68918518a38.83614815 38.83614815 0 0 1 0 77.6722963h-310.68918518a38.83614815 38.83614815 0 0 1 0-77.6722963"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="activity_fill" unicode="&#59103;" d="M861.33115259 830.6157037H706.18074075V850.03377778a38.83614815 38.83614815 0 0 1-77.6722963 0v-19.41807408h-233.0168889V850.03377778a38.83614815 38.83614815 0 0 1-77.6722963 0v-19.41807408H162.12514133C119.48305067 830.6157037 84.80237037 794.1873967500001 84.80237037 749.40931792V636.43496297h854.39525926V749.40931792c0 44.77807882-34.91369718 81.20638578-77.86647704 81.20638578M667.34459259 403.41807408a38.83614815 38.83614815 0 0 0 0-77.6722963h-310.68918518a38.83614815 38.83614815 0 0 0 0 77.6722963h310.68918518z m-349.52533334-233.0168889a38.83614815 38.83614815 0 0 0 38.83614816 38.83614815h310.68918518a38.83614815 38.83614815 0 0 0 0-77.6722963h-310.68918518a38.83614815 38.83614815 0 0 0-38.83614816 38.83614815z m582.54222223 388.36148149H84.80237037v-579.04696889c0-44.73924267 34.71951645-81.16754963 77.36160711-81.16754963h699.67204504c42.64209067 0 77.36160711 36.42830697 77.36160711 81.16754963V558.76266667h-38.83614815z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="computer_fill" unicode="&#59115;" d="M110.47358211 257.72276411999997H25.94403028v-104.54622039c0-48.95909222 37.86817874-88.77149484 84.48536493-88.77149484h359.28373542v-71.80372281h-126.77223428c-23.33068654 0-42.28686937-19.79573404-42.28686936-44.18690632 0-24.4353592 18.95618282-44.18690634 42.28686936-44.18690634h338.1182073c23.33068654 0 42.28686937 19.75154713 42.28686936 44.18690634 0 24.3911723-18.95618282 44.18690634-42.28686936 44.18690632h-126.77223428V64.40504888999999h359.28373542c46.61718619 0 84.48536491 39.81240261 84.48536493 88.77149484v104.54622039H110.47358211zM913.57060479 848.72263639H110.42939521C63.81220901 848.72263639 25.94403028 808.86604686 25.94403028 759.90695464v-413.81037784h972.11193944V759.90695464C998.05596972 808.86604686 960.18779099 848.72263639 913.57060479 848.72263639"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="computer" unicode="&#59116;" d="M110.47358211 153.22073064000006v104.50203348h803.09702268v-104.94390255l-803.09702268 0.44186907zM913.52641789 759.90695464v-413.81037784H110.51776901V760.3488237l803.05283578-0.44186906z m0 88.81568175H110.47358211C63.81220901 848.72263639 25.94403028 808.86604686 25.94403028 759.90695464v-606.686224c0-49.00327914 37.86817874-88.81568174 84.48536493-88.81568175h359.28373542v-71.80372281h-126.81642119c-23.28649965 0-42.24268246-19.79573404-42.24268245-44.18690632 0-24.4353592 18.95618282-44.18690634 42.28686936-44.18690634h338.1182073c23.33068654 0 42.28686937 19.75154713 42.28686936 44.18690634 0 24.3911723-18.95618282 44.18690634-42.28686936 44.18690632h-126.81642119V64.40504888999999h359.32792233c46.61718619 0 84.48536491 39.81240261 84.48536493 88.81568175V759.90695464C998.05596972 808.86604686 960.18779099 848.72263639 913.57060479 848.72263639z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="coordinates_fill" unicode="&#59117;" d="M346.29910124 508.23424885c0 91.38404567 74.3168531 165.70089876 165.70089876 165.70089877s165.70089876-74.3168531 165.70089876-165.70089877-74.3168531-165.70089876-165.70089876-165.70089877-165.70089876 74.3168531-165.70089876 165.70089877m166.11515101 372.82702222h-0.8285045c-205.34483879-0.20712613-372.41276997-167.39933298-372.41276997-372.82702222 0-104.22586533 82.89187461-252.44531927 164.04388977-372.82702222a2623.25235358 2623.25235358 0 0 1 150.82924312-201.40944245 74.97965669 74.97965669 0 0 1 57.99531456-28.29342847h0.12427567a74.44112877 74.44112877 0 0 1 57.62248755 28.08630234 2620.47686352 2620.47686352 0 0 1 150.994944 201.61656858c81.15201517 120.38170295 164.04388978 268.6011569 164.04388977 372.82702222 0 205.42768925-167.06793118 372.6198961-372.41276997 372.82702222"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="coordinates" unicode="&#59118;" d="M512-6.059915700000033C426.00123355 98.00024872999995 222.02342717 373.56084338000005 222.02342717 508.27567408c0 159.85994208 130.07520553 289.97657283 289.97657283 289.97657283s289.97657283-130.11663075 289.97657283-289.97657283c0-134.34200368-203.19072711-409.15694427-289.97657283-514.377015M512 881.1026963c-205.55196492 0-372.82702222-167.23363209-372.82702222-372.82702222 0-192.13019212 281.81580357-534.75822555 314.87313289-574.2778899a74.97965669 74.97965669 0 0 1 57.99531456-28.29342847h0.12427567a74.56540445 74.56540445 0 0 1 57.62248755 28.08630234C602.01701325-27.68388299000003 884.82702222 315.81408016 884.82702222 508.27567408c0 205.59339013-167.2750573 372.82702222-372.82702222 372.82702222M512 425.42522469c-45.69202284 0-82.85044939 37.15842655-82.85044939 82.85044939s37.15842655 82.85044939 82.85044939 82.85044939 82.85044939-37.15842655 82.85044939-82.85044939-37.15842655-82.85044939-82.85044939-82.85044939m0 248.55134814c-91.38404567 0-165.70089876-74.3168531-165.70089876-165.70089875s74.3168531-165.70089876 165.70089876-165.70089877 165.70089876 74.3168531 165.70089876 165.70089877-74.3168531 165.70089876-165.70089876 165.70089875"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="createtask_fill" unicode="&#59119;" d="M744.82080949 560.74762534h-309.30834437a44.18690634 44.18690634 0 1 0 0 88.37381269h309.30834437a44.18690634 44.18690634 0 1 0 0-88.37381269m0-220.93453168h-309.30834437a44.18690634 44.18690634 0 1 0 0 88.37381268h309.30834437a44.18690634 44.18690634 0 1 0 0-88.37381268m0-220.93453169h-309.30834437a44.18690634 44.18690634 0 1 0 0 88.37381269h309.30834437a44.18690634 44.18690634 0 1 0 0-88.37381269m-453.79952808 441.86906337a44.18690634 44.18690634 0 1 0 0 88.37381269 44.18690634 44.18690634 0 0 0 0-88.37381269m0-220.93453168a44.23109325 44.23109325 0 0 0 0 88.37381268 44.18690634 44.18690634 0 0 0 0-88.37381268m0-220.93453169a44.23109325 44.23109325 0 0 0 0 88.37381269 44.18690634 44.18690634 0 0 0 0-88.37381269M909.50540942 870.05596972H113.8759739A88.06450432 88.06450432 0 0 1 25.94403028 782.03565229v-796.07130458C25.94403028-62.55287544999999 65.44712455-102.05596972000001 114.00853462-102.05596972000001h796.07130458a88.06450432 88.06450432 0 0 1 87.93194361 88.02031743V782.03565229A88.37381268 88.37381268 0 0 1 909.50540942 870.05596972"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="createtask" unicode="&#59120;" d="M556.18690634-13.85890465l-441.86906337-0.22093455-0.08837382 133.00258807-0.0883738 220.9345317-0.04418692 88.37381268-0.13256072 220.93453168-0.04418691 132.56071902h795.54106171L909.68215703 781.99146538 910.03565229-13.682157029999985 556.18690634-13.85890465zM909.46122251 870.05596972H113.9201608A88.10869124 88.10869124 0 0 1 25.94403028 782.03565229v-796.11549149c0-48.51722316 39.50309427-87.93194362 88.02031743-87.93194361h796.07130458A88.10869124 88.10869124 0 0 1 998.05596972-14.124026100000037V782.03565229A88.37381268 88.37381268 0 0 1 909.46122251 870.05596972zM744.82080949 649.12143803h-309.30834437a44.18690634 44.18690634 0 0 1 0-88.37381269h309.30834437a44.18690634 44.18690634 0 0 1 0 88.37381269M744.82080949 428.18690634h-309.30834437a44.18690634 44.18690634 0 0 1 0-88.37381268h309.30834437a44.18690634 44.18690634 0 0 1 0 88.37381268M744.82080949 207.25237466h-309.30834437a44.18690634 44.18690634 0 0 1 0-88.37381269h309.30834437a44.18690634 44.18690634 0 0 1 0 88.37381269M291.0654683 649.12143803a44.18690634 44.18690634 0 1 1 0-88.37381269 44.18690634 44.18690634 0 0 1 0 88.37381269M291.0654683 428.18690634a44.18690634 44.18690634 0 1 1 0-88.37381268 44.18690634 44.18690634 0 0 1 0 88.37381268M291.0654683 207.25237466a44.18690634 44.18690634 0 1 1 0-88.37381269 44.18690634 44.18690634 0 0 1 0 88.37381269"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dynamic_fill" unicode="&#59125;" d="M859.57420525 417.05180594l-192.52235091-192.52235091a44.05434561 44.05434561 0 0 0-62.48028556 0l-141.30972648 141.30972646-185.31988518-183.46403511a44.09853252 44.09853252 0 0 0-62.48028555 0.35349525 44.18690634 44.18690634 0 0 0 0.30930834 62.48028557l216.56002796 214.39486955a44.18690634 44.18690634 0 0 0 62.34772483-0.17674763l141.13297885-141.17716576 161.28220814 161.28220815a44.14271943 44.14271943 0 1 0 62.48028556-62.48028557M910.03565229 870.05596972H113.96434771A88.10869124 88.10869124 0 0 1 25.94403028 782.03565229v-796.07130458C25.94403028-62.59706234999999 65.40293765-102.05596972000001 113.96434771-102.05596972000001h796.07130458A88.10869124 88.10869124 0 0 1 998.05596972-14.03565229000003V782.03565229A88.15287813 88.15287813 0 0 1 910.03565229 870.05596972"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dynamic" unicode="&#59126;" d="M114.31784297-14.03565229000003V781.68215703l795.36431406 0.39768217 0.35349526-795.80618315L114.31784297-13.991465380000022zM910.03565229 870.05596972H113.96434771A88.10869124 88.10869124 0 0 1 25.94403028 782.0798392v-796.11549149C25.94403028-62.55287544999999 65.44712455-102.05596972000001 113.96434771-102.05596972000001h796.07130458A88.15287813 88.15287813 0 0 1 998.05596972-14.03565229000003V782.0798392a88.10869124 88.10869124 0 0 1-88.02031743 87.93194361zM797.09391969 479.53209151l-161.28220814-161.23802124-141.08879192 141.13297885a44.18690634 44.18690634 0 0 1-62.34772486 0.17674763l-216.56002794-214.30649574a44.23109325 44.23109325 0 0 1 62.17097721-62.87796772l185.31988519 183.4198482 141.30972645-141.30972646a45.51251353 45.51251353 0 0 1 62.48028557 0l192.478164 192.52235091a44.14271943 44.14271943 0 1 1-62.48028556 62.48028557"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="flag_fill" unicode="&#59131;" d="M893.59812314 362.03016513l-153.50531261 211.69946825 153.50531261 211.78784208c16.79102442 23.19812583 20.06085547 49.13583986 8.83738125 71.1851061C891.21203019 878.70766092 868.23483889 891.38930305 839.42497597 891.38930305H202.78002944A88.32962577 88.32962577 0 0 1 114.31784297 803.32479871V-80.72263639000005a44.18690634 44.18690634 0 0 1 88.37381268 0v336.88097392h636.73332032c28.98661055 0 52.05217567 12.68164212 63.27564985 34.64253457 11.13510039 21.87251863 7.86526932 47.85441957-9.10250268 71.22929303"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="flag" unicode="&#59132;" d="M202.69165565 344.22284186V803.41317253l594.40226404-0.44186908-166.18695473-229.15329625 166.23114163-229.24167008L202.69165565 344.22284186z m690.90646749 17.85151017l-153.50531261 211.74365517 153.50531261 211.74365516c16.83521132 23.24231273 20.06085547 49.22421365 8.79319435 71.22929302-11.22347421 22.00507936-34.1564786 34.59834766-62.92215463 34.59834767H202.78002944A88.32962577 88.32962577 0 0 1 114.31784297 803.41317253V-80.72263639000005a44.18690634 44.18690634 0 0 1 88.37381268 0v336.92516083H839.46916286c28.94242365 0 52.00798876 12.5932683 63.18727607 34.55416075 11.17928731 21.91670555 7.90945623 47.94279339-9.05831579 71.31766684z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="headlines_fill" unicode="&#59136;" d="M843.40179753 384h-248.55134814v248.55134815h248.55134814v-248.55134815z m-414.25224692-41.42522469a41.42522469 41.42522469 0 0 0-41.42522469-41.4252247H222.02342717a41.42522469 41.42522469 0 0 0 0 82.85044939h165.70089875c11.06053499 0 20.9611637-4.47392427 28.37627891-11.51621246A41.13524812 41.13524812 0 0 0 429.14955061 342.57477530999995z m165.70089878-165.70089878a41.42522469 41.42522469 0 0 0-41.4252247-41.42522468H222.02342717a41.42522469 41.42522469 0 0 0 0 82.85044939h331.40179752c11.06053499 0 20.9611637-4.47392427 28.37627892-11.51621247A41.13524812 41.13524812 0 0 0 594.85044939 176.87387652999996z m331.27752184 621.37837038H97.83060354A82.85044939 82.85044939 0 0 1 14.8973037 715.6917741v-663.3835482c0-10.43915662 2.15411168-20.33978533 5.71668101-29.53618521 0.33140179-0.8285045 0.45567747-1.73985943 0.78707927-2.56836392 0.99420539-2.31981259 2.44408827-4.39107381 3.64541977-6.62803597 1.3256072-2.48551348 2.44408827-5.09530263 4.0182468-7.37368998 0.8285045-1.24275675 1.90556034-2.19553691 2.77549006-3.3554432 2.31981259-3.06546663 4.63962516-6.2137837 7.37368998-8.86499809 1.28418196-1.28418196 2.81691529-2.23696213 4.14252248-3.43829365 2.65121438-2.31981259 5.21957831-4.72247562 8.16076926-6.66946118 0.57995315-0.41425225 1.3256072-0.66280359 1.94698556-1.07705584 3.8525459-2.48551348 7.82936747-4.76390083 12.13759083-6.54518549 4.1839477-1.78128466 8.65787197-3.02404141 13.17322146-4.05967204 0.78707927-0.20712613 1.53273331-0.57995315 2.3612378-0.74565403 5.3852792-1.11848107 10.97768453-1.69843422 16.73579079-1.69843421h828.29736769A82.85044939 82.85044939 0 0 1 1009.1026963 52.308225900000025V715.65034889A82.85044939 82.85044939 0 0 1 926.12797123 798.2522469099999z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="headlines" unicode="&#59137;" d="M926.12797123 52.59820247000005L97.74775309 52.308225900000025 97.87202877 715.4017975300001 926.25224691 715.65034889l0.28997658-663.01072119-0.41425226-0.04142523m0 745.65404444H97.87202877A82.85044939 82.85044939 0 0 1 14.8973037 715.65034889v-663.34212299A82.85044939 82.85044939 0 0 1 97.87202877-30.252246910000054h828.25594246A82.89187461 82.89187461 0 0 1 1009.1026963 52.308225900000025V715.65034889A82.89187461 82.89187461 0 0 1 926.12797123 798.2522469099999M222.02342717 301.14955061h165.70089875a41.42522469 41.42522469 0 1 1 0 82.85044939H222.02342717a41.42522469 41.42522469 0 1 1 0-82.85044939M553.42522469 218.29910124000003H222.02342717a41.42522469 41.42522469 0 1 1 0-82.85044939h331.40179752a41.42522469 41.42522469 0 1 1 0 82.85044939M512 632.55134815v-331.40179754h331.40179753v331.40179754h-331.40179753z m248.55134815-248.55134815h-165.70089876v165.70089876h165.70089876v-165.70089876z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="homepage_fill" unicode="&#59139;" d="M667.34459259 27.22016652000002H251.68129897v0.11650846l104.97410844-0.03883616v144.27629036c0 0.9709037 0.27185303 1.86413511 0.27185304 2.79620268 1.55344592 84.46862222 70.37110045 152.78140682 155.07273955 152.78140681s153.51929363-68.35162075 155.07273955-152.78140681c0-0.93206755 0.27185303-1.82529897 0.27185304-2.79620268v-144.35396266z m292.35852326 519.04512L861.52533333 610.57794786V735.20314726a38.83614815 38.83614815 0 1 1-77.6722963 0v-73.78868148l-250.57082785 164.23807052A37.98175289 37.98175289 0 0 1 511.30094933 831.28377778a37.8264083 37.8264083 0 0 1-21.35988148-5.63124148L63.52016118 546.2264503700001a38.83614815 38.83614815 0 0 1 42.56441837-64.97287585L123.63851852 492.78791052V15.724666670000033c0-36.50597925 32.97188978-66.25446875 73.51682845-66.25446875h629.68930606C867.3895917-50.49096591 900.36148148-20.781312579999963 900.36148148 15.724666670000033V492.24420445l16.81605215-10.99062993a38.797312 38.797312 0 0 1 42.52558222 64.97287585z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="manage_fill" unicode="&#59148;" d="M387.8486016 829.61114201H139.0487021A82.85044939 82.85044939 0 0 1 56.32252839 746.8849683v-248.7998995a82.85044939 82.85044939 0 0 1 82.72617371-82.72617371h248.7998995A82.85044939 82.85044939 0 0 1 470.57477531 498.0850688V746.8849683a82.85044939 82.85044939 0 0 1-82.72617371 82.72617371M994.97669467 681.01886103l-175.93292925 175.89150404a82.85044939 82.85044939 0 0 1-116.98483454 0L677.70089876 832.5523329600001 526.12600162 681.01886103a82.14622057 82.14622057 0 0 1-24.15090599-58.32671636 82.14622057 82.14622057 0 0 1 24.15090599-58.65811816l24.35803212-24.35803211L677.70089876 412.37627891l24.35803212-24.35803212a82.72617371 82.72617371 0 0 1 116.98483454 0.04142523l151.57489714 151.61632238 24.35803211 24.31660688a82.76759893 82.76759893 0 0 1 0 116.98483454M387.8486016 332.50844571000005H139.0487021A82.85044939 82.85044939 0 0 1 56.32252839 249.78227200000003v-248.7998995a82.85044939 82.85044939 0 0 1 82.72617371-82.72617371h248.7998995A82.85044939 82.85044939 0 0 1 470.57477531 0.9823724999999968V249.78227200000003a82.85044939 82.85044939 0 0 1-82.72617371 82.72617371M884.9512979 332.50844571000005h-248.7998995A82.85044939 82.85044939 0 0 1 553.42522469 249.78227200000003v-248.7998995a82.85044939 82.85044939 0 0 1 82.72617371-82.72617371h248.7998995A82.85044939 82.85044939 0 0 1 967.67747161 0.9823724999999968V249.78227200000003a82.85044939 82.85044939 0 0 1-82.72617371 82.72617371"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shielding_fill" unicode="&#59186;" d="M780.02251852 426.66666666c-50.2539757 0-96.70200889-16.15583763-134.80027021-43.30230518l324.51485392-324.51485393A231.50227911 231.50227911 0 0 1 1013.03940742 193.64977777000001c0 128.46997808-104.50807467 233.01688889-233.0168889 233.01688889M547.00562964 193.64977777000001c0-128.50881422 104.50807467-233.01688889 233.01688888-233.01688889 50.2539757 0 96.70200889 16.15583763 134.80027023 43.30230519l-324.51485393 324.51485392A231.23042608 231.23042608 0 0 1 547.00562964 193.64977777000001M352.82488889 348.99437035999995H197.48029631a38.83614815 38.83614815 0 1 0 0 77.6722963h155.34459258a38.83614815 38.83614815 0 1 0 0-77.6722963m0-155.34459259H197.48029631a38.83614815 38.83614815 0 1 0 0 77.6722963h155.34459258a38.83614815 38.83614815 0 1 0 0-77.6722963M197.48029631 582.01125925h310.68918518a38.83614815 38.83614815 0 1 0 0-77.67229629H197.48029631a38.83614815 38.83614815 0 1 0 0 77.67229629m583.12476444-76.39070341c56.39008711 0 109.1295763-15.18493392 154.76205037-41.36049777V737.62770488A77.6722963 77.6722963 0 0 1 857.61714252 815.02814814H81.08836031A77.6722963 77.6722963 0 0 1 3.29955556 737.62770488v-621.92207644A77.6722963 77.6722963 0 0 1 81.08836031 38.30518517999997H510.38314193a309.83478992 309.83478992 0 0 0-41.74885926 155.34459259 312.00961422 312.00961422 0 0 0 311.97077808 311.97077807"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shielding" unicode="&#59202;" d="M470.07122016 73.31081482000002H119.65265542A38.7196397 38.7196397 0 0 0 80.97185186 111.95278222000002L81.08836031 694.68918518h738.1198317c21.24337303 0 38.44778667-17.51510282 38.44778666-38.99149273v-196.43323734a38.83614815 38.83614815 0 0 1 77.6722963 0V655.69769245A116.50844445 116.50844445 0 0 1 819.24702816 772.36148148H81.08836031A77.6722963 77.6722963 0 0 1 3.29955556 694.96103822v-583.008256A116.50844445 116.50844445 0 0 1 119.65265542-4.361481479999952h350.41856474a38.83614815 38.83614815 0 0 1 0 77.6722963M352.82488889 384H197.48029631a38.83614815 38.83614815 0 0 1 0-77.6722963h155.34459258a38.83614815 38.83614815 0 0 1 0 77.6722963M352.82488889 228.65540740999995H197.48029631a38.83614815 38.83614815 0 0 1 0-77.6722963h155.34459258a38.83614815 38.83614815 0 0 1 0 77.6722963M508.16948149 539.34459259H197.48029631a38.83614815 38.83614815 0 0 1 0-77.67229629h310.68918518a38.83614815 38.83614815 0 0 1 0 77.67229629M780.02251852-4.361481479999952c-85.67254282 0-155.34459259 69.67204978-155.34459259 155.34459259 0 28.73874963 8.34977185 55.30267497 22.020096 78.41018311l211.73467971-211.7346797A153.28627675 153.28627675 0 0 0 780.02251852-4.361481479999952m0 310.68918518c85.67254282 0 155.34459259-69.67204978 155.3445926-155.34459259 0-28.73874963-8.34977185-55.30267497-22.020096-78.41018311l-211.7346797 211.7346797A153.28627675 153.28627675 0 0 0 780.02251852 306.32770370000003m0 77.6722963c-128.50881422 0-233.01688889-104.50807467-233.01688888-233.01688889s104.50807467-233.01688889 233.01688888-233.01688889 233.01688889 104.50807467 233.0168889 233.01688889-104.50807467 233.01688889-233.0168889 233.01688889"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="stealth_fill" unicode="&#59203;" d="M684.90888786 516.5607190200001h-331.40179753a41.42522469 41.42522469 0 0 0 0 82.85044937h331.40179753a41.42522469 41.42522469 0 1 0 0-82.85044937m0-165.70089877h-331.40179753a41.42522469 41.42522469 0 0 0 0 82.85044938h331.40179753a41.42522469 41.42522469 0 1 0 0-82.85044938m0-165.70089877h-331.40179753a41.42522469 41.42522469 0 0 0 0 82.85044938h331.40179753a41.42522469 41.42522469 0 1 0 0-82.85044938M512 881.1026963C237.93071344 881.1026963 14.8973037 658.11071179 14.8973037 384c0-274.06928656 223.03340974-497.1026963 497.1026963-497.1026963 274.11071179 0 497.1026963 223.03340974 497.1026963 497.1026963 0 274.11071179-222.99198451 497.1026963-497.1026963 497.1026963"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="stealth" unicode="&#59204;" d="M512-30.252246910000054c-228.41868895 0-414.25224691 185.83355796-414.25224691 414.25224691S283.58131105 798.2522469099999 512 798.2522469099999s414.25224691-185.83355796 414.25224691-414.25224691-185.83355796-414.25224691-414.25224691-414.25224691m0 911.35494321C237.88928821 881.1026963 14.8973037 658.11071179 14.8973037 384s222.99198451-497.1026963 497.1026963-497.1026963 497.1026963 222.99198451 497.1026963 497.1026963S786.11071179 881.1026963 512 881.1026963M684.90888786 433.71026963h-331.40179753a41.42522469 41.42522469 0 0 1 0-82.85044938h331.40179753a41.42522469 41.42522469 0 0 1 0 82.85044938M684.90888786 268.00937086h-331.40179753a41.42522469 41.42522469 0 0 1 0-82.85044938h331.40179753a41.42522469 41.42522469 0 0 1 0 82.85044938M684.90888786 599.4111683900001h-331.40179753a41.42522469 41.42522469 0 0 1 0-82.85044937h331.40179753a41.42522469 41.42522469 0 0 1 0 82.85044937"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="task" unicode="&#59205;" d="M114.31784297-35.36898561999999L113.9201608 760.3488237H246.87856197v-43.74503726c0-48.95909222 39.54728117-88.81568174 88.19706506-88.81568174h353.84874594A88.5947472 88.5947472 0 0 1 777.12143803 716.60378644V760.3488237l132.560719 0.35349526L910.03565229-35.015490359999944 114.31784297-35.36898561999999zM688.74762534 804.09386098L688.92437297 716.16191737 335.25237466 716.60378644V804.09386098L335.07562703 804.53573004 688.74762534 804.09386098zM909.46122251 848.72263639H764.74910426c-15.28866958 26.29120927-43.39154203 44.18690634-75.82473129 44.18690633h-353.84874594c-32.43318926 0-60.49187478-17.85151015-75.82473129-44.18690633H113.9201608A88.06450432 88.06450432 0 0 1 25.94403028 760.70231896v-796.07130458C25.94403028-83.88620877999995 65.44712455-123.38930304999997 113.96434771-123.38930304999997h796.07130458A88.15287813 88.15287813 0 0 1 998.05596972-35.36898561999999V760.70231896A88.37381268 88.37381268 0 0 1 909.46122251 848.72263639zM659.8493886 477.15494098l-209.53430985-229.06492245-85.76678519 96.1065213a44.18690634 44.18690634 0 1 1-65.92686427-58.85695924l118.33253518-132.56071902a44.18690634 44.18690634 0 0 1 32.6983107-14.75842672h0.26512143c12.37233377 0 24.21442467 5.21405494 32.60993687 14.36074457l242.54192889 265.12143801a44.18690634 44.18690634 0 0 1-65.21987376 59.65232355"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="task_fill" unicode="&#59206;" d="M711.75243346 412.45978676l-227.34163311-248.55134816c-7.87079269-8.57502151-18.97275291-13.46319803-30.61324104-13.46319803h-0.20712613a41.50807515 41.50807515 0 0 0-30.65466627 13.83602505l-110.97817695 124.27567408a41.42522469 41.42522469 0 1 0 61.80643525 55.17839929l80.40636112-90.0998637 196.39699026 214.7483648a41.46664992 41.46664992 0 0 0 61.18505687-55.92405333m172.90888787 404.31019298H801.97657283c-0.08285045 0 0-26.59499425 0-41.83947694v-82.0219449a83.0575755 83.0575755 0 0 0-82.60189802-83.34755206h-414.66649916A83.0575755 83.0575755 0 0 0 222.02342717 692.8671326900001v82.02194488c0 15.32733314-0.1657009 27.79632577-0.16570091 41.83947694H138.84157598A82.60189804 82.60189804 0 0 1 56.32252839 734.25093215v-746.31684804c0-45.52632194 36.99272565-82.51904758 82.51904759-82.51904757H885.24127447A82.60189804 82.60189804 0 0 1 967.67747161-12.107341120000001V734.25093215c0 45.48489671-37.28270222 82.51904758-83.01615028 82.51904759M714.73504963 832.01446242a55.09554883 55.09554883 0 0 1-47.63900838 27.75490055H361.62643437c-20.42263577 0-38.11120672-11.18481067-47.72185885-27.71347532a55.84120288 55.84120288 0 0 1-7.78794224-28.12772756v-55.0126984c0-30.86179239 24.85513482-55.92405333 55.50980109-55.92405333h305.46960688c30.57181582 0 55.42695063 25.06226094 55.42695063 55.92405333V803.92816009c0 10.35630617-2.94119095 19.75983218-7.78794225 28.08630233"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tasklist_fill" unicode="&#59207;" d="M583.33423692 362.66666667000004c-14.37455297-24.64800869-40.7624211-41.42522469-71.33423692-41.42522469a82.43619714 82.43619714 0 0 0-71.2928117 41.42522469h142.62704862zM346.29910124 694.0684642h331.40179752V776.91891358h-331.40179752v-82.85044938z m579.87029522 0H760.55134815V804.59096368C760.55134815 831.26880838 738.8445304 859.76936297 677.90802489 859.76936297h-331.77462455C285.19689482 859.76936297 263.44865185 831.26880838 263.44865185 804.59096368V694.0684642H97.87202877A83.01615028 83.01615028 0 0 1 14.8973037 611.21801482v-167.68930956h994.2053926V611.21801482c0 45.69202284-37.19985177 82.85044939-82.93329984 82.85044938zM926.21082169 364.65507745c-3.23116752-0.8285045-6.33805938-1.98841078-9.81777826-1.98841078h-244.57452658c-18.51707543-71.25138647-82.80902416-124.27567408-159.81851685-124.27567408-76.96806747 0-141.26001619 53.02428761-159.81851685 124.27567408H14.8973037v-372.82702222c0-45.69202284 37.24127699-82.85044939 82.97472507-82.85044939h828.29736769A82.97472507 82.97472507 0 0 1 1009.1026963-10.160355549999963v372.82702222h-82.89187461v1.98841078z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tasklist" unicode="&#59219;" d="M926.83746366 692.69006057H760.9829485v110.70909681c0 42.7043243-37.39155476 55.24683505-82.78772642 55.24683505H345.90354342c-45.43660526 0-82.78772641-12.35757431-82.78772643-55.24683505v-110.70909681h-165.85451513c-46.17369852 0-83.07938201-37.04952222-83.07938201-82.97531407v-622.3364012c0-45.61425086 37.27555637-82.97796528 83.07938201-82.97796528h829.5761618c46.17369852 0 83.07938201 37.05217473 83.079382 82.97796528V609.7147465c-0.00066281 45.61358806-37.27555637 82.97531407-83.079382 82.97531407zM346.09378229 775.66802715h331.91120093v-82.97796658H346.09378229v82.97796658z m-248.83248043-165.95593188s829.67691571-0.16703946 829.67691571 0.00265123c0 0 0.02054821-72.49891747 0.03513117-167.96106291-3.26388957 0.82525262-6.4018374 2.00314263-9.92158857 2.00314262H97.15988513c-0.01789699 0-0.03049155-0.00994335-0.04838854-0.00994334 0.01590858 94.45593322 0.05634219 165.96521111 0.14980527 165.9652124zM583.51789436 360.77886092000006c-14.3733115-24.69725164-40.83308993-41.48865189-71.46884301-41.48865187-30.63575436 0-57.09553279 16.79140026-71.4688443 41.48865187h142.93768731z m343.3195693-373.40051562s-829.67691571 0.16969067-829.67691572 0c0 0-0.05567938 200.12137947-0.05302816 373.41045768 0.01789699 0 0.03579397-0.00994335 0.05302816-0.00994206h254.80081191C370.46954958 289.32526240000004 434.81006938 236.31224375 512.04971415 236.31224375S653.62921462 289.32526240000004 672.13806846 360.77886092000006h244.91501731c3.52240238 0 6.66764105 1.17722721 9.93418315 2.00579386 0.01988541-173.74777196 0.00463962-375.40630817-0.14980526-375.40630948z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="financial_fill" unicode="&#59220;" d="M474.72392581 842.26240563c-6.78048078 5.22289233-16.95451597 8.64958691-30.52873359 10.28671179-13.56758959 1.63049684-25.86259628-0.1657009-36.89827613-5.38859323-14.41597819-7.17816293-24.59001339-13.22293172-30.52873359-18.12105029-5.93872021-4.89811856-14.84017249-8.32481315-26.71761292-10.28008375-6.78710881-1.30572308-14.21050909-0.98757735-22.26357275 0.98094932a2371.23288562 2371.23288562 0 0 1-24.80873857 5.87906789 174.35711372 174.35711372 0 0 1-24.17244711 3.91716925c-7.63549742 0.64954753-14.42260622-0.65617556-20.36132644-3.91716925-11.87081238-7.18479098-15.6885611-15.84100592-11.45324612-25.96201682 4.24857105-10.12101089 11.87744042-18.11442225 22.90649225-23.99349016a401.68549074 401.68549074 0 0 0 31.17165306-20.08294892 160.44486625 160.44486625 0 0 0 28.62648728-25.96201681c4.24194301-5.22289233 9.32564658-11.10196021 15.26436678-17.63057563a337.4995906 337.4995906 0 0 0 16.53694971-19.58584624 667.3636838 667.3636838 0 0 0 17.8095326-22.53532222h263.37163653a215.54372912 215.54372912 0 0 1 16.53694971 20.57342357 254.37739175 254.37739175 0 0 0 13.99841191 17.63720367 606.45866144 606.45866144 0 0 0 13.99178389 15.66867699 645.88884732 645.88884732 0 0 0 25.44503002 25.96201682c8.48388603 8.15911225 20.78552075 16.16577968 36.89827615 23.99349015a54.04500514 54.04500514 0 0 1 17.17986918 12.73908509c4.66613731 5.22289233 7.63549742 10.4524127 8.90808031 15.66867698 1.26595487 5.22952036 0.41756626 10.2867118-2.55179384 15.18483037s-8.68935513 8.65621494-17.17324114 11.26766112c-7.63549742 1.96189865-14.21050909 2.61144615-19.71177893 1.96189864-5.52115394-0.65617556-11.02242378-1.79619774-16.54357773-3.42669459-5.51452591-1.63712489-11.24114897-3.42669459-17.1666131-5.38859323-5.94534825-1.96189865-13.15665136-2.93621994-21.63390936-2.93621992-8.48388603 0-15.47646395 1.14002218-20.99098985 3.42669459a79.72201642 79.72201642 0 0 0-15.26436679 8.33144118c-4.67276534 3.26099369-9.54437177 6.69431632-14.63470338 10.2867118s-11.87744042 6.36291451-20.36132643 8.32481315c-16.95451597 5.22289233-30.53536163 6.19721362-40.70939682 2.93621992-10.18729125-3.26099369-20.36132644-8.49051406-30.53536162-15.66867698-8.48388603-6.52861541-15.26436679-11.10858826-20.35469841-13.72003442-2.55179383-1.29909504-4.66613731-1.9552706-6.36291451-1.9552706a84.53397051 84.53397051 0 0 0-13.99841193 6.85338918M295.05775531 536.18633347a1509.8201933 1509.8201933 0 0 0-56.80889614-46.52218434 463.79018762 463.79018762 0 0 1-67.07572382-63.09890226 350.15913927 350.15913927 0 0 1-51.36727861-77.54139259c-13.7001503-28.16252475-23.16498565-58.29357619-28.40113405-90.37327018-5.22952036-32.08632204-4.22868694-65.5976718 3.02901242-100.53404929 6.44907898-31.37712219 19.73829106-62.91994527 39.88752035-94.65498142 20.13597322-31.7284081 47.33080473-60.42780377 81.57786649-86.08493093 34.24043372-25.66375521 75.93740788-46.52218434 125.08429444-62.56203133 49.15351461-16.03984701 105.55810054-24.07302657 169.2071298-24.07302658 62.04504453 0 117.442169 6.95280971 166.18474538 20.86505718 48.74257637 13.90561942 90.85048878 32.61656491 126.29722504 56.14609253 35.4533643 23.52289959 69.09064675 49.91573874 90.43955056 81.63751881 21.35553183 31.72178005 37.48817134 69.91915124 44.73924266 105.57798466 8.05306368 43.49979995 6.04476879 78.15117189 0 113.45209137-6.05139682 35.2876634-20.76563663 67.9373685-36.06977164 95.03277945-15.31739107 27.09541098-33.2396003 50.80389556-53.78651175 71.13208183-20.55353948 20.31493019-40.49067162 37.95876189-59.83128052 52.9314951-23.36382672 17.11358883-39.72181946 27.14843525-57.43855955 42.48571043-17.72336813 15.33064716-30.99932414 20.95784967-43.08223368 33.09378351-14.50214266 13.54770548-33.41192923 23.25115011-43.08223367 34.66462803H372.63228806m280.83651127-440.13472731c17.75650831 0 32.15923043-13.77968674 32.15923043-30.78722699 0-17.00091221-14.39609409-30.78722699-32.15923043-30.78722698h-105.66414912v-26.3795831c0-17.00091221-14.40272212-30.78722699-32.15923044-30.78722698-17.75650831 0-32.15923043 13.77968674-32.15923043 30.78722698v26.3795831H377.82204021c-17.75650831 0-32.15923043 13.77968674-32.15923043 30.78722698 0 17.00091221 14.39609409 30.78722699 32.15923043 30.78722699h105.66414913v70.36985768H377.82204021c-17.75650831 0-32.15923043 13.77968674-32.15923043 30.787227 0 17.00091221 14.39609409 30.78722699 32.15923043 30.78722699H470.17709315l-0.24523733 0.22535321-91.88446238 87.95403708c-12.56012813 12.02325722-12.56012813 31.51631094 0 43.53956815s32.92145457 12.02325722 45.4815827 0l91.88446238-87.96729313 0.23198125-0.21872519 0.23198126 0.21872519 91.88446238 87.9606651c12.5535001 12.02325722 32.91482653 12.02325722 45.47495466 0a29.86592999 29.86592999 0 0 0 0-43.53956816l-91.88446238-87.95403707-0.24523732-0.22535321h92.35505293c17.75650831 0 32.15923043-13.77968674 32.15923043-30.787227s-14.39609409-30.78722699-32.15923043-30.78722699h-105.66414913v-70.36322965h105.67077716z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="marketing_fill" unicode="&#59221;" d="M817.60371414 603.28724382l175.70834932 171.3250082a57.30865004 57.30865004 0 1 1-79.34554398 82.71081875l-175.70127942-171.32500819a57.30865004 57.30865004 0 0 1 79.33847408-82.71081876zM3.05167786 305.89168941c-1.13825471-19.45637859 6.16495717-38.46735318 19.47051841-52.71321179l325.61154531-348.5675269c64.69670078-64.69670078 122.26693731 0 122.26693732 0l440.58941056 440.58234066a115.61415669 115.61415669 0 0 1 33.87191493 81.74931168v191.09953252c0.16967772 0.14846801 0.02120972 0 0.16967771 0.148468l-74.23400263-74.23400263c-47.02900815-47.03607807-141.39810029-55.08869986-196.18986415 1.47054023-53.90802574 57.44297824-43.49405564 141.49707894 3.5349525 188.53315701L757.67919923 808.19430083c-6.1861669 0 0.79182937 0.14139811-6.26393584 0.14139811h-216.63602944c-30.14607498 0-59.10440592-11.77139185-80.68882591-32.81849908l-428.9099275-420.68055805c-15.68104932-16.98191185-21.26627429-34.13350141-22.12880268-48.9449524z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="qiehuan3" unicode="&#58966;" d="M511.37862163 898.65663525c-282.10578015 0-510.77302045-228.6672403-510.77302045-510.77302043s228.6672403-510.77302045 510.77302045-510.77302045 510.77302045 228.6672403 510.77302045 510.77302045-228.6672403 510.77302045-510.77302045 510.77302043z m266.57132089-632.56318103H338.63543467l160.31561955-160.31561955-46.60337777-46.60337778-206.29761897 206.29761896 0.62137837 0.62137837h-0.62137837v66.48748563h532.52126341v-66.48748563z m0 244.82307793v-66.48748563H245.42867911V510.91653215h439.31450786L524.42756741 670.61077333l46.60337777 46.60337778 206.91899734-206.29761896z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shouquan1" unicode="&#58988;" d="M517.24121135 864.14608965l-0.00397424 3.90524267-5.23789992-1.95262198-5.23789861 1.95262198-0.00397423-3.90524267-412.66143673-153.80136834 9.59619213-437.98854984 0.44510239-2.58185819c0.43185538-2.508999 11.22425913-62.28914397 66.85938965-136.77753245 31.82480977-42.61191498 72.16352461-82.00743829 119.8927908-117.0936806 59.20919534-43.52331523 137.09811189-83.76400245 219.31750365-113.31296216l1.79233095-0.64248323 1.79233225 0.64248323c82.21939175 29.54763539 160.10830831 69.78964563 219.31882797 113.31296216 47.7292662 35.0849193 88.06665673 74.48176561 119.8927908 117.0936806 55.63513052 74.48838978 66.42753427 134.26853345 66.86071525 136.77753245l0.44377679 2.5831838 9.59751773 437.98722423-412.66408663 153.80136834z m-5.24187416-73.31867088l346.9863373-128.72065247-8.43574731-382.34547087c-2.30499399-9.6293103-14.5625264-53.81630425-55.99677532-108.179714-27.87717745-36.57786626-63.30652029-70.61229105-105.30377038-101.15875594-53.7752389-39.11203497-106.8748751-66.97861404-177.25004429-92.98265284-70.37516788 26.00536314-123.47347979 53.87061789-177.24871867 92.98265284-41.9999 30.54779049-77.42924285 64.58221527-105.30509469 101.15875594-41.43292461 54.36208417-53.68913268 98.55040371-55.9941267 108.179714l-8.43574732 382.34547087 346.98368738 128.72065247zM459.31433513 331.54549566000003l-97.88805062 97.88937491-49.17584798-49.17452367 97.88937364-97.88937492 49.17452496-49.17452368 49.17452366 49.17452368 203.25805605 203.25805604-49.17452496 49.17452368z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="supply" unicode="&#59232;" d="M973.66479741 632.15366599s-8.48388603 10.60485751-11.31184802 12.72582903c-20.50272455 16.26078154-33.93554407 23.33068654-60.80118311 38.17748707l-9.89786703 5.65592401L752.37677046 765.77487075l-144.93305277 80.59691716c-27.57262956 14.84680053-60.09419262 24.03767705-95.44371769 24.03767706s-67.87108813-8.48388603-96.8576987-24.03767706L268.08827701 765.77487075 134.46707225 692.9548491099999 94.87560417 671.03814356c-19.79573404-10.60485751-35.34952507-26.15864854-46.6613731-44.54040159-13.43281952-19.79573404-21.91670555-43.12642059-21.91670553-68.57807863v-339.35544067c0-47.36836359 27.57262956-89.08080318 67.87108813-111.70449921l41.00544908-21.91670555L443.42192138-82.61373092999997c19.79573404-10.60485751 43.12642059-16.96777203 68.57807862-16.96777202s48.78234459 6.36291451 69.28506914 17.67476252l309.66183961 168.26373935 38.17748708 20.50272454c41.00544908 22.62369604 68.57807862 64.33613563 68.57807863 112.41148971v339.35544068c0 27.57262956-9.19087652 53.02428761-24.03767705 73.52701214z m-762.1357605 7.06990501l190.18044487 100.39265121 46.6613731 24.74466753c19.79573404 10.60485751 36.05651557 17.67476253 61.50817362 17.67476255s55.8522496-14.84680053 76.35497415-26.15864855l32.52156306-16.26078153 188.76646388-103.22061322c9.89786702-7.06990501 9.89786702-7.06990501 8.483886-11.31184801l-304.00591559-156.95189131-311.78281111 159.77985332c-2.1209715 3.5349525 7.06990501 9.89786702 11.31184802 11.31184801z m231.18589395-620.03066972l-289.15911507 160.48684382-0.7069905 0.70699049c-25.45165805 15.55379103-41.00544908 28.98661055-41.00544909 60.09419263V559.33364434c0 1.41398101-1.41398101 9.19087652 0.70699052 15.55379104 0.7069905 0.7069905 1.41398101 1.41398101 2.82796199 0.7069905l35.34952508-18.38175303 91.90876518-48.7823446-0.7069905-125.13731875c0-8.48388603 4.9489335-16.26078154 12.01883853-20.50272454l55.85224961-29.69360107c9.19087652-4.9489335 19.79573404 1.41398101 19.79573404 12.01883853V464.59691715l135.74217625-69.99205964-0.70699049-386.72380425c-15.55379103 5.65592402-14.84680053 7.06990501-21.91670555 11.31184802zM907.91468079 577.0084068799999c7.77689552-2.82796201 4.9489335-6.36291451 4.9489335-17.67476254v-319.55970662c0-32.52156306-13.43281952-45.9543826-38.17748707-60.80118313l-7.77689553-4.24194301-287.74513406-156.9518913c-7.06990501-4.24194301-4.9489335-4.24194301-19.79573404-11.31184803 0 98.27167969-0.7069905 296.93601058-0.70699049 386.72380427M107.60143321 579.83636889l419.95235782-217.75307444M57.40510759 644.17250452l-15.55379102-25.45165805c1.41398101 2.82796201 4.24194301 4.9489335 5.65592402 7.7768955l2.1209715 4.24194301 7.7768955 13.43281954z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="kaiguanguan" unicode="&#58967;" d="M154.12499999 383.9451752a421.8201752 421.8201752 0 0 1 421.8201752-421.8201752h553.94736877a421.8201752 421.8201752 0 0 1 0 843.53070163H575.94517519A421.8201752 421.8201752 0 0 1 154.12499999 383.9451752z m38.48684216 0.87719348a382.78508752 382.78508752 0 1 0 382.78508753-382.56578997A382.78508752 382.78508752 0 0 0 192.61184215 385.04166705z"  horiz-adv-x="1696" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhuzhuangtu1" unicode="&#59169;" d="M298.666667 512a42.666667 42.666667 0 0 0 42.666666-42.666667v-341.333333a42.666667 42.666667 0 0 0-85.333333 0v341.333333a42.666667 42.666667 0 0 0 42.666667 42.666667zM512 682.666667a42.666667 42.666667 0 0 0 42.666667-42.666667v-512a42.666667 42.666667 0 0 0-85.333334 0V640a42.666667 42.666667 0 0 0 42.666667 42.666667zM725.333333 341.333333a42.666667 42.666667 0 0 0 42.666667-42.666666v-170.666667a42.666667 42.666667 0 0 0-85.333333 0v170.666667a42.666667 42.666667 0 0 0 42.666666 42.666666zM85.333333 853.333333a42.666667 42.666667 0 0 0 42.666667-42.666666v-853.333334a42.666667 42.666667 0 0 0-85.333333 0V810.666667a42.666667 42.666667 0 0 0 42.666666 42.666666zM981.333333-42.666667a42.666667 42.666667 0 0 0-42.666666-42.666666H85.333333a42.666667 42.666667 0 0 0 0 85.333333h853.333334a42.666667 42.666667 0 0 0 42.666666-42.666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="kaiguanguan1" unicode="&#58968;" d="M1552.076059 384.16451642A421.92983881 421.92983881 0 0 1 1130.1462202 805.875H576.0548388a421.92983881 421.92983881 0 0 1 0-843.75h554.0913814a421.92983881 421.92983881 0 0 1 421.9298388 422.03951642z m-38.49684768-0.8774209A382.88460306 382.88460306 0 1 0 1130.69460909 765.95234335a382.88460306 382.88460306 0 0 0 382.88460223-382.88460306z"  horiz-adv-x="1696" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shouquan2" unicode="&#58969;" d="M514.56 833.536l-395.776-112.128v-503.808c0-216.576 392.192-280.064 392.192-280.064s392.192 63.488 392.192 280.064V721.408l-388.608 112.128z m-4.096-567.808l-44.544-48.128-44.544 48.128-134.144 143.872 44.544 48.128 134.144-143.872 223.744 240.128 44.544-48.128-223.744-240.128z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhtn" unicode="&#59237;" d="M221.14156924 318.33459727h31.27827568a49.99598349 49.99598349 0 0 0 35.03119922-14.3197506l40.09764727-39.38224569a24.99212813 24.99212813 0 0 1 39.87481728 6.76699102l65.67616933 132.91214765a19.99604795 19.99604795 0 0 0 36.35645099-1.09069366l75.12884648-178.38116718a49.99598349 49.99598349 0 0 1 89.60105918-5.18372579l48.5886375 85.98886964a24.99212813 24.99212813 0 0 0 21.76695879 12.70130185h106.72377539a33.64144453 33.64144453 0 1 1 0 67.28288994H677.1335583a24.99212813 24.99212813 0 0 1-21.84905478-12.90067558l-40.96551006-73.70977236a19.99604795 19.99604795 0 0 0-36.06325401 2.34557753l-81.2508038 204.90964805a49.99598349 49.99598349 0 0 1-92.35711231 1.407346l-60.51589893-140.00751914a19.99604795 19.99604795 0 0 0-32.26341797-6.43860968l-10.67237753 10.32054083a49.99598349 49.99598349 0 0 1-34.7614585 14.07346435h-46.23133184a33.17819326 33.17819326 0 0 1-33.16646601-33.20164863v-0.45738809a34.10469667 34.10469667 0 0 1 34.10469668-33.63558046z m-105.55098662 320.51143388L465.58592597 822.55165898a99.99196787 99.99196787 0 0 0 93.09597012-0.09382324l349.88979112-184.55003613a99.99196787 99.99196787 0 0 0 53.35015957-88.43999854v-328.81477763a99.99196787 99.99196787 0 0 0-52.91622774-88.21716943L559.20965029-54.22520067999994a99.99196787 99.99196787 0 0 0-94.11629589 0L114.9807333 132.44758213A99.99196787 99.99196787 0 0 0 62.04104932 220.67647881000005V550.31220937a99.99196787 99.99196787 0 0 0 53.52607792 88.53382178z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shouji" unicode="&#59099;" d="M512 24.384000000000015m-55.296 0a55.296 55.296 0 1 1 110.592 0 55.296 55.296 0 1 1-110.592 0ZM826.304 871.616A83.008 83.008 0 0 1 767.36 896H256.64c-46.016 0-83.456-37.376-83.456-83.392v-857.216c0-45.952 37.44-83.392 83.456-83.392h510.72c45.952 0 83.456 37.44 83.456 83.456V812.608c0 22.4-8.768 43.328-24.512 59.008zM236.032 108.54399999999998h551.808v-153.152a20.544 20.544 0 0 0-20.544-20.544H256.64a20.48 20.48 0 0 0-20.544 20.48v153.216zM256.64 833.216h510.72a20.48 20.48 0 0 0 20.48-20.544v-636.736H236.032V812.608c0 11.392 9.216 20.608 20.608 20.608z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shezhi1" unicode="&#59004;" d="M1013.58005475 451.32012619c-3.97257501 22.01449131-25.22095957 44.37128419-47.16209948 49.35795941l-16.48408917 3.75019406c-38.62432427 11.69767197-72.90349909 37.26559118-94.69444551 74.92704483-21.81656121 37.80815303-26.97438777 80.84864797-17.44696093 120.23674994l5.15782656 15.4990956c6.53984541 21.37180046-1.9990949 50.93674439-19.2516187 65.59754696 0 0-15.44786717 13.07852686-59.0064731 38.25058589-43.60867157 24.97529287-62.43765134 31.88771271-62.43765021 31.8877127-21.22509881 7.69715427-50.93674439 0.39469625-66.41371932-16.0428214l-11.45084132-12.28913436c-29.36817891-27.74049337-68.78189454-44.62160782-112.38707314-44.62160782-43.56093497 0-83.49159765 17.07787947-112.76081152 45.01630406l-11.10388166 11.89560207c-15.25110101 16.43635371-45.16300459 23.73997568-66.36248975 16.0428214 0 0-19.02690987-6.91125589-62.6355803-31.88771271-43.60867157-25.36998912-58.83415779-38.44851598-58.83415779-38.44851484-17.27580957-14.4628736-25.76701326-43.83105138-19.22600392-65.399618l4.73868061-15.64812515c9.33066069-39.43583744 4.36959915-82.27840227-17.42251122-120.0877204-21.79211037-37.85938261-56.51488199-63.6229029-95.33597127-75.12497379l-15.8204416-3.55342904c-21.81423218-4.98551125-43.23726109-27.19676757-47.20983609-49.35795941 0 0-3.53014215-19.79301547-3.53014215-70.13829859s3.53014215-70.13829859 3.53014215-70.13829859c3.97257501-22.21125632 25.19534478-44.42251378 47.20983609-49.35796053l15.47348082-3.60349242c38.82225437-11.45084131 73.66844075-37.21785571 95.4861659-75.2705115 21.81423218-37.85938261 26.94993806-80.85097699 17.42251122-120.28681443l-4.54075051-15.25110101c-6.53984541-21.42302891 1.95135829-50.93674439 19.22600391-65.59754696 0 0 15.42341632-13.08085475 59.0320879-38.25291378 43.63312128-25.17322297 62.43765134-31.88538482 62.43765134-31.88538481 21.2006491-7.74838386 50.91462258-0.39469625 66.3624886 16.0428214l10.90711666 11.69534407c29.46597888 27.93725952 69.17542571 44.96507449 112.95874162 44.96507449 43.77982293 0 83.61268451-17.22458112 112.93079893-45.16300459L635.84315392-72.61963416000003c15.27671581-16.43402467 45.18745543-23.79004131 66.41371819-16.09055687 0 0 19.02690987 6.96015531 62.63558144 31.93544818 43.55744199 25.17322297 58.80970695 38.25291378 58.80970695 38.25291491 17.25252381 14.46054457 25.79262805 43.97775303 19.2516187 65.59754696l-4.7887451 15.84256341c-9.27943111 39.24140032-4.34398435 82.03390066 17.49819051 119.69535203 21.79211037 37.85705358 56.63829675 63.8185051 95.48267292 75.27051151l15.44786602 3.60116451c21.76882461 4.93777579 43.21397533 27.14903211 47.16442852 49.36028843 0 0 3.60116451 19.79301547 3.60116452 70.13829859-0.22587278 50.54321209-3.77930183 70.33622869-3.77930184 70.33622869M512.00291043 179.65166781999994c-111.18202766 0-201.53248768 90.12808021-201.53248768 201.53015978 0 111.15408384 90.17814471 201.33222855 201.53248768 201.33222856 111.15408384 0 201.55228046-90.17814471 201.5522816-201.53015866-0.17231531-111.20414947-90.39819662-201.33222855-201.5522816-201.33222968m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daoru1" unicode="&#59019;" d="M928.802345 620.542986c4.253085-4.253085 8.50617-17.012341 8.50617-25.518511 0-25.518511-17.012341-42.530851-42.530852-42.530851h-212.654257c-46.783937 0-85.061703 38.277766-85.061703 85.061703V807.678733h42.530851c21.265426 0 34.024681 12.759255 42.530852 29.771596V807.678733c0-25.518511-17.012341-42.530851-42.530852-42.530852s-42.530851 17.012341-42.530851 42.530852H214.28404c-25.518511 0-42.530851-17.012341-42.530852-42.530852v-765.555327c0-21.265426 17.012341-42.530851 42.530852-42.530851h595.43192c21.265426 0 42.530851 17.012341 42.530852 42.530851v421.05543c0 25.518511 17.012341 42.530851 42.530851 42.530852s42.530851-17.012341 42.530852-42.530852V-0.407446c0-72.302448-55.290107-127.592554-127.592555-127.592554H214.28404c-72.302448 0-127.592554 55.290107-127.592555 127.592554V765.147881c0 72.302448 55.290107 127.592554 127.592555 127.592555h408.296174c21.265426 8.50617 46.783937 0 55.290107-21.265426 4.253085-8.50617 4.253085-12.759255 4.253085-21.265426v-212.654257h123.339469l-34.024681 42.530851c-17.012341 17.012341-12.759255 46.783937 4.253085 59.543192 17.012341 17.012341 46.783937 12.759255 59.543192-4.253085L916.043089 637.555327c8.50617-8.50617 8.50617-12.759255 12.759256-17.012341zM469.469149 467.431921c0 25.518511 17.012341 42.530851 42.530851 42.530851s42.530851-17.012341 42.530851-42.530851v-297.715961c0-25.518511-17.012341-42.530851-42.530851-42.530851s-42.530851 17.012341-42.530851 42.530851v297.715961z m-170.123406-165.870321c17.012341 17.012341 42.530851 17.012341 59.543192 0l178.629576-178.629576c17.012341-17.012341 17.012341-42.530851 0-59.543192-17.012341-17.012341-42.530851-17.012341-59.543192 0L299.345743 237.765323c-12.759255 17.012341-12.759255 46.783937 0 63.796277z m421.055429 0c17.012341-17.012341 17.012341-42.530851 0-59.543192l-178.629576-178.629576c-17.012341-17.012341-42.530851-17.012341-59.543192 0-17.012341 17.012341-17.012341 42.530851 0 59.543192l178.629576 178.629576c17.012341 12.759255 46.783937 12.759255 59.543192 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="lajitong" unicode="&#59056;" d="M167.563636-13.963636c0-62.836364 51.2-114.036364 114.036364-114.036364h454.981818c62.836364 0 114.036364 51.2 114.036364 114.036364V669.090909H167.563636v-683.054545zM907.636364 840.145455H708.654545L651.636364 896H366.545455l-57.018182-57.018182H110.545455v-114.036363H907.636364V840.145455z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shang4" unicode="&#58922;" d="M512 896c282.752 0 512-229.12 512-512s-229.248-512-512-512S0 101.12 0 384 229.248 896 512 896z m0-928c229.376 0 416 186.56 416 416S741.376 800 512 800 96 613.44 96 384s186.624-416 416-416z m211.36 368.32h-0.096C731.104 327.68 736 316.48 736 304c0-26.56-21.504-48-48-48-14.016 0-26.496 6.08-35.264 15.68h-0.128L512 424.96 371.36 271.68h-0.096C362.496 262.08 349.984 256 336 256c-26.496 0-48 21.44-48 48 0 12.48 4.896 23.68 12.736 32.32h-0.128l176 192c9.12 9.92 21.92 15.68 35.392 15.68 13.472 0 26.272-5.76 35.36-15.68l176-192z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xia3" unicode="&#58923;" d="M512-128C229.248-128 0 101.12 0 384S229.248 896 512 896s512-229.12 512-512-229.248-512-512-512z m0 928C282.624 800 96 613.44 96 384s186.624-416 416-416 416 186.56 416 416S741.376 800 512 800z m211.36-368.32l-176-192C538.272 229.76 525.472 224 512 224c-13.472 0-26.272 5.76-35.392 15.68l-176 192h0.128C292.896 440.32 288 451.52 288 464c0 26.56 21.504 48 48 48 13.984 0 26.496-6.08 35.264-15.68h0.096L512 343.04l140.608 153.28h0.128C661.504 505.92 673.984 512 688 512c26.496 0 48-21.44 48-48 0-12.48-4.896-23.68-12.736-32.32h0.096z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="you1" unicode="&#58926;" d="M512-128C229.248-128 0 101.12 0 384S229.248 896 512 896s512-229.12 512-512-229.248-512-512-512z m0 928C282.624 800 96 613.44 96 384s186.624-416 416-416 416 186.56 416 416S741.376 800 512 800z m-80-640c-26.496 0-48 21.44-48 48 0 14.08 6.08 26.56 15.648 35.2l-0.096 0.32L552.96 384 399.552 524.48l0.096 0.32C390.08 533.44 384 545.92 384 560c0 26.56 21.504 48 48 48 12.512 0 23.776-4.8 32.352-12.8l0.096 0.32 192-176C666.336 410.24 672 397.44 672 384c0-13.44-5.664-26.24-15.552-35.52l-192-176-0.096 0.32c-8.576-8-19.84-12.8-32.352-12.8z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="camera_fill" unicode="&#59111;" d="M511.37927902 528.36756543c114.20934448 0 207.12612347-92.91677899 207.12612346-207.12612345s-92.91677899-207.12612347-207.12612346-207.12612346-207.12612347 92.91677899-207.12612346 207.12612346 92.91677899 207.12612347 207.12612346 207.12612345m414.2522469 136.86894239a81.15201517 81.15201517 0 0 1-20.67118711 2.89976573h-135.70903609L740.12936976 735.4936888899999l-8.65787196 20.04980875C715.93703854 791.33489177 674.84321565 818.34413828 635.82065399 818.34413828h-248.92417517c-39.02256165 0-80.11638455-27.0092465-95.60941858-62.84206586L282.62918827 735.4936888899999l-29.12193296-67.31599012H117.79821922c-7.16656387 0-14.04315117-1.24275675-20.67118712-2.94119095a83.0575755 83.0575755 0 0 1-62.13783704-80.3649359v-568.76833502c0-38.69115986 26.47071858-70.9614099 62.13783704-80.28208545 6.62803595-1.69843422 13.50462325-2.94119095 20.67118712-2.94119095h787.16211959c7.16656387 0 14.04315117 1.24275675 20.67118711 2.89976572a83.14042595 83.14042595 0 0 1 62.13783705 80.32351068v568.76833502c0 38.73258509-26.51214381 71.08568557-62.13783705 80.3649359"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="camera" unicode="&#59112;" d="M117.83964445 16.103236899999956l-0.16570089 569.22401249h190.266057l59.36234698 137.28319461c2.40266303 5.50955488 13.5874737 12.88324489 19.59413128 12.88324489h248.92417517c6.17235849 0 17.15004302-7.24941431 19.59413127-12.84181965l59.36234699-137.32461985 190.14178133-0.41425225 0.04142523-569.18258727L117.83964445 16.144662140000037zM904.96033881 668.17769877h-135.70903609l-37.77980492 87.40722409C715.93703854 791.29346655 674.84321565 818.34413828 635.82065399 818.34413828h-248.92417517c-39.02256165 0-80.11638455-27.0092465-95.60941858-62.84206586l-37.77980493-87.32437365H117.79821922A83.14042595 83.14042595 0 0 1 34.98919506 584.91299714v-568.768335c0-45.94057419 37.11700133-83.26470163 82.80902416-83.26470164h787.16211959A83.09900073 83.09900073 0 0 1 987.76936297 16.144662140000037v568.768335c0 45.89914896-37.15842655 83.26470163-82.80902416 83.26470163zM511.37927902 196.96576790999995c-68.51732163 0-124.27567408 55.75835244-124.27567408 124.27567407s55.75835244 124.27567408 124.27567408 124.27567408 124.27567408-55.75835244 124.27567407-124.27567408-55.75835244-124.27567408-124.27567407-124.27567407m0 331.40179752c-114.20934448 0-207.12612347-92.91677899-207.12612346-207.12612345s92.91677899-207.12612347 207.12612346-207.12612346 207.12612347 92.91677899 207.12612346 207.12612346-92.91677899 207.12612347-207.12612346 207.12612345"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="mail" unicode="&#59146;" d="M900.28380918 73.31081482000002L123.63851852 73.07779791999997V546.25742697l367.50646993-233.87128415a38.95265659 38.95265659 0 0 1 41.74885925 0L900.36148148 546.25742697 900.28380918 73.31081482000002zM123.63851852 694.96103822L123.75502697 694.68918518 900.36148148 694.96103822v-56.623104l-388.36148148-247.11441067L123.63851852 638.3379342200001V694.96103822zM900.28380918 772.36148148H123.75502697A77.6722963 77.6722963 0 0 1 45.96622222 694.96103822v-621.8832403C45.96622222 30.396871110000006 80.87991941-4.361481479999952 123.75502697-4.361481479999952h776.52878221A77.6722963 77.6722963 0 0 1 978.03377778 73.07779791999997V694.96103822A77.6722963 77.6722963 0 0 1 900.28380918 772.36148148z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="mail_fill" unicode="&#59147;" d="M512 306.32770370000003a38.83614815 38.83614815 0 0 0-20.85501155 6.05843912L45.96622222 595.6958435500001v-522.65688177A77.6722963 77.6722963 0 0 1 123.71619082-4.361481479999952h776.56761836A77.6722963 77.6722963 0 0 1 978.03377778 73.03896178000002V595.30748208l-445.17876623-282.92133926A38.95265659 38.95265659 0 0 0 512 306.32770370000003M900.28380918 772.36148148H123.71619082A77.6722963 77.6722963 0 0 1 45.96622222 694.92220208v-5.94193067l466.03377778-297.795584 466.03377778 296.16446577v7.5730489A77.6722963 77.6722963 0 0 1 900.28380918 772.36148148"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="praise_fill" unicode="&#59162;" d="M970.61866256 551.85501045c-20.17408443 24.97941049-51.61582996 39.27111301-86.20589259 39.27111302h-213.5884585c29.99186267 87.03439707 6.95943775 187.7391183 5.63383056 193.2900984a40.05819227 40.05819227 0 0 1-6.37948461 13.79459982A124.02712272 124.02712272 0 0 1 553.42522469 881.1026963a124.06854795 124.06854795 0 0 1-123.57144526-117.440512H429.14955061V736.11440987a144.1183567 144.1183567 0 0 0-49.1717417-107.95413554c-20.71261235-18.39279977-46.4791021-30.77894195-75.10393238-34.92146441V-71.67747161h497.30982244c41.88090217 0 81.60769264 32.31167525 90.47269072 73.52977383l98.26063298 458.53581211c7.12513865 33.34730587-0.24855135 66.65318653-20.29836011 91.46689612M97.99630444 591.12612347C52.18000592 591.12612347 14.8973037 553.84342124 14.8973037 507.9856975v-496.52274315C14.8973037-34.353344160000006 51.97287981-71.67747161 97.54062697-71.67747161H222.02342717V591.12612347H97.99630444z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="praise" unicode="&#59163;" d="M931.2226165 477.74528347l-98.26063298-458.49438688c-0.74565405-3.47971888-6.58661072-8.07791882-9.44495122-8.07791881L326.20720986 11.380103899999995V508.27567408h3.72827023v1.36703241A228.12871237 228.12871237 0 0 1 533.33333333 736.11440987V756.82702222a41.46664992 41.46664992 0 0 0 82.85044939 0h2.65121438c8.20219449-42.46085531 15.49303404-137.86314777-30.90321764-181.11108235A41.42522469 41.42522469 0 0 1 616.18378272 503.9674507c6.00665758 0 11.84761426 1.73985943 17.39859436 4.30822338h272.16372622c9.61065213 0 17.31574391-3.02404141 21.7896682-8.5335963 4.26679813-5.30242877 5.59240533-13.13179623 3.686845-21.99679431zM119.32963777 508.27567408H243.3567605v-496.85414496H119.08108642L119.32963777 508.27567408z m872.62235812 43.57933637c-20.17408443 24.97941049-51.61582996 39.27111301-86.20589259 39.27111302h-213.5884585c29.99186267 86.99297185 6.95943775 187.7391183 5.63383056 193.2900984a40.05819227 40.05819227 0 0 1-6.37948461 13.79459982 124.02712272 124.02712272 0 0 1-116.65343273 82.85044938 124.06854795 124.06854795 0 0 1-123.57144526-117.39908677H450.48288394V736.11440987c0-79.95068365-65.03760276-144.98828642-144.98828642-144.9882864H119.32963777C73.51333925 591.12612347 36.23063703 553.84342124 36.23063703 507.9856975v-496.52274315C36.23063703-34.394769389999965 73.30621314-71.67747161 118.8739603-71.67747161h704.643072c41.88090217 0 81.60769264 32.31167525 90.47269072 73.52977383l98.26063298 458.53581211c7.12513865 33.34730587-0.24855135 66.65318653-20.29836011 91.46689612z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="prompt_fill" unicode="&#59164;" d="M550.83614815 306.32770370000003a38.83614815 38.83614815 0 0 0-77.6722963 0v310.68918519a38.83614815 38.83614815 0 0 0 77.6722963 0v-310.68918519z m-38.83614815-194.18074073a38.83614815 38.83614815 0 1 0 0 77.67229628 38.83614815 38.83614815 0 0 0 0-77.67229628z m0 737.88681481C255.0212077 850.03377778 45.96622222 640.9787923 45.96622222 384s209.05498548-466.03377778 466.03377778-466.03377778 466.03377778 209.05498548 466.03377778 466.03377778S768.9787923 850.03377778 512 850.03377778z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="remind_fill" unicode="&#59167;" d="M512-82.20141035999995c59.41930667 0 110.79953067 30.95241008 139.03341037 76.50721185h-278.06682074a162.99531378 162.99531378 0 0 1 139.03341037-76.50721185M932.09061452 93.84284919000004l2.71853037 1.32042903c-21.43755378 40.19541333-76.97324563 156.54851318-76.97324564 211.38515437v192.16126105C857.83589925 680.6570477 702.68548741 828.70044445 512 828.70044445c-190.68548741 0-345.79706311-148.04339675-345.79706311-329.99075081v-194.99629986c0-47.96264297-47.18592-153.24744059-76.89557334-208.35593481l2.71853037-1.35926519a36.70016 36.70016 0 0 1-7.22352355-20.85501156c0-21.43755378 18.25298963-38.83614815 40.70028326-38.83614814h194.76328296v1.28159289H735.30785185v-1.28159289h163.22833067c22.44729363 0 40.66144711 17.39859437 40.66144711 38.83614814 0 7.76722963-2.99038341 14.6023917-7.10701511 20.69966697"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="remind" unicode="&#59168;" d="M634.06201363 133.31266370000003H187.83467141c25.43767703 53.94340978 59.6911597 136.70324148 59.6911597 191.73406341v194.95746371C247.52583111 659.23178192 366.1702637 772.36148148 512 772.36148148c145.8297363 0 264.47416889-113.1685357 264.47416889-252.31845451v-192.16126105c0-55.76870875 34.5253357-140.00431408 60.00184889-194.56910222h-202.41400415z m-122.06201363-116.50844445c-29.98150637 0-55.92405333 15.72864-70.06041125 38.83614816h140.1208225c-14.13635792-23.10750815-40.07890489-38.83614815-70.06041125-38.83614816z m420.09061452 98.37196327l2.71853037 1.32042903c-21.43755378 40.19541333-76.97324563 156.50967703-76.97324564 211.38515437v192.16126105C857.83589925 701.99038103 702.68548741 850.03377778 512 850.03377778c-190.68548741 0-345.83589925-148.04339675-345.83589925-329.99075081v-194.99629986c0-47.96264297-47.14708385-153.24744059-76.8567372-208.35593481l2.71853037-1.35926519a36.70016 36.70016 0 0 1-7.22352355-20.85501156c0-21.43755378 18.25298963-38.83614815 40.70028326-38.83614814h229.52163555c18.21415348-66.79817482 81.40056652-116.50844445 156.97571082-116.50844444 75.5751443 0 138.76155733 49.71026963 156.97571082 116.50844444h229.52163555c22.48612978 0 40.70028325 17.39859437 40.70028326 38.83614814a36.89434075 36.89434075 0 0 1-7.10701511 20.69966697z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="share_fill" unicode="&#59177;" d="M783.85303703 267.49155555000004a155.07273955 155.07273955 0 0 1-139.84896948-88.93477925l-248.66785658 142.06262992a37.43804682 37.43804682 0 0 1-11.76735289 3.88361481A154.95623111 154.95623111 0 0 1 395.49155555 384c0 8.07791882-1.20392059 15.88398459-2.40784118 23.61237808 0.73788682 0.38836148 1.55344592 0.50486992 2.2524966 0.93206755l266.53248473 152.27653689A154.52903348 154.52903348 0 0 1 783.85303703 500.50844445c85.67254282 0 155.34459259 69.67204978 155.3445926 155.34459258s-69.67204978 155.34459259-155.3445926 155.3445926-155.34459259-69.67204978-155.34459258-155.3445926c0-8.15559111 1.20392059-15.96165689 2.40784118-23.80655881-0.73788682-0.34952533-1.55344592-0.31068918-2.2524966-0.73788681l-266.53248473-152.27653689A154.52903348 154.52903348 0 0 1 240.14696297 539.34459259c-85.67254282 0-155.34459259-69.67204978-155.3445926-155.34459259s69.67204978-155.34459259 155.3445926-155.34459259a154.02416355 154.02416355 0 0 1 102.6051034 39.61287111 37.90408059 37.90408059 0 0 1 14.05868563-15.06842549l271.85303703-155.34459258c0.42719763-0.27185303 0.89323141-0.31068918 1.35926519-0.54370608C637.59610311 18.70719052000004 703.26802963-43.19762963000005 783.85303703-43.19762963000005c85.67254282 0 155.34459259 69.67204978 155.3445926 155.3445926s-69.67204978 155.34459259-155.3445926 155.34459258"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="share" unicode="&#59178;" d="M783.85303703 34.47466667000003c-42.83627141 0-77.6722963 34.83602489-77.67229628 77.6722963s34.83602489 77.6722963 77.67229628 77.67229628 77.6722963-34.83602489 77.6722963-77.67229628-34.83602489-77.6722963-77.6722963-77.6722963M240.14696297 306.32770370000003c-42.83627141 0-77.6722963 34.83602489-77.6722963 77.6722963s34.83602489 77.6722963 77.6722963 77.6722963 77.6722963-34.83602489 77.67229628-77.6722963-34.83602489-77.6722963-77.67229628-77.6722963M783.85303703 733.52533333c42.83627141 0 77.6722963-34.83602489 77.6722963-77.6722963s-34.83602489-77.6722963-77.6722963-77.67229628-77.6722963 34.83602489-77.67229628 77.67229628 34.83602489 77.6722963 77.67229628 77.6722963m0-466.03377778a155.07273955 155.07273955 0 0 1-139.84896948-88.93477925l-248.66785658 142.06262992a37.43804682 37.43804682 0 0 1-11.76735289 3.88361481A154.95623111 154.95623111 0 0 1 395.49155555 384c0 8.07791882-1.20392059 15.88398459-2.40784118 23.61237808 0.73788682 0.38836148 1.55344592 0.50486992 2.2524966 0.93206755l266.53248473 152.27653689A154.52903348 154.52903348 0 0 1 783.85303703 500.50844445c85.67254282 0 155.34459259 69.67204978 155.3445926 155.34459258s-69.67204978 155.34459259-155.3445926 155.3445926-155.34459259-69.67204978-155.34459258-155.3445926c0-8.15559111 1.20392059-15.96165689 2.40784118-23.80655881-0.73788682-0.34952533-1.55344592-0.31068918-2.2524966-0.73788681l-266.53248473-152.27653689A154.52903348 154.52903348 0 0 1 240.14696297 539.34459259c-85.67254282 0-155.34459259-69.67204978-155.3445926-155.34459259s69.67204978-155.34459259 155.3445926-155.34459259a154.02416355 154.02416355 0 0 1 102.6051034 39.61287111 37.90408059 37.90408059 0 0 1 14.05868563-15.06842549l271.85303703-155.34459258c0.42719763-0.27185303 0.89323141-0.31068918 1.35926519-0.54370608C637.59610311 18.70719052000004 703.26802963-43.19762963000005 783.85303703-43.19762963000005c85.67254282 0 155.34459259 69.67204978 155.3445926 155.3445926s-69.67204978 155.34459259-155.3445926 155.34459258"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="time_fill" unicode="&#59189;" d="M680.18641225 206.70003830999997a41.30094901 41.30094901 0 0 0-58.57526772 0l-138.8987784 138.81592795a41.25952379 41.25952379 0 0 0-12.13759082 29.28763386V632.55134815a41.42522469 41.42522469 0 0 0 82.85044938 0v-240.597705l126.76118756-126.71976235a41.38379947 41.38379947 0 0 0 0-58.5752677M512 881.1026963C237.88928821 881.1026963 14.8973037 658.11071179 14.8973037 384s222.99198451-497.1026963 497.1026963-497.1026963 497.1026963 222.99198451 497.1026963 497.1026963S786.11071179 881.1026963 512 881.1026963"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="time" unicode="&#59190;" d="M512-30.252246910000054c-228.41868895 0-414.25224691 185.83355796-414.25224691 414.25224691S283.58131105 798.2522469099999 512 798.2522469099999s414.25224691-185.83355796 414.25224691-414.25224691-185.83355796-414.25224691-414.25224691-414.25224691m0 911.35494321C237.88928821 881.1026963 14.8973037 658.11071179 14.8973037 384s222.99198451-497.1026963 497.1026963-497.1026963 497.1026963 222.99198451 497.1026963 497.1026963S786.11071179 881.1026963 512 881.1026963M553.42522469 391.95364315V632.55134815a41.42522469 41.42522469 0 0 1-82.85044938 0v-257.74774803c0-10.97768453 4.34964859-21.54111683 12.13759082-29.28763386l138.8987784-138.89877839a41.30094901 41.30094901 0 0 1 58.57526772 0 41.42522469 41.42522469 0 0 1 0 58.57526771L553.42522469 391.95364315z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="warning_fill" unicode="&#59197;" d="M524.93243733 184.88706845000002a38.83614815 38.83614815 0 1 0 0-77.6722963 38.83614815 38.83614815 0 0 0 0 77.6722963z m-38.83614815 310.68918518a38.83614815 38.83614815 0 1 0 77.6722963 0v-194.18074074a38.83614815 38.83614815 0 1 0-77.6722963 0v194.18074074z m507.93798164-441.25631526L578.17679645 777.56552533c-12.27222282 21.35988148-31.69029689 33.6321043-53.24435912 33.6321043s-40.93330015-12.23338667-53.24435911-33.6321043L55.86944 54.35877452c-12.27222282-21.35988148-13.12661808-44.31204503-2.33016889-62.91456 10.75761303-18.64135111 31.03008237-29.32129185 55.53569186-29.32129185h831.75378488c24.54444563 0 44.77807882 10.64110459 55.53569185 29.2824557 10.83528533 18.64135111 9.98089008 41.59351467-2.33016888 62.91456z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="warning" unicode="&#59198;" d="M524.93243733 534.41240178a38.83614815 38.83614815 0 0 1-38.83614815-38.83614815v-194.18074074a38.83614815 38.83614815 0 0 1 77.6722963 0v194.18074074a38.83614815 38.83614815 0 0 1-38.83614815 38.83614815M524.93243733 184.88706845000002a38.83614815 38.83614815 0 1 1 0-77.6722963 38.83614815 38.83614815 0 0 1 0 77.6722963M757.94932622 39.79521896999995H137.07582578l154.83972267 269.28985125 40.23424947 69.98273896 192.78263941 335.23363082 192.74380326-335.23363082 40.27308563-70.0215751 154.80088653-269.25101511h-154.80088653z m236.0849446 14.5247194L578.17679645 777.56552533c-12.31105897 21.35988148-31.69029689 33.6321043-53.24435912 33.6321043s-40.93330015-12.27222282-53.20552296-33.6321043L55.7917677 54.319938370000045c-12.19455052-21.32104533-13.08778192-44.27320889-2.33016888-62.91456 10.79644918-18.60251497 31.06891852-29.2824557 55.61336415-29.2824557H940.82874785c24.46677333 0 44.73924267 10.67994075 55.53569185 29.2824557 10.79644918 18.64135111 9.94205392 41.55467852-2.33016888 62.91456z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="workbench_fill" unicode="&#59199;" d="M56.32252839 10.841575980000016C56.32252839-34.68474594999998 93.35667927-71.67747161 138.80015075-71.67747161h119.71889936V466.85044939H56.32252839v-456.00887341zM341.32807427-71.67747161h543.83034975A82.60189804 82.60189804 0 0 1 967.67747161 10.841575980000016V466.85044939H341.32807427v-538.527921zM885.15842402 839.67747161H138.75872553A82.60189804 82.60189804 0 0 1 56.32252839 757.15842402V549.70089876h911.35494322V757.15842402A82.5604728 82.5604728 0 0 1 885.15842402 839.67747161"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="workbench" unicode="&#59200;" d="M341.32807427 10.92442643000004V466.85044939h543.62322363l0.20712612-455.67747161-543.78892452-0.24855135zM139.17297778 466.85044939h119.30464711v-455.96744818L139.17297778 10.841575980000016V466.85044939z m0 289.97657283l745.65404444 0.3314018 0.08285045-207.45752526H139.17297778V756.82702222z m745.98544624 82.85044939H138.84157598A82.64332325 82.64332325 0 0 1 56.32252839 757.15842402v-746.31684804C56.32252839-34.64332073000003 93.35667927-71.67747161 138.84157598-71.67747161h746.31684804A82.60189804 82.60189804 0 0 1 967.67747161 10.841575980000016V757.15842402A82.60189804 82.60189804 0 0 1 885.15842402 839.67747161z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zuo-copy" unicode="&#58904;" d="M510.239 848.422c-254.795 0-462.028-207.263-462.028-462.028 0-254.827 207.263-462.073 462.028-462.073 254.827 0 462.073 207.328 462.073 462.073-0.001 254.699-207.329 462.028-462.073 462.028zM510.239 12.024c-206.434 0-374.321 168.096-374.321 374.482s168.003 374.321 374.321 374.321 374.482-168.003 374.482-374.321-168.116-374.482-374.482-374.482zM604.644 574.493c-7.907 7.907-18.927 12.864-30.973 12.864s-23.026-4.893-30.973-12.864l-157.202-157.202c-7.686-7.781-12.422-18.443-12.549-30.26 0 0-0.005-0.423-0.005-0.754 0-11.306 4.295-22.394 12.866-31.041l157.202-157.037c7.863-7.907 18.909-12.849 30.909-12.849 0.001 0 0.001 0 0.002 0 24.234 0.001 43.85 19.65 43.85 43.897 0 12.076-4.893 22.998-12.849 30.973l-126.183 126.127 126.183 126.173c7.907 7.907 12.849 18.927 12.849 30.973s-4.893 23.041-12.866 31.041z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tuichu" unicode="&#58987;" d="M1013.23770833 384.095625z m-503.5153125-479.9034375C257.72427083-95.80781249999995 53.42895833 98.88937499999997 53.42895833 339.08062500000005c0 181.835625 117.04875001 337.516875 283.239375 402.4959375v-0.144375c4.895625 1.68 10.1746875 2.5921875 15.69374999 2.5921875 26.1065625 0 47.221875-20.15625001 47.22187501-45.015 0-19.580625-13.149375-36.2334375-31.48125-42.42375-129.478125-52.5496875-220.2759375-174.8775-220.2759375-317.505 0-190.47374999 162.015-344.90625001 361.895625-344.90625 199.8796875 0 361.895625 154.4325 361.895625 344.90625 0 142.6275-90.7978125 264.95625001-220.27593751 317.505-18.3328125 6.1903125-31.48125001 22.843125-31.48124999 42.42375 0 24.85875001 21.163125 45.015 47.221875 45.015a48.76875001 48.76875001 0 0 0 15.740625-2.5921875v0.144375c166.14375001-64.9790625 283.190625-220.659375 283.190625-402.4959375 0-240.19125001-204.294375-434.8884375-456.2915625-434.8884375z m0 464.930625c-26.05875001 0-47.2228125 20.1084375-47.22281249 44.9671875V818.985C462.49958334 843.84375001 483.66364583 864 509.72145833 864c26.0596875 0 47.2228125-20.15625001 47.2228125-44.9671875v-404.9428125c0-24.85875001-21.163125-44.9671875-47.221875-44.9671875z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gaojisousuo" unicode="&#58980;" d="M602.4924576 207.49105599999996c46.9652608 57.34432427 74.98873173 130.51672 74.98873173 210.30576853 0 183.4499424-148.68008107 332.13002347-332.25976213 332.13002347S13.2211424 601.1170293299999 13.2211424 417.66708587 161.90122347 85.53706347000002 345.48090453 85.53706347000002c79.65930987 0 152.96144427 28.15320853 210.17602987 74.98873173l131.6843648-131.6843648c6.48691413-6.48691413 14.91990293-9.73037227 23.4826304-9.73037227s16.99571627 3.24345707 23.48263147 9.73037227c12.97382933 12.97382933 12.97382933 33.99143253 0 46.9652608L602.4924576 207.49105599999996z m-153.61013547-34.64012373c-32.69404907-13.7522592-67.59364907-20.88786453-103.53115626-20.88786454s-70.70736853 7.00586773-103.5311552 20.88786454c-31.65614293 13.36304427-60.0688288 32.5643104-84.45962774 56.95510933C132.96958507 254.19684053000003 113.76831787 282.73926400000005 100.4052736 314.39540693000004c-13.7522592 32.69404907-20.88786453 67.46391147-20.88786453 103.4014176 0 35.93750613 7.00586773 70.70736853 20.88786453 103.4014176 13.36304427 31.65614293 32.5643104 60.0688288 56.95510933 84.45962667 24.39079893 24.39079893 52.80348373 43.59206507 84.45962774 56.95510933 32.69404907 13.7522592 67.59364907 20.88786453 103.5311552 20.8878656s70.70736853-7.00586773 103.53115626-20.8878656c31.65614293-13.36304427 60.0688288-32.5643104 84.45962667-56.95510933 24.39079893-24.39079893 43.59206507-52.80348373 56.95510933-84.45962667 13.7522592-32.69404907 20.88786453-67.46391147 20.88786454-103.4014176 0-35.93750613-7.00586773-70.70736853-20.88786454-103.4014176-13.36304427-31.65614293-32.5643104-60.0688288-56.95510933-84.45962666-24.39079893-24.52053653-52.80348373-43.72180373-84.45962667-57.084848z m262.07134614 510.5201728h265.44454186c18.29309867 0 33.34274027 14.91990293 33.34274134 33.34274026 0 18.29309867-14.91990293 33.34274027-33.34274134 33.34274134H710.95366827c-18.29309867 0-33.34274027-14.91990293-33.34274027-33.34274134s14.91990293-33.34274027 33.34274027-33.34274026zM977.43611627 417.66708587H777.37967253c-18.29309867 0-33.34274027-14.91990293-33.34274026-33.34274027 0-18.29309867 14.91990293-33.34274027 33.34274026-33.34274027h200.05644374c18.29309867 0 33.34274027 14.91990293 33.34274133 33.34274027-0.12973867 18.42283733-15.0496416 33.34274027-33.34274133 33.34274027zM973.28449173 85.53706347000002H843.15698667c-18.29309867 0-33.34274027-14.91990293-33.34274134-33.34274134 0-18.29309867 14.91990293-33.34274027 33.34274134-33.34274026H973.28449173c18.29309867 0 33.34274027 14.91990293 33.34274027 33.34274026-0.12973867 18.29309867-15.0496416 33.34274027-33.34274027 33.34274134z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="geren1" unicode="&#58907;" d="M813.39875 254.45906249999996c26.4328125 0 33.105 6.5953125 33.105 32.398125 0 14.941875-10.83375 27.165-21.9178125 35.7384375l-2.0990625 2.0559375c-36.8503125 27.88875-75.3084375 54.4546875-119.5171875 70.9715625 56.2303125 47.2378125 92.023125 117.2090625 92.023125 195.418125 0 142.179375-117.834375 257.4759375-263.1121875 257.4759375-145.2815625 0-263.0765625-115.2965625-263.0765625-257.4759375 0-78.2090625 35.79375-148.1803125 92.0034375-195.418125-179.46-67.378125-307.1690625-237.204375-307.2815625-436.6959375v-0.091875c0.1134375-25.7653125 11.664375-44.975625 37.9434375-44.975625 26.503125 0 28.3865625 18.62625 28.4521875 44.3653125 0 206.5434375 126.8315625 401.6503125 411.9815625 397.0228125 86.53875-1.3996875 187.944375-33.9778125 249.77625-84.380625 16.78875-13.69125 20.480625-13.869375 27.980625-15.973125l3.7396875-0.435zM531.903125 405.2859375c-135.8803125 0.268125-201.2053125 95.383125-201.2053125 185.7553125 0 90.3215625 74.634375 196.070625 201.4715625 196.070625 147.3853125 0 201.466875-106.8365625 201.466875-197.1684375 0-90.38625-85.7803125-188.071875-201.733125-184.6565625v0 0zM619.6071875 130.6378125c0-25.8571875 21.42-38.2153125 47.8378125-38.2153125h255.1921875c26.416875 0 47.836875 12.358125 47.836875 38.2153125 0 25.89375-21.42 35.7271875-47.836875 35.7271875h-255.1921875c-26.4178125-0.0009375-47.8378125-9.8334375-47.8378125-35.7271875v0 0zM922.6371875-21.642187499999977h-255.1921875c-26.4178125 0-47.8378125-9.1509375-47.8378125-35.0090625 0-25.89375 21.42-35.2959375 47.8378125-35.2959375h255.1921875c26.41125 0 47.836875 9.42375 47.836875 35.2959375 0 25.8571875-21.425625 35.0090625-47.836875 35.0090625v0 0zM922.6371875-21.642187499999977z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fujian1" unicode="&#59009;" d="M657.7408 862.54592H247.07072A118.74304 118.74304 0 0 1 127.8464 743.30624v-718.6432a118.71232 118.71232 0 0 1 119.22432-119.20384h529.87904a118.7072 118.7072 0 0 1 119.20896 119.20384V564.49536 624.1024L657.7408 862.54592z m29.77792-715.34592h-351.0272c-16.55808 0-29.81888 13.2608-29.81888 29.81888s13.25568 29.78304 29.81888 29.78304h354.36032a29.6448 29.6448 0 0 0 29.78304-29.78304c-3.29728-16.55808-16.55296-29.81888-33.11616-29.81888z m0 178.85184h-351.0272a29.6704 29.6704 0 0 0-29.81888 29.7728 29.70112 29.70112 0 0 0 29.81888 29.824h354.36032a29.68064 29.68064 0 0 0 29.78304-29.824c-3.29728-16.54784-16.55296-29.7728-33.11616-29.7728z m29.81888 298.05056a59.35104 59.35104 0 0 0-59.60192 59.60704V802.9184l175.50848-178.816h-115.90656z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="sousuo" unicode="&#58973;" d="M581.1744 628.9408000000001l167.78346667-2.0928v17.68853333l-239.54133334 228.13866667h-7.24373333c-1.52-28.02346667-5.18613333-92.304-10.27413333-160.41173334-6.8032-91.82613333 89.27573333-83.32266667 89.27573333-83.32266666zM652.5952 467.39306666c33.85813333 0 66.31253333-5.9968 96.36266667-16.99093333V611.3781333300001c-48.55573333-0.0096-107.96053333 0.29866667-166.08213334 1.408-133.48906667 2.5504-107.98186667 100.32746667-107.98186666 100.32746667l10.0704 159.5616h-357.25866667c-37.56373333 0-68.0192-30.45546667-68.0192-68.0192v-711.94453333c0-37.56053333 30.45546667-68.0192 68.0192-68.01920001h295.96053333c-32.48746667 45.79413333-51.65333333 101.69813333-51.65333333 162.11733334 0 154.95893333 125.62346667 280.58346667 280.5824 280.58346666zM953.52426667-61.95413332999999l-102.59413334 102.8352c31.00586667 41.7024 49.36533333 93.36746667 49.36533334 149.33013334 0 138.36693333-112.16533333 250.5376-250.53866667 250.53759999-138.37013333 0-250.5344-112.17066667-250.5344-250.53759999 0-138.36373333 112.16426667-250.53866667 250.5344-250.53866668 60.9536 0 116.8064 21.78346667 160.23893333 57.97120001l101.39413334-101.63093334c11.6096-11.63733333 30.44906667-11.65546667 42.0864-0.05226666 11.63306667 11.6128 11.6512 30.45546667 0.048 42.08533333z m-303.76 63.97653334c-103.93386667 0-188.1888 84.25386667-188.1888 188.18986665 0 103.93173333 84.25493333 188.1824 188.1888 188.1824 103.9328 0 188.18666667-84.25066667 188.18666666-188.1824-0.00106667-103.936-84.25493333-188.18986667-188.18666666-188.18986665z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wenjianjia2" unicode="&#58896;" d="M863.84375-55.96875H160.15625C89.46875-55.96875 32 1.5 32 72.1875V695.8125C32 766.5 89.46875 823.96875 160.15625 823.96875h173.0625c23.90625 0 46.3125-10.5 61.59375-28.875l75.9375-91.125h400.40625c66.65625 0 120.84375-54.1875 120.84375-120.84375v-511.03125c0-70.59375-57.46875-128.0625-128.15625-128.0625zM160.15625 744c-26.53125 0-48.1875-21.5625-48.1875-48.1875v-623.625c0-26.53125 21.5625-48.1875 48.1875-48.1875h703.6875c26.53125 0 48.1875 21.5625 48.1875 48.1875V583.21875c0 22.5-18.28125 40.78125-40.875 40.78125h-400.3125c-23.90625 0-46.3125 10.5-61.59375 28.875l-75.9375 91.125H160.15625zM942.03125 433.96875H452c-22.125 0-40.03125 17.90625-40.03125 40.03125s17.90625 40.03125 40.03125 40.03125h490.03125c22.125 0 40.03125-17.90625 40.03125-40.03125s-18-40.03125-40.03125-40.03125z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shanchu" unicode="&#58927;" d="M512 892.55520762C233.55056289 892.55520762 8.77812571 667.78277044 8.77812571 389.33333333s224.77243718-503.22187429 503.22187429-503.22187429 503.22187429 224.77243718 503.22187429 503.22187429S790.44943711 892.55520762 512 892.55520762m211.3531872-714.57506149c-13.41924998-13.41924998-36.90293745-13.41924998-50.32218743 0L512 339.0111459l-161.03099977-161.03099977c-13.41924998-13.41924998-36.90293745-13.41924998-50.32218743 0-13.41924998 13.41924998-13.41924998 36.90293745 0 50.32218743l161.03099977 161.03099977-161.03099977 161.03099977c-13.41924998 13.41924998-13.41924998 36.90293745 0 50.32218743 13.41924998 13.41924998 36.90293745 13.41924998 50.32218743 0l161.03099977-161.03099977 161.03099977 161.03099977c13.41924998 13.41924998 36.90293745 13.41924998 50.32218743 0 13.41924998-13.41924998 13.41924998-36.90293745 0-50.32218743L562.32218743 389.33333333l161.03099977-161.03099977c16.77406248-13.41924998 16.77406248-36.90293745 0-50.32218743m0 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shezhi2" unicode="&#58901;" d="M942.226286 307.80952367a196.827429 196.827429 0 0 1-181.76-196.315428c0-29.696 9.728-58.441143 14.555428-70.729143l-113.078857-62.464a349.184 349.184 0 0 1-44.178286 38.985143c-38.4 28.525714-75.117714 42.934857-109.202285 42.934857-33.792 0-70.217143-14.189714-108.470857-42.130286a352.109714 352.109714 0 0 1-43.885715-38.326857l-108.909714 60.928c4.827429 12.288 14.628571 41.033143 14.628571 70.802286A196.754286 196.754286 0 0 1 80.091429 307.80952367 546.011429 546.011429 0 0 0 71.68 388.70552367c0 29.037714 5.851429 66.340571 8.411429 80.896A196.827429 196.827429 0 0 1 261.851429 665.99009567c0 29.622857-9.728 58.294857-14.482286 70.656l115.858286 63.634285c4.096-4.242286 20.772571-20.772571 43.958857-37.302857 37.668571-26.843429 73.508571-40.448 106.642285-40.448 32.768 0 68.315429 13.312 105.764572 39.643429 22.820571 16.091429 39.497143 32.402286 43.666286 36.571428h0.073142l111.689143-62.025143a207.945143 207.945143 0 0 1-14.628571-70.729142 196.827429 196.827429 0 0 1 181.76-196.388572c2.56-14.628571 8.411429-52.077714 8.411428-80.896 0-28.891429-5.851429-66.267429-8.338285-80.896m69.485714 181.028572c-6.070857 31.670857-25.234286 51.931429-49.078857 51.931428h-5.266286a125.293714 125.293714 0 0 0-125.074286 125.220572c0 22.235429 10.752 47.469714 10.825143 47.689142a65.682286 65.682286 0 0 1-22.089143 79.36L692.443429 864.71923767 691.053714 865.15809567a72.557714 72.557714 0 0 1-78.409143-15.652572c-13.897143-14.336-61.952-55.296-98.816-55.296-37.302857 0-85.577143 41.764571-99.547428 56.393143A72.630857 72.630857 0 0 1 335.945143 866.91352367l-132.681143-72.630857-1.828571-1.243429A65.536 65.536 0 0 1 179.2 713.75238067c0.073143-0.219429 10.971429-25.234286 10.971429-47.762285 0-69.046857-56.246857-125.220571-125.220572-125.220572H60.708571c-24.356571 0.512-43.958857-19.748571-50.029714-51.931428C10.24 486.57066667 0 432.00609567 0 388.70552367c0-43.154286 10.24-97.792 10.678857-100.132571 5.997714-31.524571 25.234286-51.931429 49.005714-51.931429h5.266286c68.973714 0 125.147429-56.173714 125.147429-125.147428 0-22.381714-10.825143-47.542857-10.898286-47.762286a65.755429 65.755429 0 0 1 22.089143-79.36l126.171428-70.729143 1.316572-0.512a71.460571 71.460571 0 0 1 78.774857 16.457143c17.554286 19.236571 65.536 58.88 100.937143 58.88 38.326857 0 87.552-44.470857 101.741714-59.977143a71.314286 71.314286 0 0 1 78.628572-17.115429l130.267428 71.826286 1.828572 1.170286a65.609143 65.609143 0 0 1 22.162285 79.286857c-0.073143 0.292571-10.898286 25.234286-10.898285 47.835429 0 68.973714 56.173714 125.147429 125.220571 125.147428h4.242286c24.210286-0.365714 43.885714 19.894857 49.956571 51.931429 0.438857 2.340571 10.678857 56.905143 10.678857 100.205714 0 43.154286-10.24 97.792-10.678857 100.059429M500.809143 289.52380967c-59.245714 0-107.52 48.274286-107.52 107.52 0 59.318857 48.274286 107.52 107.52 107.52 59.318857 0 107.52-48.201143 107.52-107.52 0-59.245714-48.201143-107.52-107.52-107.52m0 285.696a178.322286 178.322286 0 0 1-178.102857-178.102857 178.322286 178.322286 0 0 1 178.102857-178.176A178.322286 178.322286 0 0 1 678.985143 397.04380967a178.322286 178.322286 0 0 1-178.176 178.102857"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="liebiao-heng" unicode="&#58897;" d="M904.98826482 772.24839062l-768.35175356 0.33927259c-0.00745654 0-0.01242757 0-0.01988409 0-24.01254574 0-43.48530111-19.46157056-43.49648593-43.47784458-0.00994205-24.0224878 19.45411402-43.50518523 43.47660181-43.51512727l768.35175356-0.3392726c0.00745654 0 0.01242757 0 0.01988412 0 24.01254574 0 43.48530111 19.46157056 43.49648592 43.47784458C948.47605146 752.7545083800001 929.01075263 772.23720581 904.98826482 772.24839062zM904.98826482 426.01760541l-768.35175356 0.33927258c-0.00745654 0-0.01242757 0-0.01988409 0-24.01254574 0-43.48530111-19.46281332-43.49648593-43.47660182-0.00994205-24.0224878 19.45411402-43.50518523 43.47660181-43.51637003l768.35175356-0.33927259c0.00745654 0 0.01242757 0 0.01988412 0 24.01254574 0 43.48530111 19.46281332 43.49648592 43.47660182C948.47605146 406.52372317 929.01075263 426.0064206 904.98826482 426.01760541zM136.63651126 80.12485002999995c-0.00745654 0-0.01242757 0-0.01988409 0-24.01254574 0-43.48654387-19.46281332-43.49648593-43.47660183-0.00994205-24.0224878 19.45411402-43.50518523 43.47660181-43.51637002l768.35175356-0.3392726c0.00745654 0 0.01242757 0 0.01988412 0 24.01254574 0 43.48530111 19.46281332 43.49648592 43.47660182 0.00994205 24.0224878-19.45535678 43.50518523-43.47660183 43.51637004L136.63651126 80.12485002999995z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="import" unicode="&#59024;" d="M482.15146667 622.77866667l59.696 0c16.4832 0 29.84853333 13.37173333 29.84853333 29.84853333 0 16.4832-13.36426667 29.84853333-29.84853333 29.84853333l-59.696 0c-16.4832 0-29.84853333-13.36426667-29.84853334-29.84853333 0.00106667-16.4768 13.36533333-29.84853333 29.84853334-29.84853333z m2.69973333-462.89173334c15.38346667-17.68213333 40.31253333-17.68213333 55.68426667 0L679.71733333 319.93813333c9.15626667 10.51946667 12.86506667 24.93653333 11.1168 38.60693334-1.85066667 14.54186667-14.28693333 25.40693333-28.9408 25.40693333l-90.19733333 0 0 149.28853333c0 16.48-13.36426667 29.84853333-29.84853333 29.84853334l-59.696 0c-16.4832 0-29.84853333-13.36853333-29.84853334-29.84853334L452.30293333 383.95306667l-88.80533333 0c-14.65493333 0-27.0976-10.86506667-28.95146667-25.40693334-1.7376-13.67786667 1.9712-28.08853333 11.1168-38.60693333L484.8512 159.88693333000003zM512-93.57119999999998C775.75146667-93.57119999999998 989.5712 120.24106667000001 989.5712 384c0 263.75466667-213.81973333 477.5712-477.5712 477.5712-263.76213333 0-477.5712-213.81653333-477.5712-477.5712 0-263.75893333 213.80906667-477.5712 477.5712-477.5712z m0 895.4464c230.78826667 0 417.8752-187.09013333 417.8752-417.8752 0-230.78826667-187.08693333-417.8752-417.8752-417.8752-230.79146667 0-417.8752 187.08693333-417.8752 417.8752 0 230.784 187.08373333 417.8752 417.8752 417.8752z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daochu1" unicode="&#58912;" d="M966.08768 462.60736c-25.49248 0-42.49088-16.9984-42.49088-42.49088v-420.64896c0-25.49248-21.24288-42.49088-42.49088-42.49088H148.01408c-25.49248 0-42.49088 21.24288-42.49088 42.49088V764.28288c0 25.49248 16.99328 42.49088 42.49088 42.49088h520.64768v-169.9584c0-46.74048 38.24128-84.97664 84.97664-84.97664h212.44928c25.49248 0 42.49088 16.9984 42.49088 42.49088 0 12.7488-4.2496 21.24288-8.4992 29.74208-4.2496 4.2496-4.2496 8.4992-12.7488 12.7488L906.5984 734.54592c-12.7488 16.9984-42.49088 21.24288-59.48416 4.2496-16.9984-12.7488-21.24288-42.49088-4.2496-59.48416l33.99168-42.49088h-123.21792V849.26464c0 8.4992 0 16.99328-4.2496 21.24288C740.8896 891.7504 715.39712 900.2496 694.15424 891.7504V896H148.01408C75.78112 896 20.54144 840.76544 20.54144 768.53248v-769.06496C20.54144-72.76544 75.78112-128 148.01408-128h733.09696c72.23296 0 127.46752 55.23456 127.46752 127.46752V420.11648c0 25.49248-16.9984 42.49088-42.49088 42.49088zM512 41.9584c25.49248 0 42.49088 16.9984 42.49088 42.49088v263.43424l110.47424-106.22464c16.9984-16.9984 42.49088-16.9984 59.48416 0s16.9984 42.49088 0 59.48416l-182.7072 178.4576c-8.4992 8.4992-16.9984 12.7488-29.74208 12.7488s-21.24288-4.2496-29.74208-12.7488l-178.4576-178.4576c-16.9984-16.9984-16.9984-42.49088 0-59.48416 16.99328-16.9984 42.49088-16.9984 59.48416 0l106.22464 106.22464v-263.43424c0-25.49248 16.9984-42.49088 42.49088-42.49088z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bangzhu1" unicode="&#58921;" d="M512-81.85173333c-257.2288 0-465.85173333 209.16906667-465.85173333 465.85173333 0 257.2288 209.16906667 465.85173333 465.85173333 465.85173333S977.85173333 640.68266667 977.85173333 384c0-257.2288-208.62293333-465.85173333-465.85173333-465.85173333z m0 866.16746666c-220.63786667 0-400.31573333-179.67786667-400.31573333-400.31573333s179.67786667-400.31573333 400.31573333-400.31573333 400.31573333 179.67786667 400.31573333 400.31573333-179.67786667 400.31573333-400.31573333 400.31573333zM670.37866667 497.59573333c0-26.76053333-6.00746667-50.7904-18.56853334-73.18186666-12.01493333-22.39146667-28.39893333-42.05226667-49.152-57.89013334-20.20693333-16.384-34.4064-32.768-42.5984-49.152s-12.01493333-27.30666667-12.01493333-33.86026666c0-12.01493333-9.8304-21.2992-21.2992-21.2992h-12.01493333c-12.01493333 0-21.2992 9.8304-21.2992 21.2992v9.28426666c0 18.56853333 4.36906667 36.0448 13.65333333 53.52106667 9.28426667 17.47626667 25.12213333 36.0448 47.5136 56.79786667 16.384 14.19946667 27.30666667 28.94506667 33.86026667 44.2368 6.00746667 15.29173333 9.28426667 30.03733333 9.28426666 44.2368 0 26.2144-6.00746667 46.42133333-18.56853333 59.52853333-12.01493333 13.1072-29.4912 19.6608-51.88266667 19.6608s-41.50613333-8.73813333-56.79786666-26.2144c-12.56106667-14.19946667-20.20693333-35.49866667-22.39146667-64.44373333-1.09226667-10.92266667-10.37653333-19.6608-21.2992-19.6608h-26.76053333c-12.56106667 0-22.9376 10.92266667-21.2992 23.48373333 4.9152 45.32906667 19.6608 79.73546667 44.2368 103.2192 28.39893333 27.30666667 63.35146667 41.50613333 103.76533333 41.50613333 44.78293333 0 79.73546667-12.01493333 105.40373333-36.59093333 25.12213333-24.576 38.22933333-55.7056 38.22933334-94.48106667z m-150.18666667-383.3856c-22.39146667 0-40.96 18.0224-40.96 40.96v7.64586667c0 22.39146667 18.0224 40.96 40.96 40.96 22.39146667 0 40.96-18.0224 40.96-40.96v-7.64586667c0-22.9376-18.0224-40.96-40.96-40.96z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="baocun1" unicode="&#60017;" d="M511.99999998 892.02767155C234.5164023 892.02767155 9.55505006 667.13331198 9.55505006 389.58272164s224.96135225-502.44494992 502.44494992-502.44494992c277.55059035 0 502.44494992 224.89435959 502.44494992 502.44494992S789.55059031 892.02767155 511.99999998 892.02767155z m292.62393882-392.17503157L469.5936462 164.75535473000002c-6.56528067-6.56528067-15.14034115-9.78092835-23.71540163-9.78092837s-17.15012096 3.28264035-23.71540164 9.78092837L220.31395839 366.67123194c-13.0635687 13.0635687-13.0635687 34.30024192 0 47.36381061s34.30024192 13.0635687 47.36381059 0l178.20047559-178.20047558 311.38188361 311.38188363c13.0635687 13.0635687 34.30024192 13.0635687 47.36381062 0s13.0635687-34.23324926 0-47.36381062z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shaixuan" unicode="&#58957;" d="M920.9 727.4c-15.4 37.5-53.1 61.6-95.8 61.6H199c-42.6 0-80.2-24.1-95.7-61.3-14.6-34.9-6.8-73.7 20.3-101.1l211.3-214.2 0.1-0.1 36.7-37.2c10.6-10.8 16.7-26.2 16.7-42l0.2-166.2c0-18.4 14.9-33.4 33.5-33.4 18.4 0 33.5 15 33.4 33.5l-0.2 166.3c0 33.3-13.2 65.7-36.1 88.9L228.8 615.3l-0.3 0.3-57.5 58.2c-11 11.2-8.7 22.7-6.2 28.5 4.1 9.8 15.2 20.3 34.1 20.3H825c18.9 0 30-10.5 34-20.3 2.3-5.7 4.6-16.9-6.9-28.4L651.6 465.5c-1.6-1.7-3.1-3.5-4.3-5.5l-36.5-38.1c-22.9-23.2-36-55.6-36.1-88.9l-0.4-320.8c0-18.4 14.9-33.5 33.4-33.5 18.4 0 33.4 14.9 33.5 33.4l0.4 320.8c0 15.9 6.1 31.3 17.1 42.4l190.1 198.4 51.1 53c27.4 27.2 35.5 65.8 21 100.7z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="stor" unicode="&#58898;" d="M510.93333333 446.29333333c77.01333333 0 149.01333333 7.04 216 21.01333334 66.98666667 13.97333333 119.78666667 34.66666667 158.50666667 61.97333333v-82.88c0-22.4-16.74666667-43.30666667-50.24-62.4-33.49333333-19.2-78.93333333-34.45333333-136.53333333-45.65333333-57.49333333-11.2-120.10666667-16.85333333-187.73333334-16.85333334s-130.24 5.65333333-187.73333333 16.85333334c-57.49333333 11.2-103.04 26.45333333-136.53333333 45.65333333-33.49333333 19.2-50.24 40-50.24 62.4v82.88c38.61333333-27.30666667 91.52-48 158.50666666-61.97333333 66.98666667-13.97333333 138.98666667-21.01333333 216-21.01333334z m0-374.50666666c77.01333333 0 149.01333333 7.04 216 21.01333333 66.98666667 13.97333333 119.78666667 34.66666667 158.50666667 61.97333333v-82.88c0-22.4-16.74666667-43.30666667-50.24-62.4-33.49333333-19.2-78.93333333-34.45333333-136.53333333-45.65333333-57.49333333-11.2-120.10666667-16.85333333-187.73333334-16.85333333s-130.13333333 5.65333333-187.73333333 16.74666666c-57.6 11.2-103.04 26.45333333-136.53333333 45.65333334-33.49333333 19.2-50.24 40-50.24 62.4V154.66666667000004c38.61333333-27.30666667 91.52-48 158.50666666-61.97333334 66.98666667-13.86666667 138.98666667-20.90666667 216-20.90666666z m0 187.2c77.01333333 0 149.01333333 7.04 216 21.01333333 66.98666667 13.97333333 119.78666667 34.66666667 158.50666667 61.97333333v-82.88c0-22.4-16.74666667-43.2-50.24-62.4-33.49333333-19.2-78.93333333-34.34666667-136.53333333-45.65333333-57.49333333-11.2-120.10666667-16.74666667-187.73333334-16.74666667s-130.24 5.65333333-187.73333333 16.85333334c-57.6 11.2-103.04 26.45333333-136.53333333 45.65333333-33.49333333 19.2-50.24 40-50.24 62.4v82.88c38.61333333-27.30666667 91.52-48 158.50666666-61.97333333 66.98666667-14.08 138.98666667-21.12 216-21.12z m0 561.81333333c67.62666667 0 130.24-5.65333333 187.73333334-16.85333333 57.6-11.2 103.04-26.45333333 136.53333333-45.65333334 33.49333333-19.2 50.24-40 50.24-62.4v-62.4c0-22.4-16.74666667-43.2-50.24-62.4-33.49333333-19.2-78.93333333-34.34666667-136.53333333-45.65333333-57.6-11.2-120.10666667-16.74666667-187.73333334-16.74666667s-130.24 5.65333333-187.73333333 16.85333334c-57.6 11.2-103.04 26.45333333-136.53333333 45.65333333-33.49333333 19.2-50.24 40-50.24 62.4v62.4c0 22.4 16.74666667 43.30666667 50.24 62.4 33.49333333 19.2 78.93333333 34.45333333 136.53333333 45.65333333 57.6 11.09333333 120.10666667 16.74666667 187.73333333 16.74666667z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shang6" unicode="&#58909;" d="M206.50666667 282.28266667l305.60711111-407.552 305.60711111 407.552zM512.11377778 893.49688889l305.49333333-407.43822222H206.50666667L512.11377778 893.49688889z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zengjia1" unicode="&#58915;" d="M976.384853 432.810667H555.008853V847.872A47.786667 47.786667 0 0 1 507.392853 896a47.786667 47.786667 0 0 1-47.616-48.128v-415.061333H47.616853A47.786667 47.786667 0 0 1 0.000853 384.682667c0-26.624 21.333333-48.128 47.616-48.128h412.16v-416.426667c0-26.624 21.333333-48.128 47.616-48.128a47.786667 47.786667 0 0 1 47.616 48.128v416.426667h421.376A47.786667 47.786667 0 0 1 1024.000853 384.682667a47.786667 47.786667 0 0 1-47.616 48.128z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daodianditu" unicode="&#59238;" d="M761.6 697.6c-137.6 137.6-361.6 137.6-499.2 0-137.6-137.6-137.6-358.4 0-496l227.2-224c12.8-12.8 32-12.8 44.8 0l22.4 22.4 211.2 211.2c131.2 137.6 128 352-6.4 486.4z m-160-742.4l-22.4-22.4c-38.4-38.4-99.2-38.4-134.4 0l-227.2 224c-163.2 163.2-163.2 425.6 0 585.6s425.6 163.2 588.8 0c163.2-163.2 163.2-425.6 0-585.6l-9.6-9.6-195.2-192z m-89.6 332.8c-105.6 0-192 86.4-192 192s86.4 192 192 192 192-86.4 192-192-86.4-192-192-192z m0 64c70.4 0 128 57.6 128 128s-57.6 128-128 128-128-57.6-128-128 57.6-128 128-128z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhichi" unicode="&#59242;" d="M259.2 368h-99.2c-19.2 0-32-12.8-32-32v-288c0-19.2 16-32 32-32h96l3.2 352z m12.8 64l217.6 368c6.4 9.6 16 16 28.8 16 70.4 0 128-57.6 128-128v-160h217.6c54.4 0 96-41.6 96-96v-12.8l-48-384c-6.4-48-48-83.2-96-83.2h-656c-54.4 0-96 41.6-96 96v288c0 54.4 44.8 96 96 96h112z m342.4 32c-19.2 0-32 12.8-32 32v192c0 28.8-19.2 54.4-48 60.8l-211.2-358.4v-374.4h492.8c16 0 28.8 12.8 32 28.8l48 384v3.2c0 19.2-16 32-32 32h-249.6z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="buzhichi" unicode="&#59243;" d="M259.2 752H160c-19.2 0-32-12.8-32-32v-288c0-19.2 16-32 32-32h96v352zM160 336c-54.4 0-96 41.6-96 96v288c0 54.4 44.8 96 96 96h652.8c48 0 89.6-35.2 96-83.2l48-384v-12.8c0-54.4-44.8-96-96-96h-217.6v-160c0-70.4-57.6-128-128-128-12.8 0-22.4 6.4-28.8 16L272 336H160z m704-32c19.2 0 32 12.8 32 32v3.2l-48 384c-3.2 16-16 28.8-32 28.8H323.2v-374.4l211.2-358.4c28.8 6.4 48 32 48 60.8v192c0 19.2 16 32 32 32H864z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dianhuazhengzaibohao" unicode="&#59246;" d="M771.2 233.6c-12.8 9.6-32 9.6-41.6-3.2L656 160c-9.6-9.6-25.6-12.8-38.4-6.4-70.4 38.4-134.4 86.4-188.8 140.8-54.4 54.4-102.4 118.4-140.8 188.8-6.4 12.8-3.2 28.8 6.4 38.4l73.6 73.6c12.8 12.8 12.8 28.8 3.2 41.6L268.8 761.6s0 3.2-3.2 3.2c-12.8 12.8-32 12.8-44.8 0L134.4 678.4c-41.6-41.6 64-240 249.6-428.8s387.2-291.2 428.8-249.6l86.4 86.4 3.2 3.2c9.6 12.8 9.6 35.2-6.4 44.8l-124.8 99.2z m-86.4 44.8c35.2 35.2 89.6 38.4 128 6.4l124.8-99.2c41.6-32 48-92.8 16-134.4-3.2-3.2-3.2-6.4-6.4-6.4l-86.4-86.4c-83.2-83.2-307.2 35.2-521.6 249.6S9.6 643.2 89.6 726.4l86.4 86.4c38.4 38.4 99.2 38.4 134.4 0l6.4-6.4L416 681.6c32-38.4 28.8-92.8-6.4-128l-54.4-54.4c35.2-57.6 73.6-108.8 118.4-153.6s96-83.2 153.6-118.4l57.6 51.2zM572.8 710.4c-19.2 0-32 12.8-32 32s12.8 32 32 32c176 0 320-144 320-320 0-19.2-12.8-32-32-32s-32 12.8-32 32c0 140.8-115.2 256-256 256z m0-128c-19.2 0-32 12.8-32 32s12.8 32 32 32c105.6 0 192-86.4 192-192 0-19.2-12.8-32-32-32s-32 12.8-32 32c0 70.4-57.6 128-128 128z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dianhua" unicode="&#59247;" d="M771.2 233.6c-12.8 9.6-32 9.6-41.6-3.2L656 160c-9.6-9.6-25.6-12.8-38.4-6.4-70.4 38.4-134.4 86.4-188.8 140.8s-102.4 118.4-140.8 188.8c-6.4 12.8-3.2 28.8 6.4 38.4l73.6 73.6c12.8 12.8 12.8 28.8 3.2 41.6L268.8 761.6s0 3.2-3.2 3.2c-12.8 12.8-32 12.8-44.8 0L134.4 678.4c-41.6-41.6 64-240 249.6-428.8s387.2-291.2 428.8-249.6l86.4 86.4 3.2 3.2c9.6 12.8 9.6 35.2-6.4 44.8l-124.8 99.2z m-86.4 44.8c35.2 35.2 89.6 38.4 128 6.4l124.8-99.2c41.6-32 48-92.8 16-134.4-3.2-3.2-3.2-6.4-6.4-6.4l-86.4-86.4c-83.2-83.2-307.2 35.2-521.6 249.6S9.6 643.2 89.6 726.4l86.4 86.4c38.4 38.4 99.2 38.4 134.4 0l6.4-6.4L416 681.6c32-38.4 28.8-92.8-6.4-128l-54.4-54.4c35.2-57.6 73.6-108.8 118.4-153.6 44.8-44.8 96-83.2 153.6-118.4l57.6 51.2z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dianhuahuru" unicode="&#59248;" d="M771.2 233.6c-12.8 9.6-32 9.6-41.6-3.2L656 160c-9.6-9.6-25.6-12.8-38.4-6.4-70.4 38.4-134.4 86.4-188.8 140.8-54.4 54.4-102.4 118.4-140.8 188.8-6.4 12.8-3.2 28.8 6.4 38.4l73.6 73.6c12.8 12.8 12.8 28.8 3.2 41.6L268.8 761.6s0 3.2-3.2 3.2c-12.8 12.8-32 12.8-44.8 0L134.4 678.4c-41.6-41.6 64-240 249.6-428.8s387.2-291.2 428.8-249.6l86.4 86.4 3.2 3.2c9.6 12.8 9.6 35.2-6.4 44.8l-124.8 99.2zM825.6 672c3.2-6.4 3.2-16 3.2-22.4v-160c0-19.2-12.8-32-32-32s-32 12.8-32 32V601.6l-134.4-134.4c-9.6-9.6-28.8-9.6-41.6 3.2s-12.8 32-3.2 41.6l134.4 134.4h-115.2c-19.2 0-32 12.8-32 32s12.8 32 32 32h160c9.6 0 16 0 22.4-3.2 9.6 0 19.2-3.2 25.6-9.6s12.8-19.2 12.8-25.6z m-140.8-393.6c35.2 35.2 89.6 38.4 128 6.4l124.8-99.2c41.6-32 48-92.8 16-134.4-3.2-3.2-3.2-6.4-6.4-6.4l-86.4-86.4c-83.2-83.2-307.2 35.2-521.6 249.6S9.6 643.2 89.6 726.4l86.4 86.4c38.4 38.4 99.2 38.4 134.4 0l6.4-6.4L416 681.6c32-38.4 28.8-92.8-6.4-128l-54.4-54.4c35.2-57.6 73.6-108.8 118.4-153.6s96-83.2 153.6-118.4l57.6 51.2z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="youxiajiao" unicode="&#59270;" d="M800 140.8l-572.8 572.8c-12.8 12.8-32 12.8-44.8 0-12.8-12.8-12.8-32 0-44.8l572.8-572.8h-435.2c-19.2 0-32-12.8-32-32s12.8-32 32-32h480c35.2 0 64 28.8 64 64v480c0 19.2-12.8 32-32 32s-32-12.8-32-32v-435.2z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhiding" unicode="&#59271;" d="M111.50222222 857.31555555c0 21.84533333 14.56355555 36.40888889 36.40888889 36.4088889h728.17777778c21.84533333 0 36.40888889-14.56355555 36.40888889-36.4088889s-14.56355555-36.40888889-36.40888889-36.40888888h-728.17777778c-21.84533333 0-36.40888889 14.56355555-36.40888889 36.40888888z m436.90666667-236.65777777v-709.97333333c0-21.84533333-14.56355555-36.40888889-36.40888889-36.4088889s-36.40888889 14.56355555-36.40888889 36.4088889v709.97333333l-298.55288889-298.55288889c-14.56355555-14.56355555-36.40888889-14.56355555-50.97244444 0-14.56355555 14.56355555-14.56355555 36.40888889 0 50.97244444l360.448 360.448c7.28177778 7.28177778 18.20444445 10.92266667 25.48622222 10.92266667s18.20444445-3.64088889 25.48622222-10.92266667l360.448-360.448c14.56355555-14.56355555 14.56355555-36.40888889 0-50.97244444-14.56355555-14.56355555-36.40888889-14.56355555-50.97244444 0l-298.55288889 298.55288889z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="ziliaoduibi" unicode="&#59272;" d="M149.33333334 611.55555556v-614.4h614.4v614.4h-614.4z m0 68.26666667h614.4c37.54666667 0 68.26666667-30.72 68.26666666-68.26666667v-614.4c0-37.54666667-30.72-68.26666667-68.26666666-68.26666666h-614.4c-37.54666667 0-68.26666667 30.72-68.26666667 68.26666666v614.4c0 37.54666667 30.72 68.26666667 68.26666667 68.26666667z m136.53333333-204.8h341.33333333c20.48 0 34.13333333-13.65333333 34.13333334-34.13333333s-13.65333333-34.13333333-34.13333334-34.13333334h-341.33333333c-20.48 0-34.13333333 13.65333333-34.13333333 34.13333334s13.65333333 34.13333333 34.13333333 34.13333333z m0-136.53333333h341.33333333c20.48 0 34.13333333-13.65333333 34.13333334-34.13333334s-13.65333333-34.13333333-34.13333334-34.13333333h-341.33333333c-20.48 0-34.13333333 13.65333333-34.13333333 34.13333333s13.65333333 34.13333333 34.13333333 34.13333334z m0-136.53333334h341.33333333c20.48 0 34.13333333-13.65333333 34.13333334-34.13333333s-13.65333333-34.13333333-34.13333334-34.13333333h-341.33333333c-20.48 0-34.13333333 13.65333333-34.13333333 34.13333333s13.65333333 34.13333333 34.13333333 34.13333333z m34.13333333 546.13333334c-20.48 0-34.13333333 13.65333333-34.13333333 34.13333333s13.65333333 34.13333333 34.13333333 34.13333333h546.13333334c58.02666667 0 102.4-44.37333333 102.4-102.4v-546.13333333c0-20.48-13.65333333-34.13333333-34.13333334-34.13333333s-34.13333333 13.65333333-34.13333333 34.13333333v546.13333333c0 20.48-13.65333333 34.13333333-34.13333333 34.13333334h-546.13333334z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zuoxiajiao" unicode="&#59273;" d="M224 153.6l572.8 572.8c12.8 12.8 32 12.8 44.8 0 12.8-12.8 12.8-32 0-44.8l-572.8-572.8h435.2c19.2 0 32-12.8 32-32s-12.8-32-32-32h-480c-35.2 0-64 28.8-64 64v480c0 19.2 12.8 32 32 32s32-12.8 32-32v-435.2z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="rili" unicode="&#59274;" d="M921.6 465.06666667v170.66666667c0 20.48-13.65333333 34.13333333-34.13333333 34.13333333h-170.66666667v-34.13333333c0-20.48-13.65333333-34.13333333-34.13333333-34.13333334s-34.13333333 13.65333333-34.13333334 34.13333334v34.13333333h-273.06666666v-34.13333333c0-20.48-13.65333333-34.13333333-34.13333334-34.13333334s-34.13333333 13.65333333-34.13333333 34.13333334v34.13333333h-170.66666667c-20.48 0-34.13333333-13.65333333-34.13333333-34.13333333v-170.66666667h819.2z m0-68.26666667h-819.2v-307.2c0-20.48 13.65333333-34.13333333 34.13333333-34.13333333h750.93333334c20.48 0 34.13333333 13.65333333 34.13333333 34.13333333v307.2z m-204.8 341.33333334h170.66666667c58.02666667 0 102.4-44.37333333 102.4-102.4v-546.13333334c0-58.02666667-44.37333333-102.4-102.4-102.4h-750.93333334c-58.02666667 0-102.4 44.37333333-102.4 102.4v546.13333334c0 58.02666667 44.37333333 102.4 102.4 102.4h170.66666667v34.13333333c0 20.48 13.65333333 34.13333333 34.13333333 34.13333333s34.13333333-13.65333333 34.13333334-34.13333333v-34.13333333h273.06666666v34.13333333c0 20.48 13.65333333 34.13333333 34.13333334 34.13333333s34.13333333-13.65333333 34.13333333-34.13333333v-34.13333333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shujubaobiao" unicode="&#59276;" d="M348.8 800c-6.4-3.2-9.6-3.2-16-6.4-163.2-70.4-272-230.4-272-412.8 0-246.4 201.6-448 448-448 182.4 0 345.6 112 416 278.4 0 3.2 3.2 6.4 3.2 6.4 6.4 16-3.2 35.2-19.2 41.6s-35.2-3.2-41.6-19.2c0-3.2-3.2-3.2-3.2-6.4-57.6-144-198.4-236.8-355.2-236.8-211.2 0-384 172.8-384 384 0 153.6 92.8 291.2 230.4 352 3.2 3.2 6.4 3.2 12.8 6.4 16 6.4 25.6 25.6 19.2 41.6-3.2 19.2-22.4 25.6-38.4 19.2z m195.2-384h352c-16 185.6-163.2 336-352 352v-352z m-32 416c246.4 0 448-201.6 448-448 0-19.2-12.8-32-32-32h-416c-19.2 0-32 12.8-32 32v416c0 19.2 12.8 32 32 32z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tianjiawenjian" unicode="&#59280;" d="M546.13333333 452.26666667c0 20.48-13.65333333 34.13333333-34.13333333 34.13333333s-34.13333333-13.65333333-34.13333333-34.13333333v-136.53333334h-136.53333334c-20.48 0-34.13333333-13.65333333-34.13333333-34.13333333s13.65333333-34.13333333 34.13333333-34.13333333h136.53333334v-136.53333334c0-20.48 13.65333333-34.13333333 34.13333333-34.13333333s34.13333333 13.65333333 34.13333333 34.13333333v136.53333334h136.53333334c20.48 0 34.13333333 13.65333333 34.13333333 34.13333333s-13.65333333 34.13333333-34.13333333 34.13333333h-136.53333334v136.53333334zM877.22666667 612.69333333l-238.93333334 238.93333334c-6.82666667 6.82666667-13.65333333 10.24-23.89333333 10.24h-375.46666667c-58.02666667 0-102.4-44.37333333-102.4-102.4v-750.93333334c0-58.02666667 44.37333333-102.4 102.4-102.4h546.13333334c58.02666667 0 102.4 44.37333333 102.4 102.4v580.26666667c0 10.24-3.41333333 17.06666667-10.24 23.89333333z m-262.82666667 167.25333334l191.14666667-191.14666667h-191.14666667v191.14666667z m204.8-771.41333334c0-20.48-13.65333333-34.13333333-34.13333333-34.13333333h-546.13333334c-20.48 0-34.13333333 13.65333333-34.13333333 34.13333333v750.93333334c0 20.48 13.65333333 34.13333333 34.13333333 34.13333333h307.2v-204.8c0-37.54666667 30.72-68.26666667 68.26666667-68.26666667h204.8v-512z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yejiguanli" unicode="&#59288;" d="M477.86666667 547.8399999999999l-85.33333334 85.33333333c-13.65333333 13.65333333-13.65333333 34.13333333 0 47.78666667 13.65333333 13.65333333 34.13333333 13.65333333 47.78666667 0l71.68-71.68 71.68 71.68c13.65333333 13.65333333 34.13333333 13.65333333 47.78666667 0 13.65333333-13.65333333 13.65333333-34.13333333 0-47.78666667l-85.33333334-85.33333333v-27.30666667h68.26666667c20.48 0 34.13333333-13.65333333 34.13333333-34.13333333s-13.65333333-34.13333333-34.13333333-34.13333333h-68.26666667v-68.26666667c0-20.48-13.65333333-34.13333333-34.13333333-34.13333333s-34.13333333 13.65333333-34.13333333 34.13333333v68.26666667h-68.26666667c-20.48 0-34.13333333 13.65333333-34.13333333 34.13333333s13.65333333 34.13333333 34.13333333 34.13333333h68.26666667v27.30666667z m-136.53333334-266.24h341.33333334c20.48 0 34.13333333-13.65333333 34.13333333-34.13333333s-13.65333333-34.13333333-34.13333333-34.13333334h-341.33333334c-20.48 0-34.13333333 13.65333333-34.13333333 34.13333334s13.65333333 34.13333333 34.13333333 34.13333333z m0-136.53333333h341.33333334c20.48 0 34.13333333-13.65333333 34.13333333-34.13333334s-13.65333333-34.13333333-34.13333333-34.13333333h-341.33333334c-20.48 0-34.13333333 13.65333333-34.13333333 34.13333333s13.65333333 34.13333333 34.13333333 34.13333334z m-102.4 648.53333333c-20.48 0-34.13333333-13.65333333-34.13333333-34.13333333v-750.93333334c0-20.48 13.65333333-34.13333333 34.13333333-34.13333333h546.13333334c20.48 0 34.13333333 13.65333333 34.13333333 34.13333333v750.93333334c0 20.48-13.65333333 34.13333333-34.13333333 34.13333333h-546.13333334z m0 68.26666667h546.13333334c58.02666667 0 102.4-44.37333333 102.4-102.4v-750.93333334c0-58.02666667-44.37333333-102.4-102.4-102.4h-546.13333334c-58.02666667 0-102.4 44.37333333-102.4 102.4v750.93333334c0 58.02666667 44.37333333 102.4 102.4 102.4z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yejishenhe" unicode="&#59289;" d="M477.86666667 308.90666667000005l-85.33333334 85.33333333c-13.65333333 13.65333333-13.65333333 34.13333333 0 47.78666667 13.65333333 13.65333333 34.13333333 13.65333333 47.78666667 0l71.68-71.68 71.68 71.68c13.65333333 13.65333333 34.13333333 13.65333333 47.78666667 0 13.65333333-13.65333333 13.65333333-34.13333333 0-47.78666667l-85.33333334-85.33333333v-27.30666667h68.26666667c20.48 0 34.13333333-13.65333333 34.13333333-34.13333333s-13.65333333-34.13333333-34.13333333-34.13333334h-68.26666667v-68.26666666c0-20.48-13.65333333-34.13333333-34.13333333-34.13333334s-34.13333333 13.65333333-34.13333333 34.13333334v68.26666666h-68.26666667c-20.48 0-34.13333333 13.65333333-34.13333333 34.13333334s13.65333333 34.13333333 34.13333333 34.13333333h68.26666667v27.30666667z m68.26666666 484.69333333h-307.2c-20.48 0-34.13333333-13.65333333-34.13333333-34.13333333v-750.93333334c0-20.48 13.65333333-34.13333333 34.13333333-34.13333333h546.13333334c20.48 0 34.13333333 13.65333333 34.13333333 34.13333333v512h-204.8c-37.54666667 0-68.26666667 30.72-68.26666667 68.26666667v204.8z m68.26666667-13.65333333v-191.14666667h191.14666667l-191.14666667 191.14666667z m-375.46666667 81.92h375.46666667c10.24 0 17.06666667-3.41333333 23.89333333-10.24l238.93333334-238.93333334c6.82666667-6.82666667 10.24-13.65333333 10.24-23.89333333v-580.26666667c0-58.02666667-44.37333333-102.4-102.4-102.4h-546.13333334c-58.02666667 0-102.4 44.37333333-102.4 102.4v750.93333334c0 58.02666667 44.37333333 102.4 102.4 102.4z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="youshangjiao" unicode="&#59290;" d="M780.8 672l-579.2-579.2c-12.8-12.8-12.8-32 0-44.8 12.8-12.8 32-12.8 44.8 0l572.8 572.8v-492.8c0-19.2 12.8-32 32-32s32 12.8 32 32v544c0 35.2-28.8 64-64 64h-544c-19.2 0-32-12.8-32-32s12.8-32 32-32h505.6z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zuoshangjiao" unicode="&#59291;" d="M268.8 672l579.2-579.2c12.8-12.8 12.8-32 0-44.8s-32-12.8-44.8 0l-579.2 579.2v-499.2c0-19.2-12.8-32-32-32s-32 12.8-32 32v544c0 35.2 28.8 64 64 64h544c19.2 0 32-12.8 32-32s-12.8-32-32-32h-499.2z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="anzhuo" unicode="&#59086;" d="M275.2 147.2c0-21.7344 17.7664-39.4752 39.4752-39.4752h39.4752v-138.1376c0-32.7424 26.4448-59.2128 59.2128-59.2128s59.2128 26.4448 59.2128 59.2128v138.1376h78.9248v-138.1376a59.136 59.136 0 0 1 59.2128-59.2128 59.136 59.136 0 0 1 59.2128 59.2128v138.1376h39.4752c21.7344 0 39.4752 17.7408 39.4752 39.4752V541.8496h-473.6V147.2zM176.5376 541.8496a59.136 59.136 0 0 1-59.2128-59.2128v-276.2496c0-32.768 26.4448-59.2128 59.2128-59.2128s59.2128 26.4192 59.2128 59.2128V482.6368a59.136 59.136 0 0 1-59.2128 59.2128z m670.9248 0a59.136 59.136 0 0 1-59.2128-59.2128v-276.2496c0-32.768 26.4448-59.2128 59.2128-59.2128s59.2128 26.4192 59.2128 59.2128V482.6368a59.1616 59.1616 0 0 1-59.2128 59.2128z m-196.1728 230.4512l51.5328 51.5072a19.6864 19.6864 0 1 1-27.8528 27.8272l-58.3936-58.2144A235.3152 235.3152 0 0 1 512 818.0992a235.008 235.008 0 0 1-105.1648-24.8576l-58.624 58.624a19.6608 19.6608 0 1 1-27.8016-27.8272l51.712-51.712c-58.5984-43.2128-96.896-112.6656-96.896-191.0016h473.6c-0.0256 78.5152-38.5024 147.968-97.536 190.976z m-218.2144-112.0512h-39.4752V699.6992h39.4752v-39.4496z m197.3248 0h-39.4752V699.6992h39.4752v-39.4496z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fuzhi" unicode="&#58925;" d="M668.23111111 48.960000000000036c-1.6-26.24-23.36-47.04-50.02666667-47.04H174.68444444c-27.62666667 0-50.13333333 22.50666667-50.13333333 50.13333333V495.57333333c0 27.62666667 22.4 50.13333333 50.02666666 50.13333334h60.8v66.13333333h-60.8c-64.10666667 0-116.16-52.16-116.16-116.16v-443.52c0-31.04 12.05333333-60.26666667 34.02666667-82.24 21.97333333-21.97333333 51.09333333-34.02666667 82.13333333-34.02666667h443.62666667c31.04 0 60.16 12.05333333 82.13333333 34.02666667 21.97333333 21.97333333 34.02666667 51.2 34.02666667 82.24v60.69333333h-66.13333333v-63.89333333zM839.96444444 833.49333333H396.44444444c-64 0-116.16-52.05333333-116.16-116.16v-443.52c0-31.04 12.05333333-60.26666667 34.02666667-82.24 21.97333333-21.97333333 51.2-34.02666667 82.24-34.02666666h443.52c64.10666667 0 116.16 52.16 116.16 116.26666666V717.33333333c-0.21333333 64-52.26666667 116.16-116.26666667 116.16z m-493.54666667-116.26666666c0 13.44 5.12 26.02666667 14.61333334 35.52 9.49333333 9.49333333 21.97333333 14.72 35.41333333 14.72h443.52c13.33333333 0 25.92-5.22666667 35.41333333-14.72 9.49333333-9.49333333 14.61333333-22.08 14.61333334-35.41333334v-445.76l0.10666666-0.10666666c-0.53333333-12.58666667-5.65333333-24.32-14.61333333-33.28-9.49333333-9.49333333-21.97333333-14.61333333-35.41333333-14.61333334H396.44444444c-13.33333333 0-25.92 5.22666667-35.41333333 14.61333334-9.49333333 9.49333333-14.72 22.08-14.72 35.41333333V717.22666667zM595.48444444 326.72h61.01333333V465.06666667h138.34666667v61.01333333H656.49777777V664.42666667h-61.01333333v-138.34666667H457.13777777V465.06666667h138.34666667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xuanzhong" unicode="&#59077;" d="M782.848 524.288l-320-320-3.584-3.584c-10.752-10.752-29.184-10.752-39.936 0L241.152 378.88c-10.752 10.752-10.752 29.184 0 39.936l3.584 3.584c10.752 11.264 28.672 11.264 39.424 0.512l155.136-155.136 299.52 299.52c10.752 10.752 29.184 10.752 39.936 0l3.584-3.584c11.776-10.24 11.776-28.672 0.512-39.424zM128 704v-640c0-35.328 28.672-64 64-64h640c35.328 0 64 28.672 64 64V704c0 35.328-28.672 64-64 64H192c-35.328 0-64-28.672-64-64z m-64 0c0 70.656 57.344 128 128 128h640c70.656 0 128-57.344 128-128v-640c0-70.656-57.344-128-128-128H192c-70.656 0-128 57.344-128 128V704z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shouquan" unicode="&#58917;" d="M905.216-66.56l-1.536 3.072c-32.768 81.408-103.424 134.144-181.248 134.144-77.312 0-148.48-52.736-181.248-134.144l-1.536-3.072h-65.024l2.048 6.656c32.256 99.84 108.544 169.984 200.192 187.904-69.12 20.48-117.76 86.528-113.152 162.304 5.12 78.848 68.608 142.848 147.456 148.48 92.672 6.144 169.984-67.072 169.984-158.208 0-71.68-47.616-132.608-113.664-152.064 91.648-17.92 167.936-88.064 200.192-187.904l2.048-6.656h-64.512z m-172.544 443.392c-61.44 6.144-112.64-45.056-106.496-106.496 4.608-45.568 41.472-81.92 86.528-86.528 61.44-6.144 112.64 45.056 106.496 106.496-4.096 45.568-40.96 82.432-86.528 86.528zM51.2 1.024V770.56c0 35.328 28.672 64 64 64h793.6c35.328 0 64-28.672 64-64v-597.504c0-16.896-13.824-30.72-30.72-30.72s-30.72 13.824-30.72 30.72v398.336h-798.72v-553.472c0-12.8 10.24-23.04 23.04-23.04h239.616c16.896 0 30.72-13.824 30.72-30.72s-13.824-30.72-30.72-30.72h-257.024c-36.864 0-67.072 30.208-67.072 67.584z m860.16 631.808v115.712c0 13.312-10.752 24.576-24.576 24.576h-750.08c-13.312 0-23.552-10.752-23.552-23.552v-116.224H911.36z m-149.504 68.608c0 16.896 13.824 30.72 30.72 30.72s30.72-13.824 30.72-30.72-13.824-30.72-30.72-30.72-30.72 13.824-30.72 30.72z m-112.64 0c0 16.896 13.824 30.72 30.72 30.72s30.72-13.824 30.72-30.72-13.824-30.72-30.72-30.72-30.72 13.824-30.72 30.72z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="refresh2" unicode="&#58916;" d="M888.23000001 503.917L718.385 503.91699999c-21.66789999 0-39.1942 17.5561-39.1942 39.19610001 0 21.6382 17.5273 39.1942 39.1942 39.19419999l68.1819 1e-8c-61.5039 86.9065-162.641 143.715-277.223 143.715-187.607 0-339.692-152.086-339.692-339.69 0-187.606 152.086-339.691 339.692-339.691 187.606 0 339.691 152.086 339.691 339.691 0 21.6382 17.5264 39.1942 39.19329999 39.1942 21.63999999 0 39.1971-17.5561 39.19710001-39.1942 0-230.899-187.2-418.082-418.082-418.082-230.88499999 0-418.08299999 187.182-418.083 418.082 0 230.898 187.198 418.081 418.083 418.08100001 140.127 0 263.895-69.0866 339.691-174.93500001l0 70.4143c0 21.63999999 17.5264 39.1952 39.1933 39.1952 21.63999999 0 39.1971-17.5552 39.1971-39.1952l0-156.78C927.427 521.473 909.868 503.917 888.23000001 503.917Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="lajitong1" unicode="&#58918;" d="M608 128c-17.696 0-32 14.304-32 32V512c0 17.696 14.304 32 32 32s32-14.304 32-32v-352c0-17.696-14.304-32-32-32z m-192 0c-17.696 0-32 14.304-32 32V512c0 17.696 14.304 32 32 32s32-14.304 32-32v-352c0-17.696-14.304-32-32-32z m512 544H768v64c0 52.928-42.72 96-95.264 96H352c-52.928 0-96-43.072-96-96v-64H96c-17.696 0-32-14.304-32-32s14.304-32 32-32h832c17.696 0 32 14.304 32 32s-14.304 32-32 32z m-608 64c0 17.632 14.368 32 32 32h320.736C690.272 768 704 753.952 704 736v-64H320v64z m416.128-800H288.064c-52.928 0-96 43.072-96 96V512.48c0 17.664 14.336 32 32 32s32-14.336 32-32V32c0-17.664 14.368-32 32-32h448.064c17.664 0 32 14.336 32 32V511.168c0 17.664 14.304 32 32 32s32-14.336 32-32V32c0-52.928-43.072-96-96-96z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="qunzu1" unicode="&#59005;" d="M636.40576 420.68650667c49.26805333 38.68444445 81.05187555 98.60892445 81.05187555 165.95171555 0 116.40376889-94.68928 211.0976-211.10101333 211.0976-116.40718222 0-211.0976-94.68928-211.0976-211.0976 0-67.34392889 31.81795555-127.26727111 81.05187556-165.95171555-129.73852445-51.84853333-221.78474667-178.60152889-221.78474667-326.61162667v-70.36586666c0-19.44803555 15.73546667-35.18691555 35.18691556-35.18691556h633.29621333c19.44803555 0 35.17895111 15.73546667 35.17895111 35.18691556v70.36472888c0.00341333 148.05105778-92.01095111 274.76423111-221.78247111 326.61276445zM506.36117333 727.37109334c77.61351111 0 140.73059555-63.11594667 140.73059556-140.73059556 0-77.61806222-63.11594667-140.73742222-140.73059556-140.73742222-77.61806222 0-140.73628445 63.11708445-140.73628444 140.73742222-0.00113778 77.61351111 63.11594667 140.73059555 140.73628444 140.73059556z m281.46119112-668.48426667H224.88974222v35.18577778c0 155.19630222 126.26716445 281.46346667 281.50101333 281.46346667 155.19630222 0 281.42933333-126.26716445 281.42933334-281.46346667v-35.18577778z m0 0zM270.82865778 408.45425778c0.96483555 2.12764445 0.96483555 4.39523555 1.44156444 6.59569778 0.34133333 1.34030222 0.72362667 2.61006222 0.89656889 4.02090666 0.27079111 2.78072889 0.10467555 5.42606222-0.27648 8.13966223-0.13539555 1.44156445 0.20593778 2.81941333-0.13539556 4.26097777-0.20593778 0.82716445-0.78848 1.40970667-1.03310222 2.23687112-0.54499555 1.57696-1.30048 2.98666667-2.05710222 4.46236444-1.44952889 3.02535111-3.02535111 5.77194667-5.19054222 8.21134222-0.31061333 0.34133333-0.68608 0.58595555-1.02968889 0.92956445a33.80337778 33.80337778 0 0 1-11.06375111 7.69592889c-38.07118222 16.97109333-62.67335111 54.77034667-62.67335111 96.41073778 0 48.99612445 33.18784 91.18947555 80.73784889 102.62869333 18.89735111 4.57159111 30.51064889 23.57361778 25.97888 42.47210667-4.60344889 18.89393778-23.67715555 30.37070222-42.47210667 25.97546666-79.26442667-19.10442667-134.61504-89.47370667-134.61504-171.07285333 0-44.53034667 16.94037333-86.27313778 45.73070222-118.01941333-91.56266667-47.45216-151.27893333-142.34624-151.27893333-249.72060445v-54.42446222c0-19.44803555 15.73546667-35.18691555 35.17895111-35.18691556 19.44803555 0 35.18691555 15.73546667 35.18691555 35.18691556v54.42446222c0 97.30616889 65.41880889 180.79857778 159.28775112 204.43591111 11.67701333 1.64864 22.29816889 8.75861333 27.37948444 20.33777778z m0 0z m576.67811555 24.94236444c28.79146667 31.74741333 45.72728889 73.49248 45.72728889 118.02282667 0 79.47036445-53.52903111 149.35722667-130.17998222 169.93848889-18.72554667 5.0176-38.03591111-6.08256-43.12405333-24.83882666-5.04945778-18.79495111 6.08256-38.07004445 24.84679111-43.12405334 45.96963555-12.33123555 78.09365333-54.28565333 78.09365333-101.97674666 0-41.63925333-24.56348445-79.36568889-62.59939556-96.37546667-4.25756445-1.85685333-8.00654222-4.42823111-11.23100444-7.79719111-0.27648-0.31061333-0.62122667-0.51655111-0.89656889-0.82716445-2.19704889-2.43825778-3.77514667-5.25767111-5.25767111-8.31488-0.72021333-1.47456-1.50869333-2.85240889-2.02524444-4.39523555-0.24007111-0.78848-0.82602667-1.40970667-1.02968889-2.23345778-0.34133333-1.44156445 0-2.81827555-0.14108445-4.26097778-0.37546667-2.71473778-0.54385778-5.36007111-0.27079111-8.14421333 0.17408-1.40515555 0.55068445-2.67719111 0.89201778-4.01749333 0.47900445-2.19932445 0.47900445-4.46691555 1.44156445-6.60138667 5.08928-11.57575111 15.70588445-18.69255111 27.38176-20.33436445 93.86780445-23.64302222 159.28661333-107.12974222 159.28661333-204.43591111v-54.42901333c0-19.44348445 15.73546667-35.17895111 35.18691555-35.17895111 19.44348445 0 35.17895111 15.73546667 35.17895112 35.17895111v54.42901333c0 107.37322667-59.71285333 202.27072-151.27893334 249.71832889z m0 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bangzhu2" unicode="&#58924;" d="M512 384m-291.27111111 0a291.27111111 291.27111111 0 1 1 582.54222222 0 291.27111111 291.27111111 0 1 1-582.54222222 0ZM512 748.08888889c-20.02488889 0-36.40888889 16.384-36.40888889 36.40888889V857.31555555c0 20.02488889 16.384 36.40888889 36.40888889 36.4088889s36.40888889-16.384 36.40888889-36.4088889v-72.81777777c0-20.02488889-16.384-36.40888889-36.40888889-36.40888889zM876.08888889 384c0 20.02488889 16.384 36.40888889 36.40888889 36.40888889h72.81777777c20.02488889 0 36.40888889-16.384 36.4088889-36.40888889s-16.384-36.40888889-36.4088889-36.40888889h-72.81777777c-20.02488889 0-36.40888889 16.384-36.40888889 36.40888889zM439.18222222-89.31555555c0 20.02488889 16.384 36.40888889 36.40888889 36.40888888h72.81777778c20.02488889 0 36.40888889-16.384 36.40888889-36.40888888s-16.384-36.40888889-36.40888889-36.4088889h-72.81777778c-20.02488889 0-36.40888889 16.384-36.40888889 36.4088889zM366.36444445 19.91111110999998c0 20.02488889 16.384 36.40888889 36.40888888 36.40888889h218.45333334c20.02488889 0 36.40888889-16.384 36.40888888-36.40888889s-16.384-36.40888889-36.40888888-36.40888889H402.77333333c-20.02488889 0-36.40888889 16.384-36.40888888 36.40888889zM2.27555555 384c0 20.02488889 16.384 36.40888889 36.4088889 36.40888889h72.81777777c20.02488889 0 36.40888889-16.384 36.40888889-36.40888889s-16.384-36.40888889-36.40888889-36.40888889H38.68444445c-20.02488889 0-36.40888889 16.384-36.4088889 36.40888889zM117.0849189 706.0973033299999c14.19946667 14.19946667 37.37979221 14.19946667 51.45789553 0l51.45789668-51.45789554c14.19946667-14.19946667 14.19946667-37.37979221 0-51.45789668-14.19946667-14.19946667-37.37979221-14.19946667-51.45789668 0L117.0849189 654.63940779c-14.19946667 14.19946667-14.19946667 37.37979221 0 51.45789554zM803.99928889 603.18151111c-14.19946667 14.19946667-14.19946667 37.37979221 0 51.45789668l51.45789668 51.45789554c14.19946667 14.19946667 37.37979221 14.19946667 51.45789553 0 14.19946667-14.19946667 14.19946667-37.37979221 0-51.45789554L855.45718557 603.18151111c-14.19946667-14.19946667-37.37979221-14.19946667-51.45789668 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bumen" unicode="&#59318;" d="M919.85237332 213.69120237000004V360.88020385000004c0 57.94353303-47.14708385 105.09061689-105.09061688 105.0906169H539.10277689V556.38137364a137.32461985 137.32461985 0 0 1 103.53717096 132.81962666c0 75.73048889-61.51645867 137.24694755-137.24694756 137.24694755-75.5751443 0-137.16927525-61.51645867-137.16927527-137.16927526 0-64.00197215 44.1178643-117.75120118 103.45949867-132.81962667V465.97082075h-249.3280711c-57.94353303 0-105.09061689-47.14708385-105.0906169-105.0906169v-147.18900148A137.40229215 137.40229215 0 0 1 13.80503702 80.8715757c0-75.65281659 61.51645867-137.24694755 137.16927527-137.24694755 75.73048889 0 137.24694755 61.51645867 137.24694756 137.24694755 0 64.00197215-44.1178643 117.67352889-103.53717096 132.81962667V360.88020385000004c0 20.81617541 16.93256059 37.6710637 37.6710637 37.67106371h249.3280711v-184.86006519a137.40229215 137.40229215 0 0 1-103.45949867-132.81962667c0-75.73048889 61.51645867-137.24694755 137.16927527-137.24694755s137.24694755 61.51645867 137.24694756 137.16927527c0 64.00197215-44.1178643 117.75120118-103.53717096 132.81962666V398.62893985h275.65897955c20.73850311 0 37.6710637-16.8548883 37.6710637-37.6710637v-147.18900148a137.40229215 137.40229215 0 0 1-103.53717096-132.81962667c0-75.65281659 61.51645867-137.24694755 137.24694756-137.24694755 75.65281659 0 137.16927525 61.51645867 137.16927525 137.24694755 0 64.00197215-44.1178643 117.67352889-103.45949867 132.81962667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="you4" unicode="&#58928;" d="M511.99945387-78.23204907000002c260.06713067 0 470.88894613 206.946896 470.88894613 462.23204907s-210.82290773 462.23204907-470.88894613 462.23204907c-260.063856 0-470.88676373-206.946896-470.88676374-462.23204907S251.93559787-78.23204907000002 511.99945387-78.23204907000002zM305.989088 412.89052587L617.53697919 412.89052587l-121.29589438 119.05608213c-11.4948672 11.28529387-11.4948672 29.57491307-1e-8 40.86020693 11.4948672 11.2842016 30.13050027 11.2842016 41.61772692 0l166.48400534-163.42336426c7.06108587-6.93337707 9.24632213-16.41110293 7.63632001-25.38345174 1.61000213-8.9723488-0.57523413-18.45116586-7.63632-25.38235946l-166.48400534-163.42336427c-11.4861344-11.28529387-30.12285973-11.28529387-41.61772693 0-11.4948672 11.27546987-11.4948672 29.57382187 0 40.8514752L617.53697919 355.11056533l-311.54789119 0c-16.26047147 0-29.43301547 12.93131627-29.43301546 28.88943467C276.55607253 399.94938668 289.72752427 412.89052587 305.989088 412.89052587z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="del2" unicode="&#58931;" d="M512 475.01573191L178.42584078 808.66498544a64.35683261 64.35683261 0 1 1-91.01573001-91.01573188L420.90917375 384l-333.6492554-333.57415922a64.35683261 64.35683261 0 1 1 91.01573191-91.01573001L512 292.90917375000004l333.57415922-333.6492554a64.35683261 64.35683261 0 1 1 91.01573001 91.01573191L603.09082625 384l333.6492554 333.57415922a64.35683261 64.35683261 0 1 1-91.01573191 91.01573001L512 475.09082625z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biaodanliucheng_yingyongfenzu" unicode="&#58938;" d="M690.38737383 634.72551506V864.24715061H180.59820247c-56.31241482 0-102.00961581-45.69720098-102.0096158-102.0096158v-764.81321087c0-56.31241482 45.69720098-102.00961581 102.0096158-102.00961579h662.80359506c56.31241482 0 102.00961581 45.69720098 102.0096158 102.00961579V609.22311111H715.88977778c-13.98101333 0-25.50240395 11.3919368-25.50240395 25.50240395z m-458.78436346-76.50721186c0 14.11046717 11.3919368 25.50240395 25.50240394 25.50240396H512c14.11046717 0 25.50240395-11.3919368 25.50240395-25.50240396v-51.0048079c0-14.11046717-11.3919368-25.50240395-25.50240395-25.50240394H257.10541431c-14.11046717 0-25.50240395 11.3919368-25.50240394 25.50240394v51.0048079z m458.78436346-356.90420148c0-14.11046717-11.3919368-25.50240395-25.50240396-25.50240394h-407.77955556c-14.11046717 0-25.50240395 11.3919368-25.50240394 25.50240394v51.00480791c0 14.11046717 11.3919368 25.50240395 25.50240394 25.50240395h407.90900939c14.11046717 0 25.50240395-11.3919368 25.50240395-25.50240395v-51.00480791zM767.0240395 660.22791902h178.38737383L741.39218173 864.24715061v-178.38737381c0-14.23992098 11.52139061-25.63185778 25.63185777-25.63185778z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biaodanliucheng_yingyongfenzu1" unicode="&#58942;" d="M848.5394963 816.17351111H175.4605037c-52.55016297 0-95.63401482-42.96248889-95.63401481-95.63401481v-673.20035555c0-52.55016297 42.96248889-95.63401482 95.63401481-95.63401483h673.20035555c52.55016297 0 95.63401482 42.96248889 95.63401483 95.63401483V720.5394963c-0.12136297 52.67152592-43.08385185 95.63401482-95.75537778 95.63401481z m-51.21517038-286.0525037L511.63591111 176.46933333000004c-7.88859259-9.8304-18.81125925-15.53445925-30.21937778-17.71899258-16.01991111-5.94678518-34.83117037-3.51952592-49.03063703 7.88859258L238.56924445 323.07579259c-21.60260741 17.47626667-25.00077037 49.39472592-7.64586667 70.99733333 17.3549037 21.60260741 49.39472592 25.00077037 70.99733333 7.64586667l158.25730371-127.7952 258.38174815 319.91277038c17.3549037 21.60260741 49.39472592 25.00077037 70.99733333 7.64586666 21.72397037-17.71899259 25.12213333-49.75881482 7.76722962-71.36142222z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="mima1" unicode="&#58932;" d="M836.778667-88.23466699999994H187.221333C131.072-88.23466699999994 85.333333-45.397333 85.333333 7.765333000000055V415.232C85.333333 468.309333 130.56 511.146667 187.221333 511.146667h25.088V606.122667C212.309333 770.986667 346.624 896 512 896s299.690667-125.013333 299.690667-289.877333v-95.488h25.088c56.149333 0 101.888-42.752 101.888-95.914667v-407.466667c0-52.650667-45.738667-95.488-101.888-95.488zM469.162667 214.44266700000003V107.51999999999998c0-22.186667 19.2-40.362667 42.837333-40.362667s42.837333 18.261333 42.837333 40.362667V214.44266700000003a79.530667 79.530667 0 0 1 42.752 69.888c0 44.714667-38.4 81.152-85.589333 81.152-47.274667 0-85.589333-36.437333-85.589333-81.152 0-30.037333 17.152-56.149333 42.752-69.973334z m256.853333 394.666666C726.101333 720.810667 630.186667 811.8613330000001 512 811.8613330000001S297.898667 720.810667 297.898667 609.109333V511.146667H726.186667V609.109333z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="i" unicode="&#58933;" d="M464 829.9c-49.6-5-104.6-21-150.8-43.9-91.2-45.2-159-112.8-204-204C0.6 363.2 89.5 97 307.9-13.9c220.3-112 489-23.9 601 196.6 87.8 172.7 54.4 381.5-82.5 518.2-94.8 95-228.4 142.4-362.4 129z m124.8-167.8c15.1-5.7 29.2-18.5 36.3-33.2 4.6-9.7 5.7-14.5 5.7-26.7-0.2-18.9-5.9-31.3-21-44.9-42.2-38.7-114.3-10.7-114.3 43.9 0 7.8 1 17.2 2.5 21.2 6.1 17.9 22.5 33.8 41.6 40.3 13.7 4.8 35.3 4.4 49.2-0.6z m-49.6-187c17-6.1 33.8-20.8 40.3-36.1 11.1-25.6 8.2-51.7-14.7-132.8-19.7-70.2-23.1-85.1-23.1-103.6 0-16.8 4.2-26.5 13.7-30.9 10.1-4.8 37.2-4.4 53.8 0.8 7.3 2.1 13.7 3.8 14.1 3.4 0.4-0.4-1-7.3-3.2-15.3l-3.8-14.3-16.8-6.7c-47.5-19.1-75.8-24.4-106.1-19.7-28.6 4.4-48.3 17-59.9 38.4-4.8 9-6.3 14.3-6.9 28.6-1.3 24.6 1.9 40.7 20.8 107.8 19.1 68.3 22.9 85.1 22.9 102.7 0 17.4-4.2 26.7-13.9 30.7-10.9 4.6-36.5 4-53.1-1l-13.2-4.2 1.3 7.8c3.8 23.1 2.9 22.3 31.3 32.6 24.6 9 43.7 14.7 57.1 17 14 2 46.2-0.8 59.4-5.2z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bianji2" unicode="&#58934;" d="M35.22155457 142.82752000000005v-180.58808889h180.5880889l522.99346171 527.6537995-180.58808888 180.58808889-522.99346173-527.6537995z m841.32042271 485.06349037c19.02971259 19.02971259 19.02971259 47.50955457 0 66.53926716l-109.38848395 109.38848395c-19.02971259 19.02971259-47.50955457 19.02971259-66.53926716 0l-85.56897975-85.56897975 180.58808889-180.5880889 80.90864197 90.22931754zM462.9369995 57.38799408l-95.01910913-95.01910914h618.01257087v95.01910914h-522.99346174z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wode1" unicode="&#58935;" d="M772.79677403 281.05765925000003c-15.53445925 11.65084445-42.71976297 7.76722963-54.37060742-7.76722962-11.65084445-15.53445925-7.76722963-42.71976297 7.76722964-54.37060741 77.6722963-58.25422222 128.15928889-147.57736297 139.81013333-244.66773334 0-19.41807408 19.41807408-34.95253333 38.83614815-34.95253333h3.8836148c23.30168889 3.88361482 38.83614815 19.41807408 34.95253334 42.71976296-15.53445925 116.50844445-77.6722963 225.24965925-170.87905184 299.03834074M512.59458143 366.49718518c-108.74121482 0-194.18074075 85.43952592-194.18074074 194.18074074s85.43952592 194.18074075 194.18074074 194.18074074 194.18074075-85.43952592 194.18074074-194.18074074-85.43952592-194.18074075-194.18074074-194.18074074m0 466.03377778c-151.46097778 0-271.85303703-120.39205925-271.85303704-271.85303704 0-93.20675555 46.60337778-174.76266667 116.50844444-221.36604444-147.57736297-58.25422222-252.43496297-190.29712592-271.85303703-357.29256297-3.88361482-19.41807408 11.65084445-38.83614815 34.95253333-42.71976296h3.88361482c19.41807408 0 34.95253333 15.53445925 38.83614815 34.95253333 19.41807408 178.64628148 166.99543703 314.5728 349.52533333 314.5728 151.46097778 0 271.85303703 120.39205925 271.85303703 271.85303704s-120.39205925 271.85303703-271.85303703 271.85303704"  horiz-adv-x="1027" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="refresh3" unicode="&#58999;" d="M688 129.72799999999995a301.376 301.376 0 0 0-204.8-54.656c-3.392 0.32-6.72 0.896-10.176 1.344-6.528 0.896-13.056 1.728-19.392 3.008a220.672 220.672 0 0 0-11.648 2.688 261.376 261.376 0 0 0-18.496 4.8c-2.88 0.896-5.76 1.92-8.704 2.944a298.176 298.176 0 0 0-25.28 9.728 292.48 292.48 0 0 0-23.36 11.456l-1.024 0.512a311.744 311.744 0 0 0-89.152 74.432c-1.216 1.472-2.368 3.136-3.584 4.672a311.168 311.168 0 0 0-67.264 193.472h71.168a5.12 5.12 0 0 1 4.544 2.752 4.992 4.992 0 0 1-0.256 5.248L161.088 573.76a5.12 5.12 0 0 1-8.64 0L32.896 392.128c-1.024-1.472-1.216-3.52-0.256-5.248s2.688-2.752 4.544-2.752h71.168c0-86.016 26.496-165.696 71.424-231.552 0.576-0.96 0.96-1.92 1.536-2.816 4.672-6.72 9.856-12.992 14.848-19.392 1.856-2.368 3.648-4.864 5.568-7.232 7.36-9.088 15.168-17.472 23.232-25.856l2.24-2.304a397.888 397.888 0 0 1 122.752-84.8l7.424-3.328c8.512-3.584 17.344-6.72 26.112-9.728 4.16-1.408 8.256-2.88 12.48-4.16 7.744-2.304 15.616-4.224 23.552-6.144 5.312-1.28 10.496-2.624 15.936-3.648 2.176-0.512 4.288-1.152 6.528-1.472 7.488-1.344 14.976-2.112 22.528-3.008l8.064-1.152a397.12 397.12 0 0 1 271.104 71.936 49.408 49.408 0 0 1 11.904 68.224A48.064 48.064 0 0 1 688 129.72799999999995m227.776 254.4a409.856 409.856 0 0 1-71.104 231.04c-0.704 1.152-1.152 2.304-1.792 3.264a428.928 428.928 0 0 1-17.664 23.04l-2.112 2.752a399.68 399.68 0 0 1-150.656 114.624 161.28 161.28 0 0 0-4.8 2.24 502.976 502.976 0 0 1-28.352 10.56c-3.648 1.152-7.04 2.432-10.624 3.456a377.856 377.856 0 0 1-25.344 6.656c-4.672 1.088-9.408 2.304-14.208 3.264-2.368 0.448-4.544 1.152-6.912 1.6-6.4 1.152-12.8 1.6-19.2 2.432-4.352 0.576-8.768 1.28-13.184 1.728a413.568 413.568 0 0 1-32 1.6c-1.92 0-3.84 0.32-5.824 0.32a397.312 397.312 0 0 1-231.488-73.92 49.408 49.408 0 0 1-11.968-68.288 48.128 48.128 0 0 1 67.584-11.968 302.464 302.464 0 0 0 205.12 54.656l8.128-1.152c7.36-0.832 14.592-1.92 21.696-3.328 3.136-0.576 6.272-1.408 9.344-2.112 6.976-1.6 14.016-3.328 20.8-5.376l6.4-2.24c7.808-2.56 15.424-5.312 22.976-8.512l2.368-1.088c45.12-19.648 84.736-49.92 115.648-87.808l0.576-0.768a311.04 311.04 0 0 0 69.696-196.736h-71.104a5.12 5.12 0 0 1-4.288-8l119.616-181.568a5.12 5.12 0 0 1 8.576 0l119.488 181.568a5.12 5.12 0 1 1-4.288 8h-71.104v0.064z m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tianjia" unicode="&#58984;" d="M821.36428614-66H202.61428614C123.86428613-66 62-4.114286129999982 62 74.63571386000001V693.38571386C62 772.13571387 123.86428613 834.02142862 202.61428614 834.02142862h618.75C900.11428613 834.02142862 962 772.13571387 962 693.38571386v-618.75C962-4.114286129999982 900.11428613-66 821.36428614-66z m79.26428495 756.81428555c0 46.58571387-35.25000029 81.81428555-81.81428554 81.81428554H205.18571445c-46.84285723 0.21428614-84.55714278-34.75714307-83.16428554-82.39285723-0.12857168-14.4 1.35-613.05000029 1.35-613.04999941 0-46.56428613 35.25000029-81.81428555 81.81428554-81.81428554h613.6285711c46.56428613 0 81.81428555 35.25000029 81.81428554 81.81428554V690.81428555z m-173.54999971-347.65714248h-174.23571445v-174.23571445c0-16.94999971-13.73571387-30.68571445-30.68571445-30.68571446h-0.23571386a30.68571445 30.68571445 0 0 0-30.68571446 30.68571446v174.23571445h-194.31428554a30.68571445 30.68571445 0 0 0-30.68571446 30.68571445v0.23571386c0 16.94999971 13.73571387 30.68571445 30.68571446 30.68571446h194.31428554v194.31428554c0 16.94999971 13.73571387 30.68571445 30.68571446 30.68571446h0.23571386c16.94999971 0 30.68571445-13.73571387 30.68571445-30.68571446v-194.31428554h174.23571445c16.94999971 0 30.68571445-13.73571387 30.68571446-30.68571446v-0.23571386c0-16.94999971-13.73571387-30.68571445-30.68571446-30.68571445z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wode2" unicode="&#58939;" d="M729.9 328.9c-55.9-54.6-128.5-91-212.3-91-83.8 0-156.4 36.4-217.9 91C160.1 250.1 65.1 147 65.1-41H959c0 188-95 285-229.1 369.9zM512 316.2c133.5 0 240.4 112.2 240.4 245.7S645.6 807.6 512 807.6 271.7 695.5 271.7 561.9c0-138.8 112.1-245.7 240.3-245.7z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gantanhao1" unicode="&#58941;" d="M512.614056 832.139636c247.300053 0 447.772185-200.47115 447.772185-447.771202 0-247.29514-200.472132-447.767273-447.772185-447.767273S64.840888 137.073293 64.840888 384.368434c0 247.300053 200.470659 447.771203 447.773168 447.771202z m0-601.150142c-37.447599 0-67.813903-30.34911-67.813902-67.811447 0-37.447599 30.366304-67.806534 67.813902-67.806533s67.806534 30.358935 67.806534 67.806533c0 37.462336-30.358935 67.811446-67.806534 67.811447z m-1.952698 53.012694c32.260053 0 58.406563 26.156335 58.406562 58.404106V614.96616c0 32.25514-26.14651 58.404843-58.406562 58.404843-32.25514 0-58.40165-26.157072-58.401651-58.404843v-272.559866c0-32.25514 26.14651-58.404107 58.401651-58.404106z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="-" unicode="&#58943;" d="M745.90476177 492.95238136c0-6.85714313 0-13.71428531-6.85714313-20.57142938L505.90476177 211.80952355c-6.85714313-6.85714313-13.71428531-13.71428531-27.42857156-13.71428532-6.85714313 0-13.71428531 0-20.57142844 6.85714313L327.61904802 321.5238098c-13.71428531 13.71428531-13.71428531 34.28571469 0 48 13.71428531 13.71428531 34.28571469 13.71428531 41.14285687 0l109.71428531-96.00000001 212.57142844 240.00000001c6.85714313 6.85714313 13.71428531 6.85714313 20.57142938 6.85714218 6.85714313 0 13.71428531 0 20.57142843-6.85714219 13.71428531 0 13.71428531-6.85714313 13.71428532-20.57142843zM478.4761902 191.23809511000002c-6.85714313 0-20.57142844 0-27.42857156 6.85714312L320.76190489 321.5238098c-13.71428531 13.71428531-20.57142844 41.14285687 0 54.85714218 6.85714313 6.85714313 13.71428531 6.85714313 27.42857157 13.71428625 13.71428531 0 20.57142844 0 27.42857156-6.85714312L478.4761902 294.09523822999995l212.57142844 233.14285688c6.85714313 6.85714313 13.71428531 13.71428531 27.42857156 13.71428625s20.57142844 0 27.42857157-13.71428625c6.85714313-6.85714313 13.71428531-13.71428531 13.71428625-27.42857157 0-6.85714313 0-20.57142844-13.71428625-27.42857156L512.76190489 204.95238136c-6.85714313-6.85714313-20.57142844-13.71428531-34.28571469-13.71428625zM348.19047645 369.5238098c-6.85714313 0-13.71428531 0-13.71428624-6.85714313-13.71428531-6.85714313-6.85714313-20.57142844 0-34.28571469L464.76190489 211.80952355c6.85714313-6.85714313 27.42857156-6.85714313 34.28571375-1e-8L739.04761864 472.38095198v20.57142938c0 6.85714313 0 13.71428531-6.85714218 13.71428531l-13.71428625 13.71428531c-6.85714313 0-13.71428531 0-13.71428532-6.85714218L478.4761902 266.66666667000004 361.90476177 362.66666667000004c0 6.85714313-6.85714313 6.85714313-13.71428532 6.85714313zM512-96c-267.42857156 0-480 212.57142844-480 480s212.57142844 480 480 480 480-212.57142844 480-480-212.57142844-480-480-480zM512 795.42857156C285.71428531 795.42857156 100.57142844 610.2857146900001 100.57142844 384s185.14285688-411.42857156 411.42857156-411.42857156 411.42857156 185.14285688 411.42857156 411.42857156-185.14285688 411.42857156-411.42857156 411.42857156z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shaixuan1" unicode="&#58944;" d="M581.54325334-109.14272395c-17.08790518 0-26.27912691 7.89668347-30.9394647 14.49882864-5.43706075 7.76722963-8.15559111 17.99408197-8.15559111 31.32782616 0.25890765 118.32079803 0.12945383 238.45394963 0.12945383 354.83294026V380.06328887999996v15.79336692c0 10.35630617 0.12945383 20.97152 0 31.45728-0.51781531 36.37652543 12.94538272 70.0345205 42.20194766 106.15213827 23.94895803 29.25656494 48.1568237 59.03094518 71.45851259 87.89914864 33.14017975 40.77795555 67.31599013 82.9799032 101.36234667 124.27567408 11.65084445 14.23992098 14.11046717 24.3373195 8.67340642 36.2470716-5.17815309 11.3919368-14.49882864 13.46319803-32.10454914 13.46319802-93.72457086-0.12945383-188.87313383-0.25890765-282.72715852-0.25890765s-188.87313383 0.12945383-282.72715852 0.25890765c-17.34681283 0-26.66748839-2.07126124-32.23400296-13.46319802-5.56651457-11.52139061-3.23634569-20.84206617 9.06176791-35.85871012 28.73874963-35.08198717 57.73640691-70.94069728 85.69843357-105.50486914 29.38601876-36.37652543 59.93712197-74.04758914 89.97040988-110.81247605 27.05584987-33.14017975 40.26014025-68.86943605 40.26014025-109.38848395v-113.27209877c0-64.85636741 0-132.0429037-0.12945383-198.06435555-0.12945383-28.22093431-15.79336691-47.89791605-38.18887902-47.89791605-3.62470717 0-7.24941431 0.51781531-10.87412148 1.55344593-28.99765728 8.02613728-28.99765728 35.08198717-28.99765728 45.17938567 0.12945383 37.54160987 0 75.60103506 0 112.4953758 0 60.32548347-0.12945383 122.72222815 0.38836148 184.08334223 0.25890765 31.71618765-9.0617679 57.60695309-29.12711112 81.68536494-32.8812721 39.35396347-65.63309037 79.74355753-97.21982419 118.96806716-23.81950419 29.38601876-48.28627753 59.80766815-72.75305087 89.32314074-33.14017975 40.26014025-39.22450963 82.07372642-17.99408197 124.53458173 19.67698173 39.22450963 52.94661531 58.25422222 101.62125431 58.25422222h1.94180742c37.02379457-0.51781531 77.6722963-0.77672297 127.90038123-0.77672297 25.63185778 0 51.65207703 0 76.76611951 0.12945384 25.11404247 0 51.13426173 0.12945383 76.7661195 0.12945381 27.57366518 0 55.66514569 0 82.85044939-0.12945381 27.1853037 0 55.27678419-0.12945383 82.85044939-0.12945384 45.95610864 0 83.49771852 0.12945383 118.1913442 0.51781531h1.42399208c47.89791605 0 81.81481876-20.32425086 100.84453136-60.45493728 9.83849086-20.84206617 13.20429037-41.55467852 10.35630619-61.49056789-2.84798419-19.41807408-11.65084445-38.44778667-26.40858075-56.44186866-21.8776968-26.79694222-43.88484741-54.11169975-65.37418272-80.64973431-36.11761778-44.66157037-73.40032-90.74713283-110.55356839-135.66761087-17.6057205-21.23042765-25.63185778-44.27320889-25.50240396-72.62359703 0.51781531-113.9193679 0.38836148-229.7805432 0.38836149-341.75810371V-63.963338280000016c0-12.55702124-2.71853037-22.65441975-8.02613729-30.29219556-4.66033778-6.60214518-13.59265185-14.62828247-30.16274171-14.88719011h-0.9061768zM871.39037236 384.72362666c-10.48576 0-21.23042765 0-31.58673384 0.12945383-19.93588939 0.12945383-39.87177876 0.12945383-59.80766815 0-9.45012939 0-18.90025876-0.12945383-28.35038815-0.12945383-13.72210569 0-24.98458864 0.12945383-35.59980246 0.25890765-16.31118222 0.25890765-30.0332879 5.69596839-38.44778667 15.40500544-6.60214518 7.63777581-9.70903703 17.6057205-8.41449877 27.96202666 1.55344592 12.94538272 6.86105283 22.91332741 15.53445926 29.38601877 7.76722963 5.82542222 18.25298963 8.67340642 31.06891852 8.67340642h0.77672296c25.76131161-0.25890765 53.3349768-0.25890765 86.86351803-0.25890766 21.8776968 0 44.14375506 0 65.76254419 0.12945383h34.30526421c36.37652543 0 45.04993185-21.35988148 45.82665481-39.22450963 0.51781531-12.42756741-2.58907653-22.26605827-9.32067555-29.51547259-7.76722963-8.28504494-19.93588939-12.42756741-37.02379458-12.68647506-9.32067555 0-19.67698173-0.12945383-31.58673381-0.12945383zM712.67998025 221.22344296000006c-26.02021925 0-42.59030914 15.14609778-43.23757827 39.48341728-0.25890765 11.9097521 3.3657995 22.13660445 10.61521383 29.64492642 7.63777581 7.89668347 18.64135111 12.16865975 31.71618766 12.29811358 41.16631703 0.25890765 72.88250469 0.25890765 102.78633875 0.25890766 34.04635653 0 64.72691358-0.12945383 93.98347853-0.38836149 12.94538272-0.12945383 23.56059653-4.14252247 30.68055703-11.78029827 5.04869925-5.30760691 10.74466765-15.01664395 10.09739852-31.06891851-1.03563061-24.20786569-16.31118222-38.05942518-41.68413235-38.18887902-13.98101333-0.12945383-28.99765728-0.12945383-48.67463901-0.12945382H752.16339753c-14.88719013 0-27.1853037 0-38.57724049-0.12945383h-0.90617679zM714.88069531 56.68762862999995c-14.62828247 0-26.53803457 4.2719763-34.56417184 12.29811358-7.1199605 7.24941431-11.00357531 17.21735902-10.87412149 28.99765728 0.12945383 16.31118222 7.24941431 25.76131161 13.20429038 30.68055704 8.02613728 6.73159902 19.15916642 9.96794469 32.88127209 9.57958322 10.48576-0.12945383 21.74824297-0.25890765 35.34089481-0.25890766 9.83849086 0 19.80643555 0 29.51547259 0.12945382 9.70903703 0 19.67698173 0.12945383 29.64492643 0.12945384h56.70077629c14.62828247 0 26.53803457 0 37.67106371 0.12945382h0.77672296c14.7577363 0 26.14967309-3.88361482 33.65799506-11.39193678 6.99050667-6.99050667 10.48576-16.82899753 10.48576-29.25656495 0-14.11046717-4.78979161-24.72568098-13.98101333-31.84564148-7.63777581-5.82542222-18.12353581-8.93231408-31.32782617-8.93231407h-94.63074766c-30.93946469-0.12945383-63.04401383-0.12945383-94.50129383-0.25890766z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wode3" unicode="&#59222;" d="M512.256 832l-6.848-0.064C260.032 828.288 64 627.776 64 384a448.384 448.384 0 0 1 448.064-448A447.936 447.936 0 0 1 960 384.064 447.616 447.616 0 0 1 512.256 832z m220.992-761.344A381.312 381.312 0 0 0 512.064 0l-5.696 0.064a381.44 381.44 0 0 0-216.256 71.488c-0.896 8.128-2.112 16.128-2.112 24.448C288 219.52 388.48 320 512 320s224-100.48 224-224c0-8.704-1.792-16.896-2.752-25.344zM416 480C416 532.928 459.072 576 512 576s96-43.072 96-96S564.928 384 512 384s-96 43.072-96 96z m380.8-352.64a288.512 288.512 0 0 1-177.024 235.2A158.848 158.848 0 0 1 672 480C672 568.192 600.256 640 512 640a160.192 160.192 0 0 1-160-160c0-46.592 20.288-88.128 52.16-117.44A288.32 288.32 0 0 1 227.264 128 381.76 381.76 0 0 0 128 384c0 208.64 169.728 380.864 378.432 384h5.824A384.256 384.256 0 0 0 896 384.064c0-98.688-37.76-188.544-99.2-256.704z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="fangwen" unicode="&#59070;" d="M1289.871 410.512c-7.99 16.4-20.61 37.941-39.72 67.791-16.453 25.722-37.307 55.955-63.754 92.432-24.128 33.32-54.695 67.373-90.85 101.21-35.806 33.513-74.667 64.617-115.507 92.45-40.806 27.821-88.826 50.703-142.73 68.01A543.642 543.642 0 0 1 670.62 858.55h-0.702a533.916 533.916 0 0 1-132.582-16.77c-42.657-10.907-82.06-25.383-117.118-43.026-34.1-17.153-68.322-38.681-101.718-63.988-32.662-24.774-61.526-49.854-85.79-74.544a989.476 989.476 0 0 1-70.183-79.897c-22.75-28.76-41.19-53.833-54.812-74.518a1122.764 1122.764 0 0 1-39.102-63.99C56.094 419.7 48.475 405.63 45.318 398.804l-7.87-16.92 12.396-26.073c8.55-17.538 21.92-40.38 39.736-67.89 17.532-27.091 38.417-57.19 63.851-92.014 24.072-32.96 54.675-66.833 90.96-100.68 35.11-32.782 72.89-62.817 115.498-91.824 40.284-27.409 88.27-50.22 142.626-67.801 53.705-17.35 110.029-26.146 167.41-26.146l0.936-0.001a528.7 528.7 0 0 1 131.678 16.674c44.14 11.356 82.446 25.358 117.11 42.802 33.877 17.036 68.102 38.496 101.725 63.786 32.751 24.612 61.616 49.614 85.791 74.313a1064.835 1064.835 0 0 1 70.175 79.486c22.655 28.339 41.092 53.269 54.804 74.095 15.214 23.123 28.003 43.984 39.092 63.768a903.447 903.447 0 0 1 23.297 42.81l7.795 16.646 0.074 0.16-12.53 26.518z m-410.297-38.67c0-55.878-21.755-108.413-61.256-147.926-39.501-39.511-92.022-61.272-147.886-61.272-55.864 0-108.384 21.76-147.887 61.272-39.501 39.513-61.256 92.047-61.256 147.926s21.755 108.414 61.256 147.927c39.502 39.512 92.022 61.272 147.887 61.272 55.865 0 108.385-21.76 147.886-61.272 39.501-39.513 61.256-92.048 61.256-147.927z"  horiz-adv-x="1365" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="qunzu2" unicode="&#58945;" d="M888.03100445-19.920213330000024v-2.40298667c0-20.53461333-16.74808889-37.13706667-37.42833778-37.13706667H39.77671111A37.35552 37.35552 0 0 0 2.27555555-22.323200000000043v2.40298667c0 51.11808 7.42741333 84.90552889 22.28224 101.36234666 36.77297778 40.77795555 115.41617778 76.67712 192.96711112 103.91096889 77.55093333 27.16103111 121.60568889 70.63324445 121.60568888 95.17283556 0 16.74808889-8.22840889 55.41432889-23.81141333 80.53646222-46.02083555 49.95299555-75.94894222 126.70293333-75.94894222 216.41443555C239.37024 736.94776889 314.95509333 820.90666667 445.44455111 820.90666667 576.07964445 820.90666667 651.73731555 737.0205866700001 651.73731555 577.47683555c0-91.16785778-30.94755555-168.79160889-78.20629333-218.67178666a188.01550222 188.01550222 0 0 1-22.71914667-78.27911111c0-24.53959111 46.67619555-68.01180445 124.15431112-95.17283556 77.47811555-27.23384889 163.54872889-68.30307555 190.41848888-106.09550222 15.87427555-22.28224 21.11715555-66.62826667 22.71914667-99.17781333z m104.20224 80.82773333h-53.08416c-3.05834667 23.52014222-8.73813333 46.74901333-19.22389334 60.65720889-26.06876445 34.36999111-87.38133333 71.65269333-162.38364444 96.41073778-74.85667555 24.68522667-120.07651555 64.22528-120.07651556 86.43470222 0 14.85482667 7.64586667 48.35100445 21.99096889 71.14296889 45.72956445 45.29265778 75.65767111 115.85308445 75.65767111 198.64689777 0 86.65315555-13.47128889 159.90784-61.45820444 195.87982223 4.15061333 0.21845333-10.19448889 0-5.82542222 0 102.67306667 0 167.91779555-77.33248 167.91779555-203.88977778 0-72.23523555-24.24832-133.83907555-61.45820445-173.45194667a150.00462222 150.00462222 0 0 1-17.84035555-62.11356444c0-19.36952889 36.70016-53.88515555 97.57582222-75.43921778 60.94848-21.55406222 128.66901333-54.17642667 149.78616889-84.17735111 12.52465778-17.69472 16.60245333-52.79288889 17.91317334-80.53646222a29.4912 29.4912 0 0 0-29.4912-29.4912z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="del3" unicode="&#60539;" d="M512 438.31085965L312.94980324 637.40586667a38.4029753 38.4029753 0 1 1-54.31085854-54.31085965L457.64433009 384l-199.09500813-199.05019676a38.4029753 38.4029753 0 1 1 54.31085966-54.31085854L512 329.64433009000004l199.05019676-199.09500813a38.4029753 38.4029753 0 1 1 54.31085854 54.31085966L566.35566991 384l199.09500813 199.05019676a38.4029753 38.4029753 0 1 1-54.31085966 54.31085854L512 438.35566991z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gengduo" unicode="&#58880;" d="M493.82346667 390.98956667m-107.1767 0a107.245 107.245 0 1 1 214.3535 0 107.245 107.245 0 1 1-214.3535 0ZM164.79606667 390.98956667m-107.1767 0a107.245 107.245 0 1 1 214.3535 0 107.245 107.245 0 1 1-214.3535 0ZM821.85656667 390.98956667m-107.1767 0a107.245 107.245 0 1 1 214.3535 0 107.245 107.245 0 1 1-214.3535 0Z"  horiz-adv-x="1000" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zhuye" unicode="&#58881;" d="M929.9599 443.4381 591.0938 795.8723c-21.0616 21.8798-49.2104 33.9241-79.3743 33.9241-30.165 0-58.3137-12.0443-79.3754-33.9241L93.4789 443.4381c-34.9594-36.3766-30.464-67.8216-24.6866-80.9564 4.1134-9.3184 18.0378-34.9317 58.0936-34.9317l49.67424 0 0-271.12448c0-61.5547 44.2522-119.5131 107.1145-119.5131l57.004032 0 87.250944 0 0 63.70816L427.929616 223.84128c0 30.763-4.6602 47.9027 26.7848 47.9027l57.005056 0 57.004032 0c31.445 0 26.7848-17.1397 26.7848-47.9027l0-223.220736 0-63.70816 87.24992 0 57.005056 0c62.8634 0 107.1145 57.9584 107.1145 119.5131l0 271.12448 49.67424 0c40.0548 0 53.9791 25.6143 58.0946 34.9317C960.4219 375.6165 964.9193 407.0615 929.9599 443.4381zM896.5519 383.3549l-42.780672 0-28.500992 0-34.251776 0 0-326.929408c0-30.764-19.8369-63.7082-51.2543-63.7082l-88.395776 0L651.368384 223.84128c0 61.5537-19.753 103.7076-82.644 103.7076l-57.004032 0-57.005056 0c-62.889 0-82.644-42.154-82.644-103.7076l0-231.123968-88.394752 0c-31.4173 0-51.2553 32.9441-51.2553 63.7082L232.421244 383.35488l-34.251776 0-28.502016 0-42.780672 0c-0.981 0-1.8801 3.842-2.6972 3.8963 1.9343 3.3782 5.2593 11.9347 10.7909 17.6845l338.9194 352.1894c10.11 10.5441 24.3866 17.0025 38.2566 16.8663 13.8424 0.1362 27.2773-6.3222 37.3852-16.8663l338.8918-352.1894c5.5593-5.7498 8.8832-14.3063 10.8175-17.6845C898.431 387.1969 897.5329 383.3549 896.5519 383.3549z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="chuangkoufangda" unicode="&#58882;" d="M341.4682 326.8536 173.479936 326.8536c-61.7656 0-111.9918-50.2272-111.9918-111.9928l0-167.9872c0-61.7667 50.2262-111.9939 111.9918-111.9939l167.989248 0c61.738 0 111.9928 50.2272 111.9928 111.9939l0 167.9872C453.461 276.6264 403.2061 326.8536 341.4682 326.8536zM397.4636 46.8736c0-30.8705-25.1269-55.9964-55.9954-55.9964L173.479936-9.1228c-30.8961 0-55.9954 25.1249-55.9954 55.9964l0 167.9872c0 30.8695 25.0993 55.9985 55.9954 55.9985l167.989248 0c30.8685 0 55.9954-25.1279 55.9954-55.9985L397.464584 46.8736zM529.2524 363.0541 761.4392 595.241l0-184.392704c0-15.4757 12.5225-27.9992 27.9982-27.9992 15.4481 0 27.9982 12.5235 27.9982 27.9992L817.4356 662.831104c0 15.4747-12.5501 27.9972-27.9982 27.9972L537.454592 690.828304c-15.4757 0-27.9982-12.5225-27.9982-27.9972 0-15.4757 12.5225-27.9982 27.9982-27.9982l184.392704 0L489.6604 402.645c-10.9363-10.9363-10.9363-28.6536 0-39.5909 5.4692-5.4682 12.6321-8.2022 19.796-8.2022C516.6193 354.8518 523.7832 357.5859 529.2524 363.0541zM845.4328 830.8183 173.479936 830.8183c-61.7656 0-111.9918-50.2272-111.9918-111.9928l0-307.97824c0-15.4757 12.5225-27.9992 27.9982-27.9992 15.4481 0 27.9982 12.5235 27.9982 27.9992l0 307.97824c0 30.8695 25.0993 55.9964 55.9954 55.9964l671.952896 0c30.8695 0 55.9974-25.1279 55.9974-55.9964l0-671.952896c0-30.8705-25.1279-55.9964-55.9974-55.9964l-307.97824 0c-15.4757 0-27.9982-12.5235-27.9982-27.9982 0-15.4767 12.5225-28.0003 27.9982-28.0003l307.97824 0c61.738 0 111.9928 50.2272 111.9928 111.9939L957.425632 718.826496C957.4257 780.5921 907.1708 830.8183 845.4328 830.8183z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="tupian" unicode="&#58883;" d="M847.657 831.9836 175.70304 831.9836c-61.7656 0-111.9928-50.2262-111.9928-111.9918l0-671.95392c0-61.7646 50.2262-111.9928 111.9928-111.9928l671.95392 0c61.7646 0 111.9918 50.2282 111.9918 111.9928L959.64876 719.990784C959.6488 781.7564 909.4216 831.9836 847.657 831.9836zM903.6524 48.0379c0-30.8695-25.1269-55.9974-55.9964-55.9974L175.70304-7.9595c-30.8695 0-55.9964 25.1279-55.9964 55.9974L119.70664 719.990784c0 30.8695 25.1279 55.9964 55.9964 55.9964l671.95392 0c30.8695 0 55.9964-25.1269 55.9964-55.9964L903.65336 48.037888zM835.1887 351.3139l-83.9946 55.9964c-10.4438 6.9448-23.5407 5.6873-32.7823-1.7224l-0.2458 0.3L584.9825 299.3367 387.5471 435.0894c-0.0829 0.0543-0.1638 0.0543-0.2181 0.1096-2.2968 1.5309-4.8947 2.3788-7.5192 3.199-0.8745 0.2734-1.6671 0.8745-2.5702 1.0394-2.3788 0.4925-4.8118 0.2181-7.2735 0.0819-1.1213-0.0819-2.2692 0.2181-3.3628 0-1.2308-0.2181-2.3511-0.9841-3.5543-1.3947-2.2692-0.7383-4.566-1.367-6.6161-2.7064-0.0829-0.0553-0.1915-0.0553-0.2734-0.1096L188.1702 323.3147c-12.8778-8.5842-16.3502-25.9461-7.765-38.8239 5.3862-8.0937 14.2725-12.4692 23.3226-12.4692 5.332 0 10.7182 1.5319 15.5034 4.7032l152.2125 101.4661 432.3564-297.2334c4.8404-3.3362 10.3629-4.9224 15.831-4.9224 8.9129 0 17.663 4.2383 23.1045 12.1395 8.7491 12.7406 5.5235 30.1568-7.2182 38.9345L633.214 266.198l103.9555 83.1468 66.9594-44.6208c4.7862-3.1724 10.1714-4.7043 15.5034-4.7043 9.0501 0 17.9364 4.3745 23.3226 12.4692C851.5389 325.3658 848.0666 342.7287 835.1887 351.3139zM581.674 468.009c69.4764 0 125.9919 56.5156 125.9919 125.9909 0 69.4764-56.5156 125.9919-125.9919 125.9919-69.4753 0-125.9909-56.5156-125.9909-125.9919C455.6831 524.5245 512.1997 468.009 581.674 468.009zM581.674 663.9944c38.6068 0 69.9945-31.3876 69.9945-69.9945 0-38.6068-31.3876-69.9945-69.9945-69.9945-38.6058 0-69.9945 31.3887-69.9945 69.9945C511.6795 632.6067 543.0682 663.9944 581.674 663.9944z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="diqiu" unicode="&#58899;" d="M511.999488 835.060069c-249.122871 0-451.061093-201.938222-451.061093-451.060069 0-249.107521 201.938222-451.060069 451.061093-451.060069 249.121847 0 451.061093 201.953571 451.061093 451.060069C963.060581 633.121847 761.121336 835.060069 511.999488 835.060069zM856.592734 534.34824c20.1182-46.042639 31.292704-96.888677 31.292704-150.34824 0-53.458539-11.17655-104.304577-31.296797-150.34824L687.126065 233.65175999999997c8.270361 46.599318 12.81691 97.30414 12.81691 150.34824 0 53.043077-4.546549 103.748922-12.81691 150.34824L856.592734 534.34824zM399.231145 384c0 54.012148 4.225231 105.054661 11.729136 150.34824l202.077392 0c7.502881-45.293579 11.730159-96.336092 11.730159-150.34824 0-54.011124-4.227278-105.053638-11.730159-150.34824L410.962328 233.65175999999997C403.458423 278.946362 399.231145 329.988876 399.231145 384zM812.704155 609.537709L669.539524 609.537709c-17.390066 58.675354-41.36613 107.042945-69.626777 140.004661C686.262394 728.852142 761.009795 678.347888 812.704155 609.537709zM511.999488 722.291726c33.394574 0 63.393819-43.558052 84.042091-112.754017L427.956374 609.537709C448.605669 678.732651 478.603891 722.291726 511.999488 722.291726zM424.095439 749.54544c-28.261671-32.961716-52.238758-81.331353-69.631894-140.006707L211.294822 609.538733C262.991228 678.349935 337.742722 728.8552119999999 424.095439 749.54544zM167.406243 534.34824l169.46974 0c-8.273431-46.599318-12.81998-97.30414-12.81998-150.34824s4.546549-103.748922 12.81998-150.34824L167.409312 233.65175999999997c-20.120246 46.043662-31.296797 96.889701-31.296797 150.34824C136.112516 437.459562 147.288043 488.305601 167.406243 534.34824zM211.299939 158.46229100000005l143.162584 0c17.392112-58.673307 41.367153-107.040898 69.626777-140.004661C337.741699 39.14888099999996 262.994298 89.65313500000002 211.299939 158.46229100000005zM511.999488 45.70827399999996c-33.394574 0-63.392796 43.559075-84.041068 112.754017l168.081113 0C575.391261 89.26734899999997 545.394063 45.70827399999996 511.999488 45.70827399999996zM599.918887 18.458653000000027c28.258601 32.964786 52.230572 81.331353 69.620637 140.002614l143.158491 0C761.005702 89.65518199999997 686.262394 39.151951000000054 599.918887 18.458653000000027z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="key" unicode="&#59212;" d="M622.50294509 494.50267472c-48.89772391 0-94.6761905-13.32598146-133.93032544-36.52188818L379.92388513 566.63106679l79.0304638 79.01424179c25.74198672 25.74198672 25.74353167 67.47885938 0 93.22239106-25.74198672 25.74275919-67.47963186 25.74198672-93.22239107 0L286.70149406 659.85345785 207.68802475 738.8669271599999c-25.74275919 25.74275919-67.47885938 25.74353167-93.22239105 0-25.74198672-25.74198672-25.74275919-67.47885938 0-93.22161857l94.67464554-94.67464555c0.00154495-0.00154495 0.00231742-0.0030899 0.00386238-0.00463484s0.0030899-0.00231742 0.00463486-0.00386239l186.2022246-186.20376956c-23.19358852-39.25336247-36.51957075-85.03105657-36.51957075-133.928008 0-145.62174803 118.04976598-263.67151477 263.67228723-263.67151476C768.12469389-32.84112651999999 886.17445986 85.20863944999996 886.17445986 230.83038825000006 886.17445986 376.45290875 768.12469389 494.50267472 622.50294509 494.50267472zM622.50294509 98.99501672999997C549.69168484 98.99501672999997 490.66680186 158.02067218000002 490.66680186 230.83038825000006 490.66680186 303.6416485 549.69168484 362.66653148 622.50294509 362.66653148c72.81048777 0 131.83537076-59.02488299 131.83537076-131.83614323C754.33831661 158.02067218000002 695.31343364 98.99501672999997 622.50294509 98.99501672999997z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="gantanhao" unicode="&#58905;" d="M512-66C263.48000029-66 62 135.48000029000002 62 384 62 632.51999971 263.48000029 834 512 834 760.51999971 834 962 632.51999971 962 384 962 135.48000029000002 760.51999971-66 512-66ZM512 773.99999971C296.60000029 773.99999971 122.00000029 599.39999971 122.00000029 384 122.00000029 168.60000029000003 296.60000029-5.999999709999997 512-5.999999709999997 727.39999971-5.999999709999997 901.99999971 168.60000029000003 901.99999971 384 901.99999971 599.39999971 727.39999971 773.99999971 512 773.99999971ZM512 114C478.85000029 114 451.99999971 140.84999971000002 451.99999971 174.00000029 451.99999971 207.14999999999998 478.85000029 233.99999971 512 233.99999971 545.14999971 233.99999971 572.00000029 207.14999999999998 572.00000029 174.00000029 572.00000029 140.84999971000002 545.14999971 114 512 114ZM512 294C495.44 294 482.00000029 320.84999971 482.00000029 354.00000029 482.00000029 354.00000029 451.99999971 624.00000029 451.99999971 624.00000029 451.99999971 657.15 478.85000029 683.99999971 512 683.99999971 545.14999971 683.99999971 572.00000029 657.15 572.00000029 624.00000029 572.00000029 624.00000029 541.99999971 354.00000029 541.99999971 354.00000029 541.99999971 320.84999971 528.56 294 512 294Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="msnui-info" unicode="&#59250;" d="M575.105 641.936c0.525 0 1.051 0 1.548 0 60.95 0.193 104.613 52.223 104.613 107.209 0 21.21-6.103 41.895-19.442 57.581-13.283 15.742-33.941 25.793-60.010 25.684-68.849-0.275-104.585-58.933-104.697-103.397 0.358-51.615 30.213-87.075 77.989-87.075zM681.595 113.183l-27.202 59.679-7.788-7.069c-32.948-30.324-83.871-65.23-91.522-66.171-0.358 1.105-0.855 3.508-0.83 7.152 0 6.489 1.381 16.736 4.778 30.765l71.722 291.882c6.269 27.202 9.637 69.153 9.637 89.23 0 18.42-2.762 33.747-9.693 45.513-6.794 11.958-19.387 19.359-33.885 19.111-50.704-0.636-161.253-68.794-253.218-153.853l-4.998-4.64 25.462-69.098 8.672 6.489c24.551 19.083 74.26 55.483 85.584 59.569-0.11-5.69-1.85-16.736-5.027-32.422l-65.369-281.607c-7.402-30.903-10.661-73.68-10.661-93.482 0-25.905 5.662-44.020 16.57-55.924 10.881-11.821 25.905-15.658 40.375-15.658 0.083 0 0.166 0 0.275 0 42.751 0.551 155.152 59.927 246.258 159.431l4.695 5.22-3.839 5.883z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="geren" unicode="&#58906;" d="M511.017114 846.21513c73.727165 0 140.500964-29.901007 188.841949-78.238922 48.336892-48.337915 78.235852-115.112738 78.235852-188.840926 0-73.728188-29.898961-140.525524-78.235852-188.841949-12.112875-12.109806-25.369807-23.052019-39.61116-32.656771 56.417941-21.341051 107.073644-54.392818 148.999522-96.196922 76.444043-76.274174 123.739209-181.554986 123.739209-297.729915 0-20.068058-16.285918-36.352953-36.376489-36.352953-20.062941 0-36.348859 16.284895-36.348859 36.352953 0 96.256274-39.048341 183.349865-102.168937 246.302639-63.101153 62.933331-150.297075 101.917204-246.638283 102.041024l-0.436952 0-0.021489 0-0.416486 0c-96.384188-0.12382-183.580109-39.107693-246.659773-102.041024-63.122643-62.953797-102.167914-150.046365-102.167914-246.302639 0-20.068058-16.286941-36.352953-36.373419-36.352953-20.066011 0-36.351929 16.284895-36.351929 36.352953 0 116.174929 47.294143 221.455741 123.757628 297.729915 41.884946 41.804105 92.540649 74.854848 148.960637 96.196922-14.220886 9.603729-27.479865 20.546965-39.590694 32.656771-48.317449 48.316425-78.216409 115.113761-78.216409 188.841949 0 73.728188 29.898961 140.503011 78.216409 188.840926C370.491591 816.314123 437.26846 846.21513 511.017114 846.21513L511.017114 846.21513zM648.428717 716.547909c-35.161824 35.161824-83.751473 56.94085-137.411603 56.94085-53.662177 0-102.272291-21.779026-137.434116-56.94085s-56.941873-83.751473-56.941873-137.412626c0-53.662177 21.780049-102.250802 56.941873-137.435139 35.0554-35.057447 83.500762-56.793494 136.995117-56.919361l0.416486 0 0.021489 0 0.416486 0c53.494355 0.125867 101.935624 21.861914 136.995117 56.919361 35.161824 35.183314 56.939827 83.772962 56.939827 137.435139C705.368544 632.7964360000001 683.590542 681.386084 648.428717 716.547909z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cnbeta1193375easyiconnet" unicode="&#58902;" d="M151.4682592 867.00396053L425.29223147 867.00396053 555.40667733 636.45195413 422.80186347 409.00926613 156.59463147 408.0007392 21.823488 637.1510048 151.4682592 867.00396053zM598.23809387 613.0337568L872.06570667 613.0337568 1002.176512 382.48538986999995 869.57533867 155.03906132999998 603.36810667 154.03053547000002 468.59332267 383.1808 598.23809387 613.0337568zM151.4682592 359.9992608L425.29223147 359.9992608 555.40667733 129.45089386999996 422.80186347-97.99543467000001 156.59463147-99.00396052999997 21.823488 130.146304 151.4682592 359.9992608z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shang1" unicode="&#58986;" d="M511.99941746 888.09435022c-278.40390485 0-504.09435022-225.69044537-504.09435023-504.09435022s225.69044537-504.09435022 504.09435023-504.09435022c278.4050688 0 504.09435022 225.69044537 504.09435022 504.09435022S790.40448626 888.09435022 511.99941746 888.09435022zM717.91547619 367.12936448000005c-12.30659925-12.29844821-32.25446627-12.29844821-44.56106438 0L543.50407794 496.9785344l0-333.52046819c0-17.39340345-14.10077696-31.50582443-31.50582443-31.50582443-17.39456853 0-31.50582443 14.11125589-31.50582442 31.50582443L480.49242909 496.9785344 350.65490205 367.12936448000005c-12.30659925-12.29844821-32.25446627-12.29844821-44.5610644 0-12.30659925 12.30659925-12.30659925 32.25446627 0 44.56106439L484.31830243 589.9160587399999c7.55860366 7.54696078 17.90802261 9.8965083 27.67995108 8.17335182 9.78473529 1.72315648 20.12251136-0.62522595 27.68111502-8.17335182l178.23494372-178.22562987C730.21276046 399.38383075 730.21276046 379.43596373 717.91547619 367.12936448000005z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xia" unicode="&#59034;" d="M511.99945387 856.58845333c-261.004752 0-472.58845333-211.58479253-472.58845334-472.58845333s211.58370133-472.58845333 472.58845334-472.58845333c261.0036608 0 472.58845333 211.58479253 472.58845333 472.58845333S773.00311467 856.58845333 511.99945387 856.58845333zM705.03484373 358.04022293L537.949408 190.95369492999998c-7.08619093-7.07527573-16.7887712-9.27797653-25.94995413-7.66251733-9.17318933-1.6154592-18.8648544 0.58614933-25.95104534 7.66251733L318.9520576 358.04022293c-11.528704 11.5374368-11.528704 30.23856213 0 41.77599787 11.5374368 11.5297952 30.23856213 11.5297952 41.77599787 0l121.7335968-121.7335968L482.46165227 590.75806187c0 16.30631573 13.2194784 29.5367104 29.5367104 29.5367104 16.30631573 0 29.5367104-13.2293024 29.5367104-29.5367104l0-312.67543894 121.7237728 121.7335968c11.5374368 11.5297952 30.23856213 11.5297952 41.77599786 0C716.57337173 388.278784 716.57337173 369.57765867 705.03484373 358.04022293z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zuo" unicode="&#59073;" d="M512.00054613 846.23204907c-260.06713067 0-470.88894613-206.946896-470.88894613-462.23204907s210.82290773-462.23204907 470.88894613-462.23204907c260.063856 0 470.88676373 206.946896 470.88676374 462.23204907S772.06440213 846.23204907 512.00054613 846.23204907zM718.010912 355.10947412999997L406.4630208 355.10947412999997l121.2958944-119.05608213c11.4948672-11.28529387 11.4948672-29.57491307 0-40.86020693-11.4948672-11.2842016-30.13050027-11.2842016-41.61772693 0l-166.48400534 163.42336426c-7.06108587 6.93337707-9.24632213 16.41110293-7.63632 25.38345174-1.61000213 8.9723488 0.57523413 18.45116587 7.63632 25.38235946l166.48400534 163.42336427c11.4861344 11.28529387 30.12285973 11.28529387 41.61772693 0 11.4948672-11.27546987 11.4948672-29.57382187 0-40.8514752L406.4630208 412.88943467l311.5478912 0c16.26047147 0 29.43301547-12.93131627 29.43301547-28.88943467C747.44392747 368.05061333000003 734.27247573 355.10947412999997 718.010912 355.10947412999997z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="my-help" unicode="&#58890;" d="M512-62.326c247.255 0 447.696 200.441 447.696 447.696s-200.441 447.696-447.696 447.696-447.696-200.441-447.696-447.696 200.44-447.696 447.696-447.696zM512 678.318c35.321 0 63.957-28.635 63.957-63.957 0-35.324-28.635-63.957-63.957-63.957s-63.957 28.633-63.957 63.957c0 35.321 28.635 63.957 63.957 63.957zM448.043 385.37c0 35.321 28.635 63.957 63.957 63.957s63.957-28.635 63.957-63.957v-223.848c0-35.324-28.635-63.957-63.957-63.957s-63.957 28.633-63.957 63.957v223.848z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="iconfontsanxingdianhover" unicode="&#58983;" d="M203.19800853 75.63491520000002m-109.22666666 0a6.4 6.4 0 1 1 218.45333333 0 6.4 6.4 0 1 1-218.45333333 0ZM203.19800853 694.8226847999999m-109.22666666 0a6.4 6.4 0 1 1 218.45333333 0 6.4 6.4 0 1 1-218.45333333 0ZM203.19800853 495.32017813c-60.3113248 0-109.22666667-48.89713813-109.22666666-109.33589333 0-60.42055147 48.91534187-109.33589333 109.22666666-109.33589333 60.3113248 0 109.22666667 48.91534187 109.22666667 109.33589333C312.4246752 446.4412448 263.49112853 495.32017813 203.19800853 495.32017813zM512.6735648 75.63491520000002m-109.22666667 0a6.4 6.4 0 1 1 218.45333334 0 6.4 6.4 0 1 1-218.45333334 0ZM512.6735648 694.8226847999999m-109.22666667 0a6.4 6.4 0 1 1 218.45333334 0 6.4 6.4 0 1 1-218.45333334 0ZM512.6735648 495.32017813c-60.3113248 0-109.22666667-48.89713813-109.22666667-109.33589333 0-60.42055147 48.91534187-109.33589333 109.22666667-109.33589333 60.36593813 0 109.28128 48.91534187 109.28128 109.33589333C621.9548448 446.4412448 573.03950187 495.32017813 512.6735648 495.32017813zM822.20373333 75.63491520000002m-109.22666666 0a6.4 6.4 0 1 1 218.45333333 0 6.4 6.4 0 1 1-218.45333333 0ZM822.20373333 694.8226847999999m-109.22666666 0a6.4 6.4 0 1 1 218.45333333 0 6.4 6.4 0 1 1-218.45333333 0ZM822.20373333 495.32017813c-60.3113248 0-109.22666667-48.89713813-109.22666666-109.33589333 0-60.42055147 48.91534187-109.33589333 109.22666666-109.33589333 60.3113248 0 109.22666667 48.91534187 109.22666667 109.33589333C931.4304 446.4412448 882.51505813 495.32017813 822.20373333 495.32017813z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wenjianjia" unicode="&#58930;" d="M881.77779233 52.604333999999994c0-30.79333-24.963555-55.751768-55.753815-55.751768L129.13710633-3.1474339999999756l97.567129 459.944414c0 30.791284 24.963555 55.749722 55.749722 55.749722l641.135102 0c30.78719 0 55.749722-24.959461 55.749722-55.749722L881.77779233 52.604333999999994 881.77779233 52.604333999999994zM881.77779233 52.604333999999994M240.64166633 554.362063l627.196649 0L867.83831533 609.133503c0 30.791284-24.963555 55.754838-55.749722 55.754838L477.57900633 664.888342l0 50.509371c0 30.786167-24.957415 55.748698-55.748698 55.748698L143.07658333 771.146411c-30.786167 0-55.749722-24.963555-55.749722-55.748698l0-662.806681 97.567129 446.003913C184.89296833 529.399531 209.85038233 554.362063 240.64166633 554.362063L240.64166633 554.362063zM240.64166633 554.362063"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="qunzu" unicode="&#58979;" d="M401.082306 767.959835c-126.048811 0-228.207515-104.116289-228.207515-232.581126 0-128.525212 102.158704-232.641501 228.207515-232.641501s228.207515 104.116289 228.207515 232.641501C629.289822 663.843546 527.131117 767.959835 401.082306 767.959835zM401.022954 369.108848c-90.019223 0-162.997328 74.388221-162.997328 166.208463 0 91.759867 72.978105 166.147064 162.997328 166.147064 90.01513 0 162.995281-74.387197 162.995281-166.147064C564.018236 443.497069 491.037061 369.108848 401.022954 369.108848zM65.853335 62.570313c0 0-4.334725-34.304294 5.39794-50.846038 0 0 13.120832-18.038842 34.848693-15.028275 0 0 31.232328 1.946328 33.239032 40.165792 0 0-0.865717 39.124066 14.114462 81.404008 0 0 13.20679 39.403428 38.114063 71.322395 0 0 32.259728 46.647413 91.877547 76.323293 0 0 64.142879 35.077913 141.756561 26.469861 0 0 54.208623-2.490727 109.940948-35.650965 0 0 76.596516-35.565007 115.056456-144.111189 0 0 11.776208-35.71134 12.235672-69.787436 0 0-5.142114-43.019793 37.050848-46.425356 0 0 37.061081-2.765997 36.647665 46.632063 0 0 1.924839 90.489944-54.942333 174.222997 0 0-50.867528 82.34545-141.199882 120.387881 0 0-172.271552 76.730569-324.790224-25.15696C215.200782 312.492386 78.431815 225.936031 65.853335 62.570313zM738.208487 728.31286c0 0-72.021314 42.336224-117.004831 24.628934 0 0-21.533432-10.908444-16.645099-39.169091 0 0 1.017166-23.864524 59.263755-33.669844 0 0 65.915245-15.128559 97.323583-88.627527 0 0 26.077935-59.152215-4.932336-118.483508 0 0-21.579481-45.209668-60.429301-63.968917 0 0-40.818661-17.83418-34.520211-63.413262 0 0 1.211595-30.634718 79.026868-56.630788 0 0 70.142523-31.321356 110.963231-105.785302 0 0 31.147394-53.28867 32.31601-113.11729 0 0-5.402033-48.335868 37.59627-50.464345 0 0 39.548738-3.064802 37.300534 49.184189-0.206708 4.76963-1.543146 81.549318-45.187155 154.88558 0 0-50.04172 94.443999-149.900032 135.962601l-3.405563 2.130524c0 0 22.231327 17.190521 32.747845 30.271444 0 0 45.818535 49.14735 52.632731 117.895107 0 0 17.246803 70.716598-41.544185 158.845775C803.809577 668.787138 773.504364 709.038888 738.208487 728.31286z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biaoji" unicode="&#59617;" d="M786.431791 557.339884c0 152.143119-123.282814 275.494495-275.494495 275.494495-152.144142 0-275.493471-123.351376-275.493471-275.494495 0-50.240241 13.737886-97.187483 37.198204-137.747247l-0.348947 0 238.645239-482.126622 238.754732 482.126622-0.3776 0C772.90266 460.153424 786.431791 507.090433 786.431791 557.339884"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icon_share" unicode="&#58951;" d="M936.60501382 333.25569591c-26.20936813 0-47.41001234-21.2470081-47.41001234-47.41001234l0-242.68007207c0-20.96749529-17.01986166-37.98735695-37.93569322-37.98735695L168.43406195 5.17825584000002c-20.9211301 0-37.89992513 17.01986166-37.89992513 37.98735694L130.53413552 725.93919537c0 20.9211301 16.97879633 37.94496599 37.89992513 37.944966l213.36028707 0c26.20936813 0 47.41001234 21.24170956 47.41001234 47.40073827 0 26.16697718-21.20064292 47.41001234-47.41001234 47.41001234L168.43406195 858.69491198c-73.19547356 0-132.75571661-59.56024305-132.75571661-132.75571661L35.67834534 43.16031295000005c0-73.2365389 59.56024305-132.79678194 132.75571661-132.79678195l682.81994906 0c73.19017372 0 132.80208049 59.56024305 132.80208049 132.79678195L984.0560915 285.84568357C984.0560915 312.00868782 962.8090834 333.25569591 936.60501382 333.25569591L936.60501382 333.25569591zM936.60501382 333.25569591M456.43375445 180.97111865c1.43333478-0.13512002 2.87196941-0.18678375 4.31060273-0.18678375 24.2633703 0 44.94737723 18.50486017 47.17686342 43.18286462 2.63882048 29.36085165 15.48849797 116.79694654 42.71656804 167.81943913 37.38726337 69.85720629 106.91859166 199.9224387 293.05610721 224.41365938 3.1978474 0.46099932 5.89363014 2.03342835 8.85965424 3.05875315L772.86832704 452.45831399c-11.32228805-23.60631445-1.3035133-51.94713986 22.35446486-63.17669881 6.5877784-3.15148222 13.50143481-4.63648203 20.36210318-4.63648204 17.7232827 0 34.69677917 9.92472006 42.81592126 26.94988028l122.63361442 256.69284432c5.43263213 11.35805485 6.12677908 24.39319178 1.90360687 36.22814287-4.17018417 11.87601644-12.93578371 21.56228901-24.25807175 26.99624545l-256.68887009 122.54618389c-23.56524912 11.22293482-51.90607451 1.2054857-63.22306401-22.35976342-11.31698949-23.60764006-1.29953907-51.94846546 22.35976342-63.17802314l134.92823922-64.47093935c-208.26413135-42.39598859-292.21756617-198.66396497-329.00341165-267.54486027-41.88332555-78.29162929-53.10758467-198.98984297-53.57388254-204.04625768C411.11413404 206.34724558000005 430.36348058 183.34102339000003 456.43375445 180.97111865L456.43375445 180.97111865zM456.43375445 180.97111865"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="setting" unicode="&#58885;" d="M207.36439152 666.93356681L206.58010339 667.15980377 206.58010339 772.6239335c0 22.11089226-17.72943647 40.03640078-39.59146808 40.03640077S127.39716724 794.7348257799999 127.39716724 772.6239335l0-105.42642355-1.5534938-0.44493271c-63.42176125-18.09141559-107.66616948-76.67170589-107.66616947-142.6046974s44.25194945-124.50574058 107.66616947-142.77814572L127.39716724 380.93234265l0-389.98727241c0-22.11089226 17.72943647-40.03640078 39.59146807-40.03640078s39.59146809 17.92550849 39.59146808 40.03640078L206.58010339 381.15103836000003l0.78428813 0.21869576c63.59520958 18.09141559 108.02814861 76.67170589 108.02814863 142.77814572C315.3849989 590.26186091 270.95960111 648.84215121 207.36439152 666.93356681zM922.5220472 667.47653552l-2.03613264 0.58067488L920.48591456 772.6239335c0 22.11089226-17.7369777 40.03640078-39.59146809 40.03640077-21.86203159 0-39.59900931-17.92550849-39.59900932-40.03640077l0-105.11723306-0.11311846-0.03016492c-63.60275081-18.09141559-107.85470028-76.85269548-107.85470029-142.78568697s44.44048026-124.68673012 107.85470029-142.77814574l0.11311846-0.03016493 0-390.93746764c0-22.11089226 17.7369777-40.03640078 39.59900932-40.03640078 21.85449038 0 39.59146809 17.92550849 39.59146809 40.03640078L920.48591456 381.33202795l2.03613264 0.58067486c63.59520958 18.09141559 107.84715905 76.85269548 107.84715904 142.77814574S985.93626722 649.3775786799999 922.5220472 667.47653552zM565.11289707 374.38655325l-4.09488896 1.15380851L561.01800811 771.36454776c0 22.11089226-17.7369777 40.03640078-39.59146809 40.03640078-21.86957285 0-39.59146809-17.92550849-39.59146808-40.03640078l0-397.38522102c-62.62993187-18.68717294-106.07496954-76.89794286-106.07496952-142.19747087 0-65.29198678 43.61848597-123.5027567 106.07496952-142.18238841l0-99.89870052c0-22.11089226 17.72943647-40.03640078 39.59146808-40.03640075 21.85449038 0 39.59146809 17.92550849 39.59146809 40.03640075l0 97.96060389 4.09488896 1.16134971c63.60275081 18.09895683 107.85470028 76.85269548 107.85470028 142.78568699C672.96759735 297.70730614 628.53465833 356.28759643 565.11289707 374.38655325z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shang2" unicode="&#58919;" d="M284.27394719 194.76403153h459.42346018c25.43535405 0 45.97965963 20.07886438 45.97965963 45.1388446 0 11.62819779-4.54644296 22.16719609-11.82287751 30.14906494l-227.19236182 298.62863364c-15.20403924 19.78292883-43.89692219 23.94392831-64.13130662 8.92673686-3.54339484-2.56272366-6.63869062-5.56963039-9.06771183-8.92673686l-229.7875321-301.78322842c-15.04963808-19.78292883-10.99548866-48.16141522 9.21931587-62.99511545 8.29962198-6.24933117 17.8215865-9.10687154 27.38550788-9.10687152v0 0 0zM284.27394719 194.76403153z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="xia-copy" unicode="&#58886;" d="M283.73689968 571.33058458h459.42346017c25.43535405 0 45.97965963-20.07886438 45.97965962-45.13884458 0-11.62819779-4.54644296-22.16719609-11.82287752-30.14906496l-227.19236182-298.60905376c-15.22865393-19.78292883-43.89692219-23.94392831-64.1313066-8.92673685-3.54339484 2.56272366-6.63869062 5.56963039-9.06771183 8.92673685l-229.78753211 301.78322842c-15.04963808 19.78292883-10.99548866 48.16141522 9.21931587 62.99511543 8.29738429 6.20569605 17.8215865 9.07274665 27.38550789 9.07274665v0 0 0zM283.73689968 571.33058458z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daochu" unicode="&#59092;" d="M509.5745 843.537c11.7945 0 21.7275-4.0335 29.796-12.1005L748.955 621.852c8.0685-8.07 12.102-18.003 12.102-29.799 0-12.0105-3.981-21.9975-11.943-29.9595-7.965-7.9635-17.9505-11.9445-29.9565-11.9445-11.8005 0-21.7335 4.0335-29.802 12.1035l-137.8485 138.189 0-485.6235c0-11.565-4.095-21.4455-12.2895-29.6445-8.199-8.1915-18.078-12.288-29.643-12.288-11.571 0-21.4515 4.0965-29.6445 12.288-8.199 8.199-12.2955 18.0795-12.2955 29.6445L467.6345 700.4415l-137.844-138.189c-8.508-8.07-18.4425-12.1035-29.8005-12.1035-11.571 0-21.4515 4.0965-29.646 12.2895-8.1975 8.193-12.294 18.075-12.294 29.6445 0 11.358 4.035 21.291 12.1035 29.802L479.738 831.4695c8.067 8.067 18.0015 12.1005 29.802 12.1005L509.5745 843.537M928.709 256.75649999999996c11.5695 0 21.453-4.095 29.6445-12.2925 8.193-8.1945 12.288-18.0765 12.288-29.646l0-167.646c0-34.935-12.1095-64.515-36.3405-88.7445-24.6645-24.6645-54.1395-36.9975-88.428-36.9975L174.242-78.57000000000005c-34.263 0-63.9525 12.2265-89.0565 36.6855C60.725-16.778999999999996 48.5 12.908999999999992 48.5 47.172000000000025L48.5 214.81799999999998c0 11.5695 4.095 21.4515 12.2895 29.646 8.1975 8.1975 18.078 12.2925 29.649 12.2925 11.565 0 21.4455-4.095 29.643-12.2925 8.1945-8.1945 12.2895-18.0765 12.2895-29.646l0-167.646c0-11.5695 4.095-21.4515 12.2895-29.6445 8.1975-8.1945 18.0795-12.2895 29.649-12.2895l671.6265 0c11.3595 0 21.0195 4.095 28.986 12.2895 7.962 8.193 11.9445 18.075 11.9445 29.6445L886.8665 214.81799999999998c0 11.5695 4.0935 21.4515 12.288 29.646 8.199 8.1975 18.0795 12.2925 29.6445 12.2925L928.709 256.75649999999996"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wenjianjia1" unicode="&#58913;" d="M921.53173333-25.531733329999952L853.26506667-25.531733329999952 102.33173333-25.531733329999952C83.49013333-25.531733329999952 66.42346667-17.88586667000004 54.0672-5.59786667000003 41.71093333 6.7584000000000515 34.06506667 23.825066669999956 34.06506667 42.73493332999999L34.06506667 588.86826667 34.06506667 725.4016C34.06506667 763.0848 64.64853333 793.6 102.33173333 793.6L443.66506667 793.6C459.84426667 793.6 474.112 787.18293333 485.7856 777.76213333 540.0576 742.33173333 594.26133333 657.13493333 648.46506667 657.13493333L921.53173333 657.13493333C959.2832 657.13493333 989.7984 626.5514666700001 989.7984 588.86826667L989.7984 42.73493332999999C989.7984 5.051733330000047 959.2832-25.531733329999952 921.53173333-25.531733329999952Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yingyong" unicode="&#58900;" d="M465.554185 849.454545 465.554185 477.090909C465.554185 464.058182 461.054791 453.042424 452.087034 444.043637 443.057216 435.044848 432.041458 430.545454 419.008731 430.545454L46.645094 430.545454C33.612367 430.545454 22.596609 435.044848 13.597822 444.043637 4.599034 453.042424 0.09964 464.058182 0.09964 477.090909L0.09964 849.454545C0.09964 862.487273 4.599034 873.50303 13.597822 882.501818 22.596609 891.469576 33.612367 896 46.645094 896L419.008731 896C432.041458 896 443.057216 891.469576 452.087034 882.501818 461.054791 873.50303 465.554185 862.487273 465.554185 849.454545 465.554185 849.454545 465.554185 862.487273 465.554185 849.454545L465.554185 849.454545 465.554185 849.454545ZM465.554185 290.909091 465.554185-81.454545C465.554185-94.487276 461.054791-105.503027 452.087034-114.501821 443.057216-123.500607 432.041458-128 419.008731-128L46.645094-128C33.612367-128 22.596609-123.500607 13.597822-114.501821 4.599034-105.503027 0.09964-94.487276 0.09964-81.454545L0.09964 290.909091C0.09964 303.941818 4.599034 314.957576 13.597822 323.956363 22.596609 332.924121 33.612367 337.454546 46.645094 337.454546L419.008731 337.454546C432.041458 337.454546 443.057216 332.924121 452.087034 323.956363 461.054791 314.957576 465.554185 303.941818 465.554185 290.909091 465.554185 290.909091 465.554185 303.941818 465.554185 290.909091L465.554185 290.909091 465.554185 290.909091ZM1024.099643 849.454545 1024.099643 477.090909C1024.099643 464.058182 1019.600242 453.042424 1010.632491 444.043637 1001.60267 435.044848 990.586912 430.545454 977.554188 430.545454L605.190549 430.545454C592.157821 430.545454 581.142064 435.044848 572.143276 444.043637 563.144488 453.042424 558.645094 464.058182 558.645094 477.090909L558.645094 849.454545C558.645094 862.487273 563.144488 873.50303 572.143276 882.501818 581.142064 891.469576 592.157821 896 605.190549 896L977.554188 896C990.586912 896 1001.60267 891.469576 1010.632491 882.501818 1019.600242 873.50303 1024.099643 862.487273 1024.099643 849.454545 1024.099643 849.454545 1024.099643 862.487273 1024.099643 849.454545L1024.099643 849.454545 1024.099643 849.454545ZM1024.099643 290.909091 1024.099643-81.454545C1024.099643-94.487276 1019.600242-105.503027 1010.632491-114.501821 1001.60267-123.500607 990.586912-128 977.554188-128L605.190549-128C592.157821-128 581.142064-123.500607 572.143276-114.501821 563.144488-105.503027 558.645094-94.487276 558.645094-81.454545L558.645094 290.909091C558.645094 303.941818 563.144488 314.957576 572.143276 323.956363 581.142064 332.924121 592.157821 337.454546 605.190549 337.454546L977.554188 337.454546C990.586912 337.454546 1001.60267 332.924121 1010.632491 323.956363 1019.600242 314.957576 1024.099643 303.941818 1024.099643 290.909091L1024.099643 290.909091Z"  horiz-adv-x="1028" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zuo1" unicode="&#59121;" d="M465.322911 208.742441c5.223978-5.199419 12.133342-8.072863 19.470447-8.072863 7.337105 0 14.222933 2.873444 19.398816 8.072863 10.399861 10.399861 10.447956 28.516474 0.047072 38.869263l-108.821451 108.797915 299.276131 0c15.220656 0 27.591405 12.370749 27.591405 27.590382 0 15.219633-12.370749 27.590382-27.591405 27.590382l-299.276131 0 108.797915 108.74982c5.200442 5.223978 8.072863 12.133342 8.072863 19.470447 0 7.337105-2.848884 14.222933-8.049327 19.398816-5.247514 5.247514-12.156878 8.120958-19.493983 8.120958-7.337105-0.023536-14.222933-2.873444-19.398816-8.072863L309.48668 403.493983c-10.352789-10.304693-10.376325-28.589129 0-38.988989L465.322911 208.742441zM512-93.342666c64.415079 0 126.916575 12.596899 185.789427 37.506219 56.845683 24.051789 107.892289 58.473763 151.711284 102.292758 43.847647 43.818995 78.240969 94.865601 102.292758 151.71026 24.880667 58.874899 37.506219 121.403001 37.506219 185.818079 0 64.442708-12.596899 126.94625-37.506219 185.818079C927.741679 626.649436 893.319705 677.695019 849.500711 721.514013c-43.847647 43.847647-94.865601 78.240969-151.711284 102.292758-58.845223 24.909319-121.374348 37.535895-185.789427 37.535895S385.083425 848.71609 326.20955 823.806771c-56.845683-24.051789-107.892289-58.473763-151.711284-102.292758C130.650619 677.695019 96.258321 626.649436 72.205509 569.803753 47.324842 510.929878 34.69929 448.400752 34.69929 383.985674c0-64.442708 12.597923-126.94625 37.506219-185.818079 24.051789-56.844659 58.473763-107.891266 102.292758-151.71026 43.820018-43.847647 94.865601-78.240969 151.711284-102.292758C385.083425-80.718137 447.584921-93.342666 512-93.342666zM512-41.953252c-234.836493 0-425.882644 191.07378-425.911296 425.910273 0 234.865145 191.046151 425.939949 425.911296 425.939949 234.865145 0 425.911296-191.074803 425.911296-425.939949C937.911296 149.120528 746.837516-41.953252 512-41.953252z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shang3" unicode="&#59123;" d="M531.493983 586.51332c-10.399861 10.376325-28.683273 10.352789-38.987966 0L336.741417 430.653553c-5.199419-5.175883-8.049327-12.062733-8.072863-19.398816 0-7.337105 2.873444-14.246469 8.120958-19.493983 5.175883-5.199419 12.06171-8.049327 19.398816-8.049327 7.337105 0 14.246469 2.873444 19.470447 8.072863l108.74982 108.797915 0-299.276131c0-15.220656 12.370749-27.591405 27.590382-27.591405 15.219633 0 27.590382 12.370749 27.590382 27.591405L539.589358 500.581182l108.797915-108.821451c10.352789-10.399861 28.469402-10.352789 38.869263 0.047072 5.199419 5.175883 8.072863 12.062733 8.072863 19.398816 0 7.337105-2.873444 14.246469-8.072863 19.470447L531.493983 586.51332zM951.836447 569.79045c-24.051789 56.845683-58.44511 107.891266-102.292758 151.711284-43.818995 43.818995-94.865601 78.240969-151.71026 102.292758-58.872852 24.909319-121.375371 37.506219-185.818079 37.506219-64.415079 0-126.944204-12.625552-185.818079-37.506219-56.844659-24.051789-107.891266-58.44511-151.71026-102.292758-43.818995-43.818995-78.240969-94.865601-102.292758-151.711284-24.909319-58.873876-37.535895-121.374348-37.535895-185.789427S47.28391 257.054773 72.193229 198.210573c24.051789-56.845683 58.44511-107.863636 102.292758-151.711284 43.818995-43.818995 94.865601-78.240969 151.71026-102.292758 58.872852-24.909319 121.375371-37.506219 185.818079-37.506219 64.415079 0 126.944204 12.625552 185.818079 37.506219 56.844659 24.051789 107.891266 58.44511 151.71026 102.292758 43.818995 43.818995 78.240969 94.865601 102.292758 151.711284 24.909319 58.873876 37.506219 121.374348 37.506219 185.789427S976.718137 510.916575 951.836447 569.79045zM512.042979-41.911296c-234.865145 0-425.939949 191.046151-425.939949 425.911296S277.177833 809.911296 512.042979 809.911296c234.837516-0.028653 425.910273-191.074803 425.910273-425.911296S746.879472-41.911296 512.042979-41.911296z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="shezhi" unicode="&#59027;" d="M889.020555 110.974912 317.477711 110.974912c-11.852873 45.894346-53.604805 79.863297-103.122312 79.863297-58.739309 0-106.501802-47.765394-106.501802-106.469892 0-58.727705 47.765394-106.490198 106.501802-106.490198 49.520408 0 91.269439 34.000861 103.122312 79.851694l571.542844 0c14.701507 0 26.600793 11.931195 26.600793 26.638504C915.621348 99.05532 903.724963 110.974912 889.020555 110.974912L889.020555 110.974912zM214.355399 31.120317c-29.368204 0-53.250901 23.891399-53.250901 53.248 0 29.359501 23.882697 53.242198 53.250901 53.242198 29.371105 0 53.250901-23.879796 53.250901-53.242198C267.6063 55.011717 243.723603 31.120317 214.355399 31.120317L214.355399 31.120317zM889.54851 410.606595 807.451558 410.606595c-11.852873 45.885643-53.604805 79.877802-103.122312 79.877802-49.563921 0-91.269439-33.992159-103.122312-79.877802L137.923807 410.606595c-14.707309 0-26.647207-11.907989-26.647207-26.603694 0-14.716011 11.939898-26.638504 26.647207-26.638504l463.286028 0c11.852873-45.868238 53.558391-79.854595 103.122312-79.854595 49.517507 0 91.269439 33.989258 103.122312 79.854595l82.096952 0c14.701507 0 26.600793 11.919592 26.600793 26.638504C916.149303 398.698606 904.250017 410.606595 889.54851 410.606595L889.54851 410.606595zM704.329246 330.752c-29.371105 0-53.250901 23.879796-53.250901 53.250901 0 29.359501 23.879796 53.242198 53.250901 53.242198s53.250901-23.879796 53.250901-53.242198C757.583048 354.631796 733.700351 330.752 704.329246 330.752L704.329246 330.752zM214.355399 577.135683c49.520408 0 91.269439 34.000861 103.122312 79.874901l571.542844 0c14.701507 0 26.600793 11.907989 26.600793 26.615297 0 14.707309-11.899286 26.626901-26.600793 26.626901L317.477711 710.252782C305.621938 756.118119 263.872907 790.11898 214.355399 790.11898c-58.739309 0-106.501802-47.776997-106.501802-106.493099S155.616091 577.135683 214.355399 577.135683L214.355399 577.135683zM214.355399 736.865178c29.371105 0 53.250901-23.871093 53.250901-53.242198 0-29.356601-23.882697-53.248-53.250901-53.248-29.368204 0-53.250901 23.891399-53.250901 53.248C161.104499 712.996986 184.987195 736.865178 214.355399 736.865178L214.355399 736.865178zM214.355399 736.865178"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dunpai" unicode="&#58891;" d="M894.87453312 724.00957781c-136.18583625 5.95899-262.60944562 54.70541438-372.82109718 132.88277625l-10.05208782 7.10764594-10.01973093-7.10764594c-110.17794656-78.17871094-236.62043063-126.92513531-372.84536438-132.88277625L108.98623906 724.00957781 108.98623906 404.00103937c0-236.05823625 163.75762406-444.90734719 398.3449875-499.13011031l5.54914031-0.87092906 3.87603938 0.8871075c234.49299 54.198495 398.25735469 263.0543475 398.25735469 499.11258375l0 320.00853844L894.87453312 724.00822969 894.87453312 724.00957781zM512 804.00160125c105.46063781-72.20219438 221.98720031-108.84593719 349.74147094-119.05171875L861.74147094 377.37972375000004c-29.55497156-348.480915-346.90353563-419.72320031-352.07922844-420.8637675l0 1.09068375c0 0-317.93098125 69.52738969-347.72997469 420.87859687l0 306.44577c1.91847094 0.15234563 3.83963906 0.30064594 5.75136844 0.46512469C293.36574219 696.19511625 408.0601175 732.8321184399999 512 804.00160125L512 804.00160125zM277.9141625 399.0922875L441.23362531 229.92843094l0.77251125 0c5.72575312-11.34499969 17.47520906-19.12943625 31.05011157-19.12943625 13.57355438 0 25.32435844 7.78443562 31.04876343 19.12943625l0.40580438 0L750.10478469 490.67198438c9.10296375 5.1945675 15.24665531 14.98375875 15.24665531 26.21551031 0 16.66090406-13.50614437 30.16704844-30.1683975 30.16704844-12.34400719 0-22.95019969-7.41772875-27.62167031-18.03605532l-234.05078438-248.70019219c-0.15234563 0.00269625-0.30199406 0.01078594-0.45433968 0.01078594-0.75498469 0-1.50322969-0.03100875-2.24608032-0.07954312L318.95973875 439.64173031c-5.04357 9.61392656-15.1145325 16.17420844-26.72377781 16.17420844-16.66090406 0-30.16704844-13.50749344-30.16704844-30.16704844C262.06756344 414.17041969 268.479545 404.19113344 277.9141625 399.0922875L277.9141625 399.0922875z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="biaoji1" unicode="&#59060;" d="M512.434393 829.138196c-0.054235 0-0.109494 0-0.163729 0l-0.541329 0c-0.056282 0-0.109494 0-0.163729 0-191.363376-0.434905-346.930477-156.1115-346.930477-347.637582 0-188.810227 119.553886-338.510714 326.018192-532.535709 0.325411-0.434905 0.434905-0.977257 0.814552-1.302669 3.042289-3.260254 6.735401-5.432733 10.646478-6.843872 0.923022-0.325411 1.954515-0.325411 2.933819-0.543376 2.226714-0.542352 4.399193-1.412163 6.681166-1.412163 0.107447 0 0.161682 0.10847 0.270153 0.10847 0.109494 0 0.163729-0.10847 0.272199-0.10847 2.281973 0 4.455475 0.86981 6.681166 1.412163 0.977257 0.217964 2.010797 0.217964 2.933819 0.543376 3.90903 1.412163 7.605212 3.584642 10.646478 6.843872 0.379647 0.325411 0.488117 0.868787 0.813528 1.302669 206.464305 194.024995 326.019215 343.725482 326.019215 532.535709C859.364871 673.026696 703.796746 828.703291 512.434393 829.138196zM511.998465 299.752224c-101.193727 0-183.541223 82.347496-183.541223 183.596482 0 101.247962 82.347496 183.486988 183.541223 183.486988 101.195773 0 183.541223-82.238003 183.541223-183.486988C695.539688 382.098697 613.194238 299.752224 511.998465 299.752224z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="guanliyuan" unicode="&#58940;" d="M512 345.69038621000004C643.26037049 345.69038621000004 749.66792419 503.0267813 749.66792419 634.28715179 749.66792419 765.5475222800001 643.26037049 871.95507598 512 871.95507598 380.73962951 871.95507598 274.33207581 765.5475222800001 274.33207581 634.28715179 274.33207581 503.0267813 380.73962951 345.69038621000004 512 345.69038621000004ZM87.59299186 82.54855850000001C87.59299186 146.76756137999996 134.17429675 222.06843790000005 191.63876011 250.73952768000004L297.33593202 303.47565169999996 377.39807517 27.305231919999983C377.39807517 27.305231919999983 379.63732878 3.408154159999981 419.6612517 3.408154159999981 459.68517575 3.408154159999981 459.68517575 27.305231919999983 459.68517575 27.305231919999983L459.68517575 252.54681030999996C459.68517575 252.54681030999996 461.50140928 303.47565169999996 513.68791837 303.47565169999996 565.87442745 303.47565169999996 565.87442745 252.54681030999996 565.87442745 252.54681030999996L565.87442745 27.305231919999983C565.87442745 27.305231919999983 579.51911026-1.001824719999945 611.84959943-1.001824719999945 644.18009088-1.001824719999945 648.08122254 27.305231919999983 648.08122254 27.305231919999983L726.46674205 303.47565169999996 832.3402331 250.70120504C889.81472711 222.05206413999997 936.40700814 146.77719380999997 936.40700814 82.54855850000001L936.40700814 12.32371255999999C936.40700814-51.89528917999996 884.3490907-103.95507597999995 820.13508381-103.95507597999995L203.86491619-103.95507597999995C139.64970553-103.95507597999995 87.59299186-51.904921599999966 87.59299186 12.32371255999999L87.59299186 82.54855850000001Z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="daoru" unicode="&#58963;" d="M517.61533203 179.26494141c-11.50048828 0-21.19042969 3.94628906-29.05839844 11.80371093L284.13828125 395.48378906c-7.86796875 7.87236328-11.80371094 17.55791016-11.80371094 29.06103516 0 11.72021484 3.88476563 21.46025391 11.64726563 29.22539062 7.76953125 7.77392578 17.5078125 11.65166016 29.21660156 11.65166016 11.50927734 0 21.20361328-3.9375 29.07158203-11.80546875l134.44804688-134.78203125L476.71806641 792.48486328c0 11.27636719 3.99638672 20.91533203 11.97949218 28.90898438 7.99541016 7.98925781 17.63085938 11.98564453 28.9116211 11.98564453 11.29394531 0 20.92675781-3.99638672 28.91601562-11.98564453 7.99365234-7.99365234 11.99707031-17.63261719 11.99707032-28.90898438l0-473.65048828 134.43310546 134.78203125c8.30566406 7.875 17.99121094 11.80546875 29.07421875 11.80546875 11.29394531 0 20.91796875-3.99902344 28.9116211-11.98388672 7.99365234-7.98925781 11.99267578-17.63261719 11.99267578-28.91601562 0-11.07861328-3.92871094-20.7703125-11.80371094-29.06542969L546.7203125 191.04228516c-7.86621094-7.875-17.56933594-11.80371094-29.06542969-11.80371094L517.61533203 179.26494141zM921.63007813 261.03837891c11.27636719 0 20.92236328-3.99902344 28.90283203-11.98828125 7.98486328-7.99365234 11.98828125-17.63525391 11.98828125-28.92480469l0-163.49853516c0-34.07519531-11.80810547-62.92529297-35.44628907-86.56347656-24.05566406-24.046875-52.8046875-36.07910156-86.23388672-36.07910156L185.76318359-66.01582030999998c-33.41777344 0-62.37158203 11.92675781-86.85791015 35.78027343-23.85791016 24.48632813-35.78027344 53.44189453-35.78027344 86.86230469L63.125 220.12529297000003c0 11.29833984 3.99199219 20.93115234 11.98388672 28.92480469 7.99365234 7.98925781 17.63261719 11.98828125 28.91777344 11.98828125 11.278125 0 20.91796875-3.99902344 28.91162109-11.98828125 7.99101562-7.99365234 11.98388672-17.63525391 11.98388672-28.92480469l0-163.49853516c0-11.28076172 3.99199219-20.92675781 11.99003906-28.92041015 7.99101562-7.98925781 17.62382812-11.97070313 28.91337891-11.97070313l655.06728515 0c11.06982422 0 20.49609375 3.98144531 28.265625 11.97070313 7.76953125 7.99365234 11.65869141 17.63964844 11.65869141 28.92041015L880.8171875 220.12529297000003c0 11.29833984 3.99462891 20.93115234 11.98388672 28.92480469 7.99365234 7.98925781 17.62646484 11.98828125 28.90722656 11.98828125L921.63007813 261.03837891z"  horiz-adv-x="1025" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="icons22" unicode="&#58965;" d="M858.59104658 631.5157175300001l58.34052478 23.474294 52.81716147 70.76809217L899.32585086 796.1809856899999l-71.11330239-52.8171615-23.12908378-58.34052478L630.06189037 510.0017251l57.30489416-49.71026963L858.59104658 631.5157175300001zM961.4636879 154.78042337l-316.90296888 276.16816462-11.3919368 9.66588576-90.44507392 78.7079269c11.04672658 53.5075819 30.7237083 197.46023769-49.36505941 277.54900543-52.81716148 52.81716148-122.89483325 81.81481876-197.11502749 81.81481878-18.29614091 0-36.5922818-1.72605102-54.54321251-5.17815309-4.83294288-1.03563061-8.97546534-4.48773268-10.35630617-9.32067556-1.38084082-4.83294288 0-10.01109597 3.45210205-13.46319801l119.4427312-119.4427312 23.81950419-115.64541894L280.36395194 517.9415598400001l-115.64541894 23.81950419-119.4427312 119.4427312c-3.45210207 3.45210207-8.97546534 4.83294288-13.80840822 3.45210205-4.83294288-1.38084082-8.28504494-5.5233633-9.32067555-10.35630617-18.29614091-91.48070453 10.35630617-185.7230907 76.29145546-251.65824 39.35396347-39.35396347 100.45616987-60.06657581 177.09283556-60.0665758l0 0c32.10454914 0 66.62556972 3.79731227 100.45616988 10.70151639L740.52915621-64.77326748999997c30.0332879-30.0332879 69.04204115-46.25816757 110.81247606-46.25816757 41.42522469 0 80.77918815 16.22487967 110.12205563 45.56774716C1022.22068412-4.706691699999965 1022.22068412 94.36863736999999 961.4636879 154.78042337zM878.61323852 17.38676148000002c-15.18924905-15.18924905-39.69917366-15.18924905-54.88842271 0l0 0c-15.18924905 15.18924905-15.18924905 39.69917366 0 54.88842271 15.18924905 15.18924905 39.69917366 15.18924905 54.88842271 0l0 0C893.80248757 57.08593513999995 893.80248757 32.57601052999996 878.61323852 17.38676148000002zM357.00061762 277.67525663000004c-13.80840823 13.80840823-36.24707161 13.80840823-50.05547984 0l-232.67167869-233.0168889c-13.80840823-13.80840823-13.80840823-36.24707161 0-50.05547983l90.79028411-90.79028411c13.80840823-13.80840823 36.24707161-13.80840823 50.40069005 0l226.11268478 225.76747458c13.80840823 13.80840823 13.80840823 36.24707161 0 50.40069002L357.00061762 277.67525663000004z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="you" unicode="&#59074;" d="M990.50986667 380.40639999999996c0-263.32266667-213.59786667-476.8064-477.104-476.8064-263.49013333 0-477.06453333 213.48373333-477.06453334 476.8064 0 263.36 213.57226667 476.8064 477.06453334 476.8064 263.50186667 0 477.10293333-213.4432 477.104-476.8064zM942.4384 380.04586667c0 236.24213333-192.4672 429.38133333-429.03253333 429.38133333-236.57706667 0-429.05706667-193.13813333-429.05706667-429.38026667s192.48-428.4384 429.05706667-428.4384c236.56533333 0 429.03253333 192.19626667 429.03253333 428.4384zM583.024 592.57493333l191.51253333-211.52213333-194.48106666-210.02666667c-9.33973333-9.3024-24.4352-9.3024-33.72373334 0-9.3152 9.3024-9.3152 24.3968 0 33.70026667l141.81546667 151.99466667h-389.48906667c-13.16053333 0-23.86773333 10.6688-23.86773333 23.82933333s10.70933333 23.84213333 23.86773333 23.84213333h390.9856l-140.31893333 154.48426667c-9.3408 9.31626667-9.3408 24.38506667 0 33.70133333 4.64426667 4.64426667 10.73493333 6.9664 16.8224 6.9664 6.0896 0 12.2304-2.32213333 16.87573333-6.9664z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yaochi" unicode="&#58887;" d="M263.40053333 135.40053333000003c115.8528 0 209.98293333 84.47573333 226.87786667 193.08693334h106.1984v-135.1616c0-19.3088 14.48106667-33.78986667 33.78986667-33.78986667s33.78986667 14.48106667 33.78986666 33.78986667v135.1616h106.1984v-91.71626667c0-19.3088 14.48106667-33.78986667 33.78986667-33.78986667s33.78986667 14.48106667 33.78986667 33.78986667v91.71626667l118.2656 2.41386666c19.3088 0 33.78986667 14.48106667 33.78986666 33.78986667s-14.48106667 33.78986667-33.78986666 33.78986667h-154.46933334c0 0 0 0 0 0s0 0 0 0h-173.77813333c0 0 0 0 0 0s0 0 0 0h-139.98826667c-14.48106667 111.02506667-111.02506667 197.91466667-224.464 195.5008-62.75306667 0-120.67946667-24.13546667-161.71093333-65.16693334s-65.16693333-98.9568-65.16693333-161.71093333c-2.41386667-127.92 98.9568-229.29066667 226.87786666-231.70453333zM101.6896 364.6912c0 91.71626667 72.40746667 164.12373333 161.71093333 161.71093333 86.8896 0 159.29706667-72.40746667 161.71093334-161.71093333 0-43.44426667-16.89493333-84.47573333-45.85813334-113.43893333s-69.99466667-45.85813333-113.43893333-45.85813334v0c-91.71626667 0-164.12373333 72.40746667-164.12373333 159.29706667z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="zengjia" unicode="&#58947;" d="M896.162 832.176h-768c-35.346 0-64-28.653-64-64v-768c0-35.346 28.654-64 64-64h768c35.347 0 64 28.654 64 64v768c0 35.347-28.653 64-64 64z m-128-448c0-17.673-14.326-32-32-32h-192v-192c0-17.673-14.326-32-32-32-17.673 0-32 14.327-32 32v192h-192c-17.673 0-32 14.327-32 32v0.002c0 17.673 14.327 32 32 32h192V608.176c0 17.674 14.327 32 32 32 17.674 0 32-14.326 32-32v-191.998h192c17.674 0 32-14.327 32-32v-0.002z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="liuchengdingyi" unicode="&#58981;" d="M578.674 817.5h-133.33c-55.228-1-99.165-46.635-98.136-101.862 1.001-53.779 44.358-98.138 98.136-98.138h133.332c55.228 0 99.165 46.635 98.137 101.862-1.004 53.779-44.36 97.138-98.139 98.138z m0-334h-133.33c-55.228-1-99.165-46.635-98.136-101.862 1.001-53.779 44.358-96.138 98.136-98.138h133.332c55.228 2 99.165 46.634 98.137 101.862-1.004 53.779-44.36 97.138-98.139 98.138z m0-333h-133.33c-55.228-2-99.164-46.635-98.135-101.862 1.001-53.779 44.358-97.138 98.135-98.138h133.332c55.228 1 99.078 46.71 98.05 101.937-1.001 53.78-44.225 96.911-98.225 97.912v0.151h0.173z m-366.926-66.513c-35.384-0.089-69.215 13.951-94.207 39.001-25.051 24.996-39.028 58.959-38.939 94.348-0.089 35.384 13.981 69.256 39.033 94.247 24.964 25.09 58.968 38.918 94.36 38.918H278.5v67h-66.505c-110.45 0-200.245-89.648-200.245-200.08 0-110.45 89.75-200.08 199.75-200.08v-66.683l99.999 99.999-99.999 99.996v-66.665l0.248-0.001zM812.022 750.5H745.5v-67h66.522c35.384 0 69.34-13.695 94.33-38.745 25.221-25.22 39.001-58.546 39.001-94.203 0-35.655-14.145-69.045-39.262-94.266-24.992-25.048-59.592-39.023-94.592-38.936v66.665L711.492 384 811.5 284.001v66.665c110 0 200.25 89.475 200.25 199.908 0.017 110.451-89.295 199.926-199.728 199.926z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="left" unicode="&#58888;" d="M987.712 385.83786667c0 263.23093333-213.39093333 476.62186667-476.62293333 476.62186666s-476.62293333-213.39093333-476.62293334-476.62186666 213.39093333-476.62293333 476.62293334-476.62293334 476.62293333 213.39093333 476.62293333 476.62293334zM388.9152 90.36586666999995c-7.712 7.70346667-11.568 17.8144-11.568 27.9168 0 10.10346667 3.856 20.21333333 11.568 27.9168l227.17226667 227.17973333c4.04053333 4.0576 4.0576 10.65813333 0 14.71573333l-227.17226667 227.17973334c-15.424 15.40906667-15.424 40.4256 0 55.83573333 15.41653333 15.424 40.41813333 15.424 55.83573333 0l227.17226667-227.17973333c34.84266667-34.8576 34.84266667-91.55733333 0-126.38506667l-227.17226667-227.17973333c-15.41653333-15.424-40.4192-15.424-55.83573333 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yingyong1" unicode="&#58959;" d="M544 343.68v-247.68c0-17.673-14.327-32-32-32-0.192-0.004-0.419-0.007-0.647-0.007-17.32 0-31.36 14.040-31.36 31.36 0 0.227 0.002 0.454 0.007 0.68l-0.001 247.646-224 129.28c-9.505 5.665-15.773 15.891-15.773 27.58 0 5.867 1.579 11.364 4.334 16.092 5.396 9.474 15.585 15.86 27.266 15.86 5.974 0 11.558-1.671 16.311-4.57l223.862-127.922 222.080 128c4.614 2.821 10.198 4.492 16.173 4.492 11.681 0 21.87-6.386 27.266-15.857 2.755-4.73 4.334-10.228 4.334-16.094 0-11.689-6.268-21.915-15.626-27.499l-222.226-128.081zM64 640v-512l448-256 448 256v512l-448 256zM896 160l-384-224-384 224v448l384 224 384-224z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="left1" unicode="&#59031;" d="M512 861.86666667C248.10666667 861.86666667 34.13333333 647.89333333 34.13333333 384s213.97333333-477.86666667 477.86666667-477.86666667 477.86666667 213.97333333 477.86666667 477.86666667S775.89333333 861.86666667 512 861.86666667z m125.54666667-725.86666667c-13.33333333-13.33333333-34.98666667-13.33333333-48.32 0L365.12 359.89333333c-13.33333333 13.33333333-13.33333333 34.98666667 0 48.32L588.8 632c13.33333333 13.33333333 34.98666667 13.33333333 48.32 0s13.33333333-34.98666667 0-48.32L437.44 384l200.10666667-199.68c13.33333333-13.33333333 13.33333333-34.98666667 0-48.32z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bangzhu" unicode="&#58889;" d="M512 896C230.4 896 0 665.6 0 384s230.4-512 512-512 512 230.4 512 512S796.8 896 512 896z m0-768c-28.8 0-54.4 25.6-54.4 54.4s22.4 54.4 54.4 54.4c28.8 0 54.4-25.6 54.4-54.4S540.8 128 512 128z m147.2 342.4c-6.4-12.8-16-25.6-25.6-35.2s-28.8-28.8-54.4-51.2c-6.4-6.4-12.8-12.8-16-19.2s-6.4-9.6-9.6-12.8c-3.2-3.2-3.2-9.6-6.4-12.8 0-3.2-3.2-12.8-6.4-22.4-3.2-22.4-16-35.2-38.4-35.2-9.6 0-19.2 3.2-28.8 9.6-6.4 6.4-12.8 19.2-12.8 32 0 19.2 3.2 35.2 9.6 48s12.8 25.6 22.4 35.2l35.2 35.2 28.8 28.8c6.4 6.4 9.6 12.8 16 22.4 3.2 6.4 6.4 16 6.4 25.6 0 16-6.4 32-19.2 44.8s-28.8 19.2-48 19.2c-22.4 0-41.6-6.4-51.2-19.2-9.6-12.8-19.2-28.8-28.8-54.4-6.4-25.6-22.4-38.4-41.6-38.4-12.8 0-22.4 3.2-28.8 12.8-6.4 9.6-9.6 19.2-9.6 28.8 0 22.4 6.4 41.6 19.2 64 12.8 22.4 32 38.4 57.6 54.4 25.6 12.8 54.4 22.4 86.4 22.4s57.6-6.4 80-16c22.4-12.8 41.6-28.8 54.4-48 12.8-19.2 19.2-41.6 19.2-67.2 0-19.2-3.2-38.4-9.6-51.2z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="info" unicode="&#58892;" d="M447.723-1.714c0-35.499 28.788-64.286 64.287-64.286s64.287 28.788 64.287 64.286c0 35.499-28.788 64.286-64.287 64.286-35.516 0-64.287-28.788-64.287-64.286zM594.287 751.723c0 45.439-36.838 82.277-82.294 82.277s-82.277-36.838-82.277-82.277c0-1.648 0.068-3.278 0.155-4.91h-0.018l17.853-524.835c0-35.499 28.788-64.286 64.287-64.286s64.287 28.788 64.287 64.286l17.852 524.835h-0.018c0.103 1.63 0.172 3.262 0.172 4.91z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="cunchu" unicode="&#58949;" d="M792.29693867 776.586656c-70.39364267 34.37981333-170.95598933 51.5691744-281.57457067 51.5691744-110.61967253 0-211.1820192-17.18936107-281.57566187-51.5691744-80.44987733-40.11032853-120.674816-85.9489888-120.674816-143.24867733v-532.884384c0-51.5691744 40.22493867-103.13834987 120.674816-137.517072 70.39473387-34.37981333 170.95708053-51.5680832 281.57566187-51.5680832 110.61858133 0 211.180928 17.18826987 281.57457067 51.5680832 75.42012267 34.37872213 120.6737248 85.94789653 120.6737248 137.517072V633.33797867c-0.0010912 57.2996896-40.22493867 103.13944107-120.6737248 143.24867733M741.21458453 537.4200768000001c-63.75388587-27.9441728-152.02782613-39.1203136-230.49221653-39.1203136-83.37080213 0-166.74051413 11.1761408-230.4944 39.1203136-73.56125333 22.35446507-107.89085653 55.88616213-107.89085653 89.41786027s39.23274133 67.0633952 107.89085653 95.0064768c63.75388587 27.9430816 147.12359787 39.1203136 230.4944 39.1203136 78.4643904 0 166.73833067-16.76584853 230.49221653-39.1203136 68.657024-27.9430816 107.89194773-61.47477867 107.8919488-95.0064768 0-33.53169707-34.33069547-67.0644864-107.8919488-89.41786027m4.90313814-162.06987093c-63.75170347-22.35337387-152.02564373-39.1203136-235.39535467-39.1203136-83.37080213 0-166.74051413 16.76584853-235.39753707 39.1203136-68.657024 27.9430816-107.88976533 61.47368747-107.88976533 95.00538453v61.47477867c49.04010773-22.35446507 83.36971093-50.29754667 137.3151392-61.47477867 63.75279467-16.76475733 132.41090987-27.9430816 205.9732544-27.94308053 73.56125333 0 142.21827733 11.177232 205.9721632 27.94308053 53.94542827 11.177232 88.27394027 39.1203136 137.314048 61.47477867v-67.06230293c-0.0010912-27.9441728-39.23383253-61.47477867-107.89194773-89.41786027m0-178.83572053c-63.75170347-22.35446507-152.02564373-39.1203136-235.39535467-39.1203136-83.37080213 0-166.74051413 16.76475733-235.39753707 39.1203136s-107.88976533 55.8872544-107.88976533 95.007568v83.82815253c49.04010773-27.9430816 83.36971093-50.29754667 137.3151392-67.06230293 63.75279467-16.76475733 132.41090987-27.9430816 205.9732544-27.9430816 73.56125333 0 142.21827733 11.177232 205.9721632 27.9430816 53.94542827 16.76475733 88.27394027 39.1192224 137.314048 67.06230293v-83.82815253c-0.0010912-39.1203136-39.23383253-72.65201173-107.89194773-95.007568m-235.39535467-217.95603307c-83.37080213 0-166.74051413 16.76475733-235.39753707 39.1203136s-107.88976533 55.8872544-107.88976533 95.007568v83.82815147c49.04010773-27.9430816 83.36971093-50.29754667 137.3151392-67.06230294 58.8496576-16.76475733 132.41090987-27.9430816 201.06793387-27.9430816 73.56234453 0 142.22045973 11.177232 205.9721632 27.9430816 58.8507488 16.76475733 93.1792608 39.1203136 142.21936853 67.06230294v-83.82815147c0-33.53278933-39.23274133-67.0644864-107.89085653-95.007568-63.75279467-27.94198933-156.93205547-39.1203136-235.39644587-39.1203136m0 0"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wode" unicode="&#59064;" d="M511.3701888 862.16615467c-263.1234048 0-476.42735253-213.30394773-476.42735253-476.42735254s213.30394773-476.42735253 476.42735253-476.42735253 476.42735253 213.30394773 476.42735253 476.42735253S774.49359467 862.16615467 511.3701888 862.16615467zM653.15731307 319.60647893a363.18364907 363.18364907 0 0 1-57.311696 18.78626454 187.98271253 187.98271253 0 0 1 73.60491413 67.08959146c18.8441152 29.80085973 28.80211307 64.23306667 28.802112 99.57560747 0 103.0488448-83.83470187 186.8835456-186.8835456 186.8835456s-186.8835456-83.83579307-186.8835456-186.8835456c0-35.343632 9.96018027-69.77474667 28.80320427-99.57560747a187.97725547 187.97725547 0 0 1 73.6081888-67.08959146A363.34519573 363.34519573 0 0 1 369.5841568 319.60647893c-43.3750848-18.34637973-82.32839467-44.6074176-115.7760448-78.05506773-28.30110187-28.30001067-51.5680832-60.7314496-69.16567467-96.4079968-51.80603627 70.15896427-79.1815232 153.33220053-79.18152426 240.59211307 0 223.8197152 182.0906528 405.90927573 405.90927573 405.90927573 223.8197152 0 405.91036693-182.0906528 405.910368-405.90927573 0-87.26100373-27.37439573-170.43424-79.18152427-240.59211307-17.59977493 35.6776384-40.86675627 68.10798613-69.16676693 96.4079968-33.44765013 33.44765013-72.3998688 59.70978027-115.77495253 78.05506773z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bianji" unicode="&#58914;" d="M962.70308693 731.94482347c-15.99842987 15.9973376-41.9332096 15.9973376-57.9305472 0L499.2630784 326.45065387c-15.99842987-15.99515307-15.99842987-41.93102507 0-57.92836267 15.99624533-15.99515307 41.9332096-15.99515307 57.92836267 0l405.51164586 405.4941696c15.99624533 15.9973376 15.99624533 41.9332096 0 57.92836267zM812.4792832 296.9780224c-22.41549653 0-40.5897216-18.17094827-40.5897216-40.58753707v-202.9387776c0-22.4165888-18.17204053-40.58753707-40.5897216-40.58753706H203.63782827c-22.41768107 0-40.5897216 18.17094827-40.5897216 40.58753706V702.85339307c0 22.41440427 18.17204053 40.58753707 40.5897216 40.58753706h405.89284693c22.41768107 0 40.5897216 18.17094827 40.5897216 40.58753707 0 22.41440427-18.17204053 40.58753707-40.5897216 40.58753707H163.04810667c-44.8331776 0-81.17835093-36.34408107-81.17835094-81.17398187v-730.57675947c0-44.83099307 36.34517333-81.1761664 81.17835094-81.1761664h608.84036266c44.83426987 0 81.17835093 36.3462656 81.17835094 81.1761664V256.3915776c0 22.4165888-18.17204053 40.58753707-40.5897216 40.58753707z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="bianji1" unicode="&#58956;" d="M773.39550781-64.95585937999999H194.48017578A96.51621094 96.51621094 0 0 0 98 31.57792969000002v643.53515625A96.48017578 96.48017578 0 0 0 194.48017578 771.62929688H644.73242188c41.22070313 0 41.22070313-64.33154297-1e-8-64.33154297H194.48017578c-17.1 0-32.18378906-15.08466797-32.18378906-32.18466797v-643.53515625c0-17.1 15.08378906-32.18378906 32.18378906-32.18378906H773.37792969c17.1 0 32.18378906 15.08378906 32.18378906 32.18378906V546.41308594c0 41.23828125 64.29638672 41.23828125 64.29638672 0v-514.81757813a96.48017578 96.48017578 0 0 0-96.46259766-96.55136718z m-212.07568359 523.88964844c-12.04189453 14.09414062-12.04189453 32.18378906 0 46.24189453L880.92792969 824.94550781a34.01982422 34.01982422 0 0 0 46.24189453 0c11.05224609-12.07792969 13.06757813-25.14550781 5.02207031-39.22207031l-5.02207031-7.03828125-319.60810547-319.75136719a34.01982422 34.01982422 0 0 0-46.24189453 0z m-109.54775391-9.07207031H258.79414062c-41.22070313 0-41.22070313 64.36757812 0 64.36757812h192.97792969c41.22070313 0 41.22070313-64.36757812 0-64.36757812zM644.75 256.83017578H258.79414062c-41.22070313 0-41.22070313 64.33154297 0 64.33154297H644.75c41.20224609 0 41.20224609-64.33154297 0-64.33154297z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="yingyong2" unicode="&#58893;" d="M366.907077 459.382154H148.558769A109.331692 109.331692 0 0 0 39.384615 568.477538V786.825846C39.384615 847.005538 88.379077 896 148.558769 896h218.348308c60.179692 0 109.095385-48.994462 109.095385-109.174154v-218.348308c0-60.179692-48.915692-109.095385-109.095385-109.095384zM148.558769 823.296a36.470154 36.470154 0 0 1-36.391384-36.470154v-218.348308c0-20.007385 16.305231-36.391385 36.391384-36.391384h218.348308a36.470154 36.470154 0 0 1 36.391385 36.391384V786.825846a36.470154 36.470154 0 0 1-36.391385 36.391385H148.558769z m218.348308-873.393231H148.558769A109.331692 109.331692 0 0 0 39.384615 59.076923V277.425231c0 60.179692 48.994462 109.174154 109.174154 109.174154h218.348308c60.179692 0 109.095385-48.994462 109.095385-109.174154v-218.348308c0-60.179692-48.915692-109.174154-109.095385-109.174154zM148.558769 313.895385a36.391385 36.391385 0 0 1-36.391384-36.391385v-218.348308c0-20.086154 16.305231-36.391385 36.391384-36.391384h218.348308a36.391385 36.391385 0 0 1 36.391385 36.391384V277.425231a36.391385 36.391385 0 0 1-36.391385 36.391384H148.558769z m724.204308 145.565538H654.414769a109.331692 109.331692 0 0 0-109.174154 109.095385V786.825846C545.240615 847.005538 594.235077 896 654.414769 896h218.348308c60.179692 0 109.174154-48.994462 109.174154-109.174154v-218.348308c0-60.179692-48.994462-109.095385-109.174154-109.095384zM654.414769 823.296a36.391385 36.391385 0 0 1-36.391384-36.470154v-218.348308c0-20.007385 16.305231-36.391385 36.391384-36.391384h218.348308a36.391385 36.391385 0 0 1 36.391385 36.391384V786.825846a36.391385 36.391385 0 0 1-36.391385 36.391385H654.414769z m218.348308-873.393231H654.414769a109.331692 109.331692 0 0 0-109.174154 109.174154V277.425231c0 60.179692 48.994462 109.174154 109.174154 109.174154h218.348308c60.179692 0 109.174154-48.994462 109.174154-109.174154v-218.348308c0-60.179692-48.994462-109.174154-109.174154-109.174154zM654.414769 313.895385a36.391385 36.391385 0 0 1-36.391384-36.391385v-218.348308c0-20.086154 16.305231-36.391385 36.391384-36.391384h218.348308a36.391385 36.391385 0 0 1 36.391385 36.391384V277.425231a36.391385 36.391385 0 0 1-36.391385 36.391384H654.414769z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="wusousuoneirong" unicode="&#59032;" d="M553.45454563-85.09090875000004H191.27272719c-58.90909125 0-106.90909125 48-106.90909125 106.90909031V748.36363594C84.36363594 807.27272719 132.36363594 855.27272719 191.27272719 855.27272719h641.45454562c58.90909125 0 106.90909125-48 106.90909125-106.90909125v-440.72727188c0-17.45454563-15.27272719-32.72727281-32.72727281-32.72727281s-32.72727281 15.27272719-32.72727281 32.72727281V748.36363594c0 24-19.63636406 41.45454563-41.45454563 41.45454562H191.27272719c-24 0-41.45454563-19.63636406-41.45454563-41.45454562v-726.54545438c0-24 19.63636406-41.45454563 41.45454563-41.45454562h362.18181844c17.45454563 0 32.72727281-15.27272719 32.72727281-32.72727188s-15.27272719-32.72727281-32.72727281-32.72727281zM714.90909125 528H328.72727281c-17.45454563 0-32.72727281 15.27272719-32.72727281 32.72727281s15.27272719 32.72727281 32.72727281 32.72727281h386.18181844c17.45454563 0 32.72727281-15.27272719 32.72727281-32.72727281s-13.09090875-32.72727281-32.72727281-32.72727281zM405.09090875 178.90909124999996h-76.36363594c-17.45454563 0-32.72727281 15.27272719-32.72727281 32.72727281s15.27272719 32.72727281 32.72727281 32.72727188h76.36363594c17.45454563 0 32.72727281-15.27272719 32.72727281-32.72727188s-15.27272719-32.72727281-32.72727281-32.72727281zM623.27272719 353.45454563H328.72727281c-17.45454563 0-32.72727281 15.27272719-32.72727281 32.72727281s15.27272719 32.72727281 32.72727281 32.72727281h294.54545438c17.45454563 0 32.72727281-15.27272719 32.72727281-32.72727281s-15.27272719-32.72727281-32.72727281-32.72727281zM728 255.27272718999996c67.63636406 0 120-54.54545437 120-120S795.63636406 13.09090875000004 728 13.09090875000004s-120 54.54545437-120 120 54.54545437 122.18181844 120 122.18181844m0 61.09090875c-100.36363594 0-181.09090875-80.72727281-181.09090875-181.09090875s80.72727281-181.09090875 181.09090875-181.09090875 181.09090875 80.72727281 181.09090875 181.09090875-80.72727281 181.09090875-181.09090875 181.09090875zM915.63636406-85.09090875000004l-72 72c-8.72727281 8.72727281-8.72727281 26.18181844 0 34.90909031l2.1818175 2.18181844c8.72727281 8.72727281 26.18181844 8.72727281 34.90909125 0l72-72c8.72727281-8.72727281 8.72727281-26.18181844 0-34.90909125l-2.18181844-2.1818175c-10.90909125-8.72727281-26.18181844-8.72727281-34.90909031 0z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="dunpai1" unicode="&#58894;" d="M723.2 787.2C648.8 787.2 492.8 864 492.8 864s-115.2-76.8-192-76.8c-76.77 0-153.6 38.4-153.6 38.4v-499.2C147.2 93.12 454.4-96 512-96s364.8 189.12 364.8 422.4V825.6S800 787.2 723.2 787.2z m19.59-308.16L498.41 234.65999999999997c-14.94-14.91-39.36-14.91-54.3 0L281.18 397.59c-14.94 14.94-14.94 39.36 0 54.3s39.36 14.94 54.3 0l135.75-135.75 217.23 217.23c14.94 14.94 39.36 14.94 54.3 0 14.97-14.97 14.97-39.39 0.03-54.33z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +    <glyph glyph-name="liebiao" unicode="&#58992;" d="M327.280952 671.827381H922.893254c18.977213 0 34.362622 15.385409 34.362623 34.362622s-15.385409 34.362622-34.362623 34.362622H327.280952c-18.977213 0-34.362622-15.385409-34.362623-34.362622s15.385409-34.362622 34.362623-34.362622zM922.893254 419.837206H327.280952c-18.977213 0-34.362622-15.385409-34.362623-34.362622s15.385409-34.362622 34.362623-34.362622H922.893254c18.977213 0 34.362622 15.385409 34.362623 34.362622s-15.385409 34.362622-34.362623 34.362622z m0-320.714395H327.280952c-18.977213 0-34.362622-15.385409-34.362623-34.362622s15.385409-34.362622 34.362623-34.362623H922.893254c18.977213 0 34.362622 15.385409 34.362623 34.362623s-15.385409 34.362622-34.362623 34.362622zM121.107265 763.460358c-31.629371 0-57.270355-25.640983-57.270354-57.270355 0-31.629371 25.640983-57.270355 57.270354-57.270355 31.629371 0 57.270355 25.640983 57.270355 57.270355 0 31.628348-25.640983 57.270355-57.270355 57.270355z m0-320.715419c-31.629371 0-57.270355-25.640983-57.270354-57.270355s25.640983-57.270355 57.270354-57.270354c31.629371 0 57.270355 25.640983 57.270355 57.270354s-25.640983 57.270355-57.270355 57.270355z m0-320.714396c-31.629371 0-57.270355-25.640983-57.270354-57.270354 0-31.629371 25.640983-57.270355 57.270354-57.270355 31.629371 0 57.270355 25.640983 57.270355 57.270355 0 31.629371-25.640983 57.270355-57.270355 57.270354z"  horiz-adv-x="1024" />
                                                  +
                                                  +    
                                                  +
                                                  +
                                                  +  </font>
                                                  +</defs></svg>
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/app.0a3d99e0.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/app.0a3d99e0.js
                                                  new file mode 100644
                                                  index 00000000..1dce65fd
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/app.0a3d99e0.js
                                                  @@ -0,0 +1,21 @@
                                                  +(function(e){function t(t){for(var i,r,s=t[0],l=t[1],c=t[2],u=0,d=[];u<s.length;u++)r=s[u],Object.prototype.hasOwnProperty.call(o,r)&&o[r]&&d.push(o[r][0]),o[r]=0;for(i in l)Object.prototype.hasOwnProperty.call(l,i)&&(e[i]=l[i]);h&&h(t);while(d.length)d.shift()();return a.push.apply(a,c||[]),n()}function n(){for(var e,t=0;t<a.length;t++){for(var n=a[t],i=!0,r=1;r<n.length;r++){var s=n[r];0!==o[s]&&(i=!1)}i&&(a.splice(t--,1),e=l(l.s=n[0]))}return e}var i={},r={app:0},o={app:0},a=[];function s(e){return l.p+"js/"+({}[e]||e)+"."+{"chunk-2d0ab156":"9f17ed75","chunk-2d0f078a":"cfa51ace","chunk-2d216d3a":"04d93109","chunk-2d224b23":"e5c50290","chunk-bf7921b8":"4686146e","chunk-055385ac":"1997663e","chunk-0ba0316e":"f1a28476","chunk-5a76c238":"dc28cd20","chunk-2d0b25b0":"416cbd4d","chunk-4def56c4":"720b1ccf","chunk-2d224ef1":"814c17e3","chunk-4e7e9573":"a31638f3","chunk-5ca06e36":"10aa8e65","chunk-b0787fd8":"74128c50","chunk-b9b8e2d8":"669e032d","chunk-6f1c20e8":"e41186ae","chunk-8cb92970":"f36e2de6"}[e]+".js"}function l(t){if(i[t])return i[t].exports;var n=i[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,l),n.l=!0,n.exports}l.e=function(e){var t=[],n={"chunk-055385ac":1,"chunk-0ba0316e":1,"chunk-5a76c238":1,"chunk-4def56c4":1,"chunk-4e7e9573":1,"chunk-b0787fd8":1,"chunk-b9b8e2d8":1,"chunk-6f1c20e8":1,"chunk-8cb92970":1};r[e]?t.push(r[e]):0!==r[e]&&n[e]&&t.push(r[e]=new Promise((function(t,n){for(var i="css/"+({}[e]||e)+"."+{"chunk-2d0ab156":"31d6cfe0","chunk-2d0f078a":"31d6cfe0","chunk-2d216d3a":"31d6cfe0","chunk-2d224b23":"31d6cfe0","chunk-bf7921b8":"31d6cfe0","chunk-055385ac":"e55cad48","chunk-0ba0316e":"d3570084","chunk-5a76c238":"283a9f57","chunk-2d0b25b0":"31d6cfe0","chunk-4def56c4":"ef0a5aa8","chunk-2d224ef1":"31d6cfe0","chunk-4e7e9573":"38619268","chunk-5ca06e36":"31d6cfe0","chunk-b0787fd8":"99d767d8","chunk-b9b8e2d8":"de12d1d4","chunk-6f1c20e8":"c5c7126f","chunk-8cb92970":"adde4cab"}[e]+".css",o=l.p+i,a=document.getElementsByTagName("link"),s=0;s<a.length;s++){var c=a[s],u=c.getAttribute("data-href")||c.getAttribute("href");if("stylesheet"===c.rel&&(u===i||u===o))return t()}var d=document.getElementsByTagName("style");for(s=0;s<d.length;s++){c=d[s],u=c.getAttribute("data-href");if(u===i||u===o)return t()}var h=document.createElement("link");h.rel="stylesheet",h.type="text/css",h.onload=t,h.onerror=function(t){var i=t&&t.target&&t.target.src||o,a=new Error("Loading CSS chunk "+e+" failed.\n("+i+")");a.code="CSS_CHUNK_LOAD_FAILED",a.request=i,delete r[e],h.parentNode.removeChild(h),n(a)},h.href=o;var f=document.getElementsByTagName("head")[0];f.appendChild(h)})).then((function(){r[e]=0})));var i=o[e];if(0!==i)if(i)t.push(i[2]);else{var a=new Promise((function(t,n){i=o[e]=[t,n]}));t.push(i[2]=a);var c,u=document.createElement("script");u.charset="utf-8",u.timeout=120,l.nc&&u.setAttribute("nonce",l.nc),u.src=s(e);var d=new Error;c=function(t){u.onerror=u.onload=null,clearTimeout(h);var n=o[e];if(0!==n){if(n){var i=t&&("load"===t.type?"missing":t.type),r=t&&t.target&&t.target.src;d.message="Loading chunk "+e+" failed.\n("+i+": "+r+")",d.name="ChunkLoadError",d.type=i,d.request=r,n[1](d)}o[e]=void 0}};var h=setTimeout((function(){c({type:"timeout",target:u})}),12e4);u.onerror=u.onload=c,document.head.appendChild(u)}return Promise.all(t)},l.m=e,l.c=i,l.d=function(e,t,n){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(l.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)l.d(n,i,function(t){return e[t]}.bind(null,i));return n},l.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="../apps/com.actionsoft.apps.coe.pal/main/",l.oe=function(e){throw console.error(e),e};var c=window["webpackJsonp"]=window["webpackJsonp"]||[],u=c.push.bind(c);c.push=t,c=c.slice();for(var d=0;d<c.length;d++)t(c[d]);var h=u;a.push([0,"chunk-vendors"]),n()})({0:function(e,t,n){n("9f45"),e.exports=n("56d7")},"015b":function(e,t,n){},"183b":function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _regeneratorRuntime(){"use strict";/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */_regeneratorRuntime=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},r=i.iterator||"@@iterator",o=i.asyncIterator||"@@asyncIterator",a=i.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(O){s=function(e,t,n){return e[t]=n}}function l(e,t,n,i){var r=t&&t.prototype instanceof d?t:d,o=Object.create(r.prototype),a=new k(i||[]);return o._invoke=function(e,t,n){var i="suspendedStart";return function(r,o){if("executing"===i)throw new Error("Generator is already running");if("completed"===i){if("throw"===r)throw o;return S()}for(n.method=r,n.arg=o;;){var a=n.delegate;if(a){var s=w(a,n);if(s){if(s===u)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===i)throw i="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i="executing";var l=c(e,t,n);if("normal"===l.type){if(i=n.done?"completed":"suspendedYield",l.arg===u)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i="completed",n.method="throw",n.arg=l.arg)}}}(e,n,a),o}function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(O){return{type:"throw",arg:O}}}e.wrap=l;var u={};function d(){}function h(){}function f(){}var p={};s(p,r,(function(){return this}));var m=Object.getPrototypeOf,g=m&&m(m(C([])));g&&g!==t&&n.call(g,r)&&(p=g);var v=f.prototype=d.prototype=Object.create(p);function b(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function y(e,t){function i(r,o,a,s){var l=c(e[r],e,o);if("throw"!==l.type){var u=l.arg,d=u.value;return d&&"object"==_typeof2(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){i("next",e,a,s)}),(function(e){i("throw",e,a,s)})):t.resolve(d).then((function(e){u.value=e,a(u)}),(function(e){return i("throw",e,a,s)}))}s(l.arg)}var r;this._invoke=function(e,n){function o(){return new t((function(t,r){i(e,n,t,r)}))}return r=r?r.then(o,o):o()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return u;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var i=c(n,e.iterator,t.arg);if("throw"===i.type)return t.method="throw",t.arg=i.arg,t.delegate=null,u;var r=i.arg;return r?r.done?(t[e.resultName]=r.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):r:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function _(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function C(e){if(e){var t=e[r];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(n.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=void 0,t.done=!0,t};return o.next=o}}return{next:S}}function S(){return{value:void 0,done:!0}}return h.prototype=f,s(v,"constructor",f),s(f,"constructor",h),h.displayName=s(f,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===h||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,s(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},b(y.prototype),s(y.prototype,o,(function(){return this})),e.AsyncIterator=y,e.async=function(t,n,i,r,o){void 0===o&&(o=Promise);var a=new y(l(t,n,i,r),o);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},b(v),s(v,a,"Generator"),s(v,r,(function(){return this})),s(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},e.values=C,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(_),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(n,i){return a.type="throw",a.arg=e,t.next=n,i&&(t.method="next",t.arg=void 0),!!i}for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r],a=o.completion;if("root"===o.tryLoc)return i("end");if(o.tryLoc<=this.prev){var s=n.call(o,"catchLoc"),l=n.call(o,"finallyLoc");if(s&&l){if(this.prev<o.catchLoc)return i(o.catchLoc,!0);if(this.prev<o.finallyLoc)return i(o.finallyLoc)}else if(s){if(this.prev<o.catchLoc)return i(o.catchLoc,!0)}else{if(!l)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return i(o.finallyLoc)}}}},abrupt:function(e,t){for(var i=this.tryEntries.length-1;i>=0;--i){var r=this.tryEntries[i];if(r.tryLoc<=this.prev&&n.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var o=r;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o.finallyLoc,u):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),_(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;_(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:C(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},e}function _typeof2(e){return _typeof2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof2(e)}(function(e,t){"object"===_typeof2(exports)&&"object"===_typeof2(module)?module.exports=t(__webpack_require__("430a")):(__WEBPACK_AMD_DEFINE_ARRAY__=[],__WEBPACK_AMD_DEFINE_FACTORY__=t,__WEBPACK_AMD_DEFINE_RESULT__="function"===typeof __WEBPACK_AMD_DEFINE_FACTORY__?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__,void 0===__WEBPACK_AMD_DEFINE_RESULT__||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))})("undefined"!==typeof self&&self,(function(__WEBPACK_EXTERNAL_MODULE__8bbf__){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===_typeof2(e)&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s="fb15")}({"00ee":function(e,t,n){var i=n("b622"),r=i("toStringTag"),o={};o[r]="z",e.exports="[object z]"===String(o)},"0109":function(e,t,n){},"0204":function(e,t,n){},"02f0":function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";e.defineMode("shell",(function(){var t={};function n(e,n){for(var i=0;i<n.length;i++)t[n[i]]=e}var i=["true","false"],r=["if","then","do","else","elif","while","until","for","in","esac","fi","fin","fil","done","exit","set","unset","export","function"],o=["ab","awk","bash","beep","cat","cc","cd","chown","chmod","chroot","clear","cp","curl","cut","diff","echo","find","gawk","gcc","get","git","grep","hg","kill","killall","ln","ls","make","mkdir","openssl","mv","nc","nl","node","npm","ping","ps","restart","rm","rmdir","sed","service","sh","shopt","shred","source","sort","sleep","ssh","start","stop","su","sudo","svn","tee","telnet","top","touch","vi","vim","wall","wc","wget","who","write","yes","zsh"];function a(e,n){if(e.eatSpace())return null;var i=e.sol(),r=e.next();if("\\"===r)return e.next(),null;if("'"===r||'"'===r||"`"===r)return n.tokens.unshift(s(r,"`"===r?"quote":"string")),d(e,n);if("#"===r)return i&&e.eat("!")?(e.skipToEnd(),"meta"):(e.skipToEnd(),"comment");if("$"===r)return n.tokens.unshift(c),d(e,n);if("+"===r||"="===r)return"operator";if("-"===r)return e.eat("-"),e.eatWhile(/\w/),"attribute";if("<"==r){var o=e.match(/^<-?\s+(.*)/);if(o)return n.tokens.unshift(u(o[1])),"string-2"}if(/\d/.test(r)&&(e.eatWhile(/\d/),e.eol()||!/\w/.test(e.peek())))return"number";e.eatWhile(/[\w-]/);var a=e.current();return"="===e.peek()&&/\w+/.test(a)?"def":t.hasOwnProperty(a)?t[a]:null}function s(e,t){var n="("==e?")":"{"==e?"}":e;return function(i,r){var o,a=!1;while(null!=(o=i.next())){if(o===n&&!a){r.tokens.shift();break}if("$"===o&&!a&&"'"!==e&&i.peek()!=n){a=!0,i.backUp(1),r.tokens.unshift(c);break}if(!a&&e!==n&&o===e)return r.tokens.unshift(s(e,t)),d(i,r);if(!a&&/['"]/.test(o)&&!/['"]/.test(e)){r.tokens.unshift(l(o,"string")),i.backUp(1);break}a=!a&&"\\"===o}return t}}function l(e,t){return function(n,i){return i.tokens[0]=s(e,t),n.next(),d(n,i)}}e.registerHelper("hintWords","shell",i.concat(r,o)),n("atom",i),n("keyword",r),n("builtin",o);var c=function(e,t){t.tokens.length>1&&e.eat("$");var n=e.next();return/['"({]/.test(n)?(t.tokens[0]=s(n,"("==n?"quote":"{"==n?"def":"string"),d(e,t)):(/\d/.test(n)||e.eatWhile(/\w/),t.tokens.shift(),"def")};function u(e){return function(t,n){return t.sol()&&t.string==e&&n.tokens.shift(),t.skipToEnd(),"string-2"}}function d(e,t){return(t.tokens[0]||a)(e,t)}return{startState:function(){return{tokens:[]}},token:function(e,t){return d(e,t)},closeBrackets:"()[]{}''\"\"``",lineComment:"#",fold:"brace"}})),e.defineMIME("text/x-sh","shell"),e.defineMIME("application/x-sh","shell")}))},"0366":function(e,t,n){var i=n("1c0b");e.exports=function(e,t,n){if(i(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}}},"03d6":function(e,t,n){var i=n("9c0e"),r=n("6ca1"),o=n("39ad")(!1),a=n("5a94")("IE_PROTO");e.exports=function(e,t){var n,s=r(e),l=0,c=[];for(n in s)n!=a&&i(s,n)&&c.push(n);while(t.length>l)i(s,n=t[l++])&&(~o(c,n)||c.push(n));return c}},"051b":function(e,t,n){var i=n("1a14"),r=n("10db");e.exports=n("0bad")?function(e,t,n){return i.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},"057f":function(e,t,n){var i=n("fc6a"),r=n("241c").f,o={}.toString,a="object"==("undefined"===typeof window?"undefined":_typeof2(window))&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return r(e)}catch(t){return a.slice()}};e.exports.f=function(e){return a&&"[object Window]"==o.call(e)?s(e):r(i(e))}},"05d3":function(e,t,n){"use strict";var i=n("4a35"),r=n.n(i);r.a},"05f5":function(e,t,n){var i=n("7a41"),r=n("ef08").document,o=i(r)&&i(r.createElement);e.exports=function(e){return o?r.createElement(e):{}}},"06c5":function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n("a630"),n("fb6a"),n("b0c0"),n("d3b7"),n("25f0"),n("3ca3");var i=n("6b75");function r(e,t){if(e){if("string"===typeof e)return Object(i["a"])(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Object(i["a"])(e,t):void 0}}},"06cf":function(e,t,n){var i=n("83ab"),r=n("d1e7"),o=n("5c6c"),a=n("fc6a"),s=n("c04e"),l=n("5135"),c=n("0cfb"),u=Object.getOwnPropertyDescriptor;t.f=i?u:function(e,t){if(e=a(e),t=s(t,!0),c)try{return u(e,t)}catch(n){}if(l(e,t))return o(!r.f.call(e,t),e[t])}},"072d":function(e,t,n){"use strict";var i=n("0bad"),r=n("9876"),o=n("fed5"),a=n("1917"),s=n("0983"),l=n("9fbb"),c=Object.assign;e.exports=!c||n("4b8b")((function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach((function(e){t[e]=e})),7!=c({},e)[n]||Object.keys(c({},t)).join("")!=i}))?function(e,t){var n=s(e),c=arguments.length,u=1,d=o.f,h=a.f;while(c>u){var f,p=l(arguments[u++]),m=d?r(p).concat(d(p)):r(p),g=m.length,v=0;while(g>v)f=m[v++],i&&!h.call(p,f)||(n[f]=p[f])}return n}:c},"07ac":function(e,t,n){var i=n("23e7"),r=n("6f53").values;i({target:"Object",stat:!0},{values:function(e){return r(e)}})},"07ea":function(e,t,n){"use strict";var i=n("3d56"),r=n.n(i);r.a},"095f":function(e,t,n){},"0983":function(e,t,n){var i=n("c901");e.exports=function(e){return Object(i(e))}},"0a06":function(e,t,n){"use strict";var i=n("c532"),r=n("30b5"),o=n("f6b4"),a=n("5270"),s=n("4a7b");function l(e){this.defaults=e,this.interceptors={request:new o,response:new o}}l.prototype.request=function(e){"string"===typeof e?(e=arguments[1]||{},e.url=arguments[0]):e=e||{},e=s(this.defaults,e),e.method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var t=[a,void 0],n=Promise.resolve(e);this.interceptors.request.forEach((function(e){t.unshift(e.fulfilled,e.rejected)})),this.interceptors.response.forEach((function(e){t.push(e.fulfilled,e.rejected)}));while(t.length)n=n.then(t.shift(),t.shift());return n},l.prototype.getUri=function(e){return e=s(this.defaults,e),r(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},i.forEach(["delete","get","head","options"],(function(e){l.prototype[e]=function(t,n){return this.request(s(n||{},{method:e,url:t,data:(n||{}).data}))}})),i.forEach(["post","put","patch"],(function(e){l.prototype[e]=function(t,n,i){return this.request(s(i||{},{method:e,url:t,data:n}))}})),e.exports=l},"0ade":function(e,t,n){"use strict";var i=n("1c97"),r=n.n(i);r.a},"0ae2":function(e,t,n){var i=n("9876"),r=n("fed5"),o=n("1917");e.exports=function(e){var t=i(e),n=r.f;if(n){var a,s=n(e),l=o.f,c=0;while(s.length>c)l.call(e,a=s[c++])&&t.push(a)}return t}},"0b25":function(e,t,n){var i=n("a691"),r=n("50c4");e.exports=function(e){if(void 0===e)return 0;var t=i(e),n=r(t);if(t!==n)throw RangeError("Wrong length or index");return n}},"0b40":function(e,t,n){},"0b51":function(e,t,n){},"0b99":function(e,t,n){"use strict";var i=n("19fa")(!0);n("393a")(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=i(t,n),this._i+=e.length,{value:e,done:!1})}))},"0bad":function(e,t,n){e.exports=!n("4b8b")((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},"0c47":function(e,t,n){var i=n("da84"),r=n("d44e");r(i.JSON,"JSON",!0)},"0cfb":function(e,t,n){var i=n("83ab"),r=n("d039"),o=n("cc12");e.exports=!i&&!r((function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},"0d3b":function(e,t,n){var i=n("d039"),r=n("b622"),o=n("c430"),a=r("iterator");e.exports=!i((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,n="";return e.pathname="c%20d",t.forEach((function(e,i){t["delete"]("b"),n+=i+e})),o&&!e.toJSON||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[a]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},"0d5e":function d5e(module,__webpack_exports__,__webpack_require__){"use strict";var core_js_modules_es_array_index_of__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("c975"),core_js_modules_es_array_index_of__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(core_js_modules_es_array_index_of__WEBPACK_IMPORTED_MODULE_0__),core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("a15b"),core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_1__),core_js_modules_es_object_assign__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("cca6"),core_js_modules_es_object_assign__WEBPACK_IMPORTED_MODULE_2___default=__webpack_require__.n(core_js_modules_es_object_assign__WEBPACK_IMPORTED_MODULE_2__),core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("d3b7"),core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3___default=__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_3__),core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("e6cf"),core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_4___default=__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_4__),axios__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("bc3a"),axios__WEBPACK_IMPORTED_MODULE_5___default=__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_5__),qs__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("4328"),qs__WEBPACK_IMPORTED_MODULE_6___default=__webpack_require__.n(qs__WEBPACK_IMPORTED_MODULE_6__),_packages_message_index_js__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__("d2d7");function _toChangeData(e){var t=[];for(var n in e)t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t.join("&")}function checkCMD(params){var cmd=params.data.cmd;if("CLIENT_USER_LOGIN"!==cmd&&"CONSOLE_ADMIN_LOGIN"!==cmd&&"CLIENT_MOBILE_USER_LOGIN"!==cmd&&"COE_USER_LOGIN"!==cmd&&"com.actionsoft.apps.coe.pal_user_login"!==cmd&&"undefined"===typeof params.data.sid){var projectSetting="undefined"==typeof settingParam?window.settingParam:eval("settingParam");params.data.sid=projectSetting.sessionId}}axios__WEBPACK_IMPORTED_MODULE_5___default.a.defaults.baseURL="undefined"==typeof axiosBaseUrl?"./":eval("axiosBaseUrl"),axios__WEBPACK_IMPORTED_MODULE_5___default.a.defaults.headers={"Content-Type":"application/x-www-form-urlencoded; charset=utf-8"},axios__WEBPACK_IMPORTED_MODULE_5___default.a.interceptors.request.use((function(e){return"get"===e.method?e.paramsSerializer=function(e){return qs__WEBPACK_IMPORTED_MODULE_6___default.a.stringify(e,{arrayFormat:"repeat"})}:"post"===e.method&&(e.params={}),e}),(function(e){if(null==e.response)throw e;var t=e.response.data;return t.msg.indexOf("用户会话已失效")>-1?Object(_packages_message_index_js__WEBPACK_IMPORTED_MODULE_7__["a"])({type:"warning",message:t.desc?t.desc:t.msg,duration:2e3,onClose:function(){setTimeout((function(){void 0==top.homePageId?top.window.location.href="../":top.window.location.href="../console"}),2e3)}}):t.msg.indexOf("模型受管,操作被拒绝")>-1?Object(_packages_message_index_js__WEBPACK_IMPORTED_MODULE_7__["a"])({type:"error",message:t.desc?t.desc:t.msg,onClose:function(){window.location.reload()}}):Object(_packages_message_index_js__WEBPACK_IMPORTED_MODULE_7__["a"])({type:"error",message:t.desc?t.desc:t.msg}),Promise.reject(e)})),axios__WEBPACK_IMPORTED_MODULE_5___default.a.interceptors.response.use((function(e){if(!1!==e.config.alert&&("error"==e.data.result||"warning"==e.data.result)){var t={type:e.data.result,showClose:"error"==e.data.result,duration:"error"==e.data.result?0:2e3,message:e.data.desc?e.data.desc:e.data.msg};e.data.msg.indexOf("模型受管,操作被拒绝")>-1&&(t["onClose"]=function(){window.location.reload()}),Object(_packages_message_index_js__WEBPACK_IMPORTED_MODULE_7__["a"])(t)}return e.data}),(function(e){if(null==e.response)throw e;var t=e.response.data;return t.msg.indexOf("用户会话已失效")>-1?Object(_packages_message_index_js__WEBPACK_IMPORTED_MODULE_7__["a"])({type:"warning",message:t.desc?t.desc:t.msg,duration:1e3,onClose:function(){setTimeout((function(){void 0==top.homePageId?top.window.location.href="../":top.window.location.href="../console"}),2e3)}}):t.msg.indexOf("模型受管,操作被拒绝")>-1?Object(_packages_message_index_js__WEBPACK_IMPORTED_MODULE_7__["a"])({type:"error",message:t.desc?t.desc:t.msg,onClose:function(){window.location.reload()}}):Object(_packages_message_index_js__WEBPACK_IMPORTED_MODULE_7__["a"])({type:"error",message:t.desc?t.desc:t.msg}),Promise.reject(e)})),__webpack_exports__["a"]={get:function(e){var t={method:"get",url:e.url,params:e.data};return checkCMD(e),axios__WEBPACK_IMPORTED_MODULE_5___default()(t)},post:function(e){var t={method:"post",url:e.url,data:e.data};return checkCMD(e),t.data=_toChangeData(t.data),axios__WEBPACK_IMPORTED_MODULE_5___default()(t)},aslp:function(e){var t={cmd:"API_CALL_ASLP",sourceAppId:"",aslp:""};"undefined"!==typeof e.data.sid&&(t.authentication=e.data.sid),Object.assign(t,e.data);var n={method:"post",url:e.url,data:t};return n.data=_toChangeData(n.data),axios__WEBPACK_IMPORTED_MODULE_5___default()(n)}}},"0df6":function(e,t,n){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},"0e15":function(e,t,n){var i=n("597f");e.exports=function(e,t,n){return void 0===n?i(e,t,!1):i(e,n,!1!==t)}},"0fae":function(e,t,n){},1054:function(e,t,n){},1098:function(e,t,n){"use strict";t.__esModule=!0;var i=n("17ed"),r=l(i),o=n("f893"),a=l(o),s="function"===typeof a.default&&"symbol"===_typeof2(r.default)?function(e){return _typeof2(e)}:function(e){return e&&"function"===typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?"symbol":_typeof2(e)};function l(e){return e&&e.__esModule?e:{default:e}}t.default="function"===typeof a.default&&"symbol"===s(r.default)?function(e){return"undefined"===typeof e?"undefined":s(e)}:function(e){return e&&"function"===typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?"symbol":"undefined"===typeof e?"undefined":s(e)}},"10db":function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},1138:function(e,t,n){},1148:function(e,t,n){"use strict";var i=n("a691"),r=n("1d80");e.exports="".repeat||function(e){var t=String(r(this)),n="",o=i(e);if(o<0||o==1/0)throw RangeError("Wrong number of repetitions");for(;o>0;(o>>>=1)&&(t+=t))1&o&&(n+=t);return n}},1276:function(e,t,n){"use strict";var i=n("d784"),r=n("44e7"),o=n("825a"),a=n("1d80"),s=n("4840"),l=n("8aa5"),c=n("50c4"),u=n("14c3"),d=n("9263"),h=n("d039"),f=[].push,p=Math.min,m=4294967295,g=!h((function(){return!RegExp(m,"y")}));i("split",2,(function(e,t,n){var i;return i="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var i=String(a(this)),o=void 0===n?m:n>>>0;if(0===o)return[];if(void 0===e)return[i];if(!r(e))return t.call(i,e,o);var s,l,c,u=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=new RegExp(e.source,h+"g");while(s=d.call(g,i)){if(l=g.lastIndex,l>p&&(u.push(i.slice(p,s.index)),s.length>1&&s.index<i.length&&f.apply(u,s.slice(1)),c=s[0].length,p=l,u.length>=o))break;g.lastIndex===s.index&&g.lastIndex++}return p===i.length?!c&&g.test("")||u.push(""):u.push(i.slice(p)),u.length>o?u.slice(0,o):u}:"0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var r=a(this),o=void 0==t?void 0:t[e];return void 0!==o?o.call(t,r,n):i.call(String(r),t,n)},function(e,r){var a=n(i,e,this,r,i!==t);if(a.done)return a.value;var d=o(e),h=String(this),f=s(d,RegExp),v=d.unicode,b=(d.ignoreCase?"i":"")+(d.multiline?"m":"")+(d.unicode?"u":"")+(g?"y":"g"),y=new f(g?d:"^(?:"+d.source+")",b),w=void 0===r?m:r>>>0;if(0===w)return[];if(0===h.length)return null===u(y,h)?[h]:[];var x=0,_=0,k=[];while(_<h.length){y.lastIndex=g?_:0;var C,S=u(y,g?h:h.slice(_));if(null===S||(C=p(c(y.lastIndex+(g?0:_)),h.length))===x)_=l(h,_,v);else{if(k.push(h.slice(x,_)),k.length===w)return k;for(var O=1;O<=S.length-1;O++)if(k.push(S[O]),k.length===w)return k;_=x=C}}return k.push(h.slice(x)),k}]}),!g)},"129f":function(e,t){e.exports=Object.is||function(e,t){return e===t?0!==e||1/e===1/t:e!=e&&t!=t}},"12f2":function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){return{methods:{focus:function(){this.$refs[e].focus()}}}}},1350:function(e,t,n){"use strict";var i=n("4c25"),r=n.n(i);r.a},1377:function(e,t,n){},"13d5":function(e,t,n){"use strict";var i=n("23e7"),r=n("d58f").left,o=n("a640"),a=n("ae40"),s=o("reduce"),l=a("reduce",{1:0});i({target:"Array",proto:!0,forced:!s||!l},{reduce:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:void 0)}})},"145e":function(e,t,n){"use strict";var i=n("7b0b"),r=n("23cb"),o=n("50c4"),a=Math.min;e.exports=[].copyWithin||function(e,t){var n=i(this),s=o(n.length),l=r(e,s),c=r(t,s),u=arguments.length>2?arguments[2]:void 0,d=a((void 0===u?s:r(u,s))-c,s-l),h=1;c<l&&l<c+d&&(h=-1,c+=d-1,l+=d-1);while(d-- >0)c in n?n[l]=n[c]:delete n[l],l+=h,c+=h;return n}},"14b4":function(e,t,n){},"14c3":function(e,t,n){var i=n("c6b6"),r=n("9263");e.exports=function(e,t){var n=e.exec;if("function"===typeof n){var o=n.call(e,t);if("object"!==_typeof2(o))throw TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==i(e))throw TypeError("RegExp#exec called on incompatible receiver");return r.call(e,t)}},"14e9":function(e,t,n){n("a4d3"),n("e01a"),n("944a"),n("b0c0"),n("0c47"),n("23dc"),n("a9e3"),n("d3b7");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=127)}({127:function(e,t,n){"use strict";n.r(t);var i=n(16),r=n(39),o=n.n(r),a=n(3),s=n(2),l={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}};function c(e){var t=e.move,n=e.size,i=e.bar,r={},o="translate"+i.axis+"("+t+"%)";return r[i.size]=n,r.transform=o,r.msTransform=o,r.webkitTransform=o,r}var u={name:"Bar",props:{vertical:Boolean,size:String,move:Number},computed:{bar:function(){return l[this.vertical?"vertical":"horizontal"]},wrap:function(){return this.$parent.wrap}},render:function(e){var t=this.size,n=this.move,i=this.bar;return e("div",{class:["el-scrollbar__bar","is-"+i.key],on:{mousedown:this.clickTrackHandler}},[e("div",{ref:"thumb",class:"el-scrollbar__thumb",on:{mousedown:this.clickThumbHandler},style:c({size:t,move:n,bar:i})})])},methods:{clickThumbHandler:function(e){e.ctrlKey||2===e.button||(this.startDrag(e),this[this.bar.axis]=e.currentTarget[this.bar.offset]-(e[this.bar.client]-e.currentTarget.getBoundingClientRect()[this.bar.direction]))},clickTrackHandler:function(e){var t=Math.abs(e.target.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),n=this.$refs.thumb[this.bar.offset]/2,i=100*(t-n)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=i*this.wrap[this.bar.scrollSize]/100},startDrag:function(e){e.stopImmediatePropagation(),this.cursorDown=!0,Object(s["on"])(document,"mousemove",this.mouseMoveDocumentHandler),Object(s["on"])(document,"mouseup",this.mouseUpDocumentHandler),document.onselectstart=function(){return!1}},mouseMoveDocumentHandler:function(e){if(!1!==this.cursorDown){var t=this[this.bar.axis];if(t){var n=-1*(this.$el.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),i=this.$refs.thumb[this.bar.offset]-t,r=100*(n-i)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=r*this.wrap[this.bar.scrollSize]/100}}},mouseUpDocumentHandler:function(e){this.cursorDown=!1,this[this.bar.axis]=0,Object(s["off"])(document,"mousemove",this.mouseMoveDocumentHandler),document.onselectstart=null}},destroyed:function(){Object(s["off"])(document,"mouseup",this.mouseUpDocumentHandler)}},d={name:"ElScrollbar",components:{Bar:u},props:{native:Boolean,wrapStyle:{},wrapClass:{},viewClass:{},viewStyle:{},noresize:Boolean,tag:{type:String,default:"div"}},data:function(){return{sizeWidth:"0",sizeHeight:"0",moveX:0,moveY:0}},computed:{wrap:function(){return this.$refs.wrap}},render:function(e){var t=o()(),n=this.wrapStyle;if(t){var i="-"+t+"px",r="margin-bottom: "+i+"; margin-right: "+i+";";Array.isArray(this.wrapStyle)?(n=Object(a["toObject"])(this.wrapStyle),n.marginRight=n.marginBottom=i):"string"===typeof this.wrapStyle?n+=r:n=r}var s=e(this.tag,{class:["el-scrollbar__view",this.viewClass],style:this.viewStyle,ref:"resize"},this.$slots.default),l=e("div",{ref:"wrap",style:n,on:{scroll:this.handleScroll},class:[this.wrapClass,"el-scrollbar__wrap",t?"":"el-scrollbar__wrap--hidden-default"]},[[s]]),c=void 0;return c=this.native?[e("div",{ref:"wrap",class:[this.wrapClass,"el-scrollbar__wrap"],style:n},[[s]])]:[l,e(u,{attrs:{move:this.moveX,size:this.sizeWidth}}),e(u,{attrs:{vertical:!0,move:this.moveY,size:this.sizeHeight}})],e("div",{class:"el-scrollbar"},c)},methods:{handleScroll:function(){var e=this.wrap;this.moveY=100*e.scrollTop/e.clientHeight,this.moveX=100*e.scrollLeft/e.clientWidth},update:function(){var e=void 0,t=void 0,n=this.wrap;n&&(e=100*n.clientHeight/n.scrollHeight,t=100*n.clientWidth/n.scrollWidth,this.sizeHeight=e<100?e+"%":"",this.sizeWidth=t<100?t+"%":"")}},mounted:function(){this.native||(this.$nextTick(this.update),!this.noresize&&Object(i["addResizeListener"])(this.$refs.resize,this.update))},beforeDestroy:function(){this.native||!this.noresize&&Object(i["removeResizeListener"])(this.$refs.resize,this.update)},install:function(e){e.component(d.name,d)}};t["default"]=d},16:function(e,t){e.exports=n("4010")},2:function(e,t){e.exports=n("5924")},3:function(e,t){e.exports=n("8122")},39:function(e,t){e.exports=n("e62d")}})},"155a":function(e,t,n){},"159b":function(e,t,n){var i=n("da84"),r=n("fdbc"),o=n("17c2"),a=n("9112");for(var s in r){var l=i[s],c=l&&l.prototype;if(c&&c.forEach!==o)try{a(c,"forEach",o)}catch(u){c.forEach=o}}},1609:function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},"170b":function(e,t,n){"use strict";var i=n("ebb5"),r=n("50c4"),o=n("23cb"),a=n("4840"),s=i.aTypedArray,l=i.exportTypedArrayMethod;l("subarray",(function(e,t){var n=s(this),i=n.length,l=o(e,i);return new(a(n,n.constructor))(n.buffer,n.byteOffset+l*n.BYTES_PER_ELEMENT,r((void 0===t?i:o(t,i))-l))}))},"17c2":function(e,t,n){"use strict";var i=n("b727").forEach,r=n("a640"),o=n("ae40"),a=r("forEach"),s=o("forEach");e.exports=a&&s?[].forEach:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}},"17ed":function(e,t,n){e.exports={default:n("511f"),__esModule:!0}},"182d":function(e,t,n){var i=n("f8cd");e.exports=function(e,t){var n=i(e);if(n%t)throw RangeError("Wrong offset");return n}},1836:function(e,t,n){var i=n("6ca1"),r=n("6438").f,o={}.toString,a="object"==("undefined"===typeof window?"undefined":_typeof2(window))&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return r(e)}catch(t){return a.slice()}};e.exports.f=function(e){return a&&"[object Window]"==o.call(e)?s(e):r(i(e))}},1850:function(e,t,n){(function(e){var i,r,o;n("ac1f"),n("466d");var a=n("7037");(function(s){"object"==a(t)&&"object"==a(e)?s(n("f3a7")):(r=[n("f3a7")],i=s,o="function"===typeof i?i.apply(t,r):i,void 0===o||(e.exports=o))})((function(e){var t=/MSIE \d/.test(navigator.userAgent)&&(null==document.documentMode||document.documentMode<8),n=e.Pos,i={"(":")>",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function r(e){return e&&e.bracketRegex||/[(){}[\]]/}function o(e,t,o){var a=e.getLineHandle(t.line),l=t.ch-1,c=o&&o.afterCursor;null==c&&(c=/(^| )cm-fat-cursor($| )/.test(e.getWrapperElement().className));var u=r(o),d=!c&&l>=0&&u.test(a.text.charAt(l))&&i[a.text.charAt(l)]||u.test(a.text.charAt(l+1))&&i[a.text.charAt(++l)];if(!d)return null;var h=">"==d.charAt(1)?1:-1;if(o&&o.strict&&h>0!=(l==t.ch))return null;var f=e.getTokenTypeAt(n(t.line,l+1)),p=s(e,n(t.line,l+(h>0?1:0)),h,f||null,o);return null==p?null:{from:n(t.line,l),to:p&&p.pos,match:p&&p.ch==d.charAt(0),forward:h>0}}function s(e,t,o,a,s){for(var l=s&&s.maxScanLineLength||1e4,c=s&&s.maxScanLines||1e3,u=[],d=r(s),h=o>0?Math.min(t.line+c,e.lastLine()+1):Math.max(e.firstLine()-1,t.line-c),f=t.line;f!=h;f+=o){var p=e.getLine(f);if(p){var m=o>0?0:p.length-1,g=o>0?p.length:-1;if(!(p.length>l))for(f==t.line&&(m=t.ch-(o<0?1:0));m!=g;m+=o){var v=p.charAt(m);if(d.test(v)&&(void 0===a||e.getTokenTypeAt(n(f,m+1))==a)){var b=i[v];if(b&&">"==b.charAt(1)==o>0)u.push(v);else{if(!u.length)return{pos:n(f,m),ch:v};u.pop()}}}}}return f-o!=(o>0?e.lastLine():e.firstLine())&&null}function l(e,i,r){for(var a=e.state.matchBrackets.maxHighlightLineLength||1e3,s=[],l=e.listSelections(),c=0;c<l.length;c++){var u=l[c].empty()&&o(e,l[c].head,r);if(u&&e.getLine(u.from.line).length<=a){var d=u.match?"CodeMirror-matchingbracket":"CodeMirror-nonmatchingbracket";s.push(e.markText(u.from,n(u.from.line,u.from.ch+1),{className:d})),u.to&&e.getLine(u.to.line).length<=a&&s.push(e.markText(u.to,n(u.to.line,u.to.ch+1),{className:d}))}}if(s.length){t&&e.state.focused&&e.focus();var h=function(){e.operation((function(){for(var e=0;e<s.length;e++)s[e].clear()}))};if(!i)return h;setTimeout(h,800)}}function c(e){e.operation((function(){e.state.matchBrackets.currentlyHighlighted&&(e.state.matchBrackets.currentlyHighlighted(),e.state.matchBrackets.currentlyHighlighted=null),e.state.matchBrackets.currentlyHighlighted=l(e,!1,e.state.matchBrackets)}))}function u(e){e.state.matchBrackets&&e.state.matchBrackets.currentlyHighlighted&&(e.state.matchBrackets.currentlyHighlighted(),e.state.matchBrackets.currentlyHighlighted=null)}e.defineOption("matchBrackets",!1,(function(t,n,i){i&&i!=e.Init&&(t.off("cursorActivity",c),t.off("focus",c),t.off("blur",u),u(t)),n&&(t.state.matchBrackets="object"==a(n)?n:{},t.on("cursorActivity",c),t.on("focus",c),t.on("blur",u))})),e.defineExtension("matchBrackets",(function(){l(this,!0)})),e.defineExtension("findMatchingBracket",(function(e,t,n){return(n||"boolean"==typeof t)&&(n?(n.strict=t,t=n):t=t?{strict:!0}:null),o(this,e,t)})),e.defineExtension("scanForBracket",(function(e,t,n,i){return s(this,e,t,n,i)}))}))}).call(this,n("62e4")(e))},"18a5":function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),o=n("af03");i({target:"String",proto:!0,forced:o("anchor")},{anchor:function(e){return r(this,"a","name",e)}})},1917:function(e,t){t.f={}.propertyIsEnumerable},"19aa":function(e,t){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},"19fa":function(e,t,n){var i=n("fc5e"),r=n("c901");e.exports=function(e){return function(t,n){var o,a,s=String(r(t)),l=i(n),c=s.length;return l<0||l>=c?e?"":void 0:(o=s.charCodeAt(l),o<55296||o>56319||l+1===c||(a=s.charCodeAt(l+1))<56320||a>57343?e?s.charAt(l):o:e?s.slice(l,l+2):a-56320+(o-55296<<10)+65536)}}},"1a14":function(e,t,n){var i=n("77e9"),r=n("faf5"),o=n("3397"),a=Object.defineProperty;t.f=n("0bad")?Object.defineProperty:function(e,t,n){if(i(e),t=o(t,!0),i(n),r)try{return a(e,t,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},"1b63":function(e,t,n){(function(e){e(n("56b3"),n("7b00"))})((function(e){"use strict";e.defineMode("sass",(function(t){var n=e.mimeModes["text/css"],i=n.propertyKeywords||{},r=n.colorKeywords||{},o=n.valueKeywords||{},a=n.fontProperties||{};function s(e){return new RegExp("^"+e.join("|"))}var l,c=["true","false","null","auto"],u=new RegExp("^"+c.join("|")),d=["\\(","\\)","=",">","<","==",">=","<=","\\+","-","\\!=","/","\\*","%","and","or","not",";","\\{","\\}",":"],h=s(d),f=/^::?[a-zA-Z_][\w\-]*/;function p(e){return!e.peek()||e.match(/\s+$/,!1)}function m(e,t){var n=e.peek();return")"===n?(e.next(),t.tokenizer=x,"operator"):"("===n?(e.next(),e.eatSpace(),"operator"):"'"===n||'"'===n?(t.tokenizer=v(e.next()),"string"):(t.tokenizer=v(")",!1),"string")}function g(e,t){return function(n,i){return n.sol()&&n.indentation()<=e?(i.tokenizer=x,x(n,i)):(t&&n.skipTo("*/")?(n.next(),n.next(),i.tokenizer=x):n.skipToEnd(),"comment")}}function v(e,t){function n(i,r){var o=i.next(),a=i.peek(),s=i.string.charAt(i.pos-2),l="\\"!==o&&a===e||o===e&&"\\"!==s;return l?(o!==e&&t&&i.next(),p(i)&&(r.cursorHalf=0),r.tokenizer=x,"string"):"#"===o&&"{"===a?(r.tokenizer=b(n),i.next(),"operator"):"string"}return null==t&&(t=!0),n}function b(e){return function(t,n){return"}"===t.peek()?(t.next(),n.tokenizer=e,"operator"):x(t,n)}}function y(e){if(0==e.indentCount){e.indentCount++;var n=e.scopes[0].offset,i=n+t.indentUnit;e.scopes.unshift({offset:i})}}function w(e){1!=e.scopes.length&&e.scopes.shift()}function x(e,t){var n=e.peek();if(e.match("/*"))return t.tokenizer=g(e.indentation(),!0),t.tokenizer(e,t);if(e.match("//"))return t.tokenizer=g(e.indentation(),!1),t.tokenizer(e,t);if(e.match("#{"))return t.tokenizer=b(x),"operator";if('"'===n||"'"===n)return e.next(),t.tokenizer=v(n),"string";if(t.cursorHalf){if("#"===n&&(e.next(),e.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)))return p(e)&&(t.cursorHalf=0),"number";if(e.match(/^-?[0-9\.]+/))return p(e)&&(t.cursorHalf=0),"number";if(e.match(/^(px|em|in)\b/))return p(e)&&(t.cursorHalf=0),"unit";if(e.match(u))return p(e)&&(t.cursorHalf=0),"keyword";if(e.match(/^url/)&&"("===e.peek())return t.tokenizer=m,p(e)&&(t.cursorHalf=0),"atom";if("$"===n)return e.next(),e.eatWhile(/[\w-]/),p(e)&&(t.cursorHalf=0),"variable-2";if("!"===n)return e.next(),t.cursorHalf=0,e.match(/^[\w]+/)?"keyword":"operator";if(e.match(h))return p(e)&&(t.cursorHalf=0),"operator";if(e.eatWhile(/[\w-]/))return p(e)&&(t.cursorHalf=0),l=e.current().toLowerCase(),o.hasOwnProperty(l)?"atom":r.hasOwnProperty(l)?"keyword":i.hasOwnProperty(l)?(t.prevProp=e.current().toLowerCase(),"property"):"tag";if(p(e))return t.cursorHalf=0,null}else{if("-"===n&&e.match(/^-\w+-/))return"meta";if("."===n){if(e.next(),e.match(/^[\w-]+/))return y(t),"qualifier";if("#"===e.peek())return y(t),"tag"}if("#"===n){if(e.next(),e.match(/^[\w-]+/))return y(t),"builtin";if("#"===e.peek())return y(t),"tag"}if("$"===n)return e.next(),e.eatWhile(/[\w-]/),"variable-2";if(e.match(/^-?[0-9\.]+/))return"number";if(e.match(/^(px|em|in)\b/))return"unit";if(e.match(u))return"keyword";if(e.match(/^url/)&&"("===e.peek())return t.tokenizer=m,"atom";if("="===n&&e.match(/^=[\w-]+/))return y(t),"meta";if("+"===n&&e.match(/^\+[\w-]+/))return"variable-3";if("@"===n&&e.match(/@extend/)&&(e.match(/\s*[\w]/)||w(t)),e.match(/^@(else if|if|media|else|for|each|while|mixin|function)/))return y(t),"def";if("@"===n)return e.next(),e.eatWhile(/[\w-]/),"def";if(e.eatWhile(/[\w-]/)){if(e.match(/ *: *[\w-\+\$#!\("']/,!1)){l=e.current().toLowerCase();var s=t.prevProp+"-"+l;return i.hasOwnProperty(s)?"property":i.hasOwnProperty(l)?(t.prevProp=l,"property"):a.hasOwnProperty(l)?"property":"tag"}return e.match(/ *:/,!1)?(y(t),t.cursorHalf=1,t.prevProp=e.current().toLowerCase(),"property"):(e.match(/ *,/,!1)||y(t),"tag")}if(":"===n)return e.match(f)?"variable-3":(e.next(),t.cursorHalf=1,"operator")}return e.match(h)?"operator":(e.next(),null)}function _(e,n){e.sol()&&(n.indentCount=0);var i=n.tokenizer(e,n),r=e.current();if("@return"!==r&&"}"!==r||w(n),null!==i){for(var o=e.pos-r.length,a=o+t.indentUnit*n.indentCount,s=[],l=0;l<n.scopes.length;l++){var c=n.scopes[l];c.offset<=a&&s.push(c)}n.scopes=s}return i}return{startState:function(){return{tokenizer:x,scopes:[{offset:0,type:"sass"}],indentCount:0,cursorHalf:0,definedVars:[],definedMixins:[]}},token:function(e,t){var n=_(e,t);return t.lastToken={style:n,content:e.current()},n},indent:function(e){return e.scopes[0].offset}}}),"css"),e.defineMIME("text/x-sass","sass")}))},"1be4":function(e,t,n){var i=n("d066");e.exports=i("document","documentElement")},"1c0b":function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},"1c7e":function(e,t,n){var i=n("b622"),r=i("iterator"),o=!1;try{var a=0,s={next:function(){return{done:!!a++}},return:function(){o=!0}};s[r]=function(){return this},Array.from(s,(function(){throw 2}))}catch(l){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},e(i)}catch(l){}return n}},"1c97":function(e,t,n){},"1cdc":function(e,t,n){var i=n("342f");e.exports=/(iphone|ipod|ipad).*applewebkit/i.test(i)},"1cfa":function(e,t,n){},"1d2b":function(e,t,n){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),i=0;i<n.length;i++)n[i]=arguments[i];return e.apply(t,n)}}},"1d80":function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},"1dde":function(e,t,n){var i=n("d039"),r=n("b622"),o=n("2d00"),a=r("species");e.exports=function(e){return o>=51||!i((function(){var t=[],n=t.constructor={};return n[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},"202b":function(e,t,n){},"219c":function(e,t,n){"use strict";var i=n("ebb5"),r=i.aTypedArray,o=i.exportTypedArrayMethod,a=[].sort;o("sort",(function(e){return a.call(r(this),e)}))},"21cc":function(e,t,n){"use strict";var i=n("b233"),r=n.n(i);r.a},2266:function(e,t,n){var i=n("825a"),r=n("e95a"),o=n("50c4"),a=n("0366"),s=n("35a1"),l=n("9bdd"),c=function(e,t){this.stopped=e,this.result=t},u=e.exports=function(e,t,n,u,d){var h,f,p,m,g,v,b,y=a(t,n,u?2:1);if(d)h=e;else{if(f=s(e),"function"!=typeof f)throw TypeError("Target is not iterable");if(r(f)){for(p=0,m=o(e.length);m>p;p++)if(g=u?y(i(b=e[p])[0],b[1]):y(e[p]),g&&g instanceof c)return g;return new c(!1)}h=f.call(e)}v=h.next;while(!(b=v.call(h)).done)if(g=l(h,y,b.value,u),"object"==_typeof2(g)&&g&&g instanceof c)return g;return new c(!1)};u.stop=function(e){return new c(!0,e)}},"22c0":function(e,t,n){"use strict";var i=n("8b00"),r=n.n(i);r.a},2366:function(e,t){for(var n=[],i=0;i<256;++i)n[i]=(i+256).toString(16).substr(1);function r(e,t){var i=t||0,r=n;return[r[e[i++]],r[e[i++]],r[e[i++]],r[e[i++]],"-",r[e[i++]],r[e[i++]],"-",r[e[i++]],r[e[i++]],"-",r[e[i++]],r[e[i++]],"-",r[e[i++]],r[e[i++]],r[e[i++]],r[e[i++]],r[e[i++]],r[e[i++]]].join("")}e.exports=r},"23cb":function(e,t,n){var i=n("a691"),r=Math.max,o=Math.min;e.exports=function(e,t){var n=i(e);return n<0?r(n+t,0):o(n,t)}},"23dc":function(e,t,n){var i=n("d44e");i(Math,"Math",!0)},"23e7":function(e,t,n){var i=n("da84"),r=n("06cf").f,o=n("9112"),a=n("6eeb"),s=n("ce4e"),l=n("e893"),c=n("94ca");e.exports=function(e,t){var n,u,d,h,f,p,m=e.target,g=e.global,v=e.stat;if(u=g?i:v?i[m]||s(m,{}):(i[m]||{}).prototype,u)for(d in t){if(f=t[d],e.noTargetGet?(p=r(u,d),h=p&&p.value):h=u[d],n=c(g?d:m+(v?".":"#")+d,e.forced),!n&&void 0!==h){if(_typeof2(f)===_typeof2(h))continue;l(f,h)}(e.sham||h&&h.sham)&&o(f,"sham",!0),a(u,d,f,e)}}},"241c":function(e,t,n){var i=n("ca84"),r=n("7839"),o=r.concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return i(e,o)}},2444:function(e,t,n){"use strict";(function(t){var i=n("c532"),r=n("c8af"),o={"Content-Type":"application/x-www-form-urlencoded"};function a(e,t){!i.isUndefined(e)&&i.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function s(){var e;return("undefined"!==typeof XMLHttpRequest||"undefined"!==typeof t&&"[object process]"===Object.prototype.toString.call(t))&&(e=n("b50d")),e}var l={adapter:s(),transformRequest:[function(e,t){return r(t,"Accept"),r(t,"Content-Type"),i.isFormData(e)||i.isArrayBuffer(e)||i.isBuffer(e)||i.isStream(e)||i.isFile(e)||i.isBlob(e)?e:i.isArrayBufferView(e)?e.buffer:i.isURLSearchParams(e)?(a(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):i.isObject(e)?(a(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"===typeof e)try{e=JSON.parse(e)}catch(t){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};i.forEach(["delete","get","head"],(function(e){l.headers[e]={}})),i.forEach(["post","put","patch"],(function(e){l.headers[e]=i.merge(o)})),e.exports=l}).call(this,n("4362"))},2532:function(e,t,n){"use strict";var i=n("23e7"),r=n("5a34"),o=n("1d80"),a=n("ab13");i({target:"String",proto:!0,forced:!a("includes")},{includes:function(e){return!!~String(o(this)).indexOf(r(e),arguments.length>1?arguments[1]:void 0)}})},"25a1":function(e,t,n){"use strict";var i=n("ebb5"),r=n("d58f").right,o=i.aTypedArray,a=i.exportTypedArrayMethod;a("reduceRight",(function(e){return r(o(this),e,arguments.length,arguments.length>1?arguments[1]:void 0)}))},"25f0":function(e,t,n){"use strict";var i=n("6eeb"),r=n("825a"),o=n("d039"),a=n("ad6d"),s="toString",l=RegExp.prototype,c=l[s],u=o((function(){return"/a/b"!=c.call({source:"a",flags:"b"})})),d=c.name!=s;(u||d)&&i(RegExp.prototype,s,(function(){var e=r(this),t=String(e.source),n=e.flags,i=String(void 0===n&&e instanceof RegExp&&!("flags"in l)?a.call(e):n);return"/"+t+"/"+i}),{unsafe:!0})},2626:function(e,t,n){"use strict";var i=n("d066"),r=n("9bf2"),o=n("b622"),a=n("83ab"),s=o("species");e.exports=function(e){var t=i(e),n=r.f;a&&t&&!t[s]&&n(t,s,{configurable:!0,get:function(){return this}})}},2638:function(e,t,n){"use strict";function i(){return i=Object.assign||function(e){for(var t,n=1;n<arguments.length;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},i.apply(this,arguments)}var r=["attrs","props","domProps"],o=["class","style","directives"],a=["on","nativeOn"],s=function(e){return e.reduce((function(e,t){for(var n in t)if(e[n])if(-1!==r.indexOf(n))e[n]=i({},e[n],t[n]);else if(-1!==o.indexOf(n)){var s=e[n]instanceof Array?e[n]:[e[n]],c=t[n]instanceof Array?t[n]:[t[n]];e[n]=s.concat(c)}else if(-1!==a.indexOf(n))for(var u in t[n])if(e[n][u]){var d=e[n][u]instanceof Array?e[n][u]:[e[n][u]],h=t[n][u]instanceof Array?t[n][u]:[t[n][u]];e[n][u]=d.concat(h)}else e[n][u]=t[n][u];else if("hook"==n)for(var f in t[n])e[n][f]=e[n][f]?l(e[n][f],t[n][f]):t[n][f];else e[n]=t[n];else e[n]=t[n];return e}),{})},l=function(e,t){return function(){e&&e.apply(this,arguments),t&&t.apply(this,arguments)}};e.exports=s},"26dd":function(e,t,n){"use strict";var i=n("6f4f"),r=n("10db"),o=n("92f0"),a={};n("051b")(a,n("cc15")("iterator"),(function(){return this})),e.exports=function(e,t,n){e.prototype=i(a,{next:r(1,n)}),o(e,t+" Iterator")}},2877:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},2909:function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var i=n("6b75");function r(e){if(Array.isArray(e))return Object(i["a"])(e)}function o(e){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}n("a4d3"),n("e01a"),n("d28b"),n("a630"),n("e260"),n("d3b7"),n("3ca3"),n("ddb0");var a=n("06c5");function s(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function l(e){return r(e)||o(e)||Object(a["a"])(e)||s()}},2954:function(e,t,n){"use strict";var i=n("ebb5"),r=n("4840"),o=n("d039"),a=i.aTypedArray,s=i.aTypedArrayConstructor,l=i.exportTypedArrayMethod,c=[].slice,u=o((function(){new Int8Array(1).slice()}));l("slice",(function(e,t){var n=c.call(a(this),e,t),i=r(this,this.constructor),o=0,l=n.length,u=new(s(i))(l);while(l>o)u[o]=n[o++];return u}),u)},"299c":function(e,t,n){n("a4d3"),n("e01a"),n("944a"),n("b0c0"),n("0c47"),n("23dc"),n("a9e3"),n("d3b7"),n("ac1f"),n("5319");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=131)}({131:function(e,t,n){"use strict";n.r(t);var i=n(5),r=n.n(i),o=n(17),a=n.n(o),s=n(2),l=n(3),c=n(7),u=n.n(c),d={name:"ElTooltip",mixins:[r.a],props:{openDelay:{type:Number,default:0},disabled:Boolean,manual:Boolean,effect:{type:String,default:"dark"},arrowOffset:{type:Number,default:0},popperClass:String,content:String,visibleArrow:{default:!0},transition:{type:String,default:"el-fade-in-linear"},popperOptions:{default:function(){return{boundariesPadding:10,gpuAcceleration:!1}}},enterable:{type:Boolean,default:!0},hideAfter:{type:Number,default:0},tabindex:{type:Number,default:0}},data:function(){return{tooltipId:"el-tooltip-"+Object(l["generateId"])(),timeoutPending:null,focusing:!1}},beforeCreate:function(){var e=this;this.$isServer||(this.popperVM=new u.a({data:{node:""},render:function(e){return this.node}}).$mount(),this.debounceClose=a()(200,(function(){return e.handleClosePopper()})))},render:function(e){var t=this;this.popperVM&&(this.popperVM.node=e("transition",{attrs:{name:this.transition},on:{afterLeave:this.doDestroy}},[e("div",{on:{mouseleave:function(){t.setExpectedState(!1),t.debounceClose()},mouseenter:function(){t.setExpectedState(!0)}},ref:"popper",attrs:{role:"tooltip",id:this.tooltipId,"aria-hidden":this.disabled||!this.showPopper?"true":"false"},directives:[{name:"show",value:!this.disabled&&this.showPopper}],class:["el-tooltip__popper","is-"+this.effect,this.popperClass]},[this.$slots.content||this.content])]));var n=this.getFirstElement();if(!n)return null;var i=n.data=n.data||{};return i.staticClass=this.addTooltipClass(i.staticClass),n},mounted:function(){var e=this;this.referenceElm=this.$el,1===this.$el.nodeType&&(this.$el.setAttribute("aria-describedby",this.tooltipId),this.$el.setAttribute("tabindex",this.tabindex),Object(s["on"])(this.referenceElm,"mouseenter",this.show),Object(s["on"])(this.referenceElm,"mouseleave",this.hide),Object(s["on"])(this.referenceElm,"focus",(function(){if(e.$slots.default&&e.$slots.default.length){var t=e.$slots.default[0].componentInstance;t&&t.focus?t.focus():e.handleFocus()}else e.handleFocus()})),Object(s["on"])(this.referenceElm,"blur",this.handleBlur),Object(s["on"])(this.referenceElm,"click",this.removeFocusing)),this.value&&this.popperVM&&this.popperVM.$nextTick((function(){e.value&&e.updatePopper()}))},watch:{focusing:function(e){e?Object(s["addClass"])(this.referenceElm,"focusing"):Object(s["removeClass"])(this.referenceElm,"focusing")}},methods:{show:function(){this.setExpectedState(!0),this.handleShowPopper()},hide:function(){this.setExpectedState(!1),this.debounceClose()},handleFocus:function(){this.focusing=!0,this.show()},handleBlur:function(){this.focusing=!1,this.hide()},removeFocusing:function(){this.focusing=!1},addTooltipClass:function(e){return e?"el-tooltip "+e.replace("el-tooltip",""):"el-tooltip"},handleShowPopper:function(){var e=this;this.expectedState&&!this.manual&&(clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.showPopper=!0}),this.openDelay),this.hideAfter>0&&(this.timeoutPending=setTimeout((function(){e.showPopper=!1}),this.hideAfter)))},handleClosePopper:function(){this.enterable&&this.expectedState||this.manual||(clearTimeout(this.timeout),this.timeoutPending&&clearTimeout(this.timeoutPending),this.showPopper=!1,this.disabled&&this.doDestroy())},setExpectedState:function(e){!1===e&&clearTimeout(this.timeoutPending),this.expectedState=e},getFirstElement:function(){var e=this.$slots.default;if(!Array.isArray(e))return null;for(var t=null,n=0;n<e.length;n++)e[n]&&e[n].tag&&(t=e[n]);return t}},beforeDestroy:function(){this.popperVM&&this.popperVM.$destroy()},destroyed:function(){var e=this.referenceElm;1===e.nodeType&&(Object(s["off"])(e,"mouseenter",this.show),Object(s["off"])(e,"mouseleave",this.hide),Object(s["off"])(e,"focus",this.handleFocus),Object(s["off"])(e,"blur",this.handleBlur),Object(s["off"])(e,"click",this.removeFocusing))},install:function(e){e.component(d.name,d)}};t["default"]=d},17:function(e,t){e.exports=n("0e15")},2:function(e,t){e.exports=n("5924")},3:function(e,t){e.exports=n("8122")},5:function(e,t){e.exports=n("e974")},7:function(e,t){e.exports=n("8bbf")}})},"2a5e":function(e,t,n){"use strict";n("13d5"),t.__esModule=!0,t.default=a;var i=n("8bbf"),r=o(i);function o(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!r.default.prototype.$isServer)if(t){var n=[],i=t.offsetParent;while(i&&e!==i&&e.contains(i))n.push(i),i=i.offsetParent;var o=t.offsetTop+n.reduce((function(e,t){return e+t.offsetTop}),0),a=o+t.offsetHeight,s=e.scrollTop,l=s+e.clientHeight;o<s?e.scrollTop=o:a>l&&(e.scrollTop=a-e.clientHeight)}else e.scrollTop=0}},"2a95":function(e,t,n){"use strict";(function(e){function n(){return n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},n.apply(this,arguments)}function i(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function r(e){return r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},r(e)}function o(e,t){return o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},o(e,t)}function a(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e,t,n){return s=a()?Reflect.construct:function(e,t,n){var i=[null];i.push.apply(i,t);var r=Function.bind.apply(e,i),a=new r;return n&&o(a,n.prototype),a},s.apply(null,arguments)}function l(e){return-1!==Function.toString.call(e).indexOf("[native code]")}function c(e){var t="function"===typeof Map?new Map:void 0;return c=function(e){if(null===e||!l(e))return e;if("function"!==typeof e)throw new TypeError("Super expression must either be null or a function");if("undefined"!==typeof t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return s(e,arguments,r(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),o(n,e)},c(e)}var u=/%[sdj%]/g,d=function(){};function h(e){if(!e||!e.length)return null;var t={};return e.forEach((function(e){var n=e.field;t[n]=t[n]||[],t[n].push(e)})),t}function f(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var i=1,r=t[0],o=t.length;if("function"===typeof r)return r.apply(null,t.slice(1));if("string"===typeof r){var a=String(r).replace(u,(function(e){if("%%"===e)return"%";if(i>=o)return e;switch(e){case"%s":return String(t[i++]);case"%d":return Number(t[i++]);case"%j":try{return JSON.stringify(t[i++])}catch(n){return"[Circular]"}break;default:return e}}));return a}return r}function p(e){return"string"===e||"url"===e||"hex"===e||"email"===e||"date"===e||"pattern"===e}function m(e,t){return void 0===e||null===e||!("array"!==t||!Array.isArray(e)||e.length)||!(!p(t)||"string"!==typeof e||e)}function g(e,t,n){var i=[],r=0,o=e.length;function a(e){i.push.apply(i,e),r++,r===o&&n(i)}e.forEach((function(e){t(e,a)}))}function v(e,t,n){var i=0,r=e.length;function o(a){if(a&&a.length)n(a);else{var s=i;i+=1,s<r?t(e[s],o):n([])}}o([])}function b(e){var t=[];return Object.keys(e).forEach((function(n){t.push.apply(t,e[n])})),t}"undefined"!==typeof e&&Object({NODE_ENV:"production",BASE_URL:""});var y=function(e){function t(t,n){var i;return i=e.call(this,"Async Validation Error")||this,i.errors=t,i.fields=n,i}return i(t,e),t}(c(Error));function w(e,t,n,i){if(t.first){var r=new Promise((function(t,r){var o=function(e){return i(e),e.length?r(new y(e,h(e))):t()},a=b(e);v(a,n,o)}));return r["catch"]((function(e){return e})),r}var o=t.firstFields||[];!0===o&&(o=Object.keys(e));var a=Object.keys(e),s=a.length,l=0,c=[],u=new Promise((function(t,r){var u=function(e){if(c.push.apply(c,e),l++,l===s)return i(c),c.length?r(new y(c,h(c))):t()};a.length||(i(c),t()),a.forEach((function(t){var i=e[t];-1!==o.indexOf(t)?v(i,n,u):g(i,n,u)}))}));return u["catch"]((function(e){return e})),u}function x(e){return function(t){return t&&t.message?(t.field=t.field||e.fullField,t):{message:"function"===typeof t?t():t,field:t.field||e.fullField}}}function _(e,t){if(t)for(var i in t)if(t.hasOwnProperty(i)){var r=t[i];"object"===_typeof2(r)&&"object"===_typeof2(e[i])?e[i]=n(n({},e[i]),r):e[i]=r}return e}function k(e,t,n,i,r,o){!e.required||n.hasOwnProperty(e.field)&&!m(t,o||e.type)||i.push(f(r.messages.required,e.fullField))}function C(e,t,n,i,r){(/^\s+$/.test(t)||""===t)&&i.push(f(r.messages.whitespace,e.fullField))}var S={email:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,url:new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$","i"),hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},O={integer:function(e){return O.number(e)&&parseInt(e,10)===e},float:function(e){return O.number(e)&&!O.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch(t){return!1}},date:function(e){return"function"===typeof e.getTime&&"function"===typeof e.getMonth&&"function"===typeof e.getYear&&!isNaN(e.getTime())},number:function(e){return!isNaN(e)&&"number"===typeof e},object:function(e){return"object"===_typeof2(e)&&!O.array(e)},method:function(e){return"function"===typeof e},email:function(e){return"string"===typeof e&&!!e.match(S.email)&&e.length<255},url:function(e){return"string"===typeof e&&!!e.match(S.url)},hex:function(e){return"string"===typeof e&&!!e.match(S.hex)}};function T(e,t,n,i,r){if(e.required&&void 0===t)k(e,t,n,i,r);else{var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],a=e.type;o.indexOf(a)>-1?O[a](t)||i.push(f(r.messages.types[a],e.fullField,e.type)):a&&_typeof2(t)!==e.type&&i.push(f(r.messages.types[a],e.fullField,e.type))}}function E(e,t,n,i,r){var o="number"===typeof e.len,a="number"===typeof e.min,s="number"===typeof e.max,l=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=t,u=null,d="number"===typeof t,h="string"===typeof t,p=Array.isArray(t);if(d?u="number":h?u="string":p&&(u="array"),!u)return!1;p&&(c=t.length),h&&(c=t.replace(l,"_").length),o?c!==e.len&&i.push(f(r.messages[u].len,e.fullField,e.len)):a&&!s&&c<e.min?i.push(f(r.messages[u].min,e.fullField,e.min)):s&&!a&&c>e.max?i.push(f(r.messages[u].max,e.fullField,e.max)):a&&s&&(c<e.min||c>e.max)&&i.push(f(r.messages[u].range,e.fullField,e.min,e.max))}var D="enum";function M(e,t,n,i,r){e[D]=Array.isArray(e[D])?e[D]:[],-1===e[D].indexOf(t)&&i.push(f(r.messages[D],e.fullField,e[D].join(", ")))}function A(e,t,n,i,r){if(e.pattern)if(e.pattern instanceof RegExp)e.pattern.lastIndex=0,e.pattern.test(t)||i.push(f(r.messages.pattern.mismatch,e.fullField,t,e.pattern));else if("string"===typeof e.pattern){var o=new RegExp(e.pattern);o.test(t)||i.push(f(r.messages.pattern.mismatch,e.fullField,t,e.pattern))}}var N={required:k,whitespace:C,type:T,range:E,enum:M,pattern:A};function I(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(m(t,"string")&&!e.required)return n();N.required(e,t,i,o,r,"string"),m(t,"string")||(N.type(e,t,i,o,r),N.range(e,t,i,o,r),N.pattern(e,t,i,o,r),!0===e.whitespace&&N.whitespace(e,t,i,o,r))}n(o)}function L(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();N.required(e,t,i,o,r),void 0!==t&&N.type(e,t,i,o,r)}n(o)}function P(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(""===t&&(t=void 0),m(t)&&!e.required)return n();N.required(e,t,i,o,r),void 0!==t&&(N.type(e,t,i,o,r),N.range(e,t,i,o,r))}n(o)}function $(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();N.required(e,t,i,o,r),void 0!==t&&N.type(e,t,i,o,r)}n(o)}function F(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();N.required(e,t,i,o,r),m(t)||N.type(e,t,i,o,r)}n(o)}function j(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();N.required(e,t,i,o,r),void 0!==t&&(N.type(e,t,i,o,r),N.range(e,t,i,o,r))}n(o)}function z(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();N.required(e,t,i,o,r),void 0!==t&&(N.type(e,t,i,o,r),N.range(e,t,i,o,r))}n(o)}function B(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(m(t,"array")&&!e.required)return n();N.required(e,t,i,o,r,"array"),m(t,"array")||(N.type(e,t,i,o,r),N.range(e,t,i,o,r))}n(o)}function R(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();N.required(e,t,i,o,r),void 0!==t&&N.type(e,t,i,o,r)}n(o)}var V="enum";function H(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();N.required(e,t,i,o,r),void 0!==t&&N[V](e,t,i,o,r)}n(o)}function W(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(m(t,"string")&&!e.required)return n();N.required(e,t,i,o,r),m(t,"string")||N.pattern(e,t,i,o,r)}n(o)}function q(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(m(t,"date")&&!e.required)return n();var s;N.required(e,t,i,o,r),m(t,"date")||(s=t instanceof Date?t:new Date(t),N.type(e,s,i,o,r),s&&N.range(e,s.getTime(),i,o,r))}n(o)}function U(e,t,n,i,r){var o=[],a=Array.isArray(t)?"array":_typeof2(t);N.required(e,t,i,o,r,a),n(o)}function K(e,t,n,i,r){var o=e.type,a=[],s=e.required||!e.required&&i.hasOwnProperty(e.field);if(s){if(m(t,o)&&!e.required)return n();N.required(e,t,i,a,r,o),m(t,o)||N.type(e,t,i,a,r)}n(a)}function G(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();N.required(e,t,i,o,r)}n(o)}var Y={string:I,method:L,number:P,boolean:$,regexp:F,integer:j,float:z,array:B,object:R,enum:H,pattern:W,date:q,url:K,hex:K,email:K,required:U,any:G};function X(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var Z=X();function Q(e){this.rules=null,this._messages=Z,this.define(e)}Q.prototype={messages:function(e){return e&&(this._messages=_(X(),e)),this._messages},define:function(e){if(!e)throw new Error("Cannot configure a schema with no rules");if("object"!==_typeof2(e)||Array.isArray(e))throw new Error("Rules must be an object");var t,n;for(t in this.rules={},e)e.hasOwnProperty(t)&&(n=e[t],this.rules[t]=Array.isArray(n)?n:[n])},validate:function(e,t,i){var r=this;void 0===t&&(t={}),void 0===i&&(i=function(){});var o,a,s=e,l=t,c=i;if("function"===typeof l&&(c=l,l={}),!this.rules||0===Object.keys(this.rules).length)return c&&c(),Promise.resolve();function u(e){var t,n=[],i={};function r(e){var t;Array.isArray(e)?n=(t=n).concat.apply(t,e):n.push(e)}for(t=0;t<e.length;t++)r(e[t]);n.length?i=h(n):(n=null,i=null),c(n,i)}if(l.messages){var d=this.messages();d===Z&&(d=X()),_(d,l.messages),l.messages=d}else l.messages=this.messages();var p={},m=l.keys||Object.keys(this.rules);m.forEach((function(t){o=r.rules[t],a=s[t],o.forEach((function(i){var o=i;"function"===typeof o.transform&&(s===e&&(s=n({},s)),a=s[t]=o.transform(a)),o="function"===typeof o?{validator:o}:n({},o),o.validator=r.getValidationMethod(o),o.field=t,o.fullField=o.fullField||t,o.type=r.getType(o),o.validator&&(p[t]=p[t]||[],p[t].push({rule:o,value:a,source:s,field:t}))}))}));var g={};return w(p,l,(function(e,t){var i,r=e.rule,o=("object"===r.type||"array"===r.type)&&("object"===_typeof2(r.fields)||"object"===_typeof2(r.defaultField));function a(e,t){return n(n({},t),{},{fullField:r.fullField+"."+e})}function s(i){void 0===i&&(i=[]);var s=i;if(Array.isArray(s)||(s=[s]),!l.suppressWarning&&s.length&&Q.warning("async-validator:",s),s.length&&r.message&&(s=[].concat(r.message)),s=s.map(x(r)),l.first&&s.length)return g[r.field]=1,t(s);if(o){if(r.required&&!e.value)return r.message?s=[].concat(r.message).map(x(r)):l.error&&(s=[l.error(r,f(l.messages.required,r.field))]),t(s);var c={};if(r.defaultField)for(var u in e.value)e.value.hasOwnProperty(u)&&(c[u]=r.defaultField);for(var d in c=n(n({},c),e.rule.fields),c)if(c.hasOwnProperty(d)){var h=Array.isArray(c[d])?c[d]:[c[d]];c[d]=h.map(a.bind(null,d))}var p=new Q(c);p.messages(l.messages),e.rule.options&&(e.rule.options.messages=l.messages,e.rule.options.error=l.error),p.validate(e.value,e.rule.options||l,(function(e){var n=[];s&&s.length&&n.push.apply(n,s),e&&e.length&&n.push.apply(n,e),t(n.length?n:null)}))}else t(s)}o=o&&(r.required||!r.required&&e.value),r.field=e.field,r.asyncValidator?i=r.asyncValidator(r,e.value,s,e.source,l):r.validator&&(i=r.validator(r,e.value,s,e.source,l),!0===i?s():!1===i?s(r.message||r.field+" fails"):i instanceof Array?s(i):i instanceof Error&&s(i.message)),i&&i.then&&i.then((function(){return s()}),(function(e){return s(e)}))}),(function(e){u(e)}))},getType:function(e){if(void 0===e.type&&e.pattern instanceof RegExp&&(e.type="pattern"),"function"!==typeof e.validator&&e.type&&!Y.hasOwnProperty(e.type))throw new Error(f("Unknown rule type %s",e.type));return e.type||"string"},getValidationMethod:function(e){if("function"===typeof e.validator)return e.validator;var t=Object.keys(e),n=t.indexOf("message");return-1!==n&&t.splice(n,1),1===t.length&&"required"===t[0]?Y.required:Y[this.getType(e)]||!1}},Q.register=function(e,t){if("function"!==typeof t)throw new Error("Cannot register a validator by type, validator is not a function");Y[e]=t},Q.warning=d,Q.messages=Z,Q.validators=Y,t["a"]=Q}).call(this,n("4362"))},"2ad7":function ad7(module,__webpack_exports__,__webpack_require__){"use strict";var core_js_modules_es_number_constructor__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("a9e3"),core_js_modules_es_number_constructor__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(core_js_modules_es_number_constructor__WEBPACK_IMPORTED_MODULE_0__),_Users_sunlh_idea_workspace_aws6_vue_aws_awsui_vue_node_modules_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("53ca");__webpack_exports__["a"]={name:"AwsuiDictionary",props:{value:[String,Number],readonly:Boolean,config:{type:String,default:function(){return""}},sid:{type:String,default:""},appId:{type:String,default:""},containerType:{type:String,default:""}},data:function(){return{DDValue:"",dialogTitle:"",dialogVisible:!1,iframeOption:{url:this.getPath(),data:{sid:this.sid,cmd:"CLIENT_UI_XMLDICT_OPEN",config:this.config,appId:this.appId,pageIndex:1,containerType:this.containerType},height:"99%"},otherDiaConfirm:null}},watch:{DDValue:function(e){this.$emit("input",e)},value:{handler:function(){this.DDValue=this.value},immediate:!0}},computed:{dialogOnce:function(){return null==window.DataDictionaryOnce},isMultiple:function(){var e=!1;if("string"==typeof this.config&&0!=this.config.length){var t=JSON.parse(this.config);e=t.multiple}return e}},methods:{DDIconClick:function(e,t){void 0!==e&&(this.iframeOption=e),this.otherDiaConfirm=null==t?this.dialogConfirm:t,null==window.DataDictionaryOnce||window.DataDictionaryOnce===this?this.dialogVisible=!0:window.DataDictionaryOnce.DDIconClick(this.iframeOption,this.dialogConfirm)},setValue:function(e){if(this.otherDiaConfirm){var t=this.otherDiaConfirm;this.otherDiaConfirm=null,t(e),this.dialogVisible=!1}},dialogConfirm:function(e){if(null==e){if(this.otherDiaConfirm){var t=this.otherDiaConfirm;this.otherDiaConfirm=null,t(this.getValue()),this.dialogVisible=!1}}else"object"==Object(_Users_sunlh_idea_workspace_aws6_vue_aws_awsui_vue_node_modules_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__["a"])(e)?this.DDValue=e[0]:this.DDValue=e},getPath:function getPath(){return eval("axiosBaseUrl")+"w"},getValue:function(){return this.$refs.DialogDD.getWin().getMultipleVal()},handleClose:function(){this.dialogVisible=!1},diaCancel:function(){this.dialogVisible=!1}},mounted:function(){window.DataDictionaryOnce||(window.DataDictionaryOnce=this)},destroyed:function(){window.DataDictionaryOnce=null}}},"2b3d":function(e,t,n){"use strict";n("3ca3");var i,r=n("23e7"),o=n("83ab"),a=n("0d3b"),s=n("da84"),l=n("37e8"),c=n("6eeb"),u=n("19aa"),d=n("5135"),h=n("60da"),f=n("4df4"),p=n("6547").codeAt,m=n("5fb2"),g=n("d44e"),v=n("9861"),b=n("69f3"),y=s.URL,w=v.URLSearchParams,x=v.getState,_=b.set,k=b.getterFor("URL"),C=Math.floor,S=Math.pow,O="Invalid authority",T="Invalid scheme",E="Invalid host",D="Invalid port",M=/[A-Za-z]/,A=/[\d+-.A-Za-z]/,N=/\d/,I=/^(0x|0X)/,L=/^[0-7]+$/,P=/^\d+$/,$=/^[\dA-Fa-f]+$/,F=/[\u0000\u0009\u000A\u000D #%/:?@[\\]]/,j=/[\u0000\u0009\u000A\u000D #/:?@[\\]]/,z=/^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g,B=/[\u0009\u000A\u000D]/g,R=function(e,t){var n,i,r;if("["==t.charAt(0)){if("]"!=t.charAt(t.length-1))return E;if(n=H(t.slice(1,-1)),!n)return E;e.host=n}else if(Q(e)){if(t=m(t),F.test(t))return E;if(n=V(t),null===n)return E;e.host=n}else{if(j.test(t))return E;for(n="",i=f(t),r=0;r<i.length;r++)n+=X(i[r],U);e.host=n}},V=function(e){var t,n,i,r,o,a,s,l=e.split(".");if(l.length&&""==l[l.length-1]&&l.pop(),t=l.length,t>4)return e;for(n=[],i=0;i<t;i++){if(r=l[i],""==r)return e;if(o=10,r.length>1&&"0"==r.charAt(0)&&(o=I.test(r)?16:8,r=r.slice(8==o?1:2)),""===r)a=0;else{if(!(10==o?P:8==o?L:$).test(r))return e;a=parseInt(r,o)}n.push(a)}for(i=0;i<t;i++)if(a=n[i],i==t-1){if(a>=S(256,5-t))return null}else if(a>255)return null;for(s=n.pop(),i=0;i<n.length;i++)s+=n[i]*S(256,3-i);return s},H=function(e){var t,n,i,r,o,a,s,l=[0,0,0,0,0,0,0,0],c=0,u=null,d=0,h=function(){return e.charAt(d)};if(":"==h()){if(":"!=e.charAt(1))return;d+=2,c++,u=c}while(h()){if(8==c)return;if(":"!=h()){t=n=0;while(n<4&&$.test(h()))t=16*t+parseInt(h(),16),d++,n++;if("."==h()){if(0==n)return;if(d-=n,c>6)return;i=0;while(h()){if(r=null,i>0){if(!("."==h()&&i<4))return;d++}if(!N.test(h()))return;while(N.test(h())){if(o=parseInt(h(),10),null===r)r=o;else{if(0==r)return;r=10*r+o}if(r>255)return;d++}l[c]=256*l[c]+r,i++,2!=i&&4!=i||c++}if(4!=i)return;break}if(":"==h()){if(d++,!h())return}else if(h())return;l[c++]=t}else{if(null!==u)return;d++,c++,u=c}}if(null!==u){a=c-u,c=7;while(0!=c&&a>0)s=l[c],l[c--]=l[u+a-1],l[u+--a]=s}else if(8!=c)return;return l},W=function(e){for(var t=null,n=1,i=null,r=0,o=0;o<8;o++)0!==e[o]?(r>n&&(t=i,n=r),i=null,r=0):(null===i&&(i=o),++r);return r>n&&(t=i,n=r),t},q=function(e){var t,n,i,r;if("number"==typeof e){for(t=[],n=0;n<4;n++)t.unshift(e%256),e=C(e/256);return t.join(".")}if("object"==_typeof2(e)){for(t="",i=W(e),n=0;n<8;n++)r&&0===e[n]||(r&&(r=!1),i===n?(t+=n?":":"::",r=!0):(t+=e[n].toString(16),n<7&&(t+=":")));return"["+t+"]"}return e},U={},K=h({},U,{" ":1,'"':1,"<":1,">":1,"`":1}),G=h({},K,{"#":1,"?":1,"{":1,"}":1}),Y=h({},G,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),X=function(e,t){var n=p(e,0);return n>32&&n<127&&!d(t,e)?e:encodeURIComponent(e)},Z={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Q=function(e){return d(Z,e.scheme)},J=function(e){return""!=e.username||""!=e.password},ee=function(e){return!e.host||e.cannotBeABaseURL||"file"==e.scheme},te=function(e,t){var n;return 2==e.length&&M.test(e.charAt(0))&&(":"==(n=e.charAt(1))||!t&&"|"==n)},ne=function(e){var t;return e.length>1&&te(e.slice(0,2))&&(2==e.length||"/"===(t=e.charAt(2))||"\\"===t||"?"===t||"#"===t)},ie=function(e){var t=e.path,n=t.length;!n||"file"==e.scheme&&1==n&&te(t[0],!0)||t.pop()},re=function(e){return"."===e||"%2e"===e.toLowerCase()},oe=function(e){return e=e.toLowerCase(),".."===e||"%2e."===e||".%2e"===e||"%2e%2e"===e},ae={},se={},le={},ce={},ue={},de={},he={},fe={},pe={},me={},ge={},ve={},be={},ye={},we={},xe={},_e={},ke={},Ce={},Se={},Oe={},Te=function(e,t,n,r){var o,a,s,l,c=n||ae,u=0,h="",p=!1,m=!1,g=!1;n||(e.scheme="",e.username="",e.password="",e.host=null,e.port=null,e.path=[],e.query=null,e.fragment=null,e.cannotBeABaseURL=!1,t=t.replace(z,"")),t=t.replace(B,""),o=f(t);while(u<=o.length){switch(a=o[u],c){case ae:if(!a||!M.test(a)){if(n)return T;c=le;continue}h+=a.toLowerCase(),c=se;break;case se:if(a&&(A.test(a)||"+"==a||"-"==a||"."==a))h+=a.toLowerCase();else{if(":"!=a){if(n)return T;h="",c=le,u=0;continue}if(n&&(Q(e)!=d(Z,h)||"file"==h&&(J(e)||null!==e.port)||"file"==e.scheme&&!e.host))return;if(e.scheme=h,n)return void(Q(e)&&Z[e.scheme]==e.port&&(e.port=null));h="","file"==e.scheme?c=ye:Q(e)&&r&&r.scheme==e.scheme?c=ce:Q(e)?c=fe:"/"==o[u+1]?(c=ue,u++):(e.cannotBeABaseURL=!0,e.path.push(""),c=Ce)}break;case le:if(!r||r.cannotBeABaseURL&&"#"!=a)return T;if(r.cannotBeABaseURL&&"#"==a){e.scheme=r.scheme,e.path=r.path.slice(),e.query=r.query,e.fragment="",e.cannotBeABaseURL=!0,c=Oe;break}c="file"==r.scheme?ye:de;continue;case ce:if("/"!=a||"/"!=o[u+1]){c=de;continue}c=pe,u++;break;case ue:if("/"==a){c=me;break}c=ke;continue;case de:if(e.scheme=r.scheme,a==i)e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,e.path=r.path.slice(),e.query=r.query;else if("/"==a||"\\"==a&&Q(e))c=he;else if("?"==a)e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,e.path=r.path.slice(),e.query="",c=Se;else{if("#"!=a){e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,e.path=r.path.slice(),e.path.pop(),c=ke;continue}e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,e.path=r.path.slice(),e.query=r.query,e.fragment="",c=Oe}break;case he:if(!Q(e)||"/"!=a&&"\\"!=a){if("/"!=a){e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,c=ke;continue}c=me}else c=pe;break;case fe:if(c=pe,"/"!=a||"/"!=h.charAt(u+1))continue;u++;break;case pe:if("/"!=a&&"\\"!=a){c=me;continue}break;case me:if("@"==a){p&&(h="%40"+h),p=!0,s=f(h);for(var v=0;v<s.length;v++){var b=s[v];if(":"!=b||g){var y=X(b,Y);g?e.password+=y:e.username+=y}else g=!0}h=""}else if(a==i||"/"==a||"?"==a||"#"==a||"\\"==a&&Q(e)){if(p&&""==h)return O;u-=f(h).length+1,h="",c=ge}else h+=a;break;case ge:case ve:if(n&&"file"==e.scheme){c=xe;continue}if(":"!=a||m){if(a==i||"/"==a||"?"==a||"#"==a||"\\"==a&&Q(e)){if(Q(e)&&""==h)return E;if(n&&""==h&&(J(e)||null!==e.port))return;if(l=R(e,h),l)return l;if(h="",c=_e,n)return;continue}"["==a?m=!0:"]"==a&&(m=!1),h+=a}else{if(""==h)return E;if(l=R(e,h),l)return l;if(h="",c=be,n==ve)return}break;case be:if(!N.test(a)){if(a==i||"/"==a||"?"==a||"#"==a||"\\"==a&&Q(e)||n){if(""!=h){var w=parseInt(h,10);if(w>65535)return D;e.port=Q(e)&&w===Z[e.scheme]?null:w,h=""}if(n)return;c=_e;continue}return D}h+=a;break;case ye:if(e.scheme="file","/"==a||"\\"==a)c=we;else{if(!r||"file"!=r.scheme){c=ke;continue}if(a==i)e.host=r.host,e.path=r.path.slice(),e.query=r.query;else if("?"==a)e.host=r.host,e.path=r.path.slice(),e.query="",c=Se;else{if("#"!=a){ne(o.slice(u).join(""))||(e.host=r.host,e.path=r.path.slice(),ie(e)),c=ke;continue}e.host=r.host,e.path=r.path.slice(),e.query=r.query,e.fragment="",c=Oe}}break;case we:if("/"==a||"\\"==a){c=xe;break}r&&"file"==r.scheme&&!ne(o.slice(u).join(""))&&(te(r.path[0],!0)?e.path.push(r.path[0]):e.host=r.host),c=ke;continue;case xe:if(a==i||"/"==a||"\\"==a||"?"==a||"#"==a){if(!n&&te(h))c=ke;else if(""==h){if(e.host="",n)return;c=_e}else{if(l=R(e,h),l)return l;if("localhost"==e.host&&(e.host=""),n)return;h="",c=_e}continue}h+=a;break;case _e:if(Q(e)){if(c=ke,"/"!=a&&"\\"!=a)continue}else if(n||"?"!=a)if(n||"#"!=a){if(a!=i&&(c=ke,"/"!=a))continue}else e.fragment="",c=Oe;else e.query="",c=Se;break;case ke:if(a==i||"/"==a||"\\"==a&&Q(e)||!n&&("?"==a||"#"==a)){if(oe(h)?(ie(e),"/"==a||"\\"==a&&Q(e)||e.path.push("")):re(h)?"/"==a||"\\"==a&&Q(e)||e.path.push(""):("file"==e.scheme&&!e.path.length&&te(h)&&(e.host&&(e.host=""),h=h.charAt(0)+":"),e.path.push(h)),h="","file"==e.scheme&&(a==i||"?"==a||"#"==a))while(e.path.length>1&&""===e.path[0])e.path.shift();"?"==a?(e.query="",c=Se):"#"==a&&(e.fragment="",c=Oe)}else h+=X(a,G);break;case Ce:"?"==a?(e.query="",c=Se):"#"==a?(e.fragment="",c=Oe):a!=i&&(e.path[0]+=X(a,U));break;case Se:n||"#"!=a?a!=i&&("'"==a&&Q(e)?e.query+="%27":e.query+="#"==a?"%23":X(a,U)):(e.fragment="",c=Oe);break;case Oe:a!=i&&(e.fragment+=X(a,K));break}u++}},Ee=function e(t){var n,i,r=u(this,e,"URL"),a=arguments.length>1?arguments[1]:void 0,s=String(t),l=_(r,{type:"URL"});if(void 0!==a)if(a instanceof e)n=k(a);else if(i=Te(n={},String(a)),i)throw TypeError(i);if(i=Te(l,s,null,n),i)throw TypeError(i);var c=l.searchParams=new w,d=x(c);d.updateSearchParams(l.query),d.updateURL=function(){l.query=String(c)||null},o||(r.href=Me.call(r),r.origin=Ae.call(r),r.protocol=Ne.call(r),r.username=Ie.call(r),r.password=Le.call(r),r.host=Pe.call(r),r.hostname=$e.call(r),r.port=Fe.call(r),r.pathname=je.call(r),r.search=ze.call(r),r.searchParams=Be.call(r),r.hash=Re.call(r))},De=Ee.prototype,Me=function(){var e=k(this),t=e.scheme,n=e.username,i=e.password,r=e.host,o=e.port,a=e.path,s=e.query,l=e.fragment,c=t+":";return null!==r?(c+="//",J(e)&&(c+=n+(i?":"+i:"")+"@"),c+=q(r),null!==o&&(c+=":"+o)):"file"==t&&(c+="//"),c+=e.cannotBeABaseURL?a[0]:a.length?"/"+a.join("/"):"",null!==s&&(c+="?"+s),null!==l&&(c+="#"+l),c},Ae=function(){var e=k(this),t=e.scheme,n=e.port;if("blob"==t)try{return new URL(t.path[0]).origin}catch(i){return"null"}return"file"!=t&&Q(e)?t+"://"+q(e.host)+(null!==n?":"+n:""):"null"},Ne=function(){return k(this).scheme+":"},Ie=function(){return k(this).username},Le=function(){return k(this).password},Pe=function(){var e=k(this),t=e.host,n=e.port;return null===t?"":null===n?q(t):q(t)+":"+n},$e=function(){var e=k(this).host;return null===e?"":q(e)},Fe=function(){var e=k(this).port;return null===e?"":String(e)},je=function(){var e=k(this),t=e.path;return e.cannotBeABaseURL?t[0]:t.length?"/"+t.join("/"):""},ze=function(){var e=k(this).query;return e?"?"+e:""},Be=function(){return k(this).searchParams},Re=function(){var e=k(this).fragment;return e?"#"+e:""},Ve=function(e,t){return{get:e,set:t,configurable:!0,enumerable:!0}};if(o&&l(De,{href:Ve(Me,(function(e){var t=k(this),n=String(e),i=Te(t,n);if(i)throw TypeError(i);x(t.searchParams).updateSearchParams(t.query)})),origin:Ve(Ae),protocol:Ve(Ne,(function(e){var t=k(this);Te(t,String(e)+":",ae)})),username:Ve(Ie,(function(e){var t=k(this),n=f(String(e));if(!ee(t)){t.username="";for(var i=0;i<n.length;i++)t.username+=X(n[i],Y)}})),password:Ve(Le,(function(e){var t=k(this),n=f(String(e));if(!ee(t)){t.password="";for(var i=0;i<n.length;i++)t.password+=X(n[i],Y)}})),host:Ve(Pe,(function(e){var t=k(this);t.cannotBeABaseURL||Te(t,String(e),ge)})),hostname:Ve($e,(function(e){var t=k(this);t.cannotBeABaseURL||Te(t,String(e),ve)})),port:Ve(Fe,(function(e){var t=k(this);ee(t)||(e=String(e),""==e?t.port=null:Te(t,e,be))})),pathname:Ve(je,(function(e){var t=k(this);t.cannotBeABaseURL||(t.path=[],Te(t,e+"",_e))})),search:Ve(ze,(function(e){var t=k(this);e=String(e),""==e?t.query=null:("?"==e.charAt(0)&&(e=e.slice(1)),t.query="",Te(t,e,Se)),x(t.searchParams).updateSearchParams(t.query)})),searchParams:Ve(Be),hash:Ve(Re,(function(e){var t=k(this);e=String(e),""!=e?("#"==e.charAt(0)&&(e=e.slice(1)),t.fragment="",Te(t,e,Oe)):t.fragment=null}))}),c(De,"toJSON",(function(){return Me.call(this)}),{enumerable:!0}),c(De,"toString",(function(){return Me.call(this)}),{enumerable:!0}),y){var He=y.createObjectURL,We=y.revokeObjectURL;He&&c(Ee,"createObjectURL",(function(e){return He.apply(y,arguments)})),We&&c(Ee,"revokeObjectURL",(function(e){return We.apply(y,arguments)}))}g(Ee,"URL"),r({global:!0,forced:!a,sham:!o},{URL:Ee})},"2bb5":function(e,t,n){"use strict";n("b0c0"),t.__esModule=!0,n("8122"),t.default={mounted:function(){},methods:{getMigratingConfig:function(){return{props:{},events:{}}}}}},"2c98":function(e,t,n){"use strict";var i=n("cf11"),r=n.n(i);r.a},"2cf4":function(e,t,n){var i,r,o,a=n("da84"),s=n("d039"),l=n("c6b6"),c=n("0366"),u=n("1be4"),d=n("cc12"),h=n("1cdc"),f=a.location,p=a.setImmediate,m=a.clearImmediate,g=a.process,v=a.MessageChannel,b=a.Dispatch,y=0,w={},x="onreadystatechange",_=function(e){if(w.hasOwnProperty(e)){var t=w[e];delete w[e],t()}},k=function(e){return function(){_(e)}},C=function(e){_(e.data)},S=function(e){a.postMessage(e+"",f.protocol+"//"+f.host)};p&&m||(p=function(e){var t=[],n=1;while(arguments.length>n)t.push(arguments[n++]);return w[++y]=function(){("function"==typeof e?e:Function(e)).apply(void 0,t)},i(y),y},m=function(e){delete w[e]},"process"==l(g)?i=function(e){g.nextTick(k(e))}:b&&b.now?i=function(e){b.now(k(e))}:v&&!h?(r=new v,o=r.port2,r.port1.onmessage=C,i=c(o.postMessage,o,1)):!a.addEventListener||"function"!=typeof postMessage||a.importScripts||s(S)||"file:"===f.protocol?i=x in d("script")?function(e){u.appendChild(d("script"))[x]=function(){u.removeChild(this),_(e)}}:function(e){setTimeout(k(e),0)}:(i=S,a.addEventListener("message",C,!1))),e.exports={set:p,clear:m}},"2d00":function(e,t,n){var i,r,o=n("da84"),a=n("342f"),s=o.process,l=s&&s.versions,c=l&&l.v8;c?(i=c.split("."),r=i[0]+i[1]):a&&(i=a.match(/Edge\/(\d+)/),(!i||i[1]>=74)&&(i=a.match(/Chrome\/(\d+)/),i&&(r=i[1]))),e.exports=r&&+r},"2d83":function(e,t,n){"use strict";var i=n("387f");e.exports=function(e,t,n,r,o){var a=new Error(e);return i(a,t,n,r,o)}},"2e67":function(e,t,n){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},"2f9a":function(e,t){e.exports=function(){}},"301c":function(e,t,n){n("e198")("asyncIterator")},"30b5":function(e,t,n){"use strict";var i=n("c532");function r(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var o;if(n)o=n(t);else if(i.isURLSearchParams(t))o=t.toString();else{var a=[];i.forEach(t,(function(e,t){null!==e&&"undefined"!==typeof e&&(i.isArray(e)?t+="[]":e=[e],i.forEach(e,(function(e){i.isDate(e)?e=e.toISOString():i.isObject(e)&&(e=JSON.stringify(e)),a.push(r(t)+"="+r(e))})))})),o=a.join("&")}if(o){var s=e.indexOf("#");-1!==s&&(e=e.slice(0,s)),e+=(-1===e.indexOf("?")?"?":"&")+o}return e}},3106:function(e,t,n){"use strict";var i=n("c2a2"),r=n.n(i);r.a},3280:function(e,t,n){"use strict";var i=n("ebb5"),r=n("e58c"),o=i.aTypedArray,a=i.exportTypedArrayMethod;a("lastIndexOf",(function(e){return r.apply(o(this),arguments)}))},3397:function(e,t,n){var i=n("7a41");e.exports=function(e,t){if(!i(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!i(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},3410:function(e,t,n){var i=n("23e7"),r=n("d039"),o=n("7b0b"),a=n("e163"),s=n("e177"),l=r((function(){a(1)}));i({target:"Object",stat:!0,forced:l,sham:!s},{getPrototypeOf:function(e){return a(o(e))}})},"342f":function(e,t,n){var i=n("d066");e.exports=i("navigator","userAgent")||""},"35a1":function(e,t,n){var i=n("f5df"),r=n("3f8c"),o=n("b622"),a=o("iterator");e.exports=function(e){if(void 0!=e)return e[a]||e["@@iterator"]||r[i(e)]}},"37bc":function(e,t,n){"use strict";var i=n("60cf"),r=n.n(i);r.a},"37e8":function(e,t,n){var i=n("83ab"),r=n("9bf2"),o=n("825a"),a=n("df75");e.exports=i?Object.defineProperties:function(e,t){o(e);var n,i=a(t),s=i.length,l=0;while(s>l)r.f(e,n=i[l++],t[n]);return e}},"387f":function(e,t,n){"use strict";e.exports=function(e,t,n,i,r){return e.config=t,n&&(e.code=n),e.request=i,e.response=r,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},"391a":function(e,t,n){},"391f":function(e,t,n){},3934:function(e,t,n){"use strict";var i=n("c532");e.exports=i.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function r(e){var i=e;return t&&(n.setAttribute("href",i),i=n.href),n.setAttribute("href",i),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=r(window.location.href),function(t){var n=i.isString(t)?r(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return function(){return!0}}()},"393a":function(e,t,n){"use strict";var i=n("e444"),r=n("512c"),o=n("ba01"),a=n("051b"),s=n("8a0d"),l=n("26dd"),c=n("92f0"),u=n("ce7a"),d=n("cc15")("iterator"),h=!([].keys&&"next"in[].keys()),f="@@iterator",p="keys",m="values",g=function(){return this};e.exports=function(e,t,n,v,b,y,w){l(n,t,v);var x,_,k,C=function(e){if(!h&&e in E)return E[e];switch(e){case p:return function(){return new n(this,e)};case m:return function(){return new n(this,e)}}return function(){return new n(this,e)}},S=t+" Iterator",O=b==m,T=!1,E=e.prototype,D=E[d]||E[f]||b&&E[b],M=D||C(b),A=b?O?C("entries"):M:void 0,N="Array"==t&&E.entries||D;if(N&&(k=u(N.call(new e)),k!==Object.prototype&&k.next&&(c(k,S,!0),i||"function"==typeof k[d]||a(k,d,g))),O&&D&&D.name!==m&&(T=!0,M=function(){return D.call(this)}),i&&!w||!h&&!T&&E[d]||a(E,d,M),s[t]=M,s[S]=g,b)if(x={values:O?M:C(m),keys:y?M:C(p),entries:A},w)for(_ in x)_ in E||o(E,_,x[_]);else r(r.P+r.F*(h||T),t,x);return x}},"39ad":function(e,t,n){var i=n("6ca1"),r=n("d16a"),o=n("9d11");e.exports=function(e){return function(t,n,a){var s,l=i(t),c=r(l.length),u=o(a,c);if(e&&n!=n){while(c>u)if(s=l[u++],s!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}}},"3a7b":function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").findIndex,o=i.aTypedArray,a=i.exportTypedArrayMethod;a("findIndex",(function(e){return r(o(this),e,arguments.length>1?arguments[1]:void 0)}))},"3bbe":function(e,t,n){var i=n("861d");e.exports=function(e){if(!i(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},"3c47":function(e,t,n){(function(e){var i,r,o;n("c975"),n("a15b"),n("fb6a"),n("b0c0"),n("d3b7"),n("4d63"),n("ac1f"),n("25f0"),n("466d"),n("5319"),n("1276");var a=n("7037");(function(s){"object"==a(t)&&"object"==a(e)?s(n("f3a7"),n("79ef")):(r=[n("f3a7"),n("79ef")],i=s,o="function"===typeof i?i.apply(t,r):i,void 0===o||(e.exports=o))})((function(e){"use strict";var t,n,i,r,o={QUERY_DIV:";",ALIAS_KEYWORD:"AS"},s=e.Pos,l=e.cmpPos;function c(e){return"[object Array]"==Object.prototype.toString.call(e)}function u(t){var n=t.doc.modeOption;return"awsAt"===n&&(n="awsAt"),e.resolveMode(n).keywords}function d(t){var n=t.doc.modeOption;return"sql"===n&&(n="text/x-sql"),e.resolveMode(n).identifierQuote||"`"}function h(e){return"string"==typeof e?e:e.text}function f(e,t){return c(t)&&(t={columns:t}),t.text||(t.text=e),t}function p(e){var t={};if(c(e))for(var n=e.length-1;n>=0;n--){var i=e[n];t[h(i).toUpperCase()]=f(h(i),i)}else if(e)for(var r in e)t[r.toUpperCase()]=f(r,e[r]);return t}function m(e){return t[e.toUpperCase()]}function g(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function v(e,t){var n=e.length,i=h(t).substr(0,n);return e.toUpperCase()===i.toUpperCase()}function b(e,t,n,i){if(n)for(var r in n)if(n.hasOwnProperty(r)){var o=n[r];o&&v(t,r)&&(-1===r.indexOf("@")?e.push(i(o.name,null,o.id)):e.push(i(o.key+" - "+o.title,null,o.key)))}}function y(e){"."==e.charAt(0)&&(e=e.substr(1));for(var t=e.split(r+r),n=0;n<t.length;n++)t[n]=t[n].replace(new RegExp(r,"g"),"");return t.join(r)}function w(e){for(var t=h(e).split("."),n=0;n<t.length;n++)t[n]=r+t[n].replace(new RegExp(r,"g"),r+r)+r;var i=t.join(".");return"string"==typeof e?i:(e=g(e),e.text=i,e)}function x(e,i,o,a){var l=!1,c=[],u=i.start,d=!0;while(d)d="."==i.string.charAt(0),l=l||i.string.charAt(0)==r,u=i.start,c.unshift(y(i.string)),i=a.getTokenAt(s(e.line,i.start)),"."==i.string&&(d=!0,i=a.getTokenAt(s(e.line,i.start)));var h=c.join(".");b(o,h,t,(function(e){return l?w(e):e})),b(o,h,n,(function(e){return l?w(e):e})),h=c.pop();var f=c.join("."),p=!1,v=f;if(!m(f)){var x=f;f=k(f,a),f!==x&&(p=!0)}var _=m(f);return _&&_.columns&&(_=_.columns),_&&b(o,h,_,(function(e){var t=f;return 1==p&&(t=v),"string"==typeof e?e=t+"."+e:(e=g(e),e.text=t+"."+e.text),l?w(e):e})),u}function _(e,t){for(var n=e.split(/\s+/),i=0;i<n.length;i++)n[i]&&t(n[i].replace(/[,;]/g,""))}function k(e,t){var n=t.doc,i=n.getValue(),r=e.toUpperCase(),a="",c="",u=[],d={start:s(0,0),end:s(t.lastLine(),t.getLineHandle(t.lastLine()).length)},h=i.indexOf(o.QUERY_DIV);while(-1!=h)u.push(n.posFromIndex(h)),h=i.indexOf(o.QUERY_DIV,h+1);u.unshift(s(0,0)),u.push(s(t.lastLine(),t.getLineHandle(t.lastLine()).text.length));for(var f=null,p=t.getCursor(),g=0;g<u.length;g++){if((null==f||l(p,f)>0)&&l(p,u[g])<=0){d={start:f,end:u[g]};break}f=u[g]}if(d.start){var v=n.getRange(d.start,d.end,!1);for(g=0;g<v.length;g++){var b=v[g];if(_(b,(function(e){var t=e.toUpperCase();t===r&&m(a)&&(c=a),t!==o.ALIAS_KEYWORD&&(a=e)})),c)break}}return c}e.registerHelper("hint","atformula",(function(e,o){t=p(o&&o.tables);var l=o&&o.defaultTable,c=o&&o.disableKeywords;n=l&&m(l),i=e.keywords?e.keywords:u(e),r=d(e),l&&!n&&(n=k(l,e)),n=n||[],n.columns&&(n=n.columns);var h,f,g,v=e.getCursor(),y=[],w=e.getTokenAt(v);if(w.end>v.ch&&(w.end=v.ch,w.string=w.string.slice(0,v.ch-w.start)),w.string.match(/^[.`"\w@]\w*$/)?(g=w.string,h=w.start,f=w.end):(h=f=v.ch,g=""),0!==g.length)return"."==g.charAt(0)||g.charAt(0)==r?h=x(v,w,y,e):(b(y,g,n,(function(e){return{text:e,className:"CodeMirror-hint-table CodeMirror-hint-default-table"}})),b(y,g,t,(function(e){return"object"===a(e)?e.className="CodeMirror-hint-table":e={text:e,className:"CodeMirror-hint-table"},e})),c||b(y,g,i,(function(e,t,n){return{text:e,className:"CodeMirror-hint-keyword",desc:t,key:n}}))),{list:y,from:s(v.line,h),to:s(v.line,f)}}))}))}).call(this,n("62e4")(e))},"3c4e":function(e,t,n){"use strict";var i=function(e){return r(e)&&!o(e)};function r(e){return!!e&&"object"===_typeof2(e)}function o(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||l(e)}var a="function"===typeof Symbol&&Symbol.for,s=a?Symbol.for("react.element"):60103;function l(e){return e.$$typeof===s}function c(e){return Array.isArray(e)?[]:{}}function u(e,t){var n=t&&!0===t.clone;return n&&i(e)?f(c(e),e,t):e}function d(e,t,n){var r=e.slice();return t.forEach((function(t,o){"undefined"===typeof r[o]?r[o]=u(t,n):i(t)?r[o]=f(e[o],t,n):-1===e.indexOf(t)&&r.push(u(t,n))})),r}function h(e,t,n){var r={};return i(e)&&Object.keys(e).forEach((function(t){r[t]=u(e[t],n)})),Object.keys(t).forEach((function(o){i(t[o])&&e[o]?r[o]=f(e[o],t[o],n):r[o]=u(t[o],n)})),r}function f(e,t,n){var i=Array.isArray(t),r=Array.isArray(e),o=n||{arrayMerge:d},a=i===r;if(a){if(i){var s=o.arrayMerge||d;return s(e,t,n)}return h(e,t,n)}return u(t,n)}f.all=function(e,t){if(!Array.isArray(e)||e.length<2)throw new Error("first argument should be an array with at least two elements");return e.reduce((function(e,n){return f(e,n,t)}))};var p=f;e.exports=p},"3c5d":function(e,t,n){"use strict";var i=n("ebb5"),r=n("50c4"),o=n("182d"),a=n("7b0b"),s=n("d039"),l=i.aTypedArray,c=i.exportTypedArrayMethod,u=s((function(){new Int8Array(1).set({})}));c("set",(function(e){l(this);var t=o(arguments.length>1?arguments[1]:void 0,1),n=this.length,i=a(e),s=r(i.length),c=0;if(s+t>n)throw RangeError("Wrong length");while(c<s)this[t+c]=i[c++]}),u)},"3ca3":function(e,t,n){"use strict";var i=n("6547").charAt,r=n("69f3"),o=n("7dd0"),a="String Iterator",s=r.set,l=r.getterFor(a);o(String,"String",(function(e){s(this,{type:a,string:String(e),index:0})}),(function(){var e,t=l(this),n=t.string,r=t.index;return r>=n.length?{value:void 0,done:!0}:(e=i(n,r),t.index+=e.length,{value:e,done:!1})}))},"3d56":function(e,t,n){},"3f6b":function(e,t,n){e.exports={default:n("b9c7"),__esModule:!0}},"3f8c":function(e,t){e.exports={}},"3fcc":function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").map,o=n("4840"),a=i.aTypedArray,s=i.aTypedArrayConstructor,l=i.exportTypedArrayMethod;l("map",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:void 0,(function(e,t){return new(s(o(e,e.constructor)))(t)}))}))},4010:function(e,t,n){"use strict";n("a4d3"),n("e01a"),n("d28b"),n("4160"),n("c975"),n("e260"),n("a434"),n("d3b7"),n("3ca3"),n("159b"),n("ddb0"),t.__esModule=!0,t.removeResizeListener=t.addResizeListener=void 0;var i=n("6dd8"),r=o(i);function o(e){return e&&e.__esModule?e:{default:e}}var a="undefined"===typeof window,s=function(e){var t=e,n=Array.isArray(t),i=0;for(t=n?t:t[Symbol.iterator]();;){var r;if(n){if(i>=t.length)break;r=t[i++]}else{if(i=t.next(),i.done)break;r=i.value}var o=r,a=o.target.__resizeListeners__||[];a.length&&a.forEach((function(e){e()}))}};t.addResizeListener=function(e,t){a||(e.__resizeListeners__||(e.__resizeListeners__=[],e.__ro__=new r.default(s),e.__ro__.observe(e)),e.__resizeListeners__.push(t))},t.removeResizeListener=function(e,t){e&&e.__resizeListeners__&&(e.__resizeListeners__.splice(e.__resizeListeners__.indexOf(t),1),e.__resizeListeners__.length||e.__ro__.disconnect())}},"408a":function(e,t,n){var i=n("c6b6");e.exports=function(e){if("number"!=typeof e&&"Number"!=i(e))throw TypeError("Incorrect invocation");return+e}},4127:function(e,t,n){"use strict";var i=n("d233"),r=n("b313"),o={brackets:function(e){return e+"[]"},indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},a=Date.prototype.toISOString,s={delimiter:"&",encode:!0,encoder:i.encode,encodeValuesOnly:!1,serializeDate:function(e){return a.call(e)},skipNulls:!1,strictNullHandling:!1},l=function e(t,n,r,o,a,l,c,u,d,h,f,p){var m=t;if("function"===typeof c)m=c(n,m);else if(m instanceof Date)m=h(m);else if(null===m){if(o)return l&&!p?l(n,s.encoder):n;m=""}if("string"===typeof m||"number"===typeof m||"boolean"===typeof m||i.isBuffer(m)){if(l){var g=p?n:l(n,s.encoder);return[f(g)+"="+f(l(m,s.encoder))]}return[f(n)+"="+f(String(m))]}var v,b=[];if("undefined"===typeof m)return b;if(Array.isArray(c))v=c;else{var y=Object.keys(m);v=u?y.sort(u):y}for(var w=0;w<v.length;++w){var x=v[w];a&&null===m[x]||(b=Array.isArray(m)?b.concat(e(m[x],r(n,x),r,o,a,l,c,u,d,h,f,p)):b.concat(e(m[x],n+(d?"."+x:"["+x+"]"),r,o,a,l,c,u,d,h,f,p)))}return b};e.exports=function(e,t){var n=e,a=t?i.assign({},t):{};if(null!==a.encoder&&void 0!==a.encoder&&"function"!==typeof a.encoder)throw new TypeError("Encoder has to be a function.");var c="undefined"===typeof a.delimiter?s.delimiter:a.delimiter,u="boolean"===typeof a.strictNullHandling?a.strictNullHandling:s.strictNullHandling,d="boolean"===typeof a.skipNulls?a.skipNulls:s.skipNulls,h="boolean"===typeof a.encode?a.encode:s.encode,f="function"===typeof a.encoder?a.encoder:s.encoder,p="function"===typeof a.sort?a.sort:null,m="undefined"!==typeof a.allowDots&&a.allowDots,g="function"===typeof a.serializeDate?a.serializeDate:s.serializeDate,v="boolean"===typeof a.encodeValuesOnly?a.encodeValuesOnly:s.encodeValuesOnly;if("undefined"===typeof a.format)a.format=r["default"];else if(!Object.prototype.hasOwnProperty.call(r.formatters,a.format))throw new TypeError("Unknown format option provided.");var b,y,w=r.formatters[a.format];"function"===typeof a.filter?(y=a.filter,n=y("",n)):Array.isArray(a.filter)&&(y=a.filter,b=y);var x,_=[];if("object"!==_typeof2(n)||null===n)return"";x=a.arrayFormat in o?a.arrayFormat:"indices"in a?a.indices?"indices":"repeat":"indices";var k=o[x];b||(b=Object.keys(n)),p&&b.sort(p);for(var C=0;C<b.length;++C){var S=b[C];d&&null===n[S]||(_=_.concat(l(n[S],S,k,u,d,h?f:null,y,p,m,g,w,v)))}var O=_.join(c),T=!0===a.addQueryPrefix?"?":"";return O.length>0?T+O:""}},4160:function(e,t,n){"use strict";var i=n("23e7"),r=n("17c2");i({target:"Array",proto:!0,forced:[].forEach!=r},{forEach:r})},"417f":function(e,t,n){"use strict";n("4160"),n("a434"),t.__esModule=!0;var i=n("8bbf"),r=a(i),o=n("5924");function a(e){return e&&e.__esModule?e:{default:e}}var s=[],l="@@clickoutsideContext",c=void 0,u=0;function d(e,t,n){return function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!(n&&n.context&&i.target&&r.target)||e.contains(i.target)||e.contains(r.target)||e===i.target||n.context.popperElm&&(n.context.popperElm.contains(i.target)||n.context.popperElm.contains(r.target))||(t.expression&&e[l].methodName&&n.context[e[l].methodName]?n.context[e[l].methodName]():e[l].bindingFn&&e[l].bindingFn())}}!r.default.prototype.$isServer&&(0,o.on)(document,"mousedown",(function(e){return c=e})),!r.default.prototype.$isServer&&(0,o.on)(document,"mouseup",(function(e){s.forEach((function(t){return t[l].documentHandler(e,c)}))})),t.default={bind:function(e,t,n){s.push(e);var i=u++;e[l]={id:i,documentHandler:d(e,t,n),methodName:t.expression,bindingFn:t.value}},update:function(e,t,n){e[l].documentHandler=d(e,t,n),e[l].methodName=t.expression,e[l].bindingFn=t.value},unbind:function(e){for(var t=s.length,n=0;n<t;n++)if(s[n][l].id===e[l].id){s.splice(n,1);break}delete e[l]}}},"41b2":function(e,t,n){"use strict";t.__esModule=!0;var i=n("3f6b"),r=o(i);function o(e){return e&&e.__esModule?e:{default:e}}t.default=r.default||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}},"41f8":function(e,t,n){"use strict";n("a4d3"),n("e01a"),n("d28b"),n("e260"),n("d3b7"),n("3ca3"),n("ddb0");var i=n("7037");t.__esModule=!0;var r="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)};t.isVNode=a;var o=n("8122");function a(e){return null!==e&&"object"===("undefined"===typeof e?"undefined":r(e))&&(0,o.hasOwn)(e,"componentOptions")}},"428f":function(e,t,n){var i=n("da84");e.exports=i},4328:function(e,t,n){"use strict";var i=n("4127"),r=n("9e6a"),o=n("b313");e.exports={formats:o,parse:r,stringify:i}},4362:function(e,t,n){t.nextTick=function(e){var t=Array.prototype.slice.call(arguments);t.shift(),setTimeout((function(){e.apply(null,t)}),0)},t.platform=t.arch=t.execPath=t.title="browser",t.pid=1,t.browser=!0,t.env={},t.argv=[],t.binding=function(e){throw new Error("No such module. (Possibly not yet loaded)")},function(){var e,i="/";t.cwd=function(){return i},t.chdir=function(t){e||(e=n("df7c")),i=e.resolve(t,i)}}(),t.exit=t.kill=t.umask=t.dlopen=t.uptime=t.memoryUsage=t.uvCounters=function(){},t.features={}},"43b2":function(e,t,n){},"43e3":function(e,t,n){"use strict";var i=n("a3c7"),r=n.n(i);r.a},"44ad":function(e,t,n){var i=n("d039"),r=n("c6b6"),o="".split;e.exports=i((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==r(e)?o.call(e,""):Object(e)}:Object},"44d2":function(e,t,n){var i=n("b622"),r=n("7c73"),o=n("9bf2"),a=i("unscopables"),s=Array.prototype;void 0==s[a]&&o.f(s,a,{configurable:!0,value:r(null)}),e.exports=function(e){s[a][e]=!0}},"44de":function(e,t,n){var i=n("da84");e.exports=function(e,t){var n=i.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},"44e7":function(e,t,n){var i=n("861d"),r=n("c6b6"),o=n("b622"),a=o("match");e.exports=function(e){var t;return i(e)&&(void 0!==(t=e[a])?!!t:"RegExp"==r(e))}},"45fb":function(e,t,n){"use strict";var i=n("e240"),r=n.n(i);r.a},"45fc":function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").some,o=n("a640"),a=n("ae40"),s=o("some"),l=a("some");i({target:"Array",proto:!0,forced:!s||!l},{some:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},"466d":function(e,t,n){"use strict";var i=n("d784"),r=n("825a"),o=n("50c4"),a=n("1d80"),s=n("8aa5"),l=n("14c3");i("match",1,(function(e,t,n){return[function(t){var n=a(this),i=void 0==t?void 0:t[e];return void 0!==i?i.call(t,n):new RegExp(t)[e](String(n))},function(e){var i=n(t,e,this);if(i.done)return i.value;var a=r(e),c=String(this);if(!a.global)return l(a,c);var u=a.unicode;a.lastIndex=0;var d,h=[],f=0;while(null!==(d=l(a,c))){var p=String(d[0]);h[f]=p,""===p&&(a.lastIndex=s(c,o(a.lastIndex),u)),f++}return 0===f?null:h}]}))},"467f":function(e,t,n){"use strict";var i=n("2d83");e.exports=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(i("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},4726:function(e,t,n){n("a4d3"),n("e01a"),n("944a"),n("99af"),n("a623"),n("4de4"),n("4160"),n("c975"),n("e260"),n("a15b"),n("d81d"),n("13d5"),n("fb6a"),n("45fc"),n("b0c0"),n("0c47"),n("23dc"),n("a9e3"),n("cca6"),n("d3b7"),n("ac1f"),n("1276"),n("159b"),n("ddb0");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=59)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},14:function(e,t){e.exports=n("14e9")},18:function(e,t){e.exports=n("dcdc")},21:function(e,t){e.exports=n("d397")},26:function(e,t){e.exports=n("92fa")},3:function(e,t){e.exports=n("8122")},31:function(e,t){e.exports=n("2a5e")},32:function(e,t){e.exports=n("e452")},51:function(e,t){e.exports=n("f494")},59:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["el-cascader-panel",e.border&&"is-bordered"],on:{keydown:e.handleKeyDown}},e._l(e.menus,(function(e,t){return n("cascader-menu",{key:t,ref:"menu",refInFor:!0,attrs:{index:t,nodes:e}})})),1)},r=[];i._withStripped=!0;var o,a,s=n(26),l=n.n(s),c=n(14),u=n.n(c),d=n(18),h=n.n(d),f=n(51),p=n.n(f),m=n(3),g=function(e){return e.stopPropagation()},v={inject:["panel"],components:{ElCheckbox:h.a,ElRadio:p.a},props:{node:{required:!0},nodeId:String},computed:{config:function(){return this.panel.config},isLeaf:function(){return this.node.isLeaf},isDisabled:function(){return this.node.isDisabled},checkedValue:function(){return this.panel.checkedValue},isChecked:function(){return this.node.isSameNode(this.checkedValue)},inActivePath:function(){return this.isInPath(this.panel.activePath)},inCheckedPath:function(){var e=this;return!!this.config.checkStrictly&&this.panel.checkedNodePaths.some((function(t){return e.isInPath(t)}))},value:function(){return this.node.getValueByOption()}},methods:{handleExpand:function(){var e=this,t=this.panel,n=this.node,i=this.isDisabled,r=this.config,o=r.multiple,a=r.checkStrictly;!a&&i||n.loading||(r.lazy&&!n.loaded?t.lazyLoad(n,(function(){var t=e.isLeaf;if(t||e.handleExpand(),o){var i=!!t&&n.checked;e.handleMultiCheckChange(i)}})):t.handleExpand(n))},handleCheckChange:function(){var e=this.panel,t=this.value,n=this.node;e.handleCheckChange(t),e.handleExpand(n)},handleMultiCheckChange:function(e){this.node.doCheck(e),this.panel.calculateMultiCheckedValue()},isInPath:function(e){var t=this.node,n=e[t.level-1]||{};return n.uid===t.uid},renderPrefix:function(e){var t=this.isLeaf,n=this.isChecked,i=this.config,r=i.checkStrictly,o=i.multiple;return o?this.renderCheckbox(e):r?this.renderRadio(e):t&&n?this.renderCheckIcon(e):null},renderPostfix:function(e){var t=this.node,n=this.isLeaf;return t.loading?this.renderLoadingIcon(e):n?null:this.renderExpandIcon(e)},renderCheckbox:function(e){var t=this.node,n=this.config,i=this.isDisabled,r={on:{change:this.handleMultiCheckChange},nativeOn:{}};return n.checkStrictly&&(r.nativeOn.click=g),e("el-checkbox",l()([{attrs:{value:t.checked,indeterminate:t.indeterminate,disabled:i}},r]))},renderRadio:function(e){var t=this.checkedValue,n=this.value,i=this.isDisabled;return Object(m["isEqual"])(n,t)&&(n=t),e("el-radio",{attrs:{value:t,label:n,disabled:i},on:{change:this.handleCheckChange},nativeOn:{click:g}},[e("span")])},renderCheckIcon:function(e){return e("i",{class:"el-icon-check el-cascader-node__prefix"})},renderLoadingIcon:function(e){return e("i",{class:"el-icon-loading el-cascader-node__postfix"})},renderExpandIcon:function(e){return e("i",{class:"el-icon-arrow-right el-cascader-node__postfix"})},renderContent:function(e){var t=this.panel,n=this.node,i=t.renderLabelFn,r=i?i({node:n,data:n.data}):null;return e("span",{class:"el-cascader-node__label"},[r||n.label])}},render:function(e){var t=this,n=this.inActivePath,i=this.inCheckedPath,r=this.isChecked,o=this.isLeaf,a=this.isDisabled,s=this.config,c=this.nodeId,u=s.expandTrigger,d=s.checkStrictly,h=s.multiple,f=!d&&a,p={on:{}};return"click"===u?p.on.click=this.handleExpand:(p.on.mouseenter=function(e){t.handleExpand(),t.$emit("expand",e)},p.on.focus=function(e){t.handleExpand(),t.$emit("expand",e)}),!o||a||d||h||(p.on.click=this.handleCheckChange),e("li",l()([{attrs:{role:"menuitem",id:c,"aria-expanded":n,tabindex:f?null:-1},class:{"el-cascader-node":!0,"is-selectable":d,"in-active-path":n,"in-checked-path":i,"is-active":r,"is-disabled":f}},p]),[this.renderPrefix(e),this.renderContent(e),this.renderPostfix(e)])}},b=v,y=n(0),w=Object(y["a"])(b,o,a,!1,null,null,null);w.options.__file="packages/cascader-panel/src/cascader-node.vue";var x,_,k=w.exports,C=n(6),S=n.n(C),O={name:"ElCascaderMenu",mixins:[S.a],inject:["panel"],components:{ElScrollbar:u.a,CascaderNode:k},props:{nodes:{type:Array,required:!0},index:Number},data:function(){return{activeNode:null,hoverTimer:null,id:Object(m["generateId"])()}},computed:{isEmpty:function(){return!this.nodes.length},menuId:function(){return"cascader-menu-"+this.id+"-"+this.index}},methods:{handleExpand:function(e){this.activeNode=e.target},handleMouseMove:function(e){var t=this.activeNode,n=this.hoverTimer,i=this.$refs.hoverZone;if(t&&i)if(t.contains(e.target)){clearTimeout(n);var r=this.$el.getBoundingClientRect(),o=r.left,a=e.clientX-o,s=this.$el,l=s.offsetWidth,c=s.offsetHeight,u=t.offsetTop,d=u+t.offsetHeight;i.innerHTML='\n          <path style="pointer-events: auto;" fill="transparent" d="M'+a+" "+u+" L"+l+" 0 V"+u+' Z" />\n          <path style="pointer-events: auto;" fill="transparent" d="M'+a+" "+d+" L"+l+" "+c+" V"+d+' Z" />\n        '}else n||(this.hoverTimer=setTimeout(this.clearHoverZone,this.panel.config.hoverThreshold))},clearHoverZone:function(){var e=this.$refs.hoverZone;e&&(e.innerHTML="")},renderEmptyText:function(e){return e("div",{class:"el-cascader-menu__empty-text"},[this.t("el.cascader.noData")])},renderNodeList:function(e){var t=this.menuId,n=this.panel.isHoverMenu,i={on:{}};n&&(i.on.expand=this.handleExpand);var r=this.nodes.map((function(n,r){var o=n.hasChildren;return e("cascader-node",l()([{key:n.uid,attrs:{node:n,"node-id":t+"-"+r,"aria-haspopup":o,"aria-owns":o?t:null}},i]))}));return[].concat(r,[n?e("svg",{ref:"hoverZone",class:"el-cascader-menu__hover-zone"}):null])}},render:function(e){var t=this.isEmpty,n=this.menuId,i={nativeOn:{}};return this.panel.isHoverMenu&&(i.nativeOn.mousemove=this.handleMouseMove),e("el-scrollbar",l()([{attrs:{tag:"ul",role:"menu",id:n,"wrap-class":"el-cascader-menu__wrap","view-class":{"el-cascader-menu__list":!0,"is-empty":t}},class:"el-cascader-menu"},i]),[t?this.renderEmptyText(e):this.renderNodeList(e)])}},T=O,E=Object(y["a"])(T,x,_,!1,null,null,null);E.options.__file="packages/cascader-panel/src/cascader-menu.vue";var D=E.exports,M=n(21),A=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();function N(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var I=0,L=function(){function e(t,n,i){N(this,e),this.data=t,this.config=n,this.parent=i||null,this.level=this.parent?this.parent.level+1:1,this.uid=I++,this.initState(),this.initChildren()}return e.prototype.initState=function(){var e=this.config,t=e.value,n=e.label;this.value=this.data[t],this.label=this.data[n],this.pathNodes=this.calculatePathNodes(),this.path=this.pathNodes.map((function(e){return e.value})),this.pathLabels=this.pathNodes.map((function(e){return e.label})),this.loading=!1,this.loaded=!1},e.prototype.initChildren=function(){var t=this,n=this.config,i=n.children,r=this.data[i];this.hasChildren=Array.isArray(r),this.children=(r||[]).map((function(i){return new e(i,n,t)}))},e.prototype.calculatePathNodes=function(){var e=[this],t=this.parent;while(t)e.unshift(t),t=t.parent;return e},e.prototype.getPath=function(){return this.path},e.prototype.getValue=function(){return this.value},e.prototype.getValueByOption=function(){return this.config.emitPath?this.getPath():this.getValue()},e.prototype.getText=function(e,t){return e?this.pathLabels.join(t):this.label},e.prototype.isSameNode=function(e){var t=this.getValueByOption();return this.config.multiple&&Array.isArray(e)?e.some((function(e){return Object(m["isEqual"])(e,t)})):Object(m["isEqual"])(e,t)},e.prototype.broadcast=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];var r="onParent"+Object(m["capitalize"])(e);this.children.forEach((function(t){t&&(t.broadcast.apply(t,[e].concat(n)),t[r]&&t[r].apply(t,n))}))},e.prototype.emit=function(e){var t=this.parent,n="onChild"+Object(m["capitalize"])(e);if(t){for(var i=arguments.length,r=Array(i>1?i-1:0),o=1;o<i;o++)r[o-1]=arguments[o];t[n]&&t[n].apply(t,r),t.emit.apply(t,[e].concat(r))}},e.prototype.onParentCheck=function(e){this.isDisabled||this.setCheckState(e)},e.prototype.onChildCheck=function(){var e=this.children,t=e.filter((function(e){return!e.isDisabled})),n=!!t.length&&t.every((function(e){return e.checked}));this.setCheckState(n)},e.prototype.setCheckState=function(e){var t=this.children.length,n=this.children.reduce((function(e,t){var n=t.checked?1:t.indeterminate?.5:0;return e+n}),0);this.checked=e,this.indeterminate=n!==t&&n>0},e.prototype.syncCheckState=function(e){var t=this.getValueByOption(),n=this.isSameNode(e,t);this.doCheck(n)},e.prototype.doCheck=function(e){this.checked!==e&&(this.config.checkStrictly?this.checked=e:(this.broadcast("check",e),this.setCheckState(e),this.emit("check")))},A(e,[{key:"isDisabled",get:function(){var e=this.data,t=this.parent,n=this.config,i=n.disabled,r=n.checkStrictly;return e[i]||!r&&t&&t.isDisabled}},{key:"isLeaf",get:function(){var e=this.data,t=this.loaded,n=this.hasChildren,i=this.children,r=this.config,o=r.lazy,a=r.leaf;if(o){var s=Object(M["isDef"])(e[a])?e[a]:!!t&&!i.length;return this.hasChildren=!s,s}return!n}}]),e}(),P=L;function $(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var F=function e(t,n){return t.reduce((function(t,i){return i.isLeaf?t.push(i):(!n&&t.push(i),t=t.concat(e(i.children,n))),t}),[])},j=function(){function e(t,n){$(this,e),this.config=n,this.initNodes(t)}return e.prototype.initNodes=function(e){var t=this;e=Object(m["coerceTruthyValueToArray"])(e),this.nodes=e.map((function(e){return new P(e,t.config)})),this.flattedNodes=this.getFlattedNodes(!1,!1),this.leafNodes=this.getFlattedNodes(!0,!1)},e.prototype.appendNode=function(e,t){var n=new P(e,this.config,t),i=t?t.children:this.nodes;i.push(n)},e.prototype.appendNodes=function(e,t){var n=this;e=Object(m["coerceTruthyValueToArray"])(e),e.forEach((function(e){return n.appendNode(e,t)}))},e.prototype.getNodes=function(){return this.nodes},e.prototype.getFlattedNodes=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=e?this.leafNodes:this.flattedNodes;return t?n:F(this.nodes,e)},e.prototype.getNodeByValue=function(e){if(e){var t=this.getFlattedNodes(!1,!this.config.lazy).filter((function(t){return Object(m["valueEquals"])(t.path,e)||t.value===e}));return t&&t.length?t[0]:null}return null},e}(),z=j,B=n(9),R=n.n(B),V=n(32),H=n.n(V),W=n(31),q=n.n(W),U=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},K=H.a.keys,G={expandTrigger:"click",multiple:!1,checkStrictly:!1,emitPath:!0,lazy:!1,lazyLoad:m["noop"],value:"value",label:"label",children:"children",leaf:"leaf",disabled:"disabled",hoverThreshold:500},Y=function(e){return!e.getAttribute("aria-owns")},X=function(e,t){var n=e.parentNode;if(n){var i=n.querySelectorAll('.el-cascader-node[tabindex="-1"]'),r=Array.prototype.indexOf.call(i,e);return i[r+t]||null}return null},Z=function(e,t){if(e){var n=e.id.split("-");return Number(n[n.length-2])}},Q=function(e){e&&(e.focus(),!Y(e)&&e.click())},J=function(e){if(e){var t=e.querySelector("input");t?t.click():Y(e)&&e.click()}},ee={name:"ElCascaderPanel",components:{CascaderMenu:D},props:{value:{},options:Array,props:Object,border:{type:Boolean,default:!0},renderLabel:Function},provide:function(){return{panel:this}},data:function(){return{checkedValue:null,checkedNodePaths:[],store:[],menus:[],activePath:[],loadCount:0}},computed:{config:function(){return R()(U({},G),this.props||{})},multiple:function(){return this.config.multiple},checkStrictly:function(){return this.config.checkStrictly},leafOnly:function(){return!this.checkStrictly},isHoverMenu:function(){return"hover"===this.config.expandTrigger},renderLabelFn:function(){return this.renderLabel||this.$scopedSlots.default}},watch:{options:{handler:function(){this.initStore()},immediate:!0,deep:!0},value:function(){this.syncCheckedValue(),this.checkStrictly&&this.calculateCheckedNodePaths()},checkedValue:function(e){Object(m["isEqual"])(e,this.value)||(this.checkStrictly&&this.calculateCheckedNodePaths(),this.$emit("input",e),this.$emit("change",e))}},mounted:function(){Object(m["isEmpty"])(this.value)||this.syncCheckedValue()},methods:{initStore:function(){var e=this.config,t=this.options;e.lazy&&Object(m["isEmpty"])(t)?this.lazyLoad():(this.store=new z(t,e),this.menus=[this.store.getNodes()],this.syncMenuState())},syncCheckedValue:function(){var e=this.value,t=this.checkedValue;Object(m["isEqual"])(e,t)||(this.checkedValue=e,this.syncMenuState())},syncMenuState:function(){var e=this.multiple,t=this.checkStrictly;this.syncActivePath(),e&&this.syncMultiCheckState(),t&&this.calculateCheckedNodePaths(),this.$nextTick(this.scrollIntoView)},syncMultiCheckState:function(){var e=this,t=this.getFlattedNodes(this.leafOnly);t.forEach((function(t){t.syncCheckState(e.checkedValue)}))},syncActivePath:function(){var e=this,t=this.store,n=this.multiple,i=this.activePath,r=this.checkedValue;if(Object(m["isEmpty"])(i))if(Object(m["isEmpty"])(r))this.activePath=[],this.menus=[t.getNodes()];else{var o=n?r[0]:r,a=this.getNodeByValue(o)||{},s=(a.pathNodes||[]).slice(0,-1);this.expandNodes(s)}else{var l=i.map((function(t){return e.getNodeByValue(t.getValue())}));this.expandNodes(l)}},expandNodes:function(e){var t=this;e.forEach((function(e){return t.handleExpand(e,!0)}))},calculateCheckedNodePaths:function(){var e=this,t=this.checkedValue,n=this.multiple,i=n?Object(m["coerceTruthyValueToArray"])(t):[t];this.checkedNodePaths=i.map((function(t){var n=e.getNodeByValue(t);return n?n.pathNodes:[]}))},handleKeyDown:function(e){var t=e.target,n=e.keyCode;switch(n){case K.up:var i=X(t,-1);Q(i);break;case K.down:var r=X(t,1);Q(r);break;case K.left:var o=this.$refs.menu[Z(t)-1];if(o){var a=o.$el.querySelector('.el-cascader-node[aria-expanded="true"]');Q(a)}break;case K.right:var s=this.$refs.menu[Z(t)+1];if(s){var l=s.$el.querySelector('.el-cascader-node[tabindex="-1"]');Q(l)}break;case K.enter:J(t);break;case K.esc:case K.tab:this.$emit("close");break;default:return}},handleExpand:function(e,t){var n=this.activePath,i=e.level,r=n.slice(0,i-1),o=this.menus.slice(0,i);if(e.isLeaf||(r.push(e),o.push(e.children)),this.activePath=r,this.menus=o,!t){var a=r.map((function(e){return e.getValue()})),s=n.map((function(e){return e.getValue()}));Object(m["valueEquals"])(a,s)||(this.$emit("active-item-change",a),this.$emit("expand-change",a))}},handleCheckChange:function(e){this.checkedValue=e},lazyLoad:function(e,t){var n=this,i=this.config;e||(e=e||{root:!0,level:0},this.store=new z([],i),this.menus=[this.store.getNodes()]),e.loading=!0;var r=function(i){var r=e.root?null:e;if(i&&i.length&&n.store.appendNodes(i,r),e.loading=!1,e.loaded=!0,Array.isArray(n.checkedValue)){var o=n.checkedValue[n.loadCount++],a=n.config.value,s=n.config.leaf;if(Array.isArray(i)&&i.filter((function(e){return e[a]===o})).length>0){var l=n.store.getNodeByValue(o);l.data[s]||n.lazyLoad(l,(function(){n.handleExpand(l)})),n.loadCount===n.checkedValue.length&&n.$parent.computePresentText()}}t&&t(i)};i.lazyLoad(e,r)},calculateMultiCheckedValue:function(){this.checkedValue=this.getCheckedNodes(this.leafOnly).map((function(e){return e.getValueByOption()}))},scrollIntoView:function(){if(!this.$isServer){var e=this.$refs.menu||[];e.forEach((function(e){var t=e.$el;if(t){var n=t.querySelector(".el-scrollbar__wrap"),i=t.querySelector(".el-cascader-node.is-active")||t.querySelector(".el-cascader-node.in-active-path");q()(n,i)}}))}},getNodeByValue:function(e){return this.store.getNodeByValue(e)},getFlattedNodes:function(e){var t=!this.config.lazy;return this.store.getFlattedNodes(e,t)},getCheckedNodes:function(e){var t=this.checkedValue,n=this.multiple;if(n){var i=this.getFlattedNodes(e);return i.filter((function(e){return e.checked}))}return Object(m["isEmpty"])(t)?[]:[this.getNodeByValue(t)]},clearCheckedNodes:function(){var e=this.config,t=this.leafOnly,n=e.multiple,i=e.emitPath;n?(this.getCheckedNodes(t).filter((function(e){return!e.isDisabled})).forEach((function(e){return e.doCheck(!1)})),this.calculateMultiCheckedValue()):this.checkedValue=i?[]:null}}},te=ee,ne=Object(y["a"])(te,i,r,!1,null,null,null);ne.options.__file="packages/cascader-panel/src/cascader-panel.vue";var ie=ne.exports;ie.install=function(e){e.component(ie.name,ie)},t["default"]=ie},6:function(e,t){e.exports=n("6b7c")},9:function(e,t){e.exports=n("7f4d")}})},4840:function(e,t,n){var i=n("825a"),r=n("1c0b"),o=n("b622"),a=o("species");e.exports=function(e,t){var n,o=i(e).constructor;return void 0===o||void 0==(n=i(o)[a])?t:r(n)}},4897:function(e,t,n){"use strict";n("3410"),n("ac1f"),n("1276"),t.__esModule=!0,t.i18n=t.use=t.t=void 0;var i=n("f0d9"),r=d(i),o=n("8bbf"),a=d(o),s=n("3c4e"),l=d(s),c=n("9d7e"),u=d(c);function d(e){return e&&e.__esModule?e:{default:e}}var h=(0,u.default)(a.default),f=r.default,p=!1,m=function(){var e=Object.getPrototypeOf(this||a.default).$t;if("function"===typeof e&&a.default.locale)return p||(p=!0,a.default.locale(a.default.config.lang,(0,l.default)(f,a.default.locale(a.default.config.lang)||{},{clone:!0}))),e.apply(this,arguments)},g=t.t=function(e,t){var n=m.apply(this,arguments);if(null!==n&&void 0!==n)return n;for(var i=e.split("."),r=f,o=0,a=i.length;o<a;o++){var s=i[o];if(n=r[s],o===a-1)return h(n,t);if(!n)return"";r=n}return""},v=t.use=function(e){f=e||f},b=t.i18n=function(e){m=e||m};t.default={use:v,t:g,i18n:b}},4930:function(e,t,n){var i=n("d039");e.exports=!!Object.getOwnPropertySymbols&&!i((function(){return!String(Symbol())}))},"498a":function(e,t,n){"use strict";var i=n("23e7"),r=n("58a8").trim,o=n("c8d2");i({target:"String",proto:!0,forced:o("trim")},{trim:function(){return r(this)}})},"4a35":function(e,t,n){},"4a7b":function(e,t,n){"use strict";var i=n("c532");e.exports=function(e,t){t=t||{};var n={},r=["url","method","data"],o=["headers","auth","proxy","params"],a=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],s=["validateStatus"];function l(e,t){return i.isPlainObject(e)&&i.isPlainObject(t)?i.merge(e,t):i.isPlainObject(t)?i.merge({},t):i.isArray(t)?t.slice():t}function c(r){i.isUndefined(t[r])?i.isUndefined(e[r])||(n[r]=l(void 0,e[r])):n[r]=l(e[r],t[r])}i.forEach(r,(function(e){i.isUndefined(t[e])||(n[e]=l(void 0,t[e]))})),i.forEach(o,c),i.forEach(a,(function(r){i.isUndefined(t[r])?i.isUndefined(e[r])||(n[r]=l(void 0,e[r])):n[r]=l(void 0,t[r])})),i.forEach(s,(function(i){i in t?n[i]=l(e[i],t[i]):i in e&&(n[i]=l(void 0,e[i]))}));var u=r.concat(o).concat(a).concat(s),d=Object.keys(e).concat(Object.keys(t)).filter((function(e){return-1===u.indexOf(e)}));return i.forEach(d,c),n}},"4b26":function(e,t,n){"use strict";n("4160"),n("a434"),n("ac1f"),n("1276"),n("498a"),n("159b"),t.__esModule=!0;var i=n("8bbf"),r=a(i),o=n("5924");function a(e){return e&&e.__esModule?e:{default:e}}var s=!1,l=!1,c=void 0,u=function(){if(!r.default.prototype.$isServer){var e=h.modalDom;return e?s=!0:(s=!1,e=document.createElement("div"),h.modalDom=e,e.addEventListener("touchmove",(function(e){e.preventDefault(),e.stopPropagation()})),e.addEventListener("click",(function(){h.doOnModalClick&&h.doOnModalClick()}))),e}},d={},h={modalFade:!0,getInstance:function(e){return d[e]},register:function(e,t){e&&t&&(d[e]=t)},deregister:function(e){e&&(d[e]=null,delete d[e])},nextZIndex:function(){return h.zIndex++},modalStack:[],doOnModalClick:function(){var e=h.modalStack[h.modalStack.length-1];if(e){var t=h.getInstance(e.id);t&&t.closeOnClickModal&&t.close()}},openModal:function(e,t,n,i,a){if(!r.default.prototype.$isServer&&e&&void 0!==t){this.modalFade=a;for(var l=this.modalStack,c=0,d=l.length;c<d;c++){var h=l[c];if(h.id===e)return}var f=u();if((0,o.addClass)(f,"v-modal"),this.modalFade&&!s&&(0,o.addClass)(f,"v-modal-enter"),i){var p=i.trim().split(/\s+/);p.forEach((function(e){return(0,o.addClass)(f,e)}))}setTimeout((function(){(0,o.removeClass)(f,"v-modal-enter")}),200),n&&n.parentNode&&11!==n.parentNode.nodeType?n.parentNode.appendChild(f):document.body.appendChild(f),t&&(f.style.zIndex=t),f.tabIndex=0,f.style.display="",this.modalStack.push({id:e,zIndex:t,modalClass:i})}},closeModal:function(e){var t=this.modalStack,n=u();if(t.length>0){var i=t[t.length-1];if(i.id===e){if(i.modalClass){var r=i.modalClass.trim().split(/\s+/);r.forEach((function(e){return(0,o.removeClass)(n,e)}))}t.pop(),t.length>0&&(n.style.zIndex=t[t.length-1].zIndex)}else for(var a=t.length-1;a>=0;a--)if(t[a].id===e){t.splice(a,1);break}}0===t.length&&(this.modalFade&&(0,o.addClass)(n,"v-modal-leave"),setTimeout((function(){0===t.length&&(n.parentNode&&n.parentNode.removeChild(n),n.style.display="none",h.modalDom=void 0),(0,o.removeClass)(n,"v-modal-leave")}),200))}};Object.defineProperty(h,"zIndex",{configurable:!0,get:function(){return l||(c=c||(r.default.prototype.$ELEMENT||{}).zIndex||2e3,l=!0),c},set:function(e){c=e}});var f=function(){if(!r.default.prototype.$isServer&&h.modalStack.length>0){var e=h.modalStack[h.modalStack.length-1];if(!e)return;var t=h.getInstance(e.id);return t}};r.default.prototype.$isServer||window.addEventListener("keydown",(function(e){if(27===e.keyCode){var t=f();t&&t.closeOnPressEscape&&(t.handleClose?t.handleClose():t.handleAction?t.handleAction("cancel"):t.close())}})),t.default=h},"4b8b":function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},"4ba6":function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";function t(e,t,n,i,r,o){this.indented=e,this.column=t,this.type=n,this.info=i,this.align=r,this.prev=o}function n(e,n,i,r){var o=e.indented;return e.context&&"statement"==e.context.type&&"statement"!=i&&(o=e.context.indented),e.context=new t(o,n,i,r,null,e.context)}function i(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.indented=e.context.indented),e.context=e.context.prev}function r(e,t,n){return"variable"==t.prevToken||"type"==t.prevToken||!!/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(e.string.slice(0,n))||!(!t.typeAtEndOfLine||e.column()!=e.indentation())||void 0}function o(e){for(;;){if(!e||"top"==e.type)return!0;if("}"==e.type&&"namespace"!=e.prev.info)return!1;e=e.prev}}function a(e){for(var t={},n=e.split(" "),i=0;i<n.length;++i)t[n[i]]=!0;return t}function s(e,t){return"function"===typeof e?e(t):e.propertyIsEnumerable(t)}e.defineMode("clike",(function(a,l){var c,u,d=a.indentUnit,h=l.statementIndentUnit||d,f=l.dontAlignCalls,p=l.keywords||{},m=l.types||{},g=l.builtin||{},v=l.blockKeywords||{},b=l.defKeywords||{},y=l.atoms||{},w=l.hooks||{},x=l.multiLineStrings,_=!1!==l.indentStatements,k=!1!==l.indentSwitch,C=l.namespaceSeparator,S=l.isPunctuationChar||/[\[\]{}\(\),;\:\.]/,O=l.numberStart||/[\d\.]/,T=l.number||/^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i,E=l.isOperatorChar||/[+\-*&%=<>!?|\/]/,D=l.isIdentifierChar||/[\w\$_\xa1-\uffff]/,M=l.isReservedIdentifier||!1;function A(e,t){var n=e.next();if(w[n]){var i=w[n](e,t);if(!1!==i)return i}if('"'==n||"'"==n)return t.tokenize=N(n),t.tokenize(e,t);if(O.test(n)){if(e.backUp(1),e.match(T))return"number";e.next()}if(S.test(n))return c=n,null;if("/"==n){if(e.eat("*"))return t.tokenize=I,I(e,t);if(e.eat("/"))return e.skipToEnd(),"comment"}if(E.test(n)){while(!e.match(/^\/[\/*]/,!1)&&e.eat(E));return"operator"}if(e.eatWhile(D),C)while(e.match(C))e.eatWhile(D);var r=e.current();return s(p,r)?(s(v,r)&&(c="newstatement"),s(b,r)&&(u=!0),"keyword"):s(m,r)?"type":s(g,r)||M&&M(r)?(s(v,r)&&(c="newstatement"),"builtin"):s(y,r)?"atom":"variable"}function N(e){return function(t,n){var i,r=!1,o=!1;while(null!=(i=t.next())){if(i==e&&!r){o=!0;break}r=!r&&"\\"==i}return(o||!r&&!x)&&(n.tokenize=null),"string"}}function I(e,t){var n,i=!1;while(n=e.next()){if("/"==n&&i){t.tokenize=null;break}i="*"==n}return"comment"}function L(e,t){l.typeFirstDefinitions&&e.eol()&&o(t.context)&&(t.typeAtEndOfLine=r(e,t,e.pos))}return{startState:function(e){return{tokenize:null,context:new t((e||0)-d,0,"top",null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(e,t){var a=t.context;if(e.sol()&&(null==a.align&&(a.align=!1),t.indented=e.indentation(),t.startOfLine=!0),e.eatSpace())return L(e,t),null;c=u=null;var s=(t.tokenize||A)(e,t);if("comment"==s||"meta"==s)return s;if(null==a.align&&(a.align=!0),";"==c||":"==c||","==c&&e.match(/^\s*(?:\/\/.*)?$/,!1))while("statement"==t.context.type)i(t);else if("{"==c)n(t,e.column(),"}");else if("["==c)n(t,e.column(),"]");else if("("==c)n(t,e.column(),")");else if("}"==c){while("statement"==a.type)a=i(t);"}"==a.type&&(a=i(t));while("statement"==a.type)a=i(t)}else c==a.type?i(t):_&&(("}"==a.type||"top"==a.type)&&";"!=c||"statement"==a.type&&"newstatement"==c)&&n(t,e.column(),"statement",e.current());if("variable"==s&&("def"==t.prevToken||l.typeFirstDefinitions&&r(e,t,e.start)&&o(t.context)&&e.match(/^\s*\(/,!1))&&(s="def"),w.token){var d=w.token(e,t,s);void 0!==d&&(s=d)}return"def"==s&&!1===l.styleDefs&&(s="variable"),t.startOfLine=!1,t.prevToken=u?"def":s||c,L(e,t),s},indent:function(t,n){if(t.tokenize!=A&&null!=t.tokenize||t.typeAtEndOfLine)return e.Pass;var i=t.context,r=n&&n.charAt(0),o=r==i.type;if("statement"==i.type&&"}"==r&&(i=i.prev),l.dontIndentStatements)while("statement"==i.type&&l.dontIndentStatements.test(i.info))i=i.prev;if(w.indent){var a=w.indent(t,i,n,d);if("number"==typeof a)return a}var s=i.prev&&"switch"==i.prev.info;if(l.allmanIndentation&&/[{(]/.test(r)){while("top"!=i.type&&"}"!=i.type)i=i.prev;return i.indented}return"statement"==i.type?i.indented+("{"==r?0:h):!i.align||f&&")"==i.type?")"!=i.type||o?i.indented+(o?0:d)+(o||!s||/^(?:case|default)\b/.test(n)?0:d):i.indented+h:i.column+(o?0:1)},electricInput:k?/^\s*(?:case .*?:|default:|\{\}?|\})$/:/^\s*[{}]$/,blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"brace"}}));var l="auto if break case register continue return default do sizeof static else struct switch extern typedef union for goto while enum const volatile inline restrict asm fortran",c="alignas alignof and and_eq audit axiom bitand bitor catch class compl concept constexpr const_cast decltype delete dynamic_cast explicit export final friend import module mutable namespace new noexcept not not_eq operator or or_eq override private protected public reinterpret_cast requires static_assert static_cast template this thread_local throw try typeid typename using virtual xor xor_eq",u="bycopy byref in inout oneway out self super atomic nonatomic retain copy readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd @interface @implementation @end @protocol @encode @property @synthesize @dynamic @class @public @package @private @protected @required @optional @try @catch @finally @import @selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available",d="FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION  NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT",h=a("int long char short double float unsigned signed void bool"),f=a("SEL instancetype id Class Protocol BOOL");function p(e){return s(h,e)||/.+_t$/.test(e)}function m(e){return p(e)||s(f,e)}var g="case do else for if switch while struct enum union",v="struct enum union";function b(e,t){if(!t.startOfLine)return!1;for(var n,i=null;n=e.peek();){if("\\"==n&&e.match(/^.$/)){i=b;break}if("/"==n&&e.match(/^\/[\/\*]/,!1))break;e.next()}return t.tokenize=i,"meta"}function y(e,t){return"type"==t.prevToken&&"type"}function w(e){return!(!e||e.length<2)&&"_"==e[0]&&("_"==e[1]||e[1]!==e[1].toLowerCase())}function x(e){return e.eatWhile(/[\w\.']/),"number"}function _(e,t){if(e.backUp(1),e.match(/(R|u8R|uR|UR|LR)/)){var n=e.match(/"([^\s\\()]{0,16})\(/);return!!n&&(t.cpp11RawStringDelim=n[1],t.tokenize=S,S(e,t))}return e.match(/(u8|u|U|L)/)?!!e.match(/["']/,!1)&&"string":(e.next(),!1)}function k(e){var t=/(\w+)::~?(\w+)$/.exec(e);return t&&t[1]==t[2]}function C(e,t){var n;while(null!=(n=e.next()))if('"'==n&&!e.eat('"')){t.tokenize=null;break}return"string"}function S(e,t){var n=t.cpp11RawStringDelim.replace(/[^\w\s]/g,"\\$&"),i=e.match(new RegExp(".*?\\)"+n+'"'));return i?t.tokenize=null:e.skipToEnd(),"string"}function O(t,n){"string"==typeof t&&(t=[t]);var i=[];function r(e){if(e)for(var t in e)e.hasOwnProperty(t)&&i.push(t)}r(n.keywords),r(n.types),r(n.builtin),r(n.atoms),i.length&&(n.helperType=t[0],e.registerHelper("hintWords",t[0],i));for(var o=0;o<t.length;++o)e.defineMIME(t[o],n)}function T(e,t){var n=!1;while(!e.eol()){if(!n&&e.match('"""')){t.tokenize=null;break}n="\\"==e.next()&&!n}return"string"}function E(e){return function(t,n){var i;while(i=t.next()){if("*"==i&&t.eat("/")){if(1==e){n.tokenize=null;break}return n.tokenize=E(e-1),n.tokenize(t,n)}if("/"==i&&t.eat("*"))return n.tokenize=E(e+1),n.tokenize(t,n)}return"comment"}}function D(e){return function(t,n){var i,r=!1,o=!1;while(!t.eol()){if(!e&&!r&&t.match('"')){o=!0;break}if(e&&t.match('"""')){o=!0;break}i=t.next(),!r&&"$"==i&&t.match("{")&&t.skipTo("}"),r=!r&&"\\"==i&&!e}return!o&&e||(n.tokenize=null),"string"}}O(["text/x-csrc","text/x-c","text/x-chdr"],{name:"clike",keywords:a(l),types:p,blockKeywords:a(g),defKeywords:a(v),typeFirstDefinitions:!0,atoms:a("NULL true false"),isReservedIdentifier:w,hooks:{"#":b,"*":y},modeProps:{fold:["brace","include"]}}),O(["text/x-c++src","text/x-c++hdr"],{name:"clike",keywords:a(l+" "+c),types:p,blockKeywords:a(g+" class try catch"),defKeywords:a(v+" class namespace"),typeFirstDefinitions:!0,atoms:a("true false NULL nullptr"),dontIndentStatements:/^template$/,isIdentifierChar:/[\w\$_~\xa1-\uffff]/,isReservedIdentifier:w,hooks:{"#":b,"*":y,u:_,U:_,L:_,R:_,0:x,1:x,2:x,3:x,4:x,5:x,6:x,7:x,8:x,9:x,token:function(e,t,n){if("variable"==n&&"("==e.peek()&&(";"==t.prevToken||null==t.prevToken||"}"==t.prevToken)&&k(e.current()))return"def"}},namespaceSeparator:"::",modeProps:{fold:["brace","include"]}}),O("text/x-java",{name:"clike",keywords:a("abstract assert break case catch class const continue default do else enum extends final finally for goto if implements import instanceof interface native new package private protected public return static strictfp super switch synchronized this throw throws transient try volatile while @interface"),types:a("byte short int long float double boolean char void Boolean Byte Character Double Float Integer Long Number Object Short String StringBuffer StringBuilder Void"),blockKeywords:a("catch class do else finally for if switch try while"),defKeywords:a("class interface enum @interface"),typeFirstDefinitions:!0,atoms:a("true false null"),number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+\.?\d*|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,hooks:{"@":function(e){return!e.match("interface",!1)&&(e.eatWhile(/[\w\$_]/),"meta")}},modeProps:{fold:["brace","import"]}}),O("text/x-csharp",{name:"clike",keywords:a("abstract as async await base break case catch checked class const continue default delegate do else enum event explicit extern finally fixed for foreach goto if implicit in interface internal is lock namespace new operator out override params private protected public readonly ref return sealed sizeof stackalloc static struct switch this throw try typeof unchecked unsafe using virtual void volatile while add alias ascending descending dynamic from get global group into join let orderby partial remove select set value var yield"),types:a("Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32 UInt64 bool byte char decimal double short int long object sbyte float string ushort uint ulong"),blockKeywords:a("catch class do else finally for foreach if struct switch try while"),defKeywords:a("class interface namespace struct var"),typeFirstDefinitions:!0,atoms:a("true false null"),hooks:{"@":function(e,t){return e.eat('"')?(t.tokenize=C,C(e,t)):(e.eatWhile(/[\w\$_]/),"meta")}}}),O("text/x-scala",{name:"clike",keywords:a("abstract case catch class def do else extends final finally for forSome if implicit import lazy match new null object override package private protected return sealed super this throw trait try type val var while with yield _ assert assume require print println printf readLine readBoolean readByte readShort readChar readInt readLong readFloat readDouble"),types:a("AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void"),multiLineStrings:!0,blockKeywords:a("catch class enum do else finally for forSome if match switch try while"),defKeywords:a("class enum def object package trait type val var"),atoms:a("true false null"),indentStatements:!1,indentSwitch:!1,isOperatorChar:/[+\-*&%=<>!?|\/#:@]/,hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},'"':function(e,t){return!!e.match('""')&&(t.tokenize=T,t.tokenize(e,t))},"'":function(e){return e.eatWhile(/[\w\$_\xa1-\uffff]/),"atom"},"=":function(e,n){var i=n.context;return!("}"!=i.type||!i.align||!e.eat(">"))&&(n.context=new t(i.indented,i.column,i.type,i.info,null,i.prev),"operator")},"/":function(e,t){return!!e.eat("*")&&(t.tokenize=E(1),t.tokenize(e,t))}},modeProps:{closeBrackets:{pairs:'()[]{}""',triples:'"'}}}),O("text/x-kotlin",{name:"clike",keywords:a("package as typealias class interface this super val operator var fun for is in This throw return annotation break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix suspend actual expect setparam"),types:a("Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy LazyThreadSafetyMode LongArray Nothing ShortArray Unit"),intendSwitch:!1,indentStatements:!1,multiLineStrings:!0,number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,blockKeywords:a("catch class do else finally for if where try while enum"),defKeywords:a("class val var object interface fun"),atoms:a("true false null this"),hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},"*":function(e,t){return"."==t.prevToken?"variable":"operator"},'"':function(e,t){return t.tokenize=D(e.match('""')),t.tokenize(e,t)},"/":function(e,t){return!!e.eat("*")&&(t.tokenize=E(1),t.tokenize(e,t))},indent:function(e,t,n,i){var r=n&&n.charAt(0);return"}"!=e.prevToken&&")"!=e.prevToken||""!=n?"operator"==e.prevToken&&"}"!=n&&"}"!=e.context.type||"variable"==e.prevToken&&"."==r||("}"==e.prevToken||")"==e.prevToken)&&"."==r?2*i+t.indented:t.align&&"}"==t.type?t.indented+(e.context.type==(n||"").charAt(0)?0:i):void 0:e.indented}},modeProps:{closeBrackets:{triples:'"'}}}),O(["x-shader/x-vertex","x-shader/x-fragment"],{name:"clike",keywords:a("sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout"),types:a("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4"),blockKeywords:a("for while do if else struct"),builtin:a("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:a("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),indentSwitch:!1,hooks:{"#":b},modeProps:{fold:["brace","include"]}}),O("text/x-nesc",{name:"clike",keywords:a(l+" as atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends"),types:p,blockKeywords:a(g),atoms:a("null true false"),hooks:{"#":b},modeProps:{fold:["brace","include"]}}),O("text/x-objectivec",{name:"clike",keywords:a(l+" "+u),types:m,builtin:a(d),blockKeywords:a(g+" @synthesize @try @catch @finally @autoreleasepool @synchronized"),defKeywords:a(v+" @interface @implementation @protocol @class"),dontIndentStatements:/^@.*$/,typeFirstDefinitions:!0,atoms:a("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:w,hooks:{"#":b,"*":y},modeProps:{fold:["brace","include"]}}),O("text/x-objectivec++",{name:"clike",keywords:a(l+" "+u+" "+c),types:m,builtin:a(d),blockKeywords:a(g+" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch"),defKeywords:a(v+" @interface @implementation @protocol @class class namespace"),dontIndentStatements:/^@.*$|^template$/,typeFirstDefinitions:!0,atoms:a("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:w,hooks:{"#":b,"*":y,u:_,U:_,L:_,R:_,0:x,1:x,2:x,3:x,4:x,5:x,6:x,7:x,8:x,9:x,token:function(e,t,n){if("variable"==n&&"("==e.peek()&&(";"==t.prevToken||null==t.prevToken||"}"==t.prevToken)&&k(e.current()))return"def"}},namespaceSeparator:"::",modeProps:{fold:["brace","include"]}}),O("text/x-squirrel",{name:"clike",keywords:a("base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static"),types:p,blockKeywords:a("case catch class else for foreach if switch try while"),defKeywords:a("function local class"),typeFirstDefinitions:!0,atoms:a("true false null"),hooks:{"#":b},modeProps:{fold:["brace","include"]}});var M=null;function A(e){return function(t,n){var i,r=!1,o=!1;while(!t.eol()){if(!r&&t.match('"')&&("single"==e||t.match('""'))){o=!0;break}if(!r&&t.match("``")){M=A(e),o=!0;break}i=t.next(),r="single"==e&&!r&&"\\"==i}return o&&(n.tokenize=null),"string"}}O("text/x-ceylon",{name:"clike",keywords:a("abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while"),types:function(e){var t=e.charAt(0);return t===t.toUpperCase()&&t!==t.toLowerCase()},blockKeywords:a("case catch class dynamic else finally for function if interface module new object switch try while"),defKeywords:a("class dynamic function interface module object package value"),builtin:a("abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable"),isPunctuationChar:/[\[\]{}\(\),;\:\.`]/,isOperatorChar:/[+\-*&%=<>!?|^~:\/]/,numberStart:/[\d#$]/,number:/^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:!0,typeFirstDefinitions:!0,atoms:a("true false null larger smaller equal empty finished"),indentSwitch:!1,styleDefs:!1,hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},'"':function(e,t){return t.tokenize=A(e.match('""')?"triple":"single"),t.tokenize(e,t)},"`":function(e,t){return!(!M||!e.match("`"))&&(t.tokenize=M,M=null,t.tokenize(e,t))},"'":function(e){return e.eatWhile(/[\w\$_\xa1-\uffff]/),"atom"},token:function(e,t,n){if(("variable"==n||"type"==n)&&"."==t.prevToken)return"variable-2"}},modeProps:{fold:["brace","import"],closeBrackets:{triples:'"'}}})}))},"4c25":function(e,t,n){},"4cb2":function(e,t,n){"use strict";n.r(t),n("99af"),n("4160"),n("c975"),n("e260"),n("d81d"),n("a434"),n("b64b"),n("d3b7"),n("4d63"),n("ac1f"),n("25f0"),n("159b"),n("ddb0");var i=n("41b2"),r=n.n(i),o=n("1098"),a=n.n(o),s=(n("a623"),n("fb6a"),n("a9e3"),n("5319"),/%[sdj%]/g),l=function(){};function c(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var i=1,r=t[0],o=t.length;if("function"===typeof r)return r.apply(null,t.slice(1));if("string"===typeof r){for(var a=String(r).replace(s,(function(e){if("%%"===e)return"%";if(i>=o)return e;switch(e){case"%s":return String(t[i++]);case"%d":return Number(t[i++]);case"%j":try{return JSON.stringify(t[i++])}catch(n){return"[Circular]"}break;default:return e}})),l=t[i];i<o;l=t[++i])a+=" "+l;return a}return r}function u(e){return"string"===e||"url"===e||"hex"===e||"email"===e||"pattern"===e}function d(e,t){return void 0===e||null===e||!("array"!==t||!Array.isArray(e)||e.length)||!(!u(t)||"string"!==typeof e||e)}function h(e,t,n){var i=[],r=0,o=e.length;function a(e){i.push.apply(i,e),r++,r===o&&n(i)}e.forEach((function(e){t(e,a)}))}function f(e,t,n){var i=0,r=e.length;function o(a){if(a&&a.length)n(a);else{var s=i;i+=1,s<r?t(e[s],o):n([])}}o([])}function p(e){var t=[];return Object.keys(e).forEach((function(n){t.push.apply(t,e[n])})),t}function m(e,t,n,i){if(t.first){var r=p(e);return f(r,n,i)}var o=t.firstFields||[];!0===o&&(o=Object.keys(e));var a=Object.keys(e),s=a.length,l=0,c=[],u=function(e){c.push.apply(c,e),l++,l===s&&i(c)};a.forEach((function(t){var i=e[t];-1!==o.indexOf(t)?f(i,n,u):h(i,n,u)}))}function g(e){return function(t){return t&&t.message?(t.field=t.field||e.fullField,t):{message:t,field:t.field||e.fullField}}}function v(e,t){if(t)for(var n in t)if(t.hasOwnProperty(n)){var i=t[n];"object"===("undefined"===typeof i?"undefined":a()(i))&&"object"===a()(e[n])?e[n]=r()({},e[n],i):e[n]=i}return e}function b(e,t,n,i,r,o){!e.required||n.hasOwnProperty(e.field)&&!d(t,o||e.type)||i.push(c(r.messages.required,e.fullField))}var y=b;function w(e,t,n,i,r){(/^\s+$/.test(t)||""===t)&&i.push(c(r.messages.whitespace,e.fullField))}var x=w,_=(n("466d"),{email:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,url:new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$","i"),hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i}),k={integer:function(e){return k.number(e)&&parseInt(e,10)===e},float:function(e){return k.number(e)&&!k.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch(t){return!1}},date:function(e){return"function"===typeof e.getTime&&"function"===typeof e.getMonth&&"function"===typeof e.getYear},number:function(e){return!isNaN(e)&&"number"===typeof e},object:function(e){return"object"===("undefined"===typeof e?"undefined":a()(e))&&!k.array(e)},method:function(e){return"function"===typeof e},email:function(e){return"string"===typeof e&&!!e.match(_.email)&&e.length<255},url:function(e){return"string"===typeof e&&!!e.match(_.url)},hex:function(e){return"string"===typeof e&&!!e.match(_.hex)}};function C(e,t,n,i,r){if(e.required&&void 0===t)y(e,t,n,i,r);else{var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],s=e.type;o.indexOf(s)>-1?k[s](t)||i.push(c(r.messages.types[s],e.fullField,e.type)):s&&("undefined"===typeof t?"undefined":a()(t))!==e.type&&i.push(c(r.messages.types[s],e.fullField,e.type))}}var S=C;function O(e,t,n,i,r){var o="number"===typeof e.len,a="number"===typeof e.min,s="number"===typeof e.max,l=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,u=t,d=null,h="number"===typeof t,f="string"===typeof t,p=Array.isArray(t);if(h?d="number":f?d="string":p&&(d="array"),!d)return!1;p&&(u=t.length),f&&(u=t.replace(l,"_").length),o?u!==e.len&&i.push(c(r.messages[d].len,e.fullField,e.len)):a&&!s&&u<e.min?i.push(c(r.messages[d].min,e.fullField,e.min)):s&&!a&&u>e.max?i.push(c(r.messages[d].max,e.fullField,e.max)):a&&s&&(u<e.min||u>e.max)&&i.push(c(r.messages[d].range,e.fullField,e.min,e.max))}var T=O,E=(n("a15b"),"enum");function D(e,t,n,i,r){e[E]=Array.isArray(e[E])?e[E]:[],-1===e[E].indexOf(t)&&i.push(c(r.messages[E],e.fullField,e[E].join(", ")))}var M=D;function A(e,t,n,i,r){if(e.pattern)if(e.pattern instanceof RegExp)e.pattern.lastIndex=0,e.pattern.test(t)||i.push(c(r.messages.pattern.mismatch,e.fullField,t,e.pattern));else if("string"===typeof e.pattern){var o=new RegExp(e.pattern);o.test(t)||i.push(c(r.messages.pattern.mismatch,e.fullField,t,e.pattern))}}var N=A,I={required:y,whitespace:x,type:S,range:T,enum:M,pattern:N};function L(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t,"string")&&!e.required)return n();I.required(e,t,i,o,r,"string"),d(t,"string")||(I.type(e,t,i,o,r),I.range(e,t,i,o,r),I.pattern(e,t,i,o,r),!0===e.whitespace&&I.whitespace(e,t,i,o,r))}n(o)}var P=L;function $(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&I.type(e,t,i,o,r)}n(o)}var F=$;function j(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&(I.type(e,t,i,o,r),I.range(e,t,i,o,r))}n(o)}var z=j;function B(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&I.type(e,t,i,o,r)}n(o)}var R=B;function V(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),d(t)||I.type(e,t,i,o,r)}n(o)}var H=V;function W(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&(I.type(e,t,i,o,r),I.range(e,t,i,o,r))}n(o)}var q=W;function U(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&(I.type(e,t,i,o,r),I.range(e,t,i,o,r))}n(o)}var K=U;function G(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t,"array")&&!e.required)return n();I.required(e,t,i,o,r,"array"),d(t,"array")||(I.type(e,t,i,o,r),I.range(e,t,i,o,r))}n(o)}var Y=G;function X(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&I.type(e,t,i,o,r)}n(o)}var Z=X,Q="enum";function J(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),t&&I[Q](e,t,i,o,r)}n(o)}var ee=J;function te(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t,"string")&&!e.required)return n();I.required(e,t,i,o,r),d(t,"string")||I.pattern(e,t,i,o,r)}n(o)}var ne=te;function ie(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();if(I.required(e,t,i,o,r),!d(t)){var s=void 0;s="number"===typeof t?new Date(t):t,I.type(e,s,i,o,r),s&&I.range(e,s.getTime(),i,o,r)}}n(o)}var re=ie;function oe(e,t,n,i,r){var o=[],s=Array.isArray(t)?"array":"undefined"===typeof t?"undefined":a()(t);I.required(e,t,i,o,r,s),n(o)}var ae=oe;function se(e,t,n,i,r){var o=e.type,a=[],s=e.required||!e.required&&i.hasOwnProperty(e.field);if(s){if(d(t,o)&&!e.required)return n();I.required(e,t,i,a,r,o),d(t,o)||I.type(e,t,i,a,r)}n(a)}var le=se,ce={string:P,method:F,number:z,boolean:R,regexp:H,integer:q,float:K,array:Y,object:Z,enum:ee,pattern:ne,date:re,url:le,hex:le,email:le,required:ae};function ue(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var de=ue();function he(e){this.rules=null,this._messages=de,this.define(e)}he.prototype={messages:function(e){return e&&(this._messages=v(ue(),e)),this._messages},define:function(e){if(!e)throw new Error("Cannot configure a schema with no rules");if("object"!==("undefined"===typeof e?"undefined":a()(e))||Array.isArray(e))throw new Error("Rules must be an object");this.rules={};var t=void 0,n=void 0;for(t in e)e.hasOwnProperty(t)&&(n=e[t],this.rules[t]=Array.isArray(n)?n:[n])},validate:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments[2],o=e,s=n,u=i;if("function"===typeof s&&(u=s,s={}),this.rules&&0!==Object.keys(this.rules).length){if(s.messages){var d=this.messages();d===de&&(d=ue()),v(d,s.messages),s.messages=d}else s.messages=this.messages();var h=void 0,f=void 0,p={},b=s.keys||Object.keys(this.rules);b.forEach((function(n){h=t.rules[n],f=o[n],h.forEach((function(i){var a=i;"function"===typeof a.transform&&(o===e&&(o=r()({},o)),f=o[n]=a.transform(f)),a="function"===typeof a?{validator:a}:r()({},a),a.validator=t.getValidationMethod(a),a.field=n,a.fullField=a.fullField||n,a.type=t.getType(a),a.validator&&(p[n]=p[n]||[],p[n].push({rule:a,value:f,source:o,field:n}))}))}));var y={};m(p,s,(function(e,t){var n=e.rule,i=("object"===n.type||"array"===n.type)&&("object"===a()(n.fields)||"object"===a()(n.defaultField));function o(e,t){return r()({},t,{fullField:n.fullField+"."+e})}function u(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],u=a;if(Array.isArray(u)||(u=[u]),u.length&&l("async-validator:",u),u.length&&n.message&&(u=[].concat(n.message)),u=u.map(g(n)),s.first&&u.length)return y[n.field]=1,t(u);if(i){if(n.required&&!e.value)return u=n.message?[].concat(n.message).map(g(n)):s.error?[s.error(n,c(s.messages.required,n.field))]:[],t(u);var d={};if(n.defaultField)for(var h in e.value)e.value.hasOwnProperty(h)&&(d[h]=n.defaultField);for(var f in d=r()({},d,e.rule.fields),d)if(d.hasOwnProperty(f)){var p=Array.isArray(d[f])?d[f]:[d[f]];d[f]=p.map(o.bind(null,f))}var m=new he(d);m.messages(s.messages),e.rule.options&&(e.rule.options.messages=s.messages,e.rule.options.error=s.error),m.validate(e.value,e.rule.options||s,(function(e){t(e&&e.length?u.concat(e):e)}))}else t(u)}i=i&&(n.required||!n.required&&e.value),n.field=e.field;var d=n.validator(n,e.value,u,e.source,s);d&&d.then&&d.then((function(){return u()}),(function(e){return u(e)}))}),(function(e){w(e)}))}else u&&u();function w(e){var t=void 0,n=void 0,i=[],r={};function o(e){Array.isArray(e)?i=i.concat.apply(i,e):i.push(e)}for(t=0;t<e.length;t++)o(e[t]);if(i.length)for(t=0;t<i.length;t++)n=i[t].field,r[n]=r[n]||[],r[n].push(i[t]);else i=null,r=null;u(i,r)}},getType:function(e){if(void 0===e.type&&e.pattern instanceof RegExp&&(e.type="pattern"),"function"!==typeof e.validator&&e.type&&!ce.hasOwnProperty(e.type))throw new Error(c("Unknown rule type %s",e.type));return e.type||"string"},getValidationMethod:function(e){if("function"===typeof e.validator)return e.validator;var t=Object.keys(e),n=t.indexOf("message");return-1!==n&&t.splice(n,1),1===t.length&&"required"===t[0]?ce.required:ce[this.getType(e)]||!1}},he.register=function(e,t){if("function"!==typeof t)throw new Error("Cannot register a validator by type, validator is not a function");ce[e]=t},he.messages=de,t["default"]=he},"4d20":function(e,t,n){var i=n("1917"),r=n("10db"),o=n("6ca1"),a=n("3397"),s=n("9c0e"),l=n("faf5"),c=Object.getOwnPropertyDescriptor;t.f=n("0bad")?c:function(e,t){if(e=o(e),t=a(t,!0),l)try{return c(e,t)}catch(n){}if(s(e,t))return r(!i.f.call(e,t),e[t])}},"4d63":function(e,t,n){var i=n("83ab"),r=n("da84"),o=n("94ca"),a=n("7156"),s=n("9bf2").f,l=n("241c").f,c=n("44e7"),u=n("ad6d"),d=n("9f7fd"),h=n("6eeb"),f=n("d039"),p=n("69f3").set,m=n("2626"),g=n("b622"),v=g("match"),b=r.RegExp,y=b.prototype,w=/a/g,x=/a/g,_=new b(w)!==w,k=d.UNSUPPORTED_Y,C=i&&o("RegExp",!_||k||f((function(){return x[v]=!1,b(w)!=w||b(x)==x||"/a/i"!=b(w,"i")})));if(C){var S=function e(t,n){var i,r=this instanceof e,o=c(t),s=void 0===n;if(!r&&o&&t.constructor===e&&s)return t;_?o&&!s&&(t=t.source):t instanceof e&&(s&&(n=u.call(t)),t=t.source),k&&(i=!!n&&n.indexOf("y")>-1,i&&(n=n.replace(/y/g,"")));var l=a(_?new b(t,n):b(t,n),r?this:y,e);return k&&i&&p(l,{sticky:i}),l},O=function(e){e in S||s(S,e,{configurable:!0,get:function(){return b[e]},set:function(t){b[e]=t}})},T=l(b),E=0;while(T.length>E)O(T[E++]);y.constructor=S,S.prototype=y,h(r,"RegExp",S)}m("RegExp")},"4d64":function(e,t,n){var i=n("fc6a"),r=n("50c4"),o=n("23cb"),a=function(e){return function(t,n,a){var s,l=i(t),c=r(l.length),u=o(a,c);if(e&&n!=n){while(c>u)if(s=l[u++],s!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},"4d88":function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},"4de4":function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").filter,o=n("1dde"),a=n("ae40"),s=o("filter"),l=a("filter");i({target:"Array",proto:!0,forced:!s||!l},{filter:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},"4df4":function(e,t,n){"use strict";var i=n("0366"),r=n("7b0b"),o=n("9bdd"),a=n("e95a"),s=n("50c4"),l=n("8418"),c=n("35a1");e.exports=function(e){var t,n,u,d,h,f,p=r(e),m="function"==typeof this?this:Array,g=arguments.length,v=g>1?arguments[1]:void 0,b=void 0!==v,y=c(p),w=0;if(b&&(v=i(v,g>2?arguments[2]:void 0,2)),void 0==y||m==Array&&a(y))for(t=s(p.length),n=new m(t);t>w;w++)f=b?v(p[w],w):p[w],l(n,w,f);else for(d=y.call(p),h=d.next,n=new m;!(u=h.call(d)).done;w++)f=b?o(d,v,[u.value,w],!0):u.value,l(n,w,f);return n.length=w,n}},"4e4b":function(e,t,n){n("a4d3"),n("e01a"),n("d28b"),n("944a"),n("99af"),n("a623"),n("4de4"),n("4160"),n("c975"),n("e260"),n("d81d"),n("fb6a"),n("45fc"),n("a434"),n("b0c0"),n("0c47"),n("23dc"),n("a9e3"),n("d3b7"),n("4d63"),n("ac1f"),n("25f0"),n("3ca3"),n("159b"),n("ddb0");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=61)}([function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},,,function(e,t){e.exports=n("8122")},function(e,t){e.exports=n("d010")},function(e,t){e.exports=n("e974")},function(e,t){e.exports=n("6b7c")},,,,function(e,t){e.exports=n("f3ad")},,function(e,t){e.exports=n("417f")},,function(e,t){e.exports=n("14e9")},,function(e,t){e.exports=n("4010")},function(e,t){e.exports=n("0e15")},,function(e,t){e.exports=n("4897")},,function(e,t){e.exports=n("d397")},function(e,t){e.exports=n("12f2")},,,,,,,,,function(e,t){e.exports=n("2a5e")},,,function(e,t,n){"use strict";var r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-dropdown__item",class:{selected:e.itemSelected,"is-disabled":e.disabled||e.groupDisabled||e.limitReached,hover:e.hover},on:{mouseenter:e.hoverItem,click:function(t){return t.stopPropagation(),e.selectOptionClick(t)}}},[e._t("default",[n("span",[e._v(e._s(e.currentLabel))])])],2)},o=[];r._withStripped=!0;var a=n(4),s=n.n(a),l=n(3),c="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)},u={mixins:[s.a],name:"ElOption",componentName:"ElOption",inject:["select"],props:{value:{required:!0},label:[String,Number],created:Boolean,disabled:{type:Boolean,default:!1}},data:function(){return{index:-1,groupDisabled:!1,visible:!0,hitState:!1,hover:!1}},computed:{isObject:function(){return"[object object]"===Object.prototype.toString.call(this.value).toLowerCase()},currentLabel:function(){return this.label||(this.isObject?"":this.value)},currentValue:function(){return this.value||this.label||""},itemSelected:function(){return this.select.multiple?this.contains(this.select.value,this.value):this.isEqual(this.value,this.select.value)},limitReached:function(){return!!this.select.multiple&&!this.itemSelected&&(this.select.value||[]).length>=this.select.multipleLimit&&this.select.multipleLimit>0}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var n=this.select,i=n.remote,r=n.valueKey;if(!this.created&&!i){if(r&&"object"===("undefined"===typeof e?"undefined":c(e))&&"object"===("undefined"===typeof t?"undefined":c(t))&&e[r]===t[r])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var n=this.select.valueKey;return Object(l["getValueByPath"])(e,n)===Object(l["getValueByPath"])(t,n)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var n=this.select.valueKey;return e&&e.some((function(e){return Object(l["getValueByPath"])(e,n)===Object(l["getValueByPath"])(t,n)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(l["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select,t=e.selected,n=e.multiple,i=n?t:[t],r=this.select.cachedOptions.indexOf(this),o=i.indexOf(this);r>-1&&o<0&&this.select.cachedOptions.splice(r,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},d=u,h=n(0),f=Object(h["a"])(d,r,o,!1,null,null,null);f.options.__file="packages/select/src/option.vue",t["a"]=f.exports},,,,function(e,t){e.exports=n("8bbc")},,,,,,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],staticClass:"el-select",class:[e.selectSize?"el-select--"+e.selectSize:""],on:{click:function(t){return t.stopPropagation(),e.toggleMenu(t)}}},[e.multiple?n("div",{ref:"tags",staticClass:"el-select__tags",style:{"max-width":e.inputWidth-32+"px",width:"100%"}},[e.collapseTags&&e.selected.length?n("span",[n("el-tag",{attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:e.selected[0].hitState,type:"info","disable-transitions":""},on:{close:function(t){e.deleteTag(t,e.selected[0])}}},[n("span",{staticClass:"el-select__tags-text"},[e._v(e._s(e.selected[0].currentLabel))])]),e.selected.length>1?n("el-tag",{attrs:{closable:!1,size:e.collapseTagSize,type:"info","disable-transitions":""}},[n("span",{staticClass:"el-select__tags-text"},[e._v("+ "+e._s(e.selected.length-1))])]):e._e()],1):e._e(),e.collapseTags?e._e():n("transition-group",{on:{"after-leave":e.resetInputHeight}},e._l(e.selected,(function(t){return n("el-tag",{key:e.getValueKey(t),attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:t.hitState,type:"info","disable-transitions":""},on:{close:function(n){e.deleteTag(n,t)}}},[n("span",{staticClass:"el-select__tags-text"},[e._v(e._s(t.currentLabel))])])})),1),e.filterable?n("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],ref:"input",staticClass:"el-select__input",class:[e.selectSize?"is-"+e.selectSize:""],style:{"flex-grow":"1",width:e.inputLength/(e.inputWidth-32)+"%","max-width":e.inputWidth-42+"px"},attrs:{type:"text",disabled:e.selectDisabled,autocomplete:e.autoComplete||e.autocomplete},domProps:{value:e.query},on:{focus:e.handleFocus,blur:function(t){e.softFocus=!1},keyup:e.managePlaceholder,keydown:[e.resetInputState,function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.navigateOptions("prev")},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),e.selectOption(t))},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){return!("button"in t)&&e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?null:e.deletePrevTag(t)},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],compositionstart:e.handleComposition,compositionupdate:e.handleComposition,compositionend:e.handleComposition,input:[function(t){t.target.composing||(e.query=t.target.value)},e.debouncedQueryChange]}}):e._e()],1):e._e(),n("el-input",{ref:"reference",class:{"is-focus":e.visible},attrs:{type:"text",placeholder:e.currentPlaceholder,name:e.name,id:e.id,autocomplete:e.autoComplete||e.autocomplete,size:e.selectSize,disabled:e.selectDisabled,readonly:e.readonly,"validate-event":!1,tabindex:e.multiple&&e.filterable?"-1":null},on:{focus:e.handleFocus,blur:e.handleBlur},nativeOn:{keyup:function(t){return e.debouncedOnInputChange(t)},keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("prev")},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),e.selectOption(t))},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],paste:function(t){return e.debouncedOnInputChange(t)},mouseenter:function(t){e.inputHovering=!0},mouseleave:function(t){e.inputHovering=!1}},model:{value:e.selectedLabel,callback:function(t){e.selectedLabel=t},expression:"selectedLabel"}},[e.$slots.prefix?n("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),n("template",{slot:"suffix"},[n("i",{directives:[{name:"show",rawName:"v-show",value:!e.showClose,expression:"!showClose"}],class:["el-select__caret","el-input__icon","el-icon-"+e.iconClass]}),e.showClose?n("i",{staticClass:"el-select__caret el-input__icon el-icon-circle-close",on:{click:e.handleClearClick}}):e._e()])],2),n("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":e.doDestroy}},[n("el-select-menu",{directives:[{name:"show",rawName:"v-show",value:e.visible&&!1!==e.emptyText,expression:"visible && emptyText !== false"}],ref:"popper",attrs:{"append-to-body":e.popperAppendToBody}},[n("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.options.length>0&&!e.loading,expression:"options.length > 0 && !loading"}],ref:"scrollbar",class:{"is-empty":!e.allowCreate&&e.query&&0===e.filteredOptionsCount},attrs:{tag:"ul","wrap-class":"el-select-dropdown__wrap","view-class":"el-select-dropdown__list"}},[e.showNewOption?n("el-option",{attrs:{value:e.query,created:""}}):e._e(),e._t("default")],2),e.emptyText&&(!e.allowCreate||e.loading||e.allowCreate&&0===e.options.length)?[e.$slots.empty?e._t("empty"):n("p",{staticClass:"el-select-dropdown__empty"},[e._v("\n          "+e._s(e.emptyText)+"\n        ")])]:e._e()],2)],1)],1)},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s=n(22),l=n.n(s),c=n(6),u=n.n(c),d=n(10),h=n.n(d),f=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-select-dropdown el-popper",class:[{"is-multiple":e.$parent.multiple},e.popperClass],style:{minWidth:e.minWidth}},[e._t("default")],2)},p=[];f._withStripped=!0;var m=n(5),g=n.n(m),v={name:"ElSelectDropdown",componentName:"ElSelectDropdown",mixins:[g.a],props:{placement:{default:"bottom-start"},boundariesPadding:{default:0},popperOptions:{default:function(){return{gpuAcceleration:!1}}},visibleArrow:{default:!0},appendToBody:{type:Boolean,default:!0}},data:function(){return{minWidth:""}},computed:{popperClass:function(){return this.$parent.popperClass}},watch:{"$parent.inputWidth":function(){this.minWidth=this.$parent.$el.getBoundingClientRect().width+"px"}},mounted:function(){var e=this;this.referenceElm=this.$parent.$refs.reference.$el,this.$parent.popperElm=this.popperElm=this.$el,this.$on("updatePopper",(function(){e.$parent.visible&&e.updatePopper()})),this.$on("destroyPopper",this.destroyPopper)}},b=v,y=n(0),w=Object(y["a"])(b,f,p,!1,null,null,null);w.options.__file="packages/select/src/select-dropdown.vue";var x=w.exports,_=n(34),k=n(38),C=n.n(k),S=n(14),O=n.n(S),T=n(17),E=n.n(T),D=n(12),M=n.n(D),A=n(16),N=n(19),I=n(31),L=n.n(I),P=n(3),$={data:function(){return{hoverOption:-1}},computed:{optionsAllDisabled:function(){return this.options.filter((function(e){return e.visible})).every((function(e){return e.disabled}))}},watch:{hoverIndex:function(e){var t=this;"number"===typeof e&&e>-1&&(this.hoverOption=this.options[e]||{}),this.options.forEach((function(e){e.hover=t.hoverOption===e}))}},methods:{navigateOptions:function(e){var t=this;if(this.visible){if(0!==this.options.length&&0!==this.filteredOptionsCount&&!this.optionsAllDisabled){"next"===e?(this.hoverIndex++,this.hoverIndex===this.options.length&&(this.hoverIndex=0)):"prev"===e&&(this.hoverIndex--,this.hoverIndex<0&&(this.hoverIndex=this.options.length-1));var n=this.options[this.hoverIndex];!0!==n.disabled&&!0!==n.groupDisabled&&n.visible||this.navigateOptions(e),this.$nextTick((function(){return t.scrollToOption(t.hoverOption)}))}}else this.visible=!0}}},F=n(21),j={mixins:[a.a,u.a,l()("reference"),$],name:"ElSelect",componentName:"ElSelect",inject:{elForm:{default:""},elFormItem:{default:""}},provide:function(){return{select:this}},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},readonly:function(){return!this.filterable||this.multiple||!Object(P["isIE"])()&&!Object(P["isEdge"])()&&!this.visible},showClose:function(){var e=this.multiple?Array.isArray(this.value)&&this.value.length>0:void 0!==this.value&&null!==this.value&&""!==this.value,t=this.clearable&&!this.selectDisabled&&this.inputHovering&&e;return t},iconClass:function(){return this.remote&&this.filterable?"":this.visible?"arrow-up is-reverse":"arrow-up"},debounce:function(){return this.remote?300:0},emptyText:function(){return this.loading?this.loadingText||this.t("el.select.loading"):(!this.remote||""!==this.query||0!==this.options.length)&&(this.filterable&&this.query&&this.options.length>0&&0===this.filteredOptionsCount?this.noMatchText||this.t("el.select.noMatch"):0===this.options.length?this.noDataText||this.t("el.select.noData"):null)},showNewOption:function(){var e=this,t=this.options.filter((function(e){return!e.created})).some((function(t){return t.currentLabel===e.query}));return this.filterable&&this.allowCreate&&""!==this.query&&!t},selectSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},selectDisabled:function(){return this.disabled||(this.elForm||{}).disabled},collapseTagSize:function(){return["small","mini"].indexOf(this.selectSize)>-1?"mini":"small"}},components:{ElInput:h.a,ElSelectMenu:x,ElOption:_["a"],ElTag:C.a,ElScrollbar:O.a},directives:{Clickoutside:M.a},props:{name:String,id:String,value:{required:!0},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},automaticDropdown:Boolean,size:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:String,remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String,default:function(){return Object(N["t"])("el.select.placeholder")}},defaultFirstOption:Boolean,reserveKeyword:Boolean,valueKey:{type:String,default:"value"},collapseTags:Boolean,popperAppendToBody:{type:Boolean,default:!0}},data:function(){return{options:[],cachedOptions:[],createdLabel:null,createdSelected:!1,selected:this.multiple?[]:{},inputLength:20,inputWidth:0,initialInputHeight:0,cachedPlaceHolder:"",optionsCount:0,filteredOptionsCount:0,visible:!1,softFocus:!1,selectedLabel:"",hoverIndex:-1,query:"",previousQuery:null,inputHovering:!1,currentPlaceholder:"",menuVisibleOnFocus:!1,isOnComposition:!1,isSilentBlur:!1}},watch:{selectDisabled:function(){var e=this;this.$nextTick((function(){e.resetInputHeight()}))},placeholder:function(e){this.cachedPlaceHolder=this.currentPlaceholder=e},value:function(e,t){this.multiple&&(this.resetInputHeight(),e&&e.length>0||this.$refs.input&&""!==this.query?this.currentPlaceholder="":this.currentPlaceholder=this.cachedPlaceHolder,this.filterable&&!this.reserveKeyword&&(this.query="",this.handleQueryChange(this.query))),this.setSelected(),this.filterable&&!this.multiple&&(this.inputLength=20),Object(P["valueEquals"])(e,t)||this.dispatch("ElFormItem","el.form.change",e)},visible:function(e){var t=this;e?(this.broadcast("ElSelectDropdown","updatePopper"),this.filterable&&(this.query=this.remote?"":this.selectedLabel,this.handleQueryChange(this.query),this.multiple?this.$refs.input.focus():(this.remote||(this.broadcast("ElOption","queryChange",""),this.broadcast("ElOptionGroup","queryChange")),this.selectedLabel&&(this.currentPlaceholder=this.selectedLabel,this.selectedLabel="")))):(this.broadcast("ElSelectDropdown","destroyPopper"),this.$refs.input&&this.$refs.input.blur(),this.query="",this.previousQuery=null,this.selectedLabel="",this.inputLength=20,this.menuVisibleOnFocus=!1,this.resetHoverIndex(),this.$nextTick((function(){t.$refs.input&&""===t.$refs.input.value&&0===t.selected.length&&(t.currentPlaceholder=t.cachedPlaceHolder)})),this.multiple||(this.selected&&(this.filterable&&this.allowCreate&&this.createdSelected&&this.createdLabel?this.selectedLabel=this.createdLabel:this.selectedLabel=this.selected.currentLabel,this.filterable&&(this.query=this.selectedLabel)),this.filterable&&(this.currentPlaceholder=this.cachedPlaceHolder))),this.$emit("visible-change",e)},options:function(){var e=this;if(!this.$isServer){this.$nextTick((function(){e.broadcast("ElSelectDropdown","updatePopper")})),this.multiple&&this.resetInputHeight();var t=this.$el.querySelectorAll("input");-1===[].indexOf.call(t,document.activeElement)&&this.setSelected(),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()}}},methods:{handleComposition:function(e){var t=this,n=e.target.value;if("compositionend"===e.type)this.isOnComposition=!1,this.$nextTick((function(e){return t.handleQueryChange(n)}));else{var i=n[n.length-1]||"";this.isOnComposition=!Object(F["isKorean"])(i)}},handleQueryChange:function(e){var t=this;this.previousQuery===e||this.isOnComposition||(null!==this.previousQuery||"function"!==typeof this.filterMethod&&"function"!==typeof this.remoteMethod?(this.previousQuery=e,this.$nextTick((function(){t.visible&&t.broadcast("ElSelectDropdown","updatePopper")})),this.hoverIndex=-1,this.multiple&&this.filterable&&this.$nextTick((function(){var e=15*t.$refs.input.value.length+20;t.inputLength=t.collapseTags?Math.min(50,e):e,t.managePlaceholder(),t.resetInputHeight()})),this.remote&&"function"===typeof this.remoteMethod?(this.hoverIndex=-1,this.remoteMethod(e)):"function"===typeof this.filterMethod?(this.filterMethod(e),this.broadcast("ElOptionGroup","queryChange")):(this.filteredOptionsCount=this.optionsCount,this.broadcast("ElOption","queryChange",e),this.broadcast("ElOptionGroup","queryChange")),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()):this.previousQuery=e)},scrollToOption:function(e){var t=Array.isArray(e)&&e[0]?e[0].$el:e.$el;if(this.$refs.popper&&t){var n=this.$refs.popper.$el.querySelector(".el-select-dropdown__wrap");L()(n,t)}this.$refs.scrollbar&&this.$refs.scrollbar.handleScroll()},handleMenuEnter:function(){var e=this;this.$nextTick((function(){return e.scrollToOption(e.selected)}))},emitChange:function(e){Object(P["valueEquals"])(this.value,e)||this.$emit("change",e)},getOption:function(e){for(var t=void 0,n="[object object]"===Object.prototype.toString.call(e).toLowerCase(),i="[object null]"===Object.prototype.toString.call(e).toLowerCase(),r="[object undefined]"===Object.prototype.toString.call(e).toLowerCase(),o=this.cachedOptions.length-1;o>=0;o--){var a=this.cachedOptions[o],s=n?Object(P["getValueByPath"])(a.value,this.valueKey)===Object(P["getValueByPath"])(e,this.valueKey):a.value===e;if(s){t=a;break}}if(t)return t;var l=n||i||r?"":e,c={value:e,currentLabel:l};return this.multiple&&(c.hitState=!1),c},setSelected:function(){var e=this;if(!this.multiple){var t=this.getOption(this.value);return t.created?(this.createdLabel=t.currentLabel,this.createdSelected=!0):this.createdSelected=!1,this.selectedLabel=t.currentLabel,this.selected=t,void(this.filterable&&(this.query=this.selectedLabel))}var n=[];Array.isArray(this.value)&&this.value.forEach((function(t){n.push(e.getOption(t))})),this.selected=n,this.$nextTick((function(){e.resetInputHeight()}))},handleFocus:function(e){this.softFocus?this.softFocus=!1:((this.automaticDropdown||this.filterable)&&(this.visible=!0,this.filterable&&(this.menuVisibleOnFocus=!0)),this.$emit("focus",e))},blur:function(){this.visible=!1,this.$refs.reference.blur()},handleBlur:function(e){var t=this;setTimeout((function(){t.isSilentBlur?t.isSilentBlur=!1:t.$emit("blur",e)}),50),this.softFocus=!1},handleClearClick:function(e){this.deleteSelected(e)},doDestroy:function(){this.$refs.popper&&this.$refs.popper.doDestroy()},handleClose:function(){this.visible=!1},toggleLastOptionHitState:function(e){if(Array.isArray(this.selected)){var t=this.selected[this.selected.length-1];if(t)return!0===e||!1===e?(t.hitState=e,e):(t.hitState=!t.hitState,t.hitState)}},deletePrevTag:function(e){if(e.target.value.length<=0&&!this.toggleLastOptionHitState()){var t=this.value.slice();t.pop(),this.$emit("input",t),this.emitChange(t)}},managePlaceholder:function(){""!==this.currentPlaceholder&&(this.currentPlaceholder=this.$refs.input.value?"":this.cachedPlaceHolder)},resetInputState:function(e){8!==e.keyCode&&this.toggleLastOptionHitState(!1),this.inputLength=15*this.$refs.input.value.length+20,this.resetInputHeight()},resetInputHeight:function(){var e=this;this.collapseTags&&!this.filterable||this.$nextTick((function(){if(e.$refs.reference){var t=e.$refs.reference.$el.childNodes,n=[].filter.call(t,(function(e){return"INPUT"===e.tagName}))[0],i=e.$refs.tags,r=e.initialInputHeight||40;n.style.height=0===e.selected.length?r+"px":Math.max(i?i.clientHeight+(i.clientHeight>r?6:0):0,r)+"px",e.visible&&!1!==e.emptyText&&e.broadcast("ElSelectDropdown","updatePopper")}}))},resetHoverIndex:function(){var e=this;setTimeout((function(){e.multiple?e.selected.length>0?e.hoverIndex=Math.min.apply(null,e.selected.map((function(t){return e.options.indexOf(t)}))):e.hoverIndex=-1:e.hoverIndex=e.options.indexOf(e.selected)}),300)},handleOptionSelect:function(e,t){var n=this;if(this.multiple){var i=(this.value||[]).slice(),r=this.getValueIndex(i,e.value);r>-1?i.splice(r,1):(this.multipleLimit<=0||i.length<this.multipleLimit)&&i.push(e.value),this.$emit("input",i),this.emitChange(i),e.created&&(this.query="",this.handleQueryChange(""),this.inputLength=20),this.filterable&&this.$refs.input.focus()}else this.$emit("input",e.value),this.emitChange(e.value),this.visible=!1;this.isSilentBlur=t,this.setSoftFocus(),this.visible||this.$nextTick((function(){n.scrollToOption(e)}))},setSoftFocus:function(){this.softFocus=!0;var e=this.$refs.input||this.$refs.reference;e&&e.focus()},getValueIndex:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n="[object object]"===Object.prototype.toString.call(t).toLowerCase();if(n){var i=this.valueKey,r=-1;return e.some((function(e,n){return Object(P["getValueByPath"])(e,i)===Object(P["getValueByPath"])(t,i)&&(r=n,!0)})),r}return e.indexOf(t)},toggleMenu:function(){this.selectDisabled||(this.menuVisibleOnFocus?this.menuVisibleOnFocus=!1:this.visible=!this.visible,this.visible&&(this.$refs.input||this.$refs.reference).focus())},selectOption:function(){this.visible?this.options[this.hoverIndex]&&this.handleOptionSelect(this.options[this.hoverIndex]):this.toggleMenu()},deleteSelected:function(e){e.stopPropagation();var t=this.multiple?[]:"";this.$emit("input",t),this.emitChange(t),this.visible=!1,this.$emit("clear")},deleteTag:function(e,t){var n=this.selected.indexOf(t);if(n>-1&&!this.selectDisabled){var i=this.value.slice();i.splice(n,1),this.$emit("input",i),this.emitChange(i),this.$emit("remove-tag",t.value)}e.stopPropagation()},onInputChange:function(){this.filterable&&this.query!==this.selectedLabel&&(this.query=this.selectedLabel,this.handleQueryChange(this.query))},onOptionDestroy:function(e){e>-1&&(this.optionsCount--,this.filteredOptionsCount--,this.options.splice(e,1))},resetInputWidth:function(){this.inputWidth=this.$refs.reference.$el.getBoundingClientRect().width},handleResize:function(){this.resetInputWidth(),this.multiple&&this.resetInputHeight()},checkDefaultFirstOption:function(){this.hoverIndex=-1;for(var e=!1,t=this.options.length-1;t>=0;t--)if(this.options[t].created){e=!0,this.hoverIndex=t;break}if(!e)for(var n=0;n!==this.options.length;++n){var i=this.options[n];if(this.query){if(!i.disabled&&!i.groupDisabled&&i.visible){this.hoverIndex=n;break}}else if(i.itemSelected){this.hoverIndex=n;break}}},getValueKey:function(e){return"[object object]"!==Object.prototype.toString.call(e.value).toLowerCase()?e.value:Object(P["getValueByPath"])(e.value,this.valueKey)}},created:function(){var e=this;this.cachedPlaceHolder=this.currentPlaceholder=this.placeholder,this.multiple&&!Array.isArray(this.value)&&this.$emit("input",[]),!this.multiple&&Array.isArray(this.value)&&this.$emit("input",""),this.debouncedOnInputChange=E()(this.debounce,(function(){e.onInputChange()})),this.debouncedQueryChange=E()(this.debounce,(function(t){e.handleQueryChange(t.target.value)})),this.$on("handleOptionClick",this.handleOptionSelect),this.$on("setSelected",this.setSelected)},mounted:function(){var e=this;this.multiple&&Array.isArray(this.value)&&this.value.length>0&&(this.currentPlaceholder=""),Object(A["addResizeListener"])(this.$el,this.handleResize);var t=this.$refs.reference;if(t&&t.$el){var n={medium:36,small:32,mini:28},i=t.$el.querySelector("input");this.initialInputHeight=i.getBoundingClientRect().height||n[this.selectSize]}this.remote&&this.multiple&&this.resetInputHeight(),this.$nextTick((function(){t&&t.$el&&(e.inputWidth=t.$el.getBoundingClientRect().width)})),this.setSelected()},beforeDestroy:function(){this.$el&&this.handleResize&&Object(A["removeResizeListener"])(this.$el,this.handleResize)}},z=j,B=Object(y["a"])(z,i,r,!1,null,null,null);B.options.__file="packages/select/src/select.vue";var R=B.exports;R.install=function(e){e.component(R.name,R)},t["default"]=R}])},"4e71":function(e,t,n){n("e198")("observable")},"4ebc":function(e,t,n){var i=n("4d88");e.exports=Array.isArray||function(e){return"Array"==i(e)}},"50c4":function(e,t,n){var i=n("a691"),r=Math.min;e.exports=function(e){return e>0?r(i(e),9007199254740991):0}},"511f":function(e,t,n){n("0b99"),n("658f"),e.exports=n("fcd4").f("iterator")},5128:function(e,t,n){"use strict";n("a9e3"),t.__esModule=!0,t.PopupManager=void 0;var i=n("8bbf"),r=h(i),o=n("7f4d"),a=h(o),s=n("4b26"),l=h(s),c=n("e62d"),u=h(c),d=n("5924");function h(e){return e&&e.__esModule?e:{default:e}}var f=1,p=void 0;t.default={props:{visible:{type:Boolean,default:!1},openDelay:{},closeDelay:{},zIndex:{},modal:{type:Boolean,default:!1},modalFade:{type:Boolean,default:!0},modalClass:{},modalAppendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!1},closeOnClickModal:{type:Boolean,default:!1}},beforeMount:function(){this._popupId="popup-"+f++,l.default.register(this._popupId,this)},beforeDestroy:function(){l.default.deregister(this._popupId),l.default.closeModal(this._popupId),this.restoreBodyStyle()},data:function(){return{opened:!1,bodyPaddingRight:null,computedBodyPaddingRight:0,withoutHiddenClass:!0,rendered:!1}},watch:{visible:function(e){var t=this;if(e){if(this._opening)return;this.rendered?this.open():(this.rendered=!0,r.default.nextTick((function(){t.open()})))}else this.close()}},methods:{open:function(e){var t=this;this.rendered||(this.rendered=!0);var n=(0,a.default)({},this.$props||this,e);this._closeTimer&&(clearTimeout(this._closeTimer),this._closeTimer=null),clearTimeout(this._openTimer);var i=Number(n.openDelay);i>0?this._openTimer=setTimeout((function(){t._openTimer=null,t.doOpen(n)}),i):this.doOpen(n)},doOpen:function(e){if(!this.$isServer&&(!this.willOpen||this.willOpen())&&!this.opened){this._opening=!0;var t=this.$el,n=e.modal,i=e.zIndex;if(i&&(l.default.zIndex=i),n&&(this._closing&&(l.default.closeModal(this._popupId),this._closing=!1),l.default.openModal(this._popupId,l.default.nextZIndex(),this.modalAppendToBody?void 0:t,e.modalClass,e.modalFade),e.lockScroll)){this.withoutHiddenClass=!(0,d.hasClass)(document.body,"el-popup-parent--hidden"),this.withoutHiddenClass&&(this.bodyPaddingRight=document.body.style.paddingRight,this.computedBodyPaddingRight=parseInt((0,d.getStyle)(document.body,"paddingRight"),10)),p=(0,u.default)();var r=document.documentElement.clientHeight<document.body.scrollHeight,o=(0,d.getStyle)(document.body,"overflowY");p>0&&(r||"scroll"===o)&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.computedBodyPaddingRight+p+"px"),(0,d.addClass)(document.body,"el-popup-parent--hidden")}"static"===getComputedStyle(t).position&&(t.style.position="absolute"),t.style.zIndex=l.default.nextZIndex(),this.opened=!0,this.onOpen&&this.onOpen(),this.doAfterOpen()}},doAfterOpen:function(){this._opening=!1},close:function(){var e=this;if(!this.willClose||this.willClose()){null!==this._openTimer&&(clearTimeout(this._openTimer),this._openTimer=null),clearTimeout(this._closeTimer);var t=Number(this.closeDelay);t>0?this._closeTimer=setTimeout((function(){e._closeTimer=null,e.doClose()}),t):this.doClose()}},doClose:function(){this._closing=!0,this.onClose&&this.onClose(),this.lockScroll&&setTimeout(this.restoreBodyStyle,200),this.opened=!1,this.doAfterClose()},doAfterClose:function(){l.default.closeModal(this._popupId),this._closing=!1},restoreBodyStyle:function(){this.modal&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.bodyPaddingRight,(0,d.removeClass)(document.body,"el-popup-parent--hidden")),this.withoutHiddenClass=!0}}},t.PopupManager=l.default},"512c":function(e,t,n){var i=n("ef08"),r=n("5524"),o=n("9c0c"),a=n("051b"),s=n("9c0e"),l="prototype",c=function e(t,n,c){var u,d,h,f=t&e.F,p=t&e.G,m=t&e.S,g=t&e.P,v=t&e.B,b=t&e.W,y=p?r:r[n]||(r[n]={}),w=y[l],x=p?i:m?i[n]:(i[n]||{})[l];for(u in p&&(c=n),c)d=!f&&x&&void 0!==x[u],d&&s(y,u)||(h=d?x[u]:c[u],y[u]=p&&"function"!=typeof x[u]?c[u]:v&&d?o(h,i):b&&x[u]==h?function(e){var t=function(t,n,i){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,i)}return e.apply(this,arguments)};return t[l]=e[l],t}(h):g&&"function"==typeof h?o(Function.call,h):h,g&&((y.virtual||(y.virtual={}))[u]=h,t&e.R&&w&&!w[u]&&a(w,u,h)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},5135:function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},5270:function(e,t,n){"use strict";var i=n("c532"),r=n("c401"),o=n("2e67"),a=n("2444");function s(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){s(e),e.headers=e.headers||{},e.data=r(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),i.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]}));var t=e.adapter||a.adapter;return t(e).then((function(t){return s(e),t.data=r(t.data,t.headers,e.transformResponse),t}),(function(t){return o(t)||(s(e),t&&t.response&&(t.response.data=r(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},5319:function(e,t,n){"use strict";var i=n("d784"),r=n("825a"),o=n("7b0b"),a=n("50c4"),s=n("a691"),l=n("1d80"),c=n("8aa5"),u=n("14c3"),d=Math.max,h=Math.min,f=Math.floor,p=/\$([$&'`]|\d\d?|<[^>]*>)/g,m=/\$([$&'`]|\d\d?)/g,g=function(e){return void 0===e?e:String(e)};i("replace",2,(function(e,t,n,i){var v=i.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,b=i.REPLACE_KEEPS_$0,y=v?"$":"$0";return[function(n,i){var r=l(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,r,i):t.call(String(r),n,i)},function(e,i){if(!v&&b||"string"===typeof i&&-1===i.indexOf(y)){var o=n(t,e,this,i);if(o.done)return o.value}var l=r(e),f=String(this),p="function"===typeof i;p||(i=String(i));var m=l.global;if(m){var x=l.unicode;l.lastIndex=0}var _=[];while(1){var k=u(l,f);if(null===k)break;if(_.push(k),!m)break;var C=String(k[0]);""===C&&(l.lastIndex=c(f,a(l.lastIndex),x))}for(var S="",O=0,T=0;T<_.length;T++){k=_[T];for(var E=String(k[0]),D=d(h(s(k.index),f.length),0),M=[],A=1;A<k.length;A++)M.push(g(k[A]));var N=k.groups;if(p){var I=[E].concat(M,D,f);void 0!==N&&I.push(N);var L=String(i.apply(void 0,I))}else L=w(E,f,D,M,N,i);D>=O&&(S+=f.slice(O,D)+L,O=D+E.length)}return S+f.slice(O)}];function w(e,n,i,r,a,s){var l=i+e.length,c=r.length,u=m;return void 0!==a&&(a=o(a),u=p),t.call(s,u,(function(t,o){var s;switch(o.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,i);case"'":return n.slice(l);case"<":s=a[o.slice(1,-1)];break;default:var u=+o;if(0===u)return t;if(u>c){var d=f(u/10);return 0===d?t:d<=c?void 0===r[d-1]?o.charAt(1):r[d-1]+o.charAt(1):t}s=r[u-1]}return void 0===s?"":s}))}}))},"53ca":function(e,t,n){"use strict";function i(e){return i="function"===typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?function(e){return _typeof2(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":_typeof2(e)},i(e)}n.d(t,"a",(function(){return i})),n("a4d3"),n("e01a"),n("d28b"),n("e260"),n("d3b7"),n("3ca3"),n("ddb0")},"545f":function(e,t,n){"use strict";var i=n("dda2"),r=n.n(i);r.a},5488:function(e,t,n){"use strict";t.__esModule=!0;var i=n("5924");function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(){r(this,e)}return e.prototype.beforeEnter=function(e){(0,i.addClass)(e,"collapse-transition"),e.dataset||(e.dataset={}),e.dataset.oldPaddingTop=e.style.paddingTop,e.dataset.oldPaddingBottom=e.style.paddingBottom,e.style.height="0",e.style.paddingTop=0,e.style.paddingBottom=0},e.prototype.enter=function(e){e.dataset.oldOverflow=e.style.overflow,0!==e.scrollHeight?(e.style.height=e.scrollHeight+"px",e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom):(e.style.height="",e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom),e.style.overflow="hidden"},e.prototype.afterEnter=function(e){(0,i.removeClass)(e,"collapse-transition"),e.style.height="",e.style.overflow=e.dataset.oldOverflow},e.prototype.beforeLeave=function(e){e.dataset||(e.dataset={}),e.dataset.oldPaddingTop=e.style.paddingTop,e.dataset.oldPaddingBottom=e.style.paddingBottom,e.dataset.oldOverflow=e.style.overflow,e.style.height=e.scrollHeight+"px",e.style.overflow="hidden"},e.prototype.leave=function(e){0!==e.scrollHeight&&((0,i.addClass)(e,"collapse-transition"),e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0)},e.prototype.afterLeave=function(e){(0,i.removeClass)(e,"collapse-transition"),e.style.height="",e.style.overflow=e.dataset.oldOverflow,e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom},e}();t.default={name:"ElCollapseTransition",functional:!0,render:function(e,t){var n=t.children,i={on:new o};return e("transition",i,n)}}},5524:function(e,t){var n=e.exports={version:"2.6.11"};"number"==typeof __e&&(__e=n)},5692:function(e,t,n){var i=n("c430"),r=n("c6cd");(e.exports=function(e,t){return r[e]||(r[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.6.5",mode:i?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},"56b3":function(e,t,n){(function(t,n){e.exports=n()})(0,(function(){"use strict";var e=navigator.userAgent,t=navigator.platform,n=/gecko\/\d/i.test(e),i=/MSIE \d/.test(e),r=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),o=/Edge\/(\d+)/.exec(e),a=i||r||o,s=a&&(i?document.documentMode||6:+(o||r)[1]),l=!o&&/WebKit\//.test(e),c=l&&/Qt\/\d+\.\d+/.test(e),u=!o&&/Chrome\//.test(e),d=/Opera\//.test(e),h=/Apple Computer/.test(navigator.vendor),f=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),p=/PhantomJS/.test(e),m=!o&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),g=/Android/.test(e),v=m||g||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),b=m||/Mac/.test(t),y=/\bCrOS\b/.test(e),w=/win/i.test(t),x=d&&e.match(/Version\/(\d*\.\d*)/);x&&(x=Number(x[1])),x&&x>=15&&(d=!1,l=!0);var _=b&&(c||d&&(null==x||x<12.11)),k=n||a&&s>=9;function C(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var S,O=function(e,t){var n=e.className,i=C(t).exec(n);if(i){var r=n.slice(i.index+i[0].length);e.className=n.slice(0,i.index)+(r?i[1]+r:"")}};function T(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function E(e,t){return T(e).appendChild(t)}function D(e,t,n,i){var r=document.createElement(e);if(n&&(r.className=n),i&&(r.style.cssText=i),"string"==typeof t)r.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)r.appendChild(t[o]);return r}function M(e,t,n,i){var r=D(e,t,n,i);return r.setAttribute("role","presentation"),r}function A(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function N(){var e;try{e=document.activeElement}catch(t){e=document.body||null}while(e&&e.shadowRoot&&e.shadowRoot.activeElement)e=e.shadowRoot.activeElement;return e}function I(e,t){var n=e.className;C(t).test(n)||(e.className+=(n?" ":"")+t)}function L(e,t){for(var n=e.split(" "),i=0;i<n.length;i++)n[i]&&!C(n[i]).test(t)&&(t+=" "+n[i]);return t}S=document.createRange?function(e,t,n,i){var r=document.createRange();return r.setEnd(i||e,n),r.setStart(e,t),r}:function(e,t,n){var i=document.body.createTextRange();try{i.moveToElementText(e.parentNode)}catch(r){return i}return i.collapse(!0),i.moveEnd("character",n),i.moveStart("character",t),i};var P=function(e){e.select()};function $(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function F(e,t,n){for(var i in t||(t={}),e)!e.hasOwnProperty(i)||!1===n&&t.hasOwnProperty(i)||(t[i]=e[i]);return t}function j(e,t,n,i,r){null==t&&(t=e.search(/[^\s\u00a0]/),-1==t&&(t=e.length));for(var o=i||0,a=r||0;;){var s=e.indexOf("\t",o);if(s<0||s>=t)return a+(t-o);a+=s-o,a+=n-a%n,o=s+1}}m?P=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:a&&(P=function(e){try{e.select()}catch(t){}});var z=function(){this.id=null,this.f=null,this.time=0,this.handler=$(this.onTimeout,this)};function B(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}z.prototype.onTimeout=function(e){e.id=0,e.time<=+new Date?e.f():setTimeout(e.handler,e.time-+new Date)},z.prototype.set=function(e,t){this.f=t;var n=+new Date+e;(!this.id||n<this.time)&&(clearTimeout(this.id),this.id=setTimeout(this.handler,e),this.time=n)};var R=50,V={toString:function(){return"CodeMirror.Pass"}},H={scroll:!1},W={origin:"*mouse"},q={origin:"+move"};function U(e,t,n){for(var i=0,r=0;;){var o=e.indexOf("\t",i);-1==o&&(o=e.length);var a=o-i;if(o==e.length||r+a>=t)return i+Math.min(a,t-r);if(r+=o-i,r+=n-r%n,i=o+1,r>=t)return i}}var K=[""];function G(e){while(K.length<=e)K.push(Y(K)+" ");return K[e]}function Y(e){return e[e.length-1]}function X(e,t){for(var n=[],i=0;i<e.length;i++)n[i]=t(e[i],i);return n}function Z(e,t,n){var i=0,r=n(t);while(i<e.length&&n(e[i])<=r)i++;e.splice(i,0,t)}function Q(){}function J(e,t){var n;return Object.create?n=Object.create(e):(Q.prototype=e,n=new Q),t&&F(t,n),n}var ee=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;function te(e){return/\w/.test(e)||e>"€"&&(e.toUpperCase()!=e.toLowerCase()||ee.test(e))}function ne(e,t){return t?!!(t.source.indexOf("\\w")>-1&&te(e))||t.test(e):te(e)}function ie(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var re=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function oe(e){return e.charCodeAt(0)>=768&&re.test(e)}function ae(e,t,n){while((n<0?t>0:t<e.length)&&oe(e.charAt(t)))t+=n;return t}function se(e,t,n){for(var i=t>n?-1:1;;){if(t==n)return t;var r=(t+n)/2,o=i<0?Math.ceil(r):Math.floor(r);if(o==t)return e(o)?t:n;e(o)?n=o:t=o+i}}function le(e,t,n,i){if(!e)return i(t,n,"ltr",0);for(var r=!1,o=0;o<e.length;++o){var a=e[o];(a.from<n&&a.to>t||t==n&&a.to==t)&&(i(Math.max(a.from,t),Math.min(a.to,n),1==a.level?"rtl":"ltr",o),r=!0)}r||i(t,n,"ltr")}var ce=null;function ue(e,t,n){var i;ce=null;for(var r=0;r<e.length;++r){var o=e[r];if(o.from<t&&o.to>t)return r;o.to==t&&(o.from!=o.to&&"before"==n?i=r:ce=r),o.from==t&&(o.from!=o.to&&"before"!=n?i=r:ce=r)}return null!=i?i:ce}var de=function(){var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",t="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function n(n){return n<=247?e.charAt(n):1424<=n&&n<=1524?"R":1536<=n&&n<=1785?t.charAt(n-1536):1774<=n&&n<=2220?"r":8192<=n&&n<=8203?"w":8204==n?"b":"L"}var i=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,r=/[stwN]/,o=/[LRr]/,a=/[Lb1n]/,s=/[1n]/;function l(e,t,n){this.level=e,this.from=t,this.to=n}return function(e,t){var c="ltr"==t?"L":"R";if(0==e.length||"ltr"==t&&!i.test(e))return!1;for(var u=e.length,d=[],h=0;h<u;++h)d.push(n(e.charCodeAt(h)));for(var f=0,p=c;f<u;++f){var m=d[f];"m"==m?d[f]=p:p=m}for(var g=0,v=c;g<u;++g){var b=d[g];"1"==b&&"r"==v?d[g]="n":o.test(b)&&(v=b,"r"==b&&(d[g]="R"))}for(var y=1,w=d[0];y<u-1;++y){var x=d[y];"+"==x&&"1"==w&&"1"==d[y+1]?d[y]="1":","!=x||w!=d[y+1]||"1"!=w&&"n"!=w||(d[y]=w),w=x}for(var _=0;_<u;++_){var k=d[_];if(","==k)d[_]="N";else if("%"==k){var C=void 0;for(C=_+1;C<u&&"%"==d[C];++C);for(var S=_&&"!"==d[_-1]||C<u&&"1"==d[C]?"1":"N",O=_;O<C;++O)d[O]=S;_=C-1}}for(var T=0,E=c;T<u;++T){var D=d[T];"L"==E&&"1"==D?d[T]="L":o.test(D)&&(E=D)}for(var M=0;M<u;++M)if(r.test(d[M])){var A=void 0;for(A=M+1;A<u&&r.test(d[A]);++A);for(var N="L"==(M?d[M-1]:c),I="L"==(A<u?d[A]:c),L=N==I?N?"L":"R":c,P=M;P<A;++P)d[P]=L;M=A-1}for(var $,F=[],j=0;j<u;)if(a.test(d[j])){var z=j;for(++j;j<u&&a.test(d[j]);++j);F.push(new l(0,z,j))}else{var B=j,R=F.length,V="rtl"==t?1:0;for(++j;j<u&&"L"!=d[j];++j);for(var H=B;H<j;)if(s.test(d[H])){B<H&&(F.splice(R,0,new l(1,B,H)),R+=V);var W=H;for(++H;H<j&&s.test(d[H]);++H);F.splice(R,0,new l(2,W,H)),R+=V,B=H}else++H;B<j&&F.splice(R,0,new l(1,B,j))}return"ltr"==t&&(1==F[0].level&&($=e.match(/^\s+/))&&(F[0].from=$[0].length,F.unshift(new l(0,0,$[0].length))),1==Y(F).level&&($=e.match(/\s+$/))&&(Y(F).to-=$[0].length,F.push(new l(0,u-$[0].length,u)))),"rtl"==t?F.reverse():F}}();function he(e,t){var n=e.order;return null==n&&(n=e.order=de(e.text,t)),n}var fe=[],pe=function(e,t,n){if(e.addEventListener)e.addEventListener(t,n,!1);else if(e.attachEvent)e.attachEvent("on"+t,n);else{var i=e._handlers||(e._handlers={});i[t]=(i[t]||fe).concat(n)}};function me(e,t){return e._handlers&&e._handlers[t]||fe}function ge(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1);else if(e.detachEvent)e.detachEvent("on"+t,n);else{var i=e._handlers,r=i&&i[t];if(r){var o=B(r,n);o>-1&&(i[t]=r.slice(0,o).concat(r.slice(o+1)))}}}function ve(e,t){var n=me(e,t);if(n.length)for(var i=Array.prototype.slice.call(arguments,2),r=0;r<n.length;++r)n[r].apply(null,i)}function be(e,t,n){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),ve(e,n||t.type,e,t),Ce(t)||t.codemirrorIgnore}function ye(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),i=0;i<t.length;++i)-1==B(n,t[i])&&n.push(t[i])}function we(e,t){return me(e,t).length>0}function xe(e){e.prototype.on=function(e,t){pe(this,e,t)},e.prototype.off=function(e,t){ge(this,e,t)}}function _e(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function ke(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Ce(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Se(e){_e(e),ke(e)}function Oe(e){return e.target||e.srcElement}function Te(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),b&&e.ctrlKey&&1==t&&(t=3),t}var Ee,De,Me=function(){if(a&&s<9)return!1;var e=D("div");return"draggable"in e||"dragDrop"in e}();function Ae(e){if(null==Ee){var t=D("span","​");E(e,D("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Ee=t.offsetWidth<=1&&t.offsetHeight>2&&!(a&&s<8))}var n=Ee?D("span","​"):D("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function Ne(e){if(null!=De)return De;var t=E(e,document.createTextNode("AخA")),n=S(t,0,1).getBoundingClientRect(),i=S(t,1,2).getBoundingClientRect();return T(e),!(!n||n.left==n.right)&&(De=i.right-n.right<3)}var Ie=3!="\n\nb".split(/\n/).length?function(e){var t=0,n=[],i=e.length;while(t<=i){var r=e.indexOf("\n",t);-1==r&&(r=e.length);var o=e.slice(t,"\r"==e.charAt(r-1)?r-1:r),a=o.indexOf("\r");-1!=a?(n.push(o.slice(0,a)),t+=a+1):(n.push(o),t=r+1)}return n}:function(e){return e.split(/\r\n?|\n/)},Le=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(t){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(n){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Pe=function(){var e=D("div");return"oncopy"in e||(e.setAttribute("oncopy","return;"),"function"==typeof e.oncopy)}(),$e=null;function Fe(e){if(null!=$e)return $e;var t=E(e,D("span","x")),n=t.getBoundingClientRect(),i=S(t,0,1).getBoundingClientRect();return $e=Math.abs(n.left-i.left)>1}var je={},ze={};function Be(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),je[e]=t}function Re(e,t){ze[e]=t}function Ve(e){if("string"==typeof e&&ze.hasOwnProperty(e))e=ze[e];else if(e&&"string"==typeof e.name&&ze.hasOwnProperty(e.name)){var t=ze[e.name];"string"==typeof t&&(t={name:t}),e=J(t,e),e.name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Ve("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Ve("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function He(e,t){t=Ve(t);var n=je[t.name];if(!n)return He(e,"text/plain");var i=n(e,t);if(We.hasOwnProperty(t.name)){var r=We[t.name];for(var o in r)r.hasOwnProperty(o)&&(i.hasOwnProperty(o)&&(i["_"+o]=i[o]),i[o]=r[o])}if(i.name=t.name,t.helperType&&(i.helperType=t.helperType),t.modeProps)for(var a in t.modeProps)i[a]=t.modeProps[a];return i}var We={};function qe(e,t){var n=We.hasOwnProperty(e)?We[e]:We[e]={};F(t,n)}function Ue(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var i in t){var r=t[i];r instanceof Array&&(r=r.concat([])),n[i]=r}return n}function Ke(e,t){var n;while(e.innerMode){if(n=e.innerMode(t),!n||n.mode==e)break;t=n.state,e=n.mode}return n||{mode:e,state:t}}function Ge(e,t,n){return!e.startState||e.startState(t,n)}var Ye=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};function Xe(e,t){if(t-=e.first,t<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");var n=e;while(!n.lines)for(var i=0;;++i){var r=n.children[i],o=r.chunkSize();if(t<o){n=r;break}t-=o}return n.lines[t]}function Ze(e,t,n){var i=[],r=t.line;return e.iter(t.line,n.line+1,(function(e){var o=e.text;r==n.line&&(o=o.slice(0,n.ch)),r==t.line&&(o=o.slice(t.ch)),i.push(o),++r})),i}function Qe(e,t,n){var i=[];return e.iter(t,n,(function(e){i.push(e.text)})),i}function Je(e,t){var n=t-e.height;if(n)for(var i=e;i;i=i.parent)i.height+=n}function et(e){if(null==e.parent)return null;for(var t=e.parent,n=B(t.lines,e),i=t.parent;i;t=i,i=i.parent)for(var r=0;;++r){if(i.children[r]==t)break;n+=i.children[r].chunkSize()}return n+t.first}function tt(e,t){var n=e.first;e:do{for(var i=0;i<e.children.length;++i){var r=e.children[i],o=r.height;if(t<o){e=r;continue e}t-=o,n+=r.chunkSize()}return n}while(!e.lines);for(var a=0;a<e.lines.length;++a){var s=e.lines[a],l=s.height;if(t<l)break;t-=l}return n+a}function nt(e,t){return t>=e.first&&t<e.first+e.size}function it(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function rt(e,t,n){if(void 0===n&&(n=null),!(this instanceof rt))return new rt(e,t,n);this.line=e,this.ch=t,this.sticky=n}function ot(e,t){return e.line-t.line||e.ch-t.ch}function at(e,t){return e.sticky==t.sticky&&0==ot(e,t)}function st(e){return rt(e.line,e.ch)}function lt(e,t){return ot(e,t)<0?t:e}function ct(e,t){return ot(e,t)<0?e:t}function ut(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function dt(e,t){if(t.line<e.first)return rt(e.first,0);var n=e.first+e.size-1;return t.line>n?rt(n,Xe(e,n).text.length):ht(t,Xe(e,t.line).text.length)}function ht(e,t){var n=e.ch;return null==n||n>t?rt(e.line,t):n<0?rt(e.line,0):e}function ft(e,t){for(var n=[],i=0;i<t.length;i++)n[i]=dt(e,t[i]);return n}Ye.prototype.eol=function(){return this.pos>=this.string.length},Ye.prototype.sol=function(){return this.pos==this.lineStart},Ye.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Ye.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},Ye.prototype.eat=function(e){var t,n=this.string.charAt(this.pos);if(t="string"==typeof e?n==e:n&&(e.test?e.test(n):e(n)),t)return++this.pos,n},Ye.prototype.eatWhile=function(e){var t=this.pos;while(this.eat(e));return this.pos>t},Ye.prototype.eatSpace=function(){var e=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>e},Ye.prototype.skipToEnd=function(){this.pos=this.string.length},Ye.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Ye.prototype.backUp=function(e){this.pos-=e},Ye.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=j(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?j(this.string,this.lineStart,this.tabSize):0)},Ye.prototype.indentation=function(){return j(this.string,null,this.tabSize)-(this.lineStart?j(this.string,this.lineStart,this.tabSize):0)},Ye.prototype.match=function(e,t,n){if("string"!=typeof e){var i=this.string.slice(this.pos).match(e);return i&&i.index>0?null:(i&&!1!==t&&(this.pos+=i[0].length),i)}var r=function(e){return n?e.toLowerCase():e},o=this.string.substr(this.pos,e.length);if(r(o)==r(e))return!1!==t&&(this.pos+=e.length),!0},Ye.prototype.current=function(){return this.string.slice(this.start,this.pos)},Ye.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Ye.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Ye.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var pt=function(e,t){this.state=e,this.lookAhead=t},mt=function(e,t,n,i){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=i||0,this.baseTokens=null,this.baseTokenPos=1};function gt(e,t,n,i){var r=[e.state.modeGen],o={};St(e,t.text,e.doc.mode,n,(function(e,t){return r.push(e,t)}),o,i);for(var a=n.state,s=function(i){n.baseTokens=r;var s=e.state.overlays[i],l=1,c=0;n.state=!0,St(e,t.text,s.mode,n,(function(e,t){var n=l;while(c<e){var i=r[l];i>e&&r.splice(l,1,e,r[l+1],i),l+=2,c=Math.min(e,i)}if(t)if(s.opaque)r.splice(n,l-n,e,"overlay "+t),l=n+2;else for(;n<l;n+=2){var o=r[n+1];r[n+1]=(o?o+" ":"")+"overlay "+t}}),o),n.state=a,n.baseTokens=null,n.baseTokenPos=1},l=0;l<e.state.overlays.length;++l)s(l);return{styles:r,classes:o.bgClass||o.textClass?o:null}}function vt(e,t,n){if(!t.styles||t.styles[0]!=e.state.modeGen){var i=bt(e,et(t)),r=t.text.length>e.options.maxHighlightLength&&Ue(e.doc.mode,i.state),o=gt(e,t,i);r&&(i.state=r),t.stateAfter=i.save(!r),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function bt(e,t,n){var i=e.doc,r=e.display;if(!i.mode.startState)return new mt(i,!0,t);var o=Ot(e,t,n),a=o>i.first&&Xe(i,o-1).stateAfter,s=a?mt.fromSaved(i,a,o):new mt(i,Ge(i.mode),o);return i.iter(o,t,(function(n){yt(e,n.text,s);var i=s.line;n.stateAfter=i==t-1||i%5==0||i>=r.viewFrom&&i<r.viewTo?s.save():null,s.nextLine()})),n&&(i.modeFrontier=s.line),s}function yt(e,t,n,i){var r=e.doc.mode,o=new Ye(t,e.options.tabSize,n);o.start=o.pos=i||0,""==t&&wt(r,n.state);while(!o.eol())xt(r,o,n.state),o.start=o.pos}function wt(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var n=Ke(e,t);return n.mode.blankLine?n.mode.blankLine(n.state):void 0}}function xt(e,t,n,i){for(var r=0;r<10;r++){i&&(i[0]=Ke(e,n).mode);var o=e.token(t,n);if(t.pos>t.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}mt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},mt.prototype.baseToken=function(e){if(!this.baseTokens)return null;while(this.baseTokens[this.baseTokenPos]<=e)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},mt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},mt.fromSaved=function(e,t,n){return t instanceof pt?new mt(e,Ue(e.mode,t.state),n,t.lookAhead):new mt(e,Ue(e.mode,t),n)},mt.prototype.save=function(e){var t=!1!==e?Ue(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new pt(t,this.maxLookAhead):t};var _t=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function kt(e,t,n,i){var r,o=e.doc,a=o.mode;t=dt(o,t);var s,l=Xe(o,t.line),c=bt(e,t.line,n),u=new Ye(l.text,e.options.tabSize,c);i&&(s=[]);while((i||u.pos<t.ch)&&!u.eol())u.start=u.pos,r=xt(a,u,c.state),i&&s.push(new _t(u,r,Ue(o.mode,c.state)));return i?s:new _t(u,r,c.state)}function Ct(e,t){if(e)for(;;){var n=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!n)break;e=e.slice(0,n.index)+e.slice(n.index+n[0].length);var i=n[1]?"bgClass":"textClass";null==t[i]?t[i]=n[2]:new RegExp("(?:^|\\s)"+n[2]+"(?:$|\\s)").test(t[i])||(t[i]+=" "+n[2])}return e}function St(e,t,n,i,r,o,a){var s=n.flattenSpans;null==s&&(s=e.options.flattenSpans);var l,c=0,u=null,d=new Ye(t,e.options.tabSize,i),h=e.options.addModeClass&&[null];""==t&&Ct(wt(n,i.state),o);while(!d.eol()){if(d.pos>e.options.maxHighlightLength?(s=!1,a&&yt(e,t,i,d.pos),d.pos=t.length,l=null):l=Ct(xt(n,d,i.state,h),o),h){var f=h[0].name;f&&(l="m-"+(l?f+" "+l:f))}if(!s||u!=l){while(c<d.start)c=Math.min(d.start,c+5e3),r(c,u);u=l}d.start=d.pos}while(c<d.pos){var p=Math.min(d.pos,c+5e3);r(p,u),c=p}}function Ot(e,t,n){for(var i,r,o=e.doc,a=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>a;--s){if(s<=o.first)return o.first;var l=Xe(o,s-1),c=l.stateAfter;if(c&&(!n||s+(c instanceof pt?c.lookAhead:0)<=o.modeFrontier))return s;var u=j(l.text,null,e.options.tabSize);(null==r||i>u)&&(r=s-1,i=u)}return r}function Tt(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var n=e.first,i=t-1;i>n;i--){var r=Xe(e,i).stateAfter;if(r&&(!(r instanceof pt)||i+r.lookAhead<t)){n=i+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,n)}}var Et=!1,Dt=!1;function Mt(){Et=!0}function At(){Dt=!0}function Nt(e,t,n){this.marker=e,this.from=t,this.to=n}function It(e,t){if(e)for(var n=0;n<e.length;++n){var i=e[n];if(i.marker==t)return i}}function Lt(e,t){for(var n,i=0;i<e.length;++i)e[i]!=t&&(n||(n=[])).push(e[i]);return n}function Pt(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}function $t(e,t,n){var i;if(e)for(var r=0;r<e.length;++r){var o=e[r],a=o.marker,s=null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t);if(s||o.from==t&&"bookmark"==a.type&&(!n||!o.marker.insertLeft)){var l=null==o.to||(a.inclusiveRight?o.to>=t:o.to>t);(i||(i=[])).push(new Nt(a,o.from,l?null:o.to))}}return i}function Ft(e,t,n){var i;if(e)for(var r=0;r<e.length;++r){var o=e[r],a=o.marker,s=null==o.to||(a.inclusiveRight?o.to>=t:o.to>t);if(s||o.from==t&&"bookmark"==a.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t);(i||(i=[])).push(new Nt(a,l?null:o.from-t,null==o.to?null:o.to-t))}}return i}function jt(e,t){if(t.full)return null;var n=nt(e,t.from.line)&&Xe(e,t.from.line).markedSpans,i=nt(e,t.to.line)&&Xe(e,t.to.line).markedSpans;if(!n&&!i)return null;var r=t.from.ch,o=t.to.ch,a=0==ot(t.from,t.to),s=$t(n,r,a),l=Ft(i,o,a),c=1==t.text.length,u=Y(t.text).length+(c?r:0);if(s)for(var d=0;d<s.length;++d){var h=s[d];if(null==h.to){var f=It(l,h.marker);f?c&&(h.to=null==f.to?null:f.to+u):h.to=r}}if(l)for(var p=0;p<l.length;++p){var m=l[p];if(null!=m.to&&(m.to+=u),null==m.from){var g=It(s,m.marker);g||(m.from=u,c&&(s||(s=[])).push(m))}else m.from+=u,c&&(s||(s=[])).push(m)}s&&(s=zt(s)),l&&l!=s&&(l=zt(l));var v=[s];if(!c){var b,y=t.text.length-2;if(y>0&&s)for(var w=0;w<s.length;++w)null==s[w].to&&(b||(b=[])).push(new Nt(s[w].marker,null,null));for(var x=0;x<y;++x)v.push(b);v.push(l)}return v}function zt(e){for(var t=0;t<e.length;++t){var n=e[t];null!=n.from&&n.from==n.to&&!1!==n.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function Bt(e,t,n){var i=null;if(e.iter(t.line,n.line+1,(function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var n=e.markedSpans[t].marker;!n.readOnly||i&&-1!=B(i,n)||(i||(i=[])).push(n)}})),!i)return null;for(var r=[{from:t,to:n}],o=0;o<i.length;++o)for(var a=i[o],s=a.find(0),l=0;l<r.length;++l){var c=r[l];if(!(ot(c.to,s.from)<0||ot(c.from,s.to)>0)){var u=[l,1],d=ot(c.from,s.from),h=ot(c.to,s.to);(d<0||!a.inclusiveLeft&&!d)&&u.push({from:c.from,to:s.from}),(h>0||!a.inclusiveRight&&!h)&&u.push({from:s.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function Rt(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n].marker.detachLine(e);e.markedSpans=null}}function Vt(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine(e);e.markedSpans=t}}function Ht(e){return e.inclusiveLeft?-1:0}function Wt(e){return e.inclusiveRight?1:0}function qt(e,t){var n=e.lines.length-t.lines.length;if(0!=n)return n;var i=e.find(),r=t.find(),o=ot(i.from,r.from)||Ht(e)-Ht(t);if(o)return-o;var a=ot(i.to,r.to)||Wt(e)-Wt(t);return a||t.id-e.id}function Ut(e,t){var n,i=Dt&&e.markedSpans;if(i)for(var r=void 0,o=0;o<i.length;++o)r=i[o],r.marker.collapsed&&null==(t?r.from:r.to)&&(!n||qt(n,r.marker)<0)&&(n=r.marker);return n}function Kt(e){return Ut(e,!0)}function Gt(e){return Ut(e,!1)}function Yt(e,t){var n,i=Dt&&e.markedSpans;if(i)for(var r=0;r<i.length;++r){var o=i[r];o.marker.collapsed&&(null==o.from||o.from<t)&&(null==o.to||o.to>t)&&(!n||qt(n,o.marker)<0)&&(n=o.marker)}return n}function Xt(e,t,n,i,r){var o=Xe(e,t),a=Dt&&o.markedSpans;if(a)for(var s=0;s<a.length;++s){var l=a[s];if(l.marker.collapsed){var c=l.marker.find(0),u=ot(c.from,n)||Ht(l.marker)-Ht(r),d=ot(c.to,i)||Wt(l.marker)-Wt(r);if(!(u>=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ot(c.to,n)>=0:ot(c.to,n)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ot(c.from,i)<=0:ot(c.from,i)<0)))return!0}}}function Zt(e){var t;while(t=Kt(e))e=t.find(-1,!0).line;return e}function Qt(e){var t;while(t=Gt(e))e=t.find(1,!0).line;return e}function Jt(e){var t,n;while(t=Gt(e))e=t.find(1,!0).line,(n||(n=[])).push(e);return n}function en(e,t){var n=Xe(e,t),i=Zt(n);return n==i?t:et(i)}function tn(e,t){if(t>e.lastLine())return t;var n,i=Xe(e,t);if(!nn(e,i))return t;while(n=Gt(i))i=n.find(1,!0).line;return et(i)+1}function nn(e,t){var n=Dt&&t.markedSpans;if(n)for(var i=void 0,r=0;r<n.length;++r)if(i=n[r],i.marker.collapsed){if(null==i.from)return!0;if(!i.marker.widgetNode&&0==i.from&&i.marker.inclusiveLeft&&rn(e,t,i))return!0}}function rn(e,t,n){if(null==n.to){var i=n.marker.find(1,!0);return rn(e,i.line,It(i.line.markedSpans,n.marker))}if(n.marker.inclusiveRight&&n.to==t.text.length)return!0;for(var r=void 0,o=0;o<t.markedSpans.length;++o)if(r=t.markedSpans[o],r.marker.collapsed&&!r.marker.widgetNode&&r.from==n.to&&(null==r.to||r.to!=n.from)&&(r.marker.inclusiveLeft||n.marker.inclusiveRight)&&rn(e,t,r))return!0}function on(e){e=Zt(e);for(var t=0,n=e.parent,i=0;i<n.lines.length;++i){var r=n.lines[i];if(r==e)break;t+=r.height}for(var o=n.parent;o;n=o,o=n.parent)for(var a=0;a<o.children.length;++a){var s=o.children[a];if(s==n)break;t+=s.height}return t}function an(e){if(0==e.height)return 0;var t,n=e.text.length,i=e;while(t=Kt(i)){var r=t.find(0,!0);i=r.from.line,n+=r.from.ch-r.to.ch}i=e;while(t=Gt(i)){var o=t.find(0,!0);n-=i.text.length-o.from.ch,i=o.to.line,n+=i.text.length-o.to.ch}return n}function sn(e){var t=e.display,n=e.doc;t.maxLine=Xe(n,n.first),t.maxLineLength=an(t.maxLine),t.maxLineChanged=!0,n.iter((function(e){var n=an(e);n>t.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)}))}var ln=function(e,t,n){this.text=e,Vt(this,t),this.height=n?n(this):1};function cn(e,t,n,i){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),Rt(e),Vt(e,n);var r=i?i(e):1;r!=e.height&&Je(e,r)}function un(e){e.parent=null,Rt(e)}ln.prototype.lineNo=function(){return et(this)},xe(ln);var dn={},hn={};function fn(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?hn:dn;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function pn(e,t){var n=M("span",null,null,l?"padding-right: .1px":null),i={pre:M("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var r=0;r<=(t.rest?t.rest.length:0);r++){var o=r?t.rest[r-1]:t.line,a=void 0;i.pos=0,i.addToken=gn,Ne(e.display.measure)&&(a=he(o,e.doc.direction))&&(i.addToken=bn(i.addToken,a)),i.map=[];var s=t!=e.display.externalMeasured&&et(o);wn(o,i,vt(e,o,s)),o.styleClasses&&(o.styleClasses.bgClass&&(i.bgClass=L(o.styleClasses.bgClass,i.bgClass||"")),o.styleClasses.textClass&&(i.textClass=L(o.styleClasses.textClass,i.textClass||""))),0==i.map.length&&i.map.push(0,0,i.content.appendChild(Ae(e.display.measure))),0==r?(t.measure.map=i.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(i.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(l){var c=i.content.lastChild;(/\bcm-tab\b/.test(c.className)||c.querySelector&&c.querySelector(".cm-tab"))&&(i.content.className="cm-tab-wrap-hack")}return ve(e,"renderLine",e,t.line,i.pre),i.pre.className&&(i.textClass=L(i.pre.className,i.textClass||"")),i}function mn(e){var t=D("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function gn(e,t,n,i,r,o,l){if(t){var c,u=e.splitSpaces?vn(t,e.trailingSpace):t,d=e.cm.state.specialChars,h=!1;if(d.test(t)){c=document.createDocumentFragment();var f=0;while(1){d.lastIndex=f;var p=d.exec(t),m=p?p.index-f:t.length-f;if(m){var g=document.createTextNode(u.slice(f,f+m));a&&s<9?c.appendChild(D("span",[g])):c.appendChild(g),e.map.push(e.pos,e.pos+m,g),e.col+=m,e.pos+=m}if(!p)break;f+=m+1;var v=void 0;if("\t"==p[0]){var b=e.cm.options.tabSize,y=b-e.col%b;v=c.appendChild(D("span",G(y),"cm-tab")),v.setAttribute("role","presentation"),v.setAttribute("cm-text","\t"),e.col+=y}else"\r"==p[0]||"\n"==p[0]?(v=c.appendChild(D("span","\r"==p[0]?"␍":"␤","cm-invalidchar")),v.setAttribute("cm-text",p[0]),e.col+=1):(v=e.cm.options.specialCharPlaceholder(p[0]),v.setAttribute("cm-text",p[0]),a&&s<9?c.appendChild(D("span",[v])):c.appendChild(v),e.col+=1);e.map.push(e.pos,e.pos+1,v),e.pos++}}else e.col+=t.length,c=document.createTextNode(u),e.map.push(e.pos,e.pos+t.length,c),a&&s<9&&(h=!0),e.pos+=t.length;if(e.trailingSpace=32==u.charCodeAt(t.length-1),n||i||r||h||o||l){var w=n||"";i&&(w+=i),r&&(w+=r);var x=D("span",[c],w,o);if(l)for(var _ in l)l.hasOwnProperty(_)&&"style"!=_&&"class"!=_&&x.setAttribute(_,l[_]);return e.content.appendChild(x)}e.content.appendChild(c)}}function vn(e,t){if(e.length>1&&!/  /.test(e))return e;for(var n=t,i="",r=0;r<e.length;r++){var o=e.charAt(r);" "!=o||!n||r!=e.length-1&&32!=e.charCodeAt(r+1)||(o=" "),i+=o,n=" "==o}return i}function bn(e,t){return function(n,i,r,o,a,s,l){r=r?r+" cm-force-border":"cm-force-border";for(var c=n.pos,u=c+i.length;;){for(var d=void 0,h=0;h<t.length;h++)if(d=t[h],d.to>c&&d.from<=c)break;if(d.to>=u)return e(n,i,r,o,a,s,l);e(n,i.slice(0,d.to-c),r,o,null,s,l),o=null,i=i.slice(d.to-c),c=d.to}}}function yn(e,t,n,i){var r=!i&&n.widgetNode;r&&e.map.push(e.pos,e.pos+t,r),!i&&e.cm.display.input.needsContentAttribute&&(r||(r=e.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",n.id)),r&&(e.cm.display.input.setUneditable(r),e.content.appendChild(r)),e.pos+=t,e.trailingSpace=!1}function wn(e,t,n){var i=e.markedSpans,r=e.text,o=0;if(i)for(var a,s,l,c,u,d,h,f=r.length,p=0,m=1,g="",v=0;;){if(v==p){l=c=u=s="",h=null,d=null,v=1/0;for(var b=[],y=void 0,w=0;w<i.length;++w){var x=i[w],_=x.marker;if("bookmark"==_.type&&x.from==p&&_.widgetNode)b.push(_);else if(x.from<=p&&(null==x.to||x.to>p||_.collapsed&&x.to==p&&x.from==p)){if(null!=x.to&&x.to!=p&&v>x.to&&(v=x.to,c=""),_.className&&(l+=" "+_.className),_.css&&(s=(s?s+";":"")+_.css),_.startStyle&&x.from==p&&(u+=" "+_.startStyle),_.endStyle&&x.to==v&&(y||(y=[])).push(_.endStyle,x.to),_.title&&((h||(h={})).title=_.title),_.attributes)for(var k in _.attributes)(h||(h={}))[k]=_.attributes[k];_.collapsed&&(!d||qt(d.marker,_)<0)&&(d=x)}else x.from>p&&v>x.from&&(v=x.from)}if(y)for(var C=0;C<y.length;C+=2)y[C+1]==v&&(c+=" "+y[C]);if(!d||d.from==p)for(var S=0;S<b.length;++S)yn(t,0,b[S]);if(d&&(d.from||0)==p){if(yn(t,(null==d.to?f+1:d.to)-p,d.marker,null==d.from),null==d.to)return;d.to==p&&(d=!1)}}if(p>=f)break;var O=Math.min(f,v);while(1){if(g){var T=p+g.length;if(!d){var E=T>O?g.slice(0,O-p):g;t.addToken(t,E,a?a+l:l,u,p+E.length==v?c:"",s,h)}if(T>=O){g=g.slice(O-p),p=O;break}p=T,u=""}g=r.slice(o,o=n[m++]),a=fn(n[m++],t.cm.options)}}else for(var D=1;D<n.length;D+=2)t.addToken(t,r.slice(o,o=n[D]),fn(n[D+1],t.cm.options))}function xn(e,t,n){this.line=t,this.rest=Jt(t),this.size=this.rest?et(Y(this.rest))-n+1:1,this.node=this.text=null,this.hidden=nn(e,t)}function _n(e,t,n){for(var i,r=[],o=t;o<n;o=i){var a=new xn(e.doc,Xe(e.doc,o),o);i=o+a.size,r.push(a)}return r}var kn=null;function Cn(e){kn?kn.ops.push(e):e.ownsGroup=kn={ops:[e],delayedCallbacks:[]}}function Sn(e){var t=e.delayedCallbacks,n=0;do{for(;n<t.length;n++)t[n].call(null);for(var i=0;i<e.ops.length;i++){var r=e.ops[i];if(r.cursorActivityHandlers)while(r.cursorActivityCalled<r.cursorActivityHandlers.length)r.cursorActivityHandlers[r.cursorActivityCalled++].call(null,r.cm)}}while(n<t.length)}function On(e,t){var n=e.ownsGroup;if(n)try{Sn(n)}finally{kn=null,t(n)}}var Tn=null;function En(e,t){var n=me(e,t);if(n.length){var i,r=Array.prototype.slice.call(arguments,2);kn?i=kn.delayedCallbacks:Tn?i=Tn:(i=Tn=[],setTimeout(Dn,0));for(var o=function(e){i.push((function(){return n[e].apply(null,r)}))},a=0;a<n.length;++a)o(a)}}function Dn(){var e=Tn;Tn=null;for(var t=0;t<e.length;++t)e[t]()}function Mn(e,t,n,i){for(var r=0;r<t.changes.length;r++){var o=t.changes[r];"text"==o?Ln(e,t):"gutter"==o?$n(e,t,n,i):"class"==o?Pn(e,t):"widget"==o&&Fn(e,t,i)}t.changes=null}function An(e){return e.node==e.text&&(e.node=D("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),a&&s<8&&(e.node.style.zIndex=2)),e.node}function Nn(e,t){var n=t.bgClass?t.bgClass+" "+(t.line.bgClass||""):t.line.bgClass;if(n&&(n+=" CodeMirror-linebackground"),t.background)n?t.background.className=n:(t.background.parentNode.removeChild(t.background),t.background=null);else if(n){var i=An(t);t.background=i.insertBefore(D("div",null,n),i.firstChild),e.display.input.setUneditable(t.background)}}function In(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):pn(e,t)}function Ln(e,t){var n=t.text.className,i=In(e,t);t.text==t.node&&(t.node=i.pre),t.text.parentNode.replaceChild(i.pre,t.text),t.text=i.pre,i.bgClass!=t.bgClass||i.textClass!=t.textClass?(t.bgClass=i.bgClass,t.textClass=i.textClass,Pn(e,t)):n&&(t.text.className=n)}function Pn(e,t){Nn(e,t),t.line.wrapClass?An(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className="");var n=t.textClass?t.textClass+" "+(t.line.textClass||""):t.line.textClass;t.text.className=n||""}function $n(e,t,n,i){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var r=An(t);t.gutterBackground=D("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px; width: "+i.gutterTotalWidth+"px"),e.display.input.setUneditable(t.gutterBackground),r.insertBefore(t.gutterBackground,t.text)}var o=t.line.gutterMarkers;if(e.options.lineNumbers||o){var a=An(t),s=t.gutter=D("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px");if(e.display.input.setUneditable(s),a.insertBefore(s,t.text),t.line.gutterClass&&(s.className+=" "+t.line.gutterClass),!e.options.lineNumbers||o&&o["CodeMirror-linenumbers"]||(t.lineNumber=s.appendChild(D("div",it(e.options,n),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+i.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),o)for(var l=0;l<e.display.gutterSpecs.length;++l){var c=e.display.gutterSpecs[l].className,u=o.hasOwnProperty(c)&&o[c];u&&s.appendChild(D("div",[u],"CodeMirror-gutter-elt","left: "+i.gutterLeft[c]+"px; width: "+i.gutterWidth[c]+"px"))}}}function Fn(e,t,n){t.alignable&&(t.alignable=null);for(var i=C("CodeMirror-linewidget"),r=t.node.firstChild,o=void 0;r;r=o)o=r.nextSibling,i.test(r.className)&&t.node.removeChild(r);zn(e,t,n)}function jn(e,t,n,i){var r=In(e,t);return t.text=t.node=r.pre,r.bgClass&&(t.bgClass=r.bgClass),r.textClass&&(t.textClass=r.textClass),Pn(e,t),$n(e,t,n,i),zn(e,t,i),t.node}function zn(e,t,n){if(Bn(e,t.line,t,n,!0),t.rest)for(var i=0;i<t.rest.length;i++)Bn(e,t.rest[i],t,n,!1)}function Bn(e,t,n,i,r){if(t.widgets)for(var o=An(n),a=0,s=t.widgets;a<s.length;++a){var l=s[a],c=D("div",[l.node],"CodeMirror-linewidget"+(l.className?" "+l.className:""));l.handleMouseEvents||c.setAttribute("cm-ignore-events","true"),Rn(l,c,n,i),e.display.input.setUneditable(c),r&&l.above?o.insertBefore(c,n.gutter||n.text):o.appendChild(c),En(l,"redraw")}}function Rn(e,t,n,i){if(e.noHScroll){(n.alignable||(n.alignable=[])).push(t);var r=i.wrapperWidth;t.style.left=i.fixedPos+"px",e.coverGutter||(r-=i.gutterTotalWidth,t.style.paddingLeft=i.gutterTotalWidth+"px"),t.style.width=r+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-i.gutterTotalWidth+"px"))}function Vn(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!A(document.body,e.node)){var n="position: relative;";e.coverGutter&&(n+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(n+="width: "+t.display.wrapper.clientWidth+"px;"),E(t.display.measure,D("div",[e.node],null,n))}return e.height=e.node.parentNode.offsetHeight}function Hn(e,t){for(var n=Oe(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&"true"==n.getAttribute("cm-ignore-events")||n.parentNode==e.sizer&&n!=e.mover)return!0}function Wn(e){return e.lineSpace.offsetTop}function qn(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function Un(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=E(e.measure,D("pre","x","CodeMirror-line-like")),n=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,i={left:parseInt(n.paddingLeft),right:parseInt(n.paddingRight)};return isNaN(i.left)||isNaN(i.right)||(e.cachedPaddingH=i),i}function Kn(e){return R-e.display.nativeBarWidth}function Gn(e){return e.display.scroller.clientWidth-Kn(e)-e.display.barWidth}function Yn(e){return e.display.scroller.clientHeight-Kn(e)-e.display.barHeight}function Xn(e,t,n){var i=e.options.lineWrapping,r=i&&Gn(e);if(!t.measure.heights||i&&t.measure.width!=r){var o=t.measure.heights=[];if(i){t.measure.width=r;for(var a=t.text.firstChild.getClientRects(),s=0;s<a.length-1;s++){var l=a[s],c=a[s+1];Math.abs(l.bottom-c.bottom)>2&&o.push((l.bottom+c.top)/2-n.top)}}o.push(n.bottom-n.top)}}function Zn(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var i=0;i<e.rest.length;i++)if(e.rest[i]==t)return{map:e.measure.maps[i],cache:e.measure.caches[i]};for(var r=0;r<e.rest.length;r++)if(et(e.rest[r])>n)return{map:e.measure.maps[r],cache:e.measure.caches[r],before:!0}}function Qn(e,t){t=Zt(t);var n=et(t),i=e.display.externalMeasured=new xn(e.doc,t,n);i.lineN=n;var r=i.built=pn(e,i);return i.text=r.pre,E(e.display.lineMeasure,r.pre),i}function Jn(e,t,n,i){return ni(e,ti(e,t),n,i)}function ei(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[Pi(e,t)];var n=e.display.externalMeasured;return n&&t>=n.lineN&&t<n.lineN+n.size?n:void 0}function ti(e,t){var n=et(t),i=ei(e,n);i&&!i.text?i=null:i&&i.changes&&(Mn(e,i,n,Mi(e)),e.curOp.forceUpdate=!0),i||(i=Qn(e,t));var r=Zn(i,t,n);return{line:t,view:i,rect:null,map:r.map,cache:r.cache,before:r.before,hasHeights:!1}}function ni(e,t,n,i,r){t.before&&(n=-1);var o,a=n+(i||"");return t.cache.hasOwnProperty(a)?o=t.cache[a]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(Xn(e,t.view,t.rect),t.hasHeights=!0),o=si(e,t,n,i),o.bogus||(t.cache[a]=o)),{left:o.left,right:o.right,top:r?o.rtop:o.top,bottom:r?o.rbottom:o.bottom}}var ii,ri={left:0,right:0,top:0,bottom:0};function oi(e,t,n){for(var i,r,o,a,s,l,c=0;c<e.length;c+=3)if(s=e[c],l=e[c+1],t<s?(r=0,o=1,a="left"):t<l?(r=t-s,o=r+1):(c==e.length-3||t==l&&e[c+3]>t)&&(o=l-s,r=o-1,t>=l&&(a="right")),null!=r){if(i=e[c+2],s==l&&n==(i.insertLeft?"left":"right")&&(a=n),"left"==n&&0==r)while(c&&e[c-2]==e[c-3]&&e[c-1].insertLeft)i=e[2+(c-=3)],a="left";if("right"==n&&r==l-s)while(c<e.length-3&&e[c+3]==e[c+4]&&!e[c+5].insertLeft)i=e[(c+=3)+2],a="right";break}return{node:i,start:r,end:o,collapse:a,coverStart:s,coverEnd:l}}function ai(e,t){var n=ri;if("left"==t){for(var i=0;i<e.length;i++)if((n=e[i]).left!=n.right)break}else for(var r=e.length-1;r>=0;r--)if((n=e[r]).left!=n.right)break;return n}function si(e,t,n,i){var r,o=oi(t.map,n,i),l=o.node,c=o.start,u=o.end,d=o.collapse;if(3==l.nodeType){for(var h=0;h<4;h++){while(c&&oe(t.line.text.charAt(o.coverStart+c)))--c;while(o.coverStart+u<o.coverEnd&&oe(t.line.text.charAt(o.coverStart+u)))++u;if(r=a&&s<9&&0==c&&u==o.coverEnd-o.coverStart?l.parentNode.getBoundingClientRect():ai(S(l,c,u).getClientRects(),i),r.left||r.right||0==c)break;u=c,c-=1,d="right"}a&&s<11&&(r=li(e.display.measure,r))}else{var f;c>0&&(d=i="right"),r=e.options.lineWrapping&&(f=l.getClientRects()).length>1?f["right"==i?f.length-1:0]:l.getBoundingClientRect()}if(a&&s<9&&!c&&(!r||!r.left&&!r.right)){var p=l.parentNode.getClientRects()[0];r=p?{left:p.left,right:p.left+Di(e.display),top:p.top,bottom:p.bottom}:ri}for(var m=r.top-t.rect.top,g=r.bottom-t.rect.top,v=(m+g)/2,b=t.view.measure.heights,y=0;y<b.length-1;y++)if(v<b[y])break;var w=y?b[y-1]:0,x=b[y],_={left:("right"==d?r.right:r.left)-t.rect.left,right:("left"==d?r.left:r.right)-t.rect.left,top:w,bottom:x};return r.left||r.right||(_.bogus=!0),e.options.singleCursorHeightPerLine||(_.rtop=m,_.rbottom=g),_}function li(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!Fe(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,i=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*i,bottom:t.bottom*i}}function ci(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function ui(e){e.display.externalMeasure=null,T(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)ci(e.display.view[t])}function di(e){ui(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function hi(){return u&&g?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function fi(){return u&&g?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function pi(e){var t=0;if(e.widgets)for(var n=0;n<e.widgets.length;++n)e.widgets[n].above&&(t+=Vn(e.widgets[n]));return t}function mi(e,t,n,i,r){if(!r){var o=pi(t);n.top+=o,n.bottom+=o}if("line"==i)return n;i||(i="local");var a=on(t);if("local"==i?a+=Wn(e.display):a-=e.display.viewOffset,"page"==i||"window"==i){var s=e.display.lineSpace.getBoundingClientRect();a+=s.top+("window"==i?0:fi());var l=s.left+("window"==i?0:hi());n.left+=l,n.right+=l}return n.top+=a,n.bottom+=a,n}function gi(e,t,n){if("div"==n)return t;var i=t.left,r=t.top;if("page"==n)i-=hi(),r-=fi();else if("local"==n||!n){var o=e.display.sizer.getBoundingClientRect();i+=o.left,r+=o.top}var a=e.display.lineSpace.getBoundingClientRect();return{left:i-a.left,top:r-a.top}}function vi(e,t,n,i,r){return i||(i=Xe(e.doc,t.line)),mi(e,i,Jn(e,i,t.ch,r),n)}function bi(e,t,n,i,r,o){function a(t,a){var s=ni(e,r,t,a?"right":"left",o);return a?s.left=s.right:s.right=s.left,mi(e,i,s,n)}i=i||Xe(e.doc,t.line),r||(r=ti(e,i));var s=he(i,e.doc.direction),l=t.ch,c=t.sticky;if(l>=i.text.length?(l=i.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return a("before"==c?l-1:l,"before"==c);function u(e,t,n){var i=s[t],r=1==i.level;return a(n?e-1:e,r!=n)}var d=ue(s,l,c),h=ce,f=u(l,d,"before"==c);return null!=h&&(f.other=u(l,h,"before"!=c)),f}function yi(e,t){var n=0;t=dt(e.doc,t),e.options.lineWrapping||(n=Di(e.display)*t.ch);var i=Xe(e.doc,t.line),r=on(i)+Wn(e.display);return{left:n,right:n,top:r,bottom:r+i.height}}function wi(e,t,n,i,r){var o=rt(e,t,n);return o.xRel=r,i&&(o.outside=i),o}function xi(e,t,n){var i=e.doc;if(n+=e.display.viewOffset,n<0)return wi(i.first,0,null,-1,-1);var r=tt(i,n),o=i.first+i.size-1;if(r>o)return wi(i.first+i.size-1,Xe(i,o).text.length,null,1,1);t<0&&(t=0);for(var a=Xe(i,r);;){var s=Si(e,a,r,t,n),l=Yt(a,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==r)return c;a=Xe(i,r=c.line)}}function _i(e,t,n,i){i-=pi(t);var r=t.text.length,o=se((function(t){return ni(e,n,t-1).bottom<=i}),r,0);return r=se((function(t){return ni(e,n,t).top>i}),o,r),{begin:o,end:r}}function ki(e,t,n,i){n||(n=ti(e,t));var r=mi(e,t,ni(e,n,i),"line").top;return _i(e,t,n,r)}function Ci(e,t,n,i){return!(e.bottom<=n)&&(e.top>n||(i?e.left:e.right)>t)}function Si(e,t,n,i,r){r-=on(t);var o=ti(e,t),a=pi(t),s=0,l=t.text.length,c=!0,u=he(t,e.doc.direction);if(u){var d=(e.options.lineWrapping?Ti:Oi)(e,t,n,o,u,i,r);c=1!=d.level,s=c?d.from:d.to-1,l=c?d.to:d.from-1}var h,f,p=null,m=null,g=se((function(t){var n=ni(e,o,t);return n.top+=a,n.bottom+=a,!!Ci(n,i,r,!1)&&(n.top<=r&&n.left<=i&&(p=t,m=n),!0)}),s,l),v=!1;if(m){var b=i-m.left<m.right-i,y=b==c;g=p+(y?0:1),f=y?"after":"before",h=b?m.left:m.right}else{c||g!=l&&g!=s||g++,f=0==g?"after":g==t.text.length?"before":ni(e,o,g-(c?1:0)).bottom+a<=r==c?"after":"before";var w=bi(e,rt(n,g,f),"line",t,o);h=w.left,v=r<w.top?-1:r>=w.bottom?1:0}return g=ae(t.text,g,1),wi(n,g,f,v,i-h)}function Oi(e,t,n,i,r,o,a){var s=se((function(s){var l=r[s],c=1!=l.level;return Ci(bi(e,rt(n,c?l.to:l.from,c?"before":"after"),"line",t,i),o,a,!0)}),0,r.length-1),l=r[s];if(s>0){var c=1!=l.level,u=bi(e,rt(n,c?l.from:l.to,c?"after":"before"),"line",t,i);Ci(u,o,a,!0)&&u.top>a&&(l=r[s-1])}return l}function Ti(e,t,n,i,r,o,a){var s=_i(e,t,i,a),l=s.begin,c=s.end;/\s/.test(t.text.charAt(c-1))&&c--;for(var u=null,d=null,h=0;h<r.length;h++){var f=r[h];if(!(f.from>=c||f.to<=l)){var p=1!=f.level,m=ni(e,i,p?Math.min(c,f.to)-1:Math.max(l,f.from)).right,g=m<o?o-m+1e9:m-o;(!u||d>g)&&(u=f,d=g)}}return u||(u=r[r.length-1]),u.from<l&&(u={from:l,to:u.to,level:u.level}),u.to>c&&(u={from:u.from,to:c,level:u.level}),u}function Ei(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==ii){ii=D("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)ii.appendChild(document.createTextNode("x")),ii.appendChild(D("br"));ii.appendChild(document.createTextNode("x"))}E(e.measure,ii);var n=ii.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),T(e.measure),n||1}function Di(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=D("span","xxxxxxxxxx"),n=D("pre",[t],"CodeMirror-line-like");E(e.measure,n);var i=t.getBoundingClientRect(),r=(i.right-i.left)/10;return r>2&&(e.cachedCharWidth=r),r||10}function Mi(e){for(var t=e.display,n={},i={},r=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a){var s=e.display.gutterSpecs[a].className;n[s]=o.offsetLeft+o.clientLeft+r,i[s]=o.clientWidth}return{fixedPos:Ai(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:i,wrapperWidth:t.wrapper.clientWidth}}function Ai(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function Ni(e){var t=Ei(e.display),n=e.options.lineWrapping,i=n&&Math.max(5,e.display.scroller.clientWidth/Di(e.display)-3);return function(r){if(nn(e.doc,r))return 0;var o=0;if(r.widgets)for(var a=0;a<r.widgets.length;a++)r.widgets[a].height&&(o+=r.widgets[a].height);return n?o+(Math.ceil(r.text.length/i)||1)*t:o+t}}function Ii(e){var t=e.doc,n=Ni(e);t.iter((function(e){var t=n(e);t!=e.height&&Je(e,t)}))}function Li(e,t,n,i){var r=e.display;if(!n&&"true"==Oe(t).getAttribute("cm-not-content"))return null;var o,a,s=r.lineSpace.getBoundingClientRect();try{o=t.clientX-s.left,a=t.clientY-s.top}catch(d){return null}var l,c=xi(e,o,a);if(i&&c.xRel>0&&(l=Xe(e.doc,c.line).text).length==c.ch){var u=j(l,l.length,e.options.tabSize)-l.length;c=rt(c.line,Math.max(0,Math.round((o-Un(e.display).left)/Di(e.display))-u))}return c}function Pi(e,t){if(t>=e.display.viewTo)return null;if(t-=e.display.viewFrom,t<0)return null;for(var n=e.display.view,i=0;i<n.length;i++)if(t-=n[i].size,t<0)return i}function $i(e,t,n,i){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e.doc.size),i||(i=0);var r=e.display;if(i&&n<r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>t)&&(r.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=r.viewTo)Dt&&en(e.doc,t)<r.viewTo&&ji(e);else if(n<=r.viewFrom)Dt&&tn(e.doc,n+i)>r.viewFrom?ji(e):(r.viewFrom+=i,r.viewTo+=i);else if(t<=r.viewFrom&&n>=r.viewTo)ji(e);else if(t<=r.viewFrom){var o=zi(e,n,n+i,1);o?(r.view=r.view.slice(o.index),r.viewFrom=o.lineN,r.viewTo+=i):ji(e)}else if(n>=r.viewTo){var a=zi(e,t,t,-1);a?(r.view=r.view.slice(0,a.index),r.viewTo=a.lineN):ji(e)}else{var s=zi(e,t,t,-1),l=zi(e,n,n+i,1);s&&l?(r.view=r.view.slice(0,s.index).concat(_n(e,s.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=i):ji(e)}var c=r.externalMeasured;c&&(n<c.lineN?c.lineN+=i:t<c.lineN+c.size&&(r.externalMeasured=null))}function Fi(e,t,n){e.curOp.viewChanged=!0;var i=e.display,r=e.display.externalMeasured;if(r&&t>=r.lineN&&t<r.lineN+r.size&&(i.externalMeasured=null),!(t<i.viewFrom||t>=i.viewTo)){var o=i.view[Pi(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==B(a,n)&&a.push(n)}}}function ji(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function zi(e,t,n,i){var r,o=Pi(e,t),a=e.display.view;if(!Dt||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var s=e.display.viewFrom,l=0;l<o;l++)s+=a[l].size;if(s!=t){if(i>0){if(o==a.length-1)return null;r=s+a[o].size-t,o++}else r=s-t;t+=r,n+=r}while(en(e.doc,n)!=n){if(o==(i<0?0:a.length-1))return null;n+=i*a[o-(i<0?1:0)].size,o+=i}return{index:o,lineN:n}}function Bi(e,t,n){var i=e.display,r=i.view;0==r.length||t>=i.viewTo||n<=i.viewFrom?(i.view=_n(e,t,n),i.viewFrom=t):(i.viewFrom>t?i.view=_n(e,t,i.viewFrom).concat(i.view):i.viewFrom<t&&(i.view=i.view.slice(Pi(e,t))),i.viewFrom=t,i.viewTo<n?i.view=i.view.concat(_n(e,i.viewTo,n)):i.viewTo>n&&(i.view=i.view.slice(0,Pi(e,n)))),i.viewTo=n}function Ri(e){for(var t=e.display.view,n=0,i=0;i<t.length;i++){var r=t[i];r.hidden||r.node&&!r.changes||++n}return n}function Vi(e){e.display.input.showSelection(e.display.input.prepareSelection())}function Hi(e,t){void 0===t&&(t=!0);for(var n=e.doc,i={},r=i.cursors=document.createDocumentFragment(),o=i.selection=document.createDocumentFragment(),a=0;a<n.sel.ranges.length;a++)if(t||a!=n.sel.primIndex){var s=n.sel.ranges[a];if(!(s.from().line>=e.display.viewTo||s.to().line<e.display.viewFrom)){var l=s.empty();(l||e.options.showCursorWhenSelecting)&&Wi(e,s.head,r),l||Ui(e,s,o)}}return i}function Wi(e,t,n){var i=bi(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),r=n.appendChild(D("div"," ","CodeMirror-cursor"));if(r.style.left=i.left+"px",r.style.top=i.top+"px",r.style.height=Math.max(0,i.bottom-i.top)*e.options.cursorHeight+"px",i.other){var o=n.appendChild(D("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));o.style.display="",o.style.left=i.other.left+"px",o.style.top=i.other.top+"px",o.style.height=.85*(i.other.bottom-i.other.top)+"px"}}function qi(e,t){return e.top-t.top||e.left-t.left}function Ui(e,t,n){var i=e.display,r=e.doc,o=document.createDocumentFragment(),a=Un(e.display),s=a.left,l=Math.max(i.sizerWidth,Gn(e)-i.sizer.offsetLeft)-a.right,c="ltr"==r.direction;function u(e,t,n,i){t<0&&(t=0),t=Math.round(t),i=Math.round(i),o.appendChild(D("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n                             top: "+t+"px; width: "+(null==n?l-e:n)+"px;\n                             height: "+(i-t)+"px"))}function d(t,n,i){var o,a,d=Xe(r,t),h=d.text.length;function f(n,i){return vi(e,rt(t,n),"div",d,i)}function p(t,n,i){var r=ki(e,d,null,t),o="ltr"==n==("after"==i)?"left":"right",a="after"==i?r.begin:r.end-(/\s/.test(d.text.charAt(r.end-1))?2:1);return f(a,o)[o]}var m=he(d,r.direction);return le(m,n||0,null==i?h:i,(function(e,t,r,d){var g="ltr"==r,v=f(e,g?"left":"right"),b=f(t-1,g?"right":"left"),y=null==n&&0==e,w=null==i&&t==h,x=0==d,_=!m||d==m.length-1;if(b.top-v.top<=3){var k=(c?y:w)&&x,C=(c?w:y)&&_,S=k?s:(g?v:b).left,O=C?l:(g?b:v).right;u(S,v.top,O-S,v.bottom)}else{var T,E,D,M;g?(T=c&&y&&x?s:v.left,E=c?l:p(e,r,"before"),D=c?s:p(t,r,"after"),M=c&&w&&_?l:b.right):(T=c?p(e,r,"before"):s,E=!c&&y&&x?l:v.right,D=!c&&w&&_?s:b.left,M=c?p(t,r,"after"):l),u(T,v.top,E-T,v.bottom),v.bottom<b.top&&u(s,v.bottom,null,b.top),u(D,b.top,M-D,b.bottom)}(!o||qi(v,o)<0)&&(o=v),qi(b,o)<0&&(o=b),(!a||qi(v,a)<0)&&(a=v),qi(b,a)<0&&(a=b)})),{start:o,end:a}}var h=t.from(),f=t.to();if(h.line==f.line)d(h.line,h.ch,f.ch);else{var p=Xe(r,h.line),m=Xe(r,f.line),g=Zt(p)==Zt(m),v=d(h.line,h.ch,g?p.text.length+1:null).end,b=d(f.line,g?0:null,f.ch).start;g&&(v.top<b.top-2?(u(v.right,v.top,null,v.bottom),u(s,b.top,b.left,b.bottom)):u(v.right,v.top,b.left-v.right,v.bottom)),v.bottom<b.top&&u(s,v.bottom,null,b.top)}n.appendChild(o)}function Ki(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var n=!0;t.cursorDiv.style.visibility="",e.options.cursorBlinkRate>0?t.blinker=setInterval((function(){e.hasFocus()||Zi(e),t.cursorDiv.style.visibility=(n=!n)?"":"hidden"}),e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Gi(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||Xi(e))}function Yi(e){e.state.delayingBlurEvent=!0,setTimeout((function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&Zi(e))}),100)}function Xi(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(ve(e,"focus",e,t),e.state.focused=!0,I(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),l&&setTimeout((function(){return e.display.input.reset(!0)}),20)),e.display.input.receivedFocus()),Ki(e))}function Zi(e,t){e.state.delayingBlurEvent||(e.state.focused&&(ve(e,"blur",e,t),e.state.focused=!1,O(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout((function(){e.state.focused||(e.display.shift=!1)}),150))}function Qi(e){for(var t=e.display,n=t.lineDiv.offsetTop,i=0;i<t.view.length;i++){var r=t.view[i],o=e.options.lineWrapping,l=void 0,c=0;if(!r.hidden){if(a&&s<8){var u=r.node.offsetTop+r.node.offsetHeight;l=u-n,n=u}else{var d=r.node.getBoundingClientRect();l=d.bottom-d.top,!o&&r.text.firstChild&&(c=r.text.firstChild.getBoundingClientRect().right-d.left-1)}var h=r.line.height-l;if((h>.005||h<-.005)&&(Je(r.line,l),Ji(r.line),r.rest))for(var f=0;f<r.rest.length;f++)Ji(r.rest[f]);if(c>e.display.sizerWidth){var p=Math.ceil(c/Di(e.display));p>e.display.maxLineLength&&(e.display.maxLineLength=p,e.display.maxLine=r.line,e.display.maxLineChanged=!0)}}}}function Ji(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var n=e.widgets[t],i=n.node.parentNode;i&&(n.height=i.offsetHeight)}}function er(e,t,n){var i=n&&null!=n.top?Math.max(0,n.top):e.scroller.scrollTop;i=Math.floor(i-Wn(e));var r=n&&null!=n.bottom?n.bottom:i+e.wrapper.clientHeight,o=tt(t,i),a=tt(t,r);if(n&&n.ensure){var s=n.ensure.from.line,l=n.ensure.to.line;s<o?(o=s,a=tt(t,on(Xe(t,s))+e.wrapper.clientHeight)):Math.min(l,t.lastLine())>=a&&(o=tt(t,on(Xe(t,l))-e.wrapper.clientHeight),a=l)}return{from:o,to:Math.max(a,o+1)}}function tr(e,t){if(!be(e,"scrollCursorIntoView")){var n=e.display,i=n.sizer.getBoundingClientRect(),r=null;if(t.top+i.top<0?r=!0:t.bottom+i.top>(window.innerHeight||document.documentElement.clientHeight)&&(r=!1),null!=r&&!p){var o=D("div","​",null,"position: absolute;\n                         top: "+(t.top-n.viewOffset-Wn(e.display))+"px;\n                         height: "+(t.bottom-t.top+Kn(e)+n.barHeight)+"px;\n                         left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(r),e.display.lineSpace.removeChild(o)}}}function nr(e,t,n,i){var r;null==i&&(i=0),e.options.lineWrapping||t!=n||(t=t.ch?rt(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t,n="before"==t.sticky?rt(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var a=!1,s=bi(e,t),l=n&&n!=t?bi(e,n):s;r={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-i,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+i};var c=rr(e,r),u=e.doc.scrollTop,d=e.doc.scrollLeft;if(null!=c.scrollTop&&(dr(e,c.scrollTop),Math.abs(e.doc.scrollTop-u)>1&&(a=!0)),null!=c.scrollLeft&&(fr(e,c.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(a=!0)),!a)break}return r}function ir(e,t){var n=rr(e,t);null!=n.scrollTop&&dr(e,n.scrollTop),null!=n.scrollLeft&&fr(e,n.scrollLeft)}function rr(e,t){var n=e.display,i=Ei(e.display);t.top<0&&(t.top=0);var r=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,o=Yn(e),a={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+qn(n),l=t.top<i,c=t.bottom>s-i;if(t.top<r)a.scrollTop=l?0:t.top;else if(t.bottom>r+o){var u=Math.min(t.top,(c?s:t.bottom)-o);u!=r&&(a.scrollTop=u)}var d=e.options.fixedGutter?0:n.gutters.offsetWidth,h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-d,f=Gn(e)-n.gutters.offsetWidth,p=t.right-t.left>f;return p&&(t.right=t.left+f),t.left<10?a.scrollLeft=0:t.left<h?a.scrollLeft=Math.max(0,t.left+d-(p?0:10)):t.right>f+h-3&&(a.scrollLeft=t.right+(p?0:10)-f),a}function or(e,t){null!=t&&(cr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function ar(e){cr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function sr(e,t,n){null==t&&null==n||cr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function lr(e,t){cr(e),e.curOp.scrollToPos=t}function cr(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;var n=yi(e,t.from),i=yi(e,t.to);ur(e,n,i,t.margin)}}function ur(e,t,n,i){var r=rr(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-i,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+i});sr(e,r.scrollLeft,r.scrollTop)}function dr(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||Vr(e,{top:t}),hr(e,t,!0),n&&Vr(e),Lr(e,100))}function hr(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function fr(e,t,n,i){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!i||(e.doc.scrollLeft=t,Ur(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function pr(e){var t=e.display,n=t.gutters.offsetWidth,i=Math.round(e.doc.height+qn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:i,scrollHeight:i+Kn(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var mr=function(e,t,n){this.cm=n;var i=this.vert=D("div",[D("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=D("div",[D("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");i.tabIndex=r.tabIndex=-1,e(i),e(r),pe(i,"scroll",(function(){i.clientHeight&&t(i.scrollTop,"vertical")})),pe(r,"scroll",(function(){r.clientWidth&&t(r.scrollLeft,"horizontal")})),this.checkedZeroWidth=!1,a&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};mr.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,i=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?i+"px":"0";var r=e.viewHeight-(t?i:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+r)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?i+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(n?i:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?i:0,bottom:t?i:0}},mr.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},mr.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},mr.prototype.zeroWidthHack=function(){var e=b&&!f?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new z,this.disableVert=new z},mr.prototype.enableZeroWidthBar=function(e,t,n){function i(){var r=e.getBoundingClientRect(),o="vert"==n?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1);o!=e?e.style.pointerEvents="none":t.set(1e3,i)}e.style.pointerEvents="auto",t.set(1e3,i)},mr.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var gr=function(){};function vr(e,t){t||(t=pr(e));var n=e.display.barWidth,i=e.display.barHeight;br(e,t);for(var r=0;r<4&&n!=e.display.barWidth||i!=e.display.barHeight;r++)n!=e.display.barWidth&&e.options.lineWrapping&&Qi(e),br(e,pr(e)),n=e.display.barWidth,i=e.display.barHeight}function br(e,t){var n=e.display,i=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=i.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=i.bottom)+"px",n.heightForcer.style.borderBottom=i.bottom+"px solid transparent",i.right&&i.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=i.bottom+"px",n.scrollbarFiller.style.width=i.right+"px"):n.scrollbarFiller.style.display="",i.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=i.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}gr.prototype.update=function(){return{bottom:0,right:0}},gr.prototype.setScrollLeft=function(){},gr.prototype.setScrollTop=function(){},gr.prototype.clear=function(){};var yr={native:mr,null:gr};function wr(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&O(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new yr[e.options.scrollbarStyle]((function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),pe(t,"mousedown",(function(){e.state.focused&&setTimeout((function(){return e.display.input.focus()}),0)})),t.setAttribute("cm-not-content","true")}),(function(t,n){"horizontal"==n?fr(e,t):dr(e,t)}),e),e.display.scrollbars.addClass&&I(e.display.wrapper,e.display.scrollbars.addClass)}var xr=0;function _r(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++xr},Cn(e.curOp)}function kr(e){var t=e.curOp;t&&On(t,(function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;Cr(e)}))}function Cr(e){for(var t=e.ops,n=0;n<t.length;n++)Sr(t[n]);for(var i=0;i<t.length;i++)Or(t[i]);for(var r=0;r<t.length;r++)Tr(t[r]);for(var o=0;o<t.length;o++)Er(t[o]);for(var a=0;a<t.length;a++)Dr(t[a])}function Sr(e){var t=e.cm,n=t.display;Fr(t),e.updateMaxLine&&sn(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<n.viewFrom||e.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new $r(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Or(e){e.updatedDisplay=e.mustUpdate&&Br(e.cm,e.update)}function Tr(e){var t=e.cm,n=t.display;e.updatedDisplay&&Qi(t),e.barMeasure=pr(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Jn(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+Kn(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Gn(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function Er(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&fr(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var n=e.focus&&e.focus==N();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,n),(e.updatedDisplay||e.startHeight!=t.doc.height)&&vr(t,e.barMeasure),e.updatedDisplay&&qr(t,e.barMeasure),e.selectionChanged&&Ki(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),n&&Gi(e.cm)}function Dr(e){var t=e.cm,n=t.display,i=t.doc;if(e.updatedDisplay&&Rr(t,e.update),null==n.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(n.wheelStartX=n.wheelStartY=null),null!=e.scrollTop&&hr(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&fr(t,e.scrollLeft,!0,!0),e.scrollToPos){var r=nr(t,dt(i,e.scrollToPos.from),dt(i,e.scrollToPos.to),e.scrollToPos.margin);tr(t,r)}var o=e.maybeHiddenMarkers,a=e.maybeUnhiddenMarkers;if(o)for(var s=0;s<o.length;++s)o[s].lines.length||ve(o[s],"hide");if(a)for(var l=0;l<a.length;++l)a[l].lines.length&&ve(a[l],"unhide");n.wrapper.offsetHeight&&(i.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&ve(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}function Mr(e,t){if(e.curOp)return t();_r(e);try{return t()}finally{kr(e)}}function Ar(e,t){return function(){if(e.curOp)return t.apply(e,arguments);_r(e);try{return t.apply(e,arguments)}finally{kr(e)}}}function Nr(e){return function(){if(this.curOp)return e.apply(this,arguments);_r(this);try{return e.apply(this,arguments)}finally{kr(this)}}}function Ir(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);_r(t);try{return e.apply(this,arguments)}finally{kr(t)}}}function Lr(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,$(Pr,e))}function Pr(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){var n=+new Date+e.options.workTime,i=bt(e,t.highlightFrontier),r=[];t.iter(i.line,Math.min(t.first+t.size,e.display.viewTo+500),(function(o){if(i.line>=e.display.viewFrom){var a=o.styles,s=o.text.length>e.options.maxHighlightLength?Ue(t.mode,i.state):null,l=gt(e,o,i,!0);s&&(i.state=s),o.styles=l.styles;var c=o.styleClasses,u=l.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var d=!a||a.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!d&&h<a.length;++h)d=a[h]!=o.styles[h];d&&r.push(i.line),o.stateAfter=i.save(),i.nextLine()}else o.text.length<=e.options.maxHighlightLength&&yt(e,o.text,i),o.stateAfter=i.line%5==0?i.save():null,i.nextLine();if(+new Date>n)return Lr(e,e.options.workDelay),!0})),t.highlightFrontier=i.line,t.modeFrontier=Math.max(t.modeFrontier,i.line),r.length&&Mr(e,(function(){for(var t=0;t<r.length;t++)Fi(e,r[t],"text")}))}}var $r=function(e,t,n){var i=e.display;this.viewport=t,this.visible=er(i,e.doc,t),this.editorIsHidden=!i.wrapper.offsetWidth,this.wrapperHeight=i.wrapper.clientHeight,this.wrapperWidth=i.wrapper.clientWidth,this.oldDisplayWidth=Gn(e),this.force=n,this.dims=Mi(e),this.events=[]};function Fr(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=Kn(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=Kn(e)+"px",t.scrollbarsClipped=!0)}function jr(e){if(e.hasFocus())return null;var t=N();if(!t||!A(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var i=window.getSelection();i.anchorNode&&i.extend&&A(e.display.lineDiv,i.anchorNode)&&(n.anchorNode=i.anchorNode,n.anchorOffset=i.anchorOffset,n.focusNode=i.focusNode,n.focusOffset=i.focusOffset)}return n}function zr(e){if(e&&e.activeElt&&e.activeElt!=N()&&(e.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(e.activeElt.nodeName)&&e.anchorNode&&A(document.body,e.anchorNode)&&A(document.body,e.focusNode))){var t=window.getSelection(),n=document.createRange();n.setEnd(e.anchorNode,e.anchorOffset),n.collapse(!1),t.removeAllRanges(),t.addRange(n),t.extend(e.focusNode,e.focusOffset)}}function Br(e,t){var n=e.display,i=e.doc;if(t.editorIsHidden)return ji(e),!1;if(!t.force&&t.visible.from>=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==Ri(e))return!1;Kr(e)&&(ji(e),t.dims=Mi(e));var r=i.first+i.size,o=Math.max(t.visible.from-e.options.viewportMargin,i.first),a=Math.min(r,t.visible.to+e.options.viewportMargin);n.viewFrom<o&&o-n.viewFrom<20&&(o=Math.max(i.first,n.viewFrom)),n.viewTo>a&&n.viewTo-a<20&&(a=Math.min(r,n.viewTo)),Dt&&(o=en(e.doc,o),a=tn(e.doc,a));var s=o!=n.viewFrom||a!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;Bi(e,o,a),n.viewOffset=on(Xe(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var l=Ri(e);if(!s&&0==l&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var c=jr(e);return l>4&&(n.lineDiv.style.display="none"),Hr(e,n.updateLineNumbers,t.dims),l>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,zr(c),T(n.cursorDiv),T(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,s&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,Lr(e,400)),n.updateLineNumbers=null,!0}function Rr(e,t){for(var n=t.viewport,i=!0;;i=!1){if(i&&e.options.lineWrapping&&t.oldDisplayWidth!=Gn(e))i&&(t.visible=er(e.display,e.doc,n));else if(n&&null!=n.top&&(n={top:Math.min(e.doc.height+qn(e.display)-Yn(e),n.top)}),t.visible=er(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!Br(e,t))break;Qi(e);var r=pr(e);Vi(e),vr(e,r),qr(e,r),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function Vr(e,t){var n=new $r(e,t);if(Br(e,n)){Qi(e),Rr(e,n);var i=pr(e);Vi(e),vr(e,i),qr(e,i),n.finish()}}function Hr(e,t,n){var i=e.display,r=e.options.lineNumbers,o=i.lineDiv,a=o.firstChild;function s(t){var n=t.nextSibling;return l&&b&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var c=i.view,u=i.viewFrom,d=0;d<c.length;d++){var h=c[d];if(h.hidden);else if(h.node&&h.node.parentNode==o){while(a!=h.node)a=s(a);var f=r&&null!=t&&t<=u&&h.lineNumber;h.changes&&(B(h.changes,"gutter")>-1&&(f=!1),Mn(e,h,u,n)),f&&(T(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(it(e.options,u)))),a=h.node.nextSibling}else{var p=jn(e,h,u,n);o.insertBefore(p,a)}u+=h.size}while(a)a=s(a)}function Wr(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px"}function qr(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Kn(e)+"px"}function Ur(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var i=Ai(t)-t.scroller.scrollLeft+e.doc.scrollLeft,r=t.gutters.offsetWidth,o=i+"px",a=0;a<n.length;a++)if(!n[a].hidden){e.options.fixedGutter&&(n[a].gutter&&(n[a].gutter.style.left=o),n[a].gutterBackground&&(n[a].gutterBackground.style.left=o));var s=n[a].alignable;if(s)for(var l=0;l<s.length;l++)s[l].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=i+r+"px")}}function Kr(e){if(!e.options.lineNumbers)return!1;var t=e.doc,n=it(e.options,t.first+t.size-1),i=e.display;if(n.length!=i.lineNumChars){var r=i.measure.appendChild(D("div",[D("div",n)],"CodeMirror-linenumber CodeMirror-gutter-elt")),o=r.firstChild.offsetWidth,a=r.offsetWidth-o;return i.lineGutter.style.width="",i.lineNumInnerWidth=Math.max(o,i.lineGutter.offsetWidth-a)+1,i.lineNumWidth=i.lineNumInnerWidth+a,i.lineNumChars=i.lineNumInnerWidth?n.length:-1,i.lineGutter.style.width=i.lineNumWidth+"px",Wr(e.display),!0}return!1}function Gr(e,t){for(var n=[],i=!1,r=0;r<e.length;r++){var o=e[r],a=null;if("string"!=typeof o&&(a=o.style,o=o.className),"CodeMirror-linenumbers"==o){if(!t)continue;i=!0}n.push({className:o,style:a})}return t&&!i&&n.push({className:"CodeMirror-linenumbers",style:null}),n}function Yr(e){var t=e.gutters,n=e.gutterSpecs;T(t),e.lineGutter=null;for(var i=0;i<n.length;++i){var r=n[i],o=r.className,a=r.style,s=t.appendChild(D("div",null,"CodeMirror-gutter "+o));a&&(s.style.cssText=a),"CodeMirror-linenumbers"==o&&(e.lineGutter=s,s.style.width=(e.lineNumWidth||1)+"px")}t.style.display=n.length?"":"none",Wr(e)}function Xr(e){Yr(e.display),$i(e),Ur(e)}function Zr(e,t,i,r){var o=this;this.input=i,o.scrollbarFiller=D("div",null,"CodeMirror-scrollbar-filler"),o.scrollbarFiller.setAttribute("cm-not-content","true"),o.gutterFiller=D("div",null,"CodeMirror-gutter-filler"),o.gutterFiller.setAttribute("cm-not-content","true"),o.lineDiv=M("div",null,"CodeMirror-code"),o.selectionDiv=D("div",null,null,"position: relative; z-index: 1"),o.cursorDiv=D("div",null,"CodeMirror-cursors"),o.measure=D("div",null,"CodeMirror-measure"),o.lineMeasure=D("div",null,"CodeMirror-measure"),o.lineSpace=M("div",[o.measure,o.lineMeasure,o.selectionDiv,o.cursorDiv,o.lineDiv],null,"position: relative; outline: none");var c=M("div",[o.lineSpace],"CodeMirror-lines");o.mover=D("div",[c],null,"position: relative"),o.sizer=D("div",[o.mover],"CodeMirror-sizer"),o.sizerWidth=null,o.heightForcer=D("div",null,null,"position: absolute; height: "+R+"px; width: 1px;"),o.gutters=D("div",null,"CodeMirror-gutters"),o.lineGutter=null,o.scroller=D("div",[o.sizer,o.heightForcer,o.gutters],"CodeMirror-scroll"),o.scroller.setAttribute("tabIndex","-1"),o.wrapper=D("div",[o.scrollbarFiller,o.gutterFiller,o.scroller],"CodeMirror"),a&&s<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),l||n&&v||(o.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(o.wrapper):e(o.wrapper)),o.viewFrom=o.viewTo=t.first,o.reportedViewFrom=o.reportedViewTo=t.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,o.gutterSpecs=Gr(r.gutters,r.lineNumbers),Yr(o),i.init(o)}$r.prototype.signal=function(e,t){we(e,t)&&this.events.push(arguments)},$r.prototype.finish=function(){for(var e=0;e<this.events.length;e++)ve.apply(null,this.events[e])};var Qr=0,Jr=null;function eo(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==n&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:null==n&&(n=e.wheelDelta),{x:t,y:n}}function to(e){var t=eo(e);return t.x*=Jr,t.y*=Jr,t}function no(e,t){var i=eo(t),r=i.x,o=i.y,a=e.display,s=a.scroller,c=s.scrollWidth>s.clientWidth,u=s.scrollHeight>s.clientHeight;if(r&&c||o&&u){if(o&&b&&l)e:for(var h=t.target,f=a.view;h!=s;h=h.parentNode)for(var p=0;p<f.length;p++)if(f[p].node==h){e.display.currentWheelTarget=h;break e}if(r&&!n&&!d&&null!=Jr)return o&&u&&dr(e,Math.max(0,s.scrollTop+o*Jr)),fr(e,Math.max(0,s.scrollLeft+r*Jr)),(!o||o&&u)&&_e(t),void(a.wheelStartX=null);if(o&&null!=Jr){var m=o*Jr,g=e.doc.scrollTop,v=g+a.wrapper.clientHeight;m<0?g=Math.max(0,g+m-50):v=Math.min(e.doc.height,v+m+50),Vr(e,{top:g,bottom:v})}Qr<20&&(null==a.wheelStartX?(a.wheelStartX=s.scrollLeft,a.wheelStartY=s.scrollTop,a.wheelDX=r,a.wheelDY=o,setTimeout((function(){if(null!=a.wheelStartX){var e=s.scrollLeft-a.wheelStartX,t=s.scrollTop-a.wheelStartY,n=t&&a.wheelDY&&t/a.wheelDY||e&&a.wheelDX&&e/a.wheelDX;a.wheelStartX=a.wheelStartY=null,n&&(Jr=(Jr*Qr+n)/(Qr+1),++Qr)}}),200)):(a.wheelDX+=r,a.wheelDY+=o))}}a?Jr=-.53:n?Jr=15:u?Jr=-.7:h&&(Jr=-1/3);var io=function(e,t){this.ranges=e,this.primIndex=t};io.prototype.primary=function(){return this.ranges[this.primIndex]},io.prototype.equals=function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],i=e.ranges[t];if(!at(n.anchor,i.anchor)||!at(n.head,i.head))return!1}return!0},io.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new ro(st(this.ranges[t].anchor),st(this.ranges[t].head));return new io(e,this.primIndex)},io.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},io.prototype.contains=function(e,t){t||(t=e);for(var n=0;n<this.ranges.length;n++){var i=this.ranges[n];if(ot(t,i.from())>=0&&ot(e,i.to())<=0)return n}return-1};var ro=function(e,t){this.anchor=e,this.head=t};function oo(e,t,n){var i=e&&e.options.selectionsMayTouch,r=t[n];t.sort((function(e,t){return ot(e.from(),t.from())})),n=B(t,r);for(var o=1;o<t.length;o++){var a=t[o],s=t[o-1],l=ot(s.to(),a.from());if(i&&!a.empty()?l>0:l>=0){var c=ct(s.from(),a.from()),u=lt(s.to(),a.to()),d=s.empty()?a.from()==a.head:s.from()==s.head;o<=n&&--n,t.splice(--o,2,new ro(d?u:c,d?c:u))}}return new io(t,n)}function ao(e,t){return new io([new ro(e,t||e)],0)}function so(e){return e.text?rt(e.from.line+e.text.length-1,Y(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function lo(e,t){if(ot(e,t.from)<0)return e;if(ot(e,t.to)<=0)return so(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,i=e.ch;return e.line==t.to.line&&(i+=so(t).ch-t.to.ch),rt(n,i)}function co(e,t){for(var n=[],i=0;i<e.sel.ranges.length;i++){var r=e.sel.ranges[i];n.push(new ro(lo(r.anchor,t),lo(r.head,t)))}return oo(e.cm,n,e.sel.primIndex)}function uo(e,t,n){return e.line==t.line?rt(n.line,e.ch-t.ch+n.ch):rt(n.line+(e.line-t.line),e.ch)}function ho(e,t,n){for(var i=[],r=rt(e.first,0),o=r,a=0;a<t.length;a++){var s=t[a],l=uo(s.from,r,o),c=uo(so(s),r,o);if(r=s.to,o=c,"around"==n){var u=e.sel.ranges[a],d=ot(u.head,u.anchor)<0;i[a]=new ro(d?c:l,d?l:c)}else i[a]=new ro(l,l)}return new io(i,e.sel.primIndex)}function fo(e){e.doc.mode=He(e.options,e.doc.modeOption),po(e)}function po(e){e.doc.iter((function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)})),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,Lr(e,100),e.state.modeGen++,e.curOp&&$i(e)}function mo(e,t){return 0==t.from.ch&&0==t.to.ch&&""==Y(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function go(e,t,n,i){function r(e){return n?n[e]:null}function o(e,n,r){cn(e,n,r,i),En(e,"change",e,t)}function a(e,t){for(var n=[],o=e;o<t;++o)n.push(new ln(c[o],r(o),i));return n}var s=t.from,l=t.to,c=t.text,u=Xe(e,s.line),d=Xe(e,l.line),h=Y(c),f=r(c.length-1),p=l.line-s.line;if(t.full)e.insert(0,a(0,c.length)),e.remove(c.length,e.size-c.length);else if(mo(e,t)){var m=a(0,c.length-1);o(d,d.text,f),p&&e.remove(s.line,p),m.length&&e.insert(s.line,m)}else if(u==d)if(1==c.length)o(u,u.text.slice(0,s.ch)+h+u.text.slice(l.ch),f);else{var g=a(1,c.length-1);g.push(new ln(h+u.text.slice(l.ch),f,i)),o(u,u.text.slice(0,s.ch)+c[0],r(0)),e.insert(s.line+1,g)}else if(1==c.length)o(u,u.text.slice(0,s.ch)+c[0]+d.text.slice(l.ch),r(0)),e.remove(s.line+1,p);else{o(u,u.text.slice(0,s.ch)+c[0],r(0)),o(d,h+d.text.slice(l.ch),f);var v=a(1,c.length-1);p>1&&e.remove(s.line+1,p-1),e.insert(s.line+1,v)}En(e,"change",e,t)}function vo(e,t,n){function i(e,r,o){if(e.linked)for(var a=0;a<e.linked.length;++a){var s=e.linked[a];if(s.doc!=r){var l=o&&s.sharedHist;n&&!l||(t(s.doc,l),i(s.doc,e,l))}}}i(e,null,!0)}function bo(e,t){if(t.cm)throw new Error("This document is already in use.");e.doc=t,t.cm=e,Ii(e),fo(e),yo(e),e.options.lineWrapping||sn(e),e.options.mode=t.modeOption,$i(e)}function yo(e){("rtl"==e.doc.direction?I:O)(e.display.lineDiv,"CodeMirror-rtl")}function wo(e){Mr(e,(function(){yo(e),$i(e)}))}function xo(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function _o(e,t){var n={from:st(t.from),to:so(t),text:Ze(e,t.from,t.to)};return Do(e,n,t.from.line,t.to.line+1),vo(e,(function(e){return Do(e,n,t.from.line,t.to.line+1)}),!0),n}function ko(e){while(e.length){var t=Y(e);if(!t.ranges)break;e.pop()}}function Co(e,t){return t?(ko(e.done),Y(e.done)):e.done.length&&!Y(e.done).ranges?Y(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),Y(e.done)):void 0}function So(e,t,n,i){var r=e.history;r.undone.length=0;var o,a,s=+new Date;if((r.lastOp==i||r.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&r.lastModTime>s-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=Co(r,r.lastOp==i)))a=Y(o.changes),0==ot(t.from,t.to)&&0==ot(t.from,a.to)?a.to=so(t):o.changes.push(_o(e,t));else{var l=Y(r.done);l&&l.ranges||Eo(e.sel,r.done),o={changes:[_o(e,t)],generation:r.generation},r.done.push(o);while(r.done.length>r.undoDepth)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(n),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=s,r.lastOp=r.lastSelOp=i,r.lastOrigin=r.lastSelOrigin=t.origin,a||ve(e,"historyAdded")}function Oo(e,t,n,i){var r=t.charAt(0);return"*"==r||"+"==r&&n.ranges.length==i.ranges.length&&n.somethingSelected()==i.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function To(e,t,n,i){var r=e.history,o=i&&i.origin;n==r.lastSelOp||o&&r.lastSelOrigin==o&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==o||Oo(e,o,Y(r.done),t))?r.done[r.done.length-1]=t:Eo(t,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=o,r.lastSelOp=n,i&&!1!==i.clearRedo&&ko(r.undone)}function Eo(e,t){var n=Y(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Do(e,t,n,i){var r=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,i),(function(n){n.markedSpans&&((r||(r=t["spans_"+e.id]={}))[o]=n.markedSpans),++o}))}function Mo(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marker.explicitlyCleared?t||(t=e.slice(0,n)):t&&t.push(e[n]);return t?t.length?t:null:e}function Ao(e,t){var n=t["spans_"+e.id];if(!n)return null;for(var i=[],r=0;r<t.text.length;++r)i.push(Mo(n[r]));return i}function No(e,t){var n=Ao(e,t),i=jt(e,t);if(!n)return i;if(!i)return n;for(var r=0;r<n.length;++r){var o=n[r],a=i[r];if(o&&a)e:for(var s=0;s<a.length;++s){for(var l=a[s],c=0;c<o.length;++c)if(o[c].marker==l.marker)continue e;o.push(l)}else a&&(n[r]=a)}return n}function Io(e,t,n){for(var i=[],r=0;r<e.length;++r){var o=e[r];if(o.ranges)i.push(n?io.prototype.deepCopy.call(o):o);else{var a=o.changes,s=[];i.push({changes:s});for(var l=0;l<a.length;++l){var c=a[l],u=void 0;if(s.push({from:c.from,to:c.to,text:c.text}),t)for(var d in c)(u=d.match(/^spans_(\d+)$/))&&B(t,Number(u[1]))>-1&&(Y(s)[d]=c[d],delete c[d])}}}return i}function Lo(e,t,n,i){if(i){var r=e.anchor;if(n){var o=ot(t,r)<0;o!=ot(n,r)<0?(r=t,t=n):o!=ot(t,n)<0&&(t=n)}return new ro(r,t)}return new ro(n||t,t)}function Po(e,t,n,i,r){null==r&&(r=e.cm&&(e.cm.display.shift||e.extend)),Ro(e,new io([Lo(e.sel.primary(),t,n,r)],0),i)}function $o(e,t,n){for(var i=[],r=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)i[o]=Lo(e.sel.ranges[o],t[o],null,r);var a=oo(e.cm,i,e.sel.primIndex);Ro(e,a,n)}function Fo(e,t,n,i){var r=e.sel.ranges.slice(0);r[t]=n,Ro(e,oo(e.cm,r,e.sel.primIndex),i)}function jo(e,t,n,i){Ro(e,ao(t,n),i)}function zo(e,t,n){var i={ranges:t.ranges,update:function(t){this.ranges=[];for(var n=0;n<t.length;n++)this.ranges[n]=new ro(dt(e,t[n].anchor),dt(e,t[n].head))},origin:n&&n.origin};return ve(e,"beforeSelectionChange",e,i),e.cm&&ve(e.cm,"beforeSelectionChange",e.cm,i),i.ranges!=t.ranges?oo(e.cm,i.ranges,i.ranges.length-1):t}function Bo(e,t,n){var i=e.history.done,r=Y(i);r&&r.ranges?(i[i.length-1]=t,Vo(e,t,n)):Ro(e,t,n)}function Ro(e,t,n){Vo(e,t,n),To(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function Vo(e,t,n){(we(e,"beforeSelectionChange")||e.cm&&we(e.cm,"beforeSelectionChange"))&&(t=zo(e,t,n));var i=n&&n.bias||(ot(t.primary().head,e.sel.primary().head)<0?-1:1);Ho(e,qo(e,t,i,!0)),n&&!1===n.scroll||!e.cm||ar(e.cm)}function Ho(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=1,e.cm.curOp.selectionChanged=!0,ye(e.cm)),En(e,"cursorActivity",e))}function Wo(e){Ho(e,qo(e,e.sel,null,!1))}function qo(e,t,n,i){for(var r,o=0;o<t.ranges.length;o++){var a=t.ranges[o],s=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],l=Ko(e,a.anchor,s&&s.anchor,n,i),c=Ko(e,a.head,s&&s.head,n,i);(r||l!=a.anchor||c!=a.head)&&(r||(r=t.ranges.slice(0,o)),r[o]=new ro(l,c))}return r?oo(e.cm,r,t.primIndex):t}function Uo(e,t,n,i,r){var o=Xe(e,t.line);if(o.markedSpans)for(var a=0;a<o.markedSpans.length;++a){var s=o.markedSpans[a],l=s.marker,c="selectLeft"in l?!l.selectLeft:l.inclusiveLeft,u="selectRight"in l?!l.selectRight:l.inclusiveRight;if((null==s.from||(c?s.from<=t.ch:s.from<t.ch))&&(null==s.to||(u?s.to>=t.ch:s.to>t.ch))){if(r&&(ve(l,"beforeCursorEnter"),l.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!l.atomic)continue;if(n){var d=l.find(i<0?1:-1),h=void 0;if((i<0?u:c)&&(d=Go(e,d,-i,d&&d.line==t.line?o:null)),d&&d.line==t.line&&(h=ot(d,n))&&(i<0?h<0:h>0))return Uo(e,d,t,i,r)}var f=l.find(i<0?-1:1);return(i<0?c:u)&&(f=Go(e,f,i,f.line==t.line?o:null)),f?Uo(e,f,t,i,r):null}}return t}function Ko(e,t,n,i,r){var o=i||1,a=Uo(e,t,n,o,r)||!r&&Uo(e,t,n,o,!0)||Uo(e,t,n,-o,r)||!r&&Uo(e,t,n,-o,!0);return a||(e.cantEdit=!0,rt(e.first,0))}function Go(e,t,n,i){return n<0&&0==t.ch?t.line>e.first?dt(e,rt(t.line-1)):null:n>0&&t.ch==(i||Xe(e,t.line)).text.length?t.line<e.first+e.size-1?rt(t.line+1,0):null:new rt(t.line,t.ch+n)}function Yo(e){e.setSelection(rt(e.firstLine(),0),rt(e.lastLine()),H)}function Xo(e,t,n){var i={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return i.canceled=!0}};return n&&(i.update=function(t,n,r,o){t&&(i.from=dt(e,t)),n&&(i.to=dt(e,n)),r&&(i.text=r),void 0!==o&&(i.origin=o)}),ve(e,"beforeChange",e,i),e.cm&&ve(e.cm,"beforeChange",e.cm,i),i.canceled?(e.cm&&(e.cm.curOp.updateInput=2),null):{from:i.from,to:i.to,text:i.text,origin:i.origin}}function Zo(e,t,n){if(e.cm){if(!e.cm.curOp)return Ar(e.cm,Zo)(e,t,n);if(e.cm.state.suppressEdits)return}if(!(we(e,"beforeChange")||e.cm&&we(e.cm,"beforeChange"))||(t=Xo(e,t,!0),t)){var i=Et&&!n&&Bt(e,t.from,t.to);if(i)for(var r=i.length-1;r>=0;--r)Qo(e,{from:i[r].from,to:i[r].to,text:r?[""]:t.text,origin:t.origin});else Qo(e,t)}}function Qo(e,t){if(1!=t.text.length||""!=t.text[0]||0!=ot(t.from,t.to)){var n=co(e,t);So(e,t,n,e.cm?e.cm.curOp.id:NaN),ta(e,t,n,jt(e,t));var i=[];vo(e,(function(e,n){n||-1!=B(i,e.history)||(aa(e.history,t),i.push(e.history)),ta(e,t,null,jt(e,t))}))}}function Jo(e,t,n){var i=e.cm&&e.cm.state.suppressEdits;if(!i||n){for(var r,o=e.history,a=e.sel,s="undo"==t?o.done:o.undone,l="undo"==t?o.undone:o.done,c=0;c<s.length;c++)if(r=s[c],n?r.ranges&&!r.equals(e.sel):!r.ranges)break;if(c!=s.length){for(o.lastOrigin=o.lastSelOrigin=null;;){if(r=s.pop(),!r.ranges){if(i)return void s.push(r);break}if(Eo(r,l),n&&!r.equals(e.sel))return void Ro(e,r,{clearRedo:!1});a=r}var u=[];Eo(a,l),l.push({changes:u,generation:o.generation}),o.generation=r.generation||++o.maxGeneration;for(var d=we(e,"beforeChange")||e.cm&&we(e.cm,"beforeChange"),h=function(n){var i=r.changes[n];if(i.origin=t,d&&!Xo(e,i,!1))return s.length=0,{};u.push(_o(e,i));var o=n?co(e,i):Y(s);ta(e,i,o,No(e,i)),!n&&e.cm&&e.cm.scrollIntoView({from:i.from,to:so(i)});var a=[];vo(e,(function(e,t){t||-1!=B(a,e.history)||(aa(e.history,i),a.push(e.history)),ta(e,i,null,No(e,i))}))},f=r.changes.length-1;f>=0;--f){var p=h(f);if(p)return p.v}}}}function ea(e,t){if(0!=t&&(e.first+=t,e.sel=new io(X(e.sel.ranges,(function(e){return new ro(rt(e.anchor.line+t,e.anchor.ch),rt(e.head.line+t,e.head.ch))})),e.sel.primIndex),e.cm)){$i(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,i=n.viewFrom;i<n.viewTo;i++)Fi(e.cm,i,"gutter")}}function ta(e,t,n,i){if(e.cm&&!e.cm.curOp)return Ar(e.cm,ta)(e,t,n,i);if(t.to.line<e.first)ea(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var r=t.text.length-1-(e.first-t.from.line);ea(e,r),t={from:rt(e.first,0),to:rt(t.to.line+r,t.to.ch),text:[Y(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:rt(o,Xe(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Ze(e,t.from,t.to),n||(n=co(e,t)),e.cm?na(e.cm,t,i):go(e,t,i),Vo(e,n,H),e.cantEdit&&Ko(e,rt(e.firstLine(),0))&&(e.cantEdit=!1)}}function na(e,t,n){var i=e.doc,r=e.display,o=t.from,a=t.to,s=!1,l=o.line;e.options.lineWrapping||(l=et(Zt(Xe(i,o.line))),i.iter(l,a.line+1,(function(e){if(e==r.maxLine)return s=!0,!0}))),i.sel.contains(t.from,t.to)>-1&&ye(e),go(i,t,n,Ni(e)),e.options.lineWrapping||(i.iter(l,o.line+t.text.length,(function(e){var t=an(e);t>r.maxLineLength&&(r.maxLine=e,r.maxLineLength=t,r.maxLineChanged=!0,s=!1)})),s&&(e.curOp.updateMaxLine=!0)),Tt(i,o.line),Lr(e,400);var c=t.text.length-(a.line-o.line)-1;t.full?$i(e):o.line!=a.line||1!=t.text.length||mo(e.doc,t)?$i(e,o.line,a.line+1,c):Fi(e,o.line,"text");var u=we(e,"changes"),d=we(e,"change");if(d||u){var h={from:o,to:a,text:t.text,removed:t.removed,origin:t.origin};d&&En(e,"change",e,h),u&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(h)}e.display.selForContextMenu=null}function ia(e,t,n,i,r){var o;i||(i=n),ot(i,n)<0&&(o=[i,n],n=o[0],i=o[1]),"string"==typeof t&&(t=e.splitLines(t)),Zo(e,{from:n,to:i,text:t,origin:r})}function ra(e,t,n,i){n<e.line?e.line+=i:t<e.line&&(e.line=t,e.ch=0)}function oa(e,t,n,i){for(var r=0;r<e.length;++r){var o=e[r],a=!0;if(o.ranges){o.copied||(o=e[r]=o.deepCopy(),o.copied=!0);for(var s=0;s<o.ranges.length;s++)ra(o.ranges[s].anchor,t,n,i),ra(o.ranges[s].head,t,n,i)}else{for(var l=0;l<o.changes.length;++l){var c=o.changes[l];if(n<c.from.line)c.from=rt(c.from.line+i,c.from.ch),c.to=rt(c.to.line+i,c.to.ch);else if(t<=c.to.line){a=!1;break}}a||(e.splice(0,r+1),r=0)}}}function aa(e,t){var n=t.from.line,i=t.to.line,r=t.text.length-(i-n)-1;oa(e.done,n,i,r),oa(e.undone,n,i,r)}function sa(e,t,n,i){var r=t,o=t;return"number"==typeof t?o=Xe(e,ut(e,t)):r=et(t),null==r?null:(i(o,r)&&e.cm&&Fi(e.cm,r,n),o)}function la(e){this.lines=e,this.parent=null;for(var t=0,n=0;n<e.length;++n)e[n].parent=this,t+=e[n].height;this.height=t}function ca(e){this.children=e;for(var t=0,n=0,i=0;i<e.length;++i){var r=e[i];t+=r.chunkSize(),n+=r.height,r.parent=this}this.size=t,this.height=n,this.parent=null}ro.prototype.from=function(){return ct(this.anchor,this.head)},ro.prototype.to=function(){return lt(this.anchor,this.head)},ro.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},la.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var n=e,i=e+t;n<i;++n){var r=this.lines[n];this.height-=r.height,un(r),En(r,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,n){this.height+=n,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var i=0;i<t.length;++i)t[i].parent=this},iterN:function(e,t,n){for(var i=e+t;e<i;++e)if(n(this.lines[e]))return!0}},ca.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var n=0;n<this.children.length;++n){var i=this.children[n],r=i.chunkSize();if(e<r){var o=Math.min(t,r-e),a=i.height;if(i.removeInner(e,o),this.height-=a-i.height,r==o&&(this.children.splice(n--,1),i.parent=null),0==(t-=o))break;e=0}else e-=r}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof la))){var s=[];this.collapse(s),this.children=[new la(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,n){this.size+=t.length,this.height+=n;for(var i=0;i<this.children.length;++i){var r=this.children[i],o=r.chunkSize();if(e<=o){if(r.insertInner(e,t,n),r.lines&&r.lines.length>50){for(var a=r.lines.length%25+25,s=a;s<r.lines.length;){var l=new la(r.lines.slice(s,s+=25));r.height-=l.height,this.children.splice(++i,0,l),l.parent=this}r.lines=r.lines.slice(0,a),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=e.children.splice(e.children.length-5,5),n=new ca(t);if(e.parent){e.size-=n.size,e.height-=n.height;var i=B(e.parent.children,e);e.parent.children.splice(i+1,0,n)}else{var r=new ca(e.children);r.parent=e,e.children=[r,n],e=r}n.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var i=0;i<this.children.length;++i){var r=this.children[i],o=r.chunkSize();if(e<o){var a=Math.min(t,o-e);if(r.iterN(e,a,n))return!0;if(0==(t-=a))break;e=0}else e-=o}}};var ua=function(e,t,n){if(n)for(var i in n)n.hasOwnProperty(i)&&(this[i]=n[i]);this.doc=e,this.node=t};function da(e,t,n){on(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&or(e,n)}function ha(e,t,n,i){var r=new ua(e,n,i),o=e.cm;return o&&r.noHScroll&&(o.display.alignWidgets=!0),sa(e,t,"widget",(function(t){var n=t.widgets||(t.widgets=[]);if(null==r.insertAt?n.push(r):n.splice(Math.min(n.length,Math.max(0,r.insertAt)),0,r),r.line=t,o&&!nn(e,t)){var i=on(t)<e.scrollTop;Je(t,t.height+Vn(r)),i&&or(o,r.height),o.curOp.forceUpdate=!0}return!0})),o&&En(o,"lineWidgetAdded",o,r,"number"==typeof t?t:et(t)),r}ua.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,n=this.line,i=et(n);if(null!=i&&t){for(var r=0;r<t.length;++r)t[r]==this&&t.splice(r--,1);t.length||(n.widgets=null);var o=Vn(this);Je(n,Math.max(0,n.height-o)),e&&(Mr(e,(function(){da(e,n,-o),Fi(e,i,"widget")})),En(e,"lineWidgetCleared",e,this,i))}},ua.prototype.changed=function(){var e=this,t=this.height,n=this.doc.cm,i=this.line;this.height=null;var r=Vn(this)-t;r&&(nn(this.doc,i)||Je(i,i.height+r),n&&Mr(n,(function(){n.curOp.forceUpdate=!0,da(n,i,r),En(n,"lineWidgetChanged",n,e,et(i))})))},xe(ua);var fa=0,pa=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++fa};function ma(e,t,n,i,r){if(i&&i.shared)return va(e,t,n,i,r);if(e.cm&&!e.cm.curOp)return Ar(e.cm,ma)(e,t,n,i,r);var o=new pa(e,r),a=ot(t,n);if(i&&F(i,o,!1),a>0||0==a&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=M("span",[o.replacedWith],"CodeMirror-widget"),i.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),i.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(Xt(e,t.line,t,n,o)||t.line!=n.line&&Xt(e,n.line,t,n,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");At()}o.addToHistory&&So(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var s,l=t.line,c=e.cm;if(e.iter(l,n.line+1,(function(e){c&&o.collapsed&&!c.options.lineWrapping&&Zt(e)==c.display.maxLine&&(s=!0),o.collapsed&&l!=t.line&&Je(e,0),Pt(e,new Nt(o,l==t.line?t.ch:null,l==n.line?n.ch:null)),++l})),o.collapsed&&e.iter(t.line,n.line+1,(function(t){nn(e,t)&&Je(t,0)})),o.clearOnEnter&&pe(o,"beforeCursorEnter",(function(){return o.clear()})),o.readOnly&&(Mt(),(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++fa,o.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),o.collapsed)$i(c,t.line,n.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var u=t.line;u<=n.line;u++)Fi(c,u,"text");o.atomic&&Wo(c.doc),En(c,"markerAdded",c,o)}return o}pa.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&_r(e),we(this,"clear")){var n=this.find();n&&En(this,"clear",n.from,n.to)}for(var i=null,r=null,o=0;o<this.lines.length;++o){var a=this.lines[o],s=It(a.markedSpans,this);e&&!this.collapsed?Fi(e,et(a),"text"):e&&(null!=s.to&&(r=et(a)),null!=s.from&&(i=et(a))),a.markedSpans=Lt(a.markedSpans,s),null==s.from&&this.collapsed&&!nn(this.doc,a)&&e&&Je(a,Ei(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var l=0;l<this.lines.length;++l){var c=Zt(this.lines[l]),u=an(c);u>e.display.maxLineLength&&(e.display.maxLine=c,e.display.maxLineLength=u,e.display.maxLineChanged=!0)}null!=i&&e&&this.collapsed&&$i(e,i,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Wo(e.doc)),e&&En(e,"markerCleared",e,this,i,r),t&&kr(e),this.parent&&this.parent.clear()}},pa.prototype.find=function(e,t){var n,i;null==e&&"bookmark"==this.type&&(e=1);for(var r=0;r<this.lines.length;++r){var o=this.lines[r],a=It(o.markedSpans,this);if(null!=a.from&&(n=rt(t?o:et(o),a.from),-1==e))return n;if(null!=a.to&&(i=rt(t?o:et(o),a.to),1==e))return i}return n&&{from:n,to:i}},pa.prototype.changed=function(){var e=this,t=this.find(-1,!0),n=this,i=this.doc.cm;t&&i&&Mr(i,(function(){var r=t.line,o=et(t.line),a=ei(i,o);if(a&&(ci(a),i.curOp.selectionChanged=i.curOp.forceUpdate=!0),i.curOp.updateMaxLine=!0,!nn(n.doc,r)&&null!=n.height){var s=n.height;n.height=null;var l=Vn(n)-s;l&&Je(r,r.height+l)}En(i,"markerChanged",i,e)}))},pa.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=B(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},pa.prototype.detachLine=function(e){if(this.lines.splice(B(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},xe(pa);var ga=function(e,t){this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=this};function va(e,t,n,i,r){i=F(i),i.shared=!1;var o=[ma(e,t,n,i,r)],a=o[0],s=i.widgetNode;return vo(e,(function(e){s&&(i.widgetNode=s.cloneNode(!0)),o.push(ma(e,dt(e,t),dt(e,n),i,r));for(var l=0;l<e.linked.length;++l)if(e.linked[l].isParent)return;a=Y(o)})),new ga(o,a)}function ba(e){return e.findMarks(rt(e.first,0),e.clipPos(rt(e.lastLine())),(function(e){return e.parent}))}function ya(e,t){for(var n=0;n<t.length;n++){var i=t[n],r=i.find(),o=e.clipPos(r.from),a=e.clipPos(r.to);if(ot(o,a)){var s=ma(e,o,a,i.primary,i.primary.type);i.markers.push(s),s.parent=i}}}function wa(e){for(var t=function(t){var n=e[t],i=[n.primary.doc];vo(n.primary.doc,(function(e){return i.push(e)}));for(var r=0;r<n.markers.length;r++){var o=n.markers[r];-1==B(i,o.doc)&&(o.parent=null,n.markers.splice(r--,1))}},n=0;n<e.length;n++)t(n)}ga.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();En(this,"clear")}},ga.prototype.find=function(e,t){return this.primary.find(e,t)},xe(ga);var xa=0,_a=function e(t,n,i,r,o){if(!(this instanceof e))return new e(t,n,i,r,o);null==i&&(i=0),ca.call(this,[new la([new ln("",null)])]),this.first=i,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=i;var a=rt(i,0);this.sel=ao(a),this.history=new xo(null),this.id=++xa,this.modeOption=n,this.lineSep=r,this.direction="rtl"==o?"rtl":"ltr",this.extend=!1,"string"==typeof t&&(t=this.splitLines(t)),go(this,{from:a,to:a,text:t}),Ro(this,ao(a),H)};_a.prototype=J(ca.prototype,{constructor:_a,iter:function(e,t,n){n?this.iterN(e-this.first,t-e,n):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var n=0,i=0;i<t.length;++i)n+=t[i].height;this.insertInner(e-this.first,t,n)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=Qe(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:Ir((function(e){var t=rt(this.first,0),n=this.first+this.size-1;Zo(this,{from:t,to:rt(n,Xe(this,n).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),this.cm&&sr(this.cm,0,0),Ro(this,ao(t),H)})),replaceRange:function(e,t,n,i){t=dt(this,t),n=n?dt(this,n):t,ia(this,e,t,n,i)},getRange:function(e,t,n){var i=Ze(this,dt(this,e),dt(this,t));return!1===n?i:i.join(n||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(nt(this,e))return Xe(this,e)},getLineNumber:function(e){return et(e)},getLineHandleVisualStart:function(e){return"number"==typeof e&&(e=Xe(this,e)),Zt(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return dt(this,e)},getCursor:function(e){var t,n=this.sel.primary();return t=null==e||"head"==e?n.head:"anchor"==e?n.anchor:"end"==e||"to"==e||!1===e?n.to():n.from(),t},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Ir((function(e,t,n){jo(this,dt(this,"number"==typeof e?rt(e,t||0):e),null,n)})),setSelection:Ir((function(e,t,n){jo(this,dt(this,e),dt(this,t||e),n)})),extendSelection:Ir((function(e,t,n){Po(this,dt(this,e),t&&dt(this,t),n)})),extendSelections:Ir((function(e,t){$o(this,ft(this,e),t)})),extendSelectionsBy:Ir((function(e,t){var n=X(this.sel.ranges,e);$o(this,ft(this,n),t)})),setSelections:Ir((function(e,t,n){if(e.length){for(var i=[],r=0;r<e.length;r++)i[r]=new ro(dt(this,e[r].anchor),dt(this,e[r].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),Ro(this,oo(this.cm,i,t),n)}})),addSelection:Ir((function(e,t,n){var i=this.sel.ranges.slice(0);i.push(new ro(dt(this,e),dt(this,t||e))),Ro(this,oo(this.cm,i,i.length-1),n)})),getSelection:function(e){for(var t,n=this.sel.ranges,i=0;i<n.length;i++){var r=Ze(this,n[i].from(),n[i].to());t=t?t.concat(r):r}return!1===e?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,i=0;i<n.length;i++){var r=Ze(this,n[i].from(),n[i].to());!1!==e&&(r=r.join(e||this.lineSeparator())),t[i]=r}return t},replaceSelection:function(e,t,n){for(var i=[],r=0;r<this.sel.ranges.length;r++)i[r]=e;this.replaceSelections(i,t,n||"+input")},replaceSelections:Ir((function(e,t,n){for(var i=[],r=this.sel,o=0;o<r.ranges.length;o++){var a=r.ranges[o];i[o]={from:a.from(),to:a.to(),text:this.splitLines(e[o]),origin:n}}for(var s=t&&"end"!=t&&ho(this,i,t),l=i.length-1;l>=0;l--)Zo(this,i[l]);s?Bo(this,s):this.cm&&ar(this.cm)})),undo:Ir((function(){Jo(this,"undo")})),redo:Ir((function(){Jo(this,"redo")})),undoSelection:Ir((function(){Jo(this,"undo",!0)})),redoSelection:Ir((function(){Jo(this,"redo",!0)})),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,i=0;i<e.done.length;i++)e.done[i].ranges||++t;for(var r=0;r<e.undone.length;r++)e.undone[r].ranges||++n;return{undo:t,redo:n}},clearHistory:function(){var e=this;this.history=new xo(this.history.maxGeneration),vo(this,(function(t){return t.history=e.history}),!0)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:Io(this.history.done),undone:Io(this.history.undone)}},setHistory:function(e){var t=this.history=new xo(this.history.maxGeneration);t.done=Io(e.done.slice(0),null,!0),t.undone=Io(e.undone.slice(0),null,!0)},setGutterMarker:Ir((function(e,t,n){return sa(this,e,"gutter",(function(e){var i=e.gutterMarkers||(e.gutterMarkers={});return i[t]=n,!n&&ie(i)&&(e.gutterMarkers=null),!0}))})),clearGutter:Ir((function(e){var t=this;this.iter((function(n){n.gutterMarkers&&n.gutterMarkers[e]&&sa(t,n,"gutter",(function(){return n.gutterMarkers[e]=null,ie(n.gutterMarkers)&&(n.gutterMarkers=null),!0}))}))})),lineInfo:function(e){var t;if("number"==typeof e){if(!nt(this,e))return null;if(t=e,e=Xe(this,e),!e)return null}else if(t=et(e),null==t)return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:Ir((function(e,t,n){return sa(this,e,"gutter"==t?"gutter":"class",(function(e){var i="text"==t?"textClass":"background"==t?"bgClass":"gutter"==t?"gutterClass":"wrapClass";if(e[i]){if(C(n).test(e[i]))return!1;e[i]+=" "+n}else e[i]=n;return!0}))})),removeLineClass:Ir((function(e,t,n){return sa(this,e,"gutter"==t?"gutter":"class",(function(e){var i="text"==t?"textClass":"background"==t?"bgClass":"gutter"==t?"gutterClass":"wrapClass",r=e[i];if(!r)return!1;if(null==n)e[i]=null;else{var o=r.match(C(n));if(!o)return!1;var a=o.index+o[0].length;e[i]=r.slice(0,o.index)+(o.index&&a!=r.length?" ":"")+r.slice(a)||null}return!0}))})),addLineWidget:Ir((function(e,t,n){return ha(this,e,t,n)})),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return ma(this,dt(this,e),dt(this,t),n,n&&n.type||"range")},setBookmark:function(e,t){var n={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return e=dt(this,e),ma(this,e,e,n,"bookmark")},findMarksAt:function(e){e=dt(this,e);var t=[],n=Xe(this,e.line).markedSpans;if(n)for(var i=0;i<n.length;++i){var r=n[i];(null==r.from||r.from<=e.ch)&&(null==r.to||r.to>=e.ch)&&t.push(r.marker.parent||r.marker)}return t},findMarks:function(e,t,n){e=dt(this,e),t=dt(this,t);var i=[],r=e.line;return this.iter(e.line,t.line+1,(function(o){var a=o.markedSpans;if(a)for(var s=0;s<a.length;s++){var l=a[s];null!=l.to&&r==e.line&&e.ch>=l.to||null==l.from&&r!=e.line||null!=l.from&&r==t.line&&l.from>=t.ch||n&&!n(l.marker)||i.push(l.marker.parent||l.marker)}++r})),i},getAllMarks:function(){var e=[];return this.iter((function(t){var n=t.markedSpans;if(n)for(var i=0;i<n.length;++i)null!=n[i].from&&e.push(n[i].marker)})),e},posFromIndex:function(e){var t,n=this.first,i=this.lineSeparator().length;return this.iter((function(r){var o=r.text.length+i;if(o>e)return t=e,!0;e-=o,++n})),dt(this,rt(n,t))},indexFromPos:function(e){e=dt(this,e);var t=e.ch;if(e.line<this.first||e.ch<0)return 0;var n=this.lineSeparator().length;return this.iter(this.first,e.line,(function(e){t+=e.text.length+n})),t},copy:function(e){var t=new _a(Qe(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,n=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<n&&(n=e.to);var i=new _a(Qe(this,t,n),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(i.history=this.history),(this.linked||(this.linked=[])).push({doc:i,sharedHist:e.sharedHist}),i.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],ya(i,ba(this)),i},unlinkDoc:function(e){if(e instanceof $s&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t){var n=this.linked[t];if(n.doc==e){this.linked.splice(t,1),e.unlinkDoc(this),wa(ba(this));break}}if(e.history==this.history){var i=[e.id];vo(e,(function(e){return i.push(e.id)}),!0),e.history=new xo(null),e.history.done=Io(this.history.done,i),e.history.undone=Io(this.history.undone,i)}},iterLinkedDocs:function(e){vo(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):Ie(e)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:Ir((function(e){"rtl"!=e&&(e="ltr"),e!=this.direction&&(this.direction=e,this.iter((function(e){return e.order=null})),this.cm&&wo(this.cm))}))}),_a.prototype.eachLine=_a.prototype.iter;var ka=0;function Ca(e){var t=this;if(Ta(t),!be(t,e)&&!Hn(t.display,e)){_e(e),a&&(ka=+new Date);var n=Li(t,e,!0),i=e.dataTransfer.files;if(n&&!t.isReadOnly())if(i&&i.length&&window.FileReader&&window.File)for(var r=i.length,o=Array(r),s=0,l=function(){++s==r&&Ar(t,(function(){n=dt(t.doc,n);var e={from:n,to:n,text:t.doc.splitLines(o.filter((function(e){return null!=e})).join(t.doc.lineSeparator())),origin:"paste"};Zo(t.doc,e),Bo(t.doc,ao(dt(t.doc,n),dt(t.doc,so(e))))}))()},c=function(e,n){if(t.options.allowDropFileTypes&&-1==B(t.options.allowDropFileTypes,e.type))l();else{var i=new FileReader;i.onerror=function(){return l()},i.onload=function(){var e=i.result;/[\x00-\x08\x0e-\x1f]{2}/.test(e)||(o[n]=e),l()},i.readAsText(e)}},u=0;u<i.length;u++)c(i[u],u);else{if(t.state.draggingText&&t.doc.sel.contains(n)>-1)return t.state.draggingText(e),void setTimeout((function(){return t.display.input.focus()}),20);try{var d=e.dataTransfer.getData("Text");if(d){var h;if(t.state.draggingText&&!t.state.draggingText.copy&&(h=t.listSelections()),Vo(t.doc,ao(n,n)),h)for(var f=0;f<h.length;++f)ia(t.doc,"",h[f].anchor,h[f].head,"drag");t.replaceSelection(d,"around","paste"),t.display.input.focus()}}catch(p){}}}}function Sa(e,t){if(a&&(!e.state.draggingText||+new Date-ka<100))Se(t);else if(!be(e,t)&&!Hn(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!h)){var n=D("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",d&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),d&&n.parentNode.removeChild(n)}}function Oa(e,t){var n=Li(e,t);if(n){var i=document.createDocumentFragment();Wi(e,n,i),e.display.dragCursor||(e.display.dragCursor=D("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),E(e.display.dragCursor,i)}}function Ta(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function Ea(e){if(document.getElementsByClassName){for(var t=document.getElementsByClassName("CodeMirror"),n=[],i=0;i<t.length;i++){var r=t[i].CodeMirror;r&&n.push(r)}n.length&&n[0].operation((function(){for(var t=0;t<n.length;t++)e(n[t])}))}}var Da=!1;function Ma(){Da||(Aa(),Da=!0)}function Aa(){var e;pe(window,"resize",(function(){null==e&&(e=setTimeout((function(){e=null,Ea(Na)}),100))})),pe(window,"blur",(function(){return Ea(Zi)}))}function Na(e){var t=e.display;t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize()}for(var Ia={3:"Pause",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",145:"ScrollLock",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",224:"Mod",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},La=0;La<10;La++)Ia[La+48]=Ia[La+96]=String(La);for(var Pa=65;Pa<=90;Pa++)Ia[Pa]=String.fromCharCode(Pa);for(var $a=1;$a<=12;$a++)Ia[$a+111]=Ia[$a+63235]="F"+$a;var Fa={};function ja(e){var t,n,i,r,o=e.split(/-(?!$)/);e=o[o.length-1];for(var a=0;a<o.length-1;a++){var s=o[a];if(/^(cmd|meta|m)$/i.test(s))r=!0;else if(/^a(lt)?$/i.test(s))t=!0;else if(/^(c|ctrl|control)$/i.test(s))n=!0;else{if(!/^s(hift)?$/i.test(s))throw new Error("Unrecognized modifier name: "+s);i=!0}}return t&&(e="Alt-"+e),n&&(e="Ctrl-"+e),r&&(e="Cmd-"+e),i&&(e="Shift-"+e),e}function za(e){var t={};for(var n in e)if(e.hasOwnProperty(n)){var i=e[n];if(/^(name|fallthrough|(de|at)tach)$/.test(n))continue;if("..."==i){delete e[n];continue}for(var r=X(n.split(" "),ja),o=0;o<r.length;o++){var a=void 0,s=void 0;o==r.length-1?(s=r.join(" "),a=i):(s=r.slice(0,o+1).join(" "),a="...");var l=t[s];if(l){if(l!=a)throw new Error("Inconsistent bindings for "+s)}else t[s]=a}delete e[n]}for(var c in t)e[c]=t[c];return e}function Ba(e,t,n,i){t=Wa(t);var r=t.call?t.call(e,i):t[e];if(!1===r)return"nothing";if("..."===r)return"multi";if(null!=r&&n(r))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return Ba(e,t.fallthrough,n,i);for(var o=0;o<t.fallthrough.length;o++){var a=Ba(e,t.fallthrough[o],n,i);if(a)return a}}}function Ra(e){var t="string"==typeof e?e:Ia[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t}function Va(e,t,n){var i=e;return t.altKey&&"Alt"!=i&&(e="Alt-"+e),(_?t.metaKey:t.ctrlKey)&&"Ctrl"!=i&&(e="Ctrl-"+e),(_?t.ctrlKey:t.metaKey)&&"Mod"!=i&&(e="Cmd-"+e),!n&&t.shiftKey&&"Shift"!=i&&(e="Shift-"+e),e}function Ha(e,t){if(d&&34==e.keyCode&&e["char"])return!1;var n=Ia[e.keyCode];return null!=n&&!e.altGraphKey&&(3==e.keyCode&&e.code&&(n=e.code),Va(n,e,t))}function Wa(e){return"string"==typeof e?Fa[e]:e}function qa(e,t){for(var n=e.doc.sel.ranges,i=[],r=0;r<n.length;r++){var o=t(n[r]);while(i.length&&ot(o.from,Y(i).to)<=0){var a=i.pop();if(ot(a.from,o.from)<0){o.from=a.from;break}}i.push(o)}Mr(e,(function(){for(var t=i.length-1;t>=0;t--)ia(e.doc,"",i[t].from,i[t].to,"+delete");ar(e)}))}function Ua(e,t,n){var i=ae(e.text,t+n,n);return i<0||i>e.text.length?null:i}function Ka(e,t,n){var i=Ua(e,t.ch,n);return null==i?null:new rt(t.line,i,n<0?"after":"before")}function Ga(e,t,n,i,r){if(e){"rtl"==t.doc.direction&&(r=-r);var o=he(n,t.doc.direction);if(o){var a,s=r<0?Y(o):o[0],l=r<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var u=ti(t,n);a=r<0?n.text.length-1:0;var d=ni(t,u,a).top;a=se((function(e){return ni(t,u,e).top==d}),r<0==(1==s.level)?s.from:s.to-1,a),"before"==c&&(a=Ua(n,a,1))}else a=r<0?s.to:s.from;return new rt(i,a,c)}}return new rt(i,r<0?n.text.length:0,r<0?"before":"after")}function Ya(e,t,n,i){var r=he(t,e.doc.direction);if(!r)return Ka(t,n,i);n.ch>=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=ue(r,n.ch,n.sticky),a=r[o];if("ltr"==e.doc.direction&&a.level%2==0&&(i>0?a.to>n.ch:a.from<n.ch))return Ka(t,n,i);var s,l=function(e,n){return Ua(t,e instanceof rt?e.ch:e,n)},c=function(n){return e.options.lineWrapping?(s=s||ti(e,t),ki(e,t,s,n)):{begin:0,end:t.text.length}},u=c("before"==n.sticky?l(n,-1):n.ch);if("rtl"==e.doc.direction||1==a.level){var d=1==a.level==i<0,h=l(n,d?1:-1);if(null!=h&&(d?h<=a.to&&h<=u.end:h>=a.from&&h>=u.begin)){var f=d?"before":"after";return new rt(n.line,h,f)}}var p=function(e,t,i){for(var o=function(e,t){return t?new rt(n.line,l(e,1),"before"):new rt(n.line,e,"after")};e>=0&&e<r.length;e+=t){var a=r[e],s=t>0==(1!=a.level),c=s?i.begin:l(i.end,-1);if(a.from<=c&&c<a.to)return o(c,s);if(c=s?a.from:l(a.to,-1),i.begin<=c&&c<i.end)return o(c,s)}},m=p(o+i,i,u);if(m)return m;var g=i>0?u.end:l(u.begin,-1);return null==g||i>0&&g==t.text.length||(m=p(i>0?0:r.length-1,i,c(g)),!m)?null:m}Fa.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Fa.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Fa.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Fa.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Fa["default"]=b?Fa.macDefault:Fa.pcDefault;var Xa={selectAll:Yo,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),H)},killLine:function(e){return qa(e,(function(t){if(t.empty()){var n=Xe(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line<e.lastLine()?{from:t.head,to:rt(t.head.line+1,0)}:{from:t.head,to:rt(t.head.line,n)}}return{from:t.from(),to:t.to()}}))},deleteLine:function(e){return qa(e,(function(t){return{from:rt(t.from().line,0),to:dt(e.doc,rt(t.to().line+1,0))}}))},delLineLeft:function(e){return qa(e,(function(e){return{from:rt(e.from().line,0),to:e.from()}}))},delWrappedLineLeft:function(e){return qa(e,(function(t){var n=e.charCoords(t.head,"div").top+5,i=e.coordsChar({left:0,top:n},"div");return{from:i,to:t.from()}}))},delWrappedLineRight:function(e){return qa(e,(function(t){var n=e.charCoords(t.head,"div").top+5,i=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div");return{from:t.from(),to:i}}))},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(rt(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(rt(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy((function(t){return Za(e,t.head.line)}),{origin:"+move",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy((function(t){return Ja(e,t.head)}),{origin:"+move",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy((function(t){return Qa(e,t.head.line)}),{origin:"+move",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy((function(t){var n=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div")}),q)},goLineLeft:function(e){return e.extendSelectionsBy((function(t){var n=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:0,top:n},"div")}),q)},goLineLeftSmart:function(e){return e.extendSelectionsBy((function(t){var n=e.cursorCoords(t.head,"div").top+5,i=e.coordsChar({left:0,top:n},"div");return i.ch<e.getLine(i.line).search(/\S/)?Ja(e,t.head):i}),q)},goLineUp:function(e){return e.moveV(-1,"line")},goLineDown:function(e){return e.moveV(1,"line")},goPageUp:function(e){return e.moveV(-1,"page")},goPageDown:function(e){return e.moveV(1,"page")},goCharLeft:function(e){return e.moveH(-1,"char")},goCharRight:function(e){return e.moveH(1,"char")},goColumnLeft:function(e){return e.moveH(-1,"column")},goColumnRight:function(e){return e.moveH(1,"column")},goWordLeft:function(e){return e.moveH(-1,"word")},goGroupRight:function(e){return e.moveH(1,"group")},goGroupLeft:function(e){return e.moveH(-1,"group")},goWordRight:function(e){return e.moveH(1,"word")},delCharBefore:function(e){return e.deleteH(-1,"codepoint")},delCharAfter:function(e){return e.deleteH(1,"char")},delWordBefore:function(e){return e.deleteH(-1,"word")},delWordAfter:function(e){return e.deleteH(1,"word")},delGroupBefore:function(e){return e.deleteH(-1,"group")},delGroupAfter:function(e){return e.deleteH(1,"group")},indentAuto:function(e){return e.indentSelection("smart")},indentMore:function(e){return e.indentSelection("add")},indentLess:function(e){return e.indentSelection("subtract")},insertTab:function(e){return e.replaceSelection("\t")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),i=e.options.tabSize,r=0;r<n.length;r++){var o=n[r].from(),a=j(e.getLine(o.line),o.ch,i);t.push(G(i-a%i))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(e){return Mr(e,(function(){for(var t=e.listSelections(),n=[],i=0;i<t.length;i++)if(t[i].empty()){var r=t[i].head,o=Xe(e.doc,r.line).text;if(o)if(r.ch==o.length&&(r=new rt(r.line,r.ch-1)),r.ch>0)r=new rt(r.line,r.ch+1),e.replaceRange(o.charAt(r.ch-1)+o.charAt(r.ch-2),rt(r.line,r.ch-2),r,"+transpose");else if(r.line>e.doc.first){var a=Xe(e.doc,r.line-1).text;a&&(r=new rt(r.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+a.charAt(a.length-1),rt(r.line-1,a.length-1),r,"+transpose"))}n.push(new ro(r,r))}e.setSelections(n)}))},newlineAndIndent:function(e){return Mr(e,(function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var i=0;i<t.length;i++)e.indentLine(t[i].from().line,null,!0);ar(e)}))},openLine:function(e){return e.replaceSelection("\n","start")},toggleOverwrite:function(e){return e.toggleOverwrite()}};function Za(e,t){var n=Xe(e.doc,t),i=Zt(n);return i!=n&&(t=et(i)),Ga(!0,e,i,t,1)}function Qa(e,t){var n=Xe(e.doc,t),i=Qt(n);return i!=n&&(t=et(i)),Ga(!0,e,n,t,-1)}function Ja(e,t){var n=Za(e,t.line),i=Xe(e.doc,n.line),r=he(i,e.doc.direction);if(!r||0==r[0].level){var o=Math.max(n.ch,i.text.search(/\S/)),a=t.line==n.line&&t.ch<=o&&t.ch;return rt(n.line,a?0:o,n.sticky)}return n}function es(e,t,n){if("string"==typeof t&&(t=Xa[t],!t))return!1;e.display.input.ensurePolled();var i=e.display.shift,r=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n&&(e.display.shift=!1),r=t(e)!=V}finally{e.display.shift=i,e.state.suppressEdits=!1}return r}function ts(e,t,n){for(var i=0;i<e.state.keyMaps.length;i++){var r=Ba(t,e.state.keyMaps[i],n,e);if(r)return r}return e.options.extraKeys&&Ba(t,e.options.extraKeys,n,e)||Ba(t,e.options.keyMap,n,e)}var ns=new z;function is(e,t,n,i){var r=e.state.keySeq;if(r){if(Ra(t))return"handled";if(/\'$/.test(t)?e.state.keySeq=null:ns.set(50,(function(){e.state.keySeq==r&&(e.state.keySeq=null,e.display.input.reset())})),rs(e,r+" "+t,n,i))return!0}return rs(e,t,n,i)}function rs(e,t,n,i){var r=ts(e,t,i);return"multi"==r&&(e.state.keySeq=t),"handled"==r&&En(e,"keyHandled",e,t,n),"handled"!=r&&"multi"!=r||(_e(n),Ki(e)),!!r}function os(e,t){var n=Ha(t,!0);return!!n&&(t.shiftKey&&!e.state.keySeq?is(e,"Shift-"+n,t,(function(t){return es(e,t,!0)}))||is(e,n,t,(function(t){if("string"==typeof t?/^go[A-Z]/.test(t):t.motion)return es(e,t)})):is(e,n,t,(function(t){return es(e,t)})))}function as(e,t,n){return is(e,"'"+n+"'",t,(function(t){return es(e,t,!0)}))}var ss=null;function ls(e){var t=this;if((!e.target||e.target==t.display.input.getField())&&(t.curOp.focus=N(),!be(t,e))){a&&s<11&&27==e.keyCode&&(e.returnValue=!1);var i=e.keyCode;t.display.shift=16==i||e.shiftKey;var r=os(t,e);d&&(ss=r?i:null,r||88!=i||Pe||!(b?e.metaKey:e.ctrlKey)||t.replaceSelection("",null,"cut")),n&&!b&&!r&&46==i&&e.shiftKey&&!e.ctrlKey&&document.execCommand&&document.execCommand("cut"),18!=i||/\bCodeMirror-crosshair\b/.test(t.display.lineDiv.className)||cs(t)}}function cs(e){var t=e.display.lineDiv;function n(e){18!=e.keyCode&&e.altKey||(O(t,"CodeMirror-crosshair"),ge(document,"keyup",n),ge(document,"mouseover",n))}I(t,"CodeMirror-crosshair"),pe(document,"keyup",n),pe(document,"mouseover",n)}function us(e){16==e.keyCode&&(this.doc.sel.shift=!1),be(this,e)}function ds(e){var t=this;if((!e.target||e.target==t.display.input.getField())&&!(Hn(t.display,e)||be(t,e)||e.ctrlKey&&!e.altKey||b&&e.metaKey)){var n=e.keyCode,i=e.charCode;if(d&&n==ss)return ss=null,void _e(e);if(!d||e.which&&!(e.which<10)||!os(t,e)){var r=String.fromCharCode(null==i?n:i);"\b"!=r&&(as(t,e,r)||t.display.input.onKeyPress(e))}}}var hs,fs,ps=400,ms=function(e,t,n){this.time=e,this.pos=t,this.button=n};function gs(e,t){var n=+new Date;return fs&&fs.compare(n,e,t)?(hs=fs=null,"triple"):hs&&hs.compare(n,e,t)?(fs=new ms(n,e,t),hs=null,"double"):(hs=new ms(n,e,t),fs=null,"single")}function vs(e){var t=this,n=t.display;if(!(be(t,e)||n.activeTouch&&n.input.supportsTouch()))if(n.input.ensurePolled(),n.shift=e.shiftKey,Hn(n,e))l||(n.scroller.draggable=!1,setTimeout((function(){return n.scroller.draggable=!0}),100));else if(!Os(t,e)){var i=Li(t,e),r=Te(e),o=i?gs(i,r):"single";window.focus(),1==r&&t.state.selectingText&&t.state.selectingText(e),i&&bs(t,r,i,o,e)||(1==r?i?ws(t,i,o,e):Oe(e)==n.scroller&&_e(e):2==r?(i&&Po(t.doc,i),setTimeout((function(){return n.input.focus()}),20)):3==r&&(k?t.display.input.onContextMenu(e):Yi(t)))}}function bs(e,t,n,i,r){var o="Click";return"double"==i?o="Double"+o:"triple"==i&&(o="Triple"+o),o=(1==t?"Left":2==t?"Middle":"Right")+o,is(e,Va(o,r),r,(function(t){if("string"==typeof t&&(t=Xa[t]),!t)return!1;var i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),i=t(e,n)!=V}finally{e.state.suppressEdits=!1}return i}))}function ys(e,t,n){var i=e.getOption("configureMouse"),r=i?i(e,t,n):{};if(null==r.unit){var o=y?n.shiftKey&&n.metaKey:n.altKey;r.unit=o?"rectangle":"single"==t?"char":"double"==t?"word":"line"}return(null==r.extend||e.doc.extend)&&(r.extend=e.doc.extend||n.shiftKey),null==r.addNew&&(r.addNew=b?n.metaKey:n.ctrlKey),null==r.moveOnDrag&&(r.moveOnDrag=!(b?n.altKey:n.ctrlKey)),r}function ws(e,t,n,i){a?setTimeout($(Gi,e),0):e.curOp.focus=N();var r,o=ys(e,n,i),s=e.doc.sel;e.options.dragDrop&&Me&&!e.isReadOnly()&&"single"==n&&(r=s.contains(t))>-1&&(ot((r=s.ranges[r]).from(),t)<0||t.xRel>0)&&(ot(r.to(),t)>0||t.xRel<0)?xs(e,i,t,o):ks(e,i,t,o)}function xs(e,t,n,i){var r=e.display,o=!1,c=Ar(e,(function(t){l&&(r.scroller.draggable=!1),e.state.draggingText=!1,e.state.delayingBlurEvent&&(e.hasFocus()?e.state.delayingBlurEvent=!1:Yi(e)),ge(r.wrapper.ownerDocument,"mouseup",c),ge(r.wrapper.ownerDocument,"mousemove",u),ge(r.scroller,"dragstart",d),ge(r.scroller,"drop",c),o||(_e(t),i.addNew||Po(e.doc,n,null,null,i.extend),l&&!h||a&&9==s?setTimeout((function(){r.wrapper.ownerDocument.body.focus({preventScroll:!0}),r.input.focus()}),20):r.input.focus())})),u=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},d=function(){return o=!0};l&&(r.scroller.draggable=!0),e.state.draggingText=c,c.copy=!i.moveOnDrag,pe(r.wrapper.ownerDocument,"mouseup",c),pe(r.wrapper.ownerDocument,"mousemove",u),pe(r.scroller,"dragstart",d),pe(r.scroller,"drop",c),e.state.delayingBlurEvent=!0,setTimeout((function(){return r.input.focus()}),20),r.scroller.dragDrop&&r.scroller.dragDrop()}function _s(e,t,n){if("char"==n)return new ro(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new ro(rt(t.line,0),dt(e.doc,rt(t.line+1,0)));var i=n(e,t);return new ro(i.from,i.to)}function ks(e,t,n,i){a&&Yi(e);var r=e.display,o=e.doc;_e(t);var s,l,c=o.sel,u=c.ranges;if(i.addNew&&!i.extend?(l=o.sel.contains(n),s=l>-1?u[l]:new ro(n,n)):(s=o.sel.primary(),l=o.sel.primIndex),"rectangle"==i.unit)i.addNew||(s=new ro(n,n)),n=Li(e,t,!0,!0),l=-1;else{var d=_s(e,n,i.unit);s=i.extend?Lo(s,d.anchor,d.head,i.extend):d}i.addNew?-1==l?(l=u.length,Ro(o,oo(e,u.concat([s]),l),{scroll:!1,origin:"*mouse"})):u.length>1&&u[l].empty()&&"char"==i.unit&&!i.extend?(Ro(o,oo(e,u.slice(0,l).concat(u.slice(l+1)),0),{scroll:!1,origin:"*mouse"}),c=o.sel):Fo(o,l,s,W):(l=0,Ro(o,new io([s],0),W),c=o.sel);var h=n;function f(t){if(0!=ot(h,t))if(h=t,"rectangle"==i.unit){for(var r=[],a=e.options.tabSize,u=j(Xe(o,n.line).text,n.ch,a),d=j(Xe(o,t.line).text,t.ch,a),f=Math.min(u,d),p=Math.max(u,d),m=Math.min(n.line,t.line),g=Math.min(e.lastLine(),Math.max(n.line,t.line));m<=g;m++){var v=Xe(o,m).text,b=U(v,f,a);f==p?r.push(new ro(rt(m,b),rt(m,b))):v.length>b&&r.push(new ro(rt(m,b),rt(m,U(v,p,a))))}r.length||r.push(new ro(n,n)),Ro(o,oo(e,c.ranges.slice(0,l).concat(r),l),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var y,w=s,x=_s(e,t,i.unit),_=w.anchor;ot(x.anchor,_)>0?(y=x.head,_=ct(w.from(),x.anchor)):(y=x.anchor,_=lt(w.to(),x.head));var k=c.ranges.slice(0);k[l]=Cs(e,new ro(dt(o,_),y)),Ro(o,oo(e,k,l),W)}}var p=r.wrapper.getBoundingClientRect(),m=0;function g(t){var n=++m,a=Li(e,t,!0,"rectangle"==i.unit);if(a)if(0!=ot(a,h)){e.curOp.focus=N(),f(a);var s=er(r,o);(a.line>=s.to||a.line<s.from)&&setTimeout(Ar(e,(function(){m==n&&g(t)})),150)}else{var l=t.clientY<p.top?-20:t.clientY>p.bottom?20:0;l&&setTimeout(Ar(e,(function(){m==n&&(r.scroller.scrollTop+=l,g(t))})),50)}}function v(t){e.state.selectingText=!1,m=1/0,t&&(_e(t),r.input.focus()),ge(r.wrapper.ownerDocument,"mousemove",b),ge(r.wrapper.ownerDocument,"mouseup",y),o.history.lastSelOrigin=null}var b=Ar(e,(function(e){0!==e.buttons&&Te(e)?g(e):v(e)})),y=Ar(e,v);e.state.selectingText=y,pe(r.wrapper.ownerDocument,"mousemove",b),pe(r.wrapper.ownerDocument,"mouseup",y)}function Cs(e,t){var n=t.anchor,i=t.head,r=Xe(e.doc,n.line);if(0==ot(n,i)&&n.sticky==i.sticky)return t;var o=he(r);if(!o)return t;var a=ue(o,n.ch,n.sticky),s=o[a];if(s.from!=n.ch&&s.to!=n.ch)return t;var l,c=a+(s.from==n.ch==(1!=s.level)?0:1);if(0==c||c==o.length)return t;if(i.line!=n.line)l=(i.line-n.line)*("ltr"==e.doc.direction?1:-1)>0;else{var u=ue(o,i.ch,i.sticky),d=u-a||(i.ch-n.ch)*(1==s.level?-1:1);l=u==c-1||u==c?d<0:d>0}var h=o[c+(l?-1:0)],f=l==(1==h.level),p=f?h.from:h.to,m=f?"after":"before";return n.ch==p&&n.sticky==m?t:new ro(new rt(n.line,p,m),i)}function Ss(e,t,n,i){var r,o;if(t.touches)r=t.touches[0].clientX,o=t.touches[0].clientY;else try{r=t.clientX,o=t.clientY}catch(h){return!1}if(r>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;i&&_e(t);var a=e.display,s=a.lineDiv.getBoundingClientRect();if(o>s.bottom||!we(e,n))return Ce(t);o-=s.top-a.viewOffset;for(var l=0;l<e.display.gutterSpecs.length;++l){var c=a.gutters.childNodes[l];if(c&&c.getBoundingClientRect().right>=r){var u=tt(e.doc,o),d=e.display.gutterSpecs[l];return ve(e,n,e,u,d.className,t),Ce(t)}}}function Os(e,t){return Ss(e,t,"gutterClick",!0)}function Ts(e,t){Hn(e.display,t)||Es(e,t)||be(e,t,"contextmenu")||k||e.display.input.onContextMenu(t)}function Es(e,t){return!!we(e,"gutterContextMenu")&&Ss(e,t,"gutterContextMenu",!1)}function Ds(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),di(e)}ms.prototype.compare=function(e,t,n){return this.time+ps>e&&0==ot(t,this.pos)&&n==this.button};var Ms={toString:function(){return"CodeMirror.Init"}},As={},Ns={};function Is(e){var t=e.optionHandlers;function n(n,i,r,o){e.defaults[n]=i,r&&(t[n]=o?function(e,t,n){n!=Ms&&r(e,t,n)}:r)}e.defineOption=n,e.Init=Ms,n("value","",(function(e,t){return e.setValue(t)}),!0),n("mode",null,(function(e,t){e.doc.modeOption=t,fo(e)}),!0),n("indentUnit",2,fo,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,(function(e){po(e),di(e),$i(e)}),!0),n("lineSeparator",null,(function(e,t){if(e.doc.lineSep=t,t){var n=[],i=e.doc.first;e.doc.iter((function(e){for(var r=0;;){var o=e.text.indexOf(t,r);if(-1==o)break;r=o+t.length,n.push(rt(i,o))}i++}));for(var r=n.length-1;r>=0;r--)ia(e.doc,t,n[r],rt(n[r].line,n[r].ch+t.length))}})),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200c\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,(function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=Ms&&e.refresh()})),n("specialCharPlaceholder",mn,(function(e){return e.refresh()}),!0),n("electricChars",!0),n("inputStyle",v?"contenteditable":"textarea",(function(){throw new Error("inputStyle can not (yet) be changed in a running editor")}),!0),n("spellcheck",!1,(function(e,t){return e.getInputField().spellcheck=t}),!0),n("autocorrect",!1,(function(e,t){return e.getInputField().autocorrect=t}),!0),n("autocapitalize",!1,(function(e,t){return e.getInputField().autocapitalize=t}),!0),n("rtlMoveVisually",!w),n("wholeLineUpdateBefore",!0),n("theme","default",(function(e){Ds(e),Xr(e)}),!0),n("keyMap","default",(function(e,t,n){var i=Wa(t),r=n!=Ms&&Wa(n);r&&r.detach&&r.detach(e,i),i.attach&&i.attach(e,r||null)})),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,Ps,!0),n("gutters",[],(function(e,t){e.display.gutterSpecs=Gr(t,e.options.lineNumbers),Xr(e)}),!0),n("fixedGutter",!0,(function(e,t){e.display.gutters.style.left=t?Ai(e.display)+"px":"0",e.refresh()}),!0),n("coverGutterNextToScrollbar",!1,(function(e){return vr(e)}),!0),n("scrollbarStyle","native",(function(e){wr(e),vr(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)}),!0),n("lineNumbers",!1,(function(e,t){e.display.gutterSpecs=Gr(e.options.gutters,t),Xr(e)}),!0),n("firstLineNumber",1,Xr,!0),n("lineNumberFormatter",(function(e){return e}),Xr,!0),n("showCursorWhenSelecting",!1,Vi,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("selectionsMayTouch",!1),n("readOnly",!1,(function(e,t){"nocursor"==t&&(Zi(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)})),n("screenReaderLabel",null,(function(e,t){t=""===t?null:t,e.display.input.screenReaderLabelChanged(t)})),n("disableInput",!1,(function(e,t){t||e.display.input.reset()}),!0),n("dragDrop",!0,Ls),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,Vi,!0),n("singleCursorHeightPerLine",!0,Vi,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,po,!0),n("addModeClass",!1,po,!0),n("pollInterval",100),n("undoDepth",200,(function(e,t){return e.doc.history.undoDepth=t})),n("historyEventDelay",1250),n("viewportMargin",10,(function(e){return e.refresh()}),!0),n("maxHighlightLength",1e4,po,!0),n("moveInputWithCursor",!0,(function(e,t){t||e.display.input.resetPosition()})),n("tabindex",null,(function(e,t){return e.display.input.getField().tabIndex=t||""})),n("autofocus",null),n("direction","ltr",(function(e,t){return e.doc.setDirection(t)}),!0),n("phrases",null)}function Ls(e,t,n){var i=n&&n!=Ms;if(!t!=!i){var r=e.display.dragFunctions,o=t?pe:ge;o(e.display.scroller,"dragstart",r.start),o(e.display.scroller,"dragenter",r.enter),o(e.display.scroller,"dragover",r.over),o(e.display.scroller,"dragleave",r.leave),o(e.display.scroller,"drop",r.drop)}}function Ps(e){e.options.lineWrapping?(I(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(O(e.display.wrapper,"CodeMirror-wrap"),sn(e)),Ii(e),$i(e),di(e),setTimeout((function(){return vr(e)}),100)}function $s(e,t){var n=this;if(!(this instanceof $s))return new $s(e,t);this.options=t=t?F(t):{},F(As,t,!1);var i=t.value;"string"==typeof i?i=new _a(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOption=t.mode),this.doc=i;var r=new $s.inputStyles[t.inputStyle](this),o=this.display=new Zr(e,i,r,t);for(var c in o.wrapper.CodeMirror=this,Ds(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),wr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new z,keySeq:null,specialChars:null},t.autofocus&&!v&&o.input.focus(),a&&s<11&&setTimeout((function(){return n.display.input.reset(!0)}),20),Fs(this),Ma(),_r(this),this.curOp.forceUpdate=!0,bo(this,i),t.autofocus&&!v||this.hasFocus()?setTimeout((function(){n.hasFocus()&&!n.state.focused&&Xi(n)}),20):Zi(this),Ns)Ns.hasOwnProperty(c)&&Ns[c](this,t[c],Ms);Kr(this),t.finishInit&&t.finishInit(this);for(var u=0;u<js.length;++u)js[u](this);kr(this),l&&t.lineWrapping&&"optimizelegibility"==getComputedStyle(o.lineDiv).textRendering&&(o.lineDiv.style.textRendering="auto")}function Fs(e){var t=e.display;pe(t.scroller,"mousedown",Ar(e,vs)),pe(t.scroller,"dblclick",a&&s<11?Ar(e,(function(t){if(!be(e,t)){var n=Li(e,t);if(n&&!Os(e,t)&&!Hn(e.display,t)){_e(t);var i=e.findWordAt(n);Po(e.doc,i.anchor,i.head)}}})):function(t){return be(e,t)||_e(t)}),pe(t.scroller,"contextmenu",(function(t){return Ts(e,t)})),pe(t.input.getField(),"contextmenu",(function(n){t.scroller.contains(n.target)||Ts(e,n)}));var n,i={end:0};function r(){t.activeTouch&&(n=setTimeout((function(){return t.activeTouch=null}),1e3),i=t.activeTouch,i.end=+new Date)}function o(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function l(e,t){if(null==t.left)return!0;var n=t.left-e.left,i=t.top-e.top;return n*n+i*i>400}pe(t.scroller,"touchstart",(function(r){if(!be(e,r)&&!o(r)&&!Os(e,r)){t.input.ensurePolled(),clearTimeout(n);var a=+new Date;t.activeTouch={start:a,moved:!1,prev:a-i.end<=300?i:null},1==r.touches.length&&(t.activeTouch.left=r.touches[0].pageX,t.activeTouch.top=r.touches[0].pageY)}})),pe(t.scroller,"touchmove",(function(){t.activeTouch&&(t.activeTouch.moved=!0)})),pe(t.scroller,"touchend",(function(n){var i=t.activeTouch;if(i&&!Hn(t,n)&&null!=i.left&&!i.moved&&new Date-i.start<300){var o,a=e.coordsChar(t.activeTouch,"page");o=!i.prev||l(i,i.prev)?new ro(a,a):!i.prev.prev||l(i,i.prev.prev)?e.findWordAt(a):new ro(rt(a.line,0),dt(e.doc,rt(a.line+1,0))),e.setSelection(o.anchor,o.head),e.focus(),_e(n)}r()})),pe(t.scroller,"touchcancel",r),pe(t.scroller,"scroll",(function(){t.scroller.clientHeight&&(dr(e,t.scroller.scrollTop),fr(e,t.scroller.scrollLeft,!0),ve(e,"scroll",e))})),pe(t.scroller,"mousewheel",(function(t){return no(e,t)})),pe(t.scroller,"DOMMouseScroll",(function(t){return no(e,t)})),pe(t.wrapper,"scroll",(function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0})),t.dragFunctions={enter:function(t){be(e,t)||Se(t)},over:function(t){be(e,t)||(Oa(e,t),Se(t))},start:function(t){return Sa(e,t)},drop:Ar(e,Ca),leave:function(t){be(e,t)||Ta(e)}};var c=t.input.getField();pe(c,"keyup",(function(t){return us.call(e,t)})),pe(c,"keydown",Ar(e,ls)),pe(c,"keypress",Ar(e,ds)),pe(c,"focus",(function(t){return Xi(e,t)})),pe(c,"blur",(function(t){return Zi(e,t)}))}$s.defaults=As,$s.optionHandlers=Ns;var js=[];function zs(e,t,n,i){var r,o=e.doc;null==n&&(n="add"),"smart"==n&&(o.mode.indent?r=bt(e,t).state:n="prev");var a=e.options.tabSize,s=Xe(o,t),l=j(s.text,null,a);s.stateAfter&&(s.stateAfter=null);var c,u=s.text.match(/^\s*/)[0];if(i||/\S/.test(s.text)){if("smart"==n&&(c=o.mode.indent(r,s.text.slice(u.length),s.text),c==V||c>150)){if(!i)return;n="prev"}}else c=0,n="not";"prev"==n?c=t>o.first?j(Xe(o,t-1).text,null,a):0:"add"==n?c=l+e.options.indentUnit:"subtract"==n?c=l-e.options.indentUnit:"number"==typeof n&&(c=l+n),c=Math.max(0,c);var d="",h=0;if(e.options.indentWithTabs)for(var f=Math.floor(c/a);f;--f)h+=a,d+="\t";if(h<c&&(d+=G(c-h)),d!=u)return ia(o,d,rt(t,0),rt(t,u.length),"+input"),s.stateAfter=null,!0;for(var p=0;p<o.sel.ranges.length;p++){var m=o.sel.ranges[p];if(m.head.line==t&&m.head.ch<u.length){var g=rt(t,u.length);Fo(o,p,new ro(g,g));break}}}$s.defineInitHook=function(e){return js.push(e)};var Bs=null;function Rs(e){Bs=e}function Vs(e,t,n,i,r){var o=e.doc;e.display.shift=!1,i||(i=o.sel);var a=+new Date-200,s="paste"==r||e.state.pasteIncoming>a,l=Ie(t),c=null;if(s&&i.ranges.length>1)if(Bs&&Bs.text.join("\n")==t){if(i.ranges.length%Bs.text.length==0){c=[];for(var u=0;u<Bs.text.length;u++)c.push(o.splitLines(Bs.text[u]))}}else l.length==i.ranges.length&&e.options.pasteLinesPerSelection&&(c=X(l,(function(e){return[e]})));for(var d=e.curOp.updateInput,h=i.ranges.length-1;h>=0;h--){var f=i.ranges[h],p=f.from(),m=f.to();f.empty()&&(n&&n>0?p=rt(p.line,p.ch-n):e.state.overwrite&&!s?m=rt(m.line,Math.min(Xe(o,m.line).text.length,m.ch+Y(l).length)):s&&Bs&&Bs.lineWise&&Bs.text.join("\n")==l.join("\n")&&(p=m=rt(p.line,0)));var g={from:p,to:m,text:c?c[h%c.length]:l,origin:r||(s?"paste":e.state.cutIncoming>a?"cut":"+input")};Zo(e.doc,g),En(e,"inputRead",e,g)}t&&!s&&Ws(e,t),ar(e),e.curOp.updateInput<2&&(e.curOp.updateInput=d),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Hs(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||Mr(t,(function(){return Vs(t,n,0,null,"paste")})),!0}function Ws(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,i=n.ranges.length-1;i>=0;i--){var r=n.ranges[i];if(!(r.head.ch>100||i&&n.ranges[i-1].head.line==r.head.line)){var o=e.getModeAt(r.head),a=!1;if(o.electricChars){for(var s=0;s<o.electricChars.length;s++)if(t.indexOf(o.electricChars.charAt(s))>-1){a=zs(e,r.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Xe(e.doc,r.head.line).text.slice(0,r.head.ch))&&(a=zs(e,r.head.line,"smart"));a&&En(e,"electricInput",e,r.head.line)}}}function qs(e){for(var t=[],n=[],i=0;i<e.doc.sel.ranges.length;i++){var r=e.doc.sel.ranges[i].head.line,o={anchor:rt(r,0),head:rt(r+1,0)};n.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:n}}function Us(e,t,n,i){e.setAttribute("autocorrect",n?"":"off"),e.setAttribute("autocapitalize",i?"":"off"),e.setAttribute("spellcheck",!!t)}function Ks(){var e=D("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),t=D("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return l?e.style.width="1000px":e.setAttribute("wrap","off"),m&&(e.style.border="1px solid black"),Us(e),t}function Gs(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,n){var i=this.options,r=i[e];i[e]==n&&"mode"!=e||(i[e]=n,t.hasOwnProperty(e)&&Ar(this,t[e])(this,n,r),ve(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Wa(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;n<t.length;++n)if(t[n]==e||t[n].name==e)return t.splice(n,1),!0},addOverlay:Nr((function(t,n){var i=t.token?t:e.getMode(this.options,t);if(i.startState)throw new Error("Overlays may not be stateful.");Z(this.state.overlays,{mode:i,modeSpec:t,opaque:n&&n.opaque,priority:n&&n.priority||0},(function(e){return e.priority})),this.state.modeGen++,$i(this)})),removeOverlay:Nr((function(e){for(var t=this.state.overlays,n=0;n<t.length;++n){var i=t[n].modeSpec;if(i==e||"string"==typeof e&&i.name==e)return t.splice(n,1),this.state.modeGen++,void $i(this)}})),indentLine:Nr((function(e,t,n){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),nt(this.doc,e)&&zs(this,e,t,n)})),indentSelection:Nr((function(e){for(var t=this.doc.sel.ranges,n=-1,i=0;i<t.length;i++){var r=t[i];if(r.empty())r.head.line>n&&(zs(this,r.head.line,e,!0),n=r.head.line,i==this.doc.sel.primIndex&&ar(this));else{var o=r.from(),a=r.to(),s=Math.max(n,o.line);n=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var l=s;l<n;++l)zs(this,l,e);var c=this.doc.sel.ranges;0==o.ch&&t.length==c.length&&c[i].from().ch>0&&Fo(this.doc,i,new ro(o,c[i].to()),H)}}})),getTokenAt:function(e,t){return kt(this,e,t)},getLineTokens:function(e,t){return kt(this,rt(e),t,!0)},getTokenTypeAt:function(e){e=dt(this.doc,e);var t,n=vt(this,Xe(this.doc,e.line)),i=0,r=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var a=i+r>>1;if((a?n[2*a-1]:0)>=o)r=a;else{if(!(n[2*a+1]<o)){t=n[2*a+2];break}i=a+1}}var s=t?t.indexOf("overlay "):-1;return s<0?t:0==s?null:t.slice(0,s-1)},getModeAt:function(t){var n=this.doc.mode;return n.innerMode?e.innerMode(n,this.getTokenAt(t).state).mode:n},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var i=[];if(!n.hasOwnProperty(t))return i;var r=n[t],o=this.getModeAt(e);if("string"==typeof o[t])r[o[t]]&&i.push(r[o[t]]);else if(o[t])for(var a=0;a<o[t].length;a++){var s=r[o[t][a]];s&&i.push(s)}else o.helperType&&r[o.helperType]?i.push(r[o.helperType]):r[o.name]&&i.push(r[o.name]);for(var l=0;l<r._global.length;l++){var c=r._global[l];c.pred(o,this)&&-1==B(i,c.val)&&i.push(c.val)}return i},getStateAfter:function(e,t){var n=this.doc;return e=ut(n,null==e?n.first+n.size-1:e),bt(this,e+1,t).state},cursorCoords:function(e,t){var n,i=this.doc.sel.primary();return n=null==e?i.head:"object"==_typeof2(e)?dt(this.doc,e):e?i.from():i.to(),bi(this,n,t||"page")},charCoords:function(e,t){return vi(this,dt(this.doc,e),t||"page")},coordsChar:function(e,t){return e=gi(this,e,t||"page"),xi(this,e.left,e.top)},lineAtHeight:function(e,t){return e=gi(this,{top:e,left:0},t||"page").top,tt(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,n){var i,r=!1;if("number"==typeof e){var o=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>o&&(e=o,r=!0),i=Xe(this.doc,e)}else i=e;return mi(this,i,{top:0,left:0},t||"page",n||r).top+(r?this.doc.height-on(i):0)},defaultTextHeight:function(){return Ei(this.display)},defaultCharWidth:function(){return Di(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,i,r){var o=this.display;e=bi(this,dt(this.doc,e));var a=e.bottom,s=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),o.sizer.appendChild(t),"over"==i)a=e.top;else if("above"==i||"near"==i){var l=Math.max(o.wrapper.clientHeight,this.doc.height),c=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==i||e.bottom+t.offsetHeight>l)&&e.top>t.offsetHeight?a=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=l&&(a=e.bottom),s+t.offsetWidth>c&&(s=c-t.offsetWidth)}t.style.top=a+"px",t.style.left=t.style.right="","right"==r?(s=o.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==r?s=0:"middle"==r&&(s=(o.sizer.clientWidth-t.offsetWidth)/2),t.style.left=s+"px"),n&&ir(this,{left:s,top:a,right:s+t.offsetWidth,bottom:a+t.offsetHeight})},triggerOnKeyDown:Nr(ls),triggerOnKeyPress:Nr(ds),triggerOnKeyUp:us,triggerOnMouseDown:Nr(vs),execCommand:function(e){if(Xa.hasOwnProperty(e))return Xa[e].call(null,this)},triggerElectric:Nr((function(e){Ws(this,e)})),findPosH:function(e,t,n,i){var r=1;t<0&&(r=-1,t=-t);for(var o=dt(this.doc,e),a=0;a<t;++a)if(o=Ys(this.doc,o,r,n,i),o.hitSide)break;return o},moveH:Nr((function(e,t){var n=this;this.extendSelectionsBy((function(i){return n.display.shift||n.doc.extend||i.empty()?Ys(n.doc,i.head,e,t,n.options.rtlMoveVisually):e<0?i.from():i.to()}),q)})),deleteH:Nr((function(e,t){var n=this.doc.sel,i=this.doc;n.somethingSelected()?i.replaceSelection("",null,"+delete"):qa(this,(function(n){var r=Ys(i,n.head,e,t,!1);return e<0?{from:r,to:n.head}:{from:n.head,to:r}}))})),findPosV:function(e,t,n,i){var r=1,o=i;t<0&&(r=-1,t=-t);for(var a=dt(this.doc,e),s=0;s<t;++s){var l=bi(this,a,"div");if(null==o?o=l.left:l.left=o,a=Xs(this,l,r,n),a.hitSide)break}return a},moveV:Nr((function(e,t){var n=this,i=this.doc,r=[],o=!this.display.shift&&!i.extend&&i.sel.somethingSelected();if(i.extendSelectionsBy((function(a){if(o)return e<0?a.from():a.to();var s=bi(n,a.head,"div");null!=a.goalColumn&&(s.left=a.goalColumn),r.push(s.left);var l=Xs(n,s,e,t);return"page"==t&&a==i.sel.primary()&&or(n,vi(n,l,"div").top-s.top),l}),q),r.length)for(var a=0;a<i.sel.ranges.length;a++)i.sel.ranges[a].goalColumn=r[a]})),findWordAt:function(e){var t=this.doc,n=Xe(t,e.line).text,i=e.ch,r=e.ch;if(n){var o=this.getHelper(e,"wordChars");"before"!=e.sticky&&r!=n.length||!i?++r:--i;var a=n.charAt(i),s=ne(a,o)?function(e){return ne(e,o)}:/\s/.test(a)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!ne(e)};while(i>0&&s(n.charAt(i-1)))--i;while(r<n.length&&s(n.charAt(r)))++r}return new ro(rt(e.line,i),rt(e.line,r))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?I(this.display.cursorDiv,"CodeMirror-overwrite"):O(this.display.cursorDiv,"CodeMirror-overwrite"),ve(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==N()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:Nr((function(e,t){sr(this,e,t)})),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-Kn(this)-this.display.barHeight,width:e.scrollWidth-Kn(this)-this.display.barWidth,clientHeight:Yn(this),clientWidth:Gn(this)}},scrollIntoView:Nr((function(e,t){null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:rt(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?lr(this,e):ur(this,e.from,e.to,e.margin)})),setSize:Nr((function(e,t){var n=this,i=function(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e};null!=e&&(this.display.wrapper.style.width=i(e)),null!=t&&(this.display.wrapper.style.height=i(t)),this.options.lineWrapping&&ui(this);var r=this.display.viewFrom;this.doc.iter(r,this.display.viewTo,(function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){Fi(n,r,"widget");break}++r})),this.curOp.forceUpdate=!0,ve(this,"refresh",this)})),operation:function(e){return Mr(this,e)},startOperation:function(){return _r(this)},endOperation:function(){return kr(this)},refresh:Nr((function(){var e=this.display.cachedTextHeight;$i(this),this.curOp.forceUpdate=!0,di(this),sr(this,this.doc.scrollLeft,this.doc.scrollTop),Wr(this.display),(null==e||Math.abs(e-Ei(this.display))>.5||this.options.lineWrapping)&&Ii(this),ve(this,"refresh",this)})),swapDoc:Nr((function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),bo(this,e),di(this),this.display.input.reset(),sr(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,En(this,"swapDoc",this,t),t})),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},xe(e),e.registerHelper=function(t,i,r){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][i]=r},e.registerGlobalHelper=function(t,i,r,o){e.registerHelper(t,i,o),n[t]._global.push({pred:r,val:o})}}function Ys(e,t,n,i,r){var o=t,a=n,s=Xe(e,t.line),l=r&&"rtl"==e.direction?-n:n;function c(){var n=t.line+l;return!(n<e.first||n>=e.first+e.size)&&(t=new rt(n,t.ch,t.sticky),s=Xe(e,n))}function u(o){var a;if("codepoint"==i){var u=s.text.charCodeAt(t.ch+(i>0?0:-1));a=isNaN(u)?null:new rt(t.line,Math.max(0,Math.min(s.text.length,t.ch+n*(u>=55296&&u<56320?2:1))),-n)}else a=r?Ya(e.cm,s,t,n):Ka(s,t,n);if(null==a){if(o||!c())return!1;t=Ga(r,e.cm,s,t.line,l)}else t=a;return!0}if("char"==i||"codepoint"==i)u();else if("column"==i)u(!0);else if("word"==i||"group"==i)for(var d=null,h="group"==i,f=e.cm&&e.cm.getHelper(t,"wordChars"),p=!0;;p=!1){if(n<0&&!u(!p))break;var m=s.text.charAt(t.ch)||"\n",g=ne(m,f)?"w":h&&"\n"==m?"n":!h||/\s/.test(m)?null:"p";if(!h||p||g||(g="s"),d&&d!=g){n<0&&(n=1,u(),t.sticky="after");break}if(g&&(d=g),n>0&&!u(!p))break}var v=Ko(e,t,o,a,!0);return at(o,v)&&(v.hitSide=!0),v}function Xs(e,t,n,i){var r,o,a=e.doc,s=t.left;if("page"==i){var l=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(l-.5*Ei(e.display),3);r=(n>0?t.bottom:t.top)+n*c}else"line"==i&&(r=n>0?t.bottom+3:t.top-3);for(;;){if(o=xi(e,s,r),!o.outside)break;if(n<0?r<=0:r>=a.height){o.hitSide=!0;break}r+=5*n}return o}var Zs=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new z,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Qs(e,t){var n=ei(e,t.line);if(!n||n.hidden)return null;var i=Xe(e.doc,t.line),r=Zn(n,i,t.line),o=he(i,e.doc.direction),a="left";if(o){var s=ue(o,t.ch);a=s%2?"right":"left"}var l=oi(r.map,t.ch,a);return l.offset="right"==l.collapse?l.end:l.start,l}function Js(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}function el(e,t){return t&&(e.bad=!0),e}function tl(e,t,n,i,r){var o="",a=!1,s=e.doc.lineSeparator(),l=!1;function c(e){return function(t){return t.id==e}}function u(){a&&(o+=s,l&&(o+=s),a=l=!1)}function d(e){e&&(u(),o+=e)}function h(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)return void d(n);var o,f=t.getAttribute("cm-marker");if(f){var p=e.findMarks(rt(i,0),rt(r+1,0),c(+f));return void(p.length&&(o=p[0].find(0))&&d(Ze(e.doc,o.from,o.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var m=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;m&&u();for(var g=0;g<t.childNodes.length;g++)h(t.childNodes[g]);/^(pre|p)$/i.test(t.nodeName)&&(l=!0),m&&(a=!0)}else 3==t.nodeType&&d(t.nodeValue.replace(/\u200b/g,"").replace(/\u00a0/g," "))}for(;;){if(h(t),t==n)break;t=t.nextSibling,l=!1}return o}function nl(e,t,n){var i;if(t==e.display.lineDiv){if(i=e.display.lineDiv.childNodes[n],!i)return el(e.clipPos(rt(e.display.viewTo-1)),!0);t=null,n=0}else for(i=t;;i=i.parentNode){if(!i||i==e.display.lineDiv)return null;if(i.parentNode&&i.parentNode==e.display.lineDiv)break}for(var r=0;r<e.display.view.length;r++){var o=e.display.view[r];if(o.node==i)return il(o,t,n)}}function il(e,t,n){var i=e.text.firstChild,r=!1;if(!t||!A(i,t))return el(rt(et(e.line),0),!0);if(t==i&&(r=!0,t=i.childNodes[n],n=0,!t)){var o=e.rest?Y(e.rest):e.line;return el(rt(et(o),o.text.length),r)}var a=3==t.nodeType?t:null,s=t;a||1!=t.childNodes.length||3!=t.firstChild.nodeType||(a=t.firstChild,n&&(n=a.nodeValue.length));while(s.parentNode!=i)s=s.parentNode;var l=e.measure,c=l.maps;function u(t,n,i){for(var r=-1;r<(c?c.length:0);r++)for(var o=r<0?l.map:c[r],a=0;a<o.length;a+=3){var s=o[a+2];if(s==t||s==n){var u=et(r<0?e.line:e.rest[r]),d=o[a]+i;return(i<0||s!=t)&&(d=o[a+(i?1:0)]),rt(u,d)}}}var d=u(a,s,n);if(d)return el(d,r);for(var h=s.nextSibling,f=a?a.nodeValue.length-n:0;h;h=h.nextSibling){if(d=u(h,h.firstChild,0),d)return el(rt(d.line,d.ch-f),r);f+=h.textContent.length}for(var p=s.previousSibling,m=n;p;p=p.previousSibling){if(d=u(p,p.firstChild,-1),d)return el(rt(d.line,d.ch+m),r);m+=p.textContent.length}}Zs.prototype.init=function(e){var t=this,n=this,i=n.cm,r=n.div=e.lineDiv;function o(e){for(var t=e.target;t;t=t.parentNode){if(t==r)return!0;if(/\bCodeMirror-(?:line)?widget\b/.test(t.className))break}return!1}function a(e){if(o(e)&&!be(i,e)){if(i.somethingSelected())Rs({lineWise:!1,text:i.getSelections()}),"cut"==e.type&&i.replaceSelection("",null,"cut");else{if(!i.options.lineWiseCopyCut)return;var t=qs(i);Rs({lineWise:!0,text:t.text}),"cut"==e.type&&i.operation((function(){i.setSelections(t.ranges,0,H),i.replaceSelection("",null,"cut")}))}if(e.clipboardData){e.clipboardData.clearData();var a=Bs.text.join("\n");if(e.clipboardData.setData("Text",a),e.clipboardData.getData("Text")==a)return void e.preventDefault()}var s=Ks(),l=s.firstChild;i.display.lineSpace.insertBefore(s,i.display.lineSpace.firstChild),l.value=Bs.text.join("\n");var c=document.activeElement;P(l),setTimeout((function(){i.display.lineSpace.removeChild(s),c.focus(),c==r&&n.showPrimarySelection()}),50)}}Us(r,i.options.spellcheck,i.options.autocorrect,i.options.autocapitalize),pe(r,"paste",(function(e){!o(e)||be(i,e)||Hs(e,i)||s<=11&&setTimeout(Ar(i,(function(){return t.updateFromDOM()})),20)})),pe(r,"compositionstart",(function(e){t.composing={data:e.data,done:!1}})),pe(r,"compositionupdate",(function(e){t.composing||(t.composing={data:e.data,done:!1})})),pe(r,"compositionend",(function(e){t.composing&&(e.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)})),pe(r,"touchstart",(function(){return n.forceCompositionEnd()})),pe(r,"input",(function(){t.composing||t.readFromDOMSoon()})),pe(r,"copy",a),pe(r,"cut",a)},Zs.prototype.screenReaderLabelChanged=function(e){e?this.div.setAttribute("aria-label",e):this.div.removeAttribute("aria-label")},Zs.prototype.prepareSelection=function(){var e=Hi(this.cm,!1);return e.focus=document.activeElement==this.div,e},Zs.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},Zs.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},Zs.prototype.showPrimarySelection=function(){var e=this.getSelection(),t=this.cm,i=t.doc.sel.primary(),r=i.from(),o=i.to();if(t.display.viewTo==t.display.viewFrom||r.line>=t.display.viewTo||o.line<t.display.viewFrom)e.removeAllRanges();else{var a=nl(t,e.anchorNode,e.anchorOffset),s=nl(t,e.focusNode,e.focusOffset);if(!a||a.bad||!s||s.bad||0!=ot(ct(a,s),r)||0!=ot(lt(a,s),o)){var l=t.display.view,c=r.line>=t.display.viewFrom&&Qs(t,r)||{node:l[0].measure.map[2],offset:0},u=o.line<t.display.viewTo&&Qs(t,o);if(!u){var d=l[l.length-1].measure,h=d.maps?d.maps[d.maps.length-1]:d.map;u={node:h[h.length-1],offset:h[h.length-2]-h[h.length-3]}}if(c&&u){var f,p=e.rangeCount&&e.getRangeAt(0);try{f=S(c.node,c.offset,u.offset,u.node)}catch(m){}f&&(!n&&t.state.focused?(e.collapse(c.node,c.offset),f.collapsed||(e.removeAllRanges(),e.addRange(f))):(e.removeAllRanges(),e.addRange(f)),p&&null==e.anchorNode?e.addRange(p):n&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},Zs.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout((function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation((function(){return e.cm.curOp.selectionChanged=!0}))}),20)},Zs.prototype.showMultipleSelections=function(e){E(this.cm.display.cursorDiv,e.cursors),E(this.cm.display.selectionDiv,e.selection)},Zs.prototype.rememberSelection=function(){var e=this.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},Zs.prototype.selectionInEditor=function(){var e=this.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return A(this.div,t)},Zs.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()&&document.activeElement==this.div||this.showSelection(this.prepareSelection(),!0),this.div.focus())},Zs.prototype.blur=function(){this.div.blur()},Zs.prototype.getField=function(){return this.div},Zs.prototype.supportsTouch=function(){return!0},Zs.prototype.receivedFocus=function(){var e=this;function t(){e.cm.state.focused&&(e.pollSelection(),e.polling.set(e.cm.options.pollInterval,t))}this.selectionInEditor()?this.pollSelection():Mr(this.cm,(function(){return e.cm.curOp.selectionChanged=!0})),this.polling.set(this.cm.options.pollInterval,t)},Zs.prototype.selectionChanged=function(){var e=this.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},Zs.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=this.getSelection(),t=this.cm;if(g&&u&&this.cm.display.gutterSpecs.length&&Js(e.anchorNode))return this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var n=nl(t,e.anchorNode,e.anchorOffset),i=nl(t,e.focusNode,e.focusOffset);n&&i&&Mr(t,(function(){Ro(t.doc,ao(n,i),H),(n.bad||i.bad)&&(t.curOp.selectionChanged=!0)}))}}},Zs.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e,t,n,i=this.cm,r=i.display,o=i.doc.sel.primary(),a=o.from(),s=o.to();if(0==a.ch&&a.line>i.firstLine()&&(a=rt(a.line-1,Xe(i.doc,a.line-1).length)),s.ch==Xe(i.doc,s.line).text.length&&s.line<i.lastLine()&&(s=rt(s.line+1,0)),a.line<r.viewFrom||s.line>r.viewTo-1)return!1;a.line==r.viewFrom||0==(e=Pi(i,a.line))?(t=et(r.view[0].line),n=r.view[0].node):(t=et(r.view[e].line),n=r.view[e-1].node.nextSibling);var l,c,u=Pi(i,s.line);if(u==r.view.length-1?(l=r.viewTo-1,c=r.lineDiv.lastChild):(l=et(r.view[u+1].line)-1,c=r.view[u+1].node.previousSibling),!n)return!1;var d=i.doc.splitLines(tl(i,n,c,t,l)),h=Ze(i.doc,rt(t,0),rt(l,Xe(i.doc,l).text.length));while(d.length>1&&h.length>1)if(Y(d)==Y(h))d.pop(),h.pop(),l--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),t++}var f=0,p=0,m=d[0],g=h[0],v=Math.min(m.length,g.length);while(f<v&&m.charCodeAt(f)==g.charCodeAt(f))++f;var b=Y(d),y=Y(h),w=Math.min(b.length-(1==d.length?f:0),y.length-(1==h.length?f:0));while(p<w&&b.charCodeAt(b.length-p-1)==y.charCodeAt(y.length-p-1))++p;if(1==d.length&&1==h.length&&t==a.line)while(f&&f>a.ch&&b.charCodeAt(b.length-p-1)==y.charCodeAt(y.length-p-1))f--,p++;d[d.length-1]=b.slice(0,b.length-p).replace(/^\u200b+/,""),d[0]=d[0].slice(f).replace(/\u200b+$/,"");var x=rt(t,f),_=rt(l,h.length?Y(h).length-p:0);return d.length>1||d[0]||ot(x,_)?(ia(i.doc,d,x,_,"+input"),!0):void 0},Zs.prototype.ensurePolled=function(){this.forceCompositionEnd()},Zs.prototype.reset=function(){this.forceCompositionEnd()},Zs.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Zs.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout((function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()}),80))},Zs.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||Mr(this.cm,(function(){return $i(e.cm)}))},Zs.prototype.setUneditable=function(e){e.contentEditable="false"},Zs.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||Ar(this.cm,Vs)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Zs.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Zs.prototype.onContextMenu=function(){},Zs.prototype.resetPosition=function(){},Zs.prototype.needsContentAttribute=!0;var rl=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new z,this.hasSelection=!1,this.composing=null};function ol(e,t){if(t=t?F(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=N();t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}function i(){e.value=s.getValue()}var r;if(e.form&&(pe(e.form,"submit",i),!t.leaveSubmitMethodAlone)){var o=e.form;r=o.submit;try{var a=o.submit=function(){i(),o.submit=r,o.submit(),o.submit=a}}catch(l){}}t.finishInit=function(n){n.save=i,n.getTextArea=function(){return e},n.toTextArea=function(){n.toTextArea=isNaN,i(),e.parentNode.removeChild(n.getWrapperElement()),e.style.display="",e.form&&(ge(e.form,"submit",i),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=r))}},e.style.display="none";var s=$s((function(t){return e.parentNode.insertBefore(t,e.nextSibling)}),t);return s}function al(e){e.off=ge,e.on=pe,e.wheelEventPixels=to,e.Doc=_a,e.splitLines=Ie,e.countColumn=j,e.findColumn=U,e.isWordChar=te,e.Pass=V,e.signal=ve,e.Line=ln,e.changeEnd=so,e.scrollbarModel=yr,e.Pos=rt,e.cmpPos=ot,e.modes=je,e.mimeModes=ze,e.resolveMode=Ve,e.getMode=He,e.modeExtensions=We,e.extendMode=qe,e.copyState=Ue,e.startState=Ge,e.innerMode=Ke,e.commands=Xa,e.keyMap=Fa,e.keyName=Ha,e.isModifierKey=Ra,e.lookupKey=Ba,e.normalizeKeyMap=za,e.StringStream=Ye,e.SharedTextMarker=ga,e.TextMarker=pa,e.LineWidget=ua,e.e_preventDefault=_e,e.e_stopPropagation=ke,e.e_stop=Se,e.addClass=I,e.contains=A,e.rmClass=O,e.keyNames=Ia}rl.prototype.init=function(e){var t=this,n=this,i=this.cm;this.createField(e);var r=this.textarea;function o(e){if(!be(i,e)){if(i.somethingSelected())Rs({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var t=qs(i);Rs({lineWise:!0,text:t.text}),"cut"==e.type?i.setSelections(t.ranges,null,H):(n.prevInput="",r.value=t.text.join("\n"),P(r))}"cut"==e.type&&(i.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),m&&(r.style.width="0px"),pe(r,"input",(function(){a&&s>=9&&t.hasSelection&&(t.hasSelection=null),n.poll()})),pe(r,"paste",(function(e){be(i,e)||Hs(e,i)||(i.state.pasteIncoming=+new Date,n.fastPoll())})),pe(r,"cut",o),pe(r,"copy",o),pe(e.scroller,"paste",(function(t){if(!Hn(e,t)&&!be(i,t)){if(!r.dispatchEvent)return i.state.pasteIncoming=+new Date,void n.focus();var o=new Event("paste");o.clipboardData=t.clipboardData,r.dispatchEvent(o)}})),pe(e.lineSpace,"selectstart",(function(t){Hn(e,t)||_e(t)})),pe(r,"compositionstart",(function(){var e=i.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:i.markText(e,i.getCursor("to"),{className:"CodeMirror-composing"})}})),pe(r,"compositionend",(function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)}))},rl.prototype.createField=function(e){this.wrapper=Ks(),this.textarea=this.wrapper.firstChild},rl.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},rl.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,i=Hi(e);if(e.options.moveInputWithCursor){var r=bi(e,n.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();i.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,r.top+a.top-o.top)),i.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,r.left+a.left-o.left))}return i},rl.prototype.showSelection=function(e){var t=this.cm,n=t.display;E(n.cursorDiv,e.cursors),E(n.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},rl.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&P(this.textarea),a&&s>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",a&&s>=9&&(this.hasSelection=null))}},rl.prototype.getField=function(){return this.textarea},rl.prototype.supportsTouch=function(){return!1},rl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!v||N()!=this.textarea))try{this.textarea.focus()}catch(e){}},rl.prototype.blur=function(){this.textarea.blur()},rl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},rl.prototype.receivedFocus=function(){this.slowPoll()},rl.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,(function(){e.poll(),e.cm.state.focused&&e.slowPoll()}))},rl.prototype.fastPoll=function(){var e=!1,t=this;function n(){var i=t.poll();i||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,n))}t.pollingFast=!0,t.polling.set(20,n)},rl.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,i=this.prevInput;if(this.contextMenuPending||!t.state.focused||Le(n)&&!i&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var r=n.value;if(r==i&&!t.somethingSelected())return!1;if(a&&s>=9&&this.hasSelection===r||b&&/[\uf700-\uf7ff]/.test(r))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=r.charCodeAt(0);if(8203!=o||i||(i="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}var l=0,c=Math.min(i.length,r.length);while(l<c&&i.charCodeAt(l)==r.charCodeAt(l))++l;return Mr(t,(function(){Vs(t,r.slice(l),i.length-l,null,e.composing?"*compose":null),r.length>1e3||r.indexOf("\n")>-1?n.value=e.prevInput="":e.prevInput=r,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))})),!0},rl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},rl.prototype.onKeyPress=function(){a&&s>=9&&(this.hasSelection=null),this.fastPoll()},rl.prototype.onContextMenu=function(e){var t=this,n=t.cm,i=n.display,r=t.textarea;t.contextMenuPending&&t.contextMenuPending();var o=Li(n,e),c=i.scroller.scrollTop;if(o&&!d){var u=n.options.resetSelectionOnContextMenu;u&&-1==n.doc.sel.contains(o)&&Ar(n,Ro)(n.doc,ao(o),H);var h,f=r.style.cssText,p=t.wrapper.style.cssText,m=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",r.style.cssText="position: absolute; width: 30px; height: 30px;\n      top: "+(e.clientY-m.top-5)+"px; left: "+(e.clientX-m.left-5)+"px;\n      z-index: 1000; background: "+(a?"rgba(255, 255, 255, .05)":"transparent")+";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(h=window.scrollY),i.input.focus(),l&&window.scrollTo(null,h),i.input.reset(),n.somethingSelected()||(r.value=t.prevInput=" "),t.contextMenuPending=b,i.selForContextMenu=n.doc.sel,clearTimeout(i.detectingSelectAll),a&&s>=9&&v(),k){Se(e);var g=function e(){ge(window,"mouseup",e),setTimeout(b,20)};pe(window,"mouseup",g)}else setTimeout(b,50)}function v(){if(null!=r.selectionStart){var e=n.somethingSelected(),o="​"+(e?r.value:"");r.value="⇚",r.value=o,t.prevInput=e?"":"​",r.selectionStart=1,r.selectionEnd=o.length,i.selForContextMenu=n.doc.sel}}function b(){if(t.contextMenuPending==b&&(t.contextMenuPending=!1,t.wrapper.style.cssText=p,r.style.cssText=f,a&&s<9&&i.scrollbars.setScrollTop(i.scroller.scrollTop=c),null!=r.selectionStart)){(!a||a&&s<9)&&v();var e=0,o=function o(){i.selForContextMenu==n.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==t.prevInput?Ar(n,Yo)(n):e++<10?i.detectingSelectAll=setTimeout(o,500):(i.selForContextMenu=null,i.input.reset())};i.detectingSelectAll=setTimeout(o,200)}}},rl.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e,this.textarea.readOnly=!!e},rl.prototype.setUneditable=function(){},rl.prototype.needsContentAttribute=!1,Is($s),Gs($s);var sl="iter insert remove copy getEditor constructor".split(" ");for(var ll in _a.prototype)_a.prototype.hasOwnProperty(ll)&&B(sl,ll)<0&&($s.prototype[ll]=function(e){return function(){return e.apply(this.doc,arguments)}}(_a.prototype[ll]));return xe(_a),$s.inputStyles={textarea:rl,contenteditable:Zs},$s.defineMode=function(e){$s.defaults.mode||"null"==e||($s.defaults.mode=e),Be.apply(this,arguments)},$s.defineMIME=Re,$s.defineMode("null",(function(){return{token:function(e){return e.skipToEnd()}}})),$s.defineMIME("text/plain","null"),$s.defineExtension=function(e,t){$s.prototype[e]=t},$s.defineDocExtension=function(e,t){_a.prototype[e]=t},$s.fromTextArea=ol,al($s),$s.version="5.58.3",$s}))},"56ef":function(e,t,n){var i=n("d066"),r=n("241c"),o=n("7418"),a=n("825a");e.exports=i("Reflect","ownKeys")||function(e){var t=r.f(a(e)),n=o.f;return n?t.concat(n(e)):t}},"576e":function(e,t,n){},5899:function(e,t){e.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},"58a8":function(e,t,n){var i=n("1d80"),r=n("5899"),o="["+r+"]",a=RegExp("^"+o+o+"*"),s=RegExp(o+o+"*$"),l=function(e){return function(t){var n=String(i(t));return 1&e&&(n=n.replace(a,"")),2&e&&(n=n.replace(s,"")),n}};e.exports={start:l(1),end:l(2),trim:l(3)}},5924:function(e,t,n){"use strict";n("a4d3"),n("e01a"),n("d28b"),n("4de4"),n("caad"),n("c975"),n("e260"),n("a9e3"),n("d3b7"),n("ac1f"),n("2532"),n("3ca3"),n("466d"),n("5319"),n("1276"),n("ddb0");var i=n("7037");t.__esModule=!0,t.isInContainer=t.getScrollContainer=t.isScroll=t.getStyle=t.once=t.off=t.on=void 0;var r="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)};t.hasClass=g,t.addClass=v,t.removeClass=b,t.setStyle=w;var o=n("8bbf"),a=s(o);function s(e){return e&&e.__esModule?e:{default:e}}var l=a.default.prototype.$isServer,c=/([\:\-\_]+(.))/g,u=/^moz([A-Z])/,d=l?0:Number(document.documentMode),h=function(e){return(e||"").replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g,"")},f=function(e){return e.replace(c,(function(e,t,n,i){return i?n.toUpperCase():n})).replace(u,"Moz$1")},p=t.on=function(){return!l&&document.addEventListener?function(e,t,n){e&&t&&n&&e.addEventListener(t,n,!1)}:function(e,t,n){e&&t&&n&&e.attachEvent("on"+t,n)}}(),m=t.off=function(){return!l&&document.removeEventListener?function(e,t,n){e&&t&&e.removeEventListener(t,n,!1)}:function(e,t,n){e&&t&&e.detachEvent("on"+t,n)}}();function g(e,t){if(!e||!t)return!1;if(-1!==t.indexOf(" "))throw new Error("className should not contain space.");return e.classList?e.classList.contains(t):(" "+e.className+" ").indexOf(" "+t+" ")>-1}function v(e,t){if(e){for(var n=e.className,i=(t||"").split(" "),r=0,o=i.length;r<o;r++){var a=i[r];a&&(e.classList?e.classList.add(a):g(e,a)||(n+=" "+a))}e.classList||(e.className=n)}}function b(e,t){if(e&&t){for(var n=t.split(" "),i=" "+e.className+" ",r=0,o=n.length;r<o;r++){var a=n[r];a&&(e.classList?e.classList.remove(a):g(e,a)&&(i=i.replace(" "+a+" "," ")))}e.classList||(e.className=h(i))}}t.once=function(e,t,n){var i=function i(){n&&n.apply(this,arguments),m(e,t,i)};p(e,t,i)};var y=t.getStyle=d<9?function(e,t){if(!l){if(!e||!t)return null;t=f(t),"float"===t&&(t="styleFloat");try{switch(t){case"opacity":try{return e.filters.item("alpha").opacity/100}catch(n){return 1}default:return e.style[t]||e.currentStyle?e.currentStyle[t]:null}}catch(n){return e.style[t]}}}:function(e,t){if(!l){if(!e||!t)return null;t=f(t),"float"===t&&(t="cssFloat");try{var n=document.defaultView.getComputedStyle(e,"");return e.style[t]||n?n[t]:null}catch(i){return e.style[t]}}};function w(e,t,n){if(e&&t)if("object"===("undefined"===typeof t?"undefined":r(t)))for(var i in t)t.hasOwnProperty(i)&&w(e,i,t[i]);else t=f(t),"opacity"===t&&d<9?e.style.filter=isNaN(n)?"":"alpha(opacity="+100*n+")":e.style[t]=n}var x=t.isScroll=function(e,t){if(!l){var n=null!==t||void 0!==t,i=y(e,n?t?"overflow-y":"overflow-x":"overflow");return i.match(/(scroll|auto)/)}};t.getScrollContainer=function(e,t){if(!l){var n=e;while(n){if([window,document,document.documentElement].includes(n))return window;if(x(n,t))return n;n=n.parentNode}return n}},t.isInContainer=function(e,t){if(l||!e||!t)return!1;var n=e.getBoundingClientRect(),i=void 0;return i=[window,document,document.documentElement,null,void 0].includes(t)?{top:0,right:window.innerWidth,bottom:window.innerHeight,left:0}:t.getBoundingClientRect(),n.top<i.bottom&&n.bottom>i.top&&n.right>i.left&&n.left<i.right}},"597f":function(e,t){e.exports=function(e,t,n,i){var r,o=0;function a(){var a=this,s=Number(new Date)-o,l=arguments;function c(){o=Number(new Date),n.apply(a,l)}function u(){r=void 0}i&&!r&&c(),r&&clearTimeout(r),void 0===i&&s>e?c():!0!==t&&(r=setTimeout(i?u:c,void 0===i?e-s:e))}return"boolean"!==typeof t&&(i=n,n=t,t=void 0),a}},"5a34":function(e,t,n){var i=n("44e7");e.exports=function(e){if(i(e))throw TypeError("The method doesn't accept regular expressions");return e}},"5a43":function(e,t){function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}e.exports=n},"5a94":function(e,t,n){var i=n("b367")("keys"),r=n("8b1a");e.exports=function(e){return i[e]||(i[e]=r(e))}},"5bef":function(e,t,n){(function(e){e(n("56b3"),n("f9d4"),n("7b00"),n("d69f"))})((function(e){"use strict";e.defineMode("pug",(function(t){var n="keyword",i="meta",r="builtin",o="qualifier",a={"{":"}","(":")","[":"]"},s=e.getMode(t,"javascript");function l(){this.javaScriptLine=!1,this.javaScriptLineExcludesColon=!1,this.javaScriptArguments=!1,this.javaScriptArgumentsDepth=0,this.isInterpolating=!1,this.interpolationNesting=0,this.jsState=e.startState(s),this.restOfLine="",this.isIncludeFiltered=!1,this.isEach=!1,this.lastTag="",this.scriptType="",this.isAttrs=!1,this.attrsNest=[],this.inAttributeName=!0,this.attributeIsType=!1,this.attrValue="",this.indentOf=1/0,this.indentToken="",this.innerMode=null,this.innerState=null,this.innerModeForLine=!1}function c(e,t){if(e.sol()&&(t.javaScriptLine=!1,t.javaScriptLineExcludesColon=!1),t.javaScriptLine){if(t.javaScriptLineExcludesColon&&":"===e.peek())return t.javaScriptLine=!1,void(t.javaScriptLineExcludesColon=!1);var n=s.token(e,t.jsState);return e.eol()&&(t.javaScriptLine=!1),n||!0}}function u(e,t){if(t.javaScriptArguments){if(0===t.javaScriptArgumentsDepth&&"("!==e.peek())return void(t.javaScriptArguments=!1);if("("===e.peek()?t.javaScriptArgumentsDepth++:")"===e.peek()&&t.javaScriptArgumentsDepth--,0===t.javaScriptArgumentsDepth)return void(t.javaScriptArguments=!1);var n=s.token(e,t.jsState);return n||!0}}function d(e){if(e.match(/^yield\b/))return"keyword"}function h(e){if(e.match(/^(?:doctype) *([^\n]+)?/))return i}function f(e,t){if(e.match("#{"))return t.isInterpolating=!0,t.interpolationNesting=0,"punctuation"}function p(e,t){if(t.isInterpolating){if("}"===e.peek()){if(t.interpolationNesting--,t.interpolationNesting<0)return e.next(),t.isInterpolating=!1,"punctuation"}else"{"===e.peek()&&t.interpolationNesting++;return s.token(e,t.jsState)||!0}}function m(e,t){if(e.match(/^case\b/))return t.javaScriptLine=!0,n}function g(e,t){if(e.match(/^when\b/))return t.javaScriptLine=!0,t.javaScriptLineExcludesColon=!0,n}function v(e){if(e.match(/^default\b/))return n}function b(e,t){if(e.match(/^extends?\b/))return t.restOfLine="string",n}function y(e,t){if(e.match(/^append\b/))return t.restOfLine="variable",n}function w(e,t){if(e.match(/^prepend\b/))return t.restOfLine="variable",n}function x(e,t){if(e.match(/^block\b *(?:(prepend|append)\b)?/))return t.restOfLine="variable",n}function _(e,t){if(e.match(/^include\b/))return t.restOfLine="string",n}function k(e,t){if(e.match(/^include:([a-zA-Z0-9\-]+)/,!1)&&e.match("include"))return t.isIncludeFiltered=!0,n}function C(e,t){if(t.isIncludeFiltered){var n=I(e,t);return t.isIncludeFiltered=!1,t.restOfLine="string",n}}function S(e,t){if(e.match(/^mixin\b/))return t.javaScriptLine=!0,n}function O(e,t){return e.match(/^\+([-\w]+)/)?(e.match(/^\( *[-\w]+ *=/,!1)||(t.javaScriptArguments=!0,t.javaScriptArgumentsDepth=0),"variable"):e.match(/^\+#{/,!1)?(e.next(),t.mixinCallAfter=!0,f(e,t)):void 0}function T(e,t){if(t.mixinCallAfter)return t.mixinCallAfter=!1,e.match(/^\( *[-\w]+ *=/,!1)||(t.javaScriptArguments=!0,t.javaScriptArgumentsDepth=0),!0}function E(e,t){if(e.match(/^(if|unless|else if|else)\b/))return t.javaScriptLine=!0,n}function D(e,t){if(e.match(/^(- *)?(each|for)\b/))return t.isEach=!0,n}function M(e,t){if(t.isEach){if(e.match(/^ in\b/))return t.javaScriptLine=!0,t.isEach=!1,n;if(e.sol()||e.eol())t.isEach=!1;else if(e.next()){while(!e.match(/^ in\b/,!1)&&e.next());return"variable"}}}function A(e,t){if(e.match(/^while\b/))return t.javaScriptLine=!0,n}function N(e,t){var n;if(n=e.match(/^(\w(?:[-:\w]*\w)?)\/?/))return t.lastTag=n[1].toLowerCase(),"script"===t.lastTag&&(t.scriptType="application/javascript"),"tag"}function I(n,i){var r;if(n.match(/^:([\w\-]+)/))return t&&t.innerModes&&(r=t.innerModes(n.current().substring(1))),r||(r=n.current().substring(1)),"string"===typeof r&&(r=e.getMode(t,r)),U(n,i,r),"atom"}function L(e,t){if(e.match(/^(!?=|-)/))return t.javaScriptLine=!0,"punctuation"}function P(e){if(e.match(/^#([\w-]+)/))return r}function $(e){if(e.match(/^\.([\w-]+)/))return o}function F(e,t){if("("==e.peek())return e.next(),t.isAttrs=!0,t.attrsNest=[],t.inAttributeName=!0,t.attrValue="",t.attributeIsType=!1,"punctuation"}function j(t,n){if(n.isAttrs){if(a[t.peek()]&&n.attrsNest.push(a[t.peek()]),n.attrsNest[n.attrsNest.length-1]===t.peek())n.attrsNest.pop();else if(t.eat(")"))return n.isAttrs=!1,"punctuation";if(n.inAttributeName&&t.match(/^[^=,\)!]+/))return"="!==t.peek()&&"!"!==t.peek()||(n.inAttributeName=!1,n.jsState=e.startState(s),"script"===n.lastTag&&"type"===t.current().trim().toLowerCase()?n.attributeIsType=!0:n.attributeIsType=!1),"attribute";var i=s.token(t,n.jsState);if(n.attributeIsType&&"string"===i&&(n.scriptType=t.current().toString()),0===n.attrsNest.length&&("string"===i||"variable"===i||"keyword"===i))try{return Function("","var x "+n.attrValue.replace(/,\s*$/,"").replace(/^!/,"")),n.inAttributeName=!0,n.attrValue="",t.backUp(t.current().length),j(t,n)}catch(r){}return n.attrValue+=t.current(),i||!0}}function z(e,t){if(e.match(/^&attributes\b/))return t.javaScriptArguments=!0,t.javaScriptArgumentsDepth=0,"keyword"}function B(e){if(e.sol()&&e.eatSpace())return"indent"}function R(e,t){if(e.match(/^ *\/\/(-)?([^\n]*)/))return t.indentOf=e.indentation(),t.indentToken="comment","comment"}function V(e){if(e.match(/^: */))return"colon"}function H(e,t){return e.match(/^(?:\| ?| )([^\n]+)/)?"string":e.match(/^(<[^\n]*)/,!1)?(U(e,t,"htmlmixed"),t.innerModeForLine=!0,K(e,t,!0)):void 0}function W(e,t){if(e.eat(".")){var n=null;return"script"===t.lastTag&&-1!=t.scriptType.toLowerCase().indexOf("javascript")?n=t.scriptType.toLowerCase().replace(/"|'/g,""):"style"===t.lastTag&&(n="css"),U(e,t,n),"dot"}}function q(e){return e.next(),null}function U(n,i,r){r=e.mimeModes[r]||r,r=t.innerModes&&t.innerModes(r)||r,r=e.mimeModes[r]||r,r=e.getMode(t,r),i.indentOf=n.indentation(),r&&"null"!==r.name?i.innerMode=r:i.indentToken="string"}function K(t,n,i){if(t.indentation()>n.indentOf||n.innerModeForLine&&!t.sol()||i)return n.innerMode?(n.innerState||(n.innerState=n.innerMode.startState?e.startState(n.innerMode,t.indentation()):{}),t.hideFirstChars(n.indentOf+2,(function(){return n.innerMode.token(t,n.innerState)||!0}))):(t.skipToEnd(),n.indentToken);t.sol()&&(n.indentOf=1/0,n.indentToken=null,n.innerMode=null,n.innerState=null)}function G(e,t){if(e.sol()&&(t.restOfLine=""),t.restOfLine){e.skipToEnd();var n=t.restOfLine;return t.restOfLine="",n}}function Y(){return new l}function X(e){return e.copy()}function Z(e,t){var n=K(e,t)||G(e,t)||p(e,t)||C(e,t)||M(e,t)||j(e,t)||c(e,t)||u(e,t)||T(e,t)||d(e)||h(e)||f(e,t)||m(e,t)||g(e,t)||v(e)||b(e,t)||y(e,t)||w(e,t)||x(e,t)||_(e,t)||k(e,t)||S(e,t)||O(e,t)||E(e,t)||D(e,t)||A(e,t)||N(e,t)||I(e,t)||L(e,t)||P(e)||$(e)||F(e,t)||z(e,t)||B(e)||H(e,t)||R(e,t)||V(e)||W(e,t)||q(e);return!0===n?null:n}return l.prototype.copy=function(){var t=new l;return t.javaScriptLine=this.javaScriptLine,t.javaScriptLineExcludesColon=this.javaScriptLineExcludesColon,t.javaScriptArguments=this.javaScriptArguments,t.javaScriptArgumentsDepth=this.javaScriptArgumentsDepth,t.isInterpolating=this.isInterpolating,t.interpolationNesting=this.interpolationNesting,t.jsState=e.copyState(s,this.jsState),t.innerMode=this.innerMode,this.innerMode&&this.innerState&&(t.innerState=e.copyState(this.innerMode,this.innerState)),t.restOfLine=this.restOfLine,t.isIncludeFiltered=this.isIncludeFiltered,t.isEach=this.isEach,t.lastTag=this.lastTag,t.scriptType=this.scriptType,t.isAttrs=this.isAttrs,t.attrsNest=this.attrsNest.slice(),t.inAttributeName=this.inAttributeName,t.attributeIsType=this.attributeIsType,t.attrValue=this.attrValue,t.indentOf=this.indentOf,t.indentToken=this.indentToken,t.innerModeForLine=this.innerModeForLine,t},{startState:Y,copyState:X,token:Z}}),"javascript","css","htmlmixed"),e.defineMIME("text/x-pug","pug"),e.defineMIME("text/x-jade","pug")}))},"5c6c":function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},"5c96":function(e,t,n){n("a4d3"),n("e01a"),n("d28b"),n("944a"),n("99af"),n("a623"),n("cb29"),n("4de4"),n("7db0"),n("4160"),n("caad"),n("c975"),n("e260"),n("a15b"),n("d81d"),n("13d5"),n("fb6a"),n("45fc"),n("a434"),n("b0c0"),n("0c47"),n("23dc"),n("a9e3"),n("9129"),n("c35a"),n("b680"),n("cca6"),n("dca8"),n("b64b"),n("d3b7"),n("07ac"),n("e6cf"),n("4d63"),n("ac1f"),n("25f0"),n("2532"),n("3ca3"),n("466d"),n("5319"),n("1276"),n("498a"),n("c7cd"),n("9911"),n("c96a"),n("159b"),n("ddb0"),n("2b3d");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=45)}([function(e,t){e.exports=n("d940")},function(e,t){e.exports=n("5924")},function(e,t){e.exports=n("8122")},function(e,t){e.exports=n("d010")},function(e,t){e.exports=n("6b7c")},function(e,t){e.exports=n("e974")},function(e,t){e.exports=n("8bbf")},function(e,t){e.exports=n("7f4d")},function(e,t){e.exports=n("f3ad")},function(e,t){e.exports=n("2bb5")},function(e,t){e.exports=n("417f")},function(e,t){e.exports=n("4897")},function(e,t){e.exports=n("eedf")},function(e,t){e.exports=n("4010")},function(e,t){e.exports=n("5128")},function(e,t){e.exports=n("0e15")},function(e,t){e.exports=n("dcdc")},function(e,t){e.exports=n("14e9")},function(e,t){e.exports=n("a742")},function(e,t){e.exports=n("d397")},function(e,t){e.exports=n("d7d1")},function(e,t){e.exports=n("5488")},function(e,t){e.exports=n("12f2")},function(e,t){e.exports=n("41f8")},function(e,t){e.exports=n("92fa")},function(e,t){e.exports=n("597f")},function(e,t){e.exports=n("299c")},function(e,t){e.exports=n("2a5e")},function(e,t){e.exports=n("e452")},function(e,t){e.exports=n("845f")},function(e,t){e.exports=n("8bbc")},function(e,t){e.exports=n("e62d")},function(e,t){e.exports=n("7fc1")},function(e,t){e.exports=n("c56a")},function(e,t){e.exports=n("c284")},function(e,t){e.exports=n("9619")},function(e,t){e.exports=n("4e4b")},function(e,t){e.exports=n("e772")},function(e,t){e.exports=n("c098")},function(e,t){e.exports=n("722f")},function(e,t){e.exports=n("4cb2")},function(e,t){e.exports=n("e450")},function(e,t){e.exports=n("4726")},function(e,t){e.exports=n("f494")},function(e,t){e.exports=n("6ac9")},function(e,t,n){e.exports=n(46)},function(e,t,n){"use strict";n.r(t);var r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ul",{staticClass:"el-pager",on:{click:e.onPagerClick}},[e.pageCount>0?n("li",{staticClass:"number",class:{active:1===e.currentPage,disabled:e.disabled}},[e._v("1")]):e._e(),e.showPrevMore?n("li",{staticClass:"el-icon more btn-quickprev",class:[e.quickprevIconClass,{disabled:e.disabled}],on:{mouseenter:function(t){e.onMouseenter("left")},mouseleave:function(t){e.quickprevIconClass="el-icon-more"}}}):e._e(),e._l(e.pagers,(function(t){return n("li",{key:t,staticClass:"number",class:{active:e.currentPage===t,disabled:e.disabled}},[e._v(e._s(t))])})),e.showNextMore?n("li",{staticClass:"el-icon more btn-quicknext",class:[e.quicknextIconClass,{disabled:e.disabled}],on:{mouseenter:function(t){e.onMouseenter("right")},mouseleave:function(t){e.quicknextIconClass="el-icon-more"}}}):e._e(),e.pageCount>1?n("li",{staticClass:"number",class:{active:e.currentPage===e.pageCount,disabled:e.disabled}},[e._v(e._s(e.pageCount))]):e._e()],2)},o=[];r._withStripped=!0;var a={name:"ElPager",props:{currentPage:Number,pageCount:Number,pagerCount:Number,disabled:Boolean},watch:{showPrevMore:function(e){e||(this.quickprevIconClass="el-icon-more")},showNextMore:function(e){e||(this.quicknextIconClass="el-icon-more")}},methods:{onPagerClick:function(e){var t=e.target;if("UL"!==t.tagName&&!this.disabled){var n=Number(e.target.textContent),i=this.pageCount,r=this.currentPage,o=this.pagerCount-2;-1!==t.className.indexOf("more")&&(-1!==t.className.indexOf("quickprev")?n=r-o:-1!==t.className.indexOf("quicknext")&&(n=r+o)),isNaN(n)||(n<1&&(n=1),n>i&&(n=i)),n!==r&&this.$emit("change",n)}},onMouseenter:function(e){this.disabled||("left"===e?this.quickprevIconClass="el-icon-d-arrow-left":this.quicknextIconClass="el-icon-d-arrow-right")}},computed:{pagers:function(){var e=this.pagerCount,t=(e-1)/2,n=Number(this.currentPage),i=Number(this.pageCount),r=!1,o=!1;i>e&&(n>e-t&&(r=!0),n<i-t&&(o=!0));var a=[];if(r&&!o)for(var s=i-(e-2),l=s;l<i;l++)a.push(l);else if(!r&&o)for(var c=2;c<e;c++)a.push(c);else if(r&&o)for(var u=Math.floor(e/2)-1,d=n-u;d<=n+u;d++)a.push(d);else for(var h=2;h<i;h++)a.push(h);return this.showPrevMore=r,this.showNextMore=o,a}},data:function(){return{current:null,showPrevMore:!1,showNextMore:!1,quicknextIconClass:"el-icon-more",quickprevIconClass:"el-icon-more"}}},s=a;function l(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}var c=l(s,r,o,!1,null,null,null);c.options.__file="packages/pagination/src/pager.vue";var u=c.exports,d=n(36),h=n.n(d),f=n(37),p=n.n(f),m=n(8),g=n.n(m),v=n(4),b=n.n(v),y=n(2),w={name:"ElPagination",props:{pageSize:{type:Number,default:10},small:Boolean,total:Number,pageCount:Number,pagerCount:{type:Number,validator:function(e){return(0|e)===e&&e>4&&e<22&&e%2===1},default:7},currentPage:{type:Number,default:1},layout:{default:"prev, pager, next, jumper, ->, total"},pageSizes:{type:Array,default:function(){return[10,20,30,40,50,100]}},popperClass:String,prevText:String,nextText:String,background:Boolean,disabled:Boolean,hideOnSinglePage:Boolean},data:function(){return{internalCurrentPage:1,internalPageSize:0,lastEmittedPage:-1,userChangePageSize:!1}},render:function(e){var t=this.layout;if(!t)return null;if(this.hideOnSinglePage&&(!this.internalPageCount||1===this.internalPageCount))return null;var n=e("div",{class:["el-pagination",{"is-background":this.background,"el-pagination--small":this.small}]}),i={prev:e("prev"),jumper:e("jumper"),pager:e("pager",{attrs:{currentPage:this.internalCurrentPage,pageCount:this.internalPageCount,pagerCount:this.pagerCount,disabled:this.disabled},on:{change:this.handleCurrentChange}}),next:e("next"),sizes:e("sizes",{attrs:{pageSizes:this.pageSizes}}),slot:e("slot",[this.$slots.default?this.$slots.default:""]),total:e("total")},r=t.split(",").map((function(e){return e.trim()})),o=e("div",{class:"el-pagination__rightwrapper"}),a=!1;return n.children=n.children||[],o.children=o.children||[],r.forEach((function(e){"->"!==e?a?o.children.push(i[e]):n.children.push(i[e]):a=!0})),a&&n.children.unshift(o),n},components:{Prev:{render:function(e){return e("button",{attrs:{type:"button",disabled:this.$parent.disabled||this.$parent.internalCurrentPage<=1},class:"btn-prev",on:{click:this.$parent.prev}},[this.$parent.prevText?e("span",[this.$parent.prevText]):e("i",{class:"el-icon el-icon-arrow-left"})])}},Next:{render:function(e){return e("button",{attrs:{type:"button",disabled:this.$parent.disabled||this.$parent.internalCurrentPage===this.$parent.internalPageCount||0===this.$parent.internalPageCount},class:"btn-next",on:{click:this.$parent.next}},[this.$parent.nextText?e("span",[this.$parent.nextText]):e("i",{class:"el-icon el-icon-arrow-right"})])}},Sizes:{mixins:[b.a],props:{pageSizes:Array},watch:{pageSizes:{immediate:!0,handler:function(e,t){Object(y["valueEquals"])(e,t)||Array.isArray(e)&&(this.$parent.internalPageSize=e.indexOf(this.$parent.pageSize)>-1?this.$parent.pageSize:this.pageSizes[0])}}},render:function(e){var t=this;return e("span",{class:"el-pagination__sizes"},[e("el-select",{attrs:{value:this.$parent.internalPageSize,popperClass:this.$parent.popperClass||"",size:"mini",disabled:this.$parent.disabled},on:{input:this.handleChange}},[this.pageSizes.map((function(n){return e("el-option",{attrs:{value:n,label:n+t.t("el.pagination.pagesize")}})}))])])},components:{ElSelect:h.a,ElOption:p.a},methods:{handleChange:function(e){e!==this.$parent.internalPageSize&&(this.$parent.internalPageSize=e=parseInt(e,10),this.$parent.userChangePageSize=!0,this.$parent.$emit("update:pageSize",e),this.$parent.$emit("size-change",e))}}},Jumper:{mixins:[b.a],components:{ElInput:g.a},data:function(){return{userInput:null}},watch:{"$parent.internalCurrentPage":function(){this.userInput=null}},methods:{handleKeyup:function(e){var t=e.keyCode,n=e.target;13===t&&this.handleChange(n.value)},handleInput:function(e){this.userInput=e},handleChange:function(e){this.$parent.internalCurrentPage=this.$parent.getValidCurrentPage(e),this.$parent.emitChange(),this.userInput=null}},render:function(e){return e("span",{class:"el-pagination__jump"},[this.t("el.pagination.goto"),e("el-input",{class:"el-pagination__editor is-in-pagination",attrs:{min:1,max:this.$parent.internalPageCount,value:null!==this.userInput?this.userInput:this.$parent.internalCurrentPage,type:"number",disabled:this.$parent.disabled},nativeOn:{keyup:this.handleKeyup},on:{input:this.handleInput,change:this.handleChange}}),this.t("el.pagination.pageClassifier")])}},Total:{mixins:[b.a],render:function(e){return"number"===typeof this.$parent.total?e("span",{class:"el-pagination__total"},[this.t("el.pagination.total",{total:this.$parent.total})]):""}},Pager:u},methods:{handleCurrentChange:function(e){this.internalCurrentPage=this.getValidCurrentPage(e),this.userChangePageSize=!0,this.emitChange()},prev:function(){if(!this.disabled){var e=this.internalCurrentPage-1;this.internalCurrentPage=this.getValidCurrentPage(e),this.$emit("prev-click",this.internalCurrentPage),this.emitChange()}},next:function(){if(!this.disabled){var e=this.internalCurrentPage+1;this.internalCurrentPage=this.getValidCurrentPage(e),this.$emit("next-click",this.internalCurrentPage),this.emitChange()}},getValidCurrentPage:function(e){e=parseInt(e,10);var t="number"===typeof this.internalPageCount,n=void 0;return t?e<1?n=1:e>this.internalPageCount&&(n=this.internalPageCount):(isNaN(e)||e<1)&&(n=1),(void 0===n&&isNaN(e)||0===n)&&(n=1),void 0===n?e:n},emitChange:function(){var e=this;this.$nextTick((function(){(e.internalCurrentPage!==e.lastEmittedPage||e.userChangePageSize)&&(e.$emit("current-change",e.internalCurrentPage),e.lastEmittedPage=e.internalCurrentPage,e.userChangePageSize=!1)}))}},computed:{internalPageCount:function(){return"number"===typeof this.total?Math.max(1,Math.ceil(this.total/this.internalPageSize)):"number"===typeof this.pageCount?Math.max(1,this.pageCount):null}},watch:{currentPage:{immediate:!0,handler:function(e){this.internalCurrentPage=this.getValidCurrentPage(e)}},pageSize:{immediate:!0,handler:function(e){this.internalPageSize=isNaN(e)?10:e}},internalCurrentPage:{immediate:!0,handler:function(e){this.$emit("update:currentPage",e),this.lastEmittedPage=-1}},internalPageCount:function(e){var t=this.internalCurrentPage;e>0&&0===t?this.internalCurrentPage=1:t>e&&(this.internalCurrentPage=0===e?1:e,this.userChangePageSize&&this.emitChange()),this.userChangePageSize=!1}},install:function(e){e.component(w.name,w)}},x=w,_=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"dialog-fade"},on:{"after-enter":e.afterEnter,"after-leave":e.afterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-dialog__wrapper",on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[n("div",{key:e.key,ref:"dialog",class:["el-dialog",{"is-fullscreen":e.fullscreen,"el-dialog--center":e.center},e.customClass],style:e.style,attrs:{role:"dialog","aria-modal":"true","aria-label":e.title||"dialog"}},[n("div",{staticClass:"el-dialog__header"},[e._t("title",[n("span",{staticClass:"el-dialog__title"},[e._v(e._s(e.title))])]),e.showClose?n("button",{staticClass:"el-dialog__headerbtn",attrs:{type:"button","aria-label":"Close"},on:{click:e.handleClose}},[n("i",{staticClass:"el-dialog__close el-icon el-icon-close"})]):e._e()],2),e.rendered?n("div",{staticClass:"el-dialog__body"},[e._t("default")],2):e._e(),e.$slots.footer?n("div",{staticClass:"el-dialog__footer"},[e._t("footer")],2):e._e()])])])},k=[];_._withStripped=!0;var C=n(14),S=n.n(C),O=n(9),T=n.n(O),E=n(3),D=n.n(E),M={name:"ElDialog",mixins:[S.a,D.a,T.a],props:{title:{type:String,default:""},modal:{type:Boolean,default:!0},modalAppendToBody:{type:Boolean,default:!0},appendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},width:String,fullscreen:Boolean,customClass:{type:String,default:""},top:{type:String,default:"15vh"},beforeClose:Function,center:{type:Boolean,default:!1},destroyOnClose:Boolean},data:function(){return{closed:!1,key:0}},watch:{visible:function(e){var t=this;e?(this.closed=!1,this.$emit("open"),this.$el.addEventListener("scroll",this.updatePopper),this.$nextTick((function(){t.$refs.dialog.scrollTop=0})),this.appendToBody&&document.body.appendChild(this.$el)):(this.$el.removeEventListener("scroll",this.updatePopper),this.closed||this.$emit("close"),this.destroyOnClose&&this.$nextTick((function(){t.key++})))}},computed:{style:function(){var e={};return this.fullscreen||(e.marginTop=this.top,this.width&&(e.width=this.width)),e}},methods:{getMigratingConfig:function(){return{props:{size:"size is removed."}}},handleWrapperClick:function(){this.closeOnClickModal&&this.handleClose()},handleClose:function(){"function"===typeof this.beforeClose?this.beforeClose(this.hide):this.hide()},hide:function(e){!1!==e&&(this.$emit("update:visible",!1),this.$emit("close"),this.closed=!0)},updatePopper:function(){this.broadcast("ElSelectDropdown","updatePopper"),this.broadcast("ElDropdownMenu","updatePopper")},afterEnter:function(){this.$emit("opened")},afterLeave:function(){this.$emit("closed")}},mounted:function(){this.visible&&(this.rendered=!0,this.open(),this.appendToBody&&document.body.appendChild(this.$el))},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},A=M,N=l(A,_,k,!1,null,null,null);N.options.__file="packages/dialog/src/component.vue";var I=N.exports;I.install=function(e){e.component(I.name,I)};var L=I,P=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.close,expression:"close"}],staticClass:"el-autocomplete",attrs:{"aria-haspopup":"listbox",role:"combobox","aria-expanded":e.suggestionVisible,"aria-owns":e.id}},[n("el-input",e._b({ref:"input",on:{input:e.handleInput,change:e.handleChange,focus:e.handleFocus,blur:e.handleBlur,clear:e.handleClear},nativeOn:{keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.highlight(e.highlightedIndex-1)},function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.highlight(e.highlightedIndex+1)},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleKeyEnter(t)},function(t){return!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab")?null:e.close(t)}]}},"el-input",[e.$props,e.$attrs],!1),[e.$slots.prepend?n("template",{slot:"prepend"},[e._t("prepend")],2):e._e(),e.$slots.append?n("template",{slot:"append"},[e._t("append")],2):e._e(),e.$slots.prefix?n("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),e.$slots.suffix?n("template",{slot:"suffix"},[e._t("suffix")],2):e._e()],2),n("el-autocomplete-suggestions",{ref:"suggestions",class:[e.popperClass?e.popperClass:""],attrs:{"visible-arrow":"","popper-options":e.popperOptions,"append-to-body":e.popperAppendToBody,placement:e.placement,id:e.id}},e._l(e.suggestions,(function(t,i){return n("li",{key:i,class:{highlighted:e.highlightedIndex===i},attrs:{id:e.id+"-item-"+i,role:"option","aria-selected":e.highlightedIndex===i},on:{click:function(n){e.select(t)}}},[e._t("default",[e._v("\n        "+e._s(t[e.valueKey])+"\n      ")],{item:t})],2)})),0)],1)},$=[];P._withStripped=!0;var F=n(15),j=n.n(F),z=n(10),B=n.n(z),R=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-autocomplete-suggestion el-popper",class:{"is-loading":!e.parent.hideLoading&&e.parent.loading},style:{width:e.dropdownWidth},attrs:{role:"region"}},[n("el-scrollbar",{attrs:{tag:"ul","wrap-class":"el-autocomplete-suggestion__wrap","view-class":"el-autocomplete-suggestion__list"}},[!e.parent.hideLoading&&e.parent.loading?n("li",[n("i",{staticClass:"el-icon-loading"})]):e._t("default")],2)],1)])},V=[];R._withStripped=!0;var H=n(5),W=n.n(H),q=n(17),U=n.n(q),K={components:{ElScrollbar:U.a},mixins:[W.a,D.a],componentName:"ElAutocompleteSuggestions",data:function(){return{parent:this.$parent,dropdownWidth:""}},props:{options:{default:function(){return{gpuAcceleration:!1}}},id:String},methods:{select:function(e){this.dispatch("ElAutocomplete","item-click",e)}},updated:function(){var e=this;this.$nextTick((function(t){e.popperJS&&e.updatePopper()}))},mounted:function(){this.$parent.popperElm=this.popperElm=this.$el,this.referenceElm=this.$parent.$refs.input.$refs.input||this.$parent.$refs.input.$refs.textarea,this.referenceList=this.$el.querySelector(".el-autocomplete-suggestion__list"),this.referenceList.setAttribute("role","listbox"),this.referenceList.setAttribute("id",this.id)},created:function(){var e=this;this.$on("visible",(function(t,n){e.dropdownWidth=n+"px",e.showPopper=t}))}},G=K,Y=l(G,R,V,!1,null,null,null);Y.options.__file="packages/autocomplete/src/autocomplete-suggestions.vue";var X=Y.exports,Z=n(22),Q=n.n(Z),J={name:"ElAutocomplete",mixins:[D.a,Q()("input"),T.a],inheritAttrs:!1,componentName:"ElAutocomplete",components:{ElInput:g.a,ElAutocompleteSuggestions:X},directives:{Clickoutside:B.a},props:{valueKey:{type:String,default:"value"},popperClass:String,popperOptions:Object,placeholder:String,clearable:{type:Boolean,default:!1},disabled:Boolean,name:String,size:String,value:String,maxlength:Number,minlength:Number,autofocus:Boolean,fetchSuggestions:Function,triggerOnFocus:{type:Boolean,default:!0},customItem:String,selectWhenUnmatched:{type:Boolean,default:!1},prefixIcon:String,suffixIcon:String,label:String,debounce:{type:Number,default:300},placement:{type:String,default:"bottom-start"},hideLoading:Boolean,popperAppendToBody:{type:Boolean,default:!0},highlightFirstItem:{type:Boolean,default:!1}},data:function(){return{activated:!1,suggestions:[],loading:!1,highlightedIndex:-1,suggestionDisabled:!1}},computed:{suggestionVisible:function(){var e=this.suggestions,t=Array.isArray(e)&&e.length>0;return(t||this.loading)&&this.activated},id:function(){return"el-autocomplete-"+Object(y["generateId"])()}},watch:{suggestionVisible:function(e){var t=this.getInput();t&&this.broadcast("ElAutocompleteSuggestions","visible",[e,t.offsetWidth])}},methods:{getMigratingConfig:function(){return{props:{"custom-item":"custom-item is removed, use scoped slot instead.",props:"props is removed, use value-key instead."}}},getData:function(e){var t=this;this.suggestionDisabled||(this.loading=!0,this.fetchSuggestions(e,(function(e){t.loading=!1,t.suggestionDisabled||(Array.isArray(e)?(t.suggestions=e,t.highlightedIndex=t.highlightFirstItem?0:-1):console.error("[Element Error][Autocomplete]autocomplete suggestions must be an array"))})))},handleInput:function(e){if(this.$emit("input",e),this.suggestionDisabled=!1,!this.triggerOnFocus&&!e)return this.suggestionDisabled=!0,void(this.suggestions=[]);this.debouncedGetData(e)},handleChange:function(e){this.$emit("change",e)},handleFocus:function(e){this.activated=!0,this.$emit("focus",e),this.triggerOnFocus&&this.debouncedGetData(this.value)},handleBlur:function(e){this.$emit("blur",e)},handleClear:function(){this.activated=!1,this.$emit("clear")},close:function(e){this.activated=!1},handleKeyEnter:function(e){var t=this;this.suggestionVisible&&this.highlightedIndex>=0&&this.highlightedIndex<this.suggestions.length?(e.preventDefault(),this.select(this.suggestions[this.highlightedIndex])):this.selectWhenUnmatched&&(this.$emit("select",{value:this.value}),this.$nextTick((function(e){t.suggestions=[],t.highlightedIndex=-1})))},select:function(e){var t=this;this.$emit("input",e[this.valueKey]),this.$emit("select",e),this.$nextTick((function(e){t.suggestions=[],t.highlightedIndex=-1}))},highlight:function(e){if(this.suggestionVisible&&!this.loading)if(e<0)this.highlightedIndex=-1;else{e>=this.suggestions.length&&(e=this.suggestions.length-1);var t=this.$refs.suggestions.$el.querySelector(".el-autocomplete-suggestion__wrap"),n=t.querySelectorAll(".el-autocomplete-suggestion__list li"),i=n[e],r=t.scrollTop,o=i.offsetTop;o+i.scrollHeight>r+t.clientHeight&&(t.scrollTop+=i.scrollHeight),o<r&&(t.scrollTop-=i.scrollHeight),this.highlightedIndex=e;var a=this.getInput();a.setAttribute("aria-activedescendant",this.id+"-item-"+this.highlightedIndex)}},getInput:function(){return this.$refs.input.getInput()}},mounted:function(){var e=this;this.debouncedGetData=j()(this.debounce,this.getData),this.$on("item-click",(function(t){e.select(t)}));var t=this.getInput();t.setAttribute("role","textbox"),t.setAttribute("aria-autocomplete","list"),t.setAttribute("aria-controls","id"),t.setAttribute("aria-activedescendant",this.id+"-item-"+this.highlightedIndex)},beforeDestroy:function(){this.$refs.suggestions.$destroy()}},ee=J,te=l(ee,P,$,!1,null,null,null);te.options.__file="packages/autocomplete/src/autocomplete.vue";var ne=te.exports;ne.install=function(e){e.component(ne.name,ne)};var ie,re,oe=ne,ae=n(12),se=n.n(ae),le=n(29),ce=n.n(le),ue={name:"ElDropdown",componentName:"ElDropdown",mixins:[D.a,T.a],directives:{Clickoutside:B.a},components:{ElButton:se.a,ElButtonGroup:ce.a},provide:function(){return{dropdown:this}},props:{trigger:{type:String,default:"hover"},type:String,size:{type:String,default:""},splitButton:Boolean,hideOnClick:{type:Boolean,default:!0},placement:{type:String,default:"bottom-end"},visibleArrow:{default:!0},showTimeout:{type:Number,default:250},hideTimeout:{type:Number,default:150},tabindex:{type:Number,default:0}},data:function(){return{timeout:null,visible:!1,triggerElm:null,menuItems:null,menuItemsArray:null,dropdownElm:null,focusing:!1,listId:"dropdown-menu-"+Object(y["generateId"])()}},computed:{dropdownSize:function(){return this.size||(this.$ELEMENT||{}).size}},mounted:function(){this.$on("menu-item-click",this.handleMenuItemClick)},watch:{visible:function(e){this.broadcast("ElDropdownMenu","visible",e),this.$emit("visible-change",e)},focusing:function(e){var t=this.$el.querySelector(".el-dropdown-selfdefine");t&&(e?t.className+=" focusing":t.className=t.className.replace("focusing",""))}},methods:{getMigratingConfig:function(){return{props:{"menu-align":"menu-align is renamed to placement."}}},show:function(){var e=this;this.triggerElm.disabled||(clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.visible=!0}),"click"===this.trigger?0:this.showTimeout))},hide:function(){var e=this;this.triggerElm.disabled||(this.removeTabindex(),this.tabindex>=0&&this.resetTabindex(this.triggerElm),clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.visible=!1}),"click"===this.trigger?0:this.hideTimeout))},handleClick:function(){this.triggerElm.disabled||(this.visible?this.hide():this.show())},handleTriggerKeyDown:function(e){var t=e.keyCode;[38,40].indexOf(t)>-1?(this.removeTabindex(),this.resetTabindex(this.menuItems[0]),this.menuItems[0].focus(),e.preventDefault(),e.stopPropagation()):13===t?this.handleClick():[9,27].indexOf(t)>-1&&this.hide()},handleItemKeyDown:function(e){var t=e.keyCode,n=e.target,i=this.menuItemsArray.indexOf(n),r=this.menuItemsArray.length-1,o=void 0;[38,40].indexOf(t)>-1?(o=38===t?0!==i?i-1:0:i<r?i+1:r,this.removeTabindex(),this.resetTabindex(this.menuItems[o]),this.menuItems[o].focus(),e.preventDefault(),e.stopPropagation()):13===t?(this.triggerElmFocus(),n.click(),this.hideOnClick&&(this.visible=!1)):[9,27].indexOf(t)>-1&&(this.hide(),this.triggerElmFocus())},resetTabindex:function(e){this.removeTabindex(),e.setAttribute("tabindex","0")},removeTabindex:function(){this.triggerElm.setAttribute("tabindex","-1"),this.menuItemsArray.forEach((function(e){e.setAttribute("tabindex","-1")}))},initAria:function(){this.dropdownElm.setAttribute("id",this.listId),this.triggerElm.setAttribute("aria-haspopup","list"),this.triggerElm.setAttribute("aria-controls",this.listId),this.splitButton||(this.triggerElm.setAttribute("role","button"),this.triggerElm.setAttribute("tabindex",this.tabindex),this.triggerElm.setAttribute("class",(this.triggerElm.getAttribute("class")||"")+" el-dropdown-selfdefine"))},initEvent:function(){var e=this,t=this.trigger,n=this.show,i=this.hide,r=this.handleClick,o=this.splitButton,a=this.handleTriggerKeyDown,s=this.handleItemKeyDown;this.triggerElm=o?this.$refs.trigger.$el:this.$slots.default[0].elm;var l=this.dropdownElm;this.triggerElm.addEventListener("keydown",a),l.addEventListener("keydown",s,!0),o||(this.triggerElm.addEventListener("focus",(function(){e.focusing=!0})),this.triggerElm.addEventListener("blur",(function(){e.focusing=!1})),this.triggerElm.addEventListener("click",(function(){e.focusing=!1}))),"hover"===t?(this.triggerElm.addEventListener("mouseenter",n),this.triggerElm.addEventListener("mouseleave",i),l.addEventListener("mouseenter",n),l.addEventListener("mouseleave",i)):"click"===t&&this.triggerElm.addEventListener("click",r)},handleMenuItemClick:function(e,t){this.hideOnClick&&(this.visible=!1),this.$emit("command",e,t)},triggerElmFocus:function(){this.triggerElm.focus&&this.triggerElm.focus()},initDomOperation:function(){this.dropdownElm=this.popperElm,this.menuItems=this.dropdownElm.querySelectorAll("[tabindex='-1']"),this.menuItemsArray=[].slice.call(this.menuItems),this.initEvent(),this.initAria()}},render:function(e){var t=this,n=this.hide,i=this.splitButton,r=this.type,o=this.dropdownSize,a=function(e){t.$emit("click",e),n()},s=i?e("el-button-group",[e("el-button",{attrs:{type:r,size:o},nativeOn:{click:a}},[this.$slots.default]),e("el-button",{ref:"trigger",attrs:{type:r,size:o},class:"el-dropdown__caret-button"},[e("i",{class:"el-dropdown__icon el-icon-arrow-down"})])]):this.$slots.default;return e("div",{class:"el-dropdown",directives:[{name:"clickoutside",value:n}]},[s,this.$slots.dropdown])}},de=ue,he=l(de,ie,re,!1,null,null,null);he.options.__file="packages/dropdown/src/dropdown.vue";var fe=he.exports;fe.install=function(e){e.component(fe.name,fe)};var pe=fe,me=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[n("ul",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-dropdown-menu el-popper",class:[e.size&&"el-dropdown-menu--"+e.size]},[e._t("default")],2)])},ge=[];me._withStripped=!0;var ve={name:"ElDropdownMenu",componentName:"ElDropdownMenu",mixins:[W.a],props:{visibleArrow:{type:Boolean,default:!0},arrowOffset:{type:Number,default:0}},data:function(){return{size:this.dropdown.dropdownSize}},inject:["dropdown"],created:function(){var e=this;this.$on("updatePopper",(function(){e.showPopper&&e.updatePopper()})),this.$on("visible",(function(t){e.showPopper=t}))},mounted:function(){this.dropdown.popperElm=this.popperElm=this.$el,this.referenceElm=this.dropdown.$el,this.dropdown.initDomOperation()},watch:{"dropdown.placement":{immediate:!0,handler:function(e){this.currentPlacement=e}}}},be=ve,ye=l(be,me,ge,!1,null,null,null);ye.options.__file="packages/dropdown/src/dropdown-menu.vue";var we=ye.exports;we.install=function(e){e.component(we.name,we)};var xe=we,_e=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"el-dropdown-menu__item",class:{"is-disabled":e.disabled,"el-dropdown-menu__item--divided":e.divided},attrs:{"aria-disabled":e.disabled,tabindex:e.disabled?null:-1},on:{click:e.handleClick}},[e.icon?n("i",{class:e.icon}):e._e(),e._t("default")],2)},ke=[];_e._withStripped=!0;var Ce={name:"ElDropdownItem",mixins:[D.a],props:{command:{},disabled:Boolean,divided:Boolean,icon:String},methods:{handleClick:function(e){this.dispatch("ElDropdown","menu-item-click",[this.command,this])}}},Se=Ce,Oe=l(Se,_e,ke,!1,null,null,null);Oe.options.__file="packages/dropdown/src/dropdown-item.vue";var Te=Oe.exports;Te.install=function(e){e.component(Te.name,Te)};var Ee=Te,De=De||{};De.Utils=De.Utils||{},De.Utils.focusFirstDescendant=function(e){for(var t=0;t<e.childNodes.length;t++){var n=e.childNodes[t];if(De.Utils.attemptFocus(n)||De.Utils.focusFirstDescendant(n))return!0}return!1},De.Utils.focusLastDescendant=function(e){for(var t=e.childNodes.length-1;t>=0;t--){var n=e.childNodes[t];if(De.Utils.attemptFocus(n)||De.Utils.focusLastDescendant(n))return!0}return!1},De.Utils.attemptFocus=function(e){if(!De.Utils.isFocusable(e))return!1;De.Utils.IgnoreUtilFocusChanges=!0;try{e.focus()}catch(t){}return De.Utils.IgnoreUtilFocusChanges=!1,document.activeElement===e},De.Utils.isFocusable=function(e){if(e.tabIndex>0||0===e.tabIndex&&null!==e.getAttribute("tabIndex"))return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&"ignore"!==e.rel;case"INPUT":return"hidden"!==e.type&&"file"!==e.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},De.Utils.triggerEvent=function(e,t){var n=void 0;n=/^mouse|click/.test(t)?"MouseEvents":/^key/.test(t)?"KeyboardEvent":"HTMLEvents";for(var i=document.createEvent(n),r=arguments.length,o=Array(r>2?r-2:0),a=2;a<r;a++)o[a-2]=arguments[a];return i.initEvent.apply(i,[t].concat(o)),e.dispatchEvent?e.dispatchEvent(i):e.fireEvent("on"+t,i),e},De.Utils.keys={tab:9,enter:13,space:32,left:37,up:38,right:39,down:40,esc:27};var Me=De.Utils,Ae=function(e,t){this.domNode=t,this.parent=e,this.subMenuItems=[],this.subIndex=0,this.init()};Ae.prototype.init=function(){this.subMenuItems=this.domNode.querySelectorAll("li"),this.addListeners()},Ae.prototype.gotoSubIndex=function(e){e===this.subMenuItems.length?e=0:e<0&&(e=this.subMenuItems.length-1),this.subMenuItems[e].focus(),this.subIndex=e},Ae.prototype.addListeners=function(){var e=this,t=Me.keys,n=this.parent.domNode;Array.prototype.forEach.call(this.subMenuItems,(function(i){i.addEventListener("keydown",(function(i){var r=!1;switch(i.keyCode){case t.down:e.gotoSubIndex(e.subIndex+1),r=!0;break;case t.up:e.gotoSubIndex(e.subIndex-1),r=!0;break;case t.tab:Me.triggerEvent(n,"mouseleave");break;case t.enter:case t.space:r=!0,i.currentTarget.click();break}return r&&(i.preventDefault(),i.stopPropagation()),!1}))}))};var Ne=Ae,Ie=function(e){this.domNode=e,this.submenu=null,this.init()};Ie.prototype.init=function(){this.domNode.setAttribute("tabindex","0");var e=this.domNode.querySelector(".el-menu");e&&(this.submenu=new Ne(this,e)),this.addListeners()},Ie.prototype.addListeners=function(){var e=this,t=Me.keys;this.domNode.addEventListener("keydown",(function(n){var i=!1;switch(n.keyCode){case t.down:Me.triggerEvent(n.currentTarget,"mouseenter"),e.submenu&&e.submenu.gotoSubIndex(0),i=!0;break;case t.up:Me.triggerEvent(n.currentTarget,"mouseenter"),e.submenu&&e.submenu.gotoSubIndex(e.submenu.subMenuItems.length-1),i=!0;break;case t.tab:Me.triggerEvent(n.currentTarget,"mouseleave");break;case t.enter:case t.space:i=!0,n.currentTarget.click();break}i&&n.preventDefault()}))};var Le=Ie,Pe=function(e){this.domNode=e,this.init()};Pe.prototype.init=function(){var e=this.domNode.childNodes;[].filter.call(e,(function(e){return 1===e.nodeType})).forEach((function(e){new Le(e)}))};var $e,Fe,je=Pe,ze=n(1),Be={name:"ElMenu",render:function(e){var t=e("ul",{attrs:{role:"menubar"},key:+this.collapse,style:{backgroundColor:this.backgroundColor||""},class:{"el-menu--horizontal":"horizontal"===this.mode,"el-menu--collapse":this.collapse,"el-menu":!0}},[this.$slots.default]);return this.collapseTransition?e("el-menu-collapse-transition",[t]):t},componentName:"ElMenu",mixins:[D.a,T.a],provide:function(){return{rootMenu:this}},components:{"el-menu-collapse-transition":{functional:!0,render:function(e,t){var n={props:{mode:"out-in"},on:{beforeEnter:function(e){e.style.opacity=.2},enter:function(e){Object(ze["addClass"])(e,"el-opacity-transition"),e.style.opacity=1},afterEnter:function(e){Object(ze["removeClass"])(e,"el-opacity-transition"),e.style.opacity=""},beforeLeave:function(e){e.dataset||(e.dataset={}),Object(ze["hasClass"])(e,"el-menu--collapse")?(Object(ze["removeClass"])(e,"el-menu--collapse"),e.dataset.oldOverflow=e.style.overflow,e.dataset.scrollWidth=e.clientWidth,Object(ze["addClass"])(e,"el-menu--collapse")):(Object(ze["addClass"])(e,"el-menu--collapse"),e.dataset.oldOverflow=e.style.overflow,e.dataset.scrollWidth=e.clientWidth,Object(ze["removeClass"])(e,"el-menu--collapse")),e.style.width=e.scrollWidth+"px",e.style.overflow="hidden"},leave:function(e){Object(ze["addClass"])(e,"horizontal-collapse-transition"),e.style.width=e.dataset.scrollWidth+"px"}}};return e("transition",n,t.children)}}},props:{mode:{type:String,default:"vertical"},defaultActive:{type:String,default:""},defaultOpeneds:Array,uniqueOpened:Boolean,router:Boolean,menuTrigger:{type:String,default:"hover"},collapse:Boolean,backgroundColor:String,textColor:String,activeTextColor:String,collapseTransition:{type:Boolean,default:!0}},data:function(){return{activeIndex:this.defaultActive,openedMenus:this.defaultOpeneds&&!this.collapse?this.defaultOpeneds.slice(0):[],items:{},submenus:{}}},computed:{hoverBackground:function(){return this.backgroundColor?this.mixColor(this.backgroundColor,.2):""},isMenuPopup:function(){return"horizontal"===this.mode||"vertical"===this.mode&&this.collapse}},watch:{defaultActive:function(e){this.items[e]||(this.activeIndex=null),this.updateActiveIndex(e)},defaultOpeneds:function(e){this.collapse||(this.openedMenus=e)},collapse:function(e){e&&(this.openedMenus=[]),this.broadcast("ElSubmenu","toggle-collapse",e)}},methods:{updateActiveIndex:function(e){var t=this.items[e]||this.items[this.activeIndex]||this.items[this.defaultActive];t?(this.activeIndex=t.index,this.initOpenedMenu()):this.activeIndex=null},getMigratingConfig:function(){return{props:{theme:"theme is removed."}}},getColorChannels:function(e){if(e=e.replace("#",""),/^[0-9a-fA-F]{3}$/.test(e)){e=e.split("");for(var t=2;t>=0;t--)e.splice(t,0,e[t]);e=e.join("")}return/^[0-9a-fA-F]{6}$/.test(e)?{red:parseInt(e.slice(0,2),16),green:parseInt(e.slice(2,4),16),blue:parseInt(e.slice(4,6),16)}:{red:255,green:255,blue:255}},mixColor:function(e,t){var n=this.getColorChannels(e),i=n.red,r=n.green,o=n.blue;return t>0?(i*=1-t,r*=1-t,o*=1-t):(i+=(255-i)*t,r+=(255-r)*t,o+=(255-o)*t),"rgb("+Math.round(i)+", "+Math.round(r)+", "+Math.round(o)+")"},addItem:function(e){this.$set(this.items,e.index,e)},removeItem:function(e){delete this.items[e.index]},addSubmenu:function(e){this.$set(this.submenus,e.index,e)},removeSubmenu:function(e){delete this.submenus[e.index]},openMenu:function(e,t){var n=this.openedMenus;-1===n.indexOf(e)&&(this.uniqueOpened&&(this.openedMenus=n.filter((function(e){return-1!==t.indexOf(e)}))),this.openedMenus.push(e))},closeMenu:function(e){var t=this.openedMenus.indexOf(e);-1!==t&&this.openedMenus.splice(t,1)},handleSubmenuClick:function(e){var t=e.index,n=e.indexPath,i=-1!==this.openedMenus.indexOf(t);i?(this.closeMenu(t),this.$emit("close",t,n)):(this.openMenu(t,n),this.$emit("open",t,n))},handleItemClick:function(e){var t=this,n=e.index,i=e.indexPath,r=this.activeIndex,o=null!==e.index;o&&(this.activeIndex=e.index),this.$emit("select",n,i,e),("horizontal"===this.mode||this.collapse)&&(this.openedMenus=[]),this.router&&o&&this.routeToItem(e,(function(e){if(t.activeIndex=r,e){if("NavigationDuplicated"===e.name)return;console.error(e)}}))},initOpenedMenu:function(){var e=this,t=this.activeIndex,n=this.items[t];if(n&&"horizontal"!==this.mode&&!this.collapse){var i=n.indexPath;i.forEach((function(t){var n=e.submenus[t];n&&e.openMenu(t,n.indexPath)}))}},routeToItem:function(e,t){var n=e.route||e.index;try{this.$router.push(n,(function(){}),t)}catch(i){console.error(i)}},open:function(e){var t=this,n=this.submenus[e.toString()].indexPath;n.forEach((function(e){return t.openMenu(e,n)}))},close:function(e){this.closeMenu(e)}},mounted:function(){this.initOpenedMenu(),this.$on("item-click",this.handleItemClick),this.$on("submenu-click",this.handleSubmenuClick),"horizontal"===this.mode&&new je(this.$el),this.$watch("items",this.updateActiveIndex)}},Re=Be,Ve=l(Re,$e,Fe,!1,null,null,null);Ve.options.__file="packages/menu/src/menu.vue";var He=Ve.exports;He.install=function(e){e.component(He.name,He)};var We,qe,Ue=He,Ke=n(21),Ge=n.n(Ke),Ye={inject:["rootMenu"],computed:{indexPath:function(){var e=[this.index],t=this.$parent;while("ElMenu"!==t.$options.componentName)t.index&&e.unshift(t.index),t=t.$parent;return e},parentMenu:function(){var e=this.$parent;while(e&&-1===["ElMenu","ElSubmenu"].indexOf(e.$options.componentName))e=e.$parent;return e},paddingStyle:function(){if("vertical"!==this.rootMenu.mode)return{};var e=20,t=this.$parent;if(this.rootMenu.collapse)e=20;else while(t&&"ElMenu"!==t.$options.componentName)"ElSubmenu"===t.$options.componentName&&(e+=20),t=t.$parent;return{paddingLeft:e+"px"}}}},Xe={props:{transformOrigin:{type:[Boolean,String],default:!1},offset:W.a.props.offset,boundariesPadding:W.a.props.boundariesPadding,popperOptions:W.a.props.popperOptions},data:W.a.data,methods:W.a.methods,beforeDestroy:W.a.beforeDestroy,deactivated:W.a.deactivated},Ze={name:"ElSubmenu",componentName:"ElSubmenu",mixins:[Ye,D.a,Xe],components:{ElCollapseTransition:Ge.a},props:{index:{type:String,required:!0},showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300},popperClass:String,disabled:Boolean,popperAppendToBody:{type:Boolean,default:void 0}},data:function(){return{popperJS:null,timeout:null,items:{},submenus:{},mouseInChild:!1}},watch:{opened:function(e){var t=this;this.isMenuPopup&&this.$nextTick((function(e){t.updatePopper()}))}},computed:{appendToBody:function(){return void 0===this.popperAppendToBody?this.isFirstLevel:this.popperAppendToBody},menuTransitionName:function(){return this.rootMenu.collapse?"el-zoom-in-left":"el-zoom-in-top"},opened:function(){return this.rootMenu.openedMenus.indexOf(this.index)>-1},active:function(){var e=!1,t=this.submenus,n=this.items;return Object.keys(n).forEach((function(t){n[t].active&&(e=!0)})),Object.keys(t).forEach((function(n){t[n].active&&(e=!0)})),e},hoverBackground:function(){return this.rootMenu.hoverBackground},backgroundColor:function(){return this.rootMenu.backgroundColor||""},activeTextColor:function(){return this.rootMenu.activeTextColor||""},textColor:function(){return this.rootMenu.textColor||""},mode:function(){return this.rootMenu.mode},isMenuPopup:function(){return this.rootMenu.isMenuPopup},titleStyle:function(){return"horizontal"!==this.mode?{color:this.textColor}:{borderBottomColor:this.active?this.rootMenu.activeTextColor?this.activeTextColor:"":"transparent",color:this.active?this.activeTextColor:this.textColor}},isFirstLevel:function(){var e=!0,t=this.$parent;while(t&&t!==this.rootMenu){if(["ElSubmenu","ElMenuItemGroup"].indexOf(t.$options.componentName)>-1){e=!1;break}t=t.$parent}return e}},methods:{handleCollapseToggle:function(e){e?this.initPopper():this.doDestroy()},addItem:function(e){this.$set(this.items,e.index,e)},removeItem:function(e){delete this.items[e.index]},addSubmenu:function(e){this.$set(this.submenus,e.index,e)},removeSubmenu:function(e){delete this.submenus[e.index]},handleClick:function(){var e=this.rootMenu,t=this.disabled;"hover"===e.menuTrigger&&"horizontal"===e.mode||e.collapse&&"vertical"===e.mode||t||this.dispatch("ElMenu","submenu-click",this)},handleMouseenter:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.showTimeout;if("ActiveXObject"in window||"focus"!==e.type||e.relatedTarget){var i=this.rootMenu,r=this.disabled;"click"===i.menuTrigger&&"horizontal"===i.mode||!i.collapse&&"vertical"===i.mode||r||(this.dispatch("ElSubmenu","mouse-enter-child"),clearTimeout(this.timeout),this.timeout=setTimeout((function(){t.rootMenu.openMenu(t.index,t.indexPath)}),n),this.appendToBody&&this.$parent.$el.dispatchEvent(new MouseEvent("mouseenter")))}},handleMouseleave:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=this.rootMenu;"click"===n.menuTrigger&&"horizontal"===n.mode||!n.collapse&&"vertical"===n.mode||(this.dispatch("ElSubmenu","mouse-leave-child"),clearTimeout(this.timeout),this.timeout=setTimeout((function(){!e.mouseInChild&&e.rootMenu.closeMenu(e.index)}),this.hideTimeout),this.appendToBody&&t&&"ElSubmenu"===this.$parent.$options.name&&this.$parent.handleMouseleave(!0))},handleTitleMouseenter:function(){if("horizontal"!==this.mode||this.rootMenu.backgroundColor){var e=this.$refs["submenu-title"];e&&(e.style.backgroundColor=this.rootMenu.hoverBackground)}},handleTitleMouseleave:function(){if("horizontal"!==this.mode||this.rootMenu.backgroundColor){var e=this.$refs["submenu-title"];e&&(e.style.backgroundColor=this.rootMenu.backgroundColor||"")}},updatePlacement:function(){this.currentPlacement="horizontal"===this.mode&&this.isFirstLevel?"bottom-start":"right-start"},initPopper:function(){this.referenceElm=this.$el,this.popperElm=this.$refs.menu,this.updatePlacement()}},created:function(){var e=this;this.$on("toggle-collapse",this.handleCollapseToggle),this.$on("mouse-enter-child",(function(){e.mouseInChild=!0,clearTimeout(e.timeout)})),this.$on("mouse-leave-child",(function(){e.mouseInChild=!1,clearTimeout(e.timeout)}))},mounted:function(){this.parentMenu.addSubmenu(this),this.rootMenu.addSubmenu(this),this.initPopper()},beforeDestroy:function(){this.parentMenu.removeSubmenu(this),this.rootMenu.removeSubmenu(this)},render:function(e){var t=this,n=this.active,i=this.opened,r=this.paddingStyle,o=this.titleStyle,a=this.backgroundColor,s=this.rootMenu,l=this.currentPlacement,c=this.menuTransitionName,u=this.mode,d=this.disabled,h=this.popperClass,f=this.$slots,p=this.isFirstLevel,m=e("transition",{attrs:{name:c}},[e("div",{ref:"menu",directives:[{name:"show",value:i}],class:["el-menu--"+u,h],on:{mouseenter:function(e){return t.handleMouseenter(e,100)},mouseleave:function(){return t.handleMouseleave(!0)},focus:function(e){return t.handleMouseenter(e,100)}}},[e("ul",{attrs:{role:"menu"},class:["el-menu el-menu--popup","el-menu--popup-"+l],style:{backgroundColor:s.backgroundColor||""}},[f.default])])]),g=e("el-collapse-transition",[e("ul",{attrs:{role:"menu"},class:"el-menu el-menu--inline",directives:[{name:"show",value:i}],style:{backgroundColor:s.backgroundColor||""}},[f.default])]),v="horizontal"===s.mode&&p||"vertical"===s.mode&&!s.collapse?"el-icon-arrow-down":"el-icon-arrow-right";return e("li",{class:{"el-submenu":!0,"is-active":n,"is-opened":i,"is-disabled":d},attrs:{role:"menuitem","aria-haspopup":"true","aria-expanded":i},on:{mouseenter:this.handleMouseenter,mouseleave:function(){return t.handleMouseleave(!1)},focus:this.handleMouseenter}},[e("div",{class:"el-submenu__title",ref:"submenu-title",on:{click:this.handleClick,mouseenter:this.handleTitleMouseenter,mouseleave:this.handleTitleMouseleave},style:[r,o,{backgroundColor:a}]},[f.title,e("i",{class:["el-submenu__icon-arrow",v]})]),this.isMenuPopup?m:g])}},Qe=Ze,Je=l(Qe,We,qe,!1,null,null,null);Je.options.__file="packages/menu/src/submenu.vue";var et=Je.exports;et.install=function(e){e.component(et.name,et)};var tt=et,nt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"el-menu-item",class:{"is-active":e.active,"is-disabled":e.disabled},style:[e.paddingStyle,e.itemStyle,{backgroundColor:e.backgroundColor}],attrs:{role:"menuitem",tabindex:"-1"},on:{click:e.handleClick,mouseenter:e.onMouseEnter,focus:e.onMouseEnter,blur:e.onMouseLeave,mouseleave:e.onMouseLeave}},["ElMenu"===e.parentMenu.$options.componentName&&e.rootMenu.collapse&&e.$slots.title?n("el-tooltip",{attrs:{effect:"dark",placement:"right"}},[n("div",{attrs:{slot:"content"},slot:"content"},[e._t("title")],2),n("div",{staticStyle:{position:"absolute",left:"0",top:"0",height:"100%",width:"100%",display:"inline-block","box-sizing":"border-box",padding:"0 20px"}},[e._t("default")],2)]):[e._t("default"),e._t("title")]],2)},it=[];nt._withStripped=!0;var rt=n(26),ot=n.n(rt),at={name:"ElMenuItem",componentName:"ElMenuItem",mixins:[Ye,D.a],components:{ElTooltip:ot.a},props:{index:{default:null,validator:function(e){return"string"===typeof e||null===e}},route:[String,Object],disabled:Boolean},computed:{active:function(){return this.index===this.rootMenu.activeIndex},hoverBackground:function(){return this.rootMenu.hoverBackground},backgroundColor:function(){return this.rootMenu.backgroundColor||""},activeTextColor:function(){return this.rootMenu.activeTextColor||""},textColor:function(){return this.rootMenu.textColor||""},mode:function(){return this.rootMenu.mode},itemStyle:function(){var e={color:this.active?this.activeTextColor:this.textColor};return"horizontal"!==this.mode||this.isNested||(e.borderBottomColor=this.active?this.rootMenu.activeTextColor?this.activeTextColor:"":"transparent"),e},isNested:function(){return this.parentMenu!==this.rootMenu}},methods:{onMouseEnter:function(){("horizontal"!==this.mode||this.rootMenu.backgroundColor)&&(this.$el.style.backgroundColor=this.hoverBackground)},onMouseLeave:function(){("horizontal"!==this.mode||this.rootMenu.backgroundColor)&&(this.$el.style.backgroundColor=this.backgroundColor)},handleClick:function(){this.disabled||(this.dispatch("ElMenu","item-click",this),this.$emit("click",this))}},mounted:function(){this.parentMenu.addItem(this),this.rootMenu.addItem(this)},beforeDestroy:function(){this.parentMenu.removeItem(this),this.rootMenu.removeItem(this)}},st=at,lt=l(st,nt,it,!1,null,null,null);lt.options.__file="packages/menu/src/menu-item.vue";var ct=lt.exports;ct.install=function(e){e.component(ct.name,ct)};var ut=ct,dt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"el-menu-item-group"},[n("div",{staticClass:"el-menu-item-group__title",style:{paddingLeft:e.levelPadding+"px"}},[e.$slots.title?e._t("title"):[e._v(e._s(e.title))]],2),n("ul",[e._t("default")],2)])},ht=[];dt._withStripped=!0;var ft={name:"ElMenuItemGroup",componentName:"ElMenuItemGroup",inject:["rootMenu"],props:{title:{type:String}},data:function(){return{paddingLeft:20}},computed:{levelPadding:function(){var e=20,t=this.$parent;if(this.rootMenu.collapse)return 20;while(t&&"ElMenu"!==t.$options.componentName)"ElSubmenu"===t.$options.componentName&&(e+=20),t=t.$parent;return e}}},pt=ft,mt=l(pt,dt,ht,!1,null,null,null);mt.options.__file="packages/menu/src/menu-item-group.vue";var gt=mt.exports;gt.install=function(e){e.component(gt.name,gt)};var vt=gt,bt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["textarea"===e.type?"el-textarea":"el-input",e.inputSize?"el-input--"+e.inputSize:"",{"is-disabled":e.inputDisabled,"is-exceed":e.inputExceed,"el-input-group":e.$slots.prepend||e.$slots.append,"el-input-group--append":e.$slots.append,"el-input-group--prepend":e.$slots.prepend,"el-input--prefix":e.$slots.prefix||e.prefixIcon,"el-input--suffix":e.$slots.suffix||e.suffixIcon||e.clearable||e.showPassword}],on:{mouseenter:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},["textarea"!==e.type?[e.$slots.prepend?n("div",{staticClass:"el-input-group__prepend"},[e._t("prepend")],2):e._e(),"textarea"!==e.type?n("input",e._b({ref:"input",staticClass:"el-input__inner",attrs:{tabindex:e.tabindex,type:e.showPassword?e.passwordVisible?"text":"password":e.type,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"input",e.$attrs,!1)):e._e(),e.$slots.prefix||e.prefixIcon?n("span",{staticClass:"el-input__prefix"},[e._t("prefix"),e.prefixIcon?n("i",{staticClass:"el-input__icon",class:e.prefixIcon}):e._e()],2):e._e(),e.getSuffixVisible()?n("span",{staticClass:"el-input__suffix"},[n("span",{staticClass:"el-input__suffix-inner"},[e.showClear&&e.showPwdVisible&&e.isWordLimitVisible?e._e():[e._t("suffix"),e.suffixIcon?n("i",{staticClass:"el-input__icon",class:e.suffixIcon}):e._e()],e.showClear?n("i",{staticClass:"el-input__icon el-icon-circle-close el-input__clear",on:{mousedown:function(e){e.preventDefault()},click:e.clear}}):e._e(),e.showPwdVisible?n("i",{staticClass:"el-input__icon el-icon-view el-input__clear",on:{click:e.handlePasswordVisible}}):e._e(),e.isWordLimitVisible?n("span",{staticClass:"el-input__count"},[n("span",{staticClass:"el-input__count-inner"},[e._v("\n            "+e._s(e.textLength)+"/"+e._s(e.upperLimit)+"\n          ")])]):e._e()],2),e.validateState?n("i",{staticClass:"el-input__icon",class:["el-input__validateIcon",e.validateIcon]}):e._e()]):e._e(),e.$slots.append?n("div",{staticClass:"el-input-group__append"},[e._t("append")],2):e._e()]:n("textarea",e._b({ref:"textarea",staticClass:"el-textarea__inner",style:e.textareaStyle,attrs:{tabindex:e.tabindex,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"textarea",e.$attrs,!1)),e.isWordLimitVisible&&"textarea"===e.type?n("span",{staticClass:"el-input__count"},[e._v(e._s(e.textLength)+"/"+e._s(e.upperLimit))]):e._e()],2)},yt=[];bt._withStripped=!0;var wt=void 0,xt="\n  height:0 !important;\n  visibility:hidden !important;\n  overflow:hidden !important;\n  position:absolute !important;\n  z-index:-1000 !important;\n  top:0 !important;\n  right:0 !important\n",_t=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function kt(e){var t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),i=parseFloat(t.getPropertyValue("padding-bottom"))+parseFloat(t.getPropertyValue("padding-top")),r=parseFloat(t.getPropertyValue("border-bottom-width"))+parseFloat(t.getPropertyValue("border-top-width")),o=_t.map((function(e){return e+":"+t.getPropertyValue(e)})).join(";");return{contextStyle:o,paddingSize:i,borderSize:r,boxSizing:n}}function Ct(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;wt||(wt=document.createElement("textarea"),document.body.appendChild(wt));var i=kt(e),r=i.paddingSize,o=i.borderSize,a=i.boxSizing,s=i.contextStyle;wt.setAttribute("style",s+";"+xt),wt.value=e.value||e.placeholder||"";var l=wt.scrollHeight,c={};"border-box"===a?l+=o:"content-box"===a&&(l-=r),wt.value="";var u=wt.scrollHeight-r;if(null!==t){var d=u*t;"border-box"===a&&(d=d+r+o),l=Math.max(d,l),c.minHeight=d+"px"}if(null!==n){var h=u*n;"border-box"===a&&(h=h+r+o),l=Math.min(h,l)}return c.height=l+"px",wt.parentNode&&wt.parentNode.removeChild(wt),wt=null,c}var St=n(7),Ot=n.n(St),Tt=n(19),Et={name:"ElInput",componentName:"ElInput",mixins:[D.a,T.a],inheritAttrs:!1,inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{textareaCalcStyle:{},hovering:!1,focused:!1,isComposing:!1,passwordVisible:!1}},props:{value:[String,Number],size:String,resize:String,form:String,disabled:Boolean,readonly:Boolean,type:{type:String,default:"text"},autosize:{type:[Boolean,Object],default:!1},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},validateEvent:{type:Boolean,default:!0},suffixIcon:String,prefixIcon:String,label:String,clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},tabindex:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},validateState:function(){return this.elFormItem?this.elFormItem.validateState:""},needStatusIcon:function(){return!!this.elForm&&this.elForm.statusIcon},validateIcon:function(){return{validating:"el-icon-loading",success:"el-icon-circle-check",error:"el-icon-circle-close"}[this.validateState]},textareaStyle:function(){return Ot()({},this.textareaCalcStyle,{resize:this.resize})},inputSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputDisabled:function(){return this.disabled||(this.elForm||{}).disabled},nativeInputValue:function(){return null===this.value||void 0===this.value?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},isWordLimitVisible:function(){return this.showWordLimit&&this.$attrs.maxlength&&("text"===this.type||"textarea"===this.type)&&!this.inputDisabled&&!this.readonly&&!this.showPassword},upperLimit:function(){return this.$attrs.maxlength},textLength:function(){return"number"===typeof this.value?String(this.value).length:(this.value||"").length},inputExceed:function(){return this.isWordLimitVisible&&this.textLength>this.upperLimit}},watch:{value:function(e){this.$nextTick(this.resizeTextarea),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()},type:function(){var e=this;this.$nextTick((function(){e.setNativeInputValue(),e.resizeTextarea(),e.updateIconOffset()}))}},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},getMigratingConfig:function(){return{props:{icon:"icon is removed, use suffix-icon / prefix-icon instead.","on-icon-click":"on-icon-click is removed."},events:{click:"click is removed."}}},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("ElFormItem","el.form.blur",[this.value])},select:function(){this.getInput().select()},resizeTextarea:function(){if(!this.$isServer){var e=this.autosize,t=this.type;if("textarea"===t)if(e){var n=e.minRows,i=e.maxRows;this.textareaCalcStyle=Ct(this.$refs.textarea,n,i)}else this.textareaCalcStyle={minHeight:Ct(this.$refs.textarea).minHeight}}},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleCompositionStart:function(){this.isComposing=!0},handleCompositionUpdate:function(e){var t=e.target.value,n=t[t.length-1]||"";this.isComposing=!Object(Tt["isKorean"])(n)},handleCompositionEnd:function(e){this.isComposing&&(this.isComposing=!1,this.handleInput(e))},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},handleChange:function(e){this.$emit("change",e.target.value)},calcIconOffset:function(e){var t=[].slice.call(this.$el.querySelectorAll(".el-input__"+e)||[]);if(t.length){for(var n=null,i=0;i<t.length;i++)if(t[i].parentNode===this.$el){n=t[i];break}if(n){var r={suffix:"append",prefix:"prepend"},o=r[e];this.$slots[o]?n.style.transform="translateX("+("suffix"===e?"-":"")+this.$el.querySelector(".el-input-group__"+o).offsetWidth+"px)":n.removeAttribute("style")}}},updateIconOffset:function(){this.calcIconOffset("prefix"),this.calcIconOffset("suffix")},clear:function(){this.$emit("input",""),this.$emit("change",""),this.$emit("clear")},handlePasswordVisible:function(){this.passwordVisible=!this.passwordVisible,this.focus()},getInput:function(){return this.$refs.input||this.$refs.textarea},getSuffixVisible:function(){return this.$slots.suffix||this.suffixIcon||this.showClear||this.showPassword||this.isWordLimitVisible||this.validateState&&this.needStatusIcon}},created:function(){this.$on("inputSelect",this.select)},mounted:function(){this.setNativeInputValue(),this.resizeTextarea(),this.updateIconOffset()},updated:function(){this.$nextTick(this.updateIconOffset)}},Dt=Et,Mt=l(Dt,bt,yt,!1,null,null,null);Mt.options.__file="packages/input/src/input.vue";var At=Mt.exports;At.install=function(e){e.component(At.name,At)};var Nt=At,It=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["el-input-number",e.inputNumberSize?"el-input-number--"+e.inputNumberSize:"",{"is-disabled":e.inputNumberDisabled},{"is-without-controls":!e.controls},{"is-controls-right":e.controlsAtRight}],on:{dragstart:function(e){e.preventDefault()}}},[e.controls?n("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-input-number__decrease",class:{"is-disabled":e.minDisabled},attrs:{role:"button"},on:{keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.decrease(t)}}},[n("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-down":"minus")})]):e._e(),e.controls?n("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-input-number__increase",class:{"is-disabled":e.maxDisabled},attrs:{role:"button"},on:{keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.increase(t)}}},[n("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-up":"plus")})]):e._e(),n("el-input",{ref:"input",attrs:{value:e.displayValue,placeholder:e.placeholder,disabled:e.inputNumberDisabled,size:e.inputNumberSize,max:e.max,min:e.min,name:e.name,label:e.label},on:{blur:e.handleBlur,focus:e.handleFocus,input:e.handleInput,change:e.handleInputChange},nativeOn:{keydown:[function(t){return!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?null:(t.preventDefault(),e.increase(t))},function(t){return!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?null:(t.preventDefault(),e.decrease(t))}]}})],1)},Lt=[];It._withStripped=!0;var Pt={bind:function(e,t,n){var i=null,r=void 0,o=function(){return n.context[t.expression].apply()},a=function(){Date.now()-r<100&&o(),clearInterval(i),i=null};Object(ze["on"])(e,"mousedown",(function(e){0===e.button&&(r=Date.now(),Object(ze["once"])(document,"mouseup",a),clearInterval(i),i=setInterval(o,100))}))}},$t={name:"ElInputNumber",mixins:[Q()("input")],inject:{elForm:{default:""},elFormItem:{default:""}},directives:{repeatClick:Pt},components:{ElInput:g.a},props:{step:{type:Number,default:1},stepStrictly:{type:Boolean,default:!1},max:{type:Number,default:1/0},min:{type:Number,default:-1/0},value:{},disabled:Boolean,size:String,controls:{type:Boolean,default:!0},controlsPosition:{type:String,default:""},name:String,label:String,placeholder:String,precision:{type:Number,validator:function(e){return e>=0&&e===parseInt(e,10)}}},data:function(){return{currentValue:0,userInput:null}},watch:{value:{immediate:!0,handler:function(e){var t=void 0===e?e:Number(e);if(void 0!==t){if(isNaN(t))return;if(this.stepStrictly){var n=this.getPrecision(this.step),i=Math.pow(10,n);t=Math.round(t/this.step)*i*this.step/i}void 0!==this.precision&&(t=this.toPrecision(t,this.precision))}t>=this.max&&(t=this.max),t<=this.min&&(t=this.min),this.currentValue=t,this.userInput=null,this.$emit("input",t)}}},computed:{minDisabled:function(){return this._decrease(this.value,this.step)<this.min},maxDisabled:function(){return this._increase(this.value,this.step)>this.max},numPrecision:function(){var e=this.value,t=this.step,n=this.getPrecision,i=this.precision,r=n(t);return void 0!==i?(r>i&&console.warn("[Element Warn][InputNumber]precision should not be less than the decimal places of step"),i):Math.max(n(e),r)},controlsAtRight:function(){return this.controls&&"right"===this.controlsPosition},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},inputNumberSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputNumberDisabled:function(){return this.disabled||!!(this.elForm||{}).disabled},displayValue:function(){if(null!==this.userInput)return this.userInput;var e=this.currentValue;if("number"===typeof e){if(this.stepStrictly){var t=this.getPrecision(this.step),n=Math.pow(10,t);e=Math.round(e/this.step)*n*this.step/n}void 0!==this.precision&&(e=e.toFixed(this.precision))}return e}},methods:{toPrecision:function(e,t){return void 0===t&&(t=this.numPrecision),parseFloat(Math.round(e*Math.pow(10,t))/Math.pow(10,t))},getPrecision:function(e){if(void 0===e)return 0;var t=e.toString(),n=t.indexOf("."),i=0;return-1!==n&&(i=t.length-n-1),i},_increase:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e+n*t)/n)},_decrease:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e-n*t)/n)},increase:function(){if(!this.inputNumberDisabled&&!this.maxDisabled){var e=this.value||0,t=this._increase(e,this.step);this.setCurrentValue(t)}},decrease:function(){if(!this.inputNumberDisabled&&!this.minDisabled){var e=this.value||0,t=this._decrease(e,this.step);this.setCurrentValue(t)}},handleBlur:function(e){this.$emit("blur",e)},handleFocus:function(e){this.$emit("focus",e)},setCurrentValue:function(e){var t=this.currentValue;"number"===typeof e&&void 0!==this.precision&&(e=this.toPrecision(e,this.precision)),e>=this.max&&(e=this.max),e<=this.min&&(e=this.min),t!==e&&(this.userInput=null,this.$emit("input",e),this.$emit("change",e,t),this.currentValue=e)},handleInput:function(e){this.userInput=e},handleInputChange:function(e){var t=""===e?void 0:Number(e);isNaN(t)&&""!==e||this.setCurrentValue(t),this.userInput=null},select:function(){this.$refs.input.select()}},mounted:function(){var e=this.$refs.input.$refs.input;e.setAttribute("role","spinbutton"),e.setAttribute("aria-valuemax",this.max),e.setAttribute("aria-valuemin",this.min),e.setAttribute("aria-valuenow",this.currentValue),e.setAttribute("aria-disabled",this.inputNumberDisabled)},updated:function(){if(this.$refs&&this.$refs.input){var e=this.$refs.input.$refs.input;e.setAttribute("aria-valuenow",this.currentValue)}}},Ft=$t,jt=l(Ft,It,Lt,!1,null,null,null);jt.options.__file="packages/input-number/src/input-number.vue";var zt=jt.exports;zt.install=function(e){e.component(zt.name,zt)};var Bt=zt,Rt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-radio",class:[e.border&&e.radioSize?"el-radio--"+e.radioSize:"",{"is-disabled":e.isDisabled},{"is-focus":e.focus},{"is-bordered":e.border},{"is-checked":e.model===e.label}],attrs:{role:"radio","aria-checked":e.model===e.label,"aria-disabled":e.isDisabled,tabindex:e.tabIndex},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"]))return null;t.stopPropagation(),t.preventDefault(),e.model=e.isDisabled?e.model:e.label}}},[n("span",{staticClass:"el-radio__input",class:{"is-disabled":e.isDisabled,"is-checked":e.model===e.label}},[n("span",{staticClass:"el-radio__inner"}),n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],ref:"radio",staticClass:"el-radio__original",attrs:{type:"radio","aria-hidden":"true",name:e.name,disabled:e.isDisabled,tabindex:"-1"},domProps:{value:e.label,checked:e._q(e.model,e.label)},on:{focus:function(t){e.focus=!0},blur:function(t){e.focus=!1},change:[function(t){e.model=e.label},e.handleChange]}})]),n("span",{staticClass:"el-radio__label",on:{keydown:function(e){e.stopPropagation()}}},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2)])},Vt=[];Rt._withStripped=!0;var Ht={name:"ElRadio",mixins:[D.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElRadio",props:{value:{},label:{},disabled:Boolean,name:String,border:Boolean,size:String},data:function(){return{focus:!1}},computed:{isGroup:function(){var e=this.$parent;while(e){if("ElRadioGroup"===e.$options.componentName)return this._radioGroup=e,!0;e=e.$parent}return!1},model:{get:function(){return this.isGroup?this._radioGroup.value:this.value},set:function(e){this.isGroup?this.dispatch("ElRadioGroup","input",[e]):this.$emit("input",e),this.$refs.radio&&(this.$refs.radio.checked=this.model===this.label)}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},radioSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._radioGroup.radioGroupSize||e},isDisabled:function(){return this.isGroup?this._radioGroup.disabled||this.disabled||(this.elForm||{}).disabled:this.disabled||(this.elForm||{}).disabled},tabIndex:function(){return this.isDisabled||this.isGroup&&this.model!==this.label?-1:0}},methods:{handleChange:function(){var e=this;this.$nextTick((function(){e.$emit("change",e.model),e.isGroup&&e.dispatch("ElRadioGroup","handleChange",e.model)}))}}},Wt=Ht,qt=l(Wt,Rt,Vt,!1,null,null,null);qt.options.__file="packages/radio/src/radio.vue";var Ut=qt.exports;Ut.install=function(e){e.component(Ut.name,Ut)};var Kt=Ut,Gt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(e._elTag,{tag:"component",staticClass:"el-radio-group",attrs:{role:"radiogroup"},on:{keydown:e.handleKeydown}},[e._t("default")],2)},Yt=[];Gt._withStripped=!0;var Xt=Object.freeze({LEFT:37,UP:38,RIGHT:39,DOWN:40}),Zt={name:"ElRadioGroup",componentName:"ElRadioGroup",inject:{elFormItem:{default:""}},mixins:[D.a],props:{value:{},size:String,fill:String,textColor:String,disabled:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},_elTag:function(){return(this.$vnode.data||{}).tag||"div"},radioGroupSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size}},created:function(){var e=this;this.$on("handleChange",(function(t){e.$emit("change",t)}))},mounted:function(){var e=this.$el.querySelectorAll("[type=radio]"),t=this.$el.querySelectorAll("[role=radio]")[0];![].some.call(e,(function(e){return e.checked}))&&t&&(t.tabIndex=0)},methods:{handleKeydown:function(e){var t=e.target,n="INPUT"===t.nodeName?"[type=radio]":"[role=radio]",i=this.$el.querySelectorAll(n),r=i.length,o=[].indexOf.call(i,t),a=this.$el.querySelectorAll("[role=radio]");switch(e.keyCode){case Xt.LEFT:case Xt.UP:e.stopPropagation(),e.preventDefault(),0===o?(a[r-1].click(),a[r-1].focus()):(a[o-1].click(),a[o-1].focus());break;case Xt.RIGHT:case Xt.DOWN:o===r-1?(e.stopPropagation(),e.preventDefault(),a[0].click(),a[0].focus()):(a[o+1].click(),a[o+1].focus());break;default:break}}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",[this.value])}}},Qt=Zt,Jt=l(Qt,Gt,Yt,!1,null,null,null);Jt.options.__file="packages/radio/src/radio-group.vue";var en=Jt.exports;en.install=function(e){e.component(en.name,en)};var tn=en,nn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-radio-button",class:[e.size?"el-radio-button--"+e.size:"",{"is-active":e.value===e.label},{"is-disabled":e.isDisabled},{"is-focus":e.focus}],attrs:{role:"radio","aria-checked":e.value===e.label,"aria-disabled":e.isDisabled,tabindex:e.tabIndex},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"]))return null;t.stopPropagation(),t.preventDefault(),e.value=e.isDisabled?e.value:e.label}}},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"el-radio-button__orig-radio",attrs:{type:"radio",name:e.name,disabled:e.isDisabled,tabindex:"-1"},domProps:{value:e.label,checked:e._q(e.value,e.label)},on:{change:[function(t){e.value=e.label},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}),n("span",{staticClass:"el-radio-button__inner",style:e.value===e.label?e.activeStyle:null,on:{keydown:function(e){e.stopPropagation()}}},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2)])},rn=[];nn._withStripped=!0;var on={name:"ElRadioButton",mixins:[D.a],inject:{elForm:{default:""},elFormItem:{default:""}},props:{label:{},disabled:Boolean,name:String},data:function(){return{focus:!1}},computed:{value:{get:function(){return this._radioGroup.value},set:function(e){this._radioGroup.$emit("input",e)}},_radioGroup:function(){var e=this.$parent;while(e){if("ElRadioGroup"===e.$options.componentName)return e;e=e.$parent}return!1},activeStyle:function(){return{backgroundColor:this._radioGroup.fill||"",borderColor:this._radioGroup.fill||"",boxShadow:this._radioGroup.fill?"-1px 0 0 0 "+this._radioGroup.fill:"",color:this._radioGroup.textColor||""}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},size:function(){return this._radioGroup.radioGroupSize||this._elFormItemSize||(this.$ELEMENT||{}).size},isDisabled:function(){return this.disabled||this._radioGroup.disabled||(this.elForm||{}).disabled},tabIndex:function(){return this.isDisabled||this._radioGroup&&this.value!==this.label?-1:0}},methods:{handleChange:function(){var e=this;this.$nextTick((function(){e.dispatch("ElRadioGroup","handleChange",e.value)}))}}},an=on,sn=l(an,nn,rn,!1,null,null,null);sn.options.__file="packages/radio/src/radio-button.vue";var ln=sn.exports;ln.install=function(e){e.component(ln.name,ln)};var cn=ln,un=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-checkbox",class:[e.border&&e.checkboxSize?"el-checkbox--"+e.checkboxSize:"",{"is-disabled":e.isDisabled},{"is-bordered":e.border},{"is-checked":e.isChecked}],attrs:{id:e.id}},[n("span",{staticClass:"el-checkbox__input",class:{"is-disabled":e.isDisabled,"is-checked":e.isChecked,"is-indeterminate":e.indeterminate,"is-focus":e.focus},attrs:{tabindex:!!e.indeterminate&&0,role:!!e.indeterminate&&"checkbox","aria-checked":!!e.indeterminate&&"mixed"}},[n("span",{staticClass:"el-checkbox__inner"}),e.trueLabel||e.falseLabel?n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var n=e.model,i=t.target,r=i.checked?e.trueLabel:e.falseLabel;if(Array.isArray(n)){var o=null,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",disabled:e.isDisabled,name:e.name},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var n=e.model,i=t.target,r=!!i.checked;if(Array.isArray(n)){var o=e.label,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}})]),e.$slots.default||e.label?n("span",{staticClass:"el-checkbox__label"},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2):e._e()])},dn=[];un._withStripped=!0;var hn={name:"ElCheckbox",mixins:[D.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElCheckbox",data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},computed:{model:{get:function(){return this.isGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this.isGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.length<this._checkboxGroup.min&&(this.isLimitExceeded=!0),void 0!==this._checkboxGroup.max&&e.length>this._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):(this.$emit("input",e),this.selfModel=e)}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},isGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return this._checkboxGroup=e,!0;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,n=e.min;return!(!t&&!n)&&this.model.length>=t&&!this.isChecked||this.model.length<=n&&this.isChecked},isDisabled:function(){return this.isGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._checkboxGroup.checkboxGroupSize||e}},props:{value:{},label:{},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number],id:String,controls:String,border:Boolean,size:String},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var n=void 0;n=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",n,e),this.$nextTick((function(){t.isGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()},mounted:function(){this.indeterminate&&this.$el.setAttribute("aria-controls",this.controls)},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}}},fn=hn,pn=l(fn,un,dn,!1,null,null,null);pn.options.__file="packages/checkbox/src/checkbox.vue";var mn=pn.exports;mn.install=function(e){e.component(mn.name,mn)};var gn=mn,vn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-checkbox-button",class:[e.size?"el-checkbox-button--"+e.size:"",{"is-disabled":e.isDisabled},{"is-checked":e.isChecked},{"is-focus":e.focus}],attrs:{role:"checkbox","aria-checked":e.isChecked,"aria-disabled":e.isDisabled}},[e.trueLabel||e.falseLabel?n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox-button__original",attrs:{type:"checkbox",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var n=e.model,i=t.target,r=i.checked?e.trueLabel:e.falseLabel;if(Array.isArray(n)){var o=null,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox-button__original",attrs:{type:"checkbox",name:e.name,disabled:e.isDisabled},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var n=e.model,i=t.target,r=!!i.checked;if(Array.isArray(n)){var o=e.label,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}),e.$slots.default||e.label?n("span",{staticClass:"el-checkbox-button__inner",style:e.isChecked?e.activeStyle:null},[e._t("default",[e._v(e._s(e.label))])],2):e._e()])},bn=[];vn._withStripped=!0;var yn={name:"ElCheckboxButton",mixins:[D.a],inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},props:{value:{},label:{},disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number]},computed:{model:{get:function(){return this._checkboxGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this._checkboxGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.length<this._checkboxGroup.min&&(this.isLimitExceeded=!0),void 0!==this._checkboxGroup.max&&e.length>this._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):void 0!==this.value?this.$emit("input",e):this.selfModel=e}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},_checkboxGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return e;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},activeStyle:function(){return{backgroundColor:this._checkboxGroup.fill||"",borderColor:this._checkboxGroup.fill||"",color:this._checkboxGroup.textColor||"","box-shadow":"-1px 0 0 0 "+this._checkboxGroup.fill}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},size:function(){return this._checkboxGroup.checkboxGroupSize||this._elFormItemSize||(this.$ELEMENT||{}).size},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,n=e.min;return!(!t&&!n)&&this.model.length>=t&&!this.isChecked||this.model.length<=n&&this.isChecked},isDisabled:function(){return this._checkboxGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled}},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var n=void 0;n=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",n,e),this.$nextTick((function(){t._checkboxGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()}},wn=yn,xn=l(wn,vn,bn,!1,null,null,null);xn.options.__file="packages/checkbox/src/checkbox-button.vue";var _n=xn.exports;_n.install=function(e){e.component(_n.name,_n)};var kn=_n,Cn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-checkbox-group",attrs:{role:"group","aria-label":"checkbox-group"}},[e._t("default")],2)},Sn=[];Cn._withStripped=!0;var On={name:"ElCheckboxGroup",componentName:"ElCheckboxGroup",mixins:[D.a],inject:{elFormItem:{default:""}},props:{value:{},disabled:Boolean,min:Number,max:Number,size:String,fill:String,textColor:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxGroupSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",[e])}}},Tn=On,En=l(Tn,Cn,Sn,!1,null,null,null);En.options.__file="packages/checkbox/src/checkbox-group.vue";var Dn=En.exports;Dn.install=function(e){e.component(Dn.name,Dn)};var Mn=Dn,An=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-switch",class:{"is-disabled":e.switchDisabled,"is-checked":e.checked},attrs:{role:"switch","aria-checked":e.checked,"aria-disabled":e.switchDisabled},on:{click:function(t){return t.preventDefault(),e.switchValue(t)}}},[n("input",{ref:"input",staticClass:"el-switch__input",attrs:{type:"checkbox",id:e.id,name:e.name,"true-value":e.activeValue,"false-value":e.inactiveValue,disabled:e.switchDisabled},on:{change:e.handleChange,keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.switchValue(t)}}}),e.inactiveIconClass||e.inactiveText?n("span",{class:["el-switch__label","el-switch__label--left",e.checked?"":"is-active"]},[e.inactiveIconClass?n("i",{class:[e.inactiveIconClass]}):e._e(),!e.inactiveIconClass&&e.inactiveText?n("span",{attrs:{"aria-hidden":e.checked}},[e._v(e._s(e.inactiveText))]):e._e()]):e._e(),n("span",{ref:"core",staticClass:"el-switch__core",style:{width:e.coreWidth+"px"}}),e.activeIconClass||e.activeText?n("span",{class:["el-switch__label","el-switch__label--right",e.checked?"is-active":""]},[e.activeIconClass?n("i",{class:[e.activeIconClass]}):e._e(),!e.activeIconClass&&e.activeText?n("span",{attrs:{"aria-hidden":!e.checked}},[e._v(e._s(e.activeText))]):e._e()]):e._e()])},Nn=[];An._withStripped=!0;var In={name:"ElSwitch",mixins:[Q()("input"),T.a,D.a],inject:{elForm:{default:""}},props:{value:{type:[Boolean,String,Number],default:!1},disabled:{type:Boolean,default:!1},width:{type:Number,default:40},activeIconClass:{type:String,default:""},inactiveIconClass:{type:String,default:""},activeText:String,inactiveText:String,activeColor:{type:String,default:""},inactiveColor:{type:String,default:""},activeValue:{type:[Boolean,String,Number],default:!0},inactiveValue:{type:[Boolean,String,Number],default:!1},name:{type:String,default:""},validateEvent:{type:Boolean,default:!0},id:String},data:function(){return{coreWidth:this.width}},created:function(){~[this.activeValue,this.inactiveValue].indexOf(this.value)||this.$emit("input",this.inactiveValue)},computed:{checked:function(){return this.value===this.activeValue},switchDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{checked:function(){this.$refs.input.checked=this.checked,(this.activeColor||this.inactiveColor)&&this.setBackgroundColor(),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[this.value])}},methods:{handleChange:function(e){var t=this,n=this.checked?this.inactiveValue:this.activeValue;this.$emit("input",n),this.$emit("change",n),this.$nextTick((function(){t.$refs.input.checked=t.checked}))},setBackgroundColor:function(){var e=this.checked?this.activeColor:this.inactiveColor;this.$refs.core.style.borderColor=e,this.$refs.core.style.backgroundColor=e},switchValue:function(){!this.switchDisabled&&this.handleChange()},getMigratingConfig:function(){return{props:{"on-color":"on-color is renamed to active-color.","off-color":"off-color is renamed to inactive-color.","on-text":"on-text is renamed to active-text.","off-text":"off-text is renamed to inactive-text.","on-value":"on-value is renamed to active-value.","off-value":"off-value is renamed to inactive-value.","on-icon-class":"on-icon-class is renamed to active-icon-class.","off-icon-class":"off-icon-class is renamed to inactive-icon-class."}}}},mounted:function(){this.coreWidth=this.width||40,(this.activeColor||this.inactiveColor)&&this.setBackgroundColor(),this.$refs.input.checked=this.checked}},Ln=In,Pn=l(Ln,An,Nn,!1,null,null,null);Pn.options.__file="packages/switch/src/component.vue";var $n=Pn.exports;$n.install=function(e){e.component($n.name,$n)};var Fn=$n,jn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],staticClass:"el-select",class:[e.selectSize?"el-select--"+e.selectSize:""],on:{click:function(t){return t.stopPropagation(),e.toggleMenu(t)}}},[e.multiple?n("div",{ref:"tags",staticClass:"el-select__tags",style:{"max-width":e.inputWidth-32+"px",width:"100%"}},[e.collapseTags&&e.selected.length?n("span",[n("el-tag",{attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:e.selected[0].hitState,type:"info","disable-transitions":""},on:{close:function(t){e.deleteTag(t,e.selected[0])}}},[n("span",{staticClass:"el-select__tags-text"},[e._v(e._s(e.selected[0].currentLabel))])]),e.selected.length>1?n("el-tag",{attrs:{closable:!1,size:e.collapseTagSize,type:"info","disable-transitions":""}},[n("span",{staticClass:"el-select__tags-text"},[e._v("+ "+e._s(e.selected.length-1))])]):e._e()],1):e._e(),e.collapseTags?e._e():n("transition-group",{on:{"after-leave":e.resetInputHeight}},e._l(e.selected,(function(t){return n("el-tag",{key:e.getValueKey(t),attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:t.hitState,type:"info","disable-transitions":""},on:{close:function(n){e.deleteTag(n,t)}}},[n("span",{staticClass:"el-select__tags-text"},[e._v(e._s(t.currentLabel))])])})),1),e.filterable?n("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],ref:"input",staticClass:"el-select__input",class:[e.selectSize?"is-"+e.selectSize:""],style:{"flex-grow":"1",width:e.inputLength/(e.inputWidth-32)+"%","max-width":e.inputWidth-42+"px"},attrs:{type:"text",disabled:e.selectDisabled,autocomplete:e.autoComplete||e.autocomplete},domProps:{value:e.query},on:{focus:e.handleFocus,blur:function(t){e.softFocus=!1},keyup:e.managePlaceholder,keydown:[e.resetInputState,function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.navigateOptions("prev")},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),e.selectOption(t))},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){return!("button"in t)&&e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?null:e.deletePrevTag(t)},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],compositionstart:e.handleComposition,compositionupdate:e.handleComposition,compositionend:e.handleComposition,input:[function(t){t.target.composing||(e.query=t.target.value)},e.debouncedQueryChange]}}):e._e()],1):e._e(),n("el-input",{ref:"reference",class:{"is-focus":e.visible},attrs:{type:"text",placeholder:e.currentPlaceholder,name:e.name,id:e.id,autocomplete:e.autoComplete||e.autocomplete,size:e.selectSize,disabled:e.selectDisabled,readonly:e.readonly,"validate-event":!1,tabindex:e.multiple&&e.filterable?"-1":null},on:{focus:e.handleFocus,blur:e.handleBlur},nativeOn:{keyup:function(t){return e.debouncedOnInputChange(t)},keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("prev")},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),e.selectOption(t))},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],paste:function(t){return e.debouncedOnInputChange(t)},mouseenter:function(t){e.inputHovering=!0},mouseleave:function(t){e.inputHovering=!1}},model:{value:e.selectedLabel,callback:function(t){e.selectedLabel=t},expression:"selectedLabel"}},[e.$slots.prefix?n("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),n("template",{slot:"suffix"},[n("i",{directives:[{name:"show",rawName:"v-show",value:!e.showClose,expression:"!showClose"}],class:["el-select__caret","el-input__icon","el-icon-"+e.iconClass]}),e.showClose?n("i",{staticClass:"el-select__caret el-input__icon el-icon-circle-close",on:{click:e.handleClearClick}}):e._e()])],2),n("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":e.doDestroy}},[n("el-select-menu",{directives:[{name:"show",rawName:"v-show",value:e.visible&&!1!==e.emptyText,expression:"visible && emptyText !== false"}],ref:"popper",attrs:{"append-to-body":e.popperAppendToBody}},[n("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.options.length>0&&!e.loading,expression:"options.length > 0 && !loading"}],ref:"scrollbar",class:{"is-empty":!e.allowCreate&&e.query&&0===e.filteredOptionsCount},attrs:{tag:"ul","wrap-class":"el-select-dropdown__wrap","view-class":"el-select-dropdown__list"}},[e.showNewOption?n("el-option",{attrs:{value:e.query,created:""}}):e._e(),e._t("default")],2),e.emptyText&&(!e.allowCreate||e.loading||e.allowCreate&&0===e.options.length)?[e.$slots.empty?e._t("empty"):n("p",{staticClass:"el-select-dropdown__empty"},[e._v("\n          "+e._s(e.emptyText)+"\n        ")])]:e._e()],2)],1)],1)},zn=[];jn._withStripped=!0;var Bn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-select-dropdown el-popper",class:[{"is-multiple":e.$parent.multiple},e.popperClass],style:{minWidth:e.minWidth}},[e._t("default")],2)},Rn=[];Bn._withStripped=!0;var Vn={name:"ElSelectDropdown",componentName:"ElSelectDropdown",mixins:[W.a],props:{placement:{default:"bottom-start"},boundariesPadding:{default:0},popperOptions:{default:function(){return{gpuAcceleration:!1}}},visibleArrow:{default:!0},appendToBody:{type:Boolean,default:!0}},data:function(){return{minWidth:""}},computed:{popperClass:function(){return this.$parent.popperClass}},watch:{"$parent.inputWidth":function(){this.minWidth=this.$parent.$el.getBoundingClientRect().width+"px"}},mounted:function(){var e=this;this.referenceElm=this.$parent.$refs.reference.$el,this.$parent.popperElm=this.popperElm=this.$el,this.$on("updatePopper",(function(){e.$parent.visible&&e.updatePopper()})),this.$on("destroyPopper",this.destroyPopper)}},Hn=Vn,Wn=l(Hn,Bn,Rn,!1,null,null,null);Wn.options.__file="packages/select/src/select-dropdown.vue";var qn=Wn.exports,Un=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-dropdown__item",class:{selected:e.itemSelected,"is-disabled":e.disabled||e.groupDisabled||e.limitReached,hover:e.hover},on:{mouseenter:e.hoverItem,click:function(t){return t.stopPropagation(),e.selectOptionClick(t)}}},[e._t("default",[n("span",[e._v(e._s(e.currentLabel))])])],2)},Kn=[];Un._withStripped=!0;var Gn="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)},Yn={mixins:[D.a],name:"ElOption",componentName:"ElOption",inject:["select"],props:{value:{required:!0},label:[String,Number],created:Boolean,disabled:{type:Boolean,default:!1}},data:function(){return{index:-1,groupDisabled:!1,visible:!0,hitState:!1,hover:!1}},computed:{isObject:function(){return"[object object]"===Object.prototype.toString.call(this.value).toLowerCase()},currentLabel:function(){return this.label||(this.isObject?"":this.value)},currentValue:function(){return this.value||this.label||""},itemSelected:function(){return this.select.multiple?this.contains(this.select.value,this.value):this.isEqual(this.value,this.select.value)},limitReached:function(){return!!this.select.multiple&&!this.itemSelected&&(this.select.value||[]).length>=this.select.multipleLimit&&this.select.multipleLimit>0}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var n=this.select,i=n.remote,r=n.valueKey;if(!this.created&&!i){if(r&&"object"===("undefined"===typeof e?"undefined":Gn(e))&&"object"===("undefined"===typeof t?"undefined":Gn(t))&&e[r]===t[r])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var n=this.select.valueKey;return Object(y["getValueByPath"])(e,n)===Object(y["getValueByPath"])(t,n)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var n=this.select.valueKey;return e&&e.some((function(e){return Object(y["getValueByPath"])(e,n)===Object(y["getValueByPath"])(t,n)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(y["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select,t=e.selected,n=e.multiple,i=n?t:[t],r=this.select.cachedOptions.indexOf(this),o=i.indexOf(this);r>-1&&o<0&&this.select.cachedOptions.splice(r,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},Xn=Yn,Zn=l(Xn,Un,Kn,!1,null,null,null);Zn.options.__file="packages/select/src/option.vue";var Qn=Zn.exports,Jn=n(30),ei=n.n(Jn),ti=n(13),ni=n(11),ii=n.n(ni),ri=n(27),oi=n.n(ri),ai={data:function(){return{hoverOption:-1}},computed:{optionsAllDisabled:function(){return this.options.filter((function(e){return e.visible})).every((function(e){return e.disabled}))}},watch:{hoverIndex:function(e){var t=this;"number"===typeof e&&e>-1&&(this.hoverOption=this.options[e]||{}),this.options.forEach((function(e){e.hover=t.hoverOption===e}))}},methods:{navigateOptions:function(e){var t=this;if(this.visible){if(0!==this.options.length&&0!==this.filteredOptionsCount&&!this.optionsAllDisabled){"next"===e?(this.hoverIndex++,this.hoverIndex===this.options.length&&(this.hoverIndex=0)):"prev"===e&&(this.hoverIndex--,this.hoverIndex<0&&(this.hoverIndex=this.options.length-1));var n=this.options[this.hoverIndex];!0!==n.disabled&&!0!==n.groupDisabled&&n.visible||this.navigateOptions(e),this.$nextTick((function(){return t.scrollToOption(t.hoverOption)}))}}else this.visible=!0}}},si={mixins:[D.a,b.a,Q()("reference"),ai],name:"ElSelect",componentName:"ElSelect",inject:{elForm:{default:""},elFormItem:{default:""}},provide:function(){return{select:this}},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},readonly:function(){return!this.filterable||this.multiple||!Object(y["isIE"])()&&!Object(y["isEdge"])()&&!this.visible},showClose:function(){var e=this.multiple?Array.isArray(this.value)&&this.value.length>0:void 0!==this.value&&null!==this.value&&""!==this.value,t=this.clearable&&!this.selectDisabled&&this.inputHovering&&e;return t},iconClass:function(){return this.remote&&this.filterable?"":this.visible?"arrow-up is-reverse":"arrow-up"},debounce:function(){return this.remote?300:0},emptyText:function(){return this.loading?this.loadingText||this.t("el.select.loading"):(!this.remote||""!==this.query||0!==this.options.length)&&(this.filterable&&this.query&&this.options.length>0&&0===this.filteredOptionsCount?this.noMatchText||this.t("el.select.noMatch"):0===this.options.length?this.noDataText||this.t("el.select.noData"):null)},showNewOption:function(){var e=this,t=this.options.filter((function(e){return!e.created})).some((function(t){return t.currentLabel===e.query}));return this.filterable&&this.allowCreate&&""!==this.query&&!t},selectSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},selectDisabled:function(){return this.disabled||(this.elForm||{}).disabled},collapseTagSize:function(){return["small","mini"].indexOf(this.selectSize)>-1?"mini":"small"}},components:{ElInput:g.a,ElSelectMenu:qn,ElOption:Qn,ElTag:ei.a,ElScrollbar:U.a},directives:{Clickoutside:B.a},props:{name:String,id:String,value:{required:!0},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},automaticDropdown:Boolean,size:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:String,remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String,default:function(){return Object(ni["t"])("el.select.placeholder")}},defaultFirstOption:Boolean,reserveKeyword:Boolean,valueKey:{type:String,default:"value"},collapseTags:Boolean,popperAppendToBody:{type:Boolean,default:!0}},data:function(){return{options:[],cachedOptions:[],createdLabel:null,createdSelected:!1,selected:this.multiple?[]:{},inputLength:20,inputWidth:0,initialInputHeight:0,cachedPlaceHolder:"",optionsCount:0,filteredOptionsCount:0,visible:!1,softFocus:!1,selectedLabel:"",hoverIndex:-1,query:"",previousQuery:null,inputHovering:!1,currentPlaceholder:"",menuVisibleOnFocus:!1,isOnComposition:!1,isSilentBlur:!1}},watch:{selectDisabled:function(){var e=this;this.$nextTick((function(){e.resetInputHeight()}))},placeholder:function(e){this.cachedPlaceHolder=this.currentPlaceholder=e},value:function(e,t){this.multiple&&(this.resetInputHeight(),e&&e.length>0||this.$refs.input&&""!==this.query?this.currentPlaceholder="":this.currentPlaceholder=this.cachedPlaceHolder,this.filterable&&!this.reserveKeyword&&(this.query="",this.handleQueryChange(this.query))),this.setSelected(),this.filterable&&!this.multiple&&(this.inputLength=20),Object(y["valueEquals"])(e,t)||this.dispatch("ElFormItem","el.form.change",e)},visible:function(e){var t=this;e?(this.broadcast("ElSelectDropdown","updatePopper"),this.filterable&&(this.query=this.remote?"":this.selectedLabel,this.handleQueryChange(this.query),this.multiple?this.$refs.input.focus():(this.remote||(this.broadcast("ElOption","queryChange",""),this.broadcast("ElOptionGroup","queryChange")),this.selectedLabel&&(this.currentPlaceholder=this.selectedLabel,this.selectedLabel="")))):(this.broadcast("ElSelectDropdown","destroyPopper"),this.$refs.input&&this.$refs.input.blur(),this.query="",this.previousQuery=null,this.selectedLabel="",this.inputLength=20,this.menuVisibleOnFocus=!1,this.resetHoverIndex(),this.$nextTick((function(){t.$refs.input&&""===t.$refs.input.value&&0===t.selected.length&&(t.currentPlaceholder=t.cachedPlaceHolder)})),this.multiple||(this.selected&&(this.filterable&&this.allowCreate&&this.createdSelected&&this.createdLabel?this.selectedLabel=this.createdLabel:this.selectedLabel=this.selected.currentLabel,this.filterable&&(this.query=this.selectedLabel)),this.filterable&&(this.currentPlaceholder=this.cachedPlaceHolder))),this.$emit("visible-change",e)},options:function(){var e=this;if(!this.$isServer){this.$nextTick((function(){e.broadcast("ElSelectDropdown","updatePopper")})),this.multiple&&this.resetInputHeight();var t=this.$el.querySelectorAll("input");-1===[].indexOf.call(t,document.activeElement)&&this.setSelected(),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()}}},methods:{handleComposition:function(e){var t=this,n=e.target.value;if("compositionend"===e.type)this.isOnComposition=!1,this.$nextTick((function(e){return t.handleQueryChange(n)}));else{var i=n[n.length-1]||"";this.isOnComposition=!Object(Tt["isKorean"])(i)}},handleQueryChange:function(e){var t=this;this.previousQuery===e||this.isOnComposition||(null!==this.previousQuery||"function"!==typeof this.filterMethod&&"function"!==typeof this.remoteMethod?(this.previousQuery=e,this.$nextTick((function(){t.visible&&t.broadcast("ElSelectDropdown","updatePopper")})),this.hoverIndex=-1,this.multiple&&this.filterable&&this.$nextTick((function(){var e=15*t.$refs.input.value.length+20;t.inputLength=t.collapseTags?Math.min(50,e):e,t.managePlaceholder(),t.resetInputHeight()})),this.remote&&"function"===typeof this.remoteMethod?(this.hoverIndex=-1,this.remoteMethod(e)):"function"===typeof this.filterMethod?(this.filterMethod(e),this.broadcast("ElOptionGroup","queryChange")):(this.filteredOptionsCount=this.optionsCount,this.broadcast("ElOption","queryChange",e),this.broadcast("ElOptionGroup","queryChange")),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()):this.previousQuery=e)},scrollToOption:function(e){var t=Array.isArray(e)&&e[0]?e[0].$el:e.$el;if(this.$refs.popper&&t){var n=this.$refs.popper.$el.querySelector(".el-select-dropdown__wrap");oi()(n,t)}this.$refs.scrollbar&&this.$refs.scrollbar.handleScroll()},handleMenuEnter:function(){var e=this;this.$nextTick((function(){return e.scrollToOption(e.selected)}))},emitChange:function(e){Object(y["valueEquals"])(this.value,e)||this.$emit("change",e)},getOption:function(e){for(var t=void 0,n="[object object]"===Object.prototype.toString.call(e).toLowerCase(),i="[object null]"===Object.prototype.toString.call(e).toLowerCase(),r="[object undefined]"===Object.prototype.toString.call(e).toLowerCase(),o=this.cachedOptions.length-1;o>=0;o--){var a=this.cachedOptions[o],s=n?Object(y["getValueByPath"])(a.value,this.valueKey)===Object(y["getValueByPath"])(e,this.valueKey):a.value===e;if(s){t=a;break}}if(t)return t;var l=n||i||r?"":e,c={value:e,currentLabel:l};return this.multiple&&(c.hitState=!1),c},setSelected:function(){var e=this;if(!this.multiple){var t=this.getOption(this.value);return t.created?(this.createdLabel=t.currentLabel,this.createdSelected=!0):this.createdSelected=!1,this.selectedLabel=t.currentLabel,this.selected=t,void(this.filterable&&(this.query=this.selectedLabel))}var n=[];Array.isArray(this.value)&&this.value.forEach((function(t){n.push(e.getOption(t))})),this.selected=n,this.$nextTick((function(){e.resetInputHeight()}))},handleFocus:function(e){this.softFocus?this.softFocus=!1:((this.automaticDropdown||this.filterable)&&(this.visible=!0,this.filterable&&(this.menuVisibleOnFocus=!0)),this.$emit("focus",e))},blur:function(){this.visible=!1,this.$refs.reference.blur()},handleBlur:function(e){var t=this;setTimeout((function(){t.isSilentBlur?t.isSilentBlur=!1:t.$emit("blur",e)}),50),this.softFocus=!1},handleClearClick:function(e){this.deleteSelected(e)},doDestroy:function(){this.$refs.popper&&this.$refs.popper.doDestroy()},handleClose:function(){this.visible=!1},toggleLastOptionHitState:function(e){if(Array.isArray(this.selected)){var t=this.selected[this.selected.length-1];if(t)return!0===e||!1===e?(t.hitState=e,e):(t.hitState=!t.hitState,t.hitState)}},deletePrevTag:function(e){if(e.target.value.length<=0&&!this.toggleLastOptionHitState()){var t=this.value.slice();t.pop(),this.$emit("input",t),this.emitChange(t)}},managePlaceholder:function(){""!==this.currentPlaceholder&&(this.currentPlaceholder=this.$refs.input.value?"":this.cachedPlaceHolder)},resetInputState:function(e){8!==e.keyCode&&this.toggleLastOptionHitState(!1),this.inputLength=15*this.$refs.input.value.length+20,this.resetInputHeight()},resetInputHeight:function(){var e=this;this.collapseTags&&!this.filterable||this.$nextTick((function(){if(e.$refs.reference){var t=e.$refs.reference.$el.childNodes,n=[].filter.call(t,(function(e){return"INPUT"===e.tagName}))[0],i=e.$refs.tags,r=e.initialInputHeight||40;n.style.height=0===e.selected.length?r+"px":Math.max(i?i.clientHeight+(i.clientHeight>r?6:0):0,r)+"px",e.visible&&!1!==e.emptyText&&e.broadcast("ElSelectDropdown","updatePopper")}}))},resetHoverIndex:function(){var e=this;setTimeout((function(){e.multiple?e.selected.length>0?e.hoverIndex=Math.min.apply(null,e.selected.map((function(t){return e.options.indexOf(t)}))):e.hoverIndex=-1:e.hoverIndex=e.options.indexOf(e.selected)}),300)},handleOptionSelect:function(e,t){var n=this;if(this.multiple){var i=(this.value||[]).slice(),r=this.getValueIndex(i,e.value);r>-1?i.splice(r,1):(this.multipleLimit<=0||i.length<this.multipleLimit)&&i.push(e.value),this.$emit("input",i),this.emitChange(i),e.created&&(this.query="",this.handleQueryChange(""),this.inputLength=20),this.filterable&&this.$refs.input.focus()}else this.$emit("input",e.value),this.emitChange(e.value),this.visible=!1;this.isSilentBlur=t,this.setSoftFocus(),this.visible||this.$nextTick((function(){n.scrollToOption(e)}))},setSoftFocus:function(){this.softFocus=!0;var e=this.$refs.input||this.$refs.reference;e&&e.focus()},getValueIndex:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n="[object object]"===Object.prototype.toString.call(t).toLowerCase();if(n){var i=this.valueKey,r=-1;return e.some((function(e,n){return Object(y["getValueByPath"])(e,i)===Object(y["getValueByPath"])(t,i)&&(r=n,!0)})),r}return e.indexOf(t)},toggleMenu:function(){this.selectDisabled||(this.menuVisibleOnFocus?this.menuVisibleOnFocus=!1:this.visible=!this.visible,this.visible&&(this.$refs.input||this.$refs.reference).focus())},selectOption:function(){this.visible?this.options[this.hoverIndex]&&this.handleOptionSelect(this.options[this.hoverIndex]):this.toggleMenu()},deleteSelected:function(e){e.stopPropagation();var t=this.multiple?[]:"";this.$emit("input",t),this.emitChange(t),this.visible=!1,this.$emit("clear")},deleteTag:function(e,t){var n=this.selected.indexOf(t);if(n>-1&&!this.selectDisabled){var i=this.value.slice();i.splice(n,1),this.$emit("input",i),this.emitChange(i),this.$emit("remove-tag",t.value)}e.stopPropagation()},onInputChange:function(){this.filterable&&this.query!==this.selectedLabel&&(this.query=this.selectedLabel,this.handleQueryChange(this.query))},onOptionDestroy:function(e){e>-1&&(this.optionsCount--,this.filteredOptionsCount--,this.options.splice(e,1))},resetInputWidth:function(){this.inputWidth=this.$refs.reference.$el.getBoundingClientRect().width},handleResize:function(){this.resetInputWidth(),this.multiple&&this.resetInputHeight()},checkDefaultFirstOption:function(){this.hoverIndex=-1;for(var e=!1,t=this.options.length-1;t>=0;t--)if(this.options[t].created){e=!0,this.hoverIndex=t;break}if(!e)for(var n=0;n!==this.options.length;++n){var i=this.options[n];if(this.query){if(!i.disabled&&!i.groupDisabled&&i.visible){this.hoverIndex=n;break}}else if(i.itemSelected){this.hoverIndex=n;break}}},getValueKey:function(e){return"[object object]"!==Object.prototype.toString.call(e.value).toLowerCase()?e.value:Object(y["getValueByPath"])(e.value,this.valueKey)}},created:function(){var e=this;this.cachedPlaceHolder=this.currentPlaceholder=this.placeholder,this.multiple&&!Array.isArray(this.value)&&this.$emit("input",[]),!this.multiple&&Array.isArray(this.value)&&this.$emit("input",""),this.debouncedOnInputChange=j()(this.debounce,(function(){e.onInputChange()})),this.debouncedQueryChange=j()(this.debounce,(function(t){e.handleQueryChange(t.target.value)})),this.$on("handleOptionClick",this.handleOptionSelect),this.$on("setSelected",this.setSelected)},mounted:function(){var e=this;this.multiple&&Array.isArray(this.value)&&this.value.length>0&&(this.currentPlaceholder=""),Object(ti["addResizeListener"])(this.$el,this.handleResize);var t=this.$refs.reference;if(t&&t.$el){var n={medium:36,small:32,mini:28},i=t.$el.querySelector("input");this.initialInputHeight=i.getBoundingClientRect().height||n[this.selectSize]}this.remote&&this.multiple&&this.resetInputHeight(),this.$nextTick((function(){t&&t.$el&&(e.inputWidth=t.$el.getBoundingClientRect().width)})),this.setSelected()},beforeDestroy:function(){this.$el&&this.handleResize&&Object(ti["removeResizeListener"])(this.$el,this.handleResize)}},li=si,ci=l(li,jn,zn,!1,null,null,null);ci.options.__file="packages/select/src/select.vue";var ui=ci.exports;ui.install=function(e){e.component(ui.name,ui)};var di=ui;Qn.install=function(e){e.component(Qn.name,Qn)};var hi=Qn,fi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ul",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-group__wrap"},[n("li",{staticClass:"el-select-group__title"},[e._v(e._s(e.label))]),n("li",[n("ul",{staticClass:"el-select-group"},[e._t("default")],2)])])},pi=[];fi._withStripped=!0;var mi={mixins:[D.a],name:"ElOptionGroup",componentName:"ElOptionGroup",props:{label:String,disabled:{type:Boolean,default:!1}},data:function(){return{visible:!0}},watch:{disabled:function(e){this.broadcast("ElOption","handleGroupDisabled",e)}},methods:{queryChange:function(){this.visible=this.$children&&Array.isArray(this.$children)&&this.$children.some((function(e){return!0===e.visible}))}},created:function(){this.$on("queryChange",this.queryChange)},mounted:function(){this.disabled&&this.broadcast("ElOption","handleGroupDisabled",this.disabled)}},gi=mi,vi=l(gi,fi,pi,!1,null,null,null);vi.options.__file="packages/select/src/option-group.vue";var bi=vi.exports;bi.install=function(e){e.component(bi.name,bi)};var yi=bi,wi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("button",{staticClass:"el-button",class:[e.type?"el-button--"+e.type:"",e.buttonSize?"el-button--"+e.buttonSize:"",{"is-disabled":e.buttonDisabled,"is-loading":e.loading,"is-plain":e.plain,"is-round":e.round,"is-circle":e.circle}],attrs:{disabled:e.buttonDisabled||e.loading,autofocus:e.autofocus,type:e.nativeType},on:{click:e.handleClick}},[e.loading?n("i",{staticClass:"el-icon-loading"}):e._e(),e.icon&&!e.loading?n("i",{class:e.icon}):e._e(),e.$slots.default?n("span",[e._t("default")],2):e._e()])},xi=[];wi._withStripped=!0;var _i={name:"ElButton",inject:{elForm:{default:""},elFormItem:{default:""}},props:{type:{type:String,default:"default"},size:String,icon:{type:String,default:""},nativeType:{type:String,default:"button"},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},buttonSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},buttonDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},methods:{handleClick:function(e){this.$emit("click",e)}}},ki=_i,Ci=l(ki,wi,xi,!1,null,null,null);Ci.options.__file="packages/button/src/button.vue";var Si=Ci.exports;Si.install=function(e){e.component(Si.name,Si)};var Oi=Si,Ti=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-button-group"},[e._t("default")],2)},Ei=[];Ti._withStripped=!0;var Di={name:"ElButtonGroup"},Mi=Di,Ai=l(Mi,Ti,Ei,!1,null,null,null);Ai.options.__file="packages/button/src/button-group.vue";var Ni=Ai.exports;Ni.install=function(e){e.component(Ni.name,Ni)};var Ii=Ni,Li=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-table",class:[{"el-table--fit":e.fit,"el-table--striped":e.stripe,"el-table--border":e.border||e.isGroup,"el-table--hidden":e.isHidden,"el-table--group":e.isGroup,"el-table--fluid-height":e.maxHeight,"el-table--scrollable-x":e.layout.scrollX,"el-table--scrollable-y":e.layout.scrollY,"el-table--enable-row-hover":!e.store.states.isComplex,"el-table--enable-row-transition":0!==(e.store.states.data||[]).length&&(e.store.states.data||[]).length<100},e.tableSize?"el-table--"+e.tableSize:""],on:{mouseleave:function(t){e.handleMouseLeave(t)}}},[n("div",{ref:"hiddenColumns",staticClass:"hidden-columns"},[e._t("default")],2),e.showHeader?n("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleHeaderFooterMousewheel,expression:"handleHeaderFooterMousewheel"}],ref:"headerWrapper",staticClass:"el-table__header-wrapper"},[n("table-header",{ref:"tableHeader",style:{width:e.layout.bodyWidth?e.layout.bodyWidth+"px":""},attrs:{store:e.store,border:e.border,"default-sort":e.defaultSort}})],1):e._e(),n("div",{ref:"bodyWrapper",staticClass:"el-table__body-wrapper",class:[e.layout.scrollX?"is-scrolling-"+e.scrollPosition:"is-scrolling-none"],style:[e.bodyHeight]},[n("table-body",{style:{width:e.bodyWidth},attrs:{context:e.context,store:e.store,stripe:e.stripe,"row-class-name":e.rowClassName,"row-style":e.rowStyle,highlight:e.highlightCurrentRow}}),e.data&&0!==e.data.length?e._e():n("div",{ref:"emptyBlock",staticClass:"el-table__empty-block",style:e.emptyBlockStyle},[n("span",{staticClass:"el-table__empty-text"},[e._t("empty",[e._v(e._s(e.emptyText||e.t("el.table.emptyText")))])],2)]),e.$slots.append?n("div",{ref:"appendWrapper",staticClass:"el-table__append-wrapper"},[e._t("append")],2):e._e()],1),e.showSummary?n("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"},{name:"mousewheel",rawName:"v-mousewheel",value:e.handleHeaderFooterMousewheel,expression:"handleHeaderFooterMousewheel"}],ref:"footerWrapper",staticClass:"el-table__footer-wrapper"},[n("table-footer",{style:{width:e.layout.bodyWidth?e.layout.bodyWidth+"px":""},attrs:{store:e.store,border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,"default-sort":e.defaultSort}})],1):e._e(),e.fixedColumns.length>0?n("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleFixedMousewheel,expression:"handleFixedMousewheel"}],ref:"fixedWrapper",staticClass:"el-table__fixed",style:[{width:e.layout.fixedWidth?e.layout.fixedWidth+"px":""},e.fixedHeight]},[e.showHeader?n("div",{ref:"fixedHeaderWrapper",staticClass:"el-table__fixed-header-wrapper"},[n("table-header",{ref:"fixedTableHeader",style:{width:e.bodyWidth},attrs:{fixed:"left",border:e.border,store:e.store}})],1):e._e(),n("div",{ref:"fixedBodyWrapper",staticClass:"el-table__fixed-body-wrapper",style:[{top:e.layout.headerHeight+"px"},e.fixedBodyHeight]},[n("table-body",{style:{width:e.bodyWidth},attrs:{fixed:"left",store:e.store,stripe:e.stripe,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"row-style":e.rowStyle}}),e.$slots.append?n("div",{staticClass:"el-table__append-gutter",style:{height:e.layout.appendHeight+"px"}}):e._e()],1),e.showSummary?n("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"}],ref:"fixedFooterWrapper",staticClass:"el-table__fixed-footer-wrapper"},[n("table-footer",{style:{width:e.bodyWidth},attrs:{fixed:"left",border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,store:e.store}})],1):e._e()]):e._e(),e.rightFixedColumns.length>0?n("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleFixedMousewheel,expression:"handleFixedMousewheel"}],ref:"rightFixedWrapper",staticClass:"el-table__fixed-right",style:[{width:e.layout.rightFixedWidth?e.layout.rightFixedWidth+"px":"",right:e.layout.scrollY?(e.border?e.layout.gutterWidth:e.layout.gutterWidth||0)+"px":""},e.fixedHeight]},[e.showHeader?n("div",{ref:"rightFixedHeaderWrapper",staticClass:"el-table__fixed-header-wrapper"},[n("table-header",{ref:"rightFixedTableHeader",style:{width:e.bodyWidth},attrs:{fixed:"right",border:e.border,store:e.store}})],1):e._e(),n("div",{ref:"rightFixedBodyWrapper",staticClass:"el-table__fixed-body-wrapper",style:[{top:e.layout.headerHeight+"px"},e.fixedBodyHeight]},[n("table-body",{style:{width:e.bodyWidth},attrs:{fixed:"right",store:e.store,stripe:e.stripe,"row-class-name":e.rowClassName,"row-style":e.rowStyle,highlight:e.highlightCurrentRow}}),e.$slots.append?n("div",{staticClass:"el-table__append-gutter",style:{height:e.layout.appendHeight+"px"}}):e._e()],1),e.showSummary?n("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"}],ref:"rightFixedFooterWrapper",staticClass:"el-table__fixed-footer-wrapper"},[n("table-footer",{style:{width:e.bodyWidth},attrs:{fixed:"right",border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,store:e.store}})],1):e._e()]):e._e(),e.rightFixedColumns.length>0?n("div",{ref:"rightFixedPatch",staticClass:"el-table__fixed-right-patch",style:{width:e.layout.scrollY?e.layout.gutterWidth+"px":"0",height:e.layout.headerHeight+"px"}}):e._e(),n("div",{directives:[{name:"show",rawName:"v-show",value:e.resizeProxyVisible,expression:"resizeProxyVisible"}],ref:"resizeProxy",staticClass:"el-table__column-resize-proxy"})])},Pi=[];Li._withStripped=!0;var $i=n(16),Fi=n.n($i),ji=n(35),zi=n(38),Bi=n.n(zi),Ri="undefined"!==typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>-1,Vi=function(e,t){e&&e.addEventListener&&e.addEventListener(Ri?"DOMMouseScroll":"mousewheel",(function(e){var n=Bi()(e);t&&t.apply(this,[e,n])}))},Hi={bind:function(e,t){Vi(e,t.value)}},Wi=n(6),qi=n.n(Wi),Ui="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)},Ki=function(e){var t=e.target;while(t&&"HTML"!==t.tagName.toUpperCase()){if("TD"===t.tagName.toUpperCase())return t;t=t.parentNode}return null},Gi=function(e){return null!==e&&"object"===("undefined"===typeof e?"undefined":Ui(e))},Yi=function(e,t,n,i,r){if(!t&&!i&&(!r||Array.isArray(r)&&!r.length))return e;n="string"===typeof n?"descending"===n?-1:1:n&&n<0?-1:1;var o=i?null:function(n,i){return r?(Array.isArray(r)||(r=[r]),r.map((function(t){return"string"===typeof t?Object(y["getValueByPath"])(n,t):t(n,i,e)}))):("$key"!==t&&Gi(n)&&"$value"in n&&(n=n.$value),[Gi(n)?Object(y["getValueByPath"])(n,t):n])},a=function(e,t){if(i)return i(e.value,t.value);for(var n=0,r=e.key.length;n<r;n++){if(e.key[n]<t.key[n])return-1;if(e.key[n]>t.key[n])return 1}return 0};return e.map((function(e,t){return{value:e,index:t,key:o?o(e,t):null}})).sort((function(e,t){var i=a(e,t);return i||(i=e.index-t.index),i*n})).map((function(e){return e.value}))},Xi=function(e,t){var n=null;return e.columns.forEach((function(e){e.id===t&&(n=e)})),n},Zi=function(e,t){for(var n=null,i=0;i<e.columns.length;i++){var r=e.columns[i];if(r.columnKey===t){n=r;break}}return n},Qi=function(e,t){var n=(t.className||"").match(/el-table_[^\s]+/gm);return n?Xi(e,n[0]):null},Ji=function(e,t){if(!e)throw new Error("row is required when get row identity");if("string"===typeof t){if(t.indexOf(".")<0)return e[t];for(var n=t.split("."),i=e,r=0;r<n.length;r++)i=i[n[r]];return i}if("function"===typeof t)return t.call(null,e)},er=function(e,t){var n={};return(e||[]).forEach((function(e,i){n[Ji(e,t)]={row:e,index:i}})),n};function tr(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function nr(e,t){var n={},i=void 0;for(i in e)n[i]=e[i];for(i in t)if(tr(t,i)){var r=t[i];"undefined"!==typeof r&&(n[i]=r)}return n}function ir(e){return void 0!==e&&(e=parseInt(e,10),isNaN(e)&&(e=null)),e}function rr(e){return"undefined"!==typeof e&&(e=ir(e),isNaN(e)&&(e=80)),e}function or(e){return"number"===typeof e?e:"string"===typeof e?/^\d+(?:px)?$/.test(e)?parseInt(e,10):e:null}function ar(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function sr(e,t,n){var i=!1,r=e.indexOf(t),o=-1!==r,a=function(){e.push(t),i=!0},s=function(){e.splice(r,1),i=!0};return"boolean"===typeof n?n&&!o?a():!n&&o&&s():o?s():a(),i}function lr(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"children",i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"hasChildren",r=function(e){return!(Array.isArray(e)&&e.length)};function o(e,a,s){t(e,a,s),a.forEach((function(e){if(e[i])t(e,null,s+1);else{var a=e[n];r(a)||o(e,a,s+1)}}))}e.forEach((function(e){if(e[i])t(e,null,0);else{var a=e[n];r(a)||o(e,a,0)}}))}var cr={data:function(){return{states:{defaultExpandAll:!1,expandRows:[]}}},methods:{updateExpandRows:function(){var e=this.states,t=e.data,n=void 0===t?[]:t,i=e.rowKey,r=e.defaultExpandAll,o=e.expandRows;if(r)this.states.expandRows=n.slice();else if(i){var a=er(o,i);this.states.expandRows=n.reduce((function(e,t){var n=Ji(t,i),r=a[n];return r&&e.push(t),e}),[])}else this.states.expandRows=[]},toggleRowExpansion:function(e,t){var n=sr(this.states.expandRows,e,t);n&&(this.table.$emit("expand-change",e,this.states.expandRows.slice()),this.scheduleLayout())},setExpandRowKeys:function(e){this.assertRowKey();var t=this.states,n=t.data,i=t.rowKey,r=er(n,i);this.states.expandRows=e.reduce((function(e,t){var n=r[t];return n&&e.push(n.row),e}),[])},isRowExpanded:function(e){var t=this.states,n=t.expandRows,i=void 0===n?[]:n,r=t.rowKey;if(r){var o=er(i,r);return!!o[Ji(e,r)]}return-1!==i.indexOf(e)}}},ur={data:function(){return{states:{_currentRowKey:null,currentRow:null}}},methods:{setCurrentRowKey:function(e){this.assertRowKey(),this.states._currentRowKey=e,this.setCurrentRowByKey(e)},restoreCurrentRowKey:function(){this.states._currentRowKey=null},setCurrentRowByKey:function(e){var t=this.states,n=t.data,i=void 0===n?[]:n,r=t.rowKey,o=null;r&&(o=Object(y["arrayFind"])(i,(function(t){return Ji(t,r)===e}))),t.currentRow=o},updateCurrentRow:function(e){var t=this.states,n=this.table,i=t.currentRow;if(e&&e!==i)return t.currentRow=e,void n.$emit("current-change",e,i);!e&&i&&(t.currentRow=null,n.$emit("current-change",null,i))},updateCurrentRowData:function(){var e=this.states,t=this.table,n=e.rowKey,i=e._currentRowKey,r=e.data||[],o=e.currentRow;if(-1===r.indexOf(o)&&o){if(n){var a=Ji(o,n);this.setCurrentRowByKey(a)}else e.currentRow=null;null===e.currentRow&&t.$emit("current-change",null,o)}else i&&(this.setCurrentRowByKey(i),this.restoreCurrentRowKey())}}},dr=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},hr={data:function(){return{states:{expandRowKeys:[],treeData:{},indent:16,lazy:!1,lazyTreeNodeMap:{},lazyColumnIdentifier:"hasChildren",childrenColumnName:"children"}}},computed:{normalizedData:function(){if(!this.states.rowKey)return{};var e=this.states.data||[];return this.normalize(e)},normalizedLazyNode:function(){var e=this.states,t=e.rowKey,n=e.lazyTreeNodeMap,i=e.lazyColumnIdentifier,r=Object.keys(n),o={};return r.length?(r.forEach((function(e){if(n[e].length){var r={children:[]};n[e].forEach((function(e){var n=Ji(e,t);r.children.push(n),e[i]&&!o[n]&&(o[n]={children:[]})})),o[e]=r}})),o):o}},watch:{normalizedData:"updateTreeData",normalizedLazyNode:"updateTreeData"},methods:{normalize:function(e){var t=this.states,n=t.childrenColumnName,i=t.lazyColumnIdentifier,r=t.rowKey,o=t.lazy,a={};return lr(e,(function(e,t,n){var i=Ji(e,r);Array.isArray(t)?a[i]={children:t.map((function(e){return Ji(e,r)})),level:n}:o&&(a[i]={children:[],lazy:!0,level:n})}),n,i),a},updateTreeData:function(){var e=this.normalizedData,t=this.normalizedLazyNode,n=Object.keys(e),i={};if(n.length){var r=this.states,o=r.treeData,a=r.defaultExpandAll,s=r.expandRowKeys,l=r.lazy,c=[],u=function(e,t){var n=a||s&&-1!==s.indexOf(t);return!!(e&&e.expanded||n)};n.forEach((function(t){var n=o[t],r=dr({},e[t]);if(r.expanded=u(n,t),r.lazy){var a=n||{},s=a.loaded,l=void 0!==s&&s,d=a.loading,h=void 0!==d&&d;r.loaded=!!l,r.loading=!!h,c.push(t)}i[t]=r}));var d=Object.keys(t);l&&d.length&&c.length&&d.forEach((function(e){var n=o[e],r=t[e].children;if(-1!==c.indexOf(e)){if(0!==i[e].children.length)throw new Error("[ElTable]children must be an empty array.");i[e].children=r}else{var a=n||{},s=a.loaded,l=void 0!==s&&s,d=a.loading,h=void 0!==d&&d;i[e]={lazy:!0,loaded:!!l,loading:!!h,expanded:u(n,e),children:r,level:""}}}))}this.states.treeData=i,this.updateTableScrollY()},updateTreeExpandKeys:function(e){this.states.expandRowKeys=e,this.updateTreeData()},toggleTreeExpansion:function(e,t){this.assertRowKey();var n=this.states,i=n.rowKey,r=n.treeData,o=Ji(e,i),a=o&&r[o];if(o&&a&&"expanded"in a){var s=a.expanded;t="undefined"===typeof t?!a.expanded:t,r[o].expanded=t,s!==t&&this.table.$emit("expand-change",e,t),this.updateTableScrollY()}},loadOrToggle:function(e){this.assertRowKey();var t=this.states,n=t.lazy,i=t.treeData,r=t.rowKey,o=Ji(e,r),a=i[o];n&&a&&"loaded"in a&&!a.loaded?this.loadData(e,o,a):this.toggleTreeExpansion(e)},loadData:function(e,t,n){var i=this,r=this.table.load,o=this.states,a=o.lazyTreeNodeMap,s=o.treeData;r&&!s[t].loaded&&(s[t].loading=!0,r(e,n,(function(n){if(!Array.isArray(n))throw new Error("[ElTable] data must be an array");s[t].loading=!1,s[t].loaded=!0,s[t].expanded=!0,n.length&&i.$set(a,t,n),i.table.$emit("expand-change",e,!0)})))}}},fr=function(e,t){var n=t.sortingColumn;return n&&"string"!==typeof n.sortable?Yi(e,t.sortProp,t.sortOrder,n.sortMethod,n.sortBy):e},pr=function e(t){var n=[];return t.forEach((function(t){t.children?n.push.apply(n,e(t.children)):n.push(t)})),n},mr=qi.a.extend({data:function(){return{states:{rowKey:null,data:[],isComplex:!1,_columns:[],originColumns:[],columns:[],fixedColumns:[],rightFixedColumns:[],leafColumns:[],fixedLeafColumns:[],rightFixedLeafColumns:[],leafColumnsLength:0,fixedLeafColumnsLength:0,rightFixedLeafColumnsLength:0,isAllSelected:!1,selection:[],reserveSelection:!1,selectOnIndeterminate:!1,selectable:null,filters:{},filteredData:null,sortingColumn:null,sortProp:null,sortOrder:null,hoverRow:null}}},mixins:[cr,ur,hr],methods:{assertRowKey:function(){var e=this.states.rowKey;if(!e)throw new Error("[ElTable] prop row-key is required")},updateColumns:function(){var e=this.states,t=e._columns||[];e.fixedColumns=t.filter((function(e){return!0===e.fixed||"left"===e.fixed})),e.rightFixedColumns=t.filter((function(e){return"right"===e.fixed})),e.fixedColumns.length>0&&t[0]&&"selection"===t[0].type&&!t[0].fixed&&(t[0].fixed=!0,e.fixedColumns.unshift(t[0]));var n=t.filter((function(e){return!e.fixed}));e.originColumns=[].concat(e.fixedColumns).concat(n).concat(e.rightFixedColumns);var i=pr(n),r=pr(e.fixedColumns),o=pr(e.rightFixedColumns);e.leafColumnsLength=i.length,e.fixedLeafColumnsLength=r.length,e.rightFixedLeafColumnsLength=o.length,e.columns=[].concat(r).concat(i).concat(o),e.isComplex=e.fixedColumns.length>0||e.rightFixedColumns.length>0},scheduleLayout:function(e){e&&this.updateColumns(),this.table.debouncedUpdateLayout()},isSelected:function(e){var t=this.states.selection,n=void 0===t?[]:t;return n.indexOf(e)>-1},clearSelection:function(){var e=this.states;e.isAllSelected=!1;var t=e.selection;t.length&&(e.selection=[],this.table.$emit("selection-change",[]))},cleanSelection:function(){var e=this.states,t=e.data,n=e.rowKey,i=e.selection,r=void 0;if(n){r=[];var o=er(i,n),a=er(t,n);for(var s in o)o.hasOwnProperty(s)&&!a[s]&&r.push(o[s].row)}else r=i.filter((function(e){return-1===t.indexOf(e)}));if(r.length){var l=i.filter((function(e){return-1===r.indexOf(e)}));e.selection=l,this.table.$emit("selection-change",l.slice())}},toggleRowSelection:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i=sr(this.states.selection,e,t);if(i){var r=(this.states.selection||[]).slice();n&&this.table.$emit("select",r,e),this.table.$emit("selection-change",r)}},_toggleAllSelection:function(){var e=this.states,t=e.data,n=void 0===t?[]:t,i=e.selection,r=e.selectOnIndeterminate?!e.isAllSelected:!(e.isAllSelected||i.length);e.isAllSelected=r;var o=!1;n.forEach((function(t,n){e.selectable?e.selectable.call(null,t,n)&&sr(i,t,r)&&(o=!0):sr(i,t,r)&&(o=!0)})),o&&this.table.$emit("selection-change",i?i.slice():[]),this.table.$emit("select-all",i)},updateSelectionByRowKey:function(){var e=this.states,t=e.selection,n=e.rowKey,i=e.data,r=er(t,n);i.forEach((function(e){var i=Ji(e,n),o=r[i];o&&(t[o.index]=e)}))},updateAllSelected:function(){var e=this.states,t=e.selection,n=e.rowKey,i=e.selectable,r=e.data||[];if(0!==r.length){var o=void 0;n&&(o=er(t,n));for(var a=function(e){return o?!!o[Ji(e,n)]:-1!==t.indexOf(e)},s=!0,l=0,c=0,u=r.length;c<u;c++){var d=r[c],h=i&&i.call(null,d,c);if(a(d))l++;else if(!i||h){s=!1;break}}0===l&&(s=!1),e.isAllSelected=s}else e.isAllSelected=!1},updateFilters:function(e,t){Array.isArray(e)||(e=[e]);var n=this.states,i={};return e.forEach((function(e){n.filters[e.id]=t,i[e.columnKey||e.id]=t})),i},updateSort:function(e,t,n){this.states.sortingColumn&&this.states.sortingColumn!==e&&(this.states.sortingColumn.order=null),this.states.sortingColumn=e,this.states.sortProp=t,this.states.sortOrder=n},execFilter:function(){var e=this,t=this.states,n=t._data,i=t.filters,r=n;Object.keys(i).forEach((function(n){var i=t.filters[n];if(i&&0!==i.length){var o=Xi(e.states,n);o&&o.filterMethod&&(r=r.filter((function(e){return i.some((function(t){return o.filterMethod.call(null,t,e,o)}))})))}})),t.filteredData=r},execSort:function(){var e=this.states;e.data=fr(e.filteredData,e)},execQuery:function(e){e&&e.filter||this.execFilter(),this.execSort()},clearFilter:function(e){var t=this.states,n=this.table.$refs,i=n.tableHeader,r=n.fixedTableHeader,o=n.rightFixedTableHeader,a={};i&&(a=Ot()(a,i.filterPanels)),r&&(a=Ot()(a,r.filterPanels)),o&&(a=Ot()(a,o.filterPanels));var s=Object.keys(a);if(s.length)if("string"===typeof e&&(e=[e]),Array.isArray(e)){var l=e.map((function(e){return Zi(t,e)}));s.forEach((function(e){var t=l.find((function(t){return t.id===e}));t&&(a[e].filteredValue=[])})),this.commit("filterChange",{column:l,values:[],silent:!0,multi:!0})}else s.forEach((function(e){a[e].filteredValue=[]})),t.filters={},this.commit("filterChange",{column:{},values:[],silent:!0})},clearSort:function(){var e=this.states;e.sortingColumn&&(this.updateSort(null,null,null),this.commit("changeSortCondition",{silent:!0}))},setExpandRowKeysAdapter:function(e){this.setExpandRowKeys(e),this.updateTreeExpandKeys(e)},toggleRowExpansionAdapter:function(e,t){var n=this.states.columns.some((function(e){var t=e.type;return"expand"===t}));n?this.toggleRowExpansion(e,t):this.toggleTreeExpansion(e,t)}}});mr.prototype.mutations={setData:function(e,t){var n=e._data!==t;e._data=t,this.execQuery(),this.updateCurrentRowData(),this.updateExpandRows(),e.reserveSelection?(this.assertRowKey(),this.updateSelectionByRowKey()):n?this.clearSelection():this.cleanSelection(),this.updateAllSelected(),this.updateTableScrollY()},insertColumn:function(e,t,n,i){var r=e._columns;i&&(r=i.children,r||(r=i.children=[])),"undefined"!==typeof n?r.splice(n,0,t):r.push(t),"selection"===t.type&&(e.selectable=t.selectable,e.reserveSelection=t.reserveSelection),this.table.$ready&&(this.updateColumns(),this.scheduleLayout())},removeColumn:function(e,t,n){var i=e._columns;n&&(i=n.children,i||(i=n.children=[])),i&&i.splice(i.indexOf(t),1),this.table.$ready&&(this.updateColumns(),this.scheduleLayout())},sort:function(e,t){var n=t.prop,i=t.order,r=t.init;if(n){var o=Object(y["arrayFind"])(e.columns,(function(e){return e.property===n}));o&&(o.order=i,this.updateSort(o,n,i),this.commit("changeSortCondition",{init:r}))}},changeSortCondition:function(e,t){var n=e.sortingColumn,i=e.sortProp,r=e.sortOrder;null===r&&(e.sortingColumn=null,e.sortProp=null);var o={filter:!0};this.execQuery(o),t&&(t.silent||t.init)||this.table.$emit("sort-change",{column:n,prop:i,order:r}),this.updateTableScrollY()},filterChange:function(e,t){var n=t.column,i=t.values,r=t.silent,o=this.updateFilters(n,i);this.execQuery(),r||this.table.$emit("filter-change",o),this.updateTableScrollY()},toggleAllSelection:function(){this.toggleAllSelection()},rowSelectedChanged:function(e,t){this.toggleRowSelection(t),this.updateAllSelected()},setHoverRow:function(e,t){e.hoverRow=t},setCurrentRow:function(e,t){this.updateCurrentRow(t)}},mr.prototype.commit=function(e){var t=this.mutations;if(!t[e])throw new Error("Action not found: "+e);for(var n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];t[e].apply(this,[this.states].concat(i))},mr.prototype.updateTableScrollY=function(){qi.a.nextTick(this.table.updateScrollY)};var gr=mr;function vr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)throw new Error("Table is required.");var n=new gr;return n.table=e,n.toggleAllSelection=j()(10,n._toggleAllSelection),Object.keys(t).forEach((function(e){n.states[e]=t[e]})),n}function br(e){var t={};return Object.keys(e).forEach((function(n){var i=e[n],r=void 0;"string"===typeof i?r=function(){return this.store.states[i]}:"function"===typeof i?r=function(){return i.call(this,this.store.states)}:console.error("invalid value type"),r&&(t[n]=r)})),t}var yr=n(31),wr=n.n(yr);function xr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _r=function(){function e(t){for(var n in xr(this,e),this.observers=[],this.table=null,this.store=null,this.columns=null,this.fit=!0,this.showHeader=!0,this.height=null,this.scrollX=!1,this.scrollY=!1,this.bodyWidth=null,this.fixedWidth=null,this.rightFixedWidth=null,this.tableHeight=null,this.headerHeight=44,this.appendHeight=0,this.footerHeight=44,this.viewportHeight=null,this.bodyHeight=null,this.fixedBodyHeight=null,this.gutterWidth=wr()(),t)t.hasOwnProperty(n)&&(this[n]=t[n]);if(!this.table)throw new Error("table is required for Table Layout");if(!this.store)throw new Error("store is required for Table Layout")}return e.prototype.updateScrollY=function(){var e=this.height;if(null===e)return!1;var t=this.table.bodyWrapper;if(this.table.$el&&t){var n=t.querySelector(".el-table__body"),i=this.scrollY,r=n.offsetHeight>this.bodyHeight;return this.scrollY=r,i!==r}return!1},e.prototype.setHeight=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"height";if(!qi.a.prototype.$isServer){var i=this.table.$el;if(e=or(e),this.height=e,!i&&(e||0===e))return qi.a.nextTick((function(){return t.setHeight(e,n)}));"number"===typeof e?(i.style[n]=e+"px",this.updateElsHeight()):"string"===typeof e&&(i.style[n]=e,this.updateElsHeight())}},e.prototype.setMaxHeight=function(e){this.setHeight(e,"max-height")},e.prototype.getFlattenColumns=function(){var e=[],t=this.table.columns;return t.forEach((function(t){t.isColumnGroup?e.push.apply(e,t.columns):e.push(t)})),e},e.prototype.updateElsHeight=function(){var e=this;if(!this.table.$ready)return qi.a.nextTick((function(){return e.updateElsHeight()}));var t=this.table.$refs,n=t.headerWrapper,i=t.appendWrapper,r=t.footerWrapper;if(this.appendHeight=i?i.offsetHeight:0,!this.showHeader||n){var o=n?n.querySelector(".el-table__header tr"):null,a=this.headerDisplayNone(o),s=this.headerHeight=this.showHeader?n.offsetHeight:0;if(this.showHeader&&!a&&n.offsetWidth>0&&(this.table.columns||[]).length>0&&s<2)return qi.a.nextTick((function(){return e.updateElsHeight()}));var l=this.tableHeight=this.table.$el.clientHeight,c=this.footerHeight=r?r.offsetHeight:0;null!==this.height&&(this.bodyHeight=l-s-c+(r?1:0)),this.fixedBodyHeight=this.scrollX?this.bodyHeight-this.gutterWidth:this.bodyHeight;var u=!(this.store.states.data&&this.store.states.data.length);this.viewportHeight=this.scrollX?l-(u?0:this.gutterWidth):l,this.updateScrollY(),this.notifyObservers("scrollable")}},e.prototype.headerDisplayNone=function(e){if(!e)return!0;var t=e;while("DIV"!==t.tagName){if("none"===getComputedStyle(t).display)return!0;t=t.parentElement}return!1},e.prototype.updateColumnsWidth=function(){if(!qi.a.prototype.$isServer){var e=this.fit,t=this.table.$el.clientWidth,n=0,i=this.getFlattenColumns(),r=i.filter((function(e){return"number"!==typeof e.width}));if(i.forEach((function(e){"number"===typeof e.width&&e.realWidth&&(e.realWidth=null)})),r.length>0&&e){i.forEach((function(e){n+=e.width||e.minWidth||80}));var o=this.scrollY?this.gutterWidth:0;if(n<=t-o){this.scrollX=!1;var a=t-o-n;if(1===r.length)r[0].realWidth=(r[0].minWidth||80)+a;else{var s=r.reduce((function(e,t){return e+(t.minWidth||80)}),0),l=a/s,c=0;r.forEach((function(e,t){if(0!==t){var n=Math.floor((e.minWidth||80)*l);c+=n,e.realWidth=(e.minWidth||80)+n}})),r[0].realWidth=(r[0].minWidth||80)+a-c}}else this.scrollX=!0,r.forEach((function(e){e.realWidth=e.minWidth}));this.bodyWidth=Math.max(n,t),this.table.resizeState.width=this.bodyWidth}else i.forEach((function(e){e.width||e.minWidth?e.realWidth=e.width||e.minWidth:e.realWidth=80,n+=e.realWidth})),this.scrollX=n>t,this.bodyWidth=n;var u=this.store.states.fixedColumns;if(u.length>0){var d=0;u.forEach((function(e){d+=e.realWidth||e.width})),this.fixedWidth=d}var h=this.store.states.rightFixedColumns;if(h.length>0){var f=0;h.forEach((function(e){f+=e.realWidth||e.width})),this.rightFixedWidth=f}this.notifyObservers("columns")}},e.prototype.addObserver=function(e){this.observers.push(e)},e.prototype.removeObserver=function(e){var t=this.observers.indexOf(e);-1!==t&&this.observers.splice(t,1)},e.prototype.notifyObservers=function(e){var t=this,n=this.observers;n.forEach((function(n){switch(e){case"columns":n.onColumnsChange(t);break;case"scrollable":n.onScrollableChange(t);break;default:throw new Error("Table Layout don't have event "+e+".")}}))},e}(),kr=_r,Cr={created:function(){this.tableLayout.addObserver(this)},destroyed:function(){this.tableLayout.removeObserver(this)},computed:{tableLayout:function(){var e=this.layout;if(!e&&this.table&&(e=this.table.layout),!e)throw new Error("Can not find table layout.");return e}},mounted:function(){this.onColumnsChange(this.tableLayout),this.onScrollableChange(this.tableLayout)},updated:function(){this.__updated__||(this.onColumnsChange(this.tableLayout),this.onScrollableChange(this.tableLayout),this.__updated__=!0)},methods:{onColumnsChange:function(e){var t=this.$el.querySelectorAll("colgroup > col");if(t.length){var n=e.getFlattenColumns(),i={};n.forEach((function(e){i[e.id]=e}));for(var r=0,o=t.length;r<o;r++){var a=t[r],s=a.getAttribute("name"),l=i[s];l&&a.setAttribute("width",l.realWidth||l.width)}}},onScrollableChange:function(e){for(var t=this.$el.querySelectorAll("colgroup > col[name=gutter]"),n=0,i=t.length;n<i;n++){var r=t[n];r.setAttribute("width",e.scrollY?e.gutterWidth:"0")}for(var o=this.$el.querySelectorAll("th.gutter"),a=0,s=o.length;a<s;a++){var l=o[a];l.style.width=e.scrollY?e.gutterWidth+"px":"0",l.style.display=e.scrollY?"":"none"}}}},Sr="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)},Or=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},Tr={name:"ElTableBody",mixins:[Cr],components:{ElCheckbox:Fi.a,ElTooltip:ot.a},props:{store:{required:!0},stripe:Boolean,context:{},rowClassName:[String,Function],rowStyle:[Object,Function],fixed:String,highlight:Boolean},render:function(e){var t=this,n=this.data||[];return e("table",{class:"el-table__body",attrs:{cellspacing:"0",cellpadding:"0",border:"0"}},[e("colgroup",[this.columns.map((function(t){return e("col",{attrs:{name:t.id},key:t.id})}))]),e("tbody",[n.reduce((function(e,n){return e.concat(t.wrappedRowRender(n,e.length))}),[]),e("el-tooltip",{attrs:{effect:this.table.tooltipEffect,placement:"top",content:this.tooltipContent},ref:"tooltip"})])])},computed:Or({table:function(){return this.$parent}},br({data:"data",columns:"columns",treeIndent:"indent",leftFixedLeafCount:"fixedLeafColumnsLength",rightFixedLeafCount:"rightFixedLeafColumnsLength",columnsCount:function(e){return e.columns.length},leftFixedCount:function(e){return e.fixedColumns.length},rightFixedCount:function(e){return e.rightFixedColumns.length},hasExpandColumn:function(e){return e.columns.some((function(e){var t=e.type;return"expand"===t}))}}),{firstDefaultColumnIndex:function(){return Object(y["arrayFindIndex"])(this.columns,(function(e){var t=e.type;return"default"===t}))}}),watch:{"store.states.hoverRow":function(e,t){var n=this;if(this.store.states.isComplex&&!this.$isServer){var i=window.requestAnimationFrame;i||(i=function(e){return setTimeout(e,16)}),i((function(){var i=n.$el.querySelectorAll(".el-table__row"),r=i[t],o=i[e];r&&Object(ze["removeClass"])(r,"hover-row"),o&&Object(ze["addClass"])(o,"hover-row")}))}}},data:function(){return{tooltipContent:""}},created:function(){this.activateTooltip=j()(50,(function(e){return e.handleShowPopper()}))},methods:{getKeyOfRow:function(e,t){var n=this.table.rowKey;return n?Ji(e,n):t},isColumnHidden:function(e){return!0===this.fixed||"left"===this.fixed?e>=this.leftFixedLeafCount:"right"===this.fixed?e<this.columnsCount-this.rightFixedLeafCount:e<this.leftFixedLeafCount||e>=this.columnsCount-this.rightFixedLeafCount},getSpan:function(e,t,n,i){var r=1,o=1,a=this.table.spanMethod;if("function"===typeof a){var s=a({row:e,column:t,rowIndex:n,columnIndex:i});Array.isArray(s)?(r=s[0],o=s[1]):"object"===("undefined"===typeof s?"undefined":Sr(s))&&(r=s.rowspan,o=s.colspan)}return{rowspan:r,colspan:o}},getRowStyle:function(e,t){var n=this.table.rowStyle;return"function"===typeof n?n.call(null,{row:e,rowIndex:t}):n||null},getRowClass:function(e,t){var n=["el-table__row"];this.table.highlightCurrentRow&&e===this.store.states.currentRow&&n.push("current-row"),this.stripe&&t%2===1&&n.push("el-table__row--striped");var i=this.table.rowClassName;return"string"===typeof i?n.push(i):"function"===typeof i&&n.push(i.call(null,{row:e,rowIndex:t})),this.store.states.expandRows.indexOf(e)>-1&&n.push("expanded"),n},getCellStyle:function(e,t,n,i){var r=this.table.cellStyle;return"function"===typeof r?r.call(null,{rowIndex:e,columnIndex:t,row:n,column:i}):r},getCellClass:function(e,t,n,i){var r=[i.id,i.align,i.className];this.isColumnHidden(t)&&r.push("is-hidden");var o=this.table.cellClassName;return"string"===typeof o?r.push(o):"function"===typeof o&&r.push(o.call(null,{rowIndex:e,columnIndex:t,row:n,column:i})),r.join(" ")},getColspanRealWidth:function(e,t,n){if(t<1)return e[n].realWidth;var i=e.map((function(e){var t=e.realWidth;return t})).slice(n,n+t);return i.reduce((function(e,t){return e+t}),-1)},handleCellMouseEnter:function(e,t){var n=this.table,i=Ki(e);if(i){var r=Qi(n,i),o=n.hoverState={cell:i,column:r,row:t};n.$emit("cell-mouse-enter",o.row,o.column,o.cell,e)}var a=e.target.querySelector(".cell");if(Object(ze["hasClass"])(a,"el-tooltip")&&a.childNodes.length){var s=document.createRange();s.setStart(a,0),s.setEnd(a,a.childNodes.length);var l=s.getBoundingClientRect().width,c=(parseInt(Object(ze["getStyle"])(a,"paddingLeft"),10)||0)+(parseInt(Object(ze["getStyle"])(a,"paddingRight"),10)||0);if((l+c>a.offsetWidth||a.scrollWidth>a.offsetWidth)&&this.$refs.tooltip){var u=this.$refs.tooltip;this.tooltipContent=i.innerText||i.textContent,u.referenceElm=i,u.$refs.popper&&(u.$refs.popper.style.display="none"),u.doDestroy(),u.setExpectedState(!0),this.activateTooltip(u)}}},handleCellMouseLeave:function(e){var t=this.$refs.tooltip;t&&(t.setExpectedState(!1),t.handleClosePopper());var n=Ki(e);if(n){var i=this.table.hoverState||{};this.table.$emit("cell-mouse-leave",i.row,i.column,i.cell,e)}},handleMouseEnter:j()(30,(function(e){this.store.commit("setHoverRow",e)})),handleMouseLeave:j()(30,(function(){this.store.commit("setHoverRow",null)})),handleContextMenu:function(e,t){this.handleEvent(e,t,"contextmenu")},handleDoubleClick:function(e,t){this.handleEvent(e,t,"dblclick")},handleClick:function(e,t){this.store.commit("setCurrentRow",t),this.handleEvent(e,t,"click")},handleEvent:function(e,t,n){var i=this.table,r=Ki(e),o=void 0;r&&(o=Qi(i,r),o&&i.$emit("cell-"+n,t,o,r,e)),i.$emit("row-"+n,t,o,e)},rowRender:function(e,t,n){var i=this,r=this.$createElement,o=this.treeIndent,a=this.columns,s=this.firstDefaultColumnIndex,l=a.map((function(e,t){return i.isColumnHidden(t)})),c=this.getRowClass(e,t),u=!0;n&&(c.push("el-table__row--level-"+n.level),u=n.display);var d=u?null:{display:"none"};return r("tr",{style:[d,this.getRowStyle(e,t)],class:c,key:this.getKeyOfRow(e,t),on:{dblclick:function(t){return i.handleDoubleClick(t,e)},click:function(t){return i.handleClick(t,e)},contextmenu:function(t){return i.handleContextMenu(t,e)},mouseenter:function(e){return i.handleMouseEnter(t)},mouseleave:this.handleMouseLeave}},[a.map((function(c,u){var d=i.getSpan(e,c,t,u),h=d.rowspan,f=d.colspan;if(!h||!f)return null;var p=Or({},c);p.realWidth=i.getColspanRealWidth(a,f,u);var m={store:i.store,_self:i.context||i.table.$vnode.context,column:p,row:e,$index:t};return u===s&&n&&(m.treeNode={indent:n.level*o,level:n.level},"boolean"===typeof n.expanded&&(m.treeNode.expanded=n.expanded,"loading"in n&&(m.treeNode.loading=n.loading),"noLazyChildren"in n&&(m.treeNode.noLazyChildren=n.noLazyChildren))),r("td",{style:i.getCellStyle(t,u,e,c),class:i.getCellClass(t,u,e,c),attrs:{rowspan:h,colspan:f},on:{mouseenter:function(t){return i.handleCellMouseEnter(t,e)},mouseleave:i.handleCellMouseLeave}},[c.renderCell.call(i._renderProxy,i.$createElement,m,l[u])])}))])},wrappedRowRender:function(e,t){var n=this,i=this.$createElement,r=this.store,o=r.isRowExpanded,a=r.assertRowKey,s=r.states,l=s.treeData,c=s.lazyTreeNodeMap,u=s.childrenColumnName,d=s.rowKey;if(this.hasExpandColumn&&o(e)){var h=this.table.renderExpanded,f=this.rowRender(e,t);return h?[[f,i("tr",{key:"expanded-row__"+f.key},[i("td",{attrs:{colspan:this.columnsCount},class:"el-table__expanded-cell"},[h(this.$createElement,{row:e,$index:t,store:this.store})])])]]:(console.error("[Element Error]renderExpanded is required."),f)}if(Object.keys(l).length){a();var p=Ji(e,d),m=l[p],g=null;m&&(g={expanded:m.expanded,level:m.level,display:!0},"boolean"===typeof m.lazy&&("boolean"===typeof m.loaded&&m.loaded&&(g.noLazyChildren=!(m.children&&m.children.length)),g.loading=m.loading));var v=[this.rowRender(e,t,g)];if(m){var b=0,y=function e(i,r){i&&i.length&&r&&i.forEach((function(i){var o={display:r.display&&r.expanded,level:r.level+1},a=Ji(i,d);if(void 0===a||null===a)throw new Error("for nested data item, row-key is required.");if(m=Or({},l[a]),m&&(o.expanded=m.expanded,m.level=m.level||o.level,m.display=!(!m.expanded||!o.display),"boolean"===typeof m.lazy&&("boolean"===typeof m.loaded&&m.loaded&&(o.noLazyChildren=!(m.children&&m.children.length)),o.loading=m.loading)),b++,v.push(n.rowRender(i,t+b,o)),m){var s=c[a]||i[u];e(s,m)}}))};m.display=!0;var w=c[p]||e[u];y(w,m)}return v}return this.rowRender(e,t)}}},Er=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"}},[e.multiple?n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleOutsideClick,expression:"handleOutsideClick"},{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-table-filter"},[n("div",{staticClass:"el-table-filter__content"},[n("el-scrollbar",{attrs:{"wrap-class":"el-table-filter__wrap"}},[n("el-checkbox-group",{staticClass:"el-table-filter__checkbox-group",model:{value:e.filteredValue,callback:function(t){e.filteredValue=t},expression:"filteredValue"}},e._l(e.filters,(function(t){return n("el-checkbox",{key:t.value,attrs:{label:t.value}},[e._v(e._s(t.text))])})),1)],1)],1),n("div",{staticClass:"el-table-filter__bottom"},[n("button",{class:{"is-disabled":0===e.filteredValue.length},attrs:{disabled:0===e.filteredValue.length},on:{click:e.handleConfirm}},[e._v(e._s(e.t("el.table.confirmFilter")))]),n("button",{on:{click:e.handleReset}},[e._v(e._s(e.t("el.table.resetFilter")))])])]):n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleOutsideClick,expression:"handleOutsideClick"},{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-table-filter"},[n("ul",{staticClass:"el-table-filter__list"},[n("li",{staticClass:"el-table-filter__list-item",class:{"is-active":void 0===e.filterValue||null===e.filterValue},on:{click:function(t){e.handleSelect(null)}}},[e._v(e._s(e.t("el.table.clearFilter")))]),e._l(e.filters,(function(t){return n("li",{key:t.value,staticClass:"el-table-filter__list-item",class:{"is-active":e.isActive(t)},attrs:{label:t.value},on:{click:function(n){e.handleSelect(t.value)}}},[e._v(e._s(t.text))])}))],2)])])},Dr=[];Er._withStripped=!0;var Mr=[];!qi.a.prototype.$isServer&&document.addEventListener("click",(function(e){Mr.forEach((function(t){var n=e.target;t&&t.$el&&(n===t.$el||t.$el.contains(n)||t.handleOutsideClick&&t.handleOutsideClick(e))}))}));var Ar={open:function(e){e&&Mr.push(e)},close:function(e){var t=Mr.indexOf(e);-1!==t&&Mr.splice(e,1)}},Nr=n(32),Ir=n.n(Nr),Lr={name:"ElTableFilterPanel",mixins:[W.a,b.a],directives:{Clickoutside:B.a},components:{ElCheckbox:Fi.a,ElCheckboxGroup:Ir.a,ElScrollbar:U.a},props:{placement:{type:String,default:"bottom-end"}},methods:{isActive:function(e){return e.value===this.filterValue},handleOutsideClick:function(){var e=this;setTimeout((function(){e.showPopper=!1}),16)},handleConfirm:function(){this.confirmFilter(this.filteredValue),this.handleOutsideClick()},handleReset:function(){this.filteredValue=[],this.confirmFilter(this.filteredValue),this.handleOutsideClick()},handleSelect:function(e){this.filterValue=e,"undefined"!==typeof e&&null!==e?this.confirmFilter(this.filteredValue):this.confirmFilter([]),this.handleOutsideClick()},confirmFilter:function(e){this.table.store.commit("filterChange",{column:this.column,values:e}),this.table.store.updateAllSelected()}},data:function(){return{table:null,cell:null,column:null}},computed:{filters:function(){return this.column&&this.column.filters},filterValue:{get:function(){return(this.column.filteredValue||[])[0]},set:function(e){this.filteredValue&&("undefined"!==typeof e&&null!==e?this.filteredValue.splice(0,1,e):this.filteredValue.splice(0,1))}},filteredValue:{get:function(){return this.column&&this.column.filteredValue||[]},set:function(e){this.column&&(this.column.filteredValue=e)}},multiple:function(){return!this.column||this.column.filterMultiple}},mounted:function(){var e=this;this.popperElm=this.$el,this.referenceElm=this.cell,this.table.bodyWrapper.addEventListener("scroll",(function(){e.updatePopper()})),this.$watch("showPopper",(function(t){e.column&&(e.column.filterOpened=t),t?Ar.open(e):Ar.close(e)}))},watch:{showPopper:function(e){!0===e&&parseInt(this.popperJS._popper.style.zIndex,10)<C["PopupManager"].zIndex&&(this.popperJS._popper.style.zIndex=C["PopupManager"].nextZIndex())}}},Pr=Lr,$r=l(Pr,Er,Dr,!1,null,null,null);$r.options.__file="packages/table/src/filter-panel.vue";var Fr=$r.exports,jr=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},zr=function e(t){var n=[];return t.forEach((function(t){t.children?(n.push(t),n.push.apply(n,e(t.children))):n.push(t)})),n},Br=function(e){var t=1,n=function e(n,i){if(i&&(n.level=i.level+1,t<n.level&&(t=n.level)),n.children){var r=0;n.children.forEach((function(t){e(t,n),r+=t.colSpan})),n.colSpan=r}else n.colSpan=1};e.forEach((function(e){e.level=1,n(e)}));for(var i=[],r=0;r<t;r++)i.push([]);var o=zr(e);return o.forEach((function(e){e.children?e.rowSpan=1:e.rowSpan=t-e.level+1,i[e.level-1].push(e)})),i},Rr={name:"ElTableHeader",mixins:[Cr],render:function(e){var t=this,n=this.store.states.originColumns,i=Br(n,this.columns),r=i.length>1;return r&&(this.$parent.isGroup=!0),e("table",{class:"el-table__header",attrs:{cellspacing:"0",cellpadding:"0",border:"0"}},[e("colgroup",[this.columns.map((function(t){return e("col",{attrs:{name:t.id},key:t.id})})),this.hasGutter?e("col",{attrs:{name:"gutter"}}):""]),e("thead",{class:[{"is-group":r,"has-gutter":this.hasGutter}]},[this._l(i,(function(n,i){return e("tr",{style:t.getHeaderRowStyle(i),class:t.getHeaderRowClass(i)},[n.map((function(r,o){return e("th",{attrs:{colspan:r.colSpan,rowspan:r.rowSpan},on:{mousemove:function(e){return t.handleMouseMove(e,r)},mouseout:t.handleMouseOut,mousedown:function(e){return t.handleMouseDown(e,r)},click:function(e){return t.handleHeaderClick(e,r)},contextmenu:function(e){return t.handleHeaderContextMenu(e,r)}},style:t.getHeaderCellStyle(i,o,n,r),class:t.getHeaderCellClass(i,o,n,r),key:r.id},[e("div",{class:["cell",r.filteredValue&&r.filteredValue.length>0?"highlight":"",r.labelClassName]},[r.renderHeader?r.renderHeader.call(t._renderProxy,e,{column:r,$index:o,store:t.store,_self:t.$parent.$vnode.context}):r.label,r.sortable?e("span",{class:"caret-wrapper",on:{click:function(e){return t.handleSortClick(e,r)}}},[e("i",{class:"sort-caret ascending",on:{click:function(e){return t.handleSortClick(e,r,"ascending")}}}),e("i",{class:"sort-caret descending",on:{click:function(e){return t.handleSortClick(e,r,"descending")}}})]):"",r.filterable?e("span",{class:"el-table__column-filter-trigger",on:{click:function(e){return t.handleFilterClick(e,r)}}},[e("i",{class:["el-icon-arrow-down",r.filterOpened?"el-icon-arrow-up":""]})]):""])])})),t.hasGutter?e("th",{class:"gutter"}):""])}))])])},props:{fixed:String,store:{required:!0},border:Boolean,defaultSort:{type:Object,default:function(){return{prop:"",order:""}}}},components:{ElCheckbox:Fi.a},computed:jr({table:function(){return this.$parent},hasGutter:function(){return!this.fixed&&this.tableLayout.gutterWidth}},br({columns:"columns",isAllSelected:"isAllSelected",leftFixedLeafCount:"fixedLeafColumnsLength",rightFixedLeafCount:"rightFixedLeafColumnsLength",columnsCount:function(e){return e.columns.length},leftFixedCount:function(e){return e.fixedColumns.length},rightFixedCount:function(e){return e.rightFixedColumns.length}})),created:function(){this.filterPanels={}},mounted:function(){var e=this;this.$nextTick((function(){var t=e.defaultSort,n=t.prop,i=t.order,r=!0;e.store.commit("sort",{prop:n,order:i,init:r})}))},beforeDestroy:function(){var e=this.filterPanels;for(var t in e)e.hasOwnProperty(t)&&e[t]&&e[t].$destroy(!0)},methods:{isCellHidden:function(e,t){for(var n=0,i=0;i<e;i++)n+=t[i].colSpan;var r=n+t[e].colSpan-1;return!0===this.fixed||"left"===this.fixed?r>=this.leftFixedLeafCount:"right"===this.fixed?n<this.columnsCount-this.rightFixedLeafCount:r<this.leftFixedLeafCount||n>=this.columnsCount-this.rightFixedLeafCount},getHeaderRowStyle:function(e){var t=this.table.headerRowStyle;return"function"===typeof t?t.call(null,{rowIndex:e}):t},getHeaderRowClass:function(e){var t=[],n=this.table.headerRowClassName;return"string"===typeof n?t.push(n):"function"===typeof n&&t.push(n.call(null,{rowIndex:e})),t.join(" ")},getHeaderCellStyle:function(e,t,n,i){var r=this.table.headerCellStyle;return"function"===typeof r?r.call(null,{rowIndex:e,columnIndex:t,row:n,column:i}):r},getHeaderCellClass:function(e,t,n,i){var r=[i.id,i.order,i.headerAlign,i.className,i.labelClassName];0===e&&this.isCellHidden(t,n)&&r.push("is-hidden"),i.children||r.push("is-leaf"),i.sortable&&r.push("is-sortable");var o=this.table.headerCellClassName;return"string"===typeof o?r.push(o):"function"===typeof o&&r.push(o.call(null,{rowIndex:e,columnIndex:t,row:n,column:i})),r.join(" ")},toggleAllSelection:function(e){e.stopPropagation(),this.store.commit("toggleAllSelection")},handleFilterClick:function(e,t){e.stopPropagation();var n=e.target,i="TH"===n.tagName?n:n.parentNode;if(!Object(ze["hasClass"])(i,"noclick")){i=i.querySelector(".el-table__column-filter-trigger")||i;var r=this.$parent,o=this.filterPanels[t.id];o&&t.filterOpened?o.showPopper=!1:(o||(o=new qi.a(Fr),this.filterPanels[t.id]=o,t.filterPlacement&&(o.placement=t.filterPlacement),o.table=r,o.cell=i,o.column=t,!this.$isServer&&o.$mount(document.createElement("div"))),setTimeout((function(){o.showPopper=!0}),16))}},handleHeaderClick:function(e,t){!t.filters&&t.sortable?this.handleSortClick(e,t):t.filterable&&!t.sortable&&this.handleFilterClick(e,t),this.$parent.$emit("header-click",t,e)},handleHeaderContextMenu:function(e,t){this.$parent.$emit("header-contextmenu",t,e)},handleMouseDown:function(e,t){var n=this;if(!this.$isServer&&!(t.children&&t.children.length>0)&&this.draggingColumn&&this.border){this.dragging=!0,this.$parent.resizeProxyVisible=!0;var i=this.$parent,r=i.$el,o=r.getBoundingClientRect().left,a=this.$el.querySelector("th."+t.id),s=a.getBoundingClientRect(),l=s.left-o+30;Object(ze["addClass"])(a,"noclick"),this.dragState={startMouseLeft:e.clientX,startLeft:s.right-o,startColumnLeft:s.left-o,tableLeft:o};var c=i.$refs.resizeProxy;c.style.left=this.dragState.startLeft+"px",document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};var u=function(e){var t=e.clientX-n.dragState.startMouseLeft,i=n.dragState.startLeft+t;c.style.left=Math.max(l,i)+"px"},d=function r(){if(n.dragging){var o=n.dragState,s=o.startColumnLeft,l=o.startLeft,d=parseInt(c.style.left,10),h=d-s;t.width=t.realWidth=h,i.$emit("header-dragend",t.width,l-s,t,e),n.store.scheduleLayout(),document.body.style.cursor="",n.dragging=!1,n.draggingColumn=null,n.dragState={},i.resizeProxyVisible=!1}document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",r),document.onselectstart=null,document.ondragstart=null,setTimeout((function(){Object(ze["removeClass"])(a,"noclick")}),0)};document.addEventListener("mousemove",u),document.addEventListener("mouseup",d)}},handleMouseMove:function(e,t){if(!(t.children&&t.children.length>0)){var n=e.target;while(n&&"TH"!==n.tagName)n=n.parentNode;if(t&&t.resizable&&!this.dragging&&this.border){var i=n.getBoundingClientRect(),r=document.body.style;i.width>12&&i.right-e.pageX<8?(r.cursor="col-resize",Object(ze["hasClass"])(n,"is-sortable")&&(n.style.cursor="col-resize"),this.draggingColumn=t):this.dragging||(r.cursor="",Object(ze["hasClass"])(n,"is-sortable")&&(n.style.cursor="pointer"),this.draggingColumn=null)}}},handleMouseOut:function(){this.$isServer||(document.body.style.cursor="")},toggleOrder:function(e){var t=e.order,n=e.sortOrders;if(""===t)return n[0];var i=n.indexOf(t||null);return n[i>n.length-2?0:i+1]},handleSortClick:function(e,t,n){e.stopPropagation();var i=t.order===n?null:n||this.toggleOrder(t),r=e.target;while(r&&"TH"!==r.tagName)r=r.parentNode;if(r&&"TH"===r.tagName&&Object(ze["hasClass"])(r,"noclick"))Object(ze["removeClass"])(r,"noclick");else if(t.sortable){var o=this.store.states,a=o.sortProp,s=void 0,l=o.sortingColumn;(l!==t||l===t&&null===l.order)&&(l&&(l.order=null),o.sortingColumn=t,a=t.property),s=t.order=i||null,o.sortProp=a,o.sortOrder=s,this.store.commit("changeSortCondition")}}},data:function(){return{draggingColumn:null,dragging:!1,dragState:{}}}},Vr=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},Hr={name:"ElTableFooter",mixins:[Cr],render:function(e){var t=this,n=[];return this.summaryMethod?n=this.summaryMethod({columns:this.columns,data:this.store.states.data}):this.columns.forEach((function(e,i){if(0!==i){var r=t.store.states.data.map((function(t){return Number(t[e.property])})),o=[],a=!0;r.forEach((function(e){if(!isNaN(e)){a=!1;var t=(""+e).split(".")[1];o.push(t?t.length:0)}}));var s=Math.max.apply(null,o);n[i]=a?"":r.reduce((function(e,t){var n=Number(t);return isNaN(n)?e:parseFloat((e+t).toFixed(Math.min(s,20)))}),0)}else n[i]=t.sumText})),e("table",{class:"el-table__footer",attrs:{cellspacing:"0",cellpadding:"0",border:"0"}},[e("colgroup",[this.columns.map((function(t){return e("col",{attrs:{name:t.id},key:t.id})})),this.hasGutter?e("col",{attrs:{name:"gutter"}}):""]),e("tbody",{class:[{"has-gutter":this.hasGutter}]},[e("tr",[this.columns.map((function(i,r){return e("td",{key:r,attrs:{colspan:i.colSpan,rowspan:i.rowSpan},class:t.getRowClasses(i,r)},[e("div",{class:["cell",i.labelClassName]},[n[r]])])})),this.hasGutter?e("th",{class:"gutter"}):""])])])},props:{fixed:String,store:{required:!0},summaryMethod:Function,sumText:String,border:Boolean,defaultSort:{type:Object,default:function(){return{prop:"",order:""}}}},computed:Vr({table:function(){return this.$parent},hasGutter:function(){return!this.fixed&&this.tableLayout.gutterWidth}},br({columns:"columns",isAllSelected:"isAllSelected",leftFixedLeafCount:"fixedLeafColumnsLength",rightFixedLeafCount:"rightFixedLeafColumnsLength",columnsCount:function(e){return e.columns.length},leftFixedCount:function(e){return e.fixedColumns.length},rightFixedCount:function(e){return e.rightFixedColumns.length}})),methods:{isCellHidden:function(e,t,n){if(!0===this.fixed||"left"===this.fixed)return e>=this.leftFixedLeafCount;if("right"===this.fixed){for(var i=0,r=0;r<e;r++)i+=t[r].colSpan;return i<this.columnsCount-this.rightFixedLeafCount}return!(this.fixed||!n.fixed)||e<this.leftFixedCount||e>=this.columnsCount-this.rightFixedCount},getRowClasses:function(e,t){var n=[e.id,e.align,e.labelClassName];return e.className&&n.push(e.className),this.isCellHidden(t,this.columns,e)&&n.push("is-hidden"),e.children||n.push("is-leaf"),n}}},Wr=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},qr=1,Ur={name:"ElTable",mixins:[b.a,T.a],directives:{Mousewheel:Hi},props:{data:{type:Array,default:function(){return[]}},size:String,width:[String,Number],height:[String,Number],maxHeight:[String,Number],fit:{type:Boolean,default:!0},stripe:Boolean,border:Boolean,rowKey:[String,Function],context:{},showHeader:{type:Boolean,default:!0},showSummary:Boolean,sumText:String,summaryMethod:Function,rowClassName:[String,Function],rowStyle:[Object,Function],cellClassName:[String,Function],cellStyle:[Object,Function],headerRowClassName:[String,Function],headerRowStyle:[Object,Function],headerCellClassName:[String,Function],headerCellStyle:[Object,Function],highlightCurrentRow:Boolean,currentRowKey:[String,Number],emptyText:String,expandRowKeys:Array,defaultExpandAll:Boolean,defaultSort:Object,tooltipEffect:String,spanMethod:Function,selectOnIndeterminate:{type:Boolean,default:!0},indent:{type:Number,default:16},treeProps:{type:Object,default:function(){return{hasChildren:"hasChildren",children:"children"}}},lazy:Boolean,load:Function},components:{TableHeader:Rr,TableFooter:Hr,TableBody:Tr,ElCheckbox:Fi.a},methods:{getMigratingConfig:function(){return{events:{expand:"expand is renamed to expand-change"}}},setCurrentRow:function(e){this.store.commit("setCurrentRow",e)},toggleRowSelection:function(e,t){this.store.toggleRowSelection(e,t,!1),this.store.updateAllSelected()},toggleRowExpansion:function(e,t){this.store.toggleRowExpansionAdapter(e,t)},clearSelection:function(){this.store.clearSelection()},clearFilter:function(e){this.store.clearFilter(e)},clearSort:function(){this.store.clearSort()},handleMouseLeave:function(){this.store.commit("setHoverRow",null),this.hoverState&&(this.hoverState=null)},updateScrollY:function(){var e=this.layout.updateScrollY();e&&(this.layout.notifyObservers("scrollable"),this.layout.updateColumnsWidth())},handleFixedMousewheel:function(e,t){var n=this.bodyWrapper;if(Math.abs(t.spinY)>0){var i=n.scrollTop;t.pixelY<0&&0!==i&&e.preventDefault(),t.pixelY>0&&n.scrollHeight-n.clientHeight>i&&e.preventDefault(),n.scrollTop+=Math.ceil(t.pixelY/5)}else n.scrollLeft+=Math.ceil(t.pixelX/5)},handleHeaderFooterMousewheel:function(e,t){var n=t.pixelX,i=t.pixelY;Math.abs(n)>=Math.abs(i)&&(this.bodyWrapper.scrollLeft+=t.pixelX/5)},syncPostion:Object(ji["throttle"])(20,(function(){var e=this.bodyWrapper,t=e.scrollLeft,n=e.scrollTop,i=e.offsetWidth,r=e.scrollWidth,o=this.$refs,a=o.headerWrapper,s=o.footerWrapper,l=o.fixedBodyWrapper,c=o.rightFixedBodyWrapper;a&&(a.scrollLeft=t),s&&(s.scrollLeft=t),l&&(l.scrollTop=n),c&&(c.scrollTop=n);var u=r-i-1;this.scrollPosition=t>=u?"right":0===t?"left":"middle"})),bindEvents:function(){this.bodyWrapper.addEventListener("scroll",this.syncPostion,{passive:!0}),this.fit&&Object(ti["addResizeListener"])(this.$el,this.resizeListener)},unbindEvents:function(){this.bodyWrapper.removeEventListener("scroll",this.syncPostion,{passive:!0}),this.fit&&Object(ti["removeResizeListener"])(this.$el,this.resizeListener)},resizeListener:function(){if(this.$ready){var e=!1,t=this.$el,n=this.resizeState,i=n.width,r=n.height,o=t.offsetWidth;i!==o&&(e=!0);var a=t.offsetHeight;(this.height||this.shouldUpdateHeight)&&r!==a&&(e=!0),e&&(this.resizeState.width=o,this.resizeState.height=a,this.doLayout())}},doLayout:function(){this.shouldUpdateHeight&&this.layout.updateElsHeight(),this.layout.updateColumnsWidth()},sort:function(e,t){this.store.commit("sort",{prop:e,order:t})},toggleAllSelection:function(){this.store.commit("toggleAllSelection")}},computed:Wr({tableSize:function(){return this.size||(this.$ELEMENT||{}).size},bodyWrapper:function(){return this.$refs.bodyWrapper},shouldUpdateHeight:function(){return this.height||this.maxHeight||this.fixedColumns.length>0||this.rightFixedColumns.length>0},bodyWidth:function(){var e=this.layout,t=e.bodyWidth,n=e.scrollY,i=e.gutterWidth;return t?t-(n?i:0)+"px":""},bodyHeight:function(){var e=this.layout,t=e.headerHeight,n=void 0===t?0:t,i=e.bodyHeight,r=e.footerHeight,o=void 0===r?0:r;if(this.height)return{height:i?i+"px":""};if(this.maxHeight){var a=or(this.maxHeight);if("number"===typeof a)return{"max-height":a-o-(this.showHeader?n:0)+"px"}}return{}},fixedBodyHeight:function(){if(this.height)return{height:this.layout.fixedBodyHeight?this.layout.fixedBodyHeight+"px":""};if(this.maxHeight){var e=or(this.maxHeight);if("number"===typeof e)return e=this.layout.scrollX?e-this.layout.gutterWidth:e,this.showHeader&&(e-=this.layout.headerHeight),e-=this.layout.footerHeight,{"max-height":e+"px"}}return{}},fixedHeight:function(){return this.maxHeight?this.showSummary?{bottom:0}:{bottom:this.layout.scrollX&&this.data.length?this.layout.gutterWidth+"px":""}:this.showSummary?{height:this.layout.tableHeight?this.layout.tableHeight+"px":""}:{height:this.layout.viewportHeight?this.layout.viewportHeight+"px":""}},emptyBlockStyle:function(){if(this.data&&this.data.length)return null;var e="100%";return this.layout.appendHeight&&(e="calc(100% - "+this.layout.appendHeight+"px)"),{width:this.bodyWidth,height:e}}},br({selection:"selection",columns:"columns",tableData:"data",fixedColumns:"fixedColumns",rightFixedColumns:"rightFixedColumns"})),watch:{height:{immediate:!0,handler:function(e){this.layout.setHeight(e)}},maxHeight:{immediate:!0,handler:function(e){this.layout.setMaxHeight(e)}},currentRowKey:{immediate:!0,handler:function(e){this.rowKey&&this.store.setCurrentRowKey(e)}},data:{immediate:!0,handler:function(e){this.store.commit("setData",e)}},expandRowKeys:{immediate:!0,handler:function(e){e&&this.store.setExpandRowKeysAdapter(e)}}},created:function(){var e=this;this.tableId="el-table_"+qr++,this.debouncedUpdateLayout=Object(ji["debounce"])(50,(function(){return e.doLayout()}))},mounted:function(){var e=this;this.bindEvents(),this.store.updateColumns(),this.doLayout(),this.resizeState={width:this.$el.offsetWidth,height:this.$el.offsetHeight},this.store.states.columns.forEach((function(t){t.filteredValue&&t.filteredValue.length&&e.store.commit("filterChange",{column:t,values:t.filteredValue,silent:!0})})),this.$ready=!0},destroyed:function(){this.unbindEvents()},data:function(){var e=this.treeProps,t=e.hasChildren,n=void 0===t?"hasChildren":t,i=e.children,r=void 0===i?"children":i;this.store=vr(this,{rowKey:this.rowKey,defaultExpandAll:this.defaultExpandAll,selectOnIndeterminate:this.selectOnIndeterminate,indent:this.indent,lazy:this.lazy,lazyColumnIdentifier:n,childrenColumnName:r});var o=new kr({store:this.store,table:this,fit:this.fit,showHeader:this.showHeader});return{layout:o,isHidden:!1,renderExpanded:null,resizeProxyVisible:!1,resizeState:{width:null,height:null},isGroup:!1,scrollPosition:"left"}}},Kr=Ur,Gr=l(Kr,Li,Pi,!1,null,null,null);Gr.options.__file="packages/table/src/table.vue";var Yr=Gr.exports;Yr.install=function(e){e.component(Yr.name,Yr)};var Xr=Yr,Zr={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:"",className:"el-table-column--selection"},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},Qr={selection:{renderHeader:function(e,t){var n=t.store;return e("el-checkbox",{attrs:{disabled:n.states.data&&0===n.states.data.length,indeterminate:n.states.selection.length>0&&!this.isAllSelected,value:this.isAllSelected},nativeOn:{click:this.toggleAllSelection}})},renderCell:function(e,t){var n=t.row,i=t.column,r=t.store,o=t.$index;return e("el-checkbox",{nativeOn:{click:function(e){return e.stopPropagation()}},attrs:{value:r.isSelected(n),disabled:!!i.selectable&&!i.selectable.call(null,n,o)},on:{input:function(){r.commit("rowSelectedChanged",n)}}})},sortable:!1,resizable:!1},index:{renderHeader:function(e,t){var n=t.column;return n.label||"#"},renderCell:function(e,t){var n=t.$index,i=t.column,r=n+1,o=i.index;return"number"===typeof o?r=n+o:"function"===typeof o&&(r=o(n)),e("div",[r])},sortable:!1},expand:{renderHeader:function(e,t){var n=t.column;return n.label||""},renderCell:function(e,t){var n=t.row,i=t.store,r=["el-table__expand-icon"];i.states.expandRows.indexOf(n)>-1&&r.push("el-table__expand-icon--expanded");var o=function(e){e.stopPropagation(),i.toggleRowExpansion(n)};return e("div",{class:r,on:{click:o}},[e("i",{class:"el-icon el-icon-arrow-right"})])},sortable:!1,resizable:!1,className:"el-table__expand-column"}};function Jr(e,t){var n=t.row,i=t.column,r=t.$index,o=i.property,a=o&&Object(y["getPropByPath"])(n,o).v;return i&&i.formatter?i.formatter(n,i,a,r):a}function eo(e,t){var n=t.row,i=t.treeNode,r=t.store;if(!i)return null;var o=[],a=function(e){e.stopPropagation(),r.loadOrToggle(n)};if(i.indent&&o.push(e("span",{class:"el-table__indent",style:{"padding-left":i.indent+"px"}})),"boolean"!==typeof i.expanded||i.noLazyChildren)o.push(e("span",{class:"el-table__placeholder"}));else{var s=["el-table__expand-icon",i.expanded?"el-table__expand-icon--expanded":""],l=["el-icon-arrow-right"];i.loading&&(l=["el-icon-loading"]),o.push(e("div",{class:s,on:{click:a}},[e("i",{class:l})]))}return o}var to=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},no=1,io={name:"ElTableColumn",props:{type:{type:String,default:"default"},label:String,className:String,labelClassName:String,property:String,prop:String,width:{},minWidth:{},renderHeader:Function,sortable:{type:[Boolean,String],default:!1},sortMethod:Function,sortBy:[String,Function,Array],resizable:{type:Boolean,default:!0},columnKey:String,align:String,headerAlign:String,showTooltipWhenOverflow:Boolean,showOverflowTooltip:Boolean,fixed:[Boolean,String],formatter:Function,selectable:Function,reserveSelection:Boolean,filterMethod:Function,filteredValue:Array,filters:Array,filterPlacement:String,filterMultiple:{type:Boolean,default:!0},index:[Number,Function],sortOrders:{type:Array,default:function(){return["ascending","descending",null]},validator:function(e){return e.every((function(e){return["ascending","descending",null].indexOf(e)>-1}))}}},data:function(){return{isSubColumn:!1,columns:[]}},computed:{owner:function(){var e=this.$parent;while(e&&!e.tableId)e=e.$parent;return e},columnOrTableParent:function(){var e=this.$parent;while(e&&!e.tableId&&!e.columnId)e=e.$parent;return e},realWidth:function(){return ir(this.width)},realMinWidth:function(){return rr(this.minWidth)},realAlign:function(){return this.align?"is-"+this.align:null},realHeaderAlign:function(){return this.headerAlign?"is-"+this.headerAlign:this.realAlign}},methods:{getPropsData:function(){for(var e=this,t=arguments.length,n=Array(t),i=0;i<t;i++)n[i]=arguments[i];return n.reduce((function(t,n){return Array.isArray(n)&&n.forEach((function(n){t[n]=e[n]})),t}),{})},getColumnElIndex:function(e,t){return[].indexOf.call(e,t)},setColumnWidth:function(e){return this.realWidth&&(e.width=this.realWidth),this.realMinWidth&&(e.minWidth=this.realMinWidth),e.minWidth||(e.minWidth=80),e.realWidth=void 0===e.width?e.minWidth:e.width,e},setColumnForcedProps:function(e){var t=e.type,n=Qr[t]||{};return Object.keys(n).forEach((function(t){var i=n[t];void 0!==i&&(e[t]="className"===t?e[t]+" "+i:i)})),e},setColumnRenders:function(e){var t=this;this.$createElement,this.renderHeader?console.warn("[Element Warn][TableColumn]Comparing to render-header, scoped-slot header is easier to use. We recommend users to use scoped-slot header."):"selection"!==e.type&&(e.renderHeader=function(n,i){var r=t.$scopedSlots.header;return r?r(i):e.label});var n=e.renderCell;return"expand"===e.type?(e.renderCell=function(e,t){return e("div",{class:"cell"},[n(e,t)])},this.owner.renderExpanded=function(e,n){return t.$scopedSlots.default?t.$scopedSlots.default(n):t.$slots.default}):(n=n||Jr,e.renderCell=function(i,r){var o=null;o=t.$scopedSlots.default?t.$scopedSlots.default(r):n(i,r);var a=eo(i,r),s={class:"cell",style:{}};return e.showOverflowTooltip&&(s.class+=" el-tooltip",s.style={width:(r.column.realWidth||r.column.width)-1+"px"}),i("div",s,[a,o])}),e},registerNormalWatchers:function(){var e=this,t=["label","property","filters","filterMultiple","sortable","index","formatter","className","labelClassName","showOverflowTooltip"],n={prop:"property",realAlign:"align",realHeaderAlign:"headerAlign",realWidth:"width"},i=t.reduce((function(e,t){return e[t]=t,e}),n);Object.keys(i).forEach((function(t){var i=n[t];e.$watch(t,(function(t){e.columnConfig[i]=t}))}))},registerComplexWatchers:function(){var e=this,t=["fixed"],n={realWidth:"width",realMinWidth:"minWidth"},i=t.reduce((function(e,t){return e[t]=t,e}),n);Object.keys(i).forEach((function(t){var i=n[t];e.$watch(t,(function(t){e.columnConfig[i]=t;var n="fixed"===i;e.owner.store.scheduleLayout(n)}))}))}},components:{ElCheckbox:Fi.a},beforeCreate:function(){this.row={},this.column={},this.$index=0,this.columnId=""},created:function(){var e=this.columnOrTableParent;this.isSubColumn=this.owner!==e,this.columnId=(e.tableId||e.columnId)+"_column_"+no++;var t=this.type||"default",n=""===this.sortable||this.sortable,i=to({},Zr[t],{id:this.columnId,type:t,property:this.prop||this.property,align:this.realAlign,headerAlign:this.realHeaderAlign,showOverflowTooltip:this.showOverflowTooltip||this.showTooltipWhenOverflow,filterable:this.filters||this.filterMethod,filteredValue:[],filterPlacement:"",isColumnGroup:!1,filterOpened:!1,sortable:n,index:this.index}),r=["columnKey","label","className","labelClassName","type","renderHeader","formatter","fixed","resizable"],o=["sortMethod","sortBy","sortOrders"],a=["selectable","reserveSelection"],s=["filterMethod","filters","filterMultiple","filterOpened","filteredValue","filterPlacement"],l=this.getPropsData(r,o,a,s);l=nr(i,l);var c=ar(this.setColumnRenders,this.setColumnWidth,this.setColumnForcedProps);l=c(l),this.columnConfig=l,this.registerNormalWatchers(),this.registerComplexWatchers()},mounted:function(){var e=this.owner,t=this.columnOrTableParent,n=this.isSubColumn?t.$el.children:t.$refs.hiddenColumns.children,i=this.getColumnElIndex(n,this.$el);e.store.commit("insertColumn",this.columnConfig,i,this.isSubColumn?t.columnConfig:null)},destroyed:function(){if(this.$parent){var e=this.$parent;this.owner.store.commit("removeColumn",this.columnConfig,this.isSubColumn?e.columnConfig:null)}},render:function(e){return e("div",this.$slots.default)},install:function(e){e.component(io.name,io)}},ro=io,oo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.ranged?n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],ref:"reference",staticClass:"el-date-editor el-range-editor el-input__inner",class:["el-date-editor--"+e.type,e.pickerSize?"el-range-editor--"+e.pickerSize:"",e.pickerDisabled?"is-disabled":"",e.pickerVisible?"is-active":""],on:{click:e.handleRangeClick,mouseenter:e.handleMouseEnter,mouseleave:function(t){e.showClose=!1},keydown:e.handleKeydown}},[n("i",{class:["el-input__icon","el-range__icon",e.triggerClass]}),n("input",e._b({staticClass:"el-range-input",attrs:{autocomplete:"off",placeholder:e.startPlaceholder,disabled:e.pickerDisabled,readonly:!e.editable||e.readonly,name:e.name&&e.name[0]},domProps:{value:e.displayValue&&e.displayValue[0]},on:{input:e.handleStartInput,change:e.handleStartChange,focus:e.handleFocus}},"input",e.firstInputId,!1)),e._t("range-separator",[n("span",{staticClass:"el-range-separator"},[e._v(e._s(e.rangeSeparator))])]),n("input",e._b({staticClass:"el-range-input",attrs:{autocomplete:"off",placeholder:e.endPlaceholder,disabled:e.pickerDisabled,readonly:!e.editable||e.readonly,name:e.name&&e.name[1]},domProps:{value:e.displayValue&&e.displayValue[1]},on:{input:e.handleEndInput,change:e.handleEndChange,focus:e.handleFocus}},"input",e.secondInputId,!1)),e.haveTrigger?n("i",{staticClass:"el-input__icon el-range__close-icon",class:[e.showClose?""+e.clearIcon:""],on:{click:e.handleClickIcon}}):e._e()],2):n("el-input",e._b({directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],ref:"reference",staticClass:"el-date-editor",class:"el-date-editor--"+e.type,attrs:{readonly:!e.editable||e.readonly||"dates"===e.type||"week"===e.type,disabled:e.pickerDisabled,size:e.pickerSize,name:e.name,placeholder:e.placeholder,value:e.displayValue,validateEvent:!1},on:{focus:e.handleFocus,input:function(t){return e.userInput=t},change:e.handleChange},nativeOn:{keydown:function(t){return e.handleKeydown(t)},mouseenter:function(t){return e.handleMouseEnter(t)},mouseleave:function(t){e.showClose=!1}}},"el-input",e.firstInputId,!1),[n("i",{staticClass:"el-input__icon",class:e.triggerClass,attrs:{slot:"prefix"},on:{click:e.handleFocus},slot:"prefix"}),e.haveTrigger?n("i",{staticClass:"el-input__icon",class:[e.showClose?""+e.clearIcon:""],attrs:{slot:"suffix"},on:{click:e.handleClickIcon},slot:"suffix"}):e._e()])},ao=[];oo._withStripped=!0;var so=n(0),lo={props:{appendToBody:W.a.props.appendToBody,offset:W.a.props.offset,boundariesPadding:W.a.props.boundariesPadding,arrowOffset:W.a.props.arrowOffset},methods:W.a.methods,data:function(){return Ot()({visibleArrow:!0},W.a.data)},beforeDestroy:W.a.beforeDestroy},co={date:"yyyy-MM-dd",month:"yyyy-MM",datetime:"yyyy-MM-dd HH:mm:ss",time:"HH:mm:ss",week:"yyyywWW",timerange:"HH:mm:ss",daterange:"yyyy-MM-dd",monthrange:"yyyy-MM",datetimerange:"yyyy-MM-dd HH:mm:ss",year:"yyyy"},uo=["date","datetime","time","time-select","week","month","year","daterange","monthrange","timerange","datetimerange","dates"],ho=function(e,t){return"timestamp"===t?e.getTime():Object(so["formatDate"])(e,t)},fo=function(e,t){return"timestamp"===t?new Date(Number(e)):Object(so["parseDate"])(e,t)},po=function(e,t){if(Array.isArray(e)&&2===e.length){var n=e[0],i=e[1];if(n&&i)return[ho(n,t),ho(i,t)]}return""},mo=function(e,t,n){if(Array.isArray(e)||(e=e.split(n)),2===e.length){var i=e[0],r=e[1];return[fo(i,t),fo(r,t)]}return[]},go={default:{formatter:function(e){return e?""+e:""},parser:function(e){return void 0===e||""===e?null:e}},week:{formatter:function(e,t){var n=Object(so["getWeekNumber"])(e),i=e.getMonth(),r=new Date(e);1===n&&11===i&&(r.setHours(0,0,0,0),r.setDate(r.getDate()+3-(r.getDay()+6)%7));var o=Object(so["formatDate"])(r,t);return o=/WW/.test(o)?o.replace(/WW/,n<10?"0"+n:n):o.replace(/W/,n),o},parser:function(e,t){return go.date.parser(e,t)}},date:{formatter:ho,parser:fo},datetime:{formatter:ho,parser:fo},daterange:{formatter:po,parser:mo},monthrange:{formatter:po,parser:mo},datetimerange:{formatter:po,parser:mo},timerange:{formatter:po,parser:mo},time:{formatter:ho,parser:fo},month:{formatter:ho,parser:fo},year:{formatter:ho,parser:fo},number:{formatter:function(e){return e?""+e:""},parser:function(e){var t=Number(e);return isNaN(e)?null:t}},dates:{formatter:function(e,t){return e.map((function(e){return ho(e,t)}))},parser:function(e,t){return("string"===typeof e?e.split(", "):e).map((function(e){return e instanceof Date?e:fo(e,t)}))}}},vo={left:"bottom-start",center:"bottom",right:"bottom-end"},bo=function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"-";if(!e)return null;var r=(go[n]||go["default"]).parser,o=t||co[n];return r(e,o,i)},yo=function(e,t,n){if(!e)return null;var i=(go[n]||go["default"]).formatter,r=t||co[n];return i(e,r)},wo=function(e,t){var n=function(e,t){var n=e instanceof Date,i=t instanceof Date;return n&&i?e.getTime()===t.getTime():!n&&!i&&e===t},i=e instanceof Array,r=t instanceof Array;return i&&r?e.length===t.length&&e.every((function(e,i){return n(e,t[i])})):!i&&!r&&n(e,t)},xo=function(e){return"string"===typeof e||e instanceof String},_o=function(e){return null===e||void 0===e||xo(e)||Array.isArray(e)&&2===e.length&&e.every(xo)},ko={mixins:[D.a,lo],inject:{elForm:{default:""},elFormItem:{default:""}},props:{size:String,format:String,valueFormat:String,readonly:Boolean,placeholder:String,startPlaceholder:String,endPlaceholder:String,prefixIcon:String,clearIcon:{type:String,default:"el-icon-circle-close"},name:{default:"",validator:_o},disabled:Boolean,clearable:{type:Boolean,default:!0},id:{default:"",validator:_o},popperClass:String,editable:{type:Boolean,default:!0},align:{type:String,default:"left"},value:{},defaultValue:{},defaultTime:{},rangeSeparator:{default:"-"},pickerOptions:{},unlinkPanels:Boolean,validateEvent:{type:Boolean,default:!0}},components:{ElInput:g.a},directives:{Clickoutside:B.a},data:function(){return{pickerVisible:!1,showClose:!1,userInput:null,valueOnOpen:null,unwatchPickerOptions:null}},watch:{pickerVisible:function(e){this.readonly||this.pickerDisabled||(e?(this.showPicker(),this.valueOnOpen=Array.isArray(this.value)?[].concat(this.value):this.value):(this.hidePicker(),this.emitChange(this.value),this.userInput=null,this.validateEvent&&this.dispatch("ElFormItem","el.form.blur"),this.$emit("blur",this),this.blur()))},parsedValue:{immediate:!0,handler:function(e){this.picker&&(this.picker.value=e)}},defaultValue:function(e){this.picker&&(this.picker.defaultValue=e)},value:function(e,t){wo(e,t)||this.pickerVisible||!this.validateEvent||this.dispatch("ElFormItem","el.form.change",e)}},computed:{ranged:function(){return this.type.indexOf("range")>-1},reference:function(){var e=this.$refs.reference;return e.$el||e},refInput:function(){return this.reference?[].slice.call(this.reference.querySelectorAll("input")):[]},valueIsEmpty:function(){var e=this.value;if(Array.isArray(e)){for(var t=0,n=e.length;t<n;t++)if(e[t])return!1}else if(e)return!1;return!0},triggerClass:function(){return this.prefixIcon||(-1!==this.type.indexOf("time")?"el-icon-time":"el-icon-date")},selectionMode:function(){return"week"===this.type?"week":"month"===this.type?"month":"year"===this.type?"year":"dates"===this.type?"dates":"day"},haveTrigger:function(){return"undefined"!==typeof this.showTrigger?this.showTrigger:-1!==uo.indexOf(this.type)},displayValue:function(){var e=yo(this.parsedValue,this.format,this.type,this.rangeSeparator);return Array.isArray(this.userInput)?[this.userInput[0]||e&&e[0]||"",this.userInput[1]||e&&e[1]||""]:null!==this.userInput?this.userInput:e?"dates"===this.type?e.join(", "):e:""},parsedValue:function(){if(!this.value)return this.value;if("time-select"===this.type)return this.value;var e=Object(so["isDateObject"])(this.value)||Array.isArray(this.value)&&this.value.every(so["isDateObject"]);return e?this.value:this.valueFormat?bo(this.value,this.valueFormat,this.type,this.rangeSeparator)||this.value:Array.isArray(this.value)?this.value.map((function(e){return new Date(e)})):new Date(this.value)},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},pickerSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},pickerDisabled:function(){return this.disabled||(this.elForm||{}).disabled},firstInputId:function(){var e={},t=void 0;return t=this.ranged?this.id&&this.id[0]:this.id,t&&(e.id=t),e},secondInputId:function(){var e={},t=void 0;return this.ranged&&(t=this.id&&this.id[1]),t&&(e.id=t),e}},created:function(){this.popperOptions={boundariesPadding:0,gpuAcceleration:!1},this.placement=vo[this.align]||vo.left,this.$on("fieldReset",this.handleFieldReset)},methods:{focus:function(){this.ranged?this.handleFocus():this.$refs.reference.focus()},blur:function(){this.refInput.forEach((function(e){return e.blur()}))},parseValue:function(e){var t=Object(so["isDateObject"])(e)||Array.isArray(e)&&e.every(so["isDateObject"]);return this.valueFormat&&!t&&bo(e,this.valueFormat,this.type,this.rangeSeparator)||e},formatToValue:function(e){var t=Object(so["isDateObject"])(e)||Array.isArray(e)&&e.every(so["isDateObject"]);return this.valueFormat&&t?yo(e,this.valueFormat,this.type,this.rangeSeparator):e},parseString:function(e){var t=Array.isArray(e)?this.type:this.type.replace("range","");return bo(e,this.format,t)},formatToString:function(e){var t=Array.isArray(e)?this.type:this.type.replace("range","");return yo(e,this.format,t)},handleMouseEnter:function(){this.readonly||this.pickerDisabled||!this.valueIsEmpty&&this.clearable&&(this.showClose=!0)},handleChange:function(){if(this.userInput){var e=this.parseString(this.displayValue);e&&(this.picker.value=e,this.isValidValue(e)&&(this.emitInput(e),this.userInput=null))}""===this.userInput&&(this.emitInput(null),this.emitChange(null),this.userInput=null)},handleStartInput:function(e){this.userInput?this.userInput=[e.target.value,this.userInput[1]]:this.userInput=[e.target.value,null]},handleEndInput:function(e){this.userInput?this.userInput=[this.userInput[0],e.target.value]:this.userInput=[null,e.target.value]},handleStartChange:function(e){var t=this.parseString(this.userInput&&this.userInput[0]);if(t){this.userInput=[this.formatToString(t),this.displayValue[1]];var n=[t,this.picker.value&&this.picker.value[1]];this.picker.value=n,this.isValidValue(n)&&(this.emitInput(n),this.userInput=null)}},handleEndChange:function(e){var t=this.parseString(this.userInput&&this.userInput[1]);if(t){this.userInput=[this.displayValue[0],this.formatToString(t)];var n=[this.picker.value&&this.picker.value[0],t];this.picker.value=n,this.isValidValue(n)&&(this.emitInput(n),this.userInput=null)}},handleClickIcon:function(e){this.readonly||this.pickerDisabled||(this.showClose?(this.valueOnOpen=this.value,e.stopPropagation(),this.emitInput(null),this.emitChange(null),this.showClose=!1,this.picker&&"function"===typeof this.picker.handleClear&&this.picker.handleClear()):this.pickerVisible=!this.pickerVisible)},handleClose:function(){if(this.pickerVisible&&(this.pickerVisible=!1,"dates"===this.type)){var e=bo(this.valueOnOpen,this.valueFormat,this.type,this.rangeSeparator)||this.valueOnOpen;this.emitInput(e)}},handleFieldReset:function(e){this.userInput=""===e?null:e},handleFocus:function(){var e=this.type;-1===uo.indexOf(e)||this.pickerVisible||(this.pickerVisible=!0),this.$emit("focus",this)},handleKeydown:function(e){var t=this,n=e.keyCode;return 27===n?(this.pickerVisible=!1,void e.stopPropagation()):9!==n?13===n?((""===this.userInput||this.isValidValue(this.parseString(this.displayValue)))&&(this.handleChange(),this.pickerVisible=this.picker.visible=!1,this.blur()),void e.stopPropagation()):void(this.userInput?e.stopPropagation():this.picker&&this.picker.handleKeydown&&this.picker.handleKeydown(e)):void(this.ranged?setTimeout((function(){-1===t.refInput.indexOf(document.activeElement)&&(t.pickerVisible=!1,t.blur(),e.stopPropagation())}),0):(this.handleChange(),this.pickerVisible=this.picker.visible=!1,this.blur(),e.stopPropagation()))},handleRangeClick:function(){var e=this.type;-1===uo.indexOf(e)||this.pickerVisible||(this.pickerVisible=!0),this.$emit("focus",this)},hidePicker:function(){this.picker&&(this.picker.resetView&&this.picker.resetView(),this.pickerVisible=this.picker.visible=!1,this.destroyPopper())},showPicker:function(){var e=this;this.$isServer||(this.picker||this.mountPicker(),this.pickerVisible=this.picker.visible=!0,this.updatePopper(),this.picker.value=this.parsedValue,this.picker.resetView&&this.picker.resetView(),this.$nextTick((function(){e.picker.adjustSpinners&&e.picker.adjustSpinners()})))},mountPicker:function(){var e=this;this.picker=new qi.a(this.panel).$mount(),this.picker.defaultValue=this.defaultValue,this.picker.defaultTime=this.defaultTime,this.picker.popperClass=this.popperClass,this.popperElm=this.picker.$el,this.picker.width=this.reference.getBoundingClientRect().width,this.picker.showTime="datetime"===this.type||"datetimerange"===this.type,this.picker.selectionMode=this.selectionMode,this.picker.unlinkPanels=this.unlinkPanels,this.picker.arrowControl=this.arrowControl||this.timeArrowControl||!1,this.$watch("format",(function(t){e.picker.format=t}));var t=function(){var t=e.pickerOptions;if(t&&t.selectableRange){var n=t.selectableRange,i=go.datetimerange.parser,r=co.timerange;n=Array.isArray(n)?n:[n],e.picker.selectableRange=n.map((function(t){return i(t,r,e.rangeSeparator)}))}for(var o in t)t.hasOwnProperty(o)&&"selectableRange"!==o&&(e.picker[o]=t[o]);e.format&&(e.picker.format=e.format)};t(),this.unwatchPickerOptions=this.$watch("pickerOptions",(function(){return t()}),{deep:!0}),this.$el.appendChild(this.picker.$el),this.picker.resetView&&this.picker.resetView(),this.picker.$on("dodestroy",this.doDestroy),this.picker.$on("pick",(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e.userInput=null,e.pickerVisible=e.picker.visible=n,e.emitInput(t),e.picker.resetView&&e.picker.resetView()})),this.picker.$on("select-range",(function(t,n,i){0!==e.refInput.length&&(i&&"min"!==i?"max"===i&&(e.refInput[1].setSelectionRange(t,n),e.refInput[1].focus()):(e.refInput[0].setSelectionRange(t,n),e.refInput[0].focus()))}))},unmountPicker:function(){this.picker&&(this.picker.$destroy(),this.picker.$off(),"function"===typeof this.unwatchPickerOptions&&this.unwatchPickerOptions(),this.picker.$el.parentNode.removeChild(this.picker.$el))},emitChange:function(e){wo(e,this.valueOnOpen)||(this.$emit("change",e),this.valueOnOpen=e,this.validateEvent&&this.dispatch("ElFormItem","el.form.change",e))},emitInput:function(e){var t=this.formatToValue(e);wo(this.value,t)||this.$emit("input",t)},isValidValue:function(e){return this.picker||this.mountPicker(),!this.picker.isValidValue||e&&this.picker.isValidValue(e)}}},Co=ko,So=l(Co,oo,ao,!1,null,null,null);So.options.__file="packages/date-picker/src/picker.vue";var Oo=So.exports,To=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-enter":e.handleEnter,"after-leave":e.handleLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts,"has-time":e.showTime},e.popperClass]},[n("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?n("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,i){return n("button",{key:i,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(n){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),n("div",{staticClass:"el-picker-panel__body"},[e.showTime?n("div",{staticClass:"el-date-picker__time-header"},[n("span",{staticClass:"el-date-picker__editor-wrap"},[n("el-input",{attrs:{placeholder:e.t("el.datepicker.selectDate"),value:e.visibleDate,size:"small"},on:{input:function(t){return e.userInputDate=t},change:e.handleVisibleDateChange}})],1),n("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleTimePickClose,expression:"handleTimePickClose"}],staticClass:"el-date-picker__editor-wrap"},[n("el-input",{ref:"input",attrs:{placeholder:e.t("el.datepicker.selectTime"),value:e.visibleTime,size:"small"},on:{focus:function(t){e.timePickerVisible=!0},input:function(t){return e.userInputTime=t},change:e.handleVisibleTimeChange}}),n("time-picker",{ref:"timepicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.timePickerVisible},on:{pick:e.handleTimePick,mounted:e.proxyTimePickerDataProperties}})],1)]):e._e(),n("div",{directives:[{name:"show",rawName:"v-show",value:"time"!==e.currentView,expression:"currentView !== 'time'"}],staticClass:"el-date-picker__header",class:{"el-date-picker__header--bordered":"year"===e.currentView||"month"===e.currentView}},[n("button",{staticClass:"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left",attrs:{type:"button","aria-label":e.t("el.datepicker.prevYear")},on:{click:e.prevYear}}),n("button",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-arrow-left",attrs:{type:"button","aria-label":e.t("el.datepicker.prevMonth")},on:{click:e.prevMonth}}),n("span",{staticClass:"el-date-picker__header-label",attrs:{role:"button"},on:{click:e.showYearPicker}},[e._v(e._s(e.yearLabel))]),n("span",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-date-picker__header-label",class:{active:"month"===e.currentView},attrs:{role:"button"},on:{click:e.showMonthPicker}},[e._v(e._s(e.t("el.datepicker.month"+(e.month+1))))]),n("button",{staticClass:"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right",attrs:{type:"button","aria-label":e.t("el.datepicker.nextYear")},on:{click:e.nextYear}}),n("button",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-arrow-right",attrs:{type:"button","aria-label":e.t("el.datepicker.nextMonth")},on:{click:e.nextMonth}})]),n("div",{staticClass:"el-picker-panel__content"},[n("date-table",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],attrs:{"selection-mode":e.selectionMode,"first-day-of-week":e.firstDayOfWeek,value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"cell-class-name":e.cellClassName,"disabled-date":e.disabledDate},on:{pick:e.handleDatePick}}),n("year-table",{directives:[{name:"show",rawName:"v-show",value:"year"===e.currentView,expression:"currentView === 'year'"}],attrs:{value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"disabled-date":e.disabledDate},on:{pick:e.handleYearPick}}),n("month-table",{directives:[{name:"show",rawName:"v-show",value:"month"===e.currentView,expression:"currentView === 'month'"}],attrs:{value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"disabled-date":e.disabledDate},on:{pick:e.handleMonthPick}})],1)])],2),n("div",{directives:[{name:"show",rawName:"v-show",value:e.footerVisible&&"date"===e.currentView,expression:"footerVisible && currentView === 'date'"}],staticClass:"el-picker-panel__footer"},[n("el-button",{directives:[{name:"show",rawName:"v-show",value:"dates"!==e.selectionMode,expression:"selectionMode !== 'dates'"}],staticClass:"el-picker-panel__link-btn",attrs:{size:"mini",type:"text"},on:{click:e.changeToNow}},[e._v("\n        "+e._s(e.t("el.datepicker.now"))+"\n      ")]),n("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{plain:"",size:"mini"},on:{click:e.confirm}},[e._v("\n        "+e._s(e.t("el.datepicker.confirm"))+"\n      ")])],1)])])},Eo=[];To._withStripped=!0;var Do=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-time-panel el-popper",class:e.popperClass},[n("div",{staticClass:"el-time-panel__content",class:{"has-seconds":e.showSeconds}},[n("time-spinner",{ref:"spinner",attrs:{"arrow-control":e.useArrow,"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,date:e.date},on:{change:e.handleChange,"select-range":e.setSelectionRange}})],1),n("div",{staticClass:"el-time-panel__footer"},[n("button",{staticClass:"el-time-panel__btn cancel",attrs:{type:"button"},on:{click:e.handleCancel}},[e._v(e._s(e.t("el.datepicker.cancel")))]),n("button",{staticClass:"el-time-panel__btn",class:{confirm:!e.disabled},attrs:{type:"button"},on:{click:function(t){e.handleConfirm()}}},[e._v(e._s(e.t("el.datepicker.confirm")))])])])])},Mo=[];Do._withStripped=!0;var Ao=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-time-spinner",class:{"has-seconds":e.showSeconds}},[e.arrowControl?e._e():[n("el-scrollbar",{ref:"hours",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("hours")},mousemove:function(t){e.adjustCurrentSpinner("hours")}}},e._l(e.hoursList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:i===e.hours,disabled:t},on:{click:function(n){e.handleClick("hours",{value:i,disabled:t})}}},[e._v(e._s(("0"+(e.amPmMode?i%12||12:i)).slice(-2))+e._s(e.amPm(i)))])})),0),n("el-scrollbar",{ref:"minutes",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("minutes")},mousemove:function(t){e.adjustCurrentSpinner("minutes")}}},e._l(e.minutesList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:i===e.minutes,disabled:!t},on:{click:function(t){e.handleClick("minutes",{value:i,disabled:!1})}}},[e._v(e._s(("0"+i).slice(-2)))])})),0),n("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.showSeconds,expression:"showSeconds"}],ref:"seconds",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("seconds")},mousemove:function(t){e.adjustCurrentSpinner("seconds")}}},e._l(60,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:i===e.seconds},on:{click:function(t){e.handleClick("seconds",{value:i,disabled:!1})}}},[e._v(e._s(("0"+i).slice(-2)))])})),0)],e.arrowControl?[n("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("hours")}}},[n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),n("ul",{ref:"hours",staticClass:"el-time-spinner__list"},e._l(e.arrowHourList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:t===e.hours,disabled:e.hoursList[t]}},[e._v(e._s(void 0===t?"":("0"+(e.amPmMode?t%12||12:t)).slice(-2)+e.amPm(t)))])})),0)]),n("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("minutes")}}},[n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),n("ul",{ref:"minutes",staticClass:"el-time-spinner__list"},e._l(e.arrowMinuteList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:t===e.minutes}},[e._v("\n          "+e._s(void 0===t?"":("0"+t).slice(-2))+"\n        ")])})),0)]),e.showSeconds?n("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("seconds")}}},[n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),n("ul",{ref:"seconds",staticClass:"el-time-spinner__list"},e._l(e.arrowSecondList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:t===e.seconds}},[e._v("\n          "+e._s(void 0===t?"":("0"+t).slice(-2))+"\n        ")])})),0)]):e._e()]:e._e()],2)},No=[];Ao._withStripped=!0;var Io={components:{ElScrollbar:U.a},directives:{repeatClick:Pt},props:{date:{},defaultValue:{},showSeconds:{type:Boolean,default:!0},arrowControl:Boolean,amPmMode:{type:String,default:""}},computed:{hours:function(){return this.date.getHours()},minutes:function(){return this.date.getMinutes()},seconds:function(){return this.date.getSeconds()},hoursList:function(){return Object(so["getRangeHours"])(this.selectableRange)},minutesList:function(){return Object(so["getRangeMinutes"])(this.selectableRange,this.hours)},arrowHourList:function(){var e=this.hours;return[e>0?e-1:void 0,e,e<23?e+1:void 0]},arrowMinuteList:function(){var e=this.minutes;return[e>0?e-1:void 0,e,e<59?e+1:void 0]},arrowSecondList:function(){var e=this.seconds;return[e>0?e-1:void 0,e,e<59?e+1:void 0]}},data:function(){return{selectableRange:[],currentScrollbar:null}},mounted:function(){var e=this;this.$nextTick((function(){!e.arrowControl&&e.bindScrollEvent()}))},methods:{increase:function(){this.scrollDown(1)},decrease:function(){this.scrollDown(-1)},modifyDateField:function(e,t){switch(e){case"hours":this.$emit("change",Object(so["modifyTime"])(this.date,t,this.minutes,this.seconds));break;case"minutes":this.$emit("change",Object(so["modifyTime"])(this.date,this.hours,t,this.seconds));break;case"seconds":this.$emit("change",Object(so["modifyTime"])(this.date,this.hours,this.minutes,t));break}},handleClick:function(e,t){var n=t.value,i=t.disabled;i||(this.modifyDateField(e,n),this.emitSelectRange(e),this.adjustSpinner(e,n))},emitSelectRange:function(e){"hours"===e?this.$emit("select-range",0,2):"minutes"===e?this.$emit("select-range",3,5):"seconds"===e&&this.$emit("select-range",6,8),this.currentScrollbar=e},bindScrollEvent:function(){var e=this,t=function(t){e.$refs[t].wrap.onscroll=function(n){e.handleScroll(t,n)}};t("hours"),t("minutes"),t("seconds")},handleScroll:function(e){var t=Math.min(Math.round((this.$refs[e].wrap.scrollTop-(.5*this.scrollBarHeight(e)-10)/this.typeItemHeight(e)+3)/this.typeItemHeight(e)),"hours"===e?23:59);this.modifyDateField(e,t)},adjustSpinners:function(){this.adjustSpinner("hours",this.hours),this.adjustSpinner("minutes",this.minutes),this.adjustSpinner("seconds",this.seconds)},adjustCurrentSpinner:function(e){this.adjustSpinner(e,this[e])},adjustSpinner:function(e,t){if(!this.arrowControl){var n=this.$refs[e].wrap;n&&(n.scrollTop=Math.max(0,t*this.typeItemHeight(e)))}},scrollDown:function(e){var t=this;this.currentScrollbar||this.emitSelectRange("hours");var n=this.currentScrollbar,i=this.hoursList,r=this[n];if("hours"===this.currentScrollbar){var o=Math.abs(e);e=e>0?1:-1;var a=i.length;while(a--&&o)r=(r+e+i.length)%i.length,i[r]||o--;if(i[r])return}else r=(r+e+60)%60;this.modifyDateField(n,r),this.adjustSpinner(n,r),this.$nextTick((function(){return t.emitSelectRange(t.currentScrollbar)}))},amPm:function(e){var t="a"===this.amPmMode.toLowerCase();if(!t)return"";var n="A"===this.amPmMode,i=e<12?" am":" pm";return n&&(i=i.toUpperCase()),i},typeItemHeight:function(e){return this.$refs[e].$el.querySelector("li").offsetHeight},scrollBarHeight:function(e){return this.$refs[e].$el.offsetHeight}}},Lo=Io,Po=l(Lo,Ao,No,!1,null,null,null);Po.options.__file="packages/date-picker/src/basic/time-spinner.vue";var $o=Po.exports,Fo={mixins:[b.a],components:{TimeSpinner:$o},props:{visible:Boolean,timeArrowControl:Boolean},watch:{visible:function(e){var t=this;e?(this.oldValue=this.value,this.$nextTick((function(){return t.$refs.spinner.emitSelectRange("hours")}))):this.needInitAdjust=!0},value:function(e){var t=this,n=void 0;e instanceof Date?n=Object(so["limitTimeRange"])(e,this.selectableRange,this.format):e||(n=this.defaultValue?new Date(this.defaultValue):new Date),this.date=n,this.visible&&this.needInitAdjust&&(this.$nextTick((function(e){return t.adjustSpinners()})),this.needInitAdjust=!1)},selectableRange:function(e){this.$refs.spinner.selectableRange=e},defaultValue:function(e){Object(so["isDate"])(this.value)||(this.date=e?new Date(e):new Date)}},data:function(){return{popperClass:"",format:"HH:mm:ss",value:"",defaultValue:null,date:new Date,oldValue:new Date,selectableRange:[],selectionRange:[0,2],disabled:!1,arrowControl:!1,needInitAdjust:!0}},computed:{showSeconds:function(){return-1!==(this.format||"").indexOf("ss")},useArrow:function(){return this.arrowControl||this.timeArrowControl||!1},amPmMode:function(){return-1!==(this.format||"").indexOf("A")?"A":-1!==(this.format||"").indexOf("a")?"a":""}},methods:{handleCancel:function(){this.$emit("pick",this.oldValue,!1)},handleChange:function(e){this.visible&&(this.date=Object(so["clearMilliseconds"])(e),this.isValidValue(this.date)&&this.$emit("pick",this.date,!0))},setSelectionRange:function(e,t){this.$emit("select-range",e,t),this.selectionRange=[e,t]},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments[1];if(!t){var n=Object(so["clearMilliseconds"])(Object(so["limitTimeRange"])(this.date,this.selectableRange,this.format));this.$emit("pick",n,e,t)}},handleKeydown:function(e){var t=e.keyCode,n={38:-1,40:1,37:-1,39:1};if(37===t||39===t){var i=n[t];return this.changeSelectionRange(i),void e.preventDefault()}if(38===t||40===t){var r=n[t];return this.$refs.spinner.scrollDown(r),void e.preventDefault()}},isValidValue:function(e){return Object(so["timeWithinRange"])(e,this.selectableRange,this.format)},adjustSpinners:function(){return this.$refs.spinner.adjustSpinners()},changeSelectionRange:function(e){var t=[0,3].concat(this.showSeconds?[6]:[]),n=["hours","minutes"].concat(this.showSeconds?["seconds"]:[]),i=t.indexOf(this.selectionRange[0]),r=(i+e+t.length)%t.length;this.$refs.spinner.emitSelectRange(n[r])}},mounted:function(){var e=this;this.$nextTick((function(){return e.handleConfirm(!0,!0)})),this.$emit("mounted")}},jo=Fo,zo=l(jo,Do,Mo,!1,null,null,null);zo.options.__file="packages/date-picker/src/panel/time.vue";var Bo=zo.exports,Ro=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("table",{staticClass:"el-year-table",on:{click:e.handleYearTableClick}},[n("tbody",[n("tr",[n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+0)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+1)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+1))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+2)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+2))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+3)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+3))])])]),n("tr",[n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+4)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+4))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+5)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+5))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+6)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+6))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+7)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+7))])])]),n("tr",[n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+8)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+8))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+9)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+9))])]),n("td"),n("td")])])])},Vo=[];Ro._withStripped=!0;var Ho=function(e){var t=Object(so["getDayCountOfYear"])(e),n=new Date(e,0,1);return Object(so["range"])(t).map((function(e){return Object(so["nextDate"])(n,e)}))},Wo={props:{disabledDate:{},value:{},defaultValue:{validator:function(e){return null===e||e instanceof Date&&Object(so["isDate"])(e)}},date:{}},computed:{startYear:function(){return 10*Math.floor(this.date.getFullYear()/10)}},methods:{getCellStyle:function(e){var t={},n=new Date;return t.disabled="function"===typeof this.disabledDate&&Ho(e).every(this.disabledDate),t.current=Object(y["arrayFindIndex"])(Object(y["coerceTruthyValueToArray"])(this.value),(function(t){return t.getFullYear()===e}))>=0,t.today=n.getFullYear()===e,t.default=this.defaultValue&&this.defaultValue.getFullYear()===e,t},handleYearTableClick:function(e){var t=e.target;if("A"===t.tagName){if(Object(ze["hasClass"])(t.parentNode,"disabled"))return;var n=t.textContent||t.innerText;this.$emit("pick",Number(n))}}}},qo=Wo,Uo=l(qo,Ro,Vo,!1,null,null,null);Uo.options.__file="packages/date-picker/src/basic/year-table.vue";var Ko=Uo.exports,Go=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("table",{staticClass:"el-month-table",on:{click:e.handleMonthTableClick,mousemove:e.handleMouseMove}},[n("tbody",e._l(e.rows,(function(t,i){return n("tr",{key:i},e._l(t,(function(t,i){return n("td",{key:i,class:e.getCellStyle(t)},[n("div",[n("a",{staticClass:"cell"},[e._v(e._s(e.t("el.datepicker.months."+e.months[t.text])))])])])})),0)})),0)])},Yo=[];Go._withStripped=!0;var Xo=function(e,t){var n=Object(so["getDayCountOfMonth"])(e,t),i=new Date(e,t,1);return Object(so["range"])(n).map((function(e){return Object(so["nextDate"])(i,e)}))},Zo=function(e){return new Date(e.getFullYear(),e.getMonth())},Qo=function(e){return"number"===typeof e||"string"===typeof e?Zo(new Date(e)).getTime():e instanceof Date?Zo(e).getTime():NaN},Jo={props:{disabledDate:{},value:{},selectionMode:{default:"month"},minDate:{},maxDate:{},defaultValue:{validator:function(e){return null===e||Object(so["isDate"])(e)||Array.isArray(e)&&e.every(so["isDate"])}},date:{},rangeState:{default:function(){return{endDate:null,selecting:!1}}}},mixins:[b.a],watch:{"rangeState.endDate":function(e){this.markRange(this.minDate,e)},minDate:function(e,t){Qo(e)!==Qo(t)&&this.markRange(this.minDate,this.maxDate)},maxDate:function(e,t){Qo(e)!==Qo(t)&&this.markRange(this.minDate,this.maxDate)}},data:function(){return{months:["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],tableRows:[[],[],[]],lastRow:null,lastColumn:null}},methods:{cellMatchesDate:function(e,t){var n=new Date(t);return this.date.getFullYear()===n.getFullYear()&&Number(e.text)===n.getMonth()},getCellStyle:function(e){var t=this,n={},i=this.date.getFullYear(),r=new Date,o=e.text,a=this.defaultValue?Array.isArray(this.defaultValue)?this.defaultValue:[this.defaultValue]:[];return n.disabled="function"===typeof this.disabledDate&&Xo(i,o).every(this.disabledDate),n.current=Object(y["arrayFindIndex"])(Object(y["coerceTruthyValueToArray"])(this.value),(function(e){return e.getFullYear()===i&&e.getMonth()===o}))>=0,n.today=r.getFullYear()===i&&r.getMonth()===o,n.default=a.some((function(n){return t.cellMatchesDate(e,n)})),e.inRange&&(n["in-range"]=!0,e.start&&(n["start-date"]=!0),e.end&&(n["end-date"]=!0)),n},getMonthOfCell:function(e){var t=this.date.getFullYear();return new Date(t,e,1)},markRange:function(e,t){e=Qo(e),t=Qo(t)||e;var n=[Math.min(e,t),Math.max(e,t)];e=n[0],t=n[1];for(var i=this.rows,r=0,o=i.length;r<o;r++)for(var a=i[r],s=0,l=a.length;s<l;s++){var c=a[s],u=4*r+s,d=new Date(this.date.getFullYear(),u).getTime();c.inRange=e&&d>=e&&d<=t,c.start=e&&d===e,c.end=t&&d===t}},handleMouseMove:function(e){if(this.rangeState.selecting){var t=e.target;if("A"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var n=t.parentNode.rowIndex,i=t.cellIndex;this.rows[n][i].disabled||n===this.lastRow&&i===this.lastColumn||(this.lastRow=n,this.lastColumn=i,this.$emit("changerange",{minDate:this.minDate,maxDate:this.maxDate,rangeState:{selecting:!0,endDate:this.getMonthOfCell(4*n+i)}}))}}},handleMonthTableClick:function(e){var t=e.target;if("A"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName&&!Object(ze["hasClass"])(t,"disabled")){var n=t.cellIndex,i=t.parentNode.rowIndex,r=4*i+n,o=this.getMonthOfCell(r);"range"===this.selectionMode?this.rangeState.selecting?(o>=this.minDate?this.$emit("pick",{minDate:this.minDate,maxDate:o}):this.$emit("pick",{minDate:o,maxDate:this.minDate}),this.rangeState.selecting=!1):(this.$emit("pick",{minDate:o,maxDate:null}),this.rangeState.selecting=!0):this.$emit("pick",r)}}},computed:{rows:function(){for(var e=this,t=this.tableRows,n=this.disabledDate,i=[],r=Qo(new Date),o=0;o<3;o++)for(var a=t[o],s=function(t){var s=a[t];s||(s={row:o,column:t,type:"normal",inRange:!1,start:!1,end:!1}),s.type="normal";var l=4*o+t,c=new Date(e.date.getFullYear(),l).getTime();s.inRange=c>=Qo(e.minDate)&&c<=Qo(e.maxDate),s.start=e.minDate&&c===Qo(e.minDate),s.end=e.maxDate&&c===Qo(e.maxDate);var u=c===r;u&&(s.type="today"),s.text=l;var d=new Date(c);s.disabled="function"===typeof n&&n(d),s.selected=Object(y["arrayFind"])(i,(function(e){return e.getTime()===d.getTime()})),e.$set(a,t,s)},l=0;l<4;l++)s(l);return t}}},ea=Jo,ta=l(ea,Go,Yo,!1,null,null,null);ta.options.__file="packages/date-picker/src/basic/month-table.vue";var na=ta.exports,ia=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("table",{staticClass:"el-date-table",class:{"is-week-mode":"week"===e.selectionMode},attrs:{cellspacing:"0",cellpadding:"0"},on:{click:e.handleClick,mousemove:e.handleMouseMove}},[n("tbody",[n("tr",[e.showWeekNumber?n("th",[e._v(e._s(e.t("el.datepicker.week")))]):e._e(),e._l(e.WEEKS,(function(t,i){return n("th",{key:i},[e._v(e._s(e.t("el.datepicker.weeks."+t)))])}))],2),e._l(e.rows,(function(t,i){return n("tr",{key:i,staticClass:"el-date-table__row",class:{current:e.isWeekActive(t[1])}},e._l(t,(function(t,i){return n("td",{key:i,class:e.getCellClasses(t)},[n("div",[n("span",[e._v("\n          "+e._s(t.text)+"\n        ")])])])})),0)}))],2)])},ra=[];ia._withStripped=!0;var oa=["sun","mon","tue","wed","thu","fri","sat"],aa=function(e){return"number"===typeof e||"string"===typeof e?Object(so["clearTime"])(new Date(e)).getTime():e instanceof Date?Object(so["clearTime"])(e).getTime():NaN},sa=function(e,t){var n="function"===typeof t?Object(y["arrayFindIndex"])(e,t):e.indexOf(t);return n>=0?[].concat(e.slice(0,n),e.slice(n+1)):e},la={mixins:[b.a],props:{firstDayOfWeek:{default:7,type:Number,validator:function(e){return e>=1&&e<=7}},value:{},defaultValue:{validator:function(e){return null===e||Object(so["isDate"])(e)||Array.isArray(e)&&e.every(so["isDate"])}},date:{},selectionMode:{default:"day"},showWeekNumber:{type:Boolean,default:!1},disabledDate:{},cellClassName:{},minDate:{},maxDate:{},rangeState:{default:function(){return{endDate:null,selecting:!1}}}},computed:{offsetDay:function(){var e=this.firstDayOfWeek;return e>3?7-e:-e},WEEKS:function(){var e=this.firstDayOfWeek;return oa.concat(oa).slice(e,e+7)},year:function(){return this.date.getFullYear()},month:function(){return this.date.getMonth()},startDate:function(){return Object(so["getStartDateOfMonth"])(this.year,this.month)},rows:function(){var e=this,t=new Date(this.year,this.month,1),n=Object(so["getFirstDayOfMonth"])(t),i=Object(so["getDayCountOfMonth"])(t.getFullYear(),t.getMonth()),r=Object(so["getDayCountOfMonth"])(t.getFullYear(),0===t.getMonth()?11:t.getMonth()-1);n=0===n?7:n;for(var o=this.offsetDay,a=this.tableRows,s=1,l=this.startDate,c=this.disabledDate,u=this.cellClassName,d="dates"===this.selectionMode?Object(y["coerceTruthyValueToArray"])(this.value):[],h=aa(new Date),f=0;f<6;f++){var p=a[f];this.showWeekNumber&&(p[0]||(p[0]={type:"week",text:Object(so["getWeekNumber"])(Object(so["nextDate"])(l,7*f+1))}));for(var m=function(t){var a=p[e.showWeekNumber?t+1:t];a||(a={row:f,column:t,type:"normal",inRange:!1,start:!1,end:!1}),a.type="normal";var m=7*f+t,g=Object(so["nextDate"])(l,m-o).getTime();a.inRange=g>=aa(e.minDate)&&g<=aa(e.maxDate),a.start=e.minDate&&g===aa(e.minDate),a.end=e.maxDate&&g===aa(e.maxDate);var v=g===h;if(v&&(a.type="today"),f>=0&&f<=1){var b=n+o<0?7+n+o:n+o;t+7*f>=b?a.text=s++:(a.text=r-(b-t%7)+1+7*f,a.type="prev-month")}else s<=i?a.text=s++:(a.text=s++-i,a.type="next-month");var w=new Date(g);a.disabled="function"===typeof c&&c(w),a.selected=Object(y["arrayFind"])(d,(function(e){return e.getTime()===w.getTime()})),a.customClass="function"===typeof u&&u(w),e.$set(p,e.showWeekNumber?t+1:t,a)},g=0;g<7;g++)m(g);if("week"===this.selectionMode){var v=this.showWeekNumber?1:0,b=this.showWeekNumber?7:6,w=this.isWeekActive(p[v+1]);p[v].inRange=w,p[v].start=w,p[b].inRange=w,p[b].end=w}}return a}},watch:{"rangeState.endDate":function(e){this.markRange(this.minDate,e)},minDate:function(e,t){aa(e)!==aa(t)&&this.markRange(this.minDate,this.maxDate)},maxDate:function(e,t){aa(e)!==aa(t)&&this.markRange(this.minDate,this.maxDate)}},data:function(){return{tableRows:[[],[],[],[],[],[]],lastRow:null,lastColumn:null}},methods:{cellMatchesDate:function(e,t){var n=new Date(t);return this.year===n.getFullYear()&&this.month===n.getMonth()&&Number(e.text)===n.getDate()},getCellClasses:function(e){var t=this,n=this.selectionMode,i=this.defaultValue?Array.isArray(this.defaultValue)?this.defaultValue:[this.defaultValue]:[],r=[];return"normal"!==e.type&&"today"!==e.type||e.disabled?r.push(e.type):(r.push("available"),"today"===e.type&&r.push("today")),"normal"===e.type&&i.some((function(n){return t.cellMatchesDate(e,n)}))&&r.push("default"),"day"!==n||"normal"!==e.type&&"today"!==e.type||!this.cellMatchesDate(e,this.value)||r.push("current"),!e.inRange||"normal"!==e.type&&"today"!==e.type&&"week"!==this.selectionMode||(r.push("in-range"),e.start&&r.push("start-date"),e.end&&r.push("end-date")),e.disabled&&r.push("disabled"),e.selected&&r.push("selected"),e.customClass&&r.push(e.customClass),r.join(" ")},getDateOfCell:function(e,t){var n=7*e+(t-(this.showWeekNumber?1:0))-this.offsetDay;return Object(so["nextDate"])(this.startDate,n)},isWeekActive:function(e){if("week"!==this.selectionMode)return!1;var t=new Date(this.year,this.month,1),n=t.getFullYear(),i=t.getMonth();if("prev-month"===e.type&&(t.setMonth(0===i?11:i-1),t.setFullYear(0===i?n-1:n)),"next-month"===e.type&&(t.setMonth(11===i?0:i+1),t.setFullYear(11===i?n+1:n)),t.setDate(parseInt(e.text,10)),Object(so["isDate"])(this.value)){var r=(this.value.getDay()-this.firstDayOfWeek+7)%7-1,o=Object(so["prevDate"])(this.value,r);return o.getTime()===t.getTime()}return!1},markRange:function(e,t){e=aa(e),t=aa(t)||e;var n=[Math.min(e,t),Math.max(e,t)];e=n[0],t=n[1];for(var i=this.startDate,r=this.rows,o=0,a=r.length;o<a;o++)for(var s=r[o],l=0,c=s.length;l<c;l++)if(!this.showWeekNumber||0!==l){var u=s[l],d=7*o+l+(this.showWeekNumber?-1:0),h=Object(so["nextDate"])(i,d-this.offsetDay).getTime();u.inRange=e&&h>=e&&h<=t,u.start=e&&h===e,u.end=t&&h===t}},handleMouseMove:function(e){if(this.rangeState.selecting){var t=e.target;if("SPAN"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var n=t.parentNode.rowIndex-1,i=t.cellIndex;this.rows[n][i].disabled||n===this.lastRow&&i===this.lastColumn||(this.lastRow=n,this.lastColumn=i,this.$emit("changerange",{minDate:this.minDate,maxDate:this.maxDate,rangeState:{selecting:!0,endDate:this.getDateOfCell(n,i)}}))}}},handleClick:function(e){var t=e.target;if("SPAN"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var n=t.parentNode.rowIndex-1,i="week"===this.selectionMode?1:t.cellIndex,r=this.rows[n][i];if(!r.disabled&&"week"!==r.type){var o=this.getDateOfCell(n,i);if("range"===this.selectionMode)this.rangeState.selecting?(o>=this.minDate?this.$emit("pick",{minDate:this.minDate,maxDate:o}):this.$emit("pick",{minDate:o,maxDate:this.minDate}),this.rangeState.selecting=!1):(this.$emit("pick",{minDate:o,maxDate:null}),this.rangeState.selecting=!0);else if("day"===this.selectionMode)this.$emit("pick",o);else if("week"===this.selectionMode){var a=Object(so["getWeekNumber"])(o),s=o.getFullYear()+"w"+a;this.$emit("pick",{year:o.getFullYear(),week:a,value:s,date:o})}else if("dates"===this.selectionMode){var l=this.value||[],c=r.selected?sa(l,(function(e){return e.getTime()===o.getTime()})):[].concat(l,[o]);this.$emit("pick",c)}}}}}},ca=la,ua=l(ca,ia,ra,!1,null,null,null);ua.options.__file="packages/date-picker/src/basic/date-table.vue";var da=ua.exports,ha={mixins:[b.a],directives:{Clickoutside:B.a},watch:{showTime:function(e){var t=this;e&&this.$nextTick((function(e){var n=t.$refs.input.$el;n&&(t.pickerWidth=n.getBoundingClientRect().width+10)}))},value:function(e){"dates"===this.selectionMode&&this.value||(Object(so["isDate"])(e)?this.date=new Date(e):this.date=this.getDefaultValue())},defaultValue:function(e){Object(so["isDate"])(this.value)||(this.date=e?new Date(e):new Date)},timePickerVisible:function(e){var t=this;e&&this.$nextTick((function(){return t.$refs.timepicker.adjustSpinners()}))},selectionMode:function(e){"month"===e?"year"===this.currentView&&"month"===this.currentView||(this.currentView="month"):"dates"===e&&(this.currentView="date")}},methods:{proxyTimePickerDataProperties:function(){var e=this,t=function(t){e.$refs.timepicker.format=t},n=function(t){e.$refs.timepicker.value=t},i=function(t){e.$refs.timepicker.date=t},r=function(t){e.$refs.timepicker.selectableRange=t};this.$watch("value",n),this.$watch("date",i),this.$watch("selectableRange",r),t(this.timeFormat),n(this.value),i(this.date),r(this.selectableRange)},handleClear:function(){this.date=this.getDefaultValue(),this.$emit("pick",null)},emit:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];if(e)if(Array.isArray(e)){var o=e.map((function(e){return t.showTime?Object(so["clearMilliseconds"])(e):Object(so["clearTime"])(e)}));this.$emit.apply(this,["pick",o].concat(i))}else this.$emit.apply(this,["pick",this.showTime?Object(so["clearMilliseconds"])(e):Object(so["clearTime"])(e)].concat(i));else this.$emit.apply(this,["pick",e].concat(i));this.userInputDate=null,this.userInputTime=null},showMonthPicker:function(){this.currentView="month"},showYearPicker:function(){this.currentView="year"},prevMonth:function(){this.date=Object(so["prevMonth"])(this.date)},nextMonth:function(){this.date=Object(so["nextMonth"])(this.date)},prevYear:function(){"year"===this.currentView?this.date=Object(so["prevYear"])(this.date,10):this.date=Object(so["prevYear"])(this.date)},nextYear:function(){"year"===this.currentView?this.date=Object(so["nextYear"])(this.date,10):this.date=Object(so["nextYear"])(this.date)},handleShortcutClick:function(e){e.onClick&&e.onClick(this)},handleTimePick:function(e,t,n){if(Object(so["isDate"])(e)){var i=this.value?Object(so["modifyTime"])(this.value,e.getHours(),e.getMinutes(),e.getSeconds()):Object(so["modifyWithTimeString"])(this.getDefaultValue(),this.defaultTime);this.date=i,this.emit(this.date,!0)}else this.emit(e,!0);n||(this.timePickerVisible=t)},handleTimePickClose:function(){this.timePickerVisible=!1},handleMonthPick:function(e){"month"===this.selectionMode?(this.date=Object(so["modifyDate"])(this.date,this.year,e,1),this.emit(this.date)):(this.date=Object(so["changeYearMonthAndClampDate"])(this.date,this.year,e),this.currentView="date")},handleDatePick:function(e){if("day"===this.selectionMode){var t=this.value?Object(so["modifyDate"])(this.value,e.getFullYear(),e.getMonth(),e.getDate()):Object(so["modifyWithTimeString"])(e,this.defaultTime);this.checkDateWithinRange(t)||(t=Object(so["modifyDate"])(this.selectableRange[0][0],e.getFullYear(),e.getMonth(),e.getDate())),this.date=t,this.emit(this.date,this.showTime)}else"week"===this.selectionMode?this.emit(e.date):"dates"===this.selectionMode&&this.emit(e,!0)},handleYearPick:function(e){"year"===this.selectionMode?(this.date=Object(so["modifyDate"])(this.date,e,0,1),this.emit(this.date)):(this.date=Object(so["changeYearMonthAndClampDate"])(this.date,e,this.month),this.currentView="month")},changeToNow:function(){this.disabledDate&&this.disabledDate(new Date)||!this.checkDateWithinRange(new Date)||(this.date=new Date,this.emit(this.date))},confirm:function(){if("dates"===this.selectionMode)this.emit(this.value);else{var e=this.value?this.value:Object(so["modifyWithTimeString"])(this.getDefaultValue(),this.defaultTime);this.date=new Date(e),this.emit(e)}},resetView:function(){"month"===this.selectionMode?this.currentView="month":"year"===this.selectionMode?this.currentView="year":this.currentView="date"},handleEnter:function(){document.body.addEventListener("keydown",this.handleKeydown)},handleLeave:function(){this.$emit("dodestroy"),document.body.removeEventListener("keydown",this.handleKeydown)},handleKeydown:function(e){var t=e.keyCode,n=[38,40,37,39];this.visible&&!this.timePickerVisible&&(-1!==n.indexOf(t)&&(this.handleKeyControl(t),e.stopPropagation(),e.preventDefault()),13===t&&null===this.userInputDate&&null===this.userInputTime&&this.emit(this.date,!1))},handleKeyControl:function(e){var t={year:{38:-4,40:4,37:-1,39:1,offset:function(e,t){return e.setFullYear(e.getFullYear()+t)}},month:{38:-4,40:4,37:-1,39:1,offset:function(e,t){return e.setMonth(e.getMonth()+t)}},week:{38:-1,40:1,37:-1,39:1,offset:function(e,t){return e.setDate(e.getDate()+7*t)}},day:{38:-7,40:7,37:-1,39:1,offset:function(e,t){return e.setDate(e.getDate()+t)}}},n=this.selectionMode,i=31536e6,r=this.date.getTime(),o=new Date(this.date.getTime());while(Math.abs(r-o.getTime())<=i){var a=t[n];if(a.offset(o,a[e]),"function"!==typeof this.disabledDate||!this.disabledDate(o)){this.date=o,this.$emit("pick",o,!0);break}}},handleVisibleTimeChange:function(e){var t=Object(so["parseDate"])(e,this.timeFormat);t&&this.checkDateWithinRange(t)&&(this.date=Object(so["modifyDate"])(t,this.year,this.month,this.monthDate),this.userInputTime=null,this.$refs.timepicker.value=this.date,this.timePickerVisible=!1,this.emit(this.date,!0))},handleVisibleDateChange:function(e){var t=Object(so["parseDate"])(e,this.dateFormat);if(t){if("function"===typeof this.disabledDate&&this.disabledDate(t))return;this.date=Object(so["modifyTime"])(t,this.date.getHours(),this.date.getMinutes(),this.date.getSeconds()),this.userInputDate=null,this.resetView(),this.emit(this.date,!0)}},isValidValue:function(e){return e&&!isNaN(e)&&("function"!==typeof this.disabledDate||!this.disabledDate(e))&&this.checkDateWithinRange(e)},getDefaultValue:function(){return this.defaultValue?new Date(this.defaultValue):new Date},checkDateWithinRange:function(e){return!(this.selectableRange.length>0)||Object(so["timeWithinRange"])(e,this.selectableRange,this.format||"HH:mm:ss")}},components:{TimePicker:Bo,YearTable:Ko,MonthTable:na,DateTable:da,ElInput:g.a,ElButton:se.a},data:function(){return{popperClass:"",date:new Date,value:"",defaultValue:null,defaultTime:null,showTime:!1,selectionMode:"day",shortcuts:"",visible:!1,currentView:"date",disabledDate:"",cellClassName:"",selectableRange:[],firstDayOfWeek:7,showWeekNumber:!1,timePickerVisible:!1,format:"",arrowControl:!1,userInputDate:null,userInputTime:null}},computed:{year:function(){return this.date.getFullYear()},month:function(){return this.date.getMonth()},week:function(){return Object(so["getWeekNumber"])(this.date)},monthDate:function(){return this.date.getDate()},footerVisible:function(){return this.showTime||"dates"===this.selectionMode},visibleTime:function(){return null!==this.userInputTime?this.userInputTime:Object(so["formatDate"])(this.value||this.defaultValue,this.timeFormat)},visibleDate:function(){return null!==this.userInputDate?this.userInputDate:Object(so["formatDate"])(this.value||this.defaultValue,this.dateFormat)},yearLabel:function(){var e=this.t("el.datepicker.year");if("year"===this.currentView){var t=10*Math.floor(this.year/10);return e?t+" "+e+" - "+(t+9)+" "+e:t+" - "+(t+9)}return this.year+" "+e},timeFormat:function(){return this.format?Object(so["extractTimeFormat"])(this.format):"HH:mm:ss"},dateFormat:function(){return this.format?Object(so["extractDateFormat"])(this.format):"yyyy-MM-dd"}}},fa=ha,pa=l(fa,To,Eo,!1,null,null,null);pa.options.__file="packages/date-picker/src/panel/date.vue";var ma=pa.exports,ga=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-range-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts,"has-time":e.showTime},e.popperClass]},[n("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?n("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,i){return n("button",{key:i,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(n){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),n("div",{staticClass:"el-picker-panel__body"},[e.showTime?n("div",{staticClass:"el-date-range-picker__time-header"},[n("span",{staticClass:"el-date-range-picker__editors-wrap"},[n("span",{staticClass:"el-date-range-picker__time-picker-wrap"},[n("el-input",{ref:"minInput",staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.startDate"),value:e.minVisibleDate},on:{input:function(t){return e.handleDateInput(t,"min")},change:function(t){return e.handleDateChange(t,"min")}}})],1),n("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleMinTimeClose,expression:"handleMinTimeClose"}],staticClass:"el-date-range-picker__time-picker-wrap"},[n("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.startTime"),value:e.minVisibleTime},on:{focus:function(t){e.minTimePickerVisible=!0},input:function(t){return e.handleTimeInput(t,"min")},change:function(t){return e.handleTimeChange(t,"min")}}}),n("time-picker",{ref:"minTimePicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.minTimePickerVisible},on:{pick:e.handleMinTimePick,mounted:function(t){e.$refs.minTimePicker.format=e.timeFormat}}})],1)]),n("span",{staticClass:"el-icon-arrow-right"}),n("span",{staticClass:"el-date-range-picker__editors-wrap is-right"},[n("span",{staticClass:"el-date-range-picker__time-picker-wrap"},[n("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.endDate"),value:e.maxVisibleDate,readonly:!e.minDate},on:{input:function(t){return e.handleDateInput(t,"max")},change:function(t){return e.handleDateChange(t,"max")}}})],1),n("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleMaxTimeClose,expression:"handleMaxTimeClose"}],staticClass:"el-date-range-picker__time-picker-wrap"},[n("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.endTime"),value:e.maxVisibleTime,readonly:!e.minDate},on:{focus:function(t){e.minDate&&(e.maxTimePickerVisible=!0)},input:function(t){return e.handleTimeInput(t,"max")},change:function(t){return e.handleTimeChange(t,"max")}}}),n("time-picker",{ref:"maxTimePicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.maxTimePickerVisible},on:{pick:e.handleMaxTimePick,mounted:function(t){e.$refs.maxTimePicker.format=e.timeFormat}}})],1)])]):e._e(),n("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-left"},[n("div",{staticClass:"el-date-range-picker__header"},[n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevYear}}),n("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevMonth}}),e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.leftNextYear}}):e._e(),e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-right",class:{"is-disabled":!e.enableMonthArrow},attrs:{type:"button",disabled:!e.enableMonthArrow},on:{click:e.leftNextMonth}}):e._e(),n("div",[e._v(e._s(e.leftLabel))])]),n("date-table",{attrs:{"selection-mode":"range",date:e.leftDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate,"cell-class-name":e.cellClassName,"first-day-of-week":e.firstDayOfWeek},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1),n("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-right"},[n("div",{staticClass:"el-date-range-picker__header"},[e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.rightPrevYear}}):e._e(),e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-left",class:{"is-disabled":!e.enableMonthArrow},attrs:{type:"button",disabled:!e.enableMonthArrow},on:{click:e.rightPrevMonth}}):e._e(),n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",attrs:{type:"button"},on:{click:e.rightNextYear}}),n("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-right",attrs:{type:"button"},on:{click:e.rightNextMonth}}),n("div",[e._v(e._s(e.rightLabel))])]),n("date-table",{attrs:{"selection-mode":"range",date:e.rightDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate,"cell-class-name":e.cellClassName,"first-day-of-week":e.firstDayOfWeek},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1)])],2),e.showTime?n("div",{staticClass:"el-picker-panel__footer"},[n("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{size:"mini",type:"text"},on:{click:e.handleClear}},[e._v("\n        "+e._s(e.t("el.datepicker.clear"))+"\n      ")]),n("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{plain:"",size:"mini",disabled:e.btnDisabled},on:{click:function(t){e.handleConfirm(!1)}}},[e._v("\n        "+e._s(e.t("el.datepicker.confirm"))+"\n      ")])],1):e._e()])])},va=[];ga._withStripped=!0;var ba=function(e){return Array.isArray(e)?[new Date(e[0]),new Date(e[1])]:e?[new Date(e),Object(so["nextDate"])(new Date(e),1)]:[new Date,Object(so["nextDate"])(new Date,1)]},ya={mixins:[b.a],directives:{Clickoutside:B.a},computed:{btnDisabled:function(){return!(this.minDate&&this.maxDate&&!this.selecting&&this.isValidValue([this.minDate,this.maxDate]))},leftLabel:function(){return this.leftDate.getFullYear()+" "+this.t("el.datepicker.year")+" "+this.t("el.datepicker.month"+(this.leftDate.getMonth()+1))},rightLabel:function(){return this.rightDate.getFullYear()+" "+this.t("el.datepicker.year")+" "+this.t("el.datepicker.month"+(this.rightDate.getMonth()+1))},leftYear:function(){return this.leftDate.getFullYear()},leftMonth:function(){return this.leftDate.getMonth()},leftMonthDate:function(){return this.leftDate.getDate()},rightYear:function(){return this.rightDate.getFullYear()},rightMonth:function(){return this.rightDate.getMonth()},rightMonthDate:function(){return this.rightDate.getDate()},minVisibleDate:function(){return null!==this.dateUserInput.min?this.dateUserInput.min:this.minDate?Object(so["formatDate"])(this.minDate,this.dateFormat):""},maxVisibleDate:function(){return null!==this.dateUserInput.max?this.dateUserInput.max:this.maxDate||this.minDate?Object(so["formatDate"])(this.maxDate||this.minDate,this.dateFormat):""},minVisibleTime:function(){return null!==this.timeUserInput.min?this.timeUserInput.min:this.minDate?Object(so["formatDate"])(this.minDate,this.timeFormat):""},maxVisibleTime:function(){return null!==this.timeUserInput.max?this.timeUserInput.max:this.maxDate||this.minDate?Object(so["formatDate"])(this.maxDate||this.minDate,this.timeFormat):""},timeFormat:function(){return this.format?Object(so["extractTimeFormat"])(this.format):"HH:mm:ss"},dateFormat:function(){return this.format?Object(so["extractDateFormat"])(this.format):"yyyy-MM-dd"},enableMonthArrow:function(){var e=(this.leftMonth+1)%12,t=this.leftMonth+1>=12?1:0;return this.unlinkPanels&&new Date(this.leftYear+t,e)<new Date(this.rightYear,this.rightMonth)},enableYearArrow:function(){return this.unlinkPanels&&12*this.rightYear+this.rightMonth-(12*this.leftYear+this.leftMonth+1)>=12}},data:function(){return{popperClass:"",value:[],defaultValue:null,defaultTime:null,minDate:"",maxDate:"",leftDate:new Date,rightDate:Object(so["nextMonth"])(new Date),rangeState:{endDate:null,selecting:!1,row:null,column:null},showTime:!1,shortcuts:"",visible:"",disabledDate:"",cellClassName:"",firstDayOfWeek:7,minTimePickerVisible:!1,maxTimePickerVisible:!1,format:"",arrowControl:!1,unlinkPanels:!1,dateUserInput:{min:null,max:null},timeUserInput:{min:null,max:null}}},watch:{minDate:function(e){var t=this;this.dateUserInput.min=null,this.timeUserInput.min=null,this.$nextTick((function(){if(t.$refs.maxTimePicker&&t.maxDate&&t.maxDate<t.minDate){var e="HH:mm:ss";t.$refs.maxTimePicker.selectableRange=[[Object(so["parseDate"])(Object(so["formatDate"])(t.minDate,e),e),Object(so["parseDate"])("23:59:59",e)]]}})),e&&this.$refs.minTimePicker&&(this.$refs.minTimePicker.date=e,this.$refs.minTimePicker.value=e)},maxDate:function(e){this.dateUserInput.max=null,this.timeUserInput.max=null,e&&this.$refs.maxTimePicker&&(this.$refs.maxTimePicker.date=e,this.$refs.maxTimePicker.value=e)},minTimePickerVisible:function(e){var t=this;e&&this.$nextTick((function(){t.$refs.minTimePicker.date=t.minDate,t.$refs.minTimePicker.value=t.minDate,t.$refs.minTimePicker.adjustSpinners()}))},maxTimePickerVisible:function(e){var t=this;e&&this.$nextTick((function(){t.$refs.maxTimePicker.date=t.maxDate,t.$refs.maxTimePicker.value=t.maxDate,t.$refs.maxTimePicker.adjustSpinners()}))},value:function(e){if(e){if(Array.isArray(e))if(this.minDate=Object(so["isDate"])(e[0])?new Date(e[0]):null,this.maxDate=Object(so["isDate"])(e[1])?new Date(e[1]):null,this.minDate)if(this.leftDate=this.minDate,this.unlinkPanels&&this.maxDate){var t=this.minDate.getFullYear(),n=this.minDate.getMonth(),i=this.maxDate.getFullYear(),r=this.maxDate.getMonth();this.rightDate=t===i&&n===r?Object(so["nextMonth"])(this.maxDate):this.maxDate}else this.rightDate=Object(so["nextMonth"])(this.leftDate);else this.leftDate=ba(this.defaultValue)[0],this.rightDate=Object(so["nextMonth"])(this.leftDate)}else this.minDate=null,this.maxDate=null},defaultValue:function(e){if(!Array.isArray(this.value)){var t=ba(e),n=t[0],i=t[1];this.leftDate=n,this.rightDate=e&&e[1]&&this.unlinkPanels?i:Object(so["nextMonth"])(this.leftDate)}}},methods:{handleClear:function(){this.minDate=null,this.maxDate=null,this.leftDate=ba(this.defaultValue)[0],this.rightDate=Object(so["nextMonth"])(this.leftDate),this.$emit("pick",null)},handleChangeRange:function(e){this.minDate=e.minDate,this.maxDate=e.maxDate,this.rangeState=e.rangeState},handleDateInput:function(e,t){if(this.dateUserInput[t]=e,e.length===this.dateFormat.length){var n=Object(so["parseDate"])(e,this.dateFormat);if(n){if("function"===typeof this.disabledDate&&this.disabledDate(new Date(n)))return;"min"===t?(this.minDate=Object(so["modifyDate"])(this.minDate||new Date,n.getFullYear(),n.getMonth(),n.getDate()),this.leftDate=new Date(n),this.unlinkPanels||(this.rightDate=Object(so["nextMonth"])(this.leftDate))):(this.maxDate=Object(so["modifyDate"])(this.maxDate||new Date,n.getFullYear(),n.getMonth(),n.getDate()),this.rightDate=new Date(n),this.unlinkPanels||(this.leftDate=Object(so["prevMonth"])(n)))}}},handleDateChange:function(e,t){var n=Object(so["parseDate"])(e,this.dateFormat);n&&("min"===t?(this.minDate=Object(so["modifyDate"])(this.minDate,n.getFullYear(),n.getMonth(),n.getDate()),this.minDate>this.maxDate&&(this.maxDate=this.minDate)):(this.maxDate=Object(so["modifyDate"])(this.maxDate,n.getFullYear(),n.getMonth(),n.getDate()),this.maxDate<this.minDate&&(this.minDate=this.maxDate)))},handleTimeInput:function(e,t){var n=this;if(this.timeUserInput[t]=e,e.length===this.timeFormat.length){var i=Object(so["parseDate"])(e,this.timeFormat);i&&("min"===t?(this.minDate=Object(so["modifyTime"])(this.minDate,i.getHours(),i.getMinutes(),i.getSeconds()),this.$nextTick((function(e){return n.$refs.minTimePicker.adjustSpinners()}))):(this.maxDate=Object(so["modifyTime"])(this.maxDate,i.getHours(),i.getMinutes(),i.getSeconds()),this.$nextTick((function(e){return n.$refs.maxTimePicker.adjustSpinners()}))))}},handleTimeChange:function(e,t){var n=Object(so["parseDate"])(e,this.timeFormat);n&&("min"===t?(this.minDate=Object(so["modifyTime"])(this.minDate,n.getHours(),n.getMinutes(),n.getSeconds()),this.minDate>this.maxDate&&(this.maxDate=this.minDate),this.$refs.minTimePicker.value=this.minDate,this.minTimePickerVisible=!1):(this.maxDate=Object(so["modifyTime"])(this.maxDate,n.getHours(),n.getMinutes(),n.getSeconds()),this.maxDate<this.minDate&&(this.minDate=this.maxDate),this.$refs.maxTimePicker.value=this.minDate,this.maxTimePickerVisible=!1))},handleRangePick:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.defaultTime||[],r=Object(so["modifyWithTimeString"])(e.minDate,i[0]),o=Object(so["modifyWithTimeString"])(e.maxDate,i[1]);this.maxDate===o&&this.minDate===r||(this.onPick&&this.onPick(e),this.maxDate=o,this.minDate=r,setTimeout((function(){t.maxDate=o,t.minDate=r}),10),n&&!this.showTime&&this.handleConfirm())},handleShortcutClick:function(e){e.onClick&&e.onClick(this)},handleMinTimePick:function(e,t,n){this.minDate=this.minDate||new Date,e&&(this.minDate=Object(so["modifyTime"])(this.minDate,e.getHours(),e.getMinutes(),e.getSeconds())),n||(this.minTimePickerVisible=t),(!this.maxDate||this.maxDate&&this.maxDate.getTime()<this.minDate.getTime())&&(this.maxDate=new Date(this.minDate))},handleMinTimeClose:function(){this.minTimePickerVisible=!1},handleMaxTimePick:function(e,t,n){this.maxDate&&e&&(this.maxDate=Object(so["modifyTime"])(this.maxDate,e.getHours(),e.getMinutes(),e.getSeconds())),n||(this.maxTimePickerVisible=t),this.maxDate&&this.minDate&&this.minDate.getTime()>this.maxDate.getTime()&&(this.minDate=new Date(this.maxDate))},handleMaxTimeClose:function(){this.maxTimePickerVisible=!1},leftPrevYear:function(){this.leftDate=Object(so["prevYear"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(so["nextMonth"])(this.leftDate))},leftPrevMonth:function(){this.leftDate=Object(so["prevMonth"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(so["nextMonth"])(this.leftDate))},rightNextYear:function(){this.unlinkPanels?this.rightDate=Object(so["nextYear"])(this.rightDate):(this.leftDate=Object(so["nextYear"])(this.leftDate),this.rightDate=Object(so["nextMonth"])(this.leftDate))},rightNextMonth:function(){this.unlinkPanels?this.rightDate=Object(so["nextMonth"])(this.rightDate):(this.leftDate=Object(so["nextMonth"])(this.leftDate),this.rightDate=Object(so["nextMonth"])(this.leftDate))},leftNextYear:function(){this.leftDate=Object(so["nextYear"])(this.leftDate)},leftNextMonth:function(){this.leftDate=Object(so["nextMonth"])(this.leftDate)},rightPrevYear:function(){this.rightDate=Object(so["prevYear"])(this.rightDate)},rightPrevMonth:function(){this.rightDate=Object(so["prevMonth"])(this.rightDate)},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isValidValue([this.minDate,this.maxDate])&&this.$emit("pick",[this.minDate,this.maxDate],e)},isValidValue:function(e){return Array.isArray(e)&&e&&e[0]&&e[1]&&Object(so["isDate"])(e[0])&&Object(so["isDate"])(e[1])&&e[0].getTime()<=e[1].getTime()&&("function"!==typeof this.disabledDate||!this.disabledDate(e[0])&&!this.disabledDate(e[1]))},resetView:function(){this.minDate&&null==this.maxDate&&(this.rangeState.selecting=!1),this.minDate=this.value&&Object(so["isDate"])(this.value[0])?new Date(this.value[0]):null,this.maxDate=this.value&&Object(so["isDate"])(this.value[0])?new Date(this.value[1]):null}},components:{TimePicker:Bo,DateTable:da,ElInput:g.a,ElButton:se.a}},wa=ya,xa=l(wa,ga,va,!1,null,null,null);xa.options.__file="packages/date-picker/src/panel/date-range.vue";var _a=xa.exports,ka=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-range-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts},e.popperClass]},[n("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?n("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,i){return n("button",{key:i,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(n){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),n("div",{staticClass:"el-picker-panel__body"},[n("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-left"},[n("div",{staticClass:"el-date-range-picker__header"},[n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevYear}}),e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.leftNextYear}}):e._e(),n("div",[e._v(e._s(e.leftLabel))])]),n("month-table",{attrs:{"selection-mode":"range",date:e.leftDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1),n("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-right"},[n("div",{staticClass:"el-date-range-picker__header"},[e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.rightPrevYear}}):e._e(),n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",attrs:{type:"button"},on:{click:e.rightNextYear}}),n("div",[e._v(e._s(e.rightLabel))])]),n("month-table",{attrs:{"selection-mode":"range",date:e.rightDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1)])],2)])])},Ca=[];ka._withStripped=!0;var Sa=function(e){return Array.isArray(e)?[new Date(e[0]),new Date(e[1])]:e?[new Date(e),Object(so["nextMonth"])(new Date(e))]:[new Date,Object(so["nextMonth"])(new Date)]},Oa={mixins:[b.a],directives:{Clickoutside:B.a},computed:{btnDisabled:function(){return!(this.minDate&&this.maxDate&&!this.selecting&&this.isValidValue([this.minDate,this.maxDate]))},leftLabel:function(){return this.leftDate.getFullYear()+" "+this.t("el.datepicker.year")},rightLabel:function(){return this.rightDate.getFullYear()+" "+this.t("el.datepicker.year")},leftYear:function(){return this.leftDate.getFullYear()},rightYear:function(){return this.rightDate.getFullYear()===this.leftDate.getFullYear()?this.leftDate.getFullYear()+1:this.rightDate.getFullYear()},enableYearArrow:function(){return this.unlinkPanels&&this.rightYear>this.leftYear+1}},data:function(){return{popperClass:"",value:[],defaultValue:null,defaultTime:null,minDate:"",maxDate:"",leftDate:new Date,rightDate:Object(so["nextYear"])(new Date),rangeState:{endDate:null,selecting:!1,row:null,column:null},shortcuts:"",visible:"",disabledDate:"",format:"",arrowControl:!1,unlinkPanels:!1}},watch:{value:function(e){if(e){if(Array.isArray(e))if(this.minDate=Object(so["isDate"])(e[0])?new Date(e[0]):null,this.maxDate=Object(so["isDate"])(e[1])?new Date(e[1]):null,this.minDate)if(this.leftDate=this.minDate,this.unlinkPanels&&this.maxDate){var t=this.minDate.getFullYear(),n=this.maxDate.getFullYear();this.rightDate=t===n?Object(so["nextYear"])(this.maxDate):this.maxDate}else this.rightDate=Object(so["nextYear"])(this.leftDate);else this.leftDate=Sa(this.defaultValue)[0],this.rightDate=Object(so["nextYear"])(this.leftDate)}else this.minDate=null,this.maxDate=null},defaultValue:function(e){if(!Array.isArray(this.value)){var t=Sa(e),n=t[0],i=t[1];this.leftDate=n,this.rightDate=e&&e[1]&&n.getFullYear()!==i.getFullYear()&&this.unlinkPanels?i:Object(so["nextYear"])(this.leftDate)}}},methods:{handleClear:function(){this.minDate=null,this.maxDate=null,this.leftDate=Sa(this.defaultValue)[0],this.rightDate=Object(so["nextYear"])(this.leftDate),this.$emit("pick",null)},handleChangeRange:function(e){this.minDate=e.minDate,this.maxDate=e.maxDate,this.rangeState=e.rangeState},handleRangePick:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.defaultTime||[],r=Object(so["modifyWithTimeString"])(e.minDate,i[0]),o=Object(so["modifyWithTimeString"])(e.maxDate,i[1]);this.maxDate===o&&this.minDate===r||(this.onPick&&this.onPick(e),this.maxDate=o,this.minDate=r,setTimeout((function(){t.maxDate=o,t.minDate=r}),10),n&&this.handleConfirm())},handleShortcutClick:function(e){e.onClick&&e.onClick(this)},leftPrevYear:function(){this.leftDate=Object(so["prevYear"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(so["prevYear"])(this.rightDate))},rightNextYear:function(){this.unlinkPanels||(this.leftDate=Object(so["nextYear"])(this.leftDate)),this.rightDate=Object(so["nextYear"])(this.rightDate)},leftNextYear:function(){this.leftDate=Object(so["nextYear"])(this.leftDate)},rightPrevYear:function(){this.rightDate=Object(so["prevYear"])(this.rightDate)},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isValidValue([this.minDate,this.maxDate])&&this.$emit("pick",[this.minDate,this.maxDate],e)},isValidValue:function(e){return Array.isArray(e)&&e&&e[0]&&e[1]&&Object(so["isDate"])(e[0])&&Object(so["isDate"])(e[1])&&e[0].getTime()<=e[1].getTime()&&("function"!==typeof this.disabledDate||!this.disabledDate(e[0])&&!this.disabledDate(e[1]))},resetView:function(){this.minDate=this.value&&Object(so["isDate"])(this.value[0])?new Date(this.value[0]):null,this.maxDate=this.value&&Object(so["isDate"])(this.value[0])?new Date(this.value[1]):null}},components:{MonthTable:na,ElInput:g.a,ElButton:se.a}},Ta=Oa,Ea=l(Ta,ka,Ca,!1,null,null,null);Ea.options.__file="packages/date-picker/src/panel/month-range.vue";var Da=Ea.exports,Ma=function(e){return"daterange"===e||"datetimerange"===e?_a:"monthrange"===e?Da:ma},Aa={mixins:[Oo],name:"ElDatePicker",props:{type:{type:String,default:"date"},timeArrowControl:Boolean},watch:{type:function(e){this.picker?(this.unmountPicker(),this.panel=Ma(e),this.mountPicker()):this.panel=Ma(e)}},created:function(){this.panel=Ma(this.type)},install:function(e){e.component(Aa.name,Aa)}},Na=Aa,Ia=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],ref:"popper",staticClass:"el-picker-panel time-select el-popper",class:e.popperClass,style:{width:e.width+"px"}},[n("el-scrollbar",{attrs:{noresize:"","wrap-class":"el-picker-panel__content"}},e._l(e.items,(function(t){return n("div",{key:t.value,staticClass:"time-select-item",class:{selected:e.value===t.value,disabled:t.disabled,default:t.value===e.defaultValue},attrs:{disabled:t.disabled},on:{click:function(n){e.handleClick(t)}}},[e._v(e._s(t.value))])})),0)],1)])},La=[];Ia._withStripped=!0;var Pa=function(e){var t=(e||"").split(":");if(t.length>=2){var n=parseInt(t[0],10),i=parseInt(t[1],10);return{hours:n,minutes:i}}return null},$a=function(e,t){var n=Pa(e),i=Pa(t),r=n.minutes+60*n.hours,o=i.minutes+60*i.hours;return r===o?0:r>o?1:-1},Fa=function(e){return(e.hours<10?"0"+e.hours:e.hours)+":"+(e.minutes<10?"0"+e.minutes:e.minutes)},ja=function(e,t){var n=Pa(e),i=Pa(t),r={hours:n.hours,minutes:n.minutes};return r.minutes+=i.minutes,r.hours+=i.hours,r.hours+=Math.floor(r.minutes/60),r.minutes=r.minutes%60,Fa(r)},za={components:{ElScrollbar:U.a},watch:{value:function(e){var t=this;e&&this.$nextTick((function(){return t.scrollToOption()}))}},methods:{handleClick:function(e){e.disabled||this.$emit("pick",e.value)},handleClear:function(){this.$emit("pick",null)},scrollToOption:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:".selected",t=this.$refs.popper.querySelector(".el-picker-panel__content");oi()(t,t.querySelector(e))},handleMenuEnter:function(){var e=this,t=-1!==this.items.map((function(e){return e.value})).indexOf(this.value),n=-1!==this.items.map((function(e){return e.value})).indexOf(this.defaultValue),i=(t?".selected":n&&".default")||".time-select-item:not(.disabled)";this.$nextTick((function(){return e.scrollToOption(i)}))},scrollDown:function(e){var t=this.items,n=t.length,i=t.length,r=t.map((function(e){return e.value})).indexOf(this.value);while(i--)if(r=(r+e+n)%n,!t[r].disabled)return void this.$emit("pick",t[r].value,!0)},isValidValue:function(e){return-1!==this.items.filter((function(e){return!e.disabled})).map((function(e){return e.value})).indexOf(e)},handleKeydown:function(e){var t=e.keyCode;if(38===t||40===t){var n={40:1,38:-1},i=n[t.toString()];return this.scrollDown(i),void e.stopPropagation()}}},data:function(){return{popperClass:"",start:"09:00",end:"18:00",step:"00:30",value:"",defaultValue:"",visible:!1,minTime:"",maxTime:"",width:0}},computed:{items:function(){var e=this.start,t=this.end,n=this.step,i=[];if(e&&t&&n){var r=e;while($a(r,t)<=0)i.push({value:r,disabled:$a(r,this.minTime||"-1:-1")<=0||$a(r,this.maxTime||"100:100")>=0}),r=ja(r,n)}return i}}},Ba=za,Ra=l(Ba,Ia,La,!1,null,null,null);Ra.options.__file="packages/date-picker/src/panel/time-select.vue";var Va=Ra.exports,Ha={mixins:[Oo],name:"ElTimeSelect",componentName:"ElTimeSelect",props:{type:{type:String,default:"time-select"}},beforeCreate:function(){this.panel=Va},install:function(e){e.component(Ha.name,Ha)}},Wa=Ha,qa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-time-range-picker el-picker-panel el-popper",class:e.popperClass},[n("div",{staticClass:"el-time-range-picker__content"},[n("div",{staticClass:"el-time-range-picker__cell"},[n("div",{staticClass:"el-time-range-picker__header"},[e._v(e._s(e.t("el.datepicker.startTime")))]),n("div",{staticClass:"el-time-range-picker__body el-time-panel__content",class:{"has-seconds":e.showSeconds,"is-arrow":e.arrowControl}},[n("time-spinner",{ref:"minSpinner",attrs:{"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,"arrow-control":e.arrowControl,date:e.minDate},on:{change:e.handleMinChange,"select-range":e.setMinSelectionRange}})],1)]),n("div",{staticClass:"el-time-range-picker__cell"},[n("div",{staticClass:"el-time-range-picker__header"},[e._v(e._s(e.t("el.datepicker.endTime")))]),n("div",{staticClass:"el-time-range-picker__body el-time-panel__content",class:{"has-seconds":e.showSeconds,"is-arrow":e.arrowControl}},[n("time-spinner",{ref:"maxSpinner",attrs:{"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,"arrow-control":e.arrowControl,date:e.maxDate},on:{change:e.handleMaxChange,"select-range":e.setMaxSelectionRange}})],1)])]),n("div",{staticClass:"el-time-panel__footer"},[n("button",{staticClass:"el-time-panel__btn cancel",attrs:{type:"button"},on:{click:function(t){e.handleCancel()}}},[e._v(e._s(e.t("el.datepicker.cancel")))]),n("button",{staticClass:"el-time-panel__btn confirm",attrs:{type:"button",disabled:e.btnDisabled},on:{click:function(t){e.handleConfirm()}}},[e._v(e._s(e.t("el.datepicker.confirm")))])])])])},Ua=[];qa._withStripped=!0;var Ka=Object(so["parseDate"])("00:00:00","HH:mm:ss"),Ga=Object(so["parseDate"])("23:59:59","HH:mm:ss"),Ya=function(e){return Object(so["modifyDate"])(Ka,e.getFullYear(),e.getMonth(),e.getDate())},Xa=function(e){return Object(so["modifyDate"])(Ga,e.getFullYear(),e.getMonth(),e.getDate())},Za=function(e,t){return new Date(Math.min(e.getTime()+t,Xa(e).getTime()))},Qa={mixins:[b.a],components:{TimeSpinner:$o},computed:{showSeconds:function(){return-1!==(this.format||"").indexOf("ss")},offset:function(){return this.showSeconds?11:8},spinner:function(){return this.selectionRange[0]<this.offset?this.$refs.minSpinner:this.$refs.maxSpinner},btnDisabled:function(){return this.minDate.getTime()>this.maxDate.getTime()},amPmMode:function(){return-1!==(this.format||"").indexOf("A")?"A":-1!==(this.format||"").indexOf("a")?"a":""}},data:function(){return{popperClass:"",minDate:new Date,maxDate:new Date,value:[],oldValue:[new Date,new Date],defaultValue:null,format:"HH:mm:ss",visible:!1,selectionRange:[0,2],arrowControl:!1}},watch:{value:function(e){Array.isArray(e)?(this.minDate=new Date(e[0]),this.maxDate=new Date(e[1])):Array.isArray(this.defaultValue)?(this.minDate=new Date(this.defaultValue[0]),this.maxDate=new Date(this.defaultValue[1])):this.defaultValue?(this.minDate=new Date(this.defaultValue),this.maxDate=Za(new Date(this.defaultValue),36e5)):(this.minDate=new Date,this.maxDate=Za(new Date,36e5))},visible:function(e){var t=this;e&&(this.oldValue=this.value,this.$nextTick((function(){return t.$refs.minSpinner.emitSelectRange("hours")})))}},methods:{handleClear:function(){this.$emit("pick",null)},handleCancel:function(){this.$emit("pick",this.oldValue)},handleMinChange:function(e){this.minDate=Object(so["clearMilliseconds"])(e),this.handleChange()},handleMaxChange:function(e){this.maxDate=Object(so["clearMilliseconds"])(e),this.handleChange()},handleChange:function(){this.isValidValue([this.minDate,this.maxDate])&&(this.$refs.minSpinner.selectableRange=[[Ya(this.minDate),this.maxDate]],this.$refs.maxSpinner.selectableRange=[[this.minDate,Xa(this.maxDate)]],this.$emit("pick",[this.minDate,this.maxDate],!0))},setMinSelectionRange:function(e,t){this.$emit("select-range",e,t,"min"),this.selectionRange=[e,t]},setMaxSelectionRange:function(e,t){this.$emit("select-range",e,t,"max"),this.selectionRange=[e+this.offset,t+this.offset]},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.$refs.minSpinner.selectableRange,n=this.$refs.maxSpinner.selectableRange;this.minDate=Object(so["limitTimeRange"])(this.minDate,t,this.format),this.maxDate=Object(so["limitTimeRange"])(this.maxDate,n,this.format),this.$emit("pick",[this.minDate,this.maxDate],e)},adjustSpinners:function(){this.$refs.minSpinner.adjustSpinners(),this.$refs.maxSpinner.adjustSpinners()},changeSelectionRange:function(e){var t=this.showSeconds?[0,3,6,11,14,17]:[0,3,8,11],n=["hours","minutes"].concat(this.showSeconds?["seconds"]:[]),i=t.indexOf(this.selectionRange[0]),r=(i+e+t.length)%t.length,o=t.length/2;r<o?this.$refs.minSpinner.emitSelectRange(n[r]):this.$refs.maxSpinner.emitSelectRange(n[r-o])},isValidValue:function(e){return Array.isArray(e)&&Object(so["timeWithinRange"])(this.minDate,this.$refs.minSpinner.selectableRange)&&Object(so["timeWithinRange"])(this.maxDate,this.$refs.maxSpinner.selectableRange)},handleKeydown:function(e){var t=e.keyCode,n={38:-1,40:1,37:-1,39:1};if(37===t||39===t){var i=n[t];return this.changeSelectionRange(i),void e.preventDefault()}if(38===t||40===t){var r=n[t];return this.spinner.scrollDown(r),void e.preventDefault()}}}},Ja=Qa,es=l(Ja,qa,Ua,!1,null,null,null);es.options.__file="packages/date-picker/src/panel/time-range.vue";var ts=es.exports,ns={mixins:[Oo],name:"ElTimePicker",props:{isRange:Boolean,arrowControl:Boolean},data:function(){return{type:""}},watch:{isRange:function(e){this.picker?(this.unmountPicker(),this.type=e?"timerange":"time",this.panel=e?ts:Bo,this.mountPicker()):(this.type=e?"timerange":"time",this.panel=e?ts:Bo)}},created:function(){this.type=this.isRange?"timerange":"time",this.panel=this.isRange?ts:Bo},install:function(e){e.component(ns.name,ns)}},is=ns,rs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",[n("transition",{attrs:{name:e.transition},on:{"after-enter":e.handleAfterEnter,"after-leave":e.handleAfterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.disabled&&e.showPopper,expression:"!disabled && showPopper"}],ref:"popper",staticClass:"el-popover el-popper",class:[e.popperClass,e.content&&"el-popover--plain"],style:{width:e.width+"px"},attrs:{role:"tooltip",id:e.tooltipId,"aria-hidden":e.disabled||!e.showPopper?"true":"false"}},[e.title?n("div",{staticClass:"el-popover__title",domProps:{textContent:e._s(e.title)}}):e._e(),e._t("default",[e._v(e._s(e.content))])],2)]),e._t("reference")],2)},os=[];rs._withStripped=!0;var as={name:"ElPopover",mixins:[W.a],props:{trigger:{type:String,default:"click",validator:function(e){return["click","focus","hover","manual"].indexOf(e)>-1}},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:200},title:String,disabled:Boolean,content:String,reference:{},popperClass:String,width:{},visibleArrow:{default:!0},arrowOffset:{type:Number,default:0},transition:{type:String,default:"fade-in-linear"},tabindex:{type:Number,default:0}},computed:{tooltipId:function(){return"el-popover-"+Object(y["generateId"])()}},watch:{showPopper:function(e){this.disabled||(e?this.$emit("show"):this.$emit("hide"))}},mounted:function(){var e=this,t=this.referenceElm=this.reference||this.$refs.reference,n=this.popper||this.$refs.popper;!t&&this.$slots.reference&&this.$slots.reference[0]&&(t=this.referenceElm=this.$slots.reference[0].elm),t&&(Object(ze["addClass"])(t,"el-popover__reference"),t.setAttribute("aria-describedby",this.tooltipId),t.setAttribute("tabindex",this.tabindex),n.setAttribute("tabindex",0),"click"!==this.trigger&&(Object(ze["on"])(t,"focusin",(function(){e.handleFocus();var n=t.__vue__;n&&"function"===typeof n.focus&&n.focus()})),Object(ze["on"])(n,"focusin",this.handleFocus),Object(ze["on"])(t,"focusout",this.handleBlur),Object(ze["on"])(n,"focusout",this.handleBlur)),Object(ze["on"])(t,"keydown",this.handleKeydown),Object(ze["on"])(t,"click",this.handleClick)),"click"===this.trigger?(Object(ze["on"])(t,"click",this.doToggle),Object(ze["on"])(document,"click",this.handleDocumentClick)):"hover"===this.trigger?(Object(ze["on"])(t,"mouseenter",this.handleMouseEnter),Object(ze["on"])(n,"mouseenter",this.handleMouseEnter),Object(ze["on"])(t,"mouseleave",this.handleMouseLeave),Object(ze["on"])(n,"mouseleave",this.handleMouseLeave)):"focus"===this.trigger&&(this.tabindex<0&&console.warn("[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key"),t.querySelector("input, textarea")?(Object(ze["on"])(t,"focusin",this.doShow),Object(ze["on"])(t,"focusout",this.doClose)):(Object(ze["on"])(t,"mousedown",this.doShow),Object(ze["on"])(t,"mouseup",this.doClose)))},beforeDestroy:function(){this.cleanup()},deactivated:function(){this.cleanup()},methods:{doToggle:function(){this.showPopper=!this.showPopper},doShow:function(){this.showPopper=!0},doClose:function(){this.showPopper=!1},handleFocus:function(){Object(ze["addClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!0)},handleClick:function(){Object(ze["removeClass"])(this.referenceElm,"focusing")},handleBlur:function(){Object(ze["removeClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!1)},handleMouseEnter:function(){var e=this;clearTimeout(this._timer),this.openDelay?this._timer=setTimeout((function(){e.showPopper=!0}),this.openDelay):this.showPopper=!0},handleKeydown:function(e){27===e.keyCode&&"manual"!==this.trigger&&this.doClose()},handleMouseLeave:function(){var e=this;clearTimeout(this._timer),this.closeDelay?this._timer=setTimeout((function(){e.showPopper=!1}),this.closeDelay):this.showPopper=!1},handleDocumentClick:function(e){var t=this.reference||this.$refs.reference,n=this.popper||this.$refs.popper;!t&&this.$slots.reference&&this.$slots.reference[0]&&(t=this.referenceElm=this.$slots.reference[0].elm),this.$el&&t&&!this.$el.contains(e.target)&&!t.contains(e.target)&&n&&!n.contains(e.target)&&(this.showPopper=!1)},handleAfterEnter:function(){this.$emit("after-enter")},handleAfterLeave:function(){this.$emit("after-leave"),this.doDestroy()},cleanup:function(){(this.openDelay||this.closeDelay)&&clearTimeout(this._timer)}},destroyed:function(){var e=this.reference;Object(ze["off"])(e,"click",this.doToggle),Object(ze["off"])(e,"mouseup",this.doClose),Object(ze["off"])(e,"mousedown",this.doShow),Object(ze["off"])(e,"focusin",this.doShow),Object(ze["off"])(e,"focusout",this.doClose),Object(ze["off"])(e,"mousedown",this.doShow),Object(ze["off"])(e,"mouseup",this.doClose),Object(ze["off"])(e,"mouseleave",this.handleMouseLeave),Object(ze["off"])(e,"mouseenter",this.handleMouseEnter),Object(ze["off"])(document,"click",this.handleDocumentClick)}},ss=as,ls=l(ss,rs,os,!1,null,null,null);ls.options.__file="packages/popover/src/main.vue";var cs=ls.exports,us=function(e,t,n){var i=t.expression?t.value:t.arg,r=n.context.$refs[i];r&&(Array.isArray(r)?r[0].$refs.reference=e:r.$refs.reference=e)},ds={bind:function(e,t,n){us(e,t,n)},inserted:function(e,t,n){us(e,t,n)}};qi.a.directive("popover",ds),cs.install=function(e){e.directive("popover",ds),e.component(cs.name,cs)},cs.directive=ds;var hs=cs,fs={name:"ElTooltip",mixins:[W.a],props:{openDelay:{type:Number,default:0},disabled:Boolean,manual:Boolean,effect:{type:String,default:"dark"},arrowOffset:{type:Number,default:0},popperClass:String,content:String,visibleArrow:{default:!0},transition:{type:String,default:"el-fade-in-linear"},popperOptions:{default:function(){return{boundariesPadding:10,gpuAcceleration:!1}}},enterable:{type:Boolean,default:!0},hideAfter:{type:Number,default:0},tabindex:{type:Number,default:0}},data:function(){return{tooltipId:"el-tooltip-"+Object(y["generateId"])(),timeoutPending:null,focusing:!1}},beforeCreate:function(){var e=this;this.$isServer||(this.popperVM=new qi.a({data:{node:""},render:function(e){return this.node}}).$mount(),this.debounceClose=j()(200,(function(){return e.handleClosePopper()})))},render:function(e){var t=this;this.popperVM&&(this.popperVM.node=e("transition",{attrs:{name:this.transition},on:{afterLeave:this.doDestroy}},[e("div",{on:{mouseleave:function(){t.setExpectedState(!1),t.debounceClose()},mouseenter:function(){t.setExpectedState(!0)}},ref:"popper",attrs:{role:"tooltip",id:this.tooltipId,"aria-hidden":this.disabled||!this.showPopper?"true":"false"},directives:[{name:"show",value:!this.disabled&&this.showPopper}],class:["el-tooltip__popper","is-"+this.effect,this.popperClass]},[this.$slots.content||this.content])]));var n=this.getFirstElement();if(!n)return null;var i=n.data=n.data||{};return i.staticClass=this.addTooltipClass(i.staticClass),n},mounted:function(){var e=this;this.referenceElm=this.$el,1===this.$el.nodeType&&(this.$el.setAttribute("aria-describedby",this.tooltipId),this.$el.setAttribute("tabindex",this.tabindex),Object(ze["on"])(this.referenceElm,"mouseenter",this.show),Object(ze["on"])(this.referenceElm,"mouseleave",this.hide),Object(ze["on"])(this.referenceElm,"focus",(function(){if(e.$slots.default&&e.$slots.default.length){var t=e.$slots.default[0].componentInstance;t&&t.focus?t.focus():e.handleFocus()}else e.handleFocus()})),Object(ze["on"])(this.referenceElm,"blur",this.handleBlur),Object(ze["on"])(this.referenceElm,"click",this.removeFocusing)),this.value&&this.popperVM&&this.popperVM.$nextTick((function(){e.value&&e.updatePopper()}))},watch:{focusing:function(e){e?Object(ze["addClass"])(this.referenceElm,"focusing"):Object(ze["removeClass"])(this.referenceElm,"focusing")}},methods:{show:function(){this.setExpectedState(!0),this.handleShowPopper()},hide:function(){this.setExpectedState(!1),this.debounceClose()},handleFocus:function(){this.focusing=!0,this.show()},handleBlur:function(){this.focusing=!1,this.hide()},removeFocusing:function(){this.focusing=!1},addTooltipClass:function(e){return e?"el-tooltip "+e.replace("el-tooltip",""):"el-tooltip"},handleShowPopper:function(){var e=this;this.expectedState&&!this.manual&&(clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.showPopper=!0}),this.openDelay),this.hideAfter>0&&(this.timeoutPending=setTimeout((function(){e.showPopper=!1}),this.hideAfter)))},handleClosePopper:function(){this.enterable&&this.expectedState||this.manual||(clearTimeout(this.timeout),this.timeoutPending&&clearTimeout(this.timeoutPending),this.showPopper=!1,this.disabled&&this.doDestroy())},setExpectedState:function(e){!1===e&&clearTimeout(this.timeoutPending),this.expectedState=e},getFirstElement:function(){var e=this.$slots.default;if(!Array.isArray(e))return null;for(var t=null,n=0;n<e.length;n++)e[n]&&e[n].tag&&(t=e[n]);return t}},beforeDestroy:function(){this.popperVM&&this.popperVM.$destroy()},destroyed:function(){var e=this.referenceElm;1===e.nodeType&&(Object(ze["off"])(e,"mouseenter",this.show),Object(ze["off"])(e,"mouseleave",this.hide),Object(ze["off"])(e,"focus",this.handleFocus),Object(ze["off"])(e,"blur",this.handleBlur),Object(ze["off"])(e,"click",this.removeFocusing))},install:function(e){e.component(fs.name,fs)}},ps=fs,ms=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"msgbox-fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-message-box__wrapper",attrs:{tabindex:"-1",role:"dialog","aria-modal":"true","aria-label":e.title||"dialog"},on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[n("div",{staticClass:"el-message-box",class:[e.customClass,e.center&&"el-message-box--center"]},[null!==e.title?n("div",{staticClass:"el-message-box__header"},[n("div",{staticClass:"el-message-box__title"},[e.icon&&e.center?n("div",{class:["el-message-box__status",e.icon]}):e._e(),n("span",[e._v(e._s(e.title))])]),e.showClose?n("button",{staticClass:"el-message-box__headerbtn",attrs:{type:"button","aria-label":"Close"},on:{click:function(t){e.handleAction(e.distinguishCancelAndClose?"close":"cancel")},keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter"))return null;e.handleAction(e.distinguishCancelAndClose?"close":"cancel")}}},[n("i",{staticClass:"el-message-box__close el-icon-close"})]):e._e()]):e._e(),n("div",{staticClass:"el-message-box__content"},[n("div",{staticClass:"el-message-box__container"},[e.icon&&!e.center&&""!==e.message?n("div",{class:["el-message-box__status",e.icon]}):e._e(),""!==e.message?n("div",{staticClass:"el-message-box__message"},[e._t("default",[e.dangerouslyUseHTMLString?n("p",{domProps:{innerHTML:e._s(e.message)}}):n("p",[e._v(e._s(e.message))])])],2):e._e()]),n("div",{directives:[{name:"show",rawName:"v-show",value:e.showInput,expression:"showInput"}],staticClass:"el-message-box__input"},[n("el-input",{ref:"input",attrs:{type:e.inputType,placeholder:e.inputPlaceholder},nativeOn:{keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleInputEnter(t)}},model:{value:e.inputValue,callback:function(t){e.inputValue=t},expression:"inputValue"}}),n("div",{staticClass:"el-message-box__errormsg",style:{visibility:e.editorErrorMessage?"visible":"hidden"}},[e._v(e._s(e.editorErrorMessage))])],1)]),n("div",{staticClass:"el-message-box__btns"},[e.showCancelButton?n("el-button",{class:[e.cancelButtonClasses],attrs:{loading:e.cancelButtonLoading,round:e.roundButton,size:"small"},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter"))return null;e.handleAction("cancel")}},nativeOn:{click:function(t){e.handleAction("cancel")}}},[e._v("\n          "+e._s(e.cancelButtonText||e.t("el.messagebox.cancel"))+"\n        ")]):e._e(),n("el-button",{directives:[{name:"show",rawName:"v-show",value:e.showConfirmButton,expression:"showConfirmButton"}],ref:"confirm",class:[e.confirmButtonClasses],attrs:{loading:e.confirmButtonLoading,round:e.roundButton,size:"small"},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter"))return null;e.handleAction("confirm")}},nativeOn:{click:function(t){e.handleAction("confirm")}}},[e._v("\n          "+e._s(e.confirmButtonText||e.t("el.messagebox.confirm"))+"\n        ")])],1)])])])},gs=[];ms._withStripped=!0;var vs=n(39),bs=n.n(vs),ys=void 0,ws={success:"success",info:"info",warning:"warning",error:"error"},xs={mixins:[S.a,b.a],props:{modal:{default:!0},lockScroll:{default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{default:!0},closeOnPressEscape:{default:!0},closeOnHashChange:{default:!0},center:{default:!1,type:Boolean},roundButton:{default:!1,type:Boolean}},components:{ElInput:g.a,ElButton:se.a},computed:{icon:function(){var e=this.type,t=this.iconClass;return t||(e&&ws[e]?"el-icon-"+ws[e]:"")},confirmButtonClasses:function(){return"el-button--primary "+this.confirmButtonClass},cancelButtonClasses:function(){return""+this.cancelButtonClass}},methods:{getSafeClose:function(){var e=this,t=this.uid;return function(){e.$nextTick((function(){t===e.uid&&e.doClose()}))}},doClose:function(){var e=this;this.visible&&(this.visible=!1,this._closing=!0,this.onClose&&this.onClose(),ys.closeDialog(),this.lockScroll&&setTimeout(this.restoreBodyStyle,200),this.opened=!1,this.doAfterClose(),setTimeout((function(){e.action&&e.callback(e.action,e)})))},handleWrapperClick:function(){this.closeOnClickModal&&this.handleAction(this.distinguishCancelAndClose?"close":"cancel")},handleInputEnter:function(){if("textarea"!==this.inputType)return this.handleAction("confirm")},handleAction:function(e){("prompt"!==this.$type||"confirm"!==e||this.validate())&&(this.action=e,"function"===typeof this.beforeClose?(this.close=this.getSafeClose(),this.beforeClose(e,this,this.close)):this.doClose())},validate:function(){if("prompt"===this.$type){var e=this.inputPattern;if(e&&!e.test(this.inputValue||""))return this.editorErrorMessage=this.inputErrorMessage||Object(ni["t"])("el.messagebox.error"),Object(ze["addClass"])(this.getInputElement(),"invalid"),!1;var t=this.inputValidator;if("function"===typeof t){var n=t(this.inputValue);if(!1===n)return this.editorErrorMessage=this.inputErrorMessage||Object(ni["t"])("el.messagebox.error"),Object(ze["addClass"])(this.getInputElement(),"invalid"),!1;if("string"===typeof n)return this.editorErrorMessage=n,Object(ze["addClass"])(this.getInputElement(),"invalid"),!1}}return this.editorErrorMessage="",Object(ze["removeClass"])(this.getInputElement(),"invalid"),!0},getFirstFocus:function(){var e=this.$el.querySelector(".el-message-box__btns .el-button"),t=this.$el.querySelector(".el-message-box__btns .el-message-box__title");return e||t},getInputElement:function(){var e=this.$refs.input.$refs;return e.input||e.textarea},handleClose:function(){this.handleAction("close")}},watch:{inputValue:{immediate:!0,handler:function(e){var t=this;this.$nextTick((function(n){"prompt"===t.$type&&null!==e&&t.validate()}))}},visible:function(e){var t=this;e&&(this.uid++,"alert"!==this.$type&&"confirm"!==this.$type||this.$nextTick((function(){t.$refs.confirm.$el.focus()})),this.focusAfterClosed=document.activeElement,ys=new bs.a(this.$el,this.focusAfterClosed,this.getFirstFocus())),"prompt"===this.$type&&(e?setTimeout((function(){t.$refs.input&&t.$refs.input.$el&&t.getInputElement().focus()}),500):(this.editorErrorMessage="",Object(ze["removeClass"])(this.getInputElement(),"invalid")))}},mounted:function(){var e=this;this.$nextTick((function(){e.closeOnHashChange&&window.addEventListener("hashchange",e.close)}))},beforeDestroy:function(){this.closeOnHashChange&&window.removeEventListener("hashchange",this.close),setTimeout((function(){ys.closeDialog()}))},data:function(){return{uid:1,title:void 0,message:"",type:"",iconClass:"",customClass:"",showInput:!1,inputValue:null,inputPlaceholder:"",inputType:"text",inputPattern:null,inputValidator:null,inputErrorMessage:"",showConfirmButton:!0,showCancelButton:!1,action:"",confirmButtonText:"",cancelButtonText:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonClass:"",confirmButtonDisabled:!1,cancelButtonClass:"",editorErrorMessage:null,callback:null,dangerouslyUseHTMLString:!1,focusAfterClosed:null,isOnComposition:!1,distinguishCancelAndClose:!1}}},_s=xs,ks=l(_s,ms,gs,!1,null,null,null);ks.options.__file="packages/message-box/src/main.vue";var Cs=ks.exports,Ss=n(23),Os="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)},Ts={title:null,message:"",type:"",iconClass:"",showInput:!1,showClose:!0,modalFade:!0,lockScroll:!0,closeOnClickModal:!0,closeOnPressEscape:!0,closeOnHashChange:!0,inputValue:null,inputPlaceholder:"",inputType:"text",inputPattern:null,inputValidator:null,inputErrorMessage:"",showConfirmButton:!0,showCancelButton:!1,confirmButtonPosition:"right",confirmButtonHighlight:!1,cancelButtonHighlight:!1,confirmButtonText:"",cancelButtonText:"",confirmButtonClass:"",cancelButtonClass:"",customClass:"",beforeClose:null,dangerouslyUseHTMLString:!1,center:!1,roundButton:!1,distinguishCancelAndClose:!1},Es=qi.a.extend(Cs),Ds=void 0,Ms=void 0,As=[],Ns=function(e){if(Ds){var t=Ds.callback;"function"===typeof t&&(Ms.showInput?t(Ms.inputValue,e):t(e)),Ds.resolve&&("confirm"===e?Ms.showInput?Ds.resolve({value:Ms.inputValue,action:e}):Ds.resolve(e):!Ds.reject||"cancel"!==e&&"close"!==e||Ds.reject(e))}},Is=function(){Ms=new Es({el:document.createElement("div")}),Ms.callback=Ns},Ls=function e(){if(Ms||Is(),Ms.action="",(!Ms.visible||Ms.closeTimer)&&As.length>0){Ds=As.shift();var t=Ds.options;for(var n in t)t.hasOwnProperty(n)&&(Ms[n]=t[n]);void 0===t.callback&&(Ms.callback=Ns);var i=Ms.callback;Ms.callback=function(t,n){i(t,n),e()},Object(Ss["isVNode"])(Ms.message)?(Ms.$slots.default=[Ms.message],Ms.message=null):delete Ms.$slots.default,["modal","showClose","closeOnClickModal","closeOnPressEscape","closeOnHashChange"].forEach((function(e){void 0===Ms[e]&&(Ms[e]=!0)})),document.body.appendChild(Ms.$el),qi.a.nextTick((function(){Ms.visible=!0}))}},Ps=function e(t,n){if(!qi.a.prototype.$isServer){if("string"===typeof t||Object(Ss["isVNode"])(t)?(t={message:t},"string"===typeof arguments[1]&&(t.title=arguments[1])):t.callback&&!n&&(n=t.callback),"undefined"!==typeof Promise)return new Promise((function(i,r){As.push({options:Ot()({},Ts,e.defaults,t),callback:n,resolve:i,reject:r}),Ls()}));As.push({options:Ot()({},Ts,e.defaults,t),callback:n}),Ls()}};Ps.setDefaults=function(e){Ps.defaults=e},Ps.alert=function(e,t,n){return"object"===("undefined"===typeof t?"undefined":Os(t))?(n=t,t=""):void 0===t&&(t=""),Ps(Ot()({title:t,message:e,$type:"alert",closeOnPressEscape:!1,closeOnClickModal:!1},n))},Ps.confirm=function(e,t,n){return"object"===("undefined"===typeof t?"undefined":Os(t))?(n=t,t=""):void 0===t&&(t=""),Ps(Ot()({title:t,message:e,$type:"confirm",showCancelButton:!0},n))},Ps.prompt=function(e,t,n){return"object"===("undefined"===typeof t?"undefined":Os(t))?(n=t,t=""):void 0===t&&(t=""),Ps(Ot()({title:t,message:e,showCancelButton:!0,showInput:!0,$type:"prompt"},n))},Ps.close=function(){Ms.doClose(),Ms.visible=!1,As=[],Ds=null};var $s=Ps,Fs=$s,js=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-breadcrumb",attrs:{"aria-label":"Breadcrumb",role:"navigation"}},[e._t("default")],2)},zs=[];js._withStripped=!0;var Bs={name:"ElBreadcrumb",props:{separator:{type:String,default:"/"},separatorClass:{type:String,default:""}},provide:function(){return{elBreadcrumb:this}},mounted:function(){var e=this.$el.querySelectorAll(".el-breadcrumb__item");e.length&&e[e.length-1].setAttribute("aria-current","page")}},Rs=Bs,Vs=l(Rs,js,zs,!1,null,null,null);Vs.options.__file="packages/breadcrumb/src/breadcrumb.vue";var Hs=Vs.exports;Hs.install=function(e){e.component(Hs.name,Hs)};var Ws=Hs,qs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",{staticClass:"el-breadcrumb__item"},[n("span",{ref:"link",class:["el-breadcrumb__inner",e.to?"is-link":""],attrs:{role:"link"}},[e._t("default")],2),e.separatorClass?n("i",{staticClass:"el-breadcrumb__separator",class:e.separatorClass}):n("span",{staticClass:"el-breadcrumb__separator",attrs:{role:"presentation"}},[e._v(e._s(e.separator))])])},Us=[];qs._withStripped=!0;var Ks={name:"ElBreadcrumbItem",props:{to:{},replace:Boolean},data:function(){return{separator:"",separatorClass:""}},inject:["elBreadcrumb"],mounted:function(){var e=this;this.separator=this.elBreadcrumb.separator,this.separatorClass=this.elBreadcrumb.separatorClass;var t=this.$refs.link;t.setAttribute("role","link"),t.addEventListener("click",(function(t){var n=e.to,i=e.$router;n&&i&&(e.replace?i.replace(n):i.push(n))}))}},Gs=Ks,Ys=l(Gs,qs,Us,!1,null,null,null);Ys.options.__file="packages/breadcrumb/src/breadcrumb-item.vue";var Xs=Ys.exports;Xs.install=function(e){e.component(Xs.name,Xs)};var Zs=Xs,Qs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("form",{staticClass:"el-form",class:[e.labelPosition?"el-form--label-"+e.labelPosition:"",{"el-form--inline":e.inline}]},[e._t("default")],2)},Js=[];Qs._withStripped=!0;var el={name:"ElForm",componentName:"ElForm",provide:function(){return{elForm:this}},props:{model:Object,rules:Object,labelPosition:String,labelWidth:String,labelSuffix:{type:String,default:""},inline:Boolean,inlineMessage:Boolean,statusIcon:Boolean,showMessage:{type:Boolean,default:!0},size:String,disabled:Boolean,validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:{type:Boolean,default:!1}},watch:{rules:function(){this.fields.forEach((function(e){e.removeValidateEvents(),e.addValidateEvents()})),this.validateOnRuleChange&&this.validate((function(){}))}},computed:{autoLabelWidth:function(){if(!this.potentialLabelWidthArr.length)return 0;var e=Math.max.apply(Math,this.potentialLabelWidthArr);return e?e+"px":""}},data:function(){return{fields:[],potentialLabelWidthArr:[]}},created:function(){var e=this;this.$on("el.form.addField",(function(t){t&&e.fields.push(t)})),this.$on("el.form.removeField",(function(t){t.prop&&e.fields.splice(e.fields.indexOf(t),1)}))},methods:{resetFields:function(){this.model?this.fields.forEach((function(e){e.resetField()})):console.warn("[Element Warn][Form]model is required for resetFields to work.")},clearValidate:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=e.length?"string"===typeof e?this.fields.filter((function(t){return e===t.prop})):this.fields.filter((function(t){return e.indexOf(t.prop)>-1})):this.fields;t.forEach((function(e){e.clearValidate()}))},validate:function(e){var t=this;if(this.model){var n=void 0;"function"!==typeof e&&window.Promise&&(n=new window.Promise((function(t,n){e=function(e){e?t(e):n(e)}})));var i=!0,r=0;0===this.fields.length&&e&&e(!0);var o={};return this.fields.forEach((function(n){n.validate("",(function(n,a){n&&(i=!1),o=Ot()({},o,a),"function"===typeof e&&++r===t.fields.length&&e(i,o)}))})),n||void 0}console.warn("[Element Warn][Form]model is required for validate to work!")},validateField:function(e,t){e=[].concat(e);var n=this.fields.filter((function(t){return-1!==e.indexOf(t.prop)}));n.length?n.forEach((function(e){e.validate("",t)})):console.warn("[Element Warn]please pass correct props!")},getLabelWidthIndex:function(e){var t=this.potentialLabelWidthArr.indexOf(e);if(-1===t)throw new Error("[ElementForm]unpected width ",e);return t},registerLabelWidth:function(e,t){if(e&&t){var n=this.getLabelWidthIndex(t);this.potentialLabelWidthArr.splice(n,1,e)}else e&&this.potentialLabelWidthArr.push(e)},deregisterLabelWidth:function(e){var t=this.getLabelWidthIndex(e);this.potentialLabelWidthArr.splice(t,1)}}},tl=el,nl=l(tl,Qs,Js,!1,null,null,null);nl.options.__file="packages/form/src/form.vue";var il=nl.exports;il.install=function(e){e.component(il.name,il)};var rl=il,ol=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-form-item",class:[{"el-form-item--feedback":e.elForm&&e.elForm.statusIcon,"is-error":"error"===e.validateState,"is-validating":"validating"===e.validateState,"is-success":"success"===e.validateState,"is-required":e.isRequired||e.required,"is-no-asterisk":e.elForm&&e.elForm.hideRequiredAsterisk},e.sizeClass?"el-form-item--"+e.sizeClass:""]},[n("label-wrap",{attrs:{"is-auto-width":e.labelStyle&&"auto"===e.labelStyle.width,"update-all":"auto"===e.form.labelWidth}},[e.label||e.$slots.label?n("label",{staticClass:"el-form-item__label",style:e.labelStyle,attrs:{for:e.labelFor}},[e._t("label",[e._v(e._s(e.label+e.form.labelSuffix))])],2):e._e()]),n("div",{staticClass:"el-form-item__content",style:e.contentStyle},[e._t("default"),n("transition",{attrs:{name:"el-zoom-in-top"}},["error"===e.validateState&&e.showMessage&&e.form.showMessage?e._t("error",[n("div",{staticClass:"el-form-item__error",class:{"el-form-item__error--inline":"boolean"===typeof e.inlineMessage?e.inlineMessage:e.elForm&&e.elForm.inlineMessage||!1}},[e._v("\n          "+e._s(e.validateMessage)+"\n        ")])],{error:e.validateMessage}):e._e()],2)],2)],1)},al=[];ol._withStripped=!0;var sl,ll,cl=n(40),ul=n.n(cl),dl={props:{isAutoWidth:Boolean,updateAll:Boolean},inject:["elForm","elFormItem"],render:function(){var e=arguments[0],t=this.$slots.default;if(!t)return null;if(this.isAutoWidth){var n=this.elForm.autoLabelWidth,i={};if(n&&"auto"!==n){var r=parseInt(n,10)-this.computedWidth;r&&(i.marginLeft=r+"px")}return e("div",{class:"el-form-item__label-wrap",style:i},[t])}return t[0]},methods:{getLabelWidth:function(){if(this.$el&&this.$el.firstElementChild){var e=window.getComputedStyle(this.$el.firstElementChild).width;return Math.ceil(parseFloat(e))}return 0},updateLabelWidth:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"update";this.$slots.default&&this.isAutoWidth&&this.$el.firstElementChild&&("update"===e?this.computedWidth=this.getLabelWidth():"remove"===e&&this.elForm.deregisterLabelWidth(this.computedWidth))}},watch:{computedWidth:function(e,t){this.updateAll&&(this.elForm.registerLabelWidth(e,t),this.elFormItem.updateComputedLabelWidth(e))}},data:function(){return{computedWidth:0}},mounted:function(){this.updateLabelWidth("update")},updated:function(){this.updateLabelWidth("update")},beforeDestroy:function(){this.updateLabelWidth("remove")}},hl=dl,fl=l(hl,sl,ll,!1,null,null,null);fl.options.__file="packages/form/src/label-wrap.vue";var pl=fl.exports,ml={name:"ElFormItem",componentName:"ElFormItem",mixins:[D.a],provide:function(){return{elFormItem:this}},inject:["elForm"],props:{label:String,labelWidth:String,prop:String,required:{type:Boolean,default:void 0},rules:[Object,Array],error:String,validateStatus:String,for:String,inlineMessage:{type:[String,Boolean],default:""},showMessage:{type:Boolean,default:!0},size:String},components:{LabelWrap:pl},watch:{error:{immediate:!0,handler:function(e){this.validateMessage=e,this.validateState=e?"error":""}},validateStatus:function(e){this.validateState=e}},computed:{labelFor:function(){return this.for||this.prop},labelStyle:function(){var e={};if("top"===this.form.labelPosition)return e;var t=this.labelWidth||this.form.labelWidth;return t&&(e.width=t),e},contentStyle:function(){var e={},t=this.label;if("top"===this.form.labelPosition||this.form.inline)return e;if(!t&&!this.labelWidth&&this.isNested)return e;var n=this.labelWidth||this.form.labelWidth;return"auto"===n?"auto"===this.labelWidth?e.marginLeft=this.computedLabelWidth:"auto"===this.form.labelWidth&&(e.marginLeft=this.elForm.autoLabelWidth):e.marginLeft=n,e},form:function(){var e=this.$parent,t=e.$options.componentName;while("ElForm"!==t)"ElFormItem"===t&&(this.isNested=!0),e=e.$parent,t=e.$options.componentName;return e},fieldValue:function(){var e=this.form.model;if(e&&this.prop){var t=this.prop;return-1!==t.indexOf(":")&&(t=t.replace(/:/,".")),Object(y["getPropByPath"])(e,t,!0).v}},isRequired:function(){var e=this.getRules(),t=!1;return e&&e.length&&e.every((function(e){return!e.required||(t=!0,!1)})),t},_formSize:function(){return this.elForm.size},elFormItemSize:function(){return this.size||this._formSize},sizeClass:function(){return this.elFormItemSize||(this.$ELEMENT||{}).size}},data:function(){return{validateState:"",validateMessage:"",validateDisabled:!1,validator:{},isNested:!1,computedLabelWidth:""}},methods:{validate:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:y["noop"];this.validateDisabled=!1;var i=this.getFilteredRule(e);if((!i||0===i.length)&&void 0===this.required)return n(),!0;this.validateState="validating";var r={};i&&i.length>0&&i.forEach((function(e){delete e.trigger})),r[this.prop]=i;var o=new ul.a(r),a={};a[this.prop]=this.fieldValue,o.validate(a,{firstFields:!0},(function(e,i){t.validateState=e?"error":"success",t.validateMessage=e?e[0].message:"",n(t.validateMessage,i),t.elForm&&t.elForm.$emit("validate",t.prop,!e,t.validateMessage||null)}))},clearValidate:function(){this.validateState="",this.validateMessage="",this.validateDisabled=!1},resetField:function(){var e=this;this.validateState="",this.validateMessage="";var t=this.form.model,n=this.fieldValue,i=this.prop;-1!==i.indexOf(":")&&(i=i.replace(/:/,"."));var r=Object(y["getPropByPath"])(t,i,!0);this.validateDisabled=!0,Array.isArray(n)?r.o[r.k]=[].concat(this.initialValue):r.o[r.k]=this.initialValue,this.$nextTick((function(){e.validateDisabled=!1})),this.broadcast("ElTimeSelect","fieldReset",this.initialValue)},getRules:function(){var e=this.form.rules,t=this.rules,n=void 0!==this.required?{required:!!this.required}:[],i=Object(y["getPropByPath"])(e,this.prop||"");return e=e?i.o[this.prop||""]||i.v:[],[].concat(t||e||[]).concat(n)},getFilteredRule:function(e){var t=this.getRules();return t.filter((function(t){return!t.trigger||""===e||(Array.isArray(t.trigger)?t.trigger.indexOf(e)>-1:t.trigger===e)})).map((function(e){return Ot()({},e)}))},onFieldBlur:function(){this.validate("blur")},onFieldChange:function(){this.validateDisabled?this.validateDisabled=!1:this.validate("change")},updateComputedLabelWidth:function(e){this.computedLabelWidth=e?e+"px":""},addValidateEvents:function(){var e=this.getRules();(e.length||void 0!==this.required)&&(this.$on("el.form.blur",this.onFieldBlur),this.$on("el.form.change",this.onFieldChange))},removeValidateEvents:function(){this.$off()}},mounted:function(){if(this.prop){this.dispatch("ElForm","el.form.addField",[this]);var e=this.fieldValue;Array.isArray(e)&&(e=[].concat(e)),Object.defineProperty(this,"initialValue",{value:e}),this.addValidateEvents()}},beforeDestroy:function(){this.dispatch("ElForm","el.form.removeField",[this])}},gl=ml,vl=l(gl,ol,al,!1,null,null,null);vl.options.__file="packages/form/src/form-item.vue";var bl=vl.exports;bl.install=function(e){e.component(bl.name,bl)};var yl=bl,wl=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-tabs__active-bar",class:"is-"+e.rootTabs.tabPosition,style:e.barStyle})},xl=[];wl._withStripped=!0;var _l={name:"TabBar",props:{tabs:Array},inject:["rootTabs"],computed:{barStyle:{get:function(){var e=this,t={},n=0,i=0,r=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height",o="width"===r?"x":"y",a=function(e){return e.toLowerCase().replace(/( |^)[a-z]/g,(function(e){return e.toUpperCase()}))};this.tabs.every((function(t,o){var s=Object(y["arrayFind"])(e.$parent.$refs.tabs||[],(function(e){return e.id.replace("tab-","")===t.paneName}));if(!s)return!1;if(t.active){i=s["client"+a(r)];var l=window.getComputedStyle(s);return"width"===r&&e.tabs.length>1&&(i-=parseFloat(l.paddingLeft)+parseFloat(l.paddingRight)),"width"===r&&(n+=parseFloat(l.paddingLeft)),!1}return n+=s["client"+a(r)],!0}));var s="translate"+a(o)+"("+n+"px)";return t[r]=i+"px",t.transform=s,t.msTransform=s,t.webkitTransform=s,t}}}},kl=_l,Cl=l(kl,wl,xl,!1,null,null,null);Cl.options.__file="packages/tabs/src/tab-bar.vue";var Sl=Cl.exports;function Ol(){}var Tl,El,Dl=function(e){return e.toLowerCase().replace(/( |^)[a-z]/g,(function(e){return e.toUpperCase()}))},Ml={name:"TabNav",components:{TabBar:Sl},inject:["rootTabs"],props:{panes:Array,currentName:String,editable:Boolean,onTabClick:{type:Function,default:Ol},onTabRemove:{type:Function,default:Ol},type:String,stretch:Boolean},data:function(){return{scrollable:!1,navOffset:0,isFocus:!1,focusable:!0}},computed:{navStyle:function(){var e=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"X":"Y";return{transform:"translate"+e+"(-"+this.navOffset+"px)"}},sizeName:function(){return-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height"}},methods:{scrollPrev:function(){var e=this.$refs.navScroll["offset"+Dl(this.sizeName)],t=this.navOffset;if(t){var n=t>e?t-e:0;this.navOffset=n}},scrollNext:function(){var e=this.$refs.nav["offset"+Dl(this.sizeName)],t=this.$refs.navScroll["offset"+Dl(this.sizeName)],n=this.navOffset;if(!(e-n<=t)){var i=e-n>2*t?n+t:e-t;this.navOffset=i}},scrollToActiveTab:function(){if(this.scrollable){var e=this.$refs.nav,t=this.$el.querySelector(".is-active");if(t){var n=this.$refs.navScroll,i=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition),r=t.getBoundingClientRect(),o=n.getBoundingClientRect(),a=i?e.offsetWidth-o.width:e.offsetHeight-o.height,s=this.navOffset,l=s;i?(r.left<o.left&&(l=s-(o.left-r.left)),r.right>o.right&&(l=s+r.right-o.right)):(r.top<o.top&&(l=s-(o.top-r.top)),r.bottom>o.bottom&&(l=s+(r.bottom-o.bottom))),l=Math.max(l,0),this.navOffset=Math.min(l,a)}}},update:function(){if(this.$refs.nav){var e=this.sizeName,t=this.$refs.nav["offset"+Dl(e)],n=this.$refs.navScroll["offset"+Dl(e)],i=this.navOffset;if(n<t){var r=this.navOffset;this.scrollable=this.scrollable||{},this.scrollable.prev=r,this.scrollable.next=r+n<t,t-r<n&&(this.navOffset=t-n)}else this.scrollable=!1,i>0&&(this.navOffset=0)}},changeTab:function(e){var t=e.keyCode,n=void 0,i=void 0,r=void 0;-1!==[37,38,39,40].indexOf(t)&&(r=e.currentTarget.querySelectorAll("[role=tab]"),i=Array.prototype.indexOf.call(r,e.target),n=37===t||38===t?0===i?r.length-1:i-1:i<r.length-1?i+1:0,r[n].focus(),r[n].click(),this.setFocus())},setFocus:function(){this.focusable&&(this.isFocus=!0)},removeFocus:function(){this.isFocus=!1},visibilityChangeHandler:function(){var e=this,t=document.visibilityState;"hidden"===t?this.focusable=!1:"visible"===t&&setTimeout((function(){e.focusable=!0}),50)},windowBlurHandler:function(){this.focusable=!1},windowFocusHandler:function(){var e=this;setTimeout((function(){e.focusable=!0}),50)}},updated:function(){this.update()},render:function(e){var t=this,n=this.type,i=this.panes,r=this.editable,o=this.stretch,a=this.onTabClick,s=this.onTabRemove,l=this.navStyle,c=this.scrollable,u=this.scrollNext,d=this.scrollPrev,h=this.changeTab,f=this.setFocus,p=this.removeFocus,m=c?[e("span",{class:["el-tabs__nav-prev",c.prev?"":"is-disabled"],on:{click:d}},[e("i",{class:"el-icon-arrow-left"})]),e("span",{class:["el-tabs__nav-next",c.next?"":"is-disabled"],on:{click:u}},[e("i",{class:"el-icon-arrow-right"})])]:null,g=this._l(i,(function(n,i){var o,l=n.name||n.index||i,c=n.isClosable||r;n.index=""+i;var u=c?e("span",{class:"el-icon-close",on:{click:function(e){s(n,e)}}}):null,d=n.$slots.label||n.label,h=n.active?0:-1;return e("div",{class:(o={"el-tabs__item":!0},o["is-"+t.rootTabs.tabPosition]=!0,o["is-active"]=n.active,o["is-disabled"]=n.disabled,o["is-closable"]=c,o["is-focus"]=t.isFocus,o),attrs:{id:"tab-"+l,"aria-controls":"pane-"+l,role:"tab","aria-selected":n.active,tabindex:h},key:"tab-"+l,ref:"tabs",refInFor:!0,on:{focus:function(){f()},blur:function(){p()},click:function(e){p(),a(n,l,e)},keydown:function(e){!c||46!==e.keyCode&&8!==e.keyCode||s(n,e)}}},[d,u])}));return e("div",{class:["el-tabs__nav-wrap",c?"is-scrollable":"","is-"+this.rootTabs.tabPosition]},[m,e("div",{class:["el-tabs__nav-scroll"],ref:"navScroll"},[e("div",{class:["el-tabs__nav","is-"+this.rootTabs.tabPosition,o&&-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"is-stretch":""],ref:"nav",style:l,attrs:{role:"tablist"},on:{keydown:h}},[n?null:e("tab-bar",{attrs:{tabs:i}}),g])])])},mounted:function(){var e=this;Object(ti["addResizeListener"])(this.$el,this.update),document.addEventListener("visibilitychange",this.visibilityChangeHandler),window.addEventListener("blur",this.windowBlurHandler),window.addEventListener("focus",this.windowFocusHandler),setTimeout((function(){e.scrollToActiveTab()}),0)},beforeDestroy:function(){this.$el&&this.update&&Object(ti["removeResizeListener"])(this.$el,this.update),document.removeEventListener("visibilitychange",this.visibilityChangeHandler),window.removeEventListener("blur",this.windowBlurHandler),window.removeEventListener("focus",this.windowFocusHandler)}},Al=Ml,Nl=l(Al,Tl,El,!1,null,null,null);Nl.options.__file="packages/tabs/src/tab-nav.vue";var Il,Ll,Pl=Nl.exports,$l={name:"ElTabs",components:{TabNav:Pl},props:{type:String,activeName:String,closable:Boolean,addable:Boolean,value:{},editable:Boolean,tabPosition:{type:String,default:"top"},beforeLeave:Function,stretch:Boolean},provide:function(){return{rootTabs:this}},data:function(){return{currentName:this.value||this.activeName,panes:[]}},watch:{activeName:function(e){this.setCurrentName(e)},value:function(e){this.setCurrentName(e)},currentName:function(e){var t=this;this.$refs.nav&&this.$nextTick((function(){t.$refs.nav.$nextTick((function(e){t.$refs.nav.scrollToActiveTab()}))}))}},methods:{calcPaneInstances:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.$slots.default){var n=this.$slots.default.filter((function(e){return e.tag&&e.componentOptions&&"ElTabPane"===e.componentOptions.Ctor.options.name})),i=n.map((function(e){var t=e.componentInstance;return t})),r=!(i.length===this.panes.length&&i.every((function(t,n){return t===e.panes[n]})));(t||r)&&(this.panes=i)}else 0!==this.panes.length&&(this.panes=[])},handleTabClick:function(e,t,n){e.disabled||(this.setCurrentName(t),this.$emit("tab-click",e,n))},handleTabRemove:function(e,t){e.disabled||(t.stopPropagation(),this.$emit("edit",e.name,"remove"),this.$emit("tab-remove",e.name))},handleTabAdd:function(){this.$emit("edit",null,"add"),this.$emit("tab-add")},setCurrentName:function(e){var t=this,n=function(){t.currentName=e,t.$emit("input",e)};if(this.currentName!==e&&this.beforeLeave){var i=this.beforeLeave(e,this.currentName);i&&i.then?i.then((function(){n(),t.$refs.nav&&t.$refs.nav.removeFocus()}),(function(){})):!1!==i&&n()}else n()}},render:function(e){var t,n=this.type,i=this.handleTabClick,r=this.handleTabRemove,o=this.handleTabAdd,a=this.currentName,s=this.panes,l=this.editable,c=this.addable,u=this.tabPosition,d=this.stretch,h=l||c?e("span",{class:"el-tabs__new-tab",on:{click:o,keydown:function(e){13===e.keyCode&&o()}},attrs:{tabindex:"0"}},[e("i",{class:"el-icon-plus"})]):null,f={props:{currentName:a,onTabClick:i,onTabRemove:r,editable:l,type:n,panes:s,stretch:d},ref:"nav"},p=e("div",{class:["el-tabs__header","is-"+u]},[h,e("tab-nav",f)]),m=e("div",{class:"el-tabs__content"},[this.$slots.default]);return e("div",{class:(t={"el-tabs":!0,"el-tabs--card":"card"===n},t["el-tabs--"+u]=!0,t["el-tabs--border-card"]="border-card"===n,t)},["bottom"!==u?[p,m]:[m,p]])},created:function(){this.currentName||this.setCurrentName("0"),this.$on("tab-nav-update",this.calcPaneInstances.bind(null,!0))},mounted:function(){this.calcPaneInstances()},updated:function(){this.calcPaneInstances()}},Fl=$l,jl=l(Fl,Il,Ll,!1,null,null,null);jl.options.__file="packages/tabs/src/tabs.vue";var zl=jl.exports;zl.install=function(e){e.component(zl.name,zl)};var Bl=zl,Rl=function(){var e=this,t=e.$createElement,n=e._self._c||t;return!e.lazy||e.loaded||e.active?n("div",{directives:[{name:"show",rawName:"v-show",value:e.active,expression:"active"}],staticClass:"el-tab-pane",attrs:{role:"tabpanel","aria-hidden":!e.active,id:"pane-"+e.paneName,"aria-labelledby":"tab-"+e.paneName}},[e._t("default")],2):e._e()},Vl=[];Rl._withStripped=!0;var Hl={name:"ElTabPane",componentName:"ElTabPane",props:{label:String,labelContent:Function,name:String,closable:Boolean,disabled:Boolean,lazy:Boolean},data:function(){return{index:null,loaded:!1}},computed:{isClosable:function(){return this.closable||this.$parent.closable},active:function(){var e=this.$parent.currentName===(this.name||this.index);return e&&(this.loaded=!0),e},paneName:function(){return this.name||this.index}},updated:function(){this.$parent.$emit("tab-nav-update")}},Wl=Hl,ql=l(Wl,Rl,Vl,!1,null,null,null);ql.options.__file="packages/tabs/src/tab-pane.vue";var Ul=ql.exports;Ul.install=function(e){e.component(Ul.name,Ul)};var Kl,Gl,Yl=Ul,Xl={name:"ElTag",props:{text:String,closable:Boolean,type:String,hit:Boolean,disableTransitions:Boolean,color:String,size:String,effect:{type:String,default:"light",validator:function(e){return-1!==["dark","light","plain"].indexOf(e)}}},methods:{handleClose:function(e){e.stopPropagation(),this.$emit("close",e)},handleClick:function(e){this.$emit("click",e)}},computed:{tagSize:function(){return this.size||(this.$ELEMENT||{}).size}},render:function(e){var t=this.type,n=this.tagSize,i=this.hit,r=this.effect,o=["el-tag",t?"el-tag--"+t:"",n?"el-tag--"+n:"",r?"el-tag--"+r:"",i&&"is-hit"],a=e("span",{class:o,style:{backgroundColor:this.color},on:{click:this.handleClick}},[this.$slots.default,this.closable&&e("i",{class:"el-tag__close el-icon-close",on:{click:this.handleClose}})]);return this.disableTransitions?a:e("transition",{attrs:{name:"el-zoom-in-center"}},[a])}},Zl=Xl,Ql=l(Zl,Kl,Gl,!1,null,null,null);Ql.options.__file="packages/tag/src/tag.vue";var Jl=Ql.exports;Jl.install=function(e){e.component(Jl.name,Jl)};var ec=Jl,tc=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-tree",class:{"el-tree--highlight-current":e.highlightCurrent,"is-dragging":!!e.dragState.draggingNode,"is-drop-not-allow":!e.dragState.allowDrop,"is-drop-inner":"inner"===e.dragState.dropType},attrs:{role:"tree"}},[e._l(e.root.childNodes,(function(t){return n("el-tree-node",{key:e.getNodeKey(t),attrs:{node:t,props:e.props,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,"render-content":e.renderContent},on:{"node-expand":e.handleNodeExpand}})})),e.isEmpty?n("div",{staticClass:"el-tree__empty-block"},[n("span",{staticClass:"el-tree__empty-text"},[e._v(e._s(e.emptyText))])]):e._e(),n("div",{directives:[{name:"show",rawName:"v-show",value:e.dragState.showDropIndicator,expression:"dragState.showDropIndicator"}],ref:"dropIndicator",staticClass:"el-tree__drop-indicator"})],2)},nc=[];tc._withStripped=!0;var ic="$treeNodeId",rc=function(e,t){t&&!t[ic]&&Object.defineProperty(t,ic,{value:e.id,enumerable:!1,configurable:!1,writable:!1})},oc=function(e,t){return e?t[e]:t[ic]},ac=function(e,t){var n=e;while(n&&"BODY"!==n.tagName){if(n.__vue__&&n.__vue__.$options.name===t)return n.__vue__;n=n.parentNode}return null},sc=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();function lc(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var cc=function(e){for(var t=!0,n=!0,i=!0,r=0,o=e.length;r<o;r++){var a=e[r];(!0!==a.checked||a.indeterminate)&&(t=!1,a.disabled||(i=!1)),(!1!==a.checked||a.indeterminate)&&(n=!1)}return{all:t,none:n,allWithoutDisable:i,half:!t&&!n}},uc=function e(t){if(0!==t.childNodes.length){var n=cc(t.childNodes),i=n.all,r=n.none,o=n.half;i?(t.checked=!0,t.indeterminate=!1):o?(t.checked=!1,t.indeterminate=!0):r&&(t.checked=!1,t.indeterminate=!1);var a=t.parent;a&&0!==a.level&&(t.store.checkStrictly||e(a))}},dc=function(e,t){var n=e.store.props,i=e.data||{},r=n[t];if("function"===typeof r)return r(i,e);if("string"===typeof r)return i[r];if("undefined"===typeof r){var o=i[t];return void 0===o?"":o}},hc=0,fc=function(){function e(t){for(var n in lc(this,e),this.id=hc++,this.text=null,this.checked=!1,this.indeterminate=!1,this.data=null,this.expanded=!1,this.parent=null,this.visible=!0,this.isCurrent=!1,t)t.hasOwnProperty(n)&&(this[n]=t[n]);this.level=0,this.loaded=!1,this.childNodes=[],this.loading=!1,this.parent&&(this.level=this.parent.level+1);var i=this.store;if(!i)throw new Error("[Node]store is required!");i.registerNode(this);var r=i.props;if(r&&"undefined"!==typeof r.isLeaf){var o=dc(this,"isLeaf");"boolean"===typeof o&&(this.isLeafByUser=o)}if(!0!==i.lazy&&this.data?(this.setData(this.data),i.defaultExpandAll&&(this.expanded=!0)):this.level>0&&i.lazy&&i.defaultExpandAll&&this.expand(),Array.isArray(this.data)||rc(this,this.data),this.data){var a=i.defaultExpandedKeys,s=i.key;s&&a&&-1!==a.indexOf(this.key)&&this.expand(null,i.autoExpandParent),s&&void 0!==i.currentNodeKey&&this.key===i.currentNodeKey&&(i.currentNode=this,i.currentNode.isCurrent=!0),i.lazy&&i._initDefaultCheckedNode(this),this.updateLeafState()}}return e.prototype.setData=function(e){Array.isArray(e)||rc(this,e),this.data=e,this.childNodes=[];var t=void 0;t=0===this.level&&this.data instanceof Array?this.data:dc(this,"children")||[];for(var n=0,i=t.length;n<i;n++)this.insertChild({data:t[n]})},e.prototype.contains=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=function n(i){for(var r=i.childNodes||[],o=!1,a=0,s=r.length;a<s;a++){var l=r[a];if(l===e||t&&n(l)){o=!0;break}}return o};return n(this)},e.prototype.remove=function(){var e=this.parent;e&&e.removeChild(this)},e.prototype.insertChild=function(t,n,i){if(!t)throw new Error("insertChild error: child is required.");if(!(t instanceof e)){if(!i){var r=this.getChildren(!0);-1===r.indexOf(t.data)&&("undefined"===typeof n||n<0?r.push(t.data):r.splice(n,0,t.data))}Ot()(t,{parent:this,store:this.store}),t=new e(t)}t.level=this.level+1,"undefined"===typeof n||n<0?this.childNodes.push(t):this.childNodes.splice(n,0,t),this.updateLeafState()},e.prototype.insertBefore=function(e,t){var n=void 0;t&&(n=this.childNodes.indexOf(t)),this.insertChild(e,n)},e.prototype.insertAfter=function(e,t){var n=void 0;t&&(n=this.childNodes.indexOf(t),-1!==n&&(n+=1)),this.insertChild(e,n)},e.prototype.removeChild=function(e){var t=this.getChildren()||[],n=t.indexOf(e.data);n>-1&&t.splice(n,1);var i=this.childNodes.indexOf(e);i>-1&&(this.store&&this.store.deregisterNode(e),e.parent=null,this.childNodes.splice(i,1)),this.updateLeafState()},e.prototype.removeChildByData=function(e){for(var t=null,n=0;n<this.childNodes.length;n++)if(this.childNodes[n].data===e){t=this.childNodes[n];break}t&&this.removeChild(t)},e.prototype.expand=function(e,t){var n=this,i=function(){if(t){var i=n.parent;while(i.level>0)i.expanded=!0,i=i.parent}n.expanded=!0,e&&e()};this.shouldLoadData()?this.loadData((function(e){e instanceof Array&&(n.checked?n.setChecked(!0,!0):n.store.checkStrictly||uc(n),i())})):i()},e.prototype.doCreateChildren=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.forEach((function(e){t.insertChild(Ot()({data:e},n),void 0,!0)}))},e.prototype.collapse=function(){this.expanded=!1},e.prototype.shouldLoadData=function(){return!0===this.store.lazy&&this.store.load&&!this.loaded},e.prototype.updateLeafState=function(){if(!0!==this.store.lazy||!0===this.loaded||"undefined"===typeof this.isLeafByUser){var e=this.childNodes;!this.store.lazy||!0===this.store.lazy&&!0===this.loaded?this.isLeaf=!e||0===e.length:this.isLeaf=!1}else this.isLeaf=this.isLeafByUser},e.prototype.setChecked=function(e,t,n,i){var r=this;if(this.indeterminate="half"===e,this.checked=!0===e,!this.store.checkStrictly){if(!this.shouldLoadData()||this.store.checkDescendants){var o=cc(this.childNodes),a=o.all,s=o.allWithoutDisable;this.isLeaf||a||!s||(this.checked=!1,e=!1);var l=function(){if(t){for(var n=r.childNodes,o=0,a=n.length;o<a;o++){var s=n[o];i=i||!1!==e;var l=s.disabled?s.checked:i;s.setChecked(l,t,!0,i)}var c=cc(n),u=c.half,d=c.all;d||(r.checked=d,r.indeterminate=u)}};if(this.shouldLoadData())return void this.loadData((function(){l(),uc(r)}),{checked:!1!==e});l()}var c=this.parent;c&&0!==c.level&&(n||uc(c))}},e.prototype.getChildren=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(0===this.level)return this.data;var t=this.data;if(!t)return null;var n=this.store.props,i="children";return n&&(i=n.children||"children"),void 0===t[i]&&(t[i]=null),e&&!t[i]&&(t[i]=[]),t[i]},e.prototype.updateChildren=function(){var e=this,t=this.getChildren()||[],n=this.childNodes.map((function(e){return e.data})),i={},r=[];t.forEach((function(e,t){var o=e[ic],a=!!o&&Object(y["arrayFindIndex"])(n,(function(e){return e[ic]===o}))>=0;a?i[o]={index:t,data:e}:r.push({index:t,data:e})})),this.store.lazy||n.forEach((function(t){i[t[ic]]||e.removeChildByData(t)})),r.forEach((function(t){var n=t.index,i=t.data;e.insertChild({data:i},n)})),this.updateLeafState()},e.prototype.loadData=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!0!==this.store.lazy||!this.store.load||this.loaded||this.loading&&!Object.keys(n).length)e&&e.call(this);else{this.loading=!0;var i=function(i){t.loaded=!0,t.loading=!1,t.childNodes=[],t.doCreateChildren(i,n),t.updateLeafState(),e&&e.call(t,i)};this.store.load(this,i)}},sc(e,[{key:"label",get:function(){return dc(this,"label")}},{key:"key",get:function(){var e=this.store.key;return this.data?this.data[e]:null}},{key:"disabled",get:function(){return dc(this,"disabled")}},{key:"nextSibling",get:function(){var e=this.parent;if(e){var t=e.childNodes.indexOf(this);if(t>-1)return e.childNodes[t+1]}return null}},{key:"previousSibling",get:function(){var e=this.parent;if(e){var t=e.childNodes.indexOf(this);if(t>-1)return t>0?e.childNodes[t-1]:null}return null}}]),e}(),pc=fc,mc="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)};function gc(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var vc=function(){function e(t){var n=this;for(var i in gc(this,e),this.currentNode=null,this.currentNodeKey=null,t)t.hasOwnProperty(i)&&(this[i]=t[i]);if(this.nodesMap={},this.root=new pc({data:this.data,store:this}),this.lazy&&this.load){var r=this.load;r(this.root,(function(e){n.root.doCreateChildren(e),n._initDefaultCheckedNodes()}))}else this._initDefaultCheckedNodes()}return e.prototype.filter=function(e){var t=this.filterNodeMethod,n=this.lazy,i=function i(r){var o=r.root?r.root.childNodes:r.childNodes;if(o.forEach((function(n){n.visible=t.call(n,e,n.data,n),i(n)})),!r.visible&&o.length){var a=!0;a=!o.some((function(e){return e.visible})),r.root?r.root.visible=!1===a:r.visible=!1===a}e&&(!r.visible||r.isLeaf||n||r.expand())};i(this)},e.prototype.setData=function(e){var t=e!==this.root.data;t?(this.root.setData(e),this._initDefaultCheckedNodes()):this.root.updateChildren()},e.prototype.getNode=function(e){if(e instanceof pc)return e;var t="object"!==("undefined"===typeof e?"undefined":mc(e))?e:oc(this.key,e);return this.nodesMap[t]||null},e.prototype.insertBefore=function(e,t){var n=this.getNode(t);n.parent.insertBefore({data:e},n)},e.prototype.insertAfter=function(e,t){var n=this.getNode(t);n.parent.insertAfter({data:e},n)},e.prototype.remove=function(e){var t=this.getNode(e);t&&t.parent&&(t===this.currentNode&&(this.currentNode=null),t.parent.removeChild(t))},e.prototype.append=function(e,t){var n=t?this.getNode(t):this.root;n&&n.insertChild({data:e})},e.prototype._initDefaultCheckedNodes=function(){var e=this,t=this.defaultCheckedKeys||[],n=this.nodesMap;t.forEach((function(t){var i=n[t];i&&i.setChecked(!0,!e.checkStrictly)}))},e.prototype._initDefaultCheckedNode=function(e){var t=this.defaultCheckedKeys||[];-1!==t.indexOf(e.key)&&e.setChecked(!0,!this.checkStrictly)},e.prototype.setDefaultCheckedKey=function(e){e!==this.defaultCheckedKeys&&(this.defaultCheckedKeys=e,this._initDefaultCheckedNodes())},e.prototype.registerNode=function(e){var t=this.key;if(t&&e&&e.data){var n=e.key;void 0!==n&&(this.nodesMap[e.key]=e)}},e.prototype.deregisterNode=function(e){var t=this,n=this.key;n&&e&&e.data&&(e.childNodes.forEach((function(e){t.deregisterNode(e)})),delete this.nodesMap[e.key])},e.prototype.getCheckedNodes=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],i=function i(r){var o=r.root?r.root.childNodes:r.childNodes;o.forEach((function(r){(r.checked||t&&r.indeterminate)&&(!e||e&&r.isLeaf)&&n.push(r.data),i(r)}))};return i(this),n},e.prototype.getCheckedKeys=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.getCheckedNodes(t).map((function(t){return(t||{})[e.key]}))},e.prototype.getHalfCheckedNodes=function(){var e=[],t=function t(n){var i=n.root?n.root.childNodes:n.childNodes;i.forEach((function(n){n.indeterminate&&e.push(n.data),t(n)}))};return t(this),e},e.prototype.getHalfCheckedKeys=function(){var e=this;return this.getHalfCheckedNodes().map((function(t){return(t||{})[e.key]}))},e.prototype._getAllNodes=function(){var e=[],t=this.nodesMap;for(var n in t)t.hasOwnProperty(n)&&e.push(t[n]);return e},e.prototype.updateChildren=function(e,t){var n=this.nodesMap[e];if(n){for(var i=n.childNodes,r=i.length-1;r>=0;r--){var o=i[r];this.remove(o.data)}for(var a=0,s=t.length;a<s;a++){var l=t[a];this.append(l,n.data)}}},e.prototype._setCheckedKeys=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments[2],i=this._getAllNodes().sort((function(e,t){return t.level-e.level})),r=Object.create(null),o=Object.keys(n);i.forEach((function(e){return e.setChecked(!1,!1)}));for(var a=0,s=i.length;a<s;a++){var l=i[a],c=l.data[e].toString(),u=o.indexOf(c)>-1;if(u){var d=l.parent;while(d&&d.level>0)r[d.data[e]]=!0,d=d.parent;l.isLeaf||this.checkStrictly?l.setChecked(!0,!1):(l.setChecked(!0,!0),t&&function(){l.setChecked(!1,!1);var e=function e(t){var n=t.childNodes;n.forEach((function(t){t.isLeaf||t.setChecked(!1,!1),e(t)}))};e(l)}())}else l.checked&&!r[c]&&l.setChecked(!1,!1)}},e.prototype.setCheckedNodes=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.key,i={};e.forEach((function(e){i[(e||{})[n]]=!0})),this._setCheckedKeys(n,t,i)},e.prototype.setCheckedKeys=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.defaultCheckedKeys=e;var n=this.key,i={};e.forEach((function(e){i[e]=!0})),this._setCheckedKeys(n,t,i)},e.prototype.setDefaultExpandedKeys=function(e){var t=this;e=e||[],this.defaultExpandedKeys=e,e.forEach((function(e){var n=t.getNode(e);n&&n.expand(null,t.autoExpandParent)}))},e.prototype.setChecked=function(e,t,n){var i=this.getNode(e);i&&i.setChecked(!!t,n)},e.prototype.getCurrentNode=function(){return this.currentNode},e.prototype.setCurrentNode=function(e){var t=this.currentNode;t&&(t.isCurrent=!1),this.currentNode=e,this.currentNode.isCurrent=!0},e.prototype.setUserCurrentNode=function(e){var t=e[this.key],n=this.nodesMap[t];this.setCurrentNode(n)},e.prototype.setCurrentNodeKey=function(e){if(null===e||void 0===e)return this.currentNode&&(this.currentNode.isCurrent=!1),void(this.currentNode=null);var t=this.getNode(e);t&&this.setCurrentNode(t)},e}(),bc=vc,yc=function(){var e=this,t=this,n=t.$createElement,i=t._self._c||n;return i("div",{directives:[{name:"show",rawName:"v-show",value:t.node.visible,expression:"node.visible"}],ref:"node",staticClass:"el-tree-node",class:{"is-expanded":t.expanded,"is-current":t.node.isCurrent,"is-hidden":!t.node.visible,"is-focusable":!t.node.disabled,"is-checked":!t.node.disabled&&t.node.checked},attrs:{role:"treeitem",tabindex:"-1","aria-expanded":t.expanded,"aria-disabled":t.node.disabled,"aria-checked":t.node.checked,draggable:t.tree.draggable},on:{click:function(e){return e.stopPropagation(),t.handleClick(e)},contextmenu:function(t){return e.handleContextMenu(t)},dragstart:function(e){return e.stopPropagation(),t.handleDragStart(e)},dragover:function(e){return e.stopPropagation(),t.handleDragOver(e)},dragend:function(e){return e.stopPropagation(),t.handleDragEnd(e)},drop:function(e){return e.stopPropagation(),t.handleDrop(e)}}},[i("div",{staticClass:"el-tree-node__content",style:{"padding-left":(t.node.level-1)*t.tree.indent+"px"}},[i("span",{class:[{"is-leaf":t.node.isLeaf,expanded:!t.node.isLeaf&&t.expanded},"el-tree-node__expand-icon",t.tree.iconClass?t.tree.iconClass:"el-icon-caret-right"],on:{click:function(e){return e.stopPropagation(),t.handleExpandIconClick(e)}}}),t.showCheckbox?i("el-checkbox",{attrs:{indeterminate:t.node.indeterminate,disabled:!!t.node.disabled},on:{change:t.handleCheckChange},nativeOn:{click:function(e){e.stopPropagation()}},model:{value:t.node.checked,callback:function(e){t.$set(t.node,"checked",e)},expression:"node.checked"}}):t._e(),t.node.loading?i("span",{staticClass:"el-tree-node__loading-icon el-icon-loading"}):t._e(),i("node-content",{attrs:{node:t.node}})],1),i("el-collapse-transition",[!t.renderAfterExpand||t.childNodeRendered?i("div",{directives:[{name:"show",rawName:"v-show",value:t.expanded,expression:"expanded"}],staticClass:"el-tree-node__children",attrs:{role:"group","aria-expanded":t.expanded}},t._l(t.node.childNodes,(function(e){return i("el-tree-node",{key:t.getNodeKey(e),attrs:{"render-content":t.renderContent,"render-after-expand":t.renderAfterExpand,"show-checkbox":t.showCheckbox,node:e},on:{"node-expand":t.handleChildNodeExpand}})})),1):t._e()])],1)},wc=[];yc._withStripped=!0;var xc={name:"ElTreeNode",componentName:"ElTreeNode",mixins:[D.a],props:{node:{default:function(){return{}}},props:{},renderContent:Function,renderAfterExpand:{type:Boolean,default:!0},showCheckbox:{type:Boolean,default:!1}},components:{ElCollapseTransition:Ge.a,ElCheckbox:Fi.a,NodeContent:{props:{node:{required:!0}},render:function(e){var t=this.$parent,n=t.tree,i=this.node,r=i.data,o=i.store;return t.renderContent?t.renderContent.call(t._renderProxy,e,{_self:n.$vnode.context,node:i,data:r,store:o}):n.$scopedSlots.default?n.$scopedSlots.default({node:i,data:r}):e("span",{class:"el-tree-node__label"},[i.label])}}},data:function(){return{tree:null,expanded:!1,childNodeRendered:!1,oldChecked:null,oldIndeterminate:null}},watch:{"node.indeterminate":function(e){this.handleSelectChange(this.node.checked,e)},"node.checked":function(e){this.handleSelectChange(e,this.node.indeterminate)},"node.expanded":function(e){var t=this;this.$nextTick((function(){return t.expanded=e})),e&&(this.childNodeRendered=!0)}},methods:{getNodeKey:function(e){return oc(this.tree.nodeKey,e.data)},handleSelectChange:function(e,t){this.oldChecked!==e&&this.oldIndeterminate!==t&&this.tree.$emit("check-change",this.node.data,e,t),this.oldChecked=e,this.indeterminate=t},handleClick:function(){var e=this.tree.store;e.setCurrentNode(this.node),this.tree.$emit("current-change",e.currentNode?e.currentNode.data:null,e.currentNode),this.tree.currentNode=this,this.tree.expandOnClickNode&&this.handleExpandIconClick(),this.tree.checkOnClickNode&&!this.node.disabled&&this.handleCheckChange(null,{target:{checked:!this.node.checked}}),this.tree.$emit("node-click",this.node.data,this.node,this)},handleContextMenu:function(e){this.tree._events["node-contextmenu"]&&this.tree._events["node-contextmenu"].length>0&&(e.stopPropagation(),e.preventDefault()),this.tree.$emit("node-contextmenu",e,this.node.data,this.node,this)},handleExpandIconClick:function(){this.node.isLeaf||(this.expanded?(this.tree.$emit("node-collapse",this.node.data,this.node,this),this.node.collapse()):(this.node.expand(),this.$emit("node-expand",this.node.data,this.node,this)))},handleCheckChange:function(e,t){var n=this;this.node.setChecked(t.target.checked,!this.tree.checkStrictly),this.$nextTick((function(){var e=n.tree.store;n.tree.$emit("check",n.node.data,{checkedNodes:e.getCheckedNodes(),checkedKeys:e.getCheckedKeys(),halfCheckedNodes:e.getHalfCheckedNodes(),halfCheckedKeys:e.getHalfCheckedKeys()})}))},handleChildNodeExpand:function(e,t,n){this.broadcast("ElTreeNode","tree-node-expand",t),this.tree.$emit("node-expand",e,t,n)},handleDragStart:function(e){this.tree.draggable&&this.tree.$emit("tree-node-drag-start",e,this)},handleDragOver:function(e){this.tree.draggable&&(this.tree.$emit("tree-node-drag-over",e,this),e.preventDefault())},handleDrop:function(e){e.preventDefault()},handleDragEnd:function(e){this.tree.draggable&&this.tree.$emit("tree-node-drag-end",e,this)}},created:function(){var e=this,t=this.$parent;t.isTree?this.tree=t:this.tree=t.tree;var n=this.tree;n||console.warn("Can not find node's tree.");var i=n.props||{},r=i["children"]||"children";this.$watch("node.data."+r,(function(){e.node.updateChildren()})),this.node.expanded&&(this.expanded=!0,this.childNodeRendered=!0),this.tree.accordion&&this.$on("tree-node-expand",(function(t){e.node!==t&&e.node.collapse()}))}},_c=xc,kc=l(_c,yc,wc,!1,null,null,null);kc.options.__file="packages/tree/src/tree-node.vue";var Cc=kc.exports,Sc={name:"ElTree",mixins:[D.a],components:{ElTreeNode:Cc},data:function(){return{store:null,root:null,currentNode:null,treeItems:null,checkboxItems:[],dragState:{showDropIndicator:!1,draggingNode:null,dropNode:null,allowDrop:!0}}},props:{data:{type:Array},emptyText:{type:String,default:function(){return Object(ni["t"])("el.tree.emptyText")}},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkDescendants:{type:Boolean,default:!1},autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:Array,defaultExpandedKeys:Array,currentNodeKey:[String,Number],renderContent:Function,showCheckbox:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},allowDrag:Function,allowDrop:Function,props:{default:function(){return{children:"children",label:"label",disabled:"disabled"}}},lazy:{type:Boolean,default:!1},highlightCurrent:Boolean,load:Function,filterNodeMethod:Function,accordion:Boolean,indent:{type:Number,default:18},iconClass:String},computed:{children:{set:function(e){this.data=e},get:function(){return this.data}},treeItemArray:function(){return Array.prototype.slice.call(this.treeItems)},isEmpty:function(){var e=this.root.childNodes;return!e||0===e.length||e.every((function(e){var t=e.visible;return!t}))}},watch:{defaultCheckedKeys:function(e){this.store.setDefaultCheckedKey(e)},defaultExpandedKeys:function(e){this.store.defaultExpandedKeys=e,this.store.setDefaultExpandedKeys(e)},data:function(e){this.store.setData(e)},checkboxItems:function(e){Array.prototype.forEach.call(e,(function(e){e.setAttribute("tabindex",-1)}))},checkStrictly:function(e){this.store.checkStrictly=e}},methods:{filter:function(e){if(!this.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");this.store.filter(e)},getNodeKey:function(e){return oc(this.nodeKey,e.data)},getNodePath:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in getNodePath");var t=this.store.getNode(e);if(!t)return[];var n=[t.data],i=t.parent;while(i&&i!==this.root)n.push(i.data),i=i.parent;return n.reverse()},getCheckedNodes:function(e,t){return this.store.getCheckedNodes(e,t)},getCheckedKeys:function(e){return this.store.getCheckedKeys(e)},getCurrentNode:function(){var e=this.store.getCurrentNode();return e?e.data:null},getCurrentKey:function(){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in getCurrentKey");var e=this.getCurrentNode();return e?e[this.nodeKey]:null},setCheckedNodes:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedNodes");this.store.setCheckedNodes(e,t)},setCheckedKeys:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedKeys");this.store.setCheckedKeys(e,t)},setChecked:function(e,t,n){this.store.setChecked(e,t,n)},getHalfCheckedNodes:function(){return this.store.getHalfCheckedNodes()},getHalfCheckedKeys:function(){return this.store.getHalfCheckedKeys()},setCurrentNode:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentNode");this.store.setUserCurrentNode(e)},setCurrentKey:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentKey");this.store.setCurrentNodeKey(e)},getNode:function(e){return this.store.getNode(e)},remove:function(e){this.store.remove(e)},append:function(e,t){this.store.append(e,t)},insertBefore:function(e,t){this.store.insertBefore(e,t)},insertAfter:function(e,t){this.store.insertAfter(e,t)},handleNodeExpand:function(e,t,n){this.broadcast("ElTreeNode","tree-node-expand",t),this.$emit("node-expand",e,t,n)},updateKeyChildren:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in updateKeyChild");this.store.updateChildren(e,t)},initTabIndex:function(){this.treeItems=this.$el.querySelectorAll(".is-focusable[role=treeitem]"),this.checkboxItems=this.$el.querySelectorAll("input[type=checkbox]");var e=this.$el.querySelectorAll(".is-checked[role=treeitem]");e.length?e[0].setAttribute("tabindex",0):this.treeItems[0]&&this.treeItems[0].setAttribute("tabindex",0)},handleKeydown:function(e){var t=e.target;if(-1!==t.className.indexOf("el-tree-node")){var n=e.keyCode;this.treeItems=this.$el.querySelectorAll(".is-focusable[role=treeitem]");var i=this.treeItemArray.indexOf(t),r=void 0;[38,40].indexOf(n)>-1&&(e.preventDefault(),r=38===n?0!==i?i-1:0:i<this.treeItemArray.length-1?i+1:0,this.treeItemArray[r].focus()),[37,39].indexOf(n)>-1&&(e.preventDefault(),t.click());var o=t.querySelector('[type="checkbox"]');[13,32].indexOf(n)>-1&&o&&(e.preventDefault(),o.click())}}},created:function(){var e=this;this.isTree=!0,this.store=new bc({key:this.nodeKey,data:this.data,lazy:this.lazy,props:this.props,load:this.load,currentNodeKey:this.currentNodeKey,checkStrictly:this.checkStrictly,checkDescendants:this.checkDescendants,defaultCheckedKeys:this.defaultCheckedKeys,defaultExpandedKeys:this.defaultExpandedKeys,autoExpandParent:this.autoExpandParent,defaultExpandAll:this.defaultExpandAll,filterNodeMethod:this.filterNodeMethod}),this.root=this.store.root;var t=this.dragState;this.$on("tree-node-drag-start",(function(n,i){if("function"===typeof e.allowDrag&&!e.allowDrag(i.node))return n.preventDefault(),!1;n.dataTransfer.effectAllowed="move";try{n.dataTransfer.setData("text/plain","")}catch(r){}t.draggingNode=i,e.$emit("node-drag-start",i.node,n)})),this.$on("tree-node-drag-over",(function(n,i){var r=ac(n.target,"ElTreeNode"),o=t.dropNode;o&&o!==r&&Object(ze["removeClass"])(o.$el,"is-drop-inner");var a=t.draggingNode;if(a&&r){var s=!0,l=!0,c=!0,u=!0;"function"===typeof e.allowDrop&&(s=e.allowDrop(a.node,r.node,"prev"),u=l=e.allowDrop(a.node,r.node,"inner"),c=e.allowDrop(a.node,r.node,"next")),n.dataTransfer.dropEffect=l?"move":"none",(s||l||c)&&o!==r&&(o&&e.$emit("node-drag-leave",a.node,o.node,n),e.$emit("node-drag-enter",a.node,r.node,n)),(s||l||c)&&(t.dropNode=r),r.node.nextSibling===a.node&&(c=!1),r.node.previousSibling===a.node&&(s=!1),r.node.contains(a.node,!1)&&(l=!1),(a.node===r.node||a.node.contains(r.node))&&(s=!1,l=!1,c=!1);var d=r.$el.getBoundingClientRect(),h=e.$el.getBoundingClientRect(),f=void 0,p=s?l?.25:c?.45:1:-1,m=c?l?.75:s?.55:0:1,g=-9999,v=n.clientY-d.top;f=v<d.height*p?"before":v>d.height*m?"after":l?"inner":"none";var b=r.$el.querySelector(".el-tree-node__expand-icon").getBoundingClientRect(),y=e.$refs.dropIndicator;"before"===f?g=b.top-h.top:"after"===f&&(g=b.bottom-h.top),y.style.top=g+"px",y.style.left=b.right-h.left+"px","inner"===f?Object(ze["addClass"])(r.$el,"is-drop-inner"):Object(ze["removeClass"])(r.$el,"is-drop-inner"),t.showDropIndicator="before"===f||"after"===f,t.allowDrop=t.showDropIndicator||u,t.dropType=f,e.$emit("node-drag-over",a.node,r.node,n)}})),this.$on("tree-node-drag-end",(function(n){var i=t.draggingNode,r=t.dropType,o=t.dropNode;if(n.preventDefault(),n.dataTransfer.dropEffect="move",i&&o){var a={data:i.node.data};"none"!==r&&i.node.remove(),"before"===r?o.node.parent.insertBefore(a,o.node):"after"===r?o.node.parent.insertAfter(a,o.node):"inner"===r&&o.node.insertChild(a),"none"!==r&&e.store.registerNode(a),Object(ze["removeClass"])(o.$el,"is-drop-inner"),e.$emit("node-drag-end",i.node,o.node,r,n),"none"!==r&&e.$emit("node-drop",i.node,o.node,r,n)}i&&!o&&e.$emit("node-drag-end",i.node,null,r,n),t.showDropIndicator=!1,t.draggingNode=null,t.dropNode=null,t.allowDrop=!0}))},mounted:function(){this.initTabIndex(),this.$el.addEventListener("keydown",this.handleKeydown)},updated:function(){this.treeItems=this.$el.querySelectorAll("[role=treeitem]"),this.checkboxItems=this.$el.querySelectorAll("input[type=checkbox]")}},Oc=Sc,Tc=l(Oc,tc,nc,!1,null,null,null);Tc.options.__file="packages/tree/src/tree.vue";var Ec=Tc.exports;Ec.install=function(e){e.component(Ec.name,Ec)};var Dc=Ec,Mc=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-alert-fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-alert",class:[e.typeClass,e.center?"is-center":"","is-"+e.effect],attrs:{role:"alert"}},[e.showIcon?n("i",{staticClass:"el-alert__icon",class:[e.iconClass,e.isBigIcon]}):e._e(),n("div",{staticClass:"el-alert__content"},[e.title||e.$slots.title?n("span",{staticClass:"el-alert__title",class:[e.isBoldTitle]},[e._t("title",[e._v(e._s(e.title))])],2):e._e(),e.$slots.default&&!e.description?n("p",{staticClass:"el-alert__description"},[e._t("default")],2):e._e(),e.description&&!e.$slots.default?n("p",{staticClass:"el-alert__description"},[e._v(e._s(e.description))]):e._e(),n("i",{directives:[{name:"show",rawName:"v-show",value:e.closable,expression:"closable"}],staticClass:"el-alert__closebtn",class:{"is-customed":""!==e.closeText,"el-icon-close":""===e.closeText},on:{click:function(t){e.close()}}},[e._v(e._s(e.closeText))])])])])},Ac=[];Mc._withStripped=!0;var Nc={success:"el-icon-success",warning:"el-icon-warning",error:"el-icon-error"},Ic={name:"ElAlert",props:{title:{type:String,default:""},description:{type:String,default:""},type:{type:String,default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,default:"light",validator:function(e){return-1!==["light","dark"].indexOf(e)}}},data:function(){return{visible:!0}},methods:{close:function(){this.visible=!1,this.$emit("close")}},computed:{typeClass:function(){return"el-alert--"+this.type},iconClass:function(){return Nc[this.type]||"el-icon-info"},isBigIcon:function(){return this.description||this.$slots.default?"is-big":""},isBoldTitle:function(){return this.description||this.$slots.default?"is-bold":""}}},Lc=Ic,Pc=l(Lc,Mc,Ac,!1,null,null,null);Pc.options.__file="packages/alert/src/main.vue";var $c=Pc.exports;$c.install=function(e){e.component($c.name,$c)};var Fc=$c,jc=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-notification-fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:["el-notification",e.customClass,e.horizontalClass],style:e.positionStyle,attrs:{role:"alert"},on:{mouseenter:function(t){e.clearTimer()},mouseleave:function(t){e.startTimer()},click:e.click}},[e.type||e.iconClass?n("i",{staticClass:"el-notification__icon",class:[e.typeClass,e.iconClass]}):e._e(),n("div",{staticClass:"el-notification__group",class:{"is-with-icon":e.typeClass||e.iconClass}},[n("h2",{staticClass:"el-notification__title",domProps:{textContent:e._s(e.title)}}),n("div",{directives:[{name:"show",rawName:"v-show",value:e.message,expression:"message"}],staticClass:"el-notification__content"},[e._t("default",[e.dangerouslyUseHTMLString?n("p",{domProps:{innerHTML:e._s(e.message)}}):n("p",[e._v(e._s(e.message))])])],2),e.showClose?n("div",{staticClass:"el-notification__closeBtn el-icon-close",on:{click:function(t){return t.stopPropagation(),e.close(t)}}}):e._e()])])])},zc=[];jc._withStripped=!0;var Bc={success:"success",info:"info",warning:"warning",error:"error"},Rc={data:function(){return{visible:!1,title:"",message:"",duration:4500,type:"",showClose:!0,customClass:"",iconClass:"",onClose:null,onClick:null,closed:!1,verticalOffset:0,timer:null,dangerouslyUseHTMLString:!1,position:"top-right"}},computed:{typeClass:function(){return this.type&&Bc[this.type]?"el-icon-"+Bc[this.type]:""},horizontalClass:function(){return this.position.indexOf("right")>-1?"right":"left"},verticalProperty:function(){return/^top-/.test(this.position)?"top":"bottom"},positionStyle:function(){var e;return e={},e[this.verticalProperty]=this.verticalOffset+"px",e}},watch:{closed:function(e){e&&(this.visible=!1,this.$el.addEventListener("transitionend",this.destroyElement))}},methods:{destroyElement:function(){this.$el.removeEventListener("transitionend",this.destroyElement),this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},click:function(){"function"===typeof this.onClick&&this.onClick()},close:function(){this.closed=!0,"function"===typeof this.onClose&&this.onClose()},clearTimer:function(){clearTimeout(this.timer)},startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration))},keydown:function(e){46===e.keyCode||8===e.keyCode?this.clearTimer():27===e.keyCode?this.closed||this.close():this.startTimer()}},mounted:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration)),document.addEventListener("keydown",this.keydown)},beforeDestroy:function(){document.removeEventListener("keydown",this.keydown)}},Vc=Rc,Hc=l(Vc,jc,zc,!1,null,null,null);Hc.options.__file="packages/notification/src/main.vue";var Wc=Hc.exports,qc=qi.a.extend(Wc),Uc=void 0,Kc=[],Gc=1,Yc=function e(t){if(!qi.a.prototype.$isServer){t=Ot()({},t);var n=t.onClose,i="notification_"+Gc++,r=t.position||"top-right";t.onClose=function(){e.close(i,n)},Uc=new qc({data:t}),Object(Ss["isVNode"])(t.message)&&(Uc.$slots.default=[t.message],t.message="REPLACED_BY_VNODE"),Uc.id=i,Uc.$mount(),document.body.appendChild(Uc.$el),Uc.visible=!0,Uc.dom=Uc.$el,Uc.dom.style.zIndex=C["PopupManager"].nextZIndex();var o=t.offset||0;return Kc.filter((function(e){return e.position===r})).forEach((function(e){o+=e.$el.offsetHeight+16})),o+=16,Uc.verticalOffset=o,Kc.push(Uc),Uc}};["success","warning","info","error"].forEach((function(e){Yc[e]=function(t){return("string"===typeof t||Object(Ss["isVNode"])(t))&&(t={message:t}),t.type=e,Yc(t)}})),Yc.close=function(e,t){var n=-1,i=Kc.length,r=Kc.filter((function(t,i){return t.id===e&&(n=i,!0)}))[0];if(r&&("function"===typeof t&&t(r),Kc.splice(n,1),!(i<=1)))for(var o=r.position,a=r.dom.offsetHeight,s=n;s<i-1;s++)Kc[s].position===o&&(Kc[s].dom.style[r.verticalProperty]=parseInt(Kc[s].dom.style[r.verticalProperty],10)-a-16+"px")},Yc.closeAll=function(){for(var e=Kc.length-1;e>=0;e--)Kc[e].close()};var Xc=Yc,Zc=Xc,Qc=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-slider",class:{"is-vertical":e.vertical,"el-slider--with-input":e.showInput},attrs:{role:"slider","aria-valuemin":e.min,"aria-valuemax":e.max,"aria-orientation":e.vertical?"vertical":"horizontal","aria-disabled":e.sliderDisabled}},[e.showInput&&!e.range?n("el-input-number",{ref:"input",staticClass:"el-slider__input",attrs:{step:e.step,disabled:e.sliderDisabled,controls:e.showInputControls,min:e.min,max:e.max,debounce:e.debounce,size:e.inputSize},on:{change:e.emitChange},model:{value:e.firstValue,callback:function(t){e.firstValue=t},expression:"firstValue"}}):e._e(),n("div",{ref:"slider",staticClass:"el-slider__runway",class:{"show-input":e.showInput,disabled:e.sliderDisabled},style:e.runwayStyle,on:{click:e.onSliderClick}},[n("div",{staticClass:"el-slider__bar",style:e.barStyle}),n("slider-button",{ref:"button1",attrs:{vertical:e.vertical,"tooltip-class":e.tooltipClass},model:{value:e.firstValue,callback:function(t){e.firstValue=t},expression:"firstValue"}}),e.range?n("slider-button",{ref:"button2",attrs:{vertical:e.vertical,"tooltip-class":e.tooltipClass},model:{value:e.secondValue,callback:function(t){e.secondValue=t},expression:"secondValue"}}):e._e(),e._l(e.stops,(function(t,i){return e.showStops?n("div",{key:i,staticClass:"el-slider__stop",style:e.getStopStyle(t)}):e._e()})),e.markList.length>0?[n("div",e._l(e.markList,(function(t,i){return n("div",{key:i,staticClass:"el-slider__stop el-slider__marks-stop",style:e.getStopStyle(t.position)})})),0),n("div",{staticClass:"el-slider__marks"},e._l(e.markList,(function(t,i){return n("slider-marker",{key:i,style:e.getStopStyle(t.position),attrs:{mark:t.mark}})})),1)]:e._e()],2)],1)},Jc=[];Qc._withStripped=!0;var eu=n(41),tu=n.n(eu),nu=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{ref:"button",staticClass:"el-slider__button-wrapper",class:{hover:e.hovering,dragging:e.dragging},style:e.wrapperStyle,attrs:{tabindex:"0"},on:{mouseenter:e.handleMouseEnter,mouseleave:e.handleMouseLeave,mousedown:e.onButtonDown,touchstart:e.onButtonDown,focus:e.handleMouseEnter,blur:e.handleMouseLeave,keydown:[function(t){return!("button"in t)&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.onLeftKeyDown(t)},function(t){return!("button"in t)&&e._k(t.keyCode,"right",39,t.key,["Right","ArrowRight"])||"button"in t&&2!==t.button?null:e.onRightKeyDown(t)},function(t){return!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?null:(t.preventDefault(),e.onLeftKeyDown(t))},function(t){return!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?null:(t.preventDefault(),e.onRightKeyDown(t))}]}},[n("el-tooltip",{ref:"tooltip",attrs:{placement:"top","popper-class":e.tooltipClass,disabled:!e.showTooltip}},[n("span",{attrs:{slot:"content"},slot:"content"},[e._v(e._s(e.formatValue))]),n("div",{staticClass:"el-slider__button",class:{hover:e.hovering,dragging:e.dragging}})])],1)},iu=[];nu._withStripped=!0;var ru={name:"ElSliderButton",components:{ElTooltip:ot.a},props:{value:{type:Number,default:0},vertical:{type:Boolean,default:!1},tooltipClass:String},data:function(){return{hovering:!1,dragging:!1,isClick:!1,startX:0,currentX:0,startY:0,currentY:0,startPosition:0,newPosition:null,oldValue:this.value}},computed:{disabled:function(){return this.$parent.sliderDisabled},max:function(){return this.$parent.max},min:function(){return this.$parent.min},step:function(){return this.$parent.step},showTooltip:function(){return this.$parent.showTooltip},precision:function(){return this.$parent.precision},currentPosition:function(){return(this.value-this.min)/(this.max-this.min)*100+"%"},enableFormat:function(){return this.$parent.formatTooltip instanceof Function},formatValue:function(){return this.enableFormat&&this.$parent.formatTooltip(this.value)||this.value},wrapperStyle:function(){return this.vertical?{bottom:this.currentPosition}:{left:this.currentPosition}}},watch:{dragging:function(e){this.$parent.dragging=e}},methods:{displayTooltip:function(){this.$refs.tooltip&&(this.$refs.tooltip.showPopper=!0)},hideTooltip:function(){this.$refs.tooltip&&(this.$refs.tooltip.showPopper=!1)},handleMouseEnter:function(){this.hovering=!0,this.displayTooltip()},handleMouseLeave:function(){this.hovering=!1,this.hideTooltip()},onButtonDown:function(e){this.disabled||(e.preventDefault(),this.onDragStart(e),window.addEventListener("mousemove",this.onDragging),window.addEventListener("touchmove",this.onDragging),window.addEventListener("mouseup",this.onDragEnd),window.addEventListener("touchend",this.onDragEnd),window.addEventListener("contextmenu",this.onDragEnd))},onLeftKeyDown:function(){this.disabled||(this.newPosition=parseFloat(this.currentPosition)-this.step/(this.max-this.min)*100,this.setPosition(this.newPosition),this.$parent.emitChange())},onRightKeyDown:function(){this.disabled||(this.newPosition=parseFloat(this.currentPosition)+this.step/(this.max-this.min)*100,this.setPosition(this.newPosition),this.$parent.emitChange())},onDragStart:function(e){this.dragging=!0,this.isClick=!0,"touchstart"===e.type&&(e.clientY=e.touches[0].clientY,e.clientX=e.touches[0].clientX),this.vertical?this.startY=e.clientY:this.startX=e.clientX,this.startPosition=parseFloat(this.currentPosition),this.newPosition=this.startPosition},onDragging:function(e){if(this.dragging){this.isClick=!1,this.displayTooltip(),this.$parent.resetSize();var t=0;"touchmove"===e.type&&(e.clientY=e.touches[0].clientY,e.clientX=e.touches[0].clientX),this.vertical?(this.currentY=e.clientY,t=(this.startY-this.currentY)/this.$parent.sliderSize*100):(this.currentX=e.clientX,t=(this.currentX-this.startX)/this.$parent.sliderSize*100),this.newPosition=this.startPosition+t,this.setPosition(this.newPosition)}},onDragEnd:function(){var e=this;this.dragging&&(setTimeout((function(){e.dragging=!1,e.hideTooltip(),e.isClick||(e.setPosition(e.newPosition),e.$parent.emitChange())}),0),window.removeEventListener("mousemove",this.onDragging),window.removeEventListener("touchmove",this.onDragging),window.removeEventListener("mouseup",this.onDragEnd),window.removeEventListener("touchend",this.onDragEnd),window.removeEventListener("contextmenu",this.onDragEnd))},setPosition:function(e){var t=this;if(null!==e&&!isNaN(e)){e<0?e=0:e>100&&(e=100);var n=100/((this.max-this.min)/this.step),i=Math.round(e/n),r=i*n*(this.max-this.min)*.01+this.min;r=parseFloat(r.toFixed(this.precision)),this.$emit("input",r),this.$nextTick((function(){t.displayTooltip(),t.$refs.tooltip&&t.$refs.tooltip.updatePopper()})),this.dragging||this.value===this.oldValue||(this.oldValue=this.value)}}}},ou=ru,au=l(ou,nu,iu,!1,null,null,null);au.options.__file="packages/slider/src/button.vue";var su=au.exports,lu={name:"ElMarker",props:{mark:{type:[String,Object]}},render:function(){var e=arguments[0],t="string"===typeof this.mark?this.mark:this.mark.label;return e("div",{class:"el-slider__marks-text",style:this.mark.style||{}},[t])}},cu={name:"ElSlider",mixins:[D.a],inject:{elForm:{default:""}},props:{min:{type:Number,default:0},max:{type:Number,default:100},step:{type:Number,default:1},value:{type:[Number,Array],default:0},showInput:{type:Boolean,default:!1},showInputControls:{type:Boolean,default:!0},inputSize:{type:String,default:"small"},showStops:{type:Boolean,default:!1},showTooltip:{type:Boolean,default:!0},formatTooltip:Function,disabled:{type:Boolean,default:!1},range:{type:Boolean,default:!1},vertical:{type:Boolean,default:!1},height:{type:String},debounce:{type:Number,default:300},label:{type:String},tooltipClass:String,marks:Object},components:{ElInputNumber:tu.a,SliderButton:su,SliderMarker:lu},data:function(){return{firstValue:null,secondValue:null,oldValue:null,dragging:!1,sliderSize:1}},watch:{value:function(e,t){this.dragging||Array.isArray(e)&&Array.isArray(t)&&e.every((function(e,n){return e===t[n]}))||this.setValues()},dragging:function(e){e||this.setValues()},firstValue:function(e){this.range?this.$emit("input",[this.minValue,this.maxValue]):this.$emit("input",e)},secondValue:function(){this.range&&this.$emit("input",[this.minValue,this.maxValue])},min:function(){this.setValues()},max:function(){this.setValues()}},methods:{valueChanged:function(){var e=this;return this.range?![this.minValue,this.maxValue].every((function(t,n){return t===e.oldValue[n]})):this.value!==this.oldValue},setValues:function(){if(this.min>this.max)console.error("[Element Error][Slider]min should not be greater than max.");else{var e=this.value;this.range&&Array.isArray(e)?e[1]<this.min?this.$emit("input",[this.min,this.min]):e[0]>this.max?this.$emit("input",[this.max,this.max]):e[0]<this.min?this.$emit("input",[this.min,e[1]]):e[1]>this.max?this.$emit("input",[e[0],this.max]):(this.firstValue=e[0],this.secondValue=e[1],this.valueChanged()&&(this.dispatch("ElFormItem","el.form.change",[this.minValue,this.maxValue]),this.oldValue=e.slice())):this.range||"number"!==typeof e||isNaN(e)||(e<this.min?this.$emit("input",this.min):e>this.max?this.$emit("input",this.max):(this.firstValue=e,this.valueChanged()&&(this.dispatch("ElFormItem","el.form.change",e),this.oldValue=e)))}},setPosition:function(e){var t=this.min+e*(this.max-this.min)/100;if(this.range){var n=void 0;n=Math.abs(this.minValue-t)<Math.abs(this.maxValue-t)?this.firstValue<this.secondValue?"button1":"button2":this.firstValue>this.secondValue?"button1":"button2",this.$refs[n].setPosition(e)}else this.$refs.button1.setPosition(e)},onSliderClick:function(e){if(!this.sliderDisabled&&!this.dragging){if(this.resetSize(),this.vertical){var t=this.$refs.slider.getBoundingClientRect().bottom;this.setPosition((t-e.clientY)/this.sliderSize*100)}else{var n=this.$refs.slider.getBoundingClientRect().left;this.setPosition((e.clientX-n)/this.sliderSize*100)}this.emitChange()}},resetSize:function(){this.$refs.slider&&(this.sliderSize=this.$refs.slider["client"+(this.vertical?"Height":"Width")])},emitChange:function(){var e=this;this.$nextTick((function(){e.$emit("change",e.range?[e.minValue,e.maxValue]:e.value)}))},getStopStyle:function(e){return this.vertical?{bottom:e+"%"}:{left:e+"%"}}},computed:{stops:function(){var e=this;if(!this.showStops||this.min>this.max)return[];if(0===this.step)return[];for(var t=(this.max-this.min)/this.step,n=100*this.step/(this.max-this.min),i=[],r=1;r<t;r++)i.push(r*n);return this.range?i.filter((function(t){return t<100*(e.minValue-e.min)/(e.max-e.min)||t>100*(e.maxValue-e.min)/(e.max-e.min)})):i.filter((function(t){return t>100*(e.firstValue-e.min)/(e.max-e.min)}))},markList:function(){var e=this;if(!this.marks)return[];var t=Object.keys(this.marks);return t.map(parseFloat).sort((function(e,t){return e-t})).filter((function(t){return t<=e.max&&t>=e.min})).map((function(t){return{point:t,position:100*(t-e.min)/(e.max-e.min),mark:e.marks[t]}}))},minValue:function(){return Math.min(this.firstValue,this.secondValue)},maxValue:function(){return Math.max(this.firstValue,this.secondValue)},barSize:function(){return this.range?100*(this.maxValue-this.minValue)/(this.max-this.min)+"%":100*(this.firstValue-this.min)/(this.max-this.min)+"%"},barStart:function(){return this.range?100*(this.minValue-this.min)/(this.max-this.min)+"%":"0%"},precision:function(){var e=[this.min,this.max,this.step].map((function(e){var t=(""+e).split(".")[1];return t?t.length:0}));return Math.max.apply(null,e)},runwayStyle:function(){return this.vertical?{height:this.height}:{}},barStyle:function(){return this.vertical?{height:this.barSize,bottom:this.barStart}:{width:this.barSize,left:this.barStart}},sliderDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},mounted:function(){var e=void 0;this.range?(Array.isArray(this.value)?(this.firstValue=Math.max(this.min,this.value[0]),this.secondValue=Math.min(this.max,this.value[1])):(this.firstValue=this.min,this.secondValue=this.max),this.oldValue=[this.firstValue,this.secondValue],e=this.firstValue+"-"+this.secondValue):("number"!==typeof this.value||isNaN(this.value)?this.firstValue=this.min:this.firstValue=Math.min(this.max,Math.max(this.min,this.value)),this.oldValue=this.firstValue,e=this.firstValue),this.$el.setAttribute("aria-valuetext",e),this.$el.setAttribute("aria-label",this.label?this.label:"slider between "+this.min+" and "+this.max),this.resetSize(),window.addEventListener("resize",this.resetSize)},beforeDestroy:function(){window.removeEventListener("resize",this.resetSize)}},uu=cu,du=l(uu,Qc,Jc,!1,null,null,null);du.options.__file="packages/slider/src/main.vue";var hu=du.exports;hu.install=function(e){e.component(hu.name,hu)};var fu=hu,pu=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-loading-fade"},on:{"after-leave":e.handleAfterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-loading-mask",class:[e.customClass,{"is-fullscreen":e.fullscreen}],style:{backgroundColor:e.background||""}},[n("div",{staticClass:"el-loading-spinner"},[e.spinner?n("i",{class:e.spinner}):n("svg",{staticClass:"circular",attrs:{viewBox:"25 25 50 50"}},[n("circle",{staticClass:"path",attrs:{cx:"50",cy:"50",r:"20",fill:"none"}})]),e.text?n("p",{staticClass:"el-loading-text"},[e._v(e._s(e.text))]):e._e()])])])},mu=[];pu._withStripped=!0;var gu={data:function(){return{text:null,spinner:null,background:null,fullscreen:!0,visible:!1,customClass:""}},methods:{handleAfterLeave:function(){this.$emit("after-leave")},setText:function(e){this.text=e}}},vu=gu,bu=l(vu,pu,mu,!1,null,null,null);bu.options.__file="packages/loading/src/loading.vue";var yu=bu.exports,wu=n(33),xu=n.n(wu),_u=qi.a.extend(yu),ku={install:function(e){if(!e.prototype.$isServer){var t=function(t,i){i.value?e.nextTick((function(){i.modifiers.fullscreen?(t.originalPosition=Object(ze["getStyle"])(document.body,"position"),t.originalOverflow=Object(ze["getStyle"])(document.body,"overflow"),t.maskStyle.zIndex=C["PopupManager"].nextZIndex(),Object(ze["addClass"])(t.mask,"is-fullscreen"),n(document.body,t,i)):(Object(ze["removeClass"])(t.mask,"is-fullscreen"),i.modifiers.body?(t.originalPosition=Object(ze["getStyle"])(document.body,"position"),["top","left"].forEach((function(e){var n="top"===e?"scrollTop":"scrollLeft";t.maskStyle[e]=t.getBoundingClientRect()[e]+document.body[n]+document.documentElement[n]-parseInt(Object(ze["getStyle"])(document.body,"margin-"+e),10)+"px"})),["height","width"].forEach((function(e){t.maskStyle[e]=t.getBoundingClientRect()[e]+"px"})),n(document.body,t,i)):(t.originalPosition=Object(ze["getStyle"])(t,"position"),n(t,t,i)))})):(xu()(t.instance,(function(e){if(t.instance.hiding){t.domVisible=!1;var n=i.modifiers.fullscreen||i.modifiers.body?document.body:t;Object(ze["removeClass"])(n,"el-loading-parent--relative"),Object(ze["removeClass"])(n,"el-loading-parent--hidden"),t.instance.hiding=!1}}),300,!0),t.instance.visible=!1,t.instance.hiding=!0)},n=function(t,n,i){n.domVisible||"none"===Object(ze["getStyle"])(n,"display")||"hidden"===Object(ze["getStyle"])(n,"visibility")?n.domVisible&&!0===n.instance.hiding&&(n.instance.visible=!0,n.instance.hiding=!1):(Object.keys(n.maskStyle).forEach((function(e){n.mask.style[e]=n.maskStyle[e]})),"absolute"!==n.originalPosition&&"fixed"!==n.originalPosition&&Object(ze["addClass"])(t,"el-loading-parent--relative"),i.modifiers.fullscreen&&i.modifiers.lock&&Object(ze["addClass"])(t,"el-loading-parent--hidden"),n.domVisible=!0,t.appendChild(n.mask),e.nextTick((function(){n.instance.hiding?n.instance.$emit("after-leave"):n.instance.visible=!0})),n.domInserted=!0)};e.directive("loading",{bind:function(e,n,i){var r=e.getAttribute("element-loading-text"),o=e.getAttribute("element-loading-spinner"),a=e.getAttribute("element-loading-background"),s=e.getAttribute("element-loading-custom-class"),l=i.context,c=new _u({el:document.createElement("div"),data:{text:l&&l[r]||r,spinner:l&&l[o]||o,background:l&&l[a]||a,customClass:l&&l[s]||s,fullscreen:!!n.modifiers.fullscreen}});e.instance=c,e.mask=c.$el,e.maskStyle={},n.value&&t(e,n)},update:function(e,n){e.instance.setText(e.getAttribute("element-loading-text")),n.oldValue!==n.value&&t(e,n)},unbind:function(e,n){e.domInserted&&(e.mask&&e.mask.parentNode&&e.mask.parentNode.removeChild(e.mask),t(e,{value:!1,modifiers:n.modifiers})),e.instance&&e.instance.$destroy()}})}}},Cu=ku,Su=qi.a.extend(yu),Ou={text:null,fullscreen:!0,body:!1,lock:!1,customClass:""},Tu=void 0;Su.prototype.originalPosition="",Su.prototype.originalOverflow="",Su.prototype.close=function(){var e=this;this.fullscreen&&(Tu=void 0),xu()(this,(function(t){var n=e.fullscreen||e.body?document.body:e.target;Object(ze["removeClass"])(n,"el-loading-parent--relative"),Object(ze["removeClass"])(n,"el-loading-parent--hidden"),e.$el&&e.$el.parentNode&&e.$el.parentNode.removeChild(e.$el),e.$destroy()}),300),this.visible=!1};var Eu=function(e,t,n){var i={};e.fullscreen?(n.originalPosition=Object(ze["getStyle"])(document.body,"position"),n.originalOverflow=Object(ze["getStyle"])(document.body,"overflow"),i.zIndex=C["PopupManager"].nextZIndex()):e.body?(n.originalPosition=Object(ze["getStyle"])(document.body,"position"),["top","left"].forEach((function(t){var n="top"===t?"scrollTop":"scrollLeft";i[t]=e.target.getBoundingClientRect()[t]+document.body[n]+document.documentElement[n]+"px"})),["height","width"].forEach((function(t){i[t]=e.target.getBoundingClientRect()[t]+"px"}))):n.originalPosition=Object(ze["getStyle"])(t,"position"),Object.keys(i).forEach((function(e){n.$el.style[e]=i[e]}))},Du=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!qi.a.prototype.$isServer){if(e=Ot()({},Ou,e),"string"===typeof e.target&&(e.target=document.querySelector(e.target)),e.target=e.target||document.body,e.target!==document.body?e.fullscreen=!1:e.body=!0,e.fullscreen&&Tu)return Tu;var t=e.body?document.body:e.target,n=new Su({el:document.createElement("div"),data:e});return Eu(e,t,n),"absolute"!==n.originalPosition&&"fixed"!==n.originalPosition&&Object(ze["addClass"])(t,"el-loading-parent--relative"),e.fullscreen&&e.lock&&Object(ze["addClass"])(t,"el-loading-parent--hidden"),t.appendChild(n.$el),qi.a.nextTick((function(){n.visible=!0})),e.fullscreen&&(Tu=n),n}},Mu=Du,Au={install:function(e){e.use(Cu),e.prototype.$loading=Mu},directive:Cu,service:Mu},Nu=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("i",{class:"el-icon-"+e.name})},Iu=[];Nu._withStripped=!0;var Lu={name:"ElIcon",props:{name:String}},Pu=Lu,$u=l(Pu,Nu,Iu,!1,null,null,null);$u.options.__file="packages/icon/src/icon.vue";var Fu=$u.exports;Fu.install=function(e){e.component(Fu.name,Fu)};var ju=Fu,zu={name:"ElRow",componentName:"ElRow",props:{tag:{type:String,default:"div"},gutter:Number,type:String,justify:{type:String,default:"start"},align:{type:String,default:"top"}},computed:{style:function(){var e={};return this.gutter&&(e.marginLeft="-"+this.gutter/2+"px",e.marginRight=e.marginLeft),e}},render:function(e){return e(this.tag,{class:["el-row","start"!==this.justify?"is-justify-"+this.justify:"","top"!==this.align?"is-align-"+this.align:"",{"el-row--flex":"flex"===this.type}],style:this.style},this.$slots.default)},install:function(e){e.component(zu.name,zu)}},Bu=zu,Ru="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)},Vu={name:"ElCol",props:{span:{type:Number,default:24},tag:{type:String,default:"div"},offset:Number,pull:Number,push:Number,xs:[Number,Object],sm:[Number,Object],md:[Number,Object],lg:[Number,Object],xl:[Number,Object]},computed:{gutter:function(){var e=this.$parent;while(e&&"ElRow"!==e.$options.componentName)e=e.$parent;return e?e.gutter:0}},render:function(e){var t=this,n=[],i={};return this.gutter&&(i.paddingLeft=this.gutter/2+"px",i.paddingRight=i.paddingLeft),["span","offset","pull","push"].forEach((function(e){(t[e]||0===t[e])&&n.push("span"!==e?"el-col-"+e+"-"+t[e]:"el-col-"+t[e])})),["xs","sm","md","lg","xl"].forEach((function(e){if("number"===typeof t[e])n.push("el-col-"+e+"-"+t[e]);else if("object"===Ru(t[e])){var i=t[e];Object.keys(i).forEach((function(t){n.push("span"!==t?"el-col-"+e+"-"+t+"-"+i[t]:"el-col-"+e+"-"+i[t])}))}})),e(this.tag,{class:["el-col",n],style:i},this.$slots.default)},install:function(e){e.component(Vu.name,Vu)}},Hu=Vu,Wu=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition-group",{class:["el-upload-list","el-upload-list--"+e.listType,{"is-disabled":e.disabled}],attrs:{tag:"ul",name:"el-list"}},e._l(e.files,(function(t){return n("li",{key:t.uid,class:["el-upload-list__item","is-"+t.status,e.focusing?"focusing":""],attrs:{tabindex:"0"},on:{keydown:function(n){if(!("button"in n)&&e._k(n.keyCode,"delete",[8,46],n.key,["Backspace","Delete","Del"]))return null;!e.disabled&&e.$emit("remove",t)},focus:function(t){e.focusing=!0},blur:function(t){e.focusing=!1},click:function(t){e.focusing=!1}}},[e._t("default",["uploading"!==t.status&&["picture-card","picture"].indexOf(e.listType)>-1?n("img",{staticClass:"el-upload-list__item-thumbnail",attrs:{src:t.url,alt:""}}):e._e(),n("a",{staticClass:"el-upload-list__item-name",on:{click:function(n){e.handleClick(t)}}},[n("i",{staticClass:"el-icon-document"}),e._v(e._s(t.name)+"\n      ")]),n("label",{staticClass:"el-upload-list__item-status-label"},[n("i",{class:{"el-icon-upload-success":!0,"el-icon-circle-check":"text"===e.listType,"el-icon-check":["picture-card","picture"].indexOf(e.listType)>-1}})]),e.disabled?e._e():n("i",{staticClass:"el-icon-close",on:{click:function(n){e.$emit("remove",t)}}}),e.disabled?e._e():n("i",{staticClass:"el-icon-close-tip"},[e._v(e._s(e.t("el.upload.deleteTip")))]),"uploading"===t.status?n("el-progress",{attrs:{type:"picture-card"===e.listType?"circle":"line","stroke-width":"picture-card"===e.listType?6:2,percentage:e.parsePercentage(t.percentage)}}):e._e(),"picture-card"===e.listType?n("span",{staticClass:"el-upload-list__item-actions"},[e.handlePreview&&"picture-card"===e.listType?n("span",{staticClass:"el-upload-list__item-preview",on:{click:function(n){e.handlePreview(t)}}},[n("i",{staticClass:"el-icon-zoom-in"})]):e._e(),e.disabled?e._e():n("span",{staticClass:"el-upload-list__item-delete",on:{click:function(n){e.$emit("remove",t)}}},[n("i",{staticClass:"el-icon-delete"})])]):e._e()],{file:t})],2)})),0)},qu=[];Wu._withStripped=!0;var Uu=n(34),Ku=n.n(Uu),Gu={name:"ElUploadList",mixins:[b.a],data:function(){return{focusing:!1}},components:{ElProgress:Ku.a},props:{files:{type:Array,default:function(){return[]}},disabled:{type:Boolean,default:!1},handlePreview:Function,listType:String},methods:{parsePercentage:function(e){return parseInt(e,10)},handleClick:function(e){this.handlePreview&&this.handlePreview(e)}}},Yu=Gu,Xu=l(Yu,Wu,qu,!1,null,null,null);Xu.options.__file="packages/upload/src/upload-list.vue";var Zu=Xu.exports,Qu=n(24),Ju=n.n(Qu);function ed(e,t,n){var i=void 0;i=n.response?""+(n.response.error||n.response):n.responseText?""+n.responseText:"fail to post "+e+" "+n.status;var r=new Error(i);return r.status=n.status,r.method="post",r.url=e,r}function td(e){var t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch(n){return t}}function nd(e){if("undefined"!==typeof XMLHttpRequest){var t=new XMLHttpRequest,n=e.action;t.upload&&(t.upload.onprogress=function(t){t.total>0&&(t.percent=t.loaded/t.total*100),e.onProgress(t)});var i=new FormData;e.data&&Object.keys(e.data).forEach((function(t){i.append(t,e.data[t])})),i.append(e.filename,e.file,e.file.name),t.onerror=function(t){e.onError(t)},t.onload=function(){if(t.status<200||t.status>=300)return e.onError(ed(n,e,t));e.onSuccess(td(t))},t.open("post",n,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);var r=e.headers||{};for(var o in r)r.hasOwnProperty(o)&&null!==r[o]&&t.setRequestHeader(o,r[o]);return t.send(i),t}}var id=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-upload-dragger",class:{"is-dragover":e.dragover},on:{drop:function(t){return t.preventDefault(),e.onDrop(t)},dragover:function(t){return t.preventDefault(),e.onDragover(t)},dragleave:function(t){t.preventDefault(),e.dragover=!1}}},[e._t("default")],2)},rd=[];id._withStripped=!0;var od={name:"ElUploadDrag",props:{disabled:Boolean},inject:{uploader:{default:""}},data:function(){return{dragover:!1}},methods:{onDragover:function(){this.disabled||(this.dragover=!0)},onDrop:function(e){if(!this.disabled&&this.uploader){var t=this.uploader.accept;this.dragover=!1,t?this.$emit("file",[].slice.call(e.dataTransfer.files).filter((function(e){var n=e.type,i=e.name,r=i.indexOf(".")>-1?"."+i.split(".").pop():"",o=n.replace(/\/.*$/,"");return t.split(",").map((function(e){return e.trim()})).filter((function(e){return e})).some((function(e){return/\..+$/.test(e)?r===e:/\/\*$/.test(e)?o===e.replace(/\/\*$/,""):!!/^[^\/]+\/[^\/]+$/.test(e)&&n===e}))}))):this.$emit("file",e.dataTransfer.files)}}}},ad=od,sd=l(ad,id,rd,!1,null,null,null);sd.options.__file="packages/upload/src/upload-dragger.vue";var ld,cd,ud=sd.exports,dd={inject:["uploader"],components:{UploadDragger:ud},props:{type:String,action:{type:String,required:!0},name:{type:String,default:"file"},data:Object,headers:Object,withCredentials:Boolean,multiple:Boolean,accept:String,onStart:Function,onProgress:Function,onSuccess:Function,onError:Function,beforeUpload:Function,drag:Boolean,onPreview:{type:Function,default:function(){}},onRemove:{type:Function,default:function(){}},fileList:Array,autoUpload:Boolean,listType:String,httpRequest:{type:Function,default:nd},disabled:Boolean,limit:Number,onExceed:Function},data:function(){return{mouseover:!1,reqs:{}}},methods:{isImage:function(e){return-1!==e.indexOf("image")},handleChange:function(e){var t=e.target.files;t&&this.uploadFiles(t)},uploadFiles:function(e){var t=this;if(this.limit&&this.fileList.length+e.length>this.limit)this.onExceed&&this.onExceed(e,this.fileList);else{var n=Array.prototype.slice.call(e);this.multiple||(n=n.slice(0,1)),0!==n.length&&n.forEach((function(e){t.onStart(e),t.autoUpload&&t.upload(e)}))}},upload:function(e){var t=this;if(this.$refs.input.value=null,!this.beforeUpload)return this.post(e);var n=this.beforeUpload(e);n&&n.then?n.then((function(n){var i=Object.prototype.toString.call(n);if("[object File]"===i||"[object Blob]"===i){for(var r in"[object Blob]"===i&&(n=new File([n],e.name,{type:e.type})),e)e.hasOwnProperty(r)&&(n[r]=e[r]);t.post(n)}else t.post(e)}),(function(){t.onRemove(null,e)})):!1!==n?this.post(e):this.onRemove(null,e)},abort:function(e){var t=this.reqs;if(e){var n=e;e.uid&&(n=e.uid),t[n]&&t[n].abort()}else Object.keys(t).forEach((function(e){t[e]&&t[e].abort(),delete t[e]}))},post:function(e){var t=this,n=e.uid,i={headers:this.headers,withCredentials:this.withCredentials,file:e,data:this.data,filename:this.name,action:this.action,onProgress:function(n){t.onProgress(n,e)},onSuccess:function(i){t.onSuccess(i,e),delete t.reqs[n]},onError:function(i){t.onError(i,e),delete t.reqs[n]}},r=this.httpRequest(i);this.reqs[n]=r,r&&r.then&&r.then(i.onSuccess,i.onError)},handleClick:function(){this.disabled||(this.$refs.input.value=null,this.$refs.input.click())},handleKeydown:function(e){e.target===e.currentTarget&&(13!==e.keyCode&&32!==e.keyCode||this.handleClick())}},render:function(e){var t=this.handleClick,n=this.drag,i=this.name,r=this.handleChange,o=this.multiple,a=this.accept,s=this.listType,l=this.uploadFiles,c=this.disabled,u=this.handleKeydown,d={class:{"el-upload":!0},on:{click:t,keydown:u}};return d.class["el-upload--"+s]=!0,e("div",Ju()([d,{attrs:{tabindex:"0"}}]),[n?e("upload-dragger",{attrs:{disabled:c},on:{file:l}},[this.$slots.default]):this.$slots.default,e("input",{class:"el-upload__input",attrs:{type:"file",name:i,multiple:o,accept:a},ref:"input",on:{change:r}})])}},hd=dd,fd=l(hd,ld,cd,!1,null,null,null);fd.options.__file="packages/upload/src/upload.vue";var pd=fd.exports;function md(){}var gd,vd,bd={name:"ElUpload",mixins:[T.a],components:{ElProgress:Ku.a,UploadList:Zu,Upload:pd},provide:function(){return{uploader:this}},inject:{elForm:{default:""}},props:{action:{type:String,required:!0},headers:{type:Object,default:function(){return{}}},data:Object,multiple:Boolean,name:{type:String,default:"file"},drag:Boolean,dragger:Boolean,withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:String,type:{type:String,default:"select"},beforeUpload:Function,beforeRemove:Function,onRemove:{type:Function,default:md},onChange:{type:Function,default:md},onPreview:{type:Function},onSuccess:{type:Function,default:md},onProgress:{type:Function,default:md},onError:{type:Function,default:md},fileList:{type:Array,default:function(){return[]}},autoUpload:{type:Boolean,default:!0},listType:{type:String,default:"text"},httpRequest:Function,disabled:Boolean,limit:Number,onExceed:{type:Function,default:md}},data:function(){return{uploadFiles:[],dragOver:!1,draging:!1,tempIndex:1}},computed:{uploadDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{listType:function(e){"picture-card"!==e&&"picture"!==e||(this.uploadFiles=this.uploadFiles.map((function(e){if(!e.url&&e.raw)try{e.url=URL.createObjectURL(e.raw)}catch(t){console.error("[Element Error][Upload]",t)}return e})))},fileList:{immediate:!0,handler:function(e){var t=this;this.uploadFiles=e.map((function(e){return e.uid=e.uid||Date.now()+t.tempIndex++,e.status=e.status||"success",e}))}}},methods:{handleStart:function(e){e.uid=Date.now()+this.tempIndex++;var t={status:"ready",name:e.name,size:e.size,percentage:0,uid:e.uid,raw:e};if("picture-card"===this.listType||"picture"===this.listType)try{t.url=URL.createObjectURL(e)}catch(n){return void console.error("[Element Error][Upload]",n)}this.uploadFiles.push(t),this.onChange(t,this.uploadFiles)},handleProgress:function(e,t){var n=this.getFile(t);this.onProgress(e,n,this.uploadFiles),n.status="uploading",n.percentage=e.percent||0},handleSuccess:function(e,t){var n=this.getFile(t);n&&(n.status="success",n.response=e,this.onSuccess(e,n,this.uploadFiles),this.onChange(n,this.uploadFiles))},handleError:function(e,t){var n=this.getFile(t),i=this.uploadFiles;n.status="fail",i.splice(i.indexOf(n),1),this.onError(e,n,this.uploadFiles),this.onChange(n,this.uploadFiles)},handleRemove:function(e,t){var n=this;t&&(e=this.getFile(t));var i=function(){n.abort(e);var t=n.uploadFiles;t.splice(t.indexOf(e),1),n.onRemove(e,t)};if(this.beforeRemove){if("function"===typeof this.beforeRemove){var r=this.beforeRemove(e,this.uploadFiles);r&&r.then?r.then((function(){i()}),md):!1!==r&&i()}}else i()},getFile:function(e){var t=this.uploadFiles,n=void 0;return t.every((function(t){return n=e.uid===t.uid?t:null,!n})),n},abort:function(e){this.$refs["upload-inner"].abort(e)},clearFiles:function(){this.uploadFiles=[]},submit:function(){var e=this;this.uploadFiles.filter((function(e){return"ready"===e.status})).forEach((function(t){e.$refs["upload-inner"].upload(t.raw)}))},getMigratingConfig:function(){return{props:{"default-file-list":"default-file-list is renamed to file-list.","show-upload-list":"show-upload-list is renamed to show-file-list.","thumbnail-mode":"thumbnail-mode has been deprecated, you can implement the same effect according to this case: http://element.eleme.io/#/zh-CN/component/upload#yong-hu-tou-xiang-shang-chuan"}}}},beforeDestroy:function(){this.uploadFiles.forEach((function(e){e.url&&0===e.url.indexOf("blob:")&&URL.revokeObjectURL(e.url)}))},render:function(e){var t=this,n=void 0;this.showFileList&&(n=e(Zu,{attrs:{disabled:this.uploadDisabled,listType:this.listType,files:this.uploadFiles,handlePreview:this.onPreview},on:{remove:this.handleRemove}},[function(e){if(t.$scopedSlots.file)return t.$scopedSlots.file({file:e.file})}]));var i={props:{type:this.type,drag:this.drag,action:this.action,multiple:this.multiple,"before-upload":this.beforeUpload,"with-credentials":this.withCredentials,headers:this.headers,name:this.name,data:this.data,accept:this.accept,fileList:this.uploadFiles,autoUpload:this.autoUpload,listType:this.listType,disabled:this.uploadDisabled,limit:this.limit,"on-exceed":this.onExceed,"on-start":this.handleStart,"on-progress":this.handleProgress,"on-success":this.handleSuccess,"on-error":this.handleError,"on-preview":this.onPreview,"on-remove":this.handleRemove,"http-request":this.httpRequest},ref:"upload-inner"},r=this.$slots.trigger||this.$slots.default,o=e("upload",i,[r]);return e("div",["picture-card"===this.listType?n:"",this.$slots.trigger?[o,this.$slots.default]:o,this.$slots.tip,"picture-card"!==this.listType?n:""])}},yd=bd,wd=l(yd,gd,vd,!1,null,null,null);wd.options.__file="packages/upload/src/index.vue";var xd=wd.exports;xd.install=function(e){e.component(xd.name,xd)};var _d=xd,kd=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-progress",class:["el-progress--"+e.type,e.status?"is-"+e.status:"",{"el-progress--without-text":!e.showText,"el-progress--text-inside":e.textInside}],attrs:{role:"progressbar","aria-valuenow":e.percentage,"aria-valuemin":"0","aria-valuemax":"100"}},["line"===e.type?n("div",{staticClass:"el-progress-bar"},[n("div",{staticClass:"el-progress-bar__outer",style:{height:e.strokeWidth+"px"}},[n("div",{staticClass:"el-progress-bar__inner",style:e.barStyle},[e.showText&&e.textInside?n("div",{staticClass:"el-progress-bar__innerText"},[e._v(e._s(e.content))]):e._e()])])]):n("div",{staticClass:"el-progress-circle",style:{height:e.width+"px",width:e.width+"px"}},[n("svg",{attrs:{viewBox:"0 0 100 100"}},[n("path",{staticClass:"el-progress-circle__track",style:e.trailPathStyle,attrs:{d:e.trackPath,stroke:"#e5e9f2","stroke-width":e.relativeStrokeWidth,fill:"none"}}),n("path",{staticClass:"el-progress-circle__path",style:e.circlePathStyle,attrs:{d:e.trackPath,stroke:e.stroke,fill:"none","stroke-linecap":e.strokeLinecap,"stroke-width":e.percentage?e.relativeStrokeWidth:0}})])]),e.showText&&!e.textInside?n("div",{staticClass:"el-progress__text",style:{fontSize:e.progressTextSize+"px"}},[e.status?n("i",{class:e.iconClass}):[e._v(e._s(e.content))]],2):e._e()])},Cd=[];kd._withStripped=!0;var Sd={name:"ElProgress",props:{type:{type:String,default:"line",validator:function(e){return["line","circle","dashboard"].indexOf(e)>-1}},percentage:{type:Number,default:0,required:!0,validator:function(e){return e>=0&&e<=100}},status:{type:String,validator:function(e){return["success","exception","warning"].indexOf(e)>-1}},strokeWidth:{type:Number,default:6},strokeLinecap:{type:String,default:"round"},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:[String,Array,Function],default:""},format:Function},computed:{barStyle:function(){var e={};return e.width=this.percentage+"%",e.backgroundColor=this.getCurrentColor(this.percentage),e},relativeStrokeWidth:function(){return(this.strokeWidth/this.width*100).toFixed(1)},radius:function(){return"circle"===this.type||"dashboard"===this.type?parseInt(50-parseFloat(this.relativeStrokeWidth)/2,10):0},trackPath:function(){var e=this.radius,t="dashboard"===this.type;return"\n        M 50 50\n        m 0 "+(t?"":"-")+e+"\n        a "+e+" "+e+" 0 1 1 0 "+(t?"-":"")+2*e+"\n        a "+e+" "+e+" 0 1 1 0 "+(t?"":"-")+2*e+"\n        "},perimeter:function(){return 2*Math.PI*this.radius},rate:function(){return"dashboard"===this.type?.75:1},strokeDashoffset:function(){var e=-1*this.perimeter*(1-this.rate)/2;return e+"px"},trailPathStyle:function(){return{strokeDasharray:this.perimeter*this.rate+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset}},circlePathStyle:function(){return{strokeDasharray:this.perimeter*this.rate*(this.percentage/100)+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease"}},stroke:function(){var e=void 0;if(this.color)e=this.getCurrentColor(this.percentage);else switch(this.status){case"success":e="#13ce66";break;case"exception":e="#ff4949";break;case"warning":e="#e6a23c";break;default:e="#20a0ff"}return e},iconClass:function(){return"warning"===this.status?"el-icon-warning":"line"===this.type?"success"===this.status?"el-icon-circle-check":"el-icon-circle-close":"success"===this.status?"el-icon-check":"el-icon-close"},progressTextSize:function(){return"line"===this.type?12+.4*this.strokeWidth:.111111*this.width+2},content:function(){return"function"===typeof this.format?this.format(this.percentage)||"":this.percentage+"%"}},methods:{getCurrentColor:function(e){return"function"===typeof this.color?this.color(e):"string"===typeof this.color?this.color:this.getLevelColor(e)},getLevelColor:function(e){for(var t=this.getColorArray().sort((function(e,t){return e.percentage-t.percentage})),n=0;n<t.length;n++)if(t[n].percentage>e)return t[n].color;return t[t.length-1].color},getColorArray:function(){var e=this.color,t=100/e.length;return e.map((function(e,n){return"string"===typeof e?{color:e,progress:(n+1)*t}:e}))}}},Od=Sd,Td=l(Od,kd,Cd,!1,null,null,null);Td.options.__file="packages/progress/src/progress.vue";var Ed=Td.exports;Ed.install=function(e){e.component(Ed.name,Ed)};var Dd=Ed,Md=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",{staticClass:"el-spinner"},[n("svg",{staticClass:"el-spinner-inner",style:{width:e.radius/2+"px",height:e.radius/2+"px"},attrs:{viewBox:"0 0 50 50"}},[n("circle",{staticClass:"path",attrs:{cx:"25",cy:"25",r:"20",fill:"none",stroke:e.strokeColor,"stroke-width":e.strokeWidth}})])])},Ad=[];Md._withStripped=!0;var Nd={name:"ElSpinner",props:{type:String,radius:{type:Number,default:100},strokeWidth:{type:Number,default:5},strokeColor:{type:String,default:"#efefef"}}},Id=Nd,Ld=l(Id,Md,Ad,!1,null,null,null);Ld.options.__file="packages/spinner/src/spinner.vue";var Pd=Ld.exports;Pd.install=function(e){e.component(Pd.name,Pd)};var $d=Pd,Fd=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-message-fade"},on:{"after-leave":e.handleAfterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:["el-message",e.type&&!e.iconClass?"el-message--"+e.type:"",e.center?"is-center":"",e.showClose?"is-closable":"",e.customClass],style:e.positionStyle,attrs:{role:"alert"},on:{mouseenter:e.clearTimer,mouseleave:e.startTimer}},[e.iconClass?n("i",{class:e.iconClass}):n("i",{class:e.typeClass}),e._t("default",[e.dangerouslyUseHTMLString?n("p",{staticClass:"el-message__content",domProps:{innerHTML:e._s(e.message)}}):n("p",{staticClass:"el-message__content"},[e._v(e._s(e.message))])]),e.showClose?n("i",{staticClass:"el-message__closeBtn el-icon-close",on:{click:e.close}}):e._e()],2)])},jd=[];Fd._withStripped=!0;var zd={success:"success",info:"info",warning:"warning",error:"error"},Bd={data:function(){return{visible:!1,message:"",duration:3e3,type:"info",iconClass:"",customClass:"",onClose:null,showClose:!1,closed:!1,verticalOffset:20,timer:null,dangerouslyUseHTMLString:!1,center:!1}},computed:{typeClass:function(){return this.type&&!this.iconClass?"el-message__icon el-icon-"+zd[this.type]:""},positionStyle:function(){return{top:this.verticalOffset+"px"}}},watch:{closed:function(e){e&&(this.visible=!1)}},methods:{handleAfterLeave:function(){this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},close:function(){this.closed=!0,"function"===typeof this.onClose&&this.onClose(this)},clearTimer:function(){clearTimeout(this.timer)},startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration))},keydown:function(e){27===e.keyCode&&(this.closed||this.close())}},mounted:function(){this.startTimer(),document.addEventListener("keydown",this.keydown)},beforeDestroy:function(){document.removeEventListener("keydown",this.keydown)}},Rd=Bd,Vd=l(Rd,Fd,jd,!1,null,null,null);Vd.options.__file="packages/message/src/main.vue";var Hd=Vd.exports,Wd=qi.a.extend(Hd),qd=void 0,Ud=[],Kd=1,Gd=function e(t){if(!qi.a.prototype.$isServer){t=t||{},"string"===typeof t&&(t={message:t});var n=t.onClose,i="message_"+Kd++;t.onClose=function(){e.close(i,n)},qd=new Wd({data:t}),qd.id=i,Object(Ss["isVNode"])(qd.message)&&(qd.$slots.default=[qd.message],qd.message=null),qd.$mount(),document.body.appendChild(qd.$el);var r=t.offset||20;return Ud.forEach((function(e){r+=e.$el.offsetHeight+16})),qd.verticalOffset=r,qd.visible=!0,qd.$el.style.zIndex=C["PopupManager"].nextZIndex(),Ud.push(qd),qd}};["success","warning","info","error"].forEach((function(e){Gd[e]=function(t){return"string"===typeof t&&(t={message:t}),t.type=e,Gd(t)}})),Gd.close=function(e,t){for(var n=Ud.length,i=-1,r=void 0,o=0;o<n;o++)if(e===Ud[o].id){r=Ud[o].$el.offsetHeight,i=o,"function"===typeof t&&t(Ud[o]),Ud.splice(o,1);break}if(!(n<=1||-1===i||i>Ud.length-1))for(var a=i;a<n-1;a++){var s=Ud[a].$el;s.style["top"]=parseInt(s.style["top"],10)-r-16+"px"}},Gd.closeAll=function(){for(var e=Ud.length-1;e>=0;e--)Ud[e].close()};var Yd=Gd,Xd=Yd,Zd=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-badge"},[e._t("default"),n("transition",{attrs:{name:"el-zoom-in-center"}},[n("sup",{directives:[{name:"show",rawName:"v-show",value:!e.hidden&&(e.content||0===e.content||e.isDot),expression:"!hidden && (content || content === 0 || isDot)"}],staticClass:"el-badge__content",class:["el-badge__content--"+e.type,{"is-fixed":e.$slots.default,"is-dot":e.isDot}],domProps:{textContent:e._s(e.content)}})])],2)},Qd=[];Zd._withStripped=!0;var Jd={name:"ElBadge",props:{value:[String,Number],max:Number,isDot:Boolean,hidden:Boolean,type:{type:String,validator:function(e){return["primary","success","warning","info","danger"].indexOf(e)>-1}}},computed:{content:function(){if(!this.isDot){var e=this.value,t=this.max;return"number"===typeof e&&"number"===typeof t&&t<e?t+"+":e}}}},eh=Jd,th=l(eh,Zd,Qd,!1,null,null,null);th.options.__file="packages/badge/src/main.vue";var nh=th.exports;nh.install=function(e){e.component(nh.name,nh)};var ih=nh,rh=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-card",class:e.shadow?"is-"+e.shadow+"-shadow":"is-always-shadow"},[e.$slots.header||e.header?n("div",{staticClass:"el-card__header"},[e._t("header",[e._v(e._s(e.header))])],2):e._e(),n("div",{staticClass:"el-card__body",style:e.bodyStyle},[e._t("default")],2)])},oh=[];rh._withStripped=!0;var ah={name:"ElCard",props:{header:{},bodyStyle:{},shadow:{type:String}}},sh=ah,lh=l(sh,rh,oh,!1,null,null,null);lh.options.__file="packages/card/src/main.vue";var ch=lh.exports;ch.install=function(e){e.component(ch.name,ch)};var uh=ch,dh=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-rate",attrs:{role:"slider","aria-valuenow":e.currentValue,"aria-valuetext":e.text,"aria-valuemin":"0","aria-valuemax":e.max,tabindex:"0"},on:{keydown:e.handleKey}},[e._l(e.max,(function(t,i){return n("span",{key:i,staticClass:"el-rate__item",style:{cursor:e.rateDisabled?"auto":"pointer"},on:{mousemove:function(n){e.setCurrentValue(t,n)},mouseleave:e.resetCurrentValue,click:function(n){e.selectValue(t)}}},[n("i",{staticClass:"el-rate__icon",class:[e.classes[t-1],{hover:e.hoverIndex===t}],style:e.getIconStyle(t)},[e.showDecimalIcon(t)?n("i",{staticClass:"el-rate__decimal",class:e.decimalIconClass,style:e.decimalStyle}):e._e()])])})),e.showText||e.showScore?n("span",{staticClass:"el-rate__text",style:{color:e.textColor}},[e._v(e._s(e.text))]):e._e()],2)},hh=[];dh._withStripped=!0;var fh=n(18),ph={name:"ElRate",mixins:[T.a],inject:{elForm:{default:""}},data:function(){return{pointerAtLeftHalf:!0,currentValue:this.value,hoverIndex:-1}},props:{value:{type:Number,default:0},lowThreshold:{type:Number,default:2},highThreshold:{type:Number,default:4},max:{type:Number,default:5},colors:{type:[Array,Object],default:function(){return["#F7BA2A","#F7BA2A","#F7BA2A"]}},voidColor:{type:String,default:"#C6D1DE"},disabledVoidColor:{type:String,default:"#EFF2F7"},iconClasses:{type:[Array,Object],default:function(){return["el-icon-star-on","el-icon-star-on","el-icon-star-on"]}},voidIconClass:{type:String,default:"el-icon-star-off"},disabledVoidIconClass:{type:String,default:"el-icon-star-on"},disabled:{type:Boolean,default:!1},allowHalf:{type:Boolean,default:!1},showText:{type:Boolean,default:!1},showScore:{type:Boolean,default:!1},textColor:{type:String,default:"#1f2d3d"},texts:{type:Array,default:function(){return["极差","失望","一般","满意","惊喜"]}},scoreTemplate:{type:String,default:"{value}"}},computed:{text:function(){var e="";return this.showScore?e=this.scoreTemplate.replace(/\{\s*value\s*\}/,this.rateDisabled?this.value:this.currentValue):this.showText&&(e=this.texts[Math.ceil(this.currentValue)-1]),e},decimalStyle:function(){var e="";return this.rateDisabled?e=this.valueDecimal+"%":this.allowHalf&&(e="50%"),{color:this.activeColor,width:e}},valueDecimal:function(){return 100*this.value-100*Math.floor(this.value)},classMap:function(){var e;return Array.isArray(this.iconClasses)?(e={},e[this.lowThreshold]=this.iconClasses[0],e[this.highThreshold]={value:this.iconClasses[1],excluded:!0},e[this.max]=this.iconClasses[2],e):this.iconClasses},decimalIconClass:function(){return this.getValueFromMap(this.value,this.classMap)},voidClass:function(){return this.rateDisabled?this.disabledVoidIconClass:this.voidIconClass},activeClass:function(){return this.getValueFromMap(this.currentValue,this.classMap)},colorMap:function(){var e;return Array.isArray(this.colors)?(e={},e[this.lowThreshold]=this.colors[0],e[this.highThreshold]={value:this.colors[1],excluded:!0},e[this.max]=this.colors[2],e):this.colors},activeColor:function(){return this.getValueFromMap(this.currentValue,this.colorMap)},classes:function(){var e=[],t=0,n=this.currentValue;for(this.allowHalf&&this.currentValue!==Math.floor(this.currentValue)&&n--;t<n;t++)e.push(this.activeClass);for(;t<this.max;t++)e.push(this.voidClass);return e},rateDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{value:function(e){this.currentValue=e,this.pointerAtLeftHalf=this.value!==Math.floor(this.value)}},methods:{getMigratingConfig:function(){return{props:{"text-template":"text-template is renamed to score-template."}}},getValueFromMap:function(e,t){var n=Object.keys(t).filter((function(n){var i=t[n],r=!!Object(fh["isObject"])(i)&&i.excluded;return r?e<n:e<=n})).sort((function(e,t){return e-t})),i=t[n[0]];return Object(fh["isObject"])(i)?i.value:i||""},showDecimalIcon:function(e){var t=this.rateDisabled&&this.valueDecimal>0&&e-1<this.value&&e>this.value,n=this.allowHalf&&this.pointerAtLeftHalf&&e-.5<=this.currentValue&&e>this.currentValue;return t||n},getIconStyle:function(e){var t=this.rateDisabled?this.disabledVoidColor:this.voidColor;return{color:e<=this.currentValue?this.activeColor:t}},selectValue:function(e){this.rateDisabled||(this.allowHalf&&this.pointerAtLeftHalf?(this.$emit("input",this.currentValue),this.$emit("change",this.currentValue)):(this.$emit("input",e),this.$emit("change",e)))},handleKey:function(e){if(!this.rateDisabled){var t=this.currentValue,n=e.keyCode;38===n||39===n?(this.allowHalf?t+=.5:t+=1,e.stopPropagation(),e.preventDefault()):37!==n&&40!==n||(this.allowHalf?t-=.5:t-=1,e.stopPropagation(),e.preventDefault()),t=t<0?0:t,t=t>this.max?this.max:t,this.$emit("input",t),this.$emit("change",t)}},setCurrentValue:function(e,t){if(!this.rateDisabled){if(this.allowHalf){var n=t.target;Object(ze["hasClass"])(n,"el-rate__item")&&(n=n.querySelector(".el-rate__icon")),Object(ze["hasClass"])(n,"el-rate__decimal")&&(n=n.parentNode),this.pointerAtLeftHalf=2*t.offsetX<=n.clientWidth,this.currentValue=this.pointerAtLeftHalf?e-.5:e}else this.currentValue=e;this.hoverIndex=e}},resetCurrentValue:function(){this.rateDisabled||(this.allowHalf&&(this.pointerAtLeftHalf=this.value!==Math.floor(this.value)),this.currentValue=this.value,this.hoverIndex=-1)}},created:function(){this.value||this.$emit("input",0)}},mh=ph,gh=l(mh,dh,hh,!1,null,null,null);gh.options.__file="packages/rate/src/main.vue";var vh=gh.exports;vh.install=function(e){e.component(vh.name,vh)};var bh=vh,yh=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-steps",class:[!e.simple&&"el-steps--"+e.direction,e.simple&&"el-steps--simple"]},[e._t("default")],2)},wh=[];yh._withStripped=!0;var xh={name:"ElSteps",mixins:[T.a],props:{space:[Number,String],active:Number,direction:{type:String,default:"horizontal"},alignCenter:Boolean,simple:Boolean,finishStatus:{type:String,default:"finish"},processStatus:{type:String,default:"process"}},data:function(){return{steps:[],stepOffset:0}},methods:{getMigratingConfig:function(){return{props:{center:"center is removed."}}}},watch:{active:function(e,t){this.$emit("change",e,t)},steps:function(e){e.forEach((function(e,t){e.index=t}))}}},_h=xh,kh=l(_h,yh,wh,!1,null,null,null);kh.options.__file="packages/steps/src/steps.vue";var Ch=kh.exports;Ch.install=function(e){e.component(Ch.name,Ch)};var Sh=Ch,Oh=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-step",class:[!e.isSimple&&"is-"+e.$parent.direction,e.isSimple&&"is-simple",e.isLast&&!e.space&&!e.isCenter&&"is-flex",e.isCenter&&!e.isVertical&&!e.isSimple&&"is-center"],style:e.style},[n("div",{staticClass:"el-step__head",class:"is-"+e.currentStatus},[n("div",{staticClass:"el-step__line",style:e.isLast?"":{marginRight:e.$parent.stepOffset+"px"}},[n("i",{staticClass:"el-step__line-inner",style:e.lineStyle})]),n("div",{staticClass:"el-step__icon",class:"is-"+(e.icon?"icon":"text")},["success"!==e.currentStatus&&"error"!==e.currentStatus?e._t("icon",[e.icon?n("i",{staticClass:"el-step__icon-inner",class:[e.icon]}):e._e(),e.icon||e.isSimple?e._e():n("div",{staticClass:"el-step__icon-inner"},[e._v(e._s(e.index+1))])]):n("i",{staticClass:"el-step__icon-inner is-status",class:["el-icon-"+("success"===e.currentStatus?"check":"close")]})],2)]),n("div",{staticClass:"el-step__main"},[n("div",{ref:"title",staticClass:"el-step__title",class:["is-"+e.currentStatus]},[e._t("title",[e._v(e._s(e.title))])],2),e.isSimple?n("div",{staticClass:"el-step__arrow"}):n("div",{staticClass:"el-step__description",class:["is-"+e.currentStatus]},[e._t("description",[e._v(e._s(e.description))])],2)])])},Th=[];Oh._withStripped=!0;var Eh={name:"ElStep",props:{title:String,icon:String,description:String,status:String},data:function(){return{index:-1,lineStyle:{},internalStatus:""}},beforeCreate:function(){this.$parent.steps.push(this)},beforeDestroy:function(){var e=this.$parent.steps,t=e.indexOf(this);t>=0&&e.splice(t,1)},computed:{currentStatus:function(){return this.status||this.internalStatus},prevStatus:function(){var e=this.$parent.steps[this.index-1];return e?e.currentStatus:"wait"},isCenter:function(){return this.$parent.alignCenter},isVertical:function(){return"vertical"===this.$parent.direction},isSimple:function(){return this.$parent.simple},isLast:function(){var e=this.$parent;return e.steps[e.steps.length-1]===this},stepsCount:function(){return this.$parent.steps.length},space:function(){var e=this.isSimple,t=this.$parent.space;return e?"":t},style:function(){var e={},t=this.$parent,n=t.steps.length,i="number"===typeof this.space?this.space+"px":this.space?this.space:100/(n-(this.isCenter?0:1))+"%";return e.flexBasis=i,this.isVertical||(this.isLast?e.maxWidth=100/this.stepsCount+"%":e.marginRight=-this.$parent.stepOffset+"px"),e}},methods:{updateStatus:function(e){var t=this.$parent.$children[this.index-1];e>this.index?this.internalStatus=this.$parent.finishStatus:e===this.index&&"error"!==this.prevStatus?this.internalStatus=this.$parent.processStatus:this.internalStatus="wait",t&&t.calcProgress(this.internalStatus)},calcProgress:function(e){var t=100,n={};n.transitionDelay=150*this.index+"ms",e===this.$parent.processStatus?(this.currentStatus,t=0):"wait"===e&&(t=0,n.transitionDelay=-150*this.index+"ms"),n.borderWidth=t&&!this.isSimple?"1px":0,"vertical"===this.$parent.direction?n.height=t+"%":n.width=t+"%",this.lineStyle=n}},mounted:function(){var e=this,t=this.$watch("index",(function(n){e.$watch("$parent.active",e.updateStatus,{immediate:!0}),e.$watch("$parent.processStatus",(function(){var t=e.$parent.active;e.updateStatus(t)}),{immediate:!0}),t()}))}},Dh=Eh,Mh=l(Dh,Oh,Th,!1,null,null,null);Mh.options.__file="packages/steps/src/step.vue";var Ah=Mh.exports;Ah.install=function(e){e.component(Ah.name,Ah)};var Nh=Ah,Ih=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:e.carouselClasses,on:{mouseenter:function(t){return t.stopPropagation(),e.handleMouseEnter(t)},mouseleave:function(t){return t.stopPropagation(),e.handleMouseLeave(t)}}},[n("div",{staticClass:"el-carousel__container",style:{height:e.height}},[e.arrowDisplay?n("transition",{attrs:{name:"carousel-arrow-left"}},[n("button",{directives:[{name:"show",rawName:"v-show",value:("always"===e.arrow||e.hover)&&(e.loop||e.activeIndex>0),expression:"(arrow === 'always' || hover) && (loop || activeIndex > 0)"}],staticClass:"el-carousel__arrow el-carousel__arrow--left",attrs:{type:"button"},on:{mouseenter:function(t){e.handleButtonEnter("left")},mouseleave:e.handleButtonLeave,click:function(t){t.stopPropagation(),e.throttledArrowClick(e.activeIndex-1)}}},[n("i",{staticClass:"el-icon-arrow-left"})])]):e._e(),e.arrowDisplay?n("transition",{attrs:{name:"carousel-arrow-right"}},[n("button",{directives:[{name:"show",rawName:"v-show",value:("always"===e.arrow||e.hover)&&(e.loop||e.activeIndex<e.items.length-1),expression:"(arrow === 'always' || hover) && (loop || activeIndex < items.length - 1)"}],staticClass:"el-carousel__arrow el-carousel__arrow--right",attrs:{type:"button"},on:{mouseenter:function(t){e.handleButtonEnter("right")},mouseleave:e.handleButtonLeave,click:function(t){t.stopPropagation(),e.throttledArrowClick(e.activeIndex+1)}}},[n("i",{staticClass:"el-icon-arrow-right"})])]):e._e(),e._t("default")],2),"none"!==e.indicatorPosition?n("ul",{class:e.indicatorsClasses},e._l(e.items,(function(t,i){return n("li",{key:i,class:["el-carousel__indicator","el-carousel__indicator--"+e.direction,{"is-active":i===e.activeIndex}],on:{mouseenter:function(t){e.throttledIndicatorHover(i)},click:function(t){t.stopPropagation(),e.handleIndicatorClick(i)}}},[n("button",{staticClass:"el-carousel__button"},[e.hasLabel?n("span",[e._v(e._s(t.label))]):e._e()])])})),0):e._e()])},Lh=[];Ih._withStripped=!0;var Ph=n(25),$h=n.n(Ph),Fh={name:"ElCarousel",props:{initialIndex:{type:Number,default:0},height:String,trigger:{type:String,default:"hover"},autoplay:{type:Boolean,default:!0},interval:{type:Number,default:3e3},indicatorPosition:String,indicator:{type:Boolean,default:!0},arrow:{type:String,default:"hover"},type:String,loop:{type:Boolean,default:!0},direction:{type:String,default:"horizontal",validator:function(e){return-1!==["horizontal","vertical"].indexOf(e)}}},data:function(){return{items:[],activeIndex:-1,containerWidth:0,timer:null,hover:!1}},computed:{arrowDisplay:function(){return"never"!==this.arrow&&"vertical"!==this.direction},hasLabel:function(){return this.items.some((function(e){return e.label.toString().length>0}))},carouselClasses:function(){var e=["el-carousel","el-carousel--"+this.direction];return"card"===this.type&&e.push("el-carousel--card"),e},indicatorsClasses:function(){var e=["el-carousel__indicators","el-carousel__indicators--"+this.direction];return this.hasLabel&&e.push("el-carousel__indicators--labels"),"outside"!==this.indicatorPosition&&"card"!==this.type||e.push("el-carousel__indicators--outside"),e}},watch:{items:function(e){e.length>0&&this.setActiveItem(this.initialIndex)},activeIndex:function(e,t){this.resetItemPosition(t),t>-1&&this.$emit("change",e,t)},autoplay:function(e){e?this.startTimer():this.pauseTimer()},loop:function(){this.setActiveItem(this.activeIndex)}},methods:{handleMouseEnter:function(){this.hover=!0,this.pauseTimer()},handleMouseLeave:function(){this.hover=!1,this.startTimer()},itemInStage:function(e,t){var n=this.items.length;return t===n-1&&e.inStage&&this.items[0].active||e.inStage&&this.items[t+1]&&this.items[t+1].active?"left":!!(0===t&&e.inStage&&this.items[n-1].active||e.inStage&&this.items[t-1]&&this.items[t-1].active)&&"right"},handleButtonEnter:function(e){var t=this;"vertical"!==this.direction&&this.items.forEach((function(n,i){e===t.itemInStage(n,i)&&(n.hover=!0)}))},handleButtonLeave:function(){"vertical"!==this.direction&&this.items.forEach((function(e){e.hover=!1}))},updateItems:function(){this.items=this.$children.filter((function(e){return"ElCarouselItem"===e.$options.name}))},resetItemPosition:function(e){var t=this;this.items.forEach((function(n,i){n.translateItem(i,t.activeIndex,e)}))},playSlides:function(){this.activeIndex<this.items.length-1?this.activeIndex++:this.loop&&(this.activeIndex=0)},pauseTimer:function(){this.timer&&(clearInterval(this.timer),this.timer=null)},startTimer:function(){this.interval<=0||!this.autoplay||this.timer||(this.timer=setInterval(this.playSlides,this.interval))},setActiveItem:function(e){if("string"===typeof e){var t=this.items.filter((function(t){return t.name===e}));t.length>0&&(e=this.items.indexOf(t[0]))}if(e=Number(e),isNaN(e)||e!==Math.floor(e))console.warn("[Element Warn][Carousel]index must be an integer.");else{var n=this.items.length,i=this.activeIndex;this.activeIndex=e<0?this.loop?n-1:0:e>=n?this.loop?0:n-1:e,i===this.activeIndex&&this.resetItemPosition(i)}},prev:function(){this.setActiveItem(this.activeIndex-1)},next:function(){this.setActiveItem(this.activeIndex+1)},handleIndicatorClick:function(e){this.activeIndex=e},handleIndicatorHover:function(e){"hover"===this.trigger&&e!==this.activeIndex&&(this.activeIndex=e)}},created:function(){var e=this;this.throttledArrowClick=$h()(300,!0,(function(t){e.setActiveItem(t)})),this.throttledIndicatorHover=$h()(300,(function(t){e.handleIndicatorHover(t)}))},mounted:function(){var e=this;this.updateItems(),this.$nextTick((function(){Object(ti["addResizeListener"])(e.$el,e.resetItemPosition),e.initialIndex<e.items.length&&e.initialIndex>=0&&(e.activeIndex=e.initialIndex),e.startTimer()}))},beforeDestroy:function(){this.$el&&Object(ti["removeResizeListener"])(this.$el,this.resetItemPosition),this.pauseTimer()}},jh=Fh,zh=l(jh,Ih,Lh,!1,null,null,null);zh.options.__file="packages/carousel/src/main.vue";var Bh=zh.exports;Bh.install=function(e){e.component(Bh.name,Bh)};var Rh=Bh,Vh={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}};function Hh(e){var t=e.move,n=e.size,i=e.bar,r={},o="translate"+i.axis+"("+t+"%)";return r[i.size]=n,r.transform=o,r.msTransform=o,r.webkitTransform=o,r}var Wh={name:"Bar",props:{vertical:Boolean,size:String,move:Number},computed:{bar:function(){return Vh[this.vertical?"vertical":"horizontal"]},wrap:function(){return this.$parent.wrap}},render:function(e){var t=this.size,n=this.move,i=this.bar;return e("div",{class:["el-scrollbar__bar","is-"+i.key],on:{mousedown:this.clickTrackHandler}},[e("div",{ref:"thumb",class:"el-scrollbar__thumb",on:{mousedown:this.clickThumbHandler},style:Hh({size:t,move:n,bar:i})})])},methods:{clickThumbHandler:function(e){e.ctrlKey||2===e.button||(this.startDrag(e),this[this.bar.axis]=e.currentTarget[this.bar.offset]-(e[this.bar.client]-e.currentTarget.getBoundingClientRect()[this.bar.direction]))},clickTrackHandler:function(e){var t=Math.abs(e.target.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),n=this.$refs.thumb[this.bar.offset]/2,i=100*(t-n)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=i*this.wrap[this.bar.scrollSize]/100},startDrag:function(e){e.stopImmediatePropagation(),this.cursorDown=!0,Object(ze["on"])(document,"mousemove",this.mouseMoveDocumentHandler),Object(ze["on"])(document,"mouseup",this.mouseUpDocumentHandler),document.onselectstart=function(){return!1}},mouseMoveDocumentHandler:function(e){if(!1!==this.cursorDown){var t=this[this.bar.axis];if(t){var n=-1*(this.$el.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),i=this.$refs.thumb[this.bar.offset]-t,r=100*(n-i)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=r*this.wrap[this.bar.scrollSize]/100}}},mouseUpDocumentHandler:function(e){this.cursorDown=!1,this[this.bar.axis]=0,Object(ze["off"])(document,"mousemove",this.mouseMoveDocumentHandler),document.onselectstart=null}},destroyed:function(){Object(ze["off"])(document,"mouseup",this.mouseUpDocumentHandler)}},qh={name:"ElScrollbar",components:{Bar:Wh},props:{native:Boolean,wrapStyle:{},wrapClass:{},viewClass:{},viewStyle:{},noresize:Boolean,tag:{type:String,default:"div"}},data:function(){return{sizeWidth:"0",sizeHeight:"0",moveX:0,moveY:0}},computed:{wrap:function(){return this.$refs.wrap}},render:function(e){var t=wr()(),n=this.wrapStyle;if(t){var i="-"+t+"px",r="margin-bottom: "+i+"; margin-right: "+i+";";Array.isArray(this.wrapStyle)?(n=Object(y["toObject"])(this.wrapStyle),n.marginRight=n.marginBottom=i):"string"===typeof this.wrapStyle?n+=r:n=r}var o=e(this.tag,{class:["el-scrollbar__view",this.viewClass],style:this.viewStyle,ref:"resize"},this.$slots.default),a=e("div",{ref:"wrap",style:n,on:{scroll:this.handleScroll},class:[this.wrapClass,"el-scrollbar__wrap",t?"":"el-scrollbar__wrap--hidden-default"]},[[o]]),s=void 0;return s=this.native?[e("div",{ref:"wrap",class:[this.wrapClass,"el-scrollbar__wrap"],style:n},[[o]])]:[a,e(Wh,{attrs:{move:this.moveX,size:this.sizeWidth}}),e(Wh,{attrs:{vertical:!0,move:this.moveY,size:this.sizeHeight}})],e("div",{class:"el-scrollbar"},s)},methods:{handleScroll:function(){var e=this.wrap;this.moveY=100*e.scrollTop/e.clientHeight,this.moveX=100*e.scrollLeft/e.clientWidth},update:function(){var e=void 0,t=void 0,n=this.wrap;n&&(e=100*n.clientHeight/n.scrollHeight,t=100*n.clientWidth/n.scrollWidth,this.sizeHeight=e<100?e+"%":"",this.sizeWidth=t<100?t+"%":"")}},mounted:function(){this.native||(this.$nextTick(this.update),!this.noresize&&Object(ti["addResizeListener"])(this.$refs.resize,this.update))},beforeDestroy:function(){this.native||!this.noresize&&Object(ti["removeResizeListener"])(this.$refs.resize,this.update)},install:function(e){e.component(qh.name,qh)}},Uh=qh,Kh=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"show",rawName:"v-show",value:e.ready,expression:"ready"}],staticClass:"el-carousel__item",class:{"is-active":e.active,"el-carousel__item--card":"card"===e.$parent.type,"is-in-stage":e.inStage,"is-hover":e.hover,"is-animating":e.animating},style:e.itemStyle,on:{click:e.handleItemClick}},["card"===e.$parent.type?n("div",{directives:[{name:"show",rawName:"v-show",value:!e.active,expression:"!active"}],staticClass:"el-carousel__mask"}):e._e(),e._t("default")],2)},Gh=[];Kh._withStripped=!0;var Yh=.83,Xh={name:"ElCarouselItem",props:{name:String,label:{type:[String,Number],default:""}},data:function(){return{hover:!1,translate:0,scale:1,active:!1,ready:!1,inStage:!1,animating:!1}},methods:{processIndex:function(e,t,n){return 0===t&&e===n-1?-1:t===n-1&&0===e?n:e<t-1&&t-e>=n/2?n+1:e>t+1&&e-t>=n/2?-2:e},calcCardTranslate:function(e,t){var n=this.$parent.$el.offsetWidth;return this.inStage?n*((2-Yh)*(e-t)+1)/4:e<t?-(1+Yh)*n/4:(3+Yh)*n/4},calcTranslate:function(e,t,n){var i=this.$parent.$el[n?"offsetHeight":"offsetWidth"];return i*(e-t)},translateItem:function(e,t,n){var i=this.$parent.type,r=this.parentDirection,o=this.$parent.items.length;if("card"!==i&&void 0!==n&&(this.animating=e===t||e===n),e!==t&&o>2&&this.$parent.loop&&(e=this.processIndex(e,t,o)),"card"===i)"vertical"===r&&console.warn("[Element Warn][Carousel]vertical direction is not supported in card mode"),this.inStage=Math.round(Math.abs(e-t))<=1,this.active=e===t,this.translate=this.calcCardTranslate(e,t),this.scale=this.active?1:Yh;else{this.active=e===t;var a="vertical"===r;this.translate=this.calcTranslate(e,t,a)}this.ready=!0},handleItemClick:function(){var e=this.$parent;if(e&&"card"===e.type){var t=e.items.indexOf(this);e.setActiveItem(t)}}},computed:{parentDirection:function(){return this.$parent.direction},itemStyle:function(){var e="vertical"===this.parentDirection?"translateY":"translateX",t=e+"("+this.translate+"px) scale("+this.scale+")",n={transform:t};return Object(y["autoprefixer"])(n)}},created:function(){this.$parent&&this.$parent.updateItems()},destroyed:function(){this.$parent&&this.$parent.updateItems()}},Zh=Xh,Qh=l(Zh,Kh,Gh,!1,null,null,null);Qh.options.__file="packages/carousel/src/item.vue";var Jh=Qh.exports;Jh.install=function(e){e.component(Jh.name,Jh)};var ef=Jh,tf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-collapse",attrs:{role:"tablist","aria-multiselectable":"true"}},[e._t("default")],2)},nf=[];tf._withStripped=!0;var rf={name:"ElCollapse",componentName:"ElCollapse",props:{accordion:Boolean,value:{type:[Array,String,Number],default:function(){return[]}}},data:function(){return{activeNames:[].concat(this.value)}},provide:function(){return{collapse:this}},watch:{value:function(e){this.activeNames=[].concat(e)}},methods:{setActiveNames:function(e){e=[].concat(e);var t=this.accordion?e[0]:e;this.activeNames=e,this.$emit("input",t),this.$emit("change",t)},handleItemClick:function(e){if(this.accordion)this.setActiveNames(!this.activeNames[0]&&0!==this.activeNames[0]||this.activeNames[0]!==e.name?e.name:"");else{var t=this.activeNames.slice(0),n=t.indexOf(e.name);n>-1?t.splice(n,1):t.push(e.name),this.setActiveNames(t)}}},created:function(){this.$on("item-click",this.handleItemClick)}},of=rf,af=l(of,tf,nf,!1,null,null,null);af.options.__file="packages/collapse/src/collapse.vue";var sf=af.exports;sf.install=function(e){e.component(sf.name,sf)};var lf=sf,cf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-collapse-item",class:{"is-active":e.isActive,"is-disabled":e.disabled}},[n("div",{attrs:{role:"tab","aria-expanded":e.isActive,"aria-controls":"el-collapse-content-"+e.id,"aria-describedby":"el-collapse-content-"+e.id}},[n("div",{staticClass:"el-collapse-item__header",class:{focusing:e.focusing,"is-active":e.isActive},attrs:{role:"button",id:"el-collapse-head-"+e.id,tabindex:e.disabled?void 0:0},on:{click:e.handleHeaderClick,keyup:function(t){return!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.stopPropagation(),e.handleEnterClick(t))},focus:e.handleFocus,blur:function(t){e.focusing=!1}}},[e._t("title",[e._v(e._s(e.title))]),n("i",{staticClass:"el-collapse-item__arrow el-icon-arrow-right",class:{"is-active":e.isActive}})],2)]),n("el-collapse-transition",[n("div",{directives:[{name:"show",rawName:"v-show",value:e.isActive,expression:"isActive"}],staticClass:"el-collapse-item__wrap",attrs:{role:"tabpanel","aria-hidden":!e.isActive,"aria-labelledby":"el-collapse-head-"+e.id,id:"el-collapse-content-"+e.id}},[n("div",{staticClass:"el-collapse-item__content"},[e._t("default")],2)])])],1)},uf=[];cf._withStripped=!0;var df={name:"ElCollapseItem",componentName:"ElCollapseItem",mixins:[D.a],components:{ElCollapseTransition:Ge.a},data:function(){return{contentWrapStyle:{height:"auto",display:"block"},contentHeight:0,focusing:!1,isClick:!1,id:Object(y["generateId"])()}},inject:["collapse"],props:{title:String,name:{type:[String,Number],default:function(){return this._uid}},disabled:Boolean},computed:{isActive:function(){return this.collapse.activeNames.indexOf(this.name)>-1}},methods:{handleFocus:function(){var e=this;setTimeout((function(){e.isClick?e.isClick=!1:e.focusing=!0}),50)},handleHeaderClick:function(){this.disabled||(this.dispatch("ElCollapse","item-click",this),this.focusing=!1,this.isClick=!0)},handleEnterClick:function(){this.dispatch("ElCollapse","item-click",this)}}},hf=df,ff=l(hf,cf,uf,!1,null,null,null);ff.options.__file="packages/collapse/src/collapse-item.vue";var pf=ff.exports;pf.install=function(e){e.component(pf.name,pf)};var mf=pf,gf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:function(){return e.toggleDropDownVisible(!1)},expression:"() => toggleDropDownVisible(false)"}],ref:"reference",class:["el-cascader",e.realSize&&"el-cascader--"+e.realSize,{"is-disabled":e.isDisabled}],on:{mouseenter:function(t){e.inputHover=!0},mouseleave:function(t){e.inputHover=!1},click:function(){return e.toggleDropDownVisible(!e.readonly||void 0)},keydown:e.handleKeyDown}},[n("el-input",{ref:"input",class:{"is-focus":e.dropDownVisible},attrs:{size:e.realSize,placeholder:e.placeholder,readonly:e.readonly,disabled:e.isDisabled,"validate-event":!1},on:{focus:e.handleFocus,blur:e.handleBlur,input:e.handleInput},model:{value:e.multiple?e.presentText:e.inputValue,callback:function(t){e.multiple?e.presentText:e.inputValue=t},expression:"multiple ? presentText : inputValue"}},[n("template",{slot:"suffix"},[e.clearBtnVisible?n("i",{key:"clear",staticClass:"el-input__icon el-icon-circle-close",on:{click:function(t){return t.stopPropagation(),e.handleClear(t)}}}):n("i",{key:"arrow-down",class:["el-input__icon","el-icon-arrow-down",e.dropDownVisible&&"is-reverse"],on:{click:function(t){t.stopPropagation(),e.toggleDropDownVisible()}}})])],2),e.multiple?n("div",{staticClass:"el-cascader__tags"},[e._l(e.presentTags,(function(t,i){return n("el-tag",{key:t.key,attrs:{type:"info",size:e.tagSize,hit:t.hitState,closable:t.closable,"disable-transitions":""},on:{close:function(t){e.deleteTag(i)}}},[n("span",[e._v(e._s(t.text))])])})),e.filterable&&!e.isDisabled?n("input",{directives:[{name:"model",rawName:"v-model.trim",value:e.inputValue,expression:"inputValue",modifiers:{trim:!0}}],staticClass:"el-cascader__search-input",attrs:{type:"text",placeholder:e.presentTags.length?"":e.placeholder},domProps:{value:e.inputValue},on:{input:[function(t){t.target.composing||(e.inputValue=t.target.value.trim())},function(t){return e.handleInput(e.inputValue,t)}],click:function(t){t.stopPropagation(),e.toggleDropDownVisible(!0)},keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?null:e.handleDelete(t)},blur:function(t){e.$forceUpdate()}}}):e._e()],2):e._e(),n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.handleDropdownLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.dropDownVisible,expression:"dropDownVisible"}],ref:"popper",class:["el-popper","el-cascader__dropdown",e.popperClass]},[n("el-cascader-panel",{directives:[{name:"show",rawName:"v-show",value:!e.filtering,expression:"!filtering"}],ref:"panel",attrs:{options:e.options,props:e.config,border:!1,"render-label":e.$scopedSlots.default},on:{"expand-change":e.handleExpandChange,close:function(t){e.toggleDropDownVisible(!1)}},model:{value:e.checkedValue,callback:function(t){e.checkedValue=t},expression:"checkedValue"}}),e.filterable?n("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.filtering,expression:"filtering"}],ref:"suggestionPanel",staticClass:"el-cascader__suggestion-panel",attrs:{tag:"ul","view-class":"el-cascader__suggestion-list"},nativeOn:{keydown:function(t){return e.handleSuggestionKeyDown(t)}}},[e.suggestions.length?e._l(e.suggestions,(function(t,i){return n("li",{key:t.uid,class:["el-cascader__suggestion-item",t.checked&&"is-checked"],attrs:{tabindex:-1},on:{click:function(t){e.handleSuggestionClick(i)}}},[n("span",[e._v(e._s(t.text))]),t.checked?n("i",{staticClass:"el-icon-check"}):e._e()])})):e._t("empty",[n("li",{staticClass:"el-cascader__empty-text"},[e._v(e._s(e.t("el.cascader.noMatch")))])])],2):e._e()],1)])],1)},vf=[];gf._withStripped=!0;var bf=n(42),yf=n.n(bf),wf=n(28),xf=n.n(wf),_f=xf.a.keys,kf={expandTrigger:{newProp:"expandTrigger",type:String},changeOnSelect:{newProp:"checkStrictly",type:Boolean},hoverThreshold:{newProp:"hoverThreshold",type:Number}},Cf={props:{placement:{type:String,default:"bottom-start"},appendToBody:W.a.props.appendToBody,visibleArrow:{type:Boolean,default:!0},arrowOffset:W.a.props.arrowOffset,offset:W.a.props.offset,boundariesPadding:W.a.props.boundariesPadding,popperOptions:W.a.props.popperOptions},methods:W.a.methods,data:W.a.data,beforeDestroy:W.a.beforeDestroy},Sf={medium:36,small:32,mini:28},Of={name:"ElCascader",directives:{Clickoutside:B.a},mixins:[Cf,D.a,b.a,T.a],inject:{elForm:{default:""},elFormItem:{default:""}},components:{ElInput:g.a,ElTag:ei.a,ElScrollbar:U.a,ElCascaderPanel:yf.a},props:{value:{},options:Array,props:Object,size:String,placeholder:{type:String,default:function(){return Object(ni["t"])("el.cascader.placeholder")}},disabled:Boolean,clearable:Boolean,filterable:Boolean,filterMethod:Function,separator:{type:String,default:" / "},showAllLevels:{type:Boolean,default:!0},collapseTags:Boolean,debounce:{type:Number,default:300},beforeFilter:{type:Function,default:function(){return function(){}}},popperClass:String},data:function(){return{dropDownVisible:!1,checkedValue:this.value||null,inputHover:!1,inputValue:null,presentText:null,presentTags:[],checkedNodes:[],filtering:!1,suggestions:[],inputInitialHeight:0,pressDeleteCount:0}},computed:{realSize:function(){var e=(this.elFormItem||{}).elFormItemSize;return this.size||e||(this.$ELEMENT||{}).size},tagSize:function(){return["small","mini"].indexOf(this.realSize)>-1?"mini":"small"},isDisabled:function(){return this.disabled||(this.elForm||{}).disabled},config:function(){var e=this.props||{},t=this.$attrs;return Object.keys(kf).forEach((function(n){var i=kf[n],r=i.newProp,o=i.type,a=t[n]||t[Object(y["kebabCase"])(n)];Object(Tt["isDef"])(n)&&!Object(Tt["isDef"])(e[r])&&(o===Boolean&&""===a&&(a=!0),e[r]=a)})),e},multiple:function(){return this.config.multiple},leafOnly:function(){return!this.config.checkStrictly},readonly:function(){return!this.filterable||this.multiple},clearBtnVisible:function(){return!(!this.clearable||this.isDisabled||this.filtering||!this.inputHover)&&(this.multiple?!!this.checkedNodes.filter((function(e){return!e.isDisabled})).length:!!this.presentText)},panel:function(){return this.$refs.panel}},watch:{disabled:function(){this.computePresentContent()},value:function(e){Object(y["isEqual"])(e,this.checkedValue)||(this.checkedValue=e,this.computePresentContent())},checkedValue:function(e){var t=this.value,n=this.dropDownVisible,i=this.config,r=i.checkStrictly,o=i.multiple;Object(y["isEqual"])(e,t)&&!Object(fh["isUndefined"])(t)||(this.computePresentContent(),o||r||!n||this.toggleDropDownVisible(!1),this.$emit("input",e),this.$emit("change",e),this.dispatch("ElFormItem","el.form.change",[e]))},options:{handler:function(){this.$nextTick(this.computePresentContent)},deep:!0},presentText:function(e){this.inputValue=e},presentTags:function(e,t){this.multiple&&(e.length||t.length)&&this.$nextTick(this.updateStyle)},filtering:function(e){this.$nextTick(this.updatePopper)}},mounted:function(){var e=this,t=this.$refs.input;t&&t.$el&&(this.inputInitialHeight=t.$el.offsetHeight||Sf[this.realSize]||40),Object(y["isEmpty"])(this.value)||this.computePresentContent(),this.filterHandler=j()(this.debounce,(function(){var t=e.inputValue;if(t){var n=e.beforeFilter(t);n&&n.then?n.then(e.getSuggestions):!1!==n?e.getSuggestions():e.filtering=!1}else e.filtering=!1})),Object(ti["addResizeListener"])(this.$el,this.updateStyle)},beforeDestroy:function(){Object(ti["removeResizeListener"])(this.$el,this.updateStyle)},methods:{getMigratingConfig:function(){return{props:{"expand-trigger":"expand-trigger is removed, use `props.expandTrigger` instead.","change-on-select":"change-on-select is removed, use `props.checkStrictly` instead.","hover-threshold":"hover-threshold is removed, use `props.hoverThreshold` instead"},events:{"active-item-change":"active-item-change is renamed to expand-change"}}},toggleDropDownVisible:function(e){var t=this;if(!this.isDisabled){var n=this.dropDownVisible,i=this.$refs.input;e=Object(Tt["isDef"])(e)?e:!n,e!==n&&(this.dropDownVisible=e,e&&this.$nextTick((function(){t.updatePopper(),t.panel.scrollIntoView()})),i.$refs.input.setAttribute("aria-expanded",e),this.$emit("visible-change",e))}},handleDropdownLeave:function(){this.filtering=!1,this.inputValue=this.presentText},handleKeyDown:function(e){switch(e.keyCode){case _f.enter:this.toggleDropDownVisible();break;case _f.down:this.toggleDropDownVisible(!0),this.focusFirstNode(),e.preventDefault();break;case _f.esc:case _f.tab:this.toggleDropDownVisible(!1);break}},handleFocus:function(e){this.$emit("focus",e)},handleBlur:function(e){this.$emit("blur",e)},handleInput:function(e,t){!this.dropDownVisible&&this.toggleDropDownVisible(!0),t&&t.isComposing||(e?this.filterHandler():this.filtering=!1)},handleClear:function(){this.presentText="",this.panel.clearCheckedNodes()},handleExpandChange:function(e){this.$nextTick(this.updatePopper.bind(this)),this.$emit("expand-change",e),this.$emit("active-item-change",e)},focusFirstNode:function(){var e=this;this.$nextTick((function(){var t=e.filtering,n=e.$refs,i=n.popper,r=n.suggestionPanel,o=null;if(t&&r)o=r.$el.querySelector(".el-cascader__suggestion-item");else{var a=i.querySelector(".el-cascader-menu");o=a.querySelector('.el-cascader-node[tabindex="-1"]')}o&&(o.focus(),!t&&o.click())}))},computePresentContent:function(){var e=this;this.$nextTick((function(){e.config.multiple?(e.computePresentTags(),e.presentText=e.presentTags.length?" ":null):e.computePresentText()}))},computePresentText:function(){var e=this.checkedValue,t=this.config;if(!Object(y["isEmpty"])(e)){var n=this.panel.getNodeByValue(e);if(n&&(t.checkStrictly||n.isLeaf))return void(this.presentText=n.getText(this.showAllLevels,this.separator))}this.presentText=null},computePresentTags:function(){var e=this.isDisabled,t=this.leafOnly,n=this.showAllLevels,i=this.separator,r=this.collapseTags,o=this.getCheckedNodes(t),a=[],s=function(t){return{node:t,key:t.uid,text:t.getText(n,i),hitState:!1,closable:!e&&!t.isDisabled}};if(o.length){var l=o[0],c=o.slice(1),u=c.length;a.push(s(l)),u&&(r?a.push({key:-1,text:"+ "+u,closable:!1}):c.forEach((function(e){return a.push(s(e))})))}this.checkedNodes=o,this.presentTags=a},getSuggestions:function(){var e=this,t=this.filterMethod;Object(fh["isFunction"])(t)||(t=function(e,t){return e.text.includes(t)});var n=this.panel.getFlattedNodes(this.leafOnly).filter((function(n){return!n.isDisabled&&(n.text=n.getText(e.showAllLevels,e.separator)||"",t(n,e.inputValue))}));this.multiple?this.presentTags.forEach((function(e){e.hitState=!1})):n.forEach((function(t){t.checked=Object(y["isEqual"])(e.checkedValue,t.getValueByOption())})),this.filtering=!0,this.suggestions=n,this.$nextTick(this.updatePopper)},handleSuggestionKeyDown:function(e){var t=e.keyCode,n=e.target;switch(t){case _f.enter:n.click();break;case _f.up:var i=n.previousElementSibling;i&&i.focus();break;case _f.down:var r=n.nextElementSibling;r&&r.focus();break;case _f.esc:case _f.tab:this.toggleDropDownVisible(!1);break}},handleDelete:function(){var e=this.inputValue,t=this.pressDeleteCount,n=this.presentTags,i=n.length-1,r=n[i];this.pressDeleteCount=e?0:t+1,r&&this.pressDeleteCount&&(r.hitState?this.deleteTag(i):r.hitState=!0)},handleSuggestionClick:function(e){var t=this.multiple,n=this.suggestions[e];if(t){var i=n.checked;n.doCheck(!i),this.panel.calculateMultiCheckedValue()}else this.checkedValue=n.getValueByOption(),this.toggleDropDownVisible(!1)},deleteTag:function(e){var t=this.checkedValue,n=t[e];this.checkedValue=t.filter((function(t,n){return n!==e})),this.$emit("remove-tag",n)},updateStyle:function(){var e=this.$el,t=this.inputInitialHeight;if(!this.$isServer&&e){var n=this.$refs.suggestionPanel,i=e.querySelector(".el-input__inner");if(i){var r=e.querySelector(".el-cascader__tags"),o=null;if(n&&(o=n.$el)){var a=o.querySelector(".el-cascader__suggestion-list");a.style.minWidth=i.offsetWidth+"px"}if(r){var s=r.offsetHeight,l=Math.max(s+6,t)+"px";i.style.height=l,this.updatePopper()}}}},getCheckedNodes:function(e){return this.panel.getCheckedNodes(e)}}},Tf=Of,Ef=l(Tf,gf,vf,!1,null,null,null);Ef.options.__file="packages/cascader/src/cascader.vue";var Df=Ef.exports;Df.install=function(e){e.component(Df.name,Df)};var Mf=Df,Af=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.hide,expression:"hide"}],class:["el-color-picker",e.colorDisabled?"is-disabled":"",e.colorSize?"el-color-picker--"+e.colorSize:""]},[e.colorDisabled?n("div",{staticClass:"el-color-picker__mask"}):e._e(),n("div",{staticClass:"el-color-picker__trigger",on:{click:e.handleTrigger}},[n("span",{staticClass:"el-color-picker__color",class:{"is-alpha":e.showAlpha}},[n("span",{staticClass:"el-color-picker__color-inner",style:{backgroundColor:e.displayedColor}}),e.value||e.showPanelColor?e._e():n("span",{staticClass:"el-color-picker__empty el-icon-close"})]),n("span",{directives:[{name:"show",rawName:"v-show",value:e.value||e.showPanelColor,expression:"value || showPanelColor"}],staticClass:"el-color-picker__icon el-icon-arrow-down"})]),n("picker-dropdown",{ref:"dropdown",class:["el-color-picker__panel",e.popperClass||""],attrs:{color:e.color,"show-alpha":e.showAlpha,predefine:e.predefine},on:{pick:e.confirmValue,clear:e.clearValue},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}})],1)},Nf=[];Af._withStripped=!0;var If="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)};function Lf(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var Pf=function(e,t,n){return[e,t*n/((e=(2-t)*n)<1?e:2-e)||0,e/2]},$f=function(e){return"string"===typeof e&&-1!==e.indexOf(".")&&1===parseFloat(e)},Ff=function(e){return"string"===typeof e&&-1!==e.indexOf("%")},jf=function(e,t){$f(e)&&(e="100%");var n=Ff(e);return e=Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)},zf={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"},Bf=function(e){var t=e.r,n=e.g,i=e.b,r=function(e){e=Math.min(Math.round(e),255);var t=Math.floor(e/16),n=e%16;return""+(zf[t]||t)+(zf[n]||n)};return isNaN(t)||isNaN(n)||isNaN(i)?"":"#"+r(t)+r(n)+r(i)},Rf={A:10,B:11,C:12,D:13,E:14,F:15},Vf=function(e){return 2===e.length?16*(Rf[e[0].toUpperCase()]||+e[0])+(Rf[e[1].toUpperCase()]||+e[1]):Rf[e[1].toUpperCase()]||+e[1]},Hf=function(e,t,n){t/=100,n/=100;var i=t,r=Math.max(n,.01),o=void 0,a=void 0;return n*=2,t*=n<=1?n:2-n,i*=r<=1?r:2-r,a=(n+t)/2,o=0===n?2*i/(r+i):2*t/(n+t),{h:e,s:100*o,v:100*a}},Wf=function(e,t,n){e=jf(e,255),t=jf(t,255),n=jf(n,255);var i=Math.max(e,t,n),r=Math.min(e,t,n),o=void 0,a=void 0,s=i,l=i-r;if(a=0===i?0:l/i,i===r)o=0;else{switch(i){case e:o=(t-n)/l+(t<n?6:0);break;case t:o=(n-e)/l+2;break;case n:o=(e-t)/l+4;break}o/=6}return{h:360*o,s:100*a,v:100*s}},qf=function(e,t,n){e=6*jf(e,360),t=jf(t,100),n=jf(n,100);var i=Math.floor(e),r=e-i,o=n*(1-t),a=n*(1-r*t),s=n*(1-(1-r)*t),l=i%6,c=[n,a,o,o,s,n][l],u=[s,n,n,a,o,o][l],d=[o,o,s,n,n,a][l];return{r:Math.round(255*c),g:Math.round(255*u),b:Math.round(255*d)}},Uf=function(){function e(t){for(var n in Lf(this,e),this._hue=0,this._saturation=100,this._value=100,this._alpha=100,this.enableAlpha=!1,this.format="hex",this.value="",t=t||{},t)t.hasOwnProperty(n)&&(this[n]=t[n]);this.doOnChange()}return e.prototype.set=function(e,t){if(1!==arguments.length||"object"!==("undefined"===typeof e?"undefined":If(e)))this["_"+e]=t,this.doOnChange();else for(var n in e)e.hasOwnProperty(n)&&this.set(n,e[n])},e.prototype.get=function(e){return this["_"+e]},e.prototype.toRgb=function(){return qf(this._hue,this._saturation,this._value)},e.prototype.fromString=function(e){var t=this;if(!e)return this._hue=0,this._saturation=100,this._value=100,void this.doOnChange();var n=function(e,n,i){t._hue=Math.max(0,Math.min(360,e)),t._saturation=Math.max(0,Math.min(100,n)),t._value=Math.max(0,Math.min(100,i)),t.doOnChange()};if(-1!==e.indexOf("hsl")){var i=e.replace(/hsla|hsl|\(|\)/gm,"").split(/\s|,/g).filter((function(e){return""!==e})).map((function(e,t){return t>2?parseFloat(e):parseInt(e,10)}));if(4===i.length?this._alpha=Math.floor(100*parseFloat(i[3])):3===i.length&&(this._alpha=100),i.length>=3){var r=Hf(i[0],i[1],i[2]),o=r.h,a=r.s,s=r.v;n(o,a,s)}}else if(-1!==e.indexOf("hsv")){var l=e.replace(/hsva|hsv|\(|\)/gm,"").split(/\s|,/g).filter((function(e){return""!==e})).map((function(e,t){return t>2?parseFloat(e):parseInt(e,10)}));4===l.length?this._alpha=Math.floor(100*parseFloat(l[3])):3===l.length&&(this._alpha=100),l.length>=3&&n(l[0],l[1],l[2])}else if(-1!==e.indexOf("rgb")){var c=e.replace(/rgba|rgb|\(|\)/gm,"").split(/\s|,/g).filter((function(e){return""!==e})).map((function(e,t){return t>2?parseFloat(e):parseInt(e,10)}));if(4===c.length?this._alpha=Math.floor(100*parseFloat(c[3])):3===c.length&&(this._alpha=100),c.length>=3){var u=Wf(c[0],c[1],c[2]),d=u.h,h=u.s,f=u.v;n(d,h,f)}}else if(-1!==e.indexOf("#")){var p=e.replace("#","").trim();if(!/^(?:[0-9a-fA-F]{3}){1,2}$/.test(p))return;var m=void 0,g=void 0,v=void 0;3===p.length?(m=Vf(p[0]+p[0]),g=Vf(p[1]+p[1]),v=Vf(p[2]+p[2])):6!==p.length&&8!==p.length||(m=Vf(p.substring(0,2)),g=Vf(p.substring(2,4)),v=Vf(p.substring(4,6))),8===p.length?this._alpha=Math.floor(Vf(p.substring(6))/255*100):3!==p.length&&6!==p.length||(this._alpha=100);var b=Wf(m,g,v),y=b.h,w=b.s,x=b.v;n(y,w,x)}},e.prototype.compare=function(e){return Math.abs(e._hue-this._hue)<2&&Math.abs(e._saturation-this._saturation)<1&&Math.abs(e._value-this._value)<1&&Math.abs(e._alpha-this._alpha)<1},e.prototype.doOnChange=function(){var e=this._hue,t=this._saturation,n=this._value,i=this._alpha,r=this.format;if(this.enableAlpha)switch(r){case"hsl":var o=Pf(e,t/100,n/100);this.value="hsla("+e+", "+Math.round(100*o[1])+"%, "+Math.round(100*o[2])+"%, "+i/100+")";break;case"hsv":this.value="hsva("+e+", "+Math.round(t)+"%, "+Math.round(n)+"%, "+i/100+")";break;default:var a=qf(e,t,n),s=a.r,l=a.g,c=a.b;this.value="rgba("+s+", "+l+", "+c+", "+i/100+")"}else switch(r){case"hsl":var u=Pf(e,t/100,n/100);this.value="hsl("+e+", "+Math.round(100*u[1])+"%, "+Math.round(100*u[2])+"%)";break;case"hsv":this.value="hsv("+e+", "+Math.round(t)+"%, "+Math.round(n)+"%)";break;case"rgb":var d=qf(e,t,n),h=d.r,f=d.g,p=d.b;this.value="rgb("+h+", "+f+", "+p+")";break;default:this.value=Bf(qf(e,t,n))}},e}(),Kf=Uf,Gf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-color-dropdown"},[n("div",{staticClass:"el-color-dropdown__main-wrapper"},[n("hue-slider",{ref:"hue",staticStyle:{float:"right"},attrs:{color:e.color,vertical:""}}),n("sv-panel",{ref:"sl",attrs:{color:e.color}})],1),e.showAlpha?n("alpha-slider",{ref:"alpha",attrs:{color:e.color}}):e._e(),e.predefine?n("predefine",{attrs:{color:e.color,colors:e.predefine}}):e._e(),n("div",{staticClass:"el-color-dropdown__btns"},[n("span",{staticClass:"el-color-dropdown__value"},[n("el-input",{attrs:{"validate-event":!1,size:"mini"},on:{blur:e.handleConfirm},nativeOn:{keyup:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleConfirm(t)}},model:{value:e.customInput,callback:function(t){e.customInput=t},expression:"customInput"}})],1),n("el-button",{staticClass:"el-color-dropdown__link-btn",attrs:{size:"mini",type:"text"},on:{click:function(t){e.$emit("clear")}}},[e._v("\n        "+e._s(e.t("el.colorpicker.clear"))+"\n      ")]),n("el-button",{staticClass:"el-color-dropdown__btn",attrs:{plain:"",size:"mini"},on:{click:e.confirmValue}},[e._v("\n        "+e._s(e.t("el.colorpicker.confirm"))+"\n      ")])],1)],1)])},Yf=[];Gf._withStripped=!0;var Xf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-color-svpanel",style:{backgroundColor:e.background}},[n("div",{staticClass:"el-color-svpanel__white"}),n("div",{staticClass:"el-color-svpanel__black"}),n("div",{staticClass:"el-color-svpanel__cursor",style:{top:e.cursorTop+"px",left:e.cursorLeft+"px"}},[n("div")])])},Zf=[];Xf._withStripped=!0;var Qf=!1,Jf=function(e,t){if(!qi.a.prototype.$isServer){var n=function(e){t.drag&&t.drag(e)},i=function e(i){document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",e),document.onselectstart=null,document.ondragstart=null,Qf=!1,t.end&&t.end(i)};e.addEventListener("mousedown",(function(e){Qf||(document.onselectstart=function(){return!1},document.ondragstart=function(){return!1},document.addEventListener("mousemove",n),document.addEventListener("mouseup",i),Qf=!0,t.start&&t.start(e))}))}},ep={name:"el-sl-panel",props:{color:{required:!0}},computed:{colorValue:function(){var e=this.color.get("hue"),t=this.color.get("value");return{hue:e,value:t}}},watch:{colorValue:function(){this.update()}},methods:{update:function(){var e=this.color.get("saturation"),t=this.color.get("value"),n=this.$el,i=n.clientWidth,r=n.clientHeight;this.cursorLeft=e*i/100,this.cursorTop=(100-t)*r/100,this.background="hsl("+this.color.get("hue")+", 100%, 50%)"},handleDrag:function(e){var t=this.$el,n=t.getBoundingClientRect(),i=e.clientX-n.left,r=e.clientY-n.top;i=Math.max(0,i),i=Math.min(i,n.width),r=Math.max(0,r),r=Math.min(r,n.height),this.cursorLeft=i,this.cursorTop=r,this.color.set({saturation:i/n.width*100,value:100-r/n.height*100})}},mounted:function(){var e=this;Jf(this.$el,{drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}}),this.update()},data:function(){return{cursorTop:0,cursorLeft:0,background:"hsl(0, 100%, 50%)"}}},tp=ep,np=l(tp,Xf,Zf,!1,null,null,null);np.options.__file="packages/color-picker/src/components/sv-panel.vue";var ip=np.exports,rp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-color-hue-slider",class:{"is-vertical":e.vertical}},[n("div",{ref:"bar",staticClass:"el-color-hue-slider__bar",on:{click:e.handleClick}}),n("div",{ref:"thumb",staticClass:"el-color-hue-slider__thumb",style:{left:e.thumbLeft+"px",top:e.thumbTop+"px"}})])},op=[];rp._withStripped=!0;var ap={name:"el-color-hue-slider",props:{color:{required:!0},vertical:Boolean},data:function(){return{thumbLeft:0,thumbTop:0}},computed:{hueValue:function(){var e=this.color.get("hue");return e}},watch:{hueValue:function(){this.update()}},methods:{handleClick:function(e){var t=this.$refs.thumb,n=e.target;n!==t&&this.handleDrag(e)},handleDrag:function(e){var t=this.$el.getBoundingClientRect(),n=this.$refs.thumb,i=void 0;if(this.vertical){var r=e.clientY-t.top;r=Math.min(r,t.height-n.offsetHeight/2),r=Math.max(n.offsetHeight/2,r),i=Math.round((r-n.offsetHeight/2)/(t.height-n.offsetHeight)*360)}else{var o=e.clientX-t.left;o=Math.min(o,t.width-n.offsetWidth/2),o=Math.max(n.offsetWidth/2,o),i=Math.round((o-n.offsetWidth/2)/(t.width-n.offsetWidth)*360)}this.color.set("hue",i)},getThumbLeft:function(){if(this.vertical)return 0;var e=this.$el,t=this.color.get("hue");if(!e)return 0;var n=this.$refs.thumb;return Math.round(t*(e.offsetWidth-n.offsetWidth/2)/360)},getThumbTop:function(){if(!this.vertical)return 0;var e=this.$el,t=this.color.get("hue");if(!e)return 0;var n=this.$refs.thumb;return Math.round(t*(e.offsetHeight-n.offsetHeight/2)/360)},update:function(){this.thumbLeft=this.getThumbLeft(),this.thumbTop=this.getThumbTop()}},mounted:function(){var e=this,t=this.$refs,n=t.bar,i=t.thumb,r={drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}};Jf(n,r),Jf(i,r),this.update()}},sp=ap,lp=l(sp,rp,op,!1,null,null,null);lp.options.__file="packages/color-picker/src/components/hue-slider.vue";var cp=lp.exports,up=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-color-alpha-slider",class:{"is-vertical":e.vertical}},[n("div",{ref:"bar",staticClass:"el-color-alpha-slider__bar",style:{background:e.background},on:{click:e.handleClick}}),n("div",{ref:"thumb",staticClass:"el-color-alpha-slider__thumb",style:{left:e.thumbLeft+"px",top:e.thumbTop+"px"}})])},dp=[];up._withStripped=!0;var hp={name:"el-color-alpha-slider",props:{color:{required:!0},vertical:Boolean},watch:{"color._alpha":function(){this.update()},"color.value":function(){this.update()}},methods:{handleClick:function(e){var t=this.$refs.thumb,n=e.target;n!==t&&this.handleDrag(e)},handleDrag:function(e){var t=this.$el.getBoundingClientRect(),n=this.$refs.thumb;if(this.vertical){var i=e.clientY-t.top;i=Math.max(n.offsetHeight/2,i),i=Math.min(i,t.height-n.offsetHeight/2),this.color.set("alpha",Math.round((i-n.offsetHeight/2)/(t.height-n.offsetHeight)*100))}else{var r=e.clientX-t.left;r=Math.max(n.offsetWidth/2,r),r=Math.min(r,t.width-n.offsetWidth/2),this.color.set("alpha",Math.round((r-n.offsetWidth/2)/(t.width-n.offsetWidth)*100))}},getThumbLeft:function(){if(this.vertical)return 0;var e=this.$el,t=this.color._alpha;if(!e)return 0;var n=this.$refs.thumb;return Math.round(t*(e.offsetWidth-n.offsetWidth/2)/100)},getThumbTop:function(){if(!this.vertical)return 0;var e=this.$el,t=this.color._alpha;if(!e)return 0;var n=this.$refs.thumb;return Math.round(t*(e.offsetHeight-n.offsetHeight/2)/100)},getBackground:function(){if(this.color&&this.color.value){var e=this.color.toRgb(),t=e.r,n=e.g,i=e.b;return"linear-gradient(to right, rgba("+t+", "+n+", "+i+", 0) 0%, rgba("+t+", "+n+", "+i+", 1) 100%)"}return null},update:function(){this.thumbLeft=this.getThumbLeft(),this.thumbTop=this.getThumbTop(),this.background=this.getBackground()}},data:function(){return{thumbLeft:0,thumbTop:0,background:null}},mounted:function(){var e=this,t=this.$refs,n=t.bar,i=t.thumb,r={drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}};Jf(n,r),Jf(i,r),this.update()}},fp=hp,pp=l(fp,up,dp,!1,null,null,null);pp.options.__file="packages/color-picker/src/components/alpha-slider.vue";var mp=pp.exports,gp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-color-predefine"},[n("div",{staticClass:"el-color-predefine__colors"},e._l(e.rgbaColors,(function(t,i){return n("div",{key:e.colors[i],staticClass:"el-color-predefine__color-selector",class:{selected:t.selected,"is-alpha":t._alpha<100},on:{click:function(t){e.handleSelect(i)}}},[n("div",{style:{"background-color":t.value}})])})),0)])},vp=[];gp._withStripped=!0;var bp={props:{colors:{type:Array,required:!0},color:{required:!0}},data:function(){return{rgbaColors:this.parseColors(this.colors,this.color)}},methods:{handleSelect:function(e){this.color.fromString(this.colors[e])},parseColors:function(e,t){return e.map((function(e){var n=new Kf;return n.enableAlpha=!0,n.format="rgba",n.fromString(e),n.selected=n.value===t.value,n}))}},watch:{"$parent.currentColor":function(e){var t=new Kf;t.fromString(e),this.rgbaColors.forEach((function(e){e.selected=t.compare(e)}))},colors:function(e){this.rgbaColors=this.parseColors(e,this.color)},color:function(e){this.rgbaColors=this.parseColors(this.colors,e)}}},yp=bp,wp=l(yp,gp,vp,!1,null,null,null);wp.options.__file="packages/color-picker/src/components/predefine.vue";var xp=wp.exports,_p={name:"el-color-picker-dropdown",mixins:[W.a,b.a],components:{SvPanel:ip,HueSlider:cp,AlphaSlider:mp,ElInput:g.a,ElButton:se.a,Predefine:xp},props:{color:{required:!0},showAlpha:Boolean,predefine:Array},data:function(){return{customInput:""}},computed:{currentColor:function(){var e=this.$parent;return e.value||e.showPanelColor?e.color.value:""}},methods:{confirmValue:function(){this.$emit("pick")},handleConfirm:function(){this.color.fromString(this.customInput)}},mounted:function(){this.$parent.popperElm=this.popperElm=this.$el,this.referenceElm=this.$parent.$el},watch:{showPopper:function(e){var t=this;!0===e&&this.$nextTick((function(){var e=t.$refs,n=e.sl,i=e.hue,r=e.alpha;n&&n.update(),i&&i.update(),r&&r.update()}))},currentColor:{immediate:!0,handler:function(e){this.customInput=e}}}},kp=_p,Cp=l(kp,Gf,Yf,!1,null,null,null);Cp.options.__file="packages/color-picker/src/components/picker-dropdown.vue";var Sp=Cp.exports,Op={name:"ElColorPicker",mixins:[D.a],props:{value:String,showAlpha:Boolean,colorFormat:String,disabled:Boolean,size:String,popperClass:String,predefine:Array},inject:{elForm:{default:""},elFormItem:{default:""}},directives:{Clickoutside:B.a},computed:{displayedColor:function(){return this.value||this.showPanelColor?this.displayedRgb(this.color,this.showAlpha):"transparent"},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},colorSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},colorDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{value:function(e){e?e&&e!==this.color.value&&this.color.fromString(e):this.showPanelColor=!1},color:{deep:!0,handler:function(){this.showPanelColor=!0}},displayedColor:function(e){if(this.showPicker){var t=new Kf({enableAlpha:this.showAlpha,format:this.colorFormat});t.fromString(this.value);var n=this.displayedRgb(t,this.showAlpha);e!==n&&this.$emit("active-change",e)}}},methods:{handleTrigger:function(){this.colorDisabled||(this.showPicker=!this.showPicker)},confirmValue:function(){var e=this.color.value;this.$emit("input",e),this.$emit("change",e),this.dispatch("ElFormItem","el.form.change",e),this.showPicker=!1},clearValue:function(){this.$emit("input",null),this.$emit("change",null),null!==this.value&&this.dispatch("ElFormItem","el.form.change",null),this.showPanelColor=!1,this.showPicker=!1,this.resetColor()},hide:function(){this.showPicker=!1,this.resetColor()},resetColor:function(){var e=this;this.$nextTick((function(t){e.value?e.color.fromString(e.value):e.showPanelColor=!1}))},displayedRgb:function(e,t){if(!(e instanceof Kf))throw Error("color should be instance of Color Class");var n=e.toRgb(),i=n.r,r=n.g,o=n.b;return t?"rgba("+i+", "+r+", "+o+", "+e.get("alpha")/100+")":"rgb("+i+", "+r+", "+o+")"}},mounted:function(){var e=this.value;e&&this.color.fromString(e),this.popperElm=this.$refs.dropdown.$el},data:function(){var e=new Kf({enableAlpha:this.showAlpha,format:this.colorFormat});return{color:e,showPicker:!1,showPanelColor:!1}},components:{PickerDropdown:Sp}},Tp=Op,Ep=l(Tp,Af,Nf,!1,null,null,null);Ep.options.__file="packages/color-picker/src/main.vue";var Dp=Ep.exports;Dp.install=function(e){e.component(Dp.name,Dp)};var Mp=Dp,Ap=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-transfer"},[n("transfer-panel",e._b({ref:"leftPanel",attrs:{data:e.sourceData,title:e.titles[0]||e.t("el.transfer.titles.0"),"default-checked":e.leftDefaultChecked,placeholder:e.filterPlaceholder||e.t("el.transfer.filterPlaceholder")},on:{"checked-change":e.onSourceCheckedChange}},"transfer-panel",e.$props,!1),[e._t("left-footer")],2),n("div",{staticClass:"el-transfer__buttons"},[n("el-button",{class:["el-transfer__button",e.hasButtonTexts?"is-with-texts":""],attrs:{type:"primary",disabled:0===e.rightChecked.length},nativeOn:{click:function(t){return e.addToLeft(t)}}},[n("i",{staticClass:"el-icon-arrow-left"}),void 0!==e.buttonTexts[0]?n("span",[e._v(e._s(e.buttonTexts[0]))]):e._e()]),n("el-button",{class:["el-transfer__button",e.hasButtonTexts?"is-with-texts":""],attrs:{type:"primary",disabled:0===e.leftChecked.length},nativeOn:{click:function(t){return e.addToRight(t)}}},[void 0!==e.buttonTexts[1]?n("span",[e._v(e._s(e.buttonTexts[1]))]):e._e(),n("i",{staticClass:"el-icon-arrow-right"})])],1),n("transfer-panel",e._b({ref:"rightPanel",attrs:{data:e.targetData,title:e.titles[1]||e.t("el.transfer.titles.1"),"default-checked":e.rightDefaultChecked,placeholder:e.filterPlaceholder||e.t("el.transfer.filterPlaceholder")},on:{"checked-change":e.onTargetCheckedChange}},"transfer-panel",e.$props,!1),[e._t("right-footer")],2)],1)},Np=[];Ap._withStripped=!0;var Ip=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-transfer-panel"},[n("p",{staticClass:"el-transfer-panel__header"},[n("el-checkbox",{attrs:{indeterminate:e.isIndeterminate},on:{change:e.handleAllCheckedChange},model:{value:e.allChecked,callback:function(t){e.allChecked=t},expression:"allChecked"}},[e._v("\n      "+e._s(e.title)+"\n      "),n("span",[e._v(e._s(e.checkedSummary))])])],1),n("div",{class:["el-transfer-panel__body",e.hasFooter?"is-with-footer":""]},[e.filterable?n("el-input",{staticClass:"el-transfer-panel__filter",attrs:{size:"small",placeholder:e.placeholder},nativeOn:{mouseenter:function(t){e.inputHover=!0},mouseleave:function(t){e.inputHover=!1}},model:{value:e.query,callback:function(t){e.query=t},expression:"query"}},[n("i",{class:["el-input__icon","el-icon-"+e.inputIcon],attrs:{slot:"prefix"},on:{click:e.clearQuery},slot:"prefix"})]):e._e(),n("el-checkbox-group",{directives:[{name:"show",rawName:"v-show",value:!e.hasNoMatch&&e.data.length>0,expression:"!hasNoMatch && data.length > 0"}],staticClass:"el-transfer-panel__list",class:{"is-filterable":e.filterable},model:{value:e.checked,callback:function(t){e.checked=t},expression:"checked"}},e._l(e.filteredData,(function(t){return n("el-checkbox",{key:t[e.keyProp],staticClass:"el-transfer-panel__item",attrs:{label:t[e.keyProp],disabled:t[e.disabledProp]}},[n("option-content",{attrs:{option:t}})],1)})),1),n("p",{directives:[{name:"show",rawName:"v-show",value:e.hasNoMatch,expression:"hasNoMatch"}],staticClass:"el-transfer-panel__empty"},[e._v(e._s(e.t("el.transfer.noMatch")))]),n("p",{directives:[{name:"show",rawName:"v-show",value:0===e.data.length&&!e.hasNoMatch,expression:"data.length === 0 && !hasNoMatch"}],staticClass:"el-transfer-panel__empty"},[e._v(e._s(e.t("el.transfer.noData")))])],1),e.hasFooter?n("p",{staticClass:"el-transfer-panel__footer"},[e._t("default")],2):e._e()])},Lp=[];Ip._withStripped=!0;var Pp={mixins:[b.a],name:"ElTransferPanel",componentName:"ElTransferPanel",components:{ElCheckboxGroup:Ir.a,ElCheckbox:Fi.a,ElInput:g.a,OptionContent:{props:{option:Object},render:function(e){var t=function e(t){return"ElTransferPanel"===t.$options.componentName?t:t.$parent?e(t.$parent):t},n=t(this),i=n.$parent||n;return n.renderContent?n.renderContent(e,this.option):i.$scopedSlots.default?i.$scopedSlots.default({option:this.option}):e("span",[this.option[n.labelProp]||this.option[n.keyProp]])}}},props:{data:{type:Array,default:function(){return[]}},renderContent:Function,placeholder:String,title:String,filterable:Boolean,format:Object,filterMethod:Function,defaultChecked:Array,props:Object},data:function(){return{checked:[],allChecked:!1,query:"",inputHover:!1,checkChangeByUser:!0}},watch:{checked:function(e,t){if(this.updateAllChecked(),this.checkChangeByUser){var n=e.concat(t).filter((function(n){return-1===e.indexOf(n)||-1===t.indexOf(n)}));this.$emit("checked-change",e,n)}else this.$emit("checked-change",e),this.checkChangeByUser=!0},data:function(){var e=this,t=[],n=this.filteredData.map((function(t){return t[e.keyProp]}));this.checked.forEach((function(e){n.indexOf(e)>-1&&t.push(e)})),this.checkChangeByUser=!1,this.checked=t},checkableData:function(){this.updateAllChecked()},defaultChecked:{immediate:!0,handler:function(e,t){var n=this;if(!t||e.length!==t.length||!e.every((function(e){return t.indexOf(e)>-1}))){var i=[],r=this.checkableData.map((function(e){return e[n.keyProp]}));e.forEach((function(e){r.indexOf(e)>-1&&i.push(e)})),this.checkChangeByUser=!1,this.checked=i}}}},computed:{filteredData:function(){var e=this;return this.data.filter((function(t){if("function"===typeof e.filterMethod)return e.filterMethod(e.query,t);var n=t[e.labelProp]||t[e.keyProp].toString();return n.toLowerCase().indexOf(e.query.toLowerCase())>-1}))},checkableData:function(){var e=this;return this.filteredData.filter((function(t){return!t[e.disabledProp]}))},checkedSummary:function(){var e=this.checked.length,t=this.data.length,n=this.format,i=n.noChecked,r=n.hasChecked;return i&&r?e>0?r.replace(/\${checked}/g,e).replace(/\${total}/g,t):i.replace(/\${total}/g,t):e+"/"+t},isIndeterminate:function(){var e=this.checked.length;return e>0&&e<this.checkableData.length},hasNoMatch:function(){return this.query.length>0&&0===this.filteredData.length},inputIcon:function(){return this.query.length>0&&this.inputHover?"circle-close":"search"},labelProp:function(){return this.props.label||"label"},keyProp:function(){return this.props.key||"key"},disabledProp:function(){return this.props.disabled||"disabled"},hasFooter:function(){return!!this.$slots.default}},methods:{updateAllChecked:function(){var e=this,t=this.checkableData.map((function(t){return t[e.keyProp]}));this.allChecked=t.length>0&&t.every((function(t){return e.checked.indexOf(t)>-1}))},handleAllCheckedChange:function(e){var t=this;this.checked=e?this.checkableData.map((function(e){return e[t.keyProp]})):[]},clearQuery:function(){"circle-close"===this.inputIcon&&(this.query="")}}},$p=Pp,Fp=l($p,Ip,Lp,!1,null,null,null);Fp.options.__file="packages/transfer/src/transfer-panel.vue";var jp=Fp.exports,zp={name:"ElTransfer",mixins:[D.a,b.a,T.a],components:{TransferPanel:jp,ElButton:se.a},props:{data:{type:Array,default:function(){return[]}},titles:{type:Array,default:function(){return[]}},buttonTexts:{type:Array,default:function(){return[]}},filterPlaceholder:{type:String,default:""},filterMethod:Function,leftDefaultChecked:{type:Array,default:function(){return[]}},rightDefaultChecked:{type:Array,default:function(){return[]}},renderContent:Function,value:{type:Array,default:function(){return[]}},format:{type:Object,default:function(){return{}}},filterable:Boolean,props:{type:Object,default:function(){return{label:"label",key:"key",disabled:"disabled"}}},targetOrder:{type:String,default:"original"}},data:function(){return{leftChecked:[],rightChecked:[]}},computed:{dataObj:function(){var e=this.props.key;return this.data.reduce((function(t,n){return(t[n[e]]=n)&&t}),{})},sourceData:function(){var e=this;return this.data.filter((function(t){return-1===e.value.indexOf(t[e.props.key])}))},targetData:function(){var e=this;return"original"===this.targetOrder?this.data.filter((function(t){return e.value.indexOf(t[e.props.key])>-1})):this.value.reduce((function(t,n){var i=e.dataObj[n];return i&&t.push(i),t}),[])},hasButtonTexts:function(){return 2===this.buttonTexts.length}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}},methods:{getMigratingConfig:function(){return{props:{"footer-format":"footer-format is renamed to format."}}},onSourceCheckedChange:function(e,t){this.leftChecked=e,void 0!==t&&this.$emit("left-check-change",e,t)},onTargetCheckedChange:function(e,t){this.rightChecked=e,void 0!==t&&this.$emit("right-check-change",e,t)},addToLeft:function(){var e=this.value.slice();this.rightChecked.forEach((function(t){var n=e.indexOf(t);n>-1&&e.splice(n,1)})),this.$emit("input",e),this.$emit("change",e,"left",this.rightChecked)},addToRight:function(){var e=this,t=this.value.slice(),n=[],i=this.props.key;this.data.forEach((function(t){var r=t[i];e.leftChecked.indexOf(r)>-1&&-1===e.value.indexOf(r)&&n.push(r)})),t="unshift"===this.targetOrder?n.concat(t):t.concat(n),this.$emit("input",t),this.$emit("change",t,"right",this.leftChecked)},clearQuery:function(e){"left"===e?this.$refs.leftPanel.query="":"right"===e&&(this.$refs.rightPanel.query="")}}},Bp=zp,Rp=l(Bp,Ap,Np,!1,null,null,null);Rp.options.__file="packages/transfer/src/main.vue";var Vp=Rp.exports;Vp.install=function(e){e.component(Vp.name,Vp)};var Hp=Vp,Wp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("section",{staticClass:"el-container",class:{"is-vertical":e.isVertical}},[e._t("default")],2)},qp=[];Wp._withStripped=!0;var Up={name:"ElContainer",componentName:"ElContainer",props:{direction:String},computed:{isVertical:function(){return"vertical"===this.direction||"horizontal"!==this.direction&&!(!this.$slots||!this.$slots.default)&&this.$slots.default.some((function(e){var t=e.componentOptions&&e.componentOptions.tag;return"el-header"===t||"el-footer"===t}))}}},Kp=Up,Gp=l(Kp,Wp,qp,!1,null,null,null);Gp.options.__file="packages/container/src/main.vue";var Yp=Gp.exports;Yp.install=function(e){e.component(Yp.name,Yp)};var Xp=Yp,Zp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("header",{staticClass:"el-header",style:{height:e.height}},[e._t("default")],2)},Qp=[];Zp._withStripped=!0;var Jp={name:"ElHeader",componentName:"ElHeader",props:{height:{type:String,default:"60px"}}},em=Jp,tm=l(em,Zp,Qp,!1,null,null,null);tm.options.__file="packages/header/src/main.vue";var nm=tm.exports;nm.install=function(e){e.component(nm.name,nm)};var im=nm,rm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("aside",{staticClass:"el-aside",style:{width:e.width}},[e._t("default")],2)},om=[];rm._withStripped=!0;var am={name:"ElAside",componentName:"ElAside",props:{width:{type:String,default:"300px"}}},sm=am,lm=l(sm,rm,om,!1,null,null,null);lm.options.__file="packages/aside/src/main.vue";var cm=lm.exports;cm.install=function(e){e.component(cm.name,cm)};var um=cm,dm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("main",{staticClass:"el-main"},[e._t("default")],2)},hm=[];dm._withStripped=!0;var fm={name:"ElMain",componentName:"ElMain"},pm=fm,mm=l(pm,dm,hm,!1,null,null,null);mm.options.__file="packages/main/src/main.vue";var gm=mm.exports;gm.install=function(e){e.component(gm.name,gm)};var vm=gm,bm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("footer",{staticClass:"el-footer",style:{height:e.height}},[e._t("default")],2)},ym=[];bm._withStripped=!0;var wm={name:"ElFooter",componentName:"ElFooter",props:{height:{type:String,default:"60px"}}},xm=wm,_m=l(xm,bm,ym,!1,null,null,null);_m.options.__file="packages/footer/src/main.vue";var km=_m.exports;km.install=function(e){e.component(km.name,km)};var Cm,Sm,Om=km,Tm={name:"ElTimeline",props:{reverse:{type:Boolean,default:!1}},provide:function(){return{timeline:this}},render:function(){var e=arguments[0],t=this.reverse,n={"el-timeline":!0,"is-reverse":t},i=this.$slots.default||[];return t&&(i=i.reverse()),e("ul",{class:n},[i])}},Em=Tm,Dm=l(Em,Cm,Sm,!1,null,null,null);Dm.options.__file="packages/timeline/src/main.vue";var Mm=Dm.exports;Mm.install=function(e){e.component(Mm.name,Mm)};var Am=Mm,Nm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"el-timeline-item"},[n("div",{staticClass:"el-timeline-item__tail"}),e.$slots.dot?e._e():n("div",{staticClass:"el-timeline-item__node",class:["el-timeline-item__node--"+(e.size||""),"el-timeline-item__node--"+(e.type||"")],style:{backgroundColor:e.color}},[e.icon?n("i",{staticClass:"el-timeline-item__icon",class:e.icon}):e._e()]),e.$slots.dot?n("div",{staticClass:"el-timeline-item__dot"},[e._t("dot")],2):e._e(),n("div",{staticClass:"el-timeline-item__wrapper"},[e.hideTimestamp||"top"!==e.placement?e._e():n("div",{staticClass:"el-timeline-item__timestamp is-top"},[e._v("\n      "+e._s(e.timestamp)+"\n    ")]),n("div",{staticClass:"el-timeline-item__content"},[e._t("default")],2),e.hideTimestamp||"bottom"!==e.placement?e._e():n("div",{staticClass:"el-timeline-item__timestamp is-bottom"},[e._v("\n      "+e._s(e.timestamp)+"\n    ")])])])},Im=[];Nm._withStripped=!0;var Lm={name:"ElTimelineItem",inject:["timeline"],props:{timestamp:String,hideTimestamp:{type:Boolean,default:!1},placement:{type:String,default:"bottom"},type:String,color:String,size:{type:String,default:"normal"},icon:String}},Pm=Lm,$m=l(Pm,Nm,Im,!1,null,null,null);$m.options.__file="packages/timeline/src/item.vue";var Fm=$m.exports;Fm.install=function(e){e.component(Fm.name,Fm)};var jm=Fm,zm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("a",e._b({class:["el-link",e.type?"el-link--"+e.type:"",e.disabled&&"is-disabled",e.underline&&!e.disabled&&"is-underline"],attrs:{href:e.disabled?null:e.href},on:{click:e.handleClick}},"a",e.$attrs,!1),[e.icon?n("i",{class:e.icon}):e._e(),e.$slots.default?n("span",{staticClass:"el-link--inner"},[e._t("default")],2):e._e(),e.$slots.icon?[e.$slots.icon?e._t("icon"):e._e()]:e._e()],2)},Bm=[];zm._withStripped=!0;var Rm={name:"ElLink",props:{type:{type:String,default:"default"},underline:{type:Boolean,default:!0},disabled:Boolean,href:String,icon:String},methods:{handleClick:function(e){this.disabled||this.href||this.$emit("click",e)}}},Vm=Rm,Hm=l(Vm,zm,Bm,!1,null,null,null);Hm.options.__file="packages/link/src/main.vue";var Wm=Hm.exports;Wm.install=function(e){e.component(Wm.name,Wm)};var qm=Wm,Um=function(e,t){var n=t._c;return n("div",t._g(t._b({class:[t.data.staticClass,"el-divider","el-divider--"+t.props.direction]},"div",t.data.attrs,!1),t.listeners),[t.slots().default&&"vertical"!==t.props.direction?n("div",{class:["el-divider__text","is-"+t.props.contentPosition]},[t._t("default")],2):t._e()])},Km=[];Um._withStripped=!0;var Gm={name:"ElDivider",props:{direction:{type:String,default:"horizontal",validator:function(e){return-1!==["horizontal","vertical"].indexOf(e)}},contentPosition:{type:String,default:"center",validator:function(e){return-1!==["left","center","right"].indexOf(e)}}}},Ym=Gm,Xm=l(Ym,Um,Km,!0,null,null,null);Xm.options.__file="packages/divider/src/main.vue";var Zm=Xm.exports;Zm.install=function(e){e.component(Zm.name,Zm)};var Qm=Zm,Jm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-image"},[e.loading?e._t("placeholder",[n("div",{staticClass:"el-image__placeholder"})]):e.error?e._t("error",[n("div",{staticClass:"el-image__error"},[e._v(e._s(e.t("el.image.error")))])]):n("img",e._g(e._b({staticClass:"el-image__inner",class:{"el-image__inner--center":e.alignCenter,"el-image__preview":e.preview},style:e.imageStyle,attrs:{src:e.src},on:{click:e.clickHandler}},"img",e.$attrs,!1),e.$listeners)),e.preview?[e.showViewer?n("image-viewer",{attrs:{"z-index":e.zIndex,"initial-index":e.imageIndex,"on-close":e.closeViewer,"url-list":e.previewSrcList}}):e._e()]:e._e()],2)},eg=[];Jm._withStripped=!0;var tg=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"viewer-fade"}},[n("div",{ref:"el-image-viewer__wrapper",staticClass:"el-image-viewer__wrapper",style:{"z-index":e.zIndex},attrs:{tabindex:"-1"}},[n("div",{staticClass:"el-image-viewer__mask"}),n("span",{staticClass:"el-image-viewer__btn el-image-viewer__close",on:{click:e.hide}},[n("i",{staticClass:"el-icon-circle-close"})]),e.isSingle?e._e():[n("span",{staticClass:"el-image-viewer__btn el-image-viewer__prev",class:{"is-disabled":!e.infinite&&e.isFirst},on:{click:e.prev}},[n("i",{staticClass:"el-icon-arrow-left"})]),n("span",{staticClass:"el-image-viewer__btn el-image-viewer__next",class:{"is-disabled":!e.infinite&&e.isLast},on:{click:e.next}},[n("i",{staticClass:"el-icon-arrow-right"})])],n("div",{staticClass:"el-image-viewer__btn el-image-viewer__actions"},[n("div",{staticClass:"el-image-viewer__actions__inner"},[n("i",{staticClass:"el-icon-zoom-out",on:{click:function(t){e.handleActions("zoomOut")}}}),n("i",{staticClass:"el-icon-zoom-in",on:{click:function(t){e.handleActions("zoomIn")}}}),n("i",{staticClass:"el-image-viewer__actions__divider"}),n("i",{class:e.mode.icon,on:{click:e.toggleMode}}),n("i",{staticClass:"el-image-viewer__actions__divider"}),n("i",{staticClass:"el-icon-refresh-left",on:{click:function(t){e.handleActions("anticlocelise")}}}),n("i",{staticClass:"el-icon-refresh-right",on:{click:function(t){e.handleActions("clocelise")}}})])]),n("div",{staticClass:"el-image-viewer__canvas"},e._l(e.urlList,(function(t,i){return i===e.index?n("img",{key:t,ref:"img",refInFor:!0,staticClass:"el-image-viewer__img",style:e.imgStyle,attrs:{src:e.currentImg},on:{load:e.handleImgLoad,error:e.handleImgError,mousedown:e.handleMouseDown}}):e._e()})),0)],2)])},ng=[];tg._withStripped=!0;var ig=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},rg={CONTAIN:{name:"contain",icon:"el-icon-full-screen"},ORIGINAL:{name:"original",icon:"el-icon-c-scale-to-original"}},og=Object(y["isFirefox"])()?"DOMMouseScroll":"mousewheel",ag={name:"elImageViewer",props:{urlList:{type:Array,default:function(){return[]}},zIndex:{type:Number,default:2e3},onSwitch:{type:Function,default:function(){}},onClose:{type:Function,default:function(){}},initialIndex:{type:Number,default:0}},data:function(){return{index:this.initialIndex,isShow:!1,infinite:!0,loading:!1,mode:rg.CONTAIN,transform:{scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}}},computed:{isSingle:function(){return this.urlList.length<=1},isFirst:function(){return 0===this.index},isLast:function(){return this.index===this.urlList.length-1},currentImg:function(){return this.urlList[this.index]},imgStyle:function(){var e=this.transform,t=e.scale,n=e.deg,i=e.offsetX,r=e.offsetY,o=e.enableTransition,a={transform:"scale("+t+") rotate("+n+"deg)",transition:o?"transform .3s":"","margin-left":i+"px","margin-top":r+"px"};return this.mode===rg.CONTAIN&&(a.maxWidth=a.maxHeight="100%"),a}},watch:{index:{handler:function(e){this.reset(),this.onSwitch(e)}},currentImg:function(e){var t=this;this.$nextTick((function(e){var n=t.$refs.img[0];n.complete||(t.loading=!0)}))}},methods:{hide:function(){this.deviceSupportUninstall(),this.onClose()},deviceSupportInstall:function(){var e=this;this._keyDownHandler=Object(y["rafThrottle"])((function(t){var n=t.keyCode;switch(n){case 27:e.hide();break;case 32:e.toggleMode();break;case 37:e.prev();break;case 38:e.handleActions("zoomIn");break;case 39:e.next();break;case 40:e.handleActions("zoomOut");break}})),this._mouseWheelHandler=Object(y["rafThrottle"])((function(t){var n=t.wheelDelta?t.wheelDelta:-t.detail;n>0?e.handleActions("zoomIn",{zoomRate:.015,enableTransition:!1}):e.handleActions("zoomOut",{zoomRate:.015,enableTransition:!1})})),Object(ze["on"])(document,"keydown",this._keyDownHandler),Object(ze["on"])(document,og,this._mouseWheelHandler)},deviceSupportUninstall:function(){Object(ze["off"])(document,"keydown",this._keyDownHandler),Object(ze["off"])(document,og,this._mouseWheelHandler),this._keyDownHandler=null,this._mouseWheelHandler=null},handleImgLoad:function(e){this.loading=!1},handleImgError:function(e){this.loading=!1,e.target.alt="加载失败"},handleMouseDown:function(e){var t=this;if(!this.loading&&0===e.button){var n=this.transform,i=n.offsetX,r=n.offsetY,o=e.pageX,a=e.pageY;this._dragHandler=Object(y["rafThrottle"])((function(e){t.transform.offsetX=i+e.pageX-o,t.transform.offsetY=r+e.pageY-a})),Object(ze["on"])(document,"mousemove",this._dragHandler),Object(ze["on"])(document,"mouseup",(function(e){Object(ze["off"])(document,"mousemove",t._dragHandler)})),e.preventDefault()}},reset:function(){this.transform={scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}},toggleMode:function(){if(!this.loading){var e=Object.keys(rg),t=Object.values(rg),n=t.indexOf(this.mode),i=(n+1)%e.length;this.mode=rg[e[i]],this.reset()}},prev:function(){if(!this.isFirst||this.infinite){var e=this.urlList.length;this.index=(this.index-1+e)%e}},next:function(){if(!this.isLast||this.infinite){var e=this.urlList.length;this.index=(this.index+1)%e}},handleActions:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.loading){var n=ig({zoomRate:.2,rotateDeg:90,enableTransition:!0},t),i=n.zoomRate,r=n.rotateDeg,o=n.enableTransition,a=this.transform;switch(e){case"zoomOut":a.scale>.2&&(a.scale=parseFloat((a.scale-i).toFixed(3)));break;case"zoomIn":a.scale=parseFloat((a.scale+i).toFixed(3));break;case"clocelise":a.deg+=r;break;case"anticlocelise":a.deg-=r;break}a.enableTransition=o}}},mounted:function(){this.deviceSupportInstall(),this.$refs["el-image-viewer__wrapper"].focus()}},sg=ag,lg=l(sg,tg,ng,!1,null,null,null);lg.options.__file="packages/image/src/image-viewer.vue";var cg=lg.exports,ug=function(){return void 0!==document.documentElement.style.objectFit},dg={NONE:"none",CONTAIN:"contain",COVER:"cover",FILL:"fill",SCALE_DOWN:"scale-down"},hg="",fg={name:"ElImage",mixins:[b.a],inheritAttrs:!1,components:{ImageViewer:cg},props:{src:String,fit:String,lazy:Boolean,scrollContainer:{},previewSrcList:{type:Array,default:function(){return[]}},zIndex:{type:Number,default:2e3}},data:function(){return{loading:!0,error:!1,show:!this.lazy,imageWidth:0,imageHeight:0,showViewer:!1}},computed:{imageStyle:function(){var e=this.fit;return!this.$isServer&&e?ug()?{"object-fit":e}:this.getImageStyle(e):{}},alignCenter:function(){return!this.$isServer&&!ug()&&this.fit!==dg.FILL},preview:function(){var e=this.previewSrcList;return Array.isArray(e)&&e.length>0},imageIndex:function(){var e=0,t=this.previewSrcList.indexOf(this.src);return t>=0&&(e=t),e}},watch:{src:function(e){this.show&&this.loadImage()},show:function(e){e&&this.loadImage()}},mounted:function(){this.lazy?this.addLazyLoadListener():this.loadImage()},beforeDestroy:function(){this.lazy&&this.removeLazyLoadListener()},methods:{loadImage:function(){var e=this;if(!this.$isServer){this.loading=!0,this.error=!1;var t=new Image;t.onload=function(n){return e.handleLoad(n,t)},t.onerror=this.handleError.bind(this),Object.keys(this.$attrs).forEach((function(n){var i=e.$attrs[n];t.setAttribute(n,i)})),t.src=this.src}},handleLoad:function(e,t){this.imageWidth=t.width,this.imageHeight=t.height,this.loading=!1,this.error=!1},handleError:function(e){this.loading=!1,this.error=!0,this.$emit("error",e)},handleLazyLoad:function(){Object(ze["isInContainer"])(this.$el,this._scrollContainer)&&(this.show=!0,this.removeLazyLoadListener())},addLazyLoadListener:function(){if(!this.$isServer){var e=this.scrollContainer,t=null;t=Object(fh["isHtmlElement"])(e)?e:Object(fh["isString"])(e)?document.querySelector(e):Object(ze["getScrollContainer"])(this.$el),t&&(this._scrollContainer=t,this._lazyLoadHandler=$h()(200,this.handleLazyLoad),Object(ze["on"])(t,"scroll",this._lazyLoadHandler),this.handleLazyLoad())}},removeLazyLoadListener:function(){var e=this._scrollContainer,t=this._lazyLoadHandler;!this.$isServer&&e&&t&&(Object(ze["off"])(e,"scroll",t),this._scrollContainer=null,this._lazyLoadHandler=null)},getImageStyle:function(e){var t=this.imageWidth,n=this.imageHeight,i=this.$el,r=i.clientWidth,o=i.clientHeight;if(!t||!n||!r||!o)return{};var a=t/n<1;if(e===dg.SCALE_DOWN){var s=t<r&&n<o;e=s?dg.NONE:dg.CONTAIN}switch(e){case dg.NONE:return{width:"auto",height:"auto"};case dg.CONTAIN:return a?{width:"auto"}:{height:"auto"};case dg.COVER:return a?{height:"auto"}:{width:"auto"};default:return{}}},clickHandler:function(){this.preview&&(hg=document.body.style.overflow,document.body.style.overflow="hidden",this.showViewer=!0)},closeViewer:function(){document.body.style.overflow=hg,this.showViewer=!1}}},pg=fg,mg=l(pg,Jm,eg,!1,null,null,null);mg.options.__file="packages/image/src/main.vue";var gg=mg.exports;gg.install=function(e){e.component(gg.name,gg)};var vg=gg,bg=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-calendar"},[n("div",{staticClass:"el-calendar__header"},[n("div",{staticClass:"el-calendar__title"},[e._v("\n      "+e._s(e.i18nDate)+"\n    ")]),0===e.validatedRange.length?n("div",{staticClass:"el-calendar__button-group"},[n("el-button-group",[n("el-button",{attrs:{type:"plain",size:"mini"},on:{click:function(t){e.selectDate("prev-month")}}},[e._v("\n          "+e._s(e.t("el.datepicker.prevMonth"))+"\n        ")]),n("el-button",{attrs:{type:"plain",size:"mini"},on:{click:function(t){e.selectDate("today")}}},[e._v("\n          "+e._s(e.t("el.datepicker.today"))+"\n        ")]),n("el-button",{attrs:{type:"plain",size:"mini"},on:{click:function(t){e.selectDate("next-month")}}},[e._v("\n          "+e._s(e.t("el.datepicker.nextMonth"))+"\n        ")])],1)],1):e._e()]),0===e.validatedRange.length?n("div",{key:"no-range",staticClass:"el-calendar__body"},[n("date-table",{attrs:{date:e.date,"selected-day":e.realSelectedDay,"first-day-of-week":e.realFirstDayOfWeek},on:{pick:e.pickDay}})],1):n("div",{key:"has-range",staticClass:"el-calendar__body"},e._l(e.validatedRange,(function(t,i){return n("date-table",{key:i,attrs:{date:t[0],"selected-day":e.realSelectedDay,range:t,"hide-header":0!==i,"first-day-of-week":e.realFirstDayOfWeek},on:{pick:e.pickDay}})})),1)])},yg=[];bg._withStripped=!0;var wg,xg,_g=n(20),kg=n.n(_g),Cg={props:{selectedDay:String,range:{type:Array,validator:function(e){if(!e||!e.length)return!0;var t=e[0],n=e[1];return Object(so["validateRangeInOneMonth"])(t,n)}},date:Date,hideHeader:Boolean,firstDayOfWeek:Number},inject:["elCalendar"],data:function(){return{WEEK_DAYS:Object(so["getI18nSettings"])().dayNames}},methods:{toNestedArr:function(e){return Object(so["range"])(e.length/7).map((function(t,n){var i=7*n;return e.slice(i,i+7)}))},getFormateDate:function(e,t){if(!e||-1===["prev","current","next"].indexOf(t))throw new Error("invalid day or type");var n=this.curMonthDatePrefix;return"prev"===t?n=this.prevMonthDatePrefix:"next"===t&&(n=this.nextMonthDatePrefix),e=("00"+e).slice(-2),n+"-"+e},getCellClass:function(e){var t=e.text,n=e.type,i=[n];if("current"===n){var r=this.getFormateDate(t,n);r===this.selectedDay&&i.push("is-selected"),r===this.formatedToday&&i.push("is-today")}return i},pickDay:function(e){var t=e.text,n=e.type,i=this.getFormateDate(t,n);this.$emit("pick",i)},cellRenderProxy:function(e){var t=e.text,n=e.type,i=this.$createElement,r=this.elCalendar.$scopedSlots.dateCell;if(!r)return i("span",[t]);var o=this.getFormateDate(t,n),a=new Date(o),s={isSelected:this.selectedDay===o,type:n+"-month",day:o};return r({date:a,data:s})}},computed:{prevMonthDatePrefix:function(){var e=new Date(this.date.getTime());return e.setDate(0),kg.a.format(e,"yyyy-MM")},curMonthDatePrefix:function(){return kg.a.format(this.date,"yyyy-MM")},nextMonthDatePrefix:function(){var e=new Date(this.date.getFullYear(),this.date.getMonth()+1,1);return kg.a.format(e,"yyyy-MM")},formatedToday:function(){return this.elCalendar.formatedToday},isInRange:function(){return this.range&&this.range.length},rows:function(){var e=[];if(this.isInRange){var t=this.range,n=t[0],i=t[1],r=Object(so["range"])(i.getDate()-n.getDate()+1).map((function(e,t){return{text:n.getDate()+t,type:"current"}})),o=r.length%7;o=0===o?0:7-o;var a=Object(so["range"])(o).map((function(e,t){return{text:t+1,type:"next"}}));e=r.concat(a)}else{var s=this.date,l=Object(so["getFirstDayOfMonth"])(s);l=0===l?7:l;var c="number"===typeof this.firstDayOfWeek?this.firstDayOfWeek:1,u=Object(so["getPrevMonthLastDays"])(s,l-c).map((function(e){return{text:e,type:"prev"}})),d=Object(so["getMonthDays"])(s).map((function(e){return{text:e,type:"current"}}));e=[].concat(u,d);var h=Object(so["range"])(42-e.length).map((function(e,t){return{text:t+1,type:"next"}}));e=e.concat(h)}return this.toNestedArr(e)},weekDays:function(){var e=this.firstDayOfWeek,t=this.WEEK_DAYS;return"number"!==typeof e||0===e?t.slice():t.slice(e).concat(t.slice(0,e))}},render:function(){var e=this,t=arguments[0],n=this.hideHeader?null:t("thead",[this.weekDays.map((function(e){return t("th",{key:e},[e])}))]);return t("table",{class:{"el-calendar-table":!0,"is-range":this.isInRange},attrs:{cellspacing:"0",cellpadding:"0"}},[n,t("tbody",[this.rows.map((function(n,i){return t("tr",{class:{"el-calendar-table__row":!0,"el-calendar-table__row--hide-border":0===i&&e.hideHeader},key:i},[n.map((function(n,i){return t("td",{key:i,class:e.getCellClass(n),on:{click:e.pickDay.bind(e,n)}},[t("div",{class:"el-calendar-day"},[e.cellRenderProxy(n)])])}))])}))])])}},Sg=Cg,Og=l(Sg,wg,xg,!1,null,null,null);Og.options.__file="packages/calendar/src/date-table.vue";var Tg=Og.exports,Eg=["prev-month","today","next-month"],Dg=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Mg=864e5,Ag={name:"ElCalendar",mixins:[b.a],components:{DateTable:Tg,ElButton:se.a,ElButtonGroup:ce.a},props:{value:[Date,String,Number],range:{type:Array,validator:function(e){return!Array.isArray(e)||2===e.length&&e.every((function(e){return"string"===typeof e||"number"===typeof e||e instanceof Date}))}},firstDayOfWeek:{type:Number,default:1}},provide:function(){return{elCalendar:this}},methods:{pickDay:function(e){this.realSelectedDay=e},selectDate:function(e){if(-1===Eg.indexOf(e))throw new Error("invalid type "+e);var t="";t="prev-month"===e?this.prevMonthDatePrefix+"-01":"next-month"===e?this.nextMonthDatePrefix+"-01":this.formatedToday,t!==this.formatedDate&&this.pickDay(t)},toDate:function(e){if(!e)throw new Error("invalid val");return e instanceof Date?e:new Date(e)},rangeValidator:function(e,t){var n=this.realFirstDayOfWeek,i=t?n:0===n?6:n-1,r=(t?"start":"end")+" of range should be "+Dg[i]+".";return e.getDay()===i||(console.warn("[ElementCalendar]",r,"Invalid range will be ignored."),!1)}},computed:{prevMonthDatePrefix:function(){var e=new Date(this.date.getTime());return e.setDate(0),kg.a.format(e,"yyyy-MM")},curMonthDatePrefix:function(){return kg.a.format(this.date,"yyyy-MM")},nextMonthDatePrefix:function(){var e=new Date(this.date.getFullYear(),this.date.getMonth()+1,1);return kg.a.format(e,"yyyy-MM")},formatedDate:function(){return kg.a.format(this.date,"yyyy-MM-dd")},i18nDate:function(){var e=this.date.getFullYear(),t=this.date.getMonth()+1;return e+" "+this.t("el.datepicker.year")+" "+this.t("el.datepicker.month"+t)},formatedToday:function(){return kg.a.format(this.now,"yyyy-MM-dd")},realSelectedDay:{get:function(){return this.value?this.formatedDate:this.selectedDay},set:function(e){this.selectedDay=e;var t=new Date(e);this.$emit("input",t)}},date:function(){if(this.value)return this.toDate(this.value);if(this.realSelectedDay){var e=this.selectedDay.split("-");return new Date(e[0],e[1]-1,e[2])}return this.validatedRange.length?this.validatedRange[0][0]:this.now},validatedRange:function(){var e=this,t=this.range;if(!t)return[];if(t=t.reduce((function(t,n,i){var r=e.toDate(n);return e.rangeValidator(r,0===i)&&(t=t.concat(r)),t}),[]),2===t.length){var n=t,i=n[0],r=n[1];if(i>r)return console.warn("[ElementCalendar]end time should be greater than start time"),[];if(Object(so["validateRangeInOneMonth"])(i,r))return[[i,r]];var o=[],a=new Date(i.getFullYear(),i.getMonth()+1,1),s=this.toDate(a.getTime()-Mg);if(!Object(so["validateRangeInOneMonth"])(a,r))return console.warn("[ElementCalendar]start time and end time interval must not exceed two months"),[];o.push([i,s]);var l=this.realFirstDayOfWeek,c=a.getDay(),u=0;return c!==l&&(0===l?u=7-c:(u=l-c,u=u>0?u:7+u)),a=this.toDate(a.getTime()+u*Mg),a.getDate()<r.getDate()&&o.push([a,r]),o}return[]},realFirstDayOfWeek:function(){return this.firstDayOfWeek<1||this.firstDayOfWeek>6?0:Math.floor(this.firstDayOfWeek)}},data:function(){return{selectedDay:"",now:new Date}}},Ng=Ag,Ig=l(Ng,bg,yg,!1,null,null,null);Ig.options.__file="packages/calendar/src/main.vue";var Lg=Ig.exports;Lg.install=function(e){e.component(Lg.name,Lg)};var Pg=Lg,$g=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-fade-in"}},[e.visible?n("div",{staticClass:"el-backtop",style:{right:e.styleRight,bottom:e.styleBottom},on:{click:function(t){return t.stopPropagation(),e.handleClick(t)}}},[e._t("default",[n("el-icon",{attrs:{name:"caret-top"}})])],2):e._e()])},Fg=[];$g._withStripped=!0;var jg=function(e){return Math.pow(e,3)},zg=function(e){return e<.5?jg(2*e)/2:1-jg(2*(1-e))/2},Bg={name:"ElBacktop",props:{visibilityHeight:{type:Number,default:200},target:[String],right:{type:Number,default:40},bottom:{type:Number,default:40}},data:function(){return{el:null,container:null,visible:!1}},computed:{styleBottom:function(){return this.bottom+"px"},styleRight:function(){return this.right+"px"}},mounted:function(){this.init(),this.throttledScrollHandler=$h()(300,this.onScroll),this.container.addEventListener("scroll",this.throttledScrollHandler)},methods:{init:function(){if(this.container=document,this.el=document.documentElement,this.target){if(this.el=document.querySelector(this.target),!this.el)throw new Error("target is not existed: "+this.target);this.container=this.el}},onScroll:function(){var e=this.el.scrollTop;this.visible=e>=this.visibilityHeight},handleClick:function(e){this.scrollToTop(),this.$emit("click",e)},scrollToTop:function(){var e=this.el,t=Date.now(),n=e.scrollTop,i=window.requestAnimationFrame||function(e){return setTimeout(e,16)},r=function r(){var o=(Date.now()-t)/500;o<1?(e.scrollTop=n*(1-zg(o)),i(r)):e.scrollTop=0};i(r)}},beforeDestroy:function(){this.container.removeEventListener("scroll",this.throttledScrollHandler)}},Rg=Bg,Vg=l(Rg,$g,Fg,!1,null,null,null);Vg.options.__file="packages/backtop/src/main.vue";var Hg=Vg.exports;Hg.install=function(e){e.component(Hg.name,Hg)};var Wg=Hg,qg=function(e,t){if(e===window&&(e=document.documentElement),1!==e.nodeType)return[];var n=window.getComputedStyle(e,null);return t?n[t]:n},Ug=function(e){return Object.keys(e||{}).map((function(t){return[t,e[t]]}))},Kg=function(e,t){return e===window||e===document?document.documentElement[t]:e[t]},Gg=function(e){return Kg(e,"offsetHeight")},Yg=function(e){return Kg(e,"clientHeight")},Xg="ElInfiniteScroll",Zg={delay:{type:Number,default:200},distance:{type:Number,default:0},disabled:{type:Boolean,default:!1},immediate:{type:Boolean,default:!0}},Qg=function(e,t){return Object(fh["isHtmlElement"])(e)?Ug(Zg).reduce((function(n,i){var r=i[0],o=i[1],a=o.type,s=o.default,l=e.getAttribute("infinite-scroll-"+r);switch(l=Object(fh["isUndefined"])(t[l])?l:t[l],a){case Number:l=Number(l),l=Number.isNaN(l)?s:l;break;case Boolean:l=Object(fh["isDefined"])(l)?"false"!==l&&Boolean(l):s;break;default:l=a(l)}return n[r]=l,n}),{}):{}},Jg=function(e){return e.getBoundingClientRect().top},ev=function(e){var t=this[Xg],n=t.el,i=t.vm,r=t.container,o=t.observer,a=Qg(n,i),s=a.distance,l=a.disabled;if(!l){var c=r.getBoundingClientRect();if(c.width||c.height){var u=!1;if(r===n){var d=r.scrollTop+Yg(r);u=r.scrollHeight-d<=s}else{var h=Gg(n)+Jg(n)-Jg(r),f=Gg(r),p=Number.parseFloat(qg(r,"borderBottomWidth"));u=h-f+p<=s}u&&Object(fh["isFunction"])(e)?e.call(i):o&&(o.disconnect(),this[Xg].observer=null)}}},tv={name:"InfiniteScroll",inserted:function(e,t,n){var i=t.value,r=n.context,o=Object(ze["getScrollContainer"])(e,!0),a=Qg(e,r),s=a.delay,l=a.immediate,c=j()(s,ev.bind(e,i));if(e[Xg]={el:e,vm:r,container:o,onScroll:c},o&&(o.addEventListener("scroll",c),l)){var u=e[Xg].observer=new MutationObserver(c);u.observe(o,{childList:!0,subtree:!0}),c()}},unbind:function(e){var t=e[Xg],n=t.container,i=t.onScroll;n&&n.removeEventListener("scroll",i)},install:function(e){e.directive(tv.name,tv)}},nv=tv,iv=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-page-header"},[n("div",{staticClass:"el-page-header__left",on:{click:function(t){e.$emit("back")}}},[n("i",{staticClass:"el-icon-back"}),n("div",{staticClass:"el-page-header__title"},[e._t("title",[e._v(e._s(e.title))])],2)]),n("div",{staticClass:"el-page-header__content"},[e._t("content",[e._v(e._s(e.content))])],2)])},rv=[];iv._withStripped=!0;var ov={name:"ElPageHeader",props:{title:{type:String,default:function(){return Object(ni["t"])("el.pageHeader.title")}},content:String}},av=ov,sv=l(av,iv,rv,!1,null,null,null);sv.options.__file="packages/page-header/src/main.vue";var lv=sv.exports;lv.install=function(e){e.component(lv.name,lv)};var cv=lv,uv=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["el-cascader-panel",e.border&&"is-bordered"],on:{keydown:e.handleKeyDown}},e._l(e.menus,(function(e,t){return n("cascader-menu",{key:t,ref:"menu",refInFor:!0,attrs:{index:t,nodes:e}})})),1)},dv=[];uv._withStripped=!0;var hv,fv,pv=n(43),mv=n.n(pv),gv=function(e){return e.stopPropagation()},vv={inject:["panel"],components:{ElCheckbox:Fi.a,ElRadio:mv.a},props:{node:{required:!0},nodeId:String},computed:{config:function(){return this.panel.config},isLeaf:function(){return this.node.isLeaf},isDisabled:function(){return this.node.isDisabled},checkedValue:function(){return this.panel.checkedValue},isChecked:function(){return this.node.isSameNode(this.checkedValue)},inActivePath:function(){return this.isInPath(this.panel.activePath)},inCheckedPath:function(){var e=this;return!!this.config.checkStrictly&&this.panel.checkedNodePaths.some((function(t){return e.isInPath(t)}))},value:function(){return this.node.getValueByOption()}},methods:{handleExpand:function(){var e=this,t=this.panel,n=this.node,i=this.isDisabled,r=this.config,o=r.multiple,a=r.checkStrictly;!a&&i||n.loading||(r.lazy&&!n.loaded?t.lazyLoad(n,(function(){var t=e.isLeaf;if(t||e.handleExpand(),o){var i=!!t&&n.checked;e.handleMultiCheckChange(i)}})):t.handleExpand(n))},handleCheckChange:function(){var e=this.panel,t=this.value,n=this.node;e.handleCheckChange(t),e.handleExpand(n)},handleMultiCheckChange:function(e){this.node.doCheck(e),this.panel.calculateMultiCheckedValue()},isInPath:function(e){var t=this.node,n=e[t.level-1]||{};return n.uid===t.uid},renderPrefix:function(e){var t=this.isLeaf,n=this.isChecked,i=this.config,r=i.checkStrictly,o=i.multiple;return o?this.renderCheckbox(e):r?this.renderRadio(e):t&&n?this.renderCheckIcon(e):null},renderPostfix:function(e){var t=this.node,n=this.isLeaf;return t.loading?this.renderLoadingIcon(e):n?null:this.renderExpandIcon(e)},renderCheckbox:function(e){var t=this.node,n=this.config,i=this.isDisabled,r={on:{change:this.handleMultiCheckChange},nativeOn:{}};return n.checkStrictly&&(r.nativeOn.click=gv),e("el-checkbox",Ju()([{attrs:{value:t.checked,indeterminate:t.indeterminate,disabled:i}},r]))},renderRadio:function(e){var t=this.checkedValue,n=this.value,i=this.isDisabled;return Object(y["isEqual"])(n,t)&&(n=t),e("el-radio",{attrs:{value:t,label:n,disabled:i},on:{change:this.handleCheckChange},nativeOn:{click:gv}},[e("span")])},renderCheckIcon:function(e){return e("i",{class:"el-icon-check el-cascader-node__prefix"})},renderLoadingIcon:function(e){return e("i",{class:"el-icon-loading el-cascader-node__postfix"})},renderExpandIcon:function(e){return e("i",{class:"el-icon-arrow-right el-cascader-node__postfix"})},renderContent:function(e){var t=this.panel,n=this.node,i=t.renderLabelFn,r=i?i({node:n,data:n.data}):null;return e("span",{class:"el-cascader-node__label"},[r||n.label])}},render:function(e){var t=this,n=this.inActivePath,i=this.inCheckedPath,r=this.isChecked,o=this.isLeaf,a=this.isDisabled,s=this.config,l=this.nodeId,c=s.expandTrigger,u=s.checkStrictly,d=s.multiple,h=!u&&a,f={on:{}};return"click"===c?f.on.click=this.handleExpand:(f.on.mouseenter=function(e){t.handleExpand(),t.$emit("expand",e)},f.on.focus=function(e){t.handleExpand(),t.$emit("expand",e)}),!o||a||u||d||(f.on.click=this.handleCheckChange),e("li",Ju()([{attrs:{role:"menuitem",id:l,"aria-expanded":n,tabindex:h?null:-1},class:{"el-cascader-node":!0,"is-selectable":u,"in-active-path":n,"in-checked-path":i,"is-active":r,"is-disabled":h}},f]),[this.renderPrefix(e),this.renderContent(e),this.renderPostfix(e)])}},bv=vv,yv=l(bv,hv,fv,!1,null,null,null);yv.options.__file="packages/cascader-panel/src/cascader-node.vue";var wv,xv,_v=yv.exports,kv={name:"ElCascaderMenu",mixins:[b.a],inject:["panel"],components:{ElScrollbar:U.a,CascaderNode:_v},props:{nodes:{type:Array,required:!0},index:Number},data:function(){return{activeNode:null,hoverTimer:null,id:Object(y["generateId"])()}},computed:{isEmpty:function(){return!this.nodes.length},menuId:function(){return"cascader-menu-"+this.id+"-"+this.index}},methods:{handleExpand:function(e){this.activeNode=e.target},handleMouseMove:function(e){var t=this.activeNode,n=this.hoverTimer,i=this.$refs.hoverZone;if(t&&i)if(t.contains(e.target)){clearTimeout(n);var r=this.$el.getBoundingClientRect(),o=r.left,a=e.clientX-o,s=this.$el,l=s.offsetWidth,c=s.offsetHeight,u=t.offsetTop,d=u+t.offsetHeight;i.innerHTML='\n          <path style="pointer-events: auto;" fill="transparent" d="M'+a+" "+u+" L"+l+" 0 V"+u+' Z" />\n          <path style="pointer-events: auto;" fill="transparent" d="M'+a+" "+d+" L"+l+" "+c+" V"+d+' Z" />\n        '}else n||(this.hoverTimer=setTimeout(this.clearHoverZone,this.panel.config.hoverThreshold))},clearHoverZone:function(){var e=this.$refs.hoverZone;e&&(e.innerHTML="")},renderEmptyText:function(e){return e("div",{class:"el-cascader-menu__empty-text"},[this.t("el.cascader.noData")])},renderNodeList:function(e){var t=this.menuId,n=this.panel.isHoverMenu,i={on:{}};n&&(i.on.expand=this.handleExpand);var r=this.nodes.map((function(n,r){var o=n.hasChildren;return e("cascader-node",Ju()([{key:n.uid,attrs:{node:n,"node-id":t+"-"+r,"aria-haspopup":o,"aria-owns":o?t:null}},i]))}));return[].concat(r,[n?e("svg",{ref:"hoverZone",class:"el-cascader-menu__hover-zone"}):null])}},render:function(e){var t=this.isEmpty,n=this.menuId,i={nativeOn:{}};return this.panel.isHoverMenu&&(i.nativeOn.mousemove=this.handleMouseMove),e("el-scrollbar",Ju()([{attrs:{tag:"ul",role:"menu",id:n,"wrap-class":"el-cascader-menu__wrap","view-class":{"el-cascader-menu__list":!0,"is-empty":t}},class:"el-cascader-menu"},i]),[t?this.renderEmptyText(e):this.renderNodeList(e)])}},Cv=kv,Sv=l(Cv,wv,xv,!1,null,null,null);Sv.options.__file="packages/cascader-panel/src/cascader-menu.vue";var Ov=Sv.exports,Tv=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();function Ev(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var Dv=0,Mv=function(){function e(t,n,i){Ev(this,e),this.data=t,this.config=n,this.parent=i||null,this.level=this.parent?this.parent.level+1:1,this.uid=Dv++,this.initState(),this.initChildren()}return e.prototype.initState=function(){var e=this.config,t=e.value,n=e.label;this.value=this.data[t],this.label=this.data[n],this.pathNodes=this.calculatePathNodes(),this.path=this.pathNodes.map((function(e){return e.value})),this.pathLabels=this.pathNodes.map((function(e){return e.label})),this.loading=!1,this.loaded=!1},e.prototype.initChildren=function(){var t=this,n=this.config,i=n.children,r=this.data[i];this.hasChildren=Array.isArray(r),this.children=(r||[]).map((function(i){return new e(i,n,t)}))},e.prototype.calculatePathNodes=function(){var e=[this],t=this.parent;while(t)e.unshift(t),t=t.parent;return e},e.prototype.getPath=function(){return this.path},e.prototype.getValue=function(){return this.value},e.prototype.getValueByOption=function(){return this.config.emitPath?this.getPath():this.getValue()},e.prototype.getText=function(e,t){return e?this.pathLabels.join(t):this.label},e.prototype.isSameNode=function(e){var t=this.getValueByOption();return this.config.multiple&&Array.isArray(e)?e.some((function(e){return Object(y["isEqual"])(e,t)})):Object(y["isEqual"])(e,t)},e.prototype.broadcast=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];var r="onParent"+Object(y["capitalize"])(e);this.children.forEach((function(t){t&&(t.broadcast.apply(t,[e].concat(n)),t[r]&&t[r].apply(t,n))}))},e.prototype.emit=function(e){var t=this.parent,n="onChild"+Object(y["capitalize"])(e);if(t){for(var i=arguments.length,r=Array(i>1?i-1:0),o=1;o<i;o++)r[o-1]=arguments[o];t[n]&&t[n].apply(t,r),t.emit.apply(t,[e].concat(r))}},e.prototype.onParentCheck=function(e){this.isDisabled||this.setCheckState(e)},e.prototype.onChildCheck=function(){var e=this.children,t=e.filter((function(e){return!e.isDisabled})),n=!!t.length&&t.every((function(e){return e.checked}));this.setCheckState(n)},e.prototype.setCheckState=function(e){var t=this.children.length,n=this.children.reduce((function(e,t){var n=t.checked?1:t.indeterminate?.5:0;return e+n}),0);this.checked=e,this.indeterminate=n!==t&&n>0},e.prototype.syncCheckState=function(e){var t=this.getValueByOption(),n=this.isSameNode(e,t);this.doCheck(n)},e.prototype.doCheck=function(e){this.checked!==e&&(this.config.checkStrictly?this.checked=e:(this.broadcast("check",e),this.setCheckState(e),this.emit("check")))},Tv(e,[{key:"isDisabled",get:function(){var e=this.data,t=this.parent,n=this.config,i=n.disabled,r=n.checkStrictly;return e[i]||!r&&t&&t.isDisabled}},{key:"isLeaf",get:function(){var e=this.data,t=this.loaded,n=this.hasChildren,i=this.children,r=this.config,o=r.lazy,a=r.leaf;if(o){var s=Object(Tt["isDef"])(e[a])?e[a]:!!t&&!i.length;return this.hasChildren=!s,s}return!n}}]),e}(),Av=Mv;function Nv(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var Iv=function e(t,n){return t.reduce((function(t,i){return i.isLeaf?t.push(i):(!n&&t.push(i),t=t.concat(e(i.children,n))),t}),[])},Lv=function(){function e(t,n){Nv(this,e),this.config=n,this.initNodes(t)}return e.prototype.initNodes=function(e){var t=this;e=Object(y["coerceTruthyValueToArray"])(e),this.nodes=e.map((function(e){return new Av(e,t.config)})),this.flattedNodes=this.getFlattedNodes(!1,!1),this.leafNodes=this.getFlattedNodes(!0,!1)},e.prototype.appendNode=function(e,t){var n=new Av(e,this.config,t),i=t?t.children:this.nodes;i.push(n)},e.prototype.appendNodes=function(e,t){var n=this;e=Object(y["coerceTruthyValueToArray"])(e),e.forEach((function(e){return n.appendNode(e,t)}))},e.prototype.getNodes=function(){return this.nodes},e.prototype.getFlattedNodes=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=e?this.leafNodes:this.flattedNodes;return t?n:Iv(this.nodes,e)},e.prototype.getNodeByValue=function(e){if(e){var t=this.getFlattedNodes(!1,!this.config.lazy).filter((function(t){return Object(y["valueEquals"])(t.path,e)||t.value===e}));return t&&t.length?t[0]:null}return null},e}(),Pv=Lv,$v=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},Fv=xf.a.keys,jv={expandTrigger:"click",multiple:!1,checkStrictly:!1,emitPath:!0,lazy:!1,lazyLoad:y["noop"],value:"value",label:"label",children:"children",leaf:"leaf",disabled:"disabled",hoverThreshold:500},zv=function(e){return!e.getAttribute("aria-owns")},Bv=function(e,t){var n=e.parentNode;if(n){var i=n.querySelectorAll('.el-cascader-node[tabindex="-1"]'),r=Array.prototype.indexOf.call(i,e);return i[r+t]||null}return null},Rv=function(e,t){if(e){var n=e.id.split("-");return Number(n[n.length-2])}},Vv=function(e){e&&(e.focus(),!zv(e)&&e.click())},Hv=function(e){if(e){var t=e.querySelector("input");t?t.click():zv(e)&&e.click()}},Wv={name:"ElCascaderPanel",components:{CascaderMenu:Ov},props:{value:{},options:Array,props:Object,border:{type:Boolean,default:!0},renderLabel:Function},provide:function(){return{panel:this}},data:function(){return{checkedValue:null,checkedNodePaths:[],store:[],menus:[],activePath:[],loadCount:0}},computed:{config:function(){return Ot()($v({},jv),this.props||{})},multiple:function(){return this.config.multiple},checkStrictly:function(){return this.config.checkStrictly},leafOnly:function(){return!this.checkStrictly},isHoverMenu:function(){return"hover"===this.config.expandTrigger},renderLabelFn:function(){return this.renderLabel||this.$scopedSlots.default}},watch:{options:{handler:function(){this.initStore()},immediate:!0,deep:!0},value:function(){this.syncCheckedValue(),this.checkStrictly&&this.calculateCheckedNodePaths()},checkedValue:function(e){Object(y["isEqual"])(e,this.value)||(this.checkStrictly&&this.calculateCheckedNodePaths(),this.$emit("input",e),this.$emit("change",e))}},mounted:function(){Object(y["isEmpty"])(this.value)||this.syncCheckedValue()},methods:{initStore:function(){var e=this.config,t=this.options;e.lazy&&Object(y["isEmpty"])(t)?this.lazyLoad():(this.store=new Pv(t,e),this.menus=[this.store.getNodes()],this.syncMenuState())},syncCheckedValue:function(){var e=this.value,t=this.checkedValue;Object(y["isEqual"])(e,t)||(this.checkedValue=e,this.syncMenuState())},syncMenuState:function(){var e=this.multiple,t=this.checkStrictly;this.syncActivePath(),e&&this.syncMultiCheckState(),t&&this.calculateCheckedNodePaths(),this.$nextTick(this.scrollIntoView)},syncMultiCheckState:function(){var e=this,t=this.getFlattedNodes(this.leafOnly);t.forEach((function(t){t.syncCheckState(e.checkedValue)}))},syncActivePath:function(){var e=this,t=this.store,n=this.multiple,i=this.activePath,r=this.checkedValue;if(Object(y["isEmpty"])(i))if(Object(y["isEmpty"])(r))this.activePath=[],this.menus=[t.getNodes()];else{var o=n?r[0]:r,a=this.getNodeByValue(o)||{},s=(a.pathNodes||[]).slice(0,-1);this.expandNodes(s)}else{var l=i.map((function(t){return e.getNodeByValue(t.getValue())}));this.expandNodes(l)}},expandNodes:function(e){var t=this;e.forEach((function(e){return t.handleExpand(e,!0)}))},calculateCheckedNodePaths:function(){var e=this,t=this.checkedValue,n=this.multiple,i=n?Object(y["coerceTruthyValueToArray"])(t):[t];this.checkedNodePaths=i.map((function(t){var n=e.getNodeByValue(t);return n?n.pathNodes:[]}))},handleKeyDown:function(e){var t=e.target,n=e.keyCode;switch(n){case Fv.up:var i=Bv(t,-1);Vv(i);break;case Fv.down:var r=Bv(t,1);Vv(r);break;case Fv.left:var o=this.$refs.menu[Rv(t)-1];if(o){var a=o.$el.querySelector('.el-cascader-node[aria-expanded="true"]');Vv(a)}break;case Fv.right:var s=this.$refs.menu[Rv(t)+1];if(s){var l=s.$el.querySelector('.el-cascader-node[tabindex="-1"]');Vv(l)}break;case Fv.enter:Hv(t);break;case Fv.esc:case Fv.tab:this.$emit("close");break;default:return}},handleExpand:function(e,t){var n=this.activePath,i=e.level,r=n.slice(0,i-1),o=this.menus.slice(0,i);if(e.isLeaf||(r.push(e),o.push(e.children)),this.activePath=r,this.menus=o,!t){var a=r.map((function(e){return e.getValue()})),s=n.map((function(e){return e.getValue()}));Object(y["valueEquals"])(a,s)||(this.$emit("active-item-change",a),this.$emit("expand-change",a))}},handleCheckChange:function(e){this.checkedValue=e},lazyLoad:function(e,t){var n=this,i=this.config;e||(e=e||{root:!0,level:0},this.store=new Pv([],i),this.menus=[this.store.getNodes()]),e.loading=!0;var r=function(i){var r=e.root?null:e;if(i&&i.length&&n.store.appendNodes(i,r),e.loading=!1,e.loaded=!0,Array.isArray(n.checkedValue)){var o=n.checkedValue[n.loadCount++],a=n.config.value,s=n.config.leaf;if(Array.isArray(i)&&i.filter((function(e){return e[a]===o})).length>0){var l=n.store.getNodeByValue(o);l.data[s]||n.lazyLoad(l,(function(){n.handleExpand(l)})),n.loadCount===n.checkedValue.length&&n.$parent.computePresentText()}}t&&t(i)};i.lazyLoad(e,r)},calculateMultiCheckedValue:function(){this.checkedValue=this.getCheckedNodes(this.leafOnly).map((function(e){return e.getValueByOption()}))},scrollIntoView:function(){if(!this.$isServer){var e=this.$refs.menu||[];e.forEach((function(e){var t=e.$el;if(t){var n=t.querySelector(".el-scrollbar__wrap"),i=t.querySelector(".el-cascader-node.is-active")||t.querySelector(".el-cascader-node.in-active-path");oi()(n,i)}}))}},getNodeByValue:function(e){return this.store.getNodeByValue(e)},getFlattedNodes:function(e){var t=!this.config.lazy;return this.store.getFlattedNodes(e,t)},getCheckedNodes:function(e){var t=this.checkedValue,n=this.multiple;if(n){var i=this.getFlattedNodes(e);return i.filter((function(e){return e.checked}))}return Object(y["isEmpty"])(t)?[]:[this.getNodeByValue(t)]},clearCheckedNodes:function(){var e=this.config,t=this.leafOnly,n=e.multiple,i=e.emitPath;n?(this.getCheckedNodes(t).filter((function(e){return!e.isDisabled})).forEach((function(e){return e.doCheck(!1)})),this.calculateMultiCheckedValue()):this.checkedValue=i?[]:null}}},qv=Wv,Uv=l(qv,uv,dv,!1,null,null,null);Uv.options.__file="packages/cascader-panel/src/cascader-panel.vue";var Kv=Uv.exports;Kv.install=function(e){e.component(Kv.name,Kv)};var Gv,Yv,Xv=Kv,Zv={name:"ElAvatar",props:{size:{type:[Number,String],validator:function(e){return"string"===typeof e?["large","medium","small"].includes(e):"number"===typeof e}},shape:{type:String,default:"circle",validator:function(e){return["circle","square"].includes(e)}},icon:String,src:String,alt:String,srcSet:String,error:Function,fit:{type:String,default:"cover"}},data:function(){return{isImageExist:!0}},computed:{avatarClass:function(){var e=this.size,t=this.icon,n=this.shape,i=["el-avatar"];return e&&"string"===typeof e&&i.push("el-avatar--"+e),t&&i.push("el-avatar--icon"),n&&i.push("el-avatar--"+n),i.join(" ")}},methods:{handleError:function(){var e=this.error,t=e?e():void 0;!1!==t&&(this.isImageExist=!1)},renderAvatar:function(){var e=this.$createElement,t=this.icon,n=this.src,i=this.alt,r=this.isImageExist,o=this.srcSet,a=this.fit;return r&&n?e("img",{attrs:{src:n,alt:i,srcSet:o},on:{error:this.handleError},style:{"object-fit":a}}):t?e("i",{class:t}):this.$slots.default}},render:function(){var e=arguments[0],t=this.avatarClass,n=this.size,i="number"===typeof n?{height:n+"px",width:n+"px",lineHeight:n+"px"}:{};return e("span",{class:t,style:i},[this.renderAvatar()])}},Qv=Zv,Jv=l(Qv,Gv,Yv,!1,null,null,null);Jv.options.__file="packages/avatar/src/main.vue";var eb=Jv.exports;eb.install=function(e){e.component(eb.name,eb)};var tb=eb,nb=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-drawer-fade"},on:{"after-enter":e.afterEnter,"after-leave":e.afterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-drawer__wrapper",attrs:{tabindex:"-1"}},[n("div",{staticClass:"el-drawer__container",class:e.visible&&"el-drawer__open",attrs:{role:"document",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[n("div",{ref:"drawer",staticClass:"el-drawer",class:[e.direction,e.customClass],style:e.isHorizontal?"width: "+e.size:"height: "+e.size,attrs:{"aria-modal":"true","aria-labelledby":"el-drawer__title","aria-label":e.title,role:"dialog",tabindex:"-1"}},[e.withHeader?n("header",{staticClass:"el-drawer__header",attrs:{id:"el-drawer__title"}},[e._t("title",[n("span",{attrs:{role:"heading",tabindex:"0",title:e.title}},[e._v(e._s(e.title))])]),e.showClose?n("button",{staticClass:"el-drawer__close-btn",attrs:{"aria-label":"close "+(e.title||"drawer"),type:"button"},on:{click:e.closeDrawer}},[n("i",{staticClass:"el-dialog__close el-icon el-icon-close"})]):e._e()],2):e._e(),e.rendered?n("section",{staticClass:"el-drawer__body"},[e._t("default")],2):e._e()])])])])},ib=[];nb._withStripped=!0;var rb={name:"ElDrawer",mixins:[S.a,D.a],props:{appendToBody:{type:Boolean,default:!1},beforeClose:{type:Function},customClass:{type:String,default:""},closeOnPressEscape:{type:Boolean,default:!0},destroyOnClose:{type:Boolean,default:!1},modal:{type:Boolean,default:!0},direction:{type:String,default:"rtl",validator:function(e){return-1!==["ltr","rtl","ttb","btt"].indexOf(e)}},modalAppendToBody:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},size:{type:String,default:"30%"},title:{type:String,default:""},visible:{type:Boolean},wrapperClosable:{type:Boolean,default:!0},withHeader:{type:Boolean,default:!0}},computed:{isHorizontal:function(){return"rtl"===this.direction||"ltr"===this.direction}},data:function(){return{closed:!1,prevActiveElement:null}},watch:{visible:function(e){var t=this;e?(this.closed=!1,this.$emit("open"),this.appendToBody&&document.body.appendChild(this.$el),this.prevActiveElement=document.activeElement,this.$nextTick((function(){xf.a.focusFirstDescendant(t.$refs.drawer)}))):(this.closed||this.$emit("close"),this.$nextTick((function(){t.prevActiveElement&&t.prevActiveElement.focus()})))}},methods:{afterEnter:function(){this.$emit("opened")},afterLeave:function(){this.$emit("closed")},hide:function(e){!1!==e&&(this.$emit("update:visible",!1),this.$emit("close"),!0===this.destroyOnClose&&(this.rendered=!1),this.closed=!0)},handleWrapperClick:function(){this.wrapperClosable&&this.closeDrawer()},closeDrawer:function(){"function"===typeof this.beforeClose?this.beforeClose(this.hide):this.hide()},handleClose:function(){this.closeDrawer()}},mounted:function(){this.visible&&(this.rendered=!0,this.open())},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},ob=rb,ab=l(ob,nb,ib,!1,null,null,null);ab.options.__file="packages/drawer/src/main.vue";var sb=ab.exports;sb.install=function(e){e.component(sb.name,sb)};var lb=sb,cb=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-popover",e._b({attrs:{trigger:"click"},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},"el-popover",e.$attrs,!1),[n("div",{staticClass:"el-popconfirm"},[n("p",{staticClass:"el-popconfirm__main"},[e.hideIcon?e._e():n("i",{staticClass:"el-popconfirm__icon",class:e.icon,style:{color:e.iconColor}}),e._v("\n      "+e._s(e.title)+"\n    ")]),n("div",{staticClass:"el-popconfirm__action"},[n("el-button",{attrs:{size:"mini",type:e.cancelButtonType},on:{click:e.cancel}},[e._v("\n        "+e._s(e.cancelButtonText)+"\n      ")]),n("el-button",{attrs:{size:"mini",type:e.confirmButtonType},on:{click:e.confirm}},[e._v("\n        "+e._s(e.confirmButtonText)+"\n      ")])],1)]),e._t("reference",null,{slot:"reference"})],2)},ub=[];cb._withStripped=!0;var db=n(44),hb=n.n(db),fb={name:"ElPopconfirm",props:{title:{type:String},confirmButtonText:{type:String,default:Object(ni["t"])("el.popconfirm.confirmButtonText")},cancelButtonText:{type:String,default:Object(ni["t"])("el.popconfirm.cancelButtonText")},confirmButtonType:{type:String,default:"primary"},cancelButtonType:{type:String,default:"text"},icon:{type:String,default:"el-icon-question"},iconColor:{type:String,default:"#f90"},hideIcon:{type:Boolean,default:!1}},components:{ElPopover:hb.a,ElButton:se.a},data:function(){return{visible:!1}},methods:{confirm:function(){this.visible=!1,this.$emit("onConfirm")},cancel:function(){this.visible=!1,this.$emit("onCancel")}}},pb=fb,mb=l(pb,cb,ub,!1,null,null,null);mb.options.__file="packages/popconfirm/src/main.vue";var gb=mb.exports;gb.install=function(e){e.component(gb.name,gb)};var vb=gb,bb=[x,L,oe,pe,xe,Ee,Ue,tt,ut,vt,Nt,Bt,Kt,tn,cn,gn,kn,Mn,Fn,di,hi,yi,Oi,Ii,Xr,ro,Na,Wa,is,hs,ps,Ws,Zs,rl,yl,Bl,Yl,ec,Dc,Fc,fu,ju,Bu,Hu,_d,Dd,$d,ih,uh,bh,Sh,Nh,Rh,Uh,ef,lf,mf,Mf,Mp,Hp,Xp,im,um,vm,Om,Am,jm,qm,Qm,vg,Pg,Wg,cv,Xv,tb,lb,vb,Ge.a],yb=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};ii.a.use(t.locale),ii.a.i18n(t.i18n),bb.forEach((function(t){e.component(t.name,t)})),e.use(nv),e.use(Au.directive),e.prototype.$ELEMENT={size:t.size||"",zIndex:t.zIndex||2e3},e.prototype.$loading=Au.service,e.prototype.$msgbox=Fs,e.prototype.$alert=Fs.alert,e.prototype.$confirm=Fs.confirm,e.prototype.$prompt=Fs.prompt,e.prototype.$notify=Zc,e.prototype.$message=Xd};"undefined"!==typeof window&&window.Vue&&yb(window.Vue),t["default"]={version:"2.13.2",locale:ii.a.use,i18n:ii.a.i18n,install:yb,CollapseTransition:Ge.a,Loading:Au,Pagination:x,Dialog:L,Autocomplete:oe,Dropdown:pe,DropdownMenu:xe,DropdownItem:Ee,Menu:Ue,Submenu:tt,MenuItem:ut,MenuItemGroup:vt,Input:Nt,InputNumber:Bt,Radio:Kt,RadioGroup:tn,RadioButton:cn,Checkbox:gn,CheckboxButton:kn,CheckboxGroup:Mn,Switch:Fn,Select:di,Option:hi,OptionGroup:yi,Button:Oi,ButtonGroup:Ii,Table:Xr,TableColumn:ro,DatePicker:Na,TimeSelect:Wa,TimePicker:is,Popover:hs,Tooltip:ps,MessageBox:Fs,Breadcrumb:Ws,BreadcrumbItem:Zs,Form:rl,FormItem:yl,Tabs:Bl,TabPane:Yl,Tag:ec,Tree:Dc,Alert:Fc,Notification:Zc,Slider:fu,Icon:ju,Row:Bu,Col:Hu,Upload:_d,Progress:Dd,Spinner:$d,Message:Xd,Badge:ih,Card:uh,Rate:bh,Steps:Sh,Step:Nh,Carousel:Rh,Scrollbar:Uh,CarouselItem:ef,Collapse:lf,CollapseItem:mf,Cascader:Mf,ColorPicker:Mp,Transfer:Hp,Container:Xp,Header:im,Aside:um,Main:vm,Footer:Om,Timeline:Am,TimelineItem:jm,Link:qm,Divider:Qm,Image:vg,Calendar:Pg,Backtop:Wg,InfiniteScroll:nv,PageHeader:cv,CascaderPanel:Xv,Avatar:tb,Drawer:lb,Popconfirm:vb}}])["default"]},"5cc6":function(e,t,n){var i=n("74e8");i("Uint8",(function(e){return function(t,n,i){return e(this,t,n,i)}}))},"5f96":function(e,t,n){"use strict";var i=n("ebb5"),r=i.aTypedArray,o=i.exportTypedArrayMethod,a=[].join;o("join",(function(e){return a.apply(r(this),arguments)}))},"5fb2":function(e,t,n){"use strict";var i=2147483647,r=36,o=1,a=26,s=38,l=700,c=72,u=128,d="-",h=/[^\0-\u007E]/,f=/[.\u3002\uFF0E\uFF61]/g,p="Overflow: input needs wider integers to process",m=r-o,g=Math.floor,v=String.fromCharCode,b=function(e){var t=[],n=0,i=e.length;while(n<i){var r=e.charCodeAt(n++);if(r>=55296&&r<=56319&&n<i){var o=e.charCodeAt(n++);56320==(64512&o)?t.push(((1023&r)<<10)+(1023&o)+65536):(t.push(r),n--)}else t.push(r)}return t},y=function(e){return e+22+75*(e<26)},w=function(e,t,n){var i=0;for(e=n?g(e/l):e>>1,e+=g(e/t);e>m*a>>1;i+=r)e=g(e/m);return g(i+(m+1)*e/(e+s))},x=function(e){var t=[];e=b(e);var n,s,l=e.length,h=u,f=0,m=c;for(n=0;n<e.length;n++)s=e[n],s<128&&t.push(v(s));var x=t.length,_=x;x&&t.push(d);while(_<l){var k=i;for(n=0;n<e.length;n++)s=e[n],s>=h&&s<k&&(k=s);var C=_+1;if(k-h>g((i-f)/C))throw RangeError(p);for(f+=(k-h)*C,h=k,n=0;n<e.length;n++){if(s=e[n],s<h&&++f>i)throw RangeError(p);if(s==h){for(var S=f,O=r;;O+=r){var T=O<=m?o:O>=m+a?a:O-m;if(S<T)break;var E=S-T,D=r-T;t.push(v(y(T+E%D))),S=g(E/D)}t.push(v(y(S))),m=w(f,C,_==x),f=0,++_}}++f,++h}return t.join("")};e.exports=function(e){var t,n,i=[],r=e.toLowerCase().replace(f,".").split(".");for(t=0;t<r.length;t++)n=r[t],i.push(h.test(n)?"xn--"+x(n):n);return i.join(".")}},"606f":function(e,t,n){"use strict";var i=n("87d4"),r=n.n(i);r.a},"60bd":function(e,t,n){"use strict";var i=n("da84"),r=n("ebb5"),o=n("e260"),a=n("b622"),s=a("iterator"),l=i.Uint8Array,c=o.values,u=o.keys,d=o.entries,h=r.aTypedArray,f=r.exportTypedArrayMethod,p=l&&l.prototype[s],m=!!p&&("values"==p.name||void 0==p.name),g=function(){return c.call(h(this))};f("entries",(function(){return d.call(h(this))})),f("keys",(function(){return u.call(h(this))})),f("values",g,!m),f(s,g,!m)},"60cf":function(e,t,n){},"60da":function(e,t,n){"use strict";var i=n("83ab"),r=n("d039"),o=n("df75"),a=n("7418"),s=n("d1e7"),l=n("7b0b"),c=n("44ad"),u=Object.assign,d=Object.defineProperty;e.exports=!u||r((function(){if(i&&1!==u({b:1},u(d({},"a",{enumerable:!0,get:function(){d(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!=u({},e)[n]||o(u({},t)).join("")!=r}))?function(e,t){var n=l(e),r=arguments.length,u=1,d=a.f,h=s.f;while(r>u){var f,p=c(arguments[u++]),m=d?o(p).concat(d(p)):o(p),g=m.length,v=0;while(g>v)f=m[v++],i&&!h.call(p,f)||(n[f]=p[f])}return n}:u},6167:function(e,t,n){"use strict";var i,r;n("a4d3"),n("e01a"),n("d28b"),n("4de4"),n("4160"),n("c975"),n("e260"),n("d81d"),n("fb6a"),n("cca6"),n("e439"),n("b64b"),n("d3b7"),n("ac1f"),n("25f0"),n("3ca3"),n("5319"),n("1276"),n("159b"),n("ddb0");var o=n("7037");"function"===typeof Symbol&&o(Symbol.iterator),function(o,a){i=a,r="function"===typeof i?i.call(t,n,t,e):i,void 0===r||(e.exports=r)}(0,(function(){var e=window,t={placement:"bottom",gpuAcceleration:!0,offset:0,boundariesElement:"viewport",boundariesPadding:5,preventOverflowOrder:["left","right","top","bottom"],flipBehavior:"flip",arrowElement:"[x-arrow]",arrowOffset:0,modifiers:["shift","offset","preventOverflow","keepTogether","arrow","flip","applyStyle"],modifiersIgnored:[],forceAbsolute:!1};function n(e,n,i){this._reference=e.jquery?e[0]:e,this.state={};var r="undefined"===typeof n||null===n,o=n&&"[object Object]"===Object.prototype.toString.call(n);return this._popper=r||o?this.parse(o?n:{}):n.jquery?n[0]:n,this._options=Object.assign({},t,i),this._options.modifiers=this._options.modifiers.map(function(e){if(-1===this._options.modifiersIgnored.indexOf(e))return"applyStyle"===e&&this._popper.setAttribute("x-placement",this._options.placement),this.modifiers[e]||e}.bind(this)),this.state.position=this._getPosition(this._popper,this._reference),d(this._popper,{position:this.state.position,top:0}),this.update(),this._setupEventListeners(),this}function i(t){var n=t.style.display,i=t.style.visibility;t.style.display="block",t.style.visibility="hidden",t.offsetWidth;var r=e.getComputedStyle(t),o=parseFloat(r.marginTop)+parseFloat(r.marginBottom),a=parseFloat(r.marginLeft)+parseFloat(r.marginRight),s={width:t.offsetWidth+a,height:t.offsetHeight+o};return t.style.display=n,t.style.visibility=i,s}function r(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))}function o(e){var t=Object.assign({},e);return t.right=t.left+t.width,t.bottom=t.top+t.height,t}function a(e,t){var n,i=0;for(n in e){if(e[n]===t)return i;i++}return null}function s(t,n){var i=e.getComputedStyle(t,null);return i[n]}function l(t){var n=t.offsetParent;return n!==e.document.body&&n?n:e.document.documentElement}function c(t){var n=t.parentNode;return n?n===e.document?e.document.body.scrollTop||e.document.body.scrollLeft?e.document.body:e.document.documentElement:-1!==["scroll","auto"].indexOf(s(n,"overflow"))||-1!==["scroll","auto"].indexOf(s(n,"overflow-x"))||-1!==["scroll","auto"].indexOf(s(n,"overflow-y"))?n:c(t.parentNode):t}function u(t){return t!==e.document.body&&("fixed"===s(t,"position")||(t.parentNode?u(t.parentNode):t))}function d(e,t){function n(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}Object.keys(t).forEach((function(i){var r="";-1!==["width","height","top","right","bottom","left"].indexOf(i)&&n(t[i])&&(r="px"),e.style[i]=t[i]+r}))}function h(e){var t={};return e&&"[object Function]"===t.toString.call(e)}function f(e){var t={width:e.offsetWidth,height:e.offsetHeight,left:e.offsetLeft,top:e.offsetTop};return t.right=t.left+t.width,t.bottom=t.top+t.height,t}function p(e){var t=e.getBoundingClientRect(),n=-1!=navigator.userAgent.indexOf("MSIE"),i=n&&"HTML"===e.tagName?-e.scrollTop:t.top;return{left:t.left,top:i,right:t.right,bottom:t.bottom,width:t.right-t.left,height:t.bottom-i}}function m(e,t,n){var i=p(e),r=p(t);if(n){var o=c(t);r.top+=o.scrollTop,r.bottom+=o.scrollTop,r.left+=o.scrollLeft,r.right+=o.scrollLeft}var a={top:i.top-r.top,left:i.left-r.left,bottom:i.top-r.top+i.height,right:i.left-r.left+i.width,width:i.width,height:i.height};return a}function g(t){for(var n=["","ms","webkit","moz","o"],i=0;i<n.length;i++){var r=n[i]?n[i]+t.charAt(0).toUpperCase()+t.slice(1):t;if("undefined"!==typeof e.document.body.style[r])return r}return null}return n.prototype.destroy=function(){return this._popper.removeAttribute("x-placement"),this._popper.style.left="",this._popper.style.position="",this._popper.style.top="",this._popper.style[g("transform")]="",this._removeEventListeners(),this._options.removeOnDestroy&&this._popper.remove(),this},n.prototype.update=function(){var e={instance:this,styles:{}};e.placement=this._options.placement,e._originalPlacement=this._options.placement,e.offsets=this._getOffsets(this._popper,this._reference,e.placement),e.boundaries=this._getBoundaries(e,this._options.boundariesPadding,this._options.boundariesElement),e=this.runModifiers(e,this._options.modifiers),"function"===typeof this.state.updateCallback&&this.state.updateCallback(e)},n.prototype.onCreate=function(e){return e(this),this},n.prototype.onUpdate=function(e){return this.state.updateCallback=e,this},n.prototype.parse=function(t){var n={tagName:"div",classNames:["popper"],attributes:[],parent:e.document.body,content:"",contentType:"text",arrowTagName:"div",arrowClassNames:["popper__arrow"],arrowAttributes:["x-arrow"]};t=Object.assign({},n,t);var i=e.document,r=i.createElement(t.tagName);if(s(r,t.classNames),l(r,t.attributes),"node"===t.contentType?r.appendChild(t.content.jquery?t.content[0]:t.content):"html"===t.contentType?r.innerHTML=t.content:r.textContent=t.content,t.arrowTagName){var o=i.createElement(t.arrowTagName);s(o,t.arrowClassNames),l(o,t.arrowAttributes),r.appendChild(o)}var a=t.parent.jquery?t.parent[0]:t.parent;if("string"===typeof a){if(a=i.querySelectorAll(t.parent),a.length>1&&console.warn("WARNING: the given `parent` query("+t.parent+") matched more than one element, the first one will be used"),0===a.length)throw"ERROR: the given `parent` doesn't exists!";a=a[0]}return a.length>1&&a instanceof Element===!1&&(console.warn("WARNING: you have passed as parent a list of elements, the first one will be used"),a=a[0]),a.appendChild(r),r;function s(e,t){t.forEach((function(t){e.classList.add(t)}))}function l(e,t){t.forEach((function(t){e.setAttribute(t.split(":")[0],t.split(":")[1]||"")}))}},n.prototype._getPosition=function(e,t){var n=l(t);if(this._options.forceAbsolute)return"absolute";var i=u(t,n);return i?"fixed":"absolute"},n.prototype._getOffsets=function(e,t,n){n=n.split("-")[0];var r={};r.position=this.state.position;var o="fixed"===r.position,a=m(t,l(e),o),s=i(e);return-1!==["right","left"].indexOf(n)?(r.top=a.top+a.height/2-s.height/2,r.left="left"===n?a.left-s.width:a.right):(r.left=a.left+a.width/2-s.width/2,r.top="top"===n?a.top-s.height:a.bottom),r.width=s.width,r.height=s.height,{popper:r,reference:a}},n.prototype._setupEventListeners=function(){if(this.state.updateBound=this.update.bind(this),e.addEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement){var t=c(this._reference);t!==e.document.body&&t!==e.document.documentElement||(t=e),t.addEventListener("scroll",this.state.updateBound),this.state.scrollTarget=t}},n.prototype._removeEventListeners=function(){e.removeEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement&&this.state.scrollTarget&&(this.state.scrollTarget.removeEventListener("scroll",this.state.updateBound),this.state.scrollTarget=null),this.state.updateBound=null},n.prototype._getBoundaries=function(t,n,i){var r,o,a={};if("window"===i){var s=e.document.body,u=e.document.documentElement;o=Math.max(s.scrollHeight,s.offsetHeight,u.clientHeight,u.scrollHeight,u.offsetHeight),r=Math.max(s.scrollWidth,s.offsetWidth,u.clientWidth,u.scrollWidth,u.offsetWidth),a={top:0,right:r,bottom:o,left:0}}else if("viewport"===i){var d=l(this._popper),h=c(this._popper),p=f(d),m=function(e){return e==document.body?Math.max(document.documentElement.scrollTop,document.body.scrollTop):e.scrollTop},g=function(e){return e==document.body?Math.max(document.documentElement.scrollLeft,document.body.scrollLeft):e.scrollLeft},v="fixed"===t.offsets.popper.position?0:m(h),b="fixed"===t.offsets.popper.position?0:g(h);a={top:0-(p.top-v),right:e.document.documentElement.clientWidth-(p.left-b),bottom:e.document.documentElement.clientHeight-(p.top-v),left:0-(p.left-b)}}else a=l(this._popper)===i?{top:0,left:0,right:i.clientWidth,bottom:i.clientHeight}:f(i);return a.left+=n,a.right-=n,a.top=a.top+n,a.bottom=a.bottom-n,a},n.prototype.runModifiers=function(e,t,n){var i=t.slice();return void 0!==n&&(i=this._options.modifiers.slice(0,a(this._options.modifiers,n))),i.forEach(function(t){h(t)&&(e=t.call(this,e))}.bind(this)),e},n.prototype.isModifierRequired=function(e,t){var n=a(this._options.modifiers,e);return!!this._options.modifiers.slice(0,n).filter((function(e){return e===t})).length},n.prototype.modifiers={},n.prototype.modifiers.applyStyle=function(e){var t,n={position:e.offsets.popper.position},i=Math.round(e.offsets.popper.left),r=Math.round(e.offsets.popper.top);return this._options.gpuAcceleration&&(t=g("transform"))?(n[t]="translate3d("+i+"px, "+r+"px, 0)",n.top=0,n.left=0):(n.left=i,n.top=r),Object.assign(n,e.styles),d(this._popper,n),this._popper.setAttribute("x-placement",e.placement),this.isModifierRequired(this.modifiers.applyStyle,this.modifiers.arrow)&&e.offsets.arrow&&d(e.arrowElement,e.offsets.arrow),e},n.prototype.modifiers.shift=function(e){var t=e.placement,n=t.split("-")[0],i=t.split("-")[1];if(i){var r=e.offsets.reference,a=o(e.offsets.popper),s={y:{start:{top:r.top},end:{top:r.top+r.height-a.height}},x:{start:{left:r.left},end:{left:r.left+r.width-a.width}}},l=-1!==["bottom","top"].indexOf(n)?"x":"y";e.offsets.popper=Object.assign(a,s[l][i])}return e},n.prototype.modifiers.preventOverflow=function(e){var t=this._options.preventOverflowOrder,n=o(e.offsets.popper),i={left:function(){var t=n.left;return n.left<e.boundaries.left&&(t=Math.max(n.left,e.boundaries.left)),{left:t}},right:function(){var t=n.left;return n.right>e.boundaries.right&&(t=Math.min(n.left,e.boundaries.right-n.width)),{left:t}},top:function(){var t=n.top;return n.top<e.boundaries.top&&(t=Math.max(n.top,e.boundaries.top)),{top:t}},bottom:function(){var t=n.top;return n.bottom>e.boundaries.bottom&&(t=Math.min(n.top,e.boundaries.bottom-n.height)),{top:t}}};return t.forEach((function(t){e.offsets.popper=Object.assign(n,i[t]())})),e},n.prototype.modifiers.keepTogether=function(e){var t=o(e.offsets.popper),n=e.offsets.reference,i=Math.floor;return t.right<i(n.left)&&(e.offsets.popper.left=i(n.left)-t.width),t.left>i(n.right)&&(e.offsets.popper.left=i(n.right)),t.bottom<i(n.top)&&(e.offsets.popper.top=i(n.top)-t.height),t.top>i(n.bottom)&&(e.offsets.popper.top=i(n.bottom)),e},n.prototype.modifiers.flip=function(e){if(!this.isModifierRequired(this.modifiers.flip,this.modifiers.preventOverflow))return console.warn("WARNING: preventOverflow modifier is required by flip modifier in order to work, be sure to include it before flip!"),e;if(e.flipped&&e.placement===e._originalPlacement)return e;var t=e.placement.split("-")[0],n=r(t),i=e.placement.split("-")[1]||"",a=[];return a="flip"===this._options.flipBehavior?[t,n]:this._options.flipBehavior,a.forEach(function(s,l){if(t===s&&a.length!==l+1){t=e.placement.split("-")[0],n=r(t);var c=o(e.offsets.popper),u=-1!==["right","bottom"].indexOf(t);(u&&Math.floor(e.offsets.reference[t])>Math.floor(c[n])||!u&&Math.floor(e.offsets.reference[t])<Math.floor(c[n]))&&(e.flipped=!0,e.placement=a[l+1],i&&(e.placement+="-"+i),e.offsets.popper=this._getOffsets(this._popper,this._reference,e.placement).popper,e=this.runModifiers(e,this._options.modifiers,this._flip))}}.bind(this)),e},n.prototype.modifiers.offset=function(e){var t=this._options.offset,n=e.offsets.popper;return-1!==e.placement.indexOf("left")?n.top-=t:-1!==e.placement.indexOf("right")?n.top+=t:-1!==e.placement.indexOf("top")?n.left-=t:-1!==e.placement.indexOf("bottom")&&(n.left+=t),e},n.prototype.modifiers.arrow=function(e){var t=this._options.arrowElement,n=this._options.arrowOffset;if("string"===typeof t&&(t=this._popper.querySelector(t)),!t)return e;if(!this._popper.contains(t))return console.warn("WARNING: `arrowElement` must be child of its popper element!"),e;if(!this.isModifierRequired(this.modifiers.arrow,this.modifiers.keepTogether))return console.warn("WARNING: keepTogether modifier is required by arrow modifier in order to work, be sure to include it before arrow!"),e;var r={},a=e.placement.split("-")[0],s=o(e.offsets.popper),l=e.offsets.reference,c=-1!==["left","right"].indexOf(a),u=c?"height":"width",d=c?"top":"left",h=c?"left":"top",f=c?"bottom":"right",p=i(t)[u];l[f]-p<s[d]&&(e.offsets.popper[d]-=s[d]-(l[f]-p)),l[d]+p>s[f]&&(e.offsets.popper[d]+=l[d]+p-s[f]);var m=l[d]+(n||l[u]/2-p/2),g=m-s[d];return g=Math.max(Math.min(s[u]-p-8,g),8),r[d]=g,r[h]="",e.offsets.arrow=r,e.arrowElement=t,e},Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:function(e){if(void 0===e||null===e)throw new TypeError("Cannot convert first argument to object");for(var t=Object(e),n=1;n<arguments.length;n++){var i=arguments[n];if(void 0!==i&&null!==i){i=Object(i);for(var r=Object.keys(i),o=0,a=r.length;o<a;o++){var s=r[o],l=Object.getOwnPropertyDescriptor(i,s);void 0!==l&&l.enumerable&&(t[s]=i[s])}}}return t}}),n}))},"621a":function(e,t,n){"use strict";var i=n("da84"),r=n("83ab"),o=n("a981"),a=n("9112"),s=n("e2cc"),l=n("d039"),c=n("19aa"),u=n("a691"),d=n("50c4"),h=n("0b25"),f=n("77a7"),p=n("e163"),m=n("d2bb"),g=n("241c").f,v=n("9bf2").f,b=n("81d5"),y=n("d44e"),w=n("69f3"),x=w.get,_=w.set,k="ArrayBuffer",C="DataView",S="prototype",O="Wrong length",T="Wrong index",E=i[k],D=E,M=i[C],A=M&&M[S],N=Object.prototype,I=i.RangeError,L=f.pack,P=f.unpack,$=function(e){return[255&e]},F=function(e){return[255&e,e>>8&255]},j=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},z=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},B=function(e){return L(e,23,4)},R=function(e){return L(e,52,8)},V=function(e,t){v(e[S],t,{get:function(){return x(this)[t]}})},H=function(e,t,n,i){var r=h(n),o=x(e);if(r+t>o.byteLength)throw I(T);var a=x(o.buffer).bytes,s=r+o.byteOffset,l=a.slice(s,s+t);return i?l:l.reverse()},W=function(e,t,n,i,r,o){var a=h(n),s=x(e);if(a+t>s.byteLength)throw I(T);for(var l=x(s.buffer).bytes,c=a+s.byteOffset,u=i(+r),d=0;d<t;d++)l[c+d]=u[o?d:t-d-1]};if(o){if(!l((function(){E(1)}))||!l((function(){new E(-1)}))||l((function(){return new E,new E(1.5),new E(NaN),E.name!=k}))){D=function(e){return c(this,D),new E(h(e))};for(var q,U=D[S]=E[S],K=g(E),G=0;K.length>G;)(q=K[G++])in D||a(D,q,E[q]);U.constructor=D}m&&p(A)!==N&&m(A,N);var Y=new M(new D(2)),X=A.setInt8;Y.setInt8(0,2147483648),Y.setInt8(1,2147483649),!Y.getInt8(0)&&Y.getInt8(1)||s(A,{setInt8:function(e,t){X.call(this,e,t<<24>>24)},setUint8:function(e,t){X.call(this,e,t<<24>>24)}},{unsafe:!0})}else D=function(e){c(this,D,k);var t=h(e);_(this,{bytes:b.call(new Array(t),0),byteLength:t}),r||(this.byteLength=t)},M=function(e,t,n){c(this,M,C),c(e,D,C);var i=x(e).byteLength,o=u(t);if(o<0||o>i)throw I("Wrong offset");if(n=void 0===n?i-o:d(n),o+n>i)throw I(O);_(this,{buffer:e,byteLength:n,byteOffset:o}),r||(this.buffer=e,this.byteLength=n,this.byteOffset=o)},r&&(V(D,"byteLength"),V(M,"buffer"),V(M,"byteLength"),V(M,"byteOffset")),s(M[S],{getInt8:function(e){return H(this,1,e)[0]<<24>>24},getUint8:function(e){return H(this,1,e)[0]},getInt16:function(e){var t=H(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=H(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return z(H(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return z(H(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return P(H(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return P(H(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){W(this,1,e,$,t)},setUint8:function(e,t){W(this,1,e,$,t)},setInt16:function(e,t){W(this,2,e,F,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){W(this,2,e,F,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){W(this,4,e,j,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){W(this,4,e,j,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){W(this,4,e,B,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){W(this,8,e,R,t,arguments.length>2?arguments[2]:void 0)}});y(D,k),y(M,C),e.exports={ArrayBuffer:D,DataView:M}},"62e4":function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},6325:function(e,t,n){"use strict";var i=n("43b2"),r=n.n(i);r.a},6374:function(e,t,n){n("a4d3"),n("e01a"),n("d28b"),n("e260"),n("d3b7"),n("3ca3"),n("ddb0");var i=n("6613");function r(e){if("undefined"===typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(e=i(e))){var t=0,n=function(){};return{s:n,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,o,a=!0,s=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==r["return"]||r["return"]()}finally{if(s)throw o}}}}e.exports=r},"63c1":function(e,t,n){},6438:function(e,t,n){var i=n("03d6"),r=n("9742").concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return i(e,r)}},"646a":function(e,t,n){"use strict";var i=n("391a"),r=n.n(i);r.a},6495:function(e,t,n){"use strict";var i=n("1054"),r=n.n(i);r.a},"649e":function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").some,o=i.aTypedArray,a=i.exportTypedArrayMethod;a("some",(function(e){return r(o(this),e,arguments.length>1?arguments[1]:void 0)}))},6547:function(e,t,n){var i=n("a691"),r=n("1d80"),o=function(e){return function(t,n){var o,a,s=String(r(t)),l=i(n),c=s.length;return l<0||l>=c?e?"":void 0:(o=s.charCodeAt(l),o<55296||o>56319||l+1===c||(a=s.charCodeAt(l+1))<56320||a>57343?e?s.charAt(l):o:e?s.slice(l,l+2):a-56320+(o-55296<<10)+65536)}};e.exports={codeAt:o(!1),charAt:o(!0)}},"658f":function(e,t,n){n("6858");for(var i=n("ef08"),r=n("051b"),o=n("8a0d"),a=n("cc15")("toStringTag"),s="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),l=0;l<s.length;l++){var c=s[l],u=i[c],d=u&&u.prototype;d&&!d[a]&&r(d,a,c),o[c]=o.Array}},"65f0":function(e,t,n){var i=n("861d"),r=n("e8b5"),o=n("b622"),a=o("species");e.exports=function(e,t){var n;return r(e)&&(n=e.constructor,"function"!=typeof n||n!==Array&&!r(n.prototype)?i(n)&&(n=n[a],null===n&&(n=void 0)):n=void 0),new(void 0===n?Array:n)(0===t?0:t)}},6613:function(e,t,n){n("a630"),n("fb6a"),n("b0c0"),n("d3b7"),n("25f0"),n("3ca3");var i=n("5a43");function r(e,t){if(e){if("string"===typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}e.exports=r},6858:function(e,t,n){"use strict";var i=n("2f9a"),r=n("ea34"),o=n("8a0d"),a=n("6ca1");e.exports=n("393a")(Array,"Array",(function(e,t){this._t=a(e),this._i=0,this._k=t}),(function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,r(1)):r(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])}),"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},"693d":function(e,t,n){"use strict";var i=n("ef08"),r=n("9c0e"),o=n("0bad"),a=n("512c"),s=n("ba01"),l=n("e34a").KEY,c=n("4b8b"),u=n("b367"),d=n("92f0"),h=n("8b1a"),f=n("cc15"),p=n("fcd4"),m=n("e198"),g=n("0ae2"),v=n("4ebc"),b=n("77e9"),y=n("7a41"),w=n("0983"),x=n("6ca1"),_=n("3397"),k=n("10db"),C=n("6f4f"),S=n("1836"),O=n("4d20"),T=n("fed5"),E=n("1a14"),D=n("9876"),M=O.f,A=E.f,N=S.f,I=i.Symbol,L=i.JSON,P=L&&L.stringify,$="prototype",F=f("_hidden"),j=f("toPrimitive"),z={}.propertyIsEnumerable,B=u("symbol-registry"),R=u("symbols"),V=u("op-symbols"),H=Object[$],W="function"==typeof I&&!!T.f,q=i.QObject,U=!q||!q[$]||!q[$].findChild,K=o&&c((function(){return 7!=C(A({},"a",{get:function(){return A(this,"a",{value:7}).a}})).a}))?function(e,t,n){var i=M(H,t);i&&delete H[t],A(e,t,n),i&&e!==H&&A(H,t,i)}:A,G=function(e){var t=R[e]=C(I[$]);return t._k=e,t},Y=W&&"symbol"==_typeof2(I.iterator)?function(e){return"symbol"==_typeof2(e)}:function(e){return e instanceof I},X=function e(t,n,i){return t===H&&e(V,n,i),b(t),n=_(n,!0),b(i),r(R,n)?(i.enumerable?(r(t,F)&&t[F][n]&&(t[F][n]=!1),i=C(i,{enumerable:k(0,!1)})):(r(t,F)||A(t,F,k(1,{})),t[F][n]=!0),K(t,n,i)):A(t,n,i)},Z=function(e,t){b(e);var n,i=g(t=x(t)),r=0,o=i.length;while(o>r)X(e,n=i[r++],t[n]);return e},Q=function(e,t){return void 0===t?C(e):Z(C(e),t)},J=function(e){var t=z.call(this,e=_(e,!0));return!(this===H&&r(R,e)&&!r(V,e))&&(!(t||!r(this,e)||!r(R,e)||r(this,F)&&this[F][e])||t)},ee=function(e,t){if(e=x(e),t=_(t,!0),e!==H||!r(R,t)||r(V,t)){var n=M(e,t);return!n||!r(R,t)||r(e,F)&&e[F][t]||(n.enumerable=!0),n}},te=function(e){var t,n=N(x(e)),i=[],o=0;while(n.length>o)r(R,t=n[o++])||t==F||t==l||i.push(t);return i},ne=function(e){var t,n=e===H,i=N(n?V:x(e)),o=[],a=0;while(i.length>a)!r(R,t=i[a++])||n&&!r(H,t)||o.push(R[t]);return o};W||(I=function(){if(this instanceof I)throw TypeError("Symbol is not a constructor!");var e=h(arguments.length>0?arguments[0]:void 0),t=function t(n){this===H&&t.call(V,n),r(this,F)&&r(this[F],e)&&(this[F][e]=!1),K(this,e,k(1,n))};return o&&U&&K(H,e,{configurable:!0,set:t}),G(e)},s(I[$],"toString",(function(){return this._k})),O.f=ee,E.f=X,n("6438").f=S.f=te,n("1917").f=J,T.f=ne,o&&!n("e444")&&s(H,"propertyIsEnumerable",J,!0),p.f=function(e){return G(f(e))}),a(a.G+a.W+a.F*!W,{Symbol:I});for(var ie="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),re=0;ie.length>re;)f(ie[re++]);for(var oe=D(f.store),ae=0;oe.length>ae;)m(oe[ae++]);a(a.S+a.F*!W,"Symbol",{for:function(e){return r(B,e+="")?B[e]:B[e]=I(e)},keyFor:function(e){if(!Y(e))throw TypeError(e+" is not a symbol!");for(var t in B)if(B[t]===e)return t},useSetter:function(){U=!0},useSimple:function(){U=!1}}),a(a.S+a.F*!W,"Object",{create:Q,defineProperty:X,defineProperties:Z,getOwnPropertyDescriptor:ee,getOwnPropertyNames:te,getOwnPropertySymbols:ne});var se=c((function(){T.f(1)}));a(a.S+a.F*se,"Object",{getOwnPropertySymbols:function(e){return T.f(w(e))}}),L&&a(a.S+a.F*(!W||c((function(){var e=I();return"[null]"!=P([e])||"{}"!=P({a:e})||"{}"!=P(Object(e))}))),"JSON",{stringify:function(e){var t,n,i=[e],r=1;while(arguments.length>r)i.push(arguments[r++]);if(n=t=i[1],(y(t)||void 0!==e)&&!Y(e))return v(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!Y(t))return t}),i[1]=t,P.apply(L,i)}}),I[$][j]||n("051b")(I[$],j,I[$].valueOf),d(I,"Symbol"),d(Math,"Math",!0),d(i.JSON,"JSON",!0)},"693d8":function(e,t,n){(function(e){"use strict";e(n("56b3"),n("9eb9"),n("d5e0"),n("f9d4"),n("a0bd"),n("7b00"),n("1b63"),n("76d2"),n("5bef"),n("e1de"))})((function(e){var t={script:[["lang",/coffee(script)?/,"coffeescript"],["type",/^(?:text|application)\/(?:x-)?coffee(?:script)?$/,"coffeescript"],["lang",/^babel$/,"javascript"],["type",/^text\/babel$/,"javascript"],["type",/^text\/ecmascript-\d+$/,"javascript"]],style:[["lang",/^stylus$/i,"stylus"],["lang",/^sass$/i,"sass"],["lang",/^less$/i,"text/x-less"],["lang",/^scss$/i,"text/x-scss"],["type",/^(text\/)?(x-)?styl(us)?$/i,"stylus"],["type",/^text\/sass/i,"sass"],["type",/^(text\/)?(x-)?scss$/i,"text/x-scss"],["type",/^(text\/)?(x-)?less$/i,"text/x-less"]],template:[["lang",/^vue-template$/i,"vue"],["lang",/^pug$/i,"pug"],["lang",/^handlebars$/i,"handlebars"],["type",/^(text\/)?(x-)?pug$/i,"pug"],["type",/^text\/x-handlebars-template$/i,"handlebars"],[null,null,"vue-template"]]};e.defineMode("vue-template",(function(t,n){var i={token:function(e){if(e.match(/^\{\{.*?\}\}/))return"meta mustache";while(e.next()&&!e.match("{{",!1));return null}};return e.overlayMode(e.getMode(t,n.backdrop||"text/html"),i)})),e.defineMode("vue",(function(n){return e.getMode(n,{name:"htmlmixed",tags:t})}),"htmlmixed","xml","javascript","coffeescript","css","sass","stylus","pug","handlebars"),e.defineMIME("script/x-vue","vue"),e.defineMIME("text/x-vue","vue")}))},"69d2":function(e,t,n){"use strict";var i=n("155a"),r=n.n(i);r.a},"69f3":function(e,t,n){var i,r,o,a=n("7f9a"),s=n("da84"),l=n("861d"),c=n("9112"),u=n("5135"),d=n("f772"),h=n("d012"),f=s.WeakMap,p=function(e){return o(e)?r(e):i(e,{})},m=function(e){return function(t){var n;if(!l(t)||(n=r(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}};if(a){var g=new f,v=g.get,b=g.has,y=g.set;i=function(e,t){return y.call(g,e,t),t},r=function(e){return v.call(g,e)||{}},o=function(e){return b.call(g,e)}}else{var w=d("state");h[w]=!0,i=function(e,t){return c(e,w,t),t},r=function(e){return u(e,w)?e[w]:{}},o=function(e){return u(e,w)}}e.exports={set:i,get:r,has:o,enforce:p,getterFor:m}},"6a70":function(e,t,n){},"6ac9":function(e,t,n){n("a4d3"),n("e01a"),n("944a"),n("99af"),n("c975"),n("b0c0"),n("0c47"),n("23dc"),n("a9e3"),n("d3b7");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=74)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},2:function(e,t){e.exports=n("5924")},3:function(e,t){e.exports=n("8122")},5:function(e,t){e.exports=n("e974")},7:function(e,t){e.exports=n("8bbf")},74:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",[n("transition",{attrs:{name:e.transition},on:{"after-enter":e.handleAfterEnter,"after-leave":e.handleAfterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.disabled&&e.showPopper,expression:"!disabled && showPopper"}],ref:"popper",staticClass:"el-popover el-popper",class:[e.popperClass,e.content&&"el-popover--plain"],style:{width:e.width+"px"},attrs:{role:"tooltip",id:e.tooltipId,"aria-hidden":e.disabled||!e.showPopper?"true":"false"}},[e.title?n("div",{staticClass:"el-popover__title",domProps:{textContent:e._s(e.title)}}):e._e(),e._t("default",[e._v(e._s(e.content))])],2)]),e._t("reference")],2)},r=[];i._withStripped=!0;var o=n(5),a=n.n(o),s=n(2),l=n(3),c={name:"ElPopover",mixins:[a.a],props:{trigger:{type:String,default:"click",validator:function(e){return["click","focus","hover","manual"].indexOf(e)>-1}},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:200},title:String,disabled:Boolean,content:String,reference:{},popperClass:String,width:{},visibleArrow:{default:!0},arrowOffset:{type:Number,default:0},transition:{type:String,default:"fade-in-linear"},tabindex:{type:Number,default:0}},computed:{tooltipId:function(){return"el-popover-"+Object(l["generateId"])()}},watch:{showPopper:function(e){this.disabled||(e?this.$emit("show"):this.$emit("hide"))}},mounted:function(){var e=this,t=this.referenceElm=this.reference||this.$refs.reference,n=this.popper||this.$refs.popper;!t&&this.$slots.reference&&this.$slots.reference[0]&&(t=this.referenceElm=this.$slots.reference[0].elm),t&&(Object(s["addClass"])(t,"el-popover__reference"),t.setAttribute("aria-describedby",this.tooltipId),t.setAttribute("tabindex",this.tabindex),n.setAttribute("tabindex",0),"click"!==this.trigger&&(Object(s["on"])(t,"focusin",(function(){e.handleFocus();var n=t.__vue__;n&&"function"===typeof n.focus&&n.focus()})),Object(s["on"])(n,"focusin",this.handleFocus),Object(s["on"])(t,"focusout",this.handleBlur),Object(s["on"])(n,"focusout",this.handleBlur)),Object(s["on"])(t,"keydown",this.handleKeydown),Object(s["on"])(t,"click",this.handleClick)),"click"===this.trigger?(Object(s["on"])(t,"click",this.doToggle),Object(s["on"])(document,"click",this.handleDocumentClick)):"hover"===this.trigger?(Object(s["on"])(t,"mouseenter",this.handleMouseEnter),Object(s["on"])(n,"mouseenter",this.handleMouseEnter),Object(s["on"])(t,"mouseleave",this.handleMouseLeave),Object(s["on"])(n,"mouseleave",this.handleMouseLeave)):"focus"===this.trigger&&(this.tabindex<0&&console.warn("[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key"),t.querySelector("input, textarea")?(Object(s["on"])(t,"focusin",this.doShow),Object(s["on"])(t,"focusout",this.doClose)):(Object(s["on"])(t,"mousedown",this.doShow),Object(s["on"])(t,"mouseup",this.doClose)))},beforeDestroy:function(){this.cleanup()},deactivated:function(){this.cleanup()},methods:{doToggle:function(){this.showPopper=!this.showPopper},doShow:function(){this.showPopper=!0},doClose:function(){this.showPopper=!1},handleFocus:function(){Object(s["addClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!0)},handleClick:function(){Object(s["removeClass"])(this.referenceElm,"focusing")},handleBlur:function(){Object(s["removeClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!1)},handleMouseEnter:function(){var e=this;clearTimeout(this._timer),this.openDelay?this._timer=setTimeout((function(){e.showPopper=!0}),this.openDelay):this.showPopper=!0},handleKeydown:function(e){27===e.keyCode&&"manual"!==this.trigger&&this.doClose()},handleMouseLeave:function(){var e=this;clearTimeout(this._timer),this.closeDelay?this._timer=setTimeout((function(){e.showPopper=!1}),this.closeDelay):this.showPopper=!1},handleDocumentClick:function(e){var t=this.reference||this.$refs.reference,n=this.popper||this.$refs.popper;!t&&this.$slots.reference&&this.$slots.reference[0]&&(t=this.referenceElm=this.$slots.reference[0].elm),this.$el&&t&&!this.$el.contains(e.target)&&!t.contains(e.target)&&n&&!n.contains(e.target)&&(this.showPopper=!1)},handleAfterEnter:function(){this.$emit("after-enter")},handleAfterLeave:function(){this.$emit("after-leave"),this.doDestroy()},cleanup:function(){(this.openDelay||this.closeDelay)&&clearTimeout(this._timer)}},destroyed:function(){var e=this.reference;Object(s["off"])(e,"click",this.doToggle),Object(s["off"])(e,"mouseup",this.doClose),Object(s["off"])(e,"mousedown",this.doShow),Object(s["off"])(e,"focusin",this.doShow),Object(s["off"])(e,"focusout",this.doClose),Object(s["off"])(e,"mousedown",this.doShow),Object(s["off"])(e,"mouseup",this.doClose),Object(s["off"])(e,"mouseleave",this.handleMouseLeave),Object(s["off"])(e,"mouseenter",this.handleMouseEnter),Object(s["off"])(document,"click",this.handleDocumentClick)}},u=c,d=n(0),h=Object(d["a"])(u,i,r,!1,null,null,null);h.options.__file="packages/popover/src/main.vue";var f=h.exports,p=function(e,t,n){var i=t.expression?t.value:t.arg,r=n.context.$refs[i];r&&(Array.isArray(r)?r[0].$refs.reference=e:r.$refs.reference=e)},m={bind:function(e,t,n){p(e,t,n)},inserted:function(e,t,n){p(e,t,n)}},g=n(7),v=n.n(g);v.a.directive("popover",m),f.install=function(e){e.directive("popover",m),e.component(f.name,f)},f.directive=m,t["default"]=f}})},"6b03":function(e,t,n){"use strict";var i=n("efed"),r=n.n(i);r.a},"6b4b":function(e,t,n){"use strict";var i=n("0b40"),r=n.n(i);r.a},"6b75":function(e,t,n){"use strict";function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}n.d(t,"a",(function(){return i}))},"6b7c":function(e,t,n){"use strict";t.__esModule=!0;var i=n("4897");t.default={methods:{t:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return i.t.apply(this,t)}}}},"6bc3":function(e,t,n){"use strict";var i=n("0204"),r=n.n(i);r.a},"6ca1":function(e,t,n){var i=n("9fbb"),r=n("c901");e.exports=function(e){return i(r(e))}},"6d78":function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";function t(e){var t=e.getWrapperElement();e.state.fullScreenRestore={scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,width:t.style.width,height:t.style.height},t.style.width="",t.style.height="auto",t.className+=" CodeMirror-fullscreen",document.documentElement.style.overflow="hidden",e.refresh()}function n(e){var t=e.getWrapperElement();t.className=t.className.replace(/\s*CodeMirror-fullscreen\b/,""),document.documentElement.style.overflow="";var n=e.state.fullScreenRestore;t.style.width=n.width,t.style.height=n.height,window.scrollTo(n.scrollLeft,n.scrollTop),e.refresh()}e.defineOption("fullScreen",!1,(function(i,r,o){o==e.Init&&(o=!1),!o!=!r&&(r?t(i):n(i))}))}))},"6dd8":function(e,t,n){"use strict";n.r(t),function(e){var n=function(){if("undefined"!==typeof Map)return Map;function e(e,t){var n=-1;return e.some((function(e,i){return e[0]===t&&(n=i,!0)})),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var n=e(this.__entries__,t),i=this.__entries__[n];return i&&i[1]},t.prototype.set=function(t,n){var i=e(this.__entries__,t);~i?this.__entries__[i][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,i=e(n,t);~i&&n.splice(i,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var n=0,i=this.__entries__;n<i.length;n++){var r=i[n];e.call(t,r[1],r[0])}},t}()}(),i="undefined"!==typeof window&&"undefined"!==typeof document&&window.document===document,r=function(){return"undefined"!==typeof e&&e.Math===Math?e:"undefined"!==typeof self&&self.Math===Math?self:"undefined"!==typeof window&&window.Math===Math?window:Function("return this")()}(),o=function(){return"function"===typeof requestAnimationFrame?requestAnimationFrame.bind(r):function(e){return setTimeout((function(){return e(Date.now())}),1e3/60)}}(),a=2;function s(e,t){var n=!1,i=!1,r=0;function s(){n&&(n=!1,e()),i&&c()}function l(){o(s)}function c(){var e=Date.now();if(n){if(e-r<a)return;i=!0}else n=!0,i=!1,setTimeout(l,t);r=e}return c}var l=20,c=["top","right","bottom","left","width","height","size","weight"],u="undefined"!==typeof MutationObserver,d=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=s(this.refresh.bind(this),l)}return e.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},e.prototype.removeObserver=function(e){var t=this.observers_,n=t.indexOf(e);~n&&t.splice(n,1),!t.length&&this.connected_&&this.disconnect_()},e.prototype.refresh=function(){var e=this.updateObservers_();e&&this.refresh()},e.prototype.updateObservers_=function(){var e=this.observers_.filter((function(e){return e.gatherActive(),e.hasActive()}));return e.forEach((function(e){return e.broadcastActive()})),e.length>0},e.prototype.connect_=function(){i&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),u?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){i&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t,i=c.some((function(e){return!!~n.indexOf(e)}));i&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),h=function(e,t){for(var n=0,i=Object.keys(t);n<i.length;n++){var r=i[n];Object.defineProperty(e,r,{value:t[r],enumerable:!1,writable:!1,configurable:!0})}return e},f=function(e){var t=e&&e.ownerDocument&&e.ownerDocument.defaultView;return t||r},p=C(0,0,0,0);function m(e){return parseFloat(e)||0}function g(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return t.reduce((function(t,n){var i=e["border-"+n+"-width"];return t+m(i)}),0)}function v(e){for(var t=["top","right","bottom","left"],n={},i=0,r=t;i<r.length;i++){var o=r[i],a=e["padding-"+o];n[o]=m(a)}return n}function b(e){var t=e.getBBox();return C(0,0,t.width,t.height)}function y(e){var t=e.clientWidth,n=e.clientHeight;if(!t&&!n)return p;var i=f(e).getComputedStyle(e),r=v(i),o=r.left+r.right,a=r.top+r.bottom,s=m(i.width),l=m(i.height);if("border-box"===i.boxSizing&&(Math.round(s+o)!==t&&(s-=g(i,"left","right")+o),Math.round(l+a)!==n&&(l-=g(i,"top","bottom")+a)),!x(e)){var c=Math.round(s+o)-t,u=Math.round(l+a)-n;1!==Math.abs(c)&&(s-=c),1!==Math.abs(u)&&(l-=u)}return C(r.left,r.top,s,l)}var w=function(){return"undefined"!==typeof SVGGraphicsElement?function(e){return e instanceof f(e).SVGGraphicsElement}:function(e){return e instanceof f(e).SVGElement&&"function"===typeof e.getBBox}}();function x(e){return e===f(e).document.documentElement}function _(e){return i?w(e)?b(e):y(e):p}function k(e){var t=e.x,n=e.y,i=e.width,r=e.height,o="undefined"!==typeof DOMRectReadOnly?DOMRectReadOnly:Object,a=Object.create(o.prototype);return h(a,{x:t,y:n,width:i,height:r,top:n,right:t+i,bottom:r+n,left:t}),a}function C(e,t,n,i){return{x:e,y:t,width:n,height:i}}var S=function(){function e(e){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=C(0,0,0,0),this.target=e}return e.prototype.isActive=function(){var e=_(this.target);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},e.prototype.broadcastRect=function(){var e=this.contentRect_;return this.broadcastWidth=e.width,this.broadcastHeight=e.height,e},e}(),O=function(){function e(e,t){var n=k(t);h(this,{target:e,contentRect:n})}return e}(),T=function(){function e(e,t,i){if(this.activeObservations_=[],this.observations_=new n,"function"!==typeof e)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=e,this.controller_=t,this.callbackCtx_=i}return e.prototype.observe=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!==typeof Element&&Element instanceof Object){if(!(e instanceof f(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)||(t.set(e,new S(e)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!==typeof Element&&Element instanceof Object){if(!(e instanceof f(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)&&(t.delete(e),t.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach((function(t){t.isActive()&&e.activeObservations_.push(t)}))},e.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,t=this.activeObservations_.map((function(e){return new O(e.target,e.broadcastRect())}));this.callback_.call(e,t,e),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),E="undefined"!==typeof WeakMap?new WeakMap:new n,D=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=d.getInstance(),i=new T(t,n,this);E.set(this,i)}return e}();["observe","unobserve","disconnect"].forEach((function(e){D.prototype[e]=function(){var t;return(t=E.get(this))[e].apply(t,arguments)}}));var M=function(){return"undefined"!==typeof r.ResizeObserver?r.ResizeObserver:D}();t["default"]=M}.call(this,n("c8ba"))},"6eeb":function(e,t,n){var i=n("da84"),r=n("9112"),o=n("5135"),a=n("ce4e"),s=n("8925"),l=n("69f3"),c=l.get,u=l.enforce,d=String(String).split("String");(e.exports=function(e,t,n,s){var l=!!s&&!!s.unsafe,c=!!s&&!!s.enumerable,h=!!s&&!!s.noTargetGet;"function"==typeof n&&("string"!=typeof t||o(n,"name")||r(n,"name",t),u(n).source=d.join("string"==typeof t?t:"")),e!==i?(l?!h&&e[t]&&(c=!0):delete e[t],c?e[t]=n:r(e,t,n)):c?e[t]=n:a(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&c(this).source||s(this)}))},"6f4f":function(e,t,n){var i=n("77e9"),r=n("85e7"),o=n("9742"),a=n("5a94")("IE_PROTO"),s=function(){},l="prototype",c=function(){var e,t=n("05f5")("iframe"),i=o.length,r="<",a=">";t.style.display="none",n("9141").appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(r+"script"+a+"document.F=Object"+r+"/script"+a),e.close(),c=e.F;while(i--)delete c[l][o[i]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[l]=i(e),n=new s,s[l]=null,n[a]=e):n=c(),void 0===t?n:r(n,t)}},"6f53":function(e,t,n){var i=n("83ab"),r=n("df75"),o=n("fc6a"),a=n("d1e7").f,s=function(e){return function(t){var n,s=o(t),l=r(s),c=l.length,u=0,d=[];while(c>u)n=l[u++],i&&!a.call(s,n)||d.push(e?[n,s[n]]:s[n]);return d}};e.exports={entries:s(!0),values:s(!1)}},"6fb9":function(e,t,n){},7037:function(e,t,n){function i(t){return"function"===typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?e.exports=i=function(e){return _typeof2(e)}:e.exports=i=function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":_typeof2(e)},i(t)}n("a4d3"),n("e01a"),n("d28b"),n("e260"),n("d3b7"),n("3ca3"),n("ddb0"),e.exports=i},7156:function(e,t,n){var i=n("861d"),r=n("d2bb");e.exports=function(e,t,n){var o,a;return r&&"function"==typeof(o=t.constructor)&&o!==n&&i(a=o.prototype)&&a!==n.prototype&&r(e,a),e}},"722f":function(e,t,n){"use strict";n("a4d3"),n("e01a"),n("d28b"),n("e260"),n("d3b7"),n("3ca3"),n("ddb0");var i=n("7037");t.__esModule=!0;var r="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)},o=n("e452"),a=s(o);function s(e){return e&&e.__esModule?e:{default:e}}var l,c=c||{};c.Dialog=function(e,t,n){var i=this;if(this.dialogNode=e,null===this.dialogNode||"dialog"!==this.dialogNode.getAttribute("role"))throw new Error("Dialog() requires a DOM element with ARIA role of dialog.");"string"===typeof t?this.focusAfterClosed=document.getElementById(t):"object"===("undefined"===typeof t?"undefined":r(t))?this.focusAfterClosed=t:this.focusAfterClosed=null,"string"===typeof n?this.focusFirst=document.getElementById(n):"object"===("undefined"===typeof n?"undefined":r(n))?this.focusFirst=n:this.focusFirst=null,this.focusFirst?this.focusFirst.focus():a.default.focusFirstDescendant(this.dialogNode),this.lastFocus=document.activeElement,l=function(e){i.trapFocus(e)},this.addListeners()},c.Dialog.prototype.addListeners=function(){document.addEventListener("focus",l,!0)},c.Dialog.prototype.removeListeners=function(){document.removeEventListener("focus",l,!0)},c.Dialog.prototype.closeDialog=function(){var e=this;this.removeListeners(),this.focusAfterClosed&&setTimeout((function(){e.focusAfterClosed.focus()}))},c.Dialog.prototype.trapFocus=function(e){a.default.IgnoreUtilFocusChanges||(this.dialogNode.contains(e.target)?this.lastFocus=e.target:(a.default.focusFirstDescendant(this.dialogNode),this.lastFocus===document.activeElement&&a.default.focusLastDescendant(this.dialogNode),this.lastFocus=document.activeElement))},t.default=c.Dialog},"72cd":function(e,t,n){"use strict";var i=n("c861"),r=n.n(i);r.a},"72f7":function(e,t,n){"use strict";var i=n("ebb5").exportTypedArrayMethod,r=n("d039"),o=n("da84"),a=o.Uint8Array,s=a&&a.prototype||{},l=[].toString,c=[].join;r((function(){l.call({})}))&&(l=function(){return c.call(this)});var u=s.toString!=l;i("toString",l,u)},"735e":function(e,t,n){"use strict";var i=n("ebb5"),r=n("81d5"),o=i.aTypedArray,a=i.exportTypedArrayMethod;a("fill",(function(e){return r.apply(o(this),arguments)}))},7418:function(e,t){t.f=Object.getOwnPropertySymbols},"746f":function(e,t,n){var i=n("428f"),r=n("5135"),o=n("e538"),a=n("9bf2").f;e.exports=function(e){var t=i.Symbol||(i.Symbol={});r(t,e)||a(t,e,{value:o.f(e)})}},"74d3":function d3(module,__webpack_exports__,__webpack_require__){"use strict";var core_js_modules_es_object_assign__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("cca6"),core_js_modules_es_object_assign__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(core_js_modules_es_object_assign__WEBPACK_IMPORTED_MODULE_0__),_plugins_codemirror_addon_edit_matchbrackets__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("1850"),_plugins_codemirror_addon_edit_matchbrackets__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_plugins_codemirror_addon_edit_matchbrackets__WEBPACK_IMPORTED_MODULE_1__),_plugins_codemirror_addon_hint_show_hint_css__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("9bc9"),_plugins_codemirror_addon_hint_show_hint_css__WEBPACK_IMPORTED_MODULE_2___default=__webpack_require__.n(_plugins_codemirror_addon_hint_show_hint_css__WEBPACK_IMPORTED_MODULE_2__),_plugins_codemirror_addon_hint_show_hint__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("addb"),_plugins_codemirror_addon_hint_show_hint__WEBPACK_IMPORTED_MODULE_3___default=__webpack_require__.n(_plugins_codemirror_addon_hint_show_hint__WEBPACK_IMPORTED_MODULE_3__),_plugins_codemirror_plugs_aws_formula_addon_hint_aws_at_hint__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("3c47"),_plugins_codemirror_plugs_aws_formula_addon_hint_aws_at_hint__WEBPACK_IMPORTED_MODULE_4___default=__webpack_require__.n(_plugins_codemirror_plugs_aws_formula_addon_hint_aws_at_hint__WEBPACK_IMPORTED_MODULE_4__),_plugins_codemirror_plugs_aws_formula_mode_awsat_aws_at__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("79ef"),_plugins_codemirror_plugs_aws_formula_mode_awsat_aws_at__WEBPACK_IMPORTED_MODULE_5___default=__webpack_require__.n(_plugins_codemirror_plugs_aws_formula_mode_awsat_aws_at__WEBPACK_IMPORTED_MODULE_5__),_plugins_codemirror_plugs_aws_formula_awsui_formula_util__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("82bb"),_plugins_codemirror_plugs_aws_formula_awsui_formula_util__WEBPACK_IMPORTED_MODULE_6___default=__webpack_require__.n(_plugins_codemirror_plugs_aws_formula_awsui_formula_util__WEBPACK_IMPORTED_MODULE_6__),_plugins_codemirror_plugs_aws_formula_theme_aws_formula_css__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__("8ce5"),_plugins_codemirror_plugs_aws_formula_theme_aws_formula_css__WEBPACK_IMPORTED_MODULE_7___default=__webpack_require__.n(_plugins_codemirror_plugs_aws_formula_theme_aws_formula_css__WEBPACK_IMPORTED_MODULE_7__);window.formulaLabelMap={},__webpack_exports__["a"]={name:"AwsuiFormula",componentName:"AwsuiCodemirror",props:{content:{type:String,default:""},option:{type:Object},value:{type:String},placeholder:{type:String,default:"请输入内容"}},data:function(){return{options:{height:"28px",theme:"aws-formula",foldGutter:!0,singleCursorHeightPerLine:!1,gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"],matchBrackets:!0,mode:{name:"awsAt"},defaultTable:[1,2,3],autofocus:!1,lineWrapping:!0},iframeOption:{url:this.getPath(),data:{sid:this.getSid(),cmd:"CLIENT_M_FORMULA_EDITOR_MAIN_PAGE",contextData:""}},currentContent:this.value,otherInstanceVue:null,dialogVisible:!1,cm:null,width:"850px",height:window.top!==window&&window.height>550?.6*window.height+"px":"550px"}},watch:{content:{handler:function(){""!==this.content&&(this.currentContent=this.content)},immediate:!0},currentContent:function(e){this.$emit("input",e)},value:{handler:function(){this.currentContent!=this.value&&(this.currentContent=this.value,this.onCmReady())},immediate:!0}},methods:{onCmReady:function(e){var t=this;if(this.cm=null!=e?e:this.cm,null!=this.cm){var n=this.getOpt();!0===this.option.readonly&&this.cm.setOption("readOnly","nocursor"),this.cm.setSize(null,this.option.height),this.cm.setOption("isSupportReturn",!1);var i={url:"jd",data:{sid:this.getSid(),contextData:JSON.stringify(n.contextData),content:JSON.stringify(this.currentContent),cmd:"CLIENT_M_FORMULA_EDITOR_PARSE_CONTENT"}};this.awsuiaxios.post(i).then((function(e){if("ok"===e.result&&void 0!==e.data.formulaLabelMapCache){var i=e.data.formulaLabelMapCache;if(null!=i){var r=Object.assign({},window.formulaLabelMap,i);window.formulaLabelMap=r,window.initFormulaEditor(t.currentContent,t.cm,n.type)}}})).catch((function(e){console.log(e)}))}},refresh:function(){this.onCmReady()},getSid:function getSid(){var sid=this.option.sid;return void 0===sid&&(sid="undefined"!=typeof settingParam?eval("settingParam")["sessionId"]:null!=window.settingParam?window.settingParam.sessionId:this.option.sid),sid},getPath:function getPath(){return eval("axiosBaseUrl")+"w"},getOpt:function(){var e=Object.assign({},this.options,this.option);return e.defaultValue=this.currentContent,e},openDialog:function(e,t){var n=this,i=e;if(null==i&&(i=this.getOpt(),i.contextData.defaultValue=this.currentContent),!0!==this.option.disabled&&!0!==this.option.readonly){if(this.otherInstanceVue=null==t?this:t,null!=window.atOnce&&window.atOnce!==this)return i.contextData.defaultValue=this.currentContent,void window.atOnce.openDialog(i,this);void 0!==i.contextData&&(this.iframeOption.data.contextData=JSON.stringify(i.contextData)),!0!==this.option.readonly&&!0!==this.option.disabled&&(this.dialogVisible=!0),n.$nextTick((function(){n.width=window.top!==window&&window.width>850?.7*window.width+"px":"850px"}))}},dialogConfirm:function(e){null==e?this.otherInstanceVue&&(this.otherInstanceVue.dialogConfirm(this.getValue()),this.otherInstanceVue.onCmReady(),this.otherInstanceVue=null,this.dialogVisible=!1):this.currentContent=e},getValue:function(){return this.$refs.awsuiDialog.getWin().getVal()},dialogCancel:function(){this.dialogVisible=!1}},mounted:function(){window.atOnce||(window.atOnce=this)},destroyed:function(){window.atOnce=null},computed:{dialogOnce:function(){return null==window.atOnce}}}},"74e8":function(e,t,n){"use strict";var i=n("23e7"),r=n("da84"),o=n("83ab"),a=n("8aa7"),s=n("ebb5"),l=n("621a"),c=n("19aa"),u=n("5c6c"),d=n("9112"),h=n("50c4"),f=n("0b25"),p=n("182d"),m=n("c04e"),g=n("5135"),v=n("f5df"),b=n("861d"),y=n("7c73"),w=n("d2bb"),x=n("241c").f,_=n("a078"),k=n("b727").forEach,C=n("2626"),S=n("9bf2"),O=n("06cf"),T=n("69f3"),E=n("7156"),D=T.get,M=T.set,A=S.f,N=O.f,I=Math.round,L=r.RangeError,P=l.ArrayBuffer,$=l.DataView,F=s.NATIVE_ARRAY_BUFFER_VIEWS,j=s.TYPED_ARRAY_TAG,z=s.TypedArray,B=s.TypedArrayPrototype,R=s.aTypedArrayConstructor,V=s.isTypedArray,H="BYTES_PER_ELEMENT",W="Wrong length",q=function(e,t){var n=0,i=t.length,r=new(R(e))(i);while(i>n)r[n]=t[n++];return r},U=function(e,t){A(e,t,{get:function(){return D(this)[t]}})},K=function(e){var t;return e instanceof P||"ArrayBuffer"==(t=v(e))||"SharedArrayBuffer"==t},G=function(e,t){return V(e)&&"symbol"!=_typeof2(t)&&t in e&&String(+t)==String(t)},Y=function(e,t){return G(e,t=m(t,!0))?u(2,e[t]):N(e,t)},X=function(e,t,n){return!(G(e,t=m(t,!0))&&b(n)&&g(n,"value"))||g(n,"get")||g(n,"set")||n.configurable||g(n,"writable")&&!n.writable||g(n,"enumerable")&&!n.enumerable?A(e,t,n):(e[t]=n.value,e)};o?(F||(O.f=Y,S.f=X,U(B,"buffer"),U(B,"byteOffset"),U(B,"byteLength"),U(B,"length")),i({target:"Object",stat:!0,forced:!F},{getOwnPropertyDescriptor:Y,defineProperty:X}),e.exports=function(e,t,n){var o=e.match(/\d+$/)[0]/8,s=e+(n?"Clamped":"")+"Array",l="get"+e,u="set"+e,m=r[s],g=m,v=g&&g.prototype,S={},O=function(e,t){var n=D(e);return n.view[l](t*o+n.byteOffset,!0)},T=function(e,t,i){var r=D(e);n&&(i=(i=I(i))<0?0:i>255?255:255&i),r.view[u](t*o+r.byteOffset,i,!0)},N=function(e,t){A(e,t,{get:function(){return O(this,t)},set:function(e){return T(this,t,e)},enumerable:!0})};F?a&&(g=t((function(e,t,n,i){return c(e,g,s),E(function(){return b(t)?K(t)?void 0!==i?new m(t,p(n,o),i):void 0!==n?new m(t,p(n,o)):new m(t):V(t)?q(g,t):_.call(g,t):new m(f(t))}(),e,g)})),w&&w(g,z),k(x(m),(function(e){e in g||d(g,e,m[e])})),g.prototype=v):(g=t((function(e,t,n,i){c(e,g,s);var r,a,l,u=0,d=0;if(b(t)){if(!K(t))return V(t)?q(g,t):_.call(g,t);r=t,d=p(n,o);var m=t.byteLength;if(void 0===i){if(m%o)throw L(W);if(a=m-d,a<0)throw L(W)}else if(a=h(i)*o,a+d>m)throw L(W);l=a/o}else l=f(t),a=l*o,r=new P(a);M(e,{buffer:r,byteOffset:d,byteLength:a,length:l,view:new $(r)});while(u<l)N(e,u++)})),w&&w(g,z),v=g.prototype=y(B)),v.constructor!==g&&d(v,"constructor",g),j&&d(v,j,s),S[s]=g,i({global:!0,forced:g!=m,sham:!F},S),H in g||d(g,H,o),H in v||d(v,H,o),C(s)}):e.exports=function(){}},"74ec":function(e,t,n){},"76ae":function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";function t(e,t){if(!e.hasOwnProperty(t))throw new Error("Undefined state "+t+" in simple mode")}function n(e,t){if(!e)return/(?:)/;var n="";return e instanceof RegExp?(e.ignoreCase&&(n="i"),e=e.source):e=String(e),new RegExp((!1===t?"":"^")+"(?:"+e+")",n)}function i(e){if(!e)return null;if(e.apply)return e;if("string"==typeof e)return e.replace(/\./g," ");for(var t=[],n=0;n<e.length;n++)t.push(e[n]&&e[n].replace(/\./g," "));return t}function r(e,r){(e.next||e.push)&&t(r,e.next||e.push),this.regex=n(e.regex),this.token=i(e.token),this.data=e}function o(e,t){return function(n,i){if(i.pending){var r=i.pending.shift();return 0==i.pending.length&&(i.pending=null),n.pos+=r.text.length,r.token}if(i.local){if(i.local.end&&n.match(i.local.end)){var o=i.local.endToken||null;return i.local=i.localState=null,o}var a;return o=i.local.mode.token(n,i.localState),i.local.endScan&&(a=i.local.endScan.exec(n.current()))&&(n.pos=n.start+a.index),o}for(var l=e[i.state],c=0;c<l.length;c++){var u=l[c],d=(!u.data.sol||n.sol())&&n.match(u.regex);if(d){u.data.next?i.state=u.data.next:u.data.push?((i.stack||(i.stack=[])).push(i.state),i.state=u.data.push):u.data.pop&&i.stack&&i.stack.length&&(i.state=i.stack.pop()),u.data.mode&&s(t,i,u.data.mode,u.token),u.data.indent&&i.indent.push(n.indentation()+t.indentUnit),u.data.dedent&&i.indent.pop();var h=u.token;if(h&&h.apply&&(h=h(d)),d.length>2&&u.token&&"string"!=typeof u.token){i.pending=[];for(var f=2;f<d.length;f++)d[f]&&i.pending.push({text:d[f],token:u.token[f-1]});return n.backUp(d[0].length-(d[1]?d[1].length:0)),h[0]}return h&&h.join?h[0]:h}}return n.next(),null}}function a(e,t){if(e===t)return!0;if(!e||"object"!=_typeof2(e)||!t||"object"!=_typeof2(t))return!1;var n=0;for(var i in e)if(e.hasOwnProperty(i)){if(!t.hasOwnProperty(i)||!a(e[i],t[i]))return!1;n++}for(var i in t)t.hasOwnProperty(i)&&n--;return 0==n}function s(t,i,r,o){var s;if(r.persistent)for(var l=i.persistentStates;l&&!s;l=l.next)(r.spec?a(r.spec,l.spec):r.mode==l.mode)&&(s=l);var c=s?s.mode:r.mode||e.getMode(t,r.spec),u=s?s.state:e.startState(c);r.persistent&&!s&&(i.persistentStates={mode:c,spec:r.spec,state:u,next:i.persistentStates}),i.localState=u,i.local={mode:c,end:r.end&&n(r.end),endScan:r.end&&!1!==r.forceEnd&&n(r.end,!1),endToken:o&&o.join?o[o.length-1]:o}}function l(e,t){for(var n=0;n<t.length;n++)if(t[n]===e)return!0}function c(t,n){return function(i,r,o){if(i.local&&i.local.mode.indent)return i.local.mode.indent(i.localState,r,o);if(null==i.indent||i.local||n.dontIndentStates&&l(i.state,n.dontIndentStates)>-1)return e.Pass;var a=i.indent.length-1,s=t[i.state];e:for(;;){for(var c=0;c<s.length;c++){var u=s[c];if(u.data.dedent&&!1!==u.data.dedentIfLineStart){var d=u.regex.exec(r);if(d&&d[0]){a--,(u.next||u.push)&&(s=t[u.next||u.push]),r=r.slice(d[0].length);continue e}}}break}return a<0?0:i.indent[a]}}e.defineSimpleMode=function(t,n){e.defineMode(t,(function(t){return e.simpleMode(t,n)}))},e.simpleMode=function(n,i){t(i,"start");var a={},s=i.meta||{},l=!1;for(var u in i)if(u!=s&&i.hasOwnProperty(u))for(var d=a[u]=[],h=i[u],f=0;f<h.length;f++){var p=h[f];d.push(new r(p,i)),(p.indent||p.dedent)&&(l=!0)}var m={startState:function(){return{state:"start",pending:null,local:null,localState:null,indent:l?[]:null}},copyState:function(t){var n={state:t.state,pending:t.pending,local:t.local,localState:null,indent:t.indent&&t.indent.slice(0)};t.localState&&(n.localState=e.copyState(t.local.mode,t.localState)),t.stack&&(n.stack=t.stack.slice(0));for(var i=t.persistentStates;i;i=i.next)n.persistentStates={mode:i.mode,spec:i.spec,state:i.state==t.localState?n.localState:e.copyState(i.mode,i.state),next:n.persistentStates};return n},token:o(a,n),innerMode:function(e){return e.local&&{mode:e.local.mode,state:e.localState}},indent:c(a,s)};if(s)for(var g in s)s.hasOwnProperty(g)&&(m[g]=s[g]);return m}}))},"76d2":function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";e.defineMode("stylus",(function(e){var f,p,b,y,w=e.indentUnit,x="",_=g(t),k=/^(a|b|i|s|col|em)$/i,C=g(o),S=g(a),O=g(c),T=g(l),E=g(n),D=m(n),M=g(r),A=g(i),N=g(s),I=/^\s*([.]{2,3}|&&|\|\||\*\*|[?!=:]?=|[-+*\/%<>]=?|\?:|\~)/,L=m(u),P=g(d),$=new RegExp(/^\-(moz|ms|o|webkit)-/i),F=g(h),j="",z={};while(x.length<w)x+=" ";function B(e,t){if(j=e.string.match(/(^[\w-]+\s*=\s*$)|(^\s*[\w-]+\s*=\s*[\w-])|(^\s*(\.|#|@|\$|\&|\[|\d|\+|::?|\{|\>|~|\/)?\s*[\w-]*([a-z0-9-]|\*|\/\*)(\(|,)?)/),t.context.line.firstWord=j?j[0].replace(/^\s*/,""):"",t.context.line.indent=e.indentation(),f=e.peek(),e.match("//"))return e.skipToEnd(),["comment","comment"];if(e.match("/*"))return t.tokenize=R,R(e,t);if('"'==f||"'"==f)return e.next(),t.tokenize=V(f),t.tokenize(e,t);if("@"==f)return e.next(),e.eatWhile(/[\w\\-]/),["def",e.current()];if("#"==f){if(e.next(),e.match(/^[0-9a-f]{3}([0-9a-f]([0-9a-f]{2}){0,2})?\b(?!-)/i))return["atom","atom"];if(e.match(/^[a-z][\w-]*/i))return["builtin","hash"]}return e.match($)?["meta","vendor-prefixes"]:e.match(/^-?[0-9]?\.?[0-9]/)?(e.eatWhile(/[a-z%]/i),["number","unit"]):"!"==f?(e.next(),[e.match(/^(important|optional)/i)?"keyword":"operator","important"]):"."==f&&e.match(/^\.[a-z][\w-]*/i)?["qualifier","qualifier"]:e.match(D)?("("==e.peek()&&(t.tokenize=H),["property","word"]):e.match(/^[a-z][\w-]*\(/i)?(e.backUp(1),["keyword","mixin"]):e.match(/^(\+|-)[a-z][\w-]*\(/i)?(e.backUp(1),["keyword","block-mixin"]):e.string.match(/^\s*&/)&&e.match(/^[-_]+[a-z][\w-]*/)?["qualifier","qualifier"]:e.match(/^(\/|&)(-|_|:|\.|#|[a-z])/)?(e.backUp(1),["variable-3","reference"]):e.match(/^&{1}\s*$/)?["variable-3","reference"]:e.match(L)?["operator","operator"]:e.match(/^\$?[-_]*[a-z0-9]+[\w-]*/i)?e.match(/^(\.|\[)[\w-\'\"\]]+/i,!1)&&!Y(e.current())?(e.match(/\./),["variable-2","variable-name"]):["variable-2","word"]:e.match(I)?["operator",e.current()]:/[:;,{}\[\]\(\)]/.test(f)?(e.next(),[null,f]):(e.next(),[null,null])}function R(e,t){var n,i=!1;while(null!=(n=e.next())){if(i&&"/"==n){t.tokenize=null;break}i="*"==n}return["comment","comment"]}function V(e){return function(t,n){var i,r=!1;while(null!=(i=t.next())){if(i==e&&!r){")"==e&&t.backUp(1);break}r=!r&&"\\"==i}return(i==e||!r&&")"!=e)&&(n.tokenize=null),["string","string"]}}function H(e,t){return e.next(),e.match(/\s*[\"\')]/,!1)?t.tokenize=null:t.tokenize=V(")"),[null,"("]}function W(e,t,n,i){this.type=e,this.indent=t,this.prev=n,this.line=i||{firstWord:"",indent:0}}function q(e,t,n,i){return i=i>=0?i:w,e.context=new W(n,t.indentation()+i,e.context),n}function U(e,t){var n=e.context.indent-w;return t=t||!1,e.context=e.context.prev,t&&(e.context.indent=n),e.context.type}function K(e,t,n){return z[n.context.type](e,t,n)}function G(e,t,n,i){for(var r=i||1;r>0;r--)n.context=n.context.prev;return K(e,t,n)}function Y(e){return e.toLowerCase()in _}function X(e){return e=e.toLowerCase(),e in C||e in N}function Z(e){return e.toLowerCase()in P}function Q(e){return e.toLowerCase().match($)}function J(e){var t=e.toLowerCase(),n="variable-2";return Y(e)?n="tag":Z(e)?n="block-keyword":X(e)?n="property":t in O||t in F?n="atom":"return"==t||t in T?n="keyword":e.match(/^[A-Z]/)&&(n="string"),n}function ee(e,t){return re(t)&&("{"==e||"]"==e||"hash"==e||"qualifier"==e)||"block-mixin"==e}function te(e,t){return"{"==e&&t.match(/^\s*\$?[\w-]+/i,!1)}function ne(e,t){return":"==e&&t.match(/^[a-z-]+/,!1)}function ie(e){return e.sol()||e.string.match(new RegExp("^\\s*"+v(e.current())))}function re(e){return e.eol()||e.match(/^\s*$/,!1)}function oe(e){var t=/^\s*[-_]*[a-z0-9]+[\w-]*/i,n="string"==typeof e?e.match(t):e.string.match(t);return n?n[0].replace(/^\s*/,""):""}return z.block=function(e,t,n){if("comment"==e&&ie(t)||","==e&&re(t)||"mixin"==e)return q(n,t,"block",0);if(te(e,t))return q(n,t,"interpolation");if(re(t)&&"]"==e&&!/^\s*(\.|#|:|\[|\*|&)/.test(t.string)&&!Y(oe(t)))return q(n,t,"block",0);if(ee(e,t))return q(n,t,"block");if("}"==e&&re(t))return q(n,t,"block",0);if("variable-name"==e)return t.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/)||Z(oe(t))?q(n,t,"variableName"):q(n,t,"variableName",0);if("="==e)return re(t)||Z(oe(t))?q(n,t,"block"):q(n,t,"block",0);if("*"==e&&(re(t)||t.match(/\s*(,|\.|#|\[|:|{)/,!1)))return y="tag",q(n,t,"block");if(ne(e,t))return q(n,t,"pseudo");if(/@(font-face|media|supports|(-moz-)?document)/.test(e))return q(n,t,re(t)?"block":"atBlock");if(/@(-(moz|ms|o|webkit)-)?keyframes$/.test(e))return q(n,t,"keyframes");if(/@extends?/.test(e))return q(n,t,"extend",0);if(e&&"@"==e.charAt(0))return t.indentation()>0&&X(t.current().slice(1))?(y="variable-2","block"):/(@import|@require|@charset)/.test(e)?q(n,t,"block",0):q(n,t,"block");if("reference"==e&&re(t))return q(n,t,"block");if("("==e)return q(n,t,"parens");if("vendor-prefixes"==e)return q(n,t,"vendorPrefixes");if("word"==e){var i=t.current();if(y=J(i),"property"==y)return ie(t)?q(n,t,"block",0):(y="atom","block");if("tag"==y){if(/embed|menu|pre|progress|sub|table/.test(i)&&X(oe(t)))return y="atom","block";if(t.string.match(new RegExp("\\[\\s*"+i+"|"+i+"\\s*\\]")))return y="atom","block";if(k.test(i)&&(ie(t)&&t.string.match(/=/)||!ie(t)&&!t.string.match(/^(\s*\.|#|\&|\[|\/|>|\*)/)&&!Y(oe(t))))return y="variable-2",Z(oe(t))?"block":q(n,t,"block",0);if(re(t))return q(n,t,"block")}if("block-keyword"==y)return y="keyword",t.current(/(if|unless)/)&&!ie(t)?"block":q(n,t,"block");if("return"==i)return q(n,t,"block",0);if("variable-2"==y&&t.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/))return q(n,t,"block")}return n.context.type},z.parens=function(e,t,n){if("("==e)return q(n,t,"parens");if(")"==e)return"parens"==n.context.prev.type?U(n):t.string.match(/^[a-z][\w-]*\(/i)&&re(t)||Z(oe(t))||/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(oe(t))||!t.string.match(/^-?[a-z][\w-\.\[\]\'\"]*\s*=/)&&Y(oe(t))?q(n,t,"block"):t.string.match(/^[\$-]?[a-z][\w-\.\[\]\'\"]*\s*=/)||t.string.match(/^\s*(\(|\)|[0-9])/)||t.string.match(/^\s+[a-z][\w-]*\(/i)||t.string.match(/^\s+[\$-]?[a-z]/i)?q(n,t,"block",0):re(t)?q(n,t,"block"):q(n,t,"block",0);if(e&&"@"==e.charAt(0)&&X(t.current().slice(1))&&(y="variable-2"),"word"==e){var i=t.current();y=J(i),"tag"==y&&k.test(i)&&(y="variable-2"),"property"!=y&&"to"!=i||(y="atom")}return"variable-name"==e?q(n,t,"variableName"):ne(e,t)?q(n,t,"pseudo"):n.context.type},z.vendorPrefixes=function(e,t,n){return"word"==e?(y="property",q(n,t,"block",0)):U(n)},z.pseudo=function(e,t,n){return X(oe(t.string))?G(e,t,n):(t.match(/^[a-z-]+/),y="variable-3",re(t)?q(n,t,"block"):U(n))},z.atBlock=function(e,t,n){if("("==e)return q(n,t,"atBlock_parens");if(ee(e,t))return q(n,t,"block");if(te(e,t))return q(n,t,"interpolation");if("word"==e){var i=t.current().toLowerCase();if(y=/^(only|not|and|or)$/.test(i)?"keyword":E.hasOwnProperty(i)?"tag":A.hasOwnProperty(i)?"attribute":M.hasOwnProperty(i)?"property":S.hasOwnProperty(i)?"string-2":J(t.current()),"tag"==y&&re(t))return q(n,t,"block")}return"operator"==e&&/^(not|and|or)$/.test(t.current())&&(y="keyword"),n.context.type},z.atBlock_parens=function(e,t,n){if("{"==e||"}"==e)return n.context.type;if(")"==e)return re(t)?q(n,t,"block"):q(n,t,"atBlock");if("word"==e){var i=t.current().toLowerCase();return y=J(i),/^(max|min)/.test(i)&&(y="property"),"tag"==y&&(y=k.test(i)?"variable-2":"atom"),n.context.type}return z.atBlock(e,t,n)},z.keyframes=function(e,t,n){return"0"==t.indentation()&&("}"==e&&ie(t)||"]"==e||"hash"==e||"qualifier"==e||Y(t.current()))?G(e,t,n):"{"==e?q(n,t,"keyframes"):"}"==e?ie(t)?U(n,!0):q(n,t,"keyframes"):"unit"==e&&/^[0-9]+\%$/.test(t.current())?q(n,t,"keyframes"):"word"==e&&(y=J(t.current()),"block-keyword"==y)?(y="keyword",q(n,t,"keyframes")):/@(font-face|media|supports|(-moz-)?document)/.test(e)?q(n,t,re(t)?"block":"atBlock"):"mixin"==e?q(n,t,"block",0):n.context.type},z.interpolation=function(e,t,n){return"{"==e&&U(n)&&q(n,t,"block"),"}"==e?t.string.match(/^\s*(\.|#|:|\[|\*|&|>|~|\+|\/)/i)||t.string.match(/^\s*[a-z]/i)&&Y(oe(t))?q(n,t,"block"):!t.string.match(/^(\{|\s*\&)/)||t.match(/\s*[\w-]/,!1)?q(n,t,"block",0):q(n,t,"block"):"variable-name"==e?q(n,t,"variableName",0):("word"==e&&(y=J(t.current()),"tag"==y&&(y="atom")),n.context.type)},z.extend=function(e,t,n){return"["==e||"="==e?"extend":"]"==e?U(n):"word"==e?(y=J(t.current()),"extend"):U(n)},z.variableName=function(e,t,n){return"string"==e||"["==e||"]"==e||t.current().match(/^(\.|\$)/)?(t.current().match(/^\.[\w-]+/i)&&(y="variable-2"),"variableName"):G(e,t,n)},{startState:function(e){return{tokenize:null,state:"block",context:new W("block",e||0,null)}},token:function(e,t){return!t.tokenize&&e.eatSpace()?null:(p=(t.tokenize||B)(e,t),p&&"object"==_typeof2(p)&&(b=p[1],p=p[0]),y=p,t.state=z[t.state](b,e,t),y)},indent:function(e,t,n){var i=e.context,r=t&&t.charAt(0),o=i.indent,a=oe(t),s=n.match(/^\s*/)[0].replace(/\t/g,x).length,l=e.context.prev?e.context.prev.line.firstWord:"",c=e.context.prev?e.context.prev.line.indent:s;return i.prev&&("}"==r&&("block"==i.type||"atBlock"==i.type||"keyframes"==i.type)||")"==r&&("parens"==i.type||"atBlock_parens"==i.type)||"{"==r&&"at"==i.type)?o=i.indent-w:/(\})/.test(r)||(/@|\$|\d/.test(r)||/^\{/.test(t)||/^\s*\/(\/|\*)/.test(t)||/^\s*\/\*/.test(l)||/^\s*[\w-\.\[\]\'\"]+\s*(\?|:|\+)?=/i.test(t)||/^(\+|-)?[a-z][\w-]*\(/i.test(t)||/^return/.test(t)||Z(a)?o=s:/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(r)||Y(a)?o=/\,\s*$/.test(l)?c:/^\s+/.test(n)&&(/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(l)||Y(l))?s<=c?c:c+w:s:/,\s*$/.test(n)||!Q(a)&&!X(a)||(o=Z(l)?s<=c?c:c+w:/^\{/.test(l)?s<=c?s:c+w:Q(l)||X(l)?s>=c?c:s:/^(\.|#|:|\[|\*|&|@|\+|\-|>|~|\/)/.test(l)||/=\s*$/.test(l)||Y(l)||/^\$[\w-\.\[\]\'\"]/.test(l)?c+w:s)),o},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"indent"}}));var t=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","bgsound","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","nobr","noframes","noscript","object","ol","optgroup","option","output","p","param","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","var","video"],n=["domain","regexp","url-prefix","url"],i=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],r=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid"],o=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-position","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode","font-smoothing","osx-font-smoothing"],a=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],s=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],l=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],c=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scale","scale3d","scaleX","scaleY","scaleZ","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","x-large","x-small","xor","xx-large","xx-small","bicubic","optimizespeed","grayscale","row","row-reverse","wrap","wrap-reverse","column-reverse","flex-start","flex-end","space-between","space-around","unset"],u=["in","and","or","not","is not","is a","is","isnt","defined","if unless"],d=["for","if","else","unless","from","to"],h=["null","true","false","href","title","type","not-allowed","readonly","disabled"],f=["@font-face","@keyframes","@media","@viewport","@page","@host","@supports","@block","@css"],p=t.concat(n,i,r,o,a,l,c,s,u,d,h,f);function m(e){return e=e.sort((function(e,t){return t>e})),new RegExp("^(("+e.join(")|(")+"))\\b")}function g(e){for(var t={},n=0;n<e.length;++n)t[e[n]]=!0;return t}function v(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}e.registerHelper("hintWords","stylus",p),e.defineMIME("text/x-styl","stylus")}))},"76f2":function(e,t,n){"use strict";var i=n("8cca"),r=n.n(i);r.a},"77a7":function(e,t){var n=1/0,i=Math.abs,r=Math.pow,o=Math.floor,a=Math.log,s=Math.LN2,l=function(e,t,l){var c,u,d,h=new Array(l),f=8*l-t-1,p=(1<<f)-1,m=p>>1,g=23===t?r(2,-24)-r(2,-77):0,v=e<0||0===e&&1/e<0?1:0,b=0;for(e=i(e),e!=e||e===n?(u=e!=e?1:0,c=p):(c=o(a(e)/s),e*(d=r(2,-c))<1&&(c--,d*=2),e+=c+m>=1?g/d:g*r(2,1-m),e*d>=2&&(c++,d/=2),c+m>=p?(u=0,c=p):c+m>=1?(u=(e*d-1)*r(2,t),c+=m):(u=e*r(2,m-1)*r(2,t),c=0));t>=8;h[b++]=255&u,u/=256,t-=8);for(c=c<<t|u,f+=t;f>0;h[b++]=255&c,c/=256,f-=8);return h[--b]|=128*v,h},c=function(e,t){var i,o=e.length,a=8*o-t-1,s=(1<<a)-1,l=s>>1,c=a-7,u=o-1,d=e[u--],h=127&d;for(d>>=7;c>0;h=256*h+e[u],u--,c-=8);for(i=h&(1<<-c)-1,h>>=-c,c+=t;c>0;i=256*i+e[u],u--,c-=8);if(0===h)h=1-l;else{if(h===s)return i?NaN:d?-n:n;i+=r(2,t),h-=l}return(d?-1:1)*i*r(2,h-t)};e.exports={pack:l,unpack:c}},"77e9":function(e,t,n){var i=n("7a41");e.exports=function(e){if(!i(e))throw TypeError(e+" is not an object!");return e}},7839:function(e,t){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"79ef":function ef(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;__webpack_require__("c975"),__webpack_require__("ac1f"),__webpack_require__("466d"),__webpack_require__("5319"),__webpack_require__("1276");var _typeof=__webpack_require__("7037");(function(e){"object"==_typeof(exports)&&"object"==_typeof(module)?e(__webpack_require__("f3a7")):(__WEBPACK_AMD_DEFINE_ARRAY__=[__webpack_require__("f3a7")],__WEBPACK_AMD_DEFINE_FACTORY__=e,__WEBPACK_AMD_DEFINE_RESULT__="function"===typeof __WEBPACK_AMD_DEFINE_FACTORY__?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__,void 0===__WEBPACK_AMD_DEFINE_RESULT__||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))})((function(CodeMirror){"use strict";CodeMirror.defineMode("atformula",(function(e,t){t.client;var n=t.atoms||{false:!0,true:!0,null:!0},i=t.builtin||{},r=t.keywords||{},o=t.atKeywords||{},a=(t.operatorChars,t.support||{}),s=(t.hooks,t.dateSQL||{date:!0,time:!0,timestamp:!0}),l=(t.backslashStringEscapes,t.brackets||/^[\{}\(\)\[\]]/),c=t.punctuation||/^[;.,:]/,u=t.bokeys||{};function d(e,t){var d=e.next();if(a.hexNumber&&("0"==d&&e.match(/^[xX][0-9a-fA-F]+/)||("x"==d||"X"==d)&&e.match(/^'[0-9a-fA-F]+'/)))return"number";if(l.test(d))return e.eatWhile(l),"bracket";if(c.test(d))return e.eatWhile(c),"punctuation";e.eatWhile(/^[_\w\d]/);var h=e.current();return s.hasOwnProperty(h)&&(e.match(/^( )+'[^']*'/)||e.match(/^( )+"[^"]*"/))?"number":n.hasOwnProperty(h)?"atom":i.hasOwnProperty(h)?"builtin":r.hasOwnProperty(h)||o.hasOwnProperty(h)?"keyword":u.hasOwnProperty(h)?"param":"test"}function h(e,t,n){t.context={prev:t.context,indent:e.indentation(),col:e.column(),type:n}}function f(e){e.indent=e.context.indent,e.context=e.context.prev}return{startState:function(){return{tokenize:d,context:null}},token:function(e,t){if(e.sol()&&t.context&&null==t.context.align&&(t.context.align=!1),t.tokenize==d&&e.eatSpace())return null;var n=t.tokenize(e,t);if("comment"==n)return n;t.context&&null==t.context.align&&(t.context.align=!0);var i=e.current();return"("==i?h(e,t,")"):"["==i?h(e,t,"]"):t.context&&t.context.type==i&&f(t),n},indent:function(t,n){var i=t.context;if(!i)return CodeMirror.Pass;var r=n.charAt(0)==i.type;return i.align?i.col+(r?0:1):i.indent+(r?0:e.indentUnit)},blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:a.commentSlashSlash?"//":a.commentHash?"#":"--",closeBrackets:"()[]{}''\"\"``"}})),function(){var defaultAtExpressKeywords="@AWS5SessionId() @AWS5WebURL(*url) @TaskSameHuman(*nextUserTaskDefId,isPerformer,taskInstId) @abs(*num) @activityDefDurationTime(taskInstId) @activityDefExt(taskInstId) @activityDefId(taskInstId) @activityDefName(taskInstId) @activityDefNo(taskInstId) @activityDefWarningTime(taskInstId) @and(*logical1,*logical2,logical3,logical4,logical5) @ascii(*str) @boItemPropVal(*boName,*fieldName,*prop) @calc(*expression) @char(*ascii) @clientIp @companyExt1(contextType,contextId) @companyExt2(contextType,contextId) @companyExt3(contextType,contextId) @companyExt4(contextType,contextId) @companyExt5(contextType,contextId) @companyId(contextType,contextId) @companyName(contextType,contextId) @companyNo(contextType,contextId) @companyType(contextType,contextId) @date() @date2Chinese(*date) @dateAdd(*datepart,*number,*date) @datetime() @dayOfMonth(date) @dayOfYear(date) @decode(*str) @departmentExt1(contextType,contextId) @departmentExt2(contextType,contextId) @departmentExt3(contextType,contextId) @departmentExt4(contextType,contextId) @departmentExt5(contextType,contextId) @departmentId(contextType,contextId) @departmentManager(isIgnoreMe,contextType,contextId) @departmentName(contextType,contextId) @departmentNo(contextType,contextId) @departmentPathId(contextType,contextId) @departmentPathName(contextType,contextId) @departmentType(contextType,contextId) @departmentZone(contextType,contextId) @deviceType() @dictValue(*dictKey,*itemNo,fieldName) @encode(*str) @equals(*str1,*str2) @execJXPath(*jxpath) @execJavaBean(*appId,*className,param) @form(*boName,*fieldName,processInstId) @formDefId() @formItemDefId() @formTheme @getAppName(appId) @getDWCondition(*fieldName,*fieldValue) @getHistoryTaskNum(@uid) @getJgdwType @getMyCreateTaskNum(@uid) @getProperty(*name,appId) @getTodoTaskNum(@uid) @gridAvg(*boName,*fieldName,sqlClause,processInstId) @gridCount(*boName,sqlClause,processInstId) @gridFirst(*boName,*fieldName,sqlClause,processInstId) @gridLast(*boName,*fieldName,sqlClause,processInstId) @gridMax(*boName,*fieldName,sqlClause,processInstId) @gridMin(*boName,*fieldName,sqlClause,processInstId) @gridSum(*boName,*fieldName,sqlClause,processInstId) @hour(datetime) @i18n(*key,*appId,lang) @if(*logical,*valueTrue,*valueFalse) @in(*str1,*str2,str3,str4,str5) @indexOf(*str1,*str2) @isActive(*appId) @isDepartmentManager(contextType,contextId) @isLeapYear(date) @isProcessEnd(contextType,contextId) @isSubProcess(contextType,contextId) @isTaskEnd(taskInstId) @lang() @lastIndexOf(*str1,*str2) @len(*str) @lessThan(*num1,*num2) @loadFile(*appId,*fileName) @lower(*str) @lpad(*str,*len,padStr) @max(*num1,*num2,num3,num4,num5) @md5(*str) @min(*num1,*num2,num3,num4,num5) @minute(datetime) @mod(*num1,*num2) @month(date) @monthBegin(date) @monthEnd(date) @nextDate(date) @nullValue(*str1,*str2) @numAdd(*num1,*num2,num3,num4,num5) @numDiv(*num1,*num2,scale) @numMul(*num1,*num2) @numSub(*num1,*num2,num3,num4,num5) @or(*logical1,*logical2,logical3,logical4,logical5) @parentForm(*boName,*parentBoName,*parentFieldName) @phonetic(*str) @portalUrl() @preDate(date) @processBusinessKey(contextType,contextId) @processComment(*activityId,*policy,contextType,contextId) @processCostTime(contextType,contextId) @processCreateTime(contextType,contextId) @processCreateUser(contextType,contextId) @processDefAppId(contextType,contextId) @processDefDurationTime(contextType,contextId) @processDefGroupId(contextType,contextId) @processDefGroupName(contextType,contextId) @processDefId(contextType,contextId) @processDefName(contextType,contextId) @processDefVersionId(contextType,contextId) @processDefWarningTime(contextType,contextId) @processEndTime(contextType,contextId) @processExpireTime(contextType,contextId) @processExt1(contextType,contextId) @processExt2(contextType,contextId) @processExt3(contextType,contextId) @processExt4(contextType,contextId) @processExt5(contextType,contextId) @processExt6(contextType,contextId) @processExt7(contextType,contextId) @processExt8(contextType,contextId) @processId(businessKey) @processParentId(contextType,contextId) @processParentTaskId(contextType,contextId) @processStartTime(contextType,contextId) @processStatus(contextType,contextId) @processTitle(contextType,contextId) @processVar(*varName,contextType,contextId) @quarter(date) @quarterBegin(date) @quarterEnd(date) @replace(*str,*oldStr,*newStr) @rmb(*num) @roleExt1(contextType,contextId) @roleExt2(contextType,contextId) @roleExt3(contextType,contextId) @roleExt4(contextType,contextId) @roleExt5(contextType,contextId) @roleName(contextType,contextId) @roleNameKey(contextType,contextId) @roleNoUsers(*no,delimiter) @roleUsers(*roleId,delimiter) @round(*num,scale) @rpad(*str,*len,padStr) @second(datetime) @sequence(varName,padLen,padStr) @sequenceMonth(varName,padLen,padStr) @sequenceYear(varName,padLen,padStr) @serverInstance() @serverProperty(*name) @sha256(*str,*password) @sid() @sqlClauseOfManager(*fieldName,isSubDepartment) @sqlSet(*sql,separator,cc) @sqlValue(*sql,cc) @strAdd(str1,str2) @substring(*str,begin,end) @sysProperty(name) @taskBeginTime(taskInstId) @taskCostTime(taskInstId) @taskDueTime(taskInstId) @taskEndTime(taskInstId) @taskExpireTime(taskInstId) @taskExt1(taskInstId) @taskExt2(taskInstId) @taskExt3(taskInstId) @taskExt4(taskInstId) @taskExt5(taskInstId) @taskExt6(taskInstId) @taskExt7(taskInstId) @taskExt8(taskInstId) @taskHumanType(taskInstId) @taskId() @taskOwner(taskInstId) @taskPreHumanTaskId(taskInstId) @taskPreTaskId(taskInstId) @taskPriority(taskInstId) @taskReadTime(taskInstId) @taskStatus(taskInstId) @taskTarget(taskInstId) @taskTitle(taskInstId) @teamUsers(*teamId,delimiter) @time(datetime) @timestemp() @trim(*str) @uid(uidAliasName,delimiter) @upper(*str) @urlDecode(*str) @urlEncode(*str,charset) @user(key,uidAliasName,delimiter) @userEmail(uidAliasName,delimiter) @userExt1(uidAliasName,delimiter) @userExt2(uidAliasName,delimiter) @userExt3(uidAliasName,delimiter) @userExt4(uidAliasName,delimiter) @userExt5(uidAliasName,delimiter) @userManager(uidAliasName,type,delimiter,includeSelf) @userMobile(uidAliasName,delimiter) @userName(uidAliasName,delimiter) @userNo(uidAliasName,delimiter) @userPhoto(uidAliasName) @userPositionLayer(uidAliasName,delimiter) @userPositionName(uidAliasName,delimiter) @userPositionNo(uidAliasName,delimiter) @userTel(uidAliasName,delimiter) @userUniqueId(uidAliasName,delimiter) @uuid() @weekDay(date) @weekOfYear(date) @year(date) ",keywords="SUM MAX MIN AVG COUNT ",atParams="",isSeverKeys=!1,exPressData="undefined"!==typeof window.atExpressKeywords?window:window.settingParam&&"undefined"!==typeof window.settingParam.atExpressKeywords?window.settingParam:"undefined"!==typeof settingParam?eval("settingParam"):null;null!=exPressData&&null!=exPressData.atExpressKeywords?(defaultAtExpressKeywords=exPressData.atExpressKeywords,isSeverKeys=!0):keywords+=defaultAtExpressKeywords.replace(/\(.*?\)/g,""),""!==atParams&&null!=exPressData&&null!=exPressData.atExpressParams&&(atParams=exPressData.atExpressParams);var boKeywords="";function set(e){for(var t={},n=e.split(" "),i=0;i<n.length;++i)t[n[i]]=!0;return t}function getKeyWords(){var e={},t={};if(isSeverKeys){t=JSON.parse(defaultAtExpressKeywords);for(var n=0;n<t.length;n++){var i=t[n];e[i.key]=i,keywords+=i.key.replace(/\(.*?\)/g," ")}}else e=set(defaultAtExpressKeywords);for(var r=0;r<boKeywords.length;r++)e[boKeywords[r].id]=boKeywords[r],keywords+=boKeywords[r].id+" ",boKeywords[r].id.indexOf(".")>-1&&(keywords+=boKeywords[r].id.split(".")[1]+" ");return e}null!=exPressData&&null!=exPressData.boExpressKeywords&&(boKeywords=exPressData.boExpressKeywords),CodeMirror.defineMIME("awsAt",{name:"atformula",keywords:getKeyWords(),atKeywords:set(keywords),atoms:set("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,bokeys:set(atParams)})}()}))}).call(this,__webpack_require__("62e4")(module))},"7a41":function(e,t){e.exports=function(e){return"object"===_typeof2(e)?null!==e:"function"===typeof e}},"7a77":function(e,t,n){"use strict";function i(e){this.message=e}i.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},i.prototype.__CANCEL__=!0,e.exports=i},"7aac":function(e,t,n){"use strict";var i=n("c532");e.exports=i.isStandardBrowserEnv()?function(){return{write:function(e,t,n,r,o,a){var s=[];s.push(e+"="+encodeURIComponent(t)),i.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),i.isString(r)&&s.push("path="+r),i.isString(o)&&s.push("domain="+o),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},"7b00":function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";function t(e){for(var t={},n=0;n<e.length;++n)t[e[n].toLowerCase()]=!0;return t}e.defineMode("css",(function(t,n){var i=n.inline;n.propertyKeywords||(n=e.resolveMode("text/css"));var r,o,a=t.indentUnit,s=n.tokenHooks,l=n.documentTypes||{},c=n.mediaTypes||{},u=n.mediaFeatures||{},d=n.mediaValueKeywords||{},h=n.propertyKeywords||{},f=n.nonStandardPropertyKeywords||{},p=n.fontProperties||{},m=n.counterDescriptors||{},g=n.colorKeywords||{},v=n.valueKeywords||{},b=n.allowNested,y=n.lineComment,w=!0===n.supportsAtComponent,x=!1!==t.highlightNonStandardPropertyKeywords;function _(e,t){return r=t,e}function k(e,t){var n=e.next();if(s[n]){var i=s[n](e,t);if(!1!==i)return i}return"@"==n?(e.eatWhile(/[\w\\\-]/),_("def",e.current())):"="==n||("~"==n||"|"==n)&&e.eat("=")?_(null,"compare"):'"'==n||"'"==n?(t.tokenize=C(n),t.tokenize(e,t)):"#"==n?(e.eatWhile(/[\w\\\-]/),_("atom","hash")):"!"==n?(e.match(/^\s*\w*/),_("keyword","important")):/\d/.test(n)||"."==n&&e.eat(/\d/)?(e.eatWhile(/[\w.%]/),_("number","unit")):"-"!==n?/[,+>*\/]/.test(n)?_(null,"select-op"):"."==n&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?_("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(n)?_(null,n):e.match(/[\w-.]+(?=\()/)?(/^(url(-prefix)?|domain|regexp)$/.test(e.current().toLowerCase())&&(t.tokenize=S),_("variable callee","variable")):/[\w\\\-]/.test(n)?(e.eatWhile(/[\w\\\-]/),_("property","word")):_(null,null):/[\d.]/.test(e.peek())?(e.eatWhile(/[\w.%]/),_("number","unit")):e.match(/^-[\w\\\-]*/)?(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?_("variable-2","variable-definition"):_("variable-2","variable")):e.match(/^\w+-/)?_("meta","meta"):void 0}function C(e){return function(t,n){var i,r=!1;while(null!=(i=t.next())){if(i==e&&!r){")"==e&&t.backUp(1);break}r=!r&&"\\"==i}return(i==e||!r&&")"!=e)&&(n.tokenize=null),_("string","string")}}function S(e,t){return e.next(),e.match(/\s*[\"\')]/,!1)?t.tokenize=null:t.tokenize=C(")"),_(null,"(")}function O(e,t,n){this.type=e,this.indent=t,this.prev=n}function T(e,t,n,i){return e.context=new O(n,t.indentation()+(!1===i?0:a),e.context),n}function E(e){return e.context.prev&&(e.context=e.context.prev),e.context.type}function D(e,t,n){return N[n.context.type](e,t,n)}function M(e,t,n,i){for(var r=i||1;r>0;r--)n.context=n.context.prev;return D(e,t,n)}function A(e){var t=e.current().toLowerCase();o=v.hasOwnProperty(t)?"atom":g.hasOwnProperty(t)?"keyword":"variable"}var N={top:function(e,t,n){if("{"==e)return T(n,t,"block");if("}"==e&&n.context.prev)return E(n);if(w&&/@component/i.test(e))return T(n,t,"atComponentBlock");if(/^@(-moz-)?document$/i.test(e))return T(n,t,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(e))return T(n,t,"atBlock");if(/^@(font-face|counter-style)/i.test(e))return n.stateArg=e,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(e))return"keyframes";if(e&&"@"==e.charAt(0))return T(n,t,"at");if("hash"==e)o="builtin";else if("word"==e)o="tag";else{if("variable-definition"==e)return"maybeprop";if("interpolation"==e)return T(n,t,"interpolation");if(":"==e)return"pseudo";if(b&&"("==e)return T(n,t,"parens")}return n.context.type},block:function(e,t,n){if("word"==e){var i=t.current().toLowerCase();return h.hasOwnProperty(i)?(o="property","maybeprop"):f.hasOwnProperty(i)?(o=x?"string-2":"property","maybeprop"):b?(o=t.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(o+=" error","maybeprop")}return"meta"==e?"block":b||"hash"!=e&&"qualifier"!=e?N.top(e,t,n):(o="error","block")},maybeprop:function(e,t,n){return":"==e?T(n,t,"prop"):D(e,t,n)},prop:function(e,t,n){if(";"==e)return E(n);if("{"==e&&b)return T(n,t,"propBlock");if("}"==e||"{"==e)return M(e,t,n);if("("==e)return T(n,t,"parens");if("hash"!=e||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(t.current())){if("word"==e)A(t);else if("interpolation"==e)return T(n,t,"interpolation")}else o+=" error";return"prop"},propBlock:function(e,t,n){return"}"==e?E(n):"word"==e?(o="property","maybeprop"):n.context.type},parens:function(e,t,n){return"{"==e||"}"==e?M(e,t,n):")"==e?E(n):"("==e?T(n,t,"parens"):"interpolation"==e?T(n,t,"interpolation"):("word"==e&&A(t),"parens")},pseudo:function(e,t,n){return"meta"==e?"pseudo":"word"==e?(o="variable-3",n.context.type):D(e,t,n)},documentTypes:function(e,t,n){return"word"==e&&l.hasOwnProperty(t.current())?(o="tag",n.context.type):N.atBlock(e,t,n)},atBlock:function(e,t,n){if("("==e)return T(n,t,"atBlock_parens");if("}"==e||";"==e)return M(e,t,n);if("{"==e)return E(n)&&T(n,t,b?"block":"top");if("interpolation"==e)return T(n,t,"interpolation");if("word"==e){var i=t.current().toLowerCase();o="only"==i||"not"==i||"and"==i||"or"==i?"keyword":c.hasOwnProperty(i)?"attribute":u.hasOwnProperty(i)?"property":d.hasOwnProperty(i)?"keyword":h.hasOwnProperty(i)?"property":f.hasOwnProperty(i)?x?"string-2":"property":v.hasOwnProperty(i)?"atom":g.hasOwnProperty(i)?"keyword":"error"}return n.context.type},atComponentBlock:function(e,t,n){return"}"==e?M(e,t,n):"{"==e?E(n)&&T(n,t,b?"block":"top",!1):("word"==e&&(o="error"),n.context.type)},atBlock_parens:function(e,t,n){return")"==e?E(n):"{"==e||"}"==e?M(e,t,n,2):N.atBlock(e,t,n)},restricted_atBlock_before:function(e,t,n){return"{"==e?T(n,t,"restricted_atBlock"):"word"==e&&"@counter-style"==n.stateArg?(o="variable","restricted_atBlock_before"):D(e,t,n)},restricted_atBlock:function(e,t,n){return"}"==e?(n.stateArg=null,E(n)):"word"==e?(o="@font-face"==n.stateArg&&!p.hasOwnProperty(t.current().toLowerCase())||"@counter-style"==n.stateArg&&!m.hasOwnProperty(t.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},keyframes:function(e,t,n){return"word"==e?(o="variable","keyframes"):"{"==e?T(n,t,"top"):D(e,t,n)},at:function(e,t,n){return";"==e?E(n):"{"==e||"}"==e?M(e,t,n):("word"==e?o="tag":"hash"==e&&(o="builtin"),"at")},interpolation:function(e,t,n){return"}"==e?E(n):"{"==e||";"==e?M(e,t,n):("word"==e?o="variable":"variable"!=e&&"("!=e&&")"!=e&&(o="error"),"interpolation")}};return{startState:function(e){return{tokenize:null,state:i?"block":"top",stateArg:null,context:new O(i?"block":"top",e||0,null)}},token:function(e,t){if(!t.tokenize&&e.eatSpace())return null;var n=(t.tokenize||k)(e,t);return n&&"object"==_typeof2(n)&&(r=n[1],n=n[0]),o=n,"comment"!=r&&(t.state=N[t.state](r,e,t)),o},indent:function(e,t){var n=e.context,i=t&&t.charAt(0),r=n.indent;return"prop"!=n.type||"}"!=i&&")"!=i||(n=n.prev),n.prev&&("}"!=i||"block"!=n.type&&"top"!=n.type&&"interpolation"!=n.type&&"restricted_atBlock"!=n.type?(")"!=i||"parens"!=n.type&&"atBlock_parens"!=n.type)&&("{"!=i||"at"!=n.type&&"atBlock"!=n.type)||(r=Math.max(0,n.indent-a)):(n=n.prev,r=n.indent)),r},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:y,fold:"brace"}}));var n=["domain","regexp","url","url-prefix"],i=t(n),r=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],o=t(r),a=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover","prefers-color-scheme"],s=t(a),l=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive","dark","light"],c=t(l),u=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","all","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","binding","bleed","block-size","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","inset","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-height-step","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotate","rotation","rotation-point","row-gap","ruby-align","ruby-overhang","ruby-position","ruby-span","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-type","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-orientation","text-outline","text-overflow","text-rendering","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","touch-action","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","paint-order","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],d=t(u),h=["border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","margin-block","margin-block-end","margin-block-start","margin-inline","margin-inline-end","margin-inline-start","padding-block","padding-block-end","padding-block-start","padding-inline","padding-inline-end","padding-inline-start","scroll-snap-stop","scrollbar-3d-light-color","scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-track-color","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","shape-inside","zoom"],f=t(h),p=["font-display","font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],m=t(p),g=["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"],v=t(g),b=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],y=t(b),w=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","axis-pan","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fill-box","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","manipulation","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiple_mask_images","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","pinch-zoom","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","stroke-box","sub","subpixel-antialiased","svg_masks","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unidirectional-pan","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","view-box","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],x=t(w),_=n.concat(r).concat(a).concat(l).concat(u).concat(h).concat(b).concat(w);function k(e,t){var n,i=!1;while(null!=(n=e.next())){if(i&&"/"==n){t.tokenize=null;break}i="*"==n}return["comment","comment"]}e.registerHelper("hintWords","css",_),e.defineMIME("text/css",{documentTypes:i,mediaTypes:o,mediaFeatures:s,mediaValueKeywords:c,propertyKeywords:d,nonStandardPropertyKeywords:f,fontProperties:m,counterDescriptors:v,colorKeywords:y,valueKeywords:x,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=k,k(e,t))}},name:"css"}),e.defineMIME("text/x-scss",{mediaTypes:o,mediaFeatures:s,mediaValueKeywords:c,propertyKeywords:d,nonStandardPropertyKeywords:f,colorKeywords:y,valueKeywords:x,fontProperties:m,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=k,k(e,t)):["operator","operator"]},":":function(e){return!!e.match(/\s*\{/,!1)&&[null,null]},$:function(e){return e.match(/^[\w-]+/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(e){return!!e.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),e.defineMIME("text/x-less",{mediaTypes:o,mediaFeatures:s,mediaValueKeywords:c,propertyKeywords:d,nonStandardPropertyKeywords:f,colorKeywords:y,valueKeywords:x,fontProperties:m,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=k,k(e,t)):["operator","operator"]},"@":function(e){return e.eat("{")?[null,"interpolation"]:!e.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)&&(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),e.defineMIME("text/x-gss",{documentTypes:i,mediaTypes:o,mediaFeatures:s,propertyKeywords:d,nonStandardPropertyKeywords:f,fontProperties:m,counterDescriptors:v,colorKeywords:y,valueKeywords:x,supportsAtComponent:!0,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=k,k(e,t))}},name:"css",helperType:"gss"})}))},"7b0b":function(e,t,n){var i=n("1d80");e.exports=function(e){return Object(i(e))}},"7b3e":function(e,t,n){"use strict";var i,r=n("a3de");
                                                  +/**
                                                  + * Checks if an event is supported in the current execution environment.
                                                  + *
                                                  + * NOTE: This will not work correctly for non-generic events such as `change`,
                                                  + * `reset`, `load`, `error`, and `select`.
                                                  + *
                                                  + * Borrows from Modernizr.
                                                  + *
                                                  + * @param {string} eventNameSuffix Event name, e.g. "click".
                                                  + * @param {?boolean} capture Check if the capture phase is supported.
                                                  + * @return {boolean} True if the event is supported.
                                                  + * @internal
                                                  + * @license Modernizr 3.0.0pre (Custom Build) | MIT
                                                  + */function o(e,t){if(!r.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,o=n in document;if(!o){var a=document.createElement("div");a.setAttribute(n,"return;"),o="function"===typeof a[n]}return!o&&i&&"wheel"===e&&(o=document.implementation.hasFeature("Events.wheel","3.0")),o}r.canUseDOM&&(i=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("","")),e.exports=o},"7c73":function(e,t,n){var i,r=n("825a"),o=n("37e8"),a=n("7839"),s=n("d012"),l=n("1be4"),c=n("cc12"),u=n("f772"),d=">",h="<",f="prototype",p="script",m=u("IE_PROTO"),g=function(){},v=function(e){return h+p+d+e+h+"/"+p+d},b=function(e){e.write(v("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){var e,t=c("iframe"),n="java"+p+":";return t.style.display="none",l.appendChild(t),t.src=String(n),e=t.contentWindow.document,e.open(),e.write(v("document.F=Object")),e.close(),e.F},w=function(){try{i=document.domain&&new ActiveXObject("htmlfile")}catch(t){}w=i?b(i):y();var e=a.length;while(e--)delete w[f][a[e]];return w()};s[m]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(g[f]=r(e),n=new g,g[f]=null,n[m]=e):n=w(),void 0===t?n:o(n,t)}},"7db0":function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").find,o=n("44d2"),a=n("ae40"),s="find",l=!0,c=a(s);s in[]&&Array(1)[s]((function(){l=!1})),i({target:"Array",proto:!0,forced:l||!c},{find:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),o(s)},"7dd0":function(e,t,n){"use strict";var i=n("23e7"),r=n("9ed3"),o=n("e163"),a=n("d2bb"),s=n("d44e"),l=n("9112"),c=n("6eeb"),u=n("b622"),d=n("c430"),h=n("3f8c"),f=n("ae93"),p=f.IteratorPrototype,m=f.BUGGY_SAFARI_ITERATORS,g=u("iterator"),v="keys",b="values",y="entries",w=function(){return this};e.exports=function(e,t,n,u,f,x,_){r(n,t,u);var k,C,S,O=function(e){if(e===f&&A)return A;if(!m&&e in D)return D[e];switch(e){case v:return function(){return new n(this,e)};case b:return function(){return new n(this,e)};case y:return function(){return new n(this,e)}}return function(){return new n(this)}},T=t+" Iterator",E=!1,D=e.prototype,M=D[g]||D["@@iterator"]||f&&D[f],A=!m&&M||O(f),N="Array"==t&&D.entries||M;if(N&&(k=o(N.call(new e)),p!==Object.prototype&&k.next&&(d||o(k)===p||(a?a(k,p):"function"!=typeof k[g]&&l(k,g,w)),s(k,T,!0,!0),d&&(h[T]=w))),f==b&&M&&M.name!==b&&(E=!0,A=function(){return M.call(this)}),d&&!_||D[g]===A||l(D,g,A),h[t]=A,f)if(C={values:O(b),keys:x?A:O(v),entries:O(y)},_)for(S in C)(m||E||!(S in D))&&c(D,S,C[S]);else i({target:t,proto:!0,forced:m||E},C);return C}},"7e12":function(e,t,n){var i=n("da84"),r=n("58a8").trim,o=n("5899"),a=i.parseFloat,s=1/a(o+"-0")!==-1/0;e.exports=s?function(e){var t=r(String(e)),n=a(t);return 0===n&&"-"==t.charAt(0)?-0:n}:a},"7f4d":function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){for(var t=1,n=arguments.length;t<n;t++){var i=arguments[t]||{};for(var r in i)if(i.hasOwnProperty(r)){var o=i[r];void 0!==o&&(e[r]=o)}}return e}},"7f9a":function(e,t,n){var i=n("da84"),r=n("8925"),o=i.WeakMap;e.exports="function"===typeof o&&/native code/.test(r(o))},"7fc1":function(e,t,n){n("a4d3"),n("e01a"),n("944a"),n("99af"),n("b0c0"),n("0c47"),n("23dc"),n("a9e3"),n("d3b7");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=86)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},4:function(e,t){e.exports=n("d010")},86:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-checkbox-group",attrs:{role:"group","aria-label":"checkbox-group"}},[e._t("default")],2)},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s={name:"ElCheckboxGroup",componentName:"ElCheckboxGroup",mixins:[a.a],inject:{elFormItem:{default:""}},props:{value:{},disabled:Boolean,min:Number,max:Number,size:String,fill:String,textColor:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxGroupSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",[e])}}},l=s,c=n(0),u=Object(c["a"])(l,i,r,!1,null,null,null);u.options.__file="packages/checkbox/src/checkbox-group.vue";var d=u.exports;d.install=function(e){e.component(d.name,d)},t["default"]=d}})},8119:function(e,t,n){n("693d"),n("dfe5"),n("301c"),n("4e71"),e.exports=n("5524").Symbol},81196:function(e,t,n){"use strict";var i=n("1377"),r=n.n(i);r.a},8122:function(e,t,n){"use strict";n("a4d3"),n("e01a"),n("d28b"),n("4160"),n("c975"),n("e260"),n("fb6a"),n("a9e3"),n("b64b"),n("d3b7"),n("ac1f"),n("25f0"),n("3ca3"),n("466d"),n("5319"),n("1276"),n("ddb0");var i=n("7037");t.__esModule=!0,t.isEmpty=t.isEqual=t.arrayEquals=t.looseEqual=t.capitalize=t.kebabCase=t.autoprefixer=t.isFirefox=t.isEdge=t.isIE=t.coerceTruthyValueToArray=t.arrayFind=t.arrayFindIndex=t.escapeRegexpString=t.valueEquals=t.generateId=t.getValueByPath=void 0;var r="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)};t.noop=u,t.hasOwn=d,t.toObject=f,t.getPropByPath=p,t.rafThrottle=y,t.objToArray=w;var o=n("8bbf"),a=l(o),s=n("a742");function l(e){return e&&e.__esModule?e:{default:e}}var c=Object.prototype.hasOwnProperty;function u(){}function d(e,t){return c.call(e,t)}function h(e,t){for(var n in t)e[n]=t[n];return e}function f(e){for(var t={},n=0;n<e.length;n++)e[n]&&h(t,e[n]);return t}function p(e,t,n){var i=e;t=t.replace(/\[(\w+)\]/g,".$1"),t=t.replace(/^\./,"");for(var r=t.split("."),o=0,a=r.length;o<a-1;++o){if(!i&&!n)break;var s=r[o];if(!(s in i)){if(n)throw new Error("please transfer a valid prop path to form item!");break}i=i[s]}return{o:i,k:r[o],v:i?i[r[o]]:null}}t.getValueByPath=function(e,t){t=t||"";for(var n=t.split("."),i=e,r=null,o=0,a=n.length;o<a;o++){var s=n[o];if(!i)break;if(o===a-1){r=i[s];break}i=i[s]}return r},t.generateId=function(){return Math.floor(1e4*Math.random())},t.valueEquals=function(e,t){if(e===t)return!0;if(!(e instanceof Array))return!1;if(!(t instanceof Array))return!1;if(e.length!==t.length)return!1;for(var n=0;n!==e.length;++n)if(e[n]!==t[n])return!1;return!0},t.escapeRegexpString=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return String(e).replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")};var m=t.arrayFindIndex=function(e,t){for(var n=0;n!==e.length;++n)if(t(e[n]))return n;return-1},g=(t.arrayFind=function(e,t){var n=m(e,t);return-1!==n?e[n]:void 0},t.coerceTruthyValueToArray=function(e){return Array.isArray(e)?e:e?[e]:[]},t.isIE=function(){return!a.default.prototype.$isServer&&!isNaN(Number(document.documentMode))},t.isEdge=function(){return!a.default.prototype.$isServer&&navigator.userAgent.indexOf("Edge")>-1},t.isFirefox=function(){return!a.default.prototype.$isServer&&!!window.navigator.userAgent.match(/firefox/i)},t.autoprefixer=function(e){if("object"!==("undefined"===typeof e?"undefined":r(e)))return e;var t=["transform","transition","animation"],n=["ms-","webkit-"];return t.forEach((function(t){var i=e[t];t&&i&&n.forEach((function(n){e[n+t]=i}))})),e},t.kebabCase=function(e){var t=/([^-])([A-Z])/g;return e.replace(t,"$1-$2").replace(t,"$1-$2").toLowerCase()},t.capitalize=function(e){return(0,s.isString)(e)?e.charAt(0).toUpperCase()+e.slice(1):e},t.looseEqual=function(e,t){var n=(0,s.isObject)(e),i=(0,s.isObject)(t);return n&&i?JSON.stringify(e)===JSON.stringify(t):!n&&!i&&String(e)===String(t)}),v=t.arrayEquals=function(e,t){if(e=e||[],t=t||[],e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(!g(e[n],t[n]))return!1;return!0},b=(t.isEqual=function(e,t){return Array.isArray(e)&&Array.isArray(t)?v(e,t):g(e,t)},t.isEmpty=function(e){if(null==e)return!0;if("boolean"===typeof e)return!1;if("number"===typeof e)return!e;if(e instanceof Error)return""===e.message;switch(Object.prototype.toString.call(e)){case"[object String]":case"[object Array]":return!e.length;case"[object File]":case"[object Map]":case"[object Set]":return!e.size;case"[object Object]":return!Object.keys(e).length}return!1});function y(e){var t=!1;return function(){for(var n=this,i=arguments.length,r=Array(i),o=0;o<i;o++)r[o]=arguments[o];t||(t=!0,window.requestAnimationFrame((function(i){e.apply(n,r),t=!1})))}}function w(e){return Array.isArray(e)?e:b(e)?[]:[e]}},"81d5":function(e,t,n){"use strict";var i=n("7b0b"),r=n("23cb"),o=n("50c4");e.exports=function(e){var t=i(this),n=o(t.length),a=arguments.length,s=r(a>1?arguments[1]:void 0,n),l=a>2?arguments[2]:void 0,c=void 0===l?n:r(l,n);while(c>s)t[s++]=e;return t}},"820c":function(e,t,n){"use strict";var i=n("391f"),r=n.n(i);r.a},"825a":function(e,t,n){var i=n("861d");e.exports=function(e){if(!i(e))throw TypeError(String(e)+" is not an object");return e}},"82bb":function(e,t,n){n("4de4"),n("c975"),n("a15b"),n("ac1f"),n("466d"),n("5319"),n("1276");var i=n("6374"),r=n("7037");function o(e,t,n){var i=document.createElement("span");return i.setAttribute("awsui-qtip","text:'"+e+"'"),i.setAttribute("class","CodeMirror-widget cm-field-"+n),i.setAttribute("data-field",e),i.innerHTML='<span class="cm-field cm-field-'+n+'">'+t+"</span>",i}function a(e,t){t.markText(e.from,e.to,{handleMouseEvents:!0,atomic:!0,replacedWith:o(e.field,e.label,e.invalid)}),window.CodeMirror.signal(t.doc.cm,"endCompletion",t.doc.cm)}function s(e,t){if(Array.isArray(e))for(var n=0,i=e.length;n<i&&!1!==t.apply(e[n],[n,e[n]]);n++);else if(e&&"object"==r(e))for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)&&!1===t.apply(e[o],[o,e[o]]))break}function l(e){return null==e}function c(e){var t=/(@form\([0-9a-zA-Z._]+,[0-9a-zA-Z._]+\))|(%_[0-9a-zA-Z._]+_%)|(\$\[[0-9a-zA-Z._]+\])|(#\[[0-9a-zA-Z._]+\])|(@form\(|@gridFirst\(|@gridLast\(|@gridSum\(|@gridAvg\(|@gridMax\(|@gridMin\()+([0-9a-zA-Z._]+,[0-9a-zA-Z._]+(?=,|\)))|(\\,|\\\(|\\\)|\\\\)|(@processVar\([\u4e00-\u9fa5_a-zA-Z0-9]+\))|(@env\([\u4e00-\u9fa5_a-zA-Z0-9]+[\,(ext1|ext2|ext3)]*\))|(@[uid|companyId|departmentId|roleId|teamId]+\([0-9,A-z._-]+\))/g;if(!(window.navigator.userAgent.indexOf("MSIE")>-1||window.navigator.userAgent.indexOf("Trident")>-1))return e.split(t).filter(Boolean);var n=function(){var n=[],r=e.match(t);if(0==r.length)n.push(e);else{var o,a=e,s=i(r);try{var l=function(){var e=o.value;a.replace(e,(function(t,i,r){i>0&&n.push(r.substring(0,i)),n.push(e),a=r.substring(i+t.length)}))};for(s.s();!(o=s.n()).done;)l()}catch(c){s.e(c)}finally{s.f()}a.length>0&&n.push(a)}return{v:n}}();return"object"===r(n)?n.v:void 0}window.initFormulaEditor=function(e,t){var n=[],i=[];if(e){var r=[e];s(r,(function(e,r){var o="",a=c(r);s(a,(function(n,r){if(!l(r)){var a,s,c="BOITEMNAME";if(/^(@form\([0-9a-zA-Z._]+,[0-9a-zA-Z._]+\))/.test(r)){if(s=r.replace("@form(","").replace(")","").replace(",","."),window.formulaLabelMap&&(a=window.formulaLabelMap[s]),l(a))return void(o+=r)}else if(/^(%_[0-9a-zA-Z._]+_%)/.test(r)){if(s=r.replace("%_","").replace("_%",""),window.formulaLabelMap&&(a=window.formulaLabelMap[s]),l(a))return void(o+=r);c="common_field"}else if(/^\\,/.test(r))a=",";else if(/^\\\(/.test(r))a="(";else if(/^\\\)/.test(r))a=")";else if(/^\\\\/.test(r))a="\\";else if(/^(\$\[[0-9a-zA-Z._]+\])/.test(r)){s=r.replace("$[","").replace("]","");var u=t.getOption("contextData");if("undefined"!=typeof u&&"undefined"!=typeof u.data&&Array.isArray(u.data))for(var d=u.data,h=0;h<d.length;h++){var f=d[h];if("string"==typeof f&&f.indexOf("$_BO_")>-1){var p=f.replace("$_BO_","");if(null!=p&&null!=window.formulaLabelMap[p]&&null!=window.formulaLabelMap[p][s]){a=window.formulaLabelMap[p][s];break}}}if("undefined"==typeof a&&window.formulaLabelMap&&(a=window.formulaLabelMap[s]),l(a))return void(o+=r);a="$["+a+"]",c="source"}else if(/^(#\[[0-9a-zA-Z._]+\])/.test(r)){s=r.replace("#[","").replace("]","");var m=t.getOption("contextData");if("undefined"!=typeof m&&"undefined"!=typeof m.data&&Array.isArray(m.data))for(var g=m.data,v=0;v<g.length;v++){var b=g[v];if("string"==typeof b&&b.indexOf("#_BO_")>-1){var y=b.replace("#_BO_","");if(null!=y&&null!=window.formulaLabelMap[y]&&null!=window.formulaLabelMap[y][s]){a=window.formulaLabelMap[y][s];break}}}if("undefined"==typeof a&&(s=r.replace("#[","").replace("]",""),window.formulaLabelMap&&(a=window.formulaLabelMap[s])),l(a))return void(o+=r);a="#["+a+"]",c="target"}else if(/^([0-9a-zA-Z._]+,[0-9a-zA-Z._]+)/.test(r)){if(s=r.replace(",","."),window.formulaLabelMap&&(a=window.formulaLabelMap[s]),l(a))return void(o+=r);c="BOITEMNAME_PARAM"}else if(/^(@processVar\([\u4e00-\u9fa5_a-zA-Z0-9]+\))/.test(r)){if(a=r.replace("@processVar(","").replace(")",""),l(a))return void(o+=r);c="common_field"}else if(/^(@env\([\u4e00-\u9fa5_a-zA-Z0-9]+[\,(ext1|ext2|ext3)]*\))/.test(r)){if(a=r.replace("@env(","").replace(")",""),l(a))return void(o+=r);c="ccVar"}else{if(!/^(@[uid|companyId|departmentId|roleId|teamId]+\([0-9,A-z._-]+\))/.test(r))return void(o+=r);if(s=r,window.formulaLabelMap&&(a=window.formulaLabelMap[s]),l(a))return void(o+=r);r.indexOf("uid")>-1?c="User":r.indexOf("companyId")>-1?c="Company":r.indexOf("departmentId")>-1?c="Department":r.indexOf("roleId")>-1?c="Role":r.indexOf("teamId")>-1&&(c="Team")}var w=window.CodeMirror.Pos(e,o.length);o+=r,v=window.CodeMirror.Pos(e,o.length),i.push({from:w,to:v,field:r,invalid:c,label:a})}})),n.push(o)}))}t.setValue(n.join("\n")),s(i,(function(e,n){a(n,t)}))}},"82f8":function(e,t,n){"use strict";var i=n("ebb5"),r=n("4d64").includes,o=i.aTypedArray,a=i.exportTypedArrayMethod;a("includes",(function(e){return r(o(this),e,arguments.length>1?arguments[1]:void 0)}))},"83ab":function(e,t,n){var i=n("d039");e.exports=!i((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},"83b9":function(e,t,n){"use strict";var i=n("d925"),r=n("e683");e.exports=function(e,t){return e&&!i(t)?r(e,t):t}},8418:function(e,t,n){"use strict";var i=n("c04e"),r=n("9bf2"),o=n("5c6c");e.exports=function(e,t,n){var a=i(t);a in e?r.f(e,a,o(0,n)):e[a]=n}},"841c":function(e,t,n){"use strict";var i=n("d784"),r=n("825a"),o=n("1d80"),a=n("129f"),s=n("14c3");i("search",1,(function(e,t,n){return[function(t){var n=o(this),i=void 0==t?void 0:t[e];return void 0!==i?i.call(t,n):new RegExp(t)[e](String(n))},function(e){var i=n(t,e,this);if(i.done)return i.value;var o=r(e),l=String(this),c=o.lastIndex;a(c,0)||(o.lastIndex=0);var u=s(o,l);return a(o.lastIndex,c)||(o.lastIndex=c),null===u?-1:u.index}]}))},"845f":function(e,t,n){n("a4d3"),n("e01a"),n("944a"),n("99af"),n("b0c0"),n("0c47"),n("23dc"),n("d3b7");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=99)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},99:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-button-group"},[e._t("default")],2)},r=[];i._withStripped=!0;var o={name:"ElButtonGroup"},a=o,s=n(0),l=Object(s["a"])(a,i,r,!1,null,null,null);l.options.__file="packages/button/src/button-group.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)},t["default"]=c}})},"857a":function(e,t,n){var i=n("1d80"),r=/"/g;e.exports=function(e,t,n,o){var a=String(i(e)),s="<"+t;return""!==n&&(s+=" "+n+'="'+String(o).replace(r,"&quot;")+'"'),s+">"+a+"</"+t+">"}},"85e7":function(e,t,n){var i=n("1a14"),r=n("77e9"),o=n("9876");e.exports=n("0bad")?Object.defineProperties:function(e,t){r(e);var n,a=o(t),s=a.length,l=0;while(s>l)i.f(e,n=a[l++],t[n]);return e}},"861d":function(e,t){e.exports=function(e){return"object"===_typeof2(e)?null!==e:"function"===typeof e}},8773:function(e,t,n){"use strict";var i=n("0b51"),r=n.n(i);r.a},"87d4":function(e,t,n){},8875:function(e,t,n){var i,r,o;(function(n,a){r=[],i=a,o="function"===typeof i?i.apply(t,r):i,void 0===o||(e.exports=o)})("undefined"!==typeof self&&self,(function(){function e(){if(document.currentScript)return document.currentScript;try{throw new Error}catch(d){var e,t,n,i=/.*at [^(]*\((.*):(.+):(.+)\)$/gi,r=/@([^@]*):(\d+):(\d+)\s*$/gi,o=i.exec(d.stack)||r.exec(d.stack),a=o&&o[1]||!1,s=o&&o[2]||!1,l=document.location.href.replace(document.location.hash,""),c=document.getElementsByTagName("script");a===l&&(e=document.documentElement.outerHTML,t=new RegExp("(?:[^\\n]+?\\n){0,"+(s-2)+"}[^<]*<script>([\\d\\D]*?)<\\/script>[\\d\\D]*","i"),n=e.replace(t,"$1").trim());for(var u=0;u<c.length;u++){if("interactive"===c[u].readyState)return c[u];if(c[u].src===a)return c[u];if(a===l&&c[u].innerHTML&&c[u].innerHTML.trim()===n)return c[u]}return null}}return e}))},8888:function(e,t,n){"use strict";var i=n("095f"),r=n.n(i);r.a},8925:function(e,t,n){var i=n("c6cd"),r=Function.toString;"function"!=typeof i.inspectSource&&(i.inspectSource=function(e){return r.call(e)}),e.exports=i.inspectSource},8942:function(e,t,n){"use strict";var i=n("1138"),r=n.n(i);r.a},"89c1":function(e,t,n){
                                                  +/*!
                                                  + * vue-virtual-scroll-list v2.3.2
                                                  + * open source under the MIT license
                                                  + * https://github.com/tangbc/vue-virtual-scroll-list#readme
                                                  + */
                                                  +(function(t,i){e.exports=i(n("8bbf"))})(0,(function(e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function i(e,t,i){return t&&n(e.prototype,t),i&&n(e,i),e}function r(e){return o(e)||a(e)||s(e)||c()}function o(e){if(Array.isArray(e))return l(e)}function a(e){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}function s(e,t){if(e){if("string"===typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}function c(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e["default"]:e;var u={FRONT:"FRONT",BEHIND:"BEHIND"},d={INIT:"INIT",FIXED:"FIXED",DYNAMIC:"DYNAMIC"},h=2,f=function(){function e(n,i){t(this,e),this.init(n,i)}return i(e,[{key:"init",value:function(e,t){this.param=e,this.callUpdate=t,this.sizes=new Map,this.firstRangeTotalSize=0,this.firstRangeAverageSize=0,this.lastCalcIndex=0,this.fixedSizeValue=0,this.calcType=d.INIT,this.offset=0,this.direction="",this.range=Object.create(null),e&&this.checkRange(0,e.keeps-1)}},{key:"destroy",value:function(){this.init(null,null)}},{key:"getRange",value:function(){var e=Object.create(null);return e.start=this.range.start,e.end=this.range.end,e.padFront=this.range.padFront,e.padBehind=this.range.padBehind,e}},{key:"isBehind",value:function(){return this.direction===u.BEHIND}},{key:"isFront",value:function(){return this.direction===u.FRONT}},{key:"getOffset",value:function(e){return(e<1?0:this.getIndexOffset(e))+this.param.slotHeaderSize}},{key:"updateParam",value:function(e,t){var n=this;this.param&&e in this.param&&("uniqueIds"===e&&this.sizes.forEach((function(e,i){t.includes(i)||n.sizes["delete"](i)})),this.param[e]=t)}},{key:"saveSize",value:function(e,t){this.sizes.set(e,t),this.calcType===d.INIT?(this.fixedSizeValue=t,this.calcType=d.FIXED):this.calcType===d.FIXED&&this.fixedSizeValue!==t&&(this.calcType=d.DYNAMIC,delete this.fixedSizeValue),this.calcType!==d.FIXED&&"undefined"!==typeof this.firstRangeTotalSize&&(this.sizes.size<Math.min(this.param.keeps,this.param.uniqueIds.length)?(this.firstRangeTotalSize=r(this.sizes.values()).reduce((function(e,t){return e+t}),0),this.firstRangeAverageSize=Math.round(this.firstRangeTotalSize/this.sizes.size)):delete this.firstRangeTotalSize)}},{key:"handleDataSourcesChange",value:function(){var e=this.range.start;this.isFront()?e-=h:this.isBehind()&&(e+=h),e=Math.max(e,0),this.updateRange(this.range.start,this.getEndByStart(e))}},{key:"handleSlotSizeChange",value:function(){this.handleDataSourcesChange()}},{key:"handleScroll",value:function(e){this.direction=e<this.offset?u.FRONT:u.BEHIND,this.offset=e,this.param&&(this.direction===u.FRONT?this.handleFront():this.direction===u.BEHIND&&this.handleBehind())}},{key:"handleFront",value:function(){var e=this.getScrollOvers();if(!(e>this.range.start)){var t=Math.max(e-this.param.buffer,0);this.checkRange(t,this.getEndByStart(t))}}},{key:"handleBehind",value:function(){var e=this.getScrollOvers();e<this.range.start+this.param.buffer||this.checkRange(e,this.getEndByStart(e))}},{key:"getScrollOvers",value:function(){var e=this.offset-this.param.slotHeaderSize;if(e<=0)return 0;if(this.isFixedType())return Math.floor(e/this.fixedSizeValue);var t=0,n=0,i=0,r=this.param.uniqueIds.length;while(t<=r){if(n=t+Math.floor((r-t)/2),i=this.getIndexOffset(n),i===e)return n;i<e?t=n+1:i>e&&(r=n-1)}return t>0?--t:0}},{key:"getIndexOffset",value:function(e){if(!e)return 0;for(var t=0,n=0,i=0;i<e;i++)n=this.sizes.get(this.param.uniqueIds[i]),t+="number"===typeof n?n:this.getEstimateSize();return this.lastCalcIndex=Math.max(this.lastCalcIndex,e-1),this.lastCalcIndex=Math.min(this.lastCalcIndex,this.getLastIndex()),t}},{key:"isFixedType",value:function(){return this.calcType===d.FIXED}},{key:"getLastIndex",value:function(){return this.param.uniqueIds.length-1}},{key:"checkRange",value:function(e,t){var n=this.param.keeps,i=this.param.uniqueIds.length;i<=n?(e=0,t=this.getLastIndex()):t-e<n-1&&(e=t-n+1),this.range.start!==e&&this.updateRange(e,t)}},{key:"updateRange",value:function(e,t){this.range.start=e,this.range.end=t,this.range.padFront=this.getPadFront(),this.range.padBehind=this.getPadBehind(),this.callUpdate(this.getRange())}},{key:"getEndByStart",value:function(e){var t=e+this.param.keeps-1,n=Math.min(t,this.getLastIndex());return n}},{key:"getPadFront",value:function(){return this.isFixedType()?this.fixedSizeValue*this.range.start:this.getIndexOffset(this.range.start)}},{key:"getPadBehind",value:function(){var e=this.range.end,t=this.getLastIndex();return this.isFixedType()?(t-e)*this.fixedSizeValue:this.lastCalcIndex===t?this.getIndexOffset(t)-this.getIndexOffset(e):(t-e)*this.getEstimateSize()}},{key:"getEstimateSize",value:function(){return this.isFixedType()?this.fixedSizeValue:this.firstRangeAverageSize||this.param.estimateSize}}]),e}(),p={dataKey:{type:[String,Function],required:!0},dataSources:{type:Array,required:!0},dataComponent:{type:[Object,Function],required:!0},keeps:{type:Number,default:30},extraProps:{type:Object},estimateSize:{type:Number,default:50},direction:{type:String,default:"vertical"},start:{type:Number,default:0},offset:{type:Number,default:0},topThreshold:{type:Number,default:0},bottomThreshold:{type:Number,default:0},pageMode:{type:Boolean,default:!1},rootTag:{type:String,default:"div"},wrapTag:{type:String,default:"div"},wrapClass:{type:String,default:""},wrapStyle:{type:Object},itemTag:{type:String,default:"div"},itemClass:{type:String,default:""},itemClassAdd:{type:Function},itemStyle:{type:Object},headerTag:{type:String,default:"div"},headerClass:{type:String,default:""},headerStyle:{type:Object},footerTag:{type:String,default:"div"},footerClass:{type:String,default:""},footerStyle:{type:Object},itemScopedSlots:{type:Object}},m={index:{type:Number},event:{type:String},tag:{type:String},horizontal:{type:Boolean},source:{type:Object},component:{type:[Object,Function]},uniqueKey:{type:[String,Number]},extraProps:{type:Object},scopedSlots:{type:Object}},g={event:{type:String},uniqueKey:{type:String},tag:{type:String},horizontal:{type:Boolean}},v={created:function(){this.shapeKey=this.horizontal?"offsetWidth":"offsetHeight"},mounted:function(){var e=this;"undefined"!==typeof ResizeObserver&&(this.resizeObserver=new ResizeObserver((function(){e.dispatchSizeChange()})),this.resizeObserver.observe(this.$el))},updated:function(){this.dispatchSizeChange()},beforeDestroy:function(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null)},methods:{getCurrentSize:function(){return this.$el?this.$el[this.shapeKey]:0},dispatchSizeChange:function(){this.$parent.$emit(this.event,this.uniqueKey,this.getCurrentSize(),this.hasInitial)}}},b=e.component("virtual-list-item",{mixins:[v],props:m,render:function(e){var t=this.tag,n=this.component,i=this.extraProps,r=void 0===i?{}:i,o=this.index,a=this.scopedSlots,s=void 0===a?{}:a,l=this.uniqueKey;return r.source=this.source,r.index=o,e(t,{key:l,attrs:{role:"listitem"}},[e(n,{props:r,scopedSlots:s})])}}),y=e.component("virtual-list-slot",{mixins:[v],props:g,render:function(e){var t=this.tag,n=this.uniqueKey;return e(t,{key:n,attrs:{role:n}},this.$slots["default"])}}),w={ITEM:"item_resize",SLOT:"slot_resize"},x={HEADER:"header",FOOTER:"footer"},_=e.component("virtual-list",{props:p,data:function(){return{range:null}},watch:{"dataSources.length":function(){this.virtual.updateParam("uniqueIds",this.getUniqueIdFromDataSources()),this.virtual.handleDataSourcesChange()},keeps:function(e){this.virtual.updateParam("keeps",e),this.virtual.handleSlotSizeChange()},start:function(e){this.scrollToIndex(e)},offset:function(e){this.scrollToOffset(e)}},created:function(){this.isHorizontal="horizontal"===this.direction,this.directionKey=this.isHorizontal?"scrollLeft":"scrollTop",this.installVirtual(),this.$on(w.ITEM,this.onItemResized),(this.$slots.header||this.$slots.footer)&&this.$on(w.SLOT,this.onSlotResized)},activated:function(){this.scrollToOffset(this.virtual.offset)},mounted:function(){this.start?this.scrollToIndex(this.start):this.offset&&this.scrollToOffset(this.offset),this.pageMode&&(this.updatePageModeFront(),document.addEventListener("scroll",this.onScroll,{passive:!1}))},beforeDestroy:function(){this.virtual.destroy(),this.pageMode&&document.removeEventListener("scroll",this.onScroll)},methods:{getSize:function(e){return this.virtual.sizes.get(e)},getSizes:function(){return this.virtual.sizes.size},getOffset:function(){if(this.pageMode)return document.documentElement[this.directionKey]||document.body[this.directionKey];var e=this.$refs.root;return e?Math.ceil(e[this.directionKey]):0},getClientSize:function(){var e=this.isHorizontal?"clientWidth":"clientHeight";if(this.pageMode)return document.documentElement[e]||document.body[e];var t=this.$refs.root;return t?Math.ceil(t[e]):0},getScrollSize:function(){var e=this.isHorizontal?"scrollWidth":"scrollHeight";if(this.pageMode)return document.documentElement[e]||document.body[e];var t=this.$refs.root;return t?Math.ceil(t[e]):0},scrollToOffset:function(e){if(this.pageMode)document.body[this.directionKey]=e,document.documentElement[this.directionKey]=e;else{var t=this.$refs.root;t&&(t[this.directionKey]=e)}},scrollToIndex:function(e){if(e>=this.dataSources.length-1)this.scrollToBottom();else{var t=this.virtual.getOffset(e);this.scrollToOffset(t)}},scrollToBottom:function(){var e=this,t=this.$refs.shepherd;if(t){var n=t[this.isHorizontal?"offsetLeft":"offsetTop"];this.scrollToOffset(n),setTimeout((function(){e.getOffset()+e.getClientSize()<e.getScrollSize()&&e.scrollToBottom()}),3)}},updatePageModeFront:function(){var e=this.$refs.root;if(e){var t=e.getBoundingClientRect(),n=e.ownerDocument.defaultView,i=this.isHorizontal?t.left+n.pageXOffset:t.top+n.pageYOffset;this.virtual.updateParam("slotHeaderSize",i)}},reset:function(){this.virtual.destroy(),this.scrollToOffset(0),this.installVirtual()},installVirtual:function(){this.virtual=new f({slotHeaderSize:0,slotFooterSize:0,keeps:this.keeps,estimateSize:this.estimateSize,buffer:Math.round(this.keeps/3),uniqueIds:this.getUniqueIdFromDataSources()},this.onRangeChanged),this.range=this.virtual.getRange()},getUniqueIdFromDataSources:function(){var e=this.dataKey;return this.dataSources.map((function(t){return"function"===typeof e?e(t):t[e]}))},onItemResized:function(e,t){this.virtual.saveSize(e,t),this.$emit("resized",e,t)},onSlotResized:function(e,t,n){e===x.HEADER?this.virtual.updateParam("slotHeaderSize",t):e===x.FOOTER&&this.virtual.updateParam("slotFooterSize",t),n&&this.virtual.handleSlotSizeChange()},onRangeChanged:function(e){this.range=e},onScroll:function(e){var t=this.getOffset(),n=this.getClientSize(),i=this.getScrollSize();t<0||t+n>i+1||!i||(this.virtual.handleScroll(t),this.emitEvent(t,n,i,e))},emitEvent:function(e,t,n,i){this.$emit("scroll",i,this.virtual.getRange()),this.virtual.isFront()&&this.dataSources.length&&e-this.topThreshold<=0?this.$emit("totop"):this.virtual.isBehind()&&e+t+this.bottomThreshold>=n&&this.$emit("tobottom")},getRenderSlots:function(e){for(var t=[],n=this.range,i=n.start,r=n.end,o=this.dataSources,a=this.dataKey,s=this.itemClass,l=this.itemTag,c=this.itemStyle,u=this.isHorizontal,d=this.extraProps,h=this.dataComponent,f=this.itemScopedSlots,p=i;p<=r;p++){var m=o[p];if(m){var g="function"===typeof a?a(m):m[a];"string"===typeof g||"number"===typeof g?t.push(e(b,{props:{index:p,tag:l,event:w.ITEM,horizontal:u,uniqueKey:g,source:m,extraProps:d,component:h,scopedSlots:f},style:c,class:"".concat(s).concat(this.itemClassAdd?" "+this.itemClassAdd(p):"")})):console.warn("Cannot get the data-key '".concat(a,"' from data-sources."))}else console.warn("Cannot get the index '".concat(p,"' from data-sources."))}return t}},render:function(e){var t=this.$slots,n=t.header,i=t.footer,r=this.range,o=r.padFront,a=r.padBehind,s=this.isHorizontal,l=this.pageMode,c=this.rootTag,u=this.wrapTag,d=this.wrapClass,h=this.wrapStyle,f=this.headerTag,p=this.headerClass,m=this.headerStyle,g=this.footerTag,v=this.footerClass,b=this.footerStyle,_={padding:s?"0px ".concat(a,"px 0px ").concat(o,"px"):"".concat(o,"px 0px ").concat(a,"px")},k=h?Object.assign({},h,_):_;return e(c,{ref:"root",on:{"&scroll":!l&&this.onScroll}},[n?e(y,{class:p,style:m,props:{tag:f,event:w.SLOT,uniqueKey:x.HEADER}},n):null,e(u,{class:d,attrs:{role:"group"},style:k},this.getRenderSlots(e)),i?e(y,{class:v,style:b,props:{tag:g,event:w.SLOT,uniqueKey:x.FOOTER}},i):null,e("div",{ref:"shepherd",style:{width:s?"0px":"100%",height:s?"100%":"0px"}})])}});return _}))},"8a0d":function(e,t){e.exports={}},"8aa5":function(e,t,n){"use strict";var i=n("6547").charAt;e.exports=function(e,t,n){return t+(n?i(e,t).length:1)}},"8aa7":function(e,t,n){var i=n("da84"),r=n("d039"),o=n("1c7e"),a=n("ebb5").NATIVE_ARRAY_BUFFER_VIEWS,s=i.ArrayBuffer,l=i.Int8Array;e.exports=!a||!r((function(){l(1)}))||!r((function(){new l(-1)}))||!o((function(e){new l,new l(null),new l(1.5),new l(e)}),!0)||r((function(){return 1!==new l(new s(2),1,void 0).length}))},"8b00":function(e,t,n){},"8b1a":function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+i).toString(36))}},"8bbc":function(e,t,n){n("a4d3"),n("e01a"),n("944a"),n("99af"),n("c975"),n("b0c0"),n("0c47"),n("23dc"),n("d3b7");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=124)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},124:function(e,t,n){"use strict";n.r(t);var i,r,o={name:"ElTag",props:{text:String,closable:Boolean,type:String,hit:Boolean,disableTransitions:Boolean,color:String,size:String,effect:{type:String,default:"light",validator:function(e){return-1!==["dark","light","plain"].indexOf(e)}}},methods:{handleClose:function(e){e.stopPropagation(),this.$emit("close",e)},handleClick:function(e){this.$emit("click",e)}},computed:{tagSize:function(){return this.size||(this.$ELEMENT||{}).size}},render:function(e){var t=this.type,n=this.tagSize,i=this.hit,r=this.effect,o=["el-tag",t?"el-tag--"+t:"",n?"el-tag--"+n:"",r?"el-tag--"+r:"",i&&"is-hit"],a=e("span",{class:o,style:{backgroundColor:this.color},on:{click:this.handleClick}},[this.$slots.default,this.closable&&e("i",{class:"el-tag__close el-icon-close",on:{click:this.handleClose}})]);return this.disableTransitions?a:e("transition",{attrs:{name:"el-zoom-in-center"}},[a])}},a=o,s=n(0),l=Object(s["a"])(a,i,r,!1,null,null,null);l.options.__file="packages/tag/src/tag.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)},t["default"]=c}})},"8bbf":function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE__8bbf__},"8cca":function(e,t,n){},"8ce5":function(e,t,n){},"8df4":function(e,t,n){"use strict";var i=n("7a77");function r(e){if("function"!==typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;e((function(e){n.reason||(n.reason=new i(e),t(n.reason))}))}r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r((function(t){e=t}));return{token:t,cancel:e}},e.exports=r},"8e34":function(e,t,n){},"8eb7":function(e,t){var n,i,r,o,a,s,l,c,u,d,h,f,p,m,g,v=!1;function b(){if(!v){v=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),b=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(f=/\b(iPhone|iP[ao]d)/.exec(e),p=/\b(iP[ao]d)/.exec(e),d=/Android/i.exec(e),m=/FBAN\/\w+;/i.exec(e),g=/Mobile/i.exec(e),h=!!/Win64/.exec(e),t){n=t[1]?parseFloat(t[1]):t[5]?parseFloat(t[5]):NaN,n&&document&&document.documentMode&&(n=document.documentMode);var y=/(?:Trident\/(\d+.\d+))/.exec(e);s=y?parseFloat(y[1])+4:n,i=t[2]?parseFloat(t[2]):NaN,r=t[3]?parseFloat(t[3]):NaN,o=t[4]?parseFloat(t[4]):NaN,o?(t=/(?:Chrome\/(\d+\.\d+))/.exec(e),a=t&&t[1]?parseFloat(t[1]):NaN):a=NaN}else n=i=r=a=o=NaN;if(b){if(b[1]){var w=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);l=!w||parseFloat(w[1].replace("_","."))}else l=!1;c=!!b[2],u=!!b[3]}else l=c=u=!1}}var y={ie:function(){return b()||n},ieCompatibilityMode:function(){return b()||s>n},ie64:function(){return y.ie()&&h},firefox:function(){return b()||i},opera:function(){return b()||r},webkit:function(){return b()||o},safari:function(){return y.webkit()},chrome:function(){return b()||a},windows:function(){return b()||c},osx:function(){return b()||l},linux:function(){return b()||u},iphone:function(){return b()||f},mobile:function(){return b()||f||p||d||g},nativeApp:function(){return b()||m},android:function(){return b()||d},ipad:function(){return b()||p}};e.exports=y},"8f94":function(e,t,n){!function(t,i){e.exports=i(n("56b3"))}(0,(function(e){return function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/",t(t.s=3)}([function(t,n){t.exports=e},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(0),r=function(e){return e&&e.__esModule?e:{default:e}}(i),o=window.CodeMirror||r.default;"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,t){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(e),i=1;i<arguments.length;i++){var r=arguments[i];if(null!=r)for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o])}return n},writable:!0,configurable:!0}),t.default={name:"codemirror",data:function(){return{content:"",codemirror:null,cminstance:null}},props:{code:String,value:String,marker:Function,unseenLines:Array,name:{type:String,default:"codemirror"},placeholder:{type:String,default:""},merge:{type:Boolean,default:!1},options:{type:Object,default:function(){return{}}},events:{type:Array,default:function(){return[]}},globalOptions:{type:Object,default:function(){return{}}},globalEvents:{type:Array,default:function(){return[]}}},watch:{options:{deep:!0,handler:function(e){for(var t in e)this.cminstance.setOption(t,e[t])}},merge:function(){this.$nextTick(this.switchMerge)},code:function(e){this.handerCodeChange(e)},value:function(e){this.handerCodeChange(e)}},methods:{initialize:function(){var e=this,t=Object.assign({},this.globalOptions,this.options);this.merge?(this.codemirror=o.MergeView(this.$refs.mergeview,t),this.cminstance=this.codemirror.edit):(this.codemirror=o.fromTextArea(this.$refs.textarea,t),this.cminstance=this.codemirror,this.cminstance.setValue(this.code||this.value||this.content)),this.cminstance.on("change",(function(t){e.content=t.getValue(),e.$emit&&e.$emit("input",e.content)}));var n={};["scroll","changes","beforeChange","cursorActivity","keyHandled","inputRead","electricInput","beforeSelectionChange","viewportChange","swapDoc","gutterClick","gutterContextMenu","focus","blur","refresh","optionChange","scrollCursorIntoView","update"].concat(this.events).concat(this.globalEvents).filter((function(e){return!n[e]&&(n[e]=!0)})).forEach((function(t){e.cminstance.on(t,(function(){for(var n=arguments.length,i=Array(n),r=0;r<n;r++)i[r]=arguments[r];e.$emit.apply(e,[t].concat(i));var o=t.replace(/([A-Z])/g,"-$1").toLowerCase();o!==t&&e.$emit.apply(e,[o].concat(i))}))})),this.$emit("ready",this.codemirror),this.unseenLineMarkers(),this.refresh()},refresh:function(){var e=this;this.$nextTick((function(){e.cminstance.refresh()}))},destroy:function(){var e=this.cminstance.doc.cm.getWrapperElement();e&&e.remove&&e.remove()},handerCodeChange:function(e){if(e!==this.cminstance.getValue()){var t=this.cminstance.getScrollInfo();this.cminstance.setValue(e),this.content=e,this.cminstance.scrollTo(t.left,t.top)}this.unseenLineMarkers()},unseenLineMarkers:function(){var e=this;void 0!==this.unseenLines&&void 0!==this.marker&&this.unseenLines.forEach((function(t){var n=e.cminstance.lineInfo(t);e.cminstance.setGutterMarker(t,"breakpoints",n.gutterMarkers?null:e.marker())}))},switchMerge:function(){var e=this.cminstance.doc.history,t=this.cminstance.doc.cleanGeneration;this.options.value=this.cminstance.getValue(),this.destroy(),this.initialize(),this.cminstance.doc.history=e,this.cminstance.doc.cleanGeneration=t}},mounted:function(){this.initialize()},beforeDestroy:function(){this.destroy()}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(1),r=n.n(i);for(var o in i)["default","default"].indexOf(o)<0&&function(e){n.d(t,e,(function(){return i[e]}))}(o);var a=n(5),s=n(4),l=s(r.a,a.a,!1,null,null,null);t.default=l.exports},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.install=t.codemirror=t.CodeMirror=void 0;var r=n(0),o=i(r),a=n(2),s=i(a),l=window.CodeMirror||o.default,c=function(e,t){t&&(t.options&&(s.default.props.globalOptions.default=function(){return t.options}),t.events&&(s.default.props.globalEvents.default=function(){return t.events})),e.component(s.default.name,s.default)},u={CodeMirror:l,codemirror:s.default,install:c};t.default=u,t.CodeMirror=l,t.codemirror=s.default,t.install=c},function(e,t){e.exports=function(e,t,n,i,r,o){var a,s=e=e||{},l=_typeof2(e.default);"object"!==l&&"function"!==l||(a=e,s=e.default);var c,u="function"==typeof s?s.options:s;if(t&&(u.render=t.render,u.staticRenderFns=t.staticRenderFns,u._compiled=!0),n&&(u.functional=!0),r&&(u._scopeId=r),o?(c=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(o)},u._ssrRegister=c):i&&(c=i),c){var d=u.functional,h=d?u.render:u.beforeCreate;d?(u._injectStyles=c,u.render=function(e,t){return c.call(t),h(e,t)}):u.beforeCreate=h?[].concat(h,c):[c]}return{esModule:a,exports:s,options:u}}},function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"vue-codemirror",class:{merge:e.merge}},[e.merge?n("div",{ref:"mergeview"}):n("textarea",{ref:"textarea",attrs:{name:e.name,placeholder:e.placeholder}})])},r=[],o={render:i,staticRenderFns:r};t.a=o}])}))},"903e":function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";e.registerHelper("wordChars","r",/[\w.]/),e.defineMode("r",(function(t){function n(e){for(var t={},n=0;n<e.length;++n)t[e[n]]=!0;return t}var i=["NULL","NA","Inf","NaN","NA_integer_","NA_real_","NA_complex_","NA_character_","TRUE","FALSE"],r=["list","quote","bquote","eval","return","call","parse","deparse"],o=["if","else","repeat","while","function","for","in","next","break"],a=["if","else","repeat","while","function","for"];e.registerHelper("hintWords","r",i.concat(r,o));var s,l=n(i),c=n(r),u=n(o),d=n(a),h=/[+\-*\/^<>=!&|~$:]/;function f(e,t){s=null;var n=e.next();if("#"==n)return e.skipToEnd(),"comment";if("0"==n&&e.eat("x"))return e.eatWhile(/[\da-f]/i),"number";if("."==n&&e.eat(/\d/))return e.match(/\d*(?:e[+\-]?\d+)?/),"number";if(/\d/.test(n))return e.match(/\d*(?:\.\d+)?(?:e[+\-]\d+)?L?/),"number";if("'"==n||'"'==n)return t.tokenize=p(n),"string";if("`"==n)return e.match(/[^`]+`/),"variable-3";if("."==n&&e.match(/.[.\d]+/))return"keyword";if(/[\w\.]/.test(n)&&"_"!=n){e.eatWhile(/[\w\.]/);var i=e.current();return l.propertyIsEnumerable(i)?"atom":u.propertyIsEnumerable(i)?(d.propertyIsEnumerable(i)&&!e.match(/\s*if(\s+|$)/,!1)&&(s="block"),"keyword"):c.propertyIsEnumerable(i)?"builtin":"variable"}return"%"==n?(e.skipTo("%")&&e.next(),"operator variable-2"):"<"==n&&e.eat("-")||"<"==n&&e.match("<-")||"-"==n&&e.match(/>>?/)?"operator arrow":"="==n&&t.ctx.argList?"arg-is":h.test(n)?"$"==n?"operator dollar":(e.eatWhile(h),"operator"):/[\(\){}\[\];]/.test(n)?(s=n,";"==n?"semi":null):null}function p(e){return function(t,n){if(t.eat("\\")){var i=t.next();return"x"==i?t.match(/^[a-f0-9]{2}/i):("u"==i||"U"==i)&&t.eat("{")&&t.skipTo("}")?t.next():"u"==i?t.match(/^[a-f0-9]{4}/i):"U"==i?t.match(/^[a-f0-9]{8}/i):/[0-7]/.test(i)&&t.match(/^[0-7]{1,2}/),"string-2"}var r;while(null!=(r=t.next())){if(r==e){n.tokenize=f;break}if("\\"==r){t.backUp(1);break}}return"string"}}var m=1,g=2,v=4;function b(e,t,n){e.ctx={type:t,indent:e.indent,flags:0,column:n.column(),prev:e.ctx}}function y(e,t){var n=e.ctx;e.ctx={type:n.type,indent:n.indent,flags:n.flags|t,column:n.column,prev:n.prev}}function w(e){e.indent=e.ctx.indent,e.ctx=e.ctx.prev}return{startState:function(){return{tokenize:f,ctx:{type:"top",indent:-t.indentUnit,flags:g},indent:0,afterIdent:!1}},token:function(e,t){if(e.sol()&&(0==(3&t.ctx.flags)&&(t.ctx.flags|=g),t.ctx.flags&v&&w(t),t.indent=e.indentation()),e.eatSpace())return null;var n=t.tokenize(e,t);return"comment"!=n&&0==(t.ctx.flags&g)&&y(t,m),";"!=s&&"{"!=s&&"}"!=s||"block"!=t.ctx.type||w(t),"{"==s?b(t,"}",e):"("==s?(b(t,")",e),t.afterIdent&&(t.ctx.argList=!0)):"["==s?b(t,"]",e):"block"==s?b(t,"block",e):s==t.ctx.type?w(t):"block"==t.ctx.type&&"comment"!=n&&y(t,v),t.afterIdent="variable"==n||"keyword"==n,n},indent:function(e,n){if(e.tokenize!=f)return 0;var i=n&&n.charAt(0),r=e.ctx,o=i==r.type;return r.flags&v&&(r=r.prev),"block"==r.type?r.indent+("{"==i?0:t.indentUnit):r.flags&m?r.column+(o?0:1):r.indent+(o?0:t.indentUnit)},lineComment:"#"}})),e.defineMIME("text/x-rsrc","r")}))},"90e3":function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++n+i).toString(36)}},9112:function(e,t,n){var i=n("83ab"),r=n("9bf2"),o=n("5c6c");e.exports=i?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},9115:function(e,t,n){"use strict";var i=n("9f7f"),r=n.n(i);r.a},9129:function(e,t,n){var i=n("23e7");i({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},9141:function(e,t,n){var i=n("ef08").document;e.exports=i&&i.documentElement},"921b":function(e,t,n){},9263:function(e,t,n){"use strict";var i=n("ad6d"),r=n("9f7fd"),o=RegExp.prototype.exec,a=String.prototype.replace,s=o,l=function(){var e=/a/,t=/b*/g;return o.call(e,"a"),o.call(t,"a"),0!==e.lastIndex||0!==t.lastIndex}(),c=r.UNSUPPORTED_Y||r.BROKEN_CARET,u=void 0!==/()??/.exec("")[1],d=l||u||c;d&&(s=function(e){var t,n,r,s,d=this,h=c&&d.sticky,f=i.call(d),p=d.source,m=0,g=e;return h&&(f=f.replace("y",""),-1===f.indexOf("g")&&(f+="g"),g=String(e).slice(d.lastIndex),d.lastIndex>0&&(!d.multiline||d.multiline&&"\n"!==e[d.lastIndex-1])&&(p="(?: "+p+")",g=" "+g,m++),n=new RegExp("^(?:"+p+")",f)),u&&(n=new RegExp("^"+p+"$(?!\\s)",f)),l&&(t=d.lastIndex),r=o.call(h?n:d,g),h?r?(r.input=r.input.slice(m),r[0]=r[0].slice(m),r.index=d.lastIndex,d.lastIndex+=r[0].length):d.lastIndex=0:l&&r&&(d.lastIndex=d.global?r.index+r[0].length:t),u&&r&&r.length>1&&a.call(r[0],n,(function(){for(s=1;s<arguments.length-2;s++)void 0===arguments[s]&&(r[s]=void 0)})),r}),e.exports=s},"92f0":function(e,t,n){var i=n("1a14").f,r=n("9c0e"),o=n("cc15")("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,o)&&i(e,o,{configurable:!0,value:t})}},"92fa":function(e,t){var n=/^(attrs|props|on|nativeOn|class|style|hook)$/;function i(e,t){return function(){e&&e.apply(this,arguments),t&&t.apply(this,arguments)}}e.exports=function(e){return e.reduce((function(e,t){var r,o,a,s,l;for(a in t)if(r=e[a],o=t[a],r&&n.test(a))if("class"===a&&("string"===typeof r&&(l=r,e[a]=r={},r[l]=!0),"string"===typeof o&&(l=o,t[a]=o={},o[l]=!0)),"on"===a||"nativeOn"===a||"hook"===a)for(s in o)r[s]=i(r[s],o[s]);else if(Array.isArray(r))e[a]=r.concat(o);else if(Array.isArray(o))e[a]=[r].concat(o);else for(s in o)r[s]=o[s];else e[a]=t[a];return e}),{})}},"944a":function(e,t,n){var i=n("746f");i("toStringTag")},"94ca":function(e,t,n){var i=n("d039"),r=/#|\.prototype\./,o=function(e,t){var n=s[a(e)];return n==c||n!=l&&("function"==typeof t?i(t):!!t)},a=o.normalize=function(e){return String(e).replace(r,".").toLowerCase()},s=o.data={},l=o.NATIVE="N",c=o.POLYFILL="P";e.exports=o},"959b":function(e,t,n){(function(e){e(n("56b3"),n("d5e0"),n("f040"))})((function(e){"use strict";e.defineMode("markdown",(function(t,n){var i=e.getMode(t,"text/html"),r="null"==i.name;function o(n){if(e.findModeByName){var i=e.findModeByName(n);i&&(n=i.mime||i.mimes[0])}var r=e.getMode(t,n);return"null"==r.name?null:r}void 0===n.highlightFormatting&&(n.highlightFormatting=!1),void 0===n.maxBlockquoteDepth&&(n.maxBlockquoteDepth=0),void 0===n.taskLists&&(n.taskLists=!1),void 0===n.strikethrough&&(n.strikethrough=!1),void 0===n.emoji&&(n.emoji=!1),void 0===n.fencedCodeBlockHighlighting&&(n.fencedCodeBlockHighlighting=!0),void 0===n.fencedCodeBlockDefaultMode&&(n.fencedCodeBlockDefaultMode="text/plain"),void 0===n.xml&&(n.xml=!0),void 0===n.tokenTypeOverrides&&(n.tokenTypeOverrides={});var a={header:"header",code:"comment",quote:"quote",list1:"variable-2",list2:"variable-3",list3:"keyword",hr:"hr",image:"image",imageAltText:"image-alt-text",imageMarker:"image-marker",formatting:"formatting",linkInline:"link",linkEmail:"link",linkText:"link",linkHref:"string",em:"em",strong:"strong",strikethrough:"strikethrough",emoji:"builtin"};for(var s in a)a.hasOwnProperty(s)&&n.tokenTypeOverrides[s]&&(a[s]=n.tokenTypeOverrides[s]);var l=/^([*\-_])(?:\s*\1){2,}\s*$/,c=/^(?:[*\-+]|^[0-9]+([.)]))\s+/,u=/^\[(x| )\](?=\s)/i,d=n.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,h=/^ {0,3}(?:\={1,}|-{2,})\s*$/,f=/^[^#!\[\]*_\\<>` "'(~:]+/,p=/^(~~~+|```+)[ \t]*([\w\/+#-]*)[^\n`]*$/,m=/^\s*\[[^\]]+?\]:.*$/,g=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/,v="    ";function b(e,t,n){return t.f=t.inline=n,n(e,t)}function y(e,t,n){return t.f=t.block=n,n(e,t)}function w(e){return!e||!/\S/.test(e.string)}function x(t){if(t.linkTitle=!1,t.linkHref=!1,t.linkText=!1,t.em=!1,t.strong=!1,t.strikethrough=!1,t.quote=0,t.indentedCode=!1,t.f==k){var n=r;if(!n){var o=e.innerMode(i,t.htmlState);n="xml"==o.mode.name&&null===o.state.tagStart&&!o.state.context&&o.state.tokenize.isInText}n&&(t.f=T,t.block=_,t.htmlState=null)}return t.trailingSpace=0,t.trailingSpaceNewLine=!1,t.prevLine=t.thisLine,t.thisLine={stream:null},null}function _(t,i){var r=t.column()===i.indentation,s=w(i.prevLine.stream),f=i.indentedCode,g=i.prevLine.hr,v=!1!==i.list,y=(i.listStack[i.listStack.length-1]||0)+3;i.indentedCode=!1;var x=i.indentation;if(null===i.indentationDiff&&(i.indentationDiff=i.indentation,v)){i.list=null;while(x<i.listStack[i.listStack.length-1])i.listStack.pop(),i.listStack.length?i.indentation=i.listStack[i.listStack.length-1]:i.list=!1;!1!==i.list&&(i.indentationDiff=x-i.listStack[i.listStack.length-1])}var _=!s&&!g&&!i.prevLine.header&&(!v||!f)&&!i.prevLine.fencedCodeEnd,k=(!1===i.list||g||s)&&i.indentation<=y&&t.match(l),O=null;if(i.indentationDiff>=4&&(f||i.prevLine.fencedCodeEnd||i.prevLine.header||s))return t.skipToEnd(),i.indentedCode=!0,a.code;if(t.eatSpace())return null;if(r&&i.indentation<=y&&(O=t.match(d))&&O[1].length<=6)return i.quote=0,i.header=O[1].length,i.thisLine.header=!0,n.highlightFormatting&&(i.formatting="header"),i.f=i.inline,S(i);if(i.indentation<=y&&t.eat(">"))return i.quote=r?1:i.quote+1,n.highlightFormatting&&(i.formatting="quote"),t.eatSpace(),S(i);if(!k&&!i.setext&&r&&i.indentation<=y&&(O=t.match(c))){var T=O[1]?"ol":"ul";return i.indentation=x+t.current().length,i.list=!0,i.quote=0,i.listStack.push(i.indentation),i.em=!1,i.strong=!1,i.code=!1,i.strikethrough=!1,n.taskLists&&t.match(u,!1)&&(i.taskList=!0),i.f=i.inline,n.highlightFormatting&&(i.formatting=["list","list-"+T]),S(i)}return r&&i.indentation<=y&&(O=t.match(p,!0))?(i.quote=0,i.fencedEndRE=new RegExp(O[1]+"+ *$"),i.localMode=n.fencedCodeBlockHighlighting&&o(O[2]||n.fencedCodeBlockDefaultMode),i.localMode&&(i.localState=e.startState(i.localMode)),i.f=i.block=C,n.highlightFormatting&&(i.formatting="code-block"),i.code=-1,S(i)):i.setext||!(_&&v||i.quote||!1!==i.list||i.code||k||m.test(t.string))&&(O=t.lookAhead(1))&&(O=O.match(h))?(i.setext?(i.header=i.setext,i.setext=0,t.skipToEnd(),n.highlightFormatting&&(i.formatting="header")):(i.header="="==O[0].charAt(0)?1:2,i.setext=i.header),i.thisLine.header=!0,i.f=i.inline,S(i)):k?(t.skipToEnd(),i.hr=!0,i.thisLine.hr=!0,a.hr):"["===t.peek()?b(t,i,N):b(t,i,i.inline)}function k(t,n){var o=i.token(t,n.htmlState);if(!r){var a=e.innerMode(i,n.htmlState);("xml"==a.mode.name&&null===a.state.tagStart&&!a.state.context&&a.state.tokenize.isInText||n.md_inside&&t.current().indexOf(">")>-1)&&(n.f=T,n.block=_,n.htmlState=null)}return o}function C(e,t){var i,r=t.listStack[t.listStack.length-1]||0,o=t.indentation<r,s=r+3;return t.fencedEndRE&&t.indentation<=s&&(o||e.match(t.fencedEndRE))?(n.highlightFormatting&&(t.formatting="code-block"),o||(i=S(t)),t.localMode=t.localState=null,t.block=_,t.f=T,t.fencedEndRE=null,t.code=0,t.thisLine.fencedCodeEnd=!0,o?y(e,t,t.block):i):t.localMode?t.localMode.token(e,t.localState):(e.skipToEnd(),a.code)}function S(e){var t=[];if(e.formatting){t.push(a.formatting),"string"===typeof e.formatting&&(e.formatting=[e.formatting]);for(var i=0;i<e.formatting.length;i++)t.push(a.formatting+"-"+e.formatting[i]),"header"===e.formatting[i]&&t.push(a.formatting+"-"+e.formatting[i]+"-"+e.header),"quote"===e.formatting[i]&&(!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(a.formatting+"-"+e.formatting[i]+"-"+e.quote):t.push("error"))}if(e.taskOpen)return t.push("meta"),t.length?t.join(" "):null;if(e.taskClosed)return t.push("property"),t.length?t.join(" "):null;if(e.linkHref?t.push(a.linkHref,"url"):(e.strong&&t.push(a.strong),e.em&&t.push(a.em),e.strikethrough&&t.push(a.strikethrough),e.emoji&&t.push(a.emoji),e.linkText&&t.push(a.linkText),e.code&&t.push(a.code),e.image&&t.push(a.image),e.imageAltText&&t.push(a.imageAltText,"link"),e.imageMarker&&t.push(a.imageMarker)),e.header&&t.push(a.header,a.header+"-"+e.header),e.quote&&(t.push(a.quote),!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(a.quote+"-"+e.quote):t.push(a.quote+"-"+n.maxBlockquoteDepth)),!1!==e.list){var r=(e.listStack.length-1)%3;r?1===r?t.push(a.list2):t.push(a.list3):t.push(a.list1)}return e.trailingSpaceNewLine?t.push("trailing-space-new-line"):e.trailingSpace&&t.push("trailing-space-"+(e.trailingSpace%2?"a":"b")),t.length?t.join(" "):null}function O(e,t){if(e.match(f,!0))return S(t)}function T(t,r){var o=r.text(t,r);if("undefined"!==typeof o)return o;if(r.list)return r.list=null,S(r);if(r.taskList){var s=" "===t.match(u,!0)[1];return s?r.taskOpen=!0:r.taskClosed=!0,n.highlightFormatting&&(r.formatting="task"),r.taskList=!1,S(r)}if(r.taskOpen=!1,r.taskClosed=!1,r.header&&t.match(/^#+$/,!0))return n.highlightFormatting&&(r.formatting="header"),S(r);var l=t.next();if(r.linkTitle){r.linkTitle=!1;var c=l;"("===l&&(c=")"),c=(c+"").replace(/([.?*+^\[\]\\(){}|-])/g,"\\$1");var d="^\\s*(?:[^"+c+"\\\\]+|\\\\\\\\|\\\\.)"+c;if(t.match(new RegExp(d),!0))return a.linkHref}if("`"===l){var h=r.formatting;n.highlightFormatting&&(r.formatting="code"),t.eatWhile("`");var f=t.current().length;if(0!=r.code||r.quote&&1!=f){if(f==r.code){var p=S(r);return r.code=0,p}return r.formatting=h,S(r)}return r.code=f,S(r)}if(r.code)return S(r);if("\\"===l&&(t.next(),n.highlightFormatting)){var m=S(r),v=a.formatting+"-escape";return m?m+" "+v:v}if("!"===l&&t.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return r.imageMarker=!0,r.image=!0,n.highlightFormatting&&(r.formatting="image"),S(r);if("["===l&&r.imageMarker&&t.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/,!1))return r.imageMarker=!1,r.imageAltText=!0,n.highlightFormatting&&(r.formatting="image"),S(r);if("]"===l&&r.imageAltText)return n.highlightFormatting&&(r.formatting="image"),m=S(r),r.imageAltText=!1,r.image=!1,r.inline=r.f=D,m;if("["===l&&!r.image)return r.linkText&&t.match(/^.*?\]/)||(r.linkText=!0,n.highlightFormatting&&(r.formatting="link")),S(r);if("]"===l&&r.linkText)return n.highlightFormatting&&(r.formatting="link"),m=S(r),r.linkText=!1,r.inline=r.f=t.match(/\(.*?\)| ?\[.*?\]/,!1)?D:T,m;if("<"===l&&t.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1))return r.f=r.inline=E,n.highlightFormatting&&(r.formatting="link"),m=S(r),m?m+=" ":m="",m+a.linkInline;if("<"===l&&t.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1))return r.f=r.inline=E,n.highlightFormatting&&(r.formatting="link"),m=S(r),m?m+=" ":m="",m+a.linkEmail;if(n.xml&&"<"===l&&t.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i,!1)){var b=t.string.indexOf(">",t.pos);if(-1!=b){var w=t.string.substring(t.start,b);/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(w)&&(r.md_inside=!0)}return t.backUp(1),r.htmlState=e.startState(i),y(t,r,k)}if(n.xml&&"<"===l&&t.match(/^\/\w*?>/))return r.md_inside=!1,"tag";if("*"===l||"_"===l){var x=1,_=1==t.pos?" ":t.string.charAt(t.pos-2);while(x<3&&t.eat(l))x++;var C=t.peek()||" ",O=!/\s/.test(C)&&(!g.test(C)||/\s/.test(_)||g.test(_)),M=!/\s/.test(_)&&(!g.test(_)||/\s/.test(C)||g.test(C)),A=null,N=null;if(x%2&&(r.em||!O||"*"!==l&&M&&!g.test(_)?r.em!=l||!M||"*"!==l&&O&&!g.test(C)||(A=!1):A=!0),x>1&&(r.strong||!O||"*"!==l&&M&&!g.test(_)?r.strong!=l||!M||"*"!==l&&O&&!g.test(C)||(N=!1):N=!0),null!=N||null!=A)return n.highlightFormatting&&(r.formatting=null==A?"strong":null==N?"em":"strong em"),!0===A&&(r.em=l),!0===N&&(r.strong=l),p=S(r),!1===A&&(r.em=!1),!1===N&&(r.strong=!1),p}else if(" "===l&&(t.eat("*")||t.eat("_"))){if(" "===t.peek())return S(r);t.backUp(1)}if(n.strikethrough)if("~"===l&&t.eatWhile(l)){if(r.strikethrough)return n.highlightFormatting&&(r.formatting="strikethrough"),p=S(r),r.strikethrough=!1,p;if(t.match(/^[^\s]/,!1))return r.strikethrough=!0,n.highlightFormatting&&(r.formatting="strikethrough"),S(r)}else if(" "===l&&t.match(/^~~/,!0)){if(" "===t.peek())return S(r);t.backUp(2)}if(n.emoji&&":"===l&&t.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)){r.emoji=!0,n.highlightFormatting&&(r.formatting="emoji");var I=S(r);return r.emoji=!1,I}return" "===l&&(t.match(/^ +$/,!1)?r.trailingSpace++:r.trailingSpace&&(r.trailingSpaceNewLine=!0)),S(r)}function E(e,t){var i=e.next();if(">"===i){t.f=t.inline=T,n.highlightFormatting&&(t.formatting="link");var r=S(t);return r?r+=" ":r="",r+a.linkInline}return e.match(/^[^>]+/,!0),a.linkInline}function D(e,t){if(e.eatSpace())return null;var i=e.next();return"("===i||"["===i?(t.f=t.inline=A("("===i?")":"]"),n.highlightFormatting&&(t.formatting="link-string"),t.linkHref=!0,S(t)):"error"}var M={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/};function A(e){return function(t,i){var r=t.next();if(r===e){i.f=i.inline=T,n.highlightFormatting&&(i.formatting="link-string");var o=S(i);return i.linkHref=!1,o}return t.match(M[e]),i.linkHref=!0,S(i)}}function N(e,t){return e.match(/^([^\]\\]|\\.)*\]:/,!1)?(t.f=I,e.next(),n.highlightFormatting&&(t.formatting="link"),t.linkText=!0,S(t)):b(e,t,T)}function I(e,t){if(e.match(/^\]:/,!0)){t.f=t.inline=L,n.highlightFormatting&&(t.formatting="link");var i=S(t);return t.linkText=!1,i}return e.match(/^([^\]\\]|\\.)+/,!0),a.linkText}function L(e,t){return e.eatSpace()?null:(e.match(/^[^\s]+/,!0),void 0===e.peek()?t.linkTitle=!0:e.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,!0),t.f=t.inline=T,a.linkHref+" url")}var P={startState:function(){return{f:_,prevLine:{stream:null},thisLine:{stream:null},block:_,htmlState:null,indentation:0,inline:T,text:O,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(t){return{f:t.f,prevLine:t.prevLine,thisLine:t.thisLine,block:t.block,htmlState:t.htmlState&&e.copyState(i,t.htmlState),indentation:t.indentation,localMode:t.localMode,localState:t.localMode?e.copyState(t.localMode,t.localState):null,inline:t.inline,text:t.text,formatting:!1,linkText:t.linkText,linkTitle:t.linkTitle,linkHref:t.linkHref,code:t.code,em:t.em,strong:t.strong,strikethrough:t.strikethrough,emoji:t.emoji,header:t.header,setext:t.setext,hr:t.hr,taskList:t.taskList,list:t.list,listStack:t.listStack.slice(0),quote:t.quote,indentedCode:t.indentedCode,trailingSpace:t.trailingSpace,trailingSpaceNewLine:t.trailingSpaceNewLine,md_inside:t.md_inside,fencedEndRE:t.fencedEndRE}},token:function(e,t){if(t.formatting=!1,e!=t.thisLine.stream){if(t.header=0,t.hr=!1,e.match(/^\s*$/,!0))return x(t),null;if(t.prevLine=t.thisLine,t.thisLine={stream:e},t.taskList=!1,t.trailingSpace=0,t.trailingSpaceNewLine=!1,!t.localState&&(t.f=t.block,t.f!=k)){var n=e.match(/^\s*/,!0)[0].replace(/\t/g,v).length;if(t.indentation=n,t.indentationDiff=null,n>0)return null}}return t.f(e,t)},innerMode:function(e){return e.block==k?{state:e.htmlState,mode:i}:e.localState?{state:e.localState,mode:e.localMode}:{state:e,mode:P}},indent:function(t,n,r){return t.block==k&&i.indent?i.indent(t.htmlState,n,r):t.localState&&t.localMode.indent?t.localMode.indent(t.localState,n,r):e.Pass},blankLine:x,getType:S,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",closeBrackets:"()[]{}''\"\"``",fold:"markdown"};return P}),"xml"),e.defineMIME("text/markdown","markdown"),e.defineMIME("text/x-markdown","markdown")}))},9619:function(e,t,n){var i=n("597f"),r=n("0e15");e.exports={throttle:i,debounce:r}},"96cf":function(e,t,n){var i=function(e){"use strict";var t,n=Object.prototype,i=n.hasOwnProperty,r="function"===typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",a=r.asyncIterator||"@@asyncIterator",s=r.toStringTag||"@@toStringTag";function l(e,t,n,i){var r=t&&t.prototype instanceof m?t:m,o=Object.create(r.prototype),a=new E(i||[]);return o._invoke=C(e,n,a),o}function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(i){return{type:"throw",arg:i}}}e.wrap=l;var u="suspendedStart",d="suspendedYield",h="executing",f="completed",p={};function m(){}function g(){}function v(){}var b={};b[o]=function(){return this};var y=Object.getPrototypeOf,w=y&&y(y(D([])));w&&w!==n&&i.call(w,o)&&(b=w);var x=v.prototype=m.prototype=Object.create(b);function _(e){["next","throw","return"].forEach((function(t){e[t]=function(e){return this._invoke(t,e)}}))}function k(e,t){function n(r,o,a,s){var l=c(e[r],e,o);if("throw"!==l.type){var u=l.arg,d=u.value;return d&&"object"===_typeof2(d)&&i.call(d,"__await")?t.resolve(d.__await).then((function(e){n("next",e,a,s)}),(function(e){n("throw",e,a,s)})):t.resolve(d).then((function(e){u.value=e,a(u)}),(function(e){return n("throw",e,a,s)}))}s(l.arg)}var r;function o(e,i){function o(){return new t((function(t,r){n(e,i,t,r)}))}return r=r?r.then(o,o):o()}this._invoke=o}function C(e,t,n){var i=u;return function(r,o){if(i===h)throw new Error("Generator is already running");if(i===f){if("throw"===r)throw o;return M()}n.method=r,n.arg=o;while(1){var a=n.delegate;if(a){var s=S(a,n);if(s){if(s===p)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=f,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=h;var l=c(e,t,n);if("normal"===l.type){if(i=n.done?f:d,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=f,n.method="throw",n.arg=l.arg)}}}function S(e,n){var i=e.iterator[n.method];if(i===t){if(n.delegate=null,"throw"===n.method){if(e.iterator["return"]&&(n.method="return",n.arg=t,S(e,n),"throw"===n.method))return p;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=c(i,e.iterator,n.arg);if("throw"===r.type)return n.method="throw",n.arg=r.arg,n.delegate=null,p;var o=r.arg;return o?o.done?(n[e.resultName]=o.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,p):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,p)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function T(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function E(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function D(e){if(e){var n=e[o];if(n)return n.call(e);if("function"===typeof e.next)return e;if(!isNaN(e.length)){var r=-1,a=function n(){while(++r<e.length)if(i.call(e,r))return n.value=e[r],n.done=!1,n;return n.value=t,n.done=!0,n};return a.next=a}}return{next:M}}function M(){return{value:t,done:!0}}return g.prototype=x.constructor=v,v.constructor=g,v[s]=g.displayName="GeneratorFunction",e.isGeneratorFunction=function(e){var t="function"===typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s in e||(e[s]="GeneratorFunction")),e.prototype=Object.create(x),e},e.awrap=function(e){return{__await:e}},_(k.prototype),k.prototype[a]=function(){return this},e.AsyncIterator=k,e.async=function(t,n,i,r,o){void 0===o&&(o=Promise);var a=new k(l(t,n,i,r),o);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},_(x),x[s]="Generator",x[o]=function(){return this},x.toString=function(){return"[object Generator]"},e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){while(t.length){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},e.values=D,E.prototype={constructor:E,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(T),!e)for(var n in this)"t"===n.charAt(0)&&i.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=t)},stop:function(){this.done=!0;var e=this.tryEntries[0],t=e.completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var n=this;function r(i,r){return s.type="throw",s.arg=e,n.next=i,r&&(n.method="next",n.arg=t),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var l=i.call(a,"catchLoc"),c=i.call(a,"finallyLoc");if(l&&c){if(this.prev<a.catchLoc)return r(a.catchLoc,!0);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return r(a.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return r(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&i.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var o=r;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),T(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;T(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,i){return this.delegate={iterator:D(e),resultName:n,nextLoc:i},"next"===this.method&&(this.arg=t),p}},e}(e.exports);try{regeneratorRuntime=i}catch(r){Function("r","regeneratorRuntime = r")(i)}},9742:function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},9861:function(e,t,n){"use strict";n("e260");var i=n("23e7"),r=n("d066"),o=n("0d3b"),a=n("6eeb"),s=n("e2cc"),l=n("d44e"),c=n("9ed3"),u=n("69f3"),d=n("19aa"),h=n("5135"),f=n("0366"),p=n("f5df"),m=n("825a"),g=n("861d"),v=n("7c73"),b=n("5c6c"),y=n("9a1f"),w=n("35a1"),x=n("b622"),_=r("fetch"),k=r("Headers"),C=x("iterator"),S="URLSearchParams",O=S+"Iterator",T=u.set,E=u.getterFor(S),D=u.getterFor(O),M=/\+/g,A=Array(4),N=function(e){return A[e-1]||(A[e-1]=RegExp("((?:%[\\da-f]{2}){"+e+"})","gi"))},I=function(e){try{return decodeURIComponent(e)}catch(t){return e}},L=function(e){var t=e.replace(M," "),n=4;try{return decodeURIComponent(t)}catch(i){while(n)t=t.replace(N(n--),I);return t}},P=/[!'()~]|%20/g,$={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},F=function(e){return $[e]},j=function(e){return encodeURIComponent(e).replace(P,F)},z=function(e,t){if(t){var n,i,r=t.split("&"),o=0;while(o<r.length)n=r[o++],n.length&&(i=n.split("="),e.push({key:L(i.shift()),value:L(i.join("="))}))}},B=function(e){this.entries.length=0,z(this.entries,e)},R=function(e,t){if(e<t)throw TypeError("Not enough arguments")},V=c((function(e,t){T(this,{type:O,iterator:y(E(e).entries),kind:t})}),"Iterator",(function(){var e=D(this),t=e.kind,n=e.iterator.next(),i=n.value;return n.done||(n.value="keys"===t?i.key:"values"===t?i.value:[i.key,i.value]),n})),H=function e(){d(this,e,S);var t,n,i,r,o,a,s,l,c,u=arguments.length>0?arguments[0]:void 0,f=this,p=[];if(T(f,{type:S,entries:p,updateURL:function(){},updateSearchParams:B}),void 0!==u)if(g(u))if(t=w(u),"function"===typeof t){n=t.call(u),i=n.next;while(!(r=i.call(n)).done){if(o=y(m(r.value)),a=o.next,(s=a.call(o)).done||(l=a.call(o)).done||!a.call(o).done)throw TypeError("Expected sequence with length 2");p.push({key:s.value+"",value:l.value+""})}}else for(c in u)h(u,c)&&p.push({key:c,value:u[c]+""});else z(p,"string"===typeof u?"?"===u.charAt(0)?u.slice(1):u:u+"")},W=H.prototype;s(W,{append:function(e,t){R(arguments.length,2);var n=E(this);n.entries.push({key:e+"",value:t+""}),n.updateURL()},delete:function(e){R(arguments.length,1);var t=E(this),n=t.entries,i=e+"",r=0;while(r<n.length)n[r].key===i?n.splice(r,1):r++;t.updateURL()},get:function(e){R(arguments.length,1);for(var t=E(this).entries,n=e+"",i=0;i<t.length;i++)if(t[i].key===n)return t[i].value;return null},getAll:function(e){R(arguments.length,1);for(var t=E(this).entries,n=e+"",i=[],r=0;r<t.length;r++)t[r].key===n&&i.push(t[r].value);return i},has:function(e){R(arguments.length,1);var t=E(this).entries,n=e+"",i=0;while(i<t.length)if(t[i++].key===n)return!0;return!1},set:function(e,t){R(arguments.length,1);for(var n,i=E(this),r=i.entries,o=!1,a=e+"",s=t+"",l=0;l<r.length;l++)n=r[l],n.key===a&&(o?r.splice(l--,1):(o=!0,n.value=s));o||r.push({key:a,value:s}),i.updateURL()},sort:function(){var e,t,n,i=E(this),r=i.entries,o=r.slice();for(r.length=0,n=0;n<o.length;n++){for(e=o[n],t=0;t<n;t++)if(r[t].key>e.key){r.splice(t,0,e);break}t===n&&r.push(e)}i.updateURL()},forEach:function(e){var t,n=E(this).entries,i=f(e,arguments.length>1?arguments[1]:void 0,3),r=0;while(r<n.length)t=n[r++],i(t.value,t.key,this)},keys:function(){return new V(this,"keys")},values:function(){return new V(this,"values")},entries:function(){return new V(this,"entries")}},{enumerable:!0}),a(W,C,W.entries),a(W,"toString",(function(){var e,t=E(this).entries,n=[],i=0;while(i<t.length)e=t[i++],n.push(j(e.key)+"="+j(e.value));return n.join("&")}),{enumerable:!0}),l(H,S),i({global:!0,forced:!o},{URLSearchParams:H}),o||"function"!=typeof _||"function"!=typeof k||i({global:!0,enumerable:!0,forced:!0},{fetch:function(e){var t,n,i,r=[e];return arguments.length>1&&(t=arguments[1],g(t)&&(n=t.body,p(n)===S&&(i=t.headers?new k(t.headers):new k,i.has("content-type")||i.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),t=v(t,{body:b(0,String(n)),headers:b(0,i)}))),r.push(t)),_.apply(this,r)}}),e.exports={URLSearchParams:H,getState:E}},9876:function(e,t,n){var i=n("03d6"),r=n("9742");e.exports=Object.keys||function(e){return i(e,r)}},9911:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),o=n("af03");i({target:"String",proto:!0,forced:o("link")},{link:function(e){return r(this,"a","href",e)}})},"991c":function(e,t,n){(function(e){e(n("56b3"),n("ffda"))})((function(e){"use strict";var t,n,i,r,o={QUERY_DIV:";",ALIAS_KEYWORD:"AS"},a=e.Pos,s=e.cmpPos;function l(e){return"[object Array]"==Object.prototype.toString.call(e)}function c(t){var n=t.doc.modeOption;return"sql"===n&&(n="text/x-sql"),e.resolveMode(n).keywords}function u(t){var n=t.doc.modeOption;return"sql"===n&&(n="text/x-sql"),e.resolveMode(n).identifierQuote||"`"}function d(e){return"string"==typeof e?e:e.text}function h(e,t){return l(t)&&(t={columns:t}),t.text||(t.text=e),t}function f(e){var t={};if(l(e))for(var n=e.length-1;n>=0;n--){var i=e[n];t[d(i).toUpperCase()]=h(d(i),i)}else if(e)for(var r in e)t[r.toUpperCase()]=h(r,e[r]);return t}function p(e){return t[e.toUpperCase()]}function m(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function g(e,t){var n=e.length,i=d(t).substr(0,n);return e.toUpperCase()===i.toUpperCase()}function v(e,t,n,i){if(l(n))for(var r=0;r<n.length;r++)g(t,n[r])&&e.push(i(n[r]));else for(var o in n)if(n.hasOwnProperty(o)){var a=n[o];a=a&&!0!==a?a.displayText?{text:a.text,displayText:a.displayText}:a.text:o,g(t,a)&&e.push(i(a))}}function b(e){"."==e.charAt(0)&&(e=e.substr(1));for(var t=e.split(r+r),n=0;n<t.length;n++)t[n]=t[n].replace(new RegExp(r,"g"),"");return t.join(r)}function y(e){for(var t=d(e).split("."),n=0;n<t.length;n++)t[n]=r+t[n].replace(new RegExp(r,"g"),r+r)+r;var i=t.join(".");return"string"==typeof e?i:(e=m(e),e.text=i,e)}function w(e,i,o,s){var l=!1,c=[],u=i.start,d=!0;while(d)d="."==i.string.charAt(0),l=l||i.string.charAt(0)==r,u=i.start,c.unshift(b(i.string)),i=s.getTokenAt(a(e.line,i.start)),"."==i.string&&(d=!0,i=s.getTokenAt(a(e.line,i.start)));var h=c.join(".");v(o,h,t,(function(e){return l?y(e):e})),v(o,h,n,(function(e){return l?y(e):e})),h=c.pop();var f=c.join("."),g=!1,w=f;if(!p(f)){var x=f;f=_(f,s),f!==x&&(g=!0)}var k=p(f);return k&&k.columns&&(k=k.columns),k&&v(o,h,k,(function(e){var t=f;return 1==g&&(t=w),"string"==typeof e?e=t+"."+e:(e=m(e),e.text=t+"."+e.text),l?y(e):e})),u}function x(e,t){for(var n=e.split(/\s+/),i=0;i<n.length;i++)n[i]&&t(n[i].replace(/[`,;]/g,""))}function _(e,t){var n=t.doc,i=n.getValue(),r=e.toUpperCase(),l="",c="",u=[],d={start:a(0,0),end:a(t.lastLine(),t.getLineHandle(t.lastLine()).length)},h=i.indexOf(o.QUERY_DIV);while(-1!=h)u.push(n.posFromIndex(h)),h=i.indexOf(o.QUERY_DIV,h+1);u.unshift(a(0,0)),u.push(a(t.lastLine(),t.getLineHandle(t.lastLine()).text.length));for(var f=null,m=t.getCursor(),g=0;g<u.length;g++){if((null==f||s(m,f)>0)&&s(m,u[g])<=0){d={start:f,end:u[g]};break}f=u[g]}if(d.start){var v=n.getRange(d.start,d.end,!1);for(g=0;g<v.length;g++){var b=v[g];if(x(b,(function(e){var t=e.toUpperCase();t===r&&p(l)&&(c=l),t!==o.ALIAS_KEYWORD&&(l=e)})),c)break}}return c}e.registerHelper("hint","sql",(function(e,o){t=f(o&&o.tables);var s=o&&o.defaultTable,l=o&&o.disableKeywords;n=s&&p(s),i=c(e),r=u(e),s&&!n&&(n=_(s,e)),n=n||[],n.columns&&(n=n.columns);var d,h,m,g=e.getCursor(),b=[],y=e.getTokenAt(g);if(y.end>g.ch&&(y.end=g.ch,y.string=y.string.slice(0,g.ch-y.start)),y.string.match(/^[.`"'\w@][\w$#]*$/g)?(m=y.string,d=y.start,h=y.end):(d=h=g.ch,m=""),"."==m.charAt(0)||m.charAt(0)==r)d=w(g,y,b,e);else{var x=function(e,t){return"object"===_typeof2(e)?e.className=t:e={text:e,className:t},e};v(b,m,n,(function(e){return x(e,"CodeMirror-hint-table CodeMirror-hint-default-table")})),v(b,m,t,(function(e){return x(e,"CodeMirror-hint-table")})),l||v(b,m,i,(function(e){return x(e.toUpperCase(),"CodeMirror-hint-keyword")}))}return{list:b,from:a(g.line,d),to:a(g.line,h)}}))}))},9949:function(e,t,n){"use strict";var i=n("b3ff"),r=n.n(i);r.a},"99af":function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),o=n("e8b5"),a=n("861d"),s=n("7b0b"),l=n("50c4"),c=n("8418"),u=n("65f0"),d=n("1dde"),h=n("b622"),f=n("2d00"),p=h("isConcatSpreadable"),m=9007199254740991,g="Maximum allowed index exceeded",v=f>=51||!r((function(){var e=[];return e[p]=!1,e.concat()[0]!==e})),b=d("concat"),y=function(e){if(!a(e))return!1;var t=e[p];return void 0!==t?!!t:o(e)},w=!v||!b;i({target:"Array",proto:!0,forced:w},{concat:function(e){var t,n,i,r,o,a=s(this),d=u(a,0),h=0;for(t=-1,i=arguments.length;t<i;t++)if(o=-1===t?a:arguments[t],y(o)){if(r=l(o.length),h+r>m)throw TypeError(g);for(n=0;n<r;n++,h++)n in o&&c(d,h,o[n])}else{if(h>=m)throw TypeError(g);c(d,h++,o)}return d.length=h,d}})},"9a1f":function(e,t,n){var i=n("825a"),r=n("35a1");e.exports=function(e){var t=r(e);if("function"!=typeof t)throw TypeError(String(e)+" is not iterable");return i(t.call(e))}},"9a8c":function(e,t,n){"use strict";var i=n("ebb5"),r=n("145e"),o=i.aTypedArray,a=i.exportTypedArrayMethod;a("copyWithin",(function(e,t){return r.call(o(this),e,t,arguments.length>2?arguments[2]:void 0)}))},"9b74":function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";var t="CodeMirror-hint",n="CodeMirror-hint-active";function i(e,t){this.cm=e,this.options=t,this.widget=null,this.debounce=0,this.tick=0,this.startPos=this.cm.getCursor("start"),this.startLen=this.cm.getLine(this.startPos.line).length-this.cm.getSelection().length;var n=this;e.on("cursorActivity",this.activityFunc=function(){n.cursorActivity()})}e.showHint=function(e,t,n){if(!t)return e.showHint(n);n&&n.async&&(t.async=!0);var i={hint:t};if(n)for(var r in n)i[r]=n[r];return e.showHint(i)},e.defineExtension("showHint",(function(t){t=a(this,this.getCursor("start"),t);var n=this.listSelections();if(!(n.length>1)){if(this.somethingSelected()){if(!t.hint.supportsSelection)return;for(var r=0;r<n.length;r++)if(n[r].head.line!=n[r].anchor.line)return}this.state.completionActive&&this.state.completionActive.close();var o=this.state.completionActive=new i(this,t);o.options.hint&&(e.signal(this,"startCompletion",this),o.update(!0))}})),e.defineExtension("closeHint",(function(){this.state.completionActive&&this.state.completionActive.close()}));var r=window.requestAnimationFrame||function(e){return setTimeout(e,1e3/60)},o=window.cancelAnimationFrame||clearTimeout;function a(e,t,n){var i=e.options.hintOptions,r={};for(var o in p)r[o]=p[o];if(i)for(var o in i)void 0!==i[o]&&(r[o]=i[o]);if(n)for(var o in n)void 0!==n[o]&&(r[o]=n[o]);return r.hint.resolve&&(r.hint=r.hint.resolve(e,t)),r}function s(e){return"string"==typeof e?e:e.text}function l(e,t){var n={Up:function(){t.moveFocus(-1)},Down:function(){t.moveFocus(1)},PageUp:function(){t.moveFocus(1-t.menuSize(),!0)},PageDown:function(){t.moveFocus(t.menuSize()-1,!0)},Home:function(){t.setFocus(0)},End:function(){t.setFocus(t.length-1)},Enter:t.pick,Tab:t.pick,Esc:t.close},i=/Mac/.test(navigator.platform);i&&(n["Ctrl-P"]=function(){t.moveFocus(-1)},n["Ctrl-N"]=function(){t.moveFocus(1)});var r=e.options.customKeys,o=r?{}:n;function a(e,i){var r;r="string"!=typeof i?function(e){return i(e,t)}:n.hasOwnProperty(i)?n[i]:i,o[e]=r}if(r)for(var s in r)r.hasOwnProperty(s)&&a(s,r[s]);var l=e.options.extraKeys;if(l)for(var s in l)l.hasOwnProperty(s)&&a(s,l[s]);return o}function c(e,t){while(t&&t!=e){if("LI"===t.nodeName.toUpperCase()&&t.parentNode==e)return t;t=t.parentNode}}function u(i,r){this.completion=i,this.data=r,this.picked=!1;var o=this,a=i.cm,u=a.getInputField().ownerDocument,d=u.defaultView||u.parentWindow,h=this.hints=u.createElement("ul"),f=i.cm.options.theme;h.className="CodeMirror-hints "+f,this.selectedHint=r.selectedHint||0;for(var p=r.list,m=0;m<p.length;++m){var g=h.appendChild(u.createElement("li")),v=p[m],b=t+(m!=this.selectedHint?"":" "+n);null!=v.className&&(b=v.className+" "+b),g.className=b,v.render?v.render(g,r,v):g.appendChild(u.createTextNode(v.displayText||s(v))),g.hintId=m}var y=i.options.container||u.body,w=a.cursorCoords(i.options.alignWithWord?r.from:null),x=w.left,_=w.bottom,k=!0,C=0,S=0;if(y!==u.body){var O=-1!==["absolute","relative","fixed"].indexOf(d.getComputedStyle(y).position),T=O?y:y.offsetParent,E=T.getBoundingClientRect(),D=u.body.getBoundingClientRect();C=E.left-D.left-T.scrollLeft,S=E.top-D.top-T.scrollTop}h.style.left=x-C+"px",h.style.top=_-S+"px";var M=d.innerWidth||Math.max(u.body.offsetWidth,u.documentElement.offsetWidth),A=d.innerHeight||Math.max(u.body.offsetHeight,u.documentElement.offsetHeight);y.appendChild(h);var N=h.getBoundingClientRect(),I=N.bottom-A,L=h.scrollHeight>h.clientHeight+1,P=a.getScrollInfo();if(I>0){var $=N.bottom-N.top,F=w.top-(w.bottom-N.top);if(F-$>0)h.style.top=(_=w.top-$-S)+"px",k=!1;else if($>A){h.style.height=A-5+"px",h.style.top=(_=w.bottom-N.top-S)+"px";var j=a.getCursor();r.from.ch!=j.ch&&(w=a.cursorCoords(j),h.style.left=(x=w.left-C)+"px",N=h.getBoundingClientRect())}}var z,B=N.right-M;if(B>0&&(N.right-N.left>M&&(h.style.width=M-5+"px",B-=N.right-N.left-M),h.style.left=(x=w.left-B-C)+"px"),L)for(var R=h.firstChild;R;R=R.nextSibling)R.style.paddingRight=a.display.nativeBarWidth+"px";return a.addKeyMap(this.keyMap=l(i,{moveFocus:function(e,t){o.changeActive(o.selectedHint+e,t)},setFocus:function(e){o.changeActive(e)},menuSize:function(){return o.screenAmount()},length:p.length,close:function(){i.close()},pick:function(){o.pick()},data:r})),i.options.closeOnUnfocus&&(a.on("blur",this.onBlur=function(){z=setTimeout((function(){i.close()}),100)}),a.on("focus",this.onFocus=function(){clearTimeout(z)})),a.on("scroll",this.onScroll=function(){var e=a.getScrollInfo(),t=a.getWrapperElement().getBoundingClientRect(),n=_+P.top-e.top,r=n-(d.pageYOffset||(u.documentElement||u.body).scrollTop);if(k||(r+=h.offsetHeight),r<=t.top||r>=t.bottom)return i.close();h.style.top=n+"px",h.style.left=x+P.left-e.left+"px"}),e.on(h,"dblclick",(function(e){var t=c(h,e.target||e.srcElement);t&&null!=t.hintId&&(o.changeActive(t.hintId),o.pick())})),e.on(h,"click",(function(e){var t=c(h,e.target||e.srcElement);t&&null!=t.hintId&&(o.changeActive(t.hintId),i.options.completeOnSingleClick&&o.pick())})),e.on(h,"mousedown",(function(){setTimeout((function(){a.focus()}),20)})),this.scrollToActive(),e.signal(r,"select",p[this.selectedHint],h.childNodes[this.selectedHint]),!0}function d(e,t){if(!e.somethingSelected())return t;for(var n=[],i=0;i<t.length;i++)t[i].supportsSelection&&n.push(t[i]);return n}function h(e,t,n,i){if(e.async)e(t,i,n);else{var r=e(t,n);r&&r.then?r.then(i):i(r)}}function f(t,n){var i,r=t.getHelpers(n,"hint");if(r.length){var o=function(e,t,n){var i=d(e,r);function o(r){if(r==i.length)return t(null);h(i[r],e,n,(function(e){e&&e.list.length>0?t(e):o(r+1)}))}o(0)};return o.async=!0,o.supportsSelection=!0,o}return(i=t.getHelper(t.getCursor(),"hintWords"))?function(t){return e.hint.fromList(t,{words:i})}:e.hint.anyword?function(t,n){return e.hint.anyword(t,n)}:function(){}}i.prototype={close:function(){this.active()&&(this.cm.state.completionActive=null,this.tick=null,this.cm.off("cursorActivity",this.activityFunc),this.widget&&this.data&&e.signal(this.data,"close"),this.widget&&this.widget.close(),e.signal(this.cm,"endCompletion",this.cm))},active:function(){return this.cm.state.completionActive==this},pick:function(t,n){var i=t.list[n],r=this;this.cm.operation((function(){i.hint?i.hint(r.cm,t,i):r.cm.replaceRange(s(i),i.from||t.from,i.to||t.to,"complete"),e.signal(t,"pick",i),r.cm.scrollIntoView()})),this.close()},cursorActivity:function(){this.debounce&&(o(this.debounce),this.debounce=0);var e=this.startPos;this.data&&(e=this.data.from);var t=this.cm.getCursor(),n=this.cm.getLine(t.line);if(t.line!=this.startPos.line||n.length-t.ch!=this.startLen-this.startPos.ch||t.ch<e.ch||this.cm.somethingSelected()||!t.ch||this.options.closeCharacters.test(n.charAt(t.ch-1)))this.close();else{var i=this;this.debounce=r((function(){i.update()})),this.widget&&this.widget.disable()}},update:function(e){if(null!=this.tick){var t=this,n=++this.tick;h(this.options.hint,this.cm,this.options,(function(i){t.tick==n&&t.finishUpdate(i,e)}))}},finishUpdate:function(t,n){this.data&&e.signal(this.data,"update");var i=this.widget&&this.widget.picked||n&&this.options.completeSingle;this.widget&&this.widget.close(),this.data=t,t&&t.list.length&&(i&&1==t.list.length?this.pick(t,0):(this.widget=new u(this,t),e.signal(t,"shown")))}},u.prototype={close:function(){if(this.completion.widget==this){this.completion.widget=null,this.hints.parentNode.removeChild(this.hints),this.completion.cm.removeKeyMap(this.keyMap);var e=this.completion.cm;this.completion.options.closeOnUnfocus&&(e.off("blur",this.onBlur),e.off("focus",this.onFocus)),e.off("scroll",this.onScroll)}},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var e=this;this.keyMap={Enter:function(){e.picked=!0}},this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(t,i){if(t>=this.data.list.length?t=i?this.data.list.length-1:0:t<0&&(t=i?0:this.data.list.length-1),this.selectedHint!=t){var r=this.hints.childNodes[this.selectedHint];r&&(r.className=r.className.replace(" "+n,"")),r=this.hints.childNodes[this.selectedHint=t],r.className+=" "+n,this.scrollToActive(),e.signal(this.data,"select",this.data.list[this.selectedHint],r)}},scrollToActive:function(){var e=this.completion.options.scrollMargin||0,t=this.hints.childNodes[Math.max(0,this.selectedHint-e)],n=this.hints.childNodes[Math.min(this.data.list.length-1,this.selectedHint+e)],i=this.hints.firstChild;t.offsetTop<this.hints.scrollTop?this.hints.scrollTop=t.offsetTop-i.offsetTop:n.offsetTop+n.offsetHeight>this.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTop=n.offsetTop+n.offsetHeight-this.hints.clientHeight+i.offsetTop)},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1}},e.registerHelper("hint","auto",{resolve:f}),e.registerHelper("hint","fromList",(function(t,n){var i,r=t.getCursor(),o=t.getTokenAt(r),a=e.Pos(r.line,o.start),s=r;o.start<r.ch&&/\w/.test(o.string.charAt(r.ch-o.start-1))?i=o.string.substr(0,r.ch-o.start):(i="",a=r);for(var l=[],c=0;c<n.words.length;c++){var u=n.words[c];u.slice(0,i.length)==i&&l.push(u)}if(l.length)return{list:l,from:a,to:s}})),e.commands.autocomplete=e.showHint;var p={hint:e.hint.auto,completeSingle:!0,alignWithWord:!0,closeCharacters:/[\s()\[\]{};:>,]/,closeOnUnfocus:!0,completeOnSingleClick:!0,container:null,customKeys:null,extraKeys:null};e.defineOption("hintOptions",null)}))},"9bc9":function(e,t,n){},"9bdd":function(e,t,n){var i=n("825a");e.exports=function(e,t,n,r){try{return r?t(i(n)[0],n[1]):t(n)}catch(a){var o=e["return"];throw void 0!==o&&i(o.call(e)),a}}},"9bf2":function(e,t,n){var i=n("83ab"),r=n("0cfb"),o=n("825a"),a=n("c04e"),s=Object.defineProperty;t.f=i?s:function(e,t,n){if(o(e),t=a(t,!0),o(n),r)try{return s(e,t,n)}catch(i){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},"9c0c":function(e,t,n){var i=n("1609");e.exports=function(e,t,n){if(i(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}}},"9c0e":function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},"9d11":function(e,t,n){var i=n("fc5e"),r=Math.max,o=Math.min;e.exports=function(e,t){return e=i(e),e<0?r(e+t,0):o(e,t)}},"9d7e":function(e,t,n){"use strict";n("a4d3"),n("e01a"),n("d28b"),n("e260"),n("d3b7"),n("ac1f"),n("3ca3"),n("5319"),n("ddb0");var i=n("7037");t.__esModule=!0;var r="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)};t.default=function(e){function t(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return 1===n.length&&"object"===r(n[0])&&(n=n[0]),n&&n.hasOwnProperty||(n={}),e.replace(a,(function(t,i,r,a){var s=void 0;return"{"===e[a-1]&&"}"===e[a+t.length]?r:(s=(0,o.hasOwn)(n,r)?n[r]:null,null===s||void 0===s?"":s)}))}return t};var o=n("8122"),a=/(%|)\{([0-9a-zA-Z_]+)\}/g},"9e6a":function(e,t,n){"use strict";var i=n("d233"),r=Object.prototype.hasOwnProperty,o={allowDots:!1,allowPrototypes:!1,arrayLimit:20,decoder:i.decode,delimiter:"&",depth:5,parameterLimit:1e3,plainObjects:!1,strictNullHandling:!1},a=function(e,t){for(var n={},i=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,a=t.parameterLimit===1/0?void 0:t.parameterLimit,s=i.split(t.delimiter,a),l=0;l<s.length;++l){var c,u,d=s[l],h=d.indexOf("]="),f=-1===h?d.indexOf("="):h+1;-1===f?(c=t.decoder(d,o.decoder),u=t.strictNullHandling?null:""):(c=t.decoder(d.slice(0,f),o.decoder),u=t.decoder(d.slice(f+1),o.decoder)),r.call(n,c)?n[c]=[].concat(n[c]).concat(u):n[c]=u}return n},s=function(e,t,n){for(var i=t,r=e.length-1;r>=0;--r){var o,a=e[r];if("[]"===a)o=[],o=o.concat(i);else{o=n.plainObjects?Object.create(null):{};var s="["===a.charAt(0)&&"]"===a.charAt(a.length-1)?a.slice(1,-1):a,l=parseInt(s,10);!isNaN(l)&&a!==s&&String(l)===s&&l>=0&&n.parseArrays&&l<=n.arrayLimit?(o=[],o[l]=i):o[s]=i}i=o}return i},l=function(e,t,n){if(e){var i=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,o=/(\[[^[\]]*])/,a=/(\[[^[\]]*])/g,l=o.exec(i),c=l?i.slice(0,l.index):i,u=[];if(c){if(!n.plainObjects&&r.call(Object.prototype,c)&&!n.allowPrototypes)return;u.push(c)}var d=0;while(null!==(l=a.exec(i))&&d<n.depth){if(d+=1,!n.plainObjects&&r.call(Object.prototype,l[1].slice(1,-1))&&!n.allowPrototypes)return;u.push(l[1])}return l&&u.push("["+i.slice(l.index)+"]"),s(u,t,n)}};e.exports=function(e,t){var n=t?i.assign({},t):{};if(null!==n.decoder&&void 0!==n.decoder&&"function"!==typeof n.decoder)throw new TypeError("Decoder has to be a function.");if(n.ignoreQueryPrefix=!0===n.ignoreQueryPrefix,n.delimiter="string"===typeof n.delimiter||i.isRegExp(n.delimiter)?n.delimiter:o.delimiter,n.depth="number"===typeof n.depth?n.depth:o.depth,n.arrayLimit="number"===typeof n.arrayLimit?n.arrayLimit:o.arrayLimit,n.parseArrays=!1!==n.parseArrays,n.decoder="function"===typeof n.decoder?n.decoder:o.decoder,n.allowDots="boolean"===typeof n.allowDots?n.allowDots:o.allowDots,n.plainObjects="boolean"===typeof n.plainObjects?n.plainObjects:o.plainObjects,n.allowPrototypes="boolean"===typeof n.allowPrototypes?n.allowPrototypes:o.allowPrototypes,n.parameterLimit="number"===typeof n.parameterLimit?n.parameterLimit:o.parameterLimit,n.strictNullHandling="boolean"===typeof n.strictNullHandling?n.strictNullHandling:o.strictNullHandling,""===e||null===e||"undefined"===typeof e)return n.plainObjects?Object.create(null):{};for(var r="string"===typeof e?a(e,n):e,s=n.plainObjects?Object.create(null):{},c=Object.keys(r),u=0;u<c.length;++u){var d=c[u],h=l(d,r[d],n);s=i.merge(s,h,n)}return i.compact(s)}},"9eb9":function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";e.overlayMode=function(t,n,i){return{startState:function(){return{base:e.startState(t),overlay:e.startState(n),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(i){return{base:e.copyState(t,i.base),overlay:e.copyState(n,i.overlay),basePos:i.basePos,baseCur:null,overlayPos:i.overlayPos,overlayCur:null}},token:function(e,r){return(e!=r.streamSeen||Math.min(r.basePos,r.overlayPos)<e.start)&&(r.streamSeen=e,r.basePos=r.overlayPos=e.start),e.start==r.basePos&&(r.baseCur=t.token(e,r.base),r.basePos=e.pos),e.start==r.overlayPos&&(e.pos=e.start,r.overlayCur=n.token(e,r.overlay),r.overlayPos=e.pos),e.pos=Math.min(r.basePos,r.overlayPos),null==r.overlayCur?r.baseCur:null!=r.baseCur&&r.overlay.combineTokens||i&&null==r.overlay.combineTokens?r.baseCur+" "+r.overlayCur:r.overlayCur},indent:t.indent&&function(e,n,i){return t.indent(e.base,n,i)},electricChars:t.electricChars,innerMode:function(e){return{state:e.base,mode:t}},blankLine:function(e){var r,o;return t.blankLine&&(r=t.blankLine(e.base)),n.blankLine&&(o=n.blankLine(e.overlay)),null==o?r:i&&null!=r?r+" "+o:o}}}}))},"9ed3":function(e,t,n){"use strict";var i=n("ae93").IteratorPrototype,r=n("7c73"),o=n("5c6c"),a=n("d44e"),s=n("3f8c"),l=function(){return this};e.exports=function(e,t,n){var c=t+" Iterator";return e.prototype=r(i,{next:o(1,n)}),a(e,c,!1,!0),s[c]=l,e}},"9f7f":function(e,t,n){},"9f7fd":function(e,t,n){"use strict";var i=n("d039");function r(e,t){return RegExp(e,t)}t.UNSUPPORTED_Y=i((function(){var e=r("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),t.BROKEN_CARET=i((function(){var e=r("^r","gy");return e.lastIndex=2,null!=e.exec("str")}))},"9fbb":function(e,t,n){var i=n("4d88");e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==i(e)?e.split(""):Object(e)}},"9fcc":function(e,t,n){"use strict";var i=n("14b4"),r=n.n(i);r.a},a078:function(e,t,n){var i=n("7b0b"),r=n("50c4"),o=n("35a1"),a=n("e95a"),s=n("0366"),l=n("ebb5").aTypedArrayConstructor;e.exports=function(e){var t,n,c,u,d,h,f=i(e),p=arguments.length,m=p>1?arguments[1]:void 0,g=void 0!==m,v=o(f);if(void 0!=v&&!a(v)){d=v.call(f),h=d.next,f=[];while(!(u=h.call(d)).done)f.push(u.value)}for(g&&p>2&&(m=s(m,arguments[2],2)),n=r(f.length),c=new(l(this))(n),t=0;n>t;t++)c[t]=g?m(f[t],t):f[t];return c}},a0bd:function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";e.defineMode("coffeescript",(function(e,t){var n="error";function i(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}var r=/^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/,o=/^(?:[()\[\]{},:`=;]|\.\.?\.?)/,a=/^[_A-Za-z$][_A-Za-z$0-9]*/,s=/^@[_A-Za-z$][_A-Za-z$0-9]*/,l=i(["and","or","not","is","isnt","in","instanceof","typeof"]),c=["for","while","loop","if","unless","else","switch","try","catch","finally","class"],u=["break","by","continue","debugger","delete","do","in","of","new","return","then","this","@","throw","when","until","extends"],d=i(c.concat(u));c=i(c);var h=/^('{3}|\"{3}|['\"])/,f=/^(\/{3}|\/)/,p=["Infinity","NaN","undefined","null","true","false","on","off","yes","no"],m=i(p);function g(e,t){if(e.sol()){null===t.scope.align&&(t.scope.align=!1);var i=t.scope.offset;if(e.eatSpace()){var c=e.indentation();return c>i&&"coffee"==t.scope.type?"indent":c<i?"dedent":null}i>0&&w(e,t)}if(e.eatSpace())return null;var u=e.peek();if(e.match("####"))return e.skipToEnd(),"comment";if(e.match("###"))return t.tokenize=b,t.tokenize(e,t);if("#"===u)return e.skipToEnd(),"comment";if(e.match(/^-?[0-9\.]/,!1)){var p=!1;if(e.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)&&(p=!0),e.match(/^-?\d+\.\d*/)&&(p=!0),e.match(/^-?\.\d+/)&&(p=!0),p)return"."==e.peek()&&e.backUp(1),"number";var g=!1;if(e.match(/^-?0x[0-9a-f]+/i)&&(g=!0),e.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)&&(g=!0),e.match(/^-?0(?![\dx])/i)&&(g=!0),g)return"number"}if(e.match(h))return t.tokenize=v(e.current(),!1,"string"),t.tokenize(e,t);if(e.match(f)){if("/"!=e.current()||e.match(/^.*\//,!1))return t.tokenize=v(e.current(),!0,"string-2"),t.tokenize(e,t);e.backUp(1)}return e.match(r)||e.match(l)?"operator":e.match(o)?"punctuation":e.match(m)?"atom":e.match(s)||t.prop&&e.match(a)?"property":e.match(d)?"keyword":e.match(a)?"variable":(e.next(),n)}function v(e,i,r){return function(o,a){while(!o.eol())if(o.eatWhile(/[^'"\/\\]/),o.eat("\\")){if(o.next(),i&&o.eol())return r}else{if(o.match(e))return a.tokenize=g,r;o.eat(/['"\/]/)}return i&&(t.singleLineStringErrors?r=n:a.tokenize=g),r}}function b(e,t){while(!e.eol()){if(e.eatWhile(/[^#]/),e.match("###")){t.tokenize=g;break}e.eatWhile("#")}return"comment"}function y(t,n,i){i=i||"coffee";for(var r=0,o=!1,a=null,s=n.scope;s;s=s.prev)if("coffee"===s.type||"}"==s.type){r=s.offset+e.indentUnit;break}"coffee"!==i?(o=null,a=t.column()+t.current().length):n.scope.align&&(n.scope.align=!1),n.scope={offset:r,type:i,prev:n.scope,align:o,alignOffset:a}}function w(e,t){if(t.scope.prev){if("coffee"===t.scope.type){for(var n=e.indentation(),i=!1,r=t.scope;r;r=r.prev)if(n===r.offset){i=!0;break}if(!i)return!0;while(t.scope.prev&&t.scope.offset!==n)t.scope=t.scope.prev;return!1}return t.scope=t.scope.prev,!1}}function x(e,t){var i=t.tokenize(e,t),r=e.current();"return"===r&&(t.dedent=!0),(("->"===r||"=>"===r)&&e.eol()||"indent"===i)&&y(e,t);var o="[({".indexOf(r);if(-1!==o&&y(e,t,"])}".slice(o,o+1)),c.exec(r)&&y(e,t),"then"==r&&w(e,t),"dedent"===i&&w(e,t))return n;if(o="])}".indexOf(r),-1!==o){while("coffee"==t.scope.type&&t.scope.prev)t.scope=t.scope.prev;t.scope.type==r&&(t.scope=t.scope.prev)}return t.dedent&&e.eol()&&("coffee"==t.scope.type&&t.scope.prev&&(t.scope=t.scope.prev),t.dedent=!1),i}var _={startState:function(e){return{tokenize:g,scope:{offset:e||0,type:"coffee",prev:null,align:!1},prop:!1,dedent:0}},token:function(e,t){var n=null===t.scope.align&&t.scope;n&&e.sol()&&(n.align=!1);var i=x(e,t);return i&&"comment"!=i&&(n&&(n.align=!0),t.prop="punctuation"==i&&"."==e.current()),i},indent:function(e,t){if(e.tokenize!=g)return 0;var n=e.scope,i=t&&"])}".indexOf(t.charAt(0))>-1;if(i)while("coffee"==n.type&&n.prev)n=n.prev;var r=i&&n.type===t.charAt(0);return n.align?n.alignOffset-(r?1:0):(r?n.prev:n).offset},lineComment:"#",fold:"indent"};return _})),e.defineMIME("application/vnd.coffeescript","coffeescript"),e.defineMIME("text/x-coffeescript","coffeescript"),e.defineMIME("text/coffeescript","coffeescript")}))},a13b:function(e,t,n){},a15b:function(e,t,n){"use strict";var i=n("23e7"),r=n("44ad"),o=n("fc6a"),a=n("a640"),s=[].join,l=r!=Object,c=a("join",",");i({target:"Array",proto:!0,forced:l||!c},{join:function(e){return s.call(o(this),void 0===e?",":e)}})},a1ff:function(e,t,n){},a2c5:function(e,t,n){"use strict";var i=n("921b"),r=n.n(i);r.a},a3c7:function(e,t,n){},a3de:function(e,t,n){"use strict";var i=!("undefined"===typeof window||!window.document||!window.document.createElement),r={canUseDOM:i,canUseWorkers:"undefined"!==typeof Worker,canUseEventListeners:i&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:i&&!!window.screen,isInWorker:!i};e.exports=r},a434:function(e,t,n){"use strict";var i=n("23e7"),r=n("23cb"),o=n("a691"),a=n("50c4"),s=n("7b0b"),l=n("65f0"),c=n("8418"),u=n("1dde"),d=n("ae40"),h=u("splice"),f=d("splice",{ACCESSORS:!0,0:0,1:2}),p=Math.max,m=Math.min,g=9007199254740991,v="Maximum allowed length exceeded";i({target:"Array",proto:!0,forced:!h||!f},{splice:function(e,t){var n,i,u,d,h,f,b=s(this),y=a(b.length),w=r(e,y),x=arguments.length;if(0===x?n=i=0:1===x?(n=0,i=y-w):(n=x-2,i=m(p(o(t),0),y-w)),y+n-i>g)throw TypeError(v);for(u=l(b,i),d=0;d<i;d++)h=w+d,h in b&&c(u,d,b[h]);if(u.length=i,n<i){for(d=w;d<y-i;d++)h=d+i,f=d+n,h in b?b[f]=b[h]:delete b[f];for(d=y;d>y-i+n;d--)delete b[d-1]}else if(n>i)for(d=y-i;d>w;d--)h=d+i-1,f=d+n-1,h in b?b[f]=b[h]:delete b[f];for(d=0;d<n;d++)b[d+w]=arguments[d+2];return b.length=y-i+n,u}})},a4c8:function(e,t,n){},a4d3:function(e,t,n){"use strict";var i=n("23e7"),r=n("da84"),o=n("d066"),a=n("c430"),s=n("83ab"),l=n("4930"),c=n("fdbf"),u=n("d039"),d=n("5135"),h=n("e8b5"),f=n("861d"),p=n("825a"),m=n("7b0b"),g=n("fc6a"),v=n("c04e"),b=n("5c6c"),y=n("7c73"),w=n("df75"),x=n("241c"),_=n("057f"),k=n("7418"),C=n("06cf"),S=n("9bf2"),O=n("d1e7"),T=n("9112"),E=n("6eeb"),D=n("5692"),M=n("f772"),A=n("d012"),N=n("90e3"),I=n("b622"),L=n("e538"),P=n("746f"),$=n("d44e"),F=n("69f3"),j=n("b727").forEach,z=M("hidden"),B="Symbol",R="prototype",V=I("toPrimitive"),H=F.set,W=F.getterFor(B),q=Object[R],U=r.Symbol,K=o("JSON","stringify"),G=C.f,Y=S.f,X=_.f,Z=O.f,Q=D("symbols"),J=D("op-symbols"),ee=D("string-to-symbol-registry"),te=D("symbol-to-string-registry"),ne=D("wks"),ie=r.QObject,re=!ie||!ie[R]||!ie[R].findChild,oe=s&&u((function(){return 7!=y(Y({},"a",{get:function(){return Y(this,"a",{value:7}).a}})).a}))?function(e,t,n){var i=G(q,t);i&&delete q[t],Y(e,t,n),i&&e!==q&&Y(q,t,i)}:Y,ae=function(e,t){var n=Q[e]=y(U[R]);return H(n,{type:B,tag:e,description:t}),s||(n.description=t),n},se=c?function(e){return"symbol"==_typeof2(e)}:function(e){return Object(e)instanceof U},le=function e(t,n,i){t===q&&e(J,n,i),p(t);var r=v(n,!0);return p(i),d(Q,r)?(i.enumerable?(d(t,z)&&t[z][r]&&(t[z][r]=!1),i=y(i,{enumerable:b(0,!1)})):(d(t,z)||Y(t,z,b(1,{})),t[z][r]=!0),oe(t,r,i)):Y(t,r,i)},ce=function(e,t){p(e);var n=g(t),i=w(n).concat(pe(n));return j(i,(function(t){s&&!de.call(n,t)||le(e,t,n[t])})),e},ue=function(e,t){return void 0===t?y(e):ce(y(e),t)},de=function(e){var t=v(e,!0),n=Z.call(this,t);return!(this===q&&d(Q,t)&&!d(J,t))&&(!(n||!d(this,t)||!d(Q,t)||d(this,z)&&this[z][t])||n)},he=function(e,t){var n=g(e),i=v(t,!0);if(n!==q||!d(Q,i)||d(J,i)){var r=G(n,i);return!r||!d(Q,i)||d(n,z)&&n[z][i]||(r.enumerable=!0),r}},fe=function(e){var t=X(g(e)),n=[];return j(t,(function(e){d(Q,e)||d(A,e)||n.push(e)})),n},pe=function(e){var t=e===q,n=X(t?J:g(e)),i=[];return j(n,(function(e){!d(Q,e)||t&&!d(q,e)||i.push(Q[e])})),i};if(l||(U=function(){if(this instanceof U)throw TypeError("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?String(arguments[0]):void 0,t=N(e),n=function e(n){this===q&&e.call(J,n),d(this,z)&&d(this[z],t)&&(this[z][t]=!1),oe(this,t,b(1,n))};return s&&re&&oe(q,t,{configurable:!0,set:n}),ae(t,e)},E(U[R],"toString",(function(){return W(this).tag})),E(U,"withoutSetter",(function(e){return ae(N(e),e)})),O.f=de,S.f=le,C.f=he,x.f=_.f=fe,k.f=pe,L.f=function(e){return ae(I(e),e)},s&&(Y(U[R],"description",{configurable:!0,get:function(){return W(this).description}}),a||E(q,"propertyIsEnumerable",de,{unsafe:!0}))),i({global:!0,wrap:!0,forced:!l,sham:!l},{Symbol:U}),j(w(ne),(function(e){P(e)})),i({target:B,stat:!0,forced:!l},{for:function(e){var t=String(e);if(d(ee,t))return ee[t];var n=U(t);return ee[t]=n,te[n]=t,n},keyFor:function(e){if(!se(e))throw TypeError(e+" is not a symbol");if(d(te,e))return te[e]},useSetter:function(){re=!0},useSimple:function(){re=!1}}),i({target:"Object",stat:!0,forced:!l,sham:!s},{create:ue,defineProperty:le,defineProperties:ce,getOwnPropertyDescriptor:he}),i({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:fe,getOwnPropertySymbols:pe}),i({target:"Object",stat:!0,forced:u((function(){k.f(1)}))},{getOwnPropertySymbols:function(e){return k.f(m(e))}}),K){var me=!l||u((function(){var e=U();return"[null]"!=K([e])||"{}"!=K({a:e})||"{}"!=K(Object(e))}));i({target:"JSON",stat:!0,forced:me},{stringify:function(e,t,n){var i,r=[e],o=1;while(arguments.length>o)r.push(arguments[o++]);if(i=t,(f(t)||void 0!==e)&&!se(e))return h(t)||(t=function(e,t){if("function"==typeof i&&(t=i.call(this,e,t)),!se(t))return t}),r[1]=t,K.apply(null,r)}})}U[R][V]||T(U[R],V,U[R].valueOf),$(U,B),A[z]=!0},a4f7:function(e,t,n){"use strict";var i=n("d537"),r=n.n(i);r.a},a623:function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").every,o=n("a640"),a=n("ae40"),s=o("every"),l=a("every");i({target:"Array",proto:!0,forced:!s||!l},{every:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},a630:function(e,t,n){var i=n("23e7"),r=n("4df4"),o=n("1c7e"),a=!o((function(e){Array.from(e)}));i({target:"Array",stat:!0,forced:a},{from:r})},a640:function(e,t,n){"use strict";var i=n("d039");e.exports=function(e,t){var n=[][e];return!!n&&i((function(){n.call(null,t||function(){throw 1},1)}))}},a691:function(e,t){var n=Math.ceil,i=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?i:n)(e)}},a742:function(e,t,n){"use strict";function i(e){return"[object String]"===Object.prototype.toString.call(e)}function r(e){return"[object Object]"===Object.prototype.toString.call(e)}function o(e){return e&&e.nodeType===Node.ELEMENT_NODE}n("d3b7"),n("25f0"),t.__esModule=!0,t.isString=i,t.isObject=r,t.isHtmlElement=o,t.isFunction=function(e){var t={};return e&&"[object Function]"===t.toString.call(e)},t.isUndefined=function(e){return void 0===e},t.isDefined=function(e){return void 0!==e&&null!==e}},a7be:function(e,t,n){},a975:function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").every,o=i.aTypedArray,a=i.exportTypedArrayMethod;a("every",(function(e){return r(o(this),e,arguments.length>1?arguments[1]:void 0)}))},a981:function(e,t){e.exports="undefined"!==typeof ArrayBuffer&&"undefined"!==typeof DataView},a9ac:function(e,t,n){(function(e){var i,r,o;n("ac1f"),n("5319");var a=n("7037");(function(s){"object"==a(t)&&"object"==a(e)?s(n("f3a7")):(r=[n("f3a7")],i=s,o="function"===typeof i?i.apply(t,r):i,void 0===o||(e.exports=o))})((function(e){function t(e){e.state.placeholder&&(e.state.placeholder.parentNode.removeChild(e.state.placeholder),e.state.placeholder=null)}function n(e){t(e);var n=e.state.placeholder=document.createElement("pre");n.style.cssText="height: 0; overflow: visible",n.style.direction=e.getOption("direction"),n.className="CodeMirror-placeholder CodeMirror-line-like";var i=e.getOption("placeholder");"string"==typeof i&&(i=document.createTextNode(i)),n.appendChild(i),e.display.lineSpace.insertBefore(n,e.display.lineSpace.firstChild)}function i(e){setTimeout((function(){var i=!1;if(1==e.lineCount()){var r=e.getInputField();i="TEXTAREA"==r.nodeName?!e.getLine(0).length:!/[^\u200b]/.test(r.querySelector(".CodeMirror-line").textContent)}i?n(e):t(e)}),20)}function r(e){a(e)&&n(e)}function o(e){var i=e.getWrapperElement(),r=a(e);i.className=i.className.replace(" CodeMirror-empty","")+(r?" CodeMirror-empty":""),r?n(e):t(e)}function a(e){return 1===e.lineCount()&&""===e.getLine(0)}e.defineOption("placeholder","",(function(n,a,s){var l=s&&s!=e.Init;if(a&&!l)n.on("blur",r),n.on("change",o),n.on("swapDoc",o),e.on(n.getInputField(),"compositionupdate",n.state.placeholderCompose=function(){i(n)}),o(n);else if(!a&&l){n.off("blur",r),n.off("change",o),n.off("swapDoc",o),e.off(n.getInputField(),"compositionupdate",n.state.placeholderCompose),t(n);var c=n.getWrapperElement();c.className=c.className.replace(" CodeMirror-empty","")}a&&!n.hasFocus()&&r(n)}))}))}).call(this,n("62e4")(e))},a9e3:function(e,t,n){"use strict";var i=n("83ab"),r=n("da84"),o=n("94ca"),a=n("6eeb"),s=n("5135"),l=n("c6b6"),c=n("7156"),u=n("c04e"),d=n("d039"),h=n("7c73"),f=n("241c").f,p=n("06cf").f,m=n("9bf2").f,g=n("58a8").trim,v="Number",b=r[v],y=b.prototype,w=l(h(y))==v,x=function(e){var t,n,i,r,o,a,s,l,c=u(e,!1);if("string"==typeof c&&c.length>2)if(c=g(c),t=c.charCodeAt(0),43===t||45===t){if(n=c.charCodeAt(2),88===n||120===n)return NaN}else if(48===t){switch(c.charCodeAt(1)){case 66:case 98:i=2,r=49;break;case 79:case 111:i=8,r=55;break;default:return+c}for(o=c.slice(2),a=o.length,s=0;s<a;s++)if(l=o.charCodeAt(s),l<48||l>r)return NaN;return parseInt(o,i)}return+c};if(o(v,!b(" 0o1")||!b("0b1")||b("+0x1"))){for(var _,k=function e(t){var n=arguments.length<1?0:t,i=this;return i instanceof e&&(w?d((function(){y.valueOf.call(i)})):l(i)!=v)?c(new b(x(n)),i,e):x(n)},C=i?f(b):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),S=0;C.length>S;S++)s(b,_=C[S])&&!s(k,_)&&m(k,_,p(b,_));k.prototype=y,y.constructor=k,a(r,v,k)}},ab13:function(e,t,n){var i=n("b622"),r=i("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,"/./"[e](t)}catch(i){}}return!1}},ac1f:function(e,t,n){"use strict";var i=n("23e7"),r=n("9263");i({target:"RegExp",proto:!0,forced:/./.exec!==r},{exec:r})},ace4:function(e,t,n){},ace42:function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),o=n("621a"),a=n("825a"),s=n("23cb"),l=n("50c4"),c=n("4840"),u=o.ArrayBuffer,d=o.DataView,h=u.prototype.slice,f=r((function(){return!new u(2).slice(1,void 0).byteLength}));i({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:f},{slice:function(e,t){if(void 0!==h&&void 0===t)return h.call(a(this),e);var n=a(this).byteLength,i=s(e,n),r=s(void 0===t?n:t,n),o=new(c(this,u))(l(r-i)),f=new d(this),p=new d(o),m=0;while(i<r)p.setUint8(m++,f.getUint8(i++));return o}})},ad6d:function(e,t,n){"use strict";var i=n("825a");e.exports=function(){var e=i(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},addb:function(e,t,n){(function(e){var i,r,o;n("c975"),n("a15b"),n("fb6a"),n("ac1f"),n("5319"),n("1276"),n("18a5");var a=n("7037");(function(s){"object"==a(t)&&"object"==a(e)?s(n("f3a7")):(r=[n("f3a7")],i=s,o="function"===typeof i?i.apply(t,r):i,void 0===o||(e.exports=o))})((function(e){"use strict";var t="CodeMirror-hint",n="CodeMirror-hint-active";function i(e,t){this.cm=e,this.options=t,this.widget=null,this.debounce=0,this.tick=0,this.startPos=this.cm.getCursor("start"),this.startLen=this.cm.getLine(this.startPos.line).length-this.cm.getSelection().length;var n=this;e.on("cursorActivity",this.activityFunc=function(){n.cursorActivity()})}function r(t,n){var i=/@[0-9a-zA-Z]+\([0-9a-zA-Z,@\*]+\)/,r=t.getRange(e.Pos(0,0),t.getCursor("start"));if(i.test(n)){var o=r.split("").reverse().join("").split("@")[0].split("").reverse().join("").replace("(",",").replace(")","");null!=o&&""!=o&&(o="@"+o);for(var a=r.substring(0,r.length-o.length-1).replace(/\(/g,",").replace(/,/g,")"),s=a+o,l=s.split(","),c=l[0].length+1,u=[],d=1;d<l.length;d++){var h=c+l[d].length,f=t.newRange(e.Pos(0,c),e.Pos(0,h));u.push(f),1===d&&t.setSelection(e.Pos(0,c),e.Pos(0,h),{scroll:!1}),c=h+1}var p={ranges:u,primary:1};t.setOption("selection",p)}}function o(e){return"string"==typeof e?e:e.key?e.key:e.text}e.showHint=function(e,t,n){if(!t)return e.showHint(n);n&&n.async&&(t.async=!0);var i={hint:t};if(n)for(var r in n)i[r]=n[r];return e.showHint(i)},e.defineExtension("showHint",(function(t){t=l(this,this.getCursor("start"),t);var n=this.listSelections();if(!(n.length>1)){if(this.somethingSelected()){if(!t.hint.supportsSelection)return;for(var r=0;r<n.length;r++)if(n[r].head.line!=n[r].anchor.line)return}this.state.completionActive&&this.state.completionActive.close();var o=this.state.completionActive=new i(this,t);o.options.hint&&(e.signal(this,"startCompletion",this),o.update(!0))}})),e.defineExtension("closeHint",(function(){this.state.completionActive&&this.state.completionActive.close()}));var a=window.requestAnimationFrame||function(e){return setTimeout(e,1e3/60)},s=window.cancelAnimationFrame||clearTimeout;function l(e,t,n){var i=e.options.hintOptions,r={};for(var o in g)r[o]=g[o];if(i)for(var o in i)void 0!==i[o]&&(r[o]=i[o]);if(n)for(var o in n)void 0!==n[o]&&(r[o]=n[o]);return r.hint.resolve&&(r.hint=r.hint.resolve(e,t)),r}function c(e){return"string"==typeof e?e:e.text}function u(e,t){var n={Up:function(){t.moveFocus(-1)},Down:function(){t.moveFocus(1)},PageUp:function(){t.moveFocus(1-t.menuSize(),!0)},PageDown:function(){t.moveFocus(t.menuSize()-1,!0)},Home:function(){t.setFocus(0)},End:function(){t.setFocus(t.length-1)},Enter:t.pick,Tab:t.pick,Esc:t.close},i=/Mac/.test(navigator.platform);i&&(n["Ctrl-P"]=function(){t.moveFocus(-1)},n["Ctrl-N"]=function(){t.moveFocus(1)});var r=e.options.customKeys,o=r?{}:n;function a(e,i){var r;r="string"!=typeof i?function(e){return i(e,t)}:n.hasOwnProperty(i)?n[i]:i,o[e]=r}if(r)for(var s in r)r.hasOwnProperty(s)&&a(s,r[s]);var l=e.options.extraKeys;if(l)for(var s in l)l.hasOwnProperty(s)&&a(s,l[s]);return o}function d(e,t){while(t&&t!=e){if("LI"===t.nodeName.toUpperCase()&&t.parentNode==e)return t;t=t.parentNode}}function h(i,r){this.completion=i,this.data=r,this.picked=!1;var o=this,a=i.cm,s=a.getInputField().ownerDocument,l=s.defaultView||s.parentWindow,h=this.hints=s.createElement("ul"),f=i.cm.options.theme;h.className="CodeMirror-hints "+f,this.selectedHint=r.selectedHint||0;for(var p=r.list,m=0;m<p.length;++m){var g=h.appendChild(s.createElement("li")),v=p[m],b=t+(m!=this.selectedHint?"":" "+n);null!=v.className&&(b=v.className+" "+b),g.className=b,v.render?v.render(g,r,v):g.appendChild(s.createTextNode(v.displayText||c(v))),g.hintId=m}var y=i.options.container||s.body,w=a.cursorCoords(i.options.alignWithWord?r.from:null),x=w.left,_=w.bottom,k=!0,C=0,S=0;if(y!==s.body){var O=-1!==["absolute","relative","fixed"].indexOf(l.getComputedStyle(y).position),T=O?y:y.offsetParent,E=T.getBoundingClientRect(),D=s.body.getBoundingClientRect();C=E.left-D.left-T.scrollLeft,S=E.top-D.top-T.scrollTop}h.style.left=x-C+"px",h.style.top=_-S+"px";var M=l.innerWidth||Math.max(s.body.offsetWidth,s.documentElement.offsetWidth),A=l.innerHeight||Math.max(s.body.offsetHeight,s.documentElement.offsetHeight);y.appendChild(h);var N,I=i.options.moveOnOverlap?h.getBoundingClientRect():new DOMRect,L=!!i.options.paddingForScrollbar&&h.scrollHeight>h.clientHeight+1;setTimeout((function(){N=a.getScrollInfo()}));var P=I.bottom-A;if(P>0){var $=I.bottom-I.top,F=w.top-(w.bottom-I.top);if(F-$>0)h.style.top=(_=w.top-$-S)+"px",k=!1;else if($>A){h.style.height=A-5+"px",h.style.top=(_=w.bottom-I.top-S)+"px";var j=a.getCursor();r.from.ch!=j.ch&&(w=a.cursorCoords(j),h.style.left=(x=w.left-C)+"px",I=h.getBoundingClientRect())}}var z,B=I.right-M;if(B>0&&(I.right-I.left>M&&(h.style.width=M-5+"px",B-=I.right-I.left-M),h.style.left=(x=w.left-B-C)+"px"),L)for(var R=h.firstChild;R;R=R.nextSibling)R.style.paddingRight=a.display.nativeBarWidth+"px";a.addKeyMap(this.keyMap=u(i,{moveFocus:function(e,t){o.changeActive(o.selectedHint+e,t)},setFocus:function(e){o.changeActive(e)},menuSize:function(){return o.screenAmount()},length:p.length,close:function(){i.close()},pick:function(){o.pick()},data:r})),i.options.closeOnUnfocus&&(a.on("blur",this.onBlur=function(){z=setTimeout((function(){i.close()}),100)}),a.on("focus",this.onFocus=function(){clearTimeout(z)})),a.on("scroll",this.onScroll=function(){var e=a.getScrollInfo(),t=a.getWrapperElement().getBoundingClientRect(),n=_+N.top-e.top,r=n-(l.pageYOffset||(s.documentElement||s.body).scrollTop);if(k||(r+=h.offsetHeight),r<=t.top||r>=t.bottom)return i.close();h.style.top=n+"px",h.style.left=x+N.left-e.left+"px"}),e.on(h,"dblclick",(function(e){var t=d(h,e.target||e.srcElement);t&&null!=t.hintId&&(o.changeActive(t.hintId),o.pick())})),e.on(h,"click",(function(e){var t=d(h,e.target||e.srcElement);t&&null!=t.hintId&&(o.changeActive(t.hintId),i.options.completeOnSingleClick&&o.pick())})),e.on(h,"mousedown",(function(){setTimeout((function(){a.focus()}),20)}));var V=this.getSelectedHintRange();return 0===V.from&&0===V.to||this.scrollToActive(),e.signal(r,"select",p[this.selectedHint],h.childNodes[this.selectedHint]),!0}function f(e,t){if(!e.somethingSelected())return t;for(var n=[],i=0;i<t.length;i++)t[i].supportsSelection&&n.push(t[i]);return n}function p(e,t,n,i){if(e.async)e(t,i,n);else{var r=e(t,n);r&&r.then?r.then(i):i(r)}}function m(t,n){var i,r=t.getHelpers(n,"hint");if(r.length){var o=function(e,t,n){var i=f(e,r);function o(r){if(r==i.length)return t(null);p(i[r],e,n,(function(e){e&&e.list.length>0?t(e):o(r+1)}))}o(0)};return o.async=!0,o.supportsSelection=!0,o}return(i=t.getHelper(t.getCursor(),"hintWords"))?function(t){return e.hint.fromList(t,{words:i})}:e.hint.anyword?function(t,n){return e.hint.anyword(t,n)}:function(){}}i.prototype={close:function(){this.active()&&(this.cm.state.completionActive=null,this.tick=null,this.cm.off("cursorActivity",this.activityFunc),this.widget&&this.data&&e.signal(this.data,"close"),this.widget&&this.widget.close(),e.signal(this.cm,"endCompletion",this.cm))},active:function(){return this.cm.state.completionActive==this},pick:function(t,n){var i=t.list[n],a=this;this.cm.operation((function(){i.hint?i.hint(a.cm,t,i):a.cm.replaceRange(o(i),i.from||t.from,i.to||t.to,"complete"),e.signal(t,"pick",i),a.cm.scrollIntoView()})),r(this.cm,o(i)),this.options.closeOnPick&&this.close()},cursorActivity:function(){this.debounce&&(s(this.debounce),this.debounce=0);var e=this.startPos;this.data&&(e=this.data.from);var t=this.cm.getCursor(),n=this.cm.getLine(t.line);if(t.line!=this.startPos.line||n.length-t.ch!=this.startLen-this.startPos.ch||t.ch<e.ch||this.cm.somethingSelected()||!t.ch||this.options.closeCharacters.test(n.charAt(t.ch-1)))this.options.closeOnCursorActivity&&this.close();else{var i=this;this.debounce=a((function(){i.update()})),this.widget&&this.widget.disable()}},update:function(e){if(null!=this.tick){var t=this,n=++this.tick;p(this.options.hint,this.cm,this.options,(function(i){t.tick==n&&t.finishUpdate(i,e)}))}},finishUpdate:function(t,n){this.data&&e.signal(this.data,"update");var i=this.widget&&this.widget.picked||n&&this.options.completeSingle;this.widget&&this.widget.close(),this.data=t,t&&t.list.length&&(i&&1==t.list.length?this.pick(t,0):(this.widget=new h(this,t),e.signal(t,"shown")))}},h.prototype={close:function(){if(this.completion.widget==this){this.completion.widget=null,this.hints.parentNode.removeChild(this.hints),this.completion.cm.removeKeyMap(this.keyMap);var e=this.completion.cm;this.completion.options.closeOnUnfocus&&(e.off("blur",this.onBlur),e.off("focus",this.onFocus)),e.off("scroll",this.onScroll)}},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var e=this;this.keyMap={Enter:function(){e.picked=!0}},this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(t,i){if(t>=this.data.list.length?t=i?this.data.list.length-1:0:t<0&&(t=i?0:this.data.list.length-1),this.selectedHint!=t){var r=this.hints.childNodes[this.selectedHint];r&&(r.className=r.className.replace(" "+n,"")),r=this.hints.childNodes[this.selectedHint=t],r.className+=" "+n,this.scrollToActive(),e.signal(this.data,"select",this.data.list[this.selectedHint],r)}},scrollToActive:function(){var e=this.getSelectedHintRange(),t=this.hints.childNodes[e.from],n=this.hints.childNodes[e.to],i=this.hints.firstChild;t.offsetTop<this.hints.scrollTop?this.hints.scrollTop=t.offsetTop-i.offsetTop:n.offsetTop+n.offsetHeight>this.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTop=n.offsetTop+n.offsetHeight-this.hints.clientHeight+i.offsetTop)},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1},getSelectedHintRange:function(){var e=this.completion.options.scrollMargin||0;return{from:Math.max(0,this.selectedHint-e),to:Math.min(this.data.list.length-1,this.selectedHint+e)}}},e.registerHelper("hint","auto",{resolve:m}),e.registerHelper("hint","fromList",(function(t,n){var i,r=t.getCursor(),o=t.getTokenAt(r),a=e.Pos(r.line,o.start),s=r;o.start<r.ch&&/\w/.test(o.string.charAt(r.ch-o.start-1))?i=o.string.substr(0,r.ch-o.start):(i="",a=r);for(var l=[],c=0;c<n.words.length;c++){var u=n.words[c];u.slice(0,i.length)==i&&l.push(u)}if(l.length)return{list:l,from:a,to:s}})),e.commands.autocomplete=e.showHint;var g={hint:e.hint.auto,completeSingle:!0,alignWithWord:!0,closeCharacters:/[\s()\[\]{};:>,]/,closeOnCursorActivity:!0,closeOnPick:!0,closeOnUnfocus:!0,completeOnSingleClick:!0,container:null,customKeys:null,extraKeys:null,paddingForScrollbar:!0,moveOnOverlap:!0};e.defineOption("hintOptions",null)}))}).call(this,n("62e4")(e))},ae40:function(e,t,n){var i=n("83ab"),r=n("d039"),o=n("5135"),a=Object.defineProperty,s={},l=function(e){throw e};e.exports=function(e,t){if(o(s,e))return s[e];t||(t={});var n=[][e],c=!!o(t,"ACCESSORS")&&t.ACCESSORS,u=o(t,0)?t[0]:l,d=o(t,1)?t[1]:void 0;return s[e]=!!n&&!r((function(){if(c&&!i)return!0;var e={length:-1};c?a(e,1,{enumerable:!0,get:l}):e[1]=1,n.call(e,u,d)}))}},ae93:function(e,t,n){"use strict";var i,r,o,a=n("e163"),s=n("9112"),l=n("5135"),c=n("b622"),u=n("c430"),d=c("iterator"),h=!1,f=function(){return this};[].keys&&(o=[].keys(),"next"in o?(r=a(a(o)),r!==Object.prototype&&(i=r)):h=!0),void 0==i&&(i={}),u||l(i,d)||s(i,d,f),e.exports={IteratorPrototype:i,BUGGY_SAFARI_ITERATORS:h}},af03:function(e,t,n){var i=n("d039");e.exports=function(e){return i((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},b041:function(e,t,n){"use strict";var i=n("00ee"),r=n("f5df");e.exports=i?{}.toString:function(){return"[object "+r(this)+"]"}},b0c0:function(e,t,n){var i=n("83ab"),r=n("9bf2").f,o=Function.prototype,a=o.toString,s=/^\s*function ([^ (]*)/,l="name";i&&!(l in o)&&r(o,l,{configurable:!0,get:function(){try{return a.call(this).match(s)[1]}catch(e){return""}}})},b233:function(e,t,n){},b313:function(e,t,n){"use strict";var i=String.prototype.replace,r=/%20/g;e.exports={default:"RFC3986",formatters:{RFC1738:function(e){return i.call(e,r,"+")},RFC3986:function(e){return e}},RFC1738:"RFC1738",RFC3986:"RFC3986"}},b367:function(e,t,n){var i=n("5524"),r=n("ef08"),o="__core-js_shared__",a=r[o]||(r[o]={});(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:i.version,mode:n("e444")?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},b39a:function(e,t,n){"use strict";var i=n("da84"),r=n("ebb5"),o=n("d039"),a=i.Int8Array,s=r.aTypedArray,l=r.exportTypedArrayMethod,c=[].toLocaleString,u=[].slice,d=!!a&&o((function(){c.call(new a(1))})),h=o((function(){return[1,2].toLocaleString()!=new a([1,2]).toLocaleString()}))||!o((function(){a.prototype.toLocaleString.call([1,2])}));l("toLocaleString",(function(){return c.apply(d?u.call(s(this)):s(this),arguments)}),h)},b3ff:function(e,t,n){},b4b6:function(e,t,n){"use strict";var i=n("ebee"),r=n.n(i);r.a},b50d:function(e,t,n){"use strict";var i=n("c532"),r=n("467f"),o=n("7aac"),a=n("30b5"),s=n("83b9"),l=n("c345"),c=n("3934"),u=n("2d83");e.exports=function(e){return new Promise((function(t,n){var d=e.data,h=e.headers;i.isFormData(d)&&delete h["Content-Type"];var f=new XMLHttpRequest;if(e.auth){var p=e.auth.username||"",m=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";h.Authorization="Basic "+btoa(p+":"+m)}var g=s(e.baseURL,e.url);if(f.open(e.method.toUpperCase(),a(g,e.params,e.paramsSerializer),!0),f.timeout=e.timeout,f.onreadystatechange=function(){if(f&&4===f.readyState&&(0!==f.status||f.responseURL&&0===f.responseURL.indexOf("file:"))){var i="getAllResponseHeaders"in f?l(f.getAllResponseHeaders()):null,o=e.responseType&&"text"!==e.responseType?f.response:f.responseText,a={data:o,status:f.status,statusText:f.statusText,headers:i,config:e,request:f};r(t,n,a),f=null}},f.onabort=function(){f&&(n(u("Request aborted",e,"ECONNABORTED",f)),f=null)},f.onerror=function(){n(u("Network Error",e,null,f)),f=null},f.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(u(t,e,"ECONNABORTED",f)),f=null},i.isStandardBrowserEnv()){var v=(e.withCredentials||c(g))&&e.xsrfCookieName?o.read(e.xsrfCookieName):void 0;v&&(h[e.xsrfHeaderName]=v)}if("setRequestHeader"in f&&i.forEach(h,(function(e,t){"undefined"===typeof d&&"content-type"===t.toLowerCase()?delete h[t]:f.setRequestHeader(t,e)})),i.isUndefined(e.withCredentials)||(f.withCredentials=!!e.withCredentials),e.responseType)try{f.responseType=e.responseType}catch(b){if("json"!==e.responseType)throw b}"function"===typeof e.onDownloadProgress&&f.addEventListener("progress",e.onDownloadProgress),"function"===typeof e.onUploadProgress&&f.upload&&f.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){f&&(f.abort(),n(e),f=null)})),d||(d=null),f.send(d)}))}},b575:function(e,t,n){var i,r,o,a,s,l,c,u,d=n("da84"),h=n("06cf").f,f=n("c6b6"),p=n("2cf4").set,m=n("1cdc"),g=d.MutationObserver||d.WebKitMutationObserver,v=d.process,b=d.Promise,y="process"==f(v),w=h(d,"queueMicrotask"),x=w&&w.value;x||(i=function(){var e,t;y&&(e=v.domain)&&e.exit();while(r){t=r.fn,r=r.next;try{t()}catch(n){throw r?a():o=void 0,n}}o=void 0,e&&e.enter()},y?a=function(){v.nextTick(i)}:g&&!m?(s=!0,l=document.createTextNode(""),new g(i).observe(l,{characterData:!0}),a=function(){l.data=s=!s}):b&&b.resolve?(c=b.resolve(void 0),u=c.then,a=function(){u.call(c,i)}):a=function(){p.call(d,i)}),e.exports=x||function(e){var t={fn:e,next:void 0};o&&(o.next=t),r||(r=t,a()),o=t}},b577:function(e,t,n){"use strict";var i=n("8e34"),r=n.n(i);r.a},b622:function(e,t,n){var i=n("da84"),r=n("5692"),o=n("5135"),a=n("90e3"),s=n("4930"),l=n("fdbf"),c=r("wks"),u=i.Symbol,d=l?u:u&&u.withoutSetter||a;e.exports=function(e){return o(c,e)||(s&&o(u,e)?c[e]=u[e]:c[e]=d("Symbol."+e)),c[e]}},b64b:function(e,t,n){var i=n("23e7"),r=n("7b0b"),o=n("df75"),a=n("d039"),s=a((function(){o(1)}));i({target:"Object",stat:!0,forced:s},{keys:function(e){return o(r(e))}})},b680:function(e,t,n){"use strict";var i=n("23e7"),r=n("a691"),o=n("408a"),a=n("1148"),s=n("d039"),l=1..toFixed,c=Math.floor,u=function e(t,n,i){return 0===n?i:n%2===1?e(t,n-1,i*t):e(t*t,n/2,i)},d=function(e){var t=0,n=e;while(n>=4096)t+=12,n/=4096;while(n>=2)t+=1,n/=2;return t},h=l&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!s((function(){l.call({})}));i({target:"Number",proto:!0,forced:h},{toFixed:function(e){var t,n,i,s,l=o(this),h=r(e),f=[0,0,0,0,0,0],p="",m="0",g=function(e,t){var n=-1,i=t;while(++n<6)i+=e*f[n],f[n]=i%1e7,i=c(i/1e7)},v=function(e){var t=6,n=0;while(--t>=0)n+=f[t],f[t]=c(n/e),n=n%e*1e7},b=function(){var e=6,t="";while(--e>=0)if(""!==t||0===e||0!==f[e]){var n=String(f[e]);t=""===t?n:t+a.call("0",7-n.length)+n}return t};if(h<0||h>20)throw RangeError("Incorrect fraction digits");if(l!=l)return"NaN";if(l<=-1e21||l>=1e21)return String(l);if(l<0&&(p="-",l=-l),l>1e-21)if(t=d(l*u(2,69,1))-69,n=t<0?l*u(2,-t,1):l/u(2,t,1),n*=4503599627370496,t=52-t,t>0){g(0,n),i=h;while(i>=7)g(1e7,0),i-=7;g(u(10,i,1),0),i=t-1;while(i>=23)v(1<<23),i-=23;v(1<<i),g(1,1),v(2),m=b()}else g(0,n),g(1<<-t,0),m=b()+a.call("0",h);return h>0?(s=m.length,m=p+(s<=h?"0."+a.call("0",h-s)+m:m.slice(0,s-h)+"."+m.slice(s-h))):m=p+m,m}})},b727:function(e,t,n){var i=n("0366"),r=n("44ad"),o=n("7b0b"),a=n("50c4"),s=n("65f0"),l=[].push,c=function(e){var t=1==e,n=2==e,c=3==e,u=4==e,d=6==e,h=5==e||d;return function(f,p,m,g){for(var v,b,y=o(f),w=r(y),x=i(p,m,3),_=a(w.length),k=0,C=g||s,S=t?C(f,_):n?C(f,0):void 0;_>k;k++)if((h||k in w)&&(v=w[k],b=x(v,k,y),e))if(t)S[k]=b;else if(b)switch(e){case 3:return!0;case 5:return v;case 6:return k;case 2:l.call(S,v)}else if(u)return!1;return d?-1:c||u?u:S}};e.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6)}},b9c7:function(e,t,n){n("e507"),e.exports=n("5524").Object.assign},ba01:function(e,t,n){e.exports=n("051b")},bb2f:function(e,t,n){var i=n("d039");e.exports=!i((function(){return Object.isExtensible(Object.preventExtensions({}))}))},bc3a:function(e,t,n){e.exports=n("cee4")},c04e:function(e,t,n){var i=n("861d");e.exports=function(e,t){if(!i(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!i(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},c098:function(e,t,n){e.exports=n("d4af")},c0e2:function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";function t(e){for(var t={},n=0;n<e.length;n++)t[e[n]]=!0;return t}var n=t(["_","var","let","class","enum","extension","import","protocol","struct","func","typealias","associatedtype","open","public","internal","fileprivate","private","deinit","init","new","override","self","subscript","super","convenience","dynamic","final","indirect","lazy","required","static","unowned","unowned(safe)","unowned(unsafe)","weak","as","is","break","case","continue","default","else","fallthrough","for","guard","if","in","repeat","switch","where","while","defer","return","inout","mutating","nonmutating","catch","do","rethrows","throw","throws","try","didSet","get","set","willSet","assignment","associativity","infix","left","none","operator","postfix","precedence","precedencegroup","prefix","right","Any","AnyObject","Type","dynamicType","Self","Protocol","__COLUMN__","__FILE__","__FUNCTION__","__LINE__"]),i=t(["var","let","class","enum","extension","import","protocol","struct","func","typealias","associatedtype","for"]),r=t(["true","false","nil","self","super","_"]),o=t(["Array","Bool","Character","Dictionary","Double","Float","Int","Int8","Int16","Int32","Int64","Never","Optional","Set","String","UInt8","UInt16","UInt32","UInt64","Void"]),a="+-/*%=|&<>~^?!",s=":;,.(){}[]",l=/^\-?0b[01][01_]*/,c=/^\-?0o[0-7][0-7_]*/,u=/^\-?0x[\dA-Fa-f][\dA-Fa-f_]*(?:(?:\.[\dA-Fa-f][\dA-Fa-f_]*)?[Pp]\-?\d[\d_]*)?/,d=/^\-?\d[\d_]*(?:\.\d[\d_]*)?(?:[Ee]\-?\d[\d_]*)?/,h=/^\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1/,f=/^\.(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/,p=/^\#[A-Za-z]+/,m=/^@(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/;function g(e,t,g){if(e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;var v,w=e.peek();if("/"==w){if(e.match("//"))return e.skipToEnd(),"comment";if(e.match("/*"))return t.tokenize.push(y),y(e,t)}if(e.match(p))return"builtin";if(e.match(m))return"attribute";if(e.match(l))return"number";if(e.match(c))return"number";if(e.match(u))return"number";if(e.match(d))return"number";if(e.match(f))return"property";if(a.indexOf(w)>-1)return e.next(),"operator";if(s.indexOf(w)>-1)return e.next(),e.match(".."),"punctuation";if(v=e.match(/("""|"|')/)){var x=b.bind(null,v[0]);return t.tokenize.push(x),x(e,t)}if(e.match(h)){var _=e.current();return o.hasOwnProperty(_)?"variable-2":r.hasOwnProperty(_)?"atom":n.hasOwnProperty(_)?(i.hasOwnProperty(_)&&(t.prev="define"),"keyword"):"define"==g?"def":"variable"}return e.next(),null}function v(){var e=0;return function(t,n,i){var r=g(t,n,i);if("punctuation"==r)if("("==t.current())++e;else if(")"==t.current()){if(0==e)return t.backUp(1),n.tokenize.pop(),n.tokenize[n.tokenize.length-1](t,n);--e}return r}}function b(e,t,n){var i,r=1==e.length,o=!1;while(i=t.peek())if(o){if(t.next(),"("==i)return n.tokenize.push(v()),"string";o=!1}else{if(t.match(e))return n.tokenize.pop(),"string";t.next(),o="\\"==i}return r&&n.tokenize.pop(),"string"}function y(e,t){var n;while(1){if(e.match(/^[^/*]+/,!0),n=e.next(),!n)break;"/"===n&&e.eat("*")?t.tokenize.push(y):"*"===n&&e.eat("/")&&t.tokenize.pop()}return"comment"}function w(e,t,n){this.prev=e,this.align=t,this.indented=n}function x(e,t){var n=t.match(/^\s*($|\/[\/\*])/,!1)?null:t.column()+1;e.context=new w(e.context,n,e.indented)}function _(e){e.context&&(e.indented=e.context.indented,e.context=e.context.prev)}e.defineMode("swift",(function(e){return{startState:function(){return{prev:null,context:null,indented:0,tokenize:[]}},token:function(e,t){var n=t.prev;t.prev=null;var i=t.tokenize[t.tokenize.length-1]||g,r=i(e,t,n);if(r&&"comment"!=r?t.prev||(t.prev=r):t.prev=n,"punctuation"==r){var o=/[\(\[\{]|([\]\)\}])/.exec(e.current());o&&(o[1]?_:x)(t,e)}return r},indent:function(t,n){var i=t.context;if(!i)return 0;var r=/^[\]\}\)]/.test(n);return null!=i.align?i.align-(r?1:0):i.indented+(r?0:e.indentUnit)},electricInput:/^\s*[\)\}\]]$/,lineComment:"//",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace",closeBrackets:"()[]{}''\"\"``"}})),e.defineMIME("text/x-swift","swift")}))},c1ac:function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").filter,o=n("4840"),a=i.aTypedArray,s=i.aTypedArrayConstructor,l=i.exportTypedArrayMethod;l("filter",(function(e){var t=r(a(this),e,arguments.length>1?arguments[1]:void 0),n=o(this,this.constructor),i=0,l=t.length,c=new(s(n))(l);while(l>i)c[i]=t[i++];return c}))},c284:function(e,t,n){n("a4d3"),n("e01a"),n("944a"),n("99af"),n("c975"),n("d81d"),n("b0c0"),n("0c47"),n("23dc"),n("a9e3"),n("b680"),n("d3b7");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=119)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},119:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-progress",class:["el-progress--"+e.type,e.status?"is-"+e.status:"",{"el-progress--without-text":!e.showText,"el-progress--text-inside":e.textInside}],attrs:{role:"progressbar","aria-valuenow":e.percentage,"aria-valuemin":"0","aria-valuemax":"100"}},["line"===e.type?n("div",{staticClass:"el-progress-bar"},[n("div",{staticClass:"el-progress-bar__outer",style:{height:e.strokeWidth+"px"}},[n("div",{staticClass:"el-progress-bar__inner",style:e.barStyle},[e.showText&&e.textInside?n("div",{staticClass:"el-progress-bar__innerText"},[e._v(e._s(e.content))]):e._e()])])]):n("div",{staticClass:"el-progress-circle",style:{height:e.width+"px",width:e.width+"px"}},[n("svg",{attrs:{viewBox:"0 0 100 100"}},[n("path",{staticClass:"el-progress-circle__track",style:e.trailPathStyle,attrs:{d:e.trackPath,stroke:"#e5e9f2","stroke-width":e.relativeStrokeWidth,fill:"none"}}),n("path",{staticClass:"el-progress-circle__path",style:e.circlePathStyle,attrs:{d:e.trackPath,stroke:e.stroke,fill:"none","stroke-linecap":e.strokeLinecap,"stroke-width":e.percentage?e.relativeStrokeWidth:0}})])]),e.showText&&!e.textInside?n("div",{staticClass:"el-progress__text",style:{fontSize:e.progressTextSize+"px"}},[e.status?n("i",{class:e.iconClass}):[e._v(e._s(e.content))]],2):e._e()])},r=[];i._withStripped=!0;var o={name:"ElProgress",props:{type:{type:String,default:"line",validator:function(e){return["line","circle","dashboard"].indexOf(e)>-1}},percentage:{type:Number,default:0,required:!0,validator:function(e){return e>=0&&e<=100}},status:{type:String,validator:function(e){return["success","exception","warning"].indexOf(e)>-1}},strokeWidth:{type:Number,default:6},strokeLinecap:{type:String,default:"round"},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:[String,Array,Function],default:""},format:Function},computed:{barStyle:function(){var e={};return e.width=this.percentage+"%",e.backgroundColor=this.getCurrentColor(this.percentage),e},relativeStrokeWidth:function(){return(this.strokeWidth/this.width*100).toFixed(1)},radius:function(){return"circle"===this.type||"dashboard"===this.type?parseInt(50-parseFloat(this.relativeStrokeWidth)/2,10):0},trackPath:function(){var e=this.radius,t="dashboard"===this.type;return"\n        M 50 50\n        m 0 "+(t?"":"-")+e+"\n        a "+e+" "+e+" 0 1 1 0 "+(t?"-":"")+2*e+"\n        a "+e+" "+e+" 0 1 1 0 "+(t?"":"-")+2*e+"\n        "},perimeter:function(){return 2*Math.PI*this.radius},rate:function(){return"dashboard"===this.type?.75:1},strokeDashoffset:function(){var e=-1*this.perimeter*(1-this.rate)/2;return e+"px"},trailPathStyle:function(){return{strokeDasharray:this.perimeter*this.rate+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset}},circlePathStyle:function(){return{strokeDasharray:this.perimeter*this.rate*(this.percentage/100)+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease"}},stroke:function(){var e=void 0;if(this.color)e=this.getCurrentColor(this.percentage);else switch(this.status){case"success":e="#13ce66";break;case"exception":e="#ff4949";break;case"warning":e="#e6a23c";break;default:e="#20a0ff"}return e},iconClass:function(){return"warning"===this.status?"el-icon-warning":"line"===this.type?"success"===this.status?"el-icon-circle-check":"el-icon-circle-close":"success"===this.status?"el-icon-check":"el-icon-close"},progressTextSize:function(){return"line"===this.type?12+.4*this.strokeWidth:.111111*this.width+2},content:function(){return"function"===typeof this.format?this.format(this.percentage)||"":this.percentage+"%"}},methods:{getCurrentColor:function(e){return"function"===typeof this.color?this.color(e):"string"===typeof this.color?this.color:this.getLevelColor(e)},getLevelColor:function(e){for(var t=this.getColorArray().sort((function(e,t){return e.percentage-t.percentage})),n=0;n<t.length;n++)if(t[n].percentage>e)return t[n].color;return t[t.length-1].color},getColorArray:function(){var e=this.color,t=100/e.length;return e.map((function(e,n){return"string"===typeof e?{color:e,progress:(n+1)*t}:e}))}}},a=o,s=n(0),l=Object(s["a"])(a,i,r,!1,null,null,null);l.options.__file="packages/progress/src/progress.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)},t["default"]=c}})},c2a2:function(e,t,n){},c345:function(e,t,n){"use strict";var i=n("c532"),r=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,o,a={};return e?(i.forEach(e.split("\n"),(function(e){if(o=e.indexOf(":"),t=i.trim(e.substr(0,o)).toLowerCase(),n=i.trim(e.substr(o+1)),t){if(a[t]&&r.indexOf(t)>=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+", "+n:n}})),a):a}},c35a:function(e,t,n){var i=n("23e7"),r=n("7e12");i({target:"Number",stat:!0,forced:Number.parseFloat!=r},{parseFloat:r})},c401:function(e,t,n){"use strict";var i=n("c532");e.exports=function(e,t,n){return i.forEach(n,(function(n){e=n(e,t)})),e}},c430:function(e,t){e.exports=!1},c532:function(e,t,n){"use strict";var i=n("1d2b"),r=Object.prototype.toString;function o(e){return"[object Array]"===r.call(e)}function a(e){return"undefined"===typeof e}function s(e){return null!==e&&!a(e)&&null!==e.constructor&&!a(e.constructor)&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function l(e){return"[object ArrayBuffer]"===r.call(e)}function c(e){return"undefined"!==typeof FormData&&e instanceof FormData}function u(e){var t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer,t}function d(e){return"string"===typeof e}function h(e){return"number"===typeof e}function f(e){return null!==e&&"object"===_typeof2(e)}function p(e){if("[object Object]"!==r.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function m(e){return"[object Date]"===r.call(e)}function g(e){return"[object File]"===r.call(e)}function v(e){return"[object Blob]"===r.call(e)}function b(e){return"[object Function]"===r.call(e)}function y(e){return f(e)&&b(e.pipe)}function w(e){return"undefined"!==typeof URLSearchParams&&e instanceof URLSearchParams}function x(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function _(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&"undefined"!==typeof window&&"undefined"!==typeof document}function k(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==_typeof2(e)&&(e=[e]),o(e))for(var n=0,i=e.length;n<i;n++)t.call(null,e[n],n,e);else for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.call(null,e[r],r,e)}function C(){var e={};function t(t,n){p(e[n])&&p(t)?e[n]=C(e[n],t):p(t)?e[n]=C({},t):o(t)?e[n]=t.slice():e[n]=t}for(var n=0,i=arguments.length;n<i;n++)k(arguments[n],t);return e}function S(e,t,n){return k(t,(function(t,r){e[r]=n&&"function"===typeof t?i(t,n):t})),e}function O(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}e.exports={isArray:o,isArrayBuffer:l,isBuffer:s,isFormData:c,isArrayBufferView:u,isString:d,isNumber:h,isObject:f,isPlainObject:p,isUndefined:a,isDate:m,isFile:g,isBlob:v,isFunction:b,isStream:y,isURLSearchParams:w,isStandardBrowserEnv:_,forEach:k,merge:C,extend:S,trim:x,stripBOM:O}},c56a:function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:300,i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!e||!t)throw new Error("instance & callback is required");var r=!1,o=function(){r||(r=!0,t&&t.apply(null,arguments))};i?e.$once("after-leave",o):e.$on("after-leave",o),setTimeout((function(){o()}),n+100)}},c64e:function(e,t,n){var i=n("e1f4"),r=n("2366");function o(e,t,n){var o=t&&n||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null),e=e||{};var a=e.random||(e.rng||i)();if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,t)for(var s=0;s<16;++s)t[o+s]=a[s];return t||r(a)}e.exports=o},c682:function(e,t,n){"use strict";var i=n("6fb9"),r=n.n(i);r.a},c6b6:function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},c6cd:function(e,t,n){var i=n("da84"),r=n("ce4e"),o="__core-js_shared__",a=i[o]||r(o,{});e.exports=a},c72d:function c72d(module,__webpack_exports__,__webpack_require__){"use strict";var core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("4de4"),core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(core_js_modules_es_array_filter__WEBPACK_IMPORTED_MODULE_0__),core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("a15b"),core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_1__),core_js_modules_es_array_map__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("d81d"),core_js_modules_es_array_map__WEBPACK_IMPORTED_MODULE_2___default=__webpack_require__.n(core_js_modules_es_array_map__WEBPACK_IMPORTED_MODULE_2__),core_js_modules_es_array_splice__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("a434"),core_js_modules_es_array_splice__WEBPACK_IMPORTED_MODULE_3___default=__webpack_require__.n(core_js_modules_es_array_splice__WEBPACK_IMPORTED_MODULE_3__),core_js_modules_es_object_assign__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("cca6"),core_js_modules_es_object_assign__WEBPACK_IMPORTED_MODULE_4___default=__webpack_require__.n(core_js_modules_es_object_assign__WEBPACK_IMPORTED_MODULE_4__),core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("ac1f"),core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_5___default=__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_5__),core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("1276"),core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_6___default=__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_6__),_Users_sunlh_idea_workspace_aws6_vue_aws_awsui_vue_node_modules_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__("2909");__webpack_exports__["a"]={name:"AwsuiAddress",props:{value:String,readonly:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},config:{type:String,default:function(){return""}},sid:{type:String,default:""},appId:{type:String,default:""},addressDomId:{type:String,default:""},formData:{type:String,default:""}},data:function(){return{addressValue:[],dialogVisible:!1,configFormat:" ",dialogTitle:"",paramsValue:{url:this.getPath(),data:{sid:"",appId:"",addressConfig:"",addressDomId:"",value:"",formData:""},height:"99%"},otherDiaConfirm:null,defaultAddressConfig:{filter:{addressType:"user",isAdvMode:!0,addressSetting:{range:"department|role|team",delimiter:" ",choiceType:"single",leafType:"user"},sourceField:"",targetField:"address1_1",deptTargetField:""},separator:" ",valueType:0},passConfig:{}}},watch:{readonly:function(){!0===this.readonly?this.$refs.awsuiAddress.style.border="none":this.$refs.awsuiAddress.style.border="1px solid #ccc"},disabled:function(){!0===this.readonly?this.$refs.awsuiAddress.style.border="none":this.$refs.awsuiAddress.style.border="1px solid #ccc"},config:{handler:function(){this.changeConfigType(this.config)},immediate:!0}},computed:{delComputed:function(){return 0!==this.addressValue.length},dialogOnce:function(){return null==window.atAddressOnce}},created:function(){0!=this.value.length&&this.getNameByValue(this.value)},methods:{getNameByValue:function(e){var t=this,n={url:"jd",data:{sid:this.sid,appId:this.appId,cmd:"CLIENT_AWSUI_ADDRESS_VALUE",address:JSON.stringify(this.getDefaultConfig()),addressDomId:this.addressDomId,formData:this.formData,value:e}};this.awsuiaxios.post(n).then((function(e){if("ok"==e.result){var n=t.findValue(e.data.data);0!=n.length&&(t.addressValue=n)}}))},findValue:function(e){var t=document.createElement("div");t.innerHTML=e;var n=t.getElementsByClassName("awsui-user-profile");return n=Object(_Users_sunlh_idea_workspace_aws6_vue_aws_awsui_vue_node_modules_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_7__["a"])(n),n.map((function(e){return e.innerText}))},getDefaultConfig:function(){var e=this,t={},n={},i={};return t=Object.assign(t,e.defaultAddressConfig,e.passConfig),n=Object.assign(n,e.defaultAddressConfig.filter,e.passConfig.filter),i=void 0!==e.passConfig.filter.addressSetting?Object.assign(i,e.defaultAddressConfig.filter.addressSetting,e.passConfig.filter.addressSetting):e.defaultAddressConfig.filter.addressSetting,n.addressSetting=i,t.filter=n,t},getAllConfig:function(){var e={sid:this.sid,appId:this.appId,cmd:"CLIENT_AWSUI_ADDRESSBOOK",address:JSON.stringify(this.getDefaultConfig()),addressDomId:this.addressDomId,formData:this.formData,value:this.value};return e},changeConfigType:function(e){var t;"string"==typeof e&&(t="0"!=e.length?JSON.parse(e):{},void 0===t.filter?this.passConfig.filter=t:this.passConfig=t,this.configFormat=this.getDefaultConfig().filter.addressSetting.delimiter,this.dialogTitle="dept"==this.getDefaultConfig().filter.addressType?"部门":"人员")},getPath:function getPath(){return eval("axiosBaseUrl")+"w"},delAll:function(){this.addressValue=[],this.paramsValue.data.value="",this.$emit("input",""),this.$emit("change","")},delsingle:function(e,t){this.addressValue=this.addressValue.filter((function(t){return t!==e}));var n=this.value.split(this.configFormat);n.splice(t,1),this.$emit("input",n.join(this.configFormat)),this.$emit("change",n.join(this.configFormat))},openDialog:function(e,t){this.otherDiaConfirm=null==t?this.diaConfirm:t,null==window.atAddressOnce||window.atAddressOnce===this?(this.paramsValue.data=this.getAllConfig(),void 0!==e&&(this.paramsValue.data=e),!0!==this.disabled&&(this.dialogVisible=!0)):window.atAddressOnce.openDialog(this.getAllConfig(),this.diaConfirm)},diaConfirm:function(e){if(null!=e){var t=e.gridValue.split(" ");return 0!==e.valueUids.length?this.addressValue=t:this.addressValue=[],this.$emit("input",e.valueUids.join(this.configFormat)),void this.$emit("change",e.valueUids.join(this.configFormat))}if(this.otherDiaConfirm){var n=this.otherDiaConfirm;this.otherDiaConfirm=null,n(this.getValue()),this.dialogVisible=!1}},getValue:function(){return this.$refs.DialogAddress.getWin().getValue()},diaCancel:function(){this.dialogVisible=!1},handleClose:function(){}},mounted:function(){window.atAddressOnce||(window.atAddressOnce=this)},destroyed:function(){window.atAddressOnce=null}}},c7a6:function(e,t,n){"use strict";var i=n("f008"),r=n.n(i);r.a},c7cd:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),o=n("af03");i({target:"String",proto:!0,forced:o("fixed")},{fixed:function(){return r(this,"tt","","")}})},c7db:function(e,t,n){},c861:function(e,t,n){},c8af:function(e,t,n){"use strict";var i=n("c532");e.exports=function(e,t){i.forEach(e,(function(n,i){i!==t&&i.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[i])}))}},c8ba:function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(i){"object"===("undefined"===typeof window?"undefined":_typeof2(window))&&(n=window)}e.exports=n},c8d2:function(e,t,n){var i=n("d039"),r=n("5899"),o="​…᠎";e.exports=function(e){return i((function(){return!!r[e]()||o[e]()!=o||r[e].name!==e}))}},c901:function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e}},c96a:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),o=n("af03");i({target:"String",proto:!0,forced:o("small")},{small:function(){return r(this,"small","","")}})},c975:function(e,t,n){"use strict";var i=n("23e7"),r=n("4d64").indexOf,o=n("a640"),a=n("ae40"),s=[].indexOf,l=!!s&&1/[1].indexOf(1,-0)<0,c=o("indexOf"),u=a("indexOf",{ACCESSORS:!0,1:0});i({target:"Array",proto:!0,forced:l||!c||!u},{indexOf:function(e){return l?s.apply(this,arguments)||0:r(this,e,arguments.length>1?arguments[1]:void 0)}})},ca84:function(e,t,n){var i=n("5135"),r=n("fc6a"),o=n("4d64").indexOf,a=n("d012");e.exports=function(e,t){var n,s=r(e),l=0,c=[];for(n in s)!i(a,n)&&i(s,n)&&c.push(n);while(t.length>l)i(s,n=t[l++])&&(~o(c,n)||c.push(n));return c}},ca91:function(e,t,n){"use strict";var i=n("ebb5"),r=n("d58f").left,o=i.aTypedArray,a=i.exportTypedArrayMethod;a("reduce",(function(e){return r(o(this),e,arguments.length,arguments.length>1?arguments[1]:void 0)}))},caad:function(e,t,n){"use strict";var i=n("23e7"),r=n("4d64").includes,o=n("44d2"),a=n("ae40"),s=a("indexOf",{ACCESSORS:!0,1:0});i({target:"Array",proto:!0,forced:!s},{includes:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),o("includes")},cb29:function(e,t,n){var i=n("23e7"),r=n("81d5"),o=n("44d2");i({target:"Array",proto:!0},{fill:r}),o("fill")},cc12:function(e,t,n){var i=n("da84"),r=n("861d"),o=i.document,a=r(o)&&r(o.createElement);e.exports=function(e){return a?o.createElement(e):{}}},cc15:function(e,t,n){var i=n("b367")("wks"),r=n("8b1a"),o=n("ef08").Symbol,a="function"==typeof o,s=e.exports=function(e){return i[e]||(i[e]=a&&o[e]||(a?o:r)("Symbol."+e))};s.store=i},cca6:function(e,t,n){var i=n("23e7"),r=n("60da");i({target:"Object",stat:!0,forced:Object.assign!==r},{assign:r})},cd26:function(e,t,n){"use strict";var i=n("ebb5"),r=i.aTypedArray,o=i.exportTypedArrayMethod,a=Math.floor;o("reverse",(function(){var e,t=this,n=r(t).length,i=a(n/2),o=0;while(o<i)e=t[o],t[o++]=t[--n],t[n]=e;return t}))},cdf9:function(e,t,n){var i=n("825a"),r=n("861d"),o=n("f069");e.exports=function(e,t){if(i(e),r(t)&&t.constructor===e)return t;var n=o.f(e),a=n.resolve;return a(t),n.promise}},ce4e:function(e,t,n){var i=n("da84"),r=n("9112");e.exports=function(e,t){try{r(i,e,t)}catch(n){i[e]=t}return t}},ce7a:function(e,t,n){var i=n("9c0e"),r=n("0983"),o=n("5a94")("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=r(e),i(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},cee4:function(e,t,n){"use strict";var i=n("c532"),r=n("1d2b"),o=n("0a06"),a=n("4a7b"),s=n("2444");function l(e){var t=new o(e),n=r(o.prototype.request,t);return i.extend(n,o.prototype,t),i.extend(n,t),n}var c=l(s);c.Axios=o,c.create=function(e){return l(a(c.defaults,e))},c.Cancel=n("7a77"),c.CancelToken=n("8df4"),c.isCancel=n("2e67"),c.all=function(e){return Promise.all(e)},c.spread=n("0df6"),e.exports=c,e.exports.default=c},cf11:function(e,t,n){},d010:function(e,t,n){"use strict";function i(e,t,n){this.$children.forEach((function(r){var o=r.$options.componentName;o===e?r.$emit.apply(r,[t].concat(n)):i.apply(r,[e,t].concat([n]))}))}n("99af"),n("4160"),n("159b"),t.__esModule=!0,t.default={methods:{dispatch:function(e,t,n){var i=this.$parent||this.$root,r=i.$options.componentName;while(i&&(!r||r!==e))i=i.$parent,i&&(r=i.$options.componentName);i&&i.$emit.apply(i,[t].concat(n))},broadcast:function(e,t,n){i.call(this,e,t,n)}}}},d012:function(e,t){e.exports={}},d039:function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},d066:function(e,t,n){var i=n("428f"),r=n("da84"),o=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?o(i[e])||o(r[e]):i[e]&&i[e][t]||r[e]&&r[e][t]}},d139:function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").find,o=i.aTypedArray,a=i.exportTypedArrayMethod;a("find",(function(e){return r(o(this),e,arguments.length>1?arguments[1]:void 0)}))},d16a:function(e,t,n){var i=n("fc5e"),r=Math.min;e.exports=function(e){return e>0?r(i(e),9007199254740991):0}},d1e7:function(e,t,n){"use strict";var i={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,o=r&&!i.call({1:2},1);t.f=o?function(e){var t=r(this,e);return!!t&&t.enumerable}:i},d233:function(e,t,n){"use strict";var i=Object.prototype.hasOwnProperty,r=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),o=function(e){var t;while(e.length){var n=e.pop();if(t=n.obj[n.prop],Array.isArray(t)){for(var i=[],r=0;r<t.length;++r)"undefined"!==typeof t[r]&&i.push(t[r]);n.obj[n.prop]=i}}return t},a=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},i=0;i<e.length;++i)"undefined"!==typeof e[i]&&(n[i]=e[i]);return n},s=function e(t,n,r){if(!n)return t;if("object"!==_typeof2(n)){if(Array.isArray(t))t.push(n);else{if("object"!==_typeof2(t))return[t,n];(r.plainObjects||r.allowPrototypes||!i.call(Object.prototype,n))&&(t[n]=!0)}return t}if("object"!==_typeof2(t))return[t].concat(n);var o=t;return Array.isArray(t)&&!Array.isArray(n)&&(o=a(t,r)),Array.isArray(t)&&Array.isArray(n)?(n.forEach((function(n,o){i.call(t,o)?t[o]&&"object"===_typeof2(t[o])?t[o]=e(t[o],n,r):t.push(n):t[o]=n})),t):Object.keys(n).reduce((function(t,o){var a=n[o];return i.call(t,o)?t[o]=e(t[o],a,r):t[o]=a,t}),o)},l=function(e,t){return Object.keys(t).reduce((function(e,n){return e[n]=t[n],e}),e)},c=function(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch(t){return e}},u=function(e){if(0===e.length)return e;for(var t="string"===typeof e?e:String(e),n="",i=0;i<t.length;++i){var o=t.charCodeAt(i);45===o||46===o||95===o||126===o||o>=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122?n+=t.charAt(i):o<128?n+=r[o]:o<2048?n+=r[192|o>>6]+r[128|63&o]:o<55296||o>=57344?n+=r[224|o>>12]+r[128|o>>6&63]+r[128|63&o]:(i+=1,o=65536+((1023&o)<<10|1023&t.charCodeAt(i)),n+=r[240|o>>18]+r[128|o>>12&63]+r[128|o>>6&63]+r[128|63&o])}return n},d=function(e){for(var t=[{obj:{o:e},prop:"o"}],n=[],i=0;i<t.length;++i)for(var r=t[i],a=r.obj[r.prop],s=Object.keys(a),l=0;l<s.length;++l){var c=s[l],u=a[c];"object"===_typeof2(u)&&null!==u&&-1===n.indexOf(u)&&(t.push({obj:a,prop:c}),n.push(u))}return o(t)},h=function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},f=function(e){return null!==e&&"undefined"!==typeof e&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))};e.exports={arrayToObject:a,assign:l,compact:d,decode:c,encode:u,isBuffer:f,isRegExp:h,merge:s}},d28b:function(e,t,n){var i=n("746f");i("iterator")},d2bb:function(e,t,n){var i=n("825a"),r=n("3bbe");e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set,e.call(n,[]),t=n instanceof Array}catch(o){}return function(n,o){return i(n),r(o),t?e.call(n,o):n.__proto__=o,n}}():void 0)},d2d7:function(e,t,n){"use strict";n("4160"),n("45fc"),n("a434");var i,r=n("8bbf"),o=n.n(r),a=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"awsui-message-fade"},on:{"after-leave":e.handleAfterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:["awsui-message",e.type&&!e.icon?"awsui-message--"+e.type:"",e.center?"is-center":"",e.showClose?"is-closable":"",e.customClass],style:e.positionStyle,attrs:{role:"alert"},on:{mouseenter:e.clearTimer,mouseleave:e.startTimer}},[e.icon?n("i",{staticClass:"awsui-iconfont",domProps:{innerHTML:e._s(e.icon)}}):n("i",{staticClass:"awsui-iconfont",domProps:{innerHTML:e._s(e.typeValue)}}),e._t("default",[e.html?n("p",{staticClass:"awsui-message__content",domProps:{innerHTML:e._s(e.message)}}):n("p",{staticClass:"awsui-message__content"},[e._v(e._s(e.message))])]),e.showClose?n("i",{staticClass:"awsui-iconfont awsui-message__closebtn",on:{click:e.close}},[e._v("")]):e._e()],2)])},s=[],l={success:"&#xea71;",info:"&#xe635;",warning:"&#xe71c;",error:"&#xe62f;"},c={data:function(){return{visible:!1,message:"",duration:3e3,type:"info",showClose:!1,icon:"",customClass:"",onClose:null,closed:!1,offset:20,timer:null,html:!1,center:!1}},computed:{typeValue:function(){return this.type&&!this.icon?"".concat(l[this.type]):""},positionStyle:function(){return{top:"".concat(this.offset,"px")}}},watch:{closed:function(e){e&&(this.visible=!1)}},methods:{handleAfterLeave:function(){this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},close:function(){this.closed=!0,"function"===typeof this.onClose&&this.onClose(this)},clearTimer:function(){clearTimeout(this.timer)},startTimer:function(){var e=this;"error"===this.type&&(this.showClose=!0,this.duration=0),this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration))},keydown:function(e){27===e.keyCode&&(this.closed||this.close())}},mounted:function(){this.startTimer(),document.addEventListener("keydown",this.keydown)},beforeDestroy:function(){document.removeEventListener("keydown",this.keydown)}},u=c,d=(n("6495"),n("2877")),h=Object(d["a"])(u,a,s,!1,null,null,null),f=h.exports,p=o.a.extend(f),m=[],g=1,v=["success","warning","info","error"],b=function e(t){var n=t||{};"string"===typeof n&&(n={message:n,type:"info"}),void 0===n.type&&(n.type="info");var i=n.onClose,r="message_"+g++;if(n.onClose=function(){e.close(r,i)},0===m.length)y(r,n);else{var o=m.some((function(e,t){if(e.type===n.type&&e.message===n.message)return!0}));o||y(r,n)}};function y(e,t){return b.close(),i=new p({data:t}),i.id=e,i.vm=i.$mount(),document.body.appendChild(i.vm.$el),i.vm.visible=!0,i.dom=i.vm.$el,i.dom.style.zIndex=1e4,m.push(i),i.vm}v.forEach((function(e){b[e]=function(t){if("string"===typeof t)return t={message:t},t.type=e,b(t)}})),b.close=function(e,t){for(var n=0,i=m.length;n<i;n++){if(e===m[n].id){"function"===typeof t&&t(m[n]),m.splice(n,1);break}m[n].close()}},b.closeAll=function(){for(var e=m.length-1;e>=0;e--)m[e].close()};var w=b;t["a"]=w},d397:function(e,t,n){"use strict";function i(e){return void 0!==e&&null!==e}function r(e){var t=/([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi;return t.test(e)}t.__esModule=!0,t.isDef=i,t.isKorean=r},d3b7:function(e,t,n){var i=n("00ee"),r=n("6eeb"),o=n("b041");i||r(Object.prototype,"toString",o,{unsafe:!0})},d44e:function(e,t,n){var i=n("9bf2").f,r=n("5135"),o=n("b622"),a=o("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,a)&&i(e,a,{configurable:!0,value:t})}},d4af:function(e,t,n){"use strict";var i=n("8eb7"),r=n("7b3e"),o=10,a=40,s=800;function l(e){var t=0,n=0,i=0,r=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=n,n=0),i=t*o,r=n*o,"deltaY"in e&&(r=e.deltaY),"deltaX"in e&&(i=e.deltaX),(i||r)&&e.deltaMode&&(1==e.deltaMode?(i*=a,r*=a):(i*=s,r*=s)),i&&!t&&(t=i<1?-1:1),r&&!n&&(n=r<1?-1:1),{spinX:t,spinY:n,pixelX:i,pixelY:r}}l.getEventType=function(){return i.firefox()?"DOMMouseScroll":r("wheel")?"wheel":"mousewheel"},e.exports=l},d537:function(e,t,n){},d58f:function(e,t,n){var i=n("1c0b"),r=n("7b0b"),o=n("44ad"),a=n("50c4"),s=function(e){return function(t,n,s,l){i(n);var c=r(t),u=o(c),d=a(c.length),h=e?d-1:0,f=e?-1:1;if(s<2)while(1){if(h in u){l=u[h],h+=f;break}if(h+=f,e?h<0:d<=h)throw TypeError("Reduce of empty array with no initial value")}for(;e?h>=0:d>h;h+=f)h in u&&(l=n(l,u[h],h,c));return l}};e.exports={left:s(!1),right:s(!0)}},d5d6:function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").forEach,o=i.aTypedArray,a=i.exportTypedArrayMethod;a("forEach",(function(e){r(o(this),e,arguments.length>1?arguments[1]:void 0)}))},d5e0:function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";var t={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};e.defineMode("xml",(function(i,r){var o,a,s=i.indentUnit,l={},c=r.htmlMode?t:n;for(var u in c)l[u]=c[u];for(var u in r)l[u]=r[u];function d(e,t){function n(n){return t.tokenize=n,n(e,t)}var i,r=e.next();return"<"==r?e.eat("!")?e.eat("[")?e.match("CDATA[")?n(p("atom","]]>")):null:e.match("--")?n(p("comment","--\x3e")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),n(m(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),t.tokenize=p("meta","?>"),"meta"):(o=e.eat("/")?"closeTag":"openTag",t.tokenize=h,"tag bracket"):"&"==r?(i=e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"),i?"atom":"error"):(e.eatWhile(/[^&<]/),null)}function h(e,t){var n=e.next();if(">"==n||"/"==n&&e.eat(">"))return t.tokenize=d,o=">"==n?"endTag":"selfcloseTag","tag bracket";if("="==n)return o="equals",null;if("<"==n){t.tokenize=d,t.state=y,t.tagName=t.tagStart=null;var i=t.tokenize(e,t);return i?i+" tag error":"tag error"}return/[\'\"]/.test(n)?(t.tokenize=f(n),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function f(e){var t=function(t,n){while(!t.eol())if(t.next()==e){n.tokenize=h;break}return"string"};return t.isInAttribute=!0,t}function p(e,t){return function(n,i){while(!n.eol()){if(n.match(t)){i.tokenize=d;break}n.next()}return e}}function m(e){return function(t,n){var i;while(null!=(i=t.next())){if("<"==i)return n.tokenize=m(e+1),n.tokenize(t,n);if(">"==i){if(1==e){n.tokenize=d;break}return n.tokenize=m(e-1),n.tokenize(t,n)}}return"meta"}}function g(e,t,n){this.prev=e.context,this.tagName=t||"",this.indent=e.indented,this.startOfLine=n,(l.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function v(e){e.context&&(e.context=e.context.prev)}function b(e,t){var n;while(1){if(!e.context)return;if(n=e.context.tagName,!l.contextGrabbers.hasOwnProperty(n)||!l.contextGrabbers[n].hasOwnProperty(t))return;v(e)}}function y(e,t,n){return"openTag"==e?(n.tagStart=t.column(),w):"closeTag"==e?x:y}function w(e,t,n){return"word"==e?(n.tagName=t.current(),a="tag",C):l.allowMissingTagName&&"endTag"==e?(a="tag bracket",C(e,t,n)):(a="error",w)}function x(e,t,n){if("word"==e){var i=t.current();return n.context&&n.context.tagName!=i&&l.implicitlyClosed.hasOwnProperty(n.context.tagName)&&v(n),n.context&&n.context.tagName==i||!1===l.matchClosing?(a="tag",_):(a="tag error",k)}return l.allowMissingTagName&&"endTag"==e?(a="tag bracket",_(e,t,n)):(a="error",k)}function _(e,t,n){return"endTag"!=e?(a="error",_):(v(n),y)}function k(e,t,n){return a="error",_(e,t,n)}function C(e,t,n){if("word"==e)return a="attribute",S;if("endTag"==e||"selfcloseTag"==e){var i=n.tagName,r=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==e||l.autoSelfClosers.hasOwnProperty(i)?b(n,i):(b(n,i),n.context=new g(n,i,r==n.indented)),y}return a="error",C}function S(e,t,n){return"equals"==e?O:(l.allowMissing||(a="error"),C(e,t,n))}function O(e,t,n){return"string"==e?T:"word"==e&&l.allowUnquoted?(a="string",C):(a="error",C(e,t,n))}function T(e,t,n){return"string"==e?T:C(e,t,n)}return d.isInText=!0,{startState:function(e){var t={tokenize:d,state:y,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;o=null;var n=t.tokenize(e,t);return(n||o)&&"comment"!=n&&(a=null,t.state=t.state(o||n,e,t),a&&(n="error"==a?n+" error":a)),n},indent:function(t,n,i){var r=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+s;if(r&&r.noIndent)return e.Pass;if(t.tokenize!=h&&t.tokenize!=d)return i?i.match(/^(\s*)/)[0].length:0;if(t.tagName)return!1!==l.multilineTagIndentPastTag?t.tagStart+t.tagName.length+2:t.tagStart+s*(l.multilineTagIndentFactor||1);if(l.alignCDATA&&/<!\[CDATA\[/.test(n))return 0;var o=n&&/^<(\/)?([\w_:\.-]*)/.exec(n);if(o&&o[1])while(r){if(r.tagName==o[2]){r=r.prev;break}if(!l.implicitlyClosed.hasOwnProperty(r.tagName))break;r=r.prev}else if(o)while(r){var a=l.contextGrabbers[r.tagName];if(!a||!a.hasOwnProperty(o[2]))break;r=r.prev}while(r&&r.prev&&!r.startOfLine)r=r.prev;return r?r.indent+s:t.baseIndent||0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:l.htmlMode?"html":"xml",helperType:l.htmlMode?"html":"xml",skipAttribute:function(e){e.state==O&&(e.state=C)},xmlCurrentTag:function(e){return e.tagName?{name:e.tagName,close:"closeTag"==e.type}:null},xmlCurrentContext:function(e){for(var t=[],n=e.context;n;n=n.prev)t.push(n.tagName);return t.reverse()}}})),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})}))},d69f:function(e,t,n){(function(e){e(n("56b3"),n("d5e0"),n("f9d4"),n("7b00"))})((function(e){"use strict";var t={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]};function n(e,t,n){var i=e.current(),r=i.search(t);return r>-1?e.backUp(i.length-r):i.match(/<\/?$/)&&(e.backUp(i.length),e.match(t,!1)||e.match(i)),n}var i={};function r(e){var t=i[e];return t||(i[e]=new RegExp("\\s+"+e+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"))}function o(e,t){var n=e.match(r(t));return n?/^\s*(.*?)\s*$/.exec(n[2])[1]:""}function a(e,t){return new RegExp((t?"^":"")+"</s*"+e+"s*>","i")}function s(e,t){for(var n in e)for(var i=t[n]||(t[n]=[]),r=e[n],o=r.length-1;o>=0;o--)i.unshift(r[o])}function l(e,t){for(var n=0;n<e.length;n++){var i=e[n];if(!i[0]||i[1].test(o(t,i[0])))return i[2]}}e.defineMode("htmlmixed",(function(i,r){var o=e.getMode(i,{name:"xml",htmlMode:!0,multilineTagIndentFactor:r.multilineTagIndentFactor,multilineTagIndentPastTag:r.multilineTagIndentPastTag,allowMissingTagName:r.allowMissingTagName}),c={},u=r&&r.tags,d=r&&r.scriptTypes;if(s(t,c),u&&s(u,c),d)for(var h=d.length-1;h>=0;h--)c.script.unshift(["type",d[h].matches,d[h].mode]);function f(t,r){var s,u=o.token(t,r.htmlState),d=/\btag\b/.test(u);if(d&&!/[<>\s\/]/.test(t.current())&&(s=r.htmlState.tagName&&r.htmlState.tagName.toLowerCase())&&c.hasOwnProperty(s))r.inTag=s+" ";else if(r.inTag&&d&&/>$/.test(t.current())){var h=/^([\S]+) (.*)/.exec(r.inTag);r.inTag=null;var p=">"==t.current()&&l(c[h[1]],h[2]),m=e.getMode(i,p),g=a(h[1],!0),v=a(h[1],!1);r.token=function(e,t){return e.match(g,!1)?(t.token=f,t.localState=t.localMode=null,null):n(e,v,t.localMode.token(e,t.localState))},r.localMode=m,r.localState=e.startState(m,o.indent(r.htmlState,"",""))}else r.inTag&&(r.inTag+=t.current(),t.eol()&&(r.inTag+=" "));return u}return{startState:function(){var t=e.startState(o);return{token:f,inTag:null,localMode:null,localState:null,htmlState:t}},copyState:function(t){var n;return t.localState&&(n=e.copyState(t.localMode,t.localState)),{token:t.token,inTag:t.inTag,localMode:t.localMode,localState:n,htmlState:e.copyState(o,t.htmlState)}},token:function(e,t){return t.token(e,t)},indent:function(t,n,i){return!t.localMode||/^\s*<\//.test(n)?o.indent(t.htmlState,n,i):t.localMode.indent?t.localMode.indent(t.localState,n,i):e.Pass},innerMode:function(e){return{state:e.localState||e.htmlState,mode:e.localMode||o}}}}),"xml","javascript","css"),e.defineMIME("text/html","htmlmixed")}))},d757:function(e,t,n){},d784:function(e,t,n){"use strict";n("ac1f");var i=n("6eeb"),r=n("d039"),o=n("b622"),a=n("9263"),s=n("9112"),l=o("species"),c=!r((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")})),u=function(){return"$0"==="a".replace(/./,"$0")}(),d=o("replace"),h=function(){return!!/./[d]&&""===/./[d]("a","$0")}(),f=!r((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));e.exports=function(e,t,n,d){var p=o(e),m=!r((function(){var t={};return t[p]=function(){return 7},7!=""[e](t)})),g=m&&!r((function(){var t=!1,n=/a/;return"split"===e&&(n={},n.constructor={},n.constructor[l]=function(){return n},n.flags="",n[p]=/./[p]),n.exec=function(){return t=!0,null},n[p](""),!t}));if(!m||!g||"replace"===e&&(!c||!u||h)||"split"===e&&!f){var v=/./[p],b=n(p,""[e],(function(e,t,n,i,r){return t.exec===a?m&&!r?{done:!0,value:v.call(t,n,i)}:{done:!0,value:e.call(n,t,i)}:{done:!1}}),{REPLACE_KEEPS_$0:u,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:h}),y=b[0],w=b[1];i(String.prototype,e,y),i(RegExp.prototype,p,2==t?function(e,t){return w.call(e,this,t)}:function(e){return w.call(e,this)})}d&&s(RegExp.prototype[p],"sham",!0)}},d7d1:function(e,t,n){"use strict";var i;n("c975"),n("fb6a"),n("d3b7"),n("4d63"),n("ac1f"),n("25f0"),n("466d"),n("5319"),function(r){var o={},a=/d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g,s="\\d\\d?",l="\\d{3}",c="\\d{4}",u="[^\\s]+",d=/\[([^]*?)\]/gm,h=function(){};function f(e){return e.replace(/[|\\{()[^$+*?.-]/g,"\\$&")}function p(e,t){for(var n=[],i=0,r=e.length;i<r;i++)n.push(e[i].substr(0,t));return n}function m(e){return function(t,n,i){var r=i[e].indexOf(n.charAt(0).toUpperCase()+n.substr(1).toLowerCase());~r&&(t.month=r)}}function g(e,t){e=String(e),t=t||2;while(e.length<t)e="0"+e;return e}var v=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],b=["January","February","March","April","May","June","July","August","September","October","November","December"],y=p(b,3),w=p(v,3);o.i18n={dayNamesShort:w,dayNames:v,monthNamesShort:y,monthNames:b,amPm:["am","pm"],DoFn:function(e){return e+["th","st","nd","rd"][e%10>3?0:(e-e%10!==10)*e%10]}};var x={D:function(e){return e.getDay()},DD:function(e){return g(e.getDay())},Do:function(e,t){return t.DoFn(e.getDate())},d:function(e){return e.getDate()},dd:function(e){return g(e.getDate())},ddd:function(e,t){return t.dayNamesShort[e.getDay()]},dddd:function(e,t){return t.dayNames[e.getDay()]},M:function(e){return e.getMonth()+1},MM:function(e){return g(e.getMonth()+1)},MMM:function(e,t){return t.monthNamesShort[e.getMonth()]},MMMM:function(e,t){return t.monthNames[e.getMonth()]},yy:function(e){return g(String(e.getFullYear()),4).substr(2)},yyyy:function(e){return g(e.getFullYear(),4)},h:function(e){return e.getHours()%12||12},hh:function(e){return g(e.getHours()%12||12)},H:function(e){return e.getHours()},HH:function(e){return g(e.getHours())},m:function(e){return e.getMinutes()},mm:function(e){return g(e.getMinutes())},s:function(e){return e.getSeconds()},ss:function(e){return g(e.getSeconds())},S:function(e){return Math.round(e.getMilliseconds()/100)},SS:function(e){return g(Math.round(e.getMilliseconds()/10),2)},SSS:function(e){return g(e.getMilliseconds(),3)},a:function(e,t){return e.getHours()<12?t.amPm[0]:t.amPm[1]},A:function(e,t){return e.getHours()<12?t.amPm[0].toUpperCase():t.amPm[1].toUpperCase()},ZZ:function(e){var t=e.getTimezoneOffset();return(t>0?"-":"+")+g(100*Math.floor(Math.abs(t)/60)+Math.abs(t)%60,4)}},_={d:[s,function(e,t){e.day=t}],Do:[s+u,function(e,t){e.day=parseInt(t,10)}],M:[s,function(e,t){e.month=t-1}],yy:[s,function(e,t){var n=new Date,i=+(""+n.getFullYear()).substr(0,2);e.year=""+(t>68?i-1:i)+t}],h:[s,function(e,t){e.hour=t}],m:[s,function(e,t){e.minute=t}],s:[s,function(e,t){e.second=t}],yyyy:[c,function(e,t){e.year=t}],S:["\\d",function(e,t){e.millisecond=100*t}],SS:["\\d{2}",function(e,t){e.millisecond=10*t}],SSS:[l,function(e,t){e.millisecond=t}],D:[s,h],ddd:[u,h],MMM:[u,m("monthNamesShort")],MMMM:[u,m("monthNames")],a:[u,function(e,t,n){var i=t.toLowerCase();i===n.amPm[0]?e.isPm=!1:i===n.amPm[1]&&(e.isPm=!0)}],ZZ:["[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z",function(e,t){var n,i=(t+"").match(/([+-]|\d\d)/gi);i&&(n=60*i[1]+parseInt(i[2],10),e.timezoneOffset="+"===i[0]?n:-n)}]};_.dd=_.d,_.dddd=_.ddd,_.DD=_.D,_.mm=_.m,_.hh=_.H=_.HH=_.h,_.MM=_.M,_.ss=_.s,_.A=_.a,o.masks={default:"ddd MMM dd yyyy HH:mm:ss",shortDate:"M/D/yy",mediumDate:"MMM d, yyyy",longDate:"MMMM d, yyyy",fullDate:"dddd, MMMM d, yyyy",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"},o.format=function(e,t,n){var i=n||o.i18n;if("number"===typeof e&&(e=new Date(e)),"[object Date]"!==Object.prototype.toString.call(e)||isNaN(e.getTime()))throw new Error("Invalid Date in fecha.format");t=o.masks[t]||t||o.masks["default"];var r=[];return t=t.replace(d,(function(e,t){return r.push(t),"@@@"})),t=t.replace(a,(function(t){return t in x?x[t](e,i):t.slice(1,t.length-1)})),t.replace(/@@@/g,(function(){return r.shift()}))},o.parse=function(e,t,n){var i=n||o.i18n;if("string"!==typeof t)throw new Error("Invalid format in fecha.parse");if(t=o.masks[t]||t,e.length>1e3)return null;var r={},s=[],l=[];t=t.replace(d,(function(e,t){return l.push(t),"@@@"}));var c=f(t).replace(a,(function(e){if(_[e]){var t=_[e];return s.push(t[1]),"("+t[0]+")"}return e}));c=c.replace(/@@@/g,(function(){return l.shift()}));var u=e.match(new RegExp(c,"i"));if(!u)return null;for(var h=1;h<u.length;h++)s[h-1](r,u[h],i);var p,m=new Date;return!0===r.isPm&&null!=r.hour&&12!==+r.hour?r.hour=+r.hour+12:!1===r.isPm&&12===+r.hour&&(r.hour=0),null!=r.timezoneOffset?(r.minute=+(r.minute||0)-+r.timezoneOffset,p=new Date(Date.UTC(r.year||m.getFullYear(),r.month||0,r.day||1,r.hour||0,r.minute||0,r.second||0,r.millisecond||0))):p=new Date(r.year||m.getFullYear(),r.month||0,r.day||1,r.hour||0,r.minute||0,r.second||0,r.millisecond||0),p},e.exports?e.exports=o:(i=function(){return o}.call(t,n,t,e),void 0===i||(e.exports=i))}()},d7d5:function(e,t,n){(function(e){e(n("56b3"))})((function(e){function t(e){e.state.placeholder&&(e.state.placeholder.parentNode.removeChild(e.state.placeholder),e.state.placeholder=null)}function n(e){t(e);var n=e.state.placeholder=document.createElement("pre");n.style.cssText="height: 0; overflow: visible",n.style.direction=e.getOption("direction"),n.className="CodeMirror-placeholder CodeMirror-line-like";var i=e.getOption("placeholder");"string"==typeof i&&(i=document.createTextNode(i)),n.appendChild(i),e.display.lineSpace.insertBefore(n,e.display.lineSpace.firstChild)}function i(e){setTimeout((function(){var i=!1;if(1==e.lineCount()){var r=e.getInputField();i="TEXTAREA"==r.nodeName?!e.getLine(0).length:!/[^\u200b]/.test(r.querySelector(".CodeMirror-line").textContent)}i?n(e):t(e)}),20)}function r(e){a(e)&&n(e)}function o(e){var i=e.getWrapperElement(),r=a(e);i.className=i.className.replace(" CodeMirror-empty","")+(r?" CodeMirror-empty":""),r?n(e):t(e)}function a(e){return 1===e.lineCount()&&""===e.getLine(0)}e.defineOption("placeholder","",(function(n,a,s){var l=s&&s!=e.Init;if(a&&!l)n.on("blur",r),n.on("change",o),n.on("swapDoc",o),e.on(n.getInputField(),"compositionupdate",n.state.placeholderCompose=function(){i(n)}),o(n);else if(!a&&l){n.off("blur",r),n.off("change",o),n.off("swapDoc",o),e.off(n.getInputField(),"compositionupdate",n.state.placeholderCompose),t(n);var c=n.getWrapperElement();c.className=c.className.replace(" CodeMirror-empty","")}a&&!n.hasFocus()&&r(n)}))}))},d81d:function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").map,o=n("1dde"),a=n("ae40"),s=o("map"),l=a("map");i({target:"Array",proto:!0,forced:!s||!l},{map:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},d925:function(e,t,n){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},d940:function(e,t,n){"use strict";n("99af"),n("4160"),n("c975"),n("d81d"),n("45fc"),n("ac1f"),n("5319"),n("498a"),n("159b"),t.__esModule=!0,t.validateRangeInOneMonth=t.extractTimeFormat=t.extractDateFormat=t.nextYear=t.prevYear=t.nextMonth=t.prevMonth=t.changeYearMonthAndClampDate=t.timeWithinRange=t.limitTimeRange=t.clearMilliseconds=t.clearTime=t.modifyWithTimeString=t.modifyTime=t.modifyDate=t.range=t.getRangeMinutes=t.getMonthDays=t.getPrevMonthLastDays=t.getRangeHours=t.getWeekNumber=t.getStartDateOfMonth=t.nextDate=t.prevDate=t.getFirstDayOfMonth=t.getDayCountOfYear=t.getDayCountOfMonth=t.parseDate=t.formatDate=t.isDateObject=t.isDate=t.toDate=t.getI18nSettings=void 0;var i=n("d7d1"),r=a(i),o=n("4897");function a(e){return e&&e.__esModule?e:{default:e}}var s=["sun","mon","tue","wed","thu","fri","sat"],l=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],c=function(e,t){for(var n=[],i=e;i<=t;i++)n.push(i);return n},u=t.getI18nSettings=function(){return{dayNamesShort:s.map((function(e){return(0,o.t)("el.datepicker.weeks."+e)})),dayNames:s.map((function(e){return(0,o.t)("el.datepicker.weeks."+e)})),monthNamesShort:l.map((function(e){return(0,o.t)("el.datepicker.months."+e)})),monthNames:l.map((function(e,t){return(0,o.t)("el.datepicker.month"+(t+1))})),amPm:["am","pm"]}},d=t.toDate=function(e){return h(e)?new Date(e):null},h=t.isDate=function(e){return null!==e&&void 0!==e&&!isNaN(new Date(e).getTime())&&!Array.isArray(e)},f=(t.isDateObject=function(e){return e instanceof Date},t.formatDate=function(e,t){return e=d(e),e?r.default.format(e,t||"yyyy-MM-dd",u()):""},t.parseDate=function(e,t){return r.default.parse(e,t||"yyyy-MM-dd",u())}),p=t.getDayCountOfMonth=function(e,t){return 3===t||5===t||8===t||10===t?30:1===t?e%4===0&&e%100!==0||e%400===0?29:28:31},m=(t.getDayCountOfYear=function(e){var t=e%400===0||e%100!==0&&e%4===0;return t?366:365},t.getFirstDayOfMonth=function(e){var t=new Date(e.getTime());return t.setDate(1),t.getDay()},t.prevDate=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Date(e.getFullYear(),e.getMonth(),e.getDate()-t)});function g(e,t,n,i){for(var r=t;r<n;r++)e[r]=i}t.nextDate=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Date(e.getFullYear(),e.getMonth(),e.getDate()+t)},t.getStartDateOfMonth=function(e,t){var n=new Date(e,t,1),i=n.getDay();return m(n,0===i?7:i)},t.getWeekNumber=function(e){if(!h(e))return null;var t=new Date(e.getTime());t.setHours(0,0,0,0),t.setDate(t.getDate()+3-(t.getDay()+6)%7);var n=new Date(t.getFullYear(),0,4);return 1+Math.round(((t.getTime()-n.getTime())/864e5-3+(n.getDay()+6)%7)/7)},t.getRangeHours=function(e){var t=[],n=[];if((e||[]).forEach((function(e){var t=e.map((function(e){return e.getHours()}));n=n.concat(c(t[0],t[1]))})),n.length)for(var i=0;i<24;i++)t[i]=-1===n.indexOf(i);else for(var r=0;r<24;r++)t[r]=!1;return t},t.getPrevMonthLastDays=function(e,t){if(t<=0)return[];var n=new Date(e.getTime());n.setDate(0);var i=n.getDate();return v(t).map((function(e,n){return i-(t-n-1)}))},t.getMonthDays=function(e){var t=new Date(e.getFullYear(),e.getMonth()+1,0),n=t.getDate();return v(n).map((function(e,t){return t+1}))},t.getRangeMinutes=function(e,t){var n=new Array(60);return e.length>0?e.forEach((function(e){var i=e[0],r=e[1],o=i.getHours(),a=i.getMinutes(),s=r.getHours(),l=r.getMinutes();o===t&&s!==t?g(n,a,60,!0):o===t&&s===t?g(n,a,l+1,!0):o!==t&&s===t?g(n,0,l+1,!0):o<t&&s>t&&g(n,0,60,!0)})):g(n,0,60,!0),n};var v=t.range=function(e){return Array.apply(null,{length:e}).map((function(e,t){return t}))},b=t.modifyDate=function(e,t,n,i){return new Date(t,n,i,e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())},y=t.modifyTime=function(e,t,n,i){return new Date(e.getFullYear(),e.getMonth(),e.getDate(),t,n,i,e.getMilliseconds())},w=(t.modifyWithTimeString=function(e,t){return null!=e&&t?(t=f(t,"HH:mm:ss"),y(e,t.getHours(),t.getMinutes(),t.getSeconds())):e},t.clearTime=function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())},t.clearMilliseconds=function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),0)},t.limitTimeRange=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"HH:mm:ss";if(0===t.length)return e;var i=function(e){return r.default.parse(r.default.format(e,n),n)},o=i(e),a=t.map((function(e){return e.map(i)}));if(a.some((function(e){return o>=e[0]&&o<=e[1]})))return e;var s=a[0][0],l=a[0][0];a.forEach((function(e){s=new Date(Math.min(e[0],s)),l=new Date(Math.max(e[1],s))}));var c=o<s?s:l;return b(c,e.getFullYear(),e.getMonth(),e.getDate())}),x=(t.timeWithinRange=function(e,t,n){var i=w(e,t,n);return i.getTime()===e.getTime()},t.changeYearMonthAndClampDate=function(e,t,n){var i=Math.min(e.getDate(),p(t,n));return b(e,t,n,i)});t.prevMonth=function(e){var t=e.getFullYear(),n=e.getMonth();return 0===n?x(e,t-1,11):x(e,t,n-1)},t.nextMonth=function(e){var t=e.getFullYear(),n=e.getMonth();return 11===n?x(e,t+1,0):x(e,t,n+1)},t.prevYear=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=e.getFullYear(),i=e.getMonth();return x(e,n-t,i)},t.nextYear=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=e.getFullYear(),i=e.getMonth();return x(e,n+t,i)},t.extractDateFormat=function(e){return e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim()},t.extractTimeFormat=function(e){return e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?y{2,4}/g,"").trim()},t.validateRangeInOneMonth=function(e,t){return e.getMonth()===t.getMonth()&&e.getFullYear()===t.getFullYear()}},da84:function(e,t,n){(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==("undefined"===typeof globalThis?"undefined":_typeof2(globalThis))&&globalThis)||n("object"==("undefined"===typeof window?"undefined":_typeof2(window))&&window)||n("object"==("undefined"===typeof self?"undefined":_typeof2(self))&&self)||n("object"==_typeof2(t)&&t)||Function("return this")()}).call(this,n("c8ba"))},db91:function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";function t(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}var n=t(["and","or","not","is"]),i=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in"],r=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function o(e){return e.scopes[e.scopes.length-1]}e.registerHelper("hintWords","python",i.concat(r)),e.defineMode("python",(function(a,s){for(var l="error",c=s.delimiters||s.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,u=[s.singleOperators,s.doubleOperators,s.doubleDelimiters,s.tripleDelimiters,s.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],d=0;d<u.length;d++)u[d]||u.splice(d--,1);var h=s.hangingIndent||a.indentUnit,f=i,p=r;void 0!=s.extra_keywords&&(f=f.concat(s.extra_keywords)),void 0!=s.extra_builtins&&(p=p.concat(s.extra_builtins));var m=!(s.version&&Number(s.version)<3);if(m){var g=s.identifiers||/^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*/;f=f.concat(["nonlocal","False","True","None","async","await"]),p=p.concat(["ascii","bytes","exec","print"]);var v=new RegExp("^(([rbuf]|(br)|(fr))?('{3}|\"{3}|['\"]))","i")}else g=s.identifiers||/^[_A-Za-z][_A-Za-z0-9]*/,f=f.concat(["exec","print"]),p=p.concat(["apply","basestring","buffer","cmp","coerce","execfile","file","intern","long","raw_input","reduce","reload","unichr","unicode","xrange","False","True","None"]),v=new RegExp("^(([rubf]|(ur)|(br))?('{3}|\"{3}|['\"]))","i");var b=t(f),y=t(p);function w(e,t){var n=e.sol()&&"\\"!=t.lastToken;if(n&&(t.indent=e.indentation()),n&&"py"==o(t).type){var i=o(t).offset;if(e.eatSpace()){var r=e.indentation();return r>i?C(t):r<i&&O(e,t)&&"#"!=e.peek()&&(t.errorToken=!0),null}var a=x(e,t);return i>0&&O(e,t)&&(a+=" "+l),a}return x(e,t)}function x(e,t,i){if(e.eatSpace())return null;if(!i&&e.match(/^#.*/))return"comment";if(e.match(/^[0-9\.]/,!1)){var r=!1;if(e.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)&&(r=!0),e.match(/^[\d_]+\.\d*/)&&(r=!0),e.match(/^\.\d+/)&&(r=!0),r)return e.eat(/J/i),"number";var o=!1;if(e.match(/^0x[0-9a-f_]+/i)&&(o=!0),e.match(/^0b[01_]+/i)&&(o=!0),e.match(/^0o[0-7_]+/i)&&(o=!0),e.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)&&(e.eat(/J/i),o=!0),e.match(/^0(?![\dx])/i)&&(o=!0),o)return e.eat(/L/i),"number"}if(e.match(v)){var a=-1!==e.current().toLowerCase().indexOf("f");return a?(t.tokenize=_(e.current(),t.tokenize),t.tokenize(e,t)):(t.tokenize=k(e.current(),t.tokenize),t.tokenize(e,t))}for(var s=0;s<u.length;s++)if(e.match(u[s]))return"operator";return e.match(c)?"punctuation":"."==t.lastToken&&e.match(g)?"property":e.match(b)||e.match(n)?"keyword":e.match(y)?"builtin":e.match(/^(self|cls)\b/)?"variable-2":e.match(g)?"def"==t.lastToken||"class"==t.lastToken?"def":"variable":(e.next(),i?null:l)}function _(e,t){while("rubf".indexOf(e.charAt(0).toLowerCase())>=0)e=e.substr(1);var n=1==e.length,i="string";function r(e){return function(t,n){var i=x(t,n,!0);return"punctuation"==i&&("{"==t.current()?n.tokenize=r(e+1):"}"==t.current()&&(n.tokenize=e>1?r(e-1):o)),i}}function o(o,a){while(!o.eol())if(o.eatWhile(/[^'"\{\}\\]/),o.eat("\\")){if(o.next(),n&&o.eol())return i}else{if(o.match(e))return a.tokenize=t,i;if(o.match("{{"))return i;if(o.match("{",!1))return a.tokenize=r(0),o.current()?i:a.tokenize(o,a);if(o.match("}}"))return i;if(o.match("}"))return l;o.eat(/['"]/)}if(n){if(s.singleLineStringErrors)return l;a.tokenize=t}return i}return o.isString=!0,o}function k(e,t){while("rubf".indexOf(e.charAt(0).toLowerCase())>=0)e=e.substr(1);var n=1==e.length,i="string";function r(r,o){while(!r.eol())if(r.eatWhile(/[^'"\\]/),r.eat("\\")){if(r.next(),n&&r.eol())return i}else{if(r.match(e))return o.tokenize=t,i;r.eat(/['"]/)}if(n){if(s.singleLineStringErrors)return l;o.tokenize=t}return i}return r.isString=!0,r}function C(e){while("py"!=o(e).type)e.scopes.pop();e.scopes.push({offset:o(e).offset+a.indentUnit,type:"py",align:null})}function S(e,t,n){var i=e.match(/^([\s\[\{\(]|#.*)*$/,!1)?null:e.column()+1;t.scopes.push({offset:t.indent+h,type:n,align:i})}function O(e,t){var n=e.indentation();while(t.scopes.length>1&&o(t).offset>n){if("py"!=o(t).type)return!0;t.scopes.pop()}return o(t).offset!=n}function T(e,t){e.sol()&&(t.beginningOfLine=!0);var n=t.tokenize(e,t),i=e.current();if(t.beginningOfLine&&"@"==i)return e.match(g,!1)?"meta":m?"operator":l;if(/\S/.test(i)&&(t.beginningOfLine=!1),"variable"!=n&&"builtin"!=n||"meta"!=t.lastToken||(n="meta"),"pass"!=i&&"return"!=i||(t.dedent+=1),"lambda"==i&&(t.lambda=!0),":"!=i||t.lambda||"py"!=o(t).type||C(t),1==i.length&&!/string|comment/.test(n)){var r="[({".indexOf(i);if(-1!=r&&S(e,t,"])}".slice(r,r+1)),r="])}".indexOf(i),-1!=r){if(o(t).type!=i)return l;t.indent=t.scopes.pop().offset-h}}return t.dedent>0&&e.eol()&&"py"==o(t).type&&(t.scopes.length>1&&t.scopes.pop(),t.dedent-=1),n}var E={startState:function(e){return{tokenize:w,scopes:[{offset:e||0,type:"py",align:null}],indent:e||0,lastToken:null,lambda:!1,dedent:0}},token:function(e,t){var n=t.errorToken;n&&(t.errorToken=!1);var i=T(e,t);return i&&"comment"!=i&&(t.lastToken="keyword"==i||"punctuation"==i?e.current():i),"punctuation"==i&&(i=null),e.eol()&&t.lambda&&(t.lambda=!1),n?i+" "+l:i},indent:function(t,n){if(t.tokenize!=w)return t.tokenize.isString?e.Pass:0;var i=o(t),r=i.type==n.charAt(0);return null!=i.align?i.align-(r?1:0):i.offset-(r?h:0)},electricInput:/^\s*[\}\]\)]$/,closeBrackets:{triples:"'\""},lineComment:"#",fold:"indent"};return E})),e.defineMIME("text/x-python","python");var a=function(e){return e.split(" ")};e.defineMIME("text/x-cython",{name:"python",extra_keywords:a("by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE")})}))},dca8:function(e,t,n){var i=n("23e7"),r=n("bb2f"),o=n("d039"),a=n("861d"),s=n("f183").onFreeze,l=Object.freeze,c=o((function(){l(1)}));i({target:"Object",stat:!0,forced:c,sham:!r},{freeze:function(e){return l&&a(e)?l(s(e)):e}})},dcdc:function(e,t,n){n("a4d3"),n("e01a"),n("944a"),n("99af"),n("c975"),n("fb6a"),n("b0c0"),n("0c47"),n("23dc"),n("a9e3"),n("d3b7");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=83)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},4:function(e,t){e.exports=n("d010")},83:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-checkbox",class:[e.border&&e.checkboxSize?"el-checkbox--"+e.checkboxSize:"",{"is-disabled":e.isDisabled},{"is-bordered":e.border},{"is-checked":e.isChecked}],attrs:{id:e.id}},[n("span",{staticClass:"el-checkbox__input",class:{"is-disabled":e.isDisabled,"is-checked":e.isChecked,"is-indeterminate":e.indeterminate,"is-focus":e.focus},attrs:{tabindex:!!e.indeterminate&&0,role:!!e.indeterminate&&"checkbox","aria-checked":!!e.indeterminate&&"mixed"}},[n("span",{staticClass:"el-checkbox__inner"}),e.trueLabel||e.falseLabel?n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var n=e.model,i=t.target,r=i.checked?e.trueLabel:e.falseLabel;if(Array.isArray(n)){var o=null,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",disabled:e.isDisabled,name:e.name},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var n=e.model,i=t.target,r=!!i.checked;if(Array.isArray(n)){var o=e.label,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}})]),e.$slots.default||e.label?n("span",{staticClass:"el-checkbox__label"},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2):e._e()])},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s={name:"ElCheckbox",mixins:[a.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElCheckbox",data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},computed:{model:{get:function(){return this.isGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this.isGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.length<this._checkboxGroup.min&&(this.isLimitExceeded=!0),void 0!==this._checkboxGroup.max&&e.length>this._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):(this.$emit("input",e),this.selfModel=e)}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},isGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return this._checkboxGroup=e,!0;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,n=e.min;return!(!t&&!n)&&this.model.length>=t&&!this.isChecked||this.model.length<=n&&this.isChecked},isDisabled:function(){return this.isGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._checkboxGroup.checkboxGroupSize||e}},props:{value:{},label:{},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number],id:String,controls:String,border:Boolean,size:String},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var n=void 0;n=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",n,e),this.$nextTick((function(){t.isGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()},mounted:function(){this.indeterminate&&this.$el.setAttribute("aria-controls",this.controls)},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}}},l=s,c=n(0),u=Object(c["a"])(l,i,r,!1,null,null,null);u.options.__file="packages/checkbox/src/checkbox.vue";var d=u.exports;d.install=function(e){e.component(d.name,d)},t["default"]=d}})},dda2:function(e,t,n){},ddb0:function(e,t,n){var i=n("da84"),r=n("fdbc"),o=n("e260"),a=n("9112"),s=n("b622"),l=s("iterator"),c=s("toStringTag"),u=o.values;for(var d in r){var h=i[d],f=h&&h.prototype;if(f){if(f[l]!==u)try{a(f,l,u)}catch(m){f[l]=u}if(f[c]||a(f,c,d),r[d])for(var p in o)if(f[p]!==o[p])try{a(f,p,o[p])}catch(m){f[p]=o[p]}}}},df75:function(e,t,n){var i=n("ca84"),r=n("7839");e.exports=Object.keys||function(e){return i(e,r)}},df7c:function(e,t,n){(function(e){function n(e,t){for(var n=0,i=e.length-1;i>=0;i--){var r=e[i];"."===r?e.splice(i,1):".."===r?(e.splice(i,1),n++):n&&(e.splice(i,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}function i(e){"string"!==typeof e&&(e+="");var t,n=0,i=-1,r=!0;for(t=e.length-1;t>=0;--t)if(47===e.charCodeAt(t)){if(!r){n=t+1;break}}else-1===i&&(r=!1,i=t+1);return-1===i?"":e.slice(n,i)}function r(e,t){if(e.filter)return e.filter(t);for(var n=[],i=0;i<e.length;i++)t(e[i],i,e)&&n.push(e[i]);return n}t.resolve=function(){for(var t="",i=!1,o=arguments.length-1;o>=-1&&!i;o--){var a=o>=0?arguments[o]:e.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(t=a+"/"+t,i="/"===a.charAt(0))}return t=n(r(t.split("/"),(function(e){return!!e})),!i).join("/"),(i?"/":"")+t||"."},t.normalize=function(e){var i=t.isAbsolute(e),a="/"===o(e,-1);return e=n(r(e.split("/"),(function(e){return!!e})),!i).join("/"),e||i||(e="."),e&&a&&(e+="/"),(i?"/":"")+e},t.isAbsolute=function(e){return"/"===e.charAt(0)},t.join=function(){var e=Array.prototype.slice.call(arguments,0);return t.normalize(r(e,(function(e,t){if("string"!==typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))},t.relative=function(e,n){function i(e){for(var t=0;t<e.length;t++)if(""!==e[t])break;for(var n=e.length-1;n>=0;n--)if(""!==e[n])break;return t>n?[]:e.slice(t,n-t+1)}e=t.resolve(e).substr(1),n=t.resolve(n).substr(1);for(var r=i(e.split("/")),o=i(n.split("/")),a=Math.min(r.length,o.length),s=a,l=0;l<a;l++)if(r[l]!==o[l]){s=l;break}var c=[];for(l=s;l<r.length;l++)c.push("..");return c=c.concat(o.slice(s)),c.join("/")},t.sep="/",t.delimiter=":",t.dirname=function(e){if("string"!==typeof e&&(e+=""),0===e.length)return".";for(var t=e.charCodeAt(0),n=47===t,i=-1,r=!0,o=e.length-1;o>=1;--o)if(t=e.charCodeAt(o),47===t){if(!r){i=o;break}}else r=!1;return-1===i?n?"/":".":n&&1===i?"/":e.slice(0,i)},t.basename=function(e,t){var n=i(e);return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},t.extname=function(e){"string"!==typeof e&&(e+="");for(var t=-1,n=0,i=-1,r=!0,o=0,a=e.length-1;a>=0;--a){var s=e.charCodeAt(a);if(47!==s)-1===i&&(r=!1,i=a+1),46===s?-1===t?t=a:1!==o&&(o=1):-1!==t&&(o=-1);else if(!r){n=a+1;break}}return-1===t||-1===i||0===o||1===o&&t===i-1&&t===n+1?"":e.slice(t,i)};var o="b"==="ab".substr(-1)?function(e,t,n){return e.substr(t,n)}:function(e,t,n){return t<0&&(t=e.length+t),e.substr(t,n)}}).call(this,n("4362"))},dfe5:function(e,t){},e01a:function(e,t,n){"use strict";var i=n("23e7"),r=n("83ab"),o=n("da84"),a=n("5135"),s=n("861d"),l=n("9bf2").f,c=n("e893"),u=o.Symbol;if(r&&"function"==typeof u&&(!("description"in u.prototype)||void 0!==u().description)){var d={},h=function e(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),n=this instanceof e?new u(t):void 0===t?u():u(t);return""===t&&(d[n]=!0),n};c(h,u);var f=h.prototype=u.prototype;f.constructor=h;var p=f.toString,m="Symbol(test)"==String(u("test")),g=/^Symbol\((.*)\)[^)]+$/;l(f,"description",{configurable:!0,get:function(){var e=s(this)?this.valueOf():this,t=p.call(e);if(a(d,e))return"";var n=m?t.slice(7,-1):t.replace(g,"$1");return""===n?void 0:n}}),i({global:!0,forced:!0},{Symbol:h})}},e163:function(e,t,n){var i=n("5135"),r=n("7b0b"),o=n("f772"),a=n("e177"),s=o("IE_PROTO"),l=Object.prototype;e.exports=a?Object.getPrototypeOf:function(e){return e=r(e),i(e,s)?e[s]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?l:null}},e177:function(e,t,n){var i=n("d039");e.exports=!i((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},e198:function(e,t,n){var i=n("ef08"),r=n("5524"),o=n("e444"),a=n("fcd4"),s=n("1a14").f;e.exports=function(e){var t=r.Symbol||(r.Symbol=o?{}:i.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},e1de:function(e,t,n){(function(e){e(n("56b3"),n("76ae"),n("eb0c"))})((function(e){"use strict";e.defineSimpleMode("handlebars-tags",{start:[{regex:/\{\{\{/,push:"handlebars_raw",token:"tag"},{regex:/\{\{!--/,push:"dash_comment",token:"comment"},{regex:/\{\{!/,push:"comment",token:"comment"},{regex:/\{\{/,push:"handlebars",token:"tag"}],handlebars_raw:[{regex:/\}\}\}/,pop:!0,token:"tag"}],handlebars:[{regex:/\}\}/,pop:!0,token:"tag"},{regex:/"(?:[^\\"]|\\.)*"?/,token:"string"},{regex:/'(?:[^\\']|\\.)*'?/,token:"string"},{regex:/>|[#\/]([A-Za-z_]\w*)/,token:"keyword"},{regex:/(?:else|this)\b/,token:"keyword"},{regex:/\d+/i,token:"number"},{regex:/=|~|@|true|false/,token:"atom"},{regex:/(?:\.\.\/)*(?:[A-Za-z_][\w\.]*)+/,token:"variable-2"}],dash_comment:[{regex:/--\}\}/,pop:!0,token:"comment"},{regex:/./,token:"comment"}],comment:[{regex:/\}\}/,pop:!0,token:"comment"},{regex:/./,token:"comment"}],meta:{blockCommentStart:"{{--",blockCommentEnd:"--}}"}}),e.defineMode("handlebars",(function(t,n){var i=e.getMode(t,"handlebars-tags");return n&&n.base?e.multiplexingMode(e.getMode(t,n.base),{open:"{{",close:/\}\}\}?/,mode:i,parseDelimiters:!0}):i})),e.defineMIME("text/x-handlebars-template","handlebars")}))},e1f4:function(e,t){var n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(n){var i=new Uint8Array(16);e.exports=function(){return n(i),i}}else{var r=new Array(16);e.exports=function(){for(var e,t=0;t<16;t++)0===(3&t)&&(e=4294967296*Math.random()),r[t]=e>>>((3&t)<<3)&255;return r}}},e240:function(e,t,n){},e260:function(e,t,n){"use strict";var i=n("fc6a"),r=n("44d2"),o=n("3f8c"),a=n("69f3"),s=n("7dd0"),l="Array Iterator",c=a.set,u=a.getterFor(l);e.exports=s(Array,"Array",(function(e,t){c(this,{type:l,target:i(e),index:0,kind:t})}),(function(){var e=u(this),t=e.target,n=e.kind,i=e.index++;return!t||i>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:i,done:!1}:"values"==n?{value:t[i],done:!1}:{value:[i,t[i]],done:!1}}),"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},e2ae:function(e,t,n){"use strict";var i=n("576e"),r=n.n(i);r.a},e2cc:function(e,t,n){var i=n("6eeb");e.exports=function(e,t,n){for(var r in t)i(e,r,t[r],n);return e}},e34a:function(e,t,n){var i=n("8b1a")("meta"),r=n("7a41"),o=n("9c0e"),a=n("1a14").f,s=0,l=Object.isExtensible||function(){return!0},c=!n("4b8b")((function(){return l(Object.preventExtensions({}))})),u=function(e){a(e,i,{value:{i:"O"+ ++s,w:{}}})},d=function(e,t){if(!r(e))return"symbol"==_typeof2(e)?e:("string"==typeof e?"S":"P")+e;if(!o(e,i)){if(!l(e))return"F";if(!t)return"E";u(e)}return e[i].i},h=function(e,t){if(!o(e,i)){if(!l(e))return!0;if(!t)return!1;u(e)}return e[i].w},f=function(e){return c&&p.NEED&&l(e)&&!o(e,i)&&u(e),e},p=e.exports={KEY:i,NEED:!1,fastKey:d,getWeak:h,onFreeze:f}},e439:function(e,t,n){var i=n("23e7"),r=n("d039"),o=n("fc6a"),a=n("06cf").f,s=n("83ab"),l=r((function(){a(1)})),c=!s||l;i({target:"Object",stat:!0,forced:c,sham:!s},{getOwnPropertyDescriptor:function(e,t){return a(o(e),t)}})},e444:function(e,t){e.exports=!0},e450:function(e,t,n){n("a4d3"),n("e01a"),n("944a"),n("99af"),n("c975"),n("b0c0"),n("0c47"),n("23dc"),n("a9e3"),n("b680"),n("d3b7"),n("25f0");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=114)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},10:function(e,t){e.exports=n("f3ad")},114:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["el-input-number",e.inputNumberSize?"el-input-number--"+e.inputNumberSize:"",{"is-disabled":e.inputNumberDisabled},{"is-without-controls":!e.controls},{"is-controls-right":e.controlsAtRight}],on:{dragstart:function(e){e.preventDefault()}}},[e.controls?n("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-input-number__decrease",class:{"is-disabled":e.minDisabled},attrs:{role:"button"},on:{keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.decrease(t)}}},[n("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-down":"minus")})]):e._e(),e.controls?n("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-input-number__increase",class:{"is-disabled":e.maxDisabled},attrs:{role:"button"},on:{keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.increase(t)}}},[n("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-up":"plus")})]):e._e(),n("el-input",{ref:"input",attrs:{value:e.displayValue,placeholder:e.placeholder,disabled:e.inputNumberDisabled,size:e.inputNumberSize,max:e.max,min:e.min,name:e.name,label:e.label},on:{blur:e.handleBlur,focus:e.handleFocus,input:e.handleInput,change:e.handleInputChange},nativeOn:{keydown:[function(t){return!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?null:(t.preventDefault(),e.increase(t))},function(t){return!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?null:(t.preventDefault(),e.decrease(t))}]}})],1)},r=[];i._withStripped=!0;var o=n(10),a=n.n(o),s=n(22),l=n.n(s),c=n(30),u={name:"ElInputNumber",mixins:[l()("input")],inject:{elForm:{default:""},elFormItem:{default:""}},directives:{repeatClick:c["a"]},components:{ElInput:a.a},props:{step:{type:Number,default:1},stepStrictly:{type:Boolean,default:!1},max:{type:Number,default:1/0},min:{type:Number,default:-1/0},value:{},disabled:Boolean,size:String,controls:{type:Boolean,default:!0},controlsPosition:{type:String,default:""},name:String,label:String,placeholder:String,precision:{type:Number,validator:function(e){return e>=0&&e===parseInt(e,10)}}},data:function(){return{currentValue:0,userInput:null}},watch:{value:{immediate:!0,handler:function(e){var t=void 0===e?e:Number(e);if(void 0!==t){if(isNaN(t))return;if(this.stepStrictly){var n=this.getPrecision(this.step),i=Math.pow(10,n);t=Math.round(t/this.step)*i*this.step/i}void 0!==this.precision&&(t=this.toPrecision(t,this.precision))}t>=this.max&&(t=this.max),t<=this.min&&(t=this.min),this.currentValue=t,this.userInput=null,this.$emit("input",t)}}},computed:{minDisabled:function(){return this._decrease(this.value,this.step)<this.min},maxDisabled:function(){return this._increase(this.value,this.step)>this.max},numPrecision:function(){var e=this.value,t=this.step,n=this.getPrecision,i=this.precision,r=n(t);return void 0!==i?(r>i&&console.warn("[Element Warn][InputNumber]precision should not be less than the decimal places of step"),i):Math.max(n(e),r)},controlsAtRight:function(){return this.controls&&"right"===this.controlsPosition},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},inputNumberSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputNumberDisabled:function(){return this.disabled||!!(this.elForm||{}).disabled},displayValue:function(){if(null!==this.userInput)return this.userInput;var e=this.currentValue;if("number"===typeof e){if(this.stepStrictly){var t=this.getPrecision(this.step),n=Math.pow(10,t);e=Math.round(e/this.step)*n*this.step/n}void 0!==this.precision&&(e=e.toFixed(this.precision))}return e}},methods:{toPrecision:function(e,t){return void 0===t&&(t=this.numPrecision),parseFloat(Math.round(e*Math.pow(10,t))/Math.pow(10,t))},getPrecision:function(e){if(void 0===e)return 0;var t=e.toString(),n=t.indexOf("."),i=0;return-1!==n&&(i=t.length-n-1),i},_increase:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e+n*t)/n)},_decrease:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e-n*t)/n)},increase:function(){if(!this.inputNumberDisabled&&!this.maxDisabled){var e=this.value||0,t=this._increase(e,this.step);this.setCurrentValue(t)}},decrease:function(){if(!this.inputNumberDisabled&&!this.minDisabled){var e=this.value||0,t=this._decrease(e,this.step);this.setCurrentValue(t)}},handleBlur:function(e){this.$emit("blur",e)},handleFocus:function(e){this.$emit("focus",e)},setCurrentValue:function(e){var t=this.currentValue;"number"===typeof e&&void 0!==this.precision&&(e=this.toPrecision(e,this.precision)),e>=this.max&&(e=this.max),e<=this.min&&(e=this.min),t!==e&&(this.userInput=null,this.$emit("input",e),this.$emit("change",e,t),this.currentValue=e)},handleInput:function(e){this.userInput=e},handleInputChange:function(e){var t=""===e?void 0:Number(e);isNaN(t)&&""!==e||this.setCurrentValue(t),this.userInput=null},select:function(){this.$refs.input.select()}},mounted:function(){var e=this.$refs.input.$refs.input;e.setAttribute("role","spinbutton"),e.setAttribute("aria-valuemax",this.max),e.setAttribute("aria-valuemin",this.min),e.setAttribute("aria-valuenow",this.currentValue),e.setAttribute("aria-disabled",this.inputNumberDisabled)},updated:function(){if(this.$refs&&this.$refs.input){var e=this.$refs.input.$refs.input;e.setAttribute("aria-valuenow",this.currentValue)}}},d=u,h=n(0),f=Object(h["a"])(d,i,r,!1,null,null,null);f.options.__file="packages/input-number/src/input-number.vue";var p=f.exports;p.install=function(e){e.component(p.name,p)},t["default"]=p},2:function(e,t){e.exports=n("5924")},22:function(e,t){e.exports=n("12f2")},30:function(e,t,n){"use strict";var i=n(2);t["a"]={bind:function(e,t,n){var r=null,o=void 0,a=function(){return n.context[t.expression].apply()},s=function(){Date.now()-o<100&&a(),clearInterval(r),r=null};Object(i["on"])(e,"mousedown",(function(e){0===e.button&&(o=Date.now(),Object(i["once"])(document,"mouseup",s),clearInterval(r),r=setInterval(a,100))}))}}}})},e452:function(e,t,n){"use strict";n("99af"),n("e260"),n("d3b7"),n("ddb0"),t.__esModule=!0;var i=i||{};i.Utils=i.Utils||{},i.Utils.focusFirstDescendant=function(e){for(var t=0;t<e.childNodes.length;t++){var n=e.childNodes[t];if(i.Utils.attemptFocus(n)||i.Utils.focusFirstDescendant(n))return!0}return!1},i.Utils.focusLastDescendant=function(e){for(var t=e.childNodes.length-1;t>=0;t--){var n=e.childNodes[t];if(i.Utils.attemptFocus(n)||i.Utils.focusLastDescendant(n))return!0}return!1},i.Utils.attemptFocus=function(e){if(!i.Utils.isFocusable(e))return!1;i.Utils.IgnoreUtilFocusChanges=!0;try{e.focus()}catch(t){}return i.Utils.IgnoreUtilFocusChanges=!1,document.activeElement===e},i.Utils.isFocusable=function(e){if(e.tabIndex>0||0===e.tabIndex&&null!==e.getAttribute("tabIndex"))return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&"ignore"!==e.rel;case"INPUT":return"hidden"!==e.type&&"file"!==e.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},i.Utils.triggerEvent=function(e,t){var n=void 0;n=/^mouse|click/.test(t)?"MouseEvents":/^key/.test(t)?"KeyboardEvent":"HTMLEvents";for(var i=document.createEvent(n),r=arguments.length,o=Array(r>2?r-2:0),a=2;a<r;a++)o[a-2]=arguments[a];return i.initEvent.apply(i,[t].concat(o)),e.dispatchEvent?e.dispatchEvent(i):e.fireEvent("on"+t,i),e},i.Utils.keys={tab:9,enter:13,space:32,left:37,up:38,right:39,down:40,esc:27},t.default=i.Utils},e470:function(e,t,n){"use strict";var i=n("a1ff"),r=n.n(i);r.a},e501:function(e,t,n){"use strict";var i=n("74ec"),r=n.n(i);r.a},e507:function(e,t,n){var i=n("512c");i(i.S+i.F,"Object",{assign:n("072d")})},e538:function(e,t,n){var i=n("b622");t.f=i},e58c:function(e,t,n){"use strict";var i=n("fc6a"),r=n("a691"),o=n("50c4"),a=n("a640"),s=n("ae40"),l=Math.min,c=[].lastIndexOf,u=!!c&&1/[1].lastIndexOf(1,-0)<0,d=a("lastIndexOf"),h=s("indexOf",{ACCESSORS:!0,1:0}),f=u||!d||!h;e.exports=f?function(e){if(u)return c.apply(this,arguments)||0;var t=i(this),n=o(t.length),a=n-1;for(arguments.length>1&&(a=l(a,r(arguments[1]))),a<0&&(a=n+a);a>=0;a--)if(a in t&&t[a]===e)return a||0;return-1}:c},e62d:function(e,t,n){"use strict";t.__esModule=!0,t.default=function(){if(r.default.prototype.$isServer)return 0;if(void 0!==a)return a;var e=document.createElement("div");e.className="el-scrollbar__wrap",e.style.visibility="hidden",e.style.width="100px",e.style.position="absolute",e.style.top="-9999px",document.body.appendChild(e);var t=e.offsetWidth;e.style.overflow="scroll";var n=document.createElement("div");n.style.width="100%",e.appendChild(n);var i=n.offsetWidth;return e.parentNode.removeChild(e),a=t-i,a};var i=n("8bbf"),r=o(i);function o(e){return e&&e.__esModule?e:{default:e}}var a=void 0},e667:function(e,t){e.exports=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}}},e683:function(e,t,n){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},e6cf:function(e,t,n){"use strict";var i,r,o,a,s=n("23e7"),l=n("c430"),c=n("da84"),u=n("d066"),d=n("fea9"),h=n("6eeb"),f=n("e2cc"),p=n("d44e"),m=n("2626"),g=n("861d"),v=n("1c0b"),b=n("19aa"),y=n("c6b6"),w=n("8925"),x=n("2266"),_=n("1c7e"),k=n("4840"),C=n("2cf4").set,S=n("b575"),O=n("cdf9"),T=n("44de"),E=n("f069"),D=n("e667"),M=n("69f3"),A=n("94ca"),N=n("b622"),I=n("2d00"),L=N("species"),P="Promise",$=M.get,F=M.set,j=M.getterFor(P),z=d,B=c.TypeError,R=c.document,V=c.process,H=u("fetch"),W=E.f,q=W,U="process"==y(V),K=!!(R&&R.createEvent&&c.dispatchEvent),G="unhandledrejection",Y="rejectionhandled",X=0,Z=1,Q=2,J=1,ee=2,te=A(P,(function(){var e=w(z)!==String(z);if(!e){if(66===I)return!0;if(!U&&"function"!=typeof PromiseRejectionEvent)return!0}if(l&&!z.prototype["finally"])return!0;if(I>=51&&/native code/.test(z))return!1;var t=z.resolve(1),n=function(e){e((function(){}),(function(){}))},i=t.constructor={};return i[L]=n,!(t.then((function(){}))instanceof n)})),ne=te||!_((function(e){z.all(e)["catch"]((function(){}))})),ie=function(e){var t;return!(!g(e)||"function"!=typeof(t=e.then))&&t},re=function(e,t,n){if(!t.notified){t.notified=!0;var i=t.reactions;S((function(){var r=t.value,o=t.state==Z,a=0;while(i.length>a){var s,l,c,u=i[a++],d=o?u.ok:u.fail,h=u.resolve,f=u.reject,p=u.domain;try{d?(o||(t.rejection===ee&&le(e,t),t.rejection=J),!0===d?s=r:(p&&p.enter(),s=d(r),p&&(p.exit(),c=!0)),s===u.promise?f(B("Promise-chain cycle")):(l=ie(s))?l.call(s,h,f):h(s)):f(r)}catch(m){p&&!c&&p.exit(),f(m)}}t.reactions=[],t.notified=!1,n&&!t.rejection&&ae(e,t)}))}},oe=function(e,t,n){var i,r;K?(i=R.createEvent("Event"),i.promise=t,i.reason=n,i.initEvent(e,!1,!0),c.dispatchEvent(i)):i={promise:t,reason:n},(r=c["on"+e])?r(i):e===G&&T("Unhandled promise rejection",n)},ae=function(e,t){C.call(c,(function(){var n,i=t.value,r=se(t);if(r&&(n=D((function(){U?V.emit("unhandledRejection",i,e):oe(G,e,i)})),t.rejection=U||se(t)?ee:J,n.error))throw n.value}))},se=function(e){return e.rejection!==J&&!e.parent},le=function(e,t){C.call(c,(function(){U?V.emit("rejectionHandled",e):oe(Y,e,t.value)}))},ce=function(e,t,n,i){return function(r){e(t,n,r,i)}},ue=function(e,t,n,i){t.done||(t.done=!0,i&&(t=i),t.value=n,t.state=Q,re(e,t,!0))},de=function e(t,n,i,r){if(!n.done){n.done=!0,r&&(n=r);try{if(t===i)throw B("Promise can't be resolved itself");var a=ie(i);a?S((function(){var r={done:!1};try{a.call(i,ce(e,t,r,n),ce(ue,t,r,n))}catch(o){ue(t,r,o,n)}})):(n.value=i,n.state=Z,re(t,n,!1))}catch(o){ue(t,{done:!1},o,n)}}};te&&(z=function(e){b(this,z,P),v(e),i.call(this);var t=$(this);try{e(ce(de,this,t),ce(ue,this,t))}catch(n){ue(this,t,n)}},i=function(e){F(this,{type:P,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:X,value:void 0})},i.prototype=f(z.prototype,{then:function(e,t){var n=j(this),i=W(k(this,z));return i.ok="function"!=typeof e||e,i.fail="function"==typeof t&&t,i.domain=U?V.domain:void 0,n.parent=!0,n.reactions.push(i),n.state!=X&&re(this,n,!1),i.promise},catch:function(e){return this.then(void 0,e)}}),r=function(){var e=new i,t=$(e);this.promise=e,this.resolve=ce(de,e,t),this.reject=ce(ue,e,t)},E.f=W=function(e){return e===z||e===o?new r(e):q(e)},l||"function"!=typeof d||(a=d.prototype.then,h(d.prototype,"then",(function(e,t){var n=this;return new z((function(e,t){a.call(n,e,t)})).then(e,t)}),{unsafe:!0}),"function"==typeof H&&s({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return O(z,H.apply(c,arguments))}}))),s({global:!0,wrap:!0,forced:te},{Promise:z}),p(z,P,!1,!0),m(P),o=u(P),s({target:P,stat:!0,forced:te},{reject:function(e){var t=W(this);return t.reject.call(void 0,e),t.promise}}),s({target:P,stat:!0,forced:l||te},{resolve:function(e){return O(l&&this===o?z:this,e)}}),s({target:P,stat:!0,forced:ne},{all:function(e){var t=this,n=W(t),i=n.resolve,r=n.reject,o=D((function(){var n=v(t.resolve),o=[],a=0,s=1;x(e,(function(e){var l=a++,c=!1;o.push(void 0),s++,n.call(t,e).then((function(e){c||(c=!0,o[l]=e,--s||i(o))}),r)})),--s||i(o)}));return o.error&&r(o.value),n.promise},race:function(e){var t=this,n=W(t),i=n.reject,r=D((function(){var r=v(t.resolve);x(e,(function(e){r.call(t,e).then(n.resolve,i)}))}));return r.error&&i(r.value),n.promise}})},e772:function(e,t,n){n("a4d3"),n("e01a"),n("d28b"),n("944a"),n("99af"),n("c975"),n("e260"),n("45fc"),n("a434"),n("b0c0"),n("0c47"),n("23dc"),n("a9e3"),n("d3b7"),n("4d63"),n("ac1f"),n("25f0"),n("3ca3"),n("ddb0");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=53)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},3:function(e,t){e.exports=n("8122")},34:function(e,t,n){"use strict";var r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-dropdown__item",class:{selected:e.itemSelected,"is-disabled":e.disabled||e.groupDisabled||e.limitReached,hover:e.hover},on:{mouseenter:e.hoverItem,click:function(t){return t.stopPropagation(),e.selectOptionClick(t)}}},[e._t("default",[n("span",[e._v(e._s(e.currentLabel))])])],2)},o=[];r._withStripped=!0;var a=n(4),s=n.n(a),l=n(3),c="function"===typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return i(e)}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":i(e)},u={mixins:[s.a],name:"ElOption",componentName:"ElOption",inject:["select"],props:{value:{required:!0},label:[String,Number],created:Boolean,disabled:{type:Boolean,default:!1}},data:function(){return{index:-1,groupDisabled:!1,visible:!0,hitState:!1,hover:!1}},computed:{isObject:function(){return"[object object]"===Object.prototype.toString.call(this.value).toLowerCase()},currentLabel:function(){return this.label||(this.isObject?"":this.value)},currentValue:function(){return this.value||this.label||""},itemSelected:function(){return this.select.multiple?this.contains(this.select.value,this.value):this.isEqual(this.value,this.select.value)},limitReached:function(){return!!this.select.multiple&&!this.itemSelected&&(this.select.value||[]).length>=this.select.multipleLimit&&this.select.multipleLimit>0}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var n=this.select,i=n.remote,r=n.valueKey;if(!this.created&&!i){if(r&&"object"===("undefined"===typeof e?"undefined":c(e))&&"object"===("undefined"===typeof t?"undefined":c(t))&&e[r]===t[r])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var n=this.select.valueKey;return Object(l["getValueByPath"])(e,n)===Object(l["getValueByPath"])(t,n)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var n=this.select.valueKey;return e&&e.some((function(e){return Object(l["getValueByPath"])(e,n)===Object(l["getValueByPath"])(t,n)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(l["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select,t=e.selected,n=e.multiple,i=n?t:[t],r=this.select.cachedOptions.indexOf(this),o=i.indexOf(this);r>-1&&o<0&&this.select.cachedOptions.splice(r,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},d=u,h=n(0),f=Object(h["a"])(d,r,o,!1,null,null,null);f.options.__file="packages/select/src/option.vue",t["a"]=f.exports},4:function(e,t){e.exports=n("d010")},53:function(e,t,n){"use strict";n.r(t);var i=n(34);i["a"].install=function(e){e.component(i["a"].name,i["a"])},t["default"]=i["a"]}})},e893:function(e,t,n){var i=n("5135"),r=n("56ef"),o=n("06cf"),a=n("9bf2");e.exports=function(e,t){for(var n=r(t),s=a.f,l=o.f,c=0;c<n.length;c++){var u=n[c];i(e,u)||s(e,u,l(t,u))}}},e8b5:function(e,t,n){var i=n("c6b6");e.exports=Array.isArray||function(e){return"Array"==i(e)}},e91f:function(e,t,n){"use strict";var i=n("ebb5"),r=n("4d64").indexOf,o=i.aTypedArray,a=i.exportTypedArrayMethod;a("indexOf",(function(e){return r(o(this),e,arguments.length>1?arguments[1]:void 0)}))},e95a:function(e,t,n){var i=n("b622"),r=n("3f8c"),o=i("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||a[o]===e)}},e974:function(e,t,n){"use strict";n("c975"),n("b0c0"),n("a9e3"),n("ac1f"),n("1276"),t.__esModule=!0;var i=n("8bbf"),r=a(i),o=n("5128");function a(e){return e&&e.__esModule?e:{default:e}}var s=r.default.prototype.$isServer?function(){}:n("6167"),l=function(e){return e.stopPropagation()};t.default={props:{transformOrigin:{type:[Boolean,String],default:!0},placement:{type:String,default:"bottom"},boundariesPadding:{type:Number,default:5},reference:{},popper:{},offset:{default:0},value:Boolean,visibleArrow:Boolean,arrowOffset:{type:Number,default:35},appendToBody:{type:Boolean,default:!0},popperOptions:{type:Object,default:function(){return{gpuAcceleration:!1}}}},data:function(){return{showPopper:!1,currentPlacement:""}},watch:{value:{immediate:!0,handler:function(e){this.showPopper=e,this.$emit("input",e)}},showPopper:function(e){this.disabled||(e?this.updatePopper():this.destroyPopper(),this.$emit("input",e))}},methods:{createPopper:function(){var e=this;if(!this.$isServer&&(this.currentPlacement=this.currentPlacement||this.placement,/^(top|bottom|left|right)(-start|-end)?$/g.test(this.currentPlacement))){var t=this.popperOptions,n=this.popperElm=this.popperElm||this.popper||this.$refs.popper,i=this.referenceElm=this.referenceElm||this.reference||this.$refs.reference;!i&&this.$slots.reference&&this.$slots.reference[0]&&(i=this.referenceElm=this.$slots.reference[0].elm),n&&i&&(this.visibleArrow&&this.appendArrow(n),this.appendToBody&&document.body.appendChild(this.popperElm),this.popperJS&&this.popperJS.destroy&&this.popperJS.destroy(),t.placement=this.currentPlacement,t.offset=this.offset,t.arrowOffset=this.arrowOffset,this.popperJS=new s(i,n,t),this.popperJS.onCreate((function(t){e.$emit("created",e),e.resetTransformOrigin(),e.$nextTick(e.updatePopper)})),"function"===typeof t.onUpdate&&this.popperJS.onUpdate(t.onUpdate),this.popperJS._popper.style.zIndex=o.PopupManager.nextZIndex(),this.popperElm.addEventListener("click",l))}},updatePopper:function(){var e=this.popperJS;e?(e.update(),e._popper&&(e._popper.style.zIndex=o.PopupManager.nextZIndex())):this.createPopper()},doDestroy:function(e){!this.popperJS||this.showPopper&&!e||(this.popperJS.destroy(),this.popperJS=null)},destroyPopper:function(){this.popperJS&&this.resetTransformOrigin()},resetTransformOrigin:function(){if(this.transformOrigin){var e={top:"bottom",bottom:"top",left:"right",right:"left"},t=this.popperJS._popper.getAttribute("x-placement").split("-")[0],n=e[t];this.popperJS._popper.style.transformOrigin="string"===typeof this.transformOrigin?this.transformOrigin:["top","bottom"].indexOf(t)>-1?"center "+n:n+" center"}},appendArrow:function(e){var t=void 0;if(!this.appended){for(var n in this.appended=!0,e.attributes)if(/^_v-/.test(e.attributes[n].name)){t=e.attributes[n].name;break}var i=document.createElement("div");t&&i.setAttribute(t,""),i.setAttribute("x-arrow",""),i.className="popper__arrow",e.appendChild(i)}}},beforeDestroy:function(){this.doDestroy(!0),this.popperElm&&this.popperElm.parentNode===document.body&&(this.popperElm.removeEventListener("click",l),document.body.removeChild(this.popperElm))},deactivated:function(){this.$options.beforeDestroy[0].call(this)}}},ea34:function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},eaf3:function(e,t,n){"use strict";var i=n("a13b"),r=n.n(i);r.a},eb0c:function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";e.multiplexingMode=function(t){var n=Array.prototype.slice.call(arguments,1);function i(e,t,n,i){if("string"==typeof t){var r=e.indexOf(t,n);return i&&r>-1?r+t.length:r}var o=t.exec(n?e.slice(n):e);return o?o.index+n+(i?o[0].length:0):-1}return{startState:function(){return{outer:e.startState(t),innerActive:null,inner:null}},copyState:function(n){return{outer:e.copyState(t,n.outer),innerActive:n.innerActive,inner:n.innerActive&&e.copyState(n.innerActive.mode,n.inner)}},token:function(r,o){if(o.innerActive){var a=o.innerActive;if(c=r.string,!a.close&&r.sol())return o.innerActive=o.inner=null,this.token(r,o);if(h=a.close?i(c,a.close,r.pos,a.parseDelimiters):-1,h==r.pos&&!a.parseDelimiters)return r.match(a.close),o.innerActive=o.inner=null,a.delimStyle&&a.delimStyle+" "+a.delimStyle+"-close";h>-1&&(r.string=c.slice(0,h));var s=a.mode.token(r,o.inner);return h>-1&&(r.string=c),h==r.pos&&a.parseDelimiters&&(o.innerActive=o.inner=null),a.innerStyle&&(s=s?s+" "+a.innerStyle:a.innerStyle),s}for(var l=1/0,c=r.string,u=0;u<n.length;++u){var d=n[u],h=i(c,d.open,r.pos);if(h==r.pos){d.parseDelimiters||r.match(d.open),o.innerActive=d;var f=0;if(t.indent){var p=t.indent(o.outer,"","");p!==e.Pass&&(f=p)}return o.inner=e.startState(d.mode,f),d.delimStyle&&d.delimStyle+" "+d.delimStyle+"-open"}-1!=h&&h<l&&(l=h)}l!=1/0&&(r.string=c.slice(0,l));var m=t.token(r,o.outer);return l!=1/0&&(r.string=c),m},indent:function(n,i,r){var o=n.innerActive?n.innerActive.mode:t;return o.indent?o.indent(n.innerActive?n.inner:n.outer,i,r):e.Pass},blankLine:function(i){var r=i.innerActive?i.innerActive.mode:t;if(r.blankLine&&r.blankLine(i.innerActive?i.inner:i.outer),i.innerActive)"\n"===i.innerActive.close&&(i.innerActive=i.inner=null);else for(var o=0;o<n.length;++o){var a=n[o];"\n"===a.open&&(i.innerActive=a,i.inner=e.startState(a.mode,r.indent?r.indent(i.outer,"",""):0))}},electricChars:t.electricChars,innerMode:function(e){return e.inner?{state:e.inner,mode:e.innerActive.mode}:{state:e.outer,mode:t}}}}}))},eb50:function(e,t,n){"use strict";var i=n("63c1"),r=n.n(i);r.a},ebb5:function(e,t,n){"use strict";var i,r=n("a981"),o=n("83ab"),a=n("da84"),s=n("861d"),l=n("5135"),c=n("f5df"),u=n("9112"),d=n("6eeb"),h=n("9bf2").f,f=n("e163"),p=n("d2bb"),m=n("b622"),g=n("90e3"),v=a.Int8Array,b=v&&v.prototype,y=a.Uint8ClampedArray,w=y&&y.prototype,x=v&&f(v),_=b&&f(b),k=Object.prototype,C=k.isPrototypeOf,S=m("toStringTag"),O=g("TYPED_ARRAY_TAG"),T=r&&!!p&&"Opera"!==c(a.opera),E=!1,D={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},M=function(e){var t=c(e);return"DataView"===t||l(D,t)},A=function(e){return s(e)&&l(D,c(e))},N=function(e){if(A(e))return e;throw TypeError("Target is not a typed array")},I=function(e){if(p){if(C.call(x,e))return e}else for(var t in D)if(l(D,i)){var n=a[t];if(n&&(e===n||C.call(n,e)))return e}throw TypeError("Target is not a typed array constructor")},L=function(e,t,n){if(o){if(n)for(var i in D){var r=a[i];r&&l(r.prototype,e)&&delete r.prototype[e]}_[e]&&!n||d(_,e,n?t:T&&b[e]||t)}},P=function(e,t,n){var i,r;if(o){if(p){if(n)for(i in D)r=a[i],r&&l(r,e)&&delete r[e];if(x[e]&&!n)return;try{return d(x,e,n?t:T&&v[e]||t)}catch(s){}}for(i in D)r=a[i],!r||r[e]&&!n||d(r,e,t)}};for(i in D)a[i]||(T=!1);if((!T||"function"!=typeof x||x===Function.prototype)&&(x=function(){throw TypeError("Incorrect invocation")},T))for(i in D)a[i]&&p(a[i],x);if((!T||!_||_===k)&&(_=x.prototype,T))for(i in D)a[i]&&p(a[i].prototype,_);if(T&&f(w)!==_&&p(w,_),o&&!l(_,S))for(i in E=!0,h(_,S,{get:function(){return s(this)?this[O]:void 0}}),D)a[i]&&u(a[i],O,i);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:T,TYPED_ARRAY_TAG:E&&O,aTypedArray:N,aTypedArrayConstructor:I,exportTypedArrayMethod:L,exportTypedArrayStaticMethod:P,isView:M,isTypedArray:A,TypedArray:x,TypedArrayPrototype:_}},ebee:function(e,t,n){},eedf:function(e,t,n){n("a4d3"),n("e01a"),n("944a"),n("99af"),n("b0c0"),n("0c47"),n("23dc"),n("d3b7");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=97)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},97:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("button",{staticClass:"el-button",class:[e.type?"el-button--"+e.type:"",e.buttonSize?"el-button--"+e.buttonSize:"",{"is-disabled":e.buttonDisabled,"is-loading":e.loading,"is-plain":e.plain,"is-round":e.round,"is-circle":e.circle}],attrs:{disabled:e.buttonDisabled||e.loading,autofocus:e.autofocus,type:e.nativeType},on:{click:e.handleClick}},[e.loading?n("i",{staticClass:"el-icon-loading"}):e._e(),e.icon&&!e.loading?n("i",{class:e.icon}):e._e(),e.$slots.default?n("span",[e._t("default")],2):e._e()])},r=[];i._withStripped=!0;var o={name:"ElButton",inject:{elForm:{default:""},elFormItem:{default:""}},props:{type:{type:String,default:"default"},size:String,icon:{type:String,default:""},nativeType:{type:String,default:"button"},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},buttonSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},buttonDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},methods:{handleClick:function(e){this.$emit("click",e)}}},a=o,s=n(0),l=Object(s["a"])(a,i,r,!1,null,null,null);l.options.__file="packages/button/src/button.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)},t["default"]=c}})},ef08:function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},efed:function(e,t,n){},f008:function(e,t,n){},f040:function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";e.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-encrypted","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["asc","pgp","sig"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h","ino"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp","cs"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists\.txt$/},{name:"CoffeeScript",mimes:["application/vnd.coffeescript","text/coffeescript","text/x-coffeescript"],mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded Javascript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Esper",mime:"text/x-esper",mode:"sql"},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90","f95"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history)\.md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"],file:/^Jenkinsfile$/},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm","handlebars","hbs"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Pug",mime:"text/x-pug",mode:"pug",ext:["jade","pug"],alias:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"text/jinja2",mode:"jinja2",ext:["j2","jinja","jinja2"]},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb","wl","wls"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"mbox",mime:"application/mbox",mode:"mbox",ext:["mbox"]},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mimes:["application/n-triples","application/n-quads","text/n-triples"],mode:"ntriples",ext:["nt","nq"]},{name:"Objective-C",mime:"text/x-objectivec",mode:"clike",ext:["m"],alias:["objective-c","objc"]},{name:"Objective-C++",mime:"text/x-objectivec++",mode:"clike",ext:["mm"],alias:["objective-c++","objc++"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mimes:["text/x-php","application/x-httpd-php","application/x-httpd-php-open"],mode:"php",ext:["php","php3","php4","php5","php7","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"PostgreSQL",mime:"text/x-pgsql",mode:"sql"},{name:"PowerShell",mime:"application/x-powershell",mode:"powershell",ext:["ps1","psd1","psm1"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["BUILD","bzl","py","pyw"],file:/^(BUCK|BUILD)$/},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r","R"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"SAS",mime:"text/x-sas",mode:"sas",ext:["sas"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mimes:["text/x-sh","application/x-sh"],mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"SML",mime:"text/x-sml",mode:"mllike",ext:["sml","sig","fun","smackspec"]},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"SQLite",mime:"text/x-sqlite",mode:"sql"},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Stylus",mime:"text/x-styl",mode:"stylus",ext:["styl"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx","tex"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v","sv","svh"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"TypeScript-JSX",mime:"text/typescript-jsx",mode:"jsx",ext:["tsx"],alias:["tsx"]},{name:"Twig",mime:"text/x-twig",mode:"twig"},{name:"Web IDL",mime:"text/x-webidl",mode:"webidl",ext:["webidl"]},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"Vue.js Component",mimes:["script/x-vue","text/x-vue"],mode:"vue",ext:["vue"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd","svg"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"Yacas",mime:"text/x-yacas",mode:"yacas",ext:["ys"]},{name:"YAML",mimes:["text/x-yaml","text/yaml"],mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]},{name:"WebAssembly",mime:"text/webassembly",mode:"wast",ext:["wat","wast"]}];for(var t=0;t<e.modeInfo.length;t++){var n=e.modeInfo[t];n.mimes&&(n.mime=n.mimes[0])}e.findModeByMIME=function(t){t=t.toLowerCase();for(var n=0;n<e.modeInfo.length;n++){var i=e.modeInfo[n];if(i.mime==t)return i;if(i.mimes)for(var r=0;r<i.mimes.length;r++)if(i.mimes[r]==t)return i}return/\+xml$/.test(t)?e.findModeByMIME("application/xml"):/\+json$/.test(t)?e.findModeByMIME("application/json"):void 0},e.findModeByExtension=function(t){t=t.toLowerCase();for(var n=0;n<e.modeInfo.length;n++){var i=e.modeInfo[n];if(i.ext)for(var r=0;r<i.ext.length;r++)if(i.ext[r]==t)return i}},e.findModeByFileName=function(t){for(var n=0;n<e.modeInfo.length;n++){var i=e.modeInfo[n];if(i.file&&i.file.test(t))return i}var r=t.lastIndexOf("."),o=r>-1&&t.substring(r+1,t.length);if(o)return e.findModeByExtension(o)},e.findModeByName=function(t){t=t.toLowerCase();for(var n=0;n<e.modeInfo.length;n++){var i=e.modeInfo[n];if(i.name.toLowerCase()==t)return i;if(i.alias)for(var r=0;r<i.alias.length;r++)if(i.alias[r].toLowerCase()==t)return i}}}))},f069:function(e,t,n){"use strict";var i=n("1c0b"),r=function(e){var t,n;this.promise=new e((function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i})),this.resolve=i(t),this.reject=i(n)};e.exports.f=function(e){return new r(e)}},f0d9:function(e,t,n){"use strict";t.__esModule=!0,t.default={el:{colorpicker:{confirm:"确定",clear:"清空"},datepicker:{now:"此刻",today:"今天",cancel:"取消",clear:"清空",confirm:"确定",selectDate:"选择日期",selectTime:"选择时间",startDate:"开始日期",startTime:"开始时间",endDate:"结束日期",endTime:"结束时间",prevYear:"前一年",nextYear:"后一年",prevMonth:"上个月",nextMonth:"下个月",year:"年",month1:"1 月",month2:"2 月",month3:"3 月",month4:"4 月",month5:"5 月",month6:"6 月",month7:"7 月",month8:"8 月",month9:"9 月",month10:"10 月",month11:"11 月",month12:"12 月",weeks:{sun:"日",mon:"一",tue:"二",wed:"三",thu:"四",fri:"五",sat:"六"},months:{jan:"一月",feb:"二月",mar:"三月",apr:"四月",may:"五月",jun:"六月",jul:"七月",aug:"八月",sep:"九月",oct:"十月",nov:"十一月",dec:"十二月"}},select:{loading:"加载中",noMatch:"无匹配数据",noData:"无数据",placeholder:"请选择"},cascader:{noMatch:"无匹配数据",loading:"加载中",placeholder:"请选择",noData:"暂无数据"},pagination:{goto:"前往",pagesize:"条/页",total:"共 {total} 条",pageClassifier:"页"},messagebox:{title:"提示",confirm:"确定",cancel:"取消",error:"输入的数据不合法!"},upload:{deleteTip:"按 delete 键可删除",delete:"删除",preview:"查看图片",continue:"继续上传"},table:{emptyText:"暂无数据",confirmFilter:"筛选",resetFilter:"重置",clearFilter:"全部",sumText:"合计"},tree:{emptyText:"暂无数据"},transfer:{noMatch:"无匹配数据",noData:"无数据",titles:["列表 1","列表 2"],filterPlaceholder:"请输入搜索内容",noCheckedFormat:"共 {total} 项",hasCheckedFormat:"已选 {checked}/{total} 项"},image:{error:"加载失败"},pageHeader:{title:"返回"},popconfirm:{confirmButtonText:"确定",cancelButtonText:"取消"}}}},f183:function(e,t,n){var i=n("d012"),r=n("861d"),o=n("5135"),a=n("9bf2").f,s=n("90e3"),l=n("bb2f"),c=s("meta"),u=0,d=Object.isExtensible||function(){return!0},h=function(e){a(e,c,{value:{objectID:"O"+ ++u,weakData:{}}})},f=function(e,t){if(!r(e))return"symbol"==_typeof2(e)?e:("string"==typeof e?"S":"P")+e;if(!o(e,c)){if(!d(e))return"F";if(!t)return"E";h(e)}return e[c].objectID},p=function(e,t){if(!o(e,c)){if(!d(e))return!0;if(!t)return!1;h(e)}return e[c].weakData},m=function(e){return l&&g.REQUIRED&&d(e)&&!o(e,c)&&h(e),e},g=e.exports={REQUIRED:!1,fastKey:f,getWeakData:p,onFreeze:m};i[c]=!0},f3a7:function(e,t,n){var i,r;n("99af"),n("4de4"),n("7db0"),n("c975"),n("a15b"),n("d81d"),n("fb6a"),n("a434"),n("b0c0"),n("a9e3"),n("d3b7"),n("4d63"),n("ac1f"),n("25f0"),n("466d"),n("5319"),n("841c"),n("1276"),n("18a5");var o=n("7037");(function(a,s){"object"===o(t)&&"undefined"!==typeof e?e.exports=s():(i=s,r="function"===typeof i?i.call(t,n,t,e):i,void 0===r||(e.exports=r))})(0,(function(){"use strict";var e=navigator.userAgent,t=navigator.platform,n=/gecko\/\d/i.test(e),i=/MSIE \d/.test(e),r=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),a=/Edge\/(\d+)/.exec(e),s=i||r||a,l=s&&(i?document.documentMode||6:+(a||r)[1]),c=!a&&/WebKit\//.test(e),u=c&&/Qt\/\d+\.\d+/.test(e),d=!a&&/Chrome\//.test(e),h=/Opera\//.test(e),f=/Apple Computer/.test(navigator.vendor),p=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),m=/PhantomJS/.test(e),g=!a&&/AppleWebKit/.test(e)&&(/Mobile\/\w+/.test(e)||navigator.maxTouchPoints>2),v=/Android/.test(e),b=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),y=g||/Mac/.test(t),w=/\bCrOS\b/.test(e),x=/win/i.test(t),_=h&&e.match(/Version\/(\d*\.\d*)/);_&&(_=Number(_[1])),_&&_>=15&&(h=!1,c=!0);var k=y&&(u||h&&(null==_||_<12.11)),C=n||s&&l>=9;function S(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var O,T=function(e,t){var n=e.className,i=S(t).exec(n);if(i){var r=n.slice(i.index+i[0].length);e.className=n.slice(0,i.index)+(r?i[1]+r:"")}};function E(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function D(e,t){return E(e).appendChild(t)}function M(e,t,n,i){var r=document.createElement(e);if(n&&(r.className=n),i&&(r.style.cssText=i),"string"==typeof t)r.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)r.appendChild(t[o]);return r}function A(e,t,n,i){var r=M(e,t,n,i);return r.setAttribute("role","presentation"),r}function N(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function I(){var e;try{e=document.activeElement}catch(t){e=document.body||null}while(e&&e.shadowRoot&&e.shadowRoot.activeElement)e=e.shadowRoot.activeElement;return e}function L(e,t){var n=e.className;S(t).test(n)||(e.className+=(n?" ":"")+t)}function P(e,t){for(var n=e.split(" "),i=0;i<n.length;i++)n[i]&&!S(n[i]).test(t)&&(t+=" "+n[i]);return t}O=document.createRange?function(e,t,n,i){var r=document.createRange();return r.setEnd(i||e,n),r.setStart(e,t),r}:function(e,t,n){var i=document.body.createTextRange();try{i.moveToElementText(e.parentNode)}catch(r){return i}return i.collapse(!0),i.moveEnd("character",n),i.moveStart("character",t),i};var $=function(e){e.select()};function F(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function j(e,t,n){for(var i in t||(t={}),e)!e.hasOwnProperty(i)||!1===n&&t.hasOwnProperty(i)||(t[i]=e[i]);return t}function z(e,t,n,i,r){null==t&&(t=e.search(/[^\s\u00a0]/),-1==t&&(t=e.length));for(var o=i||0,a=r||0;;){var s=e.indexOf("\t",o);if(s<0||s>=t)return a+(t-o);a+=s-o,a+=n-a%n,o=s+1}}g?$=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:s&&($=function(e){try{e.select()}catch(t){}});var B=function(){this.id=null,this.f=null,this.time=0,this.handler=F(this.onTimeout,this)};function R(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}B.prototype.onTimeout=function(e){e.id=0,e.time<=+new Date?e.f():setTimeout(e.handler,e.time-+new Date)},B.prototype.set=function(e,t){this.f=t;var n=+new Date+e;(!this.id||n<this.time)&&(clearTimeout(this.id),this.id=setTimeout(this.handler,e),this.time=n)};var V=50,H={toString:function(){return"CodeMirror.Pass"}},W={scroll:!1},q={origin:"*mouse"},U={origin:"+move"};function K(e,t,n){for(var i=0,r=0;;){var o=e.indexOf("\t",i);-1==o&&(o=e.length);var a=o-i;if(o==e.length||r+a>=t)return i+Math.min(a,t-r);if(r+=o-i,r+=n-r%n,i=o+1,r>=t)return i}}var G=[""];function Y(e){while(G.length<=e)G.push(X(G)+" ");return G[e]}function X(e){return e[e.length-1]}function Z(e,t){for(var n=[],i=0;i<e.length;i++)n[i]=t(e[i],i);return n}function Q(e,t,n){var i=0,r=n(t);while(i<e.length&&n(e[i])<=r)i++;e.splice(i,0,t)}function J(){}function ee(e,t){var n;return Object.create?n=Object.create(e):(J.prototype=e,n=new J),t&&j(t,n),n}var te=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;function ne(e){return/\w/.test(e)||e>"€"&&(e.toUpperCase()!=e.toLowerCase()||te.test(e))}function ie(e,t){return t?!!(t.source.indexOf("\\w")>-1&&ne(e))||t.test(e):ne(e)}function re(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var oe=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ae(e){return e.charCodeAt(0)>=768&&oe.test(e)}function se(e,t,n){while((n<0?t>0:t<e.length)&&ae(e.charAt(t)))t+=n;return t}function le(e,t,n){for(var i=t>n?-1:1;;){if(t==n)return t;var r=(t+n)/2,o=i<0?Math.ceil(r):Math.floor(r);if(o==t)return e(o)?t:n;e(o)?n=o:t=o+i}}function ce(e,t,n,i){if(!e)return i(t,n,"ltr",0);for(var r=!1,o=0;o<e.length;++o){var a=e[o];(a.from<n&&a.to>t||t==n&&a.to==t)&&(i(Math.max(a.from,t),Math.min(a.to,n),1==a.level?"rtl":"ltr",o),r=!0)}r||i(t,n,"ltr")}var ue=null;function de(e,t,n){var i;ue=null;for(var r=0;r<e.length;++r){var o=e[r];if(o.from<t&&o.to>t)return r;o.to==t&&(o.from!=o.to&&"before"==n?i=r:ue=r),o.from==t&&(o.from!=o.to&&"before"!=n?i=r:ue=r)}return null!=i?i:ue}var he=function(){var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",t="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function n(n){return n<=247?e.charAt(n):1424<=n&&n<=1524?"R":1536<=n&&n<=1785?t.charAt(n-1536):1774<=n&&n<=2220?"r":8192<=n&&n<=8203?"w":8204==n?"b":"L"}var i=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,r=/[stwN]/,o=/[LRr]/,a=/[Lb1n]/,s=/[1n]/;function l(e,t,n){this.level=e,this.from=t,this.to=n}return function(e,t){var c="ltr"==t?"L":"R";if(0==e.length||"ltr"==t&&!i.test(e))return!1;for(var u=e.length,d=[],h=0;h<u;++h)d.push(n(e.charCodeAt(h)));for(var f=0,p=c;f<u;++f){var m=d[f];"m"==m?d[f]=p:p=m}for(var g=0,v=c;g<u;++g){var b=d[g];"1"==b&&"r"==v?d[g]="n":o.test(b)&&(v=b,"r"==b&&(d[g]="R"))}for(var y=1,w=d[0];y<u-1;++y){var x=d[y];"+"==x&&"1"==w&&"1"==d[y+1]?d[y]="1":","!=x||w!=d[y+1]||"1"!=w&&"n"!=w||(d[y]=w),w=x}for(var _=0;_<u;++_){var k=d[_];if(","==k)d[_]="N";else if("%"==k){var C=void 0;for(C=_+1;C<u&&"%"==d[C];++C);for(var S=_&&"!"==d[_-1]||C<u&&"1"==d[C]?"1":"N",O=_;O<C;++O)d[O]=S;_=C-1}}for(var T=0,E=c;T<u;++T){var D=d[T];"L"==E&&"1"==D?d[T]="L":o.test(D)&&(E=D)}for(var M=0;M<u;++M)if(r.test(d[M])){var A=void 0;for(A=M+1;A<u&&r.test(d[A]);++A);for(var N="L"==(M?d[M-1]:c),I="L"==(A<u?d[A]:c),L=N==I?N?"L":"R":c,P=M;P<A;++P)d[P]=L;M=A-1}for(var $,F=[],j=0;j<u;)if(a.test(d[j])){var z=j;for(++j;j<u&&a.test(d[j]);++j);F.push(new l(0,z,j))}else{var B=j,R=F.length,V="rtl"==t?1:0;for(++j;j<u&&"L"!=d[j];++j);for(var H=B;H<j;)if(s.test(d[H])){B<H&&(F.splice(R,0,new l(1,B,H)),R+=V);var W=H;for(++H;H<j&&s.test(d[H]);++H);F.splice(R,0,new l(2,W,H)),R+=V,B=H}else++H;B<j&&F.splice(R,0,new l(1,B,j))}return"ltr"==t&&(1==F[0].level&&($=e.match(/^\s+/))&&(F[0].from=$[0].length,F.unshift(new l(0,0,$[0].length))),1==X(F).level&&($=e.match(/\s+$/))&&(X(F).to-=$[0].length,F.push(new l(0,u-$[0].length,u)))),"rtl"==t?F.reverse():F}}();function fe(e,t){var n=e.order;return null==n&&(n=e.order=he(e.text,t)),n}var pe=[],me=function(e,t,n){if(e.addEventListener)e.addEventListener(t,n,!1);else if(e.attachEvent)e.attachEvent("on"+t,n);else{var i=e._handlers||(e._handlers={});i[t]=(i[t]||pe).concat(n)}};function ge(e,t){return e._handlers&&e._handlers[t]||pe}function ve(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1);else if(e.detachEvent)e.detachEvent("on"+t,n);else{var i=e._handlers,r=i&&i[t];if(r){var o=R(r,n);o>-1&&(i[t]=r.slice(0,o).concat(r.slice(o+1)))}}}function be(e,t){var n=ge(e,t);if(n.length)for(var i=Array.prototype.slice.call(arguments,2),r=0;r<n.length;++r)n[r].apply(null,i)}function ye(e,t,n){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),be(e,n||t.type,e,t),Se(t)||t.codemirrorIgnore}function we(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),i=0;i<t.length;++i)-1==R(n,t[i])&&n.push(t[i])}function xe(e,t){return ge(e,t).length>0}function _e(e){e.prototype.on=function(e,t){me(this,e,t)},e.prototype.off=function(e,t){ve(this,e,t)}}function ke(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function Ce(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Se(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Oe(e){ke(e),Ce(e)}function Te(e){return e.target||e.srcElement}function Ee(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),y&&e.ctrlKey&&1==t&&(t=3),t}var De,Me,Ae=function(){if(s&&l<9)return!1;var e=M("div");return"draggable"in e||"dragDrop"in e}();function Ne(e){if(null==De){var t=M("span","​");D(e,M("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(De=t.offsetWidth<=1&&t.offsetHeight>2&&!(s&&l<8))}var n=De?M("span","​"):M("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function Ie(e){if(null!=Me)return Me;var t=D(e,document.createTextNode("AخA")),n=O(t,0,1).getBoundingClientRect(),i=O(t,1,2).getBoundingClientRect();return E(e),!(!n||n.left==n.right)&&(Me=i.right-n.right<3)}var Le=3!="\n\nb".split(/\n/).length?function(e){var t=0,n=[],i=e.length;while(t<=i){var r=e.indexOf("\n",t);-1==r&&(r=e.length);var o=e.slice(t,"\r"==e.charAt(r-1)?r-1:r),a=o.indexOf("\r");-1!=a?(n.push(o.slice(0,a)),t+=a+1):(n.push(o),t=r+1)}return n}:function(e){return e.split(/\r\n?|\n/)},Pe=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(t){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(n){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},$e=function(){var e=M("div");return"oncopy"in e||(e.setAttribute("oncopy","return;"),"function"==typeof e.oncopy)}(),Fe=null;function je(e){if(null!=Fe)return Fe;var t=D(e,M("span","x")),n=t.getBoundingClientRect(),i=O(t,0,1).getBoundingClientRect();return Fe=Math.abs(n.left-i.left)>1}var ze={},Be={};function Re(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),ze[e]=t}function Ve(e,t){Be[e]=t}function He(e){if("string"==typeof e&&Be.hasOwnProperty(e))e=Be[e];else if(e&&"string"==typeof e.name&&Be.hasOwnProperty(e.name)){var t=Be[e.name];"string"==typeof t&&(t={name:t}),e=ee(t,e),e.name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return He("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return He("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function We(e,t){t=He(t);var n=ze[t.name];if(!n)return We(e,"text/plain");var i=n(e,t);if(qe.hasOwnProperty(t.name)){var r=qe[t.name];for(var o in r)r.hasOwnProperty(o)&&(i.hasOwnProperty(o)&&(i["_"+o]=i[o]),i[o]=r[o])}if(i.name=t.name,t.helperType&&(i.helperType=t.helperType),t.modeProps)for(var a in t.modeProps)i[a]=t.modeProps[a];return i}var qe={};function Ue(e,t){var n=qe.hasOwnProperty(e)?qe[e]:qe[e]={};j(t,n)}function Ke(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var i in t){var r=t[i];r instanceof Array&&(r=r.concat([])),n[i]=r}return n}function Ge(e,t){var n;while(e.innerMode){if(n=e.innerMode(t),!n||n.mode==e)break;t=n.state,e=n.mode}return n||{mode:e,state:t}}function Ye(e,t,n){return!e.startState||e.startState(t,n)}var Xe=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};function Ze(e,t){if(t-=e.first,t<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");var n=e;while(!n.lines)for(var i=0;;++i){var r=n.children[i],o=r.chunkSize();if(t<o){n=r;break}t-=o}return n.lines[t]}function Qe(e,t,n){var i=[],r=t.line;return e.iter(t.line,n.line+1,(function(e){var o=e.text;r==n.line&&(o=o.slice(0,n.ch)),r==t.line&&(o=o.slice(t.ch)),i.push(o),++r})),i}function Je(e,t,n){var i=[];return e.iter(t,n,(function(e){i.push(e.text)})),i}function et(e,t){var n=t-e.height;if(n)for(var i=e;i;i=i.parent)i.height+=n}function tt(e){if(null==e.parent)return null;for(var t=e.parent,n=R(t.lines,e),i=t.parent;i;t=i,i=i.parent)for(var r=0;;++r){if(i.children[r]==t)break;n+=i.children[r].chunkSize()}return n+t.first}function nt(e,t){var n=e.first;e:do{for(var i=0;i<e.children.length;++i){var r=e.children[i],o=r.height;if(t<o){e=r;continue e}t-=o,n+=r.chunkSize()}return n}while(!e.lines);for(var a=0;a<e.lines.length;++a){var s=e.lines[a],l=s.height;if(t<l)break;t-=l}return n+a}function it(e,t){return t>=e.first&&t<e.first+e.size}function rt(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function ot(e,t,n){if(void 0===n&&(n=null),!(this instanceof ot))return new ot(e,t,n);this.line=e,this.ch=t,this.sticky=n}function at(e,t){return e.line-t.line||e.ch-t.ch}function st(e,t){return e.sticky==t.sticky&&0==at(e,t)}function lt(e){return ot(e.line,e.ch)}function ct(e,t){return at(e,t)<0?t:e}function ut(e,t){return at(e,t)<0?e:t}function dt(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function ht(e,t){if(t.line<e.first)return ot(e.first,0);var n=e.first+e.size-1;return t.line>n?ot(n,Ze(e,n).text.length):ft(t,Ze(e,t.line).text.length)}function ft(e,t){var n=e.ch;return null==n||n>t?ot(e.line,t):n<0?ot(e.line,0):e}function pt(e,t){for(var n=[],i=0;i<t.length;i++)n[i]=ht(e,t[i]);return n}Xe.prototype.eol=function(){return this.pos>=this.string.length},Xe.prototype.sol=function(){return this.pos==this.lineStart},Xe.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Xe.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},Xe.prototype.eat=function(e){var t,n=this.string.charAt(this.pos);if(t="string"==typeof e?n==e:n&&(e.test?e.test(n):e(n)),t)return++this.pos,n},Xe.prototype.eatWhile=function(e){var t=this.pos;while(this.eat(e));return this.pos>t},Xe.prototype.eatSpace=function(){var e=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>e},Xe.prototype.skipToEnd=function(){this.pos=this.string.length},Xe.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Xe.prototype.backUp=function(e){this.pos-=e},Xe.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=z(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?z(this.string,this.lineStart,this.tabSize):0)},Xe.prototype.indentation=function(){return z(this.string,null,this.tabSize)-(this.lineStart?z(this.string,this.lineStart,this.tabSize):0)},Xe.prototype.match=function(e,t,n){if("string"!=typeof e){var i=this.string.slice(this.pos).match(e);return i&&i.index>0?null:(i&&!1!==t&&(this.pos+=i[0].length),i)}var r=function(e){return n?e.toLowerCase():e},o=this.string.substr(this.pos,e.length);if(r(o)==r(e))return!1!==t&&(this.pos+=e.length),!0},Xe.prototype.current=function(){return this.string.slice(this.start,this.pos)},Xe.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Xe.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Xe.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var mt=function(e,t){this.state=e,this.lookAhead=t},gt=function(e,t,n,i){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=i||0,this.baseTokens=null,this.baseTokenPos=1};function vt(e,t,n,i){var r=[e.state.modeGen],o={};Ot(e,t.text,e.doc.mode,n,(function(e,t){return r.push(e,t)}),o,i);for(var a=n.state,s=function(i){n.baseTokens=r;var s=e.state.overlays[i],l=1,c=0;n.state=!0,Ot(e,t.text,s.mode,n,(function(e,t){var n=l;while(c<e){var i=r[l];i>e&&r.splice(l,1,e,r[l+1],i),l+=2,c=Math.min(e,i)}if(t)if(s.opaque)r.splice(n,l-n,e,"overlay "+t),l=n+2;else for(;n<l;n+=2){var o=r[n+1];r[n+1]=(o?o+" ":"")+"overlay "+t}}),o),n.state=a,n.baseTokens=null,n.baseTokenPos=1},l=0;l<e.state.overlays.length;++l)s(l);return{styles:r,classes:o.bgClass||o.textClass?o:null}}function bt(e,t,n){if(!t.styles||t.styles[0]!=e.state.modeGen){var i=yt(e,tt(t)),r=t.text.length>e.options.maxHighlightLength&&Ke(e.doc.mode,i.state),o=vt(e,t,i);r&&(i.state=r),t.stateAfter=i.save(!r),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function yt(e,t,n){var i=e.doc,r=e.display;if(!i.mode.startState)return new gt(i,!0,t);var o=Tt(e,t,n),a=o>i.first&&Ze(i,o-1).stateAfter,s=a?gt.fromSaved(i,a,o):new gt(i,Ye(i.mode),o);return i.iter(o,t,(function(n){wt(e,n.text,s);var i=s.line;n.stateAfter=i==t-1||i%5==0||i>=r.viewFrom&&i<r.viewTo?s.save():null,s.nextLine()})),n&&(i.modeFrontier=s.line),s}function wt(e,t,n,i){var r=e.doc.mode,o=new Xe(t,e.options.tabSize,n);o.start=o.pos=i||0,""==t&&xt(r,n.state);while(!o.eol())_t(r,o,n.state),o.start=o.pos}function xt(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var n=Ge(e,t);return n.mode.blankLine?n.mode.blankLine(n.state):void 0}}function _t(e,t,n,i){for(var r=0;r<10;r++){i&&(i[0]=Ge(e,n).mode);var o=e.token(t,n);if(t.pos>t.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}gt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},gt.prototype.baseToken=function(e){if(!this.baseTokens)return null;while(this.baseTokens[this.baseTokenPos]<=e)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},gt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},gt.fromSaved=function(e,t,n){return t instanceof mt?new gt(e,Ke(e.mode,t.state),n,t.lookAhead):new gt(e,Ke(e.mode,t),n)},gt.prototype.save=function(e){var t=!1!==e?Ke(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new mt(t,this.maxLookAhead):t};var kt=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function Ct(e,t,n,i){var r,o=e.doc,a=o.mode;t=ht(o,t);var s,l=Ze(o,t.line),c=yt(e,t.line,n),u=new Xe(l.text,e.options.tabSize,c);i&&(s=[]);while((i||u.pos<t.ch)&&!u.eol())u.start=u.pos,r=_t(a,u,c.state),i&&s.push(new kt(u,r,Ke(o.mode,c.state)));return i?s:new kt(u,r,c.state)}function St(e,t){if(e)for(;;){var n=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!n)break;e=e.slice(0,n.index)+e.slice(n.index+n[0].length);var i=n[1]?"bgClass":"textClass";null==t[i]?t[i]=n[2]:new RegExp("(?:^|\\s)"+n[2]+"(?:$|\\s)").test(t[i])||(t[i]+=" "+n[2])}return e}function Ot(e,t,n,i,r,o,a){var s=n.flattenSpans;null==s&&(s=e.options.flattenSpans);var l,c=0,u=null,d=new Xe(t,e.options.tabSize,i),h=e.options.addModeClass&&[null];""==t&&St(xt(n,i.state),o);while(!d.eol()){if(d.pos>e.options.maxHighlightLength?(s=!1,a&&wt(e,t,i,d.pos),d.pos=t.length,l=null):l=St(_t(n,d,i.state,h),o),h){var f=h[0].name;f&&(l="m-"+(l?f+" "+l:f))}if(!s||u!=l){while(c<d.start)c=Math.min(d.start,c+5e3),r(c,u);u=l}d.start=d.pos}while(c<d.pos){var p=Math.min(d.pos,c+5e3);r(p,u),c=p}}function Tt(e,t,n){for(var i,r,o=e.doc,a=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>a;--s){if(s<=o.first)return o.first;var l=Ze(o,s-1),c=l.stateAfter;if(c&&(!n||s+(c instanceof mt?c.lookAhead:0)<=o.modeFrontier))return s;var u=z(l.text,null,e.options.tabSize);(null==r||i>u)&&(r=s-1,i=u)}return r}function Et(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var n=e.first,i=t-1;i>n;i--){var r=Ze(e,i).stateAfter;if(r&&(!(r instanceof mt)||i+r.lookAhead<t)){n=i+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,n)}}var Dt=!1,Mt=!1;function At(){Dt=!0}function Nt(){Mt=!0}function It(e,t,n){this.marker=e,this.from=t,this.to=n}function Lt(e,t){if(e)for(var n=0;n<e.length;++n){var i=e[n];if(i.marker==t)return i}}function Pt(e,t){for(var n,i=0;i<e.length;++i)e[i]!=t&&(n||(n=[])).push(e[i]);return n}function $t(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}function Ft(e,t,n){var i;if(e)for(var r=0;r<e.length;++r){var o=e[r],a=o.marker,s=null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t);if(s||o.from==t&&"bookmark"==a.type&&(!n||!o.marker.insertLeft)){var l=null==o.to||(a.inclusiveRight?o.to>=t:o.to>t);(i||(i=[])).push(new It(a,o.from,l?null:o.to))}}return i}function jt(e,t,n){var i;if(e)for(var r=0;r<e.length;++r){var o=e[r],a=o.marker,s=null==o.to||(a.inclusiveRight?o.to>=t:o.to>t);if(s||o.from==t&&"bookmark"==a.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t);(i||(i=[])).push(new It(a,l?null:o.from-t,null==o.to?null:o.to-t))}}return i}function zt(e,t){if(t.full)return null;var n=it(e,t.from.line)&&Ze(e,t.from.line).markedSpans,i=it(e,t.to.line)&&Ze(e,t.to.line).markedSpans;if(!n&&!i)return null;var r=t.from.ch,o=t.to.ch,a=0==at(t.from,t.to),s=Ft(n,r,a),l=jt(i,o,a),c=1==t.text.length,u=X(t.text).length+(c?r:0);if(s)for(var d=0;d<s.length;++d){var h=s[d];if(null==h.to){var f=Lt(l,h.marker);f?c&&(h.to=null==f.to?null:f.to+u):h.to=r}}if(l)for(var p=0;p<l.length;++p){var m=l[p];if(null!=m.to&&(m.to+=u),null==m.from){var g=Lt(s,m.marker);g||(m.from=u,c&&(s||(s=[])).push(m))}else m.from+=u,c&&(s||(s=[])).push(m)}s&&(s=Bt(s)),l&&l!=s&&(l=Bt(l));var v=[s];if(!c){var b,y=t.text.length-2;if(y>0&&s)for(var w=0;w<s.length;++w)null==s[w].to&&(b||(b=[])).push(new It(s[w].marker,null,null));for(var x=0;x<y;++x)v.push(b);v.push(l)}return v}function Bt(e){for(var t=0;t<e.length;++t){var n=e[t];null!=n.from&&n.from==n.to&&!1!==n.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function Rt(e,t,n){var i=null;if(e.iter(t.line,n.line+1,(function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var n=e.markedSpans[t].marker;!n.readOnly||i&&-1!=R(i,n)||(i||(i=[])).push(n)}})),!i)return null;for(var r=[{from:t,to:n}],o=0;o<i.length;++o)for(var a=i[o],s=a.find(0),l=0;l<r.length;++l){var c=r[l];if(!(at(c.to,s.from)<0||at(c.from,s.to)>0)){var u=[l,1],d=at(c.from,s.from),h=at(c.to,s.to);(d<0||!a.inclusiveLeft&&!d)&&u.push({from:c.from,to:s.from}),(h>0||!a.inclusiveRight&&!h)&&u.push({from:s.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function Vt(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n].marker.detachLine(e);e.markedSpans=null}}function Ht(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine(e);e.markedSpans=t}}function Wt(e){return e.inclusiveLeft?-1:0}function qt(e){return e.inclusiveRight?1:0}function Ut(e,t){var n=e.lines.length-t.lines.length;if(0!=n)return n;var i=e.find(),r=t.find(),o=at(i.from,r.from)||Wt(e)-Wt(t);if(o)return-o;var a=at(i.to,r.to)||qt(e)-qt(t);return a||t.id-e.id}function Kt(e,t){var n,i=Mt&&e.markedSpans;if(i)for(var r=void 0,o=0;o<i.length;++o)r=i[o],r.marker.collapsed&&null==(t?r.from:r.to)&&(!n||Ut(n,r.marker)<0)&&(n=r.marker);return n}function Gt(e){return Kt(e,!0)}function Yt(e){return Kt(e,!1)}function Xt(e,t){var n,i=Mt&&e.markedSpans;if(i)for(var r=0;r<i.length;++r){var o=i[r];o.marker.collapsed&&(null==o.from||o.from<t)&&(null==o.to||o.to>t)&&(!n||Ut(n,o.marker)<0)&&(n=o.marker)}return n}function Zt(e,t,n,i,r){var o=Ze(e,t),a=Mt&&o.markedSpans;if(a)for(var s=0;s<a.length;++s){var l=a[s];if(l.marker.collapsed){var c=l.marker.find(0),u=at(c.from,n)||Wt(l.marker)-Wt(r),d=at(c.to,i)||qt(l.marker)-qt(r);if(!(u>=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?at(c.to,n)>=0:at(c.to,n)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?at(c.from,i)<=0:at(c.from,i)<0)))return!0}}}function Qt(e){var t;while(t=Gt(e))e=t.find(-1,!0).line;return e}function Jt(e){var t;while(t=Yt(e))e=t.find(1,!0).line;return e}function en(e){var t,n;while(t=Yt(e))e=t.find(1,!0).line,(n||(n=[])).push(e);return n}function tn(e,t){var n=Ze(e,t),i=Qt(n);return n==i?t:tt(i)}function nn(e,t){if(t>e.lastLine())return t;var n,i=Ze(e,t);if(!rn(e,i))return t;while(n=Yt(i))i=n.find(1,!0).line;return tt(i)+1}function rn(e,t){var n=Mt&&t.markedSpans;if(n)for(var i=void 0,r=0;r<n.length;++r)if(i=n[r],i.marker.collapsed){if(null==i.from)return!0;if(!i.marker.widgetNode&&0==i.from&&i.marker.inclusiveLeft&&on(e,t,i))return!0}}function on(e,t,n){if(null==n.to){var i=n.marker.find(1,!0);return on(e,i.line,Lt(i.line.markedSpans,n.marker))}if(n.marker.inclusiveRight&&n.to==t.text.length)return!0;for(var r=void 0,o=0;o<t.markedSpans.length;++o)if(r=t.markedSpans[o],r.marker.collapsed&&!r.marker.widgetNode&&r.from==n.to&&(null==r.to||r.to!=n.from)&&(r.marker.inclusiveLeft||n.marker.inclusiveRight)&&on(e,t,r))return!0}function an(e){e=Qt(e);for(var t=0,n=e.parent,i=0;i<n.lines.length;++i){var r=n.lines[i];if(r==e)break;t+=r.height}for(var o=n.parent;o;n=o,o=n.parent)for(var a=0;a<o.children.length;++a){var s=o.children[a];if(s==n)break;t+=s.height}return t}function sn(e){if(0==e.height)return 0;var t,n=e.text.length,i=e;while(t=Gt(i)){var r=t.find(0,!0);i=r.from.line,n+=r.from.ch-r.to.ch}i=e;while(t=Yt(i)){var o=t.find(0,!0);n-=i.text.length-o.from.ch,i=o.to.line,n+=i.text.length-o.to.ch}return n}function ln(e){var t=e.display,n=e.doc;t.maxLine=Ze(n,n.first),t.maxLineLength=sn(t.maxLine),t.maxLineChanged=!0,n.iter((function(e){var n=sn(e);n>t.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)}))}var cn=function(e,t,n){this.text=e,Ht(this,t),this.height=n?n(this):1};function un(e,t,n,i){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),Vt(e),Ht(e,n);var r=i?i(e):1;r!=e.height&&et(e,r)}function dn(e){e.parent=null,Vt(e)}cn.prototype.lineNo=function(){return tt(this)},_e(cn);var hn={},fn={};function pn(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?fn:hn;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function mn(e,t){var n=A("span",null,null,c?"padding-right: .1px":null),i={pre:A("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var r=0;r<=(t.rest?t.rest.length:0);r++){var o=r?t.rest[r-1]:t.line,a=void 0;i.pos=0,i.addToken=vn,Ie(e.display.measure)&&(a=fe(o,e.doc.direction))&&(i.addToken=yn(i.addToken,a)),i.map=[];var s=t!=e.display.externalMeasured&&tt(o);xn(o,i,bt(e,o,s)),o.styleClasses&&(o.styleClasses.bgClass&&(i.bgClass=P(o.styleClasses.bgClass,i.bgClass||"")),o.styleClasses.textClass&&(i.textClass=P(o.styleClasses.textClass,i.textClass||""))),0==i.map.length&&i.map.push(0,0,i.content.appendChild(Ne(e.display.measure))),0==r?(t.measure.map=i.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(i.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(c){var l=i.content.lastChild;(/\bcm-tab\b/.test(l.className)||l.querySelector&&l.querySelector(".cm-tab"))&&(i.content.className="cm-tab-wrap-hack")}return be(e,"renderLine",e,t.line,i.pre),i.pre.className&&(i.textClass=P(i.pre.className,i.textClass||"")),i}function gn(e){var t=M("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function vn(e,t,n,i,r,o,a){if(t){var c,u=e.splitSpaces?bn(t,e.trailingSpace):t,d=e.cm.state.specialChars,h=!1;if(d.test(t)){c=document.createDocumentFragment();var f=0;while(1){d.lastIndex=f;var p=d.exec(t),m=p?p.index-f:t.length-f;if(m){var g=document.createTextNode(u.slice(f,f+m));s&&l<9?c.appendChild(M("span",[g])):c.appendChild(g),e.map.push(e.pos,e.pos+m,g),e.col+=m,e.pos+=m}if(!p)break;f+=m+1;var v=void 0;if("\t"==p[0]){var b=e.cm.options.tabSize,y=b-e.col%b;v=c.appendChild(M("span",Y(y),"cm-tab")),v.setAttribute("role","presentation"),v.setAttribute("cm-text","\t"),e.col+=y}else"\r"==p[0]||"\n"==p[0]?(v=c.appendChild(M("span","\r"==p[0]?"␍":"␤","cm-invalidchar")),v.setAttribute("cm-text",p[0]),e.col+=1):(v=e.cm.options.specialCharPlaceholder(p[0]),v.setAttribute("cm-text",p[0]),s&&l<9?c.appendChild(M("span",[v])):c.appendChild(v),e.col+=1);e.map.push(e.pos,e.pos+1,v),e.pos++}}else e.col+=t.length,c=document.createTextNode(u),e.map.push(e.pos,e.pos+t.length,c),s&&l<9&&(h=!0),e.pos+=t.length;if(e.trailingSpace=32==u.charCodeAt(t.length-1),n||i||r||h||o||a){var w=n||"";i&&(w+=i),r&&(w+=r);var x=M("span",[c],w,o);if(a)for(var _ in a)a.hasOwnProperty(_)&&"style"!=_&&"class"!=_&&x.setAttribute(_,a[_]);return e.content.appendChild(x)}e.content.appendChild(c)}}function bn(e,t){if(e.length>1&&!/  /.test(e))return e;for(var n=t,i="",r=0;r<e.length;r++){var o=e.charAt(r);" "!=o||!n||r!=e.length-1&&32!=e.charCodeAt(r+1)||(o=" "),i+=o,n=" "==o}return i}function yn(e,t){return function(n,i,r,o,a,s,l){r=r?r+" cm-force-border":"cm-force-border";for(var c=n.pos,u=c+i.length;;){for(var d=void 0,h=0;h<t.length;h++)if(d=t[h],d.to>c&&d.from<=c)break;if(d.to>=u)return e(n,i,r,o,a,s,l);e(n,i.slice(0,d.to-c),r,o,null,s,l),o=null,i=i.slice(d.to-c),c=d.to}}}function wn(e,t,n,i){var r=!i&&n.widgetNode;r&&e.map.push(e.pos,e.pos+t,r),!i&&e.cm.display.input.needsContentAttribute&&(r||(r=e.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",n.id)),r&&(e.cm.display.input.setUneditable(r),e.content.appendChild(r)),e.pos+=t,e.trailingSpace=!1}function xn(e,t,n){var i=e.markedSpans,r=e.text,o=0;if(i)for(var a,s,l,c,u,d,h,f=r.length,p=0,m=1,g="",v=0;;){if(v==p){l=c=u=s="",h=null,d=null,v=1/0;for(var b=[],y=void 0,w=0;w<i.length;++w){var x=i[w],_=x.marker;if("bookmark"==_.type&&x.from==p&&_.widgetNode)b.push(_);else if(x.from<=p&&(null==x.to||x.to>p||_.collapsed&&x.to==p&&x.from==p)){if(null!=x.to&&x.to!=p&&v>x.to&&(v=x.to,c=""),_.className&&(l+=" "+_.className),_.css&&(s=(s?s+";":"")+_.css),_.startStyle&&x.from==p&&(u+=" "+_.startStyle),_.endStyle&&x.to==v&&(y||(y=[])).push(_.endStyle,x.to),_.title&&((h||(h={})).title=_.title),_.attributes)for(var k in _.attributes)(h||(h={}))[k]=_.attributes[k];_.collapsed&&(!d||Ut(d.marker,_)<0)&&(d=x)}else x.from>p&&v>x.from&&(v=x.from)}if(y)for(var C=0;C<y.length;C+=2)y[C+1]==v&&(c+=" "+y[C]);if(!d||d.from==p)for(var S=0;S<b.length;++S)wn(t,0,b[S]);if(d&&(d.from||0)==p){if(wn(t,(null==d.to?f+1:d.to)-p,d.marker,null==d.from),null==d.to)return;d.to==p&&(d=!1)}}if(p>=f)break;var O=Math.min(f,v);while(1){if(g){var T=p+g.length;if(!d){var E=T>O?g.slice(0,O-p):g;t.addToken(t,E,a?a+l:l,u,p+E.length==v?c:"",s,h)}if(T>=O){g=g.slice(O-p),p=O;break}p=T,u=""}g=r.slice(o,o=n[m++]),a=pn(n[m++],t.cm.options)}}else for(var D=1;D<n.length;D+=2)t.addToken(t,r.slice(o,o=n[D]),pn(n[D+1],t.cm.options))}function _n(e,t,n){this.line=t,this.rest=en(t),this.size=this.rest?tt(X(this.rest))-n+1:1,this.node=this.text=null,this.hidden=rn(e,t)}function kn(e,t,n){for(var i,r=[],o=t;o<n;o=i){var a=new _n(e.doc,Ze(e.doc,o),o);i=o+a.size,r.push(a)}return r}var Cn=null;function Sn(e){Cn?Cn.ops.push(e):e.ownsGroup=Cn={ops:[e],delayedCallbacks:[]}}function On(e){var t=e.delayedCallbacks,n=0;do{for(;n<t.length;n++)t[n].call(null);for(var i=0;i<e.ops.length;i++){var r=e.ops[i];if(r.cursorActivityHandlers)while(r.cursorActivityCalled<r.cursorActivityHandlers.length)r.cursorActivityHandlers[r.cursorActivityCalled++].call(null,r.cm)}}while(n<t.length)}function Tn(e,t){var n=e.ownsGroup;if(n)try{On(n)}finally{Cn=null,t(n)}}var En=null;function Dn(e,t){var n=ge(e,t);if(n.length){var i,r=Array.prototype.slice.call(arguments,2);Cn?i=Cn.delayedCallbacks:En?i=En:(i=En=[],setTimeout(Mn,0));for(var o=function(e){i.push((function(){return n[e].apply(null,r)}))},a=0;a<n.length;++a)o(a)}}function Mn(){var e=En;En=null;for(var t=0;t<e.length;++t)e[t]()}function An(e,t,n,i){for(var r=0;r<t.changes.length;r++){var o=t.changes[r];"text"==o?Pn(e,t):"gutter"==o?Fn(e,t,n,i):"class"==o?$n(e,t):"widget"==o&&jn(e,t,i)}t.changes=null}function Nn(e){return e.node==e.text&&(e.node=M("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),s&&l<8&&(e.node.style.zIndex=2)),e.node}function In(e,t){var n=t.bgClass?t.bgClass+" "+(t.line.bgClass||""):t.line.bgClass;if(n&&(n+=" CodeMirror-linebackground"),t.background)n?t.background.className=n:(t.background.parentNode.removeChild(t.background),t.background=null);else if(n){var i=Nn(t);t.background=i.insertBefore(M("div",null,n),i.firstChild),e.display.input.setUneditable(t.background)}}function Ln(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):mn(e,t)}function Pn(e,t){var n=t.text.className,i=Ln(e,t);t.text==t.node&&(t.node=i.pre),t.text.parentNode.replaceChild(i.pre,t.text),t.text=i.pre,i.bgClass!=t.bgClass||i.textClass!=t.textClass?(t.bgClass=i.bgClass,t.textClass=i.textClass,$n(e,t)):n&&(t.text.className=n)}function $n(e,t){In(e,t),t.line.wrapClass?Nn(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className="");var n=t.textClass?t.textClass+" "+(t.line.textClass||""):t.line.textClass;t.text.className=n||""}function Fn(e,t,n,i){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var r=Nn(t);t.gutterBackground=M("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px; width: "+i.gutterTotalWidth+"px"),e.display.input.setUneditable(t.gutterBackground),r.insertBefore(t.gutterBackground,t.text)}var o=t.line.gutterMarkers;if(e.options.lineNumbers||o){var a=Nn(t),s=t.gutter=M("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px");if(e.display.input.setUneditable(s),a.insertBefore(s,t.text),t.line.gutterClass&&(s.className+=" "+t.line.gutterClass),!e.options.lineNumbers||o&&o["CodeMirror-linenumbers"]||(t.lineNumber=s.appendChild(M("div",rt(e.options,n),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+i.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),o)for(var l=0;l<e.display.gutterSpecs.length;++l){var c=e.display.gutterSpecs[l].className,u=o.hasOwnProperty(c)&&o[c];u&&s.appendChild(M("div",[u],"CodeMirror-gutter-elt","left: "+i.gutterLeft[c]+"px; width: "+i.gutterWidth[c]+"px"))}}}function jn(e,t,n){t.alignable&&(t.alignable=null);for(var i=S("CodeMirror-linewidget"),r=t.node.firstChild,o=void 0;r;r=o)o=r.nextSibling,i.test(r.className)&&t.node.removeChild(r);Bn(e,t,n)}function zn(e,t,n,i){var r=Ln(e,t);return t.text=t.node=r.pre,r.bgClass&&(t.bgClass=r.bgClass),r.textClass&&(t.textClass=r.textClass),$n(e,t),Fn(e,t,n,i),Bn(e,t,i),t.node}function Bn(e,t,n){if(Rn(e,t.line,t,n,!0),t.rest)for(var i=0;i<t.rest.length;i++)Rn(e,t.rest[i],t,n,!1)}function Rn(e,t,n,i,r){if(t.widgets)for(var o=Nn(n),a=0,s=t.widgets;a<s.length;++a){var l=s[a],c=M("div",[l.node],"CodeMirror-linewidget"+(l.className?" "+l.className:""));l.handleMouseEvents||c.setAttribute("cm-ignore-events","true"),Vn(l,c,n,i),e.display.input.setUneditable(c),r&&l.above?o.insertBefore(c,n.gutter||n.text):o.appendChild(c),Dn(l,"redraw")}}function Vn(e,t,n,i){if(e.noHScroll){(n.alignable||(n.alignable=[])).push(t);var r=i.wrapperWidth;t.style.left=i.fixedPos+"px",e.coverGutter||(r-=i.gutterTotalWidth,t.style.paddingLeft=i.gutterTotalWidth+"px"),t.style.width=r+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-i.gutterTotalWidth+"px"))}function Hn(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!N(document.body,e.node)){var n="position: relative;";e.coverGutter&&(n+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(n+="width: "+t.display.wrapper.clientWidth+"px;"),D(t.display.measure,M("div",[e.node],null,n))}return e.height=e.node.parentNode.offsetHeight}function Wn(e,t){for(var n=Te(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&"true"==n.getAttribute("cm-ignore-events")||n.parentNode==e.sizer&&n!=e.mover)return!0}function qn(e){return e.lineSpace.offsetTop}function Un(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function Kn(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=D(e.measure,M("pre","x","CodeMirror-line-like")),n=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,i={left:parseInt(n.paddingLeft),right:parseInt(n.paddingRight)};return isNaN(i.left)||isNaN(i.right)||(e.cachedPaddingH=i),i}function Gn(e){return V-e.display.nativeBarWidth}function Yn(e){return e.display.scroller.clientWidth-Gn(e)-e.display.barWidth}function Xn(e){return e.display.scroller.clientHeight-Gn(e)-e.display.barHeight}function Zn(e,t,n){var i=e.options.lineWrapping,r=i&&Yn(e);if(!t.measure.heights||i&&t.measure.width!=r){var o=t.measure.heights=[];if(i){t.measure.width=r;for(var a=t.text.firstChild.getClientRects(),s=0;s<a.length-1;s++){var l=a[s],c=a[s+1];Math.abs(l.bottom-c.bottom)>2&&o.push((l.bottom+c.top)/2-n.top)}}o.push(n.bottom-n.top)}}function Qn(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var i=0;i<e.rest.length;i++)if(e.rest[i]==t)return{map:e.measure.maps[i],cache:e.measure.caches[i]};for(var r=0;r<e.rest.length;r++)if(tt(e.rest[r])>n)return{map:e.measure.maps[r],cache:e.measure.caches[r],before:!0}}function Jn(e,t){t=Qt(t);var n=tt(t),i=e.display.externalMeasured=new _n(e.doc,t,n);i.lineN=n;var r=i.built=mn(e,i);return i.text=r.pre,D(e.display.lineMeasure,r.pre),i}function ei(e,t,n,i){return ii(e,ni(e,t),n,i)}function ti(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[$i(e,t)];var n=e.display.externalMeasured;return n&&t>=n.lineN&&t<n.lineN+n.size?n:void 0}function ni(e,t){var n=tt(t),i=ti(e,n);i&&!i.text?i=null:i&&i.changes&&(An(e,i,n,Ai(e)),e.curOp.forceUpdate=!0),i||(i=Jn(e,t));var r=Qn(i,t,n);return{line:t,view:i,rect:null,map:r.map,cache:r.cache,before:r.before,hasHeights:!1}}function ii(e,t,n,i,r){t.before&&(n=-1);var o,a=n+(i||"");return t.cache.hasOwnProperty(a)?o=t.cache[a]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(Zn(e,t.view,t.rect),t.hasHeights=!0),o=li(e,t,n,i),o.bogus||(t.cache[a]=o)),{left:o.left,right:o.right,top:r?o.rtop:o.top,bottom:r?o.rbottom:o.bottom}}var ri,oi={left:0,right:0,top:0,bottom:0};function ai(e,t,n){for(var i,r,o,a,s,l,c=0;c<e.length;c+=3)if(s=e[c],l=e[c+1],t<s?(r=0,o=1,a="left"):t<l?(r=t-s,o=r+1):(c==e.length-3||t==l&&e[c+3]>t)&&(o=l-s,r=o-1,t>=l&&(a="right")),null!=r){if(i=e[c+2],s==l&&n==(i.insertLeft?"left":"right")&&(a=n),"left"==n&&0==r)while(c&&e[c-2]==e[c-3]&&e[c-1].insertLeft)i=e[2+(c-=3)],a="left";if("right"==n&&r==l-s)while(c<e.length-3&&e[c+3]==e[c+4]&&!e[c+5].insertLeft)i=e[(c+=3)+2],a="right";break}return{node:i,start:r,end:o,collapse:a,coverStart:s,coverEnd:l}}function si(e,t){var n=oi;if("left"==t){for(var i=0;i<e.length;i++)if((n=e[i]).left!=n.right)break}else for(var r=e.length-1;r>=0;r--)if((n=e[r]).left!=n.right)break;return n}function li(e,t,n,i){var r,o=ai(t.map,n,i),a=o.node,c=o.start,u=o.end,d=o.collapse;if(3==a.nodeType){for(var h=0;h<4;h++){while(c&&ae(t.line.text.charAt(o.coverStart+c)))--c;while(o.coverStart+u<o.coverEnd&&ae(t.line.text.charAt(o.coverStart+u)))++u;if(r=s&&l<9&&0==c&&u==o.coverEnd-o.coverStart?a.parentNode.getBoundingClientRect():si(O(a,c,u).getClientRects(),i),r.left||r.right||0==c)break;u=c,c-=1,d="right"}s&&l<11&&(r=ci(e.display.measure,r))}else{var f;c>0&&(d=i="right"),r=e.options.lineWrapping&&(f=a.getClientRects()).length>1?f["right"==i?f.length-1:0]:a.getBoundingClientRect()}if(s&&l<9&&!c&&(!r||!r.left&&!r.right)){var p=a.parentNode.getClientRects()[0];r=p?{left:p.left,right:p.left+Mi(e.display),top:p.top,bottom:p.bottom}:oi}for(var m=r.top-t.rect.top,g=r.bottom-t.rect.top,v=(m+g)/2,b=t.view.measure.heights,y=0;y<b.length-1;y++)if(v<b[y])break;var w=y?b[y-1]:0,x=b[y],_={left:("right"==d?r.right:r.left)-t.rect.left,right:("left"==d?r.left:r.right)-t.rect.left,top:w,bottom:x};return r.left||r.right||(_.bogus=!0),e.options.singleCursorHeightPerLine||(_.rtop=m,_.rbottom=g),_}function ci(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!je(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,i=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*i,bottom:t.bottom*i}}function ui(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function di(e){e.display.externalMeasure=null,E(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)ui(e.display.view[t])}function hi(e){di(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function fi(){return d&&v?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function pi(){return d&&v?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function mi(e){var t=0;if(e.widgets)for(var n=0;n<e.widgets.length;++n)e.widgets[n].above&&(t+=Hn(e.widgets[n]));return t}function gi(e,t,n,i,r){if(!r){var o=mi(t);n.top+=o,n.bottom+=o}if("line"==i)return n;i||(i="local");var a=an(t);if("local"==i?a+=qn(e.display):a-=e.display.viewOffset,"page"==i||"window"==i){var s=e.display.lineSpace.getBoundingClientRect();a+=s.top+("window"==i?0:pi());var l=s.left+("window"==i?0:fi());n.left+=l,n.right+=l}return n.top+=a,n.bottom+=a,n}function vi(e,t,n){if("div"==n)return t;var i=t.left,r=t.top;if("page"==n)i-=fi(),r-=pi();else if("local"==n||!n){var o=e.display.sizer.getBoundingClientRect();i+=o.left,r+=o.top}var a=e.display.lineSpace.getBoundingClientRect();return{left:i-a.left,top:r-a.top}}function bi(e,t,n,i,r){return i||(i=Ze(e.doc,t.line)),gi(e,i,ei(e,i,t.ch,r),n)}function yi(e,t,n,i,r,o){function a(t,a){var s=ii(e,r,t,a?"right":"left",o);return a?s.left=s.right:s.right=s.left,gi(e,i,s,n)}i=i||Ze(e.doc,t.line),r||(r=ni(e,i));var s=fe(i,e.doc.direction),l=t.ch,c=t.sticky;if(l>=i.text.length?(l=i.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return a("before"==c?l-1:l,"before"==c);function u(e,t,n){var i=s[t],r=1==i.level;return a(n?e-1:e,r!=n)}var d=de(s,l,c),h=ue,f=u(l,d,"before"==c);return null!=h&&(f.other=u(l,h,"before"!=c)),f}function wi(e,t){var n=0;t=ht(e.doc,t),e.options.lineWrapping||(n=Mi(e.display)*t.ch);var i=Ze(e.doc,t.line),r=an(i)+qn(e.display);return{left:n,right:n,top:r,bottom:r+i.height}}function xi(e,t,n,i,r){var o=ot(e,t,n);return o.xRel=r,i&&(o.outside=i),o}function _i(e,t,n){var i=e.doc;if(n+=e.display.viewOffset,n<0)return xi(i.first,0,null,-1,-1);var r=nt(i,n),o=i.first+i.size-1;if(r>o)return xi(i.first+i.size-1,Ze(i,o).text.length,null,1,1);t<0&&(t=0);for(var a=Ze(i,r);;){var s=Oi(e,a,r,t,n),l=Xt(a,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==r)return c;a=Ze(i,r=c.line)}}function ki(e,t,n,i){i-=mi(t);var r=t.text.length,o=le((function(t){return ii(e,n,t-1).bottom<=i}),r,0);return r=le((function(t){return ii(e,n,t).top>i}),o,r),{begin:o,end:r}}function Ci(e,t,n,i){n||(n=ni(e,t));var r=gi(e,t,ii(e,n,i),"line").top;return ki(e,t,n,r)}function Si(e,t,n,i){return!(e.bottom<=n)&&(e.top>n||(i?e.left:e.right)>t)}function Oi(e,t,n,i,r){r-=an(t);var o=ni(e,t),a=mi(t),s=0,l=t.text.length,c=!0,u=fe(t,e.doc.direction);if(u){var d=(e.options.lineWrapping?Ei:Ti)(e,t,n,o,u,i,r);c=1!=d.level,s=c?d.from:d.to-1,l=c?d.to:d.from-1}var h,f,p=null,m=null,g=le((function(t){var n=ii(e,o,t);return n.top+=a,n.bottom+=a,!!Si(n,i,r,!1)&&(n.top<=r&&n.left<=i&&(p=t,m=n),!0)}),s,l),v=!1;if(m){var b=i-m.left<m.right-i,y=b==c;g=p+(y?0:1),f=y?"after":"before",h=b?m.left:m.right}else{c||g!=l&&g!=s||g++,f=0==g?"after":g==t.text.length?"before":ii(e,o,g-(c?1:0)).bottom+a<=r==c?"after":"before";var w=yi(e,ot(n,g,f),"line",t,o);h=w.left,v=r<w.top?-1:r>=w.bottom?1:0}return g=se(t.text,g,1),xi(n,g,f,v,i-h)}function Ti(e,t,n,i,r,o,a){var s=le((function(s){var l=r[s],c=1!=l.level;return Si(yi(e,ot(n,c?l.to:l.from,c?"before":"after"),"line",t,i),o,a,!0)}),0,r.length-1),l=r[s];if(s>0){var c=1!=l.level,u=yi(e,ot(n,c?l.from:l.to,c?"after":"before"),"line",t,i);Si(u,o,a,!0)&&u.top>a&&(l=r[s-1])}return l}function Ei(e,t,n,i,r,o,a){var s=ki(e,t,i,a),l=s.begin,c=s.end;/\s/.test(t.text.charAt(c-1))&&c--;for(var u=null,d=null,h=0;h<r.length;h++){var f=r[h];if(!(f.from>=c||f.to<=l)){var p=1!=f.level,m=ii(e,i,p?Math.min(c,f.to)-1:Math.max(l,f.from)).right,g=m<o?o-m+1e9:m-o;(!u||d>g)&&(u=f,d=g)}}return u||(u=r[r.length-1]),u.from<l&&(u={from:l,to:u.to,level:u.level}),u.to>c&&(u={from:u.from,to:c,level:u.level}),u}function Di(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==ri){ri=M("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)ri.appendChild(document.createTextNode("x")),ri.appendChild(M("br"));ri.appendChild(document.createTextNode("x"))}D(e.measure,ri);var n=ri.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),E(e.measure),n||1}function Mi(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=M("span","xxxxxxxxxx"),n=M("pre",[t],"CodeMirror-line-like");D(e.measure,n);var i=t.getBoundingClientRect(),r=(i.right-i.left)/10;return r>2&&(e.cachedCharWidth=r),r||10}function Ai(e){for(var t=e.display,n={},i={},r=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a){var s=e.display.gutterSpecs[a].className;n[s]=o.offsetLeft+o.clientLeft+r,i[s]=o.clientWidth}return{fixedPos:Ni(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:i,wrapperWidth:t.wrapper.clientWidth}}function Ni(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function Ii(e){var t=Di(e.display),n=e.options.lineWrapping,i=n&&Math.max(5,e.display.scroller.clientWidth/Mi(e.display)-3);return function(r){if(rn(e.doc,r))return 0;var o=0;if(r.widgets)for(var a=0;a<r.widgets.length;a++)r.widgets[a].height&&(o+=r.widgets[a].height);return n?o+(Math.ceil(r.text.length/i)||1)*t:o+t}}function Li(e){var t=e.doc,n=Ii(e);t.iter((function(e){var t=n(e);t!=e.height&&et(e,t)}))}function Pi(e,t,n,i){var r=e.display;if(!n&&"true"==Te(t).getAttribute("cm-not-content"))return null;var o,a,s=r.lineSpace.getBoundingClientRect();try{o=t.clientX-s.left,a=t.clientY-s.top}catch(d){return null}var l,c=_i(e,o,a);if(i&&c.xRel>0&&(l=Ze(e.doc,c.line).text).length==c.ch){var u=z(l,l.length,e.options.tabSize)-l.length;c=ot(c.line,Math.max(0,Math.round((o-Kn(e.display).left)/Mi(e.display))-u))}return c}function $i(e,t){if(t>=e.display.viewTo)return null;if(t-=e.display.viewFrom,t<0)return null;for(var n=e.display.view,i=0;i<n.length;i++)if(t-=n[i].size,t<0)return i}function Fi(e,t,n,i){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e.doc.size),i||(i=0);var r=e.display;if(i&&n<r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>t)&&(r.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=r.viewTo)Mt&&tn(e.doc,t)<r.viewTo&&zi(e);else if(n<=r.viewFrom)Mt&&nn(e.doc,n+i)>r.viewFrom?zi(e):(r.viewFrom+=i,r.viewTo+=i);else if(t<=r.viewFrom&&n>=r.viewTo)zi(e);else if(t<=r.viewFrom){var o=Bi(e,n,n+i,1);o?(r.view=r.view.slice(o.index),r.viewFrom=o.lineN,r.viewTo+=i):zi(e)}else if(n>=r.viewTo){var a=Bi(e,t,t,-1);a?(r.view=r.view.slice(0,a.index),r.viewTo=a.lineN):zi(e)}else{var s=Bi(e,t,t,-1),l=Bi(e,n,n+i,1);s&&l?(r.view=r.view.slice(0,s.index).concat(kn(e,s.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=i):zi(e)}var c=r.externalMeasured;c&&(n<c.lineN?c.lineN+=i:t<c.lineN+c.size&&(r.externalMeasured=null))}function ji(e,t,n){e.curOp.viewChanged=!0;var i=e.display,r=e.display.externalMeasured;if(r&&t>=r.lineN&&t<r.lineN+r.size&&(i.externalMeasured=null),!(t<i.viewFrom||t>=i.viewTo)){var o=i.view[$i(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==R(a,n)&&a.push(n)}}}function zi(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function Bi(e,t,n,i){var r,o=$i(e,t),a=e.display.view;if(!Mt||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var s=e.display.viewFrom,l=0;l<o;l++)s+=a[l].size;if(s!=t){if(i>0){if(o==a.length-1)return null;r=s+a[o].size-t,o++}else r=s-t;t+=r,n+=r}while(tn(e.doc,n)!=n){if(o==(i<0?0:a.length-1))return null;n+=i*a[o-(i<0?1:0)].size,o+=i}return{index:o,lineN:n}}function Ri(e,t,n){var i=e.display,r=i.view;0==r.length||t>=i.viewTo||n<=i.viewFrom?(i.view=kn(e,t,n),i.viewFrom=t):(i.viewFrom>t?i.view=kn(e,t,i.viewFrom).concat(i.view):i.viewFrom<t&&(i.view=i.view.slice($i(e,t))),i.viewFrom=t,i.viewTo<n?i.view=i.view.concat(kn(e,i.viewTo,n)):i.viewTo>n&&(i.view=i.view.slice(0,$i(e,n)))),i.viewTo=n}function Vi(e){for(var t=e.display.view,n=0,i=0;i<t.length;i++){var r=t[i];r.hidden||r.node&&!r.changes||++n}return n}function Hi(e){e.display.input.showSelection(e.display.input.prepareSelection())}function Wi(e,t){void 0===t&&(t=!0);for(var n=e.doc,i={},r=i.cursors=document.createDocumentFragment(),o=i.selection=document.createDocumentFragment(),a=0;a<n.sel.ranges.length;a++)if(t||a!=n.sel.primIndex){var s=n.sel.ranges[a];if(!(s.from().line>=e.display.viewTo||s.to().line<e.display.viewFrom)){var l=s.empty();(l||e.options.showCursorWhenSelecting)&&qi(e,s.head,r),l||Ki(e,s,o)}}return i}function qi(e,t,n){var i=yi(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),r=n.appendChild(M("div"," ","CodeMirror-cursor"));if(r.style.left=i.left+"px",r.style.top=i.top+"px",r.style.height=Math.max(0,i.bottom-i.top)*e.options.cursorHeight+"px",i.other){var o=n.appendChild(M("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));o.style.display="",o.style.left=i.other.left+"px",o.style.top=i.other.top+"px",o.style.height=.85*(i.other.bottom-i.other.top)+"px"}}function Ui(e,t){return e.top-t.top||e.left-t.left}function Ki(e,t,n){var i=e.display,r=e.doc,o=document.createDocumentFragment(),a=Kn(e.display),s=a.left,l=Math.max(i.sizerWidth,Yn(e)-i.sizer.offsetLeft)-a.right,c="ltr"==r.direction;function u(e,t,n,i){t<0&&(t=0),t=Math.round(t),i=Math.round(i),o.appendChild(M("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n                             top: "+t+"px; width: "+(null==n?l-e:n)+"px;\n                             height: "+(i-t)+"px"))}function d(t,n,i){var o,a,d=Ze(r,t),h=d.text.length;function f(n,i){return bi(e,ot(t,n),"div",d,i)}function p(t,n,i){var r=Ci(e,d,null,t),o="ltr"==n==("after"==i)?"left":"right",a="after"==i?r.begin:r.end-(/\s/.test(d.text.charAt(r.end-1))?2:1);return f(a,o)[o]}var m=fe(d,r.direction);return ce(m,n||0,null==i?h:i,(function(e,t,r,d){var g="ltr"==r,v=f(e,g?"left":"right"),b=f(t-1,g?"right":"left"),y=null==n&&0==e,w=null==i&&t==h,x=0==d,_=!m||d==m.length-1;if(b.top-v.top<=3){var k=(c?y:w)&&x,C=(c?w:y)&&_,S=k?s:(g?v:b).left,O=C?l:(g?b:v).right;u(S,v.top,O-S,v.bottom)}else{var T,E,D,M;g?(T=c&&y&&x?s:v.left,E=c?l:p(e,r,"before"),D=c?s:p(t,r,"after"),M=c&&w&&_?l:b.right):(T=c?p(e,r,"before"):s,E=!c&&y&&x?l:v.right,D=!c&&w&&_?s:b.left,M=c?p(t,r,"after"):l),u(T,v.top,E-T,v.bottom),v.bottom<b.top&&u(s,v.bottom,null,b.top),u(D,b.top,M-D,b.bottom)}(!o||Ui(v,o)<0)&&(o=v),Ui(b,o)<0&&(o=b),(!a||Ui(v,a)<0)&&(a=v),Ui(b,a)<0&&(a=b)})),{start:o,end:a}}var h=t.from(),f=t.to();if(h.line==f.line)d(h.line,h.ch,f.ch);else{var p=Ze(r,h.line),m=Ze(r,f.line),g=Qt(p)==Qt(m),v=d(h.line,h.ch,g?p.text.length+1:null).end,b=d(f.line,g?0:null,f.ch).start;g&&(v.top<b.top-2?(u(v.right,v.top,null,v.bottom),u(s,b.top,b.left,b.bottom)):u(v.right,v.top,b.left-v.right,v.bottom)),v.bottom<b.top&&u(s,v.bottom,null,b.top)}n.appendChild(o)}function Gi(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var n=!0;t.cursorDiv.style.visibility="",e.options.cursorBlinkRate>0?t.blinker=setInterval((function(){e.hasFocus()||Qi(e),t.cursorDiv.style.visibility=(n=!n)?"":"hidden"}),e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Yi(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||Zi(e))}function Xi(e){e.state.delayingBlurEvent=!0,setTimeout((function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&Qi(e))}),100)}function Zi(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(be(e,"focus",e,t),e.state.focused=!0,L(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),c&&setTimeout((function(){return e.display.input.reset(!0)}),20)),e.display.input.receivedFocus()),Gi(e))}function Qi(e,t){e.state.delayingBlurEvent||(e.state.focused&&(be(e,"blur",e,t),e.state.focused=!1,T(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout((function(){e.state.focused||(e.display.shift=!1)}),150))}function Ji(e){for(var t=e.display,n=t.lineDiv.offsetTop,i=0;i<t.view.length;i++){var r=t.view[i],o=e.options.lineWrapping,a=void 0,c=0;if(!r.hidden){if(s&&l<8){var u=r.node.offsetTop+r.node.offsetHeight;a=u-n,n=u}else{var d=r.node.getBoundingClientRect();a=d.bottom-d.top,!o&&r.text.firstChild&&(c=r.text.firstChild.getBoundingClientRect().right-d.left-1)}var h=r.line.height-a;if((h>.005||h<-.005)&&(et(r.line,a),er(r.line),r.rest))for(var f=0;f<r.rest.length;f++)er(r.rest[f]);if(c>e.display.sizerWidth){var p=Math.ceil(c/Mi(e.display));p>e.display.maxLineLength&&(e.display.maxLineLength=p,e.display.maxLine=r.line,e.display.maxLineChanged=!0)}}}}function er(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var n=e.widgets[t],i=n.node.parentNode;i&&(n.height=i.offsetHeight)}}function tr(e,t,n){var i=n&&null!=n.top?Math.max(0,n.top):e.scroller.scrollTop;i=Math.floor(i-qn(e));var r=n&&null!=n.bottom?n.bottom:i+e.wrapper.clientHeight,o=nt(t,i),a=nt(t,r);if(n&&n.ensure){var s=n.ensure.from.line,l=n.ensure.to.line;s<o?(o=s,a=nt(t,an(Ze(t,s))+e.wrapper.clientHeight)):Math.min(l,t.lastLine())>=a&&(o=nt(t,an(Ze(t,l))-e.wrapper.clientHeight),a=l)}return{from:o,to:Math.max(a,o+1)}}function nr(e,t){if(!ye(e,"scrollCursorIntoView")){var n=e.display,i=n.sizer.getBoundingClientRect(),r=null;if(t.top+i.top<0?r=!0:t.bottom+i.top>(window.innerHeight||document.documentElement.clientHeight)&&(r=!1),null!=r&&!m){var o=M("div","​",null,"position: absolute;\n                         top: "+(t.top-n.viewOffset-qn(e.display))+"px;\n                         height: "+(t.bottom-t.top+Gn(e)+n.barHeight)+"px;\n                         left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(r),e.display.lineSpace.removeChild(o)}}}function ir(e,t,n,i){var r;null==i&&(i=0),e.options.lineWrapping||t!=n||(t=t.ch?ot(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t,n="before"==t.sticky?ot(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var a=!1,s=yi(e,t),l=n&&n!=t?yi(e,n):s;r={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-i,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+i};var c=or(e,r),u=e.doc.scrollTop,d=e.doc.scrollLeft;if(null!=c.scrollTop&&(hr(e,c.scrollTop),Math.abs(e.doc.scrollTop-u)>1&&(a=!0)),null!=c.scrollLeft&&(pr(e,c.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(a=!0)),!a)break}return r}function rr(e,t){var n=or(e,t);null!=n.scrollTop&&hr(e,n.scrollTop),null!=n.scrollLeft&&pr(e,n.scrollLeft)}function or(e,t){var n=e.display,i=Di(e.display);t.top<0&&(t.top=0);var r=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,o=Xn(e),a={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+Un(n),l=t.top<i,c=t.bottom>s-i;if(t.top<r)a.scrollTop=l?0:t.top;else if(t.bottom>r+o){var u=Math.min(t.top,(c?s:t.bottom)-o);u!=r&&(a.scrollTop=u)}var d=e.options.fixedGutter?0:n.gutters.offsetWidth,h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-d,f=Yn(e)-n.gutters.offsetWidth,p=t.right-t.left>f;return p&&(t.right=t.left+f),t.left<10?a.scrollLeft=0:t.left<h?a.scrollLeft=Math.max(0,t.left+d-(p?0:10)):t.right>f+h-3&&(a.scrollLeft=t.right+(p?0:10)-f),a}function ar(e,t){null!=t&&(ur(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function sr(e){ur(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function lr(e,t,n){null==t&&null==n||ur(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function cr(e,t){ur(e),e.curOp.scrollToPos=t}function ur(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;var n=wi(e,t.from),i=wi(e,t.to);dr(e,n,i,t.margin)}}function dr(e,t,n,i){var r=or(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-i,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+i});lr(e,r.scrollLeft,r.scrollTop)}function hr(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||Hr(e,{top:t}),fr(e,t,!0),n&&Hr(e),Pr(e,100))}function fr(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function pr(e,t,n,i){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!i||(e.doc.scrollLeft=t,Kr(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function mr(e){var t=e.display,n=t.gutters.offsetWidth,i=Math.round(e.doc.height+Un(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:i,scrollHeight:i+Gn(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var gr=function(e,t,n){this.cm=n;var i=this.vert=M("div",[M("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=M("div",[M("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");i.tabIndex=r.tabIndex=-1,e(i),e(r),me(i,"scroll",(function(){i.clientHeight&&t(i.scrollTop,"vertical")})),me(r,"scroll",(function(){r.clientWidth&&t(r.scrollLeft,"horizontal")})),this.checkedZeroWidth=!1,s&&l<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};gr.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,i=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?i+"px":"0";var r=e.viewHeight-(t?i:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+r)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?i+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(n?i:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?i:0,bottom:t?i:0}},gr.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},gr.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},gr.prototype.zeroWidthHack=function(){var e=y&&!p?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new B,this.disableVert=new B},gr.prototype.enableZeroWidthBar=function(e,t,n){function i(){var r=e.getBoundingClientRect(),o="vert"==n?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1);o!=e?e.style.pointerEvents="none":t.set(1e3,i)}e.style.pointerEvents="auto",t.set(1e3,i)},gr.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var vr=function(){};function br(e,t){t||(t=mr(e));var n=e.display.barWidth,i=e.display.barHeight;yr(e,t);for(var r=0;r<4&&n!=e.display.barWidth||i!=e.display.barHeight;r++)n!=e.display.barWidth&&e.options.lineWrapping&&Ji(e),yr(e,mr(e)),n=e.display.barWidth,i=e.display.barHeight}function yr(e,t){var n=e.display,i=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=i.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=i.bottom)+"px",n.heightForcer.style.borderBottom=i.bottom+"px solid transparent",i.right&&i.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=i.bottom+"px",n.scrollbarFiller.style.width=i.right+"px"):n.scrollbarFiller.style.display="",i.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=i.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}vr.prototype.update=function(){return{bottom:0,right:0}},vr.prototype.setScrollLeft=function(){},vr.prototype.setScrollTop=function(){},vr.prototype.clear=function(){};var wr={native:gr,null:vr};function xr(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&T(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new wr[e.options.scrollbarStyle]((function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),me(t,"mousedown",(function(){e.state.focused&&setTimeout((function(){return e.display.input.focus()}),0)})),t.setAttribute("cm-not-content","true")}),(function(t,n){"horizontal"==n?pr(e,t):hr(e,t)}),e),e.display.scrollbars.addClass&&L(e.display.wrapper,e.display.scrollbars.addClass)}var _r=0;function kr(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++_r},Sn(e.curOp)}function Cr(e){var t=e.curOp;t&&Tn(t,(function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;Sr(e)}))}function Sr(e){for(var t=e.ops,n=0;n<t.length;n++)Or(t[n]);for(var i=0;i<t.length;i++)Tr(t[i]);for(var r=0;r<t.length;r++)Er(t[r]);for(var o=0;o<t.length;o++)Dr(t[o]);for(var a=0;a<t.length;a++)Mr(t[a])}function Or(e){var t=e.cm,n=t.display;jr(t),e.updateMaxLine&&ln(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<n.viewFrom||e.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new Fr(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Tr(e){e.updatedDisplay=e.mustUpdate&&Rr(e.cm,e.update)}function Er(e){var t=e.cm,n=t.display;e.updatedDisplay&&Ji(t),e.barMeasure=mr(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=ei(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+Gn(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Yn(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function Dr(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&pr(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var n=e.focus&&e.focus==I();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,n),(e.updatedDisplay||e.startHeight!=t.doc.height)&&br(t,e.barMeasure),e.updatedDisplay&&Ur(t,e.barMeasure),e.selectionChanged&&Gi(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),n&&Yi(e.cm)}function Mr(e){var t=e.cm,n=t.display,i=t.doc;if(e.updatedDisplay&&Vr(t,e.update),null==n.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(n.wheelStartX=n.wheelStartY=null),null!=e.scrollTop&&fr(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&pr(t,e.scrollLeft,!0,!0),e.scrollToPos){var r=ir(t,ht(i,e.scrollToPos.from),ht(i,e.scrollToPos.to),e.scrollToPos.margin);nr(t,r)}var o=e.maybeHiddenMarkers,a=e.maybeUnhiddenMarkers;if(o)for(var s=0;s<o.length;++s)o[s].lines.length||be(o[s],"hide");if(a)for(var l=0;l<a.length;++l)a[l].lines.length&&be(a[l],"unhide");n.wrapper.offsetHeight&&(i.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&be(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}function Ar(e,t){if(e.curOp)return t();kr(e);try{return t()}finally{Cr(e)}}function Nr(e,t){return function(){if(e.curOp)return t.apply(e,arguments);kr(e);try{return t.apply(e,arguments)}finally{Cr(e)}}}function Ir(e){return function(){if(this.curOp)return e.apply(this,arguments);kr(this);try{return e.apply(this,arguments)}finally{Cr(this)}}}function Lr(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);kr(t);try{return e.apply(this,arguments)}finally{Cr(t)}}}function Pr(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,F($r,e))}function $r(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){var n=+new Date+e.options.workTime,i=yt(e,t.highlightFrontier),r=[];t.iter(i.line,Math.min(t.first+t.size,e.display.viewTo+500),(function(o){if(i.line>=e.display.viewFrom){var a=o.styles,s=o.text.length>e.options.maxHighlightLength?Ke(t.mode,i.state):null,l=vt(e,o,i,!0);s&&(i.state=s),o.styles=l.styles;var c=o.styleClasses,u=l.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var d=!a||a.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!d&&h<a.length;++h)d=a[h]!=o.styles[h];d&&r.push(i.line),o.stateAfter=i.save(),i.nextLine()}else o.text.length<=e.options.maxHighlightLength&&wt(e,o.text,i),o.stateAfter=i.line%5==0?i.save():null,i.nextLine();if(+new Date>n)return Pr(e,e.options.workDelay),!0})),t.highlightFrontier=i.line,t.modeFrontier=Math.max(t.modeFrontier,i.line),r.length&&Ar(e,(function(){for(var t=0;t<r.length;t++)ji(e,r[t],"text")}))}}var Fr=function(e,t,n){var i=e.display;this.viewport=t,this.visible=tr(i,e.doc,t),this.editorIsHidden=!i.wrapper.offsetWidth,this.wrapperHeight=i.wrapper.clientHeight,this.wrapperWidth=i.wrapper.clientWidth,this.oldDisplayWidth=Yn(e),this.force=n,this.dims=Ai(e),this.events=[]};function jr(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=Gn(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=Gn(e)+"px",t.scrollbarsClipped=!0)}function zr(e){if(e.hasFocus())return null;var t=I();if(!t||!N(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var i=window.getSelection();i.anchorNode&&i.extend&&N(e.display.lineDiv,i.anchorNode)&&(n.anchorNode=i.anchorNode,n.anchorOffset=i.anchorOffset,n.focusNode=i.focusNode,n.focusOffset=i.focusOffset)}return n}function Br(e){if(e&&e.activeElt&&e.activeElt!=I()&&(e.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(e.activeElt.nodeName)&&e.anchorNode&&N(document.body,e.anchorNode)&&N(document.body,e.focusNode))){var t=window.getSelection(),n=document.createRange();n.setEnd(e.anchorNode,e.anchorOffset),n.collapse(!1),t.removeAllRanges(),t.addRange(n),t.extend(e.focusNode,e.focusOffset)}}function Rr(e,t){var n=e.display,i=e.doc;if(t.editorIsHidden)return zi(e),!1;if(!t.force&&t.visible.from>=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==Vi(e))return!1;Gr(e)&&(zi(e),t.dims=Ai(e));var r=i.first+i.size,o=Math.max(t.visible.from-e.options.viewportMargin,i.first),a=Math.min(r,t.visible.to+e.options.viewportMargin);n.viewFrom<o&&o-n.viewFrom<20&&(o=Math.max(i.first,n.viewFrom)),n.viewTo>a&&n.viewTo-a<20&&(a=Math.min(r,n.viewTo)),Mt&&(o=tn(e.doc,o),a=nn(e.doc,a));var s=o!=n.viewFrom||a!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;Ri(e,o,a),n.viewOffset=an(Ze(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var l=Vi(e);if(!s&&0==l&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var c=zr(e);return l>4&&(n.lineDiv.style.display="none"),Wr(e,n.updateLineNumbers,t.dims),l>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,Br(c),E(n.cursorDiv),E(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,s&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,Pr(e,400)),n.updateLineNumbers=null,!0}function Vr(e,t){for(var n=t.viewport,i=!0;;i=!1){if(i&&e.options.lineWrapping&&t.oldDisplayWidth!=Yn(e))i&&(t.visible=tr(e.display,e.doc,n));else if(n&&null!=n.top&&(n={top:Math.min(e.doc.height+Un(e.display)-Xn(e),n.top)}),t.visible=tr(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!Rr(e,t))break;Ji(e);var r=mr(e);Hi(e),br(e,r),Ur(e,r),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function Hr(e,t){var n=new Fr(e,t);if(Rr(e,n)){Ji(e),Vr(e,n);var i=mr(e);Hi(e),br(e,i),Ur(e,i),n.finish()}}function Wr(e,t,n){var i=e.display,r=e.options.lineNumbers,o=i.lineDiv,a=o.firstChild;function s(t){var n=t.nextSibling;return c&&y&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var l=i.view,u=i.viewFrom,d=0;d<l.length;d++){var h=l[d];if(h.hidden);else if(h.node&&h.node.parentNode==o){while(a!=h.node)a=s(a);var f=r&&null!=t&&t<=u&&h.lineNumber;h.changes&&(R(h.changes,"gutter")>-1&&(f=!1),An(e,h,u,n)),f&&(E(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(rt(e.options,u)))),a=h.node.nextSibling}else{var p=zn(e,h,u,n);o.insertBefore(p,a)}u+=h.size}while(a)a=s(a)}function qr(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px"}function Ur(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Gn(e)+"px"}function Kr(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var i=Ni(t)-t.scroller.scrollLeft+e.doc.scrollLeft,r=t.gutters.offsetWidth,o=i+"px",a=0;a<n.length;a++)if(!n[a].hidden){e.options.fixedGutter&&(n[a].gutter&&(n[a].gutter.style.left=o),n[a].gutterBackground&&(n[a].gutterBackground.style.left=o));var s=n[a].alignable;if(s)for(var l=0;l<s.length;l++)s[l].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=i+r+"px")}}function Gr(e){if(!e.options.lineNumbers)return!1;var t=e.doc,n=rt(e.options,t.first+t.size-1),i=e.display;if(n.length!=i.lineNumChars){var r=i.measure.appendChild(M("div",[M("div",n)],"CodeMirror-linenumber CodeMirror-gutter-elt")),o=r.firstChild.offsetWidth,a=r.offsetWidth-o;return i.lineGutter.style.width="",i.lineNumInnerWidth=Math.max(o,i.lineGutter.offsetWidth-a)+1,i.lineNumWidth=i.lineNumInnerWidth+a,i.lineNumChars=i.lineNumInnerWidth?n.length:-1,i.lineGutter.style.width=i.lineNumWidth+"px",qr(e.display),!0}return!1}function Yr(e,t){for(var n=[],i=!1,r=0;r<e.length;r++){var o=e[r],a=null;if("string"!=typeof o&&(a=o.style,o=o.className),"CodeMirror-linenumbers"==o){if(!t)continue;i=!0}n.push({className:o,style:a})}return t&&!i&&n.push({className:"CodeMirror-linenumbers",style:null}),n}function Xr(e){var t=e.gutters,n=e.gutterSpecs;E(t),e.lineGutter=null;for(var i=0;i<n.length;++i){var r=n[i],o=r.className,a=r.style,s=t.appendChild(M("div",null,"CodeMirror-gutter "+o));a&&(s.style.cssText=a),"CodeMirror-linenumbers"==o&&(e.lineGutter=s,s.style.width=(e.lineNumWidth||1)+"px")}t.style.display=n.length?"":"none",qr(e)}function Zr(e){Xr(e.display),Fi(e),Kr(e)}function Qr(e,t,i,r){var o=this;this.input=i,o.scrollbarFiller=M("div",null,"CodeMirror-scrollbar-filler"),o.scrollbarFiller.setAttribute("cm-not-content","true"),o.gutterFiller=M("div",null,"CodeMirror-gutter-filler"),o.gutterFiller.setAttribute("cm-not-content","true"),o.lineDiv=A("div",null,"CodeMirror-code"),o.selectionDiv=M("div",null,null,"position: relative; z-index: 1"),o.cursorDiv=M("div",null,"CodeMirror-cursors"),o.measure=M("div",null,"CodeMirror-measure"),o.lineMeasure=M("div",null,"CodeMirror-measure"),o.lineSpace=A("div",[o.measure,o.lineMeasure,o.selectionDiv,o.cursorDiv,o.lineDiv],null,"position: relative; outline: none");var a=A("div",[o.lineSpace],"CodeMirror-lines");o.mover=M("div",[a],null,"position: relative"),o.sizer=M("div",[o.mover],"CodeMirror-sizer"),o.sizerWidth=null,o.heightForcer=M("div",null,null,"position: absolute; height: "+V+"px; width: 1px;"),o.gutters=M("div",null,"CodeMirror-gutters"),o.lineGutter=null,o.scroller=M("div",[o.sizer,o.heightForcer,o.gutters],"CodeMirror-scroll"),o.scroller.setAttribute("tabIndex","-1"),o.wrapper=M("div",[o.scrollbarFiller,o.gutterFiller,o.scroller],"CodeMirror"),s&&l<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),c||n&&b||(o.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(o.wrapper):e(o.wrapper)),o.viewFrom=o.viewTo=t.first,o.reportedViewFrom=o.reportedViewTo=t.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,o.gutterSpecs=Yr(r.gutters,r.lineNumbers),Xr(o),i.init(o)}Fr.prototype.signal=function(e,t){xe(e,t)&&this.events.push(arguments)},Fr.prototype.finish=function(){for(var e=0;e<this.events.length;e++)be.apply(null,this.events[e])};var Jr=0,eo=null;function to(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==n&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:null==n&&(n=e.wheelDelta),{x:t,y:n}}function no(e){var t=to(e);return t.x*=eo,t.y*=eo,t}function io(e,t){var i=to(t),r=i.x,o=i.y,a=e.display,s=a.scroller,l=s.scrollWidth>s.clientWidth,u=s.scrollHeight>s.clientHeight;if(r&&l||o&&u){if(o&&y&&c)e:for(var d=t.target,f=a.view;d!=s;d=d.parentNode)for(var p=0;p<f.length;p++)if(f[p].node==d){e.display.currentWheelTarget=d;break e}if(r&&!n&&!h&&null!=eo)return o&&u&&hr(e,Math.max(0,s.scrollTop+o*eo)),pr(e,Math.max(0,s.scrollLeft+r*eo)),(!o||o&&u)&&ke(t),void(a.wheelStartX=null);if(o&&null!=eo){var m=o*eo,g=e.doc.scrollTop,v=g+a.wrapper.clientHeight;m<0?g=Math.max(0,g+m-50):v=Math.min(e.doc.height,v+m+50),Hr(e,{top:g,bottom:v})}Jr<20&&(null==a.wheelStartX?(a.wheelStartX=s.scrollLeft,a.wheelStartY=s.scrollTop,a.wheelDX=r,a.wheelDY=o,setTimeout((function(){if(null!=a.wheelStartX){var e=s.scrollLeft-a.wheelStartX,t=s.scrollTop-a.wheelStartY,n=t&&a.wheelDY&&t/a.wheelDY||e&&a.wheelDX&&e/a.wheelDX;a.wheelStartX=a.wheelStartY=null,n&&(eo=(eo*Jr+n)/(Jr+1),++Jr)}}),200)):(a.wheelDX+=r,a.wheelDY+=o))}}s?eo=-.53:n?eo=15:d?eo=-.7:f&&(eo=-1/3);var ro=function(e,t){this.ranges=e,this.primIndex=t};ro.prototype.primary=function(){return this.ranges[this.primIndex]},ro.prototype.equals=function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],i=e.ranges[t];if(!st(n.anchor,i.anchor)||!st(n.head,i.head))return!1}return!0},ro.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new oo(lt(this.ranges[t].anchor),lt(this.ranges[t].head));return new ro(e,this.primIndex)},ro.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},ro.prototype.contains=function(e,t){t||(t=e);for(var n=0;n<this.ranges.length;n++){var i=this.ranges[n];if(at(t,i.from())>=0&&at(e,i.to())<=0)return n}return-1};var oo=function(e,t){this.anchor=e,this.head=t};function ao(e,t,n){var i=e&&e.options.selectionsMayTouch,r=t[n];t.sort((function(e,t){return at(e.from(),t.from())})),n=R(t,r);for(var o=1;o<t.length;o++){var a=t[o],s=t[o-1],l=at(s.to(),a.from());if(i&&!a.empty()?l>0:l>=0){var c=ut(s.from(),a.from()),u=ct(s.to(),a.to()),d=s.empty()?a.from()==a.head:s.from()==s.head;o<=n&&--n,t.splice(--o,2,new oo(d?u:c,d?c:u))}}return new ro(t,n)}function so(e,t){return new ro([new oo(e,t||e)],0)}function lo(e){return e.text?ot(e.from.line+e.text.length-1,X(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function co(e,t){if(at(e,t.from)<0)return e;if(at(e,t.to)<=0)return lo(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,i=e.ch;return e.line==t.to.line&&(i+=lo(t).ch-t.to.ch),ot(n,i)}function uo(e,t){for(var n=[],i=0;i<e.sel.ranges.length;i++){var r=e.sel.ranges[i];n.push(new oo(co(r.anchor,t),co(r.head,t)))}return ao(e.cm,n,e.sel.primIndex)}function ho(e,t,n){return e.line==t.line?ot(n.line,e.ch-t.ch+n.ch):ot(n.line+(e.line-t.line),e.ch)}function fo(e,t,n){for(var i=[],r=ot(e.first,0),o=r,a=0;a<t.length;a++){var s=t[a],l=ho(s.from,r,o),c=ho(lo(s),r,o);if(r=s.to,o=c,"around"==n){var u=e.sel.ranges[a],d=at(u.head,u.anchor)<0;i[a]=new oo(d?c:l,d?l:c)}else i[a]=new oo(l,l)}return new ro(i,e.sel.primIndex)}function po(e){e.doc.mode=We(e.options,e.doc.modeOption),mo(e)}function mo(e){e.doc.iter((function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)})),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,Pr(e,100),e.state.modeGen++,e.curOp&&Fi(e)}function go(e,t){return 0==t.from.ch&&0==t.to.ch&&""==X(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function vo(e,t,n,i){function r(e){return n?n[e]:null}function o(e,n,r){un(e,n,r,i),Dn(e,"change",e,t)}function a(e,t){for(var n=[],o=e;o<t;++o)n.push(new cn(c[o],r(o),i));return n}var s=t.from,l=t.to,c=t.text,u=Ze(e,s.line),d=Ze(e,l.line),h=X(c),f=r(c.length-1),p=l.line-s.line;if(t.full)e.insert(0,a(0,c.length)),e.remove(c.length,e.size-c.length);else if(go(e,t)){var m=a(0,c.length-1);o(d,d.text,f),p&&e.remove(s.line,p),m.length&&e.insert(s.line,m)}else if(u==d)if(1==c.length)o(u,u.text.slice(0,s.ch)+h+u.text.slice(l.ch),f);else{var g=a(1,c.length-1);g.push(new cn(h+u.text.slice(l.ch),f,i)),o(u,u.text.slice(0,s.ch)+c[0],r(0)),e.insert(s.line+1,g)}else if(1==c.length)o(u,u.text.slice(0,s.ch)+c[0]+d.text.slice(l.ch),r(0)),e.remove(s.line+1,p);else{o(u,u.text.slice(0,s.ch)+c[0],r(0)),o(d,h+d.text.slice(l.ch),f);var v=a(1,c.length-1);p>1&&e.remove(s.line+1,p-1),e.insert(s.line+1,v)}Dn(e,"change",e,t)}function bo(e,t,n){function i(e,r,o){if(e.linked)for(var a=0;a<e.linked.length;++a){var s=e.linked[a];if(s.doc!=r){var l=o&&s.sharedHist;n&&!l||(t(s.doc,l),i(s.doc,e,l))}}}i(e,null,!0)}function yo(e,t){if(t.cm)throw new Error("This document is already in use.");e.doc=t,t.cm=e,Li(e),po(e),wo(e),e.options.lineWrapping||ln(e),e.options.mode=t.modeOption,Fi(e)}function wo(e){("rtl"==e.doc.direction?L:T)(e.display.lineDiv,"CodeMirror-rtl")}function xo(e){Ar(e,(function(){wo(e),Fi(e)}))}function _o(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function ko(e,t){var n={from:lt(t.from),to:lo(t),text:Qe(e,t.from,t.to)};return Mo(e,n,t.from.line,t.to.line+1),bo(e,(function(e){return Mo(e,n,t.from.line,t.to.line+1)}),!0),n}function Co(e){while(e.length){var t=X(e);if(!t.ranges)break;e.pop()}}function So(e,t){return t?(Co(e.done),X(e.done)):e.done.length&&!X(e.done).ranges?X(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),X(e.done)):void 0}function Oo(e,t,n,i){var r=e.history;r.undone.length=0;var o,a,s=+new Date;if((r.lastOp==i||r.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&r.lastModTime>s-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=So(r,r.lastOp==i)))a=X(o.changes),0==at(t.from,t.to)&&0==at(t.from,a.to)?a.to=lo(t):o.changes.push(ko(e,t));else{var l=X(r.done);l&&l.ranges||Do(e.sel,r.done),o={changes:[ko(e,t)],generation:r.generation},r.done.push(o);while(r.done.length>r.undoDepth)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(n),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=s,r.lastOp=r.lastSelOp=i,r.lastOrigin=r.lastSelOrigin=t.origin,a||be(e,"historyAdded")}function To(e,t,n,i){var r=t.charAt(0);return"*"==r||"+"==r&&n.ranges.length==i.ranges.length&&n.somethingSelected()==i.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function Eo(e,t,n,i){var r=e.history,o=i&&i.origin;n==r.lastSelOp||o&&r.lastSelOrigin==o&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==o||To(e,o,X(r.done),t))?r.done[r.done.length-1]=t:Do(t,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=o,r.lastSelOp=n,i&&!1!==i.clearRedo&&Co(r.undone)}function Do(e,t){var n=X(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Mo(e,t,n,i){var r=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,i),(function(n){n.markedSpans&&((r||(r=t["spans_"+e.id]={}))[o]=n.markedSpans),++o}))}function Ao(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marker.explicitlyCleared?t||(t=e.slice(0,n)):t&&t.push(e[n]);return t?t.length?t:null:e}function No(e,t){var n=t["spans_"+e.id];if(!n)return null;for(var i=[],r=0;r<t.text.length;++r)i.push(Ao(n[r]));return i}function Io(e,t){var n=No(e,t),i=zt(e,t);if(!n)return i;if(!i)return n;for(var r=0;r<n.length;++r){var o=n[r],a=i[r];if(o&&a)e:for(var s=0;s<a.length;++s){for(var l=a[s],c=0;c<o.length;++c)if(o[c].marker==l.marker)continue e;o.push(l)}else a&&(n[r]=a)}return n}function Lo(e,t,n){for(var i=[],r=0;r<e.length;++r){var o=e[r];if(o.ranges)i.push(n?ro.prototype.deepCopy.call(o):o);else{var a=o.changes,s=[];i.push({changes:s});for(var l=0;l<a.length;++l){var c=a[l],u=void 0;if(s.push({from:c.from,to:c.to,text:c.text}),t)for(var d in c)(u=d.match(/^spans_(\d+)$/))&&R(t,Number(u[1]))>-1&&(X(s)[d]=c[d],delete c[d])}}}return i}function Po(e,t,n,i){if(i){var r=e.anchor;if(n){var o=at(t,r)<0;o!=at(n,r)<0?(r=t,t=n):o!=at(t,n)<0&&(t=n)}return new oo(r,t)}return new oo(n||t,t)}function $o(e,t,n,i,r){null==r&&(r=e.cm&&(e.cm.display.shift||e.extend)),Vo(e,new ro([Po(e.sel.primary(),t,n,r)],0),i)}function Fo(e,t,n){for(var i=[],r=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)i[o]=Po(e.sel.ranges[o],t[o],null,r);var a=ao(e.cm,i,e.sel.primIndex);Vo(e,a,n)}function jo(e,t,n,i){var r=e.sel.ranges.slice(0);r[t]=n,Vo(e,ao(e.cm,r,e.sel.primIndex),i)}function zo(e,t,n,i){Vo(e,so(t,n),i)}function Bo(e,t,n){var i={ranges:t.ranges,update:function(t){this.ranges=[];for(var n=0;n<t.length;n++)this.ranges[n]=new oo(ht(e,t[n].anchor),ht(e,t[n].head))},origin:n&&n.origin};return be(e,"beforeSelectionChange",e,i),e.cm&&be(e.cm,"beforeSelectionChange",e.cm,i),i.ranges!=t.ranges?ao(e.cm,i.ranges,i.ranges.length-1):t}function Ro(e,t,n){var i=e.history.done,r=X(i);r&&r.ranges?(i[i.length-1]=t,Ho(e,t,n)):Vo(e,t,n)}function Vo(e,t,n){Ho(e,t,n),Eo(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function Ho(e,t,n){(xe(e,"beforeSelectionChange")||e.cm&&xe(e.cm,"beforeSelectionChange"))&&(t=Bo(e,t,n));var i=n&&n.bias||(at(t.primary().head,e.sel.primary().head)<0?-1:1);Wo(e,Uo(e,t,i,!0)),n&&!1===n.scroll||!e.cm||sr(e.cm)}function Wo(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=1,e.cm.curOp.selectionChanged=!0,we(e.cm)),Dn(e,"cursorActivity",e))}function qo(e){Wo(e,Uo(e,e.sel,null,!1))}function Uo(e,t,n,i){for(var r,o=0;o<t.ranges.length;o++){var a=t.ranges[o],s=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],l=Go(e,a.anchor,s&&s.anchor,n,i),c=Go(e,a.head,s&&s.head,n,i);(r||l!=a.anchor||c!=a.head)&&(r||(r=t.ranges.slice(0,o)),r[o]=new oo(l,c))}return r?ao(e.cm,r,t.primIndex):t}function Ko(e,t,n,i,r){var o=Ze(e,t.line);if(o.markedSpans)for(var a=0;a<o.markedSpans.length;++a){var s=o.markedSpans[a],l=s.marker,c="selectLeft"in l?!l.selectLeft:l.inclusiveLeft,u="selectRight"in l?!l.selectRight:l.inclusiveRight;if((null==s.from||(c?s.from<=t.ch:s.from<t.ch))&&(null==s.to||(u?s.to>=t.ch:s.to>t.ch))){if(r&&(be(l,"beforeCursorEnter"),l.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!l.atomic)continue;if(n){var d=l.find(i<0?1:-1),h=void 0;if((i<0?u:c)&&(d=Yo(e,d,-i,d&&d.line==t.line?o:null)),d&&d.line==t.line&&(h=at(d,n))&&(i<0?h<0:h>0))return Ko(e,d,t,i,r)}var f=l.find(i<0?-1:1);return(i<0?c:u)&&(f=Yo(e,f,i,f.line==t.line?o:null)),f?Ko(e,f,t,i,r):null}}return t}function Go(e,t,n,i,r){var o=i||1,a=Ko(e,t,n,o,r)||!r&&Ko(e,t,n,o,!0)||Ko(e,t,n,-o,r)||!r&&Ko(e,t,n,-o,!0);return a||(e.cantEdit=!0,ot(e.first,0))}function Yo(e,t,n,i){return n<0&&0==t.ch?t.line>e.first?ht(e,ot(t.line-1)):null:n>0&&t.ch==(i||Ze(e,t.line)).text.length?t.line<e.first+e.size-1?ot(t.line+1,0):null:new ot(t.line,t.ch+n)}function Xo(e){e.setSelection(ot(e.firstLine(),0),ot(e.lastLine()),W)}function Zo(e,t,n){var i={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return i.canceled=!0}};return n&&(i.update=function(t,n,r,o){t&&(i.from=ht(e,t)),n&&(i.to=ht(e,n)),r&&(i.text=r),void 0!==o&&(i.origin=o)}),be(e,"beforeChange",e,i),e.cm&&be(e.cm,"beforeChange",e.cm,i),i.canceled?(e.cm&&(e.cm.curOp.updateInput=2),null):{from:i.from,to:i.to,text:i.text,origin:i.origin}}function Qo(e,t,n){if(e.cm){if(!e.cm.curOp)return Nr(e.cm,Qo)(e,t,n);if(e.cm.state.suppressEdits)return}if(!(xe(e,"beforeChange")||e.cm&&xe(e.cm,"beforeChange"))||(t=Zo(e,t,!0),t)){var i=Dt&&!n&&Rt(e,t.from,t.to);if(i)for(var r=i.length-1;r>=0;--r)Jo(e,{from:i[r].from,to:i[r].to,text:r?[""]:t.text,origin:t.origin});else Jo(e,t)}}function Jo(e,t){if(1!=t.text.length||""!=t.text[0]||0!=at(t.from,t.to)){var n=uo(e,t);Oo(e,t,n,e.cm?e.cm.curOp.id:NaN),na(e,t,n,zt(e,t));var i=[];bo(e,(function(e,n){n||-1!=R(i,e.history)||(sa(e.history,t),i.push(e.history)),na(e,t,null,zt(e,t))}))}}function ea(e,t,n){var i=e.cm&&e.cm.state.suppressEdits;if(!i||n){for(var r,o=e.history,a=e.sel,s="undo"==t?o.done:o.undone,l="undo"==t?o.undone:o.done,c=0;c<s.length;c++)if(r=s[c],n?r.ranges&&!r.equals(e.sel):!r.ranges)break;if(c!=s.length){for(o.lastOrigin=o.lastSelOrigin=null;;){if(r=s.pop(),!r.ranges){if(i)return void s.push(r);break}if(Do(r,l),n&&!r.equals(e.sel))return void Vo(e,r,{clearRedo:!1});a=r}var u=[];Do(a,l),l.push({changes:u,generation:o.generation}),o.generation=r.generation||++o.maxGeneration;for(var d=xe(e,"beforeChange")||e.cm&&xe(e.cm,"beforeChange"),h=function(n){var i=r.changes[n];if(i.origin=t,d&&!Zo(e,i,!1))return s.length=0,{};u.push(ko(e,i));var o=n?uo(e,i):X(s);na(e,i,o,Io(e,i)),!n&&e.cm&&e.cm.scrollIntoView({from:i.from,to:lo(i)});var a=[];bo(e,(function(e,t){t||-1!=R(a,e.history)||(sa(e.history,i),a.push(e.history)),na(e,i,null,Io(e,i))}))},f=r.changes.length-1;f>=0;--f){var p=h(f);if(p)return p.v}}}}function ta(e,t){if(0!=t&&(e.first+=t,e.sel=new ro(Z(e.sel.ranges,(function(e){return new oo(ot(e.anchor.line+t,e.anchor.ch),ot(e.head.line+t,e.head.ch))})),e.sel.primIndex),e.cm)){Fi(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,i=n.viewFrom;i<n.viewTo;i++)ji(e.cm,i,"gutter")}}function na(e,t,n,i){if(e.cm&&!e.cm.curOp)return Nr(e.cm,na)(e,t,n,i);if(t.to.line<e.first)ta(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var r=t.text.length-1-(e.first-t.from.line);ta(e,r),t={from:ot(e.first,0),to:ot(t.to.line+r,t.to.ch),text:[X(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:ot(o,Ze(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Qe(e,t.from,t.to),n||(n=uo(e,t)),e.cm?ia(e.cm,t,i):vo(e,t,i),Ho(e,n,W),e.cantEdit&&Go(e,ot(e.firstLine(),0))&&(e.cantEdit=!1)}}function ia(e,t,n){var i=e.doc,r=e.display,o=t.from,a=t.to,s=!1,l=o.line;e.options.lineWrapping||(l=tt(Qt(Ze(i,o.line))),i.iter(l,a.line+1,(function(e){if(e==r.maxLine)return s=!0,!0}))),i.sel.contains(t.from,t.to)>-1&&we(e),vo(i,t,n,Ii(e)),e.options.lineWrapping||(i.iter(l,o.line+t.text.length,(function(e){var t=sn(e);t>r.maxLineLength&&(r.maxLine=e,r.maxLineLength=t,r.maxLineChanged=!0,s=!1)})),s&&(e.curOp.updateMaxLine=!0)),Et(i,o.line),Pr(e,400);var c=t.text.length-(a.line-o.line)-1;t.full?Fi(e):o.line!=a.line||1!=t.text.length||go(e.doc,t)?Fi(e,o.line,a.line+1,c):ji(e,o.line,"text");var u=xe(e,"changes"),d=xe(e,"change");if(d||u){var h={from:o,to:a,text:t.text,removed:t.removed,origin:t.origin};d&&Dn(e,"change",e,h),u&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(h)}e.display.selForContextMenu=null}function ra(e,t,n,i,r){var o;i||(i=n),at(i,n)<0&&(o=[i,n],n=o[0],i=o[1]),"string"==typeof t&&(t=e.splitLines(t)),Qo(e,{from:n,to:i,text:t,origin:r})}function oa(e,t,n,i){n<e.line?e.line+=i:t<e.line&&(e.line=t,e.ch=0)}function aa(e,t,n,i){for(var r=0;r<e.length;++r){var o=e[r],a=!0;if(o.ranges){o.copied||(o=e[r]=o.deepCopy(),o.copied=!0);for(var s=0;s<o.ranges.length;s++)oa(o.ranges[s].anchor,t,n,i),oa(o.ranges[s].head,t,n,i)}else{for(var l=0;l<o.changes.length;++l){var c=o.changes[l];if(n<c.from.line)c.from=ot(c.from.line+i,c.from.ch),c.to=ot(c.to.line+i,c.to.ch);else if(t<=c.to.line){a=!1;break}}a||(e.splice(0,r+1),r=0)}}}function sa(e,t){var n=t.from.line,i=t.to.line,r=t.text.length-(i-n)-1;aa(e.done,n,i,r),aa(e.undone,n,i,r)}function la(e,t,n,i){var r=t,o=t;return"number"==typeof t?o=Ze(e,dt(e,t)):r=tt(t),null==r?null:(i(o,r)&&e.cm&&ji(e.cm,r,n),o)}function ca(e){this.lines=e,this.parent=null;for(var t=0,n=0;n<e.length;++n)e[n].parent=this,t+=e[n].height;this.height=t}function ua(e){this.children=e;for(var t=0,n=0,i=0;i<e.length;++i){var r=e[i];t+=r.chunkSize(),n+=r.height,r.parent=this}this.size=t,this.height=n,this.parent=null}oo.prototype.from=function(){return ut(this.anchor,this.head)},oo.prototype.to=function(){return ct(this.anchor,this.head)},oo.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},ca.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var n=e,i=e+t;n<i;++n){var r=this.lines[n];this.height-=r.height,dn(r),Dn(r,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,n){this.height+=n,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var i=0;i<t.length;++i)t[i].parent=this},iterN:function(e,t,n){for(var i=e+t;e<i;++e)if(n(this.lines[e]))return!0}},ua.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var n=0;n<this.children.length;++n){var i=this.children[n],r=i.chunkSize();if(e<r){var o=Math.min(t,r-e),a=i.height;if(i.removeInner(e,o),this.height-=a-i.height,r==o&&(this.children.splice(n--,1),i.parent=null),0==(t-=o))break;e=0}else e-=r}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof ca))){var s=[];this.collapse(s),this.children=[new ca(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,n){this.size+=t.length,this.height+=n;for(var i=0;i<this.children.length;++i){var r=this.children[i],o=r.chunkSize();if(e<=o){if(r.insertInner(e,t,n),r.lines&&r.lines.length>50){for(var a=r.lines.length%25+25,s=a;s<r.lines.length;){var l=new ca(r.lines.slice(s,s+=25));r.height-=l.height,this.children.splice(++i,0,l),l.parent=this}r.lines=r.lines.slice(0,a),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=e.children.splice(e.children.length-5,5),n=new ua(t);if(e.parent){e.size-=n.size,e.height-=n.height;var i=R(e.parent.children,e);e.parent.children.splice(i+1,0,n)}else{var r=new ua(e.children);r.parent=e,e.children=[r,n],e=r}n.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var i=0;i<this.children.length;++i){var r=this.children[i],o=r.chunkSize();if(e<o){var a=Math.min(t,o-e);if(r.iterN(e,a,n))return!0;if(0==(t-=a))break;e=0}else e-=o}}};var da=function(e,t,n){if(n)for(var i in n)n.hasOwnProperty(i)&&(this[i]=n[i]);this.doc=e,this.node=t};function ha(e,t,n){an(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&ar(e,n)}function fa(e,t,n,i){var r=new da(e,n,i),o=e.cm;return o&&r.noHScroll&&(o.display.alignWidgets=!0),la(e,t,"widget",(function(t){var n=t.widgets||(t.widgets=[]);if(null==r.insertAt?n.push(r):n.splice(Math.min(n.length,Math.max(0,r.insertAt)),0,r),r.line=t,o&&!rn(e,t)){var i=an(t)<e.scrollTop;et(t,t.height+Hn(r)),i&&ar(o,r.height),o.curOp.forceUpdate=!0}return!0})),o&&Dn(o,"lineWidgetAdded",o,r,"number"==typeof t?t:tt(t)),r}da.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,n=this.line,i=tt(n);if(null!=i&&t){for(var r=0;r<t.length;++r)t[r]==this&&t.splice(r--,1);t.length||(n.widgets=null);var o=Hn(this);et(n,Math.max(0,n.height-o)),e&&(Ar(e,(function(){ha(e,n,-o),ji(e,i,"widget")})),Dn(e,"lineWidgetCleared",e,this,i))}},da.prototype.changed=function(){var e=this,t=this.height,n=this.doc.cm,i=this.line;this.height=null;var r=Hn(this)-t;r&&(rn(this.doc,i)||et(i,i.height+r),n&&Ar(n,(function(){n.curOp.forceUpdate=!0,ha(n,i,r),Dn(n,"lineWidgetChanged",n,e,tt(i))})))},_e(da);var pa=0,ma=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++pa};function ga(e,t,n,i,r){if(i&&i.shared)return ba(e,t,n,i,r);if(e.cm&&!e.cm.curOp)return Nr(e.cm,ga)(e,t,n,i,r);var o=new ma(e,r),a=at(t,n);if(i&&j(i,o,!1),a>0||0==a&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=A("span",[o.replacedWith],"CodeMirror-widget"),i.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),i.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(Zt(e,t.line,t,n,o)||t.line!=n.line&&Zt(e,n.line,t,n,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Nt()}o.addToHistory&&Oo(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var s,l=t.line,c=e.cm;if(e.iter(l,n.line+1,(function(e){c&&o.collapsed&&!c.options.lineWrapping&&Qt(e)==c.display.maxLine&&(s=!0),o.collapsed&&l!=t.line&&et(e,0),$t(e,new It(o,l==t.line?t.ch:null,l==n.line?n.ch:null)),++l})),o.collapsed&&e.iter(t.line,n.line+1,(function(t){rn(e,t)&&et(t,0)})),o.clearOnEnter&&me(o,"beforeCursorEnter",(function(){return o.clear()})),o.readOnly&&(At(),(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++pa,o.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),o.collapsed)Fi(c,t.line,n.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var u=t.line;u<=n.line;u++)ji(c,u,"text");o.atomic&&qo(c.doc),Dn(c,"markerAdded",c,o)}return o}ma.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&kr(e),xe(this,"clear")){var n=this.find();n&&Dn(this,"clear",n.from,n.to)}for(var i=null,r=null,o=0;o<this.lines.length;++o){var a=this.lines[o],s=Lt(a.markedSpans,this);e&&!this.collapsed?ji(e,tt(a),"text"):e&&(null!=s.to&&(r=tt(a)),null!=s.from&&(i=tt(a))),a.markedSpans=Pt(a.markedSpans,s),null==s.from&&this.collapsed&&!rn(this.doc,a)&&e&&et(a,Di(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var l=0;l<this.lines.length;++l){var c=Qt(this.lines[l]),u=sn(c);u>e.display.maxLineLength&&(e.display.maxLine=c,e.display.maxLineLength=u,e.display.maxLineChanged=!0)}null!=i&&e&&this.collapsed&&Fi(e,i,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&qo(e.doc)),e&&Dn(e,"markerCleared",e,this,i,r),t&&Cr(e),this.parent&&this.parent.clear()}},ma.prototype.find=function(e,t){var n,i;null==e&&"bookmark"==this.type&&(e=1);for(var r=0;r<this.lines.length;++r){var o=this.lines[r],a=Lt(o.markedSpans,this);if(null!=a.from&&(n=ot(t?o:tt(o),a.from),-1==e))return n;if(null!=a.to&&(i=ot(t?o:tt(o),a.to),1==e))return i}return n&&{from:n,to:i}},ma.prototype.changed=function(){var e=this,t=this.find(-1,!0),n=this,i=this.doc.cm;t&&i&&Ar(i,(function(){var r=t.line,o=tt(t.line),a=ti(i,o);if(a&&(ui(a),i.curOp.selectionChanged=i.curOp.forceUpdate=!0),i.curOp.updateMaxLine=!0,!rn(n.doc,r)&&null!=n.height){var s=n.height;n.height=null;var l=Hn(n)-s;l&&et(r,r.height+l)}Dn(i,"markerChanged",i,e)}))},ma.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=R(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},ma.prototype.detachLine=function(e){if(this.lines.splice(R(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},_e(ma);var va=function(e,t){this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=this};function ba(e,t,n,i,r){i=j(i),i.shared=!1;var o=[ga(e,t,n,i,r)],a=o[0],s=i.widgetNode;return bo(e,(function(e){s&&(i.widgetNode=s.cloneNode(!0)),o.push(ga(e,ht(e,t),ht(e,n),i,r));for(var l=0;l<e.linked.length;++l)if(e.linked[l].isParent)return;a=X(o)})),new va(o,a)}function ya(e){return e.findMarks(ot(e.first,0),e.clipPos(ot(e.lastLine())),(function(e){return e.parent}))}function wa(e,t){for(var n=0;n<t.length;n++){var i=t[n],r=i.find(),o=e.clipPos(r.from),a=e.clipPos(r.to);if(at(o,a)){var s=ga(e,o,a,i.primary,i.primary.type);i.markers.push(s),s.parent=i}}}function xa(e){for(var t=function(t){var n=e[t],i=[n.primary.doc];bo(n.primary.doc,(function(e){return i.push(e)}));for(var r=0;r<n.markers.length;r++){var o=n.markers[r];-1==R(i,o.doc)&&(o.parent=null,n.markers.splice(r--,1))}},n=0;n<e.length;n++)t(n)}va.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();Dn(this,"clear")}},va.prototype.find=function(e,t){return this.primary.find(e,t)},_e(va);var _a=0,ka=function e(t,n,i,r,o){if(!(this instanceof e))return new e(t,n,i,r,o);null==i&&(i=0),ua.call(this,[new ca([new cn("",null)])]),this.first=i,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=i;var a=ot(i,0);this.sel=so(a),this.history=new _o(null),this.id=++_a,this.modeOption=n,this.lineSep=r,this.direction="rtl"==o?"rtl":"ltr",this.extend=!1,"string"==typeof t&&(t=this.splitLines(t)),vo(this,{from:a,to:a,text:t}),Vo(this,so(a),W)};ka.prototype=ee(ua.prototype,{constructor:ka,iter:function(e,t,n){n?this.iterN(e-this.first,t-e,n):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var n=0,i=0;i<t.length;++i)n+=t[i].height;this.insertInner(e-this.first,t,n)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=Je(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:Lr((function(e){var t=ot(this.first,0),n=this.first+this.size-1;Qo(this,{from:t,to:ot(n,Ze(this,n).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),this.cm&&lr(this.cm,0,0),Vo(this,so(t),W)})),replaceRange:function(e,t,n,i){t=ht(this,t),n=n?ht(this,n):t,ra(this,e,t,n,i)},getRange:function(e,t,n){var i=Qe(this,ht(this,e),ht(this,t));return!1===n?i:i.join(n||this.lineSeparator())},newRange:function(e,t){return new oo(e,t)},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(it(this,e))return Ze(this,e)},getLineNumber:function(e){return tt(e)},getLineHandleVisualStart:function(e){return"number"==typeof e&&(e=Ze(this,e)),Qt(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return ht(this,e)},getCursor:function(e){var t,n=this.sel.primary();return t=null==e||"head"==e?n.head:"anchor"==e?n.anchor:"end"==e||"to"==e||!1===e?n.to():n.from(),t},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Lr((function(e,t,n){zo(this,ht(this,"number"==typeof e?ot(e,t||0):e),null,n)})),setSelection:Lr((function(e,t,n){zo(this,ht(this,e),ht(this,t||e),n)})),extendSelection:Lr((function(e,t,n){$o(this,ht(this,e),t&&ht(this,t),n)})),extendSelections:Lr((function(e,t){Fo(this,pt(this,e),t)})),extendSelectionsBy:Lr((function(e,t){var n=Z(this.sel.ranges,e);Fo(this,pt(this,n),t)})),setSelections:Lr((function(e,t,n){if(e.length){for(var i=[],r=0;r<e.length;r++)i[r]=new oo(ht(this,e[r].anchor),ht(this,e[r].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),Vo(this,ao(this.cm,i,t),n)}})),addSelection:Lr((function(e,t,n){var i=this.sel.ranges.slice(0);i.push(new oo(ht(this,e),ht(this,t||e))),Vo(this,ao(this.cm,i,i.length-1),n)})),getSelection:function(e){for(var t,n=this.sel.ranges,i=0;i<n.length;i++){var r=Qe(this,n[i].from(),n[i].to());t=t?t.concat(r):r}return!1===e?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,i=0;i<n.length;i++){var r=Qe(this,n[i].from(),n[i].to());!1!==e&&(r=r.join(e||this.lineSeparator())),t[i]=r}return t},replaceSelection:function(e,t,n){for(var i=[],r=0;r<this.sel.ranges.length;r++)i[r]=e;this.replaceSelections(i,t,n||"+input")},replaceSelections:Lr((function(e,t,n){for(var i=[],r=this.sel,o=0;o<r.ranges.length;o++){var a=r.ranges[o];i[o]={from:a.from(),to:a.to(),text:this.splitLines(e[o]),origin:n}}for(var s=t&&"end"!=t&&fo(this,i,t),l=i.length-1;l>=0;l--)Qo(this,i[l]);s?Ro(this,s):this.cm&&sr(this.cm)})),undo:Lr((function(){ea(this,"undo")})),redo:Lr((function(){ea(this,"redo")})),undoSelection:Lr((function(){ea(this,"undo",!0)})),redoSelection:Lr((function(){ea(this,"redo",!0)})),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,i=0;i<e.done.length;i++)e.done[i].ranges||++t;for(var r=0;r<e.undone.length;r++)e.undone[r].ranges||++n;return{undo:t,redo:n}},clearHistory:function(){var e=this;this.history=new _o(this.history.maxGeneration),bo(this,(function(t){return t.history=e.history}),!0)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:Lo(this.history.done),undone:Lo(this.history.undone)}},setHistory:function(e){var t=this.history=new _o(this.history.maxGeneration);t.done=Lo(e.done.slice(0),null,!0),t.undone=Lo(e.undone.slice(0),null,!0)},setGutterMarker:Lr((function(e,t,n){return la(this,e,"gutter",(function(e){var i=e.gutterMarkers||(e.gutterMarkers={});return i[t]=n,!n&&re(i)&&(e.gutterMarkers=null),!0}))})),clearGutter:Lr((function(e){var t=this;this.iter((function(n){n.gutterMarkers&&n.gutterMarkers[e]&&la(t,n,"gutter",(function(){return n.gutterMarkers[e]=null,re(n.gutterMarkers)&&(n.gutterMarkers=null),!0}))}))})),lineInfo:function(e){var t;if("number"==typeof e){if(!it(this,e))return null;if(t=e,e=Ze(this,e),!e)return null}else if(t=tt(e),null==t)return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:Lr((function(e,t,n){return la(this,e,"gutter"==t?"gutter":"class",(function(e){var i="text"==t?"textClass":"background"==t?"bgClass":"gutter"==t?"gutterClass":"wrapClass";if(e[i]){if(S(n).test(e[i]))return!1;e[i]+=" "+n}else e[i]=n;return!0}))})),removeLineClass:Lr((function(e,t,n){return la(this,e,"gutter"==t?"gutter":"class",(function(e){var i="text"==t?"textClass":"background"==t?"bgClass":"gutter"==t?"gutterClass":"wrapClass",r=e[i];if(!r)return!1;if(null==n)e[i]=null;else{var o=r.match(S(n));if(!o)return!1;var a=o.index+o[0].length;e[i]=r.slice(0,o.index)+(o.index&&a!=r.length?" ":"")+r.slice(a)||null}return!0}))})),addLineWidget:Lr((function(e,t,n){return fa(this,e,t,n)})),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return ga(this,ht(this,e),ht(this,t),n,n&&n.type||"range")},setBookmark:function(e,t){var n={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return e=ht(this,e),ga(this,e,e,n,"bookmark")},findMarksAt:function(e){e=ht(this,e);var t=[],n=Ze(this,e.line).markedSpans;if(n)for(var i=0;i<n.length;++i){var r=n[i];(null==r.from||r.from<=e.ch)&&(null==r.to||r.to>=e.ch)&&t.push(r.marker.parent||r.marker)}return t},findMarks:function(e,t,n){e=ht(this,e),t=ht(this,t);var i=[],r=e.line;return this.iter(e.line,t.line+1,(function(o){var a=o.markedSpans;if(a)for(var s=0;s<a.length;s++){var l=a[s];null!=l.to&&r==e.line&&e.ch>=l.to||null==l.from&&r!=e.line||null!=l.from&&r==t.line&&l.from>=t.ch||n&&!n(l.marker)||i.push(l.marker.parent||l.marker)}++r})),i},getAllMarks:function(){var e=[];return this.iter((function(t){var n=t.markedSpans;if(n)for(var i=0;i<n.length;++i)null!=n[i].from&&e.push(n[i].marker)})),e},posFromIndex:function(e){var t,n=this.first,i=this.lineSeparator().length;return this.iter((function(r){var o=r.text.length+i;if(o>e)return t=e,!0;e-=o,++n})),ht(this,ot(n,t))},indexFromPos:function(e){e=ht(this,e);var t=e.ch;if(e.line<this.first||e.ch<0)return 0;var n=this.lineSeparator().length;return this.iter(this.first,e.line,(function(e){t+=e.text.length+n})),t},copy:function(e){var t=new ka(Je(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,n=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<n&&(n=e.to);var i=new ka(Je(this,t,n),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(i.history=this.history),(this.linked||(this.linked=[])).push({doc:i,sharedHist:e.sharedHist}),i.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],wa(i,ya(this)),i},unlinkDoc:function(e){if(e instanceof Fs&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t){var n=this.linked[t];if(n.doc==e){this.linked.splice(t,1),e.unlinkDoc(this),xa(ya(this));break}}if(e.history==this.history){var i=[e.id];bo(e,(function(e){return i.push(e.id)}),!0),e.history=new _o(null),e.history.done=Lo(this.history.done,i),e.history.undone=Lo(this.history.undone,i)}},iterLinkedDocs:function(e){bo(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):Le(e)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:Lr((function(e){"rtl"!=e&&(e="ltr"),e!=this.direction&&(this.direction=e,this.iter((function(e){return e.order=null})),this.cm&&xo(this.cm))}))}),ka.prototype.eachLine=ka.prototype.iter;var Ca=0;function Sa(e){var t=this;if(Ea(t),!ye(t,e)&&!Wn(t.display,e)){ke(e),s&&(Ca=+new Date);var n=Pi(t,e,!0),i=e.dataTransfer.files;if(n&&!t.isReadOnly())if(i&&i.length&&window.FileReader&&window.File)for(var r=i.length,o=Array(r),a=0,l=function(){++a==r&&Nr(t,(function(){n=ht(t.doc,n);var e={from:n,to:n,text:t.doc.splitLines(o.filter((function(e){return null!=e})).join(t.doc.lineSeparator())),origin:"paste"};Qo(t.doc,e),Ro(t.doc,so(ht(t.doc,n),ht(t.doc,lo(e))))}))()},c=function(e,n){if(t.options.allowDropFileTypes&&-1==R(t.options.allowDropFileTypes,e.type))l();else{var i=new FileReader;i.onerror=function(){return l()},i.onload=function(){var e=i.result;/[\x00-\x08\x0e-\x1f]{2}/.test(e)||(o[n]=e),l()},i.readAsText(e)}},u=0;u<i.length;u++)c(i[u],u);else{if(t.state.draggingText&&t.doc.sel.contains(n)>-1)return t.state.draggingText(e),void setTimeout((function(){return t.display.input.focus()}),20);try{var d=e.dataTransfer.getData("Text");if(d){var h;if(t.state.draggingText&&!t.state.draggingText.copy&&(h=t.listSelections()),Ho(t.doc,so(n,n)),h)for(var f=0;f<h.length;++f)ra(t.doc,"",h[f].anchor,h[f].head,"drag");t.replaceSelection(d,"around","paste"),t.display.input.focus()}}catch(p){}}}}function Oa(e,t){if(s&&(!e.state.draggingText||+new Date-Ca<100))Oe(t);else if(!ye(e,t)&&!Wn(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!f)){var n=M("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",h&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),h&&n.parentNode.removeChild(n)}}function Ta(e,t){var n=Pi(e,t);if(n){var i=document.createDocumentFragment();qi(e,n,i),e.display.dragCursor||(e.display.dragCursor=M("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),D(e.display.dragCursor,i)}}function Ea(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function Da(e){if(document.getElementsByClassName){for(var t=document.getElementsByClassName("CodeMirror"),n=[],i=0;i<t.length;i++){var r=t[i].CodeMirror;r&&n.push(r)}n.length&&n[0].operation((function(){for(var t=0;t<n.length;t++)e(n[t])}))}}var Ma=!1;function Aa(){Ma||(Na(),Ma=!0)}function Na(){var e;me(window,"resize",(function(){null==e&&(e=setTimeout((function(){e=null,Da(Ia)}),100))})),me(window,"blur",(function(){return Da(Qi)}))}function Ia(e){var t=e.display;t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize()}for(var La={3:"Pause",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",145:"ScrollLock",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",224:"Mod",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},Pa=0;Pa<10;Pa++)La[Pa+48]=La[Pa+96]=String(Pa);for(var $a=65;$a<=90;$a++)La[$a]=String.fromCharCode($a);for(var Fa=1;Fa<=12;Fa++)La[Fa+111]=La[Fa+63235]="F"+Fa;var ja={};function za(e){var t,n,i,r,o=e.split(/-(?!$)/);e=o[o.length-1];for(var a=0;a<o.length-1;a++){var s=o[a];if(/^(cmd|meta|m)$/i.test(s))r=!0;else if(/^a(lt)?$/i.test(s))t=!0;else if(/^(c|ctrl|control)$/i.test(s))n=!0;else{if(!/^s(hift)?$/i.test(s))throw new Error("Unrecognized modifier name: "+s);i=!0}}return t&&(e="Alt-"+e),n&&(e="Ctrl-"+e),r&&(e="Cmd-"+e),i&&(e="Shift-"+e),e}function Ba(e){var t={};for(var n in e)if(e.hasOwnProperty(n)){var i=e[n];if(/^(name|fallthrough|(de|at)tach)$/.test(n))continue;if("..."==i){delete e[n];continue}for(var r=Z(n.split(" "),za),o=0;o<r.length;o++){var a=void 0,s=void 0;o==r.length-1?(s=r.join(" "),a=i):(s=r.slice(0,o+1).join(" "),a="...");var l=t[s];if(l){if(l!=a)throw new Error("Inconsistent bindings for "+s)}else t[s]=a}delete e[n]}for(var c in t)e[c]=t[c];return e}function Ra(e,t,n,i){t=qa(t);var r=t.call?t.call(e,i):t[e];if(!1===r)return"nothing";if("..."===r)return"multi";if(null!=r&&n(r))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return Ra(e,t.fallthrough,n,i);for(var o=0;o<t.fallthrough.length;o++){var a=Ra(e,t.fallthrough[o],n,i);if(a)return a}}}function Va(e){var t="string"==typeof e?e:La[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t}function Ha(e,t,n){var i=e;return t.altKey&&"Alt"!=i&&(e="Alt-"+e),(k?t.metaKey:t.ctrlKey)&&"Ctrl"!=i&&(e="Ctrl-"+e),(k?t.ctrlKey:t.metaKey)&&"Mod"!=i&&(e="Cmd-"+e),!n&&t.shiftKey&&"Shift"!=i&&(e="Shift-"+e),e}function Wa(e,t){if(h&&34==e.keyCode&&e["char"])return!1;var n=La[e.keyCode];return null!=n&&!e.altGraphKey&&(3==e.keyCode&&e.code&&(n=e.code),Ha(n,e,t))}function qa(e){return"string"==typeof e?ja[e]:e}function Ua(e,t){for(var n=e.doc.sel.ranges,i=[],r=0;r<n.length;r++){var o=t(n[r]);while(i.length&&at(o.from,X(i).to)<=0){var a=i.pop();if(at(a.from,o.from)<0){o.from=a.from;break}}i.push(o)}Ar(e,(function(){for(var t=i.length-1;t>=0;t--)ra(e.doc,"",i[t].from,i[t].to,"+delete");sr(e)}))}function Ka(e,t,n){var i=se(e.text,t+n,n);return i<0||i>e.text.length?null:i}function Ga(e,t,n){var i=Ka(e,t.ch,n);return null==i?null:new ot(t.line,i,n<0?"after":"before")}function Ya(e,t,n,i,r){if(e){"rtl"==t.doc.direction&&(r=-r);var o=fe(n,t.doc.direction);if(o){var a,s=r<0?X(o):o[0],l=r<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var u=ni(t,n);a=r<0?n.text.length-1:0;var d=ii(t,u,a).top;a=le((function(e){return ii(t,u,e).top==d}),r<0==(1==s.level)?s.from:s.to-1,a),"before"==c&&(a=Ka(n,a,1))}else a=r<0?s.to:s.from;return new ot(i,a,c)}}return new ot(i,r<0?n.text.length:0,r<0?"before":"after")}function Xa(e,t,n,i){var r=fe(t,e.doc.direction);if(!r)return Ga(t,n,i);n.ch>=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=de(r,n.ch,n.sticky),a=r[o];if("ltr"==e.doc.direction&&a.level%2==0&&(i>0?a.to>n.ch:a.from<n.ch))return Ga(t,n,i);var s,l=function(e,n){return Ka(t,e instanceof ot?e.ch:e,n)},c=function(n){return e.options.lineWrapping?(s=s||ni(e,t),Ci(e,t,s,n)):{begin:0,end:t.text.length}},u=c("before"==n.sticky?l(n,-1):n.ch);if("rtl"==e.doc.direction||1==a.level){var d=1==a.level==i<0,h=l(n,d?1:-1);if(null!=h&&(d?h<=a.to&&h<=u.end:h>=a.from&&h>=u.begin)){var f=d?"before":"after";return new ot(n.line,h,f)}}var p=function(e,t,i){for(var o=function(e,t){return t?new ot(n.line,l(e,1),"before"):new ot(n.line,e,"after")};e>=0&&e<r.length;e+=t){var a=r[e],s=t>0==(1!=a.level),c=s?i.begin:l(i.end,-1);if(a.from<=c&&c<a.to)return o(c,s);if(c=s?a.from:l(a.to,-1),i.begin<=c&&c<i.end)return o(c,s)}},m=p(o+i,i,u);if(m)return m;var g=i>0?u.end:l(u.begin,-1);return null==g||i>0&&g==t.text.length||(m=p(i>0?0:r.length-1,i,c(g)),!m)?null:m}ja.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},ja.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},ja.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},ja.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},ja["default"]=y?ja.macDefault:ja.pcDefault;var Za={selectAll:Xo,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),W)},killLine:function(e){return Ua(e,(function(t){if(t.empty()){var n=Ze(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line<e.lastLine()?{from:t.head,to:ot(t.head.line+1,0)}:{from:t.head,to:ot(t.head.line,n)}}return{from:t.from(),to:t.to()}}))},deleteLine:function(e){return Ua(e,(function(t){return{from:ot(t.from().line,0),to:ht(e.doc,ot(t.to().line+1,0))}}))},delLineLeft:function(e){return Ua(e,(function(e){return{from:ot(e.from().line,0),to:e.from()}}))},delWrappedLineLeft:function(e){return Ua(e,(function(t){var n=e.charCoords(t.head,"div").top+5,i=e.coordsChar({left:0,top:n},"div");return{from:i,to:t.from()}}))},delWrappedLineRight:function(e){return Ua(e,(function(t){var n=e.charCoords(t.head,"div").top+5,i=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div");return{from:t.from(),to:i}}))},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(ot(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(ot(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy((function(t){return Qa(e,t.head.line)}),{origin:"+move",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy((function(t){return es(e,t.head)}),{origin:"+move",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy((function(t){return Ja(e,t.head.line)}),{origin:"+move",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy((function(t){var n=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},"div")}),U)},goLineLeft:function(e){return e.extendSelectionsBy((function(t){var n=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:0,top:n},"div")}),U)},goLineLeftSmart:function(e){return e.extendSelectionsBy((function(t){var n=e.cursorCoords(t.head,"div").top+5,i=e.coordsChar({left:0,top:n},"div");return i.ch<e.getLine(i.line).search(/\S/)?es(e,t.head):i}),U)},goLineUp:function(e){return e.moveV(-1,"line")},goLineDown:function(e){return e.moveV(1,"line")},goPageUp:function(e){return e.moveV(-1,"page")},goPageDown:function(e){return e.moveV(1,"page")},goCharLeft:function(e){return e.moveH(-1,"char")},goCharRight:function(e){return e.moveH(1,"char")},goColumnLeft:function(e){return e.moveH(-1,"column")},goColumnRight:function(e){return e.moveH(1,"column")},goWordLeft:function(e){return e.moveH(-1,"word")},goGroupRight:function(e){return e.moveH(1,"group")},goGroupLeft:function(e){return e.moveH(-1,"group")},goWordRight:function(e){return e.moveH(1,"word")},delCharBefore:function(e){return e.deleteH(-1,"codepoint")},delCharAfter:function(e){return e.deleteH(1,"char")},delWordBefore:function(e){return e.deleteH(-1,"word")},delWordAfter:function(e){return e.deleteH(1,"word")},delGroupBefore:function(e){return e.deleteH(-1,"group")},delGroupAfter:function(e){return e.deleteH(1,"group")},indentAuto:function(e){return e.indentSelection("smart")},indentMore:function(e){return e.indentSelection("add")},indentLess:function(e){return e.indentSelection("subtract")},insertTab:function(e){return e.replaceSelection("\t")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),i=e.options.tabSize,r=0;r<n.length;r++){var o=n[r].from(),a=z(e.getLine(o.line),o.ch,i);t.push(Y(i-a%i))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(e){return Ar(e,(function(){for(var t=e.listSelections(),n=[],i=0;i<t.length;i++)if(t[i].empty()){var r=t[i].head,o=Ze(e.doc,r.line).text;if(o)if(r.ch==o.length&&(r=new ot(r.line,r.ch-1)),r.ch>0)r=new ot(r.line,r.ch+1),e.replaceRange(o.charAt(r.ch-1)+o.charAt(r.ch-2),ot(r.line,r.ch-2),r,"+transpose");else if(r.line>e.doc.first){var a=Ze(e.doc,r.line-1).text;a&&(r=new ot(r.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+a.charAt(a.length-1),ot(r.line-1,a.length-1),r,"+transpose"))}n.push(new oo(r,r))}e.setSelections(n)}))},newlineAndIndent:function(e){return Ar(e,(function(){var t=e.getOption("selection");if(t){var n=t.ranges;if(null!=n&&n!=[]&&n.length!=t.primary){var i=e.getRange(ot(0,0),e.getCursor()).length+1==n[t.primary].anchor.ch,r=0;return i||(r=e.getRange(ot(0,0),e.getCursor()).length+1-n[t.primary].anchor.ch),e.setSelection(ot(0,n[t.primary].anchor.ch+r),ot(0,n[t.primary].head.ch+r),{scroll:!1}),void t.primary++}if(n.length===t.primary)return e.setOption("selection",null),e.extendSelection(ot(e.lastLine()))}else if(void 0==e.getOption("isSupportReturn")||e.getOption("isSupportReturn")){for(var o=e.listSelections(),a=o.length-1;a>=0;a--)e.replaceRange(e.doc.lineSeparator(),o[a].anchor,o[a].head,"+input");o=e.listSelections();for(var s=0;s<o.length;s++)e.indentLine(o[s].from().line,null,!0);sr(e)}}))},openLine:function(e){return e.replaceSelection("\n","start")},toggleOverwrite:function(e){return e.toggleOverwrite()}};function Qa(e,t){var n=Ze(e.doc,t),i=Qt(n);return i!=n&&(t=tt(i)),Ya(!0,e,i,t,1)}function Ja(e,t){var n=Ze(e.doc,t),i=Jt(n);return i!=n&&(t=tt(i)),Ya(!0,e,n,t,-1)}function es(e,t){var n=Qa(e,t.line),i=Ze(e.doc,n.line),r=fe(i,e.doc.direction);if(!r||0==r[0].level){var o=Math.max(n.ch,i.text.search(/\S/)),a=t.line==n.line&&t.ch<=o&&t.ch;return ot(n.line,a?0:o,n.sticky)}return n}function ts(e,t,n){if("string"==typeof t&&(t=Za[t],!t))return!1;e.display.input.ensurePolled();var i=e.display.shift,r=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n&&(e.display.shift=!1),r=t(e)!=H}finally{e.display.shift=i,e.state.suppressEdits=!1}return r}function ns(e,t,n){for(var i=0;i<e.state.keyMaps.length;i++){var r=Ra(t,e.state.keyMaps[i],n,e);if(r)return r}return e.options.extraKeys&&Ra(t,e.options.extraKeys,n,e)||Ra(t,e.options.keyMap,n,e)}var is=new B;function rs(e,t,n,i){var r=e.state.keySeq;if(r){if(Va(t))return"handled";if(/\'$/.test(t)?e.state.keySeq=null:is.set(50,(function(){e.state.keySeq==r&&(e.state.keySeq=null,e.display.input.reset())})),os(e,r+" "+t,n,i))return!0}return os(e,t,n,i)}function os(e,t,n,i){var r=ns(e,t,i);return"multi"==r&&(e.state.keySeq=t),"handled"==r&&Dn(e,"keyHandled",e,t,n),"handled"!=r&&"multi"!=r||(ke(n),Gi(e)),!!r}function as(e,t){var n=Wa(t,!0);return!!n&&(t.shiftKey&&!e.state.keySeq?rs(e,"Shift-"+n,t,(function(t){return ts(e,t,!0)}))||rs(e,n,t,(function(t){if("string"==typeof t?/^go[A-Z]/.test(t):t.motion)return ts(e,t)})):rs(e,n,t,(function(t){return ts(e,t)})))}function ss(e,t,n){return rs(e,"'"+n+"'",t,(function(t){return ts(e,t,!0)}))}var ls=null;function cs(e){var t=this;if((!e.target||e.target==t.display.input.getField())&&(t.curOp.focus=I(),!ye(t,e))){s&&l<11&&27==e.keyCode&&(e.returnValue=!1);var i=e.keyCode;t.display.shift=16==i||e.shiftKey;var r=as(t,e);h&&(ls=r?i:null,r||88!=i||$e||!(y?e.metaKey:e.ctrlKey)||t.replaceSelection("",null,"cut")),n&&!y&&!r&&46==i&&e.shiftKey&&!e.ctrlKey&&document.execCommand&&document.execCommand("cut"),18!=i||/\bCodeMirror-crosshair\b/.test(t.display.lineDiv.className)||us(t)}}function us(e){var t=e.display.lineDiv;function n(e){18!=e.keyCode&&e.altKey||(T(t,"CodeMirror-crosshair"),ve(document,"keyup",n),ve(document,"mouseover",n))}L(t,"CodeMirror-crosshair"),me(document,"keyup",n),me(document,"mouseover",n)}function ds(e){16==e.keyCode&&(this.doc.sel.shift=!1),ye(this,e)}function hs(e){var t=this;if((!e.target||e.target==t.display.input.getField())&&!(Wn(t.display,e)||ye(t,e)||e.ctrlKey&&!e.altKey||y&&e.metaKey)){var n=e.keyCode,i=e.charCode;if(h&&n==ls)return ls=null,void ke(e);if(!h||e.which&&!(e.which<10)||!as(t,e)){var r=String.fromCharCode(null==i?n:i);"\b"!=r&&(ss(t,e,r)||t.display.input.onKeyPress(e))}}}var fs,ps,ms=400,gs=function(e,t,n){this.time=e,this.pos=t,this.button=n};function vs(e,t){var n=+new Date;return ps&&ps.compare(n,e,t)?(fs=ps=null,"triple"):fs&&fs.compare(n,e,t)?(ps=new gs(n,e,t),fs=null,"double"):(fs=new gs(n,e,t),ps=null,"single")}function bs(e){var t=this,n=t.display;if(!(ye(t,e)||n.activeTouch&&n.input.supportsTouch()))if(n.input.ensurePolled(),n.shift=e.shiftKey,Wn(n,e))c||(n.scroller.draggable=!1,setTimeout((function(){return n.scroller.draggable=!0}),100));else if(!Ts(t,e)){var i=Pi(t,e),r=Ee(e),o=i?vs(i,r):"single";window.focus(),1==r&&t.state.selectingText&&t.state.selectingText(e),i&&ys(t,r,i,o,e)||(1==r?i?xs(t,i,o,e):Te(e)==n.scroller&&ke(e):2==r?(i&&$o(t.doc,i),setTimeout((function(){return n.input.focus()}),20)):3==r&&(C?t.display.input.onContextMenu(e):Xi(t)))}}function ys(e,t,n,i,r){var o="Click";return"double"==i?o="Double"+o:"triple"==i&&(o="Triple"+o),o=(1==t?"Left":2==t?"Middle":"Right")+o,rs(e,Ha(o,r),r,(function(t){if("string"==typeof t&&(t=Za[t]),!t)return!1;var i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),i=t(e,n)!=H}finally{e.state.suppressEdits=!1}return i}))}function ws(e,t,n){var i=e.getOption("configureMouse"),r=i?i(e,t,n):{};if(null==r.unit){var o=w?n.shiftKey&&n.metaKey:n.altKey;r.unit=o?"rectangle":"single"==t?"char":"double"==t?"word":"line"}return(null==r.extend||e.doc.extend)&&(r.extend=e.doc.extend||n.shiftKey),null==r.addNew&&(r.addNew=y?n.metaKey:n.ctrlKey),null==r.moveOnDrag&&(r.moveOnDrag=!(y?n.altKey:n.ctrlKey)),r}function xs(e,t,n,i){s?setTimeout(F(Yi,e),0):e.curOp.focus=I();var r,o=ws(e,n,i),a=e.doc.sel;e.options.dragDrop&&Ae&&!e.isReadOnly()&&"single"==n&&(r=a.contains(t))>-1&&(at((r=a.ranges[r]).from(),t)<0||t.xRel>0)&&(at(r.to(),t)>0||t.xRel<0)?_s(e,i,t,o):Cs(e,i,t,o)}function _s(e,t,n,i){var r=e.display,o=!1,a=Nr(e,(function(t){c&&(r.scroller.draggable=!1),e.state.draggingText=!1,e.state.delayingBlurEvent&&(e.hasFocus()?e.state.delayingBlurEvent=!1:Xi(e)),ve(r.wrapper.ownerDocument,"mouseup",a),ve(r.wrapper.ownerDocument,"mousemove",u),ve(r.scroller,"dragstart",d),ve(r.scroller,"drop",a),o||(ke(t),i.addNew||$o(e.doc,n,null,null,i.extend),c&&!f||s&&9==l?setTimeout((function(){r.wrapper.ownerDocument.body.focus({preventScroll:!0}),r.input.focus()}),20):r.input.focus())})),u=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},d=function(){return o=!0};c&&(r.scroller.draggable=!0),e.state.draggingText=a,a.copy=!i.moveOnDrag,me(r.wrapper.ownerDocument,"mouseup",a),me(r.wrapper.ownerDocument,"mousemove",u),me(r.scroller,"dragstart",d),me(r.scroller,"drop",a),e.state.delayingBlurEvent=!0,setTimeout((function(){return r.input.focus()}),20),r.scroller.dragDrop&&r.scroller.dragDrop()}function ks(e,t,n){if("char"==n)return new oo(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new oo(ot(t.line,0),ht(e.doc,ot(t.line+1,0)));var i=n(e,t);return new oo(i.from,i.to)}function Cs(e,t,n,i){s&&Xi(e);var r=e.display,o=e.doc;ke(t);var a,l,c=o.sel,u=c.ranges;if(i.addNew&&!i.extend?(l=o.sel.contains(n),a=l>-1?u[l]:new oo(n,n)):(a=o.sel.primary(),l=o.sel.primIndex),"rectangle"==i.unit)i.addNew||(a=new oo(n,n)),n=Pi(e,t,!0,!0),l=-1;else{var d=ks(e,n,i.unit);a=i.extend?Po(a,d.anchor,d.head,i.extend):d}i.addNew?-1==l?(l=u.length,Vo(o,ao(e,u.concat([a]),l),{scroll:!1,origin:"*mouse"})):u.length>1&&u[l].empty()&&"char"==i.unit&&!i.extend?(Vo(o,ao(e,u.slice(0,l).concat(u.slice(l+1)),0),{scroll:!1,origin:"*mouse"}),c=o.sel):jo(o,l,a,q):(l=0,Vo(o,new ro([a],0),q),c=o.sel);var h=n;function f(t){if(0!=at(h,t))if(h=t,"rectangle"==i.unit){for(var r=[],s=e.options.tabSize,u=z(Ze(o,n.line).text,n.ch,s),d=z(Ze(o,t.line).text,t.ch,s),f=Math.min(u,d),p=Math.max(u,d),m=Math.min(n.line,t.line),g=Math.min(e.lastLine(),Math.max(n.line,t.line));m<=g;m++){var v=Ze(o,m).text,b=K(v,f,s);f==p?r.push(new oo(ot(m,b),ot(m,b))):v.length>b&&r.push(new oo(ot(m,b),ot(m,K(v,p,s))))}r.length||r.push(new oo(n,n)),Vo(o,ao(e,c.ranges.slice(0,l).concat(r),l),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var y,w=a,x=ks(e,t,i.unit),_=w.anchor;at(x.anchor,_)>0?(y=x.head,_=ut(w.from(),x.anchor)):(y=x.anchor,_=ct(w.to(),x.head));var k=c.ranges.slice(0);k[l]=Ss(e,new oo(ht(o,_),y)),Vo(o,ao(e,k,l),q)}}var p=r.wrapper.getBoundingClientRect(),m=0;function g(t){var n=++m,a=Pi(e,t,!0,"rectangle"==i.unit);if(a)if(0!=at(a,h)){e.curOp.focus=I(),f(a);var s=tr(r,o);(a.line>=s.to||a.line<s.from)&&setTimeout(Nr(e,(function(){m==n&&g(t)})),150)}else{var l=t.clientY<p.top?-20:t.clientY>p.bottom?20:0;l&&setTimeout(Nr(e,(function(){m==n&&(r.scroller.scrollTop+=l,g(t))})),50)}}function v(t){e.state.selectingText=!1,m=1/0,t&&(ke(t),r.input.focus()),ve(r.wrapper.ownerDocument,"mousemove",b),ve(r.wrapper.ownerDocument,"mouseup",y),o.history.lastSelOrigin=null}var b=Nr(e,(function(e){0!==e.buttons&&Ee(e)?g(e):v(e)})),y=Nr(e,v);e.state.selectingText=y,me(r.wrapper.ownerDocument,"mousemove",b),me(r.wrapper.ownerDocument,"mouseup",y)}function Ss(e,t){var n=t.anchor,i=t.head,r=Ze(e.doc,n.line);if(0==at(n,i)&&n.sticky==i.sticky)return t;var o=fe(r);if(!o)return t;var a=de(o,n.ch,n.sticky),s=o[a];if(s.from!=n.ch&&s.to!=n.ch)return t;var l,c=a+(s.from==n.ch==(1!=s.level)?0:1);if(0==c||c==o.length)return t;if(i.line!=n.line)l=(i.line-n.line)*("ltr"==e.doc.direction?1:-1)>0;else{var u=de(o,i.ch,i.sticky),d=u-a||(i.ch-n.ch)*(1==s.level?-1:1);l=u==c-1||u==c?d<0:d>0}var h=o[c+(l?-1:0)],f=l==(1==h.level),p=f?h.from:h.to,m=f?"after":"before";return n.ch==p&&n.sticky==m?t:new oo(new ot(n.line,p,m),i)}function Os(e,t,n,i){var r,o;if(t.touches)r=t.touches[0].clientX,o=t.touches[0].clientY;else try{r=t.clientX,o=t.clientY}catch(h){return!1}if(r>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;i&&ke(t);var a=e.display,s=a.lineDiv.getBoundingClientRect();if(o>s.bottom||!xe(e,n))return Se(t);o-=s.top-a.viewOffset;for(var l=0;l<e.display.gutterSpecs.length;++l){var c=a.gutters.childNodes[l];if(c&&c.getBoundingClientRect().right>=r){var u=nt(e.doc,o),d=e.display.gutterSpecs[l];return be(e,n,e,u,d.className,t),Se(t)}}}function Ts(e,t){return Os(e,t,"gutterClick",!0)}function Es(e,t){Wn(e.display,t)||Ds(e,t)||ye(e,t,"contextmenu")||C||e.display.input.onContextMenu(t)}function Ds(e,t){return!!xe(e,"gutterContextMenu")&&Os(e,t,"gutterContextMenu",!1)}function Ms(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),hi(e)}gs.prototype.compare=function(e,t,n){return this.time+ms>e&&0==at(t,this.pos)&&n==this.button};var As={toString:function(){return"CodeMirror.Init"}},Ns={},Is={};function Ls(e){var t=e.optionHandlers;function n(n,i,r,o){e.defaults[n]=i,r&&(t[n]=o?function(e,t,n){n!=As&&r(e,t,n)}:r)}e.defineOption=n,e.Init=As,n("value","",(function(e,t){return e.setValue(t)}),!0),n("mode",null,(function(e,t){e.doc.modeOption=t,po(e)}),!0),n("indentUnit",2,po,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,(function(e){mo(e),hi(e),Fi(e)}),!0),n("lineSeparator",null,(function(e,t){if(e.doc.lineSep=t,t){var n=[],i=e.doc.first;e.doc.iter((function(e){for(var r=0;;){var o=e.text.indexOf(t,r);if(-1==o)break;r=o+t.length,n.push(ot(i,o))}i++}));for(var r=n.length-1;r>=0;r--)ra(e.doc,t,n[r],ot(n[r].line,n[r].ch+t.length))}})),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200c\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,(function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=As&&e.refresh()})),n("specialCharPlaceholder",gn,(function(e){return e.refresh()}),!0),n("electricChars",!0),n("inputStyle",b?"contenteditable":"textarea",(function(){throw new Error("inputStyle can not (yet) be changed in a running editor")}),!0),n("spellcheck",!1,(function(e,t){return e.getInputField().spellcheck=t}),!0),n("autocorrect",!1,(function(e,t){return e.getInputField().autocorrect=t}),!0),n("autocapitalize",!1,(function(e,t){return e.getInputField().autocapitalize=t}),!0),n("rtlMoveVisually",!x),n("wholeLineUpdateBefore",!0),n("theme","default",(function(e){Ms(e),Zr(e)}),!0),n("keyMap","default",(function(e,t,n){var i=qa(t),r=n!=As&&qa(n);r&&r.detach&&r.detach(e,i),i.attach&&i.attach(e,r||null)})),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,$s,!0),n("gutters",[],(function(e,t){e.display.gutterSpecs=Yr(t,e.options.lineNumbers),Zr(e)}),!0),n("fixedGutter",!0,(function(e,t){e.display.gutters.style.left=t?Ni(e.display)+"px":"0",e.refresh()}),!0),n("coverGutterNextToScrollbar",!1,(function(e){return br(e)}),!0),n("scrollbarStyle","native",(function(e){xr(e),br(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)}),!0),n("lineNumbers",!1,(function(e,t){e.display.gutterSpecs=Yr(e.options.gutters,t),Zr(e)}),!0),n("firstLineNumber",1,Zr,!0),n("lineNumberFormatter",(function(e){return e}),Zr,!0),n("showCursorWhenSelecting",!1,Hi,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("selectionsMayTouch",!1),n("readOnly",!1,(function(e,t){"nocursor"==t&&(Qi(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)})),n("screenReaderLabel",null,(function(e,t){t=""===t?null:t,e.display.input.screenReaderLabelChanged(t)})),n("disableInput",!1,(function(e,t){t||e.display.input.reset()}),!0),n("dragDrop",!0,Ps),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,Hi,!0),n("singleCursorHeightPerLine",!0,Hi,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,mo,!0),n("addModeClass",!1,mo,!0),n("pollInterval",100),n("undoDepth",200,(function(e,t){return e.doc.history.undoDepth=t})),n("historyEventDelay",1250),n("viewportMargin",10,(function(e){return e.refresh()}),!0),n("maxHighlightLength",1e4,mo,!0),n("moveInputWithCursor",!0,(function(e,t){t||e.display.input.resetPosition()})),n("tabindex",null,(function(e,t){return e.display.input.getField().tabIndex=t||""})),n("autofocus",null),n("direction","ltr",(function(e,t){return e.doc.setDirection(t)}),!0),n("phrases",null)}function Ps(e,t,n){var i=n&&n!=As;if(!t!=!i){var r=e.display.dragFunctions,o=t?me:ve;o(e.display.scroller,"dragstart",r.start),o(e.display.scroller,"dragenter",r.enter),o(e.display.scroller,"dragover",r.over),o(e.display.scroller,"dragleave",r.leave),o(e.display.scroller,"drop",r.drop)}}function $s(e){e.options.lineWrapping?(L(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(T(e.display.wrapper,"CodeMirror-wrap"),ln(e)),Li(e),Fi(e),hi(e),setTimeout((function(){return br(e)}),100)}function Fs(e,t){var n=this;if(!(this instanceof Fs))return new Fs(e,t);this.options=t=t?j(t):{},j(Ns,t,!1);var i=t.value;"string"==typeof i?i=new ka(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOption=t.mode),this.doc=i;var r=new Fs.inputStyles[t.inputStyle](this),o=this.display=new Qr(e,i,r,t);for(var a in o.wrapper.CodeMirror=this,Ms(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),xr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new B,keySeq:null,specialChars:null},t.autofocus&&!b&&o.input.focus(),s&&l<11&&setTimeout((function(){return n.display.input.reset(!0)}),20),js(this),Aa(),kr(this),this.curOp.forceUpdate=!0,yo(this,i),t.autofocus&&!b||this.hasFocus()?setTimeout((function(){n.hasFocus()&&!n.state.focused&&Zi(n)}),20):Qi(this),Is)Is.hasOwnProperty(a)&&Is[a](this,t[a],As);Gr(this),t.finishInit&&t.finishInit(this);for(var u=0;u<zs.length;++u)zs[u](this);Cr(this),c&&t.lineWrapping&&"optimizelegibility"==getComputedStyle(o.lineDiv).textRendering&&(o.lineDiv.style.textRendering="auto")}function js(e){var t=e.display;me(t.scroller,"mousedown",Nr(e,bs)),me(t.scroller,"dblclick",s&&l<11?Nr(e,(function(t){if(!ye(e,t)){var n=Pi(e,t);if(n&&!Ts(e,t)&&!Wn(e.display,t)){ke(t);var i=e.findWordAt(n);$o(e.doc,i.anchor,i.head)}}})):function(t){return ye(e,t)||ke(t)}),me(t.scroller,"contextmenu",(function(t){return Es(e,t)})),me(t.input.getField(),"contextmenu",(function(n){t.scroller.contains(n.target)||Es(e,n)}));var n,i={end:0};function r(){t.activeTouch&&(n=setTimeout((function(){return t.activeTouch=null}),1e3),i=t.activeTouch,i.end=+new Date)}function o(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function a(e,t){if(null==t.left)return!0;var n=t.left-e.left,i=t.top-e.top;return n*n+i*i>400}me(t.scroller,"touchstart",(function(r){if(!ye(e,r)&&!o(r)&&!Ts(e,r)){t.input.ensurePolled(),clearTimeout(n);var a=+new Date;t.activeTouch={start:a,moved:!1,prev:a-i.end<=300?i:null},1==r.touches.length&&(t.activeTouch.left=r.touches[0].pageX,t.activeTouch.top=r.touches[0].pageY)}})),me(t.scroller,"touchmove",(function(){t.activeTouch&&(t.activeTouch.moved=!0)})),me(t.scroller,"touchend",(function(n){var i=t.activeTouch;if(i&&!Wn(t,n)&&null!=i.left&&!i.moved&&new Date-i.start<300){var o,s=e.coordsChar(t.activeTouch,"page");o=!i.prev||a(i,i.prev)?new oo(s,s):!i.prev.prev||a(i,i.prev.prev)?e.findWordAt(s):new oo(ot(s.line,0),ht(e.doc,ot(s.line+1,0))),e.setSelection(o.anchor,o.head),e.focus(),ke(n)}r()})),me(t.scroller,"touchcancel",r),me(t.scroller,"scroll",(function(){t.scroller.clientHeight&&(hr(e,t.scroller.scrollTop),pr(e,t.scroller.scrollLeft,!0),be(e,"scroll",e))})),me(t.scroller,"mousewheel",(function(t){return io(e,t)})),me(t.scroller,"DOMMouseScroll",(function(t){return io(e,t)})),me(t.wrapper,"scroll",(function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0})),t.dragFunctions={enter:function(t){ye(e,t)||Oe(t)},over:function(t){ye(e,t)||(Ta(e,t),Oe(t))},start:function(t){return Oa(e,t)},drop:Nr(e,Sa),leave:function(t){ye(e,t)||Ea(e)}};var c=t.input.getField();me(c,"keyup",(function(t){return ds.call(e,t)})),me(c,"keydown",Nr(e,cs)),me(c,"keypress",Nr(e,hs)),me(c,"focus",(function(t){return Zi(e,t)})),me(c,"blur",(function(t){return Qi(e,t)}))}Fs.defaults=Ns,Fs.optionHandlers=Is;var zs=[];function Bs(e,t,n,i){var r,o=e.doc;null==n&&(n="add"),"smart"==n&&(o.mode.indent?r=yt(e,t).state:n="prev");var a=e.options.tabSize,s=Ze(o,t),l=z(s.text,null,a);s.stateAfter&&(s.stateAfter=null);var c,u=s.text.match(/^\s*/)[0];if(i||/\S/.test(s.text)){if("smart"==n&&(c=o.mode.indent(r,s.text.slice(u.length),s.text),c==H||c>150)){if(!i)return;n="prev"}}else c=0,n="not";"prev"==n?c=t>o.first?z(Ze(o,t-1).text,null,a):0:"add"==n?c=l+e.options.indentUnit:"subtract"==n?c=l-e.options.indentUnit:"number"==typeof n&&(c=l+n),c=Math.max(0,c);var d="",h=0;if(e.options.indentWithTabs)for(var f=Math.floor(c/a);f;--f)h+=a,d+="\t";if(h<c&&(d+=Y(c-h)),d!=u)return ra(o,d,ot(t,0),ot(t,u.length),"+input"),s.stateAfter=null,!0;for(var p=0;p<o.sel.ranges.length;p++){var m=o.sel.ranges[p];if(m.head.line==t&&m.head.ch<u.length){var g=ot(t,u.length);jo(o,p,new oo(g,g));break}}}Fs.defineInitHook=function(e){return zs.push(e)};var Rs=null;function Vs(e){Rs=e}function Hs(e,t,n,i,r){var o=e.doc;e.display.shift=!1,i||(i=o.sel);var a=+new Date-200,s="paste"==r||e.state.pasteIncoming>a,l=Le(t),c=null;if(s&&i.ranges.length>1)if(Rs&&Rs.text.join("\n")==t){if(i.ranges.length%Rs.text.length==0){c=[];for(var u=0;u<Rs.text.length;u++)c.push(o.splitLines(Rs.text[u]))}}else l.length==i.ranges.length&&e.options.pasteLinesPerSelection&&(c=Z(l,(function(e){return[e]})));for(var d=e.curOp.updateInput,h=i.ranges.length-1;h>=0;h--){var f=i.ranges[h],p=f.from(),m=f.to();f.empty()&&(n&&n>0?p=ot(p.line,p.ch-n):e.state.overwrite&&!s?m=ot(m.line,Math.min(Ze(o,m.line).text.length,m.ch+X(l).length)):s&&Rs&&Rs.lineWise&&Rs.text.join("\n")==l.join("\n")&&(p=m=ot(p.line,0)));var g={from:p,to:m,text:c?c[h%c.length]:l,origin:r||(s?"paste":e.state.cutIncoming>a?"cut":"+input")};Qo(e.doc,g),Dn(e,"inputRead",e,g)}t&&!s&&qs(e,t),sr(e),e.curOp.updateInput<2&&(e.curOp.updateInput=d),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Ws(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||Ar(t,(function(){return Hs(t,n,0,null,"paste")})),!0}function qs(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,i=n.ranges.length-1;i>=0;i--){var r=n.ranges[i];if(!(r.head.ch>100||i&&n.ranges[i-1].head.line==r.head.line)){var o=e.getModeAt(r.head),a=!1;if(o.electricChars){for(var s=0;s<o.electricChars.length;s++)if(t.indexOf(o.electricChars.charAt(s))>-1){a=Bs(e,r.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Ze(e.doc,r.head.line).text.slice(0,r.head.ch))&&(a=Bs(e,r.head.line,"smart"));a&&Dn(e,"electricInput",e,r.head.line)}}}function Us(e){for(var t=[],n=[],i=0;i<e.doc.sel.ranges.length;i++){var r=e.doc.sel.ranges[i].head.line,o={anchor:ot(r,0),head:ot(r+1,0)};n.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:n}}function Ks(e,t,n,i){e.setAttribute("autocorrect",n?"":"off"),e.setAttribute("autocapitalize",i?"":"off"),e.setAttribute("spellcheck",!!t)}function Gs(){var e=M("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),t=M("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return c?e.style.width="1000px":e.setAttribute("wrap","off"),g&&(e.style.border="1px solid black"),Ks(e),t}function Ys(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,n){var i=this.options,r=i[e];i[e]==n&&"mode"!=e||(i[e]=n,t.hasOwnProperty(e)&&Nr(this,t[e])(this,n,r),be(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](qa(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;n<t.length;++n)if(t[n]==e||t[n].name==e)return t.splice(n,1),!0},addOverlay:Ir((function(t,n){var i=t.token?t:e.getMode(this.options,t);if(i.startState)throw new Error("Overlays may not be stateful.");Q(this.state.overlays,{mode:i,modeSpec:t,opaque:n&&n.opaque,priority:n&&n.priority||0},(function(e){return e.priority})),this.state.modeGen++,Fi(this)})),removeOverlay:Ir((function(e){for(var t=this.state.overlays,n=0;n<t.length;++n){var i=t[n].modeSpec;if(i==e||"string"==typeof e&&i.name==e)return t.splice(n,1),this.state.modeGen++,void Fi(this)}})),indentLine:Ir((function(e,t,n){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),it(this.doc,e)&&Bs(this,e,t,n)})),indentSelection:Ir((function(e){for(var t=this.doc.sel.ranges,n=-1,i=0;i<t.length;i++){var r=t[i];if(r.empty())r.head.line>n&&(Bs(this,r.head.line,e,!0),n=r.head.line,i==this.doc.sel.primIndex&&sr(this));else{var o=r.from(),a=r.to(),s=Math.max(n,o.line);n=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var l=s;l<n;++l)Bs(this,l,e);var c=this.doc.sel.ranges;0==o.ch&&t.length==c.length&&c[i].from().ch>0&&jo(this.doc,i,new oo(o,c[i].to()),W)}}})),getTokenAt:function(e,t){return Ct(this,e,t)},getLineTokens:function(e,t){return Ct(this,ot(e),t,!0)},getTokenTypeAt:function(e){e=ht(this.doc,e);var t,n=bt(this,Ze(this.doc,e.line)),i=0,r=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var a=i+r>>1;if((a?n[2*a-1]:0)>=o)r=a;else{if(!(n[2*a+1]<o)){t=n[2*a+2];break}i=a+1}}var s=t?t.indexOf("overlay "):-1;return s<0?t:0==s?null:t.slice(0,s-1)},getModeAt:function(t){var n=this.doc.mode;return n.innerMode?e.innerMode(n,this.getTokenAt(t).state).mode:n},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var i=[];if(!n.hasOwnProperty(t))return i;var r=n[t],o=this.getModeAt(e);if("string"==typeof o[t])r[o[t]]&&i.push(r[o[t]]);else if(o[t])for(var a=0;a<o[t].length;a++){var s=r[o[t][a]];s&&i.push(s)}else o.helperType&&r[o.helperType]?i.push(r[o.helperType]):r[o.name]&&i.push(r[o.name]);for(var l=0;l<r._global.length;l++){var c=r._global[l];c.pred(o,this)&&-1==R(i,c.val)&&i.push(c.val)}return i},getStateAfter:function(e,t){var n=this.doc;return e=dt(n,null==e?n.first+n.size-1:e),yt(this,e+1,t).state},cursorCoords:function(e,t){var n,i=this.doc.sel.primary();return n=null==e?i.head:"object"==o(e)?ht(this.doc,e):e?i.from():i.to(),yi(this,n,t||"page")},charCoords:function(e,t){return bi(this,ht(this.doc,e),t||"page")},coordsChar:function(e,t){return e=vi(this,e,t||"page"),_i(this,e.left,e.top)},lineAtHeight:function(e,t){return e=vi(this,{top:e,left:0},t||"page").top,nt(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,n){var i,r=!1;if("number"==typeof e){var o=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>o&&(e=o,r=!0),i=Ze(this.doc,e)}else i=e;return gi(this,i,{top:0,left:0},t||"page",n||r).top+(r?this.doc.height-an(i):0)},defaultTextHeight:function(){return Di(this.display)},defaultCharWidth:function(){return Mi(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,i,r){var o=this.display;e=yi(this,ht(this.doc,e));var a=e.bottom,s=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),o.sizer.appendChild(t),"over"==i)a=e.top;else if("above"==i||"near"==i){var l=Math.max(o.wrapper.clientHeight,this.doc.height),c=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==i||e.bottom+t.offsetHeight>l)&&e.top>t.offsetHeight?a=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=l&&(a=e.bottom),s+t.offsetWidth>c&&(s=c-t.offsetWidth)}t.style.top=a+"px",t.style.left=t.style.right="","right"==r?(s=o.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==r?s=0:"middle"==r&&(s=(o.sizer.clientWidth-t.offsetWidth)/2),t.style.left=s+"px"),n&&rr(this,{left:s,top:a,right:s+t.offsetWidth,bottom:a+t.offsetHeight})},triggerOnKeyDown:Ir(cs),triggerOnKeyPress:Ir(hs),triggerOnKeyUp:ds,triggerOnMouseDown:Ir(bs),execCommand:function(e){if(Za.hasOwnProperty(e))return Za[e].call(null,this)},triggerElectric:Ir((function(e){qs(this,e)})),findPosH:function(e,t,n,i){var r=1;t<0&&(r=-1,t=-t);for(var o=ht(this.doc,e),a=0;a<t;++a)if(o=Xs(this.doc,o,r,n,i),o.hitSide)break;return o},moveH:Ir((function(e,t){var n=this;this.extendSelectionsBy((function(i){return n.display.shift||n.doc.extend||i.empty()?Xs(n.doc,i.head,e,t,n.options.rtlMoveVisually):e<0?i.from():i.to()}),U)})),deleteH:Ir((function(e,t){var n=this.doc.sel,i=this.doc;n.somethingSelected()?i.replaceSelection("",null,"+delete"):Ua(this,(function(n){var r=Xs(i,n.head,e,t,!1);return e<0?{from:r,to:n.head}:{from:n.head,to:r}}))})),findPosV:function(e,t,n,i){var r=1,o=i;t<0&&(r=-1,t=-t);for(var a=ht(this.doc,e),s=0;s<t;++s){var l=yi(this,a,"div");if(null==o?o=l.left:l.left=o,a=Zs(this,l,r,n),a.hitSide)break}return a},moveV:Ir((function(e,t){var n=this,i=this.doc,r=[],o=!this.display.shift&&!i.extend&&i.sel.somethingSelected();if(i.extendSelectionsBy((function(a){if(o)return e<0?a.from():a.to();var s=yi(n,a.head,"div");null!=a.goalColumn&&(s.left=a.goalColumn),r.push(s.left);var l=Zs(n,s,e,t);return"page"==t&&a==i.sel.primary()&&ar(n,bi(n,l,"div").top-s.top),l}),U),r.length)for(var a=0;a<i.sel.ranges.length;a++)i.sel.ranges[a].goalColumn=r[a]})),findWordAt:function(e){var t=this.doc,n=Ze(t,e.line).text,i=e.ch,r=e.ch;if(n){var o=this.getHelper(e,"wordChars");"before"!=e.sticky&&r!=n.length||!i?++r:--i;var a=n.charAt(i),s=ie(a,o)?function(e){return ie(e,o)}:/\s/.test(a)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!ie(e)};while(i>0&&s(n.charAt(i-1)))--i;while(r<n.length&&s(n.charAt(r)))++r}return new oo(ot(e.line,i),ot(e.line,r))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?L(this.display.cursorDiv,"CodeMirror-overwrite"):T(this.display.cursorDiv,"CodeMirror-overwrite"),be(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==I()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:Ir((function(e,t){lr(this,e,t)})),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-Gn(this)-this.display.barHeight,width:e.scrollWidth-Gn(this)-this.display.barWidth,clientHeight:Xn(this),clientWidth:Yn(this)}},scrollIntoView:Ir((function(e,t){null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:ot(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?cr(this,e):dr(this,e.from,e.to,e.margin)})),setSize:Ir((function(e,t){var n=this,i=function(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e};null!=e&&(this.display.wrapper.style.width=i(e)),null!=t&&(this.display.wrapper.style.height=i(t)),this.options.lineWrapping&&di(this);var r=this.display.viewFrom;this.doc.iter(r,this.display.viewTo,(function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){ji(n,r,"widget");break}++r})),this.curOp.forceUpdate=!0,be(this,"refresh",this)})),operation:function(e){return Ar(this,e)},startOperation:function(){return kr(this)},endOperation:function(){return Cr(this)},refresh:Ir((function(){var e=this.display.cachedTextHeight;Fi(this),this.curOp.forceUpdate=!0,hi(this),lr(this,this.doc.scrollLeft,this.doc.scrollTop),qr(this.display),(null==e||Math.abs(e-Di(this.display))>.5||this.options.lineWrapping)&&Li(this),be(this,"refresh",this)})),swapDoc:Ir((function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),yo(this,e),hi(this),this.display.input.reset(),lr(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,Dn(this,"swapDoc",this,t),t})),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},_e(e),e.registerHelper=function(t,i,r){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][i]=r},e.registerGlobalHelper=function(t,i,r,o){e.registerHelper(t,i,o),n[t]._global.push({pred:r,val:o})}}function Xs(e,t,n,i,r){var o=t,a=n,s=Ze(e,t.line),l=r&&"rtl"==e.direction?-n:n;function c(){var n=t.line+l;return!(n<e.first||n>=e.first+e.size)&&(t=new ot(n,t.ch,t.sticky),s=Ze(e,n))}function u(o){var a;if("codepoint"==i){var u=s.text.charCodeAt(t.ch+(i>0?0:-1));a=isNaN(u)?null:new ot(t.line,Math.max(0,Math.min(s.text.length,t.ch+n*(u>=55296&&u<56320?2:1))),-n)}else a=r?Xa(e.cm,s,t,n):Ga(s,t,n);if(null==a){if(o||!c())return!1;t=Ya(r,e.cm,s,t.line,l)}else t=a;return!0}if("char"==i||"codepoint"==i)u();else if("column"==i)u(!0);else if("word"==i||"group"==i)for(var d=null,h="group"==i,f=e.cm&&e.cm.getHelper(t,"wordChars"),p=!0;;p=!1){if(n<0&&!u(!p))break;var m=s.text.charAt(t.ch)||"\n",g=ie(m,f)?"w":h&&"\n"==m?"n":!h||/\s/.test(m)?null:"p";if(!h||p||g||(g="s"),d&&d!=g){n<0&&(n=1,u(),t.sticky="after");break}if(g&&(d=g),n>0&&!u(!p))break}var v=Go(e,t,o,a,!0);return st(o,v)&&(v.hitSide=!0),v}function Zs(e,t,n,i){var r,o,a=e.doc,s=t.left;if("page"==i){var l=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(l-.5*Di(e.display),3);r=(n>0?t.bottom:t.top)+n*c}else"line"==i&&(r=n>0?t.bottom+3:t.top-3);for(;;){if(o=_i(e,s,r),!o.outside)break;if(n<0?r<=0:r>=a.height){o.hitSide=!0;break}r+=5*n}return o}var Qs=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new B,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Js(e,t){var n=ti(e,t.line);if(!n||n.hidden)return null;var i=Ze(e.doc,t.line),r=Qn(n,i,t.line),o=fe(i,e.doc.direction),a="left";if(o){var s=de(o,t.ch);a=s%2?"right":"left"}var l=ai(r.map,t.ch,a);return l.offset="right"==l.collapse?l.end:l.start,l}function el(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}function tl(e,t){return t&&(e.bad=!0),e}function nl(e,t,n,i,r){var o="",a=!1,s=e.doc.lineSeparator(),l=!1;function c(e){return function(t){return t.id==e}}function u(){a&&(o+=s,l&&(o+=s),a=l=!1)}function d(e){e&&(u(),o+=e)}function h(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)return void d(n);var o,f=t.getAttribute("cm-marker");if(f){var p=e.findMarks(ot(i,0),ot(r+1,0),c(+f));return void(p.length&&(o=p[0].find(0))&&d(Qe(e.doc,o.from,o.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var m=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;m&&u();for(var g=0;g<t.childNodes.length;g++)h(t.childNodes[g]);/^(pre|p)$/i.test(t.nodeName)&&(l=!0),m&&(a=!0)}else 3==t.nodeType&&d(t.nodeValue.replace(/\u200b/g,"").replace(/\u00a0/g," "))}for(;;){if(h(t),t==n)break;t=t.nextSibling,l=!1}return o}function il(e,t,n){var i;if(t==e.display.lineDiv){if(i=e.display.lineDiv.childNodes[n],!i)return tl(e.clipPos(ot(e.display.viewTo-1)),!0);t=null,n=0}else for(i=t;;i=i.parentNode){if(!i||i==e.display.lineDiv)return null;if(i.parentNode&&i.parentNode==e.display.lineDiv)break}for(var r=0;r<e.display.view.length;r++){var o=e.display.view[r];if(o.node==i)return rl(o,t,n)}}function rl(e,t,n){var i=e.text.firstChild,r=!1;if(!t||!N(i,t))return tl(ot(tt(e.line),0),!0);if(t==i&&(r=!0,t=i.childNodes[n],n=0,!t)){var o=e.rest?X(e.rest):e.line;return tl(ot(tt(o),o.text.length),r)}var a=3==t.nodeType?t:null,s=t;a||1!=t.childNodes.length||3!=t.firstChild.nodeType||(a=t.firstChild,n&&(n=a.nodeValue.length));while(s.parentNode!=i)s=s.parentNode;var l=e.measure,c=l.maps;function u(t,n,i){for(var r=-1;r<(c?c.length:0);r++)for(var o=r<0?l.map:c[r],a=0;a<o.length;a+=3){var s=o[a+2];if(s==t||s==n){var u=tt(r<0?e.line:e.rest[r]),d=o[a]+i;return(i<0||s!=t)&&(d=o[a+(i?1:0)]),ot(u,d)}}}var d=u(a,s,n);if(d)return tl(d,r);for(var h=s.nextSibling,f=a?a.nodeValue.length-n:0;h;h=h.nextSibling){if(d=u(h,h.firstChild,0),d)return tl(ot(d.line,d.ch-f),r);f+=h.textContent.length}for(var p=s.previousSibling,m=n;p;p=p.previousSibling){if(d=u(p,p.firstChild,-1),d)return tl(ot(d.line,d.ch+m),r);m+=p.textContent.length}}Qs.prototype.init=function(e){var t=this,n=this,i=n.cm,r=n.div=e.lineDiv;function o(e){for(var t=e.target;t;t=t.parentNode){if(t==r)return!0;if(/\bCodeMirror-(?:line)?widget\b/.test(t.className))break}return!1}function a(e){if(o(e)&&!ye(i,e)){if(i.somethingSelected())Vs({lineWise:!1,text:i.getSelections()}),"cut"==e.type&&i.replaceSelection("",null,"cut");else{if(!i.options.lineWiseCopyCut)return;var t=Us(i);Vs({lineWise:!0,text:t.text}),"cut"==e.type&&i.operation((function(){i.setSelections(t.ranges,0,W),i.replaceSelection("",null,"cut")}))}if(e.clipboardData){e.clipboardData.clearData();var a=Rs.text.join("\n");if(e.clipboardData.setData("Text",a),e.clipboardData.getData("Text")==a)return void e.preventDefault()}var s=Gs(),l=s.firstChild;i.display.lineSpace.insertBefore(s,i.display.lineSpace.firstChild),l.value=Rs.text.join("\n");var c=document.activeElement;$(l),setTimeout((function(){i.display.lineSpace.removeChild(s),c.focus(),c==r&&n.showPrimarySelection()}),50)}}Ks(r,i.options.spellcheck,i.options.autocorrect,i.options.autocapitalize),me(r,"paste",(function(e){!o(e)||ye(i,e)||Ws(e,i)||l<=11&&setTimeout(Nr(i,(function(){return t.updateFromDOM()})),20)})),me(r,"compositionstart",(function(e){t.composing={data:e.data,done:!1}})),me(r,"compositionupdate",(function(e){t.composing||(t.composing={data:e.data,done:!1})})),me(r,"compositionend",(function(e){t.composing&&(e.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)})),me(r,"touchstart",(function(){return n.forceCompositionEnd()})),me(r,"input",(function(){t.composing||t.readFromDOMSoon()})),me(r,"copy",a),me(r,"cut",a)},Qs.prototype.screenReaderLabelChanged=function(e){e?this.div.setAttribute("aria-label",e):this.div.removeAttribute("aria-label")},Qs.prototype.prepareSelection=function(){var e=Wi(this.cm,!1);return e.focus=document.activeElement==this.div,e},Qs.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},Qs.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},Qs.prototype.showPrimarySelection=function(){var e=this.getSelection(),t=this.cm,i=t.doc.sel.primary(),r=i.from(),o=i.to();if(t.display.viewTo==t.display.viewFrom||r.line>=t.display.viewTo||o.line<t.display.viewFrom)e.removeAllRanges();else{var a=il(t,e.anchorNode,e.anchorOffset),s=il(t,e.focusNode,e.focusOffset);if(!a||a.bad||!s||s.bad||0!=at(ut(a,s),r)||0!=at(ct(a,s),o)){var l=t.display.view,c=r.line>=t.display.viewFrom&&Js(t,r)||{node:l[0].measure.map[2],offset:0},u=o.line<t.display.viewTo&&Js(t,o);if(!u){var d=l[l.length-1].measure,h=d.maps?d.maps[d.maps.length-1]:d.map;u={node:h[h.length-1],offset:h[h.length-2]-h[h.length-3]}}if(c&&u){var f,p=e.rangeCount&&e.getRangeAt(0);try{f=O(c.node,c.offset,u.offset,u.node)}catch(m){}f&&(!n&&t.state.focused?(e.collapse(c.node,c.offset),f.collapsed||(e.removeAllRanges(),e.addRange(f))):(e.removeAllRanges(),e.addRange(f)),p&&null==e.anchorNode?e.addRange(p):n&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},Qs.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout((function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation((function(){return e.cm.curOp.selectionChanged=!0}))}),20)},Qs.prototype.showMultipleSelections=function(e){D(this.cm.display.cursorDiv,e.cursors),D(this.cm.display.selectionDiv,e.selection)},Qs.prototype.rememberSelection=function(){var e=this.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},Qs.prototype.selectionInEditor=function(){var e=this.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return N(this.div,t)},Qs.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()&&document.activeElement==this.div||this.showSelection(this.prepareSelection(),!0),this.div.focus())},Qs.prototype.blur=function(){this.div.blur()},Qs.prototype.getField=function(){return this.div},Qs.prototype.supportsTouch=function(){return!0},Qs.prototype.receivedFocus=function(){var e=this;function t(){e.cm.state.focused&&(e.pollSelection(),e.polling.set(e.cm.options.pollInterval,t))}this.selectionInEditor()?this.pollSelection():Ar(this.cm,(function(){return e.cm.curOp.selectionChanged=!0})),this.polling.set(this.cm.options.pollInterval,t)},Qs.prototype.selectionChanged=function(){var e=this.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},Qs.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=this.getSelection(),t=this.cm;if(v&&d&&this.cm.display.gutterSpecs.length&&el(e.anchorNode))return this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var n=il(t,e.anchorNode,e.anchorOffset),i=il(t,e.focusNode,e.focusOffset);n&&i&&Ar(t,(function(){Vo(t.doc,so(n,i),W),(n.bad||i.bad)&&(t.curOp.selectionChanged=!0)}))}}},Qs.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e,t,n,i=this.cm,r=i.display,o=i.doc.sel.primary(),a=o.from(),s=o.to();if(0==a.ch&&a.line>i.firstLine()&&(a=ot(a.line-1,Ze(i.doc,a.line-1).length)),s.ch==Ze(i.doc,s.line).text.length&&s.line<i.lastLine()&&(s=ot(s.line+1,0)),a.line<r.viewFrom||s.line>r.viewTo-1)return!1;a.line==r.viewFrom||0==(e=$i(i,a.line))?(t=tt(r.view[0].line),n=r.view[0].node):(t=tt(r.view[e].line),n=r.view[e-1].node.nextSibling);var l,c,u=$i(i,s.line);if(u==r.view.length-1?(l=r.viewTo-1,c=r.lineDiv.lastChild):(l=tt(r.view[u+1].line)-1,c=r.view[u+1].node.previousSibling),!n)return!1;var d=i.doc.splitLines(nl(i,n,c,t,l)),h=Qe(i.doc,ot(t,0),ot(l,Ze(i.doc,l).text.length));while(d.length>1&&h.length>1)if(X(d)==X(h))d.pop(),h.pop(),l--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),t++}var f=0,p=0,m=d[0],g=h[0],v=Math.min(m.length,g.length);while(f<v&&m.charCodeAt(f)==g.charCodeAt(f))++f;var b=X(d),y=X(h),w=Math.min(b.length-(1==d.length?f:0),y.length-(1==h.length?f:0));while(p<w&&b.charCodeAt(b.length-p-1)==y.charCodeAt(y.length-p-1))++p;if(1==d.length&&1==h.length&&t==a.line)while(f&&f>a.ch&&b.charCodeAt(b.length-p-1)==y.charCodeAt(y.length-p-1))f--,p++;d[d.length-1]=b.slice(0,b.length-p).replace(/^\u200b+/,""),d[0]=d[0].slice(f).replace(/\u200b+$/,"");var x=ot(t,f),_=ot(l,h.length?X(h).length-p:0);return d.length>1||d[0]||at(x,_)?(ra(i.doc,d,x,_,"+input"),!0):void 0},Qs.prototype.ensurePolled=function(){this.forceCompositionEnd()},Qs.prototype.reset=function(){this.forceCompositionEnd()},Qs.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Qs.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout((function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()}),80))},Qs.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||Ar(this.cm,(function(){return Fi(e.cm)}))},Qs.prototype.setUneditable=function(e){e.contentEditable="false"},Qs.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||Nr(this.cm,Hs)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Qs.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Qs.prototype.onContextMenu=function(){},Qs.prototype.resetPosition=function(){},Qs.prototype.needsContentAttribute=!0;var ol=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new B,this.hasSelection=!1,this.composing=null};function al(e,t){if(t=t?j(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=I();t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}function i(){e.value=s.getValue()}var r;if(e.form&&(me(e.form,"submit",i),!t.leaveSubmitMethodAlone)){var o=e.form;r=o.submit;try{var a=o.submit=function(){i(),o.submit=r,o.submit(),o.submit=a}}catch(l){}}t.finishInit=function(n){n.save=i,n.getTextArea=function(){return e},n.toTextArea=function(){n.toTextArea=isNaN,i(),e.parentNode.removeChild(n.getWrapperElement()),e.style.display="",e.form&&(ve(e.form,"submit",i),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=r))}},e.style.display="none";var s=Fs((function(t){return e.parentNode.insertBefore(t,e.nextSibling)}),t);return s}function sl(e){e.off=ve,e.on=me,e.wheelEventPixels=no,e.Doc=ka,e.splitLines=Le,e.countColumn=z,e.findColumn=K,e.isWordChar=ne,e.Pass=H,e.signal=be,e.Line=cn,e.changeEnd=lo,e.scrollbarModel=wr,e.Pos=ot,e.cmpPos=at,e.modes=ze,e.mimeModes=Be,e.resolveMode=He,e.getMode=We,e.modeExtensions=qe,e.extendMode=Ue,e.copyState=Ke,e.startState=Ye,e.innerMode=Ge,e.commands=Za,e.keyMap=ja,e.keyName=Wa,e.isModifierKey=Va,e.lookupKey=Ra,e.normalizeKeyMap=Ba,e.StringStream=Xe,e.SharedTextMarker=va,e.TextMarker=ma,e.LineWidget=da,e.e_preventDefault=ke,e.e_stopPropagation=Ce,e.e_stop=Oe,e.addClass=L,e.contains=N,e.rmClass=T,e.keyNames=La}ol.prototype.init=function(e){var t=this,n=this,i=this.cm;this.createField(e);var r=this.textarea;function o(e){if(!ye(i,e)){if(i.somethingSelected())Vs({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var t=Us(i);Vs({lineWise:!0,text:t.text}),"cut"==e.type?i.setSelections(t.ranges,null,W):(n.prevInput="",r.value=t.text.join("\n"),$(r))}"cut"==e.type&&(i.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(r.style.width="0px"),me(r,"input",(function(){s&&l>=9&&t.hasSelection&&(t.hasSelection=null),n.poll()})),me(r,"paste",(function(e){ye(i,e)||Ws(e,i)||(i.state.pasteIncoming=+new Date,n.fastPoll())})),me(r,"cut",o),me(r,"copy",o),me(e.scroller,"paste",(function(t){if(!Wn(e,t)&&!ye(i,t)){if(!r.dispatchEvent)return i.state.pasteIncoming=+new Date,void n.focus();var o=new Event("paste");o.clipboardData=t.clipboardData,r.dispatchEvent(o)}})),me(e.lineSpace,"selectstart",(function(t){Wn(e,t)||ke(t)})),me(r,"compositionstart",(function(){var e=i.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:i.markText(e,i.getCursor("to"),{className:"CodeMirror-composing"})}})),me(r,"compositionend",(function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)}))},ol.prototype.createField=function(e){this.wrapper=Gs(),this.textarea=this.wrapper.firstChild},ol.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},ol.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,i=Wi(e);if(e.options.moveInputWithCursor){var r=yi(e,n.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();i.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,r.top+a.top-o.top)),i.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,r.left+a.left-o.left))}return i},ol.prototype.showSelection=function(e){var t=this.cm,n=t.display;D(n.cursorDiv,e.cursors),D(n.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},ol.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&$(this.textarea),s&&l>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",s&&l>=9&&(this.hasSelection=null))}},ol.prototype.getField=function(){return this.textarea},ol.prototype.supportsTouch=function(){return!1},ol.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!b||I()!=this.textarea))try{this.textarea.focus()}catch(e){}},ol.prototype.blur=function(){this.textarea.blur()},ol.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},ol.prototype.receivedFocus=function(){this.slowPoll()},ol.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,(function(){e.poll(),e.cm.state.focused&&e.slowPoll()}))},ol.prototype.fastPoll=function(){var e=!1,t=this;function n(){var i=t.poll();i||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,n))}t.pollingFast=!0,t.polling.set(20,n)},ol.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,i=this.prevInput;if(this.contextMenuPending||!t.state.focused||Pe(n)&&!i&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var r=n.value;if(r==i&&!t.somethingSelected())return!1;if(s&&l>=9&&this.hasSelection===r||y&&/[\uf700-\uf7ff]/.test(r))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=r.charCodeAt(0);if(8203!=o||i||(i="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}var a=0,c=Math.min(i.length,r.length);while(a<c&&i.charCodeAt(a)==r.charCodeAt(a))++a;return Ar(t,(function(){Hs(t,r.slice(a),i.length-a,null,e.composing?"*compose":null),r.length>1e3||r.indexOf("\n")>-1?n.value=e.prevInput="":e.prevInput=r,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))})),!0},ol.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},ol.prototype.onKeyPress=function(){s&&l>=9&&(this.hasSelection=null),this.fastPoll()},ol.prototype.onContextMenu=function(e){var t=this,n=t.cm,i=n.display,r=t.textarea;t.contextMenuPending&&t.contextMenuPending();var o=Pi(n,e),a=i.scroller.scrollTop;if(o&&!h){var u=n.options.resetSelectionOnContextMenu;u&&-1==n.doc.sel.contains(o)&&Nr(n,Vo)(n.doc,so(o),W);var d,f=r.style.cssText,p=t.wrapper.style.cssText,m=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",r.style.cssText="position: absolute; width: 30px; height: 30px;\n      top: "+(e.clientY-m.top-5)+"px; left: "+(e.clientX-m.left-5)+"px;\n      z-index: 1000; background: "+(s?"rgba(255, 255, 255, .05)":"transparent")+";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",c&&(d=window.scrollY),i.input.focus(),c&&window.scrollTo(null,d),i.input.reset(),n.somethingSelected()||(r.value=t.prevInput=" "),t.contextMenuPending=b,i.selForContextMenu=n.doc.sel,clearTimeout(i.detectingSelectAll),s&&l>=9&&v(),C){Oe(e);var g=function e(){ve(window,"mouseup",e),setTimeout(b,20)};me(window,"mouseup",g)}else setTimeout(b,50)}function v(){if(null!=r.selectionStart){var e=n.somethingSelected(),o="​"+(e?r.value:"");r.value="⇚",r.value=o,t.prevInput=e?"":"​",r.selectionStart=1,r.selectionEnd=o.length,i.selForContextMenu=n.doc.sel}}function b(){if(t.contextMenuPending==b&&(t.contextMenuPending=!1,t.wrapper.style.cssText=p,r.style.cssText=f,s&&l<9&&i.scrollbars.setScrollTop(i.scroller.scrollTop=a),null!=r.selectionStart)){(!s||s&&l<9)&&v();var e=0,o=function o(){i.selForContextMenu==n.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==t.prevInput?Nr(n,Xo)(n):e++<10?i.detectingSelectAll=setTimeout(o,500):(i.selForContextMenu=null,i.input.reset())};i.detectingSelectAll=setTimeout(o,200)}}},ol.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e,this.textarea.readOnly=!!e},ol.prototype.setUneditable=function(){},ol.prototype.needsContentAttribute=!1,Ls(Fs),Ys(Fs);var ll="iter insert remove copy getEditor constructor".split(" ");for(var cl in ka.prototype)ka.prototype.hasOwnProperty(cl)&&R(ll,cl)<0&&(Fs.prototype[cl]=function(e){return function(){return e.apply(this.doc,arguments)}}(ka.prototype[cl]));return _e(ka),Fs.inputStyles={textarea:ol,contenteditable:Qs},Fs.defineMode=function(e){Fs.defaults.mode||"null"==e||(Fs.defaults.mode=e),Re.apply(this,arguments)},Fs.defineMIME=Ve,Fs.defineMode("null",(function(){return{token:function(e){return e.skipToEnd()}}})),Fs.defineMIME("text/plain","null"),Fs.defineExtension=function(e,t){Fs.prototype[e]=t},Fs.defineDocExtension=function(e,t){ka.prototype[e]=t},Fs.fromTextArea=al,sl(Fs),Fs.version="5.59.0",Fs}))},f3ad:function(e,t,n){n("a4d3"),n("e01a"),n("944a"),n("99af"),n("a15b"),n("d81d"),n("fb6a"),n("b0c0"),n("0c47"),n("23dc"),n("a9e3"),n("d3b7");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=76)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},11:function(e,t){e.exports=n("2bb5")},21:function(e,t){e.exports=n("d397")},4:function(e,t){e.exports=n("d010")},76:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["textarea"===e.type?"el-textarea":"el-input",e.inputSize?"el-input--"+e.inputSize:"",{"is-disabled":e.inputDisabled,"is-exceed":e.inputExceed,"el-input-group":e.$slots.prepend||e.$slots.append,"el-input-group--append":e.$slots.append,"el-input-group--prepend":e.$slots.prepend,"el-input--prefix":e.$slots.prefix||e.prefixIcon,"el-input--suffix":e.$slots.suffix||e.suffixIcon||e.clearable||e.showPassword}],on:{mouseenter:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},["textarea"!==e.type?[e.$slots.prepend?n("div",{staticClass:"el-input-group__prepend"},[e._t("prepend")],2):e._e(),"textarea"!==e.type?n("input",e._b({ref:"input",staticClass:"el-input__inner",attrs:{tabindex:e.tabindex,type:e.showPassword?e.passwordVisible?"text":"password":e.type,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"input",e.$attrs,!1)):e._e(),e.$slots.prefix||e.prefixIcon?n("span",{staticClass:"el-input__prefix"},[e._t("prefix"),e.prefixIcon?n("i",{staticClass:"el-input__icon",class:e.prefixIcon}):e._e()],2):e._e(),e.getSuffixVisible()?n("span",{staticClass:"el-input__suffix"},[n("span",{staticClass:"el-input__suffix-inner"},[e.showClear&&e.showPwdVisible&&e.isWordLimitVisible?e._e():[e._t("suffix"),e.suffixIcon?n("i",{staticClass:"el-input__icon",class:e.suffixIcon}):e._e()],e.showClear?n("i",{staticClass:"el-input__icon el-icon-circle-close el-input__clear",on:{mousedown:function(e){e.preventDefault()},click:e.clear}}):e._e(),e.showPwdVisible?n("i",{staticClass:"el-input__icon el-icon-view el-input__clear",on:{click:e.handlePasswordVisible}}):e._e(),e.isWordLimitVisible?n("span",{staticClass:"el-input__count"},[n("span",{staticClass:"el-input__count-inner"},[e._v("\n            "+e._s(e.textLength)+"/"+e._s(e.upperLimit)+"\n          ")])]):e._e()],2),e.validateState?n("i",{staticClass:"el-input__icon",class:["el-input__validateIcon",e.validateIcon]}):e._e()]):e._e(),e.$slots.append?n("div",{staticClass:"el-input-group__append"},[e._t("append")],2):e._e()]:n("textarea",e._b({ref:"textarea",staticClass:"el-textarea__inner",style:e.textareaStyle,attrs:{tabindex:e.tabindex,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"textarea",e.$attrs,!1)),e.isWordLimitVisible&&"textarea"===e.type?n("span",{staticClass:"el-input__count"},[e._v(e._s(e.textLength)+"/"+e._s(e.upperLimit))]):e._e()],2)},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s=n(11),l=n.n(s),c=void 0,u="\n  height:0 !important;\n  visibility:hidden !important;\n  overflow:hidden !important;\n  position:absolute !important;\n  z-index:-1000 !important;\n  top:0 !important;\n  right:0 !important\n",d=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function h(e){var t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),i=parseFloat(t.getPropertyValue("padding-bottom"))+parseFloat(t.getPropertyValue("padding-top")),r=parseFloat(t.getPropertyValue("border-bottom-width"))+parseFloat(t.getPropertyValue("border-top-width")),o=d.map((function(e){return e+":"+t.getPropertyValue(e)})).join(";");return{contextStyle:o,paddingSize:i,borderSize:r,boxSizing:n}}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;c||(c=document.createElement("textarea"),document.body.appendChild(c));var i=h(e),r=i.paddingSize,o=i.borderSize,a=i.boxSizing,s=i.contextStyle;c.setAttribute("style",s+";"+u),c.value=e.value||e.placeholder||"";var l=c.scrollHeight,d={};"border-box"===a?l+=o:"content-box"===a&&(l-=r),c.value="";var f=c.scrollHeight-r;if(null!==t){var p=f*t;"border-box"===a&&(p=p+r+o),l=Math.max(p,l),d.minHeight=p+"px"}if(null!==n){var m=f*n;"border-box"===a&&(m=m+r+o),l=Math.min(m,l)}return d.height=l+"px",c.parentNode&&c.parentNode.removeChild(c),c=null,d}var p=n(9),m=n.n(p),g=n(21),v={name:"ElInput",componentName:"ElInput",mixins:[a.a,l.a],inheritAttrs:!1,inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{textareaCalcStyle:{},hovering:!1,focused:!1,isComposing:!1,passwordVisible:!1}},props:{value:[String,Number],size:String,resize:String,form:String,disabled:Boolean,readonly:Boolean,type:{type:String,default:"text"},autosize:{type:[Boolean,Object],default:!1},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},validateEvent:{type:Boolean,default:!0},suffixIcon:String,prefixIcon:String,label:String,clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},tabindex:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},validateState:function(){return this.elFormItem?this.elFormItem.validateState:""},needStatusIcon:function(){return!!this.elForm&&this.elForm.statusIcon},validateIcon:function(){return{validating:"el-icon-loading",success:"el-icon-circle-check",error:"el-icon-circle-close"}[this.validateState]},textareaStyle:function(){return m()({},this.textareaCalcStyle,{resize:this.resize})},inputSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputDisabled:function(){return this.disabled||(this.elForm||{}).disabled},nativeInputValue:function(){return null===this.value||void 0===this.value?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},isWordLimitVisible:function(){return this.showWordLimit&&this.$attrs.maxlength&&("text"===this.type||"textarea"===this.type)&&!this.inputDisabled&&!this.readonly&&!this.showPassword},upperLimit:function(){return this.$attrs.maxlength},textLength:function(){return"number"===typeof this.value?String(this.value).length:(this.value||"").length},inputExceed:function(){return this.isWordLimitVisible&&this.textLength>this.upperLimit}},watch:{value:function(e){this.$nextTick(this.resizeTextarea),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()},type:function(){var e=this;this.$nextTick((function(){e.setNativeInputValue(),e.resizeTextarea(),e.updateIconOffset()}))}},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},getMigratingConfig:function(){return{props:{icon:"icon is removed, use suffix-icon / prefix-icon instead.","on-icon-click":"on-icon-click is removed."},events:{click:"click is removed."}}},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("ElFormItem","el.form.blur",[this.value])},select:function(){this.getInput().select()},resizeTextarea:function(){if(!this.$isServer){var e=this.autosize,t=this.type;if("textarea"===t)if(e){var n=e.minRows,i=e.maxRows;this.textareaCalcStyle=f(this.$refs.textarea,n,i)}else this.textareaCalcStyle={minHeight:f(this.$refs.textarea).minHeight}}},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleCompositionStart:function(){this.isComposing=!0},handleCompositionUpdate:function(e){var t=e.target.value,n=t[t.length-1]||"";this.isComposing=!Object(g["isKorean"])(n)},handleCompositionEnd:function(e){this.isComposing&&(this.isComposing=!1,this.handleInput(e))},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},handleChange:function(e){this.$emit("change",e.target.value)},calcIconOffset:function(e){var t=[].slice.call(this.$el.querySelectorAll(".el-input__"+e)||[]);if(t.length){for(var n=null,i=0;i<t.length;i++)if(t[i].parentNode===this.$el){n=t[i];break}if(n){var r={suffix:"append",prefix:"prepend"},o=r[e];this.$slots[o]?n.style.transform="translateX("+("suffix"===e?"-":"")+this.$el.querySelector(".el-input-group__"+o).offsetWidth+"px)":n.removeAttribute("style")}}},updateIconOffset:function(){this.calcIconOffset("prefix"),this.calcIconOffset("suffix")},clear:function(){this.$emit("input",""),this.$emit("change",""),this.$emit("clear")},handlePasswordVisible:function(){this.passwordVisible=!this.passwordVisible,this.focus()},getInput:function(){return this.$refs.input||this.$refs.textarea},getSuffixVisible:function(){return this.$slots.suffix||this.suffixIcon||this.showClear||this.showPassword||this.isWordLimitVisible||this.validateState&&this.needStatusIcon}},created:function(){this.$on("inputSelect",this.select)},mounted:function(){this.setNativeInputValue(),this.resizeTextarea(),this.updateIconOffset()},updated:function(){this.$nextTick(this.updateIconOffset)}},b=v,y=n(0),w=Object(y["a"])(b,i,r,!1,null,null,null);w.options.__file="packages/input/src/input.vue";var x=w.exports;x.install=function(e){e.component(x.name,x)},t["default"]=x},9:function(e,t){e.exports=n("7f4d")}})},f3b2:function(e,t,n){"use strict";var i=n("d757"),r=n.n(i);r.a},f494:function(e,t,n){n("a4d3"),n("e01a"),n("944a"),n("99af"),n("b0c0"),n("0c47"),n("23dc"),n("d3b7");var i=n("7037");e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===i(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=116)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},116:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-radio",class:[e.border&&e.radioSize?"el-radio--"+e.radioSize:"",{"is-disabled":e.isDisabled},{"is-focus":e.focus},{"is-bordered":e.border},{"is-checked":e.model===e.label}],attrs:{role:"radio","aria-checked":e.model===e.label,"aria-disabled":e.isDisabled,tabindex:e.tabIndex},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"]))return null;t.stopPropagation(),t.preventDefault(),e.model=e.isDisabled?e.model:e.label}}},[n("span",{staticClass:"el-radio__input",class:{"is-disabled":e.isDisabled,"is-checked":e.model===e.label}},[n("span",{staticClass:"el-radio__inner"}),n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],ref:"radio",staticClass:"el-radio__original",attrs:{type:"radio","aria-hidden":"true",name:e.name,disabled:e.isDisabled,tabindex:"-1"},domProps:{value:e.label,checked:e._q(e.model,e.label)},on:{focus:function(t){e.focus=!0},blur:function(t){e.focus=!1},change:[function(t){e.model=e.label},e.handleChange]}})]),n("span",{staticClass:"el-radio__label",on:{keydown:function(e){e.stopPropagation()}}},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2)])},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s={name:"ElRadio",mixins:[a.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElRadio",props:{value:{},label:{},disabled:Boolean,name:String,border:Boolean,size:String},data:function(){return{focus:!1}},computed:{isGroup:function(){var e=this.$parent;while(e){if("ElRadioGroup"===e.$options.componentName)return this._radioGroup=e,!0;e=e.$parent}return!1},model:{get:function(){return this.isGroup?this._radioGroup.value:this.value},set:function(e){this.isGroup?this.dispatch("ElRadioGroup","input",[e]):this.$emit("input",e),this.$refs.radio&&(this.$refs.radio.checked=this.model===this.label)}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},radioSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._radioGroup.radioGroupSize||e},isDisabled:function(){return this.isGroup?this._radioGroup.disabled||this.disabled||(this.elForm||{}).disabled:this.disabled||(this.elForm||{}).disabled},tabIndex:function(){return this.isDisabled||this.isGroup&&this.model!==this.label?-1:0}},methods:{handleChange:function(){var e=this;this.$nextTick((function(){e.$emit("change",e.model),e.isGroup&&e.dispatch("ElRadioGroup","handleChange",e.model)}))}}},l=s,c=n(0),u=Object(c["a"])(l,i,r,!1,null,null,null);u.options.__file="packages/radio/src/radio.vue";var d=u.exports;d.install=function(e){e.component(d.name,d)},t["default"]=d},4:function(e,t){e.exports=n("d010")}})},f5df:function(e,t,n){var i=n("00ee"),r=n("c6b6"),o=n("b622"),a=o("toStringTag"),s="Arguments"==r(function(){return arguments}()),l=function(e,t){try{return e[t]}catch(n){}};e.exports=i?r:function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=l(t=Object(e),a))?n:s?r(t):"Object"==(i=r(t))&&"function"==typeof t.callee?"Arguments":i}},f6b4:function(e,t,n){"use strict";var i=n("c532");function r(){this.handlers=[]}r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){i.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=r},f6b6:function(e,t,n){},f772:function(e,t,n){var i=n("5692"),r=n("90e3"),o=i("keys");e.exports=function(e){return o[e]||(o[e]=r(e))}},f893:function(e,t,n){e.exports={default:n("8119"),__esModule:!0}},f8cd:function(e,t,n){var i=n("a691");e.exports=function(e){var t=i(e);if(t<0)throw RangeError("The argument can't be less than 0");return t}},f9d4:function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";e.defineMode("javascript",(function(t,n){var i,r,o=t.indentUnit,a=n.statementIndent,s=n.jsonld,l=n.json||s,c=n.typescript,u=n.wordCharacters||/[\w$\xa1-\uffff]/,d=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),n=e("keyword b"),i=e("keyword c"),r=e("keyword d"),o=e("operator"),a={type:"atom",style:"atom"};return{if:e("if"),while:t,with:t,else:n,do:n,try:n,finally:n,return:r,break:r,continue:r,new:e("new"),delete:i,void:i,throw:i,debugger:e("debugger"),var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:o,typeof:o,instanceof:o,true:a,false:a,null:a,undefined:a,NaN:a,Infinity:a,this:e("this"),class:e("class"),super:e("atom"),yield:i,export:e("export"),import:e("import"),extends:i,await:i}}(),h=/[+\-*&%=<>!?|~^@]/,f=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function p(e){var t,n=!1,i=!1;while(null!=(t=e.next())){if(!n){if("/"==t&&!i)return;"["==t?i=!0:i&&"]"==t&&(i=!1)}n=!n&&"\\"==t}}function m(e,t,n){return i=e,r=n,t}function g(e,t){var n=e.next();if('"'==n||"'"==n)return t.tokenize=v(n),t.tokenize(e,t);if("."==n&&e.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return m("number","number");if("."==n&&e.match(".."))return m("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(n))return m(n);if("="==n&&e.eat(">"))return m("=>","operator");if("0"==n&&e.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return m("number","number");if(/\d/.test(n))return e.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),m("number","number");if("/"==n)return e.eat("*")?(t.tokenize=b,b(e,t)):e.eat("/")?(e.skipToEnd(),m("comment","comment")):et(e,t,1)?(p(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),m("regexp","string-2")):(e.eat("="),m("operator","operator",e.current()));if("`"==n)return t.tokenize=y,y(e,t);if("#"==n&&"!"==e.peek())return e.skipToEnd(),m("meta","meta");if("#"==n&&e.eatWhile(u))return m("variable","property");if("<"==n&&e.match("!--")||"-"==n&&e.match("->")&&!/\S/.test(e.string.slice(0,e.start)))return e.skipToEnd(),m("comment","comment");if(h.test(n))return">"==n&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=n&&"="!=n||e.eat("="):/[<>*+\-|&?]/.test(n)&&(e.eat(n),">"==n&&e.eat(n))),"?"==n&&e.eat(".")?m("."):m("operator","operator",e.current());if(u.test(n)){e.eatWhile(u);var i=e.current();if("."!=t.lastType){if(d.propertyIsEnumerable(i)){var r=d[i];return m(r.type,r.style,i)}if("async"==i&&e.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return m("async","keyword",i)}return m("variable","variable",i)}}function v(e){return function(t,n){var i,r=!1;if(s&&"@"==t.peek()&&t.match(f))return n.tokenize=g,m("jsonld-keyword","meta");while(null!=(i=t.next())){if(i==e&&!r)break;r=!r&&"\\"==i}return r||(n.tokenize=g),m("string","string")}}function b(e,t){var n,i=!1;while(n=e.next()){if("/"==n&&i){t.tokenize=g;break}i="*"==n}return m("comment","comment")}function y(e,t){var n,i=!1;while(null!=(n=e.next())){if(!i&&("`"==n||"$"==n&&e.eat("{"))){t.tokenize=g;break}i=!i&&"\\"==n}return m("quasi","string-2",e.current())}var w="([{}])";function x(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var n=e.string.indexOf("=>",e.start);if(!(n<0)){if(c){var i=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,n));i&&(n=i.index)}for(var r=0,o=!1,a=n-1;a>=0;--a){var s=e.string.charAt(a),l=w.indexOf(s);if(l>=0&&l<3){if(!r){++a;break}if(0==--r){"("==s&&(o=!0);break}}else if(l>=3&&l<6)++r;else if(u.test(s))o=!0;else if(/["'\/`]/.test(s))for(;;--a){if(0==a)return;var d=e.string.charAt(a-1);if(d==s&&"\\"!=e.string.charAt(a-2)){a--;break}}else if(o&&!r){++a;break}}o&&!r&&(t.fatArrowAt=a)}}var _={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0};function k(e,t,n,i,r,o){this.indented=e,this.column=t,this.type=n,this.prev=r,this.info=o,null!=i&&(this.align=i)}function C(e,t){for(var n=e.localVars;n;n=n.next)if(n.name==t)return!0;for(var i=e.context;i;i=i.prev)for(n=i.vars;n;n=n.next)if(n.name==t)return!0}function S(e,t,n,i,r){var o=e.cc;O.state=e,O.stream=r,O.marked=null,O.cc=o,O.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);while(1){var a=o.length?o.pop():l?W:V;if(a(n,i)){while(o.length&&o[o.length-1].lex)o.pop()();return O.marked?O.marked:"variable"==n&&C(e,i)?"variable-2":t}}}var O={state:null,column:null,marked:null,cc:null};function T(){for(var e=arguments.length-1;e>=0;e--)O.cc.push(arguments[e])}function E(){return T.apply(null,arguments),!0}function D(e,t){for(var n=t;n;n=n.next)if(n.name==e)return!0;return!1}function M(e){var t=O.state;if(O.marked="def",t.context)if("var"==t.lexical.info&&t.context&&t.context.block){var i=A(e,t.context);if(null!=i)return void(t.context=i)}else if(!D(e,t.localVars))return void(t.localVars=new L(e,t.localVars));n.globalVars&&!D(e,t.globalVars)&&(t.globalVars=new L(e,t.globalVars))}function A(e,t){if(t){if(t.block){var n=A(e,t.prev);return n?n==t.prev?t:new I(n,t.vars,!0):null}return D(e,t.vars)?t:new I(t.prev,new L(e,t.vars),!1)}return null}function N(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function I(e,t,n){this.prev=e,this.vars=t,this.block=n}function L(e,t){this.name=e,this.next=t}var P=new L("this",new L("arguments",null));function $(){O.state.context=new I(O.state.context,O.state.localVars,!1),O.state.localVars=P}function F(){O.state.context=new I(O.state.context,O.state.localVars,!0),O.state.localVars=null}function j(){O.state.localVars=O.state.context.vars,O.state.context=O.state.context.prev}function z(e,t){var n=function(){var n=O.state,i=n.indented;if("stat"==n.lexical.type)i=n.lexical.indented;else for(var r=n.lexical;r&&")"==r.type&&r.align;r=r.prev)i=r.indented;n.lexical=new k(i,O.stream.column(),e,null,n.lexical,t)};return n.lex=!0,n}function B(){var e=O.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function R(e){function t(n){return n==e?E():";"==e||"}"==n||")"==n||"]"==n?T():E(t)}return t}function V(e,t){return"var"==e?E(z("vardef",t),Ce,R(";"),B):"keyword a"==e?E(z("form"),U,V,B):"keyword b"==e?E(z("form"),V,B):"keyword d"==e?O.stream.match(/^\s*$/,!1)?E():E(z("stat"),G,R(";"),B):"debugger"==e?E(R(";")):"{"==e?E(z("}"),F,de,B,j):";"==e?E():"if"==e?("else"==O.state.lexical.info&&O.state.cc[O.state.cc.length-1]==B&&O.state.cc.pop()(),E(z("form"),U,V,B,Me)):"function"==e?E(Le):"for"==e?E(z("form"),Ae,V,B):"class"==e||c&&"interface"==t?(O.marked="keyword",E(z("form","class"==e?e:t),ze,B)):"variable"==e?c&&"declare"==t?(O.marked="keyword",E(V)):c&&("module"==t||"enum"==t||"type"==t)&&O.stream.match(/^\s*\w/,!1)?(O.marked="keyword","enum"==t?E(Ze):"type"==t?E($e,R("operator"),ge,R(";")):E(z("form"),Se,R("{"),z("}"),de,B,B)):c&&"namespace"==t?(O.marked="keyword",E(z("form"),W,V,B)):c&&"abstract"==t?(O.marked="keyword",E(V)):E(z("stat"),re):"switch"==e?E(z("form"),U,R("{"),z("}","switch"),F,de,B,B,j):"case"==e?E(W,R(":")):"default"==e?E(R(":")):"catch"==e?E(z("form"),$,H,V,B,j):"export"==e?E(z("stat"),He,B):"import"==e?E(z("stat"),qe,B):"async"==e?E(V):"@"==t?E(W,V):T(z("stat"),W,R(";"),B)}function H(e){if("("==e)return E(Fe,R(")"))}function W(e,t){return K(e,t,!1)}function q(e,t){return K(e,t,!0)}function U(e){return"("!=e?T():E(z(")"),G,R(")"),B)}function K(e,t,n){if(O.state.fatArrowAt==O.stream.start){var i=n?ee:J;if("("==e)return E($,z(")"),ce(Fe,")"),B,R("=>"),i,j);if("variable"==e)return T($,Se,R("=>"),i,j)}var r=n?X:Y;return _.hasOwnProperty(e)?E(r):"function"==e?E(Le,r):"class"==e||c&&"interface"==t?(O.marked="keyword",E(z("form"),je,B)):"keyword c"==e||"async"==e?E(n?q:W):"("==e?E(z(")"),G,R(")"),B,r):"operator"==e||"spread"==e?E(n?q:W):"["==e?E(z("]"),Xe,B,r):"{"==e?ue(ae,"}",null,r):"quasi"==e?T(Z,r):"new"==e?E(te(n)):"import"==e?E(W):E()}function G(e){return e.match(/[;\}\)\],]/)?T():T(W)}function Y(e,t){return","==e?E(G):X(e,t,!1)}function X(e,t,n){var i=0==n?Y:X,r=0==n?W:q;return"=>"==e?E($,n?ee:J,j):"operator"==e?/\+\+|--/.test(t)||c&&"!"==t?E(i):c&&"<"==t&&O.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?E(z(">"),ce(ge,">"),B,i):"?"==t?E(W,R(":"),r):E(r):"quasi"==e?T(Z,i):";"!=e?"("==e?ue(q,")","call",i):"."==e?E(oe,i):"["==e?E(z("]"),G,R("]"),B,i):c&&"as"==t?(O.marked="keyword",E(ge,i)):"regexp"==e?(O.state.lastType=O.marked="operator",O.stream.backUp(O.stream.pos-O.stream.start-1),E(r)):void 0:void 0}function Z(e,t){return"quasi"!=e?T():"${"!=t.slice(t.length-2)?E(Z):E(W,Q)}function Q(e){if("}"==e)return O.marked="string-2",O.state.tokenize=y,E(Z)}function J(e){return x(O.stream,O.state),T("{"==e?V:W)}function ee(e){return x(O.stream,O.state),T("{"==e?V:q)}function te(e){return function(t){return"."==t?E(e?ie:ne):"variable"==t&&c?E(xe,e?X:Y):T(e?q:W)}}function ne(e,t){if("target"==t)return O.marked="keyword",E(Y)}function ie(e,t){if("target"==t)return O.marked="keyword",E(X)}function re(e){return":"==e?E(B,V):T(Y,R(";"),B)}function oe(e){if("variable"==e)return O.marked="property",E()}function ae(e,t){return"async"==e?(O.marked="property",E(ae)):"variable"==e||"keyword"==O.style?(O.marked="property","get"==t||"set"==t?E(se):(c&&O.state.fatArrowAt==O.stream.start&&(n=O.stream.match(/^\s*:\s*/,!1))&&(O.state.fatArrowAt=O.stream.pos+n[0].length),E(le))):"number"==e||"string"==e?(O.marked=s?"property":O.style+" property",E(le)):"jsonld-keyword"==e?E(le):c&&N(t)?(O.marked="keyword",E(ae)):"["==e?E(W,he,R("]"),le):"spread"==e?E(q,le):"*"==t?(O.marked="keyword",E(ae)):":"==e?T(le):void 0;var n}function se(e){return"variable"!=e?T(le):(O.marked="property",E(Le))}function le(e){return":"==e?E(q):"("==e?T(Le):void 0}function ce(e,t,n){function i(r,o){if(n?n.indexOf(r)>-1:","==r){var a=O.state.lexical;return"call"==a.info&&(a.pos=(a.pos||0)+1),E((function(n,i){return n==t||i==t?T():T(e)}),i)}return r==t||o==t?E():n&&n.indexOf(";")>-1?T(e):E(R(t))}return function(n,r){return n==t||r==t?E():T(e,i)}}function ue(e,t,n){for(var i=3;i<arguments.length;i++)O.cc.push(arguments[i]);return E(z(t,n),ce(e,t),B)}function de(e){return"}"==e?E():T(V,de)}function he(e,t){if(c){if(":"==e)return E(ge);if("?"==t)return E(he)}}function fe(e,t){if(c&&(":"==e||"in"==t))return E(ge)}function pe(e){if(c&&":"==e)return O.stream.match(/^\s*\w+\s+is\b/,!1)?E(W,me,ge):E(ge)}function me(e,t){if("is"==t)return O.marked="keyword",E()}function ge(e,t){return"keyof"==t||"typeof"==t||"infer"==t?(O.marked="keyword",E("typeof"==t?q:ge)):"variable"==e||"void"==t?(O.marked="type",E(we)):"|"==t||"&"==t?E(ge):"string"==e||"number"==e||"atom"==e?E(we):"["==e?E(z("]"),ce(ge,"]",","),B,we):"{"==e?E(z("}"),ce(be,"}",",;"),B,we):"("==e?E(ce(ye,")"),ve,we):"<"==e?E(ce(ge,">"),ge):void 0}function ve(e){if("=>"==e)return E(ge)}function be(e,t){return"variable"==e||"keyword"==O.style?(O.marked="property",E(be)):"?"==t||"number"==e||"string"==e?E(be):":"==e?E(ge):"["==e?E(R("variable"),fe,R("]"),be):"("==e?T(Pe,be):void 0}function ye(e,t){return"variable"==e&&O.stream.match(/^\s*[?:]/,!1)||"?"==t?E(ye):":"==e?E(ge):"spread"==e?E(ye):T(ge)}function we(e,t){return"<"==t?E(z(">"),ce(ge,">"),B,we):"|"==t||"."==e||"&"==t?E(ge):"["==e?E(ge,R("]"),we):"extends"==t||"implements"==t?(O.marked="keyword",E(ge)):"?"==t?E(ge,R(":"),ge):void 0}function xe(e,t){if("<"==t)return E(z(">"),ce(ge,">"),B,we)}function _e(){return T(ge,ke)}function ke(e,t){if("="==t)return E(ge)}function Ce(e,t){return"enum"==t?(O.marked="keyword",E(Ze)):T(Se,he,Ee,De)}function Se(e,t){return c&&N(t)?(O.marked="keyword",E(Se)):"variable"==e?(M(t),E()):"spread"==e?E(Se):"["==e?ue(Te,"]"):"{"==e?ue(Oe,"}"):void 0}function Oe(e,t){return"variable"!=e||O.stream.match(/^\s*:/,!1)?("variable"==e&&(O.marked="property"),"spread"==e?E(Se):"}"==e?T():"["==e?E(W,R("]"),R(":"),Oe):E(R(":"),Se,Ee)):(M(t),E(Ee))}function Te(){return T(Se,Ee)}function Ee(e,t){if("="==t)return E(q)}function De(e){if(","==e)return E(Ce)}function Me(e,t){if("keyword b"==e&&"else"==t)return E(z("form","else"),V,B)}function Ae(e,t){return"await"==t?E(Ae):"("==e?E(z(")"),Ne,B):void 0}function Ne(e){return"var"==e?E(Ce,Ie):"variable"==e?E(Ie):T(Ie)}function Ie(e,t){return")"==e?E():";"==e?E(Ie):"in"==t||"of"==t?(O.marked="keyword",E(W,Ie)):T(W,Ie)}function Le(e,t){return"*"==t?(O.marked="keyword",E(Le)):"variable"==e?(M(t),E(Le)):"("==e?E($,z(")"),ce(Fe,")"),B,pe,V,j):c&&"<"==t?E(z(">"),ce(_e,">"),B,Le):void 0}function Pe(e,t){return"*"==t?(O.marked="keyword",E(Pe)):"variable"==e?(M(t),E(Pe)):"("==e?E($,z(")"),ce(Fe,")"),B,pe,j):c&&"<"==t?E(z(">"),ce(_e,">"),B,Pe):void 0}function $e(e,t){return"keyword"==e||"variable"==e?(O.marked="type",E($e)):"<"==t?E(z(">"),ce(_e,">"),B):void 0}function Fe(e,t){return"@"==t&&E(W,Fe),"spread"==e?E(Fe):c&&N(t)?(O.marked="keyword",E(Fe)):c&&"this"==e?E(he,Ee):T(Se,he,Ee)}function je(e,t){return"variable"==e?ze(e,t):Be(e,t)}function ze(e,t){if("variable"==e)return M(t),E(Be)}function Be(e,t){return"<"==t?E(z(">"),ce(_e,">"),B,Be):"extends"==t||"implements"==t||c&&","==e?("implements"==t&&(O.marked="keyword"),E(c?ge:W,Be)):"{"==e?E(z("}"),Re,B):void 0}function Re(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||c&&N(t))&&O.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(O.marked="keyword",E(Re)):"variable"==e||"keyword"==O.style?(O.marked="property",E(Ve,Re)):"number"==e||"string"==e?E(Ve,Re):"["==e?E(W,he,R("]"),Ve,Re):"*"==t?(O.marked="keyword",E(Re)):c&&"("==e?T(Pe,Re):";"==e||","==e?E(Re):"}"==e?E():"@"==t?E(W,Re):void 0}function Ve(e,t){if("?"==t)return E(Ve);if(":"==e)return E(ge,Ee);if("="==t)return E(q);var n=O.state.lexical.prev,i=n&&"interface"==n.info;return T(i?Pe:Le)}function He(e,t){return"*"==t?(O.marked="keyword",E(Ye,R(";"))):"default"==t?(O.marked="keyword",E(W,R(";"))):"{"==e?E(ce(We,"}"),Ye,R(";")):T(V)}function We(e,t){return"as"==t?(O.marked="keyword",E(R("variable"))):"variable"==e?T(q,We):void 0}function qe(e){return"string"==e?E():"("==e?T(W):T(Ue,Ke,Ye)}function Ue(e,t){return"{"==e?ue(Ue,"}"):("variable"==e&&M(t),"*"==t&&(O.marked="keyword"),E(Ge))}function Ke(e){if(","==e)return E(Ue,Ke)}function Ge(e,t){if("as"==t)return O.marked="keyword",E(Ue)}function Ye(e,t){if("from"==t)return O.marked="keyword",E(W)}function Xe(e){return"]"==e?E():T(ce(q,"]"))}function Ze(){return T(z("form"),Se,R("{"),z("}"),ce(Qe,"}"),B,B)}function Qe(){return T(Se,Ee)}function Je(e,t){return"operator"==e.lastType||","==e.lastType||h.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}function et(e,t,n){return t.tokenize==g&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(n||0)))}return j.lex=!0,B.lex=!0,{startState:function(e){var t={tokenize:g,lastType:"sof",cc:[],lexical:new k((e||0)-o,0,"block",!1),localVars:n.localVars,context:n.localVars&&new I(null,null,!1),indented:e||0};return n.globalVars&&"object"==_typeof2(n.globalVars)&&(t.globalVars=n.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),x(e,t)),t.tokenize!=b&&e.eatSpace())return null;var n=t.tokenize(e,t);return"comment"==i?n:(t.lastType="operator"!=i||"++"!=r&&"--"!=r?i:"incdec",S(t,n,i,r,e))},indent:function(t,i){if(t.tokenize==b||t.tokenize==y)return e.Pass;if(t.tokenize!=g)return 0;var r,s=i&&i.charAt(0),l=t.lexical;if(!/^\s*else\b/.test(i))for(var c=t.cc.length-1;c>=0;--c){var u=t.cc[c];if(u==B)l=l.prev;else if(u!=Me)break}while(("stat"==l.type||"form"==l.type)&&("}"==s||(r=t.cc[t.cc.length-1])&&(r==Y||r==X)&&!/^[,\.=+\-*:?[\(]/.test(i)))l=l.prev;a&&")"==l.type&&"stat"==l.prev.type&&(l=l.prev);var d=l.type,h=s==d;return"vardef"==d?l.indented+("operator"==t.lastType||","==t.lastType?l.info.length+1:0):"form"==d&&"{"==s?l.indented:"form"==d?l.indented+o:"stat"==d?l.indented+(Je(t,i)?a||o:0):"switch"!=l.info||h||0==n.doubleIndentSwitch?l.align?l.column+(h?0:1):l.indented+(h?0:o):l.indented+(/^(?:case|default)\b/.test(i)?o:2*o)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:l?null:"/*",blockCommentEnd:l?null:"*/",blockCommentContinue:l?null:" * ",lineComment:l?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:l?"json":"javascript",jsonldMode:s,jsonMode:l,expressionAllowed:et,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=W&&t!=q||e.cc.pop()}}})),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})}))},faf5:function(e,t,n){e.exports=!n("0bad")&&!n("4b8b")((function(){return 7!=Object.defineProperty(n("05f5")("div"),"a",{get:function(){return 7}}).a}))},fb15:function(e,t,n){"use strict";if(n.r(t),n.d(t,"CodeMirror",(function(){return ys})),n.d(t,"AwsuiCodemirror",(function(){return y})),n.d(t,"install",(function(){return xs})),n.d(t,"element",(function(){return l})),n.d(t,"Row",(function(){return _})),n.d(t,"Col",(function(){return S})),n.d(t,"Button",(function(){return N})),n.d(t,"ButtonGroup",(function(){return z})),n.d(t,"Radio",(function(){return U})),n.d(t,"Checkbox",(function(){return J})),n.d(t,"Input",(function(){return ve})),n.d(t,"InputNumber",(function(){return Ce})),n.d(t,"Select",(function(){return Ae})),n.d(t,"BOMetadataSelect",(function(){return Be})),n.d(t,"Cascader",(function(){return Ke})),n.d(t,"Switch",(function(){return et})),n.d(t,"Slider",(function(){return st})),n.d(t,"TimePicker",(function(){return pt})),n.d(t,"ColorPicker",(function(){return kt})),n.d(t,"IconPicker",(function(){return Mt})),n.d(t,"Formula",(function(){return Ft})),n.d(t,"Upload",(function(){return Gt})),n.d(t,"AwsuiUploadImage",(function(){return an})),n.d(t,"Tree",(function(){return di})),n.d(t,"Layout",(function(){return bi})),n.d(t,"Header",(function(){return Si})),n.d(t,"Aside",(function(){return Ni})),n.d(t,"Main",(function(){return zi})),n.d(t,"Footer",(function(){return Ui})),n.d(t,"Form",(function(){return tr})),n.d(t,"FormItem",(function(){return fr})),n.d(t,"DownSelect",(function(){return wr})),n.d(t,"DownSelectItem",(function(){return Tr})),n.d(t,"Tabs",(function(){return no})),n.d(t,"TabPane",(function(){return uo})),n.d(t,"Dialog",(function(){return ra})),n.d(t,"Sidebar",(function(){return da})),n.d(t,"Backtop",(function(){return wa})),n.d(t,"CodeHelper",(function(){return Ea})),n.d(t,"Address",(function(){return Pa})),n.d(t,"inputIconClick",(function(){return Va})),n.d(t,"AppInfo",(function(){return ns})),n.d(t,"AppSelect",(function(){return cs})),n.d(t,"DDictionary",(function(){return Ya})),n.d(t,"tools",(function(){return bs})),n.d(t,"Axios",(function(){return w["a"]})),"undefined"!==typeof window){var i=window.document.currentScript,r=n("8875");i=r(),"currentScript"in document||Object.defineProperty(document,"currentScript",{get:r});var o=i&&i.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);o&&(n.p=o[1])}n("d81d"),n("b0c0");var a=n("5c96"),s=n.n(a),l=(n("0fae"),{Element:s.a,install:function(e){e.use(s.a)}}),c=(n("c7db"),n("1cfa"),n("a4c8"),n("f3a7")),u=n.n(c),d=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"awsui-codemirror",class:{merge:e.merge}},[e.merge?n("div",{ref:"mergeview"}):n("textarea",{ref:"textarea",attrs:{name:e.name,placeholder:e.placeholder}})])},h=[],f=(n("99af"),n("4de4"),n("4160"),n("cca6"),n("ac1f"),n("5319"),n("159b"),n("202b"),n("a9ac"),window.CodeMirror||u.a);"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,t){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(e),i=1;i<arguments.length;i++){var r=arguments[i];if(null!=r)for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o])}return n},writable:!0,configurable:!0});var p={name:"AwsuiCodemirror",data:function(){return{content:"",codemirror:null,cminstance:null}},props:{code:String,value:String,marker:Function,unseenLines:Array,name:{type:String,default:"codemirror"},placeholder:{type:String,default:"请输入内容"},merge:{type:Boolean,default:!1},options:{type:Object,default:function(){return{}}},events:{type:Array,default:function(){return[]}},globalOptions:{type:Object,default:function(){return{}}},globalEvents:{type:Array,default:function(){return[]}}},watch:{options:{deep:!0,handler:function(e){for(var t in e)this.cminstance.setOption(t,e[t])}},merge:function(){this.$nextTick(this.switchMerge)},code:function(e){this.handerCodeChange(e)},value:function(e){this.handerCodeChange(e)}},methods:{initialize:function(){var e=this,t=Object.assign({},this.globalOptions,this.options);this.merge?(this.codemirror=f.MergeView(this.$refs.mergeview,t),this.cminstance=this.codemirror.edit):(this.codemirror=f.fromTextArea(this.$refs.textarea,t),this.cminstance=this.codemirror,this.cminstance.setValue(this.code||this.value||this.content),setTimeout((function(){e.cminstance.refresh()}),100)),this.cminstance.on("change",(function(t){e.content=t.getValue(),e.$emit&&e.$emit("input",e.content)})),this.cminstance.on("keyup",(function(e,t){!e.state.completionActive&&(t.keyCode>=65&&t.keyCode<=90||50===t.keyCode||8===t.keyCode)&&f.commands.autocomplete(e,null,{completeSingle:!1})}));var n={};["scroll","changes","beforeChange","cursorActivity","keyHandled","inputRead","electricInput","beforeSelectionChange","viewportChange","swapDoc","gutterClick","gutterContextMenu","focus","blur","refresh","optionChange","scrollCursorIntoView","update"].concat(this.events).concat(this.globalEvents).filter((function(e){return!n[e]&&(n[e]=!0)})).forEach((function(t){e.cminstance.on(t,(function(){for(var n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];e.$emit.apply(e,[t].concat(i));var o=t.replace(/([A-Z])/g,"-$1").toLowerCase();o!==t&&e.$emit.apply(e,[o].concat(i))}))})),this.$emit("ready",this.codemirror),this.unseenLineMarkers(),this.refresh()},refresh:function(){var e=this;this.$nextTick((function(){e.cminstance.refresh()}))},destroy:function(){var e=this.cminstance.doc.cm.getWrapperElement();e&&e.remove&&e.remove()},handerCodeChange:function(e){var t=this,n=this.cminstance.getValue();if(e!==n){var i=this.cminstance.getScrollInfo();this.cminstance.setValue(e),setTimeout((function(){t.cminstance.refresh()}),100),this.content=e,this.cminstance.scrollTo(i.left,i.top)}this.unseenLineMarkers()},unseenLineMarkers:function(){var e=this;void 0!==this.unseenLines&&void 0!==this.marker&&this.unseenLines.forEach((function(t){var n=e.cminstance.lineInfo(t);e.cminstance.setGutterMarker(t,"breakpoints",n.gutterMarkers?null:e.marker())}))},switchMerge:function(){var e=this.cminstance.doc.history,t=this.cminstance.doc.cleanGeneration;this.options.value=this.cminstance.getValue(),this.destroy(),this.initialize(),this.cminstance.doc.history=e,this.cminstance.doc.cleanGeneration=t}},mounted:function(){this.initialize()},beforeDestroy:function(){this.destroy()}},m=p,g=n("2877"),v=Object(g["a"])(m,d,h,!1,null,"1b9ed00a",null),b=v.exports;b.install=function(e,t){t&&(t.options&&(b.props.globalOptions.default=function(){return t.options}),t.events&&(b.props.globalEvents.default=function(){return t.events})),e.component(b.name,b)};var y=b,w=n("0d5e"),x=(n("a9e3"),{name:"AwsuiRow",componentName:"AwsuiRow",props:{tag:{type:String,default:"div"},gutter:Number,type:String,justify:{type:String,default:"start"},align:{type:String,default:"top"}},computed:{style:function(){var e={};return this.gutter&&(e.marginLeft="-".concat(this.gutter/2,"px"),e.marginRight=e.marginLeft),e}},render:function(e){var t=this;return e(this.tag,{class:["awsui-row","start"!==this.justify?"is-justify-".concat(this.justify):"","top"!==this.align?"is-align-".concat(this.align):"",{"awsui-row--flex":"flex"===this.type}],style:this.style,on:{click:function(){for(var e=arguments.length,n=new Array(e),i=0;i<e;i++)n[i]=arguments[i];t.$emit.apply(t,["click"].concat(n))}}},this.$slots.default)},install:function(e){e.component(x.name,x)}}),_=x,k=(n("b64b"),n("53ca")),C={name:"AwsuiCol",props:{span:{type:Number,default:24},tag:{type:String,default:"div"},offset:Number,pull:Number,push:Number,xs:[Number,Object],sm:[Number,Object],md:[Number,Object],lg:[Number,Object],xl:[Number,Object]},computed:{gutter:function(){var e=this.$parent;while(e&&"AwsuiRow"!==e.$options.componentName)e=e.$parent;return e?e.gutter:0}},render:function(e){var t=this,n=[],i={};return this.gutter&&(i.paddingLeft=this.gutter/2+"px",i.paddingRight=i.paddingLeft),["span","offset","pull","push"].forEach((function(e){(t[e]||0===t[e])&&n.push("span"!==e?"awsui-col-".concat(e,"-").concat(t[e]):"awsui-col-".concat(t[e]))})),["xs","sm","md","lg","xl"].forEach((function(e){if("number"===typeof t[e])n.push("awsui-col-".concat(e,"-").concat(t[e]));else if("object"===Object(k["a"])(t[e])){var i=t[e];Object.keys(i).forEach((function(t){n.push("span"!==t?"awsui-col-".concat(e,"-").concat(t,"-").concat(i[t]):"awsui-col-".concat(e,"-").concat(i[t]))}))}})),e(this.tag,{class:["awsui-col",n],style:i},this.$slots.default)},install:function(e){e.component(C.name,C)}},S=C,O=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("button",{staticClass:"awsui-button",class:[e.type?"awsui-button--"+e.type:"",e.buttonSize?"awsui-button--"+e.buttonSize:"",{"is-disabled":e.buttonDisabled,"is-loading":e.loading,"is-plain":e.plain,"is-round":e.round,"is-circle":e.circle,"is-square":e.square}],attrs:{disabled:e.buttonDisabled,autofocus:e.autofocus,type:e.nativeType},on:{click:e.handleClick}},[n("span",{staticClass:"awsui-button-content"},[e.$slots.default?[""!=e.icon?n("i",{staticClass:"awsui-iconfont",staticStyle:{"margin-right":"4px"},domProps:{innerHTML:e._s(e.icon)}}):e._e(),e.loading?n("i",{staticClass:"awsui-loading",staticStyle:{"margin-right":"4px"}}):e._e(),e._t("default")]:[""!=e.icon?n("i",{staticClass:"awsui-iconfont",domProps:{innerHTML:e._s(e.icon)}}):e._e(),e.loading?n("i",{staticClass:"awsui-loading"}):e._e()]],2)])},T=[],E={name:"AwsuiButton",inject:{awsuiForm:{default:""}},props:{type:{type:String,default:"default"},size:String,icon:{type:String,default:""},nativeType:{type:String,default:"button"},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean,square:Boolean},computed:{buttonSize:function(){return this.size},buttonDisabled:function(){return this.disabled||(this.awsuiForm||{}).disabled}},methods:{handleClick:function(e){this.$emit("click",e)}}},D=E,M=(n("9949"),Object(g["a"])(D,O,T,!1,null,"d4629d24",null)),A=M.exports;A.install=function(e){e.component(A.name,A)};var N=A,I=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"awsui-button-group"},[e._t("default")],2)},L=[],P={name:"AwsuiButtonGroup"},$=P,F=(n("646a"),Object(g["a"])($,I,L,!1,null,null,null)),j=F.exports;j.install=function(e){e.component(j.name,j)};var z=j,B=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"awsui-component"},[[e.group?n("el-radio-group",{on:{change:e.change},model:{value:e.radio,callback:function(t){e.radio=t},expression:"radio"}},e._l(e.radios,(function(t,i){return n("el-radio",{key:i,staticClass:"awsui-radio",class:[e.size?"awsui-radio-"+e.size:"",e.className?e.className:""],attrs:{label:t.value,disabled:t.disabled||(e.awsuiForm||{}).disabled}},[e._v(" "+e._s("undefined"!=typeof t.label?t.label:t.value)+" ")])})),1):n("el-radio",{staticClass:"awsui-radio",class:[e.size?"awsui-radio-"+e.size:"",e.className?e.className:""],attrs:{label:e.label,disabled:e.isDisabled},on:{change:e.change},model:{value:e.radio,callback:function(t){e.radio=t},expression:"radio"}},[e.showText?e._t("default"):e._e()],2)]],2)},R=[],V={name:"AwsuiRadio",components:{"el-radio":a["Radio"],"el-radio-group":a["RadioGroup"]},inject:{awsuiForm:{default:""}},props:{group:{type:Boolean,default:!1},handle:{type:Boolean,default:!1},radios:{type:Array,default:function(){return[]}},value:{},label:{},text:String,disabled:{type:Boolean,default:!1},className:String,size:{type:String,default:""},showText:{type:Boolean,default:!0}},data:function(){return{}},computed:{radio:{get:function(){return this.value},set:function(e){this.$emit("input",e)}},isDisabled:function(){return this.disabled||(this.awsuiForm||{}).disabled}},mounted:function(){this.$nextTick((function(){this.showText||(this.$el.children[0].lastElementChild.innerText="")}))},methods:{change:function(e){this.$emit("change",e),this.$emit("input",e)}}},H=V,W=(n("81196"),Object(g["a"])(H,B,R,!1,null,null,null)),q=W.exports;q.install=function(e){e.component(q.name,q)};var U=q,K=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"awsui-component"},[e.checkAll?[n("el-checkbox",{attrs:{indeterminate:e.isIndeterminate},on:{change:e.handleCheckAllChange},model:{value:e.isCheckAll,callback:function(t){e.isCheckAll=t},expression:"isCheckAll"}},[e._v(" 全选 ")]),n("div",{staticStyle:{margin:"15px 0"}}),n("el-checkbox-group",{on:{change:e.handleCheckedListChange},model:{value:e.checkList,callback:function(t){e.checkList=t},expression:"checkList"}},e._l(e.list,(function(t,i){return n("el-checkbox",{key:i,staticClass:"awsui-checkbox",class:[e.checkboxSize?"awsui-checkbox-"+e.checkboxSize:"",e.className?e.className:""],attrs:{label:t.value,disabled:t.disabled||(e.awsuiForm||{}).disabled}},[e._v(" "+e._s("undefined"!=typeof t.label?t.label:t.value)+" ")])})),1)]:[e.group?n("el-checkbox-group",{on:{change:e.changeList},model:{value:e.checkList,callback:function(t){e.checkList=t},expression:"checkList"}},e._l(e.list,(function(t,i){return n("el-checkbox",{key:i,staticClass:"awsui-checkbox",class:[e.checkboxSize?"awsui-checkbox-"+e.checkboxSize:"",e.className?e.className:""],attrs:{label:t.value,disabled:t.disabled||(e.awsuiForm||{}).disabled}},[e._v(" "+e._s("undefined"!=typeof t.label?t.label:t.value)+" ")])})),1):n("el-checkbox",e._b({staticClass:"awsui-checkbox",class:[e.checkboxSize?"awsui-checkbox-"+e.checkboxSize:"",e.className?e.className:""],attrs:{label:void 0!==e.label?e.label:"",disabled:e.isDisabled},on:{change:e.change},model:{value:e.checked,callback:function(t){e.checked=t},expression:"checked"}},"el-checkbox",e.$attrs,!1),[e._t("default")],2)]],2)},G=[],Y={name:"AwsuiCheckbox",components:{"el-checkbox":a["Checkbox"],"el-checkbox-group":a["CheckboxGroup"]},inject:{awsuiForm:{default:""}},props:{checkAll:{type:Boolean,default:!1},group:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},className:String,size:{type:String,default:""},list:{type:Array,default:function(){return[]}},checkedList:{type:Array,default:function(){return[]}},label:{}},data:function(){return{isCheckAll:!1,isIndeterminate:!0,clist:this.list,checkList:this.checkedList}},computed:{checked:{get:function(){return this.$attrs.value||!1},set:function(e){this.$emit("input",e)}},checkboxSize:function(){return this.size},isDisabled:function(){return this.disabled||(this.awsuiForm||{}).disabled}},mounted:function(){},methods:{change:function(e){this.$emit("change",e),this.$emit("input",e)},changeList:function(e){this.checkList=e,this.$emit("change",this.checkList),this.$emit("input",this.checkList)},handleCheckAllChange:function(e){var t=[];this.list.forEach((function(e){t.push(e.value)})),this.checkList=e?t:[],this.isIndeterminate=!1,this.$emit("change",this.checkList),this.$emit("input",this.checkList)},handleCheckedListChange:function(e){var t=e.length;this.isCheckAll=t===this.list.length,this.isIndeterminate=t>0&&t<this.list.length}},watch:{checked:function(e){this.checked=e},checkedList:function(e){this.checkList=e}}},X=Y,Z=(n("a2c5"),Object(g["a"])(X,K,G,!1,null,null,null)),Q=Z.exports;Q.install=function(e){e.component(Q.name,Q)};var J=Q,ee=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"wrapper",class:[{"awsui-input-group":e.$slots.prepend||e.$slots.append,"awsui-input--prefix":e.prefixIcon,"awsui-input--suffix":e.suffixIcon||e.clearable}],on:{mouseenter:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},["textarea"===e.type?["boolean"!==typeof e.required&&void 0!==e.required?[n("label",{ref:"awsuiLabel",staticClass:"awsui-label",style:e.styleLabel,attrs:{for:e.required.id}},[e._v(e._s(e.required.label))])]:e._e(),n("span",{class:!0===e.required?"awsui-required":""},[n("textarea",{ref:"textarea",staticClass:"awsui-input",class:[e.className?e.className:"",{"is-disabled":e.inputDisabled}],style:e.style,attrs:{type:"textarea",disabled:e.inputDisabled,readonly:e.readonly,placeholder:e.placeholder,id:"boolean"!==typeof e.required&&void 0!==e.required?e.required.id:"",maxlength:e.maxLength,autocomplete:e.autocomplete},on:{keydown:e.keydown,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}})])]:[e.$slots.prepend?n("div",{staticClass:"awsui-input-group__prepend"},[e._t("prepend")],2):e._e(),e.prefixIcon?n("i",{staticClass:"awsui-iconfont awsui-input-prefix",domProps:{innerHTML:e._s(e.prefixIcon)}}):e._e(),"boolean"!==typeof e.required&&void 0!==e.required?[n("label",{ref:"awsuiLabel",staticClass:"awsui-label",style:e.styleLabel,attrs:{for:e.required.id}},[e._v(e._s(e.required.label))])]:e._e(),n("span",{class:!0===e.required?"awsui-required":""},[n("input",{ref:"input",staticClass:"awsui-input",class:[e.inputSize?"awsui-input--"+e.inputSize:"",e.className?e.className:"",{"is-disabled":e.inputDisabled}],style:e.style,attrs:{type:e.type?e.showPassword?e.passwordVisible?"text":"password":e.type:"text",placeholder:e.placeholder,disabled:e.inputDisabled,maxlength:e.maxLength,readonly:e.readonly,id:"boolean"!==typeof e.required&&void 0!==e.required?e.required.id:null,autocomplete:e.autocomplete},on:{keydown:e.keydown,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}})]),e.suffixIcon?n("i",{staticClass:"awsui-iconfont awsui-input-suffix",domProps:{innerHTML:e._s(e.suffixIcon)}}):e._e(),e.showClear?n("i",{staticClass:"awsui-iconfont awsui-input-suffix awsui-input-clear",on:{click:e.clear}},[e._v("  ")]):e._e(),e.showPwdVisible?n("i",{staticClass:"awsui-iconfont awsui-input-suffix",staticStyle:{"font-size":"12px",cursor:"pointer"},on:{click:e.handlePasswordVisible}},[e._v("")]):e._e(),e.$slots.append?n("div",{staticClass:"awsui-input-group__append"},[e._t("append")],2):e._e()]],2)},te=[];function ne(e,t,n){this.$children.forEach((function(i){var r=i.$options.componentName;r===e?i.$emit.apply(i,[t].concat(n)):ne.apply(i,[e,t].concat([n]))}))}n("c975");var ie={methods:{dispatch:function(e,t,n){var i=this.$parent||this.$root,r=i.$options.componentName;while(i&&(!r||r!==e))i=i.$parent,i&&(r=i.$options.componentName);i&&i.$emit.apply(i,[t].concat(n))},broadcast:function(e,t,n){ne.call(this,e,t,n)}}},re=(n("fb6a"),n("d3b7"),n("25f0"),n("466d"),n("1276"),n("8bbf")),oe=n.n(re),ae=Object.prototype.hasOwnProperty;function se(){}function le(e,t){return ae.call(e,t)}function ce(e,t,n){var i=e;t=t.replace(/\[(\w+)\]/g,".$1"),t=t.replace(/^\./,"");for(var r=t.split("."),o=0,a=r.length;o<a-1;++o){if(!i&&!n)break;var s=r[o];if(!(s in i)){if(n)throw new Error("please transfer a valid prop path to form item!");break}i=i[s]}return{o:i,k:r[o],v:i?i[r[o]]:null}}var ue=function(e,t){for(var n=0;n!==e.length;++n)if(t(e[n]))return n;return-1},de=function(e,t){var n=ue(e,t);return-1!==n?e[n]:void 0},he={mounted:function(){},methods:{getMigratingConfig:function(){return{props:{},events:{}}}}},fe={name:"AwsuiInput",mixins:[ie,he],inject:{awsuiForm:{default:""},awsuiFormItem:{default:""}},props:{value:[String,Number],placeholder:{type:String,default:"请输入内容"},type:{type:String,default:"text"},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},size:{type:String,default:""},maxLength:Number,className:String,suffixIcon:String,prefixIcon:String,prepend:String,append:String,validateEvent:{type:Boolean,default:!0},autocomplete:{type:String,default:"off"},required:{type:[Boolean,Object],default:!1}},data:function(){return{hovering:!1,focused:!1,passwordVisible:!1,labelWidth:"undefined"!==typeof this.required.labelWidth?this.required.labelWidth:""}},computed:{inputSize:function(){return this.size||this._awsuiFormItemSize||(this.$Awsui||{}).size},inputDisabled:function(){return this.disabled||(this.awsuiForm||{}).disabled},validateState:function(){return this.awsuiFormItem?this.awsuiFormItem.validateState:""},nativeInputValue:function(){return null===this.value||void 0===this.value?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},styleLabel:function(){var e={};return"boolean"!==typeof this.required&&void 0!==this.required&&(this.labelWidth.indexOf("%"),e.width=this.labelWidth),e},style:function(){var e={};return"boolean"!==typeof this.required&&void 0!==this.required&&(this.labelWidth.indexOf("%"),e.width="calc(100% - ".concat(this.labelWidth,")")),e}},created:function(){this.$on("inputSelect",this.select)},mounted:function(){this.setNativeInputValue()},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},keydown:function(e){this.$emit("keydown",e)},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},clear:function(){this.$emit("input",""),this.$emit("change",""),this.$emit("clear")},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("AwsuiFormItem","awsui.form.blur",[this.value])},handleChange:function(e){this.$emit("change",e.target.value)},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},select:function(){this.getInput().select()},handlePasswordVisible:function(){this.passwordVisible=!this.passwordVisible,this.focus()},getInput:function(){return this.$refs.input||this.$refs.textarea}},watch:{value:function(e){this.validateEvent&&this.dispatch("AwsuiFormItem","awsui.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()}}},pe=fe,me=(n("8942"),Object(g["a"])(pe,ee,te,!1,null,"8434a23e",null)),ge=me.exports;ge.install=function(e){e.component(ge.name,ge)};var ve=ge,be=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"awsui-box-component"},["checkbox"===(""!==e.symbol?"text":"number")?n("input",{directives:[{name:"model",rawName:"v-model",value:e.inputValue,expression:"inputValue"}],staticClass:"awsui-input-number",class:[e.inputSize?"awsui-input-number--"+e.inputSize:"",e.className?e.className:"",{"awsui-disabled":e.disabled}],attrs:{max:e.max,min:e.min,readonly:e.readonly,disabled:e.inputNumberDisabled,onkeypress:"return(/[\\d]/.test(String.fromCharCode(event.keyCode)))",type:"checkbox"},domProps:{checked:Array.isArray(e.inputValue)?e._i(e.inputValue,null)>-1:e.inputValue},on:{blur:e.handleBlur,focus:e.handleFocus,input:e.handleInput,change:[function(t){var n=e.inputValue,i=t.target,r=!!i.checked;if(Array.isArray(n)){var o=null,a=e._i(n,o);i.checked?a<0&&(e.inputValue=n.concat([o])):a>-1&&(e.inputValue=n.slice(0,a).concat(n.slice(a+1)))}else e.inputValue=r},e.onChange]}}):"radio"===(""!==e.symbol?"text":"number")?n("input",{directives:[{name:"model",rawName:"v-model",value:e.inputValue,expression:"inputValue"}],staticClass:"awsui-input-number",class:[e.inputSize?"awsui-input-number--"+e.inputSize:"",e.className?e.className:"",{"awsui-disabled":e.disabled}],attrs:{max:e.max,min:e.min,readonly:e.readonly,disabled:e.inputNumberDisabled,onkeypress:"return(/[\\d]/.test(String.fromCharCode(event.keyCode)))",type:"radio"},domProps:{checked:e._q(e.inputValue,null)},on:{blur:e.handleBlur,focus:e.handleFocus,input:e.handleInput,change:[function(t){e.inputValue=null},e.onChange]}}):n("input",{directives:[{name:"model",rawName:"v-model",value:e.inputValue,expression:"inputValue"}],staticClass:"awsui-input-number",class:[e.inputSize?"awsui-input-number--"+e.inputSize:"",e.className?e.className:"",{"awsui-disabled":e.disabled}],attrs:{max:e.max,min:e.min,readonly:e.readonly,disabled:e.inputNumberDisabled,onkeypress:"return(/[\\d]/.test(String.fromCharCode(event.keyCode)))",type:""!==e.symbol?"text":"number"},domProps:{value:e.inputValue},on:{blur:e.handleBlur,focus:e.handleFocus,input:[function(t){t.target.composing||(e.inputValue=t.target.value)},e.handleInput],change:e.onChange}}),n("span",{staticClass:"awsui-input-number-arrow",class:[e.inputSize?"awsui-input-number-arrow--"+e.inputSize:"",{"awsui-disabled":e.disabled}],style:{display:e.showOpt?"block":"none"}},[n("span",{staticClass:"awsui-iconfont",class:[{"awsui-disabled":e.maxDisabled}],on:{click:function(t){return e.changeCount(e.count,1,e.uplength)}}},[e._v("  ")]),n("span",{staticClass:"awsui-iconfont",class:[{"awsui-disabled":e.minDisabled}],on:{click:function(t){return e.changeCount(e.count,-1,e.uplength)}}},[e._v("  ")])])])},ye=[],we={name:"AwsuiInputNumber",inject:{awsuiForm:{default:""}},props:{className:String,value:{type:[String,Number],default:0},disabled:{type:Boolean,default:!1},max:{type:Number,default:1/0},min:{type:Number,default:0},uplength:{type:Number,default:0},symbol:{type:String,default:""},size:{type:String,default:""},inputStyle:{type:Object,default:function(){}},readonly:{type:Boolean,default:!1}},data:function(){return{count:0,svalue:"",maxDisabled:!!this.disabled,minDisabled:!!this.disabled,focused:!1,showOpt:!0}},mounted:function(){var e=""===this.value||null===this.value?void 0:Number(this.value);isNaN(e)?(this.count=0,this.showOpt=!1):(this.svalue=e+this.symbol,"number"===typeof this.min?e<this.min?(this.count=this.min,this.svalue=this.min+this.symbol,this.minDisabled=!0):this.count=e:this.$message({message:"请检查传入的max和min类型,确保为number类型",type:"error"})),0===this.count&&(this.minDisabled=!0)},methods:{setStyle:function(){return this.inputStyle},changeCount:function(e,t,n){this.disabled||(t>0?parseFloat(n)>0?this.count+=parseFloat(n):this.count++:parseFloat(n)>0?this.count-=parseFloat(n):this.count--,this.setCurrentCount())},onChange:function(e){var t=Number(e.target.value.replace(/[^0-9]/gi,""));this.$emit("input",t),this.$emit("change",t)},handleBlur:function(e){this.focused=!1,this.$emit("blur",e)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},setCurrentCount:function(){this.maxDisabled=!1,this.minDisabled=!1,this.count>=this.max&&(this.count=this.max,this.maxDisabled=!0),this.count<=this.min&&(this.count=this.min,this.minDisabled=!0),this.$emit("input",this.count),this.$emit("change",this.count),this.svalue=this.count+this.symbol},handleInput:function(e){var t=e.target.value.replace(/[^0-9]/gi,"");""!==t&&(this.count=Number(t),this.showOpt=!0,this.setCurrentCount())}},computed:{classObject:function(){return{}},inputSize:function(){return this.size},inputNumberDisabled:function(){return this.disabled||(this.awsuiForm||{}).disabled},inputValue:{get:function(){var e=this,t="",n=""===this.value||null===this.value?0:Number(this.value);if(!isNaN(n)){var i=Number(n);e.maxDisabled=!1,e.minDisabled=!1,i>=this.max&&(i=this.max,e.maxDisabled=!0),i<=this.min&&(i=this.min,e.minDisabled=!0),e.count=i,t=i+this.symbol}return t},set:function(e){var t=e.replace(/[^0-9]/gi,"");""!==t&&(this.count=Number(t),this.setCurrentCount())}}},watch:{}},xe=we,_e=(n("6325"),Object(g["a"])(xe,be,ye,!1,null,"e0a0c7e8",null)),ke=_e.exports;ke.install=function(e){e.component(ke.name,ke)};var Ce=ke,Se=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"awsui-box-component"},[e.custom?n("span",{ref:"span",staticClass:"awsui-select-label",style:{color:e.changeColor?"#666":"#c0c4cc",display:e.isFiterable||e.multiple?"none":""},domProps:{innerHTML:e._s(e.setLabel)},on:{click:e.switchTab}}):e._e(),n("el-select",e._b({ref:"awsuiSelect",staticClass:"awsui-select",class:[e.selectSize?"awsui-select--"+e.selectSize:"",e.className?e.className:"",e.changeHeight?"awsui-select-multiple":""],staticStyle:{width:"100%"},attrs:{placeholder:e.placeholder,"reserve-keyword":"",disabled:e.selectDisabled,clearable:e.clearable,multiple:e.multiple,filterable:e.filterable,remote:e.remote,"allow-create":e.allowCreate,"default-first-option":e.defaultFirstOption,"popper-append-to-body":e.popperAppendToBody,"remote-method":e.remoteMethod,loading:e.loading,"loading-text":e.loadingText},on:{focus:e.setWidth,change:e.change,clear:e.handleClearClick,"remove-tag":e.deleteTag},nativeOn:{click:function(t){return e.handleClick(t)}},model:{value:e.selectValue,callback:function(t){e.selectValue=t},expression:"selectValue"}},"el-select",e.$attrs,!1),[e.group?e._l(e.options,(function(t){return n("el-option-group",{key:t.label,attrs:{label:e.custom?"":t.label}},[e.custom?n("li",{staticClass:"el-select-group__title",style:{"margin-top":e.custom?"-5px":"0px"},domProps:{innerHTML:e._s(t.label)}}):e._e(),e._l(t.options,(function(t){return n("el-option",{key:t.value,style:{width:e.width+"px"},attrs:{label:e.custom?e.delHtmlTag(t.label):t.label,value:t.value,disabled:t.disabled},nativeOn:{click:function(n){return e.getItem(t)},keyup:function(n){return!n.type.indexOf("key")&&e._k(n.keyCode,"enter",13,n.key,"Enter")?null:e.getItem(t)}}},[e.custom?[n("div",{staticClass:"awsui-select-option-item-label awsui-ellipsis",domProps:{innerHTML:e._s(t.label)}})]:e._e()],2)}))],2)})):e._l(e.options,(function(t){return n("el-option",{key:t.value,style:{width:e.width+"px"},attrs:{label:e.custom?e.delHtmlTag(t.label):t.label,value:t.value,disabled:t.disabled},nativeOn:{click:function(n){return e.getItem(t)}}},[e.custom?[n("div",{staticClass:"awsui-select-option-item-label awsui-ellipsis",domProps:{innerHTML:e._s(t.label)}})]:e._e()],2)}))],2)],1)},Oe=[],Te=(n("caad"),n("a15b"),n("4d63"),n("2532"),n("498a"),{name:"AwsuiSelect",components:{"el-select":a["Select"],"el-option":a["Option"],"el-option-group":a["OptionGroup"]},inject:{awsuiForm:{default:""}},data:function(){return{list:[],label:this.$attrs.placeholder||"请选择",changeColor:!1,isFiterable:!(!this.custom||!this.filterable),selected:this.multiple?[]:{},changeHeight:!1,width:0}},props:{value:{},group:{type:Boolean,default:!1},className:String,size:{type:String,default:""},loading:{type:Boolean,default:!1},loadingText:{type:String,default:"加载中"},disabled:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},multiple:{type:Boolean,default:!1},custom:{type:Boolean,default:!1},filterable:{type:Boolean,default:!1},remote:{type:Boolean,default:!1},remoteMethod:{type:Function,default:function(){console.log("默认")}},allowCreate:{type:Boolean,default:!1},defaultFirstOption:{type:Boolean,default:!1},popperAppendToBody:{type:Boolean,default:!0},searchList:{default:function(){return[]},type:Array}},computed:{selectValue:{get:function(){return this.value},set:function(e){this.$emit("input",e)}},setLabel:function(){return this.initLabel(),this.label},selectDisabled:function(){return this.disabled||(this.awsuiForm||{}).disabled},options:function(){return this.$attrs.options},selectSize:function(){return this.size},placeholder:function(){return this.$attrs.placeholder||"请选择"}},mounted:function(){var e=this,t=this;t.initLabel(),this.$nextTick((function(){if(void 0!==e.$refs.awsuiSelect&&void 0!==e.$refs.awsuiSelect.$el.getElementsByClassName("el-input__inner")[0]){var n=e.$refs.awsuiSelect.$el.getElementsByClassName("el-input__inner")[0];!e.filterable&&n.getAttribute("readonly")&&n.setAttribute("unselectable","no")}t.setSelectHeight()})),window.addEventListener("resize",(function(){t.setSelectHeight(),t.setWidth()}))},methods:{initLabel:function(){var e=this;this.custom&&this.options.length>0&&this.options.forEach((function(t,n){void 0!==t.options&&t.options.length>0?t.options.forEach((function(t,n){t.value===e.value&&void 0!==t.label&&e.getItem(t)})):t.value===e.value&&void 0!==t.label&&e.getItem(t)}))},delHtmlTag:function(e){var t="";return t=-1!==e.indexOf('<span class="awsui-select-right">')?e.split('<span class="awsui-select-right">')[0]:-1!==e.indexOf("<span class='awsui-select-right'>")?e.split("<span class='awsui-select-right'>")[0]:e,t=t.replace(/<[^>]+>/g,"").replace(/&#[^;]+;/g,"").replace(/[^\u4e00-\u9fa5a-zA-Z0-9\w]/g,"").trim(),t},con:function(e){var t=/[\u4e00-\u9fa5]/g;return e=e.match(t),e.join("")},switchTab:function(){this.custom&&this.filterable&&(this.isFiterable=!0),this.$refs["awsuiSelect"].$el.click()},change:function(e){this.setWidth(),this.$emit("input",e),this.$emit("change",e),this.$refs.awsuiSelect.query="",this.$forceUpdate()},handleClick:function(){this.setWidth(),this.$emit("click")},handleClearClick:function(){this.deleteSelected()},deleteSelected:function(){var e=this.multiple?[]:"";this.label="",""===this.label&&(this.isFiterable=!0),this.change(e),this.$emit("clear")},deleteTag:function(e){this.$emit("remove-tag",e),this.setSelectHeight()},getItem:function(e){if(this.label=e.label,this.changeColor=!0,this.custom&&(this.filterable&&(this.isFiterable=!1),void 0!==e.type&&e.label.includes("awsui-select-right"))){var t=new RegExp("awsui-select-right","g");this.label=e.label.replace(t,e.type)}this.multiple&&this.deleteTag(e.value)},setSelectHeight:function(){var e=this;this.$nextTick((function(){if(void 0!==e.$refs.awsuiSelect&&void 0!==e.$refs.awsuiSelect.$el.getElementsByClassName("el-select__tags")[0]){var t=parseInt(e.$refs.awsuiSelect.$el.getElementsByClassName("el-select__tags")[0].clientHeight);if(void 0!==e.$refs.awsuiSelect.$el.getElementsByClassName("el-input__inner")[0]){var n=e.$refs.awsuiSelect.$el.getElementsByClassName("el-input__inner")[0];t>40?(e.changeHeight=!1,n.style.height=t+"px!important"):(e.changeHeight=!0,n.style.height="28px!important")}}}))},setWidth:function(){var e=this;this.$nextTick((function(){void 0!==e.$refs.awsuiSelect&&(e.width=e.$refs.awsuiSelect.$el.clientWidth)}))}},watch:{width:function(e){if(!this.timer){this.width=e,this.timer=!0;var t=this;setTimeout((function(){console.log(t.width),t.timer=!1}),100)}}}}),Ee=Te,De=(n("6b03"),Object(g["a"])(Ee,Se,Oe,!1,null,null,null)),Me=De.exports;Me.install=function(e){e.component(Me.name,Me)};var Ae=Me,Ne=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("awsui-select",{attrs:{options:e.options,filterable:"",custom:"",clearable:"",multiple:e.defaults.multiple},model:{value:e.BOvalue,callback:function(t){e.BOvalue=t},expression:"BOvalue"}})],1)},Ie=[];function Le(e,t,n,i,r,o,a){try{var s=e[o](a),l=s.value}catch(c){return void n(c)}s.done?t(l):Promise.resolve(l).then(i,r)}function Pe(e){return function(){var t=this,n=arguments;return new Promise((function(i,r){var o=e.apply(t,n);function a(e){Le(o,i,r,a,s,"next",e)}function s(e){Le(o,i,r,a,s,"throw",e)}a(void 0)}))}}n("96cf"),n("e6cf");var $e={name:"BOMetadataSelect",data:function(){return{BOvalue:"",options:[]}},props:{defaults:{type:Object},value:{type:[String,Array]}},watch:{defaults:{handler:function(e){e.data&&e.data.length>0?this.localData(e.data):this.requestData(e)},immediate:!0,deep:!0},value:{handler:function(e){this.BOvalue=e},immediate:!0},BOvalue:function(e){this.$emit("input",e),this.$emit("change",e)}},methods:{requestData:function(e){var t=this;return Pe(_regeneratorRuntime().mark((function n(){var i,r,o,a,s,l;return _regeneratorRuntime().wrap((function(n){while(1)switch(n.prev=n.next){case 0:return n.next=2,t.awsuiaxios.post({url:"jd",data:{cmd:e.cmd,boDefId:e.boDefId,showBOFieldName:e.showBOFieldName,typeFilter:e.typeFilter,valueField:e.valueField,boItemType:e.boItemType,multiple:e.multiple}});case 2:if(i=n.sent,"ok"==i.result)for(r=i.data.data,o=0;o<r.length;o++)r[o].id&&("TEXT"==r[o].columnType||"BIGTEXT"==r[o].columnType?(a={value:r[o].id,type:"text",label:'<i class="awsui-iconfont awsui-margin-right-5" style="color:#3383da;">'.concat(r[o].iconFontCode,"</i>").concat(r[o].text+(e.showBOFieldName?"("+r[o].fieldName+")":""),'<span class="awsui-select-right"><i class="awsui-iconfont awsui-margin-left-5" style="color:#a8caef;">&#xe88c;</i></span>')},t.options.push(a)):"NUMBER"==r[o].columnType?(s={value:r[o].id,type:"number",label:'<i class="awsui-iconfont awsui-margin-right-5" style="color:#3383da;">'.concat(r[o].iconFontCode,"</i>").concat(r[o].text+(e.showBOFieldName?"("+r[o].fieldName+")":""),'<span class="awsui-select-right"><i class="awsui-iconfont awsui-margin-left-5" style="color:#a8caef;">&#xe88e;</i></span>')},t.options.push(s)):"DATE"==r[o].columnType&&(l={value:r[o].id,type:"date",label:'<i class="awsui-iconfont awsui-margin-right-5" style="color:#3383da;">'.concat(r[o].iconFontCode,"</i>").concat(r[o].text+(e.showBOFieldName?"("+r[o].fieldName+")":""),'<span class="awsui-select-right"><i class="awsui-iconfont awsui-margin-left-5" style="color:#a8caef;">&#xe88d;</i></span>')},t.options.push(l)));case 4:case"end":return n.stop()}}),n)})))()},localData:function(e){for(var t=e,n=0;n<t.length;n++)if(t[n].id)if("TEXT"==t[n].columnType||"BIGTEXT"==t[n].columnType){var i={value:t[n].id,type:"text",label:'<i class="awsui-iconfont awsui-margin-right-5" style="color:#3383da;">'.concat(t[n].iconFontCode,"</i>").concat(t[n].text,'<span class="awsui-select-right"><i class="awsui-iconfont awsui-margin-left-5" style="color:#a8caef;">&#xe88c;</i></span>')};this.options.push(i)}else if("NUMBER"==t[n].columnType){var r={value:t[n].id,type:"number",label:'<i class="awsui-iconfont awsui-margin-right-5" style="color:#3383da;">'.concat(t[n].iconFontCode,"</i>").concat(t[n].text,'<span class="awsui-select-right"><i class="awsui-iconfont awsui-margin-left-5" style="color:#a8caef;">&#xe88e;</i></span>')};this.options.push(r)}else if("DATE"==t[n].columnType){var o={value:t[n].id,type:"date",label:'<i class="awsui-iconfont awsui-margin-right-5" style="color:#3383da;">'.concat(t[n].iconFontCode,"</i>").concat(t[n].text,'<span class="awsui-select-right"><i class="awsui-iconfont awsui-margin-left-5" style="color:#a8caef;">&#xe88d;</i></span>')};this.options.push(o)}}}},Fe=$e,je=(n("820c"),Object(g["a"])(Fe,Ne,Ie,!1,null,null,null)),ze=je.exports;ze.install=function(e){e.component(ze.name,ze)};var Be=ze,Re=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.panel?n("el-cascader-panel",{attrs:{options:e.options,props:{expandTrigger:"click"===e.event?"click":"hover",multiple:e.multiple,checkStrictly:e.checkStrictly,lazy:e.lazy,lazyLoad:e.lazyLoad}},on:{change:e.handleChange},model:{value:e.currentValue,callback:function(t){e.currentValue=t},expression:"currentValue"}}):n("el-cascader",{staticClass:"awsui-cascader",class:[e.cascaderSize?"awsui-cascader--"+e.cascaderSize:"",e.multiple?"awsui-cascader--multiple":""],attrs:{placeholder:e.placeholder,options:e.options,props:{expandTrigger:"click"===e.event?"click":"hover",multiple:e.multiple,checkStrictly:e.checkStrictly,lazy:e.lazy,lazyLoad:e.lazyLoad},clearable:e.clearable,disabled:e.isDisabled,"show-all-levels":!!e.showAllLevels,"collapse-tags":e.collapseTags,filterable:e.filterable,filterMethod:e.filterMethod},on:{change:e.handleChange},model:{value:e.currentValue,callback:function(t){e.currentValue=t},expression:"currentValue"}})],1)},Ve=[],He={name:"AwsuiCascader",components:{"el-cascader":a["Cascader"],"el-cascader-panel":a["CascaderPanel"]},inject:{awsuiForm:{default:""}},props:{value:{},options:{type:Array,default:function(){return[]}},placeholder:String,event:String,size:String,disabled:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},showAllLevels:{type:Boolean,default:!0},multiple:{type:Boolean,default:!1},collapseTags:{type:Boolean,default:!1},checkStrictly:{type:Boolean,default:!1},lazy:{type:Boolean,default:!1},lazyLoad:Function,filterable:{type:Boolean,default:!1},panel:{type:Boolean,default:!1},filterMethod:Function},data:function(){return{currentValue:this.value}},computed:{cascaderSize:function(){return this.size},isDisabled:function(){return this.disabled||(this.awsuiForm||{}).disabled}},mounted:function(){},watch:{value:function(e){this.currentValue=e}},methods:{handleChange:function(e){this.$emit("change",e),this.$emit("input",e)}}},We=He,qe=(n("e470"),Object(g["a"])(We,Re,Ve,!1,null,null,null)),Ue=qe.exports;Ue.install=function(e){e.component(Ue.name,Ue)};var Ke=Ue,Ge=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"awsui-component"},[e.extend?n("el-tooltip",{attrs:{content:"Switch value: "+e.value,placement:"top"}},[n("el-switch",e._b({staticClass:"awsui-switch",class:[e.switchSize?"awsui-switch-"+e.switchSize:"",e.className?e.className:"",{inner:e.inner,left:e.left,right:e.right,switchery:e.switchery}],attrs:{width:Number(e.width),"active-color":e.activeColor,"inactive-color":e.inactiveColor,"active-text":e.right||e.inner?e.inner?e.value?" ":e.inactiveText:e.value?e.activeText:e.inactiveText:"","inactive-text":e.left||e.inner?e.inner?e.value?e.activeText:" ":e.value?e.activeText:e.inactiveText:"",disabled:e.switchDisabled,"active-value":e.activeValue,"inactive-value":e.inactiveValue},on:{change:e.change},model:{value:e.value,callback:function(t){e.value=t},expression:"value"}},"el-switch",e.$attrs,!1))],1):n("el-switch",e._b({staticClass:"awsui-switch",class:[e.switchSize?"awsui-switch-"+e.switchSize:"",e.className?"awsui-switch-custom "+e.className:"",{inner:e.inner,left:e.left,right:e.right,switchery:e.switchery}],attrs:{width:Number(e.width),"active-color":e.activeColor,"inactive-color":e.inactiveColor,"active-text":e.right||e.inner?e.inner?e.value?" ":e.inactiveText:e.value?e.activeText:e.inactiveText:"","inactive-text":e.left||e.inner?e.inner?e.value?e.activeText:" ":e.value?e.activeText:e.inactiveText:"",disabled:e.switchDisabled},on:{change:e.change},model:{value:e.value,callback:function(t){e.value=t},expression:"value"}},"el-switch",e.$attrs,!1))],1)},Ye=[],Xe={name:"AwsuiSwitch",components:{"el-tooltip":a["Tooltip"],"el-switch":a["Switch"]},inject:{awsuiForm:{default:""}},props:{width:{type:[String,Number],default:40},left:{type:Boolean,default:!1},right:{type:Boolean,default:!1},inner:{type:Boolean,default:!1},switchery:{type:Boolean,default:!1},activeColor:{type:String,default:"#409EFF"},inactiveColor:{type:String,default:"#C0CCDA"},activeText:{type:String,default:""},inactiveText:{type:String,default:""},activeValue:{type:[String,Number,Boolean],default:!0},inactiveValue:{type:[String,Number,Boolean],default:!1},disabled:{type:Boolean,default:!1},extend:{type:Boolean,default:!1},className:{type:String,default:""},size:{type:String,default:""}},data:function(){return{}},computed:{value:{get:function(){return this.$attrs.value||!1},set:function(){}},switchDisabled:function(){return this.disabled||(this.awsuiForm||{}).disabled},switchSize:function(){return this.size}},created:function(){},mounted:function(){this.$nextTick((function(){}))},methods:{change:function(e){this.$emit("input",e),this.$emit("change",e)}}},Ze=Xe,Qe=(n("72cd"),Object(g["a"])(Ze,Ge,Ye,!1,null,null,null)),Je=Qe.exports;Je.install=function(e){e.component(Je.name,Je)};var et=Je,tt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"awsui-box-component",class:{"awsui-slider":e.text}},[n("el-slider",{class:e.sliderClass,attrs:{"show-tooltip":e.showTooltip,"format-tooltip":e.formatTooltip,disabled:e.sliderDisabled,step:e.stepVal,"show-stops":e.showStops,"show-input":e.showInput,range:e.range,max:e.max,min:e.min,vertical:e.vertical,height:e.height,marks:e.marks},on:{change:e.sendValue},model:{value:e.sValue,callback:function(t){e.sValue=t},expression:"sValue"}}),e.text?n("span",{staticClass:"text"},[e._v(e._s(e.format?e.formatTooltip(e.sValue):e.sValue)+e._s(e.unit))]):e._e()],1)},nt=[],it={name:"AwsuiSlider",components:{"el-slider":a["Slider"]},inject:{awsuiForm:{default:""}},props:{text:{type:Boolean,default:!1},unit:{type:String,default:""},value:{type:[String,Number,Array]},showTooltip:{type:Boolean,default:!0},format:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},sliderClass:{type:String,default:""},step:{type:[String,Number],default:1},showStops:{type:Boolean,default:!1},showInput:{type:Boolean,default:!1},range:{type:Boolean,default:!1},max:{type:Number,default:100},min:{type:Number,default:0},vertical:{type:Boolean,default:!1},height:{type:[String,Number],default:""},marks:{type:Object,default:function(){return{}}}},data:function(){return{sValue:0,stepVal:0}},computed:{changeStep:function(){return parseFloat(this.stepValue)},changeMax:function(){return parseFloat(this.maxValue)},changeHeight:function(){return this.height},changeMarks:function(){return this.marks},sliderDisabled:function(){return this.disabled||(this.awsuiForm||{}).disabled}},mounted:function(){this.$nextTick((function(){"string"==typeof this.value||"number"==typeof this.value?this.sValue=parseFloat(this.value):this.sValue=this.value,this.stepVal=parseInt(this.step)}))},methods:{formatTooltip:function(e){if(this.format)return e/100},sendValue:function(){this.$emit("input",this.sValue),this.$emit("change",this.sValue)}}},rt=it,ot=(n("45fb"),Object(g["a"])(rt,tt,nt,!1,null,null,null)),at=ot.exports;at.install=function(e){e.component(at.name,at)};var st=at,lt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.fixed?n("el-time-select",{attrs:{"picker-options":{start:"08:30",step:"00:15",end:"18:30"},placeholder:"选择时间"},model:{value:e.sValue,callback:function(t){e.sValue=t},expression:"sValue"}}):e._e(),n("el-time-picker",{attrs:{"picker-options":{selectableRange:"18:30:00 - 20:30:00"},placeholder:"任意时间点"},model:{value:e.value,callback:function(t){e.value=t},expression:"value"}})],1)},ct=[],ut={name:"AwsuiTimePicker",components:{"el-time-select":a["TimeSelect"],"el-time-picker":a["TimePicker"]},props:{value:{type:[String,Date]},fixed:{type:Boolean,default:!1},format:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},sliderClass:{type:String,default:""},step:{type:[String,Number],default:1},showStops:{type:Boolean,default:!1},showInput:{type:Boolean,default:!1},range:{type:Boolean,default:!1},max:{type:Number,default:100},min:{type:Number,default:0},vertical:{type:Boolean,default:!1},height:{type:[String,Number],default:""},marks:{type:Object,default:function(){return{}}}},data:function(){return{sValue:""}},computed:{},mounted:function(){this.$nextTick((function(){this.sValue=this.value}))},methods:{sendValue:function(){this.$emit("change",this.sValue)}}},dt=ut,ht=(n("9fcc"),Object(g["a"])(dt,lt,ct,!1,null,null,null)),ft=ht.exports;ft.install=function(e){e.component(ft.name,ft)};var pt=ft,mt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-popover",{attrs:{"popper-class":"awsui-colorPicker",placement:e.placement,trigger:"click","append-to-body":e.appendToBody},model:{value:e.openStatus,callback:function(t){e.openStatus=t},expression:"openStatus"}},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.html5Color,expression:"html5Color"}],ref:"html5Color",attrs:{type:"color"},domProps:{value:e.html5Color},on:{change:function(t){return e.updataValue(e.html5Color)},input:function(t){t.target.composing||(e.html5Color=t.target.value)}}}),n("div",{staticClass:"awsui-colorPicker-box"},[n("div",{staticClass:"hd"},[n("div",{staticClass:"colorView"},[n("span",{staticClass:"background",style:"background-color: "+e.showPanelColor}),n("awsui-input",{attrs:{readonly:"",className:"awsui-color-input",placeholder:""},model:{value:e.showPanelColor,callback:function(t){e.showPanelColor=t},expression:"showPanelColor"}})],1),n("div",{staticClass:"defaultColor",on:{click:e.handleDefaultColor,mouseover:function(t){e.hoveColor=e.value},mouseout:function(t){e.hoveColor=null}}},[e._v("清空 ")])]),n("div",{staticClass:"bd"},[n("h3",[e._v("主题颜色")]),n("ul",{staticClass:"tColor"},e._l(e.tColor,(function(t,i){return n("li",{key:i,staticClass:"tColor_li",style:{backgroundColor:t},on:{mouseover:function(n){e.hoveColor=t},mouseout:function(t){e.hoveColor=null},click:function(n){return e.updataValue(t)}}})})),0),n("ul",{staticClass:"bColor"},e._l(e.colorPanel,(function(t,i){return n("li",{key:i,staticClass:"bColor_li"},[n("ul",e._l(t,(function(t,i){return n("li",{key:i,staticClass:"bColor_li_li",style:{backgroundColor:t},on:{mouseover:function(n){e.hoveColor=t},mouseout:function(t){e.hoveColor=null},click:function(n){return e.updataValue(t)}}})})),0)])})),0),n("h3",[e._v("标准颜色")]),n("ul",{staticClass:"tColor"},e._l(e.bColor,(function(t,i){return n("li",{key:i,staticClass:"tColor_li",style:{backgroundColor:t},on:{mouseover:function(n){e.hoveColor=t},mouseout:function(t){e.hoveColor=null},click:function(n){return e.updataValue(t)}}})})),0),e.more?n("h3",{staticStyle:{cursor:"pointer"},on:{click:e.triggerHtml5Color}},[e._v("更多颜色...")]):e._e()])]),n("div",{staticClass:"colorBtn",class:[{disabled:e.disabled},e.colorSize?"awsui-colorPicker--"+e.colorSize:"",e.className?e.className:""],style:"background-color: "+e.showColor,attrs:{slot:"reference"},slot:"reference"},[e._t("default")],2)])},gt=[],vt=(n("a4d3"),n("e01a"),n("d28b"),n("e260"),n("3ca3"),n("ddb0"),n("06c5"));function bt(e){if("undefined"===typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(e=Object(vt["a"])(e))){var t=0,n=function(){};return{s:n,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,r,o=!0,a=!1;return{s:function(){i=e[Symbol.iterator]()},n:function(){var e=i.next();return o=e.done,e},e:function(e){a=!0,r=e},f:function(){try{o||null==i["return"]||i["return"]()}finally{if(a)throw r}}}}var yt={name:"AwsuiColorPicker",props:{value:String,defaultColor:{type:String,default:""},appendToBody:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},size:{type:String,default:""},className:String,more:{type:Boolean,default:!0},placement:{type:String,default:"bottom"},callback:null},data:function(){return{openStatus:!1,hoveColor:null,tColor:["#000000","#ffffff","#eeece1","#1e497b","#4e81bb","#e2534d","#9aba60","#8165a0","#47acc5","#f9974c"],colorConfig:[["#0d0d0d","#808080"],["#7f7f7f","#f0f0f0"],["#1c1a10","#ddd8c3"],["#0e243d","#c6d9f0"],["#233f5e","#dae5f0"],["#632623","#f2dbdb"],["#4d602c","#eaf1de"],["#3f3150","#e6e0ec"],["#1e5867","#d9eef3"],["#99490f","#fee9da"]],bColor:["#c21401","#ff1e02","#ffc12a","#ffff3a","#90cf5b","#00af57","#00afee","#0071be","#00215f","#72349d"],html5Color:this.value}},computed:{showPanelColor:function(){return this.hoveColor?this.hoveColor:this.showColor},showColor:function(){return this.value?this.value:this.defaultColor},colorPanel:function(){var e,t=[],n=bt(this.colorConfig);try{for(n.s();!(e=n.n()).done;){var i=e.value;t.push(this.gradient(i[1],i[0],5))}}catch(r){n.e(r)}finally{n.f()}return t},colorSize:function(){return this.size}},methods:{closePanel:function(){var e=this;this.openStatus=!1,setTimeout((function(){"function"===typeof e.callback&&e.callback()}))},close:function(){this.openStatus=!1},triggerHtml5Color:function(){this.$refs.html5Color.click()},updataValue:function(e){this.$emit("input",e),this.$emit("change",e),this.closePanel()},handleDefaultColor:function(){this.updataValue(this.defaultColor)},parseColor:function(e){if(4!==e.length)return e;e="#"+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]},rgbToHex:function(e,t,n){var i=(e<<16|t<<8|n).toString(16);return"#"+new Array(Math.abs(i.length-7)).join("0")+i},hexToRgb:function(e){e=this.parseColor(e);for(var t=[],n=1;n<7;n+=2)t.push(parseInt("0x"+e.slice(n,n+2)));return t},gradient:function(e,t,n){for(var i=this.hexToRgb(e),r=this.hexToRgb(t),o=(r[0]-i[0])/n,a=(r[1]-i[1])/n,s=(r[2]-i[2])/n,l=[],c=0;c<n;c++)l.push(this.rgbToHex(parseInt(o*c+i[0]),parseInt(a*c+i[1]),parseInt(s*c+i[2])));return l}},watch:{},mounted:function(){var e=this;document.addEventListener("click",(function(t){e.$el.contains(t.target)||e.closePanel()}))}},wt=yt,xt=(n("c7a6"),n("22c0"),Object(g["a"])(wt,mt,gt,!1,null,"d6ca73fa",null)),_t=xt.exports;_t.install=function(e){e.component(_t.name,_t)};var kt=_t,Ct=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"awsui-icon-picker",style:{width:e.defaultOptions.fatherWidth?e.defaultOptions.fatherWidth:"background"===e.defaultOptions.type?"80px":"30px"}},[n("el-popover",{attrs:{"popper-class":"icon_picker_popover",placement:"bottom-start",trigger:"click"}},["background"===e.defaultOptions.type?n("div",{staticClass:"picker-box"},[n("p",{staticClass:"picker-title"},[e._v("设计图标")]),n("div",{staticClass:"color-region"},e._l(e.colorList,(function(t,i){return n("span",{key:i,staticClass:"color-item",style:{backgroundColor:t},on:{click:function(n){return e.colorActivefun(t)}}},[n("i",{directives:[{name:"show",rawName:"v-show",value:t===e.colorActive||t===e.colorValue,expression:"item === colorActive || item === colorValue"}],staticClass:"awsui-iconfont sign-c"},[e._v("")])])})),0),n("div",{staticClass:"icon-region"},e._l(e.defaultOptions.iconfontArray,(function(t,i){return n("span",{key:i,staticClass:"icon-item",style:{backgroundColor:i==e.hoverBackIndex||t[1]===e.iconValue?e.colorValue:"#fff"},on:{mouseover:function(t){return e.mouseoverBack(i)},click:function(n){return e.iconActivefun(t[1])},mouseleave:e.mouseleaveBack}},[n("i",{staticClass:"awsui-iconfont sign-i",style:{color:i==e.hoverBackIndex||t[1]===e.iconValue?"#e6e8ea"===e.colorValue?"#202124":"#fff":"#e6e8ea"===e.colorValue?"#202124":"#666"},domProps:{innerHTML:e._s(t[1])}})])})),0)]):"icon"===e.defaultOptions.type?n("div",{staticClass:"picker-box"},[n("p",{staticClass:"picker-title"},[e._v("设计图标")]),n("div",{staticClass:"color-region"},e._l(e.colorList,(function(t,i){return n("span",{key:i,staticClass:"color-item",style:{backgroundColor:t},on:{click:function(n){return e.colorActivefun(t)}}},[n("i",{directives:[{name:"show",rawName:"v-show",value:t===e.colorActive||t===e.colorValue,expression:"item === colorActive || item === colorValue"}],staticClass:"awsui-iconfont sign-c"},[e._v("")])])})),0),n("div",{staticClass:"icon-region"},e._l(e.defaultOptions.iconfontArray,(function(t,i){return n("span",{key:i,staticClass:"icon-item",style:{backgroundColor:i==e.hoverBackIndex||t[1]===e.iconValue?"#e6e8ea"===e.colorValue?"#666666":"#f8f8f8":"#e6e8ea"===e.colorValue?"#95a3b3":"#fff",border:i==e.hoverBackIndex||t[1]===e.iconValue?"#e6e8ea"===e.colorValue?"1px solid #666666":"1px solid #e9e9e9":"none"},on:{mouseover:function(t){return e.mouseoverBack(i)},click:function(n){return e.iconActivefun(t[1])},mouseleave:e.mouseleaveBack}},[n("i",{staticClass:"awsui-iconfont sign-i",style:{color:e.colorValue},domProps:{innerHTML:e._s(t[1])}})])})),0)]):e._e(),"background"===e.defaultOptions.type?n("div",{staticClass:"awsui-icon-picker-box1",style:{backgroundColor:e.colorValue,width:e.defaultOptions.fatherWidth?e.defaultOptions.fatherWidth+"px":"80px",height:e.defaultOptions.fatherWidth?e.defaultOptions.fatherWidth+"px":"80px"},attrs:{slot:"reference"},slot:"reference"},[n("i",{staticClass:"awsui-iconfont",style:{color:"#e6e8ea"===e.colorValue?"#202124":"#fff",fontSize:e.defaultOptions.iconFontSize?e.defaultOptions.iconFontSize+"px":"30px"},domProps:{innerHTML:e._s(e.iconValue)}})]):"icon"===e.defaultOptions.type?n("div",{staticClass:"awsui-icon-picker-box2",style:{backgroundColor:"#e6e8ea"===e.colorValue?"#666666":"#f8f8f8",width:e.defaultOptions.fatherWidth?e.defaultOptions.fatherWidth+"px":"30px",height:e.defaultOptions.fatherWidth?e.defaultOptions.fatherWidth+"px":"30px"},attrs:{slot:"reference"},slot:"reference"},[n("i",{staticClass:"awsui-iconfont",style:{fontSize:e.defaultOptions.iconFontSize?e.defaultOptions.iconFontSize+"px":"16px",color:e.colorValue},domProps:{innerHTML:e._s(e.iconValue)}})]):e._e()])],1)},St=[],Ot={name:"AwsuiIconPicker",props:{defaultOptions:{type:Object,default:function(){return{type:"background",iconfontArray:[]}}},colorList:{type:Array,default:function(){return["#dc4f39","#ff9421","#009b52","#3383da","#009688","#6600d5","#0b0e7b","#666666","#e6e8ea"]}},value:{type:Object,default:function(){return{icon:"&#xe68c;",color:"#dc4f39"}}}},computed:{},data:function(){return{colorActive:null,hoverBackIndex:null,iconValue:this.defaultOptions.icon?this.defaultOptions.icon:this.defaultOptions.iconfontArray[0][1],colorValue:this.defaultOptions.color?this.defaultOptions.color:this.colorList[0]}},watch:{value:{handler:function(e){this.iconValue=e.icon,this.colorValue=e.color},immediate:!0},iconValue:function(){this.$emit("change",{icon:this.iconValue,color:this.colorValue}),this.$emit("input",{icon:this.iconValue,color:this.colorValue})},colorValue:function(){this.$emit("change",{icon:this.iconValue,color:this.colorValue}),this.$emit("input",{icon:this.iconValue,color:this.colorValue})}},methods:{colorActivefun:function(e){this.colorActive=e,this.colorValue=e},iconActivefun:function(e){this.iconValue=e},mouseoverBack:function(e){this.hoverBackIndex=e},mouseleaveBack:function(){this.hoverBackIndex=null}},mounted:function(){}},Tt=Ot,Et=(n("8773"),n("43e3"),Object(g["a"])(Tt,Ct,St,!1,null,"d232a082",null)),Dt=Et.exports;Dt.install=function(e){e.component(Dt.name,Dt)};var Mt=Dt,At=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"awsui-formula-component"},[n("div",{staticClass:"awsui-formula",class:{"awsui-disabled":e.option.disabled}},[n("awsui-codemirror",{ref:"codemirror",class:{"awsui-codemirroe-disabled":e.option.disabled},attrs:{placeholder:e.placeholder,options:e.options},on:{ready:e.onCmReady},model:{value:e.currentContent,callback:function(t){e.currentContent=t},expression:"currentContent"}}),n("i",{staticClass:"awsui-iconfont",class:{"awsui-formula-btn-readonly":e.option.readonly||e.option.disabled},on:{click:function(t){return e.openDialog()}}},[e._v("")])],1),e.dialogOnce?n("awsui-dialog",{ref:"awsuiDialog",attrs:{name:"AWS-Formula-Dialog",iframeOption:e.iframeOption,title:"公式编辑器",width:e.width,height:e.height,visible:e.dialogVisible,"append-to-body":""},on:{"update:visible":function(t){e.dialogVisible=t}}},[n("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("awsui-button",{attrs:{id:"confirmBtn",type:"primary"},on:{click:function(t){return e.dialogConfirm()}}},[e._v("确定")]),n("awsui-button",{on:{click:e.dialogCancel}},[e._v("取消")])],1)]):e._e()],1)},Nt=[],It=n("74d3"),Lt=It["a"],Pt=(n("1350"),n("9115"),Object(g["a"])(Lt,At,Nt,!1,null,"e1e83226",null)),$t=Pt.exports;$t.install=function(e){e.component($t.name,$t)};var Ft=$t,jt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("awsui-dialog",{staticClass:"awsui-upload",attrs:{title:"修改头像",visible:e.value,width:"auto",border:!1,"show-close":!1},on:{"update:visible":function(t){e.value=t}}},[n("button",{staticClass:"vicp-close",attrs:{type:"button"},on:{click:e.off}},[n("i",{staticClass:"awsui-iconfont"},[e._v("  ")])]),n("div",{staticClass:"vicp-wrap"},[n("div",{directives:[{name:"show",rawName:"v-show",value:1==e.step,expression:"step == 1"}],staticClass:"vicp-step1"},[1==e.step?n("input",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}],ref:"fileinput",attrs:{type:"file"},on:{change:e.handleChange}}):e._e(),n("div",{staticClass:"vicp-crop"},[n("div",{directives:[{name:"show",rawName:"v-show",value:!0,expression:"true"}],staticClass:"vicp-crop-left"},[n("div",{staticClass:"vicp-img-container"},[n("div",{staticClass:"vicp-img-default",on:{click:e.handleClick}},[n("i",{staticClass:"awsui-iconfont"},[e._v("  ")])])]),n("div",{staticClass:"vicp-img-info"},[e._v("根据您的需要裁剪和调整图片的位置")])]),n("div",{directives:[{name:"show",rawName:"v-show",value:!0,expression:"true"}],staticClass:"vicp-crop-right"},[n("div",{staticClass:"vicp-preview"},[n("span",[e._v(e._s(e.lang.preview))]),e.noSquare?e._e():n("div",{staticClass:"vicp-preview-item"}),e.noCircle?e._e():n("div",{staticClass:"vicp-preview-item vicp-preview-item-circle"})])])])]),2==e.step?n("div",{staticClass:"vicp-step2"},[n("div",{staticClass:"vicp-crop"},[n("div",{directives:[{name:"show",rawName:"v-show",value:!0,expression:"true"}],staticClass:"vicp-crop-left"},[n("div",{staticClass:"vicp-img-container"},[n("img",{ref:"img",staticClass:"vicp-img",style:e.sourceImgStyle,attrs:{src:e.sourceImgUrl,draggable:"false"},on:{drag:e.preventDefault,dragstart:e.preventDefault,dragend:e.preventDefault,dragleave:e.preventDefault,dragover:e.preventDefault,dragenter:e.preventDefault,drop:e.preventDefault,touchstart:e.imgStartMove,touchmove:e.imgMove,touchend:e.createImg,touchcancel:e.createImg,mousedown:e.imgStartMove,mousemove:e.imgMove,mouseup:e.createImg,mouseout:e.createImg}}),n("div",{staticClass:"vicp-img-shade vicp-img-shade-1",style:e.sourceImgShadeStyle}),n("div",{staticClass:"vicp-img-shade vicp-img-shade-2",style:e.sourceImgShadeStyle})]),n("div",{staticClass:"vicp-range"},[n("input",{attrs:{type:"range",step:"1",min:"0",max:"100"},domProps:{value:e.scale.range},on:{input:e.zoomChange}}),n("i",{staticClass:"vicp-icon5",on:{mousedown:e.startZoomSub,mouseout:e.endZoomSub,mouseup:e.endZoomSub}}),n("i",{staticClass:"vicp-icon6",on:{mousedown:e.startZoomAdd,mouseout:e.endZoomAdd,mouseup:e.endZoomAdd}})]),e.noRotate?e._e():n("div",{staticClass:"vicp-rotate"},[n("i",{on:{mousedown:e.startRotateLeft,mouseout:e.endRotate,mouseup:e.endRotate}},[e._v("↺")]),n("i",{on:{mousedown:e.startRotateRight,mouseout:e.endRotate,mouseup:e.endRotate}},[e._v("↻")])])]),n("div",{directives:[{name:"show",rawName:"v-show",value:!0,expression:"true"}],staticClass:"vicp-crop-right"},[n("div",{staticClass:"vicp-preview"},[n("span",[e._v(e._s(e.lang.preview))]),e.noSquare?e._e():n("div",{staticClass:"vicp-preview-item"},[n("img",{style:e.previewStyle,attrs:{src:e.createImgUrl}})]),e.noCircle?e._e():n("div",{staticClass:"vicp-preview-item vicp-preview-item-circle"},[n("img",{style:e.previewStyle,attrs:{src:e.createImgUrl}})])])])])]):e._e(),3==e.step?n("div",{staticClass:"vicp-step3"},[n("div",{staticClass:"vicp-upload"},[n("span",{directives:[{name:"show",rawName:"v-show",value:1===e.loading,expression:"loading === 1"}],staticClass:"vicp-loading"},[e._v(e._s(e.lang.loading))]),n("div",{staticClass:"vicp-progress-wrap"},[n("span",{directives:[{name:"show",rawName:"v-show",value:1===e.loading,expression:"loading === 1"}],staticClass:"vicp-progress",style:e.progressStyle})]),n("div",{directives:[{name:"show",rawName:"v-show",value:e.hasError,expression:"hasError"}],staticClass:"vicp-error"},[n("i",{staticClass:"vicp-icon2"}),e._v(" "+e._s(e.errorMsg)+" ")]),n("div",{directives:[{name:"show",rawName:"v-show",value:2===e.loading,expression:"loading === 2"}],staticClass:"vicp-success"},[n("i",{staticClass:"vicp-icon3"}),e._v(" "+e._s(e.lang.success)+" ")])]),n("div",{staticClass:"vicp-operate"},[n("a",{on:{click:function(t){return e.setStep(2)},mousedown:e.ripple}},[e._v(e._s(e.lang.btn.back))]),n("a",{on:{click:e.off,mousedown:e.ripple}},[e._v(e._s(e.lang.btn.close))])])]):e._e(),n("canvas",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}],ref:"canvas",attrs:{width:e.width,height:e.height}})]),n("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("awsui-button",{staticClass:"awsui-left",on:{click:e.handleClick}},[e._v("选择图片")]),n("awsui-button",{attrs:{type:"primary"},on:{click:e.prepareUpload,mousedown:e.ripple}},[e._v("确 定")]),n("awsui-button",{on:{click:e.off}},[e._v("取 消")])],1)])},zt=[],Bt={zh:{hint:"点击,或拖动图片至此处",loading:"正在上传……",noSupported:"浏览器不支持该功能,请使用IE10以上或其他现在浏览器!",success:"上传成功",fail:"图片上传失败",preview:"头像预览",btn:{off:"取消",close:"关闭",back:"上一步",save:"保存"},error:{onlyImg:"仅限图片格式",outOfSize:"单文件大小不能超过 ",lowestPx:"图片最低像素为(宽*高):"}},en:{hint:"Click or drag the file here to upload",loading:"Uploading…",noSupported:"Browser is not supported, please use IE10+ or other browsers",success:"Upload success",fail:"Upload failed",preview:"Preview",btn:{off:"Cancel",close:"Close",back:"Back",save:"Save"},error:{onlyImg:"Image only",outOfSize:"Image exceeds size limit: ",lowestPx:"Image's size is too low. Expected at least: "}},ro:{hint:"Atinge sau trage fișierul aici",loading:"Se încarcă",noSupported:"Browser-ul tău nu suportă acest feature. Te rugăm încearcă cu alt browser.",success:"S-a încărcat cu succes",fail:"A apărut o problemă la încărcare",preview:"Previzualizează",btn:{off:"Anulează",close:"Închide",back:"Înapoi",save:"Salvează"},error:{onlyImg:"Doar imagini",outOfSize:"Imaginea depășește limita de: ",loewstPx:"Imaginea este prea mică; Minim: "}},ru:{hint:"Нажмите, или перетащите файл в это окно",loading:"Загружаю……",noSupported:"Ваш браузер не поддерживается, пожалуйста, используйте IE10 + или другие браузеры",success:"Загрузка выполнена успешно",fail:"Ошибка загрузки",preview:"Предпросмотр",btn:{off:"Отменить",close:"Закрыть",back:"Назад",save:"Сохранить"},error:{onlyImg:"Только изображения",outOfSize:"Изображение превышает предельный размер: ",lowestPx:"Минимальный размер изображения: "}},"pt-br":{hint:"Clique ou arraste o arquivo aqui para carregar",loading:"Carregando…",noSupported:"Browser não suportado, use o IE10+ ou outro browser",success:"Sucesso ao carregar imagem",fail:"Falha ao carregar imagem",preview:"Pré-visualizar",btn:{off:"Cancelar",close:"Fechar",back:"Voltar",save:"Salvar"},error:{onlyImg:"Apenas imagens",outOfSize:"A imagem excede o limite de tamanho: ",lowestPx:"O tamanho da imagem é muito pequeno. Tamanho mínimo: "}},fr:{hint:"Cliquez ou glissez le fichier ici.",loading:"Téléchargement…",noSupported:"Votre navigateur n'est pas supporté. Utilisez IE10 + ou un autre navigateur s'il vous plaît.",success:"Téléchargement réussit",fail:"Téléchargement echoué",preview:"Aperçu",btn:{off:"Annuler",close:"Fermer",back:"Retour",save:"Enregistrer"},error:{onlyImg:"Image uniquement",outOfSize:"L'image sélectionnée dépasse la taille maximum: ",lowestPx:"L'image sélectionnée est trop petite. Dimensions attendues: "}},nl:{hint:"Klik hier of sleep een afbeelding in dit vlak",loading:"Uploaden…",noSupported:"Je browser wordt helaas niet ondersteund. Gebruik IE10+ of een andere browser.",success:"Upload succesvol",fail:"Upload mislukt",preview:"Voorbeeld",btn:{off:"Annuleren",close:"Sluiten",back:"Terug",save:"Opslaan"},error:{onlyImg:"Alleen afbeeldingen",outOfSize:"De afbeelding is groter dan: ",lowestPx:"De afbeelding is te klein! Minimale afmetingen: "}},tr:{hint:"Tıkla veya yüklemek istediğini buraya sürükle",loading:"Yükleniyor…",noSupported:"Tarayıcı desteklenmiyor, lütfen IE10+ veya farklı tarayıcı kullanın",success:"Yükleme başarılı",fail:"Yüklemede hata oluştu",preview:"Önizle",btn:{off:"İptal",close:"Kapat",back:"Geri",save:"Kaydet"},error:{onlyImg:"Sadece resim",outOfSize:"Resim yükleme limitini aşıyor: ",lowestPx:"Resmin boyutu çok küçük. En az olması gereken: "}},"es-MX":{hint:"Selecciona o arrastra una imagen",loading:"Subiendo...",noSupported:"Tu navegador no es soportado, porfavor usa IE10+ u otros navegadores mas recientes",success:"Subido exitosamente",fail:"Sucedió un error",preview:"Vista previa",btn:{off:"Cancelar",close:"Cerrar",back:"Atras",save:"Guardar"},error:{onlyImg:"Unicamente imagenes",outOfSize:"La imagen excede el tamaño maximo:",lowestPx:"La imagen es demasiado pequeño. Se espera por lo menos:"}}},Rt={jpg:"image/jpeg",png:"image/png",gif:"image/gif",svg:"image/svg+xml",psd:"image/photoshop"},Vt=(n("ace42"),n("5cc6"),n("9a8c"),n("a975"),n("735e"),n("c1ac"),n("d139"),n("3a7b"),n("d5d6"),n("82f8"),n("e91f"),n("60bd"),n("5f96"),n("3280"),n("3fcc"),n("ca91"),n("25a1"),n("cd26"),n("3c5d"),n("2954"),n("649e"),n("219c"),n("170b"),n("b39a"),n("72f7"),function(e,t){e=e.split(",")[1],e=window.atob(e);for(var n=new Uint8Array(e.length),i=0;i<e.length;i++)n[i]=e.charCodeAt(i);return new Blob([n],{type:t})}),Ht=function(e,t){var n=Object.assign({ele:e.target,type:"hit",bgc:"rgba(0, 0, 0, 0.15)"},t),i=n.ele;if(i){var r=i.getBoundingClientRect(),o=i.querySelector(".e-ripple");switch(o?o.className="e-ripple":(o=document.createElement("span"),o.className="e-ripple",o.style.height=o.style.width=Math.max(r.width,r.height)+"px",i.appendChild(o)),n.type){case"center":o.style.top=r.height/2-o.offsetHeight/2+"px",o.style.left=r.width/2-o.offsetWidth/2+"px";break;default:o.style.top=e.pageY-r.top-o.offsetHeight/2-document.body.scrollTop+"px",o.style.left=e.pageX-r.left-o.offsetWidth/2-document.body.scrollLeft+"px"}return o.style.backgroundColor=n.bgc,o.className="e-ripple z-active",!1}},Wt={name:"AwsuiUpload",props:{field:{type:String,default:"avatar"},ki:{default:0},value:{default:!0},url:{type:String,default:""},params:{type:Object,default:null},headers:{type:Object,default:null},width:{type:Number,default:200},height:{type:Number,default:200},noRotate:{type:Boolean,default:!0},noCircle:{type:Boolean,default:!1},noSquare:{type:Boolean,default:!1},maxSize:{type:Number,default:10240},langType:{type:String,default:"zh"},langExt:{type:Object,default:null},imgFormat:{type:String,default:"png"}},data:function(){var e=this,t=e.imgFormat,n=e.langType,i=e.langExt,r=e.width,o=e.height,a=!0,s=["jpg","png"],l=-1===s.indexOf(t)?"jpg":t,c=Bt[n]?Bt[n]:Bt["en"],u=Rt[l];return e.imgFormat=l,i&&Object.assign(c,i),"function"!=typeof FormData&&(a=!1),{mime:u,lang:c,isSupported:a,step:1,loading:0,progress:0,hasError:!1,errorMsg:"",ratio:r/o,sourceImg:null,sourceImgUrl:"",createImgUrl:"",sourceImgMouseDown:{on:!1,mX:0,mY:0,x:0,y:0},previewContainer:{width:100,height:100},sourceImgContainer:{width:240,height:184},scale:{zoomAddOn:!1,zoomSubOn:!1,range:1,rotateLeft:!1,rotateRight:!1,degree:0,x:0,y:0,width:0,height:0,maxWidth:0,maxHeight:0,minWidth:0,minHeight:0,naturalWidth:0,naturalHeight:0}}},computed:{progressStyle:function(){var e=this.progress;return{width:e+"%"}},sourceImgStyle:function(){var e=this.scale,t=this.sourceImgMasking,n=e.y+t.y+"px",i=e.x+t.x+"px";return{top:n,left:i,width:e.width+"px",height:e.height+"px",transform:"rotate("+e.degree+"deg)","-ms-transform":"rotate("+e.degree+"deg)","-moz-transform":"rotate("+e.degree+"deg)","-webkit-transform":"rotate("+e.degree+"deg)","-o-transform":"rotate("+e.degree+"deg)"}},sourceImgMasking:function(){var e=this.width,t=this.height,n=this.ratio,i=this.sourceImgContainer,r=i,o=r.width/r.height,a=0,s=0,l=r.width,c=r.height,u=1;return n<o&&(u=r.height/t,l=r.height*n,a=(r.width-l)/2),n>o&&(u=r.width/e,c=r.width/n,s=(r.height-c)/2),{scale:u,x:a,y:s,width:l,height:c}},sourceImgShadeStyle:function(){var e=this.sourceImgMasking,t=this.sourceImgContainer,n=t,i=e,r=i.width==n.width?i.width:(n.width-i.width)/2,o=i.height==n.height?i.height:(n.height-i.height)/2;return{width:r+"px",height:o+"px"}},previewStyle:function(){this.width,this.height;var e=this.ratio,t=this.previewContainer,n=t,i=n.width,r=n.height,o=i/r;return e<o&&(i=n.height*e),e>o&&(r=n.width/e),{width:i+"px",height:r+"px"}}},watch:{value:function(e){e&&1!=this.loading?this.reset():this.off()}},methods:{ripple:function(e){Ht(e)},off:function(){var e=this;setTimeout((function(){e.$emit("input",!1),3==e.step&&2==e.loading&&e.setStep(1)}),200)},setStep:function(e){var t=this;setTimeout((function(){t.step=e}),200)},preventDefault:function(e){return e.preventDefault(),!1},handleClick:function(e){1!==this.loading&&e.target!==this.$refs.fileinput&&(e.preventDefault(),document.activeElement!==this.$refs&&this.$refs.fileinput.click())},handleChange:function(e){if(e.preventDefault(),1!==this.loading){var t=e.target.files||e.dataTransfer.files;this.reset(),this.checkFile(t[0])&&this.setSourceImg(t[0])}},checkFile:function(e){var t=this,n=t.lang,i=t.maxSize;return-1===e.type.indexOf("image")?(t.hasError=!0,t.errorMsg=n.error.onlyImg,!1):!(e.size/1024>i)||(t.hasError=!0,t.errorMsg=n.error.outOfSize+i+"kb",!1)},reset:function(){var e=this;e.loading=0,e.hasError=!1,e.errorMsg="",e.progress=0},setSourceImg:function(e){var t=this,n=new FileReader;n.onload=function(e){t.sourceImgUrl=n.result,t.startCrop()},n.readAsDataURL(e)},startCrop:function(){var e=this,t=e.width,n=e.height,i=e.ratio,r=e.scale,o=e.sourceImgUrl,a=e.sourceImgMasking,s=e.lang,l=a,c=new Image;c.src=o,c.onload=function(){var o=c.naturalWidth,a=c.naturalHeight,u=o/a,d=l.width,h=l.height,f=0,p=0;if(o<t||a<n)return e.hasError=!0,e.errorMsg=s.error.lowestPx+t+"*"+n,!1;i>u&&(h=d/u,p=(l.height-h)/2),i<u&&(d=h*u,f=(l.width-d)/2),r.range=0,r.x=f,r.y=p,r.width=d,r.height=h,r.degree=0,r.minWidth=d,r.minHeight=h,r.maxWidth=o*l.scale,r.maxHeight=a*l.scale,r.naturalWidth=o,r.naturalHeight=a,e.sourceImg=c,e.createImg(),e.setStep(2)}},imgStartMove:function(e){if(e.preventDefault(),this.isSupportTouch&&!e.targetTouches)return!1;var t=e.targetTouches?e.targetTouches[0]:e,n=this.sourceImgMouseDown,i=this.scale,r=n;r.mX=t.screenX,r.mY=t.screenY,r.x=i.x,r.y=i.y,r.on=!0},imgMove:function(e){if(e.preventDefault(),this.isSupportTouch&&!e.targetTouches)return!1;var t=e.targetTouches?e.targetTouches[0]:e,n=this.sourceImgMouseDown,i=n.on,r=n.mX,o=n.mY,a=n.x,s=n.y,l=this.scale,c=this.sourceImgMasking,u=c,d=t.screenX,h=t.screenY,f=d-r,p=h-o,m=a+f,g=s+p;i&&(m>0&&(m=0),g>0&&(g=0),m<u.width-l.width&&(m=u.width-l.width),g<u.height-l.height&&(g=u.height-l.height),l.x=m,l.y=g)},startRotateRight:function(e){var t=this,n=t.scale;function i(){if(n.rotateRight){var e=++n.degree;t.createImg(e),setTimeout((function(){i()}),60)}}n.rotateRight=!0,i()},startRotateLeft:function(e){var t=this,n=t.scale;function i(){if(n.rotateLeft){var e=--n.degree;t.createImg(e),setTimeout((function(){i()}),60)}}n.rotateLeft=!0,i()},endRotate:function(){var e=this.scale;e.rotateLeft=!1,e.rotateRight=!1},startZoomAdd:function(e){var t=this,n=t.scale;function i(){if(n.zoomAddOn){var e=n.range>=100?100:++n.range;t.zoomImg(e),setTimeout((function(){i()}),60)}}n.zoomAddOn=!0,i()},endZoomAdd:function(e){this.scale.zoomAddOn=!1},startZoomSub:function(e){var t=this,n=t.scale;function i(){if(n.zoomSubOn){var e=n.range<=0?0:--n.range;t.zoomImg(e),setTimeout((function(){i()}),60)}}n.zoomSubOn=!0,i()},endZoomSub:function(e){var t=this.scale;t.zoomSubOn=!1},zoomChange:function(e){this.zoomImg(e.target.value)},zoomImg:function(e){var t=this,n=this.sourceImgMasking,i=(this.sourceImgMouseDown,this.scale),r=i.maxWidth,o=i.maxHeight,a=i.minWidth,s=i.minHeight,l=i.width,c=i.height,u=i.x,d=i.y,h=(i.range,n),f=h.width,p=h.height,m=a+(r-a)*e/100,g=s+(o-s)*e/100,v=f/2-m/l*(f/2-u),b=p/2-g/c*(p/2-d);v>0&&(v=0),b>0&&(b=0),v<f-m&&(v=f-m),b<p-g&&(b=p-g),i.x=v,i.y=b,i.width=m,i.height=g,i.range=e,setTimeout((function(){i.range==e&&t.createImg()}),300)},createImg:function(e){var t=this,n=t.mime,i=t.sourceImg,r=t.scale,o=r.x,a=r.y,s=r.width,l=r.height,c=r.degree,u=t.sourceImgMasking.scale,d=t.$refs.canvas,h=d.getContext("2d");e&&(t.sourceImgMouseDown.on=!1),d.width=t.width,d.height=t.height,h.clearRect(0,0,t.width,t.height),h.fillStyle="#fff",h.fillRect(0,0,t.width,t.height),h.translate(.5*t.width,.5*t.height),h.rotate(Math.PI*c/180),h.translate(.5*-t.width,.5*-t.height),h.drawImage(i,o/u,a/u,s/u,l/u),t.createImgUrl=d.toDataURL(n)},prepareUpload:function(){var e=this.url,t=this.createImgUrl,n=this.field,i=this.ki;this.$emit("crop-success",t,n,i),"string"==typeof e&&e?this.upload():this.off()},upload:function(){var e=this,t=this.lang,n=this.imgFormat,i=this.mime,r=this.url,o=this.params,a=this.headers,s=this.field,l=this.ki,c=this.createImgUrl,u=new FormData;u.append(s,Vt(c,i),s+"."+n),"object"==Object(k["a"])(o)&&o&&Object.keys(o).forEach((function(e){u.append(e,o[e])}));var d=function(t){t.lengthComputable&&(e.progress=100*Math.round(t.loaded)/t.total)};e.reset(),e.loading=1,e.setStep(3),new Promise((function(e,t){var n=new XMLHttpRequest;n.open("POST",r,!0),n.onreadystatechange=function(){4===this.readyState&&(200===this.status||201===this.status?e(JSON.parse(this.responseText)):t(this.status))},n.upload.addEventListener("progress",d,!1),"object"==Object(k["a"])(a)&&a&&Object.keys(a).forEach((function(e){n.setRequestHeader(e,a[e])})),n.send(u)})).then((function(t){e.value&&(e.loading=2,e.$emit("crop-upload-success",t,s,l))}),(function(n){e.value&&(e.loading=3,e.hasError=!0,e.errorMsg=t.fail,e.$emit("crop-upload-fail",n,s,l))}))}},created:function(){var e=this;document.addEventListener("keyup",(function(t){!e.value||"Escape"!=t.key&&27!=t.keyCode||e.off()}))}},qt=Wt,Ut=(n("8888"),Object(g["a"])(qt,jt,zt,!1,null,"7dde4dbe",null)),Kt=Ut.exports;Kt.install=function(e){e.component(Kt.name,Kt)};var Gt=Kt,Yt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("awsui-dialog",{staticClass:"awsui-upload",attrs:{title:"修改头像",visible:e.value,width:"auto",border:!1,"show-close":!1},on:{"update:visible":function(t){e.value=t}}},[n("button",{staticClass:"vicp-close",attrs:{type:"button"},on:{click:e.off}},[n("i",{staticClass:"awsui-iconfont"},[e._v("  ")])]),n("input",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}],ref:"fileinput",attrs:{type:"file"},on:{change:e.handleChange}}),n("div",{staticClass:"vicp-wrap"},[n("div",{directives:[{name:"show",rawName:"v-show",value:1==e.step,expression:"step == 1"}],staticClass:"vicp-step1"},[n("div",{staticClass:"vicp-crop"},[n("div",{directives:[{name:"show",rawName:"v-show",value:!0,expression:"true"}],staticClass:"vicp-crop-left"},[n("div",{staticClass:"vicp-img-container"},[n("div",{staticClass:"vicp-img-default",on:{click:e.handleClick}},[n("i",{staticClass:"awsui-iconfont"},[e._v("  ")])])]),n("div",{staticClass:"vicp-img-info"},[e._v("根据您的需要裁剪和调整图片的位置")])]),n("div",{directives:[{name:"show",rawName:"v-show",value:!0,expression:"true"}],staticClass:"vicp-crop-right"},[n("div",{staticClass:"vicp-preview"},[n("span",[e._v(e._s(e.lang.preview))]),e.noSquare?e._e():n("div",{staticClass:"vicp-preview-item"}),e.noCircle?e._e():n("div",{staticClass:"vicp-preview-item vicp-preview-item-circle"})])])])]),2==e.step?n("div",{staticClass:"vicp-step2"},[n("div",{staticClass:"vicp-crop"},[n("div",{directives:[{name:"show",rawName:"v-show",value:!0,expression:"true"}],staticClass:"vicp-crop-left"},[n("div",{staticClass:"vicp-img-container"},[n("img",{ref:"img",staticClass:"vicp-img",style:e.sourceImgStyle,attrs:{src:e.sourceImgUrl,draggable:"false"},on:{drag:e.preventDefault,dragstart:e.preventDefault,dragend:e.preventDefault,dragleave:e.preventDefault,dragover:e.preventDefault,dragenter:e.preventDefault,drop:e.preventDefault,touchstart:e.imgStartMove,touchmove:e.imgMove,touchend:e.createImg,touchcancel:e.createImg,mousedown:e.imgStartMove,mousemove:e.imgMove,mouseup:e.createImg,mouseout:e.createImg}}),n("div",{staticClass:"vicp-img-shade vicp-img-shade-1",style:e.sourceImgShadeStyle}),n("div",{staticClass:"vicp-img-shade vicp-img-shade-2",style:e.sourceImgShadeStyle})]),n("div",{staticClass:"vicp-range"},[n("input",{attrs:{type:"range",step:"1",min:"0",max:"100"},domProps:{value:e.scale.range},on:{input:e.zoomChange}}),n("i",{staticClass:"vicp-icon5",on:{mousedown:e.startZoomSub,mouseout:e.endZoomSub,mouseup:e.endZoomSub}}),n("i",{staticClass:"vicp-icon6",on:{mousedown:e.startZoomAdd,mouseout:e.endZoomAdd,mouseup:e.endZoomAdd}})]),e.noRotate?e._e():n("div",{staticClass:"vicp-rotate"},[n("i",{on:{mousedown:e.startRotateLeft,mouseout:e.endRotate,mouseup:e.endRotate}},[e._v("↺")]),n("i",{on:{mousedown:e.startRotateRight,mouseout:e.endRotate,mouseup:e.endRotate}},[e._v("↻")])])]),n("div",{directives:[{name:"show",rawName:"v-show",value:!0,expression:"true"}],staticClass:"vicp-crop-right"},[n("div",{staticClass:"vicp-preview"},[n("span",[e._v(e._s(e.lang.preview))]),e.noSquare?e._e():n("div",{staticClass:"vicp-preview-item"},[n("img",{style:e.previewStyle,attrs:{src:e.createImgUrl}})]),e.noCircle?e._e():n("div",{staticClass:"vicp-preview-item vicp-preview-item-circle"},[n("img",{style:e.previewStyle,attrs:{src:e.createImgUrl}})])])])])]):e._e(),3==e.step?n("div",{staticClass:"vicp-step3"},[n("div",{staticClass:"vicp-upload"},[n("span",{directives:[{name:"show",rawName:"v-show",value:1===e.loading,expression:"loading === 1"}],staticClass:"vicp-loading"},[e._v(e._s(e.lang.loading))]),n("div",{staticClass:"vicp-progress-wrap"},[n("span",{directives:[{name:"show",rawName:"v-show",value:1===e.loading,expression:"loading === 1"}],staticClass:"vicp-progress",style:e.progressStyle})]),n("div",{directives:[{name:"show",rawName:"v-show",value:e.hasError,expression:"hasError"}],staticClass:"vicp-error"},[n("i",{staticClass:"vicp-icon2"}),e._v(" "+e._s(e.errorMsg)+" ")]),n("div",{directives:[{name:"show",rawName:"v-show",value:2===e.loading,expression:"loading === 2"}],staticClass:"vicp-success"},[n("i",{staticClass:"vicp-icon3"}),e._v(" "+e._s(e.lang.success)+" ")])])]):e._e(),n("canvas",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}],ref:"canvas",attrs:{width:e.width,height:e.height}})]),n("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("awsui-button",{staticClass:"awsui-left",on:{click:e.handleClick}},[e._v("选择图片")]),n("awsui-button",{attrs:{type:"primary"},on:{click:e.prepareUpload,mousedown:e.ripple}},[e._v("确 定")]),n("awsui-button",{on:{click:e.off}},[e._v("取 消")])],1)])},Xt=[],Zt={zh:{hint:"点击,或拖动图片至此处",loading:"正在上传……",noSupported:"浏览器不支持该功能,请使用IE10以上或其他现在浏览器!",success:"上传成功",fail:"图片上传失败",preview:"头像预览",btn:{off:"取消",close:"关闭",back:"上一步",save:"保存"},error:{onlyImg:"仅限图片格式",outOfSize:"单文件大小不能超过 ",lowestPx:"图片最低像素为(宽*高):"}},en:{hint:"Click or drag the file here to upload",loading:"Uploading…",noSupported:"Browser is not supported, please use IE10+ or other browsers",success:"Upload success",fail:"Upload failed",preview:"Preview",btn:{off:"Cancel",close:"Close",back:"Back",save:"Save"},error:{onlyImg:"Image only",outOfSize:"Image exceeds size limit: ",lowestPx:"Image's size is too low. Expected at least: "}},ro:{hint:"Atinge sau trage fișierul aici",loading:"Se încarcă",noSupported:"Browser-ul tău nu suportă acest feature. Te rugăm încearcă cu alt browser.",success:"S-a încărcat cu succes",fail:"A apărut o problemă la încărcare",preview:"Previzualizează",btn:{off:"Anulează",close:"Închide",back:"Înapoi",save:"Salvează"},error:{onlyImg:"Doar imagini",outOfSize:"Imaginea depășește limita de: ",loewstPx:"Imaginea este prea mică; Minim: "}},ru:{hint:"Нажмите, или перетащите файл в это окно",loading:"Загружаю……",noSupported:"Ваш браузер не поддерживается, пожалуйста, используйте IE10 + или другие браузеры",success:"Загрузка выполнена успешно",fail:"Ошибка загрузки",preview:"Предпросмотр",btn:{off:"Отменить",close:"Закрыть",back:"Назад",save:"Сохранить"},error:{onlyImg:"Только изображения",outOfSize:"Изображение превышает предельный размер: ",lowestPx:"Минимальный размер изображения: "}},"pt-br":{hint:"Clique ou arraste o arquivo aqui para carregar",loading:"Carregando…",noSupported:"Browser não suportado, use o IE10+ ou outro browser",success:"Sucesso ao carregar imagem",fail:"Falha ao carregar imagem",preview:"Pré-visualizar",btn:{off:"Cancelar",close:"Fechar",back:"Voltar",save:"Salvar"},error:{onlyImg:"Apenas imagens",outOfSize:"A imagem excede o limite de tamanho: ",lowestPx:"O tamanho da imagem é muito pequeno. Tamanho mínimo: "}},fr:{hint:"Cliquez ou glissez le fichier ici.",loading:"Téléchargement…",noSupported:"Votre navigateur n'est pas supporté. Utilisez IE10 + ou un autre navigateur s'il vous plaît.",success:"Téléchargement réussit",fail:"Téléchargement echoué",preview:"Aperçu",btn:{off:"Annuler",close:"Fermer",back:"Retour",save:"Enregistrer"},error:{onlyImg:"Image uniquement",outOfSize:"L'image sélectionnée dépasse la taille maximum: ",lowestPx:"L'image sélectionnée est trop petite. Dimensions attendues: "}},nl:{hint:"Klik hier of sleep een afbeelding in dit vlak",loading:"Uploaden…",noSupported:"Je browser wordt helaas niet ondersteund. Gebruik IE10+ of een andere browser.",success:"Upload succesvol",fail:"Upload mislukt",preview:"Voorbeeld",btn:{off:"Annuleren",close:"Sluiten",back:"Terug",save:"Opslaan"},error:{onlyImg:"Alleen afbeeldingen",outOfSize:"De afbeelding is groter dan: ",lowestPx:"De afbeelding is te klein! Minimale afmetingen: "}},tr:{hint:"Tıkla veya yüklemek istediğini buraya sürükle",loading:"Yükleniyor…",noSupported:"Tarayıcı desteklenmiyor, lütfen IE10+ veya farklı tarayıcı kullanın",success:"Yükleme başarılı",fail:"Yüklemede hata oluştu",preview:"Önizle",btn:{off:"İptal",close:"Kapat",back:"Geri",save:"Kaydet"},error:{onlyImg:"Sadece resim",outOfSize:"Resim yükleme limitini aşıyor: ",lowestPx:"Resmin boyutu çok küçük. En az olması gereken: "}},"es-MX":{hint:"Selecciona o arrastra una imagen",loading:"Subiendo...",noSupported:"Tu navegador no es soportado, porfavor usa IE10+ u otros navegadores mas recientes",success:"Subido exitosamente",fail:"Sucedió un error",preview:"Vista previa",btn:{off:"Cancelar",close:"Cerrar",back:"Atras",save:"Guardar"},error:{onlyImg:"Unicamente imagenes",outOfSize:"La imagen excede el tamaño maximo:",lowestPx:"La imagen es demasiado pequeño. Se espera por lo menos:"}}},Qt={jpg:"image/jpeg",png:"image/png",gif:"image/gif",svg:"image/svg+xml",psd:"image/photoshop"},Jt=function(e,t){e=e.split(",")[1],e=window.atob(e);for(var n=new Uint8Array(e.length),i=0;i<e.length;i++)n[i]=e.charCodeAt(i);return new Blob([n],{type:t})},en=function(e,t){var n=Object.assign({ele:e.target,type:"hit",bgc:"rgba(0, 0, 0, 0.15)"},t),i=n.ele;if(i){var r=i.getBoundingClientRect(),o=i.querySelector(".e-ripple");switch(o?o.className="e-ripple":(o=document.createElement("span"),o.className="e-ripple",o.style.height=o.style.width=Math.max(r.width,r.height)+"px",i.appendChild(o)),n.type){case"center":o.style.top=r.height/2-o.offsetHeight/2+"px",o.style.left=r.width/2-o.offsetWidth/2+"px";break;default:o.style.top=e.pageY-r.top-o.offsetHeight/2-document.body.scrollTop+"px",o.style.left=e.pageX-r.left-o.offsetWidth/2-document.body.scrollLeft+"px"}return o.style.backgroundColor=n.bgc,o.className="e-ripple z-active",!1}},tn={name:"AwsuiUploadImage",props:{field:{type:String,default:"avatar"},ki:{default:0},value:{default:!0},url:{type:String,default:""},params:{type:Object,default:null},headers:{type:Object,default:null},width:{type:Number,default:200},height:{type:Number,default:200},noRotate:{type:Boolean,default:!0},noCircle:{type:Boolean,default:!1},noSquare:{type:Boolean,default:!1},maxSize:{type:Number,default:10240},langType:{type:String,default:"zh"},langExt:{type:Object,default:null},imgFormat:{type:String,default:"png"},imgUrl:{type:String,default:""}},data:function(){var e=this,t=e.imgFormat,n=e.imgUrl,i=e.langType,r=e.langExt,o=e.width,a=e.height,s=!0,l=["jpg","png"],c=""!==n||null!==n?n:"",u=""!==n||null!==n?n:"",d=""!==n||null!==n?2:1,h=-1===l.indexOf(t)?"jpg":t,f=Zt[i]?Zt[i]:Zt["en"],p=Qt[h];return e.imgFormat=h,r&&Object.assign(f,r),"function"!=typeof FormData&&(s=!1),{mime:p,lang:f,isSupported:s,step:d,loading:0,progress:0,hasError:!1,errorMsg:"",ratio:o/a,sourceImg:null,sourceImgUrl:c,createImgUrl:u,sourceImgMouseDown:{on:!1,mX:0,mY:0,x:0,y:0},previewContainer:{width:100,height:100},sourceImgContainer:{width:240,height:184},scale:{zoomAddOn:!1,zoomSubOn:!1,range:1,rotateLeft:!1,rotateRight:!1,degree:0,x:0,y:0,width:0,height:0,maxWidth:0,maxHeight:0,minWidth:0,minHeight:0,naturalWidth:0,naturalHeight:0}}},computed:{progressStyle:function(){var e=this.progress;return{width:e+"%"}},sourceImgStyle:function(){var e=this.scale,t=this.sourceImgMasking;return{top:e.y+t.y+"px",left:e.x+t.x+"px",width:e.width+"px",height:e.height+"px",transform:"rotate("+e.degree+"deg)","-ms-transform":"rotate("+e.degree+"deg)","-moz-transform":"rotate("+e.degree+"deg)","-webkit-transform":"rotate("+e.degree+"deg)","-o-transform":"rotate("+e.degree+"deg)"}},sourceImgMasking:function(){var e=this.width,t=this.height,n=this.ratio,i=this.sourceImgContainer,r=i,o=r.width/r.height,a=0,s=0,l=r.width,c=r.height,u=1;return n<o&&(u=r.height/t,l=r.height*n,a=(r.width-l)/2),n>o&&(u=r.width/e,c=r.width/n,s=(r.height-c)/2),{scale:u,x:a,y:s,width:l,height:c}},sourceImgShadeStyle:function(){var e=this.sourceImgMasking,t=this.sourceImgContainer,n=t,i=e,r=i.width==n.width?i.width:(n.width-i.width)/2,o=i.height==n.height?i.height:(n.height-i.height)/2;return{width:r+"px",height:o+"px"}},previewStyle:function(){this.width,this.height;var e=this.ratio,t=this.previewContainer,n=t,i=n.width,r=n.height,o=i/r;return e<o&&(i=n.height*e),e>o&&(r=n.width/e),{width:i+"px",height:r+"px"}}},watch:{value:function(e){e&&1!=this.loading?this.initDataImg():this.off()}},methods:{getBase64:function(e,t){var n=new Image;n.setAttribute("crossOrigin","anonymous");var i=e;n.src=i,n.onload=function(){var e=document.createElement("canvas");e.width=n.width,e.height=n.height;var i=e.getContext("2d");i.fillStyle="#fff",i.fillRect(0,0,n.width,n.height),i.drawImage(n,0,0,n.width,n.height);var r=.8,o=e.toDataURL("image/jpeg",r);t&&t(o)}},ripple:function(e){en(e)},off:function(){var e=this;setTimeout((function(){e.$emit("input",!1),3==e.step&&2==e.loading&&e.setStep(1)}),200)},initDataImg:function(){var e=this;this.reset(),""!==this.sourceImgUrl?-1!==this.sourceImgUrl.indexOf("data:image")?(this.createImg(),this.setStep(2)):this.getBase64(this.sourceImgUrl,(function(t){e.sourceImgUrl=t,e.startCrop()})):this.setStep(1)},setStep:function(e){var t=this;setTimeout((function(){t.step=e}),200)},preventDefault:function(e){return e.preventDefault(),!1},handleClick:function(e){1!==this.loading&&e.target!==this.$refs.fileinput&&(e.preventDefault(),document.activeElement!==this.$refs&&this.$refs.fileinput.dispatchEvent(new MouseEvent("click")))},handleChange:function(e){if(e.preventDefault(),1!==this.loading){var t=e.target.files||e.dataTransfer.files;this.reset(),this.checkFile(t[0])&&this.setSourceImg(t[0])}},checkFile:function(e){var t=this,n=t.lang,i=t.maxSize;return-1===e.type.indexOf("image")?(t.hasError=!0,t.errorMsg=n.error.onlyImg,!1):!(e.size/1024>i)||(t.hasError=!0,t.errorMsg=n.error.outOfSize+i+"kb",!1)},reset:function(){this.loading=0,this.progress=0,this.hasError=!1,this.errorMsg=""},setSourceImg:function(e){var t=this,n=new FileReader;n.onload=function(e){t.sourceImgUrl=n.result,t.startCrop()},n.readAsDataURL(e)},startCrop:function(){var e=this,t=(e.width,e.height,e.ratio),n=e.scale,i=e.sourceImgUrl,r=e.sourceImgMasking,o=(e.lang,r),a=new Image;a.src=i,a.onload=function(){var i=a.naturalWidth,r=a.naturalHeight,s=i/r,l=o.width,c=o.height,u=0,d=0;t>s&&(c=l/s,d=(o.height-c)/2),t<s&&(l=c*s,u=(o.width-l)/2),n.range=0,n.x=u,n.y=d,n.width=l,n.height=c,n.degree=0,n.minWidth=l,n.minHeight=c,n.maxWidth=i*o.scale,n.maxHeight=r*o.scale,n.naturalWidth=i,n.naturalHeight=r,e.sourceImg=a,e.createImg(),e.setStep(2)}},imgStartMove:function(e){if(e.preventDefault(),this.isSupportTouch&&!e.targetTouches)return!1;var t=e.targetTouches?e.targetTouches[0]:e,n=this.sourceImgMouseDown,i=this.scale,r=n;r.mX=t.screenX,r.mY=t.screenY,r.x=i.x,r.y=i.y,r.on=!0},imgMove:function(e){if(e.preventDefault(),this.isSupportTouch&&!e.targetTouches)return!1;var t=e.targetTouches?e.targetTouches[0]:e,n=this.sourceImgMouseDown,i=n.on,r=n.mX,o=n.mY,a=n.x,s=n.y,l=this.scale,c=this.sourceImgMasking,u=c,d=t.screenX,h=t.screenY,f=d-r,p=h-o,m=a+f,g=s+p;i&&(m>0&&(m=0),g>0&&(g=0),m<u.width-l.width&&(m=u.width-l.width),g<u.height-l.height&&(g=u.height-l.height),l.x=m,l.y=g)},startRotateRight:function(e){var t=this,n=t.scale;function i(){if(n.rotateRight){var e=++n.degree;t.createImg(e),setTimeout((function(){i()}),60)}}n.rotateRight=!0,i()},startRotateLeft:function(e){var t=this,n=t.scale;function i(){if(n.rotateLeft){var e=--n.degree;t.createImg(e),setTimeout((function(){i()}),60)}}n.rotateLeft=!0,i()},endRotate:function(){var e=this.scale;e.rotateLeft=!1,e.rotateRight=!1},startZoomAdd:function(e){var t=this,n=t.scale;function i(){if(n.zoomAddOn){var e=n.range>=100?100:++n.range;t.zoomImg(e),setTimeout((function(){i()}),60)}}n.zoomAddOn=!0,i()},endZoomAdd:function(e){this.scale.zoomAddOn=!1},startZoomSub:function(e){var t=this,n=t.scale;function i(){if(n.zoomSubOn){var e=n.range<=0?0:--n.range;t.zoomImg(e),setTimeout((function(){i()}),60)}}n.zoomSubOn=!0,i()},endZoomSub:function(e){var t=this.scale;t.zoomSubOn=!1},zoomChange:function(e){this.zoomImg(e.target.value)},zoomImg:function(e){var t=this,n=this.sourceImgMasking,i=(this.sourceImgMouseDown,this.scale),r=i.maxWidth,o=i.maxHeight,a=i.minWidth,s=i.minHeight,l=i.width,c=i.height,u=i.x,d=i.y,h=(i.range,n),f=h.width,p=h.height,m=a+(r-a)*e/100,g=s+(o-s)*e/100,v=f/2-m/l*(f/2-u),b=p/2-g/c*(p/2-d);v>0&&(v=0),b>0&&(b=0),v<f-m&&(v=f-m),b<p-g&&(b=p-g),i.x=v,i.y=b,i.width=m,i.height=g,i.range=e,setTimeout((function(){i.range==e&&t.createImg()}),300)},createImg:function(e){var t=this,n=t.mime,i=t.sourceImg,r=t.scale,o=r.x,a=r.y,s=r.width,l=r.height,c=r.degree,u=t.sourceImgMasking.scale;if(void 0!==t.$refs.canvas){var d=t.$refs.canvas,h=d.getContext("2d");e&&(t.sourceImgMouseDown.on=!1),d.width=t.width,d.height=t.height,h.clearRect(0,0,t.width,t.height),h.fillStyle="#fff",h.fillRect(0,0,t.width,t.height),h.translate(.5*t.width,.5*t.height),h.rotate(Math.PI*c/180),h.translate(.5*-t.width,.5*-t.height),h.drawImage(i,o/u,a/u,s/u,l/u),t.createImgUrl=d.toDataURL(n)}},prepareUpload:function(){var e=this.url,t=this.createImgUrl,n=this.field,i=this.ki;this.$emit("crop-success",t,n,i),"string"==typeof e&&e?this.upload():this.off()},upload:function(){var e=this,t=this.lang,n=this.imgFormat,i=this.mime,r=this.url,o=this.params,a=this.headers,s=this.field,l=this.ki,c=this.createImgUrl,u=new FormData;u.append(s,Jt(c,i),s+"."+n),"object"==Object(k["a"])(o)&&o&&Object.keys(o).forEach((function(e){u.append(e,o[e])}));var d=function(t){t.lengthComputable&&(e.progress=100*Math.round(t.loaded)/t.total)};e.reset(),e.loading=1,e.setStep(3),new Promise((function(e,t){var n=new XMLHttpRequest;n.open("POST",r,!0),n.onreadystatechange=function(){4===this.readyState&&(200===this.status||201===this.status?e(JSON.parse(this.responseText)):t(this.status))},n.upload.addEventListener("progress",d,!1),"object"==Object(k["a"])(a)&&a&&Object.keys(a).forEach((function(e){n.setRequestHeader(e,a[e])})),n.send(u)})).then((function(t){e.value&&(e.loading=2,e.$emit("crop-upload-success",t,s,l),e.off())}),(function(n){e.value&&(e.loading=3,e.hasError=!0,e.errorMsg=t.fail,e.$emit("crop-upload-fail",n,s,l))}))}},mounted:function(){var e=this;this.$nextTick((function(){e.initDataImg()}),200)},created:function(){var e=this;document.addEventListener("keyup",(function(t){!e.value||"Escape"!=t.key&&27!=t.keyCode||e.off()}))}},nn=tn,rn=(n("b577"),Object(g["a"])(nn,Yt,Xt,!1,null,"2344d3a1",null)),on=rn.exports;on.install=function(e){e.component(on.name,on)};var an=on,sn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"awsui-tree",class:{"awsui-tree--highlight-current":e.highlightCurrent,"is-dragging":!!e.dragState.draggingNode,"is-drop-not-allow":!e.dragState.allowDrop,"is-drop-inner":"inner"===e.dragState.dropType},attrs:{role:"tree"}},[e.height?n("virtual-list",{style:{height:e.height+"px","overflow-y":"auto"},attrs:{"data-key":e.getNodeKey,"data-sources":e.visibleList,"data-component":e.itemComponent,keeps:Math.ceil(e.height/22)+e.extraLine,"extra-props":{renderAfterExpand:e.renderAfterExpand,showCheckbox:e.showCheckbox,renderContent:e.renderContent,onNodeExpand:e.handleNodeExpand}}}):e._l(e.root.childNodes,(function(t){return n("awsui-tree-node",{key:e.getNodeKey(t),attrs:{node:t,props:e.props,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,"render-content":e.renderContent},on:{"node-expand":e.handleNodeExpand}})})),e.isEmpty?n("div",{staticClass:"awsui-tree__empty-block"},[n("span",{staticClass:"awsui-tree__empty-text"},[e._v(e._s(e.emptyText))])]):e._e(),n("div",{directives:[{name:"show",rawName:"v-show",value:e.dragState.showDropIndicator,expression:"dragState.showDropIndicator"}],ref:"dropIndicator",staticClass:"awsui-tree__drop-indicator"})],2)},ln=[],cn=(n("a623"),n("13d5"),n("2909"));function un(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function dn(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function hn(e,t,n){return t&&dn(e.prototype,t),n&&dn(e,n),e}n("45fc"),n("a434");var fn=function(e){for(var t=1,n=arguments.length;t<n;t++){var i=arguments[t]||{};for(var r in i)if(i.hasOwnProperty(r)){var o=i[r];void 0!==o&&(e[r]=o)}}return e},pn="$treeNodeId",mn=function(e,t){t&&!t[pn]&&Object.defineProperty(t,pn,{value:e.id,enumerable:!1,configurable:!1,writable:!1})},gn=function(e,t){return e?t[e]:t[pn]},vn=function(e,t){var n=e;while(n&&"BODY"!==n.tagName){if(n.__vue__&&n.__vue__.$options.name===t)return n.__vue__;n=n.parentNode}return null},bn=function(e){for(var t=!0,n=!0,i=!0,r=0,o=e.length;r<o;r++){var a=e[r];(!0!==a.checked||a.indeterminate)&&(t=!1,a.disabled||(i=!1)),(!1!==a.checked||a.indeterminate)&&(n=!1)}return{all:t,none:n,allWithoutDisable:i,half:!t&&!n}},yn=function e(t){if(0!==t.childNodes.length){var n=bn(t.childNodes),i=n.all,r=n.none,o=n.half;i?(t.checked=!0,t.indeterminate=!1):o?(t.checked=!1,t.indeterminate=!0):r&&(t.checked=!1,t.indeterminate=!1);var a=t.parent;a&&0!==a.level&&(t.store.checkStrictly||e(a))}},wn=function(e,t){var n=e.store.props,i=e.data||{},r=n[t];if("function"===typeof r)return r(i,e);if("string"===typeof r)return i[r];if("undefined"===typeof r){var o=i[t];return void 0===o?"":o}},xn=0,_n=function(){function e(t){for(var n in un(this,e),this.id=xn++,this.text=null,this.checked=!1,this.indeterminate=!1,this.data=null,this.expanded=!1,this.parent=null,this.visible=!0,this.isCurrent=!1,t)t.hasOwnProperty(n)&&(this[n]=t[n]);this.level=0,this.loaded=!1,this.childNodes=[],this.loading=!1,this.parent&&(this.level=this.parent.level+1);var i=this.store;if(!i)throw new Error("[Node]store is required!");i.registerNode(this);var r=i.props;if(r&&"undefined"!==typeof r.isLeaf){var o=wn(this,"isLeaf");"boolean"===typeof o&&(this.isLeafByUser=o)}if(!0!==i.lazy&&this.data?(this.setData(this.data),i.defaultExpandAll&&(this.expanded=!0)):this.level>0&&i.lazy&&i.defaultExpandAll&&this.expand(),Array.isArray(this.data)||mn(this,this.data),this.data){var a=i.defaultExpandedKeys,s=i.key;s&&a&&-1!==a.indexOf(this.key)&&this.expand(null,i.autoExpandParent),s&&void 0!==i.currentNodeKey&&this.key===i.currentNodeKey&&(i.currentNode=this,i.currentNode.isCurrent=!0),i.lazy&&i._initDefaultCheckedNode(this),this.updateLeafState()}}return hn(e,[{key:"setData",value:function(e){var t;Array.isArray(e)||mn(this,e),this.data=e,this.childNodes=[],t=0===this.level&&this.data instanceof Array?this.data:wn(this,"children")||[];for(var n=0,i=t.length;n<i;n++)this.insertChild({data:t[n]})}},{key:"contains",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=function n(i){for(var r=i.childNodes||[],o=!1,a=0,s=r.length;a<s;a++){var l=r[a];if(l===e||t&&n(l)){o=!0;break}}return o};return n(this)}},{key:"remove",value:function(){var e=this.parent;e&&e.removeChild(this)}},{key:"insertChild",value:function(t,n,i){if(!t)throw new Error("insertChild error: child is required.");if(!(t instanceof e)){if(!i){var r=this.getChildren(!0);-1===r.indexOf(t.data)&&("undefined"===typeof n||n<0?r.push(t.data):r.splice(n,0,t.data))}fn(t,{parent:this,store:this.store}),t=new e(t)}t.level=this.level+1,"undefined"===typeof n||n<0?this.childNodes.push(t):this.childNodes.splice(n,0,t),this.updateLeafState()}},{key:"insertBefore",value:function(e,t){var n;t&&(n=this.childNodes.indexOf(t)),this.insertChild(e,n)}},{key:"insertAfter",value:function(e,t){var n;t&&(n=this.childNodes.indexOf(t),-1!==n&&(n+=1)),this.insertChild(e,n)}},{key:"removeChild",value:function(e){var t=this.getChildren()||[],n=t.indexOf(e.data);n>-1&&t.splice(n,1);var i=this.childNodes.indexOf(e);i>-1&&(this.store&&this.store.deregisterNode(e),e.parent=null,this.childNodes.splice(i,1)),this.updateLeafState()}},{key:"removeChildByData",value:function(e){for(var t=null,n=0;n<this.childNodes.length;n++)if(this.childNodes[n].data===e){t=this.childNodes[n];break}t&&this.removeChild(t)}},{key:"expand",value:function(e,t){var n=this,i=function(){if(t){var i=n.parent;while(i.level>0)i.expanded=!0,i=i.parent}n.expanded=!0,e&&e()};this.shouldLoadData()?this.loadData((function(e){e instanceof Array&&(n.checked?n.setChecked(!0,!0):n.store.checkStrictly||yn(n),i())})):i()}},{key:"doCreateChildren",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.forEach((function(e){t.insertChild(fn({data:e},n),void 0,!0)}))}},{key:"collapse",value:function(){this.expanded=!1}},{key:"shouldLoadData",value:function(){return!0===this.store.lazy&&this.store.load&&!this.loaded}},{key:"updateLeafState",value:function(){if(!0!==this.store.lazy||!0===this.loaded||"undefined"===typeof this.isLeafByUser){var e=this.childNodes;!this.store.lazy||!0===this.store.lazy&&!0===this.loaded?this.isLeaf=!e||0===e.length:this.isLeaf=!1}else this.isLeaf=this.isLeafByUser}},{key:"setChecked",value:function(e,t,n,i){var r=this;if(this.indeterminate="half"===e,this.checked=!0===e,!this.store.checkStrictly){if(!this.shouldLoadData()||this.store.checkDescendants){var o=bn(this.childNodes),a=o.all,s=o.allWithoutDisable;this.isLeaf||a||!s||(this.checked=!1,e=!1);var l=function(){if(t){for(var n=r.childNodes,o=0,a=n.length;o<a;o++){var s=n[o];i=i||!1!==e;var l=s.disabled?s.checked:i;s.setChecked(l,t,!0,i)}var c=bn(n),u=c.half,d=c.all;d||(r.checked=d,r.indeterminate=u)}};if(this.shouldLoadData())return void this.loadData((function(){l(),yn(r)}),{checked:!1!==e});l()}var c=this.parent;c&&0!==c.level&&(n||yn(c))}}},{key:"getChildren",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(0===this.level)return this.data;var t=this.data;if(!t)return null;var n=this.store.props,i="children";return n&&(i=n.children||"children"),void 0===t[i]&&(t[i]=null),e&&!t[i]&&(t[i]=[]),t[i]}},{key:"updateChildren",value:function(){var e=this,t=this.getChildren()||[],n=this.childNodes.map((function(e){return e.data})),i={},r=[];t.forEach((function(e,t){var o=e[pn],a=!!o&&ue(n,(function(e){return e[pn]===o}))>=0;a?i[o]={index:t,data:e}:r.push({index:t,data:e})})),this.store.lazy||n.forEach((function(t){i[t[pn]]||e.removeChildByData(t)})),r.forEach((function(t){var n=t.index,i=t.data;e.insertChild({data:i},n)})),this.updateLeafState()}},{key:"loadData",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!0!==this.store.lazy||!this.store.load||this.loaded||this.loading&&!Object.keys(n).length)e&&e.call(this);else{this.loading=!0;var i=function(i){t.loaded=!0,t.loading=!1,t.childNodes=[],t.doCreateChildren(i,n),t.updateLeafState(),e&&e.call(t,i)};this.store.load(this,i)}}},{key:"label",get:function(){return wn(this,"label")}},{key:"key",get:function(){var e=this.store.key;return this.data?this.data[e]:null}},{key:"disabled",get:function(){return wn(this,"disabled")}},{key:"nextSibling",get:function(){var e=this.parent;if(e){var t=e.childNodes.indexOf(this);if(t>-1)return e.childNodes[t+1]}return null}},{key:"previousSibling",get:function(){var e=this.parent;if(e){var t=e.childNodes.indexOf(this);if(t>-1)return t>0?e.childNodes[t-1]:null}return null}}]),e}(),kn=function(){function e(t){var n=this;for(var i in un(this,e),this.currentNode=null,this.currentNodeKey=null,t)t.hasOwnProperty(i)&&(this[i]=t[i]);if(this.nodesMap={},this.root=new _n({data:this.data,store:this}),this.lazy&&this.load){var r=this.load;r(this.root,(function(e){n.root.doCreateChildren(e),n._initDefaultCheckedNodes()}))}else this._initDefaultCheckedNodes()}return hn(e,[{key:"filter",value:function(e){var t=this.filterNodeMethod,n=this.lazy,i=function i(r){var o=r.root?r.root.childNodes:r.childNodes;if(o.forEach((function(n){n.visible=t.call(n,e,n.data,n),i(n)})),!r.visible&&o.length){var a=!0;a=!o.some((function(e){return e.visible})),r.root?r.root.visible=!1===a:r.visible=!1===a}e&&(!r.visible||r.isLeaf||n||r.expand())};i(this)}},{key:"setData",value:function(e){var t=e!==this.root.data;t?(this.root.setData(e),this._initDefaultCheckedNodes()):this.root.updateChildren()}},{key:"getNode",value:function(e){if(e instanceof _n)return e;var t="object"!==Object(k["a"])(e)?e:gn(this.key,e);return this.nodesMap[t]||null}},{key:"insertBefore",value:function(e,t){var n=this.getNode(t);n.parent.insertBefore({data:e},n)}},{key:"insertAfter",value:function(e,t){var n=this.getNode(t);n.parent.insertAfter({data:e},n)}},{key:"remove",value:function(e){var t=this.getNode(e);t&&t.parent&&(t===this.currentNode&&(this.currentNode=null),t.parent.removeChild(t))}},{key:"append",value:function(e,t){var n=t?this.getNode(t):this.root;n&&n.insertChild({data:e})}},{key:"_initDefaultCheckedNodes",value:function(){var e=this,t=this.defaultCheckedKeys||[],n=this.nodesMap;t.forEach((function(t){var i=n[t];i&&i.setChecked(!0,!e.checkStrictly)}))}},{key:"_initDefaultCheckedNode",value:function(e){var t=this.defaultCheckedKeys||[];-1!==t.indexOf(e.key)&&e.setChecked(!0,!this.checkStrictly)}},{key:"setDefaultCheckedKey",value:function(e){e!==this.defaultCheckedKeys&&(this.defaultCheckedKeys=e,this._initDefaultCheckedNodes())}},{key:"registerNode",value:function(e){var t=this.key;if(t&&e&&e.data){var n=e.key;void 0!==n&&(this.nodesMap[e.key]=e)}}},{key:"deregisterNode",value:function(e){var t=this,n=this.key;n&&e&&e.data&&(e.childNodes.forEach((function(e){t.deregisterNode(e)})),delete this.nodesMap[e.key])}},{key:"getCheckedNodes",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],i=function i(r){var o=r.root?r.root.childNodes:r.childNodes;o.forEach((function(r){(r.checked||t&&r.indeterminate)&&(!e||e&&r.isLeaf)&&n.push(r.data),i(r)}))};return i(this),n}},{key:"getCheckedKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.getCheckedNodes(t).map((function(t){return(t||{})[e.key]}))}},{key:"getHalfCheckedNodes",value:function(){var e=[],t=function t(n){var i=n.root?n.root.childNodes:n.childNodes;i.forEach((function(n){n.indeterminate&&e.push(n.data),t(n)}))};return t(this),e}},{key:"getHalfCheckedKeys",value:function(){var e=this;return this.getHalfCheckedNodes().map((function(t){return(t||{})[e.key]}))}},{key:"_getAllNodes",value:function(){var e=[],t=this.nodesMap;for(var n in t)t.hasOwnProperty(n)&&e.push(t[n]);return e}},{key:"updateChildren",value:function(e,t){var n=this.nodesMap[e];if(n){for(var i=n.childNodes,r=i.length-1;r>=0;r--){var o=i[r];this.remove(o.data)}for(var a=0,s=t.length;a<s;a++){var l=t[a];this.append(l,n.data)}}}},{key:"_setCheckedKeys",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0,i=this._getAllNodes().sort((function(e,t){return t.level-e.level})),r=Object.create(null),o=Object.keys(n);i.forEach((function(e){return e.setChecked(!1,!1)}));for(var a=0,s=i.length;a<s;a++){var l=i[a],c=l.data[e].toString(),u=o.indexOf(c)>-1;if(u){var d=l.parent;while(d&&d.level>0)r[d.data[e]]=!0,d=d.parent;l.isLeaf||this.checkStrictly?l.setChecked(!0,!1):(l.setChecked(!0,!0),t&&function(){l.setChecked(!1,!1);var e=function e(t){var n=t.childNodes;n.forEach((function(t){t.isLeaf||t.setChecked(!1,!1),e(t)}))};e(l)}())}else l.checked&&!r[c]&&l.setChecked(!1,!1)}}},{key:"setCheckedNodes",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.key,i={};e.forEach((function(e){i[(e||{})[n]]=!0})),this._setCheckedKeys(n,t,i)}},{key:"setCheckedKeys",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.defaultCheckedKeys=e;var n=this.key,i={};e.forEach((function(e){i[e]=!0})),this._setCheckedKeys(n,t,i)}},{key:"setDefaultExpandedKeys",value:function(e){var t=this;e=e||[],this.defaultExpandedKeys=e,e.forEach((function(e){var n=t.getNode(e);n&&n.expand(null,t.autoExpandParent)}))}},{key:"setChecked",value:function(e,t,n){var i=this.getNode(e);i&&i.setChecked(!!t,n)}},{key:"getCurrentNode",value:function(){return this.currentNode}},{key:"setCurrentNode",value:function(e){var t=this.currentNode;t&&(t.isCurrent=!1),this.currentNode=e,this.currentNode.isCurrent=!0}},{key:"setUserCurrentNode",value:function(e){var t=e[this.key],n=this.nodesMap[t];this.setCurrentNode(n)}},{key:"setCurrentNodeKey",value:function(e){if(null===e||void 0===e)return this.currentNode&&(this.currentNode.isCurrent=!1),void(this.currentNode=null);var t=this.getNode(e);t&&this.setCurrentNode(t)}}]),e}(),Cn=n("89c1"),Sn=n.n(Cn),On=function(){var e=this,t=this,n=t.$createElement,i=t._self._c||n;return i("div",{directives:[{name:"show",rawName:"v-show",value:t.node.visible,expression:"node.visible"}],ref:"node",staticClass:"awsui-tree-node",class:{"is-expanded":t.expanded,"is-current":t.node.isCurrent,"is-hidden":!t.node.visible,"is-focusable":!t.node.disabled,"is-checked":!t.node.disabled&&t.node.checked},attrs:{role:"treeitem",tabindex:"-1","aria-expanded":t.expanded,"aria-disabled":t.node.disabled,"aria-checked":t.node.checked,draggable:t.tree.draggable},on:{click:function(e){return e.stopPropagation(),t.handleClick(e)},contextmenu:function(t){return e.handleContextMenu(t)},dragstart:function(e){return e.stopPropagation(),t.handleDragStart(e)},dragover:function(e){return e.stopPropagation(),t.handleDragOver(e)},dragend:function(e){return e.stopPropagation(),t.handleDragEnd(e)},drop:function(e){return e.stopPropagation(),t.handleDrop(e)}}},[i("div",{staticClass:"awsui-tree-node__content",style:{"padding-left":(t.node.level-1)*t.tree.indent+"px"}},[i("span",{class:[{"is-leaf":t.node.isLeaf,expanded:!t.node.isLeaf&&t.expanded},"awsui-tree-node__expand-icon awsui-iconfont",t.tree.iconClass?t.tree.iconClass:""],domProps:{innerHTML:t._s(t.tree.icon?t.tree.icon:"&#xe606;")},on:{click:function(e){return e.stopPropagation(),t.handleExpandIconClick(e)}}}),t.showCheckbox?i("awsui-checkbox",{attrs:{indeterminate:t.node.indeterminate,disabled:!!t.node.disabled},on:{change:t.handleCheckChange},nativeOn:{click:function(e){e.stopPropagation()}},model:{value:t.node.checked,callback:function(e){t.$set(t.node,"checked",e)},expression:"node.checked"}}):t._e(),t.node.loading?i("span",{staticClass:"awsui-tree-node__loading-icon el-icon-loading"}):t._e(),i("node-content",{attrs:{node:t.node}})],1),i("awsui-collapse-transition",[!t.renderAfterExpand||t.childNodeRendered?i("div",{directives:[{name:"show",rawName:"v-show",value:t.expanded,expression:"expanded"}],staticClass:"awsui-tree-node__children",attrs:{role:"group","aria-expanded":t.expanded}},t._l(t.node.childNodes,(function(e){return i("awsui-tree-node",{key:t.getNodeKey(e),attrs:{"render-content":t.renderContent,"render-after-expand":t.renderAfterExpand,"show-checkbox":t.showCheckbox,node:e},on:{"node-expand":t.handleChildNodeExpand}})})),1):t._e()])],1)},Tn=[],En=oe.a.prototype.$isServer,Dn=/([\:\-\_]+(.))/g,Mn=/^moz([A-Z])/,An=En?0:Number(document.documentMode),Nn=function(e){return(e||"").replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g,"")},In=function(e){return e.replace(Dn,(function(e,t,n,i){return i?n.toUpperCase():n})).replace(Mn,"Moz$1")};function Ln(e,t){if(!e||!t)return!1;if(-1!==t.indexOf(" "))throw new Error("className should not contain space.");return e.classList?e.classList.contains(t):(" "+e.className+" ").indexOf(" "+t+" ")>-1}function Pn(e,t){if(e){for(var n=e.className,i=(t||"").split(" "),r=0,o=i.length;r<o;r++){var a=i[r];a&&(e.classList?e.classList.add(a):Ln(e,a)||(n+=" "+a))}e.classList||(e.className=n)}}function $n(e,t){if(e&&t){for(var n=t.split(" "),i=" "+e.className+" ",r=0,o=n.length;r<o;r++){var a=n[r];a&&(e.classList?e.classList.remove(a):Ln(e,a)&&(i=i.replace(" "+a+" "," ")))}e.classList||(e.className=Nn(i))}}(function(){!En&&document.addEventListener})(),function(){!En&&document.removeEventListener}();var Fn=An<9?function(e,t){if(!En){if(!e||!t)return null;t=In(t),"float"===t&&(t="styleFloat");try{switch(t){case"opacity":try{return e.filters.item("alpha").opacity/100}catch(n){return 1}default:return e.style[t]||e.currentStyle?e.currentStyle[t]:null}}catch(n){return e.style[t]}}}:function(e,t){if(!En){if(!e||!t)return null;t=In(t),"float"===t&&(t="cssFloat");try{var n=document.defaultView.getComputedStyle(e,"");return e.style[t]||n?n[t]:null}catch(i){return e.style[t]}}},jn=function(){function e(){un(this,e)}return hn(e,[{key:"beforeEnter",value:function(e){Pn(e,"collapse-transition"),e.dataset||(e.dataset={}),e.dataset.oldPaddingTop=e.style.paddingTop,e.dataset.oldPaddingBottom=e.style.paddingBottom,e.style.height="0",e.style.paddingTop=0,e.style.paddingBottom=0}},{key:"enter",value:function(e){e.dataset.oldOverflow=e.style.overflow,0!==e.scrollHeight?(e.style.height=e.scrollHeight+"px",e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom):(e.style.height="",e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom),e.style.overflow="hidden"}},{key:"afterEnter",value:function(e){$n(e,"collapse-transition"),e.style.height="",e.style.overflow=e.dataset.oldOverflow}},{key:"beforeLeave",value:function(e){e.dataset||(e.dataset={}),e.dataset.oldPaddingTop=e.style.paddingTop,e.dataset.oldPaddingBottom=e.style.paddingBottom,e.dataset.oldOverflow=e.style.overflow,e.style.height=e.scrollHeight+"px",e.style.overflow="hidden"}},{key:"leave",value:function(e){0!==e.scrollHeight&&(Pn(e,"collapse-transition"),e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0)}},{key:"afterLeave",value:function(e){$n(e,"collapse-transition"),e.style.height="",e.style.overflow=e.dataset.oldOverflow,e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom}}]),e}(),zn={name:"ElCollapseTransition",functional:!0,render:function(e,t){var n=t.children,i={on:new jn};return e("transition",i,n)}},Bn={methods:{creator:function(e,t){var n=this[t];e.isTree?this.tree=e:this.tree=e.tree;var i=this.tree;i||console.warn("Can not find node's tree.");var r=i.props||{},o=r["children"]||"children";this.$watch("".concat(t,".data.").concat(o),(function(){n.updateChildren()})),n.expanded&&(this.expanded=!0,this.childNodeRendered=!0),this.tree.accordion&&this.$on("tree-node-expand",(function(e){n!==e&&n.collapse()}))},getNodeKey:function(e){return gn(this.tree.nodeKey,e.data)},handleSelectChange:function(e,t){var n=this.node||this.source;this.oldChecked!==e&&this.oldIndeterminate!==t&&this.tree.$emit("check-change",n.data,e,t),this.oldChecked=e,this.indeterminate=t},handleClick:function(){var e=this.node||this.source,t=this.tree.store;t.setCurrentNode(e),this.tree.$emit("current-change",t.currentNode?t.currentNode.data:null,t.currentNode),this.tree.currentNode=this,this.tree.expandOnClickNode&&this.handleExpandIconClick(),this.tree.checkOnClickNode&&!e.disabled&&this.handleCheckChange(null,{target:{checked:!e.checked}}),this.tree.$emit("node-click",e.data,e,this)},handleContextMenu:function(e){var t=this.node||this.source;this.tree._events["node-contextmenu"]&&this.tree._events["node-contextmenu"].length>0&&(e.stopPropagation(),e.preventDefault()),this.tree.$emit("node-contextmenu",e,t.data,t,this)},handleExpandIconClick:function(){var e=this.node||this.source;e.isLeaf||(this.expanded?(this.tree.$emit("node-collapse",e.data,e,this),e.collapse()):(e.expand(),this.$emit("node-expand",e.data,e,this)))},handleCheckChange:function(e,t){var n=this,i=this.node||this.source;i.setChecked(t.target.checked,!this.tree.checkStrictly),this.$nextTick((function(){var e=n.tree.store;n.tree.$emit("check",i.data,{checkedNodes:e.getCheckedNodes(),checkedKeys:e.getCheckedKeys(),halfCheckedNodes:e.getHalfCheckedNodes(),halfCheckedKeys:e.getHalfCheckedKeys()})}))},handleChildNodeExpand:function(e,t,n){this.broadcast("ElTreeNode","tree-node-expand",t),this.tree.$emit("node-expand",e,t,n)}}},Rn={name:"AwsuiTreeNode",componentName:"AwsuiTreeNode",mixins:[ie,Bn],props:{node:{default:function(){return{}}},props:{},renderContent:Function,renderAfterExpand:{type:Boolean,default:!0},showCheckbox:{type:Boolean,default:!1}},components:{AwsuiCollapseTransition:zn,NodeContent:{props:{node:{required:!0}},render:function(e){var t=this.$parent,n=t.tree,i=this.node,r=i.data,o=i.store;return t.renderContent?t.renderContent.call(t._renderProxy,e,{_self:n.$vnode.context,node:i,data:r,store:o}):n.$scopedSlots.default?n.$scopedSlots.default({node:i,data:r}):e("span",{class:"awsui-tree-node__label"},[i.label])}}},data:function(){return{tree:null,expanded:!1,childNodeRendered:!1,oldChecked:null,oldIndeterminate:null}},watch:{"node.indeterminate":function(e){this.handleSelectChange(this.node.checked,e)},"node.checked":function(e){this.handleSelectChange(e,this.node.indeterminate)},"node.expanded":function(e){var t=this;this.$nextTick((function(){return t.expanded=e})),e&&(this.childNodeRendered=!0)}},methods:{handleDragStart:function(e){this.tree.draggable&&this.tree.$emit("tree-node-drag-start",e,this)},handleDragOver:function(e){this.tree.draggable&&(this.tree.$emit("tree-node-drag-over",e,this),e.preventDefault())},handleDrop:function(e){e.preventDefault()},handleDragEnd:function(e){this.tree.draggable&&this.tree.$emit("tree-node-drag-end",e,this)}},created:function(){var e=this.$parent;this.creator(e,"node")}},Vn=Rn,Hn=Object(g["a"])(Vn,On,Tn,!1,null,null,null),Wn=Hn.exports,qn=function(){var e=this,t=this,n=t.$createElement,i=t._self._c||n;return i("div",{directives:[{name:"show",rawName:"v-show",value:t.source.visible,expression:"source.visible"}],ref:"node",staticClass:"awsui-tree-node",class:{"is-expanded":t.expanded,"is-current":t.source.isCurrent,"is-hidden":!t.source.visible,"is-focusable":!t.source.disabled,"is-checked":!t.source.disabled&&t.source.checked},attrs:{role:"treeitem",tabindex:"-1","aria-expanded":t.expanded,"aria-disabled":t.source.disabled,"aria-checked":t.source.checked},on:{click:function(e){return e.stopPropagation(),t.handleClick(e)},contextmenu:function(t){return e.handleContextMenu(t)}}},[i("div",{staticClass:"awsui-tree-node__content"},[i("span",{style:{width:(t.source.level-1)*t.tree.indent+"px"},attrs:{"aria-hidden":"true"}}),i("span",{class:[{"is-leaf":t.source.isLeaf,expanded:!t.source.isLeaf&&t.expanded},"awsui-tree-node__expand-icon awsui-iconfont",t.tree.iconClass?t.tree.iconClass:""],domProps:{innerHTML:t._s(t.tree.icon?t.tree.icon:"&#xe606;")},on:{click:function(e){return e.stopPropagation(),t.handleExpandIconClick(e)}}}),t.showCheckbox?i("awsui-checkbox",{attrs:{indeterminate:t.source.indeterminate,disabled:!!t.source.disabled},on:{change:t.handleCheckChange},nativeOn:{click:function(e){e.stopPropagation()}},model:{value:t.source.checked,callback:function(e){t.$set(t.source,"checked",e)},expression:"source.checked"}}):t._e(),t.source.loading?i("span",{staticClass:"awsui-tree-node__loading-icon el-icon-loading"}):t._e(),i("node-content",{attrs:{node:t.source}})],1)])},Un=[],Kn={name:"AwsuiTreeVirtualNode",componentName:"AwsuiTreeVirtualNode",mixins:[ie,Bn],props:{source:{default:function(){return{}}},renderContent:Function,showCheckbox:{type:Boolean,default:!1}},components:{NodeContent:{props:{node:{required:!0}},render:function(e){var t=this.$parent,n=t.tree,i=this.node,r=i.data,o=i.store;return t.renderContent?t.renderContent.call(t._renderProxy,e,{_self:n.$vnode.context,node:i,data:r,store:o}):n.$scopedSlots.default?n.$scopedSlots.default({node:i,data:r}):e("span",{class:"awsui-tree-node__label"},[i.label])}}},data:function(){return{tree:null,expanded:!1,childNodeRendered:!1,oldChecked:null,oldIndeterminate:null}},watch:{"source.indeterminate":function(e){this.handleSelectChange(this.source.checked,e)},"source.checked":function(e){this.handleSelectChange(e,this.source.indeterminate)},"source.expanded":function(e){var t=this;this.$nextTick((function(){return t.expanded=e})),e&&(this.childNodeRendered=!0)}},created:function(){var e=this.$parent.$parent.$parent;this.creator(e,"source")}},Gn=Kn,Yn=Object(g["a"])(Gn,qn,Un,!1,null,null,null),Xn=Yn.exports,Zn=(n("3410"),{el:{colorpicker:{confirm:"确定",clear:"清空"},datepicker:{now:"此刻",today:"今天",cancel:"取消",clear:"清空",confirm:"确定",selectDate:"选择日期",selectTime:"选择时间",startDate:"开始日期",startTime:"开始时间",endDate:"结束日期",endTime:"结束时间",prevYear:"前一年",nextYear:"后一年",prevMonth:"上个月",nextMonth:"下个月",year:"年",month1:"1 月",month2:"2 月",month3:"3 月",month4:"4 月",month5:"5 月",month6:"6 月",month7:"7 月",month8:"8 月",month9:"9 月",month10:"10 月",month11:"11 月",month12:"12 月",weeks:{sun:"日",mon:"一",tue:"二",wed:"三",thu:"四",fri:"五",sat:"六"},months:{jan:"一月",feb:"二月",mar:"三月",apr:"四月",may:"五月",jun:"六月",jul:"七月",aug:"八月",sep:"九月",oct:"十月",nov:"十一月",dec:"十二月"}},select:{loading:"加载中",noMatch:"无匹配数据",noData:"无数据",placeholder:"请选择"},cascader:{noMatch:"无匹配数据",loading:"加载中",placeholder:"请选择",noData:"暂无数据"},pagination:{goto:"前往",pagesize:"条/页",total:"共 {total} 条",pageClassifier:"页"},messagebox:{title:"提示",confirm:"确定",cancel:"取消",error:"输入的数据不合法!"},upload:{deleteTip:"按 delete 键可删除",delete:"删除",preview:"查看图片",continue:"继续上传"},table:{emptyText:"暂无数据",confirmFilter:"筛选",resetFilter:"重置",clearFilter:"全部",sumText:"合计"},tree:{emptyText:"暂无数据"},transfer:{noMatch:"无匹配数据",noData:"无数据",titles:["列表 1","列表 2"],filterPlaceholder:"请输入搜索内容",noCheckedFormat:"共 {total} 项",hasCheckedFormat:"已选 {checked}/{total} 项"},image:{error:"加载失败"},pageHeader:{title:"返回"},popconfirm:{confirmButtonText:"确定",cancelButtonText:"取消"}}}),Qn=n("3c4e"),Jn=n.n(Qn),ei=/(%|)\{([0-9a-zA-Z_]+)\}/g,ti=function(e){function t(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return 1===n.length&&"object"===Object(k["a"])(n[0])&&(n=n[0]),n&&n.hasOwnProperty||(n={}),e.replace(ei,(function(t,i,r,o){var a;return"{"===e[o-1]&&"}"===e[o+t.length]?r:(a=le(n,r)?n[r]:null,null===a||void 0===a?"":a)}))}return t},ni=ti(oe.a),ii=Zn,ri=!1,oi=function(){var e=Object.getPrototypeOf(this||oe.a).$t;if("function"===typeof e&&oe.a.locale)return ri||(ri=!0,oe.a.locale(oe.a.config.lang,Jn()(ii,oe.a.locale(oe.a.config.lang)||{},{clone:!0}))),e.apply(this,arguments)},ai=function(e,t){var n=oi.apply(this,arguments);if(null!==n&&void 0!==n)return n;for(var i=e.split("."),r=ii,o=0,a=i.length;o<a;o++){var s=i[o];if(n=r[s],o===a-1)return ni(n,t);if(!n)return"";r=n}return""},si={name:"AwsuiTree",mixins:[ie],components:{VirtualList:Sn.a,AwsuiTreeNode:Wn},data:function(){return{store:null,root:null,currentNode:null,treeItems:null,checkboxItems:[],dragState:{showDropIndicator:!1,draggingNode:null,dropNode:null,allowDrop:!0},itemComponent:Xn}},props:{data:{type:Array},emptyText:{type:String,default:function(){return ai("awsui.tree.emptyText")}},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkDescendants:{type:Boolean,default:!1},autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:Array,defaultExpandedKeys:Array,currentNodeKey:[String,Number],renderContent:Function,showCheckbox:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},allowDrag:Function,allowDrop:Function,props:{default:function(){return{children:"children",label:"label",disabled:"disabled"}}},lazy:{type:Boolean,default:!1},highlightCurrent:Boolean,load:Function,filterNodeMethod:Function,accordion:Boolean,indent:{type:Number,default:18},icon:String,iconClass:String,height:{type:Number,default:0},extraLine:{type:Number,default:8}},computed:{children:{set:function(e){this.data=e},get:function(){return this.data}},treeItemArray:function(){return Array.prototype.slice.call(this.treeItems)},isEmpty:function(){var e=this.root.childNodes;return!e||0===e.length||e.every((function(e){var t=e.visible;return!t}))},visibleList:function(){return this.flattenTree(this.root.childNodes)}},watch:{defaultCheckedKeys:function(e){this.store.setDefaultCheckedKey(e)},defaultExpandedKeys:function(e){this.store.defaultExpandedKeys=e,this.store.setDefaultExpandedKeys(e)},data:function(e){this.store.setData(e)},checkboxItems:function(e){Array.prototype.forEach.call(e,(function(e){e.setAttribute("tabindex",-1)}))},checkStrictly:function(e){this.store.checkStrictly=e}},methods:{flattenTree:function(e){var t=this;return e.reduce((function(e,n){return e.push(n),n.expanded&&n.childNodes.length&&e.push.apply(e,Object(cn["a"])(t.flattenTree(n.childNodes))),e}),[])},filter:function(e){if(!this.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");this.store.filter(e)},getNodeKey:function(e){return gn(this.nodeKey,e.data)},getNodePath:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in getNodePath");var t=this.store.getNode(e);if(!t)return[];var n=[t.data],i=t.parent;while(i&&i!==this.root)n.push(i.data),i=i.parent;return n.reverse()},getCheckedNodes:function(e,t){return this.store.getCheckedNodes(e,t)},getCheckedKeys:function(e){return this.store.getCheckedKeys(e)},getCurrentNode:function(){var e=this.store.getCurrentNode();return e?e.data:null},getCurrentKey:function(){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in getCurrentKey");var e=this.getCurrentNode();return e?e[this.nodeKey]:null},setCheckedNodes:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedNodes");this.store.setCheckedNodes(e,t)},setCheckedKeys:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedKeys");this.store.setCheckedKeys(e,t)},setChecked:function(e,t,n){this.store.setChecked(e,t,n)},getHalfCheckedNodes:function(){return this.store.getHalfCheckedNodes()},getHalfCheckedKeys:function(){return this.store.getHalfCheckedKeys()},setCurrentNode:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentNode");this.store.setUserCurrentNode(e)},setCurrentKey:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentKey");this.store.setCurrentNodeKey(e)},getNode:function(e){return this.store.getNode(e)},remove:function(e){this.store.remove(e)},append:function(e,t){this.store.append(e,t)},insertBefore:function(e,t){this.store.insertBefore(e,t)},insertAfter:function(e,t){this.store.insertAfter(e,t)},handleNodeExpand:function(e,t,n){this.broadcast("ElTreeNode","tree-node-expand",t),this.$emit("node-expand",e,t,n)},updateKeyChildren:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in updateKeyChild");this.store.updateChildren(e,t)},initTabIndex:function(){this.treeItems=this.$el.querySelectorAll(".is-focusable[role=treeitem]"),this.checkboxItems=this.$el.querySelectorAll("input[type=checkbox]");var e=this.$el.querySelectorAll(".is-checked[role=treeitem]");e.length?e[0].setAttribute("tabindex",0):this.treeItems[0]&&this.treeItems[0].setAttribute("tabindex",0)},handleKeydown:function(e){var t=e.target;if(-1!==t.className.indexOf("awsui-tree-node")){var n=e.keyCode;this.treeItems=this.$el.querySelectorAll(".is-focusable[role=treeitem]");var i,r=this.treeItemArray.indexOf(t);[38,40].indexOf(n)>-1&&(e.preventDefault(),i=38===n?0!==r?r-1:0:r<this.treeItemArray.length-1?r+1:0,this.treeItemArray[i].focus()),[37,39].indexOf(n)>-1&&(e.preventDefault(),t.click());var o=t.querySelector('[type="checkbox"]');[13,32].indexOf(n)>-1&&o&&(e.preventDefault(),o.click())}}},created:function(){var e=this;this.isTree=!0,this.store=new kn({key:this.nodeKey,data:this.data,lazy:this.lazy,props:this.props,load:this.load,currentNodeKey:this.currentNodeKey,checkStrictly:this.checkStrictly,checkDescendants:this.checkDescendants,defaultCheckedKeys:this.defaultCheckedKeys,defaultExpandedKeys:this.defaultExpandedKeys,autoExpandParent:this.autoExpandParent,defaultExpandAll:this.defaultExpandAll,filterNodeMethod:this.filterNodeMethod}),this.root=this.store.root;var t=this.dragState;this.$on("tree-node-drag-start",(function(n,i){if("function"===typeof e.allowDrag&&!e.allowDrag(i.node))return n.preventDefault(),!1;n.dataTransfer.effectAllowed="move";try{n.dataTransfer.setData("text/plain","")}catch(r){console.log(r)}t.draggingNode=i,e.$emit("node-drag-start",i.node,n)})),this.$on("tree-node-drag-over",(function(n,i){var r=vn(n.target,"ElTreeNode"),o=t.dropNode;o&&o!==r&&$n(o.$el,"is-drop-inner");var a=t.draggingNode;if(a&&r){var s=!0,l=!0,c=!0,u=!0;"function"===typeof e.allowDrop&&(s=e.allowDrop(a.node,r.node,"prev"),u=l=e.allowDrop(a.node,r.node,"inner"),c=e.allowDrop(a.node,r.node,"next")),n.dataTransfer.dropEffect=l?"move":"none",(s||l||c)&&o!==r&&(o&&e.$emit("node-drag-leave",a.node,o.node,n),e.$emit("node-drag-enter",a.node,r.node,n)),(s||l||c)&&(t.dropNode=r),r.node.nextSibling===a.node&&(c=!1),r.node.previousSibling===a.node&&(s=!1),r.node.contains(a.node,!1)&&(l=!1),(a.node===r.node||a.node.contains(r.node))&&(s=!1,l=!1,c=!1);var d,h=r.$el.getBoundingClientRect(),f=e.$el.getBoundingClientRect(),p=s?l?.25:c?.45:1:-1,m=c?l?.75:s?.55:0:1,g=-9999,v=n.clientY-h.top;d=v<h.height*p?"before":v>h.height*m?"after":l?"inner":"none";var b=r.$el.querySelector(".awsui-tree-node__expand-icon").getBoundingClientRect(),y=e.$refs.dropIndicator;"before"===d?g=b.top-f.top:"after"===d&&(g=b.bottom-f.top),y.style.top=g+"px",y.style.left=b.right-f.left+"px","inner"===d?Pn(r.$el,"is-drop-inner"):$n(r.$el,"is-drop-inner"),t.showDropIndicator="before"===d||"after"===d,t.allowDrop=t.showDropIndicator||u,t.dropType=d,e.$emit("node-drag-over",a.node,r.node,n)}})),this.$on("tree-node-drag-end",(function(n){var i=t.draggingNode,r=t.dropType,o=t.dropNode;if(n.preventDefault(),n.dataTransfer.dropEffect="move",i&&o){var a={data:i.node.data};"none"!==r&&i.node.remove(),"before"===r?o.node.parent.insertBefore(a,o.node):"after"===r?o.node.parent.insertAfter(a,o.node):"inner"===r&&o.node.insertChild(a),"none"!==r&&e.store.registerNode(a),$n(o.$el,"is-drop-inner"),e.$emit("node-drag-end",i.node,o.node,r,n),"none"!==r&&e.$emit("node-drop",i.node,o.node,r,n)}i&&!o&&e.$emit("node-drag-end",i.node,null,r,n),t.showDropIndicator=!1,t.draggingNode=null,t.dropNode=null,t.allowDrop=!0}))},mounted:function(){this.initTabIndex(),this.$el.addEventListener("keydown",this.handleKeydown)},updated:function(){this.treeItems=this.$el.querySelectorAll("[role=treeitem]"),this.checkboxItems=this.$el.querySelectorAll("input[type=checkbox]")}},li=si,ci=(n("69d2"),Object(g["a"])(li,sn,ln,!1,null,null,null)),ui=ci.exports;ui.install=function(e){e.component(ui.name,ui)};var di=ui,hi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("section",{staticClass:"awsui-layout",class:{"is-vertical":e.isVertical}},[e._t("default")],2)},fi=[],pi={name:"AwsuiLayout",componentName:"AwsuiLayout",props:{direction:String},computed:{isVertical:function(){return"vertical"===this.direction||"horizontal"!==this.direction&&!(!this.$slots||!this.$slots.default)&&this.$slots.default.some((function(e){var t=e.componentOptions&&e.componentOptions.tag;return"awsui-header"===t||"awsui-footer"===t}))}}},mi=pi,gi=(n("e2ae"),Object(g["a"])(mi,hi,fi,!1,null,null,null)),vi=gi.exports;vi.install=function(e){e.component(vi.name,vi)};var bi=vi,yi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("header",{staticClass:"awsui-header",style:{height:e.height}},[e._t("default")],2)},wi=[],xi={name:"AwsuiHeader",componentName:"AwsuiHeader",props:{height:{type:String,default:"60px"}}},_i=xi,ki=(n("e501"),Object(g["a"])(_i,yi,wi,!1,null,"5555ed76",null)),Ci=ki.exports;Ci.install=function(e){e.component(Ci.name,Ci)};var Si=Ci,Oi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("aside",{staticClass:"awsui-aside",style:{width:e.width}},[e._t("default")],2)},Ti=[],Ei={name:"AwsuiAside",componentName:"AwsuiAside",props:{width:{type:String,default:"300px"}}},Di=Ei,Mi=(n("606f"),Object(g["a"])(Di,Oi,Ti,!1,null,"2c81d596",null)),Ai=Mi.exports;Ai.install=function(e){e.component(Ai.name,Ai)};var Ni=Ai,Ii=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("main",{staticClass:"awsui-main"},[e._t("default")],2)},Li=[],Pi={name:"AwsuiMain",componentName:"AwsuiMain"},$i=Pi,Fi=(n("05d3"),Object(g["a"])($i,Ii,Li,!1,null,"2a6a0f7c",null)),ji=Fi.exports;ji.install=function(e){e.component(ji.name,ji)};var zi=ji,Bi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("footer",{staticClass:"awsui-footer",style:{height:e.height}},[e._t("default")],2)},Ri=[],Vi={name:"AwsuiFooter",componentName:"AwsuiFooter",props:{height:{type:String,default:"60px"}}},Hi=Vi,Wi=(n("c682"),Object(g["a"])(Hi,Bi,Ri,!1,null,"49a58776",null)),qi=Wi.exports;qi.install=function(e){e.component(qi.name,qi)};var Ui=qi,Ki=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("form",{staticClass:"awsui-form",class:[e.labelPosition?"awsui-form--label-"+e.labelPosition:"",{"awsui-form--inline":e.inline}],attrs:{disabled:e.disabled}},[e._t("default")],2)},Gi=[],Yi={name:"AwsuiForm",componentName:"AwsuiForm",provide:function(){return{awsuiForm:this}},props:{model:Object,rules:Object,labelPosition:String,labelWidth:String,labelSuffix:{type:String,default:""},inline:Boolean,inlineMessage:Boolean,statusIcon:Boolean,showMessage:{type:Boolean,default:!0},size:String,disabled:{type:Boolean,default:!1},validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:{type:Boolean,default:!1}},watch:{rules:function(){this.fields.forEach((function(e){e.removeValidateEvents(),e.addValidateEvents()})),this.validateOnRuleChange&&this.validate((function(){}))}},computed:{autoLabelWidth:function(){if(!this.potentialLabelWidthArr.length)return 0;var e=Math.max.apply(Math,Object(cn["a"])(this.potentialLabelWidthArr));return e?"".concat(e,"px"):""}},data:function(){return{fields:[],potentialLabelWidthArr:[]}},created:function(){var e=this;this.$on("awsui.form.addField",(function(t){t&&e.fields.push(t)})),this.$on("awsui.form.removeField",(function(t){t.prop&&e.fields.splice(e.fields.indexOf(t),1)}))},methods:{resetFields:function(){this.model?this.fields.forEach((function(e){e.resetField()})):console.warn("[Awsui Warn][Form]model is required for resetFields to work.")},clearValidate:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=e.length?"string"===typeof e?this.fields.filter((function(t){return e===t.prop})):this.fields.filter((function(t){return e.indexOf(t.prop)>-1})):this.fields;t.forEach((function(e){e.clearValidate()}))},validate:function(e){var t=this;if(this.model){var n;"function"!==typeof e&&window.Promise&&(n=new window.Promise((function(t,n){e=function(e){e?t(e):n(e)}})));var i=!0,r=0;0===this.fields.length&&e&&e(!0);var o={};return this.fields.forEach((function(n){n.validate("",(function(n,a){n&&(i=!1),o=fn({},o,a),"function"===typeof e&&++r===t.fields.length&&e(i,o)}))})),n||void 0}console.warn("[Awsui Warn][Form]model is required for validate to work!")},validateField:function(e,t){e=[].concat(e);var n=this.fields.filter((function(t){return-1!==e.indexOf(t.prop)}));n.length?n.forEach((function(e){e.validate("",t)})):console.warn("[Awsui Warn]please pass correct props!")},getLabelWidthIndex:function(e){var t=this.potentialLabelWidthArr.indexOf(e);if(-1===t)throw new Error("[AwsuiForm]unpected width ",e);return t},registerLabelWidth:function(e,t){if(e&&t){var n=this.getLabelWidthIndex(t);this.potentialLabelWidthArr.splice(n,1,e)}else e&&this.potentialLabelWidthArr.push(e)},deregisterLabelWidth:function(e){var t=this.getLabelWidthIndex(e);this.potentialLabelWidthArr.splice(t,1)}}},Xi=Yi,Zi=(n("eb50"),Object(g["a"])(Xi,Ki,Gi,!1,null,null,null)),Qi=Zi.exports;Qi.install=function(e){e.component(Qi.name,Qi)};var Ji,er,tr=Qi,nr=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"awsui-form-item",class:[{"awsui-form-item--feedback":e.awsuiForm&&e.awsuiForm.statusIcon,"is-error":"error"===e.validateState,"is-validating":"validating"===e.validateState,"is-success":"success"===e.validateState,"is-required":e.isRequired||e.required,"is-no-asterisk":e.awsuiForm&&e.awsuiForm.hideRequiredAsterisk},e.sizeClass?"awsui-form-item--"+e.sizeClass:""]},[n("label-wrap",{attrs:{"is-auto-width":e.labelStyle&&"auto"===e.labelStyle.width,"update-all":"auto"===e.form.labelWidth}},[e.label||e.$slots.label?n("label",{class:{"awsui-form-item__label":!0,"awsui-form-item__positionTop":"top"===this.labelPosition},style:e.labelStyle,attrs:{for:e.labelFor}},[e._t("label",[e._v(e._s(e.label+e.form.labelSuffix))])],2):e._e()]),n("div",{staticClass:"awsui-form-item__content",style:e.contentStyle},[e._t("default"),n("transition",{attrs:{name:"awsui-zoom-in-top"}},["error"===e.validateState&&e.showMessage&&e.form.showMessage?e._t("error",[n("div",{staticClass:"awsui-form-item__error",class:{"awsui-form-item__error--inline":"boolean"===typeof e.inlineMessage?e.inlineMessage:e.awsuiForm&&e.awsuiForm.inlineMessage||!1}},[e._v(" "+e._s(e.validateMessage)+" ")])],{error:e.validateMessage}):e._e()],2)],2)],1)},ir=[],rr=n("2a95"),or={props:{isAutoWidth:Boolean,updateAll:Boolean},inject:["awsuiForm","awsuiFormItem"],render:function(){var e=arguments[0],t=this.$slots.default;if(!t)return null;if(this.isAutoWidth){var n=this.elForm.autoLabelWidth,i={};if(n&&"auto"!==n){var r=parseInt(n,10)-this.computedWidth;r&&(i.marginLeft=r+"px")}return e("div",{class:"awsui-form-item__labawsui-wrap",style:i},[t])}return t[0]},methods:{getLabelWidth:function(){if(this.$el&&this.$el.firstElementChild){var e=window.getComputedStyle(this.$el.firstElementChild).width;return Math.ceil(parseFloat(e))}return 0},updateLabelWidth:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"update";this.$slots.default&&this.isAutoWidth&&this.$el.firstElementChild&&("update"===e?this.computedWidth=this.getLabelWidth():"remove"===e&&this.elForm.deregisterLabelWidth(this.computedWidth))}},watch:{computedWidth:function(e,t){this.updateAll&&(this.elForm.registerLabelWidth(e,t),this.elFormItem.updateComputedLabelWidth(e))}},data:function(){return{computedWidth:0}},mounted:function(){this.updateLabelWidth("update")},updated:function(){this.updateLabelWidth("update")},beforeDestroy:function(){this.updateLabelWidth("remove")}},ar=or,sr=Object(g["a"])(ar,Ji,er,!1,null,null,null),lr=sr.exports,cr={name:"AwsuiFormItem",componentName:"AwsuiFormItem",mixins:[ie],provide:function(){return{awsuiFormItem:this}},inject:["awsuiForm"],props:{label:String,labelWidth:String,prop:String,required:{type:Boolean,default:void 0},rules:[Object,Array],error:String,labelPosition:String,validateStatus:String,for:String,inlineMessage:{type:[String,Boolean],default:""},showMessage:{type:Boolean,default:!0},size:String},components:{LabelWrap:lr},watch:{error:{immediate:!0,handler:function(e){this.validateMessage=e,this.validateState=e?"error":""}},validateStatus:function(e){this.validateState=e}},computed:{labelFor:function(){return this.for||this.prop},labelStyle:function(){var e={};if("top"===this.form.labelPosition||"top"===this.labelPosition)return e;var t=this.labelWidth||this.form.labelWidth;return t&&(e.width=t),e},contentStyle:function(){var e={},t=this.label;if("top"===this.labelPosition)return e;if("top"===this.form.labelPosition||this.form.inline)return e;if(!t&&!this.labelWidth&&this.isNested)return e;var n=this.labelWidth||this.form.labelWidth;return"auto"===n?"auto"===this.labelWidth?e.marginLeft=this.computedLabelWidth:"auto"===this.form.labelWidth&&(e.marginLeft=this.awsuiForm.autoLabelWidth):e.marginLeft=n,e},form:function(){var e=this.$parent,t=e.$options.componentName,n=this;while("AwsuiForm"!==t)"AwsuiFormItem"===t&&(n.isNested=!0),e=e.$parent,t=e.$options.componentName;return e},fieldValue:function(){var e=this.form.model;if(e&&this.prop){var t=this.prop;return-1!==t.indexOf(":")&&(t=t.replace(/:/,".")),ce(e,t,!0).v}},isRequired:function(){var e=this.getRules(),t=!1;return e&&e.length&&e.every((function(e){return!e.required||(t=!0,!1)})),t},_formSize:function(){return this.awsuiForm.size},awsuiFormItemSize:function(){return this.size||this._formSize},sizeClass:function(){return this.awsuiFormItemSize||(this.$Awsui||{}).size}},data:function(){return{validateState:"",validateMessage:"",validateDisabled:!1,validator:{},isNested:!1,computedLabelWidth:""}},methods:{validate:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:se;this.validateDisabled=!1;var i=this.getFilteredRule(e);if((!i||0===i.length)&&void 0===this.required)return n(),!0;this.validateState="validating";var r={};i&&i.length>0&&i.forEach((function(e){delete e.trigger})),r[this.prop]=i;var o=new rr["a"](r);o.messages({required:function(e){return"必填"}});var a={};a[this.prop]=this.fieldValue,o.validate(a,{firstFields:!0},(function(e,i){t.validateState=e?"error":"success",t.validateMessage=e?e[0].message:"",n(t.validateMessage,i),t.awsuiForm&&t.awsuiForm.$emit("validate",t.prop,!e,t.validateMessage||null)}))},clearValidate:function(){this.validateState="",this.validateMessage="",this.validateDisabled=!1},resetField:function(){var e=this;this.validateState="",this.validateMessage="";var t=this.form.model,n=this.fieldValue,i=this.prop;-1!==i.indexOf(":")&&(i=i.replace(/:/,"."));var r=ce(t,i,!0);this.validateDisabled=!0,Array.isArray(n)?r.o[r.k]=[].concat(this.initialValue):r.o[r.k]=this.initialValue,this.$nextTick((function(){e.validateDisabled=!1})),this.broadcast("AwsuiTimeSelect","fieldReset",this.initialValue)},getRules:function(){var e=this.form.rules,t=this.rules,n=void 0!==this.required?{required:!!this.required}:[],i=ce(e,this.prop||"");return e=e?i.o[this.prop||""]||i.v:[],[].concat(t||e||[]).concat(n)},getFilteredRule:function(e){var t=this.getRules();return t.filter((function(t){return!t.trigger||""===e||(Array.isArray(t.trigger)?t.trigger.indexOf(e)>-1:t.trigger===e)})).map((function(e){return fn({},e)}))},onFieldBlur:function(){this.validate("blur")},onFieldChange:function(){this.validateDisabled?this.validateDisabled=!1:this.validate("change")},updateComputedLabelWidth:function(e){this.computedLabelWidth=e?"".concat(e,"px"):""},addValidateEvents:function(){var e=this.getRules();(e.length||void 0!==this.required)&&(this.$on("awsui.form.blur",this.onFieldBlur),this.$on("awsui.form.change",this.onFieldChange))},removeValidateEvents:function(){this.$off()}},mounted:function(){if(this.prop){this.dispatch("AwsuiForm","awsui.form.addField",[this]);var e=this.fieldValue;Array.isArray(e)&&(e=[].concat(e)),Object.defineProperty(this,"initialValue",{value:e}),this.addValidateEvents()}},beforeDestroy:function(){this.dispatch("AwsuiForm","awsui.form.removeField",[this])}},ur=cr,dr=Object(g["a"])(ur,nr,ir,!1,null,null,null),hr=dr.exports;hr.install=function(e){e.component(hr.name,hr)};var fr=hr,pr=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{ref:"downselect",staticClass:"awsui-down-select",style:e.style},[e._t("default"),e.tips?n("div",{staticStyle:{color:"#F56C6C","padding-left":"5px","font-size":"12px","line-height":"1"}},[e._v(e._s(e.tips)+" ")]):e._e()],2)},mr=[],gr={name:"AwsuiDownSelect",props:{width:{type:String,default:"350"},direction:{type:String,default:"right"},tips:{type:String,default:""}},watch:{tips:{deep:!0,handler:function(e){console.log(e)}}},computed:{style:function(){var e={};return this.width&&(-1!=this.width.indexOf("%")?e.width=this.width:e.width=this.width+"px"),e}},mounted:function(){this.getinit()},methods:{getinit:function(){for(var e=this.$refs.downselect.querySelectorAll(".awsui-down-select-item__wrap"),t=0;t<e.length;t++)"right"==this.direction&&(e[t].style.zIndex=100-t,e[t].style.marginLeft="-14px",e[0].style.marginLeft="0",t!=e.length-1&&e[t].classList.add("awsui-down-select-bg-right"),0!=t&&e[t].classList.add("awsui-down-select-border-left")),"left"==this.direction&&(e[t].style.zIndex=t,e[t].style.marginRight="-14px",0!=t&&e[t].classList.add("awsui-down-select-bg-left"),t!=e.length-1&&e[t].classList.add("awsui-down-select-border-right"))}}},vr=gr,br=(n("0ade"),Object(g["a"])(vr,pr,mr,!1,null,null,null)),yr=br.exports;yr.install=function(e){e.component(yr.name,yr)};var wr=yr,xr=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{ref:"pronbit",staticClass:"awsui-down-select-item__wrap",class:{prohibits:e.prohibit},style:e.itemstyle},[n("span",{staticClass:"awsui-down-select-item__select",on:{mouseover:e.triggerOption,mouseleave:e.leaveOption}},[n("div",{staticClass:"awsui-down-select-item__select-content"},[e._v(e._s(e.sCon)+" "),"--"!==e.sCon?n("i",{staticClass:"awsui-iconfont",staticStyle:{"font-size":"12px",position:"absolute",right:"10px"}},[e._v("")]):e._e()])]),n("transition",{attrs:{name:"fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.optionwrapper,expression:"optionwrapper"}],ref:"wrapper",staticClass:"awsui-down-select-item__list",style:e.style,on:{mouseover:e.triggerOption,mouseleave:e.leaveOption}},[e._t("default"),e.ShowNotes?n("p",{staticStyle:{"text-align":"center",color:"#999","font-size":"14px",margin:"0",padding:"10px 0"}},[e._v("无数据")]):e._e(),"checkbox"==e.type?n("div",[n("div",{staticClass:"awsui-down-select-title"},[e._v(e._s(e.title))]),n("el-checkbox-group",{on:{change:e.change},model:{value:e.checkList,callback:function(t){e.checkList=t},expression:"checkList"}},e._l(e.options,(function(t){return n("el-checkbox",{key:t.label,attrs:{label:t.value,checked:t.checked,disabled:t.disabled}},[e._v(e._s(t.label)+" ")])})),1)],1):"radio"==e.type?n("div",e._l(e.options,(function(t,i){return n("div",{key:i,staticClass:"awsui-down-select-item_option-item",class:{hover:i===e.selectindex},on:{click:function(n){return e.choose(t,n,i)}}},[n("span",{domProps:{innerHTML:e._s(t.label)}}),n("i",{directives:[{name:"show",rawName:"v-show",value:e.selectindex===i,expression:"selectindex===index"}],staticClass:"awsui-iconfont",staticStyle:{"font-size":"12px",position:"absolute",right:"8px"}},[e._v("")])])})),0):e._e()],2)])],1)},_r=[],kr={name:"AwsuiDownSelectItem",props:{value:[String,Boolean,Number,Array],type:{type:String,default:"default"},prohibit:{type:Boolean,default:!1},width:{type:String,default:"200"},itemwidth:{type:String,default:"120"},height:{type:String},maxheight:{type:String},title:{type:String,default:"勾选跳转范围"},options:{type:Array},selectContent:{type:String,default:"请选择"}},data:function(){return{wrapperheight:"",selectindex:-1,ShowNotes:!1,optionwrapper:!0,checkList:[],sCon:""}},watch:{value:function(){this.init()},options:function(){0==this.options.length?this.ShowNotes=!0:this.ShowNotes=!1}},mounted:function(){var e=this;this.wrapperheight=this.$refs.wrapper.offsetHeight,this.optionwrapper=!1,this.init(),this.$nextTick((function(){var t=document.querySelector("body");t.append?t.append(e.$refs.wrapper):t.appendChild(e.$refs.wrapper)}))},computed:{style:function(){var e={};return this.width&&(e.width=this.width+"px"),this.height&&(e.height=this.height+"px"),this.maxheight&&(e.maxHeight=this.maxheight+"px"),e},itemstyle:function(){var e={};return this.itemwidth&&(-1!=this.itemwidth.indexOf("%")?e.width=this.itemwidth:e.width=this.itemwidth+"px"),e}},methods:{init:function(){var e=this;if("radio"===this.type){if(0==this.options.length?this.ShowNotes=!0:this.ShowNotes=!1,""!==this.value||!1===this.value||!0===this.value)return this.options.filter((function(t,n){t.value==e.value&&(e.selectindex=n,e.sCon=t.label,e.$emit("input",e.value))})),!1;""==this.value&&(this.selectindex=-1,this.sCon=this.selectContent,this.$emit("input",this.value))}if("checkbox"===this.type){0==this.options.length?this.ShowNotes=!0:this.ShowNotes=!1,this.checkList=this.value;var t=[];this.options.filter((function(n){e.checkList.filter((function(e){n.value==e&&t.push(n.label)}))})),0==t.length?this.sCon=this.selectContent:this.sCon=t.join(","),this.$emit("input",this.checkList)}},triggerOption:function(){if(1==this.prohibit)return!1;this.optionwrapper=!0;var e=document.querySelector("body").offsetHeight-(document.querySelector("body").offsetHeight-this.$refs.pronbit.getBoundingClientRect().top);e-this.wrapperheight>0?(this.$refs.wrapper.style.left=this.$refs.pronbit.getBoundingClientRect().left+"px",this.$refs.wrapper.style.bottom=document.querySelector("body").offsetHeight-this.$refs.pronbit.getBoundingClientRect().top+"px",this.$refs.wrapper.style.top="initial"):(this.$refs.wrapper.style.left=this.$refs.pronbit.getBoundingClientRect().left+"px",this.$refs.wrapper.style.top=e+24+"px",this.$refs.wrapper.style.bottom="initial")},change:function(e){var t=[];this.options.filter((function(n){e.filter((function(e){n.value==e&&t.push(n.label)}))})),e.length>0?this.sCon=t.join():this.sCon=this.selectContent,this.$emit("input",e),this.$emit("click",e)},choose:function(e,t,n){this.selectindex=n,this.sCon=e.label,this.$emit("input",e.value),this.$emit("click",e.value),this.optionwrapper=!1},leaveOption:function(){this.optionwrapper=!1}}},Cr=kr,Sr=(n("fc21"),n("a4f7"),Object(g["a"])(Cr,xr,_r,!1,null,null,null)),Or=Sr.exports;Or.install=function(e){e.component(Or.name,Or)};var Tr=Or;function Er(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Dr=n("2638"),Mr=n.n(Dr),Ar=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"awsui-tabs__active-bar",class:"is-"+e.rootTabs.tabPosition,style:e.barStyle})},Nr=[],Ir={name:"TabBar",props:{tabs:Array},inject:["rootTabs"],computed:{barStyle:{get:function(){var e=this,t={},n=0,i=0,r=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height",o="width"===r?"x":"y",a=function(e){return e.toLowerCase().replace(/( |^)[a-z]/g,(function(e){return e.toUpperCase()}))};this.tabs.every((function(t,o){var s=de(e.$parent.$refs.tabs||[],(function(e){return e.id.replace("tab-","")===t.paneName}));if(!s)return!1;if(t.active){i=s["client".concat(a(r))];var l=window.getComputedStyle(s);return"width"===r&&e.tabs.length>1&&(i-=parseFloat(l.paddingLeft)+parseFloat(l.paddingRight)),"width"===r&&(n+=parseFloat(l.paddingLeft)),!1}return n+=s["client".concat(a(r))],!0}));var s="translate".concat(a(o),"(").concat(n,"px)");return t[r]=i+"px",t.transform=s,t.msTransform=s,t.webkitTransform=s,t}}}},Lr=Ir,Pr=Object(g["a"])(Lr,Ar,Nr,!1,null,null,null),$r=Pr.exports,Fr=n("6dd8"),jr="undefined"===typeof window,zr=function(e){var t,n=bt(e);try{for(n.s();!(t=n.n()).done;){var i=t.value,r=i.target.__resizeListeners__||[];r.length&&r.forEach((function(e){e()}))}}catch(o){n.e(o)}finally{n.f()}},Br=function(e,t){jr||(e.__resizeListeners__||(e.__resizeListeners__=[],e.__ro__=new Fr["default"](zr),e.__ro__.observe(e)),e.__resizeListeners__.push(t))},Rr=function(e,t){e&&e.__resizeListeners__&&(e.__resizeListeners__.splice(e.__resizeListeners__.indexOf(t),1),e.__resizeListeners__.length||e.__ro__.disconnect())};function Vr(){}var Hr,Wr,qr,Ur,Kr=function(e){return e.toLowerCase().replace(/( |^)[a-z]/g,(function(e){return e.toUpperCase()}))},Gr={name:"TabNav",components:{TabBar:$r},inject:["rootTabs"],props:{panes:Array,currentName:String,editable:Boolean,onTabClick:{type:Function,default:Vr},onTabRemove:{type:Function,default:Vr},type:String,stretch:Boolean},data:function(){return{scrollable:!1,navOffset:0,isFocus:!1,focusable:!0}},computed:{navStyle:function(){var e=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"X":"Y";return{transform:"translate".concat(e,"(-").concat(this.navOffset,"px)")}},sizeName:function(){return-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height"}},methods:{scrollPrev:function(){var e=this.$refs.navScroll["offset".concat(Kr(this.sizeName))],t=this.navOffset;if(t){var n=t>e?t-e:0;this.navOffset=n}},scrollNext:function(){var e=this.$refs.nav["offset".concat(Kr(this.sizeName))],t=this.$refs.navScroll["offset".concat(Kr(this.sizeName))],n=this.navOffset;if(!(e-n<=t)){var i=e-n>2*t?n+t:e-t;this.navOffset=i}},scrollToActiveTab:function(){if(this.scrollable){var e=this.$refs.nav,t=this.$el.querySelector(".is-active");if(t){var n=this.$refs.navScroll,i=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition),r=t.getBoundingClientRect(),o=n.getBoundingClientRect(),a=i?e.offsetWidth-o.width:e.offsetHeight-o.height,s=this.navOffset,l=s;i?(r.left<o.left&&(l=s-(o.left-r.left)),r.right>o.right&&(l=s+r.right-o.right)):(r.top<o.top&&(l=s-(o.top-r.top)),r.bottom>o.bottom&&(l=s+(r.bottom-o.bottom))),l=Math.max(l,0),this.navOffset=Math.min(l,a)}}},update:function(){if(this.$refs.nav){var e=this.sizeName,t=this.$refs.nav["offset".concat(Kr(e))],n=this.$refs.navScroll["offset".concat(Kr(e))],i=this.navOffset;if(n<t){var r=this.navOffset;this.scrollable=this.scrollable||{},this.scrollable.prev=r,this.scrollable.next=r+n<t,t-r<n&&(this.navOffset=t-n)}else this.scrollable=!1,i>0&&(this.navOffset=0)}},changeTab:function(e){var t,n,i,r=e.keyCode;-1!==[37,38,39,40].indexOf(r)&&(i=e.currentTarget.querySelectorAll("[role=tab]"),n=Array.prototype.indexOf.call(i,e.target),t=37===r||38===r?0===n?i.length-1:n-1:n<i.length-1?n+1:0,i[t].focus(),i[t].click(),this.setFocus())},setFocus:function(){this.focusable&&(this.isFocus=!0)},removeFocus:function(){this.isFocus=!1},visibilityChangeHandler:function(){var e=this,t=document.visibilityState;"hidden"===t?this.focusable=!1:"visible"===t&&setTimeout((function(){e.focusable=!0}),50)},windowBlurHandler:function(){this.focusable=!1},windowFocusHandler:function(){var e=this;setTimeout((function(){e.focusable=!0}),50)}},updated:function(){this.update()},render:function(e){var t=this,n=this.type,i=this.panes,r=this.editable,o=this.stretch,a=this.onTabClick,s=this.onTabRemove,l=this.navStyle,c=this.scrollable,u=this.scrollNext,d=this.scrollPrev,h=this.changeTab,f=this.setFocus,p=this.removeFocus,m=c?[e("span",{class:["awsui-tabs__nav-prev",c.prev?"":"is-disabled"],on:{click:d}},[e("i",{class:"awsui-icon-arrow-left"})]),e("span",{class:["awsui-tabs__nav-next",c.next?"":"is-disabled"],on:{click:u}},[e("i",{class:"awsui-icon-arrow-right"})])]:null,g=this._l(i,(function(n,i){var o,l=n.name||n.index||i,c=n.isClosable||r;n.index="".concat(i);var u=c?e("span",{class:"awsui-iconfont awsui-icon-close",on:{click:function(e){s(n,e)}}},[""]):null,d=n.$slots.label||n.label,h=n.active?0:-1;return e("div",{class:(o={"awsui-tabs__item":!0},Er(o,"is-".concat(t.rootTabs.tabPosition),!0),Er(o,"is-active",n.active),Er(o,"is-disabled",n.disabled),Er(o,"is-closable",c),Er(o,"is-focus",t.isFocus),o),attrs:{id:"tab-".concat(l),"aria-controls":"pane-".concat(l),role:"tab","aria-selected":n.active,tabindex:h},key:"tab-".concat(l),ref:"tabs",refInFor:!0,on:{focus:function(){f()},blur:function(){p()},click:function(e){p(),a(n,l,e)},keydown:function(e){!c||46!==e.keyCode&&8!==e.keyCode||s(n,e)}}},[d,u])}));return e("div",{class:["awsui-tabs__nav-wrap",c?"is-scrollable":"","is-".concat(this.rootTabs.tabPosition)]},[m,e("div",{class:["awsui-tabs__nav-scroll"],ref:"navScroll"},[e("div",{class:["awsui-tabs__nav","is-".concat(this.rootTabs.tabPosition),o&&-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"is-stretch":""],ref:"nav",style:l,attrs:{role:"tablist"},on:{keydown:h}},[n?null:e("tab-bar",{attrs:{tabs:i}}),g])])])},mounted:function(){var e=this;Br(this.$el,this.update),document.addEventListener("visibilitychange",this.visibilityChangeHandler),window.addEventListener("blur",this.windowBlurHandler),window.addEventListener("focus",this.windowFocusHandler),setTimeout((function(){e.scrollToActiveTab()}),0)},beforeDestroy:function(){this.$el&&this.update&&Rr(this.$el,this.update),document.removeEventListener("visibilitychange",this.visibilityChangeHandler),window.removeEventListener("blur",this.windowBlurHandler),window.removeEventListener("focus",this.windowFocusHandler)}},Yr=Gr,Xr=Object(g["a"])(Yr,Hr,Wr,!1,null,null,null),Zr=Xr.exports,Qr={name:"AwsuiTabs",components:{TabNav:Zr},props:{type:String,activeName:String,closable:Boolean,addable:Boolean,value:{},editable:Boolean,tabPosition:{type:String,default:"top"},beforeLeave:Function,stretch:Boolean},provide:function(){return{rootTabs:this}},data:function(){return{currentName:this.value||this.activeName,panes:[]}},watch:{activeName:function(e){this.setCurrentName(e)},value:function(e){this.setCurrentName(e)},currentName:function(e){var t=this;this.$refs.nav&&this.$nextTick((function(){t.$refs.nav.$nextTick((function(e){t.$refs.nav.scrollToActiveTab()}))}))}},methods:{calcPaneInstances:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.$slots.default){var n=this.$slots.default.filter((function(e){return e.tag&&e.componentOptions&&"AwsuiTabPane"===e.componentOptions.Ctor.options.name})),i=n.map((function(e){var t=e.componentInstance;return t})),r=!(i.length===this.panes.length&&i.every((function(t,n){return t===e.panes[n]})));(t||r)&&(this.panes=i)}else 0!==this.panes.length&&(this.panes=[])},handleTabClick:function(e,t,n){e.disabled||(this.setCurrentName(t),this.$emit("tab-click",e,n))},handleTabRemove:function(e,t){e.disabled||(t.stopPropagation(),this.$emit("edit",e.name,"remove"),this.$emit("tab-remove",e.name))},handleTabAdd:function(){this.$emit("edit",null,"add"),this.$emit("tab-add")},setCurrentName:function(e){var t=this,n=function(){t.currentName=e,t.$emit("input",e)};if(this.currentName!==e&&this.beforeLeave){var i=this.beforeLeave(e,this.currentName);i&&i.then?i.then((function(){n(),t.$refs.nav&&t.$refs.nav.removeFocus()}),(function(){})):!1!==i&&n()}else n()}},render:function(e){var t,n=this.type,i=this.handleTabClick,r=this.handleTabRemove,o=this.handleTabAdd,a=this.currentName,s=this.panes,l=this.editable,c=this.addable,u=this.tabPosition,d=this.stretch,h=l||c?e("span",{class:"awsui-tabs__new-tab",on:{click:o,keydown:function(e){13===e.keyCode&&o()}},attrs:{tabindex:"0"}},[e("i",{class:"awsui-iconfont"},[""])]):null,f={props:{currentName:a,onTabClick:i,onTabRemove:r,editable:l,type:n,panes:s,stretch:d},ref:"nav"},p=e("div",{class:["awsui-tabs__header","is-".concat(u)]},[h,e("tab-nav",Mr()([{},f]))]),m=e("div",{class:"awsui-tabs__content"},[this.$slots.default]);return e("div",{class:(t={"awsui-tabs":!0,"awsui-tabs--card":"card"===n},Er(t,"awsui-tabs--".concat(u),!0),Er(t,"awsui-tabs--border-card","border-card"===n),t)},["bottom"!==u?[p,m]:[m,p]])},created:function(){this.currentName||this.setCurrentName("0"),this.$on("tab-nav-update",this.calcPaneInstances.bind(null,!0))},mounted:function(){this.calcPaneInstances()},updated:function(){this.calcPaneInstances()}},Jr=Qr,eo=(n("37bc"),Object(g["a"])(Jr,qr,Ur,!1,null,null,null)),to=eo.exports;to.install=function(e){e.component(to.name,to)};var no=to,io=function(){var e=this,t=e.$createElement,n=e._self._c||t;return!e.lazy||e.loaded||e.active?n("div",{directives:[{name:"show",rawName:"v-show",value:e.active,expression:"active"}],staticClass:"awsui-tab-pane",attrs:{role:"tabpanel","aria-hidden":!e.active,id:"pane-"+e.paneName,"aria-labelledby":"tab-"+e.paneName}},[e._t("default")],2):e._e()},ro=[],oo={name:"AwsuiTabPane",componentName:"AwsuiTabPane",props:{label:String,labelContent:Function,name:String,closable:Boolean,disabled:Boolean,lazy:Boolean},data:function(){return{index:null,loaded:!1}},computed:{isClosable:function(){return this.closable||this.$parent.closable},active:function(){var e=this,t=this.$parent.currentName===(this.name||this.index);return t&&(e.loaded=!0),t},paneName:function(){return this.name||this.index}},updated:function(){this.$parent.$emit("tab-nav-update")}},ao=oo,so=Object(g["a"])(ao,io,ro,!1,null,null,null),lo=so.exports;lo.install=function(e){e.component(lo.name,lo)};var co,uo=lo,ho=n("d2d7"),fo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"msgbox-fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"awsui-message-box__wrapper",attrs:{tabindex:"-1",role:"dialog","aria-modal":"true","aria-label":e.title||"dialog"},on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[n("div",{staticClass:"awsui-message-box",class:[e.customClass,e.center&&"awsui-message-box--center"]},[null!==e.title?n("div",{staticClass:"awsui-message-box__header"},[n("div",{staticClass:"awsui-message-box__title"},[e.icon&&e.center?n("div",{class:["awsui-message-box__status",e.icon]}):e._e(),n("span",[e._v(e._s(e.title))])]),e.showClose?n("button",{staticClass:"awsui-message-box__headerbtn",attrs:{type:"button","aria-label":"Close"},on:{click:function(t){return e.handleAction(e.distinguishCancelAndClose?"close":"cancel")},keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleAction(e.distinguishCancelAndClose?"close":"cancel")}}},[n("i",{staticClass:"awsui-iconfont awsui-message-box__close awsui-icon-close"},[e._v("  ")])]):e._e()]):e._e(),n("div",{staticClass:"awsui-message-box__content"},[n("div",{staticClass:"awsui-message-box__container"},[e.icon&&!e.center&&""!==e.message?n("div",{class:["awsui-message-box__status",e.icon]}):e._e(),""!==e.message?n("div",{staticClass:"awsui-message-box__message"},[e._t("default",[e.dangerouslyUseHTMLString?n("p",{domProps:{innerHTML:e._s(e.message)}}):n("p",[e._v(e._s(e.message))])])],2):e._e()]),n("div",{directives:[{name:"show",rawName:"v-show",value:e.showInput,expression:"showInput"}],staticClass:"awsui-message-box__input"},[n("awsui-input",{ref:"input",attrs:{type:e.inputType,placeholder:e.inputPlaceholder},nativeOn:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleInputEnter(t)}},model:{value:e.inputValue,callback:function(t){e.inputValue=t},expression:"inputValue"}}),n("div",{staticClass:"awsui-message-box__errormsg",style:{visibility:e.editorErrorMessage?"visible":"hidden"}},[e._v(e._s(e.editorErrorMessage)+" ")])],1)]),n("div",{staticClass:"awsui-message-box__btns"},[n("awsui-button",{directives:[{name:"show",rawName:"v-show",value:e.showConfirmButton,expression:"showConfirmButton"}],ref:"confirm",attrs:{type:"primary",loading:e.confirmButtonLoading,round:e.roundButton},on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleAction("confirm")}},nativeOn:{click:function(t){return e.handleAction("confirm")}}},[e._v(" "+e._s(e.confirmButtonText||e.t("awsui.messagebox.confirm"))+" ")]),e.showCancelButton?n("awsui-button",{attrs:{loading:e.cancelButtonLoading,round:e.roundButton},on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleAction("cancel")}},nativeOn:{click:function(t){return e.handleAction("cancel")}}},[e._v(" "+e._s(e.cancelButtonText||e.t("awsui.messagebox.cancel"))+" ")]):e._e()],1)])])])},po=[],mo=!1,go=!1,vo=function(){if(!oe.a.prototype.$isServer){var e=yo.modalDom;return e?mo=!0:(mo=!1,e=document.createElement("div"),yo.modalDom=e,e.addEventListener("touchmove",(function(e){e.preventDefault(),e.stopPropagation()})),e.addEventListener("click",(function(){yo.doOnModalClick&&yo.doOnModalClick()}))),e}},bo={},yo={modalFade:!0,getInstance:function(e){return bo[e]},register:function(e,t){e&&t&&(bo[e]=t)},deregister:function(e){e&&(bo[e]=null,delete bo[e])},nextZIndex:function(){return yo.zIndex++},modalStack:[],doOnModalClick:function(){var e=yo.modalStack[yo.modalStack.length-1];if(e){var t=yo.getInstance(e.id);t&&t.closeOnClickModal&&t.close()}},openModal:function(e,t,n,i,r){if(!oe.a.prototype.$isServer&&e&&void 0!==t){this.modalFade=r;for(var o=this.modalStack,a=0,s=o.length;a<s;a++){var l=o[a];if(l.id===e)return}var c=vo();if(Pn(c,"v-modal"),this.modalFade&&!mo&&Pn(c,"v-modal-enter"),i){var u=i.trim().split(/\s+/);u.forEach((function(e){return Pn(c,e)}))}setTimeout((function(){$n(c,"v-modal-enter")}),200),n&&n.parentNode&&11!==n.parentNode.nodeType?n.parentNode.appendChild(c):document.body.appendChild(c),t&&(c.style.zIndex=t),c.tabIndex=0,c.style.display="",this.modalStack.push({id:e,zIndex:t,modalClass:i})}},closeModal:function(e){var t=this.modalStack,n=vo();if(t.length>0){var i=t[t.length-1];if(i.id===e){if(i.modalClass){var r=i.modalClass.trim().split(/\s+/);r.forEach((function(e){return $n(n,e)}))}t.pop(),t.length>0&&(n.style.zIndex=t[t.length-1].zIndex)}else for(var o=t.length-1;o>=0;o--)if(t[o].id===e){t.splice(o,1);break}}0===t.length&&(this.modalFade&&Pn(n,"v-modal-leave"),setTimeout((function(){0===t.length&&(n.parentNode&&n.parentNode.removeChild(n),n.style.display="none",yo.modalDom=void 0),$n(n,"v-modal-leave")}),200))}};Object.defineProperty(yo,"zIndex",{configurable:!0,get:function(){return go||(co=co||(oe.a.prototype.$ELEMENT||{}).zIndex||2e3,go=!0),co},set:function(e){co=e}});var wo=function(){if(!oe.a.prototype.$isServer&&yo.modalStack.length>0){var e=yo.modalStack[yo.modalStack.length-1];if(!e)return;var t=yo.getInstance(e.id);return t}};oe.a.prototype.$isServer||window.addEventListener("keydown",(function(e){if(27===e.keyCode){var t=wo();t&&t.closeOnPressEscape&&(t.handleClose?t.handleClose():t.handleAction?t.handleAction("cancel"):t.close())}}));var xo,_o,ko=yo,Co=function(){if(oe.a.prototype.$isServer)return 0;if(void 0!==xo)return xo;var e=document.createElement("div");e.className="el-scrollbar__wrap",e.style.visibility="hidden",e.style.width="100px",e.style.position="absolute",e.style.top="-9999px",document.body.appendChild(e);var t=e.offsetWidth;e.style.overflow="scroll";var n=document.createElement("div");n.style.width="100%",e.appendChild(n);var i=n.offsetWidth;return e.parentNode.removeChild(e),xo=t-i,xo},So=1,Oo={props:{visible:{type:Boolean,default:!1},openDelay:{},closeDelay:{},zIndex:{},modal:{type:Boolean,default:!1},modalFade:{type:Boolean,default:!0},modalClass:{},modalAppendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!1},closeOnClickModal:{type:Boolean,default:!1}},beforeMount:function(){this._popupId="popup-"+So++,ko.register(this._popupId,this)},beforeDestroy:function(){ko.deregister(this._popupId),ko.closeModal(this._popupId),this.restoreBodyStyle()},data:function(){return{opened:!1,bodyPaddingRight:null,computedBodyPaddingRight:0,withoutHiddenClass:!0,rendered:!1}},watch:{visible:function(e){var t=this;if(e){if(this._opening)return;this.rendered?this.open():(this.rendered=!0,oe.a.nextTick((function(){t.open()})))}else this.close()}},methods:{open:function(e){var t=this;this.rendered||(this.rendered=!0);var n=fn({},this.$props||this,e);this._closeTimer&&(clearTimeout(this._closeTimer),this._closeTimer=null),clearTimeout(this._openTimer);var i=Number(n.openDelay);i>0?this._openTimer=setTimeout((function(){t._openTimer=null,t.doOpen(n)}),i):this.doOpen(n)},doOpen:function(e){if(!this.$isServer&&(!this.willOpen||this.willOpen())&&!this.opened){this._opening=!0;var t=this.$el,n=e.modal,i=e.zIndex;if(i&&(ko.zIndex=i),n&&(this._closing&&(ko.closeModal(this._popupId),this._closing=!1),ko.openModal(this._popupId,ko.nextZIndex(),this.modalAppendToBody?void 0:t,e.modalClass,e.modalFade),e.lockScroll)){this.withoutHiddenClass=!Ln(document.body,"el-popup-parent--hidden"),this.withoutHiddenClass&&(this.bodyPaddingRight=document.body.style.paddingRight,this.computedBodyPaddingRight=parseInt(Fn(document.body,"paddingRight"),10)),_o=Co();var r=document.documentElement.clientHeight<document.body.scrollHeight,o=Fn(document.body,"overflowY");_o>0&&(r||"scroll"===o)&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.computedBodyPaddingRight+_o+"px"),Pn(document.body,"el-popup-parent--hidden")}"static"===getComputedStyle(t).position&&(t.style.position="absolute"),t.style.zIndex=ko.nextZIndex(),this.opened=!0,this.onOpen&&this.onOpen(),this.doAfterOpen()}},doAfterOpen:function(){this._opening=!1},close:function(){var e=this;if(!this.willClose||this.willClose()){null!==this._openTimer&&(clearTimeout(this._openTimer),this._openTimer=null),clearTimeout(this._closeTimer);var t=Number(this.closeDelay);t>0?this._closeTimer=setTimeout((function(){e._closeTimer=null,e.doClose()}),t):this.doClose()}},doClose:function(){this._closing=!0,this.onClose&&this.onClose(),this.lockScroll&&setTimeout(this.restoreBodyStyle,200),this.opened=!1,this.doAfterClose()},doAfterClose:function(){ko.closeModal(this._popupId),this._closing=!1},restoreBodyStyle:function(){this.modal&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.bodyPaddingRight,$n(document.body,"el-popup-parent--hidden")),this.withoutHiddenClass=!0}}},To={methods:{t:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ai.apply(this,t)}}},Eo=Eo||{};Eo.Utils=Eo.Utils||{},Eo.Utils.focusFirstDescendant=function(e){for(var t=0;t<e.childNodes.length;t++){var n=e.childNodes[t];if(Eo.Utils.attemptFocus(n)||Eo.Utils.focusFirstDescendant(n))return!0}return!1},Eo.Utils.focusLastDescendant=function(e){for(var t=e.childNodes.length-1;t>=0;t--){var n=e.childNodes[t];if(Eo.Utils.attemptFocus(n)||Eo.Utils.focusLastDescendant(n))return!0}return!1},Eo.Utils.attemptFocus=function(e){if(!Eo.Utils.isFocusable(e))return!1;Eo.Utils.IgnoreUtilFocusChanges=!0;try{e.focus()}catch(t){}return Eo.Utils.IgnoreUtilFocusChanges=!1,document.activeElement===e},Eo.Utils.isFocusable=function(e){if(e.tabIndex>0||0===e.tabIndex&&null!==e.getAttribute("tabIndex"))return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&"ignore"!==e.rel;case"INPUT":return"hidden"!==e.type&&"file"!==e.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},Eo.Utils.triggerEvent=function(e,t){var n;n=/^mouse|click/.test(t)?"MouseEvents":/^key/.test(t)?"KeyboardEvent":"HTMLEvents";for(var i=document.createEvent(n),r=arguments.length,o=new Array(r>2?r-2:0),a=2;a<r;a++)o[a-2]=arguments[a];return i.initEvent.apply(i,[t].concat(o)),e.dispatchEvent?e.dispatchEvent(i):e.fireEvent("on"+t,i),e},Eo.Utils.keys={tab:9,enter:13,space:32,left:37,up:38,right:39,down:40,esc:27};var Do,Mo=Eo.Utils,Ao=Ao||{};Ao.Dialog=function(e,t,n){var i=this;if(this.dialogNode=e,null===this.dialogNode||"dialog"!==this.dialogNode.getAttribute("role"))throw new Error("Dialog() requires a DOM element with ARIA role of dialog.");"string"===typeof t?this.focusAfterClosed=document.getElementById(t):"object"===Object(k["a"])(t)?this.focusAfterClosed=t:this.focusAfterClosed=null,"string"===typeof n?this.focusFirst=document.getElementById(n):"object"===Object(k["a"])(n)?this.focusFirst=n:this.focusFirst=null,this.focusFirst?this.focusFirst.focus():Mo.focusFirstDescendant(this.dialogNode),this.lastFocus=document.activeElement,Do=function(e){i.trapFocus(e)},this.addListeners()},Ao.Dialog.prototype.addListeners=function(){document.addEventListener("focus",Do,!0)},Ao.Dialog.prototype.removeListeners=function(){document.removeEventListener("focus",Do,!0)},Ao.Dialog.prototype.closeDialog=function(){var e=this;this.removeListeners(),this.focusAfterClosed&&setTimeout((function(){e.focusAfterClosed.focus()}))},Ao.Dialog.prototype.trapFocus=function(e){Mo.IgnoreUtilFocusChanges||(this.dialogNode.contains(e.target)?this.lastFocus=e.target:(Mo.focusFirstDescendant(this.dialogNode),this.lastFocus===document.activeElement&&Mo.focusLastDescendant(this.dialogNode),this.lastFocus=document.activeElement))};var No,Io=Ao.Dialog,Lo={success:"success",info:"info",warning:"warning",error:"error"},Po={name:"AwsuiMessageBox",mixins:[Oo,To],props:{modal:{default:!0},lockScroll:{default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{default:!0},closeOnPressEscape:{default:!0},closeOnHashChange:{default:!0},center:{default:!1,type:Boolean},roundButton:{default:!1,type:Boolean}},components:{AwsuiInput:ve,AwsuiButton:N},computed:{icon:function(){var e=this.type,t=this.iconClass;return""!==t?"awsui-iconfont ".concat(t):e&&Lo[e]?"awsui-iconfont awsui-icon-".concat(Lo[e]):""},confirmButtonClasses:function(){return"".concat(this.confirmButtonClass)},cancelButtonClasses:function(){return"".concat(this.cancelButtonClass)}},methods:{getSafeClose:function(){var e=this,t=this.uid;return function(){e.$nextTick((function(){t===e.uid&&e.doClose()}))}},doClose:function(){var e=this;this.visible&&(this.visible=!1,this._closing=!0,this.onClose&&this.onClose(),No.closeDialog(),this.lockScroll&&setTimeout(this.restoreBodyStyle,200),this.opened=!1,this.doAfterClose(),setTimeout((function(){e.action&&e.callback(e.action,e)})))},handleWrapperClick:function(){this.closeOnClickModal&&this.handleAction(this.distinguishCancelAndClose?"close":"cancel")},handleInputEnter:function(){if("textarea"!==this.inputType)return this.handleAction("confirm")},handleAction:function(e){("prompt"!==this.$type||"confirm"!==e||this.validate())&&(this.action=e,"function"===typeof this.beforeClose?(this.close=this.getSafeClose(),this.beforeClose(e,this,this.close)):this.doClose())},validate:function(){if("prompt"===this.$type){var e=this.inputPattern;if(e&&!e.test(this.inputValue||""))return this.editorErrorMessage=this.inputErrorMessage,Pn(this.getInputElement(),"invalid"),!1;var t=this.inputValidator;if("function"===typeof t){var n=t(this.inputValue);if(!1===n)return this.editorErrorMessage=this.inputErrorMessage,Pn(this.getInputElement(),"invalid"),!1;if("string"===typeof n)return this.editorErrorMessage=n,Pn(this.getInputElement(),"invalid"),!1}}return this.editorErrorMessage="",$n(this.getInputElement(),"invalid"),!0},getFirstFocus:function(){var e=this.$el.querySelector(".awsui-message-box__btns .awsui-button"),t=this.$el.querySelector(".awsui-message-box__btns .awsui-message-box__title");return e||t},getInputElement:function(){var e=this.$refs.input.$refs;return e.input||e.textarea},handleClose:function(){this.handleAction("close")}},watch:{inputValue:{immediate:!0,handler:function(e){var t=this;this.$nextTick((function(){"prompt"===t.$type&&null!==e&&t.validate()}))}},visible:function(e){var t=this;e&&(this.uid++,"alert"!==this.$type&&"confirm"!==this.$type||this.$nextTick((function(){})),this.focusAfterClosed=document.activeElement,No=new Io(this.$el,this.focusAfterClosed,this.getFirstFocus())),"prompt"===this.$type&&(e?setTimeout((function(){t.$refs.input&&t.$refs.input.$el&&t.getInputElement().focus()}),500):(this.editorErrorMessage="",$n(this.getInputElement(),"invalid")))}},mounted:function(){var e=this;this.$nextTick((function(){e.closeOnHashChange&&window.addEventListener("hashchange",e.close)}))},beforeDestroy:function(){this.closeOnHashChange&&window.removeEventListener("hashchange",this.close),setTimeout((function(){No.closeDialog()}))},data:function(){return{uid:1,title:void 0,message:"",type:"",iconClass:"",customClass:"",showInput:!1,inputValue:null,inputPlaceholder:"",inputType:"text",inputPattern:null,inputValidator:null,inputErrorMessage:"",showConfirmButton:!0,showCancelButton:!1,action:"",confirmButtonText:"确定",cancelButtonText:"取消",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonClass:"",confirmButtonDisabled:!1,cancelButtonClass:"",editorErrorMessage:null,callback:null,dangerouslyUseHTMLString:!1,focusAfterClosed:null,isOnComposition:!1,distinguishCancelAndClose:!1}}},$o=Po,Fo=(n("76f2"),Object(g["a"])($o,fo,po,!1,null,"ed5b8260",null)),jo=Fo.exports;function zo(e){return null!==e&&"object"===Object(k["a"])(e)&&le(e,"componentOptions")}var Bo,Ro,Vo={title:null,message:"",type:"",iconClass:"",showInput:!1,showClose:!0,modalFade:!0,lockScroll:!0,closeOnClickModal:!0,closeOnPressEscape:!0,closeOnHashChange:!0,inputValue:null,inputPlaceholder:"",inputType:"text",inputPattern:null,inputValidator:null,inputErrorMessage:"",showConfirmButton:!0,showCancelButton:!1,confirmButtonPosition:"right",confirmButtonHighlight:!1,cancelButtonHighlight:!1,confirmButtonText:"确定",cancelButtonText:"取消",confirmButtonClass:"",cancelButtonClass:"",customClass:"",beforeClose:null,dangerouslyUseHTMLString:!1,center:!1,roundButton:!1,distinguishCancelAndClose:!1,appendTarget:null},Ho=oe.a.extend(jo),Wo=[],qo=function(e){return e?"string"===typeof e?document.querySelector(e):e instanceof HTMLElement?e:void 0:document.body},Uo=function(e){if(Bo){var t=Bo.callback;"function"===typeof t&&(Ro.showInput?t(Ro.inputValue,e):t(e)),Bo.resolve&&("confirm"===e?Ro.showInput?Bo.resolve({value:Ro.inputValue,action:e}):Bo.resolve(e):!Bo.reject||"cancel"!==e&&"close"!==e||Bo.reject(e))}},Ko=function(){Ro=new Ho({el:document.createElement("div")}),Ro.callback=Uo},Go=function e(){if(Ro||Ko(),Ro.action="",(!Ro.visible||Ro.closeTimer)&&Wo.length>0){Bo=Wo.shift();var t=Bo.options;for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(Ro[n]=t[n]);void 0===t.callback&&(Ro.callback=Uo);var i=Ro.callback;Ro.callback=function(t,n){i(t,n),e()},zo(Ro.message)?(Ro.$slots.default=[Ro.message],Ro.message=null):delete Ro.$slots.default,["modal","showClose","closeOnClickModal","closeOnPressEscape","closeOnHashChange"].forEach((function(e){void 0===Ro[e]&&(Ro[e]=!0)})),qo(t.appendTarget).appendChild(Ro.$el),oe.a.nextTick((function(){Ro.visible=!0}))}},Yo=function e(t,n){if(!oe.a.prototype.$isServer){if("string"===typeof t||zo(t)?(t={message:t},"string"===typeof arguments[1]&&(t.title=arguments[1])):t.callback&&!n&&(n=t.callback),"undefined"!==typeof Promise)return new Promise((function(i,r){Wo.push({options:fn({},Vo,e.defaults,t),callback:n,resolve:i,reject:r}),Go()}));Wo.push({options:fn({},Vo,e.defaults,t),callback:n}),Go()}};Yo.setDefaults=function(e){Yo.defaults=e},Yo.alert=function(e,t,n){return"object"===Object(k["a"])(t)?(n=t,t=""):void 0===t&&(t=""),Yo(fn({title:t,message:e,$type:"alert",closeOnPressEscape:!1,closeOnClickModal:!1},n))},Yo.confirm=function(e,t,n){return"object"===Object(k["a"])(t)?(n=t,t=""):void 0===t&&(t=""),Yo(fn({title:t,message:e,$type:"confirm",showCancelButton:!0},n))},Yo.prompt=function(e,t,n){return"object"===Object(k["a"])(t)?(n=t,t=""):void 0===t&&(t=""),Yo(fn({title:t,message:e,showCancelButton:!0,showInput:!0,$type:"prompt"},n))},Yo.close=function(){Ro.doClose(),Ro.visible=!1,Wo=[],Bo=null};var Xo=Yo,Zo=Xo,Qo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"dialog-fade"},on:{"after-enter":e.afterEnter,"after-leave":e.afterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"awsui-dialog__wrapper",on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[n("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],key:e.key,ref:"dialog",class:["awsui-dialog",{"is-fullscreen":e.fullscreen,"awsui-dialog--center":e.center},e.customClass],style:e.style,attrs:{role:"dialog",id:e.id,"aria-modal":"true","aria-label":e.title||"dialog"}},[n("div",{staticClass:"awsui-dialog__header"},[e._t("title",[n("span",{staticClass:"awsui-dialog__title"},[e._v(e._s(e.title))])]),e.showClose?n("button",{staticClass:"awsui-dialog__headerbtn",attrs:{type:"button","aria-label":"Close"},on:{click:e.handleClose}},[n("i",{staticClass:"awsui-dialog__close awsui-iconfont awsui-icon-close"},[e._v("  ")])]):e._e()],2),e.rendered?n("div",{staticClass:"awsui-dialog__body",style:{height:e.height,border:e.border?"":"0",padding:e.border?"":"0"}},[null!=e.iframeOption?[n("iframe",{ref:"toIframe",attrs:{frameborder:"0",name:"awsui-dialog-iframe-"+e.index,width:e.iframeOption.width?e.iframeOption.width:"100%",height:e.iframeOption.height?e.iframeOption.height:"99%",scrolling:e.iframeOption.scrolling?e.iframeOption.scrolling:"auto"}}),null!=e.iframeOption?n("form",{ref:"iframeTargetForm",staticStyle:{display:"none"},attrs:{name:"awsui-dialog-iframe-form-"+e.index,target:"awsui-dialog-iframe-"+e.index,action:e.iframeOption.url}},e._l(e.iframeOption.data,(function(e,t){return n("textarea",{key:t,attrs:{name:t},domProps:{value:e}})})),0):e._e()]:e._t("default")],2):e._e(),e.$slots.footer?n("div",{staticClass:"awsui-dialog__footer"},[e._t("footer")],2):e._e()])])])},Jo=[],ea={name:"AwsuiDialog",mixins:[Oo,ie],props:{id:{type:String,default:""},title:{type:String,default:""},modal:{type:Boolean,default:!0},border:{type:Boolean,default:!0},modalAppendToBody:{type:Boolean,default:!0},appendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!1},closeOnPressEscape:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},width:String,height:String,fullscreen:Boolean,customClass:{type:String,default:""},top:{type:String,default:"15vh"},beforeClose:Function,center:{type:Boolean,default:!1},iframeOption:{type:Object},dialogLoading:{type:Boolean,default:!1},destroyOnClose:Boolean},data:function(){return{index:this.toolCustom.getCountIndex(),closed:!1,loading:!1,key:0}},watch:{dialogLoading:function(e){this.loading=e},loading:function(e){this.$emit("update:dialogLoading",e)},visible:function(e){var t=this;e?(this.closed=!1,this.$emit("open"),this.$el.addEventListener("scroll",this.updatePopper),this.$nextTick((function(){t.$refs.dialog.scrollTop=0})),this.appendToBody&&document.body.appendChild(this.$el),this.loadIframe()):(this.$el.removeEventListener("scroll",this.updatePopper),this.closed||this.$emit("close"),this.destroyOnClose&&this.$nextTick((function(){t.key++})))}},computed:{style:function(){var e={};return this.fullscreen||(e.marginTop=this.top,this.width&&(e.width=this.width)),e}},methods:{getWin:function(){return this.$refs.toIframe.contentWindow},loadIframe:function(){var e=this;null!=this.iframeOption&&this.$nextTick((function(){var t=e.$refs.iframeTargetForm,n=e.$refs.toIframe;e.loading=!0,n.attachEvent?n.attachEvent("onload",(function(){e.loading=!1})):n.onload=function(){e.loading=!1},t.submit()}))},getCountIndex:function(){return this.toolCustom.getCountIndex()},getMigratingConfig:function(){return{props:{size:"size is removed."}}},handleWrapperClick:function(){this.closeOnClickModal&&this.handleClose()},handleClose:function(){"function"===typeof this.beforeClose?this.beforeClose(this.hide):this.hide()},hide:function(e){!1!==e&&(this.$emit("update:visible",!1),this.$emit("close"),this.closed=!0)},updatePopper:function(){this.broadcast("AwsuiSelectDropdown","updatePopper"),this.broadcast("AwsuiDropdownMenu","updatePopper")},afterEnter:function(){this.$emit("opened")},afterLeave:function(){this.$emit("closed")}},mounted:function(){this.visible&&(this.rendered=!0,this.open(),this.appendToBody&&document.body.appendChild(this.$el))},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},ta=ea,na=(n("6bc3"),n("2c98"),Object(g["a"])(ta,Qo,Jo,!1,null,"a8aa50ee",null)),ia=na.exports;ia.install=function(e){e.component(ia.name,ia)};var ra=ia,oa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"awsui-sidebar-fade"},on:{"after-enter":e.afterEnter,"after-leave":e.afterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"awsui-sidebar__wrapper",attrs:{tabindex:"-1"}},[n("div",{staticClass:"awsui-sidebar__container",class:e.visible&&"awsui-sidebar__open",attrs:{role:"document",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[n("div",{ref:"sidebar",staticClass:"awsui-sidebar",class:[e.direction,e.customClass],style:e.isHorizontal?"width: "+e.size:"height: "+e.size,attrs:{"aria-modal":"true","aria-labelledby":"awsui-sidebar__title","aria-label":e.title,role:"dialog",tabindex:"-1"}},[e.withHeader?n("header",{staticClass:"awsui-sidebar__header",attrs:{id:"awsui-sidebar__title"}},[e._t("title",[n("span",{attrs:{role:"heading",tabindex:"0",title:e.title}},[e._v(e._s(e.title))])]),e.showClose?n("button",{staticClass:"awsui-sidebar__close-btn",attrs:{"aria-label":"close "+(e.title||"sidebar"),type:"button"},on:{click:e.closeSidebar}},[n("i",{staticClass:"el-dialog__close el-icon el-icon-close"})]):e._e()],2):e._e(),e.rendered?n("section",{staticClass:"awsui-sidebar__body"},[e._t("default")],2):e._e()])])])])},aa=[],sa={name:"AwsuiSidebar",mixins:[Oo,ie,Mo],props:{appendToBody:{type:Boolean,default:!1},beforeClose:{type:Function},customClass:{type:String,default:""},closeOnPressEscape:{type:Boolean,default:!0},destroyOnClose:{type:Boolean,default:!1},modal:{type:Boolean,default:!0},direction:{type:String,default:"rtl",validator:function(e){return-1!==["ltr","rtl","ttb","btt"].indexOf(e)}},modalAppendToBody:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},size:{type:String,default:"30%"},title:{type:String,default:""},visible:{type:Boolean},wrapperClosable:{type:Boolean,default:!0},withHeader:{type:Boolean,default:!0}},computed:{isHorizontal:function(){return"rtl"===this.direction||"ltr"===this.direction}},data:function(){return{closed:!1,prevActiveElement:null}},watch:{visible:function(e){var t=this;e?(this.closed=!1,this.$emit("open"),this.appendToBody&&document.body.appendChild(this.$el),this.prevActiveElement=document.activeElement,this.$nextTick((function(){Mo.focusFirstDescendant(t.$refs.sidebar)}))):(this.closed||this.$emit("close"),this.$nextTick((function(){t.prevActiveElement&&t.prevActiveElement.focus()})))}},methods:{afterEnter:function(){this.$emit("opened")},afterLeave:function(){this.$emit("closed")},hide:function(e){!1!==e&&(this.$emit("update:visible",!1),this.$emit("close"),!0===this.destroyOnClose&&(this.rendered=!1),this.closed=!0)},handleWrapperClick:function(){this.wrapperClosable&&this.closeSidebar()},closeSidebar:function(){"function"===typeof this.beforeClose?this.beforeClose(this.hide):this.hide()},handleClose:function(){this.closeSidebar()}},mounted:function(){this.visible&&(this.rendered=!0,this.open())},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},la=sa,ca=(n("545f"),Object(g["a"])(la,oa,aa,!1,null,"6e5ea5c2",null)),ua=ca.exports;ua.install=function(e){e.component(ua.name,ua)};var da=ua,ha=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",[e.visible?n("div",{staticClass:"awsui-backtop",class:e.className,style:{right:e.styleRight,bottom:e.styleBottom},on:{click:function(t){return t.stopPropagation(),e.handleClick(t)}}},[e._t("default",[n("i",{staticClass:"awsui-iconfont",staticStyle:{color:"#3383da"}},[e._v("")])])],2):e._e()])},fa=[],pa=function(e){return Math.pow(e,3)},ma=function(e){return e<.5?pa(2*e)/2:1-pa(2*(1-e))/2},ga={name:"AwsuiBacktop",props:{visibilityHeight:{type:Number,default:200},target:[String],right:{type:Number,default:40},bottom:{type:Number,default:40},className:[String]},data:function(){return{el:null,container:null,visible:!1}},computed:{styleBottom:function(){return"".concat(this.bottom,"px")},styleRight:function(){return"".concat(this.right,"px")}},mounted:function(){this.init(),this.container.addEventListener("scroll",this.onScroll)},methods:{init:function(){if(this.container=document,this.el=document.documentElement,this.target){if(this.el=document.querySelector(this.target),!this.el)throw new Error("target is not existed: ".concat(this.target));this.container=this.el}},onScroll:function(){var e=this.el.scrollTop;this.visible=e>=this.visibilityHeight},handleClick:function(e){this.scrollToTop(),this.$emit("click",e)},scrollToTop:function(){var e=this.el,t=Date.now(),n=e.scrollTop,i=window.requestAnimationFrame||function(e){return setTimeout(e,16)},r=function r(){var o=(Date.now()-t)/500;o<1?(e.scrollTop=n*(1-ma(o)),i(r)):e.scrollTop=0};i(r)}}},va=ga,ba=(n("b4b6"),Object(g["a"])(va,ha,fa,!1,null,"80867440",null)),ya=ba.exports;ya.install=function(e){e.component(ya.name,ya)};var wa=ya,xa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("awsui-layout",[e.headerShow?n("awsui-header",{style:e.setHeaderStyle()},[e._t("default")],2):e._e(),n("awsui-layout",[n("awsui-main",{staticStyle:{position:"relative"}},[n("codemirror",{ref:"codemirr",staticClass:"customCode",attrs:{options:e.cmoptions,placeholder:e.mirrorPlaceholder},on:{blur:e.getTextAreaPostion},model:{value:e.svalue,callback:function(t){e.svalue=t},expression:"svalue"}}),n("el-collapse",{directives:[{name:"show",rawName:"v-show",value:e.show,expression:"show"}],attrs:{accordion:""},model:{value:e.activeName,callback:function(t){e.activeName=t},expression:"activeName"}},e._l(e.codeHelpInfo,(function(t){return n("el-collapse-item",{key:t.index,attrs:{title:t.category,name:t.id}},e._l(t.content,(function(t){return n("div",{key:t.index,staticClass:"collapse-item",class:{active:t.title===e.activeTitle},on:{click:function(n){return e.insert(t.insertCode,t)}}},[n("span",{staticClass:"spot",class:{activespot:t.title===e.activeTitle}}),e._v(e._s(t.title)+" "),t.desc?n("i",{staticClass:"awsui-iconfont help",on:{click:function(n){return n.stopPropagation(),e.helpMsg(t.desc)}}},[e._v("")]):e._e()])})),0)})),1)],1),n("awsui-aside",{staticStyle:{position:"relative"},attrs:{width:"26px"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.codeHelpInfo,expression:"codeHelpInfo"}]},[e.show?n("i",{staticClass:"awsui-iconfont topDiv",on:{click:e.collapseShow}},[e._v("")]):n("i",{staticClass:"awsui-iconfont topDiv",on:{click:e.collapseShow}},[e._v("")])]),n("el-tooltip",{attrs:{content:"全屏",placement:"bottom"}},[n("i",{staticClass:"awsui-iconfont enlarge",on:{click:e.fullSreen}},[e._v("")])])],1)],1)],1)},_a=[],ka=n("8f94"),Ca=(n("a7be"),n("0109"),n("d7d5"),n("6a70"),n("6d78"),n("f9d4"),n("7b00"),n("d5e0"),n("4ba6"),n("959b"),n("db91"),n("903e"),n("02f0"),n("ffda"),n("c0e2"),n("693d8"),n("f6b6"),n("991c"),n("9b74"),{name:"AwsuiCodeHelper",components:{codemirror:ka["codemirror"]},props:{cmoptions:{type:Object,default:function(){return{tabSize:4,mode:"text/javascript",theme:"dracula",lineNumbers:!0,line:!0}}},headerStyle:{type:Object,default:function(){return{height:"30px"}}},placeholder:{type:String},codeHelpInfo:{type:Array},height:{type:Number},value:{type:String},headerShow:{type:Boolean,default:!1}},data:function(){return{show:!1,activeName:"1",activeTitle:"",svalue:"",mirrorPlaceholder:"",lineCh:{line:0,ch:0}}},watch:{value:{handler:function(e){this.svalue=e,this.mirrorPlaceholder=this.svalue?"":this.placeholder},immediate:!0},svalue:function(e){this.$emit("input",e),this.$emit("change",e)}},computed:{},methods:{setHeaderStyle:function(){return this.headerStyle},fullSreen:function(){var e=this,t=window.screen.availHeight-400,n=window.screen.availWidth-400;if(window.top.FrmDialog){var i=window.top.FrmDialog.open({width:n,height:t,id:"aws_sql_fullscreen_dlg",closable:!1,url:"./w",data:{sid:this.$store.state.sessionId,cmd:"CONSOLE_COMMON_SQL_FULLSCREEN",sqlVal:this.svalue,appId:""},onClose:function(){e.svalue=window.top.FrmDialog.win().$("#full_sql_dlg").val()}});this.dlgx=i}},getTextAreaPostion:function(){this.lineCh=this.$refs.codemirr.codemirror.getCursor()},replaceHTML:function(e){return e.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/\\n/g,"\n")},insert:function(e,t){var n=this.replaceHTML(e);this.$refs.codemirr.codemirror.replaceRange(n,this.lineCh,this.lineCh),this.$refs.codemirr.codemirror.focus(),this.$refs.codemirr.codemirror.setCursor({line:this.lineCh.line,ch:this.lineCh.ch+n.length}),this.svalue=this.$refs.codemirr.codemirror.getValue(),this.activeTitle=t.title},collapseShow:function(){this.show=!this.show},helpMsg:function(e){this.$alert(e,"帮助信息",{customClass:"el-message-box_custom",dangerouslyUseHTMLString:!0,closeOnClickModal:!0,callback:function(){}})},setCodeMirrorSize:function(){var e=this;e.$refs.codemirr.codemirror.setSize(null,e.height),e.$refs.codemirr.codemirror.focus()},setHeight:function(e){var t=this;t.$refs.codemirr.codemirror.setSize(null,e)},getCodeMirror:function(){return this.$refs.codemirr.codemirror}},mounted:function(){this.setCodeMirrorSize()},created:function(){}}),Sa=Ca,Oa=(n("21cc"),n("6b4b"),Object(g["a"])(Sa,xa,_a,!1,null,"d8359e1e",null)),Ta=Oa.exports;Ta.install=function(e){e.component(Ta.name,Ta)};var Ea=Ta,Da=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{ref:"awsuiAddress",staticClass:"awsui-address"},[n("div",{staticClass:"awsui-address-content"},e._l(e.addressValue,(function(t,i){return n("span",{key:t,staticClass:"awsui-address-item"},[n("i",{staticClass:"awsui-iconfont awsui-iconfont-ico"},[e._v("")]),n("i",{staticClass:"awsui-item-value"},[e._v(e._s(t))]),e.readonly||e.disabled?e._e():n("i",{staticClass:"awsui-iconfont awsui-iconfont-close",on:{click:function(n){return n.target!==n.currentTarget?null:e.delsingle(t,i)}}},[e._v("")])])})),0),n("div",{staticClass:"awsui-address-ico"},[e.readonly||e.disabled?e._e():n("i",{directives:[{name:"show",rawName:"v-show",value:e.delComputed,expression:"delComputed"}],staticClass:"awsui-iconfont awsui-iconfont-del",on:{click:e.delAll}},[e._v("")]),e.readonly||e.disabled?e._e():n("i",{ref:"addIco",staticClass:"awsui-iconfont awsui-iconfont-add-ico",on:{click:function(t){return e.openDialog()}}},[e._v("")])]),e.dialogOnce?n("awsui-dialog",{ref:"DialogAddress",attrs:{iframeOption:e.paramsValue,title:e.dialogTitle,visible:e.dialogVisible,width:"605px",height:"410px","show-close":!1,"before-close":e.handleClose,"append-to-body":""},on:{"update:visible":function(t){e.dialogVisible=t}}},[n("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("awsui-button",{attrs:{id:"confirmBtn",type:"primary"},on:{click:function(t){return e.diaConfirm()}}},[e._v("确定")]),n("awsui-button",{on:{click:e.diaCancel}},[e._v("取消")])],1)]):e._e()],1)},Ma=[],Aa=n("c72d"),Na=Aa["a"],Ia=(n("f3b2"),Object(g["a"])(Na,Da,Ma,!1,null,"e3bef0a4",null)),La=Ia.exports;La.install=function(e){e.component(La.name,La)};var Pa=La,$a=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"inputIconClick"},[n("awsui-input",{ref:"awsuiInput",attrs:{placeholder:e.placeholderVal,prefixIcon:e.leftIcon,suffixIcon:e.rightIcon,readonly:e.readonlyValue},model:{value:e.inputVal,callback:function(t){e.inputVal=t},expression:"inputVal"}})],1)},Fa=[],ja={name:"AwsuiIconClick",props:{value:{},prefixIcon:{type:String,default:"undefined"},suffixIcon:{type:String,default:"undefined"},placeholder:{type:String,default:""},readonly:{type:Boolean,default:!1}},data:function(){return{inputVal:"",leftIcon:"",rightIcon:"",placeholderVal:"",leftIconLength:"",rightIconLength:"",readonlyValue:""}},watch:{inputVal:function(e){this.$emit("input",e)},value:{handler:function(){this.inputVal=this.value},immediate:!0},prefixIcon:{handler:function(){var e=this;"undefined"!==this.prefixIcon?this.leftIcon=this.prefixIcon:this.leftIcon="",setTimeout((function(){if(!0!==e.readonlyValue&&void 0!==e._events.leftClick&&""!==e.leftIcon)for(var t=Object(cn["a"])(e.$refs.awsuiInput.$el.childNodes),n=0;n<t.length;n++)"I"===e.$refs.awsuiInput.$el.childNodes[n].nodeName&&(""===e.leftIconLength&&(e.leftIconLength=n),""!==e.leftIconLength&&(e.$refs.awsuiInput.$el.childNodes[e.leftIconLength].classList.add("awsui-iconfont-hasClick"),e.$refs.awsuiInput.$el.childNodes[e.leftIconLength].onclick=function(t){e.$emit("leftClick",t)}))}))},immediate:!0},suffixIcon:{handler:function(){var e=this;"undefined"!==this.suffixIcon?this.rightIcon=this.suffixIcon:this.rightIcon="",setTimeout((function(){if(!0!==e.readonlyValue&&void 0!==e._events.click){var t=Object(cn["a"])(e.$refs.awsuiInput.$el.childNodes);if(""===e.leftIconLength&&""===e.leftIcon)for(var n=0;n<t.length;n++)"I"===e.$refs.awsuiInput.$el.childNodes[n].nodeName&&(e.$refs.awsuiInput.$el.childNodes[n].classList.add("awsui-iconfont-hasClick"),e.$refs.awsuiInput.$el.childNodes[n].onclick=function(t){e.$emit("click",t)});if(""!==e.leftIcon)for(var i=!1,r=0;r<t.length;r++)"I"===e.$refs.awsuiInput.$el.childNodes[r].nodeName&&(i&&(e.$refs.awsuiInput.$el.childNodes[r].classList.add("awsui-iconfont-hasClick"),e.$refs.awsuiInput.$el.childNodes[r].onclick=function(t){e.$emit("click",t)}),i=!0)}}))},immediate:!0},placeholder:{handler:function(){this.placeholderVal=this.placeholder},immediate:!0},readonly:{handler:function(){this.readonlyValue=this.readonly},immediate:!0}}},za=ja,Ba=(n("07ea"),Object(g["a"])(za,$a,Fa,!1,null,null,null)),Ra=Ba.exports;Ra.install=function(e){e.component(Ra.name,Ra)};var Va=Ra,Ha=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{ref:"awsuiDataDictionary",staticClass:"awsui-data-dictionary"},[n("awsui-icon-click",{attrs:{suffixIcon:"&#xe6e9;",readonly:e.readonly},on:{click:function(t){return e.DDIconClick()}},model:{value:e.DDValue,callback:function(t){e.DDValue=t},expression:"DDValue"}}),e.dialogOnce?n("awsui-dialog",{ref:"DialogDD",attrs:{iframeOption:e.iframeOption,title:e.dialogTitle,visible:e.dialogVisible,width:"605px",height:"410px","show-close":!0,"before-close":e.handleClose,"append-to-body":""},on:{"update:visible":function(t){e.dialogVisible=t}}},[e.isMultiple?n("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("awsui-button",{attrs:{id:"confirmBtn",type:"primary"},on:{click:function(t){return e.dialogConfirm()}}},[e._v("确定")]),n("awsui-button",{on:{click:e.diaCancel}},[e._v("取消")])],1):e._e()]):e._e()],1)},Wa=[],qa=n("2ad7"),Ua=qa["a"],Ka=Object(g["a"])(Ua,Ha,Wa,!1,null,null,null),Ga=Ka.exports;Ga.install=function(e){e.component(Ga.name,Ga)};var Ya=Ga,Xa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"app-info"},[n("el-container",[n("el-header",{attrs:{height:e.headerHeight}},[n("div",{staticClass:"app-info-title"},[e._v("应用信息")])]),n("el-main",{staticClass:"cc-dev-main-card"},[n("el-container",[n("el-aside",{attrs:{width:e.asideWidth}},[n("div",{directives:[{name:"show",rawName:"v-show",value:""==e.appIconFontCode,expression:"appIconFontCode==''"}],staticClass:"app-img-div"},[n("img",{staticClass:"app-img",attrs:{src:e.appIcon}})]),n("div",{directives:[{name:"show",rawName:"v-show",value:""!=e.appIconFontCode,expression:"appIconFontCode!=''"}],staticClass:"app-icon"},[n("i",{staticClass:"awsui-iconfont",style:e.appIconFontColor,domProps:{innerHTML:e._s(e.appIconFontCode)}})])]),n("el-main",{staticClass:"cc-dev-main"},[n("el-row",[n("el-col",{attrs:{span:12}},[n("div",{staticClass:"app-name"},[e._v(e._s(e.appName))])]),n("el-col",{staticStyle:{height:"25px"},attrs:{span:12}},[e.isManager?n("span",{staticClass:"manageTxt"},[e._v("该模型在QAS和PRD环境受管,不允许删除和修改")]):e._e(),n("el-switch",{staticClass:"manageSwitch",attrs:{"active-color":"#d9422f","inactive-color":"#009688","active-text":"受管","inactive-text":"不受管",size:"small",disabled:e.isReadOnlyAppAuth},on:{change:e.getSwitchState},model:{value:e.isManager,callback:function(t){e.isManager=t},expression:"isManager"}})],1)],1),n("el-divider",{staticClass:"app-info-divider"}),n("el-row",[n("el-col",{attrs:{span:13}},[n("div",{},[e._v("应用ID:"+e._s(e.appId)+"("+e._s(e.appVersionNo)+")")])]),n("el-col",{attrs:{span:11}},[n("div",{staticClass:"txt-right"},[e._v("创建人:"+e._s(e.createTime)+" ("+e._s(e.createUser)+")")])])],1),n("el-row",[n("el-col",{attrs:{span:13}},[n("div",{},[e._v("开发商:"+e._s(e.appDeveloperName))])]),n("el-col",{attrs:{span:11}},[n("div",{staticClass:"txt-right"},[e._v("修改人:"+e._s(e.updateTime)+" ("+e._s(e.updateUser)+")")])])],1)],1)],1)],1)],1),n("el-container",[n("el-header",{attrs:{height:e.headerHeight}},[n("div",{staticClass:"app-info-title"},[e._v("DevOps")])]),n("el-main",{staticClass:"cc-dev-main"},[n("el-container",[n("el-main",{staticClass:"cc-dev-main"},[n("el-card",{staticClass:"box-card dev-ops",attrs:{shadow:"never"}},e._l(e.teamMembers,(function(t,i){return n("el-collapse",{key:i,attrs:{accordion:""}},[n("el-collapse-item",[n("template",{slot:"title"},[n("div",{staticClass:"dev-collapse-title"},[n("i",{staticClass:"awsui-iconfont"},[e._v("")]),e._v(" "+e._s(t.teamName)+" "),n("div",{staticClass:"dev-sec txt-right"},[e._v(e._s(t.permTxt))])])]),n("el-card",{staticClass:"box-card dev-card"},[n("div",{staticClass:"clearfix",attrs:{slot:"header"},slot:"header"},[n("span",[e._v("成员")])]),e._l(t.members,(function(t,i){return n("div",{key:i,staticClass:"text dev-item"},[n("el-row",[n("el-col",{attrs:{span:12}},[n("div",{},[e._v(e._s(t.userName)+"/"+e._s(t.userId))])]),n("el-col",{attrs:{span:12}},[n("div",{staticClass:"txt-right"},[e._v(e._s(t.departmentName))])])],1)],1)}))],2),n("el-card",{staticClass:"box-card dev-card",staticStyle:{"margin-top":"20px"},style:{display:e.isShowRoleTable}},[n("div",{staticClass:"clearfix",attrs:{slot:"header"},slot:"header"},[n("span",[e._v("角色")])]),e._l(t.roles,(function(t,i){return n("div",{key:i,staticClass:"text dev-item"},[n("el-row",[n("el-col",{attrs:{span:24}},[n("div",{},[e._v(e._s(t.userName))])])],1)],1)}))],2)],2)],1)})),1)],1)],1)],1)],1),n("el-container",{style:{display:e.isShowOptHistory}},[n("el-header",{attrs:{height:e.headerHeight}},[n("div",{staticClass:"app-info-title"},[e._v("最近修改")])]),n("el-main",[n("el-table",{staticStyle:{width:"100%"},attrs:{data:e.optHistory,"show-header":e.isShowTableHeader}},[n("el-table-column",{attrs:{prop:"updateUser"}}),n("el-table-column",{attrs:{prop:"updateTime",width:"160"}})],1)],1),n("p",{directives:[{name:"show",rawName:"v-show",value:e.optHistoryCopy.length>3&&e.optHistory.length<e.optHistoryCopy.length,expression:"optHistoryCopy.length>3&&optHistory.length<optHistoryCopy.length"}],staticClass:"show-all",staticStyle:{cursor:"pointer","text-align":"center"},on:{mouseover:e.showMore}},[e._v("加载更多")])],1)],1)},Za=[],Qa={name:"AwsAppInfo",props:["sid","appId","id","modelType"],data:function(){return{isManager:!1,appIcon:"",appIconFontCode:"",appIconFontColor:"",appName:"",appVersionNo:"",createTime:"",createUser:"",appDeveloperName:"",updateTime:"",updateUser:"",teamMembers:"",isShowRoleTable:"none",isShowOptHistory:"none",asideWidth:"70px",headerHeight:"18px",isShowTableHeader:!1,optHistoryCopy:[],optHistory:[],isReadOnlyAppAuth:!1}},mounted:function(){this.getAppInfo()},watch:{isManager:{handler:function(){var e=this,t=e.isManager;this.$emit("change",t)},immediate:!0}},methods:{getSwitchState:function(e){this.isManager=e,this.$emit("change",e)},showMore:function(){this.optHistory=JSON.parse(JSON.stringify(this.optHistoryCopy))},getAppInfo:function(){var e=this,t={url:"./jd",data:{sid:e.sid,appId:e.appId,id:e.id,type:e.modelType,cmd:"CONSOLE_M_METADATA_GET_INFO"}};e.awsuiaxios.post(t).then((function(t){if("ok"==t.result){var n=t.data.data;e.isManager=n.managedCheck,e.appIcon=n.appIcon,e.appIconFontCode=n.appIconFontCode,e.appIconFontColor=n.appIconFontColor,e.appName=n.appName,e.appId=n.appId,e.appVersionNo=n.appVersionNo,e.createTime=n.createTime,e.createUser=n.createUser,e.appDeveloperName=n.appDeveloperName,e.updateTime=n.updateTime,e.updateUser=n.updateUser,e.teamMembers=n.teamMembers,"undefined"!=typeof n.optHistory&&n.optHistory.length>0&&(e.optHistory=JSON.parse(JSON.stringify(n.optHistory)).splice(0,3),e.optHistoryCopy=JSON.parse(JSON.stringify(n.optHistory))),e.isReadOnlyAppAuth=n.isReadOnlyAppAuth,n.isReadOnlyAppAuth||(e.isReadOnlyAppAuth=!n.managedCheckEdit),0==n.optHistory.length?e.isShowOptHistory="none":e.isShowOptHistory=""}})).catch((function(e){console.log(e)}))}}},Ja=Qa,es=(n("eaf3"),Object(g["a"])(Ja,Xa,Za,!1,null,"e8df9950",null)),ts=es.exports;ts.install=function(e){e.component(ts.name,ts)};var ns=ts,is=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"aws-select",staticStyle:{display:"inline-block"},style:{width:e.width}},[n("el-select",{style:{width:e.width},attrs:{clearable:"",filterable:"","filter-method":e.dataFilter,placeholder:e.placeholder,size:"small","popper-append-to-body":!1,"popper-class":"select-option"},on:{clear:e.setValueNull,change:e.getValue},model:{value:e.defaultSelectValue,callback:function(t){e.defaultSelectValue=t},expression:"defaultSelectValue"}},e._l(e.options,(function(t){return n("el-option",{key:t.value,attrs:{label:t.label,value:t.value}},[n("span",{staticClass:"select-icon isStart"},[n("i",{staticClass:"awsui-iconfont",staticStyle:{"font-size":"13px"},domProps:{innerHTML:e._s(t.icon_isStart)}})]),n("span",{staticClass:"select-icon isMobile"},[n("i",{staticClass:"awsui-iconfont",staticStyle:{"font-size":"13px"},domProps:{innerHTML:e._s(t.icon_device_type)}})]),n("span",[e._v(e._s(t.label))]),n("span",{directives:[{name:"show",rawName:"v-show",value:t.isH5,expression:"item.isH5"}],staticClass:"select-icon isH5"},[n("i",{staticClass:"awsui-iconfont",staticStyle:{"font-size":"13px"},domProps:{innerHTML:e._s(t.icon_os_type)}})])])})),1)],1)},rs=[],os={name:"AwsAppSelect",props:["sid","width","filter","placeholder"],data:function(){return{optionsCopy:[],options:[],defaultSelectValue:""}},beforeCreate:function(){},created:function(){},beforeMount:function(){},mounted:function(){this.getAppOptions()},methods:{dataFilter:function(e){this.defaultSelectValue=e,this.options=e?this.optionsCopy.filter((function(t){if(t.label.indexOf(e)>-1||t.appId.toUpperCase().indexOf(e.toUpperCase())>-1)return!0})):this.optionsCopy},getAppOptions:function(){var e=this,t={url:"./jd",data:{sid:e.sid,param:e.filter,cmd:"CONSOLE_M_METADATA_GET_OPTIONS"}};e.awsuiaxios.post(t).then((function(t){if("ok"==t.result){var n=t.data;e.options=n.data,e.optionsCopy=n.data}})).catch((function(e){console.log(e)}))},getValue:function(e){this.defaultSelectValue=e,this.$emit("getResult",e),this.$emit("change",e)},setValueNull:function(){this.defaultSelectValue="",this.options=this.optionsCopy}}},as=os,ss=(n("3106"),Object(g["a"])(as,is,rs,!1,null,"9d9b4566",null)),ls=ss.exports;ls.install=function(e){e.component(ls.name,ls)};var cs=ls;function us(e){if(Array.isArray(e))return e}function ds(e,t){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(e)){var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done);i=!0)if(n.push(a.value),t&&n.length===t)break}catch(l){r=!0,o=l}finally{try{i||null==s["return"]||s["return"]()}finally{if(r)throw o}}return n}}function hs(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function fs(e,t){return us(e)||ds(e,t)||Object(vt["a"])(e,t)||hs()}var ps=n("c64e"),ms=n.n(ps),gs=0,vs={uuid:function(){return"obj_"+ms()().replace(/-/g,"")},getCountIndex:function(){return gs++},isNotNull:function(e){return void 0!==e&&null!=e&&e.length>0},isNull:function(e){return void 0===e||null===e||0===e.length},isNotNullObject:function(e){return void 0!==e&&Object.keys(e).length>0},queryObjectInArrayIndex:function(e,t,n){if(e instanceof Array){var i,r=bt(e.entries());try{for(r.s();!(i=r.n()).done;){var o=fs(i.value,2),a=o[0],s=o[1];return s[t]===n?a:-1}}catch(l){r.e(l)}finally{r.f()}}},getBrowser:function(){var e=navigator.userAgent.toLowerCase();return{isStrict:"CSS1Compat"==document.compatMode,isOpera:e.indexOf("opera")>-1,isSafari:e.indexOf("safari")>-1&&-1==e.indexOf("chrome"),isIE:"ActiveXObject"in window,isIE6:!this.isOpera&&e.indexOf("msie 6")>-1,isIE7:!this.isOpera&&e.indexOf("msie 7")>-1,isIE8:!this.isOpera&&e.indexOf("msie 8")>-1,isIE9:!this.isOpera&&e.indexOf("msie 9")>-1,isIE10:!this.isOpera&&e.indexOf("msie 10")>-1,isIE11:/trident\/7\./.test(e)&&e.indexOf("rv:11")>-1,isGecko:!this.isSafari&&e.indexOf("gecko")>-1,isFirefox:!this.isSafari&&e.indexOf("gecko")>-1&&e.indexOf("firefox")>-1,isChrome:-1!==e.indexOf("chrome"),isBorderBox:this.isIE&&!this.isStrict,isWindows:-1!=e.indexOf("windows")||-1!=e.indexOf("win32"),isMac:-1!=e.indexOf("macintosh")||-1!=e.indexOf("mac os x"),isAir:-1!=e.indexOf("adobeair"),isLinux:-1!=e.indexOf("linux"),isSecure:0===window.location.href.toLowerCase().indexOf("https"),isIPhone:null!=e.match(/(iphone\sos)\s([\d_]+)/)||null!=e.match(/(ipad).*os\s([\d_]+)/),isIPhoneX:/iphone/gi.test(window.navigator.userAgent)&&window.screen.height>=812,isIPad:null!=e.match(/(ipad).*os\s([\d_]+)/),isAWSMobilePortalApp:e.indexOf("awsmobileportal")>0,isAndroid:e.indexOf("android")>0,isDingtalk:e.indexOf("alibaba")>0||e.indexOf("dingtalk")>0&&e.indexOf("mobile")>0,isWechat:e.indexOf("micromessenger")>0&&-1==e.indexOf("wxwork"),isWxWork:e.indexOf("micromessenger")>0&&e.indexOf("wxwork")>0,isFeishu:e.indexOf("lark")>0,isWeLink:e.indexOf("welink")>0||e.indexOf("huawei")>0,isMobile:!!e.match(/(iphone|ipod|android|ios)/i)}}},bs={install:function(e,t){e.prototype.toolCustom=vs,e.prototype.awsuiTools=vs,e.prototype.browser=vs.getBrowser()}},ys=window.CodeMirror||u.a,ws=[y,_,S,N,z,U,J,ve,Ce,Ae,Be,Ke,et,st,pt,kt,Mt,Ft,Gt,an,di,bi,Si,Ni,zi,Ui,tr,fr,wr,Tr,no,uo,ra,da,wa,Ea,Pa,Va,ns,cs,Ya],xs=function e(t){e.installed||(l.install(t),ws.map((function(e){t.component(e.name,e)})),t.prototype.awsuiaxios=w["a"],t.prototype.$message=ho["a"],t.prototype.$msgbox=Zo,t.prototype.$alert=Zo.alert,t.prototype.$confirm=Zo.confirm,t.prototype.$prompt=Zo.prompt,bs.install(t),"undefined"!=typeof window&&(window.CodeMirror=ys))};"undefined"!==typeof window&&window.Vue&&xs(window.Vue);var _s={CodeMirror:ys,AwsuiCodemirror:y,install:xs,element:l,Row:_,Col:S,Button:N,ButtonGroup:z,Radio:U,Checkbox:J,Input:ve,InputNumber:Ce,Select:Ae,BOMetadataSelect:Be,Cascader:Ke,Switch:et,Slider:st,TimePicker:pt,ColorPicker:kt,IconPicker:Mt,Formula:Ft,Upload:Gt,AwsuiUploadImage:an,Tree:di,Layout:bi,Header:Si,Aside:Ni,Main:zi,Footer:Ui,Form:tr,FormItem:fr,DownSelect:wr,DownSelectItem:Tr,Tabs:no,TabPane:uo,Dialog:ra,Sidebar:da,Backtop:wa,CodeHelper:Ea,Address:Pa,inputIconClick:Va,AppInfo:ns,AppSelect:cs,DDictionary:Ya,tools:bs,Axios:w["a"]};t["default"]=_s},fb6a:function(e,t,n){"use strict";var i=n("23e7"),r=n("861d"),o=n("e8b5"),a=n("23cb"),s=n("50c4"),l=n("fc6a"),c=n("8418"),u=n("b622"),d=n("1dde"),h=n("ae40"),f=d("slice"),p=h("slice",{ACCESSORS:!0,0:0,1:2}),m=u("species"),g=[].slice,v=Math.max;i({target:"Array",proto:!0,forced:!f||!p},{slice:function(e,t){var n,i,u,d=l(this),h=s(d.length),f=a(e,h),p=a(void 0===t?h:t,h);if(o(d)&&(n=d.constructor,"function"!=typeof n||n!==Array&&!o(n.prototype)?r(n)&&(n=n[m],null===n&&(n=void 0)):n=void 0,n===Array||void 0===n))return g.call(d,f,p);for(i=new(void 0===n?Array:n)(v(p-f,0)),u=0;f<p;f++,u++)f in d&&c(i,u,d[f]);return i.length=u,i}})},fc21:function(e,t,n){"use strict";var i=n("ace4"),r=n.n(i);r.a},fc5e:function(e,t){var n=Math.ceil,i=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?i:n)(e)}},fc6a:function(e,t,n){var i=n("44ad"),r=n("1d80");e.exports=function(e){return i(r(e))}},fcd4:function(e,t,n){t.f=n("cc15")},fdbc:function(e,t){e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},fdbf:function(e,t,n){var i=n("4930");e.exports=i&&!Symbol.sham&&"symbol"==_typeof2(Symbol.iterator)},fea9:function(e,t,n){var i=n("da84");e.exports=i.Promise},fed5:function(e,t){t.f=Object.getOwnPropertySymbols},ffda:function(e,t,n){(function(e){e(n("56b3"))})((function(e){"use strict";function t(e){var t;while(null!=(t=e.next()))if("`"==t&&!e.eat("`"))return"variable-2";return e.backUp(e.current().length-1),e.eatWhile(/\w/)?"variable-2":null}function n(e){var t;while(null!=(t=e.next()))if('"'==t&&!e.eat('"'))return"variable-2";return e.backUp(e.current().length-1),e.eatWhile(/\w/)?"variable-2":null}function i(e){return e.eat("@")&&(e.match(/^session\./),e.match(/^local\./),e.match(/^global\./)),e.eat("'")?(e.match(/^.*'/),"variable-2"):e.eat('"')?(e.match(/^.*"/),"variable-2"):e.eat("`")?(e.match(/^.*`/),"variable-2"):e.match(/^[0-9a-zA-Z$\.\_]+/)?"variable-2":null}function r(e){return e.eat("N")?"atom":e.match(/^[a-zA-Z.#!?]/)?"variable-2":null}e.defineMode("sql",(function(t,n){var i=n.client||{},r=n.atoms||{false:!0,true:!0,null:!0},l=n.builtin||a(s),c=n.keywords||a(o),u=n.operatorChars||/^[*+\-%<>!=&|~^\/]/,d=n.support||{},h=n.hooks||{},f=n.dateSQL||{date:!0,time:!0,timestamp:!0},p=!1!==n.backslashStringEscapes,m=n.brackets||/^[\{}\(\)\[\]]/,g=n.punctuation||/^[;.,:]/;function v(e,t){var n=e.next();if(h[n]){var o=h[n](e,t);if(!1!==o)return o}if(d.hexNumber&&("0"==n&&e.match(/^[xX][0-9a-fA-F]+/)||("x"==n||"X"==n)&&e.match(/^'[0-9a-fA-F]+'/)))return"number";if(d.binaryNumber&&(("b"==n||"B"==n)&&e.match(/^'[01]+'/)||"0"==n&&e.match(/^b[01]+/)))return"number";if(n.charCodeAt(0)>47&&n.charCodeAt(0)<58)return e.match(/^[0-9]*(\.[0-9]+)?([eE][-+]?[0-9]+)?/),d.decimallessFloat&&e.match(/^\.(?!\.)/),"number";if("?"==n&&(e.eatSpace()||e.eol()||e.eat(";")))return"variable-3";if("'"==n||'"'==n&&d.doubleQuote)return t.tokenize=b(n),t.tokenize(e,t);if((d.nCharCast&&("n"==n||"N"==n)||d.charsetCast&&"_"==n&&e.match(/[a-z][a-z0-9]*/i))&&("'"==e.peek()||'"'==e.peek()))return"keyword";if(d.escapeConstant&&("e"==n||"E"==n)&&("'"==e.peek()||'"'==e.peek()&&d.doubleQuote))return t.tokenize=function(e,t){return(t.tokenize=b(e.next(),!0))(e,t)},"keyword";if(d.commentSlashSlash&&"/"==n&&e.eat("/"))return e.skipToEnd(),"comment";if(d.commentHash&&"#"==n||"-"==n&&e.eat("-")&&(!d.commentSpaceRequired||e.eat(" ")))return e.skipToEnd(),"comment";if("/"==n&&e.eat("*"))return t.tokenize=y(1),t.tokenize(e,t);if("."!=n){if(u.test(n))return e.eatWhile(u),"operator";if(m.test(n))return"bracket";if(g.test(n))return e.eatWhile(g),"punctuation";if("{"==n&&(e.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/)||e.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/)))return"number";e.eatWhile(/^[_\w\d]/);var a=e.current().toLowerCase();return f.hasOwnProperty(a)&&(e.match(/^( )+'[^']*'/)||e.match(/^( )+"[^"]*"/))?"number":r.hasOwnProperty(a)?"atom":l.hasOwnProperty(a)?"builtin":c.hasOwnProperty(a)?"keyword":i.hasOwnProperty(a)?"string-2":null}return d.zerolessFloat&&e.match(/^(?:\d+(?:e[+-]?\d+)?)/i)?"number":e.match(/^\.+/)?null:d.ODBCdotTable&&e.match(/^[\w\d_$#]+/)?"variable-2":void 0}function b(e,t){return function(n,i){var r,o=!1;while(null!=(r=n.next())){if(r==e&&!o){i.tokenize=v;break}o=(p||t)&&!o&&"\\"==r}return"string"}}function y(e){return function(t,n){var i=t.match(/^.*?(\/\*|\*\/)/);return i?"/*"==i[1]?n.tokenize=y(e+1):n.tokenize=e>1?y(e-1):v:t.skipToEnd(),"comment"}}function w(e,t,n){t.context={prev:t.context,indent:e.indentation(),col:e.column(),type:n}}function x(e){e.indent=e.context.indent,e.context=e.context.prev}return{startState:function(){return{tokenize:v,context:null}},token:function(e,t){if(e.sol()&&t.context&&null==t.context.align&&(t.context.align=!1),t.tokenize==v&&e.eatSpace())return null;var n=t.tokenize(e,t);if("comment"==n)return n;t.context&&null==t.context.align&&(t.context.align=!0);var i=e.current();return"("==i?w(e,t,")"):"["==i?w(e,t,"]"):t.context&&t.context.type==i&&x(t),n},indent:function(n,i){var r=n.context;if(!r)return e.Pass;var o=i.charAt(0)==r.type;return r.align?r.col+(o?0:1):r.indent+(o?0:t.indentUnit)},blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:d.commentSlashSlash?"//":d.commentHash?"#":"--",closeBrackets:"()[]{}''\"\"``"}}));var o="alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit ";function a(e){for(var t={},n=e.split(" "),i=0;i<n.length;++i)t[n[i]]=!0;return t}var s="bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric";e.defineMIME("text/x-sql",{name:"sql",keywords:a(o+"begin"),builtin:a(s),atoms:a("false true null unknown"),dateSQL:a("date time timestamp"),support:a("ODBCdotTable doubleQuote binaryNumber hexNumber")}),e.defineMIME("text/x-mssql",{name:"sql",client:a("$partition binary_checksum checksum connectionproperty context_info current_request_id error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big xact_state object_id"),keywords:a(o+"begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare exec go if use index holdlock nolock nowait paglock readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot tablock tablockx updlock with"),builtin:a("bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table "),atoms:a("is not null like and or in left right between inner outer join all any some cross unpivot pivot exists"),operatorChars:/^[*+\-%<>!=^\&|\/]/,brackets:/^[\{}\(\)]/,punctuation:/^[;.,:/]/,backslashStringEscapes:!1,dateSQL:a("date datetimeoffset datetime2 smalldatetime datetime time"),hooks:{"@":i}}),e.defineMIME("text/x-mysql",{name:"sql",client:a("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:a(o+"accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:a("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:a("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:a("date time timestamp"),support:a("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":i,"`":t,"\\":r}}),e.defineMIME("text/x-mariadb",{name:"sql",client:a("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:a(o+"accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group groupby_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:a("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:a("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:a("date time timestamp"),support:a("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":i,"`":t,"\\":r}}),e.defineMIME("text/x-sqlite",{name:"sql",client:a("auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width"),keywords:a(o+"abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without"),builtin:a("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real"),atoms:a("null current_date current_time current_timestamp"),operatorChars:/^[*+\-%<>!=&|/~]/,dateSQL:a("date time timestamp datetime"),support:a("decimallessFloat zerolessFloat"),identifierQuote:'"',hooks:{"@":i,":":i,"?":i,$:i,'"':n,"`":t}}),e.defineMIME("text/x-cassandra",{name:"sql",client:{},keywords:a("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"),builtin:a("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"),atoms:a("false true infinity NaN"),operatorChars:/^[<>=]/,dateSQL:{},support:a("commentSlashSlash decimallessFloat"),hooks:{}}),e.defineMIME("text/x-plsql",{name:"sql",client:a("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"),keywords:a("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"),builtin:a("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"),operatorChars:/^[*\/+\-%<>!=~]/,dateSQL:a("date time timestamp"),support:a("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber")}),e.defineMIME("text/x-hive",{name:"sql",keywords:a("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with admin authorization char compact compactions conf cube current current_date current_timestamp day decimal defined dependency directories elem_type exchange file following for grouping hour ignore inner interval jar less logical macro minute month more none noscan over owner partialscan preceding pretty principals protection reload rewrite role roles rollup rows second server sets skewed transactions truncate unbounded unset uri user values window year"),builtin:a("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype key_type utctimestamp value_type varchar"),atoms:a("false true null unknown"),operatorChars:/^[*+\-%<>!=]/,dateSQL:a("date timestamp"),support:a("ODBCdotTable doubleQuote binaryNumber hexNumber")}),e.defineMIME("text/x-pgsql",{name:"sql",client:a("source"),keywords:a(o+"a abort abs absent absolute access according action ada add admin after aggregate alias all allocate also alter always analyse analyze and any are array array_agg array_max_cardinality as asc asensitive assert assertion assignment asymmetric at atomic attach attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli between bigint binary bit bit_length blob blocked bom boolean both breadth by c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain char char_length character character_length character_set_catalog character_set_name character_set_schema characteristics characters check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column column_name columns command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constant constraint constraint_catalog constraint_name constraint_schema constraints constructor contains content continue control conversion convert copy corr corresponding cost count covar_pop covar_samp create cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datatype date datetime_interval_code datetime_interval_precision day db deallocate debug dec decimal declare default defaults deferrable deferred defined definer degree delete delimiter delimiters dense_rank depends depth deref derived desc describe descriptor detach detail deterministic diagnostics dictionary disable discard disconnect dispatch distinct dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain double drop dump dynamic dynamic_function dynamic_function_code each element else elseif elsif empty enable encoding encrypted end end_frame end_partition endexec enforced enum equals errcode error escape event every except exception exclude excluding exclusive exec execute exists exit exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreach foreign fortran forward found frame_row free freeze from fs full function functions fusion g general generated get global go goto grant granted greatest group grouping groups handler having header hex hierarchy hint hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import in include including increment indent index indexes indicator info inherit inherits initially inline inner inout input insensitive insert instance instantiable instead int integer integrity intersect intersection interval into invoker is isnull isolation join k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like like_regex limit link listen ln load local localtime localtimestamp location locator lock locked log logged loop lower m map mapping match matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized not nothing notice notify notnull nowait nth_value ntile null nullable nullif nulls number numeric object occurrences_regex octet_length octets of off offset oids old on only open operator option options or order ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parallel parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password path percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding precision prepare prepared preserve primary print_strict_params prior privileges procedural procedure procedures program public publication query quote raise range rank read reads real reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result result_oid return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns reverse revoke right role rollback rollup routine routine_catalog routine_name routine_schema routines row row_count row_number rows rowtype rule savepoint scale schema schema_name schemas scope scope_catalog scope_name scope_schema scroll search second section security select selective self sensitive sequence sequences serializable server server_name session session_user set setof sets share show similar simple size skip slice smallint snapshot some source space specific specific_name specifictype sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable stacked standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time system_user t table table_name tables tablesample tablespace temp template temporary text then ties time timestamp timezone_hour timezone_minute to token top_level_count trailing transaction transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted union unique unknown unlink unlisten unlogged unnamed unnest until untyped update upper uri usage use_column use_variable user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of values var_pop var_samp varbinary varchar variable_conflict variadic varying verbose version versioning view views volatile warning when whenever where while whitespace width_bucket window with within without work wrapper write xml xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes zone"),builtin:a("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),atoms:a("false true null unknown"),operatorChars:/^[*\/+\-%<>!=&|^\/#@?~]/,backslashStringEscapes:!1,dateSQL:a("date time timestamp"),support:a("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast escapeConstant")}),e.defineMIME("text/x-gql",{name:"sql",keywords:a("ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where"),atoms:a("false true"),builtin:a("blob datetime first key __key__ string integer double boolean null"),operatorChars:/^[*+\-%<>!=]/}),e.defineMIME("text/x-gpsql",{name:"sql",client:a("source"),keywords:a("abort absolute access action active add admin after aggregate all also alter always analyse analyze and any array as asc assertion assignment asymmetric at authorization backward before begin between bigint binary bit boolean both by cache called cascade cascaded case cast chain char character characteristics check checkpoint class close cluster coalesce codegen collate column comment commit committed concurrency concurrently configuration connection constraint constraints contains content continue conversion copy cost cpu_rate_limit create createdb createexttable createrole createuser cross csv cube current current_catalog current_date current_role current_schema current_time current_timestamp current_user cursor cycle data database day deallocate dec decimal declare decode default defaults deferrable deferred definer delete delimiter delimiters deny desc dictionary disable discard distinct distributed do document domain double drop dxl each else enable encoding encrypted end enum errors escape every except exchange exclude excluding exclusive execute exists explain extension external extract false family fetch fields filespace fill filter first float following for force foreign format forward freeze from full function global grant granted greatest group group_id grouping handler hash having header hold host hour identity if ignore ilike immediate immutable implicit in including inclusive increment index indexes inherit inherits initially inline inner inout input insensitive insert instead int integer intersect interval into invoker is isnull isolation join key language large last leading least left level like limit list listen load local localtime localtimestamp location lock log login mapping master match maxvalue median merge minute minvalue missing mode modifies modify month move name names national natural nchar new newline next no nocreatedb nocreateexttable nocreaterole nocreateuser noinherit nologin none noovercommit nosuperuser not nothing notify notnull nowait null nullif nulls numeric object of off offset oids old on only operator option options or order ordered others out outer over overcommit overlaps overlay owned owner parser partial partition partitions passing password percent percentile_cont percentile_disc placing plans position preceding precision prepare prepared preserve primary prior privileges procedural procedure protocol queue quote randomly range read readable reads real reassign recheck recursive ref references reindex reject relative release rename repeatable replace replica reset resource restart restrict returning returns revoke right role rollback rollup rootpartition row rows rule savepoint scatter schema scroll search second security segment select sequence serializable session session_user set setof sets share show similar simple smallint some split sql stable standalone start statement statistics stdin stdout storage strict strip subpartition subpartitions substring superuser symmetric sysid system table tablespace temp template temporary text then threshold ties time timestamp to trailing transaction treat trigger trim true truncate trusted type unbounded uncommitted unencrypted union unique unknown unlisten until update user using vacuum valid validation validator value values varchar variadic varying verbose version view volatile web when where whitespace window with within without work writable write xml xmlattributes xmlconcat xmlelement xmlexists xmlforest xmlparse xmlpi xmlroot xmlserialize year yes zone"),builtin:a("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),atoms:a("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^\/#@?~]/,dateSQL:a("date time timestamp"),support:a("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast")}),e.defineMIME("text/x-sparksql",{name:"sql",keywords:a("add after all alter analyze and anti archive array as asc at between bucket buckets by cache cascade case cast change clear cluster clustered codegen collection column columns comment commit compact compactions compute concatenate cost create cross cube current current_date current_timestamp database databases datata dbproperties defined delete delimited deny desc describe dfs directories distinct distribute drop else end escaped except exchange exists explain export extended external false fields fileformat first following for format formatted from full function functions global grant group grouping having if ignore import in index indexes inner inpath inputformat insert intersect interval into is items join keys last lateral lazy left like limit lines list load local location lock locks logical macro map minus msck natural no not null nulls of on optimize option options or order out outer outputformat over overwrite partition partitioned partitions percent preceding principals purge range recordreader recordwriter recover reduce refresh regexp rename repair replace reset restrict revoke right rlike role roles rollback rollup row rows schema schemas select semi separated serde serdeproperties set sets show skewed sort sorted start statistics stored stratify struct table tables tablesample tblproperties temp temporary terminated then to touch transaction transactions transform true truncate unarchive unbounded uncache union unlock unset use using values view when where window with"),builtin:a("tinyint smallint int bigint boolean float double string binary timestamp decimal array map struct uniontype delimited serde sequencefile textfile rcfile inputformat outputformat"),atoms:a("false true null"),operatorChars:/^[*\/+\-%<>!=~&|^]/,dateSQL:a("date time timestamp"),support:a("ODBCdotTable doubleQuote zerolessFloat")}),e.defineMIME("text/x-esper",{name:"sql",client:a("source"),keywords:a("alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit after all and as at asc avedev avg between by case cast coalesce count create current_timestamp day days delete define desc distinct else end escape events every exists false first from full group having hour hours in inner insert instanceof into irstream is istream join last lastweekday left limit like max match_recognize matches median measures metadatasql min minute minutes msec millisecond milliseconds not null offset on or order outer output partition pattern prev prior regexp retain-union retain-intersection right rstream sec second seconds select set some snapshot sql stddev sum then true unidirectional until update variable weekday when where window"),builtin:{},atoms:a("false true null"),operatorChars:/^[*+\-%<>!=&|^\/#@?~]/,dateSQL:a("time"),support:a("decimallessFloat zerolessFloat binaryNumber hexNumber")})}))}})}))}).call(this,__webpack_require__("adb6")(module))},1916:function(e,t,n){},2166:function(e,t,n){},4360:function(e,t,n){"use strict";var i=n("430a"),r=n("7736");i["default"].use(r["a"]),t["a"]=new r["a"].Store({state:{sessionId:settingParam.sessionId,topMainHeight:"",navigationQueryVisible:!1,navigationConditionQueryVisible:!1,wsId:"",teamId:""},getters:{getTopMainHeightFn:function(e){return e.topMainHeight},getNavigationQueryVisibleFn:function(e){return e.navigationQueryVisible},getNavigationConditionQueryVisibleFn:function(e){return e.navigationConditionQueryVisible},getTeamIdFn:function(e){return e.teamId},getWsIdFn:function(e){return e.wsId}},actions:{setTopMainHeightFn:function(e,t){var n=e.commit;e.state;n("setTopMainHeightFn",t)},setNavigationQueryVisibleFn:function(e,t){var n=e.commit;e.state;n("setNavigationQueryVisibleFn",t)},setNavigationConditionQueryVisibleFn:function(e,t){var n=e.commit;e.state;n("setNavigationConditionQueryVisibleFn",t)},setTeamIdFn:function(e,t){var n=e.commit;e.state;n("setTeamIdFn",t)},setWsIdFn:function(e,t){var n=e.commit;e.state;n("setWsIdFn",t)}},mutations:{setTopMainHeightFn:function(e,t){e.topMainHeight=t},setNavigationQueryVisibleFn:function(e,t){e.navigationQueryVisible=t},setNavigationConditionQueryVisibleFn:function(e,t){e.navigationConditionQueryVisible=t},setTeamIdFn:function(e,t){e.teamId=t},setWsIdFn:function(e,t){e.wsId=t},edit:function(e,t){for(var n in t)e[n]=t[n]}},modules:{}})},"48e7":function(e,t,n){},"56d7":function(e,t,n){"use strict";n.r(t);var i=n("9f45"),r=n.n(i),o=n("430a"),a=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"app"}},[n("router-view")],1)},s=[],l=n("cba8"),c={},u=Object(l["a"])(c,a,s,!1,null,null,null),d=u.exports,h=n("a18c"),f=n("4360"),p=n("183b"),m=n.n(p),g=(n("015b"),n("1916"),n("2166"),n("be35"),n("9fed")),v=n("f7e4");n("48e7");function b(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?b(Object(n),!0).forEach((function(t){w(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):b(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function w(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var x={notNull:"必填",imperfect:"{_field_}信息不完善"};Object(g["d"])("not_doubleQuotes",{validate:function(e){return e.indexOf('"')<0},message:"{_field_}不能包含字符'\"'"}),Object(g["d"])("not_colon",{validate:function(e){return e.indexOf(":")<0},message:"{_field_}不能包含字符':'"}),Object(g["d"])("not_apostrophe",{validate:function(e){return e.indexOf("'")<0},message:"{_field_}不能包含字符'"}),Object(g["d"])("legal_class_name",{validate:function(e){var t=/^[a-zA-Z]+[0-9a-zA-Z_]*(\.[a-zA-Z]+[0-9a-zA-Z_]*)*\.[a-zA-Z]+[0-9a-zA-Z_]*$/g;return t.test(e)},message:"java类名不合法"}),Object(g["d"])("not_null",{validate:function(e){return""!==e&&e.length>0},message:"{_field_}信息不完善"}),Object(g["d"])("maxLength",{validate:function(e,t){var n=t.max;return e.length<=n},params:["max"],message:"不允许超过{max}个字符"}),Object(g["d"])("minMax",{validate:function(e,t){var n=t.min,i=t.max;return e=parseInt(e),n=parseInt(n),i=parseInt(i),n<=e&&e<=i},params:["min","max"],message:"{_field_}只能在{min}到{max}之间,且包含{min}和{max}"}),Object(g["d"])("is_number",{validate:function(e){return new RegExp("^[0-9]*$").test(e)},message:"{_field_}只能是正整数"}),Object(g["d"])("javaScript_required",{validate:function(e){var t=/^function[\n\s]+(.+)[\n\s]*\((.*)\)[\n\s]*{((.|\n)*)}[\n\s]*$/g;return t.test(e)},message:"{_field_}语法错误,请检查"}),Object(g["d"])("required",y(y({},v["a"]),{},{message:x.notNull})),Object(g["d"])("teamName_formatCheck",{validate:function(e){var t=/^[a-zA-Z0-9_\u4e00-\u9fa5]+$/g;return t.test(e)},message:"只能输入字母、数字、汉字或下划线"}),Object(g["c"])({classes:{valid:"is-valid ",invalid:"is-invalid",dirty:["is-dirty","is-dirty"]}}),o["default"].component("ValidationProvider",g["b"]),o["default"].component("ValidationObserver",g["a"]),o["default"].use(r.a),o["default"].use(m.a),o["default"].config.productionTip=!1,new o["default"]({router:h["a"],store:f["a"],render:function(e){return e(d)}}).$mount("#app")},a18c:function(e,t,n){"use strict";var i=n("430a"),r=n("1ceb"),o=n("4360");i["default"].use(r["a"]);var a=[{path:"/",name:"main",component:function(){return Promise.all([n.e("chunk-bf7921b8"),n.e("chunk-5ca06e36"),n.e("chunk-2d0b25b0"),n.e("chunk-b9b8e2d8")]).then(n.bind(null,"cd56"))},children:[{path:"/workspace",name:"workspace",component:function(){return Promise.all([n.e("chunk-bf7921b8"),n.e("chunk-5ca06e36"),n.e("chunk-8cb92970")]).then(n.bind(null,"e5a6"))}},{path:"/cooperationCreate",name:"cooperationCreate",component:function(){return n.e("chunk-2d216d3a").then(n.bind(null,"c3b6"))}},{path:"/repository",name:"repository",component:function(){return Promise.all([n.e("chunk-bf7921b8"),n.e("chunk-5ca06e36"),n.e("chunk-2d0b25b0"),n.e("chunk-b0787fd8")]).then(n.bind(null,"7eb6"))}},{path:"/manage",name:"管理中心",component:function(){return Promise.all([n.e("chunk-bf7921b8"),n.e("chunk-0ba0316e"),n.e("chunk-5a76c238")]).then(n.bind(null,"7e21"))},children:[{path:"/workspaceManage",name:"资产库管理",component:function(){return Promise.all([n.e("chunk-bf7921b8"),n.e("chunk-4e7e9573")]).then(n.bind(null,"1305"))}},{path:"/cooperationUpdate",name:"PAL小组更新(管理)",component:function(){return n.e("chunk-2d224b23").then(n.bind(null,"e0df"))}},{path:"/palUser",name:"PAL用户",component:function(){return Promise.all([n.e("chunk-bf7921b8"),n.e("chunk-0ba0316e")]).then(n.bind(null,"9419"))}},{path:"/bpmOrg",name:"BPM组织架构",component:function(){return n.e("chunk-2d0f078a").then(n.bind(null,"9d09"))}},{path:"/mappingManagement_correlated",name:"mappingManagement_correlated",component:function(){return n.e("chunk-2d0ab156").then(n.bind(null,"1485"))}},{path:"/mappingManagement_palNotCorrelated",name:"mappingManagement_palNotCorrelated",component:function(){return n.e("chunk-2d0ab156").then(n.bind(null,"1485"))}},{path:"/mappingManagement_bpmNotCorrelated",name:"mappingManagement_bpmNotCorrelated",component:function(){return n.e("chunk-2d0ab156").then(n.bind(null,"1485"))}},{path:"/themeStyle",component:function(){return Promise.all([n.e("chunk-bf7921b8"),n.e("chunk-5ca06e36"),n.e("chunk-6f1c20e8")]).then(n.bind(null,"b98e"))}},{path:"/commonRepository",component:function(){return Promise.all([n.e("chunk-bf7921b8"),n.e("chunk-2d0b25b0"),n.e("chunk-4def56c4")]).then(n.bind(null,"82bd"))}},{path:"/userGroup",component:function(){return Promise.all([n.e("chunk-bf7921b8"),n.e("chunk-055385ac")]).then(n.bind(null,"b6ab"))}}]}]},{path:"/devGetSession",name:"devGetSession",component:function(){return Promise.all([n.e("chunk-bf7921b8"),n.e("chunk-2d224ef1")]).then(n.bind(null,"e1f5"))}}],s=new r["a"]({routes:a});s.beforeEach((function(e,t,n){!1===production&&null==o["a"].state.sessionId&&"/devGetSession"!=e.path?n("/devGetSession"):n()})),s.afterEach((function(e,t,n){window.scrollTo(0,0)})),t["a"]=s},be35:function(e,t,n){}});
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-055385ac.1997663e.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-055385ac.1997663e.js
                                                  new file mode 100644
                                                  index 00000000..8ca3089f
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-055385ac.1997663e.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-055385ac"],{"18b4":function(e,o,a){"use strict";a("e1cf")},b6ab:function(e,o,a){"use strict";a.r(o);var t=function(){var e=this,o=e.$createElement,a=e._self._c||o;return a("el-container",{attrs:{id:"userGroup"}},[a("el-header",{attrs:{height:e.headerHeight}},[a("el-col",{staticStyle:{position:"relative",top:"10px"},attrs:{span:24}},[a("div",{staticStyle:{display:"inline-block",float:"left"}},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"100px"},attrs:{type:"primary"},on:{click:function(o){return e.addUserGroup()}}},[e._v("新建用户组")])],1),a("div",{staticStyle:{display:"inline-block",float:"right",width:"320px","padding-right":"20px"}},[a("el-input",{attrs:{placeholder:"搜索","prefix-icon":"el-icon-search",size:"small",clearable:""},on:{input:e.searchUserGroup},model:{value:e.searchInput,callback:function(o){e.searchInput=o},expression:"searchInput"}})],1)]),a("el-dialog",{directives:[{name:"loading",rawName:"v-loading",value:e.dlgLoading,expression:"dlgLoading"}],attrs:{title:e.dialog.title,visible:e.dialog.visible,"modal-append-to-body":!1,"close-on-click-modal":!1,"close-on-press-escape":!0,"before-close":e.handleCloseDlg,"destroy-on-close":"",width:"700px"},on:{"update:visible":function(o){return e.$set(e.dialog,"visible",o)},close:e.clearDlgData}},[a("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}]},[a("el-steps",{attrs:{active:e.dialog.active,"align-center":""}},[a("el-step",{attrs:{title:"基本信息"}}),a("el-step",{attrs:{title:"关联角色"}}),a("el-step",{attrs:{title:"数据权限"}})],1),a("div",{staticStyle:{padding:"10px",border:"1px solid #e9e9e9"}},[a("div",{directives:[{name:"show",rawName:"v-show",value:1==e.dialog.active,expression:"dialog.active == 1"}],staticStyle:{height:"300px"}},[a("awsui-form",{ref:"infoForm",attrs:{model:e.dialog.basicInfo.infoForm,rules:e.dialog.basicInfo.rules,"label-width":"100px","label-position":"top"}},[a("awsui-form-item",{attrs:{label:"分类",prop:"category"}},[a("awsui-select",{attrs:{"validate-event":!1,filterable:"","allow-create":"","default-first-option":"",placeholder:"请选择/输入分类",options:e.dialog.basicInfo.infoForm.category.options},on:{change:e.changeType},model:{value:e.dialog.basicInfo.infoForm.category.value,callback:function(o){e.$set(e.dialog.basicInfo.infoForm.category,"value",o)},expression:"dialog.basicInfo.infoForm.category.value"}})],1),a("awsui-form-item",{attrs:{label:"名称",prop:"name"}},[a("awsui-input",{attrs:{placeholder:"请输入名称","validate-event":!1},model:{value:e.dialog.basicInfo.infoForm.name,callback:function(o){e.$set(e.dialog.basicInfo.infoForm,"name",o)},expression:"dialog.basicInfo.infoForm.name"}})],1),a("awsui-form-item",{attrs:{label:"简介",prop:"desc"}},[a("awsui-input",{attrs:{type:"textarea",placeholder:"请输入简介"},model:{value:e.dialog.basicInfo.infoForm.desc,callback:function(o){e.$set(e.dialog.basicInfo.infoForm,"desc",o)},expression:"dialog.basicInfo.infoForm.desc"}})],1)],1)],1),a("div",{directives:[{name:"show",rawName:"v-show",value:2==e.dialog.active,expression:"dialog.active == 2"}],staticStyle:{height:"300px"}},[a("el-tree",{ref:"roleTree",staticStyle:{height:"100%",overflow:"auto"},attrs:{props:e.dialog.roleConfig.props,"default-checked-keys":e.dialog.roleConfig.value,"expand-on-click-node":!1,"highlight-current":!0,"check-strictly":"",load:e.loadRoleNode,lazy:"","show-checkbox":"","default-expand-all":!1,"node-key":"id"},on:{"node-expand":e.expandRoleNode,"node-collapse":e.closeRoleNode,"check-change":e.checkedRoleNode},scopedSlots:e._u([{key:"default",fn:function(o){o.node;var t=o.data;return a("span",{},[a("i",{staticClass:"awsui-iconfont tree-content-icon tree-content-icon-padding",style:{color:t.iconFont.color,position:"relative",top:"-1px"},domProps:{innerHTML:e._s(t.iconFont.code)}}),a("span",[e._v(e._s(t.label))])])}}])})],1),a("div",{directives:[{name:"show",rawName:"v-show",value:3==e.dialog.active,expression:"dialog.active == 3"}],staticStyle:{height:"300px"}},[a("el-select",{staticStyle:{width:"100%"},attrs:{filterable:"","default-first-option":"",size:"small",placeholder:"请选择资产库"},on:{change:e.changeWs},model:{value:e.dialog.repositoryPerm.ws.value,callback:function(o){e.$set(e.dialog.repositoryPerm.ws,"value",o)},expression:"dialog.repositoryPerm.ws.value"}},e._l(e.dialog.repositoryPerm.ws.options,(function(e){return a("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1),a("div",{staticStyle:{height:"268px",overflow:"auto"}},[""!=e.dialog.repositoryPerm.ws.value?a("el-tree",{ref:"repositoryTree",attrs:{props:e.dialog.repositoryPerm.tree.props,"default-checked-keys":e.dialog.repositoryPerm.tree.value,"expand-on-click-node":!1,"highlight-current":!0,"check-strictly":"","show-checkbox":"","node-key":"versionId",lazy:"",load:e.loadNode},on:{"node-click":e.openNode,"node-expand":e.expandNode,"node-collapse":e.closeNode,"check-change":e.checkedNode},scopedSlots:e._u([{key:"default",fn:function(o){var t=o.node;o.data;return a("span",{},[a("i",{staticClass:"awsui-iconfont tree-content-icon tree-content-icon-padding",style:{color:t.data.icon.color},domProps:{innerHTML:e._s(t.data.icon.icon)}}),a("span",[e._v(e._s(t.data.name))])])}}],null,!1,1613751043)}):e._e()],1)],1)])],1),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{directives:[{name:"show",rawName:"v-show",value:2==e.dialog.active||3==e.dialog.active,expression:"dialog.active == 2 || dialog.active == 3"}],staticClass:"button-general-color-reverse",on:{click:function(){e.dialog.active--}}},[e._v("上一步")]),a("awsui-button",{directives:[{name:"show",rawName:"v-show",value:1==e.dialog.active||2==e.dialog.active,expression:"dialog.active == 1 || dialog.active == 2"}],staticClass:"button-general-color",attrs:{type:"primary"},on:{click:e.next}},[e._v("下一步")]),a("awsui-button",{directives:[{name:"show",rawName:"v-show",value:3==e.dialog.active,expression:"dialog.active == 3"}],staticClass:"button-general-color",attrs:{type:"primary"},on:{click:function(o){return e.saveUserGroup(e.dialog.updateId)}}},[e._v("确定")])],1)])],1),a("el-main",[a("div",{style:{height:e.mainHeight,width:"100%"},attrs:{id:"main"}},[a("el-table",{staticStyle:{width:"100%"},attrs:{height:e.mainHeight,data:e.data}},[a("el-table-column",{attrs:{prop:"no",label:"序号",align:"center",width:"50"}}),a("el-table-column",{attrs:{prop:"name",label:"名称","show-overflow-tooltip":!0,width:"250"}}),a("el-table-column",{attrs:{prop:"category",label:"分类",width:"150"}}),a("el-table-column",{attrs:{prop:"wsName",label:"关联资产库","show-overflow-tooltip":!0,width:"200"}}),a("el-table-column",{attrs:{prop:"desc",label:"说明"}}),a("el-table-column",{attrs:{prop:"opt",label:"操作",align:"center",width:"80"},scopedSlots:e._u([{key:"default",fn:function(o){return[a("div",{staticClass:"operate-icon-display"},[a("p",{staticClass:"text-second-color"},[a("i",{staticClass:"awsui-iconfont",staticStyle:{display:"inline-block",cursor:"pointer","margin-right":"15px"},on:{click:function(a){return e.addUserGroup(o.row.id)}}},[e._v("")]),a("i",{staticClass:"awsui-iconfont",staticStyle:{display:"inline-block",cursor:"pointer"},on:{click:function(a){return e.deleteUserGroup(o.row.id,o.row.name)}}},[e._v("")])])])]}}])})],1)],1)])],1)},i=[],s=a("0f08"),l={name:"userGroup",data:function(){return{headerHeight:"50px",mainHeight:parseInt(this.$store.getters.getTopMainHeightFn)-52+"px",loading:!1,dlgLoading:!1,searchInput:"",data:[],dataTemp:[],dialog:{active:1,visible:!1,title:"新建用户组",updateId:"",basicInfo:{infoForm:{name:"",category:{value:"",options:[]},desc:"",groupCode:""},rules:{category:[{required:!0,message:"[分类]不允许为空",trigger:"blur"}],name:[{required:!0,message:"[名称]不允许为空",trigger:"blur"}]}},roleConfig:{data:[],props:{label:"label",isLeaf:"leaf"},value:[]},repositoryPerm:{ws:{value:"",options:[]},tree:{props:{children:"children",label:"label",isLeaf:"leaf"},value:[]}}}}},mounted:function(){document.body.ondrop=function(e){e.preventDefault(),e.stopPropagation()},this.initData()},methods:{initData:function(){var e=this,o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_list"}};s["a"].post(o).then((function(o){if("ok"==o.result){var a=o.data;e.data=e.handleDataNo(a),e.dataTemp=JSON.parse(JSON.stringify(e.data))}else this.$message({message:o.msg,type:"warning"})})).catch((function(e){console.log(e)}))},handleDataNo:function(e){for(var o=0;o<e.length;o++)e[o].no=o+1;return e},searchUserGroup:function(){if(this.searchInput&&""!=this.searchInput.trim()){for(var e=[],o=0;o<this.dataTemp.length;o++)(this.dataTemp[o].name.indexOf(this.searchInput)>-1||this.dataTemp[o].category.indexOf(this.searchInput)>-1||this.dataTemp[o].wsName.indexOf(this.searchInput)>-1||this.dataTemp[o].desc.indexOf(this.searchInput)>-1)&&e.push(this.dataTemp[o]);this.data=this.handleDataNo(e)}else this.data=this.handleDataNo(this.dataTemp)},addUserGroup:function(e){this.dialog.updateId="",e?(this.dialog.updateId=e,this.dialog.title="修改用户组"):this.dialog.title="新建用户组",this.dialog.visible=!0,this.loading=!0;var o=this,a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_create_data_query",id:void 0==e?"":e}};s["a"].post(a).then((function(e){if("ok"==e.result){var a=e.data;o.dialog.basicInfo.infoForm.name=a.name,o.dialog.basicInfo.infoForm.category.value=a.category,o.dialog.basicInfo.infoForm.category.options=a.categoryArr,o.dialog.basicInfo.infoForm.desc=a.desc,o.dialog.basicInfo.infoForm.groupCode=a.groupCode,o.dialog.roleConfig.value=a.roles,o.dialog.repositoryPerm.ws.value=a.wsId,o.dialog.repositoryPerm.ws.options=a.wsArr,o.dialog.repositoryPerm.tree.value=a.repositorys}else o.$message(e.msg);o.loading=!1})).catch((function(e){console.log(e),o.loading=!1}))},changeType:function(e){this.dialog.basicInfo.infoForm.category.value=e},deleteUserGroup:function(e,o){var a=this;a.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",type:"warning"}).then((function(){var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_delete",id:e}};s["a"].post(o).then((function(e){"ok"==e.result?(a.$message({message:"删除成功",type:"success"}),a.initData()):a.$message(e.msg)})).catch((function(e){console.log(e)}))})).catch((function(){}))},clearDlgData:function(){this.dialog.active=1,this.dialog.updateId="",this.dialog.basicInfo.infoForm.name="",this.dialog.basicInfo.infoForm.category.value="",this.dialog.basicInfo.infoForm.category.options=[],this.dialog.basicInfo.infoForm.desc="",this.dialog.basicInfo.infoForm.groupCode="",this.$refs.infoForm.resetFields(),this.dialog.roleConfig.data=[],this.dialog.roleConfig.value=[],this.dialog.repositoryPerm.ws.value="",this.dialog.repositoryPerm.ws.options=[],this.dialog.repositoryPerm.tree.data=[],this.dialog.repositoryPerm.tree.value=[]},closeDlg:function(){this.dialog.visible=!1},handleCloseDlg:function(e){this.closeDlg(),e()},handleTabClick:function(e,o){},next:function(){var e=this;if(1==this.dialog.active){var o=e.dialog.basicInfo.infoForm.name,a=e.dialog.basicInfo.infoForm.category.value,t=e.dialog.basicInfo.infoForm.desc,i=e.dialog.basicInfo.infoForm.groupCode;if(""==i)return void e.$message({message:"[代码]不允许为空",type:"warning"});if(i.length>36)return void e.$message({message:"[代码]不允许超过36个字符",type:"warning"});if(""==a)return void e.$message({message:"[分类]不允许为空",type:"warning"});if(a.length>64)return void e.$message({message:"[分类]不允许超过64个字符",type:"warning"});if(!a.match("^[a-zA-Z0-9_一-龥]+$"))return void e.$message({message:"[分类]只能输入字母、数字、汉字或下划线",type:"warning"});if(""==o)return void e.$message({message:"[名称]不允许为空",type:"warning"});if(o.length>128)return void e.$message({message:"[名称]不允许超过128个字符",type:"warning"});if(t.length>255)return void e.$message({message:"[简介]不允许超过255个字符",type:"warning"})}this.dialog.active++},saveUserGroup:function(e){var o=this,a=o.dialog.basicInfo.infoForm.name,t=o.dialog.basicInfo.infoForm.category.value,i=o.dialog.basicInfo.infoForm.desc,l=o.dialog.basicInfo.infoForm.groupCode,n=o.dialog.roleConfig.value,r=o.dialog.repositoryPerm.ws.value,d=o.dialog.repositoryPerm.tree.value;o.dlgLoading=!0;var c={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_create_save",id:void 0==e?"":e,groupName:a,groupCode:l,groupDesc:i,category:t,wsId:r,roleIds:n.join(","),resourceIds:d.join(",")}};s["a"].post(c).then((function(e){"ok"==e.result?(o.dlgLoading=!1,o.clearDlgData(),o.closeDlg(),o.$message({message:"保存成功",type:"success"}),o.initData()):(o.$message.error("保存失败"),o.dlgLoading=!1)})).catch((function(e){console.log(e),o.dlgLoading=!1}))},changeWs:function(e){var o=this;o.dialog.repositoryPerm.ws.value="",o.dialog.repositoryPerm.tree.value=[],o.$nextTick((function(){o.dialog.repositoryPerm.ws.value=e}))},openNode:function(e,o,a){},loadNode:function(e,o){var a=this,t={url:"jd",data:{}};t.data.wsId=a.dialog.repositoryPerm.ws.value,t.data.teamId="",t.data.cmd="com.actionsoft.apps.coe.pal_processlevel_tree_data",0===e.level?t.data.pid="":t.data.pid=e.data.id,s["a"].post(t).then((function(t){if(o(t.data),0==e.level&&t.data.length>0){var i=a.$refs.repositoryTree;i.getNode(t.data[0].id).expand(),setTimeout((function(){var e=i.getNode(t.data[0].id).childNodes[0];null!=e&&e.expand()}),500)}})).catch((function(e){console.log(e)}))},expandNode:function(e,o,a){},closeNode:function(e,o,a){o.childNodes=[],o.loaded=!1},checkedNode:function(e,o,a){var t=this,i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_repository_data_query",wsId:t.dialog.repositoryPerm.ws.value,pid:e.id}};s["a"].post(i).then((function(a){var i=a.data,s=e.versionId;if(o){var l=t.dialog.repositoryPerm.tree.value;-1==l.indexOf(s)&&l.push(s);for(var n=0;n<i.length;n++)-1==l.indexOf(i[n])&&l.push(i[n]);t.$refs.repositoryTree.setCheckedKeys(l)}else{for(var r=t.dialog.repositoryPerm.tree.value,d=[],c=0;c<r.length;c++)r[c]!=s&&-1==i.indexOf(r[c])&&d.push(r[c]);t.dialog.repositoryPerm.tree.value=d,t.$refs.repositoryTree.setCheckedKeys([])}})).catch((function(e){console.log(e)}))},loadRoleNode:function(e,o){var a=this,t={url:"jd",data:{}};t.data.cmd="com.actionsoft.apps.coe.pal_publish_publishgroup_role_tree_data_query",0===e.level?t.data.pid="":t.data.pid=e.data.id,s["a"].post(t).then((function(e){o(e.data)})).catch((function(e){console.log(e),a.tableLoading=!1}))},expandRoleNode:function(e,o,a){},closeRoleNode:function(e,o,a){o.childNodes=[],o.loaded=!1},checkedRoleNode:function(e,o,a){var t=this;if("roleGroup"==e.type){var i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_role_tree_data_query",pid:e.id}};s["a"].post(i).then((function(a){for(var i=a.data,s=[],l=0;l<i.length;l++)s.push(i[l].id);var n=e.id,r=t.dialog.roleConfig.value;if(o){-1==r.indexOf(n)&&r.push(n);for(var d=0;d<s.length;d++)-1==r.indexOf(s[d])&&r.push(s[d])}else{for(var c=[],p=0;p<r.length;p++)r[p]!=n&&-1==s.indexOf(r[p])&&c.push(r[p]);t.dialog.roleConfig.value=c}t.$refs.roleTree.setCheckedKeys(t.dialog.roleConfig.value)})).catch((function(e){console.log(e)}))}else if("role"==e.type){var l=t.dialog.roleConfig.value;if(o)-1==l.indexOf(e.id)&&l.push(e.id);else{for(var n=[],r=0;r<l.length;r++)l[r]!=e.id&&n.push(l[r]);t.dialog.roleConfig.value=n}t.$refs.roleTree.setCheckedKeys(t.dialog.roleConfig.value)}}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(e,o){this.mainHeight=parseInt(this.$store.getters.getTopMainHeightFn)-parseInt(this.headerHeight)-2+"px"}}},n=l,r=(a("18b4"),a("cba8")),d=Object(r["a"])(n,t,i,!1,null,"e0fd60a6",null);o["default"]=d.exports},e1cf:function(e,o,a){}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-0ba0316e.f1a28476.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-0ba0316e.f1a28476.js
                                                  new file mode 100644
                                                  index 00000000..c8529eb9
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-0ba0316e.f1a28476.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-0ba0316e"],{"318a":function(e,t,a){"use strict";a("fc2e")},"4cbb":function(e,t,a){"use strict";var i=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-container",[a("el-dialog",{attrs:{id:"bpmOrgAddress",title:e.title,visible:e.dialogVisible,"destroy-on-close":!0,width:e.width,"modal-append-to-body":!1,"append-to-body":!0,"close-on-click-modal":!1,"before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t}}},[e.refresh?[a("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],attrs:{"element-loading-text":"拼命加载中"}},[a("div",{staticStyle:{height:"300px",overflow:"auto",border:"1px solid #f2f2f2"}},[a("div",{staticClass:"tree"},[a("el-tree",{ref:"tree",attrs:{props:e.treeProps,"show-checkbox":e.multiple,"expand-on-click-node":!1,"check-strictly":!0,"highlight-current":!0,"node-key":"id",lazy:"",load:e.loadNode},on:{"node-click":e.openNode,"node-expand":e.expandNode,"node-collapse":e.closeNode},scopedSlots:e._u([{key:"default",fn:function(t){var i=t.node;t.data;return a("span",{},[a("i",{staticClass:"awsui-iconfont tree-content-icon tree-content-icon-padding",style:{color:i.data.icon.color},domProps:{innerHTML:e._s(i.data.icon.icon)}}),a("span",[e._v(e._s(i.label))])])}}],null,!1,52448956)})],1)])])]:e._e(),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{staticClass:"button-general-color",attrs:{type:"primary"},on:{click:e.submit}},[e._v("确定")]),a("awsui-button",{on:{click:e.cancel}},[e._v("取消")])],1)],2)],1)},s=[],n=a("0f08"),r={name:"BpmOrgAddress",props:{visible:{type:Boolean,default:!1},addressType:{type:String,default:"department"},multiple:{type:Boolean,default:!1},rootDeptId:{type:String,default:""},highSecurityFilter:{type:String,default:""},title:{type:String,default:""},selected:{type:Object,default:function(){return{department:[],user:[],role:[],position:[]}}}},data:function(){return{refresh:!1,dialogVisible:!1,loading:!1,searchKey:"",treeSearchKey:"",timeout:null,pid:"",width:"500px",treeProps:{label:"name",isLeaf:"leaf"}}},methods:{handleClose:function(e){this.closeDlalog("cancel"),e()},cancel:function(){this.closeDlalog("cancel"),this.dialogVisible=!1},submit:function(){this.closeDlalog("save"),this.dialogVisible=!1},closeDlalog:function(e){if("save"==e){var t=[];if(this.multiple)t=this.$refs.tree.getCheckedNodes();else{var a=this.$refs.tree.getCurrentNode();null!=a&&t.push(a)}this.$emit("getResult",JSON.parse(JSON.stringify(t)))}else this.$emit("cancel")},handleNodeClick:function(e){},openNode:function(e,t,a){},treeSearchSelect:function(e){this.queryTreeByIdAndPath(e.id,e.path)},treeSearch:function(e,t){var a=this;if(void 0!=e&&""!=e.trim()){var i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_repository_tree_component_search",addressType:a.addressType,rootDeptId:a.rootDeptId,name:e}};n["a"].post(i).then((function(e){"ok"==e.result&&e.data.length>0?(clearTimeout(a.timeout),a.timeout=setTimeout((function(){t(e.data)}),3e3*Math.random())):clearTimeout(a.timeout)})).catch((function(e){console.log(e)}))}else clearTimeout(a.timeout)},queryTreeByIdAndPath:function(e,t){for(var a=this,i=a.$refs.tree,s=t.split(","),n=1,r=0;r<s.length;r++)r>0&&null!=i.getNode(s[r-1])&&(setTimeout(a._expandNode(i,s[r-1]),300*n),n++);setTimeout((function(){null!=i.getNode(e)&&i.setCurrentKey(e)}),300*n)},_expandNode:function(e,t){return function(){e.getNode(t).expand()}},loadNode:function(e,t){var a=this;a.loading=!0;var i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_bpm_org_address_component_subjson",addressType:a.addressType,pid:"",highSecurityFilter:a.highSecurityFilter}};0===e.level?(i.data.pid=a.pid,i.data.parentType=""):(i.data.pid=e.data.id,i.data.parentType=e.data.type),n["a"].post(i).then((function(i){if(a.multiple)for(var s=a.addressType.indexOf("department")>-1,n=a.addressType.indexOf("user")>-1,r=a.addressType.indexOf("role")>-1,o=a.addressType.indexOf("position")>-1,l=0;l<i.data.length;l++){var d=i.data[l];"company"==d.type||"roleRoot"==d.type||"roleGroup"==d.type||"positionRoot"==d.type||"positionGroup"==d.type?d.disabled=!0:(s&&"department"==d.type&&(d.disabled=!1),s||"department"!=d.type||(d.disabled=!0),n&&"user"==d.type&&(d.disabled=!1),n||"user"!=d.type||(d.disabled=!0),r&&"role"==d.type&&(d.disabled=!1),r||"role"!=d.type||(d.disabled=!0),o&&"position"==d.type&&(d.disabled=!1),o||"position"!=d.type||(d.disabled=!0))}if(t(i.data),a.loading=!1,0==e.level&&i.data.length>0){var c=a.$refs.tree;c.getNode(i.data[0].id).expand(),setTimeout((function(){var e=c.getNode(i.data[0].id).childNodes[0];null!=e&&e.expand()}),500)}})).catch((function(e){console.log(e)}))},expandNode:function(e,t,a){},closeNode:function(e,t,a){t.childNodes=[],t.loaded=!1},refreshNode:function(e){if(void 0==e){var t=this.$refs.tree.getCurrentNode();if(null!=t){void 0!=this.$refs.tree.store.nodesMap[t.id]&&(this.$refs.tree.store.nodesMap[t.id].expanded=!1);var a=this.$refs.tree.getNode(t.id);this.closeNode(null,a,null),a.expand()}}else{void 0!=this.$refs.tree.store.nodesMap[e]&&(this.$refs.tree.store.nodesMap[e].expanded=!1);var i=this.$refs.tree.getNode(e);null!=i&&(this.closeNode(null,i,null),i.expand())}}},watch:{visible:function(e){this.dialogVisible=e,e?(this.addressType.indexOf("department")>0&&(this.pid=this.rootDeptId),this.refresh=!0):this.refresh=!1}}},o=r,l=(a("b142"),a("cba8")),d=Object(l["a"])(o,i,s,!1,null,"6de64a47",null);t["a"]=d.exports},9419:function(e,t,a){"use strict";a.r(t);var i=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-container",{staticStyle:{width:"100%"},attrs:{id:"user"}},[a("el-header",{attrs:{height:e.headerHeight}},[a("el-col",{staticStyle:{position:"relative",top:"10px"},attrs:{span:24}},[a("div",{staticStyle:{display:"inline-block",float:"left"}},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"100px"},attrs:{type:"primary"},on:{click:e.addUser}},[e._v("添加用户")])],1),a("div",{staticStyle:{display:"inline-block",float:"right",width:"320px","padding-right":"20px"}},[a("el-input",{attrs:{placeholder:"搜索","prefix-icon":"el-icon-search",size:"small",clearable:""},on:{input:e.searchUser},model:{value:e.searchInput,callback:function(t){e.searchInput=t},expression:"searchInput"}})],1)])],1),a("el-main",{style:{height:e.mainHeight}},[a("div",{staticClass:"text-general-color category-title"},[a("p",{staticStyle:{"padding-left":"5px"},domProps:{innerHTML:e._s("管理用户("+e.data1.length+")")}})]),a("div",{directives:[{name:"show",rawName:"v-show",value:0==e.data1.length,expression:"data1.length == 0"}],staticStyle:{height:"200px"}}),e._l(e.data1,(function(t){return[a("div",{staticStyle:{display:"inline","margin-right":"40px"},on:{mouseenter:function(a){return e.enter(t.id,"0")},mouseleave:function(a){return e.leave(t.id,"0")}}},[a("el-card",{staticStyle:{width:"300px",display:"inline-block","margin-top":"15px"},attrs:{shadow:"hover"}},[a("div",{staticStyle:{display:"inline-block",width:"15px","margin-left":"5px",height:"20px","line-height":"20px","vertical-align":"middle"}},[a("div",{style:{display:t.showCheckBox||t.checked?"inline-block":"none"}},[a("el-checkbox",{on:{change:function(a){return e.handleCheckChange(t.id,"0")}},model:{value:t.checked,callback:function(a){e.$set(t,"checked",a)},expression:"item.checked"}})],1)]),a("div",{staticStyle:{display:"inline",width:"30px",margin:"0 15px"}},[a("img",{staticClass:"user_photo_img radius3",attrs:{src:t.userPhoto}})]),a("div",{staticClass:"text-over-hidden",staticStyle:{display:"inline-block",width:"220px",height:"20px","line-height":"20px","vertical-align":"middle"}},[a("span",{staticClass:"text-general-color",domProps:{innerHTML:e._s(t.name)}}),e._v("    "),a("span",{staticClass:"text-second-color",staticStyle:{"font-size":"12px","-webkit-transform":"scale(0.9)"}},[e._v(e._s(t.role))])])])],1)]})),a("div",{staticClass:"text-general-color category-title"},[a("p",{staticStyle:{"padding-left":"5px"},domProps:{innerHTML:e._s("梳理用户("+e.data2.length+")")}})]),e._l(e.data2,(function(t){return[a("div",{staticStyle:{display:"inline","margin-right":"40px"},on:{mouseenter:function(a){return e.enter(t.id,"1")},mouseleave:function(a){return e.leave(t.id,"1")}}},[a("el-card",{staticStyle:{width:"300px",display:"inline-block","margin-top":"15px"},attrs:{shadow:"hover"}},[a("div",{staticStyle:{display:"inline-block",width:"15px","margin-left":"5px",height:"20px","line-height":"20px","vertical-align":"middle"}},[a("div",{style:{display:t.showCheckBox||t.checked?"inline-block":"none"}},[a("el-checkbox",{on:{change:function(a){return e.handleCheckChange(t.id,"0")}},model:{value:t.checked,callback:function(a){e.$set(t,"checked",a)},expression:"item.checked"}})],1)]),a("div",{staticStyle:{display:"inline",width:"30px",margin:"0 15px"}},[a("img",{staticClass:"user_photo_img radius3",attrs:{src:t.userPhoto}})]),a("div",{staticClass:"text-over-hidden",staticStyle:{display:"inline-block",width:"220px",height:"20px","line-height":"20px","vertical-align":"middle"}},[a("span",{staticClass:"text-general-color",domProps:{innerHTML:e._s(t.name)}}),e._v("    "),a("span",{staticClass:"text-second-color",staticStyle:{"font-size":"12px","-webkit-transform":"scale(0.9)"}},[e._v(e._s(t.role))])])])],1)]}))],2),a("el-footer",{directives:[{name:"show",rawName:"v-show",value:e.showFooter,expression:"showFooter"}],attrs:{height:e.footerHeight}},[a("div",{staticStyle:{"border-top":"1px solid #F2F2F2",height:"44px"}},[a("div",{staticStyle:{padding:"8px","margin-left":"20px"}},[a("el-checkbox",{staticStyle:{"margin-right":"10px"},attrs:{indeterminate:e.isIndeterminate},on:{change:e.handleCheckAllChange},model:{value:e.checkAll,callback:function(t){e.checkAll=t},expression:"checkAll"}}),a("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"100px"},attrs:{type:"primary"},on:{click:function(t){return e.changeRole()}}},[e._v("变更角色")]),a("awsui-button",{staticClass:"button-general-color-reverse2",staticStyle:{width:"100px"},attrs:{plain:""},on:{click:function(t){return e.removeUsers()}}},[e._v("删除用户")]),a("awsui-button",{staticClass:"button-general-color-reverse3",staticStyle:{width:"100px"},attrs:{plain:""},on:{click:e.closeFooter}},[e._v("取消")])],1)])]),a("el-drawer",{ref:"drawer",attrs:{id:"drawer",title:"添加用户",visible:e.drawerVisible,"custom-class":"text-general-color","destroy-on-close":!0,wrapperClosable:!1,size:"700px",direction:"rtl","before-close":e.handleDrawerClose},on:{"update:visible":function(t){e.drawerVisible=t},opened:e.handleOpenedDrawer}},[a("div",{staticStyle:{width:"100%",height:"100%","border-top":"1px solid #F2F2F2"},attrs:{id:"drawerDiv"}},[a("div",{style:{height:e.drawerMainHeight,overflow:"auto",margin:"10px 20px"}},[a("div",{staticClass:"text-general-color category-title"},[a("p",{staticStyle:{"padding-left":"5px"}},[e._v("管理用户")])]),a("el-input",{attrs:{size:"medium",readonly:"",placeholder:"请选择"},nativeOn:{click:function(t){return e.choiceBpmOrgUser("0")}}}),a("p",{staticStyle:{margin:"10px 0"},domProps:{innerHTML:e._s("已选择("+e.drawerData1.length+")")}}),a("div",[e._l(e.drawerData1,(function(t){return[a("div",{staticClass:"row",attrs:{name:t.id}},[a("div",{staticClass:"text-over-hidden",staticStyle:{display:"inline-block",width:"88%"}},[a("span",[e._v(e._s(t.name))])]),a("div",{staticClass:"operate-icon-display",staticStyle:{position:"relative",top:"-6px"}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{display:"inline-block",cursor:"pointer"},on:{click:function(a){return e.removeDrawerUser(t.id,"0")}}},[e._v("")])])])]}))],2),a("div",{staticClass:"text-general-color category-title"},[a("p",{staticStyle:{"padding-left":"5px"}},[e._v("梳理用户")])]),a("el-input",{attrs:{size:"medium",readonly:"",placeholder:"请选择"},nativeOn:{click:function(t){return e.choiceBpmOrgUser("1")}}}),a("p",{staticStyle:{margin:"10px 0"},domProps:{innerHTML:e._s("已选择("+e.drawerData2.length+")")}}),a("div",[e._l(e.drawerData2,(function(t){return[a("div",{staticClass:"row",attrs:{name:t.id}},[a("div",{staticClass:"text-over-hidden",staticStyle:{display:"inline-block",width:"88%"}},[a("span",[e._v(e._s(t.name))])]),a("div",{staticClass:"operate-icon-display",staticStyle:{position:"relative",top:"-6px"}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{display:"inline-block",cursor:"pointer"},on:{click:function(a){return e.removeDrawerUser(t.id,"1")}}},[e._v("")])])])]}))],2)],1),a("div",{style:{height:e.drawerFooterHeight,visibility:"hidden","background-color":"#F5F7FA"},attrs:{id:"drawerFooter"}},[a("div",{staticStyle:{"margin-top":"10px","margin-right":"5px",float:"right"}},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"100px"},attrs:{type:"primary"},on:{click:e.saveDrawer}},[e._v("保存")]),a("awsui-button",{staticClass:"button-general-color-reverse3",staticStyle:{width:"100px"},attrs:{plain:""},on:{click:e.closeDrawer}},[e._v("取消")])],1)])])]),a("BPMOrgAddress",{ref:"bpmOrgAddress",attrs:{visible:e.bpmOrg.visible,addressType:e.bpmOrg.addressType,highSecurityFilter:e.bpmOrg.highSecurityFilter,multiple:!0,title:e.bpmOrg.title},on:{"update:visible":function(t){return e.$set(e.bpmOrg,"visible",t)},cancel:function(t){e.bpmOrg.visible=!1},getResult:e.saveBpmOrgCompnentResult}})],1)},s=[],n=a("0f08"),r=a("4cbb"),o={name:"User",components:{BPMOrgAddress:r["a"]},data:function(){return{headerHeight:"50px",footerHeight:"45px",mainHeight:parseInt(this.$store.getters.getTopMainHeightFn)-50-(this.showFooter?45:0)+"px",searchInput:"",isIndeterminate:!0,checkAll:!1,showFooter:!1,data1:[],dataTemp1:[],data2:[],dataTemp2:[],drawerVisible:!1,drawerMainHeight:"0px",drawerFooterHeight:"50px",drawerData1:[],drawerData2:[],bpmOrg:{visible:!1,addressType:"user",title:"选择用户",highSecurityFilter:"sysAdmin,auditor",source:"0"}}},mounted:function(){this.initData()},methods:{initData:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_user_data_query"}};n["a"].post(t).then((function(t){if("ok"==t.result){for(var a=t.data.data1,i=0;i<a.length;i++)a[i].checked=!1,a[i].showCheckBox=!1;for(var s=t.data.data2,n=0;n<s.length;n++)s[n].checked=!1,s[n].showCheckBox=!1;e.data1=a,e.data2=s,e.dataTemp1=JSON.parse(JSON.stringify(e.data1)),e.dataTemp2=JSON.parse(JSON.stringify(e.data2))}else e.$message(t.msg)})).catch((function(e){console.log(e)}))},enter:function(e,t){if("0"==t)for(var a=0;a<this.data1.length;a++)if(this.data1[a].id==e){this.data1[a].showCheckBox=!0;break}if("1"==t)for(var i=0;i<this.data2.length;i++)if(this.data2[i].id==e){this.data2[i].showCheckBox=!0;break}},leave:function(e,t){if("0"==t)for(var a=0;a<this.data1.length;a++)if(this.data1[a].id==e){this.data1[a].showCheckBox=!1;break}if("1"==t)for(var i=0;i<this.data2.length;i++)if(this.data2[i].id==e){this.data2[i].showCheckBox=!1;break}},handleCheckChange:function(e){for(var t=this,a=0,i=0;i<t.data1.length;i++){var s=t.data1[i];s.checked&&a++}for(var n=0;n<t.data2.length;n++){var r=t.data2[n];r.checked&&a++}t.isIndeterminate=a>0&&a<t.data1.length+t.data2.length,t.checkAll=a==t.data1.length+t.data2.length,t.showFooter=a>0},handleCheckAllChange:function(e){if(e){for(var t=0;t<this.data1.length;t++)this.data1[t].checked=!0;for(var a=0;a<this.data2.length;a++)this.data2[a].checked=!0}else{for(var i=0;i<this.data1.length;i++)this.data1[i].checked=!1;for(var s=0;s<this.data2.length;s++)this.data2[s].checked=!1;this.showFooter=!1}this.isIndeterminate=!1},changeRole:function(){for(var e=[],t=0;t<this.data1.length;t++)this.data1[t].checked&&e.push(this.data1[t].id);for(var a=0;a<this.data2.length;a++)this.data2[a].checked&&e.push(this.data2[a].id);if(0!=e.length){var i=this.getSecAdminUsers(e);if(i[0].length>0)this.$message({message:"三员模式下安全保密员用户"+i[1].join("、")+"不允许变更",type:"warning"});else if(e.indexOf("admin")>-1)this.$message({message:"admin管理员用户不允许变更",type:"warning"});else{var s=this,r={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_user_role_change",userIds:e.join(",")}};n["a"].post(r).then((function(e){if("ok"==e.result){if(e.data.isExit)return void s.$message({message:"变更成功,即将退出系统",type:"warning",onClose:function(){var e=wHref+"?sid="+s.$store.state.sessionId+"&cmd=com.actionsoft.apps.coe.pal_user_logout";window.location.replace(e)}});s.$message({message:"变更成功",type:"success"}),s.closeFooter(),s.initData()}else s.$message(e.msg)})).catch((function(e){console.log(e)}))}}else this.$message({message:"请选择需要变更角色的用户",type:"warning"})},removeUsers:function(){for(var e=[],t=0;t<this.data1.length;t++)this.data1[t].checked&&e.push(this.data1[t].id);for(var a=0;a<this.data2.length;a++)this.data2[a].checked&&e.push(this.data2[a].id);if(0!=e.length){var i=this.getSecAdminUsers(e);if(i[0].length>0)this.$message({message:"三员模式下安全保密员用户"+i[1].join("、")+"不允许删除",type:"warning"});else if(e.indexOf("admin")>-1)this.$message({message:"admin管理员用户不允许删除",type:"warning"});else{var s=this;s.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",type:"warning"}).then((function(){var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_user_remove",userIds:e.join(",")}};n["a"].post(t).then((function(e){"ok"==e.result?(s.$message({message:"删除成功",type:"success"}),s.closeFooter(),s.initData()):s.$message(e.msg)})).catch((function(e){console.log(e)}))})).catch((function(){}))}}else this.$message({message:"请选择需要删除的用户",type:"warning"})},closeFooter:function(){this.handleCheckAllChange(!1)},searchUser:function(){if(this.closeFooter(),this.searchInput&&""!=this.searchInput.trim()){for(var e=[],t=0;t<this.dataTemp1.length;t++)if(this.dataTemp1[t].name.indexOf(this.searchInput)>-1){var a=JSON.parse(JSON.stringify(this.dataTemp1[t]));a.name=a.name.replace(new RegExp(this.searchInput,"g"),'<span style="color: #4E7FF9">'+this.searchInput+"</span>"),e.push(a)}this.data1=e;for(var i=[],s=0;s<this.dataTemp2.length;s++)if(this.dataTemp2[s].name.indexOf(this.searchInput)>-1){var n=JSON.parse(JSON.stringify(this.dataTemp2[s]));n.name=n.name.replace(new RegExp(this.searchInput,"g"),'<span style="color: #4E7FF9">'+this.searchInput+"</span>"),i.push(n)}this.data2=i}else this.data1=this.dataTemp1,this.data2=this.dataTemp2},addUser:function(){this.drawerVisible=!0},handleDrawerClose:function(e){e()},handleOpenedDrawer:function(){this.drawerMainHeight=document.getElementById("drawer").offsetHeight-parseInt(this.drawerFooterHeight)-64-20+"px",document.getElementById("drawerFooter").style.visibility="visible",this.drawerData1=JSON.parse(JSON.stringify(this.dataTemp1)),this.drawerData2=JSON.parse(JSON.stringify(this.dataTemp2))},removeDrawerUser:function(e,t){var a=this;if("0"!=t||"admin"!=e){if("0"==t){var i=this.getSecAdminUsers([e]);if(i[0].length>0)return void this.$message({message:"三员模式下安全保密员用户["+i[1].join("、")+"]不允许删除",type:"warning"})}var s=this;s.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((function(){var i=[];"0"==t?i=a.drawerData1:"1"==t&&(i=a.drawerData2);for(var s=0;s<i.length;s++)if(e==i[s].id){i.splice(s,1);break}})).catch((function(){}))}else this.$message({message:"admin管理员用户不允许删除",type:"warning"})},saveDrawer:function(){for(var e=[],t=[],a=0;a<this.drawerData1.length;a++)e.push(this.drawerData1[a].id);for(var i=0;i<this.drawerData2.length;i++)if(t.push(this.drawerData2[i].id),e.indexOf(this.drawerData2[i].id)>-1)return void this.$message({message:"用户["+this.drawerData2[i].name+"]不能同时设置为管理员和普通用户",type:"warning"});var s=this,r={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_user_save",managerUsers:e.join(","),generalUsers:t.join(",")}};n["a"].post(r).then((function(e){"ok"==e.result?(s.$message({message:"保存成功",type:"success"}),s.closeDrawer(),s.showFooter=!1,s.initData()):"warning"==e.result?s.$message({message:e.msg,type:"warning"}):s.$message.error(e.msg)})).catch((function(e){console.log(e)}))},closeDrawer:function(){this.$refs.drawer.closeDrawer()},choiceBpmOrgUser:function(e){this.bpmOrg.source=e,this.bpmOrg.visible=!0},saveBpmOrgCompnentResult:function(e){this.bpmOrg.visible=!1;var t=[];t="0"==this.bpmOrg.source?this.drawerData1:this.drawerData2;for(var a=[],i=0;i<t.length;i++)for(var s=0;s<e.length;s++)t[i].id==e[s].id&&a.push(t[i].id);for(var n=0;n<e.length;n++)a.indexOf(e[n].id)<0&&t.push(e[n])},getSecAdminUsers:function(e){for(var t=[[],[]],a=0;a<this.dataTemp1.length;a++)this.dataTemp1[a].isSecAdminUser&&e.indexOf(this.dataTemp1[a].id)>-1&&(t[0].push(this.dataTemp1[a].id),t[1].push(this.dataTemp1[a].name));for(var i=0;i<this.dataTemp2.length;i++)this.dataTemp2[i].isSecAdminUser&&e.indexOf(this.dataTemp2[i].id)>-1&&(t[0].push(this.dataTemp2[i].id),t[1].push(this.dataTemp2[i].name));return t}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(e,t){this.mainHeight=parseInt(this.$store.getters.getTopMainHeightFn)-50-(this.showFooter?45:0)+"px",this.drawerVisible&&(this.drawerMainHeight=document.getElementById("drawer").offsetHeight-parseInt(this.drawerFooterHeight)-64-20+"px")}}},l=o,d=(a("318a"),a("cba8")),c=Object(d["a"])(l,i,s,!1,null,"189b73c4",null);t["default"]=c.exports},"9ae6":function(e,t,a){},b142:function(e,t,a){"use strict";a("9ae6")},fc2e:function(e,t,a){}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d0ab156.9f17ed75.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d0ab156.9f17ed75.js
                                                  new file mode 100644
                                                  index 00000000..ace6807c
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d0ab156.9f17ed75.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0ab156"],{1485:function(t,a,e){"use strict";e.r(a);var n=function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("div",{staticStyle:{width:"100%",height:"100%"}},[e("iframe",{staticStyle:{border:"0"},attrs:{id:"iframe",width:"100%",height:"100%",name:"iframe",src:t.src}})])},i=[],s={name:"MappingManagement",data:function(){return{src:"./w?sid="+this.$store.state.sessionId+"&cmd=com.actionsoft.apps.coe.pal.mappingmanagement_main_page&dataType="+this.$route.params.dataType}}},r=s,c=e("cba8"),p=Object(c["a"])(r,n,i,!1,null,"56fd105e",null);a["default"]=p.exports}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d0b25b0.416cbd4d.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d0b25b0.416cbd4d.js
                                                  new file mode 100644
                                                  index 00000000..e182aa9e
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d0b25b0.416cbd4d.js
                                                  @@ -0,0 +1,7 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0b25b0"],{2480:function(t,e,n){"use strict";function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)
                                                  +/**!
                                                  + * Sortable 1.10.2
                                                  + * @author	RubaXa   <trash@rubaxa.org>
                                                  + * @author	owenm    <owen23355@gmail.com>
                                                  + * @license MIT
                                                  + */}function i(t){return i="function"===typeof Symbol&&"symbol"===o(Symbol.iterator)?function(t){return o(t)}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":o(t)},i(t)}function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function a(){return a=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t},a.apply(this,arguments)}function l(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},o=Object.keys(n);"function"===typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable})))),o.forEach((function(e){r(t,e,n[e])}))}return t}function s(t,e){if(null==t)return{};var n,o,i={},r=Object.keys(t);for(o=0;o<r.length;o++)n=r[o],e.indexOf(n)>=0||(i[n]=t[n]);return i}function c(t,e){if(null==t)return{};var n,o,i=s(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(o=0;o<r.length;o++)n=r[o],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var u="1.10.2";function d(t){if("undefined"!==typeof window&&window.navigator)return!!navigator.userAgent.match(t)}var h=d(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),f=d(/Edge/i),p=d(/firefox/i),g=d(/safari/i)&&!d(/chrome/i)&&!d(/android/i),v=d(/iP(ad|od|hone)/i),m=d(/chrome/i)&&d(/android/i),b={capture:!1,passive:!1};function y(t,e,n){t.addEventListener(e,n,!h&&b)}function w(t,e,n){t.removeEventListener(e,n,!h&&b)}function E(t,e){if(e){if(">"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(n){return!1}return!1}}function S(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function _(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&E(t,e):E(t,e))||o&&t===n)return t;if(t===n)break}while(t=S(t))}return null}var D,T=/\s+/g;function C(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(T," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(T," ")}}function x(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"===typeof n?"":"px")}}function O(t,e){var n="";if("string"===typeof t)n=t;else do{var o=x(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function M(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i<r;i++)n(o[i],i);return o}return[]}function I(){var t=document.scrollingElement;return t||document.documentElement}function N(t,e,n,o,i){if(t.getBoundingClientRect||t===window){var r,a,l,s,c,u,d;if(t!==window&&t!==I()?(r=t.getBoundingClientRect(),a=r.top,l=r.left,s=r.bottom,c=r.right,u=r.height,d=r.width):(a=0,l=0,s=window.innerHeight,c=window.innerWidth,u=window.innerHeight,d=window.innerWidth),(e||n)&&t!==window&&(i=i||t.parentNode,!h))do{if(i&&i.getBoundingClientRect&&("none"!==x(i,"transform")||n&&"static"!==x(i,"position"))){var f=i.getBoundingClientRect();a-=f.top+parseInt(x(i,"border-top-width")),l-=f.left+parseInt(x(i,"border-left-width")),s=a+r.height,c=l+r.width;break}}while(i=i.parentNode);if(o&&t!==window){var p=O(i||t),g=p&&p.a,v=p&&p.d;p&&(a/=v,l/=g,d/=g,u/=v,s=a+u,c=l+d)}return{top:a,left:l,bottom:s,right:c,width:d,height:u}}}function A(t,e,n){var o=B(t,!0),i=N(t)[e];while(o){var r=N(o)[n],a=void 0;if(a="top"===n||"left"===n?i>=r:i<=r,!a)return o;if(o===I())break;o=B(o,!1)}return!1}function P(t,e,n){var o=0,i=0,r=t.children;while(i<r.length){if("none"!==r[i].style.display&&r[i]!==Vt.ghost&&r[i]!==Vt.dragged&&_(r[i],n.draggable,t,!1)){if(o===e)return r[i];o++}i++}return null}function k(t,e){var n=t.lastElementChild;while(n&&(n===Vt.ghost||"none"===x(n,"display")||e&&!E(n,e)))n=n.previousElementSibling;return n||null}function X(t,e){var n=0;if(!t||!t.parentNode)return-1;while(t=t.previousElementSibling)"TEMPLATE"===t.nodeName.toUpperCase()||t===Vt.clone||e&&!E(t,e)||n++;return n}function Y(t){var e=0,n=0,o=I();if(t)do{var i=O(t),r=i.a,a=i.d;e+=t.scrollLeft*r,n+=t.scrollTop*a}while(t!==o&&(t=t.parentNode));return[e,n]}function R(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var o in e)if(e.hasOwnProperty(o)&&e[o]===t[n][o])return Number(n);return-1}function B(t,e){if(!t||!t.getBoundingClientRect)return I();var n=t,o=!1;do{if(n.clientWidth<n.scrollWidth||n.clientHeight<n.scrollHeight){var i=x(n);if(n.clientWidth<n.scrollWidth&&("auto"==i.overflowX||"scroll"==i.overflowX)||n.clientHeight<n.scrollHeight&&("auto"==i.overflowY||"scroll"==i.overflowY)){if(!n.getBoundingClientRect||n===document.body)return I();if(o||e)return n;o=!0}}}while(n=n.parentNode);return I()}function F(t,e){if(t&&e)for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function H(t,e){return Math.round(t.top)===Math.round(e.top)&&Math.round(t.left)===Math.round(e.left)&&Math.round(t.height)===Math.round(e.height)&&Math.round(t.width)===Math.round(e.width)}function L(t,e){return function(){if(!D){var n=arguments,o=this;1===n.length?t.call(o,n[0]):t.apply(o,n),D=setTimeout((function(){D=void 0}),e)}}}function W(){clearTimeout(D),D=void 0}function j(t,e,n){t.scrollLeft+=e,t.scrollTop+=n}function z(t){var e=window.Polymer,n=window.jQuery||window.Zepto;return e&&e.dom?e.dom(t).cloneNode(!0):n?n(t).clone(!0)[0]:t.cloneNode(!0)}var G="Sortable"+(new Date).getTime();function U(){var t,e=[];return{captureAnimationState:function(){if(e=[],this.options.animation){var t=[].slice.call(this.el.children);t.forEach((function(t){if("none"!==x(t,"display")&&t!==Vt.ghost){e.push({target:t,rect:N(t)});var n=l({},e[e.length-1].rect);if(t.thisAnimationDuration){var o=O(t,!0);o&&(n.top-=o.f,n.left-=o.e)}t.fromRect=n}}))}},addAnimationState:function(t){e.push(t)},removeAnimationState:function(t){e.splice(R(e,{target:t}),1)},animateAll:function(n){var o=this;if(!this.options.animation)return clearTimeout(t),void("function"===typeof n&&n());var i=!1,r=0;e.forEach((function(t){var e=0,n=t.target,a=n.fromRect,l=N(n),s=n.prevFromRect,c=n.prevToRect,u=t.rect,d=O(n,!0);d&&(l.top-=d.f,l.left-=d.e),n.toRect=l,n.thisAnimationDuration&&H(s,l)&&!H(a,l)&&(u.top-l.top)/(u.left-l.left)===(a.top-l.top)/(a.left-l.left)&&(e=q(u,s,c,o.options)),H(l,a)||(n.prevFromRect=a,n.prevToRect=l,e||(e=o.options.animation),o.animate(n,u,l,e)),e&&(i=!0,r=Math.max(r,e),clearTimeout(n.animationResetTimer),n.animationResetTimer=setTimeout((function(){n.animationTime=0,n.prevFromRect=null,n.fromRect=null,n.prevToRect=null,n.thisAnimationDuration=null}),e),n.thisAnimationDuration=e)})),clearTimeout(t),i?t=setTimeout((function(){"function"===typeof n&&n()}),r):"function"===typeof n&&n(),e=[]},animate:function(t,e,n,o){if(o){x(t,"transition",""),x(t,"transform","");var i=O(this.el),r=i&&i.a,a=i&&i.d,l=(e.left-n.left)/(r||1),s=(e.top-n.top)/(a||1);t.animatingX=!!l,t.animatingY=!!s,x(t,"transform","translate3d("+l+"px,"+s+"px,0)"),V(t),x(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),x(t,"transform","translate3d(0,0,0)"),"number"===typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout((function(){x(t,"transition",""),x(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1}),o)}}}}function V(t){return t.offsetWidth}function q(t,e,n,o){return Math.sqrt(Math.pow(e.top-t.top,2)+Math.pow(e.left-t.left,2))/Math.sqrt(Math.pow(e.top-n.top,2)+Math.pow(e.left-n.left,2))*o.animation}var J=[],Z={initializeByDefault:!0},K={mount:function(t){for(var e in Z)Z.hasOwnProperty(e)&&!(e in t)&&(t[e]=Z[e]);J.push(t)},pluginEvent:function(t,e,n){var o=this;this.eventCanceled=!1,n.cancel=function(){o.eventCanceled=!0};var i=t+"Global";J.forEach((function(o){e[o.pluginName]&&(e[o.pluginName][i]&&e[o.pluginName][i](l({sortable:e},n)),e.options[o.pluginName]&&e[o.pluginName][t]&&e[o.pluginName][t](l({sortable:e},n)))}))},initializePlugins:function(t,e,n,o){for(var i in J.forEach((function(o){var i=o.pluginName;if(t.options[i]||o.initializeByDefault){var r=new o(t,e,t.options);r.sortable=t,r.options=t.options,t[i]=r,a(n,r.defaults)}})),t.options)if(t.options.hasOwnProperty(i)){var r=this.modifyOption(t,i,t.options[i]);"undefined"!==typeof r&&(t.options[i]=r)}},getEventProperties:function(t,e){var n={};return J.forEach((function(o){"function"===typeof o.eventProperties&&a(n,o.eventProperties.call(e[o.pluginName],t))})),n},modifyOption:function(t,e,n){var o;return J.forEach((function(i){t[i.pluginName]&&i.optionListeners&&"function"===typeof i.optionListeners[e]&&(o=i.optionListeners[e].call(t[i.pluginName],n))})),o}};function Q(t){var e=t.sortable,n=t.rootEl,o=t.name,i=t.targetEl,r=t.cloneEl,a=t.toEl,s=t.fromEl,c=t.oldIndex,u=t.newIndex,d=t.oldDraggableIndex,p=t.newDraggableIndex,g=t.originalEvent,v=t.putSortable,m=t.extraEventProperties;if(e=e||n&&n[G],e){var b,y=e.options,w="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||h||f?(b=document.createEvent("Event"),b.initEvent(o,!0,!0)):b=new CustomEvent(o,{bubbles:!0,cancelable:!0}),b.to=a||n,b.from=s||n,b.item=i||n,b.clone=r,b.oldIndex=c,b.newIndex=u,b.oldDraggableIndex=d,b.newDraggableIndex=p,b.originalEvent=g,b.pullMode=v?v.lastPutMode:void 0;var E=l({},m,K.getEventProperties(o,e));for(var S in E)b[S]=E[S];n&&n.dispatchEvent(b),y[w]&&y[w].call(e,b)}}var $=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=n.evt,i=c(n,["evt"]);K.pluginEvent.bind(Vt)(t,e,l({dragEl:et,parentEl:nt,ghostEl:ot,rootEl:it,nextEl:rt,lastDownEl:at,cloneEl:lt,cloneHidden:st,dragStarted:Et,putSortable:pt,activeSortable:Vt.active,originalEvent:o,oldIndex:ct,oldDraggableIndex:dt,newIndex:ut,newDraggableIndex:ht,hideGhostForTarget:jt,unhideGhostForTarget:zt,cloneNowHidden:function(){st=!0},cloneNowShown:function(){st=!1},dispatchSortableEvent:function(t){tt({sortable:e,name:t,originalEvent:o})}},i))};function tt(t){Q(l({putSortable:pt,cloneEl:lt,targetEl:et,rootEl:it,oldIndex:ct,oldDraggableIndex:dt,newIndex:ut,newDraggableIndex:ht},t))}var et,nt,ot,it,rt,at,lt,st,ct,ut,dt,ht,ft,pt,gt,vt,mt,bt,yt,wt,Et,St,_t,Dt,Tt,Ct=!1,xt=!1,Ot=[],Mt=!1,It=!1,Nt=[],At=!1,Pt=[],kt="undefined"!==typeof document,Xt=v,Yt=f||h?"cssFloat":"float",Rt=kt&&!m&&!v&&"draggable"in document.createElement("div"),Bt=function(){if(kt){if(h)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),Ft=function(t,e){var n=x(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),i=P(t,0,e),r=P(t,1,e),a=i&&x(i),l=r&&x(r),s=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+N(i).width,c=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+N(r).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(i&&a["float"]&&"none"!==a["float"]){var u="left"===a["float"]?"left":"right";return!r||"both"!==l.clear&&l.clear!==u?"horizontal":"vertical"}return i&&("block"===a.display||"flex"===a.display||"table"===a.display||"grid"===a.display||s>=o&&"none"===n[Yt]||r&&"none"===n[Yt]&&s+c>o)?"vertical":"horizontal"},Ht=function(t,e,n){var o=n?t.left:t.top,i=n?t.right:t.bottom,r=n?t.width:t.height,a=n?e.left:e.top,l=n?e.right:e.bottom,s=n?e.width:e.height;return o===a||i===l||o+r/2===a+s/2},Lt=function(t,e){var n;return Ot.some((function(o){if(!k(o)){var i=N(o),r=o[G].options.emptyInsertThreshold,a=t>=i.left-r&&t<=i.right+r,l=e>=i.top-r&&e<=i.bottom+r;return r&&a&&l?n=o:void 0}})),n},Wt=function(t){function e(t,n){return function(o,i,r,a){var l=o.options.group.name&&i.options.group.name&&o.options.group.name===i.options.group.name;if(null==t&&(n||l))return!0;if(null==t||!1===t)return!1;if(n&&"clone"===t)return t;if("function"===typeof t)return e(t(o,i,r,a),n)(o,i,r,a);var s=(n?o:i).options.group.name;return!0===t||"string"===typeof t&&t===s||t.join&&t.indexOf(s)>-1}}var n={},o=t.group;o&&"object"==i(o)||(o={name:o}),n.name=o.name,n.checkPull=e(o.pull,!0),n.checkPut=e(o.put),n.revertClone=o.revertClone,t.group=n},jt=function(){!Bt&&ot&&x(ot,"display","none")},zt=function(){!Bt&&ot&&x(ot,"display","")};kt&&document.addEventListener("click",(function(t){if(xt)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),xt=!1,!1}),!0);var Gt=function(t){if(et){t=t.touches?t.touches[0]:t;var e=Lt(t.clientX,t.clientY);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[G]._onDragOver(n)}}},Ut=function(t){et&&et.parentNode[G]._isOutsideThisEl(t.target)};function Vt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[G]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Ft(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Vt.supportPointer&&"PointerEvent"in window,emptyInsertThreshold:5};for(var o in K.initializePlugins(this,t,n),n)!(o in e)&&(e[o]=n[o]);for(var i in Wt(e),this)"_"===i.charAt(0)&&"function"===typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&Rt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?y(t,"pointerdown",this._onTapStart):(y(t,"mousedown",this._onTapStart),y(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(y(t,"dragover",this),y(t,"dragenter",this)),Ot.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,U())}function qt(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move"),t.cancelable&&t.preventDefault()}function Jt(t,e,n,o,i,r,a,l){var s,c,u=t[G],d=u.options.onMove;return!window.CustomEvent||h||f?(s=document.createEvent("Event"),s.initEvent("move",!0,!0)):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||N(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),d&&(c=d.call(u,s,a)),c}function Zt(t){t.draggable=!1}function Kt(){At=!1}function Qt(t,e,n){var o=N(k(n.el,n.options.draggable)),i=10;return e?t.clientX>o.right+i||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+i}function $t(t,e,n,o,i,r,a,l){var s=o?t.clientY:t.clientX,c=o?n.height:n.width,u=o?n.top:n.left,d=o?n.bottom:n.right,h=!1;if(!a)if(l&&Dt<c*i){if(!Mt&&(1===_t?s>u+c*r/2:s<d-c*r/2)&&(Mt=!0),Mt)h=!0;else if(1===_t?s<u+Dt:s>d-Dt)return-_t}else if(s>u+c*(1-i)/2&&s<d-c*(1-i)/2)return te(e);return h=h||a,h&&(s<u+c*r/2||s>d-c*r/2)?s>u+c/2?1:-1:0}function te(t){return X(et)<X(t)?1:-1}function ee(t){var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;while(n--)o+=e.charCodeAt(n);return o.toString(36)}function ne(t){Pt.length=0;var e=t.getElementsByTagName("input"),n=e.length;while(n--){var o=e[n];o.checked&&Pt.push(o)}}function oe(t){return setTimeout(t,0)}function ie(t){return clearTimeout(t)}Vt.prototype={constructor:Vt,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(St=null)},_getDirection:function(t,e){return"function"===typeof this.options.direction?this.options.direction.call(this,t,e,et):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,o=this.options,i=o.preventOnFilter,r=t.type,a=t.touches&&t.touches[0]||t.pointerType&&"touch"===t.pointerType&&t,l=(a||t).target,s=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||l,c=o.filter;if(ne(n),!et&&!(/mousedown|pointerdown/.test(r)&&0!==t.button||o.disabled)&&!s.isContentEditable&&(l=_(l,o.draggable,n,!1),(!l||!l.animated)&&at!==l)){if(ct=X(l),dt=X(l,o.draggable),"function"===typeof c){if(c.call(this,t,l,this))return tt({sortable:e,rootEl:s,name:"filter",targetEl:l,toEl:n,fromEl:n}),$("filter",e,{evt:t}),void(i&&t.cancelable&&t.preventDefault())}else if(c&&(c=c.split(",").some((function(o){if(o=_(s,o.trim(),n,!1),o)return tt({sortable:e,rootEl:o,name:"filter",targetEl:l,fromEl:n,toEl:n}),$("filter",e,{evt:t}),!0})),c))return void(i&&t.cancelable&&t.preventDefault());o.handle&&!_(s,o.handle,n,!1)||this._prepareDragStart(t,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;if(n&&!et&&n.parentNode===r){var s=N(n);if(it=r,et=n,nt=et.parentNode,rt=et.nextSibling,at=n,ft=a.group,Vt.dragged=et,gt={target:et,clientX:(e||t).clientX,clientY:(e||t).clientY},yt=gt.clientX-s.left,wt=gt.clientY-s.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,et.style["will-change"]="all",o=function(){$("delayEnded",i,{evt:t}),Vt.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!p&&i.nativeDraggable&&(et.draggable=!0),i._triggerDragStart(t,e),tt({sortable:i,name:"choose",originalEvent:t}),C(et,a.chosenClass,!0))},a.ignore.split(",").forEach((function(t){M(et,t.trim(),Zt)})),y(l,"dragover",Gt),y(l,"mousemove",Gt),y(l,"touchmove",Gt),y(l,"mouseup",i._onDrop),y(l,"touchend",i._onDrop),y(l,"touchcancel",i._onDrop),p&&this.nativeDraggable&&(this.options.touchStartThreshold=4,et.draggable=!0),$("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(f||h))o();else{if(Vt.eventCanceled)return void this._onDrop();y(l,"mouseup",i._disableDelayedDrag),y(l,"touchend",i._disableDelayedDrag),y(l,"touchcancel",i._disableDelayedDrag),y(l,"mousemove",i._delayedDragTouchMoveHandler),y(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&y(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){et&&Zt(et),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;w(t,"mouseup",this._disableDelayedDrag),w(t,"touchend",this._disableDelayedDrag),w(t,"touchcancel",this._disableDelayedDrag),w(t,"mousemove",this._delayedDragTouchMoveHandler),w(t,"touchmove",this._delayedDragTouchMoveHandler),w(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?y(document,"pointermove",this._onTouchMove):y(document,e?"touchmove":"mousemove",this._onTouchMove):(y(et,"dragend",this),y(it,"dragstart",this._onDragStart));try{document.selection?oe((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(n){}},_dragStarted:function(t,e){if(Ct=!1,it&&et){$("dragStarted",this,{evt:e}),this.nativeDraggable&&y(document,"dragover",Ut);var n=this.options;!t&&C(et,n.dragClass,!1),C(et,n.ghostClass,!0),Vt.active=this,t&&this._appendGhost(),tt({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(vt){this._lastX=vt.clientX,this._lastY=vt.clientY,jt();var t=document.elementFromPoint(vt.clientX,vt.clientY),e=t;while(t&&t.shadowRoot){if(t=t.shadowRoot.elementFromPoint(vt.clientX,vt.clientY),t===e)break;e=t}if(et.parentNode[G]._isOutsideThisEl(t),e)do{if(e[G]){var n=void 0;if(n=e[G]._onDragOver({clientX:vt.clientX,clientY:vt.clientY,target:t,rootEl:e}),n&&!this.options.dragoverBubble)break}t=e}while(e=e.parentNode);zt()}},_onTouchMove:function(t){if(gt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=ot&&O(ot,!0),a=ot&&r&&r.a,l=ot&&r&&r.d,s=Xt&&Tt&&Y(Tt),c=(i.clientX-gt.clientX+o.x)/(a||1)+(s?s[0]-Nt[0]:0)/(a||1),u=(i.clientY-gt.clientY+o.y)/(l||1)+(s?s[1]-Nt[1]:0)/(l||1);if(!Vt.active&&!Ct){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))<n)return;this._onDragStart(t,!0)}if(ot){r?(r.e+=c-(mt||0),r.f+=u-(bt||0)):r={a:1,b:0,c:0,d:1,e:c,f:u};var d="matrix(".concat(r.a,",").concat(r.b,",").concat(r.c,",").concat(r.d,",").concat(r.e,",").concat(r.f,")");x(ot,"webkitTransform",d),x(ot,"mozTransform",d),x(ot,"msTransform",d),x(ot,"transform",d),mt=c,bt=u,vt=i}t.cancelable&&t.preventDefault()}},_appendGhost:function(){if(!ot){var t=this.options.fallbackOnBody?document.body:it,e=N(et,!0,Xt,!0,t),n=this.options;if(Xt){Tt=t;while("static"===x(Tt,"position")&&"none"===x(Tt,"transform")&&Tt!==document)Tt=Tt.parentNode;Tt!==document.body&&Tt!==document.documentElement?(Tt===document&&(Tt=I()),e.top+=Tt.scrollTop,e.left+=Tt.scrollLeft):Tt=I(),Nt=Y(Tt)}ot=et.cloneNode(!0),C(ot,n.ghostClass,!1),C(ot,n.fallbackClass,!0),C(ot,n.dragClass,!0),x(ot,"transition",""),x(ot,"transform",""),x(ot,"box-sizing","border-box"),x(ot,"margin",0),x(ot,"top",e.top),x(ot,"left",e.left),x(ot,"width",e.width),x(ot,"height",e.height),x(ot,"opacity","0.8"),x(ot,"position",Xt?"absolute":"fixed"),x(ot,"zIndex","100000"),x(ot,"pointerEvents","none"),Vt.ghost=ot,t.appendChild(ot),x(ot,"transform-origin",yt/parseInt(ot.style.width)*100+"% "+wt/parseInt(ot.style.height)*100+"%")}},_onDragStart:function(t,e){var n=this,o=t.dataTransfer,i=n.options;$("dragStart",this,{evt:t}),Vt.eventCanceled?this._onDrop():($("setupClone",this),Vt.eventCanceled||(lt=z(et),lt.draggable=!1,lt.style["will-change"]="",this._hideClone(),C(lt,this.options.chosenClass,!1),Vt.clone=lt),n.cloneId=oe((function(){$("clone",n),Vt.eventCanceled||(n.options.removeCloneOnHide||it.insertBefore(lt,et),n._hideClone(),tt({sortable:n,name:"clone"}))})),!e&&C(et,i.dragClass,!0),e?(xt=!0,n._loopId=setInterval(n._emulateDragOver,50)):(w(document,"mouseup",n._onDrop),w(document,"touchend",n._onDrop),w(document,"touchcancel",n._onDrop),o&&(o.effectAllowed="move",i.setData&&i.setData.call(n,o,et)),y(document,"drop",n),x(et,"transform","translateZ(0)")),Ct=!0,n._dragStartId=oe(n._dragStarted.bind(n,e,t)),y(document,"selectstart",n),Et=!0,g&&x(document.body,"user-select","none"))},_onDragOver:function(t){var e,n,o,i,r=this.el,a=t.target,s=this.options,c=s.group,u=Vt.active,d=ft===c,h=s.sort,f=pt||u,p=this,g=!1;if(!At){if(void 0!==t.preventDefault&&t.cancelable&&t.preventDefault(),a=_(a,s.draggable,r,!0),Y("dragOver"),Vt.eventCanceled)return g;if(et.contains(t.target)||a.animated&&a.animatingX&&a.animatingY||p._ignoreWhileAnimating===a)return B(!1);if(xt=!1,u&&!s.disabled&&(d?h||(o=!it.contains(et)):pt===this||(this.lastPutMode=ft.checkPull(this,u,et,t))&&c.checkPut(this,u,et,t))){if(i="vertical"===this._getDirection(t,a),e=N(et),Y("dragOverValid"),Vt.eventCanceled)return g;if(o)return nt=it,R(),this._hideClone(),Y("revert"),Vt.eventCanceled||(rt?it.insertBefore(et,rt):it.appendChild(et)),B(!0);var v=k(r,s.draggable);if(!v||Qt(t,i,this)&&!v.animated){if(v===et)return B(!1);if(v&&r===t.target&&(a=v),a&&(n=N(a)),!1!==Jt(it,r,et,e,a,n,t,!!a))return R(),r.appendChild(et),nt=r,F(),B(!0)}else if(a.parentNode===r){n=N(a);var m,b,y=0,w=et.parentNode!==r,E=!Ht(et.animated&&et.toRect||e,a.animated&&a.toRect||n,i),S=i?"top":"left",D=A(a,"top","top")||A(et,"top","top"),T=D?D.scrollTop:void 0;if(St!==a&&(m=n[S],Mt=!1,It=!E&&s.invertSwap||w),y=$t(t,a,n,i,E?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,It,St===a),0!==y){var O=X(et);do{O-=y,b=nt.children[O]}while(b&&("none"===x(b,"display")||b===ot))}if(0===y||b===a)return B(!1);St=a,_t=y;var M=a.nextElementSibling,I=!1;I=1===y;var P=Jt(it,r,et,e,a,n,t,I);if(!1!==P)return 1!==P&&-1!==P||(I=1===P),At=!0,setTimeout(Kt,30),R(),I&&!M?r.appendChild(et):a.parentNode.insertBefore(et,I?M:a),D&&j(D,0,T-D.scrollTop),nt=et.parentNode,void 0===m||It||(Dt=Math.abs(m-N(a)[S])),F(),B(!0)}if(r.contains(et))return B(!1)}return!1}function Y(s,c){$(s,p,l({evt:t,isOwner:d,axis:i?"vertical":"horizontal",revert:o,dragRect:e,targetRect:n,canSort:h,fromSortable:f,target:a,completed:B,onMove:function(n,o){return Jt(it,r,et,e,n,N(n),t,o)},changed:F},c))}function R(){Y("dragOverAnimationCapture"),p.captureAnimationState(),p!==f&&f.captureAnimationState()}function B(e){return Y("dragOverCompleted",{insertion:e}),e&&(d?u._hideClone():u._showClone(p),p!==f&&(C(et,pt?pt.options.ghostClass:u.options.ghostClass,!1),C(et,s.ghostClass,!0)),pt!==p&&p!==Vt.active?pt=p:p===Vt.active&&pt&&(pt=null),f===p&&(p._ignoreWhileAnimating=a),p.animateAll((function(){Y("dragOverAnimationComplete"),p._ignoreWhileAnimating=null})),p!==f&&(f.animateAll(),f._ignoreWhileAnimating=null)),(a===et&&!et.animated||a===r&&!a.animated)&&(St=null),s.dragoverBubble||t.rootEl||a===document||(et.parentNode[G]._isOutsideThisEl(t.target),!e&&Gt(t)),!s.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),g=!0}function F(){ut=X(et),ht=X(et,s.draggable),tt({sortable:p,name:"change",toEl:r,newIndex:ut,newDraggableIndex:ht,originalEvent:t})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){w(document,"mousemove",this._onTouchMove),w(document,"touchmove",this._onTouchMove),w(document,"pointermove",this._onTouchMove),w(document,"dragover",Gt),w(document,"mousemove",Gt),w(document,"touchmove",Gt)},_offUpEvents:function(){var t=this.el.ownerDocument;w(t,"mouseup",this._onDrop),w(t,"touchend",this._onDrop),w(t,"pointerup",this._onDrop),w(t,"touchcancel",this._onDrop),w(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;ut=X(et),ht=X(et,n.draggable),$("drop",this,{evt:t}),nt=et&&et.parentNode,ut=X(et),ht=X(et,n.draggable),Vt.eventCanceled||(Ct=!1,It=!1,Mt=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),ie(this.cloneId),ie(this._dragStartId),this.nativeDraggable&&(w(document,"drop",this),w(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),g&&x(document.body,"user-select",""),x(et,"transform",""),t&&(Et&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),ot&&ot.parentNode&&ot.parentNode.removeChild(ot),(it===nt||pt&&"clone"!==pt.lastPutMode)&&lt&&lt.parentNode&&lt.parentNode.removeChild(lt),et&&(this.nativeDraggable&&w(et,"dragend",this),Zt(et),et.style["will-change"]="",Et&&!Ct&&C(et,pt?pt.options.ghostClass:this.options.ghostClass,!1),C(et,this.options.chosenClass,!1),tt({sortable:this,name:"unchoose",toEl:nt,newIndex:null,newDraggableIndex:null,originalEvent:t}),it!==nt?(ut>=0&&(tt({rootEl:nt,name:"add",toEl:nt,fromEl:it,originalEvent:t}),tt({sortable:this,name:"remove",toEl:nt,originalEvent:t}),tt({rootEl:nt,name:"sort",toEl:nt,fromEl:it,originalEvent:t}),tt({sortable:this,name:"sort",toEl:nt,originalEvent:t})),pt&&pt.save()):ut!==ct&&ut>=0&&(tt({sortable:this,name:"update",toEl:nt,originalEvent:t}),tt({sortable:this,name:"sort",toEl:nt,originalEvent:t})),Vt.active&&(null!=ut&&-1!==ut||(ut=ct,ht=dt),tt({sortable:this,name:"end",toEl:nt,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){$("nulling",this),it=et=nt=ot=rt=lt=at=st=gt=vt=Et=ut=ht=ct=dt=St=_t=pt=ft=Vt.dragged=Vt.ghost=Vt.clone=Vt.active=null,Pt.forEach((function(t){t.checked=!0})),Pt.length=mt=bt=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":et&&(this._onDragOver(t),qt(t));break;case"selectstart":t.preventDefault();break}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,i=n.length,r=this.options;o<i;o++)t=n[o],_(t,r.draggable,this.el,!1)&&e.push(t.getAttribute(r.dataIdAttr)||ee(t));return e},sort:function(t){var e={},n=this.el;this.toArray().forEach((function(t,o){var i=n.children[o];_(i,this.options.draggable,n,!1)&&(e[t]=i)}),this),t.forEach((function(t){e[t]&&(n.removeChild(e[t]),n.appendChild(e[t]))}))},save:function(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function(t,e){return _(t,e||this.options.draggable,this.el,!1)},option:function(t,e){var n=this.options;if(void 0===e)return n[t];var o=K.modifyOption(this,t,e);n[t]="undefined"!==typeof o?o:e,"group"===t&&Wt(n)},destroy:function(){$("destroy",this);var t=this.el;t[G]=null,w(t,"mousedown",this._onTapStart),w(t,"touchstart",this._onTapStart),w(t,"pointerdown",this._onTapStart),this.nativeDraggable&&(w(t,"dragover",this),w(t,"dragenter",this)),Array.prototype.forEach.call(t.querySelectorAll("[draggable]"),(function(t){t.removeAttribute("draggable")})),this._onDrop(),this._disableDelayedDragEvents(),Ot.splice(Ot.indexOf(this.el),1),this.el=t=null},_hideClone:function(){if(!st){if($("hideClone",this),Vt.eventCanceled)return;x(lt,"display","none"),this.options.removeCloneOnHide&&lt.parentNode&&lt.parentNode.removeChild(lt),st=!0}},_showClone:function(t){if("clone"===t.lastPutMode){if(st){if($("showClone",this),Vt.eventCanceled)return;it.contains(et)&&!this.options.group.revertClone?it.insertBefore(lt,et):rt?it.insertBefore(lt,rt):it.appendChild(lt),this.options.group.revertClone&&this.animate(et,lt),x(lt,"display",""),st=!1}}else this._hideClone()}},kt&&y(document,"touchmove",(function(t){(Vt.active||Ct)&&t.cancelable&&t.preventDefault()})),Vt.utils={on:y,off:w,css:x,find:M,is:function(t,e){return!!_(t,e,t,!1)},extend:F,throttle:L,closest:_,toggleClass:C,clone:z,index:X,nextTick:oe,cancelNextTick:ie,detectDirection:Ft,getChild:P},Vt.get=function(t){return t[G]},Vt.mount=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];e[0].constructor===Array&&(e=e[0]),e.forEach((function(t){if(!t.prototype||!t.prototype.constructor)throw"Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(t));t.utils&&(Vt.utils=l({},Vt.utils,t.utils)),K.mount(t)}))},Vt.create=function(t,e){return new Vt(t,e)},Vt.version=u;var re,ae,le,se,ce,ue,de=[],he=!1;function fe(){function t(){for(var t in this.defaults={scroll:!0,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)"_"===t.charAt(0)&&"function"===typeof this[t]&&(this[t]=this[t].bind(this))}return t.prototype={dragStarted:function(t){var e=t.originalEvent;this.sortable.nativeDraggable?y(document,"dragover",this._handleAutoScroll):this.options.supportPointer?y(document,"pointermove",this._handleFallbackAutoScroll):e.touches?y(document,"touchmove",this._handleFallbackAutoScroll):y(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted:function(t){var e=t.originalEvent;this.options.dragOverBubble||e.rootEl||this._handleAutoScroll(e)},drop:function(){this.sortable.nativeDraggable?w(document,"dragover",this._handleAutoScroll):(w(document,"pointermove",this._handleFallbackAutoScroll),w(document,"touchmove",this._handleFallbackAutoScroll),w(document,"mousemove",this._handleFallbackAutoScroll)),ge(),pe(),W()},nulling:function(){ce=ae=re=he=ue=le=se=null,de.length=0},_handleFallbackAutoScroll:function(t){this._handleAutoScroll(t,!0)},_handleAutoScroll:function(t,e){var n=this,o=(t.touches?t.touches[0]:t).clientX,i=(t.touches?t.touches[0]:t).clientY,r=document.elementFromPoint(o,i);if(ce=t,e||f||h||g){ve(t,this.options,r,e);var a=B(r,!0);!he||ue&&o===le&&i===se||(ue&&ge(),ue=setInterval((function(){var r=B(document.elementFromPoint(o,i),!0);r!==a&&(a=r,pe()),ve(t,n.options,r,e)}),10),le=o,se=i)}else{if(!this.options.bubbleScroll||B(r,!0)===I())return void pe();ve(t,this.options,B(r,!1),!1)}}},a(t,{pluginName:"scroll",initializeByDefault:!0})}function pe(){de.forEach((function(t){clearInterval(t.pid)})),de=[]}function ge(){clearInterval(ue)}var ve=L((function(t,e,n,o){if(e.scroll){var i,r=(t.touches?t.touches[0]:t).clientX,a=(t.touches?t.touches[0]:t).clientY,l=e.scrollSensitivity,s=e.scrollSpeed,c=I(),u=!1;ae!==n&&(ae=n,pe(),re=e.scroll,i=e.scrollFn,!0===re&&(re=B(n,!0)));var d=0,h=re;do{var f=h,p=N(f),g=p.top,v=p.bottom,m=p.left,b=p.right,y=p.width,w=p.height,E=void 0,S=void 0,_=f.scrollWidth,D=f.scrollHeight,T=x(f),C=f.scrollLeft,O=f.scrollTop;f===c?(E=y<_&&("auto"===T.overflowX||"scroll"===T.overflowX||"visible"===T.overflowX),S=w<D&&("auto"===T.overflowY||"scroll"===T.overflowY||"visible"===T.overflowY)):(E=y<_&&("auto"===T.overflowX||"scroll"===T.overflowX),S=w<D&&("auto"===T.overflowY||"scroll"===T.overflowY));var M=E&&(Math.abs(b-r)<=l&&C+y<_)-(Math.abs(m-r)<=l&&!!C),A=S&&(Math.abs(v-a)<=l&&O+w<D)-(Math.abs(g-a)<=l&&!!O);if(!de[d])for(var P=0;P<=d;P++)de[P]||(de[P]={});de[d].vx==M&&de[d].vy==A&&de[d].el===f||(de[d].el=f,de[d].vx=M,de[d].vy=A,clearInterval(de[d].pid),0==M&&0==A||(u=!0,de[d].pid=setInterval(function(){o&&0===this.layer&&Vt.active._onTouchMove(ce);var e=de[this.layer].vy?de[this.layer].vy*s:0,n=de[this.layer].vx?de[this.layer].vx*s:0;"function"===typeof i&&"continue"!==i.call(Vt.dragged.parentNode[G],n,e,t,ce,de[this.layer].el)||j(de[this.layer].el,n,e)}.bind({layer:d}),24))),d++}while(e.bubbleScroll&&h!==c&&(h=B(h,!1)));he=u}}),30),me=function(t){var e=t.originalEvent,n=t.putSortable,o=t.dragEl,i=t.activeSortable,r=t.dispatchSortableEvent,a=t.hideGhostForTarget,l=t.unhideGhostForTarget;if(e){var s=n||i;a();var c=e.changedTouches&&e.changedTouches.length?e.changedTouches[0]:e,u=document.elementFromPoint(c.clientX,c.clientY);l(),s&&!s.el.contains(u)&&(r("spill"),this.onSpill({dragEl:o,putSortable:n}))}};function be(){}function ye(){}be.prototype={startIndex:null,dragStart:function(t){var e=t.oldDraggableIndex;this.startIndex=e},onSpill:function(t){var e=t.dragEl,n=t.putSortable;this.sortable.captureAnimationState(),n&&n.captureAnimationState();var o=P(this.sortable.el,this.startIndex,this.options);o?this.sortable.el.insertBefore(e,o):this.sortable.el.appendChild(e),this.sortable.animateAll(),n&&n.animateAll()},drop:me},a(be,{pluginName:"revertOnSpill"}),ye.prototype={onSpill:function(t){var e=t.dragEl,n=t.putSortable,o=n||this.sortable;o.captureAnimationState(),e.parentNode&&e.parentNode.removeChild(e),o.animateAll()},drop:me},a(ye,{pluginName:"removeOnSpill"});Vt.mount(new fe),Vt.mount(ye,be),e["a"]=Vt}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d0f078a.cfa51ace.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d0f078a.cfa51ace.js
                                                  new file mode 100644
                                                  index 00000000..96ba0754
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d0f078a.cfa51ace.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0f078a"],{"9d09":function(t,e,i){"use strict";i.r(e);var n=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{style:{width:"100%",height:t.mainHeight}},[i("iframe",{staticStyle:{border:"0"},attrs:{id:"orgIframe",width:"100%",height:parseInt(t.mainHeight)-4+"px",name:"orgIframe",src:t.src}})])},s=[],a={name:"BPMOrg",data:function(){return{src:"./w?sid="+this.$store.state.sessionId+"&cmd=com.actionsoft.apps.coe.pal_average_user_org",mainHeight:parseInt(this.$store.getters.getTopMainHeightFn)-4+"px"}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(t,e){this.mainHeight=parseInt(this.$store.getters.getTopMainHeightFn)-4+"px"}}},r=a,o=i("cba8"),c=Object(o["a"])(r,n,s,!1,null,"2280cc48",null);e["default"]=c.exports}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d216d3a.04d93109.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d216d3a.04d93109.js
                                                  new file mode 100644
                                                  index 00000000..ea511fe8
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d216d3a.04d93109.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d216d3a"],{c3b6:function(t,e,i){"use strict";i.r(e);var n=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{style:{width:"100%",height:t.mainHeight},attrs:{id:"cooperation"}},[i("iframe",{staticStyle:{border:"0"},attrs:{id:"coopIframe",width:"100%",height:parseInt(t.mainHeight)-4+"px",name:"coopIframe",src:t.src}})])},a=[],o={name:"cooperationCreate",data:function(){return{src:wHref+"?sid="+this.$store.state.sessionId+"&mainPage=create&cmd=com.actionsoft.apps.coe.pal.cooperation_main",mainHeight:parseInt(this.$store.getters.getTopMainHeightFn)-4+"px"}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(t,e){this.mainHeight=parseInt(this.$store.getters.getTopMainHeightFn)-4+"px"}}},s=o,r=i("cba8"),c=Object(r["a"])(s,n,a,!1,null,"6a826a48",null);e["default"]=c.exports}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d224b23.e5c50290.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d224b23.e5c50290.js
                                                  new file mode 100644
                                                  index 00000000..a07989f7
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d224b23.e5c50290.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d224b23"],{e0df:function(t,e,i){"use strict";i.r(e);var n=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{style:{width:"100%",height:t.mainHeight},attrs:{id:"cooperationUpdate"}},[i("iframe",{staticStyle:{border:"0"},attrs:{id:"coopIframe",width:"100%",height:parseInt(t.mainHeight)-4+"px",name:"coopIframe",src:t.src}})])},a=[],o={name:"CooperationUpdate",data:function(){return{src:wHref+"?sid="+this.$store.state.sessionId+"&mainPage=update&cmd=com.actionsoft.apps.coe.pal.cooperation_main",mainHeight:parseInt(this.$store.getters.getTopMainHeightFn)-4+"px"}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(t,e){this.mainHeight=parseInt(this.$store.getters.getTopMainHeightFn)-4+"px"}}},s=o,r=i("cba8"),p=Object(r["a"])(s,n,a,!1,null,"543345d8",null);e["default"]=p.exports}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d224ef1.814c17e3.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d224ef1.814c17e3.js
                                                  new file mode 100644
                                                  index 00000000..4f9e54d8
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-2d224ef1.814c17e3.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d224ef1"],{e1f5:function(e,s,t){"use strict";t.r(s);var n=function(){var e=this,s=e.$createElement,t=e._self._c||s;return t("div",{staticClass:"devGetSession"},[e._v(" 正在获取session ")])},a=[],o=t("a18c"),d=t("0f08"),i=t("4360");d["a"].post({url:"jd",data:{userid:devUserInfo.userid,pwd:devUserInfo.pwd,lang:"cn",cmd:"com.actionsoft.apps.getsession.get",deviceType:"pc"}}).then((function(e){"error"==e.result?alert("获取session错误:"+e.msg):(i["a"].commit("edit",{sessionId:e.data.sid}),o["a"].replace("/"))}));var c={data:function(){return{dwList:[]}},methods:{},mounted:function(){}},r=c,u=t("cba8"),l=Object(u["a"])(r,n,a,!1,null,null,null);s["default"]=l.exports}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-4def56c4.720b1ccf.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-4def56c4.720b1ccf.js
                                                  new file mode 100644
                                                  index 00000000..f6365390
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-4def56c4.720b1ccf.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-4def56c4"],{"6e3e":function(e,t,a){},"82bd":function(e,t,a){"use strict";a.r(t);var o=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-container",{attrs:{id:"commonRepository"}},[a("el-header",{attrs:{height:e.headerHeight}},[a("el-col",{staticStyle:{position:"relative",top:"10px"},attrs:{span:24}},[a("div",{staticStyle:{display:"inline-block",float:"left"}},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"100px"},attrs:{type:"primary"},on:{click:e.add}},[e._v("添加流程")])],1),a("div",{staticStyle:{display:"inline-block",float:"right",width:"320px","padding-right":"20px"}},[a("el-input",{attrs:{placeholder:"搜索","prefix-icon":"el-icon-search",size:"small",clearable:""},on:{input:e.searchRepository},model:{value:e.searchInput,callback:function(t){e.searchInput=t},expression:"searchInput"}})],1)]),a("el-dialog",{directives:[{name:"loading",rawName:"v-loading",value:e.dlgLoading,expression:"dlgLoading"}],attrs:{title:"添加常用流程",visible:e.dialog.visible,"modal-append-to-body":!1,"close-on-click-modal":!1,"close-on-press-escape":!0,"before-close":e.handleCloseDlg,width:"500px"},on:{"update:visible":function(t){return e.$set(e.dialog,"visible",t)},close:e.clearDlgData}},[a("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}]},[a("div",{staticStyle:{padding:"10px",border:"1px solid #e9e9e9"}},[a("div",{staticStyle:{height:"300px"}},[a("el-select",{staticStyle:{width:"100%"},attrs:{filterable:"","default-first-option":"",size:"small",placeholder:"请选择资产库"},on:{change:e.changeWs},model:{value:e.dialog.ws.value,callback:function(t){e.$set(e.dialog.ws,"value",t)},expression:"dialog.ws.value"}},e._l(e.dialog.ws.options,(function(e){return a("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1),a("div",{staticStyle:{height:"268px",overflow:"auto"}},[""!=e.dialog.ws.value?a("el-tree",{ref:"repositoryTree",attrs:{props:e.dialog.tree.props,"default-checked-keys":e.dialog.tree.value,"expand-on-click-node":!1,"highlight-current":!0,"check-strictly":"","show-checkbox":"","node-key":"versionId",lazy:"",load:e.loadNode},on:{"node-click":e.openNode,"node-expand":e.expandNode,"node-collapse":e.closeNode,"check-change":e.checkedNode},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.node;t.data;return a("span",{},[a("i",{staticClass:"awsui-iconfont tree-content-icon tree-content-icon-padding",style:{color:o.data.icon.color},domProps:{innerHTML:e._s(o.data.icon.icon)}}),a("span",[e._v(e._s(o.data.name))])])}}],null,!1,1613751043)}):e._e()],1)],1)])]),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{staticClass:"button-general-color",attrs:{type:"primary"},on:{click:function(t){return e.saveCommonData()}}},[e._v("确定")]),a("awsui-button",{on:{click:e.closeDlg}},[e._v("取消")])],1)])],1),a("el-main",[a("div",{style:{cursor:"move",height:e.mainHeight,width:"100%"},attrs:{id:"main"}},[a("el-table",{staticStyle:{width:"100%"},attrs:{height:e.mainHeight,data:e.data,"row-key":"id"}},[a("el-table-column",{attrs:{prop:"move",label:"",align:"center",width:"20"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("div",{staticClass:"operate-icon-display"},[a("p",{staticClass:"text-second-color"},[a("i",{staticClass:"awsui-iconfont",staticStyle:{display:"inline-block",cursor:"pointer"}},[e._v("")])])])]}}])}),a("el-table-column",{attrs:{prop:"sort",label:"排序",align:"center",width:"80"}}),a("el-table-column",{attrs:{prop:"name",label:"名称","show-overflow-tooltip":!0,width:"400"}}),a("el-table-column",{attrs:{prop:"wsName",label:"关联资产库","show-overflow-tooltip":!0}}),a("el-table-column",{attrs:{prop:"opt",label:"操作",align:"center",width:"100"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("div",{staticClass:"operate-icon-display"},[a("p",{staticClass:"text-second-color"},[a("i",{staticClass:"awsui-iconfont",staticStyle:{display:"inline-block",cursor:"pointer"},on:{click:function(a){return e.deleteCommonData(t.row.id,t.row.name)}}},[e._v("")])])])]}}])})],1)],1)])],1)},i=[],s=a("2480"),n=a("0f08"),l={name:"commonRepository",components:{Sortable:s["a"]},data:function(){return{headerHeight:"50px",mainHeight:parseInt(this.$store.getters.getTopMainHeightFn)-52+"px",searchInput:"",data:[],dataTemp:[],checkedData:[],dlgLoading:!1,loading:!1,dialog:{visible:!1,ws:{value:"",options:[]},tree:{props:{children:"children",label:"label"},value:[]}}}},mounted:function(){document.body.ondrop=function(e){e.preventDefault(),e.stopPropagation()},this.initData(),this.rowDrop()},methods:{rowDrop:function(){var e=document.querySelector(".el-table__body-wrapper tbody"),t=this;s["a"].create(e,{onEnd:function(e){var a=e.newIndex,o=e.oldIndex,i=t.data.splice(o,1)[0];t.data.splice(a,0,i);for(var s=[],l=0;l<t.data.length;l++)t.data[l].sort=l+1,s.push(t.data[l].versionId);var c={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_common_update_save",resourceIds:JSON.stringify(s)}};n["a"].post(c).then((function(e){"ok"==e.result?t.$message({message:"移动成功",type:"success"}):t.$message.error(e.msg)})).catch((function(e){console.log(e)}))}})},initData:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_common_list"}};n["a"].post(t).then((function(t){if("ok"==t.result){var a=t.data.data;e.data=a,e.dataTemp=JSON.parse(JSON.stringify(e.data)),e.checkedData=t.data.checkedData}else e.$message(t.msg)})).catch((function(e){console.log(e)}))},searchRepository:function(){if(this.searchInput&&""!=this.searchInput.trim()){for(var e=[],t=0;t<this.dataTemp.length;t++)(this.dataTemp[t].name.indexOf(this.searchInput)>-1||this.dataTemp[t].wsName.indexOf(this.searchInput)>-1)&&e.push(this.dataTemp[t]);this.data=e}else this.data=this.dataTemp},add:function(){this.dialog.visible=!0,this.loading=!0;var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_create_data_query"}};n["a"].post(t).then((function(t){if("ok"==t.result){var a=t.data;e.dialog.tree.value=void 0==e.checkedData[a.wsId]?[]:e.checkedData[a.wsId],e.dialog.ws.value=a.wsId,e.dialog.ws.options=a.wsArr}else e.$message(t.msg);e.loading=!1})).catch((function(t){console.log(t),e.loading=!1}))},deleteCommonData:function(e,t){var a=this;a.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",type:"warning"}).then((function(){var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_common_data_delete",ids:e}};n["a"].post(t).then((function(e){"ok"==e.result?(a.$message({message:"删除成功",type:"success"}),a.initData()):a.$message(e.msg)})).catch((function(e){console.log(e)}))})).catch((function(){}))},clearDlgData:function(){this.dialog.ws.value="",this.dialog.ws.options=[],this.dialog.tree.data=[],this.dialog.tree.value=[]},closeDlg:function(){this.dialog.visible=!1},handleCloseDlg:function(e){this.closeDlg(),e()},saveCommonData:function(){var e=this,t=e.dialog.ws.value,a=e.dialog.tree.value;e.dlgLoading=!0;var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_common_create_save",wsId:t,resourceIds:a.join(",")}};n["a"].post(o).then((function(t){"ok"==t.result?(e.dlgLoading=!1,e.clearDlgData(),e.closeDlg(),e.$message({message:"保存成功",type:"success"}),e.initData()):(e.$message.error("保存失败"),e.dlgLoading=!1)})).catch((function(t){console.log(t),e.dlgLoading=!1}))},changeWs:function(e){var t=this;t.dialog.ws.value="",t.dialog.tree.value=void 0==t.checkedData[e]?[]:t.checkedData[e],t.$nextTick((function(){t.dialog.ws.value=e}))},openNode:function(e,t,a){},loadNode:function(e,t){var a=this,o={url:"jd",data:{}};o.data.wsId=a.dialog.ws.value,o.data.teamId="",o.data.cmd="com.actionsoft.apps.coe.pal_processlevel_tree_data",0===e.level?o.data.pid="":o.data.pid=e.data.id,n["a"].post(o).then((function(o){for(var i=0;i<o.data.length;i++)o.data[i].id.length<36&&(o.data[i].disabled=!0);if(t(o.data),0==e.level&&o.data.length>0){var s=a.$refs.repositoryTree;s.getNode(o.data[0].id).expand(),setTimeout((function(){var e=s.getNode(o.data[0].id).childNodes[0];null!=e&&e.expand()}),500)}})).catch((function(e){console.log(e)}))},expandNode:function(e,t,a){},closeNode:function(e,t,a){t.childNodes=[],t.loaded=!1},checkedNode:function(e,t,a){var o=this,i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_repository_data_query",wsId:o.dialog.ws.value,pid:e.id}};n["a"].post(i).then((function(a){var i=a.data,s=e.versionId;if(t){var n=o.dialog.tree.value;-1==n.indexOf(s)&&n.push(s);for(var l=0;l<i.length;l++)-1==n.indexOf(i[l])&&n.push(i[l]);o.$refs.repositoryTree.setCheckedKeys(n)}else{for(var c=o.dialog.tree.value,d=[],r=0;r<c.length;r++)c[r]!=s&&-1==i.indexOf(c[r])&&d.push(c[r]);o.dialog.tree.value=d,o.$refs.repositoryTree.setCheckedKeys([])}})).catch((function(e){console.log(e)}))}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(e,t){this.mainHeight=parseInt(this.$store.getters.getTopMainHeightFn)-parseInt(this.headerHeight)-2+"px"}}},c=l,d=(a("e9b8"),a("cba8")),r=Object(d["a"])(c,o,i,!1,null,"c633f5ea",null);t["default"]=r.exports},e9b8:function(e,t,a){"use strict";a("6e3e")}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-4e7e9573.a31638f3.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-4e7e9573.a31638f3.js
                                                  new file mode 100644
                                                  index 00000000..520bfb85
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-4e7e9573.a31638f3.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-4e7e9573"],{1305:function(t,e,a){"use strict";a.r(e);var o=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("el-container",{attrs:{id:"workspaceManage"}},[a("el-main",{staticStyle:{height:"100%"},attrs:{id:"workspaceManageMain"}},[a("el-table",{ref:"workspaceManageTable",staticStyle:{width:"100%"},attrs:{id:"workspaceManageTable",data:t.tableData,height:t.tableHeight}},[a("el-table-column",{attrs:{prop:"name",label:"资产库","min-width":"250"},scopedSlots:t._u([{key:"default",fn:function(e){return[a("div",[a("div",[a("p",{staticClass:"text-general-color"},[t._v(" "+t._s(e.row.name)+" ")])]),a("div",{staticStyle:{display:"table"}},[a("p",{staticClass:"text-second-color",staticStyle:{"font-size":"12px"}},[t._v(" "+t._s(e.row.desc)+" ")])])])]}}])}),a("el-table-column",{attrs:{prop:"admin",label:"管理员","min-width":"180"}}),a("el-table-column",{attrs:{prop:"count",label:"文件量","min-width":"150"}}),a("el-table-column",{attrs:{prop:"open",label:"启用","min-width":"150"},scopedSlots:t._u([{key:"default",fn:function(e){return[a("el-switch",{staticStyle:{display:"block"},attrs:{"active-color":"#4E7FF9","inactive-color":"#E2E2E2"},on:{change:function(a){return t.changeWsStatus(e.row.wsId,e.row.name,e.row.open)}},model:{value:e.row.open,callback:function(a){t.$set(e.row,"open",a)},expression:"scope.row.open"}})]}}])}),a("el-table-column",{attrs:{prop:"operation",label:"操作"},scopedSlots:t._u([{key:"default",fn:function(e){return[a("div",{staticClass:"operate-icon-display"},[e.row.open?a("i",{staticClass:"el-icon-setting",staticStyle:{cursor:"pointer"},on:{click:function(a){return t.updateWorkspace(e.row.wsId)}}}):t._e(),e.row.open?t._e():a("i",{staticClass:"el-icon-delete",staticStyle:{cursor:"pointer"},on:{click:function(a){return t.deleteWorkspace(e.row.wsId,e.row.name)}}})])]}}])})],1),a("WorkspaceUpdate",{ref:"workspaceUpdate"})],1)],1)},s=[],n=a("5d66"),i=a("0f08"),l={name:"WorkspaceManage",components:{WorkspaceUpdate:n["a"]},data:function(){return{tableHeight:parseInt(this.$store.getters.getTopMainHeightFn)-22+"px",tableData:[]}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},created:function(){},mounted:function(){var t=this;t.initData()},methods:{initData:function(){var t=this,e={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_manage_data"}};i["a"].post(e).then((function(e){if("ok"==e.result){var a=e.data.data;t.tableData=a,t.$refs.workspaceManageTable.bodyWrapper.scrollTop=0}})).catch((function(t){console.log(t)}))},changeWsStatus:function(t,e,a){var o=1,s="停用";a&&(o=0,s="启用");var n=this;n.$confirm("确定"+s+"["+e+"]吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",closeOnClickModal:!1,closeOnPressEscape:!1,showClose:!0,type:"warning"}).then((function(){var e={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_stoporopen",id:t,state:o}};i["a"].post(e).then((function(t){"1"==t.msg?(n.$message({message:s+"成功",type:"success"}),n.initData()):n.$message.error("变更状态失败请稍后重试")})).catch((function(t){console.log(t)}))})).catch((function(){for(var e in n.tableData)n.tableData[e].wsId==t&&(n.tableData[e].open=!a)}))},deleteWorkspace:function(t,e){var a=this;a.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",closeOnClickModal:!1,closeOnPressEscape:!1,showClose:!0,type:"warning"}).then((function(){var e={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_remove",id:t}};i["a"].post(e).then((function(t){"1"==t.msg?(a.$message({message:"删除成功",type:"success"}),a.initData()):a.$message.error("删除失败请稍后重试")})).catch((function(t){console.log(t)}))})).catch((function(){}))},updateWorkspace:function(t){this.$refs.workspaceUpdate.openUpdateWsDlg("update",t,this)},updateWorkspaceCallback:function(){this.initData()}},watch:{listenTopMainHeight:function(t,e){this.tableHeight=parseInt(t)-22+"px"}}},r=l,c=(a("5b50"),a("cba8")),u=Object(c["a"])(r,o,s,!1,null,"6a19ae20",null);e["default"]=u.exports},"38fe":function(t,e,a){},"5b50":function(t,e,a){"use strict";a("38fe")},"5d66":function(t,e,a){"use strict";var o=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("el-dialog",{staticClass:"workspace-update",attrs:{title:t.title,visible:t.dialogVisible,"close-on-click-modal":!1,width:"450px","before-close":t.handleClose},on:{"update:visible":function(e){t.dialogVisible=e}}},[a("div",{staticStyle:{border:"1px solid #F2F2F2",padding:"0px 10px 10px 10px"}},[a("awsui-form",{ref:"ruleForm",attrs:{model:t.ruleForm,"label-position":"top",rules:t.rules}},[a("awsui-form-item",{attrs:{label:"名称",prop:"name"}},[a("awsui-input",{attrs:{placeholder:"公司名称或项目名称",maxlength:"36","validate-event":!1},model:{value:t.ruleForm.name,callback:function(e){t.$set(t.ruleForm,"name",e)},expression:"ruleForm.name"}})],1),a("awsui-form-item",{attrs:{label:"描述"}},[a("awsui-input",{attrs:{type:"textarea",placeholder:"请输入描述",maxlength:"255","show-word-limit":""},model:{value:t.ruleForm.desc,callback:function(e){t.$set(t.ruleForm,"desc",e)},expression:"ruleForm.desc"}})],1),a("awsui-form-item",{attrs:{label:"管理员",prop:"admin"}},[a("awsui-select",{attrs:{options:t.adminOptions,multiple:"",placeholder:"请选择管理员","validate-event":!1},on:{change:t.updateAdminData},model:{value:t.ruleForm.admin,callback:function(e){t.$set(t.ruleForm,"admin",e)},expression:"ruleForm.admin"}})],1),a("awsui-form-item",{attrs:{label:"分类方法"}},[a("div",[a("el-radio-group",{attrs:{fill:"#4E7FF9",size:"mini",disabled:""!=t.wsId},model:{value:t.ruleForm.type,callback:function(e){t.$set(t.ruleForm,"type",e)},expression:"ruleForm.type"}},[a("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:"bottom-start"}},[a("span",{attrs:{slot:"content"},slot:"content"},[t._v('二分法流程分为"核心经营流程"和"支持管理流程"')]),a("el-radio-button",{attrs:{label:"二分法"}})],1),a("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:"bottom-start"}},[a("span",{attrs:{slot:"content"},slot:"content"},[t._v('三分法流程分为"战略流程"、"运营流程"和"支持流程"')]),a("el-radio-button",{attrs:{label:"三分法"}})],1),a("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:"bottom-start"}},[a("span",{attrs:{slot:"content"},slot:"content"},[t._v("可自己定义流程结构")]),a("el-radio-button",{attrs:{label:"自定义"}})],1)],1)],1)])],1)],1),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{staticClass:"button-general-color",attrs:{disabled:t.buttonDisabled,type:"primary"},on:{click:t.save}},[t._v("确定")]),a("awsui-button",{on:{click:function(e){return t.cancel()}}},[t._v("取消")])],1)])},s=[],n=a("0f08"),i={name:"WorkspaceUpdate",data:function(){return{title:"新建资产库",buttonDisabled:!1,wsId:"",dialogVisible:!1,adminOptions:[],obj:null,ruleForm:{name:"",desc:"",admin:"",type:"二分法"},rules:{name:[{required:!0,message:"请输入资产库名称",trigger:"blur"}],admin:[{required:!0,message:"请选择管理员",trigger:"change"}]}}},mounted:function(){},methods:{openUpdateWsDlg:function(t,e,a){"create"==t?(this.title="新建资产库",this.obj=a):(this.title="修改资产库",this.wsId=e,this.obj=a),this.initData(),this.dialogVisible=!0},cancel:function(){this.$refs["ruleForm"].resetFields(),this.buttonDisabled=!1,this.dialogVisible=!1},handleClose:function(t){this.buttonDisabled=!1,this.$refs["ruleForm"].resetFields(),t()},initData:function(){var t=this,e={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_update_data_query",wsId:t.wsId}};n["a"].post(e).then((function(e){if("ok"==e.result){var a=e.data;t.ruleForm.name=a.name,t.ruleForm.type=0==a.type?"二分法":1==a.type?"三分法":"自定义",t.ruleForm.desc=a.desc,t.ruleForm.admin=a.admin,t.adminOptions=a.adminOptions}else t.$message.error(e.msg)})).catch((function(t){console.log(t)}))},updateAdminData:function(t){this.ruleForm.admin=t},save:function(){var t=this,e=t.ruleForm.name,a=t.ruleForm.desc,o=t.ruleForm.admin;if(""!=e)if(e.length>36)t.$message({message:"[名称]不允许超过36个字",type:"warning"});else if(a.length>255)t.$message({message:"[描述]不允许超过255个字符",type:"warning"});else if(0!=o.length){t.buttonDisabled=!0;var s={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_update_save",wsId:t.wsId,name:t.ruleForm.name,type:"二分法"==t.ruleForm.type?0:"三分法"==t.ruleForm.type?1:2,desc:t.ruleForm.desc,admin:t.ruleForm.admin.join(",")}};n["a"].post(s).then((function(e){"ok"==e.result?(t.$message({message:e.msg,duration:2e3,type:"success"}),t.cancel(),null!=t.obj&&t.obj.updateWorkspaceCallback()):t.$message.error(e.msg),t.buttonDisabled=!1})).catch((function(t){console.log(t)}))}else t.$message({message:"[管理员]不允许为空",type:"warning"});else t.$message({message:"[名称]不允许为空",type:"warning"})}}},l=i,r=(a("ffd2"),a("cba8")),c=Object(r["a"])(l,o,s,!1,null,"08929cd1",null);e["a"]=c.exports},"83af":function(t,e,a){},ffd2:function(t,e,a){"use strict";a("83af")}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-5a76c238.dc28cd20.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-5a76c238.dc28cd20.js
                                                  new file mode 100644
                                                  index 00000000..34d8caeb
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-5a76c238.dc28cd20.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-5a76c238","chunk-2d0ab156","chunk-4e7e9573","chunk-2d0f078a"],{1305:function(e,t,a){"use strict";a.r(t);var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-container",{attrs:{id:"workspaceManage"}},[a("el-main",{staticStyle:{height:"100%"},attrs:{id:"workspaceManageMain"}},[a("el-table",{ref:"workspaceManageTable",staticStyle:{width:"100%"},attrs:{id:"workspaceManageTable",data:e.tableData,height:e.tableHeight}},[a("el-table-column",{attrs:{prop:"name",label:"资产库","min-width":"250"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("div",[a("div",[a("p",{staticClass:"text-general-color"},[e._v(" "+e._s(t.row.name)+" ")])]),a("div",{staticStyle:{display:"table"}},[a("p",{staticClass:"text-second-color",staticStyle:{"font-size":"12px"}},[e._v(" "+e._s(t.row.desc)+" ")])])])]}}])}),a("el-table-column",{attrs:{prop:"admin",label:"管理员","min-width":"180"}}),a("el-table-column",{attrs:{prop:"count",label:"文件量","min-width":"150"}}),a("el-table-column",{attrs:{prop:"open",label:"启用","min-width":"150"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("el-switch",{staticStyle:{display:"block"},attrs:{"active-color":"#4E7FF9","inactive-color":"#E2E2E2"},on:{change:function(a){return e.changeWsStatus(t.row.wsId,t.row.name,t.row.open)}},model:{value:t.row.open,callback:function(a){e.$set(t.row,"open",a)},expression:"scope.row.open"}})]}}])}),a("el-table-column",{attrs:{prop:"operation",label:"操作"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("div",{staticClass:"operate-icon-display"},[t.row.open?a("i",{staticClass:"el-icon-setting",staticStyle:{cursor:"pointer"},on:{click:function(a){return e.updateWorkspace(t.row.wsId)}}}):e._e(),t.row.open?e._e():a("i",{staticClass:"el-icon-delete",staticStyle:{cursor:"pointer"},on:{click:function(a){return e.deleteWorkspace(t.row.wsId,t.row.name)}}})])]}}])})],1),a("WorkspaceUpdate",{ref:"workspaceUpdate"})],1)],1)},o=[],s=a("5d66"),i=a("0f08"),r={name:"WorkspaceManage",components:{WorkspaceUpdate:s["a"]},data:function(){return{tableHeight:parseInt(this.$store.getters.getTopMainHeightFn)-22+"px",tableData:[]}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},created:function(){},mounted:function(){var e=this;e.initData()},methods:{initData:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_manage_data"}};i["a"].post(t).then((function(t){if("ok"==t.result){var a=t.data.data;e.tableData=a,e.$refs.workspaceManageTable.bodyWrapper.scrollTop=0}})).catch((function(e){console.log(e)}))},changeWsStatus:function(e,t,a){var n=1,o="停用";a&&(n=0,o="启用");var s=this;s.$confirm("确定"+o+"["+t+"]吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",closeOnClickModal:!1,closeOnPressEscape:!1,showClose:!0,type:"warning"}).then((function(){var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_stoporopen",id:e,state:n}};i["a"].post(t).then((function(e){"1"==e.msg?(s.$message({message:o+"成功",type:"success"}),s.initData()):s.$message.error("变更状态失败请稍后重试")})).catch((function(e){console.log(e)}))})).catch((function(){for(var t in s.tableData)s.tableData[t].wsId==e&&(s.tableData[t].open=!a)}))},deleteWorkspace:function(e,t){var a=this;a.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",closeOnClickModal:!1,closeOnPressEscape:!1,showClose:!0,type:"warning"}).then((function(){var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_remove",id:e}};i["a"].post(t).then((function(e){"1"==e.msg?(a.$message({message:"删除成功",type:"success"}),a.initData()):a.$message.error("删除失败请稍后重试")})).catch((function(e){console.log(e)}))})).catch((function(){}))},updateWorkspace:function(e){this.$refs.workspaceUpdate.openUpdateWsDlg("update",e,this)},updateWorkspaceCallback:function(){this.initData()}},watch:{listenTopMainHeight:function(e,t){this.tableHeight=parseInt(e)-22+"px"}}},l=r,c=(a("5b50"),a("cba8")),u=Object(c["a"])(l,n,o,!1,null,"6a19ae20",null);t["default"]=u.exports},1485:function(e,t,a){"use strict";a.r(t);var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticStyle:{width:"100%",height:"100%"}},[a("iframe",{staticStyle:{border:"0"},attrs:{id:"iframe",width:"100%",height:"100%",name:"iframe",src:e.src}})])},o=[],s={name:"MappingManagement",data:function(){return{src:"./w?sid="+this.$store.state.sessionId+"&cmd=com.actionsoft.apps.coe.pal.mappingmanagement_main_page&dataType="+this.$route.params.dataType}}},i=s,r=a("cba8"),l=Object(r["a"])(i,n,o,!1,null,"56fd105e",null);t["default"]=l.exports},"38fe":function(e,t,a){},"5b50":function(e,t,a){"use strict";a("38fe")},"5d66":function(e,t,a){"use strict";var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-dialog",{staticClass:"workspace-update",attrs:{title:e.title,visible:e.dialogVisible,"close-on-click-modal":!1,width:"450px","before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t}}},[a("div",{staticStyle:{border:"1px solid #F2F2F2",padding:"0px 10px 10px 10px"}},[a("awsui-form",{ref:"ruleForm",attrs:{model:e.ruleForm,"label-position":"top",rules:e.rules}},[a("awsui-form-item",{attrs:{label:"名称",prop:"name"}},[a("awsui-input",{attrs:{placeholder:"公司名称或项目名称",maxlength:"36","validate-event":!1},model:{value:e.ruleForm.name,callback:function(t){e.$set(e.ruleForm,"name",t)},expression:"ruleForm.name"}})],1),a("awsui-form-item",{attrs:{label:"描述"}},[a("awsui-input",{attrs:{type:"textarea",placeholder:"请输入描述",maxlength:"255","show-word-limit":""},model:{value:e.ruleForm.desc,callback:function(t){e.$set(e.ruleForm,"desc",t)},expression:"ruleForm.desc"}})],1),a("awsui-form-item",{attrs:{label:"管理员",prop:"admin"}},[a("awsui-select",{attrs:{options:e.adminOptions,multiple:"",placeholder:"请选择管理员","validate-event":!1},on:{change:e.updateAdminData},model:{value:e.ruleForm.admin,callback:function(t){e.$set(e.ruleForm,"admin",t)},expression:"ruleForm.admin"}})],1),a("awsui-form-item",{attrs:{label:"分类方法"}},[a("div",[a("el-radio-group",{attrs:{fill:"#4E7FF9",size:"mini",disabled:""!=e.wsId},model:{value:e.ruleForm.type,callback:function(t){e.$set(e.ruleForm,"type",t)},expression:"ruleForm.type"}},[a("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:"bottom-start"}},[a("span",{attrs:{slot:"content"},slot:"content"},[e._v('二分法流程分为"核心经营流程"和"支持管理流程"')]),a("el-radio-button",{attrs:{label:"二分法"}})],1),a("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:"bottom-start"}},[a("span",{attrs:{slot:"content"},slot:"content"},[e._v('三分法流程分为"战略流程"、"运营流程"和"支持流程"')]),a("el-radio-button",{attrs:{label:"三分法"}})],1),a("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:"bottom-start"}},[a("span",{attrs:{slot:"content"},slot:"content"},[e._v("可自己定义流程结构")]),a("el-radio-button",{attrs:{label:"自定义"}})],1)],1)],1)])],1)],1),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{staticClass:"button-general-color",attrs:{disabled:e.buttonDisabled,type:"primary"},on:{click:e.save}},[e._v("确定")]),a("awsui-button",{on:{click:function(t){return e.cancel()}}},[e._v("取消")])],1)])},o=[],s=a("0f08"),i={name:"WorkspaceUpdate",data:function(){return{title:"新建资产库",buttonDisabled:!1,wsId:"",dialogVisible:!1,adminOptions:[],obj:null,ruleForm:{name:"",desc:"",admin:"",type:"二分法"},rules:{name:[{required:!0,message:"请输入资产库名称",trigger:"blur"}],admin:[{required:!0,message:"请选择管理员",trigger:"change"}]}}},mounted:function(){},methods:{openUpdateWsDlg:function(e,t,a){"create"==e?(this.title="新建资产库",this.obj=a):(this.title="修改资产库",this.wsId=t,this.obj=a),this.initData(),this.dialogVisible=!0},cancel:function(){this.$refs["ruleForm"].resetFields(),this.buttonDisabled=!1,this.dialogVisible=!1},handleClose:function(e){this.buttonDisabled=!1,this.$refs["ruleForm"].resetFields(),e()},initData:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_update_data_query",wsId:e.wsId}};s["a"].post(t).then((function(t){if("ok"==t.result){var a=t.data;e.ruleForm.name=a.name,e.ruleForm.type=0==a.type?"二分法":1==a.type?"三分法":"自定义",e.ruleForm.desc=a.desc,e.ruleForm.admin=a.admin,e.adminOptions=a.adminOptions}else e.$message.error(t.msg)})).catch((function(e){console.log(e)}))},updateAdminData:function(e){this.ruleForm.admin=e},save:function(){var e=this,t=e.ruleForm.name,a=e.ruleForm.desc,n=e.ruleForm.admin;if(""!=t)if(t.length>36)e.$message({message:"[名称]不允许超过36个字",type:"warning"});else if(a.length>255)e.$message({message:"[描述]不允许超过255个字符",type:"warning"});else if(0!=n.length){e.buttonDisabled=!0;var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_update_save",wsId:e.wsId,name:e.ruleForm.name,type:"二分法"==e.ruleForm.type?0:"三分法"==e.ruleForm.type?1:2,desc:e.ruleForm.desc,admin:e.ruleForm.admin.join(",")}};s["a"].post(o).then((function(t){"ok"==t.result?(e.$message({message:t.msg,duration:2e3,type:"success"}),e.cancel(),null!=e.obj&&e.obj.updateWorkspaceCallback()):e.$message.error(t.msg),e.buttonDisabled=!1})).catch((function(e){console.log(e)}))}else e.$message({message:"[管理员]不允许为空",type:"warning"});else e.$message({message:"[名称]不允许为空",type:"warning"})}}},r=i,l=(a("ffd2"),a("cba8")),c=Object(l["a"])(r,n,o,!1,null,"08929cd1",null);t["a"]=c.exports},"7e21":function(e,t,a){"use strict";a.r(t);var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-container",{style:{border:"1px solid #eee",width:"100%",height:"100%"},attrs:{id:"manage"}},[a("el-aside",{attrs:{id:"menu",width:"200px"}},[a("el-menu",{attrs:{"default-openeds":e.defaultOpendMenu},on:{open:e.setDefaultOpenMenu,close:e.removeDefaultOpenMenu}},[e.isSecAdminUser?e._e():[a("el-menu-item",{attrs:{id:"workspaceManage",index:"workspaceManage"},on:{click:function(t){return e.goTo("workspaceManage")}}},[a("i",{staticClass:"iconfont icon-zichanliebiao icon"}),a("span",{attrs:{slot:"title"},slot:"title"},[e._v("资产库管理")])]),e.isCooperationActive?a("el-menu-item",{attrs:{index:"cooperationManage"},on:{click:function(t){return e.goTo("cooperationManage")}}},[a("i",{staticClass:"iconfont icon-icon-test icon"}),a("span",{attrs:{slot:"title"},slot:"title"},[e._v("小组管理")])]):e._e()],a("el-submenu",{attrs:{index:"org"}},[a("template",{slot:"title"},[a("i",{staticClass:"iconfont icon-zuzhi icon"}),a("span",[e._v("组织管理")])]),a("el-menu-item",{attrs:{index:"palUser"},on:{click:function(t){return e.goTo("palUser")}}},[e._v("PAL用户")]),e.isSecAdminUser?e._e():a("el-menu-item",{attrs:{index:"bpmOrg"},on:{click:function(t){return e.goTo("bpmOrg")}}},[e._v("BPM平台组织架构")])],2),e.isSecAdminUser?e._e():[e.isPublishActive?a("el-submenu",{attrs:{index:"publisher"}},[a("template",{slot:"title"},[a("i",{staticClass:"iconfont icon-liuchengmenhu icon"}),a("span",[e._v("门户设置")])]),a("el-menu-item",{attrs:{index:"themeStyle"},on:{click:function(t){return e.goTo("themeStyle")}}},[e._v("主题风格")]),a("el-menu-item",{attrs:{index:"commonRepository"},on:{click:function(t){return e.goTo("commonRepository")}}},[e._v("常用流程")]),a("el-menu-item",{attrs:{index:"userGroup"},on:{click:function(t){return e.goTo("userGroup")}}},[e._v("浏览用户")])],2):e._e(),e.isMappingmanageActive?a("el-submenu",{attrs:{index:"mappingmanagement"}},[a("template",{slot:"title"},[a("i",{staticClass:"iconfont icon-guanlian icon"}),a("span",[e._v("关联管理")])]),a("el-menu-item",{attrs:{index:"correlated"},on:{click:function(t){return e.goTo("correlated")}}},[e._v("已关联流程")]),a("el-menu-item",{attrs:{index:"palNotCorrelated"},on:{click:function(t){return e.goTo("palNotCorrelated")}}},[e._v("PAL未关联流程")]),a("el-menu-item",{attrs:{index:"bpmNotCorrelated"},on:{click:function(t){return e.goTo("bpmNotCorrelated")}}},[e._v("BPM未关联流程")])],2):e._e()]],2)],1),a("router-view",{key:this.$route.path})],1)},o=[],s=a("1305"),i=a("9419"),r=a("9d09"),l=a("0f08"),c=a("1485"),u={name:"Manage",components:{WorkspaceManage:s["default"],User:i["default"],BPMOrg:r["default"],MappingManagement:c["default"]},data:function(){return{defaultOpendMenu:[],isPublishActive:!1,isCooperationActive:!1,isMappingmanageActive:!1,isSecAdminUser:isSecAdminUser}},created:function(){this.init()},methods:{init:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_app_data"}};l["a"].post(t).then((function(t){if("ok"==t.result){var a=t.data;e.isPublishActive=a.isPublishActive,e.isCooperationActive=a.isCooperationActive,e.isMappingmanageActive=a.isMappingmanageActive,document.getElementById("workspaceManage").click()}})).catch((function(e){console.log(e)}))},goTo:function(e){this.saveAccessOpLog(e),"workspaceManage"==e?this.$router.push({path:"workspaceManage"}):"cooperationManage"==e?this.$router.push({path:"cooperationUpdate"}):"palUser"==e?this.$router.push({path:"palUser"}):"bpmOrg"==e?this.$router.push({path:"bpmOrg"}):"correlated"==e||"palNotCorrelated"==e||"bpmNotCorrelated"==e?this.$router.push({name:"mappingManagement_"+e,params:{dataType:e}}):"themeStyle"==e?this.$router.push({path:"themeStyle"}):"commonRepository"==e?this.$router.push({path:"commonRepository"}):"userGroup"==e&&this.$router.push({path:"userGroup"})},setDefaultOpenMenu:function(e,t){-1==this.defaultOpendMenu.indexOf(e)&&this.defaultOpendMenu.push(e)},saveAccessOpLog:function(e){var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_access_log_save",moduleCategory:e}};l["a"].post(t).then((function(e){e.result})).catch((function(e){console.log(e)}))},removeDefaultOpenMenu:function(e,t){-1!=this.defaultOpendMenu.indexOf(e)&&this.defaultOpendMenu.splice(this.defaultOpendMenu.indexOf(e),1)}}},p=u,d=(a("fc6a"),a("cba8")),m=Object(d["a"])(p,n,o,!1,null,"052ecdb7",null);t["default"]=m.exports},"83af":function(e,t,a){},"9d09":function(e,t,a){"use strict";a.r(t);var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{style:{width:"100%",height:e.mainHeight}},[a("iframe",{staticStyle:{border:"0"},attrs:{id:"orgIframe",width:"100%",height:parseInt(e.mainHeight)-4+"px",name:"orgIframe",src:e.src}})])},o=[],s={name:"BPMOrg",data:function(){return{src:"./w?sid="+this.$store.state.sessionId+"&cmd=com.actionsoft.apps.coe.pal_average_user_org",mainHeight:parseInt(this.$store.getters.getTopMainHeightFn)-4+"px"}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(e,t){this.mainHeight=parseInt(this.$store.getters.getTopMainHeightFn)-4+"px"}}},i=s,r=a("cba8"),l=Object(r["a"])(i,n,o,!1,null,"2280cc48",null);t["default"]=l.exports},b7f5:function(e,t,a){},fc6a:function(e,t,a){"use strict";a("b7f5")},ffd2:function(e,t,a){"use strict";a("83af")}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-5ca06e36.10aa8e65.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-5ca06e36.10aa8e65.js
                                                  new file mode 100644
                                                  index 00000000..6d802302
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-5ca06e36.10aa8e65.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-5ca06e36"],{"4c02":function(e,t,n){"use strict";function r(){return r=Object.assign||function(e){for(var t,n=1;n<arguments.length;n++)for(var r in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},r.apply(this,arguments)}var i=["attrs","props","domProps"],o=["class","style","directives"],a=["on","nativeOn"],s=function(e){return e.reduce((function(e,t){for(var n in t)if(e[n])if(-1!==i.indexOf(n))e[n]=r({},e[n],t[n]);else if(-1!==o.indexOf(n)){var s=e[n]instanceof Array?e[n]:[e[n]],c=t[n]instanceof Array?t[n]:[t[n]];e[n]=s.concat(c)}else if(-1!==a.indexOf(n))for(var u in t[n])if(e[n][u]){var p=e[n][u]instanceof Array?e[n][u]:[e[n][u]],d=t[n][u]instanceof Array?t[n][u]:[t[n][u]];e[n][u]=p.concat(d)}else e[n][u]=t[n][u];else if("hook"==n)for(var f in t[n])e[n][f]=e[n][f]?l(e[n][f],t[n][f]):t[n][f];else e[n]=t[n];else e[n]=t[n];return e}),{})},l=function(e,t){return function(){e&&e.apply(this,arguments),t&&t.apply(this,arguments)}};e.exports=s},"5baf":function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var i=function(e){return o(e)&&!a(e)};function o(e){return!!e&&"object"===r(e)}function a(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||c(e)}var s="function"===typeof Symbol&&Symbol.for,l=s?Symbol.for("react.element"):60103;function c(e){return e.$$typeof===l}function u(e){return Array.isArray(e)?[]:{}}function p(e,t){var n=t&&!0===t.clone;return n&&i(e)?h(u(e),e,t):e}function d(e,t,n){var r=e.slice();return t.forEach((function(t,o){"undefined"===typeof r[o]?r[o]=p(t,n):i(t)?r[o]=h(e[o],t,n):-1===e.indexOf(t)&&r.push(p(t,n))})),r}function f(e,t,n){var r={};return i(e)&&Object.keys(e).forEach((function(t){r[t]=p(e[t],n)})),Object.keys(t).forEach((function(o){i(t[o])&&e[o]?r[o]=h(e[o],t[o],n):r[o]=p(t[o],n)})),r}function h(e,t,n){var r=Array.isArray(t),i=Array.isArray(e),o=n||{arrayMerge:d},a=r===i;if(a){if(r){var s=o.arrayMerge||d;return s(e,t,n)}return f(e,t,n)}return p(t,n)}h.all=function(e,t){if(!Array.isArray(e)||e.length<2)throw new Error("first argument should be an array with at least two elements");return e.reduce((function(e,n){return h(e,n,t)}))};var y=h;e.exports=y},"6c2f":function(e,t,n){"use strict";var r=n("4c02"),i=n.n(r),o=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition-group",{class:["el-upload-list","el-upload-list--"+e.listType,{"is-disabled":e.disabled}],attrs:{tag:"ul",name:"el-list"}},e._l(e.files,(function(t){return n("li",{key:t.uid,class:["el-upload-list__item","is-"+t.status,e.focusing?"focusing":""],attrs:{tabindex:"0"},on:{keydown:function(n){if(!n.type.indexOf("key")&&e._k(n.keyCode,"delete",[8,46],n.key,["Backspace","Delete","Del"]))return null;!e.disabled&&e.$emit("remove",t)},focus:function(t){e.focusing=!0},blur:function(t){e.focusing=!1},click:function(t){e.focusing=!1}}},[e._t("default",(function(){return["uploading"!==t.status&&["picture-card","picture"].indexOf(e.listType)>-1?n("img",{staticClass:"el-upload-list__item-thumbnail",attrs:{src:t.url,alt:""}}):e._e(),n("a",{staticClass:"el-upload-list__item-name",on:{click:function(n){return e.handleClick(t)}}},[n("i",{staticClass:"el-icon-document"}),e._v(e._s(t.name)+" ")]),n("label",{staticClass:"el-upload-list__item-status-label"},[n("i",{class:{"el-icon-upload-success":!0,"el-icon-circle-check":"text"===e.listType,"el-icon-check":["picture-card","picture"].indexOf(e.listType)>-1}})]),e.disabled?e._e():n("i",{staticClass:"el-icon-close",on:{click:function(n){return e.$emit("remove",t)}}}),e.disabled?e._e():n("i",{staticClass:"el-icon-close-tip"},[e._v(e._s(e.t("el.upload.deleteTip")))]),e._v(" "),"uploading"===t.status?n("el-progress",{attrs:{type:"picture-card"===e.listType?"circle":"line","stroke-width":"picture-card"===e.listType?6:2,percentage:e.parsePercentage(t.percentage)}}):e._e(),"picture-card"===e.listType?n("span",{staticClass:"el-upload-list__item-actions"},[e.handlePreview&&"picture-card"===e.listType?n("span",{staticClass:"el-upload-list__item-preview",on:{click:function(n){return e.handlePreview(t)}}},[n("i",{staticClass:"el-icon-zoom-in"})]):e._e(),e.disabled?e._e():n("span",{staticClass:"el-upload-list__item-delete",on:{click:function(n){return e.$emit("remove",t)}}},[n("i",{staticClass:"el-icon-delete"})])]):e._e()]}),{file:t})],2)})),0)},a=[],s={el:{colorpicker:{confirm:"确定",clear:"清空"},datepicker:{now:"此刻",today:"今天",cancel:"取消",clear:"清空",confirm:"确定",selectDate:"选择日期",selectTime:"选择时间",startDate:"开始日期",startTime:"开始时间",endDate:"结束日期",endTime:"结束时间",prevYear:"前一年",nextYear:"后一年",prevMonth:"上个月",nextMonth:"下个月",year:"年",month1:"1 月",month2:"2 月",month3:"3 月",month4:"4 月",month5:"5 月",month6:"6 月",month7:"7 月",month8:"8 月",month9:"9 月",month10:"10 月",month11:"11 月",month12:"12 月",weeks:{sun:"日",mon:"一",tue:"二",wed:"三",thu:"四",fri:"五",sat:"六"},months:{jan:"一月",feb:"二月",mar:"三月",apr:"四月",may:"五月",jun:"六月",jul:"七月",aug:"八月",sep:"九月",oct:"十月",nov:"十一月",dec:"十二月"}},select:{loading:"加载中",noMatch:"无匹配数据",noData:"无数据",placeholder:"请选择"},cascader:{noMatch:"无匹配数据",loading:"加载中",placeholder:"请选择",noData:"暂无数据"},pagination:{goto:"前往",pagesize:"条/页",total:"共 {total} 条",pageClassifier:"页"},messagebox:{title:"提示",confirm:"确定",cancel:"取消",error:"输入的数据不合法!"},upload:{deleteTip:"按 delete 键可删除",delete:"删除",preview:"查看图片",continue:"继续上传"},table:{emptyText:"暂无数据",confirmFilter:"筛选",resetFilter:"重置",clearFilter:"全部",sumText:"合计"},tree:{emptyText:"暂无数据"},transfer:{noMatch:"无匹配数据",noData:"无数据",titles:["列表 1","列表 2"],filterPlaceholder:"请输入搜索内容",noCheckedFormat:"共 {total} 项",hasCheckedFormat:"已选 {checked}/{total} 项"},image:{error:"加载失败"},pageHeader:{title:"返回"},popconfirm:{confirmButtonText:"确定",cancelButtonText:"取消"},empty:{description:"暂无数据"}}},l=n("430a"),c=n("5baf"),u=n.n(c);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}"object"===("undefined"===typeof Int8Array?"undefined":p(Int8Array))||!l["default"].prototype.$isServer&&document.childNodes;var d=Object.prototype.hasOwnProperty;function f(e,t){return d.call(e,t)}function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}var y=/(%|)\{([0-9a-zA-Z_]+)\}/g,m=function(e){function t(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return 1===n.length&&"object"===h(n[0])&&(n=n[0]),n&&n.hasOwnProperty||(n={}),e.replace(y,(function(t,r,i,o){var a;return"{"===e[o-1]&&"}"===e[o+t.length]?i:(a=f(n,i)?n[i]:null,null===a||void 0===a?"":a)}))}return t},g=m(l["default"]),v=s,b=!1,x=function(){var e=Object.getPrototypeOf(this||l["default"]).$t;if("function"===typeof e&&l["default"].locale)return b||(b=!0,l["default"].locale(l["default"].config.lang,u()(v,l["default"].locale(l["default"].config.lang)||{},{clone:!0}))),e.apply(this,arguments)},w=function(e,t){var n=x.apply(this,arguments);if(null!==n&&void 0!==n)return n;for(var r=e.split("."),i=v,o=0,a=r.length;o<a;o++){var s=r[o];if(n=i[s],o===a-1)return g(n,t);if(!n)return"";i=n}return""},k={methods:{t:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return w.apply(this,t)}}},S=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-progress",class:["el-progress--"+e.type,e.status?"is-"+e.status:"",{"el-progress--without-text":!e.showText,"el-progress--text-inside":e.textInside}],attrs:{role:"progressbar","aria-valuenow":e.percentage,"aria-valuemin":"0","aria-valuemax":"100"}},["line"===e.type?n("div",{staticClass:"el-progress-bar"},[n("div",{staticClass:"el-progress-bar__outer",style:{height:e.strokeWidth+"px"}},[n("div",{staticClass:"el-progress-bar__inner",style:e.barStyle},[e.showText&&e.textInside?n("div",{staticClass:"el-progress-bar__innerText"},[e._v(e._s(e.content))]):e._e()])])]):n("div",{staticClass:"el-progress-circle",style:{height:e.width+"px",width:e.width+"px"}},[n("svg",{attrs:{viewBox:"0 0 100 100"}},[n("path",{staticClass:"el-progress-circle__track",style:e.trailPathStyle,attrs:{d:e.trackPath,stroke:"#e5e9f2","stroke-width":e.relativeStrokeWidth,fill:"none"}}),n("path",{staticClass:"el-progress-circle__path",style:e.circlePathStyle,attrs:{d:e.trackPath,stroke:e.stroke,fill:"none","stroke-linecap":e.strokeLinecap,"stroke-width":e.percentage?e.relativeStrokeWidth:0}})])]),e.showText&&!e.textInside?n("div",{staticClass:"el-progress__text",style:{fontSize:e.progressTextSize+"px"}},[e.status?n("i",{class:e.iconClass}):[e._v(e._s(e.content))]],2):e._e()])},F=[],C={name:"ElProgress",props:{type:{type:String,default:"line",validator:function(e){return["line","circle","dashboard"].indexOf(e)>-1}},percentage:{type:Number,default:0,required:!0,validator:function(e){return e>=0&&e<=100}},status:{type:String,validator:function(e){return["success","exception","warning"].indexOf(e)>-1}},strokeWidth:{type:Number,default:6},strokeLinecap:{type:String,default:"round"},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:[String,Array,Function],default:""},format:Function},computed:{barStyle:function(){var e={};return e.width=this.percentage+"%",e.backgroundColor=this.getCurrentColor(this.percentage),e},relativeStrokeWidth:function(){return(this.strokeWidth/this.width*100).toFixed(1)},radius:function(){return"circle"===this.type||"dashboard"===this.type?parseInt(50-parseFloat(this.relativeStrokeWidth)/2,10):0},trackPath:function(){var e=this.radius,t="dashboard"===this.type;return"\n        M 50 50\n        m 0 ".concat(t?"":"-").concat(e,"\n        a ").concat(e," ").concat(e," 0 1 1 0 ").concat(t?"-":"").concat(2*e,"\n        a ").concat(e," ").concat(e," 0 1 1 0 ").concat(t?"":"-").concat(2*e,"\n        ")},perimeter:function(){return 2*Math.PI*this.radius},rate:function(){return"dashboard"===this.type?.75:1},strokeDashoffset:function(){var e=-1*this.perimeter*(1-this.rate)/2;return"".concat(e,"px")},trailPathStyle:function(){return{strokeDasharray:"".concat(this.perimeter*this.rate,"px, ").concat(this.perimeter,"px"),strokeDashoffset:this.strokeDashoffset}},circlePathStyle:function(){return{strokeDasharray:"".concat(this.perimeter*this.rate*(this.percentage/100),"px, ").concat(this.perimeter,"px"),strokeDashoffset:this.strokeDashoffset,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease"}},stroke:function(){var e;if(this.color)e=this.getCurrentColor(this.percentage);else switch(this.status){case"success":e="#13ce66";break;case"exception":e="#ff4949";break;case"warning":e="#e6a23c";break;default:e="#20a0ff"}return e},iconClass:function(){return"warning"===this.status?"el-icon-warning":"line"===this.type?"success"===this.status?"el-icon-circle-check":"el-icon-circle-close":"success"===this.status?"el-icon-check":"el-icon-close"},progressTextSize:function(){return"line"===this.type?12+.4*this.strokeWidth:.111111*this.width+2},content:function(){return"function"===typeof this.format?this.format(this.percentage)||"":"".concat(this.percentage,"%")}},methods:{getCurrentColor:function(e){return"function"===typeof this.color?this.color(e):"string"===typeof this.color?this.color:this.getLevelColor(e)},getLevelColor:function(e){for(var t=this.getColorArray().sort((function(e,t){return e.percentage-t.percentage})),n=0;n<t.length;n++)if(t[n].percentage>e)return t[n].color;return t[t.length-1].color},getColorArray:function(){var e=this.color,t=100/e.length;return e.map((function(e,n){return"string"===typeof e?{color:e,percentage:(n+1)*t}:e}))}}},_=C,O=n("cba8"),P=Object(O["a"])(_,S,F,!1,null,null,null),T=P.exports;T.install=function(e){e.component(T.name,T)};var E=T,j={name:"ElUploadList",mixins:[k],data:function(){return{focusing:!1}},components:{ElProgress:E},props:{files:{type:Array,default:function(){return[]}},disabled:{type:Boolean,default:!1},handlePreview:Function,listType:String},methods:{parsePercentage:function(e){return parseInt(e,10)},handleClick:function(e){this.handlePreview&&this.handlePreview(e)}}},D=j,$=Object(O["a"])(D,o,a,!1,null,null,null),R=$.exports;function U(e,t,n){var r;r=n.response?"".concat(n.response.error||n.response):n.responseText?"".concat(n.responseText):"fail to post ".concat(e," ").concat(n.status);var i=new Error(r);return i.status=n.status,i.method="post",i.url=e,i}function A(e){var t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch(n){return t}}function B(e){if("undefined"!==typeof XMLHttpRequest){var t=new XMLHttpRequest,n=e.action;t.upload&&(t.upload.onprogress=function(t){t.total>0&&(t.percent=t.loaded/t.total*100),e.onProgress(t)});var r=new FormData;e.data&&Object.keys(e.data).forEach((function(t){r.append(t,e.data[t])})),r.append(e.filename,e.file,e.file.name),t.onerror=function(t){e.onError(t)},t.onload=function(){if(t.status<200||t.status>=300)return e.onError(U(n,e,t));e.onSuccess(A(t))},t.open("post",n,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);var i=e.headers||{};for(var o in i)i.hasOwnProperty(o)&&null!==i[o]&&t.setRequestHeader(o,i[o]);return t.send(r),t}}var L,I,q=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-upload-dragger",class:{"is-dragover":e.dragover},on:{drop:function(t){return t.preventDefault(),e.onDrop.apply(null,arguments)},dragover:function(t){return t.preventDefault(),e.onDragover.apply(null,arguments)},dragleave:function(t){t.preventDefault(),e.dragover=!1}}},[e._t("default")],2)},M=[],N={name:"ElUploadDrag",props:{disabled:Boolean},inject:{uploader:{default:""}},data:function(){return{dragover:!1}},methods:{onDragover:function(){this.disabled||(this.dragover=!0)},onDrop:function(e){if(!this.disabled&&this.uploader){var t=this.uploader.accept;this.dragover=!1,t?this.$emit("file",[].slice.call(e.dataTransfer.files).filter((function(e){var n=e.type,r=e.name,i=r.indexOf(".")>-1?".".concat(r.split(".").pop()):"",o=n.replace(/\/.*$/,"");return t.split(",").map((function(e){return e.trim()})).filter((function(e){return e})).some((function(e){return/\..+$/.test(e)?i===e:/\/\*$/.test(e)?o===e.replace(/\/\*$/,""):!!/^[^\/]+\/[^\/]+$/.test(e)&&n===e}))}))):this.$emit("file",e.dataTransfer.files)}}}},V=N,z=Object(O["a"])(V,q,M,!1,null,null,null),W=z.exports,H={inject:["uploader"],components:{UploadDragger:W},props:{type:String,action:{type:String,required:!0},name:{type:String,default:"file"},data:Object,headers:Object,withCredentials:Boolean,multiple:Boolean,accept:String,onStart:Function,onProgress:Function,onSuccess:Function,onError:Function,beforeUpload:Function,drag:Boolean,onPreview:{type:Function,default:function(){}},onRemove:{type:Function,default:function(){}},fileList:Array,autoUpload:Boolean,listType:String,httpRequest:{type:Function,default:B},disabled:Boolean,limit:Number,onExceed:Function},data:function(){return{mouseover:!1,reqs:{}}},methods:{isImage:function(e){return-1!==e.indexOf("image")},handleChange:function(e){var t=e.target.files;t&&this.uploadFiles(t)},uploadFiles:function(e){var t=this;if(this.limit&&this.fileList.length+e.length>this.limit)this.onExceed&&this.onExceed(e,this.fileList);else{var n=Array.prototype.slice.call(e);this.multiple||(n=n.slice(0,1)),0!==n.length&&n.forEach((function(e){t.onStart(e),t.autoUpload&&t.upload(e)}))}},upload:function(e){var t=this;if(this.$refs.input.value=null,!this.beforeUpload)return this.post(e);var n=this.beforeUpload(e);n&&n.then?n.then((function(n){var r=Object.prototype.toString.call(n);if("[object File]"===r||"[object Blob]"===r){for(var i in"[object Blob]"===r&&(n=new File([n],e.name,{type:e.type})),e)e.hasOwnProperty(i)&&(n[i]=e[i]);t.post(n)}else t.post(e)}),(function(){t.onRemove(null,e)})):!1!==n?this.post(e):this.onRemove(null,e)},abort:function(e){var t=this.reqs;if(e){var n=e;e.uid&&(n=e.uid),t[n]&&t[n].abort()}else Object.keys(t).forEach((function(e){t[e]&&t[e].abort(),delete t[e]}))},post:function(e){var t=this,n=e.uid,r={headers:this.headers,withCredentials:this.withCredentials,file:e,data:this.data,filename:this.name,action:this.action,onProgress:function(n){t.onProgress(n,e)},onSuccess:function(r){t.onSuccess(r,e),delete t.reqs[n]},onError:function(r){t.onError(r,e),delete t.reqs[n]}},i=this.httpRequest(r);this.reqs[n]=i,i&&i.then&&i.then(r.onSuccess,r.onError)},handleClick:function(){this.disabled||(this.$refs.input.value=null,this.$refs.input.click())},handleKeydown:function(e){e.target===e.currentTarget&&(13!==e.keyCode&&32!==e.keyCode||this.handleClick())}},render:function(e){var t=this.handleClick,n=this.drag,r=this.name,o=this.handleChange,a=this.multiple,s=this.accept,l=this.listType,c=this.uploadFiles,u=this.disabled,p=this.handleKeydown,d={class:{"el-upload":!0},on:{click:t,keydown:p}};return d.class["el-upload--".concat(l)]=!0,e("div",i()([{},d,{attrs:{tabindex:"0"}}]),[n?e("upload-dragger",{attrs:{disabled:u},on:{file:c}},[this.$slots.default]):this.$slots.default,e("input",{class:"el-upload__input",attrs:{type:"file",name:r,multiple:a,accept:s},ref:"input",on:{change:o}})])}},J=H,K=Object(O["a"])(J,L,I,!1,null,null,null),X=K.exports,Y={mounted:function(){},methods:{getMigratingConfig:function(){return{props:{},events:{}}}}};function Z(){}var G={name:"ElUpload",mixins:[Y],components:{ElProgress:E,UploadList:R,Upload:X},provide:function(){return{uploader:this}},inject:{elForm:{default:""}},props:{action:{type:String,default:""},headers:{type:Object,default:function(){return{}}},data:Object,multiple:Boolean,name:{type:String,default:"file"},drag:Boolean,dragger:Boolean,withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:String,type:{type:String,default:"select"},beforeUpload:Function,beforeRemove:Function,onRemove:{type:Function,default:Z},onChange:{type:Function,default:Z},onPreview:{type:Function},onSuccess:{type:Function,default:Z},onProgress:{type:Function,default:Z},onError:{type:Function,default:Z},fileList:{type:Array,default:function(){return[]}},autoUpload:{type:Boolean,default:!0},listType:{type:String,default:"text"},httpRequest:Function,disabled:Boolean,limit:Number,onExceed:{type:Function,default:Z},appId:{type:String,required:!0},repositoryName:{type:String,required:!0},groupValue:{type:String,required:!0},fileValue:{type:String,required:!0},extParam:{type:String,default:""}},data:function(){return{uploadFiles:[],dragOver:!1,draging:!1,tempIndex:1,sid:this.$store.state.sessionId}},computed:{uploadDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{listType:function(e){"picture-card"!==e&&"picture"!==e||(this.uploadFiles=this.uploadFiles.map((function(e){if(!e.url&&e.raw)try{e.url=URL.createObjectURL(e.raw)}catch(t){console.error("[Element Error][Upload]",t)}return e})))},fileList:{immediate:!0,handler:function(e){var t=this;this.uploadFiles=e.map((function(e){return e.uid=e.uid||Date.now()+t.tempIndex++,e.status=e.status||"success",e}))}}},methods:{handleStart:function(e){e.uid=Date.now()+this.tempIndex++;var t={status:"ready",name:e.name,size:e.size,percentage:0,uid:e.uid,raw:e};if("picture-card"===this.listType||"picture"===this.listType)try{t.url=URL.createObjectURL(e)}catch(n){return void console.error("[Element Error][Upload]",n)}this.uploadFiles.push(t),this.onChange(t,this.uploadFiles)},handleProgress:function(e,t){var n=this.getFile(t);this.onProgress(e,n,this.uploadFiles),n.status="uploading",n.percentage=e.percent||0},handleSuccess:function(e,t){var n=this.getFile(t);n&&(n.status="success",n.response=e,this.onSuccess(e,n,this.uploadFiles),this.onChange(n,this.uploadFiles))},handleError:function(e,t){var n=this.getFile(t),r=this.uploadFiles;n.status="fail",r.splice(r.indexOf(n),1),this.onError(e,n,this.uploadFiles),this.onChange(n,this.uploadFiles)},handleRemove:function(e,t){var n=this;t&&(e=this.getFile(t));var r=function(){n.abort(e);var t=n.uploadFiles;t.splice(t.indexOf(e),1),n.onRemove(e,t)};if(this.beforeRemove){if("function"===typeof this.beforeRemove){var i=this.beforeRemove(e,this.uploadFiles);i&&i.then?i.then((function(){r()}),Z):!1!==i&&r()}}else r()},getFile:function(e){var t,n=this.uploadFiles;return n.every((function(n){return t=e.uid===n.uid?n:null,!t})),t},abort:function(e){this.$refs["upload-inner"].abort(e)},clearFiles:function(){this.uploadFiles=[]},submit:function(){var e=this;this.uploadFiles.filter((function(e){return"ready"===e.status})).forEach((function(t){e.$refs["upload-inner"].upload(t.raw)}))},getMigratingConfig:function(){return{props:{"default-file-list":"default-file-list is renamed to file-list.","show-upload-list":"show-upload-list is renamed to show-file-list.","thumbnail-mode":"thumbnail-mode has been deprecated, you can implement the same effect according to this case: http://element.eleme.io/#/zh-CN/component/upload#yong-hu-tou-xiang-shang-chuan"}}}},beforeDestroy:function(){this.uploadFiles.forEach((function(e){e.url&&0===e.url.indexOf("blob:")&&URL.revokeObjectURL(e.url)}))},render:function(e){var t,n=this;this.showFileList&&(t=e(R,{attrs:{disabled:this.uploadDisabled,listType:this.listType,files:this.uploadFiles,handlePreview:this.onPreview},on:{remove:this.handleRemove}},[function(e){if(n.$scopedSlots.file)return n.$scopedSlots.file({file:e.file})}]));var r={props:{type:this.type,drag:this.drag,action:void 0!=this.action&&""!=this.action?this.action:encodeURI(Q()+"appId="+this.appId+"&sid="+this.sid+"&groupValue="+this.groupValue+"&fileValue="+this.fileValue+"&repositoryName="+this.repositoryName+"&extParam="+this.extParam),multiple:this.multiple,"before-upload":this.beforeUpload,"with-credentials":this.withCredentials,headers:this.headers,name:this.name,data:this.data,accept:this.accept,fileList:this.uploadFiles,autoUpload:this.autoUpload,listType:this.listType,disabled:this.uploadDisabled,limit:this.limit,"on-exceed":this.onExceed,"on-start":this.handleStart,"on-progress":this.handleProgress,"on-success":this.handleSuccess,"on-error":this.handleError,"on-preview":this.onPreview,"on-remove":this.handleRemove,"http-request":this.httpRequest,appId:this.appId,repositoryName:this.repositoryName,groupValue:this.groupValue,fileValue:this.fileValue,extParam:this.extParam,sid:this.sid},ref:"upload-inner"},o=this.$slots.trigger||this.$slots.default,a=e("upload",i()([{},r]),[o]);return e("div",["picture-card"===this.listType?t:"",this.$slots.trigger?[a,this.$slots.default]:a,this.$slots.tip,"picture-card"!==this.listType?t:""])}};function Q(){var e=axiosBaseUrl,t="uf";e&&-1!=e.indexOf("/r/")?t=e.substring(0,e.indexOf("/r/"))+"/r/uf":e&&e.indexOf("/apps")>-1&&(t=e.substring(0,e.indexOf("/apps"))+"/r/uf");var n=t+"?";return n}var ee,te,ne=G,re=Object(O["a"])(ne,ee,te,!1,null,null,null);t["a"]=re.exports}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-6f1c20e8.e41186ae.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-6f1c20e8.e41186ae.js
                                                  new file mode 100644
                                                  index 00000000..ebcdac82
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-6f1c20e8.e41186ae.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-6f1c20e8"],{"8c76":function(t,e,a){},b98e:function(t,e,a){"use strict";a.r(e);var i=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("el-container",[a("el-main",{attrs:{id:"theme"}},[a("div",{staticClass:"text-general-color category-title"},[a("p",{staticStyle:{"padding-left":"5px"}},[t._v(" logo "),a("el-tooltip",{staticClass:"item",attrs:{content:"仅支持png、jpg、jpeg、gif格式的图片文件,文件大小5M内,建议宽高180*30左右",placement:"bottom-start"}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{"font-size":"13px"}},[t._v("")])])],1)]),a("div",{staticStyle:{margin:"20px 0 20px 20px"}},[void 0!=t.logoData.src?a("div",{staticClass:"logo",staticStyle:{width:"180px",height:"30px",position:"relative"}},[a("el-card",{staticStyle:{height:"100%",width:"100%"},attrs:{shadow:"never","body-style":{padding:"0px",height:"100%",width:"100%"}}},[a("img",{staticClass:"image",attrs:{src:t.logoData.src}})]),a("div",{staticClass:"logo-mask"}),a("i",{staticClass:"awsui-iconfont text-general-color logo-del-icon",on:{click:function(e){return t.removeFile("logo")}}},[t._v("")])],1):a("div",{staticStyle:{width:"180px",height:"30px"},on:{click:function(e){return t.openFileSelect("logo")}}},[a("el-card",{staticStyle:{height:"100%",width:"100%",border:"1px dashed #ebeef5",cursor:"pointer"},attrs:{shadow:"never","body-style":{padding:"0px",height:"100%",width:"100%","text-align":"center","vertical-align":"middle","line-height":"30px"}}},[a("i",{staticClass:"awsui-iconfont text-linker-color",staticStyle:{"font-size":"15px",position:"relative",top:"1px"}},[t._v("")]),a("span",{staticStyle:{"font-size":"12px"}},[t._v("  添加logo")])])],1)]),a("div",{staticClass:"text-general-color category-title"},[a("p",{staticStyle:{"padding-left":"5px"}},[t._v(" 轮播图 "),a("el-tooltip",{staticClass:"item",attrs:{placement:"bottom-start"}},[a("span",{attrs:{slot:"content"},slot:"content"},[t._v("默认按照图片名称进行排序,不支持自定义排序"),a("br"),t._v("仅支持png、jpg、jpeg、gif格式的图片文件,文件大小5M内,建议宽高1920*440")]),a("i",{staticClass:"awsui-iconfont",staticStyle:{"font-size":"13px"}},[t._v("")])])],1)]),a("div",{staticStyle:{margin:"20px 0 20px 20px"}},[t._l(t.bannerData,(function(e){return[a("div",{staticClass:"banner",staticStyle:{width:"280px",height:"60px","margin-right":"20px",display:"inline-block",position:"relative","margin-bottom":"15px"}},[a("el-card",{staticStyle:{height:"100%",width:"100%"},attrs:{shadow:"never","body-style":{padding:"0px",height:"100%",width:"100%"}}},[a("img",{staticClass:"image",attrs:{src:e.src}})]),a("div",{staticClass:"banner-mask"}),a("i",{staticClass:"awsui-iconfont text-general-color banner-del-icon",staticStyle:{cursor:"pointer",float:"right",position:"relative",top:"-38px",left:"-5px"},on:{click:function(a){return t.removeFile("banner",e.name)}}},[t._v("")])],1)]})),a("div",{staticStyle:{width:"280px",height:"60px",display:"inline-block"},on:{click:function(e){return t.openFileSelect("banner")}}},[a("el-card",{staticStyle:{height:"100%",width:"100%",border:"1px dashed #ebeef5",cursor:"pointer"},attrs:{shadow:"never","body-style":{padding:"0px",height:"100%",width:"100%","text-align":"center","vertical-align":"middle","line-height":"60px"}}},[a("i",{staticClass:"awsui-iconfont text-linker-color",staticStyle:{"font-size":"20px",position:"relative",top:"2px"}},[t._v("")]),a("span",{staticStyle:{"font-size":"12px"}},[t._v("  添加轮播图")])])],1)],2),a("PALUpload",{ref:"logoUpload",attrs:{appId:t.appId,repositoryName:t.repositoryName,groupValue:t.groupValue,fileValue:"logo","show-file-list":!1,"on-success":t.uploadSuccess,"before-upload":t.beforeUpload,accept:".jpg,.jpeg,.gif,.png","file-list":t.fileList}},[a("div",{staticStyle:{display:"none"}},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"130px"},attrs:{id:"selectLogoButton",type:"primary"}},[t._v("文件上传")])],1)]),a("PALUpload",{ref:"bannerUpload",attrs:{appId:t.appId,repositoryName:t.repositoryName,groupValue:t.groupValue,fileValue:"banner",multiple:"","show-file-list":!1,"on-success":t.uploadSuccess,"before-upload":t.beforeUpload,accept:".jpg,.jpeg,.gif,.png","file-list":t.fileList}},[a("div",{staticStyle:{display:"none"}},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"130px"},attrs:{id:"selectBannerButton",type:"primary"}},[t._v("文件上传")])],1)])],1)],1)},o=[],s=a("0f08"),n=a("6c2f"),l={name:"ThemeStyle",components:{PALUpload:n["a"]},data:function(){return{appId:"com.actionsoft.apps.coe.pal",repositoryName:"tmp",groupValue:"portal",fileValue:"logo",uploadKey:Math.random()+"",multiple:!1,fileList:[],logoData:{},bannerData:[]}},mounted:function(){this.initData()},methods:{initData:function(){var t=this,e={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_theme_data_query"}};s["a"].post(e).then((function(e){"ok"==e.result?(t.logoData=e.data.logoData,t.bannerData=e.data.bannerData):t.$message(e.msg)})).catch((function(t){console.log(t)}))},openFileSelect:function(t){"logo"==t?(this.fileValue="logo",document.getElementById("selectLogoButton").click()):(this.fileValue="banner",document.getElementById("selectBannerButton").click())},removeFile:function(t,e){var a=this;this.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",type:"warning"}).then((function(){var i=a,o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_theme_data_remove",type:t,fileName:e}};s["a"].post(o).then((function(t){"ok"==t.result?(i.$message({message:"删除成功",type:"success"}),i.initData()):i.$message.error("删除失败")})).catch((function(t){console.log(t)}))})).catch((function(){}))},uploadSuccess:function(t,e,a){var i=this,o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_theme_data_save",type:i.fileValue,fileName:e.name}};s["a"].post(o).then((function(t){"ok"==t.result?(i.$message({message:"["+e.name+"]上传成功",type:"success"}),i.initData()):i.$message.error("["+e.name+"]上传失败")})).catch((function(t){console.log(t)}))},beforeUpload:function(t){var e=this;if(t.size>5242880)return e.$message("图片["+t.name+"]不能大于5M,上传失败!"),!1}}},c=l,r=(a("cc47"),a("cba8")),p=Object(r["a"])(c,i,o,!1,null,"0a5ea2f0",null);e["default"]=p.exports},cc47:function(t,e,a){"use strict";a("8c76")}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-8cb92970.f36e2de6.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-8cb92970.f36e2de6.js
                                                  new file mode 100644
                                                  index 00000000..5b8d765c
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-8cb92970.f36e2de6.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-8cb92970"],{1337:function(e,t,a){"use strict";a.d(t,"c",(function(){return o})),a.d(t,"b",(function(){return s})),a.d(t,"d",(function(){return i})),a.d(t,"a",(function(){return l})),a.d(t,"e",(function(){return r}));var s=function(e,t,a,s,i){s||(s={}),s.cmd=a,s.sid=t,o(e,wHref,s,i)},o=function(e,t,a,s){var o=document.getElementById(e);o&&document.body.removeChild(o);var i=document.createElement("form");for(var l in i.action=t,i.target=void 0==s?"_blank":s,i.method="get",i.style.display="none",a){var r=document.createElement("textarea");r.name=l,r.value=a[l],i.appendChild(r)}i.setAttribute("id",e),document.body.appendChild(i),i.submit()},i=function(e,t,a){s("palDesigner",a,"com.actionsoft.apps.coe.pal_pl_repository_designer",{uuid:t,teamId:e})},l=function(e,t){var a=e;while(a.nodeName!=t&&"BODY"!=a.nodeName)a=a.parentNode;return a.nodeName==t?a:null},r=function(e){document.getElementsByTagName("title")[0].innerText=e}},"2b87":function(e,t,a){"use strict";a("75e6")},"5d66":function(e,t,a){"use strict";var s=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-dialog",{staticClass:"workspace-update",attrs:{title:e.title,visible:e.dialogVisible,"close-on-click-modal":!1,width:"450px","before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t}}},[a("div",{staticStyle:{border:"1px solid #F2F2F2",padding:"0px 10px 10px 10px"}},[a("awsui-form",{ref:"ruleForm",attrs:{model:e.ruleForm,"label-position":"top",rules:e.rules}},[a("awsui-form-item",{attrs:{label:"名称",prop:"name"}},[a("awsui-input",{attrs:{placeholder:"公司名称或项目名称",maxlength:"36","validate-event":!1},model:{value:e.ruleForm.name,callback:function(t){e.$set(e.ruleForm,"name",t)},expression:"ruleForm.name"}})],1),a("awsui-form-item",{attrs:{label:"描述"}},[a("awsui-input",{attrs:{type:"textarea",placeholder:"请输入描述",maxlength:"255","show-word-limit":""},model:{value:e.ruleForm.desc,callback:function(t){e.$set(e.ruleForm,"desc",t)},expression:"ruleForm.desc"}})],1),a("awsui-form-item",{attrs:{label:"管理员",prop:"admin"}},[a("awsui-select",{attrs:{options:e.adminOptions,multiple:"",placeholder:"请选择管理员","validate-event":!1},on:{change:e.updateAdminData},model:{value:e.ruleForm.admin,callback:function(t){e.$set(e.ruleForm,"admin",t)},expression:"ruleForm.admin"}})],1),a("awsui-form-item",{attrs:{label:"分类方法"}},[a("div",[a("el-radio-group",{attrs:{fill:"#4E7FF9",size:"mini",disabled:""!=e.wsId},model:{value:e.ruleForm.type,callback:function(t){e.$set(e.ruleForm,"type",t)},expression:"ruleForm.type"}},[a("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:"bottom-start"}},[a("span",{attrs:{slot:"content"},slot:"content"},[e._v('二分法流程分为"核心经营流程"和"支持管理流程"')]),a("el-radio-button",{attrs:{label:"二分法"}})],1),a("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:"bottom-start"}},[a("span",{attrs:{slot:"content"},slot:"content"},[e._v('三分法流程分为"战略流程"、"运营流程"和"支持流程"')]),a("el-radio-button",{attrs:{label:"三分法"}})],1),a("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:"bottom-start"}},[a("span",{attrs:{slot:"content"},slot:"content"},[e._v("可自己定义流程结构")]),a("el-radio-button",{attrs:{label:"自定义"}})],1)],1)],1)])],1)],1),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{staticClass:"button-general-color",attrs:{disabled:e.buttonDisabled,type:"primary"},on:{click:e.save}},[e._v("确定")]),a("awsui-button",{on:{click:function(t){return e.cancel()}}},[e._v("取消")])],1)])},o=[],i=a("0f08"),l={name:"WorkspaceUpdate",data:function(){return{title:"新建资产库",buttonDisabled:!1,wsId:"",dialogVisible:!1,adminOptions:[],obj:null,ruleForm:{name:"",desc:"",admin:"",type:"二分法"},rules:{name:[{required:!0,message:"请输入资产库名称",trigger:"blur"}],admin:[{required:!0,message:"请选择管理员",trigger:"change"}]}}},mounted:function(){},methods:{openUpdateWsDlg:function(e,t,a){"create"==e?(this.title="新建资产库",this.obj=a):(this.title="修改资产库",this.wsId=t,this.obj=a),this.initData(),this.dialogVisible=!0},cancel:function(){this.$refs["ruleForm"].resetFields(),this.buttonDisabled=!1,this.dialogVisible=!1},handleClose:function(e){this.buttonDisabled=!1,this.$refs["ruleForm"].resetFields(),e()},initData:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_update_data_query",wsId:e.wsId}};i["a"].post(t).then((function(t){if("ok"==t.result){var a=t.data;e.ruleForm.name=a.name,e.ruleForm.type=0==a.type?"二分法":1==a.type?"三分法":"自定义",e.ruleForm.desc=a.desc,e.ruleForm.admin=a.admin,e.adminOptions=a.adminOptions}else e.$message.error(t.msg)})).catch((function(e){console.log(e)}))},updateAdminData:function(e){this.ruleForm.admin=e},save:function(){var e=this,t=e.ruleForm.name,a=e.ruleForm.desc,s=e.ruleForm.admin;if(""!=t)if(t.length>36)e.$message({message:"[名称]不允许超过36个字",type:"warning"});else if(a.length>255)e.$message({message:"[描述]不允许超过255个字符",type:"warning"});else if(0!=s.length){e.buttonDisabled=!0;var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_update_save",wsId:e.wsId,name:e.ruleForm.name,type:"二分法"==e.ruleForm.type?0:"三分法"==e.ruleForm.type?1:2,desc:e.ruleForm.desc,admin:e.ruleForm.admin.join(",")}};i["a"].post(o).then((function(t){"ok"==t.result?(e.$message({message:t.msg,duration:2e3,type:"success"}),e.cancel(),null!=e.obj&&e.obj.updateWorkspaceCallback()):e.$message.error(t.msg),e.buttonDisabled=!1})).catch((function(e){console.log(e)}))}else e.$message({message:"[管理员]不允许为空",type:"warning"});else e.$message({message:"[名称]不允许为空",type:"warning"})}}},r=l,n=(a("ffd2"),a("cba8")),c=Object(n["a"])(r,s,o,!1,null,"08929cd1",null);t["a"]=c.exports},"75e6":function(e,t,a){},"83af":function(e,t,a){},"896b":function(e,t,a){"use strict";var s=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-dialog",{staticClass:"workspace-import",attrs:{title:"导入资产库",visible:e.dialogVisible,"close-on-click-modal":!1,"destroy-on-close":!0,width:"450px","before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t},closed:e.restoreParam}},[a("div",{directives:[{name:"show",rawName:"v-show",value:e.step1,expression:"step1"}],staticStyle:{height:"250px","text-align":"center"},attrs:{id:"step1"}},[a("div",{staticStyle:{position:"relative",top:"35%"}},[a("div",{staticStyle:{"margin-bottom":"25px"}},[a("awsui-button",{class:{"button-general-color":"local"==e.clickUploadButton,"button-general-color-reverse":"server"==e.clickUploadButton},staticStyle:{width:"130px"},attrs:{type:"local"==e.clickUploadButton?"primary":""},on:{click:function(t){return e.localImport(!0,!0)}}},[e._v("本地文件上传")])],1),a("div",[a("awsui-button",{class:{"button-general-color":"server"==e.clickUploadButton,"button-general-color-reverse":"local"==e.clickUploadButton},staticStyle:{width:"130px"},attrs:{type:"server"==e.clickUploadButton?"primary":""},on:{click:function(t){return e.serverImport(!0,!0)}}},[e._v("服务器文件导入")])],1)])]),a("div",{directives:[{name:"show",rawName:"v-show",value:e.step2,expression:"step2"},{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{height:"250px"},attrs:{id:"step2"}},[a("div",{staticStyle:{"text-align":"center","padding-top":"30px"}},[a("awsui-button",{class:{"button-general-color":"local"==e.clickUploadButton,"button-general-color-reverse":"server"==e.clickUploadButton},staticStyle:{width:"130px"},attrs:{type:"local"==e.clickUploadButton?"primary":""},on:{click:function(t){return e.localImport(!1,!0)}}},[e._v("本地文件上传")]),a("awsui-button",{class:{"button-general-color":"server"==e.clickUploadButton,"button-general-color-reverse":"local"==e.clickUploadButton},staticStyle:{width:"130px"},attrs:{type:"server"==e.clickUploadButton?"primary":""},on:{click:function(t){return e.serverImport(!0,!0)}}},[e._v("服务器文件导入")])],1),a("div",{directives:[{name:"show",rawName:"v-show",value:"local"==e.source,expression:"source == 'local'"}],staticStyle:{height:"100px",margin:"10px 10px"}},[a("PALUpload",{ref:"palUpload",staticClass:"upload-demo",staticStyle:{width:"100%"},attrs:{appId:"com.actionsoft.apps.coe.pal",repositoryName:"tmp",groupValue:"Normal",fileValue:"Normal","on-preview":e.handlePreview,"on-success":e.handleSuccess,"on-remove":e.handleRemove,"on-error":e.handleError,"before-remove":e.beforeRemove,"before-upload":e.beforeUpload,limit:1,"on-exceed":e.handleExceed,accept:".bak","file-list":e.fileList}},[a("div",{staticStyle:{display:"none"}},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"130px"},attrs:{id:"selectFileButton",type:"primary"}},[e._v("本地文件上传")])],1)])],1),a("div",{directives:[{name:"show",rawName:"v-show",value:"remote"==e.source,expression:"source == 'remote'"}],staticStyle:{height:"70px",margin:"40px 10px 0px 10px"}},[a("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"请选择",size:"mini","no-data-text":"无资产库文件"},on:{change:e.changeServerValue},model:{value:e.serverValue,callback:function(t){e.serverValue=t},expression:"serverValue"}},e._l(e.serverOptions,(function(e){return a("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1)],1),a("div",{directives:[{name:"show",rawName:"v-show",value:e.wsIsExist,expression:"wsIsExist"}],staticStyle:{margin:"10px"}},[a("el-form",[a("el-form-item",{attrs:{label:"已存在资产库处理方法",prop:"resource"}},[a("el-radio-group",{model:{value:e.replaceType,callback:function(t){e.replaceType=t},expression:"replaceType"}},[a("el-radio",{attrs:{label:"replace"}},[e._v("替换")]),a("el-radio",{attrs:{label:"skip"}},[e._v("跳过")])],1)],1)],1)],1)]),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{staticClass:"button-general-color",attrs:{disabled:e.buttonDisabled,type:"primary"},on:{click:e.save}},[e._v("确定")]),a("awsui-button",{on:{click:function(t){return e.cancel()}}},[e._v("取消")])],1)])},o=[],i=a("6c2f"),l=a("0f08"),r={name:"WorkspaceImport",components:{PALUpload:i["a"]},data:function(){return{buttonDisabled:!1,dialogVisible:!1,clickUploadButton:"local",step1:!0,step2:!1,source:"",wsIsExist:!1,fileList:[],serverOptions:[],serverValue:"",replaceType:"replace",wsFileName:"",loading:!1,obj:null}},methods:{openImportWsDlg:function(e){this.dialogVisible=!0,this.obj=e},handleClose:function(e){e()},restoreParam:function(){this.buttonDisabled=!1,this.loading=!1,this.dialogVisible=!1,this.step1=!0,this.step2=!1,this.source="",this.wsIsExist=!1,this.fileList=[],this.serverOptions=[],this.serverValue="",this.replaceType="replace",this.wsFileName=""},cancel:function(){this.dialogVisible=!1},changeServerValue:function(){var e=this;e.wsIsExist=!1,e.replaceType="replace",e.wsFileName=e.serverValue,e.loading=!0,e.buttonDisabled=!0;var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_is_exist",wsFileName:e.wsFileName,source:e.source}};l["a"].post(t).then((function(t){"ok"==t.result?"exist"==t.data.message?(e.replaceType="replace",e.wsIsExist=!0):(e.replaceType="replace",e.wsIsExist=!1):e.$message.error(t.msg),e.loading=!1,e.buttonDisabled=!1})).catch((function(e){console.log(e)}))},localImport:function(e,t){this.clickUploadButton="local",t&&(this.$refs.palUpload.clearFiles(),this.source="local",document.getElementById("selectFileButton").click()),e&&(this.step1=!1,this.step2=!0),this.wsIsExist=!1,this.replaceType="replace",this.wsFileName=""},serverImport:function(e){this.clickUploadButton="server";var t=this,a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_remote_import_query"}};l["a"].post(a).then((function(e){"ok"==e.result?t.serverOptions=e.data.impRepsitorys:t.$message.error(e.msg)})).catch((function(e){console.log(e)})),e&&(t.step1=!1,t.step2=!0),t.serverOptions=[],t.serverValue="",t.source="remote",t.wsIsExist=!1,t.replaceType="replace",t.wsFileName=""},save:function(){var e=this;if(""!=e.wsFileName){e.buttonDisabled=!0,e.loading=!0;var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_save_import",wsFileName:e.wsFileName,replaceChoice:e.replaceType,source:e.source}};l["a"].post(t).then((function(t){"ok"==t.result?(console.log("导入资产库["+t.data.wsName+"]["+t.data.wsId+"]成功"),e.$message({message:t.msg,duration:2e3,type:"success"}),e.cancel(),null!=e.obj&&e.obj.importWorkspaceCallback()):(e.loading=!1,e.buttonDisabled=!1,e.$message.error(t.msg))})).catch((function(e){console.log(e)}))}else e.$message({message:"请"+("local"==e.clickUploadButton?"上传":"选择")+"需要导入的文件",type:"warning"})},handleRemove:function(e,t){console.log(e,t)},handlePreview:function(e){console.log(e)},handleExceed:function(e,t){},handleError:function(e,t,a){},beforeUpload:function(e){if(e.size/1024/1024>2048)return this.$message.warning("文件过大,请联系管理员将需上传的文件放在在服务器/doccenter/com.actionsoft.apps.coe.pal/tmp/imp/repository目录下使用服务器上传方式上传"),!1},handleSuccess:function(e,t,a){var s=this;s.buttonDisabled=!0,s.loading=!0,s.wsFileName=t.name;var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_is_exist",wsFileName:s.wsFileName,source:s.source}};l["a"].post(o).then((function(e){"ok"==e.result?"exist"==e.data.message?(s.replaceType="replace",s.wsIsExist=!0):(s.replaceType="replace",s.wsIsExist=!1):s.$message.error(e.msg),s.buttonDisabled=!1,s.loading=!1})).catch((function(e){console.log(e)}))},beforeRemove:function(e,t){e.status,this.wsFileName="",this.wsIsExist=!1}}},n=r,c=(a("2b87"),a("cba8")),p=Object(c["a"])(n,s,o,!1,null,"4fcb9135",null);t["a"]=p.exports},e5a6:function(e,t,a){"use strict";a.r(t);var s=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticStyle:{height:"100%"}},[a("div",{staticStyle:{width:"100%",height:"100%"}},[a("div",{staticStyle:{width:"300px",height:"300px",margin:"auto",position:"relative",top:"35%"}},[e._m(0),a("div",{staticStyle:{"text-align":"center"}},[a("awsui-button",{staticClass:"button-general-color text-general-color",attrs:{type:"primary"},on:{click:e.createWs}},[e._v("新建")]),a("awsui-button",{staticClass:"button-general-color-reverse",on:{click:e.importWs}},[e._v("导入")])],1)])]),a("div",[a("WorkspaceUpdate",{ref:"workspaceUpdate"})],1),a("div",[a("WorkspaceImport",{ref:"workspaceImport"})],1)])},o=[function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticStyle:{"text-align":"center"}},[a("span",[a("i",{staticClass:"iconfont",staticStyle:{color:"#C2C2C2","font-size":"60px"}},[e._v("")])]),a("p",{staticClass:"text-general-color",staticStyle:{margin:"15px 0"}},[e._v("您还没添加任何资产库!")])])}],i=a("5d66"),l=a("896b"),r=a("1337"),n={name:"Workspace",components:{WorkspaceImport:l["a"],WorkspaceUpdate:i["a"]},data:function(){return{wsId:""}},provide:function(){return{}},methods:{createWs:function(){this.$refs.workspaceUpdate.openUpdateWsDlg("create",this.wsId,this)},importWs:function(){this.$refs.workspaceImport.openImportWsDlg(this)},updateWorkspaceCallback:function(){Object(r["b"])("palMain",this.$store.state.sessionId,"com.actionsoft.apps.coe.pal_user_home_page",{},"_top")},importWorkspaceCallback:function(){Object(r["b"])("palMain",this.$store.state.sessionId,"com.actionsoft.apps.coe.pal_user_home_page",{},"_top")}}},c=n,p=a("cba8"),u=Object(p["a"])(c,s,o,!1,null,"76e933d8",null);t["default"]=u.exports},ffd2:function(e,t,a){"use strict";a("83af")}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-b0787fd8.74128c50.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-b0787fd8.74128c50.js
                                                  new file mode 100644
                                                  index 00000000..b9aefc62
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-b0787fd8.74128c50.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-b0787fd8"],{"0d4cb":function(e,t,i){},1337:function(e,t,i){"use strict";i.d(t,"c",(function(){return a})),i.d(t,"b",(function(){return o})),i.d(t,"d",(function(){return s})),i.d(t,"a",(function(){return r})),i.d(t,"e",(function(){return l}));var o=function(e,t,i,o,s){o||(o={}),o.cmd=i,o.sid=t,a(e,wHref,o,s)},a=function(e,t,i,o){var a=document.getElementById(e);a&&document.body.removeChild(a);var s=document.createElement("form");for(var r in s.action=t,s.target=void 0==o?"_blank":o,s.method="get",s.style.display="none",i){var l=document.createElement("textarea");l.name=r,l.value=i[r],s.appendChild(l)}s.setAttribute("id",e),document.body.appendChild(s),s.submit()},s=function(e,t,i){o("palDesigner",i,"com.actionsoft.apps.coe.pal_pl_repository_designer",{uuid:t,teamId:e})},r=function(e,t){var i=e;while(i.nodeName!=t&&"BODY"!=i.nodeName)i=i.parentNode;return i.nodeName==t?i:null},l=function(e){document.getElementsByTagName("title")[0].innerText=e}},1630:function(e,t,i){},"19bf":function(e,t,i){},"1cb9":function(e,t,i){"use strict";i("e21c")},"2ca7":function(e,t,i){},"3b30":function(e,t,i){},"40c1":function(e,t,i){"use strict";i("bd13")},"49c1":function(e,t,i){},"4cbb":function(e,t,i){"use strict";var o=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-container",[i("el-dialog",{attrs:{id:"bpmOrgAddress",title:e.title,visible:e.dialogVisible,"destroy-on-close":!0,width:e.width,"modal-append-to-body":!1,"append-to-body":!0,"close-on-click-modal":!1,"before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t}}},[e.refresh?[i("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],attrs:{"element-loading-text":"拼命加载中"}},[i("div",{staticStyle:{height:"300px",overflow:"auto",border:"1px solid #f2f2f2"}},[i("div",{staticClass:"tree"},[i("el-tree",{ref:"tree",attrs:{props:e.treeProps,"show-checkbox":e.multiple,"expand-on-click-node":!1,"check-strictly":!0,"highlight-current":!0,"node-key":"id",lazy:"",load:e.loadNode},on:{"node-click":e.openNode,"node-expand":e.expandNode,"node-collapse":e.closeNode},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.node;t.data;return i("span",{},[i("i",{staticClass:"awsui-iconfont tree-content-icon tree-content-icon-padding",style:{color:o.data.icon.color},domProps:{innerHTML:e._s(o.data.icon.icon)}}),i("span",[e._v(e._s(o.label))])])}}],null,!1,52448956)})],1)])])]:e._e(),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("awsui-button",{staticClass:"button-general-color",attrs:{type:"primary"},on:{click:e.submit}},[e._v("确定")]),i("awsui-button",{on:{click:e.cancel}},[e._v("取消")])],1)],2)],1)},a=[],s=i("0f08"),r={name:"BpmOrgAddress",props:{visible:{type:Boolean,default:!1},addressType:{type:String,default:"department"},multiple:{type:Boolean,default:!1},rootDeptId:{type:String,default:""},highSecurityFilter:{type:String,default:""},title:{type:String,default:""},selected:{type:Object,default:function(){return{department:[],user:[],role:[],position:[]}}}},data:function(){return{refresh:!1,dialogVisible:!1,loading:!1,searchKey:"",treeSearchKey:"",timeout:null,pid:"",width:"500px",treeProps:{label:"name",isLeaf:"leaf"}}},methods:{handleClose:function(e){this.closeDlalog("cancel"),e()},cancel:function(){this.closeDlalog("cancel"),this.dialogVisible=!1},submit:function(){this.closeDlalog("save"),this.dialogVisible=!1},closeDlalog:function(e){if("save"==e){var t=[];if(this.multiple)t=this.$refs.tree.getCheckedNodes();else{var i=this.$refs.tree.getCurrentNode();null!=i&&t.push(i)}this.$emit("getResult",JSON.parse(JSON.stringify(t)))}else this.$emit("cancel")},handleNodeClick:function(e){},openNode:function(e,t,i){},treeSearchSelect:function(e){this.queryTreeByIdAndPath(e.id,e.path)},treeSearch:function(e,t){var i=this;if(void 0!=e&&""!=e.trim()){var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_repository_tree_component_search",addressType:i.addressType,rootDeptId:i.rootDeptId,name:e}};s["a"].post(o).then((function(e){"ok"==e.result&&e.data.length>0?(clearTimeout(i.timeout),i.timeout=setTimeout((function(){t(e.data)}),3e3*Math.random())):clearTimeout(i.timeout)})).catch((function(e){console.log(e)}))}else clearTimeout(i.timeout)},queryTreeByIdAndPath:function(e,t){for(var i=this,o=i.$refs.tree,a=t.split(","),s=1,r=0;r<a.length;r++)r>0&&null!=o.getNode(a[r-1])&&(setTimeout(i._expandNode(o,a[r-1]),300*s),s++);setTimeout((function(){null!=o.getNode(e)&&o.setCurrentKey(e)}),300*s)},_expandNode:function(e,t){return function(){e.getNode(t).expand()}},loadNode:function(e,t){var i=this;i.loading=!0;var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_bpm_org_address_component_subjson",addressType:i.addressType,pid:"",highSecurityFilter:i.highSecurityFilter}};0===e.level?(o.data.pid=i.pid,o.data.parentType=""):(o.data.pid=e.data.id,o.data.parentType=e.data.type),s["a"].post(o).then((function(o){if(i.multiple)for(var a=i.addressType.indexOf("department")>-1,s=i.addressType.indexOf("user")>-1,r=i.addressType.indexOf("role")>-1,l=i.addressType.indexOf("position")>-1,n=0;n<o.data.length;n++){var c=o.data[n];"company"==c.type||"roleRoot"==c.type||"roleGroup"==c.type||"positionRoot"==c.type||"positionGroup"==c.type?c.disabled=!0:(a&&"department"==c.type&&(c.disabled=!1),a||"department"!=c.type||(c.disabled=!0),s&&"user"==c.type&&(c.disabled=!1),s||"user"!=c.type||(c.disabled=!0),r&&"role"==c.type&&(c.disabled=!1),r||"role"!=c.type||(c.disabled=!0),l&&"position"==c.type&&(c.disabled=!1),l||"position"!=c.type||(c.disabled=!0))}if(t(o.data),i.loading=!1,0==e.level&&o.data.length>0){var d=i.$refs.tree;d.getNode(o.data[0].id).expand(),setTimeout((function(){var e=d.getNode(o.data[0].id).childNodes[0];null!=e&&e.expand()}),500)}})).catch((function(e){console.log(e)}))},expandNode:function(e,t,i){},closeNode:function(e,t,i){t.childNodes=[],t.loaded=!1},refreshNode:function(e){if(void 0==e){var t=this.$refs.tree.getCurrentNode();if(null!=t){void 0!=this.$refs.tree.store.nodesMap[t.id]&&(this.$refs.tree.store.nodesMap[t.id].expanded=!1);var i=this.$refs.tree.getNode(t.id);this.closeNode(null,i,null),i.expand()}}else{void 0!=this.$refs.tree.store.nodesMap[e]&&(this.$refs.tree.store.nodesMap[e].expanded=!1);var o=this.$refs.tree.getNode(e);null!=o&&(this.closeNode(null,o,null),o.expand())}}},watch:{visible:function(e){this.dialogVisible=e,e?(this.addressType.indexOf("department")>0&&(this.pid=this.rootDeptId),this.refresh=!0):this.refresh=!1}}},l=r,n=(i("b142"),i("cba8")),c=Object(n["a"])(l,o,a,!1,null,"6de64a47",null);t["a"]=c.exports},6076:function(e,t,i){"use strict";i("19bf")},"6b75":function(e,t,i){"use strict";i("1630")},"6f9be":function(e,t,i){},7304:function(e,t,i){"use strict";i("cc00")},"7eb6":function(e,t,i){"use strict";i.r(t);var a=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-container",{style:{width:"100%",height:e.mainHeight},attrs:{id:"repository"}},[i("el-aside",{staticStyle:{overflow:"hidden","border-right":"1px solid #F2F2F2"},attrs:{width:"280px"}},[e.reFresh?i("RepositoryMain",{key:"repositoryMain",ref:"repositoryMain"}):e._e()],1),i("el-main",[i(e.mainContent,{key:Math.random(),ref:"component",tag:"component",attrs:{uuid:e.uuid,refreshTreeParentNode:e.refreshTreeParentNode,refreshTreeNode:e.refreshTreeNode,treeNode:e.treeNode}})],1)],1)},s=[],r=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-container",{staticStyle:{overflow:"hidden"},attrs:{id:"repositoryMain"}},[e.havingWritePerm?e._e():i("el-header",{attrs:{height:e.headerHeight2}}),e.havingWritePerm?i("el-header",{attrs:{height:e.headerHeight1}},[i("div",{staticStyle:{margin:"12px 0px 10px","text-align":"center"}},[e.havingWritePerm?i("el-popover",{attrs:{placement:"bottom",width:"280",trigger:"click","visible-arrow":!1},on:{show:e.showCreateEvent},model:{value:e.createDesignerVisible,callback:function(t){e.createDesignerVisible=t},expression:"createDesignerVisible"}},[i("div",{directives:[{name:"loading",rawName:"v-loading",value:e.createMethodLoading,expression:"createMethodLoading"}],attrs:{"element-loading-text":"拼命加载中"}},[i("div",[i("ul",e._l(Math.ceil(e.fileMethodList.length/4),(function(t){return i("li",{staticStyle:{"margin-bottom":"7px"}},[e._l(e.fileMethodList.slice(4*(t-1),4*t),(function(t){return[i("div",{staticClass:"new-repository-item",style:{opacity:t.opacity,filter:t.filter,cursor:t.cursor},on:{click:function(i){t.clickFlag&&e.createDesigner(t.app,t.category,t.method)}}},[i("div",{staticStyle:{position:"relative",top:"9px"}},[i("div",{staticClass:"icon-div-repository",style:{"background-color":t.icon.color}},[i("i",{staticClass:"awsui-iconfont icon-dynamic-repository",domProps:{innerHTML:e._s(t.icon.code)}})]),i("div",{staticClass:"item-name text-general-color icon-text"},[i("label",{style:{cursor:t.cursor}},[e._v(e._s(t.methodName))])])])])]}))],2)})),0)]),i("div",{staticStyle:{"border-bottom":"1px solid #F2F2F2"}}),i("div",{staticStyle:{"margin-top":"7px"}},[i("ul",[i("li",[e._l(e.folderMethodList,(function(t){return[i("div",{staticClass:"new-repository-item",style:{opacity:t.opacity,filter:t.filter,cursor:t.cursor},on:{click:function(i){t.clickFlag&&e.createFolder(t.method,t.methodName)}}},[i("div",{staticStyle:{position:"relative",top:"4px"}},[i("div",{staticClass:"icon-div-repository"},[i("i",{staticClass:"awsui-iconfont icon-fixed-repository",style:{color:t.icon.color},domProps:{innerHTML:e._s(t.icon.code)}})]),i("div",{staticClass:"item-name text-general-color fixed-icon-text"},[i("label",{style:{cursor:t.cursor}},[e._v(e._s(t.methodName))])])])])]})),i("div",{staticClass:"new-repository-item",staticStyle:{cursor:"pointer"},on:{click:e.importDesigners}},[i("div",{staticStyle:{position:"relative",top:"4px"}},[i("div",{staticClass:"icon-div-repository"},[i("i",{staticClass:"iconfont text-linker-color icon-fixed-repository"},[e._v("")])]),i("div",{staticClass:"item-name text-general-color fixed-icon-text"},[i("label",{staticStyle:{cursor:"pointer"}},[e._v("导入模型")])])])])],2)])])]),i("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"100%",height:"36px",margin:"0","font-size":"14px"},attrs:{slot:"reference",type:"primary"},slot:"reference"},[e._v("新建 ")])],1):e._e()],1),e.havingWritePerm?i("div",{staticStyle:{width:"100%","border-bottom":"1px solid #F2F2F2"}}):e._e()]):e._e(),i("el-main",{staticClass:"main-tree",style:{overflow:"auto",height:e.treeHeight}},[i("el-tree",{ref:"tree",attrs:{props:e.treeProps,"expand-on-click-node":!1,"highlight-current":!0,"node-key":"id",lazy:"",load:e.loadNode},on:{"node-click":e.openNode,"node-expand":e.expandNode,"node-collapse":e.closeNode},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.node,a=t.data;return i("span",{},[i("i",{staticClass:"awsui-iconfont tree-content-icon tree-content-icon-padding",style:{color:o.data.icon.color},domProps:{innerHTML:e._s(o.data.icon.icon)}}),i("span",{style:{"font-weight":a.id.length<36?"600":""}},[e._v(e._s(o.label))])])}}])})],1),i("el-dialog",{attrs:{title:e.folderDialog.folderTitle,visible:e.folderDialog.dialogVisible,"modal-append-queryTreeByIdAndPathto-body":!1,"close-on-click-modal":!1,"close-on-press-escape":!0,"before-close":e.handleCloseFolder,width:"600px"},on:{"update:visible":function(t){return e.$set(e.folderDialog,"dialogVisible",t)}}},[i("div",{staticStyle:{border:"1px solid #F2F2F2",padding:"0px 10px 10px 10px"}},[i("awsui-form",{ref:"folderForm",attrs:{model:e.folderDialog.folderForm,rules:e.folderDialog.rules,"label-position":"top"}},[i("awsui-form-item",{attrs:{label:"名称",prop:"name"}},[i("awsui-input",{model:{value:e.folderDialog.folderForm.name,callback:function(t){e.$set(e.folderDialog.folderForm,"name",t)},expression:"folderDialog.folderForm.name"}})],1),"default"==e.folderDialog.folderMethod?i("awsui-form-item",{attrs:{label:"描述",prop:"desc"}},[i("awsui-input",{attrs:{type:"textarea"},model:{value:e.folderDialog.folderForm.desc,callback:function(t){e.$set(e.folderDialog.folderForm,"desc",t)},expression:"folderDialog.folderForm.desc"}})],1):e._e()],1)],1),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("awsui-button",{staticClass:"button-general-color",attrs:{type:"primary"},on:{click:function(t){return e.createFolderSave("folderForm")}}},[e._v("确定")]),i("awsui-button",{on:{click:e.clearFolderDlg}},[e._v("取消")])],1)]),i("awsui-dialog",{attrs:{title:"密级标定",visible:e.securityVisible,border:!1,"append-to-body":"",width:"500px"},on:{"update:visible":function(t){e.securityVisible=t}}},[i("div",{staticStyle:{"max-height":"500px","overflow-y":"auto"}},e._l(e.securityFileList,(function(t){return i("awsui-form",{key:t.uuid,ref:t.uuid,refInFor:!0,attrs:{"label-width":"200px",rules:e.securityRules,model:t}},[i("awsui-form-item",{attrs:{label:t.name,prop:"securityLevel"}},[i("awsui-select",{staticStyle:{width:"70%"},attrs:{options:e.securityOptions},model:{value:t.securityLevel,callback:function(i){e.$set(t,"securityLevel",i)},expression:"file.securityLevel"}})],1)],1)})),1),i("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("awsui-button",{attrs:{type:"primary"},on:{click:e.uploadServer}},[e._v("确定")]),i("awsui-button",{on:{click:function(t){e.securityVisible=!1}}},[e._v("取 消")])],1)]),i("RepositoryImport",{ref:"repositoryImport"})],1)},l=[],n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-container",["org"!=e.category?i("div",{key:"dialog2",staticClass:"repository-import"},[i("el-dialog",{attrs:{title:"导入模型",visible:e.dialogVisible,width:"500px","close-on-click-modal":!1,"before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t}}},[i("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{height:"250px"},attrs:{"element-loading-text":"请稍等"}},[i("div",{staticStyle:{"text-align":"center","padding-top":"10px"}},[i("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"130px"},attrs:{type:"primary"},on:{click:function(t){return e.openFileSelect("file")}}},[e._v("本地文件上传")])],1),i("div",{staticClass:"text-second-color",staticStyle:{"font-size":"12px","margin-top":"10px","margin-left":"15px"}},[e._v("请上传export文件,支持多个文件同时导入")]),i("div",{staticStyle:{height:"180px",margin:"10px 10px",overflow:"auto"}},[i("PALUpload",{ref:"palUpload",staticClass:"upload-demo",staticStyle:{width:"100%"},attrs:{appId:"com.actionsoft.apps.coe.pal",repositoryName:"tmp",groupValue:"_import",fileValue:"Normal",multiple:!0,"on-preview":e.handlePreview,"on-success":e.handleSuccess,"on-remove":e.handleRemove,"on-error":e.handleError,"before-remove":e.beforeRemove,"before-upload":e.beforeUpload,"on-exceed":e.handleExceed,"on-progress":e.handleProgress,accept:".export","file-list":e.fileList}},[i("div",{staticStyle:{display:"none"}},[i("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"130px"},attrs:{name:"selectFileButton",type:"primary"}},[e._v("本地文件上传")])],1)])],1)]),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("awsui-button",{staticClass:"button-general-color",attrs:{disabled:e.buttonDisabled,type:"primary"},on:{click:e.importSave}},[e._v("确定")]),i("awsui-button",{on:{click:e.cancel}},[e._v("取消")])],1)])],1):i("div",{key:"dialog1",staticClass:"repository-import"},[i("el-dialog",{attrs:{title:"导入组织模型",visible:e.dialogVisible,"close-on-click-modal":!1,width:"500px","before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t}}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.step1,expression:"step1"},{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{height:"250px","text-align":"center"},attrs:{id:"step1","element-loading-text":"请稍等"}},[i("div",{staticStyle:{position:"relative",top:"35%"}},[i("div",{staticStyle:{"margin-bottom":"25px"}},[i("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"130px"},attrs:{type:"primary"},on:{click:function(t){return e.openFileSelect("file")}}},[e._v("直接导入")])],1),i("div",[i("awsui-button",{staticClass:"button-general-color-reverse",staticStyle:{width:"130px"},on:{click:function(t){return e.openFileSelect("excel")}}},[e._v("模板导入")])],1)])]),i("div",{directives:[{name:"show",rawName:"v-show",value:e.step2,expression:"step2"},{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{height:"250px"},attrs:{id:"step2","element-loading-text":"请稍等"}},[i("div",{staticStyle:{"text-align":"center","padding-top":"10px"}},[i("awsui-button",{class:{"button-general-color":"file"==e.type,"button-general-color-reverse":"excel"==e.type},staticStyle:{width:"130px"},attrs:{type:"file"==e.type?"primary":""},on:{click:function(t){return e.openFileSelect("file")}}},[e._v("直接导入")]),i("awsui-button",{class:{"button-general-color":"excel"==e.type,"button-general-color-reverse":"file"==e.type},staticStyle:{width:"130px"},attrs:{type:"excel"==e.type?"primary":""},on:{click:function(t){return e.openFileSelect("excel")}}},[e._v("模板导入")])],1),"file"==e.type?i("div",[i("div",{staticClass:"text-second-color",staticStyle:{"font-size":"12px","margin-top":"10px","margin-left":"15px"}},[e._v('请点击"直接导入"按钮上传export文件,支持多个文件同时导入')]),i("div",{staticStyle:{height:"180px",margin:"10px 10px",overflow:"auto"}},[i("PALUpload",{ref:"palUpload",staticClass:"upload-demo",staticStyle:{width:"100%"},attrs:{appId:"com.actionsoft.apps.coe.pal",repositoryName:"tmp",groupValue:"_import",fileValue:"Normal",multiple:!0,"on-preview":e.handlePreview,"on-success":e.handleSuccess,"on-remove":e.handleRemove,"on-error":e.handleError,"before-remove":e.beforeRemove,"before-upload":e.beforeUpload,"on-exceed":e.handleExceed,"on-progress":e.handleProgress,accept:".export","file-list":e.fileList}},[i("div",{staticStyle:{display:"none"}},[i("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"130px"},attrs:{name:"selectFileButton",type:"primary"}},[e._v("本地文件上传")])],1)])],1)]):e._e(),"excel"==e.type?i("div",[i("div",{staticStyle:{height:"200px",margin:"25px 10px 10px",overflow:"auto"}},[i("div",{staticStyle:{width:"438px",height:"80px",border:"1px solid #F2F2F2"}},[i("div",{staticStyle:{float:"left",height:"100%",width:"80px",display:"inline-block","background-color":"#F5F7FA","text-align":"center","line-height":"85px","vertical-align":"middle"}},[i("i",{staticClass:"iconfont text-second-color",staticStyle:{"font-size":"40px"}},[e._v("")])]),i("div",{staticStyle:{float:"left",height:"100%"}},[i("div",{staticStyle:{display:"inline-block",height:"100%","margin-left":"15px","margin-top":"9px"}},[i("p",{staticClass:"text-general-color"},[e._v("填写导入组织信息")]),i("p",{staticClass:"text-second-color",staticStyle:{"font-size":"12px","padding-top":"4px","padding-bottom":"4px"}},[e._v("请按照说明格式正确填写Excel文件")]),i("p",{staticClass:"text-linker-color",staticStyle:{"font-size":"12px",cursor:"pointer"},on:{click:function(t){return e.downloadOrgTemplate()}}},[e._v("下载模板")])])])]),i("div",{staticStyle:{height:"20px"}}),i("div",{staticStyle:{width:"438px",height:"80px",border:"1px solid #F2F2F2"}},[i("div",{staticStyle:{float:"left",height:"100%",width:"80px",display:"inline-block","background-color":"#F5F7FA","text-align":"center","line-height":"85px","vertical-align":"middle"}},[i("i",{staticClass:"iconfont text-second-color",staticStyle:{"font-size":"40px"}},[e._v("")])]),i("div",{staticStyle:{float:"left",height:"100%"}},[i("div",{staticStyle:{display:"inline-block",height:"100%","margin-left":"15px","margin-top":"9px"}},[i("p",{staticClass:"text-general-color"},[e._v("上传填好的组织信息文件")]),i("p",{staticClass:"text-second-color",staticStyle:{"font-size":"12px","padding-top":"4px","padding-bottom":"4px"}},[e._v("文件后缀必须为xls或xlsx(即Excel格式)")]),e.isOrgUploaded?i("p",{staticClass:"text-linker-color",staticStyle:{"font-size":"12px",cursor:"pointer"}},[i("label",{staticStyle:{display:"inline-block","max-width":"300px",overflow:"hidden","white-space":"nowrap","text-overflow":"ellipsis"}},[e._v(e._s(e.orgUploadFileName))]),e._v(" "),i("i",{staticClass:"iconfont text-important-color",staticStyle:{"font-size":"12px",position:"relative",top:"-3px"},on:{click:e.removeOrgUpload}},[e._v("")])]):i("p",{staticClass:"text-linker-color",staticStyle:{"font-size":"12px",cursor:"pointer"},on:{click:e.uploadOrgExcel}},[e._v("上传文件")])])])])]),i("PALUpload",{ref:"orgUpload",staticClass:"upload-demo",staticStyle:{width:"100%"},attrs:{appId:"com.actionsoft.apps.coe.pal",repositoryName:"tmp",groupValue:"_import",fileValue:"Normal",limit:1,"show-file-list":!1,"on-success":e.handleOrgUploadSuccess,accept:".xls,.xlsx","file-list":e.orgFileList}},[i("div",{staticStyle:{display:"none"}},[i("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"130px"},attrs:{name:"selectOrgFileButton",type:"primary"}},[e._v("Excel文件上传")])],1)])],1):e._e()]),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("awsui-button",{staticClass:"button-general-color",attrs:{disabled:e.buttonDisabled,type:"primary"},on:{click:e.importSave}},[e._v("确定")]),i("awsui-button",{on:{click:e.cancel}},[e._v("取消")])],1)])],1)])},c=[],d=i("6c2f"),p=i("0f08"),u={name:"RepositoryImport",components:{PALUpload:d["a"]},data:function(){return{dialogVisible:!1,buttonDisabled:!1,category:"",obj:null,fileList:[],step1:!0,step2:!1,type:"file",orgFileList:[],isOrgUploaded:!1,orgUploadFileName:"",parentId:"",loading:!1}},inject:["getIsHighSecurity","setSecurityVisible","securityFileList","setSecurityType"],computed:{isHighSecurity:function(){return this.getIsHighSecurity()}},methods:{clearParam:function(){this.category="",this.obj=null,this.fileList=[],this.orgFileList=[],this.buttonDisabled=!1,this.dialogVisible=!1,this.step1=!0,this.step2=!1,this.type="",this.isOrgUploaded=!1,this.orgUploadFileName="",this.parentId="",this.loading=!1,this.$refs.palUpload&&this.$refs.palUpload.clearFiles(),this.$refs.orgUpload&&this.$refs.orgUpload.clearFiles()},openImportRepositoryDlg:function(e,t,i){var o=this;o.category=t,o.obj=e,o.parentId=i,setTimeout((function(){o.dialogVisible=!0,o.$nextTick((function(){"org"!=o.category&&o.openFileSelect("file")}))}),300)},cancel:function(){this.clearParam()},importSave:function(){var e=this,t=e.$store.getters.getWsIdFn,i=e.$store.getters.getTeamIdFn,o="";if("file"==e.type){if(0==e.fileList.length)return void e.$message({message:"请上传需要导入的文件",type:"warning"});for(var a=[],s=0;s<e.fileList.length;s++)a.push(e.fileList[s].name);e.buttonDisabled=!0,e.loading=!0;var r={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_import",fileList:JSON.stringify(a),wsId:t,teamId:i,plCategory:e.category,parentId:e.parentId}};p["a"].post(r).then((function(t){if("ok"==t.result){if(e.isHighSecurity){var i=t.data.data.securityBindList;if(void 0!=i&&i.length>0){for(var o=0;o<i.length;o++){var a=i[o];e.securityFileList.push(a)}e.setSecurityType("import"),e.setSecurityVisible(!0)}}else e.$message({message:"导入成功",type:"success"});e.obj.refreshNode(),e.obj.openRepositoryList(e.parentId),e.cancel()}else e.$message.error(t.msg),e.buttonDisabled=!1,e.loading=!1})).catch((function(e){console.log(e)}))}else if("org"==e.category&&"excel"==e.type){if(0==e.orgFileList.length)return void e.$message({message:"请上传需要导入的组织文件",type:"warning"});o=e.orgFileList[0].name,e.loading=!0;var l={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_repository_import_org",fileName:o,wsId:t,teamId:i,parentId:e.parentId}};p["a"].post(l).then((function(t){if("ok"==t.result){if(e.isHighSecurity){var i=t.data.securityBindList;if(void 0!=i&&i.length>0){for(var o=0;o<i.length;o++){var a=i[o];e.securityFileList.push(a)}e.setSecurityType("import"),e.setSecurityVisible(!0)}}else e.$message({message:"导入成功",type:"success"});e.obj.refreshNode(),e.obj.openRepositoryList(e.parentId),e.cancel()}else e.$message.error(t.msg),e.buttonDisabled=!1,e.loading=!1})).catch((function(e){console.log(e)}))}},handleClose:function(e){this.clearParam(),e()},handleRemove:function(e,t){this.fileList=t},handlePreview:function(e){console.log(e)},handleExceed:function(e,t){},handleError:function(e,t,i){},beforeUpload:function(e){},handleProgress:function(e,t,i){},handleSuccess:function(e,t,i){var o=this;o.fileList=[];for(var a={},s=i.length-1;s>=0;s--){var r=i[s];a[r.name]||(o.fileList.unshift(r),a[r.name]=!0)}},beforeRemove:function(e,t){e.status},openFileSelect:function(e){this.type=e,"org"!=this.category?this.$nextTick((function(){document.getElementsByName("selectFileButton")[0].click()})):"file"==e?(this.step1=!1,this.step2=!0,this.$nextTick((function(){document.getElementsByName("selectFileButton")[0].click()}))):(this.type=e,this.step1=!1,this.step2=!0)},downloadOrgTemplate:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_repository_import_org_template",category:e.category}};p["a"].post(t).then((function(e){window.open(e.url)})).catch((function(e){console.log(e)}))},uploadOrgExcel:function(){this.$refs.orgUpload&&this.$refs.orgUpload.clearFiles(),document.getElementsByName("selectOrgFileButton")[0].click()},handleOrgUploadSuccess:function(e,t,i){this.orgFileList=[],this.orgFileList.push(t),this.orgUploadFileName=t.name,this.isOrgUploaded=!0},removeOrgUpload:function(){this.isOrgUploaded=!1,this.orgFileList=[],this.orgUploadFileName=""}}},h=u,f=(i("1cb9"),i("cba8")),g=Object(f["a"])(h,n,c,!1,null,"10fa5366",null),m=g.exports,y=i("1337"),v={name:"RepositoryTree",components:{RepositoryImport:m},data:function(){var e=function(e,t,i){void 0===t?i(new Error("请选择文件密级")):i()};return{headerHeight1:"60px",headerHeight2:"10px",treeHeight:parseInt(this.$store.getters.getTopMainHeightFn)-(this.havingWritePerm?parseInt(this.headerHeight1):parseInt(this.headerHeight2))+"px",fileMethodList:[],folderMethodList:[],createDesignerVisible:!1,folderDialog:{dialogVisible:!1,folderMethod:"default",folderTitle:"新建文件夹",folderForm:{name:"",desc:""},rules:{name:[{required:!0,message:"必填",trigger:"blur"},{min:1,max:120,message:"长度在 1 到 120 个字符",trigger:"blur"}],securityLevel:[{required:!0,trigger:"change",validator:e,type:"number"}],desc:[{min:0,max:2550,message:"长度在 255 个字符以内",trigger:"blur"}]}},treeProps:{label:"name",isLeaf:"leaf"},createMethodLoading:!1,havingWritePerm:!1,havingRemovePerm:!1,havingVersionManagePerm:!1,validUserPermDataCount:0,isHighSecurity:!1,securityList:{},securityVisible:!1,securityFileList:[],securityOptions:[],securityRules:{securityLevel:[{required:!0,trigger:"change",validator:e,type:"number"}]},securityType:""}},inject:["openRepositoryList","transferTreeNode"],provide:function(){return{getIsHighSecurity:this.getIsHighSecurity,setSecurityVisible:this.setSecurityVisible,securityFileList:this.securityFileList,setSecurityType:this.setSecurityType}},created:function(){this.initData()},mounted:function(){},methods:{initData:function(){var e=this;if(e.$store.getters.getTeamIdFn&&""!=e.$store.getters.getTeamIdFn){var t={url:"jd",data:{wsId:e.$store.getters.getWsIdFn,teamId:e.$store.getters.getTeamIdFn,cmd:"com.actionsoft.apps.coe.pal_user_perm_query"}};p["a"].post(t).then((function(t){e.validUserPermDataCount=t.data.validUserPermDataCount,e.validUserPermDataCount>0?e.havingWritePerm=t.data.havingWritePerm:e.havingWritePerm=!1,e.havingRemovePerm=t.data.havingRemovePerm,e.havingVersionManagePerm=t.data.havingVersionManagePerm,e.initTreeHeight()})).catch((function(e){console.log(e)}))}else e.havingWritePerm=!0,e.havingRemovePerm=!0,e.havingVersionManagePerm=!0;this.initTreeHeight()},queryTreeByIdAndPath:function(e,t,i){for(var o=this,a=o.$refs.tree,s=i.split(","),r=1,l=0;l<s.length;l++)l>0&&null!=a.getNode(s[l-1])&&(setTimeout(o._expandNode(a,s[l-1]),300*r),r++);setTimeout((function(){null!=a.getNode(t)&&a.setCurrentKey(t),o.openRepositoryList(e)}),300*r)},_expandNode:function(e,t){return function(){e.getNode(t).expand()}},openNode:function(e,t,i){this.closeCreatePopover(),this.openRepositoryList(t.data.currId),this.transferTreeNode(e)},loadNode:function(e,t){var i=this,o={url:"jd",data:{}};o.data.wsId=i.$store.getters.getWsIdFn,o.data.teamId=i.$store.getters.getTeamIdFn,o.data.cmd="com.actionsoft.apps.coe.pal_processlevel_tree_data",0===e.level?o.data.pid="":o.data.pid=e.data.id,p["a"].post(o).then((function(o){if(t(o.data),0==e.level&&o.data.length>0){var a=i.$refs.tree;a.getNode(o.data[0].id).expand(),setTimeout((function(){var e=a.getNode(o.data[0].id).childNodes[0];null!=e&&e.expand()}),500)}})).catch((function(e){console.log(e),i.tableLoading=!1}))},expandNode:function(e,t,i){},closeNode:function(e,t,i){t.childNodes=[],t.loaded=!1},refreshNode:function(e){if(void 0==e){var t=this.$refs.tree.getCurrentNode();if(null!=t){void 0!=this.$refs.tree.store.nodesMap[t.id]&&(this.$refs.tree.store.nodesMap[t.id].expanded=!1);var i=this.$refs.tree.getNode(t.id);this.closeNode(null,i,null),i.expand()}}else{void 0!=this.$refs.tree.store.nodesMap[e]&&(this.$refs.tree.store.nodesMap[e].expanded=!1);var o=this.$refs.tree.getNode(e);null!=o&&(this.closeNode(null,o,null),o.expand(),this.openNode(o.data,o,null))}},refreshParentNode:function(e){var t=null;t=void 0==e?this.$refs.tree.getCurrentNode():this.$refs.tree.getNode(e),null!=t&&(t=this.$refs.tree.getNode(t.data.pid),this.refreshNode(t.data.id))},showCreateEvent:function(){var e=this,t=e.$refs.tree.getCurrentNode();if(null==t)return e.closeCreatePopover(),void e.$message({message:"请选择新建文件位置",type:"warning"});e.createMethodLoading=!0;var i=e.$refs.tree.getCurrentNode().plCategory,o=e.$refs.tree.getCurrentNode().plMethodId,a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_create_method_list",category:i,methodId:o}};p["a"].post(a).then((function(t){if("ok"==t.result){for(var i=t.data.fileMethodList,o=0;o<i.length;o++){var a=i[o];a.havingCreatePerm?(a.opacity=1,a.filter="alpha(opacity=100)",a.clickFlag=!0,a.cursor="pointer"):(a.opacity=.4,a.filter="alpha(opacity=40)",a.clickFlag=!1,a.cursor="default")}e.fileMethodList=i;for(var s=t.data.folderMethodList,r=0;r<s.length;r++){var l=s[r];l.havingCreatePerm?(l.opacity=1,l.filter="alpha(opacity=100)",l.clickFlag=!0,l.cursor="pointer"):(l.opacity=.4,l.filter="alpha(opacity=40)",l.clickFlag=!1,l.cursor="default")}e.folderMethodList=s,void 0!=t.data.isHighSecurity&&(e.isHighSecurity=t.data.isHighSecurity,e.securityList=t.data.securityList,e.securityOptions=[],Object.keys(e.securityList).map((function(t){var i={value:t,label:e.securityList[t]};e.securityOptions.push(i)})))}e.createMethodLoading=!1})).catch((function(e){console.log(e)}))},createFolder:function(e,t){this.folderDialog.folderMethod=e,this.folderDialog.folderTitle="新建"+t,this.folderDialog.dialogVisible=!0,this.closeCreatePopover()},clearFolderDlg:function(e){this.$refs["folderForm"].resetFields(),e&&(this.folderDialog.dialogVisible=!1)},handleCloseFolder:function(e){this.clearFolderDlg(!1),e()},createFolderSave:function(e){var t=this;t.$refs[e].validate((function(e){if(!e)return console.log("error submit!!"),!1;var i=t.folderDialog.folderForm.name,o=t.folderDialog.folderForm.desc;if(o.length>255)t.$message({message:"[描述]不允许超过255个字符",type:"warning"});else{var a=t.$refs.tree.getCurrentNode(),s=a.id,r=t.$store.getters.getWsIdFn,l=t.$store.getters.getTeamIdFn,n=t.folderDialog.folderMethod,c={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_folder_create_save",wsId:r,teamId:l,method:n,parentId:s,name:i,desc:o,id:""}};p["a"].post(c).then((function(e){"ok"==e.result&&(t.refreshNode(),t.clearFolderDlg(!0),t.openRepositoryList(s))})).catch((function(e){console.log(e)}))}}))},createDesigner:function(e,t,i){var o=this;if(o.closeCreatePopover(),this.isHighSecurity){var a={uuid:1,name:"未命名文件",category:t,method:i};this.securityFileList.push(a),this.securityType="create",this.securityVisible=!0}else{var s=o.$refs.tree.getCurrentNode(),r=s.id,l=o.$store.getters.getWsIdFn,n=o.$store.getters.getTeamIdFn,c={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_repository_create_save",wsId:l,teamId:n,category:t,method:i,parentId:r,container:"_blank"}};p["a"].post(c).then((function(e){if("ok"==e.result){o.refreshNode(),o.openRepositoryList(r);var t=e.data.id;Object(y["d"])(o.$store.getters.getTeamIdFn,t,o.$store.state.sessionId)}})).catch((function(e){console.log(e)}))}},uploadServer:function(){var e=this;this.validateFlag=!0;for(var t=0;t<this.securityFileList.length;t++){var i=this.securityFileList[t];this.$refs[i.uuid][0].validate((function(t){if(!t)return e.validateFlag=!1,!1}))}if(this.validateFlag){if("import"===this.securityType){var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_file_security_level_batch_update",fileList:JSON.stringify(this.securityFileList)}};p["a"].post(o).then((function(e){"ok"==e.result&&(that.refreshNode(),that.openRepositoryList(parentId),that.$message({message:"导入成功",type:"success"}))})).catch((function(e){console.log(e)}))}else(function(){for(var t=e,i=t.$refs.tree.getCurrentNode(),o=i.id,a=t.$store.getters.getWsIdFn,s=t.$store.getters.getTeamIdFn,r=0;r<e.securityFileList.length;r++){var l=e.securityFileList[r],n={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_repository_create_save",wsId:a,teamId:s,category:l.category,method:l.method,parentId:o,container:"_blank",securityLevel:l.securityLevel}};p["a"].post(n).then((function(e){if("ok"==e.result){t.refreshNode(),t.openRepositoryList(o);var i=e.data.id;Object(y["d"])(t.$store.getters.getTeamIdFn,i,t.$store.state.sessionId)}})).catch((function(e){console.log(e)}))}})();this.securityVisible=!1}},importDesigners:function(){this.closeCreatePopover(),this.$refs.repositoryImport.openImportRepositoryDlg(this,this.$refs.tree.getCurrentNode().plCategory,this.$refs.tree.getCurrentNode().id)},closeCreatePopover:function(){this.createDesignerVisible=!1},reload:function(){},initTreeHeight:function(){this.treeHeight=parseInt(this.$store.getters.getTopMainHeightFn)-(this.havingWritePerm?parseInt(this.headerHeight1):parseInt(this.headerHeight2))+"px"},getIsHighSecurity:function(){return this.isHighSecurity},setSecurityVisible:function(e){this.securityVisible=e},setSecurityType:function(e){this.securityType=e}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(e,t){this.initTreeHeight()},securityVisible:function(e,t){e||this.securityFileList.splice(0,this.securityFileList.length)}}},b=v,_=(i("b370"),Object(f["a"])(b,r,l,!1,null,"43d14c5c",null)),w=_.exports,x=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-container",{attrs:{id:"repositoryMainList"}},[i("el-main",{directives:[{name:"loading",rawName:"v-loading",value:e.dataLoading,expression:"dataLoading"}],style:{height:e.mainHeight},attrs:{"element-loading-text":"拼命加载中"}},[i("div",{staticStyle:{width:"100%",height:"100%",overflow:"auto",display:"inline"}},[i("div",{staticClass:"recent"},[i("el-tabs",{on:{"tab-click":e.handleRecnetOrStore},model:{value:e.activeName,callback:function(t){e.activeName=t},expression:"activeName"}},[i("el-tab-pane",{attrs:{label:"最近编辑",name:"recent"}}),i("el-tab-pane",{attrs:{label:"收藏文件",name:"store"}})],1)],1),i("div",{style:{margin:"12px 10px 10px 10px;",display:e.recentDisplay}},[i("div",[i("div",{staticStyle:{"margin-left":"10px"}},[i("el-table",{staticStyle:{width:"100%"},attrs:{data:e.recentData,"row-style":{height:"46px"},"cell-style":{padding:"0px"},"show-header":!1}},[i("el-table-column",{attrs:{width:"20px"}}),i("el-table-column",{attrs:{prop:"main",label:"名称","class-name":"row-repository-title","min-width":"300px"},scopedSlots:e._u([{key:"default",fn:function(t){return[t.row.folder?i("div",{staticClass:"icon-div-repository"},[i("i",{staticClass:"awsui-iconfont icon-dynamic-repository",style:{color:t.row.icon.color,"font-size":"32px"},domProps:{innerHTML:e._s(t.row.icon.code)}})]):i("div",{staticClass:"icon-div-repository",style:{"background-color":t.row.icon.color}},[i("i",{staticClass:"awsui-iconfont icon-dynamic-repository",domProps:{innerHTML:e._s(t.row.icon.code)}})]),i("div",{staticClass:"div-repository-title"},[i("p",{staticClass:"text-general-color",staticStyle:{cursor:"pointer"},on:{click:function(i){return e.positionRepositoy(t.row.id,t.row.versionId,t.row.pathData)}}},[e._v(" "+e._s(t.row.name)+" ")])])]}}])}),i("el-table-column",{attrs:{prop:"second",label:"修改日期",width:"350"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("div",{staticClass:"div-update-date"},[i("p",[e._v(" "+e._s(t.row.updateUser)+" 于 "+e._s(t.row.updateDate)+"修改 ")])])]}}])}),i("el-table-column",{attrs:{prop:"operate",label:"操作",align:"right",width:"100"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("div",{staticClass:"div-operate text-second-color"},[t.row.isFavorite?i("div",{staticClass:"div-cancel-favorite"},[i("el-tooltip",{attrs:{content:"取消收藏",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont",staticStyle:{cursor:"pointer",color:"#FFB800"},on:{click:function(i){return e.setFavorite("0",t.row.versionId,t.row.id)}}},[e._v("")])])],1):e._e(),t.row.isFavorite?e._e():i("div",{staticClass:"non-favorite-display div-favorite"},[i("el-tooltip",{attrs:{content:"收藏",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont icon-operate",staticStyle:{cursor:"pointer"},on:{click:function(i){return e.setFavorite("1",t.row.versionId,t.row.id)}}},[e._v("")])])],1)]),i("div",{staticClass:"div-operate text-second-color",staticStyle:{margin:"0 10px 0 15px"}},[i("div",{staticClass:"operate-icon-display"},[t.row.folder&&e.havingWritePerm?i("el-tooltip",{attrs:{placement:"bottom","hide-after":2e3}},[i("span",{attrs:{slot:"content"},slot:"content"},[e._v("修改"+e._s(t.row.methodName))]),i("i",{staticClass:"iconfont icon-operate",staticStyle:{display:"inline-block",cursor:"pointer"},on:{click:function(i){return e.openUpdateFolder(t.row.id,t.row.name,t.row.desc,t.row.methodId,t.row.methodName)}}},[e._v("")])]):e._e(),t.row.folder?e._e():i("el-tooltip",{attrs:{content:"打开模型",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont icon-operate",staticStyle:{display:"inline-block",cursor:"pointer"},on:{click:function(i){return e.openDesigner(t.row.id)}}},[e._v("")])])],1)])]}}])})],1)],1)])]),i("div",{style:{margin:"10px;","margin-top":"20px;",display:e.storeDisplay}},[i("div",[i("div",{staticStyle:{"margin-left":"10px"}},[i("el-table",{staticStyle:{width:"100%"},attrs:{data:e.commonData,"row-style":{height:"46px"},"cell-style":{padding:"0px"},"empty-text":"无收藏文件","show-header":!1}},[i("el-table-column",{attrs:{width:"20px"}}),i("el-table-column",{attrs:{prop:"main",label:"名称","class-name":"row-repository-title","min-width":"300px"},scopedSlots:e._u([{key:"default",fn:function(t){return[t.row.folder?i("div",{staticClass:"icon-div-repository"},[i("i",{staticClass:"awsui-iconfont icon-dynamic-repository",style:{color:t.row.icon.color,"font-size":"32px"},domProps:{innerHTML:e._s(t.row.icon.code)}})]):i("div",{staticClass:"icon-div-repository",style:{"background-color":t.row.icon.color}},[i("i",{staticClass:"awsui-iconfont icon-dynamic-repository",domProps:{innerHTML:e._s(t.row.icon.code)}})]),i("div",{staticClass:"div-repository-title"},[i("p",{staticClass:"text-general-color",staticStyle:{cursor:"pointer"},on:{click:function(i){return e.positionRepositoy(t.row.id,t.row.versionId,t.row.pathData)}}},[e._v(" "+e._s(t.row.name)+" ")])])]}}])}),i("el-table-column",{attrs:{prop:"second",label:"修改日期",width:"350"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("div",{staticClass:"div-update-date"},[i("p",[e._v(" "+e._s(t.row.updateUser)+" 于 "+e._s(t.row.updateDate)+"修改 ")])])]}}])}),i("el-table-column",{attrs:{prop:"operate",label:"操作",align:"right",width:"100"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("div",{staticClass:"div-operate text-second-color"},[t.row.isFavorite?i("div",{staticClass:"div-cancel-favorite"},[i("el-tooltip",{attrs:{content:"取消收藏",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont",staticStyle:{cursor:"pointer",color:"#FFB800"},on:{click:function(i){return e.setFavorite("0",t.row.versionId,t.row.id)}}},[e._v("")])])],1):e._e(),t.row.isFavorite?e._e():i("div",{staticClass:"non-favorite-display div-favorite"},[i("el-tooltip",{attrs:{content:"收藏",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont icon-operate",staticStyle:{cursor:"pointer"},on:{click:function(i){return e.setFavorite("1",t.row.versionId,t.row.id)}}},[e._v("")])])],1)]),i("div",{staticClass:"div-operate text-second-color",staticStyle:{margin:"0 10px 0 15px"}},[i("div",{staticClass:"operate-icon-display"},["default"==t.row.methodId&&e.havingWritePerm?i("el-tooltip",{attrs:{content:"修改文件夹",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont icon-operate",staticStyle:{display:"inline-block",cursor:"pointer"},on:{click:function(i){return e.openUpdateFolder(t.row.id,t.row.name,t.row.desc,t.row.methodId,t.row.methodName)}}},[e._v("")])]):e._e(),"default"!=t.row.methodId?i("el-tooltip",{attrs:{content:"打开模型",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont icon-operate",staticStyle:{display:"inline-block",cursor:"pointer"},on:{click:function(i){return e.openDesigner(t.row.id)}}},[e._v("")])]):e._e()],1)])]}}])})],1)],1)])])])]),i("el-dialog",{attrs:{title:"修改文件夹",visible:e.folderDialog.dialogVisible,"modal-append-to-body":!1,"close-on-click-modal":!1,"close-on-press-escape":!0,"before-close":e.handleCloseFolder,width:"600px"},on:{"update:visible":function(t){return e.$set(e.folderDialog,"dialogVisible",t)}}},[i("div",{staticStyle:{border:"1px solid #F2F2F2",padding:"0px 10px 10px 10px"}},[i("awsui-form",{ref:"folderForm",attrs:{model:e.folderDialog.folderForm,rules:e.folderDialog.rules,"label-position":"top"}},[i("awsui-form-item",{attrs:{label:"名称",prop:"name"}},[i("awsui-input",{model:{value:e.folderDialog.folderForm.name,callback:function(t){e.$set(e.folderDialog.folderForm,"name",t)},expression:"folderDialog.folderForm.name"}})],1),i("awsui-form-item",{attrs:{label:"描述",prop:"desc"}},[i("awsui-input",{attrs:{type:"textarea"},model:{value:e.folderDialog.folderForm.desc,callback:function(t){e.$set(e.folderDialog.folderForm,"desc",t)},expression:"folderDialog.folderForm.desc"}})],1)],1)],1),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("awsui-button",{staticClass:"button-general-color",attrs:{type:"primary"},on:{click:function(t){return e.updateFolderSave("folderForm")}}},[e._v("确定")]),i("awsui-button",{on:{click:e.closeFolderDlg}},[e._v("取消")])],1)]),i("awsui-dialog",{attrs:{title:e.customFolderDialog.title,visible:e.customFolderDialog.dialogVisible,"modal-append-to-body":!1,"close-on-click-modal":!1,"close-on-press-escape":!0,border:!1,width:"800px"},on:{"update:visible":function(t){return e.$set(e.customFolderDialog,"dialogVisible",t)}}},[i("div",[e.customFolderDialog.dialogVisible?i("repository-info-property",{attrs:{id:e.customFolderDialog.id,repositoryRefresh:e.repositoryRefresh}}):e._e()],1)])],1)},S=[],I=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-container",[i("div",{staticStyle:{height:"500px",width:"100%",overflow:"auto"},attrs:{id:"repositoryInfoProperty"}},[e._l(e.propertyData,(function(t,o){return[i("div",{staticClass:"property-group"},[i("p",{staticStyle:{"padding-left":"5px"}},[i("b",[e._v(e._s(t.groupPathName))])])]),i("div",{staticStyle:{margin:"0 50px 0 30px"}},[e._l(t.data,(function(o,a){return["string"==o.type&&"PLNAME"==o.id?[i("div",{staticClass:"property-item"},[i("label",{staticClass:"property-label"},[e._v(e._s(o.label))]),i("div",{staticClass:"property-value"},[i("el-input",{attrs:{size:e.size,disabled:o.readonly},on:{blur:function(t){return e.saveRepositoryNameVal(o.value)}},model:{value:o.value,callback:function(t){e.$set(o,"value",t)},expression:"item.value"}})],1)])]:e._e(),"string"==o.type&&"PLNAME"!=o.id?[i("div",{staticClass:"property-item"},[i("label",{staticClass:"property-label"},[e._v(e._s(o.label))]),i("div",{staticClass:"property-value"},[i("el-input",{attrs:{size:e.size,disabled:o.readonly},on:{blur:function(t){return e.saveStringPropVal(o.id,o.value,o.attrSource)}},model:{value:o.value,callback:function(t){e.$set(o,"value",t)},expression:"item.value"}})],1)])]:e._e(),"textarea"==o.type?[i("div",{staticClass:"property-item"},[i("label",{staticClass:"property-label",staticStyle:{"vertical-align":"bottom"}},[e._v(e._s(o.label))]),i("div",{staticClass:"property-value"},[i("el-input",{attrs:{size:e.size,type:"textarea",rows:2,placeholder:"请输入内容",disabled:o.readonly},on:{blur:function(t){return e.saveStringPropVal(o.id,o.value,o.attrSource)}},model:{value:o.value,callback:function(t){e.$set(o,"value",t)},expression:"item.value"}})],1)])]:e._e(),"number"==o.type?[i("div",{staticClass:"property-item"},[i("label",{staticClass:"property-label"},[e._v(e._s(o.label))]),i("div",{staticClass:"property-value"},[i("el-input-number",{staticStyle:{width:"100%",cursor:"pointer"},attrs:{size:e.size,"controls-position":"right",step:1,disabled:o.readonly},on:{change:function(t){return e.saveNumberPropVal(o.id,o.value,o.attrSource)}},model:{value:o.value,callback:function(t){e.$set(o,"value",t)},expression:"item.value"}})],1)])]:e._e(),"boolean"==o.type?[i("div",{staticClass:"property-item"},[i("label",{staticClass:"property-label"},[e._v(e._s(o.label))]),i("div",{staticClass:"property-value"},[[i("el-select",{staticStyle:{width:"100%"},attrs:{disabled:o.readonly,clearable:"",size:e.size,placeholder:"请选择"},on:{change:function(t){return e.saveSingleSelectVal(o.id,o.value,o.attrSource)}},model:{value:o.value,callback:function(t){e.$set(o,"value",t)},expression:"item.value"}},e._l(o.options,(function(e){return i("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1)]],2)])]:e._e(),"select"==o.type?[i("div",{staticClass:"property-item"},[i("label",{staticClass:"property-label"},[e._v(e._s(o.label))]),i("div",{staticClass:"property-value"},[[i("el-select",{staticStyle:{width:"100%"},attrs:{disabled:o.readonly,clearable:"",size:e.size,placeholder:"请选择"},on:{change:function(t){return e.saveSingleSelectVal(o.id,o.value,o.attrSource)}},model:{value:o.value,callback:function(t){e.$set(o,"value",t)},expression:"item.value"}},e._l(o.options,(function(e){return i("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1)]],2)])]:e._e(),"select_m"==o.type?[i("div",{staticClass:"property-item"},[i("label",{staticClass:"property-label"},[e._v(e._s(o.label))]),i("div",{staticClass:"property-value"},[[i("el-select",{staticStyle:{width:"100%"},attrs:{disabled:o.readonly,size:e.size,multiple:"",placeholder:"请选择"},on:{change:function(t){return e.saveMultipleSelectVal(o.id,o.value,o.attrSource)}},model:{value:o.value,callback:function(t){e.$set(o,"value",t)},expression:"item.value"}},e._l(o.options,(function(e){return i("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1)]],2)])]:e._e(),"deptAddress"==o.type?[i("div",{staticClass:"property-item"},[i("label",{staticClass:"property-label"},[e._v(e._s(o.label))]),i("div",{staticClass:"property-value"},[i("el-input",{attrs:{size:e.size,disabled:o.readonly,readonly:""},nativeOn:{click:function(i){return e.choiceBpmOrgAddressComponent(t.groupPath,o.type,o.id,o.readonly)}},model:{value:o.value,callback:function(t){e.$set(o,"value",t)},expression:"item.value"}})],1)])]:e._e(),"userAddress"==o.type?[i("div",{staticClass:"property-item"},[i("label",{staticClass:"property-label"},[e._v(e._s(o.label))]),i("div",{staticClass:"property-value"},[i("el-input",{attrs:{size:e.size,disabled:o.readonly,readonly:""},nativeOn:{click:function(i){return e.choiceBpmOrgAddressComponent(t.groupPath,o.type,o.id,o.readonly)}},model:{value:o.value,callback:function(t){e.$set(o,"value",t)},expression:"item.value"}})],1)])]:e._e(),"relationOrg"==o.type?[i("div",{staticClass:"property-item"},[i("label",{staticClass:"property-label"},[e._v(e._s(o.label))]),i("div",{staticClass:"property-value"},[i("el-input",{attrs:{size:e.size,disabled:o.readonly,readonly:""},model:{value:o.value,callback:function(t){e.$set(o,"value",t)},expression:"item.value"}})],1)])]:e._e(),"awsorg"==o.type?[i("div",{staticClass:"property-item"},[i("label",{staticClass:"property-label"},[e._v(e._s(o.label))]),i("div",{staticClass:"property-value"},[i("el-input",{attrs:{size:e.size,disabled:o.readonly,readonly:""},nativeOn:{click:function(t){return e.choiceAwsOrgComponent(o.ref,o.type,o.id,o.label,o.readonly)}},model:{value:o.value,callback:function(t){e.$set(o,"value",t)},expression:"item.value"}})],1)])]:e._e(),"relation"==o.type?[i("div",{staticClass:"property-item"},[i("label",{staticClass:"property-label"},[e._v(e._s(o.label))]),i("div",{staticClass:"property-value"},[i("el-input",{attrs:{size:e.size,disabled:o.readonly,readonly:""},nativeOn:{click:function(t){return e.choiceRelationComponent(o.ref,o.type,o.id,o.label,o.readonly,o.fileIds,o.shapeIds)}},model:{value:o.value,callback:function(t){e.$set(o,"value",t)},expression:"item.value"}})],1)])]:e._e()]}))],2)]}))],2),i("BPMOrgAddress",{ref:"palAwsOrgAddress",attrs:{visible:e.bpmOrgAddress.visible,addressType:e.bpmOrgAddress.addressType,multiple:"",title:e.title,multiple:e.bpmOrgAddress.multiple},on:{"update:visible":function(t){return e.$set(e.bpmOrgAddress,"visible",t)},cancel:function(t){e.bpmOrgAddress.visible=!1},getResult:e.saveBpmOrgAddressResult}}),i("pal-relation-address",{ref:"palRelationAddress",attrs:{visible:e.palRelationAddressVisible,title:e.title,selectFileId:e.relation.selectFileId,selectShapeId:e.relation.selectShapeId,relationType:e.relation.relationType,categorys:e.relation.category,methods:e.relation.method,wsId:e.relation.wsId,teamId:e.relation.teamId,multiple:e.relation.multiple},on:{"update:visible":function(t){e.palRelationAddressVisible=t},cancel:function(t){e.palRelationAddressVisible=!1},getResult:e.saveRelationResult}})],1)},C=[],D=i("4cbb");D["a"].install=function(e){e.component(D["a"].name,D["a"])};var F=D["a"],k=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-container",[i("el-dialog",{attrs:{id:"palRelationAddress",title:e.title,visible:e.dialogVisible,width:"800px","modal-append-to-body":!1,"destroy-on-close":!0,"append-to-body":!0,"close-on-click-modal":!1,"before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t}}},[[e.dialogVisible?i("div",{staticStyle:{width:"100%",height:"400px",border:"1px solid #f2f2f2"}},[i("div",{staticClass:"div-left",style:{width:"file"==e.relationType?"373px":"249px"}},[i("div",{staticStyle:{width:"100%",height:"32px"}},[i("el-autocomplete",{style:{width:"file"==e.relationType?"373px":"249px"},attrs:{size:"small","fetch-suggestions":e.treeSearch,"suffix-icon":"el-icon-search",placeholder:"快速查询","trigger-on-focus":!1},on:{select:e.treeSearchSelect},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.item;return[i("el-tooltip",{staticClass:"item",attrs:{placement:"bottom-start"}},[i("div",{attrs:{slot:"content"},slot:"content"},[e._v(e._s(o.pathName))]),i("span",[e._v(e._s(o.name))])])]}}],null,!1,3987291353),model:{value:e.treeSearchKey,callback:function(t){e.treeSearchKey=t},expression:"treeSearchKey"}})],1),i("div",[i("div",{staticStyle:{height:"368px",overflow:"auto"}},[i("div",{staticStyle:{margin:"0px"}},[i("el-tree",{ref:"tree",attrs:{"empty-text":"无数据","expand-on-click-node":!1,props:e.treeProps,"show-checkbox":"file"==e.relationType&&e.multiple,"check-strictly":!0,"highlight-current":!0,"node-key":"id",lazy:"",load:e.loadNode},on:{"node-expand":e.expandNode,"node-collapse":e.closeNode,"check-change":e.handleNodeCheckChange,"node-click":e.handleNodeClick},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.node;t.data;return i("span",{},[i("i",{staticClass:"awsui-iconfont tree-content-icon tree-content-icon-padding",style:{color:o.data.icon.color},domProps:{innerHTML:e._s(o.data.icon.icon)}}),i("span",[e._v(e._s(o.label))])])}}],null,!1,52448956)})],1)])])]),"file"!=e.relationType?i("div",{staticClass:"div-middle"},[i("div",{staticStyle:{width:"100%",height:"32px"}},[i("el-input",{attrs:{size:"small",placeholder:"快速查询","suffix-icon":"el-icon-search",width:"249px"},on:{input:e.shapeSearch},model:{value:e.shapeSearchKey,callback:function(t){e.shapeSearchKey=t},expression:"shapeSearchKey"}})],1),i("div",[i("div",{staticStyle:{height:"368px",overflow:"auto"}},[i("div",{staticStyle:{margin:"0px"}},[e.multiple?[i("el-checkbox-group",{staticStyle:{margin:"5px 0px 5px 5px"},on:{change:e.handleChangeCheckShape},model:{value:e.shapeChecked,callback:function(t){e.shapeChecked=t},expression:"shapeChecked"}},e._l(e.shapeData,(function(t){return i("el-checkbox",{key:t.id,staticClass:"checkbox-item",attrs:{label:t.id,disabled:t.isDisabled}},[e._v(e._s(t.name))])})),1)]:[i("el-radio-group",{staticStyle:{margin:"5px 0px 5px 5px"},on:{change:e.handleChangeRadioShape},model:{value:e.shapeSelected,callback:function(t){e.shapeSelected=t},expression:"shapeSelected"}},e._l(e.shapeData,(function(t){return i("el-radio",{key:t.id,staticClass:"redio-item",attrs:{label:t.id,disabled:t.isDisabled}},[e._v(e._s(t.name))])})),1)]],2)])])]):e._e(),i("div",{staticClass:"div-right",style:{width:"file"==e.relationType?"373px":"249px"}},[i("div",{staticStyle:{height:"100%"}},[[i("el-table",{staticStyle:{width:"100%"},attrs:{data:e.tableData,"show-header":!1,"empty-text":"请在左侧选择数据",size:"mini",height:"400px"}},[i("el-table-column",{attrs:{prop:"name",label:"名称"}}),i("el-table-column",{attrs:{prop:"address",label:"操作",width:"40"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("div",{staticClass:"icon-delete-display"},[i("i",{staticClass:"iconfont",staticStyle:{cursor:"pointer"},on:{click:function(i){return e.remove(t.row.id)}}},[e._v("")])])]}}],null,!1,1353718858)})],1)]],2)])]):e._e()],i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("awsui-button",{staticClass:"button-general-color",attrs:{type:"primary"},on:{click:e.submit}},[e._v("确定")]),i("awsui-button",{on:{click:e.cancel}},[e._v("取消")])],1)],2)],1)},R=[],$={name:"PalRelationAddress",props:{visible:{type:Boolean,default:!1},relationType:{type:String,default:"shape"},multiple:{type:Boolean,default:!1},title:{type:String,default:""},selectFileId:{type:String,default:""},selectShapeId:{type:String,default:""},wsId:{type:String,default:"",required:!0},teamId:{type:String,default:""},categorys:{type:String,default:""},methods:{type:String,default:""},rootId:{type:String,default:""}},data:function(){return{dialogVisible:!1,pid:"",shapeSearchKey:"",shapeChecked:[],shapeSelected:"",shapeRecords:{},treeProps:{label:"name",isLeaf:"leaf"},tableData:[],shapeData:[],shapeTempData:[],treeSearchKey:"",timeout:null,result:[]}},created:function(){},methods:{clearAllParam:function(){this.pid="",this.shapeSearchKey="",this.shapeChecked=[],this.shapeSelected="",this.shapeRecords={},this.tableData=[],this.shapeData=[],this.shapeTempData=[],this.treeSearchKey="",this.timeout=null,this.result=[]},shapeSearch:function(){if(this.shapeSearchKey&&""!=this.shapeSearchKey.trim()){for(var e=this.shapeSearchKey.trim().toLocaleLowerCase(),t=[],i=0;i<this.shapeTempData.length;i++){var o=this.shapeTempData[i];if(""!=o.name){var a=(o.name+"").toLocaleLowerCase();-1!=a.indexOf(e)&&t.push(JSON.parse(JSON.stringify(o)))}}this.shapeData=t}else this.shapeData=JSON.parse(JSON.stringify(this.shapeTempData))},treeSearchSelect:function(e){this.queryTreeByIdAndPath(e.id,e.path)},treeSearch:function(e,t){var i=this;if(void 0!=e&&""!=e.trim()){var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_repository_tree_component_search",wsId:i.wsId,teamId:i.teamId,categorys:i.categorys,rootId:i.rootId,name:e}};p["a"].post(o).then((function(e){"ok"==e.result&&e.data.length>0?(clearTimeout(i.timeout),i.timeout=setTimeout((function(){t(e.data)}),3e3*Math.random())):clearTimeout(i.timeout)})).catch((function(e){console.log(e)}))}else clearTimeout(i.timeout)},queryTreeByIdAndPath:function(e,t){for(var i=this,o=i.$refs.tree,a=t.split(","),s=1,r=0;r<a.length;r++)r>0&&null!=o.getNode(a[r-1])&&(setTimeout(i._expandNode(o,a[r-1]),300*s),s++);setTimeout((function(){null!=o.getNode(e)&&o.setCurrentKey(e)}),300*s)},_expandNode:function(e,t){return function(){e.getNode(t).expand()}},loadNode:function(e,t){var i=this,o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_repository_tree_component_subjson",wsId:i.wsId,teamId:i.teamId,categorys:i.categorys,pid:""}};0===e.level?o.data.pid=i.pid:o.data.pid=e.data.id,p["a"].post(o).then((function(o){for(var a=0;a<o.data.length;a++)o.data[a].id.length<36?o.data[a].disabled=!0:""!=i.categorys&&""!=i.methods?i.methods.indexOf(o.data[a].plMethodId)>-1?o.data[a].disabled=!1:o.data[a].disabled=!0:""!=i.categorys?i.categorys.indexOf(o.data[a].plCategory)>-1?o.data[a].disabled=!1:o.data[a].disabled=!0:i.methods.indexOf(o.data[a].plMethodId)>-1?o.data[a].disabled=!1:o.data[a].disabled=!0;if(t(o.data),i.initTreeCheck(),0==e.level&&o.data.length>0){var s=i.$refs.tree;s.getNode(o.data[0].id).expand(),setTimeout((function(){var e=s.getNode(o.data[0].id).childNodes[0];null!=e&&e.expand()}),500)}})).catch((function(e){console.log(e)}))},expandNode:function(e,t,i){},closeNode:function(e,t,i){t.childNodes=[],t.loaded=!1},initTreeCheck:function(){var e=this.relationType;if("file"==e)if(this.multiple)for(var t=this.result,i=this.$refs.tree,o=0;o<t.length;o++)null!=i.getNode(t[o].id)&&i.setChecked(t[o].id,!0);else for(var a=this.result,s=this.$refs.tree,r=0;r<a.length;r++)null!=s.getNode(a[r].id)&&s.setCurrentKey(a[r].id)},handleNodeCheckChange:function(e,t){if(t){var i=this.result;if(!this.isFileExist(i,e.id,e.versionId)){var o={};o.id=e.id,o.versionId=e.versionId,o.name=e.name,o.children=[],i.push(o),this.initTableData()}}else this.remove(e.id)},handleClose:function(e){this.closeDlalog("cancel"),e()},cancel:function(){this.closeDlalog("cancel"),this.dialogVisible=!1},submit:function(){this.closeDlalog("save"),this.dialogVisible=!1},closeDlalog:function(e){if("save"==e){var t=JSON.parse(JSON.stringify(this.result));if("file"==this.relationType)for(var i=0;i<t.length;i++)delete t[i].children;this.$emit("getResult",t)}else this.$emit("cancel");this.clearAllParam()},handleNodeClick:function(e){var t=this,i=this.relationType;if("file"==i){if(!this.multiple){if(""!=t.categorys&&""!=t.methods){if(-1==t.methods.indexOf(e.plMethodId))return void t.$message({message:"不支持关联的模型",type:"warning"})}else if(""!=t.categorys){if(-1==t.categorys.indexOf(e.plCategory))return void t.$message({message:"不支持关联的模型",type:"warning"})}else if(-1==t.methods.indexOf(e.plMethodId))return void t.$message({message:"不支持关联的模型",type:"warning"});this.result=[];var o=this.result,a={};a.id=e.id,a.versionId=e.versionId,a.name=e.name,a.children=[],o.push(a),this.initTableData()}}else{var s=this;s.shapeSearchKey="";var r={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_repository_tree_component_shapejson",id:e.id}},l=!0;l=""!=s.categorys&&""!=s.methods?!(s.methods.indexOf(e.plMethodId)>-1):""!=s.categorys?!(s.categorys.indexOf(e.plCategory)>-1):!(s.methods.indexOf(e.plMethodId)>-1),p["a"].post(r).then((function(e){if("ok"==e.result){for(var t=e.data.list,i=[],o=0;o<t.length;o++){var a={id:t[o].id,name:t[o].name,fileId:t[o].fileId,fileName:t[o].fileName,versionId:t[o].versionId,isDisabled:l};i.push(a),s.shapeRecords[t[o].id]=a}s.shapeData=i,s.shapeTempData=JSON.parse(JSON.stringify(s.shapeData))}})).catch((function(e){console.log(e)}))}},initTableData:function(){var e=this.relationType;if("file"==e){for(var t=this.result,i=[],o=0;o<t.length;o++){var a={id:t[o].id,name:t[o].name,versionId:t[o].versionId};i.push(a)}this.tableData=i}else{for(var s=this.result,r=[],l=0;l<s.length;l++)for(var n=s[l],c=n.children,d=0;d<c.length;d++){var p=c[d],u={id:p.shapeId,name:p.name,fileId:n.id,fileName:n.name,versionId:n.versionId};r.push(u)}this.tableData=r}},isFileExist:function(e,t,i){for(var o=0;o<e.length;o++){var a=e[o];if(a.versionId==i)return!0}return!1},remove:function(e){var t=this.relationType;if("file"==t)for(var i=this.result,o=0;o<i.length;o++){var a=i[o];if(a.id==e){i.splice(o,1),this.multiple?this.$refs.tree.setChecked(e,!1):this.$refs.tree.setCurrentKey(null);break}}else if(this.multiple){var s=this.shapeRecords[e];if(s)for(var r=this.result,l=(s.id,s.name,s.fileId),n=(s.fileName,s.versionId,0);n<r.length;n++){var c=r[n];if(c.id==l){for(var d=c.children,p=0;p<d.length;p++)if(d[p].shapeId==e){d.splice(p,1);break}if(0==d.length){r.splice(n,1);break}}}for(var u=0;u<this.shapeChecked.length;u++)if(this.shapeChecked[u]==e){this.shapeChecked.splice(u,1);break}}else this.result=[],this.shapeSelected="";this.initTableData()},handleChangeRadioShape:function(e){var t=this.shapeRecords[e];if(t){var i=t.id,o=t.name,a=t.fileId,s=t.fileName,r=t.versionId;this.result=[];var l=this.result,n={};n.id=a,n.versionId=r,n.name=s,n.children=[];var c={shapeId:i,name:o};n.children.push(c),l.push(n),this.initTableData()}},handleChangeCheckShape:function(e){this.result=[];for(var t=this.result,i=0;i<e.length;i++){var o=e[i],a=this.shapeRecords[o];if(a){for(var s=a.id,r=a.name,l=a.fileId,n=a.fileName,c=a.versionId,d=!1,p=0;p<t.length;p++){var u=t[p];if(u.id==l){d=!0;var h={shapeId:s,name:r};u.children.push(h)}}if(!d){var f={};f.id=l,f.versionId=c,f.name=n,f.children=[];var g={shapeId:s,name:r};f.children.push(g),t.push(f)}}}this.initTableData()},initData:function(){var e=this;if("file"==e.relationType){if(""!=e.selectFileId){var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_repository_tree_component_file_query",versionIds:e.selectFileId}};p["a"].post(t).then((function(t){if("ok"==t.result){for(var i=[],o=0;o<t.data.length;o++){var a=t.data[o],s={};s.id=a.id,s.versionId=a.versionId,s.name=a.name,s.children=[],i.push(s)}e.result=i,e.initTableData()}})).catch((function(e){console.log(e)}))}}else if(""!=e.selectFileId&&""!=e.selectShapeId){var i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_repository_tree_component_file_shape_query",fileIds:e.selectFileId,shapeIds:e.selectShapeId}};p["a"].post(i).then((function(t){if("ok"==t.result&&t.data.data.length>0){if(e.shapeRecords=t.data.shapes,e.multiple){e.result=t.data.data;for(var i=0;i<e.result.length;i++)for(var o=e.result[i].children,a=0;a<o.length;a++)e.shapeChecked.push(o[a].shapeId)}else{e.result=t.data.data;for(var s=0;s<e.result.length;s++)for(var r=e.result[s].children,l=0;l<r.length;l++)e.shapeSelected=r[l].shapeId}e.initTableData()}})).catch((function(e){console.log(e)}))}}},watch:{visible:function(e){this.dialogVisible=e,e&&(this.clearAllParam(),this.pid=this.rootId,this.initData())}}},T=$,N=(i("6b75"),Object(f["a"])(T,k,R,!1,null,"293ab4dc",null)),P=N.exports;P.install=function(e){e.component(P.name,P)};var L=P,O={name:"RepositoryInfoProperty",components:{BPMOrgAddress:F,PalRelationAddress:L},props:{id:{type:String,default:""},versionId:{type:String,default:""},repositoryRefresh:{type:Function,default:null}},data:function(){return{bpmOrgAddress:{visible:!1,addressType:"user",multiple:!1},palRelationAddressVisible:!1,title:"",relation:{selectFileId:"",selectShapeId:"",relationType:"shape",category:"",method:"",wsId:this.$store.getters.getWsIdFn,teamId:this.$store.getters.getTeamIdFn,multiple:!1},propertyData:[{groupPath:"basic",groupPathName:"基本属性",data:[]}],size:"medium",currPropertyId:"",currPropertyType:"",currGroup:"",currCategory:"",currMethod:"",currRelationType:"",currPropSource:""}},created:function(){this.initData()},methods:{initData:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_property_data_query",id:e.id,wsId:e.$store.getters.getWsIdFn,teamId:e.$store.getters.getTeamIdFn}};p["a"].post(t).then((function(t){"ok"==t.result?e.propertyData=t.data.propertyData:e.$message.error(t.msg)})).catch((function(e){console.log(e)}))},saveStringPropVal:function(e,t,i){void 0==t&&(t=""),i&&"default"==i?this.saveDefaultpropToDb(e,t):this.saveCustomPropToDb(e,t)},saveNumberPropVal:function(e,t,i){void 0==t&&(t=""),i&&"default"==i?this.saveDefaultpropToDb(e,t):this.saveCustomPropToDb(e,t)},saveSingleSelectVal:function(e,t,i){void 0==t&&(t=""),i&&"default"==i?this.saveDefaultpropToDb(e,t):this.saveCustomPropToDb(e,t)},saveMultipleSelectVal:function(e,t,i){t=t.join(","),i&&"default"==i?this.saveDefaultpropToDb(e,t):this.saveCustomPropToDb(e,t)},saveDefaultpropToDb:function(e,t){var i=this,o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_default_attr_content_save",uuid:i.id,josnKey:e,josnContent:t}};p["a"].post(o).then((function(e){"ok"==e.result?i.initData():i.$message.error(e.msg)})).catch((function(e){console.log(e)}))},saveCustomPropToDb:function(e,t){var i=this,o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_more_attr_content_save",uuid:i.id,josnKey:e,josnContent:t}};p["a"].post(o).then((function(e){"ok"==e.result?i.initData():i.$message.error(e.msg)})).catch((function(e){console.log(e)}))},choiceRelationComponent:function(e,t,i,o,a,s,r){if(!a){this.currPropertyId=i,this.currPropertyType=t;var l=e.method;l.indexOf(".")>-1?(this.currCategory=l.substring(0,l.indexOf(".")),this.currMethod=l):(this.currCategory=l,this.currMethod=""),this.currPropSource="custom",this.relation.multiple=!0,this.currRelationType=e.type,this.title=o,this.relation.selectFileId=s,this.relation.selectShapeId=r,this.relation.relationType=e.type,this.relation.category=this.currCategory,this.relation.method=this.currMethod,this.relation.multiple=e.multiple,this.palRelationAddressVisible=!0}},choiceBpmOrgAddressComponent:function(e,t,i,o){o||(this.currPropertyId=i,this.currPropertyType=t,"deptAddress"==t?(this.title="责任部门",this.bpmOrgAddress.addressType="dept",this.bpmOrgAddress.visible=!0):"userAddress"==t&&(this.title="责任人",this.bpmOrgAddress.addressType="user",this.bpmOrgAddress.visible=!0))},choiceAwsOrgComponent:function(e,t,i,o,a){a||(this.currPropertyId=i,this.currPropertyType=t,this.title=o,this.bpmOrgAddress.addressType=e.scope.join(","),this.bpmOrgAddress.multiple=e.multiple,this.bpmOrgAddress.visible=!0)},saveBpmOrgAddressResult:function(e){this.bpmOrgAddress.visible=!1;for(var t=[],i=0;i<e.length;i++)t.push({name:e[i].name,id:e[i].id,type:e[i].type});this.saveCustomPropToDb(this.currPropertyId,JSON.stringify(t))},saveRelationResult:function(e){var t={fileId:this.id,shapeId:"",shapeText:"",attrId:this.currPropertyId,relationFileId:"",relationShapeId:"",relationShapeText:"",groupPath:this.currGroup},i=this.currRelationType;if("file"==i){for(var o=[],a=0;a<e.length;a++)o.push(e[a].versionId);t.relationFileId=o.join(",")}else{for(var s=[],r=[],l=[],n=0;n<e.length;n++)for(var c=e[n],d=c.children,p=0;p<d.length;p++){var u=d[p];s.push(c.id),r.push(u.shapeId),l.push(u.name)}t.relationFileId=s.join(","),t.relationShapeId=r.join(","),t.relationShapeText=l.join(",")}"default"==this.currPropSource?this.saveDefaultpropToDb(this.currPropertyId,JSON.stringify(t)):this.saveCustomPropToDb(this.currPropertyId,JSON.stringify(t)),this.palRelationAddressVisible=!1},saveRepositoryNameVal:function(e){var t=this,i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_repository_designer_updatetitle",uuid:t.id,title:e}};p["a"].post(i).then((function(e){"ok"==e.result?(t.initData(),t.repositoryRefresh&&t.id&&t.repositoryRefresh(t.id)):t.$message.error(e.msg)})).catch((function(e){console.log(e)}))}}},V=O,j=(i("caf8"),Object(f["a"])(V,I,C,!1,null,"3bafef1f",null)),M=j.exports,A={name:"RepositoryMainList",components:{RepositoryInfoProperty:M},props:{refreshTreeParentNode:{type:Function,default:null}},data:function(){return{mainHeight:parseInt(this.$store.getters.getTopMainHeightFn)+"px",dataLoading:!1,defaultCategoryName:"",recentData:[],commonData:[],havingWritePerm:!1,folderDialog:{dialogVisible:!1,folderForm:{id:"",name:"",desc:""},rules:{name:[{required:!0,message:"请输入名称",trigger:"blur"},{min:1,max:120,message:"长度在 1 到 120 个字符",trigger:"blur"}]}},customFolderDialog:{dialogVisible:!1,title:"",id:""},activeName:"recent",recentDisplay:"block",storeDisplay:"none"}},created:function(){this.initData()},methods:{handleRecnetOrStore:function(e,t){this.switchTabCard(e.name)},switchTabCard:function(e){"recent"==e?(this.recentDisplay="block",this.storeDisplay="none"):"store"==e&&(this.recentDisplay="none",this.storeDisplay="block")},handleCloseFolder:function(e){this.folderDialog.dialogVisible=!1,e()},openUpdateFolder:function(e,t,i,o,a){"default"==o?(this.folderDialog.folderForm.name=t,this.folderDialog.folderForm.desc=i,this.folderDialog.folderForm.id=e,this.folderDialog.dialogVisible=!0):(this.customFolderDialog.id=e,this.customFolderDialog.title="修改"+a,this.customFolderDialog.dialogVisible=!0)},closeFolderDlg:function(){this.folderDialog.dialogVisible=!1,this.folderDialog.folderForm.name="",this.folderDialog.folderForm.desc="",this.folderDialog.folderForm.id=""},updateFolderSave:function(e){var t=this;t.$refs[e].validate((function(e){if(!e)return console.log("error submit!!"),!1;var i=t.folderDialog.folderForm.name,o=t.folderDialog.folderForm.desc;if(o.length>255)t.$message({message:"[描述]不允许超过255个字符",type:"warning"});else{var a=t.folderDialog.folderForm.id,s=t.$store.getters.getWsIdFn,r=t.$store.getters.getTeamIdFn,l="default",n={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_folder_create_save",wsId:s,teamId:r,method:l,name:i,desc:o,id:a}};p["a"].post(n).then((function(e){"ok"==e.result&&(t.initData(),t.refreshTreeParentNode&&t.refreshTreeParentNode(a),t.closeFolderDlg())})).catch((function(e){console.log(e)}))}}))},initData:function(){var e=this;e.dataLoading=!0;var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_recent_and_favorite_data_query",wsId:e.$store.getters.getWsIdFn,teamId:e.$store.getters.getTeamIdFn}};p["a"].post(t).then((function(t){"ok"==t.result&&(e.defaultCategoryName=t.data.defaultCategoryName,e.recentData=t.data.recentData,e.commonData=t.data.commonData,e.havingWritePerm=t.data.havingWritePerm,e.dataLoading=!1)})).catch((function(t){console.log(t),e.dataLoading=!1}))},openDesigner:function(e){Object(y["d"])(this.$store.getters.getTeamIdFn,e,this.$store.state.sessionId)},setFavorite:function(e,t,i){if("0"==e){var o=this,a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_favorite_cancel",wsId:o.$store.getters.getWsIdFn,teamId:o.$store.getters.getTeamIdFn,versionId:t}};p["a"].post(a).then((function(e){"ok"==e.result&&o.initData()})).catch((function(e){console.log(e)}))}else{var s=this,r={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_favorite_save",wsId:s.$store.getters.getWsIdFn,teamId:s.$store.getters.getTeamIdFn,versionId:t}};p["a"].post(r).then((function(e){"ok"==e.result&&s.initData()})).catch((function(e){console.log(e)}))}},repositoryRefresh:function(e){this.refreshTreeParentNode&&this.refreshTreeParentNode(e),this.initData()},positionRepositoy:function(e,t,i){for(var o=[],a=0;a<i.length;a++){var s=i[a].versionId;o.push(s)}this.$router.push({path:"/Repository",query:{id:e,versionId:t,path:o.join(","),param:Math.random()}})}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(e,t){this.mainHeight=parseInt(e)+"px"}}},H=A,z=(i("ea48"),Object(f["a"])(H,x,S,!1,null,"70fd2b78",null)),B=z.exports,U=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-container",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}]},[i("el-container",{attrs:{id:"repositoryList"}},[i("el-main",{style:{height:e.mainHeight}},[i("div",{staticStyle:{width:"100%",height:"100%",overflow:"auto",display:"inline"}},[i("div",{staticStyle:{margin:"12px 10px 10px 10px"}},[i("div",{staticStyle:{"margin-bottom":"10px","margin-left":"10px"}},[i("div",{staticStyle:{"min-width":"50%",display:"inline-block","text-overflow":"ellipsis","white-space":"nowrap",overflow:"hidden"}},[e._l(e.repositoryPathData,(function(t,o){return[o!=e.repositoryPathData.length-1?i("label",{staticStyle:{"font-size":"14px",color:"#6F91B9"}},[i("span",{staticClass:"repository-path-title",staticStyle:{cursor:"pointer"},on:{click:function(i){return e.positionRepositoryPath(t.id,t.versionId)}}},[e._v(e._s(t.name))]),i("i",{staticClass:"awsui-iconfont"},[e._v("  ")])]):e._e(),o==e.repositoryPathData.length-1?i("label",{staticStyle:{"font-size":"14px",color:"#384148"}},[i("span",{staticClass:"cur-title"},[i("span",{on:{click:e.initData}},[e._v(e._s(t.name))]),void 0!=e.mainRepository?i("div",{staticClass:"cur-title-operate",staticStyle:{width:"16px","margin-left":"10px"}},[i("div",{staticClass:"operate-icon-display"},[i("el-dropdown",{attrs:{"hide-on-click":!0,trigger:"click",placement:"bottom-end"}},[i("span",{staticClass:"el-dropdown-link"},[i("i",{staticClass:"iconfont icon-operate",staticStyle:{cursor:"pointer"}},[e._v("")])]),i("el-dropdown-menu",{staticStyle:{"min-width":"200px"},attrs:{slot:"dropdown"},slot:"dropdown"},[e.mainRepository.folder&&e.havingWritePerm?i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(t){return e.openUpdateFolder(e.mainRepository.id,e.mainRepository.name,e.mainRepository.desc,e.mainRepository.methodId,e.mainRepository.methodName)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}}),i("span",{staticStyle:{"font-size":"12px"}},[e._v("修改"+e._s(e.mainRepository.methodName))])])]):e._e(),e.mainRepository.folder?e._e():i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(t){return e.openDesigner(e.mainRepository.id)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}}),i("span",{staticStyle:{"font-size":"12px"}},[e._v("打开模型")])])]),"default"==e.mainRepository.methodId&&e.havingWritePerm||"default"!=e.mainRepository.methodId?i("el-dropdown-item",{attrs:{divided:""}}):e._e(),e.mainRepository.isFavorite?i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(t){return e.setFavorite("0",e.mainRepository.versionId,e.mainRepository.id)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}},[i("i",{staticClass:"iconfont",staticStyle:{"font-size":"12px",color:"#FFB800"}},[e._v("")])]),i("span",{staticStyle:{"font-size":"12px"}},[e._v("取消收藏")])])]):i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(t){return e.setFavorite("1",e.mainRepository.versionId,e.mainRepository.id)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}},[i("i",{staticClass:"iconfont",staticStyle:{"font-size":"12px"}},[e._v("")])]),i("span",{staticStyle:{"font-size":"12px"}},[e._v("收藏")])])]),e.havingWritePerm?i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(t){return e.moveFile(e.mainRepository.id)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}}),i("span",{staticStyle:{"font-size":"12px"}},[e._v("移动至")])])]):e._e(),e.havingWritePerm?i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(t){return e.copyFiles(e.mainRepository.id)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}}),i("span",{staticStyle:{"font-size":"12px"}},[e._v("创建副本")])])]):e._e(),i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(t){return e.exportFiles(e.mainRepository.id)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}}),i("span",{staticStyle:{"font-size":"12px"}},[e._v("导出")])])]),e.havingRemovePerm?i("el-dropdown-item",{staticStyle:{height:"30px","line-height":"30px"},attrs:{divided:""},nativeOn:{click:function(t){return e.removeFiles(e.mainRepository.id)}}},[i("div",{staticClass:"text-important-color",staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}},[i("i",{staticClass:"iconfont icon-lajitong1",staticStyle:{"font-size":"12px"}})]),i("span",{staticStyle:{"font-size":"12px"}},[e._v("删除模型")])])]):e._e()],1)],1)],1)]):e._e()])]):e._e()]}))],2),e.batchAppVisible&&"process"==e.uuid?i("div",{staticStyle:{float:"right",position:"relative",right:"10px",display:"inline-block"}},[null!=e.$store.getters.getTeamIdFn?i("awsui-button",{staticClass:"button-general-color-reverse",staticStyle:{width:"100px",margin:"0","border-bottom-right-radius":"0px","border-top-right-radius":"0px"},attrs:{id:"batchCreateButton","visit-type":""},on:{click:e.batchCreateFn}},[e._v("批量创建")]):e._e(),i("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"100px",margin:"0","border-bottom-left-radius":"0px","border-top-left-radius":"0px"},attrs:{id:"batchReplaceButton",type:"primary"},on:{click:e.batchReplaceFn}},[e._v("批量替换")])],1):e._e()]),i("div",[i("div",{ref:"repositorysDiv",staticStyle:{"margin-left":"10px","margin-right":"10px"}},[i("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.tableLoading,expression:"tableLoading"}],ref:"table",staticStyle:{width:"100%"},attrs:{"row-style":{height:"46px"},"cell-style":{padding:"0px"},"element-loading-text":"拼命加载中",data:e.tableData,"show-header":!1,"highlight-current-row":"","cell-class-name":e.hideCheckBoxCell},on:{"cell-mouse-enter":e.showCheckbox,"cell-mouse-leave":e.hideCheckbox,"row-click":e.clickTableRow,"selection-change":e.handlecheckedRepositorysChange}},[i("el-table-column",{attrs:{"class-name":"rowDropFilter el-table-column--selection",type:"selection",width:"40",align:"left"}}),i("el-table-column",{attrs:{prop:"main",label:"名称","class-name":"row-repository-title","min-width":"250px"},scopedSlots:e._u([{key:"default",fn:function(t){return[t.row.folder?i("div",{staticClass:"icon-div-repository rowDropFilter"},[i("i",{staticClass:"awsui-iconfont icon-dynamic-repository",style:{color:t.row.icon.color,"font-size":"32px"},domProps:{innerHTML:e._s(t.row.icon.code)}})]):i("div",{staticClass:"icon-div-repository rowDropFilter",style:{"background-color":t.row.icon.color}},[i("i",{staticClass:"awsui-iconfont icon-dynamic-repository",domProps:{innerHTML:e._s(t.row.icon.code)}})]),i("div",{staticClass:"div-repository-title rowDropFilter"},[i("p",{staticClass:"text-general-color",staticStyle:{cursor:"pointer"},on:{click:function(i){return e.positionTableRoleRepository(t.row.id,t.row.versionId,t.row.childSize,t.row.folder)}}},[e._v(" "+e._s(t.row.name)+" ")])])]}}])}),i("el-table-column",{attrs:{prop:"second",label:"修改日期",width:"300"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("div",{staticClass:"div-update-date"},[i("p",[e._v(" "+e._s(t.row.updateUser)+" 于 "+e._s(t.row.updateDate)+"修改 ")])])]}}])}),i("el-table-column",{attrs:{"class-name":"rowDropFilter",prop:"operate",label:"操作",align:"right",width:"135"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("div",{staticStyle:{width:"16px",display:"inline-block"}},[i("div",{staticClass:"operate-icon-display"},[t.row.folder&&e.havingWritePerm?i("el-tooltip",{attrs:{placement:"bottom","hide-after":2e3}},[i("span",{attrs:{slot:"content"},slot:"content"},[e._v("修改"+e._s(t.row.methodName))]),i("i",{staticClass:"iconfont icon-operate",staticStyle:{display:"inline-block",cursor:"pointer"},on:{click:function(i){return e.openUpdateFolder(t.row.id,t.row.name,t.row.desc,t.row.methodId,t.row.methodName)}}},[e._v("")])]):e._e(),t.row.folder?e._e():i("el-tooltip",{attrs:{content:"打开模型",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont icon-operate",staticStyle:{display:"inline-block",cursor:"pointer"},on:{click:function(i){return e.openDesigner(t.row.id)}}},[e._v("")])])],1)]),i("div",{staticStyle:{width:"16px",margin:"0 15px",display:"inline-block"}},[t.row.isFavorite?i("div",{staticStyle:{display:"inline-block"}},[i("el-tooltip",{attrs:{content:"取消收藏",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont",staticStyle:{cursor:"pointer",color:"#FFB800"},on:{click:function(i){return e.setFavorite("0",t.row.versionId,t.row.id)}}},[e._v("")])])],1):e._e(),t.row.isFavorite?e._e():i("div",{staticClass:"non-favorite-display"},[i("el-tooltip",{attrs:{content:"收藏",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont icon-operate",staticStyle:{cursor:"pointer"},on:{click:function(i){return e.setFavorite("1",t.row.versionId,t.row.id)}}},[e._v("")])])],1)]),i("div",{staticStyle:{width:"16px",display:"inline-block","margin-right":"5px"}},[i("div",{staticClass:"operate-icon-display"},[i("el-dropdown",{attrs:{"hide-on-click":!0,trigger:"click",placement:"bottom-end"}},[i("span",{staticClass:"el-dropdown-link"},[i("i",{staticClass:"iconfont icon-operate",staticStyle:{cursor:"pointer"}},[e._v("")])]),i("el-dropdown-menu",{staticStyle:{"min-width":"200px"},attrs:{slot:"dropdown"},slot:"dropdown"},[t.row.folder&&e.havingWritePerm?i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(i){return e.openUpdateFolder(t.row.id,t.row.name,t.row.desc,t.row.methodId,t.row.methodName)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}}),i("span",{staticStyle:{"font-size":"12px"}},[e._v("修改"+e._s(t.row.methodName))])])]):e._e(),t.row.folder?e._e():i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(i){return e.openDesigner(t.row.id)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}}),i("span",{staticStyle:{"font-size":"12px"}},[e._v("打开模型")])])]),"default"==t.row.methodId&&e.havingWritePerm||"default"!=t.row.methodId?i("el-dropdown-item",{attrs:{divided:""}}):e._e(),t.row.isFavorite?i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(i){return e.setFavorite("0",t.row.versionId,t.row.id)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}},[i("i",{staticClass:"iconfont",staticStyle:{"font-size":"12px",color:"#FFB800"}},[e._v("")])]),i("span",{staticStyle:{"font-size":"12px"}},[e._v("取消收藏")])])]):i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(i){return e.setFavorite("1",t.row.versionId,t.row.id)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}},[i("i",{staticClass:"iconfont",staticStyle:{"font-size":"12px"}},[e._v("")])]),i("span",{staticStyle:{"font-size":"12px"}},[e._v("收藏")])])]),e.havingWritePerm?i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(i){return e.moveFile(t.row.id)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}}),i("span",{staticStyle:{"font-size":"12px"}},[e._v("移动至")])])]):e._e(),e.havingWritePerm?i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(i){return e.copyFiles(t.row.id)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}}),i("span",{staticStyle:{"font-size":"12px"}},[e._v("创建副本")])])]):e._e(),i("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(i){return e.exportFiles(t.row.id)}}},[i("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}}),i("span",{staticStyle:{"font-size":"12px"}},[e._v("导出")])])]),e.havingRemovePerm?i("el-dropdown-item",{staticStyle:{height:"30px","line-height":"30px"},attrs:{divided:""},nativeOn:{click:function(i){return e.removeFiles(t.row.id)}}},[i("div",{staticClass:"text-important-color",staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[i("span",{staticStyle:{display:"inline-block",width:"20px"}},[i("i",{staticClass:"iconfont icon-lajitong1",staticStyle:{"font-size":"12px"}})]),i("span",{staticStyle:{"font-size":"12px"}},[e._v("删除模型")])])]):e._e()],1)],1)],1)])]}}])})],1)],1)])])])]),e.isShow?i("el-aside",{style:{height:parseInt(e.mainHeight)-5+"px","background-color":"#FAFAFB",position:"relative",top:"5px"},attrs:{width:"280px"}},[i("div",{staticStyle:{"border-left":"1px solid #f2f2f2",width:"270px",height:"100%"}},[i("div",[i("div",{staticStyle:{width:"240px","min-height":"47px","margin-left":"15px","margin-right":"15px"}},[i("div",{staticStyle:{position:"relative","padding-top":"12px"}},[e.currRepositoryDetail.folder?i("div",{staticClass:"icon-div-repository-detail"},[i("i",{staticClass:"awsui-iconfont icon-repository-detail",style:{color:e.currRepositoryDetail.iconColor,"font-size":"32px"},domProps:{innerHTML:e._s(e.currRepositoryDetail.iconCode)}})]):i("div",{staticClass:"icon-div-repository-detail",style:{"background-color":e.currRepositoryDetail.iconColor}},[i("i",{staticClass:"awsui-iconfont icon-repository-detail",domProps:{innerHTML:e._s(e.currRepositoryDetail.iconCode)}})]),i("div",{staticClass:"icon-repository-detail-title"},[i("span",{staticClass:"text-general-color"},[e._v(" "+e._s(e.currRepositoryDetail.name)+" ")]),i("span",{staticClass:"text-second-color",staticStyle:{display:"inline-block","font-size":"12px","-webkit-transform":"scale(0.9)"}},[e._v("(v"+e._s(e.currRepositoryDetail.version)+")")])])])]),i("div",{staticStyle:{height:"140px",margin:"15px",position:"relative",overflow:"hidden"}},["image"==e.currRepositoryDetail.photoType?i("img",{staticStyle:{"border-radius":"4px",border:"1px solid #F2F2F2",width:"238px"},attrs:{src:e.currRepositoryDetail.photo,height:"138px;"}}):e._e(),"icon"==e.currRepositoryDetail.photoType?i("div",{staticStyle:{"background-color":"#fff","border-radius":"4px",border:"1px solid #F2F2F2",width:"238px",height:"138px","text-align":"center","line-height":"138px","vertical-align":"middle"}},[i("i",{staticClass:"awsui-iconfont text-second-color",style:{color:e.currRepositoryDetail.folder?e.currRepositoryDetail.iconColor:"#909399","font-size":"60px"},domProps:{innerHTML:e._s(e.currRepositoryDetail.photo)}})]):e._e(),i("div",{staticClass:"repository-img-halve",style:{background:e.currRepositoryDetail.stateColor}},[i("span",[e._v(e._s(e.currRepositoryDetail.state))])])])]),i("div",[i("ul",[e.currRepositoryDetail.folder&&e.havingWritePerm?i("li",{staticClass:"general-bgcolor-text-hover text-general-color aside-repository-operate-li",on:{click:function(t){return e.openUpdateFolder(e.currRepositoryDetail.id,e.currRepositoryDetail.name,e.currRepositoryDetail.desc,e.currRepositoryDetail.methodId,e.currRepositoryDetail.methodName)}}},[i("i",{staticClass:"iconfont icon-bianji5 aside-repository-operate-li-icon"}),i("span",[e._v("修改"+e._s(e.currRepositoryDetail.methodName))])]):e._e(),e.currRepositoryDetail.folder?e._e():i("li",{staticClass:"general-bgcolor-text-hover text-general-color aside-repository-operate-li",on:{click:function(t){return e.openDesigner(e.currRepositoryDetail.id)}}},[i("i",{staticClass:"iconfont icon-bianji5  aside-repository-operate-li-icon"}),i("span",[e._v("打开文件")])]),e.currRepositoryDetail.folder?e._e():i("li",{staticClass:"general-bgcolor-text-hover text-general-color aside-repository-operate-li",on:{click:function(t){return e.openRepositoryInfo("property")}}},[i("i",{staticClass:"iconfont icon-21file aside-repository-operate-li-icon"}),i("span",[e._v("文件属性")])]),e.currRepositoryDetail.folder?e._e():i("li",{staticClass:"general-bgcolor-text-hover text-general-color aside-repository-operate-li",on:{click:function(t){return e.openRepositoryInfo("version")}}},[i("i",{staticClass:"iconfont icon-jurassic_version aside-repository-operate-li-icon"}),i("span",[e._v("版本管理")])]),i("li",{staticClass:"general-bgcolor-text-hover text-general-color aside-repository-operate-li",on:{click:function(t){return e.openRepositoryInfo("upfile")}}},[i("i",{staticClass:"iconfont icon-wendangfujian aside-repository-operate-li-icon"}),i("span",[e._v("附件管理")])]),e.outputPrInstall&&e.onlineDocInstall&&"process"==e.category&&!e.currRepositoryDetail.folder&&"process.evc"!=e.currRepositoryDetail.methodId?i("li",{staticClass:"general-bgcolor-text-hover text-general-color aside-repository-operate-li",on:{click:function(t){return e.createOutputPr(e.currRepositoryDetail.id)}}},[i("i",{staticClass:"iconfont icon-ziliaoshouce-xianxing aside-repository-operate-li-icon"}),i("span",[e._v("流程手册")])]):e._e(),"process"==e.category&&!e.currRepositoryDetail.folder&&e.processLinkInstall?i("li",{staticClass:"general-bgcolor-text-hover text-general-color aside-repository-operate-li",on:{click:function(t){return e.eteCascadeAnalysis(e.currRepositoryDetail.id)}}},[i("i",{staticClass:"iconfont icon-liuchengguanli- aside-repository-operate-li-icon"}),i("span",[e._v("串联分析")])]):e._e(),e.currRepositoryDetail.folder?e._e():i("li",{staticClass:"general-bgcolor-text-hover text-general-color aside-repository-operate-li",on:{click:function(t){return e.downloadPng(e.currRepositoryDetail.id)}}},[i("i",{staticClass:"iconfont icon-tupian aside-repository-operate-li-icon"}),i("span",[e._v("下载图片")])]),e.currRepositoryDetail.folder?i("li",{staticClass:"general-bgcolor-text-hover text-general-color aside-repository-operate-li",on:{click:function(t){return e.exportFiles(e.currRepositoryDetail.id)}}},[i("i",{staticClass:"iconfont icon-daochu aside-repository-operate-li-icon"}),i("span",[e._v("导出"+e._s(e.currRepositoryDetail.methodName))])]):i("li",{staticClass:"general-bgcolor-text-hover text-general-color aside-repository-operate-li",on:{click:function(t){return e.exportFiles(e.currRepositoryDetail.id)}}},[i("i",{staticClass:"iconfont icon-daochu aside-repository-operate-li-icon"}),i("span",[e._v("导出文件")])]),e.havingRemovePerm?[e.currRepositoryDetail.folder?i("li",{staticClass:"general-bgcolor-text-hover text-general-color aside-repository-operate-li",on:{click:function(t){return e.removeFiles(e.currRepositoryDetail.id)}}},[i("i",{staticClass:"iconfont icon-lajitong1 aside-repository-operate-li-icon"}),i("span",[e._v("删除"+e._s(e.currRepositoryDetail.methodName))])]):i("li",{staticClass:"general-bgcolor-text-hover text-general-color aside-repository-operate-li",on:{click:function(t){return e.removeFiles(e.currRepositoryDetail.id)}}},[i("i",{staticClass:"iconfont icon-lajitong1 aside-repository-operate-li-icon"}),i("span",[e._v("删除文件")])])]:e._e()],2)])])]):e._e()],1),i("el-footer",{directives:[{name:"show",rawName:"v-show",value:e.showFooter,expression:"showFooter"}],key:"operateFooter",staticStyle:{height:"45px",padding:"0"},attrs:{id:"operateFooter"}},[i("div",{staticStyle:{"border-top":"1px solid #F2F2F2",height:"44px"}},[i("div",{staticStyle:{padding:"8px 8px 8px 34px"}},[i("el-checkbox",{attrs:{indeterminate:e.isIndeterminate},on:{change:e.handleCheckAllChange},model:{value:e.checkAll,callback:function(t){e.checkAll=t},expression:"checkAll"}}),e.havingWritePerm?i("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"100px","margin-left":"15px"},attrs:{type:"primary"},on:{click:e.moveFiles}},[e._v("移动至")]):e._e(),e.havingWritePerm?i("awsui-button",{staticClass:"button-general-color-reverse",staticStyle:{width:"100px"},attrs:{plain:""},on:{click:function(t){return e.copyFiles()}}},[e._v("创建副本")]):e._e(),i("awsui-button",{staticClass:"button-general-color-reverse",staticStyle:{width:"100px"},attrs:{plain:""},on:{click:function(t){return e.exportFiles()}}},[e._v("导出")]),e.havingRemovePerm?i("awsui-button",{staticClass:"button-general-color-reverse2",staticStyle:{width:"100px"},attrs:{plain:""},on:{click:function(t){return e.removeFiles()}}},[e._v("删除")]):e._e(),i("awsui-button",{staticClass:"button-general-color-reverse3",staticStyle:{width:"100px"},attrs:{plain:""},on:{click:e.closeFooter}},[e._v("取消")])],1)])]),i("el-container",[i("RepositoryInfo",{ref:"repositoryInfo"})],1),i("el-container",{attrs:{id:"repositoryListFolderDlg"}},[i("el-dialog",{attrs:{title:"修改文件夹",visible:e.folderDialog.dialogVisible,"modal-append-to-body":!1,"close-on-click-modal":!1,"close-on-press-escape":!0,"before-close":e.handleCloseFolder,width:"600px"},on:{"update:visible":function(t){return e.$set(e.folderDialog,"dialogVisible",t)}}},[i("div",{staticStyle:{border:"1px solid #F2F2F2",padding:"0px 10px 10px 10px"}},[i("awsui-form",{ref:"folderForm",attrs:{model:e.folderDialog.folderForm,rules:e.folderDialog.rules,"label-position":"top"}},[i("awsui-form-item",{attrs:{label:"名称",prop:"name"}},[i("awsui-input",{model:{value:e.folderDialog.folderForm.name,callback:function(t){e.$set(e.folderDialog.folderForm,"name",t)},expression:"folderDialog.folderForm.name"}})],1),i("awsui-form-item",{attrs:{label:"描述",prop:"desc"}},[i("awsui-input",{attrs:{type:"textarea"},model:{value:e.folderDialog.folderForm.desc,callback:function(t){e.$set(e.folderDialog.folderForm,"desc",t)},expression:"folderDialog.folderForm.desc"}})],1)],1)],1),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("awsui-button",{staticClass:"button-general-color",attrs:{type:"primary"},on:{click:function(t){return e.updateFolderSave("folderForm")}}},[e._v("确定")]),i("awsui-button",{on:{click:e.closeFolderDlg}},[e._v("取消")])],1)]),i("awsui-dialog",{attrs:{title:e.customFolderDialog.title,visible:e.customFolderDialog.dialogVisible,"modal-append-to-body":!1,"close-on-click-modal":!1,"close-on-press-escape":!0,border:!1,width:"800px"},on:{"update:visible":function(t){return e.$set(e.customFolderDialog,"dialogVisible",t)}}},[i("div",[e.customFolderDialog.dialogVisible?i("repository-info-property",{attrs:{id:e.customFolderDialog.id,repositoryRefresh:e.repositoryRefresh}}):e._e()],1)])],1),i("PALRepositoryTree",{ref:"moveRepository",attrs:{visible:e.moveRepository.visible,wsId:e.moveRepository.wsId,teamId:e.moveRepository.teamId,categorys:e.moveRepository.categorys,multiple:!1,title:e.moveRepository.title},on:{"update:visible":function(t){return e.$set(e.moveRepository,"visible",t)},cancel:function(t){e.moveRepository.visible=!1},getResult:e.saveMoveRepositoryResult}}),i("batch-create",{ref:"batchCreate",attrs:{visible:e.batchCreate.visible,methodCategory:e.uuid},on:{"update:visible":function(t){return e.$set(e.batchCreate,"visible",t)},getResult:e.closeBatchCreateFn}}),i("batch-replace",{ref:e.batchReplace,attrs:{visible:e.batchReplace.visible,methodCategory:e.uuid},on:{"update:visible":function(t){return e.$set(e.batchReplace,"visible",t)},getResult:e.closeBatchReplaceFn}})],1)},W=[],E=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-container",{attrs:{id:"repositoryInfo"}},[i("awsui-dialog",{attrs:{border:!1,visible:e.dialogVisible,width:"800px","close-on-click-modal":!1,"before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t}}},[[i("el-tabs",{on:{"tab-click":e.changeRepositoryType},model:{value:e.activeName,callback:function(t){e.activeName=t},expression:"activeName"}},["default"!=this.methodId?[i("el-tab-pane",{attrs:{label:"文件属性",name:"property"}}),i("el-tab-pane",{attrs:{label:"版本管理",name:"version"}})]:e._e(),i("el-tab-pane",{attrs:{label:"附件管理",name:"upfile"}})],2)],i(e.repositoryInfoType,{ref:"component",tag:"component",attrs:{id:e.id,versionId:e.versionId,isUse:e.isUse,isPublish:e.isPublish,isStop:e.isStop,isApproval:e.isApproval,repositoryRefresh:e.repositoryRefresh}})],2)],1)},q=[],J=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-container",[i("div",{staticStyle:{height:"500px",width:"100%"},attrs:{id:"repositoryInfoVersion"}},[e.tableData.length>0?i("el-table",{staticStyle:{width:"100%"},attrs:{id:"table",data:e.tableData,"header-cell-class-name":"header-cell-row",height:"500px"}},[i("el-table-column",{attrs:{prop:"versionNo",label:"版本号",align:"center",width:"70"}}),i("el-table-column",{attrs:{prop:"name",label:"文件名称","min-width":"180"}}),i("el-table-column",{attrs:{prop:"address",align:"center",label:"创建信息","min-width":"160"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(" "+e._s(t.row.createUser)+"/"+e._s(t.row.createDate)+" ")]}}],null,!1,811821338)}),e.isCorrelatebpms?[i("el-table-column",{attrs:{prop:"state",label:"PAL状态",align:"center",width:"80"},scopedSlots:e._u([{key:"default",fn:function(t){return i("span",{style:{color:t.row.stateColor}},[e._v(" "+e._s(t.row.state)+" ")])}}],null,!1,2272571482)}),e.isPalManage?[i("el-table-column",{attrs:{prop:"state",label:"在BPM运行",align:"center",width:"100"},scopedSlots:e._u([{key:"default",fn:function(t){return i("span",{},[e._v(" "+e._s(t.row.isCorrelate?"是":"否")+" ")])}}],null,!1,3455484328)})]:[i("el-table-column",{attrs:{prop:"state",label:"BPM状态",align:"center",width:"80"},scopedSlots:e._u([{key:"default",fn:function(t){return i("span",{style:{color:t.row.bpmStateColor}},[e._v(" "+e._s(t.row.bpmState)+" ")])}}],null,!1,2058353434)})]]:[i("el-table-column",{attrs:{prop:"state",label:"状态",align:"center",width:"80"},scopedSlots:e._u([{key:"default",fn:function(t){return i("span",{style:{color:t.row.stateColor}},[e._v(" "+e._s(t.row.state)+" ")])}}],null,!1,2272571482)})],e.havingVersionManagePerm&&e.tableData.length>1?i("el-table-column",{attrs:{prop:"name",label:"使用",align:"center",width:"80"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-switch",{staticStyle:{display:"block"},attrs:{"active-color":"#4E7FF9","inactive-color":"#E2E2E2"},on:{change:function(i){return e.changeRepositoryUseStatus(t.row.id,t.row.isUse)}},model:{value:t.row.isUse,callback:function(i){e.$set(t.row,"isUse",i)},expression:"scope.row.isUse"}})]}}],null,!1,2707523121)}):e._e(),i("el-table-column",{attrs:{prop:"address",align:"center",label:"操作"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-tooltip",{attrs:{content:"以当前版本为模版创建新版本文件",placement:"bottom","hide-after":"3000"}},[e.havingWritePerm?i("i",{staticClass:"iconfont icon-fuzhi operate-icon-display",staticStyle:{cursor:"pointer"},on:{click:function(i){return e.createNewVersion(t.row.id,t.row.versionNo)}}}):e._e()]),!e.havingRemovePerm||e.isCorrelatebpms||t.row.isUse||t.row.isPublish||t.row.isApproval?e._e():i("i",{staticClass:"iconfont icon-lajitong1 operate-icon-display",staticStyle:{cursor:"pointer","padding-left":"5px"},on:{click:function(i){return e.deleteRepository(t.row.id,t.row.versionNo)}}})]}}],null,!1,3960613788)})],2):e._e()],1)])},K=[],G={name:"RepositoryInfoVersion",props:{id:{type:String,default:""},versionId:{type:String,default:""},repositoryRefresh:{type:Function,default:null}},data:function(){return{userId:"",tableData:[],isCorrelatebpms:!1,processDefId:"",isPalManage:!1,havingWritePerm:!1,havingRemovePerm:!1,havingVersionManagePerm:!1}},created:function(){this.userId=this.id,this.initData()},methods:{initData:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager_data",id:e.userId,wsId:e.$store.getters.getWsIdFn,teamId:e.$store.getters.getTeamIdFn}};p["a"].post(t).then((function(t){if("ok"==t.result){e.isCorrelatebpms=t.data.isCorrelatebpms,e.processDefId=t.data.processDefId,e.isPalManage=t.data.isPalManage,e.havingWritePerm=t.data.havingWritePerm,e.havingRemovePerm=t.data.havingRemovePerm,e.havingVersionManagePerm=t.data.havingVersionManagePerm;for(var i=0;i<t.data.tableData.length;i++)t.data.tableData[i].isApproval?(t.data.tableData[i].stateColor="#1AA477",t.data.tableData[i].state="审批中",t.data.tableData[i].stateCode="approval"):t.data.tableData[i].isStop?(t.data.tableData[i].stateColor="#D9001B",t.data.tableData[i].state="已停用",t.data.tableData[i].stateCode="stop"):t.data.tableData[i].isPublish?(t.data.tableData[i].stateColor="#1AA477",t.data.tableData[i].state="已发布",t.data.tableData[i].stateCode="publish"):t.data.tableData[i].isUse?(t.data.tableData[i].stateColor="#4E7FF9",t.data.tableData[i].state="设计中",t.data.tableData[i].stateCode="use"):(t.data.tableData[i].stateColor="",t.data.tableData[i].state="设计",t.data.tableData[i].stateCode="designer");e.tableData=t.data.tableData}else e.$message.error(t.msg)})).catch((function(e){console.log(e)}))},changeRepositoryUseStatus:function(e,t){var i=this;if(t){var o;for(var a in i.tableData)if(i.tableData[a].isUse&&i.tableData[a].id!=e){o=i.tableData[a].id;break}var s=i.$loading({lock:!0,text:"正在切换更新版本...",spinner:"el-icon-loading",background:"hsla(0,0%,100%,.9)"}),r={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager_use",id:e,wsId:i.$store.getters.getWsIdFn,teamId:i.$store.getters.getTeamIdFn}};p["a"].post(r).then((function(e){"ok"==e.result?(i.$message({message:"切换成功",type:"success"}),i.userId=e.data.id,i.initData(),s.close(),i.repositoryRefresh&&o&&i.repositoryRefresh(o)):(s.close(),i.$message(e.msg))})).catch((function(e){console.log(e)}))}else for(var a in i.tableData)i.tableData[a].id==e&&(i.tableData[a].isUse=!0)},createNewVersion:function(e,t){var i=this;i.$confirm("确定将 "+t+" 版本为模板创建新版本文件?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",type:"warning"}).then((function(){var t=i.$loading({lock:!0,text:"正在创建新版本...",spinner:"el-icon-loading",background:"hsla(0,0%,100%,.9)"}),o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager_create",id:e,wsId:i.$store.getters.getWsIdFn,teamId:i.$store.getters.getTeamIdFn}};p["a"].post(o).then((function(e){"ok"==e.result?(i.$message({message:"创建成功",type:"success"}),i.initData(),t.close()):(t.close(),i.$message(e.msg))})).catch((function(e){console.log(e)}))})).catch((function(){}))},deleteRepository:function(e,t){var i=this;i.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",type:"warning"}).then((function(){var t=i.$loading({lock:!0,text:"正在放入回收站...",spinner:"el-icon-loading",background:"hsla(0,0%,100%,.9)"}),o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_repository_designer_version_manager_delete",id:e,wsId:i.$store.getters.getWsIdFn,teamId:i.$store.getters.getTeamIdFn}};p["a"].post(o).then((function(e){"ok"==e.result?(i.$message({message:"已放入回收站",type:"success"}),i.initData(),t.close()):(t.close(),i.$message(e.msg))})).catch((function(e){console.log(e)}))})).catch((function(){}))}}},Y=G,Q=(i("cd6b"),Object(f["a"])(Y,J,K,!1,null,"0367c742",null)),X=Q.exports,Z=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-container",[i("div",{staticStyle:{height:"500px",width:"100%"},attrs:{id:"repositoryInfoUpfile"}},[!e.havingWritePerm||e.isPublish||e.isStop||e.isApproval?e._e():i("div",{staticStyle:{height:"40px"}},[i("el-tooltip",{staticClass:"item",attrs:{placement:"bottom-start","hide-after":5e3}},[i("div",{attrs:{slot:"content"},slot:"content"},[e._v("附件格式支持:"),i("br"),e._v("jpg, jpeg, gif, png, bmp, pdf, doc, docx, ppt, pptx, xls, xlsx, txt, mp3, mp4, avi, mpeg, flv, swf, wmv")]),i("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"130px"},attrs:{type:"primary",disabled:e.isPublish||e.isStop||e.isApproval},on:{click:function(t){return e.openFileSelect()}}},[e._v("上传附件")])],1),i("PALUpload",{ref:"orgUpload",staticClass:"upload-demo",staticStyle:{width:"100%"},attrs:{appId:"com.actionsoft.apps.coe.pal",repositoryName:e.repositoryName,multiple:!0,groupValue:e.groupValue,fileValue:e.id,"show-file-list":!1,"on-success":e.uploadSuccess,"before-upload":e.beforeUpload,accept:".jpg,.jpeg,.gif,.png,.bmp,.pdf,.doc,.docx,.ppt,.pptx,.xls,.xlsx,.txt,.mp3,.mp4,.avi,.mpeg,.flv,.swf,.wmv","file-list":e.fileList}},[i("div",{staticStyle:{display:"none"}},[i("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"130px"},attrs:{id:"selectFileButton",type:"primary"}},[e._v("Excel文件上传")])],1)])],1),i("div",{staticStyle:{height:"460px",width:"100%",overflow:"auto"}},[i("div",[i("el-table",{staticStyle:{width:"100%"},attrs:{"show-header":!1,data:e.fileTable}},[i("el-table-column",{attrs:{prop:"name",label:"名称","min-width":"300"}}),e.isHighSecurity?i("el-table-column",{attrs:{prop:"securityLevel",label:"文件密级","min-width":"50"}}):e._e(),i("el-table-column",{attrs:{prop:"operate",label:"操作",align:"center",width:"150"},scopedSlots:e._u([{key:"default",fn:function(t){return[e.onlineDoc?i("el-tooltip",{attrs:{content:"预览",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont operate-icon-display",staticStyle:{cursor:"pointer"},on:{click:function(i){return e.readFile(t.row.id)}}},[e._v("")])]):e._e(),i("el-tooltip",{attrs:{content:"下载",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont operate-icon-display",staticStyle:{cursor:"pointer","padding-left":"15px"},on:{click:function(i){return e.downloadFile(t.row.url)}}},[e._v("")])]),!e.havingRemovePerm||e.isPublish||e.isStop||e.isApproval?e._e():i("el-tooltip",{attrs:{content:"删除",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont icon-lajitong1 operate-icon-display",staticStyle:{cursor:"pointer","padding-left":"15px"},on:{click:function(i){return e.deleteFile(t.row.name,t.row.id)}}})])]}}])})],1)],1),i("div",{staticStyle:{height:"25px","line-height":"25px","vertical-align":"center",margin:"30px 30px 15px 0px","border-left":"3px solid #4E7FF9"}},[i("p",{staticStyle:{"padding-left":"5px"}},[i("b",[e._v("关联附件")])])]),i("div",[i("el-table",{staticStyle:{width:"100%"},attrs:{"show-header":!1,data:e.relationFileTable}},[i("el-table-column",{attrs:{prop:"name",label:"名称","min-width":"300"}}),e.isHighSecurity?i("el-table-column",{attrs:{prop:"securityLevel",label:"文件密级","min-width":"50"}}):e._e(),i("el-table-column",{attrs:{prop:"operate",label:"操作",align:"center",width:"150"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-tooltip",{attrs:{content:"预览",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont operate-icon-display",staticStyle:{cursor:"pointer"},on:{click:function(i){return e.readFile(t.row.id)}}},[e._v("")])]),i("el-tooltip",{attrs:{content:"下载",placement:"bottom","hide-after":2e3}},[i("i",{staticClass:"iconfont operate-icon-display",staticStyle:{cursor:"pointer","padding-left":"15px"},on:{click:function(i){return e.downloadFile(t.row.url)}}},[e._v("")])])]}}])})],1)],1)])]),i("div",[i("awsui-dialog",{attrs:{title:"密级标定",visible:e.securityVisible,border:!1,"append-to-body":"",width:"500px"},on:{"update:visible":function(t){e.securityVisible=t}}},[i("div",{staticStyle:{"max-height":"500px","overflow-y":"auto"}},e._l(e.securityFileList,(function(t){return i("awsui-form",{key:t.uid,ref:t.uid,refInFor:!0,attrs:{"label-width":"200px",id:"securityDialog",rules:e.securityRules,model:t}},[i("awsui-form-item",{attrs:{label:t.name,prop:"securityLevel"}},[i("awsui-select",{staticStyle:{width:"70%"},attrs:{options:e.securityOptions},model:{value:t.securityLevel,callback:function(i){e.$set(t,"securityLevel",i)},expression:"file.securityLevel"}})],1)],1)})),1),i("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("awsui-button",{attrs:{type:"primary"},on:{click:e.uploadServer}},[e._v("确定")]),i("awsui-button",{on:{click:function(t){e.securityVisible=!1}}},[e._v("取 消")])],1)])],1)])},ee=[],te={name:"RepositoryInfoUpfile",components:{PALUpload:d["a"]},props:["id","versionId","isUse","isPublish","isStop","isApproval"],data:function(){var e=function(e,t,i){void 0===t?i(new Error("请选择文件密级")):i()};return{fileTable:[],relationFileTable:[],fileList:[],groupValue:"file",onlineDoc:!0,havingWritePerm:!1,havingRemovePerm:!1,havingVersionManagePerm:!1,isHighSecurity:!1,isFileSecurity:!1,securityList:{},repositoryName:"COE_Upfile",securityVisible:!1,securityFileList:[],securityOptions:[],securityRules:{securityLevel:[{required:!0,trigger:"change",validator:e,type:"number"}]},validateFlag:!0}},created:function(){this.initData(),this.initRelationData()},watch:{securityVisible:function(e,t){e||this.securityFileList.splice(0,this.securityFileList.length)}},methods:{initData:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_upfile_load",pl_uuid:e.id,type:"file",wsId:e.$store.getters.getWsIdFn,teamId:e.$store.getters.getTeamIdFn}};p["a"].post(t).then((function(t){if("ok"==t.result){e.havingWritePerm=t.data.havingWritePerm,e.havingRemovePerm=t.data.havingRemovePerm,e.havingVersionManagePerm=t.data.havingVersionManagePerm,e.isHighSecurity=t.data.isHighSecurity,e.isFileSecurity=t.data.isFileSecurity,e.securityList=t.data.securityList,t.data.isHighSecurity&&(e.repositoryName="tmp");for(var i=t.data.list,o=[],a=0;a<i.length;a++){var s=i[a],r={id:s.uuid,name:s.fileName,url:s.url,securityLevel:e.isHighSecurity?t.data.securityList[s.securityLevel]:""};o.push(r)}e.fileTable=o}})).catch((function(e){console.log(e)}))},initRelationData:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_relation_upfile_load",pl_uuid:e.id,type:"file"}};p["a"].post(t).then((function(t){if("ok"==t.result){e.isHighSecurity=t.data.isHighSecurity,e.securityList=t.data.securityList,t.data.isHighSecurity&&(e.repositoryName="tmp");for(var i=t.data.list,o=[],a=0;a<i.length;a++){var s=i[a],r={id:s.uuid,name:s.fileName,url:s.url,securityLevel:e.isHighSecurity?e.securityList[s.securityLevel]:""};o.push(r)}e.relationFileTable=o}})).catch((function(e){console.log(e)}))},openFileSelect:function(){var e=this;if(e.isHighSecurity&&e.isFileSecurity){var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_file_permission_query",uuid:e.id}};p["a"].post(t).then((function(t){"ok"==t.result?document.getElementById("selectFileButton").click():e.$message.error(t.msg)})).catch((function(t){console.log(t),e.$message.error(t.msg)}))}else document.getElementById("selectFileButton").click()},uploadSuccess:function(e,t,i){var o=this;if(this.isHighSecurity)this.securityVisible||(this.securityVisible=!0),0==this.securityOptions.length&&Object.keys(this.securityList).map((function(e){var t={value:e,label:o.securityList[e]};o.securityOptions.push(t)})),this.securityFileList.push(t);else{var a=this,s={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_upfile_add",pl_uuid:a.id,shape_uuid:"",type:"file",fileName:t.name,download:1}};p["a"].post(s).then((function(e){"ok"==e.result?(a.$message({message:"["+t.name+"]上传成功",type:"success"}),a.initData()):a.$message.error("["+t.name+"]上传失败")})).catch((function(e){console.log(e)}))}},uploadServer:function(){var e=this;this.validateFlag=!0;for(var t=0;t<this.securityFileList.length;t++){var i=this.securityFileList[t];this.$refs[i.uid][0].validate((function(t){if(!t)return e.validateFlag=!1,!1}))}if(this.validateFlag){for(var o=function(t){var i=e.securityFileList[t],o=e,a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_upfile_add",pl_uuid:o.id,shape_uuid:"",type:"file",fileName:i.name,download:1,securityLevel:void 0==i.securityLevel?"":i.securityLevel}};p["a"].post(a).then((function(e){"ok"==e.result?(o.$message({message:"["+i.name+"]上传成功",type:"success"}),o.initData()):o.$message.error("["+i.name+"]上传失败")})).catch((function(e){console.log(e)}))},a=0;a<this.securityFileList.length;a++)o(a);this.securityVisible=!1}},beforeUpload:function(e){if(e.size>268435456)return this.$message({message:"文件["+e.name+"]不允许大于256M,上传失败",type:"warning"}),!1;for(var t=0;t<this.fileTable.length;t++){var i=this.fileTable[t];if(i.name==e.name)return this.$message({message:"文件["+e.name+"]已存在,不允许重复上传",type:"warning"}),!1}},readFile:function(e){var t=this,i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_upfile_read",uuid:e}};p["a"].post(i).then((function(e){"ok"==e.result?window.open(e.data.url):t.$message.error(e.msg)})).catch((function(e){console.log(e)}))},downloadFile:function(e){window.open(e)},deleteFile:function(e,t){var i=this;this.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",type:"warning"}).then((function(){var e=i,o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_upfile_del",uuid:t}};p["a"].post(o).then((function(t){"ok"==t.result?(e.$message({message:"删除成功",type:"success"}),e.initData()):e.$message.error("删除失败")})).catch((function(e){console.log(e)}))})).catch((function(){}))}}},ie=te,oe=(i("6076"),Object(f["a"])(ie,Z,ee,!1,null,"5fba02ef",null)),ae=oe.exports,se={name:"RepositoryInfo",components:{RepositoryInfoProperty:M,RepositoryInfoVersion:X,RepositoryInfoUpfile:ae},data:function(){return{dialogVisible:!1,id:"",versionId:"",type:"",activeName:"",repositoryInfoType:"",isUse:!1,isPublish:!1,isStop:!1,isApproval:!1,methodId:"",parent:void 0}},methods:{clearParam:function(){this.dialogVisible=!1,this.id="",this.versionId="",this.type="",this.repositoryInfoType="",this.isUse=!1,this.isPublish=!1,this.isStop=!1,this.isApproval=!1,this.methodId="",this.parent=void 0},openRepositoryInfoDlg:function(e,t,i,o,a,s,r,l,n){this.id=t,this.versionId=i,this.type=o,this.activeName=o,this.initInfoChildType(o),this.dialogVisible=!0,this.isUse=a,this.isPublish=s,this.isStop=r,this.isApproval=l,this.methodId=n,this.parent=e},initInfoChildType:function(e){this.repositoryInfoType="property"==e?"RepositoryInfoProperty":"version"==e?"RepositoryInfoVersion":"upfile"==e?"RepositoryInfoUpfile":""},repositoryRefresh:function(e){this.parent&&(this.parent.refreshTreeParentNode&&this.parent.refreshTreeParentNode(e),this.parent.initData())},handleClose:function(e){this.clearParam(),e()},changeRepositoryType:function(e,t){this.initInfoChildType(e.name)}}},re=se,le=(i("a9ad"),Object(f["a"])(re,E,q,!1,null,"0995ff66",null)),ne=le.exports,ce=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-container",[i("el-dialog",{attrs:{id:"palRepositoryTree",title:e.title,visible:e.dialogVisible,"destroy-on-close":!0,width:e.width,"modal-append-to-body":!1,"append-to-body":!0,"close-on-click-modal":!1,"before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t}}},[e.refresh?[i("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],attrs:{"element-loading-text":"拼命加载中"}},[i("el-autocomplete",{staticStyle:{width:"100%"},attrs:{size:"small","fetch-suggestions":e.treeSearch,"suffix-icon":"el-icon-search",placeholder:"快速查询","trigger-on-focus":!1},on:{select:e.treeSearchSelect},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.item;return[i("el-tooltip",{staticClass:"item",attrs:{placement:"bottom-start"}},[i("div",{attrs:{slot:"content"},slot:"content"},[e._v(e._s(o.pathName))]),i("span",[e._v(e._s(o.name))])])]}}],null,!1,3987291353),model:{value:e.treeSearchKey,callback:function(t){e.treeSearchKey=t},expression:"treeSearchKey"}}),i("div",{staticStyle:{height:"300px",overflow:"auto",border:"1px solid #f2f2f2"}},[i("div",{staticClass:"tree"},[i("el-tree",{ref:"tree",attrs:{props:e.treeProps,"expand-on-click-node":!1,"highlight-current":!0,"show-checkbox":e.multiple,"node-key":"id",lazy:"",load:e.loadNode},on:{"node-click":e.openNode,"node-expand":e.expandNode,"node-collapse":e.closeNode},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.node;t.data;return i("span",{},[i("i",{staticClass:"awsui-iconfont tree-content-icon tree-content-icon-padding",style:{color:o.data.icon.color},domProps:{innerHTML:e._s(o.data.icon.icon)}}),i("span",[e._v(e._s(o.label))])])}}],null,!1,52448956)})],1)])],1)]:e._e(),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("awsui-button",{staticClass:"button-general-color",attrs:{type:"primary"},on:{click:e.submit}},[e._v("确定")]),i("awsui-button",{on:{click:e.cancel}},[e._v("取消")])],1)],2)],1)},de=[],pe={name:"PALRepositoryTree",props:{visible:{type:Boolean,default:!1},wsId:{type:String,default:"",required:!0},teamId:{type:String,default:""},categorys:{type:String,default:""},rootId:{type:String,default:""},multiple:{type:Boolean,default:!1},title:{type:String,default:"请选择"},selected:{type:Array,default:function(){return[]}}},data:function(){return{refresh:!1,dialogVisible:!1,loading:!1,searchKey:"",treeSearchKey:"",timeout:null,pid:"",width:"500px",treeProps:{label:"name",isLeaf:"leaf"}}},methods:{handleClose:function(e){this.closeDlalog("cancel"),e()},cancel:function(){this.closeDlalog("cancel"),this.dialogVisible=!1},submit:function(){this.closeDlalog("save"),this.dialogVisible=!1},closeDlalog:function(e){if("save"==e){var t=[];if(this.checkbox)t=this.$refs.tree.getCheckedNodes();else{var i=this.$refs.tree.getCurrentNode();null!=i&&t.push(i)}this.$emit("getResult",t)}else this.$emit("cancel")},handleNodeClick:function(e){console.log(e)},openNode:function(e,t,i){},treeSearchSelect:function(e){this.queryTreeByIdAndPath(e.id,e.versionId,e.path)},treeSearch:function(e,t){var i=this;if(void 0!=e&&""!=e.trim()){var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_repository_tree_component_search",wsId:i.wsId,teamId:i.teamId,categorys:i.categorys,rootId:i.rootId,name:e}};p["a"].post(o).then((function(e){"ok"==e.result&&e.data.length>0?(clearTimeout(i.timeout),i.timeout=setTimeout((function(){t(e.data)}),3e3*Math.random())):clearTimeout(i.timeout)})).catch((function(e){console.log(e)}))}else clearTimeout(i.timeout)},queryTreeByIdAndPath:function(e,t,i){for(var o=this,a=o.$refs.tree,s=i.split(","),r=1,l=0;l<s.length;l++)l>0&&null!=a.getNode(s[l-1])&&(setTimeout(o._expandNode(a,s[l-1]),300*r),r++);setTimeout((function(){null!=a.getNode(t)&&a.setCurrentKey(t)}),300*r)},_expandNode:function(e,t){return function(){e.getNode(t).expand()}},loadNode:function(e,t){var i=this;i.loading=!0;var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_repository_tree_component_subjson",wsId:i.wsId,teamId:i.teamId,categorys:i.categorys,pid:""}};0===e.level?o.data.pid=i.pid:o.data.pid=e.data.id,p["a"].post(o).then((function(o){if(t(o.data),i.loading=!1,0==e.level&&o.data.length>0){var a=i.$refs.tree;a.getNode(o.data[0].id).expand(),setTimeout((function(){var e=a.getNode(o.data[0].id).childNodes[0];null!=e&&e.expand()}),500)}})).catch((function(e){console.log(e)}))},expandNode:function(e,t,i){},closeNode:function(e,t,i){t.childNodes=[],t.loaded=!1},refreshNode:function(e){if(void 0==e){var t=this.$refs.tree.getCurrentNode();if(null!=t){void 0!=this.$refs.tree.store.nodesMap[t.id]&&(this.$refs.tree.store.nodesMap[t.id].expanded=!1);var i=this.$refs.tree.getNode(t.id);this.closeNode(null,i,null),i.expand()}}else{void 0!=this.$refs.tree.store.nodesMap[e]&&(this.$refs.tree.store.nodesMap[e].expanded=!1);var o=this.$refs.tree.getNode(e);null!=o&&(this.closeNode(null,o,null),o.expand())}}},watch:{visible:function(e){this.dialogVisible=e,e?(this.pid=this.rootId,this.refresh=!0):this.refresh=!1}}},ue=pe,he=(i("ba8c"),Object(f["a"])(ue,ce,de,!1,null,"07ba25f0",null)),fe=he.exports,ge=i("2480"),me=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("awsui-dialog",{attrs:{title:"批量创建",height:"700px",width:"900px",visible:e.dialogVisible,border:!1,"before-close":e.handleClose,"destroy-on-close":!0},on:{"update:visible":function(t){e.dialogVisible=t}}},[i("iframe",{staticStyle:{border:"0px",width:"100%",height:"695px"},attrs:{id:"batchCreateIframe",name:"batchCreateIframe",src:e.src}})])},ye=[],ve={name:"create",props:{visible:{type:Boolean,default:!1},methodCategory:{type:String,default:""}},data:function(){return{dialogVisible:!1,src:wHref+"?sid="+this.$store.state.sessionId+"&mainPage=create&cmd=com.actionsoft.apps.coe.pal.batch_main_page&methodCategory="+this.methodCategory+"&wsId="+this.$store.getters.getWsIdFn+"&teamId="+this.$store.getters.getTeamIdFn}},created:function(){var e=this;window.closeBatchCreateFn=function(t){e.closeDlalog(),e.dialogVisible=!1}},methods:{handleClose:function(e){this.closeDlalog(),e()},closeDlalog:function(){this.$emit("getResult")}},watch:{visible:function(e){this.dialogVisible=e}}},be=ve,_e=Object(f["a"])(be,me,ye,!1,null,"43ccbcf0",null),we=_e.exports,xe=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("awsui-dialog",{attrs:{title:"批量替换",height:"700px",width:"900px",visible:e.dialogVisible,border:!1,"before-close":e.handleClose,"destroy-on-close":!0},on:{"update:visible":function(t){e.dialogVisible=t}}},[i("iframe",{staticStyle:{border:"0px",width:"100%",height:"695px"},attrs:{id:"batchRelplaceIframe",name:"batchRelplaceIframe",src:e.src}})])},Se=[],Ie={name:"replace",props:{visible:{type:Boolean,default:!1},methodCategory:{type:String,default:""}},data:function(){return{dialogVisible:!1,src:wHref+"?sid="+this.$store.state.sessionId+"&mainPage=replace&cmd=com.actionsoft.apps.coe.pal.batch_main_page&methodCategory="+this.methodCategory+"&wsId="+this.$store.getters.getWsIdFn+"&teamId="+this.$store.getters.getTeamIdFn}},created:function(){var e=this;window.closeBatchReplaceFn=function(t){e.closeDlalog(),e.dialogVisible=!1}},methods:{handleClose:function(e){this.closeDlalog(),e()},closeDlalog:function(){this.$emit("getResult")}},watch:{visible:function(e){this.dialogVisible=e}}},Ce=Ie,De=Object(f["a"])(Ce,xe,Se,!1,null,"e4f255d0",null),Fe=De.exports,ke={name:"RepositoryList",components:{RepositoryInfoProperty:M,PALRepositoryTree:fe,RepositoryInfo:ne,BatchCreate:we,BatchReplace:Fe},props:{uuid:{type:String,default:""},refreshTreeParentNode:{type:Function,default:null},refreshTreeNode:{type:Function,default:null},treeNode:{type:Object,default:null}},data:function(){return{loading:!1,mainHeight:parseInt(this.$store.getters.getTopMainHeightFn)-(this.showFooter?45:0)+"px",tableLoading:!1,showFooter:!1,repositoryPathData:[],isShow:!0,category:"",batchAppVisible:!1,batchDlg:"",tableData:[],mainRepository:{},isClickTreeRoot:!1,processLinkInstall:!1,outputPrInstall:!1,onlineDocInstall:!1,havingWritePerm:!1,havingRemovePerm:!1,havingVersionManagePerm:!1,currRepositoryDetail:{name:"",id:"",desc:"",versionId:"",version:"",iconCode:"",iconColor:"",state:"",stateColor:"",isUse:!1,isPublish:!1,isApproval:!1,isStop:!1,photoType:"icon",photo:"",methodId:"",methodName:"",folder:!0,rowIndex:0},checkAll:!1,checkedRepositorys:[],singleSelectedRepository:{},isIndeterminate:!1,folderDialog:{dialogVisible:!1,folderForm:{id:"",name:"",desc:""},rules:{name:[{required:!0,message:"请输入名称",trigger:"blur"},{min:1,max:120,message:"长度在 1 到 120 个字符",trigger:"blur"}]}},customFolderDialog:{dialogVisible:!1,title:"",id:""},moveRepository:{visible:!1,title:"移动到",wsId:this.$store.getters.getWsIdFn,teamId:this.$store.getters.getTeamIdFn,categorys:"",type:"batch"},batchCreate:{visible:!1},batchReplace:{visible:!1},isFileSecurity:!1,isHighSecurity:!1}},created:function(){},mounted:function(){this.initData(),this.rowDrop()},methods:{handleCloseFolder:function(e){this.folderDialog.dialogVisible=!1,e()},openUpdateFolder:function(e,t,i,o,a){"default"==o?(this.folderDialog.folderForm.name=t,this.folderDialog.folderForm.desc=i,this.folderDialog.folderForm.id=e,this.folderDialog.dialogVisible=!0):(this.customFolderDialog.id=e,this.customFolderDialog.title="修改"+a,this.customFolderDialog.dialogVisible=!0)},closeFolderDlg:function(){this.folderDialog.dialogVisible=!1,this.folderDialog.folderForm.name="",this.folderDialog.folderForm.desc="",this.folderDialog.folderForm.id=""},updateFolderSave:function(e){var t=this;t.$refs[e].validate((function(e){if(!e)return console.log("error submit!!"),!1;var i=t.folderDialog.folderForm.name,o=t.folderDialog.folderForm.desc;if(o.length>255)t.$message({message:"[描述]不允许超过255个字符",type:"warning"});else{var a=t.folderDialog.folderForm.id,s=t.$store.getters.getWsIdFn,r=t.$store.getters.getTeamIdFn,l="default",n={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_folder_create_save",wsId:s,teamId:r,method:l,name:i,desc:o,id:a}};p["a"].post(n).then((function(e){"ok"==e.result&&(t.initData(),t.refreshTreeParentNode&&t.refreshTreeParentNode(a),t.closeFolderDlg())})).catch((function(e){console.log(e)}))}}))},initData:function(){var e=this;e.tableLoading=!0;var t=e.$store.getters.getWsIdFn,i=e.$store.getters.getTeamIdFn,o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_repository_child_data_query",wsId:t,teamId:i,id:e.uuid}};p["a"].post(o).then((function(t){if("ok"==t.result){var i=t.data.repositoryPathData;if(e.repositoryPathData=i,e.isClickTreeRoot=t.data.isClickTreeRoot,e.category=t.data.category,e.moveRepository.categorys=t.data.category,e.tableData=t.data.tableData,e.mainRepository=t.data.mainRepository,e.tableLoading=!1,e.processLinkInstall=t.data.processLinkInstall,e.outputPrInstall=t.data.outputPrInstall,e.onlineDocInstall=t.data.onlineDocInstall,e.havingWritePerm=t.data.havingWritePerm,e.havingRemovePerm=t.data.havingRemovePerm,e.havingVersionManagePerm=t.data.havingVersionManagePerm,e.batchAppVisible=t.data.batchAppVisible,e.batchDlg=t.data.batchDlg,e.isHighSecurity=t.data.isHighSecurity,e.isFileSecurity=t.data.isFileSecurity,0==e.tableData.length)e.isShow=!1;else if(void 0!=t.data.mainRepository){var o={id:t.data.mainRepository.id};e.loadRepositoryDetail(o)}else e.setCurrentRow(e.tableData[0])}})).catch((function(t){console.log(t),e.tableLoading=!1}))},setCurrentRow:function(e){this.clickTableRow(e,null,null)},clickTableRow:function(e,t,i){this.$refs.table.setCurrentRow(e),this.loadRepositoryDetail(e)},loadRepositoryDetail:function(e){if(e){var t=this,i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_repository_detail_data_query",wsId:t.$store.getters.getWsIdFn,teamId:t.$store.getters.getTeamIdFn,id:e.id}};p["a"].post(i).then((function(i){"ok"==i.result&&(t.currRepositoryDetail.name=i.data.name,t.currRepositoryDetail.id=i.data.id,t.currRepositoryDetail.desc=i.data.desc,t.currRepositoryDetail.version=i.data.version,t.currRepositoryDetail.iconCode=i.data.iconCode,t.currRepositoryDetail.iconColor=i.data.iconColor,t.currRepositoryDetail.isPublish=i.data.isPublish,t.currRepositoryDetail.isUse=i.data.isUse,t.currRepositoryDetail.isApproval=i.data.isApproval,t.currRepositoryDetail.isStop=i.data.isStop,t.currRepositoryDetail.photoType=i.data.photoType,t.currRepositoryDetail.photo=i.data.photo,t.currRepositoryDetail.methodId=i.data.methodId,t.currRepositoryDetail.methodName=i.data.methodName,t.currRepositoryDetail.folder=i.data.folder,t.currRepositoryDetail.isApproval?(t.currRepositoryDetail.stateColor="#1AA477",t.currRepositoryDetail.state="审批中"):t.currRepositoryDetail.isStop?(t.currRepositoryDetail.stateColor="#D9001B",t.currRepositoryDetail.state="已停用"):t.currRepositoryDetail.isPublish?(t.currRepositoryDetail.stateColor="#1AA477",t.currRepositoryDetail.state="已发布"):t.currRepositoryDetail.isUse&&(t.currRepositoryDetail.stateColor="#4E7FF9",t.currRepositoryDetail.state="设计中"),t.currRepositoryDetail.rowIndex=e.index)})).catch((function(e){console.log(e)}))}},openDesigner:function(e){var t=this;if(t.isHighSecurity&&t.isFileSecurity){var i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_file_permission_query",uuid:e}};p["a"].post(i).then((function(i){"ok"==i.result?Object(y["d"])(t.$store.getters.getTeamIdFn,e,t.$store.state.sessionId):t.$message.error(i.msg)})).catch((function(e){console.log(e),t.$message.error(e.msg)}))}else Object(y["d"])(this.$store.getters.getTeamIdFn,e,this.$store.state.sessionId)},setFavorite:function(e,t,i){if("0"==e){var o=this,a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_favorite_cancel",wsId:o.$store.getters.getWsIdFn,teamId:o.$store.getters.getTeamIdFn,versionId:t}};p["a"].post(a).then((function(e){"ok"==e.result&&o.initData()})).catch((function(e){console.log(e)}))}else{var s=this,r={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_favorite_save",wsId:s.$store.getters.getWsIdFn,teamId:s.$store.getters.getTeamIdFn,versionId:t}};p["a"].post(r).then((function(e){"ok"==e.result&&s.initData()})).catch((function(e){console.log(e)}))}},handleCheckAllChange:function(e){var t=this;e?(this.$refs.table.clearSelection(),this.tableData.forEach((function(e){t.$refs.table.toggleRowSelection(e)}))):this.$refs.table.clearSelection(),this.isIndeterminate=!1},handlecheckedRepositorysChange:function(e){var t=this;t.checkedRepositorys=e;var i=e.length;if(i>0){t.showFooter=!0;for(var o=0;o<i;o++){var a=t.tableData.indexOf(e[o]),s=t.tbody[0].childNodes;if(void 0!=s){var r=s[a],l=r.childNodes[0];l&&l.querySelector(".el-checkbox__input")&&(l.querySelector(".el-checkbox__input").style.visibility="visible")}}}else{t.showFooter=!1;for(var n=0;n<t.tableData.length;n++){var c=t.tbody[0].childNodes;if(void 0!=c){var d=c[n],p=d.childNodes[0];p&&p.querySelector(".el-checkbox__input")&&(p.querySelector(".el-checkbox__input").style.visibility="hidden")}}}t.refreshMainHeight(),t.checkAll=i===t.tableData.length,t.isIndeterminate=i>0&&i<t.tableData.length},closeFooter:function(){this.handleCheckAllChange(!1),this.showFooter=!1,this.refreshMainHeight()},refreshMainHeight:function(){this.mainHeight=parseInt(this.$store.getters.getTopMainHeightFn)-(this.showFooter?45:0)+"px"},hideCheckBoxCell:function(e){return"hideCheckBoxCell"},showCheckbox:function(e,t,i,o){i.parentNode.querySelector(".el-table-column--selection").querySelector(".el-checkbox__input").style.visibility="visible"},hideCheckbox:function(e,t,i,o){var a=i.parentNode.querySelector(".el-table-column--selection").querySelector(".el-checkbox__input");null!=a&&this.checkedRepositorys.indexOf(e)<0&&(a.style.visibility="hidden")},moveFile:function(e){this.moveRepository.type="single";for(var t=0;t<this.tableData.length;t++)if(this.tableData[t].id==e){this.singleSelectedRepository=this.tableData[t];break}console.log(this.singleSelectedRepository),void 0!=this.singleSelectedRepository.id&&null!=this.singleSelectedRepository.id||(this.singleSelectedRepository=this.mainRepository),this.moveRepository.visible=!0},moveFiles:function(){this.moveRepository.type="batch",0!=this.checkedRepositorys.length?this.moveRepository.visible=!0:this.$message({message:"请选择移入的目标文件",type:"warning"})},saveMoveRepositoryResult:function(e){if(0!=e.length){this.moveRepository.visible=!1;var t=this,i=JSON.stringify(t.checkedRepositorys);if("single"==this.moveRepository.type){var o=[];o.push(t.singleSelectedRepository),i=JSON.stringify(o)}var a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_move_save",sourceData:i,targetData:JSON.stringify(e)}};if(t.isHighSecurity&&t.isFileSecurity){for(var s=[],r=0;r<t.checkedRepositorys.length;r++){var l=t.checkedRepositorys[r];s.push(l.id)}var n={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_file_permission_batch_query",uuids:JSON.stringify(s),isSub:!0}};p["a"].post(n).then((function(i){if("ok"==i.result){var o=i.data.checkArr;if(o.length<=0)t.$message.error("无密级访问权限");else{for(var s=[],r=0;r<o.length;r++)for(var l=0;l<t.checkedRepositorys.length;l++)o[r]===t.checkedRepositorys[l].id&&s.push(t.checkedRepositorys[l]);a.data.sourceData=JSON.stringify(s),p["a"].post(a).then((function(i){"ok"==i.result?(t.$message({message:"移动成功",type:"success"}),t.refreshTreeNode&&t.refreshTreeNode(e[0].pid),t.refreshTreeParentNode&&t.refreshTreeParentNode(t.uuid),t.initData()):t.$message({message:i.msg,type:"warning"})})).catch((function(e){console.log(e)}))}}else t.$message(i.msg)})).catch((function(e){console.log(e),t.$message.error(e.msg)}))}else p["a"].post(a).then((function(i){"ok"==i.result?(t.$message({message:"移动成功",type:"success"}),t.refreshTreeNode&&t.refreshTreeNode(e[0].pid),t.refreshTreeParentNode&&t.refreshTreeParentNode(t.uuid),t.initData()):t.$message({message:i.msg,type:"warning"})})).catch((function(e){console.log(e)}))}else this.$message({message:"未选择要移入的目标文件,移动操作被取消",type:"warning"})},copyFiles:function(e){var t=this;t.tableLoading=!0;var i=[];if(e)i.push(e);else for(var o=t.checkedRepositorys,a=0;a<o.length;a++)i.push(o[a].id);var s=t.uuid,r={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_copy_save",targetId:s,sourceIds:JSON.stringify(i),wsId:t.$store.getters.getWsIdFn,teamId:t.$store.getters.getTeamIdFn}};if(t.isHighSecurity&&t.isFileSecurity){var l={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_file_permission_batch_query",uuids:JSON.stringify(i),isSub:!0}};p["a"].post(l).then((function(i){if("ok"==i.result){var o=i.data.checkArr;o.length<=0?(t.tableLoading=!1,t.$message.error("无密级访问权限")):(r.data.sourceIds=JSON.stringify(o),p["a"].post(r).then((function(i){"ok"==i.result?(t.$message({message:"复制成功",type:"success"}),s==e?t.refreshTreeParentNode&&t.refreshTreeParentNode(t.uuid):t.refreshTreeNode&&t.refreshTreeNode(t.uuid),t.initData(),t.tableLoading=!1):(t.tableLoading=!1,t.$message(i.msg))})).catch((function(e){console.log(e)})))}else t.tableLoading=!1,t.$message(i.msg)})).catch((function(e){console.log(e),t.$message.error(e.msg)}))}else p["a"].post(r).then((function(i){"ok"==i.result?(t.$message({message:"复制成功",type:"success"}),s==e?t.refreshTreeParentNode&&t.refreshTreeParentNode(t.uuid):t.refreshTreeNode&&t.refreshTreeNode(t.uuid),t.initData(),t.tableLoading=!1):(t.tableLoading=!1,t.$message(i.msg))})).catch((function(e){console.log(e)}))},exportFiles:function(e){var t=this;t.loading=!0;var i=[];if(e)i.push(e);else for(var o=t.checkedRepositorys,a=0;a<o.length;a++)i.push(o[a].id);var s={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_export_handle",repositoryIds:JSON.stringify(i)}};if(t.isHighSecurity&&t.isFileSecurity){var r={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_file_permission_batch_query",uuids:JSON.stringify(i),isSub:!1}};p["a"].post(r).then((function(e){if("ok"==e.result){var i=e.data.checkArr;i.length<=0?(t.loading=!1,t.$message.error("无密级访问权限")):(s.data.repositoryIds=JSON.stringify(i),p["a"].post(s).then((function(e){if(t.loading=!1,"ok"==e.result){t.$message({message:"导出完成,正在下载...",type:"success"});var i=e.data.exportTitle,o=e.data.exportCount,a=e.data.dcId,s={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_export",exportTitle:i,exportCount:o,dcId:a}};p["a"].post(s).then((function(e){"ok"==e.result?window.open(e.data.downLoadUrl):t.$message(e.msg)})).catch((function(e){console.log(e)}))}else t.$message(e.msg)})).catch((function(e){console.log(e)})))}else t.tableLoading=!1,t.$message(e.msg)})).catch((function(e){console.log(e),t.$message.error(e.msg)}))}else p["a"].post(s).then((function(e){if(t.loading=!1,"ok"==e.result){t.$message({message:"导出完成,正在下载...",type:"success"});var i=e.data.exportTitle,o=e.data.exportCount,a=e.data.dcId,s={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_export",exportTitle:i,exportCount:o,dcId:a}};p["a"].post(s).then((function(e){"ok"==e.result?window.open(e.data.downLoadUrl):t.$message(e.msg)})).catch((function(e){console.log(e)}))}else t.$message(e.msg)})).catch((function(e){console.log(e)}))},removeFiles:function(e){var t=this;this.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",type:"warning"}).then((function(){var i=t,o=[],a=e;if(e)o.push(e);else for(var s=i.checkedRepositorys,r=0;r<s.length;r++)o.push(s[r].id);var l={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_remove",repositoryIds:JSON.stringify(o),wsId:i.$store.getters.getWsIdFn,teamId:i.$store.getters.getTeamIdFn}};if(i.isHighSecurity&&i.isFileSecurity){var n={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_file_permission_batch_query",uuids:JSON.stringify(o),isSub:!0}};p["a"].post(n).then((function(e){if("ok"==e.result){var t=e.data.checkArr;t.length<=0?i.$message.error("无密级访问权限"):(l.data.repositoryIds=JSON.stringify(t),p["a"].post(l).then((function(e){"ok"==e.result?(i.$message({message:"已放入回收站",type:"success"}),i.uuid.length<36?(i.refreshTreeNode&&i.refreshTreeNode(i.uuid),i.initData()):a==i.mainRepository.id?i.refreshTreeParentNode(i.uuid):(i.refreshTreeNode&&i.refreshTreeNode(i.uuid),i.initData())):i.$message(e.msg)})).catch((function(e){console.log(e)})))}else i.tableLoading=!1,i.$message(e.msg)})).catch((function(e){console.log(e),i.$message.error(e.msg)}))}else p["a"].post(l).then((function(e){"ok"==e.result?(i.$message({message:"已放入回收站",type:"success"}),i.uuid.length<36?(i.refreshTreeNode&&i.refreshTreeNode(i.uuid),i.initData()):a==i.mainRepository.id?i.refreshTreeParentNode(i.uuid):(i.refreshTreeNode&&i.refreshTreeNode(i.uuid),i.initData())):i.$message(e.msg)})).catch((function(e){console.log(e)}))})).catch((function(){}))},downloadPng:function(e){var t=this;t.loading=!0;var i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_repository_download_png",uuid:e,type:"image"}};if(t.isHighSecurity&&t.isFileSecurity){var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_file_permission_query",uuid:e}};p["a"].post(o).then((function(e){"ok"==e.result?p["a"].post(i).then((function(e){t.loading=!1,"ok"==e.result?""==e.data.url?t.$message({message:"检测到尚未进行作图,下载被取消",type:"warning"}):(t.$message({message:"创建图片完成,正在下载...",type:"success"}),window.open(e.data.url)):t.$message(e.msg)})).catch((function(e){console.log(e)})):(t.loading=!1,t.$message.error(e.msg))})).catch((function(e){console.log(e),t.loading=!1,t.$message.error(e.msg)}))}else p["a"].post(i).then((function(e){t.loading=!1,"ok"==e.result?""==e.data.url?t.$message({message:"检测到尚未进行作图,下载被取消",type:"warning"}):(t.$message({message:"创建图片完成,正在下载...",type:"success"}),window.open(e.data.url)):t.$message(e.msg)})).catch((function(e){console.log(e)}))},eteCascadeAnalysis:function(e){var t=this.$store.getters.getWsIdFn,i=this.$store.getters.getTeamIdFn,o="com.actionsoft.apps.coe.pal.processlink",a=this;if(a.isHighSecurity&&a.isFileSecurity){var s={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_file_permission_query",uuid:e}};p["a"].post(s).then((function(s){"ok"==s.result?Object(y["b"])("cascadeAnalysis",a.$store.state.sessionId,"com.actionsoft.apps.coe.pal.processlink_ete_analysis_home",{wsId:t,teamId:i,appId:o,uuid:e}):a.$message.error(s.msg)})).catch((function(e){console.log(e),a.$message.error(e.msg)}))}else Object(y["b"])("cascadeAnalysis",this.$store.state.sessionId,"com.actionsoft.apps.coe.pal.processlink_ete_analysis_home",{wsId:t,teamId:i,appId:o,uuid:e})},createOutputPr:function(e){var t=this,i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_outputreport_output_process_create",wsId:t.$store.getters.getWsIdFn,teamId:t.$store.getters.getTeamIdFn,fileId:e}};if(t.isHighSecurity&&t.isFileSecurity){var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_file_permission_query",uuid:e}};p["a"].post(o).then((function(e){"ok"==e.result?p["a"].post(i).then((function(e){if("ok"==e.result){var t=e.data.taskId;setTimeout((function(){var e={url:"jd",data:{taskId:t,cmd:"com.actionsoft.apps.coe.pal_outputreport_output_process_preview"}};p["a"].post(e).then((function(e){"ok"==e.result&&window.open(e.data.url)})).catch((function(e){console.log(e)}))}),2e3)}})).catch((function(e){console.log(e)})):t.$message.error(e.msg)})).catch((function(e){console.log(e),t.$message.error(e.msg)}))}else p["a"].post(i).then((function(e){if("ok"==e.result){var t=e.data.taskId;setTimeout((function(){var e={url:"jd",data:{taskId:t,cmd:"com.actionsoft.apps.coe.pal_outputreport_output_process_preview"}};p["a"].post(e).then((function(e){"ok"==e.result&&window.open(e.data.url)})).catch((function(e){console.log(e)}))}),2e3)}})).catch((function(e){console.log(e)}))},openRepositoryInfo:function(e){var t=this;if(t.isHighSecurity&&t.isFileSecurity){var i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_file_permission_query",uuid:t.currRepositoryDetail.id}};p["a"].post(i).then((function(i){"ok"==i.result?t.$refs.repositoryInfo.openRepositoryInfoDlg(t,t.currRepositoryDetail.id,t.currRepositoryDetail.version,e,t.currRepositoryDetail.isUse,t.currRepositoryDetail.isPublish,t.currRepositoryDetail.isStop,t.currRepositoryDetail.isApproval,t.currRepositoryDetail.methodId):t.$message.error(i.msg)})).catch((function(e){console.log(e),t.$message.error(e.msg)}))}else this.$refs.repositoryInfo.openRepositoryInfoDlg(this,this.currRepositoryDetail.id,this.currRepositoryDetail.version,e,this.currRepositoryDetail.isUse,this.currRepositoryDetail.isPublish,this.currRepositoryDetail.isStop,this.currRepositoryDetail.isApproval,this.currRepositoryDetail.methodId)},positionRepositoryPath:function(e,t){for(var i=[],o=0;o<this.repositoryPathData.length;o++){var a=this.repositoryPathData[o].versionId;if(i.push(a),a==e)break}this.$router.push({path:"/Repository",query:{id:e,versionId:t,path:i.join(","),param:Math.random()}})},positionTableRoleRepository:function(e,t,i,o){if(0!=i){for(var a=!1,s=[],r=0;r<this.repositoryPathData.length;r++){var l=this.repositoryPathData[r].versionId;if(s.push(l),l==t){a=!0;break}}a||s.push(t),this.$router.push({path:"/Repository",query:{id:e,versionId:t,path:s.join(","),param:Math.random()}})}else o?this.$message("已经到最后一级了"):this.openDesigner(e)},repositoryRefresh:function(e){this.refreshTreeParentNode&&this.refreshTreeParentNode(e),this.initData()},rowDrop:function(){var e=document.querySelector(".el-table__body-wrapper tbody"),t=this;ge["a"].create(e,{animation:1e3,direction:"vertical",forceFallback:!0,filter:".rowDropFilter",onEnd:function(e){var i=e.oldIndex,a=e.newIndex;if(i!=a){var s=t.tableData[i],r=t.tableData[a],l=t.$store.getters.getWsIdFn,n={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_repository_order_index_update",wsId:l,currentId:s.id,originId:r.id}};p["a"].post(n).then((function(e){t.refreshTreeNode&&t.refreshTreeNode(t.uuid),e.data.updateFlag?t.$message({message:e.data.desc,type:"success"}):t.$message({showClose:!1,message:e.data.desc,type:"error"})})).catch((function(e){t.$message({showClose:!1,message:"服务调用失败",type:"error"}),o}))}}})},batchCreateFn:function(){this.batchCreate.visible=!0},closeBatchCreateFn:function(){this.batchCreate.visible=!1},batchReplaceFn:function(){this.batchReplace.visible=!0},closeBatchReplaceFn:function(){this.batchReplace.visible=!1}},computed:{tbody:function(){return this.$refs.repositorysDiv.querySelector(".el-table__body-wrapper").querySelector(".el-table__body").getElementsByTagName("tbody")},listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(e,t){this.mainHeight=parseInt(e)-(this.showFooter?45:0)+"px"}}},Re=ke,$e=(i("40c1"),Object(f["a"])(Re,U,W,!1,null,"6b93b910",null)),Te=$e.exports,Ne={name:"Repository",components:{RepositoryMain:w,RepositoryMainList:B,RepositoryList:Te},data:function(){return{mainHeight:parseInt(this.$store.getters.getTopMainHeightFn)+"px",mainContent:"",uuid:"",reFresh:!1,treeNode:{}}},provide:function(){return{openRepositoryList:this.openRepositoryList,transferTreeNode:this.transferTreeNode}},created:function(){this.getRouteParam(this.$route.query)},methods:{getRouteParam:function(e){var t=this;"{}"!=JSON.stringify(e)&&e.id?this.$refs.repositoryMain.queryTreeByIdAndPath(e.id,e.versionId,e.path):(this.reFresh=!1,this.mainContent="",this.$nextTick((function(){t.reFresh=!0,t.mainContent="RepositoryMainList"})))},openRepositoryList:function(e){this.mainContent="",this.uuid=e,this.mainContent="RepositoryList"},transferTreeNode:function(e){this.treeNode=e},refreshTreeParentNode:function(e){this.$refs.repositoryMain.refreshParentNode(e)},refreshTreeNode:function(e){this.$refs.repositoryMain.refreshNode(e)}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn},listenWsId:function(){return this.$store.getters.getWsIdFn},listenTeamId:function(){return this.$store.getters.getTeamIdFn}},watch:{listenTopMainHeight:function(e,t){this.mainHeight=parseInt(e)+"px"},listenWsId:function(e,t){var i=this;this.reFresh=!1,this.mainContent="",this.$nextTick((function(){i.reFresh=!0,i.mainContent="RepositoryMainList"}))},listenTeamId:function(e,t){var i=this;this.reFresh=!1,this.mainContent="",this.$nextTick((function(){i.reFresh=!0,i.mainContent="RepositoryMainList"}))}},beforeRouteUpdate:function(e,t,i){this.getRouteParam(e.query),i()}},Pe=Ne,Le=(i("7304"),Object(f["a"])(Pe,a,s,!1,null,"1940ea76",null));t["default"]=Le.exports},"9ae6":function(e,t,i){},a0b6:function(e,t,i){},a9ad:function(e,t,i){"use strict";i("a0b6")},b142:function(e,t,i){"use strict";i("9ae6")},b370:function(e,t,i){"use strict";i("3b30")},ba8c:function(e,t,i){"use strict";i("6f9be")},bd13:function(e,t,i){},caf8:function(e,t,i){"use strict";i("0d4cb")},cc00:function(e,t,i){},cd6b:function(e,t,i){"use strict";i("49c1")},e21c:function(e,t,i){},ea48:function(e,t,i){"use strict";i("2ca7")}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-b9b8e2d8.669e032d.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-b9b8e2d8.669e032d.js
                                                  new file mode 100644
                                                  index 00000000..d365beac
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-b9b8e2d8.669e032d.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-b9b8e2d8"],{"0006":function(e,t,a){"use strict";a("348b")},"0f2a":function(e,t,a){},1337:function(e,t,a){"use strict";a.d(t,"c",(function(){return i})),a.d(t,"b",(function(){return o})),a.d(t,"d",(function(){return s})),a.d(t,"a",(function(){return n})),a.d(t,"e",(function(){return r}));var o=function(e,t,a,o,s){o||(o={}),o.cmd=a,o.sid=t,i(e,wHref,o,s)},i=function(e,t,a,o){var i=document.getElementById(e);i&&document.body.removeChild(i);var s=document.createElement("form");for(var n in s.action=t,s.target=void 0==o?"_blank":o,s.method="get",s.style.display="none",a){var r=document.createElement("textarea");r.name=n,r.value=a[n],s.appendChild(r)}s.setAttribute("id",e),document.body.appendChild(s),s.submit()},s=function(e,t,a){o("palDesigner",a,"com.actionsoft.apps.coe.pal_pl_repository_designer",{uuid:t,teamId:e})},n=function(e,t){var a=e;while(a.nodeName!=t&&"BODY"!=a.nodeName)a=a.parentNode;return a.nodeName==t?a:null},r=function(e){document.getElementsByTagName("title")[0].innerText=e}},"14d3":function(e,t,a){},"1b8b":function(e,t,a){"use strict";a("d8f1")},"2b87":function(e,t,a){"use strict";a("75e6")},"2c36":function(e,t,a){"use strict";a("0f2a")},"348b":function(e,t,a){},"37dc":function(e,t,a){"use strict";a("6aad")},"50ad":function(e,t,a){},5551:function(e,t,a){},"5a2a":function(e,t,a){"use strict";a("14d3")},"5cea":function(e,t,a){"use strict";a("8724")},"5d66":function(e,t,a){"use strict";var o=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-dialog",{staticClass:"workspace-update",attrs:{title:e.title,visible:e.dialogVisible,"close-on-click-modal":!1,width:"450px","before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t}}},[a("div",{staticStyle:{border:"1px solid #F2F2F2",padding:"0px 10px 10px 10px"}},[a("awsui-form",{ref:"ruleForm",attrs:{model:e.ruleForm,"label-position":"top",rules:e.rules}},[a("awsui-form-item",{attrs:{label:"名称",prop:"name"}},[a("awsui-input",{attrs:{placeholder:"公司名称或项目名称",maxlength:"36","validate-event":!1},model:{value:e.ruleForm.name,callback:function(t){e.$set(e.ruleForm,"name",t)},expression:"ruleForm.name"}})],1),a("awsui-form-item",{attrs:{label:"描述"}},[a("awsui-input",{attrs:{type:"textarea",placeholder:"请输入描述",maxlength:"255","show-word-limit":""},model:{value:e.ruleForm.desc,callback:function(t){e.$set(e.ruleForm,"desc",t)},expression:"ruleForm.desc"}})],1),a("awsui-form-item",{attrs:{label:"管理员",prop:"admin"}},[a("awsui-select",{attrs:{options:e.adminOptions,multiple:"",placeholder:"请选择管理员","validate-event":!1},on:{change:e.updateAdminData},model:{value:e.ruleForm.admin,callback:function(t){e.$set(e.ruleForm,"admin",t)},expression:"ruleForm.admin"}})],1),a("awsui-form-item",{attrs:{label:"分类方法"}},[a("div",[a("el-radio-group",{attrs:{fill:"#4E7FF9",size:"mini",disabled:""!=e.wsId},model:{value:e.ruleForm.type,callback:function(t){e.$set(e.ruleForm,"type",t)},expression:"ruleForm.type"}},[a("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:"bottom-start"}},[a("span",{attrs:{slot:"content"},slot:"content"},[e._v('二分法流程分为"核心经营流程"和"支持管理流程"')]),a("el-radio-button",{attrs:{label:"二分法"}})],1),a("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:"bottom-start"}},[a("span",{attrs:{slot:"content"},slot:"content"},[e._v('三分法流程分为"战略流程"、"运营流程"和"支持流程"')]),a("el-radio-button",{attrs:{label:"三分法"}})],1),a("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:"bottom-start"}},[a("span",{attrs:{slot:"content"},slot:"content"},[e._v("可自己定义流程结构")]),a("el-radio-button",{attrs:{label:"自定义"}})],1)],1)],1)])],1)],1),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{staticClass:"button-general-color",attrs:{disabled:e.buttonDisabled,type:"primary"},on:{click:e.save}},[e._v("确定")]),a("awsui-button",{on:{click:function(t){return e.cancel()}}},[e._v("取消")])],1)])},i=[],s=a("0f08"),n={name:"WorkspaceUpdate",data:function(){return{title:"新建资产库",buttonDisabled:!1,wsId:"",dialogVisible:!1,adminOptions:[],obj:null,ruleForm:{name:"",desc:"",admin:"",type:"二分法"},rules:{name:[{required:!0,message:"请输入资产库名称",trigger:"blur"}],admin:[{required:!0,message:"请选择管理员",trigger:"change"}]}}},mounted:function(){},methods:{openUpdateWsDlg:function(e,t,a){"create"==e?(this.title="新建资产库",this.obj=a):(this.title="修改资产库",this.wsId=t,this.obj=a),this.initData(),this.dialogVisible=!0},cancel:function(){this.$refs["ruleForm"].resetFields(),this.buttonDisabled=!1,this.dialogVisible=!1},handleClose:function(e){this.buttonDisabled=!1,this.$refs["ruleForm"].resetFields(),e()},initData:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_update_data_query",wsId:e.wsId}};s["a"].post(t).then((function(t){if("ok"==t.result){var a=t.data;e.ruleForm.name=a.name,e.ruleForm.type=0==a.type?"二分法":1==a.type?"三分法":"自定义",e.ruleForm.desc=a.desc,e.ruleForm.admin=a.admin,e.adminOptions=a.adminOptions}else e.$message.error(t.msg)})).catch((function(e){console.log(e)}))},updateAdminData:function(e){this.ruleForm.admin=e},save:function(){var e=this,t=e.ruleForm.name,a=e.ruleForm.desc,o=e.ruleForm.admin;if(""!=t)if(t.length>36)e.$message({message:"[名称]不允许超过36个字",type:"warning"});else if(a.length>255)e.$message({message:"[描述]不允许超过255个字符",type:"warning"});else if(0!=o.length){e.buttonDisabled=!0;var i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_update_save",wsId:e.wsId,name:e.ruleForm.name,type:"二分法"==e.ruleForm.type?0:"三分法"==e.ruleForm.type?1:2,desc:e.ruleForm.desc,admin:e.ruleForm.admin.join(",")}};s["a"].post(i).then((function(t){"ok"==t.result?(e.$message({message:t.msg,duration:2e3,type:"success"}),e.cancel(),null!=e.obj&&e.obj.updateWorkspaceCallback()):e.$message.error(t.msg),e.buttonDisabled=!1})).catch((function(e){console.log(e)}))}else e.$message({message:"[管理员]不允许为空",type:"warning"});else e.$message({message:"[名称]不允许为空",type:"warning"})}}},r=n,l=(a("ffd2"),a("cba8")),c=Object(l["a"])(r,o,i,!1,null,"08929cd1",null);t["a"]=c.exports},"5f17":function(e,t,a){},6359:function(e,t,a){"use strict";a("50ad")},"6aad":function(e,t,a){},"75e6":function(e,t,a){},"7d43":function(e,t,a){},"83af":function(e,t,a){},"83e3":function(e,t,a){"use strict";a("5f17")},8724:function(e,t,a){},"896b":function(e,t,a){"use strict";var o=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-dialog",{staticClass:"workspace-import",attrs:{title:"导入资产库",visible:e.dialogVisible,"close-on-click-modal":!1,"destroy-on-close":!0,width:"450px","before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t},closed:e.restoreParam}},[a("div",{directives:[{name:"show",rawName:"v-show",value:e.step1,expression:"step1"}],staticStyle:{height:"250px","text-align":"center"},attrs:{id:"step1"}},[a("div",{staticStyle:{position:"relative",top:"35%"}},[a("div",{staticStyle:{"margin-bottom":"25px"}},[a("awsui-button",{class:{"button-general-color":"local"==e.clickUploadButton,"button-general-color-reverse":"server"==e.clickUploadButton},staticStyle:{width:"130px"},attrs:{type:"local"==e.clickUploadButton?"primary":""},on:{click:function(t){return e.localImport(!0,!0)}}},[e._v("本地文件上传")])],1),a("div",[a("awsui-button",{class:{"button-general-color":"server"==e.clickUploadButton,"button-general-color-reverse":"local"==e.clickUploadButton},staticStyle:{width:"130px"},attrs:{type:"server"==e.clickUploadButton?"primary":""},on:{click:function(t){return e.serverImport(!0,!0)}}},[e._v("服务器文件导入")])],1)])]),a("div",{directives:[{name:"show",rawName:"v-show",value:e.step2,expression:"step2"},{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{height:"250px"},attrs:{id:"step2"}},[a("div",{staticStyle:{"text-align":"center","padding-top":"30px"}},[a("awsui-button",{class:{"button-general-color":"local"==e.clickUploadButton,"button-general-color-reverse":"server"==e.clickUploadButton},staticStyle:{width:"130px"},attrs:{type:"local"==e.clickUploadButton?"primary":""},on:{click:function(t){return e.localImport(!1,!0)}}},[e._v("本地文件上传")]),a("awsui-button",{class:{"button-general-color":"server"==e.clickUploadButton,"button-general-color-reverse":"local"==e.clickUploadButton},staticStyle:{width:"130px"},attrs:{type:"server"==e.clickUploadButton?"primary":""},on:{click:function(t){return e.serverImport(!0,!0)}}},[e._v("服务器文件导入")])],1),a("div",{directives:[{name:"show",rawName:"v-show",value:"local"==e.source,expression:"source == 'local'"}],staticStyle:{height:"100px",margin:"10px 10px"}},[a("PALUpload",{ref:"palUpload",staticClass:"upload-demo",staticStyle:{width:"100%"},attrs:{appId:"com.actionsoft.apps.coe.pal",repositoryName:"tmp",groupValue:"Normal",fileValue:"Normal","on-preview":e.handlePreview,"on-success":e.handleSuccess,"on-remove":e.handleRemove,"on-error":e.handleError,"before-remove":e.beforeRemove,"before-upload":e.beforeUpload,limit:1,"on-exceed":e.handleExceed,accept:".bak","file-list":e.fileList}},[a("div",{staticStyle:{display:"none"}},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"130px"},attrs:{id:"selectFileButton",type:"primary"}},[e._v("本地文件上传")])],1)])],1),a("div",{directives:[{name:"show",rawName:"v-show",value:"remote"==e.source,expression:"source == 'remote'"}],staticStyle:{height:"70px",margin:"40px 10px 0px 10px"}},[a("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"请选择",size:"mini","no-data-text":"无资产库文件"},on:{change:e.changeServerValue},model:{value:e.serverValue,callback:function(t){e.serverValue=t},expression:"serverValue"}},e._l(e.serverOptions,(function(e){return a("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1)],1),a("div",{directives:[{name:"show",rawName:"v-show",value:e.wsIsExist,expression:"wsIsExist"}],staticStyle:{margin:"10px"}},[a("el-form",[a("el-form-item",{attrs:{label:"已存在资产库处理方法",prop:"resource"}},[a("el-radio-group",{model:{value:e.replaceType,callback:function(t){e.replaceType=t},expression:"replaceType"}},[a("el-radio",{attrs:{label:"replace"}},[e._v("替换")]),a("el-radio",{attrs:{label:"skip"}},[e._v("跳过")])],1)],1)],1)],1)]),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{staticClass:"button-general-color",attrs:{disabled:e.buttonDisabled,type:"primary"},on:{click:e.save}},[e._v("确定")]),a("awsui-button",{on:{click:function(t){return e.cancel()}}},[e._v("取消")])],1)])},i=[],s=a("6c2f"),n=a("0f08"),r={name:"WorkspaceImport",components:{PALUpload:s["a"]},data:function(){return{buttonDisabled:!1,dialogVisible:!1,clickUploadButton:"local",step1:!0,step2:!1,source:"",wsIsExist:!1,fileList:[],serverOptions:[],serverValue:"",replaceType:"replace",wsFileName:"",loading:!1,obj:null}},methods:{openImportWsDlg:function(e){this.dialogVisible=!0,this.obj=e},handleClose:function(e){e()},restoreParam:function(){this.buttonDisabled=!1,this.loading=!1,this.dialogVisible=!1,this.step1=!0,this.step2=!1,this.source="",this.wsIsExist=!1,this.fileList=[],this.serverOptions=[],this.serverValue="",this.replaceType="replace",this.wsFileName=""},cancel:function(){this.dialogVisible=!1},changeServerValue:function(){var e=this;e.wsIsExist=!1,e.replaceType="replace",e.wsFileName=e.serverValue,e.loading=!0,e.buttonDisabled=!0;var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_is_exist",wsFileName:e.wsFileName,source:e.source}};n["a"].post(t).then((function(t){"ok"==t.result?"exist"==t.data.message?(e.replaceType="replace",e.wsIsExist=!0):(e.replaceType="replace",e.wsIsExist=!1):e.$message.error(t.msg),e.loading=!1,e.buttonDisabled=!1})).catch((function(e){console.log(e)}))},localImport:function(e,t){this.clickUploadButton="local",t&&(this.$refs.palUpload.clearFiles(),this.source="local",document.getElementById("selectFileButton").click()),e&&(this.step1=!1,this.step2=!0),this.wsIsExist=!1,this.replaceType="replace",this.wsFileName=""},serverImport:function(e){this.clickUploadButton="server";var t=this,a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_remote_import_query"}};n["a"].post(a).then((function(e){"ok"==e.result?t.serverOptions=e.data.impRepsitorys:t.$message.error(e.msg)})).catch((function(e){console.log(e)})),e&&(t.step1=!1,t.step2=!0),t.serverOptions=[],t.serverValue="",t.source="remote",t.wsIsExist=!1,t.replaceType="replace",t.wsFileName=""},save:function(){var e=this;if(""!=e.wsFileName){e.buttonDisabled=!0,e.loading=!0;var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_save_import",wsFileName:e.wsFileName,replaceChoice:e.replaceType,source:e.source}};n["a"].post(t).then((function(t){"ok"==t.result?(console.log("导入资产库["+t.data.wsName+"]["+t.data.wsId+"]成功"),e.$message({message:t.msg,duration:2e3,type:"success"}),e.cancel(),null!=e.obj&&e.obj.importWorkspaceCallback()):(e.loading=!1,e.buttonDisabled=!1,e.$message.error(t.msg))})).catch((function(e){console.log(e)}))}else e.$message({message:"请"+("local"==e.clickUploadButton?"上传":"选择")+"需要导入的文件",type:"warning"})},handleRemove:function(e,t){console.log(e,t)},handlePreview:function(e){console.log(e)},handleExceed:function(e,t){},handleError:function(e,t,a){},beforeUpload:function(e){if(e.size/1024/1024>2048)return this.$message.warning("文件过大,请联系管理员将需上传的文件放在在服务器/doccenter/com.actionsoft.apps.coe.pal/tmp/imp/repository目录下使用服务器上传方式上传"),!1},handleSuccess:function(e,t,a){var o=this;o.buttonDisabled=!0,o.loading=!0,o.wsFileName=t.name;var i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_is_exist",wsFileName:o.wsFileName,source:o.source}};n["a"].post(i).then((function(e){"ok"==e.result?"exist"==e.data.message?(o.replaceType="replace",o.wsIsExist=!0):(o.replaceType="replace",o.wsIsExist=!1):o.$message.error(e.msg),o.buttonDisabled=!1,o.loading=!1})).catch((function(e){console.log(e)}))},beforeRemove:function(e,t){e.status,this.wsFileName="",this.wsIsExist=!1}}},l=r,c=(a("2b87"),a("cba8")),d=Object(c["a"])(l,o,i,!1,null,"4fcb9135",null);t["a"]=d.exports},"8d9c":function(e,t,a){},"9d38":function(e,t,a){},a88e:function(e,t,a){},aa17:function(e,t,a){"use strict";a("8d9c")},c533:function(e,t,a){"use strict";a("a88e")},cd56:function(e,t,a){"use strict";a.r(t);var o=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{attrs:{id:"main"},on:{click:e.clickDomEvent}},[a("el-container",[a("el-header",{staticStyle:{padding:"0px"},attrs:{id:"header",height:"56px"}},[a("Navigation",{ref:"navigation"})],1),a("el-main",{staticStyle:{position:"relative"},style:{padding:0,height:e.bodyHeight}},[a("div",{staticClass:"main"},[a("awsui-sidebar",{attrs:{visible:e.drawer,direction:e.direction,size:"100%","append-to-body":!1,"show-close":!1,withHeader:!1,"wrapper-closable":!1,modal:!1},on:{"update:visible":function(t){e.drawer=t},opened:e.openAppIframe}},[a("div",{staticStyle:{position:"relative",width:"100%",height:"100%"}},[""==e.nonAppComponent?a("div",{key:"appContent",staticStyle:{width:"100%",height:"100%"},attrs:{id:"appContent"}}):e._e(),""!=e.nonAppComponent?a("div",{key:"nonAppComponent",staticStyle:{width:"100%",height:"100%"},attrs:{id:"nonAppComponent"}},[a(e.nonAppComponent,{ref:"component",tag:"component",attrs:{wsId:e.wsId}})],1):e._e()])])],1),a("div",{staticClass:"main"},[a("awsui-sidebar",{attrs:{visible:e.cooperation.drawer,direction:e.direction,size:"100%","append-to-body":!1,"show-close":!1,withHeader:!1,"wrapper-closable":!1,modal:!1},on:{"update:visible":function(t){return e.$set(e.cooperation,"drawer",t)},opened:e.openCooperationIframe}},[a("div",{staticStyle:{position:"relative",width:"100%",height:"100%"}},[a("div",{staticStyle:{cursor:"pointer",height:"20px",width:"15px","background-color":"#F5F7FA",position:"absolute",top:"10px","line-height":"20px","vertical-align":"middle"},on:{click:e.closeCooperationDrawer}},[a("i",{staticClass:"iconfont"},[e._v("")])]),""==e.nonAppComponent?a("div",{key:"cooperationContent",staticStyle:{width:"100%",height:"100%"},attrs:{id:"cooperationContent"}}):e._e()])])],1),a("div",[a("PwdChange",{ref:"pwdChange"})],1),a("router-view",{key:e.key})],1)],1)],1)},i=[],s=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-container",[a("el-header",{staticClass:"el-header",attrs:{height:"100%"}},[a("div",{staticClass:"header-row"},[a("div",{staticClass:"nav-left",staticStyle:{"min-width":"300px","text-align":"left"}},["0"==e.mainType?a("div",{staticClass:"inline-block header-font text-general-color"},[e._v("AWS PAL资产库")]):e._e(),"1"==e.mainType?a("div",{staticClass:"inline-block",attrs:{id:"ws-select"}},[a("div",{staticClass:"icon-main-div cursor-pointer",style:{"background-color":e.mainIcon.color},on:{mouseenter:function(){e.mainIcon.code="&#59139;",e.mainIcon.color="#6d97ff"},mouseleave:function(){e.mainIcon.code=e.mainIconTemp.code,e.mainIcon.color=e.mainIconTemp.color},click:e.returnMainPage}},[a("i",{staticClass:"awsui-iconfont icon-i-ws",domProps:{innerHTML:e._s(e.mainIcon.code)}})]),a("el-dropdown",{attrs:{trigger:"click"},on:{command:e.handleWsCommand,"visible-change":e.changeDropDownArrow}},[a("span",{staticClass:"el-dropdown-link header-font cursor-pointer text-general-color"},[e._v(" "+e._s(e.wsLabel)),a("i",{staticClass:"awsui-iconfont",staticStyle:{"margin-left":"5px","font-size":"14px"},domProps:{innerHTML:e._s("down"==e.arrowTip?"&#xe716;":"&#xe718;")}})]),a("el-dropdown-menu",{staticClass:"navigation-dropdown-area",attrs:{slot:"dropdown"},slot:"dropdown"},[e._l(e.wsOptions,(function(t){return[a("el-dropdown-item",{staticClass:"el-dropdown-row",attrs:{command:t.value}},[a("div",{staticClass:"inline-block text-general-color",staticStyle:{height:"100%",width:"80%"}},[a("span",{staticStyle:{"font-size":"14px"}},[e._v(e._s(t.label))])]),a("div",{staticClass:"inline-block",staticStyle:{width:"20%"}},[a("i",{class:["el-icon-check","text-linker-color",{"icon-check-display":t.value!=e.wsValue}],staticStyle:{float:"right"}})])])]})),a("el-dropdown-item",{attrs:{divided:""}}),a("el-dropdown-item",{staticClass:"text-linker-color el-dropdown-row",attrs:{command:"create"}},[a("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[a("i",{staticClass:"iconfont icon-xinjian",staticStyle:{"font-size":"14px"}}),a("span",[e._v("新建资产库")])])]),a("el-dropdown-item",{staticClass:"text-linker-color el-dropdown-row",attrs:{command:"import"}},[a("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[a("i",{staticClass:"iconfont awsui-iconfont-sousuo1",staticStyle:{"font-size":"14px"}}),a("span",[e._v("导入资产库")])])]),a("el-dropdown-item",{staticClass:"text-general-color el-dropdown-row",attrs:{command:"manage"}},[a("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[a("i",{staticClass:"iconfont awsui-iconfont-zengjia",staticStyle:{"font-size":"14px"}}),a("span",[e._v("管理资产库")])])])],2)],1)],1):e._e(),"2"==e.mainType?a("div",{staticClass:"inline-block header-font text-general-color"},[e._v("AWS PAL小组")]):e._e(),"3"==e.mainType?a("div",{staticClass:"inline-block",attrs:{id:"team-select"}},[a("div",{staticClass:"icon-main-div cursor-pointer",style:{"background-color":e.mainIcon.color},on:{mouseenter:function(){e.mainIcon.code="&#59139;",e.mainIcon.color="#6d97ff"},mouseleave:function(){e.mainIcon.code=e.mainIconTemp.code,e.mainIcon.color=e.mainIconTemp.color},click:e.returnMainPage}},[a("i",{staticClass:"awsui-iconfont icon-i-ws",domProps:{innerHTML:e._s(e.mainIcon.code)}})]),a("el-dropdown",{attrs:{trigger:"click"},on:{command:e.handleTeamCommand,"visible-change":e.changeDropDownArrow}},[a("span",{staticClass:"el-dropdown-link header-font cursor-pointer text-general-color"},[e._v(" "+e._s(e.teamLabel)),a("i",{staticClass:"awsui-iconfont",staticStyle:{"margin-left":"5px","font-size":"14px"},domProps:{innerHTML:e._s("down"==e.arrowTip?"&#xe716;":"&#xe718;")}})]),a("el-dropdown-menu",{staticClass:"navigation-dropdown-area",attrs:{slot:"dropdown"},slot:"dropdown"},[e._l(e.teamOptions,(function(t){return[a("el-dropdown-item",{staticClass:"el-dropdown-row",attrs:{command:t.value}},[a("div",{staticClass:"inline-block text-general-color",staticStyle:{height:"100%",width:"80%"}},[a("span",{staticStyle:{"font-size":"14px"}},[e._v(e._s(t.label))])]),a("div",{staticClass:"inline-block",staticStyle:{width:"20%"}},[a("i",{class:["el-icon-check","text-linker-color",{"icon-check-display":t.value!=e.teamValue}],staticStyle:{float:"right"}})])])]})),e.isManage&&e.isTeamManager||e.isTeamManager?a("el-dropdown-item",{attrs:{divided:""}}):e._e(),e.isManage&&e.isTeamManager?a("el-dropdown-item",{staticClass:"text-linker-color el-dropdown-row",attrs:{command:"create"}},[a("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[a("i",{staticClass:"iconfont icon-xinjian",staticStyle:{"font-size":"14px"}}),a("span",[e._v("新建小组")])])]):e._e(),e.isTeamManager?a("el-dropdown-item",{staticClass:"text-general-color el-dropdown-row",attrs:{command:"manage"}},[a("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[a("i",{staticClass:"iconfont awsui-iconfont-zengjia",staticStyle:{"font-size":"14px"}}),a("span",[e._v("管理小组")])])]):e._e()],2)],1)],1):e._e(),"4"==e.mainType?a("div",{staticClass:"inline-block header-font text-general-color"},[e._v("AWS PAL管理中心")]):e._e()]),a("div",{staticClass:"nav-center",staticStyle:{width:"350px"}},["1"==e.mainType||"3"==e.mainType?a("div",{staticStyle:{position:"relative"},attrs:{id:"repositoryQueryArea"},on:{click:function(t){return t.stopPropagation(),e.keepRepositoryQuery.apply(null,arguments)}}},[a("el-input",{staticStyle:{width:"350px"},attrs:{size:"small",placeholder:"搜索文件"},on:{input:e.basicQuery},model:{value:e.queryInput,callback:function(t){e.queryInput=t},expression:"queryInput"}},[a("i",{staticClass:"inline-block awsui-iconfont",attrs:{slot:"prefix"},slot:"prefix"},[e._v("")]),a("i",{staticClass:"inline-block awsui-iconfont",staticStyle:{cursor:"pointer"},attrs:{slot:"suffix"},on:{click:e.conditionQuery},slot:"suffix"},[e._v("")])]),a("RepositoryQuery",{ref:"repositoryQuery",staticStyle:{"line-height":"normal !important"},attrs:{queryInput:e.queryInput}})],1):e._e()]),a("div",{staticClass:"nav-right"},[a("ul",{staticClass:"nav-right-ul"},[a("li",[a("div",[a("el-dropdown",{ref:"userDropDownMenu",attrs:{"hide-on-click":!0,trigger:"click"},on:{command:e.handleUserCommand}},[a("span",{staticClass:"inline-block user_photo_dropdown_span cursor-pointer"},[a("img",{staticClass:"user_photo_img radius3",attrs:{src:e.userPhoto}})]),a("el-dropdown-menu",{staticClass:"text-general-color",staticStyle:{width:"200px"},attrs:{slot:"dropdown"},slot:"dropdown"},["4"!=e.mainType&&e.isManage?a("el-dropdown-item",{staticClass:"el-dropdown-row",attrs:{command:"manage"}},[a("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[a("span",{staticStyle:{"font-size":"14px"}},[e._v("管理中心")])])]):e._e(),"4"!=e.mainType&&e.isManage?a("el-dropdown-item",{attrs:{divided:""}}):e._e(),a("el-dropdown-item",{staticClass:"el-dropdown-row",attrs:{command:"bbs"}},[a("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[a("span",{staticStyle:{"font-size":"14px"}},[e._v("研习社")])])]),a("el-dropdown-item",{staticClass:"el-dropdown-row",attrs:{command:"help"}},[a("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[a("span",{staticStyle:{"font-size":"14px"}},[e._v("帮助文档")])])]),a("el-dropdown-item",{attrs:{divided:""}}),e.isChangePwd()?a("el-dropdown-item",{staticClass:"el-dropdown-row",attrs:{command:"updatePwd"}},[a("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[a("span",{staticStyle:{"font-size":"14px"}},[e._v("修改密码")])])]):e._e(),a("el-dropdown-item",{staticClass:"el-dropdown-row",attrs:{command:"logout"}},[a("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[a("span",{staticStyle:{"font-size":"14px"}},[e._v("退出登录")])])])],1)],1)],1)]),e.isSecAdminUser?e._e():["2"!=e.mainType&&"4"!=e.mainType&&"0"!=e.mainType?a("li",[a("div",{staticClass:"inline-block",staticStyle:{"line-height":"20px","vertical-align":"middle","margin-left":"10px","margin-right":"10px"}},[a("div",{staticStyle:{width:"1px",height:"20px","border-left":"1px solid #f2f2f2","margin-left":"5px","margin-right":"5px"}})])]):e._e(),"2"!=e.mainType&&"4"!=e.mainType&&"0"!=e.mainType?a("li",{directives:[{name:"show",rawName:"v-show",value:!e.showAppDetail,expression:"!showAppDetail"}]},[a("div",{attrs:{id:"appPopover"}},[a("el-popover",{ref:"appPopover",attrs:{placement:"top-start",title:"应用中心","open-delay":250,trigger:"click"}},[a("ul",{staticClass:"nav-app-list-ul"},e._l(Math.ceil(e.appList.length/5),(function(t){return a("li",{staticClass:"inline-block",staticStyle:{"vertical-align":"top"}},[e._l(e.appList.slice(5*(t-1),5*t),(function(t){return[a("div",{staticClass:"app-div general-bgcolor-hover cursor-pointer",on:{click:function(a){return e.openApp(t.appId,t.clazzName,t.name,t.icon.icon,t.icon.color)}}},[a("div",{staticClass:"inline-block app-icon-div",style:{background:t.icon.color}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{"font-size":"18px",color:"#fff"},domProps:{innerHTML:e._s(t.icon.icon)}})]),a("div",{staticClass:"inline-block app-text-div"},[a("div",[a("p",{staticClass:"app-label-p-title text-general-color"},[e._v(e._s(t.name))])]),a("div",[a("p",{staticClass:"app-label-p-desc text-second-color"},[e._v(e._s(t.desc))])])])])]}))],2)})),0),a("i",{staticClass:"iconfont cursor-pointer app-icon",staticStyle:{"font-size":"18px"},attrs:{slot:"reference"},slot:"reference"},[e._v("")])])],1)]):e._e(),a("li",{directives:[{name:"show",rawName:"v-show",value:e.showAppDetail,expression:"showAppDetail"}]},[a("div",{staticStyle:{padding:"0 10px","background-color":"#EEE"}},[a("div",{staticClass:"inline-block app-icon-div",staticStyle:{width:"22px",height:"22px","line-height":"22px","vertical-align":"middle",top:"0px"},style:{background:e.currApp.bgColor}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{"font-size":"14px",color:"#fff"},domProps:{innerHTML:e._s(e.currApp.icon)}})]),a("span",{staticClass:"inline-block text-general-color",staticStyle:{"font-size":"14px",height:"100%","vertical-align":"middle",margin:"0 5px"}},[e._v(e._s(e.currApp.name))]),a("i",{staticClass:"awsui-iconfont text-general-color cursor-pointer",staticStyle:{"font-size":"14px"},on:{click:function(t){return e.closeApp()}}},[e._v("")])])]),a("li",[a("div",{staticStyle:{"margin-right":"5px"}},[e.isManage&&"0"!=e.mainType&&"1"!=e.mainType?a("div",{staticClass:"quick-access-btn",on:{click:e.openManageMainPage}},[a("span",[a("i",{staticClass:"awsui-iconfont quick-access-btn-icon"},[e._v("")]),a("span",{staticClass:"quick-access-btn-text"},[e._v("访问资产库")])])]):e._e(),"0"!=e.mainType&&"1"!=e.mainType&&"4"!=e.mainType||!e.isCooperationActive?e._e():a("div",{staticClass:"quick-access-btn",staticStyle:{display:"inline-block",cursor:"pointer",color:"#999",padding:"0 5px"},on:{click:e.openCooperationPage}},[a("span",[a("i",{staticClass:"awsui-iconfont quick-access-btn-icon"},[e._v("")]),a("span",{staticClass:"quick-access-btn-text"},[e._v("访问小组")])])]),e.isPbulishActive?a("div",{staticClass:"quick-access-btn",staticStyle:{display:"inline-block",cursor:"pointer",color:"#999",padding:"0 5px"},on:{click:e.openProcessManagePortalPage}},[a("span",[a("i",{staticClass:"awsui-iconfont quick-access-btn-icon"},[e._v("")]),a("span",{staticClass:"quick-access-btn-text"},[e._v("访问发布门户")])])]):e._e()])])]],2)])]),a("WorkspaceUpdate",{ref:"workspaceUpdate"}),a("WorkspaceImport",{ref:"workspaceImport"}),a("cooperation-update",{ref:"cooperationUpdate",attrs:{visible:e.cooperation.visible,teamId:e.cooperation.teamId,title:e.cooperation.title},on:{"update:visible":function(t){return e.$set(e.cooperation,"visible",t)},cancel:function(t){e.cooperation.visible=!1},getResult:e.createCooperationCallback}})],1)],1)},n=[],r=a("5d66"),l=a("896b"),c=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-container",{staticClass:"repository-query text-general-color"},[this.$store.getters.getNavigationQueryVisibleFn?a("div",{staticClass:"basic-query-div"},[a("div",{staticStyle:{margin:"0 0 0 0px","overflow-y":"auto"},style:{height:e.basicQueryAreaHeight}},[a("ul",[a("li",{staticClass:"li-general-hover-bgcolor li-general-height"},[a("div",{staticClass:"li-div-basic-query",staticStyle:{"border-bottom":"1px solid #F2F2F2"}},[a("div",{staticStyle:{margin:"0 10px",position:"relative"}},[a("div",{staticClass:"li-basic-icon-div icon-div-repository",style:{"background-color":"#4E7FF9"}},[a("i",{staticClass:"awsui-iconfont"},[a("i",{staticClass:"iconfont li-basic-icon"},[e._v("")])])]),a("div",{staticStyle:{display:"inline-block",cursor:"pointer",position:"relative",left:"40px","text-align":"left",width:"280px",height:"30px","line-height":"30px","vertical-align":"middle",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"},on:{click:e.openConditionQuery}},[e._v(' 在高级搜索中查看"'),a("span",{staticClass:"text-linker-color"},[e._v(e._s(e.queryInput))]),e._v('" ')])])])]),e._l(e.basicQueryResult,(function(t,o){return[a("li",{staticClass:"li-general-hover-bgcolor li-general-height"},[a("div",{staticClass:"li-div-basic-query",staticStyle:{"border-bottom":"1px solid white"}},[a("div",{staticStyle:{margin:"0 10px",position:"relative"}},[t.folder?a("div",{staticClass:"li-basic-icon-div icon-div-repository"},[a("i",{staticClass:"awsui-iconfont"},[a("i",{staticClass:"awsui-iconfont li-basic-icon",style:{color:t.icon.color,"font-size":"32px"},domProps:{innerHTML:e._s(t.icon.code)}})])]):a("div",{staticClass:"li-basic-icon-div icon-div-repository",style:{"background-color":t.icon.color}},[a("i",{staticClass:"awsui-iconfont"},[a("i",{staticClass:"awsui-iconfont li-basic-icon",domProps:{innerHTML:e._s(t.icon.code)}})])]),a("div",{staticClass:"li-basic-title-div",domProps:{innerHTML:e._s(t.name)},on:{click:function(a){return e.positionRepository(t.id,t.versionId,t.path)}}}),t.folder?e._e():a("i",{staticClass:"iconfont text-second-color icon-open-repository",staticStyle:{float:"right",cursor:"pointer"},on:{click:function(a){return e.openRepository(t.id)}}},[e._v("")])])])])]}))],2)])]):e._e(),a("el-dialog",{attrs:{visible:this.$store.getters.getNavigationConditionQueryVisibleFn,"before-close":e.handleClose,"close-on-click-modal":!1,"destroy-on-close":!0,"show-close":!1,width:"800px"},on:{"update:visible":function(t){return e.$set(this.$store.getters,"getNavigationConditionQueryVisibleFn",t)}}},[a("div",{staticStyle:{height:"564px"}},[a("div",{staticClass:"condition-query-header",staticStyle:{"border-bottom":"1px solid #F2F2F2"}},[a("el-input",{staticStyle:{border:"0px",width:"90%"},attrs:{placeholder:"请输入关键字","prefix-icon":"el-icon-search"},on:{input:e.queryConditionTimer},model:{value:e.conditionQueryInput,callback:function(t){e.conditionQueryInput=t},expression:"conditionQueryInput"}}),a("span",{staticClass:"condition-query-clear text-second-color",style:{visibility:e.showClearButton?"visible":"hidden"},on:{click:e.clearQueryInput}},[e._v("清除")]),a("div",{staticStyle:{height:"10px",display:"inline-block","border-left":"1px solid #F2F2F2","margin-left":"5px"}}),a("button",{staticClass:"el-dialog__headerbtn",staticStyle:{float:"right"},attrs:{type:"button","aria-label":"Close"},on:{click:e.closeDlg}},[a("i",{staticClass:"el-dialog__close el-icon el-icon-close"})])],1),a("div",[a("el-tabs",{on:{"tab-click":e.handleCagegoryChange},model:{value:e.activeTabName,callback:function(t){e.activeTabName=t},expression:"activeTabName"}},e._l(e.tabData,(function(e){return a("el-tab-pane",{attrs:{label:e.label,name:e.name}})})),1)],1),a("div",[a("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{width:"70%",height:"477px",float:"left","overflow-x":"hidden","overflow-y":"auto"}},[a("div",{staticStyle:{padding:"0 10px"}},[[a("el-table",{staticStyle:{width:"100%"},attrs:{data:e.conditionQueryResult,"row-style":{height:"50px"},"cell-style":{padding:"0px"},"show-header":!1}},[a("div",{attrs:{slot:"empty"},slot:"empty"},[a("div",{staticClass:"text-second-color"},[a("i",{staticClass:"iconfont icon-wushuju",staticStyle:{"font-size":"60px"}}),a("p",{staticStyle:{"line-height":"0"}},[e._v("暂无数据,请输入关键字搜索")])])]),a("el-table-column",{attrs:{prop:"icon",label:"",align:"right",width:"52px"},scopedSlots:e._u([{key:"default",fn:function(t){return[t.row.folder?a("div",{staticClass:"icon-div-condition-query"},[a("i",{staticClass:"awsui-iconfont icon-condition-query",style:{color:t.row.icon.color,"font-size":"32px"},domProps:{innerHTML:e._s(t.row.icon.code)}})]):a("div",{staticClass:"icon-div-condition-query",style:{"background-color":t.row.icon.color}},[a("i",{staticClass:"awsui-iconfont icon-condition-query",domProps:{innerHTML:e._s(t.row.icon.code)}})])]}}])}),a("el-table-column",{attrs:{prop:"name",align:"left",label:"名称"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("div",[a("p",{staticClass:"condition-query-row-name"},[a("span",{domProps:{innerHTML:e._s(t.row.name)},on:{click:function(a){return e.positionRepository(t.row.id,t.row.versionId,t.row.path)}}})]),0==t.row.shapeDataSize?a("p",{staticClass:"condition-query-row-desc text-second-color",domProps:{innerHTML:e._s(t.row.createUser+" 于"+t.row.createDate+" 创建 · "+t.row.updateUser+" 于"+t.row.updateDate+" 修改")}}):a("p",{staticClass:"condition-query-row-desc text-second-color",domProps:{innerHTML:e._s("包含 "+t.row.shapeDataStr+" "+t.row.shapeDataSize+"个节点")}})])]}}])}),a("el-table-column",{attrs:{prop:"operate",label:"操作",width:"40"},scopedSlots:e._u([{key:"default",fn:function(t){return["default"!=t.row.methodId?a("i",{staticClass:"iconfont text-second-color icon-open-repository",staticStyle:{cursor:"pointer",position:"relative",top:"2px"},on:{click:function(a){return e.openRepository(t.row.id)}}},[e._v("")]):e._e()]}}])})],1)]],2)]),a("div",{staticStyle:{width:"30%",height:"477px",float:"left","overflow-y":"auto","overflow-x":"hidden"}},[a("div",{staticStyle:{"border-left":"1px solid #F2F2F2"}},[a("div",{staticStyle:{padding:"10px"}},[a("p",{staticClass:"query-filter-item-title"},[e._v("搜索类型")]),[a("el-checkbox-group",{staticClass:"query-filter-item-checkbox-group",on:{change:e.queryConditionTimer},model:{value:e.queryTypeChecked,callback:function(t){e.queryTypeChecked=t},expression:"queryTypeChecked"}},[a("el-checkbox",{staticClass:"query-filter-item-checkbox",staticStyle:{display:"block"},attrs:{label:"file"}},[e._v("文件")]),a("el-checkbox",{staticClass:"query-filter-item-checkbox",staticStyle:{display:"block"},attrs:{label:"shape"}},[e._v("形状")])],1)],a("p",{staticClass:"query-filter-item-title"},[e._v(" 文件类型 "),e.repositoryMethodList.length>3?[e.conditionFold.method?a("i",{staticClass:"awsui-iconfont condition-query-item-fold",on:{click:function(t){e.conditionFold.method=!e.conditionFold.method}}},[e._v("")]):a("i",{staticClass:"awsui-iconfont condition-query-item-fold",on:{click:function(t){e.conditionFold.method=!e.conditionFold.method}}},[e._v("")])]:e._e()],2),e.repositoryMethodList.length>0?[a("el-checkbox-group",{staticClass:"query-filter-item-checkbox-group",on:{change:e.queryConditionTimer},model:{value:e.repositoryMethodChecked,callback:function(t){e.repositoryMethodChecked=t},expression:"repositoryMethodChecked"}},[e._l(e.repositoryMethodList,(function(t,o){return[a("el-checkbox",{directives:[{name:"show",rawName:"v-show",value:o<3||o>=3&&!e.conditionFold.method,expression:"i < 3 || (i >= 3 && !conditionFold.method)"}],staticClass:"query-filter-item-checkbox",staticStyle:{display:"block"},attrs:{label:t.id}},[e._v(e._s(t.name))])]}))],2),e.repositoryMethodList.length>3&&e.conditionFold.method?a("p",{staticStyle:{"padding-left":"10px"}},[a("i",{staticClass:"awsui-iconfont text-second-color condition-query-item-fold-more",on:{click:function(t){e.conditionFold.method=!e.conditionFold.method}}},[e._v("")])]):e._e()]:e._e(),a("p",{staticClass:"query-filter-item-title"},[e._v(" 创建人 "),e.createUserList.length>3?[e.conditionFold.createUser?a("i",{staticClass:"awsui-iconfont condition-query-item-fold",on:{click:function(t){e.conditionFold.createUser=!e.conditionFold.createUser}}},[e._v("")]):a("i",{staticClass:"awsui-iconfont condition-query-item-fold",on:{click:function(t){e.conditionFold.createUser=!e.conditionFold.createUser}}},[e._v("")])]:e._e()],2),e.createUserList.length>0?[a("el-checkbox-group",{staticClass:"query-filter-item-checkbox-group",on:{change:e.queryConditionTimer},model:{value:e.createUserChecked,callback:function(t){e.createUserChecked=t},expression:"createUserChecked"}},[e._l(e.createUserList,(function(t,o){return[a("el-checkbox",{directives:[{name:"show",rawName:"v-show",value:o<3||o>=3&&!e.conditionFold.createUser,expression:"i < 3 || (i >= 3 && !conditionFold.createUser)"}],staticClass:"query-filter-item-checkbox",staticStyle:{display:"block"},attrs:{label:t.id}},[e._v(e._s(t.name))])]}))],2),e.createUserList.length>3&&e.conditionFold.createUser?a("p",{staticStyle:{"padding-left":"10px"}},[a("i",{staticClass:"awsui-iconfont text-second-color condition-query-item-fold-more",on:{click:function(t){e.conditionFold.createUser=!e.conditionFold.createUser}}},[e._v("")])]):e._e()]:e._e(),a("p",{staticClass:"query-filter-item-title"},[e._v("修改时间")]),[a("el-radio-group",{staticClass:"query-filter-item-checkbox-group",on:{change:e.queryConditionTimer},model:{value:e.updateDateChecked,callback:function(t){e.updateDateChecked=t},expression:"updateDateChecked"}},[a("el-radio",{staticClass:"query-filter-item-checkbox",staticStyle:{display:"block"},attrs:{label:"all"}},[e._v("全部")]),a("el-radio",{staticClass:"query-filter-item-checkbox",staticStyle:{display:"block"},attrs:{label:"thirty"}},[e._v("近30天")]),a("el-radio",{staticClass:"query-filter-item-checkbox",staticStyle:{display:"block"},attrs:{label:"fifteen"}},[e._v("近15天")]),a("el-radio",{staticClass:"query-filter-item-checkbox",staticStyle:{display:"block"},attrs:{label:"seven"}},[e._v("近7天")]),a("el-radio",{staticClass:"query-filter-item-checkbox",staticStyle:{display:"block"},attrs:{label:"today"}},[e._v("今天")])],1)]],2)])])])])])],1)},d=[],p=a("1337"),u=a("0f08"),h={name:"RepositoryQuery",data:function(){return{conditionQueryInput:this.queryInput,showClearButton:!1,basicQueryResult:[],basicQueryAreaHeight:"0px",activeTabName:"",queryTypeChecked:["file"],repositoryMethodChecked:[],createUserChecked:[],updateDateChecked:"all",repositoryMethodList:[],createUserList:[],tabData:[],conditionQueryResult:[],conditionFold:{method:!0,createUser:!0},loading:!1,timeStamp:0,queryInterval:1e3,timer:null}},props:["queryInput"],computed:{listenNavigationConditionQueryVisibleFn:function(){return this.$store.getters.getNavigationConditionQueryVisibleFn}},watch:{queryInput:function(e,t){""!=e.trim()&&this.$store.getters.getNavigationQueryVisibleFn&&(this.basicQueryResult=[],this.queryBasicTimer())},conditionQueryInput:function(e,t){""!=e.trim()?this.showClearButton=!0:this.showClearButton=!1},listenNavigationConditionQueryVisibleFn:function(e,t){e&&(this.conditionQueryInput=this.queryInput,this.queryTabInfo())}},methods:{queryTabInfo:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_condition_main_query",wsId:e.$store.getters.getWsIdFn,teamId:e.$store.getters.getTeamIdFn}};u["a"].post(t).then((function(t){if("ok"==t.result){for(var a=t.data.data,o=t.data.userData,i=0;i<a.length;i++){var s=a[i];s.createUserList=JSON.parse(JSON.stringify(o))}e.tabData=a,e.$nextTick((function(){e.activeTabName="all",e.handleCagegoryChange({name:"all"})}))}else e.$message.error(t.msg)})).catch((function(e){console.log(e)}))},clearQueryInput:function(){this.conditionQueryInput="",this.queryConditionTimer()},closeDlg:function(){this.conditionQueryInput="",this.showClearButton=!1,this.queryTypeChecked=["file"],this.repositoryMethodChecked=[],this.createUserChecked=[],this.updateDateChecked="all",this.repositoryMethodList=[],this.createUserList=[],this.tabData=[],this.conditionQueryResult=[],this.conditionFold.method=!0,this.conditionFold.createUser=!0,this.$store.commit("setNavigationConditionQueryVisibleFn",!1)},save:function(){this.closeDlg()},handleClose:function(e){e(),this.closeDlg()},openConditionQuery:function(){this.$store.commit("setNavigationQueryVisibleFn",!1),this.$store.commit("setNavigationConditionQueryVisibleFn",!0)},clearTimer:function(){null!=this.timer&&clearTimeout(this.timer)},queryBasicTimer:function(){var e=this;e.timeStamp=(new Date).getTime()+"",e.clearTimer(),e.timer=setTimeout((function(){e.queryBasicRepository()}),e.queryInterval)},queryBasicRepository:function(){if(this.queryInput&&""!=this.queryInput.trim()){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_basic_query",wsId:e.$store.getters.getWsIdFn,teamId:e.$store.getters.getTeamIdFn,name:e.queryInput.trim(),timeStamp:e.timeStamp}};u["a"].post(t).then((function(t){if(t.data.timeStamp==e.timeStamp)if(e.clearTimer(),"ok"==t.result){for(var a=t.data.data,o=0;o<a.length;o++){var i=a[o];i.name=e.matchStyle(0,i.name,e.queryInput.trim())}e.basicQueryAreaHeight=(51+50*a.length>350?350:51+50*a.length)+"px",e.basicQueryResult=a}else e.$message.error(t.msg)})).catch((function(e){console.log(e)}))}},matchStyle:function(e,t,a){var o=t.toLocaleLowerCase(),i=a.toLocaleLowerCase();if(e>t.length-1)return t;var s=o.indexOf(i,e);if(-1!=s){var n=t.substring(s,s+a.length),r='<span class="text-linker-color">',l="</span>";return t=t.substring(0,e)+t.substring(e).replace(n,r+n+l),e=s+a.length+r.length+l.length,this.matchStyle(e,t,a)}return t},queryConditionTimer:function(){var e=this;e.timeStamp=(new Date).getTime()+"",e.clearTimer(),e.loading=!0,e.timer=setTimeout((function(){e.queryConditionRepository()}),e.queryInterval)},queryConditionRepository:function(){var e=this;if(!e.conditionQueryInput||""==e.conditionQueryInput.trim())return e.conditionQueryResult=[],void(e.loading=!1);if(0==e.queryTypeChecked.length||0==e.repositoryMethodChecked.length||0==e.createUserChecked.length)return e.conditionQueryResult=[],void(e.loading=!1);var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_condition_data_query",wsId:e.$store.getters.getWsIdFn,teamId:e.$store.getters.getTeamIdFn,type:JSON.stringify(e.queryTypeChecked),method:JSON.stringify(e.repositoryMethodChecked),createUser:JSON.stringify(e.createUserChecked),updateDate:e.updateDateChecked,key:e.conditionQueryInput,timeStamp:e.timeStamp}};u["a"].post(t).then((function(t){if(t.data.timeStamp==e.timeStamp)if(e.clearTimer(),"ok"==t.result){for(var a=t.data.data,o=0;o<a.length;o++){var i=a[o];if(-1!=e.queryTypeChecked.indexOf("file")&&(i.name=e.matchStyle(0,i.name,e.conditionQueryInput)),-1!=e.queryTypeChecked.indexOf("shape")&&i.shapeDataSize>0){for(var s=0;s<i.shapeData.length;s++){var n=i.shapeData[s];i.shapeData[s]=e.matchStyle(0,n,e.conditionQueryInput)}i.shapeDataStr=i.shapeData.join("、")}}e.conditionQueryResult=a}else e.$message.error(t.msg);e.loading=!1})).catch((function(e){console.log(e)}))},handleCagegoryChange:function(e,t){for(var a=e.name,o=0;o<this.tabData.length;o++){var i=this.tabData[o];if(i.name==a){this.repositoryMethodList=i.methodList,this.repositoryMethodChecked=[];for(var s=0;s<this.repositoryMethodList.length;s++)this.repositoryMethodChecked.push(this.repositoryMethodList[s].id);this.createUserList=i.createUserList,this.createUserChecked=[];for(var n=0;n<this.createUserList.length;n++)this.createUserChecked.push(this.createUserList[n].id)}}this.queryConditionTimer()},positionRepository:function(e,t,a){this.$router.push({path:"/Repository",query:{id:e,versionId:t,path:a,param:Math.random()}}),this.$store.getters.getNavigationQueryVisibleFn&&this.$store.commit("setNavigationQueryVisibleFn",!1),this.$store.getters.getNavigationConditionQueryVisibleFn&&this.$store.commit("setNavigationConditionQueryVisibleFn",!1)},openRepository:function(e){this.$store.getters.getNavigationQueryVisibleFn&&this.$store.commit("setNavigationQueryVisibleFn",!1),this.$store.getters.getNavigationConditionQueryVisibleFn&&this.$store.commit("setNavigationConditionQueryVisibleFn",!1),Object(p["d"])(this.$store.getters.getTeamIdFn,e,this.$store.state.sessionId)}}},m=h,f=(a("d14a"),a("cba8")),g=Object(f["a"])(m,c,d,!1,null,"258815a1",null),v=g.exports,w=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("validation-observer",{ref:"newTeam"},[a("awsui-layout",{attrs:{id:"update"}},[a("awsui-dialog",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],attrs:{"element-loading-text":"加载中",title:e.title,visible:e.dialogVisible,width:e.width,height:e.height,border:!1,"close-on-click-modal":!1,"before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t}}},[a("div",[a("el-steps",{attrs:{active:e.stepActive,"align-center":""}},[a("el-step",{attrs:{title:"小组信息"}}),a("el-step",{attrs:{title:"小组管理员"}}),a("el-step",{attrs:{title:"小组权限"}})],1),a("div",{staticStyle:{width:"524px",height:"260px",border:"1px solid #e9e9e9",padding:"10px 10px 10px 15px"}},[1==e.stepActive?a("div",{staticStyle:{position:"relative",padding:"12px 0"}},[a("awsui-form",{ref:"infoForm",attrs:{model:e.baseInfo.form,rules:e.baseInfo.rules,"label-width":"100px","label-position":"top"}},[e.isloaded?a("div",[a("awsui-icon-picker",{staticClass:"icon-team-div",attrs:{defaultOptions:e.iconPickerOptions,value:{icon:e.baseInfo.form.teamLogo.code,color:e.baseInfo.form.teamLogo.color}},on:{change:e.changeIcon}})],1):e._e(),a("awsui-row",[a("awsui-col",{attrs:{span:18}},[a("awsui-form-item",{attrs:{label:"名称",required:""}},[a("validation-provider",{attrs:{rules:"required|teamName_formatCheck|maxLength:36"},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.classes,i=t.errors;return[a("awsui-input",{attrs:{placeholder:"请输入名称"},model:{value:e.baseInfo.form.teamName,callback:function(t){e.$set(e.baseInfo.form,"teamName",t)},expression:"baseInfo.form.teamName"}}),a("div",{class:o},[e._v(e._s(i[0]))])]}}],null,!1,2850441238)})],1)],1)],1),a("awsui-row",[a("awsui-col",{attrs:{span:18}},[a("awsui-form-item",{attrs:{label:"工作网络",required:""}},[a("validation-provider",{attrs:{rules:"required|teamName_formatCheck|maxLength:36"},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.classes,i=t.errors;return[a("awsui-select",{attrs:{filterable:"","allow-create":"","default-first-option":"",placeholder:"请选择/输入工作网络",options:e.baseInfo.form.categoryOpts},on:{change:e.changeCategory},model:{value:e.baseInfo.form.category,callback:function(t){e.$set(e.baseInfo.form,"category",t)},expression:"baseInfo.form.category"}}),a("div",{class:o},[e._v(e._s(i[0]))])]}}],null,!1,2989048194)})],1)],1)],1),a("awsui-row",[a("awsui-col",{attrs:{span:24}},[a("awsui-form-item",{attrs:{label:"简介"}},[a("validation-provider",{attrs:{rules:"maxLength:255"},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.classes,i=t.errors;return[a("awsui-input",{attrs:{type:"textarea",placeholder:"请输入简介"},model:{value:e.baseInfo.form.teamDesc,callback:function(t){e.$set(e.baseInfo.form,"teamDesc",t)},expression:"baseInfo.form.teamDesc"}}),a("div",{class:o},[e._v(e._s(i[0]))])]}}],null,!1,3063291858)})],1)],1)],1)],1)],1):e._e(),2==e.stepActive?a("div",{directives:[{name:"loading",rawName:"v-loading",value:e.adminUserInfo.loading,expression:"adminUserInfo.loading"}]},[a("div",{staticStyle:{height:"270px",overflow:"auto"}},[a("el-tree",{key:"userTree",ref:"userTree",attrs:{props:e.adminUserInfo.treeProps,"default-checked-keys":e.adminUserInfo.value,"expand-on-click-node":!1,"highlight-current":!0,"empty-text":"","check-strictly":"","show-checkbox":!0,"node-key":"id",lazy:"",load:e.loadUserNode},on:{"node-click":e.openUserNode,"node-expand":e.expandUserNode,"node-collapse":e.closeUserNode,"check-change":e.checkedUserNode},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.node;t.data;return a("span",{},[a("i",{staticClass:"awsui-iconfont tree-content-icon tree-content-icon-padding",style:{color:o.data.icon.color},domProps:{innerHTML:e._s(o.data.icon.icon)}}),a("span",[e._v(e._s(o.label))])])}}],null,!1,52448956)})],1)]):e._e(),3==e.stepActive?a("div",{directives:[{name:"loading",rawName:"v-loading",value:e.permInfo.loading,expression:"permInfo.loading"}]},[a("el-select",{staticStyle:{width:"100%"},attrs:{filterable:"","default-first-option":"",size:"small",placeholder:"请选择资产库"},on:{change:e.changeWs},model:{value:e.permInfo.ws.value,callback:function(t){e.$set(e.permInfo.ws,"value",t)},expression:"permInfo.ws.value"}},e._l(e.permInfo.ws.options,(function(e){return a("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1),a("div",{staticStyle:{height:"238px",overflow:"auto"}},[""!=e.permInfo.ws.value?a("el-tree",{key:"repositoryTree",ref:"repositoryTree",attrs:{props:e.permInfo.tree.props,"default-checked-keys":e.permInfo.tree.value,"expand-on-click-node":!1,"highlight-current":!0,"empty-text":"","check-strictly":"","show-checkbox":"","node-key":"versionId",lazy:"",load:e.loadNode},on:{"node-click":e.openNode,"node-expand":e.expandNode,"node-collapse":e.closeNode,"check-change":e.checkedNode},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.node;t.data;return a("span",{},[a("i",{staticClass:"awsui-iconfont tree-content-icon tree-content-icon-padding",style:{color:o.data.icon.color},domProps:{innerHTML:e._s(o.data.icon.icon)}}),a("span",[e._v(e._s(o.data.name))])])}}],null,!1,1613751043)}):e._e()],1)],1):e._e()])],1),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{directives:[{name:"show",rawName:"v-show",value:2==e.stepActive||3==e.stepActive,expression:"stepActive == 2 || stepActive == 3"}],staticClass:"button-general-color-reverse",on:{click:function(){e.stepActive--}}},[e._v("上一步")]),a("awsui-button",{directives:[{name:"show",rawName:"v-show",value:1==e.stepActive||2==e.stepActive,expression:"stepActive == 1 || stepActive == 2"}],staticClass:"button-general-color",attrs:{type:"primary"},on:{click:e.next}},[e._v("下一步")]),a("awsui-button",{directives:[{name:"show",rawName:"v-show",value:3==e.stepActive,expression:"stepActive == 3"}],staticClass:"button-general-color",attrs:{type:"primary"},on:{click:e.submit}},[e._v("确定")])],1)])],1)],1)},y=[],b={name:"CooperationUpdate",props:{visible:{type:Boolean,default:!1},teamId:{type:String,default:""},title:{type:String,default:"新建"}},data:function(){return{dialogVisible:!1,loading:!1,width:"600px",height:"350px",addressType:"user",baseInfo:{form:{teamName:"",category:"",categoryOpts:[],teamDesc:"",teamLogo:{color:"",code:""}},rules:{category:[{required:!0,message:"[工作网络]不允许为空",trigger:"blur"}],teamName:[{required:!0,message:"[名称]不允许为空",trigger:"blur"}]}},adminUserInfo:{value:[],treeProps:{label:"name",isLeaf:"leaf"},loading:!1},permInfo:{loading:!1,ws:{value:"",options:[]},tree:{props:{children:"children",label:"label",isLeaf:"leaf"},value:[]}},stepActive:1,isloaded:!1,iconPickerOptions:{type:"background",fatherWidth:70,iconFontSize:52,colorList:["#dc4f39","#ff9421","#009b52","#3383da","#009688","#6600d5","#0b0e7b","#666666","#e6e8ea"],iconfontArray:window.iconfontArray}}},mounted:function(){},methods:{changeCategory:function(e){this.baseInfo.form.category=e},initData:function(){var e=this;e.loading=!0;var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal.cooperation_team_create_or_update_data_query",teamId:e.teamId}};u["a"].post(t).then((function(t){if("ok"==t.result){var a=t.data;e.baseInfo.form.teamName=a.teamName,e.baseInfo.form.category=a.category,e.baseInfo.form.categoryOpts=a.categoryArr,e.baseInfo.form.teamDesc=a.teamDesc,e.baseInfo.form.teamLogo=a.teamLogo,e.isloaded=!0,e.adminUserInfo.value=a.admins,e.permInfo.ws.value=a.wsId,e.permInfo.ws.options=a.wsArr,e.permInfo.tree.value=a.repositorys}else e.$message.error(t.msg);e.loading=!1})).catch((function(t){console.log(t),e.loading=!1}))},next:function(){var e=this,t=this;1==this.stepActive?this.$refs.newTeam.validate().then((function(t){t&&e.stepActive++})):2==this.stepActive&&(0==t.adminUserInfo.value.length&&t.$message("未选择任何管理员,保存时默认"+(""==t.teamId?"创建":"修改")+"人为管理员"),this.stepActive++)},clearAllData:function(){var e=this;e.baseInfo.form.teamName="",e.baseInfo.form.category="",e.baseInfo.form.teamDesc="",e.baseInfo.form.teamLogo={},e.adminUserInfo.value=[],e.permInfo.ws.value="",e.permInfo.ws.options=[],e.permInfo.tree.value=[],e.stepActive=1,e.isloaded=!1},handleClose:function(e){this.closeDlalog("cancel"),e()},cancel:function(){this.closeDlalog("cancel")},submit:function(){var e=this.permInfo.ws.value;""!=e?this.closeDlalog("save"):this.$message({message:"请先创建资产库再进行小组创建",type:"warning"})},closeDlalog:function(e){var t=this;if("save"==e){var a=t.teamId,o=t.baseInfo.form.teamName,i=t.baseInfo.form.category,s=t.baseInfo.form.teamDesc,n=t.baseInfo.form.teamLogo,r=t.adminUserInfo.value,l=t.permInfo.ws.value,c=t.permInfo.tree.value,d={teamId:a,teamName:o,category:i,teamDesc:s,teamLogo:n,admins:r,wsId:l,repositorys:c};t.loading=!0;var p={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal.cooperation_team_create_or_update_data_save",data:JSON.stringify(d)}};u["a"].post(p).then((function(e){t.loading=!1,"ok"==e.result?(t.$message({message:"保存成功",type:"success"}),t.$emit("getResult","ok"),t.dialogVisible=!1,t.clearAllData()):t.$message.error(e.msg)})).catch((function(e){console.log(e),t.loading=!1}))}else t.$emit("cancel"),t.dialogVisible=!1,t.clearAllData()},openUserNode:function(e,t,a){},loadUserNode:function(e,t){var a=this;a.adminUserInfo.loading=!0;var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal.cooperation_pal_user_tree_subjson",pid:""}};0===e.level?o.data.parentType="":(o.data.pid=e.data.id,o.data.parentType=e.data.type),u["a"].post(o).then((function(o){for(var i=a.addressType.indexOf("dept")>-1,s=a.addressType.indexOf("user")>-1,n=(a.addressType.indexOf("role"),0);n<o.data.length;n++){var r=o.data[n];"company"==r.type?r.disabled=!0:(i&&"dept"==r.type&&(r.disabled=!1),i||"dept"!=r.type||(r.disabled=!0),s&&"user"==r.type&&(r.disabled=!1),s||"user"!=r.type||(r.disabled=!0),"user"==r.type&&(r.leaf=!0))}if(t(o.data),a.adminUserInfo.loading=!1,0==e.level&&o.data.length>0){var l=a.$refs.userTree;l.getNode(o.data[0].id).expand(),setTimeout((function(){var e=l.getNode(o.data[0].id).childNodes[0];null!=e&&e.expand()}),500)}})).catch((function(e){console.log(e)}))},expandUserNode:function(e,t,a){},closeUserNode:function(e,t,a){t.childNodes=[],t.loaded=!1},checkedUserNode:function(e,t,a){var o=this,i=e.id;if(t){var s=o.adminUserInfo.value;-1==s.indexOf(i)&&s.push(i)}else{for(var n=o.adminUserInfo.value,r=[],l=0;l<n.length;l++)n[l]!=i&&r.push(n[l]);o.adminUserInfo.value=r}},changeWs:function(e){var t=this;t.permInfo.ws.value="",t.permInfo.tree.value,t.$nextTick((function(){t.permInfo.ws.value=e}))},openNode:function(e,t,a){},loadNode:function(e,t){var a=this;a.permInfo.loading=!0;var o={url:"jd",data:{}};o.data.wsId=a.permInfo.ws.value,o.data.teamId="",o.data.cmd="com.actionsoft.apps.coe.pal_processlevel_tree_data",0===e.level?o.data.pid="":o.data.pid=e.data.id,u["a"].post(o).then((function(o){for(var i=0;i<o.data.length;i++)o.data[i].id.length<36&&(o.data[i].disabled=!0);if(t(o.data),a.permInfo.loading=!1,0==e.level&&o.data.length>0){var s=a.$refs.repositoryTree;s.getNode(o.data[0].id).expand(),setTimeout((function(){var e=s.getNode(o.data[0].id).childNodes[0];null!=e&&e.expand()}),500)}})).catch((function(e){console.log(e)}))},expandNode:function(e,t,a){},closeNode:function(e,t,a){t.childNodes=[],t.loaded=!1},checkedNode:function(e,t,a){var o=this,i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_publish_publishgroup_repository_data_query",wsId:o.permInfo.ws.value,pid:e.id}};u["a"].post(i).then((function(a){var i=a.data,s=e.versionId;if(t){var n=o.permInfo.tree.value;-1==n.indexOf(s)&&n.push(s);for(var r=0;r<i.length;r++)-1==n.indexOf(i[r])&&n.push(i[r]);o.$refs.repositoryTree.setCheckedKeys(n)}else{for(var l=o.permInfo.tree.value,c=[],d=0;d<l.length;d++)l[d]!=s&&-1==i.indexOf(l[d])&&c.push(l[d]);o.permInfo.tree.value=c,o.$refs.repositoryTree.setCheckedKeys([])}})).catch((function(e){console.log(e)}))},changeIcon:function(e){this.baseInfo.form.teamLogo.code=e.icon,this.baseInfo.form.teamLogo.color=e.color}},watch:{visible:function(e){this.dialogVisible=e,e&&this.initData()}}},x=b,_=(a("aa17"),Object(f["a"])(x,w,y,!1,null,"87330138",null)),C=_.exports,k={name:"Navigation",components:{WorkspaceUpdate:r["a"],WorkspaceImport:l["a"],RepositoryQuery:v,CooperationUpdate:C},data:function(){return{mainType:mainType,isManage:isManage,isSecAdminUser:isSecAdminUser,userPhoto:"",isPbulishActive:!1,isCooperationActive:!1,wsLabel:"",wsValue:"",wsOptions:[],teamLabel:"",teamValue:"",isTeamManager:!1,teamOptions:[],arrowTip:"down",queryInput:"",appList:[],teamAppList:{},showAppDetail:!1,currApp:{id:"",clazzName:"",name:"",icon:"",bgColor:""},mainIcon:{code:"&#58884;",color:"#4E7FF9"},mainIconTemp:{code:"&#58884;",color:"#4E7FF9"},cooperation:{visible:!1,teamId:"",title:"创建小组"},cooperationDrawer:{showCooperationDetail:!1}}},inject:["openAppDrawer","closeAppDrawer","openPwdConfig","logout","openCooperationDrawer","closeCooperationDrawer","saveAccessOpLog"],methods:{basicQuery:function(){this.closeApp(),this.closeCooperation(),""==this.queryInput.trim()?this.$store.commit("setNavigationQueryVisibleFn",!1):this.$store.commit("setNavigationQueryVisibleFn",!0)},conditionQuery:function(){this.closeApp(),this.closeCooperation(),this.$store.commit("setNavigationQueryVisibleFn",!1),this.$store.commit("setNavigationConditionQueryVisibleFn",!0)},keepRepositoryQuery:function(){},handleWsCommand:function(e){if(this.closeApp(),this.closeCooperation(),"create"==e)this.$refs.workspaceUpdate.openUpdateWsDlg("create","",this);else if("import"==e)this.$refs.workspaceImport.openImportWsDlg(this);else if("manage"==e)Object(p["b"])("palManage",this.$store.state.sessionId,"com.actionsoft.apps.coe.pal_user_home_page",{mainType:4},"_top");else{this.wsValue=e;for(var t=0;t<this.wsOptions.length;t++)this.wsOptions[t].value==e&&(this.wsLabel=this.wsOptions[t].label,this.$store.commit("setWsIdFn",this.wsValue),this.saveAccessOpLog("workspace"),Object(p["e"])(this.wsLabel))}},handleTeamCommand:function(e){if(this.closeApp(),this.closeCooperation(),"create"==e)this.cooperation.visible=!0;else if("manage"==e)this.openCooperation();else{this.teamValue=e;for(var t=0;t<this.teamOptions.length;t++)if(this.teamOptions[t].value==e){this.teamLabel=this.teamOptions[t].label;var a=this.teamValue.split("|")[0];this.$store.commit("setTeamIdFn",a),this.$store.commit("setWsIdFn",this.teamValue.split("|")[1]),this.appList=this.teamAppList[a],this.updateTeamLogo(a),this.saveAccessOpLog("cooperation"),Object(p["e"])(this.teamLabel)}}},handleUserCommand:function(e){this.closeApp(),this.closeCooperation(),"manage"==e?Object(p["b"])("palCooperation",this.$store.state.sessionId,"com.actionsoft.apps.coe.pal_user_home_page",{mainType:4},"_top"):"bbs"==e?Object(p["c"])("bbsLink","http://www.awspal.com/study"):"help"==e?Object(p["c"])("helpLink","http://docs.awspaas.com/coe/aws-paas-user-manual-coe-pal/index.html"):"updatePwd"==e?this.openPwdConfig():"logout"==e&&this.logout()},openApp:function(e,t,a,o,i){this.$refs["appPopover"].doClose(),this.currApp.id=e,this.currApp.name=a,this.currApp.clazzName=t,this.currApp.icon=o,this.currApp.bgColor=i,this.openAppDrawer(),this.showAppDetail=!0},closeApp:function(){this.closeAppDrawer()},openCooperation:function(){this.openCooperationDrawer()},closeCooperation:function(){this.closeCooperationDrawer()},isChangePwd:function(){return isSecurityPwdChange},updateWorkspaceCallback:function(){Object(p["b"])("palMain",this.$store.state.sessionId,"com.actionsoft.apps.coe.pal_user_home_page",{},"_top")},importWorkspaceCallback:function(){Object(p["b"])("palMain",this.$store.state.sessionId,"com.actionsoft.apps.coe.pal_user_home_page",{},"_top")},initParam:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_nav_header_data",mainType:mainType}};u["a"].post(t).then((function(t){if("ok"==t.result){var a=t.data;if(e.userPhoto=a.userPhoto,e.isPbulishActive=a.isPbulishActive,e.isCooperationActive=a.isCooperationActive,e.appList=a.appList,e.teamAppList=a.teamAppList,e.teamLabel=a.teamLabel,e.teamValue=a.teamValue,e.teamOptions=a.teamOptions,e.wsValue=a.wsValue,e.$store.commit("setWsIdFn",e.wsValue),""!=e.teamValue){var o=e.teamValue.split("|")[0];e.$store.commit("setTeamIdFn",o),e.$store.commit("setWsIdFn",e.teamValue.split("|")[1]),e.updateTeamLogo(o)}if(e.isTeamManager=a.isTeamManager,e.wsLabel=a.wsLabel,e.wsOptions=a.wsOptions,"0"==mainType)e.$router.replace({path:"workspace"}),Object(p["e"])("AWS PAL资产库");else if("2"==mainType)e.$router.replace({name:"cooperationCreate",params:{isManage:isManage}}),Object(p["e"])("AWS PAL小组");else if("4"==mainType)e.$router.replace({path:"manage"}),Object(p["e"])("AWS PAL管理中心");else if("1"==mainType||"3"==mainType){var i=e.wsLabel;"1"==mainType?e.saveAccessOpLog("workspace"):(e.saveAccessOpLog("cooperation"),i=e.teamLabel),e.$router.replace({path:"repository"}),Object(p["e"])(i)}}})).catch((function(e){console.log(e)}))},returnMainPage:function(){this.closeApp(),this.closeCooperation(),""==!this.queryInput&&(this.queryInput=""),this.$router.push({path:"/Repository",query:{param:Math.random()}})},changeDropDownArrow:function(e){this.arrowTip=e?"up":"down"},updateTeamLogo:function(e){for(var t=this,a=0;a<t.teamOptions.length;a++)if(t.teamOptions[a].teamId==e){t.mainIcon.color=t.teamOptions[a].teamLogo.color,t.mainIcon.code=t.teamOptions[a].teamLogo.code,t.mainIconTemp.color=t.teamOptions[a].teamLogo.color,t.mainIconTemp.code=t.teamOptions[a].teamLogo.code;break}},createCooperationCallback:function(e){"ok"==e&&Object(p["b"])("palCooperation",this.$store.state.sessionId,"com.actionsoft.apps.coe.pal_user_home_page",{mainType:5},"_top")},openCooperationPage:function(){Object(p["b"])("palCooperation",this.$store.state.sessionId,"com.actionsoft.apps.coe.pal_user_home_page",{mainType:5},"_top")},openManageMainPage:function(){Object(p["b"])("palCooperation",this.$store.state.sessionId,"com.actionsoft.apps.coe.pal_user_home_page",{},"_top")},openProcessManagePortalPage:function(){Object(p["b"])("publishPortal",this.$store.state.sessionId,"com.actionsoft.apps.coe.pal.publisher_client_home")}},created:function(){this.initParam()}},I=k,S=(a("37dc"),Object(f["a"])(I,s,n,!1,null,"1fb2507b",null)),T=S.exports,F=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-dialog",{staticClass:"pwd-change",attrs:{title:"修改密码",visible:e.pwdConfig,"append-to-body":!0,top:"15%",width:"600px","before-close":e.handleClose},on:{"update:visible":function(t){e.pwdConfig=t}}},[a("table",{staticStyle:{width:"420px"}},[a("tbody",[a("tr",[a("td",{staticClass:"text-general-color",staticStyle:{width:"125px"}},[e._v("旧口令")]),a("td",[a("span",{staticClass:"text-important-color"},[e._v("* ")]),a("el-input",{staticStyle:{width:"240px","margin-bottom":"5px"},attrs:{size:"small",id:"pwd1",placeholder:"",name:"pwd1","auto-complete":"new-password",type:"password"},model:{value:e.pwd1,callback:function(t){e.pwd1=t},expression:"pwd1"}})],1),a("td")]),a("tr",[a("td",{staticClass:"text-general-color"},[e._v("新口令")]),a("td",[a("span",{staticClass:"text-important-color"},[e._v("* ")]),a("el-input",{staticStyle:{width:"240px","margin-bottom":"5px"},attrs:{size:"small",placeholder:"",id:"pwd2",name:"pwd2","auto-complete":"new-password",type:"password"},model:{value:e.pwd2,callback:function(t){e.pwd2=t},expression:"pwd2"}})],1),a("td")]),a("tr",[a("td",{staticClass:"text-general-color"},[e._v("确认口令")]),a("td",[a("span",{staticClass:"text-important-color"},[e._v("* ")]),a("el-input",{staticStyle:{width:"240px","margin-bottom":"5px"},attrs:{size:"small",id:"pwd3",name:"pwd3",placeholder:"","auto-complete":"new-password",type:"password"},model:{value:e.pwd3,callback:function(t){e.pwd3=t},expression:"pwd3"}})],1),a("td")])])]),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{staticClass:"button-general-color",attrs:{type:"primary"},on:{click:function(t){return e.saveUserPwd()}}},[e._v("确定")]),a("awsui-button",{on:{click:function(t){return e.clearPwd(!0)}}},[e._v("取消")])],1)])},D=[],N={name:"PwdChange",data:function(){return{pwdConfig:!1,pwd1:"",pwd2:"",pwd3:""}},methods:{saveUserPwd:function(){var e=this,t="success",a="";if(""==e.pwd1?(t="warning",a="[旧口令]不允许为空"):""==e.pwd2?(t="warning",a="[新口令]不允许为空"):""==e.pwd3?(t="warning",a="[确认口令]不允许为空"):e.pwd1==e.pwd2?(t="warning",a="新口令和旧口令不能相同"):e.pwd2!=e.pwd3?(t="warning",a="新口令和确认口令不一致"):e.pwd2.indexOf(" ")>-1?(t="warning",a="[新口令]不能包含空格"):e.pwd3.indexOf(" ")>-1&&(t="warning",a="[确认口令]不能包含空格"),"success"!=t)return e.$message({message:a,duration:2e3,type:t}),!1;if(e.validateUpdateLoginpassword(e.pwd2,"新口令"))return!1;var o={url:"jd",data:{cmd:"CLIENT_P_PERSON_CONFIG_PW_ISRIGHT",oldpwd:e.pwd1}};u["a"].post(o).then((function(t){if("-1"==t)return e.$message.error("旧口令输入错误,请重新输入"),!1;var a={url:"jd",data:{cmd:"CLIENT_P_PERSON_CONFIG_PW_SAVE",oldpwd:e.pwd1,newpwd:e.pwd2}};u["a"].post(a).then((function(t){"ok"==t.result?(e.$message({message:t.msg,type:"success"}),e.clearPwd(!0)):e.$message.error(t.msg)})).catch((function(e){console.log(e)}))})).catch((function(e){console.log(e)}))},validateUpdateLoginpassword:function(e,t){if(securityMinPwdLength>0){if(e.length<securityMinPwdLength)return this.$message({message:"["+t+"]不得少于"+securityMinPwdLength+"个字符",type:"warning"}),!0;if(e.length>securityMaxPwdLength)return this.$message({message:"["+t+"]不允许超过"+securityMaxPwdLength+"个字符",duration:2e3,type:"warning"}),!0}return isSecurityPwdComplexity,!1},checkPasswordLength:function(e,t){var a=jQuery("#minLength").val();return!(length2(e)<a||length2(t)<a)||($.simpleAlert("口令长度不能少于"+a+"位","error",2e3),!1)},handleClose:function(e){this.clearPwd(!1),e()},clearPwd:function(e){var t=this;t.pwd1="",t.pwd2="",t.pwd3="",e&&(t.pwdConfig=!1)}}},A=N,L=(a("0006"),Object(f["a"])(A,F,D,!1,null,"8c1454a0",null)),O=L.exports,M=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-container",{attrs:{id:"workspaceBackUp"}},[a("el-header",{staticStyle:{height:"50px"}},[a("div",{staticStyle:{margin:"10px"}},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"130px"},attrs:{type:"primary"},on:{click:function(t){return e.createBackup()}}},[e._v("新建备份")])],1)]),a("el-main",[a("el-table",{ref:"workspaceBackupTable",staticStyle:{width:"100%"},attrs:{id:"workspaceBackupTable",data:e.tableData,height:e.tableHeight}},[a("el-table-column",{attrs:{prop:"time",label:"备份时间",width:"250"}}),a("el-table-column",{attrs:{prop:"user",label:"操作用户",width:"180"}}),a("el-table-column",{attrs:{prop:"remark",label:"备注","min-width":"180"}}),a("el-table-column",{attrs:{prop:"operation",label:"操作",width:"200",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[0!=t.row.state&&2!=t.row.state&&3!=t.row.state?a("div",[a("el-tooltip",{staticClass:"item",attrs:{content:"修改",placement:"bottom","hide-after":2e3}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{cursor:"pointer"},on:{click:function(a){return e.update(t.row.id,t.row.remark)}}},[e._v("")])]),a("el-tooltip",{staticClass:"item",attrs:{content:"恢复",placement:"bottom","hide-after":2e3}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{cursor:"pointer"},on:{click:function(a){return e.recover(t.row.id,t.row.time)}}},[e._v("")])]),a("el-tooltip",{staticClass:"item",attrs:{content:"导出",placement:"bottom","hide-after":2e3}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{cursor:"pointer"},on:{click:function(a){return e.exportBackup(t.row.id)}}},[e._v("")])]),a("el-tooltip",{staticClass:"item",attrs:{content:"删除",placement:"bottom","hide-after":2e3}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{cursor:"pointer"},on:{click:function(a){return e.deleteBackup(t.row.id,t.row.time)}}},[e._v("")])])],1):e._e(),0==t.row.state?a("div",[a("el-tooltip",{staticClass:"item",attrs:{content:"正在备份...",placement:"bottom","hide-after":2e3}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{cursor:"default"}},[e._v("")])])],1):e._e(),2==t.row.state?a("div",[a("el-tooltip",{staticClass:"item",attrs:{content:"备份失败",placement:"bottom","hide-after":2e3}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{cursor:"default"}},[e._v("")])]),a("el-tooltip",{staticClass:"item",attrs:{content:"删除",placement:"bottom","hide-after":2e3}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{cursor:"pointer"},on:{click:function(a){return e.deleteBackup(t.row.id,t.row.time)}}},[e._v("")])])],1):e._e(),3==t.row.state?a("div",[a("el-tooltip",{staticClass:"item",attrs:{content:"正在恢复...",placement:"bottom","hide-after":2e3}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{cursor:"default"}},[e._v("")])])],1):e._e()]}}])})],1),a("el-dialog",{attrs:{title:"资产库备份",visible:e.dialogVisible,width:"30%","before-close":e.handleClose,"modal-append-to-body":!1,"close-on-click-modal":!1},on:{"update:visible":function(t){e.dialogVisible=t}}},[a("div",{staticStyle:{"margin-bottom":"10px"}},[a("label",[e._v("备注")])]),a("el-input",{attrs:{type:"textarea",placeholder:"请输入备注",maxlength:"200",rows:5,"show-word-limit":""},model:{value:e.updateRemark,callback:function(t){e.updateRemark=t},expression:"updateRemark"}}),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{staticClass:"button-general-color",attrs:{disabled:!1,type:"primary"},on:{click:e.save}},[e._v("确定")]),a("awsui-button",{on:{click:e.closeDlg}},[e._v("取消")])],1)],1)],1)],1)},H=[],P={name:"WorkspaceBackup",data:function(){return{tableHeight:parseInt(this.$store.getters.getTopMainHeightFn)-22-50+"px",tableData:[],dialogVisible:!1,updateType:"create",updateId:"",updateRemark:"",exportProgressTimeout:"",stateInterval:""}},props:["wsId"],computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},created:function(){},mounted:function(){var e=this;e.initData(),setTimeout((function(){e.stateInterval=setInterval((function(){e.refreshState()}),1e3)}),2e3)},methods:{initData:function(e){var t=this,a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_ws_backup_data_query",wsId:t.wsId}};u["a"].post(a).then((function(a){if("ok"==a.result){var o=a.data;t.tableData=o,(void 0==e||e)&&(t.$refs.workspaceBackupTable.bodyWrapper.scrollTop=0)}})).catch((function(e){console.log(e)}))},createBackup:function(){this.updateRemark="",this.updateId="",this.updateType="create",this.dialogVisible=!0},update:function(e,t){this.updateRemark=t,this.updateId=e,this.updateType="update",this.dialogVisible=!0},save:function(){var e=this;if(""==e.updateRemark.trim())return e.$message({message:"[备注]不允许为空",type:"warning"}),!1;if("create"==e.updateType){var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_backup_add",wsId:e.wsId,remark:e.updateRemark}};u["a"].post(t).then((function(t){e.initData(),e.closeDlg()})).catch((function(e){console.log(e)}))}else{var a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_backup_update",id:e.updateId,remark:e.updateRemark}};u["a"].post(a).then((function(t){e.$message({message:"修改成功",type:"success"}),e.initData(),e.closeDlg()})).catch((function(e){console.log(e)}))}},recover:function(e,t){var a=this;a.$confirm("恢复后,当前数据无法找回,请先备份当前数据!要继续恢复["+t+"]的备份吗?","提示",{confirmButtonText:"是,已经备份",cancelButtonText:"否,去备份",confirmButtonClass:"button-general-color",type:"warning"}).then((function(){var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_backup_recover",wsId:a.wsId,id:e}};u["a"].post(t).then((function(e){a.initData(!1)})).catch((function(e){console.log(e)}))})).catch((function(){a.createBackup()}))},exportBackup:function(e){var t=this,a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_backup_export",wsId:t.wsId,id:e}};u["a"].post(a).then((function(a){t.exportProgressTimeout=setInterval((function(){t.exportBackupProgress(e)}),2e3)})).catch((function(e){console.log(e)}))},exportBackupProgress:function(e){var t=this,a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_backup_export_progress",wsId:t.wsId,id:e}};u["a"].post(a).then((function(a){if("finish"==a.data.progress)clearTimeout(t.exportProgressTimeout),t.exportProgressTimeout="",t.exportBackupDownload(e);else if("byhand"==a.data.progress){clearTimeout(t.exportProgressTimeout),t.exportProgressTimeout="",$.simpleAlert("close");var o=t.wsId+".bak";this.$message({showClose:!0,message:"文件过大,请联系管理员在服务器/doccenter/com.actionsoft.apps.coe.pal/tmp/exp/repository目录下获取备份文件"+o,duration:0})}})).catch((function(e){console.log(e)}))},exportBackupDownload:function(e){var t=this,a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_backup_export_download",wsId:t.wsId,id:e}};u["a"].post(a).then((function(e){window.open(e.data.downloadUrl)})).catch((function(e){console.log(e)}))},deleteBackup:function(e,t){var a=this;a.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",confirmButtonClass:"button-general-color",type:"warning"}).then((function(){var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_backup_delete",wsId:a.wsId,id:e}};u["a"].post(t).then((function(t){a.$message({type:"success",message:"删除成功!"});for(var o=0;o<a.tableData.length;o++)if(a.tableData[o].id==e){a.tableData.splice(o,1);break}})).catch((function(e){console.log(e)}))})).catch((function(){}))},handleClose:function(e){e()},closeDlg:function(){this.dialogVisible=!1,this.updateRemark="",this.updateType="create",this.updateId=""},refreshState:function(){for(var e=this,t=function(t){var a=e.tableData[t];if(0==a.state||3==a.state){var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_backup_state",wsId:e.wsId,id:a.id}};u["a"].post(o).then((function(a){e.tableData[t].state=a.data.state,4==a.data.state&&(e.$message({message:"恢复成功",type:"success"}),setTimeout((function(){location.reload()}),1e3))})).catch((function(e){console.log(e)}))}},a=0;a<e.tableData.length;a++)t(a)}},watch:{listenTopMainHeight:function(e,t){this.tableHeight=parseInt(e)-22-50+"px"}},beforeDestroy:function(){clearInterval(this.stateInterval),clearInterval(this.exportProgressTimeout)}},U=P,q=(a("6359"),Object(f["a"])(U,M,H,!1,null,"f171001a",null)),R=q.exports,j=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("awsui-layout",{attrs:{id:"repMark"}},[a("awsui-aside",{attrs:{width:"50%"}},[a("div",{staticClass:"treeWrapper"},[a("div",{staticClass:"treeHeader",style:{height:e.headerHeight}},[a("div",{staticClass:"textWrapper"},[a("span",{staticClass:"title"},[e._v("文件密级")]),-1!=e.fileUnMarkNum?a("span",{staticClass:"desc"},[e._v("共有"),a("span",{staticStyle:{color:"red"}},[e._v(e._s(e.fileUnMarkNum))]),e._v("个待标密文件")]):e._e()]),a("div",{staticClass:"button"},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{height:"36px",margin:"0","font-size":"14px"},attrs:{type:"primary"},on:{click:e.quickMark}},[e._v("快速定位 ")])],1)]),a("div",{staticClass:"treeMain",style:{"padding-left":"2rem",height:e.mainHeight}},[a("el-tree",{ref:"tree",attrs:{props:e.treeProps,"expand-on-click-node":!1,"highlight-current":!0,"node-key":"id",lazy:"",load:e.loadNode},on:{"node-click":e.openNode,"node-expand":e.expandNode,"node-collapse":e.closeNode},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.node,i=t.data;return a("span",{},[a("i",{staticClass:"awsui-iconfont tree-content-icon tree-content-icon-padding",style:{color:o.data.icon.color},domProps:{innerHTML:e._s(o.data.icon.icon)}}),a("span",{style:{"font-weight":i.id.length<36?"600":""}},[e._v(" "+e._s(o.label)+" "),i.id.length>=26&&!i.folder&&"未标密"!=i.securityLevelName?a("span",{staticClass:"font12 blue"},[e._v(" "+e._s(i.securityLevelName)+" ")]):e._e(),i.id.length>=26&&!i.folder&&"未标密"==i.securityLevelName?a("span",{staticClass:"font12 red",on:{click:function(t){return e.showMarkDialog(i,-1,"file")}}},[e._v(" "+e._s(i.securityLevelName)+" ")]):e._e(),i.id.length>=26&&!i.folder&&i.isUpfileUnmark?a("span",{staticClass:"font12 red"},[e._v(" 附件未标密 ")]):e._e()])])}}])})],1)])]),a("awsui-main",[a("div",{staticClass:"markWrapper"},[a("div",{staticClass:"treeHeader"},[a("div",{staticClass:"textWrapper"},[a("span",{staticClass:"title"},[e._v("附件密级")]),a("span",{staticClass:"desc"},[e._v(" 共有 "),a("span",{staticClass:"red"},[e._v(e._s(e.upFileUnMark.length))]),e._v(" 个待标密文件 ")])]),a("div",{staticClass:"button"},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{height:"36px",margin:"0","font-size":"14px"},attrs:{type:"primary"},on:{click:e.showMark}},[e._v(" 快速定位 ")])],1)]),e.upFileTable.length<=0&&e.shapeTable.length<=0?a("div",{staticClass:"treeMain noData"},[a("div",{staticClass:"wrapper"},[a("div",{staticStyle:{"text-align":"center"}},[a("span",[a("i",{staticClass:"iconfont",staticStyle:{color:"#c2c2c2","font-size":"60px"}},[e._v("  ")])]),a("p",{staticClass:"text-general-color",staticStyle:{margin:"15px 0"}},[e._v(" 暂无未标定密级文件 ")])])])]):a("div",{staticClass:"fileWrapper"},[e.upFileTable.length>0?a("div",[a("div",{staticClass:"title font16"},[e._v("文件密级")]),a("div",{staticClass:"fileList"},[a("ul",e._l(e.upFileTable,(function(t,o){return a("li",{key:t.id,style:{cursor:-1===t.securityLevel?"pointer":"default"},on:{click:function(a){return e.showMarkDialog(t,o,"upfile")}}},[a("span",[a("i",{staticClass:"awsui-iconfont"},[e._v("  ")]),a("span",[e._v(e._s(t.fileName))]),-1===t.securityLevel?a("span",{staticClass:"font12 red ml12"},[e._v(" 未标密 ")]):a("span",{staticClass:"font12 blue ml12"},[e._v(e._s(t.securityLevel))])])])})),0)])]):e._e(),e.shapeTable.length>0?a("div",{staticClass:"mt1rem"},[a("div",{staticClass:"title font16"},[e._v("形状密级")]),a("div",{staticClass:"fileList"},[a("ul",e._l(e.shapeTable,(function(t,o){return a("li",{key:t.id,on:{click:function(a){return e.showMarkDialog(t,o,"shape")}}},[a("span",[a("i",{staticClass:"awsui-iconfont"},[e._v("  ")]),a("span",[e._v(e._s(t.fileName))]),-1===t.securityLevel?a("span",{staticClass:"font12 red ml12"},[e._v(" 未标密 ")]):a("span",{staticClass:"font12 blue ml12"},[e._v(e._s(t.securityLevel))])])])})),0)])]):e._e()])])]),a("awsui-dialog",{attrs:{title:"密级标定",visible:e.securityVisible,border:!1,"append-to-body":"",width:"500px"},on:{"update:visible":function(t){e.securityVisible=t}}},[a("div",{staticStyle:{"max-height":"500px","overflow-y":"auto"}},[a("awsui-form",{ref:"securityDialog",attrs:{"label-width":"200px",id:"securityDialog",rules:e.securityRules,model:e.securityForm}},[a("awsui-form-item",{attrs:{label:e.securityForm.name,prop:"securityLevel"}},[a("awsui-select",{staticStyle:{width:"70%"},attrs:{options:e.securityOptions},model:{value:e.securityForm.securityLevel,callback:function(t){e.$set(e.securityForm,"securityLevel",t)},expression:"securityForm.securityLevel"}})],1)],1)],1),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{attrs:{type:"primary"},on:{click:e.securityMark}},[e._v("确定")]),a("awsui-button",{on:{click:function(t){e.securityVisible=!1}}},[e._v("取 消")])],1)])],1)},z=[],V={name:"RepositoryMark",data:function(){var e=function(e,t,a){void 0===t?a(new Error("请选择文件密级")):a()};return{treeProps:{value:"id",label:"name",isLeaf:"leaf"},headerHeight:"30px",securityVisible:!1,securityRules:{securityLevel:[{required:!0,trigger:"change",validator:e,type:"number"}]},securityForm:{},securityOptions:[],securityList:{},upFileTable:[],shapeTable:[],fileUnMarkNum:-1,upFileUnMark:[],pl_uuid:"",resolveFun:[],path:[],pid:""}},computed:{mainHeight:function(){return parseInt(this.$store.getters.getTopMainHeightFn)-parseInt(this.headerHeight)+"px"}},watch:{securityVisible:function(e,t){e||(this.securityForm={})}},created:function(){},mounted:function(){},methods:{loadUpfile:function(e){this.pl_uuid=e;var t=this,a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_upfile_load_all",pl_uuid:e,type:"file",wsId:t.$store.getters.getWsIdFn,teamId:t.$store.getters.getTeamIdFn}};u["a"].post(a).then((function(e){if("ok"==e.result){t.upFileUnMark=[],t.securityList=e.data.securityList,t.securityOptions=[],Object.keys(t.securityList).map((function(e){var a={value:e,label:t.securityList[e]};t.securityOptions.push(a)}));for(var a=e.data.upfileList,o=[],i=0;i<a.length;i++){var s=a[i];-1==s.securityLevel&&t.upFileUnMark.push(s);var n={id:s.uuid,fileName:s.fileName,securityLevel:-1==s.securityLevel?-1:e.data.securityList[s.securityLevel]};o.push(n)}t.upFileTable=o;var r=e.data.shapeList;o=[];for(var l=0;l<r.length;l++){var c=r[l];-1==c.securityLevel&&t.upFileUnMark.push(c);var d={id:c.uuid,fileName:c.fileName,securityLevel:-1==c.securityLevel?-1:e.data.securityList[c.securityLevel]};o.push(d)}if(t.shapeTable=o,0==t.upFileUnMark.length){var p=t.$refs.tree,u=p.getNode(t.pl_uuid);u.data.isUpfileUnmark=!1}}})).catch((function(e){console.log(e)}))},quickMark:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_upfile_unmark_path",wsId:e.$store.getters.getWsIdFn,teamId:e.$store.getters.getTeamIdFn}};u["a"].post(t).then((function(t){if("ok"==t.result)if(e.path=[],e.pid="",0==t.data.path.length)e.$message({message:"已全部标定密级",type:"success"});else{e.path=t.data.path;for(var a=0;a<e.path.length;a++){var o=e.$refs.tree,i=o.getNode(e.path[a]);if(null!=i){i.expand();var s=e.path.indexOf(e.path[a]);-1!=s&&(e.pid=e.path[s],e.path.splice(s,1),a--),0==e.path.length&&(o.setCurrentKey(e.pid),e.loadUpfile(e.pid),-1!=e.fileUnMarkNum&&e.showMarkDialog(i.data,-1,"file"))}}var n=e.$refs.tree,r=n.getNode(e.pid);r.expand()}})).catch((function(e){console.log(e)}))},showMark:function(){if(this.upFileUnMark.length>0){var e=this.upFileUnMark[0],t=[];t="f"===e.type?this.upFileTable:this.shapeTable;for(var a=0;a<t.length;a++)if(e.uuid===t[a].id){"f"===e.type?this.showMarkDialog(e,a,"upfile"):this.showMarkDialog(e,a,"shape");break}}else this.$message({message:"暂无可标定密级文件",type:"success"})},showMarkDialog:function(e,t,a){-1===e.securityLevel&&(this.securityVisible=!0,this.securityForm.index=t,this.securityForm.name=void 0==e.fileName?e.name:e.fileName,this.securityForm.type=a,this.securityForm.node=e)},securityMark:function(){var e=this,t=this,a=this.securityForm.node;this.$refs.securityDialog.validate((function(o){if(o)if("file"==e.securityForm.type){var i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_file_security_level_update",uuid:a.id,securityLevel:t.securityForm.securityLevel}};u["a"].post(i).then((function(e){if(t.securityVisible=!1,"ok"==e.result){t.loadUpfile(t.pl_uuid);var a=t.securityList[t.securityForm.securityLevel],o=t.$refs.tree.getNode(t.pl_uuid);o.data.securityLevelName=a,t.fileUnMarkNum--,t.$message({message:"密级标定成功",type:"success"})}})).catch((function(e){console.log(e),t.securityVisible=!1,t.$message.error("密级标定失败")}))}else{var s={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_processlevel_upfile_security_level_update",uuid:void 0==a.id?a.uuid:a.id,securityLevel:t.securityForm.securityLevel}};u["a"].post(s).then((function(e){t.securityVisible=!1,"ok"==e.result&&(t.loadUpfile(t.pl_uuid),t.$message({message:"密级标定成功",type:"success"}))})).catch((function(e){console.log(e),t.securityVisible=!1,t.$message.error("密级标定失败")}))}}))},openNode:function(e,t,a){this.loadUpfile(t.data.id)},expandNode:function(e,t,a){},closeNode:function(e,t,a){},loadNode:function(e,t){var a=this,o={url:"jd",data:{}};o.data.wsId=a.$store.getters.getWsIdFn,o.data.teamId=a.$store.getters.getTeamIdFn,o.data.cmd="com.actionsoft.apps.coe.pal_processlevel_tree_data",0===e.level?o.data.pid="":o.data.pid=e.data.id,u["a"].post(o).then((function(i){if("ok"==i.result){if(t(i.data),a.$nextTick((function(){if(a.path.length>0){a.pid=a.path[0];var e=a.$refs.tree,t=e.getNode(a.path[0]);null!=t&&(t.expand(),a.path.splice(0,1)),0==a.path.length&&(e.setCurrentKey(a.pid),a.loadUpfile(a.pid),-1!=a.fileUnMarkNum&&a.showMarkDialog(t.data,-1,"file"))}})),0==e.level&&i.data.length>0){var s=a.$refs.tree;s.getNode(i.data[0].id).expand(),setTimeout((function(){var e=s.getNode(i.data[0].id).childNodes[0];null!=e&&e.expand()}),500)}if(i.data.length>0){var n=i.data[0];void 0!=n.isFileSecurity&&n.isFileSecurity&&-1==a.fileUnMarkNum&&a.getUnmarkFileNum(o.data.wsId,o.data.teamId)}}})).catch((function(e){console.log(e)}))},getUnmarkFileNum:function(e,t){var a=this,o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_file_unmark_num_query",wsId:e,teamId:t}};u["a"].post(o).then((function(e){"ok"==e.result&&(a.fileUnMarkNum=e.data.unmarkFileNum)})).catch((function(e){console.log(e),a.securityVisible=!1,a.$message.error("获取未标密文件失败")}))}}},B=V,E=(a("5a2a"),Object(f["a"])(B,j,z,!1,null,"a3e13d60",null)),Q=E.exports,W=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-container",{attrs:{id:"recycle"}},[a("el-header",{attrs:{height:e.headerHeight}},[a("el-row",{style:{"line-height":e.headerHeight}},[a("el-col",{attrs:{span:24}},[a("div",{staticStyle:{display:"inline-block",float:"left",width:"150px"}},[a("div",{staticClass:"text-general-color",staticStyle:{"padding-left":"20px","text-align":"left","vertical-align":"middle",display:"table-cell",width:"100%",height:"36px"}},[e._v(" 共有 "),a("span",{staticStyle:{color:"red"}},[e._v(e._s(e.totalCount))]),e._v(" 条数据 ")])]),a("div",{staticStyle:{display:"inline-block",float:"right",width:"220px","padding-right":"20px"}},[a("el-input",{attrs:{placeholder:"搜索","prefix-icon":"el-icon-search",size:"small",clearable:""},on:{input:e.searchProcessList},model:{value:e.searchInput,callback:function(t){e.searchInput=t},expression:"searchInput"}})],1)])],1)],1),a("el-main",[a("el-table",{ref:"table",attrs:{id:"table",data:e.tableData,size:"medium",height:e.tableHeight,"cell-class-name":e.cellClass},on:{"cell-mouse-enter":e.enterRow,"cell-mouse-leave":e.leaveRow,"selection-change":e.handleSelectionChange}},[a("el-table-column",{attrs:{type:"selection",width:"66",align:"center"}}),a("el-table-column",{attrs:{prop:"name",label:"文件名称","min-width":"250"}}),a("el-table-column",{attrs:{prop:"user",label:"操作用户",width:"200"}}),a("el-table-column",{attrs:{prop:"date",label:"删除时间",width:"170"}}),a("el-table-column",{attrs:{prop:"operate",label:"操作",width:"200",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("div",{ref:t.row.id,staticClass:"operate-icon-display"},[a("el-tooltip",{staticClass:"item",attrs:{content:"还原",placement:"bottom","hide-after":2e3}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{cursor:"pointer"},on:{click:function(a){return e.recoverFiles(t.row.id)}}},[e._v("")])]),a("el-tooltip",{staticClass:"item",attrs:{content:"删除",placement:"bottom","hide-after":2e3}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{cursor:"pointer"},on:{click:function(a){return e.removeFiles(t.row.id)}}},[e._v("")])])],1)]}}])})],1)],1),a("el-footer",{directives:[{name:"show",rawName:"v-show",value:e.showFooter,expression:"showFooter"}],attrs:{height:e.footerHeight}},[a("div",[a("div",{staticStyle:{padding:"8px"}},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"100px"},attrs:{type:"primary"},on:{click:function(t){return e.recoverFiles()}}},[e._v("还原")]),a("awsui-button",{staticClass:"button-general-color-reverse2",staticStyle:{width:"100px"},attrs:{plain:""},on:{click:function(t){return e.removeFiles()}}},[e._v("删除")]),a("awsui-button",{staticClass:"button-general-color-reverse3",staticStyle:{width:"100px"},attrs:{plain:""},on:{click:e.closeFooter}},[e._v("取消")])],1)])])],1)},J=[];function K(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var G={name:"Recycle",data:function(){var e;return e={headerHeight:"40px",tableHeight:parseInt(this.$store.getters.getTopMainHeightFn)-40+"px",footerHeight:"45px",totalCount:0,showFooter:!1,searchInput:"",multipleSelection:[],tableData:[]},K(e,"totalCount","?"),K(e,"currentPage",0),K(e,"pageStep",0),K(e,"rowHeight",45),e},mounted:function(){0==this.currentPage&&this.searchProcessList(),this.scorllBottomEvent()},methods:{initPageCount:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_recycle_header_query",wsId:this.$store.getters.getWsIdFn,teamId:this.$store.getters.getTeamIdFn,searchInput:this.searchInput?this.searchInput.trim():""}};u["a"].post(t).then((function(t){"ok"==t.result&&(e.totalCount=t.data,e.currentPage=0,e.pageStep=Math.ceil(parseInt(e.tableHeight)/e.rowHeight)+5,e.loadData())})).catch((function(e){console.log(e)}))},loadData:function(){var e=this;if(e.currentPage<Math.ceil(e.totalCount/e.pageStep)){var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_recycle_data_query",wsId:this.$store.getters.getWsIdFn,teamId:this.$store.getters.getTeamIdFn,currentPage:e.currentPage,pageStep:e.pageStep,searchInput:this.searchInput?this.searchInput.trim():""}};u["a"].post(t).then((function(t){if("ok"==t.result){for(var a=t.data,o=0;o<a.length;o++)a[o].rowChecked=!1;e.tableData=e.tableData.concat(a),e.currentPage++}})).catch((function(e){console.log(e)}))}},searchProcessList:function(){this.$refs.table.bodyWrapper.scrollTop=0,this.tableData=[],this.multipleSelection=[],this.initPageCount()},initTableHeight:function(){this.showFooter?this.tableHeight=parseInt(this.$store.getters.getTopMainHeightFn)-parseInt(this.headerHeight)-parseInt(this.footerHeight)+"px":this.tableHeight=parseInt(this.$store.getters.getTopMainHeightFn)-parseInt(this.headerHeight)+"px"},handleSelectionChange:function(e){this.multipleSelection=[];for(var t=0;t<e.length;t++)this.multipleSelection.push(e[t].id);if(e.length>0){for(var a=[],o=0;o<e.length;o++){var i=e[o];a.push(i.id)}for(var s=0;s<this.tableData.length;s++){var n=this.tableData[s].id;-1==a.indexOf(n)?(this.tableData[s].rowChecked=!1,this.hideRowCheckbox(this.$refs[n])):(this.tableData[s].rowChecked=!0,this.showRowCheckbox(this.$refs[n]))}this.showFooter=!0}else{for(var r=0;r<this.tableData.length;r++)this.tableData[r].rowChecked=!1,this.hideRowCheckbox(this.$refs[this.tableData[r].id]);this.showFooter=!1}this.initTableHeight()},cellClass:function(e){if(!e.row.rowChecked&&0===e.columnIndex)return"row-checkbox-hide"},hideRowCheckbox:function(e){var t=Object(p["a"])(e,"TR"),a=t.firstChild;a.classList.add("row-checkbox-hide")},showRowCheckbox:function(e){var t=Object(p["a"])(e,"TR"),a=t.firstChild;a.classList.remove("row-checkbox-hide")},enterRow:function(e,t,a,o){var i=Object(p["a"])(a,"TR"),s=i.firstChild;s.classList.remove("row-checkbox-hide")},leaveRow:function(e,t,a,o){if(e.rowChecked){var i=Object(p["a"])(a,"TR"),s=i.firstChild;s.classList.remove("row-checkbox-hide")}else{var n=Object(p["a"])(a,"TR"),r=n.firstChild;r.classList.add("row-checkbox-hide")}},closeFooter:function(){this.$refs.table.clearSelection()},recoverFiles:function(e){var t=this;t.$confirm("确定要还原吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",type:"warning"}).then((function(){var a=[];if(e)a.push("'"+e+"'");else for(var o=0;o<t.multipleSelection.length;o++)a.push("'"+t.multipleSelection[o]+"'");var i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_recycle_restore",removeIds:a.join(",")}};u["a"].post(i).then((function(e){"ok"==e.result?(t.$message({message:"还原成功",type:"success"}),t.searchProcessList()):t.$message(e.msg)})).catch((function(e){console.log(e)}))})).catch((function(){}))},removeFiles:function(e){var t=this;t.$confirm("回收站中的数据删除后无法恢复,确定要删除吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",type:"warning"}).then((function(){var a=[];if(e)a.push("'"+e+"'");else for(var o=0;o<t.multipleSelection.length;o++)a.push("'"+t.multipleSelection[o]+"'");var i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_recycle_delete",removeIds:a.join(",")}};u["a"].post(i).then((function(e){"ok"==e.result?(t.$message({message:"删除成功",type:"success"}),t.searchProcessList()):t.$message(e.msg)})).catch((function(e){console.log(e)}))})).catch((function(){}))},scorllBottomEvent:function(){var e=this,t=document.querySelector(".el-table__body-wrapper");t.addEventListener("scroll",(function(){var a=t.scrollHeight-t.scrollTop-t.clientHeight;a<=0&&e.loadData()}))}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(e,t){this.tableHeight=parseInt(e)-parseInt(this.headerHeight)+"px",this.searchProcessList()}}},Y=G,X=(a("c533"),Object(f["a"])(Y,W,J,!1,null,"588f5c6f",null)),Z=X.exports,ee=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-container",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"text-general-color",attrs:{id:"method"}},[a("el-header",{style:{height:e.headerHeight}},[a("el-row",{style:{height:e.headerHeight}},[a("el-col",{attrs:{span:8}},[a("div",{staticStyle:{"vertical-align":"middle"},style:{height:e.headerHeight,"line-height":e.headerHeight}},[a("span",[e._v("建模方法: ")]),a("el-dropdown",{attrs:{placement:"bottom-end"}},[a("span",{staticClass:"el-dropdown-link"},[a("span",{staticClass:"text-linker-color",staticStyle:{cursor:"pointer"}},[e._v(e._s(e.activeMethod.name))]),a("i",{staticClass:"awsui-iconfont",staticStyle:{"font-size":"12px",cursor:"pointer"}},[e._v("")])]),a("el-dropdown-menu",{staticStyle:{"min-width":"200px","max-height":"500px","overflow-y":"auto"},attrs:{slot:"dropdown"},slot:"dropdown"},[e._l(e.methodData,(function(t){return["group"==t.type?a("el-dropdown-item",{staticStyle:{"font-size":"12px",color:"#000",height:"80%"},attrs:{disabled:!0}},[a("b",[e._v(e._s(t.name))])]):a("el-dropdown-item",{nativeOn:{click:function(a){return e.changeMethod(t.id,t.name)}}},[e._v(e._s(t.name))])]})),a("el-dropdown-item",{staticClass:"text-linker-color",attrs:{divided:""},nativeOn:{click:function(t){return e.createMethod()}}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{"font-size":"12px"}},[e._v("")]),e._v("新增建模方法")])],2)],1)],1)]),a("el-col",{attrs:{span:8}},[a("div",{staticStyle:{"text-align":"center","vertical-align":"middle"},style:{height:e.headerHeight,"line-height":e.headerHeight}},[a("div",{class:{"button-general-color":"methodObject"==e.activeType,"text-color-white":"methodObject"==e.activeType},staticStyle:{display:"inline-block","border-radius":"2px",padding:"0 15px",width:"70px",height:"28px","line-height":"28px","vertical-align":"middle",cursor:"pointer"},on:{click:function(t){return e.changeMethodType("methodObject")}}},[a("span",[e._v("建模对象")])]),a("div",{class:{"button-general-color":"methodAttribute"==e.activeType,"text-color-white":"methodAttribute"==e.activeType},staticStyle:{display:"inline-block","border-radius":"2px",margin:"0 20px",width:"70px",padding:"0 15px",height:"28px","line-height":"28px","vertical-align":"middle",cursor:"pointer"},on:{click:function(t){return e.changeMethodType("methodAttribute")}}},[a("span",[e._v("数据特性")])]),a("div",{class:{"button-general-color":"methodLink"==e.activeType,"text-color-white":"methodLink"==e.activeType},staticStyle:{display:"inline-block","border-radius":"2px",padding:"0 15px",width:"70px",height:"28px","line-height":"28px","vertical-align":"middle",cursor:"pointer"},on:{click:function(t){return e.changeMethodType("methodLink")}}},[a("span",[e._v("连线关系")])])])]),a("el-col",{attrs:{span:8}},["methodObject"==e.activeType?a("div",{staticStyle:{"text-align":"right","vertical-align":"middle"},style:{height:e.headerHeight,"line-height":e.headerHeight}},[a("el-input",{staticStyle:{width:"300px"},attrs:{placeholder:"请输入形状名称进行检索","prefix-icon":"el-icon-search",size:"small",clearable:""},on:{input:function(t){return e.search()}},model:{value:e.searchInput,callback:function(t){e.searchInput=t},expression:"searchInput"}})],1):e._e(),"methodAttribute"==e.activeType?a("div",{staticStyle:{"vertical-align":"middle","text-align":"right"},style:{height:e.headerHeight,"line-height":e.headerHeight}},[a("el-dropdown",{attrs:{placement:"bottom-start",trigger:"click"}},[a("span",{staticClass:"el-dropdown-link"},[a("span",{staticClass:"text-general-color",staticStyle:{cursor:"pointer"}},[e._v(e._s(e.methodAttribute.value.name))]),a("i",{staticClass:"awsui-iconfont",staticStyle:{"font-size":"12px",cursor:"pointer"}},[e._v("")])]),a("el-dropdown-menu",{staticStyle:{"min-width":"120px","max-height":"500px","overflow-y":"auto"},attrs:{slot:"dropdown"},slot:"dropdown"},[e._l(e.methodAttribute.opts,(function(t){return[a("el-dropdown-item",{staticClass:"el-dropdown-row",nativeOn:{click:function(a){return e.changeAttrScope(t)}}},[a("div",{staticStyle:{height:"100%",width:"100%","font-size":"14px"}},[e._v(e._s(t.name))])])]}))],2)],1)],1):e._e()])],1)],1),a("el-main",["methodObject"==e.activeType?a("MethodObject",{ref:"methodObject",attrs:{parentHeaderHeight:e.headerHeight,methodId:e.activeMethod.id,methodName:e.activeMethod.name,searchInput:e.searchInput}}):e._e(),"methodAttribute"==e.activeType?a("MethodAttribute",{ref:"methodObject",attrs:{parentHeaderHeight:e.headerHeight,methodId:e.activeMethod.id,methodName:e.activeMethod.name,searchInput:e.searchInput,methodDataType:e.methodAttribute.value.id}}):e._e(),"methodLink"==e.activeType?a("MethodLink",{ref:"methodLink",attrs:{parentHeaderHeight:e.headerHeight,methodId:e.activeMethod.id,methodName:e.activeMethod.name,searchInput:e.searchInput}}):e._e()],1)],1)},te=[],ae=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("awsui-layout",{style:{height:e.mainHeight},attrs:{id:"methodAttribute"}},[a("awsui-aside",{staticClass:"attr-aside",attrs:{width:"280px"}},[a("div",{staticStyle:{height:"60px","line-height":"60px","text-align":"center"}},[a("awsui-button",{class:{"button-general-color":!e.createBtnDisabled},staticStyle:{width:"130px"},attrs:{disabled:e.createBtnDisabled,type:"primary"},on:{click:e.createAttrDefine}},[e._v("新建属性")])],1),a("div",[a("div",{staticStyle:{"border-bottom":"1px solid #F0F0F0"}})]),a("div",{style:{overflow:"auto",height:e.treeHeight}},[a("el-tree",{directives:[{name:"loading",rawName:"v-loading",value:e.tree.loading,expression:"tree.loading"}],ref:"tree",attrs:{"element-loading-text":e.tree.loadingText,data:e.tree.data,props:e.tree.props,"highlight-current":!0,"expand-on-click-node":!1,"node-key":"id","default-expanded-keys":e.tree.defaultExpandedKeys},on:{"node-click":e.handleNodeClick},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.node,i=t.data;return a("span",{},[a("i",{staticClass:"awsui-iconfont tree-content-icon tree-content-icon-padding",style:{color:i.iconColor},domProps:{innerHTML:e._s(o.data.iconCode)}}),a("span",[e._v(e._s(o.label))]),"all"!=e.methodDataType&&"attr"==i.type?a("span",[a("i",{staticClass:"awsui-iconfont",style:{"margin-left":"3px","font-size":"13px",color:i.isUse?"#00CC00":"#DDDDDD"}},[e._v("")])]):e._e()])}}])},[e._v("' ")])],1)]),a("awsui-main",{staticStyle:{height:"100%",position:"relative"}},["all"==e.methodDataType?a("div",{key:e.key1},[a("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{width:"100%"},attrs:{height:parseInt(e.mainHeight)-20+"px",data:e.tableData,"element-loading-text":e.loadingText,"row-style":{height:"50px"},"cell-style":{padding:"0px"}},on:{"cell-click":e.updateAttrDefine}},[a("el-table-column",{attrs:{prop:"no",label:"序号",width:"80",align:"center"}}),a("el-table-column",{attrs:{prop:"title",label:"属性名称",width:"180"}}),a("el-table-column",{attrs:{prop:"key",label:"属性代码",width:"180"}}),a("el-table-column",{attrs:{prop:"typeName",label:"属性类型",width:"180"}}),a("el-table-column",{attrs:{prop:"refName",label:"关联内容",width:"180"}}),a("el-table-column",{attrs:{prop:"groupPathName",label:"所属目录",width:"180"}}),a("el-table-column",{attrs:{prop:"value",label:"默认值",width:"150"}}),a("el-table-column",{attrs:{prop:"scopeName",label:"作用范围","min-width":"200"}}),a("el-table-column",{attrs:{prop:"readonly",label:"是否只读",width:"100",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("awsui-switch",{attrs:{"active-color":"#4E7FF9","inactive-color":"#E2E2E2",disabled:"relation"==t.row.type||"awsorg"==t.row.type},on:{change:function(a){return e.handleChangeReadonlyAndValid(t.row.id,t.row.title,t.row.readonly,t.row.isRequired,t.row.isValid)}},model:{value:t.row.readonly,callback:function(a){e.$set(t.row,"readonly",a)},expression:"scope.row.readonly"}})]}}],null,!1,3499774431)}),a("el-table-column",{attrs:{prop:"readonly",label:"是否必填",width:"100",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("awsui-switch",{attrs:{"active-color":"#4E7FF9","inactive-color":"#E2E2E2"},on:{change:function(a){return e.handleChangeReadonlyAndValid(t.row.id,t.row.title,t.row.readonly,t.row.isRequired,t.row.isValid)}},model:{value:t.row.isRequired,callback:function(a){e.$set(t.row,"isRequired",a)},expression:"scope.row.isRequired"}})]}}],null,!1,2606498229)}),a("el-table-column",{attrs:{prop:"isValid",label:"是否有效",width:"100",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("awsui-switch",{attrs:{"active-color":"#4E7FF9","inactive-color":"#E2E2E2"},on:{change:function(a){return e.handleChangeReadonlyAndValid(t.row.id,t.row.title,t.row.readonly,t.row.isRequired,t.row.isValid)}},model:{value:t.row.isValid,callback:function(a){e.$set(t.row,"isValid",a)},expression:"scope.row.isValid"}})]}}],null,!1,4096128202)}),a("el-table-column",{attrs:{prop:"operation",label:"操作",width:"50"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("div",{staticClass:"operate-icon-display"},[a("i",{staticClass:"el-icon-delete",staticStyle:{cursor:"pointer"},on:{click:function(a){return a.stopPropagation(),e.removeAttr(t.row.id,t.row.title)}}})])]}}],null,!1,3098370099)})],1)],1):e._e(),"file"==e.methodDataType?a("div",{key:e.key2,staticClass:"attr"},[a("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{width:"100%"},attrs:{"row-key":"id",height:parseInt(e.mainHeight)-20+"px","element-loading-text":e.loadingText,data:e.tableData,"row-style":{height:"50px"},"cell-style":{padding:"0px"}},on:{"cell-mouse-enter":e.handleAttrMouseEnter,"cell-mouse-leave":e.handleAttrMouseLeave}},[a("el-table-column",{attrs:{prop:"move",label:"",align:"center",width:"20"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("div",{staticClass:"operate-icon-display"},[a("p",{staticClass:"text-second-color"},[a("i",{staticClass:"awsui-iconfont",staticStyle:{display:"inline-block",cursor:"pointer"}},[e._v("")])])])]}}],null,!1,3152666534)}),a("el-table-column",{attrs:{prop:"no",label:"排序",width:"80",align:"center"}}),a("el-table-column",{attrs:{prop:"key",label:"属性代码",width:"180"}}),a("el-table-column",{attrs:{prop:"title",label:"属性名称(默认)",width:"180"}}),a("el-table-column",{attrs:{prop:"newTitle",label:"属性名称",width:"180"},scopedSlots:e._u([{key:"default",fn:function(t){return[t.row.isUpdate?a("awsui-input",{staticClass:"input-update-attr-name",attrs:{placeholder:"请输入新的属性名称"},on:{input:function(a){return e.updateAttrDbInfo(t.row.id,t.row.newTitle,t.row.sort)}},model:{value:t.row.newTitle,callback:function(a){e.$set(t.row,"newTitle",a)},expression:"scope.row.newTitle"}}):a("span",[e._v(e._s(t.row.newTitle))])]}}],null,!1,451367636)}),a("el-table-column",{attrs:{prop:"typeName",label:"属性类型",width:"180"}}),a("el-table-column",{attrs:{prop:"refName",label:"关联内容",width:"180"}}),a("el-table-column",{attrs:{prop:"value",label:"默认值",width:"180"}}),a("el-table-column",{attrs:{prop:"readonly",label:"只读",width:"100",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(" "+e._s(t.row.readonly?"是":"否")+" ")]}}],null,!1,2620266871)}),a("el-table-column",{attrs:{prop:"groupPathName",label:"所属目录",width:"180"}}),a("el-table-column",{attrs:{prop:"scopeName",label:"作用范围","min-width":"200"}}),"process.bpmn2"==e.methodId?a("el-table-column",{attrs:{prop:"bpmFileShow",label:"审批显示",width:"100",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("awsui-switch",{attrs:{"active-color":"#4E7FF9","inactive-color":"#E2E2E2"},on:{change:function(a){return e.handleChangeBpmShow(t.row.id,t.row.title,t.row.bpmFileShow,"bpmFileShow")}},model:{value:t.row.bpmFileShow,callback:function(a){e.$set(t.row,"bpmFileShow",a)},expression:"scope.row.bpmFileShow"}})]}}],null,!1,3748162670)}):e._e()],1)],1):e._e(),"shape"==e.methodDataType?a("div",{key:e.key3,staticClass:"attr"},[a("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{width:"100%"},attrs:{"row-key":"id",height:parseInt(e.mainHeight)-20+"px","element-loading-text":e.loadingText,data:e.tableData,"row-style":{height:"50px"},"cell-style":{padding:"0px"}},on:{"cell-mouse-enter":e.handleAttrMouseEnter,"cell-mouse-leave":e.handleAttrMouseLeave}},[a("el-table-column",{attrs:{prop:"move",label:"",align:"center",width:"20"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("div",{staticClass:"operate-icon-display"},[a("p",{staticClass:"text-second-color"},[a("i",{staticClass:"awsui-iconfont",staticStyle:{display:"inline-block",cursor:"pointer"}},[e._v("")])])])]}}],null,!1,3152666534)}),a("el-table-column",{attrs:{prop:"no",label:"排序",width:"80",align:"center"}}),a("el-table-column",{attrs:{prop:"key",label:"属性代码",width:"180"}}),a("el-table-column",{attrs:{prop:"title",label:"属性名称(默认)",width:"180"}}),a("el-table-column",{attrs:{prop:"newTitle",label:"属性名称",width:"180"},scopedSlots:e._u([{key:"default",fn:function(t){return[t.row.isUpdate?a("awsui-input",{staticClass:"input-update-attr-name",attrs:{placeholder:"请输入新的属性名称"},on:{input:function(a){return e.updateAttrDbInfo(t.row.id,t.row.newTitle,t.row.sort)}},model:{value:t.row.newTitle,callback:function(a){e.$set(t.row,"newTitle",a)},expression:"scope.row.newTitle"}}):a("span",[e._v(e._s(t.row.newTitle))])]}}],null,!1,451367636)}),a("el-table-column",{attrs:{prop:"typeName",label:"属性类型",width:"180"}}),a("el-table-column",{attrs:{prop:"refName",label:"关联内容",width:"180"}}),a("el-table-column",{attrs:{prop:"value",label:"默认值",width:"150"}}),a("el-table-column",{attrs:{prop:"readonly",label:"只读",width:"100",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(" "+e._s(t.row.readonly?"是":"否")+" ")]}}],null,!1,2620266871)}),a("el-table-column",{attrs:{prop:"groupPathName",label:"所属目录",width:"180"}}),a("el-table-column",{attrs:{prop:"scopeName",label:"作用范围","min-width":"200"}}),"process.bpmn2"==e.methodId?a("el-table-column",{attrs:{prop:"bpmShapeShow",label:"审批显示",width:"100",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("awsui-switch",{attrs:{"active-color":"#4E7FF9","inactive-color":"#E2E2E2"},on:{change:function(a){return e.handleChangeBpmShow(t.row.id,t.row.title,t.row.bpmShapeShow,"bpmShapeShow")}},model:{value:t.row.bpmShapeShow,callback:function(a){e.$set(t.row,"bpmShapeShow",a)},expression:"scope.row.bpmShapeShow"}})]}}],null,!1,1492585895)}):e._e()],1)],1):e._e()]),a("awsui-sidebar",{attrs:{title:e.drawer.title,"append-to-body":!1,"modal-append-to-body":!1,"destroy-on-close":!0,modal:!1,visible:e.drawer.visible,"before-close":e.handleDrawerClose},on:{"update:visible":function(t){return e.$set(e.drawer,"visible",t)}}},[a("div",{directives:[{name:"loading",rawName:"v-loading",value:e.drawer.loading,expression:"drawer.loading"}]},[a("div",{staticStyle:{"overflow-y":"auto",margin:"20px 0 20px 20px","padding-left":"10px"},attrs:{id:"drawerBody"}},[a("awsui-form",{ref:"attrForm",staticStyle:{"margin-right":"20px"},attrs:{model:e.attrForm,"label-position":"top",rules:e.rules}},[a("awsui-form-item",{attrs:{label:"属性代码",prop:"key"}},[a("awsui-input",{attrs:{disabled:!e.attrForm.isCreate,placeholder:"请输入属性代码,由数字、字母、下划线组成"},model:{value:e.attrForm.key,callback:function(t){e.$set(e.attrForm,"key",t)},expression:"attrForm.key"}})],1),a("awsui-form-item",{attrs:{label:"属性名称",prop:"title"}},[a("awsui-input",{attrs:{placeholder:"请输入属性名称"},model:{value:e.attrForm.title,callback:function(t){e.$set(e.attrForm,"title",t)},expression:"attrForm.title"}})],1),a("awsui-form-item",{attrs:{label:"所属目录"}},[a("awsui-select",{attrs:{options:e.attrForm.groupOpts},model:{value:e.attrForm.groupPath,callback:function(t){e.$set(e.attrForm,"groupPath",t)},expression:"attrForm.groupPath"}})],1),a("awsui-form-item",{attrs:{label:"类型"}},[a("awsui-select",{attrs:{disabled:!e.attrForm.isCreate,options:e.attrForm.typeOpts},on:{change:e.changeAttrType},model:{value:e.attrForm.type,callback:function(t){e.$set(e.attrForm,"type",t)},expression:"attrForm.type"}})],1),a("awsui-form-item",{attrs:{label:"属性描述",prop:"desc"}},[a("awsui-input",{attrs:{placeholder:"请输入属性描述"},model:{value:e.attrForm.desc,callback:function(t){e.$set(e.attrForm,"desc",t)},expression:"attrForm.desc"}})],1),"relation"==e.attrForm.type?[a("awsui-form-item",{attrs:{label:"关联的建模方法"}},[a("awsui-select",{attrs:{options:e.attrForm.relationMethodScopeOpts,placeholder:"请选择建模分类或建模方法"},model:{value:e.attrForm.relationRef.method,callback:function(t){e.$set(e.attrForm.relationRef,"method",t)},expression:"attrForm.relationRef.method"}})],1),a("awsui-form-item",{attrs:{label:"关联范围"}},[a("awsui-select",{attrs:{options:e.attrForm.relationTypeOpts,placeholder:"请选择关联范围"},model:{value:e.attrForm.relationRef.type,callback:function(t){e.$set(e.attrForm.relationRef,"type",t)},expression:"attrForm.relationRef.type"}})],1),a("awsui-form-item",{attrs:{label:"是否多选"}},[a("awsui-select",{attrs:{options:e.attrForm.multipleOpts,placeholder:"请选择关联范围"},model:{value:e.attrForm.relationRef.multiple,callback:function(t){e.$set(e.attrForm.relationRef,"multiple",t)},expression:"attrForm.relationRef.multiple"}})],1)]:e._e(),"awsorg"==e.attrForm.type?[a("awsui-form-item",{attrs:{label:"BPM组织架构范围选择"}},[a("awsui-select",{attrs:{multiple:"",options:e.attrForm.awsorgScopeOpts,multiple:"",placeholder:"请选择组织架构范围"},model:{value:e.attrForm.awsorgRef.scope,callback:function(t){e.$set(e.attrForm.awsorgRef,"scope",t)},expression:"attrForm.awsorgRef.scope"}})],1),a("awsui-form-item",{attrs:{label:"是否多选"}},[a("awsui-select",{attrs:{options:e.attrForm.multipleOpts,placeholder:"请选择关联范围"},model:{value:e.attrForm.awsorgRef.multiple,callback:function(t){e.$set(e.attrForm.awsorgRef,"multiple",t)},expression:"attrForm.awsorgRef.multiple"}})],1)]:e._e(),"select"==e.attrForm.type?[a("awsui-form-item",{attrs:{label:"选择范围"}},[a("awsui-input",{attrs:{placeholder:"请输入选择范围,例如选项1,选项2,选项3"},model:{value:e.attrForm.ref,callback:function(t){e.$set(e.attrForm,"ref",t)},expression:"attrForm.ref"}})],1)]:e._e(),"select_m"==e.attrForm.type?[a("awsui-form-item",{attrs:{label:"选择范围"}},[a("awsui-input",{attrs:{placeholder:"请输入选择范围,例如选项1,选项2,选项3"},model:{value:e.attrForm.ref,callback:function(t){e.$set(e.attrForm,"ref",t)},expression:"attrForm.ref"}})],1)]:e._e(),"string"==e.attrForm.type||"textarea"==e.attrForm.type?[a("awsui-form-item",{attrs:{label:"默认值",prop:"value"}},[a("awsui-input",{attrs:{placeholder:"请输入属性默认值"},model:{value:e.attrForm.value,callback:function(t){e.$set(e.attrForm,"value",t)},expression:"attrForm.value"}})],1)]:e._e(),a("awsui-form-item",{attrs:{label:""}},[a("div",{staticClass:"div-button-small",style:{"border-right":"0px",cursor:e.readOnlyCursor?"not-allowed":"","background-color":e.attrForm.readonly?"#eef5fe":"",color:e.attrForm.readonly?"#4E7FF9":""},on:{click:function(t){!e.readOnlyCursor&&e.changeReadOnly()}}},[a("span",[e._v("只读")])]),a("div",{staticClass:"div-button-small",style:{"border-right":"0px","background-color":e.attrForm.isRequired?"#eef5fe":"",color:e.attrForm.isRequired?"#4E7FF9":""},on:{click:function(t){e.attrForm.isRequired=!e.attrForm.isRequired}}},[a("span",[e._v("必填")])]),a("div",{staticClass:"div-button-small",style:{"background-color":e.attrForm.isValid?"#eef5fe":"",color:e.attrForm.isValid?"#4E7FF9":""},on:{click:function(t){e.attrForm.isValid=!e.attrForm.isValid}}},[a("span",[e._v("有效")])])]),a("awsui-form-item",{attrs:{label:"作用范围"}},[a("div",{staticClass:"div-button",style:{"border-right":"0px","background-color":e.attrForm.fileScope?"#eef5fe":"",color:e.attrForm.fileScope?"#4E7FF9":""},on:{click:function(t){e.attrForm.fileScope=!e.attrForm.fileScope}}},[a("span",[e._v("文件属性")])]),a("div",{staticClass:"div-button",style:{"background-color":e.attrForm.shapeScope?"#eef5fe":"",color:e.attrForm.shapeScope?"#4E7FF9":""},on:{click:function(t){e.attrForm.shapeScope=!e.attrForm.shapeScope}}},[a("span",[e._v("形状属性")])])]),e.attrForm.shapeScope?a("awsui-form-item",{attrs:{label:"形状选择"}},[a("awsui-select",{attrs:{placeholder:"空值则等同于全选",clearable:"",multiple:"",options:e.attrForm.shapeOpts},model:{value:e.attrForm.shapeScopeValue,callback:function(t){e.$set(e.attrForm,"shapeScopeValue",t)},expression:"attrForm.shapeScopeValue"}})],1):e._e()],2)],1),a("div",{staticClass:"drawer-footer",style:{"background-color":"#F2F2F2",height:e.drawer.footerHeight}},[a("div",{staticStyle:{float:"right",position:"relative",top:"9px"},attrs:{id:"drawerFooter"}},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"80px"},attrs:{size:"large",type:"primary",disabled:e.drawer.buttonDisabled},on:{click:e.saveDrawerData}},[e._v("保存")]),a("awsui-button",{staticStyle:{width:"80px"},attrs:{size:"large"},on:{click:e.closeDrawer}},[e._v("取消")])],1)])])])],1)},oe=[],ie=a("2480"),se={name:"MethodAttribute",components:{Sortable:ie["a"]},props:{parentHeaderHeight:{type:String,default:"0px"},methodId:{type:String,default:""},methodName:{type:String,default:""},searchInput:{type:String,default:""},methodDataType:{type:String,default:"all"}},data:function(){return{readOnlyCursor:!1,key1:Math.random(),key2:Math.random(),key3:Math.random(),createBtnDisabled:!1,mainHeight:parseInt(this.$store.getters.getTopMainHeightFn)-parseInt(this.parentHeaderHeight)+"px",treeHeight:parseInt(this.$store.getters.getTopMainHeightFn)-parseInt(this.parentHeaderHeight)-61+"px",loading:!1,loadingText:"加载中",tree:{data:[],defaultExpandedKeys:[],props:{children:"children",label:"label"},loading:!1,loadingText:"加载中"},tableData:[],tableDataTemp:[],nodeData:null,drawer:{title:"新增属性",visible:!1,loading:!1,footerHeight:"50px",buttonDisabled:!1},attrForm:{isCreate:!0,id:"",key:"",title:"",newTitle:"",type:"",desc:"",ref:"",relationRef:{method:"",type:"",multiple:"false"},awsorgRef:{scope:[],multiple:"false"},value:"",readonly:!1,isRequired:!1,isValid:!0,groupPathName:"",groupPath:"",fileScope:!1,shapeScope:!1,shapeScopeValue:[],scopeName:"",sort:"",bpmFileShow:!1,bpmShapeShow:!1,typeOpts:[],relationMethodScopeOpts:[],relationTypeOpts:[],awsorgScopeOpts:[],multipleOpts:[{label:"多选",value:"true"},{label:"单选",value:"false"}],groupOpts:[],shapeOpts:[]},rules:{key:[{required:!0,message:"请输入属性代码",trigger:"blur"},{min:1,max:255,message:"长度在 255 个字符以内",trigger:"blur"}],title:[{required:!0,message:"请输入属性名称",trigger:"blur"},{min:1,max:255,message:"长度在 255 个字符以内",trigger:"blur"}],value:[{required:!1,message:"请输入属性名称",trigger:"blur"},{min:1,max:255,message:"长度在 255 个字符以内",trigger:"blur"}],desc:[{required:!0,message:"请输入属性描述",trigger:"blur"},{min:1,max:20,message:"长度在 20 个字符以内",trigger:"blur"}]}}},mounted:function(){document.body.ondrop=function(e){e.preventDefault(),e.stopPropagation()},this.initTreeData()},methods:{initTreeData:function(){var e=this;e.tree.loadingText="加载中",e.tree.loading=!0;var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_attr_tree_data_query",methodId:e.methodId,wsId:e.$store.getters.getWsIdFn}};u["a"].post(t).then((function(t){if(e.tree.loading=!1,"ok"==t.result){t.data.length>0&&e.tree.defaultExpandedKeys.push(t.data[0].id);for(var a=0;a<t.data.length;a++)if(t.data.children)for(var o=0;o<t.data.children.length;o++)t.data[a].children[o].isUse=!1;e.tree.data=t.data,e.initTableData()}else alert("请求响应错误")})).catch((function(t){console.log(t),e.loading=!1}))},initTableData:function(){var e=this;e.tableData=[],this.tableDataTemp=[],e.loadingText="加载中",e.loading=!0;var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_attr_table_data_query",methodId:e.methodId,wsId:e.$store.getters.getWsIdFn,type:e.methodDataType}};u["a"].post(t).then((function(t){if(e.loading=!1,"ok"==t.result){for(var a=[],o=0;o<t.data.length;o++)t.data[o].randomNum=Math.random(),"all"!=e.methodDataType&&(t.data[o].isUpdate=!1,t.data[o].isUse&&a.push(t.data[o].id));for(var i=0;i<e.tree.data.length;i++)if(e.tree.data[i].children)for(var s=0;s<e.tree.data[i].children.length;s++)a.indexOf(e.tree.data[i].children[s].id)>-1?e.tree.data[i].children[s].isUse=!0:e.tree.data[i].children[s].isUse=!1;e.tableDataTemp=t.data,e.search(),"all"!=e.methodDataType&&e.$nextTick((function(){e.rowDrop()}))}else alert("请求响应错误")})).catch((function(t){console.log(t),e.loading=!1}))},search:function(){if(null==this.nodeData){for(var e=JSON.parse(JSON.stringify(this.tableDataTemp)),t=0;t<e.length;t++)e[t].no=t+1;this.tableData=e}else{var a=[],o=1;if("group"==this.nodeData.type){for(var i=0;i<this.tableDataTemp.length;i++)if(this.tableDataTemp[i].groupPath==this.nodeData.id){var s=JSON.parse(JSON.stringify(this.tableDataTemp[i]));s.no=o++,a.push(s)}}else for(var n=0;n<this.tableDataTemp.length;n++)if(this.tableDataTemp[n].key==this.nodeData.id){var r=JSON.parse(JSON.stringify(this.tableDataTemp[n]));r.no=o++,a.push(r);break}this.tableData=a}},rowDrop:function(){var e=document.querySelector(".el-table__body-wrapper tbody"),t=this;ie["a"].create(e,{onEnd:function(e){var a=e.newIndex,o=e.oldIndex;if(a!=o){var i=t.tableData[o].id,s="",n="";a-o==1?(s=t.tableData[a].id,n="bottom"):o-a==1?(s=t.tableData[a].id,n="top"):0==a?(s=t.tableData[0].id,n="top"):a==t.tableData.length-1?(s=t.tableData[t.tableData.length-1].id,n="bottom"):(s=t.tableData[a].id,n="top");for(var r=null,l=0;l<t.tableDataTemp.length;l++)if(t.tableDataTemp[l].id==i){r=t.tableDataTemp.splice(l,1)[0];break}for(var c=0;c<t.tableDataTemp.length;c++)if(t.tableDataTemp[c].id==s){if("top"==n){t.tableDataTemp.splice(c,0,r);break}if("bottom"==n){t.tableDataTemp.splice(c+1,0,r);break}}for(var d=[],p=0;p<t.tableDataTemp.length;p++)d.push({id:t.tableDataTemp[p].id,newTitle:t.tableDataTemp[p].newTitle});var h={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_attr_file_and_shape_sort_update",methodId:t.methodId,wsId:t.$store.getters.getWsIdFn,type:t.methodDataType,attrs:JSON.stringify(d)}};u["a"].post(h).then((function(e){"ok"==e.result?(t.$message({message:"移动成功",type:"success"}),t.search()):t.$message.error(e.msg)})).catch((function(e){console.log(e)}))}}})},clearDrawerForm:function(){this.attrForm={isCreate:!0,id:"",key:"",title:"",newTitle:"",type:"",desc:"",ref:"",relationRef:{method:"",type:"",multiple:"false"},awsorgRef:{scope:[],multiple:"false"},value:"",readonly:!1,isRequired:!1,isValid:!0,groupPathName:"",groupPath:"",fileScope:!1,shapeScope:!1,shapeScopeValue:[],scopeName:"",sort:"",bpmFileShow:!1,bpmShapeShow:!1,typeOpts:[],relationMethodScopeOpts:[],relationTypeOpts:[],awsorgScopeOpts:[],multipleOpts:[{label:"多选",value:"true"},{label:"单选",value:"false"}],groupOpts:[],shapeOpts:[]}},closeDrawer:function(){this.drawer.visible=!1},handleDrawerClose:function(e){e()},initDrawer:function(e){var t=this;t.drawer.buttonDisabled=!1,t.drawer.title=e,t.drawer.visible=!0,t.$nextTick((function(){t.initDrawerBodyHeight()}))},createAttrDefine:function(){this.clearDrawerForm();var e=this.attrForm;e.isCreate=!0,this.initDrawer("新增属性"),this.getAttrOptsParam("")},updateAttrDefine:function(e,t,a,o){if(console.log(this.attrForm),"readonly"==t.property||"isValid"==t.property)return!1;this.clearDrawerForm();var i=this.attrForm;i.isCreate=!1,i.id=e.id,i.key=e.key,i.title=e.title,i.newTitle=e.newTitle,i.type=e.type,i.ref=e.ref,"relation"==i.type&&(i.relationRef.method=e.relationRef.method,i.relationRef.type=e.relationRef.type,i.relationRef.multiple=e.relationRef.multiple?"true":"false"),"awsorg"==i.type&&(i.awsorgRef.scope=e.awsorgRef.scope,i.awsorgRef.multiple=e.awsorgRef.multiple?"true":"false");var s=["relation","awsorg"],n=i.type;s.includes(n)?(this.readOnlyCursor=!0,i.readonly=!1):(this.readOnlyCursor=!1,i.readonly=e.readonly),i.value=e.value,i.desc=e.desc,i.isValid=e.isValid,i.isRequired=e.isRequired,i.groupPath=e.groupPath,i.groupPathName=e.groupPathName,i.bpmFileShow=e.bpmFileShow,i.bpmShapeShow=e.bpmFileShow,this.initDrawer("修改属性"),this.getAttrOptsParam(e.scope),console.log(this.attrForm)},getAttrOptsParam:function(e){var t=this.attrForm,a=this;a.drawer.loading=!0;var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_attr_shape_option_query",methodId:a.methodId}};u["a"].post(o).then((function(o){if(a.drawer.loading=!1,"ok"==o.result){if(t.typeOpts=o.data.typeOpts,t.relationMethodScopeOpts=o.data.relationMethodScopeOpts,t.relationTypeOpts=o.data.relationTypeOpts,t.awsorgScopeOpts=o.data.awsorgScopeOpts,t.groupOpts=o.data.groupOpts,t.shapeOpts=o.data.shapeOpts,t.shapeScopeValue=[],e.indexOf("%")>-1&&(t.fileScope=!0),e.indexOf("*")>-1||e.indexOf("%")>-1&&e.indexOf(",")>-1||-1==e.indexOf("%")&&e.length>0){t.shapeScope=!0;for(var i=e.split(","),s=0;s<t.shapeOpts.length;s++)i.indexOf(t.shapeOpts[s].value)>-1&&t.shapeScopeValue.push(t.shapeOpts[s].value)}if(t.isCreate){t.type=t.typeOpts[0].value;var n=a.$refs.tree.getCurrentNode();null==n?t.groupPath=t.groupOpts[0].value:"group"==n.type?t.groupPath=n.id:t.groupPath=a.$refs.tree.getNode(n.pid).data.id}}else alert("请求响应错误")})).catch((function(e){console.log(e),a.drawer.loading=!1}))},saveDrawerData:function(){var e=this.attrForm,t=this,a=[];if(e.fileScope&&a.push("%"),e.shapeScope&&(0==e.shapeScopeValue.length||e.shapeScopeValue.length==e.shapeOpts.length?a.push("*"):a=a.concat(e.shapeScopeValue)),!/^\w+$/.test(e.key))return t.$message({message:"[属性代码]请输入数字、字母、下划线的组合",type:"warning"}),!1;if(0==a.length)return t.$message({message:"[作用范围]不允许为空",type:"warning"}),!1;if("string"!=e.type&&"textarea"!=e.type&&"number"!=e.type||(e.ref=""),"boolean"==e.type&&(e.ref="是,否"),("select"==e.type||"select_m"==e.type)&&""==e.ref)return t.$message({message:"[选择范围]不允许为空",type:"warning"}),!1;if("awsorg"==e.type){if(""==e.awsorgRef.scope)return t.$message({message:"[BPM组织架构范围选择]不允许为空",type:"warning"}),!1;e.ref=e.awsorgRef,e.ref.multiple="true"==e.ref.multiple,e.ref=JSON.stringify(e.ref)}if("relation"==e.type){if(""==e.relationRef.method)return t.$message({message:"[关联的建模方法]不允许为空",type:"warning"}),!1;if(""==e.relationRef.type)return t.$message({message:"[关联范围]不允许为空",type:"warning"}),!1;e.ref=e.relationRef,e.ref.multiple="true"==e.ref.multiple,e.ref=JSON.stringify(e.ref)}var o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_attr_add_or_update_save",methodId:t.methodId,isCreate:e.isCreate,key:e.key,title:e.title,type:e.type,desc:e.desc,ref:e.ref,value:e.value,readonly:e.readonly,isRequired:e.isRequired,groupPath:e.groupPath,isValid:e.isValid,bpmFileShow:e.bpmFileShow,bpmShapeShow:e.bpmShapeShow}};o.data.scope=a,this.$refs["attrForm"].validate((function(a){if(!a)return!1;t.drawer.buttonDisabled=!0,u["a"].post(o).then((function(a){if("ok"==a.result){var o="修改";e.isCreate&&(o="新增"),t.$message({message:o+"成功",type:"success"}),t.closeDrawer(),t.clearDrawerForm(),t.initTreeData()}else t.$message({message:a.msg,type:"warning"}),t.drawer.buttonDisabled=!1})).catch((function(e){console.log(e)}))}))},handleNodeClick:function(e){this.nodeData=e,this.search()},handleChangeReadonlyAndValid:function(e,t,a,o,i){var s=this,n={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_attr_readonly_and_valid_update",methodId:s.methodId,key:e,readonly:a,isRequired:o,isValid:i}};u["a"].post(n).then((function(t){if("ok"==t.result){s.$message({message:"修改成功",type:"success"});for(var n=0;n<s.tableDataTemp.length;n++)if(e==s.tableDataTemp[n].id){s.tableDataTemp[n].readonly=a,s.tableDataTemp[n].isRequired=o,s.tableDataTemp[n].isValid=i,s.tableDataTemp[n].randomNum=Math.random(),s.search();break}}else s.$message({message:t.msg,type:"warning"})})).catch((function(e){console.log(e),s.drawer.loading=!1}))},handleChangeBpmShow:function(e,t,a,o){var i=this,s={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_attr_bpm_show_update",methodId:i.methodId,key:e,bpmShow:a,type:o}};u["a"].post(s).then((function(t){if("ok"==t.result){i.$message({message:"修改成功",type:"success"});for(var s=0;s<i.tableDataTemp.length;s++)if(e==i.tableDataTemp[s].id){"bpmFileShow"==o?i.tableDataTemp[s].bpmFileShow=a:"bpmShapeShow"==o&&(i.tableDataTemp[s].bpmShapeShow=a),i.tableDataTemp[s].randomNum=Math.random(),i.search();break}}else i.$message({message:t.msg,type:"warning"})})).catch((function(e){console.log(e),i.drawer.loading=!1}))},handleAttrMouseEnter:function(e,t,a,o){for(var i=0;i<this.tableData.length;i++)e.id==this.tableData[i].id?this.tableData[i].isUpdate=!0:this.tableData[i].isUpdate=!1},handleAttrMouseLeave:function(e,t,a,o){for(var i=0;i<this.tableData.length;i++)e.id==this.tableData[i].id&&(this.tableData[i].isUpdate=!1)},updateAttrDbInfo:function(e,t,a){var o=this,i={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_attr_file_and_shape_update",methodId:o.methodId,wsId:o.$store.getters.getWsIdFn,type:o.methodDataType,attrId:e,newTitle:t,orderIndex:a}};u["a"].post(i).then((function(a){if("ok"==a.result){o.$message({message:"修改成功",type:"success"});for(var i=0;i<o.tableDataTemp.length;i++)e==o.tableDataTemp[i].id&&(o.tableDataTemp[i].newTitle=t)}else alert("请求响应错误")})).catch((function(e){console.log(e),o.drawer.loading=!1}))},removeAttr:function(e,t){var a=this,o=["确定要删除吗?","注意:将一并删除该属性在所有资产库的文件属性和形状属性中的配置信息(不包含业务内容数据)"],i=[],s=this.$createElement;for(var n in o)i.push(s("p",null,o[n]));this.$confirm("提示",{message:s("div",null,i),confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",type:"warning"}).then((function(){var t=a,o={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_attr_remove",methodId:t.methodId,attrId:e}};u["a"].post(o).then((function(e){"ok"==e.result?(t.$message({message:"删除成功",type:"success"}),t.initTreeData()):t.$message(e.msg)})).catch((function(e){console.log(e)}))})).catch((function(){}))},changeReadOnly:function(){this.attrForm.readonly?this.attrForm.readonly=!1:this.attrForm.readonly=!0},changeAttrType:function(e){var t=["relation","awsorg"];t.includes(e)?(this.readOnlyCursor=!0,this.attrForm.readonly=!1):this.readOnlyCursor=!1,this.attrForm.ref="",this.attrForm.relationRef.value="",this.attrForm.relationRef.multiple="false",this.attrForm.relationRef.type="",this.attrForm.awsorgRef.scope=[],this.attrForm.awsorgRef.multiple="false",this.attrForm.value=""},initDrawerBodyHeight:function(){null!=document.getElementById("drawerBody")&&(document.getElementById("drawerBody").style.height=parseInt(this.mainHeight)-40+parseInt(this.parentHeaderHeight)-58-parseInt(this.drawer.footerHeight)+"px")}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(e,t){this.mainHeight=parseInt(e)-parseInt(this.parentHeaderHeight)+"px",this.treeHeight=parseInt(e)-parseInt(this.parentHeaderHeight)-61+"px",this.initDrawerBodyHeight()},methodDataType:function(e,t){this.nodeData=null,this.$refs.tree&&this.$refs.tree.setCurrentKey(null),this.createBtnDisabled="all"!=e,this.initTableData()}}},ne=se,re=(a("2c36"),Object(f["a"])(ne,ae,oe,!1,null,"5f20b270",null)),le=re.exports,ce=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-container",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],attrs:{id:"methodObject","element-loading-text":e.loadingText}},[a("el-main",{staticStyle:{padding:"0px 20px"}},[a("el-table",{ref:"table",attrs:{"highlight-current-row":"",height:e.tableHeight,data:e.tableData,size:"small"}},[a("el-table-column",{attrs:{prop:"no",label:"序号",width:"100",align:"center"}}),a("el-table-column",{attrs:{prop:"code",label:"代码",width:"130"}}),a("el-table-column",{attrs:{prop:"fromShapeId",label:"主动名称",width:"250"}}),a("el-table-column",{attrs:{prop:"toShapeId",label:"被动名称","min-width":"250"}}),a("el-table-column",{attrs:{prop:"outComingName",label:"连出范围",width:"200"}}),a("el-table-column",{attrs:{prop:"inComingName",label:"连入范围",width:"200"}})],1)],1)],1)},de=[],pe={name:"MethodLink",props:{parentHeaderHeight:{type:String,default:"0px"},methodId:{type:String,default:""},methodName:{type:String,default:""},searchInput:{type:String,default:""}},data:function(){return{loading:!1,loadingText:"加载中",tableHeight:parseInt(this.$store.getters.getTopMainHeightFn)-parseInt(this.parentHeaderHeight)+"px",tableData:[],tableTempData:[]}},mounted:function(){this.initData()},methods:{initData:function(){var e=this;e.loadingText="加载中",e.loading=!0;var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_link_data_query",methodId:e.methodId}};u["a"].post(t).then((function(t){if(e.loading=!1,"ok"==t.result){for(var a=0;a<t.data.length;a++)t.data[a].no=a+1,e.tableTempData.push(t.data[a]);e.search(e.searchInput)}else alert("请求响应错误")})).catch((function(t){console.log(t),e.loading=!1}))},handleDataNo:function(e){for(var t=0;t<e.length;t++)e[t].no=t+1;return e},search:function(e){if(e&&""!=e.trim()){for(var t=[],a=0;a<this.tableTempData.length;a++)this.tableTempData[a].fromShapeId.indexOf(e)>-1&&t.push(this.tableTempData[a]);this.tableData=this.handleDataNo(t)}else this.tableData=this.handleDataNo(this.tableTempData)}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(e,t){this.tableHeight=parseInt(e)-parseInt(this.parentHeaderHeight)+"px"}}},ue=pe,he=Object(f["a"])(ue,ce,de,!1,null,"499e5b7f",null),me=he.exports,fe=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-container",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],attrs:{id:"methodObject","element-loading-text":e.loadingText}},[a("el-header",{style:{padding:"0px 20px",height:e.headerHeight}},[a("div",{staticClass:"header-div"},[a("div",{staticClass:"icon-div-repository",style:{"background-color":e.icon.color}},[a("i",{staticClass:"awsui-iconfont icon-dynamic-repository",domProps:{innerHTML:e._s(e.icon.code)}})]),a("div",{staticClass:"div-repository-title"},[a("span",{staticClass:"text-general-color"},[e._v(" "+e._s(e.methodName)+" ")]),a("p",{staticClass:"text-second-color header-method-id"},[a("b",[e._v("("+e._s(e.methodId)+")")])])]),a("div",{staticClass:"header-method-attr-config-icon"},[a("el-tooltip",{attrs:{content:"文件属性配置",placement:"bottom","hide-after":2e3}},[a("i",{staticClass:"iconfont",staticStyle:{cursor:"pointer"},on:{click:e.handleFileAttrConfig}},[e._v("")])])],1)])]),a("el-main",{staticStyle:{padding:"0px 20px"}},[a("el-table",{ref:"table",attrs:{"highlight-current-row":"",height:e.tableHeight,data:e.tableData,size:"small"},on:{"row-click":e.clickTableRow}},[a("el-table-column",{attrs:{prop:"no",label:"序号",width:"80",align:"center"}}),a("el-table-column",{attrs:{prop:"icon",label:"图标",width:"130"},scopedSlots:e._u([{key:"default",fn:function(e){return[a("img",{attrs:{src:e.row.icon}})]}}])}),a("el-table-column",{attrs:{prop:"name",label:"名称",width:"250"}}),a("el-table-column",{attrs:{prop:"id",label:"ID"}}),a("el-table-column",{attrs:{prop:"modelName",label:"所属模型",width:"180"}}),a("el-table-column",{attrs:{prop:"modelId",label:"模型ID",width:"200"}}),a("el-table-column",{attrs:{prop:"type",label:"类型",width:"200"}}),a("el-table-column",{attrs:{prop:"operate",label:"操作",align:"center",width:"100"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("div",{staticClass:"operate-icon-display",staticStyle:{"text-align":"center",height:"30px","line-height":"30px"}},[a("p",{staticClass:"text-second-color"},[t.row.showShapeConfig?a("el-tooltip",{attrs:{content:"数据显示规则配置",placement:"bottom","hide-after":2e3}},[a("i",{staticClass:"iconfont",staticStyle:{display:"inline-block",cursor:"pointer","margin-right":"10px"},on:{click:function(a){return e.handleShapeAnchorConfig(t.row.id)}}},[e._v("")])]):e._e(),a("el-tooltip",{attrs:{content:"形状属性配置",placement:"bottom","hide-after":2e3}},[a("i",{staticClass:"iconfont",staticStyle:{display:"inline-block",cursor:"pointer",position:"relative","font-size":"23px",top:"3px"},on:{click:function(a){return e.handleShapeAttrConfig(t.row.id)}}},[e._v("")])])],1)])]}}])})],1)],1),a("awsui-sidebar",{attrs:{title:e.drawer.title,"append-to-body":!1,"modal-append-to-body":!1,"destroy-on-close":!0,modal:!1,visible:e.drawer.visible,"before-close":e.handleDrawerClose},on:{"update:visible":function(t){return e.$set(e.drawer,"visible",t)}}},[a("div",{directives:[{name:"loading",rawName:"v-loading",value:e.drawer.loading,expression:"drawer.loading"}]},[a("div",{staticStyle:{"overflow-y":"auto"},attrs:{id:"drawerBody"}},e._l(e.drawer.data,(function(t){return a("div",{staticClass:"attr-row",on:{click:function(e){t.isUse?t.isUse=!1:t.isUse=!0}}},[a("span",[e._v(e._s(t.name)),a("span",{staticClass:"text-second-color",staticStyle:{}},[e._v("("+e._s(t.id)+")")])]),t.isUse?a("i",{staticClass:"awsui-iconfont",staticStyle:{float:"right",color:"#4E7FF9"}},[e._v("")]):e._e()])})),0),a("div",{staticClass:"drawer-footer",style:{"background-color":"#F2F2F2",height:e.drawer.footerHeight}},[a("div",{staticStyle:{float:"right",position:"relative",top:"9px"},attrs:{id:"drawerFooter"}},[a("awsui-button",{staticClass:"button-general-color",staticStyle:{width:"80px"},attrs:{size:"large",type:"primary",disabled:e.drawer.buttonDisabled},on:{click:e.saveAttrConfig}},[e._v("保存")]),a("awsui-button",{staticStyle:{width:"80px"},attrs:{size:"large"},on:{click:e.closeDrawer}},[e._v("取消")])],1)])])]),a("MethodShapeAnchorDlg",{ref:"methodShapeAnchorDlg",attrs:{visible:e.shapeAnchorConfig.visible,type:e.shapeAnchorConfig.type,methodId:e.shapeAnchorConfig.methodId,shapeName:e.shapeAnchorConfig.shapeName,wsId:e.shapeAnchorConfig.wsId},on:{"update:visible":function(t){return e.$set(e.shapeAnchorConfig,"visible",t)},cancel:function(t){e.shapeAnchorConfig.visible=!1},getResult:e.handleSaveShapeAnchorConfig}})],1)},ge=[],ve=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",[a("el-dialog",{attrs:{id:"methodShapeAnchor",title:"形状数据显示规则",visible:e.dialogVisible,"append-to-body":"","close-on-press-escape":!1,"close-on-click-modal":!1,width:"800px","before-close":e.handleClose},on:{"update:visible":function(t){e.dialogVisible=t}}},[a("div",{staticStyle:{border:"1px solid #F2F2F2",padding:"0px 10px 10px 10px"}},[a("div",{staticStyle:{height:"38px","line-height":"38px","vertical-align":"middle","border-bottom":"1px solid #e9e9e9"}},[a("span",{staticClass:"text-linker-color",staticStyle:{cursor:"pointer",position:"relative",left:"15px"},on:{click:function(t){return e.updateShapeConfig()}}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{"font-size":"12px"}},[e._v("")]),e._v("添加")])]),a("div",{staticStyle:{height:"350px","overflow-y":"auto"}},[0==e.data.length?a("div",{staticClass:"text-second-color",staticStyle:{"text-align":"center",position:"relative",top:"150px"}},[a("i",{staticClass:"iconfont icon-wushuju",staticStyle:{"font-size":"60px"}}),a("p",[e._v("无数据")])]):e._e(),e._l(e.data,(function(t){return a("div",{staticClass:"row-div"},[a("el-row",{staticStyle:{height:"50px","line-height":"50px","vertical-align":"middle","border-bottom":"1px solid #e9e9e9"}},[a("el-col",{attrs:{span:8}},[a("div",[a("div",{staticStyle:{position:"absolute"}},[e._v("水平")]),"mostLeft"==t.attribute.horizontal?a("div",{staticClass:"loc loc-horizontal-icon",attrs:{"data-loc":"mostLeft"}},[a("span",{staticClass:"loc-point",staticStyle:{left:"-5px"}})]):e._e(),"left"==t.attribute.horizontal?a("div",{staticClass:"loc loc-horizontal-icon",attrs:{"data-loc":"left"}},[a("span",{staticClass:"loc-point",staticStyle:{left:"0px"}})]):e._e(),"center"==t.attribute.horizontal?a("div",{staticClass:"loc loc-horizontal-icon",attrs:{"data-loc":"center"}},[a("span",{staticClass:"loc-point",staticStyle:{left:"3px"}})]):e._e(),"right"==t.attribute.horizontal?a("div",{staticClass:"loc loc-horizontal-icon",attrs:{"data-loc":"right"}},[a("span",{staticClass:"loc-point",staticStyle:{left:"6px"}})]):e._e(),"mostRight"==t.attribute.horizontal?a("div",{staticClass:"loc loc-horizontal-icon",attrs:{"data-loc":"mostRight"}},[a("span",{staticClass:"loc-point",staticStyle:{left:"11px"}})]):e._e(),a("div",{staticStyle:{position:"absolute","margin-left":"70px"}},[e._v("垂直")]),"mostTop"==t.attribute.verity?a("div",{staticClass:"loc loc-verity-icon",attrs:{"data-loc":"mostTop"}},[a("span",{staticClass:"loc-point",staticStyle:{top:"-5px"}})]):e._e(),"top"==t.attribute.verity?a("div",{staticClass:"loc loc-verity-icon",attrs:{"data-loc":"top"}},[a("span",{staticClass:"loc-point",staticStyle:{top:"0px"}})]):e._e(),"center"==t.attribute.verity?a("div",{staticClass:"loc loc-verity-icon",attrs:{"data-loc":"center"}},[a("span",{staticClass:"loc-point",staticStyle:{top:"3px"}})]):e._e(),"bottom"==t.attribute.verity?a("div",{staticClass:"loc loc-verity-icon",attrs:{"data-loc":"bottom"}},[a("span",{staticClass:"loc-point",staticStyle:{top:"6px"}})]):e._e(),"mostBottom"==t.attribute.verity?a("div",{staticClass:"loc loc-verity-icon",attrs:{"data-loc":"mostBottom"}},[a("span",{staticClass:"loc-point",staticStyle:{top:"11px"}})]):e._e()])]),a("el-col",{attrs:{span:13}},[a("div",{staticStyle:{height:"49px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap","line-height":"49px","vertical-align":"middle"}},["text"==t.attribute.showType?[a("span",{domProps:{innerHTML:e._s(e.formatContent(t.attribute.cfgContent))}})]:e._e(),"attribute"==t.attribute.showType?[a("span",{domProps:{innerHTML:e._s("("+e.formatContent(t.attribute.attrName)+")")}})]:e._e(),"icon"==t.attribute.showType?[a("i",{staticClass:"awsui-iconfont",style:{"font-size":"30px",color:e.formatIconColor(t.attribute.iconContent)},domProps:{innerHTML:e._s(e.formatIconCode(t.attribute.iconContent))}})]:e._e()],2)]),a("el-col",{attrs:{span:3}},[a("div",{staticClass:"row-operate-icon",staticStyle:{display:"none",height:"49px","line-height":"49px","vertical-align":"middle","text-align":"right"}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{cursor:"pointer","margin-right":"15px"},on:{click:function(a){return e.updateShapeConfig(t)}}},[e._v("")]),a("i",{staticClass:"awsui-iconfont",staticStyle:{cursor:"pointer"},on:{click:function(a){return e.removeShapeConfig(t.id)}}},[e._v("")])])])],1)],1)}))],2)]),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{staticClass:"button-general-color",attrs:{type:"primary"},on:{click:function(t){return e.submit()}}},[e._v("确定")]),a("awsui-button",{on:{click:function(t){return e.cancel()}}},[e._v("取消")])],1)]),a("el-dialog",{attrs:{id:"updateShapeAnchor",title:e.update.title,visible:e.update.visible,"append-to-body":"","close-on-press-escape":!1,"close-on-click-modal":!1,width:"500px","before-close":e.handleUpdateClose},on:{"update:visible":function(t){return e.$set(e.update,"visible",t)}}},[a("div",{staticStyle:{border:"1px solid #F2F2F2",padding:"0px 10px 10px 10px",height:"250px","overflow-y":"auto"}},[a("awsui-form",{ref:"form1",attrs:{model:e.update.form,"label-position":"top"}},[a("awsui-form-item",{attrs:{label:"显示位置"}},[a("awsui-row",{attrs:{gutter:15}},[a("awsui-col",{attrs:{span:3}},[a("div",{staticStyle:{"text-align":"right"}},[a("span",{staticStyle:{color:"red"}},[e._v("*")]),e._v("水平")])]),a("awsui-col",{attrs:{span:9}},[a("div",[a("el-select",{attrs:{placeholder:"水平位置",size:"mini"},model:{value:e.update.form.position.horizontal,callback:function(t){e.$set(e.update.form.position,"horizontal",t)},expression:"update.form.position.horizontal"}},e._l(e.update.form.position.horizontalOpts,(function(t){return a("el-option",{key:t.value,attrs:{label:t.label,value:t.value}},["mostLeft"==t.value?a("div",{staticClass:"update-loc update-loc-horizontal-icon",attrs:{"data-loc":"mostLeft"}},[a("span",{staticClass:"loc-point",staticStyle:{left:"-5px"}})]):e._e(),"left"==t.value?a("div",{staticClass:"update-loc update-loc-horizontal-icon",attrs:{"data-loc":"left"}},[a("span",{staticClass:"loc-point",staticStyle:{left:"0px"}})]):e._e(),"center"==t.value?a("div",{staticClass:"update-loc update-loc-horizontal-icon",attrs:{"data-loc":"center"}},[a("span",{staticClass:"loc-point",staticStyle:{left:"3px"}})]):e._e(),"right"==t.value?a("div",{staticClass:"update-loc update-loc-horizontal-icon",attrs:{"data-loc":"right"}},[a("span",{staticClass:"loc-point",staticStyle:{left:"6px"}})]):e._e(),"mostRight"==t.value?a("div",{staticClass:"update-loc update-loc-horizontal-icon",attrs:{"data-loc":"mostRight"}},[a("span",{staticClass:"loc-point",staticStyle:{left:"11px"}})]):e._e(),a("span",[e._v(e._s(t.label))])])})),1)],1)]),a("awsui-col",{attrs:{span:3}},[a("div",{staticStyle:{"text-align":"right"}},[a("span",{staticStyle:{color:"red"}},[e._v("*")]),e._v("垂直")])]),a("awsui-col",{attrs:{span:9}},[a("div",[a("el-select",{attrs:{placeholder:"垂直位置",size:"mini"},model:{value:e.update.form.position.verity,callback:function(t){e.$set(e.update.form.position,"verity",t)},expression:"update.form.position.verity"}},e._l(e.update.form.position.verityOpts,(function(t){return a("el-option",{key:t.value,attrs:{label:t.label,value:t.value}},["mostTop"==t.value?a("div",{staticClass:"update-loc update-loc-verity-icon",attrs:{"data-loc":"mostTop"}},[a("span",{staticClass:"loc-point",staticStyle:{top:"-5px"}})]):e._e(),"top"==t.value?a("div",{staticClass:"update-loc update-loc-verity-icon",attrs:{"data-loc":"top"}},[a("span",{staticClass:"loc-point",staticStyle:{top:"0px"}})]):e._e(),"center"==t.value?a("div",{staticClass:"update-loc update-loc-verity-icon",attrs:{"data-loc":"center"}},[a("span",{staticClass:"loc-point",staticStyle:{top:"3px"}})]):e._e(),"bottom"==t.value?a("div",{staticClass:"update-loc update-loc-verity-icon",attrs:{"data-loc":"bottom"}},[a("span",{staticClass:"loc-point",staticStyle:{top:"6px"}})]):e._e(),"mostBottom"==t.value?a("div",{staticClass:"update-loc update-loc-verity-icon",attrs:{"data-loc":"mostBottom"}},[a("span",{staticClass:"loc-point",staticStyle:{top:"11px"}})]):e._e(),a("span",[e._v(e._s(t.label))])])})),1)],1)])],1)],1),a("awsui-form-item",{attrs:{label:"显示方式"}},[a("awsui-select",{attrs:{options:e.update.form.showType.opts},on:{change:e.changeShowType},model:{value:e.update.form.showType.value,callback:function(t){e.$set(e.update.form.showType,"value",t)},expression:"update.form.showType.value"}})],1),a("awsui-form-item",{directives:[{name:"show",rawName:"v-show",value:"text"==e.update.form.showType.value,expression:"update.form.showType.value == 'text'"}],attrs:{label:"文本信息"}},[a("awsui-input",{attrs:{type:"textarea",placeholder:"请输入不超过200个字符的文本信息"},model:{value:e.update.form.cfgContent,callback:function(t){e.$set(e.update.form,"cfgContent",t)},expression:"update.form.cfgContent"}})],1),a("awsui-form-item",{directives:[{name:"show",rawName:"v-show",value:"attribute"==e.update.form.showType.value,expression:"update.form.showType.value == 'attribute'"}],attrs:{label:"属性选择"}},[a("el-popover",{ref:"attrPopover",attrs:{placement:"bottom",width:"413",popperClass:"methodShapeAnchorUpdateAttrPopover","visible-arrow":!1,trigger:"click"},on:{"after-enter":e.handleInitAttrTree}},[a("div",{directives:[{name:"loading",rawName:"v-loading",value:e.attrTreeLoading,expression:"attrTreeLoading"}],staticStyle:{height:"168px",overflow:"auto"}},[a("div",{staticStyle:{margin:"0 5px"}},[a("el-tree",{attrs:{data:e.attrTreeData,"node-key":"id","default-expand-all":"","empty-text":"请先配置形状的数据属性",props:e.attrTreeProps},on:{"node-click":e.handleNodeClick},scopedSlots:e._u([{key:"default",fn:function(t){var o=t.node,i=t.data;return a("span",{},[a("i",{staticClass:"awsui-iconfont tree-content-icon tree-content-icon-padding",style:{color:i.iconColor},domProps:{innerHTML:e._s(o.data.iconCode)}}),a("span",[e._v(e._s(o.label))])])}}])})],1)]),a("div",{attrs:{slot:"reference"},slot:"reference"},[a("awsui-input",{attrs:{readonly:"",placeholder:"点击选择需要在该位置显示的属性"},model:{value:e.update.form.attrName,callback:function(t){e.$set(e.update.form,"attrName",t)},expression:"update.form.attrName"}})],1)])],1),a("awsui-form-item",{directives:[{name:"show",rawName:"v-show",value:"icon"==e.update.form.showType.value,expression:"update.form.showType.value == 'icon'"}],attrs:{label:"图标选择"}},[a("el-popover",{ref:"popover",attrs:{placement:"bottom",width:"413",popperClass:"methodShapeAnchorUpdatePopover","visible-arrow":!1,trigger:"click"}},[a("div",e._l(e.update.form.iconInfo.opts,(function(t){return a("div",{staticStyle:{display:"inline-block",margin:"0 5px"}},[a("i",{staticClass:"awsui-iconfont",staticStyle:{"font-size":"30px",cursor:"pointer"},style:{color:t.color},domProps:{innerHTML:e._s(t.code)},on:{click:function(a){return e.handleSetIcon(t)}}})])})),0),a("div",{staticStyle:{height:"36px","line-height":"32px","vertical-align":"middle",width:"436px",border:"1px solid #e9e9e9"},attrs:{slot:"reference"},slot:"reference"},[a("div",{staticStyle:{display:"inline-block",position:"relative",top:"2px","margin-left":"5px"}},[a("i",{staticClass:"awsui-iconfont",style:{"font-size":"30px",color:e.update.form.iconInfo.value.color},domProps:{innerHTML:e._s(e.update.form.iconInfo.value.code)}})]),a("i",{staticClass:"el-icon-arrow-down column-arrow-down",staticStyle:{float:"right"}})])])],1)],1),a("awsui-form",{directives:[{name:"show",rawName:"v-show",value:"attribute"==e.update.form.showType.value,expression:"update.form.showType.value == 'attribute'"}],ref:"form2",attrs:{model:e.update.form}},[a("awsui-form-item",{attrs:{label:"显示属性名"}},[a("awsui-row",{attrs:{gutter:15}},[a("awsui-col",{attrs:{span:3,offset:16}},[a("div",[a("awsui-switch",{attrs:{activeColor:"#4E7FF9"},model:{value:e.update.form.isShowAttrName,callback:function(t){e.$set(e.update.form,"isShowAttrName",t)},expression:"update.form.isShowAttrName"}})],1)])],1)],1)],1)],1),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("awsui-button",{staticClass:"button-general-color",attrs:{type:"primary"},on:{click:e.saveUpdateShapeConfig}},[e._v("确定")]),a("awsui-button",{on:{click:function(t){e.update.visible=!1}}},[e._v("取消")])],1)])],1)},we=[],ye={name:"MethodShapeAnchorDlg",props:{visible:{type:Boolean,default:!1},type:{type:String,default:""},methodId:{type:String,default:""},wsId:{type:String,default:""},shapeName:{type:String,default:""},shapeObjId:{type:String,default:""}},data:function(){return{dialogVisible:!1,data:[],attrTreeLoading:!1,update:{visible:!1,title:"添加",id:"",form:{position:{horizontal:"",horizontalOpts:[{label:"左外边",value:"mostLeft"},{label:"左内边",value:"left"},{label:"中间",value:"center"},{label:"右内边",value:"right"},{label:"右外边",value:"mostRight"}],verity:"",verityOpts:[{label:"上外边",value:"mostTop"},{label:"上内边",value:"top"},{label:"中间",value:"center"},{label:"下内边",value:"bottom"},{label:"下外边",value:"mostBottom"}]},showType:{value:"text",opts:[{value:"text",label:"文本信息"},{value:"attribute",label:"属性信息"},{value:"icon",label:"图标"}]},cfgContent:"",attrName:"",attrKey:"",isShowAttrName:!1,iconInfo:{value:{},opts:[{code:"&#xe609;",color:"#1296DB"},{code:"&#xe832;",color:"#EA9518"},{code:"&#xe807;",color:"#EA9518"},{code:"&#xe61c;",color:"#1296DB"},{code:"&#xe802;",color:"#1296DB"},{code:"&#xe63d;",color:"#EA9518"},{code:"&#xe62f;",color:"#D81E06"},{code:"&#xe836;",color:"#1296DB"},{code:"&#xe66a;",color:"#1296DB"},{code:"&#xe635;",color:"#707070"},{code:"&#xe81a;",color:"#D81E06"},{code:"&#xe69b;",color:"#00c853"},{code:"&#xe829;",color:"#FA8072"},{code:"&#xe69a;",color:"#00c853"},{code:"&#xe82a;",color:"#00c853"},{code:"&#xe773;",color:"#082E54"},{code:"&#xe783;",color:"#EA9518"},{code:"&#xe819;",color:"#FA8072"},{code:"&#xe726;",color:"#00c853"},{code:"&#xe62a;",color:"#1296DB"},{code:"&#xe62b;",color:"#1296DB"},{code:"&#xe618;",color:"#1296DB"},{code:"&#xe62e;",color:"#1296DB"},{code:"&#xe80f;",color:"#7AA7AA"},{code:"&#xe80e;",color:"#7AA7AA"},{code:"&#xe811;",color:"#7AA7AA"},{code:"&#xe813;",color:"#7AA7AA"},{code:"&#xe814;",color:"#7AA7AA"},{code:"&#xe810;",color:"#7AA7AA"},{code:"&#xe815;",color:"#7AA7AA"},{code:"&#xe812;",color:"#7AA7AA"},{code:"&#xe835;",color:"#E9433F"},{code:"&#xe835;",color:"#FFAE03"},{code:"&#xe835;",color:"#F4EA2A"},{code:"&#xe835;",color:"#00C853"},{code:"&#xe835;",color:"#1296DB"},{code:"&#xe835;",color:"#082E54"},{code:"&#xe835;",color:"#88147F"},{code:"&#xe835;",color:"#7DABB1"},{code:"&#xe835;",color:"#707070"}]}}},attrTreeData:[],attrTreeProps:{children:"children",label:"label"}}},methods:{changeShowType:function(e){this.update.form.showType.value=e},initData:function(){if("commonShapeConfig"==this.type){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_shape_config_query",wsId:e.wsId,methodId:e.methodId,shapeId:e.shapeName}};u["a"].post(t).then((function(t){if("ok"==t.result){for(var a=0;a<t.data.length;a++)t.data[a].attribute=JSON.parse(t.data[a].attribute);e.data=t.data}else e.$message.error(t.msg)})).catch((function(e){console.log(e)}))}else this.type},formatContent:function(e){return e.replace(/</g,"&lt;").replace(/>/g,"&gt;")},formatIconCode:function(e){return e.split("|")[0]},formatIconColor:function(e){return e.split("|")[1]},handleClose:function(e){this.closeDlalog("cancel"),e()},cancel:function(){this.closeDlalog("cancel"),this.dialogVisible=!1},submit:function(){this.closeDlalog("save"),this.dialogVisible=!1},closeDlalog:function(e){if("save"==e){for(var t={data:[],wsId:this.wsId,methodId:this.methodId,shapeId:this.shapeName},a=0;a<this.data.length;a++)t.data.push(this.data[a].attribute);this.$emit("getResult",t)}else this.$emit("cancel")},removeShapeConfig:function(e){for(var t=0;t<this.data.length;t++)if(this.data[t].id==e){this.data.splice(t,1);break}},updateShapeConfig:function(e){this.clearUpdateShapeConfig(),e?(this.update.title="修改",this.update.id=e.id,this.initUpdateShapeConfigData(e.attribute)):this.update.title="添加",this.update.visible=!0},initUpdateShapeConfigData:function(e){if(this.update.form.showType.value=e.showType,this.update.form.position.horizontal=e.horizontal,this.update.form.position.verity=e.verity,"text"==e.showType)this.update.form.cfgContent=e.cfgContent;else if("attribute"==e.showType)this.update.form.attrName=e.attrName,this.update.form.attrKey=e.key,this.update.form.isShowAttrName=e.isShowAttrName;else if("icon"==e.showType){var t=e.iconContent.split("|");this.update.form.iconInfo.value={code:t[0],color:t[1]}}},clearUpdateShapeConfig:function(){this.update.id="",this.update.form.position.horizontal="",this.update.form.position.verity="",this.update.form.showType.value="text",this.update.form.cfgContent="",this.update.form.attrName="",this.update.form.attrKey="",this.update.form.isShowAttrName=!1,this.update.form.iconInfo.value={},this.attrTreeData=[]},handleUpdateClose:function(e){e()},handleSetIcon:function(e){this.update.form.iconInfo.value=e,this.$refs["popover"].doClose()},handleNodeClick:function(e){e.open||(this.update.form.attrName=e.label,this.update.form.attrKey=e.id,this.$refs["attrPopover"].doClose())},handleInitAttrTree:function(){this.attrTreeLoading=!0;var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_shape_config_attr_tree_query",wsId:e.wsId,methodId:e.methodId,shapeId:e.shapeName}};u["a"].post(t).then((function(t){e.attrTreeLoading=!1,"ok"==t.result&&(e.attrTreeData=t.data)})).catch((function(e){console.log(e)}))},saveUpdateShapeConfig:function(){if(""==this.update.form.position.horizontal)return this.$message({message:"请选择水平位置",type:"warning"}),!1;if(""==this.update.form.position.verity)return this.$message({message:"请选择垂直位置",type:"warning"}),!1;for(var e=0;e<this.data.length;e++){var t=this.data[e].attribute;if((""!=this.update.id&&this.update.id!=this.data[e].id||""==this.update.id)&&t.horizontal==this.update.form.position.horizontal&&t.verity==this.update.form.position.verity)return this.$message({message:"此显示位置已被占用,请选择其它位置",type:"warning"}),!1}var a={};a.horizontal=this.update.form.position.horizontal,a.verity=this.update.form.position.verity;var o=this.update.form.showType.value;if(a.showType=o,"text"==o){if(""==this.update.form.cfgContent.trim())return this.$message({message:"[文本信息]不允许为空",type:"warning"}),!1;if(this.update.form.cfgContent.trim().length>=200)return this.$message({message:"[文本信息]不允许超过200个字符",type:"warning"}),!1;a.cfgContent=this.update.form.cfgContent}else if("attribute"==o){if(""==this.update.form.attrKey)return this.$message({message:"请选择属性信息",type:"warning"}),!1;a.attrName=this.update.form.attrName,a.key=this.update.form.attrKey,a.isShowAttrName=this.update.form.isShowAttrName,a.cfgContent=""}else if("icon"==o){if(!this.update.form.iconInfo.value.code||""==this.update.form.iconInfo.value.code)return this.$message({message:"请选择图标",type:"warning"}),!1;a.iconContent=this.update.form.iconInfo.value.code+"|"+this.update.form.iconInfo.value.color}if(""!=this.update.id){for(var i=0;i<this.data.length;i++)if(this.data[i].id==this.update.id){this.data[i].attribute=a;break}}else{var s={attribute:a,id:"new"+Math.random(),methodId:this.methodId,shapeId:this.shapeName,wsId:this.wsId,orderIndex:0};this.data.push(s);for(var n=0;n<this.data.length;n++)this.data[n].orderIndex=n+1}return this.update.visible=!1,!0}},watch:{visible:function(e){this.dialogVisible=e,e&&this.initData()}}},be=ye,xe=(a("dc5e"),a("1b8b"),Object(f["a"])(be,ve,we,!1,null,"821aa6b2",null)),_e=xe.exports,Ce={name:"MethodObject",components:{MethodShapeAnchorDlg:_e},props:{parentHeaderHeight:{type:String,default:"0px"},methodId:{type:String,default:""},methodName:{type:String,default:""},searchInput:{type:String,default:""}},data:function(){return{loading:!1,loadingText:"加载中",headerHeight:"45px",tableHeight:parseInt(this.$store.getters.getTopMainHeightFn)-45-parseInt(this.parentHeaderHeight)+"px",tableData:[],tableTempData:[],icon:{code:"",color:""},drawer:{title:"文件属性配置",visible:!1,loading:!1,data:[],type:"file",shapeName:"",footerHeight:"50px",buttonDisabled:!1},shapeAnchorConfig:{visible:!1,type:"commonShapeConfig",methodId:"",shapeName:"",wsId:""}}},mounted:function(){this.initData()},methods:{initData:function(){var e=this;e.loadingText="加载中",e.loading=!0;var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_shape_definition_data_query",methodId:e.methodId}};u["a"].post(t).then((function(t){if(e.loading=!1,"ok"==t.result){for(var a=0;a<t.data.data.length;a++)t.data.data[a].no=a+1,e.tableTempData.push(t.data.data[a]);e.icon=t.data.icon,e.search(e.searchInput)}else alert("请求响应错误")})).catch((function(t){console.log(t),e.loading=!1}))},handleDataNo:function(e){for(var t=0;t<e.length;t++)e[t].no=t+1;return e},search:function(e){if(e&&""!=e.trim()){for(var t=[],a=0;a<this.tableTempData.length;a++)this.tableTempData[a].name.indexOf(e)>-1&&t.push(this.tableTempData[a]);this.tableData=this.handleDataNo(t)}else this.tableData=this.handleDataNo(this.tableTempData)},clickTableRow:function(e,t,a){this.$refs.table.setCurrentRow(e)},handleShapeAttrConfig:function(e){var t=this;t.drawer.buttonDisabled=!1,t.drawer.data=[],t.drawer.title="形状属性配置",t.drawer.type="shape",t.drawer.shapeName=e,t.drawer.visible=!0,t.$nextTick((function(){t.initDrawerBodyHeight()})),t.drawer.loading=!0;var a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_shape_more_attr_config_query",methodId:t.methodId,shapeName:e,wsId:t.$store.getters.getWsIdFn}};u["a"].post(a).then((function(e){t.drawer.loading=!1,"ok"==e.result?t.drawer.data=e.data:alert("请求响应错误")})).catch((function(e){console.log(e),t.drawer.loading=!1}))},handleFileAttrConfig:function(){var e=this;e.drawer.buttonDisabled=!1,e.drawer.data=[],e.drawer.title="文件属性配置",e.drawer.type="file",e.drawer.shapeName="",e.drawer.visible=!0,e.$nextTick((function(){e.initDrawerBodyHeight()})),e.drawer.loading=!0;var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_file_more_attr_config_query",methodId:e.methodId,wsId:e.$store.getters.getWsIdFn}};u["a"].post(t).then((function(t){e.drawer.loading=!1,"ok"==t.result?e.drawer.data=t.data.moreAttr:alert("请求响应错误")})).catch((function(t){console.log(t),e.drawer.loading=!1}))},saveAttrConfig:function(){var e=this;e.drawer.type;if(0!=e.drawer.data.length){e.drawer.buttonDisabled=!0,e.closeDrawer(),e.loadingText="正在更新资产库文件",e.loading=!0;var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_more_attr_config_save",attrData:JSON.stringify(e.drawer.data),wsId:e.$store.getters.getWsIdFn,type:e.drawer.type,shapeName:e.drawer.shapeName,methodId:e.methodId}};u["a"].post(t).then((function(t){e.loading=!1,"ok"==t.result?e.$message({message:"更新成功",type:"success"}):e.$message.error(t.msg)})).catch((function(e){console.log(e)}))}else e.$message({message:"无相关属性进行保存",type:"warning"})},closeDrawer:function(){this.drawer.visible=!1},handleDrawerClose:function(e){e()},initDrawerBodyHeight:function(){null!=document.getElementById("drawerBody")&&(document.getElementById("drawerBody").style.height=parseInt(this.tableHeight)+parseInt(this.headerHeight)+parseInt(this.parentHeaderHeight)-58-parseInt(this.drawer.footerHeight)+"px")},handleShapeAnchorConfig:function(e){this.shapeAnchorConfig.wsId=this.$store.getters.getWsIdFn,this.shapeAnchorConfig.methodId=this.methodId,this.shapeAnchorConfig.shapeName=e,this.shapeAnchorConfig.visible=!0},handleSaveShapeAnchorConfig:function(e){var t=this,a={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_shape_config_save",wsId:e.wsId,methodId:e.methodId,shapeId:e.shapeId,data:JSON.stringify(e.data)}};u["a"].post(a).then((function(e){"ok"==e.result&&(t.shapeAnchorConfig.visible=!1,t.$message({showClose:!0,message:"保存成功",type:"success"}))})).catch((function(e){console.log(e)}))}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(e,t){this.tableHeight=parseInt(e)-parseInt(this.headerHeight)-parseInt(this.parentHeaderHeight)+"px",this.initDrawerBodyHeight()}}},ke=Ce,Ie=(a("5cea"),Object(f["a"])(ke,fe,ge,!1,null,"264d48c2",null)),Se=Ie.exports,Te={name:"Method",components:{MethodObject:Se,MethodLink:me,MethodAttribute:le},data:function(){return{loading:!0,headerHeight:"40px",activeMethod:{id:"",name:""},methodData:[],activeType:"",searchInput:"",methodAttribute:{value:{id:"all",name:"全部"},opts:[{id:"all",name:"全部"},{id:"file",name:"文件属性"},{id:"shape",name:"形状属性"}]}}},mounted:function(){this.initPage()},methods:{initPage:function(){var e=this,t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_pl_manage_method_data_query"}};u["a"].post(t).then((function(t){if(e.loading=!1,"ok"==t.result){e.methodData=t.data,e.changeMethodType("methodObject");for(var a=0;a<e.methodData.length;a++)if("group"!=e.methodData[a].type){e.changeMethod(e.methodData[a].id,e.methodData[a].name);break}}else alert("请求响应错误")})).catch((function(t){console.log(t),e.loading=!1}))},changeMethod:function(e,t){this.searchInput="",this.activeMethod.id=e,this.activeMethod.name=t;var a=this.activeType;this.activeType="",this.methodAttribute.value=this.methodAttribute.opts[0],this.$nextTick((function(){this.activeType=a}))},changeMethodType:function(e){this.searchInput="",this.methodAttribute.value=this.methodAttribute.opts[0],this.activeType=e},search:function(){"methodObject"==this.activeType?this.$refs.methodObject.search(this.searchInput):"methodAttribute"==this.activeType?this.$refs.methodAttribute.search(""):"methodLink"==this.activeType&&this.$refs.methodLink.search("")},changeAttrScope:function(e){this.methodAttribute.value=e},createMethod:function(){this.$message("敬请期待")}},computed:{listenTopMainHeight:function(){return this.$store.getters.getTopMainHeightFn}},watch:{listenTopMainHeight:function(e,t){}}},Fe=Te,De=(a("fd7f"),Object(f["a"])(Fe,ee,te,!1,null,"5e1b2666",null)),$e=De.exports,Ne={name:"Main",components:{PwdChange:O,Navigation:T,WorkspaceBackup:R,Recycle:Z,Method:$e,Mark:Q},data:function(){return{bodyHeight:document.documentElement.clientHeight-56+"px",drawer:!1,direction:"rtl",nonAppComponent:"",wsId:"",cooperation:{drawer:!1,cooperationContent:""},mainTimer:null,mainTimerNum:200}},provide:function(){return{openAppDrawer:this.openAppDrawer,closeAppDrawer:this.closeAppDrawer,openPwdConfig:this.openPwdConfig,logout:this.logout,openCooperationDrawer:this.openCooperationDrawer,closeCooperationDrawer:this.closeCooperationDrawer,saveAccessOpLog:this.saveAccessOpLog}},computed:{key:function(){return new Date+""}},created:function(){},mounted:function(){forceChangePwd&&this.openPwdConfig(),this.$store.commit("setTopMainHeightFn",this.bodyHeight),this.resize(),document.body.ondrop=function(e){e.preventDefault(),e.stopPropagation()}},methods:{openAppDrawer:function(){void 0!=document.getElementById("appContent")&&(document.getElementById("appContent").innerHTML=""),this.drawer=!0},openAppIframe:function(){this.wsId=this.$store.getters.getWsIdFn;var e=this,t=e.$refs.navigation;"method"==t.currApp.clazzName?(e.nonAppComponent="",e.$nextTick((function(){e.nonAppComponent="Method"})),e.saveAccessOpLog("method")):"backup"==t.currApp.clazzName?(e.nonAppComponent="",e.$nextTick((function(){e.nonAppComponent="WorkspaceBackup"})),e.saveAccessOpLog("backup")):"recycle"==t.currApp.clazzName?(e.nonAppComponent="",e.$nextTick((function(){e.nonAppComponent="Recycle"})),e.saveAccessOpLog("recycle")):"mark"==t.currApp.clazzName?(e.nonAppComponent="",e.$nextTick((function(){e.nonAppComponent="Mark"})),e.saveAccessOpLog("mark")):(e.nonAppComponent="",e.$nextTick((function(){document.getElementById("appContent").innerHTML="";var a=wHref+"?sid="+e.$store.state.sessionId+"&wsId="+e.$store.getters.getWsIdFn+"&teamId="+e.$store.getters.getTeamIdFn+"&clazzName="+t.currApp.clazzName+"&cmd=com.actionsoft.apps.coe.pal_app_page";document.getElementById("appContent").innerHTML='<iframe id="appIframe" width="100%" height="100%" name="appIframe" style="border:0;" src="'+a+'"></iframe>'})))},closeAppDrawer:function(){this.nonAppComponent="",this.drawer=!1,this.$refs.navigation.showAppDetail=!1},openCooperationDrawer:function(){this.wsId=this.$store.getters.getWsIdFn,void 0!=document.getElementById("cooperationContent")&&(document.getElementById("cooperationContent").innerHTML=""),this.cooperation.drawer=!0},openCooperationIframe:function(){var e=this,t=this,a=t.$refs.navigation;t.wsId=a.wsValue,t.cooperation.cooperationContent="",t.$nextTick((function(){document.getElementById("cooperationContent").innerHTML="";var t=wHref+"?sid="+e.$store.state.sessionId+"&mainPage=manage&cmd=com.actionsoft.apps.coe.pal.cooperation_main";document.getElementById("cooperationContent").innerHTML='<iframe id="cooperationIframe" width="100%" height="100%" name="cooperationIframe" style="border:0;" src="'+t+'"></iframe>'}))},closeCooperationDrawer:function(){this.cooperation.cooperationContent="",this.cooperation.drawer=!1,this.$refs.navigation.cooperationDrawer.showCooperationDetail=!1},handleClose:function(e){e()},openPwdConfig:function(){this.$refs.pwdChange.pwdConfig=!0},logout:function(){var e=this;e.$confirm("确定离开系统吗?","提示",{confirmButtonText:"确定",confirmButtonClass:"button-general-color",cancelButtonText:"取消",type:"warning"}).then((function(){var t=wHref+"?sid="+e.$store.state.sessionId+"&cmd=com.actionsoft.apps.coe.pal_user_logout";window.location.replace(t)})).catch((function(){}))},resize:function(){var e=this,t=null;window.onresize=function(){return function(){t&&clearTimeout(t),t=setTimeout((function(){e.bodyHeight=document.documentElement.clientHeight-56+"px",e.$store.commit("setTopMainHeightFn",e.bodyHeight)}),400)}()}},clickDomEvent:function(){this.$store.commit("setNavigationQueryVisibleFn",!1)},saveAccessOpLog:function(e){var t={url:"jd",data:{cmd:"com.actionsoft.apps.coe.pal_access_log_save",moduleCategory:e}};u["a"].post(t).then((function(e){e.result})).catch((function(e){console.log(e)}))}}},Ae=Ne,Le=(a("83e3"),Object(f["a"])(Ae,o,i,!1,null,"0a1095dc",null));t["default"]=Le.exports},d14a:function(e,t,a){"use strict";a("5551")},d8f1:function(e,t,a){},dc5e:function(e,t,a){"use strict";a("7d43")},fd7f:function(e,t,a){"use strict";a("9d38")},ffd2:function(e,t,a){"use strict";a("83af")}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-bf7921b8.4686146e.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-bf7921b8.4686146e.js
                                                  new file mode 100644
                                                  index 00000000..9322299c
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-bf7921b8.4686146e.js
                                                  @@ -0,0 +1 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-bf7921b8"],{"0997":function(e,t,n){"use strict";var r=n("3d1e"),o=n("85b5"),i=n("f80f"),s=n("ab31"),a=n("9f97");function u(e){this.defaults=e,this.interceptors={request:new i,response:new i}}u.prototype.request=function(e){"string"===typeof e?(e=arguments[1]||{},e.url=arguments[0]):e=e||{},e=a(this.defaults,e),e.method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var t=[s,void 0],n=Promise.resolve(e);this.interceptors.request.forEach((function(e){t.unshift(e.fulfilled,e.rejected)})),this.interceptors.response.forEach((function(e){t.push(e.fulfilled,e.rejected)}));while(t.length)n=n.then(t.shift(),t.shift());return n},u.prototype.getUri=function(e){return e=a(this.defaults,e),o(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],(function(e){u.prototype[e]=function(t,n){return this.request(a(n||{},{method:e,url:t}))}})),r.forEach(["post","put","patch"],(function(e){u.prototype[e]=function(t,n,r){return this.request(a(r||{},{method:e,url:t,data:n}))}})),e.exports=u},"0cc7":function(e,t,n){"use strict";var r=n("3d1e");e.exports=function(e,t){r.forEach(e,(function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])}))}},"0f08":function(e,t,n){"use strict";var r=n("5976"),o=n.n(r),i=n("4360");function s(e){var t=[];for(var n in e)t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t.join("&")}o.a.defaults.baseURL="undefined"==typeof axiosBaseUrl?"":axiosBaseUrl,o.a.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded; charset=utf-8",o.a.interceptors.request.use((function(e){return"post"==e.method&&(e.params={}),e}),(function(e){return Promise.reject(e)})),o.a.interceptors.response.use((function(e){return e.data}),(function(e){if(null==e.response)throw e;var t=e.response.status;return t>=500?alert("服务繁忙请稍后再试"):t>=400&&alert(e.response.data.message),console.dir(e),Promise.reject(e)}));var a=function(e){return o()({method:"get",url:e.url,params:e.params})},u=function(e){var t={method:"post",url:e.url,data:e.data};return t.data.sid=i["a"].state.sessionId,t.data=s(t.data),o()(t)},c=function(e){var t={authentication:i["a"].state.sessionId,sourceAppId:e.sourceAppId,aslp:e.aslp};Object.assign(t,e.params);var n={method:"post",url:e.portalUrl,params:t};return n.data=s(n.data),o()(n)};t["a"]={get:a,post:u,aslp:c}},"26af":function(e,t,n){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},"2a78":function(e,t,n){"use strict";var r=n("6c70");e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(r("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},"3d1e":function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var o=n("efe0"),i=Object.prototype.toString;function s(e){return"[object Array]"===i.call(e)}function a(e){return"undefined"===typeof e}function u(e){return null!==e&&!a(e)&&null!==e.constructor&&!a(e.constructor)&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function c(e){return"[object ArrayBuffer]"===i.call(e)}function f(e){return"undefined"!==typeof FormData&&e instanceof FormData}function p(e){var t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer,t}function l(e){return"string"===typeof e}function d(e){return"number"===typeof e}function h(e){return null!==e&&"object"===r(e)}function m(e){if("[object Object]"!==i.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function v(e){return"[object Date]"===i.call(e)}function y(e){return"[object File]"===i.call(e)}function g(e){return"[object Blob]"===i.call(e)}function b(e){return"[object Function]"===i.call(e)}function w(e){return h(e)&&b(e.pipe)}function x(e){return"undefined"!==typeof URLSearchParams&&e instanceof URLSearchParams}function C(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function A(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function E(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==r(e)&&(e=[e]),s(e))for(var n=0,o=e.length;n<o;n++)t.call(null,e[n],n,e);else for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.call(null,e[i],i,e)}function j(){var e={};function t(t,n){m(e[n])&&m(t)?e[n]=j(e[n],t):m(t)?e[n]=j({},t):s(t)?e[n]=t.slice():e[n]=t}for(var n=0,r=arguments.length;n<r;n++)E(arguments[n],t);return e}function S(e,t,n){return E(t,(function(t,r){e[r]=n&&"function"===typeof t?o(t,n):t})),e}function R(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}e.exports={isArray:s,isArrayBuffer:c,isBuffer:u,isFormData:f,isArrayBufferView:p,isString:l,isNumber:d,isObject:h,isPlainObject:m,isUndefined:a,isDate:v,isFile:y,isBlob:g,isFunction:b,isStream:w,isURLSearchParams:x,isStandardBrowserEnv:A,forEach:E,merge:j,extend:S,trim:C,stripBOM:R}},"4a94":function(e,t,n){"use strict";var r=n("3d1e"),o=n("2a78"),i=n("a74f"),s=n("85b5"),a=n("d547"),u=n("ce40"),c=n("d5f5"),f=n("6c70");e.exports=function(e){return new Promise((function(t,n){var p=e.data,l=e.headers;r.isFormData(p)&&delete l["Content-Type"],(r.isBlob(p)||r.isFile(p))&&p.type&&delete l["Content-Type"];var d=new XMLHttpRequest;if(e.auth){var h=e.auth.username||"",m=unescape(encodeURIComponent(e.auth.password))||"";l.Authorization="Basic "+btoa(h+":"+m)}var v=a(e.baseURL,e.url);if(d.open(e.method.toUpperCase(),s(v,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,d.onreadystatechange=function(){if(d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))){var r="getAllResponseHeaders"in d?u(d.getAllResponseHeaders()):null,i=e.responseType&&"text"!==e.responseType?d.response:d.responseText,s={data:i,status:d.status,statusText:d.statusText,headers:r,config:e,request:d};o(t,n,s),d=null}},d.onabort=function(){d&&(n(f("Request aborted",e,"ECONNABORTED",d)),d=null)},d.onerror=function(){n(f("Network Error",e,null,d)),d=null},d.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(f(t,e,"ECONNABORTED",d)),d=null},r.isStandardBrowserEnv()){var y=(e.withCredentials||c(v))&&e.xsrfCookieName?i.read(e.xsrfCookieName):void 0;y&&(l[e.xsrfHeaderName]=y)}if("setRequestHeader"in d&&r.forEach(l,(function(e,t){"undefined"===typeof p&&"content-type"===t.toLowerCase()?delete l[t]:d.setRequestHeader(t,e)})),r.isUndefined(e.withCredentials)||(d.withCredentials=!!e.withCredentials),e.responseType)try{d.responseType=e.responseType}catch(g){if("json"!==e.responseType)throw g}"function"===typeof e.onDownloadProgress&&d.addEventListener("progress",e.onDownloadProgress),"function"===typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){d&&(d.abort(),n(e),d=null)})),p||(p=null),d.send(p)}))}},"50ca":function(e,t,n){"use strict";var r=n("3d1e");e.exports=function(e,t,n){return r.forEach(n,(function(n){e=n(e,t)})),e}},5976:function(e,t,n){e.exports=n("cf08")},"61f6":function(e,t,n){"use strict";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},6266:function(e,t,n){(function(e){function n(e,t){for(var n=0,r=e.length-1;r>=0;r--){var o=e[r];"."===o?e.splice(r,1):".."===o?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}function r(e){"string"!==typeof e&&(e+="");var t,n=0,r=-1,o=!0;for(t=e.length-1;t>=0;--t)if(47===e.charCodeAt(t)){if(!o){n=t+1;break}}else-1===r&&(o=!1,r=t+1);return-1===r?"":e.slice(n,r)}function o(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r<e.length;r++)t(e[r],r,e)&&n.push(e[r]);return n}t.resolve=function(){for(var t="",r=!1,i=arguments.length-1;i>=-1&&!r;i--){var s=i>=0?arguments[i]:e.cwd();if("string"!==typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(t=s+"/"+t,r="/"===s.charAt(0))}return t=n(o(t.split("/"),(function(e){return!!e})),!r).join("/"),(r?"/":"")+t||"."},t.normalize=function(e){var r=t.isAbsolute(e),s="/"===i(e,-1);return e=n(o(e.split("/"),(function(e){return!!e})),!r).join("/"),e||r||(e="."),e&&s&&(e+="/"),(r?"/":"")+e},t.isAbsolute=function(e){return"/"===e.charAt(0)},t.join=function(){var e=Array.prototype.slice.call(arguments,0);return t.normalize(o(e,(function(e,t){if("string"!==typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))},t.relative=function(e,n){function r(e){for(var t=0;t<e.length;t++)if(""!==e[t])break;for(var n=e.length-1;n>=0;n--)if(""!==e[n])break;return t>n?[]:e.slice(t,n-t+1)}e=t.resolve(e).substr(1),n=t.resolve(n).substr(1);for(var o=r(e.split("/")),i=r(n.split("/")),s=Math.min(o.length,i.length),a=s,u=0;u<s;u++)if(o[u]!==i[u]){a=u;break}var c=[];for(u=a;u<o.length;u++)c.push("..");return c=c.concat(i.slice(a)),c.join("/")},t.sep="/",t.delimiter=":",t.dirname=function(e){if("string"!==typeof e&&(e+=""),0===e.length)return".";for(var t=e.charCodeAt(0),n=47===t,r=-1,o=!0,i=e.length-1;i>=1;--i)if(t=e.charCodeAt(i),47===t){if(!o){r=i;break}}else o=!1;return-1===r?n?"/":".":n&&1===r?"/":e.slice(0,r)},t.basename=function(e,t){var n=r(e);return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},t.extname=function(e){"string"!==typeof e&&(e+="");for(var t=-1,n=0,r=-1,o=!0,i=0,s=e.length-1;s>=0;--s){var a=e.charCodeAt(s);if(47!==a)-1===r&&(o=!1,r=s+1),46===a?-1===t?t=s:1!==i&&(i=1):-1!==t&&(i=-1);else if(!o){n=s+1;break}}return-1===t||-1===r||0===i||1===i&&t===r-1&&t===n+1?"":e.slice(t,r)};var i="b"==="ab".substr(-1)?function(e,t,n){return e.substr(t,n)}:function(e,t,n){return t<0&&(t=e.length+t),e.substr(t,n)}}).call(this,n("eef6"))},"6c70":function(e,t,n){"use strict";var r=n("61f6");e.exports=function(e,t,n,o,i){var s=new Error(e);return r(s,t,n,o,i)}},"85b5":function(e,t,n){"use strict";var r=n("3d1e");function o(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else if(r.isURLSearchParams(t))i=t.toString();else{var s=[];r.forEach(t,(function(e,t){null!==e&&"undefined"!==typeof e&&(r.isArray(e)?t+="[]":e=[e],r.forEach(e,(function(e){r.isDate(e)?e=e.toISOString():r.isObject(e)&&(e=JSON.stringify(e)),s.push(o(t)+"="+o(e))})))})),i=s.join("&")}if(i){var a=e.indexOf("#");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}},9147:function(e,t,n){"use strict";function r(e){this.message=e}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,e.exports=r},"9f97":function(e,t,n){"use strict";var r=n("3d1e");e.exports=function(e,t){t=t||{};var n={},o=["url","method","data"],i=["headers","auth","proxy","params"],s=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],a=["validateStatus"];function u(e,t){return r.isPlainObject(e)&&r.isPlainObject(t)?r.merge(e,t):r.isPlainObject(t)?r.merge({},t):r.isArray(t)?t.slice():t}function c(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(n[o]=u(void 0,e[o])):n[o]=u(e[o],t[o])}r.forEach(o,(function(e){r.isUndefined(t[e])||(n[e]=u(void 0,t[e]))})),r.forEach(i,c),r.forEach(s,(function(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(n[o]=u(void 0,e[o])):n[o]=u(void 0,t[o])})),r.forEach(a,(function(r){r in t?n[r]=u(e[r],t[r]):r in e&&(n[r]=u(void 0,e[r]))}));var f=o.concat(i).concat(s).concat(a),p=Object.keys(e).concat(Object.keys(t)).filter((function(e){return-1===f.indexOf(e)}));return r.forEach(p,c),n}},a620:function(e,t,n){"use strict";var r=n("9147");function o(e){if("function"!==typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;e((function(e){n.reason||(n.reason=new r(e),t(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var e,t=new o((function(t){e=t}));return{token:t,cancel:e}},e.exports=o},a74f:function(e,t,n){"use strict";var r=n("3d1e");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),!0===s&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},ab31:function(e,t,n){"use strict";var r=n("3d1e"),o=n("50ca"),i=n("af9d"),s=n("fb04");function a(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){a(e),e.headers=e.headers||{},e.data=o(e.data,e.headers,e.transformRequest),e.headers=r.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]}));var t=e.adapter||s.adapter;return t(e).then((function(t){return a(e),t.data=o(t.data,t.headers,e.transformResponse),t}),(function(t){return i(t)||(a(e),t&&t.response&&(t.response.data=o(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},af9d:function(e,t,n){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},ce40:function(e,t,n){"use strict";var r=n("3d1e"),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,i,s={};return e?(r.forEach(e.split("\n"),(function(e){if(i=e.indexOf(":"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t){if(s[t]&&o.indexOf(t)>=0)return;s[t]="set-cookie"===t?(s[t]?s[t]:[]).concat([n]):s[t]?s[t]+", "+n:n}})),s):s}},cf08:function(e,t,n){"use strict";var r=n("3d1e"),o=n("efe0"),i=n("0997"),s=n("9f97"),a=n("fb04");function u(e){var t=new i(e),n=o(i.prototype.request,t);return r.extend(n,i.prototype,t),r.extend(n,t),n}var c=u(a);c.Axios=i,c.create=function(e){return u(s(c.defaults,e))},c.Cancel=n("9147"),c.CancelToken=n("a620"),c.isCancel=n("af9d"),c.all=function(e){return Promise.all(e)},c.spread=n("ee08"),e.exports=c,e.exports.default=c},d547:function(e,t,n){"use strict";var r=n("da4a"),o=n("26af");e.exports=function(e,t){return e&&!r(t)?o(e,t):t}},d5f5:function(e,t,n){"use strict";var r=n("3d1e");e.exports=r.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(e){var r=e;return t&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=o(window.location.href),function(t){var n=r.isString(t)?o(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return function(){return!0}}()},da4a:function(e,t,n){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},ee08:function(e,t,n){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},eef6:function(e,t,n){t.nextTick=function(e){var t=Array.prototype.slice.call(arguments);t.shift(),setTimeout((function(){e.apply(null,t)}),0)},t.platform=t.arch=t.execPath=t.title="browser",t.pid=1,t.browser=!0,t.env={},t.argv=[],t.binding=function(e){throw new Error("No such module. (Possibly not yet loaded)")},function(){var e,r="/";t.cwd=function(){return r},t.chdir=function(t){e||(e=n("6266")),r=e.resolve(t,r)}}(),t.exit=t.kill=t.umask=t.dlopen=t.uptime=t.memoryUsage=t.uvCounters=function(){},t.features={}},efe0:function(e,t,n){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}}},f80f:function(e,t,n){"use strict";var r=n("3d1e");function o(){this.handlers=[]}o.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){r.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=o},fb04:function(e,t,n){"use strict";(function(t){var r=n("3d1e"),o=n("0cc7"),i={"Content-Type":"application/x-www-form-urlencoded"};function s(e,t){!r.isUndefined(e)&&r.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function a(){var e;return("undefined"!==typeof XMLHttpRequest||"undefined"!==typeof t&&"[object process]"===Object.prototype.toString.call(t))&&(e=n("4a94")),e}var u={adapter:a(),transformRequest:[function(e,t){return o(t,"Accept"),o(t,"Content-Type"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e)?e:r.isArrayBufferView(e)?e.buffer:r.isURLSearchParams(e)?(s(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):r.isObject(e)?(s(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"===typeof e)try{e=JSON.parse(e)}catch(t){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){u.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){u.headers[e]=r.merge(i)})),e.exports=u}).call(this,n("eef6"))}}]);
                                                  \ No newline at end of file
                                                  diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-vendors.30b385c5.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-vendors.30b385c5.js
                                                  new file mode 100644
                                                  index 00000000..5756c89a
                                                  --- /dev/null
                                                  +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/main/js/chunk-vendors.30b385c5.js
                                                  @@ -0,0 +1,35 @@
                                                  +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-vendors"],{"00f2":function(t,e,n){var r=n("e99b");r(r.P,"Array",{fill:n("a740")}),n("87b2")("fill")},"01a4":function(t,e,n){"use strict";var r=n("e99b"),i=n("8078"),o=n("5d10");r(r.P+r.F*n("0926")((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})})),"Date",{toJSON:function(t){var e=i(this),n=o(e);return"number"!=typeof n||isFinite(n)?e.toISOString():null}})},"01c8":function(t,e,n){"use strict";var r=n("e99b"),i=n("3fa7");r(r.P+r.F*!n("95b6")([].reduce,!0),"Array",{reduce:function(t){return i(this,t,arguments.length,arguments[1],!1)}})},"0230":function(t,e,n){"use strict";var r=n("e99b"),i=n("1374");r(r.S+r.F*n("0926")((function(){function t(){}return!(Array.of.call(t)instanceof t)})),"Array",{of:function(){var t=0,e=arguments.length,n=new("function"==typeof this?this:Array)(e);while(e>t)i(n,t,arguments[t++]);return n.length=e,n}})},"0353":function(t,e,n){"use strict";var r=n("6bf8"),i=RegExp.prototype.exec,o=String.prototype.replace,a=i,u="lastIndex",c=function(){var t=/a/,e=/b*/g;return i.call(t,"a"),i.call(e,"a"),0!==t[u]||0!==e[u]}(),s=void 0!==/()??/.exec("")[1],f=c||s;f&&(a=function(t){var e,n,a,f,l=this;return s&&(n=new RegExp("^"+l.source+"$(?!\\s)",r.call(l))),c&&(e=l[u]),a=i.call(l,t),c&&a&&(l[u]=l.global?a.index+a[0].length:e),s&&a&&a.length>1&&o.call(a[0],n,(function(){for(f=1;f<arguments.length-2;f++)void 0===arguments[f]&&(a[f]=void 0)})),a}),t.exports=a},"03bb":function(t,e,n){var r=n("e99b");r(r.S,"Math",{RAD_PER_DEG:180/Math.PI})},"040a":function(t,e,n){n("106b")("Uint16",2,(function(t){return function(e,n,r){return t(this,e,n,r)}}))},"0451":function(t,e,n){var r=n("9cff"),i=n("d1cb"),o=n("839a")("species");t.exports=function(t){var e;return i(t)&&(e=t.constructor,"function"!=typeof e||e!==Array&&!i(e.prototype)||(e=void 0),r(e)&&(e=e[o],null===e&&(e=void 0))),void 0===e?Array:e}},"05fd":function(t,e,n){t.exports=n("baa7")("native-function-to-string",Function.toString)},"065d":function(t,e,n){var r=n("bb8b"),i=n("5edc");t.exports=n("26df")?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},"065e":function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},"0682":function(t,e,n){var r=n("e99b");r(r.S,"Reflect",{has:function(t,e){return e in t}})},"073d":function(t,e,n){var r=n("285b"),i=n("e99b"),o=n("a86f");i(i.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return r.f(o(t),e)}})},"078c":function(t,e,n){var r=n("0b34"),i=n("76e3"),o=n("3d8a"),a=n("1a58"),u=n("bb8b").f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:r.Symbol||{});"_"==t.charAt(0)||t in e||u(e,t,{value:a.f(t)})}},"07d4":function(t,e,n){var r=n("e99b");r(r.S,"Math",{imulh:function(t,e){var n=65535,r=+t,i=+e,o=r&n,a=i&n,u=r>>16,c=i>>16,s=(u*a>>>0)+(o*a>>>16);return u*c+(s>>16)+((o*c>>>0)+(s&n)>>16)}})},"085b":function(t,e,n){"use strict";var r=n("e99b"),i=n("52a4")(!1),o=[].indexOf,a=!!o&&1/[1].indexOf(1,-0)<0;r(r.P+r.F*(a||!n("95b6")(o)),"Array",{indexOf:function(t){return a?o.apply(this,arguments)||0:i(this,t,arguments[1])}})},"086c":function(t,e,n){n("106b")("Int16",2,(function(t){return function(e,n,r){return t(this,e,n,r)}}))},"0926":function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},"096c":function(t,e,n){var r=n("e99b"),i=n("d3ef")(!0);r(r.S,"Object",{entries:function(t){return i(t)}})},"0b28":function(t,e,n){var r=n("9cff");t.exports=function(t,e){if(!r(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},"0b34":function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},"0bca":function(t,e,n){"use strict";var r=n("0b34"),i=n("e99b"),o=n("84e8"),a=n("6f45"),u=n("49f2"),c=n("2b37"),s=n("8b5a"),f=n("9cff"),l=n("0926"),d=n("1a9a"),p=n("bac3"),h=n("a83a");t.exports=function(t,e,n,v,y,b){var m=r[t],g=m,_=y?"set":"add",w=g&&g.prototype,x={},S=function(t){var e=w[t];o(w,t,"delete"==t||"has"==t?function(t){return!(b&&!f(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return b&&!f(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof g&&(b||w.forEach&&!l((function(){(new g).entries().next()})))){var O=new g,A=O[_](b?{}:-0,1)!=O,E=l((function(){O.has(1)})),k=d((function(t){new g(t)})),C=!b&&l((function(){var t=new g,e=5;while(e--)t[_](e,e);return!t.has(-0)}));k||(g=e((function(e,n){s(e,g,t);var r=h(new m,e,g);return void 0!=n&&c(n,y,r[_],r),r})),g.prototype=w,w.constructor=g),(E||C)&&(S("delete"),S("has"),y&&S("get")),(C||A)&&S(_),b&&w.clear&&delete w.clear}else g=v.getConstructor(e,t,y,_),a(g.prototype,n),u.NEED=!0;return p(g,t),x[t]=g,i(i.G+i.W+i.F*(g!=m),x),b||v.setStrong(g,t,y),g}},"0c29":function(t,e){e.f=Object.getOwnPropertySymbols},"0c84":function(t,e,n){"use strict";var r=n("1663")(!0);n("120f")(String,"String",(function(t){this._t=String(t),this._i=0}),(function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})}))},"0cdc":function(t,e,n){var r=n("e99b");r(r.P,"Function",{bind:n("e2f7")})},"0d4c":function(t,e,n){var r=n("9cff");n("b2be")("isExtensible",(function(t){return function(e){return!!r(e)&&(!t||t(e))}}))},"0e01":function(t,e,n){"use strict";var r=n("e99b"),i=n("8078"),o=n("3250"),a=n("bb8b");n("26df")&&r(r.P+n("94cb"),"Object",{__defineGetter__:function(t,e){a.f(i(this),t,{get:o(e),enumerable:!0,configurable:!0})}})},"0ee5":function(t,e){t.exports=Math.scale||function(t,e,n,r,i){return 0===arguments.length||t!=t||e!=e||n!=n||r!=r||i!=i?NaN:t===1/0||t===-1/0?t:(t-e)*(i-r)/(n-e)+r}},"104a":function(t,e,n){var r=n("9cff"),i=n("49f2").onFreeze;n("b2be")("preventExtensions",(function(t){return function(e){return t&&r(e)?t(i(e)):e}}))},"106b":function(t,e,n){"use strict";if(n("26df")){var r=n("3d8a"),i=n("0b34"),o=n("0926"),a=n("e99b"),u=n("fa2c"),c=n("f9bc"),s=n("1e4d"),f=n("8b5a"),l=n("5edc"),d=n("065d"),p=n("6f45"),h=n("212e"),v=n("201c"),y=n("cb85"),b=n("732b"),m=n("5d10"),g=n("4fd4"),_=n("d445"),w=n("9cff"),x=n("8078"),S=n("dcea"),O=n("7ee3"),A=n("addc"),E=n("21d9").f,k=n("e3bb"),C=n("d8b3"),$=n("839a"),j=n("e9aa"),M=n("52a4"),R=n("1b0b"),P=n("25ba"),I=n("953d"),T=n("1a9a"),F=n("f966"),N=n("a740"),L=n("676a"),D=n("bb8b"),V=n("285b"),U=D.f,q=V.f,B=i.RangeError,z=i.TypeError,G=i.Uint8Array,W="ArrayBuffer",H="Shared"+W,K="BYTES_PER_ELEMENT",J="prototype",X=Array[J],Y=c.ArrayBuffer,Z=c.DataView,Q=j(0),tt=j(2),et=j(3),nt=j(4),rt=j(5),it=j(6),ot=M(!0),at=M(!1),ut=P.values,ct=P.keys,st=P.entries,ft=X.lastIndexOf,lt=X.reduce,dt=X.reduceRight,pt=X.join,ht=X.sort,vt=X.slice,yt=X.toString,bt=X.toLocaleString,mt=$("iterator"),gt=$("toStringTag"),_t=C("typed_constructor"),wt=C("def_constructor"),xt=u.CONSTR,St=u.TYPED,Ot=u.VIEW,At="Wrong length!",Et=j(1,(function(t,e){return Mt(R(t,t[wt]),e)})),kt=o((function(){return 1===new G(new Uint16Array([1]).buffer)[0]})),Ct=!!G&&!!G[J].set&&o((function(){new G(1).set({})})),$t=function(t,e){var n=h(t);if(n<0||n%e)throw B("Wrong offset!");return n},jt=function(t){if(w(t)&&St in t)return t;throw z(t+" is not a typed array!")},Mt=function(t,e){if(!w(t)||!(_t in t))throw z("It is not a typed array constructor!");return new t(e)},Rt=function(t,e){return Pt(R(t,t[wt]),e)},Pt=function(t,e){var n=0,r=e.length,i=Mt(t,r);while(r>n)i[n]=e[n++];return i},It=function(t,e,n){U(t,e,{get:function(){return this._d[n]}})},Tt=function(t){var e,n,r,i,o,a,u=x(t),c=arguments.length,f=c>1?arguments[1]:void 0,l=void 0!==f,d=k(u);if(void 0!=d&&!S(d)){for(a=d.call(u),r=[],e=0;!(o=a.next()).done;e++)r.push(o.value);u=r}for(l&&c>2&&(f=s(f,arguments[2],2)),e=0,n=v(u.length),i=Mt(this,n);n>e;e++)i[e]=l?f(u[e],e):u[e];return i},Ft=function(){var t=0,e=arguments.length,n=Mt(this,e);while(e>t)n[t]=arguments[t++];return n},Nt=!!G&&o((function(){bt.call(new G(1))})),Lt=function(){return bt.apply(Nt?vt.call(jt(this)):jt(this),arguments)},Dt={copyWithin:function(t,e){return L.call(jt(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return nt(jt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return N.apply(jt(this),arguments)},filter:function(t){return Rt(this,tt(jt(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return rt(jt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return it(jt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){Q(jt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return at(jt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return ot(jt(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return pt.apply(jt(this),arguments)},lastIndexOf:function(t){return ft.apply(jt(this),arguments)},map:function(t){return Et(jt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return lt.apply(jt(this),arguments)},reduceRight:function(t){return dt.apply(jt(this),arguments)},reverse:function(){var t,e=this,n=jt(e).length,r=Math.floor(n/2),i=0;while(i<r)t=e[i],e[i++]=e[--n],e[n]=t;return e},some:function(t){return et(jt(this),t,arguments.length>1?arguments[1]:void 0)},sort:function(t){return ht.call(jt(this),t)},subarray:function(t,e){var n=jt(this),r=n.length,i=b(t,r);return new(R(n,n[wt]))(n.buffer,n.byteOffset+i*n.BYTES_PER_ELEMENT,v((void 0===e?r:b(e,r))-i))}},Vt=function(t,e){return Rt(this,vt.call(jt(this),t,e))},Ut=function(t){jt(this);var e=$t(arguments[1],1),n=this.length,r=x(t),i=v(r.length),o=0;if(i+e>n)throw B(At);while(o<i)this[e+o]=r[o++]},qt={entries:function(){return st.call(jt(this))},keys:function(){return ct.call(jt(this))},values:function(){return ut.call(jt(this))}},Bt=function(t,e){return w(t)&&t[St]&&"symbol"!=typeof e&&e in t&&String(+e)==String(e)},zt=function(t,e){return Bt(t,e=m(e,!0))?l(2,t[e]):q(t,e)},Gt=function(t,e,n){return!(Bt(t,e=m(e,!0))&&w(n)&&g(n,"value"))||g(n,"get")||g(n,"set")||n.configurable||g(n,"writable")&&!n.writable||g(n,"enumerable")&&!n.enumerable?U(t,e,n):(t[e]=n.value,t)};xt||(V.f=zt,D.f=Gt),a(a.S+a.F*!xt,"Object",{getOwnPropertyDescriptor:zt,defineProperty:Gt}),o((function(){yt.call({})}))&&(yt=bt=function(){return pt.call(this)});var Wt=p({},Dt);p(Wt,qt),d(Wt,mt,qt.values),p(Wt,{slice:Vt,set:Ut,constructor:function(){},toString:yt,toLocaleString:Lt}),It(Wt,"buffer","b"),It(Wt,"byteOffset","o"),It(Wt,"byteLength","l"),It(Wt,"length","e"),U(Wt,gt,{get:function(){return this[St]}}),t.exports=function(t,e,n,c){c=!!c;var s=t+(c?"Clamped":"")+"Array",l="get"+t,p="set"+t,h=i[s],b=h||{},m=h&&A(h),g=!h||!u.ABV,x={},S=h&&h[J],k=function(t,n){var r=t._d;return r.v[l](n*e+r.o,kt)},C=function(t,n,r){var i=t._d;c&&(r=(r=Math.round(r))<0?0:r>255?255:255&r),i.v[p](n*e+i.o,r,kt)},$=function(t,e){U(t,e,{get:function(){return k(this,e)},set:function(t){return C(this,e,t)},enumerable:!0})};g?(h=n((function(t,n,r,i){f(t,h,s,"_d");var o,a,u,c,l=0,p=0;if(w(n)){if(!(n instanceof Y||(c=_(n))==W||c==H))return St in n?Pt(h,n):Tt.call(h,n);o=n,p=$t(r,e);var b=n.byteLength;if(void 0===i){if(b%e)throw B(At);if(a=b-p,a<0)throw B(At)}else if(a=v(i)*e,a+p>b)throw B(At);u=a/e}else u=y(n),a=u*e,o=new Y(a);d(t,"_d",{b:o,o:p,l:a,e:u,v:new Z(o)});while(l<u)$(t,l++)})),S=h[J]=O(Wt),d(S,"constructor",h)):o((function(){h(1)}))&&o((function(){new h(-1)}))&&T((function(t){new h,new h(null),new h(1.5),new h(t)}),!0)||(h=n((function(t,n,r,i){var o;return f(t,h,s),w(n)?n instanceof Y||(o=_(n))==W||o==H?void 0!==i?new b(n,$t(r,e),i):void 0!==r?new b(n,$t(r,e)):new b(n):St in n?Pt(h,n):Tt.call(h,n):new b(y(n))})),Q(m!==Function.prototype?E(b).concat(E(m)):E(b),(function(t){t in h||d(h,t,b[t])})),h[J]=S,r||(S.constructor=h));var j=S[mt],M=!!j&&("values"==j.name||void 0==j.name),R=qt.values;d(h,_t,!0),d(S,St,s),d(S,Ot,!0),d(S,wt,h),(c?new h(1)[gt]==s:gt in S)||U(S,gt,{get:function(){return s}}),x[s]=h,a(a.G+a.W+a.F*(h!=b),x),a(a.S,s,{BYTES_PER_ELEMENT:e}),a(a.S+a.F*o((function(){b.of.call(h,1)})),s,{from:Tt,of:Ft}),K in S||d(S,K,e),a(a.P,s,Dt),F(s),a(a.P+a.F*Ct,s,{set:Ut}),a(a.P+a.F*!M,s,qt),r||S.toString==yt||(S.toString=yt),a(a.P+a.F*o((function(){new h(1).slice()})),s,{slice:Vt}),a(a.P+a.F*(o((function(){return[1,2].toLocaleString()!=new h([1,2]).toLocaleString()}))||!o((function(){S.toLocaleString.call([1,2])}))),s,{toLocaleString:Lt}),I[s]=M?j:R,r||M||d(S,mt,R)}}else t.exports=function(){}},1084:function(t,e,n){var r=n("e99b");r(r.S+r.F*!n("26df"),"Object",{defineProperty:n("bb8b").f})},"118e":function(t,e,n){var r=n("e99b"),i=n("7ff8");r(r.S+r.F*(Number.parseInt!=i),"Number",{parseInt:i})},"120f":function(t,e,n){"use strict";var r=n("3d8a"),i=n("e99b"),o=n("84e8"),a=n("065d"),u=n("953d"),c=n("3460"),s=n("bac3"),f=n("addc"),l=n("839a")("iterator"),d=!([].keys&&"next"in[].keys()),p="@@iterator",h="keys",v="values",y=function(){return this};t.exports=function(t,e,n,b,m,g,_){c(n,e,b);var w,x,S,O=function(t){if(!d&&t in C)return C[t];switch(t){case h:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},A=e+" Iterator",E=m==v,k=!1,C=t.prototype,$=C[l]||C[p]||m&&C[m],j=$||O(m),M=m?E?O("entries"):j:void 0,R="Array"==e&&C.entries||$;if(R&&(S=f(R.call(new t)),S!==Object.prototype&&S.next&&(s(S,A,!0),r||"function"==typeof S[l]||a(S,l,y))),E&&$&&$.name!==v&&(k=!0,j=function(){return $.call(this)}),r&&!_||!d&&!k&&C[l]||a(C,l,j),u[e]=j,u[A]=y,m)if(w={values:E?j:O(v),keys:g?j:O(h),entries:M},_)for(x in w)x in C||o(C,x,w[x]);else i(i.P+i.F*(d||k),e,w);return w}},"131f":function(t,e,n){n("106b")("Float32",4,(function(t){return function(e,n,r){return t(this,e,n,r)}}))},1374:function(t,e,n){"use strict";var r=n("bb8b"),i=n("5edc");t.exports=function(t,e,n){e in t?r.f(t,e,i(0,n)):t[e]=n}},"14d1":function(t,e,n){"use strict";var r=n("e99b"),i=n("0926"),o=n("9a9d"),a=1..toPrecision;r(r.P+r.F*(i((function(){return"1"!==a.call(1,void 0)}))||!i((function(){a.call({})}))),"Number",{toPrecision:function(t){var e=o(this,"Number#toPrecision: incorrect invocation!");return void 0===t?a.call(e):a.call(e,t)}})},"159a":function(t,e,n){var r=n("e99b");r(r.S+r.F*!n("26df"),"Object",{defineProperties:n("3f9e")})},"15a6":function(t,e,n){"use strict";n("6b6f")("fontsize",(function(t){return function(e){return t(this,"font","size",e)}}))},1663:function(t,e,n){var r=n("212e"),i=n("3ab0");t.exports=function(t){return function(e,n){var o,a,u=String(i(e)),c=r(n),s=u.length;return c<0||c>=s?t?"":void 0:(o=u.charCodeAt(c),o<55296||o>56319||c+1===s||(a=u.charCodeAt(c+1))<56320||a>57343?t?u.charAt(c):o:t?u.slice(c,c+2):a-56320+(o-55296<<10)+65536)}}},"169f":function(t,e,n){n("d06b")("Set")},1820:function(t,e,n){var r=n("e99b"),i=n("bda0"),o=Math.abs;r(r.S,"Number",{isSafeInteger:function(t){return i(t)&&o(t)<=9007199254740991}})},1993:function(t,e,n){"use strict";var r=n("6f45"),i=n("49f2").getWeak,o=n("a86f"),a=n("9cff"),u=n("8b5a"),c=n("2b37"),s=n("e9aa"),f=n("4fd4"),l=n("0b28"),d=s(5),p=s(6),h=0,v=function(t){return t._l||(t._l=new y)},y=function(){this.a=[]},b=function(t,e){return d(t.a,(function(t){return t[0]===e}))};y.prototype={get:function(t){var e=b(this,t);if(e)return e[1]},has:function(t){return!!b(this,t)},set:function(t,e){var n=b(this,t);n?n[1]=e:this.a.push([t,e])},delete:function(t){var e=p(this.a,(function(e){return e[0]===t}));return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,n,o){var s=t((function(t,r){u(t,s,e,"_i"),t._t=e,t._i=h++,t._l=void 0,void 0!=r&&c(r,n,t[o],t)}));return r(s.prototype,{delete:function(t){if(!a(t))return!1;var n=i(t);return!0===n?v(l(this,e))["delete"](t):n&&f(n,this._i)&&delete n[this._i]},has:function(t){if(!a(t))return!1;var n=i(t);return!0===n?v(l(this,e)).has(t):n&&f(n,this._i)}}),s},def:function(t,e,n){var r=i(o(e),!0);return!0===r?v(t).set(e,n):r[t._i]=n,t},ufstore:v}},"1a58":function(t,e,n){e.f=n("839a")},"1a9a":function(t,e,n){var r=n("839a")("iterator"),i=!1;try{var o=[7][r]();o["return"]=function(){i=!0},Array.from(o,(function(){throw 2}))}catch(a){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var o=[7],u=o[r]();u.next=function(){return{done:n=!0}},o[r]=function(){return u},t(o)}catch(a){}return n}},"1b0b":function(t,e,n){var r=n("a86f"),i=n("3250"),o=n("839a")("species");t.exports=function(t,e){var n,a=r(t).constructor;return void 0===a||void 0==(n=r(a)[o])?e:i(n)}},"1b96":function(t,e,n){var r=n("cea2");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},"1bc7":function(t,e,n){for(var r=n("25ba"),i=n("93ca"),o=n("84e8"),a=n("0b34"),u=n("065d"),c=n("953d"),s=n("839a"),f=s("iterator"),l=s("toStringTag"),d=c.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},h=i(p),v=0;v<h.length;v++){var y,b=h[v],m=p[b],g=a[b],_=g&&g.prototype;if(_&&(_[f]||u(_,f,d),_[l]||u(_,l,b),c[b]=d,m))for(y in r)_[y]||o(_,y,r[y],!0)}},"1ceb":function(t,e,n){"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)
                                                  +/*!
                                                  +  * vue-router v3.5.4
                                                  +  * (c) 2022 Evan You
                                                  +  * @license MIT
                                                  +  */}function i(t,e){for(var n in e)t[n]=e[n];return t}var o=/[!'()*]/g,a=function(t){return"%"+t.charCodeAt(0).toString(16)},u=/%2C/g,c=function(t){return encodeURIComponent(t).replace(o,a).replace(u,",")};function s(t){try{return decodeURIComponent(t)}catch(e){0}return t}function f(t,e,n){void 0===e&&(e={});var r,i=n||d;try{r=i(t||"")}catch(u){r={}}for(var o in e){var a=e[o];r[o]=Array.isArray(a)?a.map(l):l(a)}return r}var l=function(t){return null==t||"object"===r(t)?t:String(t)};function d(t){var e={};return t=t.trim().replace(/^(\?|#|&)/,""),t?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),r=s(n.shift()),i=n.length>0?s(n.join("=")):null;void 0===e[r]?e[r]=i:Array.isArray(e[r])?e[r].push(i):e[r]=[e[r],i]})),e):e}function p(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return c(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(c(e)):r.push(c(e)+"="+c(t)))})),r.join("&")}return c(e)+"="+c(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var h=/\/?$/;function v(t,e,n,r){var i=r&&r.options.stringifyQuery,o=e.query||{};try{o=y(o)}catch(u){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:o,params:e.params||{},fullPath:g(e,i),matched:t?m(t):[]};return n&&(a.redirectedFrom=g(n,i)),Object.freeze(a)}function y(t){if(Array.isArray(t))return t.map(y);if(t&&"object"===r(t)){var e={};for(var n in t)e[n]=y(t[n]);return e}return t}var b=v(null,{path:"/"});function m(t){var e=[];while(t)e.unshift(t),t=t.parent;return e}function g(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var i=t.hash;void 0===i&&(i="");var o=e||p;return(n||"/")+o(r)+i}function _(t,e,n){return e===b?t===e:!!e&&(t.path&&e.path?t.path.replace(h,"")===e.path.replace(h,"")&&(n||t.hash===e.hash&&w(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&w(t.query,e.query)&&w(t.params,e.params))))}function w(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t).sort(),i=Object.keys(e).sort();return n.length===i.length&&n.every((function(n,o){var a=t[n],u=i[o];if(u!==n)return!1;var c=e[n];return null==a||null==c?a===c:"object"===r(a)&&"object"===r(c)?w(a,c):String(a)===String(c)}))}function x(t,e){return 0===t.path.replace(h,"/").indexOf(e.path.replace(h,"/"))&&(!e.hash||t.hash===e.hash)&&S(t.query,e.query)}function S(t,e){for(var n in e)if(!(n in t))return!1;return!0}function O(t){for(var e=0;e<t.matched.length;e++){var n=t.matched[e];for(var r in n.instances){var i=n.instances[r],o=n.enteredCbs[r];if(i&&o){delete n.enteredCbs[r];for(var a=0;a<o.length;a++)i._isBeingDestroyed||o[a](i)}}}}var A={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var n=e.props,r=e.children,o=e.parent,a=e.data;a.routerView=!0;var u=o.$createElement,c=n.name,s=o.$route,f=o._routerViewCache||(o._routerViewCache={}),l=0,d=!1;while(o&&o._routerRoot!==o){var p=o.$vnode?o.$vnode.data:{};p.routerView&&l++,p.keepAlive&&o._directInactive&&o._inactive&&(d=!0),o=o.$parent}if(a.routerViewDepth=l,d){var h=f[c],v=h&&h.component;return v?(h.configProps&&E(v,a,h.route,h.configProps),u(v,a,r)):u()}var y=s.matched[l],b=y&&y.components[c];if(!y||!b)return f[c]=null,u();f[c]={component:b},a.registerRouteInstance=function(t,e){var n=y.instances[c];(e&&n!==t||!e&&n===t)&&(y.instances[c]=e)},(a.hook||(a.hook={})).prepatch=function(t,e){y.instances[c]=e.componentInstance},a.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==y.instances[c]&&(y.instances[c]=t.componentInstance),O(s)};var m=y.props&&y.props[c];return m&&(i(f[c],{route:s,configProps:m}),E(b,a,s,m)),u(b,a,r)}};function E(t,e,n,r){var o=e.props=k(n,r);if(o){o=e.props=i({},o);var a=e.attrs=e.attrs||{};for(var u in o)t.props&&u in t.props||(a[u]=o[u],delete o[u])}}function k(t,e){switch(r(e)){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0;default:0}}function C(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;var i=e.split("/");n&&i[i.length-1]||i.pop();for(var o=t.replace(/^\//,"").split("/"),a=0;a<o.length;a++){var u=o[a];".."===u?i.pop():"."!==u&&i.push(u)}return""!==i[0]&&i.unshift(""),i.join("/")}function $(t){var e="",n="",r=t.indexOf("#");r>=0&&(e=t.slice(r),t=t.slice(0,r));var i=t.indexOf("?");return i>=0&&(n=t.slice(i+1),t=t.slice(0,i)),{path:t,query:n,hash:e}}function j(t){return t.replace(/\/(?:\s*\/)+/g,"/")}var M=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},R=Y,P=L,I=D,T=q,F=X,N=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function L(t,e){var n,r=[],i=0,o=0,a="",u=e&&e.delimiter||"/";while(null!=(n=N.exec(t))){var c=n[0],s=n[1],f=n.index;if(a+=t.slice(o,f),o=f+c.length,s)a+=s[1];else{var l=t[o],d=n[2],p=n[3],h=n[4],v=n[5],y=n[6],b=n[7];a&&(r.push(a),a="");var m=null!=d&&null!=l&&l!==d,g="+"===y||"*"===y,_="?"===y||"*"===y,w=n[2]||u,x=h||v;r.push({name:p||i++,prefix:d||"",delimiter:w,optional:_,repeat:g,partial:m,asterisk:!!b,pattern:x?z(x):b?".*":"[^"+B(w)+"]+?"})}}return o<t.length&&(a+=t.substr(o)),a&&r.push(a),r}function D(t,e){return q(L(t,e),e)}function V(t){return encodeURI(t).replace(/[\/?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}function U(t){return encodeURI(t).replace(/[?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}function q(t,e){for(var n=new Array(t.length),i=0;i<t.length;i++)"object"===r(t[i])&&(n[i]=new RegExp("^(?:"+t[i].pattern+")$",W(e)));return function(e,r){for(var i="",o=e||{},a=r||{},u=a.pretty?V:encodeURIComponent,c=0;c<t.length;c++){var s=t[c];if("string"!==typeof s){var f,l=o[s.name];if(null==l){if(s.optional){s.partial&&(i+=s.prefix);continue}throw new TypeError('Expected "'+s.name+'" to be defined')}if(M(l)){if(!s.repeat)throw new TypeError('Expected "'+s.name+'" to not repeat, but received `'+JSON.stringify(l)+"`");if(0===l.length){if(s.optional)continue;throw new TypeError('Expected "'+s.name+'" to not be empty')}for(var d=0;d<l.length;d++){if(f=u(l[d]),!n[c].test(f))throw new TypeError('Expected all "'+s.name+'" to match "'+s.pattern+'", but received `'+JSON.stringify(f)+"`");i+=(0===d?s.prefix:s.delimiter)+f}}else{if(f=s.asterisk?U(l):u(l),!n[c].test(f))throw new TypeError('Expected "'+s.name+'" to match "'+s.pattern+'", but received "'+f+'"');i+=s.prefix+f}}else i+=s}return i}}function B(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function z(t){return t.replace(/([=!:$\/()])/g,"\\$1")}function G(t,e){return t.keys=e,t}function W(t){return t&&t.sensitive?"":"i"}function H(t,e){var n=t.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)e.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return G(t,e)}function K(t,e,n){for(var r=[],i=0;i<t.length;i++)r.push(Y(t[i],e,n).source);var o=new RegExp("(?:"+r.join("|")+")",W(n));return G(o,e)}function J(t,e,n){return X(L(t,n),e,n)}function X(t,e,n){M(e)||(n=e||n,e=[]),n=n||{};for(var r=n.strict,i=!1!==n.end,o="",a=0;a<t.length;a++){var u=t[a];if("string"===typeof u)o+=B(u);else{var c=B(u.prefix),s="(?:"+u.pattern+")";e.push(u),u.repeat&&(s+="(?:"+c+s+")*"),s=u.optional?u.partial?c+"("+s+")?":"(?:"+c+"("+s+"))?":c+"("+s+")",o+=s}}var f=B(n.delimiter||"/"),l=o.slice(-f.length)===f;return r||(o=(l?o.slice(0,-f.length):o)+"(?:"+f+"(?=$))?"),o+=i?"$":r&&l?"":"(?="+f+"|$)",G(new RegExp("^"+o,W(n)),e)}function Y(t,e,n){return M(e)||(n=e||n,e=[]),n=n||{},t instanceof RegExp?H(t,e):M(t)?K(t,e,n):J(t,e,n)}R.parse=P,R.compile=I,R.tokensToFunction=T,R.tokensToRegExp=F;var Z=Object.create(null);function Q(t,e,n){e=e||{};try{var r=Z[t]||(Z[t]=R.compile(t));return"string"===typeof e.pathMatch&&(e[0]=e.pathMatch),r(e,{pretty:!0})}catch(i){return""}finally{delete e[0]}}function tt(t,e,n,o){var a="string"===typeof t?{path:t}:t;if(a._normalized)return a;if(a.name){a=i({},t);var u=a.params;return u&&"object"===r(u)&&(a.params=i({},u)),a}if(!a.path&&a.params&&e){a=i({},a),a._normalized=!0;var c=i(i({},e.params),a.params);if(e.name)a.name=e.name,a.params=c;else if(e.matched.length){var s=e.matched[e.matched.length-1].path;a.path=Q(s,c,"path "+e.path)}else 0;return a}var l=$(a.path||""),d=e&&e.path||"/",p=l.path?C(l.path,d,n||a.append):d,h=f(l.query,a.query,o&&o.options.parseQuery),v=a.hash||l.hash;return v&&"#"!==v.charAt(0)&&(v="#"+v),{_normalized:!0,path:p,query:h,hash:v}}var et,nt=[String,Object],rt=[String,Array],it=function(){},ot={name:"RouterLink",props:{to:{type:nt,required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:rt,default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),a=o.location,u=o.route,c=o.href,s={},f=n.options.linkActiveClass,l=n.options.linkExactActiveClass,d=null==f?"router-link-active":f,p=null==l?"router-link-exact-active":l,h=null==this.activeClass?d:this.activeClass,y=null==this.exactActiveClass?p:this.exactActiveClass,b=u.redirectedFrom?v(null,tt(u.redirectedFrom),null,n):u;s[y]=_(r,b,this.exactPath),s[h]=this.exact||this.exactPath?s[y]:x(r,b);var m=s[y]?this.ariaCurrentValue:null,g=function(t){at(t)&&(e.replace?n.replace(a,it):n.push(a,it))},w={click:at};Array.isArray(this.event)?this.event.forEach((function(t){w[t]=g})):w[this.event]=g;var S={class:s},O=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:c,route:u,navigate:g,isActive:s[h],isExactActive:s[y]});if(O){if(1===O.length)return O[0];if(O.length>1||!O.length)return 0===O.length?t():t("span",{},O)}if("a"===this.tag)S.on=w,S.attrs={href:c,"aria-current":m};else{var A=ut(this.$slots.default);if(A){A.isStatic=!1;var E=A.data=i({},A.data);for(var k in E.on=E.on||{},E.on){var C=E.on[k];k in w&&(E.on[k]=Array.isArray(C)?C:[C])}for(var $ in w)$ in E.on?E.on[$].push(w[$]):E.on[$]=g;var j=A.data.attrs=i({},A.data.attrs);j.href=c,j["aria-current"]=m}else S.on=w}return t(this.tag,S,this.$slots.default)}};function at(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)&&!t.defaultPrevented&&(void 0===t.button||0===t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}function ut(t){if(t)for(var e,n=0;n<t.length;n++){if(e=t[n],"a"===e.tag)return e;if(e.children&&(e=ut(e.children)))return e}}function ct(t){if(!ct.installed||et!==t){ct.installed=!0,et=t;var e=function(t){return void 0!==t},n=function(t,n){var r=t.$options._parentVnode;e(r)&&e(r=r.data)&&e(r=r.registerRouteInstance)&&r(t,n)};t.mixin({beforeCreate:function(){e(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),t.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,n(this,this)},destroyed:function(){n(this)}}),Object.defineProperty(t.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(t.prototype,"$route",{get:function(){return this._routerRoot._route}}),t.component("RouterView",A),t.component("RouterLink",ot);var r=t.config.optionMergeStrategies;r.beforeRouteEnter=r.beforeRouteLeave=r.beforeRouteUpdate=r.created}}var st="undefined"!==typeof window;function ft(t,e,n,r,i){var o=e||[],a=n||Object.create(null),u=r||Object.create(null);t.forEach((function(t){lt(o,a,u,t,i)}));for(var c=0,s=o.length;c<s;c++)"*"===o[c]&&(o.push(o.splice(c,1)[0]),s--,c--);return{pathList:o,pathMap:a,nameMap:u}}function lt(t,e,n,r,i,o){var a=r.path,u=r.name;var c=r.pathToRegexpOptions||{},s=pt(a,i,c.strict);"boolean"===typeof r.caseSensitive&&(c.sensitive=r.caseSensitive);var f={path:s,regex:dt(s,c),components:r.components||{default:r.component},alias:r.alias?"string"===typeof r.alias?[r.alias]:r.alias:[],instances:{},enteredCbs:{},name:u,parent:i,matchAs:o,redirect:r.redirect,beforeEnter:r.beforeEnter,meta:r.meta||{},props:null==r.props?{}:r.components?r.props:{default:r.props}};if(r.children&&r.children.forEach((function(r){var i=o?j(o+"/"+r.path):void 0;lt(t,e,n,r,f,i)})),e[f.path]||(t.push(f.path),e[f.path]=f),void 0!==r.alias)for(var l=Array.isArray(r.alias)?r.alias:[r.alias],d=0;d<l.length;++d){var p=l[d];0;var h={path:p,children:r.children};lt(t,e,n,h,i,f.path||"/")}u&&(n[u]||(n[u]=f))}function dt(t,e){var n=R(t,[],e);return n}function pt(t,e,n){return n||(t=t.replace(/\/$/,"")),"/"===t[0]||null==e?t:j(e.path+"/"+t)}function ht(t,e){var n=ft(t),i=n.pathList,o=n.pathMap,a=n.nameMap;function u(t){ft(t,i,o,a)}function c(t,e){var n="object"!==r(t)?a[t]:void 0;ft([e||t],i,o,a,n),n&&n.alias.length&&ft(n.alias.map((function(t){return{path:t,children:[e]}})),i,o,a,n)}function s(){return i.map((function(t){return o[t]}))}function f(t,n,u){var c=tt(t,n,!1,e),s=c.name;if(s){var f=a[s];if(!f)return p(null,c);var l=f.regex.keys.filter((function(t){return!t.optional})).map((function(t){return t.name}));if("object"!==r(c.params)&&(c.params={}),n&&"object"===r(n.params))for(var d in n.params)!(d in c.params)&&l.indexOf(d)>-1&&(c.params[d]=n.params[d]);return c.path=Q(f.path,c.params,'named route "'+s+'"'),p(f,c,u)}if(c.path){c.params={};for(var h=0;h<i.length;h++){var v=i[h],y=o[v];if(vt(y.regex,c.path,c.params))return p(y,c,u)}}return p(null,c)}function l(t,n){var i=t.redirect,o="function"===typeof i?i(v(t,n,null,e)):i;if("string"===typeof o&&(o={path:o}),!o||"object"!==r(o))return p(null,n);var u=o,c=u.name,s=u.path,l=n.query,d=n.hash,h=n.params;if(l=u.hasOwnProperty("query")?u.query:l,d=u.hasOwnProperty("hash")?u.hash:d,h=u.hasOwnProperty("params")?u.params:h,c){a[c];return f({_normalized:!0,name:c,query:l,hash:d,params:h},void 0,n)}if(s){var y=yt(s,t),b=Q(y,h,'redirect route with path "'+y+'"');return f({_normalized:!0,path:b,query:l,hash:d},void 0,n)}return p(null,n)}function d(t,e,n){var r=Q(n,e.params,'aliased route with path "'+n+'"'),i=f({_normalized:!0,path:r});if(i){var o=i.matched,a=o[o.length-1];return e.params=i.params,p(a,e)}return p(null,e)}function p(t,n,r){return t&&t.redirect?l(t,r||n):t&&t.matchAs?d(t,n,t.matchAs):v(t,n,r,e)}return{match:f,addRoute:c,getRoutes:s,addRoutes:u}}function vt(t,e,n){var r=e.match(t);if(!r)return!1;if(!n)return!0;for(var i=1,o=r.length;i<o;++i){var a=t.keys[i-1];a&&(n[a.name||"pathMatch"]="string"===typeof r[i]?s(r[i]):r[i])}return!0}function yt(t,e){return C(t,e.parent?e.parent.path:"/",!0)}var bt=st&&window.performance&&window.performance.now?window.performance:Date;function mt(){return bt.now().toFixed(3)}var gt=mt();function _t(){return gt}function wt(t){return gt=t}var xt=Object.create(null);function St(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual");var t=window.location.protocol+"//"+window.location.host,e=window.location.href.replace(t,""),n=i({},window.history.state);return n.key=_t(),window.history.replaceState(n,"",e),window.addEventListener("popstate",Et),function(){window.removeEventListener("popstate",Et)}}function Ot(t,e,n,r){if(t.app){var i=t.options.scrollBehavior;i&&t.app.$nextTick((function(){var o=kt(),a=i.call(t,e,n,r?o:null);a&&("function"===typeof a.then?a.then((function(t){It(t,o)})).catch((function(t){0})):It(a,o))}))}}function At(){var t=_t();t&&(xt[t]={x:window.pageXOffset,y:window.pageYOffset})}function Et(t){At(),t.state&&t.state.key&&wt(t.state.key)}function kt(){var t=_t();if(t)return xt[t]}function Ct(t,e){var n=document.documentElement,r=n.getBoundingClientRect(),i=t.getBoundingClientRect();return{x:i.left-r.left-e.x,y:i.top-r.top-e.y}}function $t(t){return Rt(t.x)||Rt(t.y)}function jt(t){return{x:Rt(t.x)?t.x:window.pageXOffset,y:Rt(t.y)?t.y:window.pageYOffset}}function Mt(t){return{x:Rt(t.x)?t.x:0,y:Rt(t.y)?t.y:0}}function Rt(t){return"number"===typeof t}var Pt=/^#\d/;function It(t,e){var n="object"===r(t);if(n&&"string"===typeof t.selector){var i=Pt.test(t.selector)?document.getElementById(t.selector.slice(1)):document.querySelector(t.selector);if(i){var o=t.offset&&"object"===r(t.offset)?t.offset:{};o=Mt(o),e=Ct(i,o)}else $t(t)&&(e=jt(t))}else n&&$t(t)&&(e=jt(t));e&&("scrollBehavior"in document.documentElement.style?window.scrollTo({left:e.x,top:e.y,behavior:t.behavior}):window.scrollTo(e.x,e.y))}var Tt=st&&function(){var t=window.navigator.userAgent;return(-1===t.indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&(window.history&&"function"===typeof window.history.pushState)}();function Ft(t,e){At();var n=window.history;try{if(e){var r=i({},n.state);r.key=_t(),n.replaceState(r,"",t)}else n.pushState({key:wt(mt())},"",t)}catch(o){window.location[e?"replace":"assign"](t)}}function Nt(t){Ft(t,!0)}function Lt(t,e,n){var r=function r(i){i>=t.length?n():t[i]?e(t[i],(function(){r(i+1)})):r(i+1)};r(0)}var Dt={redirected:2,aborted:4,cancelled:8,duplicated:16};function Vt(t,e){return zt(t,e,Dt.redirected,'Redirected when going from "'+t.fullPath+'" to "'+Wt(e)+'" via a navigation guard.')}function Ut(t,e){var n=zt(t,e,Dt.duplicated,'Avoided redundant navigation to current location: "'+t.fullPath+'".');return n.name="NavigationDuplicated",n}function qt(t,e){return zt(t,e,Dt.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function Bt(t,e){return zt(t,e,Dt.aborted,'Navigation aborted from "'+t.fullPath+'" to "'+e.fullPath+'" via a navigation guard.')}function zt(t,e,n,r){var i=new Error(r);return i._isRouter=!0,i.from=t,i.to=e,i.type=n,i}var Gt=["params","query","hash"];function Wt(t){if("string"===typeof t)return t;if("path"in t)return t.path;var e={};return Gt.forEach((function(n){n in t&&(e[n]=t[n])})),JSON.stringify(e,null,2)}function Ht(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function Kt(t,e){return Ht(t)&&t._isRouter&&(null==e||t.type===e)}function Jt(t){return function(e,n,r){var i=!1,o=0,a=null;Xt(t,(function(t,e,n,u){if("function"===typeof t&&void 0===t.cid){i=!0,o++;var c,s=te((function(e){Qt(e)&&(e=e.default),t.resolved="function"===typeof e?e:et.extend(e),n.components[u]=e,o--,o<=0&&r()})),f=te((function(t){var e="Failed to resolve async component "+u+": "+t;a||(a=Ht(t)?t:new Error(e),r(a))}));try{c=t(s,f)}catch(d){f(d)}if(c)if("function"===typeof c.then)c.then(s,f);else{var l=c.component;l&&"function"===typeof l.then&&l.then(s,f)}}})),i||r()}}function Xt(t,e){return Yt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Yt(t){return Array.prototype.concat.apply([],t)}var Zt="function"===typeof Symbol&&"symbol"===r(Symbol.toStringTag);function Qt(t){return t.__esModule||Zt&&"Module"===t[Symbol.toStringTag]}function te(t){var e=!1;return function(){var n=[],r=arguments.length;while(r--)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var ee=function(t,e){this.router=t,this.base=ne(e),this.current=b,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function ne(t){if(!t)if(st){var e=document.querySelector("base");t=e&&e.getAttribute("href")||"/",t=t.replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}function re(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n<r;n++)if(t[n]!==e[n])break;return{updated:e.slice(0,n),activated:e.slice(n),deactivated:t.slice(n)}}function ie(t,e,n,r){var i=Xt(t,(function(t,r,i,o){var a=oe(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,i,o)})):n(a,r,i,o)}));return Yt(r?i.reverse():i)}function oe(t,e){return"function"!==typeof t&&(t=et.extend(t)),t.options[e]}function ae(t){return ie(t,"beforeRouteLeave",ce,!0)}function ue(t){return ie(t,"beforeRouteUpdate",ce)}function ce(t,e){if(e)return function(){return t.apply(e,arguments)}}function se(t){return ie(t,"beforeRouteEnter",(function(t,e,n,r){return fe(t,n,r)}))}function fe(t,e,n){return function(r,i,o){return t(r,i,(function(t){"function"===typeof t&&(e.enteredCbs[n]||(e.enteredCbs[n]=[]),e.enteredCbs[n].push(t)),o(t)}))}}ee.prototype.listen=function(t){this.cb=t},ee.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},ee.prototype.onError=function(t){this.errorCbs.push(t)},ee.prototype.transitionTo=function(t,e,n){var r,i=this;try{r=this.router.match(t,this.current)}catch(a){throw this.errorCbs.forEach((function(t){t(a)})),a}var o=this.current;this.confirmTransition(r,(function(){i.updateRoute(r),e&&e(r),i.ensureURL(),i.router.afterHooks.forEach((function(t){t&&t(r,o)})),i.ready||(i.ready=!0,i.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!i.ready&&(Kt(t,Dt.redirected)&&o===b||(i.ready=!0,i.readyErrorCbs.forEach((function(e){e(t)}))))}))},ee.prototype.confirmTransition=function(t,e,n){var i=this,o=this.current;this.pending=t;var a=function(t){!Kt(t)&&Ht(t)&&(i.errorCbs.length?i.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},u=t.matched.length-1,c=o.matched.length-1;if(_(t,o)&&u===c&&t.matched[u]===o.matched[c])return this.ensureURL(),t.hash&&Ot(this.router,o,t,!1),a(Ut(o,t));var s=re(this.current.matched,t.matched),f=s.updated,l=s.deactivated,d=s.activated,p=[].concat(ae(l),this.router.beforeHooks,ue(f),d.map((function(t){return t.beforeEnter})),Jt(d)),h=function(e,n){if(i.pending!==t)return a(qt(o,t));try{e(t,o,(function(e){!1===e?(i.ensureURL(!0),a(Bt(o,t))):Ht(e)?(i.ensureURL(!0),a(e)):"string"===typeof e||"object"===r(e)&&("string"===typeof e.path||"string"===typeof e.name)?(a(Vt(o,t)),"object"===r(e)&&e.replace?i.replace(e):i.push(e)):n(e)}))}catch(u){a(u)}};Lt(p,h,(function(){var n=se(d),r=n.concat(i.router.resolveHooks);Lt(r,h,(function(){if(i.pending!==t)return a(qt(o,t));i.pending=null,e(t),i.router.app&&i.router.app.$nextTick((function(){O(t)}))}))}))},ee.prototype.updateRoute=function(t){this.current=t,this.cb&&this.cb(t)},ee.prototype.setupListeners=function(){},ee.prototype.teardown=function(){this.listeners.forEach((function(t){t()})),this.listeners=[],this.current=b,this.pending=null};var le=function(t){function e(e,n){t.call(this,e,n),this._startLocation=de(this.base)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router,n=e.options.scrollBehavior,r=Tt&&n;r&&this.listeners.push(St());var i=function(){var n=t.current,i=de(t.base);t.current===b&&i===t._startLocation||t.transitionTo(i,(function(t){r&&Ot(e,t,n,!0)}))};window.addEventListener("popstate",i),this.listeners.push((function(){window.removeEventListener("popstate",i)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,i=this,o=i.current;this.transitionTo(t,(function(t){Ft(j(r.base+t.fullPath)),Ot(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,i=this,o=i.current;this.transitionTo(t,(function(t){Nt(j(r.base+t.fullPath)),Ot(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(de(this.base)!==this.current.fullPath){var e=j(this.base+this.current.fullPath);t?Ft(e):Nt(e)}},e.prototype.getCurrentLocation=function(){return de(this.base)},e}(ee);function de(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(j(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var pe=function(t){function e(e,n,r){t.call(this,e,n),r&&he(this.base)||ve()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router,n=e.options.scrollBehavior,r=Tt&&n;r&&this.listeners.push(St());var i=function(){var e=t.current;ve()&&t.transitionTo(ye(),(function(n){r&&Ot(t.router,n,e,!0),Tt||ge(n.fullPath)}))},o=Tt?"popstate":"hashchange";window.addEventListener(o,i),this.listeners.push((function(){window.removeEventListener(o,i)}))}},e.prototype.push=function(t,e,n){var r=this,i=this,o=i.current;this.transitionTo(t,(function(t){me(t.fullPath),Ot(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,i=this,o=i.current;this.transitionTo(t,(function(t){ge(t.fullPath),Ot(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;ye()!==e&&(t?me(e):ge(e))},e.prototype.getCurrentLocation=function(){return ye()},e}(ee);function he(t){var e=de(t);if(!/^\/#/.test(e))return window.location.replace(j(t+"/#"+e)),!0}function ve(){var t=ye();return"/"===t.charAt(0)||(ge("/"+t),!1)}function ye(){var t=window.location.href,e=t.indexOf("#");return e<0?"":(t=t.slice(e+1),t)}function be(t){var e=window.location.href,n=e.indexOf("#"),r=n>=0?e.slice(0,n):e;return r+"#"+t}function me(t){Tt?Ft(be(t)):window.location.hash=t}function ge(t){Tt?Nt(be(t)):window.location.replace(be(t))}var _e=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){Kt(t,Dt.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(ee),we=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=ht(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!Tt&&!1!==t.fallback,this.fallback&&(e="hash"),st||(e="abstract"),this.mode=e,e){case"history":this.history=new le(this,t.base);break;case"hash":this.history=new pe(this,t.base,this.fallback);break;case"abstract":this.history=new _e(this,t.base);break;default:0}},xe={currentRoute:{configurable:!0}};function Se(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function Oe(t,e,n){var r="hash"===n?"#"+e:e;return t?j(t+"/"+r):r}we.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},xe.currentRoute.get=function(){return this.history&&this.history.current},we.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof le||n instanceof pe){var r=function(t){var r=n.current,i=e.options.scrollBehavior,o=Tt&&i;o&&"fullPath"in t&&Ot(e,t,r,!1)},i=function(t){n.setupListeners(),r(t)};n.transitionTo(n.getCurrentLocation(),i,i)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},we.prototype.beforeEach=function(t){return Se(this.beforeHooks,t)},we.prototype.beforeResolve=function(t){return Se(this.resolveHooks,t)},we.prototype.afterEach=function(t){return Se(this.afterHooks,t)},we.prototype.onReady=function(t,e){this.history.onReady(t,e)},we.prototype.onError=function(t){this.history.onError(t)},we.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!==typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},we.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!==typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},we.prototype.go=function(t){this.history.go(t)},we.prototype.back=function(){this.go(-1)},we.prototype.forward=function(){this.go(1)},we.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},we.prototype.resolve=function(t,e,n){e=e||this.history.current;var r=tt(t,e,n,this),i=this.match(r,e),o=i.redirectedFrom||i.fullPath,a=this.history.base,u=Oe(a,o,this.mode);return{location:r,route:i,href:u,normalizedTo:r,resolved:i}},we.prototype.getRoutes=function(){return this.matcher.getRoutes()},we.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==b&&this.history.transitionTo(this.history.getCurrentLocation())},we.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==b&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(we.prototype,xe),we.install=ct,we.version="3.5.4",we.isNavigationFailure=Kt,we.NavigationFailureType=Dt,we.START_LOCATION=b,st&&window.Vue&&window.Vue.use(we),e["a"]=we},"1e4d":function(t,e,n){var r=n("3250");t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},"1e5b":function(t,e,n){n("078c")("observable")},"1ec4":function(t,e,n){var r=n("e99b"),i=n("cea2");r(r.S,"Error",{isError:function(t){return"Error"===i(t)}})},"201c":function(t,e,n){var r=n("212e"),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},"212e":function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},"21d9":function(t,e,n){var r=n("3a4c"),i=n("065e").concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},2392:function(t,e,n){var r=n("201c"),i=n("4226"),o=n("3ab0");t.exports=function(t,e,n,a){var u=String(o(t)),c=u.length,s=void 0===n?" ":String(n),f=r(e);if(f<=c||""==s)return u;var l=f-c,d=i.call(s,Math.ceil(l/s.length));return d.length>l&&(d=d.slice(0,l)),a?d+u:u+d}},2409:function(t,e){function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(i){"object"===("undefined"===typeof window?"undefined":n(window))&&(r=window)}t.exports=r},"246f":function(t,e,n){"use strict";var r=n("e99b"),i=n("e9aa")(0),o=n("95b6")([].forEach,!0);r(r.P+r.F*!o,"Array",{forEach:function(t){return i(this,t,arguments[1])}})},"25ba":function(t,e,n){"use strict";var r=n("87b2"),i=n("6fef"),o=n("953d"),a=n("3471");t.exports=n("120f")(Array,"Array",(function(t,e){this._t=a(t),this._i=0,this._k=e}),(function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])}),"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},"263d":function(t,e,n){var r=n("9cff"),i=n("49f2").onFreeze;n("b2be")("freeze",(function(t){return function(e){return t&&r(e)?t(i(e)):e}}))},"26df":function(t,e,n){t.exports=!n("0926")((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},2843:function(t,e,n){"use strict";var r=n("1e4d"),i=n("e99b"),o=n("8078"),a=n("b1d4"),u=n("dcea"),c=n("201c"),s=n("1374"),f=n("e3bb");i(i.S+i.F*!n("1a9a")((function(t){Array.from(t)})),"Array",{from:function(t){var e,n,i,l,d=o(t),p="function"==typeof this?this:Array,h=arguments.length,v=h>1?arguments[1]:void 0,y=void 0!==v,b=0,m=f(d);if(y&&(v=r(v,h>2?arguments[2]:void 0,2)),void 0==m||p==Array&&u(m))for(e=c(d.length),n=new p(e);e>b;b++)s(n,b,y?v(d[b],b):d[b]);else for(l=m.call(d),n=new p;!(i=l.next()).done;b++)s(n,b,y?a(l,v,[i.value,b],!0):i.value);return n.length=b,n}})},"285b":function(t,e,n){var r=n("35d4"),i=n("5edc"),o=n("3471"),a=n("5d10"),u=n("4fd4"),c=n("83d3"),s=Object.getOwnPropertyDescriptor;e.f=n("26df")?s:function(t,e){if(t=o(t),e=a(e,!0),c)try{return s(t,e)}catch(n){}if(u(t,e))return i(!r.f.call(t,e),t[e])}},"29a9":function(t,e,n){var r=n("e99b");r(r.S,"Reflect",{ownKeys:n("e7c8")})},"2b37":function(t,e,n){var r=n("1e4d"),i=n("b1d4"),o=n("dcea"),a=n("a86f"),u=n("201c"),c=n("e3bb"),s={},f={};e=t.exports=function(t,e,n,l,d){var p,h,v,y,b=d?function(){return t}:c(t),m=r(n,l,e?2:1),g=0;if("function"!=typeof b)throw TypeError(t+" is not iterable!");if(o(b)){for(p=u(t.length);p>g;g++)if(y=e?m(a(h=t[g])[0],h[1]):m(t[g]),y===s||y===f)return y}else for(v=b.call(t);!(h=v.next()).done;)if(y=i(v,m,h.value,e),y===s||y===f)return y};e.BREAK=s,e.RETURN=f},"2d34":function(t,e,n){var r=n("e99b"),i=n("3471"),o=n("201c");r(r.S,"String",{raw:function(t){var e=i(t.raw),n=o(e.length),r=arguments.length,a=[],u=0;while(n>u)a.push(String(e[u++])),u<r&&a.push(String(arguments[u]));return a.join("")}})},"2d39":function(t,e,n){var r=n("0b34"),i=n("edec").set,o=r.MutationObserver||r.WebKitMutationObserver,a=r.process,u=r.Promise,c="process"==n("cea2")(a);t.exports=function(){var t,e,n,s=function(){var r,i;c&&(r=a.domain)&&r.exit();while(t){i=t.fn,t=t.next;try{i()}catch(o){throw t?n():e=void 0,o}}e=void 0,r&&r.enter()};if(c)n=function(){a.nextTick(s)};else if(!o||r.navigator&&r.navigator.standalone)if(u&&u.resolve){var f=u.resolve(void 0);n=function(){f.then(s)}}else n=function(){i.call(r,s)};else{var l=!0,d=document.createTextNode("");new o(s).observe(d,{characterData:!0}),n=function(){d.data=l=!l}}return function(r){var i={fn:r,next:void 0};e&&(e.next=i),t||(t=i,n()),e=i}}},3250:function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},3269:function(t,e,n){var r=n("0b34"),i=n("a83a"),o=n("bb8b").f,a=n("21d9").f,u=n("804d"),c=n("6bf8"),s=r.RegExp,f=s,l=s.prototype,d=/a/g,p=/a/g,h=new s(d)!==d;if(n("26df")&&(!h||n("0926")((function(){return p[n("839a")("match")]=!1,s(d)!=d||s(p)==p||"/a/i"!=s(d,"i")})))){s=function(t,e){var n=this instanceof s,r=u(t),o=void 0===e;return!n&&r&&t.constructor===s&&o?t:i(h?new f(r&&!o?t.source:t,e):f((r=t instanceof s)?t.source:t,r&&o?c.call(t):e),n?this:l,s)};for(var v=function(t){t in s||o(s,t,{configurable:!0,get:function(){return f[t]},set:function(e){f[t]=e}})},y=a(f),b=0;y.length>b;)v(y[b++]);l.constructor=s,s.prototype=l,n("84e8")(r,"RegExp",s)}n("f966")("RegExp")},"32ea":function(t,e,n){var r=n("8078"),i=n("93ca");n("b2be")("keys",(function(){return function(t){return i(r(t))}}))},3441:function(t,e,n){"use strict";var r=n("e99b"),i=n("3250"),o=n("8078"),a=n("0926"),u=[].sort,c=[1,2,3];r(r.P+r.F*(a((function(){c.sort(void 0)}))||!a((function(){c.sort(null)}))||!n("95b6")(u)),"Array",{sort:function(t){return void 0===t?u.call(o(this)):u.call(o(this),i(t))}})},3451:function(t,e,n){var r=n("e99b");r(r.S,"Number",{isNaN:function(t){return t!=t}})},3460:function(t,e,n){"use strict";var r=n("7ee3"),i=n("5edc"),o=n("bac3"),a={};n("065d")(a,n("839a")("iterator"),(function(){return this})),t.exports=function(t,e,n){t.prototype=r(a,{next:i(1,n)}),o(t,e+" Iterator")}},3471:function(t,e,n){var r=n("1b96"),i=n("3ab0");t.exports=function(t){return r(i(t))}},"34c2":function(t,e,n){"use strict";var r=n("a86f"),i=n("5d10"),o="number";t.exports=function(t){if("string"!==t&&t!==o&&"default"!==t)throw TypeError("Incorrect hint");return i(r(this),t!=o)}},"35d4":function(t,e){e.f={}.propertyIsEnumerable},"394a":function(t,e,n){var r=n("e99b");r(r.P+r.R,"Set",{toJSON:n("bd15")("Set")})},"3a0d":function(t,e,n){var r=n("baa7")("keys"),i=n("d8b3");t.exports=function(t){return r[t]||(r[t]=i(t))}},"3a4c":function(t,e,n){var r=n("4fd4"),i=n("3471"),o=n("52a4")(!1),a=n("3a0d")("IE_PROTO");t.exports=function(t,e){var n,u=i(t),c=0,s=[];for(n in u)n!=a&&r(u,n)&&s.push(n);while(e.length>c)r(u,n=e[c++])&&(~o(s,n)||s.push(n));return s}},"3ab0":function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on  "+t);return t}},"3b75":function(t,e,n){"use strict";n("6b6f")("strike",(function(t){return function(){return t(this,"strike","","")}}))},"3c56":function(t,e,n){var r=n("93ca"),i=n("0c29"),o=n("35d4");t.exports=function(t){var e=r(t),n=i.f;if(n){var a,u=n(t),c=o.f,s=0;while(u.length>s)c.call(t,a=u[s++])&&e.push(a)}return e}},"3c5f":function(t,e,n){var r=n("e99b");r(r.P+r.R,"Map",{toJSON:n("bd15")("Map")})},"3d8a":function(t,e){t.exports=!1},"3dd1":function(t,e,n){var r=n("e99b");r(r.S,"Math",{iaddh:function(t,e,n,r){var i=t>>>0,o=e>>>0,a=n>>>0;return o+(r>>>0)+((i&a|(i|a)&~(i+a>>>0))>>>31)|0}})},"3e38":function(t,e,n){"use strict";var r=n("98de"),i=n("0b28"),o="Map";t.exports=n("0bca")(o,(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{get:function(t){var e=r.getEntry(i(this,o),t);return e&&e.v},set:function(t,e){return r.def(i(this,o),0===t?0:t,e)}},r,!0)},"3e49":function(t,e,n){var r=n("e99b");r(r.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},"3f5b":function(t,e,n){var r=Date.prototype,i="Invalid Date",o="toString",a=r[o],u=r.getTime;new Date(NaN)+""!=i&&n("84e8")(r,o,(function(){var t=u.call(this);return t===t?a.call(this):i}))},"3f86":function(t,e,n){var r=n("e99b");r(r.S,"Object",{setPrototypeOf:n("e0ff").set})},"3f9e":function(t,e,n){var r=n("bb8b"),i=n("a86f"),o=n("93ca");t.exports=n("26df")?Object.defineProperties:function(t,e){i(t);var n,a=o(e),u=a.length,c=0;while(u>c)r.f(t,n=a[c++],e[n]);return t}},"3fa7":function(t,e,n){var r=n("3250"),i=n("8078"),o=n("1b96"),a=n("201c");t.exports=function(t,e,n,u,c){r(e);var s=i(t),f=o(s),l=a(s.length),d=c?l-1:0,p=c?-1:1;if(n<2)for(;;){if(d in f){u=f[d],d+=p;break}if(d+=p,c?d<0:l<=d)throw TypeError("Reduce of empty array with no initial value")}for(;c?d>=0:l>d;d+=p)d in f&&(u=e(u,f[d],d,s));return u}},4024:function(t,e){var n=Math.expm1;t.exports=!n||n(10)>22025.465794806718||n(10)<22025.465794806718||-2e-17!=n(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:n},4057:function(t,e,n){"use strict";n("de49");var r=n("a86f"),i=n("6bf8"),o=n("26df"),a="toString",u=/./[a],c=function(t){n("84e8")(RegExp.prototype,a,t,!0)};n("0926")((function(){return"/a/b"!=u.call({source:"a",flags:"b"})}))?c((function(){var t=r(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)})):u.name!=a&&c((function(){return u.call(this)}))},"41c8":function(t,e,n){var r=n("e99b"),i=180/Math.PI;r(r.S,"Math",{degrees:function(t){return t*i}})},4226:function(t,e,n){"use strict";var r=n("212e"),i=n("3ab0");t.exports=function(t){var e=String(i(this)),n="",o=r(t);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(e+=e))1&o&&(n+=e);return n}},"424f":function(t,e,n){var r=n("e99b");r(r.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},"430a":function(t,e,n){"use strict";n.r(e),function(t){function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)
                                                  +/*!
                                                  + * Vue.js v2.6.14
                                                  + * (c) 2014-2021 Evan You
                                                  + * Released under the MIT License.
                                                  + */}var r=Object.freeze({});function i(t){return void 0===t||null===t}function o(t){return void 0!==t&&null!==t}function a(t){return!0===t}function u(t){return!1===t}function c(t){return"string"===typeof t||"number"===typeof t||"symbol"===n(t)||"boolean"===typeof t}function s(t){return null!==t&&"object"===n(t)}var f=Object.prototype.toString;function l(t){return"[object Object]"===f.call(t)}function d(t){return"[object RegExp]"===f.call(t)}function p(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function h(t){return o(t)&&"function"===typeof t.then&&"function"===typeof t.catch}function v(t){return null==t?"":Array.isArray(t)||l(t)&&t.toString===f?JSON.stringify(t,null,2):String(t)}function y(t){var e=parseFloat(t);return isNaN(e)?t:e}function b(t,e){for(var n=Object.create(null),r=t.split(","),i=0;i<r.length;i++)n[r[i]]=!0;return e?function(t){return n[t.toLowerCase()]}:function(t){return n[t]}}b("slot,component",!0);var m=b("key,ref,slot,slot-scope,is");function g(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)return t.splice(n,1)}}var _=Object.prototype.hasOwnProperty;function w(t,e){return _.call(t,e)}function x(t){var e=Object.create(null);return function(n){var r=e[n];return r||(e[n]=t(n))}}var S=/-(\w)/g,O=x((function(t){return t.replace(S,(function(t,e){return e?e.toUpperCase():""}))})),A=x((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),E=/\B([A-Z])/g,k=x((function(t){return t.replace(E,"-$1").toLowerCase()}));function C(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function $(t,e){return t.bind(e)}var j=Function.prototype.bind?$:C;function M(t,e){e=e||0;var n=t.length-e,r=new Array(n);while(n--)r[n]=t[n+e];return r}function R(t,e){for(var n in e)t[n]=e[n];return t}function P(t){for(var e={},n=0;n<t.length;n++)t[n]&&R(e,t[n]);return e}function I(t,e,n){}var T=function(t,e,n){return!1},F=function(t){return t};function N(t,e){if(t===e)return!0;var n=s(t),r=s(e);if(!n||!r)return!n&&!r&&String(t)===String(e);try{var i=Array.isArray(t),o=Array.isArray(e);if(i&&o)return t.length===e.length&&t.every((function(t,n){return N(t,e[n])}));if(t instanceof Date&&e instanceof Date)return t.getTime()===e.getTime();if(i||o)return!1;var a=Object.keys(t),u=Object.keys(e);return a.length===u.length&&a.every((function(n){return N(t[n],e[n])}))}catch(c){return!1}}function L(t,e){for(var n=0;n<t.length;n++)if(N(t[n],e))return n;return-1}function D(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}var V="data-server-rendered",U=["component","directive","filter"],q=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],B={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:T,isReservedAttr:T,isUnknownElement:T,getTagNamespace:I,parsePlatformTagName:F,mustUseProp:T,async:!0,_lifecycleHooks:q},z=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function G(t){var e=(t+"").charCodeAt(0);return 36===e||95===e}function W(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var H=new RegExp("[^"+z.source+".$_\\d]");function K(t){if(!H.test(t)){var e=t.split(".");return function(t){for(var n=0;n<e.length;n++){if(!t)return;t=t[e[n]]}return t}}}var J,X="__proto__"in{},Y="undefined"!==typeof window,Z="undefined"!==typeof WXEnvironment&&!!WXEnvironment.platform,Q=Z&&WXEnvironment.platform.toLowerCase(),tt=Y&&window.navigator.userAgent.toLowerCase(),et=tt&&/msie|trident/.test(tt),nt=tt&&tt.indexOf("msie 9.0")>0,rt=tt&&tt.indexOf("edge/")>0,it=(tt&&tt.indexOf("android"),tt&&/iphone|ipad|ipod|ios/.test(tt)||"ios"===Q),ot=(tt&&/chrome\/\d+/.test(tt),tt&&/phantomjs/.test(tt),tt&&tt.match(/firefox\/(\d+)/)),at={}.watch,ut=!1;if(Y)try{var ct={};Object.defineProperty(ct,"passive",{get:function(){ut=!0}}),window.addEventListener("test-passive",null,ct)}catch(Aa){}var st=function(){return void 0===J&&(J=!Y&&!Z&&"undefined"!==typeof t&&(t["process"]&&"server"===t["process"].env.VUE_ENV)),J},ft=Y&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function lt(t){return"function"===typeof t&&/native code/.test(t.toString())}var dt,pt="undefined"!==typeof Symbol&&lt(Symbol)&&"undefined"!==typeof Reflect&&lt(Reflect.ownKeys);dt="undefined"!==typeof Set&&lt(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ht=I,vt=0,yt=function(){this.id=vt++,this.subs=[]};yt.prototype.addSub=function(t){this.subs.push(t)},yt.prototype.removeSub=function(t){g(this.subs,t)},yt.prototype.depend=function(){yt.target&&yt.target.addDep(this)},yt.prototype.notify=function(){var t=this.subs.slice();for(var e=0,n=t.length;e<n;e++)t[e].update()},yt.target=null;var bt=[];function mt(t){bt.push(t),yt.target=t}function gt(){bt.pop(),yt.target=bt[bt.length-1]}var _t=function(t,e,n,r,i,o,a,u){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=i,this.ns=void 0,this.context=o,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=u,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},wt={child:{configurable:!0}};wt.child.get=function(){return this.componentInstance},Object.defineProperties(_t.prototype,wt);var xt=function(t){void 0===t&&(t="");var e=new _t;return e.text=t,e.isComment=!0,e};function St(t){return new _t(void 0,void 0,void 0,String(t))}function Ot(t){var e=new _t(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var At=Array.prototype,Et=Object.create(At),kt=["push","pop","shift","unshift","splice","sort","reverse"];kt.forEach((function(t){var e=At[t];W(Et,t,(function(){var n=[],r=arguments.length;while(r--)n[r]=arguments[r];var i,o=e.apply(this,n),a=this.__ob__;switch(t){case"push":case"unshift":i=n;break;case"splice":i=n.slice(2);break}return i&&a.observeArray(i),a.dep.notify(),o}))}));var Ct=Object.getOwnPropertyNames(Et),$t=!0;function jt(t){$t=t}var Mt=function(t){this.value=t,this.dep=new yt,this.vmCount=0,W(t,"__ob__",this),Array.isArray(t)?(X?Rt(t,Et):Pt(t,Et,Ct),this.observeArray(t)):this.walk(t)};function Rt(t,e){t.__proto__=e}function Pt(t,e,n){for(var r=0,i=n.length;r<i;r++){var o=n[r];W(t,o,e[o])}}function It(t,e){var n;if(s(t)&&!(t instanceof _t))return w(t,"__ob__")&&t.__ob__ instanceof Mt?n=t.__ob__:$t&&!st()&&(Array.isArray(t)||l(t))&&Object.isExtensible(t)&&!t._isVue&&(n=new Mt(t)),e&&n&&n.vmCount++,n}function Tt(t,e,n,r,i){var o=new yt,a=Object.getOwnPropertyDescriptor(t,e);if(!a||!1!==a.configurable){var u=a&&a.get,c=a&&a.set;u&&!c||2!==arguments.length||(n=t[e]);var s=!i&&It(n);Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){var e=u?u.call(t):n;return yt.target&&(o.depend(),s&&(s.dep.depend(),Array.isArray(e)&&Lt(e))),e},set:function(e){var r=u?u.call(t):n;e===r||e!==e&&r!==r||u&&!c||(c?c.call(t,e):n=e,s=!i&&It(e),o.notify())}})}}function Ft(t,e,n){if(Array.isArray(t)&&p(e))return t.length=Math.max(t.length,e),t.splice(e,1,n),n;if(e in t&&!(e in Object.prototype))return t[e]=n,n;var r=t.__ob__;return t._isVue||r&&r.vmCount?n:r?(Tt(r.value,e,n),r.dep.notify(),n):(t[e]=n,n)}function Nt(t,e){if(Array.isArray(t)&&p(e))t.splice(e,1);else{var n=t.__ob__;t._isVue||n&&n.vmCount||w(t,e)&&(delete t[e],n&&n.dep.notify())}}function Lt(t){for(var e=void 0,n=0,r=t.length;n<r;n++)e=t[n],e&&e.__ob__&&e.__ob__.dep.depend(),Array.isArray(e)&&Lt(e)}Mt.prototype.walk=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)Tt(t,e[n])},Mt.prototype.observeArray=function(t){for(var e=0,n=t.length;e<n;e++)It(t[e])};var Dt=B.optionMergeStrategies;function Vt(t,e){if(!e)return t;for(var n,r,i,o=pt?Reflect.ownKeys(e):Object.keys(e),a=0;a<o.length;a++)n=o[a],"__ob__"!==n&&(r=t[n],i=e[n],w(t,n)?r!==i&&l(r)&&l(i)&&Vt(r,i):Ft(t,n,i));return t}function Ut(t,e,n){return n?function(){var r="function"===typeof e?e.call(n,n):e,i="function"===typeof t?t.call(n,n):t;return r?Vt(r,i):i}:e?t?function(){return Vt("function"===typeof e?e.call(this,this):e,"function"===typeof t?t.call(this,this):t)}:e:t}function qt(t,e){var n=e?t?t.concat(e):Array.isArray(e)?e:[e]:t;return n?Bt(n):n}function Bt(t){for(var e=[],n=0;n<t.length;n++)-1===e.indexOf(t[n])&&e.push(t[n]);return e}function zt(t,e,n,r){var i=Object.create(t||null);return e?R(i,e):i}Dt.data=function(t,e,n){return n?Ut(t,e,n):e&&"function"!==typeof e?t:Ut(t,e)},q.forEach((function(t){Dt[t]=qt})),U.forEach((function(t){Dt[t+"s"]=zt})),Dt.watch=function(t,e,n,r){if(t===at&&(t=void 0),e===at&&(e=void 0),!e)return Object.create(t||null);if(!t)return e;var i={};for(var o in R(i,t),e){var a=i[o],u=e[o];a&&!Array.isArray(a)&&(a=[a]),i[o]=a?a.concat(u):Array.isArray(u)?u:[u]}return i},Dt.props=Dt.methods=Dt.inject=Dt.computed=function(t,e,n,r){if(!t)return e;var i=Object.create(null);return R(i,t),e&&R(i,e),i},Dt.provide=Ut;var Gt=function(t,e){return void 0===e?t:e};function Wt(t,e){var n=t.props;if(n){var r,i,o,a={};if(Array.isArray(n)){r=n.length;while(r--)i=n[r],"string"===typeof i&&(o=O(i),a[o]={type:null})}else if(l(n))for(var u in n)i=n[u],o=O(u),a[o]=l(i)?i:{type:i};else 0;t.props=a}}function Ht(t,e){var n=t.inject;if(n){var r=t.inject={};if(Array.isArray(n))for(var i=0;i<n.length;i++)r[n[i]]={from:n[i]};else if(l(n))for(var o in n){var a=n[o];r[o]=l(a)?R({from:o},a):{from:a}}else 0}}function Kt(t){var e=t.directives;if(e)for(var n in e){var r=e[n];"function"===typeof r&&(e[n]={bind:r,update:r})}}function Jt(t,e,n){if("function"===typeof e&&(e=e.options),Wt(e,n),Ht(e,n),Kt(e),!e._base&&(e.extends&&(t=Jt(t,e.extends,n)),e.mixins))for(var r=0,i=e.mixins.length;r<i;r++)t=Jt(t,e.mixins[r],n);var o,a={};for(o in t)u(o);for(o in e)w(t,o)||u(o);function u(r){var i=Dt[r]||Gt;a[r]=i(t[r],e[r],n,r)}return a}function Xt(t,e,n,r){if("string"===typeof n){var i=t[e];if(w(i,n))return i[n];var o=O(n);if(w(i,o))return i[o];var a=A(o);if(w(i,a))return i[a];var u=i[n]||i[o]||i[a];return u}}function Yt(t,e,n,r){var i=e[t],o=!w(n,t),a=n[t],u=ne(Boolean,i.type);if(u>-1)if(o&&!w(i,"default"))a=!1;else if(""===a||a===k(t)){var c=ne(String,i.type);(c<0||u<c)&&(a=!0)}if(void 0===a){a=Zt(r,i,t);var s=$t;jt(!0),It(a),jt(s)}return a}function Zt(t,e,n){if(w(e,"default")){var r=e.default;return t&&t.$options.propsData&&void 0===t.$options.propsData[n]&&void 0!==t._props[n]?t._props[n]:"function"===typeof r&&"Function"!==te(e.type)?r.call(t):r}}var Qt=/^\s*function (\w+)/;function te(t){var e=t&&t.toString().match(Qt);return e?e[1]:""}function ee(t,e){return te(t)===te(e)}function ne(t,e){if(!Array.isArray(e))return ee(e,t)?0:-1;for(var n=0,r=e.length;n<r;n++)if(ee(e[n],t))return n;return-1}function re(t,e,n){mt();try{if(e){var r=e;while(r=r.$parent){var i=r.$options.errorCaptured;if(i)for(var o=0;o<i.length;o++)try{var a=!1===i[o].call(r,t,e,n);if(a)return}catch(Aa){oe(Aa,r,"errorCaptured hook")}}}oe(t,e,n)}finally{gt()}}function ie(t,e,n,r,i){var o;try{o=n?t.apply(e,n):t.call(e),o&&!o._isVue&&h(o)&&!o._handled&&(o.catch((function(t){return re(t,r,i+" (Promise/async)")})),o._handled=!0)}catch(Aa){re(Aa,r,i)}return o}function oe(t,e,n){if(B.errorHandler)try{return B.errorHandler.call(null,t,e,n)}catch(Aa){Aa!==t&&ae(Aa,null,"config.errorHandler")}ae(t,e,n)}function ae(t,e,n){if(!Y&&!Z||"undefined"===typeof console)throw t;console.error(t)}var ue,ce=!1,se=[],fe=!1;function le(){fe=!1;var t=se.slice(0);se.length=0;for(var e=0;e<t.length;e++)t[e]()}if("undefined"!==typeof Promise&&lt(Promise)){var de=Promise.resolve();ue=function(){de.then(le),it&&setTimeout(I)},ce=!0}else if(et||"undefined"===typeof MutationObserver||!lt(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())ue="undefined"!==typeof setImmediate&&lt(setImmediate)?function(){setImmediate(le)}:function(){setTimeout(le,0)};else{var pe=1,he=new MutationObserver(le),ve=document.createTextNode(String(pe));he.observe(ve,{characterData:!0}),ue=function(){pe=(pe+1)%2,ve.data=String(pe)},ce=!0}function ye(t,e){var n;if(se.push((function(){if(t)try{t.call(e)}catch(Aa){re(Aa,e,"nextTick")}else n&&n(e)})),fe||(fe=!0,ue()),!t&&"undefined"!==typeof Promise)return new Promise((function(t){n=t}))}var be=new dt;function me(t){ge(t,be),be.clear()}function ge(t,e){var n,r,i=Array.isArray(t);if(!(!i&&!s(t)||Object.isFrozen(t)||t instanceof _t)){if(t.__ob__){var o=t.__ob__.dep.id;if(e.has(o))return;e.add(o)}if(i){n=t.length;while(n--)ge(t[n],e)}else{r=Object.keys(t),n=r.length;while(n--)ge(t[r[n]],e)}}}var _e=x((function(t){var e="&"===t.charAt(0);t=e?t.slice(1):t;var n="~"===t.charAt(0);t=n?t.slice(1):t;var r="!"===t.charAt(0);return t=r?t.slice(1):t,{name:t,once:n,capture:r,passive:e}}));function we(t,e){function n(){var t=arguments,r=n.fns;if(!Array.isArray(r))return ie(r,null,arguments,e,"v-on handler");for(var i=r.slice(),o=0;o<i.length;o++)ie(i[o],null,t,e,"v-on handler")}return n.fns=t,n}function xe(t,e,n,r,o,u){var c,s,f,l;for(c in t)s=t[c],f=e[c],l=_e(c),i(s)||(i(f)?(i(s.fns)&&(s=t[c]=we(s,u)),a(l.once)&&(s=t[c]=o(l.name,s,l.capture)),n(l.name,s,l.capture,l.passive,l.params)):s!==f&&(f.fns=s,t[c]=f));for(c in e)i(t[c])&&(l=_e(c),r(l.name,e[c],l.capture))}function Se(t,e,n){var r;t instanceof _t&&(t=t.data.hook||(t.data.hook={}));var u=t[e];function c(){n.apply(this,arguments),g(r.fns,c)}i(u)?r=we([c]):o(u.fns)&&a(u.merged)?(r=u,r.fns.push(c)):r=we([u,c]),r.merged=!0,t[e]=r}function Oe(t,e,n){var r=e.options.props;if(!i(r)){var a={},u=t.attrs,c=t.props;if(o(u)||o(c))for(var s in r){var f=k(s);Ae(a,c,s,f,!0)||Ae(a,u,s,f,!1)}return a}}function Ae(t,e,n,r,i){if(o(e)){if(w(e,n))return t[n]=e[n],i||delete e[n],!0;if(w(e,r))return t[n]=e[r],i||delete e[r],!0}return!1}function Ee(t){for(var e=0;e<t.length;e++)if(Array.isArray(t[e]))return Array.prototype.concat.apply([],t);return t}function ke(t){return c(t)?[St(t)]:Array.isArray(t)?$e(t):void 0}function Ce(t){return o(t)&&o(t.text)&&u(t.isComment)}function $e(t,e){var n,r,u,s,f=[];for(n=0;n<t.length;n++)r=t[n],i(r)||"boolean"===typeof r||(u=f.length-1,s=f[u],Array.isArray(r)?r.length>0&&(r=$e(r,(e||"")+"_"+n),Ce(r[0])&&Ce(s)&&(f[u]=St(s.text+r[0].text),r.shift()),f.push.apply(f,r)):c(r)?Ce(s)?f[u]=St(s.text+r):""!==r&&f.push(St(r)):Ce(r)&&Ce(s)?f[u]=St(s.text+r.text):(a(t._isVList)&&o(r.tag)&&i(r.key)&&o(e)&&(r.key="__vlist"+e+"_"+n+"__"),f.push(r)));return f}function je(t){var e=t.$options.provide;e&&(t._provided="function"===typeof e?e.call(t):e)}function Me(t){var e=Re(t.$options.inject,t);e&&(jt(!1),Object.keys(e).forEach((function(n){Tt(t,n,e[n])})),jt(!0))}function Re(t,e){if(t){for(var n=Object.create(null),r=pt?Reflect.ownKeys(t):Object.keys(t),i=0;i<r.length;i++){var o=r[i];if("__ob__"!==o){var a=t[o].from,u=e;while(u){if(u._provided&&w(u._provided,a)){n[o]=u._provided[a];break}u=u.$parent}if(!u)if("default"in t[o]){var c=t[o].default;n[o]="function"===typeof c?c.call(e):c}else 0}}return n}}function Pe(t,e){if(!t||!t.length)return{};for(var n={},r=0,i=t.length;r<i;r++){var o=t[r],a=o.data;if(a&&a.attrs&&a.attrs.slot&&delete a.attrs.slot,o.context!==e&&o.fnContext!==e||!a||null==a.slot)(n.default||(n.default=[])).push(o);else{var u=a.slot,c=n[u]||(n[u]=[]);"template"===o.tag?c.push.apply(c,o.children||[]):c.push(o)}}for(var s in n)n[s].every(Ie)&&delete n[s];return n}function Ie(t){return t.isComment&&!t.asyncFactory||" "===t.text}function Te(t){return t.isComment&&t.asyncFactory}function Fe(t,e,n){var i,o=Object.keys(e).length>0,a=t?!!t.$stable:!o,u=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&n&&n!==r&&u===n.$key&&!o&&!n.$hasNormal)return n;for(var c in i={},t)t[c]&&"$"!==c[0]&&(i[c]=Ne(e,c,t[c]))}else i={};for(var s in e)s in i||(i[s]=Le(e,s));return t&&Object.isExtensible(t)&&(t._normalized=i),W(i,"$stable",a),W(i,"$key",u),W(i,"$hasNormal",o),i}function Ne(t,e,r){var i=function(){var t=arguments.length?r.apply(null,arguments):r({});t=t&&"object"===n(t)&&!Array.isArray(t)?[t]:ke(t);var e=t&&t[0];return t&&(!e||1===t.length&&e.isComment&&!Te(e))?void 0:t};return r.proxy&&Object.defineProperty(t,e,{get:i,enumerable:!0,configurable:!0}),i}function Le(t,e){return function(){return t[e]}}function De(t,e){var n,r,i,a,u;if(Array.isArray(t)||"string"===typeof t)for(n=new Array(t.length),r=0,i=t.length;r<i;r++)n[r]=e(t[r],r);else if("number"===typeof t)for(n=new Array(t),r=0;r<t;r++)n[r]=e(r+1,r);else if(s(t))if(pt&&t[Symbol.iterator]){n=[];var c=t[Symbol.iterator](),f=c.next();while(!f.done)n.push(e(f.value,n.length)),f=c.next()}else for(a=Object.keys(t),n=new Array(a.length),r=0,i=a.length;r<i;r++)u=a[r],n[r]=e(t[u],u,r);return o(n)||(n=[]),n._isVList=!0,n}function Ve(t,e,n,r){var i,o=this.$scopedSlots[t];o?(n=n||{},r&&(n=R(R({},r),n)),i=o(n)||("function"===typeof e?e():e)):i=this.$slots[t]||("function"===typeof e?e():e);var a=n&&n.slot;return a?this.$createElement("template",{slot:a},i):i}function Ue(t){return Xt(this.$options,"filters",t,!0)||F}function qe(t,e){return Array.isArray(t)?-1===t.indexOf(e):t!==e}function Be(t,e,n,r,i){var o=B.keyCodes[e]||n;return i&&r&&!B.keyCodes[e]?qe(i,r):o?qe(o,t):r?k(r)!==e:void 0===t}function ze(t,e,n,r,i){if(n)if(s(n)){var o;Array.isArray(n)&&(n=P(n));var a=function(a){if("class"===a||"style"===a||m(a))o=t;else{var u=t.attrs&&t.attrs.type;o=r||B.mustUseProp(e,u,a)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}var c=O(a),s=k(a);if(!(c in o)&&!(s in o)&&(o[a]=n[a],i)){var f=t.on||(t.on={});f["update:"+a]=function(t){n[a]=t}}};for(var u in n)a(u)}else;return t}function Ge(t,e){var n=this._staticTrees||(this._staticTrees=[]),r=n[t];return r&&!e||(r=n[t]=this.$options.staticRenderFns[t].call(this._renderProxy,null,this),He(r,"__static__"+t,!1)),r}function We(t,e,n){return He(t,"__once__"+e+(n?"_"+n:""),!0),t}function He(t,e,n){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&"string"!==typeof t[r]&&Ke(t[r],e+"_"+r,n);else Ke(t,e,n)}function Ke(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}function Je(t,e){if(e)if(l(e)){var n=t.on=t.on?R({},t.on):{};for(var r in e){var i=n[r],o=e[r];n[r]=i?[].concat(i,o):o}}else;return t}function Xe(t,e,n,r){e=e||{$stable:!n};for(var i=0;i<t.length;i++){var o=t[i];Array.isArray(o)?Xe(o,e,n):o&&(o.proxy&&(o.fn.proxy=!0),e[o.key]=o.fn)}return r&&(e.$key=r),e}function Ye(t,e){for(var n=0;n<e.length;n+=2){var r=e[n];"string"===typeof r&&r&&(t[e[n]]=e[n+1])}return t}function Ze(t,e){return"string"===typeof t?e+t:t}function Qe(t){t._o=We,t._n=y,t._s=v,t._l=De,t._t=Ve,t._q=N,t._i=L,t._m=Ge,t._f=Ue,t._k=Be,t._b=ze,t._v=St,t._e=xt,t._u=Xe,t._g=Je,t._d=Ye,t._p=Ze}function tn(t,e,n,i,o){var u,c=this,s=o.options;w(i,"_uid")?(u=Object.create(i),u._original=i):(u=i,i=i._original);var f=a(s._compiled),l=!f;this.data=t,this.props=e,this.children=n,this.parent=i,this.listeners=t.on||r,this.injections=Re(s.inject,i),this.slots=function(){return c.$slots||Fe(t.scopedSlots,c.$slots=Pe(n,i)),c.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return Fe(t.scopedSlots,this.slots())}}),f&&(this.$options=s,this.$slots=this.slots(),this.$scopedSlots=Fe(t.scopedSlots,this.$slots)),s._scopeId?this._c=function(t,e,n,r){var o=hn(u,t,e,n,r,l);return o&&!Array.isArray(o)&&(o.fnScopeId=s._scopeId,o.fnContext=i),o}:this._c=function(t,e,n,r){return hn(u,t,e,n,r,l)}}function en(t,e,n,i,a){var u=t.options,c={},s=u.props;if(o(s))for(var f in s)c[f]=Yt(f,s,e||r);else o(n.attrs)&&rn(c,n.attrs),o(n.props)&&rn(c,n.props);var l=new tn(n,c,a,i,t),d=u.render.call(null,l._c,l);if(d instanceof _t)return nn(d,n,l.parent,u,l);if(Array.isArray(d)){for(var p=ke(d)||[],h=new Array(p.length),v=0;v<p.length;v++)h[v]=nn(p[v],n,l.parent,u,l);return h}}function nn(t,e,n,r,i){var o=Ot(t);return o.fnContext=n,o.fnOptions=r,e.slot&&((o.data||(o.data={})).slot=e.slot),o}function rn(t,e){for(var n in e)t[O(n)]=e[n]}Qe(tn.prototype);var on={init:function(t,e){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){var n=t;on.prepatch(n,n)}else{var r=t.componentInstance=cn(t,Rn);r.$mount(e?t.elm:void 0,e)}},prepatch:function(t,e){var n=e.componentOptions,r=e.componentInstance=t.componentInstance;Nn(r,n.propsData,n.listeners,e,n.children)},insert:function(t){var e=t.context,n=t.componentInstance;n._isMounted||(n._isMounted=!0,Un(n,"mounted")),t.data.keepAlive&&(e._isMounted?tr(n):Dn(n,!0))},destroy:function(t){var e=t.componentInstance;e._isDestroyed||(t.data.keepAlive?Vn(e,!0):e.$destroy())}},an=Object.keys(on);function un(t,e,n,r,u){if(!i(t)){var c=n.$options._base;if(s(t)&&(t=c.extend(t)),"function"===typeof t){var f;if(i(t.cid)&&(f=t,t=On(f,c),void 0===t))return Sn(f,e,n,r,u);e=e||{},Sr(t),o(e.model)&&ln(t.options,e);var l=Oe(e,t,u);if(a(t.options.functional))return en(t,l,e,n,r);var d=e.on;if(e.on=e.nativeOn,a(t.options.abstract)){var p=e.slot;e={},p&&(e.slot=p)}sn(e);var h=t.options.name||u,v=new _t("vue-component-"+t.cid+(h?"-"+h:""),e,void 0,void 0,void 0,n,{Ctor:t,propsData:l,listeners:d,tag:u,children:r},f);return v}}}function cn(t,e){var n={_isComponent:!0,_parentVnode:t,parent:e},r=t.data.inlineTemplate;return o(r)&&(n.render=r.render,n.staticRenderFns=r.staticRenderFns),new t.componentOptions.Ctor(n)}function sn(t){for(var e=t.hook||(t.hook={}),n=0;n<an.length;n++){var r=an[n],i=e[r],o=on[r];i===o||i&&i._merged||(e[r]=i?fn(o,i):o)}}function fn(t,e){var n=function(n,r){t(n,r),e(n,r)};return n._merged=!0,n}function ln(t,e){var n=t.model&&t.model.prop||"value",r=t.model&&t.model.event||"input";(e.attrs||(e.attrs={}))[n]=e.model.value;var i=e.on||(e.on={}),a=i[r],u=e.model.callback;o(a)?(Array.isArray(a)?-1===a.indexOf(u):a!==u)&&(i[r]=[u].concat(a)):i[r]=u}var dn=1,pn=2;function hn(t,e,n,r,i,o){return(Array.isArray(n)||c(n))&&(i=r,r=n,n=void 0),a(o)&&(i=pn),vn(t,e,n,r,i)}function vn(t,e,n,r,i){if(o(n)&&o(n.__ob__))return xt();if(o(n)&&o(n.is)&&(e=n.is),!e)return xt();var a,u,c;(Array.isArray(r)&&"function"===typeof r[0]&&(n=n||{},n.scopedSlots={default:r[0]},r.length=0),i===pn?r=ke(r):i===dn&&(r=Ee(r)),"string"===typeof e)?(u=t.$vnode&&t.$vnode.ns||B.getTagNamespace(e),a=B.isReservedTag(e)?new _t(B.parsePlatformTagName(e),n,r,void 0,void 0,t):n&&n.pre||!o(c=Xt(t.$options,"components",e))?new _t(e,n,r,void 0,void 0,t):un(c,n,t,r,e)):a=un(e,n,t,r);return Array.isArray(a)?a:o(a)?(o(u)&&yn(a,u),o(n)&&bn(n),a):xt()}function yn(t,e,n){if(t.ns=e,"foreignObject"===t.tag&&(e=void 0,n=!0),o(t.children))for(var r=0,u=t.children.length;r<u;r++){var c=t.children[r];o(c.tag)&&(i(c.ns)||a(n)&&"svg"!==c.tag)&&yn(c,e,n)}}function bn(t){s(t.style)&&me(t.style),s(t.class)&&me(t.class)}function mn(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,i=n&&n.context;t.$slots=Pe(e._renderChildren,i),t.$scopedSlots=r,t._c=function(e,n,r,i){return hn(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return hn(t,e,n,r,i,!0)};var o=n&&n.data;Tt(t,"$attrs",o&&o.attrs||r,null,!0),Tt(t,"$listeners",e._parentListeners||r,null,!0)}var gn,_n=null;function wn(t){Qe(t.prototype),t.prototype.$nextTick=function(t){return ye(t,this)},t.prototype._render=function(){var t,e=this,n=e.$options,r=n.render,i=n._parentVnode;i&&(e.$scopedSlots=Fe(i.data.scopedSlots,e.$slots,e.$scopedSlots)),e.$vnode=i;try{_n=e,t=r.call(e._renderProxy,e.$createElement)}catch(Aa){re(Aa,e,"render"),t=e._vnode}finally{_n=null}return Array.isArray(t)&&1===t.length&&(t=t[0]),t instanceof _t||(t=xt()),t.parent=i,t}}function xn(t,e){return(t.__esModule||pt&&"Module"===t[Symbol.toStringTag])&&(t=t.default),s(t)?e.extend(t):t}function Sn(t,e,n,r,i){var o=xt();return o.asyncFactory=t,o.asyncMeta={data:e,context:n,children:r,tag:i},o}function On(t,e){if(a(t.error)&&o(t.errorComp))return t.errorComp;if(o(t.resolved))return t.resolved;var n=_n;if(n&&o(t.owners)&&-1===t.owners.indexOf(n)&&t.owners.push(n),a(t.loading)&&o(t.loadingComp))return t.loadingComp;if(n&&!o(t.owners)){var r=t.owners=[n],u=!0,c=null,f=null;n.$on("hook:destroyed",(function(){return g(r,n)}));var l=function(t){for(var e=0,n=r.length;e<n;e++)r[e].$forceUpdate();t&&(r.length=0,null!==c&&(clearTimeout(c),c=null),null!==f&&(clearTimeout(f),f=null))},d=D((function(n){t.resolved=xn(n,e),u?r.length=0:l(!0)})),p=D((function(e){o(t.errorComp)&&(t.error=!0,l(!0))})),v=t(d,p);return s(v)&&(h(v)?i(t.resolved)&&v.then(d,p):h(v.component)&&(v.component.then(d,p),o(v.error)&&(t.errorComp=xn(v.error,e)),o(v.loading)&&(t.loadingComp=xn(v.loading,e),0===v.delay?t.loading=!0:c=setTimeout((function(){c=null,i(t.resolved)&&i(t.error)&&(t.loading=!0,l(!1))}),v.delay||200)),o(v.timeout)&&(f=setTimeout((function(){f=null,i(t.resolved)&&p(null)}),v.timeout)))),u=!1,t.loading?t.loadingComp:t.resolved}}function An(t){if(Array.isArray(t))for(var e=0;e<t.length;e++){var n=t[e];if(o(n)&&(o(n.componentOptions)||Te(n)))return n}}function En(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&jn(t,e)}function kn(t,e){gn.$on(t,e)}function Cn(t,e){gn.$off(t,e)}function $n(t,e){var n=gn;return function r(){var i=e.apply(null,arguments);null!==i&&n.$off(t,r)}}function jn(t,e,n){gn=t,xe(e,n||{},kn,Cn,$n,t),gn=void 0}function Mn(t){var e=/^hook:/;t.prototype.$on=function(t,n){var r=this;if(Array.isArray(t))for(var i=0,o=t.length;i<o;i++)r.$on(t[i],n);else(r._events[t]||(r._events[t]=[])).push(n),e.test(t)&&(r._hasHookEvent=!0);return r},t.prototype.$once=function(t,e){var n=this;function r(){n.$off(t,r),e.apply(n,arguments)}return r.fn=e,n.$on(t,r),n},t.prototype.$off=function(t,e){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(Array.isArray(t)){for(var r=0,i=t.length;r<i;r++)n.$off(t[r],e);return n}var o,a=n._events[t];if(!a)return n;if(!e)return n._events[t]=null,n;var u=a.length;while(u--)if(o=a[u],o===e||o.fn===e){a.splice(u,1);break}return n},t.prototype.$emit=function(t){var e=this,n=e._events[t];if(n){n=n.length>1?M(n):n;for(var r=M(arguments,1),i='event handler for "'+t+'"',o=0,a=n.length;o<a;o++)ie(n[o],e,r,e,i)}return e}}var Rn=null;function Pn(t){var e=Rn;return Rn=t,function(){Rn=e}}function In(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){while(n.$options.abstract&&n.$parent)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}function Tn(t){t.prototype._update=function(t,e){var n=this,r=n.$el,i=n._vnode,o=Pn(n);n._vnode=t,n.$el=i?n.__patch__(i,t):n.__patch__(n.$el,t,e,!1),o(),r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},t.prototype.$forceUpdate=function(){var t=this;t._watcher&&t._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){Un(t,"beforeDestroy"),t._isBeingDestroyed=!0;var e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||g(e.$children,t),t._watcher&&t._watcher.teardown();var n=t._watchers.length;while(n--)t._watchers[n].teardown();t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),Un(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$vnode&&(t.$vnode.parent=null)}}}function Fn(t,e,n){var r;return t.$el=e,t.$options.render||(t.$options.render=xt),Un(t,"beforeMount"),r=function(){t._update(t._render(),n)},new ir(t,r,I,{before:function(){t._isMounted&&!t._isDestroyed&&Un(t,"beforeUpdate")}},!0),n=!1,null==t.$vnode&&(t._isMounted=!0,Un(t,"mounted")),t}function Nn(t,e,n,i,o){var a=i.data.scopedSlots,u=t.$scopedSlots,c=!!(a&&!a.$stable||u!==r&&!u.$stable||a&&t.$scopedSlots.$key!==a.$key||!a&&t.$scopedSlots.$key),s=!!(o||t.$options._renderChildren||c);if(t.$options._parentVnode=i,t.$vnode=i,t._vnode&&(t._vnode.parent=i),t.$options._renderChildren=o,t.$attrs=i.data.attrs||r,t.$listeners=n||r,e&&t.$options.props){jt(!1);for(var f=t._props,l=t.$options._propKeys||[],d=0;d<l.length;d++){var p=l[d],h=t.$options.props;f[p]=Yt(p,h,e,t)}jt(!0),t.$options.propsData=e}n=n||r;var v=t.$options._parentListeners;t.$options._parentListeners=n,jn(t,n,v),s&&(t.$slots=Pe(o,i.context),t.$forceUpdate())}function Ln(t){while(t&&(t=t.$parent))if(t._inactive)return!0;return!1}function Dn(t,e){if(e){if(t._directInactive=!1,Ln(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(var n=0;n<t.$children.length;n++)Dn(t.$children[n]);Un(t,"activated")}}function Vn(t,e){if((!e||(t._directInactive=!0,!Ln(t)))&&!t._inactive){t._inactive=!0;for(var n=0;n<t.$children.length;n++)Vn(t.$children[n]);Un(t,"deactivated")}}function Un(t,e){mt();var n=t.$options[e],r=e+" hook";if(n)for(var i=0,o=n.length;i<o;i++)ie(n[i],t,null,t,r);t._hasHookEvent&&t.$emit("hook:"+e),gt()}var qn=[],Bn=[],zn={},Gn=!1,Wn=!1,Hn=0;function Kn(){Hn=qn.length=Bn.length=0,zn={},Gn=Wn=!1}var Jn=0,Xn=Date.now;if(Y&&!et){var Yn=window.performance;Yn&&"function"===typeof Yn.now&&Xn()>document.createEvent("Event").timeStamp&&(Xn=function(){return Yn.now()})}function Zn(){var t,e;for(Jn=Xn(),Wn=!0,qn.sort((function(t,e){return t.id-e.id})),Hn=0;Hn<qn.length;Hn++)t=qn[Hn],t.before&&t.before(),e=t.id,zn[e]=null,t.run();var n=Bn.slice(),r=qn.slice();Kn(),er(n),Qn(r),ft&&B.devtools&&ft.emit("flush")}function Qn(t){var e=t.length;while(e--){var n=t[e],r=n.vm;r._watcher===n&&r._isMounted&&!r._isDestroyed&&Un(r,"updated")}}function tr(t){t._inactive=!1,Bn.push(t)}function er(t){for(var e=0;e<t.length;e++)t[e]._inactive=!0,Dn(t[e],!0)}function nr(t){var e=t.id;if(null==zn[e]){if(zn[e]=!0,Wn){var n=qn.length-1;while(n>Hn&&qn[n].id>t.id)n--;qn.splice(n+1,0,t)}else qn.push(t);Gn||(Gn=!0,ye(Zn))}}var rr=0,ir=function(t,e,n,r,i){this.vm=t,i&&(t._watcher=this),t._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++rr,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new dt,this.newDepIds=new dt,this.expression="","function"===typeof e?this.getter=e:(this.getter=K(e),this.getter||(this.getter=I)),this.value=this.lazy?void 0:this.get()};ir.prototype.get=function(){var t;mt(this);var e=this.vm;try{t=this.getter.call(e,e)}catch(Aa){if(!this.user)throw Aa;re(Aa,e,'getter for watcher "'+this.expression+'"')}finally{this.deep&&me(t),gt(),this.cleanupDeps()}return t},ir.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},ir.prototype.cleanupDeps=function(){var t=this.deps.length;while(t--){var e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},ir.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():nr(this)},ir.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||s(t)||this.deep){var e=this.value;if(this.value=t,this.user){var n='callback for watcher "'+this.expression+'"';ie(this.cb,this.vm,[t,e],this.vm,n)}else this.cb.call(this.vm,t,e)}}},ir.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},ir.prototype.depend=function(){var t=this.deps.length;while(t--)this.deps[t].depend()},ir.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||g(this.vm._watchers,this);var t=this.deps.length;while(t--)this.deps[t].removeSub(this);this.active=!1}};var or={enumerable:!0,configurable:!0,get:I,set:I};function ar(t,e,n){or.get=function(){return this[e][n]},or.set=function(t){this[e][n]=t},Object.defineProperty(t,n,or)}function ur(t){t._watchers=[];var e=t.$options;e.props&&cr(t,e.props),e.methods&&yr(t,e.methods),e.data?sr(t):It(t._data={},!0),e.computed&&dr(t,e.computed),e.watch&&e.watch!==at&&br(t,e.watch)}function cr(t,e){var n=t.$options.propsData||{},r=t._props={},i=t.$options._propKeys=[],o=!t.$parent;o||jt(!1);var a=function(o){i.push(o);var a=Yt(o,e,n,t);Tt(r,o,a),o in t||ar(t,"_props",o)};for(var u in e)a(u);jt(!0)}function sr(t){var e=t.$options.data;e=t._data="function"===typeof e?fr(e,t):e||{},l(e)||(e={});var n=Object.keys(e),r=t.$options.props,i=(t.$options.methods,n.length);while(i--){var o=n[i];0,r&&w(r,o)||G(o)||ar(t,"_data",o)}It(e,!0)}function fr(t,e){mt();try{return t.call(e,e)}catch(Aa){return re(Aa,e,"data()"),{}}finally{gt()}}var lr={lazy:!0};function dr(t,e){var n=t._computedWatchers=Object.create(null),r=st();for(var i in e){var o=e[i],a="function"===typeof o?o:o.get;0,r||(n[i]=new ir(t,a||I,I,lr)),i in t||pr(t,i,o)}}function pr(t,e,n){var r=!st();"function"===typeof n?(or.get=r?hr(e):vr(n),or.set=I):(or.get=n.get?r&&!1!==n.cache?hr(e):vr(n.get):I,or.set=n.set||I),Object.defineProperty(t,e,or)}function hr(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),yt.target&&e.depend(),e.value}}function vr(t){return function(){return t.call(this,this)}}function yr(t,e){t.$options.props;for(var n in e)t[n]="function"!==typeof e[n]?I:j(e[n],t)}function br(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)mr(t,n,r[i]);else mr(t,n,r)}}function mr(t,e,n,r){return l(n)&&(r=n,n=n.handler),"string"===typeof n&&(n=t[n]),t.$watch(e,n,r)}function gr(t){var e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=Ft,t.prototype.$delete=Nt,t.prototype.$watch=function(t,e,n){var r=this;if(l(e))return mr(r,t,e,n);n=n||{},n.user=!0;var i=new ir(r,t,e,n);if(n.immediate){var o='callback for immediate watcher "'+i.expression+'"';mt(),ie(e,r,[i.value],r,o),gt()}return function(){i.teardown()}}}var _r=0;function wr(t){t.prototype._init=function(t){var e=this;e._uid=_r++,e._isVue=!0,t&&t._isComponent?xr(e,t):e.$options=Jt(Sr(e.constructor),t||{},e),e._renderProxy=e,e._self=e,In(e),En(e),mn(e),Un(e,"beforeCreate"),Me(e),ur(e),je(e),Un(e,"created"),e.$options.el&&e.$mount(e.$options.el)}}function xr(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}function Sr(t){var e=t.options;if(t.super){var n=Sr(t.super),r=t.superOptions;if(n!==r){t.superOptions=n;var i=Or(t);i&&R(t.extendOptions,i),e=t.options=Jt(n,t.extendOptions),e.name&&(e.components[e.name]=t)}}return e}function Or(t){var e,n=t.options,r=t.sealedOptions;for(var i in n)n[i]!==r[i]&&(e||(e={}),e[i]=n[i]);return e}function Ar(t){this._init(t)}function Er(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=M(arguments,1);return n.unshift(this),"function"===typeof t.install?t.install.apply(t,n):"function"===typeof t&&t.apply(null,n),e.push(t),this}}function kr(t){t.mixin=function(t){return this.options=Jt(this.options,t),this}}function Cr(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,i=t._Ctor||(t._Ctor={});if(i[r])return i[r];var o=t.name||n.options.name;var a=function(t){this._init(t)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=e++,a.options=Jt(n.options,t),a["super"]=n,a.options.props&&$r(a),a.options.computed&&jr(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,U.forEach((function(t){a[t]=n[t]})),o&&(a.options.components[o]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=R({},a.options),i[r]=a,a}}function $r(t){var e=t.options.props;for(var n in e)ar(t.prototype,"_props",n)}function jr(t){var e=t.options.computed;for(var n in e)pr(t.prototype,n,e[n])}function Mr(t){U.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&l(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"===typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}function Rr(t){return t&&(t.Ctor.options.name||t.tag)}function Pr(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"===typeof t?t.split(",").indexOf(e)>-1:!!d(t)&&t.test(e)}function Ir(t,e){var n=t.cache,r=t.keys,i=t._vnode;for(var o in n){var a=n[o];if(a){var u=a.name;u&&!e(u)&&Tr(n,o,r,i)}}}function Tr(t,e,n,r){var i=t[e];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),t[e]=null,g(n,e)}wr(Ar),gr(Ar),Mn(Ar),Tn(Ar),wn(Ar);var Fr=[String,RegExp,Array],Nr={name:"keep-alive",abstract:!0,props:{include:Fr,exclude:Fr,max:[String,Number]},methods:{cacheVNode:function(){var t=this,e=t.cache,n=t.keys,r=t.vnodeToCache,i=t.keyToCache;if(r){var o=r.tag,a=r.componentInstance,u=r.componentOptions;e[i]={name:Rr(u),tag:o,componentInstance:a},n.push(i),this.max&&n.length>parseInt(this.max)&&Tr(e,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Tr(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Ir(t,(function(t){return Pr(e,t)}))})),this.$watch("exclude",(function(e){Ir(t,(function(t){return!Pr(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=An(t),n=e&&e.componentOptions;if(n){var r=Rr(n),i=this,o=i.include,a=i.exclude;if(o&&(!r||!Pr(o,r))||a&&r&&Pr(a,r))return e;var u=this,c=u.cache,s=u.keys,f=null==e.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):e.key;c[f]?(e.componentInstance=c[f].componentInstance,g(s,f),s.push(f)):(this.vnodeToCache=e,this.keyToCache=f),e.data.keepAlive=!0}return e||t&&t[0]}},Lr={KeepAlive:Nr};function Dr(t){var e={get:function(){return B}};Object.defineProperty(t,"config",e),t.util={warn:ht,extend:R,mergeOptions:Jt,defineReactive:Tt},t.set=Ft,t.delete=Nt,t.nextTick=ye,t.observable=function(t){return It(t),t},t.options=Object.create(null),U.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,R(t.options.components,Lr),Er(t),kr(t),Cr(t),Mr(t)}Dr(Ar),Object.defineProperty(Ar.prototype,"$isServer",{get:st}),Object.defineProperty(Ar.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Ar,"FunctionalRenderContext",{value:tn}),Ar.version="2.6.14";var Vr=b("style,class"),Ur=b("input,textarea,option,select,progress"),qr=function(t,e,n){return"value"===n&&Ur(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Br=b("contenteditable,draggable,spellcheck"),zr=b("events,caret,typing,plaintext-only"),Gr=function(t,e){return Xr(e)||"false"===e?"false":"contenteditable"===t&&zr(e)?e:"true"},Wr=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Hr="http://www.w3.org/1999/xlink",Kr=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Jr=function(t){return Kr(t)?t.slice(6,t.length):""},Xr=function(t){return null==t||!1===t};function Yr(t){var e=t.data,n=t,r=t;while(o(r.componentInstance))r=r.componentInstance._vnode,r&&r.data&&(e=Zr(r.data,e));while(o(n=n.parent))n&&n.data&&(e=Zr(e,n.data));return Qr(e.staticClass,e.class)}function Zr(t,e){return{staticClass:ti(t.staticClass,e.staticClass),class:o(t.class)?[t.class,e.class]:e.class}}function Qr(t,e){return o(t)||o(e)?ti(t,ei(e)):""}function ti(t,e){return t?e?t+" "+e:t:e||""}function ei(t){return Array.isArray(t)?ni(t):s(t)?ri(t):"string"===typeof t?t:""}function ni(t){for(var e,n="",r=0,i=t.length;r<i;r++)o(e=ei(t[r]))&&""!==e&&(n&&(n+=" "),n+=e);return n}function ri(t){var e="";for(var n in t)t[n]&&(e&&(e+=" "),e+=n);return e}var ii={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},oi=b("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),ai=b("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),ui=function(t){return oi(t)||ai(t)};function ci(t){return ai(t)?"svg":"math"===t?"math":void 0}var si=Object.create(null);function fi(t){if(!Y)return!0;if(ui(t))return!1;if(t=t.toLowerCase(),null!=si[t])return si[t];var e=document.createElement(t);return t.indexOf("-")>-1?si[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:si[t]=/HTMLUnknownElement/.test(e.toString())}var li=b("text,number,password,search,email,tel,url");function di(t){if("string"===typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}function pi(t,e){var n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n}function hi(t,e){return document.createElementNS(ii[t],e)}function vi(t){return document.createTextNode(t)}function yi(t){return document.createComment(t)}function bi(t,e,n){t.insertBefore(e,n)}function mi(t,e){t.removeChild(e)}function gi(t,e){t.appendChild(e)}function _i(t){return t.parentNode}function wi(t){return t.nextSibling}function xi(t){return t.tagName}function Si(t,e){t.textContent=e}function Oi(t,e){t.setAttribute(e,"")}var Ai=Object.freeze({createElement:pi,createElementNS:hi,createTextNode:vi,createComment:yi,insertBefore:bi,removeChild:mi,appendChild:gi,parentNode:_i,nextSibling:wi,tagName:xi,setTextContent:Si,setStyleScope:Oi}),Ei={create:function(t,e){ki(e)},update:function(t,e){t.data.ref!==e.data.ref&&(ki(t,!0),ki(e))},destroy:function(t){ki(t,!0)}};function ki(t,e){var n=t.data.ref;if(o(n)){var r=t.context,i=t.componentInstance||t.elm,a=r.$refs;e?Array.isArray(a[n])?g(a[n],i):a[n]===i&&(a[n]=void 0):t.data.refInFor?Array.isArray(a[n])?a[n].indexOf(i)<0&&a[n].push(i):a[n]=[i]:a[n]=i}}var Ci=new _t("",{},[]),$i=["create","activate","update","remove","destroy"];function ji(t,e){return t.key===e.key&&t.asyncFactory===e.asyncFactory&&(t.tag===e.tag&&t.isComment===e.isComment&&o(t.data)===o(e.data)&&Mi(t,e)||a(t.isAsyncPlaceholder)&&i(e.asyncFactory.error))}function Mi(t,e){if("input"!==t.tag)return!0;var n,r=o(n=t.data)&&o(n=n.attrs)&&n.type,i=o(n=e.data)&&o(n=n.attrs)&&n.type;return r===i||li(r)&&li(i)}function Ri(t,e,n){var r,i,a={};for(r=e;r<=n;++r)i=t[r].key,o(i)&&(a[i]=r);return a}function Pi(t){var e,n,r={},u=t.modules,s=t.nodeOps;for(e=0;e<$i.length;++e)for(r[$i[e]]=[],n=0;n<u.length;++n)o(u[n][$i[e]])&&r[$i[e]].push(u[n][$i[e]]);function f(t){return new _t(s.tagName(t).toLowerCase(),{},[],void 0,t)}function l(t,e){function n(){0===--n.listeners&&d(t)}return n.listeners=e,n}function d(t){var e=s.parentNode(t);o(e)&&s.removeChild(e,t)}function p(t,e,n,r,i,u,c){if(o(t.elm)&&o(u)&&(t=u[c]=Ot(t)),t.isRootInsert=!i,!h(t,e,n,r)){var f=t.data,l=t.children,d=t.tag;o(d)?(t.elm=t.ns?s.createElementNS(t.ns,d):s.createElement(d,t),x(t),g(t,l,e),o(f)&&w(t,e),m(n,t.elm,r)):a(t.isComment)?(t.elm=s.createComment(t.text),m(n,t.elm,r)):(t.elm=s.createTextNode(t.text),m(n,t.elm,r))}}function h(t,e,n,r){var i=t.data;if(o(i)){var u=o(t.componentInstance)&&i.keepAlive;if(o(i=i.hook)&&o(i=i.init)&&i(t,!1),o(t.componentInstance))return v(t,e),m(n,t.elm,r),a(u)&&y(t,e,n,r),!0}}function v(t,e){o(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,_(t)?(w(t,e),x(t)):(ki(t),e.push(t))}function y(t,e,n,i){var a,u=t;while(u.componentInstance)if(u=u.componentInstance._vnode,o(a=u.data)&&o(a=a.transition)){for(a=0;a<r.activate.length;++a)r.activate[a](Ci,u);e.push(u);break}m(n,t.elm,i)}function m(t,e,n){o(t)&&(o(n)?s.parentNode(n)===t&&s.insertBefore(t,e,n):s.appendChild(t,e))}function g(t,e,n){if(Array.isArray(e)){0;for(var r=0;r<e.length;++r)p(e[r],n,t.elm,null,!0,e,r)}else c(t.text)&&s.appendChild(t.elm,s.createTextNode(String(t.text)))}function _(t){while(t.componentInstance)t=t.componentInstance._vnode;return o(t.tag)}function w(t,n){for(var i=0;i<r.create.length;++i)r.create[i](Ci,t);e=t.data.hook,o(e)&&(o(e.create)&&e.create(Ci,t),o(e.insert)&&n.push(t))}function x(t){var e;if(o(e=t.fnScopeId))s.setStyleScope(t.elm,e);else{var n=t;while(n)o(e=n.context)&&o(e=e.$options._scopeId)&&s.setStyleScope(t.elm,e),n=n.parent}o(e=Rn)&&e!==t.context&&e!==t.fnContext&&o(e=e.$options._scopeId)&&s.setStyleScope(t.elm,e)}function S(t,e,n,r,i,o){for(;r<=i;++r)p(n[r],o,t,e,!1,n,r)}function O(t){var e,n,i=t.data;if(o(i))for(o(e=i.hook)&&o(e=e.destroy)&&e(t),e=0;e<r.destroy.length;++e)r.destroy[e](t);if(o(e=t.children))for(n=0;n<t.children.length;++n)O(t.children[n])}function A(t,e,n){for(;e<=n;++e){var r=t[e];o(r)&&(o(r.tag)?(E(r),O(r)):d(r.elm))}}function E(t,e){if(o(e)||o(t.data)){var n,i=r.remove.length+1;for(o(e)?e.listeners+=i:e=l(t.elm,i),o(n=t.componentInstance)&&o(n=n._vnode)&&o(n.data)&&E(n,e),n=0;n<r.remove.length;++n)r.remove[n](t,e);o(n=t.data.hook)&&o(n=n.remove)?n(t,e):e()}else d(t.elm)}function k(t,e,n,r,a){var u,c,f,l,d=0,h=0,v=e.length-1,y=e[0],b=e[v],m=n.length-1,g=n[0],_=n[m],w=!a;while(d<=v&&h<=m)i(y)?y=e[++d]:i(b)?b=e[--v]:ji(y,g)?($(y,g,r,n,h),y=e[++d],g=n[++h]):ji(b,_)?($(b,_,r,n,m),b=e[--v],_=n[--m]):ji(y,_)?($(y,_,r,n,m),w&&s.insertBefore(t,y.elm,s.nextSibling(b.elm)),y=e[++d],_=n[--m]):ji(b,g)?($(b,g,r,n,h),w&&s.insertBefore(t,b.elm,y.elm),b=e[--v],g=n[++h]):(i(u)&&(u=Ri(e,d,v)),c=o(g.key)?u[g.key]:C(g,e,d,v),i(c)?p(g,r,t,y.elm,!1,n,h):(f=e[c],ji(f,g)?($(f,g,r,n,h),e[c]=void 0,w&&s.insertBefore(t,f.elm,y.elm)):p(g,r,t,y.elm,!1,n,h)),g=n[++h]);d>v?(l=i(n[m+1])?null:n[m+1].elm,S(t,l,n,h,m,r)):h>m&&A(e,d,v)}function C(t,e,n,r){for(var i=n;i<r;i++){var a=e[i];if(o(a)&&ji(t,a))return i}}function $(t,e,n,u,c,f){if(t!==e){o(e.elm)&&o(u)&&(e=u[c]=Ot(e));var l=e.elm=t.elm;if(a(t.isAsyncPlaceholder))o(e.asyncFactory.resolved)?R(t.elm,e,n):e.isAsyncPlaceholder=!0;else if(a(e.isStatic)&&a(t.isStatic)&&e.key===t.key&&(a(e.isCloned)||a(e.isOnce)))e.componentInstance=t.componentInstance;else{var d,p=e.data;o(p)&&o(d=p.hook)&&o(d=d.prepatch)&&d(t,e);var h=t.children,v=e.children;if(o(p)&&_(e)){for(d=0;d<r.update.length;++d)r.update[d](t,e);o(d=p.hook)&&o(d=d.update)&&d(t,e)}i(e.text)?o(h)&&o(v)?h!==v&&k(l,h,v,n,f):o(v)?(o(t.text)&&s.setTextContent(l,""),S(l,null,v,0,v.length-1,n)):o(h)?A(h,0,h.length-1):o(t.text)&&s.setTextContent(l,""):t.text!==e.text&&s.setTextContent(l,e.text),o(p)&&o(d=p.hook)&&o(d=d.postpatch)&&d(t,e)}}}function j(t,e,n){if(a(n)&&o(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r<e.length;++r)e[r].data.hook.insert(e[r])}var M=b("attrs,class,staticClass,staticStyle,key");function R(t,e,n,r){var i,u=e.tag,c=e.data,s=e.children;if(r=r||c&&c.pre,e.elm=t,a(e.isComment)&&o(e.asyncFactory))return e.isAsyncPlaceholder=!0,!0;if(o(c)&&(o(i=c.hook)&&o(i=i.init)&&i(e,!0),o(i=e.componentInstance)))return v(e,n),!0;if(o(u)){if(o(s))if(t.hasChildNodes())if(o(i=c)&&o(i=i.domProps)&&o(i=i.innerHTML)){if(i!==t.innerHTML)return!1}else{for(var f=!0,l=t.firstChild,d=0;d<s.length;d++){if(!l||!R(l,s[d],n,r)){f=!1;break}l=l.nextSibling}if(!f||l)return!1}else g(e,s,n);if(o(c)){var p=!1;for(var h in c)if(!M(h)){p=!0,w(e,n);break}!p&&c["class"]&&me(c["class"])}}else t.data!==e.text&&(t.data=e.text);return!0}return function(t,e,n,u){if(!i(e)){var c=!1,l=[];if(i(t))c=!0,p(e,l);else{var d=o(t.nodeType);if(!d&&ji(t,e))$(t,e,l,null,null,u);else{if(d){if(1===t.nodeType&&t.hasAttribute(V)&&(t.removeAttribute(V),n=!0),a(n)&&R(t,e,l))return j(e,l,!0),t;t=f(t)}var h=t.elm,v=s.parentNode(h);if(p(e,l,h._leaveCb?null:v,s.nextSibling(h)),o(e.parent)){var y=e.parent,b=_(e);while(y){for(var m=0;m<r.destroy.length;++m)r.destroy[m](y);if(y.elm=e.elm,b){for(var g=0;g<r.create.length;++g)r.create[g](Ci,y);var w=y.data.hook.insert;if(w.merged)for(var x=1;x<w.fns.length;x++)w.fns[x]()}else ki(y);y=y.parent}}o(v)?A([t],0,0):o(t.tag)&&O(t)}}return j(e,l,c),e.elm}o(t)&&O(t)}}var Ii={create:Ti,update:Ti,destroy:function(t){Ti(t,Ci)}};function Ti(t,e){(t.data.directives||e.data.directives)&&Fi(t,e)}function Fi(t,e){var n,r,i,o=t===Ci,a=e===Ci,u=Li(t.data.directives,t.context),c=Li(e.data.directives,e.context),s=[],f=[];for(n in c)r=u[n],i=c[n],r?(i.oldValue=r.value,i.oldArg=r.arg,Vi(i,"update",e,t),i.def&&i.def.componentUpdated&&f.push(i)):(Vi(i,"bind",e,t),i.def&&i.def.inserted&&s.push(i));if(s.length){var l=function(){for(var n=0;n<s.length;n++)Vi(s[n],"inserted",e,t)};o?Se(e,"insert",l):l()}if(f.length&&Se(e,"postpatch",(function(){for(var n=0;n<f.length;n++)Vi(f[n],"componentUpdated",e,t)})),!o)for(n in u)c[n]||Vi(u[n],"unbind",t,t,a)}var Ni=Object.create(null);function Li(t,e){var n,r,i=Object.create(null);if(!t)return i;for(n=0;n<t.length;n++)r=t[n],r.modifiers||(r.modifiers=Ni),i[Di(r)]=r,r.def=Xt(e.$options,"directives",r.name,!0);return i}function Di(t){return t.rawName||t.name+"."+Object.keys(t.modifiers||{}).join(".")}function Vi(t,e,n,r,i){var o=t.def&&t.def[e];if(o)try{o(n.elm,t,n,r,i)}catch(Aa){re(Aa,n.context,"directive "+t.name+" "+e+" hook")}}var Ui=[Ei,Ii];function qi(t,e){var n=e.componentOptions;if((!o(n)||!1!==n.Ctor.options.inheritAttrs)&&(!i(t.data.attrs)||!i(e.data.attrs))){var r,a,u,c=e.elm,s=t.data.attrs||{},f=e.data.attrs||{};for(r in o(f.__ob__)&&(f=e.data.attrs=R({},f)),f)a=f[r],u=s[r],u!==a&&Bi(c,r,a,e.data.pre);for(r in(et||rt)&&f.value!==s.value&&Bi(c,"value",f.value),s)i(f[r])&&(Kr(r)?c.removeAttributeNS(Hr,Jr(r)):Br(r)||c.removeAttribute(r))}}function Bi(t,e,n,r){r||t.tagName.indexOf("-")>-1?zi(t,e,n):Wr(e)?Xr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Br(e)?t.setAttribute(e,Gr(e,n)):Kr(e)?Xr(n)?t.removeAttributeNS(Hr,Jr(e)):t.setAttributeNS(Hr,e,n):zi(t,e,n)}function zi(t,e,n){if(Xr(n))t.removeAttribute(e);else{if(et&&!nt&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function e(n){n.stopImmediatePropagation(),t.removeEventListener("input",e)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Gi={create:qi,update:qi};function Wi(t,e){var n=e.elm,r=e.data,a=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(a)||i(a.staticClass)&&i(a.class)))){var u=Yr(e),c=n._transitionClasses;o(c)&&(u=ti(u,ei(c))),u!==n._prevClass&&(n.setAttribute("class",u),n._prevClass=u)}}var Hi,Ki={create:Wi,update:Wi},Ji="__r",Xi="__c";function Yi(t){if(o(t[Ji])){var e=et?"change":"input";t[e]=[].concat(t[Ji],t[e]||[]),delete t[Ji]}o(t[Xi])&&(t.change=[].concat(t[Xi],t.change||[]),delete t[Xi])}function Zi(t,e,n){var r=Hi;return function i(){var o=e.apply(null,arguments);null!==o&&eo(t,i,n,r)}}var Qi=ce&&!(ot&&Number(ot[1])<=53);function to(t,e,n,r){if(Qi){var i=Jn,o=e;e=o._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=i||t.timeStamp<=0||t.target.ownerDocument!==document)return o.apply(this,arguments)}}Hi.addEventListener(t,e,ut?{capture:n,passive:r}:n)}function eo(t,e,n,r){(r||Hi).removeEventListener(t,e._wrapper||e,n)}function no(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Hi=e.elm,Yi(n),xe(n,r,to,eo,Zi,e.context),Hi=void 0}}var ro,io={create:no,update:no};function oo(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,a=e.elm,u=t.data.domProps||{},c=e.data.domProps||{};for(n in o(c.__ob__)&&(c=e.data.domProps=R({},c)),u)n in c||(a[n]="");for(n in c){if(r=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===u[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=r;var s=i(r)?"":String(r);ao(a,s)&&(a.value=s)}else if("innerHTML"===n&&ai(a.tagName)&&i(a.innerHTML)){ro=ro||document.createElement("div"),ro.innerHTML="<svg>"+r+"</svg>";var f=ro.firstChild;while(a.firstChild)a.removeChild(a.firstChild);while(f.firstChild)a.appendChild(f.firstChild)}else if(r!==u[n])try{a[n]=r}catch(Aa){}}}}function ao(t,e){return!t.composing&&("OPTION"===t.tagName||uo(t,e)||co(t,e))}function uo(t,e){var n=!0;try{n=document.activeElement!==t}catch(Aa){}return n&&t.value!==e}function co(t,e){var n=t.value,r=t._vModifiers;if(o(r)){if(r.number)return y(n)!==y(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}var so={create:oo,update:oo},fo=x((function(t){var e={},n=/;(?![^(]*\))/g,r=/:(.+)/;return t.split(n).forEach((function(t){if(t){var n=t.split(r);n.length>1&&(e[n[0].trim()]=n[1].trim())}})),e}));function lo(t){var e=po(t.style);return t.staticStyle?R(t.staticStyle,e):e}function po(t){return Array.isArray(t)?P(t):"string"===typeof t?fo(t):t}function ho(t,e){var n,r={};if(e){var i=t;while(i.componentInstance)i=i.componentInstance._vnode,i&&i.data&&(n=lo(i.data))&&R(r,n)}(n=lo(t.data))&&R(r,n);var o=t;while(o=o.parent)o.data&&(n=lo(o.data))&&R(r,n);return r}var vo,yo=/^--/,bo=/\s*!important$/,mo=function(t,e,n){if(yo.test(e))t.style.setProperty(e,n);else if(bo.test(n))t.style.setProperty(k(e),n.replace(bo,""),"important");else{var r=_o(e);if(Array.isArray(n))for(var i=0,o=n.length;i<o;i++)t.style[r]=n[i];else t.style[r]=n}},go=["Webkit","Moz","ms"],_o=x((function(t){if(vo=vo||document.createElement("div").style,t=O(t),"filter"!==t&&t in vo)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),n=0;n<go.length;n++){var r=go[n]+e;if(r in vo)return r}}));function wo(t,e){var n=e.data,r=t.data;if(!(i(n.staticStyle)&&i(n.style)&&i(r.staticStyle)&&i(r.style))){var a,u,c=e.elm,s=r.staticStyle,f=r.normalizedStyle||r.style||{},l=s||f,d=po(e.data.style)||{};e.data.normalizedStyle=o(d.__ob__)?R({},d):d;var p=ho(e,!0);for(u in l)i(p[u])&&mo(c,u,"");for(u in p)a=p[u],a!==l[u]&&mo(c,u,null==a?"":a)}}var xo={create:wo,update:wo},So=/\s+/;function Oo(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(So).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function Ao(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(So).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";while(n.indexOf(r)>=0)n=n.replace(r," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function Eo(t){if(t){if("object"===n(t)){var e={};return!1!==t.css&&R(e,ko(t.name||"v")),R(e,t),e}return"string"===typeof t?ko(t):void 0}}var ko=x((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),Co=Y&&!nt,$o="transition",jo="animation",Mo="transition",Ro="transitionend",Po="animation",Io="animationend";Co&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Mo="WebkitTransition",Ro="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Po="WebkitAnimation",Io="webkitAnimationEnd"));var To=Y?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Fo(t){To((function(){To(t)}))}function No(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Oo(t,e))}function Lo(t,e){t._transitionClasses&&g(t._transitionClasses,e),Ao(t,e)}function Do(t,e,n){var r=Uo(t,e),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var u=i===$o?Ro:Io,c=0,s=function(){t.removeEventListener(u,f),n()},f=function(e){e.target===t&&++c>=a&&s()};setTimeout((function(){c<a&&s()}),o+1),t.addEventListener(u,f)}var Vo=/\b(transform|all)(,|$)/;function Uo(t,e){var n,r=window.getComputedStyle(t),i=(r[Mo+"Delay"]||"").split(", "),o=(r[Mo+"Duration"]||"").split(", "),a=qo(i,o),u=(r[Po+"Delay"]||"").split(", "),c=(r[Po+"Duration"]||"").split(", "),s=qo(u,c),f=0,l=0;e===$o?a>0&&(n=$o,f=a,l=o.length):e===jo?s>0&&(n=jo,f=s,l=c.length):(f=Math.max(a,s),n=f>0?a>s?$o:jo:null,l=n?n===$o?o.length:c.length:0);var d=n===$o&&Vo.test(r[Mo+"Property"]);return{type:n,timeout:f,propCount:l,hasTransform:d}}function qo(t,e){while(t.length<e.length)t=t.concat(t);return Math.max.apply(null,e.map((function(e,n){return Bo(e)+Bo(t[n])})))}function Bo(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}function zo(t,e){var n=t.elm;o(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._leaveCb());var r=Eo(t.data.transition);if(!i(r)&&!o(n._enterCb)&&1===n.nodeType){var a=r.css,u=r.type,c=r.enterClass,f=r.enterToClass,l=r.enterActiveClass,d=r.appearClass,p=r.appearToClass,h=r.appearActiveClass,v=r.beforeEnter,b=r.enter,m=r.afterEnter,g=r.enterCancelled,_=r.beforeAppear,w=r.appear,x=r.afterAppear,S=r.appearCancelled,O=r.duration,A=Rn,E=Rn.$vnode;while(E&&E.parent)A=E.context,E=E.parent;var k=!A._isMounted||!t.isRootInsert;if(!k||w||""===w){var C=k&&d?d:c,$=k&&h?h:l,j=k&&p?p:f,M=k&&_||v,R=k&&"function"===typeof w?w:b,P=k&&x||m,I=k&&S||g,T=y(s(O)?O.enter:O);0;var F=!1!==a&&!nt,N=Ho(R),L=n._enterCb=D((function(){F&&(Lo(n,j),Lo(n,$)),L.cancelled?(F&&Lo(n,C),I&&I(n)):P&&P(n),n._enterCb=null}));t.data.show||Se(t,"insert",(function(){var e=n.parentNode,r=e&&e._pending&&e._pending[t.key];r&&r.tag===t.tag&&r.elm._leaveCb&&r.elm._leaveCb(),R&&R(n,L)})),M&&M(n),F&&(No(n,C),No(n,$),Fo((function(){Lo(n,C),L.cancelled||(No(n,j),N||(Wo(T)?setTimeout(L,T):Do(n,u,L)))}))),t.data.show&&(e&&e(),R&&R(n,L)),F||N||L()}}}function Go(t,e){var n=t.elm;o(n._enterCb)&&(n._enterCb.cancelled=!0,n._enterCb());var r=Eo(t.data.transition);if(i(r)||1!==n.nodeType)return e();if(!o(n._leaveCb)){var a=r.css,u=r.type,c=r.leaveClass,f=r.leaveToClass,l=r.leaveActiveClass,d=r.beforeLeave,p=r.leave,h=r.afterLeave,v=r.leaveCancelled,b=r.delayLeave,m=r.duration,g=!1!==a&&!nt,_=Ho(p),w=y(s(m)?m.leave:m);0;var x=n._leaveCb=D((function(){n.parentNode&&n.parentNode._pending&&(n.parentNode._pending[t.key]=null),g&&(Lo(n,f),Lo(n,l)),x.cancelled?(g&&Lo(n,c),v&&v(n)):(e(),h&&h(n)),n._leaveCb=null}));b?b(S):S()}function S(){x.cancelled||(!t.data.show&&n.parentNode&&((n.parentNode._pending||(n.parentNode._pending={}))[t.key]=t),d&&d(n),g&&(No(n,c),No(n,l),Fo((function(){Lo(n,c),x.cancelled||(No(n,f),_||(Wo(w)?setTimeout(x,w):Do(n,u,x)))}))),p&&p(n,x),g||_||x())}}function Wo(t){return"number"===typeof t&&!isNaN(t)}function Ho(t){if(i(t))return!1;var e=t.fns;return o(e)?Ho(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function Ko(t,e){!0!==e.data.show&&zo(e)}var Jo=Y?{create:Ko,activate:Ko,remove:function(t,e){!0!==t.data.show?Go(t,e):e()}}:{},Xo=[Gi,Ki,io,so,xo,Jo],Yo=Xo.concat(Ui),Zo=Pi({nodeOps:Ai,modules:Yo});nt&&document.addEventListener("selectionchange",(function(){var t=document.activeElement;t&&t.vmodel&&aa(t,"input")}));var Qo={inserted:function(t,e,n,r){"select"===n.tag?(r.elm&&!r.elm._vOptions?Se(n,"postpatch",(function(){Qo.componentUpdated(t,e,n)})):ta(t,e,n.context),t._vOptions=[].map.call(t.options,ra)):("textarea"===n.tag||li(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",ia),t.addEventListener("compositionend",oa),t.addEventListener("change",oa),nt&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){ta(t,e,n.context);var r=t._vOptions,i=t._vOptions=[].map.call(t.options,ra);if(i.some((function(t,e){return!N(t,r[e])}))){var o=t.multiple?e.value.some((function(t){return na(t,i)})):e.value!==e.oldValue&&na(e.value,i);o&&aa(t,"change")}}}};function ta(t,e,n){ea(t,e,n),(et||rt)&&setTimeout((function(){ea(t,e,n)}),0)}function ea(t,e,n){var r=e.value,i=t.multiple;if(!i||Array.isArray(r)){for(var o,a,u=0,c=t.options.length;u<c;u++)if(a=t.options[u],i)o=L(r,ra(a))>-1,a.selected!==o&&(a.selected=o);else if(N(ra(a),r))return void(t.selectedIndex!==u&&(t.selectedIndex=u));i||(t.selectedIndex=-1)}}function na(t,e){return e.every((function(e){return!N(e,t)}))}function ra(t){return"_value"in t?t._value:t.value}function ia(t){t.target.composing=!0}function oa(t){t.target.composing&&(t.target.composing=!1,aa(t.target,"input"))}function aa(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function ua(t){return!t.componentInstance||t.data&&t.data.transition?t:ua(t.componentInstance._vnode)}var ca={bind:function(t,e,n){var r=e.value;n=ua(n);var i=n.data&&n.data.transition,o=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&i?(n.data.show=!0,zo(n,(function(){t.style.display=o}))):t.style.display=r?o:"none"},update:function(t,e,n){var r=e.value,i=e.oldValue;if(!r!==!i){n=ua(n);var o=n.data&&n.data.transition;o?(n.data.show=!0,r?zo(n,(function(){t.style.display=t.__vOriginalDisplay})):Go(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none"}},unbind:function(t,e,n,r,i){i||(t.style.display=t.__vOriginalDisplay)}},sa={model:Qo,show:ca},fa={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function la(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?la(An(e.children)):t}function da(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var i=n._parentListeners;for(var o in i)e[O(o)]=i[o];return e}function pa(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}function ha(t){while(t=t.parent)if(t.data.transition)return!0}function va(t,e){return e.key===t.key&&e.tag===t.tag}var ya=function(t){return t.tag||Te(t)},ba=function(t){return"show"===t.name},ma={name:"transition",props:fa,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(ya),n.length)){0;var r=this.mode;0;var i=n[0];if(ha(this.$vnode))return i;var o=la(i);if(!o)return i;if(this._leaving)return pa(t,i);var a="__transition-"+this._uid+"-";o.key=null==o.key?o.isComment?a+"comment":a+o.tag:c(o.key)?0===String(o.key).indexOf(a)?o.key:a+o.key:o.key;var u=(o.data||(o.data={})).transition=da(this),s=this._vnode,f=la(s);if(o.data.directives&&o.data.directives.some(ba)&&(o.data.show=!0),f&&f.data&&!va(o,f)&&!Te(f)&&(!f.componentInstance||!f.componentInstance._vnode.isComment)){var l=f.data.transition=R({},u);if("out-in"===r)return this._leaving=!0,Se(l,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),pa(t,i);if("in-out"===r){if(Te(o))return s;var d,p=function(){d()};Se(u,"afterEnter",p),Se(u,"enterCancelled",p),Se(l,"delayLeave",(function(t){d=t}))}}return i}}},ga=R({tag:String,moveClass:String},fa);delete ga.mode;var _a={props:ga,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var i=Pn(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,i(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=da(this),u=0;u<i.length;u++){var c=i[u];if(c.tag)if(null!=c.key&&0!==String(c.key).indexOf("__vlist"))o.push(c),n[c.key]=c,(c.data||(c.data={})).transition=a;else;}if(r){for(var s=[],f=[],l=0;l<r.length;l++){var d=r[l];d.data.transition=a,d.data.pos=d.elm.getBoundingClientRect(),n[d.key]?s.push(d):f.push(d)}this.kept=t(e,null,s),this.removed=f}return t(e,null,o)},updated:function(){var t=this.prevChildren,e=this.moveClass||(this.name||"v")+"-move";t.length&&this.hasMove(t[0].elm,e)&&(t.forEach(wa),t.forEach(xa),t.forEach(Sa),this._reflow=document.body.offsetHeight,t.forEach((function(t){if(t.data.moved){var n=t.elm,r=n.style;No(n,e),r.transform=r.WebkitTransform=r.transitionDuration="",n.addEventListener(Ro,n._moveCb=function t(r){r&&r.target!==n||r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Ro,t),n._moveCb=null,Lo(n,e))})}})))},methods:{hasMove:function(t,e){if(!Co)return!1;if(this._hasMove)return this._hasMove;var n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach((function(t){Ao(n,t)})),Oo(n,e),n.style.display="none",this.$el.appendChild(n);var r=Uo(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}};function wa(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function xa(t){t.data.newPos=t.elm.getBoundingClientRect()}function Sa(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,i=e.top-n.top;if(r||i){t.data.moved=!0;var o=t.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}var Oa={Transition:ma,TransitionGroup:_a};Ar.config.mustUseProp=qr,Ar.config.isReservedTag=ui,Ar.config.isReservedAttr=Vr,Ar.config.getTagNamespace=ci,Ar.config.isUnknownElement=fi,R(Ar.options.directives,sa),R(Ar.options.components,Oa),Ar.prototype.__patch__=Y?Zo:I,Ar.prototype.$mount=function(t,e){return t=t&&Y?di(t):void 0,Fn(this,t,e)},Y&&setTimeout((function(){B.devtools&&ft&&ft.emit("init",Ar)}),0),e["default"]=Ar}.call(this,n("2409"))},"432f":function(t,e,n){var r=n("e99b");r(r.S,"Date",{now:function(){return(new Date).getTime()}})},"43ec":function(t,e,n){"use strict";var r=n("1663")(!0);t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},4441:function(t,e,n){var r=n("3471"),i=n("21d9").f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],u=function(t){try{return i(t)}catch(e){return a.slice()}};t.exports.f=function(t){return a&&"[object Window]"==o.call(t)?u(t):i(r(t))}},"448b":function(t,e,n){var r=n("e99b");r(r.S,"Math",{signbit:function(t){return(t=+t)!=t?t:0==t?1/t==1/0:t>0}})},4836:function(t,e,n){var r=n("a86f"),i=n("9cff"),o=n("d4c9");t.exports=function(t,e){if(r(t),i(e)&&e.constructor===t)return e;var n=o.f(t),a=n.resolve;return a(e),n.promise}},4890:function(t,e,n){"use strict";var r=n("e99b"),i=n("e9aa")(2);r(r.P+r.F*!n("95b6")([].filter,!0),"Array",{filter:function(t){return i(this,t,arguments[1])}})},"48be":function(t,e,n){n("4b79")("WeakMap")},"49f2":function(t,e,n){var r=n("d8b3")("meta"),i=n("9cff"),o=n("4fd4"),a=n("bb8b").f,u=0,c=Object.isExtensible||function(){return!0},s=!n("0926")((function(){return c(Object.preventExtensions({}))})),f=function(t){a(t,r,{value:{i:"O"+ ++u,w:{}}})},l=function(t,e){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,r)){if(!c(t))return"F";if(!e)return"E";f(t)}return t[r].i},d=function(t,e){if(!o(t,r)){if(!c(t))return!0;if(!e)return!1;f(t)}return t[r].w},p=function(t){return s&&h.NEED&&c(t)&&!o(t,r)&&f(t),t},h=t.exports={KEY:r,NEED:!1,fastKey:l,getWeak:d,onFreeze:p}},"4abf":function(t,e,n){var r=n("8078"),i=n("addc");n("b2be")("getPrototypeOf",(function(){return function(t){return i(r(t))}}))},"4ae9":function(t,e,n){var r=n("9cff"),i=n("49f2").onFreeze;n("b2be")("seal",(function(t){return function(e){return t&&r(e)?t(i(e)):e}}))},"4b79":function(t,e,n){"use strict";var r=n("e99b"),i=n("3250"),o=n("1e4d"),a=n("2b37");t.exports=function(t){r(r.S,t,{from:function(t){var e,n,r,u,c=arguments[1];return i(this),e=void 0!==c,e&&i(c),void 0==t?new this:(n=[],e?(r=0,u=o(c,arguments[2],2),a(t,!1,(function(t){n.push(u(t,r++))}))):a(t,!1,n.push,n),new this(n))}})}},"4d33":function(t,e,n){"use strict";var r=n("e99b"),i=n("e9aa")(4);r(r.P+r.F*!n("95b6")([].every,!0),"Array",{every:function(t){return i(this,t,arguments[1])}})},"4e2b":function(t,e,n){n("b2be")("getOwnPropertyNames",(function(){return n("4441").f}))},"4e76":function(t,e,n){"use strict";n("6b6f")("blink",(function(t){return function(){return t(this,"blink","","")}}))},"4fd4":function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},5007:function(t,e,n){n("4b79")("WeakSet")},5173:function(t,e,n){var r=n("e99b"),i=n("0ee5"),o=n("6a2a");r(r.S,"Math",{fscale:function(t,e,n,r,a){return o(i(t,e,n,r,a))}})},5199:function(t,e,n){"use strict";var r=n("e99b"),i=n("201c"),o=n("db34"),a="endsWith",u=""[a];r(r.P+r.F*n("581c")(a),"String",{endsWith:function(t){var e=o(this,t,a),n=arguments.length>1?arguments[1]:void 0,r=i(e.length),c=void 0===n?r:Math.min(i(n),r),s=String(t);return u?u.call(e,s,c):e.slice(c-s.length,c)===s}})},"521c":function(t,e,n){n("94f0"),n("f5bd"),n("1084"),n("159a"),n("df84"),n("4abf"),n("32ea"),n("4e2b"),n("263d"),n("4ae9"),n("104a"),n("7892"),n("8868"),n("0d4c"),n("6ba0"),n("b4c1"),n("3f86"),n("9244"),n("0cdc"),n("a450"),n("69db"),n("d61b"),n("c325"),n("e680"),n("7896"),n("14d1"),n("a271"),n("fda7"),n("6e70"),n("3451"),n("1820"),n("6006"),n("c331"),n("839b"),n("118e"),n("567e"),n("dcda"),n("cbf7"),n("d3f0"),n("732c"),n("be33"),n("c1a5"),n("7a6b"),n("be86"),n("f4c1"),n("3e49"),n("a53a"),n("424f"),n("c7f7"),n("d38f"),n("d1cb0"),n("6c62"),n("cc27"),n("2d34"),n("6161"),n("0c84"),n("8018"),n("5199"),n("982e"),n("d7d8"),n("d31c"),n("ee06"),n("823b"),n("4e76"),n("c2c6"),n("a383"),n("e418"),n("15a6"),n("c084"),n("5289"),n("5a4d"),n("3b75"),n("c38b"),n("e803"),n("432f"),n("01a4"),n("dee2"),n("3f5b"),n("791c"),n("eec3"),n("2843"),n("0230"),n("ca9a"),n("99ef"),n("3441"),n("246f"),n("566e"),n("4890"),n("e7a7"),n("4d33"),n("01c8"),n("ce05"),n("085b"),n("92f8"),n("70c5"),n("00f2"),n("e5b4"),n("a7e5"),n("8fb1"),n("25ba"),n("3269"),n("bf73"),n("4057"),n("de49"),n("d0f2"),n("8dee"),n("d91d"),n("fc02"),n("5f1c"),n("3e38"),n("c5cb"),n("e62d"),n("bf34"),n("6de0"),n("fc7c"),n("90f9"),n("b76b"),n("dca0"),n("086c"),n("040a"),n("f53f"),n("f33a"),n("131f"),n("bcb9"),n("62f0"),n("7afe"),n("6f9b"),n("ff02"),n("ec84"),n("8830"),n("073d"),n("52f9"),n("0682"),n("f334"),n("29a9"),n("5a42"),n("d460"),n("cabe"),n("aa18"),n("e2b9"),n("ed4b"),n("9848"),n("b89a"),n("9105"),n("83a6"),n("b968"),n("9f11"),n("9f60"),n("1e5b"),n("ac67"),n("b3d7"),n("096c"),n("0e01"),n("5fe9"),n("7baa"),n("684d"),n("3c5f"),n("394a"),n("dbd0"),n("169f"),n("c250"),n("d6d4"),n("991d"),n("79a8"),n("48be"),n("5007"),n("c815"),n("fdb0"),n("1ec4"),n("e77f"),n("5f32"),n("41c8"),n("5173"),n("3dd1"),n("81db"),n("07d4"),n("03bb"),n("7839"),n("c358"),n("942a"),n("448b"),n("b47f"),n("94bc"),n("6dc1"),n("be91"),n("a9b9"),n("b645"),n("fdbf"),n("aaea"),n("90b5"),n("f955"),n("e26b"),n("8630"),n("5296"),n("c818"),n("c5f7"),n("1bc7"),t.exports=n("76e3")},5289:function(t,e,n){"use strict";n("6b6f")("link",(function(t){return function(e){return t(this,"a","href",e)}}))},5296:function(t,e,n){"use strict";var r=n("e99b"),i=n("0b34"),o=n("76e3"),a=n("2d39")(),u=n("839a")("observable"),c=n("3250"),s=n("a86f"),f=n("8b5a"),l=n("6f45"),d=n("065d"),p=n("2b37"),h=p.RETURN,v=function(t){return null==t?void 0:c(t)},y=function(t){var e=t._c;e&&(t._c=void 0,e())},b=function(t){return void 0===t._o},m=function(t){b(t)||(t._o=void 0,y(t))},g=function(t,e){s(t),this._c=void 0,this._o=t,t=new _(this);try{var n=e(t),r=n;null!=n&&("function"===typeof n.unsubscribe?n=function(){r.unsubscribe()}:c(n),this._c=n)}catch(i){return void t.error(i)}b(this)&&y(this)};g.prototype=l({},{unsubscribe:function(){m(this)}});var _=function(t){this._s=t};_.prototype=l({},{next:function(t){var e=this._s;if(!b(e)){var n=e._o;try{var r=v(n.next);if(r)return r.call(n,t)}catch(i){try{m(e)}finally{throw i}}}},error:function(t){var e=this._s;if(b(e))throw t;var n=e._o;e._o=void 0;try{var r=v(n.error);if(!r)throw t;t=r.call(n,t)}catch(i){try{y(e)}finally{throw i}}return y(e),t},complete:function(t){var e=this._s;if(!b(e)){var n=e._o;e._o=void 0;try{var r=v(n.complete);t=r?r.call(n,t):void 0}catch(i){try{y(e)}finally{throw i}}return y(e),t}}});var w=function(t){f(this,w,"Observable","_f")._f=c(t)};l(w.prototype,{subscribe:function(t){return new g(t,this._f)},forEach:function(t){var e=this;return new(o.Promise||i.Promise)((function(n,r){c(t);var i=e.subscribe({next:function(e){try{return t(e)}catch(n){r(n),i.unsubscribe()}},error:r,complete:n})}))}}),l(w,{from:function(t){var e="function"===typeof this?this:w,n=v(s(t)[u]);if(n){var r=s(n.call(t));return r.constructor===e?r:new e((function(t){return r.subscribe(t)}))}return new e((function(e){var n=!1;return a((function(){if(!n){try{if(p(t,!1,(function(t){if(e.next(t),n)return h}))===h)return}catch(r){if(n)throw r;return void e.error(r)}e.complete()}})),function(){n=!0}}))},of:function(){for(var t=0,e=arguments.length,n=new Array(e);t<e;)n[t]=arguments[t++];return new("function"===typeof this?this:w)((function(t){var e=!1;return a((function(){if(!e){for(var r=0;r<n.length;++r)if(t.next(n[r]),e)return;t.complete()}})),function(){e=!0}}))}}),d(w.prototype,u,(function(){return this})),r(r.G,{Observable:w}),n("f966")("Observable")},"52a4":function(t,e,n){var r=n("3471"),i=n("201c"),o=n("732b");t.exports=function(t){return function(e,n,a){var u,c=r(e),s=i(c.length),f=o(a,s);if(t&&n!=n){while(s>f)if(u=c[f++],u!=u)return!0}else for(;s>f;f++)if((t||f in c)&&c[f]===n)return t||f||0;return!t&&-1}}},"52f9":function(t,e,n){var r=n("e99b"),i=n("addc"),o=n("a86f");r(r.S,"Reflect",{getPrototypeOf:function(t){return i(o(t))}})},"566e":function(t,e,n){"use strict";var r=n("e99b"),i=n("e9aa")(1);r(r.P+r.F*!n("95b6")([].map,!0),"Array",{map:function(t){return i(this,t,arguments[1])}})},"567e":function(t,e,n){var r=n("e99b"),i=n("def1"),o=Math.sqrt,a=Math.acosh;r(r.S+r.F*!(a&&710==Math.floor(a(Number.MAX_VALUE))&&a(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},"581c":function(t,e,n){var r=n("839a")("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,!"/./"[t](e)}catch(i){}}return!0}},5826:function(t,e,n){"use strict";var r=n("d1cb"),i=n("9cff"),o=n("201c"),a=n("1e4d"),u=n("839a")("isConcatSpreadable");function c(t,e,n,s,f,l,d,p){var h,v,y=f,b=0,m=!!d&&a(d,p,3);while(b<s){if(b in n){if(h=m?m(n[b],b,e):n[b],v=!1,i(h)&&(v=h[u],v=void 0!==v?!!v:r(h)),v&&l>0)y=c(t,e,h,o(h.length),y,l-1)-1;else{if(y>=9007199254740991)throw TypeError();t[y]=h}y++}b++}return y}t.exports=c},"5a42":function(t,e,n){var r=n("e99b"),i=n("a86f"),o=Object.preventExtensions;r(r.S,"Reflect",{preventExtensions:function(t){i(t);try{return o&&o(t),!0}catch(e){return!1}}})},"5a4d":function(t,e,n){"use strict";n("6b6f")("small",(function(t){return function(){return t(this,"small","","")}}))},"5d10":function(t,e,n){var r=n("9cff");t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},"5dc3":function(t,e){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},"5edc":function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},"5f1c":function(t,e,n){"use strict";var r,i,o,a,u=n("3d8a"),c=n("0b34"),s=n("1e4d"),f=n("d445"),l=n("e99b"),d=n("9cff"),p=n("3250"),h=n("8b5a"),v=n("2b37"),y=n("1b0b"),b=n("edec").set,m=n("2d39")(),g=n("d4c9"),_=n("fb49"),w=n("aeb8"),x=n("4836"),S="Promise",O=c.TypeError,A=c.process,E=A&&A.versions,k=E&&E.v8||"",C=c[S],$="process"==f(A),j=function(){},M=i=g.f,R=!!function(){try{var t=C.resolve(1),e=(t.constructor={})[n("839a")("species")]=function(t){t(j,j)};return($||"function"==typeof PromiseRejectionEvent)&&t.then(j)instanceof e&&0!==k.indexOf("6.6")&&-1===w.indexOf("Chrome/66")}catch(r){}}(),P=function(t){var e;return!(!d(t)||"function"!=typeof(e=t.then))&&e},I=function(t,e){if(!t._n){t._n=!0;var n=t._c;m((function(){var r=t._v,i=1==t._s,o=0,a=function(e){var n,o,a,u=i?e.ok:e.fail,c=e.resolve,s=e.reject,f=e.domain;try{u?(i||(2==t._h&&N(t),t._h=1),!0===u?n=r:(f&&f.enter(),n=u(r),f&&(f.exit(),a=!0)),n===e.promise?s(O("Promise-chain cycle")):(o=P(n))?o.call(n,c,s):c(n)):s(r)}catch(l){f&&!a&&f.exit(),s(l)}};while(n.length>o)a(n[o++]);t._c=[],t._n=!1,e&&!t._h&&T(t)}))}},T=function(t){b.call(c,(function(){var e,n,r,i=t._v,o=F(t);if(o&&(e=_((function(){$?A.emit("unhandledRejection",i,t):(n=c.onunhandledrejection)?n({promise:t,reason:i}):(r=c.console)&&r.error&&r.error("Unhandled promise rejection",i)})),t._h=$||F(t)?2:1),t._a=void 0,o&&e.e)throw e.v}))},F=function(t){return 1!==t._h&&0===(t._a||t._c).length},N=function(t){b.call(c,(function(){var e;$?A.emit("rejectionHandled",t):(e=c.onrejectionhandled)&&e({promise:t,reason:t._v})}))},L=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),I(e,!0))},D=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw O("Promise can't be resolved itself");(e=P(t))?m((function(){var r={_w:n,_d:!1};try{e.call(t,s(D,r,1),s(L,r,1))}catch(i){L.call(r,i)}})):(n._v=t,n._s=1,I(n,!1))}catch(r){L.call({_w:n,_d:!1},r)}}};R||(C=function(t){h(this,C,S,"_h"),p(t),r.call(this);try{t(s(D,this,1),s(L,this,1))}catch(e){L.call(this,e)}},r=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n("6f45")(C.prototype,{then:function(t,e){var n=M(y(this,C));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=$?A.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&I(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new r;this.promise=t,this.resolve=s(D,t,1),this.reject=s(L,t,1)},g.f=M=function(t){return t===C||t===a?new o(t):i(t)}),l(l.G+l.W+l.F*!R,{Promise:C}),n("bac3")(C,S),n("f966")(S),a=n("76e3")[S],l(l.S+l.F*!R,S,{reject:function(t){var e=M(this),n=e.reject;return n(t),e.promise}}),l(l.S+l.F*(u||!R),S,{resolve:function(t){return x(u&&this===a?C:this,t)}}),l(l.S+l.F*!(R&&n("1a9a")((function(t){C.all(t)["catch"](j)}))),S,{all:function(t){var e=this,n=M(e),r=n.resolve,i=n.reject,o=_((function(){var n=[],o=0,a=1;v(t,!1,(function(t){var u=o++,c=!1;n.push(void 0),a++,e.resolve(t).then((function(t){c||(c=!0,n[u]=t,--a||r(n))}),i)})),--a||r(n)}));return o.e&&i(o.v),n.promise},race:function(t){var e=this,n=M(e),r=n.reject,i=_((function(){v(t,!1,(function(t){e.resolve(t).then(n.resolve,r)}))}));return i.e&&r(i.v),n.promise}})},"5f32":function(t,e,n){var r=n("e99b");r(r.S,"Math",{DEG_PER_RAD:Math.PI/180})},"5fe9":function(t,e,n){"use strict";var r=n("e99b"),i=n("8078"),o=n("3250"),a=n("bb8b");n("26df")&&r(r.P+n("94cb"),"Object",{__defineSetter__:function(t,e){a.f(i(this),t,{set:o(e),enumerable:!0,configurable:!0})}})},6006:function(t,e,n){var r=n("e99b");r(r.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},6161:function(t,e,n){"use strict";n("eb34")("trim",(function(t){return function(){return t(this,3)}}))},"62f0":function(t,e,n){var r=n("e99b"),i=n("3250"),o=n("a86f"),a=(n("0b34").Reflect||{}).apply,u=Function.apply;r(r.S+r.F*!n("0926")((function(){a((function(){}))})),"Reflect",{apply:function(t,e,n){var r=i(t),c=o(n);return a?a(r,e,c):u.call(r,e,c)}})},"66ca":function(t,e,n){var r=n("e99b"),i=n("820e")(/[\\^$*+?.()|[\]{}]/g,"\\$&");r(r.S,"RegExp",{escape:function(t){return i(t)}})},"676a":function(t,e,n){"use strict";var r=n("8078"),i=n("732b"),o=n("201c");t.exports=[].copyWithin||function(t,e){var n=r(this),a=o(n.length),u=i(t,a),c=i(e,a),s=arguments.length>2?arguments[2]:void 0,f=Math.min((void 0===s?a:i(s,a))-c,a-u),l=1;c<u&&u<c+f&&(l=-1,c+=f-1,u+=f-1);while(f-- >0)c in n?n[u]=n[c]:delete n[u],u+=l,c+=l;return n}},"684d":function(t,e,n){"use strict";var r=n("e99b"),i=n("8078"),o=n("5d10"),a=n("addc"),u=n("285b").f;n("26df")&&r(r.P+n("94cb"),"Object",{__lookupSetter__:function(t){var e,n=i(this),r=o(t,!0);do{if(e=u(n,r))return e.set}while(n=a(n))}})},"69b0":function(t,e){t.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},"69db":function(t,e,n){"use strict";var r=n("9cff"),i=n("addc"),o=n("839a")("hasInstance"),a=Function.prototype;o in a||n("bb8b").f(a,o,{value:function(t){if("function"!=typeof this||!r(t))return!1;if(!r(this.prototype))return t instanceof this;while(t=i(t))if(this.prototype===t)return!0;return!1}})},"6a2a":function(t,e,n){var r=n("f597"),i=Math.pow,o=i(2,-52),a=i(2,-23),u=i(2,127)*(2-a),c=i(2,-126),s=function(t){return t+1/o-1/o};t.exports=Math.fround||function(t){var e,n,i=Math.abs(t),f=r(t);return i<c?f*s(i/c/a)*c*a:(e=(1+a/o)*i,n=e-(e-i),n>u||n!=n?f*(1/0):f*n)}},"6b6f":function(t,e,n){var r=n("e99b"),i=n("0926"),o=n("3ab0"),a=/"/g,u=function(t,e,n,r){var i=String(o(t)),u="<"+e;return""!==n&&(u+=" "+n+'="'+String(r).replace(a,"&quot;")+'"'),u+">"+i+"</"+e+">"};t.exports=function(t,e){var n={};n[t]=e(u),r(r.P+r.F*i((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3})),"String",n)}},"6ba0":function(t,e,n){var r=n("e99b");r(r.S+r.F,"Object",{assign:n("9f15")})},"6bf8":function(t,e,n){"use strict";var r=n("a86f");t.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},"6c62":function(t,e,n){var r=n("e99b");r(r.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},"6dc1":function(t,e,n){var r=n("803a"),i=n("a86f"),o=r.key,a=r.set;r.exp({defineMetadata:function(t,e,n,r){a(t,e,i(n),o(r))}})},"6de0":function(t,e,n){"use strict";var r=n("e99b"),i=n("fa2c"),o=n("f9bc"),a=n("a86f"),u=n("732b"),c=n("201c"),s=n("9cff"),f=n("0b34").ArrayBuffer,l=n("1b0b"),d=o.ArrayBuffer,p=o.DataView,h=i.ABV&&f.isView,v=d.prototype.slice,y=i.VIEW,b="ArrayBuffer";r(r.G+r.W+r.F*(f!==d),{ArrayBuffer:d}),r(r.S+r.F*!i.CONSTR,b,{isView:function(t){return h&&h(t)||s(t)&&y in t}}),r(r.P+r.U+r.F*n("0926")((function(){return!new d(2).slice(1,void 0).byteLength})),b,{slice:function(t,e){if(void 0!==v&&void 0===e)return v.call(a(this),t);var n=a(this).byteLength,r=u(t,n),i=u(void 0===e?n:e,n),o=new(l(this,d))(c(i-r)),s=new p(this),f=new p(o),h=0;while(r<i)f.setUint8(h++,s.getUint8(r++));return o}}),n("f966")(b)},"6e70":function(t,e,n){var r=n("e99b");r(r.S,"Number",{isInteger:n("bda0")})},"6f45":function(t,e,n){var r=n("84e8");t.exports=function(t,e,n){for(var i in e)r(t,i,e[i],n);return t}},"6f9b":function(t,e,n){var r=n("bb8b"),i=n("e99b"),o=n("a86f"),a=n("5d10");i(i.S+i.F*n("0926")((function(){Reflect.defineProperty(r.f({},1,{value:1}),1,{value:2})})),"Reflect",{defineProperty:function(t,e,n){o(t),e=a(e,!0),o(n);try{return r.f(t,e,n),!0}catch(i){return!1}}})},"6fef":function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},"70c5":function(t,e,n){var r=n("e99b");r(r.P,"Array",{copyWithin:n("676a")}),n("87b2")("copyWithin")},"70f2":function(t,e,n){var r=n("0451");t.exports=function(t,e){return new(r(t))(e)}},"732b":function(t,e,n){var r=n("212e"),i=Math.max,o=Math.min;t.exports=function(t,e){return t=r(t),t<0?i(t+e,0):o(t,e)}},"732c":function(t,e,n){var r=n("e99b");r(r.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},"76e3":function(t,e){var n=t.exports={version:"2.6.12"};"number"==typeof __e&&(__e=n)},7736:function(t,e,n){"use strict";(function(t){function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)
                                                  +/*!
                                                  + * vuex v3.6.2
                                                  + * (c) 2021 Evan You
                                                  + * @license MIT
                                                  + */}function r(t){var e=Number(t.version.split(".")[0]);if(e>=2)t.mixin({beforeCreate:r});else{var n=t.prototype._init;t.prototype._init=function(t){void 0===t&&(t={}),t.init=t.init?[r].concat(t.init):r,n.call(this,t)}}function r(){var t=this.$options;t.store?this.$store="function"===typeof t.store?t.store():t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}}var i="undefined"!==typeof window?window:"undefined"!==typeof t?t:{},o=i.__VUE_DEVTOOLS_GLOBAL_HOOK__;function a(t){o&&(t._devtoolHook=o,o.emit("vuex:init",t),o.on("vuex:travel-to-state",(function(e){t.replaceState(e)})),t.subscribe((function(t,e){o.emit("vuex:mutation",t,e)}),{prepend:!0}),t.subscribeAction((function(t,e){o.emit("vuex:action",t,e)}),{prepend:!0}))}function u(t,e){return t.filter(e)[0]}function c(t,e){if(void 0===e&&(e=[]),null===t||"object"!==n(t))return t;var r=u(e,(function(e){return e.original===t}));if(r)return r.copy;var i=Array.isArray(t)?[]:{};return e.push({original:t,copy:i}),Object.keys(t).forEach((function(n){i[n]=c(t[n],e)})),i}function s(t,e){Object.keys(t).forEach((function(n){return e(t[n],n)}))}function f(t){return null!==t&&"object"===n(t)}function l(t){return t&&"function"===typeof t.then}function d(t,e){return function(){return t(e)}}var p=function(t,e){this.runtime=e,this._children=Object.create(null),this._rawModule=t;var n=t.state;this.state=("function"===typeof n?n():n)||{}},h={namespaced:{configurable:!0}};h.namespaced.get=function(){return!!this._rawModule.namespaced},p.prototype.addChild=function(t,e){this._children[t]=e},p.prototype.removeChild=function(t){delete this._children[t]},p.prototype.getChild=function(t){return this._children[t]},p.prototype.hasChild=function(t){return t in this._children},p.prototype.update=function(t){this._rawModule.namespaced=t.namespaced,t.actions&&(this._rawModule.actions=t.actions),t.mutations&&(this._rawModule.mutations=t.mutations),t.getters&&(this._rawModule.getters=t.getters)},p.prototype.forEachChild=function(t){s(this._children,t)},p.prototype.forEachGetter=function(t){this._rawModule.getters&&s(this._rawModule.getters,t)},p.prototype.forEachAction=function(t){this._rawModule.actions&&s(this._rawModule.actions,t)},p.prototype.forEachMutation=function(t){this._rawModule.mutations&&s(this._rawModule.mutations,t)},Object.defineProperties(p.prototype,h);var v=function(t){this.register([],t,!1)};function y(t,e,n){if(e.update(n),n.modules)for(var r in n.modules){if(!e.getChild(r))return void 0;y(t.concat(r),e.getChild(r),n.modules[r])}}v.prototype.get=function(t){return t.reduce((function(t,e){return t.getChild(e)}),this.root)},v.prototype.getNamespace=function(t){var e=this.root;return t.reduce((function(t,n){return e=e.getChild(n),t+(e.namespaced?n+"/":"")}),"")},v.prototype.update=function(t){y([],this.root,t)},v.prototype.register=function(t,e,n){var r=this;void 0===n&&(n=!0);var i=new p(e,n);if(0===t.length)this.root=i;else{var o=this.get(t.slice(0,-1));o.addChild(t[t.length-1],i)}e.modules&&s(e.modules,(function(e,i){r.register(t.concat(i),e,n)}))},v.prototype.unregister=function(t){var e=this.get(t.slice(0,-1)),n=t[t.length-1],r=e.getChild(n);r&&r.runtime&&e.removeChild(n)},v.prototype.isRegistered=function(t){var e=this.get(t.slice(0,-1)),n=t[t.length-1];return!!e&&e.hasChild(n)};var b;var m=function(t){var e=this;void 0===t&&(t={}),!b&&"undefined"!==typeof window&&window.Vue&&R(window.Vue);var n=t.plugins;void 0===n&&(n=[]);var r=t.strict;void 0===r&&(r=!1),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new v(t),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new b,this._makeLocalGettersCache=Object.create(null);var i=this,o=this,u=o.dispatch,c=o.commit;this.dispatch=function(t,e){return u.call(i,t,e)},this.commit=function(t,e,n){return c.call(i,t,e,n)},this.strict=r;var s=this._modules.root.state;S(this,s,[],this._modules.root),x(this,s),n.forEach((function(t){return t(e)}));var f=void 0!==t.devtools?t.devtools:b.config.devtools;f&&a(this)},g={state:{configurable:!0}};function _(t,e,n){return e.indexOf(t)<0&&(n&&n.prepend?e.unshift(t):e.push(t)),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}function w(t,e){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null),t._modulesNamespaceMap=Object.create(null);var n=t.state;S(t,n,[],t._modules.root,!0),x(t,n,e)}function x(t,e,n){var r=t._vm;t.getters={},t._makeLocalGettersCache=Object.create(null);var i=t._wrappedGetters,o={};s(i,(function(e,n){o[n]=d(e,t),Object.defineProperty(t.getters,n,{get:function(){return t._vm[n]},enumerable:!0})}));var a=b.config.silent;b.config.silent=!0,t._vm=new b({data:{$$state:e},computed:o}),b.config.silent=a,t.strict&&$(t),r&&(n&&t._withCommit((function(){r._data.$$state=null})),b.nextTick((function(){return r.$destroy()})))}function S(t,e,n,r,i){var o=!n.length,a=t._modules.getNamespace(n);if(r.namespaced&&(t._modulesNamespaceMap[a],t._modulesNamespaceMap[a]=r),!o&&!i){var u=j(e,n.slice(0,-1)),c=n[n.length-1];t._withCommit((function(){b.set(u,c,r.state)}))}var s=r.context=O(t,a,n);r.forEachMutation((function(e,n){var r=a+n;E(t,r,e,s)})),r.forEachAction((function(e,n){var r=e.root?n:a+n,i=e.handler||e;k(t,r,i,s)})),r.forEachGetter((function(e,n){var r=a+n;C(t,r,e,s)})),r.forEachChild((function(r,o){S(t,e,n.concat(o),r,i)}))}function O(t,e,n){var r=""===e,i={dispatch:r?t.dispatch:function(n,r,i){var o=M(n,r,i),a=o.payload,u=o.options,c=o.type;return u&&u.root||(c=e+c),t.dispatch(c,a)},commit:r?t.commit:function(n,r,i){var o=M(n,r,i),a=o.payload,u=o.options,c=o.type;u&&u.root||(c=e+c),t.commit(c,a,u)}};return Object.defineProperties(i,{getters:{get:r?function(){return t.getters}:function(){return A(t,e)}},state:{get:function(){return j(t.state,n)}}}),i}function A(t,e){if(!t._makeLocalGettersCache[e]){var n={},r=e.length;Object.keys(t.getters).forEach((function(i){if(i.slice(0,r)===e){var o=i.slice(r);Object.defineProperty(n,o,{get:function(){return t.getters[i]},enumerable:!0})}})),t._makeLocalGettersCache[e]=n}return t._makeLocalGettersCache[e]}function E(t,e,n,r){var i=t._mutations[e]||(t._mutations[e]=[]);i.push((function(e){n.call(t,r.state,e)}))}function k(t,e,n,r){var i=t._actions[e]||(t._actions[e]=[]);i.push((function(e){var i=n.call(t,{dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:t.getters,rootState:t.state},e);return l(i)||(i=Promise.resolve(i)),t._devtoolHook?i.catch((function(e){throw t._devtoolHook.emit("vuex:error",e),e})):i}))}function C(t,e,n,r){t._wrappedGetters[e]||(t._wrappedGetters[e]=function(t){return n(r.state,r.getters,t.state,t.getters)})}function $(t){t._vm.$watch((function(){return this._data.$$state}),(function(){0}),{deep:!0,sync:!0})}function j(t,e){return e.reduce((function(t,e){return t[e]}),t)}function M(t,e,n){return f(t)&&t.type&&(n=e,e=t,t=t.type),{type:t,payload:e,options:n}}function R(t){b&&t===b||(b=t,r(b))}g.state.get=function(){return this._vm._data.$$state},g.state.set=function(t){0},m.prototype.commit=function(t,e,n){var r=this,i=M(t,e,n),o=i.type,a=i.payload,u=(i.options,{type:o,payload:a}),c=this._mutations[o];c&&(this._withCommit((function(){c.forEach((function(t){t(a)}))})),this._subscribers.slice().forEach((function(t){return t(u,r.state)})))},m.prototype.dispatch=function(t,e){var n=this,r=M(t,e),i=r.type,o=r.payload,a={type:i,payload:o},u=this._actions[i];if(u){try{this._actionSubscribers.slice().filter((function(t){return t.before})).forEach((function(t){return t.before(a,n.state)}))}catch(s){0}var c=u.length>1?Promise.all(u.map((function(t){return t(o)}))):u[0](o);return new Promise((function(t,e){c.then((function(e){try{n._actionSubscribers.filter((function(t){return t.after})).forEach((function(t){return t.after(a,n.state)}))}catch(s){0}t(e)}),(function(t){try{n._actionSubscribers.filter((function(t){return t.error})).forEach((function(e){return e.error(a,n.state,t)}))}catch(s){0}e(t)}))}))}},m.prototype.subscribe=function(t,e){return _(t,this._subscribers,e)},m.prototype.subscribeAction=function(t,e){var n="function"===typeof t?{before:t}:t;return _(n,this._actionSubscribers,e)},m.prototype.watch=function(t,e,n){var r=this;return this._watcherVM.$watch((function(){return t(r.state,r.getters)}),e,n)},m.prototype.replaceState=function(t){var e=this;this._withCommit((function(){e._vm._data.$$state=t}))},m.prototype.registerModule=function(t,e,n){void 0===n&&(n={}),"string"===typeof t&&(t=[t]),this._modules.register(t,e),S(this,this.state,t,this._modules.get(t),n.preserveState),x(this,this.state)},m.prototype.unregisterModule=function(t){var e=this;"string"===typeof t&&(t=[t]),this._modules.unregister(t),this._withCommit((function(){var n=j(e.state,t.slice(0,-1));b.delete(n,t[t.length-1])})),w(this)},m.prototype.hasModule=function(t){return"string"===typeof t&&(t=[t]),this._modules.isRegistered(t)},m.prototype.hotUpdate=function(t){this._modules.update(t),w(this,!0)},m.prototype._withCommit=function(t){var e=this._committing;this._committing=!0,t(),this._committing=e},Object.defineProperties(m.prototype,g);var P=V((function(t,e){var n={};return L(e).forEach((function(e){var r=e.key,i=e.val;n[r]=function(){var e=this.$store.state,n=this.$store.getters;if(t){var r=U(this.$store,"mapState",t);if(!r)return;e=r.context.state,n=r.context.getters}return"function"===typeof i?i.call(this,e,n):e[i]},n[r].vuex=!0})),n})),I=V((function(t,e){var n={};return L(e).forEach((function(e){var r=e.key,i=e.val;n[r]=function(){var e=[],n=arguments.length;while(n--)e[n]=arguments[n];var r=this.$store.commit;if(t){var o=U(this.$store,"mapMutations",t);if(!o)return;r=o.context.commit}return"function"===typeof i?i.apply(this,[r].concat(e)):r.apply(this.$store,[i].concat(e))}})),n})),T=V((function(t,e){var n={};return L(e).forEach((function(e){var r=e.key,i=e.val;i=t+i,n[r]=function(){if(!t||U(this.$store,"mapGetters",t))return this.$store.getters[i]},n[r].vuex=!0})),n})),F=V((function(t,e){var n={};return L(e).forEach((function(e){var r=e.key,i=e.val;n[r]=function(){var e=[],n=arguments.length;while(n--)e[n]=arguments[n];var r=this.$store.dispatch;if(t){var o=U(this.$store,"mapActions",t);if(!o)return;r=o.context.dispatch}return"function"===typeof i?i.apply(this,[r].concat(e)):r.apply(this.$store,[i].concat(e))}})),n})),N=function(t){return{mapState:P.bind(null,t),mapGetters:T.bind(null,t),mapMutations:I.bind(null,t),mapActions:F.bind(null,t)}};function L(t){return D(t)?Array.isArray(t)?t.map((function(t){return{key:t,val:t}})):Object.keys(t).map((function(e){return{key:e,val:t[e]}})):[]}function D(t){return Array.isArray(t)||f(t)}function V(t){return function(e,n){return"string"!==typeof e?(n=e,e=""):"/"!==e.charAt(e.length-1)&&(e+="/"),t(e,n)}}function U(t,e,n){var r=t._modulesNamespaceMap[n];return r}function q(t){void 0===t&&(t={});var e=t.collapsed;void 0===e&&(e=!0);var n=t.filter;void 0===n&&(n=function(t,e,n){return!0});var r=t.transformer;void 0===r&&(r=function(t){return t});var i=t.mutationTransformer;void 0===i&&(i=function(t){return t});var o=t.actionFilter;void 0===o&&(o=function(t,e){return!0});var a=t.actionTransformer;void 0===a&&(a=function(t){return t});var u=t.logMutations;void 0===u&&(u=!0);var s=t.logActions;void 0===s&&(s=!0);var f=t.logger;return void 0===f&&(f=console),function(t){var l=c(t.state);"undefined"!==typeof f&&(u&&t.subscribe((function(t,o){var a=c(o);if(n(t,l,a)){var u=G(),s=i(t),d="mutation "+t.type+u;B(f,d,e),f.log("%c prev state","color: #9E9E9E; font-weight: bold",r(l)),f.log("%c mutation","color: #03A9F4; font-weight: bold",s),f.log("%c next state","color: #4CAF50; font-weight: bold",r(a)),z(f)}l=a})),s&&t.subscribeAction((function(t,n){if(o(t,n)){var r=G(),i=a(t),u="action "+t.type+r;B(f,u,e),f.log("%c action","color: #03A9F4; font-weight: bold",i),z(f)}})))}}function B(t,e,n){var r=n?t.groupCollapsed:t.group;try{r.call(t,e)}catch(i){t.log(e)}}function z(t){try{t.groupEnd()}catch(e){t.log("—— log end ——")}}function G(){var t=new Date;return" @ "+H(t.getHours(),2)+":"+H(t.getMinutes(),2)+":"+H(t.getSeconds(),2)+"."+H(t.getMilliseconds(),3)}function W(t,e){return new Array(e+1).join(t)}function H(t,e){return W("0",e-t.toString().length)+t}var K={Store:m,install:R,version:"3.6.2",mapState:P,mapMutations:I,mapGetters:T,mapActions:F,createNamespacedHelpers:N,createLogger:q};e["a"]=K}).call(this,n("2409"))},7839:function(t,e,n){var r=n("e99b"),i=Math.PI/180;r(r.S,"Math",{radians:function(t){return t*i}})},7892:function(t,e,n){var r=n("9cff");n("b2be")("isFrozen",(function(t){return function(e){return!r(e)||!!t&&t(e)}}))},7896:function(t,e,n){"use strict";var r=n("e99b"),i=n("212e"),o=n("9a9d"),a=n("4226"),u=1..toFixed,c=Math.floor,s=[0,0,0,0,0,0],f="Number.toFixed: incorrect invocation!",l="0",d=function(t,e){var n=-1,r=e;while(++n<6)r+=t*s[n],s[n]=r%1e7,r=c(r/1e7)},p=function(t){var e=6,n=0;while(--e>=0)n+=s[e],s[e]=c(n/t),n=n%t*1e7},h=function(){var t=6,e="";while(--t>=0)if(""!==e||0===t||0!==s[t]){var n=String(s[t]);e=""===e?n:e+a.call(l,7-n.length)+n}return e},v=function(t,e,n){return 0===e?n:e%2===1?v(t,e-1,n*t):v(t*t,e/2,n)},y=function(t){var e=0,n=t;while(n>=4096)e+=12,n/=4096;while(n>=2)e+=1,n/=2;return e};r(r.P+r.F*(!!u&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!n("0926")((function(){u.call({})}))),"Number",{toFixed:function(t){var e,n,r,u,c=o(this,f),s=i(t),b="",m=l;if(s<0||s>20)throw RangeError(f);if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(b="-",c=-c),c>1e-21)if(e=y(c*v(2,69,1))-69,n=e<0?c*v(2,-e,1):c/v(2,e,1),n*=4503599627370496,e=52-e,e>0){d(0,n),r=s;while(r>=7)d(1e7,0),r-=7;d(v(10,r,1),0),r=e-1;while(r>=23)p(1<<23),r-=23;p(1<<r),d(1,1),p(2),m=h()}else d(0,n),d(1<<-e,0),m=h()+a.call(l,s);return s>0?(u=m.length,m=b+(u<=s?"0."+a.call(l,s-u)+m:m.slice(0,u-s)+"."+m.slice(u-s))):m=b+m,m}})},"791c":function(t,e,n){var r=n("839a")("toPrimitive"),i=Date.prototype;r in i||n("065d")(i,r,n("34c2"))},"79a8":function(t,e,n){n("4b79")("Set")},"79f2":function(t,e,n){n("66ca"),t.exports=n("76e3").RegExp.escape},"7a6b":function(t,e,n){var r=n("e99b");r(r.S,"Math",{fround:n("6a2a")})},"7afe":function(t,e,n){var r=n("e99b"),i=n("7ee3"),o=n("3250"),a=n("a86f"),u=n("9cff"),c=n("0926"),s=n("e2f7"),f=(n("0b34").Reflect||{}).construct,l=c((function(){function t(){}return!(f((function(){}),[],t)instanceof t)})),d=!c((function(){f((function(){}))}));r(r.S+r.F*(l||d),"Reflect",{construct:function(t,e){o(t),a(e);var n=arguments.length<3?t:o(arguments[2]);if(d&&!l)return f(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var r=[null];return r.push.apply(r,e),new(s.apply(t,r))}var c=n.prototype,p=i(u(c)?c:Object.prototype),h=Function.apply.call(t,p,e);return u(h)?h:p}})},"7b3e":function(t,e,n){"use strict";var r=n("0926"),i=Date.prototype.getTime,o=Date.prototype.toISOString,a=function(t){return t>9?t:"0"+t};t.exports=r((function(){return"0385-07-25T07:06:39.999Z"!=o.call(new Date(-50000000000001))}))||!r((function(){o.call(new Date(NaN))}))?function(){if(!isFinite(i.call(this)))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),n=t.getUTCMilliseconds(),r=e<0?"-":e>9999?"+":"";return r+("00000"+Math.abs(e)).slice(r?-6:-4)+"-"+a(t.getUTCMonth()+1)+"-"+a(t.getUTCDate())+"T"+a(t.getUTCHours())+":"+a(t.getUTCMinutes())+":"+a(t.getUTCSeconds())+"."+(n>99?n:"0"+a(n))+"Z"}:o},"7baa":function(t,e,n){"use strict";var r=n("e99b"),i=n("8078"),o=n("5d10"),a=n("addc"),u=n("285b").f;n("26df")&&r(r.P+n("94cb"),"Object",{__lookupGetter__:function(t){var e,n=i(this),r=o(t,!0);do{if(e=u(n,r))return e.get}while(n=a(n))}})},"7ee3":function(t,e,n){var r=n("a86f"),i=n("3f9e"),o=n("065e"),a=n("3a0d")("IE_PROTO"),u=function(){},c="prototype",s=function(){var t,e=n("e8d7")("iframe"),r=o.length,i="<",a=">";e.style.display="none",n("bbcc").appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(i+"script"+a+"document.F=Object"+i+"/script"+a),t.close(),s=t.F;while(r--)delete s[c][o[r]];return s()};t.exports=Object.create||function(t,e){var n;return null!==t?(u[c]=r(t),n=new u,u[c]=null,n[a]=t):n=s(),void 0===e?n:i(n,e)}},"7ff8":function(t,e,n){var r=n("0b34").parseInt,i=n("eb34").trim,o=n("5dc3"),a=/^[-+]?0[xX]/;t.exports=8!==r(o+"08")||22!==r(o+"0x16")?function(t,e){var n=i(String(t),3);return r(n,e>>>0||(a.test(n)?16:10))}:r},8018:function(t,e,n){"use strict";var r=n("e99b"),i=n("1663")(!1);r(r.P,"String",{codePointAt:function(t){return i(this,t)}})},"803a":function(t,e,n){var r=n("3e38"),i=n("e99b"),o=n("baa7")("metadata"),a=o.store||(o.store=new(n("e62d"))),u=function(t,e,n){var i=a.get(t);if(!i){if(!n)return;a.set(t,i=new r)}var o=i.get(e);if(!o){if(!n)return;i.set(e,o=new r)}return o},c=function(t,e,n){var r=u(e,n,!1);return void 0!==r&&r.has(t)},s=function(t,e,n){var r=u(e,n,!1);return void 0===r?void 0:r.get(t)},f=function(t,e,n,r){u(n,r,!0).set(t,e)},l=function(t,e){var n=u(t,e,!1),r=[];return n&&n.forEach((function(t,e){r.push(e)})),r},d=function(t){return void 0===t||"symbol"==typeof t?t:String(t)},p=function(t){i(i.S,"Reflect",t)};t.exports={store:a,map:u,has:c,get:s,set:f,keys:l,key:d,exp:p}},"804d":function(t,e,n){var r=n("9cff"),i=n("cea2"),o=n("839a")("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},8078:function(t,e,n){var r=n("3ab0");t.exports=function(t){return Object(r(t))}},"81db":function(t,e,n){var r=n("e99b");r(r.S,"Math",{isubh:function(t,e,n,r){var i=t>>>0,o=e>>>0,a=n>>>0;return o-(r>>>0)-((~i&a|~(i^a)&i-a>>>0)>>>31)|0}})},"820e":function(t,e){t.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return String(e).replace(t,n)}}},"823b":function(t,e,n){"use strict";n("6b6f")("big",(function(t){return function(){return t(this,"big","","")}}))},"839a":function(t,e,n){var r=n("baa7")("wks"),i=n("d8b3"),o=n("0b34").Symbol,a="function"==typeof o,u=t.exports=function(t){return r[t]||(r[t]=a&&o[t]||(a?o:i)("Symbol."+t))};u.store=r},"839b":function(t,e,n){var r=n("e99b"),i=n("889e");r(r.S+r.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},"83a6":function(t,e,n){"use strict";n("eb34")("trimLeft",(function(t){return function(){return t(this,1)}}),"trimStart")},"83d3":function(t,e,n){t.exports=!n("26df")&&!n("0926")((function(){return 7!=Object.defineProperty(n("e8d7")("div"),"a",{get:function(){return 7}}).a}))},"84e8":function(t,e,n){var r=n("0b34"),i=n("065d"),o=n("4fd4"),a=n("d8b3")("src"),u=n("05fd"),c="toString",s=(""+u).split(c);n("76e3").inspectSource=function(t){return u.call(t)},(t.exports=function(t,e,n,u){var c="function"==typeof n;c&&(o(n,"name")||i(n,"name",e)),t[e]!==n&&(c&&(o(n,a)||i(n,a,t[e]?""+t[e]:s.join(String(e)))),t===r?t[e]=n:u?t[e]?t[e]=n:i(t,e,n):(delete t[e],i(t,e,n)))})(Function.prototype,c,(function(){return"function"==typeof this&&this[a]||u.call(this)}))},8630:function(t,e,n){var r=n("e99b"),i=n("2d39")(),o=n("0b34").process,a="process"==n("cea2")(o);r(r.G,{asap:function(t){var e=a&&o.domain;i(e?e.bind(t):t)}})},"87b2":function(t,e,n){var r=n("839a")("unscopables"),i=Array.prototype;void 0==i[r]&&n("065d")(i,r,{}),t.exports=function(t){i[r][t]=!0}},8830:function(t,e,n){var r=n("285b"),i=n("addc"),o=n("4fd4"),a=n("e99b"),u=n("9cff"),c=n("a86f");function s(t,e){var n,a,f=arguments.length<3?t:arguments[2];return c(t)===f?t[e]:(n=r.f(t,e))?o(n,"value")?n.value:void 0!==n.get?n.get.call(f):void 0:u(a=i(t))?s(a,e,f):void 0}a(a.S,"Reflect",{get:s})},8868:function(t,e,n){var r=n("9cff");n("b2be")("isSealed",(function(t){return function(e){return!r(e)||!!t&&t(e)}}))},"889e":function(t,e,n){var r=n("0b34").parseFloat,i=n("eb34").trim;t.exports=1/r(n("5dc3")+"-0")!==-1/0?function(t){var e=i(String(t),3),n=r(e);return 0===n&&"-"==e.charAt(0)?-0:n}:r},"8b5a":function(t,e){t.exports=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+": incorrect invocation!");return t}},"8dee":function(t,e,n){"use strict";var r=n("a86f"),i=n("8078"),o=n("201c"),a=n("212e"),u=n("43ec"),c=n("f417"),s=Math.max,f=Math.min,l=Math.floor,d=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g,h=function(t){return void 0===t?t:String(t)};n("c46f")("replace",2,(function(t,e,n,v){return[function(r,i){var o=t(this),a=void 0==r?void 0:r[e];return void 0!==a?a.call(r,o,i):n.call(String(o),r,i)},function(t,e){var i=v(n,t,this,e);if(i.done)return i.value;var l=r(t),d=String(this),p="function"===typeof e;p||(e=String(e));var b=l.global;if(b){var m=l.unicode;l.lastIndex=0}var g=[];while(1){var _=c(l,d);if(null===_)break;if(g.push(_),!b)break;var w=String(_[0]);""===w&&(l.lastIndex=u(d,o(l.lastIndex),m))}for(var x="",S=0,O=0;O<g.length;O++){_=g[O];for(var A=String(_[0]),E=s(f(a(_.index),d.length),0),k=[],C=1;C<_.length;C++)k.push(h(_[C]));var $=_.groups;if(p){var j=[A].concat(k,E,d);void 0!==$&&j.push($);var M=String(e.apply(void 0,j))}else M=y(A,d,E,k,$,e);E>=S&&(x+=d.slice(S,E)+M,S=E+A.length)}return x+d.slice(S)}];function y(t,e,r,o,a,u){var c=r+t.length,s=o.length,f=p;return void 0!==a&&(a=i(a),f=d),n.call(u,f,(function(n,i){var u;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,r);case"'":return e.slice(c);case"<":u=a[i.slice(1,-1)];break;default:var f=+i;if(0===f)return n;if(f>s){var d=l(f/10);return 0===d?n:d<=s?void 0===o[d-1]?i.charAt(1):o[d-1]+i.charAt(1):n}u=o[f-1]}return void 0===u?"":u}))}}))},"8fb1":function(t,e,n){n("f966")("Array")},"90b5":function(t,e,n){var r=n("803a"),i=n("a86f"),o=n("addc"),a=r.has,u=r.key,c=function(t,e,n){var r=a(t,e,n);if(r)return!0;var i=o(e);return null!==i&&c(t,i,n)};r.exp({hasMetadata:function(t,e){return c(t,i(e),arguments.length<3?void 0:u(arguments[2]))}})},"90f9":function(t,e,n){n("106b")("Int8",1,(function(t){return function(e,n,r){return t(this,e,n,r)}}))},9105:function(t,e,n){"use strict";var r=n("e99b"),i=n("2392"),o=n("aeb8"),a=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);r(r.P+r.F*a,"String",{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},9244:function(t,e,n){"use strict";var r=n("d445"),i={};i[n("839a")("toStringTag")]="z",i+""!="[object z]"&&n("84e8")(Object.prototype,"toString",(function(){return"[object "+r(this)+"]"}),!0)},"92f8":function(t,e,n){"use strict";var r=n("e99b"),i=n("3471"),o=n("212e"),a=n("201c"),u=[].lastIndexOf,c=!!u&&1/[1].lastIndexOf(1,-0)<0;r(r.P+r.F*(c||!n("95b6")(u)),"Array",{lastIndexOf:function(t){if(c)return u.apply(this,arguments)||0;var e=i(this),n=a(e.length),r=n-1;for(arguments.length>1&&(r=Math.min(r,o(arguments[1]))),r<0&&(r=n+r);r>=0;r--)if(r in e&&e[r]===t)return r||0;return-1}})},"93ca":function(t,e,n){var r=n("3a4c"),i=n("065e");t.exports=Object.keys||function(t){return r(t,i)}},"942a":function(t,e,n){var r=n("e99b");r(r.S,"Math",{umulh:function(t,e){var n=65535,r=+t,i=+e,o=r&n,a=i&n,u=r>>>16,c=i>>>16,s=(u*a>>>0)+(o*a>>>16);return u*c+(s>>>16)+((o*c>>>0)+(s&n)>>>16)}})},"94bc":function(t,e,n){"use strict";var r=n("e99b"),i=n("d4c9"),o=n("fb49");r(r.S,"Promise",{try:function(t){var e=i.f(this),n=o(t);return(n.e?e.reject:e.resolve)(n.v),e.promise}})},"94cb":function(t,e,n){"use strict";t.exports=n("3d8a")||!n("0926")((function(){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete n("0b34")[t]}))},"94f0":function(t,e,n){"use strict";var r=n("0b34"),i=n("4fd4"),o=n("26df"),a=n("e99b"),u=n("84e8"),c=n("49f2").KEY,s=n("0926"),f=n("baa7"),l=n("bac3"),d=n("d8b3"),p=n("839a"),h=n("1a58"),v=n("078c"),y=n("3c56"),b=n("d1cb"),m=n("a86f"),g=n("9cff"),_=n("8078"),w=n("3471"),x=n("5d10"),S=n("5edc"),O=n("7ee3"),A=n("4441"),E=n("285b"),k=n("0c29"),C=n("bb8b"),$=n("93ca"),j=E.f,M=C.f,R=A.f,P=r.Symbol,I=r.JSON,T=I&&I.stringify,F="prototype",N=p("_hidden"),L=p("toPrimitive"),D={}.propertyIsEnumerable,V=f("symbol-registry"),U=f("symbols"),q=f("op-symbols"),B=Object[F],z="function"==typeof P&&!!k.f,G=r.QObject,W=!G||!G[F]||!G[F].findChild,H=o&&s((function(){return 7!=O(M({},"a",{get:function(){return M(this,"a",{value:7}).a}})).a}))?function(t,e,n){var r=j(B,e);r&&delete B[e],M(t,e,n),r&&t!==B&&M(B,e,r)}:M,K=function(t){var e=U[t]=O(P[F]);return e._k=t,e},J=z&&"symbol"==typeof P.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof P},X=function(t,e,n){return t===B&&X(q,e,n),m(t),e=x(e,!0),m(n),i(U,e)?(n.enumerable?(i(t,N)&&t[N][e]&&(t[N][e]=!1),n=O(n,{enumerable:S(0,!1)})):(i(t,N)||M(t,N,S(1,{})),t[N][e]=!0),H(t,e,n)):M(t,e,n)},Y=function(t,e){m(t);var n,r=y(e=w(e)),i=0,o=r.length;while(o>i)X(t,n=r[i++],e[n]);return t},Z=function(t,e){return void 0===e?O(t):Y(O(t),e)},Q=function(t){var e=D.call(this,t=x(t,!0));return!(this===B&&i(U,t)&&!i(q,t))&&(!(e||!i(this,t)||!i(U,t)||i(this,N)&&this[N][t])||e)},tt=function(t,e){if(t=w(t),e=x(e,!0),t!==B||!i(U,e)||i(q,e)){var n=j(t,e);return!n||!i(U,e)||i(t,N)&&t[N][e]||(n.enumerable=!0),n}},et=function(t){var e,n=R(w(t)),r=[],o=0;while(n.length>o)i(U,e=n[o++])||e==N||e==c||r.push(e);return r},nt=function(t){var e,n=t===B,r=R(n?q:w(t)),o=[],a=0;while(r.length>a)!i(U,e=r[a++])||n&&!i(B,e)||o.push(U[e]);return o};z||(P=function(){if(this instanceof P)throw TypeError("Symbol is not a constructor!");var t=d(arguments.length>0?arguments[0]:void 0),e=function(n){this===B&&e.call(q,n),i(this,N)&&i(this[N],t)&&(this[N][t]=!1),H(this,t,S(1,n))};return o&&W&&H(B,t,{configurable:!0,set:e}),K(t)},u(P[F],"toString",(function(){return this._k})),E.f=tt,C.f=X,n("21d9").f=A.f=et,n("35d4").f=Q,k.f=nt,o&&!n("3d8a")&&u(B,"propertyIsEnumerable",Q,!0),h.f=function(t){return K(p(t))}),a(a.G+a.W+a.F*!z,{Symbol:P});for(var rt="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),it=0;rt.length>it;)p(rt[it++]);for(var ot=$(p.store),at=0;ot.length>at;)v(ot[at++]);a(a.S+a.F*!z,"Symbol",{for:function(t){return i(V,t+="")?V[t]:V[t]=P(t)},keyFor:function(t){if(!J(t))throw TypeError(t+" is not a symbol!");for(var e in V)if(V[e]===t)return e},useSetter:function(){W=!0},useSimple:function(){W=!1}}),a(a.S+a.F*!z,"Object",{create:Z,defineProperty:X,defineProperties:Y,getOwnPropertyDescriptor:tt,getOwnPropertyNames:et,getOwnPropertySymbols:nt});var ut=s((function(){k.f(1)}));a(a.S+a.F*ut,"Object",{getOwnPropertySymbols:function(t){return k.f(_(t))}}),I&&a(a.S+a.F*(!z||s((function(){var t=P();return"[null]"!=T([t])||"{}"!=T({a:t})||"{}"!=T(Object(t))}))),"JSON",{stringify:function(t){var e,n,r=[t],i=1;while(arguments.length>i)r.push(arguments[i++]);if(n=e=r[1],(g(e)||void 0!==t)&&!J(t))return b(e)||(e=function(t,e){if("function"==typeof n&&(e=n.call(this,t,e)),!J(e))return e}),r[1]=e,T.apply(I,r)}}),P[F][L]||n("065d")(P[F],L,P[F].valueOf),l(P,"Symbol"),l(Math,"Math",!0),l(r.JSON,"JSON",!0)},"953d":function(t,e){t.exports={}},"95b6":function(t,e,n){"use strict";var r=n("0926");t.exports=function(t,e){return!!t&&r((function(){e?t.call(null,(function(){}),1):t.call(null)}))}},"982e":function(t,e,n){"use strict";var r=n("e99b"),i=n("db34"),o="includes";r(r.P+r.F*n("581c")(o),"String",{includes:function(t){return!!~i(this,t,o).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},9848:function(t,e,n){"use strict";var r=n("e99b"),i=n("1663")(!0),o=n("0926"),a=o((function(){return"𠮷"!=="𠮷".at(0)}));r(r.P+r.F*a,"String",{at:function(t){return i(this,t)}})},"98de":function(t,e,n){"use strict";var r=n("bb8b").f,i=n("7ee3"),o=n("6f45"),a=n("1e4d"),u=n("8b5a"),c=n("2b37"),s=n("120f"),f=n("6fef"),l=n("f966"),d=n("26df"),p=n("49f2").fastKey,h=n("0b28"),v=d?"_s":"size",y=function(t,e){var n,r=p(e);if("F"!==r)return t._i[r];for(n=t._f;n;n=n.n)if(n.k==e)return n};t.exports={getConstructor:function(t,e,n,s){var f=t((function(t,r){u(t,f,e,"_i"),t._t=e,t._i=i(null),t._f=void 0,t._l=void 0,t[v]=0,void 0!=r&&c(r,n,t[s],t)}));return o(f.prototype,{clear:function(){for(var t=h(this,e),n=t._i,r=t._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];t._f=t._l=void 0,t[v]=0},delete:function(t){var n=h(this,e),r=y(n,t);if(r){var i=r.n,o=r.p;delete n._i[r.i],r.r=!0,o&&(o.n=i),i&&(i.p=o),n._f==r&&(n._f=i),n._l==r&&(n._l=o),n[v]--}return!!r},forEach:function(t){h(this,e);var n,r=a(t,arguments.length>1?arguments[1]:void 0,3);while(n=n?n.n:this._f){r(n.v,n.k,this);while(n&&n.r)n=n.p}},has:function(t){return!!y(h(this,e),t)}}),d&&r(f.prototype,"size",{get:function(){return h(this,e)[v]}}),f},def:function(t,e,n){var r,i,o=y(t,e);return o?o.v=n:(t._l=o={i:i=p(e,!0),k:e,v:n,p:r=t._l,n:void 0,r:!1},t._f||(t._f=o),r&&(r.n=o),t[v]++,"F"!==i&&(t._i[i]=o)),t},getEntry:y,setStrong:function(t,e,n){s(t,e,(function(t,n){this._t=h(t,e),this._k=n,this._l=void 0}),(function(){var t=this,e=t._k,n=t._l;while(n&&n.r)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?f(0,"keys"==e?n.k:"values"==e?n.v:[n.k,n.v]):(t._t=void 0,f(1))}),n?"entries":"values",!n,!0),l(e)}}},"991d":function(t,e,n){n("4b79")("Map")},"99ef":function(t,e,n){"use strict";var r=n("e99b"),i=n("bbcc"),o=n("cea2"),a=n("732b"),u=n("201c"),c=[].slice;r(r.P+r.F*n("0926")((function(){i&&c.call(i)})),"Array",{slice:function(t,e){var n=u(this.length),r=o(this);if(e=void 0===e?n:e,"Array"==r)return c.call(this,t,e);for(var i=a(t,n),s=a(e,n),f=u(s-i),l=new Array(f),d=0;d<f;d++)l[d]="String"==r?this.charAt(i+d):this[i+d];return l}})},"9a9d":function(t,e,n){var r=n("cea2");t.exports=function(t,e){if("number"!=typeof t&&"Number"!=r(t))throw TypeError(e);return+t}},"9cff":function(t,e){t.exports=function(t){return"object"===typeof t?null!==t:"function"===typeof t}},"9f11":function(t,e,n){"use strict";var r=n("e99b"),i=n("3ab0"),o=n("201c"),a=n("804d"),u=n("6bf8"),c=RegExp.prototype,s=function(t,e){this._r=t,this._s=e};n("3460")(s,"RegExp String",(function(){var t=this._r.exec(this._s);return{value:t,done:null===t}})),r(r.P,"String",{matchAll:function(t){if(i(this),!a(t))throw TypeError(t+" is not a regexp!");var e=String(this),n="flags"in c?String(t.flags):u.call(t),r=new RegExp(t.source,~n.indexOf("g")?n:"g"+n);return r.lastIndex=o(t.lastIndex),new s(r,e)}})},"9f15":function(t,e,n){"use strict";var r=n("26df"),i=n("93ca"),o=n("0c29"),a=n("35d4"),u=n("8078"),c=n("1b96"),s=Object.assign;t.exports=!s||n("0926")((function(){var t={},e={},n=Symbol(),r="abcdefghijklmnopqrst";return t[n]=7,r.split("").forEach((function(t){e[t]=t})),7!=s({},t)[n]||Object.keys(s({},e)).join("")!=r}))?function(t,e){var n=u(t),s=arguments.length,f=1,l=o.f,d=a.f;while(s>f){var p,h=c(arguments[f++]),v=l?i(h).concat(l(h)):i(h),y=v.length,b=0;while(y>b)p=v[b++],r&&!d.call(h,p)||(n[p]=h[p])}return n}:s},"9f45":function(t,e,n){"use strict";(function(t){if(n("521c"),n("cfc2"),n("79f2"),t._babelPolyfill)throw new Error("only one instance of babel-polyfill is allowed");t._babelPolyfill=!0;var e="defineProperty";function r(t,n,r){t[n]||Object[e](t,n,{writable:!0,configurable:!0,value:r})}r(String.prototype,"padLeft","".padStart),r(String.prototype,"padRight","".padEnd),"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach((function(t){[][t]&&r(Array,t,Function.call.bind([][t]))}))}).call(this,n("2409"))},"9f60":function(t,e,n){n("078c")("asyncIterator")},"9fed":function(t,e,n){"use strict";n.d(e,"a",(function(){return qt})),n.d(e,"b",(function(){return Mt})),n.d(e,"c",(function(){return N})),n.d(e,"d",(function(){return M}));var r=n("430a");function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)
                                                  +/**
                                                  +  * vee-validate v3.4.14
                                                  +  * (c) 2021 Abdelrahman Awad
                                                  +  * @license MIT
                                                  +  */
                                                  +/*! *****************************************************************************
                                                  +Copyright (c) Microsoft Corporation.
                                                  +
                                                  +Permission to use, copy, modify, and/or distribute this software for any
                                                  +purpose with or without fee is hereby granted.
                                                  +
                                                  +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
                                                  +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
                                                  +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
                                                  +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
                                                  +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
                                                  +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
                                                  +PERFORMANCE OF THIS SOFTWARE.
                                                  +***************************************************************************** */}var o=function(){return o=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n],e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},o.apply(this,arguments)};function a(t,e,n,r){function i(t){return t instanceof n?t:new n((function(e){e(t)}))}return new(n||(n=Promise))((function(n,o){function a(t){try{c(r.next(t))}catch(e){o(e)}}function u(t){try{c(r["throw"](t))}catch(e){o(e)}}function c(t){t.done?n(t.value):i(t.value).then(a,u)}c((r=r.apply(t,e||[])).next())}))}function u(t,e){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"===typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(t){return function(e){return c([t,e])}}function c(o){if(n)throw new TypeError("Generator is already executing.");while(a)try{if(n=1,r&&(i=2&o[0]?r["return"]:o[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(i=a.trys,!(i=i.length>0&&i[i.length-1])&&(6===o[0]||2===o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=e.call(t,a)}catch(u){o=[6,u],r=0}finally{n=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}}function c(){for(var t=0,e=0,n=arguments.length;e<n;e++)t+=arguments[e].length;var r=Array(t),i=0;for(e=0;e<n;e++)for(var o=arguments[e],a=0,u=o.length;a<u;a++,i++)r[i]=o[a];return r}function s(t){return t!==t}function f(t){return null===t||void 0===t}function l(t){return Array.isArray(t)&&0===t.length}var d=function(t){return null!==t&&t&&"object"===i(t)&&!Array.isArray(t)};function p(t,e){return!(!s(t)||!s(e))||t===e}function h(t){return""!==t&&!f(t)}function v(t){return"function"===typeof t}function y(t){return v(t)&&!!t.__locatorRef}function b(t,e){var n=Array.isArray(t)?t:_(t);if(v(n.findIndex))return n.findIndex(e);for(var r=0;r<n.length;r++)if(e(n[r],r))return r;return-1}function m(t,e){var n=Array.isArray(t)?t:_(t),r=b(n,e);return-1===r?void 0:n[r]}function g(t,e){return-1!==t.indexOf(e)}function _(t){return v(Array.from)?Array.from(t):w(t)}function w(t){for(var e=[],n=t.length,r=0;r<n;r++)e.push(t[r]);return e}function x(t){return v(Object.values)?Object.values(t):Object.keys(t).map((function(e){return t[e]}))}function S(t,e){return Object.keys(e).forEach((function(n){if(d(e[n]))return t[n]||(t[n]={}),void S(t[n],e[n]);t[n]=e[n]})),t}function O(){return{untouched:!0,touched:!1,dirty:!1,pristine:!0,valid:!1,invalid:!1,validated:!1,pending:!1,required:!1,changed:!1,passed:!1,failed:!1}}function A(t,e,n){return void 0===e&&(e=0),void 0===n&&(n={cancelled:!1}),0===e?t:function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];var a=function(){r=void 0,n.cancelled||t.apply(void 0,i)};clearTimeout(r),r=setTimeout(a,e)};var r}function E(t){console.warn("[vee-validate] "+t)}function k(t,e){return t.replace(/{([^}]+)}/g,(function(t,n){return n in e?e[n]:"{"+n+"}"}))}var C={};function $(t){var e;return(null===(e=t.params)||void 0===e?void 0:e.length)&&(t.params=t.params.map((function(t){return"string"===typeof t?{name:t}:t}))),t}var j=function(){function t(){}return t.extend=function(t,e){var n=$(e);C[t]?C[t]=S(C[t],e):C[t]=o({lazy:!1,computesRequired:!1},n)},t.isLazy=function(t){var e;return!!(null===(e=C[t])||void 0===e?void 0:e.lazy)},t.isRequireRule=function(t){var e;return!!(null===(e=C[t])||void 0===e?void 0:e.computesRequired)},t.getRuleDefinition=function(t){return C[t]},t}();function M(t,e){R(t,e),"object"!==i(e)?j.extend(t,{validate:e}):j.extend(t,e)}function R(t,e){if(!v(e)&&!v(e.validate)&&!j.getRuleDefinition(t))throw new Error("Extension Error: The validator '"+t+"' must be a function or have a 'validate' method.")}var P={defaultMessage:"{_field_} is not valid.",skipOptional:!0,classes:{touched:"touched",untouched:"untouched",valid:"valid",invalid:"invalid",pristine:"pristine",dirty:"dirty"},bails:!0,mode:"aggressive",useConstraintAttrs:!0},I=o({},P),T=function(){return I},F=function(t){I=o(o({},I),t)},N=function(t){F(t)};function L(t){var e={};return Object.defineProperty(e,"_$$isNormalized",{value:!0,writable:!1,enumerable:!1,configurable:!1}),t?d(t)&&t._$$isNormalized?t:d(t)?Object.keys(t).reduce((function(e,n){var r=[];return r=!0===t[n]?[]:Array.isArray(t[n])||d(t[n])?t[n]:[t[n]],!1!==t[n]&&(e[n]=D(n,r)),e}),e):"string"!==typeof t?(E("rules must be either a string or an object."),e):t.split("|").reduce((function(t,e){var n=V(e);return n.name?(t[n.name]=D(n.name,n.params),t):t}),e):e}function D(t,e){var n=j.getRuleDefinition(t);if(!n)return e;var r,i,o={};if(!n.params&&!Array.isArray(e))throw new Error("You provided an object params to a rule that has no defined schema.");if(Array.isArray(e)&&!n.params)return e;!n.params||n.params.length<e.length&&Array.isArray(e)?r=e.map((function(t,e){var r,o=null===(r=n.params)||void 0===r?void 0:r[e];return i=o||i,o||(o=i),o})):r=n.params;for(var a=0;a<r.length;a++){var u=r[a],c=u.default;Array.isArray(e)?a in e&&(c=e[a]):u.name in e?c=e[u.name]:1===r.length&&(c=e),u.isTarget&&(c=U(c,u.cast)),"string"===typeof c&&"@"===c[0]&&(c=U(c.slice(1),u.cast)),!y(c)&&u.cast&&(c=u.cast(c)),o[u.name]?(o[u.name]=Array.isArray(o[u.name])?o[u.name]:[o[u.name]],o[u.name].push(c)):o[u.name]=c}return o}var V=function(t){var e=[],n=t.split(":")[0];return g(t,":")&&(e=t.split(":").slice(1).join(":").split(",")),{name:n,params:e}};function U(t,e){var n=function(n){var r=n[t];return e?e(r):r};return n.__locatorRef=t,n}function q(t){return Array.isArray(t)?t.filter((function(t){return y(t)||"string"===typeof t&&"@"===t[0]})):Object.keys(t).filter((function(e){return y(t[e])})).map((function(e){return t[e]}))}function B(t,e,n){return void 0===n&&(n={}),a(this,void 0,void 0,(function(){var r,i,o,a,c,s,f;return u(this,(function(u){switch(u.label){case 0:return r=null===n||void 0===n?void 0:n.bails,i=null===n||void 0===n?void 0:n.skipIfEmpty,o={name:(null===n||void 0===n?void 0:n.name)||"{field}",rules:L(e),bails:null===r||void 0===r||r,skipIfEmpty:null===i||void 0===i||i,forceRequired:!1,crossTable:(null===n||void 0===n?void 0:n.values)||{},names:(null===n||void 0===n?void 0:n.names)||{},customMessages:(null===n||void 0===n?void 0:n.customMessages)||{}},[4,z(o,t,n)];case 1:return a=u.sent(),c=[],s={},f={},a.errors.forEach((function(t){var e=t.msg();c.push(e),s[t.rule]=e,f[t.rule]=t.msg})),[2,{valid:a.valid,required:a.required,errors:c,failedRules:s,regenerateMap:f}]}}))}))}function z(t,e,n){var r=(void 0===n?{}:n).isInitial,i=void 0!==r&&r;return a(this,void 0,void 0,(function(){var n,r,o,a,c,s,f,l,d;return u(this,(function(u){switch(u.label){case 0:return[4,G(t,e)];case 1:if(n=u.sent(),r=n.shouldSkip,o=n.required,a=n.errors,r)return[2,{valid:!a.length,required:o,errors:a}];c=Object.keys(t.rules).filter((function(t){return!j.isRequireRule(t)})),s=c.length,f=0,u.label=2;case 2:return f<s?i&&j.isLazy(c[f])?[3,4]:(l=c[f],[4,W(t,e,{name:l,params:t.rules[l]})]):[3,5];case 3:if(d=u.sent(),!d.valid&&d.error&&(a.push(d.error),t.bails))return[2,{valid:!1,required:o,errors:a}];u.label=4;case 4:return f++,[3,2];case 5:return[2,{valid:!a.length,required:o,errors:a}]}}))}))}function G(t,e){return a(this,void 0,void 0,(function(){var n,r,i,o,a,c,s,p,h;return u(this,(function(u){switch(u.label){case 0:n=Object.keys(t.rules).filter(j.isRequireRule),r=n.length,i=[],o=f(e)||""===e||l(e),a=o&&t.skipIfEmpty,s=0,u.label=1;case 1:return s<r?(p=n[s],[4,W(t,e,{name:p,params:t.rules[p]})]):[3,4];case 2:if(h=u.sent(),!d(h))throw new Error("Require rules has to return an object (see docs)");if(void 0!==h.required&&(c=h.required),!h.valid&&h.error&&(i.push(h.error),t.bails))return[2,{shouldSkip:!0,required:h.required,errors:i}];u.label=3;case 3:return s++,[3,1];case 4:return(!o||c||t.skipIfEmpty)&&(t.bails||a)?[2,{shouldSkip:!c&&o,required:c,errors:i}]:[2,{shouldSkip:!1,required:c,errors:i}]}}))}))}function W(t,e,n){return a(this,void 0,void 0,(function(){var r,i,a,c,s;return u(this,(function(u){switch(u.label){case 0:if(r=j.getRuleDefinition(n.name),!r||!r.validate)throw new Error("No such validator '"+n.name+"' exists.");return i=r.castValue?r.castValue(e):e,a=Y(n.params,t.crossTable),[4,r.validate(i,a)];case 1:return c=u.sent(),"string"===typeof c?(s=o(o({},a||{}),{_field_:t.name,_value_:e,_rule_:n.name}),[2,{valid:!1,error:{rule:n.name,msg:function(){return k(c,s)}}}]):(d(c)||(c={valid:c}),[2,{valid:c.valid,required:c.required,error:c.valid?void 0:H(t,e,r,n.name,a)}])}}))}))}function H(t,e,n,r,i){var a,u=null!==(a=t.customMessages[r])&&void 0!==a?a:n.message,c=K(t,n,r),s=J(t,n,r,u),f=s.userTargets,l=s.userMessage,d=o(o(o(o({},i||{}),{_field_:t.name,_value_:e,_rule_:r}),c),f);return{msg:function(){return X(l||T().defaultMessage,t.name,d)},rule:r}}function K(t,e,n){var r=e.params;if(!r)return{};var i=r.filter((function(t){return t.isTarget})).length;if(i<=0)return{};var o={},a=t.rules[n];!Array.isArray(a)&&d(a)&&(a=r.map((function(t){return a[t.name]})));for(var u=0;u<r.length;u++){var c=r[u],s=a[u];if(y(s)){s=s.__locatorRef;var f=t.names[s]||s;o[c.name]=f,o["_"+c.name+"_"]=t.crossTable[s]}}return o}function J(t,e,n,r){var i={},o=t.rules[n],a=e.params||[];return o?(Object.keys(o).forEach((function(e,n){var r=o[e];if(!y(r))return{};var u=a[n];if(!u)return{};var c=r.__locatorRef;i[u.name]=t.names[c]||c,i["_"+u.name+"_"]=t.crossTable[c]})),{userTargets:i,userMessage:r}):{}}function X(t,e,n){return"function"===typeof t?t(e,n):k(t,o(o({},n),{_field_:e}))}function Y(t,e){if(Array.isArray(t))return t.map((function(t){var n="string"===typeof t&&"@"===t[0]?t.slice(1):t;return n in e?e[n]:t}));var n={},r=function(t){return y(t)?t(e):t};return Object.keys(t).forEach((function(e){n[e]=r(t[e])})),n}var Z=function(){return{on:["input","blur"]}},Q=function(){return{on:["change","blur"]}},tt=function(t){var e=t.errors;return e.length?{on:["input","change"]}:{on:["change","blur"]}},et=function(){return{on:[]}},nt={aggressive:Z,eager:tt,passive:et,lazy:Q},rt=new r["default"];(function(){function t(t,e){this.container={},this.locale=t,this.merge(e)}t.prototype.resolve=function(t,e,n){return this.format(this.locale,t,e,n)},t.prototype.format=function(t,e,n,r){var i,a,u,c,s,f,l,d,p,h=null===(u=null===(a=null===(i=this.container[t])||void 0===i?void 0:i.fields)||void 0===a?void 0:a[e])||void 0===u?void 0:u[n],y=null===(s=null===(c=this.container[t])||void 0===c?void 0:c.messages)||void 0===s?void 0:s[n];return p=h||y||"",p||(p="{_field_} is not valid"),e=null!==(d=null===(l=null===(f=this.container[t])||void 0===f?void 0:f.names)||void 0===l?void 0:l[e])&&void 0!==d?d:e,v(p)?p(e,r):k(p,o(o({},r),{_field_:e}))},t.prototype.merge=function(t){S(this.container,t)},t.prototype.hasRule=function(t){var e,n;return!!(null===(n=null===(e=this.container[this.locale])||void 0===e?void 0:e.messages)||void 0===n?void 0:n[t])}})();var it=function t(e,n){if(e===n)return!0;if(e&&n&&"object"==i(e)&&"object"==i(n)){if(e.constructor!==n.constructor)return!1;var r,o,a;if(Array.isArray(e)){if(r=e.length,r!=n.length)return!1;for(o=r;0!==o--;)if(!t(e[o],n[o]))return!1;return!0}if(e.constructor===RegExp)return e.source===n.source&&e.flags===n.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===n.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===n.toString();if(a=Object.keys(e),r=a.length,r!==Object.keys(n).length)return!1;for(o=r;0!==o--;)if(!Object.prototype.hasOwnProperty.call(n,a[o]))return!1;for(o=r;0!==o--;){var u=a[o];if(!t(e[u],n[u]))return!1}return!0}return e!==e&&n!==n},ot=function(t){return!!t&&(!!("undefined"!==typeof Event&&v(Event)&&t instanceof Event)||!(!t||!t.srcElement))};function at(t){var e,n;if(!ot(t))return t;var r=t.target;if("file"===r.type&&r.files)return _(r.files);if(null===(e=r._vModifiers)||void 0===e?void 0:e.number){var i=parseFloat(r.value);return s(i)?r.value:i}if(null===(n=r._vModifiers)||void 0===n?void 0:n.trim){var o="string"===typeof r.value?r.value.trim():r.value;return o}return r.value}var ut=function(t){var e,n=(null===(e=t.data)||void 0===e?void 0:e.attrs)||t.elm;return!("input"!==t.tag||n&&n.type)||("textarea"===t.tag||g(["text","password","search","email","tel","url","number"],null===n||void 0===n?void 0:n.type))};function ct(t){if(t.data){var e=t.data;if("model"in e)return e.model;if(t.data.directives)return m(t.data.directives,(function(t){return"model"===t.name}))}}function st(t){var e,n,r=ct(t);if(r)return{value:r.value};var i=dt(t),o=(null===i||void 0===i?void 0:i.prop)||"value";if((null===(e=t.componentOptions)||void 0===e?void 0:e.propsData)&&o in t.componentOptions.propsData){var a=t.componentOptions.propsData;return{value:a[o]}}return(null===(n=t.data)||void 0===n?void 0:n.domProps)&&"value"in t.data.domProps?{value:t.data.domProps.value}:void 0}function ft(t){return Array.isArray(t)?t:Array.isArray(t.children)?t.children:t.componentOptions&&Array.isArray(t.componentOptions.children)?t.componentOptions.children:[]}function lt(t){if(!Array.isArray(t)&&void 0!==st(t))return[t];var e=ft(t);return e.reduce((function(t,e){var n=lt(e);return n.length&&t.push.apply(t,n),t}),[])}function dt(t){return t.componentOptions?t.componentOptions.Ctor.options.model:null}function pt(t,e,n){if(f(t[e]))t[e]=[n];else{if(v(t[e])&&t[e].fns){var r=t[e];return r.fns=Array.isArray(r.fns)?r.fns:[r.fns],void(g(r.fns,n)||r.fns.push(n))}if(v(t[e])){var i=t[e];t[e]=[i]}Array.isArray(t[e])&&!g(t[e],n)&&t[e].push(n)}}function ht(t,e,n){t.data||(t.data={}),f(t.data.on)&&(t.data.on={}),pt(t.data.on,e,n)}function vt(t,e,n){t.componentOptions&&(t.componentOptions.listeners||(t.componentOptions.listeners={}),pt(t.componentOptions.listeners,e,n))}function yt(t,e,n){t.componentOptions?vt(t,e,n):ht(t,e,n)}function bt(t,e){var n;if(t.componentOptions){var r=(dt(t)||{event:"input"}).event;return r}return(null===(n=null===e||void 0===e?void 0:e.modifiers)||void 0===n?void 0:n.lazy)?"change":ut(t)?"input":"change"}function mt(t){return g(["input","select","textarea"],t.tag)}function gt(t){var e,n=null===(e=t.data)||void 0===e?void 0:e.attrs,r={};return n?("email"===n.type&&j.getRuleDefinition("email")&&(r.email=["multiple"in n]),n.pattern&&j.getRuleDefinition("regex")&&(r.regex=n.pattern),n.maxlength>=0&&j.getRuleDefinition("max")&&(r.max=n.maxlength),n.minlength>=0&&j.getRuleDefinition("min")&&(r.min=n.minlength),"number"===n.type&&(h(n.min)&&j.getRuleDefinition("min_value")&&(r.min_value=Number(n.min)),h(n.max)&&j.getRuleDefinition("max_value")&&(r.max_value=Number(n.max))),r):r}function _t(t){var e,n=["input","select","textarea"],r=null===(e=t.data)||void 0===e?void 0:e.attrs;if(!g(n,t.tag)||!r)return{};var i={};return"required"in r&&!1!==r.required&&j.getRuleDefinition("required")&&(i.required="checkbox"!==r.type||[!0]),ut(t)?L(o(o({},i),gt(t))):L(i)}function wt(t,e){return t.$scopedSlots.default?t.$scopedSlots.default(e)||[]:t.$slots.default||[]}function xt(t,e){return!(t._ignoreImmediate||!t.immediate)||(!(p(t.value,e)||!t.normalizedEvents.length)||(!!t._needsValidation||!t.initialized&&void 0===e))}function St(t){return o(o({},t.flags),{errors:t.errors,classes:t.classes,failedRules:t.failedRules,reset:function(){return t.reset()},validate:function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return t.validate.apply(t,e)},ariaInput:{"aria-invalid":t.flags.invalid?"true":"false","aria-required":t.isRequired?"true":"false","aria-errormessage":"vee_"+t.id},ariaMsg:{id:"vee_"+t.id,"aria-live":t.errors.length?"assertive":"off"}})}function Ot(t,e){t.initialized||(t.initialValue=e);var n=xt(t,e);if(t._needsValidation=!1,t.value=e,t._ignoreImmediate=!0,n){var r=function(){if(t.immediate||t.flags.validated)return Et(t);t.validateSilent()};t.initialized?r():t.$once("hook:mounted",(function(){return r()}))}}function At(t){var e=v(t.mode)?t.mode:nt[t.mode];return e(t)}function Et(t){var e=t.validateSilent();return t._pendingValidation=e,e.then((function(n){return e===t._pendingValidation&&(t.applyResult(n),t._pendingValidation=void 0),n}))}function kt(t){t.$veeOnInput||(t.$veeOnInput=function(e){t.syncValue(e),t.setFlags({dirty:!0,pristine:!1})});var e=t.$veeOnInput;t.$veeOnBlur||(t.$veeOnBlur=function(){t.setFlags({touched:!0,untouched:!1})});var n=t.$veeOnBlur,r=t.$veeHandler,i=At(t);return r&&t.$veeDebounce===t.debounce||(r=A((function(){t.$nextTick((function(){t._pendingReset||Et(t),t._pendingReset=!1}))}),i.debounce||t.debounce),t.$veeHandler=r,t.$veeDebounce=t.debounce),{onInput:e,onBlur:n,onValidate:r}}function Ct(t,e){var n=st(e);t._inputEventName=t._inputEventName||bt(e,ct(e)),Ot(t,null===n||void 0===n?void 0:n.value);var r=kt(t),i=r.onInput,o=r.onBlur,a=r.onValidate;yt(e,t._inputEventName,i),yt(e,"blur",o),t.normalizedEvents.forEach((function(t){yt(e,t,a)})),t.initialized=!0}var $t=0;function jt(){var t=[],e="",n={errors:t,value:void 0,initialized:!1,initialValue:void 0,flags:O(),failedRules:{},isActive:!0,fieldName:e,id:""};return n}var Mt=r["default"].extend({name:"ValidationProvider",inject:{$_veeObserver:{from:"$_veeObserver",default:function(){return this.$vnode.context.$_veeObserver||(this.$vnode.context.$_veeObserver=Ft()),this.$vnode.context.$_veeObserver}}},props:{vid:{type:String,default:""},name:{type:String,default:null},mode:{type:[String,Function],default:function(){return T().mode}},rules:{type:[Object,String],default:null},immediate:{type:Boolean,default:!1},bails:{type:Boolean,default:function(){return T().bails}},skipIfEmpty:{type:Boolean,default:function(){return T().skipOptional}},debounce:{type:Number,default:0},tag:{type:String,default:"span"},slim:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},customMessages:{type:Object,default:function(){return{}}},detectInput:{type:Boolean,default:!0}},watch:{rules:{deep:!0,handler:function(t,e){this._needsValidation=!it(t,e)}}},data:jt,computed:{fieldDeps:function(){var t=this;return Object.keys(this.normalizedRules).reduce((function(e,n){var r=q(t.normalizedRules[n]).map((function(t){return y(t)?t.__locatorRef:t.slice(1)}));return e.push.apply(e,r),r.forEach((function(e){Nt(t,e)})),e}),[])},normalizedEvents:function(){var t=this,e=At(this).on;return(e||[]).map((function(e){return"input"===e?t._inputEventName:e}))},isRequired:function(){var t=o(o({},this._resolvedRules),this.normalizedRules),e=Object.keys(t).some(j.isRequireRule);return this.flags.required=!!e,e},classes:function(){var t=T().classes;return Rt(t,this.flags)},normalizedRules:function(){return L(this.rules)}},mounted:function(){var t=this,e=function(){if(t.flags.validated){var e=t._regenerateMap;if(e){var n=[],r={};return Object.keys(e).forEach((function(t){var i=e[t]();n.push(i),r[t]=i})),void t.applyResult({errors:n,failedRules:r,regenerateMap:e})}t.validate()}};rt.$on("change:locale",e),this.$on("hook:beforeDestroy",(function(){rt.$off("change:locale",e)}))},render:function(t){var e=this;this.registerField();var n=St(this),r=wt(this,n);if(this.detectInput){var i=lt(r);i.length&&i.forEach((function(t,n){var r,i,o,a,u,c;if(g(["checkbox","radio"],null===(i=null===(r=t.data)||void 0===r?void 0:r.attrs)||void 0===i?void 0:i.type)||!(n>0)){var s=T().useConstraintAttrs?_t(t):{};it(e._resolvedRules,s)||(e._needsValidation=!0),mt(t)&&(e.fieldName=(null===(a=null===(o=t.data)||void 0===o?void 0:o.attrs)||void 0===a?void 0:a.name)||(null===(c=null===(u=t.data)||void 0===u?void 0:u.attrs)||void 0===c?void 0:c.id)),e._resolvedRules=s,Ct(e,t)}}))}return this.slim&&r.length<=1?r[0]:t(this.tag,r)},beforeDestroy:function(){this.$_veeObserver.unobserve(this.id)},activated:function(){this.isActive=!0},deactivated:function(){this.isActive=!1},methods:{setFlags:function(t){var e=this;Object.keys(t).forEach((function(n){e.flags[n]=t[n]}))},syncValue:function(t){var e=at(t);this.value=e,this.flags.changed=!it(this.initialValue,e)},reset:function(){var t=this;this.errors=[],this.initialValue=this.value;var e=O();e.required=this.isRequired,this.setFlags(e),this.failedRules={},this.validateSilent(),this._pendingValidation=void 0,this._pendingReset=!0,setTimeout((function(){t._pendingReset=!1}),this.debounce)},validate:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return a(this,void 0,void 0,(function(){return u(this,(function(e){return t.length>0&&this.syncValue(t[0]),[2,Et(this)]}))}))},validateSilent:function(){return a(this,void 0,void 0,(function(){var t,e;return u(this,(function(n){switch(n.label){case 0:return this.setFlags({pending:!0}),t=o(o({},this._resolvedRules),this.normalizedRules),Object.defineProperty(t,"_$$isNormalized",{value:!0,writable:!1,enumerable:!1,configurable:!1}),[4,B(this.value,t,o(o({name:this.name||this.fieldName},Pt(this)),{bails:this.bails,skipIfEmpty:this.skipIfEmpty,isInitial:!this.initialized,customMessages:this.customMessages}))];case 1:return e=n.sent(),this.setFlags({pending:!1,valid:e.valid,invalid:!e.valid}),void 0!==e.required&&this.setFlags({required:e.required}),[2,e]}}))}))},setErrors:function(t){this.applyResult({errors:t,failedRules:{}})},applyResult:function(t){var e=t.errors,n=t.failedRules,r=t.regenerateMap;this.errors=e,this._regenerateMap=r,this.failedRules=o({},n||{}),this.setFlags({valid:!e.length,passed:!e.length,invalid:!!e.length,failed:!!e.length,validated:!0,changed:!it(this.value,this.initialValue)})},registerField:function(){Tt(this)},checkComputesRequiredState:function(){var t=o(o({},this._resolvedRules),this.normalizedRules),e=Object.keys(t).some(j.isRequireRule);return e}}});function Rt(t,e){for(var n={},r=Object.keys(e),i=r.length,o=function(i){var o=r[i],a=t&&t[o]||o,u=e[o];return f(u)?"continue":"valid"!==o&&"invalid"!==o||e.validated?void("string"===typeof a?n[a]=u:Array.isArray(a)&&a.forEach((function(t){n[t]=u}))):"continue"},a=0;a<i;a++)o(a);return n}function Pt(t){var e=t.$_veeObserver.refs,n={names:{},values:{}};return t.fieldDeps.reduce((function(t,n){return e[n]?(t.values[n]=e[n].value,t.names[n]=e[n].name,t):t}),n)}function It(t){return t.vid?t.vid:t.name?t.name:t.id?t.id:t.fieldName?t.fieldName:($t++,"_vee_"+$t)}function Tt(t){var e=It(t),n=t.id;!t.isActive||n===e&&t.$_veeObserver.refs[n]||(n!==e&&t.$_veeObserver.refs[n]===t&&t.$_veeObserver.unobserve(n),t.id=e,t.$_veeObserver.observe(t))}function Ft(){return{refs:{},observe:function(t){this.refs[t.id]=t},unobserve:function(t){delete this.refs[t]}}}function Nt(t,e,n){void 0===n&&(n=!0);var r=t.$_veeObserver.refs;if(t._veeWatchers||(t._veeWatchers={}),!r[e]&&n)return t.$once("hook:mounted",(function(){Nt(t,e,!1)}));!v(t._veeWatchers[e])&&r[e]&&(t._veeWatchers[e]=r[e].$watch("value",(function(){var e=t.checkComputesRequiredState();t.flags.validated&&(t._needsValidation=!0,t.validate()),e&&!t.flags.validated&&t.validateSilent()})))}var Lt=[["pristine","every"],["dirty","some"],["touched","some"],["untouched","every"],["valid","every"],["invalid","some"],["pending","some"],["validated","every"],["changed","some"],["passed","every"],["failed","some"]],Dt=0;function Vt(){var t={},e={},n=Wt(),r={},i=[];return{id:"",refs:t,observers:i,errors:e,flags:n,fields:r}}function Ut(){return{$_veeObserver:this}}var qt=r["default"].extend({name:"ValidationObserver",provide:Ut,inject:{$_veeObserver:{from:"$_veeObserver",default:function(){return this.$vnode.context.$_veeObserver?this.$vnode.context.$_veeObserver:null}}},props:{tag:{type:String,default:"span"},vid:{type:String,default:function(){return"obs_"+Dt++}},slim:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1}},data:Vt,created:function(){var t=this;this.id=this.vid,zt(this);var e=A((function(e){var n=e.errors,r=e.flags,i=e.fields;t.errors=n,t.flags=r,t.fields=i}),16);this.$watch(Ht,e)},activated:function(){zt(this)},deactivated:function(){Bt(this)},beforeDestroy:function(){Bt(this)},render:function(t){var e=wt(this,Gt(this));return this.slim&&e.length<=1?e[0]:t(this.tag,{on:this.$listeners},e)},methods:{observe:function(t,e){var n;void 0===e&&(e="provider"),"observer"!==e?this.refs=o(o({},this.refs),(n={},n[t.id]=t,n)):this.observers.push(t)},unobserve:function(t,e){if(void 0===e&&(e="provider"),"provider"!==e){var n=b(this.observers,(function(e){return e.id===t}));-1!==n&&this.observers.splice(n,1)}else{var r=this.refs[t];if(!r)return;this.$delete(this.refs,t)}},validateWithInfo:function(t){var e=(void 0===t?{}:t).silent,n=void 0!==e&&e;return a(this,void 0,void 0,(function(){var t,e,r,i,o,a;return u(this,(function(u){switch(u.label){case 0:return[4,Promise.all(c(x(this.refs).filter((function(t){return!t.disabled})).map((function(t){return t[n?"validateSilent":"validate"]().then((function(t){return t.valid}))})),this.observers.filter((function(t){return!t.disabled})).map((function(t){return t.validate({silent:n})}))))];case 1:return t=u.sent(),e=t.every((function(t){return t})),r=Ht.call(this),i=r.errors,o=r.flags,a=r.fields,this.errors=i,this.flags=o,this.fields=a,[2,{errors:i,flags:o,fields:a,isValid:e}]}}))}))},validate:function(t){var e=(void 0===t?{}:t).silent,n=void 0!==e&&e;return a(this,void 0,void 0,(function(){var t;return u(this,(function(e){switch(e.label){case 0:return[4,this.validateWithInfo({silent:n})];case 1:return t=e.sent().isValid,[2,t]}}))}))},handleSubmit:function(t){return a(this,void 0,void 0,(function(){var e;return u(this,(function(n){switch(n.label){case 0:return[4,this.validate()];case 1:return e=n.sent(),e&&t?[2,t()]:[2]}}))}))},reset:function(){return c(x(this.refs),this.observers).forEach((function(t){return t.reset()}))},setErrors:function(t){var e=this;Object.keys(t).forEach((function(n){var r=e.refs[n];if(r){var i=t[n]||[];i="string"===typeof i?[i]:i,r.setErrors(i)}})),this.observers.forEach((function(e){e.setErrors(t)}))}}});function Bt(t){t.$_veeObserver&&t.$_veeObserver.unobserve(t.id,"observer")}function zt(t){t.$_veeObserver&&t.$_veeObserver.observe(t,"observer")}function Gt(t){return o(o({},t.flags),{errors:t.errors,fields:t.fields,validate:t.validate,validateWithInfo:t.validateWithInfo,passes:t.handleSubmit,handleSubmit:t.handleSubmit,reset:t.reset})}function Wt(){return o(o({},O()),{valid:!0,invalid:!1})}function Ht(){for(var t=c(x(this.refs),this.observers.filter((function(t){return!t.disabled}))),e={},n=Wt(),r={},i=t.length,a=0;a<i;a++){var u=t[a];Array.isArray(u.errors)?(e[u.id]=u.errors,r[u.id]=o({id:u.id,name:u.name,failedRules:u.failedRules},u.flags)):(e=o(o({},e),u.errors),r=o(o({},r),u.fields))}return Lt.forEach((function(e){var r=e[0],i=e[1];n[r]=t[i]((function(t){return t.flags[r]}))})),{errors:e,flags:n,fields:r}}},a271:function(t,e,n){var r=n("e99b");r(r.S,"Number",{EPSILON:Math.pow(2,-52)})},a383:function(t,e,n){"use strict";n("6b6f")("fixed",(function(t){return function(){return t(this,"tt","","")}}))},a450:function(t,e,n){var r=n("bb8b").f,i=Function.prototype,o=/^\s*function ([^ (]*)/,a="name";a in i||n("26df")&&r(i,a,{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},a53a:function(t,e,n){var r=n("e99b");r(r.S,"Math",{log1p:n("def1")})},a618:function(t,e){t.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},a740:function(t,e,n){"use strict";var r=n("8078"),i=n("732b"),o=n("201c");t.exports=function(t){var e=r(this),n=o(e.length),a=arguments.length,u=i(a>1?arguments[1]:void 0,n),c=a>2?arguments[2]:void 0,s=void 0===c?n:i(c,n);while(s>u)e[u++]=t;return e}},a7e5:function(t,e,n){"use strict";var r=n("e99b"),i=n("e9aa")(6),o="findIndex",a=!0;o in[]&&Array(1)[o]((function(){a=!1})),r(r.P+r.F*a,"Array",{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),n("87b2")(o)},a83a:function(t,e,n){var r=n("9cff"),i=n("e0ff").set;t.exports=function(t,e,n){var o,a=e.constructor;return a!==n&&"function"==typeof a&&(o=a.prototype)!==n.prototype&&r(o)&&i&&i(t,o),t}},a86f:function(t,e,n){var r=n("9cff");t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},a9b9:function(t,e,n){var r=n("803a"),i=n("a86f"),o=n("addc"),a=r.has,u=r.get,c=r.key,s=function(t,e,n){var r=a(t,e,n);if(r)return u(t,e,n);var i=o(e);return null!==i?s(t,i,n):void 0};r.exp({getMetadata:function(t,e){return s(t,i(e),arguments.length<3?void 0:c(arguments[2]))}})},aa18:function(t,e,n){"use strict";var r=n("e99b"),i=n("52a4")(!0);r(r.P,"Array",{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),n("87b2")("includes")},aaea:function(t,e,n){var r=n("803a"),i=n("a86f"),o=r.keys,a=r.key;r.exp({getOwnMetadataKeys:function(t){return o(i(t),arguments.length<2?void 0:a(arguments[1]))}})},ab0a:function(t,e,n){var r=n("2b37");t.exports=function(t,e){var n=[];return r(t,!1,n.push,n,e),n}},ac67:function(t,e,n){var r=n("e99b"),i=n("e7c8"),o=n("3471"),a=n("285b"),u=n("1374");r(r.S,"Object",{getOwnPropertyDescriptors:function(t){var e,n,r=o(t),c=a.f,s=i(r),f={},l=0;while(s.length>l)n=c(r,e=s[l++]),void 0!==n&&u(f,e,n);return f}})},adb6:function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},addc:function(t,e,n){var r=n("4fd4"),i=n("8078"),o=n("3a0d")("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),r(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},aeb8:function(t,e,n){var r=n("0b34"),i=r.navigator;t.exports=i&&i.userAgent||""},b1d4:function(t,e,n){var r=n("a86f");t.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(a){var o=t["return"];throw void 0!==o&&r(o.call(t)),a}}},b2be:function(t,e,n){var r=n("e99b"),i=n("76e3"),o=n("0926");t.exports=function(t,e){var n=(i.Object||{})[t]||Object[t],a={};a[t]=e(n),r(r.S+r.F*o((function(){n(1)})),"Object",a)}},b3d7:function(t,e,n){var r=n("e99b"),i=n("d3ef")(!1);r(r.S,"Object",{values:function(t){return i(t)}})},b47f:function(t,e,n){"use strict";var r=n("e99b"),i=n("76e3"),o=n("0b34"),a=n("1b0b"),u=n("4836");r(r.P+r.R,"Promise",{finally:function(t){var e=a(this,i.Promise||o.Promise),n="function"==typeof t;return this.then(n?function(n){return u(e,t()).then((function(){return n}))}:t,n?function(n){return u(e,t()).then((function(){throw n}))}:t)}})},b4c1:function(t,e,n){var r=n("e99b");r(r.S,"Object",{is:n("69b0")})},b645:function(t,e,n){var r=n("c5cb"),i=n("ab0a"),o=n("803a"),a=n("a86f"),u=n("addc"),c=o.keys,s=o.key,f=function(t,e){var n=c(t,e),o=u(t);if(null===o)return n;var a=f(o,e);return a.length?n.length?i(new r(n.concat(a))):a:n};o.exp({getMetadataKeys:function(t){return f(a(t),arguments.length<2?void 0:s(arguments[1]))}})},b76b:function(t,e,n){n("106b")("Uint8",1,(function(t){return function(e,n,r){return t(this,e,n,r)}}))},b89a:function(t,e,n){"use strict";var r=n("e99b"),i=n("2392"),o=n("aeb8"),a=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);r(r.P+r.F*a,"String",{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},b968:function(t,e,n){"use strict";n("eb34")("trimRight",(function(t){return function(){return t(this,2)}}),"trimEnd")},baa7:function(t,e,n){var r=n("76e3"),i=n("0b34"),o="__core-js_shared__",a=i[o]||(i[o]={});(t.exports=function(t,e){return a[t]||(a[t]=void 0!==e?e:{})})("versions",[]).push({version:r.version,mode:n("3d8a")?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},bac3:function(t,e,n){var r=n("bb8b").f,i=n("4fd4"),o=n("839a")("toStringTag");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},bb8b:function(t,e,n){var r=n("a86f"),i=n("83d3"),o=n("5d10"),a=Object.defineProperty;e.f=n("26df")?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return a(t,e,n)}catch(u){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},bbcc:function(t,e,n){var r=n("0b34").document;t.exports=r&&r.documentElement},bcb9:function(t,e,n){n("106b")("Float64",8,(function(t){return function(e,n,r){return t(this,e,n,r)}}))},bd15:function(t,e,n){var r=n("d445"),i=n("ab0a");t.exports=function(t){return function(){if(r(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},bda0:function(t,e,n){var r=n("9cff"),i=Math.floor;t.exports=function(t){return!r(t)&&isFinite(t)&&i(t)===t}},be33:function(t,e,n){var r=n("e99b"),i=Math.exp;r(r.S,"Math",{cosh:function(t){return(i(t=+t)+i(-t))/2}})},be86:function(t,e,n){var r=n("e99b"),i=Math.abs;r(r.S,"Math",{hypot:function(t,e){var n,r,o=0,a=0,u=arguments.length,c=0;while(a<u)n=i(arguments[a++]),c<n?(r=c/n,o=o*r*r+1,c=n):n>0?(r=n/c,o+=r*r):o+=n;return c===1/0?1/0:c*Math.sqrt(o)}})},be91:function(t,e,n){var r=n("803a"),i=n("a86f"),o=r.key,a=r.map,u=r.store;r.exp({deleteMetadata:function(t,e){var n=arguments.length<3?void 0:o(arguments[2]),r=a(i(e),n,!1);if(void 0===r||!r["delete"](t))return!1;if(r.size)return!0;var c=u.get(e);return c["delete"](n),!!c.size||u["delete"](e)}})},bf34:function(t,e,n){"use strict";var r=n("1993"),i=n("0b28"),o="WeakSet";n("0bca")(o,(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return r.def(i(this,o),t,!0)}},r,!1,!0)},bf73:function(t,e,n){"use strict";var r=n("0353");n("e99b")({target:"RegExp",proto:!0,forced:r!==/./.exec},{exec:r})},c084:function(t,e,n){"use strict";n("6b6f")("italics",(function(t){return function(){return t(this,"i","","")}}))},c1a5:function(t,e,n){var r=n("e99b"),i=n("4024");r(r.S+r.F*(i!=Math.expm1),"Math",{expm1:i})},c250:function(t,e,n){n("d06b")("WeakMap")},c2c6:function(t,e,n){"use strict";n("6b6f")("bold",(function(t){return function(){return t(this,"b","","")}}))},c325:function(t,e,n){var r=n("e99b"),i=n("889e");r(r.G+r.F*(parseFloat!=i),{parseFloat:i})},c331:function(t,e,n){var r=n("e99b");r(r.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},c358:function(t,e,n){var r=n("e99b");r(r.S,"Math",{scale:n("0ee5")})},c38b:function(t,e,n){"use strict";n("6b6f")("sub",(function(t){return function(){return t(this,"sub","","")}}))},c46f:function(t,e,n){"use strict";n("bf73");var r=n("84e8"),i=n("065d"),o=n("0926"),a=n("3ab0"),u=n("839a"),c=n("0353"),s=u("species"),f=!o((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")})),l=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2===n.length&&"a"===n[0]&&"b"===n[1]}();t.exports=function(t,e,n){var d=u(t),p=!o((function(){var e={};return e[d]=function(){return 7},7!=""[t](e)})),h=p?!o((function(){var e=!1,n=/a/;return n.exec=function(){return e=!0,null},"split"===t&&(n.constructor={},n.constructor[s]=function(){return n}),n[d](""),!e})):void 0;if(!p||!h||"replace"===t&&!f||"split"===t&&!l){var v=/./[d],y=n(a,d,""[t],(function(t,e,n,r,i){return e.exec===c?p&&!i?{done:!0,value:v.call(e,n,r)}:{done:!0,value:t.call(n,e,r)}:{done:!1}})),b=y[0],m=y[1];r(String.prototype,t,b),i(RegExp.prototype,d,2==e?function(t,e){return m.call(t,this,e)}:function(t){return m.call(t,this)})}}},c5cb:function(t,e,n){"use strict";var r=n("98de"),i=n("0b28"),o="Set";t.exports=n("0bca")(o,(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return r.def(i(this,o),t=0===t?0:t,t)}},r)},c5f7:function(t,e,n){var r=n("e99b"),i=n("edec");r(r.G+r.B,{setImmediate:i.set,clearImmediate:i.clear})},c7f7:function(t,e,n){var r=n("e99b");r(r.S,"Math",{sign:n("f597")})},c815:function(t,e,n){var r=n("e99b");r(r.G,{global:n("0b34")})},c818:function(t,e,n){var r=n("0b34"),i=n("e99b"),o=n("aeb8"),a=[].slice,u=/MSIE .\./.test(o),c=function(t){return function(e,n){var r=arguments.length>2,i=!!r&&a.call(arguments,2);return t(r?function(){("function"==typeof e?e:Function(e)).apply(this,i)}:e,n)}};i(i.G+i.B+i.F*u,{setTimeout:c(r.setTimeout),setInterval:c(r.setInterval)})},ca9a:function(t,e,n){"use strict";var r=n("e99b"),i=n("3471"),o=[].join;r(r.P+r.F*(n("1b96")!=Object||!n("95b6")(o)),"Array",{join:function(t){return o.call(i(this),void 0===t?",":t)}})},cabe:function(t,e,n){var r=n("e99b"),i=n("e0ff");i&&r(r.S,"Reflect",{setPrototypeOf:function(t,e){i.check(t,e);try{return i.set(t,e),!0}catch(n){return!1}}})},cb85:function(t,e,n){var r=n("212e"),i=n("201c");t.exports=function(t){if(void 0===t)return 0;var e=r(t),n=i(e);if(e!==n)throw RangeError("Wrong length!");return n}},cba8:function(t,e,n){"use strict";function r(t,e,n,r,i,o,a,u){var c,s="function"===typeof t?t.options:t;if(e&&(s.render=e,s.staticRenderFns=n,s._compiled=!0),r&&(s.functional=!0),o&&(s._scopeId="data-v-"+o),a?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"===typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},s._ssrRegister=c):i&&(c=u?function(){i.call(this,(s.functional?this.parent:this).$root.$options.shadowRoot)}:i),c)if(s.functional){s._injectStyles=c;var f=s.render;s.render=function(t,e){return c.call(e),f(t,e)}}else{var l=s.beforeCreate;s.beforeCreate=l?[].concat(l,c):[c]}return{exports:t,options:s}}n.d(e,"a",(function(){return r}))},cbf7:function(t,e,n){var r=n("e99b"),i=Math.atanh;r(r.S+r.F*!(i&&1/i(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},cc27:function(t,e,n){var r=n("e99b"),i=n("732b"),o=String.fromCharCode,a=String.fromCodePoint;r(r.S+r.F*(!!a&&1!=a.length),"String",{fromCodePoint:function(t){var e,n=[],r=arguments.length,a=0;while(r>a){if(e=+arguments[a++],i(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(e<65536?o(e):o(55296+((e-=65536)>>10),e%1024+56320))}return n.join("")}})},ce05:function(t,e,n){"use strict";var r=n("e99b"),i=n("3fa7");r(r.P+r.F*!n("95b6")([].reduceRight,!0),"Array",{reduceRight:function(t){return i(this,t,arguments.length,arguments[1],!0)}})},cea2:function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},cfc2:function(t,e,n){(function(t,e){function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}!function(t){"use strict";var r,i=Object.prototype,o=i.hasOwnProperty,a="function"===typeof Symbol?Symbol:{},u=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag",f="object"===n(e),l=t.regeneratorRuntime;if(l)f&&(e.exports=l);else{l=t.regeneratorRuntime=f?e.exports:{},l.wrap=w;var d="suspendedStart",p="suspendedYield",h="executing",v="completed",y={},b={};b[u]=function(){return this};var m=Object.getPrototypeOf,g=m&&m(m(P([])));g&&g!==i&&o.call(g,u)&&(b=g);var _=A.prototype=S.prototype=Object.create(b);O.prototype=_.constructor=A,A.constructor=O,A[s]=O.displayName="GeneratorFunction",l.isGeneratorFunction=function(t){var e="function"===typeof t&&t.constructor;return!!e&&(e===O||"GeneratorFunction"===(e.displayName||e.name))},l.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,A):(t.__proto__=A,s in t||(t[s]="GeneratorFunction")),t.prototype=Object.create(_),t},l.awrap=function(t){return{__await:t}},E(k.prototype),k.prototype[c]=function(){return this},l.AsyncIterator=k,l.async=function(t,e,n,r){var i=new k(w(t,e,n,r));return l.isGeneratorFunction(e)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},E(_),_[s]="Generator",_[u]=function(){return this},_.toString=function(){return"[object Generator]"},l.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){while(e.length){var r=e.pop();if(r in t)return n.value=r,n.done=!1,n}return n.done=!0,n}},l.values=P,R.prototype={constructor:R,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(M),!t)for(var e in this)"t"===e.charAt(0)&&o.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=r)},stop:function(){this.done=!0;var t=this.tryEntries[0],e=t.completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(n,i){return u.type="throw",u.arg=t,e.next=n,i&&(e.method="next",e.arg=r),!!i}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],u=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var c=o.call(a,"catchLoc"),s=o.call(a,"finallyLoc");if(c&&s){if(this.prev<a.catchLoc)return n(a.catchLoc,!0);if(this.prev<a.finallyLoc)return n(a.finallyLoc)}else if(c){if(this.prev<a.catchLoc)return n(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return n(a.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&o.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var i=r;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,y):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),y},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),M(n),y}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;M(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:P(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),y}}}function w(t,e,n,r){var i=e&&e.prototype instanceof S?e:S,o=Object.create(i.prototype),a=new R(r||[]);return o._invoke=C(t,n,a),o}function x(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(r){return{type:"throw",arg:r}}}function S(){}function O(){}function A(){}function E(t){["next","throw","return"].forEach((function(e){t[e]=function(t){return this._invoke(e,t)}}))}function k(e){function r(t,i,a,u){var c=x(e[t],e,i);if("throw"!==c.type){var s=c.arg,f=s.value;return f&&"object"===n(f)&&o.call(f,"__await")?Promise.resolve(f.__await).then((function(t){r("next",t,a,u)}),(function(t){r("throw",t,a,u)})):Promise.resolve(f).then((function(t){s.value=t,a(s)}),u)}u(c.arg)}var i;function a(t,e){function n(){return new Promise((function(n,i){r(t,e,n,i)}))}return i=i?i.then(n,n):n()}"object"===n(t.process)&&t.process.domain&&(r=t.process.domain.bind(r)),this._invoke=a}function C(t,e,n){var r=d;return function(i,o){if(r===h)throw new Error("Generator is already running");if(r===v){if("throw"===i)throw o;return I()}n.method=i,n.arg=o;while(1){var a=n.delegate;if(a){var u=$(a,n);if(u){if(u===y)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===d)throw r=v,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=h;var c=x(t,e,n);if("normal"===c.type){if(r=n.done?v:p,c.arg===y)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r=v,n.method="throw",n.arg=c.arg)}}}function $(t,e){var n=t.iterator[e.method];if(n===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=r,$(t,e),"throw"===e.method))return y;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return y}var i=x(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,y;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=r),e.delegate=null,y):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,y)}function j(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function M(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function R(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(j,this),this.reset(!0)}function P(t){if(t){var e=t[u];if(e)return e.call(t);if("function"===typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){while(++n<t.length)if(o.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=r,e.done=!0,e};return i.next=i}}return{next:I}}function I(){return{value:r,done:!0}}}("object"===("undefined"===typeof t?"undefined":n(t))?t:"object"===("undefined"===typeof window?"undefined":n(window))?window:"object"===("undefined"===typeof self?"undefined":n(self))?self:this)}).call(this,n("2409"),n("adb6")(t))},d06b:function(t,e,n){"use strict";var r=n("e99b");t.exports=function(t){r(r.S,t,{of:function(){var t=arguments.length,e=new Array(t);while(t--)e[t]=arguments[t];return new this(e)}})}},d0f2:function(t,e,n){"use strict";var r=n("a86f"),i=n("201c"),o=n("43ec"),a=n("f417");n("c46f")("match",1,(function(t,e,n,u){return[function(n){var r=t(this),i=void 0==n?void 0:n[e];return void 0!==i?i.call(n,r):new RegExp(n)[e](String(r))},function(t){var e=u(n,t,this);if(e.done)return e.value;var c=r(t),s=String(this);if(!c.global)return a(c,s);var f=c.unicode;c.lastIndex=0;var l,d=[],p=0;while(null!==(l=a(c,s))){var h=String(l[0]);d[p]=h,""===h&&(c.lastIndex=o(s,i(c.lastIndex),f)),p++}return 0===p?null:d}]}))},d1cb:function(t,e,n){var r=n("cea2");t.exports=Array.isArray||function(t){return"Array"==r(t)}},d1cb0:function(t,e,n){var r=n("e99b"),i=n("4024"),o=Math.exp;r(r.S,"Math",{tanh:function(t){var e=i(t=+t),n=i(-t);return e==1/0?1:n==1/0?-1:(e-n)/(o(t)+o(-t))}})},d31c:function(t,e,n){"use strict";var r=n("e99b"),i=n("201c"),o=n("db34"),a="startsWith",u=""[a];r(r.P+r.F*n("581c")(a),"String",{startsWith:function(t){var e=o(this,t,a),n=i(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),r=String(t);return u?u.call(e,r,n):e.slice(n,n+r.length)===r}})},d38f:function(t,e,n){var r=n("e99b"),i=n("4024"),o=Math.exp;r(r.S+r.F*n("0926")((function(){return-2e-17!=!Math.sinh(-2e-17)})),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},d3ef:function(t,e,n){var r=n("26df"),i=n("93ca"),o=n("3471"),a=n("35d4").f;t.exports=function(t){return function(e){var n,u=o(e),c=i(u),s=c.length,f=0,l=[];while(s>f)n=c[f++],r&&!a.call(u,n)||l.push(t?[n,u[n]]:u[n]);return l}}},d3f0:function(t,e,n){var r=n("e99b"),i=n("f597");r(r.S,"Math",{cbrt:function(t){return i(t=+t)*Math.pow(Math.abs(t),1/3)}})},d445:function(t,e,n){var r=n("cea2"),i=n("839a")("toStringTag"),o="Arguments"==r(function(){return arguments}()),a=function(t,e){try{return t[e]}catch(n){}};t.exports=function(t){var e,n,u;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=a(e=Object(t),i))?n:o?r(e):"Object"==(u=r(e))&&"function"==typeof e.callee?"Arguments":u}},d460:function(t,e,n){var r=n("bb8b"),i=n("285b"),o=n("addc"),a=n("4fd4"),u=n("e99b"),c=n("5edc"),s=n("a86f"),f=n("9cff");function l(t,e,n){var u,d,p=arguments.length<4?t:arguments[3],h=i.f(s(t),e);if(!h){if(f(d=o(t)))return l(d,e,n,p);h=c(0)}if(a(h,"value")){if(!1===h.writable||!f(p))return!1;if(u=i.f(p,e)){if(u.get||u.set||!1===u.writable)return!1;u.value=n,r.f(p,e,u)}else r.f(p,e,c(0,n));return!0}return void 0!==h.set&&(h.set.call(p,n),!0)}u(u.S,"Reflect",{set:l})},d4c9:function(t,e,n){"use strict";var r=n("3250");function i(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r})),this.resolve=r(e),this.reject=r(n)}t.exports.f=function(t){return new i(t)}},d61b:function(t,e,n){var r=n("e99b"),i=n("7ff8");r(r.G+r.F*(parseInt!=i),{parseInt:i})},d6d4:function(t,e,n){n("d06b")("WeakSet")},d7d8:function(t,e,n){var r=n("e99b");r(r.P,"String",{repeat:n("4226")})},d8b3:function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},d91d:function(t,e,n){"use strict";var r=n("a86f"),i=n("69b0"),o=n("f417");n("c46f")("search",1,(function(t,e,n,a){return[function(n){var r=t(this),i=void 0==n?void 0:n[e];return void 0!==i?i.call(n,r):new RegExp(n)[e](String(r))},function(t){var e=a(n,t,this);if(e.done)return e.value;var u=r(t),c=String(this),s=u.lastIndex;i(s,0)||(u.lastIndex=0);var f=o(u,c);return i(u.lastIndex,s)||(u.lastIndex=s),null===f?-1:f.index}]}))},db34:function(t,e,n){var r=n("804d"),i=n("3ab0");t.exports=function(t,e,n){if(r(e))throw TypeError("String#"+n+" doesn't accept regex!");return String(i(t))}},dbd0:function(t,e,n){n("d06b")("Map")},dca0:function(t,e,n){n("106b")("Uint8",1,(function(t){return function(e,n,r){return t(this,e,n,r)}}),!0)},dcda:function(t,e,n){var r=n("e99b"),i=Math.asinh;function o(t){return isFinite(t=+t)&&0!=t?t<0?-o(-t):Math.log(t+Math.sqrt(t*t+1)):t}r(r.S+r.F*!(i&&1/i(0)>0),"Math",{asinh:o})},dcea:function(t,e,n){var r=n("953d"),i=n("839a")("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||o[i]===t)}},de49:function(t,e,n){n("26df")&&"g"!=/./g.flags&&n("bb8b").f(RegExp.prototype,"flags",{configurable:!0,get:n("6bf8")})},dee2:function(t,e,n){var r=n("e99b"),i=n("7b3e");r(r.P+r.F*(Date.prototype.toISOString!==i),"Date",{toISOString:i})},def1:function(t,e){t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},df84:function(t,e,n){var r=n("3471"),i=n("285b").f;n("b2be")("getOwnPropertyDescriptor",(function(){return function(t,e){return i(r(t),e)}}))},e0ff:function(t,e,n){var r=n("9cff"),i=n("a86f"),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,r){try{r=n("1e4d")(Function.call,n("285b").f(Object.prototype,"__proto__").set,2),r(t,[]),e=!(t instanceof Array)}catch(i){e=!0}return function(t,n){return o(t,n),e?t.__proto__=n:r(t,n),t}}({},!1):void 0),check:o}},e26b:function(t,e,n){var r=n("803a"),i=n("a86f"),o=n("3250"),a=r.key,u=r.set;r.exp({metadata:function(t,e){return function(n,r){u(t,e,(void 0!==r?i:o)(n),a(r))}}})},e2b9:function(t,e,n){"use strict";var r=n("e99b"),i=n("5826"),o=n("8078"),a=n("201c"),u=n("3250"),c=n("70f2");r(r.P,"Array",{flatMap:function(t){var e,n,r=o(this);return u(t),e=a(r.length),n=c(r,0),i(n,r,r,e,0,1,t,arguments[1]),n}}),n("87b2")("flatMap")},e2f7:function(t,e,n){"use strict";var r=n("3250"),i=n("9cff"),o=n("a618"),a=[].slice,u={},c=function(t,e,n){if(!(e in u)){for(var r=[],i=0;i<e;i++)r[i]="a["+i+"]";u[e]=Function("F,a","return new F("+r.join(",")+")")}return u[e](t,n)};t.exports=Function.bind||function(t){var e=r(this),n=a.call(arguments,1),u=function(){var r=n.concat(a.call(arguments));return this instanceof u?c(e,r.length,r):o(e,r,t)};return i(e.prototype)&&(u.prototype=e.prototype),u}},e3bb:function(t,e,n){var r=n("d445"),i=n("839a")("iterator"),o=n("953d");t.exports=n("76e3").getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[r(t)]}},e418:function(t,e,n){"use strict";n("6b6f")("fontcolor",(function(t){return function(e){return t(this,"font","color",e)}}))},e5b4:function(t,e,n){"use strict";var r=n("e99b"),i=n("e9aa")(5),o="find",a=!0;o in[]&&Array(1)[o]((function(){a=!1})),r(r.P+r.F*a,"Array",{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),n("87b2")(o)},e62d:function(t,e,n){"use strict";var r,i=n("0b34"),o=n("e9aa")(0),a=n("84e8"),u=n("49f2"),c=n("9f15"),s=n("1993"),f=n("9cff"),l=n("0b28"),d=n("0b28"),p=!i.ActiveXObject&&"ActiveXObject"in i,h="WeakMap",v=u.getWeak,y=Object.isExtensible,b=s.ufstore,m=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},g={get:function(t){if(f(t)){var e=v(t);return!0===e?b(l(this,h)).get(t):e?e[this._i]:void 0}},set:function(t,e){return s.def(l(this,h),t,e)}},_=t.exports=n("0bca")(h,m,g,s,!0,!0);d&&p&&(r=s.getConstructor(m,h),c(r.prototype,g),u.NEED=!0,o(["delete","has","get","set"],(function(t){var e=_.prototype,n=e[t];a(e,t,(function(e,i){if(f(e)&&!y(e)){this._f||(this._f=new r);var o=this._f[t](e,i);return"set"==t?this:o}return n.call(this,e,i)}))})))},e680:function(t,e,n){"use strict";var r=n("0b34"),i=n("4fd4"),o=n("cea2"),a=n("a83a"),u=n("5d10"),c=n("0926"),s=n("21d9").f,f=n("285b").f,l=n("bb8b").f,d=n("eb34").trim,p="Number",h=r[p],v=h,y=h.prototype,b=o(n("7ee3")(y))==p,m="trim"in String.prototype,g=function(t){var e=u(t,!1);if("string"==typeof e&&e.length>2){e=m?e.trim():d(e,3);var n,r,i,o=e.charCodeAt(0);if(43===o||45===o){if(n=e.charCodeAt(2),88===n||120===n)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+e}for(var a,c=e.slice(2),s=0,f=c.length;s<f;s++)if(a=c.charCodeAt(s),a<48||a>i)return NaN;return parseInt(c,r)}}return+e};if(!h(" 0o1")||!h("0b1")||h("+0x1")){h=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof h&&(b?c((function(){y.valueOf.call(n)})):o(n)!=p)?a(new v(g(e)),n,h):g(e)};for(var _,w=n("26df")?s(v):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),x=0;w.length>x;x++)i(v,_=w[x])&&!i(h,_)&&l(h,_,f(v,_));h.prototype=y,y.constructor=h,n("84e8")(r,p,h)}},e77f:function(t,e,n){var r=n("e99b");r(r.S,"Math",{clamp:function(t,e,n){return Math.min(n,Math.max(e,t))}})},e7a7:function(t,e,n){"use strict";var r=n("e99b"),i=n("e9aa")(3);r(r.P+r.F*!n("95b6")([].some,!0),"Array",{some:function(t){return i(this,t,arguments[1])}})},e7c8:function(t,e,n){var r=n("21d9"),i=n("0c29"),o=n("a86f"),a=n("0b34").Reflect;t.exports=a&&a.ownKeys||function(t){var e=r.f(o(t)),n=i.f;return n?e.concat(n(t)):e}},e803:function(t,e,n){"use strict";n("6b6f")("sup",(function(t){return function(){return t(this,"sup","","")}}))},e8d7:function(t,e,n){var r=n("9cff"),i=n("0b34").document,o=r(i)&&r(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},e99b:function(t,e,n){var r=n("0b34"),i=n("76e3"),o=n("065d"),a=n("84e8"),u=n("1e4d"),c="prototype",s=function(t,e,n){var f,l,d,p,h=t&s.F,v=t&s.G,y=t&s.S,b=t&s.P,m=t&s.B,g=v?r:y?r[e]||(r[e]={}):(r[e]||{})[c],_=v?i:i[e]||(i[e]={}),w=_[c]||(_[c]={});for(f in v&&(n=e),n)l=!h&&g&&void 0!==g[f],d=(l?g:n)[f],p=m&&l?u(d,r):b&&"function"==typeof d?u(Function.call,d):d,g&&a(g,f,d,t&s.U),_[f]!=d&&o(_,f,p),b&&w[f]!=d&&(w[f]=d)};r.core=i,s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},e9aa:function(t,e,n){var r=n("1e4d"),i=n("1b96"),o=n("8078"),a=n("201c"),u=n("70f2");t.exports=function(t,e){var n=1==t,c=2==t,s=3==t,f=4==t,l=6==t,d=5==t||l,p=e||u;return function(e,u,h){for(var v,y,b=o(e),m=i(b),g=r(u,h,3),_=a(m.length),w=0,x=n?p(e,_):c?p(e,0):void 0;_>w;w++)if((d||w in m)&&(v=m[w],y=g(v,w,b),t))if(n)x[w]=y;else if(y)switch(t){case 3:return!0;case 5:return v;case 6:return w;case 2:x.push(v)}else if(f)return!1;return l?-1:s||f?f:x}}},eb34:function(t,e,n){var r=n("e99b"),i=n("3ab0"),o=n("0926"),a=n("5dc3"),u="["+a+"]",c="​…",s=RegExp("^"+u+u+"*"),f=RegExp(u+u+"*$"),l=function(t,e,n){var i={},u=o((function(){return!!a[t]()||c[t]()!=c})),s=i[t]=u?e(d):a[t];n&&(i[n]=s),r(r.P+r.F*u,"String",i)},d=l.trim=function(t,e){return t=String(i(t)),1&e&&(t=t.replace(s,"")),2&e&&(t=t.replace(f,"")),t};t.exports=l},ec84:function(t,e,n){"use strict";var r=n("e99b"),i=n("a86f"),o=function(t){this._t=i(t),this._i=0;var e,n=this._k=[];for(e in t)n.push(e)};n("3460")(o,"Object",(function(){var t,e=this,n=e._k;do{if(e._i>=n.length)return{value:void 0,done:!0}}while(!((t=n[e._i++])in e._t));return{value:t,done:!1}})),r(r.S,"Reflect",{enumerate:function(t){return new o(t)}})},ed4b:function(t,e,n){"use strict";var r=n("e99b"),i=n("5826"),o=n("8078"),a=n("201c"),u=n("212e"),c=n("70f2");r(r.P,"Array",{flatten:function(){var t=arguments[0],e=o(this),n=a(e.length),r=c(e,0);return i(r,e,e,n,0,void 0===t?1:u(t)),r}}),n("87b2")("flatten")},edec:function(t,e,n){var r,i,o,a=n("1e4d"),u=n("a618"),c=n("bbcc"),s=n("e8d7"),f=n("0b34"),l=f.process,d=f.setImmediate,p=f.clearImmediate,h=f.MessageChannel,v=f.Dispatch,y=0,b={},m="onreadystatechange",g=function(){var t=+this;if(b.hasOwnProperty(t)){var e=b[t];delete b[t],e()}},_=function(t){g.call(t.data)};d&&p||(d=function(t){var e=[],n=1;while(arguments.length>n)e.push(arguments[n++]);return b[++y]=function(){u("function"==typeof t?t:Function(t),e)},r(y),y},p=function(t){delete b[t]},"process"==n("cea2")(l)?r=function(t){l.nextTick(a(g,t,1))}:v&&v.now?r=function(t){v.now(a(g,t,1))}:h?(i=new h,o=i.port2,i.port1.onmessage=_,r=a(o.postMessage,o,1)):f.addEventListener&&"function"==typeof postMessage&&!f.importScripts?(r=function(t){f.postMessage(t+"","*")},f.addEventListener("message",_,!1)):r=m in s("script")?function(t){c.appendChild(s("script"))[m]=function(){c.removeChild(this),g.call(t)}}:function(t){setTimeout(a(g,t,1),0)}),t.exports={set:d,clear:p}},ee06:function(t,e,n){"use strict";n("6b6f")("anchor",(function(t){return function(e){return t(this,"a","name",e)}}))},eec3:function(t,e,n){var r=n("e99b");r(r.S,"Array",{isArray:n("d1cb")})},f334:function(t,e,n){var r=n("e99b"),i=n("a86f"),o=Object.isExtensible;r(r.S,"Reflect",{isExtensible:function(t){return i(t),!o||o(t)}})},f33a:function(t,e,n){n("106b")("Uint32",4,(function(t){return function(e,n,r){return t(this,e,n,r)}}))},f417:function(t,e,n){"use strict";var r=n("d445"),i=RegExp.prototype.exec;t.exports=function(t,e){var n=t.exec;if("function"===typeof n){var o=n.call(t,e);if("object"!==typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==r(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},f4c1:function(t,e,n){var r=n("e99b"),i=Math.imul;r(r.S+r.F*n("0926")((function(){return-5!=i(4294967295,5)||2!=i.length})),"Math",{imul:function(t,e){var n=65535,r=+t,i=+e,o=n&r,a=n&i;return 0|o*a+((n&r>>>16)*a+o*(n&i>>>16)<<16>>>0)}})},f53f:function(t,e,n){n("106b")("Int32",4,(function(t){return function(e,n,r){return t(this,e,n,r)}}))},f597:function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},f5bd:function(t,e,n){var r=n("e99b");r(r.S,"Object",{create:n("7ee3")})},f7e4:function(t,e,n){"use strict";n.d(e,"a",(function(){return c}));function r(t){return null===t||void 0===t}function i(t){return Array.isArray(t)&&0===t.length}var o=function(t,e){var n=(void 0===e?{allowFalse:!0}:e).allowFalse,o={valid:!1,required:!0};return r(t)||i(t)?o:!1!==t||n?(o.valid=!!String(t).trim().length,o):o},a=!0,u=[{name:"allowFalse",default:!0}],c={validate:o,params:u,computesRequired:a}},f955:function(t,e,n){var r=n("803a"),i=n("a86f"),o=r.has,a=r.key;r.exp({hasOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:a(arguments[2]))}})},f966:function(t,e,n){"use strict";var r=n("0b34"),i=n("bb8b"),o=n("26df"),a=n("839a")("species");t.exports=function(t){var e=r[t];o&&e&&!e[a]&&i.f(e,a,{configurable:!0,get:function(){return this}})}},f9bc:function(t,e,n){"use strict";var r=n("0b34"),i=n("26df"),o=n("3d8a"),a=n("fa2c"),u=n("065d"),c=n("6f45"),s=n("0926"),f=n("8b5a"),l=n("212e"),d=n("201c"),p=n("cb85"),h=n("21d9").f,v=n("bb8b").f,y=n("a740"),b=n("bac3"),m="ArrayBuffer",g="DataView",_="prototype",w="Wrong length!",x="Wrong index!",S=r[m],O=r[g],A=r.Math,E=r.RangeError,k=r.Infinity,C=S,$=A.abs,j=A.pow,M=A.floor,R=A.log,P=A.LN2,I="buffer",T="byteLength",F="byteOffset",N=i?"_b":I,L=i?"_l":T,D=i?"_o":F;function V(t,e,n){var r,i,o,a=new Array(n),u=8*n-e-1,c=(1<<u)-1,s=c>>1,f=23===e?j(2,-24)-j(2,-77):0,l=0,d=t<0||0===t&&1/t<0?1:0;for(t=$(t),t!=t||t===k?(i=t!=t?1:0,r=c):(r=M(R(t)/P),t*(o=j(2,-r))<1&&(r--,o*=2),t+=r+s>=1?f/o:f*j(2,1-s),t*o>=2&&(r++,o/=2),r+s>=c?(i=0,r=c):r+s>=1?(i=(t*o-1)*j(2,e),r+=s):(i=t*j(2,s-1)*j(2,e),r=0));e>=8;a[l++]=255&i,i/=256,e-=8);for(r=r<<e|i,u+=e;u>0;a[l++]=255&r,r/=256,u-=8);return a[--l]|=128*d,a}function U(t,e,n){var r,i=8*n-e-1,o=(1<<i)-1,a=o>>1,u=i-7,c=n-1,s=t[c--],f=127&s;for(s>>=7;u>0;f=256*f+t[c],c--,u-=8);for(r=f&(1<<-u)-1,f>>=-u,u+=e;u>0;r=256*r+t[c],c--,u-=8);if(0===f)f=1-a;else{if(f===o)return r?NaN:s?-k:k;r+=j(2,e),f-=a}return(s?-1:1)*r*j(2,f-e)}function q(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function B(t){return[255&t]}function z(t){return[255&t,t>>8&255]}function G(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function W(t){return V(t,52,8)}function H(t){return V(t,23,4)}function K(t,e,n){v(t[_],e,{get:function(){return this[n]}})}function J(t,e,n,r){var i=+n,o=p(i);if(o+e>t[L])throw E(x);var a=t[N]._b,u=o+t[D],c=a.slice(u,u+e);return r?c:c.reverse()}function X(t,e,n,r,i,o){var a=+n,u=p(a);if(u+e>t[L])throw E(x);for(var c=t[N]._b,s=u+t[D],f=r(+i),l=0;l<e;l++)c[s+l]=f[o?l:e-l-1]}if(a.ABV){if(!s((function(){S(1)}))||!s((function(){new S(-1)}))||s((function(){return new S,new S(1.5),new S(NaN),S.name!=m}))){S=function(t){return f(this,S),new C(p(t))};for(var Y,Z=S[_]=C[_],Q=h(C),tt=0;Q.length>tt;)(Y=Q[tt++])in S||u(S,Y,C[Y]);o||(Z.constructor=S)}var et=new O(new S(2)),nt=O[_].setInt8;et.setInt8(0,2147483648),et.setInt8(1,2147483649),!et.getInt8(0)&&et.getInt8(1)||c(O[_],{setInt8:function(t,e){nt.call(this,t,e<<24>>24)},setUint8:function(t,e){nt.call(this,t,e<<24>>24)}},!0)}else S=function(t){f(this,S,m);var e=p(t);this._b=y.call(new Array(e),0),this[L]=e},O=function(t,e,n){f(this,O,g),f(t,S,g);var r=t[L],i=l(e);if(i<0||i>r)throw E("Wrong offset!");if(n=void 0===n?r-i:d(n),i+n>r)throw E(w);this[N]=t,this[D]=i,this[L]=n},i&&(K(S,T,"_l"),K(O,I,"_b"),K(O,T,"_l"),K(O,F,"_o")),c(O[_],{getInt8:function(t){return J(this,1,t)[0]<<24>>24},getUint8:function(t){return J(this,1,t)[0]},getInt16:function(t){var e=J(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=J(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return q(J(this,4,t,arguments[1]))},getUint32:function(t){return q(J(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return U(J(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return U(J(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){X(this,1,t,B,e)},setUint8:function(t,e){X(this,1,t,B,e)},setInt16:function(t,e){X(this,2,t,z,e,arguments[2])},setUint16:function(t,e){X(this,2,t,z,e,arguments[2])},setInt32:function(t,e){X(this,4,t,G,e,arguments[2])},setUint32:function(t,e){X(this,4,t,G,e,arguments[2])},setFloat32:function(t,e){X(this,4,t,H,e,arguments[2])},setFloat64:function(t,e){X(this,8,t,W,e,arguments[2])}});b(S,m),b(O,g),u(O[_],a.VIEW,!0),e[m]=S,e[g]=O},fa2c:function(t,e,n){var r,i=n("0b34"),o=n("065d"),a=n("d8b3"),u=a("typed_array"),c=a("view"),s=!(!i.ArrayBuffer||!i.DataView),f=s,l=0,d=9,p="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");while(l<d)(r=i[p[l++]])?(o(r.prototype,u,!0),o(r.prototype,c,!0)):f=!1;t.exports={ABV:s,CONSTR:f,TYPED:u,VIEW:c}},fb49:function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(e){return{e:!0,v:e}}}},fc02:function(t,e,n){"use strict";var r=n("804d"),i=n("a86f"),o=n("1b0b"),a=n("43ec"),u=n("201c"),c=n("f417"),s=n("0353"),f=n("0926"),l=Math.min,d=[].push,p="split",h="length",v="lastIndex",y=4294967295,b=!f((function(){RegExp(y,"y")}));n("c46f")("split",2,(function(t,e,n,f){var m;return m="c"=="abbc"[p](/(b)*/)[1]||4!="test"[p](/(?:)/,-1)[h]||2!="ab"[p](/(?:ab)*/)[h]||4!="."[p](/(.?)(.?)/)[h]||"."[p](/()()/)[h]>1||""[p](/.?/)[h]?function(t,e){var i=String(this);if(void 0===t&&0===e)return[];if(!r(t))return n.call(i,t,e);var o,a,u,c=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),l=0,p=void 0===e?y:e>>>0,b=new RegExp(t.source,f+"g");while(o=s.call(b,i)){if(a=b[v],a>l&&(c.push(i.slice(l,o.index)),o[h]>1&&o.index<i[h]&&d.apply(c,o.slice(1)),u=o[0][h],l=a,c[h]>=p))break;b[v]===o.index&&b[v]++}return l===i[h]?!u&&b.test("")||c.push(""):c.push(i.slice(l)),c[h]>p?c.slice(0,p):c}:"0"[p](void 0,0)[h]?function(t,e){return void 0===t&&0===e?[]:n.call(this,t,e)}:n,[function(n,r){var i=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,i,r):m.call(String(i),n,r)},function(t,e){var r=f(m,t,this,e,m!==n);if(r.done)return r.value;var s=i(t),d=String(this),p=o(s,RegExp),h=s.unicode,v=(s.ignoreCase?"i":"")+(s.multiline?"m":"")+(s.unicode?"u":"")+(b?"y":"g"),g=new p(b?s:"^(?:"+s.source+")",v),_=void 0===e?y:e>>>0;if(0===_)return[];if(0===d.length)return null===c(g,d)?[d]:[];var w=0,x=0,S=[];while(x<d.length){g.lastIndex=b?x:0;var O,A=c(g,b?d:d.slice(x));if(null===A||(O=l(u(g.lastIndex+(b?0:x)),d.length))===w)x=a(d,x,h);else{if(S.push(d.slice(w,x)),S.length===_)return S;for(var E=1;E<=A.length-1;E++)if(S.push(A[E]),S.length===_)return S;x=w=O}}return S.push(d.slice(w)),S}]}))},fc7c:function(t,e,n){var r=n("e99b");r(r.G+r.W+r.F*!n("fa2c").ABV,{DataView:n("f9bc").DataView})},fda7:function(t,e,n){var r=n("e99b"),i=n("0b34").isFinite;r(r.S,"Number",{isFinite:function(t){return"number"==typeof t&&i(t)}})},fdb0:function(t,e,n){var r=n("e99b");r(r.S,"System",{global:n("0b34")})},fdbf:function(t,e,n){var r=n("803a"),i=n("a86f"),o=r.get,a=r.key;r.exp({getOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:a(arguments[2]))}})},ff02:function(t,e,n){var r=n("e99b"),i=n("285b").f,o=n("a86f");r(r.S,"Reflect",{deleteProperty:function(t,e){var n=i(o(t),e);return!(n&&!n.configurable)&&delete t[e]}})}}]);
                                                  \ No newline at end of file